fox-1.6.49/0000775000175000017500000000000012130343100007375 500000000000000fox-1.6.49/include/0000775000175000017500000000000012130343073011031 500000000000000fox-1.6.49/include/FXSize.h0000664000175000017500000001075712130340076012304 00000000000000/******************************************************************************** * * * S i z e C l a s s * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSize.h,v 1.15 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSIZE_H #define FXSIZE_H namespace FX { /// Size class FXAPI FXSize { public: FXshort w; FXshort h; public: /// Constructors FXSize(){ } FXSize(const FXSize& s):w(s.w),h(s.h){ } FXSize(FXshort ww,FXshort hh):w(ww),h(hh){ } /// Test if empty bool empty() const { return w<=0 || h<=0; } /// Test if zero bool operator!() const { return w==0 && h==0; } /// Equality bool operator==(const FXSize& s) const { return w==s.w && h==s.h; } bool operator!=(const FXSize& s) const { return w!=s.w || h!=s.h; } /// Grow by amount FXSize& grow(FXshort margin); FXSize& grow(FXshort hormargin,FXshort vermargin); FXSize& grow(FXshort leftmargin,FXshort rightmargin,FXshort topmargin,FXshort bottommargin); /// Shrink by amount FXSize& shrink(FXshort margin); FXSize& shrink(FXshort hormargin,FXshort vermargin); FXSize& shrink(FXshort leftmargin,FXshort rightmargin,FXshort topmargin,FXshort bottommargin); /// Assignment FXSize& operator=(const FXSize& s){ w=s.w; h=s.h; return *this; } /// Set value from another size FXSize& set(const FXSize& s){ w=s.w; h=s.h; return *this; } /// Set value from components FXSize& set(FXshort ww,FXshort hh){ w=ww; h=hh; return *this; } /// Assignment operators FXSize& operator+=(const FXSize& s){ w+=s.w; h+=s.h; return *this; } FXSize& operator-=(const FXSize& s){ w-=s.w; h-=s.h; return *this; } FXSize& operator*=(FXshort c){ w*=c; h*=c; return *this; } FXSize& operator/=(FXshort c){ w/=c; h/=c; return *this; } /// Negation FXSize operator-(){ return FXSize(-w,-h); } /// Addition operators FXSize operator+(const FXSize& s) const { return FXSize(w+s.w,h+s.h); } FXSize operator-(const FXSize& s) const { return FXSize(w-s.w,h-s.h); } /// Scale operators friend inline FXSize operator*(const FXSize& s,FXshort c); friend inline FXSize operator*(FXshort c,const FXSize& s); friend inline FXSize operator/(const FXSize& s,FXshort c); friend inline FXSize operator/(FXshort c,const FXSize& s); /// Save object to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXSize& s); /// Load object from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXSize& s); }; inline FXSize operator*(const FXSize& s,FXshort c){ return FXSize(s.w*c,s.h*c); } inline FXSize operator*(FXshort c,const FXSize& s){ return FXSize(c*s.w,c*s.h); } inline FXSize operator/(const FXSize& s,FXshort c){ return FXSize(s.w/c,s.h/c); } inline FXSize operator/(FXshort c,const FXSize& s){ return FXSize(c/s.w,c/s.h); } extern FXAPI FXStream& operator<<(FXStream& store,const FXSize& s); extern FXAPI FXStream& operator>>(FXStream& store,FXSize& s); } #endif fox-1.6.49/include/FXRecentFiles.h0000664000175000017500000001165612130340076013574 00000000000000/******************************************************************************** * * * R e c e n t F i l e s L i s t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRecentFiles.h,v 1.24 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXRECENTFILES_H #define FXRECENTFILES_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { class FXApp; /** * The recent files object manages a most recently used (MRU) file list by * means of the standard system registry. * When connected to a widget, like a menu command, the recent files object * updates the menu commands label to the associated recent file name; when * the menu command is invoked, the recent file object sends its target a * SEL_COMMAND message with the message data set to the associated file name, * of the type const char*. * When adding or removing file names, the recent files object automatically * updates the system registry to record these changes. */ class FXAPI FXRecentFiles : public FXObject { FXDECLARE(FXRecentFiles) private: FXApp *app; // Backlink to application FXObject *target; // Target object to send message FXSelector message; // Message to send FXString group; // MRU File group FXint maxfiles; // Maximum number of files to track private: FXRecentFiles(const FXRecentFiles&); FXRecentFiles &operator=(const FXRecentFiles&); public: long onCmdClear(FXObject*,FXSelector,void*); long onCmdFile(FXObject*,FXSelector,void*); long onUpdFile(FXObject*,FXSelector,void*); long onUpdAnyFiles(FXObject*,FXSelector,void*); public: enum{ ID_CLEAR, ID_ANYFILES, ID_FILE_1, ID_FILE_2, ID_FILE_3, ID_FILE_4, ID_FILE_5, ID_FILE_6, ID_FILE_7, ID_FILE_8, ID_FILE_9, ID_FILE_10, ID_LAST }; public: /// Make new recent files group, using global application instance FXRecentFiles(); /// Make new recent files group with default groupname FXRecentFiles(FXApp* a); /// Make new recent files group with groupname gp FXRecentFiles(FXApp* a,const FXString& gp,FXObject *tgt=NULL,FXSelector sel=0); /// Get application FXApp* getApp() const { return app; } /// Change number of files we're tracking void setMaxFiles(FXint mx){ maxfiles=mx; } /// Return the maximum number of files being tracked FXint getMaxFiles() const { return maxfiles; } /// Set group name void setGroupName(const FXString& name){ group=name; } /// Return group name FXString getGroupName() const { return group; } /// Change the target void setTarget(FXObject *t){ target=t; } /// Get the target FXObject *getTarget() const { return target; } /// Change the message void setSelector(FXSelector sel){ message=sel; } /// Return the message id FXSelector getSelector() const { return message; } /// Obtain the filename at index FXString getFile(FXint index) const; /// Change the filename at index void setFile(FXint index,const FXString& filename); /// Append a file void appendFile(const FXString& filename); /// Remove a file void removeFile(const FXString& filename); /// Clear the list of files void clear(); /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXRecentFiles(); }; } #endif fox-1.6.49/include/FXPipe.h0000664000175000017500000000554712130340076012270 00000000000000/******************************************************************************** * * * P i p e C l a s s * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPipe.h,v 1.7.2.1 2007/08/02 21:31:17 fox Exp $ * ********************************************************************************/ #ifndef FXPIPE_H #define FXPIPE_H #ifndef FXIO_H #include "FXIO.h" #endif //////////////////////////// UNDER DEVELOPMENT //////////////////////////////// namespace FX { /** * Pipe i/o device. */ class FXAPI FXPipe : public FXIO { private: FXPipe(const FXPipe&); FXPipe &operator=(const FXPipe&); public: /// Construct socket FXPipe(){ } /// Construct file and attach existing handle h FXPipe(FXInputHandle handle,FXuint mode); /// Open device with access mode and handle virtual bool open(FXInputHandle handle,FXuint mode); /// Read block of bytes, returning number of bytes read virtual FXival readBlock(void* data,FXival count); /// Write block of bytes, returning number of bytes written virtual FXival writeBlock(const void* data,FXival count); /// Close socket virtual bool close(); /// Create a named pipe static bool create(const FXString& file,FXuint perm=FXIO::OwnerReadWrite|FXIO::GroupReadWrite|FXIO::OtherReadWrite); /// Destroy virtual ~FXPipe(); }; } #endif fox-1.6.49/include/FXSpring.h0000664000175000017500000001044612130340076012627 00000000000000/******************************************************************************** * * * S p r i n g C o n t a i n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 2003,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSpring.h,v 1.8 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXSPRING_H #define FXSPRING_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /** * The spring widgets, when properly embedded side by side in a horizontal * frame or vertical frame widget, behave like a set of connected springs * of various lengths (hence the name!). The parameters relw (or relh) * determines the length of the spring. The actual length is not really * important; the only thing that counts is the relative length of one * spring widget to that of another, although the length does determine * the default size. The special value zero may be given for relw (or relh) * to cause the spring to calculate its default width (height) normally, * just like the Packer base class does. * In a typical scenario, either the relative width or height is set to * zero, an the flag LAYOUT_FILL_X or LAYOUT_FILL_Y is passed. When * placed inside a horizontal frame, the LAYOUT_FILL_X together with * the relative widths of the springs will cause a fixed width-ratio * between the springs. * You also can mix normal controls and springs together in a horizontal * or vertical frames to provide arbitrary stretchable spacing between * widgets; in this case, the springs do not need to have any children. * Since the spring widget is derived from the packer layout manager, * it provides the same layout behavior as packer. */ class FXAPI FXSpring : public FXPacker { FXDECLARE(FXSpring) protected: FXint relWidth; // Relative width FXint relHeight; // Relative height protected: FXSpring(){} private: FXSpring(const FXSpring&); FXSpring &operator=(const FXSpring&); public: /// Construct packer layout manager FXSpring(FXComposite *p,FXuint opts=0,FXint relw=0,FXint relh=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change relative width void setRelativeWidth(FXint relw); /// Return relative width FXint getRelativeWidth() const { return relWidth; } /// Change relative height void setRelativeHeight(FXint relh); /// Return relative height FXint getRelativeHeight() const { return relHeight; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXTextField.h0000664000175000017500000003225012130340076013252 00000000000000/******************************************************************************** * * * T e x t F i e l d W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTextField.h,v 1.62 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTEXTFIELD_H #define FXTEXTFIELD_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Textfield styles enum { TEXTFIELD_PASSWD = 0x00080000, /// Password mode TEXTFIELD_INTEGER = 0x00100000, /// Integer mode TEXTFIELD_REAL = 0x00200000, /// Real mode TEXTFIELD_READONLY = 0x00400000, /// NOT editable TEXTFIELD_ENTER_ONLY = 0x00800000, /// Only callback when enter hit TEXTFIELD_LIMITED = 0x01000000, /// Limit entry to given number of columns TEXTFIELD_OVERSTRIKE = 0x02000000, /// Overstrike mode TEXTFIELD_AUTOGRAY = 0x04000000, /// Automatically gray out text field when not updated TEXTFIELD_AUTOHIDE = 0x08000000, /// Automatically hide text field when not updated TEXTFIELD_NORMAL = FRAME_SUNKEN|FRAME_THICK }; /** * A text field is a single-line text entry widget. * The text field widget supports clipboard for cut-and-paste * operations. * Text input may be constrained to a certain format; the built-in * capabilities support integer and real number entry constraints; * additional constraints on the input may be implemented by intercepting * the SEL_VERIFY message; a custom handler should examine the tentative * input string passed as type const FXchar* in the message data, and return * a value of "0" if the new input is accepted. * During text entry, the text field sends a SEL_CHANGED message to its target, * with the message data set to the current text value of type const FXchar*. * When the text is accepted by hitting ENTER, the SEL_COMMAND message is sent. * The text field also sends SEL_COMMAND when the focus moves to another control. * TEXTFIELD_ENTER_ONLY can be passed to suppress this feature. Typically, this * flag is used in dialogs that close when ENTER is hit in a text field. */ class FXAPI FXTextField : public FXFrame { FXDECLARE(FXTextField) protected: FXString contents; // Edited text const FXchar *delimiters; // Set of delimiters FXFont *font; // Text font FXColor textColor; // Text color FXColor selbackColor; // Selected background color FXColor seltextColor; // Selected text color FXColor cursorColor; // Color of the Cursor FXint cursor; // Cursor position FXint anchor; // Anchor position FXint columns; // Number of columns visible FXint shift; // Shift amount FXString clipped; // Clipped text FXString help; // Help string FXString tip; // Tooltip protected: FXTextField(); FXint index(FXint x) const; FXint coord(FXint i) const; void drawCursor(FXuint state); void drawTextRange(FXDCWindow& dc,FXint fm,FXint to); void drawTextFragment(FXDCWindow& dc,FXint x,FXint y,FXint fm,FXint to); void drawPWDTextFragment(FXDCWindow& dc,FXint x,FXint y,FXint fm,FXint to); FXint rightWord(FXint pos) const; FXint leftWord(FXint pos) const; FXint wordStart(FXint pos) const; FXint wordEnd(FXint pos) const; private: FXTextField(const FXTextField&); FXTextField& operator=(const FXTextField&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onVerify(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onSelectionLost(FXObject*,FXSelector,void*); long onSelectionGained(FXObject*,FXSelector,void*); long onSelectionRequest(FXObject*,FXSelector,void* ptr); long onClipboardLost(FXObject*,FXSelector,void*); long onClipboardGained(FXObject*,FXSelector,void*); long onClipboardRequest(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onBlink(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdSetRealValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdGetRealValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdCursorHome(FXObject*,FXSelector,void*); long onCmdCursorEnd(FXObject*,FXSelector,void*); long onCmdCursorRight(FXObject*,FXSelector,void*); long onCmdCursorLeft(FXObject*,FXSelector,void*); long onCmdCursorWordLeft(FXObject*,FXSelector,void*); long onCmdCursorWordRight(FXObject*,FXSelector,void*); long onCmdCursorWordStart(FXObject*,FXSelector,void*); long onCmdCursorWordEnd(FXObject*,FXSelector,void*); long onCmdMark(FXObject*,FXSelector,void*); long onCmdExtend(FXObject*,FXSelector,void*); long onCmdSelectAll(FXObject*,FXSelector,void*); long onCmdDeselectAll(FXObject*,FXSelector,void*); long onCmdCutSel(FXObject*,FXSelector,void*); long onCmdCopySel(FXObject*,FXSelector,void*); long onCmdPasteSel(FXObject*,FXSelector,void*); long onCmdPasteMiddle(FXObject*,FXSelector,void*); long onCmdDeleteSel(FXObject*,FXSelector,void*); long onCmdDeleteAll(FXObject*,FXSelector,void*); long onCmdOverstString(FXObject*,FXSelector,void*); long onCmdInsertString(FXObject*,FXSelector,void*); long onCmdBackspace(FXObject*,FXSelector,void*); long onCmdDelete(FXObject*,FXSelector,void*); long onCmdToggleEditable(FXObject*,FXSelector,void*); long onUpdToggleEditable(FXObject*,FXSelector,void*); long onCmdToggleOverstrike(FXObject*,FXSelector,void*); long onUpdToggleOverstrike(FXObject*,FXSelector,void*); long onUpdHaveSelection(FXObject*,FXSelector,void*); long onUpdSelectAll(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Default text delimiters static const FXchar textDelimiters[]; public: enum{ ID_CURSOR_HOME=FXFrame::ID_LAST, ID_CURSOR_END, ID_CURSOR_RIGHT, ID_CURSOR_LEFT, ID_CURSOR_WORD_LEFT, ID_CURSOR_WORD_RIGHT, ID_CURSOR_WORD_START, ID_CURSOR_WORD_END, ID_MARK, ID_EXTEND, ID_SELECT_ALL, ID_DESELECT_ALL, ID_CUT_SEL, ID_COPY_SEL, ID_PASTE_SEL, ID_PASTE_MIDDLE, ID_DELETE_SEL, ID_DELETE_ALL, ID_OVERST_STRING, ID_INSERT_STRING, ID_BACKSPACE, ID_DELETE, ID_TOGGLE_EDITABLE, ID_TOGGLE_OVERSTRIKE, ID_BLINK, ID_LAST }; public: /// Construct text field wide enough to display ncols columns FXTextField(FXComposite* p,FXint ncols,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=TEXTFIELD_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Perform layout virtual void layout(); /// Enable text field virtual void enable(); /// Disable text field virtual void disable(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Yes, text field may receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Set editable mode void setEditable(FXbool edit=TRUE); /// Return TRUE if text field may be edited FXbool isEditable() const; /// Set overstrike mode void setOverstrike(FXbool over=TRUE); /// Return TRUE if overstrike mode in effect FXbool isOverstrike() const; /// Set cursor position void setCursorPos(FXint pos); /// Return cursor position FXint getCursorPos() const { return cursor; } /// Change anchor position void setAnchorPos(FXint pos); /// Return anchor position FXint getAnchorPos() const { return anchor; } /// Change the text and move cursor to end void setText(const FXString& text,FXbool notify=FALSE); /// Get the text for this label FXString getText() const { return contents; } /// Set the text font void setFont(FXFont* fnt); /// Get the text font FXFont* getFont() const { return font; } /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const { return textColor; } /// Change selected background color void setSelBackColor(FXColor clr); /// Return selected background color FXColor getSelBackColor() const { return selbackColor; } /// Change selected text color void setSelTextColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const { return seltextColor; } /// Changes the cursor color void setCursorColor(FXColor clr); /// Return the cursor color FXColor getCursorColor() const { return cursorColor; } /** * Change the default width of the text field in terms of a number * of columns times the width of the numeral '8'. */ void setNumColumns(FXint cols); /// Return number of columns FXint getNumColumns() const { return columns; } /** * Change text justification mode. The justify mode is a combination of * horizontal justification (JUSTIFY_LEFT, JUSTIFY_RIGHT, or JUSTIFY_CENTER_X), * and vertical justification (JUSTIFY_TOP, JUSTIFY_BOTTOM, JUSTIFY_CENTER_Y). * Note that JUSTIFY_CENTER_X can not be set from the constructor since by * default text fields are left-justified. */ void setJustify(FXuint mode); /// Return text justification mode FXuint getJustify() const; /// Change word delimiters void setDelimiters(const FXchar* delims=textDelimiters){ delimiters=delims; } /// Return word delimiters const FXchar* getDelimiters() const { return delimiters; } /// Set the status line help text for this label void setHelpText(const FXString& text){ help=text; } /// Get the status line help text for this label const FXString& getHelpText() const { return help; } /// Set the tool tip message for this text field void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for this text field const FXString& getTipText() const { return tip; } /// Change text style void setTextStyle(FXuint style); /// Return text style FXuint getTextStyle() const; /// Select all text FXbool selectAll(); /// Select len characters starting at given position pos FXbool setSelection(FXint pos,FXint len); /// Extend the selection from the anchor to the given position FXbool extendSelection(FXint pos); /// Unselect the text FXbool killSelection(); /// Return TRUE if position pos is selected FXbool isPosSelected(FXint pos) const; /// Return TRUE if position is fully visible FXbool isPosVisible(FXint pos) const; /// Scroll text to make the given position visible void makePositionVisible(FXint pos); /// Save text field to a stream virtual void save(FXStream& store) const; /// Load text field from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXTextField(); }; } #endif fox-1.6.49/include/fxascii.h0000664000175000017500000000556112130340076012557 00000000000000/******************************************************************************** * * * A S C I I C h a r a c t e r I n f o * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: fxascii.h,v 1.3 2006/01/22 17:58:13 fox Exp $ * ********************************************************************************/ #ifndef FXASCII_H #define FXASCII_H namespace FX { namespace Ascii { /// Get numeric value of character (this includes hex value) extern FXAPI FXint digitValue(FXchar asc); /// Ascii-only common functions extern FXAPI bool hasCase(FXchar asc); extern FXAPI bool isUpper(FXchar asc); extern FXAPI bool isLower(FXchar asc); extern FXAPI bool isTitle(FXchar asc); extern FXAPI bool isAscii(FXchar asc); extern FXAPI bool isLetter(FXchar asc); extern FXAPI bool isDigit(FXchar asc); extern FXAPI bool isAlphaNumeric(FXchar asc); extern FXAPI bool isControl(FXchar asc); extern FXAPI bool isSpace(FXchar asc); extern FXAPI bool isBlank(FXchar asc); extern FXAPI bool isPunct(FXchar asc); extern FXAPI bool isGraph(FXchar asc); extern FXAPI bool isPrint(FXchar asc); extern FXAPI bool isHexDigit(FXchar asc); extern FXAPI bool isSymbol(FXchar asc); extern FXAPI bool isSep(FXchar asc); /// Case conversion extern FXAPI FXchar toUpper(FXchar asc); extern FXAPI FXchar toLower(FXchar asc); extern FXAPI FXchar toTitle(FXchar asc); } } #endif fox-1.6.49/include/FXTGAImage.h0000664000175000017500000000614412130340076012743 00000000000000/******************************************************************************** * * * T A R G A I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Janusz Ganczarski. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTGAImage.h,v 1.18 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXTGAIMAGE_H #define FXTGAIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// TARGA graphics file class FXAPI FXTGAImage : public FXImage { FXDECLARE(FXTGAImage) protected: FXTGAImage(){} private: FXTGAImage(const FXTGAImage&); FXTGAImage &operator=(const FXTGAImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct image from memory stream formatted in TARGA file FXTGAImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in TARGA file virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in TARGA format virtual bool loadPixels(FXStream& store); /// Destroy image virtual ~FXTGAImage(); }; /** * Check if stream contains a TARGA, return TRUE if so. */ extern FXAPI bool fxcheckTGA(FXStream& store); /** * Load an TARGA file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadTGA(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an TARGA file to a stream. */ extern FXAPI bool fxsaveTGA(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXKnob.h0000664000175000017500000001622112130340076012253 00000000000000/******************************************************************************** * * * K n o b W i d g e t * * * ********************************************************************************* * Copyright (C) 2005,2006 by Leandro Nini. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXKnob.h,v 1.7 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXKNOB_H #define FXKNOB_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Knob Control styles enum { KNOB_NEEDLE = 0, /// Use a needle as indicator KNOB_DOT = 0x00008000, /// Use a dot as indicator KNOB_TICKS = 0x00010000, /// Show ticks around the knob KNOB_INDICATOR = 0x00020000, /// Show only the indicator (like a speedometer) KNOB_NORMAL = (KNOB_NEEDLE|KNOB_TICKS) /// Normal knob looks }; /** * The knob widget is a valuator widget which provides simple linear value range. * While being moved, the knob sends SEL_CHANGED messages to its target; * at the end of the interaction, a final SEL_COMMAND message is sent. * The message data represents the current knob value, of type FXint. */ class FXAPI FXKnob : public FXFrame { FXDECLARE(FXKnob) protected: FXint range[2]; // Reported data range FXdouble limits[2]; // Starting and ending positions FXColor lineColor; // Color of indicator needle FXint pos; // Reported data position FXint incr; // Increment when auto-sliding FXint delta; // Interval between ticks FXString help; // Help string FXString tip; // Tip string protected: FXKnob(); FXint calcValue(FXint x,FXint y); private: FXKnob(const FXKnob&); FXKnob &operator=(const FXKnob&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onAutoSlide(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetRealValue(FXObject*,FXSelector,void*); long onCmdGetRealValue(FXObject*,FXSelector,void*); long onCmdSetIntRange(FXObject*,FXSelector,void*); long onCmdGetIntRange(FXObject*,FXSelector,void*); long onCmdSetRealRange(FXObject*,FXSelector,void*); long onCmdGetRealRange(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: enum{ ID_AUTOSLIDE=FXFrame::ID_LAST, ID_LAST }; public: /// Construct a knob widget FXKnob(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=KNOB_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Returns true because a knob can receive focus virtual bool canFocus() const; /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Enable the knob virtual void enable(); /// Disable the knob virtual void disable(); /// Change knob value void setValue(FXint value,FXbool notify=FALSE); /// Return knob value FXint getValue() const { return pos; } /// Change the knob's range void setRange(FXint lo,FXint hi,FXbool notify=FALSE); /// Get the knob's current range void getRange(FXint& lo,FXint& hi) const { lo=range[0]; hi=range[1]; } /** * Change the knob's movement limits (start and ending angles) * accept values in degrees from 0 (south) to 360. */ void setLimits(FXint start,FXint end,FXbool notify=FALSE); /// Get the knob's current limits void getLimits(FXint& start,FXint& end); /// Change the knob style FXuint getKnobStyle() const; /// Get the current knob style void setKnobStyle(FXuint style); /// Get the knob's auto-increment/decrement value FXint getIncrement() const { return incr; } /// Change the knob's auto-increment/decrement value void setIncrement(FXint inc){ incr=inc; } /// Change the delta between ticks void setTickDelta(FXint dist); /// Get delta between ticks FXint getTickDelta() const { return delta; } /// Change the indicator needle color void setLineColor(FXColor clr); /// Get the current indicator needle color FXColor getLineColor() const { return lineColor; } /// Set the help text to be displayed on the status line void setHelpText(const FXString& text){ help=text; } /// Get the current help text const FXString& getHelpText() const { return help; } /// Set the tip text to be displayed in the tooltip void setTipText(const FXString& text){ tip=text; } /// Get the current tooltip text value const FXString& getTipText() const { return tip; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy the knob virtual ~FXKnob(); }; } #endif fox-1.6.49/include/FXFileDialog.h0000664000175000017500000001466512130340076013373 00000000000000/******************************************************************************** * * * F i l e S e l e c t i o n D i a l o g * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFileDialog.h,v 1.34 2006/01/23 06:03:15 fox Exp $ * ********************************************************************************/ #ifndef FXFILEDIALOG_H #define FXFILEDIALOG_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { class FXFileSelector; /// File selection dialog class FXAPI FXFileDialog : public FXDialogBox { FXDECLARE(FXFileDialog) protected: FXFileSelector *filebox; protected: FXFileDialog(){} void initdialog(); private: FXFileDialog(const FXFileDialog&); FXFileDialog &operator=(const FXFileDialog&); public: /// Construct file dialog box FXFileDialog(FXWindow* owner,const FXString& name,FXuint opts=0,FXint x=0,FXint y=0,FXint w=500,FXint h=300); /// Construct free-floating file dialog box FXFileDialog(FXApp* a,const FXString& name,FXuint opts=0,FXint x=0,FXint y=0,FXint w=500,FXint h=300); /// Hide this window virtual void hide(); /// Change file name void setFilename(const FXString& path); /// Return file name, if any FXString getFilename() const; /// Return empty-string terminated list of selected file names, or NULL if none selected FXString* getFilenames() const; /// Change file pattern void setPattern(const FXString& ptrn); /// Return file pattern FXString getPattern() const; /** * Change the list of file patterns shown in the file dialog. * Each pattern comprises an optional name, followed by a pattern in * parentheses. The patterns are separated by newlines. * For example, * * "*\n*.cpp,*.cc\n*.hpp,*.hh,*.h" * * and * * "All Files (*)\nC++ Sources (*.cpp,*.cc)\nC++ Headers (*.hpp,*.hh,*.h)" * * will set the same three patterns, but the former shows no pattern names. */ void setPatternList(const FXString& patterns); /// Return list of patterns FXString getPatternList() const; /** * After setting the list of patterns, this call will * initially select pattern n as the active one. */ void setCurrentPattern(FXint n); /// Return current pattern number FXint getCurrentPattern() const; /// Get pattern text for given pattern number FXString getPatternText(FXint patno) const; /// Change pattern text for pattern number void setPatternText(FXint patno,const FXString& text); /// Return number of patterns FXint getNumPatterns() const; /// Allow pattern entry void allowPatternEntry(FXbool allow); /// Return TRUE if pattern entry is allowed FXbool allowPatternEntry() const; /// Change directory void setDirectory(const FXString& path); /// Return directory FXString getDirectory() const; /// Set the inter-item spacing (in pixels) void setItemSpace(FXint s); /// Return the inter-item spacing (in pixels) FXint getItemSpace() const; /// Change file selection mode void setSelectMode(FXuint mode); /// Return file selection mode FXuint getSelectMode() const; /// Change wildcard matching mode void setMatchMode(FXuint mode); /// Return wildcard matching mode FXuint getMatchMode() const; /// Return TRUE if showing hidden files FXbool showHiddenFiles() const; /// Show or hide hidden files void showHiddenFiles(FXbool showing); /// Return TRUE if image preview on FXbool showImages() const; /// Show or hide preview images void showImages(FXbool showing); /// Return images preview size FXint getImageSize() const; /// Change images preview size void setImageSize(FXint size); /// Show readonly button void showReadOnly(FXbool show); /// Return TRUE if readonly is shown FXbool shownReadOnly() const; /// Set initial state of readonly button void setReadOnly(FXbool state); /// Get readonly state FXbool getReadOnly() const; /// Change File List style void setFileBoxStyle(FXuint style); /// Return File List style FXuint getFileBoxStyle() const; /// Allow or disallow navigation void allowNavigation(FXbool navigable); /// Is navigation allowed? FXbool allowNavigation() const; /// Open existing filename static FXString getOpenFilename(FXWindow* owner,const FXString& caption,const FXString& path,const FXString& patterns="*",FXint initial=0); /// Open multiple existing files static FXString* getOpenFilenames(FXWindow* owner,const FXString& caption,const FXString& path,const FXString& patterns="*",FXint initial=0); /// Save to filename static FXString getSaveFilename(FXWindow* owner,const FXString& caption,const FXString& path,const FXString& patterns="*",FXint initial=0); /// Open directory name static FXString getOpenDirectory(FXWindow* owner,const FXString& caption,const FXString& path); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXFileDialog(); }; } #endif fox-1.6.49/include/FXDate.h0000664000175000017500000001324412130340076012241 00000000000000/******************************************************************************** * * * D a t e C l a s s * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDate.h,v 1.10.2.1 2006/07/17 17:57:30 fox Exp $ * ********************************************************************************/ #ifndef FXDATE_H #define FXDATE_H namespace FX { /** * Gregorian date object. */ class FXAPI FXDate { private: FXuint julian; private: static const FXchar shortMonthName[12][4]; static const FXchar longMonthName[12][10]; static const FXchar shortWeekDay[7][4]; static const FXchar longWeekDay[7][10]; protected: static void greg2jul(FXuint& jd,FXint y,FXint m,FXint d); static void jul2greg(FXuint jd,FXint& y,FXint& m,FXint& d); public: /// Names for the months enum { Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec }; /// Names for the weekdays enum { Sun=0,Mon,Tue,Wed,Thu,Fri,Sat }; public: /// Default constructor FXDate(){} /// Copy constructor FXDate(const FXDate& date):julian(date.julian){} /// Initialize with year, month, and day FXDate(FXint y,FXint m,FXint d); /// Initialize with julian day number FXDate(FXuint j):julian(j){} /// Set julian day number void setJulian(FXuint d){ julian=d; } /// Get julian day number FXuint getJulian() const { return julian; } /// Set to year, month, and day void setDate(FXint y,FXint m,FXint d); /// Get year, month, and day void getDate(FXint& y,FXint& m,FXint& d) const; /// Return day of the month FXint day() const; /// Return month FXint month() const; /// Return year FXint year() const; /// Return day of the week FXint dayOfWeek() const; /// Return day of year FXint dayOfYear() const; /// Return days in this month FXint daysInMonth() const; /// Return true if leap year bool leapYear() const; /// Is the value a leap year static bool leapYear(FXint y); /// Get the name of the month static const FXchar *monthName(FXint m){ return longMonthName[m-1]; } /// Get the abbreviated name of the month static const FXchar *monthNameShort(FXint m){ return shortMonthName[m-1]; } /// Get the name of the day static const FXchar *dayName(FXint d){ return longWeekDay[d]; } /// Get the abbreviated name of the day static const FXchar *dayNameShort(FXint d){ return shortWeekDay[d]; } /// Return current local date static FXDate localDate(); /// Return current UTC (Zulu) date static FXDate zuluDate(); /// Assignment FXDate& operator=(const FXDate& date){julian=date.julian;return *this;} /// Assignment operators FXDate& operator+=(FXint x){ julian+=x; return *this; } FXDate& operator-=(FXint x){ julian-=x; return *this; } /// Increment and decrement FXDate& operator++(){ julian++; return *this; } FXDate& operator--(){ julian--; return *this; } /// Equality tests bool operator==(const FXDate& date) const { return julian==date.julian;} bool operator!=(const FXDate& date) const { return julian!=date.julian;} /// Inequality tests bool operator<(const FXDate& date) const { return julian(const FXDate& date) const { return julian>date.julian;} bool operator>=(const FXDate& date) const { return julian>=date.julian;} /// Add days to date yielding another date friend inline FXDate operator+(const FXDate& d,FXint x); friend inline FXDate operator+(FXint x,const FXDate& d); /// Substract dates yielding days friend inline FXint operator-(const FXDate& a,const FXDate& b); /// save to stream friend FXAPI FXStream& operator<<(FXStream& store,const FXDate& d); /// load from stream friend FXAPI FXStream& operator>>(FXStream& store,FXDate& d); }; inline FXDate operator+(const FXDate& d,FXint x){ return FXDate(d.julian+x); } inline FXDate operator+(FXint x,const FXDate& d){ return FXDate(x+d.julian); } inline FXint operator-(const FXDate& a,const FXDate& b){return a.julian-b.julian; } extern FXAPI FXStream& operator<<(FXStream& store,const FXDate& d); extern FXAPI FXStream& operator>>(FXStream& store,FXDate& d); } #endif fox-1.6.49/include/FXExtentd.h0000664000175000017500000001140312130340076012772 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n E x t e n t C l a s s * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXExtentd.h,v 1.8.2.1 2006/07/25 01:35:36 fox Exp $ * ********************************************************************************/ #ifndef FXEXTENTD_H #define FXEXTENTD_H namespace FX { /// Extent class FXAPI FXExtentd { public: FXVec2d lower; FXVec2d upper; public: /// Default constructor FXExtentd(){} /// Copy constructor FXExtentd(const FXExtentd& ext):lower(ext.lower),upper(ext.upper){} /// Initialize from two vectors FXExtentd(const FXVec2d& lo,const FXVec2d& hi):lower(lo),upper(hi){} /// Initialize from six numbers FXExtentd(FXdouble xlo,FXdouble xhi,FXdouble ylo,FXdouble yhi):lower(xlo,ylo),upper(xhi,yhi){} /// Assignment FXExtentd& operator=(const FXExtentd& ext){ lower=ext.lower; upper=ext.upper; return *this; } /// Indexing with 0..1 FXVec2d& operator[](FXint i){ return (&lower)[i]; } /// Indexing with 0..1 const FXVec2d& operator[](FXint i) const { return (&lower)[i]; } /// Comparison bool operator==(const FXExtentd& ext) const { return lower==ext.lower && upper==ext.upper;} bool operator!=(const FXExtentd& ext) const { return lower!=ext.lower || upper!=ext.upper;} /// Width of box FXdouble width() const { return upper.x-lower.x; } /// Height of box FXdouble height() const { return upper.y-lower.y; } /// Longest side FXdouble longest() const; /// shortest side FXdouble shortest() const; /// Length of diagonal FXdouble diameter() const; /// Get radius of box FXdouble radius() const; /// Compute diagonal FXVec2d diagonal() const; /// Get center of box FXVec2d center() const; /// Test if empty bool empty() const; /// Test if box contains point x,y bool contains(FXdouble x,FXdouble y) const; /// Test if box contains point p bool contains(const FXVec2d& p) const; /// Test if box properly contains another box bool contains(const FXExtentd& ext) const; /// Include point FXExtentd& include(FXdouble x,FXdouble y); /// Include point FXExtentd& include(const FXVec2d& v); /// Include given range into extent FXExtentd& include(const FXExtentd& ext); /// Test if bounds overlap friend FXAPI bool overlap(const FXExtentd& a,const FXExtentd& b); /// Get corner number 0..3 FXVec2d corner(FXint c) const { return FXVec2d((&lower)[c&1].x, (&lower)[(c>>1)&1].y); } /// Union of two boxes friend FXAPI FXExtentd unite(const FXExtentd& a,const FXExtentd& b); /// Intersection of two boxes friend FXAPI FXExtentd intersect(const FXExtentd& a,const FXExtentd& b); /// Save object to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXExtentd& ext); /// Load object from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXExtentd& ext); }; extern FXAPI bool overlap(const FXExtentd& a,const FXExtentd& b); extern FXAPI FXExtentd unite(const FXExtentd& a,const FXExtentd& b); extern FXAPI FXExtentd intersect(const FXExtentd& a,const FXExtentd& b); extern FXAPI FXStream& operator<<(FXStream& store,const FXExtentd& ext); extern FXAPI FXStream& operator>>(FXStream& store,FXExtentd& ext); } #endif fox-1.6.49/include/FXCP1255Codec.h0000644000175000017500000000110611637250333013140 00000000000000#ifndef FXCP1255CODEC_H #define FXCP1255CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1255 Codec class FXAPI FXCP1255Codec : public FXTextCodec { FXDECLARE(FXCP1255Codec) public: FXCP1255Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1255Codec(){} }; } #endif fox-1.6.49/include/FXCP437Codec.h0000644000175000017500000000107711637250333013070 00000000000000#ifndef FXCP437CODEC_H #define FXCP437CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP437 Codec class FXAPI FXCP437Codec : public FXTextCodec { FXDECLARE(FXCP437Codec) public: FXCP437Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP437Codec(){} }; } #endif fox-1.6.49/include/FXSpinner.h0000664000175000017500000001636712130340076013013 00000000000000/******************************************************************************** * * * S p i n B u t t o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Lyle Johnson. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSpinner.h,v 1.46 2006/02/06 03:03:40 fox Exp $ * ********************************************************************************/ #ifndef FXSPINNER_H #define FXSPINNER_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /// Spinner Options enum { SPIN_NORMAL = 0, /// Normal, non-cyclic SPIN_CYCLIC = 0x00020000, /// Cyclic spinner SPIN_NOTEXT = 0x00040000, /// No text visible SPIN_NOMAX = 0x00080000, /// Spin all the way up to infinity SPIN_NOMIN = 0x00100000 /// Spin all the way down to -infinity }; class FXTextField; class FXArrowButton; /// Spinner control class FXAPI FXSpinner : public FXPacker { FXDECLARE(FXSpinner) protected: FXTextField *textField; // Text field FXArrowButton *upButton; // The up button FXArrowButton *downButton; // The down button FXint range[2]; // Reported data range FXint incr; // Increment FXint pos; // Current position protected: FXSpinner(); private: FXSpinner(const FXSpinner&); FXSpinner& operator=(const FXSpinner&); public: long onUpdIncrement(FXObject*,FXSelector,void*); long onCmdIncrement(FXObject*,FXSelector,void*); long onUpdDecrement(FXObject*,FXSelector,void*); long onCmdDecrement(FXObject*,FXSelector,void*); long onCmdEntry(FXObject*,FXSelector,void*); long onChgEntry(FXObject*,FXSelector,void*); long onWheelEntry(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetIntRange(FXObject*,FXSelector,void*); long onCmdGetIntRange(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); public: enum{ ID_INCREMENT=FXPacker::ID_LAST, ID_DECREMENT, ID_ENTRY, ID_LAST }; public: /// Construct a spinner FXSpinner(FXComposite *p,FXint cols,FXObject *tgt=NULL,FXSelector sel=0,FXuint opts=SPIN_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Perform layout virtual void layout(); /// Disable spinner virtual void disable(); /// Enable spinner virtual void enable(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Increment spinner void increment(FXbool notify=FALSE); /// Increment spinner by certain amount void incrementByAmount(FXint amount,FXbool notify=FALSE); /// Decrement spinner void decrement(FXbool notify=FALSE); /// Decrement spinner by certain amount void decrementByAmount(FXint amount, FXbool notify=FALSE); /// Return TRUE if in cyclic mode FXbool isCyclic() const; /// Set to cyclic mode, i.e. wrap around at maximum/minimum void setCyclic(FXbool cyclic); /// Return TRUE if text is visible FXbool isTextVisible() const; /// Set text visible flag void setTextVisible(FXbool shown); /// Change current value virtual void setValue(FXint value,FXbool notify=FALSE); /// Return current value FXint getValue() const { return pos; } /// Change the spinner's range void setRange(FXint lo,FXint hi,FXbool notify=FALSE); /// Get the spinner's current range void getRange(FXint& lo,FXint& hi) const { lo=range[0]; hi=range[1]; } /// Change spinner increment void setIncrement(FXint increment); /// Return spinner increment FXint getIncrement() const { return incr; } /// Set the text font void setFont(FXFont *fnt); /// Get the text font FXFont *getFont() const; /// Set the status line help text for this spinner void setHelpText(const FXString& text); /// Get the status line help text for this spinner const FXString& getHelpText() const; /// Set the tool tip message for this spinner void setTipText(const FXString& text); /// Get the tool tip message for this spinner const FXString& getTipText() const; /// Change spinner style void setSpinnerStyle(FXuint style); /// Return current spinner style FXuint getSpinnerStyle() const; /// Allow editing of the text field void setEditable(FXbool edit=TRUE); /// Return TRUE if text field is editable FXbool isEditable() const; /// Change color of the up arrow void setUpArrowColor(FXColor clr); /// Return color of the up arrow FXColor getUpArrowColor() const; /// Change color of the down arrow void setDownArrowColor(FXColor clr); /// Return color of the the down arrow FXColor getDownArrowColor() const; /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const; /// Change selected background color void setSelBackColor(FXColor clr); /// Return selected background color FXColor getSelBackColor() const; /// Change selected text color void setSelTextColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const; /// Changes the cursor color void setCursorColor(FXColor clr); /// Return the cursor color FXColor getCursorColor() const; /// Change width of text field in terms of number of columns * `m' void setNumColumns(FXint cols); /// Return number of columns FXint getNumColumns() const; /// Save spinner to a stream virtual void save(FXStream& store) const; /// Load spinner from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXSpinner(); }; } #endif fox-1.6.49/include/FXURL.h0000664000175000017500000000450612130340076012027 00000000000000/******************************************************************************** * * * U R L M a n i p u l a t i o n * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXURL.h,v 1.13 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXURL_H #define FXURL_H namespace FX { namespace FXURL { /// Return host name extern FXAPI FXString hostname(); /// Return URL of filename extern FXAPI FXString fileToURL(const FXString& file); /// Return filename from URL, empty if url is not a local file extern FXAPI FXString fileFromURL(const FXString& url); /// Decode url string extern FXAPI FXString decode(const FXString& url); /// Encode url string extern FXAPI FXString encode(const FXString& url); } } #endif fox-1.6.49/include/FXVec4f.h0000664000175000017500000002314112130340076012330 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n 4 - E l e m e n t V e c t o r * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXVec4f.h,v 1.32 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXVEC4F_H #define FXVEC4F_H namespace FX { class FXMat4f; /// Single-precision 4-element vector class FXAPI FXVec4f { public: FXfloat x; FXfloat y; FXfloat z; FXfloat w; public: /// Default constructor FXVec4f(){} /// Initialize from another vector FXVec4f(const FXVec4f& v){x=v.x;y=v.y;z=v.z;w=v.w;} /// Construct with 3-vector and optional scalar FXVec4f(const FXVec3f& v,FXfloat ww=1.0f){x=v.x;y=v.y;z=v.z;w=ww;} /// Construct from array of floats FXVec4f(const FXfloat v[]){x=v[0];y=v[1];z=v[2];w=v[3];} /// Construct from components FXVec4f(FXfloat xx,FXfloat yy,FXfloat zz,FXfloat ww=1.0f){x=xx;y=yy;z=zz;w=ww;} /// Construct from color FXVec4f(FXColor color); /// Return a non-const reference to the ith element FXfloat& operator[](FXint i){return (&x)[i];} /// Return a const reference to the ith element const FXfloat& operator[](FXint i) const {return (&x)[i];} /// Assign color FXVec4f& operator=(FXColor color); /// Assignment FXVec4f& operator=(const FXVec3f& v){x=v.x;y=v.y;z=v.z;w=1.0f;return *this;} FXVec4f& operator=(const FXVec4f& v){x=v.x;y=v.y;z=v.z;w=v.w;return *this;} /// Assignment from array of floats FXVec4f& operator=(const FXfloat v[]){x=v[0];y=v[1];z=v[2];w=v[3];return *this;} /// Set value from another vector FXVec4f& set(const FXVec4f& v){x=v.x;y=v.y;z=v.z;w=v.w;return *this;} /// Set value from array of floats FXVec4f& set(const FXfloat v[]){x=v[0];y=v[1];z=v[2];w=v[3];return *this;} /// Set value from components FXVec4f& set(FXfloat xx,FXfloat yy,FXfloat zz,FXfloat ww){x=xx;y=yy;z=zz;w=ww;return *this;} /// Assigning operators FXVec4f& operator*=(FXfloat n){x*=n;y*=n;z*=n;w*=n;return *this;} FXVec4f& operator/=(FXfloat n){x/=n;y/=n;z/=n;w/=n;return *this;} FXVec4f& operator+=(const FXVec4f& v){x+=v.x;y+=v.y;z+=v.z;w+=v.w;return *this;} FXVec4f& operator-=(const FXVec4f& v){x-=v.x;y-=v.y;z-=v.z;w-=v.w;return *this;} /// Conversion operator FXfloat*(){return &x;} operator const FXfloat*() const {return &x;} operator FXVec3f&(){return *reinterpret_cast(this);} operator const FXVec3f&() const {return *reinterpret_cast(this);} /// Convert to color operator FXColor() const; /// Unary FXVec4f operator+() const { return *this; } FXVec4f operator-() const { return FXVec4f(-x,-y,-z,-w); } /// Vector and vector FXVec4f operator+(const FXVec4f& v) const { return FXVec4f(x+v.x,y+v.y,z+v.z,w+v.w); } FXVec4f operator-(const FXVec4f& v) const { return FXVec4f(x-v.x,y-v.y,z-v.z,w-v.w); } /// Vector and matrix FXVec4f operator*(const FXMat4f& m) const; /// Scaling friend inline FXVec4f operator*(const FXVec4f& a,FXfloat n); friend inline FXVec4f operator*(FXfloat n,const FXVec4f& a); friend inline FXVec4f operator/(const FXVec4f& a,FXfloat n); friend inline FXVec4f operator/(FXfloat n,const FXVec4f& a); /// Dot product FXfloat operator*(const FXVec4f& v) const { return x*v.x+y*v.y+z*v.z+w*v.w; } /// Test if zero bool operator!() const { return x==0.0f && y==0.0f && z==0.0f && w==0.0f; } /// Equality tests bool operator==(const FXVec4f& v) const {return x==v.x && y==v.y && z==v.z && w==v.w; } bool operator!=(const FXVec4f& v) const {return x!=v.x || y!=v.y || z!=v.z || w!=v.w; } friend inline bool operator==(const FXVec4f& a,FXfloat n); friend inline bool operator!=(const FXVec4f& a,FXfloat n); friend inline bool operator==(FXfloat n,const FXVec4f& a); friend inline bool operator!=(FXfloat n,const FXVec4f& a); /// Inequality tests bool operator<(const FXVec4f& v) const { return x(const FXVec4f& v) const { return x>v.x && y>v.y && z>v.z && w>v.w; } bool operator>=(const FXVec4f& v) const { return x>=v.x && y>=v.y && z>=v.z && w>=v.w; } friend inline bool operator<(const FXVec4f& a,FXfloat n); friend inline bool operator<=(const FXVec4f& a,FXfloat n); friend inline bool operator>(const FXVec4f& a,FXfloat n); friend inline bool operator>=(const FXVec4f& a,FXfloat n); friend inline bool operator<(FXfloat n,const FXVec4f& a); friend inline bool operator<=(FXfloat n,const FXVec4f& a); friend inline bool operator>(FXfloat n,const FXVec4f& a); friend inline bool operator>=(FXfloat n,const FXVec4f& a); /// Length and square of length FXfloat length2() const { return x*x+y*y+z*z+w*w; } FXfloat length() const { return sqrtf(length2()); } /// Clamp values of vector between limits FXVec4f& clamp(FXfloat lo,FXfloat hi){x=FXCLAMP(lo,x,hi);y=FXCLAMP(lo,y,hi);z=FXCLAMP(lo,z,hi);w=FXCLAMP(lo,w,hi);return *this;} /// Lowest or highest components friend inline FXVec4f lo(const FXVec4f& a,const FXVec4f& b); friend inline FXVec4f hi(const FXVec4f& a,const FXVec4f& b); /// Compute normalized plane equation ax+by+cz+d=0 friend FXAPI FXVec4f plane(const FXVec4f& vec); friend FXAPI FXVec4f plane(const FXVec3f& vec,FXfloat dist); friend FXAPI FXVec4f plane(const FXVec3f& vec,const FXVec3f& p); friend FXAPI FXVec4f plane(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c); /// Signed distance normalized plane and point FXfloat distance(const FXVec3f& p) const; /// Return true if edge a-b crosses plane bool crosses(const FXVec3f& a,const FXVec3f& b) const; /// Normalize vector friend FXAPI FXVec4f normalize(const FXVec4f& v); /// Save to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXVec4f& v); /// Load from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXVec4f& v); }; inline FXVec4f operator*(const FXVec4f& a,FXfloat n){return FXVec4f(a.x*n,a.y*n,a.z*n,a.w*n);} inline FXVec4f operator*(FXfloat n,const FXVec4f& a){return FXVec4f(n*a.x,n*a.y,n*a.z,n*a.w);} inline FXVec4f operator/(const FXVec4f& a,FXfloat n){return FXVec4f(a.x/n,a.y/n,a.z/n,a.w/n);} inline FXVec4f operator/(FXfloat n,const FXVec4f& a){return FXVec4f(n/a.x,n/a.y,n/a.z,n/a.w);} inline bool operator==(const FXVec4f& a,FXfloat n){return a.x==n && a.y==n && a.z==n && a.w==n;} inline bool operator!=(const FXVec4f& a,FXfloat n){return a.x!=n || a.y!=n || a.z!=n || a.w!=n;} inline bool operator==(FXfloat n,const FXVec4f& a){return n==a.x && n==a.y && n==a.z && n==a.w;} inline bool operator!=(FXfloat n,const FXVec4f& a){return n!=a.x || n!=a.y || n!=a.z || n!=a.w;} inline bool operator<(const FXVec4f& a,FXfloat n){return a.x(const FXVec4f& a,FXfloat n){return a.x>n && a.y>n && a.z>n && a.w>n;} inline bool operator>=(const FXVec4f& a,FXfloat n){return a.x>=n && a.y>=n && a.z>=n && a.w>=n;} inline bool operator<(FXfloat n,const FXVec4f& a){return n(FXfloat n,const FXVec4f& a){return n>a.x && n>a.y && n>a.z && n>a.w;} inline bool operator>=(FXfloat n,const FXVec4f& a){return n>=a.x && n>=a.y && n>=a.z && n>=a.w;} inline FXVec4f lo(const FXVec4f& a,const FXVec4f& b){return FXVec4f(FXMIN(a.x,b.x),FXMIN(a.y,b.y),FXMIN(a.z,b.z),FXMIN(a.w,b.w));} inline FXVec4f hi(const FXVec4f& a,const FXVec4f& b){return FXVec4f(FXMAX(a.x,b.x),FXMAX(a.y,b.y),FXMAX(a.z,b.z),FXMAX(a.w,b.w));} extern FXAPI FXVec4f plane(const FXVec4f& vec); extern FXAPI FXVec4f plane(const FXVec3f& vec,FXfloat dist); extern FXAPI FXVec4f plane(const FXVec3f& vec,const FXVec3f& p); extern FXAPI FXVec4f plane(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c); extern FXAPI FXVec4f normalize(const FXVec4f& v); extern FXAPI FXStream& operator<<(FXStream& store,const FXVec4f& v); extern FXAPI FXStream& operator>>(FXStream& store,FXVec4f& v); } #endif fox-1.6.49/include/FXMatrix.h0000664000175000017500000001140612130340076012626 00000000000000/******************************************************************************** * * * M a t r i x C o n t a i n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMatrix.h,v 1.19 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMATRIX_H #define FXMATRIX_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /// Matrix packing options enum { MATRIX_BY_ROWS = 0, /// Fixed number of rows, add columns as needed MATRIX_BY_COLUMNS = 0x00020000 /// Fixed number of columns, adding rows as needed }; /** * The Matrix layout manager automatically arranges its child windows * in rows and columns. If the matrix style is MATRIX_BY_ROWS, then * the matrix will have the given number of rows and the number of columns * grows as more child windows are added; if the matrix style is MATRIX_BY_COLUMNS, * then the number of columns is fixed and the number of rows grows as more children * are added. * If all children in a row (column) have the LAYOUT_FILL_ROW (LAYOUT_FILL_COLUMN) * hint set, then the row (column) will be stretchable as the matrix layout manager * itself is resized. If more than one row (column) is stretchable, the space is * apportioned to each stretchable row (column) proportionally. * Within each cell of the matrix, all other layout hints are observed. * For example, a child having LAYOUT_CENTER_Y and LAYOUT_FILL_X hints will * be centered in the Y-direction, while being stretched in the X-direction. * Empty cells can be obtained by simply placing a borderless FXFrame widget * as a space-holder. */ class FXAPI FXMatrix : public FXPacker { FXDECLARE(FXMatrix) protected: FXint num; protected: FXMatrix(){} private: FXMatrix(const FXMatrix&); FXMatrix &operator=(const FXMatrix&); public: long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); public: /// Construct a matrix layout manager with n rows or columns FXMatrix(FXComposite *p,FXint n=1,FXuint opts=MATRIX_BY_ROWS,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Obtain the child placed at a certain row and column FXWindow* childAtRowCol(FXint r,FXint c) const; /// Return the row in which the given child is placed FXint rowOfChild(const FXWindow* child) const; /// Return the column in which the given child is placed FXint colOfChild(const FXWindow* child) const; /// Change the matrix style void setMatrixStyle(FXuint ph); /// Return the current matrix style FXuint getMatrixStyle() const; /// Change the number of rows void setNumRows(FXint nr); /// Return the number of rows FXint getNumRows() const; /// Change the number of columns void setNumColumns(FXint nc); /// Return the number of columns FXint getNumColumns() const; }; } #endif fox-1.6.49/include/FXMenuPane.h0000664000175000017500000000453412130340076013076 00000000000000/******************************************************************************** * * * M e n u P a n e W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuPane.h,v 1.16 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUPANE_H #define FXMENUPANE_H #ifndef FXPOPUP_H #include "FXPopup.h" #endif namespace FX { /// Popup menu pane class FXAPI FXMenuPane : public FXPopup { FXDECLARE(FXMenuPane) protected: FXMenuPane(){} private: FXMenuPane(const FXMenuPane&); FXMenuPane &operator=(const FXMenuPane&); public: /// Construct menu pane FXMenuPane(FXWindow* owner,FXuint opts=0); /// Return true if popup contains this point virtual bool contains(FXint parentx,FXint parenty) const; }; } #endif fox-1.6.49/include/FXQuatf.h0000664000175000017500000001215012130340076012437 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n Q u a t e r n i o n * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXQuatf.h,v 1.17 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXQUATF_H #define FXQUATF_H namespace FX { class FXMat3f; /// Single-precision quaternion class FXAPI FXQuatf : public FXVec4f { public: /// Construct FXQuatf(){} /// Copy constructor FXQuatf(const FXQuatf& q):FXVec4f(q){} /// Construct from components FXQuatf(FXfloat xx,FXfloat yy,FXfloat zz,FXfloat ww):FXVec4f(xx,yy,zz,ww){} /// Construct from array of floats FXQuatf(const FXfloat v[]):FXVec4f(v){} /// Construct from axis and angle FXQuatf(const FXVec3f& axis,FXfloat phi=0.0f); /// Construct from euler angles yaw (z), pitch (y), and roll (x) FXQuatf(FXfloat roll,FXfloat pitch,FXfloat yaw); /// Construct quaternion from two unit vectors FXQuatf(const FXVec3f& fr,const FXVec3f& to); /// Construct quaternion from three axes FXQuatf(const FXVec3f& ex,const FXVec3f& ey,const FXVec3f& ez); /// Construct quaternion from 3x3 matrix FXQuatf(const FXMat3f& mat); /// Adjust quaternion length FXQuatf& adjust(); /// Set quaternion from axis and angle void setAxisAngle(const FXVec3f& axis,FXfloat phi=0.0f); /// Obtain axis and angle from quaternion void getAxisAngle(FXVec3f& axis,FXfloat& phi) const; /// Set quaternion from roll (x), pitch (y), yaw (z) void setRollPitchYaw(FXfloat roll,FXfloat pitch,FXfloat yaw); void getRollPitchYaw(FXfloat& roll,FXfloat& pitch,FXfloat& yaw) const; /// Set quaternion from yaw (z), pitch (y), roll (x) void setYawPitchRoll(FXfloat yaw,FXfloat pitch,FXfloat roll); void getYawPitchRoll(FXfloat& yaw,FXfloat& pitch,FXfloat& roll) const; /// Set quaternion from roll (x), yaw (z), pitch (y) void setRollYawPitch(FXfloat roll,FXfloat yaw,FXfloat pitch); void getRollYawPitch(FXfloat& roll,FXfloat& yaw,FXfloat& pitch) const; /// Set quaternion from pitch (y), roll (x),yaw (z) void setPitchRollYaw(FXfloat pitch,FXfloat roll,FXfloat yaw); void getPitchRollYaw(FXfloat& pitch,FXfloat& roll,FXfloat& yaw) const; /// Set quaternion from pitch (y), yaw (z), roll (x) void setPitchYawRoll(FXfloat pitch,FXfloat yaw,FXfloat roll); void getPitchYawRoll(FXfloat& pitch,FXfloat& yaw,FXfloat& roll) const; /// Set quaternion from yaw (z), roll (x), pitch (y) void setYawRollPitch(FXfloat yaw,FXfloat roll,FXfloat pitch); void getYawRollPitch(FXfloat& yaw,FXfloat& roll,FXfloat& pitch) const; /// Set quaternion from axes void setAxes(const FXVec3f& ex,const FXVec3f& ey,const FXVec3f& ez); /// Get quaternion axes void getAxes(FXVec3f& ex,FXVec3f& ey,FXVec3f& ez) const; /// Obtain local x axis FXVec3f getXAxis() const; /// Obtain local y axis FXVec3f getYAxis() const; /// Obtain local z axis FXVec3f getZAxis() const; /// Exponentiate quaternion FXQuatf exp() const; /// Take logarithm of quaternion FXQuatf log() const; /// Invert quaternion FXQuatf invert() const; /// Invert unit quaternion FXQuatf unitinvert() const; /// Conjugate quaternion FXQuatf conj() const; /// Construct quaternion from arc a->b on unit sphere FXQuatf& arc(const FXVec3f& a,const FXVec3f& b); /// Spherical lerp FXQuatf& lerp(const FXQuatf& u,const FXQuatf& v,FXfloat f); /// Multiply quaternions FXQuatf operator*(const FXQuatf& q) const; /// Rotation of a vector by a quaternion FXVec3f operator*(const FXVec3f& v) const; }; } #endif fox-1.6.49/include/FXColorSelector.h0000664000175000017500000001505512130340076014145 00000000000000/******************************************************************************** * * * C o l o r S e l e c t o r * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXColorSelector.h,v 1.30 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCOLORSELECTOR_H #define FXCOLORSELECTOR_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { class FXTabBook; class FXColorBar; class FXColorWell; class FXColorWheel; class FXColorRing; class FXColorList; class FXList; class FXSlider; class FXTextField; class FXButton; class FXIcon; class FXLabel; /// Color selection widget class FXAPI FXColorSelector : public FXPacker { FXDECLARE(FXColorSelector) protected: FXTabBook *panels; // Color panes FXColorWell *well; // Main well FXColorList *list; // List of color names FXColorRing *wheel; // Color ring FXSlider *rgbaslider[4]; // RGBA sliders FXTextField *rgbatext[4]; // RGBA text fields FXSlider *hsvaslider[4]; // HSVA sliders FXTextField *hsvatext[4]; // HSVA text fields FXSlider *cmyslider[4]; // CMY sliders FXTextField *cmytext[4]; // CMY text fields FXColorWell *colorwells[24]; // Custom color wells FXIcon *eyedropicon; // Icon for eye dropper FXIcon *dialmodeicon; // Icon for dial mode FXIcon *rgbmodeicon; // Icon for RGB mode FXIcon *hsvmodeicon; // Icon for HSV mode FXIcon *cmymodeicon; // Icon for CMY mode FXIcon *txtmodeicon; // Icon for TEXT mode FXButton *accept; // Accept button FXButton *cancel; // Cancel button FXfloat rgba[4]; // Accurate RGBA color FXfloat hsva[4]; // Accurate HSVA color protected: static const FXchar* wellname[24]; // Well names protected: FXColorSelector(){} void updateWell(); private: FXColorSelector(const FXColorSelector&); FXColorSelector &operator=(const FXColorSelector&); public: long onCmdWell(FXObject*,FXSelector,void*); long onChgWell(FXObject*,FXSelector,void*); long onCmdRGBSlider(FXObject*,FXSelector,void*); long onUpdRGBSlider(FXObject*,FXSelector,void*); long onCmdRGBText(FXObject*,FXSelector,void*); long onUpdRGBText(FXObject*,FXSelector,void*); long onCmdHSVSlider(FXObject*,FXSelector,void*); long onUpdHSVSlider(FXObject*,FXSelector,void*); long onCmdHSVText(FXObject*,FXSelector,void*); long onUpdHSVText(FXObject*,FXSelector,void*); long onCmdCMYSlider(FXObject*,FXSelector,void*); long onUpdCMYSlider(FXObject*,FXSelector,void*); long onCmdCMYText(FXObject*,FXSelector,void*); long onUpdCMYText(FXObject*,FXSelector,void*); long onCmdList(FXObject*,FXSelector,void*); long onCmdCustomWell(FXObject*,FXSelector,void*); long onChgCustomWell(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdActivePane(FXObject*,FXSelector,void*); long onCmdAlphaSlider(FXObject*,FXSelector,void*); long onUpdAlphaSlider(FXObject*,FXSelector,void*); long onCmdAlphaText(FXObject*,FXSelector,void*); long onUpdAlphaText(FXObject*,FXSelector,void*); long onUpdAlphaLabel(FXObject*,FXSelector,void*); long onCmdWheel(FXObject*,FXSelector,void*); long onUpdWheel(FXObject*,FXSelector,void*); long onCmdColorPick(FXObject*,FXSelector,void*); public: enum { ID_CUSTOM_FIRST=FXPacker::ID_LAST, ID_CUSTOM_LAST=ID_CUSTOM_FIRST+24, ID_RGB_RED_SLIDER, ID_RGB_GREEN_SLIDER, ID_RGB_BLUE_SLIDER, ID_RGB_RED_TEXT, ID_RGB_GREEN_TEXT, ID_RGB_BLUE_TEXT, ID_HSV_HUE_SLIDER, ID_HSV_SATURATION_SLIDER, ID_HSV_VALUE_SLIDER, ID_HSV_HUE_TEXT, ID_HSV_SATURATION_TEXT, ID_HSV_VALUE_TEXT, ID_CMY_CYAN_SLIDER, ID_CMY_MAGENTA_SLIDER, ID_CMY_YELLOW_SLIDER, ID_CMY_CYAN_TEXT, ID_CMY_MAGENTA_TEXT, ID_CMY_YELLOW_TEXT, ID_DIAL_WHEEL, ID_COLOR_LIST, ID_WELL_CHANGED, ID_ACTIVEPANE, ID_ALPHA_SLIDER, ID_ALPHA_TEXT, ID_ALPHA_LABEL, ID_COLORPICK, ID_LAST }; public: /// Construct a new ColorSelector FXColorSelector(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create the ColorSelector virtual void create(); /// Return a pointer to the "Accept" button FXButton *acceptButton() const { return accept; } /// Return a pointer to the "Cancel" button FXButton *cancelButton() const { return cancel; } /// Set the selected color void setRGBA(FXColor clr); /// Get the selected color FXColor getRGBA() const; /// Return true if only opaque colors allowed FXbool isOpaqueOnly() const; /// Change opaque only mode void setOpaqueOnly(FXbool opaque); /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXColorSelector(); }; } #endif fox-1.6.49/include/FXSplashWindow.h0000664000175000017500000001011012130340076013773 00000000000000/******************************************************************************** * * * S p l a s h W i n d o w * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSplashWindow.h,v 1.10 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSPLASHWINDOW_H #define FXSPLASHWINDOW_H #ifndef FXTOPWINDOW_H #include "FXTopWindow.h" #endif namespace FX { /// Splash Window options enum { SPLASH_SIMPLE = 0, /// Simple rectangular splash window SPLASH_SHAPED = 0x02000000, /// Shaped splash window SPLASH_OWNS_ICON = 0x04000000, /// Splash window will own the icon and destroy it SPLASH_DESTROY = 0x08000000 /// Splash window will destroy itself when timer expires }; /** * The Splash Window is a window typically shown during startup * of an application. It comprises a large icon, which is also * used as the shape of the window if SPLASH_SHAPED is passed; * with the SPLASH_SIMPLE option the window will be simply rectangular. */ class FXAPI FXSplashWindow : public FXTopWindow { FXDECLARE(FXSplashWindow) protected: FXIcon *icon; // Really big icon FXuint delay; // Delay before hiding protected: FXSplashWindow(); private: FXSplashWindow(const FXSplashWindow&); FXSplashWindow &operator=(const FXSplashWindow&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Construct splash window FXSplashWindow(FXApp* ap,FXIcon* ic,FXuint opts=SPLASH_SIMPLE,FXuint ms=5000); /// Construct splash window FXSplashWindow(FXWindow* ow,FXIcon* ic,FXuint opts=SPLASH_SIMPLE,FXuint ms=5000); /// Create virtual void create(); /// Detach virtual void detach(); /// Show splash window virtual void show(); /// Show splash window with a given placement virtual void show(FXuint placement); /// Hide splash window virtual void hide(); /// Return the default width of this window virtual FXint getDefaultWidth(); /// Return the default height of this window virtual FXint getDefaultHeight(); /// Set the icon for the splash window void setIcon(FXIcon* ic); /// Get the icon for this splash window FXIcon* getIcon() const { return icon; } /// Set or change delay void setDelay(FXuint ms); /// Return delay FXuint getDelay() const { return delay; } /// Save label to a stream virtual void save(FXStream& store) const; /// Load label from a stream virtual void load(FXStream& store); /// Destroy splash window virtual ~FXSplashWindow(); }; } #endif fox-1.6.49/include/FXColorDialog.h0000664000175000017500000000671112130340076013563 00000000000000/******************************************************************************** * * * C o l o r D i a l o g * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXColorDialog.h,v 1.20 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCOLORDIALOG_H #define FXCOLORDIALOG_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { class FXColorSelector; /** * The Color dialog is a standard dialog panel used to edit colors. * Colors can be edited via RGB (Red, Green, Blue additive color model), * via HSV (Hue, Saturation, Value color modal), via CMY (Cyan, Magenta, * Yellow subtractive color model), or by name. * Commonly used colors can be dragged into a number of small color wells * to be used repeatedly; colors dropped into the small color wells are * automatically saved into the registry for future use. */ class FXAPI FXColorDialog : public FXDialogBox { FXDECLARE(FXColorDialog) protected: FXColorSelector *colorbox; protected: FXColorDialog(){} private: FXColorDialog(const FXColorDialog&); FXColorDialog &operator=(const FXColorDialog&); public: long onChgColor(FXObject*,FXSelector,void*); long onCmdColor(FXObject*,FXSelector,void*); public: enum { ID_COLORSELECTOR=FXDialogBox::ID_LAST, ID_LAST }; public: /// Construct color dialog FXColorDialog(FXWindow* owner,const FXString& name,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Set the color void setRGBA(FXColor clr); /// Get the color FXColor getRGBA() const; /// Return true if only opaque colors allowed FXbool isOpaqueOnly() const; /// Change opaque only mode void setOpaqueOnly(FXbool forceopaque); /// Save dialog to a stream virtual void save(FXStream& store) const; /// Load dialog from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXColorDialog(); }; } #endif fox-1.6.49/include/FXMDIClient.h0000664000175000017500000001620412130340076013133 00000000000000/******************************************************************************** * * * M u l t i p l e D o c u m e n t C l i e n t W i n d o w * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMDIClient.h,v 1.32 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXMDICLIENT_H #define FXMDICLIENT_H #ifndef FXCOMPOSITE_H #include "FXComposite.h" #endif namespace FX { class FXMDIChild; /** * The MDI client window manages a number of MDI child windows in a multiple-document * interface (MDI) application. MDI child windows usually receive messages from the GUI controls * by delegation via the MDI client. This is accomplished by making the MDI client window * the target for most GUI controls. The MDI client filters out messages intented for itself, * and delegates the remaining messages to its currently active MDI child, if any. * If you use the auto-gray or auto-hide feature available in some GUI controls, these * controls can be automatically grayed out or hidden when there is no active MDI child. * When delegating messages via MDI client to MDI child windows of different types, care * should be taken that message ID's do not overlap, so that all message ID's only map to * the intented handlers no matter which MDI child window type is active. * The MDI client sends a SEL_CHANGED message to its target when the active MDI child is * switched, with the void* pointer refering to the new MDI child. * A MDI Window selection dialog can be brought up through the ID_MDI_OVER_X messages; * a menu button connected to the MDI client with the ID_MDI_OVER_X message will be * automatically grayed out if there are less than X MDI child windows. */ class FXAPI FXMDIClient : public FXComposite { FXDECLARE(FXMDIClient) friend class FXMDIChild; protected: FXMDIChild *active; // Active child FXint cascadex; // Cascade offset X FXint cascadey; // Cascade offset Y protected: FXMDIClient(); private: FXMDIClient(const FXMDIClient&); FXMDIClient &operator=(const FXMDIClient&); public: long onCmdActivateNext(FXObject*,FXSelector,void*); long onCmdActivatePrev(FXObject*,FXSelector,void*); long onCmdTileHorizontal(FXObject*,FXSelector,void*); long onCmdTileVertical(FXObject*,FXSelector,void*); long onCmdCascade(FXObject*,FXSelector,void*); long onUpdActivateNext(FXObject*,FXSelector,void*); long onUpdActivatePrev(FXObject*,FXSelector,void*); long onUpdTileVertical(FXObject*,FXSelector,void*); long onUpdTileHorizontal(FXObject*,FXSelector,void*); long onUpdCascade(FXObject*,FXSelector,void*); long onUpdClose(FXObject*,FXSelector,void*); long onUpdMenuClose(FXObject*,FXSelector,void*); long onUpdRestore(FXObject*,FXSelector,void*); long onUpdMenuRestore(FXObject*,FXSelector,void*); long onUpdMinimize(FXObject*,FXSelector,void*); long onUpdMenuMinimize(FXObject*,FXSelector,void*); long onUpdMaximize(FXObject*,FXSelector,void*); long onUpdMenuWindow(FXObject*,FXSelector,void*); long onCmdWindowSelect(FXObject*,FXSelector,void*); long onUpdWindowSelect(FXObject*,FXSelector,void*); long onCmdOthersWindows(FXObject*,FXSelector,void*); long onUpdOthersWindows(FXObject*,FXSelector,void*); long onUpdAnyWindows(FXObject*,FXSelector,void*); virtual long onDefault(FXObject*,FXSelector,void*); public: enum { ID_MDI_ANY=65400, ID_MDI_1, // Select MDI child 1 ID_MDI_2, ID_MDI_3, ID_MDI_4, ID_MDI_5, ID_MDI_6, ID_MDI_7, ID_MDI_8, ID_MDI_9, ID_MDI_10, ID_MDI_OVER_1, // Sensitize MDI menu when 1 or more children ID_MDI_OVER_2, ID_MDI_OVER_3, ID_MDI_OVER_4, ID_MDI_OVER_5, ID_MDI_OVER_6, ID_MDI_OVER_7, ID_MDI_OVER_8, ID_MDI_OVER_9, ID_MDI_OVER_10, ID_LAST }; public: /// Construct MDI Client window FXMDIClient(FXComposite* p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /** * Pass message to all MDI windows, stopping when one of * the MDI windows fails to handle the message. */ long forallWindows(FXObject* sender,FXSelector sel,void* ptr); /** * Pass message once to all MDI windows with the same document, * stopping when one of the MDI windows fails to handle the message. */ long forallDocuments(FXObject* sender,FXSelector sel,void* ptr); /** * Pass message to all MDI Child windows whose target is document, * stopping when one of the MDI windows fails to handle the message. */ long forallDocWindows(FXObject* document,FXObject* sender,FXSelector sel,void* ptr); /// Set active MDI Child virtual FXbool setActiveChild(FXMDIChild* child=NULL,FXbool notify=TRUE); /// Get current active child; may be NULL! FXMDIChild* getActiveChild() const { return active; } /// Cascade windows virtual void cascade(FXbool notify=FALSE); /// Layout horizontally virtual void horizontal(FXbool notify=FALSE); /// Layout vertically virtual void vertical(FXbool notify=FALSE); /// Change cascade offset X void setCascadeX(FXint off){ cascadex=off; } /// Change cascade offset Y void setCascadeY(FXint off){ cascadey=off; } /// Get cascade offset X FXint getCascadeX() const { return cascadex; } /// Get cascade offset Y FXint getCascadeY() const { return cascadey; } /// Save object to a stream virtual void save(FXStream& store) const; /// Load object from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXMDIClient(); }; } #endif fox-1.6.49/include/FXMenuCaption.h0000664000175000017500000001336212130340076013607 00000000000000/******************************************************************************** * * * M e n u C a p t i o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuCaption.h,v 1.33 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUCAPTION_H #define FXMENUCAPTION_H #ifndef FXWINDOW_H #include "FXWindow.h" #endif namespace FX { /// Menu Caption options enum { MENU_AUTOGRAY = 0x00008000, /// Automatically gray out when not updated MENU_AUTOHIDE = 0x00010000 /// Automatically hide button when not updated }; class FXIcon; class FXFont; /** * The menu caption is a widget which can be used as a caption * above a number of menu commands in a menu. */ class FXAPI FXMenuCaption : public FXWindow { FXDECLARE(FXMenuCaption) protected: FXString label; FXString help; FXString tip; FXIcon *icon; FXFont *font; FXint hotoff; FXHotKey hotkey; FXColor textColor; FXColor selbackColor; FXColor seltextColor; FXColor hiliteColor; FXColor shadowColor; protected: FXMenuCaption(); private: FXMenuCaption(const FXMenuCaption&); FXMenuCaption &operator=(const FXMenuCaption&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdSetIconValue(FXObject*,FXSelector,void*); long onCmdGetIconValue(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Construct a menu caption FXMenuCaption(FXComposite* p,const FXString& text,FXIcon* ic=NULL,FXuint opts=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Enable the menu virtual void enable(); /// Disable the menu virtual void disable(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set the text for this menu void setText(const FXString& text); /// Get the text for this menu FXString getText() const { return label; } /// Set the icon for this menu void setIcon(FXIcon* ic); /// Get the icon for this menu FXIcon* getIcon() const { return icon; } /// Set the text font void setFont(FXFont* fnt); /// Return the text font FXFont* getFont() const { return font; } /// Set menu caption style void setMenuStyle(FXuint style); /// Get menu caption style FXuint getMenuStyle() const; /// Return the current text color void setTextColor(FXColor clr); /// Get the current text color FXColor getTextColor() const { return textColor; } /// Return the selection background color void setSelBackColor(FXColor clr); /// Return the selection background color FXColor getSelBackColor() const { return selbackColor; } /// Return the selection text color void setSelTextColor(FXColor clr); /// Return the selection text color FXColor getSelTextColor() const { return seltextColor; } /// Change highlight color void setHiliteColor(FXColor clr); /// Get highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change shadow color void setShadowColor(FXColor clr); /// Get shadow color FXColor getShadowColor() const { return shadowColor; } /// Set the status line help text for this menu void setHelpText(const FXString& text); /// Get the status line help text for this menu const FXString& getHelpText() const { return help; } /// Set the tool tip message for this menu void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for this menu const FXString& getTipText() const { return tip; } /// Save menu to a stream virtual void save(FXStream& store) const; /// Load menu from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXMenuCaption(); }; } #endif fox-1.6.49/include/FXDirSelector.h0000664000175000017500000001303212130340076013576 00000000000000/******************************************************************************** * * * D i r e c t o r y S e l e c t i o n W i d g e t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDirSelector.h,v 1.21 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDIRSELECTOR_H #define FXDIRSELECTOR_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { class FXDirList; class FXTextField; class FXButton; /** * The Directory Selector widget is the reusable mega-widget component which * is the core of the Directory Dialog. The function of the directory selector widget * is very similar to the file selector widget, except that the directory selector widget * displays a tree-structured view of the file system, and thereby makes up and down * navigation through the file system significantly easier. */ class FXAPI FXDirSelector : public FXPacker { FXDECLARE(FXDirSelector) protected: FXDirList *dirbox; // Directory list widget FXTextField *dirname; // Directory name entry field FXButton *accept; // Accept button FXButton *cancel; // Cancel button FXIcon *updiricon; // Up directory icon FXIcon *homeicon; // Go home icon FXIcon *workicon; // Go home icon FXIcon *markicon; // Book mark icon FXIcon *clearicon; // Book clear icon FXIcon *newicon; // New directory icon FXIcon *deleteicon; // Delete file icon FXIcon *moveicon; // Rename file icon FXIcon *copyicon; // Copy file icon FXIcon *linkicon; // Link file icon FXRecentFiles mrufiles; // Recently visited places protected: FXDirSelector(){} private: FXDirSelector(const FXDirSelector&); FXDirSelector &operator=(const FXDirSelector&); public: long onCmdName(FXObject*,FXSelector,void*); long onCmdOpened(FXObject*,FXSelector,void*); long onCmdHome(FXObject*,FXSelector,void*); long onCmdWork(FXObject*,FXSelector,void*); long onCmdDirectoryUp(FXObject*,FXSelector,void*); long onPopupMenu(FXObject*,FXSelector,void*); long onCmdBookmark(FXObject*,FXSelector,void*); long onCmdVisit(FXObject*,FXSelector,void*); long onCmdNew(FXObject*,FXSelector,void*); long onUpdNew(FXObject*,FXSelector,void*); long onCmdMove(FXObject*,FXSelector,void*); long onCmdCopy(FXObject*,FXSelector,void*); long onCmdLink(FXObject*,FXSelector,void*); long onCmdDelete(FXObject*,FXSelector,void*); long onUpdSelected(FXObject*,FXSelector,void*); public: enum { ID_DIRNAME=FXPacker::ID_LAST, ID_DIRLIST, ID_HOME, ID_WORK, ID_DIRECTORY_UP, ID_BOOKMARK, ID_VISIT, ID_NEW, ID_DELETE, ID_MOVE, ID_COPY, ID_LINK, ID_LAST }; public: /// Constructor FXDirSelector(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return a pointer to the "Accept" button FXButton *acceptButton() const { return accept; } /// Return a pointer to the "Cancel" button FXButton *cancelButton() const { return cancel; } /// Change directory void setDirectory(const FXString& path); /// Return directory FXString getDirectory() const; /// Return TRUE if showing files as well as directories FXbool showFiles() const; /// Show or hide normal files void showFiles(FXbool showing); /// Return TRUE if showing hidden directories FXbool showHiddenFiles() const; /// Show or hide hidden directories void showHiddenFiles(FXbool showing); /// Return wildcard matching mode FXuint getMatchMode() const; /// Change wildcard matching mode void setMatchMode(FXuint mode); /// Change Directory List style void setDirBoxStyle(FXuint style); /// Return Directory List style FXuint getDirBoxStyle() const; /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXDirSelector(); }; } #endif fox-1.6.49/include/FXColorWell.h0000664000175000017500000001537212130340076013272 00000000000000/******************************************************************************** * * * C o l o r W e l l W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXColorWell.h,v 1.35 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCOLORWELL_H #define FXCOLORWELL_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { // Color Well Styles enum { COLORWELL_OPAQUEONLY = 0x00008000, /// Colors must be opaque COLORWELL_SOURCEONLY = 0x00010000, /// ColorWell is never a target COLORWELL_NORMAL = JUSTIFY_NORMAL }; /** * A color well is a widget which controls color settings. * Colors may be dragged and dropped from one color well to another. * A double-click inside a color well will bring up the standard * color dialog panel to edit the color well's color. * Colors may be also pasted by name using middle-mouse click into/out of * color wells from/to other selection-capable applications; for example, * you can highlight the word `red' and paste it into a color well. * While the color value is being changed, the color well sends a SEL_CHANGED * to its target; at the end of the change, it sends a SEL_COMMAND. * The message data represents the current color value, of the type FXColor. */ class FXAPI FXColorWell : public FXFrame { FXDECLARE(FXColorWell) protected: FXColor wellColor[2]; // Pixel value of RGBA over black and white FXColor rgba; // Color with RGB and Alpha FXString tip; // Tooltip value FXString help; // Help value protected: FXColorWell(); static FXColor rgbaoverblack(FXColor clr); static FXColor rgbaoverwhite(FXColor clr); private: FXColorWell(const FXColorWell&); FXColorWell &operator=(const FXColorWell&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onBeginDrag(FXObject*,FXSelector,void*); long onEndDrag(FXObject*,FXSelector,void*); long onDragged(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onDNDEnter(FXObject*,FXSelector,void*); long onDNDLeave(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onDNDDrop(FXObject*,FXSelector,void*); long onDNDRequest(FXObject*,FXSelector,void*); long onSelectionLost(FXObject*,FXSelector,void*); long onSelectionGained(FXObject*,FXSelector,void*); long onSelectionRequest(FXObject*,FXSelector,void*); long onClicked(FXObject*,FXSelector,void*); long onDoubleClicked(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdColorWell(FXObject*,FXSelector,void*); long onChgColorWell(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: enum { ID_COLORDIALOG=FXFrame::ID_LAST, ID_LAST }; public: /// Construct color well with initial color clr FXColorWell(FXComposite* p,FXColor clr=0,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=COLORWELL_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Returns true because a color well can receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Set color void setRGBA(FXColor clr,FXbool notify=FALSE); /// Get color FXColor getRGBA() const { return rgba; } /// Set status line help text for this color well void setHelpText(const FXString& text){ help=text; } /// Get status line help text for this color well const FXString& getHelpText() const { return help; } /// Set tool tip message for this color well void setTipText(const FXString& text){ tip=text; } /// Get tool tip message for this color well const FXString& getTipText() const { return tip; } /// Return true if only opaque colors allowed FXbool isOpaqueOnly() const; /// Change opaque only mode void setOpaqueOnly(FXbool opaque); /// Save color well to a stream virtual void save(FXStream& store) const; /// Load color well from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXColorWell(); }; } #endif fox-1.6.49/include/FXXBMIcon.h0000664000175000017500000000770112130340076012624 00000000000000/******************************************************************************** * * * X B M I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2003,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXXBMIcon.h,v 1.11 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXXBMICON_H #define FXXBMICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// X Bitmap icon class FXAPI FXXBMIcon : public FXIcon { FXDECLARE(FXXBMIcon) protected: FXXBMIcon(){} private: FXXBMIcon(const FXXBMIcon&); FXXBMIcon &operator=(const FXXBMIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in X Bitmap format FXXBMIcon(FXApp* a,const FXuchar *pixels=NULL,const FXuchar *mask=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in X Bitmap format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in X Bitmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXXBMIcon(); }; #ifndef FXLOADXBM #define FXLOADXBM /** * Check if stream contains a XBM, return TRUE if so. */ extern FXAPI bool fxcheckXBM(FXStream& store); /** * Load an XBM (X Bitmap) from pixel array and mask array. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadXBM(FXColor*& data,const FXuchar *pix,const FXuchar *msk,FXint width,FXint height); /** * Load an XBM (X Bitmap) file from a stream. * Upon successful return, the pixel array and size, and hot-spot are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadXBM(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXint& hotx,FXint& hoty); /** * Save an XBM (X Bitmap) file to a stream; if the parameters hotx and hoty are set * to -1, no hotspot location is saved. */ extern FXAPI bool fxsaveXBM(FXStream& store,const FXColor *data,FXint width,FXint height,FXint hotx=-1,FXint hoty=-1); /** * Save a PostScript file to a stream; format the picture to the maximal * size that fits within the given margins of the indicated paper size. */ extern FXAPI bool fxsavePS(FXStream& store,const FXColor *data,FXint width,FXint height,FXint paperw=612,FXint paperh=792,FXint margin=35,bool color=true); #endif } #endif fox-1.6.49/include/FXSeparator.h0000664000175000017500000001034612130340076013324 00000000000000/******************************************************************************** * * * S e p a r a t o r W i d g e t s * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSeparator.h,v 1.18 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSEPARATOR_H #define FXSEPARATOR_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Separator Options enum { SEPARATOR_NONE = 0, /// Nothing visible SEPARATOR_GROOVE = 0x00008000, /// Etched-in looking groove SEPARATOR_RIDGE = 0x00010000, /// Embossed looking ridge SEPARATOR_LINE = 0x00020000 /// Simple line }; /** * A Separator widget is used to draw a horizontal or vertical divider between * groups of controls. It is purely decorative. The separator may be drawn * in various styles as determined by the SEPARATOR_NONE, SEPARATOR_GROOVE, * SEPARATOR_RIDGE, and SEPARATOR_LINE options. Since its derived from Frame, * it can also have the frame's border styles. */ class FXAPI FXSeparator : public FXFrame { FXDECLARE(FXSeparator) protected: FXSeparator(){} private: FXSeparator(const FXSeparator&); FXSeparator &operator=(const FXSeparator&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Constructor FXSeparator(FXComposite* p,FXuint opts=SEPARATOR_GROOVE|LAYOUT_FILL_X,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change separator style void setSeparatorStyle(FXuint style); /// Get separator style FXuint getSeparatorStyle() const; }; /// Horizontal separator widget class FXAPI FXHorizontalSeparator : public FXSeparator { FXDECLARE(FXHorizontalSeparator) protected: FXHorizontalSeparator(){} private: FXHorizontalSeparator(const FXHorizontalSeparator&); FXHorizontalSeparator &operator=(const FXHorizontalSeparator&); public: /// Constructor FXHorizontalSeparator(FXComposite* p,FXuint opts=SEPARATOR_GROOVE|LAYOUT_FILL_X,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=1,FXint pr=1,FXint pt=0,FXint pb=0); }; /// Vertical separator widget class FXAPI FXVerticalSeparator : public FXSeparator { FXDECLARE(FXVerticalSeparator) protected: FXVerticalSeparator(){} private: FXVerticalSeparator(const FXVerticalSeparator&); FXVerticalSeparator &operator=(const FXVerticalSeparator&); public: /// Constructor FXVerticalSeparator(FXComposite* p,FXuint opts=SEPARATOR_GROOVE|LAYOUT_FILL_Y,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=1,FXint pb=1); }; } #endif fox-1.6.49/include/FXTable.h0000664000175000017500000011003212130340076012404 00000000000000/******************************************************************************** * * * T a b l e W i d g e t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTable.h,v 1.166.2.1 2006/06/07 15:51:04 fox Exp $ * ********************************************************************************/ #ifndef FXTABLE_H #define FXTABLE_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { class FXIcon; class FXFont; class FXTable; class FXHeader; class FXButton; /// Default cell margin enum { DEFAULT_MARGIN = 2 }; /// Table options enum { TABLE_COL_SIZABLE = 0x00100000, /// Columns are resizable TABLE_ROW_SIZABLE = 0x00200000, /// Rows are resizable TABLE_NO_COLSELECT = 0x00400000, /// Disallow column selections TABLE_NO_ROWSELECT = 0x00800000, /// Disallow row selections TABLE_READONLY = 0x01000000, /// Table is NOT editable TABLE_COL_RENUMBER = 0x02000000, /// Renumber columns TABLE_ROW_RENUMBER = 0x04000000 /// Renumber rows }; /// Position in table struct FXTablePos { FXint row; FXint col; }; /// Range of table cells struct FXTableRange { FXTablePos fm; FXTablePos to; }; /// Item in table class FXAPI FXTableItem : public FXObject { FXDECLARE(FXTableItem) friend class FXTable; protected: FXString label; FXIcon *icon; void *data; FXuint state; private: FXTableItem(const FXTableItem&); FXTableItem& operator=(const FXTableItem&); protected: FXTableItem():icon(NULL),data(NULL),state(0){} FXint textWidth(const FXTable* table) const; FXint textHeight(const FXTable* table) const; virtual void draw(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual void drawBorders(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual void drawContent(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual void drawPattern(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual void drawBackground(const FXTable* table,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; public: enum{ SELECTED = 0x00000001, /// Selected FOCUS = 0x00000002, /// Focus DISABLED = 0x00000004, /// Disabled DRAGGABLE = 0x00000008, /// Draggable RESERVED1 = 0x00000010, /// Reserved RESERVED2 = 0x00000020, /// Reserved ICONOWNED = 0x00000040, /// Icon owned by table item RIGHT = 0x00002000, /// Align on right (default) LEFT = 0x00004000, /// Align on left CENTER_X = 0, /// Aling centered horizontally TOP = 0x00008000, /// Align on top BOTTOM = 0x00010000, /// Align on bottom CENTER_Y = 0, /// Aling centered vertically (default) BEFORE = 0x00020000, /// Icon before the text AFTER = 0x00040000, /// Icon after the text ABOVE = 0x00080000, /// Icon above the text BELOW = 0x00100000, /// Icon below the text LBORDER = 0x00200000, /// Draw left border RBORDER = 0x00400000, /// Draw right border TBORDER = 0x00800000, /// Draw top border BBORDER = 0x01000000 /// Draw bottom border }; public: /// Construct new table item FXTableItem(const FXString& text,FXIcon* ic=NULL,void* ptr=NULL):label(text),icon(ic),data(ptr),state(RIGHT|CENTER_Y){} /// Change item's text label virtual void setText(const FXString& txt); /// Return item's text label virtual FXString getText() const { return label; } /// Change item's icon, deleting the old icon if it was owned virtual void setIcon(FXIcon* icn,FXbool owned=FALSE); /// Return item's icon virtual FXIcon* getIcon() const { return icon; } /// Change item's user data void setData(void* ptr){ data=ptr; } /// Get item's user data void* getData() const { return data; } /// Make item draw as focused virtual void setFocus(FXbool focus); /// Return true if item has focus FXbool hasFocus() const { return (state&FOCUS)!=0; } /// Select item virtual void setSelected(FXbool selected); /// Return true if this item is selected FXbool isSelected() const { return (state&SELECTED)!=0; } /// Enable or disable item virtual void setEnabled(FXbool enabled); /// Return true if this item is enabled FXbool isEnabled() const { return (state&DISABLED)==0; } /// Make item draggable virtual void setDraggable(FXbool draggable); /// Return true if this item is draggable FXbool isDraggable() const { return (state&DRAGGABLE)!=0; } /// Change item content justification virtual void setJustify(FXuint justify=RIGHT|CENTER_Y); /// Return item content justification FXuint getJustify() const { return state&(RIGHT|LEFT|TOP|BOTTOM); } /// Change item icon position virtual void setIconPosition(FXuint mode); /// Return item icon position FXuint getIconPosition() const { return state&(BEFORE|AFTER|ABOVE|BELOW); } /// Change item borders virtual void setBorders(FXuint borders=0); /// Return item borders FXuint getBorders() const { return state&(LBORDER|RBORDER|TBORDER|BBORDER); } /// Change item background stipple virtual void setStipple(FXStipplePattern pattern); /// Return item background stipple FXStipplePattern getStipple() const; /// Create input control for editing this item virtual FXWindow *getControlFor(FXTable* table); /// Set value from input control virtual void setFromControl(FXWindow *control); /// Return width of item virtual FXint getWidth(const FXTable* table) const; /// Return height of item virtual FXint getHeight(const FXTable* table) const; /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy item and free icon if owned virtual ~FXTableItem(); }; /// Combobox Item class FXAPI FXComboTableItem : public FXTableItem { FXDECLARE(FXComboTableItem) protected: FXString selections; private: FXComboTableItem(const FXComboTableItem&); FXComboTableItem& operator=(const FXComboTableItem&); protected: FXComboTableItem(){} public: /// Construct new table item FXComboTableItem(const FXString& text,FXIcon* ic=NULL,void* ptr=NULL); /// Create input control for editing this item virtual FXWindow *getControlFor(FXTable* table); /// Set value from input control virtual void setFromControl(FXWindow *control); /// Set selections as newline-separated strings void setSelections(const FXString& strings); /// Return selections const FXString& getSelections() const { return selections; } }; /** * The Table widget displays a table of items, each with a text and optional * icon. A column Header control provide captions for each column, and a row * Header control provides captions for each row. Columns are resizable by * means of the column Header control if the TABLE_COL_SIZABLE option is passed. * Likewise, rows in the table are resizable if the TABLE_ROW_SIZABLE option is * specified. An entire row (column) can be selected by clicking on the a button * in the row (column) Header control. Passing TABLE_NO_COLSELECT disables column * selection, and passing TABLE_NO_ROWSELECT disables column selection. * When TABLE_COL_RENUMBER is specified, columns are automatically renumbered when * columns are added or removed. Similarly, TABLE_ROW_RENUMBER will cause row numbers * to be recalculated automatically when rows are added or removed. * To disable editing of cells in the table, the TABLE_READONLY can be specified. * Cells in the table may or may not have items in them. When populating a cell * for the first time, an item will be automatically created if necessary. Thus, * a cell in the table takes no space unless it has actual contents. * Moreover, a contiguous, rectangular region of cells in the table may refer to * one single item; in that case, the item will be stretched to cover all the * cells in the region, and no grid lines will be drawn interior to the spanning * item. * The Table widget issues SEL_SELECTED or SEL_DESELECTED when cells are selected * or deselected, respectively. The table position affected is passed along as the * 3rd parameter of these messages. * Whenever the current (focus) item is changed, a SEL_CHANGED message is sent with * the new table position as a parameter. * When items are added to the table, a SEL_INSERTED message is sent, with the table * range of the newly added cells as the parameter in the message. * When items are removed from the table, a SEL_DELETED message is sent prior to the * removal of the items, and the table range of the removed cells is passed as a parameter. * A SEL_REPLACED message is sent when the contents of a cell are changed, either through * editing or by other means; the parameter is the range of affected cells. This message * is sent prior to the change. * SEL_CLICKED, SEL_DOUBLECLICKED, and SEL_TRIPLECLICKED messages are sent when a cell * is clicked, double-clicked, or triple-clicked, respectively. * A SEL_COMMAND is sent when an enabled item is clicked inside the table. */ class FXAPI FXTable : public FXScrollArea { FXDECLARE(FXTable) protected: FXHeader *colHeader; // Column header FXHeader *rowHeader; // Row header FXButton *cornerButton; // Corner button FXTableItem **cells; // Cells FXWindow *editor; // Editor widget FXFont *font; // Font FXint nrows; // Number of rows FXint ncols; // Number of columns FXint visiblerows; // Visible rows FXint visiblecols; // Visible columns FXint margintop; // Margin top FXint marginbottom; // Margin bottom FXint marginleft; // Margin left FXint marginright; // Margin right FXColor textColor; // Normal text color FXColor baseColor; // Base color FXColor hiliteColor; // Highlight color FXColor shadowColor; // Shadow color FXColor borderColor; // Border color FXColor selbackColor; // Select background color FXColor seltextColor; // Select text color FXColor gridColor; // Grid line color FXColor stippleColor; // Stipple color FXColor cellBorderColor; // Cell border color FXint cellBorderWidth; // Cell border width FXColor cellBackColor[2][2]; // Row/Column even/odd background color FXint defColWidth; // Default column width [if uniform columns] FXint defRowHeight; // Default row height [if uniform rows] FXTablePos current; // Current position FXTablePos anchor; // Anchor position FXTableRange input; // Input cell FXTableRange selection; // Range of selected cells FXString clipped; // Clipped text FXbool hgrid; // Horizontal grid lines shown FXbool vgrid; // Vertical grid lines shown FXuchar mode; // Mode widget is in FXint grabx; // Grab point x FXint graby; // Grab point y FXint rowcol; // Row or column being resized FXString help; public: static FXDragType csvType; static const FXchar csvTypeName[]; protected: FXTable(); FXint startRow(FXint row,FXint col) const; FXint startCol(FXint row,FXint col) const; FXint endRow(FXint row,FXint col) const; FXint endCol(FXint row,FXint col) const; void spanningRange(FXint& sr,FXint& er,FXint& sc,FXint& ec,FXint anchrow,FXint anchcol,FXint currow,FXint curcol); virtual void moveContents(FXint x,FXint y); virtual void drawCell(FXDC& dc,FXint sr,FXint er,FXint sc,FXint ec); virtual void drawRange(FXDC& dc,FXint rlo,FXint rhi,FXint clo,FXint chi); virtual void drawHGrid(FXDC& dc,FXint rlo,FXint rhi,FXint clo,FXint chi); virtual void drawVGrid(FXDC& dc,FXint rlo,FXint rhi,FXint clo,FXint chi); virtual void drawContents(FXDC& dc,FXint x,FXint y,FXint w,FXint h); virtual FXTableItem* createItem(const FXString& text,FXIcon* icon,void* ptr); virtual FXWindow *getControlForItem(FXint r,FXint c); virtual void setItemFromControl(FXint r,FXint c,FXWindow *control); virtual void updateColumnNumbers(FXint lo,FXint hi); virtual void updateRowNumbers(FXint lo,FXint hi); protected: enum { MOUSE_NONE, MOUSE_SCROLL, MOUSE_DRAG, MOUSE_SELECT }; private: FXTable(const FXTable&); FXTable& operator=(const FXTable&); public: long onPaint(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onSelectionLost(FXObject*,FXSelector,void*); long onSelectionGained(FXObject*,FXSelector,void*); long onSelectionRequest(FXObject*,FXSelector,void* ptr); long onClipboardLost(FXObject*,FXSelector,void*); long onClipboardGained(FXObject*,FXSelector,void*); long onClipboardRequest(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onCommand(FXObject*,FXSelector,void*); long onClicked(FXObject*,FXSelector,void*); long onDoubleClicked(FXObject*,FXSelector,void*); long onTripleClicked(FXObject*,FXSelector,void*); long onCmdToggleEditable(FXObject*,FXSelector,void*); long onUpdToggleEditable(FXObject*,FXSelector,void*); // Visual characteristics long onCmdHorzGrid(FXObject*,FXSelector,void*); long onUpdHorzGrid(FXObject*,FXSelector,void*); long onCmdVertGrid(FXObject*,FXSelector,void*); long onUpdVertGrid(FXObject*,FXSelector,void*); // Row/Column manipulations long onCmdDeleteColumn(FXObject*,FXSelector,void*); long onUpdDeleteColumn(FXObject*,FXSelector,void*); long onCmdDeleteRow(FXObject*,FXSelector,void*); long onUpdDeleteRow(FXObject*,FXSelector,void*); long onCmdInsertColumn(FXObject*,FXSelector,void*); long onUpdInsertColumn(FXObject*,FXSelector,void*); long onCmdInsertRow(FXObject*,FXSelector,void*); long onUpdInsertRow(FXObject*,FXSelector,void*); // Movement long onCmdMoveRight(FXObject*,FXSelector,void*); long onCmdMoveLeft(FXObject*,FXSelector,void*); long onCmdMoveUp(FXObject*,FXSelector,void*); long onCmdMoveDown(FXObject*,FXSelector,void*); long onCmdMoveHome(FXObject*,FXSelector,void*); long onCmdMoveEnd(FXObject*,FXSelector,void*); long onCmdMoveTop(FXObject*,FXSelector,void*); long onCmdMoveBottom(FXObject*,FXSelector,void*); long onCmdMovePageDown(FXObject*,FXSelector,void*); long onCmdMovePageUp(FXObject*,FXSelector,void*); // Mark and extend long onCmdMark(FXObject*,FXSelector,void*); long onCmdExtend(FXObject*,FXSelector,void*); // Changing Selection long onUpdSelectCell(FXObject*,FXSelector,void*); long onCmdSelectCell(FXObject*,FXSelector,void*); long onUpdSelectRow(FXObject*,FXSelector,void*); long onCmdSelectRow(FXObject*,FXSelector,void*); long onUpdSelectColumn(FXObject*,FXSelector,void*); long onCmdSelectColumn(FXObject*,FXSelector,void*); long onCmdSelectRowIndex(FXObject*,FXSelector,void*); long onCmdSelectColumnIndex(FXObject*,FXSelector,void*); long onUpdSelectAll(FXObject*,FXSelector,void*); long onCmdSelectAll(FXObject*,FXSelector,void*); long onUpdDeselectAll(FXObject*,FXSelector,void*); long onCmdDeselectAll(FXObject*,FXSelector,void*); // Manipulation Selection long onCmdCutSel(FXObject*,FXSelector,void*); long onCmdCopySel(FXObject*,FXSelector,void*); long onCmdDeleteSel(FXObject*,FXSelector,void*); long onCmdPasteSel(FXObject*,FXSelector,void*); long onUpdHaveSelection(FXObject*,FXSelector,void*); // Edit control long onCmdStartInput(FXObject*,FXSelector,void*); long onUpdStartInput(FXObject*,FXSelector,void*); long onCmdAcceptInput(FXObject*,FXSelector,void*); long onUpdAcceptInput(FXObject*,FXSelector,void*); long onCmdCancelInput(FXObject*,FXSelector,void*); public: enum { ID_HORZ_GRID=FXScrollArea::ID_LAST, ID_VERT_GRID, ID_TOGGLE_EDITABLE, ID_DELETE_COLUMN, ID_DELETE_ROW, ID_INSERT_COLUMN, ID_INSERT_ROW, ID_SELECT_COLUMN_INDEX, ID_SELECT_ROW_INDEX, ID_SELECT_COLUMN, ID_SELECT_ROW, ID_SELECT_CELL, ID_SELECT_ALL, ID_DESELECT_ALL, ID_MOVE_LEFT, ID_MOVE_RIGHT, ID_MOVE_UP, ID_MOVE_DOWN, ID_MOVE_HOME, ID_MOVE_END, ID_MOVE_TOP, ID_MOVE_BOTTOM, ID_MOVE_PAGEDOWN, ID_MOVE_PAGEUP, ID_START_INPUT, ID_CANCEL_INPUT, ID_ACCEPT_INPUT, ID_MARK, ID_EXTEND, ID_CUT_SEL, ID_COPY_SEL, ID_PASTE_SEL, ID_DELETE_SEL, ID_LAST }; public: /** * Construct a new table. * The table is initially empty, and reports a default size based on * the scroll areas's scrollbar placement policy. */ FXTable(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_MARGIN,FXint pr=DEFAULT_MARGIN,FXint pt=DEFAULT_MARGIN,FXint pb=DEFAULT_MARGIN); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Computes content width virtual FXint getContentWidth(); /// Computes content height virtual FXint getContentHeight(); /// Create the server-side resources virtual void create(); /// Detach the server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Mark this window's layout as dirty virtual void recalc(); /// Table widget can receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Notification that focus moved to new child virtual void changeFocus(FXWindow *child); /// Return button in the top/left corner FXButton* getCornerButton() const { return cornerButton; } /// Return column header control FXHeader* getColumnHeader() const { return colHeader; } /// Return row header control FXHeader* getRowHeader() const { return rowHeader; } /// Change visible rows void setVisibleRows(FXint nvrows); /// return number of visible rows FXint getVisibleRows() const { return visiblerows; } /// Change visible columns void setVisibleColumns(FXint nvcols); /// Return number of visible columns FXint getVisibleColumns() const { return visiblecols; } /// Return TRUE if table is editable FXbool isEditable() const; /// Set editable flag void setEditable(FXbool edit=TRUE); /// Show or hide horizontal grid void showHorzGrid(FXbool on=TRUE); /// Is horizontal grid shown FXbool isHorzGridShown() const { return hgrid; } /// Show or hide vertical grid void showVertGrid(FXbool on=TRUE); /// Is vertical grid shown FXbool isVertGridShown() const { return vgrid; } /// Get number of rows FXint getNumRows() const { return nrows; } /// Get number of columns FXint getNumColumns() const { return ncols; } /// Change top cell margin void setMarginTop(FXint pt); /// Return top cell margin FXint getMarginTop() const { return margintop; } /// Change bottom cell margin void setMarginBottom(FXint pb); /// Return bottom cell margin FXint getMarginBottom() const { return marginbottom; } /// Change left cell margin void setMarginLeft(FXint pl); /// Return left cell margin FXint getMarginLeft() const { return marginleft; } /// Change right cell margin void setMarginRight(FXint pr); /// Return right cell margin FXint getMarginRight() const { return marginright; } /** * Start input mode for the cell at the given position. * An input control is created which is used to edit the cell; * it is filled by the original item's contents if the cell contained * an item. You can enter input mode also by sending the table an * ID_START_INPUT message. */ virtual void startInput(FXint row,FXint col); /** * Cancel input mode. The input control is immediately deleted * and the cell will retain its old value. You can also cancel * input mode by sending the table an ID_CANCEL_INPUT message. */ virtual void cancelInput(); /** * End input mode and accept the new value from the control. * The item in the cell will be set to the value from the control, * and the control will be deleted. If TRUE is passed, a SEL_REPLACED * callback will be generated to signify to the target that this call * has a new value. You can also accept the input by sending the table * an ID_ACCEPT_INPUT message. */ virtual void acceptInput(FXbool notify=FALSE); /** * Determine column containing x. * Returns -1 if x left of first column, and ncols if x right of last column; * otherwise, returns column in table containing x. */ FXint colAtX(FXint x) const; /** * Determine row containing y. * Returns -1 if y above first row, and nrows if y below last row; * otherwise, returns row in table containing y. */ FXint rowAtY(FXint y) const; /// Return the item at the given index FXTableItem *getItem(FXint row,FXint col) const; /// Replace the item with a [possibly subclassed] item void setItem(FXint row,FXint col,FXTableItem* item,FXbool notify=FALSE); /// Set the table size to nr rows and nc columns; all existing items will be removed virtual void setTableSize(FXint nr,FXint nc,FXbool notify=FALSE); /// Insert new row virtual void insertRows(FXint row,FXint nr=1,FXbool notify=FALSE); /// Insert new column virtual void insertColumns(FXint col,FXint nc=1,FXbool notify=FALSE); /// Remove rows of cells virtual void removeRows(FXint row,FXint nr=1,FXbool notify=FALSE); /// Remove column of cells virtual void removeColumns(FXint col,FXint nc=1,FXbool notify=FALSE); /// Extract item from table virtual FXTableItem* extractItem(FXint row,FXint col,FXbool notify=FALSE); /// Clear single cell virtual void removeItem(FXint row,FXint col,FXbool notify=FALSE); /// Clear all cells in the given range virtual void removeRange(FXint startrow,FXint endrow,FXint startcol,FXint endcol,FXbool notify=FALSE); /// Remove all items from table virtual void clearItems(FXbool notify=FALSE); /// Scroll to make cell at r,c fully visible virtual void makePositionVisible(FXint r,FXint c); /// Return TRUE if item partially visible FXbool isItemVisible(FXint r,FXint c) const; /** * Change column header height mode to fixed or variable. * In variable height mode, the column header will size to * fit the contents in it. In fixed mode, the size is * explicitly set using setColumnHeaderHeight(). */ void setColumnHeaderMode(FXuint hint=LAYOUT_FIX_HEIGHT); /// Return column header height mode FXuint getColumnHeaderMode() const; /** * Change row header width mode to fixed or variable. * In variable width mode, the row header will size to * fit the contents in it. In fixed mode, the size is * explicitly set using setRowHeaderWidth(). */ void setRowHeaderMode(FXuint hint=LAYOUT_FIX_WIDTH); /// Return row header width mode FXuint getRowHeaderMode() const; /// Set column header font void setColumnHeaderFont(FXFont* fnt); /// Return column header font FXFont* getColumnHeaderFont() const; /// Set row header font void setRowHeaderFont(FXFont* fnt); /// Return row header font FXFont* getRowHeaderFont() const; /// Change column header height void setColumnHeaderHeight(FXint h); /// Return column header height FXint getColumnHeaderHeight() const; /// Change row header width void setRowHeaderWidth(FXint w); /// Return row header width FXint getRowHeaderWidth() const; /// Get X coordinate of column FXint getColumnX(FXint col) const; /// Get Y coordinate of row FXint getRowY(FXint row) const; /// Change column width virtual void setColumnWidth(FXint col,FXint cwidth); /// Get column width FXint getColumnWidth(FXint col) const; /// Change row height virtual void setRowHeight(FXint row,FXint rheight); /// Get row height FXint getRowHeight(FXint row) const; /// Change default column width void setDefColumnWidth(FXint cwidth); /// Get default column width FXint getDefColumnWidth() const { return defColWidth; } /// Change default row height void setDefRowHeight(FXint rheight); /// Get default row height FXint getDefRowHeight() const { return defRowHeight; } /// Return minimum row height FXint getMinRowHeight(FXint r) const; /// Return minimum column width FXint getMinColumnWidth(FXint c) const; /// Fit row heights to contents void fitRowsToContents(FXint row,FXint nr=1); /// Fit column widths to contents void fitColumnsToContents(FXint col,FXint nc=1); /// Change column header text void setColumnText(FXint index,const FXString& text); /// Return text of column header at index FXString getColumnText(FXint index) const; /// Change row header text void setRowText(FXint index,const FXString& text); /// Return text of row header at index FXString getRowText(FXint index) const; /// Change column header icon void setColumnIcon(FXint index,FXIcon* icon); /// Return icon of column header at index FXIcon* getColumnIcon(FXint index) const; /// Change row header icon void setRowIcon(FXint index,FXIcon* icon); /// Return icon of row header at index FXIcon* getRowIcon(FXint index) const; /// Change column header icon position, e.g. FXHeaderItem::BEFORE, etc. void setColumnIconPosition(FXint index,FXuint mode); /// Return icon position of column header at index FXuint getColumnIconPosition(FXint index) const; /// Change row header icon position, e.g. FXHeaderItem::BEFORE, etc. void setRowIconPosition(FXint index,FXuint mode); /// Return icon position of row header at index FXuint getRowIconPosition(FXint index) const; /// Change column header justify, e.g. FXHeaderItem::RIGHT, etc. void setColumnJustify(FXint index,FXuint justify); /// Return justify of column header at index FXuint getColumnJustify(FXint index) const; /// Change row header justify, e.g. FXHeaderItem::RIGHT, etc. void setRowJustify(FXint index,FXuint justify); /// Return justify of row header at index FXuint getRowJustify(FXint index) const; /// Modify cell text void setItemText(FXint r,FXint c,const FXString& text,FXbool notify=FALSE); /// Return cell text FXString getItemText(FXint r,FXint c) const; /// Modify cell icon, deleting the old icon if it was owned void setItemIcon(FXint r,FXint c,FXIcon* icon,FXbool owned=FALSE,FXbool notify=FALSE); /// Return cell icon FXIcon* getItemIcon(FXint r,FXint c) const; /// Modify cell user-data void setItemData(FXint r,FXint c,void* ptr); void* getItemData(FXint r,FXint c) const; /** * Extract cells from given range as text, each column separated by a string cs, * and each row separated by a string rs. */ void extractText(FXchar*& text,FXint& size,FXint startrow,FXint endrow,FXint startcol,FXint endcol,const FXchar* cs="\t",const FXchar* rs="\n") const; void extractText(FXString& text,FXint startrow,FXint endrow,FXint startcol,FXint endcol,const FXchar* cs="\t",const FXchar* rs="\n") const; /** * Overlay text over given cell range; the text is interpreted as * a number of columns separated by a character from the set cs, and * a number of rows separated by a character from the set rs. * Cells outside the given cell range are unaffected. */ void overlayText(FXint startrow,FXint endrow,FXint startcol,FXint endcol,const FXchar* text,FXint size,const FXchar* cs="\t,",const FXchar* rs="\n",FXbool notify=FALSE); void overlayText(FXint startrow,FXint endrow,FXint startcol,FXint endcol,const FXString& text,const FXchar* cs="\t,",const FXchar* rs="\n",FXbool notify=FALSE); /** * Determine the number of rows and columns in a block of text * where columns are separated by characters from the set cs, and rows * are separated by characters from the set rs. */ void countText(FXint& nr,FXint& nc,const FXchar* text,FXint size,const FXchar* cs="\t,",const FXchar* rs="\n") const; void countText(FXint& nr,FXint& nc,const FXString& text,const FXchar* cs="\t,",const FXchar* rs="\n") const; /// Return TRUE if its a spanning cell FXbool isItemSpanning(FXint r,FXint c) const; /// Repaint cells between grid lines sr,er and grid lines sc,ec void updateRange(FXint sr,FXint er,FXint sc,FXint ec) const; /// Repaint cell at r,c void updateItem(FXint r,FXint c) const; /// Enable item virtual FXbool enableItem(FXint r,FXint c); /// Disable item virtual FXbool disableItem(FXint r,FXint c); /// Is item enabled FXbool isItemEnabled(FXint r,FXint c) const; /** * Change item justification. Horizontal justification is controlled by passing * FXTableItem::RIGHT, FXTableItem::LEFT, or FXTableItem::CENTER_X. * Vertical justification is controlled by FXTableItem::TOP, FXTableItem::BOTTOM, * or FXTableItem::CENTER_Y. * The default is a combination of FXTableItem::RIGHT and FXTableItem::CENTER_Y. */ void setItemJustify(FXint r,FXint c,FXuint justify); /// Return item justification FXuint getItemJustify(FXint r,FXint c) const; /** * Change relative position of icon and text of item. * Passing FXTableItem::BEFORE or FXTableItem::AFTER places the icon * before or after the text, and passing FXTableItem::ABOVE or * FXTableItem::BELOW places it above or below the text, respectively. * The default is 0 which places the text on top of the icon. */ void setItemIconPosition(FXint r,FXint c,FXuint mode); /// Return relative icon and text position FXuint getItemIconPosition(FXint r,FXint c) const; /** * Change item borders style. Borders on each side of the item can be turned * controlled individually using FXTableItem::LBORDER, FXTableItem::RBORDER, * FXTableItem::TBORDER and FXTableItem::BBORDER. */ void setItemBorders(FXint r,FXint c,FXuint borders); /// Return item border style FXuint getItemBorders(FXint r,FXint c) const; /// Change item background stipple style void setItemStipple(FXint r,FXint c,FXStipplePattern pat); /// return item background stipple style FXStipplePattern getItemStipple(FXint r,FXint c) const; /// Change current item virtual void setCurrentItem(FXint r,FXint c,FXbool notify=FALSE); /// Get row number of current item FXint getCurrentRow() const { return current.row; } /// Get column number of current item FXint getCurrentColumn() const { return current.col; } /// Is item current FXbool isItemCurrent(FXint r,FXint c) const; /// Change anchor item void setAnchorItem(FXint r,FXint c); /// Get row number of anchor item FXint getAnchorRow() const { return anchor.row; } /// Get column number of anchor item FXint getAnchorColumn() const { return anchor.col; } /// Get selection start row; returns -1 if no selection FXint getSelStartRow() const { return selection.fm.row; } /// Get selection start column; returns -1 if no selection FXint getSelStartColumn() const { return selection.fm.col; } /// Get selection end row; returns -1 if no selection FXint getSelEndRow() const { return selection.to.row; } /// Get selection end column; returns -1 if no selection FXint getSelEndColumn() const { return selection.to.col; } /// Is cell selected FXbool isItemSelected(FXint r,FXint c) const; /// Is row of cells selected FXbool isRowSelected(FXint r) const; /// Is column selected FXbool isColumnSelected(FXint c) const; /// Is anything selected FXbool isAnythingSelected() const; /// Select a row virtual FXbool selectRow(FXint row,FXbool notify=FALSE); /// Select a column virtual FXbool selectColumn(FXint col,FXbool notify=FALSE); /// Select range virtual FXbool selectRange(FXint startrow,FXint endrow,FXint startcol,FXint endcol,FXbool notify=FALSE); /// Extend selection virtual FXbool extendSelection(FXint r,FXint c,FXbool notify=FALSE); /// Kill selection virtual FXbool killSelection(FXbool notify=FALSE); /// Change font void setFont(FXFont* fnt); /// Return current font FXFont* getFont() const { return font; } /// Obtain colors of various parts FXColor getTextColor() const { return textColor; } FXColor getBaseColor() const { return baseColor; } FXColor getHiliteColor() const { return hiliteColor; } FXColor getShadowColor() const { return shadowColor; } FXColor getBorderColor() const { return borderColor; } FXColor getSelBackColor() const { return selbackColor; } FXColor getSelTextColor() const { return seltextColor; } FXColor getGridColor() const { return gridColor; } FXColor getStippleColor() const { return stippleColor; } FXColor getCellBorderColor() const { return cellBorderColor; } /// Change colors of various parts void setTextColor(FXColor clr); void setBaseColor(FXColor clr); void setHiliteColor(FXColor clr); void setShadowColor(FXColor clr); void setBorderColor(FXColor clr); void setSelBackColor(FXColor clr); void setSelTextColor(FXColor clr); void setGridColor(FXColor clr); void setStippleColor(FXColor clr); void setCellBorderColor(FXColor clr); /// Change cell background color for even/odd rows/columns void setCellColor(FXint r,FXint c,FXColor clr); /// Obtain cell background color for even/odd rows/columns FXColor getCellColor(FXint r,FXint c) const; /// Change cell border width void setCellBorderWidth(FXint borderwidth); /// Return cell border width FXint getCellBorderWidth() const { return cellBorderWidth; } /// Change table style void setTableStyle(FXuint style); /// Return table style FXuint getTableStyle() const; /// Set column renumbering void setColumnRenumbering(FXbool flag); /// Get column renumbering FXbool getColumnRenumbering() const; /// Set row renumbering void setRowRenumbering(FXbool flag); /// Get row renumbering FXbool getRowRenumbering() const; /// Change help text void setHelpText(const FXString& text){ help=text; } const FXString& getHelpText() const { return help; } /// Serialize virtual void save(FXStream& store) const; virtual void load(FXStream& store); virtual ~FXTable(); }; } #endif fox-1.6.49/include/FXMDIButton.h0000664000175000017500000001215712130340076013173 00000000000000/******************************************************************************** * * * M u l t i p l e D o c u m e n t B u t t o n * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMDIButton.h,v 1.16 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXMDIBUTTON_H #define FXMDIBUTTON_H #ifndef FXBUTTON_H #include "FXButton.h" #endif namespace FX { class FXIcon; /// MDI Delete button class FXAPI FXMDIDeleteButton : public FXButton { FXDECLARE(FXMDIDeleteButton) protected: FXMDIDeleteButton(){} private: FXMDIDeleteButton(const FXMDIDeleteButton&); FXMDIDeleteButton &operator=(const FXMDIDeleteButton&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Constructor FXMDIDeleteButton(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_RAISED,FXint x=0,FXint y=0,FXint w=0,FXint h=0); virtual FXint getDefaultWidth(); virtual FXint getDefaultHeight(); }; /// MDI Restore button class FXAPI FXMDIRestoreButton : public FXButton { FXDECLARE(FXMDIRestoreButton) protected: FXMDIRestoreButton(){} private: FXMDIRestoreButton(const FXMDIRestoreButton&); FXMDIRestoreButton &operator=(const FXMDIRestoreButton&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Constructor FXMDIRestoreButton(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_RAISED,FXint x=0,FXint y=0,FXint w=0,FXint h=0); virtual FXint getDefaultWidth(); virtual FXint getDefaultHeight(); }; /// MDI Maximize button class FXAPI FXMDIMaximizeButton : public FXButton { FXDECLARE(FXMDIMaximizeButton) protected: FXMDIMaximizeButton(){} private: FXMDIMaximizeButton(const FXMDIMaximizeButton&); FXMDIMaximizeButton &operator=(const FXMDIMaximizeButton&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Constructor FXMDIMaximizeButton(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_RAISED,FXint x=0,FXint y=0,FXint w=0,FXint h=0); virtual FXint getDefaultWidth(); virtual FXint getDefaultHeight(); }; /// MDI Minimize button class FXAPI FXMDIMinimizeButton : public FXButton { FXDECLARE(FXMDIMinimizeButton) protected: FXMDIMinimizeButton(){} private: FXMDIMinimizeButton(const FXMDIMinimizeButton&); FXMDIMinimizeButton &operator=(const FXMDIMinimizeButton&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Constructor FXMDIMinimizeButton(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_RAISED,FXint x=0,FXint y=0,FXint w=0,FXint h=0); virtual FXint getDefaultWidth(); virtual FXint getDefaultHeight(); }; /// MDI Window button class FXAPI FXMDIWindowButton : public FXMenuButton { FXDECLARE(FXMDIWindowButton) protected: FXMDIWindowButton(){} private: FXMDIWindowButton(const FXMDIWindowButton&); FXMDIWindowButton &operator=(const FXMDIWindowButton&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Constructor FXMDIWindowButton(FXComposite* p,FXPopup* pup,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); virtual FXint getDefaultWidth(); virtual FXint getDefaultHeight(); }; /// MDI Window Menu class FXAPI FXMDIMenu : public FXMenuPane { FXDECLARE(FXMDIMenu) private: FXIcon *closeicon; FXIcon *maximizeicon; FXIcon *minimizeicon; FXIcon *restoreicon; protected: FXMDIMenu(){} private: FXMDIMenu(const FXMDIMenu&); FXMDIMenu &operator=(const FXMDIMenu&); public: /// Construct MDI menu FXMDIMenu(FXWindow *owner,FXObject* tgt=NULL); /// Destructor virtual ~FXMDIMenu(); }; } #endif fox-1.6.49/include/FXFileSelector.h0000664000175000017500000002440312130340076013743 00000000000000/******************************************************************************** * * * F i l e S e l e c t i o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFileSelector.h,v 1.61 2006/01/23 15:51:05 fox Exp $ * ********************************************************************************/ #ifndef FXFILESELECTOR_H #define FXFILESELECTOR_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { class FXFileList; class FXTextField; class FXComboBox; class FXDirBox; class FXButton; class FXMenuButton; class FXIcon; class FXMenuPane; class FXCheckButton; class FXMatrix; class FXHorizontalFrame; /// File selection modes enum { SELECTFILE_ANY, /// A single file, existing or not (to save to) SELECTFILE_EXISTING, /// An existing file (to load) SELECTFILE_MULTIPLE, /// Multiple existing files SELECTFILE_MULTIPLE_ALL, /// Multiple existing files or directories, but not '.' and '..' SELECTFILE_DIRECTORY /// Existing directory, including '.' or '..' }; /// File selection widget class FXAPI FXFileSelector : public FXPacker { FXDECLARE(FXFileSelector) protected: FXFileList *filebox; // File list widget FXTextField *filename; // File name entry field FXComboBox *filefilter; // Combobox for pattern list FXMenuPane *bookmarkmenu; // Menu for bookmarks FXHorizontalFrame *navbuttons; // Navigation buttons FXHorizontalFrame *fileboxframe; // Frame around file list FXMatrix *entryblock; // Entry block FXCheckButton *readonly; // Open file as read only FXDirBox *dirbox; // Directory hierarchy list FXButton *accept; // Accept button FXButton *cancel; // Cancel button FXIcon *updiricon; // Up directory icon FXIcon *listicon; // List mode icon FXIcon *detailicon; // Detail mode icon FXIcon *iconsicon; // Icon mode icon FXIcon *homeicon; // Go home icon FXIcon *workicon; // Go home icon FXIcon *shownicon; // Files shown icon FXIcon *hiddenicon; // Files hidden icon FXIcon *markicon; // Book mark icon FXIcon *clearicon; // Book clear icon FXIcon *newicon; // New directory icon FXIcon *deleteicon; // Delete file icon FXIcon *moveicon; // Rename file icon FXIcon *copyicon; // Copy file icon FXIcon *linkicon; // Link file icon FXRecentFiles bookmarks; // Bookmarked places FXuint selectmode; // Select mode FXbool navigable; // May navigate protected: FXFileSelector(){} FXString *getSelectedFiles() const; FXString *getSelectedFilesOnly() const; private: FXFileSelector(const FXFileSelector&); FXFileSelector &operator=(const FXFileSelector&); public: long onCmdAccept(FXObject*,FXSelector,void*); long onCmdFilter(FXObject*,FXSelector,void*); long onCmdItemDblClicked(FXObject*,FXSelector,void*); long onCmdItemSelected(FXObject*,FXSelector,void*); long onCmdItemDeselected(FXObject*,FXSelector,void*); long onCmdDirectoryUp(FXObject*,FXSelector,void*); long onUpdDirectoryUp(FXObject*,FXSelector,void*); long onCmdDirTree(FXObject*,FXSelector,void*); long onCmdHome(FXObject*,FXSelector,void*); long onCmdWork(FXObject*,FXSelector,void*); long onCmdBookmark(FXObject*,FXSelector,void*); long onCmdVisit(FXObject*,FXSelector,void*); long onCmdNew(FXObject*,FXSelector,void*); long onUpdNew(FXObject*,FXSelector,void*); long onCmdMove(FXObject*,FXSelector,void*); long onCmdCopy(FXObject*,FXSelector,void*); long onCmdLink(FXObject*,FXSelector,void*); long onCmdDelete(FXObject*,FXSelector,void*); long onUpdSelected(FXObject*,FXSelector,void*); long onPopupMenu(FXObject*,FXSelector,void*); long onCmdImageSize(FXObject*,FXSelector,void*); long onUpdImageSize(FXObject*,FXSelector,void*); long onUpdNavigable(FXObject*,FXSelector,void*); public: enum { ID_FILEFILTER=FXPacker::ID_LAST, ID_ACCEPT, ID_FILELIST, ID_DIRECTORY_UP, ID_DIRTREE, ID_NORMAL_SIZE, ID_MEDIUM_SIZE, ID_GIANT_SIZE, ID_HOME, ID_WORK, ID_BOOKMARK, ID_BOOKMENU, ID_VISIT, ID_NEW, ID_DELETE, ID_MOVE, ID_COPY, ID_LINK, ID_LAST }; public: /// Constructor FXFileSelector(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return a pointer to the "Accept" button FXButton *acceptButton() const { return accept; } /// Return a pointer to the "Cancel" button FXButton *cancelButton() const { return cancel; } /// Change file name void setFilename(const FXString& path); /// Return file name, if any FXString getFilename() const; /** * Return array of strings containing the selected file names, terminated * by an empty string. This string array must be freed using delete []. * If no files were selected, a NULL is returned. */ FXString* getFilenames() const; /// Change file pattern void setPattern(const FXString& ptrn); /// Return file pattern FXString getPattern() const; /** * Change the list of file patterns shown in the file dialog. * Each pattern comprises an optional name, followed by a pattern in * parentheses. The patterns are separated by newlines. * For example, * * "*\n*.cpp,*.cc\n*.hpp,*.hh,*.h" * * and * * "All Files (*)\nC++ Sources (*.cpp,*.cc)\nC++ Headers (*.hpp,*.hh,*.h)" * * will set the same three patterns, but the former shows no pattern names. */ void setPatternList(const FXString& patterns); /// Return list of patterns FXString getPatternList() const; /** * After setting the list of patterns, this call will * initially select pattern n as the active one. */ void setCurrentPattern(FXint n); /// Return current pattern number FXint getCurrentPattern() const; /// Get pattern text for given pattern number FXString getPatternText(FXint patno) const; /// Change pattern text for pattern number void setPatternText(FXint patno,const FXString& text); /// Return number of patterns FXint getNumPatterns() const; /// Allow pattern entry void allowPatternEntry(FXbool allow); /// Return TRUE if pattern entry is allowed FXbool allowPatternEntry() const; /** * Given filename pattern of the form "GIF Format (*.gif)", * returns the pattern only, i.e. "*.gif" in this case. * If the parentheses are not found then returns the entire * input pattern. */ static FXString patternFromText(const FXString& pattern); /** * Given a pattern of the form "*.gif,*.GIF", return * the first extension of the pattern, i.e. "gif" in this * example. Returns empty string if it doesn't work out. */ static FXString extensionFromPattern(const FXString& pattern); /// Change directory void setDirectory(const FXString& path); /// Return directory FXString getDirectory() const; /// Set the inter-item spacing (in pixels) void setItemSpace(FXint s); /// Return the inter-item spacing (in pixels) FXint getItemSpace() const; /// Change file list style void setFileBoxStyle(FXuint style); /// Return file list style FXuint getFileBoxStyle() const; /// Change file selection mode void setSelectMode(FXuint mode); /// Return file selection mode FXuint getSelectMode() const { return selectmode; } /// Change wildcard matching mode void setMatchMode(FXuint mode); /// Return wildcard matching mode FXuint getMatchMode() const; /// Return TRUE if showing hidden files FXbool showHiddenFiles() const; /// Show or hide hidden files void showHiddenFiles(FXbool showing); /// Return TRUE if image preview on FXbool showImages() const; /// Show or hide preview images void showImages(FXbool showing); /// Return images preview size FXint getImageSize() const; /// Change images preview size void setImageSize(FXint size); /// Show readonly button void showReadOnly(FXbool show); /// Return TRUE if readonly is shown FXbool shownReadOnly() const; /// Set initial state of readonly button void setReadOnly(FXbool state); /// Get readonly state FXbool getReadOnly() const; /// Allow or disallow navigation void allowNavigation(FXbool flag){ navigable=flag; } /// Is navigation allowed? FXbool allowNavigation() const { return navigable; } /// Save object to a stream virtual void save(FXStream& store) const; /// Load object from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXFileSelector(); }; } #endif fox-1.6.49/include/FXHash.h0000664000175000017500000000633212130340076012247 00000000000000/******************************************************************************** * * * H a s h T a b l e C l a s s * * * ********************************************************************************* * Copyright (C) 2003,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXHash.h,v 1.12 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXHASH_H #define FXHASH_H namespace FX { /** * A hash table for associating pointers to pointers. */ class FXAPI FXHash { private: struct FXEntry { void* key; void* value; }; private: FXEntry *table; // Hash table FXuint total; // Table size FXuint used; // Number of used entries FXuint free; // Number of free entries private: FXHash(const FXHash&); FXHash &operator=(const FXHash&); public: /// Construct empty hash table FXHash(); /// Resize the table to the given size. void size(FXuint m); /// Return the size of the table FXint size() const { return total; } /// Return number of items in table FXuint no() const { return used; } /// Insert key into the table void* insert(void* key,void* value); /// Replace key in table void* replace(void* key,void* value); /// Remove key from the table void* remove(void* key); /// Return value of key void* find(void* key) const; /// Return true if slot is empty bool empty(FXint pos) const { return (table[pos].key==NULL)||(table[pos].key==(void*)-1L); } /// Return key at position pos void* key(FXint pos) const { return table[pos].key; } /// Return data pointer at position pos void* value(FXint pos) const { return table[pos].value; } /// Clear hash table void clear(); /// Destructor virtual ~FXHash(); }; } #endif fox-1.6.49/include/FX88592Codec.h0000644000175000017500000000110411637250333013016 00000000000000#ifndef FX88592CODEC_H #define FX88592CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-2 Codec class FXAPI FX88592Codec : public FXTextCodec { FXDECLARE(FX88592Codec) public: FX88592Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88592Codec(){} }; } #endif fox-1.6.49/include/FXDocument.h0000664000175000017500000000634312130340076013144 00000000000000/******************************************************************************** * * * D o c u m e n t O b j e c t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDocument.h,v 1.16 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXDOCUMENT_H #define FXDOCUMENT_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { // Forward class FXWindow; /// Abstract base class for documents class FXAPI FXDocument : public FXObject { FXDECLARE(FXDocument) private: FXString title; // Title to appear above windows FXString filename; // File name to save to FXbool modified; // Document has been modified public: long onUpdTitle(FXObject*,FXSelector,void*); long onUpdFilename(FXObject*,FXSelector,void*); public: enum { ID_TITLE=10000, // Don't interfere with viewer's message id's ID_FILENAME, ID_LAST }; public: /// Constructor FXDocument(); /// Return true if document is modified FXbool isModified() const { return modified; } /// Set its modified state void setModified(FXbool mdfy=TRUE){ modified=mdfy; } /// Set document title void setTitle(const FXString& name); /// Get document title const FXString& getTitle() const { return title; } /// Set document filename void setFilename(const FXString& path); /// Get document filename const FXString& getFilename() const { return filename; } /// Save document to a stream virtual void save(FXStream& store) const; /// Load document from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXDocument(); }; } #endif fox-1.6.49/include/FXVec2d.h0000664000175000017500000001722312130340076012330 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n 2 - E l e m e n t V e c t o r * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXVec2d.h,v 1.21 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXVEC2D_H #define FXVEC2D_H namespace FX { class FXMat3d; /// Double-precision 2-element vector class FXAPI FXVec2d { public: FXdouble x; FXdouble y; public: /// Default constructor FXVec2d(){} /// Initialize from another vector FXVec2d(const FXVec2d& v){x=v.x;y=v.y;} /// Initialize from array of floats FXVec2d(const FXdouble v[]){x=v[0];y=v[1];} /// Initialize from components FXVec2d(FXdouble xx,FXdouble yy){x=xx;y=yy;} /// Return a non-const reference to the ith element FXdouble& operator[](FXint i){return (&x)[i];} /// Return a const reference to the ith element const FXdouble& operator[](FXint i) const {return (&x)[i];} /// Assignment FXVec2d& operator=(const FXVec2d& v){x=v.x;y=v.y;return *this;} /// Assignment from array of floats FXVec2d& operator=(const FXdouble v[]){x=v[0];y=v[1];return *this;} /// Set value from another vector FXVec2d& set(const FXVec2d& v){x=v.x;y=v.y;return *this;} /// Set value from array of floats FXVec2d& set(const FXdouble v[]){x=v[0];y=v[1];return *this;} /// Set value from components FXVec2d& set(FXdouble xx,FXdouble yy){x=xx;y=yy;return *this;} /// Assigning operators FXVec2d& operator*=(FXdouble n){x*=n;y*=n;return *this;} FXVec2d& operator/=(FXdouble n){x/=n;y/=n;return *this;} FXVec2d& operator+=(const FXVec2d& v){x+=v.x;y+=v.y;return *this;} FXVec2d& operator-=(const FXVec2d& v){x-=v.x;y-=v.y;return *this;} /// Conversions operator FXdouble*(){return &x;} operator const FXdouble*() const {return &x;} /// Unary FXVec2d operator+() const { return *this; } FXVec2d operator-() const { return FXVec2d(-x,-y); } /// Vector and vector FXVec2d operator+(const FXVec2d& v) const { return FXVec2d(x+v.x,y+v.y); } FXVec2d operator-(const FXVec2d& v) const { return FXVec2d(x-v.x,y-v.y); } /// Vector and matrix FXVec2d operator*(const FXMat3d& m) const; /// Scaling friend inline FXVec2d operator*(const FXVec2d& a,FXdouble n); friend inline FXVec2d operator*(FXdouble n,const FXVec2d& a); friend inline FXVec2d operator/(const FXVec2d& a,FXdouble n); friend inline FXVec2d operator/(FXdouble n,const FXVec2d& a); /// Dot product FXdouble operator*(const FXVec2d& v) const { return x*v.x+y*v.y; } /// Test if zero bool operator!() const { return x==0.0 && y==0.0;} /// Equality tests bool operator==(const FXVec2d& v) const { return x==v.x && y==v.y; } bool operator!=(const FXVec2d& v) const { return x!=v.x || y!=v.y; } friend inline bool operator==(const FXVec2d& a,FXdouble n); friend inline bool operator!=(const FXVec2d& a,FXdouble n); friend inline bool operator==(FXdouble n,const FXVec2d& a); friend inline bool operator!=(FXdouble n,const FXVec2d& a); /// Inequality tests bool operator<(const FXVec2d& v) const { return x(const FXVec2d& v) const { return x>v.x && y>v.y; } bool operator>=(const FXVec2d& v) const { return x>=v.x && y>=v.y; } friend inline bool operator<(const FXVec2d& a,FXdouble n); friend inline bool operator<=(const FXVec2d& a,FXdouble n); friend inline bool operator>(const FXVec2d& a,FXdouble n); friend inline bool operator>=(const FXVec2d& a,FXdouble n); friend inline bool operator<(FXdouble n,const FXVec2d& a); friend inline bool operator<=(FXdouble n,const FXVec2d& a); friend inline bool operator>(FXdouble n,const FXVec2d& a); friend inline bool operator>=(FXdouble n,const FXVec2d& a); /// Length and square of length FXdouble length2() const { return x*x+y*y; } FXdouble length() const { return sqrt(length2()); } /// Clamp values of vector between limits FXVec2d& clamp(FXdouble lo,FXdouble hi){x=FXCLAMP(lo,x,hi);y=FXCLAMP(lo,y,hi);return *this;} /// Lowest or highest components friend inline FXVec2d lo(const FXVec2d& a,const FXVec2d& b); friend inline FXVec2d hi(const FXVec2d& a,const FXVec2d& b); /// Normalize vector friend FXAPI FXVec2d normalize(const FXVec2d& v); /// Save vector to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXVec2d& v); /// Load vector from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXVec2d& v); }; inline FXVec2d operator*(const FXVec2d& a,FXdouble n){return FXVec2d(a.x*n,a.y*n);} inline FXVec2d operator*(FXdouble n,const FXVec2d& a){return FXVec2d(n*a.x,n*a.y);} inline FXVec2d operator/(const FXVec2d& a,FXdouble n){return FXVec2d(a.x/n,a.y/n);} inline FXVec2d operator/(FXdouble n,const FXVec2d& a){return FXVec2d(n/a.x,n/a.y);} inline bool operator==(const FXVec2d& a,FXdouble n){return a.x==n && a.y==n;} inline bool operator!=(const FXVec2d& a,FXdouble n){return a.x!=n || a.y!=n;} inline bool operator==(FXdouble n,const FXVec2d& a){return n==a.x && n==a.y;} inline bool operator!=(FXdouble n,const FXVec2d& a){return n!=a.x || n!=a.y;} inline bool operator<(const FXVec2d& a,FXdouble n){return a.x(const FXVec2d& a,FXdouble n){return a.x>n && a.y>n;} inline bool operator>=(const FXVec2d& a,FXdouble n){return a.x>=n && a.y>=n;} inline bool operator<(FXdouble n,const FXVec2d& a){return n(FXdouble n,const FXVec2d& a){return n>a.x && n>a.y;} inline bool operator>=(FXdouble n,const FXVec2d& a){return n>=a.x && n>=a.y;} inline FXVec2d lo(const FXVec2d& a,const FXVec2d& b){return FXVec2d(FXMIN(a.x,b.x),FXMIN(a.y,b.y));} inline FXVec2d hi(const FXVec2d& a,const FXVec2d& b){return FXVec2d(FXMAX(a.x,b.x),FXMAX(a.y,b.y));} extern FXAPI FXVec2d normalize(const FXVec2d& v); extern FXAPI FXStream& operator<<(FXStream& store,const FXVec2d& v); extern FXAPI FXStream& operator>>(FXStream& store,FXVec2d& v); } #endif fox-1.6.49/include/FXShell.h0000664000175000017500000000606212130340076012433 00000000000000/******************************************************************************** * * * S h e l l W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXShell.h,v 1.31 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSHELL_H #define FXSHELL_H #ifndef FXCOMPOSITE_H #include "FXComposite.h" #endif namespace FX { /** * The Shell widget is used as the base class for top level windows, i.e. * windows which are direct children of the root window. */ class FXAPI FXShell : public FXComposite { FXDECLARE(FXShell) protected: FXShell(){} FXShell(FXApp* a,FXuint opts,FXint x,FXint y,FXint w,FXint h); FXShell(FXWindow* own,FXuint opts,FXint x,FXint y,FXint w,FXint h); private: FXShell(const FXShell&); FXShell &operator=(const FXShell&); public: long onLayout(FXObject*,FXSelector,void*); long onConfigure(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onFocusNext(FXObject*,FXSelector,void*); long onFocusPrev(FXObject*,FXSelector,void*); public: enum { ID_LAYOUT=FXComposite::ID_LAST, ID_LAST }; public: /// Create server-side resources virtual void create(); /// Mark this window's layout as dirty virtual void recalc(); /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Destroy shell virtual ~FXShell(); }; } #endif fox-1.6.49/include/FXTGAIcon.h0000664000175000017500000000617312130340076012613 00000000000000/******************************************************************************** * * * T A R G A I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Janusz Ganczarski. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTGAIcon.h,v 1.18 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXTGAICON_H #define FXTGAICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// TARGA image format icon class FXAPI FXTGAIcon : public FXIcon { FXDECLARE(FXTGAIcon) protected: FXTGAIcon(){} private: FXTGAIcon(const FXTGAIcon&); FXTGAIcon &operator=(const FXTGAIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in TARGA format FXTGAIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in TARGA format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in TARGA format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXTGAIcon(); }; /** * Check if stream contains a TARGA, return TRUE if so. */ extern FXAPI bool fxcheckTGA(FXStream& store); /** * Load an TARGA file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadTGA(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an TARGA file to a stream. */ extern FXAPI bool fxsaveTGA(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXCP864Codec.h0000644000175000017500000000107711637250333013074 00000000000000#ifndef FXCP864CODEC_H #define FXCP864CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP864 Codec class FXAPI FXCP864Codec : public FXTextCodec { FXDECLARE(FXCP864Codec) public: FXCP864Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP864Codec(){} }; } #endif fox-1.6.49/include/FXGradientBar.h0000664000175000017500000002756012130340076013554 00000000000000/******************************************************************************** * * * G r a d i e n t B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGradientBar.h,v 1.52 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXGRADIENTBAR_H #define FXGRADIENTBAR_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Gradient bar orientation enum { GRADIENTBAR_HORIZONTAL = 0, /// Gradient bar shown horizontally GRADIENTBAR_VERTICAL = 0x00008000, /// Gradient bar shown vertically GRADIENTBAR_NO_CONTROLS = 0, /// No controls shown GRADIENTBAR_CONTROLS_TOP = 0x00010000, /// Controls on top GRADIENTBAR_CONTROLS_BOTTOM = 0x00020000, /// Controls on bottom GRADIENTBAR_CONTROLS_LEFT = GRADIENTBAR_CONTROLS_TOP, /// Controls on left GRADIENTBAR_CONTROLS_RIGHT = GRADIENTBAR_CONTROLS_BOTTOM /// Controls on right }; /// Blend modes enum { GRADIENT_BLEND_LINEAR, /// Linear blend GRADIENT_BLEND_POWER, /// Power law blend GRADIENT_BLEND_SINE, /// Sine blend GRADIENT_BLEND_INCREASING, /// Quadratic increasing blend GRADIENT_BLEND_DECREASING /// Quadratic decreasing blend }; // Gradient segment struct FXGradient { FXdouble lower; /// Lower value FXdouble middle; /// Middle value FXdouble upper; /// Upper value FXColor lowerColor; /// Lower color FXColor upperColor; /// Upper color FXuchar blend; /// Blend method }; class FXImage; /** * The gradient bar is a control that is used to edit color gradient, * such as used in texture mapping and shape filling. */ class FXAPI FXGradientBar : public FXFrame { FXDECLARE(FXGradientBar) protected: FXImage *bar; // Image containing colors FXGradient *seg; // Segments FXint nsegs; // Number of segments FXint sellower; // Lower selected segment FXint selupper; // Upper selected segment FXint dropped; // Dropped segment FXint current; // Current segment FXint anchor; // Anchor segment FXint grip; // Grip being dragged, if any FXint where; // Where dropped in segment FXString tip; // Tooltip value FXString help; // Help value FXColor selectColor; // Select color FXint offset; // Offset protected: FXGradientBar(); void updatebar(); FXdouble getValue(FXint x,FXint y) const; FXint getSegmentLowerPos(FXint sg) const; FXint getSegmentUpperPos(FXint sg) const; FXint getSegmentMiddlePos(FXint sg) const; void drawUpArrow(FXDCWindow& dc,FXint x,FXint y,FXColor clr); void drawDnArrow(FXDCWindow& dc,FXint x,FXint y,FXColor clr); void drawRtArrow(FXDCWindow& dc,FXint x,FXint y,FXColor clr); void drawLtArrow(FXDCWindow& dc,FXint x,FXint y,FXColor clr); void drawBottomArrows(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawTopArrows(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawLeftArrows(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRightArrows(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); static FXdouble blendlinear(FXdouble middle,FXdouble pos); static FXdouble blendpower(FXdouble middle,FXdouble pos); static FXdouble blendsine(FXdouble middle,FXdouble pos); static FXdouble blendincreasing(FXdouble middle,FXdouble pos); static FXdouble blenddecreasing(FXdouble middle,FXdouble pos); private: FXGradientBar(const FXGradientBar&); FXGradientBar &operator=(const FXGradientBar&); public: enum { GRIP_NONE, GRIP_LOWER, GRIP_SEG_LOWER, GRIP_MIDDLE, GRIP_SEG_UPPER, GRIP_UPPER }; public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onDNDEnter(FXObject*,FXSelector,void*); long onDNDLeave(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onDNDDrop(FXObject*,FXSelector,void*); long onCmdBlending(FXObject*,FXSelector,void*); long onUpdBlending(FXObject*,FXSelector,void*); long onUpdSegColor(FXObject*,FXSelector,void*); long onCmdSegColor(FXObject*,FXSelector,void*); long onUpdRecenter(FXObject*,FXSelector,void*); long onCmdRecenter(FXObject*,FXSelector,void*); long onUpdSplit(FXObject*,FXSelector,void*); long onCmdSplit(FXObject*,FXSelector,void*); long onUpdMerge(FXObject*,FXSelector,void*); long onCmdMerge(FXObject*,FXSelector,void*); long onUpdUniform(FXObject*,FXSelector,void*); long onCmdUniform(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: enum{ ID_LOWER_COLOR=FXFrame::ID_LAST, ID_UPPER_COLOR, ID_BLEND_LINEAR, ID_BLEND_POWER, ID_BLEND_SINE, ID_BLEND_INCREASING, ID_BLEND_DECREASING, ID_RECENTER, ID_SPLIT, ID_MERGE, ID_UNIFORM, ID_LAST }; public: /// Construct a gradient bar FXGradientBar(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /** * Obtain segment containing location x, y. * Returns -1 if no matching segment was found. */ FXint getSegment(FXint x,FXint y) const; /** * Get the grip in segment sg which is closest to location (x, y), * one of GRIP_LOWER, GRIP_SEG_LOWER, GRIP_MIDDLE, GRIP_SEG_UPPER, * GRIP_UPPER or GRIP_NONE. */ FXint getGrip(FXint sg,FXint x,FXint y) const; /// Return the number of segments FXint getNumSegments() const { return nsegs; } /** * Replace the current gradient segments. * The gradient bar makes a copy of the input segments array. */ void setGradients(const FXGradient *segments,FXint nsegments); /** * Return a copy of the gradient segments. * The array of segments is allocated using FXMALLOC and should be freed * by the caller using FXFREE. */ void getGradients(FXGradient*& segments,FXint& nsegments) const; /// Change current segment void setCurrentSegment(FXint index,FXbool notify=FALSE); /// Return current segment, or -1 if there is no current segment FXint getCurrentSegment() const { return current; } /// Change anchor segment void setAnchorSegment(FXint index); /// Return anchor segment, or -1 if there is no anchor segment FXint getAnchorSegment() const { return anchor; } /// Select segment(s) FXbool selectSegments(FXint fm,FXint to,FXbool notify=FALSE); /// Deselect all segments FXbool deselectSegments(FXbool notify); /// Returns TRUE if the specified segment is selected FXbool isSegmentSelected(FXint s) const; /// Set lower color of a segment void setSegmentLowerColor(FXint s,FXColor clr,FXbool notify=FALSE); /// Set upper color of a segment void setSegmentUpperColor(FXint s,FXColor clr,FXbool notify=FALSE); /// Get lower color of a segment FXColor getSegmentLowerColor(FXint s) const; /// Get upper color of a segment FXColor getSegmentUpperColor(FXint s) const; /// Move lower point of segment sg void moveSegmentLower(FXint sg,FXdouble val,FXbool notify=FALSE); /// Move middle point of segment sg void moveSegmentMiddle(FXint sg,FXdouble val,FXbool notify=FALSE); /// Move upper point of segment sg void moveSegmentUpper(FXint sg,FXdouble val,FXbool notify=FALSE); /// Move segments sglo to sghi to new position val void moveSegments(FXint sglo,FXint sghi,FXdouble val,FXbool notify=FALSE); /// Get lower value of segment sg FXdouble getSegmentLower(FXint sg) const; /// Get middle value of segment sg FXdouble getSegmentMiddle(FXint sg) const; /// Get upper value of segment sg FXdouble getSegmentUpper(FXint sg) const; /** * Get gradient ramp. * The ramp argument should be an array of size nramp, which will be * filled with the appropriate color values. */ void gradient(FXColor *ramp,FXint nramp); /** * Get blend mode of segment, one of GRADIENT_BLEND_LINEAR, * GRADIENT_BLEND_POWER, GRADIENT_BLEND_SINE, GRADIENT_BLEND_INCREASING, * or GRADIENT_BLEND_DECREASING. */ FXuint getSegmentBlend(FXint s) const; /// Split segment at the midpoint void splitSegments(FXint sglo,FXint sghi,FXbool notify=FALSE); /// Merge segments void mergeSegments(FXint sglo,FXint sghi,FXbool notify=FALSE); /// Make segments uniformly distributed void uniformSegments(FXint sglo,FXint sghi,FXbool notify=FALSE); /// Change blend mode of segment void blendSegments(FXint sglo,FXint sghi,FXuint blend=GRADIENT_BLEND_LINEAR,FXbool notify=FALSE); /// Get the gradient bar style FXuint getBarStyle() const; /// Change the gradient bar style void setBarStyle(FXuint style); /// Set color void setSelectColor(FXColor clr); /// Get color FXColor getSelectColor() const { return selectColor; } /// Set status line help text for this gradient bar void setHelpText(const FXString& text){ help=text; } /// Get status line help text for this gradient bar const FXString& getHelpText() const { return help; } /// Set tool tip message for this gradient bar void setTipText(const FXString& text){ tip=text; } /// Get tool tip message for this gradient bar const FXString& getTipText() const { return tip; } /// Save gradient bar to a stream virtual void save(FXStream& store) const; /// Load gradient bar from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXGradientBar(); }; } #endif fox-1.6.49/include/FXCP860Codec.h0000644000175000017500000000107711637250333013070 00000000000000#ifndef FXCP860CODEC_H #define FXCP860CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP860 Codec class FXAPI FXCP860Codec : public FXTextCodec { FXDECLARE(FXCP860Codec) public: FXCP860Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP860Codec(){} }; } #endif fox-1.6.49/include/FXGIFImage.h0000664000175000017500000000634612130340076012741 00000000000000/******************************************************************************** * * * G I F I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGIFImage.h,v 1.23 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXGIFIMAGE_H #define FXGIFIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// GIF Image class class FXAPI FXGIFImage : public FXImage { FXDECLARE(FXGIFImage) protected: FXGIFImage(){} private: FXGIFImage(const FXGIFImage&); FXGIFImage &operator=(const FXGIFImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an image from memory stream formatted as CompuServe GIF format FXGIFImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in [un]GIF format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in CompuServe GIF format virtual bool loadPixels(FXStream& store); /// Destroy virtual ~FXGIFImage(); }; #ifndef FXLOADGIF #define FXLOADGIF /** * Check if stream contains a GIF, return TRUE if so. */ extern FXAPI bool fxcheckGIF(FXStream& store); /** * Load an GIF (Graphics Interchange Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadGIF(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an GIF (Graphics Interchange Format) file to a stream. */ extern FXAPI bool fxsaveGIF(FXStream& store,const FXColor *data,FXint width,FXint height,bool fast=true); #endif } #endif fox-1.6.49/include/FXIconList.h0000664000175000017500000005325112130340076013112 00000000000000/******************************************************************************** * * * I c o n L i s t W i d g e t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXIconList.h,v 1.95.2.4 2006/11/17 16:02:31 fox Exp $ * ********************************************************************************/ #ifndef FXICONLIST_H #define FXICONLIST_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { /// Icon list styles enum { ICONLIST_EXTENDEDSELECT = 0, /// Extended selection mode ICONLIST_SINGLESELECT = 0x00100000, /// At most one selected item ICONLIST_BROWSESELECT = 0x00200000, /// Always exactly one selected item ICONLIST_MULTIPLESELECT = 0x00300000, /// Multiple selection mode ICONLIST_AUTOSIZE = 0x00400000, /// Automatically size item spacing ICONLIST_DETAILED = 0, /// List mode ICONLIST_MINI_ICONS = 0x00800000, /// Mini Icon mode ICONLIST_BIG_ICONS = 0x01000000, /// Big Icon mode ICONLIST_ROWS = 0, /// Row-wise mode ICONLIST_COLUMNS = 0x02000000, /// Column-wise mode ICONLIST_NORMAL = ICONLIST_EXTENDEDSELECT }; class FXIcon; class FXHeader; class FXFont; class FXIconList; class FXFileList; /// Icon item class FXAPI FXIconItem : public FXObject { FXDECLARE(FXIconItem) friend class FXIconList; friend class FXFileList; protected: FXString label; FXIcon *bigIcon; FXIcon *miniIcon; void *data; FXuint state; private: FXIconItem(const FXIconItem&); FXIconItem& operator=(const FXIconItem&); protected: FXIconItem():bigIcon(NULL),miniIcon(NULL),data(NULL),state(0){} virtual void draw(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual FXint hitItem(const FXIconList* list,FXint rx,FXint ry,FXint rw=1,FXint rh=1) const; protected: virtual void drawBigIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual void drawMiniIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual void drawDetails(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; public: enum { SELECTED = 1, /// Selected FOCUS = 2, /// Focus DISABLED = 4, /// Disabled DRAGGABLE = 8, /// Draggable BIGICONOWNED = 16, /// Big icon owned by item MINIICONOWNED = 32 /// Mini icon owned by item }; public: /// Construct new item with given text, icons, and user-data FXIconItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,void* ptr=NULL):label(text),bigIcon(bi),miniIcon(mi),data(ptr),state(0){} /// Change item's text label virtual void setText(const FXString& txt); /// Return item's text label const FXString& getText() const { return label; } /// Change item's big icon, deleting the old icon if it was owned virtual void setBigIcon(FXIcon* icn,FXbool owned=FALSE); /// Return item's big icon FXIcon* getBigIcon() const { return bigIcon; } /// Change item's mini icon, deleting the old icon if it was owned virtual void setMiniIcon(FXIcon* icn,FXbool owned=FALSE); /// Return item's mini icon FXIcon* getMiniIcon() const { return miniIcon; } /// Change item's user data void setData(void* ptr){ data=ptr; } /// Get item's user data void* getData() const { return data; } /// Make item draw as focused virtual void setFocus(FXbool focus); /// Return true if item has focus FXbool hasFocus() const { return (state&FOCUS)!=0; } /// Select item virtual void setSelected(FXbool selected); /// Return true if this item is selected FXbool isSelected() const { return (state&SELECTED)!=0; } /// Enable or disable item virtual void setEnabled(FXbool enabled); /// Return true if this item is enabled FXbool isEnabled() const { return (state&DISABLED)==0; } /// Make item draggable virtual void setDraggable(FXbool draggable); /// Return true if this item is draggable FXbool isDraggable() const { return (state&DRAGGABLE)!=0; } /// Return width of item as drawn in list virtual FXint getWidth(const FXIconList* list) const; /// Return height of item as drawn in list virtual FXint getHeight(const FXIconList* list) const; /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy item and free icons if owned virtual ~FXIconItem(); }; /// Icon item collate function typedef FXint (*FXIconListSortFunc)(const FXIconItem*,const FXIconItem*); /// List of FXIconItem's typedef FXObjectListOf FXIconItemList; /** * A Icon List Widget displays a list of items, each with a text and * optional icon. Icon List can display its items in essentially three * different ways; in big-icon mode, the bigger of the two icons is used * for each item, and the text is placed underneath the icon. In mini- * icon mode, the icons are listed in rows and columns, with the smaller * icon preceding the text. Finally, in detail mode the icons are listed * in a single column, and all fields of the text are shown under a * header control with one button for each subfield. * When an item's selected state changes, the icon list sends * a SEL_SELECTED or SEL_DESELECTED message. A change of the current * item is signified by the SEL_CHANGED message. * The icon list sends SEL_COMMAND messages when the user clicks on an item, * and SEL_CLICKED, SEL_DOUBLECLICKED, and SEL_TRIPLECLICKED when the user * clicks once, twice, or thrice, respectively. * When items are added, replaced, or removed, the icon list sends messages * of the type SEL_INSERTED, SEL_REPLACED, or SEL_DELETED. * In each of these cases, the index to the item, if any, is passed in the * 3rd argument of the message. */ class FXAPI FXIconList : public FXScrollArea { FXDECLARE(FXIconList) protected: FXHeader *header; // Header control FXIconItemList items; // Item list FXint nrows; // Number of rows FXint ncols; // Number of columns FXint anchor; // Anchor item FXint current; // Current item FXint extent; // Extent item FXint cursor; // Cursor item FXint viewable; // Visible item FXFont *font; // Font FXIconListSortFunc sortfunc; // Item sort function FXColor textColor; // Text color FXColor selbackColor; // Selected back color FXColor seltextColor; // Selected text color FXint itemWidth; // Item width FXint itemHeight; // Item height FXint itemSpace; // Space for item label FXint anchorx; // Rectangular selection FXint anchory; FXint currentx; FXint currenty; FXint grabx; // Grab point x FXint graby; // Grab point y FXString lookup; // Lookup string FXString help; // Help text FXbool state; // State of item protected: FXIconList(); void recompute(); void getrowscols(FXint& nr,FXint& nc,FXint w,FXint h) const; void drawLasso(FXint x0,FXint y0,FXint x1,FXint y1); void lassoChanged(FXint ox,FXint oy,FXint ow,FXint oh,FXint nx,FXint ny,FXint nw,FXint nh,FXbool notify); virtual void moveContents(FXint x,FXint y); virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr); static FXint compareSection(const FXchar *p,const FXchar* q,FXint s); static FXint compareSectionCase(const FXchar *p,const FXchar* q,FXint s); private: FXIconList(const FXIconList&); FXIconList &operator=(const FXIconList&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onTipTimer(FXObject*,FXSelector,void*); long onCmdSelectAll(FXObject*,FXSelector,void*); long onCmdDeselectAll(FXObject*,FXSelector,void*); long onCmdSelectInverse(FXObject*,FXSelector,void*); long onCmdArrangeByRows(FXObject*,FXSelector,void*); long onUpdArrangeByRows(FXObject*,FXSelector,void*); long onCmdArrangeByColumns(FXObject*,FXSelector,void*); long onUpdArrangeByColumns(FXObject*,FXSelector,void*); long onCmdShowDetails(FXObject*,FXSelector,void*); long onUpdShowDetails(FXObject*,FXSelector,void*); long onCmdShowBigIcons(FXObject*,FXSelector,void*); long onUpdShowBigIcons(FXObject*,FXSelector,void*); long onCmdShowMiniIcons(FXObject*,FXSelector,void*); long onUpdShowMiniIcons(FXObject*,FXSelector,void*); long onHeaderChanged(FXObject*,FXSelector,void*); long onHeaderResize(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onClicked(FXObject*,FXSelector,void*); long onDoubleClicked(FXObject*,FXSelector,void*); long onTripleClicked(FXObject*,FXSelector,void*); long onCommand(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onLookupTimer(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); public: static FXint ascending(const FXIconItem* a,const FXIconItem* b); static FXint descending(const FXIconItem* a,const FXIconItem* b); static FXint ascendingCase(const FXIconItem* a,const FXIconItem* b); static FXint descendingCase(const FXIconItem* a,const FXIconItem* b); public: enum { ID_SHOW_DETAILS=FXScrollArea::ID_LAST, ID_SHOW_MINI_ICONS, ID_SHOW_BIG_ICONS, ID_ARRANGE_BY_ROWS, ID_ARRANGE_BY_COLUMNS, ID_HEADER_CHANGE, ID_LOOKUPTIMER, ID_SELECT_ALL, ID_DESELECT_ALL, ID_SELECT_INVERSE, ID_LAST }; public: /// Construct icon list with no items in it initially FXIconList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=ICONLIST_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Recalculate layout virtual void recalc(); /// Perform layout virtual void layout(); /// Compute and return content width virtual FXint getContentWidth(); /// Return content height virtual FXint getContentHeight(); /// Icon list can receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Return viewport size virtual FXint getViewportHeight(); /// Resize this window to the specified width and height virtual void resize(FXint w,FXint h); /// Move and resize this window in the parent's coordinates virtual void position(FXint x,FXint y,FXint w,FXint h); /// Return number of items FXint getNumItems() const { return items.no(); } /// Return number of rows FXint getNumRows() const { return nrows; } /// Return number of columns FXint getNumCols() const { return ncols; } /// Return header control FXHeader* getHeader() const { return header; } /// Set headers from array of strings void setHeaders(const FXchar** strings,FXint size=1); /// Set headers from newline separated strings void setHeaders(const FXString& strings,FXint size=1); /// Append header with given text and optional icon void appendHeader(const FXString& text,FXIcon *icon=NULL,FXint size=1); /// Remove header at index void removeHeader(FXint index); /// Change text of header at index void setHeaderText(FXint index,const FXString& text); /// Return text of header at index FXString getHeaderText(FXint index) const; /// Change icon of header at index void setHeaderIcon(FXint index,FXIcon *icon); /// Return icon of header at index FXIcon* getHeaderIcon(FXint index) const; /// Change size of header at index void setHeaderSize(FXint index,FXint size); /// Return width of header at index FXint getHeaderSize(FXint index) const; /// Return number of headers FXint getNumHeaders() const; /// Return the item at the given index FXIconItem *getItem(FXint index) const; /// Replace the item with a [possibly subclassed] item FXint setItem(FXint index,FXIconItem* item,FXbool notify=FALSE); /// Replace items text, icons, and user-data pointer FXint setItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Fill list by appending items from array of strings FXint fillItems(const FXchar** strings,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Fill list by appending items from newline separated strings FXint fillItems(const FXString& strings,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Insert a new [possibly subclassed] item at the give index FXint insertItem(FXint index,FXIconItem* item,FXbool notify=FALSE); /// Insert item at index with given text, icons, and user-data pointer FXint insertItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Append a [possibly subclassed] item to the end of the list FXint appendItem(FXIconItem* item,FXbool notify=FALSE); /// Append new item with given text and optional icons, and user-data pointer FXint appendItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Prepend a [possibly subclassed] item to the end of the list FXint prependItem(FXIconItem* item,FXbool notify=FALSE); /// Prepend new item with given text and optional icons, and user-data pointer FXint prependItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Move item from oldindex to newindex FXint moveItem(FXint newindex,FXint oldindex,FXbool notify=FALSE); /// Extract item from list FXIconItem* extractItem(FXint index,FXbool notify=FALSE); /// Remove item from list void removeItem(FXint index,FXbool notify=FALSE); /// Remove all items from list void clearItems(FXbool notify=FALSE); /// Return item width FXint getItemWidth() const { return itemWidth; } /// Return item height FXint getItemHeight() const { return itemHeight; } /// Return index of item at x,y, or -1 if none virtual FXint getItemAt(FXint x,FXint y) const; /** * Search items by name, beginning from item start. If the start * item is -1 the search will start at the first item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. * The option SEARCH_IGNORECASE causes a case-insensitive match. Finally, * passing SEARCH_PREFIX causes searching for a prefix of the item name. * Return -1 if no matching item is found. */ FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /** * Search items by associated user data, beginning from item start. If the * start item is -1 the search will start at the first item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. */ FXint findItemByData(const void *ptr,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /// Scroll to make item at index visible virtual void makeItemVisible(FXint index); /// Change item text void setItemText(FXint index,const FXString& text); /// Return item text FXString getItemText(FXint index) const; /// Change item big icon void setItemBigIcon(FXint index,FXIcon* icon,FXbool owned=FALSE); /// Return big icon of item at index FXIcon* getItemBigIcon(FXint index) const; /// Change item mini icon void setItemMiniIcon(FXint index,FXIcon* icon,FXbool owned=FALSE); /// Return mini icon of item at index FXIcon* getItemMiniIcon(FXint index) const; /// Change item user-data pointer void setItemData(FXint index,void* ptr); /// Return item user-data pointer void* getItemData(FXint index) const; /// Return TRUE if item at index is selected FXbool isItemSelected(FXint index) const; /// Return TRUE if item at index is current FXbool isItemCurrent(FXint index) const; /// Return TRUE if item at index is visible FXbool isItemVisible(FXint index) const; /// Return TRUE if item at index is enabled FXbool isItemEnabled(FXint index) const; /// Return item hit code: 0 outside, 1 icon, 2 text FXint hitItem(FXint index,FXint x,FXint y,FXint ww=1,FXint hh=1) const; /// Repaint item at index void updateItem(FXint index) const; /// Enable item at index virtual FXbool enableItem(FXint index); /// Disable item at index virtual FXbool disableItem(FXint index); /// Select item at index virtual FXbool selectItem(FXint index,FXbool notify=FALSE); /// Deselect item at index virtual FXbool deselectItem(FXint index,FXbool notify=FALSE); /// Toggle item at index virtual FXbool toggleItem(FXint index,FXbool notify=FALSE); /// Select items in rectangle virtual FXbool selectInRectangle(FXint x,FXint y,FXint w,FXint h,FXbool notify=FALSE); /// Extend selection from anchor index to index virtual FXbool extendSelection(FXint index,FXbool notify=FALSE); /// Deselect all items virtual FXbool killSelection(FXbool notify=FALSE); /// Change current item index virtual void setCurrentItem(FXint index,FXbool notify=FALSE); /// Return current item index, or -1 if none FXint getCurrentItem() const { return current; } /// Change anchor item index void setAnchorItem(FXint index); /// Return anchor item index, or -1 if none FXint getAnchorItem() const { return anchor; } /// Return index of item under cursor, or -1 if none FXint getCursorItem() const { return cursor; } /// Sort items void sortItems(); /// Return sort function FXIconListSortFunc getSortFunc() const { return sortfunc; } /// Change sort function void setSortFunc(FXIconListSortFunc func){ sortfunc=func; } /// Change text font void setFont(FXFont* fnt); /// Return text font FXFont* getFont() const { return font; } /// Return normal text color FXColor getTextColor() const { return textColor; } /// Change normal text color void setTextColor(FXColor clr); /// Return selected text background FXColor getSelBackColor() const { return selbackColor; } /// Change selected text background void setSelBackColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const { return seltextColor; } /// Change selected text color void setSelTextColor(FXColor clr); /// Change maximum item space for each item void setItemSpace(FXint s); /// Return maximum item space FXint getItemSpace() const { return itemSpace; } /// Get the current icon list style FXuint getListStyle() const; /// Set the current icon list style. void setListStyle(FXuint style); /// Set the status line help text for this widget void setHelpText(const FXString& text); /// Get the status line help text for this widget const FXString& getHelpText() const { return help; } /// Save list to a stream virtual void save(FXStream& store) const; /// Load list from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXIconList(); }; } #endif fox-1.6.49/include/FXDockBar.h0000664000175000017500000001750312130340076012673 00000000000000/******************************************************************************** * * * D o c k B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDockBar.h,v 1.24 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDOCKBAR_H #define FXDOCKBAR_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { class FXDockSite; /** * A dock bar widget can be docked inside a dock site widget, or floated * around freely. Users can move, undock, and dock the dock bar widget * by means of a handle such as a tool bar grip. When docking, the dock * bar sends a SEL_DOCKED message to its target; when undocking, it sends * a SEL_FLOATED message. In either case the dock site involved is passed * in the void* pointer argument of the message. */ class FXAPI FXDockBar : public FXPacker { FXDECLARE(FXDockBar) protected: FXComposite *drydock; // Parent when docked FXComposite *wetdock; // Parent when floating FXint gripx; // Grip offset x FXint gripy; // Grip offset y FXuchar allowed; // Where we're allowed to dock protected: FXDockBar(); private: FXDockBar(const FXDockBar&); FXDockBar &operator=(const FXDockBar&); public: long onCmdUndock(FXObject*,FXSelector,void*); long onUpdUndock(FXObject*,FXSelector,void*); long onCmdDockTop(FXObject*,FXSelector,void*); long onUpdDockTop(FXObject*,FXSelector,void*); long onCmdDockBottom(FXObject*,FXSelector,void*); long onUpdDockBottom(FXObject*,FXSelector,void*); long onCmdDockLeft(FXObject*,FXSelector,void*); long onUpdDockLeft(FXObject*,FXSelector,void*); long onCmdDockRight(FXObject*,FXSelector,void*); long onUpdDockRight(FXObject*,FXSelector,void*); long onUpdDockFlip(FXObject*,FXSelector,void*); long onBeginDragGrip(FXObject*,FXSelector,void*); long onEndDragGrip(FXObject*,FXSelector,void*); long onDraggedGrip(FXObject*,FXSelector,void*); long onPopupMenu(FXObject*,FXSelector,void*); long onDockTimer(FXObject*,FXSelector,void*); public: enum { ID_DOCK_FLOAT=FXPacker::ID_LAST, /// Undock the dock bar ID_DOCK_TOP, /// Dock on the top ID_DOCK_BOTTOM, /// Dock on the bottom ID_DOCK_LEFT, /// Dock on the left ID_DOCK_RIGHT, /// Dock on the right ID_DOCK_FLIP, /// Flip orientation ID_TOOLBARGRIP, /// Tool bar grip ID_TIMER, ID_LAST }; public: enum { ALLOW_NOWHERE=0, /// Don't allow docking anywhere ALLOW_TOP=1, /// Docking at the top only ALLOW_BOTTOM=2, /// Docking at the bottom only ALLOW_LEFT=4, /// Docking at the left only ALLOW_RIGHT=8, /// Docking at the right only ALLOW_HORIZONTAL=ALLOW_TOP|ALLOW_BOTTOM, /// Docking at the top and bottom ALLOW_VERTICAL=ALLOW_LEFT|ALLOW_RIGHT, /// Docking at the left and right ALLOW_EVERYWHERE=ALLOW_HORIZONTAL|ALLOW_VERTICAL /// Docking can be everywhere }; public: /** * Construct a floatable dock bar, with a default parent p and an * alternate parent q. To allow docking and dragging the default parent * p must be of type FXDockSite, and the alternate parent q must be of * type FXToolBarShell. * Normally, the dock bar is docked under a window p of type FXDockSite. * When floated, the toolbar can be docked under window q, which is * usually an kind of FXToolBarShell window. */ FXDockBar(FXComposite* p,FXComposite* q,FXuint opts=LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=3,FXint pr=3,FXint pt=2,FXint pb=2,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /** * Construct a non-floatable dock bar. * The dock bar can not be undocked. */ FXDockBar(FXComposite* p,FXuint opts,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=2,FXint pr=3,FXint pt=3,FXint pb=2,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Return true if docked FXbool isDocked() const; /** * Check if the dock bar would dock or undock if at locaton barx, bary. */ FXbool insideDock(FXDockSite* docksite,FXint barx,FXint bary); /** * Set parent when docked. * If it was docked, reparent under the new docking window. */ void setDryDock(FXComposite* dry); /** * Set parent when floating. * If it was undocked, then reparent under the new floating window. */ void setWetDock(FXComposite* wet); /// Return parent when docked FXComposite* getDryDock() const { return drydock; } /// Return parent when floating FXComposite* getWetDock() const { return wetdock; } /// Search for dock against given side of main window FXDockSite* findDockAtSide(FXuint side=LAYOUT_SIDE_TOP); /// Search for dock close to coordinates rootx, rooty FXDockSite* findDockNear(FXint rootx,FXint rooty); /** * Dock the bar against the given side, after some other widget. * However, if after is -1, it will be docked as the innermost bar just before * the work-area, while if after is 0, if will be docked as the outermost bar. */ virtual void dock(FXDockSite* docksite,FXWindow* before=NULL,FXbool notify=FALSE); /** * Dock the bar against the given side, near the given position relative * to the toolbar dock's origin. */ virtual void dock(FXDockSite* docksite,FXint localx,FXint localy,FXbool notify); /** * Undock or float the bar. * The initial position of the wet dock is a few pixels * below and to the right of the original docked position. */ virtual void undock(FXint rootx,FXint rooty,FXbool notify=FALSE); /** * Change set of sides (a combination of ALLOW_TOP, ALLOW_LEFT, etc.), * where docking is allowed. The default is to allow docking on all sides. */ void allowedSides(FXuchar allow){ allowed=allow; } /** * Return set of sides where docking is allowed */ FXuchar allowedSides() const { return allowed; } /// Save toolbar to a stream virtual void save(FXStream& store) const; /// Load toolbar from a stream virtual void load(FXStream& store); /// Destroy virtual ~FXDockBar(); }; } #endif fox-1.6.49/include/FXGLShape.h0000664000175000017500000001350612130340076012650 00000000000000/******************************************************************************** * * * O p e n G L S h a p e O b j e c t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLShape.h,v 1.25 2006/01/22 17:58:03 fox Exp $ * ********************************************************************************/ #ifndef FXGLSHAPE_H #define FXGLSHAPE_H #ifndef FXGLOBJECT_H #include "FXGLObject.h" #endif namespace FX { class FXGLViewer; class FXGLObject; // Shape drawing options enum { SURFACE_SINGLESIDED = 0, // Single-sided [both sides same] SURFACE_DUALSIDED = 0x00000001, // Dual-sided surface SHADING_NONE = 0, // No light source SHADING_SMOOTH = 0x00000002, // Smooth shaded SHADING_FLAT = 0x00000004, // Flag shaded FACECULLING_OFF = 0, // No face culling FACECULLING_ON = 0x00000008, // Cull backward facing surfaces STYLE_SURFACE = 0x00000010, // Draw filled surfaces STYLE_WIREFRAME = 0x00000020, // Draw wire frame STYLE_POINTS = 0x00000040, // Draw as points STYLE_BOUNDBOX = 0x00000080 // Draw bounding box }; /// OpenGL Shape Object class FXAPI FXGLShape : public FXGLObject { FXDECLARE_ABSTRACT(FXGLShape) protected: FXVec3f position; // Middle of the Bounding Box FXMaterial material[2]; // Front and back material properties FXRangef range; // Range box FXuint options; // Drawing options FXString tip; protected: FXGLShape(); virtual void drawshape(FXGLViewer*){} // To be overloaded by derived class void drawbox(); void drawhandles(); public: long onDNDDrop(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onCmdShadeOff(FXObject*,FXSelector,void*); long onUpdShadeOff(FXObject*,FXSelector,void*); long onCmdShadeOn(FXObject*,FXSelector,void*); long onUpdShadeOn(FXObject*,FXSelector,void*); long onCmdShadeSmooth(FXObject*,FXSelector,void*); long onUpdShadeSmooth(FXObject*,FXSelector,void*); long onCmdFrontMaterial(FXObject*,FXSelector,void*); long onUpdFrontMaterial(FXObject*,FXSelector,void*); long onCmdBackMaterial(FXObject*,FXSelector,void*); long onUpdBackMaterial(FXObject*,FXSelector,void*); long onCmdDrawingStyle(FXObject*,FXSelector,void*); long onUpdDrawingStyle(FXObject*,FXSelector,void*); public: enum { ID_SHADEOFF=FXGLObject::ID_LAST, ID_SHADEON, ID_SHADESMOOTH, ID_TOGGLE_SIDED, ID_TOGGLE_CULLING, ID_STYLE_POINTS, ID_STYLE_WIREFRAME, ID_STYLE_SURFACE, ID_STYLE_BOUNDINGBOX, ID_FRONT_MATERIAL, ID_BACK_MATERIAL, ID_LAST }; public: /// Construct with specified origin and options FXGLShape(FXfloat x,FXfloat y,FXfloat z,FXuint opts); /// Construct with specified origin, options and front and back materials FXGLShape(FXfloat x,FXfloat y,FXfloat z,FXuint opts,const FXMaterial& front,const FXMaterial& back); /// Copy constructor FXGLShape(const FXGLShape& orig); /// Called by the viewer to get bounds for this object virtual void bounds(FXRangef& box); /// Draw this object in a viewer virtual void draw(FXGLViewer* viewer); /// Draw this object for hit-testing purposes virtual void hit(FXGLViewer* viewer); /// Copy this object virtual FXGLObject* copy(); /// Return true if this object can be dragged around virtual FXbool canDrag() const; /// Return true if this object can be deleted from the scene virtual FXbool canDelete() const; /// Drag this object from one position to another virtual FXbool drag(FXGLViewer* viewer,FXint fx,FXint fy,FXint tx,FXint ty); /// Set the tool tip message for this object void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for this object const FXString& getTipText() const { return tip; } /// Set the material for specified side (where side = 0 or 1) void setMaterial(FXint side,const FXMaterial &mtl); /// Get the material for specified side (where side = 0 or 1) void getMaterial(FXint side,FXMaterial &mtl) const; /// Save shape to a stream virtual void save(FXStream& store) const; /// Load shape from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXDataTarget.h0000664000175000017500000002303412130340076013402 00000000000000/******************************************************************************** * * * D a t a T a r g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDataTarget.h,v 1.25 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDATATARGET_H #define FXDATATARGET_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { /** * A Data Target allows a valuator widget such as a Slider or Text Field * to be directly connected with a variable in the program. * Whenever the valuator control changes, the variable connected through * the data target is automatically updated; conversely, whenever the program * changes a variable, all the connected valuator widgets will be updated * to reflect this new value on the display. * Data Targets also allow connecting Radio Buttons, Menu Commands, and so on * to a variable. In this case, the new value of the connected variable is computed * by subtracting ID_OPTION from the message ID. */ class FXAPI FXDataTarget : public FXObject { FXDECLARE(FXDataTarget) protected: FXObject *target; // Target object void *data; // Associated data FXSelector message; // Message ID FXuint type; // Type of data private: FXDataTarget(const FXDataTarget&); FXDataTarget& operator=(const FXDataTarget&); public: long onCmdValue(FXObject*,FXSelector,void*); long onUpdValue(FXObject*,FXSelector,void*); long onCmdOption(FXObject*,FXSelector,void*); long onUpdOption(FXObject*,FXSelector,void*); public: enum { DT_VOID=0, DT_CHAR, DT_UCHAR, DT_SHORT, DT_USHORT, DT_INT, DT_UINT, DT_LONG, DT_ULONG, DT_FLOAT, DT_DOUBLE, DT_STRING, DT_LAST }; public: enum { ID_VALUE=1, /// Will cause the FXDataTarget to ask sender for value ID_OPTION=ID_VALUE+10001, /// ID_OPTION+i will set the value to i where -10000<=i<=10000 ID_LAST=ID_OPTION+10000 }; public: /// Associate with nothing FXDataTarget():target(NULL),data(NULL),message(0),type(DT_VOID){} /// Associate with nothing FXDataTarget(FXObject* tgt,FXSelector sel):target(tgt),data(NULL),message(sel),type(DT_VOID){} /// Associate with character variable FXDataTarget(FXchar& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_CHAR){} /// Associate with unsigned character variable FXDataTarget(FXuchar& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_UCHAR){} /// Associate with signed short variable FXDataTarget(FXshort& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_SHORT){} /// Associate with unsigned short variable FXDataTarget(FXushort& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_USHORT){} /// Associate with int variable FXDataTarget(FXint& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_INT){} /// Associate with unsigned int variable FXDataTarget(FXuint& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_UINT){} /// Associate with long variable FXDataTarget(FXlong& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_LONG){} /// Associate with unsigned long variable FXDataTarget(FXulong& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_ULONG){} /// Associate with float variable FXDataTarget(FXfloat& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_FLOAT){} /// Associate with double variable FXDataTarget(FXdouble& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_DOUBLE){} /// Associate with string variable FXDataTarget(FXString& value,FXObject* tgt=NULL,FXSelector sel=0):target(tgt),data(&value),message(sel),type(DT_STRING){} /// Set the message target object for this data target void setTarget(FXObject *t){ target=t; } /// Get the message target object for this data target, if any FXObject* getTarget() const { return target; } /// Set the message identifier for this data target void setSelector(FXSelector sel){ message=sel; } /// Get the message identifier for this data target FXSelector getSelector() const { return message; } /// Return type of data its connected to FXuint getType() const { return type; } /// Return pointer to data its connected to void* getData() const { return data; } /// Associate with nothing void connect(){ data=NULL; type=DT_VOID; } /// Associate with character variable void connect(FXchar& value){ data=&value; type=DT_CHAR; } /// Associate with unsigned character variable void connect(FXuchar& value){ data=&value; type=DT_UCHAR; } /// Associate with signed short variable void connect(FXshort& value){ data=&value; type=DT_SHORT; } /// Associate with unsigned short variable void connect(FXushort& value){ data=&value; type=DT_USHORT; } /// Associate with int variable void connect(FXint& value){ data=&value; type=DT_INT; } /// Associate with unsigned int variable void connect(FXuint& value){ data=&value; type=DT_UINT; } /// Associate with long variable void connect(FXlong& value){ data=&value; type=DT_LONG; } /// Associate with unsigned long variable void connect(FXulong& value){ data=&value; type=DT_ULONG; } /// Associate with float variable void connect(FXfloat& value){ data=&value; type=DT_FLOAT; } /// Associate with double variable void connect(FXdouble& value){ data=&value; type=DT_DOUBLE; } /// Associate with string variable void connect(FXString& value){ data=&value; type=DT_STRING; } /// Associate with nothing; also set target and message void connect(FXObject* tgt,FXSelector sel){ target=tgt; data=NULL; message=sel; type=DT_VOID; } /// Associate with character variable; also set target and message void connect(FXchar& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_CHAR; } /// Associate with unsigned character variable; also set target and message void connect(FXuchar& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_UCHAR; } /// Associate with signed short variable; also set target and message void connect(FXshort& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_SHORT; } /// Associate with unsigned short variable; also set target and message void connect(FXushort& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_USHORT; } /// Associate with int variable; also set target and message void connect(FXint& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_INT; } /// Associate with unsigned int variable; also set target and message void connect(FXuint& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_UINT; } /// Associate with long variable; also set target and message void connect(FXlong& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_LONG; } /// Associate with unsigned long variable; also set target and message void connect(FXulong& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_ULONG; } /// Associate with float variable; also set target and message void connect(FXfloat& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_FLOAT; } /// Associate with double variable; also set target and message void connect(FXdouble& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_DOUBLE; } /// Associate with string variable; also set target and message void connect(FXString& value,FXObject* tgt,FXSelector sel){ target=tgt; data=&value; message=sel; type=DT_STRING; } /// Destroy virtual ~FXDataTarget(); }; } #endif fox-1.6.49/include/FXXPMImage.h0000664000175000017500000000667012130340076013000 00000000000000/******************************************************************************** * * * X P M I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXXPMImage.h,v 1.21 2006/01/22 17:58:13 fox Exp $ * ********************************************************************************/ #ifndef FXXPMIMAGE_H #define FXXPMIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// X Pixmap image class FXAPI FXXPMImage : public FXImage { FXDECLARE(FXXPMImage) protected: FXXPMImage(){} private: FXXPMImage(const FXXPMImage&); FXXPMImage &operator=(const FXXPMImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct image from compiled-in X Pixmap format FXXPMImage(FXApp* a,const FXchar **pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in X Pixmap format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in X Pixmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXXPMImage(); }; #ifndef FXLOADXPM #define FXLOADXPM /** * Check if stream contains a XPM, return TRUE if so. */ extern FXAPI bool fxcheckXPM(FXStream& store); /** * Load an XPM (X Pixmap) from array of strings. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadXPM(const FXchar **pix,FXColor*& data,FXint& width,FXint& height); /** * Load an XPM (X Pixmap) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadXPM(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an XPM (X Pixmap) file to a stream. */ extern FXAPI bool fxsaveXPM(FXStream& store,const FXColor *data,FXint width,FXint height,bool fast=true); #endif } #endif fox-1.6.49/include/FXMat4f.h0000664000175000017500000001372712130340076012345 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n 4 x 4 M a t r i x * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMat4f.h,v 1.9 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMAT4F_H #define FXMAT4F_H namespace FX { /// Single-precision 4x4 matrix class FXAPI FXMat4f { protected: FXVec4f m[4]; public: /// Constructors FXMat4f(){} FXMat4f(FXfloat w); FXMat4f(FXfloat a00,FXfloat a01,FXfloat a02,FXfloat a03, FXfloat a10,FXfloat a11,FXfloat a12,FXfloat a13, FXfloat a20,FXfloat a21,FXfloat a22,FXfloat a23, FXfloat a30,FXfloat a31,FXfloat a32,FXfloat a33); FXMat4f(const FXVec4f& a,const FXVec4f& b,const FXVec4f& c,const FXVec4f& d); FXMat4f(const FXMat4f& other); /// Assignment FXMat4f& operator=(const FXMat4f& other); FXMat4f& operator=(FXfloat w); /// Set value from another matrix FXMat4f& set(const FXMat4f& other); /// Set value from scalar FXMat4f& set(FXfloat w); /// Set value from components FXMat4f& set(FXfloat a00,FXfloat a01,FXfloat a02,FXfloat a03, FXfloat a10,FXfloat a11,FXfloat a12,FXfloat a13, FXfloat a20,FXfloat a21,FXfloat a22,FXfloat a23, FXfloat a30,FXfloat a31,FXfloat a32,FXfloat a33); /// Set value from four vectors FXMat4f& set(const FXVec4f& a,const FXVec4f& b,const FXVec4f& c,const FXVec4f& d); /// Assignment operators FXMat4f& operator+=(const FXMat4f& w); FXMat4f& operator-=(const FXMat4f& w); FXMat4f& operator*=(FXfloat w); FXMat4f& operator*=(const FXMat4f& w); FXMat4f& operator/=(FXfloat w); /// Indexing FXVec4f& operator[](FXint i){return m[i];} const FXVec4f& operator[](FXint i) const {return m[i];} /// Conversion operator FXfloat*(){return m[0];} operator const FXfloat*() const {return m[0];} /// Unary minus FXMat4f operator-() const; /// Matrix and matrix FXMat4f operator+(const FXMat4f& w) const; FXMat4f operator-(const FXMat4f& w) const; FXMat4f operator*(const FXMat4f& w) const; /// Other operators friend FXAPI FXMat4f operator*(FXfloat x,const FXMat4f& a); friend FXAPI FXMat4f operator*(const FXMat4f& a,FXfloat x); friend FXAPI FXMat4f operator/(const FXMat4f& a,FXfloat x); friend FXAPI FXMat4f operator/(FXfloat x,const FXMat4f& a); /// Multiply matrix and vector FXVec4f operator*(const FXVec4f& v) const; FXVec3f operator*(const FXVec3f& v) const; /// Set identity matrix FXMat4f& eye(); /// Orthographic projection FXMat4f& ortho(FXfloat left,FXfloat right,FXfloat bottom,FXfloat top,FXfloat hither,FXfloat yon); /// Perspective projection FXMat4f& frustum(FXfloat left,FXfloat right,FXfloat bottom,FXfloat top,FXfloat hither,FXfloat yon); /// Multiply by left-hand matrix FXMat4f& left(); /// Multiply by rotation about unit-quaternion FXMat4f& rot(const FXQuatf& q); /// Multiply by rotation c,s about axis FXMat4f& rot(const FXVec3f& v,FXfloat c,FXfloat s); /// Multiply by rotation of phi about axis FXMat4f& rot(const FXVec3f& v,FXfloat phi); /// Multiply by x-rotation FXMat4f& xrot(FXfloat c,FXfloat s); FXMat4f& xrot(FXfloat phi); /// Multiply by y-rotation FXMat4f& yrot(FXfloat c,FXfloat s); FXMat4f& yrot(FXfloat phi); /// Multiply by z-rotation FXMat4f& zrot(FXfloat c,FXfloat s); FXMat4f& zrot(FXfloat phi); /// Look at FXMat4f& look(const FXVec3f& eye,const FXVec3f& cntr,const FXVec3f& vup); /// Multiply by translation FXMat4f& trans(FXfloat tx,FXfloat ty,FXfloat tz); FXMat4f& trans(const FXVec3f& v); /// Multiply by scaling FXMat4f& scale(FXfloat sx,FXfloat sy,FXfloat sz); FXMat4f& scale(FXfloat s); FXMat4f& scale(const FXVec3f& v); /// Determinant FXfloat det() const; /// Transpose FXMat4f transpose() const; /// Invert FXMat4f invert() const; /// Save to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXMat4f& m); /// Load from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXMat4f& m); }; extern FXAPI FXMat4f operator*(FXfloat x,const FXMat4f& a); extern FXAPI FXMat4f operator*(const FXMat4f& a,FXfloat x); extern FXAPI FXMat4f operator/(const FXMat4f& a,FXfloat x); extern FXAPI FXMat4f operator/(FXfloat x,const FXMat4f& a); extern FXAPI FXStream& operator<<(FXStream& store,const FXMat4f& m); extern FXAPI FXStream& operator>>(FXStream& store,FXMat4f& m); } #endif fox-1.6.49/include/FXCP869Codec.h0000644000175000017500000000107711637250333013101 00000000000000#ifndef FXCP869CODEC_H #define FXCP869CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP869 Codec class FXAPI FXCP869Codec : public FXTextCodec { FXDECLARE(FXCP869Codec) public: FXCP869Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP869Codec(){} }; } #endif fox-1.6.49/include/FXToolBarShell.h0000664000175000017500000001063112130340076013713 00000000000000/******************************************************************************** * * * T o o l B a r S h e l l W i d g e t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXToolBarShell.h,v 1.8 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTOOLBARSHELL_H #define FXTOOLBARSHELL_H #ifndef FXTOPWINDOW_H #include "FXTopWindow.h" #endif namespace FX { /** * A Tool bar shell is a widget floating around over the Main Window. * It typically contains an undocked tool bar. */ class FXAPI FXToolBarShell : public FXTopWindow { FXDECLARE(FXToolBarShell) protected: FXColor baseColor; FXColor hiliteColor; FXColor shadowColor; FXColor borderColor; FXint border; protected: FXToolBarShell(){} void drawBorderRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRidgeRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawGrooveRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawFrame(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); private: FXToolBarShell(const FXToolBarShell&); FXToolBarShell &operator=(const FXToolBarShell&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Construct a toolbar shell FXToolBarShell(FXWindow* owner,FXuint opts=FRAME_RAISED|FRAME_THICK,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint hs=4,FXint vs=4); /// Create server-side resources virtual void create(); /// Perform layout virtual void layout(); /// Return the default width of this window virtual FXint getDefaultWidth(); /// Return the default height of this window virtual FXint getDefaultHeight(); /// Change frame style void setFrameStyle(FXuint style); /// Get current frame style FXuint getFrameStyle() const; /// Get border width FXint getBorderWidth() const { return border; } /// Change highlight color void setHiliteColor(FXColor clr); /// Get highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change shadow color void setShadowColor(FXColor clr); /// Get shadow color FXColor getShadowColor() const { return shadowColor; } /// Change border color void setBorderColor(FXColor clr); /// Get border color FXColor getBorderColor() const { return borderColor; } /// Change base gui color void setBaseColor(FXColor clr); /// Get base gui color FXColor getBaseColor() const { return baseColor; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXPacker.h0000664000175000017500000001523312130340076012571 00000000000000/******************************************************************************** * * * P a c k e r C o n t a i n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPacker.h,v 1.21 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXPACKER_H #define FXPACKER_H #ifndef FXCOMPOSITE_H #include "FXComposite.h" #endif namespace FX { /// Default spacing enum { DEFAULT_SPACING = 4 }; /** * Packer is a layout manager which automatically places child windows * inside its area against the left, right, top, or bottom side. * Each time a child is placed, the remaining space is decreased by the * amount of space taken by the child window. * The side against which a child is placed is determined by the LAYOUT_SIDE_TOP, * LAYOUT_SIDE_BOTTOM, LAYOUT_SIDE_LEFT, and LAYOUT_SIDE_RIGHT hints given by * the child window. Other layout hints from the child are observed as far as * sensible. So for example, a child placed against the right edge can still * have LAYOUT_FILL_Y or LAYOUT_TOP, and so on. * The last child may have both LAYOUT_FILL_X and LAYOUT_FILL_Y, in which * case it will be placed to take all remaining space. */ class FXAPI FXPacker : public FXComposite { FXDECLARE(FXPacker) protected: FXColor baseColor; // Base color FXColor hiliteColor; // Highlight color FXColor shadowColor; // Shadow color FXColor borderColor; // Border color FXint padtop; // Top margin FXint padbottom; // Bottom margin FXint padleft; // Left margin FXint padright; // Right margin FXint hspacing; // Horizontal child spacing FXint vspacing; // Vertical child spacing FXint border; // Border width protected: FXPacker(); void drawBorderRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRidgeRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawGrooveRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawFocusRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawFrame(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); private: FXPacker(const FXPacker&); FXPacker &operator=(const FXPacker&); public: long onPaint(FXObject*,FXSelector,void*); long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); public: /// Construct packer layout manager FXPacker(FXComposite *p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Change frame style void setFrameStyle(FXuint style); /// Get current frame style FXuint getFrameStyle() const; /// Change packing hints void setPackingHints(FXuint ph); /// Return packing hints FXuint getPackingHints() const; /// Get border width FXint getBorderWidth() const { return border; } /// Change top padding void setPadTop(FXint pt); /// Get top interior padding FXint getPadTop() const { return padtop; } /// Change bottom padding void setPadBottom(FXint pb); /// Get bottom interior padding FXint getPadBottom() const { return padbottom; } /// Change left padding void setPadLeft(FXint pl); /// Get left interior padding FXint getPadLeft() const { return padleft; } /// Change right padding void setPadRight(FXint pr); /// Get right interior padding FXint getPadRight() const { return padright; } /// Change highlight color void setHiliteColor(FXColor clr); /// Get highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change shadow color void setShadowColor(FXColor clr); /// Get shadow color FXColor getShadowColor() const { return shadowColor; } /// Change border color void setBorderColor(FXColor clr); /// Get border color FXColor getBorderColor() const { return borderColor; } /// Change base gui color void setBaseColor(FXColor clr); /// Get base gui color FXColor getBaseColor() const { return baseColor; } /// Change horizontal inter-child spacing void setHSpacing(FXint hs); /// Return current horizontal inter-child spacing FXint getHSpacing() const { return hspacing; } /// Change vertical inter-child spacing void setVSpacing(FXint vs); /// Return current vertical inter-child spacing FXint getVSpacing() const { return vspacing; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXPoint.h0000664000175000017500000001023712130340076012454 00000000000000/******************************************************************************** * * * P o i n t C l a s s * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPoint.h,v 1.13 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXPOINT_H #define FXPOINT_H #ifndef FXSIZE_H #include "FXSize.h" #endif namespace FX { /// Point class FXAPI FXPoint { public: FXshort x; FXshort y; public: /// Constructors FXPoint(){ } FXPoint(const FXSize& s):x(s.w),y(s.h){ } FXPoint(const FXPoint& p):x(p.x),y(p.y){ } FXPoint(FXshort xx,FXshort yy):x(xx),y(yy){ } /// Test if zero bool operator!() const { return x==0 && y==0; } /// Equality bool operator==(const FXPoint& p) const { return x==p.x && y==p.y; } bool operator!=(const FXPoint& p) const { return x!=p.x || y!=p.y; } /// Assignment FXPoint& operator=(const FXPoint& p){ x=p.x; y=p.y; return *this; } /// Set value from another point FXPoint& set(const FXPoint& p){ x=p.x; y=p.y; return *this; } /// Set value from components FXPoint& set(FXshort xx,FXshort yy){ x=xx; y=yy; return *this; } /// Assignment operators FXPoint& operator+=(const FXPoint& p){ x+=p.x; y+=p.y; return *this; } FXPoint& operator-=(const FXPoint& p){ x-=p.x; y-=p.y; return *this; } FXPoint& operator*=(FXshort c){ x*=c; y*=c; return *this; } FXPoint& operator/=(FXshort c){ x/=c; y/=c; return *this; } /// Negation FXPoint operator-(){ return FXPoint(-x,-y); } /// Addition operators FXPoint operator+(const FXPoint& p) const { return FXPoint(x+p.x,y+p.y); } FXPoint operator-(const FXPoint& p) const { return FXPoint(x-p.x,y-p.y); } /// Scale operators friend inline FXPoint operator*(const FXPoint& p,FXshort c); friend inline FXPoint operator*(FXshort c,const FXPoint& p); friend inline FXPoint operator/(const FXPoint& p,FXshort c); friend inline FXPoint operator/(FXshort c,const FXPoint& p); /// Save object to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXPoint& p); /// Load object from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXPoint& p); }; inline FXPoint operator*(const FXPoint& p,FXshort c){ return FXPoint(p.x*c,p.y*c); } inline FXPoint operator*(FXshort c,const FXPoint& p){ return FXPoint(c*p.x,c*p.y); } inline FXPoint operator/(const FXPoint& p,FXshort c){ return FXPoint(p.x/c,p.y/c); } inline FXPoint operator/(FXshort c,const FXPoint& p){ return FXPoint(c/p.x,c/p.y); } extern FXAPI FXStream& operator<<(FXStream& store,const FXPoint& p); extern FXAPI FXStream& operator>>(FXStream& store,FXPoint& p); } #endif fox-1.6.49/include/FXLabel.h0000664000175000017500000001540212130340076012401 00000000000000/******************************************************************************** * * * L a b e l W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXLabel.h,v 1.31 2006/03/01 02:13:21 fox Exp $ * ********************************************************************************/ #ifndef FXLABEL_H #define FXLABEL_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Relationship options for icon-labels enum { ICON_UNDER_TEXT = 0, /// Icon appears under text ICON_AFTER_TEXT = 0x00080000, /// Icon appears after text (to its right) ICON_BEFORE_TEXT = 0x00100000, /// Icon appears before text (to its left) ICON_ABOVE_TEXT = 0x00200000, /// Icon appears above text ICON_BELOW_TEXT = 0x00400000, /// Icon appears below text TEXT_OVER_ICON = ICON_UNDER_TEXT, /// Same as ICON_UNDER_TEXT TEXT_AFTER_ICON = ICON_BEFORE_TEXT, /// Same as ICON_BEFORE_TEXT TEXT_BEFORE_ICON = ICON_AFTER_TEXT, /// Same as ICON_AFTER_TEXT TEXT_ABOVE_ICON = ICON_BELOW_TEXT, /// Same as ICON_BELOW_TEXT TEXT_BELOW_ICON = ICON_ABOVE_TEXT /// Same as ICON_ABOVE_TEXT }; /// Normal way to show label enum { LABEL_NORMAL = JUSTIFY_NORMAL|ICON_BEFORE_TEXT }; class FXIcon; class FXFont; /** * A label widget can be used to place a text and/or icon for * explanation purposes. The text label may have an optional tooltip * and/or help string. Icon and label are placed relative to the widget * using the justfication options, and relative to each other as determined * by the icon relationship options. A large number of arrangements is * possible. */ class FXAPI FXLabel : public FXFrame { FXDECLARE(FXLabel) protected: FXString label; // Text on the label FXIcon* icon; // Icon on the label FXFont* font; // Label font FXHotKey hotkey; // Hotkey FXint hotoff; // Offset in string FXColor textColor; // Text color FXString tip; // Tooltip FXString help; // Help message protected: FXLabel(); FXint labelHeight(const FXString& text) const; FXint labelWidth(const FXString& text) const; void drawLabel(FXDCWindow& dc,const FXString& text,FXint hot,FXint tx,FXint ty,FXint tw,FXint th); void just_x(FXint& tx,FXint& ix,FXint tw,FXint iw); void just_y(FXint& ty,FXint& iy,FXint th,FXint ih); private: FXLabel(const FXLabel&); FXLabel &operator=(const FXLabel&); public: long onPaint(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSetIconValue(FXObject*,FXSelector,void*); long onCmdGetIconValue(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Construct label with given text and icon FXLabel(FXComposite* p,const FXString& text,FXIcon* ic=0,FXuint opts=LABEL_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Enable the window virtual void enable(); /// Disable the window virtual void disable(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set the text for this label void setText(const FXString& text); /// Get the text for this label FXString getText() const { return label; } /// Set the icon for this label void setIcon(FXIcon* ic); /// Get the icon for this label FXIcon* getIcon() const { return icon; } /// Set the text font void setFont(FXFont *fnt); /// Get the text font FXFont* getFont() const { return font; } /// Get the current text color FXColor getTextColor() const { return textColor; } /// Set the current text color void setTextColor(FXColor clr); /// Set the current text-justification mode. void setJustify(FXuint mode); /// Get the current text-justification mode. FXuint getJustify() const; /// Set the current icon position void setIconPosition(FXuint mode); /// Get the current icon position FXuint getIconPosition() const; /// Set the status line help text for this label void setHelpText(const FXString& text){ help=text; } /// Get the status line help text for this label const FXString& getHelpText() const { return help; } /// Set the tool tip message for this label void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for this label const FXString& getTipText() const { return tip; } /// Save label to a stream virtual void save(FXStream& store) const; /// Load label from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXLabel(); }; } #endif fox-1.6.49/include/FXMat3d.h0000664000175000017500000001224512130340076012334 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n 3 x 3 M a t r i x * * * ********************************************************************************* * Copyright (C) 2003,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMat3d.h,v 1.12 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXMAT3D_H #define FXMAT3D_H namespace FX { class FXQuatd; /// Double-precision 3x3 matrix class FXAPI FXMat3d { protected: FXVec3d m[3]; public: /// Default constructor FXMat3d(){} /// Initialize matrix from another matrix FXMat3d(const FXMat3d& other); /// Initialize matrix from scalar FXMat3d(FXdouble w); /// Initialize matrix from components FXMat3d(FXdouble a00,FXdouble a01,FXdouble a02, FXdouble a10,FXdouble a11,FXdouble a12, FXdouble a20,FXdouble a21,FXdouble a22); /// Initialize matrix from three vectors FXMat3d(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c); /// Initialize matrix from quaternion FXMat3d(const FXQuatd& quat); /// Assignment FXMat3d& operator=(const FXMat3d& other); FXMat3d& operator=(FXdouble w); /// Set value from another matrix FXMat3d& set(const FXMat3d& other); /// Set value from scalar FXMat3d& set(FXdouble w); /// Set value from components FXMat3d& set(FXdouble a00,FXdouble a01,FXdouble a02, FXdouble a10,FXdouble a11,FXdouble a12, FXdouble a20,FXdouble a21,FXdouble a22); /// Set value from three vectors FXMat3d& set(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c); /// Set value from quaternion FXMat3d& set(const FXQuatd& quat); /// Assignment operators FXMat3d& operator+=(const FXMat3d& w); FXMat3d& operator-=(const FXMat3d& w); FXMat3d& operator*=(FXdouble w); FXMat3d& operator*=(const FXMat3d& w); FXMat3d& operator/=(FXdouble w); /// Indexing FXVec3d& operator[](FXint i){return m[i];} const FXVec3d& operator[](FXint i) const {return m[i];} /// Conversion operator FXdouble*(){return m[0];} operator const FXdouble*() const {return m[0];} /// Unary minus FXMat3d operator-() const; /// Matrix and matrix FXMat3d operator+(const FXMat3d& w) const; FXMat3d operator-(const FXMat3d& w) const; FXMat3d operator*(const FXMat3d& w) const; /// Multiply matrix and vector FXVec3d operator*(const FXVec3d& v) const; FXVec2d operator*(const FXVec2d& v) const; /// Matrix and scalar friend FXAPI FXMat3d operator*(FXdouble x,const FXMat3d& a); friend FXAPI FXMat3d operator*(const FXMat3d& a,FXdouble x); friend FXAPI FXMat3d operator/(const FXMat3d& a,FXdouble x); friend FXAPI FXMat3d operator/(FXdouble x,const FXMat3d& a); /// Set identity matrix FXMat3d& eye(); /// Multiply by rotation of phi FXMat3d& rot(FXdouble c,FXdouble s); FXMat3d& rot(FXdouble phi); /// Multiply by translation FXMat3d& trans(FXdouble tx,FXdouble ty); /// Multiply by scaling FXMat3d& scale(FXdouble sx,FXdouble sy); FXMat3d& scale(FXdouble s); /// Determinant FXdouble det() const; /// Transpose FXMat3d transpose() const; /// Invert FXMat3d invert() const; /// Save to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXMat3d& m); /// Load from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXMat3d& m); }; extern FXAPI FXMat3d operator*(FXdouble x,const FXMat3d& a); extern FXAPI FXMat3d operator*(const FXMat3d& a,FXdouble x); extern FXAPI FXMat3d operator/(const FXMat3d& a,FXdouble x); extern FXAPI FXMat3d operator/(FXdouble x,const FXMat3d& a); extern FXAPI FXStream& operator<<(FXStream& store,const FXMat3d& m); extern FXAPI FXStream& operator>>(FXStream& store,FXMat3d& m); } #endif fox-1.6.49/include/FXColorBar.h0000664000175000017500000001166512130340076013074 00000000000000/******************************************************************************** * * * C o l o r B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXColorBar.h,v 1.20 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCOLORBAR_H #define FXCOLORBAR_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Color bar orientation enum { COLORBAR_HORIZONTAL = 0, /// Color bar shown horizontally COLORBAR_VERTICAL = 0x00008000 /// Color bar shown vertically }; class FXImage; /** * A Color Bar is a widget which controls the brightness (value) of a * color by means of the hue, saturation, value specification system. * It is most useful when used together with the Color Wheel which controls * the hue and saturation. * The options COLORBAR_HORIZONTAL and COLORBAR_VERTICAL control the orientation * of the bar. */ class FXAPI FXColorBar : public FXFrame { FXDECLARE(FXColorBar) protected: FXImage *bar; // Intensity bar FXfloat hsv[3]; // Hue, saturation, value FXString tip; // Tooltip value FXString help; // Help value protected: FXColorBar(); void updatebar(); private: FXColorBar(const FXColorBar&); FXColorBar &operator=(const FXColorBar&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Construct color bar FXColorBar(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Change hue void setHue(FXfloat h); /// Return hue FXfloat getHue() const { return hsv[0]; } /// Change saturation void setSat(FXfloat s); /// Return saturation FXfloat getSat() const { return hsv[1]; } /// Change value void setVal(FXfloat v); /// Return value FXfloat getVal() const { return hsv[2]; } /// Change the color bar style FXuint getBarStyle() const; /// Get the color bar style void setBarStyle(FXuint style); /// Set status line help text for this color bar void setHelpText(const FXString& text){ help=text; } /// Get status line help text for this color bar const FXString& getHelpText() const { return help; } /// Set tool tip message for this color bar void setTipText(const FXString& text){ tip=text; } /// Get tool tip message for this color bar const FXString& getTipText() const { return tip; } /// Save color bar to a stream virtual void save(FXStream& store) const; /// Load color bar from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXColorBar(); }; } #endif fox-1.6.49/include/FXCP1251Codec.h0000644000175000017500000000110611637250333013134 00000000000000#ifndef FXCP1251CODEC_H #define FXCP1251CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1251 Codec class FXAPI FXCP1251Codec : public FXTextCodec { FXDECLARE(FXCP1251Codec) public: FXCP1251Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1251Codec(){} }; } #endif fox-1.6.49/include/FXDragCorner.h0000664000175000017500000000654212130340076013415 00000000000000/******************************************************************************** * * * D r a g C o r n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDragCorner.h,v 1.15 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXDRAGCORNER_H #define FXDRAGCORNER_H #ifndef FXWINDOW_H #include "FXWindow.h" #endif namespace FX { /** * A drag corner widget may be placed in the bottom right corner * so as to allow the window to be resized more easily. */ class FXAPI FXDragCorner : public FXWindow { FXDECLARE(FXDragCorner) protected: FXColor hiliteColor; FXColor shadowColor; FXint oldw; FXint oldh; FXint xoff; FXint yoff; FXbool ewmh; protected: FXDragCorner(); private: FXDragCorner(const FXDragCorner&); FXDragCorner &operator=(const FXDragCorner&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); public: /// Construct a drag corner FXDragCorner(FXComposite* p); /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Create all of the server-side resources for this window virtual void create(); /// Change highlight color void setHiliteColor(FXColor clr); /// Return current highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change shadow color void setShadowColor(FXColor clr); /// Return current shadow color FXColor getShadowColor() const { return shadowColor; } /// Save drag corner to a stream virtual void save(FXStream& store) const; /// Load drag corner from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXMainWindow.h0000664000175000017500000000566712130340076013452 00000000000000/******************************************************************************** * * * M a i n W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMainWindow.h,v 1.21 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXMAINWINDOW_H #define FXMAINWINDOW_H #ifndef FXTOPWINDOW_H #include "FXTopWindow.h" #endif namespace FX { /** * The Main Window is usually the central window of an application. Applications * may have any number of main windows. * When a MainWindow is closed, it sends a SEL_CLOSE message to its target; the target * should return 0 if there is no objection against proceeding with the close, and * return 1 otherwise. * After the SEL_CLOSE message has been sent and no objection was raised, the main * window will delete itself. */ class FXAPI FXMainWindow : public FXTopWindow { FXDECLARE(FXMainWindow) protected: FXMainWindow(){} private: FXMainWindow(const FXMainWindow&); FXMainWindow &operator=(const FXMainWindow&); public: /// Construct a main window FXMainWindow(FXApp* a,const FXString& name,FXIcon *ic=NULL,FXIcon *mi=NULL,FXuint opts=DECOR_ALL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0,FXint hs=0,FXint vs=0); /// Create server-side resources virtual void create(); /// Destructor virtual ~FXMainWindow(); }; } #endif fox-1.6.49/include/FXGUISignal.h0000664000175000017500000001117112130340076013143 00000000000000/******************************************************************************** * * * S i g n a l G U I T h r e a d * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGUISignal.h,v 1.6.2.1 2006/05/24 12:08:45 fox Exp $ * ********************************************************************************/ #ifndef FXGUISIGNAL_H #define FXGUISIGNAL_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { class FXApp; /** * An FXGUISignal manages a waitable object which is used to awaken the * main user-interface thread from a worker thread. When a FXGUISignal is * constructed, it automatically calls addInput() function to register itself * as the message handler for the SEL_IO_READ message from FXApp. Likewise, * when FXGUISignal is destroyed, it calls removeInput() to remove itself as * the message handler for the SEL_IO_READ message from FXApp. * When a worker thread calls the signal() API, the waitable object managed by * FXGUISignal is set to the signaled state, after which the worker thread * continues execution immediately. * Meanwhile, the main user-interface thread is awakened because one of its * inputs has become signaled. It invokes the onSignal handler of FXGUISignal, * which clears the waitable object's state and subsequently dispatches to the * target of FXGUISignal through the SEL_IO_READ message. * Thus, the SEL_IO_READ handler in FXGUISignal is executed in the context of * the user-interface thread, allowing any user-interaction without blocking * a worker thread. * In a typical scenario, a worker thread updates some common data structure, * then notifies the main user-interface thread (via the FXGUISignal) to update * the user interface and perform some appropriate action. */ class FXAPI FXGUISignal : public FXObject { FXDECLARE(FXGUISignal) private: FXApp *app; // Application protected: FXObject *target; // Target object void *data; // User data FXSelector message; // Message id private: #ifndef WIN32 FXInputHandle fd[2]; #else FXInputHandle event; #endif protected: FXGUISignal(); private: FXGUISignal(const FXGUISignal&); FXGUISignal& operator=(const FXGUISignal&); public: enum{ ID_IO_READ=0, ID_LAST }; public: long onSignal(FXObject*,FXSelector,void*); public: /// Constructor FXGUISignal(FXApp* a,FXObject* tgt=NULL,FXSelector sel=0,void* ptr=NULL); /// Get application FXApp* getApp() const { return app; } /// Set the message target object void setTarget(FXObject *t){ target=t; } /// Get the message target object, if any FXObject* getTarget() const { return target; } /// Set the message identifier void setSelector(FXSelector sel){ message=sel; } /// Get the message identifier FXSelector getSelector() const { return message; } /// Set user data pointer void setData(void *ptr){ data=ptr; } /// Get user data pointer void* getData() const { return data; } /** * Signal the event; this API may be called by the worker thread * to send a message to the user-interface thread. */ void signal(); /// Destructor virtual ~FXGUISignal(); }; } #endif fox-1.6.49/include/FXTopWindow.h0000664000175000017500000002621412130340076013317 00000000000000/******************************************************************************** * * * T o p - L e v e l W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTopWindow.h,v 1.62 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTOPWINDOW_H #define FXTOPWINDOW_H #ifndef FXSHELL_H #include "FXShell.h" #endif namespace FX { /// Title and border decorations enum { DECOR_NONE = 0, /// Borderless window DECOR_TITLE = 0x00020000, /// Window title DECOR_MINIMIZE = 0x00040000, /// Minimize button DECOR_MAXIMIZE = 0x00080000, /// Maximize button DECOR_CLOSE = 0x00100000, /// Close button DECOR_BORDER = 0x00200000, /// Border DECOR_SHRINKABLE = 0x00400000, /// Window can become smaller DECOR_STRETCHABLE = 0x00800000, /// Window can become larger DECOR_RESIZE = DECOR_SHRINKABLE|DECOR_STRETCHABLE, /// Resize handles DECOR_MENU = 0x01000000, /// Window menu DECOR_ALL = (DECOR_TITLE|DECOR_MINIMIZE|DECOR_MAXIMIZE|DECOR_CLOSE|DECOR_BORDER|DECOR_SHRINKABLE|DECOR_STRETCHABLE|DECOR_MENU) }; /// Initial window placement enum { PLACEMENT_DEFAULT, /// Place it at the default size and location PLACEMENT_VISIBLE, /// Place window to be fully visible PLACEMENT_CURSOR, /// Place it under the cursor position PLACEMENT_OWNER, /// Place it centered on its owner PLACEMENT_SCREEN, /// Place it centered on the screen PLACEMENT_MAXIMIZED /// Place it maximized to the screen size }; class FXToolBar; class FXIcon; /** * Abstract base class for all top-level windows. * TopWindows are usually managed by a Window Manager under X11 and * therefore borders and window-menus and other decorations like resize- * handles are subject to the Window Manager's interpretation of the * decoration hints. * When a TopWindow is closed, it sends a SEL_CLOSE message to its * target. The target should return 0 in response to this message if * there is no objection to proceed with the closing of the window, and * return 1 otherwise. After the SEL_CLOSE message has been sent and * no objection was raised, the window will delete itself. * When the session is closed, the window will send a SEL_SESSION_NOTIFY * message to its target, allowing the application to write any unsaved * data to the disk. If the target returns 0, then the system will proceed * to close the session. Subsequently a SEL_SESSION_CLOSED will be received * which causes the window to be closed with prejudice by calling the * function close(FALSE). * When receiving a SEL_UPDATE, the target can update the title string * of the window, so that the title of the window reflects the name * of the document, for example. * For convenience, TopWindow provides the same layout behavior as * the Packer widget, as well as docking and undocking of toolbars. * TopWindows can be owned by other windows, or be free-floating. * Owned TopWindows will usually remain stacked on top of the owner * windows. The lifetime of an owned window should not exceed that of * the owner. */ class FXAPI FXTopWindow : public FXShell { FXDECLARE_ABSTRACT(FXTopWindow) protected: FXString title; // Window title FXIcon *icon; // Window icon (big) FXIcon *miniIcon; // Window icon (small) FXint padtop; // Top margin FXint padbottom; // Bottom margin FXint padleft; // Left margin FXint padright; // Right margin FXint hspacing; // Horizontal child spacing FXint vspacing; // Vertical child spacing protected: FXTopWindow(); void settitle(); void seticons(); void setdecorations(); FXTopWindow(FXApp* ap,const FXString& name,FXIcon *ic,FXIcon *mi,FXuint opts,FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb,FXint hs,FXint vs); FXTopWindow(FXWindow* ow,const FXString& name,FXIcon *ic,FXIcon *mi,FXuint opts,FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb,FXint hs,FXint vs); private: FXTopWindow(const FXTopWindow&); FXTopWindow& operator=(const FXTopWindow&); #ifdef WIN32 virtual const char* GetClass() const; #endif public: long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); long onSessionNotify(FXObject*,FXSelector,void*); long onSessionClosed(FXObject*,FXSelector,void*); long onCmdMaximize(FXObject*,FXSelector,void*); long onCmdMinimize(FXObject*,FXSelector,void*); long onCmdRestore(FXObject*,FXSelector,void*); long onCmdClose(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSetIconValue(FXObject*,FXSelector,void*); long onCmdGetIconValue(FXObject*,FXSelector,void*); public: enum { ID_MAXIMIZE=FXShell::ID_LAST, /// Maximize the window ID_MINIMIZE, /// Minimize the window ID_RESTORE, /// Restore the window ID_CLOSE, /// Close the window ID_QUERY_DOCK, /// Toolbar asks to dock ID_LAST }; public: /// Create server-side resources virtual void create(); /// Detach the server-side resources for this window virtual void detach(); /// Destroy the server-side resources for this window virtual void destroy(); /// Perform layout virtual void layout(); /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Show this window virtual void show(); /// Hide this window virtual void hide(); /// Show this window with given placement virtual void show(FXuint placement); /// Position the window based on placement void place(FXuint placement); /// Return the default width of this window virtual FXint getDefaultWidth(); /// Return the default height of this window virtual FXint getDefaultHeight(); /// Obtain border sizes added to our window by the window manager FXbool getWMBorders(FXint& left,FXint& right,FXint& top,FXint& bottom); /// Raise this window to the top of the stacking order virtual void raise(); /// Move this window to the specified position in the parent's coordinates virtual void move(FXint x,FXint y); /// Resize this window to the specified width and height virtual void resize(FXint w,FXint h); /// Move and resize this window in the parent's coordinates virtual void position(FXint x,FXint y,FXint w,FXint h); /// Maximize window, return TRUE if maximized virtual FXbool maximize(FXbool notify=FALSE); /// Minimize or iconify window, return TRUE if minimized virtual FXbool minimize(FXbool notify=FALSE); /// Restore window to normal, return TRUE if restored virtual FXbool restore(FXbool notify=FALSE); /** * Close the window, return TRUE if actually closed. If notify=TRUE, the target * will receive a SEL_CLOSE message to determine if it is OK to close the window. * If the target ignores the SEL_CLOSE message or returns 0, the window will * be closed, and subsequently deleted. When the last main window has been * closed, the application will receive an ID_QUIT message and will be closed. */ virtual FXbool close(FXbool notify=FALSE); /// Return TRUE if maximized FXbool isMaximized() const; /// Return TRUE if minimized FXbool isMinimized() const; /// Change window title void setTitle(const FXString& name); /// Return window title FXString getTitle() const { return title; } /// Change top padding void setPadTop(FXint pt); /// Get top interior padding FXint getPadTop() const { return padtop; } /// Change bottom padding void setPadBottom(FXint pb); /// Get bottom interior padding FXint getPadBottom() const { return padbottom; } /// Change left padding void setPadLeft(FXint pl); /// Get left interior padding FXint getPadLeft() const { return padleft; } /// Change right padding void setPadRight(FXint pr); /// Get right interior padding FXint getPadRight() const { return padright; } /// Return horizontal spacing between children FXint getHSpacing() const { return hspacing; } /// Return vertical spacing between children FXint getVSpacing() const { return vspacing; } /// Change horizontal spacing between children void setHSpacing(FXint hs); /// Change vertical spacing between children void setVSpacing(FXint vs); /// Change packing hints for children void setPackingHints(FXuint ph); /// Return packing hints for children FXuint getPackingHints() const; /// Change title and border decorations void setDecorations(FXuint decorations); /// Return current title and border decorations FXuint getDecorations() const; /// Return window icon FXIcon* getIcon() const { return icon; } /// Change window icon void setIcon(FXIcon* ic); /// Return window mini (title) icon FXIcon* getMiniIcon() const { return miniIcon; } /// Change window mini (title) icon void setMiniIcon(FXIcon *ic); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXTopWindow(); }; } #endif fox-1.6.49/include/FXAccelTable.h0000664000175000017500000001145212130340076013342 00000000000000/******************************************************************************** * * * A c c e l e r a t o r T a b l e C l a s s * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXAccelTable.h,v 1.27 2006/01/22 17:57:58 fox Exp $ * ********************************************************************************/ #ifndef FXACCELTABLE_H #define FXACCELTABLE_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { /** * The accelerator table sends a message to a specific * target object when the indicated key and modifier combination * is pressed. */ class FXAPI FXAccelTable : public FXObject { FXDECLARE(FXAccelTable) protected: struct FXAccelKey { FXObject *target; // Target object of message FXSelector messagedn; // Message being sent FXSelector messageup; // Message being sent FXHotKey code; // Keysym and modifier mask to match }; private: FXAccelKey *key; // Accelerator table FXuint max; // Largest table index FXuint num; // Number of entries private: void resize(FXuint m); private: FXAccelTable(const FXAccelTable&); FXAccelTable &operator=(const FXAccelTable&); public: long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); public: /// Construct empty accelerator table FXAccelTable(); /// Add an accelerator into the table void addAccel(FXHotKey hotkey,FXObject* target=NULL,FXSelector seldn=0,FXSelector selup=0); /// Remove an accelerator from the table void removeAccel(FXHotKey hotkey); /// Return true if accelerator specified bool hasAccel(FXHotKey hotkey) const; /// Return target object of the given accelerator FXObject* targetOfAccel(FXHotKey hotkey) const; /** * Parse accelerator from string, yielding modifier and * key code. For example, parseAccel("Ctl+Shift+X") * yields MKUINT(KEY_X,CONTROLMASK|SHIFTMASK). */ friend FXAPI FXHotKey parseAccel(const FXString& string); /** * Unparse hot key comprising modifier and key code back * into a string suitable for parsing with fxparseHotKey. */ friend FXAPI FXString unparseAccel(FXHotKey key); /** * Parse hot key from string, yielding modifier and * key code. For example, parseHotKey(""Salt && &Pepper!"") * yields MKUINT(KEY_p,ALTMASK). */ friend FXAPI FXHotKey parseHotKey(const FXString& string); /** * Obtain hot key offset in string, or -1 if not found. * For example, findHotKey("Salt && &Pepper!") yields 7. * Note that this is the byte-offset, not the character * index! */ friend FXAPI FXint findHotKey(const FXString& string); /** * Strip hot key combination from the string. * For example, stripHotKey("Salt && &Pepper") should * yield "Salt & Pepper". */ friend FXAPI FXString stripHotKey(const FXString& string); /// Save table to a stream virtual void save(FXStream& store) const; /// Load table from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXAccelTable(); }; extern FXAPI FXHotKey parseAccel(const FXString& string); extern FXAPI FXString unparseAccel(FXHotKey key); extern FXAPI FXHotKey parseHotKey(const FXString& string); extern FXAPI FXint findHotKey(const FXString& string); extern FXAPI FXString stripHotKey(const FXString& string); } #endif fox-1.6.49/include/FXChoiceBox.h0000664000175000017500000001273512130340076013233 00000000000000/******************************************************************************** * * * C h o i c e B o x * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXChoiceBox.h,v 1.8 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCHOICEBOX_H #define FXCHOICEBOX_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { class FXList; /** * The Choice Box provides a dialog panel to select one item out of a list * of choices. The choices are provided as a list of text strings. * When the dialog closes, the index of the selected choice is returned, * while a -1 is returned if the dialog was canceled, */ class FXAPI FXChoiceBox : public FXDialogBox { FXDECLARE(FXChoiceBox) protected: FXList *list; protected: FXChoiceBox(){} private: FXChoiceBox(const FXChoiceBox&); FXChoiceBox &operator=(const FXChoiceBox&); void initialize(const FXString& text,FXIcon* icon); public: long onCmdClicked(FXObject*,FXSelector,void*); long onCmdCancel(FXObject*,FXSelector,void*); public: enum{ ID_CLICKED=FXDialogBox::ID_LAST, ID_LAST }; public: /// Construct choice box with given caption, icon, message text, and with choices from array of strings FXChoiceBox(FXWindow* owner,const FXString& caption,const FXString& text,FXIcon* icon,const FXchar** choices,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Construct choice box with given caption, icon, message text, and with choices from newline separated strings FXChoiceBox(FXWindow* owner,const FXString& caption,const FXString& text,FXIcon* icon,const FXString& choices,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Construct free floating choice box with given caption, icon, message text, and with choices from array of strings FXChoiceBox(FXApp* app,const FXString& caption,const FXString& text,FXIcon* icon,const FXchar** choices,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Construct free floating choice box with given caption, icon, message text, and with choices from newline separated strings FXChoiceBox(FXApp* app,const FXString& caption,const FXString& text,FXIcon* icon,const FXString& choices,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /** * Show a modal choice dialog. * Prompt the user using a dialog with given caption, icon, * message text, and with choices from newline array of strings. * The return value is -1 if cancelled, or the given choice. */ static FXint ask(FXWindow* owner,FXuint opts,const FXString& caption,const FXString& text,FXIcon* icon,const FXchar** choices); /** * Show a modal choice dialog. * Prompt the user using a dialog with given caption, icon, * message text, and with choices from newline separated strings. * The return value is -1 if cancelled, or the given choice */ static FXint ask(FXWindow* owner,FXuint opts,const FXString& caption,const FXString& text,FXIcon* icon,const FXString& choices); /** * Show modal choice message, in free floating window. * Prompt the user using a dialog with given caption, icon, * message text, and with choices from newline array of strings. * The return value is -1 if cancelled, or the given choice */ static FXint ask(FXApp* app,FXuint opts,const FXString& caption,const FXString& text,FXIcon* icon,const FXchar** choices); /** * Show modal choice message, in free floating window. * Prompt the user using a dialog with given caption, icon, * message text, and with choices from newline separated strings. * The return value is -1 if cancelled, or the given choice */ static FXint ask(FXApp* app,FXuint opts,const FXString& caption,const FXString& text,FXIcon* icon,const FXString& choices); /// Save choice box to a stream virtual void save(FXStream& store) const; /// Load choice box from a stream virtual void load(FXStream& store); /// Destroy choice box virtual ~FXChoiceBox(); }; } #endif fox-1.6.49/include/FXImageView.h0000664000175000017500000001013512130340076013235 00000000000000/******************************************************************************** * * * I m a g e V i e w W i d g e t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXImageView.h,v 1.16 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXIMAGEVIEW_H #define FXIMAGEVIEW_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { class FXImage; /// Image alignment styles enum { IMAGEVIEW_NORMAL = 0, /// Normal mode is centered IMAGEVIEW_CENTER_X = 0, /// Centered horizontally IMAGEVIEW_LEFT = 0x00100000, /// Left-aligned IMAGEVIEW_RIGHT = 0x00200000, /// Right-aligned IMAGEVIEW_CENTER_Y = 0, /// Centered vertically IMAGEVIEW_TOP = 0x00400000, /// Top-aligned IMAGEVIEW_BOTTOM = 0x00800000 /// Bottom-aligned }; /** * The Image View widget display a scrollable view of an image. */ class FXAPI FXImageView : public FXScrollArea { FXDECLARE(FXImageView) protected: FXImage *image; // Image to view FXint grabx; // Grab point x FXint graby; // Grab point y protected: FXImageView(); private: FXImageView(const FXImageView&); FXImageView &operator=(const FXImageView&); public: long onPaint(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); public: enum { ID_XYZ=FXScrollArea::ID_LAST, ID_LAST }; public: /// Construct a scroll window FXImageView(FXComposite* p,FXImage* img=NULL,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Image view widget can receive focus virtual bool canFocus() const; /// Return the width of the contents virtual FXint getContentWidth(); /// Return the height of the contents virtual FXint getContentHeight(); /// Change image void setImage(FXImage* img); /// Return image FXImage* getImage() const { return image; } /// Set the current alignment. void setAlignment(FXuint mode); /// Get the current alignment. FXuint getAlignment() const; /// Save list to a stream virtual void save(FXStream& store) const; /// Load list from a stream virtual void load(FXStream& store); /// Destroy virtual ~FXImageView(); }; } #endif fox-1.6.49/include/FXDC.h0000664000175000017500000003512412130340076011653 00000000000000/******************************************************************************** * * * D e v i c e C o n t e x t B a s e C l a s s * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDC.h,v 1.37 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDC_H #define FXDC_H namespace FX { /// Drawing (BITBLT) functions enum FXFunction { BLT_CLR, /// D := 0 BLT_SRC_AND_DST, /// D := S & D BLT_SRC_AND_NOT_DST, /// D := S & ~D BLT_SRC, /// D := S BLT_NOT_SRC_AND_DST, /// D := ~S & D BLT_DST, /// D := D BLT_SRC_XOR_DST, /// D := S ^ D BLT_SRC_OR_DST, /// D := S | D BLT_NOT_SRC_AND_NOT_DST, /// D := ~S & ~D == D := ~(S | D) BLT_NOT_SRC_XOR_DST, /// D := ~S ^ D BLT_NOT_DST, /// D := ~D BLT_SRC_OR_NOT_DST, /// D := S | ~D BLT_NOT_SRC, /// D := ~S BLT_NOT_SRC_OR_DST, /// D := ~S | D BLT_NOT_SRC_OR_NOT_DST, /// D := ~S | ~D == ~(S & D) BLT_SET /// D := 1 }; /// Line Styles enum FXLineStyle { LINE_SOLID, /// Solid lines LINE_ONOFF_DASH, /// On-off dashed lines LINE_DOUBLE_DASH /// Double dashed lines }; /// Line Cap Styles enum FXCapStyle { CAP_NOT_LAST, /// Don't include last end cap CAP_BUTT, /// Butting line end caps CAP_ROUND, /// Round line end caps CAP_PROJECTING /// Projecting line end caps }; /// Line Join Styles enum FXJoinStyle { JOIN_MITER, /// Mitered or pointy joints JOIN_ROUND, /// Round line joints JOIN_BEVEL /// Beveled or flat joints }; /// Fill Styles enum FXFillStyle { FILL_SOLID, /// Fill with solid color FILL_TILED, /// Fill with tiled bitmap FILL_STIPPLED, /// Fill where stipple mask is 1 FILL_OPAQUESTIPPLED /// Fill with foreground where mask is 1, background otherwise }; /// Fill Rules enum FXFillRule { RULE_EVEN_ODD, /// Even odd polygon filling RULE_WINDING /// Winding rule polygon filling }; /// Stipple/dither patterns enum FXStipplePattern { STIPPLE_0 = 0, STIPPLE_NONE = 0, STIPPLE_BLACK = 0, /// All ones STIPPLE_1 = 1, STIPPLE_2 = 2, STIPPLE_3 = 3, STIPPLE_4 = 4, STIPPLE_5 = 5, STIPPLE_6 = 6, STIPPLE_7 = 7, STIPPLE_8 = 8, STIPPLE_GRAY = 8, /// 50% gray STIPPLE_9 = 9, STIPPLE_10 = 10, STIPPLE_11 = 11, STIPPLE_12 = 12, STIPPLE_13 = 13, STIPPLE_14 = 14, STIPPLE_15 = 15, STIPPLE_16 = 16, STIPPLE_WHITE = 16, /// All zeroes STIPPLE_HORZ = 17, /// Horizontal hatch pattern STIPPLE_VERT = 18, /// Vertical hatch pattern STIPPLE_CROSS = 19, /// Cross-hatch pattern STIPPLE_DIAG = 20, /// Diagonal // hatch pattern STIPPLE_REVDIAG = 21, /// Reverse diagonal \\ hatch pattern STIPPLE_CROSSDIAG = 22 /// Cross-diagonal hatch pattern }; /// Line segment struct FXSegment { FXshort x1,y1,x2,y2; }; /// Arc struct FXArc { FXshort x,y,w,h,a,b; }; class FXApp; class FXImage; class FXBitmap; class FXIcon; class FXFont; class FXDrawable; class FXRegion; /** * Abstract Device Context * * A Device Context is used to maintain the state of the graphics drawing system. * Defining your drawing code in terms of the Abstract Device Context allows the * drawing commands to be rendered on different types of surfaces, such as windows * and images (FXDCWindow), or on paper (FXDCPrint). * WYSYWYG may be obtained by using the same identical drawing code in your * application regardless of the actual device surface being utilized. */ class FXAPI FXDC { friend class FXFont; private: FXApp *app; // Application protected: void *ctx; // Context handle FXFont *font; // Drawing font FXStipplePattern pattern; // Stipple pattern FXBitmap *stipple; // Stipple bitmap FXImage *tile; // Tile image FXBitmap *mask; // Mask bitmap FXRectangle clip; // Clip rectangle FXColor fg; // Foreground color FXColor bg; // Background color FXuint width; // Line width FXCapStyle cap; // Line cap style FXJoinStyle join; // Line join style FXLineStyle style; // Line style FXFillStyle fill; // Fill style FXFillRule rule; // Fill rule FXFunction rop; // RasterOp FXchar dashpat[32]; // Line dash pattern data FXuint dashlen; // Line dash pattern length FXuint dashoff; // Line dash pattern offset FXint tx; // Tile dx FXint ty; // Tile dy FXint cx; // Clip x FXint cy; // Clip y private: FXDC(); FXDC(const FXDC&); FXDC &operator=(const FXDC&); public: /// Construct dummy DC FXDC(FXApp* a); /// Get application FXApp* getApp() const { return app; } /// Get context handle void* context() const { return ctx; } /// Read back pixel virtual FXColor readPixel(FXint x,FXint y); /// Draw points virtual void drawPoint(FXint x,FXint y); virtual void drawPoints(const FXPoint* points,FXuint npoints); virtual void drawPointsRel(const FXPoint* points,FXuint npoints); /// Draw lines virtual void drawLine(FXint x1,FXint y1,FXint x2,FXint y2); virtual void drawLines(const FXPoint* points,FXuint npoints); virtual void drawLinesRel(const FXPoint* points,FXuint npoints); virtual void drawLineSegments(const FXSegment* segments,FXuint nsegments); /// Draw rectangles virtual void drawRectangle(FXint x,FXint y,FXint w,FXint h); virtual void drawRectangles(const FXRectangle* rectangles,FXuint nrectangles); /// Draw rounded rectangle with ellipse with ew and ellips height eh virtual void drawRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh); /** * Draw arcs. * The argument ang1 specifies the start of the arc relative to the * three-o'clock position from the center, in units of degrees*64. * The argument ang2 specifies the path and extent of the arc relative * to the start of the arc, in units of degrees*64. * The arguments x,y,w,h specify the bounding rectangle. */ virtual void drawArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void drawArcs(const FXArc* arcs,FXuint narcs); /// Draw ellipse virtual void drawEllipse(FXint x,FXint y,FXint w,FXint h); /// Filled rectangles virtual void fillRectangle(FXint x,FXint y,FXint w,FXint h); virtual void fillRectangles(const FXRectangle* rectangles,FXuint nrectangles); /// Filled rounded rectangle with ellipse with ew and ellips height eh virtual void fillRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh); /// Fill chord virtual void fillChord(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void fillChords(const FXArc* chords,FXuint nchords); /// Fill arcs virtual void fillArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void fillArcs(const FXArc* arcs,FXuint narcs); /// Fill ellipse virtual void fillEllipse(FXint x,FXint y,FXint w,FXint h); /// Filled polygon virtual void fillPolygon(const FXPoint* points,FXuint npoints); virtual void fillConcavePolygon(const FXPoint* points,FXuint npoints); virtual void fillComplexPolygon(const FXPoint* points,FXuint npoints); /// Filled polygon with relative points virtual void fillPolygonRel(const FXPoint* points,FXuint npoints); virtual void fillConcavePolygonRel(const FXPoint* points,FXuint npoints); virtual void fillComplexPolygonRel(const FXPoint* points,FXuint npoints); /// Draw hashed box virtual void drawHashBox(FXint x,FXint y,FXint w,FXint h,FXint b=1); /// Draw focus rectangle virtual void drawFocusRectangle(FXint x,FXint y,FXint w,FXint h); /// Draw area from source virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy); /// Draw area stretched area from source virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy,FXint dw,FXint dh); /// Draw image virtual void drawImage(const FXImage* image,FXint dx,FXint dy); /// Draw bitmap virtual void drawBitmap(const FXBitmap* bitmap,FXint dx,FXint dy); /// Draw icon virtual void drawIcon(const FXIcon* icon,FXint dx,FXint dy); virtual void drawIconShaded(const FXIcon* icon,FXint dx,FXint dy); virtual void drawIconSunken(const FXIcon* icon,FXint dx,FXint dy); /// Draw string with base line starting at x, y virtual void drawText(FXint x,FXint y,const FXString& string); virtual void drawText(FXint x,FXint y,const FXchar* string,FXuint length); /// Draw text starting at x, y over filled background virtual void drawImageText(FXint x,FXint y,const FXString& string); virtual void drawImageText(FXint x,FXint y,const FXchar* string,FXuint length); /// Set foreground drawing color virtual void setForeground(FXColor clr); /// Get foreground drawing color FXColor getForeground() const { return fg; } /// Set background drawing color virtual void setBackground(FXColor clr); /// Get background drawing color FXColor getBackground() const { return bg; } /** * Set dash pattern and dash offset. * A dash pattern of [1 2 3 4] is a repeating pattern of 1 foreground pixel, * 2 background pixels, 3 foreground pixels, and 4 background pixels. * The offset is where in the pattern the system will start counting. * The maximum length of the dash pattern is 32. */ virtual void setDashes(FXuint dashoffset,const FXchar *dashpattern,FXuint dashlength); /// Get dash pattern const FXchar* getDashPattern() const { return dashpat; } /// Get dash offset FXuint getDashOffset() const { return dashoff; } /// Get dash length FXuint getDashLength() const { return dashlen; } /// Set line width:- 0 means thinnest/fastest possible virtual void setLineWidth(FXuint linewidth=0); /// Get line width FXuint getLineWidth() const { return width; } /// Set line cap style virtual void setLineCap(FXCapStyle capstyle=CAP_BUTT); /// Get line cap style FXCapStyle getLineCap() const { return cap; } /// Set line join style virtual void setLineJoin(FXJoinStyle joinstyle=JOIN_MITER); /// Get line join style FXJoinStyle getLineJoin() const { return join; } /// Set line style virtual void setLineStyle(FXLineStyle linestyle=LINE_SOLID); /// Get line style FXLineStyle getLineStyle() const { return style; } /// Set fill style virtual void setFillStyle(FXFillStyle fillstyle=FILL_SOLID); /// Get fill style FXFillStyle getFillStyle() const { return fill; } /// Set fill rule virtual void setFillRule(FXFillRule fillrule=RULE_EVEN_ODD); /// Get fill rule FXFillRule getFillRule() const { return rule; } /// Set rasterop function virtual void setFunction(FXFunction func=BLT_SRC); /// Get rasterop function FXFunction getFunction() const { return rop; } /// Set the tile image virtual void setTile(FXImage* image,FXint dx=0,FXint dy=0); /// Get the tile image FXImage *getTile() const { return tile; } /// Set the stipple pattern virtual void setStipple(FXBitmap *bitmap,FXint dx=0,FXint dy=0); /// Get stipple bitmap FXBitmap *getStippleBitmap() const { return stipple; } /// Set the stipple pattern virtual void setStipple(FXStipplePattern pat,FXint dx=0,FXint dy=0); /// Get pattern FXStipplePattern getStipplePattern() const { return pattern; } /// Set clip region virtual void setClipRegion(const FXRegion& region); /// Set clip rectangle virtual void setClipRectangle(FXint x,FXint y,FXint w,FXint h); /// Change clip rectangle virtual void setClipRectangle(const FXRectangle& rectangle); /// Return clip rectangle const FXRectangle& getClipRectangle() const { return clip; } /// Return clip x FXint getClipX() const { return clip.x; } /// Return clip y FXint getClipY() const { return clip.y; } /// Return clip width FXint getClipWidth() const { return clip.w; } /// Return clip height FXint getClipHeight() const { return clip.h; } /// Clear clipping virtual void clearClipRectangle(); /// Set clip mask virtual void setClipMask(FXBitmap* bitmap,FXint dx=0,FXint dy=0); /// Clear clip mask virtual void clearClipMask(); /// Set font to draw text with virtual void setFont(FXFont *fnt); /// Get text font FXFont* getFont() const { return font; } /// Clip against child windows virtual void clipChildren(FXbool yes); /// Destructor virtual ~FXDC(); }; } #endif fox-1.6.49/include/FXCP1254Codec.h0000644000175000017500000000110611637250333013137 00000000000000#ifndef FXCP1254CODEC_H #define FXCP1254CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1254 Codec class FXAPI FXCP1254Codec : public FXTextCodec { FXDECLARE(FXCP1254Codec) public: FXCP1254Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1254Codec(){} }; } #endif fox-1.6.49/include/FXDir.h0000664000175000017500000000763012130340076012104 00000000000000/******************************************************************************** * * * D i r e c t o r y E n u m e r a t o r * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDir.h,v 1.24 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDIR_H #define FXDIR_H namespace FX { /// Directory enumerator class FXAPI FXDir { private: FXuval space[256]; private: FXDir(const FXDir&); FXDir &operator=(const FXDir&); public: /// Options for listing files enum { MatchAll = 0, /// Matching files and directories NoFiles = 1, /// Don't list any files NoDirs = 2, /// Don't list any directories AllFiles = 4, /// List all files AllDirs = 8, /// List all directories HiddenFiles = 16, /// List hidden files also HiddenDirs = 32, /// List hidden directories also NoParent = 64, /// Don't include '..' in the listing CaseFold = 128 /// Matching is case-insensitive }; public: /// Construct directory enumerator FXDir(); /// Construct directory enumerator open on path FXDir(const FXString& path); /// Open directory to path, return true if ok. virtual bool open(const FXString& path); /// Returns true if the directory is open virtual bool isOpen() const; /// Go to next one virtual bool next(); /// Return current file name virtual FXString name() const; /// Close directory virtual void close(); /// Create directory static bool create(const FXString& path,FXuint mode=FXIO::OwnerFull|FXIO::GroupFull|FXIO::OtherFull); /// Remove directory static bool remove(const FXString& path); /// Rename or move srcpath to dstpath static bool rename(const FXString& srcpath,const FXString& dstpath); /** * List files in a given directory. * Returns the number of files in the string-array list which matched the * pattern or satisfied the flag conditions. */ static FXint listFiles(FXString*& filelist,const FXString& path,const FXString& pattern="*",FXuint flags=FXDir::MatchAll); /** * List drives, i.e. roots of directory trees. * Return the number of drives in the string array. */ static FXint listDrives(FXString*& drivelist); /// Destructor virtual ~FXDir(); }; } #endif fox-1.6.49/include/FXFileStream.h0000664000175000017500000001450212130340076013415 00000000000000/******************************************************************************** * * * F i l e S t r e a m C l a s s * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFileStream.h,v 1.15 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXFILESTREAM_H #define FXFILESTREAM_H #ifndef FXSTREAM_H #include "FXStream.h" #endif namespace FX { /// File Store Definition class FXAPI FXFileStream : public FXStream { protected: FXFile file; protected: virtual FXuval writeBuffer(FXuval count); virtual FXuval readBuffer(FXuval count); public: /// Create file store FXFileStream(const FXObject* cont=NULL); /** * Open binary data file stream; allocate a buffer of the given size * for the file I/O; the buffer must be at least 16 bytes. */ bool open(const FXString& filename,FXStreamDirection save_or_load,FXuval size=8192); /// Close file store virtual bool close(); /// Get position FXlong position() const { return FXStream::position(); } /// Move to position virtual bool position(FXlong offset,FXWhence whence=FXFromStart); /// Save single items to stream FXFileStream& operator<<(const FXuchar& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXchar& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXushort& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXshort& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXuint& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXint& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXfloat& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXdouble& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXlong& v){ FXStream::operator<<(v); return *this; } FXFileStream& operator<<(const FXulong& v){ FXStream::operator<<(v); return *this; } /// Save arrays of items to stream FXFileStream& save(const FXuchar* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXchar* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXushort* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXshort* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXuint* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXint* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXfloat* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXdouble* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXlong* p,FXuval n){ FXStream::save(p,n); return *this; } FXFileStream& save(const FXulong* p,FXuval n){ FXStream::save(p,n); return *this; } /// Load single items from stream FXFileStream& operator>>(FXuchar& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXchar& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXushort& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXshort& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXuint& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXint& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXfloat& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXdouble& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXlong& v){ FXStream::operator>>(v); return *this; } FXFileStream& operator>>(FXulong& v){ FXStream::operator>>(v); return *this; } /// Load arrays of items from stream FXFileStream& load(FXuchar* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXchar* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXushort* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXshort* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXuint* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXint* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXfloat* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXdouble* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXlong* p,FXuval n){ FXStream::load(p,n); return *this; } FXFileStream& load(FXulong* p,FXuval n){ FXStream::load(p,n); return *this; } /// Save object FXFileStream& saveObject(const FXObject* v){ FXStream::saveObject(v); return *this; } /// Load object FXFileStream& loadObject(FXObject*& v){ FXStream::loadObject(v); return *this; } /// Destructor virtual ~FXFileStream(); }; } #endif fox-1.6.49/include/FXVec2f.h0000664000175000017500000001714312130340076012333 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n 2 - E l e m e n t V e c t o r * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXVec2f.h,v 1.21 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXVEC2F_H #define FXVEC2F_H namespace FX { class FXMat3f; /// Single-precision 2-element vector class FXAPI FXVec2f { public: FXfloat x; FXfloat y; public: /// Default constructor FXVec2f(){} /// Initialize from another vector FXVec2f(const FXVec2f& v){x=v.x;y=v.y;} /// Initialize from array of floats FXVec2f(const FXfloat v[]){x=v[0];y=v[1];} /// Initialize from components FXVec2f(FXfloat xx,FXfloat yy){x=xx;y=yy;} /// Return a non-const reference to the ith element FXfloat& operator[](FXint i){return (&x)[i];} /// Return a const reference to the ith element const FXfloat& operator[](FXint i) const {return (&x)[i];} /// Assignment FXVec2f& operator=(const FXVec2f& v){x=v.x;y=v.y;return *this;} /// Assignment from array of floats FXVec2f& operator=(const FXfloat v[]){x=v[0];y=v[1];return *this;} /// Set value from another vector FXVec2f& set(const FXVec2f& v){x=v.x;y=v.y;return *this;} /// Set value from array of floats FXVec2f& set(const FXfloat v[]){x=v[0];y=v[1];return *this;} /// Set value from components FXVec2f& set(FXfloat xx,FXfloat yy){x=xx;y=yy;return *this;} /// Assigning operators FXVec2f& operator*=(FXfloat n){x*=n;y*=n;return *this;} FXVec2f& operator/=(FXfloat n){x/=n;y/=n;return *this;} FXVec2f& operator+=(const FXVec2f& v){x+=v.x;y+=v.y;return *this;} FXVec2f& operator-=(const FXVec2f& v){x-=v.x;y-=v.y;return *this;} /// Conversions operator FXfloat*(){return &x;} operator const FXfloat*() const {return &x;} /// Unary FXVec2f operator+() const { return *this; } FXVec2f operator-() const { return FXVec2f(-x,-y); } /// Vector and vector FXVec2f operator+(const FXVec2f& v) const { return FXVec2f(x+v.x,y+v.y); } FXVec2f operator-(const FXVec2f& v) const { return FXVec2f(x-v.x,y-v.y); } /// Vector and matrix FXVec2f operator*(const FXMat3f& m) const; /// Scaling friend inline FXVec2f operator*(const FXVec2f& a,FXfloat n); friend inline FXVec2f operator*(FXfloat n,const FXVec2f& a); friend inline FXVec2f operator/(const FXVec2f& a,FXfloat n); friend inline FXVec2f operator/(FXfloat n,const FXVec2f& a); /// Dot product FXfloat operator*(const FXVec2f& v) const { return x*v.x+y*v.y; } /// Test if zero bool operator!() const { return x==0.0f && y==0.0f; } /// Equality tests bool operator==(const FXVec2f& v) const { return x==v.x && y==v.y; } bool operator!=(const FXVec2f& v) const { return x!=v.x || y!=v.y; } friend inline bool operator==(const FXVec2f& a,FXfloat n); friend inline bool operator!=(const FXVec2f& a,FXfloat n); friend inline bool operator==(FXfloat n,const FXVec2f& a); friend inline bool operator!=(FXfloat n,const FXVec2f& a); /// Inequality tests bool operator<(const FXVec2f& v) const { return x(const FXVec2f& v) const { return x>v.x && y>v.y; } bool operator>=(const FXVec2f& v) const { return x>=v.x && y>=v.y; } friend inline bool operator<(const FXVec2f& a,FXfloat n); friend inline bool operator<=(const FXVec2f& a,FXfloat n); friend inline bool operator>(const FXVec2f& a,FXfloat n); friend inline bool operator>=(const FXVec2f& a,FXfloat n); friend inline bool operator<(FXfloat n,const FXVec2f& a); friend inline bool operator<=(FXfloat n,const FXVec2f& a); friend inline bool operator>(FXfloat n,const FXVec2f& a); friend inline bool operator>=(FXfloat n,const FXVec2f& a); /// Length and square of length FXfloat length2() const { return x*x+y*y; } FXfloat length() const { return sqrtf(length2()); } /// Clamp values of vector between limits FXVec2f& clamp(FXfloat lo,FXfloat hi){x=FXCLAMP(lo,x,hi);y=FXCLAMP(lo,y,hi);return *this;} /// Lowest or highest components friend inline FXVec2f lo(const FXVec2f& a,const FXVec2f& b); friend inline FXVec2f hi(const FXVec2f& a,const FXVec2f& b); /// Normalize vector friend FXAPI FXVec2f normalize(const FXVec2f& v); /// Save vector to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXVec2f& v); /// Load vector from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXVec2f& v); }; inline FXVec2f operator*(const FXVec2f& a,FXfloat n){return FXVec2f(a.x*n,a.y*n);} inline FXVec2f operator*(FXfloat n,const FXVec2f& a){return FXVec2f(n*a.x,n*a.y);} inline FXVec2f operator/(const FXVec2f& a,FXfloat n){return FXVec2f(a.x/n,a.y/n);} inline FXVec2f operator/(FXfloat n,const FXVec2f& a){return FXVec2f(n/a.x,n/a.y);} inline bool operator==(const FXVec2f& a,FXfloat n){return a.x==n && a.y==n;} inline bool operator!=(const FXVec2f& a,FXfloat n){return a.x!=n || a.y!=n;} inline bool operator==(FXfloat n,const FXVec2f& a){return n==a.x && n==a.y;} inline bool operator!=(FXfloat n,const FXVec2f& a){return n!=a.x || n!=a.y;} inline bool operator<(const FXVec2f& a,FXfloat n){return a.x(const FXVec2f& a,FXfloat n){return a.x>n && a.y>n;} inline bool operator>=(const FXVec2f& a,FXfloat n){return a.x>=n && a.y>=n;} inline bool operator<(FXfloat n,const FXVec2f& a){return n(FXfloat n,const FXVec2f& a){return n>a.x && n>a.y;} inline bool operator>=(FXfloat n,const FXVec2f& a){return n>=a.x && n>=a.y;} inline FXVec2f lo(const FXVec2f& a,const FXVec2f& b){return FXVec2f(FXMIN(a.x,b.x),FXMIN(a.y,b.y));} inline FXVec2f hi(const FXVec2f& a,const FXVec2f& b){return FXVec2f(FXMAX(a.x,b.x),FXMAX(a.y,b.y));} extern FXAPI FXVec2f normalize(const FXVec2f& v); extern FXAPI FXStream& operator<<(FXStream& store,const FXVec2f& v); extern FXAPI FXStream& operator>>(FXStream& store,FXVec2f& v); } #endif fox-1.6.49/include/FXHeader.h0000664000175000017500000003367412130340076012565 00000000000000/******************************************************************************** * * * H e a d e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXHeader.h,v 1.70.2.2 2006/11/17 16:02:31 fox Exp $ * ********************************************************************************/ #ifndef FXHEADER_H #define FXHEADER_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { class FXIcon; class FXFont; class FXHeader; /// Header style options enum { HEADER_BUTTON = 0x00008000, /// Button style can be clicked HEADER_HORIZONTAL = 0, /// Horizontal header control (default) HEADER_VERTICAL = 0x00010000, /// Vertical header control HEADER_TRACKING = 0x00020000, /// Tracks continuously while moving HEADER_RESIZE = 0x00040000, /// Allow resizing sections HEADER_NORMAL = HEADER_HORIZONTAL|FRAME_NORMAL }; /// Header item class FXAPI FXHeaderItem : public FXObject { FXDECLARE(FXHeaderItem) friend class FXHeader; protected: FXString label; // Text of item FXIcon *icon; // Icon of item void *data; // Item user data pointer FXint size; // Item size FXint pos; // Item position FXuint state; // Item state flags private: FXHeaderItem(const FXHeaderItem&); FXHeaderItem& operator=(const FXHeaderItem&); protected: FXHeaderItem(){} virtual void draw(const FXHeader* header,FXDC& dc,FXint x,FXint y,FXint w,FXint h); public: enum{ ARROW_NONE = 0, /// No arrow ARROW_UP = 1, /// Arrow pointing up ARROW_DOWN = 2, /// Arrow pointing down PRESSED = 4, /// Pressed down RIGHT = 8, /// Align on right LEFT = 16, /// Align on left CENTER_X = 0, /// Aling centered horizontally (default) TOP = 32, /// Align on top BOTTOM = 64, /// Align on bottom CENTER_Y = 0, /// Aling centered vertically (default) BEFORE = 128, /// Icon before the text AFTER = 256, /// Icon after the text ABOVE = 512, /// Icon above the text BELOW = 1024 /// Icon below the text }; public: /// Construct new item with given text, icon, size, and user-data FXHeaderItem(const FXString& text,FXIcon* ic=NULL,FXint s=0,void* ptr=NULL):label(text),icon(ic),data(ptr),size(s),pos(0),state(LEFT|BEFORE){} /// Change item's text label virtual void setText(const FXString& txt); /// Return item's text label const FXString& getText() const { return label; } /// Change item's icon virtual void setIcon(FXIcon* icn); /// Return item's icon FXIcon* getIcon() const { return icon; } /// Change item's user data void setData(void* ptr){ data=ptr; } /// Get item's user data void* getData() const { return data; } /// Change size void setSize(FXint s){ size=s; } /// Obtain current size FXint getSize() const { return size; } /// Change position void setPos(FXint p){ pos=p; } /// Obtain current position FXint getPos() const { return pos; } /// Change sort direction (FALSE, TRUE, MAYBE) void setArrowDir(FXbool dir=MAYBE); /// Return sort direction (FALSE, TRUE, MAYBE) FXbool getArrowDir() const; /// Change content justification void setJustify(FXuint justify=LEFT|CENTER_Y); /// Return content justification FXuint getJustify() const { return state&(RIGHT|LEFT|TOP|BOTTOM); } /// Change icon position void setIconPosition(FXuint mode=BEFORE); /// Return icon position FXuint getIconPosition() const { return state&(BEFORE|AFTER|ABOVE|BELOW); } /// Change state to pressed void setPressed(FXbool pressed); /// Return pressed state FXbool isPressed() const { return (state&PRESSED)!=0; } /// Return the item's content width in the header virtual FXint getWidth(const FXHeader* header) const; /// Return the item's content height in the header virtual FXint getHeight(const FXHeader* header) const; /// Create server-side resources virtual void create(); /// Detach from server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Stream serialization virtual void save(FXStream& store) const; virtual void load(FXStream& store); /// Destructor virtual ~FXHeaderItem(){} }; /// List of FXHeaderItem's typedef FXObjectListOf FXHeaderItemList; /** * Header control may be placed over a table or list to provide a resizable * captions above a number of columns. * Each caption comprises a label and an optional icon; in addition, an arrow * may be shown to indicate whether the items in that column are sorted, and * if so, whether they are sorted in increasing or decreasing order. * Each caption can be interactively resized. During the resizing, if the * HEADER_TRACKING was specified, the header control sends a SEL_CHANGED message * to its target, with the message data set to the caption number being resized, * of the type FXint. * If the HEADER_TRACKING was not specified the SEL_CHANGED message is sent at * the end of the resizing operation. * Clicking on a caption causes a message of type SEL_COMMAND to be sent to the * target, with the message data set to the caption number being clicked. * A single click on a split causes a message of type SEL_CLICKED to be sent to the * target; a typical response to this message would be to adjust the size of * the split to fit the contents displayed underneath it. * The contents may be scrolled by calling setPosition(). */ class FXAPI FXHeader : public FXFrame { FXDECLARE(FXHeader) protected: FXHeaderItemList items; // Item list FXColor textColor; // Text color FXFont *font; // Text font FXString help; // Help text FXint pos; // Scroll position FXint active; // Active button FXint activepos; // Position of active item FXint activesize; // Size of active item FXint offset; // Offset where split grabbed protected: FXHeader(); void drawSplit(FXint pos); virtual FXHeaderItem *createItem(const FXString& text,FXIcon* icon,FXint size,void* ptr); private: FXHeader(const FXHeader&); FXHeader &operator=(const FXHeader&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onTipTimer(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); public: /// Construct new header control FXHeader(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=HEADER_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return number of items FXint getNumItems() const { return items.no(); } /// Return total size of all items FXint getTotalSize() const; /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set the current position void setPosition(FXint pos); /// Return the current position FXint getPosition() const { return pos; } /** * Return item-index given coordinate offset, or -1 if coordinate * is before first item in header, or nitems if coordinate is after * last item in header. */ FXint getItemAt(FXint coord) const; /// Return item at given index FXHeaderItem *getItem(FXint index) const; /// Replace the item with a [possibly subclassed] item FXint setItem(FXint index,FXHeaderItem* item,FXbool notify=FALSE); /// Replace items text, icon, and user-data pointer FXint setItem(FXint index,const FXString& text,FXIcon *icon=NULL,FXint size=0,void* ptr=NULL,FXbool notify=FALSE); /// Fill header by appending items from array of strings FXint fillItems(const FXchar** strings,FXIcon *icon=NULL,FXint size=0,void* ptr=NULL,FXbool notify=FALSE); /// Fill header by appending items from newline separated strings FXint fillItems(const FXString& strings,FXIcon *icon=NULL,FXint size=0,void* ptr=NULL,FXbool notify=FALSE); /// Insert a new [possibly subclassed] item at the give index FXint insertItem(FXint index,FXHeaderItem* item,FXbool notify=FALSE); /// Insert item at index with given text, icon, and user-data pointer FXint insertItem(FXint index,const FXString& text,FXIcon *icon=NULL,FXint size=0,void* ptr=NULL,FXbool notify=FALSE); /// Append a [possibly subclassed] item to the list FXint appendItem(FXHeaderItem* item,FXbool notify=FALSE); /// Append new item with given text and optional icon, and user-data pointer FXint appendItem(const FXString& text,FXIcon *icon=NULL,FXint size=0,void* ptr=NULL,FXbool notify=FALSE); /// Prepend a [possibly subclassed] item to the list FXint prependItem(FXHeaderItem* item,FXbool notify=FALSE); /// Prepend new item with given text and optional icon, and user-data pointer FXint prependItem(const FXString& text,FXIcon *icon=NULL,FXint size=0,void* ptr=NULL,FXbool notify=FALSE); /// Extract item from list FXHeaderItem* extractItem(FXint index,FXbool notify=FALSE); /// Remove item at index void removeItem(FXint index,FXbool notify=FALSE); /// Remove all items void clearItems(FXbool notify=FALSE); /// Change text label for item at index void setItemText(FXint index,const FXString& text); /// Get text of item at index FXString getItemText(FXint index) const; /// Change icon of item at index void setItemIcon(FXint index,FXIcon* icon); /// Return icon of item at index FXIcon* getItemIcon(FXint index) const; /// Change size of item at index void setItemSize(FXint index,FXint size); /// Return size of item at index FXint getItemSize(FXint index) const; /// Compute offset from the left side of item at index FXint getItemOffset(FXint index) const; /// Change data of item at index void setItemData(FXint index,void* ptr); /// Return data of item at index void* getItemData(FXint index) const; /// Change sort direction (FALSE, TRUE, MAYBE) void setArrowDir(FXint index,FXbool dir=MAYBE); /// Return sort direction (FALSE, TRUE, MAYBE) FXbool getArrowDir(FXint index) const; /** * Change item justification. Horizontal justification is controlled by passing * FXHeaderItem::RIGHT, FXHeaderItem::LEFT, or FXHeaderItem::CENTER_X. * Vertical justification is controlled by FXHeaderItem::TOP, FXHeaderItem::BOTTOM, * or FXHeaderItem::CENTER_Y. * The default is a combination of FXHeaderItem::LEFT and FXHeaderItem::CENTER_Y. */ void setItemJustify(FXint index,FXuint justify); /// Return item justification FXuint getItemJustify(FXint index) const; /** * Change relative position of icon and text of item. * Passing FXHeaderItem::BEFORE or FXHeaderItem::AFTER places the icon * before or after the text, and passing FXHeaderItem::ABOVE or * FXHeaderItem::BELOW places it above or below the text, respectively. * The default of FXHeaderItem::BEFORE places the icon in front of the text. */ void setItemIconPosition(FXint index,FXuint mode); /// Return relative icon and text position FXuint getItemIconPosition(FXint index) const; /// Changed button item's pressed state void setItemPressed(FXint index,FXbool pressed=TRUE); /// Return TRUE if button item is pressed in FXbool isItemPressed(FXint index) const; /// Scroll to make given item visible void makeItemVisible(FXint index); /// Repaint header at index void updateItem(FXint index) const; /// Change text font void setFont(FXFont* fnt); /// return text font FXFont* getFont() const { return font; } /// Return text color FXColor getTextColor() const { return textColor; } /// Change text color void setTextColor(FXColor clr); /// Set header style options void setHeaderStyle(FXuint style); /// Get header style options FXuint getHeaderStyle() const; /// Set the status line help text for this header void setHelpText(const FXString& text); /// Get the status line help text for this header const FXString& getHelpText() const { return help; } /// Save header to a stream virtual void save(FXStream& store) const; /// Load header from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXHeader(); }; } #endif fox-1.6.49/include/FXCP863Codec.h0000644000175000017500000000107711637250333013073 00000000000000#ifndef FXCP863CODEC_H #define FXCP863CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP863 Codec class FXAPI FXCP863Codec : public FXTextCodec { FXDECLARE(FXCP863Codec) public: FXCP863Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP863Codec(){} }; } #endif fox-1.6.49/include/FXStream.h0000664000175000017500000002440312130340076012616 00000000000000/******************************************************************************** * * * P e r s i s t e n t S t o r a g e S t r e a m C l a s s e s * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXStream.h,v 1.42 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXSTREAM_H #define FXSTREAM_H namespace FX { /// Stream data flow direction enum FXStreamDirection { FXStreamDead=0, /// Unopened stream FXStreamSave=1, /// Saving stuff to stream FXStreamLoad=2 /// Loading stuff from stream }; /// Stream status codes enum FXStreamStatus { FXStreamOK=0, /// OK FXStreamEnd=1, /// Try read past end of stream FXStreamFull=2, /// Filled up stream buffer or disk full FXStreamNoWrite=3, /// Unable to open for write FXStreamNoRead=4, /// Unable to open for read FXStreamFormat=5, /// Stream format error FXStreamUnknown=6, /// Trying to read unknown class FXStreamAlloc=7, /// Alloc failed FXStreamFailure=8 /// General failure }; /// Stream seeking enum FXWhence { FXFromStart=0, /// Seek from start position FXFromCurrent=1, /// Seek from current position FXFromEnd=2 /// Seek from end position }; /** * A stream is a way to serialize data and objects into a byte stream. * Each item of data that is saved or loaded from the stream may be byte-swapped, * thus allowing little-endian machines to read data produced on big endian ones * and vice-versa. * Data is serialized exactly as-is. There are no tags or other markers * inserted into the stream; thus, the stream may be used to save or load arbitrary * binary data. * Objects derived from FXObjects may be serialized also; whenever a reference to an * object is serialized, a table is consulted to determine if the same object has * been encountered previously; if not, the object is added to the table and then * its contents are serialized. If the object has been encountered before, only a * reference to the object is serialized. * When loading back a serialized object, new instances are constructed using * the default constructor, and subsequently the object's contents are loaded. * A special container object may be passed in which is placed in the table * as if it had been encountered before; this will cause only references to this * object to be saved. The container object is typically the top-level document * object which manages all objects contained by it. Additional objects may be * added using addObject(); these will not be actually saved or loaded. */ class FXAPI FXStream { protected: FXHash hash; // Hash table const FXObject *parent; // Parent object FXuchar *begptr; // Begin of buffer FXuchar *endptr; // End of buffer FXuchar *wrptr; // Write pointer FXuchar *rdptr; // Read pointer FXlong pos; // Position FXStreamDirection dir; // Direction of current transfer FXStreamStatus code; // Status code FXuint seq; // Sequence number bool owns; // Stream owns buffer bool swap; // Swap bytes on readin protected: /** * Write at least count bytes from the buffer; * returns number of bytes available to be written. */ virtual FXuval writeBuffer(FXuval count); /** * Read at least count bytes into the buffer; * returns number of bytes available to be read. */ virtual FXuval readBuffer(FXuval count); public: /** * Construct stream with given container object. The container object * is an object that will itself not be saved to or loaded from the stream, * but which may be referenced by other objects. These references will be * properly saved and restored. */ FXStream(const FXObject* cont=NULL); /** * Open stream for reading (FXStreamLoad) or for writing (FXStreamSave). * An initial buffer size may be given, which must be at least 16 bytes. * If data is not NULL, it is expected to point to an external data buffer * of length size; otherwise stream will use an internally managed buffer. */ bool open(FXStreamDirection save_or_load,FXuval size=8192,FXuchar* data=NULL); /// Flush buffer virtual bool flush(); /// Close; return true if OK virtual bool close(); /// Get available buffer space FXuval getSpace() const; /// Set available buffer space void setSpace(FXuval sp); /// Get status code FXStreamStatus status() const { return code; } /// Return true if at end of file or error bool eof() const { return code!=FXStreamOK; } /// Set status code void setError(FXStreamStatus err); /// Obtain stream direction FXStreamDirection direction() const { return dir; } /// Get parent object const FXObject* container() const { return parent; } /// Get position FXlong position() const { return pos; } /// Move to position relative to head, tail, or current location virtual bool position(FXlong offset,FXWhence whence=FXFromStart); /** * Change swap bytes flag. */ void swapBytes(bool s){ swap=s; } /** * Get state of the swap bytes flag. */ bool swapBytes() const { return swap; } /** * Set stream to big endian mode if true. Byte swapping will * be enabled if the machine native byte order is not equal to * the desired byte order. */ void setBigEndian(bool big); /** * Return true if big endian mode. */ bool isBigEndian() const; /// Save single items to stream FXStream& operator<<(const FXuchar& v); FXStream& operator<<(const FXchar& v){ return *this << reinterpret_cast(v); } FXStream& operator<<(const FXushort& v); FXStream& operator<<(const FXshort& v){ return *this << reinterpret_cast(v); } FXStream& operator<<(const FXuint& v); FXStream& operator<<(const FXint& v){ return *this << reinterpret_cast(v); } FXStream& operator<<(const FXfloat& v){ return *this << reinterpret_cast(v); } FXStream& operator<<(const FXdouble& v); FXStream& operator<<(const FXlong& v){ return *this << reinterpret_cast(v); } FXStream& operator<<(const FXulong& v){ return *this << reinterpret_cast(v); } /// Save arrays of items to stream FXStream& save(const FXuchar* p,FXuval n); FXStream& save(const FXchar* p,FXuval n){ return save(reinterpret_cast(p),n); } FXStream& save(const FXushort* p,FXuval n); FXStream& save(const FXshort* p,FXuval n){ return save(reinterpret_cast(p),n); } FXStream& save(const FXuint* p,FXuval n); FXStream& save(const FXint* p,FXuval n){ return save(reinterpret_cast(p),n); } FXStream& save(const FXfloat* p,FXuval n){ return save(reinterpret_cast(p),n); } FXStream& save(const FXdouble* p,FXuval n); FXStream& save(const FXlong* p,FXuval n){ return save(reinterpret_cast(p),n); } FXStream& save(const FXulong* p,FXuval n){ return save(reinterpret_cast(p),n); } /// Load single items from stream FXStream& operator>>(FXuchar& v); FXStream& operator>>(FXchar& v){ return *this >> reinterpret_cast(v); } FXStream& operator>>(FXushort& v); FXStream& operator>>(FXshort& v){ return *this >> reinterpret_cast(v); } FXStream& operator>>(FXuint& v); FXStream& operator>>(FXint& v){ return *this >> reinterpret_cast(v); } FXStream& operator>>(FXfloat& v){ return *this >> reinterpret_cast(v); } FXStream& operator>>(FXdouble& v); FXStream& operator>>(FXlong& v){ return *this >> reinterpret_cast(v); } FXStream& operator>>(FXulong& v){ return *this >> reinterpret_cast(v); } /// Load arrays of items from stream FXStream& load(FXuchar* p,FXuval n); FXStream& load(FXchar* p,FXuval n){ return load(reinterpret_cast(p),n); } FXStream& load(FXushort* p,FXuval n); FXStream& load(FXshort* p,FXuval n){ return load(reinterpret_cast(p),n); } FXStream& load(FXuint* p,FXuval n); FXStream& load(FXint* p,FXuval n){ return load(reinterpret_cast(p),n); } FXStream& load(FXfloat* p,FXuval n){ return load(reinterpret_cast(p),n); } FXStream& load(FXdouble* p,FXuval n); FXStream& load(FXlong* p,FXuval n){ return load(reinterpret_cast(p),n); } FXStream& load(FXulong* p,FXuval n){ return load(reinterpret_cast(p),n); } /// Save object FXStream& saveObject(const FXObject* v); /// Load object FXStream& loadObject(FXObject*& v); /// Add object without saving or loading FXStream& addObject(const FXObject* v); /// Destructor virtual ~FXStream(); }; } #endif fox-1.6.49/include/FXImageFrame.h0000664000175000017500000000647312130340076013367 00000000000000/******************************************************************************** * * * I m a g e F r a m e W i d g e t * * * ********************************************************************************* * Copyright (C) 2001,2006 by H. J. Daniel III. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXImageFrame.h,v 1.8 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXIMAGEFRAME_H #define FXIMAGEFRAME_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /** * The image frame is a simple frame widget displaying * an image; the image is not owned by the image frame so * it must be explicitly deleted elsewhere. */ class FXAPI FXImageFrame : public FXFrame { FXDECLARE(FXImageFrame) protected: FXImage* image; // The image being displayed protected: FXImageFrame(); private: FXImageFrame(const FXImageFrame&); FXImageFrame &operator=(const FXImageFrame&); public: long onPaint(FXObject*,FXSelector,void* ptr); public: /// Construct image frame and pass it an image FXImageFrame(FXComposite* p,FXImage *img,FXuint opts=FRAME_SUNKEN|FRAME_THICK,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0); /// Create window virtual void create(); /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Change the image being displayed void setImage(FXImage* img); /// Return the current image FXImage* getImage() const { return image; } /// Set the current justification mode. void setJustify(FXuint mode); /// Get the current justification mode. FXuint getJustify() const; /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy the widget, but do not destroy the image virtual ~FXImageFrame(); }; } #endif fox-1.6.49/include/FXRGBIcon.h0000664000175000017500000000622212130340076012605 00000000000000/******************************************************************************** * * * I R I S R G B I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRGBIcon.h,v 1.14 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXRGBICON_H #define FXRGBICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// IRIS RGB icon class FXAPI FXRGBIcon : public FXIcon { FXDECLARE(FXRGBIcon) protected: FXRGBIcon(){} private: FXRGBIcon(const FXRGBIcon&); FXRGBIcon &operator=(const FXRGBIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in IRIS-RGB format FXRGBIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in IRIS-RGB format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in IRIS-RGB format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXRGBIcon(); }; /** * Check if stream contains a RGB, return TRUE if so. */ extern FXAPI bool fxcheckRGB(FXStream& store); /** * Load an RGB (SGI IRIS RGB) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadRGB(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an RGB (SGI IRIS RGB) file to a stream. */ extern FXAPI bool fxsaveRGB(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXMat3f.h0000664000175000017500000001217312130340076012336 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n 3 x 3 M a t r i x * * * ********************************************************************************* * Copyright (C) 2003,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMat3f.h,v 1.13 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXMAT3F_H #define FXMAT3F_H namespace FX { class FXQuatf; /// Single-precision 3x3 matrix class FXAPI FXMat3f { protected: FXVec3f m[3]; public: /// Default constructor FXMat3f(){} /// Initialize matrix from another matrix FXMat3f(const FXMat3f& other); /// Initialize matrix from scalar FXMat3f(FXfloat w); /// Initialize matrix from components FXMat3f(FXfloat a00,FXfloat a01,FXfloat a02, FXfloat a10,FXfloat a11,FXfloat a12, FXfloat a20,FXfloat a21,FXfloat a22); /// Initialize matrix from three vectors FXMat3f(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c); /// Initialize matrix from quaternion FXMat3f(const FXQuatf& quat); /// Assignment FXMat3f& operator=(const FXMat3f& other); FXMat3f& operator=(FXfloat w); /// Set value from another matrix FXMat3f& set(const FXMat3f& other); /// Set value from scalar FXMat3f& set(FXfloat w); /// Set value from components FXMat3f& set(FXfloat a00,FXfloat a01,FXfloat a02, FXfloat a10,FXfloat a11,FXfloat a12, FXfloat a20,FXfloat a21,FXfloat a22); /// Set value from three vectors FXMat3f& set(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c); /// Set value from quaternion FXMat3f& set(const FXQuatf& quat); /// Assignment operators FXMat3f& operator+=(const FXMat3f& w); FXMat3f& operator-=(const FXMat3f& w); FXMat3f& operator*=(FXfloat w); FXMat3f& operator*=(const FXMat3f& w); FXMat3f& operator/=(FXfloat w); /// Indexing FXVec3f& operator[](FXint i){return m[i];} const FXVec3f& operator[](FXint i) const {return m[i];} /// Conversion operator FXfloat*(){return m[0];} operator const FXfloat*() const {return m[0];} /// Unary minus FXMat3f operator-() const; /// Matrix and matrix FXMat3f operator+(const FXMat3f& w) const; FXMat3f operator-(const FXMat3f& w) const; FXMat3f operator*(const FXMat3f& w) const; /// Multiply matrix and vector FXVec3f operator*(const FXVec3f& v) const; FXVec2f operator*(const FXVec2f& v) const; /// Matrix and scalar friend FXAPI FXMat3f operator*(FXfloat x,const FXMat3f& a); friend FXAPI FXMat3f operator*(const FXMat3f& a,FXfloat x); friend FXAPI FXMat3f operator/(const FXMat3f& a,FXfloat x); friend FXAPI FXMat3f operator/(FXfloat x,const FXMat3f& a); /// Set identity matrix FXMat3f& eye(); /// Multiply by rotation of phi FXMat3f& rot(FXfloat c,FXfloat s); FXMat3f& rot(FXfloat phi); /// Multiply by translation FXMat3f& trans(FXfloat tx,FXfloat ty); /// Multiply by scaling FXMat3f& scale(FXfloat sx,FXfloat sy); FXMat3f& scale(FXfloat s); /// Determinant FXfloat det() const; /// Transpose FXMat3f transpose() const; /// Invert FXMat3f invert() const; /// Save to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXMat3f& m); /// Load from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXMat3f& m); }; extern FXAPI FXMat3f operator*(FXfloat x,const FXMat3f& a); extern FXAPI FXMat3f operator*(const FXMat3f& a,FXfloat x); extern FXAPI FXMat3f operator/(const FXMat3f& a,FXfloat x); extern FXAPI FXMat3f operator/(FXfloat x,const FXMat3f& a); extern FXAPI FXStream& operator<<(FXStream& store,const FXMat3f& m); extern FXAPI FXStream& operator>>(FXStream& store,FXMat3f& m); } #endif fox-1.6.49/include/FXRulerView.h0000664000175000017500000002103112130340076013301 00000000000000/******************************************************************************** * * * R u l e r V i e w W i d g e t * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRulerView.h,v 1.15 2006/01/28 20:29:30 fox Exp $ * ********************************************************************************/ #ifndef FXRULERVIEW_H #define FXRULERVIEW_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { class FXRuler; class FXFrame; /** * The Ruler View provides viewing of a document with rulers. * It is intended to be subclassed in order to draw actual contents * and provide editing behavior for the document. * The ruler view itself simply manages the geometry of the document * being edited, and coordinates the movement of the ruler displays * as the document is being scrolled. */ class FXRulerView : public FXScrollArea { FXDECLARE(FXRulerView) protected: FXRuler *hruler; // Horizontal ruler FXRuler *vruler; // Vertical ruler FXFrame *filler; // Corner thingy FXColor docColor; // Color of document FXString tip; // Tooltip text FXString help; // Help text protected: FXRulerView(); virtual void moveContents(FXint x,FXint y); virtual void drawBackground(FXDCWindow& dc); virtual void drawContents(FXDCWindow& dc); private: FXRulerView(const FXRulerView&); FXRulerView &operator=(const FXRulerView&); public: long onPaint(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onDocChanged(FXObject*,FXSelector,void*); public: enum { ID_HRULER=FXScrollArea::ID_LAST, ID_VRULER, ID_LAST }; public: /// Construct a rulerview window FXRulerView(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return viewport height virtual FXint getViewportHeight(); /// Return viewport width virtual FXint getViewportWidth(); /// Return content width virtual FXint getContentWidth(); /// Return content height virtual FXint getContentHeight(); /// Perform layout virtual void layout(); /// Return a pointer to the horizontal ruler FXRuler* horizontalRuler() const { return hruler; } /// Return a pointer to the vertical ruler FXRuler* verticalRuler() const { return vruler; } /// Get document position X FXint getDocumentX() const; /// Get document position Y FXint getDocumentY() const; /// Set document width void setDocumentWidth(FXint w,FXbool notify=FALSE); /// Get document width FXint getDocumentWidth() const; /// Set document height void setDocumentHeight(FXint h,FXbool notify=FALSE); /// Get document height FXint getDocumentHeight() const; /// Set the current document color void setDocumentColor(FXColor clr); /// Get the current document color FXColor getDocumentColor() const { return docColor; } /// Change edge spacing around document void setHEdgeSpacing(FXint es,FXbool notify=FALSE); void setVEdgeSpacing(FXint es,FXbool notify=FALSE); /// Return edge spacing FXint getHEdgeSpacing() const; FXint getVEdgeSpacing() const; /// Change horizontal lower margin void setHMarginLower(FXint marg,FXbool notify=FALSE); /// Change horizontal upper margin void setHMarginUpper(FXint marg,FXbool notify=FALSE); /// Get horizontal lower margin FXint getHMarginLower() const; /// Get horizontal upper margin FXint getHMarginUpper() const; /// Change vertical lower margin void setVMarginLower(FXint marg,FXbool notify=FALSE); /// Change vertical upper margin void setVMarginUpper(FXint marg,FXbool notify=FALSE); /// Get vertical lower margin FXint getVMarginLower() const; /// Get vertical upper margin FXint getVMarginUpper() const; /// Set horizontal alignment; the default is RULER_ALIGN_NORMAL void setHAlignment(FXuint align,FXbool notify=FALSE); /// Return horizontal alignment FXuint getHAlignment() const; /// Set vertical alignment; the default is RULER_ALIGN_NORMAL void setVAlignment(FXuint align,FXbool notify=FALSE); /// Return vertical alignment FXuint getVAlignment() const; /// Set X arrow position, relative to document position void setArrowPosX(FXint x); /// Set X arrow position, relative to document position void setArrowPosY(FXint y); /// Get X arrow position in document FXint getArrowPosX() const; /// Get Y arrow position in document FXint getArrowPosY() const; /// Set the horizontal ruler font void setHRulerFont(FXFont *fnt,FXbool notify=FALSE); /// Get the horizontal ruler font FXFont* getHRulerFont() const; /// Set the vertical ruler font void setVRulerFont(FXFont *fnt,FXbool notify=FALSE); /// Get the vertical ruler font FXFont* getVRulerFont() const; /// Change document number placement void setHNumberTicks(FXint ticks,FXbool notify=FALSE); void setVNumberTicks(FXint ticks,FXbool notify=FALSE); /// Return document number placement FXint getHNumberTicks() const; FXint getVNumberTicks() const; /// Change document major ticks void setHMajorTicks(FXint ticks,FXbool notify=FALSE); void setVMajorTicks(FXint ticks,FXbool notify=FALSE); /// Return document major ticks FXint getHMajorTicks() const; FXint getVMajorTicks() const; /// Change document medium ticks void setHMediumTicks(FXint ticks,FXbool notify=FALSE); void setVMediumTicks(FXint ticks,FXbool notify=FALSE); /// Return document medium ticks FXint getHMediumTicks() const; FXint getVMediumTicks() const; /// Change document tiny ticks void setHTinyTicks(FXint ticks,FXbool notify=FALSE); void setVTinyTicks(FXint ticks,FXbool notify=FALSE); /// Return document tiny ticks FXint getHTinyTicks() const; FXint getVTinyTicks() const; /// Change pixel per tick spacing void setHPixelPerTick(FXdouble space,FXbool notify=FALSE); void setVPixelPerTick(FXdouble space,FXbool notify=FALSE); /// Return pixel per tick spacing FXdouble getHPixelPerTick() const; FXdouble getVPixelPerTick() const; /// Set ruler style void setHRulerStyle(FXuint style); void setVRulerStyle(FXuint style); /// Get ruler style FXuint getHRulerStyle() const; FXuint getVRulerStyle() const; /// Set the status line help text for the ruler view void setHelpText(const FXString& text){ help=text; } /// Get the status line help text for the ruler view const FXString& getHelpText() const { return help; } /// Set the tool tip message for the ruler view void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for the ruler view const FXString& getTipText() const { return tip; } /// Save list to a stream virtual void save(FXStream& store) const; /// Load list from a stream virtual void load(FXStream& store); /// Destroy virtual ~FXRulerView(); }; } #endif fox-1.6.49/include/FX7Segment.h0000664000175000017500000001261412130340076013055 00000000000000/******************************************************************************** * * * 7 - S e g m e n t D i s p l a y W i d g e t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FX7Segment.h,v 1.12 2006/03/01 02:13:21 fox Exp $ * ********************************************************************************/ #ifndef FX7SEGMENT_H #define FX7SEGMENT_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// 7 Segment styles enum { SEVENSEGMENT_NORMAL = 0, /// Draw segments normally SEVENSEGMENT_SHADOW = 0x00080000 /// Draw shadow under the segments }; /** * Seven-segment (eg LCD/watch style) widget, useful for making * indicators and timers. Besides numbers, the seven-segment * display widget can also display some letters and punctuations. */ class FXAPI FX7Segment : public FXFrame { FXDECLARE(FX7Segment) protected: FXString label; // Text being shown FXColor textColor; // Text color FXint thickness; // Segment thickness FXint cellwidth; // Width of cell FXint cellheight; // height of cell FXString tip; // Tooltip FXString help; // Help message protected: FX7Segment(); private: FX7Segment(const FX7Segment&); FX7Segment &operator=(const FX7Segment&); void drawCells(FXDCWindow &dc,FXint x,FXint y,FXint cw,FXint ch); void drawSegments(FXDCWindow &dc,FXint x,FXint y,FXint w,FXint h,FXuint segments); public: long onPaint(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdSetRealValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdGetRealValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Create a seven segment display FX7Segment(FXComposite* p,const FXString& text,FXuint opts=SEVENSEGMENT_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set the text for this label void setText(const FXString& text); /// Get the text for this label FXString getText() const { return label; } /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const { return textColor; } /// Get/set cell width void setCellWidth(FXint w); FXint getCellWidth() const { return cellwidth; } /// Get/set cell height void setCellHeight(FXint h); FXint getCellHeight() const { return cellheight; } /// Get/set segment thickness void setThickness(FXint t); FXint getThickness() const { return thickness; } /// Change 7 segment style void set7SegmentStyle(FXuint style); /// Get current 7 segment style FXuint get7SegmentStyle() const; /// Set the current text-justification mode. void setJustify(FXuint mode); /// Get the current text-justification mode. FXuint getJustify() const; /// Set the status line help text void setHelpText(const FXString& text){ help=text; } /// Get the status line help text const FXString& getHelpText() const { return help; } /// Set the tool tip message void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message const FXString& getTipText() const { return tip; } /// Save to a stream virtual void save(FXStream &store) const; /// Load from a stream virtual void load(FXStream &store); }; } #endif fox-1.6.49/include/FXGLCanvas.h0000664000175000017500000001003312130340076013013 00000000000000/******************************************************************************** * * * G L C a n v a s W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLCanvas.h,v 1.33 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXGLCANVAS_H #define FXGLCANVAS_H #ifndef FXCANVAS_H #include "FXCanvas.h" #endif namespace FX { class FXGLVisual; /// GLCanvas, an area drawn by another object class FXAPI FXGLCanvas : public FXCanvas { FXDECLARE(FXGLCanvas) private: FXGLCanvas *sgnext; // Share group next in share list FXGLCanvas *sgprev; // Share group previous in share list protected: void *ctx; // GL Context protected: FXGLCanvas(); private: FXGLCanvas(const FXGLCanvas&); FXGLCanvas &operator=(const FXGLCanvas&); #ifdef WIN32 virtual const char* GetClass() const; #endif public: /** * Construct an OpenGL-capable canvas, with its own private display list. */ FXGLCanvas(FXComposite* p,FXGLVisual *vis,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /** * Construct an OpenGL-capable canvas, sharing display * list with another GL canvas. This canvas becomes a member * of a display list share group. All members of the display * list share group have to have the same visual. */ FXGLCanvas(FXComposite* p,FXGLVisual *vis,FXGLCanvas* sharegroup,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return TRUE if it is sharing display lists FXbool isShared() const; /// Create all of the server-side resources for this window virtual void create(); /// Detach the server-side resources for this window virtual void detach(); /// Destroy the server-side resources for this window virtual void destroy(); /// Make OpenGL context current prior to performing OpenGL commands virtual FXbool makeCurrent(); /// Make OpenGL context non current virtual FXbool makeNonCurrent(); /// Return TRUE if this window's context is current virtual FXbool isCurrent() const; /// Return current context, if any static void* getCurrentContext(); /// Get GL context handle void* getContext() const { return ctx; } /// Swap front and back buffer virtual void swapBuffers(); /// Save object to stream virtual void save(FXStream& store) const; /// Load object from stream virtual void load(FXStream& store); /// Destructor virtual ~FXGLCanvas(); }; } #endif fox-1.6.49/include/FXBMPIcon.h0000664000175000017500000000705012130340076012611 00000000000000/******************************************************************************** * * * B M P I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXBMPIcon.h,v 1.22 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXBMPICON_H #define FXBMPICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /** * The BMP Icon class is a convenience class for working with icons in the * Microsoft Bitmap (.bmp) graphics file format. This makes it possible to * use resources created with Windows development tools inside FOX without * need for graphics file format translators. The bitmap loaded handles * 1, 4, and 8 bit paletted bitmaps, 16 and 24 bit RGB bitmaps, and * 32 bit RGBA bitmaps. */ class FXAPI FXBMPIcon : public FXIcon { FXDECLARE(FXBMPIcon) protected: FXBMPIcon(){} private: FXBMPIcon(const FXBMPIcon&); FXBMPIcon &operator=(const FXBMPIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in Microsoft BMP format FXBMPIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in Microsoft bitmap format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in Microsoft bitmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXBMPIcon(); }; /** * Check if stream contains a bitmap, return TRUE if so. */ extern FXAPI bool fxcheckBMP(FXStream& store); /** * Load an BMP (Microsoft Bitmap) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadBMP(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an BMP (Microsoft Bitmap) file to a stream. */ extern FXAPI bool fxsaveBMP(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXXPMIcon.h0000664000175000017500000000670712130340076012647 00000000000000/******************************************************************************** * * * X P M I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXXPMIcon.h,v 1.22 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXXPMICON_H #define FXXPMICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// X Pixmap icon class FXAPI FXXPMIcon : public FXIcon { FXDECLARE(FXXPMIcon) protected: FXXPMIcon(){} private: FXXPMIcon(const FXXPMIcon&); FXXPMIcon &operator=(const FXXPMIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from compiled-in X Pixmap format FXXPMIcon(FXApp* a,const FXchar **pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in X Pixmap format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in X Pixmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXXPMIcon(); }; #ifndef FXLOADXPM #define FXLOADXPM /** * Check if stream contains a XPM, return TRUE if so. */ extern FXAPI bool fxcheckXPM(FXStream& store); /** * Load an XPM (X Pixmap) from array of strings. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadXPM(const FXchar **pix,FXColor*& data,FXint& width,FXint& height); /** * Load an XPM (X Pixmap) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadXPM(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an XPM (X Pixmap) file to a stream. */ extern FXAPI bool fxsaveXPM(FXStream& store,const FXColor *data,FXint width,FXint height,bool fast=true); #endif } #endif fox-1.6.49/include/FXArrowButton.h0000664000175000017500000001461312130340076013653 00000000000000/******************************************************************************** * * * A r r o w B u t t o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXArrowButton.h,v 1.39 2006/01/22 17:57:58 fox Exp $ * ********************************************************************************/ #ifndef FXARROWBUTTON_H #define FXARROWBUTTON_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { // Arrow style options enum { ARROW_NONE = 0, // No arrow ARROW_UP = 0x00080000, // Arrow points up ARROW_DOWN = 0x00100000, // Arrow points down ARROW_LEFT = 0x00200000, // Arrow points left ARROW_RIGHT = 0x00400000, // Arrow points right ARROW_AUTO = 0x00800000, // Automatically fire when hovering mouse over button ARROW_REPEAT = 0x01000000, // Button repeats if held down ARROW_AUTOGRAY = 0x02000000, // Automatically gray out when not updated ARROW_AUTOHIDE = 0x04000000, // Automatically hide when not updated ARROW_TOOLBAR = 0x08000000, // Button is toolbar-style ARROW_NORMAL = FRAME_RAISED|FRAME_THICK|ARROW_UP }; /** * Button with an arrow; the arrow can point in any direction. * When clicked, the arrow button sends a SEL_COMMAND to its target. * When ARROW_REPEAT is passed, the arrow button sends a SEL_COMMAND * repeatedly while the button is pressed. * The option ARROW_AUTO together with ARROW_REPEAT makes the arrow * button work in repeat mode simply by hovering the cursor over it. */ class FXAPI FXArrowButton : public FXFrame { FXDECLARE(FXArrowButton) protected: FXColor arrowColor; // Arrow color FXint arrowSize; // Arrow size FXString tip; // Tooltip value FXString help; // Help value FXbool state; // State of button FXbool fired; // Timer has fired protected: FXArrowButton(); private: FXArrowButton(const FXArrowButton&); FXArrowButton &operator=(const FXArrowButton&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onRepeat(FXObject*,FXSelector,void*); long onAuto(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: enum { ID_REPEAT=FXFrame::ID_LAST, ID_AUTO, ID_LAST }; public: /// Construct arrow button FXArrowButton(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=ARROW_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Enable the button virtual void enable(); /// Disable the button virtual void disable(); /// Returns true because a button can receive focus virtual bool canFocus() const; /// Set the button state (where TRUE means the button is down) void setState(FXbool s); /// Get the button state (where TRUE means the button is down) FXbool getState() const { return state; } /// Set status line help text for this arrow button void setHelpText(const FXString& text){ help=text; } /// Get status line help text for this arrow button const FXString& getHelpText() const { return help; } /// Set tool tip message for this arrow button void setTipText(const FXString& text){ tip=text; } /// Get tool tip message for this arrow button const FXString& getTipText() const { return tip; } /// Set the arrow style flags void setArrowStyle(FXuint style); /// Get the arrow style flags FXuint getArrowStyle() const; /// Set the default arrow size void setArrowSize(FXint size); /// Get the default arrow size FXint getArrowSize() const { return arrowSize; } /// Set the current justification mode. void setJustify(FXuint mode); /// Get the current justification mode. FXuint getJustify() const; /// Get the fill color for the arrow FXColor getArrowColor() const { return arrowColor; } /// Set the fill color for the arrow void setArrowColor(FXColor clr); /// Save label to a stream virtual void save(FXStream& store) const; /// Load label from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXArrowButton(); }; } #endif fox-1.6.49/include/FXMat4d.h0000664000175000017500000001405012130340076012331 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n 4 x 4 M a t r i x * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMat4d.h,v 1.8 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXMAT4D_H #define FXMAT4D_H namespace FX { /// Double-precision 4x4 matrix class FXAPI FXMat4d { protected: FXVec4d m[4]; public: /// Constructors FXMat4d(){} FXMat4d(FXdouble w); FXMat4d(FXdouble a00,FXdouble a01,FXdouble a02,FXdouble a03, FXdouble a10,FXdouble a11,FXdouble a12,FXdouble a13, FXdouble a20,FXdouble a21,FXdouble a22,FXdouble a23, FXdouble a30,FXdouble a31,FXdouble a32,FXdouble a33); FXMat4d(const FXVec4d& a,const FXVec4d& b,const FXVec4d& c,const FXVec4d& d); FXMat4d(const FXMat4d& other); /// Assignment FXMat4d& operator=(const FXMat4d& other); FXMat4d& operator=(FXdouble w); /// Set value from another matrix FXMat4d& set(const FXMat4d& other); /// Set value from scalar FXMat4d& set(FXdouble w); /// Set value from components FXMat4d& set(FXdouble a00,FXdouble a01,FXdouble a02,FXdouble a03, FXdouble a10,FXdouble a11,FXdouble a12,FXdouble a13, FXdouble a20,FXdouble a21,FXdouble a22,FXdouble a23, FXdouble a30,FXdouble a31,FXdouble a32,FXdouble a33); /// Set value from four vectors FXMat4d& set(const FXVec4d& a,const FXVec4d& b,const FXVec4d& c,const FXVec4d& d); /// Assignment operators FXMat4d& operator+=(const FXMat4d& w); FXMat4d& operator-=(const FXMat4d& w); FXMat4d& operator*=(FXdouble w); FXMat4d& operator*=(const FXMat4d& w); FXMat4d& operator/=(FXdouble w); /// Indexing FXVec4d& operator[](FXint i){return m[i];} const FXVec4d& operator[](FXint i) const {return m[i];} /// Conversion operator FXdouble*(){return m[0];} operator const FXdouble*() const {return m[0];} /// Unary minus FXMat4d operator-() const; /// Matrix and matrix FXMat4d operator+(const FXMat4d& w) const; FXMat4d operator-(const FXMat4d& w) const; FXMat4d operator*(const FXMat4d& w) const; /// Matrix and scalar friend FXAPI FXMat4d operator*(FXdouble x,const FXMat4d& a); friend FXAPI FXMat4d operator*(const FXMat4d& a,FXdouble x); friend FXAPI FXMat4d operator/(const FXMat4d& a,FXdouble x); friend FXAPI FXMat4d operator/(FXdouble x,const FXMat4d& a); /// Multiply matrix and vector FXVec4d operator*(const FXVec4d& v) const; FXVec3d operator*(const FXVec3d& v) const; /// Set identity matrix FXMat4d& eye(); /// Orthographic projection FXMat4d& ortho(FXdouble left,FXdouble right,FXdouble bottom,FXdouble top,FXdouble hither,FXdouble yon); /// Perspective projection FXMat4d& frustum(FXdouble left,FXdouble right,FXdouble bottom,FXdouble top,FXdouble hither,FXdouble yon); /// Multiply by left-hand matrix FXMat4d& left(); /// Multiply by rotation about unit-quaternion FXMat4d& rot(const FXQuatd& q); /// Multiply by rotation c,s about axis FXMat4d& rot(const FXVec3d& v,FXdouble c,FXdouble s); /// Multiply by rotation of phi about axis FXMat4d& rot(const FXVec3d& v,FXdouble phi); /// Multiply by x-rotation FXMat4d& xrot(FXdouble c,FXdouble s); FXMat4d& xrot(FXdouble phi); /// Multiply by y-rotation FXMat4d& yrot(FXdouble c,FXdouble s); FXMat4d& yrot(FXdouble phi); /// Multiply by z-rotation FXMat4d& zrot(FXdouble c,FXdouble s); FXMat4d& zrot(FXdouble phi); /// Look at FXMat4d& look(const FXVec3d& eye,const FXVec3d& cntr,const FXVec3d& vup); /// Multiply by translation FXMat4d& trans(FXdouble tx,FXdouble ty,FXdouble tz); FXMat4d& trans(const FXVec3d& v); /// Multiply by scaling FXMat4d& scale(FXdouble sx,FXdouble sy,FXdouble sz); FXMat4d& scale(FXdouble s); FXMat4d& scale(const FXVec3d& v); /// Determinant FXdouble det() const; /// Transpose FXMat4d transpose() const; /// Invert FXMat4d invert() const; /// Save to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXMat4d& m); /// Load from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXMat4d& m); }; extern FXAPI FXMat4d operator*(FXdouble x,const FXMat4d& a); extern FXAPI FXMat4d operator*(const FXMat4d& a,FXdouble x); extern FXAPI FXMat4d operator/(const FXMat4d& a,FXdouble x); extern FXAPI FXMat4d operator/(FXdouble x,const FXMat4d& a); extern FXAPI FXStream& operator<<(FXStream& store,const FXMat4d& m); extern FXAPI FXStream& operator>>(FXStream& store,FXMat4d& m); } #endif fox-1.6.49/include/FXTIFIcon.h0000664000175000017500000000665012130340076012622 00000000000000/******************************************************************************** * * * T I F F I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 Eric Gillet. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTIFIcon.h,v 1.22 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXTIFICON_H #define FXTIFICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// TIFF Icon class class FXAPI FXTIFIcon : public FXIcon { FXDECLARE(FXTIFIcon) protected: FXushort codec; protected: FXTIFIcon(){} private: FXTIFIcon(const FXTIFIcon&); FXTIFIcon &operator=(const FXTIFIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an icon from memory stream formatted in TIFF format FXTIFIcon(FXApp *a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// True if format is supported static const bool supported; /// Set codec to save with void setCodec(FXuint c){ codec=c; } /// Get codec setting FXuint getCodec() const { return codec; } /// Save pixels into stream in TIFF format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in TIFF format virtual bool loadPixels(FXStream& store); /// Destroy virtual ~FXTIFIcon(); }; /** * Check if stream contains a TIFF, return TRUE if so. */ extern FXAPI bool fxcheckTIF(FXStream& store); /** * Load an TIFF (Tagged Image File Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadTIF(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXushort& codec); /** * Save an TIFF (Tagged Image File Format) file to a stream. */ extern FXAPI bool fxsaveTIF(FXStream& store,const FXColor* data,FXint width,FXint height,FXushort codec); } #endif fox-1.6.49/include/FX88597Codec.h0000644000175000017500000000110411637250333013023 00000000000000#ifndef FX88597CODEC_H #define FX88597CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-7 Codec class FXAPI FX88597Codec : public FXTextCodec { FXDECLARE(FX88597Codec) public: FX88597Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88597Codec(){} }; } #endif fox-1.6.49/include/FXTabItem.h0000664000175000017500000001006512130340076012707 00000000000000/******************************************************************************** * * * T a b I t e m W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTabItem.h,v 1.10 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXTABITEM_H #define FXTABITEM_H #ifndef FXLABEL_H #include "FXLabel.h" #endif namespace FX { /// Tab Item orientations which affect border enum { TAB_TOP = 0, // Top side tabs TAB_LEFT = 0x00800000, // Left side tabs TAB_RIGHT = 0x01000000, // Right side tabs TAB_BOTTOM = 0x01800000, // Bottom side tabs TAB_TOP_NORMAL = JUSTIFY_NORMAL|ICON_BEFORE_TEXT|TAB_TOP|FRAME_RAISED|FRAME_THICK, TAB_BOTTOM_NORMAL= JUSTIFY_NORMAL|ICON_BEFORE_TEXT|TAB_BOTTOM|FRAME_RAISED|FRAME_THICK, TAB_LEFT_NORMAL = JUSTIFY_LEFT|JUSTIFY_CENTER_Y|ICON_BEFORE_TEXT|TAB_LEFT|FRAME_RAISED|FRAME_THICK, TAB_RIGHT_NORMAL = JUSTIFY_LEFT|JUSTIFY_CENTER_Y|ICON_BEFORE_TEXT|TAB_RIGHT|FRAME_RAISED|FRAME_THICK }; class FXTabBar; /** * A tab item is placed in a tab bar or tab book. * When selected, the tab item sends a message to its * parent, and causes itself to become the active tab, * and raised slightly above the other tabs. * In the tab book, activating a tab item also causes * the corresponding panel to be raised to the top. */ class FXAPI FXTabItem : public FXLabel { FXDECLARE(FXTabItem) protected: FXTabItem(){} private: FXTabItem(const FXTabItem&); FXTabItem& operator=(const FXTabItem&); public: long onPaint(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); public: /// Construct a tab item FXTabItem(FXTabBar* p,const FXString& text,FXIcon* ic=0,FXuint opts=TAB_TOP_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Returns true because a tab item can receive focus virtual bool canFocus() const; /// Return current tab item orientation FXuint getTabOrientation() const; /// Change tab item orientation void setTabOrientation(FXuint style); }; } #endif fox-1.6.49/include/FXIO.h0000664000175000017500000001437212130340076011676 00000000000000/******************************************************************************** * * * I / O D e v i c e C l a s s * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXIO.h,v 1.8 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXIO_H #define FXIO_H namespace FX { /** * FXIO manipulates a handle to an abstract i/o device. * The various subclasses of FXIO perform i/o on files, sockets, * pipes, and possibly other devices. */ class FXAPI FXIO { protected: FXInputHandle device; // Device (file/pipe/socket/whatever) FXuint access; // Access being performed private: FXIO(const FXIO&); FXIO &operator=(const FXIO&); public: /// File modes enum { /// Permissions OtherRead = 0x00004, /// Others have read permission OtherWrite = 0x00002, /// Others have write permisson OtherExec = 0x00001, /// Others have execute permission OtherReadWrite = 0x00006, /// Others have read and write permission OtherFull = 0x00007, /// Others have full access GroupRead = 0x00020, /// Group has read permission GroupWrite = 0x00010, /// Group has write permission GroupExec = 0x00008, /// Group has execute permission GroupReadWrite = 0x00030, /// Group has read and write permission GroupFull = 0x00038, /// Group has full access OwnerRead = 0x00100, /// Owner has read permission OwnerWrite = 0x00080, /// Owner has write permission OwnerExec = 0x00040, /// Owner has execute permission OwnerReadWrite = 0x00180, /// Owner has read and write permission OwnerFull = 0x001C0, /// Owner has full access /// Other flags Hidden = 0x00200, /// Hidden file Directory = 0x00400, /// Is directory File = 0x00800, /// Is regular file SymLink = 0x01000, /// Is symbolic link /// Special mode bits SetUser = 0x02000, /// Set user id SetGroup = 0x04000, /// Set group id Sticky = 0x08000, /// Sticky bit /// Device special files Character = 0x10000, /// Character device Block = 0x20000, /// Block device Socket = 0x40000, /// Socket device Fifo = 0x80000 /// Fifo device }; /// Access modes enum { /// Basic access options NoAccess = 0, /// No access ReadOnly = 1, /// Open for reading WriteOnly = 2, /// Open for writing ReadWrite = 3, /// Open for read and write Append = 4, /// Open for append Truncate = 8, /// Truncate to zero when writing Create = 16, /// Create if it doesn't exist Exclusive = 32, /// Fail if trying to create a file which already exists NonBlocking = 64, /// Non-blocking i/o /// Convenience access options Reading = ReadOnly, /// Normal options for reading Writing = ReadWrite|Create|Truncate /// Normal options for writing }; /// Positioning modes enum { Begin = 0, /// Position from the begin (default) Current = 1, /// Position relative to current position End = 2 /// Position from the end }; public: /// Construct FXIO(); /// Open device with access mode and handle virtual bool open(FXInputHandle handle,FXuint mode); /// Return true if open virtual bool isOpen() const; /// Return access mode FXuint mode() const { return access; } /// Return handle FXInputHandle handle() const { return device; } /// Attach existing device handle virtual void attach(FXInputHandle handle,FXuint mode); /// Detach device handle virtual void detach(); /// Get current file position virtual FXlong position() const; /// Change file position, returning new position from start virtual FXlong position(FXlong offset,FXuint from=FXIO::Begin); /// Read block of bytes, returning number of bytes read virtual FXival readBlock(void* data,FXival count); /// Write block of bytes, returning number of bytes written virtual FXival writeBlock(const void* data,FXival count); /// Truncate file virtual FXlong truncate(FXlong size); /// Flush to disk virtual bool flush(); /// Test if we're at the end virtual bool eof(); /// Return size of i/o device virtual FXlong size(); /// Close handle virtual bool close(); /// Destroy and close virtual ~FXIO(); }; } #endif fox-1.6.49/include/FXDict.h0000664000175000017500000001236312130340076012250 00000000000000/******************************************************************************** * * * S t r i n g D i c t i o n a r y C l a s s * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDict.h,v 1.26 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDICT_H #define FXDICT_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { /** * The dictionary class maintains a fast-access hash table of entities * indexed by a character string. * It is typically used to map strings to pointers; however, overloading * the createData() and deleteData() members allows any type of data to * be indexed by strings. */ class FXAPI FXDict : public FXObject { FXDECLARE(FXDict) protected: struct FXDictEntry { FXchar *key; // Key string void *data; // Data FXint hash; // Hash value of key bool mark; // Entry is marked }; protected: FXDictEntry *dict; // Dictionary FXint total; // Dictionary size FXint number; // Number of entries protected: static FXint hash(const FXchar* str); protected: /** * Overload this function in a derived class to return the * data pointer given an input pointer; the default implementation * just returns the input pointer. */ virtual void *createData(const void*); /** * Overload this function in a derived class to delete the pointer * previously returned by createData(); the default implementation * does nothing. */ virtual void deleteData(void*); public: /** * Construct an empty dictionary. */ FXDict(); /// Copy constructor; does bit-copy of void pointer data. FXDict(const FXDict& orig); /// Assignment operator FXDict& operator=(const FXDict& orig); /** * Resize the table to the given size. */ void size(FXint m); /** * Return the size of the table, including the empty slots. */ FXint size() const { return total; } /** * Return the total number of entries in the table. */ FXint no() const { return number; } /** * Insert a new entry into the table given key and mark. * If there is already an entry with that key, leave it unchanged, * otherwise insert the new entry. */ void* insert(const FXchar* ky,const void* ptr,bool mrk=false); /** * Replace data at key, if the entry's mark is less than * or equal to the given mark. If there was no existing entry, * a new entry is inserted with the given mark. */ void* replace(const FXchar* ky,const void* ptr,bool mrk=false); /** * Remove data given key. */ void* remove(const FXchar* ky); /** * Find data pointer given key. */ void* find(const FXchar* ky) const; /** * Return true if slot is empty. */ bool empty(FXint pos) const { return dict[pos].hash<0; } /** * Return key at position pos. */ const FXchar* key(FXuint pos) const { return dict[pos].key; } /** * return data pointer at position pos. */ void* data(FXuint pos) const { return dict[pos].data; } /** * Return mark flag of entry at position pos. */ bool mark(FXuint pos) const { return dict[pos].mark; } /** * Return position of first filled slot, or >= total */ FXint first() const; /** * Return position of last filled slot or -1 */ FXint last() const; /** * Return position of next filled slot in hash table * or a value greater than or equal to total if no filled * slot was found */ FXint next(FXint pos) const; /** * Return position of previous filled slot in hash table * or a -1 if no filled slot was found */ FXint prev(FXint pos) const; /// Clear all entries void clear(); /// Destructor virtual ~FXDict(); }; } #endif fox-1.6.49/include/FXExtentf.h0000664000175000017500000001136512130340076013003 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n E x t e n t C l a s s * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXExtentf.h,v 1.8.2.1 2006/07/25 01:35:36 fox Exp $ * ********************************************************************************/ #ifndef FXEXTENTF_H #define FXEXTENTF_H namespace FX { /// Extent class FXAPI FXExtentf { public: FXVec2f lower; FXVec2f upper; public: /// Default constructor FXExtentf(){} /// Copy constructor FXExtentf(const FXExtentf& ext):lower(ext.lower),upper(ext.upper){} /// Initialize from two vectors FXExtentf(const FXVec2f& lo,const FXVec2f& hi):lower(lo),upper(hi){} /// Initialize from six numbers FXExtentf(FXfloat xlo,FXfloat xhi,FXfloat ylo,FXfloat yhi):lower(xlo,ylo),upper(xhi,yhi){} /// Assignment FXExtentf& operator=(const FXExtentf& ext){ lower=ext.lower; upper=ext.upper; return *this; } /// Indexing with 0..1 FXVec2f& operator[](FXint i){ return (&lower)[i]; } /// Indexing with 0..1 const FXVec2f& operator[](FXint i) const { return (&lower)[i]; } /// Comparison bool operator==(const FXExtentf& ext) const { return lower==ext.lower && upper==ext.upper;} bool operator!=(const FXExtentf& ext) const { return lower!=ext.lower || upper!=ext.upper;} /// Width of box FXfloat width() const { return upper.x-lower.x; } /// Height of box FXfloat height() const { return upper.y-lower.y; } /// Longest side FXfloat longest() const; /// shortest side FXfloat shortest() const; /// Length of diagonal FXfloat diameter() const; /// Get radius of box FXfloat radius() const; /// Compute diagonal FXVec2f diagonal() const; /// Get center of box FXVec2f center() const; /// Test if empty bool empty() const; /// Test if box contains point x,y bool contains(FXfloat x,FXfloat y) const; /// Test if box contains point p bool contains(const FXVec2f& p) const; /// Test if box properly contains another box bool contains(const FXExtentf& ext) const; /// Include point FXExtentf& include(FXfloat x,FXfloat y); /// Include point FXExtentf& include(const FXVec2f& v); /// Include given range into extent FXExtentf& include(const FXExtentf& ext); /// Test if bounds overlap friend FXAPI bool overlap(const FXExtentf& a,const FXExtentf& b); /// Get corner number 0..3 FXVec2f corner(FXint c) const { return FXVec2f((&lower)[c&1].x, (&lower)[(c>>1)&1].y); } /// Union of two boxes friend FXAPI FXExtentf unite(const FXExtentf& a,const FXExtentf& b); /// Intersection of two boxes friend FXAPI FXExtentf intersect(const FXExtentf& a,const FXExtentf& b); /// Save object to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXExtentf& ext); /// Load object from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXExtentf& ext); }; extern FXAPI bool overlap(const FXExtentf& a,const FXExtentf& b); extern FXAPI FXExtentf unite(const FXExtentf& a,const FXExtentf& b); extern FXAPI FXExtentf intersect(const FXExtentf& a,const FXExtentf& b); extern FXAPI FXStream& operator<<(FXStream& store,const FXExtentf& ext); extern FXAPI FXStream& operator>>(FXStream& store,FXExtentf& ext); } #endif fox-1.6.49/include/FXFont.h0000664000175000017500000003666312130340076012304 00000000000000/******************************************************************************** * * * F o n t O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFont.h,v 1.66 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXFONT_H #define FXFONT_H #ifndef FXID_H #include "FXId.h" #endif namespace FX { /// Font character set encoding enum FXFontEncoding { FONTENCODING_DEFAULT, /// Don't care character encoding FONTENCODING_ISO_8859_1 = 1, /// West European (Latin1) FONTENCODING_ISO_8859_2 = 2, /// Central and East European (Latin2) FONTENCODING_ISO_8859_3 = 3, /// Esperanto (Latin3) FONTENCODING_ISO_8859_4 = 4, FONTENCODING_ISO_8859_5 = 5, /// Cyrillic (almost obsolete) FONTENCODING_ISO_8859_6 = 6, /// Arabic FONTENCODING_ISO_8859_7 = 7, /// Greek FONTENCODING_ISO_8859_8 = 8, /// Hebrew FONTENCODING_ISO_8859_9 = 9, /// Turkish (Latin5) FONTENCODING_ISO_8859_10 = 10, FONTENCODING_ISO_8859_11 = 11, /// Thai FONTENCODING_ISO_8859_13 = 13, /// Baltic FONTENCODING_ISO_8859_14 = 14, FONTENCODING_ISO_8859_15 = 15, FONTENCODING_ISO_8859_16 = 16, FONTENCODING_KOI8 = 17, FONTENCODING_KOI8_R = 18, /// Russian FONTENCODING_KOI8_U = 19, /// Ukrainian FONTENCODING_KOI8_UNIFIED = 20, FONTENCODING_CP437 = 437, /// IBM-PC code page FONTENCODING_CP850 = 850, /// IBMPC Multilingual FONTENCODING_CP851 = 851, /// IBM-PC Greek FONTENCODING_CP852 = 852, /// IBM-PC Latin2 FONTENCODING_CP855 = 855, /// IBM-PC Cyrillic FONTENCODING_CP856 = 856, /// IBM-PC Hebrew FONTENCODING_CP857 = 857, /// IBM-PC Turkish FONTENCODING_CP860 = 860, /// IBM-PC Portugese FONTENCODING_CP861 = 861, /// IBM-PC Iceland FONTENCODING_CP862 = 862, /// IBM-PC Israel FONTENCODING_CP863 = 863, /// IBM-PC Canadian/French FONTENCODING_CP864 = 864, /// IBM-PC Arabic FONTENCODING_CP865 = 865, /// IBM-PC Nordic FONTENCODING_CP866 = 866, /// IBM-PC Cyrillic #2 FONTENCODING_CP869 = 869, /// IBM-PC Greek #2 FONTENCODING_CP870 = 870, /// Latin-2 Multilingual FONTENCODING_CP1250 = 1250, /// Windows Central European FONTENCODING_CP1251 = 1251, /// Windows Russian FONTENCODING_CP1252 = 1252, /// Windows Latin1 FONTENCODING_CP1253 = 1253, /// Windows Greek FONTENCODING_CP1254 = 1254, /// Windows Turkish FONTENCODING_CP1255 = 1255, /// Windows Hebrew FONTENCODING_CP1256 = 1256, /// Windows Arabic FONTENCODING_CP1257 = 1257, /// Windows Baltic FONTENCODING_CP1258 = 1258, /// Windows Vietnam FONTENCODING_CP874 = 874, /// Windows Thai FONTENCODING_UNICODE = 9999, FONTENCODING_LATIN1 = FONTENCODING_ISO_8859_1, /// Latin 1 (West European) FONTENCODING_LATIN2 = FONTENCODING_ISO_8859_2, /// Latin 2 (East European) FONTENCODING_LATIN3 = FONTENCODING_ISO_8859_3, /// Latin 3 (South European) FONTENCODING_LATIN4 = FONTENCODING_ISO_8859_4, /// Latin 4 (North European) FONTENCODING_LATIN5 = FONTENCODING_ISO_8859_9, /// Latin 5 (Turkish) FONTENCODING_LATIN6 = FONTENCODING_ISO_8859_10, /// Latin 6 (Nordic) FONTENCODING_LATIN7 = FONTENCODING_ISO_8859_13, /// Latin 7 (Baltic Rim) FONTENCODING_LATIN8 = FONTENCODING_ISO_8859_14, /// Latin 8 (Celtic) FONTENCODING_LATIN9 = FONTENCODING_ISO_8859_15, /// Latin 9 AKA Latin 0 FONTENCODING_LATIN10 = FONTENCODING_ISO_8859_16, /// Latin 10 FONTENCODING_USASCII = FONTENCODING_ISO_8859_1, /// Latin 1 FONTENCODING_WESTEUROPE = FONTENCODING_ISO_8859_1, /// Latin 1 (West European) FONTENCODING_EASTEUROPE = FONTENCODING_ISO_8859_2, /// Latin 2 (East European) FONTENCODING_SOUTHEUROPE = FONTENCODING_ISO_8859_3, /// Latin 3 (South European) FONTENCODING_NORTHEUROPE = FONTENCODING_ISO_8859_4, /// Latin 4 (North European) FONTENCODING_CYRILLIC = FONTENCODING_ISO_8859_5, /// Cyrillic FONTENCODING_RUSSIAN = FONTENCODING_KOI8, /// Cyrillic FONTENCODING_ARABIC = FONTENCODING_ISO_8859_6, /// Arabic FONTENCODING_GREEK = FONTENCODING_ISO_8859_7, /// Greek FONTENCODING_HEBREW = FONTENCODING_ISO_8859_8, /// Hebrew FONTENCODING_TURKISH = FONTENCODING_ISO_8859_9, /// Latin 5 (Turkish) FONTENCODING_NORDIC = FONTENCODING_ISO_8859_10, /// Latin 6 (Nordic) FONTENCODING_THAI = FONTENCODING_ISO_8859_11, /// Thai FONTENCODING_BALTIC = FONTENCODING_ISO_8859_13, /// Latin 7 (Baltic Rim) FONTENCODING_CELTIC = FONTENCODING_ISO_8859_14 /// Latin 8 (Celtic) }; /// Font style struct FXFontDesc { FXchar face[116]; /// Face name FXushort size; /// Size in deci-points FXushort weight; /// Weight [light, normal, bold, ...] FXushort slant; /// Slant [normal, italic, oblique, ...] FXushort setwidth; /// Set width [normal, condensed, expanded, ...] FXushort encoding; /// Encoding of character set FXushort flags; /// Flags }; class FXDC; class FXDCWindow; /// Font class class FXAPI FXFont : public FXId { friend class FXDCWindow; FXDECLARE(FXFont) protected: FXString wantedName; // Desired font font name FXString actualName; // Matched font font name FXushort wantedSize; // Font size (points*10) FXushort actualSize; // Actual size that was matched FXushort wantedWeight; // Font weight FXushort actualWeight; // Font weight FXushort wantedSlant; // Font slant FXushort actualSlant; // Font slant FXushort wantedSetwidth; // Relative setwidth FXushort actualSetwidth; // Relative setwidth FXushort wantedEncoding; // Character set encoding FXushort actualEncoding; // Character set encoding FXushort hints; // Matching hint flags FXushort flags; // Actual flags FXshort angle; // Angle void *font; // Info about the font private: #ifdef WIN32 FXID dc; #endif protected: FXFont(); void* match(const FXString& wantfamily,const FXString& wantforge,FXuint wantsize,FXuint wantweight,FXuint wantslant,FXuint wantsetwidth,FXuint wantencoding,FXuint wanthints,FXint res); private: FXFont(const FXFont&); FXFont &operator=(const FXFont&); public: /// Font pitch hints enum { Fixed = 1, /// Fixed pitch, mono-spaced Variable = 2 /// Variable pitch, proportional spacing }; /// Font style hints enum { Decorative = 4, /// Fancy fonts Modern = 8, /// Monospace typewriter font Roman = 16, /// Variable width times-like font, serif Script = 32, /// Script or cursive Swiss = 64, /// Helvetica/swiss type font, sans-serif System = 128, /// System font X11 = 256, /// Raw X11 font string Scalable = 512, /// Scalable fonts Polymorphic = 1024, /// Polymorphic fonts, e.g. parametric weight, slant, etc. Rotatable = 2048 /// Rotatable fonts }; /// Font slant options enum { ReverseOblique = 1, /// Reversed oblique ReverseItalic = 2, /// Reversed italic Straight = 5, /// Straight, not slanted Italic = 8, /// Italics Oblique = 9 /// Oblique slant }; /// Font weight options enum { Thin = 10, /// Thin ExtraLight = 20, /// Extra light Light = 30, /// Light Normal = 40, /// Normal or regular weight Medium = 50, /// Medium bold face DemiBold = 60, /// Demi bold face Bold = 70, /// Bold face ExtraBold = 80, /// Extra Black = 90 /// Black }; /// Condensed or expanded options enum { UltraCondensed = 50, /// Ultra condensed printing ExtraCondensed = 63, /// Extra condensed Condensed = 75, /// Condensed SemiCondensed = 87, /// Semi-condensed NonExpanded = 100, /// Regular printing SemiExpanded = 113, /// Semi expanded Expanded = 125, /// Expanded ExtraExpanded = 150, /// Extra expanded UltraExpanded = 200 /// Ultra expanded }; public: /** * Construct a font with given font description of the form: * * fontname [ "[" foundry "]" ] ["," size ["," weight ["," slant ["," setwidth ["," encoding ["," hints]]]]]] * * For example: * * "helvetica [bitstream],120,bold,italic,normal,iso8859-1,0" * * Typically, at least the font name, and size must be given for * normal font matching. As a special case, raw X11 fonts can also be * passed, for example: * * "9x15bold" * * Note: use of the raw X11 fonts is stronly discouraged. */ FXFont(FXApp* a,const FXString& string); /** * Construct a font with given name, size in points, weight, slant, character set * encoding, setwidth, and hints. * The font name may be comprised of a family name and optional foundry name enclosed in * square brackets, for example, "helvetica [bitstream]". */ FXFont(FXApp* a,const FXString& face,FXuint size,FXuint weight=FXFont::Normal,FXuint slant=FXFont::Straight,FXuint encoding=FONTENCODING_DEFAULT,FXuint setwidth=FXFont::NonExpanded,FXuint h=0); /// Construct font from font description FXFont(FXApp* a,const FXFontDesc& fontdesc); /// Create the font virtual void create(); /// Detach the font virtual void detach(); /// Destroy the font virtual void destroy(); /// Return family part of name FXString getFamily() const; /// Return foundry part of name FXString getFoundry() const; /// Get font family name const FXString& getName() const { return wantedName; } /// Get actual family name const FXString& getActualName() const { return actualName; } /// Get size in deci-points FXuint getSize() const { return wantedSize; } /// Get actual size in deci-points FXuint getActualSize() const { return actualSize; } /// Get font weight FXuint getWeight() const { return wantedWeight; } /// Get actual font weight FXuint getActualWeight() const { return actualWeight; } /// Get slant FXuint getSlant() const { return wantedSlant; } /// Get actual slant FXuint getActualSlant() const { return actualSlant; } /// Get character set encoding FXuint getEncoding() const { return wantedEncoding; } /// Get actual encoding FXuint getActualEncoding() const { return actualEncoding; } /// Get setwidth FXuint getSetWidth() const { return wantedSetwidth; } /// Get actual setwidth FXuint getActualSetWidth() const { return actualSetwidth; } /// Get hints FXuint getHints() const { return hints; } /// Get flags FXuint getFlags() const { return flags; } /// Get font description void getFontDesc(FXFontDesc& fontdesc) const; /// Change font description virtual void setFontDesc(const FXFontDesc& fontdesc); /// Return angle FXint getAngle() const { return angle; } /// Set to new angle, in degrees*64 relative to positive x axis virtual void setAngle(FXint ang); /** * Return the font description as a string suitable for * parsing with setFont(), see above. */ FXString getFont() const; /** * Change the font to the specified font description string. */ virtual void setFont(const FXString& string); /// Find out if the font is monotype or proportional virtual FXbool isFontMono() const; /// See if font has glyph for ch virtual FXbool hasChar(FXwchar ch) const; /// Get first character glyph in font virtual FXwchar getMinChar() const; /// Get last character glyph in font virtual FXwchar getMaxChar() const; /// Left bearing virtual FXint leftBearing(FXwchar ch) const; /// Right bearing virtual FXint rightBearing(FXwchar ch) const; /// Width of widest character in font virtual FXint getFontWidth() const; /// Height of highest character in font virtual FXint getFontHeight() const; /// Ascent from baseline virtual FXint getFontAscent() const; /// Descent from baseline virtual FXint getFontDescent() const; /// Get font leading [that is lead-ing as in Pb!] virtual FXint getFontLeading() const; /// Get font line spacing virtual FXint getFontSpacing() const; /// Calculate width of single wide character in this font virtual FXint getCharWidth(const FXwchar ch) const; /// Calculate width of given text in this font virtual FXint getTextWidth(const FXString& string) const; /// Calculate width of given text in this font virtual FXint getTextWidth(const FXchar* string,FXuint length) const; /// Calculate height of given text in this font virtual FXint getTextHeight(const FXString& string) const; /// Calculate height of given text in this font virtual FXint getTextHeight(const FXchar *string,FXuint length) const; /** * List all fonts matching hints. If listFonts() returns TRUE then * fonts points to a newly-allocated array of length numfonts. It * is the caller's responsibility to free this array using FXFREE(). */ static FXbool listFonts(FXFontDesc*& fonts,FXuint& numfonts,const FXString& face,FXuint wt=0,FXuint sl=0,FXuint sw=0,FXuint en=0,FXuint h=0); /// Save font data into stream virtual void save(FXStream& store) const; /// Load font data from stream virtual void load(FXStream& store); /// Destroy font virtual ~FXFont(); }; } #endif fox-1.6.49/include/fx.h0000664000175000017500000001507212130340076011544 00000000000000/******************************************************************************** * * * M a i n F O X I n c l u d e F i l e * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: fx.h,v 1.104 2006/01/22 17:58:13 fox Exp $ * ********************************************************************************/ #ifndef FX_H #define FX_H // Basic includes #include #include #include #include #include // FOX defines #include "fxver.h" #include "fxdefs.h" #include "fxascii.h" #include "fxunicode.h" // FOX classes #include "FXHash.h" #include "FXException.h" #include "FXThread.h" #include "FXStream.h" #include "FXIO.h" #include "FXFile.h" #include "FXPipe.h" #include "FXSocket.h" #include "FXFileStream.h" #include "FXMemoryStream.h" #include "FXString.h" #include "FXSize.h" #include "FXPoint.h" #include "FXRectangle.h" #include "FXObject.h" #include "FXDelegator.h" #include "FXDict.h" #include "FXPath.h" #include "FXSystem.h" #include "FXStat.h" #include "FXDir.h" #include "FXDate.h" #include "FXURL.h" #include "FXStringDict.h" #include "FXSettings.h" #include "FXRegistry.h" #include "FXObjectList.h" #include "FXAccelTable.h" #include "FXRecentFiles.h" #include "FXApp.h" #include "FXId.h" #include "FXVisual.h" #include "FXFont.h" #include "FXCursor.h" #include "FXGUISignal.h" #include "FXCURCursor.h" #include "FXGIFCursor.h" #include "FXDrawable.h" #include "FXBitmap.h" #include "FXImage.h" #include "FXIcon.h" #include "FXGIFImage.h" #include "FXIFFImage.h" #include "FXBMPImage.h" #include "FXICOImage.h" #include "FXXBMImage.h" #include "FXXPMImage.h" #include "FXPCXImage.h" #include "FXTGAImage.h" #include "FXRGBImage.h" #include "FXPPMImage.h" #include "FXRASImage.h" #include "FXGIFIcon.h" #include "FXIFFIcon.h" #include "FXBMPIcon.h" #include "FXICOIcon.h" #include "FXXBMIcon.h" #include "FXXPMIcon.h" #include "FXPCXIcon.h" #include "FXTGAIcon.h" #include "FXRGBIcon.h" #include "FXPPMIcon.h" #include "FXRASIcon.h" #include "FXRegion.h" #include "FXDC.h" #include "FXDCWindow.h" #include "FXDCPrint.h" #include "FXIconSource.h" #include "FXIconDict.h" #include "FXFileDict.h" #include "FXWindow.h" #include "FXFrame.h" #include "FXSeparator.h" #include "FXLabel.h" #include "FX7Segment.h" #include "FXDial.h" #include "FXKnob.h" #include "FXColorBar.h" #include "FXColorRing.h" #include "FXColorWell.h" #include "FXColorWheel.h" #include "FXTextField.h" #include "FXButton.h" #include "FXPicker.h" #include "FXToggleButton.h" #include "FXTriStateButton.h" #include "FXCheckButton.h" #include "FXRadioButton.h" #include "FXArrowButton.h" #include "FXMenuButton.h" #include "FXComposite.h" #include "FXPacker.h" #include "FXHorizontalFrame.h" #include "FXVerticalFrame.h" #include "FXSpring.h" #include "FXMatrix.h" #include "FXSpinner.h" #include "FXRealSpinner.h" #include "FXRootWindow.h" #include "FXCanvas.h" #include "FXGroupBox.h" #include "FXShell.h" #include "FXToolTip.h" #include "FXPopup.h" #include "FXTopWindow.h" #include "FXDialogBox.h" #include "FXMainWindow.h" #include "FXMenuPane.h" #include "FXScrollPane.h" #include "FXMenuCaption.h" #include "FXMenuSeparator.h" #include "FXMenuTitle.h" #include "FXMenuCascade.h" #include "FXMenuCommand.h" #include "FXMenuCheck.h" #include "FXMenuRadio.h" #include "FXMenuBar.h" #include "FXOptionMenu.h" #include "FXSwitcher.h" #include "FXTabBar.h" #include "FXTabBook.h" #include "FXTabItem.h" #include "FXScrollBar.h" #include "FXScrollArea.h" #include "FXScrollWindow.h" #include "FXList.h" #include "FXComboBox.h" #include "FXListBox.h" #include "FXTreeList.h" #include "FXTreeListBox.h" #include "FXFoldingList.h" #include "FXBitmapView.h" #include "FXBitmapFrame.h" #include "FXImageView.h" #include "FXImageFrame.h" #include "FXTable.h" #include "FXDragCorner.h" #include "FXStatusBar.h" #include "FXStatusLine.h" #include "FXChoiceBox.h" #include "FXMessageBox.h" #include "FXDirList.h" #include "FXSlider.h" #include "FXRealSlider.h" #include "FXSplitter.h" #include "FX4Splitter.h" #include "FXHeader.h" #include "FXShutter.h" #include "FXIconList.h" #include "FXFileList.h" #include "FXDirBox.h" #include "FXDriveBox.h" #include "FXDirSelector.h" #include "FXDirDialog.h" #include "FXFileSelector.h" #include "FXFileDialog.h" #include "FXColorSelector.h" #include "FXColorDialog.h" #include "FXFontSelector.h" #include "FXFontDialog.h" #include "FXUndoList.h" #include "FXRex.h" #include "FXText.h" #include "FXDataTarget.h" #include "FXProgressBar.h" #include "FXReplaceDialog.h" #include "FXRuler.h" #include "FXRulerView.h" #include "FXSearchDialog.h" #include "FXInputDialog.h" #include "FXProgressDialog.h" #include "FXWizard.h" #include "FXMDIButton.h" #include "FXMDIClient.h" #include "FXMDIChild.h" #include "FXDocument.h" #include "FXDockSite.h" #include "FXDockBar.h" #include "FXToolBar.h" #include "FXDockHandler.h" #include "FXDockTitle.h" #include "FXToolBarGrip.h" #include "FXToolBarShell.h" #include "FXToolBarTab.h" #include "FXPrintDialog.h" #include "FXDebugTarget.h" #include "FXSplashWindow.h" #ifndef FX_NO_GLOBAL_NAMESPACE using namespace FX; #endif #endif fox-1.6.49/include/FXRealSpinner.h0000664000175000017500000001750712130340076013614 00000000000000/******************************************************************************** * * * R e a l - V a l u e d S p i n n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 2003,2006 by Bill Baxter. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRealSpinner.h,v 1.16 2006/02/10 03:53:47 fox Exp $ * ********************************************************************************/ #ifndef FXREALSPINNER_H #define FXREALSPINNER_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /// RealSpinner Options enum { REALSPIN_NORMAL = 0, /// Normal, non-cyclic REALSPIN_CYCLIC = 0x00020000, /// Cyclic spinner REALSPIN_NOTEXT = 0x00040000, /// No text visible REALSPIN_NOMAX = 0x00080000, /// Spin all the way up to infinity REALSPIN_NOMIN = 0x00100000, /// Spin all the way down to -infinity REALSPIN_LOG = 0x00200000 /// Logarithmic rather than linear }; class FXTextField; class FXDial; /// Spinner control class FXAPI FXRealSpinner : public FXPacker { FXDECLARE(FXRealSpinner) protected: FXTextField *textField; // Text field FXArrowButton *upButton; // The up button FXArrowButton *downButton; // The down button FXdouble range[2]; // Reported data range FXdouble incr; // Increment FXdouble gran; // Granularity FXdouble pos; // Current position protected: FXRealSpinner(); private: FXRealSpinner(const FXRealSpinner&); FXRealSpinner& operator=(const FXRealSpinner&); public: long onUpdIncrement(FXObject*,FXSelector,void*); long onCmdIncrement(FXObject*,FXSelector,void*); long onUpdDecrement(FXObject*,FXSelector,void*); long onCmdDecrement(FXObject*,FXSelector,void*); long onCmdEntry(FXObject*,FXSelector,void*); long onChgEntry(FXObject*,FXSelector,void*); long onWheelEntry(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetIntRange(FXObject*,FXSelector,void*); long onCmdGetIntRange(FXObject*,FXSelector,void*); long onCmdSetRealValue(FXObject*,FXSelector,void*); long onCmdGetRealValue(FXObject*,FXSelector,void*); long onCmdSetRealRange(FXObject*,FXSelector,void*); long onCmdGetRealRange(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); public: enum{ ID_INCREMENT=FXPacker::ID_LAST, ID_DECREMENT, ID_ENTRY, ID_LAST }; public: /// Construct a spinner FXRealSpinner(FXComposite *p,FXint cols,FXObject *tgt=NULL,FXSelector sel=0,FXuint opts=REALSPIN_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Perform layout virtual void layout(); /// Disable spinner virtual void disable(); /// Enable spinner virtual void enable(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Increment spinner void increment(FXbool notify=FALSE); /// Increment spinner by certain amount void incrementByAmount(FXdouble amount,FXbool notify=FALSE); /// Decrement spinner void decrement(FXbool notify=FALSE); /// Decrement spinner by certain amount void decrementByAmount(FXdouble amount, FXbool notify=FALSE); /// Return TRUE if in cyclic mode FXbool isCyclic() const; /// Set to cyclic mode, i.e. wrap around at maximum/minimum void setCyclic(FXbool cyclic); /// Return TRUE if text is visible FXbool isTextVisible() const; /// Set text visible flag void setTextVisible(FXbool shown); /// Change current value virtual void setValue(FXdouble value,FXbool notify=FALSE); /// Return current value FXdouble getValue() const { return pos; } /// Change the spinner's range void setRange(FXdouble lo,FXdouble hi,FXbool notify=FALSE); /// Get the spinner's current range void getRange(FXdouble& lo,FXdouble& hi) const { lo=range[0]; hi=range[1]; } /// Change spinner increment void setIncrement(FXdouble increment); /// Return spinner increment FXdouble getIncrement() const { return incr; } /// Change spinner granularity void setGranularity(FXdouble gr); /// Return spinner granularity FXdouble getGranularity() const { return gran; } /// Set the text font void setFont(FXFont *fnt); /// Get the text font FXFont *getFont() const; /// Set the status line help text for this spinner void setHelpText(const FXString& text); /// Get the status line help text for this spinner const FXString& getHelpText() const; /// Set the tool tip message for this spinner void setTipText(const FXString& text); /// Get the tool tip message for this spinner const FXString& getTipText() const; /// Change spinner style void setSpinnerStyle(FXuint style); /// Return current spinner style FXuint getSpinnerStyle() const; /// Allow editing of the text field void setEditable(FXbool edit=TRUE); /// Return TRUE if text field is editable FXbool isEditable() const; /// Change color of the up arrow void setUpArrowColor(FXColor clr); /// Return color of the up arrow FXColor getUpArrowColor() const; /// Change color of the down arrow void setDownArrowColor(FXColor clr); /// Return color of the the down arrow FXColor getDownArrowColor() const; /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const; /// Change selected background color void setSelBackColor(FXColor clr); /// Return selected background color FXColor getSelBackColor() const; /// Change selected text color void setSelTextColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const; /// Changes the cursor color void setCursorColor(FXColor clr); /// Return the cursor color FXColor getCursorColor() const; /// Change width of text field in terms of number of columns * `m' void setNumColumns(FXint cols); /// Return number of columns FXint getNumColumns() const; /// Save spinner to a stream virtual void save(FXStream& store) const; /// Load spinner from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXRealSpinner(); }; } #endif fox-1.6.49/include/FXMenuButton.h0000664000175000017500000001710412130340076013463 00000000000000/******************************************************************************** * * * M e n u B u t t o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuButton.h,v 1.24 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUBUTTON_H #define FXMENUBUTTON_H #ifndef FXLABEL_H #include "FXLabel.h" #endif namespace FX { class FXPopup; // Menu button options enum { MENUBUTTON_AUTOGRAY = 0x00800000, /// Automatically gray out when no target MENUBUTTON_AUTOHIDE = 0x01000000, /// Automatically hide when no target MENUBUTTON_TOOLBAR = 0x02000000, /// Toolbar style MENUBUTTON_DOWN = 0, /// Popup window appears below menu button MENUBUTTON_UP = 0x04000000, /// Popup window appears above menu button MENUBUTTON_LEFT = 0x08000000, /// Popup window to the left of the menu button MENUBUTTON_RIGHT = MENUBUTTON_LEFT|MENUBUTTON_UP, /// Popup window to the right of the menu button MENUBUTTON_NOARROWS = 0x10000000, /// Do not show arrows MENUBUTTON_ATTACH_LEFT = 0, /// Popup attaches to the left side of the menu button MENUBUTTON_ATTACH_TOP = MENUBUTTON_ATTACH_LEFT, /// Popup attaches to the top of the menu button MENUBUTTON_ATTACH_RIGHT = 0x20000000, /// Popup attaches to the right side of the menu button MENUBUTTON_ATTACH_BOTTOM = MENUBUTTON_ATTACH_RIGHT, /// Popup attaches to the bottom of the menu button MENUBUTTON_ATTACH_CENTER = 0x40000000, /// Popup attaches to the center of the menu button MENUBUTTON_ATTACH_BOTH = MENUBUTTON_ATTACH_CENTER|MENUBUTTON_ATTACH_RIGHT /// Popup attaches to both sides of the menu button }; /** * A menu button posts a popup menu when clicked. * There are many ways to control the placement where the popup will appear; * first, the popup may be placed on either of the four sides relative to the * menu button; this is controlled by the flags MENUBUTTON_DOWN, etc. * Next, there are several attachment modes; the popup's left/bottom edge may * attach to the menu button's left/top edge, or the popup's right/top edge may * attach to the menu button's right/bottom edge, or both. * Also, the popup may apear centered relative to the menu button. * Finally, a small offset may be specified to displace the location of the * popup by a few pixels so as to account for borders and so on. * Normally, the menu button shows an arrow pointing to the direction where * the popup is set to appear; this can be turned off by passing the option * MENUBUTTON_NOARROWS. */ class FXAPI FXMenuButton : public FXLabel { FXDECLARE(FXMenuButton) protected: FXPopup *pane; // Pane to pop up FXint offsetx; // Shift attachment point x FXint offsety; // Shift attachment point y FXbool state; // Pane was popped protected: FXMenuButton(); private: FXMenuButton(const FXMenuButton&); FXMenuButton &operator=(const FXMenuButton&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCmdPost(FXObject*,FXSelector,void*); long onCmdUnpost(FXObject*,FXSelector,void*); public: /// Constructor FXMenuButton(FXComposite* p,const FXString& text,FXIcon* ic=NULL,FXPopup* pup=NULL,FXuint opts=JUSTIFY_NORMAL|ICON_BEFORE_TEXT|MENUBUTTON_DOWN,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Returns true because a menu button can receive focus virtual bool canFocus() const; /// Remove the focus from this window virtual void killFocus(); /// Return true if window logically contains the given point virtual bool contains(FXint parentx,FXint parenty) const; /// Change the popup menu void setMenu(FXPopup *pup); /// Return current popup menu FXPopup* getMenu() const { return pane; } /// Set X offset where menu pops up relative to button void setXOffset(FXint offx){ offsetx=offx; } /// Return current X offset FXint getXOffset() const { return offsetx; } /// Set Y offset where menu pops up relative to button void setYOffset(FXint offy){ offsety=offy; } /// Return current Y offset FXint getYOffset() const { return offsety; } /// Change menu button style void setButtonStyle(FXuint style); /// Get menu button style FXuint getButtonStyle() const; /// Change popup style void setPopupStyle(FXuint style); /// Get popup style FXuint getPopupStyle() const; /// Change attachment void setAttachment(FXuint att); /// Get attachment FXuint getAttachment() const; /// Save menu button to a stream virtual void save(FXStream& store) const; /// Load menu button from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXMenuButton(); }; } #endif fox-1.6.49/include/FXBZFileStream.h0000664000175000017500000001464612130340076013662 00000000000000/******************************************************************************** * * * B Z F i l e S t r e a m C l a s s e s * * * ********************************************************************************* * Copyright (C) 1999,2006 by Lyle Johnson. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXBZFileStream.h,v 1.5.2.1 2007/09/28 16:42:19 fox Exp $ * ********************************************************************************/ #ifdef HAVE_BZ2LIB_H #ifndef FXBZFILESTREAM_H #define FXBZFILESTREAM_H #ifndef FXFILESTREAM_H #include "FXFileStream.h" #endif namespace FX { struct BZBlock; /// BZIP2 compressed file stream class FXAPI FXBZFileStream : public FXFileStream { private: BZBlock *bz; int ac; protected: virtual FXuval writeBuffer(FXuval count); virtual FXuval readBuffer(FXuval count); public: /// Create BZIP2 file stream FXBZFileStream(const FXObject* cont=NULL); /// Open file stream bool open(const FXString& filename,FXStreamDirection save_or_load,FXuval size=8192); /// Flush buffer virtual bool flush(); /// Close file stream virtual bool close(); /// Get position FXlong position() const { return FXStream::position(); } /// Move to position virtual bool position(FXlong,FXWhence){ return FALSE; } /// Save single items to stream FXBZFileStream& operator<<(const FXuchar& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXchar& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXushort& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXshort& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXuint& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXint& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXfloat& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXdouble& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXlong& v){ FXStream::operator<<(v); return *this; } FXBZFileStream& operator<<(const FXulong& v){ FXStream::operator<<(v); return *this; } /// Save arrays of items to stream FXBZFileStream& save(const FXuchar* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXchar* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXushort* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXshort* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXuint* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXint* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXfloat* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXdouble* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXlong* p,FXuval n){ FXStream::save(p,n); return *this; } FXBZFileStream& save(const FXulong* p,FXuval n){ FXStream::save(p,n); return *this; } /// Load single items from stream FXBZFileStream& operator>>(FXuchar& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXchar& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXushort& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXshort& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXuint& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXint& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXfloat& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXdouble& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXlong& v){ FXStream::operator>>(v); return *this; } FXBZFileStream& operator>>(FXulong& v){ FXStream::operator>>(v); return *this; } /// Load arrays of items from stream FXBZFileStream& load(FXuchar* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXchar* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXushort* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXshort* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXuint* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXint* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXfloat* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXdouble* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXlong* p,FXuval n){ FXStream::load(p,n); return *this; } FXBZFileStream& load(FXulong* p,FXuval n){ FXStream::load(p,n); return *this; } /// Save object FXBZFileStream& saveObject(const FXObject* v){ FXStream::saveObject(v); return *this; } /// Load object FXBZFileStream& loadObject(FXObject*& v){ FXStream::loadObject(v); return *this; } /// Clean up virtual ~FXBZFileStream(); }; } #endif #endif fox-1.6.49/include/FXProgressBar.h0000664000175000017500000001240012130340076013606 00000000000000/******************************************************************************** * * * P r o g r e s s B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXProgressBar.h,v 1.22 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXPROGRESSBAR_H #define FXPROGRESSBAR_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Progress bar styles enum { PROGRESSBAR_HORIZONTAL = 0, /// Horizontal display PROGRESSBAR_VERTICAL = 0x00008000, /// Vertical display PROGRESSBAR_PERCENTAGE = 0x00010000, /// Show percentage done PROGRESSBAR_DIAL = 0x00020000, /// Show as a dial instead of bar PROGRESSBAR_NORMAL = FRAME_SUNKEN|FRAME_THICK }; /// Progress bar widget class FXAPI FXProgressBar : public FXFrame { FXDECLARE(FXProgressBar) protected: FXuint progress; // Integer percentage number FXuint total; // Amount for completion FXint barsize; // Bar size FXFont* font; FXColor barBGColor; FXColor barColor; FXColor textNumColor; FXColor textAltColor; protected: FXProgressBar(){} void drawInterior(FXDCWindow& dc); private: FXProgressBar(const FXProgressBar&); FXProgressBar &operator=(const FXProgressBar&); public: long onPaint(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); public: /// Construct progress bar FXProgressBar(FXComposite* p,FXObject* target=NULL,FXSelector sel=0,FXuint opts=PROGRESSBAR_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change the amount of progress void setProgress(FXuint value); /// Get current progress FXuint getProgress() const { return progress; } /// Set total amount of progress void setTotal(FXuint value); /// Return total amount of progrss FXuint getTotal() const { return total; } /// Increment progress by given amount void increment(FXuint value); /// Hide progress percentage void hideNumber(); /// Show progress percentage void showNumber(); /// Change progress bar width void setBarSize(FXint size); /// Return progress bar width FXint getBarSize() const { return barsize; } /// Change backgroundcolor void setBarBGColor(FXColor clr); /// Return background color FXColor getBarBGColor() const { return barBGColor; } /// Change bar color void setBarColor(FXColor clr); /// Return bar color FXColor getBarColor() const { return barColor; } /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const { return textNumColor; } /// Change alternate text color shown when bar under text void setTextAltColor(FXColor clr); /// Return alternate text color FXColor getTextAltColor() const { return textAltColor; } /// Set the text font void setFont(FXFont *fnt); /// Get the text font FXFont* getFont() const { return font; } /// Change progress bar style void setBarStyle(FXuint style); /// Return current progress bar style FXuint getBarStyle() const; /// Save progress bar to a stream virtual void save(FXStream& store) const; /// Load progress bar from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXProgressBar(); }; } #endif fox-1.6.49/include/FXWindow.h0000664000175000017500000007013012130340076012630 00000000000000/******************************************************************************** * * * W i n d o w O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXWindow.h,v 1.149 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXWINDOW_H #define FXWINDOW_H #ifndef FXDRAWABLE_H #include "FXDrawable.h" #endif namespace FX { /// Layout hints for child widgets enum { LAYOUT_NORMAL = 0, /// Default layout mode LAYOUT_SIDE_TOP = 0, /// Pack on top side (default) LAYOUT_SIDE_BOTTOM = 0x00000001, /// Pack on bottom side LAYOUT_SIDE_LEFT = 0x00000002, /// Pack on left side LAYOUT_SIDE_RIGHT = LAYOUT_SIDE_LEFT|LAYOUT_SIDE_BOTTOM, /// Pack on right side LAYOUT_FILL_COLUMN = 0x00000001, /// Matrix column is stretchable LAYOUT_FILL_ROW = 0x00000002, /// Matrix row is stretchable LAYOUT_LEFT = 0, /// Stick on left (default) LAYOUT_RIGHT = 0x00000004, /// Stick on right LAYOUT_CENTER_X = 0x00000008, /// Center horizontally LAYOUT_FIX_X = LAYOUT_RIGHT|LAYOUT_CENTER_X, /// X fixed LAYOUT_TOP = 0, /// Stick on top (default) LAYOUT_BOTTOM = 0x00000010, /// Stick on bottom LAYOUT_CENTER_Y = 0x00000020, /// Center vertically LAYOUT_FIX_Y = LAYOUT_BOTTOM|LAYOUT_CENTER_Y, /// Y fixed LAYOUT_DOCK_SAME = 0, /// Dock on same galley if it fits LAYOUT_DOCK_NEXT = 0x00000040, /// Dock on next galley LAYOUT_RESERVED_1 = 0x00000080, LAYOUT_FIX_WIDTH = 0x00000100, /// Width fixed LAYOUT_FIX_HEIGHT = 0x00000200, /// height fixed LAYOUT_MIN_WIDTH = 0, /// Minimum width is the default LAYOUT_MIN_HEIGHT = 0, /// Minimum height is the default LAYOUT_FILL_X = 0x00000400, /// Stretch or shrink horizontally LAYOUT_FILL_Y = 0x00000800, /// Stretch or shrink vertically LAYOUT_FILL = LAYOUT_FILL_X|LAYOUT_FILL_Y, /// Stretch or shrink in both directions LAYOUT_EXPLICIT = LAYOUT_FIX_X|LAYOUT_FIX_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT /// Explicit placement }; /// Frame border appearance styles (for subclasses) enum { FRAME_NONE = 0, /// Default is no frame FRAME_SUNKEN = 0x00001000, /// Sunken border FRAME_RAISED = 0x00002000, /// Raised border FRAME_THICK = 0x00004000, /// Thick border FRAME_GROOVE = FRAME_THICK, /// A groove or etched-in border FRAME_RIDGE = FRAME_THICK|FRAME_RAISED|FRAME_SUNKEN, /// A ridge or embossed border FRAME_LINE = FRAME_RAISED|FRAME_SUNKEN, /// Simple line border FRAME_NORMAL = FRAME_SUNKEN|FRAME_THICK /// Regular raised/thick border }; /// Packing style (for packers) enum { PACK_NORMAL = 0, /// Default is each its own size PACK_UNIFORM_HEIGHT = 0x00008000, /// Uniform height PACK_UNIFORM_WIDTH = 0x00010000 /// Uniform width }; class FXIcon; class FXBitmap; class FXCursor; class FXRegion; class FXComposite; class FXAccelTable; class FXComposeContext; /// Base class for all windows class FXAPI FXWindow : public FXDrawable { FXDECLARE(FXWindow) friend class FXApp; private: FXWindow *parent; // Parent Window FXWindow *owner; // Owner Window FXWindow *first; // First Child FXWindow *last; // Last Child FXWindow *next; // Next Sibling FXWindow *prev; // Previous Sibling FXWindow *focus; // Focus Child FXuint wk; // Window Key protected: FXComposeContext *composeContext; // Compose context FXCursor *defaultCursor; // Normal Cursor FXCursor *dragCursor; // Cursor during drag FXAccelTable *accelTable; // Accelerator table FXObject *target; // Target object FXSelector message; // Message ID FXint xpos; // Window X Position FXint ypos; // Window Y Position FXColor backColor; // Window background color FXString tag; // Help tag FXuint flags; // Window state flags FXuint options; // Window options public: static FXDragType octetType; // Raw octet stream static FXDragType deleteType; // Delete request static FXDragType textType; // Ascii text request static FXDragType utf8Type; // UTF-8 text request static FXDragType utf16Type; // UTF-16 text request static FXDragType colorType; // Color static FXDragType urilistType; // URI List static const FXDragType stringType; // Clipboard text type (pre-registered) static const FXDragType imageType; // Clipboard image type (pre-registered) protected: FXWindow(); FXWindow(FXApp* a,FXVisual *vis); FXWindow(FXApp* a,FXWindow* own,FXuint opts,FXint x,FXint y,FXint w,FXint h); static FXWindow* findDefault(FXWindow* window); static FXWindow* findInitial(FXWindow* window); virtual bool doesOverrideRedirect() const; protected: #ifdef WIN32 virtual FXID GetDC() const; virtual int ReleaseDC(FXID) const; virtual const char* GetClass() const; #else void addColormapWindows(); void remColormapWindows(); #endif private: FXWindow(const FXWindow&); FXWindow& operator=(const FXWindow&); protected: // Window state flags enum { FLAG_SHOWN = 0x00000001, // Is shown FLAG_ENABLED = 0x00000002, // Able to receive input FLAG_UPDATE = 0x00000004, // Is subject to GUI update FLAG_DROPTARGET = 0x00000008, // Drop target FLAG_FOCUSED = 0x00000010, // Has focus FLAG_DIRTY = 0x00000020, // Needs layout FLAG_RECALC = 0x00000040, // Needs recalculation FLAG_TIP = 0x00000080, // Show tip FLAG_HELP = 0x00000100, // Show help FLAG_DEFAULT = 0x00000200, // Default widget FLAG_INITIAL = 0x00000400, // Initial widget FLAG_SHELL = 0x00000800, // Shell window FLAG_ACTIVE = 0x00001000, // Window is active FLAG_PRESSED = 0x00002000, // Button has been pressed FLAG_KEY = 0x00004000, // Keyboard key pressed FLAG_CARET = 0x00008000, // Caret is on FLAG_CHANGED = 0x00010000, // Window data changed FLAG_LASSO = 0x00020000, // Lasso mode FLAG_TRYDRAG = 0x00040000, // Tentative drag mode FLAG_DODRAG = 0x00080000, // Doing drag mode FLAG_SCROLLINSIDE = 0x00100000, // Scroll only when inside FLAG_SCROLLING = 0x00200000, // Right mouse scrolling FLAG_OWNED = 0x00400000 }; public: // Message handlers long onPaint(FXObject*,FXSelector,void*); long onMap(FXObject*,FXSelector,void*); long onUnmap(FXObject*,FXSelector,void*); long onConfigure(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onBeginDrag(FXObject*,FXSelector,void*); long onEndDrag(FXObject*,FXSelector,void*); long onDragged(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onDestroy(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onSelectionLost(FXObject*,FXSelector,void*); long onSelectionGained(FXObject*,FXSelector,void*); long onSelectionRequest(FXObject*,FXSelector,void*); long onClipboardLost(FXObject*,FXSelector,void*); long onClipboardGained(FXObject*,FXSelector,void*); long onClipboardRequest(FXObject*,FXSelector,void*); long onDNDEnter(FXObject*,FXSelector,void*); long onDNDLeave(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onDNDDrop(FXObject*,FXSelector,void*); long onDNDRequest(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onCmdShow(FXObject*,FXSelector,void*); long onCmdHide(FXObject*,FXSelector,void*); long onUpdToggleShown(FXObject*,FXSelector,void*); long onCmdToggleShown(FXObject*,FXSelector,void*); long onCmdRaise(FXObject*,FXSelector,void*); long onCmdLower(FXObject*,FXSelector,void*); long onCmdEnable(FXObject*,FXSelector,void*); long onCmdDisable(FXObject*,FXSelector,void*); long onUpdToggleEnabled(FXObject*,FXSelector,void*); long onCmdToggleEnabled(FXObject*,FXSelector,void*); long onCmdUpdate(FXObject*,FXSelector,void*); long onUpdYes(FXObject*,FXSelector,void*); long onCmdDelete(FXObject*,FXSelector,void*); public: // Message ID's common to most Windows enum { ID_NONE, ID_HIDE, // ID_HIDE+FALSE ID_SHOW, // ID_HIDE+TRUE ID_TOGGLESHOWN, ID_LOWER, ID_RAISE, ID_DELETE, ID_DISABLE, // ID_DISABLE+FALSE ID_ENABLE, // ID_DISABLE+TRUE ID_TOGGLEENABLED, ID_UNCHECK, // ID_UNCHECK+FALSE ID_CHECK, // ID_UNCHECK+TRUE ID_UNKNOWN, // ID_UNCHECK+MAYBE ID_UPDATE, ID_AUTOSCROLL, ID_TIPTIMER, ID_HSCROLLED, ID_VSCROLLED, ID_SETVALUE, ID_SETINTVALUE, ID_SETREALVALUE, ID_SETSTRINGVALUE, ID_SETICONVALUE, ID_SETINTRANGE, ID_SETREALRANGE, ID_GETINTVALUE, ID_GETREALVALUE, ID_GETSTRINGVALUE, ID_GETICONVALUE, ID_GETINTRANGE, ID_GETREALRANGE, ID_SETHELPSTRING, ID_GETHELPSTRING, ID_SETTIPSTRING, ID_GETTIPSTRING, ID_QUERY_MENU, ID_HOTKEY, ID_ACCEL, ID_UNPOST, ID_POST, ID_MDI_TILEHORIZONTAL, ID_MDI_TILEVERTICAL, ID_MDI_CASCADE, ID_MDI_MAXIMIZE, ID_MDI_MINIMIZE, ID_MDI_RESTORE, ID_MDI_CLOSE, ID_MDI_WINDOW, ID_MDI_MENUWINDOW, ID_MDI_MENUMINIMIZE, ID_MDI_MENURESTORE, ID_MDI_MENUCLOSE, ID_MDI_NEXT, ID_MDI_PREV, ID_LAST }; public: // Common DND type names static const FXchar octetTypeName[]; static const FXchar deleteTypeName[]; static const FXchar textTypeName[]; static const FXchar colorTypeName[]; static const FXchar urilistTypeName[]; static const FXchar utf8TypeName[]; static const FXchar utf16TypeName[]; public: /// Constructor FXWindow(FXComposite* p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return a pointer to the parent window FXWindow* getParent() const { return parent; } /// Return a pointer to the owner window FXWindow* getOwner() const { return owner; } /// Return a pointer to the shell window FXWindow* getShell() const; /// Return a pointer to the root window FXWindow* getRoot() const; /// Return a pointer to the next (sibling) window, if any FXWindow* getNext() const { return next; } /// Return a pointer to the previous (sibling) window , if any FXWindow* getPrev() const { return prev; } /// Return a pointer to this window's first child window , if any FXWindow* getFirst() const { return first; } /// Return a pointer to this window's last child window, if any FXWindow* getLast() const { return last; } /// Return a pointer to the currently focused child window FXWindow* getFocus() const { return focus; } /// Change window key void setKey(FXuint k){ wk=k; } /// Return window key FXuint getKey() const { return wk; } /// Set the message target object for this window void setTarget(FXObject *t){ target=t; } /// Get the message target object for this window, if any FXObject* getTarget() const { return target; } /// Set the message identifier for this window void setSelector(FXSelector sel){ message=sel; } /// Get the message identifier for this window FXSelector getSelector() const { return message; } /// Get this window's x-coordinate, in the parent's coordinate system FXint getX() const { return xpos; } /// Get this window's y-coordinate, in the parent's coordinate system FXint getY() const { return ypos; } /// Return the default width of this window virtual FXint getDefaultWidth(); /// Return the default height of this window virtual FXint getDefaultHeight(); /// Return width for given height virtual FXint getWidthForHeight(FXint givenheight); /// Return height for given width virtual FXint getHeightForWidth(FXint givenwidth); /// Set this window's x-coordinate, in the parent's coordinate system void setX(FXint x); /// Set this window's y-coordinate, in the parent's coordinate system void setY(FXint y); /** * Set the window width; and flag the widget as being in need of * layout by its parent. This does not immediately update the server- * side representation of the widget. */ void setWidth(FXint w); /** * Set the window height; and flag the widget as being in need of * layout by its parent. This does not immediately update the server- * side representation of the widget. */ void setHeight(FXint h); /// Set layout hints for this window void setLayoutHints(FXuint lout); /// Get layout hints for this window FXuint getLayoutHints() const; /// Return a pointer to the accelerator table FXAccelTable* getAccelTable() const { return accelTable; } /// Set the accelerator table void setAccelTable(FXAccelTable* acceltable){ accelTable=acceltable; } /// Add a hot key void addHotKey(FXHotKey code); /// Remove a hot key void remHotKey(FXHotKey code); /// Change help tag for this widget void setHelpTag(const FXString& text){ tag=text; } /// Get the help tag for this widget const FXString& getHelpTag() const { return tag; } /// Return true if window is a shell window bool isShell() const; /// Return true if specified window is owned by this window bool isOwnerOf(const FXWindow* window) const; /// Return true if specified window is ancestor of this window bool isChildOf(const FXWindow* window) const; /// Return true if this window contains child in its subtree bool containsChild(const FXWindow* child) const; /// Return the child window at specified coordinates FXWindow* getChildAt(FXint x,FXint y) const; /// Return the number of child windows for this window FXint numChildren() const; /** * Return the index (starting from zero) of the specified child window, * or -1 if the window is not a child or NULL */ FXint indexOfChild(const FXWindow *window) const; /** * Return the child window at specified index, * or NULL if the index is negative or out of range */ FXWindow* childAtIndex(FXint index) const; /// Return the common ancestor of window a and window b static FXWindow* commonAncestor(FXWindow* a,FXWindow* b); /// Return TRUE if sibling a <= sibling b in list static bool before(const FXWindow *a,const FXWindow* b); /// Return TRUE if sibling a >= sibling b in list static bool after(const FXWindow *a,const FXWindow* b); /// Return compose context FXComposeContext* getComposeContext() const { return composeContext; } /// Create compose context void createComposeContext(); /// Destroy compose context void destroyComposeContext(); /// Set the default cursor for this window void setDefaultCursor(FXCursor* cur); /// Return the default cursor for this window FXCursor* getDefaultCursor() const { return defaultCursor; } /// Set the drag cursor for this window void setDragCursor(FXCursor* cur); /// Return the drag cursor for this window FXCursor* getDragCursor() const { return dragCursor; } /// Return the cursor position and mouse button-state FXint getCursorPosition(FXint& x,FXint& y,FXuint& buttons) const; /// Warp the cursor to the new position FXint setCursorPosition(FXint x,FXint y); /// Return true if this window is able to receive mouse and keyboard events bool isEnabled() const; /// Return true if the window is active bool isActive() const; /// Return true if this window is a control capable of receiving the focus virtual bool canFocus() const; /// Return true if this window has the focus bool hasFocus() const; /// Return true if this window is in focus chain bool inFocusChain() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Notification that focus moved to new child virtual void changeFocus(FXWindow *child); /** * This changes the default window which responds to the Return * key in a dialog. If enable is TRUE, this window becomes the default * window; when enable is FALSE, this window will be no longer the * default window. Finally, when enable is MAYBE, the default window * will revert to the initial default window. */ virtual void setDefault(FXbool enable=TRUE); /// Return true if this is the default window bool isDefault() const; /// Make this window the initial default window void setInitial(bool enable=true); /// Return true if this is the initial default window bool isInitial() const; /// Enable the window to receive mouse and keyboard events virtual void enable(); /// Disable the window from receiving mouse and keyboard events virtual void disable(); /// Create all of the server-side resources for this window virtual void create(); /// Attach foreign window handle to this window virtual void attach(FXID w); /// Detach the server-side resources for this window virtual void detach(); /// Destroy the server-side resources for this window virtual void destroy(); /// Set window shape by means of region virtual void setShape(const FXRegion& region); /// Set window shape by means of bitmap virtual void setShape(FXBitmap* bitmap); /// Set window shape by means of icon virtual void setShape(FXIcon* icon); /// Clear window shape virtual void clearShape(); /// Raise this window to the top of the stacking order virtual void raise(); /// Lower this window to the bottom of the stacking order virtual void lower(); /** * Move the window immediately, in the parent's coordinate system. * Update the server representation as well if the window is realized. * Perform layout of the children when necessary. */ virtual void move(FXint x,FXint y); /** * Resize the window to the specified width and height immediately, * updating the server representation as well, if the window was realized. * Perform layout of the children when necessary. */ virtual void resize(FXint w,FXint h); /** * Move and resize the window immediately, in the parent's coordinate system. * Update the server representation as well if the window is realized. * Perform layout of the children when necessary. */ virtual void position(FXint x,FXint y,FXint w,FXint h); /// Mark this window's layout as dirty for later layout virtual void recalc(); /// Perform layout immediately virtual void layout(); /// Generate a SEL_UPDATE message for the window and its children void forceRefresh(); /// Reparent this window under new father before other virtual void reparent(FXWindow* father,FXWindow *other=NULL); /// Scroll rectangle x,y,w,h by a shift of dx,dy void scroll(FXint x,FXint y,FXint w,FXint h,FXint dx,FXint dy) const; /// Mark the specified rectangle to be repainted later void update(FXint x,FXint y,FXint w,FXint h) const; /// Mark the entire window to be repainted later void update() const; /// Process any outstanding repaint messages immediately, for the given rectangle void repaint(FXint x,FXint y,FXint w,FXint h) const; /// Process any outstanding repaint messages immediately void repaint() const; /** * Grab the mouse to this window; future mouse events will be * reported to this window even while the cursor goes outside of this window */ void grab(); /// Release the mouse grab void ungrab(); /// Return true if the window has been grabbed bool grabbed() const; /// Grab keyboard device void grabKeyboard(); /// Ungrab keyboard device void ungrabKeyboard(); /// Return true if active grab is in effect bool grabbedKeyboard() const; /// Show this window virtual void show(); /// Hide this window virtual void hide(); /// Return true if the window is shown bool shown() const; /// Return true if the window is composite virtual bool isComposite() const; /// Return true if the window is under the cursor bool underCursor() const; /// Return true if this window owns the primary selection bool hasSelection() const; /// Try to acquire the primary selection, given a list of drag types bool acquireSelection(const FXDragType *types,FXuint numtypes); /// Release the primary selection bool releaseSelection(); /// Return true if this window owns the clipboard bool hasClipboard() const; /// Try to acquire the clipboard, given a list of drag types bool acquireClipboard(const FXDragType *types,FXuint numtypes); /// Release the clipboard bool releaseClipboard(); /// Enable this window to receive drops virtual void dropEnable(); /// Disable this window from receiving drops virtual void dropDisable(); /// Return true if this window is able to receive drops bool isDropEnabled() const; /// Return true if a drag operaion has been initiated from this window bool isDragging() const; /// Initiate a drag operation with a list of previously registered drag types bool beginDrag(const FXDragType *types,FXuint numtypes); /** * When dragging, inform the drop-target of the new position and * the drag action */ bool handleDrag(FXint x,FXint y,FXDragAction action=DRAG_COPY); /** * Terminate the drag operation with or without actually dropping the data * Returns the action performed by the target */ FXDragAction endDrag(bool drop=true); /// Return true if this window is the target of a drop bool isDropTarget() const; /** * When being dragged over, indicate that no further SEL_DND_MOTION messages * are required while the cursor is inside the given rectangle */ void setDragRectangle(FXint x,FXint y,FXint w,FXint h,bool wantupdates=true) const; /** * When being dragged over, indicate we want to receive SEL_DND_MOTION messages * every time the cursor moves */ void clearDragRectangle() const; /// When being dragged over, indicate acceptance or rejection of the dragged data void acceptDrop(FXDragAction action=DRAG_ACCEPT) const; /// The target accepted our drop FXDragAction didAccept() const; /** * Sent by the drop target in response to SEL_DND_DROP. The drag action * should be the same as the action the drop target reported to the drag * source in reponse to the SEL_DND_MOTION message. * This function notifies the drag source that its part of the drop transaction * is finished, and that it is free to release any resources involved in the * drag operation. * Calling dropFinished() is advisable in cases where the drop target needs * to perform complex processing on the data received from the drag source, * prior to returning from the SEL_DND_DROP message handler. */ void dropFinished(FXDragAction action=DRAG_REJECT) const; /// When being dragged over, inquire the drag types which are being offered bool inquireDNDTypes(FXDNDOrigin origin,FXDragType*& types,FXuint& numtypes) const; /// When being dragged over, return true if we are offered the given drag type bool offeredDNDType(FXDNDOrigin origin,FXDragType type) const; /// When being dragged over, return the drag action FXDragAction inquireDNDAction() const; /** * Set DND data; the array must be allocated with FXMALLOC and ownership is * transferred to the system */ bool setDNDData(FXDNDOrigin origin,FXDragType type,FXuchar* data,FXuint size) const; /** * Set DND data from string value. */ bool setDNDData(FXDNDOrigin origin,FXDragType type,const FXString& string) const; /** * Get DND data; the caller becomes the owner of the array and must free it * with FXFREE */ bool getDNDData(FXDNDOrigin origin,FXDragType type,FXuchar*& data,FXuint& size) const; /** * Get DND data into string value. */ bool getDNDData(FXDNDOrigin origin,FXDragType type,FXString& string) const; /// Return true if window logically contains the given point virtual bool contains(FXint parentx,FXint parenty) const; /// Translate coordinates from fromwindow's coordinate space to this window's coordinate space void translateCoordinatesFrom(FXint& tox,FXint& toy,const FXWindow* fromwindow,FXint fromx,FXint fromy) const; /// Translate coordinates from this window's coordinate space to towindow's coordinate space void translateCoordinatesTo(FXint& tox,FXint& toy,const FXWindow* towindow,FXint fromx,FXint fromy) const; /// Set window background color virtual void setBackColor(FXColor clr); /// Get background color FXColor getBackColor() const { return backColor; } virtual bool doesSaveUnder() const; /** * Translate message for localization; using the current FXTranslator, * an attempt is made to translate the given message into the current * language. An optional hint may be passed to break any ties in case * more than one tranlation is possible for the given message text. * In addition, the name of the widget is passed as context name so * that controls in a single dialog may be grouped together. */ virtual const FXchar* tr(const FXchar* message,const FXchar* hint=NULL) const; /// Save window to stream virtual void save(FXStream& store) const; /// Restore window from stream virtual void load(FXStream& store); /// Destroy window virtual ~FXWindow(); }; } #endif fox-1.6.49/include/FXSearchDialog.h0000664000175000017500000000467312130340076013717 00000000000000/******************************************************************************** * * * T e x t S e a r c h D i a l o g * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSearchDialog.h,v 1.23 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSEARCHDIALOG_H #define FXSEARCHDIALOG_H #ifndef FXREPLACEDIALOG_H #include "FXReplaceDialog.h" #endif namespace FX { /// Text search dialog class FXAPI FXSearchDialog : public FXReplaceDialog { FXDECLARE(FXSearchDialog) protected: FXSearchDialog(){} private: FXSearchDialog(const FXSearchDialog&); FXSearchDialog &operator=(const FXSearchDialog&); public: /// Construct search dialog box FXSearchDialog(FXWindow* owner,const FXString& caption,FXIcon* ic=NULL,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Destructor virtual ~FXSearchDialog(); }; } #endif fox-1.6.49/include/FXDelegator.h0000664000175000017500000000565012130340076013274 00000000000000/******************************************************************************** * * * D e l e g a t o r T a r g e t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDelegator.h,v 1.15 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDELEGATOR_H #define FXDELEGATOR_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { /** * A delegator forwards messages to a delegate object. * Delegators are used when you need to multiplex messages * toward any number of target objects. * For example, many controls may be connected to FXDelegator, * instead of directly to the document object. Changing the * delegate in FXDelegator will then reconnect the controls with their * new target. */ class FXAPI FXDelegator : public FXObject { FXDECLARE(FXDelegator) protected: FXObject *delegate; private: FXDelegator(const FXDelegator&); FXDelegator &operator=(const FXDelegator&); public: virtual long onDefault(FXObject*,FXSelector,void*); public: /// Construct a delegator FXDelegator(FXObject* target=NULL):delegate(target){ } /// Return delegate object FXObject* getDelegate() const { return delegate; } /// Change delegate object void setDelegate(FXObject* target){ delegate=target; } /// Always trash during detroy virtual ~FXDelegator(){ delegate=(FXObject*)-1L; } }; } #endif fox-1.6.49/include/FXXBMImage.h0000664000175000017500000000766212130340076012764 00000000000000/******************************************************************************** * * * X B M I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2003,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXXBMImage.h,v 1.12 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXXBMIMAGE_H #define FXXBMIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// X Bitmap image class FXAPI FXXBMImage : public FXImage { FXDECLARE(FXXBMImage) protected: FXXBMImage(){} private: FXXBMImage(const FXXBMImage&); FXXBMImage &operator=(const FXXBMImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct image from memory stream formatted in X Bitmap format FXXBMImage(FXApp* a,const FXuchar *pixels=NULL,const FXuchar *mask=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in X Bitmap format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in X Bitmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXXBMImage(); }; #ifndef FXLOADXBM #define FXLOADXBM /** * Check if stream contains a XBM, return TRUE if so. */ extern FXAPI bool fxcheckXBM(FXStream& store); /** * Load an XBM (X Bitmap) from pixel array and mask array. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadXBM(FXColor*& data,const FXuchar *pix,const FXuchar *msk,FXint width,FXint height); /** * Load an XBM (X Bitmap) file from a stream. * Upon successful return, the pixel array and size, and hot-spot are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadXBM(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXint& hotx,FXint& hoty); /** * Save an XBM (X Bitmap) file to a stream; if the parameters hotx and hoty are set * to -1, no hotspot location is saved. */ extern FXAPI bool fxsaveXBM(FXStream& store,const FXColor *data,FXint width,FXint height,FXint hotx=-1,FXint hoty=-1); /** * Save a PostScript file to a stream; format the picture to the maximal * size that fits within the given margins of the indicated paper size. */ extern FXAPI bool fxsavePS(FXStream& store,const FXColor *data,FXint width,FXint height,FXint paperw=612,FXint paperh=792,FXint margin=35,bool color=true); #endif } #endif fox-1.6.49/include/FXBitmapFrame.h0000664000175000017500000000727012130340076013555 00000000000000/******************************************************************************** * * * B i t m a p F r a m e W i d g e t * * * ********************************************************************************* * Copyright (C) 2001,2006 by H. J. Daniel III. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXBitmapFrame.h,v 1.6 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXBITMAPFRAME_H #define FXBITMAPFRAME_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /** * The bitmap frame is a simple frame widget displaying an monochrome bitmap * image; the bitmap is not owned by the bitmap frame so it must be explicitly * deleted elsewhere. */ class FXAPI FXBitmapFrame : public FXFrame { FXDECLARE(FXBitmapFrame) protected: FXBitmap *bitmap; // The bitmap being displayed FXColor onColor; // Color for on pixels FXColor offColor; // Color for off pixels protected: FXBitmapFrame(); private: FXBitmapFrame(const FXBitmapFrame&); FXBitmapFrame &operator=(const FXBitmapFrame&); public: long onPaint(FXObject*,FXSelector,void* ptr); public: /// Construct image frame and pass it an image FXBitmapFrame(FXComposite* p,FXBitmap *bmp,FXuint opts=FRAME_SUNKEN|FRAME_THICK,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0); /// Create window virtual void create(); /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Change the image being displayed void setBitmap(FXBitmap* bmp); /// Return the current image FXBitmap* getBitmap() const { return bitmap; } /// Set on color void setOnColor(FXColor clr); /// Get on color FXColor getOnColor() const { return onColor; } /// Set off color void setOffColor(FXColor clr); /// Get off color FXColor getOffColor() const { return offColor; } /// Set the current justification mode. void setJustify(FXuint mode); /// Get the current justification mode. FXuint getJustify() const; /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy the widget, but do not destroy the image virtual ~FXBitmapFrame(); }; } #endif fox-1.6.49/include/FXSphered.h0000664000175000017500000001274212130340076012760 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n S p h e r e C l a s s * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSphered.h,v 1.17 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSPHERED_H #define FXSPHERED_H namespace FX { class FXRanged; /// Spherical bounds class FXAPI FXSphered { public: FXVec3d center; FXdouble radius; public: /// Default constructor FXSphered(){} /// Copy constructor FXSphered(const FXSphered& sphere):center(sphere.center),radius(sphere.radius){} /// Initialize from center and radius FXSphered(const FXVec3d& cen,FXdouble rad=0.0):center(cen),radius(rad){} /// Initialize from center and radius FXSphered(FXdouble x,FXdouble y,FXdouble z,FXdouble rad=0.0):center(x,y,z),radius(rad){} /// Initialize sphere to fully contain the given bounding box FXSphered(const FXRanged& bounds); /// Assignment FXSphered& operator=(const FXSphered& sphere){ center=sphere.center; radius=sphere.radius; return *this; } /// Set value from another sphere FXSphered& set(const FXSphered& sphere){ center=sphere.center; radius=sphere.radius; return *this; } /// Set value from center and radius FXSphered& set(const FXVec3d& cen,FXdouble rad){ center=cen; radius=rad; return *this; } /// Set value from center and radius FXSphered& set(FXdouble x,FXdouble y,FXdouble z,FXdouble rad){ center.set(x,y,z); radius=rad; return *this; } /// Comparison bool operator==(const FXSphered& s) const { return center==s.center && radius==s.radius;} bool operator!=(const FXSphered& s) const { return center!=s.center || radius!=s.radius;} /// Diameter of sphere FXdouble diameter() const { return radius*2.0; } /// Test if empty bool empty() const { return radius<0.0; } /// Test if sphere contains point x,y,z bool contains(FXdouble x,FXdouble y,FXdouble z) const; /// Test if sphere contains point p bool contains(const FXVec3d& p) const; /// Test if sphere contains another box bool contains(const FXRanged& box) const; /// Test if sphere contains another sphere bool contains(const FXSphered& sphere) const; /// Include point FXSphered& include(FXdouble x,FXdouble y,FXdouble z); /// Include point FXSphered& include(const FXVec3d& p); /// Expand radius to include point FXSphered& includeInRadius(FXdouble x,FXdouble y,FXdouble z); /// Expand radius to include point FXSphered& includeInRadius(const FXVec3d& p); /// Include given range into this one FXSphered& include(const FXRanged& box); /// Expand radius to include box FXSphered& includeInRadius(const FXRanged& box); /// Include given sphere into this one FXSphered& include(const FXSphered& sphere); /// Expand radius to include sphere FXSphered& includeInRadius(const FXSphered& sphere); /// Intersect sphere with normalized plane ax+by+cz+w; returns -1,0,+1 FXint intersect(const FXVec4d& plane) const; /// Intersect sphere with ray u-v bool intersect(const FXVec3d& u,const FXVec3d& v) const; /// Test if box overlaps with sphere friend FXAPI bool overlap(const FXRanged& a,const FXSphered& b); /// Test if sphere overlaps with box friend FXAPI bool overlap(const FXSphered& a,const FXRanged& b); /// Test if spheres overlap friend FXAPI bool overlap(const FXSphered& a,const FXSphered& b); /// Save object to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXSphered& sphere); /// Load object from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXSphered& sphere); }; extern FXAPI bool overlap(const FXRanged& a,const FXSphered& b); extern FXAPI bool overlap(const FXSphered& a,const FXRanged& b); extern FXAPI bool overlap(const FXSphered& a,const FXSphered& b); extern FXAPI FXStream& operator<<(FXStream& store,const FXSphered& sphere); extern FXAPI FXStream& operator>>(FXStream& store,FXSphered& sphere); } #endif fox-1.6.49/include/FXWizard.h0000664000175000017500000001204112130340076012616 00000000000000/******************************************************************************** * * * W i z a r d W i d g e t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXWizard.h,v 1.8 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXWIZARD_H #define FXWIZARD_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { class FXImage; class FXIcon; class FXImageFrame; class FXButton; class FXSwitcher; /** * A Wizard widget guides the user through a number of panels * in a predefined sequence; each step must be completed before * moving on to the next step. * For example, a Wizard may be used to install software components, * and ask various questions at each step in the installation. */ class FXAPI FXWizard : public FXDialogBox { FXDECLARE(FXWizard) protected: FXHorizontalFrame *buttons; // Button frame FXImageFrame *sidebar; // Sidebar comprising image FXButton *advance; // Advance to next stage FXButton *retreat; // Retreat to last stage FXButton *finish; // Finish panel FXButton *cancel; // Cancel button FXSwitcher *panels; // Sub panels FXIcon *finishicon; FXIcon *nexticon; FXIcon *backicon; protected: FXWizard(){} void construct(); private: FXWizard(const FXWizard&); FXWizard &operator=(const FXWizard&); public: long onUpdFinish(FXObject*,FXSelector,void*); long onCmdNext(FXObject*,FXSelector,void*); long onUpdNext(FXObject*,FXSelector,void*); long onCmdBack(FXObject*,FXSelector,void*); long onUpdBack(FXObject*,FXSelector,void*); public: enum { ID_NEXT=FXDialogBox::ID_LAST, ID_BACK, ID_LAST }; public: /// Construct free-floating Wizard FXWizard(FXApp* a,const FXString& name,FXImage *image,FXuint opts=DECOR_TITLE|DECOR_BORDER|DECOR_RESIZE,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=10,FXint pr=10,FXint pt=10,FXint pb=10,FXint hs=10,FXint vs=10); /// Construct Wizard which will always float over the owner window FXWizard(FXWindow* owner,const FXString& name,FXImage *image,FXuint opts=DECOR_TITLE|DECOR_BORDER|DECOR_RESIZE,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=10,FXint pr=10,FXint pt=10,FXint pb=10,FXint hs=10,FXint vs=10); /// Return a pointer to the button frame FXHorizontalFrame *buttonFrame() const { return buttons; } /// Return a pointer to the "Advance" button FXButton *advanceButton() const { return advance; } /// Return a pointer to the "Retreat" button FXButton *retreatButton() const { return retreat; } /// Return a pointer to the "Finish" button FXButton *finishButton() const { return finish; } /// Return a pointer to the "Cancel" button FXButton *cancelButton() const { return cancel; } /// Return the container used as parent for the subpanels FXSwitcher *getContainer() const { return panels; } /// Change the image being displayed void setImage(FXImage* img); /// Return the current image FXImage* getImage() const; /// Return number of panels FXint getNumPanels() const; /// Bring the child window at index to the top void setCurrentPanel(FXint index); /// Return the index of the child window currently on top FXint getCurrentPanel() const; /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); // Destroy virtual ~FXWizard(); }; } #endif fox-1.6.49/include/FXCP866Codec.h0000644000175000017500000000107711637250333013076 00000000000000#ifndef FXCP866CODEC_H #define FXCP866CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP866 Codec class FXAPI FXCP866Codec : public FXTextCodec { FXDECLARE(FXCP866Codec) public: FXCP866Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP866Codec(){} }; } #endif fox-1.6.49/include/FXMenuCommand.h0000664000175000017500000000751312130340076013571 00000000000000/******************************************************************************** * * * M e n u C o m m a n d W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuCommand.h,v 1.30 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUCOMMAND_H #define FXMENUCOMMAND_H #ifndef FXMENUCAPTION_H #include "FXMenuCaption.h" #endif namespace FX { /** * The menu command widget is used to invoke a command in the * application from a menu. Menu commands may reflect * the state of the application by graying out, or becoming hidden. * When activated, a menu command sends a SEL_COMMAND to its target. */ class FXAPI FXMenuCommand : public FXMenuCaption { FXDECLARE(FXMenuCommand) protected: FXString accel; // Accelerator string FXHotKey acckey; // Accelerator key protected: FXMenuCommand(); private: FXMenuCommand(const FXMenuCommand&); FXMenuCommand &operator=(const FXMenuCommand&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onButtonPress(FXObject*,FXSelector,void*); long onButtonRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCmdAccel(FXObject*,FXSelector,void*); public: /// Construct a menu command FXMenuCommand(FXComposite* p,const FXString& text,FXIcon* ic=NULL,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Yes it can receive the focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Set accelerator text void setAccelText(const FXString& text); /// Return accelarator text FXString getAccelText() const { return accel; } /// Save menu to a stream virtual void save(FXStream& store) const; /// Load menu from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXMenuCommand(); }; } #endif fox-1.6.49/include/FXPCXIcon.h0000664000175000017500000000621612130340076012630 00000000000000/******************************************************************************** * * * P C X I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Janusz Ganczarski. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPCXIcon.h,v 1.18 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXPCXICON_H #define FXPCXICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// PCX icon class FXAPI FXPCXIcon : public FXIcon { FXDECLARE(FXPCXIcon) protected: FXPCXIcon(){} private: FXPCXIcon(const FXPCXIcon&); FXPCXIcon &operator=(const FXPCXIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in PCX file format FXPCXIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in PCX file format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in PCX file format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXPCXIcon(); }; /** * Check if stream contains a PCX, return TRUE if so. */ extern FXAPI bool fxcheckPCX(FXStream& store); /** * Load an PCX (PC Paintbrush) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadPCX(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an PCX (PC Paintbrush) file to a stream. */ extern FXAPI bool fxsavePCX(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXToolBarGrip.h0000664000175000017500000000765312130340076013557 00000000000000/******************************************************************************** * * * T o o l B a r G r i p W i d g e t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXToolBarGrip.h,v 1.20 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTOOLBARGRIP_H #define FXTOOLBARGRIP_H #ifndef FXDOCKHANDLER_H #include "FXDockHandler.h" #endif namespace FX { /// Tool Bar Grip styles enum { TOOLBARGRIP_SINGLE = 0, /// Single bar mode for movable toolbars TOOLBARGRIP_DOUBLE = 0x00008000 /// Double bar mode for dockable toolbars }; /** * A toolbar grip is used to move its container, a dock bar. * The grip draws either a single or double bar; it is customary * to use the single bar grip for toolbar-rearrangements only, * and use the double-bar when the toolbar needs to be floated * or docked. * The toolbar grip is automatically oriented properly by the * the toolbar widget, similar to the FXSeparator widget. * Holding the Control Key while dragging the grip will prevent * the toolbar from docking when it is near a dock site. */ class FXAPI FXToolBarGrip : public FXDockHandler { FXDECLARE(FXToolBarGrip) protected: FXColor activeColor; // Color when active protected: FXToolBarGrip(); private: FXToolBarGrip(const FXToolBarGrip&); FXToolBarGrip& operator=(const FXToolBarGrip&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); public: /// Construct toolbar grip FXToolBarGrip(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=TOOLBARGRIP_SINGLE,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// The grip can not receive the focus virtual bool canFocus() const; /// Change toolbar grip to double void setDoubleBar(FXbool dbl=TRUE); /// Return TRUE if toolbar grip is displayed as a double bar FXbool isDoubleBar() const; /// Set the active color void setActiveColor(FXColor clr); /// Get the active color FXColor getActiveColor() const { return activeColor; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FX4Splitter.h0000664000175000017500000001573112130340076013261 00000000000000/******************************************************************************** * * * F o u r - W a y S p l i t t e r * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FX4Splitter.h,v 1.30 2006/02/20 03:32:12 fox Exp $ * ********************************************************************************/ #ifndef FX4SPLITTER_H #define FX4SPLITTER_H #ifndef FXCOMPOSITE_H #include "FXComposite.h" #endif namespace FX { // Splitter options enum { FOURSPLITTER_TRACKING = 0x00008000, // Track continuously during split FOURSPLITTER_NORMAL = 0 }; /** * The four-way splitter is a layout manager which manages * four children like four panes in a window. * You can use a four-way splitter for example in a CAD program * where you may want to maintain three orthographic views, and * one oblique view of a model. * The four-way splitter allows interactive repartitioning of the * panes by means of moving the central splitter bars. * When the four-way splitter is itself resized, each child is * proportionally resized, maintaining the same split-percentage. * The four-way splitter widget sends a SEL_CHANGED to its target * during the resizing of the panes; at the end of the resize interaction, * it sends a SEL_COMMAND to signify that the resize operation is complete. */ class FXAPI FX4Splitter : public FXComposite { FXDECLARE(FX4Splitter) private: FXint splitx; // Current x split FXint splity; // Current y split FXint barsize; // Size of the splitter bar FXint fhor; // Horizontal split fraction FXint fver; // Vertical split fraction FXint offx; FXint offy; FXuchar mode; protected: FX4Splitter(); FXuchar getMode(FXint x,FXint y); void moveSplit(FXint x,FXint y); void drawSplit(FXint x,FXint y,FXuint m); void adjustLayout(); private: FX4Splitter(const FX4Splitter&); FX4Splitter &operator=(const FX4Splitter&); public: long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); long onCmdExpand(FXObject*,FXSelector,void*); long onUpdExpand(FXObject*,FXSelector,void*); public: enum { ExpandNone = 0, /// None expanded ExpandTopLeft = 1, /// Expand top left child ExpandTopRight = 2, /// Expand top right child ExpandBottomLeft = 4, /// Expand bottom left child ExpandBottomRight = 8, /// Expand bottom right child ExpandTop = ExpandTopLeft|ExpandTopRight, /// Expand top children ExpandBottom = ExpandBottomLeft|ExpandBottomRight, /// Expand bottom children ExpandLeft = ExpandTopLeft|ExpandBottomLeft, /// Expand left children ExpandRight = ExpandTopRight|ExpandBottomRight, /// Expand right children ExpandAll = ExpandLeft|ExpandRight /// Expand all children }; public: enum { ID_EXPAND_NONE=FXComposite::ID_LAST+ExpandNone, ID_EXPAND_TOP=ID_EXPAND_NONE+ExpandTop, ID_EXPAND_BOTTOM=ID_EXPAND_NONE+ExpandBottom, ID_EXPAND_LEFT=ID_EXPAND_NONE+ExpandLeft, ID_EXPAND_RIGHT=ID_EXPAND_NONE+ExpandRight, ID_EXPAND_TOPLEFT=ID_EXPAND_NONE+ExpandTopLeft, ID_EXPAND_TOPRIGHT=ID_EXPAND_NONE+ExpandTopRight, ID_EXPAND_BOTTOMLEFT=ID_EXPAND_NONE+ExpandBottomLeft, ID_EXPAND_BOTTOMRIGHT=ID_EXPAND_NONE+ExpandBottomRight, ID_EXPAND_ALL=ID_EXPAND_NONE+ExpandAll, ID_LAST }; public: /// Create 4-way splitter, initially shown as four unexpanded panes FX4Splitter(FXComposite* p,FXuint opts=FOURSPLITTER_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create 4-way splitter, initially shown as four unexpanded panes; notifies target about size changes FX4Splitter(FXComposite* p,FXObject* tgt,FXSelector sel,FXuint opts=FOURSPLITTER_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Get top left child, if any FXWindow *getTopLeft() const; /// Get top right child, if any FXWindow *getTopRight() const; /// Get bottom left child, if any FXWindow *getBottomLeft() const; /// Get bottom right child, if any FXWindow *getBottomRight() const; /// Get horizontal split fraction FXint getHSplit() const { return fhor; } /// Get vertical split fraction FXint getVSplit() const { return fver; } /// Change horizontal split fraction void setHSplit(FXint s); /// Change vertical split fraction void setVSplit(FXint s); /// Perform layout virtual void layout(); /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Return current splitter style FXuint getSplitterStyle() const; /// Change splitter style void setSplitterStyle(FXuint style); /// Change splitter bar width void setBarSize(FXint bs); /// Get splitter bar width FXint getBarSize() const { return barsize; } /// Change set of expanded children void setExpanded(FXuint set=FX4Splitter::ExpandAll); /// Get set of expanded children FXuint getExpanded() const; /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/fxver.h0000664000175000017500000000030412130342444012252 00000000000000#ifndef FXVER_H #define FXVER_H // FOX version #define FOX_MAJOR 1 #define FOX_MINOR 6 #define FOX_LEVEL 49 // FOX byte order #ifndef FOX_BIGENDIAN #define FOX_BIGENDIAN 0 #endif #endif fox-1.6.49/include/FXDLL.h0000664000175000017500000000467612130340076012010 00000000000000/******************************************************************************** * * * D y n a m i c L i n k L i b r a r y S u p p o r t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDLL.h,v 1.8 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDLL_H #define FXDLL_H namespace FX { /** * Open library with given name, returning handle to the * library, or NULL if the operation failed. */ extern FXAPI void* fxdllOpen(const FXchar *dllname); /** * Close library represented by dllhandle. */ extern FXAPI void fxdllClose(void* dllhandle); /** * Return address of the symbol in the library represented by * dllhandle, or NULL if the operation failed. */ extern FXAPI void* fxdllSymbol(void* dllhandle,const FXchar* dllsymbol); /** * Return the string error message when loading dll's. */ extern FXAPI FXString fxdllError(); } #endif fox-1.6.49/include/FXCP850Codec.h0000644000175000017500000000110011637250333013052 00000000000000#ifndef FXCP850CODEC_H #define FXCP850CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP8502 Codec class FXAPI FXCP850Codec : public FXTextCodec { FXDECLARE(FXCP850Codec) public: FXCP850Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP850Codec(){} }; } #endif fox-1.6.49/include/FXPNGImage.h0000664000175000017500000000635312130340076012756 00000000000000/******************************************************************************** * * * P N G I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPNGImage.h,v 1.22 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXPNGIMAGE_H #define FXPNGIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// Portable Network Graphics (PNG) Image class class FXAPI FXPNGImage : public FXImage { FXDECLARE(FXPNGImage) protected: FXPNGImage(){} private: FXPNGImage(const FXPNGImage&); FXPNGImage &operator=(const FXPNGImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an image from memory stream formatted in PNG format FXPNGImage(FXApp *a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// True if format is supported static const bool supported; /// Save pixels into stream in PNG format virtual bool loadPixels(FXStream& store); /// Load pixels from stream in PNG format virtual bool savePixels(FXStream& store) const; /// Destroy virtual ~FXPNGImage(); }; /** * Check if stream contains a PNG, return TRUE if so. */ extern FXAPI bool fxcheckPNG(FXStream& store); /** * Load an PNG (Portable Network Graphics) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadPNG(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an PNG (Portable Network Graphics) file to a stream. */ extern FXAPI bool fxsavePNG(FXStream& store,const FXColor* data,FXint width,FXint height); } #endif fox-1.6.49/include/FXToolBar.h0000664000175000017500000000713612130340076012731 00000000000000/******************************************************************************** * * * T o o l B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXToolBar.h,v 1.24 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTOOLBAR_H #define FXTOOLBAR_H #ifndef FXDOCKBAR_H #include "FXDockBar.h" #endif namespace FX { class FXDockSite; /** * A tool bar widget can be docked in a dock site; it automatically * adjusts its orientation based on the orientation of the dock site, * and adjusts the layout options accordingly. * See dock bar widget for more information on the docking behavior. */ class FXAPI FXToolBar : public FXDockBar { FXDECLARE(FXToolBar) protected: FXToolBar(){} private: FXToolBar(const FXToolBar&); FXToolBar &operator=(const FXToolBar&); public: long onCmdDockFlip(FXObject*,FXSelector,void*); long onUpdDockFlip(FXObject*,FXSelector,void*); public: /// Construct floatable toolbar, initially docked under parent p FXToolBar(FXComposite* p,FXComposite* q,FXuint opts=LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=3,FXint pr=3,FXint pt=2,FXint pb=2,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Construct a non-floatable toolbar FXToolBar(FXComposite* p,FXuint opts,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=2,FXint pr=3,FXint pt=3,FXint pb=2,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Dock and optionally flip orientation of toolbar virtual void dock(FXDockSite* docksite,FXWindow* before=NULL,FXbool notify=FALSE); /// Dock and optionally flip orientation of toolbar virtual void dock(FXDockSite* docksite,FXint localx,FXint localy,FXbool notify); /// Set docking side void setDockingSide(FXuint side=LAYOUT_SIDE_TOP); /// Return docking side FXuint getDockingSide() const; }; } #endif fox-1.6.49/include/FXDockHandler.h0000664000175000017500000000722012130340076013537 00000000000000/******************************************************************************** * * * D o c k H a n d l e r W i d g e t * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDockHandler.h,v 1.3 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDOCKHANDLER_H #define FXDOCKHANDLER_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /** * The dock handler exists as a common base class for tool bar grip * and dock title. */ class FXAPI FXDockHandler : public FXFrame { FXDECLARE_ABSTRACT(FXDockHandler) protected: FXString tip; // Tool tip FXString help; // Help string private: FXID xxx; protected: FXDockHandler(); private: FXDockHandler(const FXDockHandler&); FXDockHandler& operator=(const FXDockHandler&); public: long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); protected: FXDockHandler(FXComposite* p,FXObject* tgt,FXSelector sel,FXuint opts,FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb); public: /// The grip can receive the focus virtual bool canFocus() const; /// Set the status line help text for grip void setHelpText(const FXString& text){ help=text; } /// Get the status line help text for grip const FXString& getHelpText() const { return help; } /// Set the tool tip message for the grip void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for the grip const FXString& getTipText() const { return tip; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXRangef.h0000664000175000017500000001345412130340076012571 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n R a n g e C l a s s * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRangef.h,v 1.16 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXRANGEF_H #define FXRANGEF_H namespace FX { class FXSpheref; /// Bounds class FXAPI FXRangef { public: FXVec3f lower; FXVec3f upper; public: /// Default constructor FXRangef(){} /// Copy constructor FXRangef(const FXRangef& bounds):lower(bounds.lower),upper(bounds.upper){} /// Initialize from two vectors FXRangef(const FXVec3f& lo,const FXVec3f& hi):lower(lo),upper(hi){} /// Initialize from six numbers FXRangef(FXfloat xlo,FXfloat xhi,FXfloat ylo,FXfloat yhi,FXfloat zlo,FXfloat zhi):lower(xlo,ylo,zlo),upper(xhi,yhi,zhi){} /// Initialize box to fully contain the given bounding sphere FXRangef(const FXSpheref& sphere); /// Assignment FXRangef& operator=(const FXRangef& bounds){ lower=bounds.lower; upper=bounds.upper; return *this; } /// Set value from another range FXRangef& set(const FXRangef& bounds){ lower=bounds.lower; upper=bounds.upper; return *this; } /// Set value from two vectors FXRangef& set(const FXVec3f& lo,const FXVec3f& hi){ lower=lo; upper=hi; return *this; } /// Set value from six numbers FXRangef& set(FXfloat xlo,FXfloat xhi,FXfloat ylo,FXfloat yhi,FXfloat zlo,FXfloat zhi){ lower.set(xlo,ylo,zlo); upper.set(xhi,yhi,zhi); return *this; } /// Indexing with 0..1 FXVec3f& operator[](FXint i){ return (&lower)[i]; } /// Indexing with 0..1 const FXVec3f& operator[](FXint i) const { return (&lower)[i]; } /// Comparison bool operator==(const FXRangef& r) const { return lower==r.lower && upper==r.upper; } bool operator!=(const FXRangef& r) const { return lower!=r.lower || upper!=r.upper; } /// Width of box FXfloat width() const { return upper.x-lower.x; } /// Height of box FXfloat height() const { return upper.y-lower.y; } /// Depth of box FXfloat depth() const { return upper.z-lower.z; } /// Longest side FXfloat longest() const; /// shortest side FXfloat shortest() const; /// Length of diagonal FXfloat diameter() const; /// Get radius of box FXfloat radius() const; /// Compute diagonal FXVec3f diagonal() const; /// Get center of box FXVec3f center() const; /// Test if empty bool empty() const; /// Test if box contains point x,y,z bool contains(FXfloat x,FXfloat y,FXfloat z) const; /// Test if box contains point p bool contains(const FXVec3f& p) const; /// Test if box properly contains another box bool contains(const FXRangef& bounds) const; /// Test if box properly contains sphere bool contains(const FXSpheref& sphere) const; /// Include point FXRangef& include(FXfloat x,FXfloat y,FXfloat z); /// Include point FXRangef& include(const FXVec3f& v); /// Include given range into box FXRangef& include(const FXRangef& box); /// Include given sphere into this box FXRangef& include(const FXSpheref& sphere); /// Intersect box with normalized plane ax+by+cz+w; returns -1,0,+1 FXint intersect(const FXVec4f& plane) const; /// Intersect box with ray u-v bool intersect(const FXVec3f& u,const FXVec3f& v); /// Test if boxes a and b overlap friend FXAPI bool overlap(const FXRangef& a,const FXRangef& b); /// Get corner number 0..7 FXVec3f corner(FXint c) const { return FXVec3f((&lower)[c&1].x,(&lower)[(c>>1)&1].y,(&lower)[c>>2].z); } /// Union of two boxes friend FXAPI FXRangef unite(const FXRangef& a,const FXRangef& b); /// Intersection of two boxes friend FXAPI FXRangef intersect(const FXRangef& a,const FXRangef& b); /// Save object to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXRangef& bounds); /// Load object from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXRangef& bounds); }; extern FXAPI bool overlap(const FXRangef& a,const FXRangef& b); extern FXAPI FXRangef unite(const FXRangef& a,const FXRangef& b); extern FXAPI FXRangef intersect(const FXRangef& a,const FXRangef& b); extern FXAPI FXStream& operator<<(FXStream& store,const FXRangef& bounds); extern FXAPI FXStream& operator>>(FXStream& store,FXRangef& bounds); } #endif fox-1.6.49/include/FXStatusBar.h0000664000175000017500000000650312130340076013274 00000000000000/******************************************************************************** * * * S t a t u s B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXStatusBar.h,v 1.7 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXSTATUSBAR_H #define FXSTATUSBAR_H #ifndef FXHORIZONTALFRAME_H #include "FXHorizontalFrame.h" #endif namespace FX { /// StatusBar options enum { STATUSBAR_WITH_DRAGCORNER = 0x00020000 /// Causes the DragCorner to be shown }; class FXDragCorner; class FXStatusLine; /// Status bar class FXAPI FXStatusBar : public FXHorizontalFrame { FXDECLARE(FXStatusBar) protected: FXDragCorner *corner; FXStatusLine *status; protected: FXStatusBar(){} private: FXStatusBar(const FXStatusBar&); FXStatusBar& operator=(const FXStatusBar&); public: /// Construct status bar with or without a drag corner FXStatusBar(FXComposite* p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=3,FXint pr=3,FXint pt=2,FXint pb=2,FXint hs=4,FXint vs=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Show or hide the drag corner void setCornerStyle(FXbool withcorner=TRUE); /// Return TRUE if drag corner shown FXbool getCornerStyle() const; /// Acess the status line widget FXStatusLine *getStatusLine() const { return status; } /// Access the drag corner widget FXDragCorner *getDragCorner() const { return corner; } /// Save status bar to a stream virtual void save(FXStream& store) const; /// Load status bar from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXStatusBar(); }; } #endif fox-1.6.49/include/FXGZFileStream.h0000664000175000017500000001464312130340076013664 00000000000000/******************************************************************************** * * * G Z F i l e S t r e a m C l a s s e s * * * ********************************************************************************* * Copyright (C) 2002,2006 by Sander Jansen. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGZFileStream.h,v 1.5.2.1 2007/09/28 16:42:19 fox Exp $ * ********************************************************************************/ #ifdef HAVE_ZLIB_H #ifndef FXGZFILESTREAM_H #define FXGZFILESTREAM_H #ifndef FXFILESTREAM_H #include "FXFileStream.h" #endif namespace FX { struct ZBlock; /// GZIP compressed stream class FXAPI FXGZFileStream : public FXFileStream { private: ZBlock *z; int f; protected: virtual FXuval writeBuffer(FXuval count); virtual FXuval readBuffer(FXuval count); public: /// Create GZIP compressed file stream FXGZFileStream(const FXObject* cont=NULL); /// Open file stream bool open(const FXString& filename,FXStreamDirection save_or_load,FXuval size=8192); /// Flush buffer virtual bool flush(); /// Close file stream virtual bool close(); /// Get position FXlong position() const { return FXStream::position(); } /// Move to position virtual bool position(FXlong,FXWhence){ return FALSE; } /// Save single items to stream FXGZFileStream& operator<<(const FXuchar& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXchar& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXushort& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXshort& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXuint& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXint& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXfloat& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXdouble& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXlong& v){ FXStream::operator<<(v); return *this; } FXGZFileStream& operator<<(const FXulong& v){ FXStream::operator<<(v); return *this; } /// Save arrays of items to stream FXGZFileStream& save(const FXuchar* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXchar* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXushort* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXshort* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXuint* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXint* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXfloat* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXdouble* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXlong* p,FXuval n){ FXStream::save(p,n); return *this; } FXGZFileStream& save(const FXulong* p,FXuval n){ FXStream::save(p,n); return *this; } /// Load single items from stream FXGZFileStream& operator>>(FXuchar& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXchar& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXushort& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXshort& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXuint& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXint& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXfloat& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXdouble& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXlong& v){ FXStream::operator>>(v); return *this; } FXGZFileStream& operator>>(FXulong& v){ FXStream::operator>>(v); return *this; } /// Load arrays of items from stream FXGZFileStream& load(FXuchar* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXchar* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXushort* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXshort* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXuint* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXint* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXfloat* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXdouble* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXlong* p,FXuval n){ FXStream::load(p,n); return *this; } FXGZFileStream& load(FXulong* p,FXuval n){ FXStream::load(p,n); return *this; } /// Save object FXGZFileStream& saveObject(const FXObject* v){ FXStream::saveObject(v); return *this; } /// Load object FXGZFileStream& loadObject(FXObject*& v){ FXStream::loadObject(v); return *this; } /// Clean up virtual ~FXGZFileStream(); }; } #endif #endif fox-1.6.49/include/FXDCPrint.h0000664000175000017500000002572112130340076012672 00000000000000/******************************************************************************** * * * D e v i c e C o n t e x t F o r P r i n t i n g * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDCPrint.h,v 1.30 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDCPRINT_H #define FXDCPRINT_H #ifndef FXDC_H #include "FXDC.h" #endif ////////////////////////////// UNDER DEVELOPMENT ////////////////////////////// namespace FX { class FXApp; class FXDrawable; class FXImage; class FXBitmap; class FXIcon; class FXFont; /// Printer flags enum FXPrintFlags { PRINT_DEST_PAPER = 0, /// Send print to paper PRINT_DEST_FILE = 1, /// Send print to file PRINT_PAGES_ALL = 0, /// Print all pages PRINT_PAGES_EVEN = 2, /// Print even pages only PRINT_PAGES_ODD = 4, /// Print odd pages only PRINT_PAGES_RANGE = 8, /// Print range of pages PRINT_COLLATE_NORMAL = 0, /// Normal collate order PRINT_COLLATE_REVERSED = 16, /// Reversed collate order PRINT_PORTRAIT = 0, /// Portrait orientation PRINT_LANDSCAPE = 32, /// Landscape orientation PRINT_BLACKANDWHITE = 0, /// Black and white output PRINT_COLOR = 64, /// Color output PRINT_NOBOUNDS = 128 /// Must determine bounding box }; /// Printer media size enum FXMediaSize { MEDIA_CUSTOM = 0, /// Custom paper size MEDIA_USLETTER = 1, /// US Letter size MEDIA_LEGAL = 2, /// US Legal size MEDIA_A4 = 3, /// A4 MEDIA_ENVELOPE = 4 /// #10 Envelope }; /// Bounding box struct FXPSBounds { FXdouble xmin; FXdouble xmax; FXdouble ymin; FXdouble ymax; }; /// Describes printer struct FXAPI FXPrinter { FXString name; /// Printer name FXuint firstpage; /// First page that can be printed FXuint lastpage; /// Last page that can be printed FXuint currentpage; /// Current page to print FXuint frompage; /// On output, this is the first page to print FXuint topage; /// On output, last page to print FXuint mediasize; /// Media size index FXdouble mediawidth; /// Width of paper in points [1/72 of an inch] FXdouble mediaheight; /// Height of paper in points FXdouble leftmargin; /// Left margin FXdouble rightmargin; /// Right margin FXdouble topmargin; /// Top margin FXdouble bottommargin; /// Bottom margin FXuint numcopies; /// Number of copies FXuint flags; /// Flags }; /// Postscript Printer Device Context class FXAPI FXDCPrint : public FXDC { // friend class FXGLViewer; // This is TEMPORARY!!! protected: void *psout; // File Stream for PS output FXFont *font; FXuint flags; FXint Xr,Yr; FXdouble mediawidth; // Media width FXdouble mediaheight; // Media height FXPSBounds mediabb; // Media bounding box FXPSBounds docbb; // Document bounding box FXPSBounds pagebb; // Page bounding box FXint pagecount; // Number of pages printed FXint nchars; // Number of characters on a line FXint pxmin; // min X coord in content FXint pymin; // min Y coord in content FXint pxmax; // max X coord in content FXint pymax; // max Y coord in content protected: void bbox(FXfloat x,FXfloat y); void tfm(FXfloat& xo,FXfloat& yo,FXfloat xi,FXfloat yi); private: FXDCPrint(); FXDCPrint(const FXDCPrint&); FXDCPrint &operator=(const FXDCPrint&); public: /// Construct FXDCPrint(FXApp* a); /// Generate print job prolog FXbool beginPrint(FXPrinter& job); /// Generate print job epilog FXbool endPrint(); /// Generate begin of page FXbool beginPage(FXuint page=1); /// Generate end of page FXbool endPage(); FXbool setContentRange(FXint pxmin, FXint pymin, FXint pxmax, FXint pymax); /// Draw points virtual void drawPoint(FXint x,FXint y); virtual void drawPoints(const FXPoint* points,FXuint npoints); virtual void drawPointsRel(const FXPoint* points,FXuint npoints); /// Draw lines virtual void drawLine(FXint x1,FXint y1,FXint x2,FXint y2); virtual void drawLines(const FXPoint* points,FXuint npoints); virtual void drawLinesRel(const FXPoint* points,FXuint npoints); virtual void drawLineSegments(const FXSegment* segments,FXuint nsegments); /// Draw rectangles virtual void drawRectangle(FXint x,FXint y,FXint w,FXint h); virtual void drawRectangles(const FXRectangle* rectangles,FXuint nrectangles); /// Draw rounded rectangle with ellipse with ew and ellips height eh virtual void drawRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh); /// Draw arcs virtual void drawArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void drawArcs(const FXArc* arcs,FXuint narcs); /// Draw ellipse virtual void drawEllipse(FXint x,FXint y,FXint w,FXint h); /// Filled rectangles virtual void fillRectangle(FXint x,FXint y,FXint w,FXint h); virtual void fillRectangles(const FXRectangle* rectangles,FXuint nrectangles); /// Filled rounded rectangle with ellipse with ew and ellips height eh virtual void fillRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh); /// Fill chord virtual void fillChord(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void fillChords(const FXArc* chords,FXuint nchords); /// Draw arcs virtual void fillArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void fillArcs(const FXArc* arcs,FXuint narcs); /// Fill ellipse virtual void fillEllipse(FXint x,FXint y,FXint w,FXint h); /// Filled polygon virtual void fillPolygon(const FXPoint* points,FXuint npoints); virtual void fillConcavePolygon(const FXPoint* points,FXuint npoints); virtual void fillComplexPolygon(const FXPoint* points,FXuint npoints); /// Filled polygon with relative points virtual void fillPolygonRel(const FXPoint* points,FXuint npoints); virtual void fillConcavePolygonRel(const FXPoint* points,FXuint npoints); virtual void fillComplexPolygonRel(const FXPoint* points,FXuint npoints); /// Draw hashed box virtual void drawHashBox(FXint x,FXint y,FXint w,FXint h,FXint b=1); /// Draw area from source virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy); /// Draw area stretched area from source virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy,FXint dw,FXint dh); /// Draw image virtual void drawImage(const FXImage* image,FXint dx,FXint dy); /// Draw bitmap virtual void drawBitmap(const FXBitmap* bitmap,FXint dx,FXint dy); /// Draw icon virtual void drawIcon(const FXIcon* icon,FXint dx,FXint dy); virtual void drawIconShaded(const FXIcon* icon,FXint dx,FXint dy); virtual void drawIconSunken(const FXIcon* icon,FXint dx,FXint dy); /// Draw string with base line starting at x, y virtual void drawText(FXint x,FXint y,const FXString& string); virtual void drawText(FXint x,FXint y,const FXchar* string,FXuint length); /// Draw text starting at x, y over filled background virtual void drawImageText(FXint x,FXint y,const FXString& string); virtual void drawImageText(FXint x,FXint y,const FXchar* string,FXuint length); /// Set foreground/background drawing color virtual void setForeground(FXColor clr); virtual void setBackground(FXColor clr); /// Set dash pattern virtual void setDashes(FXuint dashoffset,const FXchar *dashlist,FXuint n); /// Set line width virtual void setLineWidth(FXuint linewidth=0); /// Set line cap style virtual void setLineCap(FXCapStyle capstyle=CAP_BUTT); /// Set line join style virtual void setLineJoin(FXJoinStyle joinstyle=JOIN_MITER); /// Set line style virtual void setLineStyle(FXLineStyle linestyle=LINE_SOLID); /// Set fill style virtual void setFillStyle(FXFillStyle fillstyle=FILL_SOLID); /// Set fill rule virtual void setFillRule(FXFillRule fillrule=RULE_EVEN_ODD); /// Set blit function virtual void setFunction(FXFunction func=BLT_SRC); /// Set the tile virtual void setTile(FXImage* tile,FXint dx=0,FXint dy=0); /// Set the stipple pattern virtual void setStipple(FXBitmap *stipple,FXint dx=0,FXint dy=0); /// Set the stipple pattern virtual void setStipple(FXStipplePattern stipple,FXint dx=0,FXint dy=0); /// Set clip rectangle virtual void setClipRectangle(FXint x,FXint y,FXint w,FXint h); /// Set clip rectangle virtual void setClipRectangle(const FXRectangle& rectangle); /// Clear clipping virtual void clearClipRectangle(); /// Set clip mask virtual void setClipMask(FXBitmap* mask,FXint dx=0,FXint dy=0); /// Clear clip mask virtual void clearClipMask(); /// Set font to draw text with virtual void setFont(FXFont *fnt); /// Clip drawing by child windows virtual void clipChildren(FXbool yes); /// Temporarily public; do not rely on this!! void outhex(FXuint hex); void outf(const char* format,...); /// Cleanup virtual ~FXDCPrint(); }; } #endif fox-1.6.49/include/FX885914Codec.h0000644000175000017500000000111311637250333013101 00000000000000#ifndef FX885914CODEC_H #define FX885914CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-14 Codec class FXAPI FX885914Codec : public FXTextCodec { FXDECLARE(FX885914Codec) public: FX885914Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX885914Codec(){} }; } #endif fox-1.6.49/include/FXSlider.h0000664000175000017500000002051412130340076012604 00000000000000/******************************************************************************** * * * S l i d e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSlider.h,v 1.44 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSLIDER_H #define FXSLIDER_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Slider Control styles enum { SLIDER_HORIZONTAL = 0, /// Slider shown horizontally SLIDER_VERTICAL = 0x00008000, /// Slider shown vertically SLIDER_ARROW_UP = 0x00010000, /// Slider has arrow head pointing up SLIDER_ARROW_DOWN = 0x00020000, /// Slider has arrow head pointing down SLIDER_ARROW_LEFT = SLIDER_ARROW_UP, /// Slider has arrow head pointing left SLIDER_ARROW_RIGHT = SLIDER_ARROW_DOWN, /// Slider has arrow head pointing right SLIDER_INSIDE_BAR = 0x00040000, /// Slider is inside the slot rather than overhanging SLIDER_TICKS_TOP = 0x00080000, /// Ticks on the top of horizontal slider SLIDER_TICKS_BOTTOM = 0x00100000, /// Ticks on the bottom of horizontal slider SLIDER_TICKS_LEFT = SLIDER_TICKS_TOP, /// Ticks on the left of vertical slider SLIDER_TICKS_RIGHT = SLIDER_TICKS_BOTTOM, /// Ticks on the right of vertical slider SLIDER_NORMAL = SLIDER_HORIZONTAL }; /** * The slider widget is a valuator widget which provides simple linear value range. * Two visual appearances are supported:- the sunken look, which is enabled with * the SLIDER_INSIDE_BAR option and the regular look. The latter may have optional * arrows on the slider thumb. * While being moved, the slider sends a SEL_CHANGED message to its target; * at the end of the interaction, a SEL_COMMAND message is sent. * The message data represents the current slider value, of type FXint. */ class FXAPI FXSlider : public FXFrame { FXDECLARE(FXSlider) protected: FXint range[2]; // Reported data range FXint pos; // Reported data position FXint incr; // Increment when auto-sliding FXint delta; // Interval between ticks FXint headpos; // Head position FXint headsize; // Head size FXint slotsize; // Slot size FXColor slotColor; // Color of slot the head moves in FXint dragpoint; // Where the head is grabbed FXString help; // Help string FXString tip; // Tip string protected: FXSlider(); void drawSliderHead(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawHorzTicks(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawVertTicks(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); private: FXSlider(const FXSlider&); FXSlider &operator=(const FXSlider&); public: long onPaint(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onAutoSlide(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetRealValue(FXObject*,FXSelector,void*); long onCmdGetRealValue(FXObject*,FXSelector,void*); long onCmdSetIntRange(FXObject*,FXSelector,void*); long onCmdGetIntRange(FXObject*,FXSelector,void*); long onCmdSetRealRange(FXObject*,FXSelector,void*); long onCmdGetRealRange(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: enum{ ID_AUTOSLIDE=FXFrame::ID_LAST, ID_LAST }; public: /// Construct a slider widget FXSlider(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=SLIDER_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Returns true because a slider can receive focus virtual bool canFocus() const; /// Perform layout virtual void layout(); /// Enable the slider virtual void enable(); /// Disable the slider virtual void disable(); /// Change slider value void setValue(FXint value,FXbool notify=FALSE); /// Return slider value FXint getValue() const { return pos; } /// Change the slider's range void setRange(FXint lo,FXint hi,FXbool notify=FALSE); /// Get the slider's current range void getRange(FXint& lo,FXint& hi) const { lo=range[0]; hi=range[1]; } /// Change the slider style FXuint getSliderStyle() const; /// Get the current slider style void setSliderStyle(FXuint style); /// Get the slider's head size FXint getHeadSize() const { return headsize; } /// Change the slider's head size void setHeadSize(FXint hs); /// Get the slider's current slot size FXint getSlotSize() const { return slotsize; } /// Change the slider's slot size void setSlotSize(FXint bs); /// Get the slider's auto-increment/decrement value FXint getIncrement() const { return incr; } /// Change the slider's auto-increment/decrement value void setIncrement(FXint inc); /// Change the delta between ticks void setTickDelta(FXint dist); /// Get delta between ticks FXint getTickDelta() const { return delta; } /// Change the color of the slot the slider head moves in void setSlotColor(FXColor clr); /// Get the current slot color FXColor getSlotColor() const { return slotColor; } /// Set the help text to be displayed on the status line void setHelpText(const FXString& text){ help=text; } /// Get the current help text const FXString& getHelpText() const { return help; } /// Set the tip text to be displayed in the tooltip void setTipText(const FXString& text){ tip=text; } /// Get the current tooltip text value const FXString& getTipText() const { return tip; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy the slider virtual ~FXSlider(); }; } #endif fox-1.6.49/include/FXPath.h0000664000175000017500000001477312130340076012270 00000000000000/******************************************************************************** * * * P a t h N a m e M a n i p u l a t i o n * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPath.h,v 1.11 2006/01/23 06:03:15 fox Exp $ * ********************************************************************************/ #ifndef FXPATH_H #define FXPATH_H namespace FX { namespace FXPath { /** * Return root of absolute path; on Unix, this is just "/". On * Windows, this is "\\" or "C:\". Returns the empty string * if the given path is not absolute. */ FXString FXAPI root(const FXString& file); /** * Return the directory part of the path name. * Note that directory("/bla/bla/") is "/bla/bla" and NOT "/bla". * However, directory("/bla/bla") is "/bla" as we expect! */ FXString FXAPI directory(const FXString& file); /** * Return name and extension part of the path name. * Note that name("/bla/bla/") is "" and NOT "bla". * However, name("/bla/bla") is "bla" as we expect! */ FXString FXAPI name(const FXString& file); /// Return file title, i.e. document name only FXString FXAPI title(const FXString& file); /// Return extension part of the file name FXString FXAPI extension(const FXString& file); /// Return file name less the extension FXString FXAPI stripExtension(const FXString& file); /// Return the drive letter prefixing this file name (if any). FXString FXAPI drive(const FXString& file); /// Perform tilde or environment variable expansion FXString FXAPI expand(const FXString& file); /// Contract path based on user name and environment variable FXString FXAPI contract(const FXString& file,const FXString& user=FXString::null,const FXString& var=FXString::null); /** * Simplify a file path; the path will remain relative if it was relative, * or absolute if it was absolute. Also, a trailing "/" will be preserved * as this is important in other functions. * For example, simplify("..//aaa/./bbb//../c/") becomes "../aaa/c/". */ FXString FXAPI simplify(const FXString& file); /// Return absolute path from current directory and file name FXString FXAPI absolute(const FXString& file); /// Return absolute path from base directory and file name FXString FXAPI absolute(const FXString& base,const FXString& file); /// Return relative path of file to the current directory FXString FXAPI relative(const FXString& file); /// Return relative path of file to given base directory FXString FXAPI relative(const FXString& base,const FXString& file); /// Return path following local path separator conventions FXString FXAPI convert(const FXString& path); /// Return path to directory above input directory name FXString FXAPI upLevel(const FXString& file); /// Return true if file name is absolute bool FXAPI isAbsolute(const FXString& file); /// Return true if input directory is a top-level directory bool FXAPI isTopDirectory(const FXString& file); /// Return true if input path is a file share bool FXAPI isShare(const FXString& file); /// Enquote filename to make safe for shell FXString FXAPI enquote(const FXString& file,bool forcequotes=false); /// Dequote filename to get original again FXString FXAPI dequote(const FXString& file); /** * Perform wildcard match of a filename against a wildcard pattern. * The wildcard pattern may comprise ordinary characters or special * matching characters, as given below: * * ? Any single character. * * Zero or more of any character. * [abc] Any character from the set {a,b,c}. * [^abc] Any character BUT the ones from the set {a,b,c}. * [!abc] Ditto. * [a-zA-Z] Matches single character, which must be one of a-z or A-Z. * [^a-zA-Z] Matches single character, which must be anything other than a-z or A-Z. * [!a-zA-Z] Ditto. * pat1|pat2 Match sub-pattern pat1 or pat2. * pat1,pat2 Ditto. * (pat1|pat2) Match sub-pattern pat1 or pat2; patterns may be nested. * (pat1,pat2) Ditto. * * The special characters may be escaped to treat them as ordinary characters. * Matching may be influenced by a number of flags: * * FILEMATCH_FILE_NAME No wildcard can ever match / * FILEMATCH_NOESCAPE Backslashes don't quote special chars * FILEMATCH_PERIOD Leading . is matched only explicitly * FILEMATCH_LEADING_DIR Ignore /... after a match * FILEMATCH_CASEFOLD Compare without regard to case */ bool FXAPI match(const FXString& pattern,const FXString& file,FXuint flags=(FILEMATCH_NOESCAPE|FILEMATCH_FILE_NAME)); /** * Generate unique filename of the form pathnameXXX.ext, where * pathname.ext is the original input file, and XXX is a number, * possibly empty, that makes the file unique. */ FXString FXAPI unique(const FXString& file); /** * Search path list for this file, return full path name for first occurrence. */ FXString FXAPI search(const FXString& pathlist,const FXString& file); } } #endif fox-1.6.49/include/FXCP1256Codec.h0000644000175000017500000000110611637250333013141 00000000000000#ifndef FXCP1256CODEC_H #define FXCP1256CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1256 Codec class FXAPI FXCP1256Codec : public FXTextCodec { FXDECLARE(FXCP1256Codec) public: FXCP1256Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1256Codec(){} }; } #endif fox-1.6.49/include/FXRuler.h0000664000175000017500000002722712130340076012463 00000000000000/******************************************************************************** * * * R u l e r W i d g e t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRuler.h,v 1.36 2006/01/28 20:30:21 fox Exp $ * ********************************************************************************/ #ifndef FXRULER_H #define FXRULER_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Ruler options enum { RULER_NORMAL = 0, /// Default appearance (default) RULER_HORIZONTAL = 0, /// Ruler is horizontal (default) RULER_VERTICAL = 0x00008000, /// Ruler is vertical RULER_TICKS_OFF = 0, /// Tick marks off (default) RULER_TICKS_TOP = 0x00010000, /// Ticks on the top (if horizontal) RULER_TICKS_BOTTOM = 0x00020000, /// Ticks on the bottom (if horizontal) RULER_TICKS_LEFT = RULER_TICKS_TOP, /// Ticks on the left (if vertical) RULER_TICKS_RIGHT = RULER_TICKS_BOTTOM, /// Ticks on the right (if vertical) RULER_TICKS_CENTER = RULER_TICKS_TOP|RULER_TICKS_BOTTOM, /// Tickmarks centered RULER_NUMBERS = 0x00040000, /// Show numbers RULER_ARROW = 0x00080000, /// Draw small arrow for cursor position RULER_MARKERS = 0x00100000, /// Draw markers for indentation settings RULER_METRIC = 0, /// Metric subdivision (default) RULER_ENGLISH = 0x00200000, /// English subdivision RULER_MARGIN_ADJUST = 0x00400000, /// Allow margin adjustment RULER_ALIGN_CENTER = 0, /// Center document horizontally RULER_ALIGN_LEFT = 0x00800000, /// Align document to the left RULER_ALIGN_RIGHT = 0x01000000, /// Align document to the right RULER_ALIGN_TOP = RULER_ALIGN_LEFT, /// Align document to the top RULER_ALIGN_BOTTOM = RULER_ALIGN_RIGHT, /// Align document to the bottom RULER_ALIGN_STRETCH = RULER_ALIGN_LEFT|RULER_ALIGN_RIGHT, /// Stretch document to fit horizontally RULER_ALIGN_NORMAL = RULER_ALIGN_CENTER /// Normally, document is centered both ways }; class FXFont; /** * The ruler widget is placed alongside a document to measure position * and size of entities within the document, such as margins, paragraph * indents, and tickmarks. * The ruler widget sends a SEL_CHANGED when the indentation or margins * are interactively changed by the user. * If the document size exceeds the available space, it is possible to * scroll the document using setPosition(). When the document size is * less than the available space, the alignment options can be used to * center, left-adjust, or right-adjust the document. * Finally, a special option exists to stretch the document to the * available space, that is to say, the document will always be fitten * with given left and right edges substracted from the available space. */ class FXAPI FXRuler : public FXFrame { FXDECLARE(FXRuler) protected: FXFont *font; // Font for numbers FXint documentSize; // Size of document FXint edgeSpacing; // Edge spacing around document FXint marginLower; // Lower margin FXint marginUpper; // Upper margin FXint indentFirst; // First line paragraph indent FXint indentLower; // Lower paragraph indent FXint indentUpper; // Upper paragraph indent FXdouble pixelPerTick; // Number of pixels per tick increment FXint numberTicks; // Tick increments between numbers FXint majorTicks; // Tick increments between major ticks FXint mediumTicks; // Tick increments between medium ticks FXint tinyTicks; // Tick increments between tiny ticks FXint arrowPos; // Arrow position FXColor textColor; // Color for numbers and ticks FXint shift; // Left edge of content FXint pos; // Scroll position FXint off; // Offset item was grabbed FXString tip; // Tooltip text FXString help; // Help text FXuchar mode; // Mode widget is in protected: FXRuler(); FXint picked(FXint x,FXint y); void drawLeftArrow(FXDCWindow& dc,FXint x,FXint y); void drawRightArrow(FXDCWindow& dc,FXint x,FXint y); void drawUpArrow(FXDCWindow& dc,FXint x,FXint y); void drawDownArrow(FXDCWindow& dc,FXint x,FXint y); void drawLeftMarker(FXDCWindow& dc,FXint x,FXint y); void drawRightMarker(FXDCWindow& dc,FXint x,FXint y); void drawUpMarker(FXDCWindow& dc,FXint x,FXint y); void drawDownMarker(FXDCWindow& dc,FXint x,FXint y); protected: enum{ MOUSE_NONE, // No mouse operation MOUSE_MARG_LOWER, // Drag lower margin MOUSE_MARG_UPPER, // Drag upper margin MOUSE_PARA_FIRST, // Drag first indent MOUSE_PARA_LOWER, // Drag lower indent MOUSE_PARA_UPPER // Drag upper indent }; private: FXRuler(const FXRuler&); FXRuler &operator=(const FXRuler&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: enum{ ID_ARROW=FXFrame::ID_LAST, ID_LAST }; public: /// Construct label with given text and icon FXRuler(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=RULER_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Perform layout virtual void layout(); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set the current position void setPosition(FXint pos,FXbool notify=FALSE); /// Return the current position FXint getPosition() const { return pos; } /// Change/return content size void setContentSize(FXint size,FXbool notify=FALSE); FXint getContentSize() const; /// Get lower edge of document FXint getDocumentLower() const; /// Get upper edge of document FXint getDocumentUpper() const; /// Change/return document size void setDocumentSize(FXint size,FXbool notify=FALSE); FXint getDocumentSize() const { return documentSize; } /// Change/return document edge spacing void setEdgeSpacing(FXint space,FXbool notify=FALSE); FXint getEdgeSpacing() const { return edgeSpacing; } /// Change/return lower document margin void setMarginLower(FXint mgn,FXbool notify=FALSE); FXint getMarginLower() const { return marginLower; } /// Change/return upper document margin void setMarginUpper(FXint mgn,FXbool notify=FALSE); FXint getMarginUpper() const { return marginUpper; } /// Change/return first line indent void setIndentFirst(FXint ind,FXbool notify=FALSE); FXint getIndentFirst() const { return indentFirst; } /// Change/return lower indent void setIndentLower(FXint ind,FXbool notify=FALSE); FXint getIndentLower() const { return indentLower; } /// Change/return upper indent void setIndentUpper(FXint ind,FXbool notify=FALSE); FXint getIndentUpper() const { return indentUpper; } /// Change/return document number placement void setNumberTicks(FXint ticks,FXbool notify=FALSE); FXint getNumberTicks() const { return numberTicks; } /// Change/return document major ticks void setMajorTicks(FXint ticks,FXbool notify=FALSE); FXint getMajorTicks() const { return majorTicks; } /// Change/return document medium ticks void setMediumTicks(FXint ticks,FXbool notify=FALSE); FXint getMediumTicks() const { return mediumTicks; } /// Change/return document tiny ticks void setTinyTicks(FXint ticks,FXbool notify=FALSE); FXint getTinyTicks() const { return tinyTicks; } /// Change/return pixel per tick spacing void setPixelPerTick(FXdouble space,FXbool notify=FALSE); FXdouble getPixelPerTick() const { return pixelPerTick; } /// Set the text font void setFont(FXFont *fnt,FXbool notify=FALSE); /// Get the text font FXFont* getFont() const { return font; } /// Change arrow value, relative to document position void setValue(FXint value); /// Return arrow value in document FXint getValue() const { return arrowPos; } /// Set ruler style void setRulerStyle(FXuint style); /// Get ruler style FXuint getRulerStyle() const; /// Set ruler alignment void setRulerAlignment(FXuint alignment,FXbool notify=FALSE); /// Get ruler alignment FXuint getRulerAlignment() const; /// Get the current text color FXColor getTextColor() const { return textColor; } /// Set the current text color void setTextColor(FXColor clr); /// Set the status line help text for the ruler void setHelpText(const FXString& text){ help=text; } /// Get the status line help text for the ruler const FXString& getHelpText() const { return help; } /// Set the tool tip message for the ruler void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for the ruler const FXString& getTipText() const { return tip; } /// Save label to a stream virtual void save(FXStream& store) const; /// Load label from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXRuler(); }; } #endif fox-1.6.49/include/FXIFFImage.h0000664000175000017500000000612012130340076012726 00000000000000/******************************************************************************** * * * I F F I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXIFFImage.h,v 1.10 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXIFFIMAGE_H #define FXIFFIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /** * The IFF Image provides support for the EA/Amiga Image File Format. */ class FXAPI FXIFFImage : public FXImage { FXDECLARE(FXIFFImage) protected: FXIFFImage(){} private: FXIFFImage(const FXIFFImage&); FXIFFImage &operator=(const FXIFFImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an image from memory stream formatted as IFF format FXIFFImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in IFF format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in IFF format virtual bool loadPixels(FXStream& store); /// Destroy virtual ~FXIFFImage(); }; #ifndef FXLOADIFF #define FXLOADIFF /** * Check if stream contains a IFF, return TRUE if so. */ extern FXAPI bool fxcheckIFF(FXStream& store); /** * Load an IFF (EA Image File Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadIFF(FXStream& store,FXColor*& data,FXint& width,FXint& height); #endif } #endif fox-1.6.49/include/FXFileDict.h0000664000175000017500000002164412130340076013052 00000000000000/******************************************************************************** * * * F i l e - A s s o c i a t i o n T a b l e * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFileDict.h,v 1.31 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXFILEDICT_H #define FXFILEDICT_H #ifndef FXDICT_H #include "FXDict.h" #endif namespace FX { class FXIconDict; /// Registers stuff to know about the extension struct FXFileAssoc { FXString command; /// Command to execute FXString extension; /// Full extension name FXString mimetype; /// Mime type name FXIcon *bigicon; /// Big normal icon FXIcon *bigiconopen; /// Big open icon FXIcon *miniicon; /// Mini normal icon FXIcon *miniiconopen; /// Mini open icon FXDragType dragtype; /// Registered drag type FXuint flags; /// Flags; 1=cd, 2=term }; /** * The File Association dictionary associates a file extension with a File * Association record which contains command name, mime type, icons, and other * information about the file type. The icons referenced by the file association * are managed by the Icon Dictionary; this guarantees that each icon is loaded * only once into memory. * The associations are determined by the information by the FOX Registry settings; * each entry under the FILETYPES registry section comprises the command line, * extension name, large icon, small icon, and mime type: * * command ';' extension ';' bigicon [ ':' bigiconopen ] ';' icon [ ':' iconopen ] ';' mime [ ';' flags ] * * For example, the binding for "jpg" could be: * * xv %s &;JPEG Image;bigimage.xpm;miniimage.xpm;image/jpeg;term * * The association for a file name is determined by first looking at the entire * file name, then at the whole extension, and then at sub-extensions. * For example, "name.tar.gz", "tar.gz", and "gz" can each be given a different * file association. Directory names may also be given associations; there is * no command-line association for a directory, however. The association for a * directory is found by first checking the whole pathname, then checking the * pathname less the first component, and so on. So, "/usr/local/include", * "/local/include", and "/include" can each be given their own file associations. * If the above lookup procedure has not found a file association, the system * uses a fallback associations: for files, the fallback association is determined * by the binding "defaultfilebinding". For directories, the "defaultdirbinding" * is used, and for executables the "defaultexecbinding" is used. * The flags field is used for a number of bit-flags; two flags are currently * defined: 'cd' and 'term'. The first one is intended to cause a launcher * to execute the application in the shown directory; the second one is meant * to indicate that the application is to be ran inside a new terminal. */ class FXAPI FXFileDict : public FXDict { FXDECLARE(FXFileDict) private: FXSettings *settings; // Settings database where to get bindings FXIconDict *icons; // Icon dictionary which keeps track of loaded icons protected: FXFileDict(){} virtual void *createData(const void*); virtual void deleteData(void*); private: FXFileDict(const FXFileDict&); FXFileDict &operator=(const FXFileDict&); public: /// Registry key used to find fallback executable icons static const FXchar defaultExecBinding[]; /// Registry key used to find fallback directory icons static const FXchar defaultDirBinding[]; /// Registry key used to find fallback document icons static const FXchar defaultFileBinding[]; public: /** * Construct a dictionary mapping file-extension to file associations, * using the application registry settings as a source for the bindings. * The pointer to the application class is passed down to the icon source * which is inside the icon dictionary. */ FXFileDict(FXApp* app); /** * Construct a dictionary mapping file-extension to file associations, * using the specified settings database as a source for the bindings. * The pointer to the application class is passed down to the icon source * which is inside the icon dictionary. */ FXFileDict(FXApp* app,FXSettings* db); /// Change settings database void setSettings(FXSettings* s){ settings=s; } /// Return settings database FXSettings* getSettings() const { return settings; } /// Change icon dictionary void setIconDict(FXIconDict *icns){ icons=icns; } /// Return icon dictionary FXIconDict* getIconDict() const { return icons; } /** * Set icon search path; the initial search path is determined by the * "iconpath" registry setting in the SETTINGS section. */ void setIconPath(const FXString& path); /// Return current icon search path const FXString& getIconPath() const; /** * Replace file association. * The new association is written into the settings database under the * FILETYPES section; the format of the association is as follows: * * = " ; ; [ : ] ; [ : ] ; " * * Where is the command used to launch the application (e.g. "xv %s &"), * and is the file type string (e.g. "GIF Image"), * and are the large icons shown in "Icons" mode, * and are the small icons shown in "Details" mode, * and is the RFC2045 mime type of the file. * * For example: * * [FILETYPES] * gif="xv %s &;GIF Image;big.xpm:bigopen.xpm;mini.xpm:miniopen.xpm;image/gif" * /home/jeroen=";Home;home.xpm;minihome.xpm;application/x-folder" * */ FXFileAssoc* replace(const FXchar* ext,const FXchar* str); /// Remove file association FXFileAssoc* remove(const FXchar* ext); /// Find file association from registry FXFileAssoc* find(const FXchar* ext); /** * Determine binding for the given file. * The default implementation tries the whole filename first, * then tries the extensions. * For example, for a file "source.tar.gz": * * "source.tar.gz", * "tar.gz", * "gz" * * are tried in succession. If no association is found the * key "defaultfilebinding" is tried as a fallback association. * A NULL is returned if no association of any kind is found. */ virtual FXFileAssoc* findFileBinding(const FXchar* pathname); /** * Find directory binding from registry. * The default implementation tries the whole pathname first, * then tries successively smaller parts of the path. * For example, a pathname "/usr/people/jeroen": * * "/usr/people/jeroen" * "/people/jeroen" * "/jeroen" * * are tried in succession. If no bindings are found, the * key "defaultdirbinding" is tried as a fallback association. * A NULL is returned if no association of any kind is found. */ virtual FXFileAssoc* findDirBinding(const FXchar* pathname); /** * Determine binding for the given executable. * The default implementation returns the fallback binding associated with * the key "defaultexecbinding". * A NULL is returned if no association of any kind is found. */ virtual FXFileAssoc* findExecBinding(const FXchar* pathname); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXFileDict(); }; } #endif fox-1.6.49/include/FX88599Codec.h0000644000175000017500000000110411637250333013025 00000000000000#ifndef FX88599CODEC_H #define FX88599CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-9 Codec class FXAPI FX88599Codec : public FXTextCodec { FXDECLARE(FX88599Codec) public: FX88599Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88599Codec(){} }; } #endif fox-1.6.49/include/FXFontDialog.h0000664000175000017500000000540212130340076013407 00000000000000/******************************************************************************** * * * F o n t S e l e c t i o n D i a l o g * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFontDialog.h,v 1.14 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXFONTDIALOG_H #define FXFONTDIALOG_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { class FXFontSelector; /// Font selection dialog class FXAPI FXFontDialog : public FXDialogBox { FXDECLARE(FXFontDialog) protected: FXFontSelector *fontbox; protected: FXFontDialog(){} private: FXFontDialog(const FXFontDialog&); FXFontDialog &operator=(const FXFontDialog&); public: /// Constructor FXFontDialog(FXWindow* owner,const FXString& name,FXuint opts=0,FXint x=0,FXint y=0,FXint w=600,FXint h=380); /// Save dialog to a stream virtual void save(FXStream& store) const; /// Load dialog from a stream virtual void load(FXStream& store); /// Set the current font selection void setFontSelection(const FXFontDesc& fontdesc); /// Get the current font selection void getFontSelection(FXFontDesc& fontdesc) const; /// Destructor virtual ~FXFontDialog(); }; } #endif fox-1.6.49/include/Makefile.am0000664000175000017500000001056012130340076013007 00000000000000## Process this file with automake to produce Makefile.in foxincludedir=$(includedir)/fox-1.6 CODECS = \ FX88591Codec.h \ FX88592Codec.h \ FX88593Codec.h \ FX88594Codec.h \ FX88595Codec.h \ FX88596Codec.h \ FX88597Codec.h \ FX88598Codec.h \ FX88599Codec.h \ FX885910Codec.h \ FX885911Codec.h \ FX885913Codec.h \ FX885914Codec.h \ FX885915Codec.h \ FX885916Codec.h \ FXCP437Codec.h \ FXCP850Codec.h \ FXCP852Codec.h \ FXCP855Codec.h \ FXCP856Codec.h \ FXCP857Codec.h \ FXCP860Codec.h \ FXCP861Codec.h \ FXCP862Codec.h \ FXCP863Codec.h \ FXCP864Codec.h \ FXCP865Codec.h \ FXCP866Codec.h \ FXCP869Codec.h \ FXCP874Codec.h \ FXCP1250Codec.h \ FXCP1251Codec.h \ FXCP1252Codec.h \ FXCP1253Codec.h \ FXCP1254Codec.h \ FXCP1255Codec.h \ FXCP1256Codec.h \ FXCP1257Codec.h \ FXCP1258Codec.h \ FXKOI8RCodec.h \ FXUTF8Codec.h \ FXUTF16Codec.h \ FXUTF32Codec.h foxinclude_HEADERS = \ $(CODECS) \ FX4Splitter.h \ FX7Segment.h \ FXAccelTable.h \ FXApp.h \ FXArray.h \ FXArrowButton.h \ FXBMPIcon.h \ FXBMPImage.h \ FXBitmap.h \ FXBitmapFrame.h \ FXBitmapView.h \ FXButton.h \ FXBZFileStream.h \ FXCURCursor.h \ FXCanvas.h \ FXCheckButton.h \ FXChoiceBox.h \ FXColorBar.h \ FXColorDialog.h \ FXColorList.h \ FXColorRing.h \ FXColorSelector.h \ FXColorWell.h \ FXColorWheel.h \ FXComboBox.h \ FXComposeContext.h \ FXComposite.h \ FXCursor.h \ FXDate.h \ FXDC.h \ FXDCPrint.h \ FXDCWindow.h \ FXDLL.h \ FXDataTarget.h \ FXDebugTarget.h \ FXDelegator.h \ FXDial.h \ FXDialogBox.h \ FXDict.h \ FXDir.h \ FXDirBox.h \ FXDirDialog.h \ FXDirList.h \ FXDirSelector.h \ FXDockBar.h \ FXDockHandler.h \ FXDockSite.h \ FXDockTitle.h \ FXDocument.h \ FXDragCorner.h \ FXDrawable.h \ FXDriveBox.h \ FXElement.h \ FXException.h \ FXExpression.h \ FXExtentd.h \ FXExtentf.h \ FXFile.h \ FXFileDialog.h \ FXFileDict.h \ FXFileList.h \ FXFileSelector.h \ FXFileStream.h \ FXFoldingList.h \ FXFont.h \ FXFontDialog.h \ FXFontSelector.h \ FXFrame.h \ FXGIFCursor.h \ FXGIFIcon.h \ FXGIFImage.h \ FXGLCanvas.h \ FXGLCone.h \ FXGLContext.h \ FXGLCube.h \ FXGLCylinder.h \ FXGLObject.h \ FXGLShape.h \ FXGLSphere.h \ FXGLTriangleMesh.h \ FXGLViewer.h \ FXGLVisual.h \ FXGroupBox.h \ FXGradientBar.h \ FXGUISignal.h \ FXGZFileStream.h \ FXHash.h \ FXHeader.h \ FXHorizontalFrame.h \ FXICOIcon.h \ FXICOImage.h \ FXIFFImage.h \ FXIFFIcon.h \ FXIO.h \ FXIcon.h \ FXIconDict.h \ FXIconList.h \ FXIconSource.h \ FXId.h \ FXImage.h \ FXImageFrame.h \ FXImageView.h \ FXInputDialog.h \ FXJPGIcon.h \ FXJPGImage.h \ FXKnob.h \ FXLabel.h \ FXList.h \ FXListBox.h \ FXMDIButton.h \ FXMDIChild.h \ FXMDIClient.h \ FXMainWindow.h \ FXMat3d.h \ FXMat4d.h \ FXMat3f.h \ FXMat4f.h \ FXMatrix.h \ FXMemoryStream.h \ FXMemMap.h \ FXMenuBar.h \ FXMenuButton.h \ FXMenuCaption.h \ FXMenuCascade.h \ FXMenuCheck.h \ FXMenuRadio.h \ FXMenuCommand.h \ FXMenuPane.h \ FXMenuSeparator.h \ FXMenuTitle.h \ FXMessageBox.h \ FXObject.h \ FXObjectList.h \ FXOptionMenu.h \ FXPCXIcon.h \ FXPCXImage.h \ FXPNGIcon.h \ FXPNGImage.h \ FXPPMIcon.h \ FXPPMImage.h \ FXPacker.h \ FXPath.h \ FXPicker.h \ FXPipe.h \ FXPoint.h \ FXPopup.h \ FXPrintDialog.h \ FXProgressBar.h \ FXProgressDialog.h \ FXQuatd.h \ FXQuatf.h \ FXRASIcon.h \ FXRASImage.h \ FXRGBIcon.h \ FXRGBImage.h \ FXRadioButton.h \ FXRangef.h \ FXRanged.h \ FXRealSlider.h \ FXRealSpinner.h \ FXRecentFiles.h \ FXRectangle.h \ FXRegion.h \ FXRegistry.h \ FXReplaceDialog.h \ FXRex.h \ FXRootWindow.h \ FXRuler.h \ FXRulerView.h \ FXScrollArea.h \ FXScrollBar.h \ FXScrollPane.h \ FXScrollWindow.h \ FXSearchDialog.h \ FXSeparator.h \ FXSettings.h \ FXShell.h \ FXShutter.h \ FXSize.h \ FXSlider.h \ FXSocket.h \ FXSpinner.h \ FXSpheref.h \ FXSphered.h \ FXSplashWindow.h \ FXSplitter.h \ FXSpring.h \ FXStat.h \ FXStatusBar.h \ FXStatusLine.h \ FXStream.h \ FXString.h \ FXStringDict.h \ FXSwitcher.h \ FXSystem.h \ FXTGAIcon.h \ FXTGAImage.h \ FXTIFIcon.h \ FXTIFImage.h \ FXTabBar.h \ FXTabBook.h \ FXTabItem.h \ FXTable.h \ FXText.h \ FXTextCodec.h \ FXTextField.h \ FXThread.h \ FXToggleButton.h \ FXToolBar.h \ FXToolBarGrip.h \ FXToolBarShell.h \ FXToolBarTab.h \ FXToolTip.h \ FXTopWindow.h \ FXTranslator.h \ FXTreeList.h \ FXTreeListBox.h \ FXTriStateButton.h \ FXUndoList.h \ FXURL.h \ FXVec2d.h \ FXVec2f.h \ FXVec3d.h \ FXVec3f.h \ FXVec4d.h \ FXVec4f.h \ FXVerticalFrame.h \ FXVisual.h \ FXWindow.h \ FXWizard.h \ FXXBMIcon.h \ FXXBMImage.h \ FXXPMIcon.h \ FXXPMImage.h \ fx.h \ fx3d.h \ fxascii.h \ fxdefs.h \ fxkeys.h \ fxunicode.h \ fxver.h \ xincs.h fox-1.6.49/include/FX88593Codec.h0000644000175000017500000000110411637250333013017 00000000000000#ifndef FX88593CODEC_H #define FX88593CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-3 Codec class FXAPI FX88593Codec : public FXTextCodec { FXDECLARE(FX88593Codec) public: FX88593Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88593Codec(){} }; } #endif fox-1.6.49/include/FXJPGImage.h0000664000175000017500000000671012130340076012747 00000000000000/******************************************************************************** * * * J P E G I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2000,2006 by David Tyree. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXJPGImage.h,v 1.20 2006/01/24 13:53:11 fox Exp $ * ********************************************************************************/ #ifndef FXJPGIMAGE_H #define FXJPGIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// JPEG Image class class FXAPI FXJPGImage : public FXImage { FXDECLARE(FXJPGImage) protected: FXint quality; protected: FXJPGImage(){} private: FXJPGImage(const FXJPGImage&); FXJPGImage &operator=(const FXJPGImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an image from memory stream formatted in JPEG format FXJPGImage(FXApp *a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1,FXint q=75); /// True if format is supported static const bool supported; /// Set image quality to save with void setQuality(FXint q){ quality=q; } /// Get image quality setting FXint getQuality() const { return quality; } /// Save pixels into stream in JPEG format virtual bool loadPixels(FXStream& store); /// Load pixels from stream in JPEG format virtual bool savePixels(FXStream& store) const; /// Destroy virtual ~FXJPGImage(); }; /** * Check if stream contains a JPG, return TRUE if so. */ extern FXAPI bool fxcheckJPG(FXStream& store); /** * Load an JPEG (Joint Photographics Experts Group) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadJPG(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXint& quality); /** * Save an JPEG (Joint Photographics Experts Group) file to a stream. */ extern FXAPI bool fxsaveJPG(FXStream& store,const FXColor* data,FXint width,FXint height,FXint quality); } #endif fox-1.6.49/include/fxunicode.h0000664000175000017500000003252212130340076013112 00000000000000/******************************************************************************** * * * U N I C O D E C h a r a c t e r I n f o * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: fxunicode.h,v 1.3 2006/01/22 17:58:14 fox Exp $ * ********************************************************************************/ #ifndef FXUNICODE_H #define FXUNICODE_H namespace FX { /// General Category enum { CatNotAssigned = 0, /// Cn Other, Not Assigned (no characters in the file have this property) CatControl = 1, /// Cc Other, Control CatFormat = 2, /// Cf Other, Format CatSurrogate = 3, /// Cs Other, Surrogate CatOther = 4, /// Co Other, Private Use CatMarkNonSpacing = 5, /// Mn Mark, Nonspacing CatMarkSpacingCombining = 6, /// Mc Mark, Spacing Combining CatMarkEnclosing = 7, /// Me Mark, Enclosing CatSeparatorSpace = 8, /// Zs Separator, Space CatSeparatorLine = 9, /// Zl Separator, Line CatSeparatorParagraph = 10, /// Zp Separator, Paragraph CatLetterUpper = 11, /// Lu Letter, Uppercase CatLetterLower = 12, /// Ll Letter, Lowercase CatLetterTitle = 13, /// Lt Letter, Titlecase CatLetterModifier = 14, /// Lm Letter, Modifier CatLetterOther = 15, /// Lo Letter, Other CatNumberLetter = 16, /// Nl Number, Letter CatNumberDecimal = 17, /// Nd Number, Decimal Digit CatNumberOther = 18, /// No Number, Other CatPunctConnector = 19, /// Pc Punctuation, Connector CatPunctDash = 20, /// Pd Punctuation, Dash CatPunctOpen = 21, /// Ps Punctuation, Open CatPunctClose = 22, /// Pe Punctuation, Close CatPunctInitial = 23, /// Pi Punctuation, Initial quote (may behave like Ps or Pe depending on usage) CatPunctFinal = 24, /// Pf Punctuation, Final quote (may behave like Ps or Pe depending on usage) CatPunctOther = 25, /// Po Punctuation, Other CatSymbolMath = 26, /// Sm Symbol, Math CatSymbolCurrency = 27, /// Sc Symbol, Currency CatSymbolModifier = 28, /// Sk Symbol, Modifier CatSymbolOther = 29 /// So Symbol, Other }; /// Bidi types enum { DirL = 0, /// Left-to-Right DirLRE = 1, /// Left-to-Right Embedding DirLRO = 2, /// Left-to-Right Override DirR = 3, /// Right-to-Left DirAL = 4, /// Right-to-Left Arabic DirRLE = 5, /// Right-to-Left Embedding DirRLO = 6, /// Right-to-Left Override DirPDF = 7, /// Pop Directional Format DirEN = 8, /// European Number DirES = 9, /// European Number Separator DirET = 10, /// European Number Terminator DirAN = 11, /// Arabic Number DirCS = 12, /// Common Number Separator DirNSM = 13, /// Non-Spacing Mark DirBN = 14, /// Boundary Neutral DirB = 15, /// Paragraph Separator DirS = 16, /// Segment Separator DirWS = 17, /// Whitespace DirON = 18 /// Other Neutrals }; /// Arabic joining enum { NonJoining = 0, RightJoining = 1, DualJoining = 2, JoinCausing = 3 }; /// Combining class enum { CombBelowLeftAtt = 200, /// Below left attached CombBelowAtt = 202, /// Below attached CombBelowRightAtt = 204, /// Below right attached CombLeftAtt = 208, /// Left attached (reordrant around single base character) CombRightAtt = 210, /// Right attached CombAboveLeftAtt = 212, /// Above left attached CombAboveAtt = 214, /// Above attached CombAboveRightAtt = 216, /// Above right attached CombBelowLeft = 218, /// Below left CombBelow = 220, /// Below CombBelowRight = 222, /// Below right CombLeft = 224, /// Left (reordrant around single base character) CombRight = 226, /// Right CombAboveLeft = 228, /// Above left CombAbove = 230, /// Above CombAboveRight = 232, /// Above right CombDoubleBelow = 233, /// Double below CombDoubleAbove = 234, /// Double above CombIotaSub = 240 /// Below (iota subscript) }; /// Decompose types enum { DecNone = 0, /// Non-decomposable DecFont = 1, /// A font variant (e.g. a blackletter form) DecNoBreak = 2, /// A no-break version of a space or hyphen DecInitial = 3, /// An initial presentation form (Arabic) DecMedial = 4, /// A medial presentation form (Arabic) DecFinal = 5, /// A final presentation form (Arabic) DecIsolated = 6, /// An isolated presentation form (Arabic) DecCircle = 7, /// An encircled form DecSuper = 8, /// A superscript form DecSub = 9, /// A subscript form DecVertical = 10, /// A vertical layout presentation form DecWide = 11, /// A wide (or zenkaku) compatibility character DecNarrow = 12, /// A narrow (or hankaku) compatibility character DecSmall = 13, /// A small variant form (CNS compatibility) DecSquare = 14, /// A CJK squared font variant DecFraction = 15, /// A vulgar fraction form DecCompat = 16, /// Compatible DecCanonical = 17 /// Canonical (equivalent) }; /// Line break types enum { BreakUnknown = 0, /// XX Unknown BreakMandarory = 1, /// BK Mandatory Break BreakReturn = 2, /// CR Carriage Return BreakLineFeed = 3, /// LF Line Feed BreakCombMark = 4, /// CM Attached Characters and Combining Marks BreakNextLine = 5, /// NL Next Line BreakSurrogate = 6, /// SG Surrogates BreakWordJoiner = 7, /// WJ Word Joiner BreakZWSpace = 8, /// ZW Zero Width Space BreakGlue = 9, /// GL Non-breaking Glue BreakContingent = 10, /// CB Contingent Break Opportunity BreakSpace = 11, /// SP Space BreakBoth = 12, /// B2 Break Opportunity Before and After BreakAfter = 13, /// BA Break Opportunity After BreakBefore = 14, /// BB Break Opportunity Before BreakHyphen = 15, /// HY Hyphen BreakOpen = 16, /// OP Opening Punctuation BreakClose = 17, /// CL Closing Punctuation BreakQuote = 18, /// QU Ambiguous Quotation BreakExclaim = 19, /// EX Exclamation/Interrogation BreakInsep = 20, /// IN Inseparable BreakNonStart = 21, /// NS Non Starter BreakInfix = 22, /// IS Infix Separator (Numeric) BreakNumeric = 23, /// NU Numeric BreakPostfix = 24, /// PO Postfix (Numeric) BreakPrefix = 25, /// PR Prefix (Numeric) BreakSymbol = 26, /// SY Symbols Allowing Breaks BreakOrdinary = 27, /// AL Ordinary Alphabetic and Symbol Characters BreakIdeograph = 28, /// ID Ideographic BreakComplex = 29 /// SA Complex Context (South East Asian) }; /// Scripts enum { ScriptCommon = 0, /// Zyyy ScriptInherited = 1, /// Qaai ScriptLatin = 2, /// Latn European scripts ScriptGreek = 3, /// Grek ScriptCyrillic = 4, /// Cyrl (Cyrs) ScriptArmenian = 5, /// Armn ScriptGeorgian = 6, /// Geor (Geon, Geoa) ScriptRunic = 7, /// Runr ScriptOgham = 8, /// Ogam ScriptHebrew = 9, /// Hebr Middle eastern ScriptArabic = 10, /// Arab ScriptSyriac = 11, /// Syrc (Syrj, Syrn, Syre) ScriptThaana = 12, /// Thaa ScriptDevanagari = 13, /// Deva Indic ScriptBengali = 14, /// Beng ScriptGurmukhi = 15, /// Guru ScriptGujarati = 16, /// Gujr ScriptOriya = 17, /// Orya ScriptTamil = 18, /// Taml ScriptTelugu = 19, /// Telu ScriptKannada = 20, /// Knda ScriptMalayalam = 21, /// Mlym ScriptSinhala = 22, /// Sinh ScriptThai = 23, /// Thai ScriptLao = 24, /// Laoo ScriptTibetan = 25, /// Tibt ScriptMyanmar = 26, /// Mymr ScriptKhmer = 27, /// Khmr ScriptHan = 28, /// Hani Asian ScriptHiragana = 29, /// Hira ScriptKatakana = 30, /// Kana ScriptHangul = 31, /// Hang ScriptBopomofo = 32, /// Bopo ScriptYi = 33, /// Yiii ScriptEthiopic = 34, /// Ethi Misc ScriptCherokee = 35, /// Cher ScriptCanadianAboriginal = 36, /// Cans ScriptMongolian = 37, /// Mong ScriptGothic = 38, /// Goth ScriptTagalog = 39, /// Tglg ScriptHanunoo = 40, /// Hano ScriptBuhid = 41, /// Buhd ScriptTagbanwa = 42, /// Tagb ScriptLimbu = 43, /// Limb ScriptTaiLe = 44, /// Tale ScriptUgaritic = 45, /// Ugar ScriptOsmanya = 46, /// Osma ScriptCypriot = 47, /// Cprt ScriptShavian = 48, /// Shaw ScriptDeseret = 49, /// Dsrt ScriptKatakanaHiragana = 50 /// Hrkt }; /// Unicode versions of common character functions namespace Unicode { /// Character wide character category extern FXAPI FXuint charCategory(FXwchar ucs); /// Get character wide character direction extern FXAPI FXuint charDirection(FXwchar ucs); /// Get wide character decompose type extern FXAPI FXuint decomposeType(FXwchar ucs); /// Return number of wide characters in decomposition extern FXAPI FXuint charNumDecompose(FXwchar ucs); /// Return wide character decomposition extern FXAPI const FXwchar* charDecompose(FXwchar ucs); /// Return wide character composition from ucsa and ucsb extern FXAPI FXwchar charCompose(FXwchar ucsa,FXwchar ucsb); /// Get wide character joining extern FXAPI FXuint joiningType(FXwchar ucs); /// Get wide character symmetry extern FXAPI FXuint isSymmetric(FXwchar ucs); /// Get wide character combining type; zero means starter extern FXAPI FXuint charCombining(FXwchar ucs); /// Get numeric value of wide character (this includes hex value) extern FXAPI FXint digitValue(FXwchar ucs); /// Get linebreak type of wide character extern FXAPI FXuint lineBreakType(FXwchar ucs); /// Get mirror image of wide character or character itself extern FXAPI FXwchar mirrorImage(FXwchar ucs); /// Script type of wide character extern FXAPI FXuint scriptType(FXwchar ucs); /// Unicode flavor of common functions extern FXAPI bool hasCase(FXwchar ucs); extern FXAPI bool isUpper(FXwchar ucs); extern FXAPI bool isLower(FXwchar ucs); extern FXAPI bool isTitle(FXwchar ucs); extern FXAPI bool isAscii(FXwchar ucs); extern FXAPI bool isLetter(FXwchar ucs); extern FXAPI bool isDigit(FXwchar ucs); extern FXAPI bool isAlphaNumeric(FXwchar ucs); extern FXAPI bool isControl(FXwchar ucs); extern FXAPI bool isSpace(FXwchar ucs); extern FXAPI bool isBlank(FXwchar ucs); extern FXAPI bool isPunct(FXwchar ucs); extern FXAPI bool isGraph(FXwchar ucs); extern FXAPI bool isPrint(FXwchar ucs); extern FXAPI bool isHexDigit(FXwchar ucs); extern FXAPI bool isSymbol(FXwchar ucs); extern FXAPI bool isMark(FXwchar ucs); extern FXAPI bool isSep(FXwchar ucs); /// Case conversion extern FXAPI FXwchar toUpper(FXwchar ucs); extern FXAPI FXwchar toLower(FXwchar ucs); extern FXAPI FXwchar toTitle(FXwchar ucs); } } #endif fox-1.6.49/include/FXSpheref.h0000664000175000017500000001274212130340076012762 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n S p h e r e C l a s s * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSpheref.h,v 1.18 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSPHEREF_H #define FXSPHEREF_H namespace FX { class FXRangef; /// Spherical bounds class FXAPI FXSpheref { public: FXVec3f center; FXfloat radius; public: /// Default constructor FXSpheref(){} /// Copy constructor FXSpheref(const FXSpheref& sphere):center(sphere.center),radius(sphere.radius){} /// Initialize from center and radius FXSpheref(const FXVec3f& cen,FXfloat rad=0.0f):center(cen),radius(rad){} /// Initialize from center and radius FXSpheref(FXfloat x,FXfloat y,FXfloat z,FXfloat rad=0.0f):center(x,y,z),radius(rad){} /// Initialize sphere to fully contain the given bounding box FXSpheref(const FXRangef& bounds); /// Assignment FXSpheref& operator=(const FXSpheref& sphere){ center=sphere.center; radius=sphere.radius; return *this; } /// Set value from another sphere FXSpheref& set(const FXSpheref& sphere){ center=sphere.center; radius=sphere.radius; return *this; } /// Set value from center and radius FXSpheref& set(const FXVec3f& cen,FXfloat rad){ center=cen; radius=rad; return *this; } /// Set value from center and radius FXSpheref& set(FXfloat x,FXfloat y,FXfloat z,FXfloat rad){ center.set(x,y,z); radius=rad; return *this; } /// Comparison bool operator==(const FXSpheref& s) const { return center==s.center && radius==s.radius;} bool operator!=(const FXSpheref& s) const { return center!=s.center || radius!=s.radius;} /// Diameter of sphere FXfloat diameter() const { return radius*2.0f; } /// Test if empty bool empty() const { return radius<0.0f; } /// Test if sphere contains point x,y,z bool contains(FXfloat x,FXfloat y,FXfloat z) const; /// Test if sphere contains point p bool contains(const FXVec3f& p) const; /// Test if sphere properly contains another box bool contains(const FXRangef& box) const; /// Test if sphere properly contains another sphere bool contains(const FXSpheref& sphere) const; /// Include point FXSpheref& include(FXfloat x,FXfloat y,FXfloat z); /// Include point FXSpheref& include(const FXVec3f& p); /// Expand radius to include point FXSpheref& includeInRadius(FXfloat x,FXfloat y,FXfloat z); /// Expand radius to include point FXSpheref& includeInRadius(const FXVec3f& p); /// Include given range into this one FXSpheref& include(const FXRangef& box); /// Expand radius to include box FXSpheref& includeInRadius(const FXRangef& box); /// Include given sphere into this one FXSpheref& include(const FXSpheref& sphere); /// Expand radius to include sphere FXSpheref& includeInRadius(const FXSpheref& sphere); /// Intersect sphere with normalized plane ax+by+cz+w; returns -1,0,+1 FXint intersect(const FXVec4f& plane) const; /// Intersect sphere with ray u-v bool intersect(const FXVec3f& u,const FXVec3f& v) const; /// Test if box overlaps with sphere friend FXAPI bool overlap(const FXRangef& a,const FXSpheref& b); /// Test if sphere overlaps with box friend FXAPI bool overlap(const FXSpheref& a,const FXRangef& b); /// Test if spheres overlap friend FXAPI bool overlap(const FXSpheref& a,const FXSpheref& b); /// Save object to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXSpheref& sphere); /// Load object from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXSpheref& sphere); }; extern FXAPI bool overlap(const FXRangef& a,const FXSpheref& b); extern FXAPI bool overlap(const FXSpheref& a,const FXRangef& b); extern FXAPI bool overlap(const FXSpheref& a,const FXSpheref& b); extern FXAPI FXStream& operator<<(FXStream& store,const FXSpheref& sphere); extern FXAPI FXStream& operator>>(FXStream& store,FXSpheref& sphere); } #endif fox-1.6.49/include/FXTabBook.h0000664000175000017500000000741112130340076012704 00000000000000/******************************************************************************** * * * T a b B o o k W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTabBook.h,v 1.10 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXTABBOOK_H #define FXTABBOOK_H #ifndef FXTABBAR_H #include "FXTabBar.h" #endif namespace FX { /** * The tab book layout manager arranges pairs of children; * the even numbered children (0,2,4,...) are usually tab items, * and are placed on the top. The odd numbered children are * usually layout managers, and are placed below; all the odd * numbered children are placed on top of each other, similar * to the switcher widget. When the user presses one of the * tab items, the tab item is raised above the neighboring tabs, * and the corresponding panel is raised to the top. * Thus, a tab book can be used to present many GUI controls * in a small space by placing several panels on top of each * other and using tab items to select the desired panel. * When one of the tab items is pressed, the tab book's setCurrent() * is called with notify=TRUE. Thus causes the tab book to send a * SEL_COMMAND message to its target. */ class FXAPI FXTabBook : public FXTabBar { FXDECLARE(FXTabBook) protected: FXTabBook(){} private: FXTabBook(const FXTabBook&); FXTabBook& operator=(const FXTabBook&); public: long onPaint(FXObject*,FXSelector,void*); long onFocusNext(FXObject*,FXSelector,void*); long onFocusPrev(FXObject*,FXSelector,void*); long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); long onCmdOpenItem(FXObject*,FXSelector,void*); public: /// Construct tab book FXTabBook(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=TABBOOK_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); }; } #endif fox-1.6.49/include/FXVec3d.h0000664000175000017500000002175012130340076012331 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n 3 - E l e m e n t V e c t o r * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXVec3d.h,v 1.22 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXVEC3D_H #define FXVEC3D_H namespace FX { class FXMat3d; class FXMat4d; /// Double-precision 3-element vector class FXAPI FXVec3d { public: FXdouble x; FXdouble y; FXdouble z; public: /// Default constructor FXVec3d(){} /// Initialize from another vector FXVec3d(const FXVec3d& v){x=v.x;y=v.y;z=v.z;} /// Initialize from array of doubles FXVec3d(const FXdouble v[]){x=v[0];y=v[1];z=v[2];} /// Initialize with components FXVec3d(FXdouble xx,FXdouble yy,FXdouble zz=1.0){x=xx;y=yy;z=zz;} /// Initialize with color FXVec3d(FXColor color); /// Return a non-const reference to the ith element FXdouble& operator[](FXint i){return (&x)[i];} /// Return a const reference to the ith element const FXdouble& operator[](FXint i) const {return (&x)[i];} /// Assign color FXVec3d& operator=(FXColor color); /// Assignment FXVec3d& operator=(const FXVec3d& v){x=v.x;y=v.y;z=v.z;return *this;} /// Assignment from array of doubles FXVec3d& operator=(const FXdouble v[]){x=v[0];y=v[1];z=v[2];return *this;} /// Set value from another vector FXVec3d& set(const FXVec3d& v){x=v.x;y=v.y;z=v.z;return *this;} /// Set value from array of floats FXVec3d& set(const FXdouble v[]){x=v[0];y=v[1];z=v[2];return *this;} /// Set value from components FXVec3d& set(FXdouble xx,FXdouble yy,FXdouble zz){x=xx;y=yy;z=zz;return *this;} /// Assigning operators FXVec3d& operator*=(FXdouble n){x*=n;y*=n;z*=n;return *this;} FXVec3d& operator/=(FXdouble n){x/=n;y/=n;z/=n;return *this;} FXVec3d& operator+=(const FXVec3d& v){x+=v.x;y+=v.y;z+=v.z;return *this;} FXVec3d& operator-=(const FXVec3d& v){x-=v.x;y-=v.y;z-=v.z;return *this;} /// Conversions operator FXdouble*(){return &x;} operator const FXdouble*() const {return &x;} operator FXVec2d&(){return *reinterpret_cast(this);} operator const FXVec2d&() const {return *reinterpret_cast(this);} /// Convert to color operator FXColor() const; /// Unary FXVec3d operator+() const { return *this; } FXVec3d operator-() const { return FXVec3d(-x,-y,-z); } /// Vector and vector FXVec3d operator+(const FXVec3d& v) const { return FXVec3d(x+v.x,y+v.y,z+v.z); } FXVec3d operator-(const FXVec3d& v) const { return FXVec3d(x-v.x,y-v.y,z-v.z); } /// Vector and matrix FXVec3d operator*(const FXMat3d& m) const; FXVec3d operator*(const FXMat4d& m) const; /// Scaling friend inline FXVec3d operator*(const FXVec3d& a,FXdouble n); friend inline FXVec3d operator*(FXdouble n,const FXVec3d& a); friend inline FXVec3d operator/(const FXVec3d& a,FXdouble n); friend inline FXVec3d operator/(FXdouble n,const FXVec3d& a); /// Dot product FXdouble operator*(const FXVec3d& v) const { return x*v.x+y*v.y+z*v.z; } /// Cross product FXVec3d operator^(const FXVec3d& v) const { return FXVec3d(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x); } /// Test if zero bool operator!() const { return x==0.0 && y==0.0 && z==0.0; } /// Equality tests bool operator==(const FXVec3d& v) const { return x==v.x && y==v.y && z==v.z; } bool operator!=(const FXVec3d& v) const { return x!=v.x || y!=v.y || z!=v.z; } friend inline bool operator==(const FXVec3d& a,FXdouble n); friend inline bool operator!=(const FXVec3d& a,FXdouble n); friend inline bool operator==(FXdouble n,const FXVec3d& a); friend inline bool operator!=(FXdouble n,const FXVec3d& a); /// Inequality tests bool operator<(const FXVec3d& v) const { return x(const FXVec3d& v) const { return x>v.x && y>v.y && z>v.z; } bool operator>=(const FXVec3d& v) const { return x>=v.x && y>=v.y && z>=v.z; } friend inline bool operator<(const FXVec3d& a,FXdouble n); friend inline bool operator<=(const FXVec3d& a,FXdouble n); friend inline bool operator>(const FXVec3d& a,FXdouble n); friend inline bool operator>=(const FXVec3d& a,FXdouble n); friend inline bool operator<(FXdouble n,const FXVec3d& a); friend inline bool operator<=(FXdouble n,const FXVec3d& a); friend inline bool operator>(FXdouble n,const FXVec3d& a); friend inline bool operator>=(FXdouble n,const FXVec3d& a); /// Length and square of length FXdouble length2() const { return x*x+y*y+z*z; } FXdouble length() const { return sqrt(length2()); } /// Clamp values of vector between limits FXVec3d& clamp(FXdouble lo,FXdouble hi){x=FXCLAMP(lo,x,hi);y=FXCLAMP(lo,y,hi);z=FXCLAMP(lo,z,hi);return *this;} /// Lowest or highest components friend inline FXVec3d lo(const FXVec3d& a,const FXVec3d& b); friend inline FXVec3d hi(const FXVec3d& a,const FXVec3d& b); /// Compute normal from three points a,b,c friend FXAPI FXVec3d normal(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c); /// Compute approximate normal from four points a,b,c,d friend FXAPI FXVec3d normal(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c,const FXVec3d& d); /// Normalize vector friend FXAPI FXVec3d normalize(const FXVec3d& v); /// Save vector to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXVec3d& v); /// Load vector from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXVec3d& v); }; inline FXVec3d operator*(const FXVec3d& a,FXdouble n){return FXVec3d(a.x*n,a.y*n,a.z*n);} inline FXVec3d operator*(FXdouble n,const FXVec3d& a){return FXVec3d(n*a.x,n*a.y,n*a.z);} inline FXVec3d operator/(const FXVec3d& a,FXdouble n){return FXVec3d(a.x/n,a.y/n,a.z/n);} inline FXVec3d operator/(FXdouble n,const FXVec3d& a){return FXVec3d(n/a.x,n/a.y,n/a.z);} inline bool operator==(const FXVec3d& a,FXdouble n){return a.x==n && a.y==n && a.z==n;} inline bool operator!=(const FXVec3d& a,FXdouble n){return a.x!=n || a.y!=n || a.z!=n;} inline bool operator==(FXdouble n,const FXVec3d& a){return n==a.x && n==a.y && n==a.z;} inline bool operator!=(FXdouble n,const FXVec3d& a){return n!=a.x || n!=a.y || n!=a.z;} inline bool operator<(const FXVec3d& a,FXdouble n){return a.x(const FXVec3d& a,FXdouble n){return a.x>n && a.y>n && a.z>n;} inline bool operator>=(const FXVec3d& a,FXdouble n){return a.x>=n && a.y>=n && a.z>=n;} inline bool operator<(FXdouble n,const FXVec3d& a){return n(FXdouble n,const FXVec3d& a){return n>a.x && n>a.y && n>a.z;} inline bool operator>=(FXdouble n,const FXVec3d& a){return n>=a.x && n>=a.y && n>=a.z;} inline FXVec3d lo(const FXVec3d& a,const FXVec3d& b){return FXVec3d(FXMIN(a.x,b.x),FXMIN(a.y,b.y),FXMIN(a.z,b.z));} inline FXVec3d hi(const FXVec3d& a,const FXVec3d& b){return FXVec3d(FXMAX(a.x,b.x),FXMAX(a.y,b.y),FXMAX(a.z,b.z));} extern FXAPI FXVec3d normal(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c); extern FXAPI FXVec3d normal(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c,const FXVec3d& d); extern FXAPI FXVec3d normalize(const FXVec3d& v); extern FXAPI FXStream& operator<<(FXStream& store,const FXVec3d& v); extern FXAPI FXStream& operator>>(FXStream& store,FXVec3d& v); } #endif fox-1.6.49/include/fx3d.h0000664000175000017500000000556512130340076012001 00000000000000/******************************************************************************** * * * A d d i t i o n a l F O X I n c l u d e F i l e F o r 3 D * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: fx3d.h,v 1.22 2006/01/22 17:58:13 fox Exp $ * ********************************************************************************/ #ifndef FX3D_H #define FX3D_H // OpenGL includes #ifdef WIN32 #ifndef STRICT #define STRICT #endif #include #endif #ifdef HAVE_GL_H #include #endif #ifndef GLAPIENTRY #define GLAPIENTRY #endif #ifndef GLAPI #define GLAPI #endif #ifdef HAVE_GLU_H #include #endif // Additional FOX includes #include "FXVec2f.h" #include "FXVec2d.h" #include "FXVec3f.h" #include "FXVec3d.h" #include "FXVec4f.h" #include "FXVec4d.h" #include "FXQuatf.h" #include "FXQuatd.h" #include "FXMat3f.h" #include "FXMat3d.h" #include "FXMat4f.h" #include "FXMat4d.h" #include "FXRangef.h" #include "FXRanged.h" #include "FXSpheref.h" #include "FXSphered.h" #include "FXExtentf.h" #include "FXExtentd.h" #include "FXGLVisual.h" #include "FXGLContext.h" #include "FXGLCanvas.h" #include "FXGLViewer.h" #include "FXGLObject.h" #include "FXGLShape.h" #include "FXGLCone.h" #include "FXGLCube.h" #include "FXGLCylinder.h" #include "FXGLSphere.h" #include "FXGLTriangleMesh.h" #ifndef FX_NO_GLOBAL_NAMESPACE using namespace FX; #endif #endif fox-1.6.49/include/FX88591Codec.h0000644000175000017500000000110411637250333013015 00000000000000#ifndef FX88591CODEC_H #define FX88591CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-1 Codec class FXAPI FX88591Codec : public FXTextCodec { FXDECLARE(FX88591Codec) public: FX88591Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88591Codec(){} }; } #endif fox-1.6.49/include/FXCP861Codec.h0000644000175000017500000000107711637250333013071 00000000000000#ifndef FXCP861CODEC_H #define FXCP861CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP861 Codec class FXAPI FXCP861Codec : public FXTextCodec { FXDECLARE(FXCP861Codec) public: FXCP861Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP861Codec(){} }; } #endif fox-1.6.49/include/FXCursor.h0000664000175000017500000001106612130340076012641 00000000000000/******************************************************************************** * * * C u r s o r - O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXCursor.h,v 1.28 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXCURSOR_H #define FXCURSOR_H #ifndef FXID_H #include "FXId.h" #endif namespace FX { // Stock cursors enum FXStockCursor { CURSOR_ARROW=1, /// Default left pointing arrow CURSOR_RARROW, /// Right arrow CURSOR_IBEAM, /// Text I-Beam CURSOR_WATCH, /// Stopwatch or hourglass CURSOR_CROSS, /// Crosshair CURSOR_UPDOWN, /// Move up, down CURSOR_LEFTRIGHT, /// Move left, right CURSOR_MOVE /// Move up,down,left,right }; /// Cursor options enum { CURSOR_KEEP = 0x00000100, /// Keep pixel data in client CURSOR_OWNED = 0x00000200 /// Pixel data is owned by image }; /// Cursor class class FXAPI FXCursor : public FXId { FXDECLARE(FXCursor) protected: FXColor *data; // Source data FXint width; // Width FXint height; // Height FXint hotx; // Hot spot x FXint hoty; // Hot spot y FXuint options; // Options protected: FXCursor(); private: FXCursor(const FXCursor&); FXCursor &operator=(const FXCursor&); public: /// Make stock cursor FXCursor(FXApp* a,FXStockCursor curid=CURSOR_ARROW); /// Make cursor from source and mask; cursor size should at most 32x32 for portability! FXCursor(FXApp* a,const FXuchar* src,const FXuchar* msk,FXint w=32,FXint h=32,FXint hx=0,FXint hy=0); /// Make cursor from FXColor pixels; cursor size should be at most 32x32 for portability! FXCursor(FXApp* a,const FXColor* pix,FXint w=32,FXint h=32,FXint hx=0,FXint hy=0); /// Width of cursor; returns 0 for stock cursors FXint getWidth() const { return width; } /// Height of cursor; returns 0 for stock cursors FXint getHeight() const { return height; } /// Set hotspot x; returns 0 for stock cursors void setHotX(FXint x){ hotx=x; } /// Get hotspot x; returns 0 for stock cursors FXint getHotX() const { return hotx; } /// Set hotspot y; returns 0 for stock cursors void setHotY(FXint y){ hoty=y; } /// Get hotspot y; returns 0 for stock cursors FXint getHotY() const { return hoty; } /// Check if there is color in the cursor bool isColor() const; /// Create cursor virtual void create(); /// Detach cursor virtual void detach(); /// Destroy cursor virtual void destroy(); /// Release pixels buffer if it was owned virtual void release(); /// Save pixel data only virtual bool savePixels(FXStream& store) const; /// Load pixel data only virtual bool loadPixels(FXStream& store); /// Save cursor to a stream virtual void save(FXStream& store) const; /// Load cursor from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXCursor(); }; } #endif fox-1.6.49/include/fxver.h.in0000664000175000017500000000040512130340076012660 00000000000000#ifndef FXVER_H #define FXVER_H // FOX version #define FOX_MAJOR @FOX_MAJOR_VERSION@ #define FOX_MINOR @FOX_MINOR_VERSION@ #define FOX_LEVEL @FOX_PATCH_LEVEL@ // FOX byte order #ifndef FOX_BIGENDIAN #define FOX_BIGENDIAN @FOX_BYTEORDER@ #endif #endif fox-1.6.49/include/FXTIFImage.h0000664000175000017500000000663112130340076012753 00000000000000/******************************************************************************** * * * T I F F I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 Eric Gillet. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTIFImage.h,v 1.23 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXTIFIMAGE_H #define FXTIFIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// TIFF Image class class FXAPI FXTIFImage : public FXImage { FXDECLARE(FXTIFImage) protected: FXushort codec; protected: FXTIFImage(){} private: FXTIFImage(const FXTIFImage&); FXTIFImage &operator=(const FXTIFImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an image from memory stream formatted in TIFF format FXTIFImage(FXApp *a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// True if format is supported static const bool supported; /// Set codec to save with void setCodec(FXuint c){ codec=c; } /// Get codec setting FXuint getCodec() const { return codec; } /// Load pixels into stream in TIFF format virtual bool loadPixels(FXStream& store); /// Save pixels from stream in TIFF format virtual bool savePixels(FXStream& store) const; /// Destroy virtual ~FXTIFImage(); }; /** * Check if stream contains a TIFF, return TRUE if so. */ extern FXAPI bool fxcheckTIF(FXStream& store); /** * Load an TIFF (Tagged Image File Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadTIF(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXushort& codec); /** * Save an TIFF (Tagged Image File Format) file to a stream. */ extern FXAPI bool fxsaveTIF(FXStream& store,const FXColor* data,FXint width,FXint height,FXushort codec); } #endif fox-1.6.49/include/FX885915Codec.h0000644000175000017500000000111311637250333013102 00000000000000#ifndef FX885915CODEC_H #define FX885915CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-15 Codec class FXAPI FX885915Codec : public FXTextCodec { FXDECLARE(FX885915Codec) public: FX885915Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX885915Codec(){} }; } #endif fox-1.6.49/include/FX88598Codec.h0000644000175000017500000000110411637250333013024 00000000000000#ifndef FX88598CODEC_H #define FX88598CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-8 Codec class FXAPI FX88598Codec : public FXTextCodec { FXDECLARE(FX88598Codec) public: FX88598Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88598Codec(){} }; } #endif fox-1.6.49/include/FXGLCylinder.h0000664000175000017500000000573212130340076013363 00000000000000/******************************************************************************** * * * O p e n G L C y l i n d e r O b j e c t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLCylinder.h,v 1.17 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXGLCYLINDER_H #define FXGLCYLINDER_H #ifndef FXGLSHAPE_H #include "FXGLShape.h" #endif namespace FX { /// OpenGL Cylinder Object class FXAPI FXGLCylinder : public FXGLShape { FXDECLARE(FXGLCylinder) public: FXfloat height; FXfloat radius; protected: FXGLCylinder(); virtual void drawshape(FXGLViewer* viewer); public: /// Construct with specified origin, height and radius FXGLCylinder(FXfloat x,FXfloat y,FXfloat z,FXfloat h=1.0f, FXfloat r=1.0f); /// Construct with specified origin, height, radius and material FXGLCylinder(FXfloat x,FXfloat y,FXfloat z,FXfloat h,FXfloat r,const FXMaterial& mtl); /// Copy constructor FXGLCylinder(const FXGLCylinder& orig); /// Copy this object virtual FXGLObject* copy(); /// Change radius void setRadius(FXfloat r){ radius=r; } FXfloat getRadius() const { return radius; } /// Change height void setHeight(FXfloat h){ height=h; } FXfloat getHeight() const { return height; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); virtual ~FXGLCylinder(); }; } #endif fox-1.6.49/include/FXSwitcher.h0000664000175000017500000001074612130340076013160 00000000000000/******************************************************************************** * * * S w i t c h C o n t a i n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSwitcher.h,v 1.17 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXSWITCHER_H #define FXSWITCHER_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /// Switcher options enum { SWITCHER_HCOLLAPSE = 0x00020000, /// Collapse horizontally to width of current child SWITCHER_VCOLLAPSE = 0x00040000 /// Collapse vertically to height of current child }; /** * The Switcher layout manager automatically arranges its child * windows such that one of them is placed on top; all other * child windows are hidden. * Switcher provides a convenient method to conserve screen * real-estate by arranging several GUI panels to appear in the * same space, depending on context. * Switcher ignores all layout hints from its children:- all * children are stretched according to the switcher layout * managers own size. * When the SWITCHER_HCOLLAPSE or SWITCHER_VCOLLAPSE options * are used, Switcher's default size is based on the width or * height of the current child, instead of the maximum width * or height of all of the children. */ class FXAPI FXSwitcher : public FXPacker { FXDECLARE(FXSwitcher) protected: FXint current; protected: FXSwitcher(){} private: FXSwitcher(const FXSwitcher&); FXSwitcher& operator=(const FXSwitcher&); public: long onPaint(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdOpen(FXObject*,FXSelector,void*); long onUpdOpen(FXObject*,FXSelector,void*); public: enum { ID_OPEN_FIRST=FXPacker::ID_LAST, ID_OPEN_SECOND, ID_OPEN_THIRD, ID_OPEN_FOURTH, ID_OPEN_FIFTH, ID_OPEN_SIXTH, ID_OPEN_SEVENTH, ID_OPEN_EIGHTH, ID_OPEN_NINETH, ID_OPEN_TENTH, ID_OPEN_LAST=ID_OPEN_FIRST+100, ID_LAST }; public: /// Construct a switcher layout manager FXSwitcher(FXComposite *p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Bring the child window at index to the top void setCurrent(FXint index,FXbool notify=FALSE); /// Return the index of the child window currently on top FXint getCurrent() const { return current; } /// Set the switcher style flags void setSwitcherStyle(FXuint style); /// Get the switcher style flags FXuint getSwitcherStyle() const; /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXCP1257Codec.h0000644000175000017500000000110611637250333013142 00000000000000#ifndef FXCP1257CODEC_H #define FXCP1257CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1257 Codec class FXAPI FXCP1257Codec : public FXTextCodec { FXDECLARE(FXCP1257Codec) public: FXCP1257Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1257Codec(){} }; } #endif fox-1.6.49/include/FXStat.h0000664000175000017500000002132012130340076012271 00000000000000/******************************************************************************** * * * F i l e S t a t i s t i c s * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXStat.h,v 1.24 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXSTAT_H #define FXSTAT_H namespace FX { class FXFile; /// Statistics about a file or directory class FXAPI FXStat { friend class FXFile; private: FXuint modeFlags; /// Mode bits FXuint userNumber; /// User number FXuint groupNumber; /// Group number FXTime createTime; /// Create time FXTime accessTime; /// Access time FXTime modifyTime; /// Modify time FXlong fileSize; /// File size public: /// Get statistics of the file into the stat buffer info static bool statFile(const FXString& file,FXStat& info); /// Get statistice of the link into the stat buffer info static bool statLink(const FXString& file,FXStat& info); /// Get statistics of already open file into stat buffer info static bool stat(const FXFile& file,FXStat& info); /// Return the mode flags for this file FXuint mode() const { return modeFlags; } /// Return file size in bytes FXlong size() const { return fileSize; } /// Return user number FXuint user() const { return userNumber; } /// Return group number FXuint group() const { return groupNumber; } /// Return time when last modified FXTime modified() const { return modifyTime; } /// Return time when last accessed FXTime accessed() const { return accessTime; } /// Return time when file was created FXTime created() const { return createTime; } /// Return time anything was changed FXTime touched() const; /// Return true if it is a hidden file (Windows-only) bool isHidden() const; /// Return true if it is a regular file bool isFile() const; /// Return true if it is a link bool isLink() const; /// Return true if character device bool isCharacter() const; /// Return true if block device bool isBlock() const; /// Return true if socket device bool isSocket() const; /// Return true if fifo (pipe) device bool isFifo() const; /// Return true if input path is a directory bool isDirectory() const; /// Return true if file is readable bool isReadable() const; /// Return true if file is writable bool isWritable() const; /// Return true if file is executable bool isExecutable() const; /// Return true if owner has read-write-execute permissions bool isOwnerReadWriteExecute() const; /// Return true if owner has read permissions bool isOwnerReadable() const; /// Return true if owner has write permissions bool isOwnerWritable() const; /// Return true if owner has execute permissions bool isOwnerExecutable() const; /// Return true if group has read-write-execute permissions bool isGroupReadWriteExecute() const; /// Return true if group has read permissions bool isGroupReadable() const; /// Return true if group has write permissions bool isGroupWritable() const; /// Return true if group has execute permissions bool isGroupExecutable() const; /// Return true if others have read-write-execute permissions bool isOtherReadWriteExecute() const; /// Return true if others have read permissions bool isOtherReadable() const; /// Return true if others have write permissions bool isOtherWritable() const; /// Return true if others have execute permissions bool isOtherExecutable() const; /// Return true if the file sets the user id on execution bool isSetUid() const; /// Return true if the file sets the group id on execution bool isSetGid() const; /// Return true if the file has the sticky bit set bool isSetSticky() const; /// Return the mode flags for this file static FXuint mode(const FXString& file); /// Change the mode flags for this file static bool mode(const FXString& file,FXuint perm); /// Return true if file exists static bool exists(const FXString& file); /// Return file size in bytes static FXlong size(const FXString& file); /** * Return last modified time for this file, on filesystems * where this is supported. This is the time when any data * in the file was last modified. */ static FXTime modified(const FXString& file); /** * Return last accessed time for this file, on filesystems * where this is supported. */ static FXTime accessed(const FXString& file); /** * Return created time for this file, on filesystems * where this is supported. This is also the time when * ownership, permissions, links, and other meta-data may * have changed. */ static FXTime created(const FXString& file); /** * Return touched time for this file, on filesystems * where this is supported. This is the time when anything * at all, either contents or meta-data, about the file was * changed. */ static FXTime touched(const FXString& file); /// Return true if file is hidden static bool isHidden(const FXString& file); /// Return true if input path is a file name static bool isFile(const FXString& file); /// Return true if input path is a link static bool isLink(const FXString& file); /// Return true if input path is a directory static bool isDirectory(const FXString& file); /// Return true if file is readable static bool isReadable(const FXString& file); /// Return true if file is writable static bool isWritable(const FXString& file); /// Return true if file is executable static bool isExecutable(const FXString& file); /// Return true if owner has read-write-execute permissions static bool isOwnerReadWriteExecute(const FXString& file); /// Return true if owner has read permissions static bool isOwnerReadable(const FXString& file); /// Return true if owner has write permissions static bool isOwnerWritable(const FXString& file); /// Return true if owner has execute permissions static bool isOwnerExecutable(const FXString& file); /// Return true if group has read-write-execute permissions static bool isGroupReadWriteExecute(const FXString& file); /// Return true if group has read permissions static bool isGroupReadable(const FXString& file); /// Return true if group has write permissions static bool isGroupWritable(const FXString& file); /// Return true if group has execute permissions static bool isGroupExecutable(const FXString& file); /// Return true if others have read-write-execute permissions static bool isOtherReadWriteExecute(const FXString& file); /// Return true if others have read permissions static bool isOtherReadable(const FXString& file); /// Return true if others have write permissions static bool isOtherWritable(const FXString& file); /// Return true if others have execute permissions static bool isOtherExecutable(const FXString& file); /// Return true if the file sets the user id on execution static bool isSetUid(const FXString& file); /// Return true if the file sets the group id on execution static bool isSetGid(const FXString& file); /// Return true if the file has the sticky bit set static bool isSetSticky(const FXString& file); }; } #endif fox-1.6.49/include/FXStringDict.h0000664000175000017500000000647312130340076013444 00000000000000/******************************************************************************** * * * S t r i n g D i c t i o n a r y C l a s s * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXStringDict.h,v 1.16 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXSTRINGDICT_H #define FXSTRINGDICT_H #ifndef FXDICT_H #include "FXDict.h" #endif namespace FX { /** * String dictionary maps a character string to a character string. * The inserted strings are copied when they're inserted. */ class FXAPI FXStringDict : public FXDict { FXDECLARE(FXStringDict) protected: virtual void *createData(const void*); virtual void deleteData(void*); public: /// Construct a string dictionary FXStringDict(); /// Copy constructor FXStringDict(const FXStringDict& orig); /// Assignment operator FXStringDict &operator=(const FXStringDict& orig); /// Insert a new string indexed by key, with given mark flag const FXchar* insert(const FXchar* ky,const FXchar* str,bool mrk=false){ return (const FXchar*)FXDict::insert(ky,str,mrk); } /// Replace or insert a new string indexed by key, unless given mark is lower that the existing mark const FXchar* replace(const FXchar* ky,const FXchar* str,bool mrk=false){ return (const FXchar*)FXDict::replace(ky,str,mrk); } /// Remove entry indexed by key const FXchar* remove(const FXchar* ky){ return (const FXchar*)FXDict::remove(ky); } /// Return the entry indexed by key, or return NULL if the key does not exist const FXchar* find(const FXchar* ky) const { return (const FXchar*)FXDict::find(ky); } /// Return the string at position pos const FXchar* data(FXuint pos) const { return (const FXchar*)dict[pos].data; } /// Destructor virtual ~FXStringDict(); }; } #endif fox-1.6.49/include/FXScrollWindow.h0000664000175000017500000000710712130340076014013 00000000000000/******************************************************************************** * * * S c r o l l W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXScrollWindow.h,v 1.21 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSCROLLWINDOW_H #define FXSCROLLWINDOW_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { /** * The scroll window widget scrolls an arbitrary child window. * Use the scroll window when parts of the user interface itself * need to be scrolled, for example when applications need to run * on small screens. The scroll window observes some layout hints of * its content-window; it observes LAYOUT_FIX_WIDTH, LAYOUT_FIX_HEIGHT * at all times. The hints LAYOUT_FILL_X, LAYOUT_LEFT, LAYOUT_RIGHT, * LAYOUT_CENTER_X, as well as LAYOUT_FILL_Y, LAYOUT_TOP, LAYOUT_BOTTOM, * LAYOUT_CENTER_Y are however only interpreted if the content size * is smaller than the viewport size, because if the content size is * larger than the viewport size, then content must be scrolled. * Note that this means that the content window's position is not * necessarily equal to the scroll position of the scroll window! */ class FXAPI FXScrollWindow : public FXScrollArea { FXDECLARE(FXScrollWindow) protected: FXScrollWindow(){} virtual void moveContents(FXint x,FXint y); private: FXScrollWindow(const FXScrollWindow&); FXScrollWindow &operator=(const FXScrollWindow&); public: long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); public: /// Construct a scroll window FXScrollWindow(FXComposite* p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Perform layout virtual void layout(); /// Return a pointer to the contents window FXWindow* contentWindow() const; /// Return the width of the contents virtual FXint getContentWidth(); /// Return the height of the contents virtual FXint getContentHeight(); }; } #endif fox-1.6.49/include/FXTriStateButton.h0000664000175000017500000001076312130340076014322 00000000000000/******************************************************************************** * * * T r i - S t a t e B u t t o n W i d g e t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Charles Warren. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTriStateButton.h,v 1.6 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTRISTATEBUTTON_H #define FXTRISTATEBUTTON_H #ifndef FXTOGGLEBUTTON_H #include "FXToggleButton.h" #endif namespace FX { /** * The tri-state button provides a three-state button, which toggles between the * on and the off state each time it is pressed; programmatically, it may also be * switched into the MAYBE state. The MAYBE state is useful to signify an unknown * state in the application data. * Like the toggle button, it sends a SEL_COMMAND to its target, with the * message data set to the current state of the toggle button, of the type FXbool. */ class FXAPI FXTriStateButton : public FXToggleButton { FXDECLARE(FXTriStateButton) protected: FXString maybelabel; FXIcon *maybeicon; FXString maybetip; FXString maybehelp; protected: FXTriStateButton(); private: FXTriStateButton(const FXTriStateButton&); FXTriStateButton& operator=(const FXTriStateButton&); public: long onPaint(FXObject*,FXSelector,void*); long onUnknown(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Construct tri-state toggle button with three text labels, and three icons, one for each state FXTriStateButton(FXComposite* p,const FXString& text1,const FXString& text2,const FXString& text3,FXIcon* icon1=NULL,FXIcon* icon2=NULL,FXIcon* icon3=NULL,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=TOGGLEBUTTON_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Change maybe text shown when toggled void setMaybeText(const FXString& text); /// Return maybe text FXString getMaybeText() const { return maybelabel; } /// Change maybe icon shown when toggled void setMaybeIcon(FXIcon* ic); /// Return maybe icon FXIcon* getMaybeIcon() const { return maybeicon; } /// Change maybe help text shown when toggled void setMaybeHelpText(const FXString& text); /// Return maybe help text FXString getMaybeHelpText() const { return maybehelp; } /// Change maybe tip text shown when toggled void setMaybeTipText(const FXString& text); /// Return maybe tip text FXString getMaybeTipText() const { return maybetip; } /// Save toggle button to a stream virtual void save(FXStream& store) const; /// Load toggle button from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXTriStateButton(); }; } #endif fox-1.6.49/include/FX885913Codec.h0000644000175000017500000000111311637250333013100 00000000000000#ifndef FX885913CODEC_H #define FX885913CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-13 Codec class FXAPI FX885913Codec : public FXTextCodec { FXDECLARE(FX885913Codec) public: FX885913Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX885913Codec(){} }; } #endif fox-1.6.49/include/FXSplitter.h0000664000175000017500000001311312130340076013165 00000000000000/******************************************************************************** * * * S p l i t t e r W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSplitter.h,v 1.29 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSPLITTER_H #define FXSPLITTER_H #ifndef FXCOMPOSITE_H #include "FXComposite.h" #endif namespace FX { /// Splitter options enum { SPLITTER_HORIZONTAL = 0, /// Split horizontally SPLITTER_VERTICAL = 0x00008000, /// Split vertically SPLITTER_REVERSED = 0x00010000, /// Reverse-anchored SPLITTER_TRACKING = 0x00020000, /// Track continuous during split SPLITTER_NORMAL = SPLITTER_HORIZONTAL }; /** * Splitter window is used to interactively repartition * two or more subpanels. * Space may be subdivided horizontally (SPLITTER_HORIZONTAL, which * the default) or vertically (SPLITTER_VERTICAL option). * When the splitter is itself resized, the right-most (bottom-most) * child window will be resized unless the splitter window is reversed; * if the splitter is reversed, the left-most (top-most) child window * will be resized instead. * The splitter widget sends a SEL_CHANGED to its target * during the resizing of the panels; at the end of the resize interaction, * it sends a SEL_COMMAND to signify that the resize operation is complete. * Normally, children are resizable from 0 upwards; however, if the child * in a horizontally oriented splitter has LAYOUT_FILL_X in combination with * LAYOUT_FIX_WIDTH, it will not be made smaller than its default width, * except when the child is the last visible widget (or first when the option * SPLITTER_REVERSED has been passed to the splitter). * In a vertically oriented splitter, children with LAYOUT_FILL_Y and * LAYOUT_FIX_HEIGHT behave analogously. */ class FXAPI FXSplitter : public FXComposite { FXDECLARE(FXSplitter) private: FXWindow *window; // Window being resized FXint split; // Split value FXint offset; // Mouse offset FXint barsize; // Size of the splitter bar protected: FXSplitter(); void adjustHLayout(); void adjustVLayout(); void moveHSplit(FXint amount); void moveVSplit(FXint amount); void drawHSplit(FXint pos); void drawVSplit(FXint pos); FXWindow* findHSplit(FXint pos); FXWindow* findVSplit(FXint pos); private: FXSplitter(const FXSplitter&); FXSplitter& operator=(const FXSplitter&); public: long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onFocusNext(FXObject*,FXSelector,void*); long onFocusPrev(FXObject*,FXSelector,void*); long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); public: /// Construct new splitter widget FXSplitter(FXComposite* p,FXuint opts=SPLITTER_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Construct new splitter widget, which will notify target about size changes FXSplitter(FXComposite* p,FXObject* tgt,FXSelector sel,FXuint opts=SPLITTER_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Return size of the panel at index FXint getSplit(FXint index) const; /// Change the size of panel at the given index void setSplit(FXint index,FXint size); /// Change splitter style void setSplitterStyle(FXuint style); /// Return current splitter style FXuint getSplitterStyle() const; /// Change splitter bar size void setBarSize(FXint bs); /// Return current bar size FXint getBarSize() const { return barsize; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy splitter virtual ~FXSplitter(); }; } #endif fox-1.6.49/include/FXScrollPane.h0000664000175000017500000000675312130340076013435 00000000000000/******************************************************************************** * * * S c r o l l i n g M e n u P a n e W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXScrollPane.h,v 1.10 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSCROLLPANE_H #define FXSCROLLPANE_H #ifndef FXMENUPANE_H #include "FXMenuPane.h" #endif namespace FX { class FXArrowButton; /** * A Scroll Pane is a menu pane which provides scrolling of menu entries. * It is useful when menus are populated programmatically and it is not * known in advance how many entries will be added. */ class FXAPI FXScrollPane : public FXMenuPane { FXDECLARE(FXScrollPane) protected: FXArrowButton *dn; // Button to scroll down FXArrowButton *up; // Button to scroll up FXint visible; // Visible entries FXint top; // Top visible entry protected: FXScrollPane(); private: FXScrollPane(const FXScrollPane&); FXScrollPane &operator=(const FXScrollPane&); public: long onCmdIncrement(FXObject*,FXSelector,void*); long onCmdDecrement(FXObject*,FXSelector,void*); public: enum { ID_SCROLL_DN=FXMenuPane::ID_LAST, ID_SCROLL_UP, ID_LAST }; public: /// Construct menu pane FXScrollPane(FXWindow* owner,FXint nvis,FXuint opts=0); /// Return the default width of this window virtual FXint getDefaultWidth(); /// Return the default height of this window virtual FXint getDefaultHeight(); /// Show this window virtual void show(); /// Perform layout virtual void layout(); /// Return number of visible items FXint getNumVisible() const { return visible; } /// Change the number of visible items void setNumVisible(FXint nvis); /// Get index of top most menu item FXint getTopItem() const { return top; } /// Scroll item to top void setTopItem(FXint t); /// Destroy virtual ~FXScrollPane(); }; } #endif fox-1.6.49/include/fxdefs.h0000664000175000017500000007221712130340076012412 00000000000000/******************************************************************************** * * * FOX Definitions, Types, and Macros * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: fxdefs.h,v 1.178.2.2 2006/11/09 23:21:43 fox Exp $ * ********************************************************************************/ #ifndef FXDEFS_H #define FXDEFS_H /******************************** Definitions ********************************/ // Truth values #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #ifndef MAYBE #define MAYBE 2 #endif #ifndef NULL #define NULL 0 #endif /// Pi #ifndef PI #define PI 3.1415926535897932384626433833 #endif /// Euler constant #define EULER 2.7182818284590452353602874713 /// Multiplier for degrees to radians #define DTOR 0.0174532925199432957692369077 /// Multiplier for radians to degrees #define RTOD 57.295779513082320876798154814 // Path separator #ifdef WIN32 #define PATHSEP '\\' #define PATHSEPSTRING "\\" #define PATHLISTSEP ';' #define PATHLISTSEPSTRING ";" #define ISPATHSEP(c) ((c)=='/' || (c)=='\\') #else #define PATHSEP '/' #define PATHSEPSTRING "/" #define PATHLISTSEP ':' #define PATHLISTSEPSTRING ":" #define ISPATHSEP(c) ((c)=='/') #endif // End Of Line #ifdef WIN32 #define ENDLINE "\r\n" #else #define ENDLINE "\n" #endif // For Windows #ifdef _DEBUG #ifndef DEBUG #define DEBUG #endif #endif #ifdef _NDEBUG #ifndef NDEBUG #define NDEBUG #endif #endif // Shared library support #ifdef WIN32 #define FXLOCAL #define FXEXPORT __declspec(dllexport) #define FXIMPORT __declspec(dllimport) #else #if defined(__GNUC__) && (__GNUC__ >= 4) #define FXLOCAL __attribute__ ((visibility("hidden"))) #define FXEXPORT __attribute__ ((visibility("default"))) #define FXIMPORT #else #define FXLOCAL #define FXEXPORT #define FXIMPORT #endif #endif // Define FXAPI for DLL builds #ifdef FOXDLL #ifdef FOXDLL_EXPORTS #define FXAPI FXEXPORT #define FXTEMPLATE_EXTERN #else #define FXAPI FXIMPORT #define FXTEMPLATE_EXTERN extern #endif #else #define FXAPI #define FXTEMPLATE_EXTERN #endif // Callback #ifdef WIN32 #ifndef CALLBACK #define CALLBACK __stdcall #endif #endif // Disable some warnings in VC++ #ifdef _MSC_VER #pragma warning(disable: 4251) #pragma warning(disable: 4231) #pragma warning(disable: 4244) #endif // Checking printf and scanf format strings #if defined(_CC_GNU_) || defined(__GNUG__) || defined(__GNUC__) #define FX_PRINTF(fmt,arg) __attribute__((format(printf,fmt,arg))) #define FX_SCANF(fmt,arg) __attribute__((format(scanf,fmt,arg))) #else #define FX_PRINTF(fmt,arg) #define FX_SCANF(fmt,arg) #endif // Raw event type #ifndef WIN32 union _XEvent; #else struct tagMSG; #endif namespace FX { // FOX System Defined Selector Types enum FXSelType { SEL_NONE, SEL_KEYPRESS, /// Key pressed SEL_KEYRELEASE, /// Key released SEL_LEFTBUTTONPRESS, /// Left mouse button pressed SEL_LEFTBUTTONRELEASE, /// Left mouse button released SEL_MIDDLEBUTTONPRESS, /// Middle mouse button pressed SEL_MIDDLEBUTTONRELEASE, /// Middle mouse button released SEL_RIGHTBUTTONPRESS, /// Right mouse button pressed SEL_RIGHTBUTTONRELEASE, /// Right mouse button released SEL_MOTION, /// Mouse motion SEL_ENTER, /// Mouse entered window SEL_LEAVE, /// Mouse left window SEL_FOCUSIN, /// Focus into window SEL_FOCUSOUT, /// Focus out of window SEL_KEYMAP, SEL_UNGRABBED, /// Lost the grab (Windows) SEL_PAINT, /// Must repaint window SEL_CREATE, SEL_DESTROY, SEL_UNMAP, /// Window was hidden SEL_MAP, /// Window was shown SEL_CONFIGURE, /// Resize SEL_SELECTION_LOST, /// Widget lost selection SEL_SELECTION_GAINED, /// Widget gained selection SEL_SELECTION_REQUEST, /// Inquire selection data SEL_RAISED, /// Window to top of stack SEL_LOWERED, /// Window to bottom of stack SEL_CLOSE, /// Close window SEL_DELETE, /// Delete window SEL_MINIMIZE, /// Iconified SEL_RESTORE, /// No longer iconified or maximized SEL_MAXIMIZE, /// Maximized SEL_UPDATE, /// GUI update SEL_COMMAND, /// GUI command SEL_CLICKED, /// Clicked SEL_DOUBLECLICKED, /// Double-clicked SEL_TRIPLECLICKED, /// Triple-clicked SEL_MOUSEWHEEL, /// Mouse wheel SEL_CHANGED, /// GUI has changed SEL_VERIFY, /// Verify change SEL_DESELECTED, /// Deselected SEL_SELECTED, /// Selected SEL_INSERTED, /// Inserted SEL_REPLACED, /// Replaced SEL_DELETED, /// Deleted SEL_OPENED, /// Opened SEL_CLOSED, /// Closed SEL_EXPANDED, /// Expanded SEL_COLLAPSED, /// Collapsed SEL_BEGINDRAG, /// Start a drag SEL_ENDDRAG, /// End a drag SEL_DRAGGED, /// Dragged SEL_LASSOED, /// Lassoed SEL_TIMEOUT, /// Timeout occurred SEL_SIGNAL, /// Signal received SEL_CLIPBOARD_LOST, /// Widget lost clipboard SEL_CLIPBOARD_GAINED, /// Widget gained clipboard SEL_CLIPBOARD_REQUEST, /// Inquire clipboard data SEL_CHORE, /// Background chore SEL_FOCUS_SELF, /// Focus on widget itself SEL_FOCUS_RIGHT, /// Focus moved right SEL_FOCUS_LEFT, /// Focus moved left SEL_FOCUS_DOWN, /// Focus moved down SEL_FOCUS_UP, /// Focus moved up SEL_FOCUS_NEXT, /// Focus moved to next widget SEL_FOCUS_PREV, /// Focus moved to previous widget SEL_DND_ENTER, /// Drag action entering potential drop target SEL_DND_LEAVE, /// Drag action leaving potential drop target SEL_DND_DROP, /// Drop on drop target SEL_DND_MOTION, /// Drag position changed over potential drop target SEL_DND_REQUEST, /// Inquire drag and drop data SEL_IO_READ, /// Read activity on a pipe SEL_IO_WRITE, /// Write activity on a pipe SEL_IO_EXCEPT, /// Except activity on a pipe SEL_PICKED, /// Picked some location SEL_QUERY_TIP, /// Message inquiring about tooltip SEL_QUERY_HELP, /// Message inquiring about statusline help SEL_DOCKED, /// Toolbar docked SEL_FLOATED, /// Toolbar floated SEL_SESSION_NOTIFY, /// Session is about to close SEL_SESSION_CLOSED, /// Session is closed SEL_LAST }; /// FOX Keyboard and Button states enum { SHIFTMASK = 0x001, /// Shift key is down CAPSLOCKMASK = 0x002, /// Caps Lock key is down CONTROLMASK = 0x004, /// Ctrl key is down #ifdef __APPLE__ ALTMASK = 0x2000, /// Alt key is down METAMASK = 0x10, /// Meta key is down #else ALTMASK = 0x008, /// Alt key is down METAMASK = 0x040, /// Meta key is down #endif NUMLOCKMASK = 0x010, /// Num Lock key is down SCROLLLOCKMASK = 0x0E0, /// Scroll Lock key is down (seems to vary) LEFTBUTTONMASK = 0x100, /// Left mouse button is down MIDDLEBUTTONMASK = 0x200, /// Middle mouse button is down RIGHTBUTTONMASK = 0x400 /// Right mouse button is down }; /// FOX Mouse buttons enum { LEFTBUTTON = 1, MIDDLEBUTTON = 2, RIGHTBUTTON = 3 }; /// FOX window crossing modes enum { CROSSINGNORMAL, /// Normal crossing event CROSSINGGRAB, /// Crossing due to mouse grab CROSSINGUNGRAB /// Crossing due to mouse ungrab }; /// FOX window visibility modes enum { VISIBILITYTOTAL, VISIBILITYPARTIAL, VISIBILITYNONE }; /// Options for fxfilematch enum { FILEMATCH_FILE_NAME = 1, /// No wildcard can ever match `/' FILEMATCH_NOESCAPE = 2, /// Backslashes don't quote special chars FILEMATCH_PERIOD = 4, /// Leading `.' is matched only explicitly FILEMATCH_LEADING_DIR = 8, /// Ignore `/...' after a match FILEMATCH_CASEFOLD = 16 /// Compare without regard to case }; /// Drag and drop actions enum FXDragAction { DRAG_REJECT = 0, /// Reject all drop actions DRAG_ACCEPT = 1, /// Accept any drop action DRAG_COPY = 2, /// Copy DRAG_MOVE = 3, /// Move DRAG_LINK = 4, /// Link DRAG_PRIVATE = 5 /// Private }; /// Origin of data enum FXDNDOrigin { FROM_SELECTION = 0, /// Primary selection FROM_CLIPBOARD = 1, /// Clipboard FROM_DRAGNDROP = 2 /// Drag and drop source }; /// Exponent display enum FXExponent { EXP_NEVER=FALSE, /// Never use exponential notation EXP_ALWAYS=TRUE, /// Always use exponential notation EXP_AUTO=MAYBE /// Use exponential notation if needed }; /// Search modes for search/replace dialogs enum { SEARCH_FORWARD = 0, /// Search forward (default) SEARCH_BACKWARD = 1, /// Search backward SEARCH_NOWRAP = 0, /// Don't wrap (default) SEARCH_WRAP = 2, /// Wrap around to start SEARCH_EXACT = 0, /// Exact match (default) SEARCH_IGNORECASE = 4, /// Ignore case SEARCH_REGEX = 8, /// Regular expression match SEARCH_PREFIX = 16 /// Prefix of subject string }; /********************************* Typedefs **********************************/ // Forward declarations class FXObject; class FXStream; class FXString; // Streamable types; these are fixed size! typedef char FXchar; typedef unsigned char FXuchar; typedef FXuchar FXbool; typedef unsigned short FXushort; typedef short FXshort; typedef unsigned int FXuint; typedef int FXint; typedef float FXfloat; typedef double FXdouble; typedef FXObject *FXObjectPtr; #ifdef WIN32 typedef unsigned int FXwchar; #if defined(_MSC_VER) && !defined(_NATIVE_WCHAR_T_DEFINED) typedef unsigned short FXnchar; #elif defined(__WATCOM_INT64__) typedef long char FXnchar; #else typedef wchar_t FXnchar; #endif #else typedef wchar_t FXwchar; typedef unsigned short FXnchar; #endif #if defined(__LP64__) || defined(_LP64) || (_MIPS_SZLONG == 64) || (__WORDSIZE == 64) typedef unsigned long FXulong; typedef long FXlong; #elif defined(_MSC_VER) || (defined(__BCPLUSPLUS__) && __BORLANDC__ > 0x500) || defined(__WATCOM_INT64__) typedef unsigned __int64 FXulong; typedef __int64 FXlong; #elif defined(__GNUG__) || defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__MWERKS__) || defined(__SC__) || defined(_LONGLONG) typedef unsigned long long FXulong; typedef long long FXlong; #else #error "FXlong and FXulong not defined for this architecture!" #endif // Integral types large enough to hold value of a pointer #if defined(_MSC_VER) && defined(_WIN64) typedef __int64 FXival; typedef unsigned __int64 FXuval; #elif defined(__GNUC__) && defined(_WIN64) typedef long long FXival; typedef unsigned long long FXuval; #else typedef long FXival; typedef unsigned long FXuval; #endif // Handle to something in server #ifndef WIN32 typedef unsigned long FXID; #else typedef void* FXID; #endif // Time since January 1, 1970 (UTC) typedef long FXTime; // Pixel type (could be color index) typedef unsigned long FXPixel; // RGBA pixel value typedef FXuint FXColor; // Hot key typedef FXuint FXHotKey; // Drag type #ifndef WIN32 typedef FXID FXDragType; #else typedef FXushort FXDragType; #endif // Input source handle type #ifndef WIN32 typedef FXint FXInputHandle; #else typedef void* FXInputHandle; #endif // Raw event type #ifndef WIN32 typedef _XEvent FXRawEvent; #else typedef tagMSG FXRawEvent; #endif /********************************** Macros ***********************************/ /// Abolute value #define FXABS(val) (((val)>=0)?(val):-(val)) /// Return the maximum of a or b #define FXMAX(a,b) (((a)>(b))?(a):(b)) /// Return the minimum of a or b #define FXMIN(a,b) (((a)>(b))?(b):(a)) /// Return the minimum of x, y and z #define FXMIN3(x,y,z) ((x)<(y)?FXMIN(x,z):FXMIN(y,z)) /// Return the maximum of x, y and z #define FXMAX3(x,y,z) ((x)>(y)?FXMAX(x,z):FXMAX(y,z)) /// Return the minimum of x, y, z, and w #define FXMIN4(x,y,z,w) (FXMIN(FXMIN(x,y),FXMIN(z,w))) /// Return the maximum of of x, y, z, and w #define FXMAX4(x,y,z,w) (FXMAX(FXMAX(x,y),FXMAX(z,w))) /// Return minimum and maximum of a, b #define FXMINMAX(lo,hi,a,b) ((a)<(b)?((lo)=(a),(hi)=(b)):((lo)=(b),(hi)=(a))) /// Clamp value x to range [lo..hi] #define FXCLAMP(lo,x,hi) ((x)<(lo)?(lo):((x)>(hi)?(hi):(x))) /// Swap a pair of numbers #define FXSWAP(a,b,t) ((t)=(a),(a)=(b),(b)=(t)) /// Linear interpolation between a and b, where 0<=f<=1 #define FXLERP(a,b,f) ((a)+((b)-(a))*(f)) /// Offset of member in a structure #define STRUCTOFFSET(str,member) (((char *)(&(((str *)0)->member)))-((char *)0)) /// Number of elements in a static array #define ARRAYNUMBER(array) (sizeof(array)/sizeof(array[0])) /// Container class of a member class #define CONTAINER(ptr,str,mem) ((str*)(((char*)(ptr))-STRUCTOFFSET(str,mem))) /// Make int out of two shorts #define MKUINT(l,h) ((((FX::FXuint)(l))&0xffff) | (((FX::FXuint)(h))<<16)) /// Make selector from message type and message id #define FXSEL(type,id) ((((FX::FXuint)(id))&0xffff) | (((FX::FXuint)(type))<<16)) /// Get type from selector #define FXSELTYPE(s) ((FX::FXushort)(((s)>>16)&0xffff)) /// Get ID from selector #define FXSELID(s) ((FX::FXushort)((s)&0xffff)) /// Reverse bits in byte #define FXBITREVERSE(b) (((b&0x01)<<7)|((b&0x02)<<5)|((b&0x04)<<3)|((b&0x08)<<1)|((b&0x10)>>1)|((b&0x20)>>3)|((b&0x40)>>5)|((b&0x80)>>7)) /// Test if character c is at the start of a utf8 sequence #define FXISUTF(c) (((c)&0xC0)!=0x80) // Definitions for big-endian machines #if FOX_BIGENDIAN == 1 /// Make RGBA color #define FXRGBA(r,g,b,a) (((FX::FXuint)(FX::FXuchar)(r)<<24) | ((FX::FXuint)(FX::FXuchar)(g)<<16) | ((FX::FXuint)(FX::FXuchar)(b)<<8) | ((FX::FXuint)(FX::FXuchar)(a))) /// Make RGB color #define FXRGB(r,g,b) (((FX::FXuint)(FX::FXuchar)(r)<<24) | ((FX::FXuint)(FX::FXuchar)(g)<<16) | ((FX::FXuint)(FX::FXuchar)(b)<<8) | 0x000000ff) /// Get red value from RGBA color #define FXREDVAL(rgba) ((FX::FXuchar)(((rgba)>>24)&0xff)) /// Get green value from RGBA color #define FXGREENVAL(rgba) ((FX::FXuchar)(((rgba)>>16)&0xff)) /// Get blue value from RGBA color #define FXBLUEVAL(rgba) ((FX::FXuchar)(((rgba)>>8)&0xff)) /// Get alpha value from RGBA color #define FXALPHAVAL(rgba) ((FX::FXuchar)((rgba)&0xff)) /// Get component value of RGBA color #define FXRGBACOMPVAL(rgba,comp) ((FX::FXuchar)(((rgba)>>((3-(comp))<<3))&0xff)) #endif // Definitions for little-endian machines #if FOX_BIGENDIAN == 0 /// Make RGBA color #define FXRGBA(r,g,b,a) (((FX::FXuint)(FX::FXuchar)(r)) | ((FX::FXuint)(FX::FXuchar)(g)<<8) | ((FX::FXuint)(FX::FXuchar)(b)<<16) | ((FX::FXuint)(FX::FXuchar)(a)<<24)) /// Make RGB color #define FXRGB(r,g,b) (((FX::FXuint)(FX::FXuchar)(r)) | ((FX::FXuint)(FX::FXuchar)(g)<<8) | ((FX::FXuint)(FX::FXuchar)(b)<<16) | 0xff000000) /// Get red value from RGBA color #define FXREDVAL(rgba) ((FX::FXuchar)((rgba)&0xff)) /// Get green value from RGBA color #define FXGREENVAL(rgba) ((FX::FXuchar)(((rgba)>>8)&0xff)) /// Get blue value from RGBA color #define FXBLUEVAL(rgba) ((FX::FXuchar)(((rgba)>>16)&0xff)) /// Get alpha value from RGBA color #define FXALPHAVAL(rgba) ((FX::FXuchar)(((rgba)>>24)&0xff)) /// Get component value of RGBA color #define FXRGBACOMPVAL(rgba,comp) ((FX::FXuchar)(((rgba)>>((comp)<<3))&0xff)) #endif /** * FXASSERT() prints out a message when the expression fails, * and nothing otherwise. Unlike assert(), FXASSERT() will not * terminate the execution of the application. * When compiling your application for release, all assertions * are compiled out; thus there is no impact on execution speed. */ #ifndef NDEBUG #define FXASSERT(exp) ((exp)?((void)0):(void)FX::fxassert(#exp,__FILE__,__LINE__)) #else #define FXASSERT(exp) ((void)0) #endif /** * FXTRACE() allows you to trace the execution of your application * with increasing levels of detail the higher the trace level. * The trace level is determined by variable fxTraceLevel, which * may be set from the command line with "-tracelevel ". * When compiling your application for release, all trace statements * are compiled out, just like FXASSERT. * A statement like: FXTRACE((10,"The value of x=%d\n",x)) will * generate output only if fxTraceLevel is set to 11 or greater. * The default value fxTraceLevel=0 will block all trace outputs. * Note the double parentheses! */ #ifndef NDEBUG #define FXTRACE(arguments) FX::fxtrace arguments #else #define FXTRACE(arguments) ((void)0) #endif /** * Allocate a memory block of no elements of type and store a pointer * to it into the address pointed to by ptr. * Return FALSE if size!=0 and allocation fails, TRUE otherwise. * An allocation of a zero size block returns a NULL pointer. */ #define FXMALLOC(ptr,type,no) (FX::fxmalloc((void **)(ptr),sizeof(type)*(no))) /** * Allocate a zero-filled memory block no elements of type and store a pointer * to it into the address pointed to by ptr. * Return FALSE if size!=0 and allocation fails, TRUE otherwise. * An allocation of a zero size block returns a NULL pointer. */ #define FXCALLOC(ptr,type,no) (FX::fxcalloc((void **)(ptr),sizeof(type)*(no))) /** * Resize the memory block referred to by the pointer at the address ptr, to a * hold no elements of type. * Returns FALSE if size!=0 and reallocation fails, TRUE otherwise. * If reallocation fails, pointer is left to point to old block; a reallocation * to a zero size block has the effect of freeing it. * The ptr argument must be the address where the pointer to the allocated * block is to be stored. */ #define FXRESIZE(ptr,type,no) (FX::fxresize((void **)(ptr),sizeof(type)*(no))) /** * Allocate and initialize memory from another block. * Return FALSE if size!=0 and source!=NULL and allocation fails, TRUE otherwise. * An allocation of a zero size block returns a NULL pointer. * The ptr argument must be the address where the pointer to the allocated * block is to be stored. */ #define FXMEMDUP(ptr,src,type,no) (FX::fxmemdup((void **)(ptr),(const void*)(src),sizeof(type)*(no))) /** * Free a block of memory allocated with either FXMALLOC, FXCALLOC, FXRESIZE, or FXMEMDUP. * It is OK to call free a NULL pointer. The argument must be the address of the * pointer to the block to be released. The pointer is set to NULL to prevent * any further references to the block after releasing it. */ #define FXFREE(ptr) (FX::fxfree((void **)(ptr))) /** * These are some of the ISO C99 standard single-precision transcendental functions. * On LINUX, specify _GNU_SOURCE or _ISOC99_SOURCE to enable native implementation; * otherwise, these macros will be used. Apple OS-X implements fabsf(x), ceilf(x), * floorf(x), and fmodf(x,y). * Define FLOAT_MATH_FUNCTIONS if these functions are available in some other * library you're linking to. */ #ifdef __OpenBSD__ #define FLOAT_MATH_FUNCTIONS #endif #ifndef FLOAT_MATH_FUNCTIONS #ifndef __USE_ISOC99 #ifndef __APPLE__ #define fabsf(x) ((float)fabs((double)(x))) #define ceilf(x) ((float)ceil((double)(x))) #define floorf(x) ((float)floor((double)(x))) #define fmodf(x,y) ((float)fmod((double)(x),(double)(y))) #endif #define sqrtf(x) ((float)sqrt((double)(x))) #define sinf(x) ((float)sin((double)(x))) #define cosf(x) ((float)cos((double)(x))) #define tanf(x) ((float)tan((double)(x))) #define asinf(x) ((float)asin((double)(x))) #define acosf(x) ((float)acos((double)(x))) #define atanf(x) ((float)atan((double)(x))) #define atan2f(y,x) ((float)atan2((double)(y),(double)(x))) #define powf(x,y) ((float)pow((double)(x),(double)(y))) #define expf(x) ((float)exp((double)(x))) #define logf(x) ((float)log((double)(x))) #define log10f(x) ((float)log10((double)(x))) #endif #endif /********************************** Globals **********************************/ /// Simple, thread-safe, random number generator extern FXAPI FXuint fxrandom(FXuint& seed); /// Allocate memory extern FXAPI FXint fxmalloc(void** ptr,unsigned long size); /// Allocate cleaned memory extern FXAPI FXint fxcalloc(void** ptr,unsigned long size); /// Resize memory extern FXAPI FXint fxresize(void** ptr,unsigned long size); /// Duplicate memory extern FXAPI FXint fxmemdup(void** ptr,const void* src,unsigned long size); /// Free memory, resets ptr to NULL afterward extern FXAPI void fxfree(void** ptr); /// Error routine extern FXAPI void fxerror(const char* format,...) FX_PRINTF(1,2) ; /// Warning routine extern FXAPI void fxwarning(const char* format,...) FX_PRINTF(1,2) ; /// Log message to [typically] stderr extern FXAPI void fxmessage(const char* format,...) FX_PRINTF(1,2) ; /// Assert failed routine:- usually not called directly but called through FXASSERT extern FXAPI void fxassert(const char* expression,const char* filename,unsigned int lineno); /// Trace printout routine:- usually not called directly but called through FXTRACE extern FXAPI void fxtrace(unsigned int level,const char* format,...) FX_PRINTF(2,3) ; /// Sleep n microseconds extern FXAPI void fxsleep(unsigned int n); /// Match a file name with a pattern extern FXAPI bool fxfilematch(const char *pattern,const char *string,FXuint flags=(FILEMATCH_NOESCAPE|FILEMATCH_FILE_NAME)); /// Get highlight color extern FXAPI FXColor makeHiliteColor(FXColor clr); /// Get shadow color extern FXAPI FXColor makeShadowColor(FXColor clr); /// Get process id extern FXAPI FXint fxgetpid(); /// Convert string of length len to MSDOS; return new string and new length extern FXAPI bool fxtoDOS(FXchar*& string,FXint& len); /// Convert string of length len from MSDOS; return new string and new length extern FXAPI bool fxfromDOS(FXchar*& string,FXint& len); /// Duplicate string extern FXAPI FXchar *fxstrdup(const FXchar* str); /// Calculate a hash value from a string extern FXAPI FXuint fxstrhash(const FXchar* str); /// Get RGB value from color name extern FXAPI FXColor fxcolorfromname(const FXchar* colorname); /// Get name of (closest) color to RGB extern FXAPI FXchar* fxnamefromcolor(FXchar *colorname,FXColor color); /// Convert RGB to HSV extern FXAPI void fxrgb_to_hsv(FXfloat& h,FXfloat& s,FXfloat& v,FXfloat r,FXfloat g,FXfloat b); /// Convert HSV to RGB extern FXAPI void fxhsv_to_rgb(FXfloat& r,FXfloat& g,FXfloat& b,FXfloat h,FXfloat s,FXfloat v); /// Floating point number classification: 0=OK, +/-1=Inf, +/-2=NaN extern FXAPI FXint fxieeefloatclass(FXfloat number); extern FXAPI FXint fxieeedoubleclass(FXdouble number); /// Convert keysym to unicode character extern FXAPI FXwchar fxkeysym2ucs(FXwchar sym); /// Convert unicode character to keysym extern FXAPI FXwchar fxucs2keysym(FXwchar ucs); /// Parse geometry, a-la X11 geometry specification extern FXAPI FXint fxparsegeometry(const FXchar *string,FXint& x,FXint& y,FXint& w,FXint& h); /// True if executable with given path is a console application extern FXAPI FXbool fxisconsole(const FXchar *path); /// Version number that the library has been compiled with extern FXAPI const FXuchar fxversion[3]; /// Controls tracing level extern FXAPI unsigned int fxTraceLevel; /// Return wide character from utf8 string at ptr extern FXAPI FXwchar wc(const FXchar *ptr); /// Return wide character from utf16 string at ptr extern FXAPI FXwchar wc(const FXnchar *ptr); /// Return number of FXchar's of wide character at ptr extern FXAPI FXint wclen(const FXchar *ptr); /// Return number of FXnchar's of narrow character at ptr extern FXAPI FXint wclen(const FXnchar *ptr); /// Return start of utf8 character containing position extern FXAPI FXint wcvalidate(const FXchar* string,FXint pos); /// Return start of utf16 character containing position extern FXAPI FXint wcvalidate(const FXnchar *string,FXint pos); /// Advance to next utf8 character start extern FXAPI FXint wcinc(const FXchar* string,FXint pos); /// Advance to next utf16 character start extern FXAPI FXint wcinc(const FXnchar *string,FXint pos); /// Retreat to previous utf8 character start extern FXAPI FXint wcdec(const FXchar* string,FXint pos); /// Retreat to previous utf16 character start extern FXAPI FXint wcdec(const FXnchar *string,FXint pos); /// Length of utf8 representation of wide characters string str of length n extern FXAPI FXint utfslen(const FXwchar *str,FXint n); /// Length of utf8 representation of wide character string str extern FXAPI FXint utfslen(const FXwchar *str); /// Length of utf8 representation of narrow characters string str of length n extern FXAPI FXint utfslen(const FXnchar *str,FXint n); /// Length of utf8 representation of narrow characters string str extern FXAPI FXint utfslen(const FXnchar *str); /// Length of wide character representation of utf8 string str of length n extern FXAPI FXint wcslen(const FXchar *str,FXint n); /// Length of wide character representation of utf8 string str extern FXAPI FXint wcslen(const FXchar *str); /// Length of narrow character representation of utf8 string str of length n extern FXAPI FXint ncslen(const FXchar *str,FXint n); /// Length of narrow character representation of utf8 string str extern FXAPI FXint ncslen(const FXchar *str); /// Copy utf8 string of length n to wide character string dst extern FXAPI FXint utf2wcs(FXwchar *dst,const FXchar *src,FXint n); /// Copy utf8 string to wide character string dst extern FXAPI FXint utf2wcs(FXwchar *dst,const FXchar *src); /// Copy utf8 string of length n to narrow character string dst extern FXAPI FXint utf2ncs(FXnchar *dst,const FXchar *src,FXint n); /// Copy utf8 string to narrow character string dst extern FXAPI FXint utf2ncs(FXnchar *dst,const FXchar *src); /// Copy wide character substring of length n to dst extern FXAPI FXint wc2utfs(FXchar* dst,const FXwchar *src,FXint n); /// Copy wide character string to dst extern FXAPI FXint wc2utfs(FXchar* dst,const FXwchar *src); /// Copy narrow character substring of length n to dst extern FXAPI FXint nc2utfs(FXchar* dst,const FXnchar *src,FXint n); /// Copy narrow character string to dst extern FXAPI FXint nc2utfs(FXchar* dst,const FXnchar *src); } #endif fox-1.6.49/include/FX88595Codec.h0000644000175000017500000000110411637250333013021 00000000000000#ifndef FX88595CODEC_H #define FX88595CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-5 Codec class FXAPI FX88595Codec : public FXTextCodec { FXDECLARE(FX88595Codec) public: FX88595Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88595Codec(){} }; } #endif fox-1.6.49/include/FXRadioButton.h0000664000175000017500000001261612130340076013620 00000000000000/******************************************************************************** * * * R a d i o B u t t o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRadioButton.h,v 1.29 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXRADIOBUTTON_H #define FXRADIOBUTTON_H #ifndef FXLABEL_H #include "FXLabel.h" #endif namespace FX { /// RadioButton flags enum { RADIOBUTTON_AUTOGRAY = 0x00800000, /// Automatically gray out when not updated RADIOBUTTON_AUTOHIDE = 0x01000000, /// Automatically hide when not updated RADIOBUTTON_NORMAL = JUSTIFY_NORMAL|ICON_BEFORE_TEXT }; /** * A radio button is a tri-state button. Normally, it is either * TRUE or FALSE; a third state MAYBE may be set to indicate that no selection * has been made yet by the user, or that the state is ambiguous. * When pressed, the radio button sets its state to TRUE and sends a SEL_COMMAND * to its target, and the message data set to the state of the radio button, * of the type FXbool. * A group of radio buttons can be made mutually exclusive by linking them * to a common data target. Alternatively, an application can implement a * common SEL_UPDATED handler to check and uncheck radio buttons as appropriate. */ class FXAPI FXRadioButton : public FXLabel { FXDECLARE(FXRadioButton) protected: FXColor radioColor; // Color of radio ball FXColor diskColor; // Color of radio disk FXbool check; // Radio state FXbool oldcheck; // Old radio state protected: FXRadioButton(); private: FXRadioButton(const FXRadioButton&); FXRadioButton &operator=(const FXRadioButton&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCheck(FXObject*,FXSelector,void*); long onUncheck(FXObject*,FXSelector,void*); long onUnknown(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); public: /// Construct new radio button FXRadioButton(FXComposite* p,const FXString& text,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=RADIOBUTTON_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Returns true because a radio button can receive focus virtual bool canFocus() const; /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Set radio button state (TRUE, FALSE or MAYBE) void setCheck(FXbool s=TRUE,FXbool notify=FALSE); /// Get radio button state (TRUE, FALSE or MAYBE) FXbool getCheck() const { return check; } /// Change radio button style void setRadioButtonStyle(FXuint style); /// Return current radio button style FXuint getRadioButtonStyle() const; /// Get the radio ball color FXColor getRadioColor() const { return radioColor; } /// Set the radio ball color void setRadioColor(FXColor clr); /// Get the radio disk color FXColor getDiskColor() const { return diskColor; } /// Set the radio disk color void setDiskColor(FXColor clr); /// Save radio button to a stream virtual void save(FXStream& store) const; /// Load radio button from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXGLContext.h0000664000175000017500000001036112130340076013230 00000000000000/******************************************************************************** * * * G L C o n t e x t C l a s s * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLContext.h,v 1.14 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXGLCONTEXT_H #define FXGLCONTEXT_H ////////////////////////////// UNDER DEVELOPMENT ////////////////////////////// namespace FX { class FXApp; class FXDrawable; class FXGLVisual; /** * A GL context is an object representing the OpenGL state information. * Multiple GL context may share display lists to conserve memory. * When drawing multiple windows, it may be advantageous to share not only * display lists, but also GL contexts. Since the GL context is created * for a certain frame-buffer configuration, sharing of GL contexts is * only possible if the windows sharing the GL context all have the same * GL visual. * However, display lists may be shared between different GL contexts. */ class FXAPI FXGLContext : public FXId { FXDECLARE(FXGLContext) private: FXGLVisual *visual; // Visual for this context FXDrawable *surface; // Drawable context is locked on FXGLContext *sgnext; // Share group next in share list FXGLContext *sgprev; // Share group previous in share list protected: void *ctx; // GL Context protected: FXGLContext():visual(NULL),surface(NULL),sgnext(NULL),sgprev(NULL),ctx(NULL){} private: FXGLContext(const FXGLContext&); FXGLContext &operator=(const FXGLContext&); public: /** * Construct an OpenGL context with its own private display list. */ FXGLContext(FXApp* a,FXGLVisual *vis); /** * Construct an OpenGL context sharing display lists with an existing GL context. */ FXGLContext(FXApp* a,FXGLVisual *vis,FXGLContext *shared); /// Return TRUE if it is sharing display lists FXbool isShared() const; /// Get the visual FXGLVisual* getVisual() const { return visual; } /// Create context virtual void create(); /// Detach the server-side resources for this window virtual void detach(); /// Destroy the server-side resources for this window virtual void destroy(); /// Make OpenGL context current prior to performing OpenGL commands FXbool begin(FXDrawable *drawable); /// Make OpenGL context non current FXbool end(); /// Swap front and back buffer void swapBuffers(); /// Copy part of backbuffer to front buffer [Mesa] void swapSubBuffers(FXint x,FXint y,FXint w,FXint h); /// Save object to stream virtual void save(FXStream& store) const; /// Load object from stream virtual void load(FXStream& store); /// Destructor virtual ~FXGLContext(); }; } #endif fox-1.6.49/include/FXHorizontalFrame.h0000664000175000017500000000555412130340076014475 00000000000000/******************************************************************************** * * * H o r i z o n t a l C o n t a i n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXHorizontalFrame.h,v 1.17 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXHORIZONTALFRAME_H #define FXHORIZONTALFRAME_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /** * Horizontal frame layout manager widget is used to automatically * place child-windows horizontally from left-to-right, or right-to-left, * depending on the child window's layout hints. */ class FXAPI FXHorizontalFrame : public FXPacker { FXDECLARE(FXHorizontalFrame) protected: FXHorizontalFrame(){} private: FXHorizontalFrame(const FXHorizontalFrame&); FXHorizontalFrame &operator=(const FXHorizontalFrame&); public: /// Construct a horizontal frame layout manager FXHorizontalFrame(FXComposite *p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); }; } #endif fox-1.6.49/include/FXDriveBox.h0000664000175000017500000000763312130340076013113 00000000000000/******************************************************************************** * * * D r i v e B o x W i d g e t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDriveBox.h,v 1.17 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXDRIVEBOX_H #define FXDRIVEBOX_H #ifndef FXLISTBOX_H #include "FXListBox.h" #endif namespace FX { class FXIcon; class FXFileDict; /// Drive Box options enum { DRIVEBOX_NO_OWN_ASSOC = 0x00020000 /// Do not create associations for files }; /// Directory Box class FXAPI FXDriveBox : public FXListBox { FXDECLARE(FXDriveBox) protected: FXFileDict *associations; // Association table FXIcon *foldericon; // Folder icons FXIcon *cdromicon; // CDROM icon FXIcon *harddiskicon; // Hard disk icon FXIcon *netdriveicon; // Networked drive icon FXIcon *floppyicon; // Floppy icon FXIcon *nethoodicon; // Network neighborhood icon FXIcon *zipdiskicon; // Zip drive icon protected: FXDriveBox(){} void listDrives(); private: FXDriveBox(const FXDriveBox&); FXDriveBox &operator=(const FXDriveBox&); public: long onListChanged(FXObject*,FXSelector,void*); long onListClicked(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); public: /// Constructor FXDriveBox(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_SUNKEN|FRAME_THICK|LISTBOX_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Set current drive FXbool setDrive(const FXString& drive); /// Return current drive FXString getDrive() const; /// Change file associations void setAssociations(FXFileDict* assoc); /// Return file associations FXFileDict* getAssociations() const { return associations; } /// Destructor virtual ~FXDriveBox(); }; } #endif fox-1.6.49/include/xincs.h0000664000175000017500000002274012130340076012253 00000000000000/******************************************************************************** * * * F O X P r i v a t e I n c l u d e F i l e s * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: xincs.h,v 1.73 2006/01/22 17:58:14 fox Exp $ * ********************************************************************************/ #ifndef XINCS_H #define XINCS_H //////////////////// DO NOT INCLUDE THIS PRIVATE HEADER FILE ////////////////// // Thread safe #ifndef _POSIX_PTHREAD_SEMANTICS #define _POSIX_PTHREAD_SEMANTICS #endif // GNU extras if we can get them #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif // Use 64-bit files #ifndef WIN32 #ifndef _FILE_OFFSET_BITS #define _FILE_OFFSET_BITS 64 #endif #endif // Basic includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef WIN32 #include #include #include #ifdef HAVE_SYS_FILIO_H // Get FIONREAD on Solaris #include #endif #else #include // For _access() #if defined(_MSC_VER) || defined(__WATCOMC__) // Microsoft Visual C++ or Watcom C++ #include #define stat _stat #define lstat _stat #define getcwd _getcwd #define mkdir _mkdir #define access _access #define vsnprintf _vsnprintf #define execl _execl #define execlp _execlp #define execle _execle #define execv _execv #define execve _execve #define execvp _execvp #define strdup _strdup #define alloca _alloca #endif #ifdef __BORLANDC__ // Borland C++ Builder #include #if __BORLANDC__ <= 0x0530 // C++ Builder 3.0 #define vsnprintf(a, b, c, d) vsprintf(a, c, d) #endif #define lstat stat #endif #ifdef __MINGW32__ // GCC MingW32 #include #define vsnprintf _vsnprintf #endif #ifdef __SC__ // Digital Mars C++ Compiler #include #include // For _access() #define vsnprintf _vsnprintf #endif #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif #ifdef TIME_WITH_SYS_TIME #include #include #else #ifdef HAVE_SYS_TIME_H #include #else #include #endif #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SELECT_H #if (!defined(__MINGW32__)) && (!defined(hpux)) #include #endif #endif #ifdef HAVE_DIRENT_H #include #define NAMLEN(dirent) strlen((dirent)->d_name) #else #define dirent direct #define NAMLEN(dirent) (dirent)->d_namlen #ifdef HAVE_SYS_NDIR_H #include #endif #ifdef HAVE_SYS_DIR_H #include #endif #ifdef HAVE_NDIR_H #include #endif #endif #ifdef HAVE_XSHM_H #include #include #endif #ifdef HAVE_MMAP #include #endif // For thread-safe readdir_r, we sometimes need extra // space above and beyond the space for dirent itself #ifdef HAVE_DIRENT_H #ifndef WIN32 struct fxdirent : public dirent { char buffer[256]; }; #endif #endif // MS-Windows #ifdef WIN32 #ifndef STRICT #define STRICT #endif #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #ifndef __CYGWIN__ #include #endif #include // For _TrackMouseEvent #include // X windows includes #else #include #define XRegisterIMInstantiateCallback broken_XRegisterIMInstantiateCallback #define XUnregisterIMInstantiateCallback broken_XUnregisterIMInstantiateCallback #define XSetIMValues broken_XSetIMValues #include #undef XRegisterIMInstantiateCallback #undef XUnregisterIMInstantiateCallback #undef XSetIMValues #include #include #include #include #include #ifdef HUMMINGBIRD #include #endif #ifdef HAVE_XSHM_H #include #endif #ifdef HAVE_XCURSOR_H #include #endif #ifdef HAVE_XFT_H #include #endif #ifdef HAVE_XSHAPE_H #include #endif #ifdef HAVE_XRANDR_H #include #endif #ifndef NO_XIM #ifndef XlibSpecificationRelease // Not defined until X11R5 #define NO_XIM #elif XlibSpecificationRelease < 6 // Need at least Xlib X11R6 #define NO_XIM #endif #endif #ifndef NO_XIM extern "C" Bool XRegisterIMInstantiateCallback(Display*,struct _XrmHashBucketRec*,char*,char*,XIMProc,XPointer); extern "C" Bool XUnregisterIMInstantiateCallback(Display*,struct _XrmHashBucketRec*,char*,char*,XIMProc,XPointer); extern "C" char *XSetIMValues(XIM,...); #endif #endif // OpenGL includes #ifdef HAVE_GL_H #ifndef SUN_OGL_NO_VERTEX_MACROS #define SUN_OGL_NO_VERTEX_MACROS #endif #ifndef HPOGL_SUPPRESS_FAST_API #define HPOGL_SUPPRESS_FAST_API #endif #include #ifndef WIN32 #include #endif #endif #ifndef GLAPIENTRY #define GLAPIENTRY #endif #ifndef GLAPI #define GLAPI #endif #ifdef HAVE_GLU_H #include #endif // Maximum path length #ifndef MAXPATHLEN #if defined(PATH_MAX) #define MAXPATHLEN PATH_MAX #elif defined(_MAX_PATH) #define MAXPATHLEN _MAX_PATH #elif defined(MAX_PATH) #define MAXPATHLEN MAX_PATH #else #define MAXPATHLEN 1024 #endif #endif // Modes for access(filename,mode) on Windows #ifdef WIN32 #ifndef R_OK #define R_OK 4 #endif #ifndef W_OK #define W_OK 2 #endif #ifndef X_OK #define X_OK 1 #endif #ifndef F_OK #define F_OK 0 #endif #endif // File open modes on Windows #ifdef WIN32 #if defined(_MSC_VER) #define O_APPEND _O_APPEND #define O_CREAT _O_CREAT #define O_EXCL _O_EXCL #define O_RDONLY _O_RDONLY #define O_RDWR _O_RDWR #define O_TRUNC _O_TRUNC #define O_WRONLY _O_WRONLY #define O_BINARY _O_BINARY #endif #endif // Some systems don't have it #ifndef SEEK_SET #define SEEK_SET 0 #endif #ifndef SEEK_CUR #define SEEK_CUR 1 #endif #ifndef SEEK_END #define SEEK_END 2 #endif // Printer stuff #ifdef WIN32 #include #endif // Wheel support (OS >= W98, OS>=NT4.0) #ifdef WIN32 // Missing wheel message id's #ifndef SPI_GETWHEELSCROLLLINES #define SPI_GETWHEELSCROLLLINES 104 #endif #ifndef WM_MOUSEWHEEL #define WM_MOUSEWHEEL 0x020A #endif // GetSystemMetrics parameters missing in header files #ifndef SM_XVIRTUALSCREEN #define SM_XVIRTUALSCREEN 76 #endif #ifndef SM_YVIRTUALSCREEN #define SM_YVIRTUALSCREEN 77 #endif #ifndef SM_CXVIRTUALSCREEN #define SM_CXVIRTUALSCREEN 78 #endif #ifndef SM_CYVIRTUALSCREEN #define SM_CYVIRTUALSCREEN 79 #endif #ifndef SM_CMONITORS #define SM_CMONITORS 80 #endif #ifndef SM_SAMEDISPLAYFORMAT #define SM_SAMEDISPLAYFORMAT 81 #endif // Missing in CYGWIN #ifndef IMAGE_SUBSYSTEM_NATIVE_WINDOWS #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 #endif #ifndef IMAGE_SUBSYSTEM_WINDOWS_CE_GUI #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 #endif #endif // IBM VisualAge for C++ 3.5 #if defined(__IBMCPP__) && defined(WIN32) #include #include // for _access() #define _mkdir(x) mkdir((char *)(x)) #define _vsnprintf(a, b, c, d) vsprintf(a, c, d) #define ICON_SMALL 0 #define ICON_BIG 1 #define bool int // This declarations come from Microsoft SDK #define TME_HOVER 0x00000001 #define TME_LEAVE 0x00000002 #define TME_QUERY 0x40000000 #define TME_CANCEL 0x80000000 #define HOVER_DEFAULT 0xFFFFFFFF #define WM_MOUSEHOVER 0x02A1 #define WM_MOUSELEAVE 0x02A3 typedef struct tagTRACKMOUSEEVENT { DWORD cbSize; DWORD dwFlags; HWND hwndTrack; DWORD dwHoverTime; } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT; WINUSERAPI BOOL WINAPI TrackMouseEvent( IN OUT LPTRACKMOUSEEVENT lpEventTrack); #ifdef __GL_H__ #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 WINGDIAPI void APIENTRY glPolygonOffset (GLfloat factor,GLfloat units); #endif #endif #endif fox-1.6.49/include/FXPrintDialog.h0000664000175000017500000001307712130340076013604 00000000000000/******************************************************************************** * * * P r i n t J o b D i a l o g * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPrintDialog.h,v 1.17 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXPRINTDIALOG_H #define FXPRINTDIALOG_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { class FXRadioButton; class FXComboBox; class FXListBox; class FXTextField; class FXSpinner; class FXIcon; /// Printer selection dialog class FXAPI FXPrintDialog : public FXDialogBox { FXDECLARE(FXPrintDialog) protected: FXRadioButton *sendtoprinter; FXComboBox *printername; FXRadioButton *sendtofile; FXTextField *filename; FXRadioButton *printall; FXRadioButton *printeven; FXRadioButton *printodd; FXRadioButton *printrange; FXRadioButton *firstpagefirst; FXRadioButton *lastpagefirst; FXRadioButton *printincolor; FXRadioButton *printinblacknwhite; FXRadioButton *orientportrait; FXRadioButton *orientlanscape; FXListBox *media; FXSpinner *firstpage; FXSpinner *lastpage; FXSpinner *numberofcopies; FXIcon *landscapeIcon; FXIcon *portraitIcon; FXPrinter printer; protected: FXPrintDialog(){} private: FXPrintDialog(const FXPrintDialog&); FXPrintDialog &operator=(const FXPrintDialog&); public: long onCmdToPrinter(FXObject*,FXSelector,void*); long onUpdToPrinter(FXObject*,FXSelector,void*); long onCmdToFile(FXObject*,FXSelector,void*); long onUpdToFile(FXObject*,FXSelector,void*); long onCmdBrowse(FXObject*,FXSelector,void*); long onUpdBrowse(FXObject*,FXSelector,void*); long onCmdProps(FXObject*,FXSelector,void*); long onUpdProps(FXObject*,FXSelector,void*); long onCmdPortrait(FXObject*,FXSelector,void*); long onUpdPortrait(FXObject*,FXSelector,void*); long onCmdLandscape(FXObject*,FXSelector,void*); long onUpdLandscape(FXObject*,FXSelector,void*); long onCmdPages(FXObject*,FXSelector,void*); long onUpdPages(FXObject*,FXSelector,void*); long onCmdColor(FXObject*,FXSelector,void*); long onUpdColor(FXObject*,FXSelector,void*); long onCmdGray(FXObject*,FXSelector,void*); long onUpdGray(FXObject*,FXSelector,void*); long onCmdNumCopies(FXObject*,FXSelector,void*); long onUpdNumCopies(FXObject*,FXSelector,void*); long onCmdFirstPage(FXObject*,FXSelector,void*); long onUpdFirstPage(FXObject*,FXSelector,void*); long onCmdLastPage(FXObject*,FXSelector,void*); long onUpdLastPage(FXObject*,FXSelector,void*); long onCmdCollateNormal(FXObject*,FXSelector,void*); long onUpdCollateNormal(FXObject*,FXSelector,void*); long onCmdCollateReversed(FXObject*,FXSelector,void*); long onUpdCollateReversed(FXObject*,FXSelector,void*); long onCmdFileName(FXObject*,FXSelector,void*); long onUpdFileName(FXObject*,FXSelector,void*); long onCmdPrinterName(FXObject*,FXSelector,void*); long onUpdPrinterName(FXObject*,FXSelector,void*); long onCmdAccept(FXObject*,FXSelector,void*); long onCmdMedia(FXObject*,FXSelector,void*); long onUpdMedia(FXObject*,FXSelector,void*); public: enum{ ID_TO_PRINTER=FXDialogBox::ID_LAST, ID_TO_FILE, ID_PRINTER_NAME, ID_FILE_NAME, ID_LANDSCAPE, ID_PORTRAIT, ID_MEDIA, ID_COLLATE_NORMAL, ID_COLLATE_REVERSED, ID_PAGES_ALL, ID_PAGES_EVEN, ID_PAGES_ODD, ID_PAGES_RANGE, ID_PAGES_FIRST, ID_PAGES_LAST, ID_BROWSE_FILE, ID_PROPERTIES, ID_COLOR_PRINTER, ID_GRAY_PRINTER, ID_NUM_COPIES }; public: /// Construct print dialog FXPrintDialog(FXWindow* owner,const FXString& name,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create dialog virtual void create(); /// Set printer info void setPrinter(const FXPrinter& pr); /// Get printer info void getPrinter(FXPrinter& pr); /// Save dialog to a stream virtual void save(FXStream& store) const; /// Load dialog from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXPrintDialog(); }; } #endif fox-1.6.49/include/FXSettings.h0000664000175000017500000001422412130340076013163 00000000000000/******************************************************************************** * * * S e t t i n g s C l a s s * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSettings.h,v 1.33 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSETTINGS_H #define FXSETTINGS_H #ifndef FXDICT_H #include "FXDict.h" #endif namespace FX { class FXStringDict; /** * The Settings class manages a key-value database. This is normally used as * part of Registry, but can also be used separately in applications that need * to maintain a key-value database in a file of their own. * String values can contain any character, and will be escaped when written * to the file. */ class FXAPI FXSettings : public FXDict { FXDECLARE(FXSettings) protected: bool modified; protected: virtual void *createData(const void*); virtual void deleteData(void*); FXchar* dequote(FXchar* text) const; FXchar* enquote(FXchar* result,const FXchar* text); FXStringDict* insert(const FXchar* ky){ return (FXStringDict*)FXDict::insert(ky,NULL); } FXStringDict* replace(const FXchar* ky,FXStringDict* section){ return (FXStringDict*)FXDict::replace(ky,section,true); } FXStringDict* remove(const FXchar* ky){ return (FXStringDict*)FXDict::remove(ky); } public: /// Construct settings database. FXSettings(); /// Construct copy of existing database. FXSettings(const FXSettings& orig); /// Assignment operator FXSettings &operator=(const FXSettings& orig); /// Parse a file containing a settings database. bool parseFile(const FXString& filename,bool mark); /// Unparse settings database into given file. bool unparseFile(const FXString& filename); /// Obtain the string dictionary for the given section FXStringDict* data(FXuint pos) const { return (FXStringDict*)FXDict::data(pos); } /// Find string dictionary for the given section; may be NULL FXStringDict* find(const FXchar *section) const { return (FXStringDict*)FXDict::find(section); } /// Read a formatted registry entry, using scanf-style format FXint readFormatEntry(const FXchar *section,const FXchar *key,const FXchar *fmt,...) FX_SCANF(4,5) ; /// Read a string registry entry; if no value is found, the default value def is returned const FXchar *readStringEntry(const FXchar *section,const FXchar *key,const FXchar *def=NULL); /// Read a integer registry entry; if no value is found, the default value def is returned FXint readIntEntry(const FXchar *section,const FXchar *key,FXint def=0); /// Read a unsigned integer registry entry; if no value is found, the default value def is returned FXuint readUnsignedEntry(const FXchar *section,const FXchar *key,FXuint def=0); /// Read a double-precision floating point registry entry; if no value is found, the default value def is returned FXdouble readRealEntry(const FXchar *section,const FXchar *key,FXdouble def=0.0); /// Read a color value registry entry; if no value is found, the default value def is returned FXColor readColorEntry(const FXchar *section,const FXchar *key,FXColor def=0); /// Read a boolean registry entry FXbool readBoolEntry(const FXchar *section,const FXchar *key,FXbool def=FALSE); /// Write a formatted registry entry, using printf-style format FXint writeFormatEntry(const FXchar *section,const FXchar *key,const FXchar *fmt,...) FX_PRINTF(4,5) ; /// Write a string registry entry bool writeStringEntry(const FXchar *section,const FXchar *key,const FXchar *val); /// Write a integer registry entry bool writeIntEntry(const FXchar *section,const FXchar *key,FXint val); /// Write a unsigned integer registry entry bool writeUnsignedEntry(const FXchar *section,const FXchar *key,FXuint val); /// Write a double-precision floating point registry entry bool writeRealEntry(const FXchar *section,const FXchar *key,FXdouble val); /// Write a color value entry bool writeColorEntry(const FXchar *section,const FXchar *key,FXColor val); /// Write a boolean value entry bool writeBoolEntry(const FXchar *section,const FXchar *key,FXbool val); /// Delete a registry entry bool deleteEntry(const FXchar *section,const FXchar *key); /// See if entry exists bool existingEntry(const FXchar *section,const FXchar *key); /// Delete section bool deleteSection(const FXchar *section); /// See if section exists bool existingSection(const FXchar *section); /// Clear all sections bool clear(); /// Mark as changed void setModified(bool mdfy=true){ modified=mdfy; } /// Is it modified bool isModified() const { return modified; } /// Cleanup virtual ~FXSettings(); }; } #endif fox-1.6.49/include/FXRASIcon.h0000664000175000017500000000630312130340076012620 00000000000000/******************************************************************************** * * * S U N R A S T E R I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRASIcon.h,v 1.8 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXRASICON_H #define FXRASICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// SUN Raster Image format icon class FXAPI FXRASIcon : public FXIcon { FXDECLARE(FXRASIcon) protected: FXRASIcon(){} private: FXRASIcon(const FXRASIcon&); FXRASIcon &operator=(const FXRASIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in SUN Raster Image format FXRASIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in SUN Raster Image format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in SUN Raster Image format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXRASIcon(); }; /** * Check if stream contains a RAS, return TRUE if so. */ extern FXAPI bool fxcheckRAS(FXStream& store); /** * Load an SUN Raster Image format file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadRAS(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an SUN Raster Image format file to a stream. */ extern FXAPI bool fxsaveRAS(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXList.h0000664000175000017500000004106012130340076012274 00000000000000/******************************************************************************** * * * L i s t W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXList.h,v 1.88.2.2 2006/11/17 16:02:31 fox Exp $ * ********************************************************************************/ #ifndef FXLIST_H #define FXLIST_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { /// List styles enum { LIST_EXTENDEDSELECT = 0, /// Extended selection mode allows for drag-selection of ranges of items LIST_SINGLESELECT = 0x00100000, /// Single selection mode allows up to one item to be selected LIST_BROWSESELECT = 0x00200000, /// Browse selection mode enforces one single item to be selected at all times LIST_MULTIPLESELECT = 0x00300000, /// Multiple selection mode is used for selection of individual items LIST_AUTOSELECT = 0x00400000, /// Automatically select under cursor LIST_NORMAL = LIST_EXTENDEDSELECT }; class FXIcon; class FXFont; class FXList; /// List item class FXAPI FXListItem : public FXObject { FXDECLARE(FXListItem) friend class FXList; protected: FXString label; FXIcon *icon; void *data; FXuint state; FXint x,y; private: FXListItem(const FXListItem&); FXListItem& operator=(const FXListItem&); protected: FXListItem():icon(NULL),data(NULL),state(0),x(0),y(0){} virtual void draw(const FXList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h); virtual FXint hitItem(const FXList* list,FXint x,FXint y) const; public: enum { SELECTED = 1, /// Selected FOCUS = 2, /// Focus DISABLED = 4, /// Disabled DRAGGABLE = 8, /// Draggable ICONOWNED = 16 /// Icon owned by item }; public: /// Construct new item with given text, icon, and user-data FXListItem(const FXString& text,FXIcon* ic=NULL,void* ptr=NULL):label(text),icon(ic),data(ptr),state(0),x(0),y(0){} /// Change item's text label virtual void setText(const FXString& txt); /// Return item's text label const FXString& getText() const { return label; } /// Change item's icon, deleting the old icon if it was owned virtual void setIcon(FXIcon* icn,FXbool owned=FALSE); /// Return item's icon FXIcon* getIcon() const { return icon; } /// Change item's user data void setData(void* ptr){ data=ptr; } /// Get item's user data void* getData() const { return data; } /// Make item draw as focused virtual void setFocus(FXbool focus); /// Return true if item has focus FXbool hasFocus() const { return (state&FOCUS)!=0; } /// Select item virtual void setSelected(FXbool selected); /// Return true if this item is selected FXbool isSelected() const { return (state&SELECTED)!=0; } /// Enable or disable item virtual void setEnabled(FXbool enabled); /// Return true if this item is enabled FXbool isEnabled() const { return (state&DISABLED)==0; } /// Make item draggable virtual void setDraggable(FXbool draggable); /// Return true if this item is draggable FXbool isDraggable() const { return (state&DRAGGABLE)!=0; } /// Return width of item as drawn in list virtual FXint getWidth(const FXList* list) const; /// Return height of item as drawn in list virtual FXint getHeight(const FXList* list) const; /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy item and free icons if owned virtual ~FXListItem(); }; /// List item collate function typedef FXint (*FXListSortFunc)(const FXListItem*,const FXListItem*); /// List of FXListItem's typedef FXObjectListOf FXListItemList; /** * A List Widget displays a list of items, each with a text and * optional icon. When an item's selected state changes, the list sends * a SEL_SELECTED or SEL_DESELECTED message. A change of the current * item is signified by the SEL_CHANGED message. * The list sends SEL_COMMAND messages when the user clicks on an item, * and SEL_CLICKED, SEL_DOUBLECLICKED, and SEL_TRIPLECLICKED when the user * clicks once, twice, or thrice, respectively. * When items are added, replaced, or removed, the list sends messages of * the type SEL_INSERTED, SEL_REPLACED, or SEL_DELETED. * In each of these cases, the index to the item, if any, is passed in the * 3rd argument of the message. */ class FXAPI FXList : public FXScrollArea { FXDECLARE(FXList) protected: FXListItemList items; // Item list FXint anchor; // Anchor item FXint current; // Current item FXint extent; // Extent item FXint cursor; // Cursor item FXint viewable; // Viewable item FXFont *font; // Font FXColor textColor; // Text color FXColor selbackColor; // Selected back color FXColor seltextColor; // Selected text color FXint listWidth; // List width FXint listHeight; // List height FXint visible; // Number of rows high FXString help; // Help text FXListSortFunc sortfunc; // Item sort function FXint grabx; // Grab point x FXint graby; // Grab point y FXString lookup; // Lookup string FXbool state; // State of item protected: FXList(); void recompute(); virtual FXListItem *createItem(const FXString& text,FXIcon* icon,void* ptr); private: FXList(const FXList&); FXList &operator=(const FXList&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onClicked(FXObject*,FXSelector,void*); long onDoubleClicked(FXObject*,FXSelector,void*); long onTripleClicked(FXObject*,FXSelector,void*); long onCommand(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onTipTimer(FXObject*,FXSelector,void*); long onLookupTimer(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*);public: long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); public: static FXint ascending(const FXListItem* a,const FXListItem* b); static FXint descending(const FXListItem* a,const FXListItem* b); static FXint ascendingCase(const FXListItem* a,const FXListItem* b); static FXint descendingCase(const FXListItem* a,const FXListItem* b); public: enum { ID_LOOKUPTIMER=FXScrollArea::ID_LAST, ID_LAST }; public: /// Construct a list with initially no items in it FXList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=LIST_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Compute and return content width virtual FXint getContentWidth(); /// Return content height virtual FXint getContentHeight(); /// Recalculate layout virtual void recalc(); /// List widget can receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Return the number of items in the list FXint getNumItems() const { return items.no(); } /// Return number of visible items FXint getNumVisible() const { return visible; } /// Change the number of visible items void setNumVisible(FXint nvis); /// Return the item at the given index FXListItem *getItem(FXint index) const; /// Replace the item with a [possibly subclassed] item FXint setItem(FXint index,FXListItem* item,FXbool notify=FALSE); /// Replace items text, icon, and user-data pointer FXint setItem(FXint index,const FXString& text,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Fill list by appending items from array of strings FXint fillItems(const FXchar** strings,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Fill list by appending items from newline separated strings FXint fillItems(const FXString& strings,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Insert a new [possibly subclassed] item at the give index FXint insertItem(FXint index,FXListItem* item,FXbool notify=FALSE); /// Insert item at index with given text, icon, and user-data pointer FXint insertItem(FXint index,const FXString& text,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Append a [possibly subclassed] item to the list FXint appendItem(FXListItem* item,FXbool notify=FALSE); /// Append new item with given text and optional icon, and user-data pointer FXint appendItem(const FXString& text,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Prepend a [possibly subclassed] item to the list FXint prependItem(FXListItem* item,FXbool notify=FALSE); /// Prepend new item with given text and optional icon, and user-data pointer FXint prependItem(const FXString& text,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Move item from oldindex to newindex FXint moveItem(FXint newindex,FXint oldindex,FXbool notify=FALSE); /// Extract item from list FXListItem* extractItem(FXint index,FXbool notify=FALSE); /// Remove item from list void removeItem(FXint index,FXbool notify=FALSE); /// Remove all items from list void clearItems(FXbool notify=FALSE); /// Return item width FXint getItemWidth(FXint index) const; /// Return item height FXint getItemHeight(FXint index) const; /// Return index of item at x,y, if any virtual FXint getItemAt(FXint x,FXint y) const; /// Return item hit code: 0 no hit; 1 hit the icon; 2 hit the text FXint hitItem(FXint index,FXint x,FXint y) const; /** * Search items by name, beginning from item start. If the start * item is -1 the search will start at the first item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. * The option SEARCH_IGNORECASE causes a case-insensitive match. Finally, * passing SEARCH_PREFIX causes searching for a prefix of the item name. * Return -1 if no matching item is found. */ FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /** * Search items by associated user data, beginning from item start. If the * start item is -1 the search will start at the first item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. */ FXint findItemByData(const void *ptr,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /// Scroll to bring item into view virtual void makeItemVisible(FXint index); /// Change item text void setItemText(FXint index,const FXString& text); /// Return item text FXString getItemText(FXint index) const; /// Change item icon, deleting the old icon if it was owned void setItemIcon(FXint index,FXIcon* icon,FXbool owned=FALSE); /// Return item icon, if any FXIcon* getItemIcon(FXint index) const; /// Change item user-data pointer void setItemData(FXint index,void* ptr); /// Return item user-data pointer void* getItemData(FXint index) const; /// Return TRUE if item is selected FXbool isItemSelected(FXint index) const; /// Return TRUE if item is current FXbool isItemCurrent(FXint index) const; /// Return TRUE if item is visible FXbool isItemVisible(FXint index) const; /// Return TRUE if item is enabled FXbool isItemEnabled(FXint index) const; /// Repaint item void updateItem(FXint index) const; /// Enable item virtual FXbool enableItem(FXint index); /// Disable item virtual FXbool disableItem(FXint index); /// Select item virtual FXbool selectItem(FXint index,FXbool notify=FALSE); /// Deselect item virtual FXbool deselectItem(FXint index,FXbool notify=FALSE); /// Toggle item selection state virtual FXbool toggleItem(FXint index,FXbool notify=FALSE); /// Extend selection from anchor item to index virtual FXbool extendSelection(FXint index,FXbool notify=FALSE); /// Deselect all items virtual FXbool killSelection(FXbool notify=FALSE); /// Change current item virtual void setCurrentItem(FXint index,FXbool notify=FALSE); /// Return current item, if any FXint getCurrentItem() const { return current; } /// Change anchor item void setAnchorItem(FXint index); /// Return anchor item, if any FXint getAnchorItem() const { return anchor; } /// Get item under the cursor, if any FXint getCursorItem() const { return cursor; } /// Sort items using current sort function void sortItems(); /// Return sort function FXListSortFunc getSortFunc() const { return sortfunc; } /// Change sort function void setSortFunc(FXListSortFunc func){ sortfunc=func; } /// Change text font void setFont(FXFont* fnt); /// Return text font FXFont* getFont() const { return font; } /// Return normal text color FXColor getTextColor() const { return textColor; } /// Change normal text color void setTextColor(FXColor clr); /// Return selected text background FXColor getSelBackColor() const { return selbackColor; } /// Change selected text background void setSelBackColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const { return seltextColor; } /// Change selected text color void setSelTextColor(FXColor clr); /// Return list style FXuint getListStyle() const; /// Change list style void setListStyle(FXuint style); /// Set the status line help text for this list void setHelpText(const FXString& text); /// Get the status line help text for this list const FXString& getHelpText() const { return help; } /// Save list to a stream virtual void save(FXStream& store) const; /// Load list from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXList(); }; } #endif fox-1.6.49/include/FXQuatd.h0000664000175000017500000001223212130340076012436 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n Q u a t e r n i o n * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXQuatd.h,v 1.15 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXQUATD_H #define FXQUATD_H namespace FX { class FXMat3d; /// Double-precision quaternion class FXAPI FXQuatd : public FXVec4d { public: /// Constructors FXQuatd(){} /// Copy constructor FXQuatd(const FXQuatd& q):FXVec4d(q){} /// Construct from components FXQuatd(FXdouble xx,FXdouble yy,FXdouble zz,FXdouble ww):FXVec4d(xx,yy,zz,ww){} /// Construct from array of doubles FXQuatd(const FXdouble v[]):FXVec4d(v){} /// Construct from axis and angle FXQuatd(const FXVec3d& axis,FXdouble phi=0.0); /// Construct from euler angles yaw (z), pitch (y), and roll (x) FXQuatd(FXdouble roll,FXdouble pitch,FXdouble yaw); /// Construct quaternion from two unit vectors FXQuatd(const FXVec3d& fr,const FXVec3d& to); /// Construct quaternion from three axes FXQuatd(const FXVec3d& ex,const FXVec3d& ey,const FXVec3d& ez); /// Construct quaternion from 3x3 matrix FXQuatd(const FXMat3d& mat); /// Adjust quaternion length FXQuatd& adjust(); /// Set quaternion from axis and angle void setAxisAngle(const FXVec3d& axis,FXdouble phi=0.0); /// Obtain axis and angle from quaternion void getAxisAngle(FXVec3d& axis,FXdouble& phi) const; /// Set quaternion from roll (x), pitch (y), yaw (z) void setRollPitchYaw(FXdouble roll,FXdouble pitch,FXdouble yaw); void getRollPitchYaw(FXdouble& roll,FXdouble& pitch,FXdouble& yaw) const; /// Set quaternion from yaw (z), pitch (y), roll (x) void setYawPitchRoll(FXdouble yaw,FXdouble pitch,FXdouble roll); void getYawPitchRoll(FXdouble& yaw,FXdouble& pitch,FXdouble& roll) const; /// Set quaternion from roll (x), yaw (z), pitch (y) void setRollYawPitch(FXdouble roll,FXdouble yaw,FXdouble pitch); void getRollYawPitch(FXdouble& roll,FXdouble& yaw,FXdouble& pitch) const; /// Set quaternion from pitch (y), roll (x),yaw (z) void setPitchRollYaw(FXdouble pitch,FXdouble roll,FXdouble yaw); void getPitchRollYaw(FXdouble& pitch,FXdouble& roll,FXdouble& yaw) const; /// Set quaternion from pitch (y), yaw (z), roll (x) void setPitchYawRoll(FXdouble pitch,FXdouble yaw,FXdouble roll); void getPitchYawRoll(FXdouble& pitch,FXdouble& yaw,FXdouble& roll) const; /// Set quaternion from yaw (z), roll (x), pitch (y) void setYawRollPitch(FXdouble yaw,FXdouble roll,FXdouble pitch); void getYawRollPitch(FXdouble& yaw,FXdouble& roll,FXdouble& pitch) const; /// Set quaternion from axes void setAxes(const FXVec3d& ex,const FXVec3d& ey,const FXVec3d& ez); /// Get quaternion axes void getAxes(FXVec3d& ex,FXVec3d& ey,FXVec3d& ez) const; /// Obtain local x axis FXVec3d getXAxis() const; /// Obtain local y axis FXVec3d getYAxis() const; /// Obtain local z axis FXVec3d getZAxis() const; /// Exponentiate quaternion FXQuatd exp() const; /// Take logarithm of quaternion FXQuatd log() const; /// Invert quaternion FXQuatd invert() const; /// Invert unit quaternion FXQuatd unitinvert() const; /// Conjugate quaternion FXQuatd conj() const; /// Construct quaternion from arc a->b on unit sphere FXQuatd& arc(const FXVec3d& a,const FXVec3d& b); /// Spherical lerp FXQuatd& lerp(const FXQuatd& u,const FXQuatd& v,FXdouble f); /// Multiply quaternions FXQuatd operator*(const FXQuatd& q) const; /// Rotation of a vector by a quaternion FXVec3d operator*(const FXVec3d& v) const; }; } #endif fox-1.6.49/include/FXException.h0000664000175000017500000001070412130340076013320 00000000000000/******************************************************************************** * * * E x c e p t i o n T y p e s * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXException.h,v 1.14 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXEXCEPTION_H #define FXEXCEPTION_H namespace FX { /// Generic catch-all exception class FXAPI FXException { private: const FXchar *message; private: static const FXchar exceptionName[]; public: FXException():message(FXException::exceptionName){} FXException(const FXchar *msg):message(msg){} const FXchar *what() const { return message; } ~FXException(){} }; /// Generic error exception class FXAPI FXErrorException : public FXException { private: static const FXchar exceptionName[]; public: FXErrorException():FXException(FXErrorException::exceptionName){} FXErrorException(const FXchar *msg):FXException(msg){} }; /// Index out of range class FXAPI FXRangeException : public FXErrorException { private: static const FXchar exceptionName[]; public: FXRangeException():FXErrorException(FXRangeException::exceptionName){} FXRangeException(const FXchar *msg):FXErrorException(msg){} }; /// Invalid pointer class FXAPI FXPointerException : public FXErrorException { private: static const FXchar exceptionName[]; public: FXPointerException():FXErrorException(FXPointerException::exceptionName){} FXPointerException(const FXchar *msg):FXErrorException(msg){} }; /// Generic resource exception class FXAPI FXResourceException : public FXException { private: static const FXchar exceptionName[]; public: FXResourceException():FXException(FXResourceException::exceptionName){} FXResourceException(const FXchar *msg):FXException(msg){} }; /// Out of memory class FXAPI FXMemoryException : public FXResourceException { private: static const FXchar exceptionName[]; public: FXMemoryException():FXResourceException(FXMemoryException::exceptionName){} FXMemoryException(const FXchar *msg):FXResourceException(msg){} }; /// Window exception class FXAPI FXWindowException : public FXResourceException { private: static const FXchar exceptionName[]; public: FXWindowException():FXResourceException(FXWindowException::exceptionName){} FXWindowException(const FXchar *msg):FXResourceException(msg){} }; /// Image, cursor, bitmap exception class FXAPI FXImageException : public FXResourceException { private: static const FXchar exceptionName[]; public: FXImageException():FXResourceException(FXImageException::exceptionName){} FXImageException(const FXchar *msg):FXResourceException(msg){} }; /// Font exception class FXAPI FXFontException : public FXResourceException { private: static const FXchar exceptionName[]; public: FXFontException():FXResourceException(FXFontException::exceptionName){} FXFontException(const FXchar *msg):FXResourceException(msg){} }; } #endif fox-1.6.49/include/FXBitmapView.h0000664000175000017500000001122412130340076013427 00000000000000/******************************************************************************** * * * B i t m a p V i e w W i d g e t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXBitmapView.h,v 1.8 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXBITMAPVIEW_H #define FXBITMAPVIEW_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { class FXBitmap; /// Bitmap alignment styles enum { BITMAPVIEW_NORMAL = 0, /// Normal mode is centered BITMAPVIEW_CENTER_X = 0, /// Centered horizontally BITMAPVIEW_LEFT = 0x00100000, /// Left-aligned BITMAPVIEW_RIGHT = 0x00200000, /// Right-aligned BITMAPVIEW_CENTER_Y = 0, /// Centered vertically BITMAPVIEW_TOP = 0x00400000, /// Top-aligned BITMAPVIEW_BOTTOM = 0x00800000 /// Bottom-aligned }; /** * The Bitmap View widget display a scrollable view of a monochrome bitmap image; * the bitmap is not owned by the bitmap frame so it must be explicitly deleted * elsewhere. Thus, a single bitmap image can be displayed inside multiple bitmap * view widgets. */ class FXAPI FXBitmapView : public FXScrollArea { FXDECLARE(FXBitmapView) protected: FXBitmap *bitmap; // Image to view FXColor onColor; // Color for on pixels FXColor offColor; // Color for off pixels FXint grabx; // Grab point x FXint graby; // Grab point y protected: FXBitmapView(); private: FXBitmapView(const FXBitmapView&); FXBitmapView &operator=(const FXBitmapView&); public: long onPaint(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); public: enum { ID_XYZ=FXScrollArea::ID_LAST, ID_LAST }; public: /// Construct a scroll window FXBitmapView(FXComposite* p,FXBitmap* bmp=NULL,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout immediately virtual void layout(); /// Image view widget can receive focus virtual bool canFocus() const; /// Return the width of the contents virtual FXint getContentWidth(); /// Return the height of the contents virtual FXint getContentHeight(); /// Change image void setBitmap(FXBitmap* bmp); /// Return image FXBitmap* getBitmap() const { return bitmap; } /// Set on color void setOnColor(FXColor clr); /// Get on color FXColor getOnColor() const { return onColor; } /// Set off color void setOffColor(FXColor clr); /// Get off color FXColor getOffColor() const { return offColor; } /// Set the current alignment. void setAlignment(FXuint mode); /// Get the current alignment. FXuint getAlignment() const; /// Save list to a stream virtual void save(FXStream& store) const; /// Load list from a stream virtual void load(FXStream& store); /// Destroy virtual ~FXBitmapView(); }; } #endif fox-1.6.49/include/FXMenuSeparator.h0000664000175000017500000000603512130340076014151 00000000000000/******************************************************************************** * * * M e n u S e p a r a t o r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuSeparator.h,v 1.17 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUSEPARATOR_H #define FXMENUSEPARATOR_H #ifndef FXWINDOW_H #include "FXWindow.h" #endif namespace FX { /** * The menu separator is a simple decorative groove * used to delineate items in a popup menu. */ class FXAPI FXMenuSeparator : public FXWindow { FXDECLARE(FXMenuSeparator) protected: FXColor hiliteColor; FXColor shadowColor; protected: FXMenuSeparator(); private: FXMenuSeparator(const FXMenuSeparator&); FXMenuSeparator &operator=(const FXMenuSeparator&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Construct a menu separator FXMenuSeparator(FXComposite* p,FXuint opts=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change highlight color void setHiliteColor(FXColor clr); /// Get highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change shadow color void setShadowColor(FXColor clr); /// Get shadow color FXColor getShadowColor() const { return shadowColor; } /// Save menu to a stream virtual void save(FXStream& store) const; /// Load menu from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXMemMap.h0000664000175000017500000000706712130340076012546 00000000000000/******************************************************************************** * * * M e m o r y M a p p e d F i l e * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMemMap.h,v 1.8 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMEMMAP_H #define FXMEMMAP_H namespace FX { /** * A Memory Map provides a view of a file as an array of memory; * this allows the file itself to be used as backing for the data * and very simplified file access results. * Moreover, mapped files may be shared by processes, resuling * in far less "real" memory being used than would otherwise be * the case. */ class FXAPI FXMemMap { private: void* mapbase; // Memory base where it is mapped long maplength; // Length of the map long mapoffset; // Offset of the map FXInputHandle handle; // Handle for the map FXInputHandle file; // Handle for the file private: FXMemMap(const FXMemMap&); FXMemMap &operator=(const FXMemMap&); public: /// Memory map access modes enum { NONE = 0, /// Map is inaccessible READ = 1, /// Readable WRITE = 2, /// Writable EXEC = 4, /// Executable (where supported) TRUNC = 8 /// Truncate file to 0 }; /// Share mode enum { PRIV = 0, /// Private SHAR = 1 /// Shared }; public: /// Construct a memory map FXMemMap(); /// Map a view of the file; the offset must be a multiple of the page size void* mapFile(const FXString& filename,long off=0,long len=-1L,FXuint access=READ,FXuint share=PRIV); /// Unmap the view of the file void* unmap(); /// Synchronize disk void sync(); /// Return pointer to memory area void* base() const { return mapbase; } /// Obtain length of the map long length() const { return maplength; } /// Obtain offset of the map long offset() const { return mapoffset; } /// Destroy the map ~FXMemMap(); }; } #endif fox-1.6.49/include/FXApp.h0000664000175000017500000010213212130340076012077 00000000000000/******************************************************************************** * * * A p p l i c a t i o n O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXApp.h,v 1.230 2006/01/22 17:57:58 fox Exp $ * ********************************************************************************/ #ifndef FXAPP_H #define FXAPP_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { // Forward declarations class FXApp; class FXWindow; class FXIcon; class FXBitmap; class FXCursor; class FXRootWindow; class FXMainWindow; class FXPopup; class FXFont; class FXDC; class FXDCWindow; class FXVisual; class FXGLVisual; class FXGLContext; class FXTranslator; class FXComposeContext; // Opaque FOX objects struct FXTimer; struct FXChore; struct FXSignal; struct FXRepaint; struct FXInput; struct FXInvocation; /// File input modes for addInput enum FXInputMode { INPUT_NONE = 0, /// Inactive INPUT_READ = 1, /// Read input fd INPUT_WRITE = 2, /// Write input fd INPUT_EXCEPT = 4 /// Except input fd }; /// All ways of being modal enum FXModality { MODAL_FOR_NONE, /// Non modal event loop (dispatch normally) MODAL_FOR_WINDOW, /// Modal dialog (beep if outside of modal dialog) MODAL_FOR_POPUP /// Modal for popup (always dispatch to popup) }; /// Default cursors provided by the application enum FXDefaultCursor { DEF_ARROW_CURSOR, /// Arrow cursor DEF_RARROW_CURSOR, /// Reverse arrow cursor DEF_TEXT_CURSOR, /// Text cursor DEF_HSPLIT_CURSOR, /// Horizontal split cursor DEF_VSPLIT_CURSOR, /// Vertical split cursor DEF_XSPLIT_CURSOR, /// Cross split cursor DEF_SWATCH_CURSOR, /// Color swatch drag cursor DEF_MOVE_CURSOR, /// Move cursor DEF_DRAGH_CURSOR, /// Resize horizontal edge DEF_DRAGV_CURSOR, /// Resize vertical edge DEF_DRAGTL_CURSOR, /// Resize upper-leftcorner DEF_DRAGBR_CURSOR=DEF_DRAGTL_CURSOR, /// Resize bottom-right corner DEF_DRAGTR_CURSOR, /// Resize upper-right corner DEF_DRAGBL_CURSOR=DEF_DRAGTR_CURSOR, /// Resize bottom-left corner DEF_DNDSTOP_CURSOR, /// Drag and drop stop DEF_DNDCOPY_CURSOR, /// Drag and drop copy DEF_DNDMOVE_CURSOR, /// Drag and drop move DEF_DNDLINK_CURSOR, /// Drag and drop link DEF_CROSSHAIR_CURSOR, /// Cross hair cursor DEF_CORNERNE_CURSOR, /// North-east cursor DEF_CORNERNW_CURSOR, /// North-west cursor DEF_CORNERSE_CURSOR, /// South-east cursor DEF_CORNERSW_CURSOR, /// South-west cursor DEF_HELP_CURSOR, /// Help arrow cursor DEF_HAND_CURSOR, /// Hand cursor DEF_ROTATE_CURSOR, /// Rotate cursor DEF_WAIT_CURSOR /// Wait cursor }; /// FOX Event struct FXAPI FXEvent { FXuint type; /// Event type FXuint time; /// Time of last event FXint win_x; /// Window-relative x-coord FXint win_y; /// Window-relative y-coord FXint root_x; /// Root x-coord FXint root_y; /// Root y-coord FXint state; /// Mouse button and modifier key state FXint code; /// Button, Keysym, or mode; DDE Source FXString text; /// Text of keyboard event FXint last_x; /// Window-relative x-coord of previous mouse location FXint last_y; /// Window-relative y-coord of previous mouse location FXint click_x; /// Window-relative x-coord of mouse press FXint click_y; /// Window-relative y-coord of mouse press FXint rootclick_x; /// Root-relative x-coord of mouse press FXint rootclick_y; /// Root-relative y-coord of mouse press FXuint click_time; /// Time of mouse button press FXuint click_button; /// Mouse button pressed FXint click_count; /// Click-count FXbool moved; /// Moved cursor since press FXRectangle rect; /// Rectangle FXbool synthetic; /// True if synthetic expose event FXDragType target; /// Target drag type being requested }; /// Application Object class FXAPI FXApp : public FXObject { FXDECLARE(FXApp) // We've got many friends friend class FXId; friend class FXBitmap; friend class FXImage; friend class FXIcon; friend class FXCursor; friend class FXDrawable; friend class FXWindow; friend class FXShell; friend class FXRootWindow; friend class FXTopWindow; friend class FXMainWindow; friend class FXPopup; friend class FXFont; friend class FXVisual; friend class FXGLVisual; friend class FXGLContext; friend class FXDC; friend class FXDCWindow; friend class FXDragCorner; friend class FXDockHandler; friend class FXComposeContext; private: // Platform independent private data void *display; // Display we're talking to const FXchar *dpy; // Initial display guess FXHash hash; // Window handle hash table FXRegistry registry; // Application setting registry FXWindow *activeWindow; // Active toplevel window FXWindow *cursorWindow; // Window under the cursor FXWindow *mouseGrabWindow; // Window which grabbed the mouse FXWindow *keyboardGrabWindow; // Window which grabbed the keyboard FXWindow *keyWindow; // Window in which keyboard key was pressed FXWindow *selectionWindow; // Selection window FXWindow *clipboardWindow; // Clipboard window FXWindow *dropWindow; // Drop target window FXWindow *dragWindow; // Drag source window FXWindow *refresher; // GUI refresher pointer FXWindow *refresherstop; // GUI refresher end pointer FXPopup *popupWindow; // Current popup window FXRootWindow *root; // Root window FXVisual *monoVisual; // Monochrome visual FXVisual *defaultVisual; // Default [color] visual FXTimer *timers; // List of timers, sorted by time FXChore *chores; // List of chores FXRepaint *repaints; // Unhandled repaint rectangles FXTimer *timerrecs; // List of recycled timer records FXChore *chorerecs; // List of recycled chore records FXRepaint *repaintrecs; // List of recycled repaint records FXInvocation *invocation; // Modal loop invocation FXSignal *signals; // Array of signal records FXint nsignals; // Number of signals FXFont *normalFont; // Normal font FXFont *stockFont; // Stock font FXMutex appMutex; // Application wide mutex FXEvent event; // Event FXuint stickyMods; // Sticky modifier state FXInput *inputs; // Input file descriptors being watched FXint ninputs; // Number of inputs FXint maxinput; // Maximum input number FXuchar *ddeData; // DDE array FXuint ddeSize; // DDE array size FXuint maxcolors; // Maximum number of colors to allocate FXuint typingSpeed; // Typing speed FXuint clickSpeed; // Double click speed FXuint scrollSpeed; // Scroll speed FXuint scrollDelay; // Scroll delay FXuint blinkSpeed; // Cursor blink speed FXuint animSpeed; // Animation speed FXuint menuPause; // Menu popup delay FXuint tooltipPause; // Tooltip popup delay FXuint tooltipTime; // Tooltip display time FXint dragDelta; // Minimum distance considered a move FXint wheelLines; // Scroll by this many lines FXint scrollBarSize; // Scrollbar size FXColor borderColor; // Border color FXColor baseColor; // Background color of GUI controls FXColor hiliteColor; // Highlight color of GUI controls FXColor shadowColor; // Shadow color of GUI controls FXColor backColor; // Background color FXColor foreColor; // Foreground color FXColor selforeColor; // Select foreground color FXColor selbackColor; // Select background color FXColor tipforeColor; // Tooltip foreground color FXColor tipbackColor; // Tooltip background color FXColor selMenuTextColor; // Select foreground color in menus FXColor selMenuBackColor; // Select background color in menus FXCursor *waitCursor; // Current wait cursor FXuint waitCount; // Number of times wait cursor was called FXuint windowCount; // Number of windows FXCursor *cursor[DEF_WAIT_CURSOR+1]; FXTranslator *translator; // Message translator FXint appArgc; // Argument count const FXchar *const *appArgv; // Argument vector const FXchar *inputmethod; // Input method name const FXchar *inputstyle; // Input method style bool initialized; // Has been initialized private: static FXApp *app; // Application pointer // Platform dependent private stuff #ifndef WIN32 private: FXID wmDeleteWindow; // Catch delete window FXID wmQuitApp; // Catch quit application FXID wmProtocols; // Window manager protocols FXID wmMotifHints; // Motif hints FXID wmTakeFocus; // Focus explicitly set by app FXID wmState; // Window state FXID wmNetState; // Extended Window Manager window state FXID wmNetIconName; // Extended Window Manager icon name FXID wmNetWindowName; // Extended Window Manager window name FXID wmNetSupported; // Extended Window Manager states list FXID wmNetWindowType; // Extended Window Manager types FXID wmNetHMaximized; // Extended Window Manager horizontally maximized FXID wmNetVMaximized; // Extended Window Manager vertically maximized FXID wmNetMoveResize; // Extended Window Manager drag corner FXID wmNetPing; // Extended Window Manager ping FXID wmNetTypes[8]; // Extended Window Manager window types FXID wmNetStates[12]; // Extended Window Manager state FXID wmWindowRole; // Window Role FXID wmClientLeader; // Client leader FXID wmClientId; // Client id FXID embedAtom; // XEMBED support FXID embedInfoAtom; // XEMBED info support FXID timestampAtom; // Server time FXID ddeTargets; // DDE targets atom FXID ddeAtom; // DDE exchange atom FXID ddeDelete; // DDE delete target atom FXID ddeIncr; // DDE incremental data exchange atom FXDragType *ddeTypeList; // DDE drop type list FXuint ddeNumTypes; // DDE number of drop types FXDragAction ddeAction; // DDE action FXDragAction ansAction; // Reply action FXID xcbSelection; // Clipboard selection FXDragType *xcbTypeList; // Clipboard type list FXuint xcbNumTypes; // Clipboard number of types on list FXDragType *xselTypeList; // Selection type list FXuint xselNumTypes; // Selection number of types on list FXDragType *xdndTypeList; // XDND type list FXuint xdndNumTypes; // XDND number of types FXID xdndProxy; // XDND proxy atom FXID xdndAware; // XDND awareness atom FXID xdndEnter; // XDND enter window message FXID xdndLeave; // XDND leave window message FXID xdndPosition; // XDND position update message FXID xdndStatus; // XDND status feedback message FXID xdndDrop; // XDND drop message FXID xdndFinished; // XDND finished message FXID xdndSelection; // XDND selection atom FXID xdndActionMove; // XDND Move action FXID xdndActionCopy; // XDND Copy action FXID xdndActionLink; // XDND Link action FXID xdndActionPrivate; // XDND Private action FXID xdndTypes; // XDND types list atom FXID xdndSource; // XDND drag source window FXID xdndTarget; // XDND drop target window FXID xdndProxyTarget; // XDND window to set messages to FXbool xdndStatusPending; // XDND waiting for status feedback FXbool xdndStatusReceived; // XDND received at least one status FXbool xdndWantUpdates; // XDND target wants new positions while in rect FXbool xdndFinishSent; // XDND finish sent FXRectangle xdndRect; // XDND rectangle bounding target FXint xrreventbase; // XRR event base FXID stipples[23]; // Standard stipple patterns void *r_fds; // Set of file descriptors for read void *w_fds; // Set of file descriptors for write void *e_fds; // Set of file descriptors for exceptions void *xim; // Input method FXbool shmi; // Use XSHM Image possible FXbool shmp; // Use XSHM Pixmap possible FXbool synchronize; // Synchronized #else FXushort ddeTargets; // DDE targets atom FXushort ddeAtom; // DDE Exchange Atom FXDragType ddeDelete; // DDE Delete Target Atom FXDragType *ddeTypeList; // DDE drop type list FXuint ddeNumTypes; // DDE number of drop types FXDragAction ddeAction; // DDE action FXDragAction ansAction; // Reply action FXDragType *xselTypeList; // Selection type list FXuint xselNumTypes; // Selection number of types on list void* xdndTypes; // Handle to file mapping object for types list FXushort xdndAware; // XDND awareness atom FXID xdndSource; // XDND drag source window FXID xdndTarget; // XDND drop target window FXbool xdndStatusPending; // XDND waiting for status feedback FXbool xdndFinishPending; // XDND waiting for drop-confirmation FXbool xdndStatusReceived; // XDND received at least one status FXbool xdndFinishSent; // XDND finish sent FXRectangle xdndRect; // XDND rectangle bounding target FXID stipples[17]; // Standard stipple bitmaps void **handles; // Waitable object handles #endif private: // Internal helper functions FXApp(const FXApp&); FXApp &operator=(const FXApp&); static void signalhandler(int sig); static void immediatesignalhandler(int sig); void leaveWindow(FXWindow *window,FXWindow *ancestor); void enterWindow(FXWindow *window,FXWindow *ancestor); void selectionSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size); void selectionGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size); void selectionGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes); void clipboardSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size); void clipboardGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size); void clipboardGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes); void dragdropSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size); void dragdropGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size); void dragdropGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes); #ifndef WIN32 void addRepaint(FXID win,FXint x,FXint y,FXint w,FXint h,FXbool synth=0); void removeRepaints(FXID win,FXint x,FXint y,FXint w,FXint h); void scrollRepaints(FXID win,FXint dx,FXint dy); static void imcreatecallback(void*,FXApp*,void*); static void imdestroycallback(void*,FXApp*,void*); #else static FXival CALLBACK wndproc(FXID hwnd,FXuint iMsg,FXuval wParam,FXival lParam); protected: virtual FXival dispatchEvent(FXID hwnd,FXuint iMsg,FXuval wParam,FXival lParam); #endif protected: /// Return TRUE when new raw event is available virtual bool getNextEvent(FXRawEvent& ev,bool blocking=true); /// Dispatch raw event virtual bool dispatchEvent(FXRawEvent& ev); public: long onCmdQuit(FXObject*,FXSelector,void*); long onCmdDump(FXObject*,FXSelector,void*); long onCmdHover(FXObject*,FXSelector,void*); public: /// Messages applications understand enum { ID_QUIT=1, /// Terminate the application normally ID_DUMP, /// Dump the current widget tree ID_HOVER, ID_LAST }; public: /// Information static const FXuchar copyright[]; /// Copyright notice of library public: /** * Construct application object; the name and vendor strings are used * as keys into the registry database for this application's settings. * Only one single application object can be constructed. */ FXApp(const FXString& name="Application",const FXString& vendor="FoxDefault"); /// Get application name const FXString& getAppName() const { return registry.getAppKey(); } /// Get vendor name const FXString& getVendorName() const { return registry.getVendorKey(); } /// Connection to display; this is called by init() bool openDisplay(const FXchar* dpyname=NULL); /// Close connection to the display bool closeDisplay(); /// Return pointer void* getDisplay() const { return display; } /// Is application initialized bool isInitialized() const { return initialized; } /// Get argument count FXint getArgc() const { return appArgc; } /// Get argument vector const FXchar *const *getArgv() const { return appArgv; } /// Return true if input method support bool hasInputMethod() const; /// Get default visual FXVisual* getDefaultVisual() const { return defaultVisual; } /// Change default visual void setDefaultVisual(FXVisual* vis); /// Get monochrome visual FXVisual* getMonoVisual() const { return monoVisual; } /// Get root Window FXRootWindow* getRootWindow() const { return root; } /// Set root Window void setRootWindow(FXRootWindow* rt); /// Return window at the end of the focus chain FXWindow *getFocusWindow() const; /// Get the window under the cursor, if any FXWindow *getCursorWindow() const { return cursorWindow; } /// Get the active toplevel window, if any FXWindow *getActiveWindow() const { return activeWindow; } /// Get current popup window, if any FXPopup* getPopupWindow() const { return popupWindow; } /// Find window from id FXWindow* findWindowWithId(FXID xid) const; /// Find window from root x,y, starting from given window FXWindow* findWindowAt(FXint rx,FXint ry,FXID window=0) const; /// Create application's windows virtual void create(); /// Destroy application's windows virtual void destroy(); /// Detach application's windows virtual void detach(); /** * Add timeout message to be sent to target object in ms milliseconds; * the timer fires only once after the interval expires. The void* ptr * is user data which will be passed into the void* ptr of the message * handler. If a timer with the same target and message already exists, * it will be rescheduled. */ void addTimeout(FXObject* tgt,FXSelector sel,FXuint ms=1000,void* ptr=NULL); /** * Remove timeout identified by tgt and sel. */ void removeTimeout(FXObject* tgt,FXSelector sel); /** * Return TRUE if given timeout has been set */ bool hasTimeout(FXObject *tgt,FXSelector sel) const; /** * Return, in ms, the time remaining until the given timer fires. * If the timer is past due, 0 is returned. If there is no such * timer, infinity (UINT_MAX) is returned. */ FXuint remainingTimeout(FXObject *tgt,FXSelector sel); /** * Process any timeouts due at this time. */ void handleTimeouts(); /** * Add a idle processing message to be sent to target object when * the system becomes idle, i.e. there are no events to be processed. * The void* ptr is user data which will be passed into the void* ptr * of the message handler. If a chore with the same target and message * already exists, it will be rescheduled. */ void addChore(FXObject* tgt,FXSelector sel,void *ptr=NULL); /** * Remove idle processing message identified by tgt and sel. */ void removeChore(FXObject* tgt,FXSelector sel); /** * Return TRUE if given chore has been set */ bool hasChore(FXObject *tgt,FXSelector sel) const; /** * Add signal processing message to be sent to target object when * the signal sig is raised; flags are to be set as per POSIX definitions. * When immediate is TRUE, the message will be sent to the target right away; * this should be used with extreme care as the application is interrupted * at an unknown point in its execution. */ void addSignal(FXint sig,FXObject* tgt,FXSelector sel,FXbool immediate=FALSE,FXuint flags=0); /// Remove signal message for signal sig void removeSignal(FXint sig); /** * Add a file descriptor fd to be watched for activity as determined * by mode, where mode is a bitwise OR (INPUT_READ, INPUT_WRITE, INPUT_EXCEPT). * A message of type SEL_IO_READ, SEL_IO_WRITE, or SEL_IO_EXCEPT will be sent * to the target when the specified activity is detected on the file descriptor. */ bool addInput(FXInputHandle fd,FXuint mode,FXObject *tgt,FXSelector sel); /** * Remove input message and target object for the specified file descriptor * and mode, which is a bitwise OR of (INPUT_READ, INPUT_WRITE, INPUT_EXCEPT). */ bool removeInput(FXInputHandle fd,FXuint mode); /// Return key state of given key bool getKeyState(FXuint keysym) const; /// Peek to determine if there's an event bool peekEvent(); /// Perform one event dispatch; return true if event was dispatched bool runOneEvent(bool blocking=true); /** * Run the main application event loop until stop() is called, * and return the exit code passed as argument to stop(). */ FXint run(); /** * Run an event loop till some flag becomes non-zero, and * then return. */ FXint runUntil(FXuint& condition); /** * Run event loop while events are available, non-modally. * Return when no more events, timers, or chores are outstanding. */ FXint runWhileEvents(); /** * Run event loop while there are events are available in the queue. * Returns 1 when all events in the queue have been handled, and 0 when * the event loop was terminated due to stop() or stopModal(). * Except for the modal window and its children, user input to all windows * is blocked; if the modal window is NULL, all user input is blocked. */ FXint runModalWhileEvents(FXWindow* window=NULL); /** * Run modal event loop, blocking keyboard and mouse events to all windows * until stopModal is called. */ FXint runModal(); /** * Run a modal event loop for the given window, until stop() or stopModal() is * called. Except for the modal window and its children, user input to all * windows is blocked; if the modal window is NULL all user input is blocked. */ FXint runModalFor(FXWindow* window); /** * Run modal while window is shown, or until stop() or stopModal() is called. * Except for the modal window and its children, user input to all windows * is blocked; if the modal window is NULL all user input is blocked. */ FXint runModalWhileShown(FXWindow* window); /** * Run popup menu while shown, until stop() or stopModal() is called. * Also returns when entering previous cascading popup menu. */ FXint runPopup(FXWindow* window); /// True if the window is modal bool isModal(FXWindow* window) const; /// Return window of current modal loop FXWindow* getModalWindow() const; /// Return mode of current modal loop FXModality getModality() const; /** * Terminate the outermost event loop, and all inner modal loops; * All more deeper nested event loops will be terminated with code equal * to 0, while the outermost event loop will return code equal to value. */ void stop(FXint value=0); /** * Break out of the matching modal loop, returning code equal to value. * All deeper nested event loops are terminated with code equal to 0. */ void stopModal(FXWindow* window,FXint value=0); /** * Break out of the innermost modal loop, returning code equal to value. */ void stopModal(FXint value=0); /// Force GUI refresh void forceRefresh(); /// Schedule a refresh void refresh(); /// Flush pending repaints void flush(bool sync=false); /** * Paint all windows marked for repainting. * On return all the applications windows have been painted. */ void repaint(); /** * Initialize application. * Parses and removes common command line arguments, reads the registry. * Finally, if connect is TRUE, it opens the display. */ virtual void init(int& argc,char** argv,bool connect=true); /** * Exit application. * Closes the display and writes the registry. */ virtual void exit(FXint code=0); /** * Return a reference to the registry. The registry keeps * settings and configuration information for an application, * which are automatically loaded when the application starts * up, and saved when the application terminates. */ FXRegistry& reg(){ return registry; } /// Register new DND type FXDragType registerDragType(const FXString& name) const; /// Get drag type name FXString getDragTypeName(FXDragType type) const; /// Return drag window if a drag operation is in progress FXWindow* getDragWindow() const { return dragWindow; } /// Beep void beep(); /// Return application instance static inline FXApp* instance(){ return app; } /// Change default font void setNormalFont(FXFont* font); /// Return default font FXFont* getNormalFont() const { return normalFont; } /// Begin of wait-cursor block; wait-cursor blocks may be nested. void beginWaitCursor(); /// End of wait-cursor block void endWaitCursor(); /// Change to a new wait cursor void setWaitCursor(FXCursor *cur); /// Return current wait cursor FXCursor* getWaitCursor() const { return waitCursor; } /// Obtain a default cursor FXCursor* getDefaultCursor(FXDefaultCursor which) const { return cursor[which]; } /// Change default cursor void setDefaultCursor(FXDefaultCursor which,FXCursor* cur); /** * Write a window and its children, and all resources reachable from this * window, into the stream store. (EXPERIMENTAL!) */ FXbool writeWindow(FXStream& store,FXWindow *window); /** * Read a window and its children from the stream store, and append * it under father; note it is initially not created yet. (EXPERIMENTAL!) */ FXbool readWindow(FXStream& store,FXWindow*& window,FXWindow* father,FXWindow* owner); /** * Return a reference to the application-wide mutex. * Normally, the main user interface thread holds this mutex, * insuring that no other threads are modifying data during the * processing of user interface messages. However, whenever the * main user interface thread blocks for messages, it releases * this mutex, to allow other threads to modify the same data. * When a new message becomes available, the main user interface * thread regains the mutex prior to dispatching the message. * Other threads should hold this mutex only for short durations, * so as to not starve the main user interface thread. */ FXMutex& mutex(){ return appMutex; } /** * Change message translator. * The new translator will be owned by FXApp. */ void setTranslator(FXTranslator* trans); /// Return message translator FXTranslator* getTranslator() const { return translator; } /// Obtain application-wide settings FXuint getTypingSpeed() const { return typingSpeed; } FXuint getClickSpeed() const { return clickSpeed; } FXuint getScrollSpeed() const { return scrollSpeed; } FXuint getScrollDelay() const { return scrollDelay; } FXuint getBlinkSpeed() const { return blinkSpeed; } FXuint getAnimSpeed() const { return animSpeed; } FXuint getMenuPause() const { return menuPause; } FXuint getTooltipPause() const { return tooltipPause; } FXuint getTooltipTime() const { return tooltipTime; } FXint getDragDelta() const { return dragDelta; } FXint getWheelLines() const { return wheelLines; } FXint getScrollBarSize() const { return scrollBarSize; } /// Change application-wide settings void setTypingSpeed(FXuint speed); void setClickSpeed(FXuint speed); void setScrollSpeed(FXuint speed); void setScrollDelay(FXuint delay); void setBlinkSpeed(FXuint speed); void setAnimSpeed(FXuint speed); void setMenuPause(FXuint pause); void setTooltipPause(FXuint pause); void setTooltipTime(FXuint time); void setDragDelta(FXint delta); void setWheelLines(FXint lines); void setScrollBarSize(FXint size); /// Obtain default colors FXColor getBorderColor() const { return borderColor; } FXColor getBaseColor() const { return baseColor; } FXColor getHiliteColor() const { return hiliteColor; } FXColor getShadowColor() const { return shadowColor; } FXColor getBackColor() const { return backColor; } FXColor getForeColor() const { return foreColor; } FXColor getSelforeColor() const { return selforeColor; } FXColor getSelbackColor() const { return selbackColor; } FXColor getTipforeColor() const { return tipforeColor; } FXColor getTipbackColor() const { return tipbackColor; } FXColor getSelMenuTextColor() const { return selMenuTextColor; } FXColor getSelMenuBackColor() const { return selMenuBackColor; } /// Change default colors void setBorderColor(FXColor color); void setBaseColor(FXColor color); void setHiliteColor(FXColor color); void setShadowColor(FXColor color); void setBackColor(FXColor color); void setForeColor(FXColor color); void setSelforeColor(FXColor color); void setSelbackColor(FXColor color); void setTipforeColor(FXColor color); void setTipbackColor(FXColor color); void setSelMenuTextColor(FXColor color); void setSelMenuBackColor(FXColor color); /// Get number of existing windows FXuint getWindowCount() const { return windowCount; } /// Save virtual void save(FXStream& store) const; /// Load virtual void load(FXStream& store); /// Dump widget information void dumpWidgets() const; /// Destroy the application and all reachable resources virtual ~FXApp(); }; } #endif fox-1.6.49/include/FXTreeList.h0000664000175000017500000005313112130340076013116 00000000000000/******************************************************************************** * * * T r e e L i s t W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTreeList.h,v 1.101 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTREELIST_H #define FXTREELIST_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { class FXIcon; class FXFont; class FXTreeList; class FXDirList; /// Tree list styles enum { TREELIST_EXTENDEDSELECT = 0, /// Extended selection mode allows for drag-selection of ranges of items TREELIST_SINGLESELECT = 0x00100000, /// Single selection mode allows up to one item to be selected TREELIST_BROWSESELECT = 0x00200000, /// Browse selection mode enforces one single item to be selected at all times TREELIST_MULTIPLESELECT = 0x00300000, /// Multiple selection mode is used for selection of individual items TREELIST_AUTOSELECT = 0x00400000, /// Automatically select under cursor TREELIST_SHOWS_LINES = 0x00800000, /// Lines shown TREELIST_SHOWS_BOXES = 0x01000000, /// Boxes to expand shown TREELIST_ROOT_BOXES = 0x02000000, /// Display root boxes also TREELIST_NORMAL = TREELIST_EXTENDEDSELECT }; /// Tree list Item class FXAPI FXTreeItem : public FXObject { FXDECLARE(FXTreeItem) friend class FXTreeList; friend class FXDirList; protected: FXTreeItem *parent; // Parent item FXTreeItem *prev; // Previous item FXTreeItem *next; // Next item FXTreeItem *first; // First child item FXTreeItem *last; // Last child item FXString label; // Text of item FXIcon *openIcon; // Icon of item FXIcon *closedIcon; // Icon of item void *data; // Item user data pointer FXuint state; // Item state flags FXint x,y; private: FXTreeItem(const FXTreeItem&); FXTreeItem& operator=(const FXTreeItem&); protected: FXTreeItem():parent(NULL),prev(NULL),next(NULL),first(NULL),last(NULL),openIcon(NULL),closedIcon(NULL),data(NULL),state(0),x(0),y(0){} virtual void draw(const FXTreeList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual FXint hitItem(const FXTreeList* list,FXint x,FXint y) const; public: enum{ SELECTED = 1, /// Selected FOCUS = 2, /// Focus DISABLED = 4, /// Disabled OPENED = 8, /// Opened EXPANDED = 16, /// Expanded HASITEMS = 32, /// Has virtual subitems DRAGGABLE = 64, /// Draggable OPENICONOWNED = 128, /// Open icon owned by item CLOSEDICONOWNED = 256 /// Close icon owned by item }; public: /// Constructor FXTreeItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL):parent(NULL),prev(NULL),next(NULL),first(NULL),last(NULL),label(text),openIcon(oi),closedIcon(ci),data(ptr),state(0),x(0),y(0){} /// Get parent item FXTreeItem* getParent() const { return parent; } /// Get next sibling item FXTreeItem* getNext() const { return next; } /// Get previous sibling item FXTreeItem* getPrev() const { return prev; } /// Get first child item FXTreeItem* getFirst() const { return first; } /// Get las child item FXTreeItem* getLast() const { return last; } /// Get item below this one in list FXTreeItem* getBelow() const; /// Get item above this one in list FXTreeItem* getAbove() const; /// Get number of children of item FXint getNumChildren() const; /// Change item label virtual void setText(const FXString& txt); /// Get item label const FXString& getText() const { return label; } /// Change open icon, deleting the old icon if it was owned virtual void setOpenIcon(FXIcon* icn,FXbool owned=FALSE); /// Get open icon FXIcon* getOpenIcon() const { return openIcon; } /// Change closed icon, deleting the old icon if it was owned virtual void setClosedIcon(FXIcon* icn,FXbool owned=FALSE); /// Get closed icon FXIcon* getClosedIcon() const { return closedIcon; } /// Change item user data void setData(void* ptr){ data=ptr; } /// Get item user data void* getData() const { return data; } /// Make item draw as focused virtual void setFocus(FXbool focus); /// Return true if item has focus FXbool hasFocus() const { return (state&FOCUS)!=0; } /// Select item virtual void setSelected(FXbool selected); /// Return true if this item is selected FXbool isSelected() const { return (state&SELECTED)!=0; } /// Make item show as open virtual void setOpened(FXbool opened); /// Return true if this item is open FXbool isOpened() const { return (state&OPENED)!=0; } /// Expand or collapse item virtual void setExpanded(FXbool expanded); /// Return true if this item is expanded into sub items FXbool isExpanded() const { return (state&EXPANDED)!=0; } /// Enable or disable item virtual void setEnabled(FXbool enabled); /// Return true if this item is enabled FXbool isEnabled() const { return (state&DISABLED)==0; } /// Make item draggable virtual void setDraggable(FXbool draggable); /// Return true if this item is draggable FXbool isDraggable() const { return (state&DRAGGABLE)!=0; } /// Return TRUE if subitems, real or imagined FXbool hasItems() const { return (state&HASITEMS)!=0; } /// Change has items flag void setHasItems(FXbool flag); /// Return true if descendent of parent item FXbool isChildOf(const FXTreeItem* item) const; /// Return true if ancestor of child item FXbool isParentOf(const FXTreeItem* item) const; /// Return width of item as drawn in list virtual FXint getWidth(const FXTreeList* list) const; /// Return height of item as drawn in list virtual FXint getHeight(const FXTreeList* list) const; /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy item and free icons if owned virtual ~FXTreeItem(); }; /// Tree item collate function typedef FXint (*FXTreeListSortFunc)(const FXTreeItem*,const FXTreeItem*); /** * A Tree List Widget organizes items in a hierarchical, tree-like fashion. * Subtrees can be collapsed or expanded by double-clicking on an item * or by clicking on the optional plus button in front of the item. * Each item may have a text and optional open-icon as well as a closed-icon. * The items may be connected by optional lines to show the hierarchical * relationship. * When an item's selected state changes, the treelist emits a SEL_SELECTED * or SEL_DESELECTED message. If an item is opened or closed, a message * of type SEL_OPENED or SEL_CLOSED is sent. When the subtree under an * item is expanded, a SEL_EXPANDED or SEL_COLLAPSED message is issued. * A change of the current item is signified by the SEL_CHANGED message. * In addition, the tree list sends SEL_COMMAND messages when the user * clicks on an item, and SEL_CLICKED, SEL_DOUBLECLICKED, and SEL_TRIPLECLICKED * when the user clicks once, twice, or thrice, respectively. * When items are added or removed, the tree list sends messages of the * type SEL_INSERTED or SEL_DELETED. * In each of these cases, a pointer to the item, if any, is passed in the * 3rd argument of the message. */ class FXAPI FXTreeList : public FXScrollArea { FXDECLARE(FXTreeList) protected: FXTreeItem *firstitem; // First root item FXTreeItem *lastitem; // Last root item FXTreeItem *anchoritem; // Selection anchor item FXTreeItem *currentitem; // Current item FXTreeItem *extentitem; // Selection extent FXTreeItem *cursoritem; // Item under cursor FXTreeItem *viewableitem; // Visible item FXFont *font; // Font FXTreeListSortFunc sortfunc; // Item sort function FXColor textColor; // Text color FXColor selbackColor; // Selected background color FXColor seltextColor; // Selected text color FXColor lineColor; // Line color FXint treeWidth; // Tree width FXint treeHeight; // Tree height FXint visible; // Number of visible items FXint indent; // Parent to child indentation FXint grabx; // Grab point x FXint graby; // Grab point y FXString lookup; // Lookup string FXString tip; FXString help; // Help string FXbool state; // State of item protected: FXTreeList(); virtual FXTreeItem* createItem(const FXString& text,FXIcon* oi,FXIcon* ci,void* ptr); void sort(FXTreeItem*& f1,FXTreeItem*& t1,FXTreeItem*& f2,FXTreeItem*& t2,int n); void recompute(); private: FXTreeList(const FXTreeList&); FXTreeList& operator=(const FXTreeList&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onTipTimer(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onClicked(FXObject*,FXSelector,void*); long onDoubleClicked(FXObject*,FXSelector,void*); long onTripleClicked(FXObject*,FXSelector,void*); long onCommand(FXObject*,FXSelector,void*); long onLookupTimer(FXObject*,FXSelector,void*); public: static FXint ascending(const FXTreeItem*,const FXTreeItem*); static FXint descending(const FXTreeItem*,const FXTreeItem*); static FXint ascendingCase(const FXTreeItem*,const FXTreeItem*); static FXint descendingCase(const FXTreeItem*,const FXTreeItem*); public: enum { ID_LOOKUPTIMER=FXScrollArea::ID_LAST, ID_LAST }; public: /// Construct a new, initially empty tree list FXTreeList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=TREELIST_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Compute and return content width virtual FXint getContentWidth(); /// Return content height virtual FXint getContentHeight(); /// Recalculate layout virtual void recalc(); /// Tree list can receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Return number of items FXint getNumItems() const; /// Return number of visible items FXint getNumVisible() const { return visible; } /// Change number of visible items void setNumVisible(FXint nvis); /// Return first root item FXTreeItem* getFirstItem() const { return firstitem; } /// Return last root item FXTreeItem* getLastItem() const { return lastitem; } /// Fill tree list by appending items from array of strings FXint fillItems(FXTreeItem* father,const FXchar** strings,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Fill tree list by appending items from newline separated strings FXint fillItems(FXTreeItem* father,const FXString& strings,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Insert [possibly subclassed] item under father before other item FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE); /// Insert item with given text and optional icons, and user-data pointer under father before other item FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Append [possibly subclassed] item as last child of father FXTreeItem* appendItem(FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE); /// Append item with given text and optional icons, and user-data pointer as last child of father FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Prepend [possibly subclassed] item as first child of father FXTreeItem* prependItem(FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE); /// Prepend item with given text and optional icons, and user-data pointer as first child of father FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Move item under father before other item FXTreeItem *moveItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item); /// Extract item FXTreeItem* extractItem(FXTreeItem* item,FXbool notify=FALSE); /// Remove item void removeItem(FXTreeItem* item,FXbool notify=FALSE); /// Remove items in range [fm, to] inclusively void removeItems(FXTreeItem* fm,FXTreeItem* to,FXbool notify=FALSE); /// Remove all items from list void clearItems(FXbool notify=FALSE); /// Return item width FXint getItemWidth(const FXTreeItem* item) const { return item->getWidth(this); } /// Return item height FXint getItemHeight(const FXTreeItem* item) const { return item->getHeight(this); } /// Get item at x,y, if any virtual FXTreeItem* getItemAt(FXint x,FXint y) const; /** * Search items by name, beginning from item start. If the start item * is NULL the search will start at the first, top-most item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the search * direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. * The option SEARCH_IGNORECASE causes a case-insensitive match. Finally, * passing SEARCH_PREFIX causes searching for a prefix of the item name. * Return NULL if no matching item is found. */ FXTreeItem* findItem(const FXString& name,FXTreeItem* start=NULL,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /** * Search items by associated user data, beginning from item start. If the * start item is NULL the search will start at the first, top-most item * in the list. Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control * the search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. */ FXTreeItem* findItemByData(const void *ptr,FXTreeItem* start=NULL,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /// Scroll to make item visible virtual void makeItemVisible(FXTreeItem* item); /// Change item's text void setItemText(FXTreeItem* item,const FXString& text); /// Return item's text FXString getItemText(const FXTreeItem* item) const; /// Change item's open icon void setItemOpenIcon(FXTreeItem* item,FXIcon* icon,FXbool owned=FALSE); /// Return item's open icon, deleting the old icon if it was owned FXIcon* getItemOpenIcon(const FXTreeItem* item) const; /// Chance item's closed icon, deleting the old icon if it was owned void setItemClosedIcon(FXTreeItem* item,FXIcon* icon,FXbool owned=FALSE); /// Return item's closed icon FXIcon* getItemClosedIcon(const FXTreeItem* item) const; /// Change item user-data pointer void setItemData(FXTreeItem* item,void* ptr) const; /// Return item user-data pointer void* getItemData(const FXTreeItem* item) const; /// Return TRUE if item is selected FXbool isItemSelected(const FXTreeItem* item) const; /// Return TRUE if item is current FXbool isItemCurrent(const FXTreeItem* item) const; /// Return TRUE if item is visible FXbool isItemVisible(const FXTreeItem* item) const; /// Return TRUE if item opened FXbool isItemOpened(const FXTreeItem* item) const; /// Return TRUE if item expanded FXbool isItemExpanded(const FXTreeItem* item) const; /// Return TRUE if item is a leaf-item, i.e. has no children FXbool isItemLeaf(const FXTreeItem* item) const; /// Return TRUE if item is enabled FXbool isItemEnabled(const FXTreeItem* item) const; /// Return item hit code: 0 outside, 1 icon, 2 text, 3 box FXint hitItem(const FXTreeItem* item,FXint x,FXint y) const; /// Repaint item void updateItem(FXTreeItem* item) const; /// Enable item virtual FXbool enableItem(FXTreeItem* item); /// Disable item virtual FXbool disableItem(FXTreeItem* item); /// Select item virtual FXbool selectItem(FXTreeItem* item,FXbool notify=FALSE); /// Deselect item virtual FXbool deselectItem(FXTreeItem* item,FXbool notify=FALSE); /// Toggle item selection virtual FXbool toggleItem(FXTreeItem* item,FXbool notify=FALSE); /// Extend selection from anchor item to item virtual FXbool extendSelection(FXTreeItem* item,FXbool notify=FALSE); /// Deselect all items virtual FXbool killSelection(FXbool notify=FALSE); /// Open item virtual FXbool openItem(FXTreeItem* item,FXbool notify=FALSE); /// Close item virtual FXbool closeItem(FXTreeItem* item,FXbool notify=FALSE); /// Collapse tree virtual FXbool collapseTree(FXTreeItem* tree,FXbool notify=FALSE); /// Expand tree virtual FXbool expandTree(FXTreeItem* tree,FXbool notify=FALSE); /// Change current item virtual void setCurrentItem(FXTreeItem* item,FXbool notify=FALSE); /// Return current item, if any FXTreeItem* getCurrentItem() const { return currentitem; } /// Change anchor item void setAnchorItem(FXTreeItem* item); /// Return anchor item, if any FXTreeItem* getAnchorItem() const { return anchoritem; } /// Return item under cursor, if any FXTreeItem* getCursorItem() const { return cursoritem; } /// Sort all items recursively void sortItems(); /// Sort root items void sortRootItems(); /// Sort children of item void sortChildItems(FXTreeItem* item); /// Return sort function FXTreeListSortFunc getSortFunc() const { return sortfunc; } /// Change sort function void setSortFunc(FXTreeListSortFunc func){ sortfunc=func; } /// Change text font void setFont(FXFont* fnt); /// Return text font FXFont* getFont() const { return font; } /// Change parent-child indent amount void setIndent(FXint in); /// Return parent-child indent amount FXint getIndent() const { return indent; } /// Return normal text color FXColor getTextColor() const { return textColor; } /// Change normal text color void setTextColor(FXColor clr); /// Return selected text background FXColor getSelBackColor() const { return selbackColor; } /// Change selected text background void setSelBackColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const { return seltextColor; } /// Change selected text color void setSelTextColor(FXColor clr); /// Return line color FXColor getLineColor() const { return lineColor; } /// Change line color void setLineColor(FXColor clr); /// Return list style FXuint getListStyle() const; /// Change list style void setListStyle(FXuint style); /// Set the status line help text for this list void setHelpText(const FXString& text); /// Get the status line help text for this list const FXString& getHelpText() const { return help; } /// Save object to a stream virtual void save(FXStream& store) const; /// Load object from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXTreeList(); }; } #endif fox-1.6.49/include/FXCP1253Codec.h0000644000175000017500000000110611637250333013136 00000000000000#ifndef FXCP1253CODEC_H #define FXCP1253CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1253 Codec class FXAPI FXCP1253Codec : public FXTextCodec { FXDECLARE(FXCP1253Codec) public: FXCP1253Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1253Codec(){} }; } #endif fox-1.6.49/include/FXCheckButton.h0000664000175000017500000001336012130340076013574 00000000000000/******************************************************************************** * * * C h e c k B u t t o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXCheckButton.h,v 1.32 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCHECKBUTTON_H #define FXCHECKBUTTON_H #ifndef FXLABEL_H #include "FXLabel.h" #endif namespace FX { /// CheckButton styles enum { CHECKBUTTON_AUTOGRAY = 0x00800000, /// Automatically gray out when not updated CHECKBUTTON_AUTOHIDE = 0x01000000, /// Automatically hide when not updated CHECKBUTTON_PLUS = 0x02000000, /// Draw a + for unchecked and - for checked CHECKBUTTON_NORMAL = JUSTIFY_NORMAL|ICON_BEFORE_TEXT }; /** * A Check Button is a tri-state button. Normally, it is either * TRUE or FALSE, and toggles between TRUE or FALSE whenever it is pressed. * A third state MAYBE may be set to indicate that no selection has been made yet * by the user, or that the state is ambiguous. * When pressed, the Check Button sends a SEL_COMMAND to its target, and the * message data represents the state of the check button. * The option CHECKBUTTON_AUTOGRAY (CHECKBUTTON_AUTOHIDE) causes the button to be * grayed out (hidden) if its handler does not respond to the SEL_UPDATE message. * With the CHECKBUTTON_PLUS option, the Check Button will draw a + or - sign instead * of a check. You can use this to make collapsable panels, by hooking up a Check * Button to a layout manager via the ID_TOGGLE_SHOWN message. This will give a * similar visual element as collapsing folders in a Tree List. */ class FXAPI FXCheckButton : public FXLabel { FXDECLARE(FXCheckButton) protected: FXColor checkColor; // Color of check mark FXColor boxColor; // Color of check box FXbool check; // Check state FXbool oldcheck; // Old check state protected: FXCheckButton(); private: FXCheckButton(const FXCheckButton&); FXCheckButton &operator=(const FXCheckButton&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCheck(FXObject*,FXSelector,void*); long onUncheck(FXObject*,FXSelector,void*); long onUnknown(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); public: /// Construct new check button FXCheckButton(FXComposite* p,const FXString& text,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=CHECKBUTTON_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Returns true because a check button can receive focus virtual bool canFocus() const; /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Set check button state (TRUE, FALSE or MAYBE) void setCheck(FXbool state=TRUE,FXbool notify=FALSE); /// Get check button state (TRUE, FALSE or MAYBE) FXbool getCheck() const { return check; } /// Change check button style void setCheckButtonStyle(FXuint style); /// Return current check button style FXuint getCheckButtonStyle() const; /// Get the box background color FXColor getBoxColor() const { return boxColor; } /// Set the box background color void setBoxColor(FXColor clr); /// Get the box check color FXColor getCheckColor() const { return checkColor; } /// Set the box check color void setCheckColor(FXColor clr); /// Save check button to a stream virtual void save(FXStream& store) const; /// Load check button from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXComposeContext.h0000664000175000017500000000665412130340076014345 00000000000000/******************************************************************************** * * * C o m p o s e - C o n t e x t * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXComposeContext.h,v 1.8 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCOMPOSECONTEXT_H #define FXCOMPOSECONTEXT_H #ifndef FXID_H #include "FXId.h" #endif namespace FX { class FXApp; class FXWindow; /** * Compose Context manages the state of an input method * if input method support is enabled. */ class FXAPI FXComposeContext : public FXId { FXDECLARE(FXComposeContext) protected: FXWindow *window; // Window we belong to FXSelector message; // Message to send it private: #ifndef WIN32 static int editStartCallback(void*,FXComposeContext*,void*); static void editDoneCallback(void*,FXComposeContext*,void*); static void editDrawCallback(void*,FXComposeContext*,void*); static void editCaretCallback(void*,FXComposeContext*,void*); static void statusStartCallback(void*,FXComposeContext*,void*); static void statusDoneCallback(void*,FXComposeContext*,void*); static void statusDrawCallback(void*,FXComposeContext*,void*); #endif protected: FXComposeContext(); private: FXComposeContext(const FXComposeContext&); FXComposeContext &operator=(const FXComposeContext&); public: /// Construct compose context for given window FXComposeContext(FXApp* a,FXWindow* win=NULL,FXSelector sel=0); /// Create resource virtual void create(); /// Destroy resource virtual void destroy(); /// Focus in void focusIn(); /// Focus out void focusOut(); /// Set the spot void setSpot(FXint x,FXint y); /// Set the area void setArea(FXint x,FXint y,FXint w,FXint h); /// Translate key event FXString translateEvent(FXRawEvent& event); /// Destructor virtual ~FXComposeContext(); }; } #endif fox-1.6.49/include/FXDockSite.h0000664000175000017500000001537112130340076013074 00000000000000/******************************************************************************** * * * D o c k S i t e W i d g e t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDockSite.h,v 1.30 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXDOCKSITE_H #define FXDOCKSITE_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { class FXDockBar; /// Dock site options enum { DOCKSITE_WRAP = 0, /// Dockbars are wrapped to another galley when not enough space on current galley DOCKSITE_NO_WRAP = 0x00020000 /// Never wrap dockbars to another galley even if not enough space }; /** * The dock site widget is a widget where dock bars can be docked. * Dock site widgets are typically embedded inside the main window, placed * against those sides where docking of toolbars is to be allowed. * Dock bars placed inside a dock site are laid out in horizontal or vertical bands * called galleys. A toolbar with the LAYOUT_DOCK_SAME hint is preferentially placed * on the same galley as its previous sibling. A dock bar with the LAYOUT_DOCK_NEXT is * always placed on the next galley. * Each galley will have at least one dock bar shown in it. Several dock bars * may be placed side-by-side inside one galley, unless there is insufficient * room. If there is insufficient room to place another dock bar, that dock bar * will be moved to the next galley, even though its LAYOUT_DOCK_NEXT option * is not set. This implies that when the main window is resized and more room * becomes available, it will jump back to its preferred galley. * Within a galley, dock bars will be placed from left to right, at the given * x and y coordinates, with the constraints that the dock bar will stay within * the galley, and do not overlap each other. It is possible to use LAYOUT_FILL_X * and/or LAYOUT_FILL_Y to stretch a toolbar to the available space on its galley. * The galleys are oriented horizontally if the dock site is placed inside * a top level window using LAYOUT_SIDE_TOP or LAYOUT_SIDE_BOTTOM, and * vertically oriented if placed with LAYOUT_SIDE_LEFT or LAYOUT_SIDE_RIGHT. */ class FXAPI FXDockSite : public FXPacker { FXDECLARE(FXDockSite) protected: FXDockSite(){} private: FXDockSite(const FXDockSite&); FXDockSite &operator=(const FXDockSite&); protected: void moveVerBar(FXWindow* bar,FXWindow *begin,FXWindow* end,FXint bx,FXint by); void moveHorBar(FXWindow* bar,FXWindow *begin,FXWindow* end,FXint bx,FXint by); FXint galleyWidth(FXWindow *begin,FXWindow*& end,FXint space,FXint& require,FXint& expand) const; FXint galleyHeight(FXWindow *begin,FXWindow*& end,FXint space,FXint& require,FXint& expand) const; public: /** * Construct a toolbar dock layout manager. Passing LAYOUT_SIDE_TOP or LAYOUT_SIDE_BOTTOM * causes the toolbar dock to be oriented horizontally. Passing LAYOUT_SIDE_LEFT or * LAYOUT_SIDE_RIGHT causes it to be oriented vertically. */ FXDockSite(FXComposite *p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0,FXint hs=0,FXint vs=0); /** * Return default width. This is the width the toolbar * dock would have if no toolbars need to be moved to other * galleys than they would be logically placed. */ virtual FXint getDefaultWidth(); /** * Return default height. This is the height the toolbar * dock would have if no toolbars need to be moved to other * galleys than they would be logically placed. */ virtual FXint getDefaultHeight(); /** * For a vertically oriented dock site, this computes * the total width of all the galleys based on any "wrapping" * needed to fit the toolbars on a galley. */ virtual FXint getWidthForHeight(FXint h); /** * For a horizontally oriented dock site, this computes * the total height of all the galleys based on any "wrapping" * needed to fit the toolbars on a galley. */ virtual FXint getHeightForWidth(FXint w); /// Perform layout virtual void layout(); /** * Move tool bar, changing its options to suite the new position. * Used by the toolbar dragging to rearrange the toolbars inside the * toolbar dock. */ virtual void moveToolBar(FXDockBar* bar,FXint barx,FXint bary); /** * The dock site is notified that the given bar has been added * logically before the given window, and is to placed on a new * galley all by itself. The default implementation adjusts * the layout options of the bars accordingly. */ virtual void dockToolBar(FXDockBar* bar,FXWindow* before); /** * The dock site is informed that the given bar has been docked * at the given coordinates. The default implementation determines * where to insert the newly docked bar and adjusts the layout * options of the bars accordingly. */ virtual void dockToolBar(FXDockBar* bar,FXint barx,FXint bary); /** * The dock site is informed that the given bar has been removed. * In the default implementation, the dock site fixes the layout * options of the remaining bars so they stay in the same place * if possible. */ virtual void undockToolBar(FXDockBar* bar); /// Change wrap option void wrapGalleys(FXbool wrap); /// Get wrap option FXbool wrapGalleys() const; }; } #endif fox-1.6.49/include/FXReplaceDialog.h0000664000175000017500000001141312130340076014053 00000000000000/******************************************************************************** * * * T e x t R e p l a c e D i a l o g * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXReplaceDialog.h,v 1.22 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXREPLACEDIALOG_H #define FXREPLACEDIALOG_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { class FXButton; class FXLabel; class FXTextField; class FXHorizontalFrame; /// Text replace dialog class FXAPI FXReplaceDialog : public FXDialogBox { FXDECLARE(FXReplaceDialog) protected: FXLabel *searchlabel; FXTextField *searchtext; FXHorizontalFrame *searchbox; FXLabel *replacelabel; FXTextField *replacetext; FXHorizontalFrame *replacebox; FXButton *accept; FXButton *cancel; FXButton *every; FXuint searchmode; FXuint current; protected: FXReplaceDialog(){} void appendHistory(const FXString& search,const FXString& replace,FXuint mode); private: FXReplaceDialog(const FXReplaceDialog&); FXReplaceDialog &operator=(const FXReplaceDialog&); public: long onCmdAll(FXObject*,FXSelector,void*); long onCmdNext(FXObject*,FXSelector,void*); long onUpdDir(FXObject*,FXSelector,void*); long onCmdDir(FXObject*,FXSelector,void*); long onUpdMode(FXObject*,FXSelector,void*); long onCmdMode(FXObject*,FXSelector,void*); long onSearchKey(FXObject*,FXSelector,void*); long onReplaceKey(FXObject*,FXSelector,void*); long onCmdSearchHist(FXObject*,FXSelector,void*); long onCmdReplaceHist(FXObject*,FXSelector,void*); long onCmdAccept(FXObject*,FXSelector,void*); public: enum{ ID_NEXT=FXDialogBox::ID_LAST, ID_PREV, ID_SEARCH_UP, ID_SEARCH_DN, ID_REPLACE_UP, ID_REPLACE_DN, ID_ALL, ID_DIR, ID_SEARCH_TEXT, ID_REPLACE_TEXT, ID_MODE, ID_LAST=ID_MODE+32 }; public: enum { DONE = 0, /// Cancel search SEARCH = 1, /// Search first occurrence REPLACE = 1, /// Replace first occurrence SEARCH_NEXT = 2, /// Search next occurrence REPLACE_NEXT = 2, /// Replace next occurrence REPLACE_ALL = 3 /// Replace all occurrences }; public: /// Construct search and replace dialog box FXReplaceDialog(FXWindow* owner,const FXString& caption,FXIcon* ic=NULL,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Set text or pattern to search for void setSearchText(const FXString& text); /// Return text or pattern the user has entered FXString getSearchText() const; /// Set replace text void setReplaceText(const FXString& text); /// Return replace text the user has entered FXString getReplaceText() const; /// Set search match mode void setSearchMode(FXuint mode){ searchmode=mode; } /// Return search mode the user has selected FXuint getSearchMode() const { return searchmode; } /// Run modal invocation of the dialog virtual FXuint execute(FXuint placement=PLACEMENT_CURSOR); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXReplaceDialog(); }; } #endif fox-1.6.49/include/FXIcon.h0000664000175000017500000001214412130340076012252 00000000000000/******************************************************************************** * * * I c o n - O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXIcon.h,v 1.29 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXICON_H #define FXICON_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { class FXDC; class FXDCWindow; class FXDrawable; class FXTopWindow; /** * An Icon is an image with two additional server-side resources: a shape * bitmap, which is used to mask those pixels where the background should * be preserved during the drawing, and a etch bitmap, which is used to * draw the icon when it is disabled. */ class FXAPI FXIcon : public FXImage { FXDECLARE(FXIcon) friend class FXDC; friend class FXWindow; friend class FXDCWindow; friend class FXDrawable; friend class FXTopWindow; protected: FXID shape; // Shape pixmap FXID etch; // Etch pixmap FXColor transp; // Transparency color protected: FXIcon(){} FXColor guesstransp(); private: FXIcon(const FXIcon&); FXIcon &operator=(const FXIcon&); public: /** * Create an icon with an initial pixel buffer pix, a transparent color clr, * and options as in FXImage. The transparent color is used to determine which * pixel values are transparent, i.e. need to be masked out in the absence of * a true alpha channel. * If the flag IMAGE_OPAQUE is passed, the shape and etch bitmaps are generated * as if the image is fully opaque, even if it has an alpha channel or transparancy * color. The flag IMAGE_ALPHACOLOR is used to force a specific alpha color instead * of the alpha channel obtained from the image file. * Specifying IMAGE_ALPHAGUESS causes Icon to obtain the alpha color from the background * color of the image; it has the same effect as IMAGE_ALPHACOLOR in the sense that * the icon will be transparent for those colors matching the alpha color. */ FXIcon(FXApp* a,const FXColor *pix=NULL,FXColor clr=0,FXuint opts=0,FXint w=1,FXint h=1); /** * Create the server side pixmap, the shape bitmap, and the etch bitmap, then * call render() to fill it with the pixel data from the client-side buffer. After * the server-side pixmap and bitmaps have been created, the client-side pixel * buffer will be deleted unless IMAGE_KEEP has been specified. If the pixel buffer * is not owned, i.e. the flag IMAGE_OWNED is not set, the pixel buffer will not * be deleted; however the pixel buffer will be set to NULL. */ virtual void create(); /** * Detach the server side pixmap, shape bitmap, and etch bitmap from the Icon. * Afterwards, the Icon is left as if it never had a server-side resources. */ virtual void detach(); /** * Destroy the server-side pixmap and the shape bitmap and etch bitmap. * The client-side pixel buffer is not affected. */ virtual void destroy(); /** * Render the server-side pixmap, shape bitmap and etch bitmap for the icon * from the client-side pixel buffer. */ virtual void render(); /** * Resize both client-side and server-side representations (if any) to the * given width and height. The new representations typically contain garbage * after this operation and need to be re-filled. */ virtual void resize(FXint w,FXint h); /// Obtain transparency color FXColor getTransparentColor() const { return transp; } /// Change transparency color void setTransparentColor(FXColor color){ transp=color; } /// Destructor virtual ~FXIcon(); }; } #endif fox-1.6.49/include/FXCP865Codec.h0000644000175000017500000000107711637250333013075 00000000000000#ifndef FXCP865CODEC_H #define FXCP865CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP865 Codec class FXAPI FXCP865Codec : public FXTextCodec { FXDECLARE(FXCP865Codec) public: FXCP865Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP865Codec(){} }; } #endif fox-1.6.49/include/FXGLObject.h0000664000175000017500000001463112130340076013016 00000000000000/******************************************************************************** * * * O p e n G L O b j e c t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLObject.h,v 1.28.2.3 2006/11/17 16:02:31 fox Exp $ * ********************************************************************************/ #ifndef FXGLOBJECT_H #define FXGLOBJECT_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { class FXGLViewer; class FXGLObject; /// Basic OpenGL object class FXAPI FXGLObject : public FXObject { FXDECLARE(FXGLObject) public: enum { ID_LAST=10000 // Leaving ample room for FXGLViewer subclasses }; public: /// Constructors FXGLObject(){} /// Copy constructor FXGLObject(const FXGLObject& orig):FXObject(orig){} /// Called by the viewer to get bounds for this object virtual void bounds(FXRangef& box); /// Draw this object in a viewer virtual void draw(FXGLViewer* viewer); /// Draw this object for hit-testing purposes virtual void hit(FXGLViewer* viewer); /// Copy this object virtual FXGLObject* copy(); /// Identify sub-object given path virtual FXGLObject* identify(FXuint* path); /// Return true if this object can be dragged around virtual FXbool canDrag() const; /// Return true if this object can be deleted from the scene virtual FXbool canDelete() const; /// Drag this object from one position to another virtual FXbool drag(FXGLViewer* viewer,FXint fx,FXint fy,FXint tx,FXint ty); /// Destructor virtual ~FXGLObject(){} }; /// List of GL objects typedef FXObjectListOf FXGLObjectList; /// Group object class FXAPI FXGLGroup : public FXGLObject { FXDECLARE(FXGLGroup) protected: FXGLObjectList list; // List of all objects public: /// Constructor FXGLGroup(){ } /// Copy constructor FXGLGroup(const FXGLGroup& orig):FXGLObject(orig),list(orig.list){ } /// Return list of childern FXGLObjectList& getList(){ return list; } /// Return bounding box virtual void bounds(FXRangef& box); /// Draw into viewer virtual void draw(FXGLViewer* viewer); /// Hit in viewer virtual void hit(FXGLViewer* viewer); /// Copy this object virtual FXGLObject* copy(); /// Identify object by means of path virtual FXGLObject* identify(FXuint* path); /// Return TRUE if group can be dragged virtual FXbool canDrag() const; /// Drag group object virtual FXbool drag(FXGLViewer* viewer,FXint fx,FXint fy,FXint tx,FXint ty); /// Return number of children FXint no() const { return list.no(); } /// Child at position FXGLObject* child(FXint pos) const { return list[pos]; } /// Insert child object at given position void insert(FXint pos,FXGLObject* obj){ list.insert(pos,obj); } /// Prepend child object void prepend(FXGLObject* obj){ list.prepend(obj); } /// Append child object void append(FXGLObject* obj){ list.append(obj); } /// Replace child object void replace(FXint pos,FXGLObject* obj){ list.replace(pos,obj); } /// Remove child object void remove(FXGLObject* obj){ list.remove(obj); } /// Remove child object at given position void erase(FXint pos){ list.erase(pos); } /// Remove all children void clear(){ list.clear(); } /// Stream save and load virtual void save(FXStream& store) const; virtual void load(FXStream& store); /// Destructor virtual ~FXGLGroup(); }; /// OpenGL Point Object class FXAPI FXGLPoint : public FXGLObject { FXDECLARE(FXGLPoint) public: FXVec3f pos; public: /// Default constructor FXGLPoint(); /// Copy constructor FXGLPoint(const FXGLPoint& orig); /// Construct with specified coordinates FXGLPoint(FXfloat x,FXfloat y,FXfloat z); /// Copy this object virtual FXGLObject* copy(); /// Called by the viewer to get bounds for this object virtual void bounds(FXRangef& box); /// Draw this object in a viewer virtual void draw(FXGLViewer* viewer); /// Draw this object for hit-testing purposes virtual void hit(FXGLViewer* viewer); /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); }; /// OpenGL Line Object class FXAPI FXGLLine : public FXGLObject { FXDECLARE(FXGLLine) public: FXGLPoint fm,to; public: /// Default constructor FXGLLine(); /// Copy constructor FXGLLine(const FXGLLine& orig); /// Construct with specified endpoints FXGLLine(FXfloat fx,FXfloat fy,FXfloat fz,FXfloat tx,FXfloat ty,FXfloat tz); /// Called by the viewer to get bounds for this object virtual void bounds(FXRangef& box); /// Draw this object in a viewer virtual void draw(FXGLViewer* viewer); /// Copy this object virtual FXGLObject* copy(); /// Draw this object for hit-testing purposes virtual void hit(FXGLViewer* viewer); /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXCanvas.h0000664000175000017500000000474612130340076012606 00000000000000/******************************************************************************** * * * C a n v a s W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXCanvas.h,v 1.21 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCANVAS_H #define FXCANVAS_H #ifndef FXWINDOW_H #include "FXWindow.h" #endif namespace FX { /// Canvas, an area drawn by another object class FXAPI FXCanvas : public FXWindow { FXDECLARE(FXCanvas) protected: FXCanvas(); private: FXCanvas(const FXCanvas&); FXCanvas &operator=(const FXCanvas&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Construct new drawing canvas widget FXCanvas(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return TRUE because canvas can receive focus virtual bool canFocus() const; }; } #endif fox-1.6.49/include/FXRectangle.h0000664000175000017500000001275012130340076013271 00000000000000/******************************************************************************** * * * R e c t a n g l e C l a s s * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRectangle.h,v 1.19 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXRECTANGLE_H #define FXRECTANGLE_H #ifndef FXPOINT_H #include "FXPoint.h" #endif namespace FX { /// Rectangle class FXAPI FXRectangle { public: FXshort x; FXshort y; FXshort w; FXshort h; public: /// Constructors FXRectangle(){ } FXRectangle(FXshort xx,FXshort yy,FXshort ww,FXshort hh):x(xx),y(yy),w(ww),h(hh){ } FXRectangle(const FXPoint& p,const FXSize& s):x(p.x),y(p.y),w(s.w),h(s.h){ } FXRectangle(const FXPoint& topleft,const FXPoint& bottomright):x(topleft.x),y(topleft.y),w(bottomright.x-topleft.x+1),h(bottomright.y-topleft.y+1){ } /// Test if empty bool empty() const { return w<=0 || h<=0; } /// Test if zero bool operator!() const { return x==0 && y==0 && w==0 && h==0; } /// Equality bool operator==(const FXRectangle& r) const { return x==r.x && y==r.y && w==r.w && h==r.h; } bool operator!=(const FXRectangle& r) const { return x!=r.x || y!=r.y || w!=r.w || h!=r.h; } /// Point in rectangle bool contains(const FXPoint& p) const { return x<=p.x && y<=p.y && p.x>(FXStream& store,FXRectangle& r); }; inline bool overlap(const FXRectangle& a,const FXRectangle& b){ return b.x>(FXStream& store,FXRectangle& r); } #endif fox-1.6.49/include/FXDCWindow.h0000664000175000017500000002200612130340076013036 00000000000000/******************************************************************************** * * * D e v i c e C o n t e x t F o r W i n d o w s a n d I m a g e s * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDCWindow.h,v 1.46 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDCWINDOW_H #define FXDCWINDOW_H #ifndef FXDC_H #include "FXDC.h" #endif namespace FX { class FXApp; class FXDrawable; class FXImage; class FXBitmap; class FXIcon; class FXFont; class FXVisual; /** * Window Device Context * * The Window Device Context allows drawing into an FXDrawable, such as an * on-screen window (FXWindow and derivatives) or an off-screen image (FXImage * and its derivatives). * Because certain hardware resources are locked down, only one FXDCWindow may be * locked on a drawable at any one time. */ class FXAPI FXDCWindow : public FXDC { friend class FXFont; protected: FXDrawable *surface; // Drawable surface FXVisual *visual; // Visual of drawable FXRectangle rect; // Paint rectangle inside drawable #ifndef WIN32 FXuint flags; // GC Flags FXPixel devfg; // Device foreground pixel value FXPixel devbg; // Device background pixel value void *xftDraw; // Hook used only for XFT support #else FXID oldpalette; FXID oldbrush; FXID oldpen; FXPixel devfg; // Device foreground pixel value FXPixel devbg; // Device background pixel value FXbool needsNewBrush; FXbool needsNewPen; FXbool needsPath; FXbool needsClipReset; #endif private: #ifdef WIN32 void updateBrush(); void updatePen(); #endif private: FXDCWindow(); FXDCWindow(const FXDCWindow&); FXDCWindow &operator=(const FXDCWindow&); public: /// Construct for painting in response to expose; /// This sets the clip rectangle to the exposed rectangle FXDCWindow(FXDrawable* drawable,FXEvent* event); /// Construct for normal drawing; /// This sets clip rectangle to the whole drawable FXDCWindow(FXDrawable* drawable); /// Begin locks in a drawable surface void begin(FXDrawable *drawable); /// End unlock the drawable surface void end(); /// Read back pixel virtual FXColor readPixel(FXint x,FXint y); /// Draw points virtual void drawPoint(FXint x,FXint y); virtual void drawPoints(const FXPoint* points,FXuint npoints); virtual void drawPointsRel(const FXPoint* points,FXuint npoints); /// Draw lines virtual void drawLine(FXint x1,FXint y1,FXint x2,FXint y2); virtual void drawLines(const FXPoint* points,FXuint npoints); virtual void drawLinesRel(const FXPoint* points,FXuint npoints); virtual void drawLineSegments(const FXSegment* segments,FXuint nsegments); /// Draw rectangles virtual void drawRectangle(FXint x,FXint y,FXint w,FXint h); virtual void drawRectangles(const FXRectangle* rectangles,FXuint nrectangles); /// Draw rounded rectangle with ellipse with ew and ellips height eh virtual void drawRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh); /// Draw arcs virtual void drawArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void drawArcs(const FXArc* arcs,FXuint narcs); /// Draw ellipse virtual void drawEllipse(FXint x,FXint y,FXint w,FXint h); /// Filled rectangles virtual void fillRectangle(FXint x,FXint y,FXint w,FXint h); virtual void fillRectangles(const FXRectangle* rectangles,FXuint nrectangles); /// Filled rounded rectangle with ellipse with ew and ellips height eh virtual void fillRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh); /// Fill chord virtual void fillChord(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void fillChords(const FXArc* chords,FXuint nchords); /// Draw arcs virtual void fillArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2); virtual void fillArcs(const FXArc* arcs,FXuint narcs); /// Fill ellipse virtual void fillEllipse(FXint x,FXint y,FXint w,FXint h); /// Filled polygon virtual void fillPolygon(const FXPoint* points,FXuint npoints); virtual void fillConcavePolygon(const FXPoint* points,FXuint npoints); virtual void fillComplexPolygon(const FXPoint* points,FXuint npoints); /// Filled polygon with relative points virtual void fillPolygonRel(const FXPoint* points,FXuint npoints); virtual void fillConcavePolygonRel(const FXPoint* points,FXuint npoints); virtual void fillComplexPolygonRel(const FXPoint* points,FXuint npoints); /// Draw hashed box virtual void drawHashBox(FXint x,FXint y,FXint w,FXint h,FXint b=1); /// Draw focus rectangle virtual void drawFocusRectangle(FXint x,FXint y,FXint w,FXint h); /// Draw area from source virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy); /// Draw area stretched area from source virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy,FXint dw,FXint dh); /// Draw image virtual void drawImage(const FXImage* image,FXint dx,FXint dy); /// Draw bitmap virtual void drawBitmap(const FXBitmap* bitmap,FXint dx,FXint dy); /// Draw icon virtual void drawIcon(const FXIcon* icon,FXint dx,FXint dy); virtual void drawIconShaded(const FXIcon* icon,FXint dx,FXint dy); virtual void drawIconSunken(const FXIcon* icon,FXint dx,FXint dy); /// Draw string with base line starting at x, y virtual void drawText(FXint x,FXint y,const FXString& string); virtual void drawText(FXint x,FXint y,const FXchar* string,FXuint length); /// Draw text starting at x, y over filled background virtual void drawImageText(FXint x,FXint y,const FXString& string); virtual void drawImageText(FXint x,FXint y,const FXchar* string,FXuint length); /// Set foreground/background drawing color virtual void setForeground(FXColor clr); virtual void setBackground(FXColor clr); /// Set dash pattern virtual void setDashes(FXuint dashoffset,const FXchar *dashpattern,FXuint dashlength); /// Set line width virtual void setLineWidth(FXuint linewidth=0); /// Set line cap style virtual void setLineCap(FXCapStyle capstyle=CAP_BUTT); /// Set line join style virtual void setLineJoin(FXJoinStyle joinstyle=JOIN_MITER); /// Set line style virtual void setLineStyle(FXLineStyle linestyle=LINE_SOLID); /// Set fill style virtual void setFillStyle(FXFillStyle fillstyle=FILL_SOLID); /// Set fill rule virtual void setFillRule(FXFillRule fillrule=RULE_EVEN_ODD); /// Set blit function virtual void setFunction(FXFunction func=BLT_SRC); /// Set the tile virtual void setTile(FXImage* tile,FXint dx=0,FXint dy=0); /// Set the stipple pattern virtual void setStipple(FXBitmap *stipple,FXint dx=0,FXint dy=0); /// Set the stipple pattern virtual void setStipple(FXStipplePattern stipple,FXint dx=0,FXint dy=0); /// Set clip region virtual void setClipRegion(const FXRegion& region); /// Set clip rectangle virtual void setClipRectangle(FXint x,FXint y,FXint w,FXint h); /// Set clip rectangle virtual void setClipRectangle(const FXRectangle& rectangle); /// Clear clipping virtual void clearClipRectangle(); /// Set clip mask virtual void setClipMask(FXBitmap* mask,FXint dx=0,FXint dy=0); /// Clear clip mask virtual void clearClipMask(); /// Set font to draw text with virtual void setFont(FXFont *fnt); /// Clip against child windows virtual void clipChildren(FXbool yes); /// Destructor virtual ~FXDCWindow(); }; } #endif fox-1.6.49/include/FXVec3f.h0000664000175000017500000002166412130340076012337 00000000000000/******************************************************************************** * * * S i n g l e - P r e c i s i o n 3 - E l e m e n t V e c t o r * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXVec3f.h,v 1.26 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXVEC3F_H #define FXVEC3F_H namespace FX { class FXMat3f; class FXMat4f; /// Single-precision 3-element vector class FXAPI FXVec3f { public: FXfloat x; FXfloat y; FXfloat z; public: /// Default constructor FXVec3f(){} /// Initialize from another vector FXVec3f(const FXVec3f& v){x=v.x;y=v.y;z=v.z;} /// Initialize from array of floats FXVec3f(const FXfloat v[]){x=v[0];y=v[1];z=v[2];} /// Initialize from components FXVec3f(FXfloat xx,FXfloat yy,FXfloat zz=1.0f){x=xx;y=yy;z=zz;} /// Initialize with color FXVec3f(FXColor color); /// Return a non-const reference to the ith element FXfloat& operator[](FXint i){return (&x)[i];} /// Return a const reference to the ith element const FXfloat& operator[](FXint i) const {return (&x)[i];} /// Assign color FXVec3f& operator=(FXColor color); /// Assignment FXVec3f& operator=(const FXVec3f& v){x=v.x;y=v.y;z=v.z;return *this;} /// Assignment from array of floats FXVec3f& operator=(const FXfloat v[]){x=v[0];y=v[1];z=v[2];return *this;} /// Set value from another vector FXVec3f& set(const FXVec3f& v){x=v.x;y=v.y;z=v.z;return *this;} /// Set value from array of floats FXVec3f& set(const FXfloat v[]){x=v[0];y=v[1];z=v[2];return *this;} /// Set value from components FXVec3f& set(FXfloat xx,FXfloat yy,FXfloat zz){x=xx;y=yy;z=zz;return *this;} /// Assigning operators FXVec3f& operator*=(FXfloat n){x*=n;y*=n;z*=n;return *this;} FXVec3f& operator/=(FXfloat n){x/=n;y/=n;z/=n;return *this;} FXVec3f& operator+=(const FXVec3f& v){x+=v.x;y+=v.y;z+=v.z;return *this;} FXVec3f& operator-=(const FXVec3f& v){x-=v.x;y-=v.y;z-=v.z;return *this;} /// Conversions operator FXfloat*(){return &x;} operator const FXfloat*() const {return &x;} operator FXVec2f&(){return *reinterpret_cast(this);} operator const FXVec2f&() const {return *reinterpret_cast(this);} /// Convert to color operator FXColor() const; /// Unary FXVec3f operator+() const { return *this; } FXVec3f operator-() const { return FXVec3f(-x,-y,-z); } /// Vector and vector FXVec3f operator+(const FXVec3f& v) const { return FXVec3f(x+v.x,y+v.y,z+v.z); } FXVec3f operator-(const FXVec3f& v) const { return FXVec3f(x-v.x,y-v.y,z-v.z); } /// Vector and matrix FXVec3f operator*(const FXMat3f& m) const; FXVec3f operator*(const FXMat4f& m) const; /// Scaling friend inline FXVec3f operator*(const FXVec3f& a,FXfloat n); friend inline FXVec3f operator*(FXfloat n,const FXVec3f& a); friend inline FXVec3f operator/(const FXVec3f& a,FXfloat n); friend inline FXVec3f operator/(FXfloat n,const FXVec3f& a); /// Dot product FXfloat operator*(const FXVec3f& v) const { return x*v.x+y*v.y+z*v.z; } /// Cross product FXVec3f operator^(const FXVec3f& v) const { return FXVec3f(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x); } /// Test if zero bool operator!() const { return x==0.0f && y==0.0f && z==0.0f; } /// Equality tests bool operator==(const FXVec3f& v) const { return x==v.x && y==v.y && z==v.z; } bool operator!=(const FXVec3f& v) const { return x!=v.x || y!=v.y || z!=v.z; } friend inline bool operator==(const FXVec3f& a,FXfloat n); friend inline bool operator!=(const FXVec3f& a,FXfloat n); friend inline bool operator==(FXfloat n,const FXVec3f& a); friend inline bool operator!=(FXfloat n,const FXVec3f& a); /// Inequality tests bool operator<(const FXVec3f& v) const { return x(const FXVec3f& v) const { return x>v.x && y>v.y && z>v.z; } bool operator>=(const FXVec3f& v) const { return x>=v.x && y>=v.y && z>=v.z; } friend inline bool operator<(const FXVec3f& a,FXfloat n); friend inline bool operator<=(const FXVec3f& a,FXfloat n); friend inline bool operator>(const FXVec3f& a,FXfloat n); friend inline bool operator>=(const FXVec3f& a,FXfloat n); friend inline bool operator<(FXfloat n,const FXVec3f& a); friend inline bool operator<=(FXfloat n,const FXVec3f& a); friend inline bool operator>(FXfloat n,const FXVec3f& a); friend inline bool operator>=(FXfloat n,const FXVec3f& a); /// Length and square of length FXfloat length2() const { return x*x+y*y+z*z; } FXfloat length() const { return sqrtf(length2()); } /// Clamp values of vector between limits FXVec3f& clamp(FXfloat lo,FXfloat hi){x=FXCLAMP(lo,x,hi);y=FXCLAMP(lo,y,hi);z=FXCLAMP(lo,z,hi);return *this;} /// Lowest or highest components friend inline FXVec3f lo(const FXVec3f& a,const FXVec3f& b); friend inline FXVec3f hi(const FXVec3f& a,const FXVec3f& b); /// Compute normal from three points a,b,c friend FXAPI FXVec3f normal(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c); /// Compute approximate normal from four points a,b,c,d friend FXAPI FXVec3f normal(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c,const FXVec3f& d); /// Normalize vector friend FXAPI FXVec3f normalize(const FXVec3f& v); /// Save vector to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXVec3f& v); /// Load vector from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXVec3f& v); }; inline FXVec3f operator*(const FXVec3f& a,FXfloat n){return FXVec3f(a.x*n,a.y*n,a.z*n);} inline FXVec3f operator*(FXfloat n,const FXVec3f& a){return FXVec3f(n*a.x,n*a.y,n*a.z);} inline FXVec3f operator/(const FXVec3f& a,FXfloat n){return FXVec3f(a.x/n,a.y/n,a.z/n);} inline FXVec3f operator/(FXfloat n,const FXVec3f& a){return FXVec3f(n/a.x,n/a.y,n/a.z);} inline bool operator==(const FXVec3f& a,FXfloat n){return a.x==n && a.y==n && a.z==n;} inline bool operator!=(const FXVec3f& a,FXfloat n){return a.x!=n || a.y!=n || a.z!=n;} inline bool operator==(FXfloat n,const FXVec3f& a){return n==a.x && n==a.y && n==a.z;} inline bool operator!=(FXfloat n,const FXVec3f& a){return n!=a.x || n!=a.y || n!=a.z;} inline bool operator<(const FXVec3f& a,FXfloat n){return a.x(const FXVec3f& a,FXfloat n){return a.x>n && a.y>n && a.z>n;} inline bool operator>=(const FXVec3f& a,FXfloat n){return a.x>=n && a.y>=n && a.z>=n;} inline bool operator<(FXfloat n,const FXVec3f& a){return n(FXfloat n,const FXVec3f& a){return n>a.x && n>a.y && n>a.z;} inline bool operator>=(FXfloat n,const FXVec3f& a){return n>=a.x && n>=a.y && n>=a.z;} inline FXVec3f lo(const FXVec3f& a,const FXVec3f& b){return FXVec3f(FXMIN(a.x,b.x),FXMIN(a.y,b.y),FXMIN(a.z,b.z));} inline FXVec3f hi(const FXVec3f& a,const FXVec3f& b){return FXVec3f(FXMAX(a.x,b.x),FXMAX(a.y,b.y),FXMAX(a.z,b.z));} extern FXAPI FXVec3f normal(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c); extern FXAPI FXVec3f normal(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c,const FXVec3f& d); extern FXAPI FXVec3f normalize(const FXVec3f& v); extern FXAPI FXStream& operator<<(FXStream& store,const FXVec3f& v); extern FXAPI FXStream& operator>>(FXStream& store,FXVec3f& v); } #endif fox-1.6.49/include/FXSocket.h0000664000175000017500000000534712130340076012621 00000000000000/******************************************************************************** * * * S o c k e t C l a s s * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSocket.h,v 1.6 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSOCKET_H #define FXSOCKET_H #ifndef FXIO_H #include "FXIO.h" #endif //////////////////////////// UNDER DEVELOPMENT //////////////////////////////// namespace FX { /** * Socket i/o device. */ class FXAPI FXSocket : public FXIO { private: FXSocket(const FXSocket&); FXSocket &operator=(const FXSocket&); public: /// Construct socket FXSocket(){ } /// Construct file and attach existing handle h FXSocket(FXInputHandle handle,FXuint mode); /// Open device with access mode and handle virtual bool open(FXInputHandle handle,FXuint mode); /// Read block of bytes, returning number of bytes read virtual FXival readBlock(void* data,FXival count); /// Write block of bytes, returning number of bytes written virtual FXival writeBlock(const void* data,FXival count); /// Close socket virtual bool close(); /// Destroy virtual ~FXSocket(); }; } #endif fox-1.6.49/include/FXCP874Codec.h0000644000175000017500000000107711637250333013075 00000000000000#ifndef FXCP874CODEC_H #define FXCP874CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP874 Codec class FXAPI FXCP874Codec : public FXTextCodec { FXDECLARE(FXCP874Codec) public: FXCP874Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP874Codec(){} }; } #endif fox-1.6.49/include/FXBitmap.h0000664000175000017500000001676712130340076012615 00000000000000/******************************************************************************** * * * B i t m a p O b j e c t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXBitmap.h,v 1.37 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXBITMAP_H #define FXBITMAP_H #ifndef FXDRAWABLE_H #include "FXDrawable.h" #endif namespace FX { // Image rendering hints enum { BITMAP_KEEP = 0x00000001, // Keep pixel data in client BITMAP_OWNED = 0x00000002, // Pixel data is owned by image BITMAP_SHMI = 0x00000020, // Using shared memory image BITMAP_SHMP = 0x00000040 // Using shared memory pixmap }; // Forward declarations class FXDC; class FXDCWindow; /** * A Bitmap is a rectangular array of pixels. It supports two representations * of these pixels: a client-side pixel buffer, and a server-side pixmap which * is stored in an organization directly compatible with the screen, for fast * drawing onto the device. * The server-side representation is not directly accessible from the current * process as it lives in the process of the X Server or GDI. * The client-side pixel array is of size height x (width+7)/8 bytes, in other * words 8 pixels packed into a single byte, starting at bit 0 on the left. */ class FXAPI FXBitmap : public FXDrawable { FXDECLARE(FXBitmap) friend class FXDC; friend class FXDCWindow; private: #ifdef WIN32 virtual FXID GetDC() const; virtual int ReleaseDC(FXID) const; #endif protected: FXuchar *data; // Pixel data FXint bytewidth; // Number of bytes across FXuint options; // Options protected: FXBitmap(); private: FXBitmap(const FXBitmap&); FXBitmap &operator=(const FXBitmap&); public: /** * Create a bitmap. If a client-side pixel buffer has been specified, * the bitmap does not own the pixel buffer unless the BITMAP_OWNED flag is * set. If the BITMAP_OWNED flag is set but a NULL pixel buffer is * passed, a pixel buffer will be automatically created and will be owned * by the bitmap. The flags BITMAP_SHMI and BITMAP_SHMP may be specified for * large bitmaps to instruct render() to use shared memory to communicate * with the server. */ FXBitmap(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Change options void setOptions(FXuint opts); /// To get to the option flags FXuint getOptions() const { return options; } /** * Populate the bitmap with new pixel data of the same size; it will assume * ownership of the pixel data if image BITMAP_OWNED option is passed. * The server-side representation of the image, if it exists, is not updated. * This can be done by calling render(). */ virtual void setData(FXuchar *pix,FXuint opts=0); /** * Populate the bitmap with new pixel data of a new size; it will assume ownership * of the pixel data if image BITMAP_OWNED option is passed. The size of the server- * side representation of the image, if it exists, is adjusted but the contents are * not updated yet. This can be done by calling render(). */ virtual void setData(FXuchar *pix,FXuint opts,FXint w,FXint h); /// To get to the pixel data FXuchar* getData() const { return data; } /// Get pixel at x,y FXbool getPixel(FXint x,FXint y) const { return (FXbool)((data[y*bytewidth+(x>>3)]>>(x&7))&1); } /// Change pixel at x,y void setPixel(FXint x,FXint y,FXbool color){ color ? data[y*bytewidth+(x>>3)]|=(1<<(x&7)) : data[y*bytewidth+(x>>3)]&=~(1<<(x&7)); } /** * Create the server side pixmap, then call render() to fill it with the * pixel data from the client-side buffer. After the server-side image has * been created, the client-side pixel buffer will be deleted unless * BITMAP_KEEP has been specified. If the pixel buffer is not owned, i.e. * the flag BITMAP_OWNED is not set, the pixel buffer will not be deleted. */ virtual void create(); /** * Detach the server side pixmap from the Bitmap. * Afterwards, the Bitmap is left as if it never had a server-side resources. */ virtual void detach(); /** * Destroy the server-side pixmap. * The client-side pixel buffer is not affected. */ virtual void destroy(); /** * Retrieves pixels from the server-side bitmap. */ virtual void restore(); /** * Render the server-side representation of the bitmap from client-side * pixels. */ virtual void render(); /** * Release the client-side pixels buffer, free it if it was owned. * If it is not owned, the image just forgets about the buffer. */ virtual void release(); /** * Resize both client-side and server-side representations (if any) to the * given width and height. The new representations typically contain garbage * after this operation and need to be re-filled. */ virtual void resize(FXint w,FXint h); /** * Rescale pixels image to the specified width and height; this calls * resize() to adjust the client and server side representations. */ virtual void scale(FXint w,FXint h); /// Mirror bitmap horizontally and/or vertically virtual void mirror(FXbool horizontal,FXbool vertical); /// Rotate bitmap by degrees ccw virtual void rotate(FXint degrees); /** * Crop bitmap to given rectangle; this calls resize() to adjust the client * and server side representations. The new bitmap may be smaller or larger * than the old one; blank areas are filled with color. There must be at * least one pixel of overlap between the old and the new bitmap. */ virtual void crop(FXint x,FXint y,FXint w,FXint h,FXbool color=0); /// Fill bitmap with uniform value virtual void fill(FXbool color); /// Save object to stream virtual void save(FXStream& store) const; /// Load object from stream virtual void load(FXStream& store); /// Save pixel data only virtual bool savePixels(FXStream& store) const; /// Load pixel data only virtual bool loadPixels(FXStream& store); /// Cleanup virtual ~FXBitmap(); }; } #endif fox-1.6.49/include/FXId.h0000664000175000017500000000572612130340076011726 00000000000000/******************************************************************************** * * * X - O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXId.h,v 1.18 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXID_H #define FXID_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { class FXApp; /// Encapsulates server side resource class FXAPI FXId : public FXObject { FXDECLARE_ABSTRACT(FXId) private: FXApp *app; // Back link to application object void *data; // User data protected: FXID xid; private: FXId(const FXId&); FXId &operator=(const FXId&); protected: FXId():app((FXApp*)-1L),data(NULL),xid(0){} FXId(FXApp* a):app(a),data(NULL),xid(0){} public: /// Get application FXApp* getApp() const { return app; } /// Get XID handle FXID id() const { return xid; } /// Create resource virtual void create(){} /// Detach resource virtual void detach(){} /// Destroy resource virtual void destroy(){} /// Set user data pointer void setUserData(void *ptr){ data=ptr; } /// Get user data pointer void* getUserData() const { return data; } /// Save object to stream virtual void save(FXStream& store) const; /// Load object from stream virtual void load(FXStream& store); /// Destructor virtual ~FXId(){app=(FXApp*)-1L;} }; } #endif fox-1.6.49/include/fxkeys.h0000664000175000017500000017246012130340076012445 00000000000000/******************************************************************************** * * * F O X K e y b o a r d S y m b o l D e f i n i t i o n s * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: fxkeys.h,v 1.14 2006/03/07 05:30:46 fox Exp $ * ********************************************************************************/ #ifndef FXKEYS_H #define FXKEYS_H namespace FX { enum { // Void symbol KEY_VoidSymbol = 0, // Miscellaneous KEY_BackSpace = 0xFF08, KEY_Tab = 0xFF09, KEY_Linefeed = 0xFF0A, KEY_Clear = 0xFF0B, KEY_Return = 0xFF0D, KEY_Pause = 0xFF13, KEY_Scroll_Lock = 0xFF14, KEY_Sys_Req = 0xFF15, KEY_Escape = 0xFF1B, KEY_Delete = 0xFFFF, KEY_Multi_key = 0xFF20, // Japanese KEY_Kanji = 0xFF21, KEY_Muhenkan = 0xFF22, KEY_Henkan_Mode = 0xFF23, KEY_Henkan = 0xFF23, KEY_Romaji = 0xFF24, KEY_Hiragana = 0xFF25, KEY_Katakana = 0xFF26, KEY_Hiragana_Katakana = 0xFF27, KEY_Zenkaku = 0xFF28, KEY_Hankaku = 0xFF29, KEY_Zenkaku_Hankaku = 0xFF2A, KEY_Touroku = 0xFF2B, KEY_Massyo = 0xFF2C, KEY_Kana_Lock = 0xFF2D, KEY_Kana_Shift = 0xFF2E, KEY_Eisu_Shift = 0xFF2F, KEY_Eisu_toggle = 0xFF30, // Cursor KEY_Home = 0xFF50, KEY_Left = 0xFF51, KEY_Up = 0xFF52, KEY_Right = 0xFF53, KEY_Down = 0xFF54, KEY_Prior = 0xFF55, KEY_Page_Up = 0xFF55, KEY_Next = 0xFF56, KEY_Page_Down = 0xFF56, KEY_End = 0xFF57, KEY_Begin = 0xFF58, // Functions KEY_Select = 0xFF60, KEY_Print = 0xFF61, KEY_Execute = 0xFF62, KEY_Insert = 0xFF63, KEY_Undo = 0xFF65, KEY_Redo = 0xFF66, KEY_Menu = 0xFF67, KEY_Find = 0xFF68, KEY_Cancel = 0xFF69, KEY_Help = 0xFF6A, KEY_Break = 0xFF6B, KEY_Mode_switch = 0xFF7E, KEY_script_switch = 0xFF7E, KEY_Num_Lock = 0xFF7F, // Keypad KEY_KP_Space = 0xFF80, KEY_KP_Tab = 0xFF89, KEY_KP_Enter = 0xFF8D, KEY_KP_F1 = 0xFF91, KEY_KP_F2 = 0xFF92, KEY_KP_F3 = 0xFF93, KEY_KP_F4 = 0xFF94, KEY_KP_Home = 0xFF95, KEY_KP_Left = 0xFF96, KEY_KP_Up = 0xFF97, KEY_KP_Right = 0xFF98, KEY_KP_Down = 0xFF99, KEY_KP_Prior = 0xFF9A, KEY_KP_Page_Up = 0xFF9A, KEY_KP_Next = 0xFF9B, KEY_KP_Page_Down = 0xFF9B, KEY_KP_End = 0xFF9C, KEY_KP_Begin = 0xFF9D, KEY_KP_Insert = 0xFF9E, KEY_KP_Delete = 0xFF9F, KEY_KP_Equal = 0xFFBD, KEY_KP_Multiply = 0xFFAA, KEY_KP_Add = 0xFFAB, KEY_KP_Separator = 0xFFAC, KEY_KP_Subtract = 0xFFAD, KEY_KP_Decimal = 0xFFAE, KEY_KP_Divide = 0xFFAF, // Keypad numbers KEY_KP_0 = 0xFFB0, KEY_KP_1 = 0xFFB1, KEY_KP_2 = 0xFFB2, KEY_KP_3 = 0xFFB3, KEY_KP_4 = 0xFFB4, KEY_KP_5 = 0xFFB5, KEY_KP_6 = 0xFFB6, KEY_KP_7 = 0xFFB7, KEY_KP_8 = 0xFFB8, KEY_KP_9 = 0xFFB9, // Function keys KEY_F1 = 0xFFBE, KEY_F2 = 0xFFBF, KEY_F3 = 0xFFC0, KEY_F4 = 0xFFC1, KEY_F5 = 0xFFC2, KEY_F6 = 0xFFC3, KEY_F7 = 0xFFC4, KEY_F8 = 0xFFC5, KEY_F9 = 0xFFC6, KEY_F10 = 0xFFC7, KEY_F11 = 0xFFC8, KEY_L1 = 0xFFC8, KEY_F12 = 0xFFC9, KEY_L2 = 0xFFC9, KEY_F13 = 0xFFCA, KEY_L3 = 0xFFCA, KEY_F14 = 0xFFCB, KEY_L4 = 0xFFCB, KEY_F15 = 0xFFCC, KEY_L5 = 0xFFCC, KEY_F16 = 0xFFCD, KEY_L6 = 0xFFCD, KEY_F17 = 0xFFCE, KEY_L7 = 0xFFCE, KEY_F18 = 0xFFCF, KEY_L8 = 0xFFCF, KEY_F19 = 0xFFD0, KEY_L9 = 0xFFD0, KEY_F20 = 0xFFD1, KEY_L10 = 0xFFD1, KEY_F21 = 0xFFD2, KEY_R1 = 0xFFD2, KEY_F22 = 0xFFD3, KEY_R2 = 0xFFD3, KEY_F23 = 0xFFD4, KEY_R3 = 0xFFD4, KEY_F24 = 0xFFD5, KEY_R4 = 0xFFD5, KEY_F25 = 0xFFD6, KEY_R5 = 0xFFD6, KEY_F26 = 0xFFD7, KEY_R6 = 0xFFD7, KEY_F27 = 0xFFD8, KEY_R7 = 0xFFD8, KEY_F28 = 0xFFD9, KEY_R8 = 0xFFD9, KEY_F29 = 0xFFDA, KEY_R9 = 0xFFDA, KEY_F30 = 0xFFDB, KEY_R10 = 0xFFDB, KEY_F31 = 0xFFDC, KEY_R11 = 0xFFDC, KEY_F32 = 0xFFDD, KEY_R12 = 0xFFDD, KEY_F33 = 0xFFDE, KEY_R13 = 0xFFDE, KEY_F34 = 0xFFDF, KEY_R14 = 0xFFDF, KEY_F35 = 0xFFE0, KEY_R15 = 0xFFE0, // Modifiers KEY_Shift_L = 0xFFE1, KEY_Shift_R = 0xFFE2, KEY_Control_L = 0xFFE3, KEY_Control_R = 0xFFE4, KEY_Caps_Lock = 0xFFE5, KEY_Shift_Lock = 0xFFE6, KEY_Meta_L = 0xFFE7, KEY_Meta_R = 0xFFE8, KEY_Alt_L = 0xFFE9, KEY_Alt_R = 0xFFEA, KEY_Super_L = 0xFFEB, KEY_Super_R = 0xFFEC, KEY_Hyper_L = 0xFFED, KEY_Hyper_R = 0xFFEE, // ISO 9995 KEY_ISO_Lock = 0xFE01, KEY_ISO_Level2_Latch = 0xFE02, KEY_ISO_Level3_Shift = 0xFE03, KEY_ISO_Level3_Latch = 0xFE04, KEY_ISO_Level3_Lock = 0xFE05, KEY_ISO_Group_Shift = 0xFF7E, KEY_ISO_Group_Latch = 0xFE06, KEY_ISO_Group_Lock = 0xFE07, KEY_ISO_Next_Group = 0xFE08, KEY_ISO_Next_Group_Lock = 0xFE09, KEY_ISO_Prev_Group = 0xFE0A, KEY_ISO_Prev_Group_Lock = 0xFE0B, KEY_ISO_First_Group = 0xFE0C, KEY_ISO_First_Group_Lock = 0xFE0D, KEY_ISO_Last_Group = 0xFE0E, KEY_ISO_Last_Group_Lock = 0xFE0F, KEY_ISO_Left_Tab = 0xFE20, KEY_ISO_Move_Line_Up = 0xFE21, KEY_ISO_Move_Line_Down = 0xFE22, KEY_ISO_Partial_Line_Up = 0xFE23, KEY_ISO_Partial_Line_Down = 0xFE24, KEY_ISO_Partial_Space_Left = 0xFE25, KEY_ISO_Partial_Space_Right = 0xFE26, KEY_ISO_Set_Margin_Left = 0xFE27, KEY_ISO_Set_Margin_Right = 0xFE28, KEY_ISO_Release_Margin_Left = 0xFE29, KEY_ISO_Release_Margin_Right = 0xFE2A, KEY_ISO_Release_Both_Margins = 0xFE2B, KEY_ISO_Fast_Cursor_Left = 0xFE2C, KEY_ISO_Fast_Cursor_Right = 0xFE2D, KEY_ISO_Fast_Cursor_Up = 0xFE2E, KEY_ISO_Fast_Cursor_Down = 0xFE2F, KEY_ISO_Continuous_Underline = 0xFE30, KEY_ISO_Discontinuous_Underline = 0xFE31, KEY_ISO_Emphasize = 0xFE32, KEY_ISO_Center_Object = 0xFE33, KEY_ISO_Enter = 0xFE34, KEY_dead_grave = 0xFE50, KEY_dead_acute = 0xFE51, KEY_dead_circumflex = 0xFE52, KEY_dead_tilde = 0xFE53, KEY_dead_macron = 0xFE54, KEY_dead_breve = 0xFE55, KEY_dead_abovedot = 0xFE56, KEY_dead_diaeresis = 0xFE57, KEY_dead_abovering = 0xFE58, KEY_dead_doubleacute = 0xFE59, KEY_dead_caron = 0xFE5A, KEY_dead_cedilla = 0xFE5B, KEY_dead_ogonek = 0xFE5C, KEY_dead_iota = 0xFE5D, KEY_dead_voiced_sound = 0xFE5E, KEY_dead_semivoiced_sound = 0xFE5F, KEY_dead_belowdot = 0xFE60, KEY_First_Virtual_Screen = 0xFED0, KEY_Prev_Virtual_Screen = 0xFED1, KEY_Next_Virtual_Screen = 0xFED2, KEY_Last_Virtual_Screen = 0xFED4, KEY_Terminate_Server = 0xFED5, KEY_AccessX_Enable = 0xFE70, KEY_AccessX_Feedback_Enable = 0xFE71, KEY_RepeatKeys_Enable = 0xFE72, KEY_SlowKeys_Enable = 0xFE73, KEY_BounceKeys_Enable = 0xFE74, KEY_StickyKeys_Enable = 0xFE75, KEY_MouseKeys_Enable = 0xFE76, KEY_MouseKeys_Accel_Enable = 0xFE77, KEY_Overlay1_Enable = 0xFE78, KEY_Overlay2_Enable = 0xFE79, KEY_AudibleBell_Enable = 0xFE7A, KEY_Pointer_Left = 0xFEE0, KEY_Pointer_Right = 0xFEE1, KEY_Pointer_Up = 0xFEE2, KEY_Pointer_Down = 0xFEE3, KEY_Pointer_UpLeft = 0xFEE4, KEY_Pointer_UpRight = 0xFEE5, KEY_Pointer_DownLeft = 0xFEE6, KEY_Pointer_DownRight = 0xFEE7, KEY_Pointer_Button_Dflt = 0xFEE8, KEY_Pointer_Button1 = 0xFEE9, KEY_Pointer_Button2 = 0xFEEA, KEY_Pointer_Button3 = 0xFEEB, KEY_Pointer_Button4 = 0xFEEC, KEY_Pointer_Button5 = 0xFEED, KEY_Pointer_DblClick_Dflt = 0xFEEE, KEY_Pointer_DblClick1 = 0xFEEF, KEY_Pointer_DblClick2 = 0xFEF0, KEY_Pointer_DblClick3 = 0xFEF1, KEY_Pointer_DblClick4 = 0xFEF2, KEY_Pointer_DblClick5 = 0xFEF3, KEY_Pointer_Drag_Dflt = 0xFEF4, KEY_Pointer_Drag1 = 0xFEF5, KEY_Pointer_Drag2 = 0xFEF6, KEY_Pointer_Drag3 = 0xFEF7, KEY_Pointer_Drag4 = 0xFEF8, KEY_Pointer_Drag5 = 0xFEFD, KEY_Pointer_EnableKeys = 0xFEF9, KEY_Pointer_Accelerate = 0xFEFA, KEY_Pointer_DfltBtnNext = 0xFEFB, KEY_Pointer_DfltBtnPrev = 0xFEFC, // 3270 Terminal KEY_3270_Duplicate = 0xFD01, KEY_3270_FieldMark = 0xFD02, KEY_3270_Right2 = 0xFD03, KEY_3270_Left2 = 0xFD04, KEY_3270_BackTab = 0xFD05, KEY_3270_EraseEOF = 0xFD06, KEY_3270_EraseInput = 0xFD07, KEY_3270_Reset = 0xFD08, KEY_3270_Quit = 0xFD09, KEY_3270_PA1 = 0xFD0A, KEY_3270_PA2 = 0xFD0B, KEY_3270_PA3 = 0xFD0C, KEY_3270_Test = 0xFD0D, KEY_3270_Attn = 0xFD0E, KEY_3270_CursorBlink = 0xFD0F, KEY_3270_AltCursor = 0xFD10, KEY_3270_KeyClick = 0xFD11, KEY_3270_Jump = 0xFD12, KEY_3270_Ident = 0xFD13, KEY_3270_Rule = 0xFD14, KEY_3270_Copy = 0xFD15, KEY_3270_Play = 0xFD16, KEY_3270_Setup = 0xFD17, KEY_3270_Record = 0xFD18, KEY_3270_ChangeScreen = 0xFD19, KEY_3270_DeleteWord = 0xFD1A, KEY_3270_ExSelect = 0xFD1B, KEY_3270_CursorSelect = 0xFD1C, KEY_3270_PrintScreen = 0xFD1D, KEY_3270_Enter = 0xFD1E, // Latin 1 KEY_space = 0x0020, KEY_exclam = 0x0021, KEY_quotedbl = 0x0022, KEY_numbersign = 0x0023, KEY_dollar = 0x0024, KEY_percent = 0x0025, KEY_ampersand = 0x0026, KEY_apostrophe = 0x0027, KEY_quoteright = 0x0027, KEY_parenleft = 0x0028, KEY_parenright = 0x0029, KEY_asterisk = 0x002A, KEY_plus = 0x002B, KEY_comma = 0x002C, KEY_minus = 0x002D, KEY_period = 0x002E, KEY_slash = 0x002F, KEY_0 = 0x0030, KEY_1 = 0x0031, KEY_2 = 0x0032, KEY_3 = 0x0033, KEY_4 = 0x0034, KEY_5 = 0x0035, KEY_6 = 0x0036, KEY_7 = 0x0037, KEY_8 = 0x0038, KEY_9 = 0x0039, KEY_colon = 0x003A, KEY_semicolon = 0x003B, KEY_less = 0x003C, KEY_equal = 0x003D, KEY_greater = 0x003E, KEY_question = 0x003F, KEY_at = 0x0040, KEY_A = 0x0041, KEY_B = 0x0042, KEY_C = 0x0043, KEY_D = 0x0044, KEY_E = 0x0045, KEY_F = 0x0046, KEY_G = 0x0047, KEY_H = 0x0048, KEY_I = 0x0049, KEY_J = 0x004A, KEY_K = 0x004B, KEY_L = 0x004C, KEY_M = 0x004D, KEY_N = 0x004E, KEY_O = 0x004F, KEY_P = 0x0050, KEY_Q = 0x0051, KEY_R = 0x0052, KEY_S = 0x0053, KEY_T = 0x0054, KEY_U = 0x0055, KEY_V = 0x0056, KEY_W = 0x0057, KEY_X = 0x0058, KEY_Y = 0x0059, KEY_Z = 0x005A, KEY_bracketleft = 0x005B, KEY_backslash = 0x005C, KEY_bracketright = 0x005D, KEY_asciicircum = 0x005E, KEY_underscore = 0x005F, KEY_grave = 0x0060, KEY_quoteleft = 0x0060, KEY_a = 0x0061, KEY_b = 0x0062, KEY_c = 0x0063, KEY_d = 0x0064, KEY_e = 0x0065, KEY_f = 0x0066, KEY_g = 0x0067, KEY_h = 0x0068, KEY_i = 0x0069, KEY_j = 0x006A, KEY_k = 0x006B, KEY_l = 0x006C, KEY_m = 0x006D, KEY_n = 0x006E, KEY_o = 0x006F, KEY_p = 0x0070, KEY_q = 0x0071, KEY_r = 0x0072, KEY_s = 0x0073, KEY_t = 0x0074, KEY_u = 0x0075, KEY_v = 0x0076, KEY_w = 0x0077, KEY_x = 0x0078, KEY_y = 0x0079, KEY_z = 0x007A, KEY_braceleft = 0x007B, KEY_bar = 0x007C, KEY_braceright = 0x007D, KEY_asciitilde = 0x007E, KEY_nobreakspace = 0x00A0, KEY_exclamdown = 0x00A1, KEY_cent = 0x00A2, KEY_sterling = 0x00A3, KEY_currency = 0x00A4, KEY_yen = 0x00A5, KEY_brokenbar = 0x00A6, KEY_section = 0x00A7, KEY_diaeresis = 0x00A8, KEY_copyright = 0x00A9, KEY_ordfeminine = 0x00AA, KEY_guillemotleft = 0x00AB, KEY_notsign = 0x00AC, KEY_hyphen = 0x00AD, KEY_registered = 0x00AE, KEY_macron = 0x00AF, KEY_degree = 0x00B0, KEY_plusminus = 0x00B1, KEY_twosuperior = 0x00B2, KEY_threesuperior = 0x00B3, KEY_acute = 0x00B4, KEY_mu = 0x00B5, KEY_paragraph = 0x00B6, KEY_periodcentered = 0x00B7, KEY_cedilla = 0x00B8, KEY_onesuperior = 0x00B9, KEY_masculine = 0x00BA, KEY_guillemotright = 0x00BB, KEY_onequarter = 0x00BC, KEY_onehalf = 0x00BD, KEY_threequarters = 0x00BE, KEY_questiondown = 0x00BF, KEY_Agrave = 0x00C0, KEY_Aacute = 0x00C1, KEY_Acircumflex = 0x00C2, KEY_Atilde = 0x00C3, KEY_Adiaeresis = 0x00C4, KEY_Aring = 0x00C5, KEY_AE = 0x00C6, KEY_Ccedilla = 0x00C7, KEY_Egrave = 0x00C8, KEY_Eacute = 0x00C9, KEY_Ecircumflex = 0x00CA, KEY_Ediaeresis = 0x00CB, KEY_Igrave = 0x00CC, KEY_Iacute = 0x00CD, KEY_Icircumflex = 0x00CE, KEY_Idiaeresis = 0x00CF, KEY_ETH = 0x00D0, KEY_Eth = 0x00D0, KEY_Ntilde = 0x00D1, KEY_Ograve = 0x00D2, KEY_Oacute = 0x00D3, KEY_Ocircumflex = 0x00D4, KEY_Otilde = 0x00D5, KEY_Odiaeresis = 0x00D6, KEY_multiply = 0x00D7, KEY_Ooblique = 0x00D8, KEY_Ugrave = 0x00D9, KEY_Uacute = 0x00DA, KEY_Ucircumflex = 0x00DB, KEY_Udiaeresis = 0x00DC, KEY_Yacute = 0x00DD, KEY_THORN = 0x00DE, KEY_Thorn = 0x00DE, KEY_ssharp = 0x00DF, KEY_agrave = 0x00E0, KEY_aacute = 0x00E1, KEY_acircumflex = 0x00E2, KEY_atilde = 0x00E3, KEY_adiaeresis = 0x00E4, KEY_aring = 0x00E5, KEY_ae = 0x00E6, KEY_ccedilla = 0x00E7, KEY_egrave = 0x00E8, KEY_eacute = 0x00E9, KEY_ecircumflex = 0x00EA, KEY_ediaeresis = 0x00EB, KEY_igrave = 0x00EC, KEY_iacute = 0x00ED, KEY_icircumflex = 0x00EE, KEY_idiaeresis = 0x00EF, KEY_eth = 0x00F0, KEY_ntilde = 0x00F1, KEY_ograve = 0x00F2, KEY_oacute = 0x00F3, KEY_ocircumflex = 0x00F4, KEY_otilde = 0x00F5, KEY_odiaeresis = 0x00F6, KEY_division = 0x00F7, KEY_oslash = 0x00F8, KEY_ugrave = 0x00F9, KEY_uacute = 0x00FA, KEY_ucircumflex = 0x00FB, KEY_udiaeresis = 0x00FC, KEY_yacute = 0x00FD, KEY_thorn = 0x00FE, KEY_ydiaeresis = 0x00FF, // Latin 2 KEY_Aogonek = 0x01A1, KEY_breve = 0x01A2, KEY_Lstroke = 0x01A3, KEY_Lcaron = 0x01A5, KEY_Sacute = 0x01A6, KEY_Scaron = 0x01A9, KEY_Scedilla = 0x01AA, KEY_Tcaron = 0x01AB, KEY_Zacute = 0x01AC, KEY_Zcaron = 0x01AE, KEY_Zabovedot = 0x01AF, KEY_aogonek = 0x01B1, KEY_ogonek = 0x01B2, KEY_lstroke = 0x01B3, KEY_lcaron = 0x01B5, KEY_sacute = 0x01B6, KEY_caron = 0x01B7, KEY_scaron = 0x01B9, KEY_scedilla = 0x01BA, KEY_tcaron = 0x01BB, KEY_zacute = 0x01BC, KEY_doubleacute = 0x01BD, KEY_zcaron = 0x01BE, KEY_zabovedot = 0x01BF, KEY_Racute = 0x01C0, KEY_Abreve = 0x01C3, KEY_Lacute = 0x01C5, KEY_Cacute = 0x01C6, KEY_Ccaron = 0x01C8, KEY_Eogonek = 0x01CA, KEY_Ecaron = 0x01CC, KEY_Dcaron = 0x01CF, KEY_Dstroke = 0x01D0, KEY_Nacute = 0x01D1, KEY_Ncaron = 0x01D2, KEY_Odoubleacute = 0x01D5, KEY_Rcaron = 0x01D8, KEY_Uring = 0x01D9, KEY_Udoubleacute = 0x01DB, KEY_Tcedilla = 0x01DE, KEY_racute = 0x01E0, KEY_abreve = 0x01E3, KEY_lacute = 0x01E5, KEY_cacute = 0x01E6, KEY_ccaron = 0x01E8, KEY_eogonek = 0x01EA, KEY_ecaron = 0x01EC, KEY_dcaron = 0x01EF, KEY_dstroke = 0x01F0, KEY_nacute = 0x01F1, KEY_ncaron = 0x01F2, KEY_odoubleacute = 0x01F5, KEY_udoubleacute = 0x01FB, KEY_rcaron = 0x01F8, KEY_uring = 0x01F9, KEY_tcedilla = 0x01FE, KEY_abovedot = 0x01FF, // Latin 3 KEY_Hstroke = 0x02A1, KEY_Hcircumflex = 0x02A6, KEY_Iabovedot = 0x02A9, KEY_Gbreve = 0x02AB, KEY_Jcircumflex = 0x02AC, KEY_hstroke = 0x02B1, KEY_hcircumflex = 0x02B6, KEY_idotless = 0x02B9, KEY_gbreve = 0x02BB, KEY_jcircumflex = 0x02BC, KEY_Cabovedot = 0x02C5, KEY_Ccircumflex = 0x02C6, KEY_Gabovedot = 0x02D5, KEY_Gcircumflex = 0x02D8, KEY_Ubreve = 0x02DD, KEY_Scircumflex = 0x02DE, KEY_cabovedot = 0x02E5, KEY_ccircumflex = 0x02E6, KEY_gabovedot = 0x02F5, KEY_gcircumflex = 0x02F8, KEY_ubreve = 0x02FD, KEY_scircumflex = 0x02FE, // Latin 4 KEY_kra = 0x03A2, KEY_kappa = 0x03A2, KEY_Rcedilla = 0x03A3, KEY_Itilde = 0x03A5, KEY_Lcedilla = 0x03A6, KEY_Emacron = 0x03AA, KEY_Gcedilla = 0x03AB, KEY_Tslash = 0x03AC, KEY_rcedilla = 0x03B3, KEY_itilde = 0x03B5, KEY_lcedilla = 0x03B6, KEY_emacron = 0x03BA, KEY_gcedilla = 0x03BB, KEY_tslash = 0x03BC, KEY_ENG = 0x03BD, KEY_eng = 0x03BF, KEY_Amacron = 0x03C0, KEY_Iogonek = 0x03C7, KEY_Eabovedot = 0x03CC, KEY_Imacron = 0x03CF, KEY_Ncedilla = 0x03D1, KEY_Omacron = 0x03D2, KEY_Kcedilla = 0x03D3, KEY_Uogonek = 0x03D9, KEY_Utilde = 0x03DD, KEY_Umacron = 0x03DE, KEY_amacron = 0x03E0, KEY_iogonek = 0x03E7, KEY_eabovedot = 0x03EC, KEY_imacron = 0x03EF, KEY_ncedilla = 0x03F1, KEY_omacron = 0x03F2, KEY_kcedilla = 0x03F3, KEY_uogonek = 0x03F9, KEY_utilde = 0x03FD, KEY_umacron = 0x03FE, // Katakana KEY_overline = 0x047E, KEY_kana_fullstop = 0x04A1, KEY_kana_openingbracket = 0x04A2, KEY_kana_closingbracket = 0x04A3, KEY_kana_comma = 0x04A4, KEY_kana_conjunctive = 0x04A5, KEY_kana_middledot = 0x04A5, KEY_kana_WO = 0x04A6, KEY_kana_a = 0x04A7, KEY_kana_i = 0x04A8, KEY_kana_u = 0x04A9, KEY_kana_e = 0x04AA, KEY_kana_o = 0x04AB, KEY_kana_ya = 0x04AC, KEY_kana_yu = 0x04AD, KEY_kana_yo = 0x04AE, KEY_kana_tsu = 0x04AF, KEY_kana_tu = 0x04AF, KEY_prolongedsound = 0x04B0, KEY_kana_A = 0x04B1, KEY_kana_I = 0x04B2, KEY_kana_U = 0x04B3, KEY_kana_E = 0x04B4, KEY_kana_O = 0x04B5, KEY_kana_KA = 0x04B6, KEY_kana_KI = 0x04B7, KEY_kana_KU = 0x04B8, KEY_kana_KE = 0x04B9, KEY_kana_KO = 0x04BA, KEY_kana_SA = 0x04BB, KEY_kana_SHI = 0x04BC, KEY_kana_SU = 0x04BD, KEY_kana_SE = 0x04BE, KEY_kana_SO = 0x04BF, KEY_kana_TA = 0x04C0, KEY_kana_CHI = 0x04C1, KEY_kana_TI = 0x04C1, KEY_kana_TSU = 0x04C2, KEY_kana_TU = 0x04C2, KEY_kana_TE = 0x04C3, KEY_kana_TO = 0x04C4, KEY_kana_NA = 0x04C5, KEY_kana_NI = 0x04C6, KEY_kana_NU = 0x04C7, KEY_kana_NE = 0x04C8, KEY_kana_NO = 0x04C9, KEY_kana_HA = 0x04CA, KEY_kana_HI = 0x04CB, KEY_kana_FU = 0x04CC, KEY_kana_HU = 0x04CC, KEY_kana_HE = 0x04CD, KEY_kana_HO = 0x04CE, KEY_kana_MA = 0x04CF, KEY_kana_MI = 0x04D0, KEY_kana_MU = 0x04D1, KEY_kana_ME = 0x04D2, KEY_kana_MO = 0x04D3, KEY_kana_YA = 0x04D4, KEY_kana_YU = 0x04D5, KEY_kana_YO = 0x04D6, KEY_kana_RA = 0x04D7, KEY_kana_RI = 0x04D8, KEY_kana_RU = 0x04D9, KEY_kana_RE = 0x04DA, KEY_kana_RO = 0x04DB, KEY_kana_WA = 0x04DC, KEY_kana_N = 0x04DD, KEY_voicedsound = 0x04DE, KEY_semivoicedsound = 0x04DF, KEY_kana_switch = 0x0FF7, // Arabic KEY_Arabic_comma = 0x05AC, KEY_Arabic_semicolon = 0x05BB, KEY_Arabic_question_mark = 0x05BF, KEY_Arabic_hamza = 0x05C1, KEY_Arabic_maddaonalef = 0x05C2, KEY_Arabic_hamzaonalef = 0x05C3, KEY_Arabic_hamzaonwaw = 0x05C4, KEY_Arabic_hamzaunderalef = 0x05C5, KEY_Arabic_hamzaonyeh = 0x05C6, KEY_Arabic_alef = 0x05C7, KEY_Arabic_beh = 0x05C8, KEY_Arabic_tehmarbuta = 0x05C9, KEY_Arabic_teh = 0x05CA, KEY_Arabic_theh = 0x05CB, KEY_Arabic_jeem = 0x05CC, KEY_Arabic_hah = 0x05CD, KEY_Arabic_khah = 0x05CE, KEY_Arabic_dal = 0x05CF, KEY_Arabic_thal = 0x05D0, KEY_Arabic_ra = 0x05D1, KEY_Arabic_zain = 0x05D2, KEY_Arabic_seen = 0x05D3, KEY_Arabic_sheen = 0x05D4, KEY_Arabic_sad = 0x05D5, KEY_Arabic_dad = 0x05D6, KEY_Arabic_tah = 0x05D7, KEY_Arabic_zah = 0x05D8, KEY_Arabic_ain = 0x05D9, KEY_Arabic_ghain = 0x05DA, KEY_Arabic_tatweel = 0x05E0, KEY_Arabic_feh = 0x05E1, KEY_Arabic_qaf = 0x05E2, KEY_Arabic_kaf = 0x05E3, KEY_Arabic_lam = 0x05E4, KEY_Arabic_meem = 0x05E5, KEY_Arabic_noon = 0x05E6, KEY_Arabic_ha = 0x05E7, KEY_Arabic_heh = 0x05E7, KEY_Arabic_waw = 0x05E8, KEY_Arabic_alefmaksura = 0x05E9, KEY_Arabic_yeh = 0x05EA, KEY_Arabic_fathatan = 0x05EB, KEY_Arabic_dammatan = 0x05EC, KEY_Arabic_kasratan = 0x05ED, KEY_Arabic_fatha = 0x05EE, KEY_Arabic_damma = 0x05EF, KEY_Arabic_kasra = 0x05F0, KEY_Arabic_shadda = 0x05F1, KEY_Arabic_sukun = 0x05F2, KEY_Arabic_switch = 0xFF7E, // Cyrillic KEY_Serbian_dje = 0x06A1, KEY_Macedonia_gje = 0x06A2, KEY_Cyrillic_io = 0x06A3, KEY_Ukrainian_ie = 0x06A4, KEY_Ukranian_je = 0x06A4, KEY_Macedonia_dse = 0x06A5, KEY_Ukrainian_i = 0x06A6, KEY_Ukranian_i = 0x06A6, KEY_Ukrainian_yi = 0x06A7, KEY_Ukranian_yi = 0x06A7, KEY_Cyrillic_je = 0x06A8, KEY_Serbian_je = 0x06A8, KEY_Cyrillic_lje = 0x06A9, KEY_Serbian_lje = 0x06A9, KEY_Cyrillic_nje = 0x06AA, KEY_Serbian_nje = 0x06AA, KEY_Serbian_tshe = 0x06AB, KEY_Macedonia_kje = 0x06AC, KEY_Byelorussian_shortu = 0x06AE, KEY_Cyrillic_dzhe = 0x06AF, KEY_Serbian_dze = 0x06AF, KEY_numerosign = 0x06B0, KEY_Serbian_DJE = 0x06B1, KEY_Macedonia_GJE = 0x06B2, KEY_Cyrillic_IO = 0x06B3, KEY_Ukrainian_IE = 0x06B4, KEY_Ukranian_JE = 0x06B4, KEY_Macedonia_DSE = 0x06B5, KEY_Ukrainian_I = 0x06B6, KEY_Ukranian_I = 0x06B6, KEY_Ukrainian_YI = 0x06B7, KEY_Ukranian_YI = 0x06B7, KEY_Cyrillic_JE = 0x06B8, KEY_Serbian_JE = 0x06B8, KEY_Cyrillic_LJE = 0x06B9, KEY_Serbian_LJE = 0x06B9, KEY_Cyrillic_NJE = 0x06BA, KEY_Serbian_NJE = 0x06BA, KEY_Serbian_TSHE = 0x06BB, KEY_Macedonia_KJE = 0x06BC, KEY_Byelorussian_SHORTU = 0x06BE, KEY_Cyrillic_DZHE = 0x06BF, KEY_Serbian_DZE = 0x06BF, KEY_Cyrillic_yu = 0x06C0, KEY_Cyrillic_a = 0x06C1, KEY_Cyrillic_be = 0x06C2, KEY_Cyrillic_tse = 0x06C3, KEY_Cyrillic_de = 0x06C4, KEY_Cyrillic_ie = 0x06C5, KEY_Cyrillic_ef = 0x06C6, KEY_Cyrillic_ghe = 0x06C7, KEY_Cyrillic_ha = 0x06C8, KEY_Cyrillic_i = 0x06C9, KEY_Cyrillic_shorti = 0x06CA, KEY_Cyrillic_ka = 0x06CB, KEY_Cyrillic_el = 0x06CC, KEY_Cyrillic_em = 0x06CD, KEY_Cyrillic_en = 0x06CE, KEY_Cyrillic_o = 0x06CF, KEY_Cyrillic_pe = 0x06D0, KEY_Cyrillic_ya = 0x06D1, KEY_Cyrillic_er = 0x06D2, KEY_Cyrillic_es = 0x06D3, KEY_Cyrillic_te = 0x06D4, KEY_Cyrillic_u = 0x06D5, KEY_Cyrillic_zhe = 0x06D6, KEY_Cyrillic_ve = 0x06D7, KEY_Cyrillic_softsign = 0x06D8, KEY_Cyrillic_yeru = 0x06D9, KEY_Cyrillic_ze = 0x06DA, KEY_Cyrillic_sha = 0x06DB, KEY_Cyrillic_e = 0x06DC, KEY_Cyrillic_shcha = 0x06DD, KEY_Cyrillic_che = 0x06DE, KEY_Cyrillic_hardsign = 0x06DF, KEY_Cyrillic_YU = 0x06E0, KEY_Cyrillic_A = 0x06E1, KEY_Cyrillic_BE = 0x06E2, KEY_Cyrillic_TSE = 0x06E3, KEY_Cyrillic_DE = 0x06E4, KEY_Cyrillic_IE = 0x06E5, KEY_Cyrillic_EF = 0x06E6, KEY_Cyrillic_GHE = 0x06E7, KEY_Cyrillic_HA = 0x06E8, KEY_Cyrillic_I = 0x06E9, KEY_Cyrillic_SHORTI = 0x06EA, KEY_Cyrillic_KA = 0x06EB, KEY_Cyrillic_EL = 0x06EC, KEY_Cyrillic_EM = 0x06ED, KEY_Cyrillic_EN = 0x06EE, KEY_Cyrillic_O = 0x06EF, KEY_Cyrillic_PE = 0x06F0, KEY_Cyrillic_YA = 0x06F1, KEY_Cyrillic_ER = 0x06F2, KEY_Cyrillic_ES = 0x06F3, KEY_Cyrillic_TE = 0x06F4, KEY_Cyrillic_U = 0x06F5, KEY_Cyrillic_ZHE = 0x06F6, KEY_Cyrillic_VE = 0x06F7, KEY_Cyrillic_SOFTSIGN = 0x06F8, KEY_Cyrillic_YERU = 0x06F9, KEY_Cyrillic_ZE = 0x06FA, KEY_Cyrillic_SHA = 0x06FB, KEY_Cyrillic_E = 0x06FC, KEY_Cyrillic_SHCHA = 0x06FD, KEY_Cyrillic_CHE = 0x06FE, KEY_Cyrillic_HARDSIGN = 0x06FF, // Greek KEY_Greek_ALPHAaccent = 0x07A1, KEY_Greek_EPSILONaccent = 0x07A2, KEY_Greek_ETAaccent = 0x07A3, KEY_Greek_IOTAaccent = 0x07A4, KEY_Greek_IOTAdiaeresis = 0x07A5, KEY_Greek_OMICRONaccent = 0x07A7, KEY_Greek_UPSILONaccent = 0x07A8, KEY_Greek_UPSILONdieresis = 0x07A9, KEY_Greek_OMEGAaccent = 0x07AB, KEY_Greek_accentdieresis = 0x07AE, KEY_Greek_horizbar = 0x07AF, KEY_Greek_alphaaccent = 0x07B1, KEY_Greek_epsilonaccent = 0x07B2, KEY_Greek_etaaccent = 0x07B3, KEY_Greek_iotaaccent = 0x07B4, KEY_Greek_iotadieresis = 0x07B5, KEY_Greek_iotaaccentdieresis = 0x07B6, KEY_Greek_omicronaccent = 0x07B7, KEY_Greek_upsilonaccent = 0x07B8, KEY_Greek_upsilondieresis = 0x07B9, KEY_Greek_upsilonaccentdieresis = 0x07BA, KEY_Greek_omegaaccent = 0x07BB, KEY_Greek_ALPHA = 0x07C1, KEY_Greek_BETA = 0x07C2, KEY_Greek_GAMMA = 0x07C3, KEY_Greek_DELTA = 0x07C4, KEY_Greek_EPSILON = 0x07C5, KEY_Greek_ZETA = 0x07C6, KEY_Greek_ETA = 0x07C7, KEY_Greek_THETA = 0x07C8, KEY_Greek_IOTA = 0x07C9, KEY_Greek_KAPPA = 0x07CA, KEY_Greek_LAMDA = 0x07CB, KEY_Greek_LAMBDA = 0x07CB, KEY_Greek_MU = 0x07CC, KEY_Greek_NU = 0x07CD, KEY_Greek_XI = 0x07CE, KEY_Greek_OMICRON = 0x07CF, KEY_Greek_PI = 0x07D0, KEY_Greek_RHO = 0x07D1, KEY_Greek_SIGMA = 0x07D2, KEY_Greek_TAU = 0x07D4, KEY_Greek_UPSILON = 0x07D5, KEY_Greek_PHI = 0x07D6, KEY_Greek_CHI = 0x07D7, KEY_Greek_PSI = 0x07D8, KEY_Greek_OMEGA = 0x07D9, KEY_Greek_alpha = 0x07E1, KEY_Greek_beta = 0x07E2, KEY_Greek_gamma = 0x07E3, KEY_Greek_delta = 0x07E4, KEY_Greek_epsilon = 0x07E5, KEY_Greek_zeta = 0x07E6, KEY_Greek_eta = 0x07E7, KEY_Greek_theta = 0x07E8, KEY_Greek_iota = 0x07E9, KEY_Greek_kappa = 0x07EA, KEY_Greek_lamda = 0x07EB, KEY_Greek_lambda = 0x07EB, KEY_Greek_mu = 0x07EC, KEY_Greek_nu = 0x07ED, KEY_Greek_xi = 0x07EE, KEY_Greek_omicron = 0x07EF, KEY_Greek_pi = 0x07F0, KEY_Greek_rho = 0x07F1, KEY_Greek_sigma = 0x07F2, KEY_Greek_finalsmallsigma = 0x07F3, KEY_Greek_tau = 0x07F4, KEY_Greek_upsilon = 0x07F5, KEY_Greek_phi = 0x07F6, KEY_Greek_chi = 0x07F7, KEY_Greek_psi = 0x07F8, KEY_Greek_omega = 0x07F9, KEY_Greek_switch = 0xFF7E, // Technical KEY_leftradical = 0x08A1, KEY_topleftradical = 0x08A2, KEY_horizconnector = 0x08A3, KEY_topintegral = 0x08A4, KEY_botintegral = 0x08A5, KEY_vertconnector = 0x08A6, KEY_topleftsqbracket = 0x08A7, KEY_botleftsqbracket = 0x08A8, KEY_toprightsqbracket = 0x08A9, KEY_botrightsqbracket = 0x08AA, KEY_topleftparens = 0x08AB, KEY_botleftparens = 0x08AC, KEY_toprightparens = 0x08AD, KEY_botrightparens = 0x08AE, KEY_leftmiddlecurlybrace = 0x08AF, KEY_rightmiddlecurlybrace = 0x08B0, KEY_topleftsummation = 0x08B1, KEY_botleftsummation = 0x08B2, KEY_topvertsummationconnector = 0x08B3, KEY_botvertsummationconnector = 0x08B4, KEY_toprightsummation = 0x08B5, KEY_botrightsummation = 0x08B6, KEY_rightmiddlesummation = 0x08B7, KEY_lessthanequal = 0x08BC, KEY_notequal = 0x08BD, KEY_greaterthanequal = 0x08BE, KEY_integral = 0x08BF, KEY_therefore = 0x08C0, KEY_variation = 0x08C1, KEY_infinity = 0x08C2, KEY_nabla = 0x08C5, KEY_approximate = 0x08C8, KEY_similarequal = 0x08C9, KEY_ifonlyif = 0x08CD, KEY_implies = 0x08CE, KEY_identical = 0x08CF, KEY_radical = 0x08D6, KEY_includedin = 0x08DA, KEY_includes = 0x08DB, KEY_intersection = 0x08DC, KEY_union = 0x08DD, KEY_logicaland = 0x08DE, KEY_logicalor = 0x08DF, KEY_partialderivative = 0x08EF, KEY_function = 0x08F6, KEY_leftarrow = 0x08FB, KEY_uparrow = 0x08FC, KEY_rightarrow = 0x08FD, KEY_downarrow = 0x08FE, // Special KEY_blank = 0x09DF, KEY_soliddiamond = 0x09E0, KEY_checkerboard = 0x09E1, KEY_ht = 0x09E2, KEY_ff = 0x09E3, KEY_cr = 0x09E4, KEY_lf = 0x09E5, KEY_nl = 0x09E8, KEY_vt = 0x09E9, KEY_lowrightcorner = 0x09EA, KEY_uprightcorner = 0x09EB, KEY_upleftcorner = 0x09EC, KEY_lowleftcorner = 0x09ED, KEY_crossinglines = 0x09EE, KEY_horizlinescan1 = 0x09EF, KEY_horizlinescan3 = 0x09F0, KEY_horizlinescan5 = 0x09F1, KEY_horizlinescan7 = 0x09F2, KEY_horizlinescan9 = 0x09F3, KEY_leftt = 0x09F4, KEY_rightt = 0x09F5, KEY_bott = 0x09F6, KEY_topt = 0x09F7, KEY_vertbar = 0x09F8, // Publishing KEY_emspace = 0x0AA1, KEY_enspace = 0x0AA2, KEY_em3space = 0x0AA3, KEY_em4space = 0x0AA4, KEY_digitspace = 0x0AA5, KEY_punctspace = 0x0AA6, KEY_thinspace = 0x0AA7, KEY_hairspace = 0x0AA8, KEY_emdash = 0x0AA9, KEY_endash = 0x0AAA, KEY_signifblank = 0x0AAC, KEY_ellipsis = 0x0AAE, KEY_doubbaselinedot = 0x0AAF, KEY_onethird = 0x0AB0, KEY_twothirds = 0x0AB1, KEY_onefifth = 0x0AB2, KEY_twofifths = 0x0AB3, KEY_threefifths = 0x0AB4, KEY_fourfifths = 0x0AB5, KEY_onesixth = 0x0AB6, KEY_fivesixths = 0x0AB7, KEY_careof = 0x0AB8, KEY_figdash = 0x0ABB, KEY_leftanglebracket = 0x0ABC, KEY_decimalpoint = 0x0ABD, KEY_rightanglebracket = 0x0ABE, KEY_marker = 0x0ABF, KEY_oneeighth = 0x0AC3, KEY_threeeighths = 0x0AC4, KEY_fiveeighths = 0x0AC5, KEY_seveneighths = 0x0AC6, KEY_trademark = 0x0AC9, KEY_signaturemark = 0x0ACA, KEY_trademarkincircle = 0x0ACB, KEY_leftopentriangle = 0x0ACC, KEY_rightopentriangle = 0x0ACD, KEY_emopencircle = 0x0ACE, KEY_emopenrectangle = 0x0ACF, KEY_leftsinglequotemark = 0x0AD0, KEY_rightsinglequotemark = 0x0AD1, KEY_leftdoublequotemark = 0x0AD2, KEY_rightdoublequotemark = 0x0AD3, KEY_prescription = 0x0AD4, KEY_minutes = 0x0AD6, KEY_seconds = 0x0AD7, KEY_latincross = 0x0AD9, KEY_hexagram = 0x0ADA, KEY_filledrectbullet = 0x0ADB, KEY_filledlefttribullet = 0x0ADC, KEY_filledrighttribullet = 0x0ADD, KEY_emfilledcircle = 0x0ADE, KEY_emfilledrect = 0x0ADF, KEY_enopencircbullet = 0x0AE0, KEY_enopensquarebullet = 0x0AE1, KEY_openrectbullet = 0x0AE2, KEY_opentribulletup = 0x0AE3, KEY_opentribulletdown = 0x0AE4, KEY_openstar = 0x0AE5, KEY_enfilledcircbullet = 0x0AE6, KEY_enfilledsqbullet = 0x0AE7, KEY_filledtribulletup = 0x0AE8, KEY_filledtribulletdown = 0x0AE9, KEY_leftpointer = 0x0AEA, KEY_rightpointer = 0x0AEB, KEY_club = 0x0AEC, KEY_diamond = 0x0AED, KEY_heart = 0x0AEE, KEY_maltesecross = 0x0AF0, KEY_dagger = 0x0AF1, KEY_doubledagger = 0x0AF2, KEY_checkmark = 0x0AF3, KEY_ballotcross = 0x0AF4, KEY_musicalsharp = 0x0AF5, KEY_musicalflat = 0x0AF6, KEY_malesymbol = 0x0AF7, KEY_femalesymbol = 0x0AF8, KEY_telephone = 0x0AF9, KEY_telephonerecorder = 0x0AFA, KEY_phonographcopyright = 0x0AFB, KEY_caret = 0x0AFC, KEY_singlelowquotemark = 0x0AFD, KEY_doublelowquotemark = 0x0AFE, KEY_cursor = 0x0AFF, // APL KEY_leftcaret = 0x0BA3, KEY_rightcaret = 0x0BA6, KEY_downcaret = 0x0BA8, KEY_upcaret = 0x0BA9, KEY_overbar = 0x0BC0, KEY_downtack = 0x0BC2, KEY_upshoe = 0x0BC3, KEY_downstile = 0x0BC4, KEY_underbar = 0x0BC6, KEY_jot = 0x0BCA, KEY_quad = 0x0BCC, KEY_uptack = 0x0BCE, KEY_circle = 0x0BCF, KEY_upstile = 0x0BD3, KEY_downshoe = 0x0BD6, KEY_rightshoe = 0x0BD8, KEY_leftshoe = 0x0BDA, KEY_lefttack = 0x0BDC, KEY_righttack = 0x0BFC, // Hebrew KEY_hebrew_doublelowline = 0x0CDF, KEY_hebrew_aleph = 0x0CE0, KEY_hebrew_bet = 0x0CE1, KEY_hebrew_beth = 0x0CE1, KEY_hebrew_gimel = 0x0CE2, KEY_hebrew_gimmel = 0x0CE2, KEY_hebrew_dalet = 0x0CE3, KEY_hebrew_daleth = 0x0CE3, KEY_hebrew_he = 0x0CE4, KEY_hebrew_waw = 0x0CE5, KEY_hebrew_zain = 0x0CE6, KEY_hebrew_zayin = 0x0CE6, KEY_hebrew_chet = 0x0CE7, KEY_hebrew_het = 0x0CE7, KEY_hebrew_tet = 0x0CE8, KEY_hebrew_teth = 0x0CE8, KEY_hebrew_yod = 0x0CE9, KEY_hebrew_finalkaph = 0x0CEA, KEY_hebrew_kaph = 0x0CEB, KEY_hebrew_lamed = 0x0CEC, KEY_hebrew_finalmem = 0x0CED, KEY_hebrew_mem = 0x0CEE, KEY_hebrew_finalnun = 0x0CEF, KEY_hebrew_nun = 0x0CF0, KEY_hebrew_samech = 0x0CF1, KEY_hebrew_samekh = 0x0CF1, KEY_hebrew_ayin = 0x0CF2, KEY_hebrew_finalpe = 0x0CF3, KEY_hebrew_pe = 0x0CF4, KEY_hebrew_finalzade = 0x0CF5, KEY_hebrew_finalzadi = 0x0CF5, KEY_hebrew_zade = 0x0CF6, KEY_hebrew_zadi = 0x0CF6, KEY_hebrew_qoph = 0x0CF7, KEY_hebrew_kuf = 0x0CF7, KEY_hebrew_resh = 0x0CF8, KEY_hebrew_shin = 0x0CF9, KEY_hebrew_taw = 0x0CFA, KEY_hebrew_taf = 0x0CFA, KEY_Hebrew_switch = 0xFF7E, // Thai KEY_Thai_kokai = 0x0DA1, KEY_Thai_khokhai = 0x0DA2, KEY_Thai_khokhuat = 0x0DA3, KEY_Thai_khokhwai = 0x0DA4, KEY_Thai_khokhon = 0x0DA5, KEY_Thai_khorakhang = 0x0DA6, KEY_Thai_ngongu = 0x0DA7, KEY_Thai_chochan = 0x0DA8, KEY_Thai_choching = 0x0DA9, KEY_Thai_chochang = 0x0DAA, KEY_Thai_soso = 0x0DAB, KEY_Thai_chochoe = 0x0DAC, KEY_Thai_yoying = 0x0DAD, KEY_Thai_dochada = 0x0DAE, KEY_Thai_topatak = 0x0DAF, KEY_Thai_thothan = 0x0DB0, KEY_Thai_thonangmontho = 0x0DB1, KEY_Thai_thophuthao = 0x0DB2, KEY_Thai_nonen = 0x0DB3, KEY_Thai_dodek = 0x0DB4, KEY_Thai_totao = 0x0DB5, KEY_Thai_thothung = 0x0DB6, KEY_Thai_thothahan = 0x0DB7, KEY_Thai_thothong = 0x0DB8, KEY_Thai_nonu = 0x0DB9, KEY_Thai_bobaimai = 0x0DBA, KEY_Thai_popla = 0x0DBB, KEY_Thai_phophung = 0x0DBC, KEY_Thai_fofa = 0x0DBD, KEY_Thai_phophan = 0x0DBE, KEY_Thai_fofan = 0x0DBF, KEY_Thai_phosamphao = 0x0DC0, KEY_Thai_moma = 0x0DC1, KEY_Thai_yoyak = 0x0DC2, KEY_Thai_rorua = 0x0DC3, KEY_Thai_ru = 0x0DC4, KEY_Thai_loling = 0x0DC5, KEY_Thai_lu = 0x0DC6, KEY_Thai_wowaen = 0x0DC7, KEY_Thai_sosala = 0x0DC8, KEY_Thai_sorusi = 0x0DC9, KEY_Thai_sosua = 0x0DCA, KEY_Thai_hohip = 0x0DCB, KEY_Thai_lochula = 0x0DCC, KEY_Thai_oang = 0x0DCD, KEY_Thai_honokhuk = 0x0DCE, KEY_Thai_paiyannoi = 0x0DCF, KEY_Thai_saraa = 0x0DD0, KEY_Thai_maihanakat = 0x0DD1, KEY_Thai_saraaa = 0x0DD2, KEY_Thai_saraam = 0x0DD3, KEY_Thai_sarai = 0x0DD4, KEY_Thai_saraii = 0x0DD5, KEY_Thai_saraue = 0x0DD6, KEY_Thai_sarauee = 0x0DD7, KEY_Thai_sarau = 0x0DD8, KEY_Thai_sarauu = 0x0DD9, KEY_Thai_phinthu = 0x0DDA, KEY_Thai_maihanakat_maitho = 0x0DDE, KEY_Thai_baht = 0x0DDF, KEY_Thai_sarae = 0x0DE0, KEY_Thai_saraae = 0x0DE1, KEY_Thai_sarao = 0x0DE2, KEY_Thai_saraaimaimuan = 0x0DE3, KEY_Thai_saraaimaimalai = 0x0DE4, KEY_Thai_lakkhangyao = 0x0DE5, KEY_Thai_maiyamok = 0x0DE6, KEY_Thai_maitaikhu = 0x0DE7, KEY_Thai_maiek = 0x0DE8, KEY_Thai_maitho = 0x0DE9, KEY_Thai_maitri = 0x0DEA, KEY_Thai_maichattawa = 0x0DEB, KEY_Thai_thanthakhat = 0x0DEC, KEY_Thai_nikhahit = 0x0DED, KEY_Thai_leksun = 0x0DF0, KEY_Thai_leknung = 0x0DF1, KEY_Thai_leksong = 0x0DF2, KEY_Thai_leksam = 0x0DF3, KEY_Thai_leksi = 0x0DF4, KEY_Thai_lekha = 0x0DF5, KEY_Thai_lekhok = 0x0DF6, KEY_Thai_lekchet = 0x0DF7, KEY_Thai_lekpaet = 0x0DF8, KEY_Thai_lekkao = 0x0DF9, // Korean KEY_Hangul = 0xFF31, KEY_Hangul_Start = 0xFF32, KEY_Hangul_End = 0xFF33, KEY_Hangul_Hanja = 0xFF34, KEY_Hangul_Jamo = 0xFF35, KEY_Hangul_Romaja = 0xFF36, KEY_Hangul_Codeinput = 0xFF37, KEY_Hangul_Jeonja = 0xFF38, KEY_Hangul_Banja = 0xFF39, KEY_Hangul_PreHanja = 0xFF3A, KEY_Hangul_PostHanja = 0xFF3B, KEY_Hangul_SingleCandidate = 0xFF3C, KEY_Hangul_MultipleCandidate = 0xFF3D, KEY_Hangul_PreviousCandidate = 0xFF3E, KEY_Hangul_Special = 0xFF3F, KEY_Hangul_switch = 0xFF7E, KEY_Hangul_Kiyeog = 0x0EA1, KEY_Hangul_SsangKiyeog = 0x0EA2, KEY_Hangul_KiyeogSios = 0x0EA3, KEY_Hangul_Nieun = 0x0EA4, KEY_Hangul_NieunJieuj = 0x0EA5, KEY_Hangul_NieunHieuh = 0x0EA6, KEY_Hangul_Dikeud = 0x0EA7, KEY_Hangul_SsangDikeud = 0x0EA8, KEY_Hangul_Rieul = 0x0EA9, KEY_Hangul_RieulKiyeog = 0x0EAA, KEY_Hangul_RieulMieum = 0x0EAB, KEY_Hangul_RieulPieub = 0x0EAC, KEY_Hangul_RieulSios = 0x0EAD, KEY_Hangul_RieulTieut = 0x0EAE, KEY_Hangul_RieulPhieuf = 0x0EAF, KEY_Hangul_RieulHieuh = 0x0EB0, KEY_Hangul_Mieum = 0x0EB1, KEY_Hangul_Pieub = 0x0EB2, KEY_Hangul_SsangPieub = 0x0EB3, KEY_Hangul_PieubSios = 0x0EB4, KEY_Hangul_Sios = 0x0EB5, KEY_Hangul_SsangSios = 0x0EB6, KEY_Hangul_Ieung = 0x0EB7, KEY_Hangul_Jieuj = 0x0EB8, KEY_Hangul_SsangJieuj = 0x0EB9, KEY_Hangul_Cieuc = 0x0EBA, KEY_Hangul_Khieuq = 0x0EBB, KEY_Hangul_Tieut = 0x0EBC, KEY_Hangul_Phieuf = 0x0EBD, KEY_Hangul_Hieuh = 0x0EBE, KEY_Hangul_A = 0x0EBF, KEY_Hangul_AE = 0x0EC0, KEY_Hangul_YA = 0x0EC1, KEY_Hangul_YAE = 0x0EC2, KEY_Hangul_EO = 0x0EC3, KEY_Hangul_E = 0x0EC4, KEY_Hangul_YEO = 0x0EC5, KEY_Hangul_YE = 0x0EC6, KEY_Hangul_O = 0x0EC7, KEY_Hangul_WA = 0x0EC8, KEY_Hangul_WAE = 0x0EC9, KEY_Hangul_OE = 0x0ECA, KEY_Hangul_YO = 0x0ECB, KEY_Hangul_U = 0x0ECC, KEY_Hangul_WEO = 0x0ECD, KEY_Hangul_WE = 0x0ECE, KEY_Hangul_WI = 0x0ECF, KEY_Hangul_YU = 0x0ED0, KEY_Hangul_EU = 0x0ED1, KEY_Hangul_YI = 0x0ED2, KEY_Hangul_I = 0x0ED3, KEY_Hangul_J_Kiyeog = 0x0ED4, KEY_Hangul_J_SsangKiyeog = 0x0ED5, KEY_Hangul_J_KiyeogSios = 0x0ED6, KEY_Hangul_J_Nieun = 0x0ED7, KEY_Hangul_J_NieunJieuj = 0x0ED8, KEY_Hangul_J_NieunHieuh = 0x0ED9, KEY_Hangul_J_Dikeud = 0x0EDA, KEY_Hangul_J_Rieul = 0x0EDB, KEY_Hangul_J_RieulKiyeog = 0x0EDC, KEY_Hangul_J_RieulMieum = 0x0EDD, KEY_Hangul_J_RieulPieub = 0x0EDE, KEY_Hangul_J_RieulSios = 0x0EDF, KEY_Hangul_J_RieulTieut = 0x0EE0, KEY_Hangul_J_RieulPhieuf = 0x0EE1, KEY_Hangul_J_RieulHieuh = 0x0EE2, KEY_Hangul_J_Mieum = 0x0EE3, KEY_Hangul_J_Pieub = 0x0EE4, KEY_Hangul_J_PieubSios = 0x0EE5, KEY_Hangul_J_Sios = 0x0EE6, KEY_Hangul_J_SsangSios = 0x0EE7, KEY_Hangul_J_Ieung = 0x0EE8, KEY_Hangul_J_Jieuj = 0x0EE9, KEY_Hangul_J_Cieuc = 0x0EEA, KEY_Hangul_J_Khieuq = 0x0EEB, KEY_Hangul_J_Tieut = 0x0EEC, KEY_Hangul_J_Phieuf = 0x0EED, KEY_Hangul_J_Hieuh = 0x0EEE, KEY_Hangul_RieulYeorinHieuh = 0x0EEF, KEY_Hangul_SunkyeongeumMieum = 0x0EF0, KEY_Hangul_SunkyeongeumPieub = 0x0EF1, KEY_Hangul_PanSios = 0x0EF2, KEY_Hangul_KkogjiDalrinIeung = 0x0EF3, KEY_Hangul_SunkyeongeumPhieuf = 0x0EF4, KEY_Hangul_YeorinHieuh = 0x0EF5, KEY_Hangul_AraeA = 0x0EF6, KEY_Hangul_AraeAE = 0x0EF7, KEY_Hangul_J_PanSios = 0x0EF8, KEY_Hangul_J_KkogjiDalrinIeung = 0x0EF9, KEY_Hangul_J_YeorinHieuh = 0x0EFA, KEY_Korean_Won = 0x0EFF }; } #ifndef FX_NO_GLOBAL_NAMESPACE using namespace FX; #endif #endif fox-1.6.49/include/FXFontSelector.h0000664000175000017500000001120012130340076013761 00000000000000/******************************************************************************** * * * F o n t S e l e c t i o n B o x * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFontSelector.h,v 1.18 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXFONTSELECTOR_H #define FXFONTSELECTOR_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { class FXTextField; class FXList; class FXComboBox; class FXLabel; class FXButton; class FXCheckButton; class FXFont; /// Font selection widget class FXAPI FXFontSelector : public FXPacker { FXDECLARE(FXFontSelector) protected: FXTextField *family; FXList *familylist; FXTextField *weight; FXList *weightlist; FXTextField *style; FXList *stylelist; FXTextField *size; FXList *sizelist; FXComboBox *charset; FXComboBox *setwidth; FXComboBox *pitch; FXCheckButton *scalable; FXCheckButton *allfonts; FXButton *accept; FXButton *cancel; FXLabel *preview; FXFont *previewfont; FXFontDesc selected; protected: FXFontSelector(){} void listFontFaces(); void listWeights(); void listSlants(); void listFontSizes(); void previewFont(); private: FXFontSelector(const FXFontSelector&); FXFontSelector &operator=(const FXFontSelector&); public: long onCmdFamily(FXObject*,FXSelector,void*); long onCmdWeight(FXObject*,FXSelector,void*); long onCmdStyle(FXObject*,FXSelector,void*); long onCmdStyleText(FXObject*,FXSelector,void*); long onCmdSize(FXObject*,FXSelector,void*); long onCmdSizeText(FXObject*,FXSelector,void*); long onCmdCharset(FXObject*,FXSelector,void*); long onUpdCharset(FXObject*,FXSelector,void*); long onCmdSetWidth(FXObject*,FXSelector,void*); long onUpdSetWidth(FXObject*,FXSelector,void*); long onCmdPitch(FXObject*,FXSelector,void*); long onUpdPitch(FXObject*,FXSelector,void*); long onCmdScalable(FXObject*,FXSelector,void*); long onUpdScalable(FXObject*,FXSelector,void*); long onCmdAllFonts(FXObject*,FXSelector,void*); long onUpdAllFonts(FXObject*,FXSelector,void*); public: enum{ ID_FAMILY=FXPacker::ID_LAST, ID_WEIGHT, ID_STYLE, ID_STYLE_TEXT, ID_SIZE, ID_SIZE_TEXT, ID_CHARSET, ID_SETWIDTH, ID_PITCH, ID_SCALABLE, ID_ALLFONTS, ID_LAST }; public: /// Constructor FXFontSelector(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Return a pointer to the "Accept" button FXButton *acceptButton() const { return accept; } /// Return a pointer to the "Cancel" button FXButton *cancelButton() const { return cancel; } /// Set font selection void setFontSelection(const FXFontDesc& fontdesc); /// Get font selection void getFontSelection(FXFontDesc& fontdesc) const; /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXFontSelector(); }; } #endif fox-1.6.49/include/FXScrollArea.h0000664000175000017500000001446512130340076013421 00000000000000/******************************************************************************** * * * S c r o l l A r e a W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXScrollArea.h,v 1.29 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSCROLLAREA_H #define FXSCROLLAREA_H #ifndef FXCOMPOSITE_H #include "FXComposite.h" #endif namespace FX { /// Scrollbar options enum { SCROLLERS_NORMAL = 0, /// Show the scrollbars when needed HSCROLLER_ALWAYS = 0x00008000, /// Always show horizontal scrollers HSCROLLER_NEVER = 0x00010000, /// Never show horizontal scrollers VSCROLLER_ALWAYS = 0x00020000, /// Always show vertical scrollers VSCROLLER_NEVER = 0x00040000, /// Never show vertical scrollers HSCROLLING_ON = 0, /// Horizontal scrolling turned on (default) HSCROLLING_OFF = HSCROLLER_NEVER|HSCROLLER_ALWAYS, /// Horizontal scrolling turned off VSCROLLING_ON = 0, /// Vertical scrolling turned on (default) VSCROLLING_OFF = VSCROLLER_NEVER|VSCROLLER_ALWAYS, /// Vertical scrolling turned off SCROLLERS_TRACK = 0, /// Scrollers track continuously for smooth scrolling SCROLLERS_DONT_TRACK = 0x00080000 /// Scrollers don't track continuously }; class FXScrollBar; class FXScrollCorner; /** * The scroll area widget manages a content area and a viewport * area through which the content is viewed. When the content area * becomes larger than the viewport area, scrollbars are placed to * permit viewing of the entire content by scrolling the content. * Depending on the mode, scrollbars may be displayed on an as-needed * basis, always, or never. * Normally, the scroll area's size and the content's size are independent; * however, it is possible to disable scrolling in the horizontal * (vertical) direction. In this case, the content width (height) * will influence the width (height) of the scroll area widget. * For content which is time-consuming to repaint, continuous * scrolling may be turned off. */ class FXAPI FXScrollArea : public FXComposite { FXDECLARE(FXScrollArea) protected: FXScrollBar *horizontal; // Horizontal scroll bar FXScrollBar *vertical; // Vertical scroll bar FXScrollCorner *corner; // Scroll corner FXint viewport_w; // Viewport width FXint viewport_h; // Viewport height FXint pos_x; // X scroll position (pos_x<=0) FXint pos_y; // Y scroll position (pos_y<=0) protected: FXScrollArea(); FXbool startAutoScroll(FXEvent *event,FXbool onlywheninside=FALSE); void stopAutoScroll(); FXScrollArea(FXComposite* p,FXuint opts,FXint x,FXint y,FXint w,FXint h); virtual void moveContents(FXint x,FXint y); private: FXScrollArea(const FXScrollArea&); FXScrollArea &operator=(const FXScrollArea&); public: long onHMouseWheel(FXObject*,FXSelector,void*); long onVMouseWheel(FXObject*,FXSelector,void*); long onHScrollerChanged(FXObject*,FXSelector,void*); long onVScrollerChanged(FXObject*,FXSelector,void*); long onHScrollerDragged(FXObject*,FXSelector,void*); long onVScrollerDragged(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); public: /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Return viewport height virtual FXint getViewportHeight(); /// Return viewport width virtual FXint getViewportWidth(); /// Return content width virtual FXint getContentWidth(); /// Return content height virtual FXint getContentHeight(); /// Change scroll style void setScrollStyle(FXuint style); /// Return scroll style FXuint getScrollStyle() const; /// Return TRUE if horizontally scrollable FXbool isHorizontalScrollable() const; /// Return TRUE if vertically scrollable FXbool isVerticalScrollable() const; /// Return a pointer to the horizontal scrollbar FXScrollBar* horizontalScrollBar() const { return horizontal; } /// Return a pointer to the vertical scrollbar FXScrollBar* verticalScrollBar() const { return vertical; } /// Return the current x-position FXint getXPosition() const { return pos_x; } /// Return the current y-position FXint getYPosition() const { return pos_y; } /// Set the current position void setPosition(FXint x,FXint y); /// Get the current position void getPosition(FXint& x,FXint& y) const { x=pos_x; y=pos_y; } /// Destructor virtual ~FXScrollArea(); }; } #endif fox-1.6.49/include/FXCP1252Codec.h0000644000175000017500000000110611637250333013135 00000000000000#ifndef FXCP1252CODEC_H #define FXCP1252CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1252 Codec class FXAPI FXCP1252Codec : public FXTextCodec { FXDECLARE(FXCP1252Codec) public: FXCP1252Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1252Codec(){} }; } #endif fox-1.6.49/include/FXMessageBox.h0000664000175000017500000001446112130340076013423 00000000000000/******************************************************************************** * * * M e s s a g e B o x e s * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMessageBox.h,v 1.28 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMESSAGEBOX_H #define FXMESSAGEBOX_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { // Message box buttons enum { MBOX_OK = 0x10000000, /// Message box has a only an OK button MBOX_OK_CANCEL = 0x20000000, /// Message box has OK and CANCEL buttons MBOX_YES_NO = 0x30000000, /// Message box has YES and NO buttons MBOX_YES_NO_CANCEL = 0x40000000, /// Message box has YES, NO, and CANCEL buttons MBOX_QUIT_CANCEL = 0x50000000, /// Message box has QUIT and CANCEL buttons MBOX_QUIT_SAVE_CANCEL = 0x60000000, /// Message box has QUIT, SAVE, and CANCEL buttons MBOX_SKIP_SKIPALL_CANCEL = 0x70000000, /// Message box has SKIP, SKIP ALL, and CANCEL buttons MBOX_SAVE_CANCEL_DONTSAVE = 0x80000000 /// Message box has DON'T SAVE,CANCEL and SAVE buttons }; // Return values enum { MBOX_CLICKED_YES = 1, /// The YES button was clicked MBOX_CLICKED_NO = 2, /// The NO button was clicked MBOX_CLICKED_OK = 3, /// The OK button was clicked MBOX_CLICKED_CANCEL = 4, /// The CANCEL button was clicked MBOX_CLICKED_QUIT = 5, /// The QUIT button was clicked MBOX_CLICKED_SAVE = 6, /// The SAVE button was clicked MBOX_CLICKED_SKIP = 7, /// The SKIP button was clicked MBOX_CLICKED_SKIPALL = 8 /// The SKIP ALL button was clicked }; /** * A Message Box is a convenience class which provides a dialog for * very simple common yes/no type interactions with the user. * The message box has an optional icon, a title string, and the question * which is presented to the user. It also has up to three buttons which * furnish standard responses to the question. * Message boxes are usually ran modally: the question must be answered * before the program may continue. */ class FXAPI FXMessageBox : public FXDialogBox { FXDECLARE(FXMessageBox) protected: FXMessageBox(){} private: FXMessageBox(const FXMessageBox&); FXMessageBox &operator=(const FXMessageBox&); void initialize(const FXString& text,FXIcon* ic,FXuint whichbuttons); public: long onCmdClicked(FXObject*,FXSelector,void*); long onCmdCancel(FXObject*,FXSelector,void*); public: enum{ ID_CLICKED_YES=FXDialogBox::ID_LAST, ID_CLICKED_NO, ID_CLICKED_OK, ID_CLICKED_CANCEL, ID_CLICKED_QUIT, ID_CLICKED_SAVE, ID_CLICKED_SKIP, ID_CLICKED_SKIPALL, ID_LAST }; public: /// Construct message box with given caption, icon, and message text FXMessageBox(FXWindow* owner,const FXString& caption,const FXString& text,FXIcon* ic=NULL,FXuint opts=0,FXint x=0,FXint y=0); /// Construct free floating message box with given caption, icon, and message text FXMessageBox(FXApp* app,const FXString& caption,const FXString& text,FXIcon* ic=NULL,FXuint opts=0,FXint x=0,FXint y=0); /** * Show a modal error message. * The text message may contain printf-tyle formatting commands. */ static FXuint error(FXWindow* owner,FXuint opts,const char* caption,const char* message,...) FX_PRINTF(4,5) ; /** * Show modal error message, in free floating window. */ static FXuint error(FXApp* app,FXuint opts,const char* caption,const char* message,...) FX_PRINTF(4,5) ; /** * Show a modal warning message * The text message may contain printf-tyle formatting commands. */ static FXuint warning(FXWindow* owner,FXuint opts,const char* caption,const char* message,...) FX_PRINTF(4,5) ; /** * Show modal warning message, in free floating window. */ static FXuint warning(FXApp* app,FXuint opts,const char* caption,const char* message,...) FX_PRINTF(4,5) ; /** * Show a modal question dialog * The text message may contain printf-tyle formatting commands. */ static FXuint question(FXWindow* owner,FXuint opts,const char* caption,const char* message,...) FX_PRINTF(4,5) ; /** * Show modal question message, in free floating window. */ static FXuint question(FXApp* app,FXuint opts,const char* caption,const char* message,...) FX_PRINTF(4,5) ; /** * Show a modal information dialog * The text message may contain printf-tyle formatting commands. */ static FXuint information(FXWindow* owner,FXuint opts,const char* caption,const char* message,...) FX_PRINTF(4,5) ; /** * Show modal information message, in free floating window. */ static FXuint information(FXApp* app,FXuint opts,const char* caption,const char* message,...) FX_PRINTF(4,5) ; }; } #endif fox-1.6.49/include/FXRealSlider.h0000664000175000017500000002077712130340076013423 00000000000000/******************************************************************************** * * * R e a l S l i d e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRealSlider.h,v 1.11 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXREALSLIDER_H #define FXREALSLIDER_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Slider Control styles enum { REALSLIDER_HORIZONTAL = 0, /// Slider shown horizontally REALSLIDER_VERTICAL = 0x00008000, /// Slider shown vertically REALSLIDER_ARROW_UP = 0x00010000, /// Slider has arrow head pointing up REALSLIDER_ARROW_DOWN = 0x00020000, /// Slider has arrow head pointing down REALSLIDER_ARROW_LEFT = REALSLIDER_ARROW_UP, /// Slider has arrow head pointing left REALSLIDER_ARROW_RIGHT = REALSLIDER_ARROW_DOWN, /// Slider has arrow head pointing right REALSLIDER_INSIDE_BAR = 0x00040000, /// Slider is inside the slot rather than overhanging REALSLIDER_TICKS_TOP = 0x00080000, /// Ticks on the top of horizontal slider REALSLIDER_TICKS_BOTTOM = 0x00100000, /// Ticks on the bottom of horizontal slider REALSLIDER_TICKS_LEFT = REALSLIDER_TICKS_TOP, /// Ticks on the left of vertical slider REALSLIDER_TICKS_RIGHT = REALSLIDER_TICKS_BOTTOM, /// Ticks on the right of vertical slider REALSLIDER_NORMAL = REALSLIDER_HORIZONTAL }; /** * The real slider widget is a valuator widget which provides simple linear value range. * Two visual appearances are supported:- the sunken look, which is enabled with * the SLIDER_INSIDE_BAR option and the regular look. The latter may have optional * arrows on the slider thumb. * While being moved, the real slider sends a SEL_CHANGED message to its target; * at the end of the interaction, a SEL_COMMAND message is sent. * The message data represents the current slider value, of type pointer to FXdouble. */ class FXAPI FXRealSlider : public FXFrame { FXDECLARE(FXRealSlider) protected: FXdouble range[2]; // Reported data range FXdouble pos; // Reported data position FXdouble incr; // Increment when auto-sliding FXdouble delta; // Interval between ticks FXint headpos; // Head position FXint headsize; // Head size FXint slotsize; // Slot size FXColor slotColor; // Color of slot the head moves in FXint dragpoint; // Where on the head is grabbed FXString help; // Help string FXString tip; // Tip string protected: FXRealSlider(); void drawSliderHead(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawHorzTicks(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawVertTicks(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); private: FXRealSlider(const FXRealSlider&); FXRealSlider &operator=(const FXRealSlider&); public: long onPaint(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onAutoSlide(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetRealValue(FXObject*,FXSelector,void*); long onCmdGetRealValue(FXObject*,FXSelector,void*); long onCmdSetIntRange(FXObject*,FXSelector,void*); long onCmdGetIntRange(FXObject*,FXSelector,void*); long onCmdSetRealRange(FXObject*,FXSelector,void*); long onCmdGetRealRange(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: enum{ ID_AUTOSLIDE=FXFrame::ID_LAST, ID_LAST }; public: /// Construct a slider widget FXRealSlider(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=REALSLIDER_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Returns true because a slider can receive focus virtual bool canFocus() const; /// Perform layout virtual void layout(); /// Enable the slider virtual void enable(); /// Disable the slider virtual void disable(); /// Change slider value void setValue(FXdouble value,FXbool notify=FALSE); /// Return slider value FXdouble getValue() const { return pos; } /// Change the slider's range void setRange(FXdouble lo,FXdouble hi,FXbool notify=FALSE); /// Get the slider's current range void getRange(FXdouble& lo,FXdouble& hi) const { lo=range[0]; hi=range[1]; } /// Change the slider style FXuint getSliderStyle() const; /// Get the current slider style void setSliderStyle(FXuint style); /// Get the slider's head size FXint getHeadSize() const { return headsize; } /// Change the slider's head size void setHeadSize(FXint hs); /// Get the slider's current slot size FXint getSlotSize() const { return slotsize; } /// Change the slider's slot size void setSlotSize(FXint bs); /// Get the slider's auto-increment/decrement value FXdouble getIncrement() const { return incr; } /// Change the slider's auto-increment/decrement value void setIncrement(FXdouble inc); /// Change the delta between ticks void setTickDelta(FXdouble dist); /// Get delta between ticks FXdouble getTickDelta() const { return delta; } /// Change the color of the slot the slider head moves in void setSlotColor(FXColor clr); /// Get the current slot color FXColor getSlotColor() const { return slotColor; } /// Set the help text to be displayed on the status line void setHelpText(const FXString& text){ help=text; } /// Get the current help text const FXString& getHelpText() const { return help; } /// Set the tip text to be displayed in the tooltip void setTipText(const FXString& text){ tip=text; } /// Get the current tooltip text value const FXString& getTipText() const { return tip; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy the slider virtual ~FXRealSlider(); }; } #endif fox-1.6.49/include/FXRASImage.h0000664000175000017500000000625612130340076012761 00000000000000/******************************************************************************** * * * S U N R A S T E R I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRASImage.h,v 1.8 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXRASIMAGE_H #define FXRASIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// SUN Raster Image format class FXAPI FXRASImage : public FXImage { FXDECLARE(FXRASImage) protected: FXRASImage(){} private: FXRASImage(const FXRASImage&); FXRASImage &operator=(const FXRASImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct image from memory stream formatted in SUN Raster Image format FXRASImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in SUN Raster Image format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in SUN Raster Image format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXRASImage(); }; /** * Check if stream contains a RAS, return TRUE if so. */ extern FXAPI bool fxcheckRAS(FXStream& store); /** * Load an SUN Raster Image format file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadRAS(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an SUN Raster Image format file to a stream. */ extern FXAPI bool fxsaveRAS(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXMenuCheck.h0000664000175000017500000000773112130340076013232 00000000000000/******************************************************************************** * * * M e n u C h e c k W i d g e t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuCheck.h,v 1.13 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUCHECK_H #define FXMENUCHECK_H #ifndef FXMENUCOMMAND_H #include "FXMenuCommand.h" #endif namespace FX { /** * The menu check widget is used to change a state in the * application from a menu. Menu checks may reflect * the state of the application by graying out, becoming hidden, * or by a check mark. * When activated, a menu check sends a SEL_COMMAND to its target; * the void* argument of the message contains the new state. */ class FXAPI FXMenuCheck : public FXMenuCommand { FXDECLARE(FXMenuCheck) protected: FXuchar check; // State of menu FXColor boxColor; // Box color protected: FXMenuCheck(); private: FXMenuCheck(const FXMenuCheck&); FXMenuCheck &operator=(const FXMenuCheck&); public: long onPaint(FXObject*,FXSelector,void*); long onButtonPress(FXObject*,FXSelector,void*); long onButtonRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCheck(FXObject*,FXSelector,void*); long onUncheck(FXObject*,FXSelector,void*); long onUnknown(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdAccel(FXObject*,FXSelector,void*); public: /// Construct a menu check FXMenuCheck(FXComposite* p,const FXString& text,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set check state (TRUE, FALSE or MAYBE) void setCheck(FXbool s=TRUE); /// Get check state (TRUE, FALSE or MAYBE) FXbool getCheck() const { return check; } /// Get the box background color FXColor getBoxColor() const { return boxColor; } /// Set the box background color void setBoxColor(FXColor clr); /// Save menu to a stream virtual void save(FXStream& store) const; /// Load menu from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXObjectList.h0000664000175000017500000001246312130340076013430 00000000000000/******************************************************************************** * * * O b j e c t L i s t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXObjectList.h,v 1.31.2.1 2007/01/29 20:22:29 fox Exp $ * ********************************************************************************/ #ifndef FXOBJECTLIST_H #define FXOBJECTLIST_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { /// List of pointers to objects class FXAPI FXObjectList { protected: FXObject **ptr; public: /// Default constructor FXObjectList(); /// Copy constructor FXObjectList(const FXObjectList& orig); /// Construct and init with single object FXObjectList(FXObject* object); /// Construct and init with list of objects FXObjectList(FXObject** objects,FXint n); /// Assignment operator FXObjectList& operator=(const FXObjectList& orig); /// Return number of objects FXint no() const { return *((FXint*)(ptr-1)); } /// Set number of objects void no(FXint num); /// Indexing operator FXObject*& operator[](FXint i){ return ptr[i]; } FXObject* const& operator[](FXint i) const { return ptr[i]; } /// Indexing operator FXObject*& at(FXint i){ return ptr[i]; } FXObject* const& at(FXint i) const { return ptr[i]; } /// Access to content array FXObject** data() const { return ptr; } /// Assign object p to list FXObjectList& assign(FXObject* object); /// Assign n objects to list FXObjectList& assign(FXObject** objects,FXint n); /// Assign objects to list FXObjectList& assign(FXObjectList& objects); /// Insert object at certain position FXObjectList& insert(FXint pos,FXObject* object); /// Insert n objects at specified position FXObjectList& insert(FXint pos,FXObject** objects,FXint n); /// Insert objects at specified position FXObjectList& insert(FXint pos,FXObjectList& objects); /// Prepend object FXObjectList& prepend(FXObject* object); /// Prepend n objects FXObjectList& prepend(FXObject** objects,FXint n); /// Prepend objects FXObjectList& prepend(FXObjectList& objects); /// Append object FXObjectList& append(FXObject* object); /// Append n objects FXObjectList& append(FXObject** objects,FXint n); /// Append objects FXObjectList& append(FXObjectList& objects); /// Replace object at position by given object FXObjectList& replace(FXint pos,FXObject* object); /// Replaces the m objects at pos with n objects FXObjectList& replace(FXint pos,FXint m,FXObject** objects,FXint n); /// Replace the m objects at pos with objects FXObjectList& replace(FXint pos,FXint m,FXObjectList& objects); /// Remove object at pos FXObjectList& erase(FXint pos); /// Remove n objects at pos FXObjectList& erase(FXint pos,FXint n); /// Remove object FXObjectList& remove(const FXObject* object); /// Find object in list, searching forward; return position or -1 FXint find(const FXObject *object,FXint pos=0) const; /// Find object in list, searching backward; return position or -1 FXint rfind(const FXObject *object,FXint pos=2147483647) const; /// Remove all objects FXObjectList& clear(); /// Save to a stream void save(FXStream& store) const; /// Load from a stream void load(FXStream& store); /// Destructor virtual ~FXObjectList(); }; /// Specialize list to pointers to TYPE template class FXObjectListOf : public FXObjectList { public: FXObjectListOf(){} /// Indexing operator TYPE*& operator[](FXint i){ return (TYPE*&)ptr[i]; } TYPE *const& operator[](FXint i) const { return (TYPE*const&)ptr[i]; } /// Access to list TYPE*& at(FXint i){ return (TYPE*&)ptr[i]; } TYPE *const& at(FXint i) const { return (TYPE*const&)ptr[i]; } /// Access to content array TYPE** data() const { return (TYPE**)ptr; } }; } #endif fox-1.6.49/include/FXToolBarTab.h0000664000175000017500000001216512130340076013356 00000000000000/******************************************************************************** * * * T o o l B a r T a b W i d g e t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXToolBarTab.h,v 1.11 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTOOLBARTAB_H #define FXTOOLBARTAB_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /// Tool Bar Tab styles enum { TOOLBARTAB_HORIZONTAL = 0, /// Default is for horizontal toolbar TOOLBARTAB_VERTICAL = 0x00008000 /// For vertical toolbar }; /** * A toolbar tab is used to collapse or uncollapse a sibling * widget. The sibling affected is the widget immediately following * the toolbar tab or, if the toolbar tab is the last widget in the list, * the widget immediately preceding the toolbar tab. */ class FXAPI FXToolBarTab : public FXFrame { FXDECLARE(FXToolBarTab) protected: FXColor activeColor; // Color when active FXString tip; // Tooltip FXbool collapsed; // Is collapsed flat FXbool down; // Button down protected: FXToolBarTab(); void drawUpArrow(FXDCWindow& dc); void drawDownArrow(FXDCWindow& dc); void drawRightArrow(FXDCWindow& dc); void drawLeftArrow(FXDCWindow& dc); void drawHSpeckles(FXDCWindow& dc,FXint x,FXint w); void drawVSpeckles(FXDCWindow& dc,FXint y,FXint h); private: FXToolBarTab(const FXToolBarTab&); FXToolBarTab& operator=(const FXToolBarTab&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onCmdCollapse(FXObject*,FXSelector,void*); long onUpdCollapse(FXObject*,FXSelector,void*); long onCmdUncollapse(FXObject*,FXSelector,void*); long onUpdUncollapse(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: enum { ID_COLLAPSE=FXFrame::ID_LAST, ID_UNCOLLAPSE, ID_LAST }; public: /// Construct toolbar tab FXToolBarTab(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_RAISED,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Toolbar tab can receive focus virtual bool canFocus() const; /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Enable the toolbar tab virtual void enable(); /// Disable the toolbar tab virtual void disable(); /// Collapse or uncollapse the toolbar void collapse(FXbool fold,FXbool notify=FALSE); /// Return true if the toolbar is collapsed FXbool isCollapsed() const { return collapsed; } /// Change the tab style void setTabStyle(FXuint style); /// Get current tab style FXuint getTabStyle() const; /// Get the active color FXColor getActiveColor() const { return activeColor; } /// Set the active color void setActiveColor(FXColor clr); /// Set the tool tip message for the toolbar tab void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for the toolbar tab const FXString& getTipText() const { return tip; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXRanged.h0000664000175000017500000001351512130340076012565 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n R a n g e C l a s s * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRanged.h,v 1.17 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXRANGED_H #define FXRANGED_H namespace FX { class FXSphered; /// Bounds class FXAPI FXRanged { public: FXVec3d lower; FXVec3d upper; public: /// Default constructor FXRanged(){} /// Initialize from another range FXRanged(const FXRanged& bounds):lower(bounds.lower),upper(bounds.upper){} /// Initialize from two vectors FXRanged(const FXVec3d& lo,const FXVec3d& hi):lower(lo),upper(hi){} /// Initialize from six numbers FXRanged(FXdouble xlo,FXdouble xhi,FXdouble ylo,FXdouble yhi,FXdouble zlo,FXdouble zhi):lower(xlo,ylo,zlo),upper(xhi,yhi,zhi){} /// Initialize box to fully contain the given bounding sphere FXRanged(const FXSphered& sphere); /// Assignment FXRanged& operator=(const FXRanged& bounds){ lower=bounds.lower; upper=bounds.upper; return *this; } /// Set value from another range FXRanged& set(const FXRanged& bounds){ lower=bounds.lower; upper=bounds.upper; return *this; } /// Set value from two vectors FXRanged& set(const FXVec3d& lo,const FXVec3d& hi){ lower=lo; upper=hi; return *this; } /// Set value from six numbers FXRanged& set(FXdouble xlo,FXdouble xhi,FXdouble ylo,FXdouble yhi,FXdouble zlo,FXdouble zhi){ lower.set(xlo,ylo,zlo); upper.set(xhi,yhi,zhi); return *this; } /// Indexing with 0..1 FXVec3d& operator[](FXint i){ return (&lower)[i]; } /// Indexing with 0..1 const FXVec3d& operator[](FXint i) const { return (&lower)[i]; } /// Comparison bool operator==(const FXRanged& r) const { return lower==r.lower && upper==r.upper; } bool operator!=(const FXRanged& r) const { return lower!=r.lower || upper!=r.upper; } /// Width of box FXdouble width() const { return upper.x-lower.x; } /// Height of box FXdouble height() const { return upper.y-lower.y; } /// Depth of box FXdouble depth() const { return upper.z-lower.z; } /// Longest side FXdouble longest() const; /// shortest side FXdouble shortest() const; /// Length of diagonal FXdouble diameter() const; /// Get radius of box FXdouble radius() const; /// Compute diagonal FXVec3d diagonal() const; /// Get center of box FXVec3d center() const; /// Test if empty bool empty() const; /// Test if box contains point x,y,z bool contains(FXdouble x,FXdouble y,FXdouble z) const; /// Test if box contains point p bool contains(const FXVec3d& p) const; /// Test if box properly contains another box bool contains(const FXRanged& bounds) const; /// Test if box properly contains sphere bool contains(const FXSphered& sphere) const; /// Include point FXRanged& include(FXdouble x,FXdouble y,FXdouble z); /// Include point FXRanged& include(const FXVec3d& v); /// Include given range into box FXRanged& include(const FXRanged& box); /// Include given sphere into this box FXRanged& include(const FXSphered& sphere); /// Intersect box with normalized plane ax+by+cz+w; returns -1,0,+1 FXint intersect(const FXVec4d &plane) const; /// Intersect box with ray u-v bool intersect(const FXVec3d& u,const FXVec3d& v); /// Test if bounds overlap friend FXAPI bool overlap(const FXRanged& a,const FXRanged& b); /// Get corner number 0..7 FXVec3d corner(FXint c) const { return FXVec3d((&lower)[c&1].x, (&lower)[(c>>1)&1].y, (&lower)[c>>2].z); } /// Union of two boxes friend FXAPI FXRanged unite(const FXRanged& a,const FXRanged& b); /// Intersection of two boxes friend FXAPI FXRanged intersect(const FXRanged& a,const FXRanged& b); /// Save object to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXRanged& bounds); /// Load object from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXRanged& bounds); }; extern FXAPI bool overlap(const FXRanged& a,const FXRanged& b); extern FXAPI FXRanged unite(const FXRanged& a,const FXRanged& b); extern FXAPI FXRanged intersect(const FXRanged& a,const FXRanged& b); extern FXAPI FXStream& operator<<(FXStream& store,const FXRanged& bounds); extern FXAPI FXStream& operator>>(FXStream& store,FXRanged& bounds); } #endif fox-1.6.49/include/FXProgressDialog.h0000664000175000017500000001053012130340076014303 00000000000000/******************************************************************************** * * * P r o g r e s s D i a l o g B o x * * * ********************************************************************************* * Copyright (C) 2001,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXProgressDialog.h,v 1.14 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXPROGRESSDIALOG_H #define FXPROGRESSDIALOG_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { enum { PROGRESSDIALOG_NOCANCEL = 0, /// Default is no cancel button PROGRESSDIALOG_CANCEL = 0x01000000, /// Enable the cancel button PROGRESSDIALOG_NORMAL = (DECOR_TITLE|DECOR_BORDER) }; class FXHorizontalSeparator; class FXProgressBar; class FXButton; class FXLabel; /** * A Progress Dialog is a simple dialog which is used to * keep a user informed of the progress of a lengthy operation * in a program and that the program is in fact still working. */ class FXAPI FXProgressDialog : public FXDialogBox { FXDECLARE(FXProgressDialog) protected: FXProgressBar *progress; // Progress bar FXLabel *message; // Message FXHorizontalSeparator *separator; // Separator FXButton *cancel; // Cancel button FXbool cancelled; // User hit cancel protected: FXProgressDialog(); private: FXProgressDialog(const FXProgressDialog&); FXProgressDialog &operator=(const FXProgressDialog&); public: long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdCancel(FXObject*,FXSelector,void*); public: /// Construct input dialog box with given caption, icon, and prompt text FXProgressDialog(FXWindow* owner,const FXString& caption,const FXString& label,FXuint opts=PROGRESSDIALOG_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Change the progress message void setMessage(const FXString& msg); /// Get progress message FXString getMessage() const; /// Change style of the progress bar widget void setBarStyle(FXuint style); /// Get style of the progress bar widget FXuint getBarStyle() const; /// Change the amount of progress void setProgress(FXuint value); /// Get current progress FXuint getProgress() const; /// Set total amount of progress void setTotal(FXuint value); /// Return total amount of progrss FXuint getTotal() const; /// Increment progress by given amount void increment(FXuint value); /// Has operation been cancelled? FXbool isCancelled() const { return cancelled; } /// Change cancelled flag void setCancelled(FXbool flg){ cancelled=flg; } /// Destroy virtual ~FXProgressDialog(); }; } #endif fox-1.6.49/include/FXIconSource.h0000664000175000017500000001577412130340076013447 00000000000000/******************************************************************************** * * * I c o n S o u r c e * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXIconSource.h,v 1.13 2006/02/03 00:44:32 fox Exp $ * ********************************************************************************/ #ifndef FXICONSOURCE_H #define FXICONSOURCE_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { class FXApp; class FXIcon; class FXImage; /** * An icon source is a class that loads an icon of any type. * It exists purely for convenience, to make loading icons * simpler by concentrating the knowledge of the supported * icon formats in a single place. * Needless to say, this class is subclassable, allowing users * to add additional icon types and make them available to * all widgets which deal with icons. * Note, the icons are loaded, but NOT created (realized) yet; * this allows users to manipulate the pixel data prior to * realizing the icons. */ class FXAPI FXIconSource : public FXObject { FXDECLARE(FXIconSource) protected: FXApp *app; protected: FXIconSource():app(NULL){} private: FXIconSource(const FXIconSource&); FXIconSource &operator=(const FXIconSource&); FXImage *scaleToSize(FXImage *image,FXint size,FXint qual) const; public: /// Construct an icon source FXIconSource(FXApp* a); /** * Load an icon from the file filename. By default, the file extension is * stripped and used as the icon type; if an explicit icon type is forced, * then that type is used and the extension is ignored. * For example, loadIcon("icon","gif") will try to load a CompuServe GIF * file, since the filename does not give any clue as to the type of the * icon. */ virtual FXIcon *loadIconFile(const FXString& filename,const FXString& type=FXString::null) const; /** * Load an icon of a given type (e.g. "gif") from reswrapped data. * Returns NULL if there's some error loading the icon. [The optional * parameter is actually mandatory at the time of this writing; future * versions will attempt to inspect the first few bytes of the stream * to divine the icon format if the parameter is omitted]. */ virtual FXIcon *loadIconData(const void *pixels,const FXString& type=FXString::null) const; /** * Load an icon of a given type (e.g. "gif") from an already open stream. * Returns NULL if there's some error loading the icon. [The optional * parameter is actually mandatory at the time of this writing; future * versions will attempt to inspect the first few bytes of the stream * to divine the icon format if the parameter is omitted]. */ virtual FXIcon *loadIconStream(FXStream& store,const FXString& type=FXString::null) const; /** * Load an image from the file filename. By default, the file extension is * stripped and used as the image type; if an explicit image type is forced, * then that type is used and the extension is ignored. * For example, loadImage("image","gif") will try to load a CompuServe GIF * file, since the filename does not give any clue as to the type of the * image. */ virtual FXImage *loadImageFile(const FXString& filename,const FXString& type=FXString::null) const; /** * Load an image of a given type (e.g. "gif") from reswrapped data. * Returns NULL if there's some error loading the icon. [The optional * parameter is actually mandatory at the time of this writing; future * versions will attempt to inspect the first few bytes of the stream * to divine the icon format if the parameter is omitted]. */ virtual FXImage *loadImageData(const void *pixels,const FXString& type=FXString::null) const; /** * Load an image of a given type (e.g. "gif") from an already open stream. * Returns NULL if there's some error loading the image. [The optional * parameter is actually mandatory at the time of this writing; future * versions will attempt to inspect the first few bytes of the stream * to divine the image format if the parameter is omitted]. */ virtual FXImage *loadImageStream(FXStream& store,const FXString& type=FXString::null) const; /// Load icon and scale it such that its dimensions does not exceed given size virtual FXIcon *loadScaledIconFile(const FXString& filename,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const; /// Load icon and scale it such that its dimensions does not exceed given size virtual FXIcon *loadScaledIconData(const void *pixels,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const; /// Load icon and scale it such that its dimensions does not exceed given size virtual FXIcon *loadScaledIconStream(FXStream& store,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const; /// Load image and scale it such that its dimensions does not exceed given size virtual FXImage *loadScaledImageFile(const FXString& filename,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const; /// Load image and scale it such that its dimensions does not exceed given size virtual FXImage *loadScaledImageData(const void *pixels,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const; /// Load image and scale it such that its dimensions does not exceed given size virtual FXImage *loadScaledImageStream(FXStream& store,FXint size=32,FXint qual=0,const FXString& type=FXString::null) const; /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy virtual ~FXIconSource(); }; } #endif fox-1.6.49/include/FXGLCone.h0000664000175000017500000000567312130340076012502 00000000000000/******************************************************************************** * * * O p e n G L C o n e O b j e c t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLCone.h,v 1.17 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXGLCONE_H #define FXGLCONE_H #ifndef FXGLSHAPE_H #include "FXGLShape.h" #endif namespace FX { /// OpenGL Cone Object class FXAPI FXGLCone : public FXGLShape { FXDECLARE(FXGLCone) public: FXfloat height; FXfloat radius; protected: FXGLCone(); virtual void drawshape(FXGLViewer* viewer); public: /// Construct with specified origin, height and radius FXGLCone(FXfloat x,FXfloat y,FXfloat z,FXfloat h=1.0f,FXfloat r=1.0f); /// Construct with specified origin, height, radius and material FXGLCone(FXfloat x,FXfloat y,FXfloat z,FXfloat h,FXfloat r,const FXMaterial& mtl); /// Copy constructor FXGLCone(const FXGLCone& orig); /// Copy this object virtual FXGLObject* copy(); /// Change radius void setRadius(FXfloat r){ radius=r; } FXfloat getRadius() const { return radius; } /// Change height void setHeight(FXfloat h){ height=h; } FXfloat getHeight() const { return height; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destroy virtual ~FXGLCone(); }; } #endif fox-1.6.49/include/FXBMPImage.h0000664000175000017500000000703212130340076012743 00000000000000/******************************************************************************** * * * B M P I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXBMPImage.h,v 1.22 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXBMPIMAGE_H #define FXBMPIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /** * The BMP Image class is a convenience class for working with images in the * Microsoft Bitmap (.bmp) graphics file format. This makes it possible to * use resources created with Windows development tools inside FOX without * need for graphics file format translators. The bitmap loaded handles * 1, 4, and 8 bit paletted bitmaps, 16 and 24 bit RGB bitmaps, and * 32 bit RGBA bitmaps. */ class FXAPI FXBMPImage : public FXImage { FXDECLARE(FXBMPImage) protected: FXBMPImage(){} private: FXBMPImage(const FXBMPImage&); FXBMPImage &operator=(const FXBMPImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct image from memory stream formatted in Microsoft BMP format FXBMPImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in Microsoft bitmap format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in Microsoft bitmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXBMPImage(); }; /** * Check if stream contains a bitmap, return TRUE if so. */ extern FXAPI bool fxcheckBMP(FXStream& store); /** * Load an BMP (Microsoft Bitmap) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadBMP(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an BMP (Microsoft Bitmap) file to a stream. */ extern FXAPI bool fxsaveBMP(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXDialogBox.h0000664000175000017500000000656712130340076013246 00000000000000/******************************************************************************** * * * D i a l o g B o x * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDialogBox.h,v 1.23 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDIALOGBOX_H #define FXDIALOGBOX_H #ifndef FXTOPWINDOW_H #include "FXTopWindow.h" #endif namespace FX { /** * DialogBox window. * When receiving ID_CANCEL or ID_ACCEPT, the DialogBox breaks out of the * modal loop and returns FALSE or TRUE, respectively. * To close the DialogBox when not running modally, simply send it ID_HIDE. */ class FXAPI FXDialogBox : public FXTopWindow { FXDECLARE(FXDialogBox) protected: FXDialogBox(){} private: FXDialogBox(const FXDialogBox&); FXDialogBox &operator=(const FXDialogBox&); public: long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onCmdAccept(FXObject*,FXSelector,void*); long onCmdCancel(FXObject*,FXSelector,void*); public: enum { ID_CANCEL=FXTopWindow::ID_LAST, /// Closes the dialog, cancel the entry ID_ACCEPT, /// Closes the dialog, accept the entry ID_LAST }; public: /// Construct free-floating dialog FXDialogBox(FXApp* a,const FXString& name,FXuint opts=DECOR_TITLE|DECOR_BORDER,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=10,FXint pr=10,FXint pt=10,FXint pb=10,FXint hs=4,FXint vs=4); /// Construct dialog which will always float over the owner window FXDialogBox(FXWindow* owner,const FXString& name,FXuint opts=DECOR_TITLE|DECOR_BORDER,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=10,FXint pr=10,FXint pt=10,FXint pb=10,FXint hs=4,FXint vs=4); /// Run modal invocation of the dialog virtual FXuint execute(FXuint placement=PLACEMENT_CURSOR); }; } #endif fox-1.6.49/include/FXVec4d.h0000664000175000017500000002323512130340076012332 00000000000000/******************************************************************************** * * * D o u b l e - P r e c i s i o n 4 - E l e m e n t V e c t o r * * * ********************************************************************************* * Copyright (C) 1994,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXVec4d.h,v 1.27 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXVEC4D_H #define FXVEC4D_H namespace FX { class FXMat4d; /// Double-precision 4-element vector class FXAPI FXVec4d { public: FXdouble x; FXdouble y; FXdouble z; FXdouble w; public: /// Default constructor FXVec4d(){} /// Initialize from another vector FXVec4d(const FXVec4d& v){x=v.x;y=v.y;z=v.z;w=v.w;} /// Construct with 3-vector and optional scalar FXVec4d(const FXVec3d& v,FXdouble ww=1.0){x=v.x;y=v.y;z=v.z;w=ww;} /// Initialize from array of doubles FXVec4d(const FXdouble v[]){x=v[0];y=v[1];z=v[2];w=v[3];} /// Initialize with components FXVec4d(FXdouble xx,FXdouble yy,FXdouble zz,FXdouble ww=1.0){x=xx;y=yy;z=zz;w=ww;} /// Initialize with color FXVec4d(FXColor color); /// Return a non-const reference to the ith element FXdouble& operator[](FXint i){return (&x)[i];} /// Return a const reference to the ith element const FXdouble& operator[](FXint i) const {return (&x)[i];} /// Assign color FXVec4d& operator=(FXColor color); /// Assignment FXVec4d& operator=(const FXVec3d& v){x=v.x;y=v.y;z=v.z;w=1.0;return *this;} FXVec4d& operator=(const FXVec4d& v){x=v.x;y=v.y;z=v.z;w=v.w;return *this;} /// Assignment from array of doubles FXVec4d& operator=(const FXdouble v[]){x=v[0];y=v[1];z=v[2];w=v[3];return *this;} /// Set value from another vector FXVec4d& set(const FXVec4d& v){x=v.x;y=v.y;z=v.z;w=v.w;return *this;} /// Set value from array of floats FXVec4d& set(const FXdouble v[]){x=v[0];y=v[1];z=v[2];w=v[3];return *this;} /// Set value from components FXVec4d& set(FXdouble xx,FXdouble yy,FXdouble zz,FXdouble ww){x=xx;y=yy;z=zz;w=ww;return *this;} /// Assigning operators FXVec4d& operator*=(FXdouble n){x*=n;y*=n;z*=n;w*=n;return *this;} FXVec4d& operator/=(FXdouble n){x/=n;y/=n;z/=n;w/=n;return *this;} FXVec4d& operator+=(const FXVec4d& v){x+=v.x;y+=v.y;z+=v.z;w+=v.w;return *this;} FXVec4d& operator-=(const FXVec4d& v){x-=v.x;y-=v.y;z-=v.z;w-=v.w;return *this;} /// Conversion operator FXdouble*(){return &x;} operator const FXdouble*() const {return &x;} operator FXVec3d&(){return *reinterpret_cast(this);} operator const FXVec3d&() const {return *reinterpret_cast(this);} /// Convert to color operator FXColor() const; /// Unary FXVec4d operator+() const { return *this; } FXVec4d operator-() const { return FXVec4d(-x,-y,-z,-w); } /// Vector and vector FXVec4d operator+(const FXVec4d& v) const { return FXVec4d(x+v.x,y+v.y,z+v.z,w+v.w); } FXVec4d operator-(const FXVec4d& v) const { return FXVec4d(x-v.x,y-v.y,z-v.z,w-v.w); } /// Vector and matrix FXVec4d operator*(const FXMat4d& m) const; /// Scaling friend inline FXVec4d operator*(const FXVec4d& a,FXdouble n); friend inline FXVec4d operator*(FXdouble n,const FXVec4d& a); friend inline FXVec4d operator/(const FXVec4d& a,FXdouble n); friend inline FXVec4d operator/(FXdouble n,const FXVec4d& a); /// Dot product FXdouble operator*(const FXVec4d& v) const { return x*v.x+y*v.y+z*v.z+w*v.w; } /// Test if zero bool operator!() const {return x==0.0 && y==0.0 && z==0.0 && w==0.0; } /// Equality tests bool operator==(const FXVec4d& v) const { return x==v.x && y==v.y && z==v.z && w==v.w; } bool operator!=(const FXVec4d& v) const { return x!=v.x || y!=v.y || z!=v.z || w!=v.w; } friend inline bool operator==(const FXVec4d& a,FXdouble n); friend inline bool operator!=(const FXVec4d& a,FXdouble n); friend inline bool operator==(FXdouble n,const FXVec4d& a); friend inline bool operator!=(FXdouble n,const FXVec4d& a); /// Inequality tests bool operator<(const FXVec4d& v) const { return x(const FXVec4d& v) const { return x>v.x && y>v.y && z>v.z && w>v.w; } bool operator>=(const FXVec4d& v) const { return x>=v.x && y>=v.y && z>=v.z && w>=v.w; } friend inline bool operator<(const FXVec4d& a,FXdouble n); friend inline bool operator<=(const FXVec4d& a,FXdouble n); friend inline bool operator>(const FXVec4d& a,FXdouble n); friend inline bool operator>=(const FXVec4d& a,FXdouble n); friend inline bool operator<(FXdouble n,const FXVec4d& a); friend inline bool operator<=(FXdouble n,const FXVec4d& a); friend inline bool operator>(FXdouble n,const FXVec4d& a); friend inline bool operator>=(FXdouble n,const FXVec4d& a); /// Length and square of length FXdouble length2() const { return x*x+y*y+z*z+w*w; } FXdouble length() const { return sqrt(length2()); } /// Clamp values of vector between limits FXVec4d& clamp(FXdouble lo,FXdouble hi){x=FXCLAMP(lo,x,hi);y=FXCLAMP(lo,y,hi);z=FXCLAMP(lo,z,hi);w=FXCLAMP(lo,w,hi);return *this;} /// Lowest or highest components friend inline FXVec4d lo(const FXVec4d& a,const FXVec4d& b); friend inline FXVec4d hi(const FXVec4d& a,const FXVec4d& b); /// Compute normalized plane equation ax+by+cz+d=0 friend FXAPI FXVec4d plane(const FXVec4d& vec); friend FXAPI FXVec4d plane(const FXVec3d& vec,FXdouble dist); friend FXAPI FXVec4d plane(const FXVec3d& vec,const FXVec3d& p); friend FXAPI FXVec4d plane(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c); /// Signed distance normalized plane and point FXdouble distance(const FXVec3d& p) const; /// Return true if edge a-b crosses plane bool crosses(const FXVec3d& a,const FXVec3d& b) const; /// Normalize vector friend FXAPI FXVec4d normalize(const FXVec4d& v); /// Save to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXVec4d& v); /// Load from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXVec4d& v); }; inline FXVec4d operator*(const FXVec4d& a,FXdouble n){return FXVec4d(a.x*n,a.y*n,a.z*n,a.w*n);} inline FXVec4d operator*(FXdouble n,const FXVec4d& a){return FXVec4d(n*a.x,n*a.y,n*a.z,n*a.w);} inline FXVec4d operator/(const FXVec4d& a,FXdouble n){return FXVec4d(a.x/n,a.y/n,a.z/n,a.w/n);} inline FXVec4d operator/(FXdouble n,const FXVec4d& a){return FXVec4d(n/a.x,n/a.y,n/a.z,n/a.w);} inline bool operator==(const FXVec4d& a,FXdouble n){return a.x==n && a.y==n && a.z==n && a.w==n;} inline bool operator!=(const FXVec4d& a,FXdouble n){return a.x!=n || a.y!=n || a.z!=n || a.w!=n;} inline bool operator==(FXdouble n,const FXVec4d& a){return n==a.x && n==a.y && n==a.z && n==a.w;} inline bool operator!=(FXdouble n,const FXVec4d& a){return n!=a.x || n!=a.y || n!=a.z || n!=a.w;} inline bool operator<(const FXVec4d& a,FXdouble n){return a.x(const FXVec4d& a,FXdouble n){return a.x>n && a.y>n && a.z>n && a.w>n;} inline bool operator>=(const FXVec4d& a,FXdouble n){return a.x>=n && a.y>=n && a.z>=n && a.w>=n;} inline bool operator<(FXdouble n,const FXVec4d& a){return n(FXdouble n,const FXVec4d& a){return n>a.x && n>a.y && n>a.z && n>a.w;} inline bool operator>=(FXdouble n,const FXVec4d& a){return n>=a.x && n>=a.y && n>=a.z && n>=a.w;} inline FXVec4d lo(const FXVec4d& a,const FXVec4d& b){return FXVec4d(FXMIN(a.x,b.x),FXMIN(a.y,b.y),FXMIN(a.z,b.z),FXMIN(a.w,b.w));} inline FXVec4d hi(const FXVec4d& a,const FXVec4d& b){return FXVec4d(FXMAX(a.x,b.x),FXMAX(a.y,b.y),FXMAX(a.z,b.z),FXMAX(a.w,b.w));} extern FXAPI FXVec4d plane(const FXVec4d& vec); extern FXAPI FXVec4d plane(const FXVec3d& vec,FXdouble dist); extern FXAPI FXVec4d plane(const FXVec3d& vec,const FXVec3d& p); extern FXAPI FXVec4d plane(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c); extern FXAPI FXVec4d normalize(const FXVec4d& v); extern FXAPI FXStream& operator<<(FXStream& store,const FXVec4d& v); extern FXAPI FXStream& operator>>(FXStream& store,FXVec4d& v); } #endif fox-1.6.49/include/FXUTF32Codec.h0000664000175000017500000000715112130340076013125 00000000000000/******************************************************************************** * * * U T F - 3 2 T e x t C o d e c * * * ********************************************************************************* * Copyright (C) 2002,2006 by L.Johnson & J.van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXUTF32Codec.h,v 1.10 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXUTF32CODEC_H #define FXUTF32CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// Codec for UTF-32BE class FXAPI FXUTF32BECodec : public FXTextCodec { FXDECLARE(FXUTF32BECodec) public: FXUTF32BECodec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual FXint mibEnum() const; virtual const FXchar* const* aliases() const; virtual ~FXUTF32BECodec(){} }; /// Codec for UTF-32LE class FXAPI FXUTF32LECodec : public FXTextCodec { FXDECLARE(FXUTF32LECodec) public: FXUTF32LECodec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual FXint mibEnum() const; virtual const FXchar* const* aliases() const; virtual ~FXUTF32LECodec(){} }; /// Codec for UTF-32 class FXAPI FXUTF32Codec : public FXTextCodec { FXDECLARE(FXUTF32Codec) public: FXUTF32Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint mb2utflen(const FXchar* src,FXint nsrc) const; virtual FXint mb2utf(FXchar* dst,FXint ndst,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint utf2mblen(const FXchar* src,FXint nsrc) const; virtual FXint utf2mb(FXchar* dst,FXint ndst,const FXchar* src,FXint nsrc) const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual FXint mibEnum() const; virtual const FXchar* const* aliases() const; virtual ~FXUTF32Codec(){} }; } #endif fox-1.6.49/include/FXExpression.h0000664000175000017500000000722612130340076013526 00000000000000/******************************************************************************** * * * E x p r e s s i o n E v a l u a t o r * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXExpression.h,v 1.13 2006/03/21 01:41:43 fox Exp $ * ********************************************************************************/ #ifndef FXEXPRESSION_H #define FXEXPRESSION_H namespace FX { /// Expression error codes enum FXExpressionError { EXPRERR_OK, EXPRERR_EMPTY, /// Empty input EXPRERR_MEMORY, /// Out of memory EXPRERR_PAREN, /// Unmatched parentheses EXPRERR_TOKEN, /// Illegal token EXPRERR_COMMA, /// Expected comma EXPRERR_IDENT /// Unknown identifier }; /// Expression class FXAPI FXExpression { private: FXuchar *code; private: static const FXuchar initial[]; static const FXchar *const errors[]; public: /// Construct empty expression object FXExpression(); /// Copy expression object FXExpression(const FXExpression& orig); /// Compile expression; if error is not NULL, error code is returned FXExpression(const FXchar* expression,const FXchar* variables=NULL,FXExpressionError* error=NULL); /// Compile expression; if error is not NULL, error code is returned FXExpression(const FXString& expression,const FXString& variables=FXString::null,FXExpressionError* error=NULL); /// Assign another expression to this one FXExpression& operator=(const FXExpression& orig); /// See if expression is empty bool empty() const { return (code==initial); } /// Evaluate expression with given arguments, if any FXdouble evaluate(const FXdouble *args=NULL); /// Parse expression, return error code if syntax error is found FXExpressionError parse(const FXchar* expression,const FXchar* variables=NULL); /// Parse expression, return error code if syntax error is found FXExpressionError parse(const FXString& expression,const FXString& variables=FXString::null); /// Returns error code for given error static const FXchar* getError(FXExpressionError err){ return errors[err]; } /// Delete ~FXExpression(); }; } #endif fox-1.6.49/include/FXMenuTitle.h0000664000175000017500000001004612130340076013267 00000000000000/******************************************************************************** * * * M e n u T i t l e W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuTitle.h,v 1.22 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUTITLE_H #define FXMENUTITLE_H #ifndef FXMENUCAPTION_H #include "FXMenuCaption.h" #endif namespace FX { class FXPopup; /** * A menu title is a child of a menu bar which is responsible * for popping up a pulldown menu. */ class FXAPI FXMenuTitle : public FXMenuCaption { FXDECLARE(FXMenuTitle) protected: FXPopup *pane; // Pane to pop up protected: FXMenuTitle(){} private: FXMenuTitle(const FXMenuTitle&); FXMenuTitle &operator=(const FXMenuTitle&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onCmdPost(FXObject*,FXSelector,void*); long onCmdUnpost(FXObject*,FXSelector,void*); public: /// Constructor FXMenuTitle(FXComposite* p,const FXString& text,FXIcon* ic=NULL,FXPopup* pup=NULL,FXuint opts=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Yes it can receive the focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Set popup menu to pop up void setMenu(FXPopup *menu); /// Return popup menu FXPopup* getMenu() const { return pane; } /// True if this menu or is popup logically contains the mouse virtual bool contains(FXint parentx,FXint parenty) const; /// Save menu to a stream virtual void save(FXStream& store) const; /// Load menu from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXMenuTitle(); }; } #endif fox-1.6.49/include/FXGLVisual.h0000664000175000017500000001343712130340076013056 00000000000000/******************************************************************************** * * * V i s u a l C l a s s * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLVisual.h,v 1.24 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXGLVISUAL_H #define FXGLVISUAL_H #ifndef FXVISUAL_H #include "FXVisual.h" #endif namespace FX { class FXFont; class FXWindow; class FXImage; class FXIcon; class FXBitmap; class FXDCWindow; class FXGLCanvas; /// Visual describes pixel format of a drawable class FXAPI FXGLVisual : public FXVisual { FXDECLARE(FXGLVisual) friend class FXWindow; friend class FXImage; friend class FXIcon; friend class FXBitmap; friend class FXDCWindow; friend class FXGLCanvas; protected: FXint redSize; // Desired #bits for red FXint greenSize; // Desired #bits for green FXint blueSize; // Desired #bits for blue FXint alphaSize; // Desired #bits for alpha FXint depthSize; // Desired #bits for Z FXint stencilSize; // Desired #bits for stencil FXint accumRedSize; // Desired #bits for accum red FXint accumGreenSize; // Desired #bits for accum green FXint accumBlueSize; // Desired #bits for accum blue FXint accumAlphaSize; // Desired #bits for accum alpha protected: FXGLVisual(); private: FXGLVisual(const FXGLVisual&); FXGLVisual &operator=(const FXGLVisual&); public: /// Construct default visual FXGLVisual(FXApp* a,FXuint flags); /** * Test if OpenGL is possible, and what level is supported. * Because of remote display capability, the display server may * support a different level of OpenGL than the client; it may * even support no OpenGL at all! This function returns the lesser * of the client support level and the display server support level. */ static FXbool supported(FXApp* application,int& major,int& minor); /// Create visual virtual void create(); /// Detach visual virtual void detach(); /// Destroy visual virtual void destroy(); /// Get sizes for bit-planes FXint getRedSize() const { return redSize; } FXint getGreenSize() const { return greenSize; } FXint getBlueSize() const { return blueSize; } FXint getAlphaSize() const { return alphaSize; } FXint getDepthSize() const { return depthSize; } FXint getStencilSize() const { return stencilSize; } FXint getAccumRedSize() const { return accumRedSize; } FXint getAccumGreenSize() const { return accumGreenSize; } FXint getAccumBlueSize() const { return accumBlueSize; } FXint getAccumAlphaSize() const { return accumAlphaSize; } /// Set sizes for bit-planes void setRedSize(FXint rs){ redSize=rs; } void setGreenSize(FXint gs){ greenSize=gs; } void setBlueSize(FXint bs){ blueSize=bs; } void setAlphaSize(FXint as){ alphaSize=as; } void setDepthSize(FXint ds){ depthSize=ds; } void setStencilSize(FXint ss){ stencilSize=ss; } void setAccumRedSize(FXint rs){ accumRedSize=rs; } void setAccumGreenSize(FXint gs){ accumGreenSize=gs; } void setAccumBlueSize(FXint bs){ accumBlueSize=bs; } void setAccumAlphaSize(FXint as){ accumAlphaSize=as; } /// Get ACTUAL sizes for bit-planes FXint getActualRedSize() const; FXint getActualGreenSize() const; FXint getActualBlueSize() const; FXint getActualAlphaSize() const; FXint getActualDepthSize() const; FXint getActualStencilSize() const; FXint getActualAccumRedSize() const; FXint getActualAccumGreenSize() const; FXint getActualAccumBlueSize() const; FXint getActualAccumAlphaSize() const; /// Is it double buffered? FXbool isDoubleBuffer() const; /// Is it stereo? FXbool isStereo() const; /// Is it hardware-accelerated? FXbool isAccelerated() const; /// Does it swap by copying instead of flipping buffers FXbool isBufferSwapCopy() const; /// Save visual info to a stream virtual void save(FXStream& store) const; /// Load visual info to a stream virtual void load(FXStream& store); /// Destructor virtual ~FXGLVisual(); }; /// Create a display list of bitmaps from font glyphs in a font extern FXAPI void glUseFXFont(FXFont* font,int first,int count,int list); } #endif fox-1.6.49/include/FXGLCube.h0000664000175000017500000000612312130340076012463 00000000000000/******************************************************************************** * * * O p e n G L C u b e O b j e c t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLCube.h,v 1.17 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXGLCUBE_H #define FXGLCUBE_H #ifndef FXGLSHAPE_H #include "FXGLShape.h" #endif namespace FX { /// OpenGL Cube Object class FXAPI FXGLCube : public FXGLShape { FXDECLARE(FXGLCube) public: FXfloat width; FXfloat height; FXfloat depth; protected: FXGLCube(); virtual void drawshape(FXGLViewer* viewer); public: /// Construct with specified origin, width, height and depth FXGLCube(FXfloat x,FXfloat y,FXfloat z,FXfloat w=1.0f,FXfloat h=1.0f,FXfloat d=1.0f); /// Construct with specified origin, width, height, depth and material FXGLCube(FXfloat x,FXfloat y,FXfloat z,FXfloat w,FXfloat h,FXfloat d,const FXMaterial& mtl); /// Copy constructor FXGLCube(const FXGLCube& orig); /// Copy this object virtual FXGLObject* copy(); /// Change width void setWidth(FXfloat w){ width=w; } FXfloat getWidth() const { return width; } /// Change height void setHeight(FXfloat h){ height=h; } FXfloat getHeight() const { return height; } /// Change depth void setDepth(FXfloat d){ depth=d; } FXfloat getDepth() const { return depth; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destroy virtual ~FXGLCube(); }; } #endif fox-1.6.49/include/FXDirList.h0000664000175000017500000002533412130340076012741 00000000000000/******************************************************************************** * * * D i r e c t o r y L i s t W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDirList.h,v 1.70 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDIRLIST_H #define FXDIRLIST_H #ifndef FXTREELIST_H #include "FXTreeList.h" #endif namespace FX { struct FXFileAssoc; class FXFileDict; class FXIcon; class FXDirList; /// Directory List options enum { DIRLIST_SHOWFILES = 0x08000000, /// Show files as well as directories DIRLIST_SHOWHIDDEN = 0x10000000, /// Show hidden files or directories DIRLIST_NO_OWN_ASSOC = 0x20000000 /// Do not create associations for files }; /// Directory item class FXAPI FXDirItem : public FXTreeItem { FXDECLARE(FXDirItem) friend class FXDirList; protected: FXFileAssoc *assoc; // File association FXDirItem *link; // Link to next item FXDirItem *list; // List of child items FXlong size; // File size (if a file) FXTime date; // Time of item private: FXDirItem(const FXDirItem&); FXDirItem& operator=(const FXDirItem&); protected: FXDirItem():assoc(NULL),link(NULL),list(NULL),size(0L),date(0){} public: enum { FOLDER = 512, /// Directory item EXECUTABLE = 1024, /// Executable item SYMLINK = 2048, /// Symbolic linked item CHARDEV = 4096, /// Character special item BLOCKDEV = 8192, /// Block special item FIFO = 16384, /// FIFO item SOCK = 32768 /// Socket item }; public: /// Constructor FXDirItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL):FXTreeItem(text,oi,ci,ptr),assoc(NULL),link(NULL),list(NULL),size(0),date(0){state=HASITEMS;} /// Return true if this is a file item FXbool isFile() const { return (state&(FOLDER|BLOCKDEV|CHARDEV|FIFO|SOCK))==0; } /// Return true if this is a directory item FXbool isDirectory() const { return (state&FOLDER)!=0; } /// Return true if this is an executable item FXbool isExecutable() const { return (state&EXECUTABLE)!=0; } /// Return true if this is a symbolic link item FXbool isSymlink() const { return (state&SYMLINK)!=0; } /// Return true if this is a character device item FXbool isChardev() const { return (state&CHARDEV)!=0; } /// Return true if this is a block device item FXbool isBlockdev() const { return (state&BLOCKDEV)!=0; } /// Return true if this is an FIFO item FXbool isFifo() const { return (state&FIFO)!=0; } /// Return true if this is a socket FXbool isSocket() const { return (state&SOCK)!=0; } /// Return the file-association object for this item FXFileAssoc* getAssoc() const { return assoc; } /// Return the file size for this item FXlong getSize() const { return size; } /// Return the date for this item FXTime getDate() const { return date; } }; /** * A Directory List widget provides a tree-structured view of the file system. * It automatically updates itself periodically by re-scanning the file system * for any changes. As it scans the displayed directories and files, it automatically * determines the icons to be displayed by consulting the file-associations registry * settings. A number of messages can be sent to the Directory List to control the * filter pattern, sorting order, case sensitivity, and hidden file display mode. * The Directory list widget supports drags and drops of files. */ class FXAPI FXDirList : public FXTreeList { FXDECLARE(FXDirList) protected: FXFileDict *associations; // Association table FXDirItem *list; // Root item list FXString dropdirectory; // Drop directory FXDragAction dropaction; // Drop action FXString dragfiles; // Dragged files FXString pattern; // Pattern of file names FXuint matchmode; // File wildcard match mode FXuint counter; // Refresh counter FXIcon *open_folder; // Open folder icon FXIcon *closed_folder; // Closed folder icon FXIcon *mini_doc; // Document icon FXIcon *mini_app; // Application icon FXIcon *cdromicon; FXIcon *harddiskicon; FXIcon *networkicon; FXIcon *floppyicon; FXIcon *zipdiskicon; protected: FXDirList(); void listRootItems(); void listChildItems(FXDirItem *par); virtual FXTreeItem* createItem(const FXString& text,FXIcon* oi,FXIcon* ci,void* ptr); private: FXDirList(const FXDirList&); FXDirList &operator=(const FXDirList&); public: long onRefreshTimer(FXObject*,FXSelector,void*); long onBeginDrag(FXObject*,FXSelector,void*); long onEndDrag(FXObject*,FXSelector,void*); long onDragged(FXObject*,FXSelector,void*); long onDNDEnter(FXObject*,FXSelector,void*); long onDNDLeave(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onDNDDrop(FXObject*,FXSelector,void*); long onDNDRequest(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdToggleHidden(FXObject*,FXSelector,void*); long onUpdToggleHidden(FXObject*,FXSelector,void*); long onCmdShowHidden(FXObject*,FXSelector,void*); long onUpdShowHidden(FXObject*,FXSelector,void*); long onCmdHideHidden(FXObject*,FXSelector,void*); long onUpdHideHidden(FXObject*,FXSelector,void*); long onCmdToggleFiles(FXObject*,FXSelector,void*); long onUpdToggleFiles(FXObject*,FXSelector,void*); long onCmdShowFiles(FXObject*,FXSelector,void*); long onUpdShowFiles(FXObject*,FXSelector,void*); long onCmdHideFiles(FXObject*,FXSelector,void*); long onUpdHideFiles(FXObject*,FXSelector,void*); long onCmdSetPattern(FXObject*,FXSelector,void*); long onUpdSetPattern(FXObject*,FXSelector,void*); long onCmdSortReverse(FXObject*,FXSelector,void*); long onUpdSortReverse(FXObject*,FXSelector,void*); long onCmdSortCase(FXObject*,FXSelector,void*); long onUpdSortCase(FXObject*,FXSelector,void*); long onCmdRefresh(FXObject*,FXSelector,void*); public: static FXint ascending(const FXTreeItem* a,const FXTreeItem* b); static FXint descending(const FXTreeItem* a,const FXTreeItem* b); static FXint ascendingCase(const FXTreeItem* a,const FXTreeItem* b); static FXint descendingCase(const FXTreeItem* a,const FXTreeItem* b); public: enum { ID_REFRESHTIMER=FXTreeList::ID_LAST, ID_SHOW_FILES, ID_HIDE_FILES, ID_TOGGLE_FILES, ID_SHOW_HIDDEN, ID_HIDE_HIDDEN, ID_TOGGLE_HIDDEN, ID_SET_PATTERN, ID_SORT_REVERSE, ID_SORT_CASE, ID_REFRESH, ID_LAST }; public: /// Construct a directory list FXDirList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Scan the directories and update the items if needed, or if force is TRUE void scan(FXbool force=TRUE); /// Return TRUE if item is a directory FXbool isItemDirectory(const FXTreeItem* item) const; /// Return TRUE if item is a file FXbool isItemFile(const FXTreeItem* item) const; /// Return TRUE if item is executable FXbool isItemExecutable(const FXTreeItem* item) const; /// Collapse tree virtual FXbool collapseTree(FXTreeItem* tree,FXbool notify=FALSE); /// Expand tree virtual FXbool expandTree(FXTreeItem* tree,FXbool notify=FALSE); /// Set current file void setCurrentFile(const FXString& file,FXbool notify=FALSE); /// Return current file FXString getCurrentFile() const; /// Set current directory void setDirectory(const FXString& path,FXbool notify=FALSE); /// Return current directory FXString getDirectory() const; /// Return absolute pathname of item FXString getItemPathname(const FXTreeItem* item) const; /// Return the item from the absolute pathname FXTreeItem* getPathnameItem(const FXString& path); /// Change wildcard matching pattern void setPattern(const FXString& ptrn); /// Return wildcard pattern FXString getPattern() const { return pattern; } /// Return wildcard matching mode FXuint getMatchMode() const { return matchmode; } /// Change wildcard matching mode void setMatchMode(FXuint mode); /// Return TRUE if showing files as well as directories FXbool showFiles() const; /// Show or hide normal files void showFiles(FXbool showing); /// Return TRUE if showing hidden files and directories FXbool showHiddenFiles() const; /// Show or hide hidden files and directories void showHiddenFiles(FXbool showing); /// Change file associations void setAssociations(FXFileDict* assoc); /// Return file associations FXFileDict* getAssociations() const { return associations; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXDirList(); }; } #endif fox-1.6.49/include/FXICOIcon.h0000664000175000017500000000657612130340076012621 00000000000000/******************************************************************************** * * * I C O I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Janusz Ganczarski. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXICOIcon.h,v 1.20 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXICOICON_H #define FXICOICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// ICO (Microsoft icon format) icon class FXAPI FXICOIcon : public FXIcon { FXDECLARE(FXICOIcon) protected: FXICOIcon(){} private: FXICOIcon(const FXICOIcon&); FXICOIcon &operator=(const FXICOIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in Microsoft icon format FXICOIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in Microsoft icon format format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in Microsoft icon format format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXICOIcon(); }; #ifndef FXLOADICO #define FXLOADICO /** * Check if stream contains a ICO, return TRUE if so. */ extern FXAPI bool fxcheckICO(FXStream& store); /** * Load an ICO (Microsoft icon format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadICO(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXint& xspot,FXint& yspot); /** * Save an ICO (Microsoft icon format) file to a stream. * If no hot-spot given, save as an ICO instead of a CUR resource. */ extern FXAPI bool fxsaveICO(FXStream& store,const FXColor *data,FXint width,FXint height,FXint xspot=-1,FXint yspot=-1); #endif } #endif fox-1.6.49/include/FXToggleButton.h0000664000175000017500000001404112130340076013775 00000000000000/******************************************************************************** * * * T o g g l e B u t t o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXToggleButton.h,v 1.30 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTOGGLEBUTTON_H #define FXTOGGLEBUTTON_H #ifndef FXLABEL_H #include "FXLabel.h" #endif namespace FX { /// Toggle button flags enum { TOGGLEBUTTON_AUTOGRAY = 0x00800000, /// Automatically gray out when not updated TOGGLEBUTTON_AUTOHIDE = 0x01000000, /// Automatically hide toggle button when not updated TOGGLEBUTTON_TOOLBAR = 0x02000000, /// Toolbar style toggle button [flat look] TOGGLEBUTTON_KEEPSTATE= 0x04000000, /// Draw button according to state TOGGLEBUTTON_NORMAL = FRAME_RAISED|FRAME_THICK|JUSTIFY_NORMAL|ICON_BEFORE_TEXT }; /** * The toggle button provides a two-state button, which toggles between the * on and the off state each time it is pressed. For each state, the toggle * button has a unique icon and text label. * When pressed, the button widget sends a SEL_COMMAND to its target, with the * message data set to the current state of the toggle button, of the type FXbool. */ class FXAPI FXToggleButton : public FXLabel { FXDECLARE(FXToggleButton) protected: FXString altlabel; FXIcon *alticon; FXHotKey althotkey; FXint althotoff; FXString alttip; FXString althelp; FXbool state; FXbool down; protected: FXToggleButton(); void press(FXbool dn); private: FXToggleButton(const FXToggleButton&); FXToggleButton& operator=(const FXToggleButton&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCheck(FXObject*,FXSelector,void*); long onUncheck(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); public: /// Construct toggle button with two text labels, and two icons, one for each state FXToggleButton(FXComposite* p,const FXString& text1,const FXString& text2,FXIcon* icon1=NULL,FXIcon* icon2=NULL,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=TOGGLEBUTTON_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Returns true because a toggle button can receive focus virtual bool canFocus() const; /// Get default width virtual FXint getDefaultWidth(); /// Get default height virtual FXint getDefaultHeight(); /// Change alternate text shown when toggled void setAltText(const FXString& text); /// Return alternate text FXString getAltText() const { return altlabel; } /// Change alternate icon shown when toggled void setAltIcon(FXIcon* ic); /// Return alternate icon FXIcon* getAltIcon() const { return alticon; } /// Change toggled state void setState(FXbool s=TRUE,FXbool notify=FALSE); /// return toggled state FXbool getState() const { return state; } /// Change alternate help text shown when toggled void setAltHelpText(const FXString& text); /// Return alternate help text FXString getAltHelpText() const { return althelp; } /// Change alternate tip text shown when toggled void setAltTipText(const FXString& text); /// Return alternate tip text FXString getAltTipText() const { return alttip; } /// Set the toggle button style flags void setToggleStyle(FXuint style); /// Get the toggle button style flags FXuint getToggleStyle() const; /// Save toggle button to a stream virtual void save(FXStream& store) const; /// Load toggle button from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXToggleButton(); }; } #endif fox-1.6.49/include/FXCP1250Codec.h0000644000175000017500000000110611637250333013133 00000000000000#ifndef FXCP1250CODEC_H #define FXCP1250CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1250 Codec class FXAPI FXCP1250Codec : public FXTextCodec { FXDECLARE(FXCP1250Codec) public: FXCP1250Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1250Codec(){} }; } #endif fox-1.6.49/include/FXScrollBar.h0000664000175000017500000002011712130340076013244 00000000000000/******************************************************************************** * * * S c r o l l B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXScrollBar.h,v 1.15 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSCROLLBAR_H #define FXSCROLLBAR_H #ifndef FXWINDOW_H #include "FXWindow.h" #endif namespace FX { /// ScrollBar styles enum { SCROLLBAR_VERTICAL = 0, /// Vertically oriented SCROLLBAR_HORIZONTAL = 0x00020000, /// Horizontally oriented SCROLLBAR_WHEELJUMP = 0x00040000 /// Mouse wheel jumps instead of sliding smoothly }; /** * The scroll bar is used when a document has a larger content than may be made * visible. The range is the total size of the document, the page is the part * of the document which is visible. The size of the scrollbar thumb is adjusted * to give feedback of the relative sizes of each. * The scroll bar may be manipulated by the left mouse button (normal scrolling), by the * middle mouse button (same as the left mouse only the scroll position can jump to the * place where the click is made), or by the right mouse button (vernier- or fine-scrolling). * Holding down the control key while scrolling with the left or middle mouse button also * enables vernier-scrolling mode. The vernier-scrolling mode is very useful for accurate * positioning in large documents. * Finally, if the mouse sports a wheel, the scroll bar can be manipulated by means * of the mouse wheel as well. Holding down the Control-key during wheel motion * will cause the scrolling to go faster than normal. * While moving the scroll bar, a message of type SEL_CHANGED will be sent to the * target, and the message data will reflect the current position of type FXint. * At the end of the interaction, the scroll bar will send a message of type * SEL_COMMAND to notify the target of the final position. */ class FXAPI FXScrollBar : public FXWindow { FXDECLARE(FXScrollBar) protected: FXint range; // Scrollable range FXint page; // Page size FXint line; // Line size FXint pos; // Position FXint barsize; // Bar size FXint thumbsize; // Thumb size FXint thumbpos; // Thumb position FXColor hiliteColor; // Hightlight color FXColor shadowColor; // Shadow color FXColor borderColor; // Border color FXColor arrowColor; // Arrow color FXint dragpoint; // Point where grabbed FXuchar mode; // Current mode of control protected: FXScrollBar(); void drawButton(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXbool down); void drawLeftArrow(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXbool down); void drawRightArrow(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXbool down); void drawUpArrow(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXbool down); void drawDownArrow(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXbool down); protected: enum { MODE_NONE, MODE_INC, MODE_DEC, MODE_PAGE_INC, MODE_PAGE_DEC, MODE_DRAG, MODE_FINE_DRAG }; private: FXScrollBar(const FXScrollBar&); FXScrollBar &operator=(const FXScrollBar&); public: long onPaint(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onTimeWheel(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetIntRange(FXObject*,FXSelector,void*); long onCmdGetIntRange(FXObject*,FXSelector,void*); public: enum{ ID_TIMEWHEEL=FXWindow::ID_LAST, ID_AUTOSCROLL, ID_LAST }; public: /// Construct scroll bar FXScrollBar(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=SCROLLBAR_VERTICAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Set content size range void setRange(FXint r); /// Return content size range FXint getRange() const { return range; } /// Set viewport page size void setPage(FXint p); /// Return page size FXint getPage() const { return page; } /// Set scoll increment for line void setLine(FXint l); /// Return line increment FXint getLine() const { return line; } /// Change scroll position void setPosition(FXint p); /// Return current scroll position FXint getPosition() const { return pos; } /// Change highlight color void setHiliteColor(FXColor clr); /// Return highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change the shadow color void setShadowColor(FXColor clr); /// Return the shadow color FXColor getShadowColor() const { return shadowColor; } /// Change the border color void setBorderColor(FXColor clr); /// Return the border color FXColor getBorderColor() const { return borderColor; } /// Change the arrow color void setArrowColor(FXColor clr); /// Return the arrow color FXColor getArrowColor() const { return arrowColor; } /// Change the scrollbar style void setScrollBarStyle(FXuint style); /// Return the scrollbar style FXuint getScrollBarStyle() const; /// Change the bar size void setBarSize(FXint size); /// Return the bar size FXint getBarSize() const { return barsize; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXScrollBar(); }; /// Corner between scroll bars class FXAPI FXScrollCorner : public FXWindow { FXDECLARE(FXScrollCorner) protected: FXScrollCorner(); private: FXScrollCorner(const FXScrollCorner&); FXScrollCorner &operator=(const FXScrollCorner&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Constructor FXScrollCorner(FXComposite* p); /// Can not be enabled virtual void enable(); /// Can not be disabled virtual void disable(); }; } #endif fox-1.6.49/include/FXText.h0000664000175000017500000007605012130340076012314 00000000000000/******************************************************************************** * * * M u l t i - L i ne T e x t W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXText.h,v 1.166 2006/02/06 03:03:40 fox Exp $ * ********************************************************************************/ #ifndef FXTEXT_H #define FXTEXT_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { /// Text widget options enum { TEXT_READONLY = 0x00100000, /// Text is NOT editable TEXT_WORDWRAP = 0x00200000, /// Wrap at word breaks TEXT_OVERSTRIKE = 0x00400000, /// Overstrike mode TEXT_FIXEDWRAP = 0x00800000, /// Fixed wrap columns TEXT_NO_TABS = 0x01000000, /// Insert spaces for tabs TEXT_AUTOINDENT = 0x02000000, /// Autoindent TEXT_SHOWACTIVE = 0x04000000, /// Show active line TEXT_AUTOSCROLL = 0x08000000 /// Logging mode, keeping last line visible }; /// Selection modes enum FXTextSelectionMode { SELECT_CHARS, SELECT_WORDS, SELECT_LINES }; /// Highlight style entry struct FXHiliteStyle { FXColor normalForeColor; /// Normal text foreground color FXColor normalBackColor; /// Normal text background color FXColor selectForeColor; /// Selected text foreground color FXColor selectBackColor; /// Selected text background color FXColor hiliteForeColor; /// Highlight text foreground color FXColor hiliteBackColor; /// Highlight text background color FXColor activeBackColor; /// Active text background color FXuint style; /// Highlight text style }; /** * Text mutation callback data passed with the SEL_INSERTED, * SEL_REPLACED, and SEL_DELETED messages; both old and new * text is available on behalf of the undo system as well as * syntax highlighting. */ struct FXTextChange { FXint pos; /// Position in buffer FXint ndel; /// Number characters deleted at position FXint nins; /// Number characters inserted at position FXchar *ins; /// Text inserted at position FXchar *del; /// Text deleted at position }; /** * The text widget supports editing of multiple lines of text. * An optional style table can provide text coloring based on * the contents of an optional parallel style buffer, which is * maintained as text is edited. In a typical scenario, the * contents of the style buffer is either directly written when * the text is added to the widget, or is continually modified * by editing the text via syntax-based highlighting engine which * colors the text based on syntactical patterns. */ class FXAPI FXText : public FXScrollArea { FXDECLARE(FXText) protected: FXchar *buffer; // Text buffer being edited FXchar *sbuffer; // Text style buffer FXint *visrows; // Starts of rows in buffer FXint length; // Length of the actual text in the buffer FXint nvisrows; // Number of visible rows FXint nrows; // Total number of rows FXint gapstart; // Start of the insertion point (the gap) FXint gapend; // End of the insertion point+1 FXint toppos; // Start position of first visible row FXint keeppos; // Position to keep on top visible row FXint toprow; // Row number of first visible row FXint selstartpos; // Start of selection FXint selendpos; // End of selection FXint hilitestartpos; // Hightlight start position FXint hiliteendpos; // Hightlight end position FXint anchorpos; // Anchor position FXint cursorpos; // Cursor position FXint revertpos; // Position of cursor prior to dragging FXint cursorstart; // Cursor row start pos FXint cursorend; // Cursor row end pos FXint cursorrow; // Cursor row FXint cursorcol; // Cursor column indent (not character offset!) FXint prefcol; // Preferred cursor column FXint margintop; // Margins top FXint marginbottom; // Margin bottom FXint marginleft; // Margin left FXint marginright; // Margin right FXint wrapwidth; // Wrap width in pixels FXint wrapcolumns; // Wrap columns FXint tabwidth; // Tab width in pixels FXint tabcolumns; // Tab columns FXint barwidth; // Line number width FXint barcolumns; // Line number columns FXFont *font; // Text font FXColor textColor; // Normal text color FXColor selbackColor; // Select background color FXColor seltextColor; // Select text color FXColor hilitebackColor; // Highlight background color FXColor hilitetextColor; // Highlight text color FXColor activebackColor; // Background color for active line FXColor numberColor; // Line number color FXColor cursorColor; // Cursor color FXColor barColor; // Bar background color FXint textWidth; // Total width of all text FXint textHeight; // Total height of all text FXString searchstring; // String of last search FXuint searchflags; // Flags of last search const FXchar *delimiters; // Delimiters FXString clipped; // Clipped text FXint vrows; // Default visible rows FXint vcols; // Default visible columns FXString help; // Status line help FXString tip; // Tooltip const FXHiliteStyle *hilitestyles; // Style definitions FXuint matchtime; // Match time (ms) FXint grabx; // Grab point x FXint graby; // Grab point y FXuchar mode; // Mode widget is in FXbool modified; // User has modified text protected: FXText(); void calcVisRows(FXint s,FXint e); virtual void eraseCursorOverhang(); virtual void drawCursor(FXuint state); virtual FXuint style(FXint row,FXint beg,FXint end,FXint pos) const; virtual void drawBufferText(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXint pos,FXint n,FXuint style) const; virtual void fillBufferRect(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXuint style) const; virtual void drawTextRow(FXDCWindow& dc,FXint line,FXint left,FXint right) const; virtual void drawContents(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h) const; virtual void drawNumbers(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h) const; FXint posToLine(FXint pos,FXint ln) const; FXbool posVisible(FXint pos) const; void updateRange(FXint beg,FXint end) const; void movegap(FXint pos); void sizegap(FXint sz); void squeezegap(); FXint charWidth(FXwchar ch,FXint indent) const; FXint wrap(FXint start) const; FXint measureText(FXint start,FXint end,FXint& wmax,FXint& hmax) const; FXint lineWidth(FXint pos,FXint n) const; FXint getYOfPos(FXint pos) const; FXint getXOfPos(FXint pos) const; FXint changeBeg(FXint pos) const; FXint changeEnd(FXint pos) const; FXint indentFromPos(FXint start,FXint pos) const; FXint posFromIndent(FXint start,FXint indent) const; void mutation(FXint pos,FXint ncins,FXint ncdel,FXint nrins,FXint nrdel); virtual void replace(FXint pos,FXint m,const FXchar *text,FXint n,FXint style); void recompute(); FXint matchForward(FXint pos,FXint end,FXwchar l,FXwchar r,FXint level) const; FXint matchBackward(FXint pos,FXint beg,FXwchar l,FXwchar r,FXint level) const; FXint findMatching(FXint pos,FXint beg,FXint end,FXwchar ch,FXint level) const; void flashMatching(); void moveContents(FXint x,FXint y); protected: enum { STYLE_MASK = 0x00FF, // Mask color table STYLE_TEXT = 0x0100, // Draw some content STYLE_SELECTED = 0x0200, // Selected STYLE_CONTROL = 0x0400, // Control character STYLE_HILITE = 0x0800, // Highlighted STYLE_ACTIVE = 0x1000 // Active }; enum { MOUSE_NONE, // No mouse operation MOUSE_CHARS, // Selecting characters MOUSE_WORDS, // Selecting words MOUSE_LINES, // Selecting lines MOUSE_SCROLL, // Scrolling MOUSE_DRAG, // Dragging text MOUSE_TRYDRAG // Tentative drag }; public: enum { STYLE_UNDERLINE = 0x0001, /// Underline text STYLE_STRIKEOUT = 0x0002, /// Strike out text STYLE_BOLD = 0x0004 /// Bold text }; private: FXText(const FXText&); FXText& operator=(const FXText&); public: long onPaint(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onBeginDrag(FXObject*,FXSelector,void*); long onEndDrag(FXObject*,FXSelector,void*); long onDragged(FXObject*,FXSelector,void*); long onDNDEnter(FXObject*,FXSelector,void*); long onDNDLeave(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onDNDDrop(FXObject*,FXSelector,void*); long onDNDRequest(FXObject*,FXSelector,void*); long onSelectionLost(FXObject*,FXSelector,void*); long onSelectionGained(FXObject*,FXSelector,void*); long onSelectionRequest(FXObject*,FXSelector,void* ptr); long onClipboardLost(FXObject*,FXSelector,void*); long onClipboardGained(FXObject*,FXSelector,void*); long onClipboardRequest(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onBlink(FXObject*,FXSelector,void*); long onFlash(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); // Control commands long onCmdToggleEditable(FXObject*,FXSelector,void*); long onUpdToggleEditable(FXObject*,FXSelector,void*); long onCmdToggleOverstrike(FXObject*,FXSelector,void*); long onUpdToggleOverstrike(FXObject*,FXSelector,void*); long onCmdCursorRow(FXObject*,FXSelector,void*); long onUpdCursorRow(FXObject*,FXSelector,void*); long onCmdCursorColumn(FXObject*,FXSelector,void*); long onUpdCursorColumn(FXObject*,FXSelector,void*); long onUpdHaveSelection(FXObject*,FXSelector,void*); long onUpdSelectAll(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSearch(FXObject*,FXSelector,void*); long onCmdReplace(FXObject*,FXSelector,void*); long onCmdSearchNext(FXObject*,FXSelector,void*); long onCmdSearchSel(FXObject*,FXSelector,void*); // Cursor movement long onCmdCursorTop(FXObject*,FXSelector,void*); long onCmdCursorBottom(FXObject*,FXSelector,void*); long onCmdCursorHome(FXObject*,FXSelector,void*); long onCmdCursorEnd(FXObject*,FXSelector,void*); long onCmdCursorRight(FXObject*,FXSelector,void*); long onCmdCursorLeft(FXObject*,FXSelector,void*); long onCmdCursorUp(FXObject*,FXSelector,void*); long onCmdCursorDown(FXObject*,FXSelector,void*); long onCmdCursorWordLeft(FXObject*,FXSelector,void*); long onCmdCursorWordRight(FXObject*,FXSelector,void*); long onCmdCursorWordStart(FXObject*,FXSelector,void*); long onCmdCursorWordEnd(FXObject*,FXSelector,void*); long onCmdCursorPageDown(FXObject*,FXSelector,void*); long onCmdCursorPageUp(FXObject*,FXSelector,void*); long onCmdCursorScreenTop(FXObject*,FXSelector,void*); long onCmdCursorScreenBottom(FXObject*,FXSelector,void*); long onCmdCursorScreenCenter(FXObject*,FXSelector,void*); long onCmdCursorParHome(FXObject*,FXSelector,void*); long onCmdCursorParEnd(FXObject*,FXSelector,void*); long onCmdBlockBeg(FXObject*,FXSelector,void*); long onCmdBlockEnd(FXObject*,FXSelector,void*); long onCmdGotoMatching(FXObject*,FXSelector,void*); long onCmdGotoSelected(FXObject*,FXSelector,void*); long onCmdGotoLine(FXObject*,FXSelector,void*); long onCmdScrollUp(FXObject*,FXSelector,void*); long onCmdScrollDown(FXObject*,FXSelector,void*); // Mark and extend long onCmdMark(FXObject*,FXSelector,void*); long onCmdExtend(FXObject*,FXSelector,void*); // Inserting long onCmdOverstString(FXObject*,FXSelector,void*); long onCmdInsertString(FXObject*,FXSelector,void*); long onCmdInsertNewline(FXObject*,FXSelector,void*); long onCmdInsertTab(FXObject*,FXSelector,void*); // Manipulation Selection long onCmdCutSel(FXObject*,FXSelector,void*); long onCmdCopySel(FXObject*,FXSelector,void*); long onCmdPasteSel(FXObject*,FXSelector,void*); long onCmdDeleteSel(FXObject*,FXSelector,void*); long onCmdChangeCase(FXObject*,FXSelector,void*); long onCmdShiftText(FXObject*,FXSelector,void*); long onCmdPasteMiddle(FXObject*,FXSelector,void*); // Changing Selection long onCmdSelectChar(FXObject*,FXSelector,void*); long onCmdSelectWord(FXObject*,FXSelector,void*); long onCmdSelectLine(FXObject*,FXSelector,void*); long onCmdSelectAll(FXObject*,FXSelector,void*); long onCmdSelectMatching(FXObject*,FXSelector,void*); long onCmdSelectBlock(FXObject*,FXSelector,void*); long onCmdDeselectAll(FXObject*,FXSelector,void*); // Deletion long onCmdBackspace(FXObject*,FXSelector,void*); long onCmdBackspaceWord(FXObject*,FXSelector,void*); long onCmdBackspaceBol(FXObject*,FXSelector,void*); long onCmdDelete(FXObject*,FXSelector,void*); long onCmdDeleteWord(FXObject*,FXSelector,void*); long onCmdDeleteEol(FXObject*,FXSelector,void*); long onCmdDeleteAll(FXObject*,FXSelector,void*); long onCmdDeleteLine(FXObject*,FXSelector,void*); public: static const FXchar textDelimiters[]; public: enum { ID_CURSOR_TOP=FXScrollArea::ID_LAST, ID_CURSOR_BOTTOM, ID_CURSOR_HOME, ID_CURSOR_END, ID_CURSOR_RIGHT, ID_CURSOR_LEFT, ID_CURSOR_UP, ID_CURSOR_DOWN, ID_CURSOR_WORD_LEFT, ID_CURSOR_WORD_RIGHT, ID_CURSOR_WORD_START, ID_CURSOR_WORD_END, ID_CURSOR_PAGEDOWN, ID_CURSOR_PAGEUP, ID_CURSOR_SCRNTOP, ID_CURSOR_SCRNBTM, ID_CURSOR_SCRNCTR, ID_CURSOR_PAR_HOME, ID_CURSOR_PAR_END, ID_SCROLL_UP, ID_SCROLL_DOWN, ID_MARK, ID_EXTEND, ID_OVERST_STRING, ID_INSERT_STRING, ID_INSERT_NEWLINE, ID_INSERT_TAB, ID_CUT_SEL, ID_COPY_SEL, ID_DELETE_SEL, ID_PASTE_SEL, ID_PASTE_MIDDLE, ID_SELECT_CHAR, ID_SELECT_WORD, ID_SELECT_LINE, ID_SELECT_ALL, ID_SELECT_MATCHING, ID_SELECT_BRACE, ID_SELECT_BRACK, ID_SELECT_PAREN, ID_SELECT_ANG, ID_DESELECT_ALL, ID_BACKSPACE, ID_BACKSPACE_WORD, ID_BACKSPACE_BOL, ID_DELETE, ID_DELETE_WORD, ID_DELETE_EOL, ID_DELETE_ALL, ID_DELETE_LINE, ID_TOGGLE_EDITABLE, ID_TOGGLE_OVERSTRIKE, ID_CURSOR_ROW, ID_CURSOR_COLUMN, ID_CLEAN_INDENT, ID_SHIFT_LEFT, ID_SHIFT_RIGHT, ID_SHIFT_TABLEFT, ID_SHIFT_TABRIGHT, ID_UPPER_CASE, ID_LOWER_CASE, ID_GOTO_MATCHING, ID_GOTO_SELECTED, ID_GOTO_LINE, ID_SEARCH_FORW_SEL, ID_SEARCH_BACK_SEL, ID_SEARCH_FORW, ID_SEARCH_BACK, ID_SEARCH, ID_REPLACE, ID_LEFT_BRACE, ID_LEFT_BRACK, ID_LEFT_PAREN, ID_LEFT_ANG, ID_RIGHT_BRACE, ID_RIGHT_BRACK, ID_RIGHT_PAREN, ID_RIGHT_ANG, ID_BLINK, ID_FLASH, ID_LAST }; public: /// Construct multi-line text widget FXText(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=3,FXint pr=3,FXint pt=2,FXint pb=2); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Enable the text widget virtual void enable(); /// Disable the text widget virtual void disable(); /// Need to recalculate size virtual void recalc(); /// Get default width virtual FXint getContentWidth(); /// Get default height virtual FXint getContentHeight(); /// Returns true because a text widget can receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Change top margin void setMarginTop(FXint pt); /// Return top margin FXint getMarginTop() const { return margintop; } /// Change bottom margin void setMarginBottom(FXint pb); /// Return bottom margin FXint getMarginBottom() const { return marginbottom; } /// Change left margin void setMarginLeft(FXint pl); /// Return left margin FXint getMarginLeft() const { return marginleft; } /// Change right margin void setMarginRight(FXint pr); /// Return right margin FXint getMarginRight() const { return marginright; } /// Return wrap columns FXint getWrapColumns() const { return wrapcolumns; } /// Set wrap columns void setWrapColumns(FXint cols); /// Return tab columns FXint getTabColumns() const { return tabcolumns; } /// Change tab columns void setTabColumns(FXint cols); /// Return number of columns used for line numbers FXint getBarColumns() const { return barcolumns; } /// Change number of columns used for line numbers void setBarColumns(FXint cols); /// Return TRUE if text was modified FXbool isModified() const { return modified; } /// Set modified flag void setModified(FXbool mod=TRUE){ modified=mod; } /// Set editable mode void setEditable(FXbool edit=TRUE); /// Return TRUE if text is editable FXbool isEditable() const; /// Set overstrike mode void setOverstrike(FXbool over=TRUE); /// Return TRUE if overstrike mode in effect FXbool isOverstrike() const; /// Set styled text mode void setStyled(FXbool styled=TRUE); /// Return TRUE if style buffer FXbool isStyled() const { return (sbuffer!=NULL); } /// Change delimiters of words void setDelimiters(const FXchar* delims=textDelimiters){ delimiters=delims; } /// Return word delimiters const FXchar* getDelimiters() const { return delimiters; } /// Change text font void setFont(FXFont* fnt); /// Return text font FXFont* getFont() const { return font; } /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const { return textColor; } /// Change selected background color void setSelBackColor(FXColor clr); /// Return selected background color FXColor getSelBackColor() const { return selbackColor; } /// Change selected text color void setSelTextColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const { return seltextColor; } /// Change highlighted text color void setHiliteTextColor(FXColor clr); /// Return highlighted text color FXColor getHiliteTextColor() const { return hilitetextColor; } /// Change highlighted background color void setHiliteBackColor(FXColor clr); /// Return highlighted background color FXColor getHiliteBackColor() const { return hilitebackColor; } /// Change active background color void setActiveBackColor(FXColor clr); /// Return active background color FXColor getActiveBackColor() const { return activebackColor; } /// Change cursor color void setCursorColor(FXColor clr); /// Return cursor color FXColor getCursorColor() const { return cursorColor; } /// Change line number color void setNumberColor(FXColor clr); /// Return line number color FXColor getNumberColor() const { return numberColor; } /// Change bar color void setBarColor(FXColor clr); /// Return bar color FXColor getBarColor() const { return barColor; } /// Set help text void setHelpText(const FXString& text){ help=text; } /// Return help text FXString getHelpText() const { return help; } /// Set the tool tip message for this text widget void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for this text widget FXString getTipText() const { return tip; } /// Get character at position in text buffer FXint getByte(FXint pos) const; /// Get wide character at position pos FXwchar getChar(FXint pos) const; /// Get length of wide character at position pos FXint getCharLen(FXint pos) const; /// Get style at position pos FXint getStyle(FXint pos) const; /// Extract n bytes of text from position pos void extractText(FXchar *text,FXint pos,FXint n) const; void extractText(FXString& text,FXint pos,FXint n) const; /// Extract n bytes of style info from position pos void extractStyle(FXString& text,FXint pos,FXint n) const; void extractStyle(FXchar *style,FXint pos,FXint n) const; /// Replace m bytes at pos by n characters virtual void replaceText(FXint pos,FXint m,const FXchar *text,FXint n,FXbool notify=FALSE); virtual void replaceText(FXint pos,FXint m,const FXString& text,FXbool notify=FALSE); /// Replace m bytes at pos by n characters virtual void replaceStyledText(FXint pos,FXint m,const FXchar *text,FXint n,FXint style=0,FXbool notify=FALSE); virtual void replaceStyledText(FXint pos,FXint m,const FXString& text,FXint style=0,FXbool notify=FALSE); /// Append n bytes of text at the end of the buffer virtual void appendText(const FXchar *text,FXint n,FXbool notify=FALSE); virtual void appendText(const FXString& text,FXbool notify=FALSE); /// Append n bytes of text at the end of the buffer virtual void appendStyledText(const FXchar *text,FXint n,FXint style=0,FXbool notify=FALSE); virtual void appendStyledText(const FXString& text,FXint style=0,FXbool notify=FALSE); /// Insert n bytes of text at position pos into the buffer virtual void insertText(FXint pos,const FXchar *text,FXint n,FXbool notify=FALSE); virtual void insertText(FXint pos,const FXString& text,FXbool notify=FALSE); /// Insert n bytes of text at position pos into the buffer virtual void insertStyledText(FXint pos,const FXchar *text,FXint n,FXint style=0,FXbool notify=FALSE); virtual void insertStyledText(FXint pos,const FXString& text,FXint style=0,FXbool notify=FALSE); /// Remove n bytes of text at position pos from the buffer virtual void removeText(FXint pos,FXint n,FXbool notify=FALSE); /// Change style of text range virtual void changeStyle(FXint pos,FXint n,FXint style); /// Change style of text range from style-array virtual void changeStyle(FXint pos,const FXchar* style,FXint n); virtual void changeStyle(FXint pos,const FXString& style); /// Change the text in the buffer to new text virtual void setText(const FXchar* text,FXint n,FXbool notify=FALSE); virtual void setText(const FXString& text,FXbool notify=FALSE); /// Change the text in the buffer to new text virtual void setStyledText(const FXchar* text,FXint n,FXint style=0,FXbool notify=FALSE); virtual void setStyledText(const FXString& text,FXint style=0,FXbool notify=FALSE); /// Retrieve text into buffer void getText(FXchar* text,FXint n) const; void getText(FXString& text) const; /// Return text in the widget FXString getText() const; /// Return length of buffer FXint getLength() const { return length; } /// Return number of rows in buffer FXint getNumRows() const { return nrows; } /// Shift block of lines from position start up to end by given amount FXint shiftText(FXint start,FXint end,FXint amount,FXbool notify=FALSE); /** * Search for string in text buffer, returning the extent of * the string in beg and end. The search starts from the given * starting position, scans forward (SEARCH_FORWARD) or backward * (SEARCH_BACKWARD), and wraps around if SEARCH_WRAP has been * specified. The search type is either a plain search (SEARCH_EXACT), * case insensitive search (SEARCH_IGNORECASE), or regular expression * search (SEARCH_REGEX). * For regular expression searches, capturing parentheses are used if * npar is greater than 1; in this case, the number of entries in the * beg[], end[] arrays must be npar also. If either beg or end or * both are NULL, internal arrays are used. * [This API is still subject to change!!] */ FXbool findText(const FXString& string,FXint* beg=NULL,FXint* end=NULL,FXint start=0,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP|SEARCH_EXACT,FXint npar=1); /// Return TRUE if position pos is selected FXbool isPosSelected(FXint pos) const; /// Return TRUE if position is fully visible FXbool isPosVisible(FXint pos) const; /// Return text position at given visible x,y coordinate FXint getPosAt(FXint x,FXint y) const; /// Count number of rows; start should be on a row start FXint countRows(FXint start,FXint end) const; /// Count number of columns; start should be on a row start FXint countCols(FXint start,FXint end) const; /// Count number of newlines FXint countLines(FXint start,FXint end) const; /// Return position of begin of line containing position pos FXint lineStart(FXint pos) const; /// Return position of end of line containing position pos FXint lineEnd(FXint pos) const; /// Return start of next line FXint nextLine(FXint pos,FXint nl=1) const; /// Return start of previous line FXint prevLine(FXint pos,FXint nl=1) const; /// Return row start FXint rowStart(FXint pos) const; /// Return row end FXint rowEnd(FXint pos) const; /// Return start of next row FXint nextRow(FXint pos,FXint nr=1) const; /// Return start of previous row FXint prevRow(FXint pos,FXint nr=1) const; /// Return end of previous word FXint leftWord(FXint pos) const; /// Return begin of next word FXint rightWord(FXint pos) const; /// Return begin of word FXint wordStart(FXint pos) const; /// Return end of word FXint wordEnd(FXint pos) const; /// Return validated utf8 character start position FXint validPos(FXint pos) const; /// Retreat to the previous valid utf8 character start FXint dec(FXint pos) const; /// Advance to the next valid utf8 character start FXint inc(FXint pos) const; /// Make line containing pos the top line void setTopLine(FXint pos); /// Return position of top line FXint getTopLine() const; /// Make line containing pos the bottom line void setBottomLine(FXint pos); /// Return the position of the bottom line FXint getBottomLine() const; /// Make line containing pos the center line void setCenterLine(FXint pos); /// Set the anchor position void setAnchorPos(FXint pos); /// Return the anchor position FXint getAnchorPos() const { return anchorpos; } /// Set the cursor position virtual void setCursorPos(FXint pos,FXbool notify=FALSE); /// Set cursor row void setCursorRow(FXint row,FXbool notify=FALSE); /// Return cursor row FXint getCursorRow() const { return cursorrow; } /// Set cursor column void setCursorColumn(FXint col,FXbool notify=FALSE); /// Return cursor row, i.e. indent position FXint getCursorColumn() const { return cursorcol; } /// Return the cursor position FXint getCursorPos() const { return cursorpos; } /// Return selstartpos FXint getSelStartPos() const { return selstartpos; } /// Return selendpos FXint getSelEndPos() const { return selendpos; } /// Select all text FXbool selectAll(FXbool notify=FALSE); /// Extend the selection from the anchor to the given position virtual FXbool extendSelection(FXint pos,FXTextSelectionMode select=SELECT_CHARS,FXbool notify=FALSE); /// Select len characters starting at given position pos FXbool setSelection(FXint pos,FXint len,FXbool notify=FALSE); /// Unselect the text virtual FXbool killSelection(FXbool notify=FALSE); /// Highlight len characters starting at given position pos FXbool setHighlight(FXint start,FXint len); /// Unhighlight the text FXbool killHighlight(); /// Scroll text to make the given position visible void makePositionVisible(FXint pos); /// Change text widget style void setTextStyle(FXuint style); /// Return text widget style FXuint getTextStyle() const; /// Change number of visible rows void setVisibleRows(FXint rows); /// Return number of visible rows FXint getVisibleRows() const { return vrows; } /// Change number of visible columns void setVisibleColumns(FXint cols); /// Return number of visible columns FXint getVisibleColumns() const { return vcols; } /** * Change brace and parenthesis match highlighting time, in ms. * A match highlight time of 0 disables brace matching. */ void setHiliteMatchTime(FXuint t){ matchtime=t; } /** * Return brace and parenthesis match highlighting time, in ms. */ FXuint getHiliteMatchTime() const { return matchtime; } /// Set highlight styles void setHiliteStyles(const FXHiliteStyle* styles); /// Get highlight styles const FXHiliteStyle* getHiliteStyles() const { return hilitestyles; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXText(); }; } #endif fox-1.6.49/include/FXDial.h0000664000175000017500000001664112130340076012241 00000000000000/******************************************************************************** * * * D i a l W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDial.h,v 1.35 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDIAL_H #define FXDIAL_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { // Dial style options enum { DIAL_VERTICAL = 0, // Vertically oriented DIAL_HORIZONTAL = 0x00008000, // Horizontal oriented DIAL_CYCLIC = 0x00010000, // Value wraps around DIAL_HAS_NOTCH = 0x00020000, // Dial has a Center Notch DIAL_NORMAL = DIAL_VERTICAL }; /** * The Dial widget is a valuator widget which is able to provide a cyclic * value range when the DIAL_CYCLIC is passed, or a simple linear value range. * While being turned, the dial sends a SEL_CHANGED message to its target; * at the end of the interaction, a SEL_COMMAND message is sent. * The message data represents the current value, of type FXint. The options * DIAL_VERTICAL and DIAL_HORIZONTAL control the orientation of the dial. * An optional notch can be used to indicate the zero-position of * the dial; display of the notch is controlled by the DIAL_HAS_NOTCH option. */ class FXAPI FXDial : public FXFrame { FXDECLARE(FXDial) protected: FXint range[2]; // Reported data range FXColor notchColor; // Main notch color FXint notchangle; // Angle of main notch FXint notchspacing; // Angle between notches FXint notchoffset; // Notch offset FXint dragpoint; // Place where clicked FXint dragpos; // Value where clicked FXint incr; // Rate of change/revolution FXint pos; // Reported data position FXString help; // Help string FXString tip; // Tip string protected: FXDial(); private: FXDial(const FXDial&); FXDial &operator=(const FXDial&); public: long onPaint(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void* ); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetRealValue(FXObject*,FXSelector,void*); long onCmdGetRealValue(FXObject*,FXSelector,void*); long onCmdSetIntRange(FXObject*,FXSelector,void*); long onCmdGetIntRange(FXObject*,FXSelector,void*); long onCmdSetRealRange(FXObject*,FXSelector,void*); long onCmdGetRealRange(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Construct a dial widget FXDial(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=DIAL_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Returns true because a dial can receive focus virtual bool canFocus() const; /// Set the dial value void setValue(FXint value,FXbool notify=FALSE); /// Return the dial value FXint getValue() const { return pos; } /// Change the dial's range void setRange(FXint lo,FXint hi,FXbool notify=FALSE); /// Obtain the current range of the dial void getRange(FXint& lo,FXint& hi) const { lo=range[0]; hi=range[1]; } /** * Set the revolution increment, which is the amount of change * in the position for revolution of the dial; the dial may go * through multiple revolutions to go through its whole range; * by default it takes one 360 degree turn of the dial to go * from the lower to the upper range. */ void setRevolutionIncrement(FXint i); /// Get the current value of the revolution increment FXint getRevolutionIncrement() const { return incr; } /** * Change the spacing for the small notches; this should be set * in tenths of degrees in the range [1,3600], and the value should * be a divisor of 3600, so as to make the notches come out evenly */ void setNotchSpacing(FXint spacing); /// Get the current notch spacing FXint getNotchSpacing() const { return notchspacing; } /** * Change the notch offset, which is the position of the * center notch; the value should be tenths of degrees * in the range [-3600,3600] */ void setNotchOffset(FXint offset); /// Get the current center notch offset FXint getNotchOffset() const { return notchoffset; } /// Changes the dial style. void setDialStyle(FXuint opts); /// Get the current dial style. FXuint getDialStyle() const; /// Change the center notch color void setNotchColor(FXColor clr); /// Get the current center notch color FXColor getNotchColor() const { return notchColor; } /// Set the help text to be displayed on the status line void setHelpText(const FXString& text); /// Get the current help text const FXString& getHelpText() const { return help; } /// Set the tip text to be displayed in the tooltip void setTipText(const FXString& text); /// Get the current tooltip text value const FXString& getTipText() const { return tip; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXListBox.h0000664000175000017500000002147412130340076012754 00000000000000/******************************************************************************** * * * L i s t B o x W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXListBox.h,v 1.43 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXLISTBOX_H #define FXLISTBOX_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /// List Box styles enum { LISTBOX_NORMAL = 0 // Normal style }; class FXButton; class FXMenuButton; class FXList; class FXPopup; /** * The List Box is a control to select one of a list of options. It looks * similar to a Combo Box except that List Box yields integer numbers only. * When an option is selected, List Box will send an SEL_COMMAND with the * index of the opton. While manipulating the list, it may send SEL_CHANGED * messages to indicate which option the cursor is hovering over. * The List Box is able to receive ID_GETINTVALUE and ID_SETINTVALUE which * will retrieve the current option or change the selected option. */ class FXAPI FXListBox : public FXPacker { FXDECLARE(FXListBox) protected: FXButton *field; FXMenuButton *button; FXList *list; FXPopup *pane; protected: FXListBox(){} private: FXListBox(const FXListBox&); FXListBox &operator=(const FXListBox&); public: long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onFieldButton(FXObject*,FXSelector,void*); long onListUpdate(FXObject*,FXSelector,void*); long onListClicked(FXObject*,FXSelector,void*); long onListChanged(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); public: enum { ID_LIST=FXPacker::ID_LAST, ID_FIELD, ID_LAST }; public: /// Constructor FXListBox(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_SUNKEN|FRAME_THICK|LISTBOX_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Perform layout virtual void layout(); /// Enable drive box virtual void enable(); /// Disable drive box virtual void disable(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Return the number of items in the list FXint getNumItems() const; /// Return the number of visible items FXint getNumVisible() const; /// Set the number of visible items void setNumVisible(FXint nvis); /// Return true if current item FXbool isItemCurrent(FXint index) const; /// Set the current item (index is zero-based) virtual void setCurrentItem(FXint index,FXbool notify=FALSE); /// Get the current item's index FXint getCurrentItem() const; /// Return the item at the given index FXString getItem(FXint index) const; /// Replace the item at index FXint setItem(FXint index,const FXString& text,FXIcon* icon=NULL,void* ptr=NULL); /// Fill list box by appending items from array of strings FXint fillItems(const FXchar** strings,FXIcon* icon=NULL,void* ptr=NULL); /// Fill list box by appending items from newline separated strings FXint fillItems(const FXString& strings,FXIcon* icon=NULL,void* ptr=NULL); /// Insert a new item at index FXint insertItem(FXint index,const FXString& text,FXIcon* icon=NULL,void* ptr=NULL); /// Add an item to the end of the list FXint appendItem(const FXString& text,FXIcon* icon=NULL,void* ptr=NULL); /// Prepend an item to the list FXint prependItem(const FXString& text,FXIcon* icon=NULL,void* ptr=NULL); /// Move item from oldindex to newindex FXint moveItem(FXint newindex,FXint oldindex); /// Extract item from list FXListItem* extractItem(FXint index); /// Remove this item from the list void removeItem(FXint index); /// Remove all items from the list void clearItems(); /** * Search items by name, beginning from item start. If the start * item is -1 the search will start at the first item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. * The option SEARCH_IGNORECASE causes a case-insensitive match. Finally, * passing SEARCH_PREFIX causes searching for a prefix of the item name. * Return -1 if no matching item is found. */ FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /** * Search items by associated user data, beginning from item start. If the * start item is -1 the search will start at the first item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. */ FXint findItemByData(const void *ptr,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /// Set text for specified item void setItemText(FXint index,const FXString& text); /// Get text for specified item FXString getItemText(FXint index) const; /// Change item icon, deleting old one if it was owned void setItemIcon(FXint index,FXIcon* icon,FXbool owned=FALSE); /// Return icon of item at index FXIcon* getItemIcon(FXint index) const; /// Set data pointer for specified item void setItemData(FXint index,void* ptr) const; /// Get data pointer for specified item void* getItemData(FXint index) const; /// Is the pane shown FXbool isPaneShown() const; /// Sort items using current sort function void sortItems(); /// Set text font void setFont(FXFont* fnt); /// Get text font FXFont* getFont() const; /// Set window background color virtual void setBackColor(FXColor clr); /// Get background color FXColor getBackColor() const; /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const; /// Change selected background color void setSelBackColor(FXColor clr); /// Return selected background color FXColor getSelBackColor() const; /// Change selected text color void setSelTextColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const; /// Return sort function FXListSortFunc getSortFunc() const; /// Change sort function void setSortFunc(FXListSortFunc func); /// Set the combobox help text void setHelpText(const FXString& txt); /// Get the combobox help text const FXString& getHelpText() const; /// Set the tool tip message for this combobox void setTipText(const FXString& txt); /// Get the tool tip message for this combobox const FXString& getTipText() const; /// Save combobox to a stream virtual void save(FXStream& store) const; /// Load combobox from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXListBox(); }; } #endif fox-1.6.49/include/FXMenuCascade.h0000664000175000017500000000775012130340076013541 00000000000000/******************************************************************************** * * * M e n u C a s c a d e W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuCascade.h,v 1.24 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUCASCADE_H #define FXMENUCASCADE_H #ifndef FXMENUCAPTION_H #include "FXMenuCaption.h" #endif namespace FX { class FXPopup; /** * The cascade menu widget is used to bring up a sub menu from a * pull down menu. */ class FXAPI FXMenuCascade : public FXMenuCaption { FXDECLARE(FXMenuCascade) protected: FXPopup *pane; protected: FXMenuCascade(); void drawTriangle(FXDCWindow& dc,FXint l,FXint t,FXint r,FXint b); private: FXMenuCascade(const FXMenuCascade&); FXMenuCascade &operator=(const FXMenuCascade&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onButtonPress(FXObject*,FXSelector,void*); long onButtonRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCmdPost(FXObject*,FXSelector,void*); long onCmdUnpost(FXObject*,FXSelector,void*); public: enum { ID_MENUTIMER=FXMenuCaption::ID_LAST, ID_LAST }; public: /// Construct a menu cascade responsible for the given popup menu FXMenuCascade(FXComposite* p,const FXString& text,FXIcon* ic=NULL,FXPopup* pup=NULL,FXuint opts=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Yes it can receive the focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Set popup menu to pop up void setMenu(FXPopup *pup){ pane = pup; } /// Return popup menu FXPopup* getMenu() const { return pane; } /// True if this menu or is popup logically contains the mouse virtual bool contains(FXint parentx,FXint parenty) const; /// Save menu to a stream virtual void save(FXStream& store) const; /// Load menu from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXMenuCascade(); }; } #endif fox-1.6.49/include/FX88596Codec.h0000644000175000017500000000110411637250333013022 00000000000000#ifndef FX88596CODEC_H #define FX88596CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-6 Codec class FXAPI FX88596Codec : public FXTextCodec { FXDECLARE(FX88596Codec) public: FX88596Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88596Codec(){} }; } #endif fox-1.6.49/include/FXButton.h0000664000175000017500000001342712130340076012642 00000000000000/******************************************************************************** * * * B u t t o n W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXButton.h,v 1.38 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXBUTTON_H #define FXBUTTON_H #ifndef FXLABEL_H #include "FXLabel.h" #endif namespace FX { /// Button state bits enum { STATE_UP = 0, /// Button is up STATE_DOWN = 1, /// Button is down STATE_ENGAGED = 2, /// Button is engaged STATE_UNCHECKED = STATE_UP, /// Same as STATE_UP (used for check buttons or radio buttons) STATE_CHECKED = STATE_ENGAGED /// Same as STATE_ENGAGED (used for check buttons or radio buttons) }; /// Button flags enum { BUTTON_AUTOGRAY = 0x00800000, /// Automatically gray out when not updated BUTTON_AUTOHIDE = 0x01000000, /// Automatically hide button when not updated BUTTON_TOOLBAR = 0x02000000, /// Toolbar style button [flat look] BUTTON_DEFAULT = 0x04000000, /// May become default button when receiving focus BUTTON_INITIAL = 0x08000000, /// This button is the initial default button BUTTON_NORMAL = (FRAME_RAISED|FRAME_THICK|JUSTIFY_NORMAL|ICON_BEFORE_TEXT) }; /** * A button provides a push button, with optional icon and/or text label. * When pressed, the button widget sends a SEL_COMMAND to its target. * Passing the BUTTON_TOOLBAR style option gives buttons a "flat" look, and * causes the edge of the button to be raised when the cursor moves over it. * Passing BUTTON_DEFAULT allows the button to become the default button in * a dialog, when the focus moves to it. The default widget in a dialog * is the widget which will accept the RETURN key when it is pressed. * The BUTTON_INITIAL flag makes the button the default widget when the * focus moves to a widget which can not itself be a default widget. * There should be only a single button in the dialog which is the * initial default; typically this is the OK or CLOSE button. * The option BUTTON_AUTOGRAY (BUTTON_AUTOHIDE) causes the button to be grayed * out (hidden) if its handler does not respond to the SEL_UPDATE message. * This is useful when messages are delegated, for example when using a * multiple document interface, where the ultimaye destination of a message * can be changed. */ class FXAPI FXButton : public FXLabel { FXDECLARE(FXButton) protected: FXuchar state; protected: FXButton(); private: FXButton(const FXButton&); FXButton& operator=(const FXButton&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCheck(FXObject*,FXSelector,void*); long onUncheck(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); public: /// Construct button with text and icon FXButton(FXComposite* p,const FXString& text,FXIcon* ic=NULL,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=BUTTON_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Returns true because a button can receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Set as default button virtual void setDefault(FXbool enable=TRUE); /// Set the button state void setState(FXuint s); /// Get the button state FXuint getState() const { return state; } /// Set the button style flags void setButtonStyle(FXuint style); /// Get the button style flags FXuint getButtonStyle() const; }; } #endif fox-1.6.49/include/FXString.h0000664000175000017500000006755012130340076012643 00000000000000/******************************************************************************** * * * S t r i n g O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXString.h,v 1.120 2006/02/20 03:32:12 fox Exp $ * ********************************************************************************/ #ifndef FXSTRING_H #define FXSTRING_H namespace FX { /** * FXString provides essential string manipulation capabilities. */ class FXAPI FXString { private: FXchar* str; public: static const FXchar null[]; static const FXchar hex[17]; static const FXchar HEX[17]; public: static const signed char utfBytes[256]; public: /// Create empty string FXString(); /// Copy construct FXString(const FXString& s); /// Construct and init from string FXString(const FXchar* s); /// Construct and init from wide character string FXString(const FXwchar* s); /// Construct and init from narrow character string FXString(const FXnchar* s); /// Construct and init with substring FXString(const FXchar* s,FXint n); /// Construct and init with wide character substring FXString(const FXwchar* s,FXint n); /// Construct and init with narrow character substring FXString(const FXnchar* s,FXint n); /// Construct and fill with constant FXString(FXchar c,FXint n); /// Length of text in bytes FXint length() const { return *(((FXint*)str)-1); } /// Change the length of the string to len void length(FXint len); /// Count number of utf8 characters FXint count() const; /// Count number of utf8 characters in subrange FXint count(FXint pos,FXint len) const; /// Return byte offset of utf8 character at index FXint offset(FXint indx) const; /// Return index of utf8 character at byte offset FXint index(FXint offs) const; /// Validate position to point to begin of utf8 character FXint validate(FXint p) const; /// Return extent of utf8 character at position FXint extent(FXint p) const { return utfBytes[(FXuchar)str[p]]; } /// Return start of next utf8 character FXint inc(FXint p) const; /// Return start of previous utf8 character FXint dec(FXint p) const; /// Get text contents const FXchar* text() const { return (const FXchar*)str; } /// See if string is empty bool empty() const { return (((FXint*)str)[-1]==0); } /// See if string is empty bool operator!() const { return (((FXint*)str)[-1]==0); } /// Return a non-const reference to the ith character FXchar& operator[](FXint i){ return str[i]; } /// Return a const reference to the ith character const FXchar& operator[](FXint i) const { return str[i]; } /// Return a non-const reference to the ith character FXchar& at(FXint i){ return str[i]; } /// Return a const reference to the ith character const FXchar& at(FXint i) const { return str[i]; } /// Return wide character starting at offset i FXwchar wc(FXint i) const; /// Assign a string to this FXString& operator=(const FXchar* s); /// Assign a wide character string to this FXString& operator=(const FXwchar* s); /// Assign a narrow character string to this FXString& operator=(const FXnchar* s); /// Assign another string to this FXString& operator=(const FXString& s); /// Convert to lower case FXString& lower(); /// Convert to upper case FXString& upper(); /// Return num partition(s) beginning at start from a string separated by delimiters delim. FXString section(FXchar delim,FXint start,FXint num=1) const; /// Return num partition(s) beginning at start from a string separated by set of delimiters from delim of size n FXString section(const FXchar* delim,FXint n,FXint start,FXint num) const; /// Return num partition(s) beginning at start from a string separated by set of delimiters from delim. FXString section(const FXchar* delim,FXint start,FXint num=1) const; /// Return num partition(s) beginning at start from a string separated by set of delimiters from delim. FXString section(const FXString& delim,FXint start,FXint num=1) const; /// Adopt string s, leaving s empty FXString& adopt(FXString& s); /// Assign character c to this string FXString& assign(FXchar c); /// Assign n characters c to this string FXString& assign(FXchar c,FXint n); /// Assign first n characters of string s to this string FXString& assign(const FXchar *s,FXint n); /// Assign first n characters of wide character string s to this string FXString& assign(const FXwchar *s,FXint n); /// Assign first n characters of narrow character string s to this string FXString& assign(const FXnchar *s,FXint n); /// Assign string s to this string FXString& assign(const FXchar* s); /// Assign wide character string s to this string FXString& assign(const FXwchar* s); /// Assign narrow character string s to this string FXString& assign(const FXnchar* s); /// Assign string s to this string FXString& assign(const FXString& s); /// Insert character at specified position FXString& insert(FXint pos,FXchar c); /// Insert n characters c at specified position FXString& insert(FXint pos,FXchar c,FXint n); /// Insert first n characters of string at specified position FXString& insert(FXint pos,const FXchar* s,FXint n); /// Insert first n characters of wide character string at specified position FXString& insert(FXint pos,const FXwchar* s,FXint n); /// Insert first n characters of narrow character string at specified position FXString& insert(FXint pos,const FXnchar* s,FXint n); /// Insert string at specified position FXString& insert(FXint pos,const FXchar* s); /// Insert wide character string at specified position FXString& insert(FXint pos,const FXwchar* s); /// Insert narrow character string at specified position FXString& insert(FXint pos,const FXnchar* s); /// Insert string at specified position FXString& insert(FXint pos,const FXString& s); /// Prepend string with input character FXString& prepend(FXchar c); /// Prepend string with n characters c FXString& prepend(FXchar c,FXint n); /// Prepend first n characters of string s FXString& prepend(const FXchar* s,FXint n); /// Prepend first n characters of wide character string s FXString& prepend(const FXwchar* s,FXint n); /// Prepend first n characters of narrow character string s FXString& prepend(const FXnchar* s,FXint n); /// Prepend string with string s FXString& prepend(const FXchar* s); /// Prepend string with wide character string FXString& prepend(const FXwchar* s); /// Prepend string with narrow character string FXString& prepend(const FXnchar* s); /// Prepend string with string s FXString& prepend(const FXString& s); /// Append character c to this string FXString& append(FXchar c); /// Append n characters c to this string FXString& append(FXchar c,FXint n); /// Append first n characters of string s to this string FXString& append(const FXchar* s,FXint n); /// Append first n characters of wide character string s to this string FXString& append(const FXwchar* s,FXint n); /// Append first n characters of narrow character string s to this string FXString& append(const FXnchar* s,FXint n); /// Append string s to this string FXString& append(const FXchar* s); /// Append wide character string s to this string FXString& append(const FXwchar* s); /// Append narrow character string s to this string FXString& append(const FXnchar* s); /// Append string s to this string FXString& append(const FXString& s); /// Replace a single character FXString& replace(FXint pos,FXchar c); /// Replace the m characters at pos with n characters c FXString& replace(FXint pos,FXint m,FXchar c,FXint n); /// Replaces the m characters at pos with first n characters of string s FXString& replace(FXint pos,FXint m,const FXchar* s,FXint n); /// Replaces the m characters at pos with first n characters of wide character string s FXString& replace(FXint pos,FXint m,const FXwchar* s,FXint n); /// Replaces the m characters at pos with first n characters of narrow character string s FXString& replace(FXint pos,FXint m,const FXnchar* s,FXint n); /// Replace the m characters at pos with string s FXString& replace(FXint pos,FXint m,const FXchar* s); /// Replace the m characters at pos with wide character string s FXString& replace(FXint pos,FXint m,const FXwchar* s); /// Replace the m characters at pos with narrow character string s FXString& replace(FXint pos,FXint m,const FXnchar* s); /// Replace the m characters at pos with string s FXString& replace(FXint pos,FXint m,const FXString& s); /// Move range of m characters from src position to dst position FXString& move(FXint dst,FXint src,FXint n); /// Remove one character FXString& erase(FXint pos); /// Remove substring FXString& erase(FXint pos,FXint n); /// Return number of occurrences of ch in string FXint contains(FXchar ch) const; /// Return number of occurrences of string sub in string FXint contains(const FXchar* sub,FXint n) const; /// Return number of occurrences of string sub in string FXint contains(const FXchar* sub) const; /// Return number of occurrences of string sub in string FXint contains(const FXString& sub) const; /// Substitute one character by another FXString& substitute(FXchar org,FXchar sub,bool all=true); /// Substitute one string by another FXString& substitute(const FXchar* org,FXint olen,const FXchar *rep,FXint rlen,bool all=true); /// Substitute one string by another FXString& substitute(const FXchar* org,const FXchar *rep,bool all=true); /// Substitute one string by another FXString& substitute(const FXString& org,const FXString& rep,bool all=true); /// Simplify whitespace in string FXString& simplify(); /// Remove leading and trailing whitespace FXString& trim(); /// Remove leading whitespace FXString& trimBegin(); /// Remove trailing whitespace FXString& trimEnd(); /// Truncate string at pos FXString& trunc(FXint pos); /// Clear FXString& clear(); /// Get left most part FXString left(FXint n) const; /// Get right most part FXString right(FXint n) const; /// Get some part in the middle FXString mid(FXint pos,FXint n) const; /** * Return all characters before the n-th occurrence of ch, * searching from the beginning of the string. If the character * is not found, return the entire string. If n<=0, return * the empty string. */ FXString before(FXchar ch,FXint n=1) const; /** * Return all characters before the n-th occurrence of ch, * searching from the end of the string. If the character * is not found, return the empty string. If n<=0, return * the entire string. */ FXString rbefore(FXchar ch,FXint n=1) const; /** * Return all characters after the nth occurrence of ch, * searching from the beginning of the string. If the character * is not found, return the empty string. If n<=0, return * the entire string. */ FXString after(FXchar ch,FXint n=1) const; /** * Return all characters after the nth occurrence of ch, * searching from the end of the string. If the character * is not found, return the entire string. If n<=0, return * the empty string. */ FXString rafter(FXchar ch,FXint n=1) const; /// Find a character, searching forward; return position or -1 FXint find(FXchar c,FXint pos=0) const; /// Find a character, searching backward; return position or -1 FXint rfind(FXchar c,FXint pos=2147483647) const; /// Find n-th occurrence of character, searching forward; return position or -1 FXint find(FXchar c,FXint pos,FXint n) const; /// Find n-th occurrence of character, searching backward; return position or -1 FXint rfind(FXchar c,FXint pos,FXint n) const; /// Find a substring of length n, searching forward; return position or -1 FXint find(const FXchar* substr,FXint n,FXint pos) const; /// Find a substring of length n, searching backward; return position or -1 FXint rfind(const FXchar* substr,FXint n,FXint pos) const; /// Find a substring, searching forward; return position or -1 FXint find(const FXchar* substr,FXint pos=0) const; /// Find a substring, searching backward; return position or -1 FXint rfind(const FXchar* substr,FXint pos=2147483647) const; /// Find a substring, searching forward; return position or -1 FXint find(const FXString& substr,FXint pos=0) const; /// Find a substring, searching backward; return position or -1 FXint rfind(const FXString& substr,FXint pos=2147483647) const; /// Find first character in the set of size n, starting from pos; return position or -1 FXint find_first_of(const FXchar* set,FXint n,FXint pos) const; /// Find first character in the set, starting from pos; return position or -1 FXint find_first_of(const FXchar* set,FXint pos=0) const; /// Find first character in the set, starting from pos; return position or -1 FXint find_first_of(const FXString& set,FXint pos=0) const; /// Find first character, starting from pos; return position or -1 FXint find_first_of(FXchar c,FXint pos=0) const; /// Find last character in the set of size n, starting from pos; return position or -1 FXint find_last_of(const FXchar* set,FXint n,FXint pos) const; /// Find last character in the set, starting from pos; return position or -1 FXint find_last_of(const FXchar* set,FXint pos=2147483647) const; /// Find last character in the set, starting from pos; return position or -1 FXint find_last_of(const FXString& set,FXint pos=2147483647) const; /// Find last character, starting from pos; return position or -1 FXint find_last_of(FXchar c,FXint pos=0) const; /// Find first character NOT in the set of size n, starting from pos; return position or -1 FXint find_first_not_of(const FXchar* set,FXint n,FXint pos) const; /// Find first character NOT in the set, starting from pos; return position or -1 FXint find_first_not_of(const FXchar* set,FXint pos=0) const; /// Find first character NOT in the set, starting from pos; return position or -1 FXint find_first_not_of(const FXString& set,FXint pos=0) const; /// Find first character NOT equal to c, starting from pos; return position or -1 FXint find_first_not_of(FXchar c,FXint pos=0) const; /// Find last character NOT in the set of size n, starting from pos; return position or -1 FXint find_last_not_of(const FXchar* set,FXint n,FXint pos) const; /// Find last character NOT in the set, starting from pos; return position or -1 FXint find_last_not_of(const FXchar* set,FXint pos=2147483647) const; /// Find last character NOT in the set, starting from pos; return position or -1 FXint find_last_not_of(const FXString& set,FXint pos=2147483647) const; /// Find last character NOT equal to c, starting from pos; return position or -1 FXint find_last_not_of(FXchar c,FXint pos=0) const; /// Format a string a-la printf FXString& format(const FXchar* fmt,...) FX_PRINTF(2,3) ; FXString& vformat(const FXchar* fmt,va_list args); /// Scan a string a-la scanf FXint scan(const FXchar* fmt,...) const FX_SCANF(2,3) ; FXint vscan(const FXchar* fmt,va_list args) const; /// Get hash value FXuint hash() const; /// Compare friend FXAPI FXint compare(const FXchar* s1,const FXchar* s2); friend FXAPI FXint compare(const FXchar* s1,const FXString& s2); friend FXAPI FXint compare(const FXString& s1,const FXchar* s2); friend FXAPI FXint compare(const FXString& s1,const FXString& s2); /// Compare up to n friend FXAPI FXint compare(const FXchar* s1,const FXchar* s2,FXint n); friend FXAPI FXint compare(const FXchar* s1,const FXString& s2,FXint n); friend FXAPI FXint compare(const FXString& s1,const FXchar* s2,FXint n); friend FXAPI FXint compare(const FXString& s1,const FXString& s2,FXint n); /// Compare case insensitive friend FXAPI FXint comparecase(const FXchar* s1,const FXchar* s2); friend FXAPI FXint comparecase(const FXchar* s1,const FXString& s2); friend FXAPI FXint comparecase(const FXString& s1,const FXchar* s2); friend FXAPI FXint comparecase(const FXString& s1,const FXString& s2); /// Compare case insensitive up to n friend FXAPI FXint comparecase(const FXchar* s1,const FXchar* s2,FXint n); friend FXAPI FXint comparecase(const FXchar* s1,const FXString& s2,FXint n); friend FXAPI FXint comparecase(const FXString& s1,const FXchar* s2,FXint n); friend FXAPI FXint comparecase(const FXString& s1,const FXString& s2,FXint n); /// Compare with numeric interpretation friend FXAPI FXint compareversion(const FXchar* s1,const FXchar* s2); friend FXAPI FXint compareversion(const FXchar* s1,const FXString& s2); friend FXAPI FXint compareversion(const FXString& s1,const FXchar* s2); friend FXAPI FXint compareversion(const FXString& s1,const FXString& s2); /// Comparison operators friend FXAPI bool operator==(const FXString& s1,const FXString& s2); friend FXAPI bool operator==(const FXString& s1,const FXchar* s2); friend FXAPI bool operator==(const FXchar* s1,const FXString& s2); friend FXAPI bool operator!=(const FXString& s1,const FXString& s2); friend FXAPI bool operator!=(const FXString& s1,const FXchar* s2); friend FXAPI bool operator!=(const FXchar* s1,const FXString& s2); friend FXAPI bool operator<(const FXString& s1,const FXString& s2); friend FXAPI bool operator<(const FXString& s1,const FXchar* s2); friend FXAPI bool operator<(const FXchar* s1,const FXString& s2); friend FXAPI bool operator<=(const FXString& s1,const FXString& s2); friend FXAPI bool operator<=(const FXString& s1,const FXchar* s2); friend FXAPI bool operator<=(const FXchar* s1,const FXString& s2); friend FXAPI bool operator>(const FXString& s1,const FXString& s2); friend FXAPI bool operator>(const FXString& s1,const FXchar* s2); friend FXAPI bool operator>(const FXchar* s1,const FXString& s2); friend FXAPI bool operator>=(const FXString& s1,const FXString& s2); friend FXAPI bool operator>=(const FXString& s1,const FXchar* s2); friend FXAPI bool operator>=(const FXchar* s1,const FXString& s2); /// Append operators FXString& operator+=(const FXString& s); FXString& operator+=(const FXchar* s); FXString& operator+=(const FXwchar* s); FXString& operator+=(const FXnchar* s); FXString& operator+=(FXchar c); /// Concatenate one FXString with another friend FXAPI FXString operator+(const FXString& s1,const FXString& s2); /// Concatenate FXString and a string friend FXAPI FXString operator+(const FXString& s1,const FXchar* s2); friend FXAPI FXString operator+(const FXString& s1,const FXwchar* s2); friend FXAPI FXString operator+(const FXString& s1,const FXnchar* s2); /// Concatenate string and FXString friend FXAPI FXString operator+(const FXchar* s1,const FXString& s2); friend FXAPI FXString operator+(const FXwchar* s1,const FXString& s2); friend FXAPI FXString operator+(const FXnchar* s1,const FXString& s2); /// Concatenate string and single character friend FXAPI FXString operator+(const FXString& s,FXchar c); friend FXAPI FXString operator+(FXchar c,const FXString& s); /// Saving to a stream friend FXAPI FXStream& operator<<(FXStream& store,const FXString& s); /// Load from a stream friend FXAPI FXStream& operator>>(FXStream& store,FXString& s); /// Format a string a-la printf friend FXAPI FXString FXStringFormat(const FXchar* fmt,...) FX_PRINTF(1,2) ; friend FXAPI FXString FXStringVFormat(const FXchar* fmt,va_list args); /** * Convert integer number to a string, using the given number * base, which must be between 2 and 16. */ friend FXAPI FXString FXStringVal(FXint num,FXint base); friend FXAPI FXString FXStringVal(FXuint num,FXint base); /** * Convert long integer number to a string, using the given number * base, which must be between 2 and 16. */ friend FXAPI FXString FXStringVal(FXlong num,FXint base); friend FXAPI FXString FXStringVal(FXulong num,FXint base); /** * Convert real number to a string, using the given procision and * exponential notation mode, which may be FALSE (never), TRUE (always), or * MAYBE (when needed). */ friend FXAPI FXString FXStringVal(FXfloat num,FXint prec,FXint exp); friend FXAPI FXString FXStringVal(FXdouble num,FXint prec,FXint exp); /// Convert string to a integer number, assuming given number base friend FXAPI FXint FXIntVal(const FXString& s,FXint base); friend FXAPI FXuint FXUIntVal(const FXString& s,FXint base); /// Convert string to long integer number, assuming given number base friend FXAPI FXlong FXLongVal(const FXString& s,FXint base); friend FXAPI FXulong FXULongVal(const FXString& s,FXint base); /// Convert string into real number friend FXAPI FXfloat FXFloatVal(const FXString& s); friend FXAPI FXdouble FXDoubleVal(const FXString& s); /// Return utf8 from ascii containing unicode escapes friend FXAPI FXString fromAscii(const FXString& s); /// Return ascii containing unicode escapes from utf8 friend FXAPI FXString toAscii(const FXString& s); /// Escape special characters in a string friend FXAPI FXString escape(const FXString& s); /// Unescape special characters in a string friend FXAPI FXString unescape(const FXString& s); /// Return normalized string, i.e. reordering of diacritical marks friend FXAPI FXString normalize(const FXString& s); /// Return normalized decomposition of string friend FXAPI FXString decompose(const FXString& s,FXuint kind); /// Return normalized composition of string; this first performs normalized decomposition friend FXAPI FXString compose(const FXString& s,FXuint kind); /// Swap two strings friend inline void swap(FXString& a,FXString& b); /// Convert to and from dos friend FXAPI FXString& unixToDos(FXString& str); friend FXAPI FXString& dosToUnix(FXString& str); /// Delete ~FXString(); }; inline void swap(FXString& a,FXString& b){ FXchar *t=a.str; a.str=b.str; b.str=t; } extern FXAPI FXint compare(const FXchar* s1,const FXchar* s2); extern FXAPI FXint compare(const FXchar* s1,const FXString& s2); extern FXAPI FXint compare(const FXString& s1,const FXchar* s2); extern FXAPI FXint compare(const FXString& s1,const FXString& s2); extern FXAPI FXint compare(const FXchar* s1,const FXchar* s2,FXint n); extern FXAPI FXint compare(const FXchar* s1,const FXString& s2,FXint n); extern FXAPI FXint compare(const FXString& s1,const FXchar* s2,FXint n); extern FXAPI FXint compare(const FXString& s1,const FXString& s2,FXint n); extern FXAPI FXint comparecase(const FXchar* s1,const FXchar* s2); extern FXAPI FXint comparecase(const FXchar* s1,const FXString& s2); extern FXAPI FXint comparecase(const FXString& s1,const FXchar* s2); extern FXAPI FXint comparecase(const FXString& s1,const FXString& s2); extern FXAPI FXint comparecase(const FXchar* s1,const FXchar* s2,FXint n); extern FXAPI FXint comparecase(const FXchar* s1,const FXString& s2,FXint n); extern FXAPI FXint comparecase(const FXString& s1,const FXchar* s2,FXint n); extern FXAPI FXint comparecase(const FXString& s1,const FXString& s2,FXint n); extern FXAPI FXint compareversion(const FXchar* s1,const FXchar* s2); extern FXAPI FXint compareversion(const FXchar* s1,const FXString& s2); extern FXAPI FXint compareversion(const FXString& s1,const FXchar* s2); extern FXAPI FXint compareversion(const FXString& s1,const FXString& s2); extern FXAPI bool operator==(const FXString& s1,const FXString& s2); extern FXAPI bool operator==(const FXString& s1,const FXchar* s2); extern FXAPI bool operator==(const FXchar* s1,const FXString& s2); extern FXAPI bool operator!=(const FXString& s1,const FXString& s2); extern FXAPI bool operator!=(const FXString& s1,const FXchar* s2); extern FXAPI bool operator!=(const FXchar* s1,const FXString& s2); extern FXAPI bool operator<(const FXString& s1,const FXString& s2); extern FXAPI bool operator<(const FXString& s1,const FXchar* s2); extern FXAPI bool operator<(const FXchar* s1,const FXString& s2); extern FXAPI bool operator<=(const FXString& s1,const FXString& s2); extern FXAPI bool operator<=(const FXString& s1,const FXchar* s2); extern FXAPI bool operator<=(const FXchar* s1,const FXString& s2); extern FXAPI bool operator>(const FXString& s1,const FXString& s2); extern FXAPI bool operator>(const FXString& s1,const FXchar* s2); extern FXAPI bool operator>(const FXchar* s1,const FXString& s2); extern FXAPI bool operator>=(const FXString& s1,const FXString& s2); extern FXAPI bool operator>=(const FXString& s1,const FXchar* s2); extern FXAPI bool operator>=(const FXchar* s1,const FXString& s2); extern FXAPI FXString operator+(const FXString& s1,const FXString& s2); extern FXAPI FXString operator+(const FXString& s1,const FXchar* s2); extern FXAPI FXString operator+(const FXString& s1,const FXwchar* s2); extern FXAPI FXString operator+(const FXString& s1,const FXnchar* s2); extern FXAPI FXString operator+(const FXchar* s1,const FXString& s2); extern FXAPI FXString operator+(const FXwchar* s1,const FXString& s2); extern FXAPI FXString operator+(const FXnchar* s1,const FXString& s2); extern FXAPI FXString operator+(const FXString& s,FXchar c); extern FXAPI FXString operator+(FXchar c,const FXString& s); extern FXAPI FXStream& operator<<(FXStream& store,const FXString& s); extern FXAPI FXStream& operator>>(FXStream& store,FXString& s); extern FXAPI FXString FXStringFormat(const FXchar* fmt,...) FX_PRINTF(1,2) ; extern FXAPI FXString FXStringVFormat(const FXchar* fmt,va_list args); extern FXAPI FXString FXStringVal(FXint num,FXint base=10); extern FXAPI FXString FXStringVal(FXuint num,FXint base=10); extern FXAPI FXString FXStringVal(FXlong num,FXint base=10); extern FXAPI FXString FXStringVal(FXulong num,FXint base=10); extern FXAPI FXString FXStringVal(FXfloat num,FXint prec=6,FXint exp=MAYBE); extern FXAPI FXString FXStringVal(FXdouble num,FXint prec=6,FXint exp=MAYBE); extern FXAPI FXint FXIntVal(const FXString& s,FXint base=10); extern FXAPI FXuint FXUIntVal(const FXString& s,FXint base=10); extern FXAPI FXlong FXLongVal(const FXString& s,FXint base=10); extern FXAPI FXulong FXULongVal(const FXString& s,FXint base=10); extern FXAPI FXfloat FXFloatVal(const FXString& s); extern FXAPI FXdouble FXDoubleVal(const FXString& s); extern FXAPI FXString fromAscii(const FXString& s); extern FXAPI FXString toAscii(const FXString& s); extern FXAPI FXString escape(const FXString& s); extern FXAPI FXString unescape(const FXString& s); extern FXAPI FXString normalize(const FXString& s); extern FXAPI FXString decompose(const FXString& s,FXuint kind); extern FXAPI FXString compose(const FXString& s,FXuint kind); extern FXAPI FXString& unixToDos(FXString& str); extern FXAPI FXString& dosToUnix(FXString& str); } #endif fox-1.6.49/include/FXPopup.h0000664000175000017500000001516412130340076012472 00000000000000/******************************************************************************** * * * P o p u p W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPopup.h,v 1.35 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXPOPUP_H #define FXPOPUP_H #ifndef FXSHELL_H #include "FXShell.h" #endif namespace FX { /// Popup internal orientation enum { POPUP_VERTICAL = 0, /// Vertical orientation POPUP_HORIZONTAL = 0x00020000, /// Horizontal orientation POPUP_SHRINKWRAP = 0x00040000 /// Shrinkwrap to content }; /// Popup window class FXAPI FXPopup : public FXShell { FXDECLARE(FXPopup) private: FXPopup *prevActive; // Popup below this one in stack FXPopup *nextActive; // Popup above this one in stack protected: FXWindow *grabowner; // Window which will get grabbed when outside FXColor baseColor; FXColor hiliteColor; FXColor shadowColor; FXColor borderColor; FXint border; protected: FXPopup(); virtual bool doesOverrideRedirect() const; void drawBorderRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRidgeRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawGrooveRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawFrame(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); private: FXPopup(const FXPopup&); FXPopup &operator=(const FXPopup&); #ifdef WIN32 virtual const char* GetClass() const; #endif public: long onPaint(FXObject*,FXSelector,void*); long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); long onFocusNext(FXObject*,FXSelector,void*); long onFocusPrev(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMap(FXObject*,FXSelector,void*); long onButtonPress(FXObject*,FXSelector,void*); long onButtonRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onCmdUnpost(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onCmdChoice(FXObject*,FXSelector,void*); public: enum { ID_CHOICE=FXShell::ID_LAST, ID_LAST=ID_CHOICE+1000 }; public: /// Construct popup pane FXPopup(FXWindow* owner,FXuint opts=POPUP_VERTICAL|FRAME_RAISED|FRAME_THICK,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Return the default width of this window virtual FXint getDefaultWidth(); /// Return the default height of this window virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Return a pointer to the prior active popup FXPopup* getPrevActive() const { return prevActive; } /// Return a pointer to the next active popup FXPopup* getNextActive() const { return nextActive; } /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Show this window virtual void show(); /// Hide this window virtual void hide(); /// Change frame style void setFrameStyle(FXuint style); /// Return frame style FXuint getFrameStyle() const; /// Return border width FXint getBorderWidth() const { return border; } /// Change highlight color void setHiliteColor(FXColor clr); /// Return highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change shadow color void setShadowColor(FXColor clr); /// Return shadow color FXColor getShadowColor() const { return shadowColor; } /// Change border color void setBorderColor(FXColor clr); /// Return border color FXColor getBorderColor() const { return borderColor; } /// Change base color void setBaseColor(FXColor clr); /// Return base color FXColor getBaseColor() const { return baseColor; } /// Popup the menu and grab to the given owner virtual void popup(FXWindow* grabto,FXint x,FXint y,FXint w=0,FXint h=0); /// Pop down the menu virtual void popdown(); /// Return current grab owner FXWindow* getGrabOwner() const; // /// Popup the menu and grab to the given owner // virtual FXint popup(FXint x,FXint y,FXint w=0,FXint h=0); // // /// Pop down the menu // virtual void popdown(FXint value); /// Return popup orientation FXuint getOrientation() const; /// Change popup orientation void setOrientation(FXuint orient); /// Return shrinkwrap mode FXbool getShrinkWrap() const; /// Change shrinkwrap mode void setShrinkWrap(FXbool sw); virtual bool doesSaveUnder() const; /// Destructor virtual ~FXPopup(); }; } #endif fox-1.6.49/include/FXICOImage.h0000664000175000017500000000655112130340076012744 00000000000000/******************************************************************************** * * * I C O I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Janusz Ganczarski. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXICOImage.h,v 1.20 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXICOIMAGE_H #define FXICOIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// ICO (Microsoft icon format) graphics file class FXAPI FXICOImage : public FXImage { FXDECLARE(FXICOImage) protected: FXICOImage(){} private: FXICOImage(const FXICOImage&); FXICOImage &operator=(const FXICOImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct image from memory stream formatted in Microsoft icon format FXICOImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in Microsoft icon format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in Microsoft icon format virtual bool loadPixels(FXStream& store); /// Destroy image virtual ~FXICOImage(); }; #ifndef FXLOADICO #define FXLOADICO /** * Check if stream contains a ICO, return TRUE if so. */ extern FXAPI bool fxcheckICO(FXStream& store); /** * Load an ICO (Microsoft icon format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadICO(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXint& xspot,FXint& yspot); /** * Save an ICO (Microsoft icon format) file to a stream. * If no hot-spot given, save as an ICO instead of a CUR resource. */ extern FXAPI bool fxsaveICO(FXStream& store,const FXColor *data,FXint width,FXint height,FXint xspot=-1,FXint yspot=-1); #endif } #endif fox-1.6.49/include/FXColorRing.h0000664000175000017500000001426112130340076013262 00000000000000/******************************************************************************** * * * C o l o r R i n g W i d g e t * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXColorRing.h,v 1.11 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCOLORRING_H #define FXCOLORRING_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { class FXImage; /** * A Color Ring widget provides an intuitive way to specify a color. * The outer ring of the widget is rotated to control the hue of the color * being specified, while the inner triangle varies the color saturation * and the brightness of the color. The color saturation axis of the * triangle goes from a fully saturated "pure" color to "pastel" color; * the brightness goes from black to a bright color. */ class FXAPI FXColorRing : public FXFrame { FXDECLARE(FXColorRing) protected: FXImage *dial; // HSV dial image FXfloat hsv[3]; // Hue, saturation, value FXint ringwidth; // Width of hue ring FXint ringouter; // Outer radius FXint ringinner; // Inner radius FXint dialx; // Dial x location FXint dialy; // Dial y location FXint satvalx; // Saturation value x FXint satvaly; // Saturation value y FXint huex; // Hue x FXint huey; // Hue y FXint clrx; // Color corner of triangle FXint clry; FXint blkx; // Black corner of triangle FXint blky; FXint whtx; // White corner of triangle FXint whty; FXString tip; // Tooltip value FXString help; // Help value FXuchar mode; // Mode widget is in protected: FXColorRing(); void updatering(); FXfloat hueFromXY(FXint x,FXint y) const; void hueToXY(FXint& x,FXint& y,FXfloat hue) const; void satValToXY(FXint& x,FXint& y,FXfloat s,FXfloat v) const; void satValFromXY(FXfloat& s,FXfloat& v,FXint x,FXint y) const; FXbool inCorner(FXint x,FXint y) const; FXbool inHueRing(FXint x,FXint y) const; FXbool inTriangle(FXint x,FXint y) const; protected: enum { MOUSE_NONE, // No mouse operation MOUSE_HUE, // Moving in hue-ring MOUSE_SATVAL // Moving in saturation/value triangle }; private: FXColorRing(const FXColorRing&); FXColorRing &operator=(const FXColorRing&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Construct color ring with initial color clr FXColorRing(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change hue void setHue(FXfloat h); /// Return hue FXfloat getHue() const { return hsv[0]; } /// Change saturation void setSat(FXfloat s); /// Return saturation FXfloat getSat() const { return hsv[1]; } /// Change value void setVal(FXfloat v); /// Return value FXfloat getVal() const { return hsv[2]; } /// Set hue, saturation, value void setHueSatVal(FXfloat h,FXfloat s,FXfloat v); /// Change width of hue ring void setRingWidth(FXint rw); /// Return width of hue ring FXint getRingWidth() const { return ringwidth; } /// Set status line help text for this color well void setHelpText(const FXString& text){ help=text; } /// Get status line help text for this color well const FXString& getHelpText() const { return help; } /// Set tool tip message for this color well void setTipText(const FXString& text){ tip=text; } /// Get tool tip message for this color well const FXString& getTipText() const { return tip; } /// Save color well to a stream virtual void save(FXStream& store) const; /// Load color well from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXColorRing(); }; } #endif fox-1.6.49/include/Makefile.in0000664000175000017500000004551512130340141013021 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include DIST_COMMON = $(foxinclude_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/fxver.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = fxver.h CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(foxincludedir)" HEADERS = $(foxinclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOX_BYTEORDER = @FOX_BYTEORDER@ FOX_MAJOR_VERSION = @FOX_MAJOR_VERSION@ FOX_MINOR_VERSION = @FOX_MINOR_VERSION@ FOX_PATCH_LEVEL = @FOX_PATCH_LEVEL@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_BASE_LIBS = @X_BASE_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ foxincludedir = $(includedir)/fox-1.6 CODECS = \ FX88591Codec.h \ FX88592Codec.h \ FX88593Codec.h \ FX88594Codec.h \ FX88595Codec.h \ FX88596Codec.h \ FX88597Codec.h \ FX88598Codec.h \ FX88599Codec.h \ FX885910Codec.h \ FX885911Codec.h \ FX885913Codec.h \ FX885914Codec.h \ FX885915Codec.h \ FX885916Codec.h \ FXCP437Codec.h \ FXCP850Codec.h \ FXCP852Codec.h \ FXCP855Codec.h \ FXCP856Codec.h \ FXCP857Codec.h \ FXCP860Codec.h \ FXCP861Codec.h \ FXCP862Codec.h \ FXCP863Codec.h \ FXCP864Codec.h \ FXCP865Codec.h \ FXCP866Codec.h \ FXCP869Codec.h \ FXCP874Codec.h \ FXCP1250Codec.h \ FXCP1251Codec.h \ FXCP1252Codec.h \ FXCP1253Codec.h \ FXCP1254Codec.h \ FXCP1255Codec.h \ FXCP1256Codec.h \ FXCP1257Codec.h \ FXCP1258Codec.h \ FXKOI8RCodec.h \ FXUTF8Codec.h \ FXUTF16Codec.h \ FXUTF32Codec.h foxinclude_HEADERS = \ $(CODECS) \ FX4Splitter.h \ FX7Segment.h \ FXAccelTable.h \ FXApp.h \ FXArray.h \ FXArrowButton.h \ FXBMPIcon.h \ FXBMPImage.h \ FXBitmap.h \ FXBitmapFrame.h \ FXBitmapView.h \ FXButton.h \ FXBZFileStream.h \ FXCURCursor.h \ FXCanvas.h \ FXCheckButton.h \ FXChoiceBox.h \ FXColorBar.h \ FXColorDialog.h \ FXColorList.h \ FXColorRing.h \ FXColorSelector.h \ FXColorWell.h \ FXColorWheel.h \ FXComboBox.h \ FXComposeContext.h \ FXComposite.h \ FXCursor.h \ FXDate.h \ FXDC.h \ FXDCPrint.h \ FXDCWindow.h \ FXDLL.h \ FXDataTarget.h \ FXDebugTarget.h \ FXDelegator.h \ FXDial.h \ FXDialogBox.h \ FXDict.h \ FXDir.h \ FXDirBox.h \ FXDirDialog.h \ FXDirList.h \ FXDirSelector.h \ FXDockBar.h \ FXDockHandler.h \ FXDockSite.h \ FXDockTitle.h \ FXDocument.h \ FXDragCorner.h \ FXDrawable.h \ FXDriveBox.h \ FXElement.h \ FXException.h \ FXExpression.h \ FXExtentd.h \ FXExtentf.h \ FXFile.h \ FXFileDialog.h \ FXFileDict.h \ FXFileList.h \ FXFileSelector.h \ FXFileStream.h \ FXFoldingList.h \ FXFont.h \ FXFontDialog.h \ FXFontSelector.h \ FXFrame.h \ FXGIFCursor.h \ FXGIFIcon.h \ FXGIFImage.h \ FXGLCanvas.h \ FXGLCone.h \ FXGLContext.h \ FXGLCube.h \ FXGLCylinder.h \ FXGLObject.h \ FXGLShape.h \ FXGLSphere.h \ FXGLTriangleMesh.h \ FXGLViewer.h \ FXGLVisual.h \ FXGroupBox.h \ FXGradientBar.h \ FXGUISignal.h \ FXGZFileStream.h \ FXHash.h \ FXHeader.h \ FXHorizontalFrame.h \ FXICOIcon.h \ FXICOImage.h \ FXIFFImage.h \ FXIFFIcon.h \ FXIO.h \ FXIcon.h \ FXIconDict.h \ FXIconList.h \ FXIconSource.h \ FXId.h \ FXImage.h \ FXImageFrame.h \ FXImageView.h \ FXInputDialog.h \ FXJPGIcon.h \ FXJPGImage.h \ FXKnob.h \ FXLabel.h \ FXList.h \ FXListBox.h \ FXMDIButton.h \ FXMDIChild.h \ FXMDIClient.h \ FXMainWindow.h \ FXMat3d.h \ FXMat4d.h \ FXMat3f.h \ FXMat4f.h \ FXMatrix.h \ FXMemoryStream.h \ FXMemMap.h \ FXMenuBar.h \ FXMenuButton.h \ FXMenuCaption.h \ FXMenuCascade.h \ FXMenuCheck.h \ FXMenuRadio.h \ FXMenuCommand.h \ FXMenuPane.h \ FXMenuSeparator.h \ FXMenuTitle.h \ FXMessageBox.h \ FXObject.h \ FXObjectList.h \ FXOptionMenu.h \ FXPCXIcon.h \ FXPCXImage.h \ FXPNGIcon.h \ FXPNGImage.h \ FXPPMIcon.h \ FXPPMImage.h \ FXPacker.h \ FXPath.h \ FXPicker.h \ FXPipe.h \ FXPoint.h \ FXPopup.h \ FXPrintDialog.h \ FXProgressBar.h \ FXProgressDialog.h \ FXQuatd.h \ FXQuatf.h \ FXRASIcon.h \ FXRASImage.h \ FXRGBIcon.h \ FXRGBImage.h \ FXRadioButton.h \ FXRangef.h \ FXRanged.h \ FXRealSlider.h \ FXRealSpinner.h \ FXRecentFiles.h \ FXRectangle.h \ FXRegion.h \ FXRegistry.h \ FXReplaceDialog.h \ FXRex.h \ FXRootWindow.h \ FXRuler.h \ FXRulerView.h \ FXScrollArea.h \ FXScrollBar.h \ FXScrollPane.h \ FXScrollWindow.h \ FXSearchDialog.h \ FXSeparator.h \ FXSettings.h \ FXShell.h \ FXShutter.h \ FXSize.h \ FXSlider.h \ FXSocket.h \ FXSpinner.h \ FXSpheref.h \ FXSphered.h \ FXSplashWindow.h \ FXSplitter.h \ FXSpring.h \ FXStat.h \ FXStatusBar.h \ FXStatusLine.h \ FXStream.h \ FXString.h \ FXStringDict.h \ FXSwitcher.h \ FXSystem.h \ FXTGAIcon.h \ FXTGAImage.h \ FXTIFIcon.h \ FXTIFImage.h \ FXTabBar.h \ FXTabBook.h \ FXTabItem.h \ FXTable.h \ FXText.h \ FXTextCodec.h \ FXTextField.h \ FXThread.h \ FXToggleButton.h \ FXToolBar.h \ FXToolBarGrip.h \ FXToolBarShell.h \ FXToolBarTab.h \ FXToolTip.h \ FXTopWindow.h \ FXTranslator.h \ FXTreeList.h \ FXTreeListBox.h \ FXTriStateButton.h \ FXUndoList.h \ FXURL.h \ FXVec2d.h \ FXVec2f.h \ FXVec3d.h \ FXVec3f.h \ FXVec4d.h \ FXVec4f.h \ FXVerticalFrame.h \ FXVisual.h \ FXWindow.h \ FXWizard.h \ FXXBMIcon.h \ FXXBMImage.h \ FXXPMIcon.h \ FXXPMImage.h \ fx.h \ fx3d.h \ fxascii.h \ fxdefs.h \ fxkeys.h \ fxunicode.h \ fxver.h \ xincs.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): fxver.h: $(top_builddir)/config.status $(srcdir)/fxver.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-foxincludeHEADERS: $(foxinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(foxinclude_HEADERS)'; test -n "$(foxincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(foxincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(foxincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(foxincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(foxincludedir)" || exit $$?; \ done uninstall-foxincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(foxinclude_HEADERS)'; test -n "$(foxincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(foxincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(foxincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-foxincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-foxincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-foxincludeHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-foxincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: fox-1.6.49/include/FXMemoryStream.h0000664000175000017500000001471112130340076014010 00000000000000/******************************************************************************** * * * M e m o r y S t r e a m C l a s s e s * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMemoryStream.h,v 1.11 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMEMORYSTREAM_H #define FXMEMORYSTREAM_H #ifndef FXSTREAM_H #include "FXStream.h" #endif namespace FX { /// Memory Store Definition class FXAPI FXMemoryStream : public FXStream { protected: virtual FXuval writeBuffer(FXuval count); virtual FXuval readBuffer(FXuval count); public: /// Create memory store FXMemoryStream(const FXObject* cont=NULL); /// Open file store bool open(FXStreamDirection save_or_load,FXuchar* data); /// Open memory store bool open(FXStreamDirection save_or_load,FXuval size,FXuchar* data); /// Take buffer away from stream void takeBuffer(FXuchar*& data,FXuval& size); /// Give buffer to stream void giveBuffer(FXuchar *data,FXuval size); /// Close memory store virtual bool close(); /// Get position FXlong position() const { return FXStream::position(); } /// Move to position virtual bool position(FXlong offset,FXWhence whence=FXFromStart); /// Save single items to stream FXMemoryStream& operator<<(const FXuchar& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXchar& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXushort& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXshort& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXuint& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXint& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXfloat& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXdouble& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXlong& v){ FXStream::operator<<(v); return *this; } FXMemoryStream& operator<<(const FXulong& v){ FXStream::operator<<(v); return *this; } /// Save arrays of items to stream FXMemoryStream& save(const FXuchar* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXchar* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXushort* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXshort* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXuint* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXint* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXfloat* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXdouble* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXlong* p,FXuval n){ FXStream::save(p,n); return *this; } FXMemoryStream& save(const FXulong* p,FXuval n){ FXStream::save(p,n); return *this; } /// Load single items from stream FXMemoryStream& operator>>(FXuchar& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXchar& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXushort& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXshort& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXuint& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXint& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXfloat& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXdouble& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXlong& v){ FXStream::operator>>(v); return *this; } FXMemoryStream& operator>>(FXulong& v){ FXStream::operator>>(v); return *this; } /// Load arrays of items from stream FXMemoryStream& load(FXuchar* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXchar* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXushort* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXshort* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXuint* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXint* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXfloat* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXdouble* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXlong* p,FXuval n){ FXStream::load(p,n); return *this; } FXMemoryStream& load(FXulong* p,FXuval n){ FXStream::load(p,n); return *this; } /// Save object FXMemoryStream& saveObject(const FXObject* v){ FXStream::saveObject(v); return *this; } /// Load object FXMemoryStream& loadObject(FXObject*& v){ FXStream::loadObject(v); return *this; } }; } #endif fox-1.6.49/include/FXImage.h0000664000175000017500000002424012130340076012404 00000000000000/******************************************************************************** * * * I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXImage.h,v 1.64 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXIMAGE_H #define FXIMAGE_H #ifndef FXDRAWABLE_H #include "FXDrawable.h" #endif namespace FX { /// Image rendering hints enum { IMAGE_KEEP = 0x00000001, /// Keep pixel data in client IMAGE_OWNED = 0x00000002, /// Pixel data is owned by image IMAGE_DITHER = 0, /// Dither image to look better IMAGE_NEAREST = 0x00000004, /// Turn off dithering and map to nearest color IMAGE_OPAQUE = 0x00000008, /// Force opaque background IMAGE_ALPHACOLOR = 0x00000010, /// Override transparancy color IMAGE_SHMI = 0x00000020, /// Using shared memory image IMAGE_SHMP = 0x00000040, /// Using shared memory pixmap IMAGE_ALPHAGUESS = 0x00000080 /// Guess transparency color from corners }; class FXDC; class FXDCWindow; /** * An Image is a rectangular array of pixels. It supports two representations * of these pixels: a client-side pixel buffer which is stored as an array of * FXColor, and a server-side pixmap which is stored in an organization directly * compatible with the screen, for fast drawing onto the device. * The server-side representation is not directly accessible from the current * process as it lives in the process of the X Server or GDI. */ class FXAPI FXImage : public FXDrawable { FXDECLARE(FXImage) friend class FXDC; friend class FXDCWindow; protected: FXColor *data; // Pixel data FXuint options; // Options private: #ifdef WIN32 virtual FXID GetDC() const; virtual int ReleaseDC(FXID) const; #endif #ifndef WIN32 void render_true_32(void *xim,FXuchar *img); void render_true_24(void *xim,FXuchar *img); void render_true_16_fast(void *xim,FXuchar *img); void render_true_16_dither(void *xim,FXuchar *img); void render_true_8_fast(void *xim,FXuchar *img); void render_true_8_dither(void *xim,FXuchar *img); void render_true_N_fast(void *xim,FXuchar *img); void render_true_N_dither(void *xim,FXuchar *img); void render_index_4_fast(void *xim,FXuchar *img); void render_index_4_dither(void *xim,FXuchar *img); void render_index_8_fast(void *xim,FXuchar *img); void render_index_8_dither(void *xim,FXuchar *img); void render_index_N_fast(void *xim,FXuchar *img); void render_index_N_dither(void *xim,FXuchar *img); void render_gray_8_fast(void *xim,FXuchar *img); void render_gray_8_dither(void *xim,FXuchar *img); void render_gray_N_fast(void *xim,FXuchar *img); void render_gray_N_dither(void *xim,FXuchar *img); void render_mono_1_fast(void *xim,FXuchar *img); void render_mono_1_dither(void *xim,FXuchar *img); #endif protected: FXImage(); private: FXImage(const FXImage&); FXImage &operator=(const FXImage&); public: /** * Create an image. If a client-side pixel buffer has been specified, * the image does not own the pixel buffer unless the IMAGE_OWNED flag is * set. If the IMAGE_OWNED flag is set but a NULL pixel buffer is * passed, a pixel buffer will be automatically created and will be owned * by the image. The flags IMAGE_SHMI and IMAGE_SHMP may be specified for * large images to instruct render() to use shared memory to communicate * with the server. */ FXImage(FXApp* a,const FXColor *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Change options void setOptions(FXuint opts); /// To get to the option flags FXuint getOptions() const { return options; } /** * Populate the image with new pixel data of the same size; it will assume * ownership of the pixel data if image IMAGE_OWNED option is passed. * The server-side representation of the image, if it exists, is not updated. * This can be done by calling render(). */ virtual void setData(FXColor *pix,FXuint opts=0); /** * Populate the image with new pixel data of a new size; it will assume ownership * of the pixel data if image IMAGE_OWNED option is passed. The size of the server- * side representation of the image, if it exists, is adjusted but the contents are * not updated yet. This can be done by calling render(). */ virtual void setData(FXColor *pix,FXuint opts,FXint w,FXint h); /// Return pointer to the pixel data of the image FXColor* getData() const { return data; } /// Get pixel at x,y FXColor getPixel(FXint x,FXint y) const { return data[y*width+x]; } /// Change pixel at x,y void setPixel(FXint x,FXint y,FXColor color){ data[y*width+x]=color; } /// Scan the image and return false if fully opaque bool hasAlpha() const; /** * Create the server side pixmap, then call render() to fill it with the * pixel data from the client-side buffer. After the server-side image has * been created, the client-side pixel buffer will be deleted unless * IMAGE_KEEP has been specified. If the pixel buffer is not owned, i.e. * the flag IMAGE_OWNED is not set, the pixel buffer will not be deleted, * however the pixel buffer will be set to NULL. */ virtual void create(); /** * Detach the server side pixmap from the Image. * Afterwards, the Image is left as if it never had a server-side resources. */ virtual void detach(); /** * Destroy the server-side pixmap. * The client-side pixel buffer is not affected. */ virtual void destroy(); /** * Retrieves pixels from the server-side image. For example, to make * screen snapshots, or to retrieve an image after it has been drawn * into by various means. */ virtual void restore(); /** * Render the server-side representation of the image from client-side * pixels. Normally, IMAGE_DITHER is used which causes the server-side * representation to be rendered using a 16x16 ordered dither if necessary; * however if IMAGE_NEAREST is used a faster (but uglier-looking), nearest * neighbor algorithm is used. */ virtual void render(); /** * Release the client-side pixels buffer, free it if it was owned. * If it is not owned, the image just forgets about the buffer. */ virtual void release(); /** * Resize both client-side and server-side representations (if any) to the * given width and height. The new representations typically contain garbage * after this operation and need to be re-filled. */ virtual void resize(FXint w,FXint h); /** * Rescale pixels image to the specified width and height; this calls * resize() to adjust the client and server side representations. */ virtual void scale(FXint w,FXint h,FXint quality=0); /// Mirror image horizontally and/or vertically virtual void mirror(bool horizontal,bool vertical); /** * Rotate image by degrees ccw; this calls resize() to adjust the client * and server side representations if necessary. */ virtual void rotate(FXint degrees); /** * Crop image to given rectangle; this calls resize() to adjust the client * and server side representations. The new image may be smaller or larger * than the old one; blank areas are filled with color. There must be at * least one pixel of overlap between the old and the new image. */ virtual void crop(FXint x,FXint y,FXint w,FXint h,FXColor color=0); /// Fill image with uniform color virtual void fill(FXColor color); /// Fade image to uniform color virtual void fade(FXColor color,FXint factor=255); /** * Shear image horizontally; the number of pixels is equal to the * shear parameter times 256. The area outside the image is filled * with transparent black, unless another color is specified. */ virtual void xshear(FXint shear,FXColor clr=0); /** * Shear image vertically; the number of pixels is equal to the * shear parameter times 256. The area outside the image is filled * with transparent black, unless another color is specified. */ virtual void yshear(FXint shear,FXColor clr=0); /// Fill horizontal gradient virtual void hgradient(FXColor left,FXColor right); /// Fill vertical gradient virtual void vgradient(FXColor top,FXColor bottom); /// Fill with gradient virtual void gradient(FXColor topleft,FXColor topright,FXColor bottomleft,FXColor bottomright); /// Blend image over uniform color virtual void blend(FXColor color); /// Save object to stream virtual void save(FXStream& store) const; /// Load object from stream virtual void load(FXStream& store); /// Save pixel data only virtual bool savePixels(FXStream& store) const; /// Load pixel data only virtual bool loadPixels(FXStream& store); /// Destructor virtual ~FXImage(); }; } #endif fox-1.6.49/include/FXPNGIcon.h0000664000175000017500000000637212130340076012625 00000000000000/******************************************************************************** * * * P N G I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPNGIcon.h,v 1.22 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXPNGICON_H #define FXPNGICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// Portable Network Graphics (PNG) Icon class class FXAPI FXPNGIcon : public FXIcon { FXDECLARE(FXPNGIcon) protected: FXPNGIcon(){} private: FXPNGIcon(const FXPNGIcon&); FXPNGIcon &operator=(const FXPNGIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an icon from memory stream formatted in PNG format FXPNGIcon(FXApp *a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// True if format is supported static const bool supported; /// Save pixels into stream in PNG format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in PNG format virtual bool loadPixels(FXStream& store); /// Destroy virtual ~FXPNGIcon(); }; /** * Check if stream contains a PNG, return TRUE if so. */ extern FXAPI bool fxcheckPNG(FXStream& store); /** * Load an PNG (Portable Network Graphics) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadPNG(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an PNG (Portable Network Graphics) file to a stream. */ extern FXAPI bool fxsavePNG(FXStream& store,const FXColor* data,FXint width,FXint height); } #endif fox-1.6.49/include/FXDrawable.h0000664000175000017500000000626712130340076013114 00000000000000/******************************************************************************** * * * D r a w a b l e A r e a * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDrawable.h,v 1.25 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXDRAWABLE_H #define FXDRAWABLE_H #ifndef FXID_H #include "FXId.h" #endif namespace FX { class FXVisual; /** * Drawable is an abstract base class for any surface that can be * drawn upon, such as a FXWindow, or FXImage. */ class FXAPI FXDrawable : public FXId { FXDECLARE_ABSTRACT(FXDrawable) friend class FXDC; friend class FXDCWindow; protected: FXVisual *visual; // Visual for this window FXint width; // Width FXint height; // Height protected: FXDrawable(); FXDrawable(FXApp* a,FXint w,FXint h); private: FXDrawable(const FXDrawable&); FXDrawable &operator=(const FXDrawable&); #ifdef WIN32 virtual FXID GetDC() const { return NULL; } virtual int ReleaseDC(FXID) const { return 0; } #endif public: /// Width of drawable FXint getWidth() const { return width; } /// Height of drawable FXint getHeight() const { return height; } /// Get the visual FXVisual* getVisual() const { return visual; } /// Change visual void setVisual(FXVisual* vis); /// Resize drawable to the specified width and height virtual void resize(FXint w,FXint h); /// Save object to stream virtual void save(FXStream& store) const; /// Load object from stream virtual void load(FXStream& store); /// Cleanup virtual ~FXDrawable(); }; } #endif fox-1.6.49/include/FXIconDict.h0000664000175000017500000001033512130340076013056 00000000000000/******************************************************************************** * * * I c o n D i c t i o n a r y * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXIconDict.h,v 1.6 2006/02/03 00:33:15 fox Exp $ * ********************************************************************************/ #ifndef FXICONDICT_H #define FXICONDICT_H #ifndef FXDICT_H #include "FXDict.h" #endif namespace FX { class FXIconSource; /** * The Icon Dictionary manages a collection of icons. The icons are referenced * by their file name. When first encountering a new file name, the icon is * located by searching the icon search path for the icon file. If found, the * services of the icon source object are used to load the icon from the file. * A custom icon source may be installed to furnish support for additonal * image file formats. * Once the icon is loaded, an association between the icon name and the icon * is entered into the icon dictionary. Subsequent searches for an icon with * this name will be satisfied from the cached value. * The lifetype of the icons is managed by the icon dictionary, and thus all * icons will be deleted when the dictionary is deleted. */ class FXAPI FXIconDict : public FXDict { FXDECLARE(FXIconDict) private: FXIconSource *source; // Icon source FXString path; // Where to search icons protected: FXIconDict():source(NULL){} virtual void *createData(const void*); virtual void deleteData(void*); private: FXIconDict(const FXIconDict&); FXIconDict &operator=(const FXIconDict&); public: /// Default icon search path static const FXchar defaultIconPath[]; public: /** * Construct icon dictionary, and set initial search path; also * creates a default icon source object. */ FXIconDict(FXApp* app,const FXString& p=defaultIconPath); /// Change icon source void setIconSource(FXIconSource *src){ source=src; } /// Return icon source FXIconSource* getIconSource() const { return source; } /// Set icon search path void setIconPath(const FXString& p){ path=p; } /// Return current icon search path const FXString& getIconPath() const { return path; } /// Insert unique icon loaded from filename into dictionary FXIcon* insert(const FXchar* name){ return (FXIcon*)FXDict::insert(name,name); } /// Remove icon from dictionary FXIcon* remove(const FXchar* name){ return (FXIcon*)FXDict::remove(name); } /// Find icon by name FXIcon* find(const FXchar* name){ return (FXIcon*)FXDict::find(name); } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy the icon dict as well as the icon source virtual ~FXIconDict(); }; } #endif fox-1.6.49/include/FXArray.h0000664000175000017500000001607712130340076012451 00000000000000/******************************************************************************** * * * G e n e r i c A r r a y * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXArray.h,v 1.24.2.1 2008/03/25 20:18:43 fox Exp $ * ********************************************************************************/ #ifndef FXARRAY_H #define FXARRAY_H #ifndef FXELEMENT_H #include "FXElement.h" #endif namespace FX { /// Array of some generic type template class FXArray { protected: TYPE *ptr; // Data array FXint num; // Number in array public: /// Create as empty FXArray():ptr(NULL),num(0){ } /// Create with given size n FXArray(FXint n):ptr(NULL),num(0){ if(allocElms(ptr,n)){ constructElms(ptr,n); num=n; } } /// Create initialized from another array FXArray(const FXArray& src):ptr(NULL),num(0){ if(allocElms(ptr,src.num)){ constructElms(ptr,src.num); copyElms(ptr,src.ptr,src.num); num=src.num; } } /// Create initialized with n copies of object FXArray(const TYPE& src,FXint n):ptr(NULL),num(0){ if(allocElms(ptr,n)){ constructElms(ptr,n); fillElms(ptr,src,n); num=n; } } /// Create initialized with array of n objects FXArray(const TYPE* src,FXint n):ptr(NULL),num(0){ if(allocElms(ptr,n)){ constructElms(ptr,n); copyElms(ptr,src,n); num=n; } } /// Return number of elements FXint no() const { return num; } /// Change number of elements to n bool no(FXint n){ if(n!=num){ if(0& operator=(const FXArray& src){ if(ptr!=src.ptr){ no(src.num); copyElms(ptr,src.ptr,src.num); } return *this; } /// Index into array TYPE& operator[](FXint i){ return ptr[i]; } const TYPE& operator[](FXint i) const { return ptr[i]; } /// Index into list TYPE& at(FXint i){ return ptr[i]; } const TYPE& at(FXint i) const { return ptr[i]; } /// Return pointer to list TYPE* data() const { return ptr; } /// Adopt array from source FXArray& adopt(FXArray& src){ no(0); ptr=src.ptr; src.ptr=NULL; num=src.num; src.num=0; return *this; } /// Assign object p to list FXArray& assign(const TYPE& src){ if(no(1)){ ptr[0]=src; } return *this; } /// Assign n copies of object to list FXArray& assign(const TYPE& src,FXint n){ if(no(n)){ fillElms(ptr,src,n); } return *this; } /// Assign n objects to list FXArray& assign(const TYPE* src,FXint n){ if(no(n)){ copyElms(ptr,src,n); } return *this; } /// Assign n objects to list FXArray& assign(const FXArray& src){ if(no(src.num)){ copyElms(ptr,src.ptr,src.num); } return *this; } /// Insert an object FXArray& insert(FXint pos,const TYPE& src){ if(no(num+1)){ moveElms(ptr+pos+1,ptr+pos,num-pos-1); ptr[pos]=src; } return *this; } /// Insert n copies of object at specified position FXArray& insert(FXint pos,const TYPE& src,FXint n){ if(no(num+n)){ moveElms(ptr+pos+n,ptr+pos,num-pos-n); fillElms(ptr+pos,src,n); } return *this; } /// Insert n objects at specified position FXArray& insert(FXint pos,const TYPE* src,FXint n){ if(no(num+n)){ moveElms(ptr+pos+n,ptr+pos,num-pos-n); copyElms(ptr+pos,src,n); } return *this; } /// Insert n objects at specified position FXArray& insert(FXint pos,const FXArray& src){ if(no(num+src.num)){ moveElms(ptr+pos+src.num,ptr+pos,num-pos-src.num); copyElms(ptr+pos,src.ptr,src.num); } return *this; } /// Prepend object FXArray& prepend(const TYPE& src){ if(no(num+1)){ moveElms(ptr+1,ptr,num-1); ptr[0]=src; } return *this; } /// Prepend n copies of object FXArray& prepend(const TYPE& src,FXint n){ if(no(num+n)){ moveElms(ptr+n,ptr,num-n); fillElms(ptr,src,n); } return *this; } /// Prepend n objects FXArray& prepend(const TYPE* src,FXint n){ if(no(num+n)){ moveElms(ptr+n,ptr,num-n); copyElms(ptr,src,n); } return *this; } /// Prepend n objects FXArray& prepend(const FXArray& src){ if(no(num+src.num)){ moveElms(ptr+src.num,ptr,num-src.num); copyElms(ptr,src.ptr,src.num); } return *this; } /// Append object FXArray& append(const TYPE& src){ if(no(num+1)){ ptr[num-1]=src; } return *this; } /// Append n copies of object FXArray& append(const TYPE& src,FXint n){ if(no(num+n)){ fillElms(ptr+num-n,src,n); } return *this; } /// Append n objects FXArray& append(const TYPE* src,FXint n){ if(no(num+n)){ copyElms(ptr+num-n,src,n); } return *this; } /// Append n objects FXArray& append(const FXArray& src){ if(no(num+src.num)){ copyElms(ptr+num-src.num,src.ptr,src.num); } return *this; } /// Remove object at pos FXArray& erase(FXint pos){ moveElms(ptr+pos,ptr+pos+1,num-pos-1); no(num-1); return *this; } /// Remove n objects starting at pos FXArray& erase(FXint pos,FXint n){ moveElms(ptr+pos,ptr+pos+n,num-n-pos); no(num-n); return *this; } /// Remove all objects FXArray& clear(){ destructElms(ptr,num); freeElms(ptr); num=0; return *this; } /// Delete data ~FXArray(){ destructElms(ptr,num); freeElms(ptr); } }; } #endif fox-1.6.49/include/FXRegion.h0000664000175000017500000000745712130340076012620 00000000000000/******************************************************************************** * * * C l i p p i n g R e g i o n * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRegion.h,v 1.20 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXREGION_H #define FXREGION_H namespace FX { /// Region class FXAPI FXRegion { friend class FXDC; friend class FXDCWindow; friend class FXWindow; private: void *region; public: /// Construct new empty region FXRegion(); /// Construct new region copied from region r FXRegion(const FXRegion& r); /// Construct new region from rectangle rect FXRegion(const FXRectangle& rect); /// Construct rectangle region FXRegion(FXint x,FXint y,FXint w,FXint h); /// Construct polygon region FXRegion(const FXPoint* points,FXuint npoints,bool winding=false); /// Assign region r to this one FXRegion &operator=(const FXRegion& r); /// Return true if region is empty bool empty() const; /// Return true if region contains point bool contains(FXint x,FXint y) const; /// Return true if region contains rectangle bool contains(FXint x,FXint y,FXint w,FXint h) const; /// Return bounding box FXRectangle bounds() const; /// Offset region by dx,dy FXRegion& offset(FXint dx,FXint dy); /// Return true if region equal to this one bool operator==(const FXRegion& r) const; /// Return true if region not equal to this one bool operator!=(const FXRegion& r) const; /// Union region r with this one FXRegion& operator+=(const FXRegion& r); /// Intersect region r with this one FXRegion& operator*=(const FXRegion& r); /// Subtract region r from this one FXRegion& operator-=(const FXRegion& r); /// Xor region r with this one FXRegion& operator^=(const FXRegion& r); /// Union of this region and region r FXRegion operator+(const FXRegion& r) const; /// Intersection of this region and region r FXRegion operator*(const FXRegion& r) const; /// Subtract region r from this region FXRegion operator-(const FXRegion& r) const; /// Xor of this region and region r FXRegion operator^(const FXRegion& r) const; /// Reset region to empty void reset(); /// Destroy region ~FXRegion(); }; } #endif fox-1.6.49/include/FXRegistry.h0000664000175000017500000001114212130340076013167 00000000000000/******************************************************************************** * * * R e g i s t r y C l a s s * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRegistry.h,v 1.31 2006/01/22 17:58:08 fox Exp $ * ********************************************************************************/ #ifndef FXREGISTRY_H #define FXREGISTRY_H #ifndef FXSETTINGS_H #include "FXSettings.h" #endif namespace FX { /** * The registry maintains a database of persistent settings for an application. * The settings database is organized in two groups of three layers each. The * system-wide settings group contains settings information pertaining to all * users on a system. The per-user settings group contains settings affecting * that user only. * Each settings group contains a desktop layer, which comprises the settings * which affect all FOX programs, a vendor layer which holds settings that * affect all applications from that vendor (e.g. a application-suite), and * an application layer which holds settings only for a single application. * The vendor-key and application-key determine which files these layers come * from, while the "Desktop" key is used for all FOX applications. * Settings in the system-wide group are overwritten by the per-user group, * and settings from the "Desktop" layer are overwritten by the vendor-layer; * vendor-layer settings are overwritten by the application-layer settings. * Only the per-user, per-application settings ever gets written; the layers * in the system-group only get written during installation and configuration * of the application. * The registry is read when FXApp::init() is called, and written back to the * system when FXApp::exit() is called. */ class FXAPI FXRegistry : public FXSettings { FXDECLARE(FXRegistry) protected: FXString applicationkey; // Application key FXString vendorkey; // Vendor key bool ascii; // ASCII file-based registry protected: bool readFromDir(const FXString& dirname,bool mark); #ifdef WIN32 bool readFromRegistry(void* hRootKey,bool mark); bool writeToRegistry(void* hRootKey); bool readFromRegistryGroup(void* org,const char* groupname,bool mark=false); bool writeToRegistryGroup(void* org,const char* groupname); #endif private: FXRegistry(const FXRegistry&); FXRegistry &operator=(const FXRegistry&); public: /** * Construct registry object; akey and vkey must be string constants. * Regular applications SHOULD set a vendor key! */ FXRegistry(const FXString& akey=FXString::null,const FXString& vkey=FXString::null); /// Read registry bool read(); /// Write registry bool write(); /// Return application key const FXString& getAppKey() const { return applicationkey; } /// Return vendor key const FXString& getVendorKey() const { return vendorkey; } /** * Set ASCII mode; under MS-Windows, this will switch the system to a * file-based registry system, instead of using the System Registry API. */ void setAsciiMode(bool asciiMode){ ascii=asciiMode; } /// Get ASCII mode bool getAsciiMode() const { return ascii; } }; } #endif fox-1.6.49/include/FXRootWindow.h0000664000175000017500000000626112130340076013500 00000000000000/******************************************************************************** * * * R o o t W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRootWindow.h,v 1.23 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXROOTWINDOW_H #define FXROOTWINDOW_H #ifndef FXCOMPOSITE_H #include "FXComposite.h" #endif namespace FX { /// Root window class FXAPI FXRootWindow : public FXComposite { FXDECLARE(FXRootWindow) protected: FXRootWindow(){} #ifdef WIN32 virtual FXID GetDC() const; virtual int ReleaseDC(FXID) const; #endif private: FXRootWindow(const FXRootWindow&); FXRootWindow &operator=(const FXRootWindow&); public: /// Construct root window FXRootWindow(FXApp* a,FXVisual *vis); /// Root window need not be created virtual void create(); /// Root window may not be detached virtual void detach(); /// Root window can not be destroyed virtual void destroy(); /// Perform layout virtual void layout(); /// Return width of the root window virtual FXint getDefaultWidth(); /// Return height of the root window virtual FXint getDefaultHeight(); /// No op virtual void recalc(); /// Root window can not be moved virtual void move(FXint x,FXint y); /// Root window can not be resized virtual void resize(FXint w,FXint h); /// Root window can not be positioned virtual void position(FXint x,FXint y,FXint w,FXint h); /// Root window can not get focus virtual void setFocus(); /// Root window can not loose virtual void killFocus(); /// Destructor virtual ~FXRootWindow(); }; } #endif fox-1.6.49/include/FX885911Codec.h0000644000175000017500000000111311637250333013076 00000000000000#ifndef FX885911CODEC_H #define FX885911CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-11 Codec class FXAPI FX885911Codec : public FXTextCodec { FXDECLARE(FX885911Codec) public: FX885911Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX885911Codec(){} }; } #endif fox-1.6.49/include/FXCP856Codec.h0000644000175000017500000000107711637250333013075 00000000000000#ifndef FXCP856CODEC_H #define FXCP856CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP856 Codec class FXAPI FXCP856Codec : public FXTextCodec { FXDECLARE(FXCP856Codec) public: FXCP856Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP856Codec(){} }; } #endif fox-1.6.49/include/FXUTF16Codec.h0000664000175000017500000000714712130340076013134 00000000000000/******************************************************************************** * * * U T F - 1 6 T e x t C o d e c * * * ********************************************************************************* * Copyright (C) 2002,2006 by L.Johnson & J.van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXUTF16Codec.h,v 1.10 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXUTF16CODEC_H #define FXUTF16CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// Codec for UTF-16BE class FXAPI FXUTF16BECodec : public FXTextCodec { FXDECLARE(FXUTF16BECodec) public: FXUTF16BECodec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual FXint mibEnum() const; virtual const FXchar* const* aliases() const; virtual ~FXUTF16BECodec(){} }; /// Codec for UTF-16LE class FXAPI FXUTF16LECodec : public FXTextCodec { FXDECLARE(FXUTF16LECodec) public: FXUTF16LECodec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual FXint mibEnum() const; virtual const FXchar* const* aliases() const; virtual ~FXUTF16LECodec(){} }; /// Codec for UTF-16 class FXAPI FXUTF16Codec : public FXTextCodec { FXDECLARE(FXUTF16Codec) public: FXUTF16Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint mb2utflen(const FXchar* src,FXint nsrc) const; virtual FXint mb2utf(FXchar* dst,FXint ndst,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint utf2mblen(const FXchar* src,FXint nsrc) const; virtual FXint utf2mb(FXchar* dst,FXint ndst,const FXchar* src,FXint nsrc) const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual FXint mibEnum() const; virtual const FXchar* const* aliases() const; virtual ~FXUTF16Codec(){} }; } #endif fox-1.6.49/include/FXObject.h0000664000175000017500000001662212130340076012575 00000000000000/******************************************************************************** * * * T o p l e v el O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXObject.h,v 1.35.2.1 2006/08/05 00:58:29 fox Exp $ * ********************************************************************************/ #ifndef FXOBJECT_H #define FXOBJECT_H namespace FX { /// Minimum and maximum message id enum { MINKEY = 0, MAXKEY = 65535 }; /// Minimum and maximum message type enum { MINTYPE = 0, MAXTYPE = 65535 }; /// Association key typedef FXuint FXSelector; class FXObject; /// Describes a FOX object class FXAPI FXMetaClass { private: const FXchar *className; FXObject* (*manufacture)(); const FXMetaClass *baseClass; const void *assoc; FXuint nassocs; FXuint assocsz; private: static const FXMetaClass **metaClassTable; static FXuint nmetaClassTable; static FXuint nmetaClasses; private: static void resize(FXuint n); public: FXMetaClass(const FXchar* name,FXObject *(fac)(),const FXMetaClass* base,const void* ass,FXuint nass,FXuint assz); /// Check if metaclass is subclass of some other metaclass bool isSubClassOf(const FXMetaClass* metaclass) const; /// Make instance of some object FXObject* makeInstance() const; /// Ask class name const FXchar* getClassName() const { return className; } /// Ask base class const FXMetaClass* getBaseClass() const { return baseClass; } /// Find metaclass object static const FXMetaClass* getMetaClassFromName(const FXchar* name); /// Search message map const void* search(FXSelector key) const; ~FXMetaClass(); }; /// Macro to set up class declaration #define FXDECLARE(classname) \ public: \ struct FXMapEntry { FX::FXSelector keylo; FX::FXSelector keyhi; long (classname::* func)(FX::FXObject*,FX::FXSelector,void*); }; \ static const FX::FXMetaClass metaClass; \ static FX::FXObject* manufacture(); \ virtual long handle(FX::FXObject* sender,FX::FXSelector sel,void* ptr); \ virtual const FX::FXMetaClass* getMetaClass() const { return &metaClass; } \ friend FX::FXStream& operator<<(FX::FXStream& store,const classname* obj){return store.saveObject((FX::FXObjectPtr)(obj));} \ friend FX::FXStream& operator>>(FX::FXStream& store,classname*& obj){return store.loadObject((FX::FXObjectPtr&)(obj));} \ private: /// Macro to set up class implementation #define FXIMPLEMENT(classname,baseclassname,mapping,nmappings) \ FX::FXObject* classname::manufacture(){return new classname;} \ const FX::FXMetaClass classname::metaClass(#classname,classname::manufacture,&baseclassname::metaClass,mapping,nmappings,sizeof(classname::FXMapEntry)); \ long classname::handle(FX::FXObject* sender,FX::FXSelector sel,void* ptr){ \ const FXMapEntry* me=(const FXMapEntry*)metaClass.search(sel); \ return me ? (this->* me->func)(sender,sel,ptr) : baseclassname::handle(sender,sel,ptr); \ } /// Macro to set up abstract class declaration #define FXDECLARE_ABSTRACT(classname) \ public: \ struct FXMapEntry { FX::FXSelector keylo; FX::FXSelector keyhi; long (classname::* func)(FX::FXObject*,FX::FXSelector,void*); }; \ static const FX::FXMetaClass metaClass; \ virtual long handle(FX::FXObject* sender,FX::FXSelector sel,void* ptr); \ virtual const FX::FXMetaClass* getMetaClass() const { return &metaClass; } \ friend FX::FXStream& operator<<(FX::FXStream& store,const classname* obj){return store.saveObject((FX::FXObjectPtr)(obj));} \ friend FX::FXStream& operator>>(FX::FXStream& store,classname*& obj){return store.loadObject((FX::FXObjectPtr&)(obj));} \ private: /// Macro to set up abstract class implementation #define FXIMPLEMENT_ABSTRACT(classname,baseclassname,mapping,nmappings) \ const FX::FXMetaClass classname::metaClass(#classname,NULL,&baseclassname::metaClass,mapping,nmappings,sizeof(classname::FXMapEntry)); \ long classname::handle(FX::FXObject* sender,FX::FXSelector sel,void* ptr){ \ const FXMapEntry* me=(const FXMapEntry*)metaClass.search(sel); \ return me ? (this->* me->func)(sender,sel,ptr) : baseclassname::handle(sender,sel,ptr); \ } /// MetaClass of a class #define FXMETACLASS(classname) (&classname::metaClass) /// Set up map type #define FXDEFMAP(classname) static const classname::FXMapEntry /// Define range of function types #define FXMAPTYPES(typelo,typehi,func) {FXSEL(typelo,FX::MINKEY),FXSEL(typehi,FX::MAXKEY),&func} /// Define range of function types #define FXMAPTYPE(type,func) {FXSEL(type,FX::MINKEY),FXSEL(type,FX::MAXKEY),&func} /// Define range of functions #define FXMAPFUNCS(type,keylo,keyhi,func) {FXSEL(type,keylo),FXSEL(type,keyhi),&func} /// Define one function #define FXMAPFUNC(type,key,func) {FXSEL(type,key),FXSEL(type,key),&func} /** * Object is the base class for all objects in FOX; in order to receive * messages from the user interface, your class must derive from Object. * The Object class also provides serialization facilities, with which * you can save and restore the object's state. If you've subclassed * from Object, you can save your subclasses' state by overloading the * save() and load() functions and use the stream API to serialize its * member data. */ class FXAPI FXObject { FXDECLARE(FXObject) public: /// Called for unhandled messages virtual long onDefault(FXObject*,FXSelector,void*); public: /// Get class name of some object const FXchar* getClassName() const; /// Check if object is member of metaclass bool isMemberOf(const FXMetaClass* metaclass) const; /// Try handle message safely virtual long tryHandle(FXObject* sender,FXSelector sel,void* ptr); /// Save object to stream virtual void save(FXStream& store) const; /// Load object from stream virtual void load(FXStream& store); /// Virtual destructor virtual ~FXObject(); }; } #endif fox-1.6.49/include/FXFrame.h0000664000175000017500000001431212130340076012413 00000000000000/******************************************************************************** * * * F r a m e W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFrame.h,v 1.24 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXFRAME_H #define FXFRAME_H #ifndef FXWINDOW_H #include "FXWindow.h" #endif namespace FX { /// Justification modes used by certain subclasses enum { JUSTIFY_NORMAL = 0, /// Default justification is centered text JUSTIFY_CENTER_X = 0, /// Contents centered horizontally JUSTIFY_LEFT = 0x00008000, /// Contents left-justified JUSTIFY_RIGHT = 0x00010000, /// Contents right-justified JUSTIFY_HZ_APART = JUSTIFY_LEFT|JUSTIFY_RIGHT, /// Combination of JUSTIFY_LEFT & JUSTIFY_RIGHT JUSTIFY_CENTER_Y = 0, /// Contents centered vertically JUSTIFY_TOP = 0x00020000, /// Contents aligned with label top JUSTIFY_BOTTOM = 0x00040000, /// Contents aligned with label bottom JUSTIFY_VT_APART = JUSTIFY_TOP|JUSTIFY_BOTTOM /// Combination of JUSTIFY_TOP & JUSTIFY_BOTTOM }; /// Default padding enum { DEFAULT_PAD = 2 }; /** * The Frame widget provides borders around some contents. Borders may be raised, sunken, * thick, ridged or etched. They can also be turned off completely. * In addition, a certain amount of padding may be specified between the contents of * the widget and the borders. The contents may be justified inside the widget using the * justification options. * The Frame widget is sometimes used by itself as a place holder, but most often is used * as a convenient base class for simple controls. */ class FXAPI FXFrame : public FXWindow { FXDECLARE(FXFrame) protected: FXColor baseColor; // Base color FXColor hiliteColor; // Highlight color FXColor shadowColor; // Shadow color FXColor borderColor; // Border color FXint padtop; // Top padding FXint padbottom; // Bottom padding FXint padleft; // Left padding FXint padright; // right padding FXint border; // Border size protected: FXFrame(); void drawBorderRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRidgeRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawGrooveRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawFrame(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); private: FXFrame(const FXFrame&); FXFrame &operator=(const FXFrame&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Construct frame window FXFrame(FXComposite* p,FXuint opts=FRAME_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change frame style void setFrameStyle(FXuint style); /// Get current frame style FXuint getFrameStyle() const; /// Get border width FXint getBorderWidth() const { return border; } /// Change top padding void setPadTop(FXint pt); /// Get top interior padding FXint getPadTop() const { return padtop; } /// Change bottom padding void setPadBottom(FXint pb); /// Get bottom interior padding FXint getPadBottom() const { return padbottom; } /// Change left padding void setPadLeft(FXint pl); /// Get left interior padding FXint getPadLeft() const { return padleft; } /// Change right padding void setPadRight(FXint pr); /// Get right interior padding FXint getPadRight() const { return padright; } /// Change highlight color void setHiliteColor(FXColor clr); /// Get highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change shadow color void setShadowColor(FXColor clr); /// Get shadow color FXColor getShadowColor() const { return shadowColor; } /// Change border color void setBorderColor(FXColor clr); /// Get border color FXColor getBorderColor() const { return borderColor; } /// Change base gui color void setBaseColor(FXColor clr); /// Get base gui color FXColor getBaseColor() const { return baseColor; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXMenuBar.h0000664000175000017500000000656212130340076012722 00000000000000/******************************************************************************** * * * M e n u B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuBar.h,v 1.15 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENUBAR_H #define FXMENUBAR_H #ifndef FXTOOLBAR_H #include "FXToolBar.h" #endif namespace FX { /// Menu bar class FXAPI FXMenuBar : public FXToolBar { FXDECLARE(FXMenuBar) protected: FXMenuBar(){} private: FXMenuBar(const FXMenuBar&); FXMenuBar &operator=(const FXMenuBar&); public: long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onButtonPress(FXObject*,FXSelector,void*); long onButtonRelease(FXObject*,FXSelector,void*); long onCmdUnpost(FXObject*,FXSelector,void*); public: /** * Construct a floatable menubar * Normally, the menubar is docked under window p. * When floated, the menubar can be docked under window q, which is * typically an FXToolbarShell window. */ FXMenuBar(FXComposite* p,FXComposite* q,FXuint opts=LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=3,FXint pr=3,FXint pt=2,FXint pb=2,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /** * Construct a non-floatable menubar. * The menubar can not be undocked. */ FXMenuBar(FXComposite* p,FXuint opts,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=3,FXint pr=3,FXint pt=2,FXint pb=2,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Returns true if specified coordinate (in parent's coordinate system) is in menubar virtual bool contains(FXint parentx,FXint parenty) const; }; } #endif fox-1.6.49/include/FXCP857Codec.h0000644000175000017500000000107711637250333013076 00000000000000#ifndef FXCP857CODEC_H #define FXCP857CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP857 Codec class FXAPI FXCP857Codec : public FXTextCodec { FXDECLARE(FXCP857Codec) public: FXCP857Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP857Codec(){} }; } #endif fox-1.6.49/include/FX88594Codec.h0000644000175000017500000000110411637250333013020 00000000000000#ifndef FX88594CODEC_H #define FX88594CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-4 Codec class FXAPI FX88594Codec : public FXTextCodec { FXDECLARE(FX88594Codec) public: FX88594Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX88594Codec(){} }; } #endif fox-1.6.49/include/FXVisual.h0000664000175000017500000001502212130340076012623 00000000000000/******************************************************************************** * * * V i s u a l C l a s s * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXVisual.h,v 1.41 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXVISUAL_H #define FXVISUAL_H #ifndef FXID_H #include "FXId.h" #endif namespace FX { /// Construction options for FXVisual class enum FXVisualOptions { VISUAL_DEFAULT = 0, /// Default visual VISUAL_MONOCHROME = 1, /// Must be monochrome visual VISUAL_BEST = 2, /// Best (deepest) visual VISUAL_INDEXCOLOR = 4, /// Palette visual VISUAL_GRAYSCALE = 8, /// Gray scale visual VISUAL_TRUECOLOR = 16, /// Must be true color visual VISUAL_OWNCOLORMAP = 32, /// Allocate private colormap VISUAL_DOUBLEBUFFER = 64, /// Double-buffered [FXGLVisual] VISUAL_STEREO = 128, /// Stereo [FXGLVisual] VISUAL_NOACCEL = 256, /// No hardware acceleration [for broken h/w] VISUAL_SWAP_COPY = 512 /// Buffer swap by copying [FXGLVisual] }; /// Visual type enum FXVisualType { VISUALTYPE_UNKNOWN, /// Undetermined visual type VISUALTYPE_MONO, /// Visual for drawing into 1-bpp surfaces VISUALTYPE_TRUE, /// True color VISUALTYPE_INDEX, /// Index [palette] color VISUALTYPE_GRAY /// Gray scale }; class FXApp; class FXWindow; class FXGLContext; class FXGLCanvas; class FXImage; class FXIcon; class FXBitmap; class FXDCWindow; /// Visual describes pixel format of a drawable class FXAPI FXVisual : public FXId { FXDECLARE(FXVisual) friend class FXApp; friend class FXWindow; friend class FXImage; friend class FXIcon; friend class FXBitmap; friend class FXDCWindow; friend class FXGLCanvas; friend class FXGLContext; protected: FXuint flags; // Visual flags FXuint hint; // Depth Hint FXuint depth; // Visual depth, significant bits/pixel FXuint numred; // Number of reds FXuint numgreen; // Number of greens FXuint numblue; // Number of blues FXuint numcolors; // Total number of colors FXuint maxcolors; // Maximum number of colors FXVisualType type; // Visual type void *info; // Opaque data void *visual; // Application visual/pixel format FXID colormap; // Color map, if any FXbool freemap; // We allocated the map #ifndef WIN32 protected: void *gc; // Drawing GC void *scrollgc; // Scrolling GC FXPixel rpix[16][256]; // Mapping from red -> pixel FXPixel gpix[16][256]; // Mapping from green -> pixel FXPixel bpix[16][256]; // Mapping from blue -> pixel FXPixel lut[256]; // Color lookup table protected: void* setupgc(FXbool); void setuptruecolor(); void setupdirectcolor(); void setuppseudocolor(); void setupstaticcolor(); void setupgrayscale(); void setupstaticgray(); void setuppixmapmono(); void setupcolormap(); #endif protected: FXVisual(); private: FXVisual(const FXVisual&); FXVisual &operator=(const FXVisual&); public: /// Construct default visual FXVisual(FXApp* a,FXuint flgs,FXuint d=32); /// Get visual type FXVisualType getType() const { return type; } /// Get visual info void* getInfo() const { return info; } /// Get visual or pixel format void* getVisual() const { return visual; } /// Create visual virtual void create(); /// Detach visual virtual void detach(); /// Destroy visual virtual void destroy(); /// Get flags (see FXVisualOptions) FXuint getFlags() const { return flags; } /// Get depth, i.e. number of significant bits in color representation FXuint getDepth() const { return depth; } /// Get number of colors FXuint getNumColors() const { return numcolors; } /// Get number of reds FXuint getNumRed() const { return numred; } /// Get number of greens FXuint getNumGreen() const { return numgreen; } /// Get number of blues FXuint getNumBlue() const { return numblue; } /// Get device pixel value for color FXPixel getPixel(FXColor clr); /// Get color value for device pixel value FXColor getColor(FXPixel pix); /// Set maximum number of colors to allocate void setMaxColors(FXuint maxcols); /// Get maximum number of colors FXuint getMaxColors() const { return maxcolors; } /// Save visual information to a stream virtual void save(FXStream& store) const; /// Load visual information from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXVisual(); }; } #endif fox-1.6.49/include/FXStatusLine.h0000664000175000017500000001133612130340076013457 00000000000000/******************************************************************************** * * * S t a t u s L i n e W i d g e t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXStatusLine.h,v 1.8 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXSTATUSLINE_H #define FXSTATUSLINE_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { /** * The status line normally shows its permanent message; when * moving the mouse over a Widget which has status-line help, the status line * temporarily replaces its normal message with the help information; the status * line obtains the help message by sending the Widget a ID_QUERY_HELP message * with type SEL_UPDATE. * If this query does not result in a new status string, the target of * the status line is tried via an ordinary SEL_UPDATE message. * If none of the above work then the status line will display the normal text, * i.e. the string set via setNormalText(). * If the message contains a newline (\n), then the part before the newline * will be displayed in the highlight color, while the part after the newline * is shown using the normal text color. */ class FXAPI FXStatusLine : public FXFrame { FXDECLARE(FXStatusLine) protected: FXString status; // Current status message FXString normal; // Normally displayed message FXFont *font; // Font FXColor textColor; // Status text color FXColor textHighlightColor; // Status text highlight color protected: FXStatusLine(); private: FXStatusLine(const FXStatusLine&); FXStatusLine& operator=(const FXStatusLine&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); public: /// Constructor FXStatusLine(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change the temporary status message void setText(const FXString& text); /// Return the temporary status message FXString getText() const { return status; } /// Change the permanent status message void setNormalText(const FXString& text); /// Return the permanent status message FXString getNormalText() const { return normal; } /// Change the font void setFont(FXFont* fnt); /// Return the current font FXFont* getFont() const { return font; } /// Return the text color FXColor getTextColor() const { return textColor; } /// Change the text color void setTextColor(FXColor clr); /// Return the highlight text color FXColor getTextHighlightColor() const { return textHighlightColor; } /// Change the highlight text color void setTextHighlightColor(FXColor clr); /// Save status line to stream virtual void save(FXStream& store) const; /// Load status line from stream virtual void load(FXStream& store); /// Destroy virtual ~FXStatusLine(); }; } #endif fox-1.6.49/include/FXRex.h0000664000175000017500000001751012130340076012122 00000000000000/******************************************************************************** * * * R e g u l a r E x p r e s s i o n C l a s s * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRex.h,v 1.53 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXREX_H #define FXREX_H namespace FX { /// Regular expression error codes enum FXRexError { REGERR_OK, REGERR_EMPTY, /// Empty pattern REGERR_PAREN, /// Unmatched parenthesis REGERR_BRACK, /// Unmatched bracket REGERR_BRACE, /// Unmatched brace REGERR_RANGE, /// Bad character range REGERR_ESC, /// Bad escape sequence REGERR_COUNT, /// Bad counted repeat REGERR_NOATOM, /// No atom preceding repetition REGERR_REPEAT, /// Repeat following repeat REGERR_BACKREF, /// Bad backward reference REGERR_CLASS, /// Bad character class REGERR_COMPLEX, /// Expression too complex REGERR_MEMORY, /// Out of memory REGERR_TOKEN /// Illegal token }; /// Regular expression parse flags enum { REX_NORMAL = 0, /// Normal mode REX_CAPTURE = 1, /// Perform capturing parentheses REX_ICASE = 2, /// Case independent matching REX_NEWLINE = 4, /// Match-any operators match newline too REX_VERBATIM = 8, /// Disable interpretation of magic characters REX_SYNTAX = 16 /// Perform syntax check only }; /// Regular expression match flags enum { REX_FORWARD = 0, /// Match scanning forward from offset REX_BACKWARD = 32, /// Match scanning backward from offset REX_NOT_BOL = 64, /// Start of string is NOT begin of line REX_NOT_EOL = 128, /// End of string is NOT end of line REX_NOT_EMPTY = 256 /// Do not match empty }; /** * FXRex is a regular expression class implementing a NFA matcher. * It supports capturing parentheses, non-capturing parentheses, * positive or negative lookahead, backreferences, case-insensitive * matching, counted repetitions, lazy or greedy matches, and * PERL-like matching operators. * The subject string may be scanned forwards or backwards, and may * contain any of 256 possible character values. * * When parsing a regular expression pattern, the mode parameter is * the bitwise OR of a set of flags and affects the match algorithm. * Passing the flag REX_CAPTURE enables capturing parentheses * and back references. The flag REX_ICASE enables case-insensitive * matching. When the flag REX_NEWLINE is passed, newlines are treated * like normal characters; otherwise, newline is NOT matched * except when explicitly part of a character class. The flag * REX_VERBATIM disables all special character interpretation. * * When matching a compiled pattern, the mode parameter is the * bitwise OR of a set of flags that affects how the match is * performed. Passing the flag REX_BACKWARD causes the match * to proceed backwards through the subject string. Passing the * flags REX_NOT_BOL and/or REX_NOT_EOL causes the begin and * end of the subject string NOT to be considered a line start * or line end. The flag REX_NOT_EMPTY causes a match to fail if * the empty string was matched. */ class FXAPI FXRex { private: FXint *code; private: static const FXchar *const errors[]; static const FXint fallback[]; public: /// Construct empty regular expression object FXRex():code((FXint*)fallback){} /// Copy regular expression object FXRex(const FXRex& orig); /// Compile expression from pattern; if error is not NULL, error code is returned FXRex(const FXchar* pattern,FXint mode=REX_NORMAL,FXRexError* error=NULL); /// Compile expression from pattern; if error is not NULL, error code is returned FXRex(const FXString& pattern,FXint mode=REX_NORMAL,FXRexError* error=NULL); /// Assign another regular expression to this one FXRex& operator=(const FXRex& orig); /** * See if regular expression is empty; the regular expression * will be empty when it is unable to parse a pattern due to * a syntax error. */ bool empty() const { return (code==fallback); } /// Parse pattern, return error code if syntax error is found FXRexError parse(const FXchar* pattern,FXint mode=REX_NORMAL); /// Parse pattern, return error code if syntax error is found FXRexError parse(const FXString& pattern,FXint mode=REX_NORMAL); /** * Match a subject string of length len, returning TRUE if a match is found * and FALSE otherwise. The entire pattern is captured in beg[0] and end[0], * where beg[0] refers to the position of the first matched character and end[0] * refers to the position after the last matched character. * Sub expressions from capturing parenthesis i are returned in beg[i] and end[i]. */ bool match(const FXchar* string,FXint len,FXint* beg=NULL,FXint* end=NULL,FXint mode=REX_FORWARD,FXint npar=1,FXint fm=0,FXint to=2147483647) const; /// Search for match in a string bool match(const FXString& string,FXint* beg=NULL,FXint* end=NULL,FXint mode=REX_FORWARD,FXint npar=1,FXint fm=0,FXint to=2147483647) const; /** * After performing a regular expression match with capturing parentheses, * a substitution string is build from the replace string, where where "&" * is replaced by the entire matched pattern, and "\1" through "\9" are * replaced by captured expressions. The original source string and its * length, and the match arrays beg and end must be passed. */ static FXString substitute(const FXchar* string,FXint len,FXint* beg,FXint* end,const FXString& replace,FXint npar=1); /// Return substitution string static FXString substitute(const FXString& string,FXint* beg,FXint* end,const FXString& replace,FXint npar=1); /// Returns error code for given error static const FXchar* getError(FXRexError err){ return errors[err]; } /// Comparison operators bool operator==(const FXRex& rex) const; bool operator!=(const FXRex& rex) const; /// Saving and loading friend FXAPI FXStream& operator<<(FXStream& store,const FXRex& s); friend FXAPI FXStream& operator>>(FXStream& store,FXRex& s); /// Delete ~FXRex(); }; extern FXAPI FXStream& operator<<(FXStream& store,const FXRex& s); extern FXAPI FXStream& operator>>(FXStream& store,FXRex& s); } #endif fox-1.6.49/include/FXKOI8RCodec.h0000644000175000017500000000110311637250333013152 00000000000000#ifndef FXKOI8RCODEC_H #define FXKOI8RCODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// KOI8-R Codec class FXAPI FXKOI8RCodec : public FXTextCodec { FXDECLARE(FXKOI8RCodec) public: FXKOI8RCodec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXKOI8RCodec(){} }; } #endif fox-1.6.49/include/FXTranslator.h0000664000175000017500000000620512130340076013514 00000000000000/******************************************************************************** * * * M e s s a g e T r a n s l a t o r * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTranslator.h,v 1.6 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTRANSLATOR_H #define FXTRANSLATOR_H #ifndef FXOBJECT_H #include "FXObject.h" #endif //////////////////////////// UNDER DEVELOPMENT //////////////////////////////// namespace FX { class FXApp; class FXTextCodec; /** * The translator class translates a message to another language. */ class FXAPI FXTranslator : public FXObject { FXDECLARE(FXTranslator) private: FXApp *app; // Back link to application object FXTextCodec *codec; // Text codec used for source text private: FXTranslator(const FXTranslator&); FXTranslator &operator=(const FXTranslator&); protected: FXTranslator():app((FXApp*)-1L){} public: /// Construct translator FXTranslator(FXApp* a); /// Get application FXApp* getApp() const { return app; } /// Translate a string virtual const FXchar* tr(const FXchar* context,const FXchar* message,const FXchar* hint=NULL) const; /// Change text codec used to decode the messages embedded in the source void setTextCodec(FXTextCodec *cdc){ codec=cdc; } /// Return text codec FXTextCodec *getTextCodec() const { return codec; } /// Save translator to a stream virtual void save(FXStream& store) const; /// Load translator from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXTranslator(); }; } #endif fox-1.6.49/include/FXUndoList.h0000664000175000017500000002371412130340076013130 00000000000000/******************************************************************************** * * * U n d o / R e d o - a b l e C o m m a n d * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXUndoList.h,v 1.38 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXUNDOLIST_H #define FXUNDOLIST_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { class FXUndoList; class FXCommandGroup; /** * Base class for undoable commands. Each undo records all the * information necessary to undo as well as redo a given operation. * Since commands are derived from FXObject, subclassed commands can * both send and receive messages (like ID_GETINTVALUE, for example). */ class FXAPI FXCommand : public FXObject { FXDECLARE_ABSTRACT(FXCommand) friend class FXUndoList; friend class FXCommandGroup; private: FXCommand *next; private: FXCommand(const FXCommand&); FXCommand &operator=(const FXCommand&); protected: FXCommand():next(NULL){} public: /** * Undo this command; this should save the * information for a subsequent redo. */ virtual void undo() = 0; /** * Redo this command; this should save the * information for a subsequent undo. */ virtual void redo() = 0; /** * Return the size of the information in the undo record. * The undo list may be trimmed to limit memory usage to * a certain limit. The value returned should include * the size of the command record itself as well as any * data linked from it. */ virtual FXuint size() const; /** * Name of the undo command to be shown on a button; * for example, "Undo Delete". */ virtual FXString undoName() const; /** * Name of the redo command to be shown on a button; * for example, "Redo Delete". */ virtual FXString redoName() const; /** * Return TRUE if this command can be merged with previous undo * commands. This is useful to combine e.g. multiple consecutive * single-character text changes into a single block change. * The default implementation returns FALSE. */ virtual bool canMerge() const; /** * Called by the undo system to try and merge the new incoming command * with this command; should return TRUE if merging was possible. * The default implementation returns FALSE. */ virtual bool mergeWith(FXCommand* command); /// Delete undo command virtual ~FXCommand(){} }; /** * Group of undoable commands. A group may comprise multiple * individual actions which together undo (or redo) a larger * operation. Even larger operations may be built by nesting * multiple undo groups. */ class FXAPI FXCommandGroup : public FXCommand { FXDECLARE(FXCommandGroup) friend class FXUndoList; private: FXCommand *undolist; FXCommand *redolist; FXCommandGroup *group; private: FXCommandGroup(const FXCommandGroup&); FXCommandGroup &operator=(const FXCommandGroup&); public: /// Construct initially empty undo command group FXCommandGroup():undolist(NULL),redolist(NULL),group(NULL){} /// Return TRUE if empty bool empty(){ return !undolist; } /// Undo whole command group virtual void undo(); /// Redo whole command group virtual void redo(); /// Return the size of the command group virtual FXuint size() const; /// Delete undo command and sub-commands virtual ~FXCommandGroup(); }; /** * The Undo List class manages a list of undoable commands. */ class FXAPI FXUndoList : public FXCommandGroup { FXDECLARE(FXUndoList) private: FXint undocount; // Number of undo records FXint redocount; // Number of redo records FXint marker; // Marker value FXuint space; // Space taken up by all the undo records bool working; // Currently busy with undo or redo private: FXUndoList(const FXUndoList&); FXUndoList &operator=(const FXUndoList&); public: long onCmdUndo(FXObject*,FXSelector,void*); long onUpdUndo(FXObject*,FXSelector,void*); long onCmdRedo(FXObject*,FXSelector,void*); long onUpdRedo(FXObject*,FXSelector,void*); long onCmdClear(FXObject*,FXSelector,void*); long onUpdClear(FXObject*,FXSelector,void*); long onCmdRevert(FXObject*,FXSelector,void*); long onUpdRevert(FXObject*,FXSelector,void*); long onCmdUndoAll(FXObject*,FXSelector,void*); long onCmdRedoAll(FXObject*,FXSelector,void*); long onUpdUndoCount(FXObject*,FXSelector,void*); long onUpdRedoCount(FXObject*,FXSelector,void*); public: enum{ ID_CLEAR=FXWindow::ID_LAST, ID_REVERT, ID_UNDO, ID_REDO, ID_UNDO_ALL, ID_REDO_ALL, ID_UNDO_COUNT, ID_REDO_COUNT, ID_LAST }; public: /** * Make new empty undo list, initially unmarked. */ FXUndoList(); /** * Cut the redo list. * This is automatically invoked when a new undo command is added. */ void cut(); /** * Add new command, executing it if desired. The new command will be merged * with the previous command if merge is TRUE and we're not at a marked position * and the commands are mergeable. Otherwise the new command will be appended * after the last undo command in the currently active undo group. * If the new command is successfully merged, it will be deleted. Furthermore, * all redo commands will be deleted since it is no longer possible to redo * from this point. */ void add(FXCommand* command,bool doit=false,bool merge=true); /** * Begin undo command sub-group. This begins a new group of commands that * are treated as a single command. Must eventually be followed by a * matching end() after recording the sub-commands. The new sub-group * will be appended to its parent group's undo list when end() is called. */ void begin(FXCommandGroup *command); /** * End undo command sub-group. If the sub-group is still empty, it will * be deleted; otherwise, the sub-group will be added as a new command * into parent group. * A matching begin() must have been called previously. */ void end(); /** * Abort the current command sub-group being compiled. All commands * already added to the sub-groups undo list will be discarded. * Intermediate command groups will be left intact. */ void abort(); /** * Undo last command. This will move the command to the redo list. */ virtual void undo(); /** * Redo next command. This will move the command back to the undo list. */ virtual void redo(); /// Undo all commands void undoAll(); /// Redo all commands void redoAll(); /// Revert to marked void revert(); /// Can we undo more commands bool canUndo() const; /// Can we redo more commands bool canRedo() const; /// Can revert to marked bool canRevert() const; /** * Return TRUE if currently inside undo or redo operation; this * is useful to avoid generating another undo command while inside * an undo operation. */ bool busy() const { return working; } /// Current top level undo command FXCommand* current() const { return undolist; } /** * Return name of the first undo command available; if no * undo command available this will return the empty string. */ virtual FXString undoName() const; /** * Return name of the first redo command available; if no * Redo command available this will return the empty string. */ virtual FXString redoName() const; /// Number of undo records FXint undoCount() const { return undocount; } /// Number of redo records FXint redoCount() const { return redocount; } /// Size of undo information virtual FXuint size() const; /** * Clear list, and unmark all states. * All undo and redo information will be destroyed. */ void clear(); /** * Trim undo list down to at most nc commands. * Call this periodically to prevent the undo-list from growing * beyond a certain number of records. */ void trimCount(FXint nc); /** * Trim undo list down to at most size sz. * Call this periodically to prevent the undo-list from growing * beyond a certain amount of memory. */ void trimSize(FXuint sz); /** * Mark the current state of the undo list, which is initially unmarked. * There can be only one active mark at any time. Call mark() at any * time when you know the document to be "clean"; for example when you * save the document to disk. */ void mark(); /** * Unmark all states in the undo list. */ void unmark(); /** * Check if the current state was marked, if the application has returned * to the previously marked state. */ bool marked() const; }; } #endif fox-1.6.49/include/FXMDIChild.h0000664000175000017500000002656112130340076012747 00000000000000/******************************************************************************** * * * M u l t i p l e D o c u m e n t C h i l d W i n d o w * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMDIChild.h,v 1.42 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXMDICHILD_H #define FXMDICHILD_H #ifndef FXCOMPOSITE_H #include "FXComposite.h" #endif namespace FX { class FXMDIClient; class FXMenuButton; class FXButton; class FXFont; /// MDI Child Window styles enum { MDI_NORMAL = 0, /// Normal display mode MDI_MAXIMIZED = 0x00001000, /// Window appears maximized MDI_MINIMIZED = 0x00002000, /// Window is iconified or minimized MDI_TRACKING = 0x00004000 /// Track continuously during dragging }; /** * The MDI child window contains the application work area in a Multiple Document * Interface application. GUI Controls are connected to the MDI child via delegation * through the MDI client, which forwards messages it receives to the active MDI child. * The MDI child itself tries to further delegate messages to its single content window, * and if not handled there, to its target object. * When the MDI child is maximized, it sends a SEL_MAXIMIZE message; when the MDI * child is minimized, it sends a SEL_MINIMIZE message. When it is restored, it * sends a SEL_RESTORE message to its target. The MDI child also notifies its * target when it becomes the active MDI child, via the SEL_SELECTED message. * The void* in the SEL_SELECTED message refers to the previously active MDI child, * if any. When an MDI child ceases to be the active one, a SEL_DESELECTED message * is sent. The void* in the SEL_DESELECTED message refers to the newly activated * MDI child, if any. Thus, interception of SEL_SELECTED and SEL_DESELECTED allows * the target object to determine whether the user switched between MDI windows of * the same document (target) or between MDI windows belonging to the same document. * When the MDI child is closed, it sends a SEL_CLOSE message to its target. * The target has an opportunity to object to the closing; if the MDI child should * not be closed, it should return 1 (objection). If the MDI child should be closed, * the target can either just return 0 or simply not handle the SEL_CLOSE message. * The SEL_UPDATE message can be used to modify the MDI child's title (via * ID_SETSTRINGVALUE), and window icon (via ID_SETICONVALUE). */ class FXAPI FXMDIChild : public FXComposite { FXDECLARE(FXMDIChild) protected: FXString title; // Window title FXMenuButton *windowbtn; // Window button FXButton *minimizebtn; // Minimize button FXButton *restorebtn; // Restore button FXButton *maximizebtn; // Maximize buton FXButton *deletebtn; // Close button FXFont *font; // Title font FXColor baseColor; // Colors FXColor hiliteColor; FXColor shadowColor; FXColor borderColor; FXColor titleColor; FXColor titleBackColor; FXint iconPosX; // Saved icon position FXint iconPosY; FXint iconWidth; FXint iconHeight; FXint normalPosX; // Saved normal position FXint normalPosY; FXint normalWidth; FXint normalHeight; FXint spotx; // Grab-spot of mouse on window FXint spoty; FXint xoff; // Mouse offset to add FXint yoff; FXint newx; // New location of window FXint newy; FXint neww; FXint newh; FXuchar mode; // Dragging mode protected: FXMDIChild(); void drawRubberBox(FXint x,FXint y,FXint w,FXint h); void animateRectangles(FXint ox,FXint oy,FXint ow,FXint oh,FXint nx,FXint ny,FXint nw,FXint nh); FXuchar where(FXint x,FXint y); void changeCursor(FXint x,FXint y); void revertCursor(); protected: enum { DRAG_NONE = 0, DRAG_TOP = 1, DRAG_BOTTOM = 2, DRAG_LEFT = 4, DRAG_RIGHT = 8, DRAG_TOPLEFT = (DRAG_TOP|DRAG_LEFT), DRAG_TOPRIGHT = (DRAG_TOP|DRAG_RIGHT), DRAG_BOTTOMLEFT = (DRAG_BOTTOM|DRAG_LEFT), DRAG_BOTTOMRIGHT = (DRAG_BOTTOM|DRAG_RIGHT), DRAG_INVERTED = 16, DRAG_TITLE = 32 }; private: FXMDIChild(const FXMDIChild&); FXMDIChild &operator=(const FXMDIChild&); public: long onPaint(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onSelected(FXObject*,FXSelector,void*); long onDeselected(FXObject*,FXSelector,void*); long onCmdClose(FXObject*,FXSelector,void*); long onUpdClose(FXObject*,FXSelector,void*); long onCmdRestore(FXObject*,FXSelector,void*); long onUpdRestore(FXObject*,FXSelector,void*); long onUpdMaximize(FXObject*,FXSelector,void*); long onUpdMinimize(FXObject*,FXSelector,void*); long onCmdMaximize(FXObject*,FXSelector,void*); long onCmdMinimize(FXObject*,FXSelector,void*); long onUpdWindow(FXObject*,FXSelector,void*); long onUpdMenuRestore(FXObject*,FXSelector,void*); long onUpdMenuMinimize(FXObject*,FXSelector,void*); long onUpdMenuClose(FXObject*,FXSelector,void*); long onUpdMenuWindow(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSetIconValue(FXObject*,FXSelector,void*); long onCmdGetIconValue(FXObject*,FXSelector,void*); virtual long onDefault(FXObject*,FXSelector,void*); public: /// Construct MDI Child window with given name and icon FXMDIChild(FXMDIClient* p,const FXString& name,FXIcon* ic=NULL,FXPopup* pup=NULL,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create window virtual void create(); /// Detach window virtual void detach(); /// Perform layout virtual void layout(); /// Return the default width of this window virtual FXint getDefaultWidth(); /// Return the default height of this window virtual FXint getDefaultHeight(); /// Move the focus to this window virtual void setFocus(); /// MDI Child can receive focus virtual bool canFocus() const; /// Move this window to the specified position in the parent's coordinates virtual void move(FXint x,FXint y); /// Resize this window to the specified width and height virtual void resize(FXint w,FXint h); /// Move and resize this window in the parent's coordinates virtual void position(FXint x,FXint y,FXint w,FXint h); /// Change normal (restored) position void setNormalX(FXint x){ normalPosX=x; } void setNormalY(FXint y){ normalPosY=y; } void setNormalWidth(FXint w){ normalWidth=w; } void setNormalHeight(FXint h){ normalHeight=h; } /// Return normal (restored) position FXint getNormalX() const { return normalPosX; } FXint getNormalY() const { return normalPosY; } FXint getNormalWidth() const { return normalWidth; } FXint getNormalHeight() const { return normalHeight; } /// Change iconified position void setIconX(FXint x){ iconPosX=x; } void setIconY(FXint y){ iconPosY=y; } void setIconWidth(FXint w){ iconWidth=w; } void setIconHeight(FXint h){ iconHeight=h; } /// Return iconified position FXint getIconX() const { return iconPosX; } FXint getIconY() const { return iconPosY; } FXint getIconWidth() const { return iconWidth; } FXint getIconHeight() const { return iconHeight; } /// Return content window FXWindow *contentWindow() const; /// Change MDI Child's title void setTitle(const FXString& name); /// Get current title FXString getTitle() const { return title; } /// Get colors FXColor getHiliteColor() const { return hiliteColor; } FXColor getShadowColor() const { return shadowColor; } FXColor getBaseColor() const { return baseColor; } FXColor getBorderColor() const { return borderColor; } FXColor getTitleColor () const { return titleColor; } FXColor getTitleBackColor() const { return titleBackColor; } /// Change colors void setHiliteColor(FXColor clr); void setShadowColor(FXColor clr); void setBaseColor(FXColor clr); void setBorderColor(FXColor clr); void setTitleColor(FXColor clr); void setTitleBackColor(FXColor clr); /// Maximize MDI window, return TRUE if maximized virtual FXbool maximize(FXbool notify=FALSE); /// Minimize/iconify MDI window, return TRUE if minimized virtual FXbool minimize(FXbool notify=FALSE); /// Restore MDI window to normal, return TRUE if restored virtual FXbool restore(FXbool notify=FALSE); /// Close MDI window, return TRUE if actually closed virtual FXbool close(FXbool notify=FALSE); /// Return TRUE if maximized FXbool isMaximized() const; /// Return TRUE if minimized FXbool isMinimized() const; /// Get window icon FXIcon *getIcon() const; /// Set window icon void setIcon(FXIcon* icon); /// Get window menu FXPopup* getMenu() const; /// Set window menu void setMenu(FXPopup* menu); /// Set tracking instead of just outline void setTracking(FXbool tracking=TRUE); /// Return true if tracking FXbool getTracking() const; /// Set title font void setFont(FXFont *fnt); /// Get title font FXFont* getFont() const { return font; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy virtual ~FXMDIChild(); }; } #endif fox-1.6.49/include/FXGLTriangleMesh.h0000664000175000017500000001017112130340076014165 00000000000000/******************************************************************************** * * * O p e n G L T r i a n g l e M e s h O b j e c t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLTriangleMesh.h,v 1.15 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXGLTRIANGLEMESH_H #define FXGLTRIANGLEMESH_H #ifndef FXGLSHAPE_H #include "FXGLShape.h" #endif namespace FX { /* * Arrays Formats * * vertex: x,y,z * normal: x,y,z * Color: r,g.b,a * texture: u,v */ /// OpenGL Triangle Mesh Object class FXAPI FXGLTriangleMesh : public FXGLShape { FXDECLARE(FXGLTriangleMesh) private: FXfloat *vertexBuffer; FXfloat *colorBuffer; FXfloat *normalBuffer; FXfloat *textureBuffer; FXint vertexNumber; protected: FXGLTriangleMesh(); virtual void drawshape(FXGLViewer* viewer); virtual void recomputerange(); virtual void generatenormals(); public: /// Construct triangle mesh with nv vertices, and optional normals, colors, and texture coordinates FXGLTriangleMesh(FXfloat x,FXfloat y,FXfloat z,FXint nv,FXfloat *v,FXfloat *n=NULL,FXfloat *c=NULL,FXfloat *t=NULL); /// Construct triangle mesh with nv vertices, and optional normals, colors, and texture coordinates, and surface material FXGLTriangleMesh(FXfloat x,FXfloat y,FXfloat z,FXint nv,FXfloat *v,FXfloat *n,FXfloat *c,FXfloat *t,const FXMaterial& mtl); /// Copy constructor FXGLTriangleMesh(const FXGLTriangleMesh& orig); /// Copy this object virtual FXGLObject* copy(); /// Change number of vertices void setVertexNumber(FXint nvertices){ vertexNumber=nvertices; } /// Get number of vertices FXint getVertexNumber() const { return vertexNumber; } /// Set vertex buffer void setVertexBuffer(FXfloat *vertices); /// Get vertex buffer FXfloat* getVertexBuffer() const { return vertexBuffer; } /// Set color buffer void setColorBuffer(FXfloat *colors){ colorBuffer=colors; } /// Get color buffer FXfloat* getColorBuffer() const { return colorBuffer; } /// Set normals buffer void setNormalBuffer(FXfloat *normals){ normalBuffer=normals; } /// Get normals buffer FXfloat* getNormalBuffer() const { return normalBuffer; } /// Set texture coordinate buffer void setTextureCoordBuffer(FXfloat *textures){ textureBuffer=textures; } /// Get texture coordinate buffer FXfloat* getTextureCoordBuffer() const { return textureBuffer; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXGLTriangleMesh(); }; } #endif fox-1.6.49/include/FX885910Codec.h0000644000175000017500000000111311637250333013075 00000000000000#ifndef FX885910CODEC_H #define FX885910CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-10 Codec class FXAPI FX885910Codec : public FXTextCodec { FXDECLARE(FX885910Codec) public: FX885910Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX885910Codec(){} }; } #endif fox-1.6.49/include/FXFile.h0000664000175000017500000001166112130340076012244 00000000000000/******************************************************************************** * * * F i l e C l a s s * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFile.h,v 1.100 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXFILE_H #define FXFILE_H #ifndef FXIO_H #include "FXIO.h" #endif namespace FX { /** * Low level file access. */ class FXAPI FXFile : public FXIO { private: FXFile(const FXFile&); FXFile &operator=(const FXFile&); public: /// Construct file FXFile(){ } /// Construct file and attach existing handle h FXFile(FXInputHandle handle,FXuint mode); /// Construct and open a file FXFile(const FXString& file,FXuint mode=FXIO::Reading,FXuint perm=FXIO::OwnerReadWrite|FXIO::GroupReadWrite|FXIO::OtherReadWrite); /// Open file virtual bool open(const FXString& file,FXuint mode=FXIO::Reading,FXuint perm=FXIO::OwnerReadWrite|FXIO::GroupReadWrite|FXIO::OtherReadWrite); /// Open device with access mode and handle virtual bool open(FXInputHandle handle,FXuint mode); /// Get current file position virtual FXlong position() const; /// Change file position, returning new position from start virtual FXlong position(FXlong offset,FXuint from=FXIO::Begin); /// Read block of bytes, returning number of bytes read virtual FXival readBlock(void* data,FXival count); /// Write block of bytes, returning number of bytes written virtual FXival writeBlock(const void* data,FXival count); /// Truncate file virtual FXlong truncate(FXlong size); /// Flush to disk virtual bool flush(); /// Return file size virtual FXlong size(); /// Test if we're at the end virtual bool eof(); /// Close file virtual bool close(); /// Create new (empty) file static bool create(const FXString& file,FXuint perm=FXIO::OwnerReadWrite|FXIO::GroupReadWrite|FXIO::OtherReadWrite); /// Remove file static bool remove(const FXString& file); /// Rename or move srcfile to dstfile, replacing dstfile if it exists static bool rename(const FXString& srcfile,const FXString& dstfile); /// Link file static bool link(const FXString& srcfile,const FXString& dstfile); /// Read symbolic link static FXString symlink(const FXString& file); /// Symbolic link file static bool symlink(const FXString& srcfile,const FXString& dstfile); /// Return true if files are identical static bool identical(const FXString& file1,const FXString& file2); /// Copy srcfile to dstfile, overwriting dstfile if allowed static bool copy(const FXString& srcfile,const FXString& dstfile,bool overwrite=false); /// Concatenate srcfile1 and srcfile2 to dstfile, overwriting dstfile if allowed static bool concat(const FXString& srcfile1,const FXString& srcfile2,const FXString& dstfile,bool overwrite=false); /// Recursively copy files or directories from srcfile to dstfile, overwriting dstfile if allowed static bool copyFiles(const FXString& srcfile,const FXString& dstfile,bool overwrite=false); /// Recursively copy or move files or directories from srcfile to dstfile, overwriting dstfile if allowed static bool moveFiles(const FXString& srcfile,const FXString& dstfile,bool overwrite=false); /// Recursively remove file or directory, recurse if allowed static bool removeFiles(const FXString& path,bool recursive=false); /// Destroy virtual ~FXFile(); }; } #endif fox-1.6.49/include/FXCP862Codec.h0000644000175000017500000000107711637250333013072 00000000000000#ifndef FXCP862CODEC_H #define FXCP862CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP862 Codec class FXAPI FXCP862Codec : public FXTextCodec { FXDECLARE(FXCP862Codec) public: FXCP862Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP862Codec(){} }; } #endif fox-1.6.49/include/FXPPMIcon.h0000664000175000017500000000630212130340076012626 00000000000000/******************************************************************************** * * * P P M I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2003,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPPMIcon.h,v 1.9 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXPPMICON_H #define FXPPMICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// Portable Pixmap icon class FXAPI FXPPMIcon : public FXIcon { FXDECLARE(FXPPMIcon) protected: FXPPMIcon(){} private: FXPPMIcon(const FXPPMIcon&); FXPPMIcon &operator=(const FXPPMIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in Portable Pixmap format FXPPMIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in Portable Pixmap format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in Portable Pixmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXPPMIcon(); }; /** * Check if stream contains a PPM, return TRUE if so. */ extern FXAPI bool fxcheckPPM(FXStream& store); /** * Load an PPM (Portable Pixmap Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadPPM(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an PPM (Portable Pixmap Format) file to a stream. */ extern FXAPI bool fxsavePPM(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXFileList.h0000664000175000017500000003315412130340076013101 00000000000000/******************************************************************************** * * * F i l e L i s t W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFileList.h,v 1.57 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXFILELIST_H #define FXFILELIST_H #ifndef FXICONLIST_H #include "FXIconList.h" #endif namespace FX { struct FXFileAssoc; class FXFileDict; class FXFileList; class FXIcon; class FXIconSource; class FXIconDict; /// File List options enum { FILELIST_SHOWHIDDEN = 0x04000000, /// Show hidden files or directories FILELIST_SHOWDIRS = 0x08000000, /// Show only directories FILELIST_SHOWFILES = 0x10000000, /// Show only files FILELIST_SHOWIMAGES = 0x20000000, /// Show preview of images FILELIST_NO_OWN_ASSOC = 0x40000000, /// Do not create associations for files FILELIST_NO_PARENT = 0x80000000 /// Suppress display of '.' and '..' }; /// File item class FXAPI FXFileItem : public FXIconItem { FXDECLARE(FXFileItem) friend class FXFileList; protected: FXFileAssoc *assoc; // File association record FXFileItem *link; // Link to next item FXlong size; // File size FXTime date; // File time private: FXFileItem(const FXFileItem&); FXFileItem& operator=(const FXFileItem&); protected: FXFileItem():assoc(NULL),link(NULL),size(0),date(0){} protected: enum{ FOLDER = 64, // Directory item EXECUTABLE = 128, // Executable item SYMLINK = 256, // Symbolic linked item CHARDEV = 512, // Character special item BLOCKDEV = 1024, // Block special item FIFO = 2048, // FIFO item SOCK = 4096, // Socket item SHARE = 8192 // Share }; public: /// Constructor FXFileItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,void* ptr=NULL):FXIconItem(text,bi,mi,ptr),assoc(NULL),link(NULL),size(0L),date(0){} /// Return true if this is a file item FXbool isFile() const { return (state&(FOLDER|BLOCKDEV|CHARDEV|FIFO|SOCK|SHARE))==0; } /// Return true if this is a directory item FXbool isDirectory() const { return (state&FOLDER)!=0; } /// Return true if this is a share item FXbool isShare() const { return (state&SHARE)!=0; } /// Return true if this is an executable item FXbool isExecutable() const { return (state&EXECUTABLE)!=0; } /// Return true if this is a symbolic link item FXbool isSymlink() const { return (state&SYMLINK)!=0; } /// Return true if this is a character device item FXbool isChardev() const { return (state&CHARDEV)!=0; } /// Return true if this is a block device item FXbool isBlockdev() const { return (state&BLOCKDEV)!=0; } /// Return true if this is an FIFO item FXbool isFifo() const { return (state&FIFO)!=0; } /// Return true if this is a socket FXbool isSocket() const { return (state&SOCK)!=0; } /// Return the file-association object for this item FXFileAssoc* getAssoc() const { return assoc; } /// Return the file size for this item FXlong getSize() const { return size; } /// Return the date for this item FXTime getDate() const { return date; } }; /** * A File List widget provides an icon rich view of the file system. * It automatically updates itself periodically by re-scanning the file system * for any changes. As it scans the displayed directory, it automatically * determines the icons to be displayed by consulting the file associations registry * settings. A number of messages can be sent to the File List to control the * filter pattern, sort category, sorting order, case sensitivity, and hidden file * display mode. * The File list widget supports drags and drops of files. */ class FXAPI FXFileList : public FXIconList { FXDECLARE(FXFileList) protected: FXString directory; // Current directory FXString orgdirectory; // Original directory FXString dropdirectory; // Drop directory FXDragAction dropaction; // Drop action FXString dragfiles; // Dragged files FXFileDict *associations; // Association table FXFileItem *list; // File item list FXString pattern; // Pattern of file names FXuint matchmode; // File wildcard match mode FXuint counter; // Refresh counter FXint imagesize; // Image size FXTime timestamp; // Time when last refreshed FXIcon *big_folder; // Big folder icon FXIcon *mini_folder; // Mini folder icon FXIcon *big_doc; // Big document icon FXIcon *mini_doc; // Mini document icon FXIcon *big_app; // Big application icon FXIcon *mini_app; // Mini application icon protected: FXFileList(); virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr); void listItems(FXbool force); private: FXFileList(const FXFileList&); FXFileList &operator=(const FXFileList&); public: long onOpenTimer(FXObject*,FXSelector,void*); long onRefreshTimer(FXObject*,FXSelector,void*); long onDNDEnter(FXObject*,FXSelector,void*); long onDNDLeave(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onDNDDrop(FXObject*,FXSelector,void*); long onDNDRequest(FXObject*,FXSelector,void*); long onBeginDrag(FXObject*,FXSelector,void*); long onEndDrag(FXObject*,FXSelector,void*); long onDragged(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdDirectoryUp(FXObject*,FXSelector,void*); long onUpdDirectoryUp(FXObject*,FXSelector,void*); long onCmdSortByName(FXObject*,FXSelector,void*); long onUpdSortByName(FXObject*,FXSelector,void*); long onCmdSortByType(FXObject*,FXSelector,void*); long onUpdSortByType(FXObject*,FXSelector,void*); long onCmdSortBySize(FXObject*,FXSelector,void*); long onUpdSortBySize(FXObject*,FXSelector,void*); long onCmdSortByTime(FXObject*,FXSelector,void*); long onUpdSortByTime(FXObject*,FXSelector,void*); long onCmdSortByUser(FXObject*,FXSelector,void*); long onUpdSortByUser(FXObject*,FXSelector,void*); long onCmdSortByGroup(FXObject*,FXSelector,void*); long onUpdSortByGroup(FXObject*,FXSelector,void*); long onCmdSortReverse(FXObject*,FXSelector,void*); long onUpdSortReverse(FXObject*,FXSelector,void*); long onCmdSortCase(FXObject*,FXSelector,void*); long onUpdSortCase(FXObject*,FXSelector,void*); long onCmdSetPattern(FXObject*,FXSelector,void*); long onUpdSetPattern(FXObject*,FXSelector,void*); long onCmdSetDirectory(FXObject*,FXSelector,void*); long onUpdSetDirectory(FXObject*,FXSelector,void*); long onCmdToggleHidden(FXObject*,FXSelector,void*); long onUpdToggleHidden(FXObject*,FXSelector,void*); long onCmdShowHidden(FXObject*,FXSelector,void*); long onUpdShowHidden(FXObject*,FXSelector,void*); long onCmdHideHidden(FXObject*,FXSelector,void*); long onUpdHideHidden(FXObject*,FXSelector,void*); long onCmdToggleImages(FXObject*,FXSelector,void*); long onUpdToggleImages(FXObject*,FXSelector,void*); long onCmdHeader(FXObject*,FXSelector,void*); long onUpdHeader(FXObject*,FXSelector,void*); long onCmdRefresh(FXObject*,FXSelector,void*); public: static FXint ascending(const FXIconItem* a,const FXIconItem* b); static FXint descending(const FXIconItem* a,const FXIconItem* b); static FXint ascendingCase(const FXIconItem* a,const FXIconItem* b); static FXint descendingCase(const FXIconItem* a,const FXIconItem* b); static FXint ascendingType(const FXIconItem* a,const FXIconItem* b); static FXint descendingType(const FXIconItem* a,const FXIconItem* b); static FXint ascendingSize(const FXIconItem* a,const FXIconItem* b); static FXint descendingSize(const FXIconItem* a,const FXIconItem* b); static FXint ascendingTime(const FXIconItem* a,const FXIconItem* b); static FXint descendingTime(const FXIconItem* a,const FXIconItem* b); static FXint ascendingUser(const FXIconItem* a,const FXIconItem* b); static FXint descendingUser(const FXIconItem* a,const FXIconItem* b); static FXint ascendingGroup(const FXIconItem* a,const FXIconItem* b); static FXint descendingGroup(const FXIconItem* a,const FXIconItem* b); public: enum { ID_REFRESHTIMER=FXIconList::ID_LAST, ID_OPENTIMER, ID_SORT_BY_NAME, /// Sort by name ID_SORT_BY_TYPE, /// Sort by type ID_SORT_BY_SIZE, /// Sort by size ID_SORT_BY_TIME, /// Sort by access time ID_SORT_BY_USER, /// Sort by owner name ID_SORT_BY_GROUP, /// Sort by group name ID_SORT_REVERSE, /// Reverse sort order ID_SORT_CASE, /// Toggle sort case sensitivity ID_DIRECTORY_UP, /// Move up one directory ID_SET_PATTERN, /// Set match pattern ID_SET_DIRECTORY, /// Set directory ID_SHOW_HIDDEN, /// Show hidden files ID_HIDE_HIDDEN, /// Hide hidden files ID_TOGGLE_HIDDEN, /// Toggle display of hidden files ID_TOGGLE_IMAGES, /// Toggle display of images ID_REFRESH, /// Refresh immediately ID_LAST }; public: /// Construct a file list FXFileList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Scan the current directory and update the items if needed, or if force is TRUE void scan(FXbool force=TRUE); /// Set current file void setCurrentFile(const FXString& file,FXbool notify=FALSE); /// Return current file FXString getCurrentFile() const; /// Set current directory void setDirectory(const FXString& path); /// Return current directory FXString getDirectory() const { return directory; } /// Change wildcard matching pattern void setPattern(const FXString& ptrn); /// Return wildcard pattern FXString getPattern() const { return pattern; } /// Return TRUE if item is a directory FXbool isItemDirectory(FXint index) const; /// Return TRUE if item is a directory FXbool isItemShare(FXint index) const; /// Return TRUE if item is a file FXbool isItemFile(FXint index) const; /// Return TRUE if item is executable FXbool isItemExecutable(FXint index) const; /// Return name of item at index FXString getItemFilename(FXint index) const; /// Return full pathname of item at index FXString getItemPathname(FXint index) const; /// Return file association of item FXFileAssoc* getItemAssoc(FXint index) const; /// Return wildcard matching mode FXuint getMatchMode() const { return matchmode; } /// Change wildcard matching mode void setMatchMode(FXuint mode); /// Return TRUE if showing hidden files FXbool showHiddenFiles() const; /// Show or hide hidden files void showHiddenFiles(FXbool showing); /// Return TRUE if showing directories only FXbool showOnlyDirectories() const; /// Show directories only void showOnlyDirectories(FXbool shown); /// Return TRUE if showing files only FXbool showOnlyFiles() const; /// Show files only void showOnlyFiles(FXbool shown); /// Return TRUE if image preview on FXbool showImages() const; /// Show or hide preview images void showImages(FXbool showing); /// Return images preview size FXint getImageSize() const { return imagesize; } /// Change images preview size void setImageSize(FXint size); /// Return TRUE if showing parent directories FXbool showParents() const; /// Show parent directories void showParents(FXbool shown); /// Change file associations void setAssociations(FXFileDict* assoc); /// Return file associations FXFileDict* getAssociations() const { return associations; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXFileList(); }; } #endif fox-1.6.49/include/FXGLViewer.h0000664000175000017500000004712612130340076013056 00000000000000/******************************************************************************** * * * O p e n G L V i e w e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLViewer.h,v 1.74 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXGLVIEWER_H #define FXGLVIEWER_H #ifndef FXGLCANVAS_H #include "FXGLCanvas.h" #endif namespace FX { class FXDCPrint; class FXGLObject; class FXGLVisual; // GL Viewer options enum { VIEWER_LIGHTING = 0x00008000, /// Lighting is on VIEWER_FOG = 0x00010000, /// Fog mode on VIEWER_DITHER = 0x00020000 /// Dithering }; /******************************* Viewer Structs *****************************/ /// OpenGL Viewer Viewport struct FXViewport { FXint w,h; // Viewport dimensions FXdouble left,right; // World box FXdouble bottom,top; FXdouble hither,yon; }; // OpenGL Light Source struct FXAPI FXLight { FXVec4f ambient; // Ambient light color FXVec4f diffuse; // Diffuse light color FXVec4f specular; // Specular light color FXVec4f position; // Light position FXVec3f direction; // Spot direction FXfloat exponent; // Spotlight exponent FXfloat cutoff; // Spotlight cutoff angle FXfloat c_attn; // Constant attenuation factor FXfloat l_attn; // Linear attenuation factor FXfloat q_attn; // Quadratic attenuation factor }; // OpenGL Material Description struct FXAPI FXMaterial { FXVec4f ambient; // Ambient material color FXVec4f diffuse; // Diffuse material color FXVec4f specular; // Specular material color FXVec4f emission; // Emissive material color FXfloat shininess; // Specular shininess }; // Feedback buffer sort routine typedef FXbool (*FXZSortFunc)(FXfloat*& buffer,FXint& used,FXint& size); /******************************** Viewer Class ******************************/ /// OpenGL viewer widget class FXAPI FXGLViewer : public FXGLCanvas { FXDECLARE(FXGLViewer) friend class FXGLObject; protected: FXViewport wvt; // Window viewport transform FXMat4f transform; // Current transformation matrix FXMat4f itransform; // Inverse of current transformation matrix FXuint projection; // Projection mode FXQuatf rotation; // Viewer orientation FXdouble fov; // Field of view FXdouble zoom; // Zoom factor FXVec3f center; // Model center FXVec3f scale; // Model scale FXdouble worldpx; // Pixel size in world FXdouble modelpx; // Pixel size in model FXint maxhits; // Maximum number of hits FXdouble ax,ay; // Quick view->world coordinate mapping FXdouble diameter; // Size of model diameter ( always > 0) FXdouble distance; // Distance of PRP to target FXVec4f background[2]; // Background colors FXVec4f ambient; // Global ambient light FXLight light; // Light source FXMaterial material; // Base material properties FXint dial[3]; // Dial positions FXString help; // Status help FXString tip; // Tooltip for background FXGLObject *dropped; // Object being dropped on FXGLObject *selection; // Current object FXZSortFunc zsortfunc; // Routine to sort feedback buffer FXGLObject *scene; // What we're looking at FXbool doesturbo; // Doing turbo mode FXbool turbomode; // Turbo mode FXuchar mode; // Mode the widget is in public: // Common DND types static FXDragType objectType; // GL Object type protected: // Mouse actions when in viewing window enum { HOVERING, // Hovering mouse w/o doing anything PICKING, // Pick mode ROTATING, // Rotating camera around target POSTING, // Posting right-mouse menu TRANSLATING, // Translating camera ZOOMING, // Zooming FOVING, // Change field-of-view DRAGGING, // Dragging objects TRUCKING, // Trucking camera GYRATING, // Rotation of camera around eye DO_LASSOSELECT, // Lasso select when mouse pressed LASSOSELECT, // Anchor of lasso rectangle DO_LASSOZOOM, // Zoom when mouse pressed LASSOZOOM // Zoom rectangle }; protected: FXGLViewer(); void glsetup(); virtual void updateProjection(); virtual void updateTransform(); FXVec3f spherePoint(FXint px,FXint py); FXQuatf turn(FXint fx,FXint fy,FXint tx,FXint ty); void drawWorld(FXViewport& wv); void drawAnti(FXViewport& wv); void drawLasso(FXint x0,FXint y0,FXint x1,FXint y1); FXint selectHits(FXuint*& hits,FXint& nhits,FXint x,FXint y,FXint w,FXint h); FXint renderFeedback(FXfloat *buffer,FXint x,FXint y,FXint w,FXint h,FXint maxbuffer); void drawFeedback(FXDCPrint& pdc,const FXfloat* buffer,FXint used); virtual FXGLObject* processHits(FXuint *pickbuffer,FXint nhits); void setOp(FXuint o); private: FXGLViewer(const FXGLViewer&); FXGLViewer &operator=(const FXGLViewer&); void initialize(); public: // Events long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onChanged(FXObject*,FXSelector,void*); long onPick(FXObject*,FXSelector,void*); long onClicked(FXObject*,FXSelector,void*); long onDoubleClicked(FXObject*,FXSelector,void*); long onTripleClicked(FXObject*,FXSelector,void*); long onLassoed(FXObject*,FXSelector,void*); long onSelected(FXObject*,FXSelector,void*); long onDeselected(FXObject*,FXSelector,void*); long onInserted(FXObject*,FXSelector,void*); long onDeleted(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onClipboardLost(FXObject*,FXSelector,void*); long onClipboardGained(FXObject*,FXSelector,void*); long onClipboardRequest(FXObject*,FXSelector,void*); // Commands long onCmdPerspective(FXObject*,FXSelector,void*); long onUpdPerspective(FXObject*,FXSelector,void*); long onCmdParallel(FXObject*,FXSelector,void*); long onUpdParallel(FXObject*,FXSelector,void*); long onCmdFront(FXObject*,FXSelector,void*); long onUpdFront(FXObject*,FXSelector,void*); long onCmdBack(FXObject*,FXSelector,void*); long onUpdBack(FXObject*,FXSelector,void*); long onCmdLeft(FXObject*,FXSelector,void*); long onUpdLeft(FXObject*,FXSelector,void*); long onCmdRight(FXObject*,FXSelector,void*); long onUpdRight(FXObject*,FXSelector,void*); long onCmdTop(FXObject*,FXSelector,void*); long onUpdTop(FXObject*,FXSelector,void*); long onCmdBottom(FXObject*,FXSelector,void*); long onUpdBottom(FXObject*,FXSelector,void*); long onCmdResetView(FXObject*,FXSelector,void*); long onCmdFitView(FXObject*,FXSelector,void*); long onDNDEnter(FXObject*,FXSelector,void*); long onDNDLeave(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onDNDDrop(FXObject*,FXSelector,void*); long onTipTimer(FXObject*,FXSelector,void*); long onCmdXYZDial(FXObject*,FXSelector,void*); long onUpdXYZDial(FXObject*,FXSelector,void*); long onCmdRollPitchYaw(FXObject*,FXSelector,void*); long onUpdRollPitchYaw(FXObject*,FXSelector,void*); long onCmdXYZScale(FXObject*,FXSelector,void*); long onUpdXYZScale(FXObject*,FXSelector,void*); long onUpdCurrent(FXObject*,FXSelector,void*); long onCmdCutSel(FXObject*,FXSelector,void*); long onCmdCopySel(FXObject*,FXSelector,void*); long onCmdPasteSel(FXObject*,FXSelector,void*); long onCmdDeleteSel(FXObject*,FXSelector,void*); long onUpdDeleteSel(FXObject*,FXSelector,void*); long onCmdBackColor(FXObject*,FXSelector,void*); long onUpdBackColor(FXObject*,FXSelector,void*); long onCmdGradientBackColor(FXObject*,FXSelector,void*); long onUpdGradientBackColor(FXObject*,FXSelector,void*); long onCmdAmbientColor(FXObject*,FXSelector,void*); long onUpdAmbientColor(FXObject*,FXSelector,void*); long onCmdLighting(FXObject*,FXSelector,void*); long onUpdLighting(FXObject*,FXSelector,void*); long onCmdFog(FXObject*,FXSelector,void*); long onUpdFog(FXObject*,FXSelector,void*); long onCmdDither(FXObject*,FXSelector,void*); long onUpdDither(FXObject*,FXSelector,void*); long onCmdFov(FXObject*,FXSelector,void*); long onUpdFov(FXObject*,FXSelector,void*); long onCmdZoom(FXObject*,FXSelector,void*); long onUpdZoom(FXObject*,FXSelector,void*); long onCmdLightAmbient(FXObject*,FXSelector,void*); long onUpdLightAmbient(FXObject*,FXSelector,void*); long onCmdLightDiffuse(FXObject*,FXSelector,void*); long onUpdLightDiffuse(FXObject*,FXSelector,void*); long onCmdLightSpecular(FXObject*,FXSelector,void*); long onUpdLightSpecular(FXObject*,FXSelector,void*); long onCmdTurbo(FXObject*,FXSelector,void*); long onUpdTurbo(FXObject*,FXSelector,void*); long onCmdPrintImage(FXObject*,FXSelector,void*); long onCmdPrintVector(FXObject*,FXSelector,void*); long onCmdLassoZoom(FXObject*,FXSelector,void*); long onCmdLassoSelect(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); virtual long onDefault(FXObject*,FXSelector,void*); public: // Projection modes enum { PARALLEL, // Parallel projection PERSPECTIVE // Perspective projection }; // Messages enum { ID_PERSPECTIVE=FXGLCanvas::ID_LAST, ID_PARALLEL, ID_FRONT, ID_BACK, ID_LEFT, ID_RIGHT, ID_TOP, ID_BOTTOM, ID_RESETVIEW, ID_FITVIEW, ID_TOP_COLOR, ID_BOTTOM_COLOR, ID_BACK_COLOR, ID_AMBIENT_COLOR, ID_LIGHT_AMBIENT, ID_LIGHT_DIFFUSE, ID_LIGHT_SPECULAR, ID_LIGHTING, ID_TURBO, ID_FOG, ID_DITHER, ID_SCALE_X, ID_SCALE_Y, ID_SCALE_Z, ID_DIAL_X, ID_DIAL_Y, ID_DIAL_Z, ID_ROLL, ID_PITCH, ID_YAW, ID_FOV, ID_ZOOM, ID_CUT_SEL, ID_COPY_SEL, ID_PASTE_SEL, ID_DELETE_SEL, ID_PRINT_IMAGE, ID_PRINT_VECTOR, ID_LASSO_ZOOM, ID_LASSO_SELECT, ID_LAST }; public: // Common DND type names static const FXchar objectTypeName[]; public: /// Construct GL viewer widget FXGLViewer(FXComposite* p,FXGLVisual *vis,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Construct GL viewer widget sharing display list with another GL viewer FXGLViewer(FXComposite* p,FXGLVisual *vis,FXGLViewer* sharegroup,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create all of the server-side resources for this window virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return size of pixel in world coordinates FXdouble worldPix() const { return worldpx; } /// Return size of pixel in model coordinates FXdouble modelPix() const { return modelpx; } /// Return a NULL-terminated list of all objects in the given rectangle, or NULL FXGLObject** lasso(FXint x1,FXint y1,FXint x2,FXint y2); /// Return a NULL-terminated list of all objects in the given rectangle, or NULL virtual FXGLObject** select(FXint x,FXint y,FXint w,FXint h); /// Perform a pick operation, returning the object at the given x,y position, or NULL virtual FXGLObject* pick(FXint x,FXint y); /// Change the model bounding box; this adjusts the viewer virtual FXbool setBounds(const FXRangef& box); /// Fit viewer to the given bounding box FXbool fitToBounds(const FXRangef& box); /// Return the viewer's viewport void getViewport(FXViewport& v) const; /// Translate eye-coordinate to screen coordinate void eyeToScreen(FXint& sx,FXint& sy,FXVec3f e); /// Translate screen coordinate to eye coordinate at the given depth FXVec3f screenToEye(FXint sx,FXint sy,FXfloat eyez=0.0); /// Translate screen coordinate to eye coordinate at the target point depth FXVec3f screenToTarget(FXint sx,FXint sy); /// Translate world coordinate to eye coordinate FXVec3f worldToEye(FXVec3f w); /// Translate world coordinate to eye coordinate depth FXfloat worldToEyeZ(FXVec3f w); /// Translate eye coordinate to eye coordinate FXVec3f eyeToWorld(FXVec3f e); /// Calculate world coordinate vector from screen movement FXVec3f worldVector(FXint fx,FXint fy,FXint tx,FXint ty); /// Change default object material setting void setMaterial(const FXMaterial &mtl); /// Return default object material setting void getMaterial(FXMaterial &mtl) const; /// Change camera field of view angle (in degrees) void setFieldOfView(FXdouble fv); /// Return camera field of view angle FXdouble getFieldOfView() const { return fov; } /// Change camera zoom factor void setZoom(FXdouble zm); /// Return camera zoom factor FXdouble getZoom() const { return zoom; } /// Change target point distance void setDistance(FXdouble ed); /// Return target point distance FXdouble getDistance() const { return distance; } /// Change unequal model scaling factors void setScale(FXVec3f s); /// Return current scaling factors const FXVec3f& getScale() const { return scale; } /// Change camera orientation from quaternion void setOrientation(FXQuatf rot); /// Return current camera orientation quaternion const FXQuatf& getOrientation() const { return rotation; } /// Change object center (tranlation) void setCenter(FXVec3f cntr); /// Return object center const FXVec3f& getCenter() const { return center; } /// Translate object center void translate(FXVec3f vec); /// Return boresight vector FXbool getBoreVector(FXint sx,FXint sy,FXVec3f& point,FXVec3f& dir); /// Return eyesight vector FXVec3f getEyeVector() const; /// Return eye position FXVec3f getEyePosition() const; /// Change help text void setHelpText(const FXString& text); /// Return help text const FXString& getHelpText() const { return help; } /// Change tip text void setTipText(const FXString& text); /// Return tip text const FXString& getTipText() const { return tip; } /// Return the current transformation matrix const FXMat4f& getTransform() const { return transform; } /// Return the inverse of the current transformation matrix const FXMat4f& getInvTransform() const { return itransform; } /// Change the scene, i.e. the object being displayed. void setScene(FXGLObject* sc); /// Return the current scene object FXGLObject* getScene() const { return scene; } /// Change selection void setSelection(FXGLObject* sel); /// Return selection FXGLObject* getSelection() const { return selection; } /// Change the projection mode, PERSPECTIVE or PARALLEL void setProjection(FXuint proj); /// Return the projection mode FXuint getProjection() const { return projection; } /// Change top or bottom or both background colors void setBackgroundColor(const FXVec4f& clr,FXbool bottom=MAYBE); /// Return top or bottom window background color. const FXVec4f& getBackgroundColor(FXbool bottom=FALSE) const { return background[bottom]; } /// Change global ambient light color void setAmbientColor(const FXVec4f& clr); /// Return global ambient light color const FXVec4f& getAmbientColor() const { return ambient; } /** * Read the pixels off the screen as array of FXColor; * this array can be directly passed to fxsaveBMP and other image * output routines. */ FXbool readPixels(FXColor*& buffer,FXint x,FXint y,FXint w,FXint h); /** * Read the feedback buffer containing the current scene, returning used * and allocated size. */ FXbool readFeedback(FXfloat*& buffer,FXint& used,FXint& size,FXint x,FXint y,FXint w,FXint h); /** * Change hidden-surface feedback buffer sorting algorithm. * This can be used for move/draw printed output depth sorting. */ void setZSortFunc(FXZSortFunc func){ zsortfunc=func; } /// Return hidden surface sorting function. FXZSortFunc getZSortFunc() const { return zsortfunc; } /** * Change the maximum hits, i.e. the maximum size of the pick buffer. * When set to less than or equal to zero, picking is essentially turned off. */ void setMaxHits(FXint maxh) { maxhits=maxh; } /// Return maximum pickbuffer size FXint getMaxHits() const { return maxhits; } /** * When drawing a GL object, if doesTurbo() is true, the object * may choose to perform a reduced complexity drawing as the user is * interactively manipulating; another update will be done later when * the full complexity drawing can be performed again. */ FXbool doesTurbo() const { return doesturbo; } /// Return turbo mode setting FXbool getTurboMode() const { return turbomode; } /// Set turbo mode void setTurboMode(FXbool turbo=TRUE); /// Return light source settings void getLight(FXLight& lite) const; /// Change light source settings void setLight(const FXLight& lite); /// Save viewer to a stream virtual void save(FXStream& store) const; /// Load viewer from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXGLViewer(); }; } #endif fox-1.6.49/include/FXGroupBox.h0000664000175000017500000001043012130340076013123 00000000000000/******************************************************************************** * * * G r o u p B o x W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGroupBox.h,v 1.23 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXGROUPBOX_H #define FXGROUPBOX_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { // Group box options enum { GROUPBOX_TITLE_LEFT = 0, /// Title is left-justified GROUPBOX_TITLE_CENTER = 0x00020000, /// Title is centered GROUPBOX_TITLE_RIGHT = 0x00040000, /// Title is right-justified GROUPBOX_NORMAL = GROUPBOX_TITLE_LEFT }; /** * A group box widget provides a nice raised or sunken border * around a group of widgets, providing a visual delineation. * Typically, a title is placed over the border to provide some * clarification. */ class FXAPI FXGroupBox : public FXPacker { FXDECLARE(FXGroupBox) protected: FXString label; FXFont *font; FXColor textColor; protected: FXGroupBox(); private: FXGroupBox(const FXGroupBox&); FXGroupBox &operator=(const FXGroupBox&); public: long onPaint(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); public: /// Construct group box layout manager FXGroupBox(FXComposite* p,const FXString& text,FXuint opts=GROUPBOX_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Enable the window virtual void enable(); /// Disable the window virtual void disable(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change group box title text void setText(const FXString& text); /// Return current groupbox title text FXString getText() const { return label; } /// Change group box style void setGroupBoxStyle(FXuint style); /// Return current group box style FXuint getGroupBoxStyle() const; /// Change title font void setFont(FXFont* fnt); /// Return title font FXFont* getFont() const { return font; } /// Change title text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const { return textColor; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXIFFIcon.h0000664000175000017500000000613712130340076012604 00000000000000/******************************************************************************** * * * I F F I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXIFFIcon.h,v 1.10 2006/01/22 17:58:04 fox Exp $ * ********************************************************************************/ #ifndef FXIFFICON_H #define FXIFFICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /** * The IFF Icon provides support for the EA/Amiga Image File Format. */ class FXAPI FXIFFIcon : public FXIcon { FXDECLARE(FXIFFIcon) protected: FXIFFIcon(){} private: FXIFFIcon(const FXIFFIcon&); FXIFFIcon &operator=(const FXIFFIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an icon from memory stream formatted as IFF format FXIFFIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in IFF format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in IFF format virtual bool loadPixels(FXStream& store); /// Destroy virtual ~FXIFFIcon(); }; #ifndef FXLOADIFF #define FXLOADIFF /** * Check if stream contains a IFF, return TRUE if so. */ extern FXAPI bool fxcheckIFF(FXStream& store); /** * Load an IFF (EA Image File Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadIFF(FXStream& store,FXColor*& data,FXint& width,FXint& height); #endif } #endif fox-1.6.49/include/FXOptionMenu.h0000664000175000017500000001455212130340076013464 00000000000000/******************************************************************************** * * * O p t i o n M e n u * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXOptionMenu.h,v 1.28 2006/02/06 02:03:38 fox Exp $ * ********************************************************************************/ #ifndef FXOPTIONMENU_H #define FXOPTIONMENU_H #ifndef FXLABEL_H #include "FXLabel.h" #endif namespace FX { class FXPopup; /// Option Menu Button class FXAPI FXOption : public FXLabel { FXDECLARE(FXOption) protected: FXColor selbackColor; FXColor seltextColor; protected: FXOption(); private: FXOption(const FXOption&); FXOption &operator=(const FXOption&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); public: /// Constructor FXOption(FXComposite* p,const FXString& text,FXIcon* ic=NULL,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=JUSTIFY_NORMAL|ICON_BEFORE_TEXT,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Returns true because a menu button can receive focus virtual bool canFocus() const; /// Set focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Return the selection background color void setSelBackColor(FXColor clr); /// Return the selection background color FXColor getSelBackColor() const { return selbackColor; } /// Return the selection text color void setSelTextColor(FXColor clr); /// Return the selection text color FXColor getSelTextColor() const { return seltextColor; } /// Destructor virtual ~FXOption(); }; /// Option Menu class FXAPI FXOptionMenu : public FXLabel { FXDECLARE(FXOptionMenu) protected: FXPopup *pane; FXOption *current; protected: FXOptionMenu(){} private: FXOptionMenu(const FXOptionMenu&); FXOptionMenu &operator=(const FXOptionMenu&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onCmdPost(FXObject*,FXSelector,void*); long onCmdUnpost(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); public: /// Constructor FXOptionMenu(FXComposite* p,FXPopup* pup=NULL,FXuint opts=JUSTIFY_NORMAL|ICON_BEFORE_TEXT,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Delete server-side resources virtual void destroy(); /// Perform layout virtual void layout(); /// Remove the focus from this window virtual void killFocus(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Return TRUE if the position is logically in the pane virtual bool contains(FXint parentx,FXint parenty) const; /// Set the current option void setCurrent(FXOption *win,FXbool notify=FALSE); /// Return the current option FXOption* getCurrent() const { return current; } /// Set the current option number void setCurrentNo(FXint no,FXbool notify=FALSE); /// Get the current option number FXint getCurrentNo() const; /// Get number of options FXint getNumOptions() const; /// Set the pane which will be popped up void setMenu(FXPopup *pup); /// Return the pane which is poppup up FXPopup* getMenu() const { return pane; } /// Returns true because a option menu can receive focus virtual bool canFocus() const; /// Return TRUE if popped up FXbool isPopped() const; /// Save option menu to a stream virtual void save(FXStream& store) const; /// Load option menu from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXOptionMenu(); }; } #endif fox-1.6.49/include/FXDockTitle.h0000664000175000017500000000770312130340076013251 00000000000000/******************************************************************************** * * * D o c k T i t l e W i d g e t * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDockTitle.h,v 1.3 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXDOCKTITLE_H #define FXDOCKTITLE_H #ifndef FXDOCKHANDLER_H #include "FXDockHandler.h" #endif namespace FX { /** * A dock title is used to move its container, a dock bar. * The dock title is also used simultaneously to provide a * caption above the dock bar. */ class FXAPI FXDockTitle : public FXDockHandler { FXDECLARE(FXDockTitle) protected: FXString caption; // Caption text FXFont *font; // Caption font FXColor captionColor; // Caption color protected: FXDockTitle(); private: FXDockTitle(const FXDockTitle&); FXDockTitle& operator=(const FXDockTitle&); public: long onPaint(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); public: /// Construct dock bar title widget FXDockTitle(FXComposite* p,const FXString& text,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_NORMAL|JUSTIFY_CENTER_X|JUSTIFY_CENTER_Y,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=0,FXint pr=0,FXint pt=0,FXint pb=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set the caption for the grip void setCaption(const FXString& text); /// Get the caption for the grip FXString getCaption() const { return caption; } /// Set caption font void setFont(FXFont *fnt); /// Get caption font FXFont* getFont() const { return font; } /// Get the current caption color FXColor getCaptionColor() const { return captionColor; } /// Set the current caption color void setCaptionColor(FXColor clr); /// Set the current justification mode. void setJustify(FXuint mode); /// Get the current justification mode. FXuint getJustify() const; /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy virtual ~FXDockTitle(); }; } #endif fox-1.6.49/include/FXMenuRadio.h0000664000175000017500000001024412130340076013244 00000000000000/******************************************************************************** * * * M e n u R a d i o W i d g e t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMenuRadio.h,v 1.13 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXMENURADIO_H #define FXMENURADIO_H #ifndef FXMENUCOMMAND_H #include "FXMenuCommand.h" #endif namespace FX { /** * The menu radio widget is used to invoke a command in the * application from a menu. Menu commands may reflect * the state of the application by graying out, becoming hidden, * or by a bullit. * When activated, a menu radio sends a SEL_COMMAND to its target; * the void* argument of the message contains the new state. * A collection of menu radio widgets which belong to each other * is supposed to be updated by a common SEL_UPDATE handler to * properly maintain the state between them. */ class FXAPI FXMenuRadio : public FXMenuCommand { FXDECLARE(FXMenuRadio) protected: FXuchar check; // State of menu FXColor radioColor; // Color of the radio protected: FXMenuRadio(); private: FXMenuRadio(const FXMenuRadio&); FXMenuRadio &operator=(const FXMenuRadio&); public: long onPaint(FXObject*,FXSelector,void*); long onButtonPress(FXObject*,FXSelector,void*); long onButtonRelease(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onHotKeyPress(FXObject*,FXSelector,void*); long onHotKeyRelease(FXObject*,FXSelector,void*); long onCheck(FXObject*,FXSelector,void*); long onUncheck(FXObject*,FXSelector,void*); long onUnknown(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdAccel(FXObject*,FXSelector,void*); public: /// Construct a menu radio FXMenuRadio(FXComposite* p,const FXString& text,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set radio button state (TRUE, FALSE or MAYBE) void setCheck(FXbool s=TRUE); /// Get radio button state (TRUE, FALSE or MAYBE) FXbool getCheck() const { return check; } /// Get the radio background color FXColor getRadioColor() const { return radioColor; } /// Set the radio background color void setRadioColor(FXColor clr); /// Save menu to a stream virtual void save(FXStream& store) const; /// Load menu from a stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXTabBar.h0000664000175000017500000001235012130340076012514 00000000000000/******************************************************************************** * * * T a b B a r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTabBar.h,v 1.15 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXTABBAR_H #define FXTABBAR_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /// Tab Book options enum { TABBOOK_TOPTABS = 0, /// Tabs on top (default) TABBOOK_BOTTOMTABS = 0x00020000, /// Tabs on bottom TABBOOK_SIDEWAYS = 0x00040000, /// Tabs on left TABBOOK_LEFTTABS = TABBOOK_SIDEWAYS|TABBOOK_TOPTABS, /// Tabs on left TABBOOK_RIGHTTABS = TABBOOK_SIDEWAYS|TABBOOK_BOTTOMTABS, /// Tabs on right TABBOOK_NORMAL = TABBOOK_TOPTABS /// Normal tabs }; /** * The tab bar layout manager arranges tab items side by side, * and raises the active tab item above the neighboring tab items. * In a the horizontal arrangement, the tab bar can have the tab * items on the top or on the bottom. In the vertical arrangement, * the tabs can be on the left or on the right. * When one of the tab items is pressed, the tab bar's setCurrent() * is called with notify=TRUE. Thus causes the tab bar to send a * SEL_COMMAND message to its target. */ class FXAPI FXTabBar : public FXPacker { FXDECLARE(FXTabBar) protected: FXint current; // Current tab index FXint shift; // Shift amount protected: FXTabBar(){} private: FXTabBar(const FXTabBar&); FXTabBar& operator=(const FXTabBar&); public: long onPaint(FXObject*,FXSelector,void*); long onFocusNext(FXObject*,FXSelector,void*); long onFocusPrev(FXObject*,FXSelector,void*); long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusLeft(FXObject*,FXSelector,void*); long onFocusRight(FXObject*,FXSelector,void*); long onCmdOpenItem(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdOpen(FXObject*,FXSelector,void*); long onUpdOpen(FXObject*,FXSelector,void*); public: enum { ID_OPEN_ITEM=FXPacker::ID_LAST, /// Sent from one of the FXTabItems ID_OPEN_FIRST, /// Switch to panel ID_OPEN_FIRST+i ID_OPEN_SECOND, ID_OPEN_THIRD, ID_OPEN_FOURTH, ID_OPEN_FIFTH, ID_OPEN_SIXTH, ID_OPEN_SEVENTH, ID_OPEN_EIGHTH, ID_OPEN_NINETH, ID_OPEN_TENTH, ID_OPEN_LAST=ID_OPEN_FIRST+100, ID_LAST }; public: /// Construct a tab bar FXTabBar(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=TABBOOK_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /** * Change currently active tab item; this raises the active tab item * slightly above the neighboring tab items. If notify=TRUE then the * tab bar will also send a SEL_COMMAND message to its target. */ virtual void setCurrent(FXint panel,FXbool notify=FALSE); /// Return the currently active tab item FXint getCurrent() const { return current; } /// Return tab bar style FXuint getTabStyle() const; /// Change tab tab style void setTabStyle(FXuint style); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif fox-1.6.49/include/FXThread.h0000664000175000017500000002050212130340076012566 00000000000000/******************************************************************************** * * * M u l i t h r e a d i n g S u p p o r t * * * ********************************************************************************* * Copyright (C) 2004,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXThread.h,v 1.40.2.2 2006/07/26 15:25:53 fox Exp $ * ********************************************************************************/ #ifndef FXTHREAD_H #define FXTHREAD_H namespace FX { // Thread ID type #ifndef WIN32 typedef unsigned long FXThreadID; #else typedef void* FXThreadID; #endif class FXCondition; /** * FXMutex provides a mutex which can be used to enforce critical * sections around updates of data shared by multiple threads. */ class FXAPI FXMutex { friend class FXCondition; private: FXuval data[24]; private: FXMutex(const FXMutex&); FXMutex &operator=(const FXMutex&); public: /// Initialize the mutex FXMutex(FXbool recursive=FALSE); /// Lock the mutex void lock(); /// Return TRUE if succeeded locking the mutex FXbool trylock(); /// Return TRUE if mutex is already locked FXbool locked(); /// Unlock mutex void unlock(); /// Delete the mutex ~FXMutex(); }; /** * An easy way to establish a correspondence between a C++ scope * and a critical section is to simply declare an FXMutexLock * at the beginning of the scope. * The mutex will be automatically released when the scope is * left (either by natural means or by means of an exception. */ class FXAPI FXMutexLock { private: FXMutex& mtx; private: FXMutexLock(); FXMutexLock(const FXMutexLock&); FXMutexLock& operator=(const FXMutexLock&); public: /// Construct & lock associated mutex FXMutexLock(FXMutex& m):mtx(m){ lock(); } /// Return reference to associated mutex FXMutex& mutex(){ return mtx; } /// Lock mutex void lock(){ mtx.lock(); } /// Return TRUE if succeeded locking the mutex FXbool trylock(){ return mtx.trylock(); } /// Return TRUE if mutex is already locked FXbool locked(){ return mtx.locked(); } /// Unlock mutex void unlock(){ mtx.unlock(); } /// Destroy and unlock associated mutex ~FXMutexLock(){ unlock(); } }; /** * A condition allows one or more threads to synchronize * to an event. When a thread calls wait, the associated * mutex is unlocked while the thread is blocked. When the * condition becomes signaled, the associated mutex is * locked and the thread(s) are reawakened. */ class FXAPI FXCondition { private: FXuval data[12]; private: FXCondition(const FXCondition&); FXCondition& operator=(const FXCondition&); public: /// Initialize the condition FXCondition(); /** * Wait until condition becomes signalled, using given mutex, * which must already have been locked prior to this call. */ void wait(FXMutex& mtx); /** * Wait until condition becomes signalled, using given mutex, * which must already have been locked prior to this call. * Returns TRUE if successful, FALSE if timeout occurred. * Note that the wait-time is specified in nanoseconds * since the Epoch (Jan 1, 1970). */ FXbool wait(FXMutex& mtx,FXlong nsec); /** * Wake or unblock a single blocked thread */ void signal(); /** * Wake or unblock all blocked threads */ void broadcast(); /// Delete the condition ~FXCondition(); }; /** * A semaphore allows for protection of a resource that can * be accessed by a fixed number of simultaneous threads. */ class FXAPI FXSemaphore { private: FXuval data[16]; private: FXSemaphore(const FXSemaphore&); FXSemaphore& operator=(const FXSemaphore&); public: /// Initialize semaphore with given count FXSemaphore(FXint initial=1); /// Decrement semaphore void wait(); /// Non-blocking semaphore decrement; return true if locked FXbool trywait(); /// Increment semaphore void post(); /// Delete semaphore ~FXSemaphore(); }; /** * FXThread provides system-independent support for threads. * Subclasses must implement the run() function do implement * the desired functionality of the thread. * The storage of the FXThread object is to be managed by the * calling thread, not by the thread itself. */ class FXAPI FXThread { private: volatile FXThreadID tid; private: FXThread(const FXThread&); FXThread &operator=(const FXThread&); #ifdef WIN32 static unsigned int CALLBACK execute(void*); #else static void* execute(void*); #endif protected: /** * All threads execute by deriving the run method of FXThread. * If an uncaught exception was thrown, this function returns -1. */ virtual FXint run() = 0; public: /// Initialize thread object. FXThread(); /** * Return handle of this thread object. * This handle is valid in the context of the thread which * called start(). */ FXThreadID id() const; /** * Return TRUE if this thread is running. */ FXbool running() const; /** * Start thread; the thread is started as attached. * The thread is given stacksize for its stack; a value of * zero for stacksize will give it the default stack size. */ FXbool start(unsigned long stacksize=0); /** * Suspend calling thread until thread is done. */ FXbool join(); /** * Suspend calling thread until thread is done, and set code to the * return value of run() or the argument passed into exit(). * If an exception happened in the thread, return -1. */ FXbool join(FXint& code); /** * Cancel the thread, stopping it immediately, running or not. * If the calling thread is this thread, nothing happens. * It is probably better to wait until it is finished, in case the * thread currently holds mutexes. */ FXbool cancel(); /** * Detach thread, so that a no join() is necessary to harvest the * resources of this thread. */ FXbool detach(); /** * Exit the calling thread. * No destructors are invoked for objects on thread's stack; * to invoke destructors, throw an exception instead. */ static void exit(FXint code=0); /** * Make the thread yield its time quantum. */ static void yield(); /** * Return time in nanoseconds since Epoch (Jan 1, 1970). */ static FXlong time(); /** * Make the calling thread sleep for a number of nanoseconds. */ static void sleep(FXlong nsec); /** * Wake at appointed time specified in nanoseconds since Epoch. */ static void wakeat(FXlong nsec); /** * Return pointer to the FXThread instance associated * with the calling thread; it returns NULL for the main * thread and all threads not created by FOX. */ static FXThread* self(); /** * Return thread id of calling thread. */ static FXThreadID current(); /** * Set thread priority. */ void priority(FXint prio); /** * Return thread priority. */ FXint priority(); /** * Destroy the thread immediately, running or not. * It is probably better to wait until it is finished, in case * the thread currently holds mutexes. */ virtual ~FXThread(); }; } #endif fox-1.6.49/include/FXColorList.h0000664000175000017500000001025712130340076013277 00000000000000/******************************************************************************** * * * C o l o r L i s t W i d g e t * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXColorList.h,v 1.4.2.1 2006/07/27 02:18:50 fox Exp $ * ********************************************************************************/ #ifndef FXCOLORLIST_H #define FXCOLORLIST_H #ifndef FXLIST_H #include "FXList.h" #endif namespace FX { /// Color item class FXAPI FXColorItem : public FXListItem { FXDECLARE(FXColorItem) protected: FXColor color; private: FXColorItem(const FXColorItem&); FXColorItem& operator=(const FXColorItem&); protected: FXColorItem():color(0){} virtual void draw(const FXList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h); virtual FXint hitItem(const FXList* list,FXint x,FXint y) const; public: /// Construct new item with given text, color, and user-data FXColorItem(const FXString& text,FXColor clr,void* ptr=NULL):FXListItem(text,NULL,ptr),color(clr){} /// Change item's color void setColor(FXColor clr){ color=clr; } /// Return item's color FXColor getColor() const { return color; } /// Return width of item as drawn in list virtual FXint getWidth(const FXList* list) const; /// Return height of item as drawn in list virtual FXint getHeight(const FXList* list) const; }; /** * A ColorList Widget displays a list of colors. */ class FXAPI FXColorList : public FXList { FXDECLARE(FXColorList) protected: FXColorList(){} virtual FXListItem *createItem(const FXString& text,FXIcon* icon,void* ptr); private: FXColorList(const FXColorList&); FXColorList &operator=(const FXColorList&); public: /// Construct a list with initially no items in it FXColorList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=LIST_BROWSESELECT,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Fill list by appending color items from array of strings and array of colors FXint fillItems(const FXchar** strings,FXColor *colors=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Insert item at index with given text, color, and user-data pointer FXint insertItem(FXint index,const FXString& text,FXColor color=0,void* ptr=NULL,FXbool notify=FALSE); /// Append new item with given text, color, and user-data pointer FXint appendItem(const FXString& text,FXColor color=0,void* ptr=NULL,FXbool notify=FALSE); /// Prepend new item with given text, color, and user-data pointer FXint prependItem(const FXString& text,FXColor color=0,void* ptr=NULL,FXbool notify=FALSE); /// Change item color void setItemColor(FXint index,FXColor color); /// Return item color FXColor getItemColor(FXint index) const; }; } #endif fox-1.6.49/include/FXGIFIcon.h0000664000175000017500000000653512130340076012607 00000000000000/******************************************************************************** * * * G I F I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGIFIcon.h,v 1.24 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXGIFICON_H #define FXGIFICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// GIF Icon class class FXAPI FXGIFIcon : public FXIcon { FXDECLARE(FXGIFIcon) protected: FXGIFIcon(){} private: FXGIFIcon(const FXGIFIcon&); FXGIFIcon &operator=(const FXGIFIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an icon from memory stream formatted as GIF format FXGIFIcon(FXApp* a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in GIF format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in GIF format virtual bool loadPixels(FXStream& store); /// Destroy virtual ~FXGIFIcon(); }; #ifndef FXLOADGIF #define FXLOADGIF /** * Check if stream contains a GIF, return TRUE if so. */ extern FXAPI bool fxcheckGIF(FXStream& store); /** * Load an GIF (Graphics Interchange Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadGIF(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an GIF (Graphics Interchange Format) file to a stream. The flag * "fast" is used to select the faster Floyd-Steinberg dither method instead * of the slower Wu quantization algorithm. */ extern FXAPI bool fxsaveGIF(FXStream& store,const FXColor *data,FXint width,FXint height,bool fast=true); #endif } #endif fox-1.6.49/include/FXTreeListBox.h0000664000175000017500000002274512130340076013576 00000000000000/******************************************************************************** * * * T r e e L i s t B o x W i d g e t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTreeListBox.h,v 1.41 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTREELISTBOX_H #define FXTREELISTBOX_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /// Tree List Box styles enum { TREELISTBOX_NORMAL = 0 /// Normal style }; class FXButton; class FXMenuButton; class FXTreeList; class FXPopup; /** * The Tree List Box behaves very much like a List Box, except that * it supports a hierarchical, tree structured display of the items. * When an item is selected it issues a SEL_COMMAND message with the * pointer to the item. While manipulating the tree list, it may send * SEL_CHANGED messages to indicate which item the cursor is hovering over. */ class FXAPI FXTreeListBox : public FXPacker { FXDECLARE(FXTreeListBox) protected: FXButton *field; FXMenuButton *button; FXTreeList *tree; FXPopup *pane; protected: FXTreeListBox(){} private: FXTreeListBox(const FXTreeListBox&); FXTreeListBox& operator=(const FXTreeListBox&); public: long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onFieldButton(FXObject*,FXSelector,void*); long onTreeUpdate(FXObject*,FXSelector,void*); long onTreeChanged(FXObject*,FXSelector,void*); long onTreeClicked(FXObject*,FXSelector,void*); public: enum{ ID_TREE=FXPacker::ID_LAST, ID_FIELD, ID_LAST }; public: /// Construct tree list box FXTreeListBox(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_SUNKEN|FRAME_THICK|TREELISTBOX_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Perform layout virtual void layout(); /// Enable widget virtual void enable(); /// Disable widget virtual void disable(); /// Return default with virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Return number of items FXint getNumItems() const; /// Return number of visible items FXint getNumVisible() const; /// Set number of visible items to determine default height void setNumVisible(FXint nvis); /// Return first top-level item FXTreeItem* getFirstItem() const; /// Return last top-level item FXTreeItem* getLastItem() const; /// Fill tree list box by appending items from array of strings FXint fillItems(FXTreeItem* father,const FXchar** strings,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL); /// Fill tree list box by appending items from newline separated strings FXint fillItems(FXTreeItem* father,const FXString& strings,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL); /// Insert [possibly subclassed] item under father before other item FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item); /// Insert item with given text and optional icons, and user-data pointer under father before other item FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL); /// Append [possibly subclassed] item as last child of father FXTreeItem* appendItem(FXTreeItem* father,FXTreeItem* item); /// Append item with given text and optional icons, and user-data pointer as last child of father FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL); /// Prepend [possibly subclassed] item as first child of father FXTreeItem* prependItem(FXTreeItem* father,FXTreeItem* item); /// Prepend item with given text and optional icons, and user-data pointer as first child of father FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL); /// Move item under father before other item FXTreeItem *moveItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item); /// Extract item FXTreeItem* extractItem(FXTreeItem* item); /// Remove item void removeItem(FXTreeItem* item); /// Remove all items in range [fm...to] void removeItems(FXTreeItem* fm,FXTreeItem* to); /// Remove all items from list void clearItems(); /** * Search items by name, beginning from item start. If the * start item is NULL the search will start at the first, top-most item * in the list. Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control * the search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. * The option SEARCH_IGNORECASE causes a case-insensitive match. Finally, * passing SEARCH_PREFIX causes searching for a prefix of the item name. * Return NULL if no matching item is found. */ FXTreeItem* findItem(const FXString& text,FXTreeItem* start=NULL,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /** * Search items by associated user data, beginning from item start. If the * start item is NULL the search will start at the first, top-most item * in the list. Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control * the search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. */ FXTreeItem* findItemByData(const void *ptr,FXTreeItem* start=NULL,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /// Return TRUE if item is the current item FXbool isItemCurrent(const FXTreeItem* item) const; /// Return TRUE if item is leaf-item, i.e. has no children FXbool isItemLeaf(const FXTreeItem* item) const; /// Sort the toplevel items with the sort function void sortRootItems(); /// Sort all items recursively void sortItems(); /// Sort child items of item void sortChildItems(FXTreeItem* item); /// Change current item virtual void setCurrentItem(FXTreeItem* item,FXbool notify=FALSE); /// Return current item FXTreeItem* getCurrentItem() const; /// Change item label void setItemText(FXTreeItem* item,const FXString& text); /// Return item label FXString getItemText(const FXTreeItem* item) const; /// Change item's open icon, delete old one if it was owned void setItemOpenIcon(FXTreeItem* item,FXIcon* icon,FXbool owned=FALSE); /// Return item's open icon FXIcon* getItemOpenIcon(const FXTreeItem* item) const; /// Change item's closed icon, delete old one if it was owned void setItemClosedIcon(FXTreeItem* item,FXIcon* icon,FXbool owned=FALSE); /// Return item's closed icon FXIcon* getItemClosedIcon(const FXTreeItem* item) const; /// Change item's user data void setItemData(FXTreeItem* item,void* ptr) const; /// Return item's user data void* getItemData(const FXTreeItem* item) const; /// Return item sort function FXTreeListSortFunc getSortFunc() const; /// Change item sort function void setSortFunc(FXTreeListSortFunc func); /// Is the pane shown FXbool isPaneShown() const; /// Change font void setFont(FXFont* fnt); /// Return font FXFont* getFont() const; /// Return list style FXuint getListStyle() const; /// Change list style void setListStyle(FXuint style); /// Change help text void setHelpText(const FXString& txt); /// Return help text const FXString& getHelpText() const; /// Change tip text void setTipText(const FXString& txt); /// Return tip text const FXString& getTipText() const; /// Save object to a stream virtual void save(FXStream& store) const; /// Load object from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXTreeListBox(); }; } #endif fox-1.6.49/include/FXColorWheel.h0000664000175000017500000001175212130340076013431 00000000000000/******************************************************************************** * * * C o l o r W h e e l W i d g e t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXColorWheel.h,v 1.31 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCOLORWHEEL_H #define FXCOLORWHEEL_H #ifndef FXFRAME_H #include "FXFrame.h" #endif namespace FX { class FXImage; /** * A ColorWheel is a widget which controls the hue and saturation values of a * color. It is most often used together with a Color Bar which controls the * brighness. */ class FXAPI FXColorWheel : public FXFrame { FXDECLARE(FXColorWheel) protected: FXImage *dial; // HSV dial image FXfloat hsv[3]; // Hue, saturation, value FXint dialx; // Dial x location FXint dialy; // Dial Y location FXint spotx; // Spot x location FXint spoty; // Spot Y location FXString tip; // Tooltip value FXString help; // Help value protected: FXColorWheel(); void updatedial(); void movespot(FXint x,FXint y); FXbool hstoxy(FXint& x,FXint& y,FXfloat h,FXfloat s) const; FXbool xytohs(FXfloat& h,FXfloat& s,FXint x,FXint y) const; private: FXColorWheel(const FXColorWheel&); FXColorWheel &operator=(const FXColorWheel&); public: long onPaint(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onCmdSetHelp(FXObject*,FXSelector,void*); long onCmdGetHelp(FXObject*,FXSelector,void*); long onCmdSetTip(FXObject*,FXSelector,void*); long onCmdGetTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); public: /// Construct color wheel with initial color clr FXColorWheel(FXComposite* p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change hue void setHue(FXfloat h); /// Return hue FXfloat getHue() const { return hsv[0]; } /// Change saturation void setSat(FXfloat s); /// Return saturation FXfloat getSat() const { return hsv[1]; } /// Change value void setVal(FXfloat v); /// Return value FXfloat getVal() const { return hsv[2]; } /// Set hue, saturation, value void setHueSatVal(FXfloat h,FXfloat s,FXfloat v); /// Set status line help text for this color well void setHelpText(const FXString& text){ help=text; } /// Get status line help text for this color well const FXString& getHelpText() const { return help; } /// Set tool tip message for this color well void setTipText(const FXString& text){ tip=text; } /// Get tool tip message for this color well const FXString& getTipText() const { return tip; } /// Save color well to a stream virtual void save(FXStream& store) const; /// Load color well from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXColorWheel(); }; } #endif fox-1.6.49/include/FXGLSphere.h0000664000175000017500000000624712130340076013042 00000000000000/******************************************************************************** * * * O p e n G L S p h e r e O b j e c t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGLSphere.h,v 1.18 2006/01/22 17:58:03 fox Exp $ * ********************************************************************************/ #ifndef FXGLSPHERE_H #define FXGLSPHERE_H #ifndef FXGLSHAPE_H #include "FXGLShape.h" #endif namespace FX { /// OpenGL Sphere Object class FXAPI FXGLSphere : public FXGLShape { FXDECLARE(FXGLSphere) public: FXfloat radius; // Radius of sphere FXint slices; // Longitudinal subdivision FXint stacks; // Latitudinal subdivision protected: FXGLSphere(); virtual void drawshape(FXGLViewer* viewer); public: enum { ID_LAST=FXGLShape::ID_LAST }; public: /// Construct with specified origin and radius FXGLSphere(FXfloat x,FXfloat y,FXfloat z,FXfloat r=1.0f); /// Construct with specified origin, radius and material FXGLSphere(FXfloat x,FXfloat y,FXfloat z,FXfloat r,const FXMaterial& mtl); /// Copy constructor FXGLSphere(const FXGLSphere& orig); /// Copy this object virtual FXGLObject* copy(); /// Change radius void setRadius(FXfloat r){ radius=r; } FXfloat getRadius() const { return radius; } /// Change slices void setSlices(FXint s){ slices=s; } FXint getSlices() const { return slices; } /// Change stacks void setStacks(FXint s){ stacks=s; } FXint getStacks() const { return stacks; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destroy virtual ~FXGLSphere(); }; } #endif fox-1.6.49/include/FXUTF8Codec.h0000664000175000017500000000460412130340076013050 00000000000000/******************************************************************************** * * * U T F - 8 T e x t C o d e c * * * ********************************************************************************* * Copyright (C) 2002,2006 by L.Johnson & J.van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXUTF8Codec.h,v 1.13 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXUTF8CODEC_H #define FXUTF8CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// Codec for UTF-8 class FXAPI FXUTF8Codec : public FXTextCodec { public: FXUTF8Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual FXint mibEnum() const; virtual const FXchar* const* aliases() const; virtual ~FXUTF8Codec(){} }; } #endif fox-1.6.49/include/FXInputDialog.h0000664000175000017500000001312512130340076013601 00000000000000/******************************************************************************** * * * I n p u t D i a l o g B o x * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXInputDialog.h,v 1.17 2006/01/22 17:58:05 fox Exp $ * ********************************************************************************/ #ifndef FXINPUTDIALOG_H #define FXINPUTDIALOG_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { /// Input dialog options enum { INPUTDIALOG_STRING = 0, /// Ask for a string INPUTDIALOG_INTEGER = 0x01000000, /// Ask for an integer number INPUTDIALOG_REAL = 0x02000000, /// Ask for a real number INPUTDIALOG_PASSWORD = 0x04000000 /// Do not reveal key-in }; class FXTextField; /** * An Input Dialog is a simple dialog which is used * to obtain a text string, integer, or real number from the user. * A password mode allows the key-in to remain hidden. */ class FXAPI FXInputDialog : public FXDialogBox { FXDECLARE(FXInputDialog) protected: FXTextField *input; // Text field widget FXdouble limlo; // Lower limit FXdouble limhi; // Upper limit protected: FXInputDialog(){} private: FXInputDialog(const FXInputDialog&); FXInputDialog &operator=(const FXInputDialog&); void initialize(const FXString& text,FXIcon* icon); public: long onCmdAccept(FXObject*,FXSelector,void*); public: /// Construct input dialog box with given caption, icon, and prompt text FXInputDialog(FXWindow* owner,const FXString& caption,const FXString& label,FXIcon* icon=NULL,FXuint opts=INPUTDIALOG_STRING,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Construct free floating input dialog box with given caption, icon, and prompt text FXInputDialog(FXApp* app,const FXString& caption,const FXString& label,FXIcon* icon=NULL,FXuint opts=INPUTDIALOG_STRING,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Get input string FXString getText() const; /// Set input string void setText(const FXString& text); /// Change number of visible columns of text void setNumColumns(FXint num); /// Return number of visible columns of text FXint getNumColumns() const; /// Change limits void setLimits(FXdouble lo,FXdouble hi){ limlo=lo; limhi=hi; } /// Return limits void getLimits(FXdouble& lo,FXdouble& hi){ lo=limlo; hi=limhi; } /// Run modal invocation of the dialog virtual FXuint execute(FXuint placement=PLACEMENT_CURSOR); /** * Prompt for a string, start with the initial value. * Return TRUE if the new value is accepted, and false otherwise. */ static FXbool getString(FXString& result,FXWindow* owner,const FXString& caption,const FXString& label,FXIcon* icon=NULL); /** * Prompt for a string, in free floating window. */ static FXbool getString(FXString& result,FXApp* app,const FXString& caption,const FXString& label,FXIcon* icon=NULL); /** * Prompt for an integer number, start with the given initial value. * Return TRUE if the new value is accepted, and false otherwise. * The input is constrained between lo and hi. */ static FXbool getInteger(FXint& result,FXWindow* owner,const FXString& caption,const FXString& label,FXIcon* icon=NULL,FXint lo=-2147483647,FXint hi=2147483647); /** * Prompt for a integer number, in free floating window. */ static FXbool getInteger(FXint& result,FXApp* app,const FXString& caption,const FXString& label,FXIcon* icon=NULL,FXint lo=-2147483647,FXint hi=2147483647); /** * Prompt for an real number, start with the given initial value. * Return TRUE if the new value is accepted, and false otherwise. * The input is constrained between lo and hi. */ static FXbool getReal(FXdouble& result,FXWindow* owner,const FXString& caption,const FXString& label,FXIcon* icon=NULL,FXdouble lo=-1.797693134862315e+308,FXdouble hi=1.797693134862315e+308); /** * Prompt for a real number, in free floating window. */ static FXbool getReal(FXdouble& result,FXApp* app,const FXString& caption,const FXString& label,FXIcon* icon=NULL,FXdouble lo=-1.797693134862315e+308,FXdouble hi=1.797693134862315e+308); }; } #endif fox-1.6.49/include/FXDebugTarget.h0000664000175000017500000000504612130340076013562 00000000000000/******************************************************************************** * * * D e b u g T a r g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDebugTarget.h,v 1.15 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDEBUGTARGET_H #define FXDEBUGTARGET_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { /** * A DebugTarget prints out every message it receives. * To use it, simply make the DebugTarget a target of the widget * whose messages you want to see, */ class FXAPI FXDebugTarget : public FXObject { FXDECLARE(FXDebugTarget) protected: FXObject *lastsender; FXSelector lastsel; FXuint count; public: static const FXchar *const messageTypeName[]; private: FXDebugTarget(const FXDebugTarget&); FXDebugTarget &operator=(const FXDebugTarget&); public: long onMessage(FXObject*,FXSelector,void*); public: /// Construct a debug target FXDebugTarget(); }; } #endif fox-1.6.49/include/FXShutter.h0000664000175000017500000001333312130340076013021 00000000000000/******************************************************************************** * * * S h u t t e r C o n t a i n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Charles W. Warren. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXShutter.h,v 1.26 2006/01/22 17:58:09 fox Exp $ * ********************************************************************************/ #ifndef FXSHUTTER_H #define FXSHUTTER_H #ifndef FXVERTICALFRAME_H #include "FXVerticalFrame.h" #endif namespace FX { class FXShutter; class FXButton; class FXScrollWindow; class FXShutterItem; /** * A Shutter Item is a panel which is embedded inside a Shutter Widget. * It can contain other user interface widgets which can be added under * the content widget. The content widget is itself embedded in a scroll * window to allow unlimited room for all the contents. */ class FXAPI FXShutterItem : public FXVerticalFrame { FXDECLARE(FXShutterItem) friend class FXShutter; protected: FXButton *button; FXScrollWindow *scrollWindow; FXVerticalFrame *content; protected: FXShutterItem(){} private: FXShutterItem(const FXShutterItem&); FXShutterItem &operator=(const FXShutterItem&); public: long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onCmdButton(FXObject*,FXSelector,void*); public: enum{ ID_SHUTTERITEM_BUTTON=FXVerticalFrame::ID_LAST, ID_LAST }; public: /// Constructor FXShutterItem(FXShutter *p,const FXString& text=FXString::null,FXIcon* icon=NULL,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Return a pointer to the button for this item FXButton* getButton() const { return button; } /// Return a pointer to the contents for this item FXVerticalFrame* getContent() const { return content; } /// Set the status line help text for this item void setHelpText(const FXString& text); /// Get the status line help text for this item FXString getHelpText() const; /// Set the tool tip message for this item void setTipText(const FXString& text); /// Get the tool tip message for this item FXString getTipText() const; /// Destructor virtual ~FXShutterItem(); }; /** * The Shutter widget provides a set of foldable sub panels. Each subpanel * consists of a Shutter Item which contains a button and some contents. * A sub panel can be unfolded by pressing on that panel's button. */ class FXAPI FXShutter : public FXVerticalFrame { FXDECLARE(FXShutter) friend class FXShutterItem; protected: FXint current; // Item currently open FXint closing; // Item closing down FXint heightIncrement; // Height delta FXint closingHeight; // Closing items current height FXbool closingHadScrollbar; // Closing item had a scroll bar protected: FXShutter(){} private: FXShutter(const FXShutter&); FXShutter &operator=(const FXShutter&); public: long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onTimeout(FXObject*,FXSelector,void*); long onOpenItem(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetIntValue(FXObject*,FXSelector,void*); long onCmdGetIntValue(FXObject*,FXSelector,void*); long onCmdOpen(FXObject*,FXSelector,void*); long onUpdOpen(FXObject*,FXSelector,void*); public: enum{ ID_SHUTTER_TIMEOUT=FXVerticalFrame::ID_LAST, ID_OPEN_SHUTTERITEM, ID_OPEN_FIRST, ID_OPEN_LAST=ID_OPEN_FIRST+1000, ID_LAST }; public: /// Constructor FXShutter(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Perform layout virtual void layout(); /// Set the currently displayed item (panel = 0, 1, 2, ..., npanels-1) virtual void setCurrent(FXint panel); /// Return the index of the currently displayed item FXint getCurrent() const { return current; } /// Destructor virtual ~FXShutter(); }; } #endif fox-1.6.49/include/FXGIFCursor.h0000664000175000017500000000652212130340076013170 00000000000000/******************************************************************************** * * * G I F C u r so r O b j e c t * * * ********************************************************************************* * Copyright (C) 2000,2006 by Daniel Gehriger. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXGIFCursor.h,v 1.22 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXGIFCURSOR_H #define FXGIFCURSOR_H #ifndef FXCURSOR_H #include "FXCursor.h" #endif namespace FX { /// GIF Cursor class class FXAPI FXGIFCursor : public FXCursor { FXDECLARE(FXGIFCursor) protected: FXGIFCursor(){} private: FXGIFCursor(const FXGIFCursor&); FXGIFCursor &operator=(const FXGIFCursor&); public: static const FXchar fileExt[]; public: /** * Construct a cursor from memory stream in Compuserve GIF format. * Hot spot may be specified using hx and hy parameters, since the GIF * format does not specify a hot spot. The image must be smaller than * 32x32 pixels. */ FXGIFCursor(FXApp* a,const void* pix,FXint hx=0,FXint hy=0); /// Save pixel data only, in GIF format virtual bool savePixels(FXStream& store) const; /// Load pixel data only, in GIF format virtual bool loadPixels(FXStream& store); /// Destroy virtual ~FXGIFCursor(){} }; #ifndef FXLOADGIF #define FXLOADGIF /** * Check if stream contains a GIF, return TRUE if so. */ extern FXAPI bool fxcheckGIF(FXStream& store); /** * Load an GIF (Graphics Interchange Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadGIF(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an GIF (Graphics Interchange Format) file to a stream. */ extern FXAPI bool fxsaveGIF(FXStream& store,const FXColor *data,FXint width,FXint height,bool fast=true); #endif } #endif fox-1.6.49/include/FXPPMImage.h0000664000175000017500000000626312130340076012766 00000000000000/******************************************************************************** * * * P P M I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2003,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPPMImage.h,v 1.10 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXPPMIMAGE_H #define FXPPMIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// Portable Pixmap Image class FXAPI FXPPMImage : public FXImage { FXDECLARE(FXPPMImage) protected: FXPPMImage(){} private: FXPPMImage(const FXPPMImage&); FXPPMImage &operator=(const FXPPMImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct icon from memory stream formatted in Portable Pixmap format FXPPMImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in Portable Pixmap format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in Portable Pixmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXPPMImage(); }; /** * Check if stream contains a PPM, return TRUE if so. */ extern FXAPI bool fxcheckPPM(FXStream& store); /** * Load an PPM (Portable Pixmap Format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadPPM(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an PPM (Portable Pixmap Format) file to a stream. */ extern FXAPI bool fxsavePPM(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXVerticalFrame.h0000664000175000017500000000552212130340076014110 00000000000000/******************************************************************************** * * * V e r t i c a l C o n t a i n e r W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXVerticalFrame.h,v 1.15 2006/01/22 17:58:12 fox Exp $ * ********************************************************************************/ #ifndef FXVERTICALFRAME_H #define FXVERTICALFRAME_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /** * Vertical frame layout manager widget is used to automatically * place child-windows vertically from top-to-bottom, or bottom-to-top, * depending on the child window's layout hints. */ class FXAPI FXVerticalFrame : public FXPacker { FXDECLARE(FXVerticalFrame) protected: FXVerticalFrame(){} private: FXVerticalFrame(const FXVerticalFrame&); FXVerticalFrame& operator=(const FXVerticalFrame&); public: /// Construct a vertical frame layout manager FXVerticalFrame(FXComposite *p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_SPACING,FXint pr=DEFAULT_SPACING,FXint pt=DEFAULT_SPACING,FXint pb=DEFAULT_SPACING,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); }; } #endif fox-1.6.49/include/FXComposite.h0000664000175000017500000000644312130340076013331 00000000000000/******************************************************************************** * * * C o m p o s i t e W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXComposite.h,v 1.24 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCOMPOSITE_H #define FXCOMPOSITE_H #ifndef FXWINDOW_H #include "FXWindow.h" #endif namespace FX { /// Base composite class FXAPI FXComposite : public FXWindow { FXDECLARE(FXComposite) protected: FXComposite(){} FXComposite(FXApp* a,FXVisual *vis); FXComposite(FXApp* a,FXWindow* own,FXuint opts,FXint x,FXint y,FXint w,FXint h); private: FXComposite(const FXComposite&); FXComposite &operator=(const FXComposite&); public: long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onFocusNext(FXObject*,FXSelector,void*); long onFocusPrev(FXObject*,FXSelector,void*); long onCmdUpdate(FXObject*,FXSelector,void*); public: /// Constructor FXComposite(FXComposite* p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Return the width of the widest child window FXint maxChildWidth() const; /// Return the height of the tallest child window FXint maxChildHeight() const; /// Overrides this virtual function to return TRUE virtual bool isComposite() const; /// Destructor virtual ~FXComposite(); }; } #endif fox-1.6.49/include/FXCP855Codec.h0000644000175000017500000000107711637250333013074 00000000000000#ifndef FXCP855CODEC_H #define FXCP855CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP855 Codec class FXAPI FXCP855Codec : public FXTextCodec { FXDECLARE(FXCP855Codec) public: FXCP855Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP855Codec(){} }; } #endif fox-1.6.49/include/FXComboBox.h0000664000175000017500000002417712130340076013103 00000000000000/******************************************************************************** * * * C o m b o B o x W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXComboBox.h,v 1.46 2006/01/27 02:07:44 fox Exp $ * ********************************************************************************/ #ifndef FXCOMBOBOX_H #define FXCOMBOBOX_H #ifndef FXPACKER_H #include "FXPacker.h" #endif namespace FX { /// ComboBox styles enum { COMBOBOX_NO_REPLACE = 0, /// Leave the list the same COMBOBOX_REPLACE = 0x00020000, /// Replace current item with typed text COMBOBOX_INSERT_BEFORE = 0x00040000, /// Typed text inserted before current COMBOBOX_INSERT_AFTER = 0x00060000, /// Typed text inserted after current COMBOBOX_INSERT_FIRST = 0x00080000, /// Typed text inserted at begin of list COMBOBOX_INSERT_LAST = 0x000A0000, /// Typed text inserted at end of list COMBOBOX_STATIC = 0x00100000, /// Unchangable text box COMBOBOX_NORMAL = 0 /// Can type text but list is not changed }; class FXTextField; class FXMenuButton; class FXList; class FXPopup; /** * A Combo Box provides a way to select a string from a list of strings. * Unless COMBOBOX_STATIC is passed, it also allows the user to enter a new * string into the text field, for example if the desired entry is not in the * list of strings. Passing COMBOBOX_REPLACE, COMBOBOX_INSERT_BEFORE, COMBOBOX_INSERT_AFTER, * COMBOBOX_INSERT_FIRST, or COMBOBOX_INSERT_LAST causes a newly entered text to replace the * current one in the list, or be added before or after the current entry, or to be added at * the beginning or end of the list. * Combo Box is intended to enter text; if you need to enter a choice from a list of * options, it is recommended that the List Box widget is used instead. * When the text in the field is changed, a SEL_COMMAND will be send to the target. * The Combo Box can also receive ID_GETSTRINGVALUE and ID_SETSTRINGVALUE and so * on, which will behave similar to Text Field in that they will retrieve or update * the value of the field. */ class FXAPI FXComboBox : public FXPacker { FXDECLARE(FXComboBox) protected: FXTextField *field; FXMenuButton *button; FXList *list; FXPopup *pane; protected: FXComboBox(){} private: FXComboBox(const FXComboBox&); FXComboBox &operator=(const FXComboBox&); public: long onFocusUp(FXObject*,FXSelector,void*); long onFocusDown(FXObject*,FXSelector,void*); long onFocusSelf(FXObject*,FXSelector,void*); long onMouseWheel(FXObject*,FXSelector,void*); long onTextButton(FXObject*,FXSelector,void*); long onTextChanged(FXObject*,FXSelector,void*); long onTextCommand(FXObject*,FXSelector,void*); long onListClicked(FXObject*,FXSelector,void*); long onFwdToText(FXObject*,FXSelector,void*); long onUpdFmText(FXObject*,FXSelector,void*); public: enum { ID_LIST=FXPacker::ID_LAST, ID_TEXT, ID_LAST }; public: /// Construct a Combo Box widget with room to display cols columns of text FXComboBox(FXComposite *p,FXint cols,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=COMBOBOX_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Enable combo box virtual void enable(); /// Disable combo box virtual void disable(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Perform layout virtual void layout(); /// Return true if combobox is editable FXbool isEditable() const; /// Set editable state void setEditable(FXbool edit=TRUE); /// Set the text void setText(const FXString& text); /// Get the text FXString getText() const; /// Set the number of columns void setNumColumns(FXint cols); /// Get the number of columns FXint getNumColumns() const; /// Change text justification mode; default is JUSTIFY_LEFT void setJustify(FXuint mode); /// Return text justification mode FXuint getJustify() const; /// Return the number of items in the list FXint getNumItems() const; /// Return the number of visible items FXint getNumVisible() const; /// Set the number of visible items in the drop down list void setNumVisible(FXint nvis); /// Return true if current item FXbool isItemCurrent(FXint index) const; /// Set the current item (index is zero-based) void setCurrentItem(FXint index,FXbool notify=FALSE); /// Get the current item's index FXint getCurrentItem() const; /// Return the item at the given index FXString getItem(FXint index) const; /// Replace the item at index FXint setItem(FXint index,const FXString& text,void* ptr=NULL); /// Fill combo box by appending items from array of strings FXint fillItems(const FXchar** strings); /// Fill combo box by appending items from newline separated strings FXint fillItems(const FXString& strings); /// Insert a new item at index FXint insertItem(FXint index,const FXString& text,void* ptr=NULL); /// Append an item to the list FXint appendItem(const FXString& text,void* ptr=NULL); /// Prepend an item to the list FXint prependItem(const FXString& text,void* ptr=NULL); /// Move item from oldindex to newindex FXint moveItem(FXint newindex,FXint oldindex); /// Remove this item from the list void removeItem(FXint index); /// Remove all items from the list void clearItems(); /** * Search items by name, beginning from item start. If the start item * is -1 the search will start at the first item in the list. Flags * may be SEARCH_FORWARD or SEARCH_BACKWARD to control the search * direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. * The option SEARCH_IGNORECASE causes a case-insensitive match. Finally, * passing SEARCH_PREFIX causes searching for a prefix of the item name. * Return -1 if no matching item is found. */ FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /** * Search items by associated user data, beginning from item start. If the * start item is -1 the search will start at the first item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. */ FXint findItemByData(const void *ptr,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /// Set text for specified item void setItemText(FXint index,const FXString& text); /// Get text for specified item FXString getItemText(FXint index) const; /// Set data pointer for specified item void setItemData(FXint index,void* ptr) const; /// Get data pointer for specified item void* getItemData(FXint index) const; /// Is the pane shown FXbool isPaneShown() const; /// Sort items using current sort function void sortItems(); /// Set text font void setFont(FXFont* fnt); /// Get text font FXFont* getFont() const; /// Set the combobox style. void setComboStyle(FXuint mode); /// Get the combobox style. FXuint getComboStyle() const; /// Set window background color virtual void setBackColor(FXColor clr); /// Get background color FXColor getBackColor() const; /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const; /// Change selected background color void setSelBackColor(FXColor clr); /// Return selected background color FXColor getSelBackColor() const; /// Change selected text color void setSelTextColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const; /// Return sort function FXListSortFunc getSortFunc() const; /// Change sort function void setSortFunc(FXListSortFunc func); /// Set the combobox help text void setHelpText(const FXString& txt); /// Get the combobox help text const FXString& getHelpText() const; /// Set the tool tip message for this combobox void setTipText(const FXString& txt); /// Get the tool tip message for this combobox const FXString& getTipText() const; /// Save combobox to a stream virtual void save(FXStream& store) const; /// Load combobox from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXComboBox(); }; } #endif fox-1.6.49/include/FXCURCursor.h0000664000175000017500000000644412130340076013217 00000000000000/******************************************************************************** * * * C U R C u r s o r O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Sander Jansen. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXCURCursor.h,v 1.18 2006/01/22 17:57:59 fox Exp $ * ********************************************************************************/ #ifndef FXCURCURSOR_H #define FXCURCURSOR_H #ifndef FXCURSOR_H #include "FXCursor.h" #endif namespace FX { /// CUR Cursor class class FXAPI FXCURCursor : public FXCursor { FXDECLARE(FXCURCursor) protected: FXCURCursor(){} private: FXCURCursor(const FXCURCursor&); FXCURCursor &operator=(const FXCURCursor&); public: static const FXchar fileExt[]; public: /** * Construct a cursor from memory stream in Microsoft CUR format. * The image is limited to 32x32 pixels. */ FXCURCursor(FXApp* a,const void* pix); /// Save pixel data only, in CUR format virtual bool savePixels(FXStream& store) const; /// Load pixel data only, in CUR format virtual bool loadPixels(FXStream& store); /// Destructor virtual ~FXCURCursor(); }; #ifndef FXLOADICO #define FXLOADICO /** * Check if stream contains a ICO, return TRUE if so. */ extern FXAPI bool fxcheckICO(FXStream& store); /** * Load an ICO (Microsoft icon format) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadICO(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXint& xspot,FXint& yspot); /** * Save an ICO (Microsoft icon format) file to a stream. * If no hot-spot given, save as an ICO instead of a CUR resource. */ extern FXAPI bool fxsaveICO(FXStream& store,const FXColor *data,FXint width,FXint height,FXint xspot=-1,FXint yspot=-1); #endif } #endif fox-1.6.49/include/FXTextCodec.h0000664000175000017500000001310412130340076013241 00000000000000/******************************************************************************** * * * U n i c o d e T e x t C o d e c * * * ********************************************************************************* * Copyright (C) 2002,2006 by L.Johnson & J.van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXTextCodec.h,v 1.30 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTEXTCODEC_H #define FXTEXTCODEC_H #ifndef FXOBJECT_H #include "FXObject.h" #endif namespace FX { /** * Abstract base class for a stateless coder/decoder. */ class FXAPI FXTextCodec : public FXObject { FXDECLARE_ABSTRACT(FXTextCodec) public: /// Construct text codec FXTextCodec(){} /// Convert utf8 to single wide character static FXint utf2wc(FXwchar& wc,const FXchar* src,FXint nsrc); /// Convert utf16 to single wide character static FXint utf2wc(FXwchar& wc,const FXnchar* src,FXint nsrc); /// Convert utf32 to single wide character static FXint utf2wc(FXwchar& wc,const FXwchar* src,FXint nsrc); /// Convert single wide character to utf8 static FXint wc2utf(FXchar* dst,FXint ndst,FXwchar wc); /// Convert single wide character to utf16 static FXint wc2utf(FXnchar* dst,FXint ndst,FXwchar wc); /// Convert single wide character to utf32 static FXint wc2utf(FXwchar* dst,FXint ndst,FXwchar wc); /// Count utf8 bytes needed to convert multi-byte characters from src virtual FXint mb2utflen(const FXchar* src,FXint nsrc) const; /// Count utf8 bytes needed to convert multi-byte characters from src FXint mb2utflen(const FXString& src) const; /// Convert multi-byte characters from src to utf8 characters at dst virtual FXint mb2utf(FXchar* dst,FXint ndst,const FXchar* src,FXint nsrc) const; /// Convert multi-byte characters from src to utf8 characters at dst FXint mb2utf(FXchar* dst,FXint ndst,const FXchar* src) const; /// Convert multi-byte characters from src to utf8 characters at dst FXint mb2utf(FXchar* dst,FXint ndst,const FXString& src) const; /// Convert multi-byte characters from src to utf8 string FXString mb2utf(const FXchar* src,FXint nsrc) const; /// Convert multi-byte characters from src to utf8 string FXString mb2utf(const FXchar* src) const; /// Convert multi-byte string to utf8 string FXString mb2utf(const FXString& src) const; /// Convert multi-byte characters from src to single wide character virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; /// Count multi-byte characters characters needed to convert utf8 from src virtual FXint utf2mblen(const FXchar* src,FXint nsrc) const; /// Count multi-byte characters characters needed to convert utf8 from src virtual FXint utf2mblen(const FXString& src) const; /// Convert utf8 characters at src to multi-byte characters at dst virtual FXint utf2mb(FXchar* dst,FXint ndst,const FXchar* src,FXint nsrc) const; /// Convert utf8 characters at src to multi-byte characters at dst FXint utf2mb(FXchar* dst,FXint ndst,const FXchar* src) const; /// Convert utf8 characters at src to multi-byte characters at dst FXint utf2mb(FXchar* dst,FXint ndst,const FXString& src) const; /// Convert utf8 characters at src to multi-byte string FXString utf2mb(const FXchar* src,FXint nsrc) const; /// Convert utf8 characters at src to multi-byte string FXString utf2mb(const FXchar* src) const; /// Convert utf8 string to multi-byte string FXString utf2mb(const FXString& src) const; /// Convert single wide character to multi-byte characters at dst virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; /** * Return the Management Information Base (MIBenum) for the character set. */ virtual FXint mibEnum() const = 0; /** * Return name of the codec. */ virtual const FXchar* name() const = 0; /** * Return the IANA mime name for this codec; this is used for example * as "text/utf-8" in drag and drop protocols. */ virtual const FXchar* mimeName() const = 0; /** * Return NULL-terminated list of aliases for this codec. */ virtual const FXchar* const* aliases() const = 0; /// Destruct codec virtual ~FXTextCodec(){} }; } #endif fox-1.6.49/include/FXSystem.h0000664000175000017500000000755712130340076012662 00000000000000/******************************************************************************** * * * M i s c e l l a n e o u s S y s t e m F u n c t i o n s * * * ********************************************************************************* * Copyright (C) 2005,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXSystem.h,v 1.6 2006/01/22 17:58:10 fox Exp $ * ********************************************************************************/ #ifndef FXSYSTEM_H #define FXSYSTEM_H namespace FX { namespace FXSystem { /// Return current time FXTime FXAPI now(); /// Convert time value to date-string FXString FXAPI time(FXTime value); /** * Convert time value to date-string as per strftime. * Format characters supported by most systems are: * * %a %A %b %B %c %d %H %I %j %m %M %p %S %U %w %W %x %X %y %Y %Z %% * * Some systems support additional conversions. */ FXString FXAPI time(const FXchar *format,FXTime value); /// Get effective user id FXuint FXAPI user(); /// Get effective group id FXuint FXAPI group(); /// Return owner name from uid if available FXString FXAPI userName(FXuint uid); /// Return group name from gid if available FXString FXAPI groupName(FXuint gid); /// Get current effective user name FXString FXAPI currentUserName(); /// Get current effective group name FXString FXAPI currentGroupName(); /// Get permissions string FXString FXAPI modeString(FXuint mode); /// Return value of environment variable name FXString FXAPI getEnvironment(const FXString& name); /// Change value of environment variable name, return true if success bool FXAPI setEnvironment(const FXString& name,const FXString& value); /// Get the current working directory FXString FXAPI getCurrentDirectory(); /// Set the current working directory FXbool FXAPI setCurrentDirectory(const FXString& path); /// Return the current drive (for Win32 systems) FXString FXAPI getCurrentDrive(); /// Set the current drive (for Win32 systems) FXbool FXAPI setCurrentDrive(const FXString& prefix); /// Get executable path FXString FXAPI getExecPath(); /// Return the home directory for the current user FXString FXAPI getHomeDirectory(); /// Return the home directory for a given user FXString FXAPI getUserDirectory(const FXString& user); /// Return temporary directory FXString FXAPI getTempDirectory(); /** * Get DLL name for given base name; for example "png" * becomes "libpng.so" on Linux, and "png.dll" on Windows. */ FXString FXAPI dllName(const FXString& name); } } #endif fox-1.6.49/include/FXPCXImage.h0000664000175000017500000000617112130340076012762 00000000000000/******************************************************************************** * * * P C X I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Janusz Ganczarski. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPCXImage.h,v 1.18 2006/01/22 17:58:06 fox Exp $ * ********************************************************************************/ #ifndef FXPCXIMAGE_H #define FXPCXIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// PCX graphics file class FXAPI FXPCXImage : public FXImage { FXDECLARE(FXPCXImage) protected: FXPCXImage(){} private: FXPCXImage(const FXPCXImage&); FXPCXImage &operator=(const FXPCXImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct image from memory stream formatted in PCX file FXPCXImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in PCX file virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in bitmap format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXPCXImage(); }; /** * Check if stream contains a PCX, return TRUE if so. */ extern FXAPI bool fxcheckPCX(FXStream& store); /** * Load an PCX (PC Paintbrush) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadPCX(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an PCX (PC Paintbrush) file to a stream. */ extern FXAPI bool fxsavePCX(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXCP1258Codec.h0000644000175000017500000000110611637250333013143 00000000000000#ifndef FXCP1258CODEC_H #define FXCP1258CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP1258 Codec class FXAPI FXCP1258Codec : public FXTextCodec { FXDECLARE(FXCP1258Codec) public: FXCP1258Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP1258Codec(){} }; } #endif fox-1.6.49/include/FXPicker.h0000664000175000017500000000531512130340076012601 00000000000000/******************************************************************************** * * * P i c k e r B u t t o n * * * ********************************************************************************* * Copyright (C) 2001,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPicker.h,v 1.10 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXPICKER_H #define FXPICKER_H #ifndef FXBUTTON_H #include "FXButton.h" #endif namespace FX { /** * A picker button allows you to identify an arbitrary * location on the screen. */ class FXAPI FXPicker : public FXButton { FXDECLARE(FXPicker) protected: FXPicker(){} private: FXPicker(const FXPicker&); FXPicker& operator=(const FXPicker&); public: long onMotion(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); public: FXPicker(FXComposite* p,const FXString& text,FXIcon* ic=NULL,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=BUTTON_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); }; } #endif fox-1.6.49/include/FXJPGIcon.h0000664000175000017500000000673012130340076012617 00000000000000/******************************************************************************** * * * J P E G I c o n O b j e c t * * * ********************************************************************************* * Copyright (C) 2000,2006 by David Tyree. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXJPGIcon.h,v 1.20 2006/01/24 13:53:11 fox Exp $ * ********************************************************************************/ #ifndef FXJPGICON_H #define FXJPGICON_H #ifndef FXICON_H #include "FXIcon.h" #endif namespace FX { /// JPEG Icon class class FXAPI FXJPGIcon : public FXIcon { FXDECLARE(FXJPGIcon) protected: FXint quality; protected: FXJPGIcon(){} private: FXJPGIcon(const FXJPGIcon&); FXJPGIcon &operator=(const FXJPGIcon&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct an icon from memory stream formatted in JPEG format FXJPGIcon(FXApp *a,const void *pix=NULL,FXColor clr=FXRGB(192,192,192),FXuint opts=0,FXint w=1,FXint h=1,FXint q=75); /// True if format is supported static const bool supported; /// Set image quality to save with void setQuality(FXint q){ quality=q; } /// Get image quality setting FXint getQuality() const { return quality; } /// Save pixels into stream in JPEG format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in JPEG format virtual bool loadPixels(FXStream& store); /// Destroy virtual ~FXJPGIcon(); }; /** * Check if stream contains a JPG, return TRUE if so. */ extern FXAPI bool fxcheckJPG(FXStream& store); /** * Load an JPEG (Joint Photographics Experts Group) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadJPG(FXStream& store,FXColor*& data,FXint& width,FXint& height,FXint& quality); /** * Save an JPEG (Joint Photographics Experts Group) file to a stream. */ extern FXAPI bool fxsaveJPG(FXStream& store,const FXColor* data,FXint width,FXint height,FXint quality); } #endif fox-1.6.49/include/FXElement.h0000664000175000017500000002201212130340076012746 00000000000000/******************************************************************************** * * * Generic Element Handling * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXElement.h,v 1.19 2006/01/22 17:58:01 fox Exp $ * ********************************************************************************/ #ifndef FXELEMENT_H #define FXELEMENT_H namespace FX { /**************************** D e f i n i t i o n ****************************/ // Generic implementations for generic objects /// Construct some elements at a location template inline void constructElms(TYPE* ptr,unsigned long n){ while(n--){ ::new ((void*)ptr) TYPE; ptr++; } } /// Destruct some elements at a location template inline void destructElms(TYPE* ptr,unsigned long n){ while(n--){ ptr->~TYPE(); ptr++; } } /// Copy some elements from one place to another template inline void copyElms(TYPE* dst,const TYPE* src,unsigned long n){ while(n--){ *dst++ = *src++; } } /// Move some elements from overlapping place to another template inline void moveElms(TYPE* dst,const TYPE* src,unsigned long n){ if(src>dst){ while(n--){ *dst++ = *src++; } } else if(dst>src){ dst+=n; src+=n; while(n--){ *--dst = *--src; } } } /// Fill array of elements with given element template inline void fillElms(TYPE* dst,const TYPE& src,unsigned long n){ while(n--){ *dst++ = src; } } /// Zero out array of elements template inline void clearElms(TYPE* dst,unsigned long n){ memset(dst,0,sizeof(TYPE)*n); } /// Save some elements to persistent store template inline void saveElms(FXStream& store,const TYPE* ptr,unsigned long n){ while(n--){ store << *ptr; ptr++; } } /// Load some elements from persistent store template inline void loadElms(FXStream& store,TYPE* ptr,unsigned long n){ while(n--){ store >> *ptr; ptr++; } } /// Allocate array of elements, uninitialized template inline FXint allocElms(TYPE*& ptr,unsigned long n){ return fxmalloc((void**)&ptr,sizeof(TYPE)*n); } /// Allocate array of elements, initialized with zero template inline FXint callocElms(TYPE*& ptr,unsigned long n){ return fxcalloc((void**)&ptr,sizeof(TYPE)*n); } /// Allocate array of elements, initialized with bit-wise copy of src array template inline FXint dupElms(TYPE*& ptr,const TYPE* src,unsigned long n){ return fxmemdup((void**)&ptr,src,sizeof(TYPE)*n); } /// Resize array of elements, without constructor or destructor template inline FXint resizeElms(TYPE*& ptr,unsigned long n){ return fxresize((void**)&ptr,sizeof(TYPE)*n); } /// Free array of elements, without destruction template inline void freeElms(TYPE*& ptr){ fxfree((void**)&ptr); } /********************** I m p l e m e n t a t i o n ************************/ // Specific implementations for built-in types // No-op constructors for array of basic type inline void constructElms(FXuchar*,unsigned long){ } inline void constructElms(FXchar*,unsigned long){ } inline void constructElms(FXushort*,unsigned long){ } inline void constructElms(FXshort*,unsigned long){ } inline void constructElms(FXuint*,unsigned long){ } inline void constructElms(FXint*,unsigned long){ } inline void constructElms(FXfloat*,unsigned long){ } inline void constructElms(FXdouble*,unsigned long){ } // No-op destructors for array of basic type inline void destructElms(FXuchar*,unsigned long){ } inline void destructElms(FXchar*,unsigned long){ } inline void destructElms(FXushort*,unsigned long){ } inline void destructElms(FXshort*,unsigned long){ } inline void destructElms(FXuint*,unsigned long){ } inline void destructElms(FXint*,unsigned long){ } inline void destructElms(FXfloat*,unsigned long){ } inline void destructElms(FXdouble*,unsigned long){ } // Simple bit-wise copy for array of basic type inline void copyElms(FXuchar* dst,const FXuchar* src,unsigned long n){ memcpy(dst,src,n); } inline void copyElms(FXchar* dst,const FXchar* src,unsigned long n){ memcpy(dst,src,n); } inline void copyElms(FXushort* dst,const FXushort* src,unsigned long n){ memcpy(dst,src,n<<1); } inline void copyElms(FXshort* dst,const FXshort* src,unsigned long n){ memcpy(dst,src,n<<1); } inline void copyElms(FXuint* dst,const FXuint* src,unsigned long n){ memcpy(dst,src,n<<2); } inline void copyElms(FXint* dst,const FXint* src,unsigned long n){ memcpy(dst,src,n<<2); } inline void copyElms(FXfloat* dst,const FXfloat* src,unsigned long n){ memcpy(dst,src,n<<2); } inline void copyElms(FXdouble* dst,const FXdouble* src,unsigned long n){ memcpy(dst,src,n<<3); } // Simple bit-wise copy for array of pointers to any type template inline void copyElms(TYPE** dst,const TYPE** src,unsigned long n){ memcpy(dst,src,n*sizeof(void*)); } // Simple bit-wise move for array of basic type inline void moveElms(FXuchar* dst,const FXuchar* src,unsigned long n){ memmove(dst,src,n); } inline void moveElms(FXchar* dst,const FXchar* src,unsigned long n){ memmove(dst,src,n); } inline void moveElms(FXushort* dst,const FXushort* src,unsigned long n){ memmove(dst,src,n<<1); } inline void moveElms(FXshort* dst,const FXshort* src,unsigned long n){ memmove(dst,src,n<<1); } inline void moveElms(FXuint* dst,const FXuint* src,unsigned long n){ memmove(dst,src,n<<2); } inline void moveElms(FXint* dst,const FXint* src,unsigned long n){ memmove(dst,src,n<<2); } inline void moveElms(FXfloat* dst,const FXfloat* src,unsigned long n){ memmove(dst,src,n<<2); } inline void moveElms(FXdouble* dst,const FXdouble* src,unsigned long n){ memmove(dst,src,n<<3); } // Simple bit-wise move for array of pointers to any type template inline void moveElms(TYPE** dst,const TYPE** src,unsigned long n){ memmove(dst,src,n*sizeof(void*)); } // Fill byte arrays with constant inline void fillElms(FXuchar* dst,const FXuchar& src,unsigned long n){ memset(dst,src,n); } inline void fillElms(FXchar* dst,const FXchar& src,unsigned long n){ memset(dst,src,n); } // Type-safe save for basic types inline void saveElms(FXStream& store,const FXuchar* ptr,unsigned long n){ store.save(ptr,n); } inline void saveElms(FXStream& store,const FXchar* ptr,unsigned long n){ store.save(ptr,n); } inline void saveElms(FXStream& store,const FXushort* ptr,unsigned long n){ store.save(ptr,n); } inline void saveElms(FXStream& store,const FXshort* ptr,unsigned long n){ store.save(ptr,n); } inline void saveElms(FXStream& store,const FXuint* ptr,unsigned long n){ store.save(ptr,n); } inline void saveElms(FXStream& store,const FXint* ptr,unsigned long n){ store.save(ptr,n); } inline void saveElms(FXStream& store,const FXfloat* ptr,unsigned long n){ store.save(ptr,n); } inline void saveElms(FXStream& store,const FXdouble* ptr,unsigned long n){ store.save(ptr,n); } // Type-safe load for basic types inline void loadElms(FXStream& store,FXuchar* ptr,unsigned long n){ store.load(ptr,n); } inline void loadElms(FXStream& store,FXchar* ptr,unsigned long n){ store.load(ptr,n); } inline void loadElms(FXStream& store,FXushort* ptr,unsigned long n){ store.load(ptr,n); } inline void loadElms(FXStream& store,FXshort* ptr,unsigned long n){ store.load(ptr,n); } inline void loadElms(FXStream& store,FXuint* ptr,unsigned long n){ store.load(ptr,n); } inline void loadElms(FXStream& store,FXint* ptr,unsigned long n){ store.load(ptr,n); } inline void loadElms(FXStream& store,FXfloat* ptr,unsigned long n){ store.load(ptr,n); } inline void loadElms(FXStream& store,FXdouble* ptr,unsigned long n){ store.load(ptr,n); } } #endif fox-1.6.49/include/FXToolTip.h0000664000175000017500000001044312130340076012754 00000000000000/******************************************************************************** * * * T o o l T i p W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXToolTip.h,v 1.13 2006/01/22 17:58:11 fox Exp $ * ********************************************************************************/ #ifndef FXTOOLTIP_H #define FXTOOLTIP_H #ifndef FXSHELL_H #include "FXShell.h" #endif namespace FX { class FXFont; /// Tooltip styles enum { TOOLTIP_PERMANENT = 0x00020000, /// Tooltip stays up indefinitely TOOLTIP_VARIABLE = 0x00040000, /// Tooltip stays up variable time, depending on the length of the string TOOLTIP_NORMAL = 0 /// Normal tooltip }; /// Hopefully Helpful Hint message class FXAPI FXToolTip : public FXShell { FXDECLARE(FXToolTip) protected: FXString label; // Text in the tip FXFont *font; // Font of the tip FXColor textColor; // Text color FXbool popped; // Is currently popped up protected: FXToolTip(); virtual bool doesOverrideRedirect() const; void place(FXint x,FXint y); void autoplace(); private: FXToolTip(const FXToolTip&); FXToolTip& operator=(const FXToolTip&); #ifdef WIN32 virtual const char* GetClass() const; #endif public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onTipShow(FXObject*,FXSelector,void*); long onTipHide(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); public: enum { ID_TIP_SHOW=FXShell::ID_LAST, ID_TIP_HIDE, ID_LAST }; public: /// Construct a tool tip FXToolTip(FXApp* a,FXuint opts=TOOLTIP_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Display the tip virtual void show(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Set the text for this tip void setText(const FXString& text); /// Get the text for this tip FXString getText() const { return label; } /// Set the tip text font void setFont(FXFont *fnt); /// Get the tip text font FXFont* getFont() const { return font; } /// Get the current tip text color FXColor getTextColor() const { return textColor; } /// Set the current tip text color void setTextColor(FXColor clr); virtual bool doesSaveUnder() const; /// Save tip to a stream virtual void save(FXStream& store) const; /// Load tip from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXToolTip(); }; } #endif fox-1.6.49/include/FXRGBImage.h0000664000175000017500000000620312130340076012736 00000000000000/******************************************************************************** * * * I R I S R G B I m a g e O b j e c t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXRGBImage.h,v 1.14 2006/01/22 17:58:07 fox Exp $ * ********************************************************************************/ #ifndef FXRGBIMAGE_H #define FXRGBIMAGE_H #ifndef FXIMAGE_H #include "FXImage.h" #endif namespace FX { /// IRIS RGB image class FXAPI FXRGBImage : public FXImage { FXDECLARE(FXRGBImage) protected: FXRGBImage(){} private: FXRGBImage(const FXRGBImage&); FXRGBImage &operator=(const FXRGBImage&); public: static const FXchar fileExt[]; static const FXchar mimeType[]; public: /// Construct image from memory stream formatted in IRIS-RGB format FXRGBImage(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1); /// Save pixels into stream in IRIS-RGB format virtual bool savePixels(FXStream& store) const; /// Load pixels from stream in IRIS-RGB format virtual bool loadPixels(FXStream& store); /// Destroy icon virtual ~FXRGBImage(); }; /** * Check if stream contains a RGB, return TRUE if so. */ extern FXAPI bool fxcheckRGB(FXStream& store); /** * Load an RGB (SGI IRIS RGB) file from a stream. * Upon successful return, the pixel array and size are returned. * If an error occurred, the pixel array is set to NULL. */ extern FXAPI bool fxloadRGB(FXStream& store,FXColor*& data,FXint& width,FXint& height); /** * Save an RGB (SGI IRIS RGB) file to a stream. */ extern FXAPI bool fxsaveRGB(FXStream& store,const FXColor *data,FXint width,FXint height); } #endif fox-1.6.49/include/FXDirDialog.h0000664000175000017500000000766212130340076013231 00000000000000/******************************************************************************** * * * D i r e c t o r y S e l e c t i o n D i a l o g * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDirDialog.h,v 1.17 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDIRDIALOG_H #define FXDIRDIALOG_H #ifndef FXDIALOGBOX_H #include "FXDialogBox.h" #endif namespace FX { class FXDirSelector; /** * A Directory Dialog provides a way to select a directory. In function, * the directory selection dialog is very similar to the file dialog, except that * the Directory Dialog displays a tree-structured view of the file system, and * thereby makes up and down navigation through the file system significantly easier. */ class FXAPI FXDirDialog : public FXDialogBox { FXDECLARE(FXDirDialog) protected: FXDirSelector *dirbox; // Directory selection widget protected: FXDirDialog(){} void initdialog(); private: FXDirDialog(const FXDirDialog&); FXDirDialog &operator=(const FXDirDialog&); public: /// Construct Directory Dialog box FXDirDialog(FXWindow* owner,const FXString& name,FXuint opts=0,FXint x=0,FXint y=0,FXint w=400,FXint h=300); /// Construct free-floating Directory Dialog box FXDirDialog(FXApp* a,const FXString& name,FXuint opts=0,FXint x=0,FXint y=0,FXint w=400,FXint h=300); /// Hide this window virtual void hide(); /// Change directory void setDirectory(const FXString& path); /// Return directory FXString getDirectory() const; /// Return TRUE if showing files as well as directories FXbool showFiles() const; /// Show or hide normal files void showFiles(FXbool showing); /// Return TRUE if showing hidden files FXbool showHiddenFiles() const; /// Show or hide hidden files void showHiddenFiles(FXbool showing); /// Return wildcard matching mode FXuint getMatchMode() const; /// Change wildcard matching mode void setMatchMode(FXuint mode); /// Change directory list style void setDirBoxStyle(FXuint style); /// Return directory list style FXuint getDirBoxStyle() const; /// Open directory name static FXString getOpenDirectory(FXWindow* owner,const FXString& caption,const FXString& path); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destructor virtual ~FXDirDialog(); }; } #endif fox-1.6.49/include/FXCP852Codec.h0000644000175000017500000000107711637250333013071 00000000000000#ifndef FXCP852CODEC_H #define FXCP852CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// CP852 Codec class FXAPI FXCP852Codec : public FXTextCodec { FXDECLARE(FXCP852Codec) public: FXCP852Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FXCP852Codec(){} }; } #endif fox-1.6.49/include/FX885916Codec.h0000644000175000017500000000111311637250333013103 00000000000000#ifndef FX885916CODEC_H #define FX885916CODEC_H #ifndef FXTEXTCODEC_H #include "FXTextCodec.h" #endif namespace FX { /// ISO-8859-16 Codec class FXAPI FX885916Codec : public FXTextCodec { FXDECLARE(FX885916Codec) public: FX885916Codec(){} virtual FXint mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const; virtual FXint wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const; virtual FXint mibEnum() const; virtual const FXchar* name() const; virtual const FXchar* mimeName() const; virtual const FXchar* const* aliases() const; virtual ~FX885916Codec(){} }; } #endif fox-1.6.49/include/FXFoldingList.h0000664000175000017500000005624312130340076013610 00000000000000/******************************************************************************** * * * F o l d i n g L i s t W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXFoldingList.h,v 1.34 2006/01/22 17:58:02 fox Exp $ * ********************************************************************************/ #ifndef FXFOLDINGLIST_H #define FXFOLDINGLIST_H #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { class FXIcon; class FXFont; class FXHeader; class FXFoldingList; /// Folding list styles enum { FOLDINGLIST_EXTENDEDSELECT = 0, /// Extended selection mode allows for drag-selection of ranges of items FOLDINGLIST_SINGLESELECT = 0x00100000, /// Single selection mode allows up to one item to be selected FOLDINGLIST_BROWSESELECT = 0x00200000, /// Browse selection mode enforces one single item to be selected at all times FOLDINGLIST_MULTIPLESELECT = 0x00300000, /// Multiple selection mode is used for selection of individual items FOLDINGLIST_AUTOSELECT = 0x00400000, /// Automatically select under cursor FOLDINGLIST_SHOWS_LINES = 0x00800000, /// Lines shown FOLDINGLIST_SHOWS_BOXES = 0x01000000, /// Boxes to expand shown FOLDINGLIST_ROOT_BOXES = 0x02000000, /// Display root boxes also FOLDINGLIST_NORMAL = FOLDINGLIST_EXTENDEDSELECT }; /// Tree list Item class FXAPI FXFoldingItem : public FXObject { FXDECLARE(FXFoldingItem) friend class FXFoldingList; friend class FXDirList; protected: FXFoldingItem *parent; FXFoldingItem *prev; FXFoldingItem *next; FXFoldingItem *first; FXFoldingItem *last; FXString label; FXIcon *openIcon; FXIcon *closedIcon; void *data; FXuint state; FXint x,y; private: FXFoldingItem(const FXFoldingItem&); FXFoldingItem& operator=(const FXFoldingItem&); protected: FXFoldingItem():parent(NULL),prev(NULL),next(NULL),first(NULL),last(NULL),openIcon(NULL),closedIcon(NULL),data(NULL),state(0),x(0),y(0){} virtual void draw(const FXFoldingList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const; virtual FXint hitItem(const FXFoldingList* list,FXint x,FXint y) const; public: enum{ SELECTED = 1, /// Selected FOCUS = 2, /// Focus DISABLED = 4, /// Disabled OPENED = 8, /// Opened EXPANDED = 16, /// Expanded HASITEMS = 32, /// Has virtual subitems DRAGGABLE = 64, /// Draggable OPENICONOWNED = 128, /// Open icon owned by item CLOSEDICONOWNED = 256 /// Close icon owned by item }; public: /// Constructor FXFoldingItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL):parent(NULL),prev(NULL),next(NULL),first(NULL),last(NULL),label(text),openIcon(oi),closedIcon(ci),data(ptr),state(0),x(0),y(0){} /// Get parent item FXFoldingItem* getParent() const { return parent; } /// Get next sibling item FXFoldingItem* getNext() const { return next; } /// Get previous sibling item FXFoldingItem* getPrev() const { return prev; } /// Get first child item FXFoldingItem* getFirst() const { return first; } /// Get las child item FXFoldingItem* getLast() const { return last; } /// Get item below this one in list FXFoldingItem* getBelow() const; /// Get item above this one in list FXFoldingItem* getAbove() const; /// Get number of children of item FXint getNumChildren() const; /// Change item label virtual void setText(const FXString& txt); /// Get item label const FXString& getText() const { return label; } /// Change open icon, deleting old icon if it was owned virtual void setOpenIcon(FXIcon* icn,FXbool owned=FALSE); /// Get open icon FXIcon* getOpenIcon() const { return openIcon; } /// Change closed icon, deleting old icon if it was owned virtual void setClosedIcon(FXIcon* icn,FXbool owned=FALSE); /// Get closed icon FXIcon* getClosedIcon() const { return closedIcon; } /// Change item user data void setData(void* ptr){ data=ptr; } /// Get item user data void* getData() const { return data; } /// Make item draw as focused virtual void setFocus(FXbool focus); /// Return true if item has focus FXbool hasFocus() const { return (state&FOCUS)!=0; } /// Select item virtual void setSelected(FXbool selected); /// Return true if this item is selected FXbool isSelected() const { return (state&SELECTED)!=0; } /// Make item show as open virtual void setOpened(FXbool opened); /// Return true if this item is open FXbool isOpened() const { return (state&OPENED)!=0; } /// Expand or collapse item virtual void setExpanded(FXbool expanded); /// Return true if this item is expanded into sub items FXbool isExpanded() const { return (state&EXPANDED)!=0; } /// Enable or disable item virtual void setEnabled(FXbool enabled); /// Return true if this item is enabled FXbool isEnabled() const { return (state&DISABLED)==0; } /// Make item draggable virtual void setDraggable(FXbool draggable); /// Return true if this item is draggable FXbool isDraggable() const { return (state&DRAGGABLE)!=0; } /// Return TRUE if subitems, real or imagined FXbool hasItems() const { return (state&HASITEMS)!=0; } /// Change has items flag void setHasItems(FXbool flag); /// Return true if descendent of parent item FXbool isChildOf(const FXFoldingItem* item) const; /// Return true if ancestor of child item FXbool isParentOf(const FXFoldingItem* item) const; /// Return width of item as drawn in list virtual FXint getWidth(const FXFoldingList* list) const; /// Return height of item as drawn in list virtual FXint getHeight(const FXFoldingList* list) const; /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Destroy item and free icons if owned virtual ~FXFoldingItem(); }; /// Folding item collate function typedef FXint (*FXFoldingListSortFunc)(const FXFoldingItem*,const FXFoldingItem*); /** * A Folding List Widget resembles a Tree list except that it supports a * header control to provide each item with multiple columns of text. * Subtrees can be collapsed or expanded by double-clicking on an item * or by clicking on the optional plus button in front of the item. * Each item may have a text and optional open-icon as well as a closed-icon. * The items may be connected by optional lines to show the hierarchical * relationship. * When an item's selected state changes, the folding list emits a SEL_SELECTED * or SEL_DESELECTED message. If an item is opened or closed, a message * of type SEL_OPENED or SEL_CLOSED is sent. When the subtree under an * item is expanded, a SEL_EXPANDED or SEL_COLLAPSED message is issued. * A change of the current item is signified by the SEL_CHANGED message. * In addition, the folding list sends SEL_COMMAND messages when the user * clicks on an item, and SEL_CLICKED, SEL_DOUBLECLICKED, and SEL_TRIPLECLICKED * when the user clicks once, twice, or thrice, respectively. * When items are added or removed, the folding list sends messages of the * type SEL_INSERTED or SEL_DELETED. * In each of these cases, a pointer to the item, if any, is passed in the * 3rd argument of the message. */ class FXAPI FXFoldingList : public FXScrollArea { FXDECLARE(FXFoldingList) protected: FXHeader *header; // Tree header FXFoldingItem *firstitem; // First root item FXFoldingItem *lastitem; // Last root item FXFoldingItem *anchoritem; // Selection anchor item FXFoldingItem *currentitem; // Current item FXFoldingItem *extentitem; // Selection extent FXFoldingItem *cursoritem; // Item under cursor FXFoldingItem *viewableitem; // Viewable item FXFont *font; // Font FXFoldingListSortFunc sortfunc; // Item sort function FXColor textColor; // Text color FXColor selbackColor; // Selected background color FXColor seltextColor; // Selected text color FXColor lineColor; // Line color FXint treeWidth; // Tree width FXint treeHeight; // Tree height FXint visible; // Number of visible items FXint indent; // Parent to child indentation FXint grabx; // Grab point x FXint graby; // Grab point y FXString lookup; // Lookup string FXString help; // Help string FXbool state; // State of item protected: FXFoldingList(); void recompute(); void mergesort(FXFoldingItem*& list); void sort(FXFoldingItem*& f1,FXFoldingItem*& t1,FXFoldingItem*& f2,FXFoldingItem*& t2,int n); virtual void moveContents(FXint x,FXint y); virtual FXFoldingItem* createItem(const FXString& text,FXIcon* oi,FXIcon* ci,void* ptr); static FXint compareSection(const FXchar *p,const FXchar* q,FXint s); static FXint compareSectionCase(const FXchar *p,const FXchar* q,FXint s); private: FXFoldingList(const FXFoldingList&); FXFoldingList& operator=(const FXFoldingList&); public: long onPaint(FXObject*,FXSelector,void*); long onEnter(FXObject*,FXSelector,void*); long onLeave(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onHeaderChanged(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onTipTimer(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onClicked(FXObject*,FXSelector,void*); long onDoubleClicked(FXObject*,FXSelector,void*); long onTripleClicked(FXObject*,FXSelector,void*); long onCommand(FXObject*,FXSelector,void*); long onLookupTimer(FXObject*,FXSelector,void*); public: static FXint ascending(const FXFoldingItem*,const FXFoldingItem*); static FXint descending(const FXFoldingItem*,const FXFoldingItem*); static FXint ascendingCase(const FXFoldingItem*,const FXFoldingItem*); static FXint descendingCase(const FXFoldingItem*,const FXFoldingItem*); public: enum { ID_LOOKUPTIMER=FXScrollArea::ID_LAST, ID_HEADER_CHANGE, ID_LAST }; public: /// Construct a folding list; the folding list is initially empty FXFoldingList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FOLDINGLIST_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Compute and return content width virtual FXint getContentWidth(); /// Return content height virtual FXint getContentHeight(); /// Recalculate layout virtual void recalc(); /// Tree list can receive focus virtual bool canFocus() const; /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Return header control FXHeader* getHeader() const { return header; } /// Set headers from array of strings void setHeaders(const FXchar** strings,FXint size=1); /// Set headers from newline separated strings void setHeaders(const FXString& strings,FXint size=1); /// Append header with given text and optional icon void appendHeader(const FXString& text,FXIcon *icon=NULL,FXint size=1); /// Remove header at index void removeHeader(FXint index); /// Change text of header at index void setHeaderText(FXint index,const FXString& text); /// Return text of header at index FXString getHeaderText(FXint index) const; /// Change icon of header at index void setHeaderIcon(FXint index,FXIcon *icon); /// Return icon of header at index FXIcon* getHeaderIcon(FXint index) const; /// Change size of header at index void setHeaderSize(FXint index,FXint size); /// Return width of header at index FXint getHeaderSize(FXint index) const; /// Return number of headers FXint getNumHeaders() const; /// Return number of items FXint getNumItems() const; /// Return number of visible items FXint getNumVisible() const { return visible; } /// Change number of visible items void setNumVisible(FXint nvis); /// Return first root item FXFoldingItem* getFirstItem() const { return firstitem; } /// Return last root item FXFoldingItem* getLastItem() const { return lastitem; } /// Fill list by appending items from array of strings FXint fillItems(FXFoldingItem* father,const FXchar** strings,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Fill list by appending items from newline separated strings FXint fillItems(FXFoldingItem* father,const FXString& strings,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Insert [possibly subclassed] item under father before other item FXFoldingItem* insertItem(FXFoldingItem* other,FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE); /// Insert item with given text and optional icons, and user-data pointer under father before other item FXFoldingItem* insertItem(FXFoldingItem* other,FXFoldingItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Append [possibly subclassed] item as last child of father FXFoldingItem* appendItem(FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE); /// Append item with given text and optional icons, and user-data pointer as last child of father FXFoldingItem* appendItem(FXFoldingItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Prepend [possibly subclassed] item as first child of father FXFoldingItem* prependItem(FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE); /// Prepend item with given text and optional icons, and user-data pointer as first child of father FXFoldingItem* prependItem(FXFoldingItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE); /// Move item under father before other item FXFoldingItem *moveItem(FXFoldingItem* other,FXFoldingItem* father,FXFoldingItem* item); /// Extract item FXFoldingItem* extractItem(FXFoldingItem* item,FXbool notify=FALSE); /// Remove item void removeItem(FXFoldingItem* item,FXbool notify=FALSE); /// Remove items in range [fm, to] inclusively void removeItems(FXFoldingItem* fm,FXFoldingItem* to,FXbool notify=FALSE); /// Remove all items from list void clearItems(FXbool notify=FALSE); /// Return item width FXint getItemWidth(const FXFoldingItem* item) const { return item->getWidth(this); } /// Return item height FXint getItemHeight(const FXFoldingItem* item) const { return item->getHeight(this); } /// Get item at x,y, if any virtual FXFoldingItem* getItemAt(FXint x,FXint y) const; /** * Search items by name, beginning from item start. If the start item * is NULL the search will start at the first, top-most item in the list. * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the search * direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. * The option SEARCH_IGNORECASE causes a case-insensitive match. Finally, * passing SEARCH_PREFIX causes searching for a prefix of the item name. * Return NULL if no matching item is found. */ FXFoldingItem* findItem(const FXString& text,FXFoldingItem* start=NULL,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /** * Search items by associated user data, beginning from item start. If the * start item is NULL the search will start at the first, top-most item * in the list. Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control * the search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP * to control whether the search wraps at the start or end of the list. */ FXFoldingItem* findItemByData(const void *ptr,FXFoldingItem* start=NULL,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const; /// Scroll to make item visible virtual void makeItemVisible(FXFoldingItem* item); /// Change item's text void setItemText(FXFoldingItem* item,const FXString& text); /// Return item's text FXString getItemText(const FXFoldingItem* item) const; /// Change item's open icon, deleting old icon if it was owned void setItemOpenIcon(FXFoldingItem* item,FXIcon* icon,FXbool owned=FALSE); /// Return item's open icon FXIcon* getItemOpenIcon(const FXFoldingItem* item) const; /// Chance item's closed icon, deleting old icon if it was owned void setItemClosedIcon(FXFoldingItem* item,FXIcon* icon,FXbool owned=FALSE); /// Return item's closed icon FXIcon* getItemClosedIcon(const FXFoldingItem* item) const; /// Change item user-data pointer void setItemData(FXFoldingItem* item,void* ptr) const; /// Return item user-data pointer void* getItemData(const FXFoldingItem* item) const; /// Return TRUE if item is selected FXbool isItemSelected(const FXFoldingItem* item) const; /// Return TRUE if item is current FXbool isItemCurrent(const FXFoldingItem* item) const; /// Return TRUE if item is visible FXbool isItemVisible(const FXFoldingItem* item) const; /// Return TRUE if item opened FXbool isItemOpened(const FXFoldingItem* item) const; /// Return TRUE if item expanded FXbool isItemExpanded(const FXFoldingItem* item) const; /// Return TRUE if item is a leaf-item, i.e. has no children FXbool isItemLeaf(const FXFoldingItem* item) const; /// Return TRUE if item is enabled FXbool isItemEnabled(const FXFoldingItem* item) const; /// Return item hit code: 0 outside, 1 icon, 2 text, 3 box FXint hitItem(const FXFoldingItem* item,FXint x,FXint y) const; /// Repaint item void updateItem(FXFoldingItem* item); /// Enable item virtual FXbool enableItem(FXFoldingItem* item); /// Disable item virtual FXbool disableItem(FXFoldingItem* item); /// Select item virtual FXbool selectItem(FXFoldingItem* item,FXbool notify=FALSE); /// Deselect item virtual FXbool deselectItem(FXFoldingItem* item,FXbool notify=FALSE); /// Toggle item selection virtual FXbool toggleItem(FXFoldingItem* item,FXbool notify=FALSE); /// Extend selection from anchor item to item virtual FXbool extendSelection(FXFoldingItem* item,FXbool notify=FALSE); /// Deselect all items virtual FXbool killSelection(FXbool notify=FALSE); /// Open item virtual FXbool openItem(FXFoldingItem* item,FXbool notify=FALSE); /// Close item virtual FXbool closeItem(FXFoldingItem* item,FXbool notify=FALSE); /// Collapse tree virtual FXbool collapseTree(FXFoldingItem* tree,FXbool notify=FALSE); /// Expand tree virtual FXbool expandTree(FXFoldingItem* tree,FXbool notify=FALSE); /// Change current item virtual void setCurrentItem(FXFoldingItem* item,FXbool notify=FALSE); /// Return current item, if any FXFoldingItem* getCurrentItem() const { return currentitem; } /// Change anchor item void setAnchorItem(FXFoldingItem* item); /// Return anchor item, if any FXFoldingItem* getAnchorItem() const { return anchoritem; } /// Return item under cursor, if any FXFoldingItem* getCursorItem() const { return cursoritem; } /// Sort all items recursively void sortItems(); /// Sort root items void sortRootItems(); /// Sort children of item void sortChildItems(FXFoldingItem* item); /// Return sort function FXFoldingListSortFunc getSortFunc() const { return sortfunc; } /// Change sort function void setSortFunc(FXFoldingListSortFunc func){ sortfunc=func; } /// Change text font void setFont(FXFont* fnt); /// Return text font FXFont* getFont() const { return font; } /// Change parent-child indent amount void setIndent(FXint in); /// Return parent-child indent amount FXint getIndent() const { return indent; } /// Return normal text color FXColor getTextColor() const { return textColor; } /// Change normal text color void setTextColor(FXColor clr); /// Return selected text background FXColor getSelBackColor() const { return selbackColor; } /// Change selected text background void setSelBackColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const { return seltextColor; } /// Change selected text color void setSelTextColor(FXColor clr); /// Return line color FXColor getLineColor() const { return lineColor; } /// Change line color void setLineColor(FXColor clr); /// Return list style FXuint getListStyle() const; /// Change list style void setListStyle(FXuint style); /// Set the status line help text for this list void setHelpText(const FXString& text); /// Get the status line help text for this list const FXString& getHelpText() const { return help; } /// Save object to a stream virtual void save(FXStream& store) const; /// Load object from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXFoldingList(); }; } #endif fox-1.6.49/include/FXDirBox.h0000664000175000017500000001100512130340076012544 00000000000000/******************************************************************************** * * * D i r e c t o r y B o x W i d g e t * * * ********************************************************************************* * Copyright (C) 1999,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDirBox.h,v 1.25 2006/01/22 17:58:00 fox Exp $ * ********************************************************************************/ #ifndef FXDIRBOX_H #define FXDIRBOX_H #ifndef FXTREELISTBOX_H #include "FXTreeListBox.h" #endif namespace FX { class FXIcon; class FXFileDict; /// Directory Box options enum { DIRBOX_NO_OWN_ASSOC = 0x00020000 /// Do not create associations for files }; /** * A Directory Box widget allows the user to select parts of a file path. * First, it is filled with a string comprising a file path, like "/a/b/c". * Then, the user can select "/a/b/c", "/a/b", "/a", and "/" from the drop-down * list. The entries in the drop-down list are automatically provided with icons * by consulting the file-associations registry settings. * The Directory Box sends SEL_CHANGED and SEL_COMMAND messages, with the string * containing the full path to the selected item. */ class FXAPI FXDirBox : public FXTreeListBox { FXDECLARE(FXDirBox) protected: FXFileDict *associations; // Association table FXIcon *foldericon; // Folder icons FXIcon *cdromicon; // CDROM icon FXIcon *harddiskicon; // Hard disk icon FXIcon *netdriveicon; // Networked drive icon FXIcon *floppyicon; // Floppy icon FXIcon *nethoodicon; // Network neighborhood icon FXIcon *zipdiskicon; // Zip drive icon protected: FXDirBox(){} FXString getItemPathname(FXTreeItem *item) const; FXTreeItem* getPathnameItem(const FXString& path); private: FXDirBox(const FXDirBox&); FXDirBox &operator=(const FXDirBox&); public: long onTreeChanged(FXObject*,FXSelector,void*); long onTreeClicked(FXObject*,FXSelector,void*); long onCmdSetValue(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); public: /// Construct a Directory Box FXDirBox(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FRAME_SUNKEN|FRAME_THICK|TREELISTBOX_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Destroy server-side resources virtual void destroy(); /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); /// Set current directory void setDirectory(const FXString& pathname); /// Return current directory FXString getDirectory() const; /// Change file associations used to look up icons void setAssociations(FXFileDict* assoc); /// Return file associations FXFileDict* getAssociations() const { return associations; } /// Destructor virtual ~FXDirBox(); }; } #endif fox-1.6.49/AUTHORS0000664000175000017500000000407312130340076010402 00000000000000 List of contributors, in alphabetical order: ============================================ Johnathan Bush: Progress Bar Widget contributor. Pierre Cyr Contributions to FXTable widget. Janusz Ganczarski : PCX, ICO, TGA Image/Icon format contributor. Daniel Gehriger : FXGIFCursor, Multi-lingual keyboard support, and much more. Eric Gillet : TIFF Image support. Freddy Golos: Freddy [Fyodor] was one of the first adopters of FOX, back when everybody still had to take my word for it how nice it was; Freddy made it clear there was real potential here. Angel-Ventura Mendo Gomez : OpenGL Shape Objects. Sean Hubbell: Initial version of FXFile API's. Sander Jansen : New web pages, new web layout, many useful suggestions and code. Code for the round progress dial, and lots of Windows specific nitty-gritties. CUR cursor. Lyle Johnson : Windows Port of FOX, Python, Ruby bindings; FXSpinner widget. The Spinner Widget. Lyle is also largely responsible for the Window NT port of FOX. Torsten Landschoff FOX automake, and reswrap man page files. René van Paassen : FOX RPM spec file. Guoqing Tian: Dial Widget contributor. David Tyree : JPEG Image support. Charles W. Warren charles@moontown.org: Shutter Widgets contributor. The concept of the Data Targets. Charles has also been my principal sounding board for exploring the philosophical underpinnings of the FOX Library. David Tyree: JPEG Image and JPEG Icon support. Jeroen van der Zijp : Main FOX Library author. The true list should probably be much larger; if you feel I have inadvertantly omitted you, please email me jeroen@fox-toolkit.org and I'll add you immediately. fox-1.6.49/install-sh0000755000175000017500000003325612025761077011354 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: fox-1.6.49/doc/0000775000175000017500000000000012130343076010156 500000000000000fox-1.6.49/doc/filter.pl0000755000175000017500000000531211637250333011726 00000000000000#!/usr/bin/perl $file = $ARGV[0]; if ($file =~ /\.cpp/) { while (<>) { print $_; } } else { @lines = <>; chomp(@lines); $brace = 0; for ($i = 0; $i < scalar @lines; ++$i) { $_ = $lines[$i]; # adjust brace level $stm = $_; if ($$incmt) { if (m#^([^*]|\*+[^/*])*\*+/(.*)$#) { $stm = $1; $$incmt = 0; } else { $stm = ""; } } $stm =~ s#//.*##; $stm =~ s#/\*([^*]|\*+[^/*])*\*+/##g; if ($stm =~ m#^(([^/]|/[^*])*)/\*#) { $$incmt = 1; $stm = $1; } ++$brace if $stm =~ /\{/; --$brace, $enum = 0 if $stm =~ /}/; # skip message handlers if ($lines[$i] =~ /^\s*long\s+on\w+\(\s*FXObject\s*\*\s*\w*\s*,\s*FXSelector\s*\w*\s*,\s*void\s*\*\s*\w*\s*\);/) { #splice @lines, $i, 0, (" /** \@name Message Handlers */", " //\@{ "); #$j = $i+2; #while ($lines[$j] =~ /^\s*long\s+on\w+\(\s*FXObject\s*\*\s*\w*\s*,\s*FXSelector\s*\w*\s*,\s*void\s*\*\s*\w*\s*\);/) { # ++$j; #} #splice @lines, $j, 0, (" //\@} "); #$i = $j; $lines[$i]=""; } $skip = 0 if $brace <= 1; $skip = 1 if $stm =~ /^\s*public\s*:\s*$/; $skip = 2 if $stm =~ /^\s*protected\s*:\s*$/; $skip = 3 if $stm =~ /^\s*private\s*:\s*$/; $enum = 1 if $stm =~ /^\s*enum\s+\w*\s*\{[^}]*$/; if ($skip > 1) { splice @lines, $i, 1, (); --$i; next; } if (($lines[$i] =~ /^\*\// || @lines[$i] =~ m#///#)&& $lines[$i+1] =~ /^class/ && scalar @tags > 0 ) { if (@lines[$i] =~ m#///\s*(.*)$#) { @lines[$i] = "/** $1"; splice @lines, $i+1, 0, ("*/"); ++$i; } splice @lines, $i, 0, ("* ", "* See also: ", @tags); $i += scalar @tags + 2; } if ($enum == 1 && m#///?\s*.*$#) { $lines[$i] =~ s#///?#///<#; } if ($skip <= 1) { if ($brace == 1 && $lines[$i] =~ m|^\s*///?| && $lines[$i+1] =~ m|^\s*enum|) { $lines[$i] =~ m|^\s*///?\s*(.+)|; $cmt = $1; ($tag) = $file =~ /(\w+)\.\w+$/; $tag .= "_" . $group++; $tag =~ s#[ .:\\/]#_#g; push @tags, "* \\li \\ref $tag \"$cmt\"."; splice @lines, $i, 0, ("/** \\addtogroup $tag $cmt", " * \@{", " */"); $i += 3; $j = $i; while (!($lines[$j] =~ /\};/)) { ++$j; } splice @lines, $j+1, 0, ("/** @} */"); } if ($brace == 3 && $lines[$i] =~ m#^\s*enum\s+\{#) { $j = $i; $delete = 1; while (!($lines[$j] =~ m#\}\s*;#)) { $delete = 0 if $lines[$j] =~ m#///?#; ++$j; } if ($delete) { splice @lines, $i, $j-$i+1; $enum = 0; } } } } foreach (@lines) { print $_ . "\n"; } }fox-1.6.49/doc/messages.html0000664000175000017500000004333112130340076012574 00000000000000 Documentation: Messages
Documentation: Messages [Remove Frame]

Why a Target/Message System

    There are many methods to connect Graphical User Interface elements to an application code; the most common methods being used today are callback functions.  However, in C++, callback functions are not an obvious choice, as the technique does not easily allow a certain object to be specified.

    Another method being used in C++ is the signal-slot technique. In its typical implementation, connector objects are created that connect a signal to a slot. However, in order to provide the necessary isolation between caller and callee, template instantiations are involved; this limits its use to compile-time connectivity.

    The approach taken by FOX is a Target/Message System. Each Widget sends its message to a certain object called the target. As there may be multiple Widgets sending messages to one specific target, a message id is used to tell them apart.

    Moreover, a single Widget may be able to send several kinds of messages; this problem is solved by typing the messages by a message type. Using the message type and message id, the source and type of a GUI event or action can be uniquely identified.
    Messages can be sent to any object that is derived (directly or indirectly) from FXObject. Of course, all FOX Widgets are derived from FXObject, and so is the FXApp application object. Thus pretty much every object in FOX is able to receive messages.

    An advantage of the fact that an explicit object is the target of a message (as opposed to lets say an implicit message routing scheme), is the fact that message id's don't have to be globally unique within an application; all that is required is that it is unique for a certain class and its base classes.

    This is a particularly important consideration when one considers making component oriented software, where components are perhaps written by different people, or even different organizations.
    With FOX, they do not have to coordinate message id's with each other in order for components to interact properly.
    Another important benefit of the target/message system is the fact that the message a Widget sends, and the target to whom it sends it, may be changed at run time.

    This is an significant benefit for building programs such as GUI Builders and other component oriented software. Finally, since all FOX Widgets derive from FXObject, they are capable of receiving messages, as well as sending them.
    This allows FOX Widgets to implement a number of typical commands that are common in GUI systems; for example, consider the following code ragment:

    new FXHorizontalFrame(main,LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
    ....
    ....
    ....
    new FXMenuCommand(windowmenu,"&Toolbar",NULL,toolbar,FXWindow::ID_TOGGLESHOWN);
    

    In the above example, the toolbar Widget is a direct target of the MenuCommand Widget.  Each time the Toolbar command is invoked, it will toggle the toolbar Widget on or off.  Moreover, when the GUI Update process takes place during idle time, the MenuCommand will also send an update message to the toolbar Widget; in response to this update, the toolbar examines its current state, and either checks or unchecks the MenuCommand by sending it back a ID_CHECK or ID_UNCHECK message.

    Note that the toolbar can not assume that the sender of the update message is a MenuCommand; but it does know its an FXObject!  So it needs to send a ID_CHECK (ID_UNCHECK) message to this object instead of trying to call the check() or uncheck() member function of MenuCommand directly.
    The above code fragment shows the flexibility of the target/message system, especially when combined with the GUI Update idle processing capability.  The mechanism is used extensively inside FOX itself as well.

Message Maps

    The messages an object receives are mapped to a specific member function of the object by means of a message map.  A message map is nothing but a static, compile-time defined table which associates one or more messages with a certain member function.  Complicated Widgets may have several dozen messages that are being mapped this way.  Message maps are un unfortunate necessity in C++ as the exact binding of a message to a member function is performed at run time; C++ does not natively support such dynamic binding very well.Fortunately, FOX makes it fairly easy to define those message maps by providing a number of macros to set them up.  The following code fragment illustrates the process:

    FXDEFMAP(FXGLViewer) FXGLViewerMap[]={
      FXMAPFUNC(SEL_PAINT,0,FXGLViewer::onPaint),
      ....
      FXMAPFUNCS(SEL_UPDATE,MINKEY,MAXKEY,FXGLViewer::onUpdAll),
      };
    
    FXIMPLEMENT(FXGLViewer,FXGLCanvas,FXGLViewerMap,ARRAYNUMBER(FXGLViewerMap))
    

    The FXDEFMAP macro takes as the argument the name of the class.  It is used to define the entries into the message map table.  The FXMAPFUNC macro takes three arguments:- first, the type of the message, second, the id of the message, and last the member function to which this message is being mapped.  A similar macro called FXMAPFUNCS is used to define a range of message id's instead of just one.  You can use this macro to map a many messages to one and the same member function.

    For example, in a calculator program you may have one button for '0', '1', and so on till '9'.  Instead of defining ten very similar member functions, you can define just one of them.  The member function can use the macro FXSELID(sel) to acquire the id of the message that called it, and FXSELTYPE(sel) to find the messsage type of the message.

    The last macro FXIMPLEMENT has four arguments: the name of the class, the name of the immediate base class, a pointer to the message map, and the number of entries in the message map.  If an object does not implement any message handlers, you may pass NULL and 0 for these last two arguments instead.  The corresponding macro in the header file is called FXDECLARE.

    Every FOX object should always use FXDECLARE in its header file or class declaration, and FXIMPLEMENT in its implementation file!

    Besides FXMAPFUNC and FXMAPFUNCS, there are two (rarely used) macros that key on the message type only; FXMAPTYPE takes just two arguments, the message type and the member function, and FXMAPTYPES takes three, the first and last message id, and the member function.  FXMAPTYPE and FXMAPTYPES will completely disregard the message id, and map any message of the appropriate type to the indicated member function.

    All message id's should be in the range MINKEY to MAXKEY, and all message types in the range MINTYPE to MAXTYPE.  In addition, the special message id of zero (0) is reserved for system-originated messages.

    Messages are resolved to the message handler functions from the derived class upward to the base class.  This allows developers to catch messages in their derived class, before it gets handled in the base class.  Thus, you can easily redefine behavior of FOX built-in Widgets.

    As the message association is performed at run time, it is common practice to place the most-often occurring messages first in the map; this way, the least amount of searching takes place to find them; thus, the SEL_PAINT message is often placed first.

Keeping Track of Message Numbering

    FOX does not require that all message id's be globally unique.  However, it does require that they are unique for a specific target.  The messages understood by a target are the union of the messages understood by the target's class, and all of its base classes.
    An easy way to keep the numbering straight is to use enums.  FOX itself uses the technique illustrated below:

    class FXWindow : public FXDrawable {
      ...
    public:
      enum {
        ID_SHOW=1,
        ID_HIDE,
        ...
    
        ID_LAST
    
      };
    public:
    ...
    };
    
    class MyWindow : public FXWindow {
    ...
    public:
      enum {
        ID_MYMESSAGE=FXWindow::ID_LAST,
        ID_MYOTHERMESSAGE,
        ...
        ID_LAST
        };
    public:
    ...
    };
    

    This way, the compiler will automatically arrange to make sure the numbering is correct.  It is also easy to add more messages in before ID_LAST,  a recompile will adjust the message id's automatically.  Of course, you're welcome to use any other scheme if so desired; just make sure your messages do not clash with those of the base-classes of your object.

Message Targets should Outlive Message Sources

    It is obvious that when a Widget sends a message to some object, the receiving object should of course still exist.  A potential pitfall would rear its ugly head if this were not true.  Fortunately, in most cases, Control widgets will send messages to their containing Dialog Box, or the Application Object, or other long-lived objects.  In rare cases, you may want to make sure that as a Widget or Object is deleted, all references to it are cleaned up as well.FOX provides two member functions:

      FXWindow::setTarget(FXObject* tgt)
    

    and

      FXWindow::setSelector(FXSelector sel)
    

    that allow you to change the target, as well as the message that a Widget will send.  Setting the target of a Widget to NULL will stop it from sending any future messages to anybody.

    In order to catch the possibility that messages would be sent to an object that has been destructed, FOX will utterly thrash each object in the destructor.  Thus, if such a bug exists in an application, it is likely to surface quickly, leading to more reliable programs.

Sending Your Own Messages

    In many cases, you will want to send messages to Widgets yourself.  For example, in an GUI update handler you may want to send a message to the sender of the update message:

    ....
    FXMAPFUNC(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN,FXWindow::onCmdToggleShown),
    // Command
    FXMAPFUNC(SEL_UPDATE,FXWindow::ID_TOGGLESHOWN,FXWindow::onUpdToggleShown),
    // Update
    ....
    // Hide or show window<
    long FXWindow::onCmdToggleShown(FXObject*,FXSelector,void*){
      ....
      return 1;
      }
    
    // Update hide or show window
    long FXWindow::onUpdToggleShown(FXObject* sender,FXSelector,void*){
    
      sender->handle(this,shown()?FXSEL(SEL_COMMAND,ID_CHECK)
                                  :FXSEL(SEL_COMMAND,ID_UNCHECK),NULL);
      return 1;
      }
    

    What happens here? During GUI Updating, the Menu Command connected to the Toolbar sends a SEL_UPDATE message [instead of the SEL_COMMAND it sends when the command is invoked by the user].
    The onUpdToggleShown function above determines whether the Toolbar is currently shown, then sends a ID_CHECK or ID_UNCHECK back to the sender.
    Upon getting the ID_CHECK or ID_UNCHECK, a Menu Command object will subsequently place or remove a little check mark in front of its label.
    If the sender of the SEL_UPDATE message were some other Widget, e.g. a Check Button, it would still work properly, although the Check Button's implementation of the ID_CHECK and ID_UNCHECK handlers is of course completely different.
    If the sender of the SEL_UPDATE message were some completely different Widget, it would simply ignore the return message.

    By sending messages instead of calling a member function directly, the function above does not need to know what type of Widget sent the SEL_UPDATE message; it just sends a message back; if the sender of the message does not understand the message, nothing happens.  Note that it is guaranteed that the sender of a message is always an object derived from FXObject.

    The FXSEL macro composes to 16 bit unsigned short numbers into one 32 bit unsigned int.  Composing the message types and message id's this way allows for more efficient matching of messages.

Message Handler Return Values

    You may have noticed that some message handlers return 1, and some return 0. The general convention is, that if the message can be considered handled, i.e. it is normally processed, the handler should return 1Otherwise, it should return 0.
    Properly returning the correct return value will allow for intelligent message routing through your application. For messages directly resulting from a user-input event, such as button presses etc., FOX will use the return value of the message handler to determine if the GUI needs to be refreshed.

    For example, if the system sent a SEL_LEFTBUTTONPRESS to your Widget, and your Widget's handler returned 1, it is considered handled; next time the system goes into idle processing, all the GUI Widgets in the application will be updated again as it is assumed that by handling the button message, something may have changed.  If your  handler had returned 0, the message would have been considered unhandled, and nothing further would happen.

Message Routing and Delegation

    Messages may be forwarded from one object to another.  For example, upon receipt of a message, a target may first try to handle the message itself; then, if no match is found, it may try its luck by forwarding the message to some other object.  Here's how you would code this up:

    // Delegate message
    long MyWidget::onDefault(FXObject* sender,FXSelector key,void* data){
      return delegateObject && delegateObject->handle(sender,sel,data);
      }
    

    We use here the fact that we can overload the so-called default message handler, onDefault(). The default message handler is called when no message binding has been found for a message.

    In the above code fragment, delegateObject is assumed to be some type of object derived from FXObject.   You can use these delegation techniques very creatively.

    Note that you probably want to start the message id's of the delegateObject from where the delegator MyWidget left off, i.e. make sure there is no overlap unless its intended.

    In a few cases, some message which would be handled by MyWidget's base class needs to be forwarded to the delegateObject. You can easily do this by simply mapping that message to onDefault() in MyWidget's message map:

      FXMAPFUNC(SEL_COMMAND,BaseWidget::ID_DOSOMETHING,MyWidget::onDefault),
    

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/top.html0000664000175000017500000000157312130340076011571 00000000000000 FOX-Toolkit
FOX Toolkit
fox-1.6.49/doc/screenshots/0000775000175000017500000000000012130343077012517 500000000000000fox-1.6.49/doc/screenshots/udine_physics.jpg0000644000175000017500000003703611637250333016021 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀØ("ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?îµKN)¶Ø@%ùªžß0-Œ /©Ù­ Gíck¨Ö9ÈùÑN@50V}Ø`€w7Oþ¿QIœ0RA$d{Z„›2Ø|Ë›—©ˆ÷šÑŠQmgæ°.Üû¼1±ÿ×éZÖ¯;Û«\Æ#—'*@8ç>˜ÿët©ÀQ;’ p¸Ü}*=ä‡ëÆïIj®‡ÔƺÛ]ºEa†eÞìc#8=s׎9­ˆWhÄr‘–@s´úf¸éõïÚÛÚ*Ê9æWÞ»Áʬ@ÿYÎNÎsÇÍí[öú•ÍφÞþ8‘î„RD•Ýr\>¼Õ8´¹ºʶúŽ»)ÿz îÜ n9#v=O¯ÝÿhTÑÝëÂ5ݧD̓¸´ª½øÀý}ºsŒ–C­Ïo¨MoªGH±yˆñ«aºqÏÔôÍhC¨+épÞ¼lЧj Ä qëÖŽGkØ.‰ÃÍö0åŸËÎÃÓv:qžþ™¬hõ-i ‰×MbfF.e^Ï·#®z{rjÊêûaß Ë+Ê*@ z˜`|ã­Åz¿gy¥xüµp¢H‰e|à qž§oN¢›„–âºe®uÐ’Â2pC¯RFGÞ?]½³Z„“Ådïl¹”ÀÁt ΩÞë0Ù̱ˆžl!yZ>|±Û#ߟʯ™Qa2“òÝŸj˜TŒÕâÁ¦‡Ñ\ö©âSgo§ZZ5ÍôÒ1†áG» €– >ú·z‡Ù¤%­Å̤d$ ¸Ö±‹•­Ô™IE]—(¬«]e^é­ïRI‰QFá]ß9꣡ã¥Yšòé&dƒJ½ºUÀ2B€®qœu÷ªT¤åÊK©s(¬ñ¨\#Æ.t›ëdw æJƒh$àgŸZsÞ݉C£ßÏ$ #@U±ÁÇ>´ýŒïoÕ ÚÂ×ýzŠ£üæx¢¹Óo-|ÒUd8ü¦›ûÒO•¢j2¦Hˆ0ÃÔsG±íú ö°µÿFhQT ¾•îV ‹ «Wt.žrà0Ïóv¢QqveÆJJè(¢Š’‚Š( Š( Š( Š( ³5k½BØÄ¶«;89 žåÇ `p[©+N•T1Pd Ì{ž‚šWÑ ™º]Æ£3\.¡j!ØÃË ‚{qÀÏV‰)»jH¯ƒŒ©ÿ>£óPÕ´`„ŽêÚ?2+’íóeT±uÀ¦çL²ye4Ú€€ ÏSÇÐ~^õ”|Gj.Ì7J«ÈHÚ¥‰' Æ{þ¸”ßï¿–6»ð¬*ê~ÌeÉ,TŽc z“ë\Ôðîo™Ú÷·B¥$õ¶¤÷Z¨²BRH ºi6ñÀã¯Ö¤´uš2>ö•‰-´®ONž€°§E E««åå ƒ7ãoWÇ9]n­ eÛÄV©… ÊÖ‡+Æp~~µ¤((6×Q9Ü¥­ÜI [Ü¥Œ²\ےѪU›Œ×Óÿ­G‡âÔ"°+qn–é·tp†ÎÖ$“ÉäŽ{ZÓ™c†$ë¶ì¯'–¥m çŒÿ`A¥eEÓ¾Þ5Ț؜+­‹ÇÀù¹èGÔ] É«2t1uùåŠT¸¶Ó¥šèFÑ,y;s“œÄôÎ)c’çMðÝÄ·Ö…ÒÃGoù€³“Ð÷ëÆzÖ¤’Ä“y#\䱕l[å sóö Iö"„sòëqîÎlX*…ÎrKñÈ#ð>”¥)5aÅÅ;½ND—WÕ-nu‹Øí_ý@ K¦QœåAƒ×“]¢×º§ƒçų}¥Â€ˆ9o˜rüë]dجzÔnL{Ó'÷x\¿$m#ëÇ­9Z…&_@bq•qbÄc$gïtÈ#>Õ„iMO™É¿#¦¾"oËC‰µ´Õ­4Ût†Âqs³Ëž<å9R:<×O 7z†cº¹T.ÛFsŸ˜úþ¸«he1Ë®E€ W± ç>~Ha‘ŸŸŽ=}ý+Js‹‹9“³¹V­â²xD¦i%|ŠŒå˜ŒJ‚ôVgŠüEq¢é0ùpq:€ÌÀœsÇsú*èÊWd:ô!—ï/Ø*rÍÁɹÇZƒí1}”Îu•Ëó›ÜF; þ¹Qô©£ISó•Îõ˜­mÇÚæ7vÜ«ï(P6ÐÉŽãùWsst²*Yüãϵfßµ‰Î^@9 ±8ëÅZA³2kðDÝÒ[&Vã¦ÿ×ñ¡dñåë±8*X•±nã9l…d Nw²ôïŒç¥Y¸¸H¤Ehî$ÞhhíL¡ 0pÃŽCÛ•Ymž4‘g}ƒ•$¢K¸V8® {·¸w{Fˆ((ã,sÕGnç©5e/­íî¼Ãà”[ù к’ ù²<qƒŽô¦[eŸÀÿ§ô$p(wHËïÖ¢P²GZÌŒ—_Ðú`ÑÌï{ •ZÅ{W 5„Å9[x¦ß,–ÆK”= <’ñÇ ­J«&mã·{­YmÄêì¾e–q´€AÚ瓞zišÙA'Ä0 Ó‹÷âî#Ö¦WnåÆÉX¹EFÖå$:Ô{¥ zœ á¸ç×ÐÕñáÛò?ä+þöu6Ê”U¿øGoÿè+þþ.øGoÿè+þþ.‹Ê”U¿øGoÿè+þþ.øGoÿè+þþ.‹Ê”U¿øGoÿè+þþ.øGoÿè+þþ.‹Ê”U¿øGoÿè+þþ.øGoÿè+þþ.‹Ê•—¯igWÓEºÊcxå©ç‚=oÿÂ;ÿAXðÿñtÂ;ÿAXðÿ³«„¥NJQÝ$¤¬ÎoHÓ§´žY%}ÛÝœœ`rP£°c úqÉI©j2éšÈÓï̹ù_Æ@¥ Nü•}}=h¢r”åÌÂ)EYwŸ<1ay5¥Ö¢#ž)"y2¬:Œ„ÅCÅG$Òød2ª£ù–Ò° @ÁÔÿ/Jó/hÚ,¾#Ôd¹¾ÔípæA²m<ã/œVgö‡çÿTÿÀhÿøºëŒò´—4Ýÿ¯#™â ®c?<D£í6£Î`Ò´”#9 ì*í¿Å_ \·ú4ÑÊTŽc²˜à’HéäýkÆàðn™u– u‰Œ‚–±žäØÿ“WôÿŦ¥³ºÖ˜D˶Ú3»a#'÷2Ýø4å<¶ÞìåëÈkç¨ÂÒ𜰳‰ x¡À,,%*™Î9òøÏ?­F>*ø4(A= QÈQc.õÏÐʼålÖT¹d¾ÕXÜâ 1mo”ó8á‰þX¦6î]œ^jÎ [8˜ŽŸž8öéÅgí0?Ìÿ¯}b=Ï@<.-’IÅ”£$‚ü³ô$~4Ÿð¶|…i³Â }ŠNsû¾™æ¼¾û@³Õ.Uîï5fE˜Ã[Çó!n6æO›,ÞùÍSŸÂ:U´"i¦Ö#Œ;ZFÈÈç}j§–[YËúù ë1îz×ü-_ïGÙ‡B °²”GL.œŸ|y,Vñ½¤’V4[I'Œ  9õã?Ø^ÿŸýSÿ£ÿâêÖ›£hqjvÒA{¨´«*”[ RsÆH~”¥S,·»7ëÈ* Úèö«¯éÖZ•ÔCó¥ŽRd“ËŒå™A$9èqQØ™Öc¡I½ e;cà8ÝŽ€W;ªÿÈÁ©ÿ×qÿ -V®$thñ½’ïÆ€Fõ ØŠ˜€üÝ ãk@ƒ@m£ òâã’xù½Ïç\•ÀìÇ–®¥_Cv$ƒG99?ÅëÍE/,'R²h2F ÈÈ<á¿Ù•r”R®9²Q…ÐX1=3ŸïR¯ŽíPšˆmH‡BtoPá\…Ö/l©;aXÇ#ŒuÝéÅ*øÚÅ¢è ’vˆâÆO^7w®JŠêÿá3ÓÍ»AÿûyMœ¯—9Ïû^çó§Çã›8¹M ÁÁ\ùqt9ÈûÝ9<{×#EvãÛiCvÿz8þÍQÂg§›vƒþöò›9_.,çý¯sù×)EugÆ– qçAs,CÛ"ùztù½…]ØùÝä?þ*¸z(¹ÿ…˜ßô ºÿÈüUð³þ·_ùÿŠ®Šîáf7ýn¿òÿGü,Æÿ m×þCÿ⫆¢€;ŸøYÿ@Û¯ü‡ÿÅQÿ 1¿èuÿÿøªá¨ çþcÐ6ëÿ!ÿñTÂÌoúÝä?þ*¸j(¹ÿ…˜ßô ºÿÈüU'ü,Æÿ m×þCÿ⫇¢€:Sâ(5MI¶Ú–f™>S$aÜ1À9ÇJ+Lÿ­ŸýwOýQE€µiðóO×#]BóR¹Žk•óå!v)+¸óŸJ®~øiL«ýµx^Û* 3º?œ.Xg¼Ò½SÂvðŸ é’“y¶\¶Ñ“Æ:ý)¶ÓÚB’LÚm¼$ˆ¡76ÜñÓyÁúTû8v3öTßÙGšÃà­Ö'O^B´ÛœGœ• Î:†òsèkjÏáD3CäZýà‹"nˆp#Ø®ÃI{MY˜¶‹ 1„ûذÙ$€6• õî+ UT@ˆ¡UF =œ{Ùñækðz%ÆÝ~ìa‹ŒGüD`Ÿ½×Rÿ¡LÈÃ{×?s¿ýõî:ôÊ(ä`öpìyø5nÎë·E€/Èþ/P?*Gø3m$b7×.YE1‚þ=^¡EÎ…ì¡ÙT~éàÈ^oûò?ư_Àf›®Ãl/.å’9àÏú1T*òª?+žs޵îg¥pš½…¼wñÌ«'™öûs“3‘“2v'¥'N  *4ÿ•&«ÿ!ýOþ»ýjµYÕä?©ÿ×qÿ -V­ ·ìí­Æo*é s+¸ØŽÁˆ°k ñg‰u? xsBŸJuŽâ[©P9# íõ¤ÀèÞ[x¯Ö ˜&XÄ…d¸pv’@=}E9ÒMû<<ŒUŠœ\¿Qñ¯#Õ~"øŽÛSÝ\YÝÜ´@yÈ\€ ¶9óTÿáhë¡™„vۜ厓ïóQ`=£u¶ÆøFÈUûÄÍ'ZŠKÍ: …ô(Àq¸¤¿JñÃñG]*TÇm‚0GÏÈéýêc|KÖ(k{F 02¯Àÿ¾¨°Çý£¥ÿÐ?üz?´t¿úGÿ^5ÿ #VÿŸ[/ûåÿøª?ádjßóëeÿ|¿ÿE€ö_í/þ€‘ÿàCÑý£¥ÿÐ?üzñ¯øY·üúÙß/ÿÅQÿ #VÿŸ[/ûåÿøª,²ÿhéôÿí/þ€‘ÿàC×ÂÈÕ¿çÖËþùþ*øY·üúÙß/ÿÅQ`=—ûGKÿ $øôhéôÿ¼kþF­ÿ>¶_÷ËÿñTÂÈÕ¿çÖËþùþ*‹ì¿Ú:_ý#ÿÀ‡£ûGKÿ $øõã_ð²5oùõ²ÿ¾_ÿŠ£þF­ÿ>¶_÷ËÿñTXeþÑÒÿè þ=Ú:_ý#ÿÀ‡¯ÿ…‘«Ï­—ýòÿüUð²5oùõ²ÿ¾_ÿŠ¢À{/öŽ—ÿ@Hÿð!èþÑÒÿè þ=x×ü,[þ}l¿ï—ÿâ¨ÿ…‘«Ï­—ýòÿüUÙ´t¿úGÿZÚ]†©lÓ¦•a\¦âCØë^ ÿ VÿŸ[/ûåÿøª¹/Ä-piQyšmŒ–m!`e¶.žf1Á'ÀªPrM®€{MÀÒmQÞm,a]×÷Fy˜í‘Ö‰¿±m–#sc FiZ(‡™3oem¸“Øu C^'/Å}~e*ÑڀŋmW\îÆìáº)“üQÖ®D~u¦Ÿ'–Y“|$í%ƒ9àä}ªl3טB¾(²[xD1 ì O>cryì(¬¿êê·ôáD³Á0AŸ6J)ˆöOÿÈ£¥׺ÿ*Ôº2‹g0ŒÈÊ+/Â?ò(é_õî¿Ê¶¨îõX-€ŽÔÉ+#$nÃ|»s÷xålãµU—X× p³à”-äîØÉò+-¸‚rYz€ýuux®æ³Ûg*G&àI|ã@F:ñ/øOR¿ñn£pš¡w+˜JÜÇxÈ¢‘Ôg}9­)AMÙ»)Yh{–«>¥,VPAl™Û8¸Ý¿è1Æ~½«a$I>ãú×Ì/àQÚEÿ„STT, 2ÀAæÈûÞ…Ÿcëÿ ôYôM+U‚[+›HÞ÷|+p›Y—b àöÈ5¥J1„n¥rc6ݬz Q\æ\nµÿ1×õ·þŽJì«Ö¿ãæ/úþ¶ÿÑÉIwªÿÈSÿ®ãÿ@Z­Vu_ùêõÜè U©ˆ+âa¾b¬Ê·s® ­êÎñ¹q£xe£Îõ¹¹#ìóŽ=}¨Ê|OyöÝ[y{‡eM¬n+çq<€­cV–·‘z‘*‹89î{ç©5›@Q@Q@Q@Q@Q@Q@Q@Q@\žêVÓ­íNÏ)Iqò.rNÍŒúqžÃÒ©Žµv3hÖèg[œ¯@6õ÷­a5M>«õEBî×·©Jнÿ¿ú{ü–¡a?5²Ìcæ._°R¿CIÑåWæOÑžÝàÏøõðçýzÁÿ£d¢ǯ‡?ëÖý%F'·øGþE+þ½×ùVÕbøGþE+þ½×ùVÕfkvÉwf±=È·ùÁÆ{ð3Y÷º|hðÞK«ÇºÂ°ˆ¥Ç‘'|‘‘’zõì:ÖÆ¡kÕ¾Ù!Hl?PAëVÒt©ï-þÙ4ûÄk “àã¹ëÒ€%‡A‘b‚HuP*' ¤.1óz©n¸%bA…|?ª­¦Y"èÄåòÉÜsž¥²oÌõ¦\éÞ¸’å¦Ôv<®âUûPO˜1Ç8Ïê0*}:]J¸Å¾¡»!C‰C…‰%ˆéËc&€‡©¬‘4ºÔÌ©!fUç\ä –ãŒþ¾IÙ±·kK {v‘¤h£T.Ä’ØÉÉ'õ¤·¿´º [ÜÃ.A#Ë7àô÷«4W­ÇÌ_õýmÿ£’»Ò¹yôa> %–úí•nQØ*á€û¹Æ@ïIeªÿÈSÿ®ãÿ@Z­Vu_ùêõÜè U©ˆ+3ÇE‡áŸ0¦êáxMç•ÀÀî?pzVdøú9%ð÷†ãŠU‰ÚæàdÞ>ïB0rOÆ€<³\„¾½, (“ 0XÄj;($;öª×þ›Cÿ}ÕéË®© —bLyPc•8ù ëÇ\ç½mK&”šVš÷÷ñNð’~ÊŠCry$‘Í$›vA)ÆNI»»iés–û/ý6‡þû£ì¿ôÚûî·þÓáßúk÷î?þ*´xwþ‚ßýûÿЧË.äûjÊþïø&Ùé´?÷Ý'Ùé´?÷Ýuúü#×zͬ"ÿTbÏÂÏlcèpOòª2ÙX•âETì1#ñâŸ$­r~³K›•§÷3žû/ý6‡þû£ì¿ôÚûî·¾ÃiÿC4÷ÃQöOú£ÿ¾ŽIë|þæa}—þ›Cÿ}Ò}—þ›Cÿ}×g?‡foZKi©Å,<¬$än]±àÏNx÷5—ÿö³ÿ?ÿ߯ÿ &… Vj÷þ‘ö_úmý÷Kö_úmý÷[ßðk?óùýüoð«:w‡u3©[ ‹È¼Ÿ5wáÉÈϦ9¥É1¼M¯ëï9²ÿÓhïºO²ÿÓhïºêµM&ÞÓT¸†_E 'Ë NÐyƒèjŸØm?èfþøj|“BŽ*„’jÿs0~ËÿM¡ÿ¾èû/ý6‡þû­ï°ÚÐÍýðÕz;m "inu»‰eA›e¹ À Ž?ÔrH&Šèþæreÿ¦Ðÿßt}—þ›Cÿ}ÖÿÚ<;ÿA oþýÇÿÅQöÿÐC[ÿ¿qÿñT¹eܯmåqö_úmý÷VæžtÑ’Ì:˜Vmí‡ÎXƒŽ;ó~$Ö¯Ú<;Ÿùk÷î?þ*ªø“íQÂÎmÕá1‡<;Òi¢á8M´“_# ®E¨Í›5ŠªùR°f$¶r÷ÇoOä1NŠb=ÛÁŸñëáÏúõƒÿFÉE ÿ_׬ú6J(Ûü#ÿ"Ž•ÿ^ëü«j±|#ÿ"Ž•ÿ^ëü«j€#ŸýKTÁ´NÙÎppÄ'œuüjyÿÔ·OÆ›'Hº}ïèhtÒ[T¹·¹±F…ÝÝY—æ Ìzc×§5Mµ B%,žGŒ6Q $ýÜ‘“Àé·¨J×kÉãÖnì24Ia"G÷þRpzäÓõâ©É­\é‡î ;Ë;Nú¨=xéœ^(±k—$å#0Ì¿,а³1 àŽ3¸äã>¾õ»a}£l·n11 B§ƒƒÁç¨5‘.³4z îwB@1ÇòÈzOÓ>àŒdñZÚuË]Z,­i%©$þêA†8ä{ã4hô5”ßëÏûÿÖµOCYMþ¼ÿ¿ýi0<Uÿþ§ÿ]Çþ€µZ¬ê¿òÔÿë¸ÿЫS¬Ïº†ËnÛö‹Ûvd œýÿ—§­i×9ñWþDÍþ¾§þB€<êöY&Õ!’PÚ2JÆêÈ>÷B¤ýNyÉ5cP;m4†IlFåunƱìÿãé~‡ù×ÔãÇJÿ¯'þmUOâ }Ÿ_Ñ•¤´»y¢ŒË»`$uöZO°ßÿÏ?ü—?üMn´‡±³7p³M±÷$?òÕñ÷x¨üÿϹÿ¾g­ä¥}?SžX«I®W÷Á&ðU•ÒøÇL3B ~o9€ŽÇ¹ZÁ67Ùâ/ü—?üMv^‹F_éæÚ³ Éx;O÷¸üë ðþãþŽj\‹çßÈåŽ)ýfO•ü1èûËÌÆ6ã¬XÏý;Ÿþ&“ì7ÿóËÿ%Ïÿ]f¯‚~ź8µLnY}ý?¯5™äxþ}Ïýó5)FIÛüÍárWåwü{›+“à;!h¿›'È9ÆÄí·Ûô¬°ßÿÏ?ü—?üMv·hßð…Yƒ òì»F%ûÛW>þ•…äxþ}Ïýó59©]kù˜a±MF^ëøŸGÝù˜æÃPb#¿6çÿ‰«ú•àñ›æE”ûT[³é¸³[úì:=› ö8€È—¦8éíëÍWÑ`І¹`b€‰Ì{NÙºîëÅ(ó]?ó*x×:-ò½ŸOø&F»cx|A©yqŸj—n =7ök?ì7ÿóËÿ%Ïÿ]>µ„uËó,ÈndÜvÍ×qÏN*‘áÿù÷?÷ÌÔIJï_̪8·ìãî½—Gþf9°¿b#ënøšÙ†ÎèxBèy#Ì7hsäãiÿgßõ­MrÍiç@I±mâ_»·Ž”èaÑá¸å}¥r1/\~t¡ÌÕÿ̉ãáÊ÷]?àœØoÿç—þKŸþ&—ì7ÿóÏÿ%Ïÿ[G‡ÿçÜÿß3Qäxþ}Ïýó5—ÌèúÛþW÷?ó1§â³hæE‚IýÞÒÉŽÀ÷?\ñBªjÚ‚¨D±a°Ôþ) BQ"! ;AÎqåÅëQx¯þC—ýv‹ÿ@5ºÒŸ?,»Å¿Èçh¢ŠÌ£Ý¼ÿ¾ÿ¯X?ôl”QàÏøõðçýzÁÿ£d¢€=¿Â?ò(é_õî¿Ê¶«Â?ò(é_õî¿Ê¶¨9ÿÔµ6N‘tûßÐÓ§ÿRßÖ£•Õ|YA-À'ØÐ:šêó”Tk`€Æ¤€IÚÝO\g¯µU’ãÄÒyˆ¶Vꤒ‡ÊppXޏõôç­\m>÷ûR{¨ï £ TŒœª¤gn9䃌ö÷ªo§x†_1[WŒE #hP>R(=qϼt Ëqâ8¼ä·±¶”)"'–]¥€î@õôç<Íjiïy%ªµôQÅ9'(‡ ñÎyâ³&°ñfÚ¬1¡'Êò täõô9ÏLóœV„WPÚªÞÜ çÉ,á@xÀvÅY= e7úóþÿõ­SÐÖS¯?ïÿZLÕä?©ÿ×qÿ -V«:¯ü‡õ?úî?ôªÔÀ+œø«ÿ"fÿ_Sÿ!]sŸäLÐ?ëêä(Êlÿãå~‡ùÛ¿†W°ÒY#vcq¤÷jijÿ•úäknþYÃI #¨ûœ#»USøÅ;Ú6ïú3r#­&f¶ºq’ †óåŒÿ­~¡\Ò“ÌñýOþ\ñÚ¬eÓþÅiö›”Yv>á$Ó)ÿXøûŠGLT~nÿ?vÿøuÿÆë¦\©ÿ_æy“äýÞ¯¿ù'†\>$²:iŽçs}¦gdzHAüEd™Õ_F“J:倎êÿhh7$“¸zÇΦŸ*åùtÿ‚._öwîô}ÿÌ·«I¯ÿlßyZaxþÑ&Æû\ã#qÁÀøU?3Äô ?øqÿÇiu™4¡®_ù—PûD›¹¹ÇÒ<~UGÍÑÿçîßÿ®¿øÝ98ÝêiF»»Ñwÿ3{W“\[y:w˜>Íâ.f\6ÞG |Rk¿ðÏ4‰¾Ð¸OµMÈÇ\ù™ýj–·&˜&µó.bSöX±º{ÆÞ>êך|2iŸð‹Ü´Ãå}¥r~ÑqŒã×fJšN*+ÐË—÷q÷z®ÿæUódô4¤¥Ê½Õ÷¿ò5'¾˜xBÒMÖ»äƒþ?À_º¿ÅÜûV7ö•Ï÷ì¿ðhµ»=üƒÂv²mN »y¿k‹'å^3Óð¬í9¿èa¸ÿÀèj¦ç§§õÐÏ¥ÊýÕ»êûúµ«ë˜ÚËþ=5¤l _ÝÇ_¯µA¤ê¬Ø©k2 Ä`ãQ ~ðè;ý*Ö±~ñ½¦Ýrx÷ZÆÄ-ÔK“޼õÏ\Ž*'Q•õ‹%:õĀ΃a¼„†ù‡šŠ|Ë•z ÒöÝ[>¯üˆõmBá5›å f¸ ê!OÞ=Go¥SþÒ¹þý—þ ´5mFTÖ/Tk×;‚òæ<`ò*Ÿöœßô0Üàt4äçwý~†”T½œ}Õ²êÿÈ»¬_\G5°ÐfÞ3ó_„ç¨÷§Å9ðÜïºÓ"áGü„:{úRê×òG-¾Ýnx·Œà]D»¸ëϯ­>-BSáÙŸûnrEÂ3íqdqÓ=*isrüŒìýœ}ÕºêÿÈÇþÒ¹þý—þ í+ŸïÙàÑj_í9¿èa¸ÿÀèi?´æÿ¡†ãÿ¡§yÿ_ðÇE¥ü«ïäcø¸»j× êªæ(‰ r?ÕÅÐ÷ªþ+ÿÆ¥ÿ]¢ÿÐ ^ñMì©©ÎRe˜yQbFDbß»‹’qÏZ£âÂ[YÔ‰êf‹ÿ@5•]‘êa¯Ë ÿ/ùíQPl{·ƒ?ã×ßõëþ’Š<ÿ¾ÿ¯X?ôl”P·øGþE+þ½×ùVÕyæ‘¯ê ¥[GiŒp¤Cb=ãUÇq°ÿ:¼¾ ÖTÓˆ# ‹Öäc?óγub·1xŠKG#¥Ö/…Ÿš!2å‚íüñY×ZŲÝà ¶JÎð¬¢yF"B„ÉŒþ¸ãšÊ—_ÕÒ’H´ñÎOÛ·ý³¥ö°sû­?†ÚÓ¯L«ëGµ†÷¬Rþbq­i4O.—g.¡œŒžqÓ’œr2pi¶ºö¥ÿÙŠ@$æõº¿ò϶i{xwˆ¤ö‘zÏÅ:*CçÚÙÈ€»‰2@¡õ玎Æïí¶Ë7–Ñä°ØÄ$s‚}+’‹ZÕÎ+};‘œ-Ûzúg銗û__òíeÿOÿÆé{z}Ãë4¿˜ìJäïuĶÕ~Æ-çi<ØsáäTûÝ23œuâ™ý¯¯ÿϵ—þ¿ÿ¬ø¬®gÔášâÎ"Lë!?ÚS¸0 „+´àòJ=½7³ˆ¤Ý”Ž'Uÿþ§ÿ]Çþ€µZ¬ê¿òÔÿë¸ÿЫVÆÁ\çÅ_ù4úúŸù èëœø«ÿ"fÿ_Sÿ!@Sgÿ+ô?ÈÖõì &Ÿ¤±ž$ÿCq†'=[Ú°lÿãå~‡ùÙ¾'ìú(Ú­›R0ÙÁËNiÁ¥+±I7È—Ñ-µ®í2ÏðË…Þf/›÷ýô'Ûð§ýŒÿÏ”_ù/ÿÆ«!o,­c*2¨x:rÌY›‚Ç?ÅÓëIöæþâàš?ñ­z]ÿ?ò9§—b9›Ðêü?ƒ^´•í¢U‰, ÆçÊ/ÎßÿV?Û›û‰ÿ‚hÿÆ·7÷ÿÑÿ?mK¿çþFÿÙÕü…ñU²¶«>e‚ÝEò~_ÝÅÇ•Pñ`Ƶ© ƒûè¹î_ܵÅÜ’ã*ËxÊ1!:c)Iâ¿ù j_õÚ/ýÖu%%ÊuS¥:N0žê?äs´QEIG»x3þ=|9ÿ^°èÙ(£ÁŸñëáÏúõƒÿFÉEtV‹k<6PÊÒo6ઠè¥zóëÛÖ®]iöðÍpSí2¹P‰µ×.¡Àù{ôþá÷¨´÷¸û-˜†aXn2ƒ…' ß)8ü·f¬Éu¬Æ¬ÍwóaÚÇÞ'ÿW'¥LKG–i+uð_.[hvóÙÆÆ[„ ÆR¹_¼H?Ýç•ð©åÐ!š_1î®wdž6¹ÏðûŸÎ£š+»“o¼1ÜÇ´€dœmè1ÁÇùæ¡Y[‚_Q!ÞBR!æ&2vìýÎ Î2yàúÅkßœÎÍõ4­´›[m?ìJ¡ô'óÛé‹d#X¼·òÕJ268Ïõýk2Ý59dòmµt>[>ýÉ»øºr9ÇN¿ˆÜ1¥m¡ êfe„çp$ $‚0£§O׎•„Ü›mËV&šê>-.Òç¼Ea+œŸ˜ã?78ÿίV"izœq:6¡æƒU™ °\nÜ:ô “O:~©öƒP;¤1YåEW ûóßƒê µ~¢jûÈØ© ÿˆ¿ßγ, ½Šwk«(9Æ=3ÀÆ1Ï=óíZpÇÄ_ïçDU¤‚ ÓG™j¿òÔÿë¸ÿЫUWþCúŸýwúÕjöVÇÐsŸäLÐ?ëêä+£®sâ¯ü‰šý}Oü…0<¦Ïþ>Wè‘«—¤þ飊%l2y#ÔÕ;?øù_¡þF–ïýb×4ÿÐE/´]“†§ [Orú%——Û-I‘¦÷Où›¯;Ûk@c9òb>Ÿì{þ¢¢µµûN‡d~Ä×;b^EÏ•·>Ùÿ>´0òF‹(8ÎF¥žëÏÞ÷ý}z˜DÜàÍŽ.iy~KÏô-#_ÆèÉk®†çÉ‹×|”'ÛD«‹Ms=ÔÅéŸîT_Ùsþ$7Ÿú Žy?íqþ}iSHýàÿ‰øô:ôϯãúVé+nyÞÓÏòÿä=nk“rëw޾cg쨘?Å•?‡ãY ÞHµÖÎ= ‹ŽŸì{ÕÝrÓí7N~ÄnJÈÜ‹Ÿ+nO¦Fìãô÷¬õÒ‹+gC¸8lý¥ŒtÿkŸþ½c…³¤ŽìÆ\¸†½?%æ‰÷ßXþË®m'§“<žŸ'Öšz%\Zk}ú¨³ÿ TÙ§üHn9?ôòÚãüúÐ4‘çý‡0èpu!éŸïž•µ—‘¦»þ_ü‘¯¬=Ã\íŽ+÷S,™‘!ŽyÊž¦k1õpëi®n ù1qÓýн­Y››µ"ÂK¬K %.|¬qœu_Ú4Ÿì+¯ö˜õÿç­a…³¤ŽÜÆ\¸‰/OÉy¢IøÆÓ[,Ä’L1sÏû”‘µïš¸´Ö²é_üGµFtŒÿ‰üžú˜ç“þ×çÖ„ÒGš?âI'n?´‡§ûßç¥n’·CTÓþÿ’55¹¨ŽéÌ“?d‰÷Êžxª!ïü’¿e×6ç?êbÇoö*Íý—ÚÙOöt—x’^RïÉÇê3ëT‘òý…qߟí1ê=ÿÏZæÁYÑÏG8’Ž:¢]ü»zŽ&ôþ‰­sž±EÏ?îS£{Ñ*ÿ¢ëC‘ÿ,¢÷ÿcÚ¢:HÜŸñ#—œðu1Ï?ïqþ}hM/Œh²Ÿó™þ÷ùé]IDó¹ÿ­?ù#Å—²Ç¯ÌÀyþ(ž§ÔVf¥s-àšâvÝ,†fÀ;¥[ñ‡üŒžæ³®?ãÕ¿íþ€kÀƒ÷Qõ˜ÅW‘FŠ(­3ݼÿ¾ÿ¯X?ôl”QàÏøõðçýzÁÿ£d¢€:;W…tØ|å`¥„d ÇhçI\=jôº•œPF%ˆL"cÛ!ÎÖ qùž˜ÆpXXjWM›Zܬp´ — žô8ü+n[ÞE•/"©ã à7l÷$ø sÕ­IF*Jÿ3Ü—31›X··š)Œ¤ŒmfYw Î89#>ã,¶W·pBlNî 7vÌñïøôØÓín-¢u¹¼k§fÎâ¡qÇ@*åsNµYCñfnK¡‰i/“s;%›>fÀ7|Ì9ÆOãðê*y5Ų:@wù…$&6G÷ˆêoÓ­j`QŠåæO œ“whdNd‰£2‚TõÔú(©$*H?ãâ/÷Çó¨êH?ãâ/÷Çóª‡ÄŠ‡Æ½O2Õä?©ÿ×qÿ -V«:¯ü‡õ?úî?ôªÕí-¡ ç>*ÿÈ™ ×ÔÿÈWG\çÅ_ù4úúŸù `yE³¬s«¾vޏ54ÆÒWM(ªÿª€ÞªtR±JVV4Åù©öÉvª…È^üi>ÛÿOrÿß…ÿÍ¢„­±£¯7»ü_ùš?móõ/ýø_ñ¥Øÿ—¹ïÂÿfÑE¼Åí¥ý\ÔmIŸï^JxÇú…éùÓ>Ú?çê_ûð¿ãYÔP•¶¯7«‹ÿ3Gí£þ~¥ÿ¿ þ4¢ûò÷/ýø_ñ¬Ú(·˜½´¿«š¨³u¼”ñõ Óó¦}´ÏÔŸ÷áƳ¨¡+l7^oVÿþfÛGüýKÿ~üiEö?åî_ûð¿ãY´Qo1{iW5Qfëy)ãê§çLûhÿŸ©?ïÂÿgQBVØn¼Û»‹ÿ3Gí£þ~åÿ¿ þ4¢ûò÷/ýø_ñªö¶ÉqìÒ2×pù2‚sÇOzÓ¶ðú]ß-´W,7L#Üñcå8ä|Ü‘žŸNh·˜½´¿«™óˡ–æV`Ï’:ßT—3@Љ¤f>_Þ@>ê‘ê}jæ“¢j2¢ÏåÉç¬n ƒ…9ä|Ù'Ž˜üiaÑ>Ñdœ‰ÿVèæÚ[®p y>Ü`æ—(FîßSŠ×¹Ñͼrï›Í†0 íÌMÀäž=9úûP<9|Ñ™ *6`‰G;þî>¼~b¨Ìõÿǯ‡?ëÖý%x3þ=|9ÿ^°èÙ( ÷NÖtm3N·±»Ö´è® @’#\¨*è5kþÐLÿÀ•ÿó½_áö£¬^^jéñyó4› bW'8éT¿áS_ÐgNÿǿ¼ùP»nÇBÊòÙk*Žïúìzü$þÿ þ™ÿ+þ4ÂOáïúiŸø¿ã^imð»Pµ›ÍM_LfÚˇ G*GB1Þ¶$ðn¦ÛÙ/4Xårw:+88à{Nzа˪3žW—§îÍ¿ëÐìÿá'ð÷ýôÏü _ñ£þÐLÿÀ•ÿá%ð¢æÝãÔ4ˆe†A xÃ.qÐpýjTð ìvëÝèÅÀ »©br ÊõÈ'ñǽ?«.ÂþÌËÿ™ÿ_#ºÿ„ŸÃßôÓ?ð%ÆøIü=ÿAý3ÿWükƒÀ¤1EjZ<ËmùÈÏÁ9î;sÓÔÕ+¯…·÷W2Num1 œí@@€¤ðË¢*9^\Þ³×Èô¿øIü=ÿAý3ÿWüiðøŸÃâxÈ×4æ!Ú— ÄóØMy_ü*kïú éßø÷øTö_ omo`¸:¾žÂ7 @,3ƒô¢8{4ì[Êòثƣºþ»Ú¯ü‡õ?úî?ôªÕÓ]xqnµ«¯íO&ð¸Î>P?¥Gÿ²ÿÐNÊ»îŒv›¨Åc«iÖÖ–‘ ì6ÎÏk©" ·_¹]'ü"ËÿA8?*?á_ú ÁùQt ÿ·†?èU·ÿÁ•Åð‹xcþ…[ü\Wsÿ²ÿÐNÊøE—þ‚p~T]ÃÂ-áúmÿðeqGü"Þÿ¡VßÿWÜÿÂ,¿ôƒò£þeÿ œ•@pßð‹xcþ…[ü\Qÿ·†?èU·ÿÁ•Åw?ð‹/ýàü¨ÿ„Yè'åEÐ7ü"Þÿ¡VßÿWÂ-áúmÿðeq]Ïü"ËÿA8?*?á_ú ÁùQt ÿ·†?èU·ÿÁ•Åð‹xcþ…[ü\Wsÿ²ÿÐNÊøE—þ‚p~T]ÃÂ-áúmÿðeqGü"Þÿ¡VßÿWÜÿÂ,¿ôƒò£þeÿ œ•@pßð‹xcþ…[ü\Qÿ·†?èU·ÿÁ•Åw?ð‹/ýàü¨ÿ„Yè'åEÐ7ü"Þÿ¡VßÿWÂ-áúmÿðeq]Ïü"ËÿA8?*?á_ú ÁùQt‡¼= ºÅᨑd\.©pCëOmBtØÞV]ÛöVäÞ½z×eÿ²ÿÐNÊøE—þ‚p~T]ÅÂ=á튟ðE±Nå_íKŒê?!JÚ€èü8ŒŠ»BVà€½q×§ò®Óþeÿ œ•ð‹/ýàü¨ºŠ_øy@ ᨀ cT¸àއê*a¥i43Æÿ‰½ÏoƺÿøE—þ‚p~TÂ,¿ôƒò¢è =&8¢ÔôèííRÖLPÇ HÒPäýæçøÑÙøhC{¿Ú¿—"¾Ð¼œÑEÐW¶ºÃE1Óä@Xa\aNæ%ºg¦Þÿ…=b×6ï²óW)'ñwäŸÃõ¢ŠÜÇâ5IšÝ-²|µnãSzQESzQå7¥På7¥SzQESzQå7¥På7¥SzQESzQå7¥På7¥SzQESzQå7¥På7¥SzQESzQå7¥På7¥SzQESzQå7¥På7¥SzQESzQå7¥På7¥SzQESzQå7¥PeˆlÄÿŸóøsEPÿÙfox-1.6.49/doc/screenshots/iims2.png0000644000175000017500000010231211637250333014170 00000000000000‰PNG  IHDR¾\Qçïk IDATxœìÝ|Tå7üÏuÎäâÏ ƒ(…ڥ˲5DiÔ ¥–²„ªè ²¶@o¢!ö~66M›>[·@ë&ñÇRhK¨K»”´6ÁBÚ²î²í‚Œ f  „ (ÌÌ9×ýÇ™ßs&™„„É$Ÿ÷+µ3g®sëœ É7ßù^çßxl¡t]J©K‰úè9!TÒ—ª€!3ª@– ‹ ¿‹*TUj~ŠÐ áW@D)£¦zD£˜ð¦zD£•Œüõ§ZÔ«=ÆÿyLxýÈÔÀ« Ó/?à‡O@†, |='oëxLŠH@JiRÿ§¾ óæ[ÅØ1Wg+YÙ0F…%WI c4P- $u=áKD4Ôzù·IDC¿‰R(æ7 ®CóCµ„ÿ›È%_ì–ó=pö>:ÿ‰#ØŒóOûh¹”R]×uÈÿï£oŠn²\5ÖŸ¡e(@O7²²qIC–^ ³^#š÷@¦%е7ñ8ˆˆˆˆˆ®0ËlQÃOýÝÁÙ±!«â‡n ?íé‰zµ'¸£PEÖ_Mïé¼x¸ý_§žX,,ò;ü\÷ yñœ/[Az|»+¡X 2,–)U©°(²GÊ,!-²„„~0ñEDD£Žî•©Ñ(¥d Ý+e–T¥¢‰ð@â’&|R¨>hšî³H©Á§"Cƒ"C ¥ «ý:, ¤»EËþKÈGoþ·)_²H)ÀwW}B^ø8°§%E꺮ø• ¿Oƒ@±ð*`ÁHCûE÷ ¿Žæµèú""¢Q€y#¢”é‚@Ms êY÷€.uHtKRÓ¡K¸(H/ ƒA¶ñ@“„æ—¿ñª@wã˜WAà3»1!ⲯ 윕¢gBUd¨xDÉQ†]—¾`u¶Ÿ¥^D)Ä?\‰ˆhTŠŸm KhR‰ŒÈðoˈJ#VöûÀ/¡'þz%| ½Í';pÝ!.ʬ«LG"‚C‘ðÅl”š.¤štèÁAëüÄŠˆˆˆh”Êò‰ÂŒê‡n˜8ÎÒwë_Ùxúå=>Ÿ—ÕɆÓ/¿ÙíÓü2CÑž¸'«úÑ܉9}ïÙÉwÛ^þÅ_|š„×áC÷Eø/°à|®Í‹koÞ{(\€`Ä,¯A³ÆÐ™(E$?ö!Jþ$ÿFà/ýôdà”º(^ô˜° ÇcìX%Û¢_{`ldîÜ,ä¤]ŸÚ²íg‹ýýñN‰'NB2ÍzDn<”iöóób""•:dÓ¤gz&Žç.ȳÐãƒ×'u~š)áÓ¤¦Á«¡Ç+/ö࣋ڹsç®Áñëgç}åÄ tRÖ@¾~Ë™ï=«ŽŸ(T‹þñ9í£³ÒÛ¯Wê:4¿Ô4@Â&ý^éí‘Ýý>:{î܉Œk>ýòóü3¼>ø\<å N 'Àu% ÇÍ€’ßÿ¡åæÉBU¡Z„%º&u ¿OJUR*RHH¡@ ´Q,Ÿì˜xc&dfÀ§A¿Ê–K‘P2¡ h™ðªÈT¡+P°eÛÏæÌ™SöÄãO”ýƒq«VW=üWþW§.•u6°Tƒ(µø·+Q ñ QÐGåù‹°¨òb¼Ôƒ/¼>éõÃç‡Ï/5^¿”€×ŸŸ&5ŠÕ¸5…b„N´Àš‚òÂGúÇç…Å"»/ÊžK²§Gz½Òç•>Ÿôû¤®IŸÒç…æ“~ŸÔ4(Š¢ª ³@ÉDp¥Asþyñ¢¿Ï]›Úrôð»ƒ~e‰ˆˆˆh„ñúqö‚T\èÆÅnôxe^¿ôzÑã—>?züR—ðëÐ)!u©‘aÜGÙ¬“ï=™Õû?óµ ¦HŸWÿø,U^º0ös ÆüõÝ'ŸY ŸW÷y¥¿>Ÿô÷@×oÞòûߨþá¿|GêR(а˜Oü³@¹™ð°@¡¿˜ ÷ÿÝ\¼”ZOvkhOEqŸ [ê_¿ Í}ê£æ¨ícœ?½Áü“ñ-“é-Vñ’ñ»¾`ü _?Uö^¯MG‚1Ο^s4|¦1O‰ˆ(E¸Â.QÏ ÝPx½ðù_^¼~x}ðjð†J–! ‚!¯ß¤“>ùuÕIôùäÅ PÙãó×w˜ð–Ë¿(ý^ø¼Òï•>oþOþÀÕ÷/üð5€€i…îE°`# WÁO𤠠øûE_ŽÙ+&ñ¬¨Šî— ¤X>Ü÷?ÊŸÏø«;#–¿äø²;ûÍŸÚyrþ½Ç[çÍþ­K€¸fVtË8&½EûÜ »¾`q=¿qÞú¿ù‰ì¿ùR÷˜^ºK¨âë×Lì;LOIoQ¦X¬°L¶íÉ>XØ=ø\¶¡þ[ö¥žø01„WŒˆèÊèß´ˆF²Ÿôú øüðkÒ¯Á¯KM‡_—š„_JŸ.B³ýTŠ€.¥„±†ŸI'}Òdt'AÒ×£{½BQ¤Ï×ùõ¥¹ß}ÀÄM?ï(½ºÍoÄÍÚçÛ ¨B(€cÑ@%ºZ6ÐmV°¡)Á *eúô;_\ÿ€§V=38\¨€j&5hB1Òné¾§hrí,_ïsÒ*fÞßµî/ú§J»op7cæ}hï+LOMoѬ+€)YøË9ä]W|sëmؤqè<”WŒˆˆˆ®¸n¯T„Ðu©éÐ$t㿚1]пñXÂ@âUÓN,úv·×+{üðúe¯&{4áÓá×qäWùb:‰(=ÝRQ ëд“ÿ{Ñ„ÿ€¼Æß¼ÿ¿æÜ¼õF›ö/Þ]‡Ô¡Z„ŒÈ<ËL ;ÔUD蜙‰,¡ÖìüsLМ¸ÖY…”ZÄ"¤J‚›C«}5ˆž\íüéµø¯ûgŒJÃ×?,{_¿qÍgÜüüɪ¹?8íøm–ó§×ÚÿëbÃÄ«–Mþë¼ønO°Mx/ÀRÿâ Ë&{Vù¢íÅìò v6öB\?Æ–óâ»=Зܰë 0éíäŹOõ”˜÷¿¯Éh1elÛw¯²<ÿþáä×bÿÎ2beÜsûSÎÕaBÉ, €[¦ŒÇÅ ¸áz³“Í2½tÌà c¸~pÚñ[˜ŒjÊØ¶ïf¶ü»¶ì YÆÆå¸ÆØ1öŠõôõ½ADDDÃ×ÅÙã“Ð%¤”PE‚;!¤€Ô …Ð%`dŠ¥¢Æñ½u@ˆêDvêÝUoT $¤®K!O|mþÄïïpó¿î5Ôñ÷6E‘Rê„„Ðà À5 1€‚Ì«¡d"3B…fTEÈ+‡„jµÍš5pbª,R…ÚK@Pã¾Â±u‚ €=ç??ÿ™Ÿ\=á_[–}÷ãÕ=bíš®ÊV‡ŸP;¯æ‡ÙgŸ¹$ž}cÌÃ;žýö‹cß=¶vMWægjÇÞTûì›½Š—^³l‚·ñáÚ±7Õ>ûʾý毗¯:¹ÀñÖyjÇÎ{qì»§ãú9 ;Ǿ{ ª€ð±x§)»'ËùÓ–áÃÏO«{Sí³‡/-RÞ2ïÍd߸юñµ}÷*ìøý˜ µWÿãaënpÍ:sYfäYÐqö¦}~Þ{·fMðîÞ{÷ÜþÔ¥sPEüÉ&ºtæ?wÝ®/X\u›ÆÞTûì›ÎLÎnÍÎk2*€eÙ?_ø“y¯œ±~á†\:‘Y¸iÞ+g¬_Ю?‡[í?­,öŠëã{ƒ_‰¾ˆˆˆ†ŸÝ^x}ðkÐ%¤ý !„ (€*¤*¤ ]¦¿þà*'¦½uÄubɆE¿OötÃç…æ‡Ô!¥òÄW‹CG9ñð§„"…ŠÐhBú…ôC× Ã‚ ™ þ ȸ6º`C°XH‹.Tþù;ßüæ–m? 5™:íÖI7ÿÅw¾öà?ÞÖñwGŒèYó¿°ýÑIe“à;‰½6öœ~óã¯ýmÿã-t­Mùm†¼Oª>é»÷>ŸÑìÍ=OýêüíCuÈÏÈŸŒ{Çz·V»ºÖ¦üv}û| ³ôǹç_W÷+dÜz ¸&XIr—ï3Ÿñ!3®Ÿ у1NYàþl;°ûŸ7¼‰»|÷~¦n2Uó Lz‹ß7n´ÅŸkÅ…ÆWZp룎ŽwöÏÌþÍ=Ýã‚HÕvðÞîžù+n;¯~h±~pbÅ/qïœñŸ¼åOrªÏ{²ø|¢Kßxõß.:v}ïŒ~çʺ·½Ïß3ÎsäÇ=ŠÉ¨¶Ý àØoÿóÍSS¼Ý×ðü÷k*ýe÷5@æÔ·Íýfçr“ù`ðù¨+ÆpÀúüWEDD4ô|¼~©*BH @¸B„:t]B‡¦ Hø¥Õß Ð['45ºÈ }>ÝïUTB )! LÜžZ5ñÇÿsòËŸ„”R×!!t „î=BºáÍDÖXÈ«a"Š#¤EU¾2wmœ>ýÎȸ¹èú‹n+üg@²Î"CJ/ ¨Áº¡Àb:]Bé«A¢ÆÁÇ׌óY,@Ψ^K°\Àb ï’÷Ùîk,Àm¾{ÆÈ'-ž×ߘ¾âöZ¾óqgÔ_÷ÌÍíÙµÀZ·u'½s+f7Ç,®ŸÈª%4Ó1É|tômhSgûŒÛoßñ¨/QoÑûB=ÊŒ[T`léëU¥WA=s ã§ŸY¦NÀ±–SŽ}~Éô ™ž?y³í¶c¸~êgÔ‰×x¿w²Þ—în“ÆÚuÌÌûü2Ûºc–âÀ©uÍøR6€ØQ}tÈ Ýt›O "'0U]3&šžËi`¬Ùûدo "¢aIãßýD=>ôø *°¨Rˆ`¶X‘ „èÐ !ŒuAt]h2ª`#² ·Nø…ˆêÄ’ ¿ }=ÒÛ#UX,BJyÓ?ÿÜèÿä“÷LxéMã_þÓÿ•P¤Ô4¡CøuÅÈ:gfBöÙë‡P², [£´¨™Lc#n0)çêÿñûÇ?8¥XT¯)B ˘ҨY&ËÈD²YƒèÆ"²·ÀVU*”`â6C ‡Îj8çf4þn’ |ôÛ×þ¨Û¿cæ8à¬ÑòW?Gæ‹?¼iÉÎÇÇý`îŸoûÍ‘‹ïGÂ|Î:pÍÔ;nÄ»jðO‰ØÓŒí-rðÑG9pRi\°éÿùCø:ˆü)"ØRs}ÐÞÐ]ÿoAéÍKÿ¨}ð×mÀäÛTÇõæ'kzt‡Õ¤±óG= ³Æ,ûN‰q× [žúý÷œ2ÕÜ»‚§¨„OW Wúèø›øs™ÙÇ¥Hâƒz!“¸} ®ˆBäõË,* ÄŽj“ûÜù\7¤zp¡¦ _`½j%¾À˜e(² ) ŒxA @ѰÒi±@B¹éÅ×O./d粿Ímø£2öÚÜmïZ0R‡¦ M“þà= Dþåj FÉ™ð \• @€ò=_ùJÖŸ¿õà?~À/¾ó5F²¹bÃæãœ#6ÂÄÀdF(æQË3«2×|®¯c"¶‡;U˜4 6¢qhGU†3ä"z*¡%A³k¦Þ1ïæÚ&¸~êïfþvëŸøå1õß~Õc=Ú™cï­¬7Þ õ—È(™Œùœp}ö¯|ʱ²ë*QÿÝŒ©ÿîuìG;Û[ü¾qGiþ£~¬x\iyÁÊ …Ýw¨m_Åò¯kQ7k»Yµ»tÞ‚ý†ÿÞþËñ¸÷š£°OSšÙÉ&ºtfW&?kÙDûÑ¿ÜQÑi´ÓgUîzK?6/nT·„‚ÝÈË~ìÜ­ûRü¹$LÔ㢔—Ùw""¢¡f$Œ3ÔD7I¤€¡>]ú5è~é7>ºÉ´˜vâׄ© HiÄËÁNøtDu¢*ÆAÒÛ#½=Ò’ˆ‰?ø¥ÑóËRBJ@ž^zç¯þÀø×Oœš÷ EóK¿£`#3 ÒdâàÒUDz,„P!Œ@^]éûtiÆŸ¿…`Ðl0âæ¬ÿ­ù¥"ý $ü¤OEF0Ø5"F£.彺ì¿TöŒqñ ¢Ô"¦™!¦qèB KDPóÑÍ€æíþ†;3–}çÉK€ëWû»«­· t ë§Uù2àdûç¿Þ‰þ²_v/{¢`ç;@§6·JÆô莗ÏË' vî C‹îø‡÷]ÿRðËϯºn_ûƒìi•ѽi ö-Þ׬?üP~ås—î ªö¸þ€ŒÂ¿ ÝeãïnF}®ýÄÚÿÒ¿vÕÁÝ7Ü®]+ÝÀ=·êo5L=Ùæ—ιÅß03îÊüôÖGÿá£7¡¡Ö÷ÇÌF5µ Бù'@Äã÷LÏ%˜«Ž}eÌûˆˆÒŒôs¶Q€×n/,ªŒ_£Ä Iaäu@“¯Á¯AÓL5ídgMv/GŒíÄ’iKŸWötK‹À…7w޽gÞOÞèRú…®Aפ®^|Û[Ž\úÕkÐ5é÷Ãç—ÆÌDõÉ=вáÍ pËŸqóõ¸~ ®Q‘eBœª¯ áý¾å§µO‡†e¤œ3Ë 5Í(+‘„:Îd; Âáuh€ºÿ;mÐçü£77ЃŽ#ÙÛª~"ÐÀß,Ø8Ü›ÏØqÊ—/ͼ €ún}柠—yÇBÝÿÌ÷fxÎ×Bý›…:Q>ýNþäħ¿Ú}Ó;ÙÍN£^@܌޹㪽‚[nT£ûADƒÀÅ”¹ÆŒƒ½éw~Õ{ë8ÄöVà3Û·{lìh£v ö)òÄõÎÙ‡ ^„B5þdoý‹é¥ëeV~¿üÔ×ߦù©'çßû¦sL£Ý8V̨ô ­ÙÍN|ú«Þ[ǯï`üãøkeú>Æ\1 DDéD÷ñ33"/)7>ôñ W‹«Ç ;UBRÐ|Bx!z$¼^?ºýÂë•ÞnMûè¼<åÖßtˆ'õAèä ~Mþkæ{wߨ^wƒsµ’•-T  uÐ…ô Ý+ü=BóÂï…·[z½þïù‹Ú;É/½£‹?†ÏéÃy ç]¼ÿ–ÀÄý˜<ÎEv–"„´¨Fè¬Z¤€*á]§ÜýÙÏþîá’Õ¬ ]j Å-™@úù³#]=°@캻×þÜ‘Ûô|ÑöuXßÜqõ×oŒì‰ˆˆˆz¡m×-øËµc•«³EV,ª4~„W« ¯¯^¯ôy5ý£ó8sHî}@])/¿ñ„@¾¬¾óÙëÔ«¯UÆ\-2³„jŠ€èFH¿¢û y…ß c]nŸ×ïõ»¤¿ó1½+Ń€Ïs>x¡ýO±Óu)¿f¬¡@…ÐeÖÓÚ> «0*ß.TH ª”èÙŽž……³¼ÒÕ¿ÀÜÏîZ5-ñýÓá«¿ü?˜z;ßÓtÁ?\‰ˆ(åNüE›xíùÓç ½èÉP-ŠBêRHE‹jBõIhRøtéׄæ‡ôúÑ}î–9hdøä‰¿h>1Q~x>©fö@µRB © ©©Ð ù„®IÍ'ü~é×ü>yÎqÓ-¡NÂ'¦÷D…ÎÒ§î&¡ItU—PÔà}.{ÊðÝòL²ÎüÍî~ýÆu™›þ%ãÏi‚bÊ—/ýÕmàÛJDDDÉ©ù·žW}âáª?wt~dÉÈBW ëB¨B“Bƒ¢AèRÑ5MÓ¡C•~ß-ã|ÿV÷7_i¼Œ¹ÜNê/:iêþî ?þýSŸû #3Ã"…Ð…]W!!5UjBשkš]S¥îÕ¤>á–{ðo_ùçsÑé€àóðÊ-²»GS-ªô€?CËÒ¡ Õ¨¶öŠQµ-µø%Æ)U xiJgú”Ç{¦„Ÿò=M#šÆYJDD”b/ÿ1º<ô“Â~íuâ/ZÍϺ_þL]ÊËê¤éâËP!ýðãå=*üS~øÆ¡þurF«ÚòñË¿Ðe Ö9Ȩu¾×…Ò,ÀbüÞÍ-+¨f£d5òWr¦w÷JéS…ô ´ˆR†¡3Q qz3QŠø‹ ¿MBhÐuH5ps)¡ëðGTG¦’ý~ø$2,ø(ÏðÅŲF­ó±}Á]Ï^Àõ@g2U!„q =#€ˆàrˆRµ@S¡†‚i³r’äBJDD4jõ0t&J‘ *|fÿ5à¯ÚЋB‡¢@‹H7é:º¨PÕ%Ÿ„ h@f6p•Ñ0º€#S)%ÅרZN%Ø0\¯a<"ü€ˆRGšSÑ•Á_D)£%Zy@0DVÍ6Æ4ȈØZ±;ÏÃb,Ä-‘Õã½nvÎùÓ¾ßh²L"Ѩ•³ô 'NB÷Æ,‘†ÎDDDDDIaèLDDDD””Øû<‡¸œ»¯ä8háCOž9õNè)¯?QJÄDe‘†ÎJþÊÐŒ‡buuºã7.|èÉ+?"""¢ÑlûO^êåÕÞBgðFWW„H|G¿DñÑ•×Gè FoCŒ…DDDDé‚Ó‰ˆˆˆˆ’ÂЙˆˆˆˆ() ‰ˆˆˆˆ’ÂЙˆˆˆˆ() ‰ˆˆˆˆ’ÂЙˆ®œ½5¶œ\[ukÂí[Êrrm9¹¶E[:"_Á1%ÄЙhk­3bÇÀ×ÃMíIïÚgg_u®-'·n¯éjö ´Û~ÙW_¾ŽÚýîm‹;"ç^ooZyArË6'Eú3 óKADD£^ß÷uR9¹¶ÇÀÙ³g¯¿þzã¿ñO_yåÓõöˆFGíþ—ä·Öå,¨šY3©«zv2;Í©vwUõÈ[ûñ·Ü>)?æq ã‚´7-šUµjVÝäÎÊ9WxœDD4Z¥8t`„ÎÇjµÿúÊ+¯ üíM‹fU9ßµ¡­u9 ±âµ$£¢A—“k3Ýžð¯Äü)Àyèx{ûñ§oé§Þ›¹;:+'m)›Y¾ÇhåXײmqÞÞÛü°òuwMAð>Ð"øo!zãúÛ«6@ãüÜF tGŸñ¨ñ/+øÌ8n OG¡Ã¹Çq¬Ðx¢:ˆvGµÑáÆ%9¡Æ—äl,\ÿVýcñtþ¤;€ÐLÎ1z„¡ÁÄ7/üSâ©÷f.Àʉ.E¢wˆFfôF­Ô‡ÎFXÜÖÖf·ÛÏž=ÛÖÖÀxzg_uî’ 1Ûb‚c¢a¯_?yÛ×ì_¼+¿4?½`PŠÖº™å{Œ¿÷ÖØæ—U[Ý5ÕîF«íM‹4F„¶UOo¹k›õG9 ƒÿj:6×üþÞê×Vn\²!QÐÎòK¶u–:6?\´ª¼zóÝõ^+þ^gýñÛüUõ­%5¨›¿áý˜û­Ú·CèšþÑuEŽ¿ `…}N¢s¼@à'¶”Í,œ¸Éq\Òª_C‚KÁ_–Dþ=ºYêzg#ëìt:¿ùÍo&Ê:×ÔÔDï4»¦Ó]Ì~_TΪ™¹U°âµm‹ó`T÷:§­ê¬ßì­±Xyÿlsî/ÅÆÆ oì«)œbÄÜ(/Ê)öw¤cï‘F+Ÿ2¢Ò¼ÇªK€}½!øMdþ82}åöIùÀñà³½o4†F³áa—öû‚£2=GÜÞ#ß: Ø>qÓã/)°ï×É „ˆˆF EÿR6€ÇãñxÖµtÄô3P¡?\»:Ý;V\~ýá¨ÝÿV­ÀÆ%‘/÷ûyI‰ˆhJ}èlµZ­Vëõ×_úoüÓdûÊ/ÙøÅÙ²Þgyuxö½£v§{ÿºB8«žŽ …ƒŸóvuº»^/5^mßR6cø×0SÚ4œÍ¹¿À†7ö!A~7ß: €³üG{ã÷zÑø[±csM?îÝa8~$”oîh;Ô[ËI·xÛõ'hŸÃîC~ɶ×KlXP¶¹Ýü#…q¹Ç%"¢Ñ-õ¡ó`fÃ7…-Zå4y5ðûõHøW¸ñ9¯³¼('×fÌ1 ½jldÊ™†»‚Êýë ±qIN®Íø“¯¦ ¶A×[µ4Îü ¥ Òø[q¦ñïå€Ùeë hÖ÷}ÙæT¿¶2ðϤzG¯-ó׬wþA…' ö9ì$N|Ç {VÍ*ÛœovŽgÕLã¸+^«)Hò¸ý»DD4z¤~š ‘TnkkëåIŠ,}6ÑŸH\µôì.k`¶¾³¼(çocdZ IDATÄA)RPÙÕY»1›ðsÞ‚Ê®Nw—QOI”VÚ·”>x1ò¬DDD4HFTÖyŽqw­ò¢œòBGLÌ1%¿¦M-*¨ìzkÊ¢YUósw„u¬kùªÃ÷ pÔîgÊ™Ò 3¦¦yk""¢ËúÐÙH*G¦™ãŸ&"˜}‚ÿ1.¢?ƒ6ùýÊȃˆˆˆˆb¥>tĬ3ÑÐI}èl·Ûqëž #)¹ª-¥‹Ôßaƒˆˆˆˆ(-0t&""""J Cg""""¢¤0t&""""J Cg""""¢¤ô}‡ —s÷Ñ0×Gè,„¸2ã """"æú¥”Wf£ÿ>!"""J Rë->>sê+5˜Ñˆõ0DDDDé‚Ó‰ˆˆˆˆ’ÂЙˆˆˆˆ() ‰ˆˆˆˆ’ÂЙˆˆˆˆ() ‰ˆˆˆˆ’ÂЙˆˆˆˆ()}¯&8DrrmÕÕÕ‘[\.×öŸþ0Uã!""""ê]ÊBgvû7=OÄÓ”„ˆˆˆˆ¨Oè`Ãn·çäÚR= """""s) »:Ý.×7£·Ùï½÷ÞÞöioZ”kË •mnŠ¡í«ÎµåäÖíо‰ˆˆˆ(m¥2ë\SScµZCO==™¢ GíþNw×[µìY5‹.]!) ÚŒøP9ÙšüIwD>m­ g£njG\ŠÚØ´o) m\´¥¡–7µ·ÖåäÖU×,Ùóƒ¹ç½5¶Ø]ˆˆˆˆhôIM蜓k{å•W–.]9MÐjµž={výúõIEÏíÇß°Â>@{Ó¢Žu-]î®×Ká¬z:à:j÷wº÷¯+ ll­›Y¾+^ëêtïXgyQuk¨Çæ§4x úµ•Pº£ÓÝÕY9iKÙütÞéÞ¶8oЮÑÈf$5jö¥za$MÌÓ%Æy32D4ª¤&t~üñÇÏž=ëñxŽoÖÔ¾^yåñÝ»wè£lÃY53×–3«Ê¹âµ®êÙÚ×ìœåE9¹¶œœG¢~Øå[§÷¾Ñ`åý³̹¿À†7‚?ÓÓVuº»:+瘳¼ˆ)g¢ôùyToÿ„/c†Cô!úNÁYÄð}2gðôº½Áñ¤í«a3Õ¤µÎHš˜§K *Ù(ƒ<~ã’ï["¨Üœ.'×ÖÖÖ`þüù¦ >ýéOçäÚº:Ýæû;j÷¯ÁÓ³ªœ—Tßï®)nŽù×~¼ÃrL™d¶9q}—µ.‘—å ÄëD”6V ý?[Gíþ—ä·Öå,¨šY3)ÉÃÍ©vwU÷Ý,i¿n5ÿãŸú©có‹@éªÄ3æ/®Yÿó¢Uå?Ú»x¯yþâú®ÅCÖ; Hj²Îëׯ_¿~ý+‰õ±~ɶ×KlXP¶¹=˜T.ÿQ¢¿¼CÉæÈLsdº•]‰‰D”æµ—-ŠHï›ápúDpR„ùO›ü)‡Ž·Ç5ŽŸešDÈ:Ç1nãæøqFX¹¢4ü1bç{DOíž~nÝÞÐ!4QÝdHï;^Þ &u¸¨Ë^¶èá¸Ëk4ëóÍmÿýg° 0ÑÑ‘wï Ãm푃Œ¿ÉìšoùHB/I~ßÑÐKMè|nÕ¹s«Î9xüñÇûrÇ {VÍ*Ûœ_ÙõV­#ðã#ú'”³jf®mþF`Åk5ÁOÙ6.ÉɵÆ…’Öf—­+ ý0ÚúÁ7«Êé¨ÝÏ”3QÚÙ¸$îv–ÅßëtïX8«ê[1'z†Ãœ^¦O'E˜2ŠÇ_¼+?¦±Ù,‹9Õî+B{š±µ.gAcàžB-ëoǽ1ãŒ9üýö•]áø)¿d[§»ËØ×gyuøôÓV“@Ð8ÿ {WÄ¥èmêH䙯Oé}ÇË;Á~θìÓV=—+yª$?™7·ý=gDbÅäèÆ¶Nö‰c¿‘z›]3!'f$±zý¾5Ûˆ€„¼ÂGµï¶ðÀ³ýºë®pöìYóÝòK¶u–„žEÖõ?ÎŒOQ#ûˆÿü+?vߘ6ñó2¢´Y°aüd¸}R>¨¨Ëˆ€Q^”SØâ<Ò»GÓVuÖo‹ßÇY53·Ê8Ö¶Åy£ï­±!r–ÅÆÆ oì«)ÿnzĽG‚Ñä=V]ô>ßnö+–üúÒp·[Êf–ï1iQŸæ¸-ª&ÁüÜa^·à,/Ê)Ë™ïhÌìûp±ïѾ•hܰѵ·:¯í€Ò о%‰[ëz?zäö·=(0¿>±³kâÞ÷# ï{$½~ßÑ@ªâ~üñÇûXý„ˆ(¥Ì§O$˜ÿWzo“;âÞšþì ˜séü`¶Òˆ›>÷ÖØæoøHâÅOÙ›ÙŽ­®^ºMþ“=\ì{4»l]á†òÆ_o™ò¶ŽuÎ %Uúóæö>ãåëÜv©Ÿß9Dt%¥ `Øÿ·»W ç&Ïø°2þ—Q¯úœ>Ñ_}β0=b`¯²àŽÍ5IÜ»£À¾2øðø‘P¾¹£íP²C5?wÓ{ÌEOéý¢  öçpáãÞ]ì6”W9Q8ÿî¼dwÌŸâ0ÒÉ Žnh÷ oKü;&ùÙ5ý˜{Ó‹t¾ QIM­sW /áWJFED#S Ö¹—›|EÍpØ[xúÄÀô9ËÂôˆ•F1îÌ\[NnѪCqã4;‘‚õÓF!¬³¼('·zG†?#F\_Qa? ¤÷‹vy'ØïÃ…ä—¬2.ÈŠ'ËO<’ؽîšï‡×&G€ŽÝ?ßGñ½Q¡sì7Rß³kb&äôOôÌœ¸·‰ˆ†‚ÀMû³&Œ¹î®ñçOøþ÷}¡\ÎÝ%EJyæÔ;)߈g\ç®N÷¸ñŸŒ¼Ô.çî…=É‹?‚õvF:6?\´Ê‰•¯»û3]I›.Zuû(»/gk]΂Æ^ W"ëaxˆö¦EF,>8ŸŽŽÊ·)uø|d‹Ár–Þ„ §ql.t¥l!n"¢Q«}KYNnÑ*çÀrWVûïw8G_.³ Ò¸'F¢Õg–ï£ö{Ãg}ÙÑù6¥Bj¦ fé´ÔEÜ=ˆF‰Þ¬)¨ìꬼÜ î…­oѕǬ3QR:].cµ9“/"%s„Ðbrƒ:¼Tˆˆhdé»`ÃåÜ}ÆAD4J |†™1±,ü¼pý[õ ù 8÷Uç.Ù€Òõêbž^~‡WLªŽ;œGBDýÖGè,„¸2ã "%.·ÐÙ¸'C{Ó¢YU«fÕMføEDtõ:owŸ¸2ãõΧzD 6³È ·Öå,h„£ÐáÜãDxíÀ>Vék ,Ac—§¢·˃ǴYÞ;Ðy¢›—åOºpÆuhìµòuw ÌÇ%´~¸ñªY?¼±d4ÎÏmJW®hŒ|º£³rRÄrß½_®ày-黇^.ãJ¨‡öøÓ‰î-þò¢4ÂZg"¢ÆB¤î®Î–õ8Ë«7‡Ë‹¿×éÞ±pVÕ·­uÆJ]ÆÆð±v¿ÑÕífÇê¥M¨óD7ým?þ6€ö¾¢®è1ÇpÔîïtï_WgÕÓ –}1–VJwtº»:+k¢ŸÎ1nÓ¼Îò¢ˆ‚oóCÏéG½\¢æ§@¶½iÑ‚FǺ–®N·±ÀÊÓ[:LßÄØãšî«×£˜^ÃÞN'ÐÛ1#IðÎÑðÄЙˆ(Jpõ¸¢UÎènŸÅ&µ´òSFà›÷XµIœ¸MóÓF¼hº¼…±üÞ¬*çŠ$Ö¿ˆ³©ÀÚÔG²bbäEˆ\w:ÉC÷ÑC/—È9mU§»«³rÒïšEmFVØ8‘„obP{‚£ôu”Ð5ìít‚½1V&Jk ‰ˆÂBsøÌsÉW†p a&ØQ»ÿ­Z€Kú¸§Çæ˜2)ò™‘6¾ªg'ÿ&Æìد£\昉(M1t&" ;~dOðaGÛ¡ÞZNº­ÀÛžuFÆñEãîo›kLn—°£ø{kjˆ)‰_²íõR”…:>°;ÍŦÏûÓOdbµ÷4üÀzèó2Ò½å?Ú±1™7ÑtÇDúlù.ˆ‘ _´¥#þAC#¢+¡3Q˜Që,/ÊÉ­ÞÑkËüÅ5ëñM& TE±3²Ó®—6ù%ß[WìY5«Î<\+¨Ü±ÀžU³Ê6ç?ºÞ(äèmÚb¼Ð.Æzà¦ýÌ.[W4ÎϵåäÖíyZP¹]!6.1.‚c]KëŠ÷§‡>/cAe×[µŽ@o6#âLð&Æ7~Ç„Cî¥qì5Læ‚D„÷%J/7íÏš0溻Ɵ?ýáûß÷…^p9w—<üÞaãʸ÷†óãÆòÌ©wB[\ÎÝ z2r 09¹¶®NwªGADºoF¢©œ4rñøÈƒå,½ NãØ\èbÖ™ˆˆˆˆ()}¯&HDDD±òK¶u–¤zDt¥1ëLDDDD”†ÎDDDDDIaèLDDDD”†ÎDDDDDIaèLDDDD”†ÎDDDDDIaèLDDDD”†ÎDDDDDIIƒ%QÚ&J)Ç"úe‰>¶È˜ƒ] ÁeƉˆˆˆ(yi:Ç’ÚBDDDDtyFuÁƸ“‡Ç<œêQQzH›¬³"P¶!â^3rÌ"ø8¾~#QWDDDDDIK›Ð9ì& ze܃>»"""""JZÚ„ÎÉ*f""""J‘Q]ëLDDDD”¼4Ë:ÇÝš®ß˜·&"""¢I³Ðèkš )FËDDDDtÙ,è5æ>·Åèsš`ò]õIR j1ØeÜLDDDDÎñ·p6ÝÎ8™ˆˆˆˆC†Î2ÁãDmˆˆˆˆˆCÚl¥Vfû\ˆ;¾ “ÐDDDDtÙÒ&tîß6z•y‡ """"€´ `wP4aÜLDDDDÀZg""""¢¤¤MÖÙÀ…¸‰ˆˆˆ(UÒ,tLìeŽ`d3""""¢JÃÐÙ4NzŽ ÑÀ¤M­³—[ª1]Ñè‘6Yçðm1bÙî}-n³ 4ï°ADDDD6¡s˜ìõiŸÛ‰ˆÒ“˹;ÕC ‘fáCOž9õNªGA”NÒ0t&"­>ôdª‡@#ÇöŸ¼”ê!¥Ÿ4 ¹7¥B†Î—½7ÑX&q¦BJ9( š]]~?DDDD4*ÈÀº|issºA v7ѤGÁïÄLDDDD)—¡óv÷ ãNNõ@ˆˆˆˆhTK›‚ ""h­Ëɵ…¿njOz×½5¶œ\[ukòÛWkËÉ­Û½µ}KYNh{k]N®mÑ–Žä;%"¢ô•YgÙ ÓR="6µû\’ßZ—³ jfͤ®êÙÉì4§ÚÝU=ˆƒhüukåœA숈†=f‰(måOq8t¼½½i‘‘n­3’ÁÁİ-”6RÎá¬sdö:”ºŽÞ¸¹fÉhœo–{^¹¢tÃûÂÏ1D4°ñá²àKu{C‡HpÐöàà™É&"†:Qºjÿ]³p|ñ®üÀ†æ§4@kÝÌò=XñZW§{Ç 8Ë‹ª[1§Ú½cEhϦE ëZº:Ý]¯—ÂYõô–´Öå,h„£v§»«³eýí¸·úµ•Pº£ÓÝÕ—`¾ß¾r£+Oç—lëtwû:à,¯Þ*%qN[ÕéÞ¿®hœÿ†ÝœUõ­ FBDDÃÕð;¶ÖÚ&.´M\h›XÛôþ¥lë©DOûÜNDdzjf®Íˆ·-Î nœ¶ªÓÝÕY‰7¬¼6€9÷—ˆJcngyQN®-gA#瑎½Æ^O•ä@ÞcÕ%ùèÝìV4þúˆn©î¢UÎ膎)“BoË‹|Åt$ù‹ë»:Ýáó""¢ac8Ô:·¾Zô‹Ï¶œ¨ÊÐújÝqàæ+qؼGªê¯ÄqˆhðµÎ±ÃjR}¬k‰ O÷Öô{sî/oä¹ö-e3Ë÷}î­±Íß8ð‘Ѱ5<²Î¸ý¦Ào‚¥•@dzño:™àßÔM\hûöÁŽ­µ¶o ìØúªñ¸—ö‰ŽÌ.ŸjZl$¼–m=…÷SýÌþ=Ï,Òü7 ¥ÈLóÞˆ tH¾ugùöÆïõ¢Q‚ܱ¹&‰{wØW?²'ø°£íP²C5 k‰ˆ†­á:Ì*Ýô ÛÄ…u¡[Fµ¾Zôî÷‰íîÛ[üCõÖSö<Óa?±ÝýÜô¼G”nzËøôu_ËÏK‹¦÷Þ¾÷ƒwl}©êöo¹OlwŸøÖ´wOãæûj^˜YøÂ&÷‰ª’+’ü&¢AWP¹]!6.ÉɵÍßǺ–š‚Ø]oÕ:óÿ‚³ú *jã™FÑÅ!³ËŒe³i‚€Ùë§çT¿¶2PzQ½£?C5  Wá`Ó+Ol¯ö}{¡­¥MÛ=ÖŽM?·m ¾¾ü4nEá sƒi£éöåßpµ.]pÐuhù£Ï¡ckïí{“wK>žù† ßr?7½ò¹Á>3"l•]•±óK¶u–DmX\ßµ8¦Qt28nóÎMú‰ê<â†wy5ˆ£˜ïe:“ƒÑp0,Bç€ÙÏmw½jk9øè­(|aSý#ãC/ul}=ªåË_zù ðÖáçæè£}o –ºO,Eë«¶‰ßÀòoõ™¥&¢4d"ÀŠ×b3ÐDDDI[kC¥ÇÚ o½1ï–ü=ÏìÚ×Ë>7ßY|è­º–öâ»Çè»}oGµé} `©{ßòÂCŸ”îy÷ô€:#¢áɸgEW§;ÉÅSˆˆˆL ƒ¬sÞÝŸ=<{¡Íxb_Þ²e<°´å…Ú¢‰ m…/lŠûtü]¶W½»Àm”#ôÙ>`Ï3ËmÏ–«åVÈ»U³VÀÌÚ}UyYP:ñ¶M3k÷±Ü™ˆˆˆˆB†A茛ï«?q_̶¼GªÜDnˆ½‘\Þ#Uîþ´7k3½–ºO,n¨½&"f¶ÿä¥TˆhT¡3õmáCO¦zDD£Cg"¢ôpæÔ;©Ñh§©Ñ0&!%†Å6ˆˆˆˆˆÒCg""""¢¤0t&""""J Cg""""¢¤0t&""""J Cg""""¢¤0t&""""J Cg""""¢¤0t&""""J Cg""""¢¤0t&""""J Cg""""¢¤0t&""""J Cg""""¢¤0t&""""J Cg""""¢¤0t&""""JŠ:‹‚ˆˆˆˆh8³ÎDDDDDIbèLDDDD”†ÎDDDDDIaèLDDDD”Kªз…¶‰RJã±€ˆÓ(ãf9Æl‘1/»b»ûÄà•ˆˆˆˆF°4cÉm!""""º<£º`cÜÉÃãNNõ(ˆˆˆˆ(=¤MÖY(Ûˆ¿ µ‘cÁÇñõ‰º"""""JZÚ„Îá`7QÐ+ãôÙQÒÒ&t6HV1QФYèLD”B.çîTFš…=yæÔ;©%+ÍBç¸[ÓõóÖDt9>ôdª‡@#ÇöŸ¼”ê!Qÿ¤Yè ô5MУe""º"’O!çäÚš~üÃ!  º´ ÷Åèsš`ò] ¶qã?Ùg曉ÒTڄ΃ì2n&"¢!Åòe¢‘*mBç°PaFü-œM·3N&"""¢Á†¡³Lð8Q""""¢Á —{× "¢ÑʵZ!„˜Ûàài˜+"­v…[ˆÕ®øÝ#v0zoxNé.'×–ê!Ñe „ËJjG1"î+r»i"¢¡àZ-pJ)¥ÜµÌ Àºl— rV Øfu­´h«?àˆž=îÎ@óeËÁ²§¥ hjñ\É“¡¡bÄÍŒž‰F†´ …†À2î+r»i›D]]×Îõmk즯yž_[ñì2Ïεóì`-*)>pÔÓ̾&¸¿ÕVܵ¥ %+çÍhfì<DFÌŒž‰F€´ ÛbHÈËüï°ADƒÃµsmsÙdój ׆2Ô¯´Gn²NÑìö$êÌÓÒ„’"kø‘}^cçt+3z&Jwi: ?j‹˜jŒ@ÊÙjºO¨¼9¢˜ÙµzrSɦeVDÄÐŒÓ_W§;þ+Õƒ"¢Ë’f¡³€¸Ì¯TŸDÑÕ&)gž£ŠmÖˆzè]ØÚµZ· ™äï¡Á ›(¥aèLDD4ŒÿÉ>Û°¨ƒ(M¥aè_¡!#¶K³6Ì@ÑtæÔ;© ‰4 “©Ð`¬LDDDDƒ-mBgã¶r0‚bÞaƒˆˆˆˆ m–DÄ`—q3 @zdë ¥N„ÎÛÝ'Œ;y8Õ!"ŠãZ-ka,'¸Ìêi˜;¹¬9üj…S®A *œr=f÷ˆŠëÛvµDîo¶¥RÚl ;®Õ§”RÊ]ˬ0V rV Øfu­´h«?àXíŠíÁãžá 4ŸQ¶¼Á×·Úê<ßà¹ÂgDDD½²éPû{f´Tˆ(Škçú¶]vÓ×< ϯ­xVzvŠŠykÀZTRÜtÔ»5²™}Mpn«­8¦wóŒyVÑpˆ–™u&"×εÍe“…!&¡ìÚP†ú•öÈMÖ©3šÝžDyZšPRdB]:Ät@DD)—µÎ´ïÛ —lðÅ×N,=xÝvl­­Æ“õŒ¼.‰(m«‘= s'¯v…*“)g+à‰ß'TÞl”G\«'7•´í²¢!¼ÕÓ0wyCQ°¥®H4‚ Yèܱµ¶è™ý€™µûªJnª£D²á§­¯.9´¼åÄ}y}õŒ° ´i{eÁŒ“ˆF¶èj ׆2Ô·ÙcÚxŽ(¶­4ê¡—E¾àZ-ž·ñ²'²Ï©3šwzëÐ ›†@N®-ÕC ¢!4D­¯ýâ³-'¶»Olw7å¿w|hŽ'ï‘*#Œî8ÖŽÛoê+n>Õ´xá|ËmŒóÄ·ÐrðJŒ’ˆFû¼Šµ‰|ž–¦æS­‚)ç@²Ø>¯bíNWl“0OÃÜPÜõsm±-~3 s]n)e’ÿMõ`‰¨ß†®Ö9¹,5R¹[kmÚ&.´-þMбµ¶lëoê&.´}û`ÇÖZÛ·ƒakë«Æã^Ú':fÇÖÚ²­§ÐújÑ3û±é¶‰ ˶žŠé'ìý?7cyËsӃϧW>7ïÿ¦lâ«ûB#1vi}5ÐÃÄWq,ón‰h´°¯i+iš,„“›JÚŒj OÃò¨*gû'B1¹l†3þÞt-MÍáêf1wƒ;¢ÖNVk¤¡qã?yæÔ;Iþ7Õƒ%¢~¢Ð¹`Vé¦oØ&.¬k ni}µèÝF~·åÁ?To=`Ï3öÛÝÏMÏ{dA馷Œ€u_ËÏK‹¦÷Þ¾¯£/myafá ›Ü'¶×ß²+¾CÇïþ°'>3}ó}O.ÿ¹«58’¯Ý—÷þoÊJðZ 3½ô®Ä§CD£Nèft¡ ׺l—ŒŽxíkw«3¹GsäÍ줔»Ö¬‰xÎ{:§¥äãæ3§ÞIõ`‰¨ß†ªÖyzå‰í•À¾o/´• ´iû£ÇÚ±éç¶`U1–ŸÆ­(|anpßtûòo¸Z—Î.8è:´üÑçбµ÷öÉêˆ?.Â3ü o½1~—ÙE_\Òr°²®M_´?‡Ž­À OÆ·÷n‰ˆh´êgÖywªÇKDý3ÄwؘýÜvwÑ«¶–ƒÞŠÂ6EÞ˜¢cëëQ-ŸXþÒË·?87è@í“ÓOHÞ-ù{¾ÿçŽGâ¦Ì*-yk_—Ϫc$ê–ˆˆF1f‰F¶¡)ØèØZ*Õè8Ö^xëy·äïyf×¾^ö¹ùÎâCoÕµ´ß=F\Û{ûäôÖOÁÜZl* WN¬ <žþè íKJÚkŸ˜ ïîÏ"®‡Á,¬u&Ù†&ëœw÷gÏ^¸?}yË–ñÀÒ–j‹&.4¶¾°©&v§ñw=Ø^õî·q»‚>Ûìyf¹íÀòoµÜ÷r\?©âñ%[6añrÛÄÀóÒ¦í¡ñÚq—1’›ï« ÷ðÅÚúì–ˆˆF-f‰F¶!*ظù¾ú÷ÅlË{¤ÊýHû' IDAT䆪úøýioÖfz}p{}Â6‘Æ—lÙ^·ußË›ðà¦P!GL%}wKDD£k‰F¶‘»šàe8èÚôÅ'O0‹LDDýŬ3ÑÈÆÐÙÄôÊ}ÝÿŽˆˆÈ³ÎD#ÛÐ-‰BDD4ê0ëL4²1t&"º ®Õ…<0ÖÕŽ´Ún!V»âwØÁè!²ÏD;ÑpÆ;ll ‰ˆʵZ8àŒXN0ru@gŠmV×ê@‹¶úŽø8Øãžá 4ŸQ¶¼ÁOÃÜPŸRJ'vÆíCóÎD#k‰ˆȵó@}Û.»ékž†ç×V<+=;Eż5`-*)n:êÝÙ̾fMà‘ÕV ÀÓÒ„ú¶ðÜá×)M°Ö™hdSH!R= "¢´ãÚ¹¶¹l²ya…kCêWÚ#7Y§Îhv{uæiiBIZššgLµÁ`éJaÖ™hdcÁÑ€U*+bª1Œ”ó2«é>¡òæpq3\«'7•lZfPl3ßÒk‰F6†ÎDD—ÍZTR|à¨'ðÌ$å Àsô@±ÍQ½+[»V‹çmm»–YÌtS‹”¾˜u&Ù: Œ}^ÅÚç̱'¢Ð"*ålŸW±Ö˜èç1­Åð4Ì ÅÍ`_Y²Éá¶k5o±‘f˜u&Ù8Mˆh€ìkÚŽÎ,Êç z–—¡¾ÍnãÜ)Œ %NiéÁÓÒÔŒæf££—e»Ú0wrh J…SñYÐàbÖ™hdcèLD4`Öe»ä²>¶Ø×H™è6ñ­m¤tÁ;ll,Ø ""4Ì:l ‰ˆˆ k‰F6†ÎDDDƒ†Yg¢‘¡3Ñ aÖ™hdcèLDD4h˜u&Ù: f‰F6†ÎDDDƒ†Yg¢‘¡3Ñ aÖ™hdcèLDt\«…Bˆ¹ ëjGZí ·fKjGì0·Á³?×àNGÌ:l ‰ˆʵZ8à”RJ¹k™ÆB€AÎ Û¬®Õmõñ±°Ç=Ãh>£lyƒ(®o36´Õp0zN?Ì:l\ˆ›ˆh€\;Ô·í²›¾æix~mųҳSTÌ[Ö¢’⦣Ø­‘Íìk‚kt[mÅÑ=X—íjÃÜå û2+(m0ëL4²1ëLD40®k›Ë&›W¸6”¡~¥=r“uêŒf·'Qgž–&”Y£7ö¾ KÌ:l ‰ˆ¬Â.®ˆž”s‚dq¨žÙ(¸VOn*ÙÄìòHÀ¬3ÑÈf ¤Lõ0z³Ð6QG( ¢_–èc‹Œy1Ø•ÛÝ'w¨D4JEWc¸6”¡¾ÍÓÆsô@±m¥Q½,ò×jñ¼­m×2+à1ß…ÒH?³Î»S=^"JŽü/ ³Î2ú«Ï-DDCÂ>¯bíóFæØÓÒÔ¯bíNWl“0OÃÜPÜ˵zrÙŒD¹k®˜u&ÙÒ0t<ãNwòpªGADéʾ¦­¤i²BLn*i[cOÃò¨*gû'B1¹l†s=¦OKS3ÂÓs7¸#ž=ok“q{ÐpÇZg¢‘-mî°!„”mˆ¸×ŒÔ²>ޝßHÔÑe‰+¾0Ùb_#嘋o5‰ÚRz`Ö™hdK›¬s8Ø•fèµ~#QWDDDƒŠYg¢‘-m²ÎÉâe""Ƙu&ÙÒ&ëLDD4ü1ëL4²¥YÖ9îÖtýƼ5 f‰F¶4Ì:‹¸¯DÛc 1f‰F¶´É:‡o‹‘(kœt6™wØ "¢!¬3ÑÈ–6YçA v7ÑaÖ™hdK›¬sX¨#þΦÛ'ѕ¬3ÑÈ–6Yç°^–àæBÜDt…¹VlðÀXW;ÒjW¸…XíŠß=b‡¹ ž¸ý^)0ëL4²¥aèLD4L¸V œRJ)w-³ÂX0ÈYb›Õµ:Т­þ€#>xö¸g8Íg”-oðÅõm¡.½R:aÖ™hdK炘…¸ãÛ0÷LDCÀµó@}Û.»ékž†ç×V<+=;Eż5`-*)n:êÝÙÌZwÛj+ʱҕÒϬóîT—ˆú'm²ÎBÃá>âŽo“¨+"¢sí\Û\6Ù¼õ¡ õ+í‘›¬Sg4»=‰:ó´4¡¤È „»d½FZbÖ™hdK›ÐÙ¸-†„¼Ì¯PWDD—­"PmSa¤œ[„ê™#c×êÉM%›–Y]°Áz4ÄZg¢‘-mBg"¢áËZTR|à¨'ðÌ$å Àsô@±ÍQ Œ]«Åó¶6†É#³ÎD#›:§Mƒ€¸Ì¯TŸöykŸ72Çž–¦æS­bRÎöykwºb›„yæ2nY˜u&ÙÒ0ëÜË*ܦ ¸7 ûš¶’¦ÉB1¹©¤m< Ë£RÎö5N8„brÙ ç{Lž–¦æˆêæ¹ÜQµÎ,vNCÌ:lix‡ ÓBeÙWú¿íÝlç¹èùgz»8nO‹(QbUɰÊM™Fè‰q ·q\dõ`Iišsã8EÜ5‰t‹äštö5²ýcSn|w“꜀̩ƒ4J¶#¤n!ˆÛ† :nà JÃúÆå$Št*ÿئÙm÷Üöž3ûÇðÇRE‘âøû3ïûÎKrÄ[)s>å¬:ö)ÖC†9©"Úp„¼³+uÜÐ6­¼#óBXâcZEãâ’ß«ZõЦišæBH5Rz2ö(Š¢ø¦…ØÙ Xap·¶„Î+³SÞ#Þ#Þgß)=Þ1âÝqr±°÷ØÙbówŽí Ï^raÇ”þáÎÓ~ÜŠ§ënpmц#ÓG­…1Œ”žPE¤"å¬ G¦ç3•M Œ”ž,$®M3MÞÙ È:î֖йï¡ñÔñ{Ïd¿s‡ˆì=>“]ˮΥŽ/¿8{IDöŽ~ýÂóo®ˆˆÈÊì´eýÏžúÉWR«sÙÕ¹¬Þÿ›Ú1gkÚñ‡nhÓÁt-– êEQÌ_/h$FËRÎZ,->EQOx0]qI¡‘ÒËšR³ádwëhÁÆÊ{ço»å‘[wùå—¿øPDÞùÁ¡~ÿ½UMo¿©Ïz°çÀá="ö<ôþ7Wò™à7ÛϾ“ïxö¤õ¸NûšÓËg—/éûóiòðì%ùð͉CçÏÝÒü7€î`/¾(mY(«rÖbù¬rÕZjh¡¬©«èŠ.DÖp·N„ÎgZ‘è#ïŽ>¼ÇÚv}ðñþñxgeö ÇwUtسëàÌÓeEgO½w>u}ï/'f/‰È™C+Úê\ö;wô=tÿÁ™s‹""²˜úñÁ¡;ê·¯?Û•ÙÇo&»:—]}æ¶÷.Ëç¾6ieÐWǃŸkÝ›p²Î€»ubqº½Çg¬Bˆ•Ù©‰Ù/MZ[÷ì:|zH¾þòê 2[ÑãŽÃ«s‡EŸñå >÷ðûË2ócïLaÿèe¹Uöì.´×FŸÎœ=°{Ï;™wGþެÌÖo_Oß-ýrèi¯<“ý·¿³¹Wp9²Î€»u´`£ï–þ3ï].<»ãáã;etWpv÷wæ²ú×_J½#¶‚é¬Sæx÷ÿ"‘´Y«ªÝЬ3àn„ÎÐ45´`†ÖÙ¢ÅL3Vg?Ü…6w£`€–!ë ¸¡3-C­3àn„δ YgÀÝh²Î€»:Ð2dw#t eÈ:îFè @ËuÜЀ–!ë ¸¡3lB&ª(Š¢(„!"F" ØE3¥ù§Um@E#°†+ŒÍ8Ë>P¡¹íXùmÅ-ù1Jó.Âa4¬3àn„ÎЬLTñIÚ4MÓ\©bÝ+° ¿W•Ì|¾…™‹/MUmÅÏ•5)0ßR#qt:òTH-Vhad“ƒjU›1¯m‹­‰‘xô`.';«4²êõטàtdXQ‡‚þ¥‹†Õ:´`æâ¥ëƒ ë ¸›"7ÿË?õé»®ÿøòï>|þÏÅ™ôéà¾oÏeW;89—ùÁ}óð©ÿâ¸ëžÏ~\ñ5šIŸyðQ¾X]¬§×{e-ÛéY`c¬_Ì⳨-wI›öÀ6UŽz a¯‰€'œ¬hRh3” xÂÉü6<·’D`T—¤ãæúÇ#•+Ë\hæçBFT™Î·ÍØÛ»8ŽƒMij‹›ëKŒ”.Á!µ‘6"²tѰ6©^ñqõœÑ$²Î€»uMÖ¹Ñ6ÛÔª½È:®)ÕbølÁjeúÖª‰ž·Õ$—µ)lõÑ„!"I ÆóUëK2Qœ±Z·Ëõ|xí ۳ज[„¬3àn]“u¶–ÅhɸYa@‹©CA[·Fú¶¬B¹:0h5ñ‡B±\P÷T_´Wv¬LT9ê-%§hS,mÎÅý¶ºfRέBÖp·®É:»YgÀ]´áÈtþ¢>#¥3¸åé[#-.–1?]ˆUk¥xmMDD ÍÄ—¬kùœŽe$eqs#mŠŒÄh8_ÁQg>Ø8²Î€»uMÖÙÒÕ7âæï ÀeJÕ=˜¿>ÏHŒ–¥oÕ)2KÚ a+ÛØj M ½C éÁ°'0ªe¤ôd©§Ò`›ÂÚtöJêªù`È:îöÉæºux]g;Ó¶Ñtj`oÖQ?¸ïoˆžwQC f¨þ-fš±z½ÇX(ëo=ªhWݯ±6ëÍ›³Á¬óéNÏÀÆtYÖYdã×n›Õ‰›ÀõÈ:îÖ5µÎ-\ƒ6[„ZgÀݺ&ë\Z£Î=·«·×ª½È:€ë‘uÜ­k²Î%uî¹]½};!ë ®GÖp·®É:»Ygp=²Î€»uaÖ¹koÄÍßàzdwë¬ó¦oÄÝ)dÀõÈ:îÖ5YgkYŒ–܈›6[„¬3àn]“unᲬ° Eò·æS”hÆÚ`$ŠíÖ}•ÛJm}E $2‰@Y‡â“L4?xÕ±ŠãØEÇ‘uÜ­;²ÎÊhçü-dw1Ÿ¤MÓ4Í´ø¬›\{ô`δ6 f «Qi›™¿«va„H:¿}!¤ &³Ö#¥‹_ O..ù½ªH&š?V.¾ä+ Ô}Óm|ÍXYgÀÝš¼w;ï)=—]‘ë~{¡=‡Û:dw1²ÉȰuÇlm8â›7d@dp@µöj±˜ˆd^K<Êo-–‹FSF¨¸¥H޽hˆ¦Š‘|ê))>‘à˜*™¦#Ã1u(è×­}¢†Ì¡D`tË_*GÖp·îÈ:»YgÀu–.ÖÕë_ºhhÑiŸ½¤Â¸¸ä©¶j)»,2í³Uq¨^ÑS†ˆqQ¼ª6<¨§ ‘Ìüt1wÛYgÀݺ ël¹zãmí<ÜVàï À]´XîbÀ£„óO#iU´˜iƬ²dŸDÒæXÝî¦ÉD•ÑÄÐBh((/b\Ôe $ªWæ 1..å“Íèdw#ëÜ>d·QC V­r.î÷{Õâv-fšéÈô|FLê)ÃÖ¥P»lÅë·þ=08=Ÿ1²ƒÃšˆ:”‹†‘•ŠÆŽ#`!ë ¸[׬°Ñ>+³SáÙKµö.>;âÝ1âÝqr±üqø{p)#1–àj$e¥^U´±¸„G‹f¢žðàS!UD2Ñ|[#¥'­¢ m8²tôè’«¢]Ê—{hÑéùLyslKdwÛâ¬óÊì”wÇHþçÙwìR'r­ß²bKãC5êìÉGÞM­ÎeWì¶?n¨³›ÿÞ®Mùõâ¹øá›‡ÎŸ94êÝ1¥XÿÈ—ôý#ö¡Js°•[7tè¼”oÉçËÏž:t^fžöî ïŸ*=n4±MÖ¸¦©¡§ÞŠû¢ÀuÈ:îÖ¾6.éÏÿxï½9shåÑÕ¹Ãb£ý/¯Žï–KúþÑcgçg.uëÔ„µë½û³«ã"²2;51û¥øWÿ)”—WçŠÕ}Ç9!V¤±Ïõ*=Ý{\Dn¾:‘ÅgG~pökÛæ°øìÈ‹³Ý·,f"+³… TÌmÏÔñåâWf§ª^Ygàç7†ëuÜmë³ÎgzwŒxwŒ&ïÍWkì=°Âß•÷— o¸ëÞ/¥JÅÐ+ï/[9]+ |æ½Ë+?ÿ¥:Ö±÷øLvuÎúIß™­?~dF.¼É>‡¾[w–Ϥ4ZskYgp=²Î€»µ±Öy£*:®Ì¾ÑÄ "²2;5ô“¯¤VÇûŠåÎ ë ®GÖp·Ž®ëÜwKÿ™C ‹""—~ñ“ó‡îpÚUØòÕ¯Hù9óÞåF´÷Þ/õŽRs&?ù§[›:skYgp=²Î€K)bŠtún‚{¤ŽO í}&»§Æ®|úk“¥-_yõÀî‡î?¸ãiïÌΩÅñàçj¤ï¡ûoÛa@ï<8º³ÖL^N í˜)µ©3·&‘u×#ë ¸›"7ÿË?õé»®ÿøòï>|þÏÅ™ôéà¾oÏeWÛ=£ÅgG^¼µÉí­Îß÷|ö㊯ÑLúôȃòÅêb=½Þ+kÙNÏcýbvzØîžç^‘¯únĸ»UÇ`=n’?^‘Üùãåmu7Á³'½;FywtÒ…q³u€kYgÀÝ:Zë\iÏìê\öÕ¯mä>#]„ZgÀŒD j¥æü]EQ”h"P*¢Ñ€½‹‘°=µh8÷-ßPèY>“²®Å[ gVqóÁL”Ŧ[„ZgÀݶUÖÙåÈ:.d¤t‰DDO… ‰€â“´™—–ìÀ‚i𦙋ûýñœiš¦¹0æml@5䨷ðØÚRgRj–_ aˆd¢ù™åâK¾Bðl$Šâ›ný[s"ë ¸Û¶Ê:»oîc¤t Ž & «‘Ò%ž‹i…Z¬ô¸©[ÑQŽ$³†dæ§#Úˆˆ:ô/]´Ú©¡3÷oè`¨¬3àn›Ê:óÏ ý“¿7×1Rº‡Tm8’X”žP[7 £¤uCo{½F½ŽFâè´ß[6)u`0™­9>6¬3ànÛo…k+l\ƒ¸@»U®°a$£2³R%UŽzs !)n©bØvåÍŠO«T×ë[g&žpÒÚëçò»æ‡M+ n\cL4‹6\/pwÛ’6FJOæÀ¾iIê)CÔ—ZÔp3‹µÎÕ1±qq©"!ë ¸¡34ÇHéÉHéz@«RB‹KØSZ¿"­XËBD¤"Â.Ty8ØôLªiÑéùŒýˆh=jw#t€¦)]âcZái¡ÊX -äâK¾B)²O†5‡ÎZ,Ô Ë=˜‹iµt`¯uV‰L£µXZ|Š¢(žð`ÚV¬¡xÂVÒÚ)ÌÇÆuÜ­ÉqÀµN -,ØŸk1S+î1C뵯nT{À²]N£‡4û³|ÇòÅ]f¬j^³E³6˜u>Ýéùزδ YgÀÝhjw#t eÈ:îFè @ËuÜЀ–!ë ¸¡3-CÖp'ÓE„Ѐ"ë ¸¡3-CÖp7BgØ ƒ¢, IDAT #P”@°oËDK7û‹&¥B  Ø» ÛSû€†sßò ‰LY«ü+»™Š£TL­AÖp7BgØ#¥K$"¥_‰€â“´™—–ìÀ‚i𦙋ûýñœiš¦¹0æml@5䨷ðØÚR¥´%_ò¢çŠfÚP°8O#¥KpHݲ·åFÖp7Bghž‘Ò%86<˜´Ç¤ñ\L+4Ðb¥ÇM ¸Ajh!_:ê˜PVK±³‘%rÞ"dw#t€¦å“·Úp$ê)=98 ¶n@GɰÇVˆQÙLLf §fÅ=™ùéÍÌuuÜКU,{°‡º~¯ÚÚ«Ù+1B5WÝLŽLÏgĸ¸Öšž%ê!ë ¸¡34ÉHéÉ|f×7-I=eˆ:Ðt©…ó€ÍŒrq©fø® G–.fRú ‘óV!ë ¸¡34ÇHéÉHéz@+M¬Å%ìÉ_§'"™héqIy„]¨òpp£2QOx𩚩hmx0ì 9o²Î€»}²ÓX߈w‡išÖcEëV.%¦¬³Å¬ØYJQ沫­*€kˆ‘Ò%>£žjÃßÑ” …rð(…¯¡HÚtè¬År%l=óÇs š çÕªÞÉp±«ˆ?žÚ¶øã93¤ŠUÍr !UDŽˆ9o fOwz¾6¦ BçJÕÿjd ´–ZX°?×b¦VÜc†Ök_ݨö€e»œFUÏyåÃb uÜíš.ظî·®ûí…NÏàÔ:îÖ5YgEQòeJÕ>+ǬW×oÔ €–"ë ¸[×dKÁ®Yõcß^Ý ÎP´YgÀݺ&ël1©blcdw뚬3ÛYgÀݺ,ë\µ4݆‘·l²Î€»uaÖY©ú©µ½¢[Œ¬3ànŸ”.Y¹´,F­é6ü2Xa°EÈ:îÖ5Yç»ÄÍZÇH%0ìÛ2Q¥(šH” h4`ïb$lOíÎ}Ë7$2ÅVÑLy§Â¨Å UÜ<­˜96¬3àn]:—ØË0j•gP­ =Œ”.‘ˆè)£°!P|’6óÒ’X0MÓ4sq¿?ž3MÓ4Ƽ ¨†û[BZh!ß ¦I&êуùÝéÁ¬!"™h~B¹ø’¯<‰€¢ø¦·ò½¹6‘uÜ­ Cg³öÎŽÛ`Ë)]‚cÃÉBìl¤t‰çbZ¡+=njÀ& ¨öƒgæ§#Úˆˆ:ô/]´ÆUC f.îoö¨…¬3àn]:Àva¤t ©Úp$ê)=YŒ\[1 £dØ£TÖdhÑi_ui†ELfk‹V ë ¸[†ÎõWØpl[!èŠØC]¿Wmí€Õì ¡ŠÃi1Ó4MsxÞ¡¶[¬3àn]:+J!^÷FÜÕmj ›`¤ôd>ì›–¤ž2DØL©…ÀMÓb¦™ŽLÏgÊpqi3‘=@Öp·® ­e1L17ù#¬° 5Œ”žŒ”®´ÒÄÚX\žR²7uJü–GØ…*Ç7:©D xÀ| ¬ "èÍ–“ dwë²» Àva¤t‰Ïh…§ÚpÄw4e„B¡…œ<Åÿ»I;ý±®År%l=óÇs š çÕªÞÉp±«ˆ?žê¾pRÄ£dÓæXp©xp<· Š¨±ô|þ·EÒfþF"à 'EÄ£„#isc3¢6²Î€»uYè̸ljhaÁþ\‹¢R5´`†Ök_ݨö€e»œFÙ¶h×b¦«šŽÃ$±iÌ:Ÿîô|lL—…Î"U—ý™¶¦S{3¶YgÀݺ¦Ö¹d£×²º3 ]¨uÜ­kBç.‹Á €-BÖp·® KËbÔ¹çvõöúCÐRdwëÂZg³îÓu·°eÈ:îÖ5Yg¶?²Î€»uaÖ¹º cÝE6È@Ú‚¬3àn]˜uÞô¸Ø"dwëšÐÙZ£%7âf… ­c$ŠHöm™¨RM$J…@4°w1¶§ö ç¾å™b«h¦¼SaÔâ„ 7évhƒÖ ë ¸”"¦)]:·pY VØÐ2FJ—HDô”QØ(>I›yiÉ,˜¦iš¹¸ßÏ™¦iš cÞÆTCŽ} ­ !-´oÓ$õèÁüîô`Ö‘L4?¡\|ÉgÏFv0]h%xn!²Î€»uGè\™ui…N¿&n`¤t Ž & ±³‘Ò%ž‹i…Z¬ô¸©›08 Úž™ŸŽ k""êPпtÑ(›–êõ7{8!ë ¸[\&8—]‘ë~{¡Ó€ FJ—àŒª D|GSF(¤)=9ø”Úº[%Ã%œìçìÍ´áˆÏ§LK$mVíêÀ`rÞ)µÏ°é £Ò³Î§;=_ÓYgØŽŒ”.Á!UDŽÓÄ~¯ÚÚ«Ù 6*Ãk-fš¦iÏÛk›kÈD=zp¦F€Ž¦uÜ­ ²Î–«7ÞÖé)@#¥'“ÉbØŸ2B¡Ádtq65XôpT™ÏĆm¸¸ä÷ŽåŸd¢ÊQo®*ôÆæuܬ34ÇHéÉHéz@+M¬Å%ì)%{3Q§Ä¯:`/f6Rzrp@up£“JŠ4..ù½ªhÑéùŒý@ÖÅŒÄÍ[‚¬3àn„ÎÐ#¥K|L+<-”X¨¡…\|ÉW¸"Ù'ÚCg-– êž|ÌÅ´Z:H†=¥kž‰L"à '“aͨCÁâÁ ÅZ,->EQOx0Ó¬¹'m£°>] ±Âàní*ØX|vä‘™üãƒúÜá=²2;5t輈ˆìœZ~nöX™šGãÝÐ\ãŠ-µFÛÐQ¸•ZX°?×b¦VÜc†Ök_ݨö€e»œFÙ¶h×b¦«{p´ YgÀÝÚ:_Ò÷ŽßþLvõyçØ³ïˆœúÉWR«ã}"röä±D>W·ýž;Ú0Ñ }ÇÛT@£Öp·6l|øOIM}§ûÞqØz|ûM}Ö†=Ê’Ê5Ú¯ÌNywŒxwŒxŸ}Çzž}ó˜µeÇÉEùð͉CçÏõî˜Ò?¼¤ïÉ·ßÿæŠ5ÒÙ“Þbû²ÆÎ_™ Ï^) ž½$ t\«È:î¶õY畟ÿòÌí÷÷Ulݳë`ðiïŒC1†sû³'‡õ¿¼:¾[.éûG{XäÌ¡•GWç‹,>;òâl`÷C_›<þËR)Å«sAY|väg¿vøæ7ÃAyyunwaÈ>{ã:óŸ}qüög²¯Þ!òαg/KÅQ(!ë ¸[[.Ü{ëõUÛî8¼:—]ÓR#Þ#ÇήÓ~åýå½Ç»EDn¸ëÞ/¥Þ‘Âé»ugõA‹YêGfäÂû—V~þK)´ß¾[úeæiï³ï”òå8#ë ¸ÛÖ‡Î}·ôŸùÉ?­ÔØ»û;sYýëV(ÜHû­ÌN ýä+©Õ¹ìê\ê¸C`½{dWç²C犵"ÔÀ €»µ!ë¼'0%3C¥ ócϾ³2;UÌ4¯¼¿\–fvjßwKÿ™C ‹""—~ñ“ó‡jfϼwÙz°÷Þ/õÚ‹HßW¿"ù×±2{RÿPdÏìâèÞwÿy¥áŽ€kYgÀÝÚ±ÂÆ ÁWgdÿ¨wGþùA}®ïæ¾°{Äk=×FS¯ÞP¿½ì¹#u|jhLjˆÈè3Ù=²ò¾Ã‘úºÿàŽ§½3;§ï¿m÷¨÷ˆì<8ºSDäs_›,Ž _yõÀîRãÒÒxgY½DFŸIÝ*"Òw‹Œï±Ñë§Žˆˆˆ¯ûÏž^¯þÚßwr¢6N‘›ÎÿÅŸú«»®ÿøòï>|þÏÅ™ôéà¾oÏeW;8¹kÇ=Ÿý¸"‘IŸyðQr.ÖÓë½²–íô,°1Ö/f§gm­ÁJŒ¹×_ îû¶þÚßóUßøw·ê¬çÀMò‡+bü\þx…» Àf‰@Õíø2ÑÒÍþ¢1{ƒâS#Pl÷ó³=-XÖ×H‰Œ½™’¿ë¶á´sõÒ¯ëÿtz‚šDè ›`¤t‰D¤tÇl#P|’6óÒ2Ÿqzô`.ßj0kˆˆøãù ¹ î‰fDD 7Rº‡T{³ø’¯(Û7åÎÚ°% yFJ—àØð`ÒÞÆs1­Ð@‹•WPk´R J±³‘µ"g[³ÐBu ld“Å­¢ˆ:À&äóÀÚp$;)½Ñ¸UŽLûjUWdæ§ý^ku`0™5¬mCw'ë\÷Óšx1h¹ž^oõO§'`S YÅ ŠRì,Ry×¥ÅLÓ4ÍáùRyr1ü=êÍ-„òãhÑéùŒ—"ÃZíáìÅ£ll ÕW’qmÐí IFJOæƒ]ß´$õ”!ê@©v£AZÌ4Ó‘éùŒÂß\Üo%’ -†#K3)}Ð)r6..UëÅ<4¶{¬LÜ ¸¡34ÇHéÉHéz@+ï¬Å%ì)ad¢ÑLy<¯é0b«ŠðW -¤Åg«äІþ°S䜉zƒO…Ô²m¥blVÄLÜ ¸¡34ÅHéb+*.ÔlXWîù ëÄùdX-– êùR Å£s1MÔ¡`±•GΔ‡¿Z,_ò—¨Ó†#b«Ö(Öu(G½93…a©ÖYÒ å£¡Óˆ›×hÇÝÀ…ÔЂý¹3µâ3TÕxýMe–ï. î4T€V#ë 4„Ðh´ÒÜë/vz ¶ ¡3-ÃMOw#t€ ¡ˆúô×þ¾ÓS°… Q#>Úé):‰ÐuõÒ¯;=@'±ÂÐBg !„Î@C€†:u)¦õoBg !„Î@C€†: !tBè 4„Ðh¡3ÐBg !„Î@C€†: !tBè 4䓞 •®»á žÂv¡(Ê•µl§gÀUÀm®^úu§§Ðy™ôéNO€ Q°4„ШOQ„Ðh¡3ÐBg !„΀æ]×ëíô }͸®×kÅÍDÏ®¬ë ¨§§·ì+WÖ~-Uá²õô*÷àv„΀z¬X¹Â¤cÓ^ïãDÏ\аqGŽYÿ||t_‡¦íC­3`cŠÕGDdbB 4¸Yg@¥Šúf±•mXqóÄ‘#bŠäãf™˜«—Ú9Aè Bg@%Çúf©¸:P+z‘ÉÉ#ný´ Ó qX„N‘É#GD¤XèüüŒWDåbAîD­3`}µož8rÄ7[õ5-ëôz{J?áW–[=QØJ„΀¼žÞ/TÿÈz7=)]5xÄ‘‰‰|î¹&ßÔùµì•sS>9óÄ®coµlú°åyWÖ~]ý#N«8O–o,ÜYP¥áƒõßüÅâã³Çzz½=“‹"òÖ¤·§×;q¶°q_8Ÿ¨Þ§“¡Ðq„΀u<¾–u¼ŠóFçÛ¥TYþàW"ò˜v÷:íüß]ËžzL$=?ÛØÈ°e뫌ž±ªš+âä«kÙÇG³ë\&˜ßÙëíÙ5ž~ìå+»×9ðí7÷o|¶°Ee¬ê‹B Fiã„-Pž°î&xDäÈ‘«kY«~ãjƒwáöM?7å‘ï=2A"@Wù„È*Óîv]¯w²*—l¡K»ÌÒ}_Ë>Þ`Üléþðƒ"òÂý¶E6Þý€jfÛ—i Yg@QuˆlÏ=OÚw™²Y{ŸzLDÎ<±+üJÿÃ'|ùBŽû¾·é‘`ËpK€H!ß\T½@³U°ae—''óñôÆî~ÒüáZ°øìî‰ì•âa^Ë~³²õá+k‡Z@ç:D¬Jå^¯ƒã^o`õñѬ•ž”׊·D×£`g/Y®XRú °¸÷ùBŠzâÈ‘çg^kï4 cÈ:œ=¾–,:W\X–>"2Ú¶I@':jZwÝŒI9òø®„΀’žÞ/ØŸZ7â®`[sƒ¸Àµ…ÐPâ+W°Õ@!tp á2A€³žÞ/ŠŸ·­ý%jgç­CÖÐJ¡1M1MÑ )çêzhèR„΀M3dÉ_™]NŒJpFT[õó|¦s€Ö!t4i¸ )I–‡Î JHuèÝ‹Zg@“´˜Ì+¢ˆˆHÚ,Û•8*ñ«‘D|¢L‹ø%kû ¥Ö ÿ§/ÜÔžy\ËE¹²–íô, 1SãáÐÂúm ë¬Ÿu¾zé×m˜Ç5+“>Ýé) !ŸSéô,€mKÉGÌ\&4„Ën5÷ú‹ž×Bg +<øh§§À5‡ÐèJ\¿ @ûµ tþÚÿ¸ODÞü¿^«Ófä?~û÷¿ÿýG}tî“›?"Ð~­¹Lðĉ»¾ì¯µ·§×{âĉÏ|æ3Öã–h³„Î}ôÑ‘#GTU­¿ÿþû"bÆ=÷ܳù#íׂÐùÜ?&õ×ÿND¾õ­oUGÏ=½Þ7Þxã–[nùÖ·¾õýï_QZ¼ˆôò«áž^oO¯÷WWZ;2`ײuõ×ÿÎ0ŒŠè¹§×ûÿðªªþèG?úþ÷¿ÿýïß0Œª®‹½ÞžâÏäâF»òŒø¦Î¯e¿+[@[Ó;ö–ˆ"uÂt€kP+WØÐ_ÿ»àƒÿ‹=_YËZqówÞyòäÉ>úÈ0 §k'zyAöž8ÿfÿƹüÁ¯Däö›ûEdüÊþM¿†õô·å(؆Z|7A{îÙ7g2ǵ5–_}ñßs“qs± £”â={¬§×Û³/ü€µ}Ÿ¾,‹»ÆÓ"ò½Gzzï¼z¬˜´~kÒ–ÆîõNœ-t·í8+²¬?` uöXOï±·¬§åÇ}kò‘DD^ºÏÊ=ÛÆil’p‰Ö߈»=¿ýöÛ'î¿¿NÜ,"ü×3"òEµ¯lëÙc;Ÿ<#½|e-{ê1I?94q¶¸Ïÿݵì©ÇDÒãñ³»'ÏMùDÄ7u~-þMµÔý¾ïI±{’ÿéþ—DDúƒ?\Ë^YË^YKðIúɉW–åÇDDžZË^Y;|÷†'ÙÈÐZ:÷ôz8ðÑGÝùŸÿóiè7×òÖÏ^‘±¿Ý-"wÿíAyág…h«6£áî IßöD!,.$’‡žHoí$ÐuZ:ë4þêí·'Eî»óÎç>ó™‘Ú‹ÖÝüöŠÈ¯ŒŽ^uçûüÍ""²üjxç“g|Ï¥NWàҚйXò[¬oV4MTõ3o¿-"OÜyg­è¹ÿ£c’/(²'q7œB®Ž¿ûAâc«zDDDVrï®s”MN]§¡³µrs.—ËårßøÆ7ìתúö:Ñóîɵ—ÇäÌ»l‹Óí9|þ¹½ò½Gzz½÷}O|Ï¥&÷l`>ýû'Oø$ýäÕ=oÏÃ'|"éñö嬲æô“C=½§l3 ?··t™`qóæ& €®£ÈMçÿâ¦OýÕW®ÿøòï>|þÏÅ™ôéà¾o›¦yõÒ¯ëñ|oö÷¿ÿ½ˆ|ãß0 ÃZ¼ÙªoÞõeÿ="ªaÜyç"râí·çÖ²[ùr*¬¼²oè‰ôÁSöËû¶ë}¾²–½î†/ØßêLúôȃ®ûæ£{Yk8vz€ ã Üݪc°ž7É/Kî-ùãåOˆˆbnê§Núè£~ô£e2kKñºÀsÿ˜<-bÏ=ïú²SkHñ+CO¤÷ž8·}ãft31·à–(Vy†aý×}úô銽çþ1¹ëË~QUyûíî¼SÓ´Íq=»'ײ“[\SZ:[9æ‘ÿøm«ÊYýïªìú²ÿ}MSU5“Ɉüo›?(Ðf-»÷Üÿù÷uöÚ–v&n@Wjý-QW"tBè 4¤eµÎ6ª§ö=êÀ6´~èœIW®7`óXN€®³Nè¬(J{ælsõBg²b5÷ú‹žJj†Î#>ÚÎy ï?ÀvS3t¾zé×íœ*ðþl7,N4„Ðh¡3ÐçZgÖrÀ5käÁG/<«y™ æ»g+çt 6€†:%×Ýð‡j S„Ð(rŽ› ¶,t^Öا/×ßÒÄ ›m‹lÅLZ8f›ßÃö̼ý“Ù¶îåtðªè®øØn¶í§ Ý 7×Z3c½ÐyY ×ÛSø™8Ûò6 ë¾Ž[5áâ8ðì±âçÕ3¹Øâ)¹Ûöü[b£#¸ï³nÃ+jäÛümÏô¶îjîëZÊ7×Z0£æ %¾©ó¯ûEdY`—wâìäž–Ns]ýÁ¾ÖÞ#ná˯†w>yÛ©µìÝ""òÖä±·äóÍ lm8{ùi¡M¾™|:¤‘¸Y6V°Ñüṩ_ýï…Ä@>µyì-)Ï”ÿ&¾Ïj~ÅžC(õ-ßž·8QLrÿ¼bÀª]b%YËÆY~5Üã8þ²þÀ>ý•IÛœ+›ÙÆ?ëüºïO—Íå•èx:=¾³×ûÀ«+•ƒHù|*&P1fþ…—XÏÊéˉs‡ï.<¿{¢ð¸UïáºïRåá —õö›ØgõZyeŸ­{þ]uþß§+vU½iS­þh*zU|”üàJGÜWów¡0xÏ®f—ê7Á6ÂK¿©~Cª^~­³¥}ŸZå”×üõ‘-ù°ÿß³}úrI.7øAÔ9=êÉ,ë”Ú/NÔjc¡öÉVñ‹¹ÎyRç[·•ç³ý‹kcß·¶‘'=°ÎL:÷¿@¸WuÜ|Ý _pl¹ÁZçþ›¿˜þͲ8±kü‹od¯¬eÏ?wá¾bU@…ô…ÿ³ÚÈÑâÿ€[œØõ›'Ö²WÖ²WÎùOE+þÇÜÊ+û‘7²WÖ²WÖ²“_]oײþÀýrj-þÍ~Û÷Ç­6W޸퉗Êç–ÿ¯›½²vøn‡i”¿Çé5–uÏï½rnÊWvŒ¾oƦ|¾©ókÙî_©ýFUO Ö˜öûê}:Ë¿8•¾ÍÓ_§ÅæßÃÞ¥Z¬óáƒ/Ü?!Öëϰü»jÛRêR±Ëá䩚jõÛètÊ•>JÇ÷¹ö·¬ÿ§'o;µ–½²–=u{ß…ÒàŽŸ].Õo‚m„ƒŸ¯nVõòØÖOÍáäqøkýúlÅ7€Ãájžá|õ~¯ë~ÉôŸx쥟Z1ßÙÌ iN_D¶N¶Z_žõÏ“Ú[z>W~šø¾-Ÿù° üšÀ¦8ÆÍµ®l `£Úò¿òM}wˆHÿWý¾'3oå¿ìÊùü÷ôÛüæ«r`ùƒ_ÉK/ô¾Thtðy5¼óÉ3"â{ì H~䪃þâTÅ®ôøÎ]O•E?VKýb*Ë÷ùeÙ]ú¯ªo*¼§ð*¦±,eã;¾F{w_y–ͤj‰ÝwwUM ¡1ëó}þæzóÙô{X1BƒgB~ë|ø¼Ï÷ùüƒüö»Úÿy_e—ò]N'OÅT«ßF‡^¶ÒQ®ÿæ/Êø}½rjíð݇eY?Qçלƺ߷u‡Ýð¯ lĆâfÙpÖyùƒ_ÕÎá›:¿–O6Xi¿bè‡uþî4Ωê”ϲþÀþ»/(aIDAT®ä}çZëL£ÝZ>þ›¿˜NžÞP*f“ïaûU¼i Nµ•oõîɵì•5í§ŽE8m¶ ?©vN©Á³wù7•5!m›dõ‰·çáïfÞ’ÅŸ¾›Ï,Ô=9«N¶¦ÏäšÛu>wüûœÔ‰››]a£ÌâÄ®ñ/þ¯Áþþ›¿˜[¥–?O¦Óî‘ôo>–òn¥6b…wù¾úïºOjìuÚuóþø)y¤²¸í®ž‰m´ªiTŒïø˺çƒTç£XïFA&PwÌÂÛ[^.Yawø9ybWiï[“å-7ÿ6þ.Õ>šçxòTLµúm¬ÊUX÷ƒ[Ö'^]Ù=¹–:ồºç‰}L§WQ³Kýì?©Ê#¶÷S[÷°Î©¾ß{´±ê?)ù–¨¶îéQ6aǯ_øédæW_¿«¿f›‚Ú'[½é5:“u±‘ó¹î—¡ã?hûÈ ¾Éõ¾`õãæM¬°‘ßÙ;.""{OœË~³_DvOž›z`—·GDäੵÝ"»¿û\xg¯WD|ôUtôMm·,[ߊö¾¶å;òú¾+í{nJÖÛu÷ÄË?íz@RùÚ»þà·{­ã–fâÀaeã¿‘­|Ë”u#Ó³Ëû„ãQúƒO<潯÷%ßs©V¾Qõ&PsLû€eÕŸ•ú÷ÇÏKþƒyìå+òÁ‰V¾‡} ½KýA‡ó¡Þ´ª©V4U½b5†oäƒë¿YžêyRDÄ÷\ê‡ý}Rï<)3_Zõë³\30.᱃"Ÿ¯ÜUýI9±ŸZC¿€u~}¶â t8ßTÃßU/mýßëò—éô]×ÿUÿ¯žüÍkÕ'CÕÉYïd«úò¬sžÔùÖmÉù\ç˰ö*ÏÉ=óß௠lPsq³ˆ(rÓù¿¼ñSŸ¾ëú/ÿîÃçÿlm­ßºÒÙc=?Ó®LÔ vׄFâf{ÅsÏ›ä—Å8#¼ÒÔe‚Ð=ÞšôÞ÷=ëa$1àš°Ñ¸¹¡3—»{"{e¢Ó“l›Œ›eÃ+l]hCqs­6œ³Î#>ºE“ÚoCqs­«þœ/ å— R°4$_°ñßûÿ}úÆÏ~îñß™ú÷-÷¿ý·¿hÉ8@'ýá²|”_]>:ÿùø·KúÄþûŸþåÿnÍ1þõhÍ8"bš-j»QZ4ŽÙ²Z4N µè¥)­zi­z«·ß‰­l¿—Öª)µò­nÝ»ÔÛì,iá÷Zk†iá'Æ7íúÜûÒZõ‘íxm·)m·¯Y1åOÿ¯˜ÿ&Ê¿‘OÊ¿æþåêÇÿrUD”myÒËöûP[g»Íh¾ÓÛ-xja|Ùª·©U_Ä-ûëB¶ÝßvûE“í÷Ÿámö‰‰ÈöüØZ4/íÆ7vW2EþȿɿþID>)ÿvYþðÿtzNÀv÷ÿ[J<Þ»³IEND®B`‚fox-1.6.49/doc/screenshots/foxcalc_prefdialog_02_small.jpg0000644000175000017500000000710511637250333020451 00000000000000ÿØÿàJFIFHHÿþ FOX-toolkitÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀiÈ"ÿÄÿÄF !1AQTa‘“ÑÒ"Rq¡2B‚£CS’”±³Â$45U¢Á#3rðñÿÄÿÄ#!13AQqÿÚ ?§êÏ”<ÌvÌï^úµå3³;×Òš/¾¶ËmòîM9>¥wä]ÇÁWͽ[ò‡™ŽÙëßW< æc¶gzúFœŸRœ7qNMÏ8õsÊf;fw¯}]òƒ™ŽÕëºv'KùX×[)pÞãðî<‹#‰R6+¦0H$‚771ú+ɹࣄõ{æcµgz÷Õü™ŽÕë´‹ÃæÏ–}lIaâ4ÝÒ­ÁS S á~v‹kb7€ ɹà£ô?ÌÇjÎõï 1îf;Vw¯¡"rnx(ù÷ qîf;Vw¯}sOÍgzú'&éÇ£€ô;Ìÿ5ëßAã¼ÓóYÞ»äNUÎ=¡1Þiù¬ï^ú柚ÎõÞ"r²z8_CcœÓóYÞ½ô69Í?5ë¹EyY=?¡ñ¾iù¬ïWE‰¸ ocç ÓAܺÄS•sG/æ•ü0AÀ‰oMúïôQù–( í„3+­`fiË`xß”ƒò]b'&çŽaôØ‹…†À8Zvé¿§]ã©<Ö¾÷ô(ÞM¼á¶¶ºoéK§DäÜãÑÉ:ƒ.yn”;ì³_ª.µådN5þ“ðRçñ¬DAW w‘ æ’05½Í®A“KÙnj 5½¡Ís œÜÍ?kB.>?6á•-òúBCšöiÍÞGÞÖ×ãÝol^XˆÞ´õRßkðZ×Uâq î$75šs7”•Ñð6åZsƒUÛb³5½Žû›ŸµÒ¶°Fb‘—¹å¢ÅÎ:“mëX±øë­ìµ¾SéHÒ¸ïèMÍõØY$1ˆÍA¹»CmÖÝ““E„ÌÅ<âGA#6yý–¾ÖËaºÂûï¾êìp6)2ÀïfïŒèo®6àº2ŸÌŽW†Ð€ñgYö¿ûtðÏKc‚Ž•Œ Žà,>æºq™ƒyÜHºš†Ž†¢²¡ø‘—b#ŒB#¨|~Õß›F¸_L›ÐRÏ[ÍéûsàLõ¼ÞŸ·>¸¨¢Á`Ï¢ÛíôiS#Ÿèç¨ ­ž·›ÓöçÀ™ëy½?n| Ê ­ž·›ÓöçÀ™ëy½?n| ÊŠ¡²¾íᒑ츋ؠ=o7§íÏ3Öóz~Üø+c›W Ô¡—¸:“kîYÓ·½ª$‚Ù~èÖö?ód³Öóz~Üø=o7§íÏQ‰¸ãbc\øðәϹ¹¶î‹u+RÇY.ø³VèìÓ—[rðA&zÞoOÛŸg­æôý¹ð*~‡¨ý|ß¾¿Ä¶¡¡c¾V´{ëa}x¬Å·øf¶ßá[=o7§íÏ3Öóz~Üø”Zi[=o7§íÏ3Öóz~Üø”AãsŒà[P Àù¢õKGI5uS ŠF0ÒKšO½ÈVËÕšîuOûïQy?þoøGðr‡Ê ë«ñ=Œ5BHœæ=·p¿²}¢FƒÚ׿ٸ⥧QµˆÚß«5ÜêŸöÞ¨UѺ‰Ìïy¸†Ø\8:–^HbuQâ²á&¡ŒŒ¹Ù‰k‡àØîÐkgÒ©Ÿ1ʳ[E£pæ*±4|ÙéžöFëfŒÜýnE´ßËÀ©¨ñW+ãu<‘ê ·³–º‡jêyg‡=ò¹#~š}BÉØ…+ÖºfŒÀír›ÞÚîàz‘VU9$ª’µð@èXÖF×—HÂë— hG»õYňQÍ1†*˜ß µÚËÿÄ›³˜ÙÞü¡äF7Hz ͦ"73¥†pGW™Æy`sofFZoqĸ©”b«ygRÐÉX:Vbcq;$DE¤sɱ‚I ËZHkwž…"ÆIeïvVå­øÞÍ®ÍEPÐݰ$ =ÛäVnÅßæðÌÊÜ%kÈi-- Xò\\ü•ƒ_@æ²CSN[eÅã}¸SÃw¿.PÛ{¯öºBÜú~/ÖŽÀøA„I‡;ÛÓÒUG$áík¤ hÞà,oÀ}›•LoüS>þc–ËÓñ~·ò‰iñ*˜êfc£qp ’ܺ—»æƒU5-Cšé cË]œÀé¯Ð/‡ÒIlÐ4€,©#MÜOZ¯Q†¾Z½¼u.Šî»²Ü-k\uŽMw¨ ;¡Š3ŠÕ’Çæs‹ÝºÃ.‚í>KNàöFL€ßhãí®§¬©œ)c˜É+cÚ9¡¤¹Äh/n=%W¦ ’ž}£ªæÝŽq#†ë-cÖªâ~OAŠÖ ‰fÊDa» íÄ›Þã—è¤Ö-Õ‰™M¬rÓ’[Ë1uÄ›u¬–« ò~› ©|ñËÅ…–؆ñ}úÕ"µ¯UH™Ÿb"*¢ÅìlŒ,{Cšw‚²QÔB'ñ‡ ]§P‚a”Ohk©£ FœEüNëVc±4µ‚À’m~'RµG¨ÚI“¨dnÍ`nÛëqõåî¿GLêXnžIœ7¾BI?TUÃ=<‘T4:´‡µÆÀ…*«‰Q G ©¢t›15V úI 5šØc!±µ§ØÚO‚µÃæ¹Ä̶×Îq8ß; lr‡<šëY¢Ã^oÇ‘Fé1«-9óØoÐXk㦟+ÚŒn*Z‰"’žr#pÍmƹlzÉ„ô/ŽÀö‚Úz’K²†å'NžŸý¸½R¿2Úª(ZË»XþVãñê^ÏMYQZãD‘@#n\Ž`»®ëïÝ•X§•0‰c¾G}’xŽiñœ~\.µ´ñR²[Æ\éKmrE·D‰×gÆmÔ6´´sÂ÷>j©$tkžÂ/qÈ.¬- OŠV: )#‰¢2üÍ”¸ïÖÊ9VõYö|f½HˆŠŽ}¦Áû+m-ì©s˱òNQ{÷KŒ2WˆàŽH²‚Ã#€y:\r¬ª-³fŰæÙŒúÚϾ¶€·/‹±Úx¥|r1ù˜Ðâèý¦m¸ñÞ¶ó ŠvLÖ¹¡âà:× Ì_(¾ûj«b-ªvPÚ#j£ípß§Z´ªbu‡Âê«{Cn“!6Íaºé­ôLë·=æ>Vó©;HU^È"l†òÚn Ýa}Úoºâ}~¨ÿK‹÷ƒà]¤©¡”‹#kÈö¸ßUËÒÛsiþçn8¾«~±Îô‘Wa¿|òå·û»ÔO¦‚RÓ$¼´æ˜ *—æGÀ¦¾óºÊ£¥§ŠM¤pDÇÚÙšÀ ¹.¥áóM}çu”×ÞwY@B"á5÷ÖS_yÝe€Ànd[¸‘ð^kï;¬¦¾óºÊ ‹ÞAÆÇ¥bšûÎë)¯¼î²€‰¯¼î²šûÎë(šûÎë)¯¼î²€‰¯¼î²šûÎë(²cA.{ÀšÿÊÂY`„4¾Y½£”ÒI?zgÞñë^I¹$ž•®¡2d ¿ÝÌ/¾Ü«8*)ªX_K¤h6.n¢ö¿/J ‘c­–j†fK[~[‹ò¯ešžÓ$ò7;ƒq¼žÐzŠ/> ÊçÂÆÀÃ[üÖpTRÔ‡: —H줷P åä!H¢Žq,Õ ­ —qßìµßÕôD¢"" """ """ """ Â]¹Œ¶ #c‰ÔÈÂáo€!P©¡®«c[%d ÊìÀ²´ßâ$[$A© –'1ôMp7S>ãó´Ô5Tql©æ£Ž=ù[Lë1lQ(éëc¸TÓ™%{\NÀØÛZÙþ·PÕaõukf©¦!§0µ;†»¿X¶hƒPüY# t”… ‚›¿B7ÿSzšžŠ²•…ÏHÖ“sýÙÚ›Zÿ÷:ÅV¤§–;¦•’>i3’Æìµ¶±'Ýú¢²ˆ?ÿÙfox-1.6.49/doc/screenshots/foxcalc.jpg0000644000175000017500000011201111637250333014555 00000000000000ÿØÿàJFIFHHÿþFOX-Toolkit.orgÿÛC    ÿÛC   ÿÀÿÎ"ÿÄÿÄa !UÑÓ"1Vt“”•²56AQSTWÒ#28auv‘–±´Ô7Rbqs’£¥³Õ$%34crƒ¤µBC F‚„DÃÄðÿÄÿÄ@QR!1A‘¡ðqÑ23Ba±"4bÁáS’#c‚ñCrs¢ÒÿÚ ?Cìÿå } ÿÊÆ­ƒµ V”IÑà.+ˆž¶–á3d0´–Ã9*;Í«/¶+0I!Æ0_»Dzí¨Å™Pr+K‰Fl"K®’âך–óŽ-G7ßWeT#›TáWŸ¸kÅI ü~ë‰ÿÊ€­EÏýéŸ(1ï-EùÛ>Pb÷ÃK”áÙÿ‡‰ü{øP娿;gÊœz+q3ÿ{gÊœÃ%7öáǽž><(rÜOž3åN=帟½±ÓyÊ/—ON öâ¢äàœÄÿåcÑ?ùXK7œ¢ùtôãëÛ7œâytôà¿n(¹8'>ÏþPÇПü¬%{d¦sœO.žœ}{d¦sœO.žœMûqQppN‚ò±ô'ÿ+ Bä¦sœO.žœz.J_:DòééÄß·\¯gþz™ÿ‡ ^Ù)|éÎÓEËKçH~pžœíÅEÁÁ:‰ü{øúìññá(\´¬ýÔ‡ç éǾ٩\ëÎÓ‚ý¸¨¸8'Q?ðãÑ?ùXJ5+aùÂzq蹩\ëÎÓ‰¿n(¸8+>À€n[ª@zB Œ>ïú4nÈu[¦Vî”7©:”­@Ìq#¯Òiñœ}éÕi!vRàÅ\Ên‡•%´ ºi+Qi —AR»¤éBΠšÆß¾ Ò'9.5Nœµ¹DR}$iy•²£ÁCˆK„ÂyŽÛ í 2"¢®M ÀYz;S–—ü€ß jœ€ ÔÚô§Z¥9)Ñj¡Û?dÆÁmšíV, }ÅKv,úƒp¦Ô[B‚Ti¬ ¤ÎJûhÕ¼NHϺJ™S­ƒnµÊOHqÙ“5ýËMkJ3J3”V´$ ÀÍC2”…(+Òv­ØNGs•éÒÝIu J‘'Y¨©i SrN¿¶·§z2?ï û³ˆú ÷•1O5S§<ÓÈ-IŒóé-IhKk@å˜B’ •$¥IJ„ˆî¡«‚ƒ»(•mÑ]º.WéV»ò&hczÁ‘ hqãšS¤¥­ê[î•–µ¨ Š”œòÆTQRý>—)™ÍÅeúBêäË*-Fc±´©d%¤ä£šÉ9'2èûXƒI¨È“Lä­:û2˜Œ™ [q$²}²·JÊ“­Ã¥jZ YÍ$ë{X€—lò 7pOT…î]aR—(!Jï;—T’X9! •wZªc¾»͘a·½ÊÂ)´mýÿdá‹2Ttɉ:Ì-sÒÛ ¬6ûŠI!CN`ûá8‘kMªÝi¡ÐK>i1'% mÅ•­Øì¸S›h![Ù/JËRÇ|×Ô}­F¦B—ôÆ“Ùa¦Ö°¾ÃL–w.¥¥)eC4†òQ%Cty)À¼Ð6Ę“»)¨‹Z…¸ wƒÃd3BrXÍiN£’µ6JŽh< x•4#³èÊŽÿòž· Q^‰pSßz­ s\`¶ò¦ËÛ×J2RP^zIQ „¥C%+åÍG±ê’¨RÙb–†\S¯Ê ‰y‡d´QZ# ¼ÖœÒ2V”f6±Og±·f€;|Óé+:"=½ÞDÿkÅ£¿wº?m¸82kÖ6Ÿ¥ lGªT„31ø®„¶ø„ÆeÆYm¨)mÍ9«RŽ”’¢s&Dx•÷¾Øú(¹‡OwnµRÍV´ˆrgl–Ýu×÷EÍÚ[mN¤Ožö$nTX´%T¨÷(ªä¶Ã¨ì±£Z\P9¨ñÿf{Ø­(Õ&•RP¥ÈûS­-§¤ K©µ¥`ýÊxŒmTv‰B‘G]:( Ài×Û}ÅG–┵!+JGÛX'Þàľ3¯Ù³ }~¼•[¶([·÷¯Óèœ)hUA‚">…JB³S !kËî‰Ȅñ*Ï-)(§Él5-mǓ٠§ ) 9q 9gžDäHÈ ýæne©ÐâßjRRê´RZ¸%*€f¬‰ÏJtâyQ¥L\ƒR¥²\È© ¾„£<†d'<†g3È ò €hø¶Š†³°m]B¦S\¢CqÊ|U-QÛ*R™I$éIË\“KæØ~A=-ïp ø³~¨ÆÃ¥Eæ˜K‰h»¼ûb‘¯@CKp÷:“ž{¼¾èwóã–GÅNN$X!­©;÷ §rõ0 1Íh 4Zü“KæØ~A=9&—Ͱü‚z1šæÑoÑ«U«mGŠë±™l˜ ©j\‡PÓv™EcRÝhw¸j$ä8U¥ÝuêÃR%P,[Æ­‰²¡¢lzU9->¸ï¸Ã…!ÊšW–ñ¢8¤ÿö|èZr Se®ui]­xÙŽÐß*Ö ¸ nà™9&—Ͱü‚z0rM/›aùôbÚÍèÚµlÆøJR *U:”>'ýkÃàüçâ㚃r*vÐkv¹h-4ˆP¥¢^ÙxHT„é-æ­%=ŽNzÎzûÃ..n•c¢¶ ³iÕ áZR»Ç … –k˜^Ö‚ýÜT¯$Òù¶OFI¥ól? žŒn`ÆËè™4»¨yG%§É4¾m‡äу’i|ÛÈ'£˜0_DÌy¢êQÉiòM/›aùô`äš_6Ãò èÆæ Ñ3hº‡”rZ|“KæØ~A=9&—Ͱü‚z1¹ƒôLÇš.¡å–Ÿ$Òù¶OFI¥ól? žŒn`Á}1拨yG%§É4¾m‡äу’i|ÛÈ'£˜0_DÌy¢êQÉiòM/›aùô`äš_6Ãò èÆæ Ñ3hº‡”rZ|“KæØ~A=9&—Ͱü‚z1¹ƒôLÇš.¡å–Ÿ$Òù¶OFI¥ól? žŒn`Á}1拨yG%§É4¾m‡äу’i|ÛÈ'£˜0_DÌy¢êQÉiòM/›aùô`äš_6Ãò èÆæ Ñ3hº‡”rZ|“KæØ~A=9&—Ͱü‚z1ÍÏT—–)6 ÑU·Žjn¹ TÃíºy–KâKÍŽ%%¶U¼6ƒI*§K‹>žÄè2Y•SIy‡Øp-·  V• IG è™4]CÊI¥ól? žŒ“KæØ~A=ÜÁ‚ú&cÍPòŽKO’i|ÛÈ'£$Òù¶OF"Ú¡Ô/-»R,ö®êå½Ûn£Rytzó¬É‚Ò2t„És¼'.<2Ãרø¯¦]£t—ྉ˜óEÔ<£’Yäš_6Ãò èÁÉ4¾m‡äцo±ñ_L»Fþèÿ/Áö>+é—hßÝåø/¢f<Ñu(ä–y&—Ͱü‚z0rM/›aùôa›ì|WÓ.Ñ¿º?Ëð}ŠúeÚ7÷Gù~ è™4]CÊ9%žI¥ól? žŒ“KæØ~A=fûôË´oîòücâ¾™výÑþ_‚ú&cÍPòŽIg’i|ÛÈ'£$Òù¶OF¾ÇÅ}2íû£ü¿Øø¯¦]£t—ྉ˜óEÔ<£’Yäš_6Ãò èÁÉ4¾m‡äцo±ñ_L»Fþèÿ/Áö>+é—hßÝåø/¢f<Ñu(ä–y&—Ͱü‚z0rM/›aùôa›ì|WÓ.Ñ¿º?Ëð}ŠúeÚ7÷Gù~ è™4]CÊ9%žI¥ól? žŒ“KæØ~A=fûôË´oîòücâ¾™výÑþ_‚ú&cÍPòŽIg’i|ÛÈ'£$Òù¶OF¾ÇÅ}2íû£ü¿Øø¯¦]£t—ྉ˜óEÔ<£’Yäš_6Ãò èÁÉ4¾m‡äцo±ñ_L»Fþèÿ/Áö>+é—hßÝåø/¢f<Ñu(ä–y&—Ͱü‚z0rM/›aùôa›ì|WÓ.Ñ¿º?Ëð}ŠúeÚ7÷Gù~ è™4]CÊ9%žI¥ól? žŒ“KæØ~A=fûôË´oîòücâ¾™výÑþ_‚ú&cÍPòŽIg’i|ÛÈ'£Eƒ 5§#Ca•™6ÐI#J¸f,)ÖJ,š,¨ ¸ë7ŽHŽð™XìmûaI|Ó¸e¤„}¬¹$“Ä»O÷ŸOª¬lÑñb¦ã½ež†Á,òÜ¥íïp ø³~¨ÆÁ9Tbñ˹•ðåÿðßü#ÿûà=ìkÛÞàAñfýQŒMr“mÂEn»QbN½Kòä/Cmu¤jV`Vâ™9f¡ßïc‡§çÉ̵¢¤µÿbº[áþÊ¥Ú ¯ÉõÛî·g[5§Ôé6´zÔIÏ=­úf¥LY®:à„¥.B”ÛjA^E¼óÌäýåP½h1ïÆ(ô›NŽÕ.Òn«¾Y{M5.jܬºëyÅ¥*ìA¬•IWÛ+[ÎçÙÅKÛw'ÅØšyb#MS{*²Óš''²µUäg[ÇÎù¼™V¤¶w|U¬¼î}œT½·r|]‰§–"4Õ7²«-9¢r{+U^Fq¼|ï›É•j@ûgwÅZü<+´ÓüôüúýkÞt(»v?ÏêòV×çmE]F‹>ß·[ [qjÅ&ª·ËÊ'ƒPxª"û·†b ,€É‚°¥ÌXŸÃåãø†þ-G…ÿ{lΩE¯S(ÖÆÂ~¨SU‰·&õõÊÐâ[œó"›[¡N­zTTµ'Q“aì~«M¸¶µv×è3ãÔéNÒ©Q[Àë y·')ƂӘ֔ºÑ)Ï0A<3×¢¡eãoáu~Ÿ…‚‡ð·ˆ8ó©$ËŸá× R”Ø;êIý÷ ›”6Çm³kÓ+s6odÈm7]iäÜ8T n§+BÃf/Ý%iJAßæ¡ÄiĽ¿@´n evã¾éÔ×êÔÊÅI©9á-ɤÇfK¦1mã’â%1w%M”}ØxNªÈƒ,&TÌ8ÌÇmN¸òËa +qekYÿR–¥(žù*$ñ8«Úv­Z¿»T¶¨óªtv,ù0vD} +F‡’¤éQ*‘$Ž8÷+Ϫõ‰·B(ÖUf;;TíCÊp$DKI’„4ÊÝq䲬Èu¶Ê€ÎK­äÒ\qö_6^ÍQ}¯Kzm1ø-H6@Éé¡Ä‡ ‡sJIuÒ²âÔR ”µ3'‰g"3)”ûHe×Ã`8âVP…+¾R’ã„À«.ùÁ$XL©˜q™ŽÚqå!–ÂVâÊÖ²þ¥-JQ=òTIâp!Vû, Z3l;r÷¸éÔÔÝ2Šº•mð–gŠ’”†ÝaOŒœB·åQÌ|Â@ûF€µã ¶àí±Ki™U‰ÔZÅvm%O=TÆŒv%¬¢:R£3|‡"nÔ·siy<¤„…5¥óÚ«í³ÛOµª?.ó¯`5Ùq»ÿm§_Üw=ÿ¹áÞÀí§j¹_~ºåµG]RNï=P2Ý©µ·©Í:Ž•4Ò“™à[AŒ„*³dÕ¼›Þ€ÅÛín ¹³ÊT¾XaqÞSÍH ì²êIÜ¡1ril«%¹šþä¢vå½*tç®UXf;ŒßÔZ-5% ¥²ú)‹y”;µ?)YñPD2v•iÚ²y'²mª;܃§’7W'iÓ§qš~Õ–íiË- ø†3N·¨k)«Ì¡ÓdTÓl¦cÑ[Á ºBÈÕ¥.¥.žAI FxªÊMJ¬Õ¶Å‡6¼‰²î–ObP#Á3mªÃÉS›ÙÇp–’^@Rr.)N6RBPæpô+Žâ—UvõMeèón[RÎC‘Úa’Ä#Pžó-¤joxêÛÞ)cSªÖHBSrÖ­;V±Iº½µGŸ2—,E•§Y­KRÝФ‘­JqÂU–d­Dž'í;URdÈUµG/LŠôI. >ÃÎ)×ZYÓš·µ©'‚”¢H$“ ½“Z¼9n=£ëy.3zš+µgàÇrKñUCTõjJP–ƒ©qy!I@HÝ·­ aËk´«zK§ÁƒL¡ÓaŦ:§ ±#m·j [IH !×)ȵç%Áƒ# Œ0`B0`ÁÆŒH³éïÁ™Qe4¦_aöÂÛy ) Ià¤H ð ã6 UmV=¹ôf¥ºR«[58±Ûª8CÕ¹ÒPÚH†òòPhG-™­Z7 ^ð­oHy§M›Qê4KM1*ò#½>DÉsåÀ†[rL—d)¦óÈ” ºP’Bs JsÒŽÍOÙ¡ˆtPàÍF£º=˜YìPÀ‡»Ó£ °^ì½[ìŽã-×Xø¨jªÔ`ÁƒVXvW÷ÛQ¿!ë·R±ÐØç•ýöÔoÈzÇíÔ¬t6# Œ0`B0`ÁÁƒ# Œ0`B0`ÁÁƒ# Œ0`B1Ï<,ÞVeÞÌ(íÜ5ͩݚ­a $M¨A`WÃ1_-n2؇Cj%)ìvrvœºð­;Vå.ï‰lÑØ¸g²™XjI›% |'Z’mð$Žá?À„¯¶/ýßÿSÿõbœÚ¸ øÊ}UbãÛþïÿ©ÿú±Nm?Ü|e>ª±·G~nšÉ?ùgù){{Ü>,ߪ1¹;{Ü>,ߪ1¹ŒÑ¾#¼Ê|/†ß Œ0aiˆÁƒ# Œ0`B0`ÁÁƒ# Œ0`B0`ÁÁƒ# Œ0`B0`ÁÁƒ# ¶`Îz"–šˆ­G2§a´ê¿›5$œ¿{¿ñã?,Ìù£cýLGàÀ…!Ë3>FŸèØÿS,Ìù£cýLGàÀ…!Ë3>FŸèØÿS,Ìù£cýLGàÀ…!Ë3>FŸèØÿS,Ìù£cýLGàÀ…!Ë3>FŸèØÿS,Ìù£cýLGàÀ…!Ë3>FŸèØÿS,Ìù£cýLGàÀ…!Ë3>FŸèØÿS,Ìù£cýLGàÀ„ßQ—Uʽ&ߢK­¿AJED±hmÕ6Lt•¶5<[[kË Njå‰u]žÃ9é·e7&6§'¡ÎÀÕ%A ÞÙËJ”~%;äcØô´RëÕ™víñHƒ¿QEBk/ÇKî¶æé¦\ܹ½HN¤2Œµ¡zTTx‚bl’ÚU-*§|D› 6©ÑÑ¡ ‡Ù­K’—spï’¦KŽpœëUZ§gìù¶ó—} -¢Qˆ¥•@È<•ÉÝýÖ•¡YwòROxŒkG®léØ3æ®é¦Ç‹MœäÉf-‡›­ ©¡žZV ÄWÄq v}N5H³MÿG¹Ÿ¯ 2†ä‚· ÂðFጰB’¶ÈîRR"jû#§Ths)Òv™]K×Dt'³%ŒKª:\ï•’J O,OÙûÕaKjí£.iy¶S:Ôã‰Ö„»âTž ø ü#Ók–ªö{[»( ]qª#’\h¢d¾ÊËje½L€TV’”çQË#‘ñlZ7djø¼`*BnZ–7m$¢a²Ïä”¶Þdp#Q*ˆÞ·­èt½›Q-E^ôÉ+¦M*\µ²€f)§ÒúŽïp¥¸ED«Š•Ã,€*ЍåÝv³ŽY-ÓãÉš«á¤IŠZ…"uF\óê-ä””6 ?ŒA¼q*ŠæÌÖY ÞôöC«e¢…@PZÒÐuI7–a²•ÿ2øF'ljÚvÙfßbÿe¸,[Õ 2 ô)áÙ!¤!zÉ-2Èe( ¡kÍZ”U‰šžÎ­Ù©Þ›¶—X§TXmøí$åËi¦{35º¥©ÆÚh¡:Ö£’ÈÕH*˜!T¶w2Ÿ"|KÊ„üX­²ãï´¸ m¤¼HiJPo A þ1 ñŠ]kf±]ŽÜ›Ö‚Ê¥°dGÞ*C­…•$–ò ((pøAøŽ›Ù¥½¢‰TK¾“ º}JºD7#¡ÈñZ‹ qZŽâC©S¨JœqäI!ÅgÇ,e¢Úv͉J¨N§ÔݸgÌ¥5I ìˆûîCï<ñÔ´'íKqÇ2Ë‚R:@À¢¥JÞœŒ«tªV1(–È}Ó$•2\AVéæP´¨fx¥`ü â®Ú¸ øÊ}Uaò¯±š-¼k1*µHâ8©KeÀL§‘t\Ë2t€„!9÷’”ƒ{O÷ŸOª¬nÑ¿š‡æ³O~UþJ^Þ÷‹7êŒD¹W¨)FTfÒ^u(@‚¥”:¶Æjß'3ÜgÞøq-o{Å›õFe÷‡ôÒj{'â9…ŸªÆŠèríswìû-îYóèþŒW_ƒ–g|ú?£×â/ ÛbŸ6™e·2ž%-ôV)i Ep!×Òª„t©¤•))îÒJR‚HQ€N9¢f)4ªÂÙÈäTûË3¾}ÑŠëðrÌïŸGôbºüS÷=ïX§] ªK¶k4ØÔ«J±Q0§KŒ9l®“–á×@)IÔ¡ÃxrÏ5c->ø¸Y¦TæÍ‹ÙŒR;õ<»~e)Uº]A‰©**T„©-T—êÉïï£ÒµLñ4­~ÊÛå™ß>èÅuø9fwÏ£ú1]~¬:¼šõ¾šËèi–帥1½ˆÜ–ŸÌÿ·J’½ihVm÷Ej™Å Ô`iT³;Ug¸î©”š$Š’Ã¥”æ–Å8§R‰wüdfr9€÷±!ºÚ'ÉÛVGÕÂfÒ}åMÿ§þ"qpaŒ¥:ÔW ’”·[Dù;cÊÈú¸7[Dù;cÊÈú¸mÂEüªíCj6ý·LºªT’¨Õ)ÒNb*ÜyÆ^€†Á2t!ß¹’G`ŠóÅ4GŠx­­ÖÑ>NØò²>® ÖÑ>NØò²>®*ÛLrÒ¤Î[•M‘6q&§VžŠlI%P=.Êt!Ie[¥ÉB[©I m.ior‹´¹w%.‰íFM¨ÔjíTÉúÁjn ”E}mIm—TêTë¨-ÚBÛ%GAo"b¦ö6?e/ºÚ'ÉÛVGÕÁºÚ'ÉÛVGÕÃ=9ç$ÓØôG¡¸óIZã>P\` BФ•ñÒ¥ ÇGfÄ_?[ø¸¥vý¶G†ôš»ÔVÞ+.¾U™Èç©HËàøþö\uùfwÏ£ú1]~'îÏp$øúà ˜Kæbƒ°¤E›ŒÓ@T§,ÎùôF+¯ÁË3¾}ÑŠëñ„Æ`&íºnª³ª1C¨74꤈)Ò¨‘ä)k,- qeO”÷D¤% Ò”’²º‰˜§Š«g#îè¬~YóèþŒW_ƒ–g|ú?£×â©¡\—=LS¨PfÀj ã•€åF|%>jäÄN¦›q¡¼p8…©IPH)PCFý±"äslu–jsb¦-êkžÂ\Zc¼·e…º¥®-¬n’VÐÉ;³®×ñ…v«©Z»½ÊÇå™ß>èÅuø9fwÏ£ú1]~"ðbž*.)~:>*J=rcÑúg0µ8 0çÜ8¦ÏþÿƃÿÆXúå™ß>èÅuø…¥ûúY_µ¿ŒØ“5ê];êS–g|ú?£×àå™ß>èÅuø‹Å3G—RD•ÕwK›Å蜱*¶§i…“WS‘²F¦Žá?èà%e*Ío›1ñVdÜw|ݾ¹fwÏ£ú1]~YóèþŒW_Š’r]3ªh´SKŽ©Ò+ëzTô¿'p˜•4²‚”o^ áДæ rJJs±«>جª=ÁØÝÊÔö&n5ëÝoJôêÈg–¬³Èg—xb ÄaÅš˜oÑË3¾}ÑŠëñŠ}Ã*$¥95’†SŠ ¦È3—úGàÆ†4n{UwÔ85»ÕDìzïV…r3pëS!´TQBÛIQâBT@ÏððÅo_¾åÓ*nÆsrqÀ€˜…y%.-3½Oã>ö,ë³ßUOÇ^õÎ(¤{ã_üïþÒö6MDt8ujöÚN ÜчTPœ8Œl·ÿáùëðvËþ˜¿æ v\ö²†Û~Cú”V¸ï­¥è\ÆP°‚œÒ¢3Ž9훌H^¶'³ú5Œ.»Ü+¼ú«‡¶[ÿðüÀõø;e¿ÿÌ_Š.³4Ù’¤ª—2h“ªKbd×Vò9g ‡\*RBƒ¤IJHêÕŽ%ÓYù¡æ7®!èLÆšíLŠä¿¹Ërñ*^ï4¬”¬„÷$j7ñȨ;<–s¢4S\XöûNÇîŠøí–ÿü?0=~ÙoÿÃó×⢳ª5I¯UâÕ“=Lž"¥qB‚]Oc²æ²I—IÓ™ÓÁ9«-JšÅ ÜpiU¡šF=¶ƒ3êŸåíEÈñ]}a%- ­@@ãðû~6fíLYFp´VËŠBŠ`‰.oÅ[\÷g‹¹êœK\~øgøÓž±Áã#Sz?áín–8b}S¿l·ÿáùëðvËþ˜¿æ¶ ·ó °ÓU7Ñ&ªPìzlÃçÒ"ÈV½ã|’•T3Óð÷°6n14¯ÙDm£a²ÕÙ;¸ž&Šìí–ÿü?0=~ÙoÿÃó×â„¥U§A·%©—Ü‹þµ1£F©¥éó"$4’¦ÔÓjS­KKŽ$M8•…iHN3Ò.z½]šk4æb"T„NqÕJeÖÒè‰! ­’áXVjÖ[È‚•ž8¹˜˜Å!º'D†¯™Ä kÄpêéÛ-ÿø~`zü²ßÿ‡æ¯ÅE³gß•³ª™/8óÏR£-×\QR–¢ÒIQ'‰$ñÌâk3q¥Vˆ~Ïè×°:ìíÞ}SÝGjSÛTf!±éSe7„=M·©jË5(:¢ãÞIÄ¿.m›í:‘õ1R½ï†ßüuÖÅنÙŠáRV­ #%–³©õQ¼¹´No¶<êGÔÁË›DæûcΤ}LIa~ý©MŠº5&ž÷bȯÔL0 -Q#?!N! *^˜êJuf”©aE+ (Sh‡ŠÊí&Ñ[OªÞåÍ¢s}±çR>¦\Ú'7Ûu#êa0]î[q« nê—M›Oލu j JT¾Å§KL²ód‚PBrÔ…æî•'FÝhnPnªm·‰É®DŽ¨â¼…MuÙ KAq£Áy„¸½%Å–Õ“n¨7’S®o"â•à¤)RΧø4àš9shœßlyÔ©ƒ—6‰ÍöÇHú˜’ÁŠßÄÅ;UÉäê}TÍŠåj}»>my¸ H)†™D­H(Z$¨¬žh8qïçÂ7iþà3ã)õU‰ëCÞ­OÇbú’1´ÿpñ”úªÇkD¸ºb8¯!§¡2ŠÆ Ø){{Ü>,ߪ0¡W¨Sâ8–åNŒÂ˲TëÉI#²žã‘?€á¾Þ÷‹7êŒM3Z¬4ÒZj­9BBR”ÉX ¼Ï€ÆYÈWŽskÅdtè mi¹U|µFçh>rŽœBßK‰[£µÁAŽãs”U9 ŒÙp:Œ’ÛíCˆmY•ÜRAÅáËÕÎy¨yÒúprõsžjt¾œbT5´³CPنüÛ‰×=ÑfÕ#"ˆN°Õ)Æ‹¬? ¸Þk˜â2RšhHVa$ µúUƧË-©Í¿*,!©Sk.Ê}* :ÐÇ\RŠ{$R ŠPDœ^¼½\皇/§/W9æ¡çKéÄøC™I'çè©ú|›j ¹ÒbÔ ¶íJ@“)]–ñÀÓmdUîld2Î}òIÚåª7;Aó”tâÖåêç<Ô<é}89z¹Ï5:_N#Á ʺ¸fè©;â|…±" ‘åI}M¡¦u+qÅÁ)2ÅÑŒœ½\皇/§/W9æ¡çKéÅÛ+dR©Œ‘²)k¢Ç…«ÎÐ]và¦×!ÜÕšúdY1zš˜«Þ4ú˜ZÒ´ÈeÑ÷QÛ €ãÇŽyz¹Ï5:_N^®sÍCΗӋ zqL´ùº*Þö²ëMÑiñíY‘SbzêOW'VDY¢ah°_ÿsÓª[.:ÑJ›mÚRÞï5ͯO¤@‘ZªÌ¡\ÎÈaª.¬Š“Ò}M¸ðqR¡¥´ëu´+B°ÚÙB o/W9æ¡çKéÁËÕÎy¨yÒúq7U>ãÑjÓ¢· žÄ&Tò›ŒÒZBŸ}o8B@©Å’¥«‡(’OIÆldåêç<Ô<é}89z¹Ï5:_N#ÃýU|'êP׫ìǶd½!æÚm:5-ŤwiIÂ-Q¹Úœ£§·/W9æ¡çKéÁËÕÎy¨yÒúqGJÕ-òƶº*§–¨ÜíÎQÓ„+‡:»[rx¾íÈ}öÚTV¦Æ|²JuÈõ·ºu+-C T²D“åêç<Ô<é}89z¹Ï5:_N!²vw;¢†èû&¡ý“D•D‹ à®QÔí?6 ½oºí±£é@ܧu%KÑšJB–ûœÐ%)ÑìÚ}m5X Å}öéÉC´0˜í©Jm­ßrV­'N`(€@$bëåêç<Ô<é}89z¹Ï5:_N(s ÈóôUO-Q¹Úœ£§-Q¹Úœ£§·/W9æ¡çKéÁËÕÎy¨yÒúqfUÕ£7ESªS£DßTb7¼T•£[é’e¿’†gˆü8úåª7;Aó”tâÖåêç<Ô<é}89z¹Ï5:_N$̤èàO½ÑU<µFçh>rŽœVPí Qª¦{wÕ®¥*bæ˜ÎÇžäMúÜ.—;U2È;Åqܯ% ˆu/W9æ¡çKéÁËÕÎy¨yÒúq-”³¹Ý¶@·sú*R›ͧÔ›Tßc³7kììôöSé}þYwN¡*üd21·C“mQèéê„aÀŽÜhÍvXVí´$%)ÍJ$ä’N.^®sÍCΗӃ—«œóPó¥ôâ<êPtuw½U<µFçh>rŽœi\uzK¶ôöÛªCZ×Ä¥)’TJN@ ñqòõsžjt¾œ½\皇/§‚” 3tEÙ盛ã¯zçõµ‘#ÜËD‰L´¢§ÈJÜ $vKÜxâ÷yÇuNºµ-kQR”£™Q=òOÂq¸Íj°ÓIiª´ä! JS%`$ð>#Á½mšÑzM¤ „s6ÖÊo¦ –yN›Î|²zqz·¹C4ö+4Ö5<ÛŠ[ÊZ¾áAi)-<Ò’ ´ …|î<:ÿ—«œóPó¥ôàåêç<Ô<é}8Ê$(jÑwŸí]¶–ºÃú¿¥Å¶Ý+“Üy©÷ ¡Z só:óèÒ .¿)Ó ¤‚žéyTN7%ÓhLÐæF§ÊŠü‰: ]B¤ëË^…jJwÊZœo#¨¡I'v¥k '0{—«œóPó¥ôàåêç<Ô<é}8“$I­¾‰-ö‘m‘µwù…Ç6 h4H“‹²©±Ü¨L쥰ÄÒòZ;¦Û9º°•8¥nµ©j•,ç™îŒ÷)ÓyÂ/–ON:£—«œóPó¥ôàåêç<Ô<é}8ƒ!SRýª0ÚØ;<ÿ¥ÉÕš=t‰hDèÊR˜XJCÉ$'€ã‰{š£OEÉPBçFJ“-Ф—’:ÏÇ5ËÕÎy¨yÒúprõsžjt¾œG€¥®ŠâÇZµs×ú\¯ÊtÞp‹å“Óˆ‹œ‰ò ?O­Ñ£¹å<ƒ-•?’Ëjlèy¼»—@êâ1×ü½\皇/§/W9æ¡çKéĉ ‡tPÿjËÛeÐûEưi°LÞ]¬Rd®\”JÓ÷°œmÐØh¬/²¤’ÚRžà§† sÔqTk=QQn0¦Ðµ+%Tuê Þ%d¯5¡Â¥¡Y¥Åf¥…(’{—«œóPó¥ôàåêç<Ô<é}8ŸsªiX<8>f¿p¹>”õ›KN…2+Q¢2†Xo²´! %#2I98ž8Øå:o8EòÉéÇTrõsžjt¾œ½\皇/§Õã2hö´Asþ—*Å}™×=˜O7%ÄÕØp¡•¨%$•+!ð 'à¼0õËÕÎy¨yÒúprõsžjt¾œ1²vE-,‘½¢1_hÂëý$\-m*Ÿ\©AŒÍ™OóN›—"ª¸O@x ã%1Þ 9)aA@$¤”(- Rqoòõsžjt¾œ½\皇/§Ô;Ò¦í ]õþ—=Ú¶5Àýbl«¸ï7“vkuó-׃,Èa!®Âa¶ÐJˆVŒ Nµ­ÂÁ_±"Tê’å"·U‚Ôé-M“6à´ì¶Ca™9¸ÒÖ‚Är%”êB‚–rrõsžjt¾œ½\皇/§áÎ*ƒK° uýÿ¯©H¸0õËÕÎy¨yÒúprõsžjt¾œWÂýSuïý>¿ÒŠ´=êÔüv/©#;O÷ŸOª¬6Í©Ôf4™P•!Z‚]yKüyßâp¥´ÿpñ”úªÇWE²ÄÌ6ýWœÓ1ïáʼnJTz/o{Å›õF#gÝ´ÈrÌœšPRÒì¸í„­H*nƒ–¤¨g—Á‰+{Ü>,ߪ1GmÇßSнû\Œvô&Œƒ¤&ß&?_©àF —=6ùx s0ôóÅ[Þ(.ǤbuØ=¼Pþ]HÄë±Î˜_¯WÝ¥Õ&¡—¸j†â­R$¸Ïs˜+€=Ò²9Üñ'ÕFöKGÁm§»g“¸s`%šbeæþ<°]Wíâ‡òìzF']ƒÛÅåØôŒN»¯à{|ÜyPËÈ©ÔÛål°¥1½B‚ÊRTTÒ8„÷kÈgÃT…¿PåJ`šÝ¡nº–ˆV ãiqIC‰9 Ò´€°G ”2'¾kÙMÖZí¾NáJüß^èT»KÍ4T·¢éo?—cÒ1:ì}ñF¹nнšTš#ž”á-©¢ÞèZ ¢7*'à™9Θvö!ÿ ·çˆÒ?\Ür½ öv[GÉ_C;jR¶hÝ%f=‡n§ÓÐ.…“4y aê´$8ÚŠV“¼àGÿ†1î¡sÌí>¦#îï}üa¯Øó ”a®™xL;¨\óûO©ƒu ž`ÿiõ0…´K…Ë^ØåfioTÜìØq—PÛŽ™Z`iRÈNc{˜ )ŒŠ’¡ò"¹K¥NƒØ5\‹¤TY‰1/GÕÉnÍIK‹e+q Yä–”˜ÍIIV4ª‘1Š«gu ž`ÿiõ0n¡sÌí>¦°b||SÖx—.]íTµáÈ2%Ò!Å•)Ô †€§‚ ²%Cp¢xe’“‘'0!—´+aäî¶ÐàCõm¬%I I)SàŒÒAâ>AlÛï…¿Q\ìRûQ÷ÜÁý‘œD´«"D{OµŽ%€®ƒí‹oü«•ƒûÆضÿʱéX?¼c–ð©H¹æ·j³6¥Sª¢ª Ú·©ÎFé+*dÞ¢´”å«9„‘§#§oóê­R»?¶-¿ò¬zVï;bÛÿ*Ç¥`þñŽC¬WU ÙIj 媊ßÚÜ­ÇÐ[ð JJ‘#0´ç ãn‹9Ù‚KRC2!½¹y ¸\F¢„,iQ $iZ{ésrÌ‚F 4õõEJëضÿʱéX?¼ce×}*ý]E4D¼‘M«[ËF•<id¡HR‚‘“©¾YŒ‰äÌ^?ý?½Å¸?-Uû,¦ Üyƒý§ÔÂô¯÷§?ç?¯ñàbi¹†¼·/E°Ai —wž`ÿiõ0nàóÌí>¦+LJrÞJ™BÉKm©õ„¶•­A)+Q  IÏ€Ï)®4ü753ØfS±“1!éÒ ¡‘ïîÜhžº*d3ÄkÉŠWÓÑ-M{¸<óûO©ƒwž`ÿiõ0µƒ¯f;§¢›†­«vá¦W*U¸”ÇV÷ Ô¹:K¥(qÐÃ/ñ)ä§2«,ÆDä«Ö"S\Ó(„'$’âÝm´æ­Y ֡ǹWÁ„ŸcﺻCü²wöXúÛ߸éþž?«#ªG:wD¨Pâžö¦mÔ_žFóèÝfmÔ_žFóèÝf9¥W (¿ ²ìwµAD¦¤• ÚÔ¥¸7_óéiJg˜JÏ cj¦š…Z>›ÙS‚ÂuýÛRùdéPJ²Kj(äN¤­9ž3mËa–„;>«ª=·Q~yÏ£u˜ÅjÞ”k†ë«ÛôÒêäÑcÆzS™¡MùwBR´¨ê#r¢~¨q'09ʃT™&§*™S‚ÄY‘Yiò#I/´¦Ü.%=Òƒ«6—˜Ó–ZxœÈžÅOáVüñ G뛋1䚨ðÈvš­‡nšSJyæÙYJU¡Ùl!@Ì‚ÿ8ùöÝEùäo>ÖbŸÚ?¾×¼^7ø â¾·ou=Ÿ¦èTGØûHSs |8@)i#1©KÔØàVAÈj­ã“¼,.ÿòº‡Ûu瑼ú7YŒSojHOJ~c¦S‹Ñ-…«Hœ’— '!Þ“Žu·k ÔíêMMÝÜUÕ£4ëL)ÐN¥µ¼Ð“ÃQ <y$åŠß¸²ü]~©ÁxTøHdTwÕtMçW²i7Df_D:Ì&¦°—´!m¶ã[ѯ5iI ï÷Dpïœ|ûn¢üò7ŸFë0Ÿ`}ëv‡äŒoüiÅ3xÜ,Û©¦¹&;޳:pŠãˆPŒ’Û‹.«>ÍG1’u+àÈÙÎ Ð,ð 1ì´åÒÞÛ¨¿<çѺÌÛ¨¿<çѺÌsMbáf ×H ¦;=T[n%CLT¥§’¿‡5–Ô8g¥g>ã#3ŠÞ JC;»ê¯¯û}»ª‰o¥Å½2½!ÖbîiÔ ¶Ã)N¬é[ |$‘Ã,È•ªW ÓßSR––²V§i°£¥*9kX' ¤þ|sÍ÷ÀlûÇçã¤âÃÛçûÜO{ü(øµ³f©]·åŸDõíº‹óÈÞ}¬Áíº‹óÈÞ}¬Ç2ÛWD:¤z«£°9"[ì>d8Km­i‚rûYо' …ŒÎ’q«F»^¬Q¡½O£¸Š„õÊÝAšégtÛ–§”¢‚ @Ò£©`w‚”+mɾuõ]Iíº‹óÈÞ}¬Æ R÷£\0kÒ驦­éÎB”¥%98âmåÈQ NNŸ È9pÈž~£½=èÊå(-Ä…””µ#|ÚÆ@…!Y$‘Ç#©)9ƒÀŒ”]½ŒŸÁÖÑ(¥ÿãâaM§€V=! @–tFoýв¤ß48ò!öu¥”8Û•iRD^Ì~ |{·~yÒpúìs¦Ñÿ„:÷ãI?â« iÎÇ}˜pã¢DÙ ZÛmÇKhAN¥)y+ Ò2’T8e™±#Èqïªù{ý« ¢´'ˆáÿjë/oöïÏ"zN]ˆÛÃkV•·lN®Î}%׉.+Ï,KÙ’Oÿ¾Hœs-1ÙŽ°{:"#<•dRÛÛÄ(d)V@‘Ç.)0x‘1;Pþ+&¿ÕÒ0à ”Àö®qó „FòðwŸ ]½V©G§ .Or%JZœB€ G¥8¨þqíº‰óؾ}¬ÄfÚ}çÊþƒÿïc-ÁQäØH[löD™!ˆÌi.¸£ã‘!)­DR„­Y9cæ:kOÍIÏ™xB¢‚›¸ù‚¾¡\ڕѾۨŸ=‹çÑúÌÛ¨Ÿ=‹çÑúÌs9¸Yv‡l8î9"¦½ÌXŽÚƒÚT¥6éâ( ¹¯¾F…¬’vè²*®ïQU¦±ÄdP¨Ò÷í,øfP… ¸‚œ²)È“˜O)ÞÕÏ´æÒŸV× Ô©L¸jèZeõB¨_ŒÚQ·§½Mv£­¥6ãHi·l‚´¨÷ENŒ‡Ä’N\3úÚ¸ øÊ}UbšØ?ß,×äŒßÚáâåÚ¸ øÊ}Ucè¾ËM¾nïÞâ~ä.^“hl€`¥íïp ø³~¨Å ·*<^)`ÏŒa·Pê ÉÔÚŒ§Ô†|•$ñø?/«{Ü>,ߪ1VÙ>ËäÔ›V´,§&Ì=’û’h­-×çvTµnŽ¥Y“™Ì“I¢´«´tÓâ5–¶ãL~‡ŽjPLÁcK©³ áè¹›” |ú7–ON#*0¨³g»-Ú’BÞìMA/£!ØÏ)äeüêQðw²ïã©;QlÀÛÐ-u8;QlÀÛÐ-u8ôOöÍñ,ýßJa\ÖèV4ÔEéý®[• ŠüZ£*©%<ªèyÅ¥ô2àm¶Ò¶Ïþ•'t…Ä… þ,¤#J¥GŽÜxòa´ËHm¶Ö”¥  àÇJv¢Øÿ¶ Zêpv¢Øÿ¶ Zêp7Û75Ö„°¯þï­pÄ©:¤PÅ<¿µÍÜ¡çѼ²zpùì>q·v“}¸ÒÒ´4Œ”“˜Fòíž)þtŽœd“±Í‘Ƕ²¬$8ÚŠV“AkôqñÚ‹cþØ>k©Ç L< Yêµ\°üݾ×:â³I‰TŠâœ«St3SK%–§ÇuÕ%À´©%-¡j$+1ÜñË.‰jÅ• k÷Q>-YUg¦H—92A†¸`¸–Ò”RRiGÒNd¨©£µÇü °}×SƒµÇü °}×Sˆ¿q5±ÕMÓiK]œ»DçŠ#§.Ñ9âŸçHéǽ¨¶?àmƒèºœ¨¶?àmƒèºœ[Ä¿/U ÍÑ-lµö$íúû~3ͼҩ]+mAI9*pàGáÅ#´Ê5Ûµeº„U„CˆÚ´¼“¥IŒÒT“Ǿ#à Œt…“Á¡^Õ»^Í Ò)ÒáC‡*¤í.šÜV*@i$¥)+RwN# J€Í'c›#!l=eXHqµ­&‚×?èâ&]#œZýV ZÖUÉ]ç‘üªzqŠU9ˆNG—¿U.¢0Ø}½N¤†ûùä5Òr9Äÿñؽ¨¶?àmƒèºœ¨¶?àmƒèºœi3ï?ú}Qm˜®(U.#6Ši­HŽ\vlg^ ËÓ¡´<×r•æpËiHPÉJÑ«-GT‘O‚Û¿ë4ÈvC›×ßyÔjqZRHH %)ï|y“×½¨¶?àmƒèºœ¨¶?àmƒèºœU³Ži¨‡ÕM¶â¹7³ üò?•ON/þŸjJèUõ%AIUè¢9‚;»QlÀÛÐ-u86wN±g"à³í[~“›ªª]F3ÖØ‡-åÇaK%°‘­%! *OdR94ŒÁµÂÈÛ·öV†à]±|É®Ñ —¬ÓÈ+9)óãã—(œñΑӌ‡d[ƒfØ Žø4ºœ¨ö=àmƒèºœxgèÉg<“íý%nåñ¹An£bªÐŠâ)kkL´ +SKl+?äëÔ2Èædz㣾ô‰2«‘dI}, <ôä(¡ ïN‘™Ï‰t“Ç.äpǨö=àmƒèºœ¨ö=àmƒèºœSUJÿ˜ÿ©Eë°Xùr‰Ï<é89r‰Ï<é8ÉÚcÞØ>k©ÁÚcÞØ>k©Áª¥ÌÔ¢õØ(cÈv¡´ZZV…Þ.)*IÌ(² ü#6÷î:§êÈÄöÍ}¦ÆUz‹eQàSbÑjæ$ÄÀ‚ˆ¬='±ØuKJR«¹u´ (9f’W¶áomà”ÄkN5´¨![îU'¾Ó»Ô—JRÛ+t¯<ÉÌ“Þf¯S €@cZjeH/ ‰WwµQ¿2eb}N#¬"I‰“–µ[Ã’Ý3 ¨<­'2…8žñÑdëièm–$CušcN gZäv<Ç}N÷9)N’Oþ¥g–yâÅía¶O±}//÷\¬6Éò/¥åþë‚ÃÖã1.x¥;r„ͯt¶äPã4ÓÂ$çÛmÝÖÑÓ¡hÒu/=yj i< d­û‹/Å×êœNö°Û'ÈX¾——û®>%l«lR"¸ÂÙ±Â]ABˆ«ËÏ"2ù® *DÌ6û`}ëv‡äŒoüiÅ;sR9ZU+x†ZÝ”ÓÃ0ëjŒû%9dA̺3†Yÿ1»µï*VÁíëJ€Ý Uf™JN”¹ÒÞj.HŠYqhRR”sûRžþg½¤×}¬6Éò/¥åþ닽®&¡g— Œ£ŠA¤ÚÓ"ʦʑ7²¤Ä¨—^}÷JÜ\tF~;) )Ì«'µÃ[(}ÖX™£ÐáS$©øÏÔ–µ  ‰UI–`ðKŽ(ÿ–}ÿŒá—µ†Ù>BÅô¼¿Ýpv°Û'ÈX¾——û®)aë@™—Te÷ÀlûÇçã¤âÃÛçûÜO{ü(ø€ÙþËvjÖÝÅq{Vj D‡œú„‡^^ò+Ì€¶>éÄŸºïâ{lv¦Ón”›z-¦)LL.}JKr¥!°½IDu% dQøÉ㵓b‹8Ä×e›=åRãí¥N–j(md&LW%9% ¨iîÈQJ UÜèv@t3àTéÁ©ðÌGçÇ“P)e×T†]fT­öEa$¡cKg=*œ» ´½v°Û'ÈX¾——û®Ödù ÒòÿuÅl=?ÄKâ h榨Ê]U¸<¥’–¢­N%´äEj +$‚sÒœ³#–¥;{?ƒ­¢þQKÿÇÄÄ?k ²|…‹éyºáÛbö%Ùjlêë§Õùʵr¡"lfâLuQ\VYJVâš OtÑ$„+ GÝlZðJŤ¢64³¡ÃÚH?b©Ý£ÿuïÆ’ÅVjñ%*|zœË’£6ã!—ÖPÛˆp «º”[I"2eÄ)6Mod;fªVeÔä .Í·ÜKu9!KQQ8Ä噸ñ«ÚKl?éI»c¾' X•òžÍioè†(Iâ7ýpI4Ã=LT·T¬Ãl-KJᬨç™ÏJrÏ,ŽY˜¨•_êÅ™ÚKl?éI»cJãØ×jôtDz[L¶TÙZj’ÉNc¿þíó° S-ìΔdË":wÀù«ïm>óåAÿ÷±Žz¸è†³V€dºà¸RÌ—xH:ÚÒ¶ÈP }$jëÁí²‘zV¨ÌÀ³ãÐ\ß&bêÓ^gBB›RCa¶—¨’Ž$åãži«{Wí“ä,_KKý×&ÓÚILé1,Í”µ…ªúô(Œ ¡H‘í©P˜)„ódSêŠJi÷–°BÙ)u8¬ÖJÖì…jÍE%i=Ð13E]eÍêêÌAÞ 3õ½—5)Å%üÀ á¤GVIbí_¶O±}-/÷\«öÉò/¥¥þëŽ4Og4ÌAøáq¨¯ß‰ÚxÖ¸¦°Çlï–kòFoípñrí?Ü|e>ª±^ìOf÷Õk꺺ˆè¢?Omºd×ÞZ–ãì8 2€ «Žg¾8bÂÚ¸ øÊ}Ucé¾ÉÊÅ•ƒ/0£…kÌ•ÉÒnŒ½½îoÕÍwû¨×Š1þq†Þ÷‹7êŒa¾*Ô¨Õı"§ §Q>¦Ü”©9´’3ðàAÇbÇw™þRbüùz-|,Tö…gÓöÌ—_§5W–Ú”–5¤©µ…2Ê’U¨8æý% Ë5¬Ž÷Ž]¢sÅ?ΑÓ7¥ZÎ×cV\©SÌØ‘žŠË½˜žá§TÒœNZ²9–9‘˜ÓÃ,Î{Mx,€b¢!^P#Ϭ׫÷ :“n·4R)ªŸ!¦zCÑ!Ðµé —wŒîÏÁ­$¥Ì3Ъ´ÊÕ)ª££ ü÷R¢>—šs%+I äA#ßb*ÓrÚ·íÈth•È®·½*}ùm©é ]¢sÅ?Αӈe~b¥Ôàþ½Œ^ü¯˳ûIríž)þtŽœEûC·mêëKJлçRT“˜P0 äAøF0i_Ê»ÈýŠÓ%ñ¯÷§?ç?¯ñ§&»D2\"³O ¬äD¤|ÏŽ\¢sÄ:GN>W®½vÎ%w›¸,õ%im„—Ÿi.ÌŽÓ‹ŽÖñÔ¡o!*Ð*Ô­*9 'Àq–3JC²’®Qe,¥‚Û56ÃrW½Ô Ûg@Ý £‰R»£–CAÊÅke\»¢Ëí>•³) ´©µ¥i#PR{éô‘ø1™ªÕ·3ÍF¬6âä­µ<ì¹ì­D6¡)Є$½Y< 9Ž<1K.¦åe¹ƒ¹DçˆtŽœ¹DçˆtŽœE—`ЍocﺻCü²wöX·#HTKv;Œ³­ÙO%jv+n’†²­'!Ý÷ÇŠ‡Øðâ¨mÖ–•¡w‹ŠJ’s ,ˆ?Ųh~9#ÔcþÉFy²Äb/yZWÉ@ôsS+Jù(ŽcêcG½6Òµe{ ž«Smš<7­È¦Lš„8 !éu›À ëÈHV¶˜ R›R•¬NmjH(mEaÇ ±¸+[•¥|”G1õ1_PëU:—²ñ.V¨(Ôs3m¥¶š+\âµ êVIÍYfBR É !96W–ykqÂ2Õ–7Ù ™mÔª²û`Ö~múïõ˜Ûö=×êõêEó2©9ç×åy˜ÁN(¦3BR–Û)J9|d“™$”Œ2ûýëßß•2?a‡…ÅhóN—q%ÕÁIWoЬ*äØm1·K ©Ç³!* göÎÿ jvÁ¬üÚ/õßë1 wûìªxóÞ¹Â~Ó~ÓdϪ·ÂM•Tb¬wÒã)+>þ•¤( BÖœÆx`h³T¢çZ¢²û`Ö~múïõ˜WÛfÑ®V6Kp»O|S䦞æîTW^K­»èQYÒ|wÆG#ŒxVÛwðGpþ/sõ`sE ÷ÒwýEú]ÙÑÀRÙo0•)A$—O$òÄØ5Ÿ›Eþ»ýfö·ïJWôCüfqËt:œÿlQ.w`OnZb™\çhÄr¹"í°áx(¨0@Z2J¤É$'WB¥‘Tøö¯ ãÛ³óh¿×¬ÁÛ³óh¿×¬Ç=ÖŸ~‘³K¥÷žqÊuYu¨ù)D¦üÍ*Ìðt7 2J”òˆb‡D¶æ\7mRµN€\‹RAì÷”; Z’÷7§2   Rx‚\PðJ6‡ŠÜÙíÝ\­û!âÓ¥K[pkL°Úq{¥:%DHqAJ9¨%D{Àœ²ÔsÚ¸ øÊ}Ub‘ö1½P‘¶j аpT°^\°ã{µ‡Lˆ%z“Òug˜Èe‹»iþà3ã)õU‹Éþuži“’upþT½½îoÕ‹«lŸeòjÍ«ZS“fÉ}É4V–ëŠs»*Z·GRެÉÌæIÄ¥½îoÕÍwû¨×Š1þp¡ DŒàq)Æ!d&‘‡¢]íE±ÿl@µÔàíE±ÿl@µÔã{ w¤û†Ðm¢T¢7FªTœ‡.'aûªf<ø¯ ŒÙo¹ …fŸ»È”—F¡2óßô§»QlÀÛÐ-u8;QlÀÛÐ-u8U¸îéÔû¦§Qmí«R6”븄¾§’JìfKRRrq×§SŒ†ÖÅeVý±Ð›­±sO›“Ô׿k“IICÊN_k×™RPI!ZTTÚ+ šUI˜x[¨¶?àmƒèºœ|Y0ìí[µìÚ ".8rªNÒé­ÅiÐò¤’JR’µ'táâ2Á‘$¨ (lÛï…¿Q\ì.<»a²¡2 g=ô)’NÇ6GBØzʰãj)ZM®ÑÇÇj-ø`ú®§÷w¾‰þ0¿×…‹ç–ý«Jö»î‡q§NæïZw»­çÚ÷Û½{½çÚ÷š5÷:°Á*ÂÚ¥x—Ö‹cµÇü °}×SƒµÇü °}×SŠêmÕR¢Y“%›’¹.T:µ!¹q*´fÓRЇ§´Ëèa¤¡öÖ‚â[-¬)iwC®w!v´™ëOkNÕ ö •[©ÿ¬(/ÄÿIc±w'²™N½;Çs ÌwCPûœTËÃ|Õ„h‡¿éY}¨¶?àmƒèºœ¨¶?àmƒèºœ%lÒ¹:eôí*5~á­Bjš©pQ“O~ªq)ºGcG+C¡2õ+°‘š3Év,ÙVUS0ð{ôQÖL;…{Ví{6ƒH§K…ª“´ºkqZt<©¤’”¤­IÝ8xŒ€pdI*4ŽlŽ<…°õ•a!ÆÔR´š \ÿ£…½›}ð·ïâŠ/ë‹î÷Ñ?Æúð˜pèŽn ±#9¬k±P¨¶?àmƒèºœ¨¶?àmƒèºœoa“N]‹&÷ªÛoò"ëp߉9/¾¸él:óKKa·”Ú BœFiX+$­ÆUƒyJ)«µÇü °}×SƒµÇü °}×S…YwÕN•´Íz=N‘$¥"IOà ÉuÆP믭–ÔÒ¦][ªÝ¨6Òug4†{N¤åb܇Su†YT¦õ€Ä¤Hecàq§SÁÆÖ2Z’IJ’JPsH¬3ÅI˜ˆßj-ø`ú®§ÎéÖ,ä\}«oÒcSbUUK¨ÆbšÛ弸ì)d¶5¤¡ä!EIã ŒŠ@'{ ÞÆ/~W¿åÙýŽ2ÏB 9íß·ì-Ä} ’;"Øø$6ÁwÁ µÔàíG±ïl@µÔã~WûÓŸóŸ×Œxñ4ÜÃ^[‡—¢ê-!jv£Ø÷¶ Zêpv£Ø÷¶ ZêqĺüȰšwre-iSÁ!E¤!§QJO­-á™ðc"i­{¹2ÜIÓ¡2wk^}Ö£­ @Ëî2sû¢UÞºöcºùSpÕ©ÚcÞØ>k©ÁÚcÞØ>k©ÆÞ öcºz"á«_f¾Óc*½E²¨ð)±hµsb`ADV“Øì:¥¥) ÕÜºÚ ˆ”³HI.îû؇ã’=F1T{}ÕÚå“¿°ÂÃuÙ³*MîcÔ+ ¨ãêe„·sÉ€Ð<¢möÒTsNjÓ™ œ’õ0É‹®'iì³eêsbĉùGŒË.Lt=%m¶§ÜJÖGÝ+BœÏ’‘Þ ?cý™üZéäÏÞð}ögñj?§“?{Å.?RuÿÑ:b¼³¾ù óñ5ÖŸÿ±þÌþ-GôògïxÉcZv]™xÖ)úœ5…B†õL9X‘PRX+#‚ã®8Ý&AÒ’ÈÉI%¡Ùuj¨ø–…(Ÿ®|Õ/w×8‹¨Ä‰>žü ñ™•SJeöl-·›P!HRO$‚A Õ ZÎÏ}ÙÆ¬¹KuJ}O_³KŠY=ÑQ2ó*Ï<óãž1}ögñj?§“?{ÂîjkiXF ¥E“J¡RZ¥Q)é°#êÜŇ,²Þ¥(Hf¢IÈwÉ8Çw{Ô©ø“Þ¡Âߨÿf£úy3÷¼|½°+!¦”ë¦z„•)J¿f;äžËà0\þ¥7Ã%ìaûÜí¿ÈÚg« ˜W·-;bóÙU"‘DTÁl&™è"5bM?T@„BÜ6â“’›:\'º $jH#Oì³?‹Qý<™ûÞ£½.K#rb­ÛÖýf¡}b‡M¨J¥»¾€ü¸ºä73IÖÒ” B³BiÈæ‘ñ Ia/ì³?‹Qý<™ûÞ±þÌþ-Gôògïx]ÇêL¾-¬ Û0üs;ÿ+[qÿoúW½Fq&™lúÈ»íú‚Õ U¤Muš:^¹åÏÍþÅ}K!¥>âFL»¥'!žYêRAÇ{ì¾Áº®Gêõê}ZTå„!jf¯Pi´„¤†O9$ É$ñ$ãd·ü¿ªÅ4A¾Š³Æ…"™ÉÓ§­—ó5á!1ôdpŒœÒAËJˆ Ë,õ©Åuä›´fÊ9Ž·éʧ]ƒ´fÊ9Ž·éʧ]wߥbðÃ8I8eö+û׿¿*d~Ã=£6QÌu¿NU:ìMlÒƒ³êm³qÛ¶‡d7 ¹î±Y Ÿ-O"IŒÖ°ZËA¢ÈÍ îHá’ʈ]M‰° †×ñ Éï÷ÙTñç½s…ûŽ™ÊðQÇ÷q–ò)™ ¤ê-wòÒ¢•R Ó—u˜±{Fl£˜ë~œªuØ;Fl£˜ë~œªuذ‹²–R̸­m“…m·wâ÷?V-þÑ›(æ:ß§*v#®íì>‰lO«\4ʤzTHërc¯Öꥰ8‚7ÇV}í sÈNX RE(†Ë€A´ÖÖýéJþˆŒÎ)„Á„˜,ÂãˆÑ÷{–IÝ·» £JrÈi)Iwˆw±tí&̵¯&¡Ç¹ãOˆ¥ka¸µ qÆgH%A…§V\2*Ï,ÎYfsTí²Žc­úr©×b°âYm(¯{ɵD‚¨0•èFsFó|Ái;·7„•êNYEJ'>ù'>þ5$ÛvìŠÀ«H Ó¨¥Á-Èm©à¤å¥ZÈÕ˜ÈdsáÅ“Ú3eÇ[ôåS®ÁÚ3eÇ[ôåS®ÅïJ_‡ýa)ìcï˜ù!7ö¸x¶öŸî>2ŸUX^°,͘Y»GD{z4¨÷ªKëCrjd+°Ã¬‡-IH.nxð'#–`+&§û€ÏŒ§ÕV$k:ÃõS2Û2N®Å/o{Å›õF0ßjTjâX‘S†Ó¨‰SnHJTœÚI‚xp ã5½îoÕ‹«lŸeòjÍ«ZS“fÉ}É4V–ëŠs»*Z·GRެÉÌæIÂÃË#8]¥4´:A4Ùèµ¹v‰Ïÿ:GN#«N[UJ•"lŠäT¹Eš©‘ÃrÛ ZÕæ^yæ4>³Ã#˜O³KµÇü °}×SƒµÇü °}×S‡ø—Ÿ“ªUÃ3tKÒ­îw—onënV^ÞÍi]˜òµîÒ÷í êktv4|ÚÆ$h[Twª*‰\‹»¨ÍTÅ0©mî˜Z€°ÒFZB–•:®ù.:â‰ÍX’íE±ÿl@µÔàíE±ÿl@µÔâÇÉÕMËst^ríž)þtŽœ-ìµö$íúû~3ͼҩ]+mAI9*pàGáÃ/j-ø`ú®§L;…{Ví{6ƒH§K…ª“´ºkqZt<©¤’”¤­IÝ8xŒ€pdI*Qã9ì¡m Ãk]Pj¥/*Õ»²¤Û•h(Z%8•¥RP HQŸ.§-ªõtÙuÈ­$¸Óí<̶Ì<Ó‰u§Sži%! AI%9)*ƒ+'c›#!l=eXHqµ­&‚×?èããµÇü °}×S†‰‡K=R®YZÚè”[·­—}Ê­èýVl‰0rt©QéD)=’Ã:Ym è :5↮ Ó·|R­§Êmoè“èÊÜMi93/s¼PÌìn¤÷†g0xdÇÚ‹cþØ>k©ÁÚ‹cþØ>k©Ä_º”±ÕMÓstQ²\¶Ÿ»!\ ®E B“ ¤ mîÊ[ Y#¿˜1‘–D г1”.Ñ9âŸçHéǽ¨¶?àmƒèºœ¨¶?àmƒèºœ[Ä¿'U ÍÑ-lµö$íúû~3ͼҩ]+mAI9*pàGáõåZ£·vT›r­ D§´ªJI ‚3àAÄ]“Á¡^Õ»^Í Ò)ÒáC‡*¤í.šÜV*@i$¥)+RwN# J€Í'c›#!l=eXHqµ­&‚×?èáâ¹±ë;ÓbCicA+.Ñ9âŸçHé•&Û´bP¤Ð%]ÔhSWKK“Ri C†¤„QºZû„¥!ÇT㉠9,,©»µÇü °}×SƒµÇü °}×S‡‡ìê– ´nwD¯“Bešƒ²oÙ“*•ØiUg'FfK(ekq” 2Ú! qÅd¦Ô­I^´d‘-j¹mPhˆ¦Ä®Eu!Ç_u祶\}ç\S®º¬²H+qkQ H*É)H .Ô[ð6Áô ]NÔ[ð6Áô ]N0áòuA‚Óót^ríž)þtŽœEûC·mêëKJлçRT“˜P0 äAøF%{QlÀÛÐ-u86wN±g"à³í[~“›ªª]F3ÖØ‡-åÇaK%°‘­%! *OdR9g¢°× »déxmcê WÌšíÉpŠÍ<‚³‘‘ñÿ>>9r‰Ï<é8ÈvE±ðH6m‚ïƒAk©ÁÚcÞØ>k©ÇŠ~Œ–sÉ1ŽßÒWPDp–¼š½Ôd+ÚZs(u¹h lA çñ<$A åMbÙe¥+ uÅ‘©Ùu&–@䔥 BG|’r$ðãË}¨ö=àmƒèºœ¨ö=àmƒèºœWU˘ÿ©Eë°Xùr‰Ï<é89r‰Ï<é8ÉÚcÞØ>k©ÁÚcÞØ>k©Äj©_óõ(½v Øðâ¨mÖ–•¡w‹ŠJ’s ,ˆ?Ųh~9#Ôc 5ö›Uê-•GM‹E«˜“ "°ôžÇaÕ-)HN®åÖÐT@$ åšBIwwÞÄ?‘ê1Nֆ˴Pû$7â-,@¢ð£9´ad°·ž©ˆ/MyM·›,ÔÀ-­Îöô‰-/@Ì„)*V¶õÏb«²,Kæ…µZ-V¥\£Õá·L©&©PjޏÒeHypˆ.J^kWc§"”ÛmÒR”–ƒy€V²Ojb¼³¾ù óñ5ÖŸ‹å÷È_Ÿ‰¨ž´ü:_ßKî«Fè÷ÍRñÇ}s…›îáf×·WzÉÿéQ¢µï|ó¯¾Û ¥;Å¡5ºœÊ”œ3]ùª^8ï®p§´Ê{•K2L6è4ÚòTë z™Qeµ-”<…¸„¥d »¡*Ýë!ÍD$ó+·Ý rשͪÓ×"}½R¡¸—Jjƒ‘–âÆ@ë;®§IÌŽ*4ždOÕÝïR§âOz‡ û£I£SjùÐý¯Ó¦Ôû"•DûHäÆ;†ÔÞ†¦Q­æß{&ÔAßj9-J‚î÷©Sñ'½Cˆâ¤nQ~ƽÎÛü¦z±pÉ…¿cÞçmþFÓ=X¸dæ=䘊[¹oi7©èuŠ»Ñ¢·2 i̶¾ÀŽâœJZ´­ÝE—òC uϵ‘§5 )“.Ú,zfï«ÔàÛÏTåU­Ö)´YÍÊi Ðg´äµ"s©qÄ”©SjmæPãÈ{HN¬œ¶°¢…j«Ý¬ Û0üs;ÿ+[qÿoúW½Fq»µá{fŽgâåcKn?íáÿJ÷¨Î:R;—/HnHXŒ¡×"Uj¡ÇmÄ®ô:T¤£­Äw:TI¶xå–y§îÐâQ'ƒ%ÉF}ŠþõïïÊ™°ÃÂÖ}ŠþõïïÊ™°ÃÂcpóZ%·»ÉEÝþû*ž<÷®q-ö"ÅvL—›e†P\u׆ÒeJ'€q$âVï÷ÙTñç½s…{ÊšœÔÖZÕTÆ„å• “x´©'îÒæ€ÉOÄé$,êI÷ÊߥJìê\i½"7d²‡wQ¡Öµ$+OÀ¡žD|/m»ø#¸¹ú°Ó…m·wâ÷?V{¥C=ðº#k~ô¥D?ÆgrªÝ;tÒ"È›2Feˆq´o] ËR»µ%)Js©J2”ç©IîÚß½)_Ññ™Å qF˜Íz ~7'˜qŸŠä6–„:´¼¦U­jJIIe ¥E9…(ƒšBT¸>â|Å/V9WTxÔ‡¤¿LžÜÈï0Ë”Ån»$)÷RÛDæì¥JW”ðPÏRT‘¹A¬ŠŒ©ß§L§LŒ„:äiE²½ÚÊ‚ KZr%·Z³N` \¯Ðêuæ¦T"§½KdC2R—Ûf4Â뎗^IQ8@B‰ êV”ËÚôg(÷M-&C°¤3lÉ—)rÖ7‰[:Ö¥/v´ƒÀ)ç2ª±2ŸžgštoÈ»ËùRö÷¸|Y¿Tc5ßî£^(ÇøiÆ{Ü>,ߪ1†ø«R£WÄŠœ6DHú›rBR¤æÒHÌÃñÝæ”È¿¾^‹_ ³ïÇ#ÝÚ,О—q´Ú§"žÌ”½N Ò%%ÕéH'ý˜iY+|r$5þ‘†>]¢sÅ?ΑӅÞJ´{uí¾Èå¾YìîÍk²wÛÝzw™g£uþ—±þמXÚêðYE8¬³.;†‡G/ÜTXŠyU*|Vœƒ(–™rÛcH*õ²\âJB\  ÔÛRÖÅo–fVPÜmé•# ™)sZ%éi¥8´œ€î[¬¨r[+‚ D}÷R¢TlÚ•0ªŸVMB2¢9ÔÑ/!Ñ»P[¹æ„¢T¤‚°JR¥d’XÊ¢[Ö´ZRî*|¹ÖôÉ[ä7ÙR]Z}íˆF·Vâô’ud2 FÚïØ§e7&l(lÛï…¿Q\ì0ríž)þtŽœ-ìµö$íúû~3ͼҩ]+mAI9*pàGáÂ&þt¯ÄV%Ý/õâ;w•jŽÝÙRmÊ´-œJÒ©($(‚ϼ»DçŠ#§gºr6¬­oÚå ÊÛñ·ÔøY½Rq.d¸Ñ’•¼”åöÍ)‚PS©A-­vÝ»§W¯ª ¢£qB¬Ñ*á…©sC”ðÄ… 9µ¨>ñJ3'BÐV¼Ð‰Šû–Õaêr¥×"îéÓS1,&[{§Ö”, :“ž •©.§¼C6 sN5(ðíZeÇ"¯»*C’ÔôrÓýÁt4të@Rã¸ë‹PQ)) k½XR‰¯49v‰Ïÿ:GN]¢sÅ?ΑӋÔ*P¥ý›}ð·ïâŠ/ë‹î÷Ñ?Æúñ]ìµö$íúû~3ͼҩ]+mAI9*pàGáõåZ£·vT›r­ D§´ªJI ‚3àAÆ8?ëTo„ÅñŠÝµËM•{È«F¡¦¾Ì8/Í­&$X¬ªw3ê™—Fꋯîò@s<»DçŠ#§ UzÙ“X¨ÕY½‡.mIª›1*!äù(ˆ")ÆBÛP:Øîži Wiux$6œV VÒ§W[¡5l[ñ*r+Qª.oM](†Ê¡Ij;Š%µ)ÆV§»q •+íy¡!j-¹Z5˜·§K¸!6óqjЙ˜Â8”:€´…H% ò$gðœ-ZÔKV‡WRjê2žŠÜÔ#²%ÇÒL·XzBÈBSÅo0\øuÀF„¢ZÑrÚ·m:]¿ ¹È´˜LÃaoKl¸¤4€„•'$Œògð Cmq(u8Á…ïc¿+ßòìþÇ\»DçŠ#§~ÅÇíÛzºÒÒ´.ùÔ•$æ (9~Œ:Wò®ò?b´É|DÇ+ýéÏùÏëÆGU„è1¨írâµãÂìxTZe:CkqÝã®;!Rµæ BYl§<õN`%„0ï¨òò6…rmŠ‚íÅPv=­<Ë’ÝSn¦Ì¨âJÉ Mx€4»oQüÚèlþ«­Qª,:œ˜}…=}ŽòÚ×Ù¨´¨ŒòÝpïcº/7ÏóäuXYl,Uƒ¢S`Umê?‚@ý ŸÕcR»µZ\Ú$ÈmZ7ðrDwAU? T’jïqų®‹ÍóüùV5êóh°iR¦òd÷;…»£”5iI9g¹áÞÁf*mEÁ!lª¸Ý‹ìo·]¥W([4ØF <‰RðCH[M!JFÚó+2ÏQëvÞ£ø!´ÐÙýVv'S7V˨÷EeŒŸ@‰Qy˜kÝ :òY* ÔBApäg€ã†t^oŸçÈê°È„þ$¸eà~«ÛÔ6ú?ªÁÛzà†Ð?CgõX³µÑy¾Ÿ#ªÁ®‹ÍóüùVf)–¢à©J¥Ì/=®X+¦[7dV©U9Ë~¥nˈËHU>K`—l$wjJr'2T2Ï›{¸VÝÊŠ\k^í¨.!+rD zTˆçZÈ%Ô ¥Diã‘ g–y‚“´šMágPé”å¤\59å;&HsvÓp¤?Ü¡9(­¶ø’FC,È)ÃvÝ Ð_Be%e.­Il6ÈYîR‚sÍiþ>6Kl÷)ªÿ1P<¹?ÀkëôVoWƒ—'ø }~ŠÍêñsvɦüœ¯4O[ƒ¶M7äåy¢zÜkµa±ÑS<¹?ÀkëôVoW‡ßc3s©û>½êU:-f$פLe‰t·Ú’ë]…f† 7‹î´€”’JHœ4öɦüœ¯4O[­’ßïWT·b²ÃtZÓ!„¤…-´EŽî§8žè©Õ÷²d8I£ËÍ* °6k¹T5Û–\ÚäÙX—ànD—@U©70¢FkïñƯ.Oðúý›Õâí©m *Œˆn¢Ar;ªie1S‘)$¾ÛÞጲi¿'+ÍÖâáÑ(”[»kÑS<¹?ÀkëôVoWˆ-¦?Z­ìþ±Ib_ “2²kMH*#€ÏwÃÛ&›òr¼Ñ=n v¡¶$ÛÛ<¬Öé0Ëó Ã[±Û•KE`pÖRé9þC¿–YŒó]ŠZدE9·Ê×%[ÆE½TzxRE&üÍÞ•¶¢\-$„ †C>$÷ÉDS|¹?ÀkëôVoWŽºjÉ£ÀTÇ-6KÒÞµé  IõüxXí“Mù9^hž·†^±^3a›U¯ì©ž\Ÿà5õú+7«ÁË“ü¾¿Efõx¹»dÓ~NWš'­ÁÛ&›òr¼Ñ=n/j*UˆžŠ¹Ø *“¶üš³¶ÕÅN†Í±.:ŸªQ¤DAqR¢)) qBTr>äâÝÚ¸ øÊ}Ub×Ú;µÍ°Ç´âÅ@‚º š‹¯ºÙK¥Ô?´¥ ,€.¬œó$åÞÈêŸÚ¸ øÊ}Ua’Uñ¬®*ó!¢IÖwQKÛÞàAñfýQˆº¶Éö_& ìÚµ¡e96aì—Ü“Ein¸§;²¥«tu(êÌœÎdœJ[ÞàAñfýQŒ×ºx£á§ ÄHΘbBiz%ÞÔ[ð6Áô ]NÔ[ð6Áô ]N7°Û–}µÊ™KÑ Õ"D”³1µÍBXÕžú2´–·Á qƒ©Iq±©E¼Ò’ã*Á¼¥ ‡É«µÇü °}×SƒµÇü °}×S„ª–Ñ«t—j°êÖgú—É1ª‡‘7³æ®2w+Zûû¼×©=Ê@qR;+¬ÝuZõÝæ‰NŽš]Y˜ñ…5RÐ0£:¤j,´T3t,(‚sqIÈ$ª´2iU7ñ)_DÉÚ‹cþØ>k©ÇÅ“Á¡^Õ»^Í Ò)ÒáC‡*¤í.šÜV*@i$¥)+RwN# J€‘†;ø[÷ñEõÎÅ#˶* ÆsßB™$ìsdqä-‡¬« 6¢•¤ÐZàGý|v¢Øÿ¶ Zêq?w{èŸã ýxŽÃ(ÂJ3/ GµÇü °}×SƒµÇü °}×S…[rþQ®Æb]¹ØtéÕ¹ôH’û9.8ôˆª’J÷A %•7Îè¨,9Üè(ÉÒ±±’å­Ä´çíÏYr§ ·ë­Õh ‡ *K.ÆxEd8{#r„€ã€¡Å«IZkááÔ+_ħ~ŠÑíE±ÿl@µÔàíE±ÿl@µÔâ3ewëºÅ§\³(¼’š¤f¥FŒ©I}{¥¶…(¤3%ZGQ «B”¦ÐˉFPULËÁ¢Ž²aØ4+Ú·kÙ´E:\(påT¥Ó[ŠÓ¡åH $”¥%jNéÃÄdƒ"IP¤ìsdqä-‡¬« 6¢•¤ÐZàGý-ìÛï…¿Q\ìXw¾‰þ0¿×„C€×DspM‰Íc]Š€íE±ÿl@µÔàíE±ÿl@µÔã{J¼*ñn*å-˜ÌÔf;t7I£1!îÆa¡É,MXqÔ¶µÂABÉR’ž â—V å(L<¦þÔ[ð6Áô ]NÔ[ð6Áô ]NcßÓ¦·MK·;.§'”.'g%´¡0$¦,ÊNN¬º´î‚ÃIZs+SG†¬ß¶[‹qö7bòÅ6<ÝÆó^çzÚW£VCVZ²Ï!ž]á€JÃ;Š“1o[¨¶?àmƒèºœ;§X³‘pYö­¿IM‰UU.£ŠklC–òã°¥’ØHÖ’‡…'Ž‚2)ì/{½ù^ÿ—gö88Ë=@€ç·~ß²t´Sô*Hì‹càlÛß‚×SƒµǼ °}×Sù_ïNÎ^1ãÄDÓs yn^‹¨ ´…©ÚcÞØ>k©ÁÚcÞØ>k©ÇÝIZ[a%çÚK³#´âãµ¼u([ÈJ´'Jµ+JŽCIãðm·ukì;…¾í#yUct‘Á\ö†³'/Œå—áÅuäÅ+éè¦á«GµǼ °}×SƒµǼ °}×S¼5ìÇtôEÃV¾Í}¦ÆUz‹eQàSbÑjæ$ÄÀ‚ˆ¬='±ØuKJR«¹u´ (9f’]Ý÷±Ç$zŒb¨ö>û«´?Ë'a…‹]ß{ürG¨Æ=;^_.×äÑgh¤J-,'Úu í~æ¢VjåÀL§Í§3 c±ÒóóÐBÔV²âô°Ø*Í):FHOÜ1‰‹¾uƇ2ªcBuCv–ØrBÐR2ÏQ2\Ï2FA9‘Ï8ZÊ’Åyg}òçâj'­?+Ë;ï¿?Q=iøt¿¾—ÝVÑãŽúç ÷‚ÜnÙšëu¶h‰i¢ãÕ'…&#)âãƒYЕd¥êBNJRVRX.|Õ/w×8Y¾íæn‹qT‡§Ìþ•SR¡î÷̺Ãí¾Ú“¼BÐr[IÌ)$˜Â¼®ßt-=—.¼å¾ó•¹3$´¹JU1úŒt19Ø¥)ÉR[mBW¼)HB-—€J]Þõ*~$÷¨qókÓ&Ò©ë>á©WS¥bMA¸Èq 4¦“¤dO“š²êî÷©Sñ'½Cˆâ§‚‹ö0ýîvßäm3Õ‹†L-û~÷;oò6™êÅÃ&1ï$ÀÜRܦ\ÔK~EÍG¬Ì•OñâÆTt”%Çüõ;©ÕEHBDP—À.iÞ'vù…[Úç\µ 2©Ô¡7S‚šub4E5»ªÄIp†.6¥!#~øÔÊ›^Nžë4 ¥« 4¢pޫݬ Û0üs;ÿ+[qÿoúW½Fq»µá{fŽgâåcKn?íáÿJ÷¨Î:r;—/HnHX„¶nëvà©MI«C”ü%䤵%µï¡µ¢Jp$«øÁCàÄÞ5áÂD·ØkC“žÈV¢u¬6†ÁãÞî[@Èpáñ“ŽŽÕÉâ¶0ËìW÷¯~TÈý†°ËìW÷¯~TÈý†‡šÑ-½ÞJ.ï÷ÙTñç½s…úår‰EÝrÅb?žë²å!­æYg§Qå˜Ï/Œa‚ï÷ÙTñç½sˆì0{¡!ÞñªÇö%EjLg›y‡iÖÔ‡FaI#qakmßÁÃø½ÏÕ†œ+m»ø#¸¹ú°;Ý(g¼DmoÞ”¯è‡øÌ㩵J³õ†mµËo³!IZçJ¼ÞŠŒ”Þ‘ÞÞ¨8Àph ¬l)]µ¿zR¿¢ã3Š&=» ˜0XC²7&*kr “¼[Ë+.­C-?lÞº ’R¨5°´Lxj´)ܳ_LФjôŠjY™"4xÇeƸymjwR5¯R›$„-¼’BFD©r]Þ¹’š¨L­Öèt÷-ØU=Ý6œ™hdº_S…× w4€”#"tƒ’Ž]ü›¥ÛrT:ÍNŸBË’!Ã[iiÕ(æµ*øKkGT2ZŠŽå: QÙ±Üï!± , %-4Û*t ! pÿj¡ñdqe M¦…»ìxr öÞ©NÕ˜mŠƒ–<•Ke³štÉ„V”ñ<³‰þs‹Ÿiþà3ã)õUŠcØñNb·ªU&2Ü[,y1šS„”¢L$‚¢ä8ä.}§û€ÏŒ§ÕV-'ùæy§Çü‹¼¿•/o{Å›õF0ßjTjâX‘S†Ó¨‰SnHJTœÚI‚xp ã5½îoÕ‹«lŸeòjÍ«ZS“fÉ}É4V–ëŠs»*Z·GRެÉÌæIÂCË#8]¥8´:A4Ùèµ¹v‰Ïÿ:GN&PlÙóêOU®#Rb£ TUM¸±ä”ªKm)99“ŠBvµh ovžç ¨¶?àmƒèºœ¨¶?àmƒèºœ8Ì8ïgT¡ƒsº*îŸmÓ{Ö«]Ô"ËD}U(ûפ›&F Ch±ÁmAJI‡I4gêUFìÄK“I­Ãb{âS¨~@^ùM¶”<âJÔ¶VÓ©( ¥JÐϳ')ÖîÍ­ë~mr”äªM&,7ÖÌ´–Ô¶šJRNDŒÒrÌ—À1;Ú‹cþØ>k©ÁÚ‹cþØ>k©Äî¶z©0šE-t^ríž)þtŽœEûC·mêëKJлçRT“˜P0 äAøF%{QlÀÛÐ-u86wN±g"à³í[~“›ªª]F3ÖØ‡-åÇaK%°‘­%! *OdR9§¢°× »déxmcê WÌšíÉpŠÍ<‚³‘‘ñÿ>>9r‰Ï<é8ÈvE±ðH6m‚ïƒAk©ÁÚcÞØ>k©ÇŠ~Œ–sÉ1ŽßÒWPDp–+E­•rìV‹/´úV̦‚Ò¦Ö•¤AIï¤wÒGàÆDÖ-¦šPjº]Zˆã*¡a#Ž`ÛG‡|žö>ûQì{ÀÛÐ-u8;Qì{ÀÛÐ-u8®«•ÿ1ÿR‹×`±òåž yÒ:pråž yÒ:q“µǼ °}×SƒµǼ °}×SˆÕR¿æ?êQzì±áÄ;PÚ ­-+Bï•$æ Y~†‹æ-ýQ1cÚ÷m‹ >µ­¹TMuÇW¤¯²9!$'<õ£˜ ó_i±•^¢ÙTxØ´Z¹‰10 ¢+IìvRÒ”„êî]mDJY¤$—èófö#vÉõÌ^åÕ#VHg,ò<{ç¢k 4o²Î*_±U×¶Áô¡oþ‡+÷Ì×¶Áô¡oþ‡+÷ÌZ<·Yçyþt¾œFÅ¿“sH·#Þˆz³  ôšku]R˜lé!kh+RSÝ£‰wIøÆ)y*uˆ˜¤kÛ`úP·ÿC•ûæ6öog×è—urä¹.hu©Õ¨°ã”a!¤Ç/H/9¨ù2ËHïç‹–ë<ï?ΗӊÚÝ6w²JøTÙ’$©ª¶ËΩe ×PV‘™à3RŽ_? ì. T{^ÒŠ­'lSª’f«ivÛJ’òÝ-·g/B ”NIÎi9 øfIü'þ×¶Áô¡oþ‡+÷ÌBÞ7 VŸp;#̶Ëm4R“¥-$ž%$ž$â/Ûu{çLy›?S|Jçøò6Q7{^ÛÒ…¿ú¯ß1Ž]¯µ¹QŒþÓ­õ´ò n'Úz†i#"3>,*ûn¯|é3gêcR¿v×ÍhP‚c9’›ŒÒžäñ Âcƒj5ÁZjÍnì’•gZ×>º}2-9ÚŒÚJ¤¥Ö™B)d< R›AÌ©@ C"HPˆö½¶¥ ô9_¾cË\S>Æ[5öôëjԆ⠒“r<0TÚÄZlå¨ÝÔrZËxÄ…DmÄf¥@˜ ÿ1ÅD¼T¦>eÐÝdbû^ÛÒ…¿ú¯ß0{^ÛÒ…¿ú¯ß0šÍëWyÇ[j¡Ű½ÛÉLV mZB´¨iàt©'#ð(‡“ö±ç³nê nÉe/±¾TDo[WÜ­9Ž)9ˆàrÄø6}û¬V=ï.ù·«×UõKª1oJzK1¢[ªˆ·ägXȹÙ+d?r ñ‡j?½.›‰Ré×å6•O@ ËxÈZ JBÔ§{!:‰)ø ³Ì”˜µÊ¥On»;fd¶ÑRœ „4†ÒUɲ†d$ ÈÌåŸ{3—|âÁÚÅVu*S ‚ãm—p8TÂN”5—Ý—Ýωd+.²ÓD>8|;nJ¥ïߥ _è¡ýïi{÷éB—ú({Áíº½ó¦<ÍŸ©ƒÛu{çLy›?S»‰™f¾…‘¥ïߥ _è¡ýï û%ÙõVʳn bî8µ•ns³“4ÒÔÓ,¸¸í2œÙß  !D§<È{øPöÝ^ùÓfÏÔ汚\‰Ô= Ê–êyË©ýJWà > ÀÅÇ T§B‰ Õ²ÚlZs6=´)RÝ’þÔékuå—Wµ<µ(œÉÈJ˾q´½ûô¡Ký?½ãv㹫1nñ˜}„4̧m=ˆÑҲ̧>ðÆ—¶ê÷Θó6~¦.!¾žòQ »XŽÒ÷ïÒ…/ôPþ÷+`W•nƒ.‘;iôÓk*eݱJ²#.²ûøÝöÝ^ùÓfÏÔÂvÜ.ê¥Gb·3mÔYq•À}—¦“Å9¡hÔ„‚2!IPÏãá‚ÇÓÞRذ‰b¼vµlÜ·E5ˆVýÑ †€UÙj‘I3TøÍ%)OÛ›§3ß'‡Õ_ö—¿~”)¢‡÷¼Y[K”ô+}éqŠóMf…)´¬ Ýh w‰Å\›ò¢¨,Íh&4Þåñ>íÍáU§#¨© eß$eßÅa±Åµ^4F5ä9µYûKß¿J¿ÑCûÞÒ÷ïÒ…/ôPþ÷ ûJ\£4É·&4Ù:wžDd:î¥iN”æs âFXתmb-6ráTnê 9-e¼bB¢6â3ŒÒ Ì˜âÖ™.öDç²”Öím¢›²·xŬ­4§©Í°ÅÄÒu— Š·îg–ç,²ußá†í§û€ÏŒ§ÕV*Ý“Wd×½’ùNÎnSÍš¸ëd 4¤ª\#©:IÌeÝøâ´¶Ÿî>2ŸUXl"u€â­4A’q›½½îoÕÍwû¨×Š1þq†Þ÷‹7êŒa¾*Ô¨Õı"§ §Q>¦Ü”©9´’3ðàAÁã»Ìÿ*büùz-锸¢̳)M¨0ëÍ[BòîT¤$¨‘ )$ŽŽþ+tÖ®8VÛµ(wº­%úÝ56©>Fòíž)þtŽœ=žèYÈÚ•­ËúuF»‰vçaÓ§VçÑ"Kìä¸ãÒ"ªI+Ý€–TÜG;¢ °çs £'I`‹Žå¡Qoomr⢱<þEì8ë„Ë.¥+Üê݇԰ڲÞo@. z>ÓŒð©VŒ^LÝÜ žJ­Ì¬³ªk]ÓÒ»+x•pâÙŽé"4£2r9âI¡AžÀ…~ÌGŒâ\b†ÌèȈÐIÔ”%a½øl(è ½;¯µâ¢×}œ®Ïî9×+u)/Qy>$*”¨ÝT¤¸©j%æàHÊí9j:µ:R•¸Ã…ûaËj…MvJäU¶ìÙS]–ÙP\‰>°2Ë€[ªáÈ ÉÒ]™§­ã©BÞBU¡:U©ZTrO€ãm1’Ä]f5uµ8¼’j­†øÇJw ÷IãÄb9šå3"¾åZ„iLÉ L´¢Û‰p øð% cÎ\¢sÄ:GNeÔÜ­U¿ƒ¹DçˆtŽœ¹DçˆtŽœ]‚*¡½¾êíòÉߨab×wÞÄ?‘ê1Š›Øðâ¨mÖ–•¡w‹ŠJ’s ,ˆ?Å£TŸ ±³fǼ™'FùÔ£VHc<³<{ãþåä>Ë~"ÅŠbÕ—˚ط’Êë4«þ½Q¨SRà2¡Äw•ËRkîÒû&>•¨«|ÞDëNv¿/йêçHéÁËô.z§yÒ:p hµªCå÷È_Ÿ‰¨ž´ü9òý ž©ÞtŽœ$X’•숾ŸŒóo4º5K¬)'%O"?/ï¥Æ÷R®Ñ=ö¿ýࣘÚV–né@T¢„4…ú{•%¤Ǿ €ŒBr7œ"ytôã¼7/2FÕž#ìJŠÔ˜Ï6ó 8Ó­¨)$ŒÂ’GâÆ ï¸“<]ÏTàå:o8Dòé鯵j£O]Z:2”¦òI'Ià8àªÚ­]š}ë¶äŒ_ü~9åuÎL½nv=¹[4mU&—ØõVuº¯ô(£X=ßrrËîOxü l 1â{­'å>Ó JJÝXJsT”ŒÏÂI|dŒW§Mçž]=8D!V­s=à•/–{:©VbÈ’Ó4Ô3\iƒ©SYÔµˆ­’CÁµ:H'Kè÷ë93ªOÚ4ù6íZ˜ÓÐéîo_†©Hy*vaBPó` ³9ñÏ1–_ ?)ÓyÂ'—ONS¦ó„O.žœ:f´iJ-}ŸS˜£íweô˜Ëql@~Tf”áe(¥ÈH* žCŽ@bÐÛûxÒ½ê3ŠÖÔ•Nß6}Øò{MBn­Ú²ÿWJïå‹ o T"G~tfÞ qeµº”¨$¡ Dç‘)WÀ~,(|U þ_÷IXY²æÝòjŽ"àØñƒ$¡]‚Ó9¯Rr‘1óÞÕÃHÊã7ÊtÞp‰åÓÓƒ”é¼á˧§Y…@ܶðËìW÷¯~TÈý†ùN›Î<ºzpßìSRWiß‹B‚’«¡ò•˜#°!ñT^iòÛÝä’vÚ‡ä_p`µ>dFæ\rb¼[[ˆòÖPT8€JG‘ JT‚¯ZrÖ/K¬L{²é4J„×Ô ‚ÊdÈZe-*@Nå†ûéÓ  ¯0¢¥›Vé«Ò]¹êNµT„¶×1Õ!i’ ÎDøŒhr7œ"ytôâÀlÞ–]BE;ªEå{G-Èö±ËûžQå'4ö'`ëϳ5ëÓÙ}Æ­uö¼òîq©PV¿cu½ô‡µ*ªw’Zݺ¿ôÇû¥£Jt¨÷ÈÒœŽc!ÞÅ‹ÊtÞp‰åÓÓ…³Ï‚öÊ.™™ŪžîIC©$ðøÀE*Zê)Åt†ÖýéJþˆŒÎ9"ŠÃôšZÌ2ËŽSªË¢ÈÍ)%0ä‡áêNC€C -ÌÈ8š”§’Xíž\H–‹Æ\¦X !²ë:Õ½hä3N_?)¾S¦ó„O.žœR«cº‘Oì–)UJ .N‘sK†Ü铿-Ørˆ[ÓšqÕît·ÅO‚Îé´„…}Îツ4ÍB=;gÑêÅÃPjJ,¸æñeÑM”©YGVyœÎxgå:o8DòééÁÊtÞp‰åÓÓ†ÑgµôR»ûæ#þHMý®-½§û€ÏŒ§ÕV* ˆ>Äd« Žón¤Z3ASj ö\>1oí?Ü|e>ª±2Ÿžgš|È»ËùRö÷¸|Y¿Tb£³-›O¨?:vÏmYR¥:§Ÿ}ú,u¸òÔIRÔ¢ŒÔ¢I$ž$œsÓ[Aº›m-¢ô­¥ %) ÄëChwg†ÕßÌÇU†¿G8ºÖþñC'l´ ;»Á_½©öYôigú7ÔÁÚŸeŸF– c}LsåCh÷ƒL%M^µ²¢ëi:ƒd¥¤ý®þDå´¯ÃjïöV+« }îù«xÿÓß%}ö§ÙgÑ¥ŸèßSj}–}Yþõ1BöÀ»<7®ÿaÕ`@ºü7®ÿaÕ`ÕŽÍß5W¿°ê°j·fïš5€Ëß%zö§ÙgÑ¥ŸèßSj}–}Yþõ1E‹îéðâ¿ý‡U}½]Wÿ°ê°j·fïš5€Ëß%Ñv¥§jÚý‘ífڣѻ/Odrt£o´ç§^„YjVY÷³?!ûSì³èÒÏô o©Š7ÛÍÑáÅþߪǢùº<8¯ÿÛõX5S³wÍF±{ä¯Ôû,ú4³ýê`íO²Ï£K?Ð1¾¦(á|\þWÿíú¬{íÞçðâàÿ·ê°j§fïš5ˆËß%xv§ÙgÑ¥ŸèßSj}–}Yþõ1H{vº<8¸?íú¬z/kŸÃ‹ƒþß©Äê§fïš5ˆËß%wv§ÙgÑ¥ŸèßS‹NÕ¤Ð%P©vÕ .v¾ÊMG‘­! ÖÚR­I'0sÃóíÖçðâàÿ·êqô/KŸÃ‹ƒþß©Áª›¾hÖ#/|•ÙÚŸeŸF– c}L©öYôigú7ÔÅ&/;˜ÿ÷ÅÁÿoÔãÑyÜÞÜöýN TüÝóF±n^ù+¯µ>Ë>,ÿ@Æú˜;Sì³èÒÏô o©ŠWÛ•ÍáÍÃùãõ8÷Û•ËáÍÃÿoÔàÕOÍß5ɹ{䮞Ôû,ú4³ýê`íO²Ï£K?Ð1¾¦)on7/‡7çÔãßn'‡7çÔàÕ/Íß4k&åï’èk^Þ [TõÁ·(tÚþ@|XÓº,‹.å¨"uÇhPk›h2‡êÆd8”H@RÒHNjQ˽™?(awÜžÜ?ž?SEßrþù¸<~§©~nù£Y7/|•ÍÚŸeŸF– c}L©öYôigú7ÔÅ4.ë“ë‹óÇêqï¶Ûë‹óÇêq:¥ù»ædܽòW'j}–}Yþõ11jZv­¯ÙÖmª=²ôöG'@j6ûNzuèHÕ–¥eŸ{3ñâƒeÇáÕÅùãõ8÷ÛeÇáÕÅùãõ85KówÍɹ{ä®>Ôû,ú4³ýê`íO²Ï£K?Ð1¾¦)ßmw‡WçÔãÑu\^\ž?SƒT¿7|Ѭۗ¾JáíO²Ï£K?Ð1¾¦Ôû,ú4³ýêbŸMÄûêãüñúœ鸼:¸ÿ<~§¨~nù¨ÖmËß%|Uí;V­@‹Bª[TyÔ¸:;˜ ;>„”#CjIJt¤”Œ€È Cö§ÙgÑ¥ŸèßS¶‹‹Ã«óÇêqè¹î/®?Ï©Áª›¾hÖmËß%ov§ÙgÑ¥ŸèßSj}–}Yþõ1Q{g¸|:¸ÿ<~§¶k‡Ã»óÇêpj‡æïš5›r÷É]4 žØ4:³UJ%mÓg1«s*!†^oRJN•¥ ŒÒH9ñ#g¶ r¬íR·cÛu)ÏéßJ™HaçœÒ‘©jI'$€g¼Å/í–àðîäüñúœz.KƒÃ»“óÇêq:¡ù»æhܽòVßj}–}Yþõ0v§ÙgÑ¥ŸèßS/¶;ƒÃ»“óÇêqï¶:ÿ‡w'çÔàÕÍß4kFåï’¶{Sì³èÒÏô o©‰ŠE§jÒh¨T»j—;_e@¦£ÈÖ…ëm) V¤€“˜9€áŠ<\UÿîOÏ©Á튿áÝÉùãu85;ówÍѹ{ä­ŽÔû,ú4³ýê`íO²Ï£K?Ð1¾¦*l5ïî_ϩǢà¯xwrÿZ7SƒSÄÍß5Ñ™{ä­nÔû,ú4³ýê`íO²Ï£K?Ð1¾¦*¡_¯xyrÿZ7Sy~»áåËýhÝN O7|Ñ­—¾Jìºí;VèìlÖճؚ»”`5's«-Z5¤éÏJsË¿ø±ÚŸeŸF– c}LU|½^ðòåþ´n§ŠíwÃË—úѺœN§‰›¾hÖ¬Ëß%iö§ÙgÑ¥ŸèßSj}–}Yþõ1PÜ75Ç ß2=õq)èñ\u ³¤©)$g“#†cãÆï-×|<¹¿­©ÄjwÖ–»æ§Z2•³ß%qÚöE—mT:Ü´(4yN4Y[ôúc1ÜR  © §4¤åÞÌ‹¶Ÿî>2ŸUX¨¹n»áåÍýhÝF1É©Ue 7&õ¸^@9„¸"¨ñäXƉ]ø1›Ýâ³ÌiÅ„è`oïÿÙfox-1.6.49/doc/screenshots/xfe_small.png0000644000175000017500000012754311637250333015134 00000000000000‰PNG  IHDR$X#*bKGDÿÿÿ ½§“ pHYs  ­#½utIMEÓ† l IDATxœìw|TUöÀÏ+Ó'“Þ{¡…Þ;R¤JA@Ć®®®uîʪ«²Ë" ®àb)Ò$@ !¤÷žIOf&S_¹÷÷Ç Ã0 ™ÐÞ÷“O>sß;ï¾ûÞÌœ¹÷¼SˆèèèÑ£GC·X¬£a »¹Û`Y1¦Ð ›|öDò zôèÑëÿ±Þ`0´µµ!„œ„är¹‡‡GYy™™ ¬mánê€DDDþp˜†µqØ ^F£ñJ2r¹œã8ŽëZ$)—Ë- ƸK‰Db0JJJh°˜-Õ5ÕgÏœeÆI.&&fðÁº6§ÐÔ4X®õŠDDDîL¬æv®®®®©­ ðè,`2™âbãRϦ†‡dë3«Í›|29>.¾ó^žçÝÜÜÌf³Õf¥…MËÕÖÖZ­V'QF#L¸¬,6š­ QR3/ì•IÂÆ":ÊO¦3óù5Î=ˆˆˆÜÁØ,6ž§ ±W¢L&ë,PRR¢R«`àÀ òóóÕ*µO||¼Á`pÚk2™X–¥( :´A©¤óJ–ÐAbYaæ%UKB<é² $«KêÌ ƒÂ}ä¿å´]ßU‹ˆˆüñ`£Ž“Ífë,`±XÅ‚x¤Óé6lØ`ß%“Éžþy‹ÕbïjçÎC† €½{÷0ÀÛÛÛ¾„ìÐV …b衵UPP Õlo01`±²ƒc݆sWJô&›¶Åê©–(¥d§Ôdåkš-ñ!j–C¥õæwCDDD~§0V–CÒž Û˜ï÷|ooªÕêçŸÞÞ$ 2 àùçŸ_¿~ýÑ£GSSSgÏžm6_Ò$tOƒX†±˜€8_hÝϯEoK/hâ¶Í²jƒÁÀr¸w¨²UoÒT´]Xe@W0›‰ˆˆÜ°63 UÏå'Nš8ï¾yÂ믾þÊiïðáÃFãsÏ>çááñî{ï ;;ÚÊÆØŠŠŠ:[ÙY– Ç›Ì{MfÆSM×4 F›ÐÔ™Ür}t°›¿§ 0€¨ UQ•Îdf{~"""8X†áÐUx 9Bx}ààÎõõõ>¾>&“É`0øøø8îêÐV<Ç755u¶²ûøøËC†AF+$A IðÞ{²ÚßKëZÌÀòÈhe¬ [®5äWêà\aS‹ÁÆ#qn%"r'ÃÛÌ_úšÿíõ¿åä䨛¯¼úŠR©t”oiiÉÍÍ^·ÚwaÀ?|ÿCzZú»ï¾{>ãük¯¾öñ¶:´I’*•Ц† …¢ÃÊαŒÅ í«‘&gÔæ—ÂÒ©1_lÄñŒÅV£5„ù*jêôÐ7Ú³µc¬¢‹–ˆÈ ÏØxÄÛ›ãÆë•ØËÞ p|̧P(úõïg×VcÆŽqì cðÚ__óðð˜0q‚R¥4™LŽÊ®C=Éåò¤¤¤î¬ì g2[`P\ð× 9ÀáÔ*?wiy¡¤Jg2[MfëÞãÆ¥Sã «¤¹¹Õ„Aœ[‰ˆÜÉð Ãñf³Y§ÓÅÆÅÆÆÅ^Ú‹x»¶jimiji5z”ãáµÚZ–e€eÙ¦¦¦ÐÐP«ÍZ«­€Ð†eÚÚ½½½ámEQ”››[g_R…B!¼@g³0ðkJ¹}o~i³ðbÿÉ2á…Í[¾Í¼Þ ""ò±6ŒxF£T*==<; DED©ÕêÈÈHµJÕY W|/„QLtŒ¯¯›Ú­³€O^~ص•Z­niia9g£¸¶N«­Ó6·4WW·¶5”\ˆˆÜY`ÄÚÃjjj:[½íäæå@ScS÷]UUUuÞ(‘HlŒMxxÉPõϾ‹®·l²0î¬óC‘?×ÙíH7Їn^_ÒVj×CO¾|3Î'"""rmüoó›ö×b‘?¢¶ùc j+‘?®µUKs£¶ºBøÃ;ô#|ÿÍ'W{¦†º¡“zmãv¡+¡[«Ålµ¸‡æ8VèÊl¾b0;Æv៿»ÚÑ:ŽíÚÐëZµÕuµ]<æhkíðÿ®ýFa2¶ 7§¥©‹ìÝ““™V\}¥½•eÅe%×7:‘»][‹Ý#ÊþQwä¾\®µÕWŸ¼îìIáçù Sf@c½öjÏôÉïdgžuÜ.t%t›™–—•ᲫæÆúÏ·m:wöäþvºæy®µ¹ñjGë8¶k ­µùèÎ=™žò[ÆÙ“]Êìúl«ðB¸öEʉ_ýeϹ³'“í¯,/¾ªcFƒÙtÅ€ð¨Ø¨˜„ë È]Áñ|G(‹ý£îÈ5|¹\ç`Je³æ/³7?ÿxルŸ^Ÿ:~0'3 †Œ7pؘ®¿ˆ—Ÿc?çΜH?sª*JíÝ?ô#˲V«eä¸{ºï-¡wÿYó—}´q=0Œíð¾=Õ•¥0}î’ÀàÐÿì©*/€i³yxù€Ål:ôów÷Þ·äËm›C›´ý ?{êxl¯¾c'ÝÛÖÒ´ëó ¾wÒø{fn{ÿí€àP:â¿ó²ÎY,æ„Þýýü]c½Ví¦Yºj]÷ÃÛ»kÇ’‡ž”Éäã?(M?ó›RåVQZzÏŒù9™iEùYozkõº—„kO=u43í4$ 9lÔÄ­ÿ~# (¤¡®¶ßÀá#ÆN>—šœžòLŸsXdL÷g=aZt\bVFª¶º"<2vï®OëµÕî^Sg/*̽ÐX_[W[¥q÷œ:{I~úVßÖâ¦ñ˜6{‘S?™é)$Eö0¬¶ª¼0?Ë×/ç¹Ððè?î2¶ë=¼|¦ÎZ˜“™“ \Eʉþ~1 }º¡È]Èo‡÷䜀ác&÷4¬óŽ­ÔwS»aâ´¹±®>6®µ•Õb”¨ñSû$ qüíÍ>ö‘§^€m›ßv©­êj«…~Tj·e<~æÄ£Ï¼ ÂF¡ÛñSfS$5p˜‹ªvúx½¶º´(!^ßÖjµZì½-|ðQc»ÁÞ¼åã£Ã¿ì6z¢D"5™Œñ‰ýz'íßûÍ#O½¸}ó?ÇNº×ÃËgÕ“/À¶÷ßÏL£Ñ0`ðÈà°È6®ÏËÊhin3qzAN¦—ÿ¬Ë…P¤î±Y­2™‚ (’ç9‹Å?uÖÂ#û¿×ÖT5á|Ú©Õë^²_{fÚiû˜‡šhl×÷°@ðG×;9#5yÕ“/’Aöàì<Ïs‡1"fÎ_†1ÎÏÎȽŽ"âÑg^-̽‘JK$½ú èÝpiQîùôÓªË=‰Ã"¢ØÛoÀ°Œ³'[§­á96ãìÉ¡£&DÆ$dŸO-È9›Ð'åÄá¦z­§·oAnfeyqïþƒ\ŽPän`Ûûo QƺÖÈÏΰ« A[aŒ ú¶W?­Rk>Ú¸þh+¹B)|‹:SSYöéÖ àãÛE>f'ƒC¯ÔÏ50däø9‹V „¶o~{î⇺Î9Ÿ6kÁƒA¡@ÓtDt\eYqDtf2ÄÄ_ö™8ôów¬mÔø©:]‹ã./¿–æÐÖT†„×]48þ¼ç Æ&LíÒPWòL@PhSC]»¾MãÞEø…È]È#O½(|Å„IEY‘ .Cì2Aa*µ¦‡ö4_—Ä&ô™6÷~È:wÆ¥0Ë0 õµ@‘”_€B©j¨¯­­*V‚r¹Â ok7èÝ4îÝ÷f4êk1ÂwOa²#t®q÷¤HŠ {ú ¦vs;“|xØèI]öVR”7sÁ2øfLJŽÛ ‚˜:ká‰#¿Lœ:G"•Æ÷îß»ÿ½®e£ÆOM9ñkT\"Ç2,Ç@SCÙlâ8V"•€\¡l¬¯õ»¨’ •0f…¢‹ÜfIÍ\°¬0'³±®Ö¥¶š½pyt\¢ðºª¼¤WßÁa‘%9ã@å åØÉ÷FDÇ·57"Ü…/òÔY ÿþâc³,·oQªÔ§Î k¬«ÅÀ˜‰Ó‹ò³ú¾÷ÛOg-xÐå͹;IèÝúÜ%u.Õ¾Ñb6 {µ«¯<PIIIcÇŽeæ×ÃÇ íb5GD`H¸SSøzæÄ¯5•¥#ÇÞ£PºÈ¨kk)/ί©,mlÐÆÄ÷ ˆ9ul¿Úͽw¿AöýƒµÕ•fS»`p·5•¥5•¥5Õå –®V(UAd¦ª©,]°tµ\¡¤hÉù³'k*Kç?°Š$H‰DÚ'ihKs£_MÑ!áA(J/o_á¼‘Ñ ÉGöÕT–zùøÅ'ö·_2I‘1 !a‘Õ•¥EŸ>~°¦²tÒ´ûT]Å^:âÜÖÚœq¦±^;sÞRš–dgž­«©ª«­ ŽOìA!á)''ôNNÑÑÿô¹J•›ãCÂOÿv¨¬(ÏËǯÿàÝŸš O/ûÛU\SœŸe6µ'ôàáéíáé­T© ‚PªÜzõPYVT˜›É#4dÄ8‡§ÚíÒoJ­1èZ %—+‚pÓxôî7¨ 7³¤ ["‘ óy…R-“+ƒC#xŽíÕ·ûá‰Ü%&¬…ϰ¯PêÉ#5•¥c&L—É$AøúøqÇ25•¥s­ :e¬€Ì³É÷Lž`6›ýõWbÅŠ¯¼òJ»±ý…ÿ*FÞÜ<¾úßæYó—¹if²\¡t-'"r× •ÊFŸÒsùë²[‰ôÑSIDÄ Š¦í֞ଭâùNY®DDDDn1-!ÉËüuœµ•R îê›’§FDDD¤çèpªëଭ&Ž(ä\¨«o¨¨w®õ,"""r³áà·8k«6ƒ)%óRFcmyVPd?hÖ³Ì3™ŠÜ$FžXVã"?¬ˆÈ]BVöüì ][+DÅ^2 åe¦Ÿ9íXÍBä¦ÒÜÔ7`Þ\wQ[‰ˆt¡­xÄoßüvpX亿¬¿4ðlÙ²§žz cÜÚÚ&l“H$ ?I‘îÑ6ê Ë»F?~p·¶Éuòœkƒãù³éYCõ£i×Q‡c|1å6A’Nž¯tA!‚tá"ƒŒ HW’Nh«+~ØùIlBÿácïim¨ ‹éÓ“õžç3Μl¨«€Öæ¦)³æ‡Ü»kêçØïž€1Â+ ÷Äåh{r÷n%r©º2àé¦Ô6ëoÁºÐV}úyöµwB¢4îZ£sޤ_ûî‡cR¹0l¦??·&*2¼s'"=Älµiu·kµZôÔ•´¤ªI%Å~ÝÈTÖ¶¶µµ&õ‰a9îxJfEu“ÁÄN0Äåׯll pW*ämúöÚ†w/ŸîåyŽSËŽ”674÷JˆÕ6¶u–A~™y£†ô€’òê6£AåÖE$*I’…eÚĸE¨ÿ•Ô™§M.—Ö7¶²ÒÈIФÏ€{E¥ç”wy”Ô3§eþšÿØ¿ãØÀÐÞÒrª6cÁ€{ÇNìÑ|g÷—Ûëžzþï¾!ÐRWÕÖÚ줭(’ˆŒ‰—ˬÕòÛ±}A!ÑÕe%…ynîžRYn[[ƒ—÷¿u÷·$ÆG””ÕPr©Ébkjn•É©Ìl2t7?eñ|¯¸ˆ¬œe_vn¡ã^©\.¿÷NQ4A’F ‡ +«8Žã80&HRõ—H»ø<8ÐÚRݯ_¢¾½eèСÚ:­¾¹ÊM¢38[!Æ‚·€ ›8žçxÄ &×S:"0Póâ_FŸÉê.=䈱~ u¦ÞQAý¾ ¹œutÚ*:Ô'¯¨¼¤Üjµ˜œvI$ò‘ã¦6H ažç@ˆá0æUò?üPSSCQÔ Aƒòóóóóóà¾ûî³Z­eeeµµµ±±±‰äÂ… 3fÌhkkkmmÍÍÍ%bÖ¬Y.¯þN o{ïïÏkk*…¦T&{ø±ç{x¬¶±õôÙ,Œ’–ìùéð¬éãÝÔ—…—Úû¦êu@gh¶Ð4Ëq" òK$$7jH7gÁéôıJ…D¡T¦e•X̶ˆ`ﲚf·Nùa’TªÔ¥å•Ó&O¹PÚe‡:½Q§¿ºì¦væŽ>xØääS õ åÆö ©Y®öT¸¹Ð %…¹ÉG9väÀÈq÷46· Úª¨¸0'3måÚ? ¹1|CûôŒ‰x›_p„Åb&Ê*‹#¢ã{÷ÒP_ÕÚZsåóh4ê¦f]»•ó÷õ6[›1F³‰³¶‡‡Ó ÀçR™<2Ø;;§016<<4¸_ïÛ¢Õb‚¬oh²"ZÐ&V³qì°¾$Ieç—ùøùyhT:};Æ ¡)¥B†1®Ð¶v3B¥Bz.å·–&­T.%€H>‘l³ØFŽ)—1¾¡ž¥µ:„.ÍšXŽoÑ@­”@›Áİ<%Øà\©+•šþzg&Aà)3»³©Ô²¸^2w «T9«Ú.µÍD\t˜ÒÍùƒH’”Z¥Æ"xÄs,DZË2V³…al6› 9h+ê";wî¤iš¦éÿüç?mmmK–,innÞºuë–-[L&ÓŽ;JKK—.]ÊqœÍfÛ¾}{÷‡¡q÷\û§×Ôn«Å̱ìÜE+דB™yÅÃ@ƒ©ªÚù+¤mhim3ðo4¶·éÛ9†E3lÓcÆjáXn@ߨÄxÉH‚ !èçëí¡–ÅEt‘Ú ‘_ª½ÒbÇ‘˜È™÷Œž1yÔàþ½h Åõàa0-—Hd4-¡èšl8–M>º!töÔq†±@Úéã;¶nøíð¾]_|Ä9Dq³ Ã0ŒA©Rj«Êâöí7ØËË¿¦ªDqe[’# µÛ¸aý<=Üå I’úÄ…ûûøxÕµšmÌ#F«¥­Ýàܬ3ž¹P*ü>‘¦7I‚°_¬R­Ñ[PIuS¯^±PRÙÐÐbШ$IT×u§§:Àß;–ÐÆÝÝ]­V»{¸gœËÈÍÎVI0݃¼=äÄáÏ â{€NùëÍ[ÿ•ûý7%ðÀz½þµ×^?~|^^,[¶lÞ¼y“&MÊÉɹwèEPHøKoü'84bÍÓ¯L™ÙSÃ_EU]eM½·»LŠÀÖ¤õô9–œê$“>rX?£Ñ4|äèukæz»«,FKü$fÐê¦À(%& 88À×ÇEþ¼Êšz››Ÿ§L*Eµ´è$$j7šOs¦ «Ùd1µÒ× ×iä`OÎ}%Ü5êÜ’šäô‚Òš–ðà€#'RïZaaŒI I‚B\ÙN ¡OÒ ¯ÿ;84âÏÿ÷^ŸþƒyŽ+Ì» ‘HÀj6WW–Ù%9À6޵qœÞhÎ:FåæáÄ#ò\QqîÁú‡cÙS……¥U6«E£V5¶ Mo4- Cvd ¥¿¯wC‹ž¤¨²šK«¡˜¸87·ËÁcŒkê[M&KC‹¡­M/£°Ÿ—›Ñd1™-<ÏM]ÛË혭LƒÇ%ÄÑš–Ðr©\&“Å'Äß¿t©V‡ö²7NBSž•§F%¬1ÝÝ”ž•J!—7Ñòµ>óê£Ï¼ºâÑgÀlæÌíGqÊóé—­õûyçÖûúù=úÌ«3î{ ïç§F]¬›ÛŒR™2.2¸¸ÂùÉ:ƈem¬áxFX¿bŒÏsŠöõõÉ/w]°æ1‚7@”@Bïþ=þ|l|"P4=ùži9)¦Ìœ{ÿÃåðuàx‹ÉDÇóR™Üf±DÇö±XM!Ñ<âÖõ3{Š¢Fˆ-ª¨‹ ñZ"­¬ê‘!¼¢¶ ³ºÎ`nÕC¼NÛBˆGñ<`Žã ‚à8cÜ“Y*A2‰LJI¥2)B¨®©®ÑjõFgMG„TBIHiš$øŽ¬ß=¾ùÁZ­~äÈàŠÆËÞå^}ûbë™Ôt7µ¢¹¹9'·`Xà”ѧõð*ÆÝ3+±Wïo¿ù”ãø« Œì¥P9»¶5µ6ä§@ 2“ðI`IB­-^®–ÏmzE6‹™&PS³àR§ ðój2¸Ð ïÄ„¨>½œßSš¦.T;nQªTZ©@»Ñ‚0VJh__/hÖuç`¬KY«¡¢¤A¥P 1$ù·dw7÷¤¸¤œ¼<“鲙лZñËá“<Ï‚IýbŠ<¬] IDATÎl‚ ¬³K+»Ú!Í«×Êrx ®LK¯šµ0l΢M3Œsa½.´ƼQ×X¸órñìùÔÃå%„U â9 aE@Ô×”9Ê«ÕêŽû¢P(¿ $I*•JP©TÂ+•JŠ¢ÜÝݽ½/{Š|W€±£±ÏasO?1Ñ1ÑÝ(äÒ‰#û’I’@€T.Ã&Þ'ÎBEPÞ^®óa;Ž*5«¬‚ *7µÚ­°¬Ž ˆÔ+>$*µ-•Úp÷òñ¸ÜøUVÓr…£:Êd¬zº¬¤ ¹¡N¢ ž±hTHXdϯ‚$)ÿ°Ø'_XßÌðÑc ‚$0F€ ‚$! I@H­ éæp®ËÓ9ÒÃhC§EV—‘–í“CÀjãꚺp0îÉ)⣂$DÈâj}BŸµ†Æv𠊯¿Ü7 ›é0øÀÅÅ¥òèÎ-¹3 —­érûÌyQŽÍi³#œºÐVr™\ãæï^\áü€iÚ´©Ó¦õÔ…÷ªLò7£çß3¡m[6^ȺÐyW[[[ßÁnÈY¤RIb|w®Æ7ŽGUu.Ô#í&k»éZæ£bn^ŽÃ>ý»séè +sU÷áÖc¶ØrË.Í¡ZŒ ]mzq=ˆŠ¹átáˆ1>yü°Í¨w“Kì`ˆË'Té)¿uÓ<—šŒ]æÂé¹Ò-æK~‰yÙ¦‹ylî0¬sNfšÓ¼f*ËŠ*ËŠó²2®áØô”ß8ŽÍL?íRò~;Dn#WÌoõøã'$\rfiÕ›šZ‹ßä^8DzLÒàðÓî/ÆMž™Ð'ÉQà\j²c:Œ³' Iô,¶û‡;´5•B Ò¼%ûú_¶2ÊËÎ W(;¼ rÎûúªÔŒ´Ë;?ÛÂsüŒûøbûú$ 7yF7ÂU%MuEyY=LÌÐ=ù9™¾þ¥E‰ýºN¸Ø çR“ ›Ð§{1–a r2ƒB¿þß÷¯|Œ¸_y‘n¸®ZÍ ce/†Ú˜íñé©§ÇO™eе}óé‡P”Ÿ íý×ÿÛlošŒí_nßc&NïÕwàñC?yzû¦ž<2jüÔÞý/Å<›Œ†åkþ¤vÓØ·|þñF‹ÙÔ«Ï€1“î¶`Œ?Þô&T–™x/|¼éMŒñ€!£†ŒŸ|äÿ Ô“G\ýÌ·ŸÔÖÚ“pÏŒù×sÉ7„Y üð½¿múç«!áQÝ«*8vðÇGŸyµ(/ëä±yYç¦ÍYÓÜX¿çëí0eæÂˆè¸ã‡~’+º¶ÖÉÓïûäÃwæ.~È/ ¨¦²ì—¾€Ù W…Ƹª¼xðð±¥E_ïø ]¯[ýÔKIžO;•vú8¬zâ/ ËdK6z?ôÓø)³²ÏŸM9ñ+جVŽc3ÓSû ª*/ÎÊHel¶UOþE¯k-+ÎÏË:7tÔ„Ø„¾º¶l1›Î¥ž0èÛfÎ_±óÓ-z]kt\â¤é÷]8—¢PªŽúé¡ÇŸ?zà»×ˆ±“SNüêíëüÐO½ûîya‘»ŠëýÝËÏ9òØ“ÇTW•@aÞøúÓW¯{yõº—ãzõ€¯þ·YhÆ÷î_lß$4Ï$a&ó\ŠÅlZ½îås©ÉVËeaMgN9yì@iQ|óé–Ù –¯^÷2˲Å)e>Þô¦ÐÕ ácàãMo­zò/«×½¬­©¬×VäT–/{äé}{¾1nÊêu/ßsï¼ë¼Þ‚R©^°ô xƼº—<ýÛ¯#ÇM€Æz­§·ïêu/ïß»v½]¸ðƒ? )'~U(ÕþÁÖÿeõº—¿ßù?Ø÷ÃׂÌÞo?zûxÓ›kž~Î¥ž˜q߫׽üñûoÀ€!£Éíü“eleÅ‚|aÞ“±ý¹3Â^™\Îó|Ia®ÙÔþÝ—Ïà‘åkþôɇïX̦Ý_n›³helB_ØóÍ'ó–¬ ‹Kì¿zÝKÁ¡{¿ýlÜ䙫׽¬T¹eeœ©®,;{êøêu/¿ö§Uñ½“tm-Uå%¥EyEùÙ«×½l2¶——ܤ;/ò‡æºæV vs÷ôö€Ëò“a|YLüåM“±ý¿ÿùÔÕV …rø˜I‚—wîéé-Wª”*µÐ‰kÄ%Aìt"ÀÿÝôÐÔX?rÜ=0~Ê,‚ †™´ÿ‡oÌ&ãâåk=\A¸T•ÿ÷?o9þÃ÷^þÿ6t³€-/ÉŸ³h%øõî7àb¢Yû…c ^>~ý ?Ÿvj”YA«+J…ûll7@eYQxd¬Ú5hØX»' J9q8'ó,À•rQáΆž¤T©Y–ÞŠ!#Ç ³à¬Œ3ýdû?Œ¿ùl‹B¡ÔëÚfÍ_ ¦Î""2&>"*.?û¼ ?aÊì[·FäãzµUhx”ð-Ê9ÖiWSc]u奠֖¦†ªòbP©Ô>ó*\8—âTçÞ‰øÞIŽ+Á+a6 r/+Á5ë^&I²(?K¡TÛ||\ý |´q½pêÛKIaîòGÿ”Ð;)(4Ú¸Þ×?P 9oéG×{ûú÷I 1kÁƒÂ·¢ÿ $I ‡€¯ cÉ_ÿ@ÊÁ?cÞÒÝ_m³Y-ÑñQñÕ•e4M/^ñØG×+Uêþ‡K$ÒEË×n{ÿ-Œq\b¿èØD¿À`ÁÄ›™ž’zòÌ_úÈ ¸g×ÍÄis…ÃFM¼’ŒÅlÊÉLà¡'„¦ý. /&ß;O¸‡ÃÇL¶o´¿Bsô„i‚Ìø)³[šŒíúð¨X %’ŠÒBa×âåk5îžA¡BÓÇ/@íæýÑÆõý ‰P(UQ±½>Ú¸¾OÒ°H’$ýüƒ¤R¹§—/é,‘ʼ|ü ^[MQ´¯‡_«ðv̸ïÉ÷Þ÷ÃÎÆvCpXä=3æ{zùJ¥rû8=½|dr9ìØúMK¢b{…„_‹/""@¬X±â•W^i7¶¿ðâ_zòemyVXLRDˆo—ÒeÕŽ‰åEn þ>î*…¬¬º‘e,º¦êV½µ®¦rü”SPã»/>ž0mŽ·ÏÕeö¸Z®gêúŶÿÜwÿÔ§º"·€I1)™%ÿÛüæ;oÿ½©©é…^èbnÅñ¨Ë j"·’¸^}]ú ôœyK¾…yê¥k>6"*ަ¯×.!rgãüùP*rW™EnRIÇ{A¤R¡PÈ¥ÝË_%·æ=½ö³Lž~•–Eî(Êù÷ÕY[Ÿ0Y|,s»¨¬m…R5¸widDDîŒfçºÎÚ*3¿òV F¤k–;Ÿ'¾ ""ΈQ""" :å·úm·¶¶G%ÏDn,3fÍ‹NHª¨mfkÚñ=ÍÍbúC‘»»×SO­Ë.»,-¥³¶ª(/Oê׿sA‡¶¶¶–Ö–˜è.Jyyyùøtøˆ—»»»ûùúmú`{¿Á“Ï ×c€c9À-MõaþŠ1cG G•””Θ1Ãh4~óÍ7“&MÊÊÊš3gŽÅbùì³Ï¦OŸžžž>oÞ~ø™Ú碻ÎÍɹñß®ýHDþ¸:t *2*&6îväªÁ}°yóÓÏ<ÓM•é"¤j@·Ú FŒ1eʧ&“ÉÐn è"¡eêÙÔÖÖVw÷Ždr«eøðááaáßì9اß„ žç#H ‡0` €ª+‹$xÏžÝñ$(==ýôéÓåå塇zhذaz½¾¼¼Üf³EFF.X° µµµ¼¼¼®®.<<|þüù åååaaa÷ÜsV«5jTYYÙìÙ³kjjÊÊÊFíááaïÿ÷@mCÛŽ·ÚX§íÆvýé£{6& ZZߣRN"0Fµµµóæ/n±9ç™ûýcÔ7µÛû ~¶Ûm7•žz¸AS] ÷íÓW¯×€^¯wwwŒˆÊbD0 Ã2,I‘ ÇP@[1K`0æ·1 rPÒ‰‰‰¯¼ò PÕ¯_?XµjUcc#øúú<òÈ# ááá&“É××wÍš5õõõáááF£1 àÑGU«Õ}úôÿ'žxB£ÑÄÅýî~ÁBçr‹Ä1¶îJTŠˆˆôT[!„¸NeÄ”J¥PÍÔh2^š|ikJíßISÏ#Œ0‚h´ÚÄÎqìÄiùlo€—— çšp±ØªD"v ÕU·¤œ8ø§L&OI>|ìÐAÁáûö|ÕÔX—{!=2:>4<êÇï>ïܧ‡O¨®©Zx-“JhŠ4uŠr¹õœ=}ÜfµÛõçÓOÀŽ­l6kdtüÏ{¾€C?+¼ï¿|ÿÕí)(”*mM¥¶¦Òb6& Q¯­.)ÌU»i"£ã}|r/¤À¯û¾¼oÏ—7ä¤WaegXÉØ¬VëU lÜô>--mB‚I$ÿÚò%9‚¤ „fN9ï¾ï‚pòäÉèèhÇ 7nŒ_¹rå ?#Ù9Ù5UNïìÓàÄ„©³ìÿÞþkÑ ­É<—M uÐ7iHÒà‘¹Yçæ,\.‘ÈR’³6[Î…4«Õ‚2›º¨=CKå´Tn5éå*÷Ϻ&n…H÷Ä&ô).È.+Ο8uDÇ% Ðÿ² ó²$RT”ÝÞqÀô9÷ŸI> ãè¸D’¢ÀMãAQô…s;,[9™R™ªÊKºï­‡\…•Ý©Â`gÚÛ».ʤ7èwíÚ%<¼ËÎÉæx.0 p옱V“ÉÄaÄ[0`À›Ð¯WbA’c„1EÁ‰_vÜ m•––ææææ¨­ÞxãW^yE&“Ýðs9RUQòß7Ùc H‚¦(`XP´\"é.éB¯¾ÏŸ=…2¶Χš6{1¥:º$.¡ß=3æcŒš›ºNþ£tó2é›=½|ÜÔŠÒêÆë»2‘ƒ‡—Oc}-BH&“wÞë@×Ú|âÈ/÷Î]"W( 8¬cÀZç_èkãVdÂGEEMš8éã?^µj•ÑdLMMµÆcÔˆy2™ ’ç9žçñ˜G˲pyñÁììì 6ÀK/½Ÿ——÷Î;ïÀ /¼˜˜XXXøÖ[oÀsÏ=×·o_ÇB¯¾úªV«4hГO> åååÿþ÷¿“’’ž~úé#GŽ8pÀh4nÚ´é¦Þ‡þýûÿãMš‚@ >Á -ŒPgèÚz%$ƒ ÿußn„x™\®T©w~¶„•²0ç"…BX$ééíKÑÔÎ϶9iúÜ.»•)ÜZ*ü¼5õMº›q±"=Ä1Ùwï~ƒ~úîó˜¸ÞÂõҢ¢/¿ü²‡‡GssóŸþô'xøá‡{~á7 :ÕõT¼úÚ𠌾gq¢¸ gа1ö¦P—HÄNOµÏó6›‹ÇFfswO⇠ò裎;Öh2 [ÎÆ2 Fˆå8@<Ïó“,Ï"î²¹ÕçŸnŸ=ÀŽ;›Û·owl<ØñØ7ß|3111//¢¨¬¬¬^õ…¦H„I@ƒÝv~[ÜМ|DEn/N¹­Ý\D઴•Õæâ‘ŸÉÔµ³;MÓõõõ»÷ì€ïøa <ÂV‹™¢hŒI„YÀ4<ÏóP6Þ†rZ ®X±BÐDBï‡~Xh ßóÕ«W MÔéñÖÚµkßx㦦¦ÄÄħžz*$$DˆÑñöö„zx®Š¢x]Énå”›áÌéY9¹·`T"·’ÖÖÖóçΗ9ÇŠþþÁÛÇý|æ¬s-¾›·_ðˆ$gïË«Y ‚«•àÔjõÒ–@FFÆ€&Ã0 ð<Ï#ž†ãl€ @!|y} &L˜pÉí{ìØ±cÇ^ªÄ7jÔ¨Q£Fu9Fóî»ïÚ› .´"¼xñÅ»¿´îø×“Ic³yû©"7á=ÂZÿpŒ= .^Â͆”v1ë¿+»Æ••Ý×Ed{,„؈̬ãpåPllh‡÷‡ÀƲ m7«wXÙY:[ÙçÏŸ]S[›y> ߯oŸˆÈðÛ6z‘[H]“Îbuvð¼5‘|ðÁoãé÷èõ†¶~éMIe6‹åÀámÏ?»JJKðEK}PPË‘;†{‡òœKWu£ÑèBÀäBàÎFHžC‘„°ìVö2DsоõÎ{Xl²ØÀbLÉ_z} ÂAP€ñƒ÷ϸwúï(9ªÈâ§Ÿ~š5kÖ•šw-=޼á‘qñLÐ¥³{g=ßÿ|øè)‚¤9Ž6¨ÿŠ÷w."vÇ@Q$B—¬ì‚ßneïüLÐb2ZøZ‹I!Ø»B#bgÎ]FÂa )œ¼‡¨­þ Ìž=[ˆîðññyï½÷œöîÞ½ÛQ=95èõúgŸ}vûöíV«õã?>wî¼òÊ+aaaÛ¶mKKK€_|1!!¡¶¶öÝwßÕét}ôÑu†‹ôx%H€ËE‡ë°gò2ïǽ?þœž]=fÊb’¦Y†=Ÿzüñ'§ Š0ùî{ïþÎ3ê]c  @>VÓÕw‰›ÆsÂØÅ©‚‚ã9Žç0˜ç –eo««–Èuáåååè\\\,Äi<ýôÓ½zõ6¦§§oÛ¶ ´Z-œ?þ£>€W^y%44tÇŽ6›ÍÝÝýþûï¿õãß¼ysAA0¶¶¶6»óÐo¼Q__oonÚ´é¿ÿýï믿Þ9Ô5Ðc+»Dê2cŒà¸3 Ëœ@@NNàëëàpúô骦¦¦JøâòÍ]ð´D"AI‘Àÿã­ o®ÿ«Ë±™L¦òòr!Íñ¶mÛyäǽÿùÏþñôðJo ËIhê’•¦àÊVv|ýyž·1$AÚX+ 0 ˜@ˆsöðùÑÐаsçN˜0a‚ŸŸßÛo¿ýÁÀO ï¿ÿ¾Ðd6nܸeË–!C†Üâ‘···oܸqíÚµÅÅÅ.…Ífóž={*++`ÕªUö8–kãVXÙÍ&sAAAÿþýÛ íJÒl6gggø„dÐÐ!w ¡ts—Je%¡ya‚rÊ­Ì0ŒN§OOO‰D"Ö@EEÅ_|ñÒK/yzz.Z´L&“àüåëë‹1úioo·X,$I &F£Ùl&Â÷÷ZZ†"€al$I$‰Bó¬°'0F¡Ûë/r=Ð4-}º^¯ü-ìüY³æRñ.žçyž—J»Ë/*"rgÓSmŲ¬P$¹NÖE ›D"é•Ð ²²³â/Õ×dlƳ)G¤)ÇsB¬/âX ]\)‰Ëìú~~~Ž3áÚ_ÇÇÇÇÇÇÛ7ÆÅÅÙ 5Ëd2aFÖ¯_?Ai€»»»cW· MsO“$€1æ8„–Ÿ¯›c?ýôS•Råîá>mÚ´[4\‘ß=ÕVcŽïºV³—fx'§ŸzR¯7tÕ¬Tt‘ú Ic‚ Œ1¾ÜzÕù.Ô47·ªÕa7¶›0ËE'&¤ÏüóÓO?¾îé à áÙ¶ˆÈÝCOµI’ZÒ½ŒËuŠ“@HHHHHÏ'€"Há_v!Õ*Bzª³•ýoŸ}¾­w¯/héÓ-æ™?WT–ÚØ]«NOKgSÙð°ðÑ£oLºk‘?= Ê£iÚž¡øJ¸»»¨ÈèÞ©dcSSÓ‰äS'NœþíÄÉÚÚ;¼'Ëñ4Eñq<1ÐES”`žÃ¸‹$‚@’²†ÆÍŸíl9XÍ0–èâÛÍÖ{gM÷މÒ­6l8›vYj´ŒŒŒ}ûöýöÛoÐÔÔ´oß¾}ûö?~ZZZ„æÑ£G¯müüé§ŸàÂ… Â!.¤{„²=‘täõ×_œŒîTŽ9"¼---=?ŠeÙ}IOO·Z­Ÿþyaaáûï¿ó†Ú™ÂÂÂ}ûöýòË/B³¨¨H’Ð,..šÂGº´´Th::¾æææº\Šuæv†³,»éÿ¥–žÊ¬9–RúÖ;[ÚÚtfð]î«MEå†Â×ßµXŒMÍ}ûÄ1¬íÇ´´÷þ¹ûY'–¯\±ió¥:=gÏž=yò¤Ùl.++Û·o_FFƯ¿þj6›ËËËwïÞ}áÂ…ýû÷›Íæêêê]»v9 !ÄqœÙlæyžeY!߆`Ú·ïe†aŽãÞ}÷]áÝY¾|90 ò¬Ùl|—1ÆÂÛ'4…Ì‚$ÏóÂ.ásÌ0ŒÍfsüÔÚÕëõ‚ŒÐ´Ë85ÿ¸lذA¸–­[· —Ã0ŒÙl¶?1wj Æ-[¶Úl6¹\¾xñbžç1á—¹R®­V»k×.³Ùl4·nÝÚØØøõ×_ CúàƒZ[[wîÜioêtºO?ýÔÞz(..^¸pá•R wÃUXÙFc÷VöÖÖÖ.­ì—ÚZCC/%Ø{ý71DI”ƒT®¤äšW¯#1ÉcŽ (ã§Ÿxhò¤ Ýtx%222¢££]Îõn1R Írq:Qjjêûï¿ïéénµZõzýC=TTTDÓôìÙ³³³³=§NJOOÿóŸÿüÏþó©§žÚ±cÇâÅ‹û÷ïߨØöâ‹/¶¶¶¾öÚkòÒK]Ö¬Y³cÇŽýë_ååå0jÔ¨¥K—Nžùw’$ÆEÁá_þwmÚÊßßÿf—2ýöÎ;>ŠjýÿÏ”í›Þ{#½Ð{ï ¢€ -¶+\ËUQ¿^/–ûã"xEDTˆíZEª:BGB€@ôžlŸvÎïË¦Ý Mœ÷+¯¼æÌ<{ff79{Î3ÏóynŠ¢€xÓ) 0vŒm5ãïÕG&mú`Ñè¡Cvü°6ÆR? £ PEYI—GBΨٿÓG‹—ü㥴qƲ²²üüüõë×OŸ>=??¿¼¼œ4gÍšÕÒ8<<üÝwß2eÊ{ï½WUUµ{÷îààà–fìÕ«I¯%¨TªY³f…„„?GwwwbòÚk¯5›8p€Ô|üç?ÿ9yòdOOÏW^yÅ1LïÇ$îË/¿ ß}÷i¾öÚkß|ó i–””ÜcÁÑÑÑ3fÌ(++[ºté<¶`ÁAÊËË-·mÛFÞgûT…púôi??¿ôôô¢¢¢-[¶ÜºÑ*00Ðf³¥§§SÕêüãÿ¨¬¬œ>}º‡‡‡N§#yyyÙÙÙ³fÍJHHÈÊÊjhhؼyó‹/¾˜˜˜HzfY–ÄÍ‘æÉ“'§M›v·}¾í¢®®ŽÜ YV566fee™L¦ØØXOOO£Ñ˜••e³Ù,Ë#8/#êããÓ§OŸ„„£ÑØ.Ï}{Ñjµ¢(fee!„’’’4 ƘÜKrrr]]ÝÊ•+É_KRR’R©T(ähBB‚F£!ÎÊÊÊyóæµWôŠéÔ©Ó€xžÏÚ¾«sþ§OdwïÖ­e®¯ ‚ ´­×ØØèéÑÊém6[yyycCã¾}ûâãヂ‚c¢cöïûÍÍ' Œ%IB‹<‡$#„$Q’ĪÒs#†_Kž:uêÔ;ï¼³cÇŽ3gÎ<ùä“•••«V­â8®[·n{öì™={vXXX^^žV«-))INN¾žÞÖÂÆ F³$3SEÓת Reåx–aê f$‰'í7vœ··÷}£ï«¨¨Ø±cGEyEß~}Íf³Ùj ¬«­ã8®™`Hdd¤Ùl.++Óëõ÷ß¿N§ òôôôõõÕjµ!!!^^^ÞÞÞnnnz½žeYt­Väãã¦V«»téb±XÊËËŸxâ‰èèèÈÈÈ   Î;?~<111$$$,,ìûï¿7›Í&LðòòêÚµë±cÇÌfsÇŽÓÒÒÃÂÂH·ñññgΜ1›Í<òˆZ­&;@¡PøøøøúúöìÙóСCz½~Ú´i¡¡¡ýû÷?xð Ùl6lXDDDŸ>}rrrÌfsŸ>}¢¢¢îÄgxÓP«Õ f³ùá‡ööö (ª¤¤„eÙÇÜÏÏeÙââb»KˆÀ0L`` }…NÓt@@@TTTPPP§NA(++Óh4ö4½[»»»‡‡GQQ‘Õj={¶›››··÷Å‹ÍfsFF†F£qww/,,4›ÍsæÌÑjµ.\0›Í³g϶‡@ûúú†††¶‘zl²ØDQ*©¨;qhßðaƒÉ7¢«s+žç FCÛ^öššš6¼ìãÆ«¯¯ŸnÕ˃ 4hPaaá²O–%%&uïÞ=22òùçŸÿä“OZ;ê9Ê08ÎŒ 55õ•W^q X°`All,ÐÛÛ›L”ì(G<<<&Ožl7vss#M‚^¯wlò;"""""¢Ù!ðòò"KB…BáøZplRÕì蟗ñãÇ7ÛÓ«W/2'%ôèуˆ9¢T*»víjo²,KÔøÈ¥~ýúÝž¼N:uêÔÉÞtÌ€””"IHNNNNNnÖC³âÄ.ÒŽêîî>cú 8söŒcž Íó<Ã",a 4ТÈ`a„š=dœ0a‚£ŠÝ×HøÏþcWüyæ™»±$w{½ì-iõûöŽC24edn5í­Ô*'ØœV|Ði›ú{<º…¦ékOW6®4Ã]Õ ŽŒŒ¼Ûž¶ä¼ìÀó|ii)Çq Ãçf³ùvŠÊÈÜ%´g%ت`œ£Ó¥bÓž{öY×ÏÞ6d…x—C]ý›ímómûôÓO}|}0Â@˰pîܹéÓ§ÿužâËÈ\ͼáy¾ Ùu‚ÓÄ®{;óË)J¥BD–¡ –¢@DA,Kš­zÙsss{÷î­`‹EÄààà?â*2›ÍöD?™»„ììlwþ•¹“•å`ÏÞß6lÜ ÀH?dPÿûïÙ²è_ (ooïøøxƒÁàééÙØØèííMâën¸ÏšššŸ~ú©ÙSB§,_¾|òäÉ-Cê6mÚEÄd\gúôéd-2gΜ޽{¯X±¢OŸ>ÍlÚGzæ™gL&Scc£§§ç¤I“F݆ñÉ“'ËÊÊnŠ8š(Š_ýõž={hš^´h‘››Ûÿþ÷?’*ÿÁx{{ûí·[¶laY¶W¯^F£ñĉõõõ<®Âe¿Ë8uDßÌ`÷Þ}›¶é6pÃ*žÿuצ¿Q0,(Šš;w®ÓÆ?¢(1 -!LÖ~ÄoEêË@«~+ c|ìØ±mÛ¶7nóæÍ=öX3÷ßáÇU*ÕÆçÍ›·eË–³gÏúøøBëÖ­;}ú´——×SO=6lÈÍÍ­¯¯×jµÅÅÅuuu›7o~ôÑGËËËÏŸ??mÚ4øá‡.\¸4}útû)ªªª¾ùæ›’’’'žxÂl6mذaôèÑŸþy@@À”)Súöí{«Þ¸{Œ±c„7ÙyêÔ©õë×@FF†··÷… "##srr jjj^|ñEÇ|’?þ˜ä .]º”ì!···wFFFQQ‘ÉdJII!Ué¿þúëÂÂBžçÿøQXXHê›ÚcÙ‹ŠŠì÷’™™yñâÅ·Þz‹d•ÀñãÇW­ZuS꺺dhÆiæÍõFQ/_¾\|Y’¤â’âËÅ—I¯¿n­©«ßµmÃö-?íÙ±É`2øFööìíÑÛ7ªŸ_d¯ÿÛJH‘‹F{ýˆ» ]y&HžÒ4MäØI³U¯”Ñh,--]¶l©îÓÌý—ýá‡N˜0!;;»±±q„ :tøì³Ï gÏž&LHJJZ¶lYNNNiié„ ÆŒEEEO?ýôøñãß|óÍS§Nyyy}ÿý÷›7oFM˜0! à›o¾±ŸÂÃÃ#66vܸq¡¡¡EEEG޹téÒ‘#GhšîÒ¥ËàÁƒíå…eþáááäÁ7)³víZ“Éô·¿ý-99y„ öláVÙ·o_MMÍ„ –/_^SS³{÷*RM«{÷îݺu»)”###Éwá… bbbÔj5ÆøÀp¡8@þ¤ @¾,ÿ8.g5nE€©)HjÝÀd2íÙ³'!>Ì&³Õfå8nø°áH‚ȨwORý<}}}ü(Z’$š†s¿ïjÇ­4%77÷Ô©SŽ¥8î8ö¬fìÉ|¥ @Ë ]W_,ËÚŸx2 ÓÒòÙgŸ‹‹;wîÜwß}wðàÁ†††Î;ÀæÍ›>l0’’’,‹V«‹‹S©T»ví€'Ÿ|2!!a˜Ù³g8pàäÉ“E‘I~uuµc®™J¥òòòЉ‰Ñëõ?üðÿþ÷¿/¿üò•W^¡(ŠÄ£“PR×ÉÏÏ'5åΞ=Kä1S,GMæ­m'ošÍæ~øáÈ‘#)))ݺu3 ~øá¼yó Àl6þñ+W*•ÞÞÞgΜY¿~ý«¯¾JœÑ'Ož„«ù›£G>|øp]]É9ùãg´ã²b /MÆ€€€6ljëj¯—ܽ{÷§žzjéÒ¥f‹ùJV³NשkoŠf( #$ "ÀXB˜ÆHhöoùùçŸïß¿†>yòä±cǦ¦¦–––2dêÔ©_}õY<8púôéŸþùÙ³g%IºYãú‡(ÆØƒ×‰bŒBÁB¨eõS@€0Æ!!!ö¿é¶}ééé=ôÁ`¨ªªÊÊÊR«ÕK–,¹pá©D oþõ˜3gÎÈ‘#ëêêÈC•C‡5ûB.((¸|ùr‡öïß?|øpWo^¦)±±±K–,¦‚ºË—/w,%ß^¦N:qâD£ÑX^^^YY¹sçΡC‡feeq±›©,¯T*_|ñE0 E‘ NOOŸ4i’B¡°7oîhuûÔø^zé¥;v<ùä“y§®f´RŒÕÆñ¼(IØjµØ8çm}:##cÁ‚Z­¶sçÎä ü­·ÞÒjµ;v,,,LOO/..Öét …‚¬Ü‰ã\¡P¨Õêäääddd,\¸ýúë¯ÉYfÍšõÊ+¯9rdïÞ½£Fzüñlj‡å¾ûî[»v-Ñ•qµZ­V«I0ùzôè‘‘‘‘‘‘a±XÈNš¦íaŒ-qPe÷wíÚõüùóo¿ý¶N§ËÏÏïØ±ã!C> ©©©—/_^±bÅ¿rRYþÌ™33fÌX¹re`` F£IOOOOOŸ7oMÓ[·n%MRPjÓ¦Mï¾ûîêÕ«›IÜÜÔ´iÓæÏŸo4_~åÍéϾ¶&ó?OÍÉh©•e2™ FCpP+‚GvÎ?ÛŠþCCCÃÑcG‡j¯,ðàÁáÆÿkÁûáIÃX–µk- Q”$É>H>´iÑ¢wìý^Ë&Ù0`@Ïž=ÀÃÃãõ×_ÏÎξÛV‚“õrY-¦€¢) F€ªÞ`V*ØÂâ*·f.ýן“››kµXƒƒƒ‰¯Š<0­¯¯ûí·W¯^}‡ïGFæ–Q^Ý`µñN¬Zúîÿ{ÿíêêê—_~ùfV‘h#5Çh2–••Í™3§²²’|o'ðù±G**«¯÷à¼<ÜoãåÈÈÈÜÕ¸:Z) ½ÎI¨ºSÝÒfM$¼þ)>]‰Ô'5åÉ ‹¢¨ëi0ÈÈÈ\­(ŠjC–”àT¯¥ŸÞh4UTˆsìçççéywÕÔº¹ Œ)ŠÂcŠ¢ì5åĈʣ•ŒL›¸:Z!„ÑIÉIžãÛ6àx®Ùž–}QoÄŒBÅÙ¬ŒdzwÁ+÷Xå%Ghš¾XR­Q+hŠEÄ "hÕJŠ‚£‡²“R:ª”7RFFæ/‚«£)äÛ¶M£¡±mƒfš3﾿Ð"z‡ã’¢sã™FcÊ^ýô­7_îÖµ•²h¿ÿþ{{%îLf[BTPKoºÑhذö›°ˆè+W%#óávxÙÍfóæ-›IÌnQQÄÆÆ¦¥¦ÕVW•T_¾Tt–˜ùú‡>õü{4Ã`„0P ƒ×¬YÕêhµxñbÇ0QÂéÓ§+++ï¶ç€Í iêÀ‰‚f;y΂œU–•‘‘i‡—ÝMï¤÷õR[Aðöö:dèîÝ»h4<© sózxèXÞ hŠÂ”( WªŸÒ ‰ Íë oÚ´ *** ¤¤„T!;vlppð?þXXXˆ12dȱcÇ:³fÍrên“‘‘ùSàjž EQôuJHÙi{\(,,üøãÏœ9c1[ìö4CóÏs¼Ébâ9ã9Žç¬fÇsœ•kæx^²d ) D2§ÜÜÜH“”“¿ Cï¼óN‹ ‘‘‘ùSÒ/;Ï;q¢Ûšs6cëÖ­EEE?ÿüó<@öÐÅq<+aša$I”0…HÍ 1–Z†Î×ÖÖ’(S’ÞYSSCBÛÉ4*&&†¢(¢°sþüùmÛ¶  —‘‘¹h‡—Ýj³¶mc4Û8úÔSOY­ÖçŸÞl1WVU€„„kÕO1Â@Q€EQ’¢$$5«~J(--%b~‹-"údÄf§¼¼|ÇŽ¤½\êNFæžá6ŲŸÍ?ÛÐбî—u‚(øúø€ Š6›•eE Q€E ’$I˜b‰—$ SMV‚½{÷NOO EºtéòÚk¯ÁUé²ÄÄÄ­[·®X±â‰'žP*•äÄ$#sÏàêh¥T*ÝÝäÁøúú¶ºßÓÓó™§ž€K—.…‡‡;Ô‰`xžE #, F8 0-„$‰ÄyÛ™3gŽ£JÙÌ™3gΜioúûû¿ûî»dû7Þpñ¾dddþ,´cnu])^»³r5Í 4J*{÷Z²@ö »PLˆÿ½Ú.##Ó.\­$Iâ¸æ‘èͰ?ì»®AÓøÒ×_ŸïâÙeddd\`$ÉÆµõÈÌó4‘‘‘¹íY ¶s¡çŠA5«Æ@c$Ž=ªWï›PAHFF枤=^v·ô²_3ðibpâ÷“™ßnî5p,«TòVîóoÖžÉ?­R(íÕO'L˜Ð†z²ŒŒÌ_ŠÛQó!d0 ƒ F£Ñ`0Ø«×Ú|`ÿ®ý;·:°›…’:æR u© .Õ²—ªáó•_9ö³páÂÛpµ222w'.G‡JΣCMÆÖ¥ Ã굫##" ðb!Çs*¥jø°á<Ç{xø¹¹»Æ”Ö%8( 0EI14ìß’éØO^^^+½ËÈÈü5pun…$ç™7m gÑQÑÇ ß½k÷ÁCô@vêÝÜ{÷Þ±K¿Ž]úwêÚ/ HEAÞ& ¢ÍÚJo<Ï¿ùæ›dû•W^A‘(Ð¥K—–””¸x/222F\ö²Sð³šßxãŸ~ú©¦¦fÆŒWº¤ŽX4Ír¼…@„( ¢(ˆ-#цQ©T………¹¹¹={ö$Õsrrjkk=<äà,™{WçVJ…ò†cóçÏïÙ³ç¢E‹ââ®THe(lãm6Îf¶QDÎfµXÌ&›ÅÈY¬¢À·LlfÆÏϯ¢¢âðáÃÝ»w§(jÒ¤IëÖ­{ðÁ[V²•‘‘¹—¸M•åA$)##ìQ¦œÀ‰<'ðœÕlåÌf³ÙÌs<ÏñVžç9Þd6µšå7jÔ¨/¾øB¥Rùúú"„–/_YŽÍƒ IDATþì³Ï®[·®²²òöÜ‹ŒŒÌ¡=JÇV'¡ê†FC«ûI¾ýû`ÿoû ::¦lVE Ð"æi¬À”(I ²!„¤¦Šš÷Ýw„‡‡WVV>þøãjµcÜ£GÐÐÐÞ½{;­a!##ó§¦=U$'U$Z‰ h4šQ#GA‹ê§HJŠ • ¥(I# (IäÂÆĦe)H‰æššš„„„¡C‡Y Àˆ#\¼™?)í¨ÐÅ2NŒWèjj0jÄЋE—¢ìîù&± }Zƒ***^xág×+##s¯Ñ]v¢/ÜΫŸz418pàÀ.žÿ)))í~ŒŒÌŸŸ;YYDQ´ÙlV©T²ïIFFæz¸:Z ‚`6›ýüüÚ°ihhˆhË ±!,,ÌqÏÇŸ¬ÌË/¦%ÏYC½Þ˜?W°dddZÅÕÑ c,JbÛ6NÝðÍ –-_QÝHuí5hIRÁÙß2Á´„EŠ¢) ï½÷v‡˜h¯PRRPWWЮÊÈÈÜå¸:ZÑ4ítÖ£R¶®—`µZ÷ìÝC¶·nÛ ÑÑÑq±q… .—[/^8C¹yú¤gü‹aXŒš¡ÑgŸ¯ü÷{ÿtñ ¹¹¹°|ùò ´ë…222w9®ŽV,Ëj5Ú¶mÜ=Z—”!á ýûõÏÍÍMII1›Í'sOÆÅÆ©5îcÆ?¬wsŠ¢€ŠB!$ ’$HÍ¢COž<)I’B¡ˆŠŠÚ³gÏ!CÔjuIIÉÉ“'`ðàÁ&$$ÄÅ;’‘‘ùsq›¼ì …‚a˜åË—/]ºÔ.Y¥P(ôîî ÍP")Dñ’€‘„0E’š…²OŸ>}Ê”)Ç <øã?~á…A0™L°téÒ—^zéƒ>gU· žo%;Jæ¯ EQjµúuîêhÅ ¼ÑdlÛË^WW׆—ýwÞ9xðà /¼`Ïj¦)гò¬Ó +ŠÆ4–®U?E±™ÒhjjêܹsW¬XÑ¿ÿ>}ú¤§§Çquuu““ãâ½ÈÜ,ž|òI§é™’$•–”šÍ²ÈõÄÆÙüüüBCCoíYl¶“¹'9z‹úwyn…]­Ls=Úþšý׿þ…zûí·ÍóÁƒ!‘ç9„„ÌW}‹¢„¢F¢àįOò}ôQسg«÷"s“`Yö½÷ß+//¯©©±¶¦ða³Ù~ûí·ìÙò€u1›ÍÓ¦OKLH´Ù®[]A§ÓÙl¶ëý3 £QkLæÖ5ì@¥RUUUÝÒ•Ë^v†V*•mÛhÔšë*¼Xˆ¶£Aƒíܵ“¨ñ/ œÍ*±¢(`M’$„)#A”D œÔ.¥(ÊÛÛ{Æ Т ŽÌíAÄÆÆÆÜÜ܆ú†–G;Ät¨1Õðo³ÙäèbµY1¡VµR““’÷Úßj‚ >r81!±åQŽçü|ý ƒÓÆÁe/;ö1ônúV÷»»»?2ñ¨®®&kÉ«®+†çyASâ̈˜Çh E,J’$4­~ºxñb˜>>ö£V«!TWW7pðÀ=»ä©ñ-„†¡HLLl5Ò¨´´ÔÍÍU°ÉÉÉååå- "##ƒƒ‚CCC[~ñÔÖÖ:Õ¿ûãÜ/;MÓ¤ÎsCCƒ›››=«™³¶løšeX„™Da$ºê]ònâ®óòò{ijµZ­VÛÌÆiYi™Û ESZcÓ!ÆßߟøÀh4"„xžwÓ»éõ­ÕÉÜ,®Œ&¸õ¸Hg#U‡‘„._¾¼ìãeöCþþÏ=÷œ]:Ød2effŽ;ÖÃÃcüýwß]¹&.¥'«TqVÛÒ?N_©R*ÉŒªwŸÞ,{‡U"dœ‚0ªªªjÕËNžÑ4­Õj)šR©U¬Èêô×¾´X–Õéuä·$I£À¢ ÚÍ4R©´7ÕjµB©°7{¥R©P(tz(‰>¾>EIHr<ã_^ài††«Ïë2æd”–][;z©%%%ÇŽ#ÛÍ|ê’$}úé§¢(þkÁ¿vîØùÏ·þùÁâná¥;О• Üä•àg+3yäq¡ €”œçDq}Ö–f–€b(ŒŠŠK§L~Ôõ+t¤   ´´´™€ÖÑ£GY–íØ±ãõ)Ó*\%HÐ4­Ô(…JÅP*͵¯=š¥Uùm±ZÔZµÕbU(zw½ÑpeíF1”B©Ðêµ’$éô:Œ0«`µnZI”t:•³Ú{???£Ù¨Ò¨jkk#£" èb‘ãÿš(­J†ºöMœ8Ñ1rÊÓ˳¶¾ÖÞ Œ/..&M¢0n!Ô±cÇN:©Õêû¸ß?ÀŸn“O°=^vƒÁßÏ¿ ›ššRâ´ ß~÷m`@ 9zD_ßaC‡ÙÌfL+)`ÆÐ­×àÈÈ8Š€fØÛ´ú©+|ûí·AAAC† ©ªªÊÏÏo6Z)•Jy´º¹0 “””ÓòIÂ`XÆMá¦d• FÁÐŒ»þÚ[$"w½;ùmµXý}ý5j ÕÕÕŽf&£):2ša‹ÅÒÐÐ`2š¢"¢X†µX- õ îzw½VŸ—µuµ \9…À !Ç~þ²ð6ž¢)h44VTTÄÅÇ9mhh ékáʪJƒÁÐ¥KGƒââb²Š´q¶ªªªò¬‚‚‚Œ£ÁhðómëÜMá6­³â†úÁ<ÿüóöXv½»g§>ãJ™[I’tU”IˆšÎÅ,X ÕjÕju¿~ý>øàƒ7ß|3::zß¾}_|ñÌŸ??66vÅŠjµº¾¾>((ˆ¼jÑ¢E¹¹¹¡¡¡¯¾ú*”””¤§§ÍŸ?_~j~S (ÊÃû]wfMÓ´N­SÐ `(F¡½&æ!r¢^«'¿@° ‚M½¦ùGc6^ …'–£Å±‰24@A+ìý»éÝLF1ø‹cÑZh†öó÷óõõm5¾'..Ž¦èØ¸X/O/{ =GtZ b:¸»»·áïïùòå›é´CƒÁithÛ?ùä“ï¾ûÎjµ>ðÀdM³¼ "Lµ¨~ $I”PÓÑjóæÍË—/ÏÉÉÉÌÌÌÌÌLOOÏÌÌìß¿ÿþý€4gΜøàûï¿GMž<ÙÓÓséÒ¥k×® }ë­·\¼w™»Ûáe×ét'L„ÕO1Æõ$ÃH´$r¤ð)ŒFM³šŸ~úi°‡Ø’æÐ¡CI%TÃ0¯¼ò Ù&Η^zɱ“ž={Þ¢Û”‘‘¹¥´GéXë$øÓÃÝ£mƒf#ºwI;}öúè#ƒÁ`0HR¡F£±ÙlJ¥Ò±^R©tºŒ•¹¥`ŒwgmøtÉ‚O—,ÈÞ“u;ú‘$mݰÚu{Œño»¶žþýHÞïG$QDH:°7«¡¾¹Â„$‰Û6®q±Ï½Û7™MI’–-z‹¼ &㕯öúÚšœ};EA ïÏöÍ?¹~ÙNùuýWkKAÉ¥Â܇ϟÍ]¾øíO—,øé»•Ž–ãý»~ýtÉ‚‹g÷sœíÓ% ~øò“›xUíÂe/»RѶ øx_wþRVVvøðá'Ÿ|òرcÖ«ßœÀÛl–UŠ$J@3€$„0ESHâE»Pý”eYAF«U«Veff¾óÎ; XµjEQ•••³fÍrñNenù§Bsæ¾¹Ç5Ö×yzûìÉÚ(IbXd‡Ø„”ógs£bX…¢äR¡‡§weE©Nï–Ÿ÷û ÉÙkh¨óöñïÔ½;¸¿¡¾ÆÓÛ·K~ާ8›w".1­eU»­Vz`Ò¹3¹Ñ± ,«(¹Tèáåíæî¹oççB£Â"bª+ËŠ/Æ&¤…VW–1,ãíP[])Š+) ¡¾öÔ‰ÃAaÉ»’n¿Z±dê¬y§séõîù§âÓB#¢EQØ»}tHH ìp:÷˜»‡WÉåBòŒ‘J­™ñÌ?/oÝ«æÌ}½¡¾öØÁ}Щ{_AàBùy¿ïß½U¥ÖôrŸ±±áðÝÖ¥—¯`³<{L©T]¾x>¹c÷€ ‹Ù”³o;$¥u ;{L£ÑÖ×5Q(ÙµaÎÜ×sömï3pDZ—^Í:üm÷V/o?òa9’ùÉZ:·"j¶NúbZ7Ðëõ  Ðéu‘‘‘=º÷Fà«Õ"rœ•³J6Îb³ØlVÑj³Ø,ljMãQ_ýu7n\jj*iRõüóϧ¥¥¥¥¥½ýöÛv›ôôô°°°É“'wîÜ9--mÚ´iAAA/¼ð‚FãD¢Kæ¡Pªž¯(+®(+ŽŒ‰óôöÙ¼î;ÿ °ÈgóNT–—Ü¿“ãlp:÷XMuÅáìÝ»·m‹Œ>’³Wàù°ÈÏ?{êøáßl6KXd«Å|âH¶ã)N?Œ[ˆvX,&ƒ¡Á?(äàþ<ÇÀéÜ£µÕ•Û6®ñòö ‹ìàåã×P_ûÙGï{yûjuzس}Ó€¡cÈË òóÊK/@öž¬°Èe%E΀’Ë‚B EÖÆ5y'„EvØ¿ëWÎf]¿ú«°Èa‘ìÝn±˜vmýå÷#ÙA!á×®Çlª(+¶O¬NÉîÔ­lùå{òBµZsòhNcC—ŸNç›×}G޶:I\¿ú«K…çÂ";lÛ´6ýô?bœµi-lþù»ógOù†Øí÷íÜÜèh²]W[]QV,6uIïݾiÿ®-Ÿ.YÐì¾ã¸:·’äTçzr\,ˆ‡…@þ¹ü°Ð0‡ê§Æ=;~a¯ÔM$•EÀתŸzišüñuèÐì:¤éïïïïïßÌ&$äÊgã˜ÃLDdî‘ÑqõµÛ’(=¾º²|ȨÕjMA~gkÅ+4æ¡ÇÝ=¼vüº."ªC‡ø+Åödm||Nþ-<:66áÊú»{xFwH€‹òÉ\áÜ™“-ïÑËÛwè}ã`ç¯ëàrÑyòßtæÔqps÷qÿ5M7«Å\]YÞ¹G?‹Œ9’³ïào»ônîCG=h·ññ s¨O—, ƒé]‚Ë£•(Yyþˆ´³ë¯ÏÕf»îcDP*倃{‹ÙÙ¡c×Þ°ñ§o†ÖÓ’ÊK/Ûÿc1 d е׀˜¸$‹É¨h*YVr)($Ü1ú×ÐPùÒ…¾ƒG^ë_’ÊK‹ãÓ’;v ‹âyÛ_-ï7äJ•Œñ™S'Ò:÷hû^jªÊÍ&CdL|ËC,«:ú!HîÔ]ÕBk·¼äÒ¸‰S`Í7ŸY-–ºšjµZãëCFŽ3NËÉÏû½e·îÛÄ´®m_huzbœÚ¹åÑK…ç}üõD«¹žO—,:êACc=EQnîžÍ^ÂÙ¬FCcËèíçNƲ{z6_dîU$QÌÚüS}m5øúzyûõ<êëK’|ü|üúùݪ1`$I`t’ÓºfmZ»cË:½›ûˆû'$¤tÚ¶ií±ƒûtz7Ç)üúËSçÌsÔ/=“w<1¥Ùî;häÿV~„ÈÜ'gßößæÐ4=dÔƒEE€$‰å¥—F?ø(\)ÖW7¨ïV}¬Öh=¼|F=0qßÎ-½ 'GmV˧K@PH¸R©ê7dÔê¯?€Àà°¸„ÔkC'EPFc#1ö ÑëÝÖ|ûÙœçç“ã«¿Yah¬÷ôòéԭϹ3'Éi#¢b¿Z±xêìyº÷!ÝFÇ&¦4Q@}] é6<ªtï=ˆ‡FD§vêa¿²±wǦÙWOzòøÁ?} »÷€üÓ¿³¬¢s÷¾i]z‘£:Ä@uUÅÉ£9£Ç?6`ؘO—,ðôòydÚSíúôo®ŽVJ¥²UñyGˆH^» JJK9˜ÂXJKK‰‘k÷&nž“¦ÌqÜ——doFuH˜ùÜ+ŽM²6eVùü)3ŸoõO>ór³='gÛ½Âѱ‰Ñ±‰öC‘1ñ½ú³7xø øbé¿íö‰©×о8n7ÔÕX,f»+J­Ñ::žS:vOéØÝÞ´ LÍ/ï„ä+£gÞɣɥǦ?síb&L!£Æ=B6ú Ñgà²]zù"ñ‚Ã"¼¼}¯¡[ïÝz_+õd¿†™Ï½ºׯ}]›i’5¬î½‘Þ†õpíÍ €Ä”Ή)­Ì×ní˜[Qà$ÃÎi ^³ê–}ú­OP,«TqV1k×ʹÏNQ©Töê§aáaN]û22×cìÕû›h¯w÷2r¬½ÙrÝä"‘1qdh/Þ/0øÚõ¸yº~ ©{\O;ÿOË~+I²µ çˆÙlvb`ibðŸ>Àßh²X3ª·þ½ŒFÂ"E±F“ÆûÀh¯PF¦A¡7Ýže~׋ǟ|¶Ý—:Ý Vº÷öñk¦ïú5xxzߨIïÚ1Zµ‘XC¸^°»Á`X½vµ§‡'œ>}Z’¤ààà~}ûÙÌf_Îs€1„Gŧ¦=AÑ4Æa`¼gsf{G«uëÖùùùõíÛ·]¯’‘‘¹ûiÏJÐéBï:¡ÈˆÈ¡C†fffN:Õd6Ù«Ÿöí=^¥ÖEQ@I’(!…$©•ê§+W®EQ­V9rþüù .ôôôÌÌ̬®®>wîÜûï¿ïëëûá‡j4šY³fɺ¤22÷íñ²»ý!/û/¿ü’™™É0Œ=ЦYA”0ÇQà 6  0H€BH”noõñÇôÑG¹¹¹¯¾úêŠ+fÏžýù矿ûüòK\\ÜìÙ³W®\Iê0Û+MÈÈÈÜ3Ü>¶F£ñóó³WQe(àžçyžçB¢$ò6g³Š<'rœH*¡:ššÚ§OŠ¢fΜɲ,Iµéß¿RR’½IÓ4Ã0²o^FæÞÃÕ¹•(ŠN£CFcGûõë7kÖ¬#F˜Ì&(àENàx,!A#RýT% c@$:©~*##ó×ÁÕ9BÈiæ­µü `X¦¬¬líOk1àŸ×ý¼uëVæ¬V«Å*p"Çq'ñÏó¼$b+gåyA“Ñ*&&üýý‰i’ßöqãÆíÛ·oíÚµ.ޗ̽$I5ÕU¥7¥7£¡Ñhh¨­¹­•ªŠRŒqUe™SËúºá&•€¯ª(#÷îø» u5<ïäc\]Y~S.ìÆhv(íDtåzª,nz·)OL€¿Ÿè˜ÖÑÁOq<¯P`I’$$QÀ‹"„ÂR“•ào¼>ø csþüùŽMwww¹ó]HUEÙ¦ŸÿgoŽtº§× *ŽíÛ¹¥ÿÕ\§X-¦­V› 7E< ÷øAI’ÊJ.‘hÏvñó÷«fýíµÚêJ‡ˆVÙ·cs÷>ƒŠ.ä÷è;˜an<Û!ôË™Dú¢¦ªÂ?0äçïWµ|öïÞÚ¹{Ÿ0çÁ_¢Ào\ûÍô§_rjy‹h.»3ÕMoo'ÑÞ^M :D…žÈÝáø$c ¾ÈH'Ÿ«ÌŸ?ÿÀÉO>{ð·]Z>µSw…RGì‘{éâyέ¨ð\·^Ný~Äl2@‡ø_ÿ¼“GMÆFOï„äNÕ•å{·oRªTºõqÌU.<Æ1TÝÎ_.Ÿ–ñÂKß¿Tx¾¢¼8.!ÕËÇÏb1ç?±ñ)Þ¾þ…çÏ(”J³ÉŸÔñPö®¤Ô®nî†Æz’œ˜ÒÙÝãJÁ¼ß<üøÌ²’K'´ZÍÝ{¢iº¼ô2‘åëÖk`(¹|1":Ö~I•å¥E…ù ©ã§KŒ8…v¶ººÕ´ÃËîT鸱±Ñ‰¡1 Â\<ã½GeEÉ‘C¬6cÌ2ŒRÉiÆ%¤j®~ûýu ÊJçòˆ,ɸIÓtz·m×Ä&¤DuH (ÊjµÔTW”^¾èk¬(+V©5‰©]¼}üZʘL›ó÷–ýŸ;Û¹G_ðõ 5ö8¸'TU”Žtº½ééå3úÁÇrÒh´ºõ!;ÏŸ=¥Ó»‘ ¨¯­646„GÅê:uïCÒ舥Ùd(+¹då’Íj!WKŒ Ýû ìÙw0Æø³ÿîêÖk`מzõ eÅE4E‘$D_¿ÀŽ]{)”ªªŠ2CC½‡—wñ¥B"Øp߸G#¢cîß9dÔ¸¬Mk‰ˆÍ؉S=<½ëj«É´4?ï÷ø«9‰vbRc¿˜ò’ËãàЈÂógú Ùµg“ÑðË™Q.œ;Í*¢ 4Ôׯ'uìÕh÷Þƒ×Ü[·Ž›YE©¾¥Á†¿nÛ¾(Fù>=»>þøÃ÷pðArrò³sÿ¡` („$!P(X@5œ|Üc¬_ýUJ§î …²±¾®Uƒšª ›;ÄÄ%…GvèŸÒ†««¦ª¢™¤ImM•Íj ‹¼±ËÓëÝR;õ€Ððh(,8ßòÓl2ÊÞÝgÀp¸tñ¼}]m5r¬¯«qZêΜ:žÐZÚ05‰Mò rÅOßPWÓPWc_^³yÇ[Œh„ ðÔN=BâÝT_½^vÖ™ÃÏiý«f›6ÿš}äBŸ¡“h–áHöŽCŸ§ X{õÓï,ÐjïB˜¢(»oެeì1e·O¨üî 6!…´_*<ç( Ü){϶ý»¶rœ5¥S÷¸ÄÔßvo-<V©RçzZ—^_öáCM×鯅+¯ýßçÍüÇÖ|ýXú3ÐIi]¿þìC¹~^qRZ×ÝY ($ ŽØcï?ïÄá¯9zö¢P*•J±”DQ©TéÝ=¾þìC½›»$Ь‚õôòùú³õnn®üÛäç]=Òù_-ÿð íNÝz1(J«ÕÀ¦"=Z! ¥jòŒ¿µç¿ÉÜ/»Ùl>yòdjjª(ˆ,ÃZ­Ö%'†À¤uêäîá ¦ôÞ:;EQ˜¢$ Ѷ5Í£¶ûÎt:Ã0&“ !¤T*Õj5Çq4M[­ÖîÝ»Seo* FÃóü¢E‹>ùä¨E¢XÕjµ²©ø¤Ì­†e›ü½iª+•×jho^÷]ue¹‡§÷ˆ&‚Ãó,EÑÚeÕMµŒý‚u:7»¦ž£_hºId§=þÆÞ´ÛtîÑÏÇ×ÿêÙ©fgW(”dœ½r ë°†hÖTªT  •Žç""¨†ŽQ7ÅØOäøØ{#¯%M…B©Õ鉽»§w¾ƒíß ÄŒüv¼òþCî#Ó•7D«oöqØ?š¦ék|'K»:Z ‚`2›üüüÚ°©¯¯oý§¯¯oRbÒÌ™3IõS’Õ¬Õjã“:’ #@@!$!  Íô°–-[VPPóæÍ«¬¬üñÇEQtwwê©§>ûì3«ÕjµZ»uë’““ÓÐÐÀqœ››Ûìٳϟ?ìØ±×_}áÂ…[·nݾ};<ôÐCƒ rñöo J–E‰ehÀ‹¢d†…1¾‡víå¡ÇfüÁtz7³M®s{žÜGÆÄÝðkž<Ó¾­VkëV\ûÄ"câ[n¾Ûpu´Â;u¶ýÞ^ý4#ãJd´ÕÊ) šfyÁ˜,ÆQ¤fy‚.\˜3gŽ——Wppð_|ñ÷¿ÿ=44´¦¦†5jÔàÁƒ¿þúkb<|øð#F|ÿý÷gΜ5jTÏž=ÿûßÿ@vvöœ9sÔjµ=þ¶AÑƘŠÂ_¼ê½r"p!#ó—ÇÕÑŠ¦i§NtU›³Ä… Ö××;έ( ñ<‡„0ÂH%IÂWk4Jb“ñqîܹkÖ¬±ÙlS§Nµï´ ?4+is½ 7o½õÖG}$Šb¿~ýú÷ïßöÝ\B4M!Œ‰G¦)°¤Ä9?»ŒLûpu´bYVë, ¨ áöºººsçÏ=õÔS… íq[Ïñ6«Ä*®V?¥hÀ!/òÍþ/^¼˜’’rêÔ)‹ÅwàÀ½^ñâÅ¡C‡¶<ãž={ *++IÍ®ˆˆˆ-[¶Œ1"///%%¥ººº¶¶yõÝ[ J C¼ìˆhE@/û½9Za„ÌÆÛýVËÜ:hšÑºÝ ÒÛáe×ê´ Ç1,ÃÙ8†aHùR ÏñÀ 0âÌò "ŒPØ'!I”š,-F£Íf ÑÀΠTB¿~gÏB\ü¹ÜwR1c¼êëï%J£`U&“©ºò—ÿ÷Î|Ç09`RFæ†ih€²2€Ÿ†˜ؾ”Jà8¨¨€ŽaÝ:xéŽÉêÝ .{ÙyÞ`0´íe¯©®¹^,ûƒšš°°kŠ1o/x/&yC+(†DÉ?(jäý ‹°H­P(^ýÇÜAï˜Sü¦£R(AdY†¢(„™UÙ5îa/»Ì¡o_èÛŠŠàˆŒ„ìløüs(+ƒåËaãFÈ̼Ó××~Ú1·r¾x=“ÉôËú_ÈBòbÑE„QTdT·®Ý€†ò’B„Q@`¸$ F{Œ¡ŠÎj1›׬Ýà8Z¥DùiTŠÃg+fÜ¥Pö_22·‰ÌLHOÿÿíyxUºÿßSU½¤;ûž„° l¢²eE¯?u`½233îˆã̽Þ{ç‘gp˜;£À (xÅmDE‘°„-ȾvÒ[ºk9ËïJ:ÎÖ$Àù<ù£Þêêê÷tžœT}ë=ßà™gà‘GÀh„~ý + –-ƒQ£à‰' #µ¹ìl%Š¢ÙÔnÕ–IÆ899yæí 5œN—S¯e˜PYU3÷öñãÆŒqˬàr>vQJc& ° 1Ú¬-ÅÂÉC£ÃMf£øÍÉ⛇§ŒœÌlÚ}<Âbš;4-îX~eì–á©oy:)Æ6ydšª‘mûN9Ìn…"Š¡L/×Ðu+Ýå ¸nÅérNœ€èhЫz† ƒ-[ ¤^ `ëVر€¹sCœdðtb¶ja ´ïEuäȽ)Nÿþ w‹g-Lÿúe%¦Jz+0“ÁÀ€}½ç]ÿ3œ¼Ta1*¨N3(i÷á‹B¿X|óÏ=uߤ߾ypñ´a%Õ®ã+š}² òW÷ÞºvËA«Ù°lîè­{N9Òî*M*»®ÊùTvþLÓ唕ÿÊýª*ؾV¯†?ü¾ùl6ò¡|/¡3w‚ý9±v׎\¾|Y·jñ‰_ÑQ±ƒFÍü­­©u0Æ0Ö$Id”ªZ3¯ÑZ·¬jwË‘VcÎØþ©qá¾Z­¯Ož+² âÛ_žŽ¶DZ°ë»ü¢JGldX”5”6>tK `¼§×^q8ÝÀ¼yÍB§~bcaõjص FŒ€Æ¾é}ƒÎ¨ì.gbb{5¶_)yK–.]ªo8]Îâ’b ”•x¼ ¡0„$i×:ùÀ‰¢-{~€‘™í ÿ½ £QÒ4ìs:æ*;§‡<¸a#1¹VWžÐ H@v»]1Á)É)(šª¨ c R<5&K Q€Ò¼oÅ™+5÷ß>bÁä!ûr/+~ñá©Àà­½§(¥Y·WJY½¬À‚ÉCFJT5²mßé&§u²X#¢c)@ç:z†YÁÛz;]N(QÔ9µwƒ¡ÃRuÝ™³%Q‘Q+]Ñr¿À«%œQ@D„¢"û«„@ ±úæ²½Ý-¿þÉ1}û­½Í„s]G_÷Þa¨qx¶î99fPâ®ïò?ìUH’Hˆ^Ë.PJõQ4Õ²óÙêz‡1VZt9­ÿ5­÷¸‘éÕwÅ#Gf=p¯Ghûtæ”á=™ç„1–ûýÁc‡¿€Ÿ=ñ´¡£µýí@þâÓ÷yâ™®ËîÆ"ØÙÊh4¶eã#.6îšóiFjjêÝ S»öœ!DU±A1¡ @@ÈШ²ë!¡¬Wÿë¸QÉýþ (Š?¹îÿlúÌy…ù—òÏ@άù„ÂËùµ5Un·súÌ»$I*),¸pîL»ýNƒÁXZtùüÙ“05g®ꕪ}N|}êàà–¿ ›ÍVTT\TT\XXÔjµÁ *;B€klÝ \eï•;üÍø[¦êÛÓg΀ˆ¨èôŒé?~ÿ-YölÞð_£1=cà'ï¿%ËÞCÿÜ£¿zðËÝšªØ¿[w}¸-¤ã¸öß9¡¤ßa¯·™ŸTIi醿n'``ŽººiG>üÐÒ«Lóº@„} !hì)ïëðÊUö¾BUEé©ã?@ue9Œ¾i⸛§ÀW_|L ÑTuHV6 ÉÊVdùì©ãúÍcYIaH³¾z¶ÂÄ+w`nçv»ýÃ5/ý÷‘S#¢b€üÕ¡¾÷ÑG D)5%é·/=›ÔÜèýÀ¡éÓ§wf}I ¡>ÇÝ5”«ì½œÄä~Ue‰É©PZ|%""êä±Ã³îü ¼·}c;o,-¾ŸÜ/cÀ̹‹ ª²÷–wõº@*¹Tpéĉúvaa!äÌȉ‹‹»|邬 zs0jì¤{Æý\D (CÅ…ç8tk}çÙ¶mÆ8,,ì‹/¾ÈÊÊÊÈȸöÜ8œkdÞ¢û?ÛùNUE̘=?!)Åh4¾¿}#P¢-7Õ MæÈ¨˜7ÖÿLš>;95=µ_†~ð­Sõ~šüÒÕÓ •=*²õ2Ëššš[o¹5--íСCS§NÍÍÍu×»ãââ õ“{B2ˆ AVBÌÊUc~ÆÈ6›í­·ÞZ²dÉ´iÓÖ®];|øð%K–DFF*ŠrèСèèèE‹]ó`CŒ¢jƒäs:Ö¯ª|NÇ„R :¨¿åô0•å%çÏœŒKHŽKH€ªŠ²¤”´E÷-÷?æß–?¡o<öËàî¥Í–y-¼÷aÿð‘'žîÞŒ¯kºæ!…¦i………¯½öZQQ‘o§Á`dˆ©Šª*ª»ÞE4¢jŠì•YVUEUš©`ú3ÇŒŒŒðððØØØÔÔÔ¨¨¨'N¬\¹233SÓ´;vtIªNð˜Í–„ÄdÿŸk±Eâ\#AëV„ÈJ›ý’ìûÎvæççoݺu^cÇEĘ¢¨À¨ cÆ(#*€À(%XS4¹€FDDôë×oÚ´iƒž0aBZZÚñãÇüñœœœ3gÎ|úé§×2ÎÞ€$Š„PQ@ú퀮[‰R¹nÕ ‰Š‰Š‰ uœ:1[)J› kâ^~ùe“ÉôüóÏçææê;5¢hŠJˆÊ(`1æóÀòz¼”ÜX7>¢(PÚ¤²ëÏ}*;&ØcÔ{<÷<}öl¨iFiÀ3+tJeo§ÞêÀÁV«uÄÈ;?ÞY]S=göPTUö¸”`”‚(Á„0F‰ª)€Z7u˜5kÖ¦M›æÏŸýë_÷ìÙÖ WÒtÝ#4@he ø<ճخ¼‹åÈêDÚLŸ½Xäv1Íé‚Zö[n¾eÂM ¸¤8=-kˆ(EªªbŒBÑ&`¦! @ÊŠ`0´~ýzÝæaÔ¨QëÖ­a÷îÝ=öØO~ò„Ðu`ô£h˜«ì½kxDΜ¡Î‚Óiº` ð™É¸Ê¸íe_ï}G@Óëµ™~UÕP±íñ¸'^âÿ÷ês“ÉdÁ`àMn8Ng<JÕ[âr¹üÃO?ùÇU&ÕÈœ9s®ñ ½ WÙ9œk Ø J©ªu°òF–Û|hÈAlXyÓx§L)¥¾ó\eçpÚ§3Þ¡BGÞ¡bàÙ>þäÓ¼Óç€`¼êçÿÓ{uÍ€ùy‡BãôäkÌÅ×4s8íÓ_öðŽ|Ùc›ù²¿³ãƒ …îáãîöºÚç_úÃÌã(P(66ö¶Ûn»Ê¬û&ª†%Iô©ìº/»Oe§”WÙ9œ¶é•c¬Û3Lô~3f³Y„·w|8høÄÃßÐójìT[`ŒCHÔΔIÓ´©“õW/^¼xîÜ9½j¡-4McŒµUL|ôèÑ 6Lž<ù±Çë슊Šrss/^Üñ¡'D;[iXóu¾ àè±£…E…ápþÂùŠÊŠÛo»½FMSÃÃMF“€ÁÍ“·Fêw?„²’¢üŠò ßIìvû•+WÚÏaÿþýv»ýþûï×⢢úúz_gù 6lݺ5Èáàr¹.]ºtuï ƒ$bLDA@cz·IcÌgÃápZ%è^Í”i¸Í.“'NNKK{ñÅÿûßûjÙ3úž4í]—AÕ4L0½™ ÓT,çq8¯½öZAAA||ü3Ïú¨¢(‘‘‘úúžøøø1cÆÜvÛm›7o~î¹çzè¡Xòn4HIüTvIÔþ¨²çääìúdW¨³àô"nË鯲¤ UvÆ|7qdöÏÌìŸ ¹GsõåÍ:^»¬¬PD¡”2Ê(¥Œ0BõâȺšJJš:zeddèÖÆþõÙÙÙþóŸý?kùòf¶þ<ôÐCúÆÏþsÿý+W®lypZZZZZôl“T„Pƒšî¯²£>¬²/_¾¼ß‡Óµ;[ ‚`ì¨ï£ÉdòÜ9C#‹uOšÉHì7*;+ÈO¿> ” ¢ŒéŠºÞSžRª/ô¿Òäp8- v¶’$),,¬ýc|àt~ö3þ_·&¢¨«ìTýž´Ie糇Ó.Ýk…1¦ºÓ€$Šm7ˆçp8œ v¶ÒŸ¬µª²û°Ùlý3úû²²²—~÷?UÕ¬iÇgþöÅg;Ujpýa4Hš†%IDQJõ«*Ÿñ±ØUv§'éĵU‡Ï&¼@_Xó»q·Î‹ŽOf”Ú*Kÿô—ÿ;õã7ˆ„˜––ºæ…g£¢Zïúu]bwzªk]À€ HЭ4Œ ¡»w¾{Û¬;SSS|ÿëÄÅ*W+÷†•åßÜ¿èžúâ3ľޢ(íØúËÕO$‘2æ‘U0 ’(Ê¼Š a&£( L¨¬j`1„4BU«Ù„h˜(k˜ ¨Q1FÖ0(*Ö²˜ «&T„0“¼ŠFhSè‘Uʘ$Šf£ä ’h2HPïU€Q’Œ‘Ô{0¤–ùSÊ<Šÿp¨WÑÚN@þ˜¨š_þÖ0A€¬aÆV†£h¸1ÿ‹E•fS+j¸ÇãygÛߟþù€ýÁÎV¢(šŒ¦V_*))9wþœ¾ýåþ/`„ ÑQÑÇŽå–ØP4а+gþlUõØ)¢pòè¿ÞÝñîc7=ܽ{÷¬Y³¤ú–9r$))©öF’™äpšÖ»?æ~3-gVÀþôäX›=°®"ÿÌÑ3ç.¬NO¬²9»1QNkÔTþþP½÷z¨+z%Š_èõÍCö´ }Š¥ÖüHOO?sæŒÍfcŒ€^K9eÊQ'Mštçwfgg™y/ä¶;^¹tᛯ>·UWΘuWûþö«u¿Úë©ï™Ü8í£þ ’A4 k‘`0H¢/[ =4¤–!c­…„6†TÓ0i i%d¬!ÔBh5¬iP³0 Tþ ¡áj‡ÓjþŠÒdëòÞ¶7¶mZßþ—ß ¥–µmš’ºuëÖ… nÞ¼Ù·,{êU·U'ä~WP‘5 »ÝK4ÖTYQÚ”íSRR222æÌ™3a„™3gNž<9##ãÕW_ >ÛÞLtLܯ^øïÉ3f?ñÔËc±vàÚÊáôuŒFSl|bûÇtnGÍ¿˜?Áü¯ÿùuYYYBbÊTP¯÷–mÊ;éìÜ¥F¬ŽúìÝË™C¼²ê•=Œ5+h˜;wîúõëï»ï¾[o½uß¾}”ÒÌÌÌÜÜÜÏ?ÿt¡jüøñŸ}ö¥têÔ©A&ß ILN]ùëßsäðQã~½æ»>ÜÞÍq‚B×­üûQÆ€°¦2]åh5Ôß"Ô~ˆD±©I’мgR@ØzG¥æ ³À‘àó¿æáø'¬Kc:®øåíwÜÝþ—ßÏÇŒ3dð¦pô˜†¢vŠë=õõ±ÉÆ)sµÇ¿‹¬*a×Å'{ê]BÒÕ]wÝ5bĈÄÄÄ¡C‡¦§§+Šb±XRRR‡n´ ÏV&LHII±XZXù]¿ 9&%­O>½þÐH5¨Ôb3•]ס}*µèëlä“¥[‘Õ[ªì¤™Ê®ëè>•Ú?¤”QÚLe§-eõ–*»ØLeo7$ÍTöΧÕü}íéÞóÅÚq1f'Tö¶²™Mf³©•Ë®’’··¼ „Æ+)†hñ›1·Ë1tÕŠ€· 0@ßЗëDEE”eõë×/ø´{Gå–줤ßE›ÍæqV:ÝMåõu% x]pøûoË+ªº3SN+¨rÓÓ[ä·ÑÊF[‹Ô‚6þŽöw°+ðå&OÇfŸÌXSë·æ-àP³MÖV@à‹A§Y¦Ÿ­iÚ÷ß~]]ç—­é¹ÞÑê[g«„Äd…JWJköÛíu6›mÖ kç§{ÚÿÎEQlùA×1?þxâO¯mhõ%&ZL~3~ZÆÀvlkã4Œ1øË_7vC‚œŽIHîït{‘PVï‘ Ìl4H"&ÔãUÀf’DAÃÔ++`µ˜E©˜È² áV³€¢a]`ŽCr=VU Š´šÀëÖ4 #Aˆ°˜Àãò`LA·˜ Îé!„ˆ¢¨×^Ö:ê)¥’$Y̰ÙÝŒ1£A2› PSç`&£Ád”@M­Ì&ƒÑ QÆÜµMùû†£çïŽÕbAà \á³ µ±¼+†(*VT E†›@vkª†Búp\š†±/»ËƒqCþ;Þ~« ¿us´ŒC[î œ­ž|ò×fKD@U:DFFEFFµÜßÁ, ìÔ û:ÙÙ£ß|óͶ^5 —KªÀb±®yq­ÑtÝêöUâ";>¦«‰ #‚š‡‰±Íóïñá¼´æÙv^Šüœ­Ž_¨¨ìâ¤8AÃôèÙ²PgÁáô:øZ3‡Ó7¼¶ª,:ÃmáBB|\\rúš:ÁZué…P§ÃᄘqcÇ•×5³ó œ­V“3ûp™xß%9>*ÜVSç¢ ¢Ÿ:8Ôq8¡¤Fzy]³žÄ-* Vpzä÷µ#„øosƒƒP`×­8N߀ÏV½š¢Ë /çÛkmþ;ŽºÂËù.§lÕü.çFÏV½—ï¿ÙŸwòèÙSǾÞû±ÓÑäXf«®úÛŸÿ§¶¦>x{Sèäpz”îí"Á¹œÎº;Ü#â®¶¹]ÎȨ†ºÀƒ‡õKÏì?pÈåKç/œ=ùÆúÿXòÀ£Šìݳë=¬i‰Éýæ,¸gï®÷M¦°’âË&N?{úxTtìœù÷”•~ñÉ{pÓÄé&Néà8œNÃg«ÞËœ»î‡½–P×JÿŽƒ† Íýø“kàí¿o¸{é²ðˆÈ¯¿ø¤¢´XU”ÌAÃæ,¸çÕß=µê©—÷|üžËéøjÏΟþû¯B¦ÖÖur8½>[õjöþ‘ÛíZ´tY0ïÜñwƒÑ7Oš€„¤”ðˆ†5á?[ùÔ›oüQ¥IÓg :¢»’æpº>[õ^>~ïÍ˜Øø‘£o*-¾’”ÜO2ôýn—ÃSïv»áá‘Q1q¥ÅW“R£¢c'Ni³\hkõe]­mÖ¼Å.‡½ ÿ,Ÿ­8}®²÷^ ætÔ;}üø‡d¹É:¦ª¢lÈðQÕ•å°äGŽÿpÈãqÏ_üÿ.]È;þረèÄäÔÑ7M4‡YA¼yRd»Åb /,¸pü‡C¥ÅWfßµ$Tƒâp®~mÕ{=~âèñ[î8$kà,}Û`0Î_ò ¾=gþ½¾c²Fk<É­0lä;aòØ “»5g§ûà×V§oxm5zäðèø¤¤rƒfwyÀh4ŽÊÍ œškXÀž¦ÙJSê·üù?ãc#Ûòhåt7®z¯¬h‚ ÄEó&7œÝìTóë Ü4[ýñëB‘‡Ãá…¤iš­Öæp´nÛÎáp8!Çî°JKOKMI•9Ôùp8N›ÿ[¢zì¦úûIEND®B`‚fox-1.6.49/doc/screenshots/searchdialog.png0000644000175000017500000000601211637250333015572 00000000000000‰PNG  IHDR êÞÐ ÑIDATxœíÝ¿kGÇñïs¸¿“ ç/átä¤*&`¢´gÔ¹p*¬€U«1Xš”D†œU¸9„Âu–1 ˜¸’° ‘c”ÀWXÂ^q™çV£™ý9»;³ß÷ Bü<»ÏjvžÝùìÌþx&ÙÅy6™™€.ÙŹ\›ÌÌI–eC—УõユÉÌœ\3o¼;}>dy¸æ›0¿¸Üg99;9òNs†€˜œ9ߟŸŸï¹$W™²ÅPÀg~qÙè¹,@-ù˜ŸŸ¿ÔØúÂ@u„’oü9êÂñžbrvvVvÏÀž§hz~XÇ5Äc÷H|e,›ˆ =DÍnˆ}C@ù†Û|&?oÙt{¾¢÷|ó0T…Ñ@ôìF»ÉÉØªóúze ¼™žïI)  W” ùTÖ¤ÀHNÑÑvÙx}ÑP çµ¢óC‰­<@ô3ôSvŽ=_á"³,~Œ=D­êeš¾Ë=Ëæ¯Ò¸ý- uô½¦Wö”M¯sšoºë}B)¡'Š]ê ì<Þ‘{kß R@7Lû."rïî鿯 ­Þ^é§D€Þí==¸ôšá PŒÅPŒÅPŒÅPŒÅPŒÅPŒÅPLýÊ,.ݺôúäø°÷¿_çošòö]Nã¤:\ pÝF¹O1— @š²¸BÁügóM3¯óï-'?ݧÎ2]ó€‹êžÀÉñaáðŠ}ä]4-ä¼vYC.T‡€ˆ\j(ó¯«~®Ét{Z t~™õ!`aû0Ü uªC Ê0‰oz°€Xqb¸†P = ª{ùÃù÷|Ó˦•Ôu-'TÙ‹–ɉa>ɲ,“w§Ïeçñ¾¬Þ^ºL€Žì=={wïÈÎã}ÙÙ}¢»'P¤hȆ£jcAxÐÐЀà!Š !Š !Šur‰h—Eh{éæ³/•âðàÑ}9ýéçFŸUyŸÀÆæ÷C‚h{`ÜI¤p£Uvq>t@äOlüÑÉäzë??HOÀ5\”Bp@š å„Úî圀ýë]Û»»W>³¼²*""G{…Ë„ÓùÕA®øüÓO®ü·¹µ%?~œ†>íúøí‘^Î Øàòù§ŸÈö¯­ÉòʪìÔ2íf׿ÒÛ}E`˜ Íì@—=‚ŽÎ ü]DDNޔť[—`¡`eN§CC¦7`–e–cækð»ê¨¼ObÕ÷0xGçüGì§5W£è=سéô>_·†›ÅàBÜõÛFç=“ãCY^Y•Í­­Ò«ƒDD^½ÿ 76¦7À˜eÙ6ÚÇF¸Žê××Ö¦W ùŽú_½ÿ ëkk2;;ÛE± JC>6¢—ûŽödvvVÖ×ÖäÕûÎyò°¹µÕËr ]oÏ::Ø“å•Uy¸±!›[[W>ópcCfggå³Ïþ*¿½ûU¶ww§÷ €EÀÉÞ'`nr0 ºy>P^þÁq“ÉDDäÒMc ÁÉña¯Ï ò{Eº9‘l´±ƒ`Ϫãè`OÞ¾}#¯_¿–ßÞý: ÐÂ4ü]_>Ýo ›6ç z´éãþ©èzù¡GÝŠþ7†íŒÍèš ‚·oß0`TFù؈7zåÏ„\æé›_‚-šú¹iÑ÷BÿƒG÷ƒ- Rý9К<£Æ*º«ƒý!@1B#@1B‹þѾØwì}ý啤c_¿QçaÔ½›öÁ£û\Xƒú0ØÆæ÷Îé©ï¸c_¿QçáùêÒóåé±RÏ^¼œn\ÙÅù¥i“™9)?ªðÝÝÕÆXçæ¹PëûŽåú%»¡¤¸MµÕ×6b×§KÑ“ºú¡–¡ö‘PWu®+»8¯üh‰XwN£íúÅ̵#Ä\cߦòR.k ÛÊÐÔž6Glùu237=ZYøÛ_äô§ŸeáæFÃuä‘oqéÖô?×|ö4óï*Ïfr­Ÿ­ÉúåËä+[Õõ±?W6¯k™®ص£—•«jy‹tUçv¹|ï}uë¹Îû®×eeù|±êî“®yòÿ·ßw½n²o„DOàwùÆ23W©ëYÆüDœi”|ÿ®:Í^^ßì2–M¯²®uçmSæªe ]†Š¶)ûuˆiUëȵœºeZÛí²Éú4­¯A@P4Ö˜ÿ­Ðü—[gc‰iG1\?†Ý´œ]®_ÕeÇVÇM¶)×ëªÓê~&ÆïºŠ¢m¶Í>i7ÞElù÷ËþfQý‡ BàwÙÅù´7P·ÐtÃŽµK<´Ðõâ[^Qc:ôwÓGcY·^Šê+e÷ßûÐÛšÚ0—éå‡~ìÆÿôÍ/²póF«kŽë 9„äZ?[ˆõëBȦ¬ž}ßG“2ôU硆Tªô|õÛPNmöÉ*GþU††µ'†ó\Wl„¸rÆ×El²œ6ºX¿¾6Ö¢¿ã«Ïªe =_ÞPÛTÓï¥Ê2†>b‰o¸.ÿ¾Ýð‡<§Ç9@¾þò‹éÌØGfæê*GlEã·>EŒkšý÷ªlH¡ÖÏUæ:V¶>Mçõ•£¨‘ôÕsÙgªr›2óT²)ZÇ6ÃAmê®!¶ûsöòê4ôeÁá›7ä9‰ˆdY–É»Óç²óx_Vo¯YpjìKöb"i«‹õã@H}oScý>ž½xYë.ë‡8c²÷ô@îݽ#;÷eg÷‰îž@^ŸMÙGš¬_Õ#¸u±MÌ«? [vÔ<æú+C • ÎuùaÌ]} 4Öyˆ0ÕXoU¨…)^|7h‚«ƒ@1B#@1B#@1B#@1B#@1B#@±VÏzöâe¨rªó¨m[«ñˆW@;mž´Ú*øáHç@1B#@1B#@1B#@1B#@±Vw cnÞº—L&×åäøðÒ{”qœ¨Ç0\õX!‰ç E%¤ŒãB=†ÑöAž €b„(F ‹K·†.ÂTLebC ¸ÝËÄ€Ã*æÆvqéVã+(†d×éë@6ÿû±Ö!€`b#æÑÅUÞÔÖahÔa1BA¤F* €¯œ®Í5Í|ÞL¯ú¹²ic¢.òõkÞ/«7ßw1$B­¥F*APÆ^¢×¾×™–¢¢ iW¡æ'†ÑJŠ`¤\v£¬!©ÚÐÄÒ uåäøpu¾÷6õkO‹µŽé  •üQVjbÝ)ëê¢þSýN˵ûŒµ. B­¥c €ªYc©‘jC/¾é]ÕoLB)5©”Õ®}ù±á+j}S©7z&…A*`¸ê4¿ötûj•ªË-[fÊšÔaÑ´¢«¶R¬7BAũ씶ºCæuÙ‰É:'5«–%V]œà­rùnÙ2b@ ¸ƒ ¦®Š*õ—Ú: ¡¬©CB‰i犩,U¥XæQå81 Š ÃA‘ö?Q×ʨõØB2™\º¥(£Ôc¿$qòŒ2êA=ö‹s !Š !Š !Š !Š Ø•;†÷ž QÀ¦!ðç…¯dû‡¯Z/pý»oeû‡¶^àÿ·­û"’ ÿë~y€ðm+ç@1B#@±‰ˆd÷Ö¾º€žíì>‘kÙŹLfæ†.  gÙŹümó|ù_¼IEND®B`‚fox-1.6.49/doc/screenshots/vorhour1.jpg0000644000175000017500000016652011637250333014741 00000000000000ÿØÿàJFIF``ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀšå"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì¼gã9|'q¦Á™ã]¡ HöíT'’§9ÝúW7ÿ cRÿ¡^ü ‹ÿ×O«"¿ÅO+¨e1ÝäÑ–½ìvßóíýð+¦¡GžoÎÝY„Õg'É$—¥ÿSÄn¾/êQ¬—>HщU&t䎣ý]Uÿ…ã'ý Ñßõÿãu·ñîbÐôsH„Ý>J¨ù*µöá™mtíQl´×‹Å·ÚtPÙB¨†Á<#/'$lm¡0[žx®ˆÃâ¥É¿›%Jªm7±ÿ ¾Oú¢ÿ¿ëÿÆéáwIÿBü_÷ùøÝZÒìtý_Yñ5½æ—¦˜´¿YCh±YEÈÚðÆÊÛoRœÙúÒëF–º–ŽÇM¸2xµ­’KEH¡·WU6Ó€ª ç6T1 Aäöt/n_Åö¸ùªZ÷*ÿÂí“þ…ø¿ïòÿñº_ø]’Ð/ûü¿ün³æðLJu kÆ7Ò™´û äDaFw× ¤,Q\Ç‘ób¨^xsÃ6ö»Ýþ«§ QlmN-›i‹Ì,ÅãlNߺ¿tžø¨áßÙüÿÌžz΃þTŸô‹þÿ/ÿ¥dÿ _÷ùøÝ.½¡ØkÚ~œ’˜¯l< üs,Šceø mÎNOÍ»Ž88çÂÃG“áC^jíæþÜò…Õ½¢M)_ œº|¹Éë×·zJ¯Ëø±¹ÔîoÐ/ûü¿ün—þ<Ÿô‹þÿ/ÿ«~%ðV„Þ(¹¸–¡·¹Ö­t¨m¬J@ï¤ûŒ-÷@ùçŒÛo†úgöׇtéï.ßí÷Œ!UÿveR€ƒ·;yš•O Õù>×j·µËð¹¤ÿ  _÷õøÝ(øË'ý¢ÿ¿«ÿÆë”ñ>…¤hzfŽmæ¾}BþÂÞñ–@žR««ïÁ9ÜrNxéõ[&Sá¶mNÂÀʶúdœ»€Ïöƒó«`€ƒŽzš§B†Gó=Nä¿ð¹$ÿ _÷õøÝ/ü.9?èýý_þ7V¼7འ|Mmq3K¾³u¥Mm|Ru›dË'ÜP9_ºAíÏòi¢ø~OÜx…ΧûsYÛÀ$Ž\·‘¹w6Õã$ÓŒg椩aÛ·/çþcs©ÜèÿápÉÿ@8¿ïêÿñº_ø\Ð/ûú¿ün±|AáMJðëkv×òËÿ“ý“œ'LÍçùOËò“‚@5ÅŠÒjWKó%Õ¨·g§ÿÂß“þ€qßÕÿãt¿ð·¤ÿ $_÷ñøÝyˆ§ ¯©Ñíø±{i÷=7þäŸô‹þþ/ÿ¥ÿ…¹'ý"ÿ¿‹ÿÆëÌÅ8Rú¥ß‹m>ç¥ÿÂÚ“þ€±ßÅÿãt¿ð¶dÿ ,_÷ñøÝy¨§ >©G·âÃÛO¹é?ð¶$ÿ ,_÷ñøÝ/ü-y?è ýü_þ7^n)ET£Ûñaí§ÜôøZÒÐ/ûø¿ünøZ²Ð/ûíøÝyȧ >©G·âÃÛO¹è¿ð´äÿ <_÷ÚÿñïøZRÐ/ûíøŠó¡N¾©G·âÃÛO¹èŸð´dÿ D_÷Úÿñ¿ð´$ÿ D_÷Úÿñ炜:ÑõJ=¿/m>ç¡ÂΓþßkÿÄR‰²Ð&/ûíøŠóáN}RoҶŸsÐ?áfIÿ@˜¿ï¥ÿâ)áeÉÿ@˜¿ï¥ÿâ+€áGÕ(öüX{i÷;ßøYRÐ*/ûéøŠ_øY2Ð*/ûéøŠàÅ8QõJ=¿Ú}ÎïþDŸô ‹þú_þ"—þ<Ÿô ‹þú_þ"¸QJ)}RoҶŸsºÿ…‹'ýâÿ¾—ÿˆ¥ÿ…‰'ýâü×ÿˆ®S‡Z>«G·æÚ}ÎãþŸô ‹ó_þ"—þŸô ‹ó_þ"¸‘N}V—oÌ=´û¯ü, ?èæ¿üE/ü'òÐ6/ÍøŠâ…8QõZ]¿0öÓîvŸðŸIÿ@Ø¿5ÿâ)á=“þÑ~kÿÄW)Ô¾«K·æÚ}ÎÈxòCÿ0è¿5ÿâ)á;“þÑã¿üEqÂGÕivüÃÛO¹ØÂu'ýâÿÇøŠ_øN$ÿ |_øïÿ\€§ >«K·æÚ}λþy?èþ;ÿÄRÿÂm'üøEÿŽÿñÉ p£ê´»~aí§ÜëdÿŸ¿ñßþ&—þI?çÂ/üwÿ‰®PS…/ªÒíù‡¶Ÿsªÿ„ÎOùñ‹ò_þ&—þ?çÆ/Éøšå‡Jp£ê´»~aí§Üê?á0“þ|bü—ÿ‰¥ÿ„¾Oùò‹ò_þ&¹N}V—oÌ=´û7ü%ÒÏ”_’ÿñ4Â['üùEù/ÿ\Ч >­K·æÚ}ΓþÉ?çÎ/ÉøšQâ¹?çÎ/ûåøšç8Qõj]¿0öÓîtCÅ2Ïœ_÷Êÿñ4£ÅϤ_÷Êÿñ5Ï p¥õj]¿0öóîtÄòùt‹þù_þ&—þi?çÖ/ûåøšÀáGÕ©vüÃÛϹ½ÿ ,Ÿóëýò¿üM/ü$rϬ_÷Êÿñ5…N}Z—oÌ^Þ§ssþ)?çÚ/ûáøš_øHdÿŸh¿ï…ÿâkS…V¥Ûó·Ÿskþ ?çÚ/ûáøš_íù?çÞ/ûáøšÆ¢—Õ©vüÃÛϹ³ý½'üûÅÿ|/ÿKý¹'üûÅÿ|/ÿXâGÕ©vüÃÛϹ®5¹ü°‹þø_þ&”kRÏ¿ï…ÿâk$S…V¥Ûó·©ÜÕÌŸóÂ/ûö¿üM/öÄŸóÆ/ûö¿üMeŠp£êô»~aíêw4ÿµäÿž1ßµÿ _íY?ç”_÷í³E8Qõz]¿0öõ;š?Ú’Ï(¿ïÚÿ…/öœŸóÊ/ûö¿áYâœ)}^Ÿ`öõ;—ÿ´¤ÿžqßµÿ ž)®fÌH­öçaóøqYup;“çÏ"E o#¼ŽÁUT*’I=•jP„y’üÍiTœåfË{®¿ç¯çCä—-:Â-_È—É+ö«žü2ôõÇZ̰״}RvƒOÕ¬næUÞc·¹I.@ÎÂ/«a >¿S²þ¾aõx÷gŽEáÿˆÐÝOsÚŒw|éWRPÒm]Ç~N=)¶øƒ¥ÀÐiæúÒ&mæ;}AcRØ89À•{-2iV$™Ã•Kˆ]ˆ<(“ìM/¯OùWõóaìñ[øÊïÊûM¤Óy1ˆ¢ó.ãmˆ:(Ëð`8«Ë üDÑ[ µoÏ./íµ6W~z`W¯ÑOëÕ;/ëæÂ=Ùãð‹xëû—ññö¿øþ_õßóÓïýÿöºÒÝx[Ç7Ѽw‰wp •–kåpÎhb òv€3×W±Ó&š+x$žy(cRï#°UU$’z(úõNËúù‡°vy>©áÏj¶Úu´ºLQAan †(fE^¹g#yØòÄc8œ<âoúäxÿøªõý?T·Ô¼Ï";ÄòñŸ´ÙËsžžb®zvÎ?.µk?¶ý¢}Ÿb¶W#‘øn?êߓǸ¡cª-_×Ì>¯Ôò!à/ÿÐ7ÿ#ÇÿÅRø—þ¿ù?þ*½˜J¦w„ܪ¬IB0ØÁ?)È#Œõ}Ú{/ëæ/«ÄñøA<‹˜ídùå–M›§9óS‘ÀÏ=¯Õ쿯˜}^'•ø‹þßù?þ*ÿGˆ¿èÿ‘£ÿâ«×a•g‚98Y0…3Ê>ÄdT_Å©o§•:x%X´,lŠsï™CG×êv_×Ì>¯ʇ‚|Cÿ@ÿüÿJ<âúÿähÿøªõê(úýNËúù‡Õâyð_ˆ?èÿ‘£ÿâ©ßð…øƒþÿù?þ*½jŠ>¿S²þ¾aõxžMÿf¿ÿ>ù?þ*œ<¯ÿχþFÿНW¢¯Ô쿯˜}^'”ÿ¯χþFÿŠ¥׿çÃÿ#'ÿ^«E_©Ù_0ú¼O,×çÇÿ#'ÿN×çÇÿ"§ÿ^£E_©Ù_0ú´/×?çÇÿ"§ÿJ<%®Ï—þEOñ¯O¢—תv_×Ì>­ÌáÖÿçËÿ"§øÓ¿áÖÿçËÿ"§ø×¦QGתv_×Ì>­Í?áÖ¿çËÿ"§øÓ‡…u¯ùòÿÈ©þ5é4Qõê—õó«Dóqámgþ|ÿò*8x_YÿŸ?üŠŸã^E^©ÙÕ y×ü#ÇüùÿäTÿpðαÿ>ù?ƽŠ>½S²«@óÑá_þ}?ò";þ­_þ}?ò"z}z§dVÀ êßóéÿ‘üiáÕ¿çÓÿ"'ø×}E]©ÙÕ pcú¯üúÿäEÿQáíWþ}ò"ÿwtQõÚ}Z <=ªϯþD_ñ¥Õ?ç×ÿ"/ø×qE/®ÔìƒêÐ8‘ jóíÿ‘üi°u?ùöÿÈ‹þ5ÚÑG×jvAõh`е/ùöÿÇ×üi°õ/ùöÿÇ×ük²¢®ÔìƒêÐ8ÿì=Gþ}ÿñõÿQ¢jóïÿ¯ø×_E]©ÙÕ r_غ‡üûÿãëþ4£FÔ?çßÿ_ñ®²Š>»S²«@åÿ¿ã]M}v§dVË"ûþxãëþ4á¤ßÏü}ƺj(úíNÈ>­šUïüñÿÇ—üi²ïçþ­þ̼ÿž?øðÿpÓnÿçþ­i·óËÿãJ4ë¯ùåÿñ­ê)}r§dV‡ýŸuÿ<¿ñáþ4¢ÂçþyãÃüknŠ>¹>È>­XÜÿÏ?üxRý†ãþyÿã¶(£ë“ìƒêÐ2E•ÇüóÿÇ…(³Ÿþyþ¢µh£ë“ìƒêÐ3¤ÿÜýE(µ›ûŸ¨­*(úäû ú´ ám7÷?QNÒÿsõf{¸-¦¶ŠWÚ÷2¡'sgÇ·ÊŒyô¢ ¸.f¹Š'ÜöÒ¦#kWÇ¿Êêxõ£ësìƒêÐî@-åþïê)Dwõ§ZßÅwq}já¬çHX 1¤œ{bAøæ­Qõ¹öAõh|™?»úÕ-RËS¾·û,VÐÚ2°’)mDÞfà,01Œzõí½Å·’F\†U‰ã úéIçGÿ>Ñ~mÿÅTË)+I!Æ„bî›8« ^is´ú|ÚM¤Ì» –úDq±\ƒŒ†dÊ¥j’ØÜÙMc=½ÍÃ\L“iÂEv!!œŒ,Ç_Ã9¹ó/d„E*FŽ ç$’Ü“ýÑOÖu]ËP½–ÑZ (ä•Â,U'0Àö¬ù×ò¯ÇüËå}ßáþGšÞxçtH¦ƒ¤‰¢Ä¬¬A5±e¥jÚ}êA¨Cö«ÉüÙ'kl€0¹wõÊsÜñÞ©Añ ›”µ>Öld™dò¥¿³h¢,±³àŸ3Ñ»(¶-¼’4jä2¨ÜOÐJj¥º/ÇüÃ’ý_às?`ñ'ý ÿÀÿÅÒÙhúŒzÊê7÷ñܺÂaP–â<ÊÙûÇû¿­Uâw†‡¯5y£6ßcÃ=œêËr’ó„Ù»ïsŽHÚØÞ´Ô´n,ÚÕ^Ú)ÄR)Y¾ï•Á'` zæimR_ù‡%÷oð-ø ýV¿ÿay?ô\tQà/õZÿý…äÿÑqÑHdü‰—y$ލ‰fY™Ž>I4¶ÿ|–Ñ#x–Ä2 n=qô«w?ëWþ¹§þ‚*„ìUŽkÆž6ðψ¬´›-'[³º¹]bÊO) TL à½GÜôºZ(¡»‚GœMÚ6¹`5ˆN»u&£ 6?Û<3Ë$¢5ò|͈uàŒ‚yÁ¢óÂZÅÓ¼Ð^0i. ¯Ù¤¶fvºžO4¼ªÍå’#º \läeTW£ÑJá`¢Š(ÊÜ隇öN¥áÔ³w‡Pk­º€tÄ“»»nRÛ÷.öCar˸ìȾ6SjzŽ•iâ-:_´>ÛdŽúud#†ÞÊÝMÆX¯A¢‹ˆóí?Áìg³FÓ¯"ÓÅêÉ=½Ë[F0 KyvÀ!V2F§$—0Ú¼ÝÖ¼3}uo¬ÚÀ¾e§Ù®§°‡*3uq« “ž •²ß)ûN8òÅv”Qp<úOÞ^êzšÎo#–ïíh÷ßèþSE*ȱ®BùòmÈä()Á :–&ªÚÍ…ýáØ%‘µ˜ð§ÉŸËx„Yæýܨ»‡èÙÆd$u´Qp «©=¼Z]Ü—q$ÖË´±¹P®NAÞBàŒýâ©ÅZ¢žc˜¼IÚé—“Ob’G4šaÔ­ïn¤dW`$’XÊn{s‡l`µßøCîÖæÓ¼Ù®ô™,­.nZ'{MÁÕ ±JÌ‹¶%`6•ûª ô(¸Ž¼0·Úí„áØm´uòwÙÌM«{œ¢³/Þš#Æ~þzƒŒOØ.Ÿ¥_Zêšt7oumsm£Û´3Û°šržR;ÊInˆ3|ЏP}VŠ.9J¸µñN¡vlvÁ/˜Zîò8̌Π¬rFĘ@,€2á$p½=P33ÄQÚËáëèîïa°‰ãÚ·s0?r@Ie}¤r@Á¸};PÒΩgw{â],CpÆúòÝõ]cœ4…#??Î@š0}Ž?UÛétP#Ï´? ]Ùi1O.™ zÄw:vÉÁÍXcŠÕ&ÁÈ\$ÀŒò3Ô70Çá‹ðÖt/*â /+QºÝþÓa5»È2sù‹Ã÷¡s¿ ƽŠ.8UðµÝÄÀÇiö :æImÚÇ÷cìÖ’$A„b£{[ºá #íò"º é÷ÖV÷’jRù—w7;ämª7l!…8ÄBLý½²v¨¢àQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9¿%›bɨ^%¥œW奙¯>ÊT}ž`0á”çqœg¶k’:=¶­}{ýrú¶™ÛHaµ»¶½—‚ÝRFûIuÀ1N “¼g ò“^£EæŸØ¯kâ[xum õ ðLé¼7 Ûa°ŒÈZR€Èã8 sœk¾Ñí®¬ôK [Ù¼û¸m£ŽywÞá@fÉää‚ry«´QpóÃoa#Í*F¦T»3†õ¯?þÓñÿüþø#þþÏþ5ßQ@m§†ãR¸xeIC%œ¿¥s?4Ý+Zñ™ÔtãªÚ[-Ò<0^GG+<[IÝ*vWOÒ»J(¸k¢xN±·¿–'Óm"¹’âËL{˜$µ¨ˆ».Ä’Ò`oÇN+Óxmì$y¥HÔÊ€`pÞ´Ú(¸;uáÍcUÔ%ñ¤×E¯ˆ!d³ÒÙ¢’3d‘óóHF0Ùã•ãËôí*ðßJn9žÖ,I(Dçy)¸ppN3Þµ(¢à/€¿Õkÿö“ÿEÇEÿU¯ÿØ^Oý¡$·?ëWþ¹§þ‚+?ûNÃþm¿ïêÿh\ÿ­_úæŸú¨lî'M6ÅRiE¤8ˆêÖ³(ÏÔuQc<ÑYÜÞÝL¯"Ao°6Å*²ì«€]3Ÿ›€ppôÕl¾Õog=Ä6ú„ñ‰ÊY“ÎÆ ?('8ÃdŒŽ5W^²—P‚¥ê†.Ñê•T`0 )òp[Óù¬+_]ÛßÄg¸ûr-§–êkÛ„%áH—&;$ba ¹› ·!¶ÀºWˆ¬5M,Éqmo{¨ZGu“N¦M¬»¸œv4ËÏèVS$rê–ñóöi˜\&-ßc¶$9ù3å°çœñ\þ“à›»²Ž&d_²I,Ÿn¸TG‚8“ÂIÌ ‡bÜ2§hBÛFÖ-tÍ&Õb±vÑ1lMËt¢„—ýÙòŽ6þF3üTÓM<6èiR5'»3øÔ?ÚvóûmÿWüjâHñ6èÝôÊœTŸk¹ÿŸ‰ï³@ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÑ ÿÚvóûmÿWüjÄn’ƲFÊñ·*Êr8àýA«k¹ÿŸ‰ï³U­Ék8™‰$¼Ä“ß÷òPžÿU¯ÿØ^Oýx ýV¿ÿay?ô\tV„’Üÿ­_úæŸúª¶ßò²ÿ¯HôZÕ«Ÿõ«ÿ\ÓÿAVÛþAö_õéþ‹ZÌ¢J*•έcg©Øé³Ï²îûÌû4{ïØ»›00r*{[¸/aimßz,’DNù‘Ê0çє“QEQX>+{g§Amw=£]jv¶Í4T’PŒ‚3‚zƒZÿð®ý%ÿ¿ÖÿüfšWÉ誑ø)žd‹Æ¾"w…öJ«qnJ6ÐØoÜðv²œÄõ'ü+£ÿC‡‰ïõ¿ÿ£”.OEAÿ èÿÐáâ_ûýoÿÆhÿ…tèpñ/ýþ·ÿã4r…Éè¨?á]úÑ\c=³žzŽÖæÎËÏ6é´ò´Ò±‘ÙÏrJäà£ÑUT`' ™Ä蚆²‰}¯Ü\Ïku>«¦Ew¥˜Qaß=½Œrd2ùªËæœ ã ò 6ñ¦±uªµ¶³i|ñ8‰g‚k½85í´F7ÈQ ìÔ¬†R>÷ÊKzWö´~±ßMÿÄÑý­¬_÷Óñ4î‚Å_ÜݼºÅ…ÝÔ—gN½ñÜJ¨²H­2åö\ƒ) 8©É;•›ý­¬_÷Óñ4kGëýôßüMAcJŠÍþÖÖ/ûé¿øš?µ£õ‹þúoþ&‹ ±¥PÝÿÇœÿõÍ¿•SþÖÖ/ûé¿øš©ª_Ü]i—X]ZZÜÈ»RicyU3ÔìsÆqÏ\uèK ±äÞ-ðG‰ï¼CÖâ}FÒÊêOô¨šö\[u%ÐnåN1³Œ1…?.þ—bºoÄ 6Íg¹¸h7kæÜÊe‘Ï™K1êIü@À«_ؾ)ÿ¡ÇLÿÁCÿñÊ—Iðþ¡iâ!¬êšý¥ó¥”Ö©- ùÊœ’Yå=ºÔŒÙ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠâïôÛýWSmRãD™¬ÿqúdï Ir±­Çmæ2¡ç‰€fÆN24¿á»’ÓVžM2yýœWI,c2Zɿܼq£g÷l‹$*v‚£i!s^ƒEç!ðê[ØMö›˜î¡’hE¬pK[Ê‘)n&fÏ“çh`HáTŽ·JÒIÖï…•œ6šd–ÐyqÀª‘™ƒKæ‹Ñ¶˜8ä9ÇTQp8[?Om£i’ù_éÉš²Á¸~í£’=·nÁÊAÀÿž\rÇ4´Ï jv©è/ ÒÉhnå–KeŽåÒæyWËPò`$„4¤8 Зlz=\.=燵·ÐSR¶¹‚î-)cì´cqrË*ùŒ¡UÖHHdÎBÁskÄ>Ö¯õBk{ ¾ÓsÔ2MµŽ bkyR%-ÄÌÙòrí *‘èôQp±ÉZxvK%Í„6Ö騆‰¶ÌÚr€‰ö‚[g÷Žìw®¶Š(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETv¿ñãûóèé*JŽ×þâë `-ö²UçÌ|ýò{trk™ñm¯Ä{À¾Õüí:öM Ioú!äçfJ`7'øNN7oév÷6¿4Ø//^öå4±%ÃÆ¨do2<ªÐzc$žL”Z»Î¥ãmKÔà°FÓå»y%´óòRDL¹qŸ3®{t­/øCü[ÿC…þ ûuQ…Ò?ˆþd·Ÿb|=vZë*<&‡/—F:üÀŽ9­´iÓI=ι›w,kc§}¶f¼¹pÿ¬vócßò·–v,;œ iTRZ Œÿ„?Å¿ô8Xÿà—ÿ·Qÿ‹èp±ÿÁ/ÿn­ý!µ=9,´ËÛK»¢Q™ï–XÞ(f+3¸–B«µ7ì%¸fÁ-Œÿj…§…‹´–¹pšô–HD¥Rêe ÛÚ4À àà²CþÿÿÐácÿ‚_þÝGü!þ-ÿ¡ÂÇÿ¿ýº¢ñ—–¶ºö·¢jWÛ´ûKÉ'ºšs$2H±>Ø"„þìyl´A=„»4»c¼Ž[?ÛxfíHiwOlò«_ÌÒ墿fÛ1s*‚m¡8Vå?Þl–@Yÿ„?Å¿ô8Xÿà—ÿ·Qÿ‹èp±ÿÁ/ÿn¬ë¹î[Â7ú„z­ÛÝèïzAÑ­`†âácÿÇËí…@YŽ×òÎXå½2‹ 8OøCü[ÿC…þ ûuZ¶Òu .ÖTÔõ8õ Ë©I"µòT†ãnæÉÈëŸN~Ʋ5âÿ¶û=&´3ŠÀ‘D]$fu,pà¤zJæ|Aâ;_ø@µMkB›{G¾EÀ`é¹X© Ã`ƒƒÐã<Žº!LÕtyt‹Ûå…'·h¥òîr($ûúÁàƒ‚8®ëO‡Ãßµ ê6·RÁmpâq󩑘gƒ´ŒŽpsÉëHg¤]ê]–¯™4Œ·WaP ¢bqó/ªüËÈãæµ‹â›mG˶¾ÑÎÝB?2Ù_ný«2í#jÊ v8ácn¼ƒ‚úN±mc~–ûãþÎT°²dÉKfœ<…íi·ò ïß …;¾f@wÕ p\ÍsO¹í¤L0FÖ(¯•Ôñë^},ߨmQõ-Gû7̘ù¿`½ó3ˆ¶.Ä›í;sçœÈØÏÇ–kOBƒW´Õî.5!y$sr±ùlf6°!•Õ ™ ¸RU$îte€Ùñ5Ýõ­’iÓÇÅÖ¡oh%’/1TK BJäg³ŒŽjÿü!þ-ÿ¡ÂÇÿ¿ýº³|Q÷t?ûXèô¯E¿šâßN¹šÎ×íwQÄï ¿˜#ó\U7''¦j’ÐLã„üQógñe¤§ÌèšFÆeÊpHïƒCZ¦þÝ,d- ð8ž¿…gøBûV»OE«Ç|&†ð`Ýy@&ëXXÆ‹ŽA%€ÉáÆY›y­ æŠÞöæI¤Hã`,ìO½ JãSÒío,ìçfK›Æe·ˆÊ7HUK6Þ€ONƒ©£§ßµÇеËIw›KH,Ì1‚ 'œX“Žs±/®yÛýN¸ø¥x® ^%º¼WÉq¹Y nªSŸ”‚ÜŽ‡$ðsºö—fž1ñ#5Ü ²A`P™ ´ŽyÆi è´íOKÕ´ø/ì®-g]ÑÈ’Œÿ|ðAàƒÈ ƒY>Ônu]nîÜ4­sr™ ³Èª?P?kÀ:àÍÚ6¯ ÅÔì%¸aqû°øÆIàÆq–Ç=€Ðð'üŠ‘×Ýßþ”Ë@%QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQÚÿÇŒ_ïÍÿ£¤©*;_øñ‹ýù¿ôt”—À_êµÿû Éÿ¢ã¢ª×ÿì/'þ‹ŽŠÐ’[Ÿõ«ÿ\ÓÿAVÛþAö_õéþ‹Zµsþµëšè"ªÛÈ>Ëþ½!ÿÑkY”IEP0¢Š(7WÓ.5FÓÜÆ>Í©[]Èdp£dRlg© `SØd×[3i×hóìà—í1'ßå7›Ý„lŸ™~vàñóSX”SN±¯y‘¨\ZÜ^éÖ—3Ú>ûi&X]¡lƒ”$åNTAéUçÒü9u-ýƇ¦Íy*’âH`iJl ±9 ¯ËN:U (æ ÷‘iŠN—Úu¥ÒNˆ“,ë ‰²Éä+@= $Tig¡Gyky‘b—V‘-¦Xá `9UÁ#ŽMfQG0X¾š_‡#¸»¸MMYïQÒêE†Ó«œ¸sœ°cÉ9ïQ¦‘¡[Åk•„6¶÷bðÛZbŠY•Rêká£CŸ–ªQG0Xèÿ´bôÿȉÿÅU=WP¹m*åtØmå¼dÛÜܬqäðIeÜx=9Æ8ÎFEsŒž9ÿŸ/ àÊOþ7NÒ4.³¬®“ QiÓÚªÙÞY‹”aÃ(þéõê+rŠW•¶’fñö•ÔVóiÇKšÆX¥e>a’HÛ[‚»PƒŸQלjxAmÞÝ|1£ÕÞ1koµ™A HèH ÀÛ­AE;…»Ó´Ë8ìì,à´µ;!ƒÊ$“…$“øÔzlZFnÖú^ic9vŽÕa‰K` ¤ àŸaYQÌ/Ã¥ørÛT:¤› ]œÝ¤0,¥›;Žðs“““žrhKðä:\Ú\Zšš|Ͼ[E†·²gü«É‡¥P¢Ž`±§-ž…7Ø|Ý"ÆOìü}‹tpŸ³còùù1µzcîJÐþÑ‹Óÿ"'ÿ\åsŽûF/OüˆŸüUgêS¤ÈYH(Þ¤ñ»ÐŸQY”Qp±‘7…|;q<“Ï irÍ#yÎ6fbrI$rI¦Âáú4ü‹ÿ‰­ª) Åÿ„?Ãô.iøÿSÚxoB°ºK«=N¶¸Lì–TG\Œ28$~5§EQEQEfêúeƨÚbÛ˜ÇÙµ+k¹ ŽlŠ@íŒõ$ ê{ ší´bôÿȉÿÅW9E4ì+5¨ŽëɆ8ä¸ËHÊÑ‚í´(f!¹8Uôv®{XÓ´ýZI"¿³¶¼€L]Rx–EÏ #8'Ÿz–ŠMÜ,bÿÂáú4ü‹ÿ‰£þÿ й¤à _üMmQ@Ì_øCü1ÿBæ‘ÿ€1ñ5©igkaj–¶vÐÛ[¦vE EÉÉÀI?MEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¯üxÅþüßú:J’£µÿ¿ß›ÿGI@‰|þ«_ÿ°¼Ÿú.:(ðú­þÂòè¸è­ %¹ÿZ¿õÍ?ôU­¢ª¨Â¨ ºŸ€>ý[¹ÿZ¿õÍ?ôTã¸ócY#·¼tpYm% ƒÐƒ¶³Ô¡ßeµÿž2àTÿü]eµÿž2àTÿü]aø‹Ä¿ØwÖV¿ñ.OµG,žn¡öXÆÃÚÆË38ã…5f?Y ϰ\³ÇxŒ‘M¶ZåeV ç “½@Éî8£P4þËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿ”µþÿU¯ÿØ^Oýx ýV¿ÿay?ô\tV„’Üÿ­_úæŸúª¶ßò²ÿ¯HôZÕ«Ÿõ«ÿ\ÓÿAVÛþAö_õéþ‹ZÌ£3SÓ/î5K=CO½¶¶šÞ  +qlÓ+,v‘0AŒzõ¨O‡¥’ ±=â4×Wö·ÎÉ U ƒ*cÃ=xÝßîÑ@Ì-'ÃÒé³éåïXtûIl­ÔBU¼¦0íÞw°ò@îè¸åú“öJòH<™n®_l{÷lˆHì9Ï;ä—Ôy»z(­ª(QE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*;_øñ‹ýù¿ôt•%Gkÿ1¿7þŽ’ø ýV¿ÿay?ô\tQà/õZÿý…äÿÑqÑZKsþµëšè"ªÛÈ>Ëþ½!ÿÑkV®Ö¯ýsOýU[oùÙפ?ú-k2‰(¢¼ãE½Ö¬¼;¦j¶Ö÷‡Ï¶´Žoí[ã*]M4°*ºò× .x_¾¿+cÑè®bMoS‚êfv³{{;Ûm>t2¼Ï(‡2+o!ÇÈCüß6F,~)סIâ·²†äØùó]˱¸3 ¥œW“ŸÞ ÷@P `=Šãµ-GX¼Ò¦¼¶»¶µ‡ûR+Hc9ud¾HK;‰å`­” ¼63ÆO]•`ŒNèóÙª³c’'=²~¦¢Š(¢Š(¢Š(¢©jÖ×WzdÐYÍåNÛpwÜɸr›€+¼r»²9°´BH5¡¢^6E¸kŸ2ö[¼H‚Ø®É$;¶ìœd>`qêÀŽªŠóïëz›Ãs­»Y›{ËÛ=°ƒïžÞÑ +ïÀPdI;HÏ9§ŠµØt­&âTÓ®n5[h.!D‰àH·Mo#ÎNEÇ ÆßºÙÀ,uEskzœS3µ›ÛÙÞÛió •æyD9‘[y Î>Bü‡æù²1cñN½ O½”7&ÇÏšî\…À¹Ý,คœþð(oº€Kè4W©j:Åæ•5åµÝµ¬?Ú‘ZCË«%òBYÜH7+l Uᱞ2zèD«bwG˜(È…U› 8í“õ4 }Q@Q@Ïê÷Zœ>)Ó"Óc†}öWM$3Ü´1œ=¸ ò£å†âóëƒeâ=b/T•¶í-n¯nR]ó—í7 Eåv U¸#åpK郞;Vñeý‡N¡VÆaw¨Aµ•¶í.Y;õ&ÏÔãbíÞ«¬XߨGz¶ÖÖ²´k-Ê[¼èÒÉ&Õ€á´y¬¥X·DáHIE‹â¢ÿت‰,Ñy·¶q3C+Fû^æ5`H# ‘Áï@ͪ+‹½ÕuþM#IŽkåy!Š™þÐðÈÉ4’!g‘7á"FÚÒ<Üä«SÅâ\¶œ÷–ðØÛI ‚iü¯´‡˜ÌÑy_º”ù,vƒ“½A}¥²¿1amÉC­ë·~‰wiÇûjDòcx}™ %ù›yóm^`—vV’x“V5™á6b×JŽ{©"–9$’p·7Kµ\Éò|° |¬nZ,uEp2kºŽ‘¥¶¥s*^@š¦£åC™ÂD·µŸy ?v ¸QØѹÖ5Û}fßCûFœ×sIûWØÜFã¹m¾_›ÀÛuߌ?N9,[Egè·òê:o: ™'šÝÊš)Z2Àà™ÆN3Œœf´(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\Z®£uâÍS쩨ïƒQVäÞbÖ(D04‘˜Œœ³)“Ë?3ƒ‘Œ¬1x›V6šíÌvkq©ÙEˆÈcˆÉ-¤jYwø3#ò³ÝQ\v­¯øƒM»{Xm­¯ZÎÑnîæHÒÙY¤s$ãÊDrÿ¼êN0vµ;ËÿíK=3O’Ú §‚kƒ5Ä-*…£]»C'$ÊsÆÜ`ç ^Šã¯¼Y§ZKªÉ´¶^}å¼vª¬’+[¬í¸É’o³ž6 o¿5+ÍG\Ò|Quû5þ£yœ{]ŠŠ>Ù!ùa¸â6ë®yưõŸ¢^ÜêLSÞBÜîxäDu`ýÖ` Û’»›i%I$f´(QEQETv¿ñãûóèé*JŽ×þf×1˜g”À¥åB*ÇeÀŽZ†­àŽ#H¡B$h¡UT è¨ÿá]úQ\cé¶êjY[=ìK²;–‰Lˆ¼ðæ?™õªÐx{LŽUšÒ©m¤y£žæ5yW}îàãåbÿ7Ë€@\ÿ…tèpñ/ýþ·ÿã4º?ô8x—þÿ[ÿñš9Bä/£é’]\]>f×1˜g”À¥åB*ÇeÀŽZ†­àŽ#H¡B$h¡UT è¨ÿá]ú›a.¡¡%•³ÞÄ»#¹h”ȋϱ>cùŸZü+£ÿC‡‰ïõ¿ÿ£þÑÿ¡ÃÄ¿÷úßÿŒÓåÉê»;[ûWµ¼¶†æÝñ¾):6FAàòü*[_ 6ò ·ñ¹z±È¹·¹–#äóIëž½¹Èâ°uÈn/¼EáÍ*FòÂ+Û‰’i-C°;€7+¨;zÒ°îicéŸÙŸÙŸÙÖÙÿóëä/•÷·}Ìc¯=:óBhúdwV÷I§Y­Å´b%(x©ÆUpHÀã“Sº?ô8x—þÿ[ÿñš?á]úQ\†L¶º{¨4ë8®$“ÎyRWgà ĒØwëóSUO†4vÖ©&Ÿm%ÈT—…‰•ÞMéÆU‹HI9ä€zÕÈ|ʃƾ"•²K‹v•аâ¡v Š“þÑÿ¡ÃÄ¿÷úßÿŒÑÊ4Û¼{Áel.•Úqïf TØÉ!Y”{;Ó-4}2Â4ŽÏN³¶DÌ‹ \®ÒÀÃm$g®)Óø+[yn.€zTM°helaHÝc1.Õˆ€ `c…!W#§Ò±ü#á{Ÿxv=VçÅ:ôËqrž\ÂBNè nˆžŠ:“[ð®ý%ÿ¿ÖÿüfŸ(®VŽ©h‹¤Ø…³böÊ-“1;‰N>Sêký6ÃT`Ô,­®áVÞ#¸‰dPØ#8 ó‚:ü+£ÿC‡‰ïõ¿ÿ£þÑÿ¡ÃÄ¿÷úßÿŒÑÊšm„Z„º„vVÉ{*ì’åbQ#¯ÆHùGä=*´^СµžÖ-NŽÞãoZ I6œ®áŒFzUÏøWGþ‡ÿßëþ3Gü+£ÿC‡‰ïõ¿ÿ£”.I 1[ÁF‘C„HÑBª¨ÐO¨?á]ú4Õõ=f-ÄS›]:ýì÷Þ_*;ªÙÂÛ0èã¿cÅ.QÜô +²ðŽ…ìÚ~&’;"àJÖ×ÂI'*µ²Ž¸êxëÏCÙÌ‹"(àFNOÝûÐÕ‚äu¯üxÅþüßú:J’£µÿ¿ß›ÿGIH |þ«_ÿ°¼Ÿú.:(ðú­þÂòè¸è­ %¹ÿZ¿õÍ?ôUm¿äeÿ^ÿ赫W?ëWþ¹§þ‚*­·üƒì¿ëÒýµ™G?ñþD sþ½ŸâíFèx¢÷[‹F¾º‡ÂþG—wÀß K{ò´Š_}³Æ£*pÀãiùýH:öƒ{¥ …·û\F#3)`€õ8~ŸÊºÿíhýbÿ¾›ÿ‰ª‹8ä1öWØá.þÕÔ¾Óç®û>Û¯³ý£oï>ÏŸ²ã×§jºÖ©#ñB´š¿I™dm(îËM  )”¼ªª…R}KûZ?X¿ï¦ÿâhþÖÖ/ûé¿øšwAb ß\j: W2yÌe™#Ÿh|K+¬Rñ€w¢£å@S»* VÅfÿkGëýôßüMÚÑúÅÿ}7ÿEÐXÒ¢³µ£õ‹þúoþ&íhýbÿ¾›ÿ‰¢è,iQY¿ÚÑúÅÿ}7ÿQϪ³[ʶò[G9B#yº«c‚THÏlŒúŠ.‚Ç”x÷Â^"ÕgŠÿÃ:õõ¤ìËö¿m’8Šä1p~R$È7 rÏH}Ä>³—P¼Ô'ó4·7r³¼ŒmäÉ'jú(éîrN§ö/ŠèqÓ?ðPÿürgáÍTø‹IÔõ_Ù]ŧLÓ,Péï1dd?6óýìôíR†Iwÿ#ëîçÿIe¬m6óÃö:fqx e]¤.ªò^™-B%áÈýã9™Oœ@9—qÛ¾ºvÓ¾ÑâS7ƺl²ÊQ&Bñ4xŒo'>Øï‘ÓÿkGëýôßüM4ôGšÏ¥øfk}>üëžKD{”\Z­Þ™nò Š#æ"#nH.^W  ¾™¡Kçx{L—û;û7}¤Mö»~Í”»Æ6ýÜ`tè)¿ÚÑúÅÿ}7ÿGö´~±ßMÿÄÓº TVoö´~±ßMÿÄÑý­¬_÷Óñ4]*+7ûZ?X¿ï¦ÿâhþÖÖ/ûé¿øš.‚Æ•SÕ?ä/áüÅCý­¬_÷Óñ5›¯\ßj:a¶Ó5 ;™Ái¦çG8 6àç’xÏäAcɵ‡þ'“ÅÑý‹Åº¼Z¹’LßÊe‡~ír~lç†=9Éw[áø–øž.V=:ÁAw.ÄrÄ’O¹94ÿì_ÿÐã¦à¡ÿøåYд+­*ÿVÔ5 fÛP¹¾†@‚Ñ¡ #f=Ù³÷§J‘–|ÿ#ÿŠ¿ëÒÃÿkÖß?äZ}ÿñïö»Oµgî}ŸíùÛûy~^ýùãnìñšÍÐìÆ—¯jÚ«ÜDßoŠÞ! ·òNsætí~:íhýbÿ¾›ÿ‰ªM ƄﴻI/á°’Ò®õ_'H«›wÒ9E³å ½''oüY®OÉð‡ˆ´ëéô½SF³·)  t÷¥ÄR‹èÃ`J™(²HÒ0.Êž•ý­¬_÷Óñ4kGëýôßüMAcÁígý‰u…¶”–±_ª¥Ö“n!¶¼â2dE‡˜ÉÜÜÄytc]ÿÈûàïúû¹ÿÒYk³}J)B«e$yøÎY1×_ÜÙêzuÍ…âE%­ÔO Éæ8ÜŒa¹ô«ÚÑúÅÿ}7ÿNè,yL¾-ºÐü'çéšÔìòêW‰=åÜGª¥ÎUPy-ç7É–XÌ\J˜?0+¨úž¡£i7ÐÙëqÁ;ë·Bñ.ç†Ó!y®d˘\Æ%"<UÃovîzö´~±ßMÿÄÑý­¬_÷Óñ4]1ñ&¿{uà½R kÄPX«h“=«ÀÑ„Õ\™Ð ybgÈÄ©Ÿ;rü¬˜ôêzމö]BÒµÛüöÒYîX÷Í& ¼‚Fd :~ÿqá*÷ö´~±ßMÿÄÕ{‹›;¹í&"y-%3@|Ç£FO ÏÊì9õõÅAc‘þÙñ-§‹àÒ®5›kymmü™b’þ3fYÖÝago™¥Ã$ªŠcù†Ëe·µÉµV¶±Õ­¼x¤Ž ¥Šâ}?uí´^TФq˜ÎÙÝYݲ¸¥K7¥kGëýôßüMÚÑúÅÿ}7ÿEÐXæ~!jº‡l.-nwÝÁö’·3C¾ôÓîœ?ÝÚ­¹;@î1´‘[4·¶Þ!Ô´k­F}B8--®’{”dW™Jþív%Hùs–l’0ïíhýbÿ¾›ÿ‰£ûZ?X¿ï¦ÿâhº c¾$Ó¼à{ø§±¾òm<Û8l$™pcVo5·ôÁ ªI’ÚÜ1Üöü¤HÊ3¹NN±ÿehßdò<ïìø?á)ò±»ÌûUŸ›öÜϵîóyÛçgõêßÚÑúÅÿ}7ÿY’xÒÂ;»‹e†òy-Ü$¦×O»QŠ«€Y!+¬§î(¸Ž2kÏ Ä—v’ ´ÛAÿ±…ë§ödQ {6TRDo¶Ràù‹´€V^ƒÄQÁác×ç†ÂÖíõ¦š'"?²N‹+É"´gyd]Ä`™9"´¿á4´ÿŸ _ÿ×ßübøM-?çÃWÿÁ5÷ÿ¦n¯^Ïâˆ-›Tón¤Ô.­îô±ÿ¢Z ›ÊŸh_5wùp|ÎÅOÀ“êw>»ñâZµæ›i«Û\@eºžáVíŸ ÉmnîÀû~R$e™Ü¦·ü&–Ÿóá«ÿàšûÿŒQÿ ¥§üøjÿø&¾ÿãç°}û+Fû'‘çgÁÿ O•ÞgÚ¬üß¶ãø¶}¯w›Îß;¿þ ¯¿øÅðšZφ¯ÿ‚kïþ1@5ÌÿÂiiÿ>¿þ ¯¿øÅðšZφ¯ÿ‚kïþ1@5ÌÿÂiiÿ>¿þ ¯¿øÅðšZφ¯ÿ‚kïþ1@5ÊÍãÍ:ÙÏkªD…Õ>‘| ³0UÁÔ±äRÂiiÿ>¿þ ¯¿øÅtÔW3ÿ ¥§üøjÿø&¾ÿãÂiiÿ>¿þ ¯¿øÅtÔW3ÿ ¥§üøjÿø&¾ÿãÂiiÿ>¿þ ¯¿øÅtÔW3ÿ ¥§üøjÿø&¾ÿãÂiiÿ>¿þ ¯¿øÅtÔW3ÿ ¥§üøjÿø&¾ÿãÂiiÿ>¿þ ¯¿øÅtÕ…«­?õÐÿè)U¿á4´ÿŸ _ÿ×ßüb³¯üKk9 ¶:Ñ%‹º%ï(ïô¤ö'øaÿ"¯ý}ÞÿéTµØWá]bÛÞ‡L{}ZvIf”¸Ñ/ÔfI^LcÈ=7ã=ñž:VÏü&–Ÿóá«ÿàšûÿŒSÓQ\Ïü&–Ÿóá«ÿàšûÿŒQÿ ¥§üøjÿø&¾ÿãÓQ\Ïü&–Ÿóá«ÿàšûÿŒQÿ ¥§üøjÿø&¾ÿãÓQ\Ïü&–Ÿóá«ÿàšûÿŒQÿ ¥§üøjÿø&¾ÿãÓW›év:Ρaãx¼?«ÿeêcļ4I"1Cò8eo”ú‘ÁçOEÿ ¥§üøjÿø&¾ÿã“eâHšøÛŬÃ%åË]\Ò¯éžmøùUF=½rh¸?­þ$ݼº‡uY!¶Š*-?ìÐ+LÁö—fTÈ@~îÍ×;q¿©¹ÿZ¿õÍ?ôUôÖÆïíf†ÁÒnùÁÏkzŠÇXÓõëu-.ä\ÙÊ¡c”#&í¿)á€=TŽEL†‹¯üxÅþüßú:J’£µÿ¿ß›ÿGIR2_ª×ÿì/'þ‹ŽŠ<þ«_ÿ°¼Ÿú.:+BInÖ¯ýsOýU[oùÙפ?ú-jÕÏúÕÿ®iÿ Š«mÿ û/úô‡ÿE­fQ•âÍFãH𦧨ÚаÈÈõwþÿÿÐácÿ‚_þÝXÿ?ä@×?ëÑëÔê¢&pŸð‡ø·þ‡ üÿöê?áñoý?ø%ÿíÕÝÑNÈG ÿ‹èp±ÿÁ/ÿn£þÿÿÐácÿ‚_þÝ]ÝYÂÂâßú,ðKÿÛ¨ÿ„?Å¿ô8Xÿà—ÿ·WwE@pŸð‡ø·þ‡ üÿöê?áñoý?ø%ÿíÕÝÑEeý“âOú-¿ðH?øý@‡ZÓüO Y^ë±_A¨]4RFšh€…Xó»Ínê1ОEcxö[Oï…5– c’ËÈ…š&$Ê̼©=r~^¿w;nYÚj¶^!ðþÉñ'ý –ßø$ü~—@ŸQ:þµ¦êŠ_ +[yQÒÐ[€Ò;‚1½ó€ƒœŽ§Ž®;P±ø‹£Ó¬µýúLÙ‘oä´€ù(ʸ2ã#`7^m½o‡Ñ¢ñŸ‰ãy^f]:ÁLŽg!¤äà“ìö©è ×õßêÚv¬Ûiöö0[H¶>ys/™žw®1åûõ­?øCü[ÿC…þ ûuÿ‘ÿÅ_õéaÿµë»ªHG ÿ‹èp±ÿÁ/ÿn£þÿÿÐácÿ‚_þÝ]ÝYâ¬ü/âKØ&Ô¿©=Þ¤53Éobè¬ko´à¡ÜOËž2+Ú«åo‹?òUuÿ÷àÿÒx«jUYò²'7sÐámøWþzÞÿà#ÿ…ð¶ü+ÿ=oðÿ¼2Šíþ·s¬>ǹÿÂÛð¯üõ½ÿÀGÿ ?ámøWþzÞÿà#ÿ…xegC¸}aö=Ïþß…ç­ïþ?øQÿ o¿óÖ÷ÿü+Ã(£û:Ãë±îð¶ü+ÿ=oðÿÂø[~ÿž·¿øÿá^EÙÐîX}sÿ…·á_ùë{ÿ€þÂÛð¯üõ½ÿÀGÿ ðÊ(þ·púÃì{Ÿü-¿ ÿÏ[ßüð£þß…ç­ïþ?øW†QGöt;‡ÖcØ5Ÿ‰^ÔN–±Ot¢ßT´¹‘žÖ@i2³è8ö­?ø[~ÿž·¿øÿá^EÙðîX}sÿ…·á_ùë{ÿ€þÂÛð¯üõ½ÿÀGÿ ðÊ(þ·púÃì{Ÿü-¿ ÿÏ[ßüð£þß…ç­ïþ?øW†QGöt;‡ÖcÜÿámøWþzÞÿà#ÿ…ð¶ü+ÿ=oðÿ¼2Š?³¡Ü>°ûçÿ o¿óÖ÷ÿü(ÿ…·á_ùë{ÿ€þá”Qýáõ‡Ø÷?ø[~ÿž·¿øÿáGü-¿ ÿÏ[ßü割ìèw¬>ǹÿÂÛð¯üõ½ÿÀGÿ ?ámøWþzÞÿà#ÿ…xegC¸}aö=Ïþß…ç­ïþ?øQÿ o¿óÖ÷ÿü+Ã(£û:Ãë±îð¶ü+ÿ=oðÿÂø[~ÿž·¿øÿá^EÙÐîX}sÿ…·á_ùë{ÿ€þÂÛð¯üõ½ÿÀGÿ ðÊ(þ·púÃì{Ÿü-¿ ÿÏ[ßüð®ªÛźkx55ѵXífž ˜b—u¬ò|Í!\`à‚1‘ü$㦠‹á7ü“-#þÛèç«÷º—‰^Âá$ðN¥4LFº·ÂŒrOï;U„ßòL´ûmÿ£ž¸žÆçiQÚÿÇŒ_ïÍÿ£¤©*;_øñ‹ýù¿ôt”€—À_êµÿû Éÿ¢ã¢ª×ÿì/'þ‹ŽŠÐ’[Ÿõ«ÿ\ÓÿAVÛþAö_õéþ‹Zµsþµëšè"ªÛÈ>Ëþ½!ÿÑkY”føŸJ¸×<3¨iv†1qu ‰ ¯µA=Éô®çûF/OüˆŸüUq$ÕdÐü9ªEÊö±1Àlv§eøÿþ}<5ÿÓÿñšjàÎ×ûF/OüˆŸüUÚ1zäDÿ⫊þËñÿüúxkÿ§ÿã4eøÿþ}<5ÿÓÿñš­E¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿЍçÔŠÛÊÖñG$á $Y±À, g¾= qßÙ~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡OgŽçËÃ_ø2“ÿÓmtÞx§C¿ÕcÑ µÓ®f6×ÌîCFéŒ2ÕëØÓ¿â²ÿž^ÿÀ»Ÿþ3L‡P×íüA£iú¤z0‹Q¹0æÎy×lläáãQÑq׸àóR3RM:{èŠÄtÓK6é’Œ©ËƒôØÃûF/OüˆŸüUpzΡ©Á©év“œ·ZŒ²F¿k‘‘dm&IPOE#§qSÿeøÿþ}<5ÿÓÿñšjö;_í½?ò"ñThÅéÿ‘ÿŠ®+û/Çÿóéá¯üŸÿŒÑý—ãÿùôð×þOÿÆiê¯öŒ^Ÿù?øª?´bôÿȉÿÅWý—ãÿùôð×þOÿÆhþËñÿüúxkÿ§ÿã4j¯öŒ^Ÿù?øª?´bôÿȉÿÅWý—ãÿùôð×þOÿÆhþËñÿüúxkÿ§ÿã4j¯öŒ^Ÿù?øªËñî¡.”ÑhÖöRÝ;¨?l»"¯Rr¡‰<Œ¹Ï<÷ö_ÿçÓÃ_ø?ÿ¦Kaã¸c2Iká¥AÔý¶àÿíZ†…mž9ÿŸ/ àÊOþ7RøIÖ-5moTÖF›ÞÛÛÃvw&^cf$œª‘Ã^†¢ÿŠËþyxkÿîøÍI¡êÖ±ªéÚ¢ië-´3e$ާÌfê½À?xsÁ†jøvÊm?ÄÚÞ©7—ö{èmbˆ Wvcó7 ¼úlõÚ1zäDÿâ«Ï…߈õ/ê:^‹k¥:XÅŽ÷·FO™¿mFÎ<³éÔUÏì¿ÿϧ†¿ð:þ3M\Z¯öŒ^Ÿù?øª?´bôÿȉÿÅWý—ãÿùôð×þOÿÆhþËñÿüúxkÿ§ÿã4õ ÊKØ¥UQ…ùÔäȘ0?Þö®JM:{èŠÄtÓK6é’Œ©ËƒôØYiž0°iÁ¡Çd\ ZÚêi$œ|ªÑ¨ëާ޼ô4uCSƒSÒ4í& 9nµd~×#".ÈÚL’ žŠGNâ–·¼þÑ‹Óÿ"'ÿGöŒ^Ÿù?øªâ¿²üÿ>žÿÀéÿøÍÙ~?ÿŸO àtÿüfž¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUq_Ù~?ÿŸO àtÿüfì¿ÿϧ†¿ð:þ3F¡¡ÚÿhÅéÿ‘ÿН—þ*H%ø¡¯:ô/påÞ/N+Úÿ²üÿ>žÿÀéÿøÍhø -Bñ,z¢[%èÕWÌ[WgŒ¢[c€'ŒvëšÚ…WJ|Ö¹2±ò¥õ|ž>Ó±5-I"’$³¸Ž7n°¤Ë#¬q\ÉÿGfl‰pxG b¶-uý6k%š]KMW[>o&ídDPˆìÁ¸Ê‘â§Â»?´?»øÿÀ1ú¿™ñÅöÞ,ðݽµäÞ Ò£µºÝöyžö0’í8m¬NƒŽ•»â7CšÖÒ[«FÔ.n-âŠÉ®U%u–e‹z¯R,Üv‘‘ÔÚÝüàÕüÏ(¯°ì$¢¾Û¢íîþ?ðêþgÄ”WÛtQý¡ýßÇþ}_Ìø’Šû?VÔ¡Ñ´kíRádh,­ä¸‘c±TRÄ 3ê*¯ˆ =uYôy¡‰®;÷ˆfûÒGd*§ï|Ù\‚ÀROíîþ?ðêþgÇ”W×çÅúÛt»uÔí5D”ÙÜ$èb™£tBŠÛ¾g- ýÖô­ =[MÔ..­ìµ K™íeÌp̮жHÀr§*F¡ô£ûCû¿üú¿™ñ…ö|𶛩—.¡hš„ɾ+F™D®¼ò©œ‘ò· v>•]¼K ª^»kzhK xÆé1nÅŠ'?!,ÁÇ#hwñÿ€Wó>8¢¾ÃÅ:#Α6©cM*Åkºî/ô¢É,$äJœ`q†RkßxºÂ k‹ Ô!½–8â– ˜Ê×0ÀÄIm¦lðùpJ’2hwñÿ€Wó>D¢¾¿¾ñ~ƒakwpÚ¤Éeq½à†tclÒJ"O›ä‰'8ÀVôÅHÞ)Ñ"µ’îçT±¶³YR$¹šî!¥¢YWknî­  m “ûCû¿üú¿™ñåõÿŠÓöØü¿3¶nÎ7cœuÅlQý¡ýßÇþ}_Ìø’ŠûnŠ?´?»øÿÀ«ùŸQ_mÑGö‡÷øõ3âJ+íº(þÐþïãÿ>¯æ|I_Cü8ÿ’g£ÿ×KýkÕ+ VÿZë¡ÿÐR°Ä⽬9mcJT¹îaêò ¼ÿ®ÿ šå~É2Ò?í·þŽzêµ?ù^×ÿÐMr¿ ¿ä™iöÛÿG=pô6;JŽ×þÆÿM™–!û‰X¤$¬ù O§iç®Y¶µ'ˆ|&¾¶qê3Ï&’͹‡r8ì3ŒOíOЋ©ÿàU¿ÿPÁˆµ_xræçÂ÷º}µÓË,ÓM ¨  á\ž¤v¨E.ÿä}ðwý}Üÿé,µèõÀKcuqã ^C’[ÙO<—£"5h$AŸ«0Èî~Ó÷eÿ¿MþKa2j*´ÇýÙïÓ…iû²ÿߦÿ b&¢¡ûLÝ—þý7øQö˜ÿ»/ýúoð  ¨¨~Ó÷eÿ¿Mþ}¦?îËÿ~›ü(j§ªÈ:_ÃùŠ›í1ÿv_ûôßáY>#Ô. Òû?I¼Ô®ÕD0…ŒÔ±2ãdäŽ:˜=¨x—âE§‹£Ð!Òt‹?/Ø‚U‰¢eØù‡nÜŒŽH$œ®z߉WÆ~'º<ÃN°È…U›t™ p3Û'êiÿÚž(ÿ¡SÿÀ«þ.áË=`ë¾ Õu=çLŠêÖÖ(–wËwÝÊ1þòõÅIF‡ƒÿäñWýzXízîëŠð½Í§‹¼A¨Mo*Ú]Ai2„$;'›¿ôÞ¼ûûëþÓ÷eÿ¿MþH’j*´ÇýÙïÓ…iû²ÿߦÿ `?ê—þº'þ„+Ï®ÿä}ðwý}Üÿé,µÞÍ2ʪª²çzcaÑî+Š–ÆêãÆ¼† $·²žy.FDjÐHƒ?V`0?4º¡ßÑPý¦?îËÿ~›ü(ûLÝ—þý7øS5Úcþì¿÷é¿Â´ÇýÙïÓ…MECö˜ÿ»/ýúoð£í1ÿv_ûôßá@QPý¦?îËÿ~›ü(ûLÝ—þý7øPÔT?iû²ÿߦÿ >Ó÷eÿ¿Mþ5Úcþì¿÷é¿Â´ÇýÙïÓ…MECö˜ÿ»/ýúoð£í1ÿv_ûôßá@QPý¦?îËÿ~›ü(ûLÝ—þý7øPÔT?iû²ÿߦÿ >Ó÷eÿ¿Mþ5Úcþì¿÷é¿Â´ÇýÙïÓ…M\¤wÓ?Ž¢ÒæŽ AïvÚË Ê¤¦ÂÛc°z¡®›í1ÿv_ûôßá\敨[i÷>5Ônä1ZÛjiœ£eQlm‹c=í@áíîŸqeŸ­OscVPÉÿ– ¥­ÔRÂÇôO´O%—>£Rë“JúýÌBÐ]ßjvwйÈ.¶ËnV)¼.27mgäVæ™­YjþhµiÖH°^›i-äPs†Ù"«m8`%Xq¡@ž‘áÝJ>¿|m#{„¹3[Á+H#g[D@®Uw ¶¥‰!p\3Xúoƒuí/F³Òi³@×eÕÕÃ\º4Ml¶Êè‰åà‹l†,Ÿ dú%Áè¾ Ô´ß .iíq{¥ÜnGb»m’Íd®rM³ãŽëœdâ? Úêpø‡M°–Ë:•6˜/6Ìž{o· Ûd‰"?»iwnT· Ut¾·“QšÁdÍÔ1G4‰´ü¨åœôäÆÿ—¸  QEQEQEeø—M›Y𮯥۴k=í”Öñ´„… èT€N2} cÞhÚö®^þáí4ûømÚÚÞK§uxÞHžPÓlVBâ%@ȹ,À± /I}o¦i×7÷’yv¶±<Ó>Òv¢‚XàrpéUôÍjËWóE«N²E‚ðÜÛIo"ƒœ6É[iÃØÁ*Àƒ€OÃþÖt}lêÍ¡yn%W·}J{‚Ê–ª_Α7»ƒjp„C¸mäÓ|ª6¼·:ÅÄ’D¶S[Ku³uæÜHòBþbÇ…ÀùD”±óä íúÞ=F“SE$ѦÓó" sÓƒ"~~ƬP¬xOV¼Õ­|‰¼û.ìæ‰çÕnÁ2FÍ„IؘټÉvdÁû€Õx|%­Á¤ÇoP"ÙËivk¬K<¬r)‘. ß!ñåH®€2T„EyÝÏ5«ƒ­4Ú¥Ì÷úeݧžàÆd–[k8ƒ²ª µ´„œ\gœXÔ¼©^xªmR9í{ÀVvݵ_Nb>î3‹){ÿzœw̲¼È¢@b}º6PNÐß)# 0Ñ‘œŽ OTÖ-ô…„Ü$íçKKåÄHIcˆe¾èù¥S‚r@bÚh‡>×çÕ"¼ºž fµˆ<º”òý²e¹¶œ)“e²¹· ˆ÷Þ0(b÷ÁºµÎµ>´R¸–Wo²Ã«\ZAhŒ|ø“sm{fJ჆8+Šî/o­ôøk©<¸ÚXái9ycAÇ«2lóÅIË+ÌŠ$'ØÛ£eí ò’0à 9ÈêcÃÏ¿…m­Ú‡F•K…   µ–Ǭ‹Ã1àIëÏêÞ ÕµMkÍ»H/í·.ÆmZâ14RA4IÙÕ q`J¨dRX…-ÌEv¶¬šTP£Ouqs/“omÝò¾ÖrvUDvù˜}Ü ’Р?›Âüÿb¼º¹û]Å·Ú"ŠÓûb{o&<œ/Ú¢ŒI.Ó~tÉó>f%7i¤Ø.•£XéÈ# io 嫨^38îÄú“Ö®Q@Q@Q@Q@ajßëOýt?ú VíajßëOýt?ú R–ÃF§ÿ «Ïúàÿú ®Wá7ü“-#þÛè箫SÿUçýpý×+ð›þI–‘ÿm¿ôsÔtÚTv¿ñãûóèé*JŽ×þ×â¿úï¿ð>ÓÿŽW£ÑE\ó/íoÿПsÿƒ+?þ;Ko®jgYÓtûÿËb/ç0Ç+ÞÛÈÎ~XÝ›î©íŒàdf°¼qãýGÁWQ™<;ö½>l®ÒïhÝŽQ†Ãµº‘ÉÈät X³Ô5SÄ>¼Ôô¿ìÉå¿™–ØÍæ:¯ÙäÁo•v±þïn3Î@‘›šÆ±q§]éövzdº…ÕüPÅ*!Ê¡sË>ê·~Ôßµø¯þ„{ïü´ÿã”]ÿÈûàïúû¹ÿÒYkÑ餬&Ï8û_ŠÿèG¾ÿÀûOþ9GÚüWÿB=÷þÚñÊôz)ÙÏ8û_ŠÿèG¾ÿÀûOþ9GÚüWÿB=÷þÚñÊôz(² žqö¿ÿÐ}ÿöŸürµø¯þ„{ïü´ÿã•èôQd<ãí~+ÿ¡ûÿí?øå5ï¼RŠYüzª:“¨Zÿ£+Òjž©ÿ éæ(² ž}ý­â?úîðegÿÇjÆ«]jZ…ýæ˜ú|öPE3£ÜE)a#2¯1³÷[©ÏN9ÍqWÿuË/‡_Á&¢íˆV;ü¬Ês‡Rc.98ÆqƒŽ«ÃæVñŸ‰Ìè‰1Ó¬ ª9eVÝ&@$ Œ÷Àú ‘’Ë­jrkwš^•áëIí#ŠI^+ˆc $Ý·ýc/÷¦zTŸkñ_ý÷ßøiÿÇ*çƒÿäñWýzXízî餅sÎ>×â¿úï¿ð>ÓÿŽQö¿ÿÐ}ÿöŸür½ŠvAs€±—ÄWÐCyá[«wp¯s-廬`÷Â9céÀïØsPëÅÆw§ÙÙé’êWò×â¿úï¿ð>ÓÿŽW£ÑE\óµø¯þ„{ïü´ÿã”}¯Åô#ßà}§ÿ¯G¢‹ ¹çkñ_ý÷ßøiÿÇ(û_ŠÿèG¾ÿÀûOþ9^EAsÎ>×â¿úï¿ð>ÓÿŽQö¿ÿÐ}ÿöŸür½Š,‚çœ}¯Åô#ßà}§ÿ£í~+ÿ¡ûÿí?øåz=YÏ8û_ŠÿèG¾ÿÀûOþ9GÚüWÿB=÷þÚñÊôz(² žqö¿ÿÐ}ÿöŸürµø¯þ„{ïü´ÿã•èôQd<ãí~+ÿ¡ûÿí?øåkñ_ý÷ßøiÿÇ+Ñè¢È.yÇÚüWÿB=÷þÚñÊf—i©êÞødÚl–º•Ô³B–rK0v°TV+ÎAëÆy¯J®Ãßòñgý…cÿÒ+Z,+˜úÖ™«x‘×P:TöKklne‰¤¼®-å™>Gd ÑÀc›d`Ûe³×ÃS$ââçŸjÐŒ³˜V,!VQŽ\V|~¾MæÐnÞ3q ¢Kob÷w®«!c}ûÑÄ[™H;–MÜðÃÌ> g…nÝ¥ŒNèΑ–™T€Ä¤Ê í¸zÑðÝ[Åqo,sA*ŽHØ2º‘AG9 +¹ð>³4šŒÒi"é4û“bmJ,p]›Kâh7LJ‚P­ÁP£‘‘›—žÔãñþÏÓc‹I‚õÖ(ž4Ž(¼ý2VØ™Fè.˜€H'« úeäoàíjïP¸{B“¢ÏªBRÉ-ofK»yŠÄ#ÃÈRp¦ã+¹ÍXÔü}yy,ͣݦ×ãÓ-RÆF\ÚÚG1ϺÉ2á‘·*ÄתQ@ž£á¦Ôtÿ Øj6‘ê0XÜ+_-Ü‹p-¤É¹‹¨ó˜ÉÎÐI9ÀíÏê^Ö®<]. ¶:”RJ÷)sw¦(D–ÆÞTˆ$„‰Ì¹ò8ì)# ªG¦Q@O7‚õ ´ë(æÑ<½6)nÓôû==frÂÓÅ.ëc Ê ¡˜ Õ}3I¶šÏF±µ¸’I'†Þ8äy&330P .UK’GÞÚ3×¥\¢€ (¢€ (¢€ (¢€ ÂÕ¿ÖŸúèô­ÚÂÕ¿ÖŸúèô¥-†Œ=OþAWŸõÁÿô\¯Âoù&ZGý¶ÿÑÏ]V§ÿ «Ïúàÿú ®Wá7ü“-#þÛèç¨è3´¨íãÆ/÷æÿÑÒT•¯üxÅþüßú:J—À_êµÿû Éÿ¢ã¢ª×ÿì/'þ‹ŽŠÐ’[Ÿõ«ÿ\ÓÿAVÛþAö_õéþ‹Zµsþµëšè"ªÛÈ>Ëþ½!ÿÑkY”axên<¬Ao,Ò[2$h¥™˜ð©&½+ívßóñýö+—Gd`ÈÅXt àÔ¿k¹ÿŸ‰ï³M;GGö»oùø‹þû}®Ûþ~"ÿ¾ÅsŸk¹ÿŸ‰ï³GÚîçâ_ûìÓæŽívßóñýö(û]·üüEÿ}Šç>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£˜,tk¶ÿŸˆ¿ï±GÚí¿çâ/ûìW9ö»Ÿùø—þû4}®çþ~%ÿ¾ÍÁc£û]·üüEÿ}ŠŽ}FÒÚÞYÞu)a.ÄžrXûIíXk¹ÿŸ‰ï³GÚîçâ_ûìÑÌ9)|[a:›C×dPÊá_G˜€ÊC)åz‚„ ‚-Pëž6ð³[éš´Iky#Ê÷6ÄŠ . îeÇRâ+´û]ÏüüKÿ}š>×sÿ?ÿßf•ÐÌ;¤sã ÊŒpÜÜ<¯ŽM´‹’{ ²Ž{;×ö»oùø‹þûÌÇ,‘gË‘Ó=v±§ý®çþ~%ÿ¾Í …Žívßóñýö(û]·üüEÿ}Šç>×sÿ?ÿßfµÜÿÏÄ¿÷Ù§Ì+Úí¿çâ/ûìQö»oùø‹þûÎ}®çþ~%ÿ¾Ík¹ÿŸ‰ï³G0Xèþ×mÿ?ßbµÛÏÄ_÷Ø®síw?óñ/ýöhû]ÏüüKÿ}š9‚ÇGö»oùø‹þû‘â]nÏMÑžV%Qc³çrsŸº€0'·R*ŸÚîçâ_ûìÑö»Ÿùø—þû4sŽHø¶Á§I·®™‘YC£Í¹THo•\ý¥;Â×âoêÊúÞÞk;DCwjð–*òn0ÆGOQ]_Úîçâ_ûìÓ^âwR¯4Œ§¨,H©Ÿá1äxãÄÓËû¸d¶±D‘øVeó‹{sé¸z×kö»oùø‹þûÍ%Äè¡RiG@Nû]ÏüüKÿ}š®`±Ñý®Ûþ~"ÿ¾Åk¶ÿŸˆ¿ï±\çÚîçâ_ûìÑö»Ÿùø—þû4s Æü÷:*¤Ñ³0'ï á.‘ÏŽ<'(V1Ãspò¾8E6Ò.Iì2Ê9î@ï[Ÿk¹ÿŸ‰ï³LŽY"Ï—#¦zíb3Jã±Ó}®Ûþ~"ÿ¾Åk¶ÿŸˆ¿ï±\çÚîçâ_ûìÑö»Ÿùø—þû4ù…c£û]·üüEÿ}Š>×mÿ?ßb¹ÏµÜÿÏÄ¿÷Ù£íw?óñ/ýöhæ Úí¿çâ/ûìQö»oùø‹þûÎ}®çþ~%ÿ¾Ík¹ÿŸ‰ï³G0Xèþ×mÿ?ßbµÛÏÄ_÷Ø®síw?óñ/ýöhû]ÏüüKÿ}š9‚ÇGö»oùø‹þû}®Ûþ~"ÿ¾ÅsŸk¹ÿŸ‰ï³GÚîçâ_ûìÑÌ:?µÛÏÄ_÷Ø£ívßóñýö+œû]ÏüüKÿ}š>×sÿ?ÿßfŽ`±Ñý®Ûþ~"ÿ¾Åk¶ÿŸˆ¿ï±\çÚîçâ_ûìÑö»Ÿùø—þû4sŽívßóñýö(û]·üüEÿ}Šç>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£˜,tk¶ÿŸˆ¿ï±GÚí¿çâ/ûìW9ö»Ÿùø—þû4}®çþ~%ÿ¾ÍÁc£û]·üüEÿ}Š>×mÿ?ßb¹ÏµÜÿÏÄ¿÷Ù£íw?óñ/ýöhæ Úí¿çâ/ûìW) ½Ö¥oãë]2èCyqvÑ[N$*#‘¬-¶åä`àär1V>×sÿ?ÿßf“ÁŽÏyâ†v,ÇU\’rãÎÚšwŒ›oV2Üišf“X¯X¢Š(¢Š(¢Š(¢ŠÏ×mo/¼=©Ùé×g¾žÒX­æÞSË‘…mÑ‚AÈäWq­êÆ[3LÒg‹LM=“ÈUųØhc!eG 6Ôyœ,åŒr½Šó? A®^x‚ÚËÝdéVtÑ»Asj³€,š5q9iHó|nrNÖP|¼¥g±ñުЃ¬ÃëÄ÷öÑC}Ùí¶Á£K‡r¬op A±J©l`.ß\¢€<î-.âÛµâk/¥Ø\Mmc*Ës#fD²‘Cº’òD]n2ÒÛµˆÂŠËÐañ[ßh¯¨_j±\¬6BÖw2o‹É‹ÏódóVbÿh æ«J:®O–+Ö( Š*9§†ÙÏ,q!u@ÎÁAf`ª9îX€r@  (¢Š(ª÷×özeœ——÷pZZÇóO $–< ’ãV(¢Š(¢Š(¢Š(¢Š(¬-[ýiÿ®‡ÿAJݬ-[ýiÿ®‡ÿAJRØhÃÔÿäyÿ\ÿA5Êü&ÿ’e¤ÛoýõÕjò ¼ÿ®ÿ šå~É2Ò?í·þŽzŽƒ;JŽ×þÓiÿ?ö?øÿE˜QQý¦Óþìð.?þ*´ÚÏýþÇÿÅQf”Ti´ÿŸûü ÿŠ£í6ŸóÿcÿqÿñTY%Úm?çþÇÿãÿâ¨ûM§üÿØÿà\üU`IEGö›Oùÿ±ÿÀ¸ÿøª>Óiÿ?ö?øÿE˜QQý¦Óþìð.?þ*´ÚÏýþÇÿÅQf”Ti´ÿŸûü ÿŠ£í6ŸóÿcÿqÿñTY%Úm?çþÇÿãÿâ¨ûM§üÿØÿà\üU`IEGö›Oùÿ±ÿÀ¸ÿøª>Óiÿ?ö?øÿE˜QQý¦Óþìð.?þ*´ÚÏýþÇÿÅQf”Ti´ÿŸûü ÿŠ£í6ŸóÿcÿqÿñTY%Úm?çþÇÿãÿâ¨ûM§üÿØÿà\üU`IEGö›Oùÿ±ÿÀ¸ÿøª>Óiÿ?ö?øÿE˜QQý¦Óþìð.?þ*´ÚÏýþÇÿÅQf”Ti´ÿŸûü ÿŠ£í6ŸóÿcÿqÿñTY%Úm?çþÇÿãÿâ¨ûM§üÿØÿà\üU`IEGö›Oùÿ±ÿÀ¸ÿøª>Óiÿ?ö?øÿE˜QQý¦Óþìð.?þ*´ÚÏýþÇÿÅQf”Ti´ÿŸûü ÿŠ£í6ŸóÿcÿqÿñTY%Úm?çþÇÿãÿâ¨ûM§üÿØÿà\üU`IEGö›Oùÿ±ÿÀ¸ÿøª>Óiÿ?ö?øÿE˜QQý¦Óþìð.?þ*´ÚÏýþÇÿÅQf”Ti´ÿŸûü ÿŠ£í6ŸóÿcÿqÿñTY%Eá±ù>0þÑò>Ãý¡þ‘öŒy~_Ø­÷oÏqœçŒRý¦Óþìð.?þ*¦ðC#Üø™£’9꫆Ã)ÿD¶èGQ8Ï êwPxkE‹FÕ~Íc•£ÇäÚEFfº¸’ Ü’„ùŠAn¸Þ§po˜x¿RKN9\p𛼶Vùùßò¬¼çÔ( 'ÔüYâ[yüC*j–0Ék VÃÍWšâIL3y É»dM¾IYIÀË 5ù/-¡â)n¬#¿´¹‚hïÅŒ©”ĨÌŤDFÄd •f:‹uCÄ×–“Øß}¢Òk¸ì.µY–%L#· •VóNäÆá‚[Ò( ;×R>?ê-£\Ï/‰-7¥Ä"æò+ë1i†Y¢±™£Á—å\Çp2ø†D§Õ( #—ĚĽͭåݨ´²¹Ôš‹H[‡†ËOuK9Ì®iR:¨kZ…ëx’ &êçí‹c¨CÜÍ biÚ´™FæEP9†(!S •ÍzÅãwþ&Ô5‹™¬›UŒZJðê‚æ.´¥ŠúÔŸ5*!(Žå„†\Ž[ Å®_ø‹R¶Ô.á±Öìmô÷»ËjóÜ[Ú‰ˆ³²1ƒ7‘$lÎ$‘±°å!SiõŠ(‹ÖVûS¶ðGŸw%ü÷¡åšÒ-¥ì7¶¤èHÈî@<àôÇÔ¼e©Ûøº[{MSM…${˜ާy6Æ+y\Lñ,K"DZÛ̬ r´n}2Šòy¼W«¶d ×|‹W–àM«j¶Ã$ˆ!Ú\-»Å$m¾R3¹1¾Jìe¯LÒf¹¹Ñ¬g½‹¹-ãy„qº(r ¶ÀuÏ ù«”PEPEPEPXZ·úÓÿ]þ‚•»XZ·úÓÿ]þ‚”¥°Ñ‡©ÿÈ*óþ¸?þ‚k•øMÿ$ËHÿ¶ßú9ëªÔÿäyÿ\ÿA5Ê|$x[áÆ¹¶1™Dm:$ÌøIÏ5=vµ¯üxÅþüßú:JtR$Ñ$±œ£¨e8êJm¯üxÅþüßú:J@Kà/õZÿý…äÿÑqÑG€¿Õkÿö“ÿEÇEhI-ÏúÕÿ®iÿ Š«mÿ û/úô‡ÿE­Z¹ÿZ¿õÍ?ôUm¿äeÿ^ÿ赬Êÿ‡ýºGÿ£%©*6ÿ‡ýºGÿ£%®>ù¦…üS«EwyöÛ •[(¾Ó!‰›ìвÅäîØÛÝÊ㉔†Á¥Âø‡Åz¢ê ·›¦Ï+lÑC+7γo8h]xDõ À,û ^ÿN³¹·‚Ý$k«»Ô°mŒGÚ>Û*‘&ÝÃ#ü¼ìŽcü"‹ÛÑXZŒ—çÆD—I-is$ñÈŒë"¬–ã€pØc†9ÆO5Ï^ø‡X¹Òô·Yí¡mYmo-š(œe76Êc“çýè"p 2ñópßQ\­÷ˆ5;-R£‰.íažÞÎúD·©<¬ƒ!šmÀbXÛ®7u+KÂZ­üV^±¸Tµ²–ÂÞ;bÖí!»al±"¾"#åuä!*NNÒÀvôU]6in4»Iç’ÚY¤äµbÑ3”'ª“ÓÛÌxž{>½2]\ÄÚVŽ—¶‚)š5Y‰¸%™T ýÒ|®pxääØÑYÔörÚ^êä²Î"6ö3lši6îeHe8!øeÀbusöZ†žf»ÔnžòÖÊÁež5›ˆ%·@ó1 qÙµ¹Ræ"I8wÔQ\ åÿ‡4››éµÕ“ßê‚;u£‘Z7¹›&MÌ>QØ1¸œ`€wÔW0ºÞ§iâ+Mñ¬îY#/<04CcÅrÁB—o˜5¸ç8!±Œ˜lJÇ¡ÏvP°m‘áýBâþÒãís#ÝA?•2-£[˜[j¶ÂßqùX©`ž§^…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@'„a[–ñdd &¦Œr20ÎØpÊASî#µ-'„`†é¼YoqsA.¦HäPÊêlí#ŒSŽâg?£ø‹[Óü%Ì70Mo¦øjÓXº«,óݼ‹3È¢c/ÉŸ+‚U±»¦sÄþ½ö™ô÷š=*áïm¾Ã ´w2B/­âóŒé.ÇFóE„p™»K} G´³’ÎÛJ±†ÖX¼‰!ŽÝ<±ØT ˹ÇO½MhZÓœçÌãçÎæëŸ¼}jÉ9½KžŸ¬ÛC1ÞÙÁqka©K¨Râfr§Ü  ¢m¢9;wç%y?êÚ—†ÏEÎÔçû$¢³,Ù…4Û íóM Œ4‘¾OÍžJúcøkA’âÒáôM5§²DKYÕ @¨r2¡O cµxkA¹²Sèšl¶ÕÄjŒ•jv‘Œ„Aì(‡Ò¼GªêvWºÙš5°¹Ôô¡“ ÀgKÁeWQ° [äØ$“Jx£\×n-¤Ô´Èílõ /·ZbFUÊa@;J1 Ë”‹\¸ Ò GYa”iV"HbH"qn™Ž4`èŠq«*°€@#‘RYé:nŸquqe§Ú[Ovûîd†F™²N\–9br}O­\¢Š(¢Š(¢Š(Æ“Íkà_Ü[Ë$3Ŧ\¼rFÅYDÄG ƒÎkòìøSR{+›¹àšÉ¤)u,—ÓKVÀp³¸ÚΪ|¢ALHǰžn­å·¸Š9 • IŠ]HÁ#ŒU;] G±Ó§Ó¬ô«{÷yÖÐÛ¢G&áµ·(9ž¢€8½#]ñ¯ã+ƒŸ=’^G{ °egQö)¤ì¨ûgÀmòc“˜¨¹¦xÇV¹ÕŠ"{Û ËI/´Ç‚( y¡Y"Q÷ »+2¶\BFߺIÂôxkAµ·ŠÞßDÓa‚+uqÚ¢ªL€€àq»­Ik¡hö:Œúž•co}>ï:ætI$Üw6æ'$sÔÐ7©x·S·Öm¾Ë§Èúz\ZÙߤÆÚyÚ0Ê'ê«4M„ŽE=7Œ’µãñ7‰¤·¹¬£Sá{›1`ÎÚt$>a"l^ÝíIVêvî]u—Z}¨Á¨ÞiV7Ðmònf·G’=§ríb20I# Wÿ„OÃÙßÙßðé_aó|ÿ³}Š?/ÌÆÝûqØã=q@?ü'ZšI¨]XÍcsioi6§$ÃíQÅic&ØÕ¤ýÆÿ´7f Á*͸±®k—÷Ŷ}äI5¦¡rÏ’$”­Þ™"‘v‹¼–?.APÅkÑ%ÒtÙžw—O´‘îÒfxT™ÕUƒqÈ+PŠ; $ÒtÙn Äš}£Î\9‘¡RÅBqœæ(Žéšt`Îõ/ë·¦+{qö{]F[k­*üÛˆÃCöÛT•gf‘Y'\†œdmùˆ[—>%ñíæ‹§ZGy~.¤š8¼ÅÛµ™lE-Ìakᓌ}Ö,Ï]‚xkAŽâîá4M5g½GK©ÕN®ráÎ2Á$ç½xkA¹²Sèšl¶ÕÄjŒ•jv‘Œ„Aì(›ñÜxGðŠ±‹ûRí{{•¶Ì ¤òì`¬«*†U ƒŒª°è(»ñ~³¼c°Òÿ´4Û‰n--ă}Ì1JÌža™‰ùà‘9‰9Ü@ûI †g…åŠ7x_|LÊ FÚW+èv³ ŽÄŽõŸ?†´«ùoî4M6kÉP¤—Z£HêSaˆÉ~\zqÒ€8öñˆåx4Ë#¼Õ‹În•tÏ(ÚùKchåºPÇý!O˜’²‘¡Ü;&õµ-ÆýâŽ'¹·ŽfŽ9–eRʯ~ðàõ^O h3ipérèškéð¾ø­Õ HÜò©Œó7 w>µ©@Q@Q@Q@ajßëOýt?ú VíajßëOýt?ú R–ÃF§ÿ «Ïúàÿú ®oàßü“íþºIÿ£ÞºMOþAWŸõÁÿô\ßÁ¿ù'Úýt“ÿG½JØgI¦È*Ïþ¸'þ‚*k_øñ‹ýù¿ôt•™ÿ «?úàŸú©­ãÆ/÷æÿÑÒR_ª×ÿì/'þ‹ŽŠ<þ«_ÿ°¼Ÿú.:+BInÖ¯ýsOýU[oùÙפ?ú-jÕÏúÕÿ®iÿ Š«mÿ û/úô‡ÿE­fP7ü„?íÒ?ý-VþÇÓ?´ÿ´ÿ³¬ÿ´?çëÈ_7îíûøÏN:ô⬲ÎdÜ—LœC` œež¤ž½ÍºÿŸé?ïÄün€)Í è÷’^O¤ØËu"”yÞÙÙJí ± ¯Ëôâžt«_·[]*lû?šÉ€#ß!¤Æ>ÿÞºâGþñ«8ºÿŸé?ïÄünŒ]ÏôŸ÷âþ7@ ¹³µ¼ò¾Õm þL‚h¼Ô ±ÇF\ôažæ GÓ"ûg—§Y§Ûsö­°(óóœïãæÎæëž§Ö¬âëþ¤ÿ¿ñº1uÿ?Ò߈?øÝS}Gyí§}&ŦµUKy ²…TåB| ˜éO¶ÑôË+£ui§YÁpc™bUö\ *€:p=*Î.¿çúOûñÿ£_óý'ýøƒÿÐà VðG¤PÆ¡4PªªtTZm…ìöóÝÙ[\MlÛà’X•Ú&È9RGÊrOASbëþ¤ÿ¿ñº1uÿ?Ò߈?øÝV»ÑôËøÞ;Í:ÎåA3¬Ð+†p»CG-´ž¸¦ GT´EÒlBÙ±{eɈħ)ÈŽõs_óý'ýøƒÿÑ‹¯ùþ“þüAÿÆèJ…líWËÛmòäi“>WmÛ˜z1ÞÙ=NãêiغÿŸé?ïÄünŒ]ÏôŸ÷âþ7@ÓAÑâÓåÓãÒlRÊVß%²Û ÛŽJãü£ò”øt}2ÚÕí`Ӭⷒ?%âHQ“,v åÜã§Ì}MYÅ×üÿIÿ~ ÿãtbëþ¤ÿ¿ñºm¥­…ªZÙÛCmn™Ù(''p9$þ55G‹¯ùþ“þüAÿÆèÅ×üÿIÿ~ ÿãt%.¿çúOûñÿ£_óý'ýøƒÿДTxºÿŸé?ïÄünŒ]ÏôŸ÷âþ7@QQâëþ¤ÿ¿ñº1uÿ?Ò߈?øÝIEG‹¯ùþ“þüAÿÆèÅ×üÿIÿ~ ÿãt%.¿çúOûñÿ£_óý'ýøƒÿДTxºÿŸé?ïÄünŒ]ÏôŸ÷âþ7@QQâëþ¤ÿ¿ñº1uÿ?Ò߈?øÝIEG‹¯ùþ“þüAÿÆèÅ×üÿIÿ~ ÿãt%.¿çúOûñÿ£_óý'ýøƒÿДTxºÿŸé?ïÄünŒ]ÏôŸ÷âþ7@QQâëþ¤ÿ¿ñº1uÿ?Ò߈?øÝIEG‹¯ùþ“þüAÿÆèÅ×üÿIÿ~ ÿãt%.¿çúOûñÿ£_óý'ýøƒÿДTxºÿŸé?ïÄünŒ]ÏôŸ÷âþ7@QQâëþ¤ÿ¿ñº1uÿ?Ò߈?øÝIEG‹¯ùþ“þüAÿÆèÅ×üÿIÿ~ ÿãt%e[_\ižø‡g'—uk,³BûAÚëaSƒÁÁ­hâëþ¤ÿ¿ñºo…ìaÔ­üa§ßƒqou¨f ½ÊÜòcqЍ‰™—~)Ömot­1ï1yo(´Ô”Ÿ¾qya“¦Ì‚à¾Õ?/›Œî^; kë‰Wy.CõäFŸ—¹¢ûÂÚ6£«Iª]Yù—Ïh,ÌÂWR" nÚÁÀ`ã б¦h¶ZGšmVv’\šææK‰ áwÈÌÛFX…Îf dœÐ (¢€ (¢€ (¢€ (¢€ (¢€1üY}q¦x7\¿³“˺µÓî&…öƒµÖ6*px8 u®NOjvz†—¦Ý\È÷09³¿Ø±©šQwcK÷Pñ\ù… ”®C(eï/ìmõ=:æÂò?2Öê'†dÜFä`C ŽFA=+>÷ÂÚ6¡­.±ugæ_¬QÂ%ó\a#™gA€qÄŠ­Óœ`ñÅqíñ SÕt¤¸Ó4yí¼ùl䳞hæHäŽK¨P¤$U™%ÿ–fQä•Kt׈§¶¶†Ú4žßR[»œ­¬­YnaI&xÂ?Ë!|ÝN#ð†‡L‹i!Ib+ÜJÂÝC ·îeB{pQÆÅÆ„Ú]¥Î–4éÒImÂ*ò»8Û‚­æ¿x ùÜ9æ€9½[ÄúŽ›ãOì«k?·-ÌV±ÛÀeX„r8½vvb Û‹t© Ÿ•£Ôtù¹ XмIªk>+¹·KhÂHÅÊ4ÿ4¬÷P¹þñY ,S ÆI±iá}&Îxn帆_9'¹»–yt|ŒX¨Yd“´bNjKi–—©ymί+–ŽyHdwvÞaÆé$e RÇn3@”QEQEQEQEQEQE…«­?õÐÿè)[µÍë—¶°\˜æ¹†7Þ[kÈÆÕçè*RØhÊÔÿäyÿ\ÿA5Íüÿ’} ÿ×I?ô{ÖÞ¡¨Y>›t‰ynÌиJ¤“ƒï\ç´†º;Evñç(Ž?|ýÙ ýjz ë4ÏùYÿ×ÿÐEMkÿ1¿7þŽ’ˆ![{xáBJÆ=p(µÿ¿ß›ÿGIH |þ«_ÿ°¼Ÿú.:(ðú­þÂòè¸è­ %¹ÿZ¿õÍ?ôTÒÞXáŠ!~›cc³9¨þZûUËŸõ«ÿ\ÓÿAJÎÎ,í?u4²Éo±ûLÙbPpÜÔ?É›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ›û,ÏÏýÿ¸ÿâèþËóãsÿî?øº‡É›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ›û,ÏÏýÿ¸ÿâèþËóãsÿî?øº‡É›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ›û,ÏÏýÿ¸ÿâèþËóãsÿî?øº‡É›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ›û,ÏÏýÿ¸ÿâèþËóãsÿî?øº‡É›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚF·´K†·hgTWhÍÜÁ‚± 7ç«Ù>•?öXÿŸŸûÿqÿÅÐ>LßóýþŸþ;G“7üÿGÿ€gÿŽÔßÙcþ|nïýÇÿGöXÿŸŸûÿqÿÅÐ>LßóýþŸþ;G“7üÿGÿ€gÿŽÔßÙcþ|nïýÇÿGöXÿŸŸûÿqÿÅÐ>LßóýþŸþ;G“7üÿGÿ€gÿŽÔßÙcþ|nïýÇÿGöXÿŸŸûÿqÿÅÐ>LßóýþŸþ;G“7üÿGÿ€gÿŽÔßÙcþ|nïýÇÿPÏkmlbÁ$FWÙ’êuÞØ-—äáXãÐÚ€&oùþÿÏÿ£É›þ£ÿÀ3ÿÇhû-¯üñ“ÿ§ÿâë.ï[ðÅ…ÓÚÞj–6× ñMªº:ädd28 þ4©äÍÿ?Ñÿàÿã´y3ÏôøøíbÿÂOàïúéŸø8oþ;Gü$þÿ î™ÿƒ†ÿã´µäÍÿ?Ñÿàÿã´y3ÏôøøíbÿÂOàïúéŸø8oþ;Gü$þÿ î™ÿƒ†ÿã´µäÍÿ?Ñÿàÿã´y3ÏôøøíbÿÂOàïúéŸø8oþ;Gü$þÿ î™ÿƒ†ÿã´µäÍÿ?Ñÿàÿã´y3ÏôøøíbÿÂOàïúéŸø8oþ;Gü$þÿ î™ÿƒ†ÿã´µäÍÿ?Ñÿàÿã´y3Ïôøøíeµÿž2àTÿü]eµÿž2àTÿü]LßóýþŸþ;G“7üÿGÿ€gÿŽÑö[_ùã'þOÿÅÑö[_ùã'þOÿÅÐäÍÿ?Ñÿàÿã´y3Ïôøøíeµÿž2àTÿü]eµÿž2àTÿü]LßóýþŸþ;G“7üÿGÿ€gÿŽÑö[_ùã'þOÿÅÑö[_ùã'þOÿÅÐäÍÿ?Ñÿàÿã´y3Ïôøøíeµÿž2àTÿü]eµÿž2àTÿü]LßóýþŸþ;G“7üÿGÿ€gÿŽÑö[_ùã'þOÿÅÑö[_ùã'þOÿÅÐäÍÿ?Ñÿàÿã´y3Ïôøøíeµÿž2àTÿü]eµÿž2àTÿü]LßóýþŸþ;G“7üÿGÿ€gÿŽÑö[_ùã'þOÿÅÑö[_ùã'þOÿÅÐäÍÿ?Ñÿàÿã´y3Ïôøøíeµÿž2àTÿü]eµÿž2àTÿü]LßóýþŸþ;G“7üÿGÿ€gÿŽÑö[_ùã'þOÿÅÑö[_ùã'þOÿÅÐäÍÿ?Ñÿàÿã´y3Ïôøøíeµÿž2àTÿü]eµÿž2àTÿü]LßóýþŸþ;Pø{PDÓük©Ýš+Ö¸“ÊŒ+2¥•»±ç¹üªo²ÚÿÏ?ð*þ.àû[yÿá+µ–’Ú]L#Å.dWSgl;‰È9<hL—Qñ¥áxEïˆE¤ö“$̱éñ0{vŽ'(K¶%"q¿òåÖŒ"ͬÚF¥¨]-5¼“,¡ÖFVV€Ä3™ÁýÙã•Ü\ø6ÚúÊêÏPÔµ+Ø%·–Ú¸‘Ú$ˆQŠ™gÚÅwÈ]±ž~gÝcRð½¶¡ª6¨.îíoÂB±OBa1ùÀ2‡VRJÜJ§p#`ªËÛ|PÓôË5]yäŠí®.ÞT’KxÚÚºš4Ê™˜BÆF"óäîYwtÆ=…ýõ¾‘©Oocq-¼ò&'‘d`ÒÈ€¢ùy-œ|àu;_Áf¿èúΫ’ï’£Ä¯v­,’ÄF6a¦—/-†þ¹ E‹Ÿ Á>™”:õªÅ¨I¨ "ò˜™I$Ã+£)PònPW ¢ås@Ãã+iž麔03Á óM µžeC2!}ûÿ{;U”# Ž~çâžfͦ_Çnc¸´Ï$Ð2µ«]C®B»†Ù„a»•m½!ðœx'—Q¾’7–›˜Ê uq@“90ò¢8B¨v—ŽÛCk ›jZ”–vÏ´¶i%²C*Hˆ¡P‰t…Ûáf$rÆëíÖqÜ‹yàY2U'M·'¯UÈÁÁà à€rЧ¦é°éVímlÒ `äà VÀùŒ„$¹ÀÂ…Qr€ (¢€ (¢€2üK©M£xWWÕ-Ö6žÊÊkˆÖ@J–D,Á¢³ÿ¶¯´k‰muÉ-.ŸìSßÅ=¤f]”# d!Oï†.Ëgfܶƭ¦Ã¬è×Ú]ÃH°^ÛÉo#F@`®¥IgÐÖ[xN ˆ$þÐÔo¯îÎÏ*ö(Io±ÖEòÂ" ÄˆŽr§qU ¹U@ËÓ|·¬é¶úM”—vó¥ÊÝ¥…ÚÙãk|1u”ÆÉ¶|…Ï c!€¹ôÕµ:êò ),7™$žî›VA$¤åü̃lc»€HlIeàø¬¯ÿ´F¯©K¨5ÃM-ÔžNéQ’hŠˆÂ"Þ.B†ùxa“™4Ÿ Á¤j6×1j7ÓCghöVv“y^]´,c;TªlìÇ’IÍG{ãÃYÓté'Æ¢‘5½Äw02¿˜ÅcÂyžk8ù• ó’@ Ex¼§Ï¥Á©Cew%­íÂ[iÒ mÀ¿vÝ2áN¸—aÏËß-\¿ðœÚ‹\®£}o ·p^ÜZCåçšFbÈ\q`…e^™$šÿð…BbÔ ÕïšïRØ··m©{ˆ‘YV'S–ˇnJn<Û@¼Þ<‚ÊúîÞóO¾ÿGß,ûcˆ}Žá·’Fù§~ß´/ú°Iäljú¯%7vv©=Ệ+›iáFxÿÒ¬Õ”º»'1]òîûÿyH7ÃÍ!¼‚»† ›)¬|´RCo X¶±à’y-œäbÅß‚´ÛÍfMRIîÄïp·U×nåkVî粋¿ñ?¨À^¥ñÖ+‹Ë >;S´»†/³ à”̆ê($Û²S±¿x0%ÙË>VÄ—ßtýYâÔc’;qå%¬’[ÀÈHàÉ$Â6*gQÃs€¬¹°¾²S¶§©<–ÿg°Œ[l”IˆPˆ÷1F‚,y…ó·æÝ“›Áñ-Ô—Ðjú””ŽYïSÉ.ÀÅ n»Z2˜o³ÄÇ AÁ‘@üC¯Ï.‘ Ï¡5ÜÑë ±Éd± ÌF & Ÿ ò×;ÇÝ-»’ÿÇÚ&•¯\é:„¿g’Þ'•¤ób“!b37îÑÚUÂ9díà’Wvĺ=¼­¥óÿIJ_6 Ò—,|§‹çfË7Ë#“’@$žs–þ‹íñÜÁ«êVñCq=ܱù&8g•$WŒ¹9šFÃ1\ž˜P;߈šv›§Y]ßYÏl×ÛšÖ)®ì×ΉB“*ÈgòŠüê߸ç!HŽ¢ÂúßSÓ­¯ìäó-n¢I¡}¤nF©ÁädÖ¹ûZÙþþËR¾µÔžY¥›P… LeÙænCˆgÊ‹%P¦s–bÝ$­µ¼P!¤hL’3±c–bKrI=èJ(¢€ (¢€ (¢€ æ5o øQÕ&»½Ð´Ë«™6ïškHävÀdIà(ü¸ìÝ=fÝsrýú^߯ëÓœ:cG:<áN1áÛý/oöO·¯n¹ùñ¼-h Ò&†Öhm­ãÔo’8RÓ*Š.¥ H1Ó»n¾ùüsüý}ú÷ÏÏÆøv$°»wÙŽ§–®Òåì¯óÞÍo&oùþÿÏÿ§Ç†Þ(„†B»Ë1M™,ìÜ ŸïzÓ>ËkÿëÆc#ì^¹mÔüYy§XéqK©Dïœ,mÜvε¹YHðq¸|­’  šã¯íuhI%‹i=¼s-ŒÖ3ZM-´¥˜¢Í,¤•eO n‰·e\–?+DkI›v5 •Îq…åÎî™NÛ‡_î.sónÒfÝBåsœacùs»¦S¶á×û‹œüÛ¹Ëïj3M¨ÁiqäÛ¬wsnÛåÝÎŒ¤îxØL­žAûFX©¼!£6“öÂ-o- —`Xn~ÌŸ0Ý–Û¨ATn$±Û‚Q Ö´™·cP¹\çXþ\îé”í¸uþâç?6á­&mØÔ.W9Æ?—;ºe;n¸¹ÏͺÕ äü;3\ø¿Y™Y¤Óô÷%1‚H˜ñ†a£îz×ewÿ“ÿ×FþuÅøa·ø«V}Û÷iÚqÝ»vx›œîlýw7Ôõ®Òïþ?'ÿ®üé±"¥¨j¶šg–. ÌògdpA$Ò1“±¶Ñ Æ`;Š»X·qÝéúÜÚ¥½Œ×ésm»ÃƲFci7ÎÊ¥OšAäTprv¡šðʳÁÈ,ŠBŒåHb2)õæž"Ô-ÿá,µ¸º¹¶²½‚{R™¹± ƒr4‰3;yÁ°Òñ(U”s–ͨ<%wc£hðYéÀFê°ÂcOµH’[3Fø HÌ‹p ±Ûó°$4XG Õ[ øµwžuUžXpÝtí•8öÅq§†&¿¸·’ÛH¼±¶Â+[[o±§Ø¥ó$-!fånÝß[åÉU×h“ÙiÒÅp›¯nå ü¯q#©ãÕXÆ€4ë›×ÿäkðŸý}Üé4•ÒW7¯ÿÈ×á?úû¸ÿÒi(@t•¡K$W^ òätΫÎÖ#?è–µ£Yz7ü}kÿöÿÛKZ_k¹ÿŸ‰ï³GÚîçâ_ûìÔ4P3.÷Æ–ÖQÞ9›Q˜ZG,’46ò´»R΢\y{†Ò1»ï §ž+kíw?óñ/ýökÌŽ½bþ——ww'N}>ÚæBÔÇ;yE#™C†c´ciÃd¸èI ÞµäÄX\ÅuçÝÉ>©k,I-Ì,¢8QËoÜ»áÀpLCå\±ïÚîçâ_ûìÑö»Ÿùø—þû5æRøVö[T—IÙc“eekd²¹" ’Í› .6H ! ¸ (ïtØ%µÒí-çw’h DwyL¬ÌK7÷ÀÏ\ @h}®çþ~%ÿ¾Ís~?¼º×qs76r)ùÏ ŒùVõs?ä@×?ëÑè[ÒQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*/ _[éøÂþòO.Ö×Pó¦}¤íE²·,p98ô©j/ XÛêpøÂÂò?2ÖëPòfMÄnF²· 29ô§ÄÍ |Q6’<ÿXG¦YÈ’<¥Á¸a²6•–UTù_ËGoÈ¿# ÙÛ¾;¿i¶íeåÁ}'Ÿv-åˆØÜ$ñ²+ˆ ~c)1.>ñÏÈEGªxFû]Ón¬u}f;„óCfégå´o$O›.8Ga…¯ÌÇoÝÙcTð¼×ž þÜ´¿Ž È’n%·2F­¹R\RÀ­Ó€\$dU’\—Å:4K4—›cŠ+¹œùNp–Î#œôþ {öȨî|_¡Ú=ÒÏw$ij’´“y|£å©i$Û±ÝB¾QIa±øùN2ï>éןÚßk»Ž÷p¶ÿ:/½Îÿ´^|ÝWí}ÄÅ;¿†–׫äÓaÉxVäih×j÷ mó–Ë 2¶BRÄܸþ5ÐRUOµNÊÑ ÌÉg3B‘uYZ@›2crˆR£p;y©.|_¡Ú=ÒÏw$ij’´“y|£å©i$Û±ÝB¾QIa±øùN2õŸ êšÇˆutK˜-tGJ‚Æåš2Iûâ2$[”|̬2 ;¿†–׫äÓaÉxVäih×j÷ mó–Ë 2¶BRÄÜÖišÕ–¯æ‹Vd‹á¹¶’ÞE8m’*¶Ó†±‚U€9Ÿ™åx†÷Vó³ö›H-¼­¿wÊy›vsÎ|ìcmïž4(¢Š(¢Š(?]Ôÿ±<=©êÞOöIn|­ÛwìBÛsƒŒãÁªvÚåÌ7ZkV1ÚÝýžK¨–ÊW»YbB¡öâ5}ê]>]¼ï]¥Žà·5Ý3ûoÃÚž“çy?n´–ÛÍÛ»fô+»ÆsŒŠÇ»ðµæ­Òjúœßy^D ohb#.’:âÇ̸Ìy¶ö°ùŽÛ†öeÜx/Ûؾð/Û|C.­ý£³Ì»KŸ+ÈÎ6½‹mÎïúqÆqÿ-?Ùù€.jÞ4Óôȧ>UÛÏÄ14/k4lêó¤,ñ™˜)ÝîÎTgæ\È<_¦«N%3–IDi—ÎAŠ) xD{×T‚å†m£Ÿƒá§“~.…õŠÉAbž=;lóȳÃ2Iu'™ûöÝî !mîARx±¨|>þѾ“Qº›J¼¾’V­þ—çÛ ÐÛÆûb26ÊU·p”†ûÔ©â_;MÒçÓ¤ŽQ©Ü¡¹ŽÚKÅU1I(qGt€ˆñò‘Û³ƒ¡?ˆtËKùlîç’ÕãBæ[˜$Šo;fe± ðœFÚÐ#Š}‘èò‰yJ<À-ä„ U_õ™ùW`:s÷¾Ñ¯KÎҤķoºÒüë‰|إʖ_0y¯›€›GȈ¹ã4¸|[¥-ºLË©îÊ.çÏm a—¼ Ü ¾Ý °ÉÅlA<7Vñ\[ËÐJã’6 ®¤dGÎk‡“áÂËolf¸Ónî y¶C§µÍ”) Œ†—1ä¦Ð…Ý {K 4Óôëk(Žc·‰"S±S!@å@tè Ø@(¢Š(¢Š(¢Š+6ë›—ïÐzöü}^œáô«6ë›—ïÐzöü}^œáÓ"ëïŸÇ?Ï×߯|üü‡‡tû³œçS¿ç9ÿ—¹}Ïó5×õ÷ÏãŸçëï×¾~~CÇ:}ÙÎs©ßóœÿËܾçùš—°Ñ¯QÚÿÇŒ_ïÍÿ£¤©*;_øñ‹ýù¿ôt”€—À_êµÿû Éÿ¢ã¢ª×ÿì/'þ‹ŽŠÐ’[Ÿõ«ÿ\ÓÿAž~Øt[u°ž+{–²…RYb2ªæ5í ¹àœs×zV…ÏúÕÿ®iÿ Š«ökOùð±ÿÀHÿøšÌ£•o kÏ»~µ¤6ìîΈs»9ýï1ÿï¶õ47†5çÝ¿ZÒvwgD9Ýœþ÷¿˜ÿ÷Ûzšê¾Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâiÜ,r­áy÷oÖ´†ÝÙÑÎwg?½ïæ?ýöÞ¦†ðƼû·ëZCnÎìè€ç;³ŸÞ÷óþûoS]WÙ­?çÂÇÿ#ÿâhû5§üøXÿà$üM «xc^}Ûõ­!·gvt@sÙÏï{ùÿ}·©¡¼1¯>íúÖÛ³»: 9Îìç÷½üÇÿ¾ÛÔ×UökOùð±ÿÀHÿøš>Íiÿ>?ø ÿEÂÇ*ÞןvýkHmÙÝçvsûÞþcÿßmêho kÏ»~µ¤6ìîΈs»9ýï1ÿï¶õ5Õ}šÓþ|,ð?þ&³ZÏ…þGÿÄÑp±¡èwÚ~©¨j:Ž¥íÅäpÆLV¾HQüq½³þÝ*9¬<[4òKÿ .ž›Ø¶ÕÒNOA™³[¿f´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4Ïÿeø·þ†{üÿöÚ?²ü[ÿC=þ ûmtf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4\û/Å¿ô3Øÿà§ÿ¶Ñý—âßúìðSÿÛk û5§üøXÿà$üMf´ÿŸ üÿ‰¢àsÿÙ~-ÿ¡žÇÿ?ý¶ì¿ÿÐÏcÿ‚ŸþÛ]Ù­?çÂÇÿ#ÿâhû5§üøXÿà$üMŸþËñoý ö?ø)ÿí´Ø|=¬Ë­i·ú¦¹mt–2<‰V"KFÉ÷¼Ãýìôí]Ù­?çÂÇÿ#ÿâhû5§üøXÿà$üMJçî4}q/oeÓ5»KX.®>Ðc“O2°o*8ÈÝæŒDAÔõ­Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš@sÿÙ~-ÿ¡žÇÿ?ý¶ì¿ÿÐÏcÿ‚ŸþÛ]Ù­?çÂÇÿ#ÿâhû5§üøXÿà$üM;Ïÿeø·þ†{üÿöÚ?²ü[ÿC=þ ûmtf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4\û/Å¿ô3Øÿà§ÿ¶Ñý—âßúìðSÿÛk û5§üøXÿà$üMf´ÿŸ üÿ‰¢àsÿÙ~-ÿ¡žÇÿ?ý¶ªjžñ.¯¥Üé×~&³6÷1˜Ü.”AÁô>muf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4\ (¨þÍiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâih”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”Tf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4h”žžVñeÅıÃZ˜y$‘‚ª(³¶$’xsLû5§üøXÿà$üMCáí.ÛVÓük¤Ê¾Mµåë[¿ÙÕPª½•º’£“Û­TDÍØ|Qm¼ÿhZ]éP24\j"IÑT³ó„(-¶@€ÇoÈût/5m7NIÞûP´µHfžeA»BÙ<`@'© ÇmRÖ®­WÄ0i¦ÒÉÝÕmÙ¤ŒÑ<$º:â4Ù#þï2d°ùð§~<þ½}6ÝÞîKÝJÚôJ[ù`y¡Ž) ‰ ÄcÌC±üÖÀ ÈÒàäŠÐk>)Ót½óRŠêÒéá²kÈ`K•áDo"í<ðË@<+pjÄ~%ÐfÒæÕ"Öô×Óá}’Ý­Ò‘¸áŸ8æ^ î=k“ONšf½GcÖ£¢=„ e–S’Is$¥“s²–š<·V(NÕáEÏøB÷VñÕ`xØD–¦(ä¶­#F.Õ– Z1‹¥ ®s°©ÐI.»£Ãö7U±ûCbÝpƒí9Æ<¾~|î^™ûÃÖ©Þø§M¶ñ¡Eui>¡upb–ÙnWÍDK½““‘G8ûàç±äõëW>“J³h sÚOu{¸Úi^GwfÚë>bƒæà~ìªì[ø{X·Ö4ضX¶™eªÝê_hûC‰ŸÏ[“Êòö­qŒï9 œ àvQEQEQEG<ðÚÛËqq,pÁ’I*¢’I<9¬x|Qm¼ÿhZ]éP24\j"IÑT³ó„(-¶@€ÇoÈût5m6gF¾ÒîE‚öÞKy2u*HÈ#8>†±ÛGÔµ««Uñ i´²wu[viã4O .ޏ6Hÿ»Ì™,>|)Þ±y«iºrN÷Ú…¥ª@ˆó4ó*ÕØªÉà3=H V~³â7KÐo5(®­.ž&¼†¹PnFò.ÓÏ ±9±ç¹ùü zúm»½Ü—º•µè”<·òÀóCRAˆÇ˜‡cù­€A‘¥Àɧ€'M3^#±ŽëQÑÂ2Ë)ŠI$¹’@ÒɹÙKM[«'jð ¬Äº Ú\Ú¤ZÞšú|/²[µºC73çüËÁ=Ç­I.»£Ãö7U±ûCbÝpƒí9Æ<¾~|î^™ûÃÖ¹¿øB÷VñÕ`xØD–¦(ä¶­#F.Õ– Z1‹¥ ®s°©Ö^±à]jçÃ’iVmŽ{Iãò¯w[M+ÈîìÀ;]gÌP|ÜÝ’P²÷Å:m·ˆ´í +«Iõ «ƒ¶Ër¾l ’]윜|Š9Çß=‹-nGQ³—ËíoEœ[¤¼sü£Žv»p3Âô÷ðö±o¬i±l±m2ËU»Ô¾Ñö‡?ž·'•åíZãÞr8À¯ªø"òúçÄ·]AšÎûoÞá-䶆`1òH­l/«sµ£é#ñ.ƒ6—6©·¦¾Ÿ ì–ínÄÇ ùÀ?2ðOqëUì¼_ ß]j6ñjvìK)iÓrùËóªÛ"ç ýN¡áÍoS¼—XšÎÆ=Oý-£ƒU•¹ˆ\ba/‘ó1ûC/–Ñ” r[;h¸ðޱ6©XOyßÛ%´¾{Ï5í¤’ân mO–¯ö|ùŠÙBü!Û’ÐMâÏ ÛÙÛ^Mâ *;[­ßg™ïc .Ó†ÚÄá°x8é[Çø·Zf¹§*A讄ñ‹Ùîß|Ÿe L³|ÏòÛœ.2ªÁc¹á­6mºF—pÑ´öVPÛÈÑ’T² RF@8Èô©EPEPEPEPY·\Ü¿~ƒ×·ãëúôç¥\çˆõ[mÖçP¼Ýöx²e`²>Ä ¼íNp7xàdž3I:ûçñÏóõ÷ëß??!áÃ>ìç9ÔïùÎåî_süÍCcñEñ® ºɸšÞݤwΡ22\É$à¼ñÖ²~ì½øy¦Ý^CÕÌÏ;Ë=Ä+$’1žBK3I÷&¥Œìê;_øñ‹ýù¿ôt”}šÓþ|,ð?þ&¤à""¤hˆ0©P2OqÔš@/€¿Õkÿö“ÿEÇEYðeÌsÙjQÇn‘4Œ±ÈëŒÊÄ+nVß÷é¹)´ë¿®«-µò³Ïи{P¶Ñ*&øÈiA%dÊÆJ6üdnr3ÓúÓj “Ï~¢Š-c‚íÄð»$a0:?œ>ÍHÎÖ=.îâúì! g8‚BЮ ÒN=± üsV¿³,?çÊÛþý/øW•q§¼“é¶?ØWwš‹Ac—ÄR[F$;Qš1µ¡3c9o'oùí,`ûÍ6ÞÓÊÓím¢Ky<ÍÙÆå)ƒÏÊ9'ÞÆ€ý™aÿ>Vß÷éÂìËùò¶ÿ¿KþjŠUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áGöe‡üù[ߥÿ µEUþ̰ÿŸ+oûô¿áOð¥ÍžkâûÉÊÛÙZjiJ¡Â"ÙÛ³ž€žOY—~ЯîžêóEÓ®nåšÕÛ$Œž…4ì&ŽËLÖ¬µ4Z´ë$X/ Í´–ò(9Ãl‘U¶œ0 Œ¬È8¸fU¸H“{£8"6+… ¶0Ì0 ÉçÁÇÂáú4ü‹ÿ‰£þÿ й¤à _üM>aXïdÕ-"¸»·/#Oin·3GNì#báH bLn6®O9±Ë+ÌŠ$'ØÛ£eí ò’0à 9Èêuÿ†?è\Ò?ð/þ&øCü1ÿBæ‘ÿ€1ñ4sŽ÷IÔ¡ÖtkRÝdX/mã¸d0WPÀ3ƒêjåy·ü!þÿ¡sHÿÀ¿øš?áðÇý šGþÅÿÄÑÌ=&ŠóoøCü1ÿBæ‘ÿ€1ñ4Âáú4ü‹ÿ‰£˜,zMæßð‡øcþ…Í#ÿbÿâhÿ„?Ãô.iøÿG0Xôš+Í¿áðÇý šGþÅÿÄÑÿ†?è\Ò?ð/þ&Ž`±è7÷Öúfsy'—kkÍ3í'j(%Ž'•_LÖ¬µ4Z´ë$X/ Í´–ò(9Ãl‘U¶œ0 Œ¬È8á¿áðÇý šGþÅÿÄÑÿ†?è\Ò?ð/þ&Ž`±è¦e[„€‰7º3‚#b¸RËcüÜžqœW“T´Šâîܼ=¥ºÜÍq;°‹… (%‰1¸Ú¹û-~}>ðÑÝM´¾N™ö¸zjW’Ë Í×X×b½/’î7ã+öžñaç+xWt÷±^ï}ž€]¥\J•¥cn2·³JÜW¾‰¶£zåÎ{Cž›´°¥·¹3uÖ5دM Û—•véž÷߈Áྞ§éàzxÕZWDq]åjJüêÍä^Öq7/>szLüÕ»qÍ`ºëì[)krñyÓ3ëØóš‡Æ g›O „{NŒYµ O[@ÆÜ]$D–’¦SuIÑ·+ž¼×q6õÏœî‹;7xÔÜ€›®±®Å~h¦Ü½çÄ õ˜â,;ž.³™”6í•íy=<÷4*m«b9l9ætçnQÒ#që‰Éy÷K³VSPÙXàfë¬k±[c‰·.«ì`)`hÐA:šq|z³±óåÕ«ÔÎÌYŠ6ÑQo],-;_OS:–zÝS9ŸkCÕlúó¥4Î-\÷nºÆ·ægRâªÒ»¬R9•çtv©ï1AêË>%ç–ÝMXÝÍ—©M5=ud¶~FJYpVÙû¬T΃yék6rÂËPÍçtY<_fª Y©o¼ê_Ã'T—,AéÌ>3Ï›SÏÌì÷×Bô›B¨6 ‚ƒ~а»(uÝÕË01`¼þ‚LØ»m»1nh¤Îóþh¼L%å»+¥ÝÀÅ7ºª).=JbäZbä)‹¦.B˜¹YYãœö‡;7tâÌÜ€›efóVifu:ïŽÏzç².â”°÷Ï@efSÌî‡?6ôÞ¿rnHæÍIèœÔ;ŸÒûìJI‚i¡˜FVe9Ïè2 iܪnå % ÜðIš9Phö9â²ô“}€rçÞN~sôª=Ì&ŽÍªÓ{‡“Ͻ©—î´æt^MaÖëRIä·î¸ Þóá 3á 3á 3á 3á 3á 3á 3áQÎj?W-Á‡#raƒraƒraƒraƒsæ7­Á‡ Á‡ Á‡ ¿¸r76übÃOÞT5>åCsÆ$6 åÃ[Ö@?ÿÄ.2 !341"$0#@%ABÿÚàߨŸ¸ÚPê&]ÄŠD븑K¨•K¨™wK¸ÚV:‘Z]Ì«¹•w2®æUÜÊ»™Ws*îe]Ì«¹•w2®æUÜÊ»™Ws*îe]Ì«¹•w2®æUÜÊ»™Ws*îe]Ì«¹•5âÀ4Œ£$hqÖ(°!ûU–G¬tG7œ†Ój³†E‡QaÔXuE‡QaÔXuE‡QaÔXuE‡QaÔXuE‡QaÔXuE‡QaÔXuE‡QHû óÑFÖëQvu§éÿ®’öZ~º-‹E¢Ñh´Z-‹E¢Ñh´Z-‹E¢Ñh´Z-Z+l5ö^ËÙ9Òs“šû/eì½—²g“ÍÌ8³Ù, k”r®M}2ƒ»(:ä×Ó&ºÊsä26Œ´e£)8âûãÌkQ2N²N²N²N²Nš$zúNÚg`F[vAl‚Ù² dÈ-[ º»’2Û¼Æ+ÖbKKKKK·‰vñ.Þ%ÛÄ»x–ÖÖÖÓôà»õ“p¾u'zÞãu Òî=Mw¦»SU~5æñŒÄÈp„gÅÿ£«øCíU]ŠãlدæqÇ?sf3Eïè¡Ê¹W*å\«•r®UÊ«B?QöAÅA𺯡£Âª|7n4VÚnžu†J¡¬@’õu}«[5 ®‡Làj×ë>¶èX¡”.½]Ý®‡nutÀÐô×}¦•°E[Ó}?h–L1ÑO„Ñý„!biÇ'%½£%——««øCíXß¶³ÏŽÃ;¿#¾È®8-±Ódtã‚Ù²)™›Ô´Œà «^öAíf÷Óü]U>xº¦îó©Gú:¿„>Õ¶Ö5~2+lÜÿýÿoõ†[JK±‹™õê1´Ùf, H¿aTøeâê£? KH 9Æpõu}«rh¬šBvÕX¬#;@l£Eý—·éì½—²ö^ËÛôÕUû ©Éòö´,Ûn;vüUO†^.¨ìä²h³3zº¿„>ÕŽMµ÷욟6I‹´¹&Y&Y6X°²,,“.{ ë$Ë$ë$Ú=‚ªR—Ëiúñý¬uVŽ—¾²©ðËÅÕw l?_Wð‡Ú¹ɪ³0æ¦8=ÀF/"B.FaEOòÞÍÚù›eŸ·ù“ÑWì'QÍ_äàÒÞÅ.8æH˜Î"Ëúz¿„>Õ“jÚ0æH+ ˜rq5šß!ž»ef³ËmI&9¾¯áh­ŠË³¦³¦dê¾å-rk|…÷³¬¥šn&’œöÇtb޸ࣳ©V¯'Ĭ±+,J˲Ĭ±+*Ÿ^ÖÇ cþSasÿ×iX5_×Õü/}E/Üök»r$vq™Úaµ$á°îÁ·®Âh=Ìú²Õ–¬µe«-YjËVZ²Õ•O¯?W ‰TîRƒ÷Á™›×Õü:P9;ÖŒa‰)u{c `Î$íËöƒ©±.r)öÐêhÜ‹‘FNµZ­V«UªÕjµZ­UO¯/ê/' _Wði†Í(2sS®yƨbØÂOXNÑéõ#¼¿¨îrSŒcý_ÃI°^rC#92ɬÖ@5‘aöÌöÈD#ýõ>¼¿ª4¢J±×Õü›‹aPÇþLp&™0DÉà%Æà ŒcþúŸ^_‡T¬Ô…v¾ÁXeêê‘,ÓÎúbåÁ¦(´i‰ë ßU„)¡Oëž/1ÌF˿ѭNßdµ§üs§–•þa.a.Q&(Ýo‚ßÕ,Îi6;Ê[c½å-!5Ø\EÜõ̤¼`ÎÑþðÅ÷>RþJëc™YÍÅî¯Be…NfºçôÅ‹ rª¬Êë.²k5Yw®â5ÜF»ˆ×qî#]Äk¸w®â5ÜF»ˆ×qî#]Äk¸w®â5ÜF»ˆÔܬñ‘^{le±–Æ[le±–Æ[leµ–Æ[le±–Æ[le±–Æ[vÆ[le±¶’CSé.Vwæe#É¡cÚhÉ›S'ݰ{¤Ä³c“&Êɲ²l¬›+&Êɲ²l¬›+&Êɲ²l¬›+&Êɲ²l¬›+&Êɲ²l¬›+&Êɰ²l¬›+&Êɰ²l¬›+&Êɲ²l¬›+&Êɲ²l¬›+&ÊÿÄ&1Q 0@!2AB‘ÿÚ?«-ʲU–åYnR÷)Ërœ÷)Ïrœ÷)Ïrœ÷)Ïrœ÷)Ïrœ÷)Ïrœ÷)Ïrœ÷0Mjü $‘¶—°ºç­û•7ö> N$˃–.äÔwø$5Ì?'ã’ÓÀÃãþ‹áÞÓ£ ’ÅŸÏéyFzvc§FLôå©A /n毭uÊ‚Fñú$’I$“Éiá­¡p’ ‚ ‚ ‚ ‚.Eȹ"ä\‹‘r.Eȹ"ä\‹‘r.EȹÿÄ'R0AQ !1ñ"@BÿÚ?•mп2ŒItbK£>e þI¶ñ&ÚÄ›km¬I¶±&ÚÄ›km¬I¶±&ÚÄ›km¬I¶±&ÚÄ«ÙOzì0ÆýÛŒ-´Dwúa†êŸ I§U8’©ÇE†r¦ØðÝÊl'ôWé4˜é:F:FQMô誯H¢¥jžj*¥»TßM¼‰ü“ðZVžÕB£} wÇÚyü¿}$ö=-û ½ÛŒ0Ã(Ê0à 0à ܚ«Üšª3Œ½‰­MÕ·åùuÔŒuGPŠ8ãŽ8ãŽ8ãŽDUÜ„¼—’òB^HUrB^HkÉ y!/$5䄼—’òC^HkÉ y!¯$5äÿÄE!13‘"2AQq’ 4ar¡Á#0B‚$@CRb±Ñsá¢âDSc“ÂðÿÚ?‰“XÖ:ˆ"C²[S 7=Ãâ’ü_^Å~7ŠÒÏx¯ÇæªÏ`Q–w¿Å~7ŠˆàéiWµ^¿züUëñW¯Å^¿züUëñW¯Å^¿züUëñW¯Å^¿züUëñW¯Å^¿züUëñW¯Å^¿züUëñW¯Å^¿züPwªAyq6´"}R3Ü ¬§€SÌÂ5®£þ•K3 æ$º—úU,Ä7!ö/g’†K{Sš2F¾[€AÞ§Oa†UƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈUƒÈÉÈT­léÊHAk8Õв´&$~ÿ9 ïS¢'¿¡s1ÅK0Jg6ïé< ë!œ›N*ÓRÒŸ!Hö¯‹ŒŠ#R“•t‚™wZÇ„©¥1TÔØf:9Õ›Önƒ÷RØ¢©0ÈÍZ­V«Uª¦ÕÙm©šL_‰´&Ðl#Uhç¡Ã{«pZ£ª0Z£ªÜ«pZ­Áj·ìÅQ¯EL‰¼YÀ¡C:êì9æ(;¦µââµâb¯"âµââ¯"âµââµâbµââµâb¯"â¯"â¯bó+ؼÊö/2™|Bx¬­Ë"C‰ Ъ¬·(êBŽYheQˆ]b2ë—XŒ›ÁœNÚɳïcá¶D´U¿ÍKÖI,;Jp>áýÕõùÙ87KiPŽpU­*é-w¥8g*ªZN«º­q; ¬ý6¯j×¹ÝWQ0WQ0WQ0WQ0WQ0WQ0WQ0WQ0WQ0YAt0t…¡]3•:ŒF‹)XšöÁ"'b¸ÉðEͧb¸ÉðMà™ 5M± œþ_ÊŒN&îʼ•3Æ}Šm„ZvÈ Ð8Ž›û«êò)¥ó•+FÅ)<èèÍiMµNŶ[ä´I5NÄHÌþ’œúÀm³ ÑšKšÞÅD8Ï‚.¬4[RFgô•N˜áÒÊIØï$&ûDì*,¥[Z›23Fœ|ëv{‡÷WÕäSFs6iTT:zVüâõ¬Ñ–ª¾øuT©OÞeNÜgà†3m% ÷Äžèp¢Äkš+hÝ4ç3@>†ðE(µÍÐø¶ ":“·û‡÷WÕäSG–éU%‰˜¥ä‡IÔ¨¨µ§ä(¹“«ÔÜ>JtY. a¬?%Xe²@QekQ¸-FൂÔn Q¸-Fಎðô³1æ¡Ñl!kW"ùJ“'-ɧ±7‚(!œ£G6l©5°çGdýÃû«êò)žÎž– ìùz)JµûŠºT© ª'³¹™m©NGªqRdÛÁH4ïµR`Ù.–UFÙù!Eàhø§8‘v?tãùt°Y?÷?õ*&b#×ÖZæO Ô8‘r˜€ÐCÑ ¼A #æÍT憅Ó»Ü?º¾¯"™B n•sÚ¡MÔ´­ù!ÅJF7FõEŸýO%S*¥l”N>HæšÒÔ=›;Q˜hp*¶ O§”w‡¡ÝÀ¢ÒVMý²ïÛÑGò¸Þ©R*¡¹š’ÙV†rT¶ËÜ?º¾¯"˜b‡kU%6m+8­6šnf£ûŠöZb¥’0ÛƒÝ%KÖˆ-š.vW0© ´Ô*ìMŠü´ÈÝàËøR¾†Tdgä„£‘£$êþ¤¡þ˜dxÿDFŸÏ4Þ Àºjd&iÉÓìŸYsk¬M;í¯æ±HEÎ|úoȦæX]sP³ u+>Hq@¶„«*4íÎ!8S4†’‰ÇÉ P\_ù€@ŒÚ{%¹W’™TAHd³k‘'#mFÔYêÏ¢µ:ëDJ^œ£¼=óopseR–b/‡òžìÔRIªÊ†*Yˆ³ù*›!½µJÀ›Á:“i ʦ&ÙÖlìFœ’ Ñ-ñHÍ Ü7 UYÓu}^E0º- ;‹© ÛòTiIQvU'ï%Eþç’p¡IDãä©·6>i95H­hb»Q£ƒ´¢ÙÃ虪Ëf3>†QÞ—Nš*ÉÄ’´OÃÑ¢*ì¶Ô'¤g)º¤rxt¶£†î_Ý_W‘@f³²8(Z4$l܆µ\:+€Ø£qiH¸HKl”N>IÔ¢=Šl7Fq¥"Ù•DLj$H¬«È„ Ö*ò—:ÍST3®¶{U \C«±VQ–ÏDyÕ7-`µ‚Ö X-`µ‚jœå?Ù2~‹Ú%Šë†{T8ïVŽ›û©Í‘Rh2îÿ•þßò¿ÙþSœæ9Äü¼ÔGoU@HiIDãä¨œš˜£®‰ ²VG35VF×nªHQÒªª;ÕY(b“á+*Z¡L4As °“Ø®!à®!à®!à®!à®!à®!àšˆx›TÚ4&ß…{Fé§2–¡l=7÷Q追äýa RÕ¤¢qòO¡eG±7í"5Ö@àªÊdÝÓM¥• ·'N4ÉÜ' UªÕjµZ­V«UªÔÔPyf—&¼Ñ™â©>aܪ7÷P`tÄíSs_dêrk[N³+ÉŽ5ò•!;¾lì^­D‡Vµ¼æŒ0×6[äµ¼¿‚·Þ5t\Ýi¯jé»Ü?º†r m©fâH~”ÐDçj¥qRCаâ¬8ªm„·­¸«*“!žÅaÅXqVU‡aÅXqVU‡aÅXqVU‡aÅXqME)½²ÍÕ&ËÍJ© þáýÔŸl'[3¹Kú„¦ý¥¯pGÛ´n©iGä«Ê*2‹FµÖ+Ù‚½òû‹QA ã›3Óš¬ 7{‡÷P"^éíSõ(S=¨}™ƒæŒ²}»Ö”š® @âA¢Ú•ÓJ»*þâÔPR` ÐÚÙL£q=•í3T;:oî¡ÁäÙ¢©K)­3F,Û9L#&D2ìSÍÄÁU&è“'IO4≠ú¿J&[e÷¢‚m*-³)ðØæ-uÌÎ^áýÔ#æÇ?êÓ~ÖÇJsÕó1UFf*B4>eYÛ%2jà¯[Vâ©0Ì}Á¨ ys½™AÐáФ=Ãû¨BcÛú·ÍKÔàÈ&“ÎJé•ö*¡·T6à«kmZ¬R b“@î E “bÂkà )èÖ†s(€¶OTaƆó¸;¦æ²ê¶hC‰ îͪ ¦¤É60&u’ŒßÏõ)þe9¿™N½jKâÅ6sqj-k‹Nõ úÁ¢òTW9<œI‹#j1’ÿæN°!·6[£{•ë9•ã1WŒÅk·¬ÜV³qTaHÕZ Ïf³@Qlûª‘ËZ[ÁÿÄ!Šê©Håíqà«Êgô¢sÖºj¬¥Ê^²GlÌýÁ¯«lûJ«(…)íCí°LÍP{Wµtœ ¸­u&H™'2+¬:'xZëåÐ -cŒgbÿ—Ä+`b¿Vc}ªò2¼…̯!s+È\Êò2¼…̯!s+È\Êò2¼…̯!s+È\Êò2¼…̯!s+È\Êò2¼…̯!s+È\ËB0€vN@â¬÷v+ŠÅb±X¬V+6+ŠÄjF‹fv.­_(À˜â‡ÙçVôɨŽ*Ä*C7 ;zêþ)®k;”?4éFx¯aWñ9•üNe™_ÄæWñ9•üNe™_ÄæWñ9•üNe™_ÄæWñ9•üNe™_ÄæWñ9•üNe™_ÄæWñ9•üLUüNe™_ÄæWñ1Wñ9•üNe™_ÄæWñ9•üLUüNe™_ÄæWñ9•üNeÿÄ)!1AQa±Áñq‘¡Ñð0á @ÿÚ?!fÉ!Ôƒ¡6Aãå(6>P¡Þ ¼Ò¡¶6††Èà‚3}\¯x‹]V®?³éVðšM×bË;–w,îYܳ¹grÎåË;–w,îYܳ¹grÎåË;–w,îYܳ¹grÎåË;– Ñ`ç…ÃÑ¢°?h›_d [AQ` ‹€™¯ÄUd®ˆÏÓ§â"î$€€ä^ÂG(-á 㟑‘ ÁØrŸFé>Ò}¤ú7Iôn“èÝ'ѺO£tŸFé>Ò}¤ú7Iôn“èÝ'ѺO£tŸFé>Ò}¤ú7Iôn“èÝ'ѺO£tŸFé>ÒŒc·"`€fˆ¸j¡^@íS,f¦ EDr² \@­ Á¹>†Ñ6‰´M¢mh›DÚ&Ñ6‰´M¢mh›DÚ&Ñ6‰´M¢mh›DÚ&Ñ6‰´¦yƒâsröyFú:JxÎf«ð{ªlÉ'ÂOlÌäÉ=0bßœ)ð~àþŽåäjX Ô#pKl[ŠczãÊg[½(Ulº45‚?šˆq ò€^ ü`ihb½á$‘‘ÂÌÃÐbô#àÝ$9ÿ áÀ&¡žפ%¬+æ½`ÿÞ_YœÄP¹ƒÖòü{SÎ\Šb"MÐÊv+x ‡6©[K@ Ò þ£¹yY ¤¤%@¼ BZ€: aG{ ü3’a6ˆè¥»¬Œ íˆO’ÀvÀ”èZ`ˆÈÈ1´@ |ƒèž`õ‡òz‘{O.aèñÌÌž›Ò Q,¼\o`±Ä_£¹yü”7F €!‘Žm0ðáB( q§“뼦hÙU5À LaÆPæ“~Y=‹1 ‡‘ñD¨Dˆ"W|yΟxæfO¹ïÒ A’:S'XSÀ xóƒú;—_€¢Çdî¢ÒÐ@ÚÙH " IቀH÷G¸F7t{£Ü#ÝááÞ&óí¶ü+eK÷ì >PÉpŽ(’s{J÷,ü¿õÌÏa9½"—)-ª‘ÄF ,@±€ýËÈ .k )ÆIù“:!n IËyg XƒuL6³Ò¡Q#[¾`“¿˜Cá‰KÇx@U¸ˆÀgèâVíù«ÚcNòÀ/yœH²Ä ¬L2#s‰bfF:žˆÈ† Å“Ôg؇ ½à+vžó#w  Ozæg°œÞˆÃDUtnÀ²!?Óܼœ²Mò£(!HZ¦>20†»›;#0è–<’½¸d /j‘1€„‚-3´!!˜.ü)Ø“±'bNĉ€€äE(Q@÷Êù®°¢€©G¸+&’Úq4 ÷Žf{¹ïÒ „„Xe˜V8Ÿ§¹yÔ)øåªßP• ‘è\ H„ ¸ ~B$P-W(x»FÔ}aJÐd@ ÀžªP>‰ÙožBÐ’6BåP)žŸèD P@€‡ð”@PqA§š¼Ï¤'磓dT œÐ…RT³7=㙞ÂsúBX6„IÈ×ôËÈ  —†ŒfÔ/TÇÆ@=gßÖñ­2Ìù!¨«ö®I€”™¾2‘Ôë#û Æ*!|Í„Þ+X çë¶Ž6NñšÈÁí.]€u†YØþ”÷®f{(É ‚ì u=fH^Sô÷/$•_ª3UùŦ>p@M ‚ €\„)È嵉ì\‘ÇH ¡/î8q&Rè€B8Óx²^˜´R%Zˆ¿7?)kè×ø}AA0jŽó¼H‚ŠÅ˜ -D$Ny& ×ƒÌ ï\ÌS:òMÛ¸.–O´ë)ì# ¹@?0Ý¿Gròq6ÀPŠÐ˜ii… ´6.AÛïõò–ÝÖ+3Ø9#±â¨X=”f'©ßœÞ¡+æ0DÐ"Ž’ºÃM.(†ÒPÄ8#1ñ‰ƒ¿çï¶üà)e¢ ÜÄV £Ñ¦-yœiâúðEŸ)›Ö{Ç3&ÂÜs‰<"8ߤW0V‹TØÍýó‚Rä¢ïôw/Â,á\@\üV‰XäZ—d•MŸQ·kòL7SÙ {$-ÔZ-£¬@ÏÊ^7Òa Ù B0J ûPQVj—öWm‹Ãy¥­D~~ûoÆiv= ¬+‹F ¸AE‹÷ür¹hkô…¢Bƒf]î±pSM$[ˆD?Gr2=Âà‘8,¤¾Ã @Eë5ªÄË‹‚ƒjBÁÉ,\ 4¨GPXi Ïd.Ç£ v@Ì@ ØÊ½!²D@wŠö„¬E¶!Òg‡h+0­¸:ü³ žµþú""9ŽpÑ“k+) 4À®ð0®¡÷^P’Ì`Ïèæª$º„ˆÜo ÆR––pO¦x'Ñ!È(Ä•5#³ 3Ø9"ƒ-Tšû¼Dt¿ˆ]—²! dà3¼<1(ñŽò¤ušÇœ>ÅCæoÂbƒ¨‚‘†I›;6vlìÙÙ³³g;Î@ˆNh è™Æª¢ˆ9e+àF µ ßû"9,ú;Ûÿ’ !ãðS0kÁ52C¦y2+ ˆ ƒ•J+¸Ûß$bo'œû@1Hè;Á.`%Œ— ÀNp“„œ$á' 8IÂNs¼àÀ Fa«LT0G@ÙÂ1 &0ðý Lb A,…D­“l„ +RÓ ÆH“EÖ5Mf‡Bb‚©šxë’Ôa9ãÆAæfOþwœöSŸÒ8ZdU  „¯ `æ·ý/ÂM‰%Õ+ix%Ž:Jý²ÍF<ÜfÚ‡b @€°d åX2Rð¾U4“‘'Ý*À»Ù4èìH‘"D‰$H‘"DƒQ¨Ôj5F£Q¨Ôj5F£Q¨ÿÄ&1 !aA0Q±áðq‘ÁñÿÚ?L›v2ÊJžá«àù)W¿¶Ûm¶ÛÐ7^­ô„!BtØšMéBt$¤a_¿±AÊqÇßAC¾‚b©~ú,NéY}º¿‚¯kK–-ËXÁ8V(<±éY}j…Õˆðѱ±åJËѱ²ÑT3´î,aå:V_U‚ÝŸ¬&•?#vŸãD2,F<½K/ª(Hb+?£ˆÖæt9´T©Qå©e•Ós‰ý-U#i}zŒhÔfQq”¥+LЛo}=Ù<…*!*¶Ø7]ד”¨‚èœJîyL¢Ë,²Ë2cÓ—‹“œ¼\˜™¶CR­hËÅov_6J2ìänI$’I$’I$™Ý‡¡³Ã8Çác„pÎ1Æ8ÇãcÿÄ)!1AaQðq‘¡±ÁÑñ á0@ÿÚ?ø¥ŠÈ ëw-Šôà£a…m¬_5 -ïŒA+EÃ\øKP»žÌ^úë[K.š¸]m˜+ [€,W.yqÌÑ€µÐÉ—]s+KAoŸâqÉSL˜¨^uŒ˜ÃW©ÊÎñûã÷;ÇîwÜï¹Þ?s¼~çxýÎñûã÷;ÇîwÜï¹Þ?s¼~çxýÎñûã÷;ÇîwÜï¹Þ?s¼~çxýÎñûã÷2I²}«µYq —€X ì‰:!¢ï¥|£2/´ÊÓZâÚ4p6bµ]¾œÃÖ @²Ö¶É ÍÃUØ X5Œ0ú·ëùH%vS\MDƒRšwé‰@Z.!»P, —šÒ…ãÿ¬ùóçÏŸ>|ùóçÏŸ>|ùóçÏŸ>|ùñ¦WE•a|OIš¬$šÊ]æñµA@e 4ÌU‡*?ì–…•ñ)DÇDð˜í#T¦:WÑš‚…ŠH¸ š‚êc2“8S…8S…8S…8S…8S…8S…8S…8S…8S…8S…8S…8S…8S…/°±¢Û˯˼íe~ïö-+GMºÿÙ†LFp/•±dTP´7À7¦uŠ2+ƒê§4ò/˜Ý»õ³ºÿÙRL«€XØAjºðDõU%ÁD[î9„8r««P×’P_óë¢Ü^ kP ¢†èšžðfœºµ¬l$X£E »ÓSx佇lj›¾N`"¬(lókÛKÖ^Ñeª½°— .æÐO‹“†‰°ŽÛXÓ4ÑÅ_-ìm¥Ë ïyÔáõ?3‡ÔüÎSóN‘Jz ˜B©©¥è(t¯zs,ž…B˜-ÎLs¬ýV~«?UŸªÏÕfw*I]Z0º¥9!¥«ug.3k²×F…E‹ 15k[øAÿxO‚~¥?BŸ¦OÓgé³ôÙs¢uÛ¦Ó|®§à¬§i`¿ Z¥xuÚ3¬z.€jS­$ÆðÃ&Ç1§±~d5ÒÑRišlGLºbŒ4Ï,[µÓ„°Þ$è’Fp¿ @Fi8tGñʶbª’êÀ]K·+½kõ‡Nm…XIà 0B‰vßWýNíüNýüNýüCdbá"rmEjS'&›Æm¹‚¤YÕɼ9m5¹AivÝèR16 O†ŸßµæhD ô¨êla·Ä{3²Œ0 (ߥ֊c`ÇŽ|0é®—eQU3 —ð®aÐ6Ýyöð1¡Àk`¥zë·1’T œ†Cj÷nËPÀÅY½ÏÐÿ3ô?Ìýó?CüÏÐÿ3ô?Ìýó?CüƯ§ù˜¸r ®2G³>!2‘HEŒ¾Ä^|b4—ž¸qKH %ª¾.¾røªÓ²Jã@4@m@ê¦æ®¯¨"’¬¥ /1…¾©.°¶¼•¶ýn—4hçBÍM>rÜãK ¥×²¹/ûv¼Í –š€O:›¤ÈZ–Èhu¢(K¥Þ aÞ 5캫 զѱ€è\Ô¨r¬ã­d#4K  ^LÝ´¸”L. ¸QNˆìÍÚ•«ÃÞ1)š-Óqâ ÌÅ-[E°5BIH[h "?ÕÒY1R%¢Úc©`W[¬ã–šÆ5…¦mE¾I€ŠuÐSÉl³£›Z÷ŽÓ" 6 ];hz¨Ñ_ÂËÕgXÏ@2õ¶  ‹wÛ— sÄj„ÙMÓÆºëýû^f„ÊÐÚ­ tN²¬Ø<†(«ÀCÊSn„ˆ]éWé((¢Ž•_AŽÓM Kc4Óålï0ßBd¼—wÝÐô?«%ÇH”šÕ³DGOêéø°JˆŽŠ ¡ p¤Ñ¡F8",n´ržNa(žJÆaþ¢#vLä_…‰üR¯›ø†ñký%ئHÑMi×=bxœÇt»TÕÒ´þý¯3Bcà%®€nÕ¹é{‚t4?’v^°†bCjŽ¥[e<)Fj]yйï=rÃOù:M .®­®Ðzaª¦P´Pcm& 0<ûö¼Í ‚ÃE‰(›½QÆZ­æY­EfÎC1%‰­ËÒmRž€­ wâ=7t†Ê)A»²‡~K5/5ŸM¥õ¥-ºjVûÌb(5êÙYưJ•à%XUçm›Ã Œ¨h]´ ¸€ðk!Öù|!XÇl,§95xë¥É@JkÕɉÜP)h´~úÔlB°Ó}3¯w¢¡ °^ƒ:ñ¦aµ&ÄŠÍÞüK#ÚRh§9ç0xÂÚ8±z¹ò×hÂm†Ávt¬{ãñ+!=µ¹¬”Ëôü¢â¸üB­xrÑ(³8”EÞµW=W„-u¯øv¼Í Ì)DW¢æÝ@ ®›k¤ï½a(Òvå,éykÃÕ®´ƒ(êToU9ƒWZù…´n^µìÇC P3Áu^ ˜+ÕNa¶º5Ô-®¸4ˆ×q;Ûêw·Ôïo©ÞßQ«¶ôƒP2•U-Ê$G7"/þ¤¶)©WÁÓ*hU[ˆžS!;æ¹?Ž^ãñ7*ÿh:2NRí‚ê´>"„è„¢Þˆuéÿ×™¡0v*,Ú: Åd+R)èºx@º`ñ%½¤p.5Ž!rá­>âRæB³“ôÏx·:رoS}Hj%eÙ%wis+h¢àú6yMqß‚¼&eÜ¥W¥COèé±$á4è7ZŒ-Qo}Þ]%Æ@Bü·˜ÁJŒ& Šñd™±æÉRTZ‘¼Û¼„³O¢ÖdÛyè½Ãâ,áé·´§^­z)>c[!+†ãþ¯3BcîŒÐ qzÞÄÈõNŽw£¯¯Ë9¶[x¥ Vl$Hh4\¬º·æÛ»±Áærãéu|+ÎöÍciÉ£š8Üé—:Haµqž!X©ñ:þ%Æÿ—Hë´Æx ˨tˆc½©Ô+ׯsqsöWñ Ü~&³†²ƒÎàƒ‘¢Ï+¨MÔ/fÞ† ¿ðíyš* =FÊ(s¬ 5è¶æïvwÞ°Ü±Ž…!{hûB†ƒ º…- ÁO=6gá º%bhñš³ ÝP·Ví/ ¿JŽÐ½ôêáòŠA ”XR…µ®¾ÓQ‘¤sê–=hÝ9‡]Èö‚5çüºCÖp [RêkDcGv¸X‹0€egœõ‡¢õ•Û¾H %E²>oø„ð‰iäL,òõ@U^ÕñR·a}Ç>Ȫ0J ‡J·Ð–µ ðtÕÅ÷íyš,¢ãAb’ÓzëáèZèiOxi°sý•”®©wjˆÕÔDаs’¡µVªXâÿ†"!ë‹Q«ºZ®y€ˆ¢FsµÁa–CKf¢S/æ-SR#`ƇÚhˆ€<פ ã$·”V¸¶!±z” ×U¾5ÚZ-B9ÿ=a¤t“§ø ‘ذ¬ë”+m_¸‹†D*Ý’_ViXЇ¹(B¢Š6t§§ñÉäán¿„%h€À@Õ‘úUÛþI(Ãu ûo ¡ÉÜeÎá× àA`ÝiÔâ­Wûö¼Í Ê4¥¥Ð­*ÛЩ@:ª%²áÓ7¢“#K­®B¼*ª˜@Žéü܇LçÏøByÇÌiÃÐ*J^#02£×(2)Y«ø×sÏøbú<̆íLRоqú£ƒw\Øçì^]nÁ=¹ÍˆQUìØ™Ê.8+&²aK¨f­f™æt@ÉDµ’ÌÄ” ‚©îÊmzÁ½©]acn¢šƒ÷!û+xP«S÷‘bŸZa¯z~Ê~Ú~Ú¥>h7´~ŒDR°ùçV1èªÄ{ s¸™|fÑıVÝ^^@Û"L-¨)x_(è9¢ƒßµæ!ƒ”8Ši±ŽÐI@À?˜˜ +zám­zà‚ÕÔ´„¨FúSY1ÄÙÁ«tM3ÍãÙ+tfFâŒkk&fªÕWBíõñ„•$69 G\c4· ±±°1cJ½oL6Ü”Ù:+ÅQ̰µÐ°*̼Ùå–•ZŸ7ŒÅM1b9"ñbâUþÿ}÷ß}í¾YI ,—ÄÉ¥0Q4…/ÙŒ’*.km®¡0±ËkRüê°ðé2§²£SyÑÑÔ¯ïÚó¤—ý3ÀYÞZt J)m±sŽ™Û"óâÒåÊÅô.4¢bêŸX²†JÀªVíù¬T%H/Ì+M3+Œâ4 4jèpéq¡¤kg@ UÄq/= õlb~ö~Ö~Ö~Ö~Ö~Ö~Ö~Ö~Ö~Â{o–l%.]ݨÖ(Ú…ëÀÀÐŽSÒ^…‚‡.ðJî…~÷˜ië`¢ïC}åî‹y¬ÖF+`ÊX«UV{‘³ïQ<¬Þž;L Íj©a³s W´½á²«š8àQ¿ æºJ—£æ k}äGõbEÚê–1ǬӅv7À`UuŸá×þ‰$’I/mòÏ}ø™®G(l†gv+”¾¦.,,áU‡ðíy†vJ> [>²ˆô¸XôòÛXMQQyY ¾Ž%a’Æ•xâõÿ‡k̳,"¼¦<¢þg»8AËbù@¥1½ÕáO%¥-›¼â­~ n`‚›Í7ݘ݀êãy=b,7Ú§‘Õ¸@Û£:7 £!¡ÈõŽbަ¿ø=·Ë=óâRì_†÷CA‹½qŒéQIjª(2Ôÿ‡kÌãó† íKHì’nœñ—ݗ”E¡•ù¥@ìJ"?/«­UXºù`à1²N—ìD<ƒ Âó‚4Ši‡Â¼"‘,¾¤/¸zLÖ‡[¯þmòÏ|ø‡j(riÖYîAYdÃz}EòXz]ÅCI‰.‡Lž¿ÝðîG|-âX6™¬Õêxa$îf–—ˆ¥ãB›%†¾"ýǾfc˜¯ /u®V¢ŸD3¬¢K+ËÕeÿà´j¸yÊ»™-ú!ٔĔA¦éÍCz"¥2´½ÚF¦5Ë;£WÁîÁ q‚˜pÍ|ÍH1}¬¶÷ý÷, è'Üý3ó?LüËÍ“«pW½¥JX i ¦iÇFš•‚Šd3Ðã]ræÐXç¡Oh²¼+P­T§s(ÑñV&ªï"ÊøŒkÔ}b'­TI­ÚýM-t«ªï:üÅëX3µ¤ºêõð˜ÉÕƒ/Ÿþ ’!R(‡B7 z:”iPñ+8‹.ü\SÉ +÷`ª t-)h_œV¶[ƨ{&F9Èæ¥µà…ÒÖæ y𿉖¬¼'Ðf‰›Þ€[áFÌk{žðÑÅá§:ïÁ5#…lלH;ZÙ»»å÷;Ëîw—Üï/¹Þßs¼¾çi}Îòûå÷;Kîw—Üï/¹Ú_s¼¾çy}ÎÒûå÷;Ëîv—Üïo¸ÌWØÁ^–Äô¡Õ®8È€íÉm;¹gÒwÉÛ'ÒwÉÛ'ÒwÉ}Uhw78~“¾Nù "˜ÞŒŸìEr8Bع€*b¢½5u‰£ Á½v<ýµ!‘5x ó(Ä Ñ׿(hu Ò: ŠãˆÌBèFÜ®%2•U r+¼‘‚ÈçLG´Qps¯(ÌUãä(¢Š(¢Š(¢Š(¢Š(¢‹¤RÞDËéE*R¾/ø£ŒÒ¤6HÐÀ±¥ü0ÌR©ÿÙfox-1.6.49/doc/screenshots/vorhour2.jpg0000644000175000017500000017773411637250333014753 00000000000000ÿØÿàJFIF``ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ»ï"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì¼gã9|'q¦Á™ã]¡ HöíT'’§9ÝúW7ÿ cRÿ¡^ü ‹ÿ×O«"¿ÅO+¨e1ÝäÑ–½ìvßóíýð+¦¡GžoÎÝY„Õg'É$—¥ÿSÄn¾/êQ¬—>HщU&t䎣ý]Uÿ…ã'ý Ñßõÿãu·ñîbÐôsH„Ý>J¨ù*µöá™mtíQl´×‹Å·ÚtPÙB¨†Á<#/'$lm¡0[žx®ˆÃâ¥É¿›%Jªm7±ÿ ¾Oú¢ÿ¿ëÿÆéáwIÿBü_÷ùøÝZÒìtý_Yñ5½æ—¦˜´¿YCh±YEÈÚðÆÊÛoRœÙúÒëF–º–ŽÇM¸2xµ­’KEH¡·WU6Ó€ª ç6T1 Aäöt/n_Åö¸ùªZ÷*ÿÂí“þ…ø¿ïòÿñº_ø]’пýþ_þ7Yóxcú†µãéLÚ}†r"0‰‚£;ÎëR(€.cÈù±T/<9á› û]‚îÿUÓ†¨¶6‚'Í´Åæbñ¶H'oÝ_ºO| TpïìþæO=NçAÿ ®OúEÿ—ÿÒÿÂê“þ€ßåÿãtºö‡a¯iúrHnb½°ðl7ñ̲)–?à)·99?6î8àãž~ÂÃG“áC^jíæþÜò…Õ½¢M)_ œº|¹Éë×·zJ¯Ëø±¹Ôîtðº$ÿ  _÷ùøÝ/ü.y?èýþ_þ7V¼Kà­ ¼Qsq,3Cos­ZiPÛX”!ß;I÷[î€;ó즧 ôÏí¯éÓÞ]¿Ûî5.$B«ÿìÊ¥nvò 5*ž«òþ}®Õok–ásIÿ@¿ïêÿñºQñ–OúÅÿWÿ×)â} HÐô½ÛÍ|ú…ý…½ã,<¥WWß‚0s¸.8äœñÓê¶:L§Â:( lÚ…™môÈ79wŸíçVÀ=õ5N… æ.zÉárIÿ@(¿ïêÿñº_ø\rÐ /ûú¿ün­xoÁzøšÚâ(f– }fëJšÚø¤ë6È–O¸ r¿tƒÛž9ä“Eðüž ¹ñ Nöæ³·€I¹o#rîm«ÆþI§ÏÍIR÷n_ÏüÆçS¹ÒÂâ“þ€qßÕÿãt¿ð¸dÿ _÷õøÝbøƒÂš&“áÆÖí¯å– ÿ'û&/9N™›ÎòŸ—å'€kŠ+Ha¨I]/Ì—V¢Ýž¡ÿ ~OúÅÿWÿÒÿÂÞ“þ€‘ßÕÿãuæ"œ*¾§G·âÅí§Üôßø[²Ð/ûø¿ün—þäŸô‹þþ/ÿ¯3¢—Õ(öüX{i÷=,|[“þ€±ßÅÿãt£âÌŸô‹þþ/ÿ¯5áGÕ(öüX{i÷='þÄŸô‹þþ/ÿ¥ÿ…¯'ý¢ÿ¿‹ÿÆëÍÅ8QõJ=¿Ú}ÏGÿ…­'ý¢ÿ¿‹ÿÆéájÉÿ@h¿ïµÿãuç­8QõJ=¿Ú}ÏF$ÿ <_÷ÚÿñºQñNOúÅÿ}¯ÿ^t)ªQíø°öÓîz'ü-?èýö¿üE/ü- ?èýö¿üEyà§ _T£Ûñaí§Üô/øYòÐ"/ûíøŠ_øYÒÐ"/ûíøŠóáN}RoÅ‹ÛO¹èð³dÿ L_÷Úÿñ¿ð³$ÿ L_÷ÒÿñÀ p£ê”{~,=´û÷ü,©?èýô¿üE(ø“'ý¢ÿ¾—ÿˆ®S…T£Ûñaí§Üï?ádIÿ@¨¿ï¥ÿâ)ácÉÿ@¨¿ï¥ÿâ+„¢ªQíø°öÓîwCâ4‡þaqßKÿÄRˆ²Ð./ûéøŠá…8Rú­ߘ{i÷;ñOúEù¯ÿJ>!Éÿ@È¿5ÿâ+ˆáGÕivüÃÛO¹Ûˆ2Ð2/ÍøŠ_øXÐ6/ÍøŠâ…8QõZ]¿0öÓîvŸðŸÉÿ@Ø¿5ÿâ)á>“þ±~kÿÄW)ªÒíù‡¶Ÿs²ÿ„öOúEù¯ÿKÿ äŸô‹ó_þ"¸ÑN¾«K·æÚ}ÎÇþ¹?èþ;ÿÄRÿÂs'ýâÿÇøŠãÅ8QõZ]¿0öÓîuÿðœIÿ@ø¿ñßþ"”xÞOúÅÿŽÿñÈŠp£ê´»~aí§ÜëG¤ÿŸ¿ñßþ"”xÖOùð‹ÿÿâk“áKê´»~aí§Üêÿá4“þ|"ÿÇøš_øLäÿŸ¿%ÿâk•áGÕivüÃÛO¹ÔÿÂc'üøÅù/ÿKÿ „Ÿóãä¿üMrâœ(ú­.ߘ{i÷:øKäÿŸ(¿%ÿâiá.“þ|¢ü—ÿ‰®dRŠ>«K·æÚ}ΗþÙ?çÊ/Éøš_øK$ÿŸ8¿%ÿâk›áÖ«Ríù‡¶Ÿs£ÿ„®Oùó‹þù_þ&—þ™?çÎ/ûåøšçGZp£êÔ»~aí§Üèá(“þ}"ÿ¾Wÿ‰¥ÿ„žOùô‹þù_þ&¹ñN¾­K·æÞ}ÍÿøI¤ÿŸX¿ï•ÿâiá%“þ}bÿ¾Wÿ‰¬J(úµ.ߘ{zÍïøI$ÿŸX¿ï•ÿâiá#“þ}¢ÿ¾Wÿ‰¬!N}Z—oÌ^Þ§ssþ?çÚ/ûáøš_øH$ÿŸh¿ï…ÿâkS…/«RíùÛϹ´5ù?çÞ/ûáøš_íé?çÞ/ûáøšÆáGÕ©vüÃÛϹ±ý»'üûÅÿ|/ÿKý¹'üð‹þø_þ&²(£êÔ»~aíçÜ×þÛ“þxEÿ|/ÿKý³'üð‹þý¯ÿY"œ(ú½.ߘ½½Næ¯öÄŸóÆ/ûö¿üMW“þxÅÿ~×ü+0S…W¥ÛóoS¹¤5i?çŒ_÷í”j²Ï(¿ïÚÿ…g p£êô»~aíêw4F§'üò‹þý¯øRJOùåýû_ð¬ñN¾¯O°{zÍ練EDŠ"Ì@ËNIü*Æë¯ùçkùÅTl?ãþÛþº¯óª—úö¥Î°jµ¤Ì»Äw)ÉÁ#ŒƒùW5x›I/ÏüΊ2”Ó»ü;‹É-V6˜Z¯™*B€yD³»Põ$>•6ë¯ùçkùÅ\î­4WAž XdÕ,Ý$F ¬¦@AuW<Þðï‰|IâÍ_NûMÂ^Ç¿Ÿ"aE´ +ÕçXsÇù?ó5å}ÿ/ò;»Ë÷°…e¹û*#H±®<¶%˜…2y?×¥N쪟*Ød3åƒÈà×™Ûé6:ºn›‘iˆí|¸÷³c0Û±å‰=Iï]Gާ‚Û@ɨÞXÜ(‡ìg––Iö‘¬yÄ»g8ÆE^<·åüÿÌV|Ö¿åþGHÒ\¢u³UQ’KDÄxÿRû„ð²ù3I)D ¹O#<èpj†}¨Þ6µÿ ó[ëëhs¦²Þ(1Ä‘Ì$ÉÎç$~^X¼Gÿ$·Oÿrßÿ@hâÝ¿0Õ5©¯ãû/¾µ¡ê~ˆ5å”r~ð´&øÑz9ÁÈÝX_Úß¿¾¿÷Í¥z>¯#Ãi<±œ:[SŽ„F1\TÚ·†¯%¤ÔžÐNcKÖ¹Œ#&ì X±Žp?Z¸bb£Ê» •4ÝîÎSÄ:_ÄßA͸¸Ž/ l˜$cøH¬y|ãyí`µ–Êi-í÷y1=äe"ÜrÛFü žN:×}s­ø²Ù´ö½ÒçÓâžòÚ'’Iœ<‘B )ÉëO1·b¬{ÊÑcjEYE_2}„_Vx¥Ï‡>%Þy?j›RŸÉ”M›©«yrŒ¹“†àŽj¹ðWŽÙ.Ñ­îJÞ0{¥7ɉØÀ¿Ïó’rsÍzä~%Ó¦žh¢[é M*3¦Ÿpɺ2ÁÀp›IHàœ‘“Wl/âÔmÞxUÕVy`!Àtr4mÓ¶TãÛ}z¢è¿¯˜{÷gÿÂ;ñ'íßnóµ/µù~OŸý¦¾fÌçnï3;sÎ:f–/|H‚ê{¨¦Ô£¸¸ÛçJº’‡“hÂî>fN=+Ùè£ëÓþU÷Áaìñ?øD¼}ýËÏøöû'ü§úùå÷þçû==ª!à}‹ì_c›ìžgä}®?/~1»nünÇëŠöu½>@X¼Î&ܨÌ!s;cj4€lV9\) Ëó èQõú—õó«Ç»Ï±[ «‘ŽÈŽü7ŸõoÀÉãÜP±Õ‰/ëæW‹êyü ^&ÿ oþGÿЧÂâ_úÿäxÿøªöa*™Þrª±%\@Ãcü§ Ž3Ôeôÿ´*ö_×Ì_W‰âÿð‚x—þ¿ù?þ*ÿ/‰?èÿ‘ãÿâ«Ù¨¥õú—õó«Äñ¡à_Ð;ÿ#ÇÿÅRxþßù?þ*½zêî (V[‡Ø$q‚~gpŠ8õfñ¨V±Ïß><‹˜ídùå–M›§9óS‘ÀÏ=¯Õ쿯˜}^'•øþßù?þ*”x#Ä_ôÿÈÑÿñUëÐʳÁÈ,ŠBŒåHb2* /âT·ÓÊ¿<άÚ6E9÷Ì‹¡£ëõ;/ëæW‰å#Á>"ÿ þFÿЧÂâúÿähÿøªõê(úýNËúù‡ÕâyðWˆèÿ‘£ÿâ©ÃÁ~ ÿ þFÿН[¢¯Ô쿯˜}^'’xƒþ|?ò4üU8x7_ÿŸüÿ^±E_©Ù_0ú¼O(×ÿçÃÿ#GÿÅS‡ƒµïùðÿÈÉÿÅWªÑG×êv_×Ì>¯ÊǃõïùñÿÈÉÿÅS‡„5ßùñÿÈÉÿÅW©QG×êv_×Ì>¯ˇ„uÏùñÿÈ©ÿÅR kŸóãÿ‘SÿНP¢¯T쿯˜}Z˜ÿÂ%®Ï—þEOñ¥ÿ„O[ÿŸ/üŠŸã^›E/¯T쿯˜}Z™ kóåÿ‘Süiú×üùäTÿôª(úõNËúù‡Õ y°ð¶µÿ>ù?Æœ<-¬ÿÏŸþEOñ¯G¢¯TìƒêÑ<äx_YÿŸ?üŠŸãNÖ?çÏÿ"§ø×¢QGתvAõhx<3¬ϧþDOñ¥ÕÿçÓÿ"'ø×¡QGתvAõhÿÖ¯ÿ>Ÿù?Æ”xoVÿŸOüˆŸã]ý}z§dVÁjßóéÿ‘üiG‡u_ùõÿÈ‹þ5ÞQG×jvAõh(ðö«ÿ>¿ùÆ”x{TÿŸ_üˆ¿ã]Í}v§dVÃêŸóëÿ‘üiÃ@ÔÿçÛÿ"/ø×mE/®ÔìƒêÐ8¯ìOþ}¿ò"ÿ;û RÿŸoü}Æ»:(úíNÈ>­þÃÔ¿çÛÿ_ñ§aê?óïÿ¯ø×aE]©ÙÕ rØš‡üûÿãëþ4ïì]Cþ}ÿñõÿëh£ëµ; ú´LhÚ‡üûÿãëþ4£F¿ÿžøúÿutQõÚ}Z*4{ÿùáÿ¯øÓ†‘}ÿ­i×óËÿãN}×üòÿLJøÖå¾¹S²«@Ä_óËÿãKö Ÿùçÿ Ú¢®O²«@Çû ÏüóÿÇ…/Ø®?çŸþ<+^Š>¹>È>­+ìwóÏõ¿dŸûŸ¨­J(úäû ú´ ß²OýÏÔR‹Y¿¹úŠÑ¢®O²«@ÏÓsõáo/÷QKý­cöOµyÿ¸ûOÙwloõ¾o“·ÏúÏ—=;ôæŸn“Ì®ÊÓÅ;¤‘c^½²Ã>Ù£ësìƒêÐî0A'÷QNÉýßÖ­ÑGÖçÙÕ VU¸ˆ‰!ز¯Ì…Æå :d2=²+™¿ð•æ©:ϨM¤ÝÌ«°Iq¤G#É8ÉcÆIüë¹âŠâHÖÚ,+-Øýj­åâÛÙO2ZÂZ8ÙÀ%ñ3ýê‰Ös~ò_‰Q¤£³g04-d-”Ú–‚9b––À*)Œ‚£ ãŽ1Úª]ø2{û§º¼mæáñ¾Y´hÛ$¶O»˜¶-¼’4jä2¨ÜOÐJæµÏÛèš Ódžõ]Fo!gfÓíšeEfe¾qƒ”jŽuü«ñÿ2¹_wø‘Ÿoá+»xà‚;›m#¹K“®œ†u çån¤3ƒZ·vÞ žå¤‹V·†.#A¶¨Kòp9?Ë¥K¢ø‚/Û ¨,¥³iýÔèRUa$ˆÁ†ãŒú~~Òx“ÅzW…õ;}FØÅow;À·d7“‚FÝòç·‰8š~ÓKr¯ÇüÓ[Ýþtºgˆ¦‰â“[€£©Vaƒ×øëÆ–gOø™mþCCìcvÑŒã·JèÆšmÖ±ªi6¢âçN¶ig™UŒ¸àF[wßööaœ‚_Äù›þ»§õ¥Ï¥’°rë{F¿"E¥ÞI#ª"Y–fc€’M-¿Å¥´HÞ%± ¨\}*ÝÏúÕÿ®iÿ Š†¡;cšñ§¼3â+-&ËIÖìî®WX²“ÊGÃ(8¯QÀ÷=®–Š(nà‘çA¤6®X b®ÝI¨Ã öÏ òÉ(|Ÿ3`bx# žph¼ð–§qtï4ŒKƒköi-‡Ù®§“Í/*³E¹dˆîˆ9UèôR¸X(¢Šr·:f¡ý“©xu,ÝáÔën q$îîÛ”¶ý˽€Ø\²î;2/”Úž£¥Zx‹N…×í§EöÄY#¾Yá·†F2·C“q€–+Ðh¢â<ûOð{ìÑ´ëÈ´ñz²OorÖÑŒ'RÞ]°UŒ‘©É%Ç 6¯7u¯ ß][ë6°/™iök©ì!ÊŒÝ\FêÃ$ç‚el·Ê~ÓŽ<±]¥\>“Á·—ºž¦³›Èå»ûZ=÷ú?”ÑJ²,k¾|›CÇò9 pp¨¥†‰ª¶³axv dmFæ<)ògòÞ!Aù¿w*.áÇú6q™ m\ªêOo—w%ÜI5²Àí,nT+ Sw¸#?xêqV¨ g˜æ/FöºeäÓØ¤‘Í&˜u+{Û©YØ $–2›žÜáÛÆÄØ-wþû†µ¹…´ï6k½&K+K›–‰ÞÄ“ppåBìR³"í‰X ¥~ê‚}Š.#…o -ö»a#xvm|ös$jÞç(¬Ë÷¦ˆñŸ¿ž ãÄv §éWÖº¦ ÛÝ[\Ûhöí$ öì&œ§”ŽÀò’[€" ß"®U¢‹…ŽcEÒ®-|S¨]›°K滼Ž#s#3‚«‘±& ¸@ /OE Ìñv²øzú;»Øl"xö­ÜÌÏÜF_iƒ0A®NÔ4³ªYÝÞø—KÜ1¾¼·}BXç !HÏÏó&ŒÇcÕvú]óíÂWvZLS˦C±βpcóVâµI€pr 0#<Œõ Ì1øbü5 ] ʸ‚ËÊÔn·B?´ØMnò †ÜþbÅ0ýè\ïÃcq¯G¢‹…Ž|-wq01Ú}ƒN¹’[v±ýØû5¤‰a¨ÞÖî¸BHûFü‚®ƒÃz}õ•½äš”¾eÝÍÎùjÛ#HCáNñ“ÿolª(¸Q@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( 4˜hvöò õËhµ8õÃ;Û¾·µÿ˜IˆÉ°8ÆsÛuI¦xKSµH÷Axn–KCw,²[,w.—0»Ê¾Z‡“$!¥!Àn„»cÑè¢â8_iæ;òÛIþÍ·þÉT¹|D¿m‘„E$ÄlK`,œ¾ó8¶;ª(  /êÒ_ìðõ怬²È.¥+‚FÝ»ûÙϵgØjÓ麚x†ó@fhH·l®I8mÛ·Ÿ÷qzëh¢à9ç†ÞÂGšTL¨vg ë^1aá" $A \XëpÉhÒê#Q’6WC,LìÈn+Ùh¢àbh–ö/=½µã^(_1ævBÌï,²6v½\ðíY¿…æ´§@Ó¤ÓÒÞöwKû»™¾ÊŠAâ2rÎOB:ØËÖÑEÀó X\xR-_@I¬nt6†K‹;Å–5›{pb‘G.ØèØèîv~$ȤßõÝ?­uÕÈüHÿ‘I¿ëºZiêisþµëšè"³ÿ´ì?çöÛþþ¯øÖ…ÏúÕÿ®iÿ Š†ÎâtÓlU&‘TZC€þ­iŸ¨ê¢Æx-¢³¹½º™^D‚ß`mŠT3eÙWº g?7àáéªÙ}ªÞÎ{ˆmõ ã%”³'Œ~PNq†Éj®½e.¡0 KÕ! ]£Ô%*¨À`Säà·¦=óXV¾»·¿ˆÏqöä2[O-Ô×·K‘.L vHÄÂs6AnCl€7t¯Xj6šY’âÚÞ÷P´Žê;&L›Ywp8,8ìi—ž-Ь¦HåÕ,ÿãçìÓ0¸L[¾ÇlHsògËaÏ9â¹ý'Á7v eþLÈ¿d’Y>Ýp¨q& „“˜AĸeNÐ…¶¬ZéšMªÅbí¢4bØ›—éD/ /û³å8l üŒgø¨¦šxmÐ<Ò¤jNvgñ¨´ì?çöÛþþ¯øÕÄ‘âmÑ»!é•8©>×sÿ?ÿßf€3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@)E{kq Ž˜dä…I''í\ÇÄù›þ»§õ®ºYå–òÉd•Üoᘟùa%r??äRoúîŸÖš´¹ÿZ¿õÍ?ôUm¿äeÿ^ÿ赫W?ëWþ¹§þ‚*­·üƒì¿ëÒý´€’Š( aEPEPEPEPEPE™«k–ú;ÚÇ4“ËtìÅinÓ;¥ˆ ¹==;Ó¢°á(ô/ø—ÿ×üMð”úüKÿ‚kþ&‹1\Þ¢°á(ô/ø—ÿ×üMð”úüKÿ‚kþ&‹0¹½E`ÿÂP?è_ñ/þ ®?øš?á(ô/ø—ÿ×üMaszŠÁÿ„ пâ_ü\ñ4ÂP?è_ñ/þ ®?øš,Âæõƒÿ @ÿ¡Ä¿ø&¸ÿâhÿ„ пâ_ü\ñ4Y…Íê+7IÖ¢Õîn­ÒÏPµ–Ú$šD½µxk±U 8ä«r>SZTQE (¢¨jú½¾‹h—7);«ÊªA‘ÙØá@QÉ$à`zÐú+þÿBÿ‰ðMqÿÄÑÿ @ÿ¡Ä¿ø&¸ÿâh³Íê+þÿBÿ‰ðMqÿÄÑÿ @ÿ¡Ä¿ø&¸ÿâh³ ›ÔVü%þ…ÿÿàšãÿ‰£þÿBÿ‰ðMqÿÄÑf7¨¬øJý þ%ÿÁ5ÇÿGü%þ…ÿÿàšãÿ‰¢Ì.oQX?ð”úüKÿ‚kþ&øJý þ%ÿÁ5ÇÿE˜\Þ¢²tí~-KS]Ëþ½!ÿÑkH +Ï´oê±hÖ:”‡QÕ’{k´­Å²ÛlžY!EXX¤jê|ÉV"üËœŸAªK¤Ø®™m¦ˆ1ikäù1ïo—ÊehùÎN /SÎ9Íf7ˆ®¢ºu–ÂoosÓ­É.“Ê#ÀEØ 3&X•?{åà‘îáýÁÒnn®bižå!LUEı…ŒÇþ鱿y|mË¸Žž]O›PÏ ™·+²‰œFî¸Úí;† A#jàü£ ð¦ž-ÑnÃÏ1ivI$œÉ#HÊè­‡s¾÷ŽrI4–¥¯j¯§Íu§ZÛ$ ¤RIpCÈâí ueòÈE?8Ü `ã<ž+A&* ª9eVÇ F{à}g¿‡ô×’áÌSbã%ã2à ½P6Ô}Ãvõ·dç$šÐ†%‚áBåcP »—bÇ,I$û““@ŒÚµý޵­ß½«ÞAmwocixÈß½ÿ(ˆ9•›{6ïáÈ^F‹xŠê+§Yl!ö÷0YÝ:Ü’é<¢<]€:2e‰S÷¾^:o¤ØÉçïƒ>}ÌwR|íóKÍ׌yIÀàãž§,—DÓæÔóÂæmÊì¢g»®6»FÆa…ÃHÚ¸?(ÀŸã+«¨læ¹Òá†)ã´™ü»³!Dº}à×-¼à (Á‰Àëk2?iQCIk„Ž;hyÂÛ¹xG_ábO¿|ÖQE Ç»ÿ‘÷Áßõ÷sÿ¤²ÖÅcÝÿÈûàïúû¹ÿÒYi­Äͳãˆa¸ÖÚêÆD°Óí縶¸Ž@íx¶çmÈ@Øc“ ó›9sV#ñDÖ×6:µ„qjQ$/ µÁ¸ûGšd¨Y#;ó „äU‹®:|.ÓÆ›glÚž¤g[yíï® ÜÏö¥ž'YˆGvD/#,§ƒó ëÖ¶#ðœ7÷7^&M7Xžt†0†À,± ŽÒùšL¶î„$Ù&~›ãø'¸·{ødµ´¹Ñìµ%t·–U€ÌeßæÊ«±B/ÌÛGÞ$àqÚWoðîk-,i6z¤:|ú<:Mò ¾UO7|‘°wóÜüÊüòsÎ{Ê(¢Š(¢Š§ªÈ:_ÃùŠñ»¿‹ºMŽ®úMΉ®¦ ’¸·Œ¹cÐ$ù³‘Œg9ÎkÕüQ«éÚ.‰%Χ{¤,êŠó8PÌNp3ÔàØJó‰|Sàµx5i5M-µ#h¢¸,7ª·PçôËcïËÜhÐðû´¾3ñ<ÂͧX1È,„´œ2=‰õ>¡}¨Åâ*ÎÑ!’Þkk‰.Y6`+À) İØ^Ï'T<'ªXêþ.ñMÞwÕ¹²²Q$M‘òdVýÖŸmy=¼ò«‰­ÛtrG#FÃJ’¤eI*r§ àRc34Ë©Ïh%³H!¿´7¶l“fˆϘ6‰S€X}îxݬû OÓgi­aum»<Îëd‘«#^å@ʼ|£†ƒâ»¡ÿØrÃÿG¥oVŠ>î‡ÿaËý”-Äηþø«ÿ±¾Çþ‰þ£íÞoü¾y~wÙü¼gýOï7çoðýî*žŸãe™-nuHììõ #a$s4Îñnˆt ÊLñD2d’Î7Gÿ þ×í_ÚÚ7ßÚÚ¿Ú_hûTû?ÖýÏ+ÌÙþ£÷ÇÝíÚ¤Óü ikk«Ii©éöGO³¶’ÌcÉ-ýöæa#",¨2íämÐ’¼g*qüÁÁW­ë7öz^wysµ´qòÊáTgÉõ$êHå·¾)ð£ugsyªisÏe'›lîÀ˜ÛÈýÔÔ%t»ÆÔ> i·misheÐnÛȹP² ó#Æà ÁÇ8ÎFyÁÈ®¢¹\ÒõωpK¥ßÁv‘è·Jæ'ÎÓ¾.µ×Rc (¢ÂŠ( Š( Š( Š( Š( ªßêÚl -Ë8 Û#¤wl…E˜àÀ8ž€ÕªÈÔíîbÕ,õkkg»6ðMnöѲ«²ÈÑÊX…$‡Žœä` K¸/­RæÙ÷ÄùÁ ‚8 ƒÊ° ‚ ƒ‚*jä§Ñ5RÓêöG욥ÕË„+˜!’8¡ äí,¾Ts3“@H;/øD¥¶ñ42AçÙà’ÜYËííãDSHêÓŒì“*Ÿ+Á#s*Èòª‡6ÚÛ¨'ðHù†ädg#¨"¸ë/ ßi¾Ñ³WìšÌËÃ’²‘æ"$„–$6±¸ä@p¦³õN·REÌšDs‘ ­¿Ù¥fÞÚ8ßmÎS åJ¹??šð:d´ûLo2¼V†þô8’ÐM‡xØÁùXX+1¨øZñ´+‹Y4IµC.œðX$Ò[»ØÊZc“’‰B1 y[FB©%€ôzÇ7ºÎ©ª]iþÓí¦6a~Ñwy9ŽägÊ1 ¤Œ`Î2¹Ø¦xZÞ]PÖ‹<-g}p·qø•e(Lç ³ 0sÙ톑Ù.§ögþÕ°wÈc!e$€ûÄ#ŒsÀ7ÊrV—Z²‹P?é2O¹Q¼›YeHÙ±€îªU?1Á·õµˆ\rFqÎÎ9õäôã¥q—ö—/¯$š~}o?ŸIz.Um¤@WÌÝ“,Æ0c c'!yCIPÁwÌ×1DûžÚAÃmbŠø÷ù]OµÀ¯…µ mm-ƘöÒF¶ñêW 2FÚ„«qní8tmÌBÇ3n}¯ûÎIÄÒÛéöšæ¹¥Ù[igR¼T*5¿˜-„P£ÛˆØîݲ7uV_+î–8È¢Àv’_Å©o§•:x%X´,lŠsï™CE­üWwÐF®Îq…€ÁcIǶ$ŽkϬ|7qoy_ø^çQÓbk•·´¸["Ї[RÅe‰Ahæû¼ó’2Ä’Oë .§ÍühÃÍ[so3O/Ù­câä 4S ÇóqÃ5Ò誺lÚév–ó»É4P";¼¦Vf %ÈŽ{àg®Z aEPEPEPEPEPgþ?¬ÿß“ÿDÉ\¯Äù›þ»§õ®¨ÿÇõŸûòè™+•ø‘ÿ"“×tþ´Ð™Ú\ÿ­_úæŸúª¶ßò²ÿ¯HôZÕ«Ÿõ«ÿ\ÓÿAVÛþAö_õéþ‹Z@IEÇh,¿Ôl´1{´w·“¨¸XÕ‚ùOm$ñ¼`œãå IÈÜ’Ó4ØÑ\­¯tûà©eisutÓ¬"ÚÞkyæI6õ”Æ"“Û¸éÈ%óxïI·±ûT«4aü¦·YZ8üøäc‘Yœ"«ä ;+|¸  –§¢©i:­®µ¦C¨Y¾è%ÜÈ8*ÅXd# qHÁ«´ (®VOMe­k^E|Ú}”ðÚ ·Ž7šAhýëI™A·hàë |I ݤ±¼DY"‚y–RÞi‰°å‹~ò1• ¿8ù¸8mQ\ÝŒ­/RÖC§ß[Çp°ÈQ&;afÚäáÛ*ÉÁF é(QEUK^ÒôŽ}JîÚÔHJ$“¨9î@$qÛòö«Õwÿ#ëîçÿIe¡n&Cÿ 'ÂßôÓ?$ÿ ?ádø[þƒÚgäŸá]­¿ŠtIà³”ê–1­ô¯žë¸ÚJ¾ÏÝ•b'‘¸àG¡x§M×&º´ŠêÑu k‹ˆ¥²[•yQb™¢ÞËÔ·#Àdõ7a\ã¿ádø[þƒÚgäŸáGü,Ÿ Ð{Lü“ü+µÿ„³ÃÙßÚ?ði_aó|´ý¶?/ÌÆí›³ØçqZO Õ¼WòÇ4 xäƒ+©Ásš,<ÛþO…¿è=¦~IþÂÉð·ý´ÏÉ?½6Š,<ËþO…¿è=¦~IþÂÉð·ý´ÏÉ?½6Š,<ËþO…¿è=¦~IþÂÉð·ý´ÏÉ?½RvK Y« `ƒƒÔW—Íñ{ÂÖóÉúõÄSFÅ7¶¸VVS‚ &€ÞÒ¼Q¦ø€\&•}mv!Pf0*ü ž2@î{{J»X:ÛÞøÓij4“26À ˜2²©yN6·+Ôð@Á&§¿Õnmÿ ö™ù'øQÿ 'ÂßôÓ?$ÿ í_Å:$]MuªXÚÛÛ]›6žk¸• ¡CÎîd‚­†ùOÁ1Ùx§M¹ñ£¡Kui¡kp"ŠÙ®WÍL˽Sƒ‡û„ç°» çÿ 'ÂßôÓ?$ÿ ?ádø[þƒÚgäŸá]Ëx—AT½vÖôЖñÒbÝ‹N~BXƒŽF*åýž§gå…Üv²gdÐH$FÁ á‡øQ`¹ç_ð²|-ÿAí3òOð£þO…¿è=¦~Iþé´Q`¹æ_ð²|-ÿAí3òOð£þO…¿è=¦~Iþé´Q`¹æ_ð²|-ÿAí3òOð£þO…¿è=¦~IþéD­¤Ì¤‚ˆ#·æ:Å?é:„öúÝÅ½Ô ¶HÞÞ|ƒÿ|òäÁI 54¯éåÛYéZ•ÕÇ–ÎÉ)!ä’Ÿ×Þ´+›Óõ„Öü{¥ÞAq<Ö’èWrBeWLƒ$_0WŒàsŽFLWIRÆQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€#?ñýgþüŸú&Jå~$ȤßõÝ?­uGþ?¬ÿß“ÿDÉ\¯Äù›þ»§õ¦„ÎÒçýjÿ×4ÿÐEU¶ÿ}—ýzCÿ¢Ö­\ÿ­_úæŸúª¶ßò²ÿ¯HôZÒJæåðF•€;AËg^ŠÂ‡Âv[ÃËrV, RYrVÖC$yã©'æõ1[´Q@Q@cÝÿÈûàïúû¹ÿÒYkb¡’[ k«{«¥¶óâ,`’gÚP‘†+Èçô$w4-ÄÌËo kzV® Šá×⺶”Ý»Å%¬/uu"JaÞÅ.³å±Œ‚  ;v$ð¶¨të(m¯ µº·Õu å¸ æybqv#!HÃ2›„%NÊÜž2ÿøI-çòÛÿ[ÿ‹£þK_ùü¶ÿÀ–ÿâêî+šOƒuhaÞ¼ÞëAð¥çŠ-üE?ØÛQpÍ]¬Ã]‡vP0lû.7u+ÝY·[}R=.úpëÓùªdb3‚F}Íeÿdxþ€ÿ¿ÿ'¨ ÐeŽox¦H] …ŽNAùåïZ—zj]_Z^,óAqm¹CŴƒ6±DÉa·‚2riPhVBâ=OÒíZUo±"©e‚vžÄ÷õ÷«µ,fF™áû}.x¤K›™–Þmi¥vÛBJåj‚ÃäN\±ùG<œëÑE ÁñGÝÐÿì9aÿ£Ò·ª Ÿ±/•%ò[²Å*ÉžØ åXr9G¡ê(Bo¤ë â­SÄ}¬3]Ï P^ÊöÂHÚDir0ö¬ Ã¸cq¦x"óKðóé+uÛu 6â9H+º;d´VÈÁó9$r¼õÅ¿øI-çòÛÿ[ÿ‹£þK_ùü¶ÿÀ–ÿâêî+Ÿðƒëóë—wsÁ#[ù~eÌš”ó–[»Y™Ä,›-ò¶ïòFJ‚ʽÚiZlÖ:޹q+FRþõn" NB‹xbÃq×tlxÏ}7ü$–¿óùmÿ-ÿÅÑÿ %¯üþ[àKñt\,u´W%ÿ %¯üþ[àKñtÂIkÿ?–ßøßü] mÉÂIkÿ?–ßøßü]ð’ZÿÏå·þ·ÿEÂÇMzÊ–ìV&$“€ y†¹ øSÄZ…ö§ö9§³l¡2®$^~GĹ9ÁïìX†ûUÒu;9,ïΟwk&7Ã<¾b6#*[øV?öG¿èá¯ûñøÒz´ðÜ|NµxeIh—`”`FwÅé]géV¾±»gÑ´½ÚêHÚ2öqª¹R2GÊygðö­ –0¢Š(QEQEQEQEQEV.«w©ÿmØéºlöpyöÓÏ$—6í7ú¶‰@]1þ°ó“Ò¶«3RÑýõµäZåżrD¯l";•ÊHŒ:ƽ1@w^7°Ól-®µü$“Å.'‹´.RB²¼‹HØ¥ˆÇÊ ˜‹á­GR7½´ "®q’àÿ*ŸOÒàÓZèÀó7Ú$Y͹cHÇÌyÏç“z71+4ƒËV2Œ~JvðNW7`ð¶™oö_.,}šåîå^sÑq1ÑÛÉ‹û‚³AÔä¾¹¶–ÞÑ.$›}¯ö›(Û)o1ö¬‹îv ‚Üc BÐ?á>°¼ŸO6÷J ÑÔa✲4²bg™ã(;Écæìav–äxže cr !#¡Á##Ø‘ïYÃpÎж£}y¨˜ä/‹¯/c‘”(¨©·¾xÉã$€Ô´¶û%ªAçM0L…y›sã<ÝNNIÆI'$€eÛé‹âÏßi—·71éšm¬/-¬˜þÔò—ÚY× ¡<®€òHç†Ü‹Âöž[esxÖòhíî&2¬8`ŒÙo˜¾Nænœ`qQÛÁo®š§’MâBÖë(rˆb¸û¼•^ ôãjæíî ÎppI'$ã§·sдî¬Ôä5O]i>%–ÞK_;LŠÊ9‘iÌîeØ£»[É(Rî€}î!Ó|_:iLúµ§™wkç6£%‚&Ú4šXüÌ;e>Kœ(fùO  BÂükÞYéÖ7‹4#‹»ÆŒ+DîèBˆ__9ÏP02iZøQ§·¹[æ{3tÒ¥Ô6·"d¹…äy 3÷?)­µ½>m@ؤÎfÜȬaqºçr,„lfl¨$­‘òœsÖ~ –Æñï­®4»[¥hž³Ó 0E™ xÄ„¹+;qµzã퇄mì5çÔQlpg–á\X¯ÚKÈX°i‰9\»`S€ ±î4¤¢Š(Í¿Ša¶ÖµHïçKK Žw¶“iwæo¸£2…ØFF7Mâ 4ÝEne™^Mƒ-m"¢3€UŠíÎåÂ1 ó/0ÌèwÛ¿Òqö­FÚÿý_Ýò¼“¯9ò:öÝÐã–\xzYõ ol®n὞ 2bòöí}ØUýÌyIûÜŒ ‡Ùø³F¿û?‘q6.6ùm%¬±‚îY@ äáIÀr\EmW1oá³Ú[AöíÞM¶ï'û$¦LýïãÎ1Û¯5ÓÐ?iâ¸'T3CäùvÆKй·›Ìò–ÌŒdI”mÎLcï\Ýþß°6?kQxè$òš8ì¦iQ±œ³¿´‚îÖK»ðϑґ•<áSxg@ÿ„wO{_´ý£w“óy{>äCÓ'¯•»þŽÙ.»ÿ‘÷Áßõ÷sÿ¤²Ó[ƒØéÿáðý šþ ¡ÿâhÿ„Áÿô*hø.‡ÿ‰®‚вNþOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&³õ?x Hò…×…´¦’\”†ÛE0ËlŽ6m£* c²‚rF{ çüO6¬>Ëka¦ß\ÚM¿írØMs"ŒaÉ"mß“—RYB0Ì@1Æ›ðÙ¯!¶@Ðåóvž-)\ŠÓ*Õ˜2mRÀé€w.cŽÏᤩ3¯‡ô`‘¦ôgÑ‚‹…,3ïÁf@ {²]ÎõÉý‹¨žÂÛE’ÚÒ÷S°Ôcpð¬Vq@¶Û¡uWÈqöf"²|Éóc;kØØx“J°ÒM¶‰#Ýèz9ÒÆùa+rîöÊeˆyƒ(« ¾Ù E²£‚IP 8<;àKý.æòÓÃ:*¬!„‚m%!x˜.pèèNl0„ᮆ•Š-í-üáÙ´r»f¾òlƒ8ÁT<•^Aã'<—æô[-2ÖóÃ7–Úž‰pW2\Ç«y2½Û€§Ì-™O* 6„*¨Q\%Ö•cŠ-ôØ>hiÒ®ó¨áUcQÁ“aù²xù³Ôa¶¦4[ðÄ60x¿ÄñéÖÖVöÂÂËjÙ‘¡>d¹8@9ï׌v­kÝZ-?P·‚çdVÒÁ4u$Q=§iÏ*]ºô@H¡áø¬ìüWâK?M°°¶†ÊÍ„v–ëæg“%ˆäôž8êss]Ñ ×¬RÚs´,³‚r¤‘x#ïFò&{oÈä –4Rµñ\Ãe,ðù"[#srki7¢J’ìæD–‰€ä 'ÄÚX$\³32ù g3N¤Nè‚ïP!ÉP>uþðÍ+YÏoªÄY¾ž9Udz I<àŒ¤üêfiXŽ ÈqJOÛ´äE¢™âiO”úB›P %a oÝ'Ì],:h¾›â/µËo:äGhaËy±ýž)K’26æ\nàrƒ©¯ã!ºµÒ-î"Žh%ÖlRHäPÊêgPA‚ãí;ÂɤÝËugu²i$‹qòUC‘G–ʸSþ¬²ac´²³¼Q÷t?ûXèô¦·u¿ð‚x?þ…MÿÐÿñ4 àÿú4?üCÿÄ×AEY'?ÿ'ƒÿèTÐÿð]ÿGü žÿ¡SCÿÁt?üMtP?ÿ'ƒÿèTÐÿð]ÿGü žÿ¡SCÿÁt?üMtP?ÿ'ƒÿèTÐÿð]ÿXqY|7šâx—Ã:j¤2Ks&€RÝ E„™¢€¥gv21]åyÞ­á}Jðjºn“cw§‹Ô½[‰çÔšk)ÖxåÆÈ˱̲F툗d˜¼SLð÷€µ4Zø[JY"ÁxntQo"ƒœ6É#VÚpÀ60J° ã…וe¨XÅ¥x#ú«6비6Q”NF62ÙÁçŒ gœ¯¢éö3꺾¯©é2ZÚ^ØÁbm/'wÓ—$Fλ˜¹á²Á<&¹¥Xéú…¾™ðÓ@Ô`ºm9 ¹9q°áp3‘žxÆJîLh±¥ÛéVßm—J³Ómâ:5Ù°ÛÇfßÞ(™÷«þ$×ÿá·³œÛyñMsåÌÞfß&!É$í©£“ÐsPXZéÚgÄ+{=3GÓtøäÒ.¥ÚÚª3Ñ–ë“ÀãžsKí?í—zlþnϱ\™öíÎüÅ$xëÇúÌ瞘ïRÆdAã gÕ5;i xà´hÒ c +Ý1iQÂÄ«»*ðÊ8ÎBû¼Õ¦ñfŒ’*‰Žc»-¬¥!R̹•‚â,pw•Ûµ³Œ«/„Ö+Ë{­6å-ZÎ xm#’#*F"YÓæùƒ0)pè ¨9<ŠbøCʾËê–Mo#ˆxGwžGp7}Ý× œ€£,zÒÐ W>$‡ûsNÓmÈg»x&ÛÉ倱JÄ,¸ØX2@$Œ0ÆAÅ«oi·SE K4sË'”Ïm$2±Ü® …"7ÂT€r1YsøVêi’Õ|>;››”Xa+r¯2J‰wà`ÎÅ~LŒ(çšCÁóØÚj&Õ4áqyöT‰tû!k ¥„åK°vBûö’7Â÷ †ï[‚)ïm‡Ú?ÒE¢)%˜Íä`’2HpH€HŒ¿JÔe¾q\Û¤V“ù$rqDmbªHÛ"õQÎG8ÉölhŸÙV±B¶émöx£ ±… ´RrËŽ žGzÏÓ<#£éðDN±–tœÜ‰ª"Ç) å˜Â çå–l±šßX¹»²A¦¿ŸcwöTæQæå#`äŒí\Iží´tÝòÔúF£.£æ{t†h'hÊÉ0;ªî§†V^Ù¬öе?/[jðÄú•ÊM¥« ˆÊH“')”¡’ãm48Œ£T¶Ò`lÚÛ¨ €™öTrè8â€)Oâ[Ë9^½-#™Ö6çyS$« È\FK8û¦@BI‚vò'ˆïæ¼:\:m±ÕciѽÛ,QbbVAbqqñsÀÜË êbÂK[ÍVÎrÒGs祋$pŽŽ¯!2Ë”¨ òáT¨§‡/á¼:¤:•°Õdi Ò=£4]bR1 `qo%ÏñqÈÚ$~$žxôÛØ´ßø–ßù"'yÀ¸c*†b‚ªX—à…º æôÿ_éW–æ×R¶’ÎÞ­bK›FycC"ºÈª Ü[g'ÈU¤ Š( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPgþ?¬ÿß“ÿDÉ\¯Äù›þ»§õ®¨ÿÇõŸûòè™+•ø‘ÿ"“×tþ´Ð™Ú\ÿ­_úæŸúª¶ßò²ÿ¯HôZÕ«Ÿõ«ÿ\ÓÿAVÛþAö_õéþ‹Z@IEP0¢Š(¢Š(¢³#ñ˜÷ú“Ýà ƟóN’ȪBlG2c9Ø€Xàd»iykj—Vw0ÜÛ¾vK ‡FÁÁÁA…MEPEdZøŽÂé"|¼JÖw3KµEª© Vn~FÎñƒÞ)?ºjw×´x´øµ 5k²•¶Gr×(#vç€ÙÁ?)ü¥hTdµ}JÎþhäk‹&w·*ûB3)BHÁÏÊHç××jÞZ½ÓZ­Ì-p¹Ýp\`)9x‡þ¾¢°õÝ>ßWñO…´ëÏ4ÚÜ\β¤S—ßø5»ÿãµvb¹§ý­'¬¿÷Òÿñ4kIë/ýô¿üMf°ð§üú_àÖïÿŽÑÿ ßóé}ÿƒ[¿þ;E˜\ÓþÖ“Ö_ûéøš?µ¤õ—þú_þ&³?áXxSþ}/¿ðkwÿÇjž¥àohÖëqªK%Œ áK­næ%-‚p Jp DZ¢Ì.oÿkIë/ýô¿üMÚÒzËÿ}/ÿXxÀPêérË"j&ø­[¹ºóʧ›’>VäÇÒ£‹Á¿&ûw•uægçí»uëƒölg>gï¾Lmn¸û§Ò‹0¹³¨Í«§Íctnü‰†×\˜˜Œçø<ŒƒÁ®gþo ÿϦ§ÿƒ{þ*´ ð‚o´Ã§ ®íÙY£š fæHÛ ²àòü+ºÓü;mâ‹}xg]–÷—ñÜß´9ÆÕ,$䜰áxÏñm@uÚN‡£è?km2Öå%ºDI^{É'$)%GÎN1–éëWkšðÍ•®ŸâßÙÙÄñÁ ™E{‰f ³ÈXæFb3…à>QÅmÉz¥¾žUüéà–u`б²)Ͼd\} K-QYþ#°¸‚Âr^olPY&Ú«J#'yϯ¨àóë;ëÚÜH‡rÇ8 {sÇZ×VŠâúúÖMµ½Øµtƒ31&àzáð¤ý3|a ÜÙévÒW½œ2yr21G™U€e Œ‚G½Giý­'¬¿÷Òÿñ4kIë/ýô¿üMf°ð§üú_àÖïÿŽÑÿ ßóé}ÿƒ[¿þ;Wf+šÚÒzËÿ}/ÿGö´ž²ÿßKÿÄÖgü+ Ï¥÷þ nÿøíð¬<)ÿ>—ßø5»ÿã´Y…Í?íi=eÿ¾—ÿ‰£ûZOYï¥ÿâk3þ‡…?çÒûÿ·üvøVÿŸKïüÝÿñÚ,ÂæŸö´ž²ÿßKÿÄÑý­'¬¿÷Òÿñ5™ÿ ßóé}ÿƒ[¿þ;Gü+ Ï¥÷þ nÿøíarüú¹·–k’!F1Ì€#2¨*}Áv®Oþo ÿϦ§ÿƒ{þ*¶cøoàéždŠ·x_dªº½Ñ(ÛCa¿{ÁÚÊp{{×®iþÑu Uðλz³·ï¦´¹¿‘-Ó•äç(ç>V•á½ D¾kë K±taxÏ,À+c $UzzVrÚ^—c¤üE¶¶°‚H¢m"êVu4Ù`Ѩ?¼vÆaÆ>ñ­ÍKRM:8q5ÄóÉåA;wÈÛYˆˆQ…V<‘Óצ2íJNµyn×ì/~tðÜËøS,>Öe v1ÎqÁô8-µ2òú[+]FÎ{¸sæÁêÒ&å#àç½!—h¬+h÷7wâ=FŬ¬à†I/Vé a¤ii=~wÇLjV Î/mŒ)Ü4‚UÚ±Hœð¤+`ôàúPª*–¡%—–°é÷—Ò¾NË`ƒhÉ,ìª:Ž3“Ø Ù붺”ÖãOŽk¨%e{ˆÀÂ7 }ÄÌ;@$¥‚†€iÑTµ=R *$&a=ÌVËåF[ #…E\žIúrH{»Ÿ²Z¼ÞLÓ•ÀX¡]Îäœ;HäR@ÐÔVñþr7}ÃŽttk+«f¿¹¼¥ÅõÈâ…ˤxŽ8À B–â0s´}ìsŒ:(¢Š(˜½ð»ÜZëQ§’w{ Ì£;c1ɰºŒ¦éVVÊçRÜ’EUÔâ´J 2ÎòÏjº½Òb¨ŠæëG !vªáÇ@[±¢‹ˆæüáÉ|=e2\‹f¹•mÑ¥‡$•ŠÚ(°Ià29ÍØ’*åßü¾ÿ¯»Ÿý%–¶*aÚΙ©Ë,‰&œòI*ž6Œîäpñé‚ÓÔÚŠÈþØÿkÿ ÿötlµÿû:«¡X×¢²?¶?ÚÿÈ?ýÛíäþ΋ ±¯\ߊ5#aqd±Zݬó¤¨um:K¶µ‹(\(DrÎÝ¡†Ï±Ý°#]þØÿkÿ ÿötlµÿû:.‚Çž-bŸFÓôëèá¹ÕtËËkY¶-¤+fùb6Qo Ù!òŽ eÉ¢DðÁáÁw£_Lº‰öKèÚɾIÃÚ1îM´Á#æ-ÿpmÉd Øÿlµÿû:?¶?ÚÿÈ?ýAcHÓ¡ kñßEí¯n¼Å¹›}ÕÒ,1)gUcù‘£ÀDÊ $Å›‡ºÓ<-kâ‹}øsÅMp¾dw1êr˜6 nbÆ^’g‘€w.}#S»}GNžÍ/®,Ì«·Ï¶…<Åñ¼°äqÓ¿85ÊÂ$èrñ/þKÿñ› ðÕž¦øŸÄvu¤¤VVŒÒMu$î夓Œ¹8êrNF'ñ6…ÿ ›¨“aYNqò:4Rv?7—,…{n ž2 @µÑ'Ô.†©©jW±E½à€ŒHÆÀ?¼zçµhÔ±£’ŸÁÎðjê“|×71KóY2©9¹ÚÌ c,’®åÎÕØpH9ª|x¯ ìq'ÚwMæ[®³v„ïÆç—råÚ«†Ó-ÛÑEÀåto \hwÏunöÌKEæÙöq1»·Ø4Eº¶à1'k%Ï}ÝþÖú=+zªÞé°jMf.%’5µ»Ší|µ³FÁÔž™>Þ@·¹¢²?¶?ÚÿÈ?ýÛíäþήèV5è¬íö¿òÿgGöÇû_ùÿ³¢è,kÑYÛíäþÎíö¿òÿgEÐXת÷ðÜ\i×0ÙÝ}’êH!¸òÄžSB¾ÓÃ`ààõÅPþØÿkÿ ÿötlµÿû:.‚ƃ¼?{¦i÷Ò"ÛÜ^¯—%¬2Û4…­¡*»HìI=[qmêìX“…âµÍ3ÂÚ¡cfÞñEë^·— –šœ¬›ù%IiFÓ€['œðqéóê5¼±%Ä;¡U–8²>ðÜÄduäê q¿ð‰ú¼Kÿ’ÿüE&ÂÄV™¤èÞ?·´Ó¬çF“Iº‘渽–vÀhÆÕÄÜñ“Ó:ºÕ¼·zy·N±ÔFK{é FTsŸ¸ù Æ=óÅE¤øjÛJÖ«&µ«j7"ÖKd‚-ª®TŸº õQëÞµi1œEÇ…µˆ´BÖÏì2¶¥`Ön’Îñ¥¢—™‘cÂ6õQ>À0œF0p¶µ ]j"i­q Y½¿™äm©p·*¸e‡ž¹ƒÏLõ´R¸•Αâ ëë»éRÎÜ˼_f¶Ô%_9c3 ˼|Êòƒ›O j­§†.!þͰL­t÷æ)ZX¤·7rÄò2æFÜê¿8åã¹ÍvôQp1uûMN÷ìðÚAgqdw¨..7¦Õ%QòŸ{rànàWr¶cxbê]uõi§GqqsÔ—ÊäÜ[ìXÕáC°F•-¹x•²¼aºÚ(ŸÕ4K”Ñ£³Òœâö –þп™¸ŽD€ì$n|°1ÐdŸcgSÓnÂ]]éºêS*¢ù÷ry*¹]ÅPîEm àì<õ½ æ!ÒõkY,¯-´ý:9ícžÜ[ùehÜÈe1n/º3TîÜX¶x5l|'§ZE¥G-´¶^}Ä—LÌ’+[¬ ´G‚o³ŽwŒo<¿7cE…§i—é¯I©]ÅcZÍ›7­”Û$€¨ÚT! ¥ŸF¸ù·h¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ÿøþ³ÿ~Oý%r¿?äRoúîŸÖº£ÿÖïÉÿ¢d®WâGüŠMÿ]ÓúÓBgisþµëšè"ªÛÈ>Ëþ½!ÿÑkV®Ö¯ýsOýU4·–8bˆ_¦ØãXÆlÎpªÿ–¾Ô€šŠÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ,”T~LßóýþŸþ;G“7üÿGÿ€gÿŽÑ`$¢£òfÿŸèÿð ÿñÚ<™¿çú?ü?üv‹%“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´X (¨ü™¿çú?ü?üv&oùþÿÏÿ¢ÀIEGäÍÿ?Ñÿàÿã´y3ÏôøøíJ*?&oùþÿÏÿ£É›þ£ÿÀ3ÿÇh°QQù3ÏôøøíLßóýþŸþ;E€’ŠÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ,”T~LßóýþŸþ;G“7üÿGÿ€gÿŽÑ`$¢£òfÿŸèÿð ÿñÚ<™¿çú?ü?üv‹%“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´X (¨ü™¿çú?ü?üv&oùþÿÏÿ¢ÀIEGäÍÿ?Ñÿàÿã´y3ÏôøøíJ*?&oùþÿÏÿ£É›þ£ÿÀ3ÿÇh°QQù3ÏôøøíLßóýþŸþ;E€’ŠÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ,”T~LßóýþŸþ;G“7üÿGÿ€gÿŽÑ`$¢£òfÿŸèÿð ÿñÚ<™¿çú?ü?üv‹%“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´X (¨ü™¿çú?ü?üv&oùþÿÏÿ¢ÀIEGäÍÿ?Ñÿàÿã´y3ÏôøøíJ*?&oùþÿÏÿ£É›þ£ÿÀ3ÿÇh°QQù3ÏôøøíLßóýþŸþ;E€’ŠÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ,”T~LßóýþŸþ;G“7üÿGÿ€gÿŽÑ`$¢£òfÿŸèÿð ÿñÚ<™¿çú?ü?üv‹%“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´X (¨ü™¿çú?ü?üv&oùþÿÏÿ¢ÀIEGäÍÿ?Ñÿàÿã´y3ÏôøøíJ*?&oùþÿÏÿ£É›þ£ÿÀ3ÿÇh°QQù3ÏôøøíLßóýþŸþ;E€’ŠÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ,”T~LßóýþŸþ;G“7üÿGÿ€gÿŽÑ`$¢£òfÿŸèÿð ÿñÚ<™¿çú?ü?üv‹%“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´X (¨ü™¿çú?ü?üv&oùþÿÏÿ¢ÀIEGäÍÿ?Ñÿàÿã´y3ÏôøøíJ*?&oùþÿÏÿ£É›þ£ÿÀ3ÿÇh°QQù3ÏôøøíLßóýþŸþ;E€’ŠÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ,”T~LßóýþŸþ;G“7üÿGÿ€gÿŽÑ`$¢£òfÿŸèÿð ÿñÚ<™¿çú?ü?üv‹%“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´X (¨ü™¿çú?ü?üv&oùþÿÏÿ¢Àþ?¬ÿß“ÿDÉ\¯Äù›þ»§õ®®8\E,·bAòm¶d”eëæïzW)ñ#þE&ÿ®éýi ;KŸõ«ÿ\ÓÿA Msþµëšè"¨ZZZ >ÏýÌ“mÖÈI%’I<Ò/õ m6–åœmˆ‘ÆÒ;¶ ¢‚Ìp àO@jKK¸/­RæÙ÷ÄùÁ ‚8 ƒÊ° ‚ ƒ‚+;S·¹‹T³Õ­­žìÛÁ5»ÛFÊ®Ë#Fw)bb8bs²gÑ5RÓêöG욥ÕË„+˜!’8¡ äí,¾Ts3“@H;ˆ[Ep¿ð‰Kmâhd‚ ϳÁ%¸³–) ÛÛÆˆ¦&‘Õ§Ù&U>V‚Fç"k/ ßi¾Ñ³WìšÌËÃ’²‘æ"$„–$6±¸ä@p¦€;•dyUCƒmmÈT€x$|Ãr23‘ÔO¯;Ô<:ÝIv72iÎD6¶ÿf•˜ {hã}·9L/•*äüüñÃWSú͜Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€IEGökOùð±ÿÀHÿøš>Íiÿ>?ø ÿF€I\Äù›þ»§õ®œCwöf+[h›tƒtP"õ2qs?äRoúîŸÖšÜÚ\ÿ­_úæŸúªÖ€µŠ¨$›X¿îÖ¬Üÿ­_úæŸú¨ô¿õz_ýp·ÿЀ$û%ÏüûËÿ|>Ésÿ>òÿß¡¢ÅZéíÔ̪í4cp ¤«)ÇpAv"¥û%ÏüûËÿ|á<3©ßÛøsJÓôû+k™®.5IË\\´*«ʯhß$™§Jرñ†içÇpêV¦’#ŒH¨È¤~f(U–9 ’§Â:?²\ÿϼ¿÷Á£ì—?óï/ýðkŸiªÖ‡ÎòÒi$Iæ9!òvFdmû“äm 6nT–ã—ifÉr¬¬«ä=œË; b+½ ç!Hùû§ ß²\ÿϼ¿÷Á£ì—?óï/ýðk K×áÔõ+ë$·¹­™pÏŠ®­rrJ€­ûÌl'wǦ½,jÓK4Q)y `’¢Œ˜Ø€À0ìpAç±½KöKŸù÷—þø5Ãéú¿ö5ŸŠ'Ù ßâ™q7“_èèwI&Åãh89fQß#n ~Øió\ÞËm[Ú ÙþÍ#OÀÛöº¾Á¼o¡%€Ýû%ÏüûËÿ|>Ésÿ>òÿß¹[/Ù{ÇÔ]íšÚ{µg6Ò¬lÉ ù\®ÛqU$ðÜpqi¼Y£G´×@Í ‰bžÖXåf*Ì FÊîØáxùŠ•òÿߢ¶V¼¶ŽæÕLðJ¡ã–!¹]OBàŠ©©ÿÈ*óþ¸?þ‚k”ÓÉsÿ>òÿß¹Sâû&Ö!‚7±I§iÚÚP$exV?)ˆÄ¡¼Ã›·¸ê3µa¨[jP4¶Ìä+lt’6ѰS‚ dz@d¹ÿŸyïƒQ\+ZEæÜ©†=Ê›äFæ!Td÷$€=I’¹¿ÿÇŽ•ÿa‹/ý´Õ}’çþ}åÿ¾ d¹ÿŸyïƒX¾!×ÿ²µKØÛ|­™f¾f>Ó)—ËòúŸ< ÇÞ碚’-oO›P6)3™·2+\Fî¹Ü‹!†* #kd|§ßd¹ÿŸyïƒQF­4³E—’ *(Ɉ Ç{{Ö#x³FŽ5i®&šAÅ=¬±ÊÌU™@”1ݱÂñó*2x¬}'\µÒ#ñ[I$-/ü$«DÒ…*!ÿeQdsÛ· A`;²\ÿϼ¿÷Á£ì—?óï/ýðkŸÿ„–Ò9®’d›\´ýž).p¨…Ü,jNÕv1“È ¸$Šœx‡Jk¨ K¯3ÌÙ¶hãg„ 2€QYƒ.`NåÇÞÔ¸V´‹Í¹S {•7È6ÌB¨ÉîIz’KöKŸù÷—þø5çÚŽ´º×†|=p̆éït¹®5;ät} œóƒ¹$¤ýàNÓx¿Ï¹Õ|Ë.[mUlÕ<ìù‘=Ñ·go:Éòõù:àƒNÀtÿd¹ÿŸyïƒGÙ.çÞ_ûàÖlj´»S:ÜIsBÁJ½œÁ¤%ÄcËs ÜÊ2›‡Ì¾£"x›H‘%arëå®ì<)~B•@T`̨UrÁÈR)»öKŸù÷—þø5 ×HÏn¦eWhÙ£€e%YN;‚#±RÃP¶Ô im™ÈVØé$m£`20 §@È ô"¹O êwöþÒ´ý>ÊÚæk‹Rr×- ªÇr«Ú7É&AéÒ‹Ýý’çþ}åÿ¾ d¹ÿŸyïƒXCÄšzÙÃu0¹Š9DrmÝ–¶È$tP+ ·‚A f­&­c'‘²|ù÷2ZÇò7Í,{÷¯N1å?'ƒŽ:Œ€iý’çþ}åÿ¾ d¹ÿŸyïƒPÑ@ɾÉsÿ>òÿß²\ÿϼ¿÷Á¨h  ¾Ésÿ>òÿߢ¶V¼¶ŽæÕLðJ¡ã–!¹]OBàŠ©©ÿÈ*óþ¸?þ‚kOÕ¢Ñ>øfú}žJØXÆìòTYP±' PÙü;u GUöKŸù÷—þø4}’çþ}åÿ¾ s1xËHžúê.Ẃáa-›ý Èòv©$°n8ÉÁ' ÕÑâ)­n®E×î­m¾Õ91¶c.F2¤~ð*AÐÏÙ.çÞ_ûàÔAY®žÔ)7‹#DΪIˆê*ÀcéXÿð“i'd¹y|‰Í»¬PI#y °1ªª’Ì61 BáÊA8êÏeâßZÛyÏ-®•QNZenÊ–\oÉsÆ1E€î>Ésÿ>òÿß²\ÿϼ¿÷Á®}|C·›«Ù¯¢ØLûî|Àû¶˜ö¨gÿW&FÐFÆ8ÚÓÄl’[dzLóã ´ŽcùŠþð*Ÿ+æ >}¸*ÃøN6~Ésÿ>òÿß²\ÿϼ¿÷Á®}¼Y£$k#ÜL±<‚(¤kYBNÅY”DÛq&BlÎ~P2YrÅñn–²É òºÉ?˜ÑA4‘Ä‹,‘î’MPf'ÉbÚy n Ù.çÞ_ûàÑöKŸù÷—þø5ÌÛx²ÒlùËöP—³ÚÈ÷DyÇr¹MÄ$ž@PNN@ 3x¯IHÕ™ïÚAÀl'U˜ÍûHGù±‘¹àÐAöKŸù÷—þø4}’çþ}åÿ¾ S´»‚úÕ.mŸ|Oœ ƒ‚<« à‚8"¦  ¾Ésÿ>òÿß²\ÿϼ¿÷Á¨h dßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4Pßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4PÜ+ZEæÜ©†=Ê›äFæ!Td÷$€=I’¹¿ÿÇŽ•ÿa‹/ýµÒP"3ÿÖïÉÿ¢d®WâGüŠMÿ]Óú×TãúÏýù?ôL•ÊüHÿ‘I¿ëºZhÚ\ÿ­_úæŸú¨ô¿õz_ýp·ÿФ¹ÿZ¿õÍ?ôU­ [«+ wieµ E!GÆ£*À‚§ÐŽE>Šå ðv‹4QHt»ÕWUb»vfx Œ¿å\ãqÚõðVŒvïÒîÇMØ×îŽ>îqÇ=_ëµzn;K )xgöLJ4«½BÞÚêkR1oqÈ¥žåNîz##§ñ~{w¦Î×¼½†ö2cÈâXv3ó.èA<‚A ÖªxKÂZ‰|1óÁ{q]]Å0êW ªÃò~~Xõ,zŸ@­‘ð¿Ã']KžŸñ4¸ëÇý4ÿ?Í7©ihs×þŸP mw7›ö»™®/î!Q(kF¶ ’Ä6O;‡Êä‘•Rû_µ˜Yí¤Òí/bfˆÙé‚2DùÐ>ç;eãapÍ»j†Þ¶·’âáïâ‚$.òI«NªŠIbdÀsŸòd ü2q…Ô¹éÿK޼ÓOóüË öˆƒOÓn¬¯î®îïl³ €©óÂ$e”ï8M±”‚rOÍÚ´ê˜ø_ᓌ.¥ÏOøš\uãþšŸæ…þ8Âê\ôÿ‰¥Ç^?é§ùþjè=¢0ôïä‹ÅCO¹¶·›ûx×í2•û:q€éÎqÎ ŠçÁ·Ma}oiªCêVÒAzòÚÞòÈL`H»>iäà—ão¡-Ñ/߈ÉF ¶ûÅÃÔgä+·,Cå°“ÀÎ:“H~ødg+©q×þ&—yÿ¦Ÿçù; çG/«xKQŸDÔ­Vò”n¸²·Ž.C4ë0 ò3•*<öuyÚsÁR?ÝI¬Ûj×÷ðËw ˆH‚ØÅ"G:*à»Ù¸bNp@’uÂÿ Œåu.:ÿÄÒã¯?ôÓüÿ ü/ðÈÎWRã¯üM.:óÿM?Ïò.ƒÚ#-t)í.’q?Ú--.g¾·µŽ³4Ò 7)‘Ÿi_ßIµqòå¸9ËÒ<– §Í7ösÏ vÆyÅe˜Ih˜ŠVûˆ|µà¡<±Izƒð¿Ã#9]KŽ¿ñ4¸ëÏý4ÿ?È? ü23•Ô¸ëÿK޼ÿÓOóü‹ öˆÇ‡Ã—öö6±jVØÒÙœÍhÇj¬o%ýçïÇ<®Ï˜gùk¤ªgá†Frº—âiqןúiþ~ødg+©q×þ&—yÿ¦ŸçùAííOþAWŸõÁÿô\÷†¼;as£xoX»·¶¹˜hv1ÁæÀ¬Ð4fFܬz\tÇ݆ùø_ᑜ®¥Ç_øš\uçþšŸäæøqáë˜âYýVżHš”ê©yUp?“Ô“EÐs£ïÂ1_ii§ÏvâµÞ\;"Ånu*2Nõç;zsÃ5/ ÝkfŸR›H»»¶ó??K2A±öû¶”à ÃnÆ ç5¶~øgœ.¥íRã§?ôÓüÿ ü/ðÏ8]KÛ:¥ÇNé§ùþEÐ{DT¹ÑXØi°Ù\$3鬭nò@2#h¾dMƒ]¸R v5›Ã·RÝ;K ·¸¹‚òé؇yâà£o!˜S*C½órÔ? ü3ÎRöΩqÓŸúiþ~øgœ.¥íRã§?ôÓüÿ"è=¢9©<-ͽµÖ¡m5••§Ùm"k2NÕ’_8—"Aû„ MÀ·ÝãÚŽš-‹À«f¦I Œ¶v‹o8å@Iè£%™ŽsÈsð¿Ã<áu/lê—9ÿ¦Ÿçùá†yÂê^ÙÕ.:sÿM?Ïò.ƒÚ"ås~3ÿ+þÃ_ú9k`ü/ðÏ8]KÛ:¥ÇNé§ùþGü+_ [2ÜÇóI‰ãêºîC¹IRävü‹ ö‰’ë:Û5‹IüÝŸb½yöíÎüÇ$xëÇúÌ瞘ï\âx&Þ=Bêá$¶„NÓÈ·Yª^«Í»qûA'€dm¸U# ÝŸ ¼9$$§TwbK³j·–9ç>g?_þ¾~ødg+©q×þ&—yÿ¦ŸçùAíÏi~ þÏÖbÔ|Ý:.HßÈÓôÿ³FÛc9Ûæ?hëè€c¸¥¢øbÏWÖuæëòtÁ"µáZøjÕ–å"¾i-ÜL‚MBwPèw)Ú\ƒ‚ ò;~N“á—‡$‘ä”êŽìIvmVà’Ç<çÌçëÿ×ÁpçG+€|­BŸµÙ+`ó#±Û<ûg†mÓɼùŽ|œÀåØãµZ¼ðTW°¬s]#ªµÓ„’ÈÍ-Ôw*Iù”‘ÆàO+[Çá†Frº—âiqןúiþ~ødg+©q×þ&—yÿ¦Ÿçùhˆ4-4[VÍL’líÞ pÊ€“ÑFK3ç0;á2þãÚV¡§ÞÛ[Moqª@VâÙ¦VY.U»H˜ Æ=z×R~ødg+©q×þ&—yÿ¦Ÿçù8|8ðô%¡[õ†ÙbDÔ§P 6ö'É,Ç,y<ÀQtèæ5ŸÅ©Yµ´WÄI‘³ßÚ –Gvwy¢Ã ŽFi bÔÀqZö:NÏjZ¬y[±?>íùHüÉ:ñ»Ë‰6‘Ç‘‘÷Í^ ü2q…Ô¹éÿK޼ÓOóüÁð¿Ã']KžŸñ4¸ëÇý4ÿ?̺h‹”U1ð¿Ã']KžŸñ4¸ëÇý4ÿ?Ì ü2q…Ô¹éÿK޼ÓOóüÕÐ{D\¢©…þ8Âê\ôÿ‰¥Ç^?é§ùþ`ø_ᓌ.¥ÏOøš\uãþšŸæ]´Cµ?ù^×ÿÐMdi:ö—à Áæù{,¬'Ý·9ò$Ç^û1žÙÏ5ª>ødã ©sÓþ&—xÿ¦Ÿçù©øsáë¨a-øX#B‰©Nª‘¦U@ð8‰ÉêI§tѺ‡¥ºÖ¿µ­¯¨Ö’"+ I`K· À#AÉéY÷> ºk ë{MRŸR¶’ ×–ÐÈ÷–BcEÙóO'¿} n„ü/ðÏ8]KÛ:¥ÇNé§ùþAø_ážpº—¶uKŽœÿÓOóü‹ öˆË¹ðÛÉ£}†9¬ÙþÛ5ÚËsjÒyfI$pSlŠÈëæ`8lŒ1ž2¬ôin5¯é°_8šÞÏIt¹ºS33C38.]Ä”ç‘Ô×R~øgœ.¥íRã§?ôÓüÿ'GðãðyÖÑ® ±\…iˆÔgÞáíïÎv;zg¨.ƒ3 Pðö¬b}B{;­DHºk=ÖÄ"Ȫ†ù*²7/Ç9À ¼#äÜiÏ övÉk‚íggöy[4†5dp$œÙ[#$’ÇpÛ ü3ÆWR÷Æ©qÓúiþ˜>øgŒ®¥ïRã§ôÓüÿ2è=¢2ì|;ujºM¼—ðÉi¤È¦Õج…2BÛy Øu9 £*x猿øDµ¨jÖ«y iš…±Žwh7HâIîduBleYÀÜÊÀ’8"ºð¿ÃøgŒ®¥ïRã§ôÓüÿ2è=¢.QTÇÂÿ ñ•Ô½ñª\tãþšŸæ…þã+©{ãT¸éÇý4ÿ?̺h‹”U1ð¿ÃøgŒ®¥ïRã§ôÓüÿ2è=¢.QTÇÂÿ ñ•Ô½ñª\tãþšŸæ…þã+©{ãT¸éÇý4ÿ?̺h‹”U1ð¿ÃøgŒ®¥ïRã§ôÓüÿ2è=¢.QTÇÂÿ ñ•Ô½ñª\tãþšŸæ…þã+©{ãT¸éÇý4ÿ?̺h‹”U1ð¿ÃøgŒ®¥ïRã§ôÓüÿ2è=¢.QTÇÂÿ ñ•Ô½ñª\tãþšŸæ…þã+©{ãT¸éÇý4ÿ?̺hŒÿÇŽ•ÿa‹/ýµÒU/øV¾µ)t‘ß4¶ì³ “Q™Ô2Êp\ƒ‚Áÿõݧr£$ÈÏüYÿ¿'þ‰’¹_‰ò)7ýwOë]Qÿë?÷äÿÑ2W+ñ#þE&ÿ®éýi¡³´¹ÿZ¿õÍ?ôQéêô¿úáoÿ -Isþµëšè"«ZJÐYXLI;Gk¢ÆùNÕÉ' ÉÜPbìÒ¬ÓnͰ Û·n>QÆ6®>›Wè:Qu%úOn--­¥…›´· "är #n8ϯAÏÄÀçç׫¢7xßçèX\¯±18Ï8Çxôÿ?@œgœcŽN¼zŸ¤?k‹ÕÇÑ޼oóô>׫¢7xßçèX9_bbqžqŽ8=:ð9éþ~8Ï8Çxôÿ?H~׫¢7xßçè}®/WDn:ð=¿Ïаr¾ÄÄã<ãpzuàsÓüý#‡ˆØ`ø¼ßOóú7íqz¸ú#q×íþ~‘ÃuÆÃ >v8ØêÏùà°ììZ'¯>üž½y<õÿ?@ž¼ûòzõäó×üý!7qsËŸøsïõÿ?@ÝÅÏ.à Ï¿×üý 1r²bzóïÉëדÏ_óô ëÏ¿'¯^O=ÏÒw<¹ÿ€7>ÿ_óô Ü\òçþÜûýÏгVLO^}ù=zòyëþ~=y÷äõëÉç¯ùúBnâç—?ðçßëþ~»‹ž\ÿÀŸ¯ùúaÊɉëÏ¿'¯^O=ÏÒ;žm¦ï”cÏ~'ßüýnâç—?ðçßëþ~‘Ü]DÖò¨.r¤rÏ“þúņ“¹hœgœcŽN¼zŸ N3Î1ǧ^=?ÏÒµÅêãèÇ^·ùúk‹ÕÇÑ޼oóô,.WؘœgœcŽN¼zŸ¤c‹™;aqÛ–à{ž;7íqz¸ú#q×íþ~‘‹¨…ö\|€ #qËqôéþzL´N3Î1ǧ^=?ÏÐ'çãƒÓ¯žŸçéÚâõqôFã¯ÛüýµÅêãèÇ^·ùú+ì:çþ=¦í„aÇnÛüý$'çãƒÓ¯žŸçéV{¨šÞEÆQ€ùŽOóô“íqz¸ú#q×íþ~…‡gbbqžqŽ8=:ð9éþ~8Ï8Çxôÿ?H~׫¢7xßçè}®/WDn:ð=¿Ïа¹_bbqžqŽ8=:ð9éþ~‘Åþ¶q€3&0…ãéþ}‹~׫¢7xßçéWQ›†¿@ÈÀàûŸbXi2Ð9Ç9Ïž½8<ôÿ?PãœçŽO^œzŸ¬?k‹ÕÏÕžœoóõ>׫Ÿª7=8>ßçêY‹•“œsœñÉëÓƒÏOóõÎ9ÎxäõéÁç§ùúÃö¸½\ýQ¹éÁöÿ?Síqz¹ú£sÓƒíþ~¥˜r²`sŽsž9=zpyéþ~ 9Ç9Ïž½8<ôÿ?X~׫Ÿª7=8>ßçê}®/W?Tnzp}¿ÏÔ³VLqÎsÇ'¯N=?ÏÖ+sû£Ó–sׯÌÜõëþ~‰ö¸½\ýQ¹éÁöÿ?X¡ºb ïÎæ8ØÜòyúÿŸ¡aò³•ñÒZK¨ii©M¥Ádb¸c6µšÏÌÌaU£gAç¿cnÈU”m9%"½¾Yüccqö´¸Ž .}F Ög‘-žeý¡ÈPß$s 2 Å€;Cw<¹ÿ€7>ÿ_óô Ü\òçþÜûýÏÑ…ŸcÌ-LJ·¤ûwöYða–äÙ}£Ë™åYíòò|½Û¾×¼çÎï»×…¾ÙÿÖ€u;íßÙ±} ÎO›æmMÛ³Îìäóü«TÝÅÏ.à Ï¿×üý#7Q}©/€¬7llõÿŸþµ³ìZ§>ü9õÿ?Pœûðztäs×üýaqqËøqïõÿ?P]ÅÇ.?à Ç¿×üýU‰å}‰éÏ¿§NG=ÏÔ§>ü9õÿ?XEÜ\rãþÜ{ýÏÔqqËøqïõÿ?RÁÊûÓŸ~NœŽzÿŸ¨N}ø=:r9ëþ~°‹¸¸åÇü¸÷úÿŸ¨.âã—ðãßëþ~¥ƒ•ö&§>ü9õÿ?Pœûðztäs×üýaqqËøqïõÿ?P]ÅÇ.?à Ç¿×üýK+ìLN}ø=:r9ëþ~ =9÷àôéÈç¯ùúÂ.âã—ðãßëþ~ »‹Ž\À¯ùú–Wؘœûðztäs×üý@zsïÁéÓ‘Ï_óõ„]ÅÇ.?à Ç¿×üýAw¸ÿ€7ÿ_óõ,¯±0=9÷àôéÈç¯ùú€ôç߃ӧ#ž¿ç뻋Ž\À¯ùú‚î.9qÿn=þ¿çêX9_b`zsïÁéÓ‘Ï_óõéÏ¿§NG=ÏÖw¸ÿ€7ÿ_óõÜ\rãþÜ{ýÏÔ°r¾ÄÀôç߃ӧ#ž¿çêÓŸ~NœŽzÿŸ¬"î.9qÿn=þ¿çê ¸¸åÇü¸÷úÿŸ©`å}‰éÏ¿§NG=ÏÔ§>ü9õÿ?XEÜ\rãþÜ{ýÏÔqqËøqïõÿ?RÁÊûÓŸ~NœŽzÿŸ¨N}ø=:r9ëþ~°‹¸¸åÇü¸÷úÿŸ¨.âã—ðãßëþ~¥ƒ•ö&§>ü9õÿ?Pœûðztäs×üýaqqËøqïõÿ?P]ÅÇ.?à Ç¿×üýK+ìLN}ø=:r9ëþ~ =9÷àôéÈç¯ùúÂ.âã—ðãßëþ~ »‹Ž\À¯ùú–Wؘœûðztäs×üý@zsïÁéÓ‘Ï_óõ„]ÅÇ.?à Ç¿×üýAw¸ÿ€7ÿ_óõ,¯±0=9÷àôéÈç¯ùú€ôç߃ӧ#ž¿ç뻋Ž\À¯ùú‚î.9qÿn=þ¿çêX9_b`zsïÁéÓ‘Ï_óõéÏ¿§NG=ÏÖw¸ÿ€7ÿ_óõÜ\rãþÜ{ýÏÔ°r¾ÄÀôç߃ӧ#ž¿çêÓŸ~NœŽzÿŸ¬"î.9qÿn=þ¿çê ¸¸åÇü¸÷úÿŸ©`å}‰éÏ¿§NG=ÏÔ§>ü9õÿ?XEÜ\rãþÜ{ýÏÔqqËøqïõÿ?RÁÊûÓŸ~NœŽzÿŸ¨N}ø=:r9ëþ~°‹¸¸åÇü¸÷úÿŸ¨.âã—ðãßëþ~¥ƒ•öäÿ¢KÓî×Û¯^¿ãùóÕ·=Ômm"ù*@Ž:ÿŸÿ^%4kMXŒÿÇõŸûòè™+•ø‘ÿ"“×tþµÕøþ³ÿ~Oý%r¿?äRoúîŸÖ©3´¹ÿZ¿õÍ?ôQéêô¿úáoÿ -Isþµëšè"£ÒÿÕéõÂßÿ@ZmQHg+ám^ãHø}XØÿhj•Ü6¶~p‹Î>Va¼‚ŽÜõÛŽ¤VÝ÷ŒV;y/4ëT»°·Ó£Õ.fyš&û;‡*b]‡{â';X§ðóÉÛàïA­øM¹º¹ºXlîµÛÜK 2½Ã&èÙNUD‹ôþ:‘ø í´éôë]SmÕ«X\,д®-|ÉZ8âc'ÈÈ“²nmãåC´`ƒ¡ú猾Ãý§…·œÖšeåâÝ?ú“-¾ÀbrØ.@É`ÁwtÝbÏUóE±™d‹⸷’ á¶HªÛNÆ Vðq…¬øIÔîî®íí¬¬în,/-^hìÓy’p£Í,0KzŸ1¹ç[KÒîí¯îµFò›Ëˆ¢€›{s b8˲ü¬îwfWÉÝŒmà`’­EPV¯©Ë§Ëm­²\]ÞÊ-àIe1Ǹ$’̈cnŠyÀàF+øÚ_³]ÜE¦#&™Üja®J”T’hØCò4æÞ\nòò6tÉÛµ«é’êÛKkr–÷vR‹ˆXŒ‘î)$d2†RFÙ£pyƒŠþ —ì×vñjh©©Àöú™kbÅÕäšF0üãÊ9¸—¼Ì pw^µñ,³êPFÖ(–W“ØÛÎ'&S4>fýñíS÷2`‡c÷rNÞ†¹ë_ K¥|aky=õ¼%Mæoß&â?}&E?w$àîèh¢Š(¢Š(®oUñºv©›ož&›˜ÛQ¾6«33²„‡¹‘Á0ÀÆô뻎’°µ'PÖmn,þÖ 2ê)-îckFyб`Å$ó©ÚxÊ6<ô  î¼K¤YØ}ºâïe·›<;ü·?<"C(ÀàC'×oÈÌ ã #Vw½YQÛ>àNX«0"-›ö‘üÛqò7<Âñƒu;½úÖÊöm—í×6Ö†ß<×N¥L¦@»w\1 ÀÁ&{ÿk²júv¨—öRêKt‚I…›,B\…&#.æb×d?uãå9Ú“Åz4iµÓ”uÞ̶ò0A*LØ_Ü€UÁ2mÁGî¶*]øÛK‚hßμS~ö7ÞÞY&b6ªÌ 8*9•ÊA5Á2ýšîÞ-M58ßS-lXº¼“HÆœyG7ãw™³®ëÇÃRÅcn–·È—vºÆ¡²À^0Ó4Ä« `X‡ 9ôʆŠ( ™7ú‰?Ý?ÊŸL›ýDŸîŸå@ö©â‹i¤Ô4½¶+ı˜n—!Bìíª¸ ¼ó$`…,BÇ'‰õ/—IŸKµÄ­†4½f·eu™i A”âÚ^vsÉÚIáBéõxouKY¬µE–ÊÙ2܈X2¤k!”¨ÝàüÄÌÄ’xcPžùuiõKS¬DјdK&[uTY”ŒÊYŽ.eä8çgÀÜøÂâ :+ïìØDK,–ó,—^I£‘ãhm—i391>Ð|½ÙNå‚õ#ý{º?™®jo ÞÉ£M¥&®‚Òõg[õkL–3;¼ d™ Þ`'†-Òõíþèþf€QÏ#Eo$‰ Ì襖(ʆr݈=9 {Š’ ½Šâ{ ˜m.~Ës$L±\yaü§ €ÛO ƒƒƒ×›§j—w’jwÖpÁsjª\Û\âùÁ!w”B ]¼+¡ÉÝÄð•éÉ5äR™Œ–÷Ml!‚Öyf;Q˜Æ±îÚ<Åù†åÃ!ÝóRhúmö•§Kkuse4J§ÊÖ¯ä»9yd.ÌNK’rI$Öd^Ôι¨kV·Ù]Ëu(…naóÔÂÑ[ÆÄª:á‹[+)Ý·#' cOñ}Ö¯g,ŸºK¨¢´¹Š  H"uÌÀ÷3H@†r€HÍ»Ÿi6fándº‰à`…Ê`Ò"Æ<¡³2îƒ)¸|ëýáš^ ‹OÒM·½sÛ,®ciU¶[u p@%…¿\ néÇ9°|:òu(n¾Ûd<Ÿ,y±iû..6ÜA6ë‰|Ãæ¹ò0[håÙ±Ú€:ý?RµÕ-ÚkWr¶:KE$m€pÈà2œp@È ô Ön¿«j< qeakv’\Ånâk¶„«HñÆ„b7ÈËóÓqš½a¦ý†÷T¸ówý¾én6íÆÌCXëÏú¼çޏíšf©¦ÿjÚýŸÍò¶^[ÜnÛ»>T±ËŽ£®Ìg¶sÏJZµKyîDŠh'†Òå#Üëòˆö m °&Tù°<ãGâ½D•ÖéÂ"ïVkyN¤…¯ï,€÷dº÷—5/ü3ws3Ûj0Ãgums–¦I ˜°èU"«–9ä™cðòÛN±šÖ´&O!m¢ótTo1)ÍÁÞ ÏòAA¸–*~P õÿZiž¼½µK§»K9n!†M>ã*T6Ó2í S‚ûA ÄF•ï‰4½6k˜¯ešßìñ4¯$–²ˆÙU °GÛµØ('j’p­ÇÊq…sà›æÒn¬íµÏÞ_Øɯ`{–d-+,™C.<÷{?x%§Áž_Šíõ¯>ɼ›©n|ƱÍÜ›ÒEòÚã(¾gÊ»xTEíšéRòÝïæ±Y3s I4‰ƒÂ9p§=91¿åî*zÂðŽý‹ ÅÁöyæÄ²Ã¿“òª$[²Cyq¤qî{fãËÝ ™Ü?ï7ó4úd_pÿ¼ßÌÐf©ª]Û_ÚéÚuœ77—K8Äq”Vù•îÌ©·ÝÈÀ¦¡â¨­¼oâ;xPÃr¶ÏÝÌ TY >IÁèjÞ©¥ÝÜßÚê:uä6×–ñK7æhÌrfùUÐîÌIƒ»ÝÁÈ!–º%Ö›¦Ç§éú£Åomgomh$…\£Eœ³ž7‡€Û€§iRr([ø›P½K8¬ìô‹««µšhšßTg¶0ÄQù¢ïß Bãƒó1Våñ_ðXëðÀíks!b†VtŽF@Œ]»aO sU#ðÆ¡ójÐj–£X•¤3HöLÖì®°© ”2œ[EÉsÎþ9táЬ¢ðüuy¬ÇìL$l3Ä'%qÉÆ? ¦Þ%–{ë?O±IîÖy#·ó')©Äe¸S€¯'•… wŒ`Å`oêêPéV:]«ê!f7qÜ^´i Gäœ+¬M¼0¸FƒÈ •Ãá©lìlZÎùVµYC]Ëxæi˜<å¢ 0À|+ ¤Ü©©qà-3S»[e!ÔZH®ÒË’Ê!]éÏîö¤6%‹e˜¶ñÅœ·ègI¡ÓçÓ-/á”ÚÈÞX”˸Ìè#P¨§,@1É;èÖ¯t³Ý:%²ÈÒJmäò– :¤›v»¨WÊ),67)ÅKŸ Ü^Úk1]jžlº–˜4ã1·¨S>$` ؘd  •$½ß‚¾ßÖZ‡üJš[©ãŠ(vβ\,«&d,T¨óåÀØù2Nà mGĺF“v-onü©ÛfØÄnÅ‹‰ *à³y2£’@e”ïyn—ðØ´˜¹š'š4Áå cžœóö5ÏCáBOÁ­jZ¥¬ÓBÑŽÚÉ¡R©Ê`î•ÎI¹'?ìcäijš]ÝÍý®£§^Cmyo°qnfŒÇ!Fo•]ìĘ;±Ü‚ ³ñއ4QÛ\Ìë'•¶ci2Ù^52”–DÂ’X dâ ÅÖ×ZôV–‹4¶`¸»’ag7ï<¶„)…¶âU"F?&ìü¸ê3“¡x7S±Itۋز¡º²•1oûëƒo°WæŠdƒJ“€pyN<vÐÛZË«BÖv6 ci³!Œ{á`'>a©*º€ƒ8ùsÀñ}Œš¾Ÿc WR µ›'ìÒ‰!th€Y#Ùº0DÁ·>ÐÓÑ«ú~¿¦ê— ¤ÎÏ·ÌBð¼k2d ñ3$NWæBG̼üÃ8Z'‚¥Ñ/…õµÞŸÆyâ¶ÓŒ6âtHÄ„«“n¤>â2Í•9ŸÃ ¶ðÍÀxO f‰­ôô†gL¯3K’d”r6K§åÚnóÆ:„ÒÇss2,~né…¤ÍcFyJ¡eXß* 9R1‘Š·}¯éº}Ä–÷?Úc&(^I9}»UA.u!‚@BNÍsZ·ƒ¯o%¶ÓÅÒI¢Kyy,Èí¸„\Cr¼ÂåXo˜€y®s´“%ÿ‚nõ‹¹oukí2òç÷Lo¦n<±8ýäm+ȸ|a—Tó‚´ž2Ð#ÞÿæŽÕ®äA …£‰wîfP¹]¦'VX 3(:Éyn÷óX¬™¹†$šDÁá¸Sžœ˜ßò÷“ øm4;™fŽXvÉk(-–Ф“HJªð™È’òÌI4xGFþÅÐb‰àû<óbYaß¿ÉùU-Ù!¼¸Ò8÷½³qåO¥ø—HÖ¾Ïýwç­ÌO4,#p²"lÜA  ¨¡Èê¬~1ÐïæŠ;k™dò¶Ìm&Xs"+ƦR2ȘRAËŒœTxfîÂÃDM;Q…/4»° n-L‘Éî;Ô†Ì(GÌ@†AôÏfè#KþÐó1ucqæy8ÿe·\cwñ}Ÿ9Ïûã öž1Ðï- ÔW3,F%š35¤Ñˆ:.K ùrè:²ähéä®û×–]ø‚=>áæM›7oPº¬ŒüÀd:‘EfÜø+½HÓ¦»IMÓ–Ì -Ã$̯nêÎ¥¹LÛÉžC¸u«z'„ÓG¿·¼G²£Šá ¶„™L<ª‚HÀ€gqbK@@ÉÔì±bËrŽ—í²ÕãùÖSå´ƒqˆÇ=8÷F_èМ5Ó­"ÈÉo#,;$hÙ¥`¤F‘Æ÷ÂŒA Q¯‡6x.Ó@[¼Kik P]ùrXB˜åÙžpè­´œ`äUKï,–òYé×Iiaq§G¥ÜÂð´­ötDÛÆÇÄ®70áヸýÇŠôkWºYîÙdi%6òyGËRM»]Ô+å–”â=cÄÖú†·käÏ–(Ñç”Á2Ǽ¹S„·n‚£# ƒYº‚eÔlî´öÔÑ,®æ·QlL±Íp’«—}øth… §îåŽíÝ{L—WÒþËor–ó,ð\G,‘4R¤€ ¤‚SGZ¡i☛ ÝéµspÏöuÑä—Q"à3‘Àc´¸¨',ñM®¯£iSÜJ‹}v°Ç$qÆÁDïl. ç‡vsŽÙÏI£ër\[_¶­§ÿiÛ¬°¬ƒO$Ã!Œ°1ùÛ·î‰pÛñ‚FÞã6×áõ½­‡’—Ÿé1ØAQýÕÄB1çí݆ɷµ;Éï½²~hó0Ù,Ó¬¸kqigq;¼~T2neXò¼Nž£æç*:'ŠæÞ;‹yRXePñÉWR2#‚ï\þ‘àû}\ûu¤ûm–'†+m„ùhbµŒ ʼn8£¯]þÜÛ´ðΞ¾Ó4MJÚ×R†Æ¢_´Û«+2&Íá[ géž´{KÔ"Õô‹-JÝ]a».#Y Ô0Œàú×=7­Ž»eiióÚMfžky£Gc=¼Hb“fÙùÌr¹äù”է០éþÒ-ììí­Rd‚(®.!·Xšå‘q½ñÉ$äòOSÍb§‚.÷é‘K«BÖzTQAiÙ•“ËIíåcù„3bÙW!Te‰Çjé-5› ï°ýš}ÿoµ7vß# ñ ™nG냃ÏN _¬+}ƒûj]>ïì÷Z†ï"o/Ù³¹ÇÊNK4œãýfÞŠ1»@Q@Q@Q@Q@ ›ýDŸîŸåY5­7ú‰?Ý?ʲjdR#?ñýgþüŸú&Jå~$ȤßõÝ?­uGþ?¬ÿß“ÿDÉ\¯Äù›þ»§õ¤¥ÏúÕÿ®iÿ Š­iÝYX[»H‹-¬Z) 85V>„r*ÍÏúÕÿ®iÿ ŠKÿW¥ÿ× ýhŸÿ„Âÿóé©ÿàÞãÿŠ£þo ÿϦ§ÿƒ{þ*·«•²½ñøÂò ì¬VijÏê22ƦIÁt– r>_º¼úac{áÔPOákhšÖyt‘Ä$2` Üe™òÄž¤÷' àWT-Æ'“žŸw¯ßçùù&”?´¼¤xyô‹VÖûQÔ'¾µ·’8Ì–ñNünyM%¹9 7l†uÞ º¶‹yq®„þÝ] m´ßµüÓªD÷1Íö]¤3ÌHîùÿUê §s7}U ¶·’ââóÊ‚$.òHȪŠIbxsþL‚Ðby9é÷zñíþŸ—xÆ-v=KZŸQ[Y"›ÃÚÂÄñÞ9 n<€DPnSwÌKc» ‰]Ÿ…õF½Ôoííõ³®éÑEG~LM™XÈ$„¼!P… c‡™É!”RÔWfð´žNz}Þ¼{Ÿæ @q‰äç§ÝëÇ·ùþvÎ9ÎxäõéÁç§ùú€ççÓ{å}‹=ö}“o—Î<œq· zŽï¹ëfÐ æy8ë÷zóíþmÎg“Ž¿w¯>ßçùqÇû%~ Ù>—%¡¾7%üQ![äÄrÓ;Ím‘U*«“ +m µÜ“ŒóŒqÁé×ÏOóô.ÅÌÊæÐ æy8ë÷zóíþmÎg“Ž¿w¯>ßçùX'çãƒÓ¯žŸçèŒóŒqÁé×ÏOóôWaÌÊæÐ æy8ë÷zóíþmÎg“Ž¿w¯>ßçùX'çãƒÓ¯žŸçèŒóŒqÁé×ÏOóô.Ù•Í Ìòq×îõçÛüÿ&Ek”lÊàîn>^Äû{žÖÉÆyÆ8àôëÀç§ùúG°À;ðy¾ŸçôwaÌìFm8žOlíéÏ·ùþA´ây=³·§>ßçùX'¯>üž½y<õÿ?@ž¼ûòzõäó×üýØs2¹´ây=³·§>ßçùÐs‰äöÎÞœûŸå`ž¼ûòzõäó×üýzóïÉëדÏ_óô.Ù•Í çÉí½9öÿ?È6ƒœO'¶vôçÛüÿ+õçߓׯ'ž¿çèן~O^¼žzÿŸ¡vÌ®m8žOlíéÏ·ùþLžÔ,‘4‡ Ho#¯ßçµ²zóïÉëדÏ_óôŽç›i»åó߃É÷ÿ?Gv NäfÐ æy8ë÷zóíþmÎg“Ž¿w¯>ßçùX'çãƒÓ¯žŸçèŒóŒqÁé×ÏOóôWaÌÊæÐ æy8ë÷zóíþ“¨óܤQ“òõË{{žÖÉÆyÆ8àôëÀç§ùúF8¹“¶G¹n·ùã³»&FmÎg“Ž¿w¯>ßçùÐ æy8ë÷zóíþ•‚qžqŽ8=:ð9éþ~8Ï8Çxôÿ?EvÌ©=¨X%>t‡ r>^¸>ßçù<ÚœÏ'~ï^}¿Ïò’çþ=¦í„aÇnÛüý$'çãƒÓ¯žŸçèîÙخmÎg“Ž¿w¯>ßçùÐ æy8ë÷zóíþ•‚qžqŽ8=:ð9éþ~8Ï8Çxôÿ?EvÌ®mÎg“Ž¿w¯>ßçù2;\É(ó\øÛÏ íïþ{Û'çãƒÓ¯žŸçé_ëg2cðx^>ŸçØ»°RdbÐby9é÷zñíþ˜-Æ'“žŸw¯ßçùØ8ç9ã“×§žŸçêœsœñÉëÓƒÏOóõWaÌÊâÐby9é÷zñíþ˜-Æ'“žŸw¯ßçùØ8ç9ã“×§žŸçêœsœñÉëÓƒÏOóõ.Ù•Å 8ÄòsÓîõãÛüÿ0ZŒO'=>ï^=¿Ïó°qÎsÇ'¯N=?ÏÔ8ç9ã“×§žŸçê]‡3+‹@q‰äç§ÝëÇ·ùþqÃmº2|çswÔÿ‡ùípãœçŽO^œzŸ¬Vç÷G§,ç¯_™¹ë×üý °æc  çÉí½9öÿ?È6ƒœO'¶vôçÛüÿ.KÇZv—s¨iwº¥ö‰m1\Dƒ\±óíܹŒç&DTø䂨S‰îuÍ?*k_`†; Iî4³˜Ö•ŠG ±@Þ†2­µpðªN£¼Ž˜Úq<žÙÛÓŸoóü˜mGÚPyÒckü¹Æ@éóúW™M¥xfk{ÿí¿ ­¢µÊˆ.-–ëM·yÅó#HÜÃ`à¹y*‚Bú&‰'¤é2ÿgÿfï²Fû0m²÷xÀÁ_»Œ;P». AÆg“ßzqíþ˜-žO|méÇ·ùþvéÏ¿§NG=ÏÔ§>ü9õÿ?Uv.fWƒŒÏ'¾6ôãÛüÿ0Z3<žøÛÓoóüìÓŸ~NœŽzÿŸ¨N}ø=:r9ëþ~¥Øs2¸´fy=ñ·§ßçù‚Ðq™ä÷ÆÞœ{Ÿç`œûðztäs×üý@zsïÁéÓ‘Ï_óõ.Ù•Å ã3Éï½8öÿ?̃ŒÏ'¾6ôãÛüÿ;ôç߃ӧ#ž¿çêÓŸ~NœŽzÿŸ©vÌ®-žO|méÇ·ùþ`´fy=ñ·§ßçùا>ü9õÿ?Pœûðztäs×üýK°æeqh8Ìò{ãoN=¿Ïó ã3Éï½8öÿ?ÎÀ=9÷àôéÈç¯ùú€ôç߃ӧ#ž¿çê]‡3+‹AÆg“ßzqíþ˜-žO|méÇ·ùþvéÏ¿§NG=ÏÔ§>ü9õÿ?Rì9™\Z3<žøÛÓoóüÁh8Ìò{ãoN=¿Ïó°N}ø=:r9ëþ~ =9÷àôéÈç¯ùú—aÌÊâÐq™ä÷ÆÞœ{Ÿæ AÆg“ßzqíþ€zsïÁéÓ‘Ï_óõéÏ¿§NG=ÏÔ»fWƒŒÏ'¾6ôãÛüÿ0Z3<žøÛÓoóüìÓŸ~NœŽzÿŸ¨N}ø=:r9ëþ~¥Øs2¸´fy=ñ·§ßçù‚Ðq™ä÷ÆÞœ{Ÿç`œûðztäs×üý@zsïÁéÓ‘Ï_óõ.Ù•Å ã3Éï½8öÿ?̃ŒÏ'¾6ôãÛüÿ;ôç߃ӧ#ž¿çêÓŸ~NœŽzÿŸ©vÌ®-žO|méÇ·ùþ`´fy=ñ·§ßçùا>ü9õÿ?Pœûðztäs×üýK°æeqh8Ìò{ãoN=¿Ïó ã3Éï½8öÿ?ÎÀ=9÷àôéÈç¯ùú€ôç߃ӧ#ž¿çê]‡3+‹AÆg“ßzqíþ˜-žO|méÇ·ùþvéÏ¿§NG=ÏÔ§>ü9õÿ?Rì9™\Z3<žøÛÓoóüÁh8Ìò{ãoN=¿Ïó°N}ø=:r9ëþ~ =9÷àôéÈç¯ùú—aÌÊâÐq™ä÷ÆÞœ{Ÿæ AÆg“ßzqíþ€zsïÁéÓ‘Ï_óõéÏ¿§NG=ÏÔ»fWƒŒÏ'¾6ôãÛüÿ0Z3<žøÛÓoóüìÓŸ~NœŽzÿŸ¨N}ø=:r9ëþ~¥Øs2¸´fy=ñ·§ßçù‚Ðq™ä÷ÆÞœ{Ÿç`œûðztäs×üý@zsïÁéÓ‘Ï_óõ.Ù”ç¶Ûm#yÎHBpvã§ùÿ=qk¡¹?è’ôû„õöëׯøþ|õ4kM·¹ÿë?÷äÿÑ2W+ñ#þE&ÿ®éýkª?ñýgþüŸú&Jå~$ȤßõÝ?­R-¥ÏúÕÿ®iÿ Š­i+Aea2A$í¬ "‹ä"5;W$ žƒ$qVnÖ¯ýsOýTz_ú½/þ¸[ÿè @ÿö§Š?èEÔÿð*ßÿ‹¦ gÄÆw„xVܪ¬Iž¸$†ß‚~SGê3ÐÑJè _üÍ;ÂpÚÝÛÊ—}v8ÓÎÆik´{•p'ƒòõ8=0Õ`ho&üªÀ³Ö3*A;víÉnÈaÆG#wàÝfãFøo ØiÿÚ:•Æ©w ¥—œ!óßΕØo …Â$Ï]¸êEtWþ6Xíä¾Óm#½Óí´Èõk©žf‰¾Í ©‰6ï¶';X û£<µËs7ÍfÕ`Tf0ß©#ô‰"2 矺K •Ü93 ´iÞ.ä²¢±-o R #±ƒÐð #Œõ¹ýÆÿ`þÕ‡NµóšÏJ¾½[¹îZk}€Ä9|b‚¹,'A¦kVZ¿š-Zu’,†æÚKyá¶HªÛNÆ Vä.D.DIçîL~±7=8>ßçêyÃû“¬MÏN·ùúÜ¢ŽDˆËk´ŽðK’e ŠVl9çåc'8H¦ÿjÁ²vß36,fÎq„~~Pð¹$#†SQë¬Úmݼ6–ÑÜ^_H¶öé,¦(÷–B]±Q¶7ÆóÀ$ŒÙ|]|ºOöœz4monòEwºó eIšŠÝB3—B7—»|`rÌäCäFÏö„_nû'•x%ò¼ÝÂÒ_,.HÀ}»sþÎsŽqŽ“ùÃû“¤MÇ^·ùúgÃâXn|Tš-½¼’Fm畯2~dOÝÏÓF¡¶ÿTßõÑÿô#G ù ˜sòLí“sïõÿ?@Ì9ù&?öɹ÷úÿŸ¥Ê(äBäE30çä˜ÿÛ&çßëþ~˜sòLí“sïõÿ?K”Qȃ‘Ìß’cÿl›Ÿ¯ùúaÏÉ1ÿ¶MÏ¿×üý.QG"DS3~Iý²n}þ¿çéÄ ÛL6KÊž±°ƒÉãüÿ- †ïþ<çÿ®mü¨ä‚)O¨Emñ^DòþêÒW¯P6©É9^§°ãµ’émÌW›Û+i)Aä Ávò¤c+ÓrÖV­âË yåÔt­¶ Äј.—%!Bí#E€«Û€ÞaæHƒ.BÇ'Šõ+{õÑî4›A­Jñ"ŽùšÝ•Òw¥1S‹i¸·;9ù‰S‘ ‘Òj°F‘1†ÿL`]–31VË@_•2>ùÂã8 ‰„£í.BJ>@8²9n:tÿ?N~çÆ·údWÿÙpVY-çY/‚¼³Ç$‘´6«´™ä&'Ú­åîÊc’Á:¥ÿÉëš6£‘‘ùÃû“¤MÇ^·ùúR·Öí®¯¥´Ž Ee‹væ“N¸Ž>0®È‡N‡‘Èã¦ÍG< ¼²¤2Nè…–(ʆr݈=9 z‘G""3üWv×B8®ÓÊ/y¶²Æ2ðîQ¹z|à ö>’.¡]5ºÅxwsöIB 8 Wi:÷çtí¡¥ëÓjÑêÖ·ö‰=Ù#ØÝ›˜ÀÆ\¢*•ù“oÊ~lé±Ï{¦s%½Û[mí.&™Š¤lÌcX÷mbüÀ2aîËG""-GªÁ,rÃ~«¹Æe`\0¥AÇ̹8Âóœm;_6¡¼‘£Ey—û¦;I\˜.2«€2î8É褮V›ã;+½kP²–_Ü¥ÜQYÝEo#A"I2&éÀ1îf”…†r€HÍËŸhöFånd»…íÜ!G±œ4¤È±)vfQ½Ðf=Ãç_ï œˆ\ˆ¸—i#È«È1¶Ã›ygùIpÁŽ3ÇP@íI•Ú)ÈiUq?]ª={ “V4ÝRÓV·i­BÊH’ÄñI`:8 § B døƒXÔ´X¾Ña§Z^$—Û¸žñ *Ò´Q!ò7>OLÆzQȇȋí¨D¾fb¼;$H›ýS¸¶Ü*7 °Èlž¡›[¶‚Õ. E‘‚uþܨÃ*¡`~aò‘ž•ª†›âÐÚÖ¡¥êÑýšâ ¸­ãh ™àà…ö´åBn2HÊ í'ärÃ7.ÙrLN Qf@w.2d1¸ €kbŽDˆ§çîL~±7=8>ßçëù%ûìx¹ùëþ~š5 ·ú¦ÿ®ÿ¡9ù™¨ëvÚnÏ> FO3;~ϧ\OÓ»yhvžF3ŒþMy¨Eek%ı^:&2!´–W98ÎÔRÄôè?.É­êÚ}¿›ggi*"<³Ï{yöh!E%œ+œóŸ»Œ+ÀÑÝëßfð徬,§Y.~ΑZÜ)ÖIÝN»0Ò(lF#äBäEy|Ke¬7 m«²O»`]"íŸå8%”G¹Ld ööš}VaŽý¡¾0ù{°–S4¸b¸>PRùç‘·Žþ•›Šõ+‹öÑíô›C­Dò‰â’ù–ÝU%ec‹˜x1¯;ùùAmk-Oû_J±Õ´èsöË´ÛÅpÞ^wª2«oP ±ïG*" ÄÌ-õ@¥Kàéw!€ÃºS9ýÛqŒò½w®é[¶ŠèÛ´Žõ•"%të†@Î2`…Hàå³…îFy©eâø?²b¼Õ­ä²v¸¹·”÷B`™¢fy„`"|»·8QŒú¹â'Kžæ+é§·û4O3É-¤«*¡‘‚I·lŒ3mB[ Ü|§""+Ùy"_³já|¿7Ùy~Ξ^wgøzãæÆ9/OZ<÷‹}P5²³¹:]È\)ìb˜r{$žqžòÇâUÝæåýÁ "|0žV†S™]Ԁà Œ6vMsã%n®£ó÷¬P,1K$Ï'›K´…ž;œUù-äb 3€sÉèIàt(£‘"2_U‚'•ZüÂ¬í¶ÆfP¤í!Nã‡$Àd« zj=Ñ·^\ä›IB $†+´Ÿœwç ×kVr äFLZ¬À&XoÕw¢á¬fVÂv•ÏñŒœa~lãkTž ´¼Fh­õDè§ÍÒîb ±yêFBŽN'vŠ9r#&]V—†ÿ÷nTùv3?!7’0§I‡ý²n=þ¿çërŠ9r"˜˜qòL?í“qïõÿ?PL8ù&öɸ÷úÿŸ­Ê(äAÈŠbaÇÉ0ÿ¶MÇ¿×üýA0ãä˜Û&ãßëþ~·(£‘")‰‡$ÃþÙ7ÿ_óõÃ’aÿl›¯ùúÜ¢ŽDˆÎ¸”YFÉ~áë8ëþýx5ÔÝÿÇœÿõÍ¿•rÔš±qŠDgþ?¬ÿß“ÿDÉ\¯Äù›þ»§õ®¨ÿÇõŸûòè™+•ø‘ÿ"“×tþ´ÑLí.Ö¯ýsOýTz_ú½/þ¸[ÿè R\ÿ­_úæŸúªÖ-Õ•…»´ˆ²ÚÀ…¢£€cQ•`ASèG"€E`ÿ áùôÔÿðoqÿÅQÿ7…ÿçÓSÿÁ½ÇÿK@"ð'†`×¼7¦]]Ý]¬7š‘Hmîe€™^à&øÝNUD‹Žx•ºwÚáóÚé—e¦­¶ÆîѴ딞•ÖÓÌ™£Ž'2|Œ‰; fÞ>T;F1|<™áQd†ÒÜ^]*DÈ@¸ÉgË3dœõ'ÒºŸ:ãþ~þù_ð«$Ã×>èú­åÕåµ­ÕΟ{i$ÑÙ&ö’à(ó‹ ÊSæ7#';N“yk¨ÝêZ•ìW×1EnMµ±‚5Ž3#/ÊÎçve|ØÆÞ +=ë[[Éqq{åC—’I6*¢’I#ÞŸç\ÏÃÿß+þÀÔ¢²üëùøûåÂ:ãþ~þù_ð u*mJîÞkK˜íï,d[‹w–#,{ŠK”°Û#ã 9ÁäL~Ö,î­§²Ö¬O“æËåÝéÏ*%ÄÒÉ$²ÆdÛŸ0¨ ¸ª‚|Ï»dK?žçÏlí^p¾§ÚŸç\ÏÃÿß+þ€¦¾Ñâñm¿ˆm´û.£Šád1Ú"¼²JÈ|ÂãÀ+ŒòO˜ÜŽsÐV_qÿ?ÿ|¯øQç\ÏÃÿß+þÀÔ¢²üëùøûåÂ:ãþ~þù_ð  J+/θÿŸ‡ÿ¾Wü(ó®?çáÿï•ÿ Ô¨m¿Õ7ýtýÕ:ãþ~þù_ð¦E,á'aó7eõ>Ô€×¢²üëùøûåÂ:ãþ~þù_𦥗ç\ÏÃÿß+þy×óðÿ÷Êÿ…jQY~uÇüü?ýò¿áGqÿ?ÿ|¯øP¥Cwÿsÿ×6þUGθÿŸ‡ÿ¾Wü)“K9‚@gb œŒ/<})•'…5+·Ö`¿Õ­&±Õ’hg)bËt!euŽ5”ÊPÇîðNâFçf$žÔ®/×X¸Õ­µÄ`–;[uTIЈÊYŽ.fäH¼ìãå!¶<ëùøûåÂ:ãþ~þù_ð¦<Þ¾“D›GMf1g|“® g¸±Ýåhpb$Êàoó@8$1~™ãò_úæŸÍªqÿ?ÿ|¯øS³ùî|öÎÕç ê}©¯QÏMo,I4;¡U–0¥‘÷†àFG^A Öqÿ?ÿ|¯øQç\ÏÃÿß+þÀ«i¤ÞZÉ©jZ•ìW×6ÉnMµ±‚5Ž?1—ågs»2¾NìcoœØ¼7ª{Q×-.`±¼–îQ ÝAö„04VѱeI ZÕYNfig0H ìAS‘…ç¥?θÿŸ‡ÿ¾Wü)càxtíM.ÞúCÛln£i#•mVÙB am÷°1¿§åÛü4òuH.þÝb<,y±iÛ.nv\Á>û‰|ÃæÈ~Ï‚ÛW™±Úº˜ïZW•#½Þð¶Év€Ø|2űçóèÓÎùWhÂÆ‹ž3]gqÿ?ÿ|¯øS'½kky../|¨bRòI&ÅTP2I$`;Ó¶¯á;[Ööù|ÈZÑí§ƒ,<Ü«¢6àÃR{•Àëçdò‹Œwø~â²öÆk©"€K5Ý‹Iûõ{‰$¸d¨b‘žå˜a³/Q·¤ó®?çáÿï•ÿ <ëùøûå€9ùþ­Ü²Ç>§ ´’ÈÙÍ$Éwv Në™w”œ€Y—t`«cƒS¸ød—:\ö¢}*ÆI¼ÀÇLÒÚ2Úx*³0ûAl—Æ–cÔÉzÑ–t^£|©Yˆ‰NݬAg! ¯Qç\ÏÃÿß+þÁzÍpöë{™‘UÚ1³r«‘Œ€J¶}§Ò€1­| ökKoíßg´Ò­·yÝö)Œ»±»ùÆ?‡¯ÍÒ©é¿ -´È¢† 4ØRÝí„2Ûiiò$3Å/ïäÜLŽ|•—`Ë3?(^–KÖ‰âI/v<Ͳ5m€»`¶œ+z{Q5ë[ y¯|´,¨öYˆUޤîH>¦}‚ûV¹ó¼Ïí µ¹Û·^!Š-¹Ï?곞>ö;dèV_qÿ?ÿ|¯øQç\ÏÃÿß+þ©Eeù×óðÿ÷Êÿ…Agª&£h—v:”wVÒgdÐ2:6 A…mÑY~uÇüü?ýò¿áGqÿ?ÿ|¯øP¥—ç\ÏÃÿß+þy×óðÿ÷Êÿ…jQY~uÇüü?ýò¿áGqÿ?ÿ|¯øP¥—ç\ÏÃÿß+þy×óðÿ÷Êÿ…jQY~uÇüü?ýò¿áGqÿ?ÿ|¯øP¥—ç\ÏÃÿß+þy×óðÿ÷Êÿ…jQY~uÇüü?ýò¿áGqÿ?ÿ|¯øP¥—ç\ÏÃÿß+þy×óðÿ÷Êÿ…jQY~uÇüü?ýò¿áGqÿ?ÿ|¯øP¥—ç\ÏÃÿß+þy×óðÿ÷Êÿ…^»ÿ9ÿë›*å«big0H ìAS‘…ç¥cÔH¤FãúÏýù?ôL•ÊüHÿ‘I¿ëºZêüYÿ¿'þ‰’¹_‰ò)7ýwOëBv—?ëWþ¹§þ‚*=/ý^—ÿ\-ÿô©.Ö¯ýsOýU[Y͵…Œâ&1ZÀâ(ñ¹ñœ Ä žœ=ÅIEsÛúÿý ·ßømÿÇ(þß×ÿèM¾ÿÀÛoþ9JÀsúp—„4Ÿ¾•u©ÚÞ_ê¶¶ï‚)ßÌé‚%’Á…=¸.ºÔ§£]Ükj‹­¦ˆ¶úp¹‰´â{˜æ6Ø8ó<Ä‹ý_?êº|µØø ô¯ Åm¨BÖ×&ââSÅCÌî¹*Hèᮓípô5wB<ÇÅðëqêZÄ·éjñKáý\DÑݹ ò¶b#þæï˜–,Çp ‰]‡†u#y¾³ýµ§Å/þboÞ±<[¢UCµV6Æ73“‚¸Þû\ßý kƒûÿ¡¢èDÔT?kƒûÿ¡£ípô4]Îø¿ìžf•ý§äÿd}°}¿í8ò<¿"}¾nï—o›åcw¶wÅrfãÃ’Ú[éú…ÞŸipZâK[ÛÉÕ>Çfnf=¦ó€åìhøUDbHXѽ,\Ãæ³o਽?ípô4] àôk=3Mñ§—Ñoï§¿»yviþUý˜s,ždŽX±ND`íPÂD à€Þ…Pý®ïþ†µÁýÿÐÑt"j*µÁýÿÐÑö¸?¿ú.€šŠ‡ípô4}®ïþ†‹ &¦E÷ûÍüÍ3ípô4ÈîaU ¿ñÐúÑtš*µÁýÿÐÑö¸?¿ú.€šŠ‡ípô4}®ïþ†‹ &¢¡û\ßý kƒûÿ¡¢è ©“¨“ýÓü©Ÿkƒûÿ¡¦Is Dê’¤ C<óW¸Ñï®u×Юímõ»x/cO³Î?´onr˜Ï™å¡û«Ý‘ …HÔ¼sÿÂ=ý¸ŸaþÌÿ„?Ͷûo‘åýƒÌò¯7y˜ýÞíßeÎyÏ“ßmzWÚàþÿèhû\ßý B<ÆüiGÂ¥íF¢­vÚRL„É$y¼”°bB¤…|­b•ò°òëÔGúöÿt3Lû\ßý 0\Ãæ³o਽C,Ô¿kûÏØ<Ÿ¶yMäyùòüÌ»±ÎÜã8ç¿kƒûÿ¡£ípô4]äü¡o/Š!Ô<Å¿RÒ ¶Í¬%²LhÆÒ0Š…UQœùuI¬üEªÙÞkßÙ:y¿•›Q)ooö%Ý ¬’ã ¹› sÜÉs Dê’¤ Ej¶6~w6´ò´Ò±ÜÌî{’y< PC8MûWD½×g¸šÚæmONŠëM0¢Ã¾h,ÒL†_1Y|ü`¨È<ƒQ¼_«\êmim«¤izÑ0g†k­<5å¼F7ÉQìÁWóHeëò’Þö¸?¿ú>×÷ÿCEÐŒÏÜÝ<ºµÕÓÝ>ð[¤òª¬’)†)rÛ®A”ŽpS’s|Y%î›5¶µ¦Â“]ÅæÙ*J~BgEòò2LñÛ¦s€‰Àù—¥û\ßý 1na ä¿VÈàú .†yâWKÓîM²$oáèH·•Ü‘É:o’FÃVÙ-eß´ª—rTà¢Ïiâç·µMSÄö¶zs´ûu‹i¢u‘”C²34¬.NùþâõXÎRL÷ÿkƒûÿ¡£ípô4]ó_ ê:¤>±¼]Nc¤ºU„v&8¼“ÐZ$ìó7;°ùñ8# šo‰üE>w=Ƶ¢Á)µY.âðìùL‘‚ŒD[¶E )•·ªý௟Jû\ßý kƒûÿ¡¢è.ñ¾÷žÔ£»×otûi4yd´7¿eI5)ά™ QÔ*E·ÉÁ+*œÊkVëÄ:¥ÏŒ²ìµhm~Ù,öim4±I=«$2œ[ùA‚–Œ0-#W(Ü6÷Ÿkƒûÿ¡£ípô4]‘áÍJÿXûMýÔ_eƒå·KMÊû%"s¼N$-:~çpáëj/¸Þoæj¥’ØéÖÖ6ƒË¶¶‰a‰>cµO'€:ԱܪAâ'¡õ¢èsÅ?Ù?ÛÚWü$?bþÆû-Îïí ŸgûFè<¼ïùwíó¶÷Æüqš‚^Â×À°x•æyàÓ,¤¿†à²»4Ÿ"¬ŒÄžDe`ä»ð¤×[ö¸?¿ú>×÷ÿCEÐc>™áÉ­ìo޵áTµF¹Q ŲÝiÖîâbˆïEG0Ü\¼®Bôº¬žg‚t›“aý>Ÿq-©]¢Î5¸Ü7jÆ ä IÆ+©û\ßý 0ÜÃæ«oà)µ@yþ­â WñZßXxŽ=*ëì–sêvòÂñ‚©}!{†@Ùò²:á×û¨ø‹_¹»ð¦¯¥®ý‚ì˱?îSûW縌rêCæ8àoÝmÿ]‘Ã&=&áln¦µšaºKYLП˜mrŒ„ñ×åvúý*ÇÚàþÿèhºÌ|Wâ JîïVÒmnT½‚öÈiO:5ʶ˜‡X à;F ±‘Ã,€í†Ûz¿ˆµH.m£Ò|Geqj-D¶×wW1í Œ’Œ,p?·b.Èv?ÎI`G¡ý®ïþ†µÁýÿÐÑtý¤o¼c¢¥Ö³þ±t‡GÌCɉ!ºXåÛ·Íù#e˜©ó2 ãzîóWÄ«¤Å'îîåŽîŒ'îmãOßâù„k¸œÿ¥dª5½ö¸?¿ú®‹b—ó_(ÅÌÑ$2?ÍÊ!r£82?çì(ºÑüU®Écysk#µžùà·¸W“M™yŸ¸Ý{–™XÉù¶>gðLj5k]·Óεk-´ režÕ£¹ûJÆ,Ý@”".s;©!Ë‘À8ïþ×÷ÿCGÚàþÿèhºŽÖ®ï›Ç°i¶—Ïb—Kj’Mo F]¾]ûãs£q˜“‚9Æ7šÝî¡àtf ÜzÜ6©<‘ä1‹RX•ÝT¨$„‚í“£ì~×÷ÿCGÚàþÿèhºÎu«ïi"¾2jZzË41Í|©ö8­áÍëZO9T—U]̤á@†ªŸÛ—‘kV“_ëðéËw¬7Œ ƈi2óFîòãùÂlåVê?kƒûÿ¡ª÷ cu5¬Ó ÒZÊf„üÃk”d'Ž¿+°ç×éEÐzk¬æËRÔYîít›=GPg‰Wsˆäò­æã2Aç•è– aFÞmšïFÓd°Õmn´W¾k FâîImÙMâÞB.ç;…Ì„€@Q´ü£œú¢-Š_Í|£3DÈÿ7(…ÊŒtàÈÿŸ°«kƒûÿ¡¢è |E3Ì ¸ñ?Ù´Q,Â{6ëö’©Tó '-%ÀùTÜz«ä·ñ…úØ$z­Ô6ÍÕþš!±‘V9 R‹_8$móÜ× žH!†r¼wŸkƒûÿ¡£ípô4]ÀYÀÝBÜêw5¾‰$3Ç!u¤‹m†€„PT©ìÙažMi^\ëú}þ¯ ®£6¡ý›£¥ÜPKmIupæä*±WåùmP *¸#æÖý®ïþ†µÁýÿÐÑtš½õæ¯g¦iž(š÷Ožê4:¤ m#î0];ÂcòøòalmÜ7òpÃÞ ÖoõL}¶;íe–¦2оSOæîvò/–6îËrrÍÆ:oµÁýÿÐÑö¸?¿ú.€óqáËûK‹ÝïOŽÝšÜ\[A:´·6¿i„ÍqyÉb6nϙʣÈ\æFT’øG¿·íßÙŸð‡ù·?bóü¿°yžUžß/?»Ý»íXÇ9ó»î¯Jû\ßý kƒûÿ¡¢è9Ò.4{« ×Q»µµñ ¼Fòæúp·æo.6ñ;ÀløùNöP ;”Õ×.n´ßj·Ö·N·؈llJ©]BhþÔÅ#{”Ü„ˆØ˜g‚+±û\ßý kƒûÿ¡¢è  êFòþþ }gûkOŠ(^;üÄß½c x·Dª‡j¬mŒng'qÇ‹_Ú\^è·z|vìÖââÚ Õ¥¹µûL&k‹ÎK³v|ÎUBç22§§}®ïþ†µÁýÿÐÑtšÁÿ÷öãý»û3þÿ6çì^—ö3ʳÛåç÷{·}«ç>w}Õ$×ìþ{‡OøI•lÔW(ßÚ/‘c¹Ü±æ«+8­½«Ñ¾×÷ÿCGÚàþÿèhºj*µÁýÿÐÑö¸?¿ú.€šŠ‡ípô4}®ïþ†‹ &¢¡û\ßý kƒûÿ¡¢è ¨¨~×÷ÿCGÚàþÿèhºj*µÁýÿÐÑö¸?¿ú.€|ßê$ÿtÿ*É­ .ahCòTÁ¬ú™ˆÏüYÿ¿'þ‰’¹_‰ò)7ýwOë]Qÿë?÷äÿÑ2W+ñ#þE&ÿ®éýh@ÎÒçýjÿ×4ÿÐEU¶ÿ}—ýzCÿ¢Ö­\ÿ­_úæŸúª¶ßò²ÿ¯HôZÒJ(¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ÿøþ³ÿ~Oý%r¿?äRoúîŸÖº£ÿÖïÉÿ¢d®WâGüŠMÿ]ÓúÓBgisþµëšè"ªÛÈ>Ëþ½!ÿÑkV®Ö¯ýsOýU[oùÙפ?ú-i%Q@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÏüYÿ¿'þ‰’¹_‰ò)7ýwOë]Qÿë?÷äÿÑ2W+ñ#þE&ÿ®éýi¡3´¹ÿZ¿õÍ?ôT¡qÚÛÄl_tpGÄðc*€ùiíWnÖ¯ýsOýUâ[X&{È•¥‰$*- r†Æ|Áž´&n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3ÏôøøíºÿŸ?ïüürŒÝÏŒŸ÷þþ9G“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿã´fëþ|dÿ¿ðñÊ3uÿ>2ßø?øåLßóýþŸþ;G“7üÿGÿ€gÿŽÐ›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”y3ÏôøøíLßóýþŸþ;@n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQäÍÿ?Ñÿàÿã´y3Ïôøøí—wnïlbHÌŒÌÓDzÄê8W'«ÕÊüHÿ‘I¿ëºZêTJ—P#\¤«!p@·(F#v;ÛºŽÝë–ø‘ÿ"“×tþ´Ú\ÿ­_úæŸú¨ôÌ}–È,c8##"R\ÿ­_úæŸú¨ôÏøô³ÿ¯ÿÑ"€$ûLŸÝ‹þý/øQö™?»ýú_ð¨h¤2o´ÉýØ¿ïÒÿ…i“û±ߥÿ à¼f/u=Q4û 2æök C} Fñ"ÃvÌVÚC½×!Lsdr9´ž*}GR{‹MaüÉnìÅ®ŽâÍo,P3¹P¾a*$‘²g9Šz ·â3ÛÆ¥••“âµcIöO;w™›ägÌò|ÅóvãæÝåïÆß›?wœW#ª\èVqY]x:"{¸neŧ*6÷WF5a'$^¸ GûLŸÝ‹þý/øQö™?»ýú_ð¯;ºñðÁr,üMmu§#@N£-Ų9f—†'Ùä™HˆV²Ã*T‡^Öeñ¬?lKxË[,vwαÜÜDñÆÎíÂY˜WDSÈ ‰ö™?»ýú_ð£í2v/ûô¿áPÑ@ÌM{Pº_xfÙ%òážîo5cP»À·€p9ç2ì+n¹½þF¿ ÿ×ÝÇþ“I]% AEP0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(3ÿÖïÉÿ¢d®WâGüŠMÿ]Óú×TãúÏýù?ôL•ÊüHÿ‘I¿ëºZhLí.Ö¯ýsOýU»–ËF·ž9o%[‚A"³“\€:ääô©â¯\ÿ­_úæŸúª‹kF‘­ÕðTEEâà€?Õú Àþß×ÿèM¾ÿÀÛoþ9Göþ¿ÿBm÷þÛñÊè>Οó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿ >þ]WQfŸÂZê0] [ë‹ã$ýØçžzã?•?MºÕ4˜æKOjŸ¾“Í•¦Õ!™Ý¶ªä³ÊOEQ×µu¿gOùû¾ÿ¾âÿãt}?çîûþû‹ÿÐ3gªk6öv¾ ¾ŽÞÞ5Š$ûu¹Úª0L™<ôZêšÅ”-¿‚o‘I%#íÖçæw.Ç™;³ø×MötÿŸ»ïûî/þ7GÙÓþ~ï¿ï¸¿øÝsÿÛúÿý ·ßømÿÇ(þß×ÿèM¾ÿÀÛoþ9]ÙÓþ~ï¿ï¸¿øÝgOùû¾ÿ¾âÿãtÎøzN_k¥þ—.ž—0[GK,nIO7wÜcýå뎵ÓTgOùû¾ÿ¾âÿãt}?çîûþû‹ÿÒçÄZä—S<~Ô 3±R×vÀãΟó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿ¦3wªëw¶¯o/ƒõEGÆL:œ1?<2Jtìj­„º®;M„µ×b»H¸×uÆAû²N@Οó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿ û_ÿ¡6ûÿm¿øåÛúÿý ·ßømÿÇ+ û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€9ÿíýþ„Ûïü ¶ÿã”oëÿô&ßàm·ÿ®ƒìéÿ?wß÷Ü_ün³§üýßßqñºåµ­_ĺÅLJ®l-ì§–I%–âh]äõaÛ½uõÙÓþ~ï¿ï¸¿øÝgOùû¾ÿ¾âÿãt€’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñº’Šìéÿ?wß÷Ü_ün³§üýßßqñºüYÿ¿'þ‰’¹_‰ò)7ýwOë]\pD“$¦k¹=ÛDÜ•+“„£õÊ|Hÿ‘I¿ëºZh³W‘á´žXÎ-ƒ)ÇB#ªÿe›þ‚?÷ÌüEM®È>ëþ½?öp¾'Óå½ñ6¦Ðé–×2&—jìäÜYn–àyШBY—ïà2±ØÉ"€;O²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"¹)µýNo¬VºŠÙ™à[{s8-w¢3J‘ˆ™ä3€ë" Ù–V'=<]©>¡qwð˜'Îtiã’}5<øQ¼Ä(‰’9\‘!' ÛÒFeyR=Rgh›dоQ(Ø ƒòðpÀýõ§ý–oú\ÿß1ÿñÄiº­ÅƒêÚŽŸ}ý¹hÚ‰€·™óå{kq ÞŠý`` ~÷s}Ã]¥Œû6i·iÔ-í¢{‰<½›÷nPø Æ7à1ô ý–oú\ÿß1ÿñ}–oú\ÿß1ÿñjŠUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP_²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"­Q@~Ë7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠµEUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«Tà#I#ˆâA—sÐ W†Ù£q<÷ó›xˆi7ˆÀ rFBޏ?ýnµËüHÿ‘I¿ëºZêd‘]c¸¸…¸oôk_â•¿¼Ý=3ÛÉÆ>N[âGüŠMÿ]ÓúÓ[Øj0‹˜Þb‚H œeÎ;Ô›m¿ç¬¿÷èñUà¯ãHåÛV¸Éô ˵7þïÐZçþú§Ê+žù¶ÛþzËÿ~‡ÿFÛoùë/ýúüUxü%Þ ÿ µÏýõGü%Þ ÿ µÏýõG(\÷Yì´û™­¥•¥g¶Ë Ù¬Q“?{Ÿ•ØsëSí¶ÿž²ÿß¡ÿÅWÿÂ]âú \ÿßTÂ]âú \ÿßTr…Ï|Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¼þïÐZçþú£þïÐZçþú£”.{æÛoùë/ýúüUm¿ç¬¿÷èñUàð—xƒþ‚×?÷Õð—xƒþ‚×?÷Õ¡sß6ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿНÿ„»Äô¹ÿ¾¨ÿ„»Äô¹ÿ¾¨å žù¶ÛþzËÿ~‡ÿFÛoùë/ýúüUxü%Þ ÿ µÏýõGü%Þ ÿ µÏýõG(\÷ͶßóÖ_ûô?øª6ÛÏYïÐÿâ«Àÿá.ñý®ïª?á.ñý®ïª9Bç¾m¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿ^ÿ wˆ?è-sÿ}Qÿ wˆ?è-sÿ}QÊ=óm·üõ—þýþ*¶ßóÖ_ûô?øªð?øK¼AÿAkŸûêøK¼AÿAkŸûêŽP¹ï›m¿ç¬¿÷èñTm¶ÿž²ÿß¡ÿÅWÿÂ]âú \ÿßTÂ]âú \ÿßTr…Ï|Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¼þïÐZçþú£þïÐZçþú£”.{æÛoùë/ýúüUm¿ç¬¿÷èñUàð—xƒþ‚×?÷Õð—xƒþ‚×?÷Õ¡sß6ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿНÿ„»Äô¹ÿ¾¨ÿ„»Äô¹ÿ¾¨å žù¶ÛþzËÿ~‡ÿFÛoùë/ýúüUxü%Þ ÿ µÏýõGü%Þ ÿ µÏýõG(\÷ͶßóÖ_ûô?øª6ÛÏYïÐÿâ«Àÿá.ñý®ïª?á.ñý®ïª9Bç¾m¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿ^ÿ wˆ?è-sÿ}Qÿ wˆ?è-sÿ}QÊ=óm·üõ—þýþ*¶ßóÖ_ûô?øªð?øK¼AÿAkŸûêøK¼AÿAkŸûêŽP¹ï›m¿ç¬¿÷èñTm¶ÿž²ÿß¡ÿÅWÿÂ]âú \ÿßTÂ]âú \ÿßTr…Ï|Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¼þïÐZçþú£þïÐZçþú£”.{æÛoùë/ýúüUm¿ç¬¿÷èñUàð—xƒþ‚×?÷Õð—xƒþ‚×?÷Õ¡sß6ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿНÿ„»Äô¹ÿ¾¨ÿ„»Äô¹ÿ¾¨å žù¶ÛþzËÿ~‡ÿFÛoùë/ýúüUxü%Þ ÿ µÏýõGü%Þ ÿ µÏýõG(\÷ͶßóÖ_ûô?øª6ÛÏYïÐÿâ«Àÿá.ñý®ïª?á.ñý®ïª9Bç¾m¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿ^ÿ wˆ?è-sÿ}Qÿ wˆ?è-sÿ}QÊ=óm·üõ—þýþ*¶ßóÖ_ûô?øªð?øK¼AÿAkŸûêøK¼AÿAkŸûêŽP¹ï›m¿ç¬¿÷èñTm¶ÿž²ÿß¡ÿÅWÿÂ]âú \ÿßTÂ]âú \ÿßTr…Ï|Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¼þïÐZçþú£þïÐZçþú£”.{æÛoùë/ýúüUm¿ç¬¿÷èñUàð—xƒþ‚×?÷Õð—xƒþ‚×?÷Õ¡sß6ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿНÿ„»Äô¹ÿ¾¨ÿ„»Äô¹ÿ¾¨å žù¶ÛþzËÿ~‡ÿFÛoùë/ýúüUxü%Þ ÿ µÏýõGü%Þ ÿ µÏýõG(\÷ͶßóÖ_ûô?øª6ÛÏYïÐÿâ«Àÿá.ñý®ïª?á.ñý®ïª9Bç¾m¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿ^ÿ wˆ?è-sÿ}Qÿ wˆ?è-sÿ}QÊ=óm·üõ—þýþ*¶ßóÖ_ûô?øªð?øK¼AÿAkŸûêøK¼AÿAkŸûêŽP¹ï›m¿ç¬¿÷èñTm¶ÿž²ÿß¡ÿÅWÿÂ]âú \ÿßTÂ]âú \ÿßTr…Ï|Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¼þïÐZçþú£þïÐZçþú£”.{æÛoùë/ýúüUm¿ç¬¿÷èñUàð—xƒþ‚×?÷Õð—xƒþ‚×?÷Õ¡sß6ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿНÿ„»Äô¹ÿ¾¨ÿ„»Äô¹ÿ¾¨å žù¶ÛþzËÿ~‡ÿFÛoùë/ýúüUxü%Þ ÿ µÏýõGü%Þ ÿ µÏýõG(\÷ͶßóÖ_ûô?øª6ÛÏYïÐÿâ«Àÿá.ñý®ïª?á.ñý®ïª9Bç¾m¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿ^ÿ wˆ?è-sÿ}Qÿ wˆ?è-sÿ}QÊ=óm·üõ—þýþ*¶ßóÖ_ûô?øªð?øK¼AÿAkŸûêøK¼AÿAkŸûêŽP¹ï›m¿ç¬¿÷èñTm¶ÿž²ÿß¡ÿÅWÿÂ]âú \ÿßTÂ]âú \ÿßTr…Ï|Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¼þïÐZçþú£þïÐZçþú£”.{æÛoùë/ýúüUm¿ç¬¿÷èñUàð—xƒþ‚×?÷Õð—xƒþ‚×?÷Õ¡sß6ÛÏYïÐÿâªk€f_ôx¹Šxfãæcþz}6øWü%Þ ÿ µÏýõGü%Þ ÿ µÏýõG(\÷%ó—}É(×Íò«¹ ñÂÿ‘œœmå~$ȤßõÝ?­y¿ü%Þ ÿ µÏýõUï o7…°ÇµínÔDEôˆˆˆˆˆˆˆˆˆˆ²drHhÆ’¶þJAâ jžYæÆ8Üá•r%y/h̬ [ª|!KX±¡ «ª°³m¬¸kw4Žã»°(\íEbá©ÁœñwP[àÖ—rXÄ* ÏÍ—RÂéÔŒ7‹¸)]/±k5ÑÍÍÔÞÌ£õ¯zùJ¸7ñÅD$’IÌ¢"âI$ÔíVQJ´ddSSøHÐsREË im¸Äç!ϱ^éÏŽ) òè-` æv­…ßÄà¼IR(Üχzšù"€jœêÇÚ°º}Ìl†æNØþQLhy¨µÓNƸ’dpÏ3EÒzªÐ[ØCA˜`*̽A× œžV€4 ãŽ×ª£ËcšÏ3¥.ð—pÇÆ– €@äÉG½µmÄdÞ^±á°GO¡µö”rãB³ÿ¨®kÍùp\ˆkµ7a\nçlè\æ¸T’|œ‰\Ķ„‚¨+}ÑCÔmé¨6hü®ÜNÃúJéºuÅbkÏÝB¨E²x èr9­s’Äøžèä\ÓB¨ Š„DEá}DDDE&ÆØ\=Ú¼,ö•\ì±˹ççu;³dÀéÛ¨ÑWx(n$Ñ#<‚œ,¢Š1¡´4Ó¬PªÛ§0±¸†áQÆŠÛu¸ü¼ ŒSÌ•” ÅîTk©µi5àÚÀ¨Úêp/vÜ‘xæ—6ƒ àQd Ë›¯äìÙµZÉ{СܿT”à܉e,m@¯Z„I$“™Yýãt6Ù‡Cß»HÈ)"n:Š""æÔȈˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠN×™¹Z³œ¬þ]G®þJÙ¼å'Øßç\ÿ§™¯yµÑÅØþ—}ŠïÖ®.·¶®ZÝO`_¡®txÕÁ¿æÏÁfÝ ßÚv?ຆ’c‘c~zÊ× y/#?º`4cMGP[`†g·\m';ØË’ékŽðwwæ:È_',l.v9n^M 7Vò[ÌÝQJÒ×´ô®>8$·¸—m¹Æk þ¸Ï…ã±v3G,Nïó¢¨õ”“Aãj+weWiúãùØ~!ntžªÂòæCyMssU›Rûy 2ò 2¯Úý‡¿"¨o6á#¢ççðHXñÔy¯ [²ÞþÍ—âÉQÌs©RîÛH{H¦?)ä·.£eë*4r;Ô='ä´¬ïèó˜PЃ˜+•Eœ±> opX,4´–¸PƒB ÙPˆˆ¾".ŽÈ2ÖÂ'»-:Èç«.z(Ý$€S9+»¹9 Œi‰˜4q4«[£Z>Yí'@å.Ù¼ŠïU.Æ­ Ù]NîQ®nq3¥yÄœ!À-Y¯H 49¯*º-hvÀ & 8‰ [â´¸˜jcN¨ä£ßYIDØ–¤×T¯®_ .|lÓæÇ!¼ï_Zæi.Zf™®n–ûV”EÊ\\Iq'¹%+J`((¬€ DDP¯¨ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠçÒlÞãòG#¿áÓö«?[äZÁϯh £bÕ}<ŸDZiÍû–ÿYT‹Qž/û,q¿0 ¯ò_5›pkÔm‡¥Ž>:—kcd'¶‰úÈv–ÔTS­#t,!ì 4šµñà­ÁÖ‘(àÐì['‘íi-ñljÂäç’I$p{ªkµ^év–â6½Œn·Íã«lñ2FTbªdi…ôùNJU­ë¤%̘sŠØc3ŠHÀÂ@4­sì ݼÒ[I¨l^:·J÷Eöce% ƒbÞ N!»nàjϦ99uw=¬rŽò+ÍçcŠîÊHê´â)›\2r©Øw9\×í×çMí¯wãgt®§§ugHÁ¢Ÿ¶hêúNÞåwk3F·‚Ù£hSrkþNQ·ŸO²X‹˜höâ×QrÅ$2ä\3 éùl~²íDóT×›MÝÀ’Pi^ë5ê[B9†­CÝe÷p?"¬ØuF4ËW2•˜ö.ByîåÂÇHãÁ¢ªÒ ‚Lî^î1³?IÙÙ[ln†,Aþé¸;õŠ×=„0àÜø4p^ìú|dë¸w.Æ Ïi__Öu¸¶>QÃ⹇EmfÍ-\JÆf58 â?MÍw?™!ÐÃâUݧ§­í€£{üÎ+q÷ÇŠ!¤“p ÄÝFÛ‹‹ä9®1ûeËäqkŒ|çØ­6­’ç3YÕÙ{Yþ—)LÖV–-„žª^Õ„V…R—¬ÆCyOßf‰ìN pôã9GW7Oò$a†®è^IpÞð§_I÷.eI ÆàAª£ÍÃ\×›—ȧ…öóÉ‚‰ÅŽ-4+Ü\úVÛpÝ&¼–RØæpp‰¢†´:s*“qôÃáÜ|‹i­ÝŽ¢u9”Í® X¬gºd‰'N“Z™]dJ Ä849ü§H4ò×z¢Y² dkM9ð] { vôžlŸSòìnI-”¤ãäµ-ºHu ïÒ=,Äø¯¦þ2ykº¸sùC´³pÌö¬n\e:#Ö†Y0»ÀZ0÷/AÊŠË'kªFå\HZ(ÜÁ‘bZ©X™FùÞŠB!ó`ëøØß*Üi`È7µ® Ž[VÛ‡9¸3S˜t嘊Å|º&×ÔðçO“š¾*çÎiip%œÆGçsyvõãîUÑÉ,†• r ÒÎů ït•sÓcy×£M*\àOj ëpjóCöƒ‡ã þbR ‡@àNj\Vvñò*çd_ö:-¾=Zˆë9•=¶Ñ€`%¹BGR”YÂcmI§›j§5àÈV›† ¶ÚÚW¸< ƺ³ì lv”†'šß¥”<Âò9siÃ’ #®<8ܵï'z¨ùžê‘‡œaºqÌ`V—JèÉo±d] Ó6œÖ™ Zqsr<–vK-»„nÑqmƒš6´¯-n59”2÷‰q©)$Ô<úi—Lq<¡xX%EGÊ£ÌÐBØcgþƪ칎eYŠØ=À»•›M> KîX3*·‹3(ƒÏcd9 ý¹-.’ ›ªºƒ»B‰-«%«<¦éæs[6À^uë[…”!þaŒóQ\u‰*4Ç ˜ñs©½Ùx.–Ç A]VMBº2 š~§ Ÿ}-ÀŠ8A„DŽ št¤6ÖGTLXúç…¤²¼–x×1‚Hò{Yâ+_œ'Ó Ïš˜q 5Ò=Ôp£kF&½§ºmácDQû`Sš‡´Ó&“À[w·$Õi#¡qÏO€õ³%¯ó·í­Ô:š3–¸v³ÄìG3kÏ‚ƒ-«â5n\–¥ŸXw+nN |˜½½Žwæ¹ËÛâC™»hïú¨&K;¶k…áàòá×ÉT_XÄê‚ âk;YÜKãÓ/ýØÎ‡þÓ~Õ m¦èc ÂoÃ/uß´Ü=Ë¥´¿‰íÄÕ§¼x*HÖ;ÎYÁÿQü1qbèÉ,Är9¨¤W÷Wš´º´ã*Ü?jl$>6‘ñSÍa ­÷ pk½5å?E³È jp{ƒIèPªNnŽi#n˜Éâ3WÌAí£@7 €–ÐÕØmNn:{U ·c+W§yþ’ÃvÇ1Õ"2ï™Àšâ·Ü6‡<,&G0‘ÊHÂæg•î™ì.I-«vÑF•à:^62à\ãJ(ÓÊ#Ô-2^<ørRˆ‰ž*VÄâåB^šæÈY¢]€ùkÜV”]wP«Œcu_Nコ¹Ð?!—w™<Ê‹5Ô¯ xT:zŒO²¶w\Æ«Ç?}9mГÈO÷…f>˜Öh÷\‡ìÛ]”U.º”Ó9Á¬"€ Y–Úâ¶þ'5ˆÖ½ ߸íÐðóÿ™k‘Ûü@ÖÆÙ£übJÒŠÆw ‡ ƒ[—pYôÐ:?ü¬ú­íâµÍg — _s»îÐV°ZÖýÊûµíàúc¦b:é÷­«K+€Cy‡ê*xí&$8´o¯Á{yùHœZÎ󇪮¼%Ò´¸P1K›Øâ«cïÉÅÜ®{Ü÷<Ôž*ÍÍÜí1´ ‰iC«7êVŽ»€“Ús+ÄDXJê""""""""""4eL޳ ÝÄ«¶:[ÇÊ5¦§;ÚW—<5c:q8’¤D Jí­-#µˆ1Ä|Ug8¸Ô¯ ¨¼¡9àË ®êúM02£æ‘Ø4v®›oØöûÏK™Æ5pîÐß½x¸¸•÷©ßôÙþbªÜ^Åwú[Ÿ~åC¶úp¿££g•8Êü`Ì®«nÙö½¬‡µ¾}ÈÇΓÂÜ‚™%øÑŸ T—NÔqYò\OsVÿ¥¥»G±åº¹º¨'ÚÐݽ§j´¸ÜxÕTÜî’µu<ÒÈtÆ Š×ß,¦³I q¾ÇQŠš`¾Åmb® |V¹îÄÔ¬#Î@ªÛvv»õT9Ãæy®*’ïÔ/st[6„$#‡CT]F[AÌïJ¿.”~Û =NÀ+k™YjÍwl`â5>À©®wé‰-µ«õº•ödªå–Y\_+‹Üx“UŠÅŸª\IƒO¶ßÓŸŠÑ†ÅŒÅô‘Ýœ¾ d—3K'™3Œ®üd•µ—ïgÈÓíQ‘A õÌ!Â)K5š»,OU£H¥0 Öõ±*Óúî ÆYÇ ý=®§9OõW2‹ÓúÛüÒ“à«Éam'„ÿ}Ãæ»?÷Fíàñè[ÇñÃËÙÍæ|ÀHÝ5è:j¸TTåÕÏÒ÷7à£gI°iÿ@æsÄ®çýòÿâ›ÿ#¨µ»ø…hsoŸÅ0׊Z±ÞgÊîÙŸõRŽŸd2¶ÀŸ‰]“¿ˆlá·cÓ1?úÖø…'Ë`Àzdqÿ”.AÖÛ1¦ É_û¯ÿ‰ …¡ÿ‘øêdþ î&¾]´,å]NÃÚƒêÝöꤘ£‰ƒØ5Us£Ž= 7Ì÷ÐdÑ“FA]·sW¾IJQî«»\r ÇôëPy`Œq-V“]É9ó._P:÷6ŠÅóä#î3ÞTg=Ϧ£Zd¼W.ú£¤o·1GJ^wvÊf@ÖÓ†@db™LÏ8eĬTÁ@2¢»ajˉ{¨ÖP3+ËÝL¶¯#‰­gÍH`$PâxŠ2ü²S"€ .ÆÞÞ84Q  4ªrHy­ÚÏ;´±½§®ìöXÐûƒæ?ƒF{hÊR'¹e³uK#chÎ¥GsvóP×i3—æ³§¸•çDgOfeOšê #kY‹Î–±£ÚJÔ÷¶2e•à32÷í\ÞåêXÞß.Õ¥î¢WàPTw7·wD~bWHƒA8¡’À—¨Åˆoï8ŒÁå¯j[ô™ž}º“«V.=˵Ÿw·q †²œª0Ò±lÚœ -kx®2;¹XÝ5ÔÞÂÉ÷÷n†¸µ¹P}ªOêÖþÝ@v¿OÕgúU0iï+®ºÝ6ûAWH5}#îT—þ¥š`Yl<¶}G?b¤$“S‰E?Rž\Ð8f¬ÃÓ¡Ž…Õ‘ß«/”’É+µHâ÷s+EH’MI©W@‚""øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ·E/t0ðÈ­(¦·ÐHÞÂ7Ëá…oa&.Œäqjcî`¶•À§Š¡eÔÑŠ1Ô?W¨’MI©ÿ9-ƆóU’Ï4ÎÕ+ËÏIX"ÉšæYOî<»†ÏLø ºüìŸþ3%… Л.Ä_t:Š‹‹P5ÐT…âÄa¦M› ­a.-!3&ðÕ•aŒŠÈ\Ê@•:CÄ–ÏÉ^;*ƒh¢†hΫDûáQÖÞ^ʱíóü`²ôÂûYŽKÉy†×Ýà=€(1Î"ëAA5\«(PH+h†gމ<Ze6[šE’ˆ NŽùÍ£|õ;øÿLJÑf‡ ´ô2èLH& àk'ðã5>µºœCOn‡–;ѯü:ÅßÝ3Ãnd߉ ÁÌaJGþÔÇg¿¡ñÕûEöwz©ªuðhW=&‘/ÞYÈ~j]în/Hîõ3ÇDðE~çvM"§&Tþ÷^H2ЩÁˆŠ  DE‚PF@ÓQcaTÙ„ãáÏø§?Âþ©ÿNøï~)“ d ‚’¥ù_G#|Öü#öœêbzÕ0ëAÐX_2Î7'X^DK<À)¡}âøç4ƒJÿÐ>Mx@D–Ѭf²J„ïþÆ FH9“ã:“ ò^æCŽ÷ Œù5F"ÌD’ž}Df‚ Á¬©‰}s±„=Š?‚27Aè_¿‚:7Ddè „æPœi0@2#°jT£)ddèÔWÜKéÂÓU!÷”½V¼šñË‘ãPS¨²-’tZA …HZȤ²(öÍ@QzAÑ€:’Å gc•ü•ë)š§¶#êtèP³I´tšSžð‰—‚¡S,Öð(ŒŠ^‚î•Zí7^¼Á—â·-÷ŽtÍÈy0‹B'^è¾ME}‹Ï EQ4öÊ÷Wxu €’QÑÌ"IVïÿ‰À}mék¬NŽ9þÿÀöã~ÿO#H‚:€>&É‘#ÇUB§»àö\üî£iì~æižzzÃçØslì²P³üøñ_³ÿX7h*»víbÊ;J÷ ïÒ5•®s½ŒötÓ?9¿(ÓÑzGœ?wž€ša÷¾c‹Õ/GŽ7Ò›7LMÏas;è:×ÇTß9~ñƒ“|ü‹_á¶Ö¢‹öÓ21¦}qêôq~øŸÔ'ˆEb †L4×ÞuñAÙÉfÍäûÿs/®U«iÉ3’(tQ宥­µô¢!J2ÄsOGÕR8v>Ëé± [7•ñíëÇVPħ>²íê_9r\U.‰Þ×6ñÐ[0hŠ·Ýy75¥ÖKz=J*…ª“‘ô"–üRœòB{ ¬jÌg:`BSV¬dó†µÌ'ÒXâó¸ëJLÇÚ-·³¾µ‡ÇÃ}÷m@¯i¨H˜,–w©vŽ9®—x06‹‘§¶?ÏêU[ØvŸ‡l&‹N¯¿d h© ÌÓÎÌ”ŸO~惢ˆ(ˆ(jvÁõL&1ffY~Ë:¶ÝY€&ˆ¬n®½p,Ý¥¥¾’­‚¹ÑAÓØ|ÛVò QµôO‹,­/ºdÿ9rÜlhÆCÚ÷¾ ïo»ÑÂäȑ㷅§ŽùÝ/»àÁ¤ÓÁÔ–)GŽ¿%¤Ó^Ž$ƒA3ïÒ× 9räx'  Ì[–èêtíïúD‡Žçóþí]‹Ú_ðN"vu¿þÿéÅ·‰ç[ß~”ûÎãœ8qæmË:66ÏxÛãþó7ÏñýÇ~J |Gãsäømä2Fà ïÃhù{Æ&~BGgÏÛ:¨¢¨¼¸ë%Eá±ØOÙ·ú ““Ó‹+Ęÿü+H{ö#=ù ºSg5.•JñäÓ»ùÌg>Ïúõ[8ÓÞÏø¸wÑ2ÿê©íüå÷ÿ…Ç^~†ž‘!Ò™ ÁhdÑãÓY Qgâ_þÏ÷=æU¦§gùƒÏÿÓÓ³o{lŽ73âå¦Âd2·21ᢪæs¼|ð;^ؽ¨¦Óiþô/î¦çü7Xûñžš}†Mß­¢¸È½¨ñj}-Ñ'ÿóŸ}]o?Ùûîºò ™L‘ͪÌLÏ`2šØ°a#ƒCËFùɱ瑋dNûÎñÍÃ?å¯ûéZÔø—a*aÕªU¸Ë*xâ¹5àð‘ü?ÿü¯d2~ø£Ÿñôö‹›#ÇÍÎe<UÑ“L>ˆÍææ³Ÿûƒ‹>¨Í&sÛÖ¥tnÿ*‘ßÿ_ÿë5(Ê"gŸeÌþâýeÔòRÄs‹óždÙ@6›Æ`0Pä)¢«« —˵¨±©tšýüðÿ†G?ö5ü¾ AOfQcƒ¡0½x€®H„o¿¸‹3¡Ïœ=ÏÀàâŒ[gW7÷Ýw'¼ÿÚ;÷*™#Ç{Kê`Þˆ lBÜn7F“iÑŸfË–ßü@1ígOs÷¶•‹èà4M#ûðûAÓÐ\Ü+’Ñhäá·ñôö_£×æ|_75Õ•˜LÆ·›ïtòÅ~’¿ùÆ·øGæCž¤ãYò•uN&“<{¾D<ðù@Óø£ù[©«­¾âø;Þw_þÊ×yð{ùÛ¿ÿ&ÿõÏ¿°(}säx/ð–f÷®çùé<€Ùl^ÔA ¬ô~öÓAÀ ‘Nm^´@Ù-ÈnZÿêÁPV.[ôØÆÆ:ëÈd²üæÉLÏÌR]UqE™ÿð3Ÿ¤§·h4ÆGyxÑçt»]|õîÛœ&  Z̬Y½8ƒZ[SÉ7þéo8zô_ÿÚ—©«­Zô¹sä¸Ù¹ŒÑæ#{IÓ8×3ÀÒ%µœëîgisý»kœ=y Ìfdsÿð·_[BÌs¶œu7c5d>†}z*(jŠP(K¾ã-¼M¥ëÔIf"KZë))ÈC¯—øð#÷pîüÂ6gGéö±aÓZŒ:ðô$… ­ï¨f8×7ÁÒ¦K½‘L<ÄÁÃí|üá‡)Ê30ïRXàMyýßoFU8{âØ=¬XR €»ÀÎ÷܃ÃbXô5Ë‘ã½À‚FS³yþLßÿ9BÇ÷3š;×ÉXÖ¸ ø0™Lüµmßûþ¥“‹oøû¢(üì—o´9räxÛh¼¸k/ò¥ÿަ.l040Z*Êòsvî?ñ¶NwèÅ'Ù½÷ Oí_\/EQøÂŸã ü ÿ×W½­s-†øìÿøíÇøÙ»¹òÔÅ,Ûô4±Eì÷ô¶¿â~W¿÷<ÿë_¾Ï/~ñs¾óƒŸp¬ÿBë‹çŸø!»N prç£üj7qÿÿ󟾵ˆ£*œØý<Ûœ[” Ùd„ïþû·yú¹üó·ã—»0Òu˜oýä9T :ÛÇ×ÿ÷wøÇ¿ùKæq‘ºå±Ç~Œ7X”ÛõS¾óèÐ5q¡oϹ®’™÷ž7p`ß.žxòY¦‚‹ÓÛ?x¿ÿÁ“×Xª·oÞϪU+ðNN-øù‚Y¤LdŠ;_bã}yôüÍW8Ü=Í›Vr¬OAÔùY[n@Ê/e×Þ£´n¾•ó{Nñ;ñßë>ÅtÖMÈG÷®_2o¨Âì"©)¸ª ±5qâÅÈÕò“üK=M{Ç säè8í],om¹jʧóL ù8ÇŽðío÷qâx;m[ÖÓ}¬G•‡M%z~¹§—‡7×sdHÀß{ ÍÏ=uÅ,`clXÝÊov¡uõrº†f)uÛžèı²•ÛZ«®š¬oE~A³~l±Qæ ú¾ Vzvè@:fîL†ÓÝ#V$ù»æH)*þù?§nY3ÇOœÄ\Õ„8Óɺ;?Ä‘ž`ãC¿ÏGï^‡QLpôülZzE$£@(@Q*DÇ—Ù˜Ê#w¬æÉ'wÐ3›âåR•g÷ž$¥ü·¯þó“s<þÍ ¦wœêÄ—h«Ô35àÊ0'Õññ“4®\Á Oÿš¾©;)u^9»vêä)T[>;žø ßì"8’”Š¿&™Ic,vcv–’æØX–V„°‹>>ù¥?£Ð´ø†kÉɃ/1žpP §ùo¿z‘òÖ•¤ƒ6´5ràL/zIG*êÃNм²…Þ ¤‚ZþÏß~Þ°r]ƒÓ‰Öä_úòŲ@ ȵd~~Ž»îÜúú†âc {0r¿ûñÐ}ö³þ$|ôƒêUÞ÷á‡ùp[{ÆÌ”Z24¶nbÛòJ¬U-lm+EtÚeÂS= …dR‘YR‚šj õ5åÌzÇì%|âþ BmÚ°†?ùc„ùÊ—‹®ªqy•ÉÁ^¼16)Ãòµ[ÙÔäAÑ  °ïd.c–p"ÃÝ}€FO &£„³¢‹EO…#ÃØ\„•ënçÖú" +kQAJ‹K0™®ß¼¡†Ù©i)÷}ŒO߳Ю—w³š¤·—ÃÝãØ­&¢²ÁŒNÍTÀ¶MõØ= ü—»6Ñ\[Åžã=,­«b÷áv@ejbšé±R‹è¤¡¤ãLMN25¤¨n9_ÿ³O“œâìh”&·Ÿ?õF£5› “V0èEÒ•û¾ E5ò±Gî§mÙrΜ:…§j gN"˜ÌðÜcßâù OÞ"¯§ÎÀýû}X]EËÖ-”Zu$³P×覼¼ŒùÑNN ú1dÃÄÒÿ峿Oeê,s¶z nãpû÷PaKór×å k¸wU5)ÌzH+ÉDŒ˜*QW*3:>Íf%é¦k2ƒ–ô“H |â Œ}zZùJÌ×Ù¸LNN±wß!^>xòµ?‘è¥.ëk…v÷¯Ô8ß?ÌÐðw¿oáhƒÑ„^P‰%ReQo@"K"«a–%¡(z£ š€Ù$“J&u:2ŠJ6™F4è¹ÐÉ@ETMDÍ$Éj"vۅ´t:M<žÀb1¿ëZ˜Wy5È»~í2‘z£ ³A$ޡħøÅ®!>ýá; ›&«‚lõ”t’¬¢N¨ˆhHz±h ½lAMEDEÑ$,æk[$÷jwIC9ÑX I/!èu"éd$=Z&¢i¤ÓŒ&©dÞ€˜LFb‘š¨CS³H#ÙtI6c–%b‘(Y l6â¥+Ç‚¼ÏíÜLJ¾›p$ŠNÒ£“ô˜d=ª’%õŠ1I¥³dÒi$ƒ j†¬ ½„^6¢¤$2 zQ@ADT²šˆÍj&ˆ“HeMfLòåïÿ£ÿŒ?øÌ'‰Å"d#¨2ªˆ¦dдW–*DTUEIgÐD’NÀ ÙýŸ?¦týC´”-0ùô:óØ~Áï}úcDÂAMÄn3 GÐŒj QË€ÎpaqyQC%âñ£%•B$t‚€l2òä¿GÛû?Euþ[·$¹Ú|ïó…?úÙÌë¯xßýþc|ìãŸÂj^/´[h¶Œ(È{Ã%O~£ð,¯<yß0ÙxÁÅÕëãe~Ó—È`0`0\o@ÔIä½AFGžòüѧš^=ûEûëM ·¤x³ž×I/“—w±13¼z}¥ ×üÕnFùb¬ö7Mí0¾~‹íÒ)—Cu8_Q'azÅ+0Kzx­€ðâ{/™Ì\®µŽüŸ-Äk•¢á•I  x%oúîÝõ¡O-þ× «íõûbíº¾zo.ýí¼ö1^ü=øà§>w ¤[,Ú³a—Ü]»ö28ÐÍDº¤Òi²Y8}úôå]‹ÅÑëìÛ·ÿ†É i¡pœý·Go˜ sóþí;‘Í.®ÓàÍŠÏâÛÿþ(êe².ïŒÆÅyï—˜#ó 8o¿êÝ.?ùú½C®kÊêrÜèÅ$83ƒe¸ˆ\hôøç֯Žu\b`Rˆ¥4ò2vQE¶±‰ sIT8ÁtTÅ‘g &OâÌHœŠBcó7ï/ÙU`¤Ì&2:Ÿ"”‚e•FRi³‘4C¾,ÍfŒ’ÈÔlœ©˜Æò*3óá E±d“^ w¾ŠÓ¦CtˆÉ4ÁÅþ|t"m5V4² ʼn,œ—t4»º§.H¬(5â›JònUM.Ò‘¼LX]à£[\ì><ËÄLœGnuÇÑJmºµ€³#Y Yªˆß—&ÏadΟd}£•q’Ñ…R§Èð\†XF%L2¿ú…ýÚò‘¢)NyuÜZb ¬ˆäËá´†Ý Ð1ž ÙóúöOúÙ°ÚAw„æyTZè áöØÈ&Ò˜-FææbxJlTÚòÍq¢z²’Æžg"Já°É8¬*SV‰ù˜J­[OH™IP^f!›Hc2ðqÞuŒ­¸ð¥™›‹²¬Æ‚Íef°?„’UÐhkvb3ê°&RTTZMXîºáÁ ¢E2…@$‹  A2­â $8=cÂ#ßm&•Rˆ§’Yááó5vÓ}aBŠÈ†¥†ÆØóLÌÏ'‹08—ai½TìúÄ&æ.,í;9›@6ëI&\v‘p†`JU#•½A"H Z%DE£ÞNÕŽ/ìId4Ö¬[&ÊøÇ:èÈSÀÌÔù(îÚUœ~öçk—SdL‚Ñ…™cx:N8@™¯ïº ›#GŽ÷:MbÓ¦-¢ˆ¦ª¢È¶;„Kâ±—U/£ÈïluÅ9nfÑ0¢lAÖ/óTÓ#ò ÷‘0¢É‚¼`¥wO,Â`±¡×-US£ yö«“ÁºÈ¢·Óh\XºDCU2Bwµ^0ò£i{·ÿOózbÞ.ž9Gc¡±twß¾žáΣœ8Ò§® $ÂÒU›¨+s_{­Þ&J:ÎΧ~FÖÂbn]^Í~ðk,6‘BwÞ±A¶Ü·ãN173ÃÝ|iªŸ³SSÑ ¢ÝBÊïGg’©©_†*éðŸbbF¥¢ÌÆØDˆòšeܾmí5×¥ýÐsè‹—3þ(þ¸†.ľt[V7žíã@û2wž]»a³ÚðTV»™eóC¢ÔœeÏ ÏOˆ(ÉöÆ[¹ý–+÷网;ðÉPwã2²É,·™9?îÂ|fçý”àSì¶23 ±¹•‰ŽÃœô"( %–µ,g| OU-¾É~<ÕK™‰ùµ …ìùå!²z‰ ·4‘Èf±ê[ÐeÌMõâYºŽø\HRáý=H¾ýæôxþ!‚™2Þ÷¾ÕŒ S[WM8'2;ÕåÁš—‡ÏÛKiÓfòœy´­hFÕbxçDævÔdœX*KÝêµLtG6IÌͧ(òؘŸÃY]OMÅÕ  -„¤%‰¨yT{,Œœ vÅ&’3*ëË‘e=“““‰<\šõkˆÍ'©¬¯Äls¢„¦³´mnæì®!6ܽ’HH‡»¸»^$–UÍM¢³Q_UzÍuy7tî}–xQ %B€çw¼À˜w³^ãð±³X ““³Ü¿—ñÉYL’Š.¯„Ñ®n{ðaL‰i²:]ÃLvæÀ©n<¥nöìØCAy9}'OPXÛˆ·ã8‡ÚÏà;?ÉôPçúº™šôá S 'Ù±sÓsóÔ”sbÏ38ÙKy¥‹¾‰µ®Eé19àŽû¶ðÌ7gh~ˆ©‰(µ …<ùãg(­-`ûOŸ¥¼uC's¬«³Åƒß祮ÆÍh÷ã>?³ý£xªœ<õÏPµ¤„Þa:5ÉäL ÿd?ïþÐ熆©­kD3zAÁ"i¼ÑÈhšJ2•Á èõJ<½Ã{Ó¸‚pxÙ^Ndf’ÖÍw2Þ½ ¡¨š 7s~ÿÓ ã;-œî<‹d-¼)Œ$[é>±›¾¡qâ~/‘Xš‘ž!,#zŒÍUNUžž¤µ§ˆ©ñ|3Aô#¢$b²³yÓJFæqªqE$9 ›æÀÑnªœôžó²t}9g)õØ…âì~îlùv””€»¤†Ò’Âk«È»$®J¸Œ!zû'0Ù–ÕRWé!#š©­ô0åG¶Xp•ÖR[áÁhub×Åyùà!Â)‘¦eÍÆÇÁ¤Ãh.¦mõ2´xšÙÙqtÖ"V¬hd¤¿K^óe¥µu¹ÁëÃl³QTYÛª1‹!›‹Yµ¶…LRÀSä\”ÃGèícÙ­ËI¥JÊ ™œœ¡©µ‘ñž\M,]RÉ`O/¶|'•õm8Ì"EEùd䶬k&K05<…»q ­ËëH'e"S=”5Ý‚U™Ã…Ûok¥§/Dë²úËøï ½]–7z0š¦\b`.É"íá®>pEÉ‘#Ç"#€›bÇÕm n3¸å, Å`Þ2‹D6雵t.GŽoÙ䦮þoZ‹‰ÁHoN+Ûeê\7ßëNŽ9nT%ƒª¤¸ØÈ\Ê% §$IB¯×3?5FD5’ðRÍ”˜4äÂjŠ ,g&˜âÔ¥ˆ`fEsý5Vç331Ĩ?E}E 6“H{û0&³B$®QXä¦Ò㤧»—h"MYM‡Ä™ö^ŠŠ ðNÍâ°ÛˆÄ3,k©GQ%R‘††½˜ìá0UMËp;¯½AΤd‘‰þn E¤f¼¸jqZe@!N’ÏPÌØ„0sI- Õ¤b:º‡iY±%Ãl·!ªYº;Úq–מÂTREbr‚¢º&ò,×oA¹wB0@GšŒä ß¶H·?›âÔ™³3Uµ ä[˜P˜ Ó=¡¹~á ÷äÈ &W9Ϋt}ÆúÏ1—XÑÒŒN„ñ¡~òJ«±É $vÓºÇR4׃’bÈ룼Є?m (ï ß=%I ªât\ût¶"@ZIrEf¡ššâÇþ˜;>üI{I󵷬ŮKòÒþNª–7=ÛSGSë*ê+\´=ˆ.ÿúd]jjëÑQÕЈÃ^àF—Ná› ‘ç*£Èn@­äéõIb+iB øõÂó*K—ÖQWQJ*!’ÔͰtÕjššpäç¡„G˜yS‘Ô͈–Î7Kxûú:ßΩånÎ ]øûØ‘Ó ôœåôÆ2¾pœX"CEy9ù;6mä侃øæ'Ù¾ó­knaßó/Ѽn‰€ªÚRz'9zô%¢Á,í/½Èˆ/LpzŠ3ƒãÌ r¾ë ãìb¿o’í;Ѷî†&­‡l±Q][EçK»˜ÇSlݺŠ_þ`;«66ñ̨k(¡ÿü ‡Ž¦¶e=éÐ,ÐÖRA0jeä\7k67ñÔ¯°nóz&gâ´5Õ T0>1‡3!ò³óh'Vùê ,²FWñ¥¯=ø†4u8’¤¹yéä(UËÈjж|9©v êW²vÍj¦:žF§f™ ëÙ¼¹•… o4’ÉAtþ<Çû§qhaÆfÄf#8ì0<6G]s ­ èN\ Î<éa΄Yµ¼’îs½¸«ZxøÁÛöÒTQMy}%çÏž&%Ú¸ëþ÷cHÌâ(.ájÖ0-Äp7¾pœ±šÖo%2>@MÛrbþ(QºúF©©Ì#e-"ãà adD!J{ÿ §“É‘ó:3¢(ÒÕÓAá¾ê—­&–J²õö-XÞbùÖ›£ÝÉÒÒ<æÂ1,ÎbV.k¦¬¤ˆüüBJKŠ04$K+—-¥ÌS„Íf§º¼Ý»^D_XIme)v«‰”ª°|YuÕe”—xèí룱¹•ÚêJ¢Q*êZÐeb,¿m+DC”.ieÝád{¾‡­Í”¸L£¬hm£¶º ‹É‚ó2•Ào&è s8Æ>v7þÉ)*j+8wÞËG>q/§žã¶û7SZTLhnˆêÆ6êkk(*°ãtæcʯ`ãš%—–Ður€­÷o¡Ô]ˆÉZD24J]ã2Êœ"Þ”‘[[‹™JÚYZ㹪÷AU³¨ÊÅY¤…ê`.éÉ››ì˜#ÇoJ&"È®r¡–’ÍNEx££*é+§©ƒá3¾½Œ_Ž9®©«~DIÔ0®ƒ¹dêV=~íêåäȑ㷠3 fR¼£,šF×ñýˆùUļ] ùRÔæ‰èKV²|I½§é8ïÅbÈ’ÌÈlº÷^n@7¾+¢© gíe6¦R]ß@ÇÎÎíû±Ø4LH²5kZ8zà`˜•›îÄ%Å8|²§Ý‰?¬7È(´®nCdÂ“Ý L‘_TˆfžÚ·²´©âšë2>؉d/eôÌAt®rRÞaÜ­h¨("žaÀÇe*eÇcŒ36ŸaË[IÎóòÁÓ44×Ñßã¥uM '‡Øxï]˜‰rxç^Ü-mÌöŸ%„‰ûïºóšëòn€TÙÓLIþââ‘™1;¨“i½õvJê«›šãHG€õknx?Ôy KE3EÓ»ÿ5N¿ôÓá·=€Ý,ÑwúM­˜H¡'§8ÒgýêZÈÙ³¿“¶æ¼ '-µoˆ­d‚ z3ÔV-n>Ô»B{s€÷2ÌÂc#zñ m÷²zãû˜ÛþSÉ•D†úB8Ë–àäÄà•u­nBã ŽÑÜl»­†ýGÛi¬ö`s;˜ì;‡»¶™°’c'#äU,G²NQWéaððntEÌ ÚB! =Nfæbøg; 5ˬO!¿È‚¢·â›¸.FI„h.*ë*9¶¯ƒêå+ñvÒPQ„$jx½#Xâ"zÝ<îm›ñíÝGJS~)-óÚÝÁšmËØ÷Ä ÖÞÛÂøÈ<¥&?1Eàü™>¶Ý¶’cÞk®Ç»¥ïÈ dÜ«Y¡ëäïþu7 õ%d²*¢  jMõìÜqÆz©¬Æí}‚Á“lºça&N¼ÀÁg§°v5/=‰¡b)v]Ñ\Œšfb>C4êC˜kg(iÅ0;CyS ÇŽbó4¦ÖÆs;Ñ\ç¦iÅ:öÿú'«–áЇ)l¾—MË+¥GT3±õ}-ì|üg Muawבwî4‹‹t @Ö ã©m"9|„©¬lHajªš‡¶-£ÿl'á€J2’GϾY½ŒÅÁ쪦·£«ì¦²Lw^¥²º½(Ò´zËUMS_pX®œEºLäG¤¼®–Ù±qºì¤iãÄBýÄE¶¼&Ú÷Ó7—ÂnqPê.@¹I§ÒÉ|ã}´·wâ›exp˜É‘ dGžB'悬ÉðE=…åbÆðÓ)JÊÊÐëôˆiE/owyÅeØŒ2F½T"Aæ:蟊G˜™eÚFãÌŒô5ÂùŽ~²™s““$Ó³L'ôîÝÎ\ÖÀø™Næ§úØ»¯“² }½Cä•éï&›#¦+Ä&DZ¸ h?~œ–µ«®½"ï“«ƒ0Îñ#í¸]vâºV­hE1¸XµbçÎvãvÙˆK…¬ZÞB&Ád€öSÇ™ð%XÇÝLuœÅVZÆüL˜µ[ï$>Àá)Fô4/­`Ú§ d¸mŒöQ\ßJI±“´.Âà¹~\N3IS1Æ´gU9³ÓÖ½ï.”èâÓüqÿ4çNŸCg(i\‰ÇíÀUê!4ã'¿8Ÿ/ÍÒæRf"j*Líª÷QøÊŠ m+i®o#‹’_œÏü|† wÞ…„…’|-k «a4j«\ ±¯² Áb<˜ËLv|˜°Av ji,V¡¹t–|¬f±`(‚$Id³PTVvÍg¿S"Á9"I£E dÓ$I#ѰbÒ ¤5“ÉH*Âça· †"˜­yäåY‰FbõzDƒÀìäÿÇÞ{IzŸç~¿Î9ç0=Ý“óîlÀ"-2˜$ñ¨,U¹\ÇeWéÎå*ßøÂ.»ÊuJ®s,É–(Š¢HŠ ‚ÀŰ9ΆÙÉyº{º§sÎÑKR »âØ,uæw×Óóu}ÏtÏ×ÿï}ÿÏóFËUèôêå ­~Ë3ys©(µ–ˆV­ŒÊ`¡šM£4˜h5šˆEMÉ •ò~&o³D¡\G§5 ‘´ˆÇ“hô*… &‹Žd<‹Ñ¬§ÕM'1ZlTËETjÍÖŠx TÊeÄÂ6ù|žjÔêûy´ÕZ™TD¥\ Xn ÖhIDD„4ˆnn"×ШÔ*r¹ ¥•ZA½V'—M#WhPiÔä!2 õbµÉJ>C¢Ò¡”‰(•ŠÔ ÑhK…Äã J-*‚z½Bþh;}sÉ(¥†›Å@4BªTS.W°9¬$Â1´f#2™œL,ˆH®E&W!h7É$TjmRåjl"uÿw¥bju(çc(4VD­2™B0ÆtZÇÞÞÇÛ¦VŠX¥5~WI =ºÚþ掛z‡vø=P Xeu~§›ú76:a‹ðñ·µvØa‡?ˆE¿6õÈ]$Z…Ù¨ÛÒ“Ûa‡Ï‚r1Pª|h&o¶Ð@÷ÜÛR!X®DºU™¼ùR¥ú¡™¼Ùb æñt°FzµÈ'ì"µyÿíà9D!xS··ê cŒ/¿x˜zÎÏú§³üÏÿßo‚Ç@³^âGÿò6-©£ÍÁó{|üç¿ú!Z“ÅÍÆÆ:¯}þ8çÏNŽDøòÿ)òè2—ü!ÄÅŠj:…H.gpp-©˜ØòuVÃmº<Výzú÷ðú+û¶\Ëõóï¡tî&0DfsÓw˜*Öjv¹eÜ›‹òµ?ûÔ£süäƒ+ì=zœ{·¯óµo|pùÌOÑwìfêÖö{‘ØÜeLýÇèx´D¶ÏŠ‹Ÿ¡œÍâÞE»ÞÆaVMe°tÄÒ9œf=±³’h*Gßþ»W¹¸€z Ow7ã#ÃÖÖqtxHEý8<½„æ®r+(åØ>­Z±ÊN³Af°“Þ‘ÉÄÑ»{Ñ) «c7Ȩ·DÄ"Qœ$7×pv U<šÕâíïü-Åf‹ƒ/|•z*L2A¨6²g×0ks«8}n ùåT£k?/>íåÄékH:ÇzXŸ›F(—áîìäÞÄeúw?#qtl¬D¼™ ·™D£ÓÐn7É+hœvf¯žG!“R©‘Ê„ EÛäÝñ¸]l6¤ìÚ=ÌGï]aøà1áz³¥8D£ÑAŸ¤DÏÞC$“7Š@íêgw×&:³ »Qûk¯·´¶Dt#ÆÒœŸ·“lã mþ ›³w¨÷Óð·oŸÁÝá¤×cãäZ„>ŸÿŠ˜Sçoâñ8éî°¢0¹YZ‰ñGo¾ÉÊÕ“Dj9NœºH|þ›m/?5Êû'/±w¼ŸõÉËtùlD&/0™ª`- Ñ$,…ÃÈdzä†OêùîÏ®ÐÛåäãÇ8ûÞ¿°ÙÖóús£ÌÅ¥|éÙG MWY<|ñ¥=ü?ÿÓ7I©ŠˆEfž}¾Ÿÿô¿ÿ5Çžáÿò_üo¾ÎòÅs,f³8ÌÃ\¸|‰?~m‹¨ÉÇ·W)ÄWÑäûÿç{|î ã̬ա–æÜ•&fE–JIˆÞ¦&Sið¹7>ÿX߇ûë•ßÝEzˆÙq7‰ä"µ“lØÏþ㯲|÷Z6//=ÿ,áOïïg-ÔÆç~r¿ñD2%·.ÄÔòÙ˜Ÿ\©ÁÜä* ™TÆâ¦G/¡¤v k×ñt8 –‰†„bÄ2 2•…WŸÙËÜzC#GÇÐ0þ­š=‡ž%½±Š·¿wËÍŽ³w.³ÎÚXAc²_ŸEÝã%²C#/óÑ…;X ‚-É©K„ÊáÍF˜Ÿž¤·×Ãí+#DL¡¡`sy‚ÍŠ­¼ŽÖ쥛g#'`°ëÉýÎÕÁ*Ïp{ÆÎhÀâìb¬ÇM¥­`¤ÇÍÚú:*­«»‹Ñ ­­ ωó—H•a߾݄—–kHd&ž=¶ŸZªÄfr&ž:4ÂÜÌ<:£B€H­E«5ÑÙëÃi5NÓÛƒK ±r±ÔÄóÏì£Rlãq™IÇìÍ LÍØut„FK†Ç£'I24Ú1ˆ©§‡Cã]LMÍ¡7ié:„QѦÃi¦*wòò‘!2™á` swO¡\’ /Ò5vM#Ž?Ÿ{iŒÛ3íé{¬™¼íV“fó×»HÌä•]mÿÝŽÙq‡þ]RM­i[é4=ÞªÕ`ØEúÍ«Z­V£RÞÉäÝa‡(ìØà±ÿO·ÛM>Q &Vl°–­?èwwØa‡PŠ[XŸÄ‹$ƒXB.¹I©%£–ݤԒc”µ‘hÍ$6üè]^, ­ìtlƒx¾†ÃjE)²¶¼TÖ¢\m£5±š´×Ö(Wë˜]>Œj«Kkèz‰*•Šrµ·«“f[H½˜"Ž"Ui¨ X½½è·¡}بWi¶$‚«HŒvê©:§µR ´(«4J) MJA‘LUˆ×ã¢^γ¾¾«ÓMt#«ÓBÈÇÓçCD“£¿ IDAT¥ nÉà:·̓ÌvO…|!5š"õ£Ÿk³Æòâm¡K‡½ò»myV7Jty˜øî·ÞáèA ±¢i9‹c ›dp‡×ÇÙsSô{¼tx´øãuº¼HÑzzÐ>ÎØÌGô"=¤÷‘C­èdùî]$Õ½{žA®r!k·pt o=øÅž4šµ< ­ŸÏ{?“W,Ãd3£·ºèèÅÝ7NjyÍÕáF¯UáØ³m-E$Ó¢odµ¸Æ[K¸†{)1X;q÷ ávY›ºÈðh]ƒO‹Ç׃1žž~Ú¥4zkÂJ•\&ÖìĤ‘"ê0ȤHÄ4ö~…,"¹ŠzQŒÛæÀÕa£˜¬ãtÛ)§2ˆ4v„•(ÑXÕF»œÛ-Ÿ†f¹LY%'XžâîRÓÂÌr ÓÂä­ü‹÷˜\ŽÑa7“Ì—)øº{1tì:pˆ©+×Ȧ"œ:u®Ñ½\9yïÞCTÒ1l¡Õ·&ΑMV˜»pŠd†Txƒé?¹«sw™ögЈ*äÓa>úð"½»÷â_yt7º\c { ¹³ÎåI%Šì?²‹w¿ýúôrúÇçpúœl¬&˜˜¸Ž£o•ÌýLÞÁ>7ɬŒÐì,ƒ‡úùèG3|ð›ÑC½>Ð8ØÆPW²SqÎML¡|ÜmÎGtS?dtìêµz÷0F“‘Ñq2›wÐ{Ç(DÖðŽìÅbÒ>ðŸ$Ä2¹è,Ó«a”Í,Ñx\,ƒF- ÍÐÑ;@¿ÏƒHcÄ Q ×ëÈDVñoäéïw\]Ãàäø+O³±¦ÓîÂÙÓI`nІXË‘ã¯!*FÑÚ\[nö ,Ï’ÎØ\›Ç;þÅð2îÑŠÉbA‰…ÅuÜn-5¥™Z|D!¨!B@޹åUÜý6VSyi‹Óôt[©6Ää ?÷™]#{9Sö³B¢ÖÓeS’Èä‘kÍô â°YÐèLØmDÂb…ž¾Ÿÿ\©Öârè¸rî "½O‡…LLµU§·ŒÎN7V‹ ÿÊ"=CtvvOú±yú7ÊôZÙÐ Ss!,v3ñH‚áýÇØ=èÞr-ÁÕ9Äj Û}T+8÷<Å ÇB9gi£ˆ´à'PÕá–çYI4yõ¥g)%Öøàã[Œï`z*È¡#½\¼t—g_z›NÀÙ'‘9»É…–ȉ´¼ùÚñ-×òi¸~á ]»2w÷]=ý”*búº¬LßFjï§Ã|¿²<}›[Kq¾ò¥—Ù˜½F>Eõ²yy‘RΕKó¼öÕ/âچѿ¿É…3±ëÈSܽy™žž~ŠU9}>+Ó7¯cÇüóµS7®±’.ñù—ŸgeòyeÖV˜„ØI=¾ˆÁ¨àÄG‹üéûu òí›iõ¨^¤‡¸© œüÉŽ}õMž~î%¢oŸÀ×ëãüµ_þÒK„¾ýŸY W¨‹ üè{çù‹ÿåÏøþÿý·<ûÕ¯³ïéç8óáeêñ:’jÝMf~÷¨šÅ˜gŽ=Ë™®[)§Ä+z¾ø|7'/Ýe°ë:³’õ¹iœý#$Â+œ¿–ÆèÙ…Xyßì8wö$b›‹ÅiZz3ñDo—ÀF–dbV)ÄF¬Ùª@¨2²º¼¶-˜|2D±ªÃ×ãáÒé»ôîÙÍêäƒ ‚f…ù•E U)"á&Ž×ž!öáYÊ-PìôpúÝ Ž¾>ÊfRÊþ›‰,6_‡…õ ÏÙÇé ÿ–ëø´Ä7ýLÏ-’­TÈŠÜ™ 0äÔ‘+d© .£6t²|ç:jW/Jµo——Ù+Ôšwn]$ŸÏâpÛH¤Š\üñ[Ü[ÓçÓ³çØçëy¼Éo#]á­o-S6)dsÜZL0d•’JgÍÜD¦ð2?yµ}«ë~ë»·¯“×S4H1·6Ap#ÉШƒD¢È鷾Õ ƒÝJö?ó5¼[;qôQÝÔ­üô±±¼Ê½s'yú%6yšÄýÇÇ^ÂéíAVo²ëÀ0·&'é"¸´Â‰ú.W'}vY“ϬQ i·›Ä£~öOßCëö>~Å@$S’¯sov‘d,ÄšƒP0‚Æâ ·Ó‰ÖÖªäWß*½^ÔÙk›5ú‹…äe%­X{çž®^,:r‰j­¹-™¼íVØf˜d±F«%¶±B]ÚbzrÚmÒñ•z’H¥ÂÌÙH´ÕøïN“ˆ¬ròã9|Ý––‚”‹!NžŸCÕÈâ&HUꔋ1®_ºÎ¾Ã¶^ȧDªu2¶k}&B%>»™ªPËíá…W^%\ÁÐуËò‹øÏ&ksKÔD"@ÈÈðccã‹÷ósã™$Ãc#( N†¶éâ 7øß³ŸUAK¢ÃgÕQi°;=¼òú+l.ÏaïÆnüÅFºËÓK4¤@ÈÀÀ(ã{÷üRG"›al×Jc'}[|qG_ÁüVé¾Ùñ+$6ƒ 0!¢ŠAg è_A®³"4ÐkT,-¬bvºJåÔJ9šõB…‰B*DM @%¬#ÑZh’Hõ¨$I—ZˆšEjB½Þ­ÿÖHÆB$ŠMÔ‚: ¡ŒZ¹†LÖ¢T›ÓF&¤Ü!hÖQ«U”rI›,FÑxÑ‚Ãj ™Ê¢–JÉ…¬-¯#Ui±ÙlT 4FË–»©ã›ÊM1ÍJ½ÝM)EgsÒª7ŠêøÃ ,z5äˆ9R…*V“¹¬Åz`³ÕJ!SÂf×àlb2ÛШUDÂŒŽÚõ ý“ëŒÿ…B•ZM1Ÿ¡-”SÌÅ´ Ô—ÓF­Z#!ÑQÉeèõ*Kk˜=^Ä­‰œv½B©R¡Ù™6")lv+ö±:ŽIG.M[¤$Ÿ!l5)·$t8-T*5"( T ):­‚õù5=Ý´«e$ %õr‰j£J­ I›X‡ÝŠN«ÙrªÁ<0“÷Á˜7õ;ìðpÙMý›FRyV6SÛ~Â;ì°Ãr1•ð{w‘b5ÉãÍŽØa‡­¦V)!Ë‘ü|CY­R¢\m¢Õ=äv¡Õ É£Ö霃ûQ)•Ë刅Ÿ?.Rk¶ÑhÔÑQ'™* 3ê ·ëÄ¢PûÝ¿÷ ¶ÛmÎÿìGXû÷S MscÖÏ~7›euk7. Q÷aëT£Vú(×ËHjqûI­Ü"]S£ä~ù8U#Ê%‘vŒ¢iE¸µâ¿ÿÿñqkþ-šõ2§Þý M‰½½ƒÃn¾ÿíŸ¢Ò ÐìÄ£!޽ò×/Ü$‹sü‹o"K®qÛD\…¶BJ#—G Ó=0F[,!µv›àf ·KËF(ƒ§g7Çžßr-÷®žDæ%:{|SŠ G?|”#»ûÉÅ–¸6›AWñªiè·IX\‰óÊ›oR-púÌ5L&‘x݇™¹y—±§_§Ç%çüÉ“šBÈå1 æÈžN}Røè­oâ;|œ[çO1¾?+«ííeaz±ÁÉÐ`?épˆL2ÊÔz’¯}ýóDç/2—2Ò§I1 ÍÌ¡vz¹ws•ã_xq«…^+£)P`Ы·EÇ{ßùkv½ø—ÏœbïžÝ,«ëàÞí»}^z»ûˆÄ"aÙ2_|ã÷N±VíÂÙZ%ضR\½Žg°‡ §×øÊŸ}ŽV¥N%¢%Ö HxùcãS™ÛI–nû .¯±{ï8ý=c Ž!n Ù½w7}=CËuª…"gv†Ý‡úX¹ °¼ÎøÁ£¨õûWüŒ<ŠV­¦Q^[c×ø.ú{ǶHõ¯SÍÑ8öòú¯P/•(´tvQ+–ÈäNfn_¥sø0»öÓÓé@®S!”Ê)ä³´„Bš­:År¹ÑÌæòˆ Rm – )KT·éÛÏétRoJ¤‰Ñ1x„F8 €ÖhC*(S«Úé é?€ÅdE$­£—Á./ÙpƒƒGGi´, ú¼ÈU2«@Pnд -¯n‹–OƒÂ`åÒÛ?@$³¶¦˜qíêMÚµ"Åtùöwxë¿Å¥ëó¿<ÆåëGÜjQkJ(,_'˜°¾¼J¸ðÃïòƒo‡wÞù Õæö™x56~÷{(dÖü›²®^»C»š£˜òóOóüðŸÿë·Ö~yLgß ÔT›r2³g‰䬭ÞþÌ?ÿßÿæwxïÄûlK´ò§3;Ž‘L,"RØÈo®1|ì9î\:MS¬  1|d?«s~LV##°>?ƒ^ÛF¨°pûôO‘:ºÑ)+ˆnþ)rgV=}$V9öò­…Årî]9Åòú¹X€b¹ÎÒÔrµ¹TŽÂè£jSV;´j¸\¢á5’›qê !¹‰ÜÄ‘ƒ£¬…²¨«)Ãl£¨Õ*Æ’ ­áîíÝr³ãÒäeü›⛫ȴRÁ”>Éõ8*Y™‹—ï`ÔÖ‰4¥df¯­‰©Ç24›œ>wo¯ž¹Ù FC“KW§1©Ä”Ê ¦gn¡2ºPÈkt Žc5=Ù9?‰xš#/¾F»’B¬±SÏD´ÊTZRFöí£šË¡Òqy]ˆÄ2zz]Lœü݇^ÒÀ=r—QA±\F(”cµë09½Øœ.ú{¾oã1Od9öòëÔ Q¤ZåTa#O{ï%ŸÌ 6ØpºíÈ” º¼v®¾{¹oU»Lïþç1©„T›Ušu9Î=æŽ.lv'}}][ÞEÚ1;î°Ã[Æ'6;Òl@ãwovØa‡ÿšiñ‰¬6•ŸþñÄî°ÃÿNi7i·ªüÞmj‰T‚\.# "ÖZ©f#”dí2‰BƒnµÅ¤#›–B±‰XЦ˜K"ÕÚЩET*-)»ôÓ’IF‰ê8ÌFRëëQ¤Òåhõ:,Á•Z“Í…A%bmm^C*E©PP®6éìtÐj‰¨—³DcI¤ %µr «Ë‹N½õ9¶ÍFFK@2D¢·PϤÐÚ¨å E¹T£QÎQhÉPP"[Òé´Q¯ðoDq¹ìD7ÓxºÜÔJe¤JB Q¯Ñj É¥£ˆ”F4r­¶©ôɨW,P*å÷[ÌZíorÍ$¨õ:*•&êGͦm5H¤óh”2„Rù¶´­ …‚V \‡R*¢P(‰Dèêéùy-¨E"™¦ZÈ‘,Õ|¼³> ÷7ÚÕøƒ×~³È›ËWpñþ[gY -1q~‹[Í…s·W6ZœüÇ“HZò—f7H§X› °‰!-.q{CFï0‚´VLð“÷/¢’ ¸»è§ßcæíwN2;u‡J£Íå3'¨DÌ.D™žša`xõ g™)T˜¿t…ÍB‘…©Y$Â2`ÿ¦Ÿé‰Ó\»„z‚•pÿr”¡aï–k¹zúÇ$Z2áE®]˜ “J°+1Ðí"žãí§H//2³âG¯—sçâUœCc´òQfîÝãÒ©kd*Úr=ï½ócûÆNþD N~p Oï÷.½OAîÂnx2÷B}øÓÓhçy÷äMÔ¢&W'¦È§7¸vûÞ^>zëïI‰`nr™ÅÉ›¬Ds˜*Væg)¶Ö˜¸z™L¹ÂíëÓÖº1Ërü_ÿ廩nrîâ D—&éêéÜ’ý%¼ós‹¤T¹rkžJ%ÇOþùÛ,ûƒ£)º»»i$ù?þîGåR66(…Ö ¥³LN\g3W§ÓeûÌ.8:xíÁ—j ‹MŠ3ËÓ/ïâÎíÛ¨ >ö즃¿:N±ÝâìE?^E…RFïCÕjáëî~HÄöS/§Ñ»Ø=2€I¸;Œ6z{}t›¿‹ÍÓ¯«»Q‹{ß8ÚFŽpºIo_/jI“[wVéÜÕGο€ÙÖ‰«³·ÝÀêìbóödòÞOŸ—Ð30ˆ œÆÖÑ‹¤\!Ÿ+¢·¸°j%ˆÄfœr9J•“kQ)L­GÔPÐaq0Ðç¡^ÒíqR¯”)WtwwSL$°[lܽvî®nžÌµË}Z­&•J•l*Á‰÷~F2•âÞBŸMO4SDëêCœ\áÖĺvïböú-’©«±—Þú3³wX‰$¹{ýý»Æ™»{Nexd”™É)nÜ[aÐgãÒÄtÅ{SøFžB+ óýâøK¸s{–}ϽNSî”`:Jas]×ÕL<ËPo綉}¹žxð.‹aäõ áDD(…V/"/àí`¤Ë‹Pk¨–c6ˆm¬°Ì2Øï"ØÀÔ1À—?ÿ,ËKtÛìxºX™£%ÕrüÕÏÑΆ1¹:¶Ü츲0E,] °:O÷øa2ÁE<»†Iof‰JÜ™YÅÛ¡"¯0S/²Y,C¹d˜˜[Å;ìfe!ÁÞý=ÌÜ@€”¶XE|c¢XƒRÇ;´‡ll•d©MW‡}k}BDR9ƒCˆ…RF†»È—[ â²[PktÈ%Bz‘kÔœùéÛèûÇÉǃtôŒQ®¤yñ•ã¤6c¸ûèòºQ*õÚ;ŠH¦§ËmF%©òÏ'.ñâ3ûˆäÚìßÝ·%+©VO·ÄjUÄ öw£ikÜt¹íhõZB_úòëd7³t b× [ty»°TM¦'~ó{™ãá5Úr VãöìvÜa‡OJ³Vdn~®”?¯'åó4š{¬H&¾q¢D¯gÛöÄü!ò‰Í޹|‘D*ûÀÈh>ôùvx’°»Ý” þõ&G@õw}vEÌ&Hí|ÆÿMDÂ6rÉ'›kKˆ·žìé~;ì°Ãg‹’rê|¢ÈL€d`š¤ÐŽC\àÂõ[X\}ìÞ;¦…ØÒ<‹•ÐÂÞ±ChmT¢&Ós³ÔÛ2º]&æ—WØ÷ü—°h·/'ô7i·[ÌÞ¼ÈF¶A__n‹’3\A¥iQ©KQé´ìÞÝÇõ‹WÈd Œ~»¢Î•k·°˜ÍDâ 4J%…Jƒ=‡öÑlK)DX\ ·XÈÄãôî}š¾®­OB‹‡WAndýöeÄÕà ¶]Gñ9ŒÔÊi›%Dùu"56iž`ºÅSÏ¥’ pñÒm†ÇY˜ °k7“7W8òÊ (ÅB¢Á„  7.ãØuU+ƒTë¨Ûúq¸Ÿ„¹ëg $ zîUtÊýl2Ir-éÀ<"K7zr\¼|ïØaú<ÿZOºsã£|æˆÀú:­RuÇ(f”x4J©\&‹1~àÀýB{«Âw1(¤²ež;vôɹm{D/ÒCC¿g–üäÊK¬×¼ü¥/sõÄ ê ³²4MÌŸåp§‘u™Àò" U ©šb û üã_¢cHK ‘Ç¢ýì&T2A¢ÏéæÂÍ|û”g°v Ìs£™BãE Ø¤§ÓÁ⹈ínÂK34µéÞ. ëë ¹ Íb˜ÍXY‰Xggmay[.0éÍUÊZ¯“Û—nãeíÞ<>ÇZÕ<óKËèj„¢†çŸ"~þå&È5f†û<\xï*û^ãÔ[—Ùûâëk †z­$BËTä6¢áyµ$†Ðe|b/0É"}z7?¾Ltý&Ú®¼Ý¬Ü[B)kà÷‡yîM·¯ßàÀ‹Ÿ£¶q·¿õ–.rÁ©t„…¥9ä}#û¸{æ=ÄŽn¤Öá—92º=͉©ßEâ9ŠÉÿ>?\ˆ1¸o„µ[çi‰d,.ÌóÆ×¿A=4ÃÝ™}>²… ?ú/‰Èf£Z(£vvò¹WŽvûb>›ºÝ*³23ÅÚü:fµõU•"ëË«TšÆöqýÊÊÙ(•ª€!»ŽPNF5›$ˆ ²Ù褜Êo•¼GB(‘‘ODðûƒäÓqbÑéXÍCw'{’lœê¯£é@ˆ6E!l $‘u4£~,îA<}#Ø òñ(Ͷ€Æ6ô %1¹d‚rKD£‘%Ñ’´X_G(’PÍç¨7rdj5ü7ÎSˆÏ/M…¸v} _—ŽÍp •QÂf8F­ Ï#‹ˆ‡üh]J÷ç2Oný¡VÊòoO…A¡ „ŠÅ‰˜¬Zbéž.R±€Àê ëk~l^k÷0u àèd÷p?u;‹H­b}-ƾgS˶M‡ÒÒI­ºÎj0ˆ§ËK¥XÆíÀÙ=Æh¯j£ÉôÌúV–;3Ð,’.·qÙõ8úŸB/~¦mêG]Á<ÐìøÒë¯S(ƒ¸Q™˜ÕÅe:zzÙ\^ÂÖÝOÒ¿€ÎæA¦PÓ(¦QšLÔ urÉ¡«FH ”¡olð3_Š&6×Iš¨5"9µb™¼E©ÒÆÖщV. ÜC³ŽF£¦”âßHa5k‰DâèÌN#ÉDµT†X!du~ ©Æ€ÝᢒK¢±Ø·¼MÛX¡Ü”Ð,g18}#!t.­Z™¸Îz0‚Å £‚q#M*WÅfu"“·X_ `q8ɧ tøl×¢¸;í4‘O¨"§]Ìaè覔 R¨ð¸·/û÷!Z#Uláë´³¾¶ŠÙÑ…¸YG,—P+ˆ¥òtz}ˆ©³´0Ùí#ãèö±¹²ˆÂä ‘Qª6ЪĬ­®£ÕÛ0˜´T«-4êíY¹åóy$Ôɫē.'‚Z–r[…^%E¬PQ)QkÄ‚q¤Z%µLŒRÌ&´ë¨5[Ÿ½û0”ÂVÙ¯×`ÔEÚqSï°Ã¿7ŸØM­Ô1 *Û~Â;ì°Ãâߺ=zÄ.’N£Âjú·7#í°Ã“J­ZA –>Ô°X*•P(•OŒið7©–ˈerD?ß=\-—©µZ¨Uª‡fò¦³e´:Í/Ù>ÝèX`êÚ‡l lLœæµ7ßä½§)FÊ{j€™{ã·?àùoü9¾û¶Ý{147ˆKܤf®P®™xí {xïø{úxéÈž­QúoЬWøéß¡*T`wwðÔhó·ï ÕÖ`'‹ðêÏòñélÆb|:íçüÒ:²Z›¦\J«±”á±]´ÅRâ+7YUétëðÓôìã¥vo¹–›?@å#xï yŽbÚý4Ï÷‘‰,ra:ƒ±`µªaÄ&dz9ÅW¿ñ&Õè?ýð.›8Ã舋©™0¯}ý«8µ2®~ü3L½GI.]Æìcvâ"}/¯ß¿åš> 'ô]âÅ2ûŽ}•°ŠÞ`D® é L^=÷Àq¤±>žZapl.³ÓN*âÊ ö9ŒA¥ ÙÏæÐ›L2 ôJÙöT ð÷ÅÁ×¾À™“pôÀ^C Žwrãêuôy½ÄÃü+‹¬fJü‡¯|žå;²ZëÆÝ\e;…•kô uñÓ÷øïþÇ7ÔÛh•BZ":õ#:É?!Ÿrtl›™ÕÉü ßüËoÒ{ð . Ãyþôë_§^Øàb¥Ì¹ó‹(ŒRöÔ>' IDATÀìZ”t1Œ¸œ£&U3}eš7þä°~F•ÞrÊÖ1Îñ£^Nœ¾†D¡¥g°“õ¹iôöNÌV×.Ñ=ú –Äýѱá¹"¹‚\<ŒBi§V«Pk¶êŒ,Þº‚LÒ¤Pª#‘´ÉåK”·©–ïvÚØ¬‹Ùµ{Þ½Îð¡£$ü1ïCo²!noP.Ùé•è9p”dò"!\ýìírïn‚g_ãÔ÷ïrüOv ¤pŽ8p;¬dj \+Ù¶’g`2ðäÞ" UfþèKùà{˜ž=‡vàÝÁµ‚F…RŽ˜[óõ7ß$>s™ׄ“y|]]d“Q.;C,‘æµ—^à‡ßú[ :GÆ:hh†øò³[?Ò@k6ñÃÿï°u™˜]X#š®p2¾Ž´™#¼Rá£Dhs­u˜îû÷Þ–®)"&6û!ñª–ÚüïüÝß°®38båK_ù3t[ìæyÔѱŽkès05³Ž´ÕFbëäk_|ƒ|2ÀÝ›Ëôv¸pg’ÀÊ2¦ž}c‹4j-µ Hš-Œ}# ê%45.œ»@ªÜ¤»cû»B©œkg?`f-D"´J¡Üdrb…ZŒB¦DntÐ¥nQT;×+ø¼n6B«DƒQJ¥&rµ±TÏ ‡ÇX çPc¸‡F¬GÐj•Œî9B2°N×`ß–w‘¦'γʲZC¦V_ŸCáó_K ‘—xÿÌMÌÚ:þ†˜ä½ ªjÑ ÍFˆ·NLÐ7 çÎ=?{mLÜ^Æe׫J -\ßPO,²Ëqú½X{ûè~BÍŽ³7/29»ŠÎ¨¤.cõîB Ò;ÐE)_"Y(002†ºžääÅ«”k5b ,^'éh ¥ÉÉ®~…¦ŸA@¼Ö ÝVóòKOQÊ5ðuX¶EG(’àå7>G5FªóRJG4 T*žyþ0‰p “ÃCG‡©BÎ`¯›Ó?|ï~&o³Èð¡0«„Tê%*eÞN#ÎÞ~œ»Fú·ü°ÕjÒjþzé‘2yw&;î°Ã¿‹GûÛƒ× êµú¶Ÿð;ìð‡C«ÕàÕ`"¹*ˉ▞Ü;ìð‡RVå'ñ"‰% •Ó¨¨!£^. Õé)äÓ”rUÌ#ÑÍ›“F¹€J£%—ˆ"*(ç³(uz¤R%‚v‰\þ™›³Š¹ùJ½VƒT, K#·©ÕÛ(Ô*´jÉx‚z£Æ`A%ÆQª”ä Ed2µz³ÕL»- Y-’ÍdË4ª´fJùÖç·šuš-…T‘ZG³Ca0#—ŠÕjƒVµHµ-AJRC€Ùt?¶´Z.ÐB@>SÀd·!¢E2A®5PÉeP,(¶©{òi)¤ª ¬6;¿Ú•­×ªD ©(B• ­\H4Ae° Vük:ÀF €ÓóÙg½ä³T¥b±Dr™„Dx¥ÅŽRrÿýH„7H•ëôvû(e´¥Z¤TiåÐ(C«Âü|”Áñ!âmÌ"þ¢þò‰ÜÔmn_ùˆxSKfæ"ÃÇ^æÚíeTÍ&. ›“–HÂù·þ’½üÜþ—;ìæÂùU,nŽ®—‘æW~þyT[¤ïQ¨—Rœ9yg‡ƒ{UxáЧOœ¤ÕÈãèì&°<þ籾œ ÛäÕ/}•ÐÕˬ ¤Ô‚ª©6—ÿš“–¨A68I(&¦§[O*/A)ÓñÊçŸÙr-w/½È±zdÿzµR†ÐÚÍ‹Çö’‹.rúfc=Iª)elÄÃüí9žùÚŸ «§ùèýïÓl)Š|ýMzMB‚þ%V×i7Ê({ñêÓ[ßj\ûø4*ƒ¿¿‹Rb ‡¯‹ÓÊÚä,j£Š/ñô×þœÀÄeÒb-¶|–Ðü ýG²zý*Áx“Ó…Ëj@¢0°±4­»Ÿ„ ïøËtڴۢ㣷þ_<{Žqóú öïäÆtœ§GíÌ/P™ä ?ËÚ ÚR™F“žnåÔ"·‚œ¬²R’‘œ»Jß¾]ܹG¡l‰±ÚÈÍø:Ì[+@ äQºH6;¶[ÌMÏ1{ Çða¦.ß¡×碣ÇC¹,`ÏÞýhAâ5·ÎO³ëh«+Aôò¶V£I£ÕúÌ73ÕË)4æÆÇwÝÏä•*quu Ö°»œtí%ºp»o_ï v³Çî1T­"‰l»ËRÚby1„c°—|p½Ù…ÁêÄdÒ]_FdÚžL^÷~&oWÿ ‚j»oI±L¹TAkrbÔH‰¬8 4F#&W?âZ‰ˆŽt¢Œ?¼‰Z!¡^*PkKш¤töv!×hhW·Ïä÷i‘ë­Œ>D|vŽ|j“É¥e®Ÿ;K¼˜eâö<{îA¤RUÆ÷„ì&ö~/ïþÃ?c»Õ†Ã¨åÖÔ::y›B:ÌÏÞ;‰{`”ÅEÿ¶é°ôìaùæ]º; äkb†z;ˆ×4 ÷v°kß^Þûö÷ˆäÓ„‚ñ_c¶¹ïÇwеHS«h\»IÄî?åô)’ásþ÷_\Ú6I$ðüÅÿú…ßÛíFe`Ôç@ ³ñòk/ѬæØX 3º¯‡Ë—.SlÈyå«ß@Þˆ^âè œŠâÙu˜Fxš²ÚD¿Ç½õBÿ Är1ÿ-¦—CHkiâ©"©pVL.WÁîí¥¯Ã3:…£Ñ@bc™ðfN¯d,†ÞÑË‹/?Åúj·Ñ€³¯›ðÊB¹–ƒÏ½B+ÂèìØòѱë‹÷H¦ólúqî'ZÀ6šH¥ÍÊÍk45ŒõJŽõ`’´š©@žjl‰›sAº¼°¾x›H"Í¥‹¸º»Qãô‰÷) göÒÇD+bÜö?Œ/•É+g¹|{ wg7²_ñgäR ê áåŠB5ÒZ–÷Nœ¤©4aÕÿëûsýê5ìîϼM}ýÊE V;“w®€@D2SÇ S2w÷"­…ä~ËyîÎó+tû:Y¾w‰pIA;µJ  "²6C¡åíw®Ð=܇|« ¿B»Õ¦ÙüõÙÔªÁ<4“wbf™LyR«|wa…’ÂŒÏ$ãÜG×øò7¾J-çÒÄ)2 Ë‹ ^ñXS{¸{ådÖC,OO±Òªð•¯|Ž÷tžÎ7_Ý6ñ¿ œ²–ðÆSƒœ¼:EwÇ!: Ës 8ûGXŸ¿M¹EëÙ}³ãÔÉw‘vøXŸš ®7‰¥v3·%_SÏ®³ 7ÉQY=ÌOÎ1ÔeÛr-Áå{ÔM㸼N®Ÿ¿Aרs·fè~ã)j…×&—°¶$´iÌ/#ræc M¨lÜãggÏ£ëÈç‹l$ŸbÐ*çÀ±£\¼p‹øÂ{†lùù?.¢Ù/æÒ‡—ˆlÜA碿¯“é[óè ¦ý|ñÏ|Ìž½ÈÓ¯zà.ßþ›÷qïê'¹ 1¹0‡ZCc¹uî$"«q%küUžÛžLÞÐò]æç—I•ò w§¸6g—CF4žD6y½iÿümD'óý doo'®Ç)a>x›Àj€]ûº3\~ÿæ‚9<6;ü¼[ÛIjóh]¤‡fòÎMÞavj©cŸÏƒ× $Ì!l7Ù‡Yºu†.æ¯_ãØ³{8uæ‰H˜_~˜žRC 4…7h‹?›M\B±„R&Ih3J1Ÿ!‘L“Iç0{z8¸kðþxÕD˜_õGÆ0ä,EZ>rµ¨Îô=?Z§…zx»g˜áñýtÙ–æiˆe4·ÁP­Ñ¨)d2´d*•$ùLœ¦¨Éâ\©\ µ õf‘\£ÎÚ­Ë”vâóK ÐáÔk „"ô÷y‰®,Žg9ýöIºúxú+/°<9·õõJ‘Èf‚Ttº@@¶.æÎÅ˘ÌJÑ2CC]ÀýLÞP(Äòê:¾“—ïâ§³{ˆƒÃ½ZZ4­4M‘é9?O?N9‘Ù6JK/ÞN½%U”ô»,Ôdº»{yåµ—Xœ¸ŠHoG«øÅÿN‹øF”ºHˆð¹\ŒîÙO&sÿœ—×–q»ˆÔþÿöÞ;8®ôZðûÝÎ9w£‘#‘‚9s8¤&‘4#½‘ÞÓêY»+½}µ^—]åZo­íõ¾rÙÞ-—k·\Þç'k%­âHi4‘“˜s‰@$"ÇF#uDçü(Î ‰yÃá @ê©U¨è¾áœ{»¾{ÎwΩ]cã pë`î‰"MÂ|íÅ#D–A›KCM‘ÛAhq–áÁ -›«¸~£—¢ò ”—x 瘚Á[VƒÙlÇn’‰&Udcó˜VººûÙ´m7¦‡Ô½dfüSQ§&§±Š¥0™$bI…Ê p›TÄ% 䲸œvb‹ÓôŽÌS^è`t2ˆ·°Œš ?3yœF#Z³šÎëÝ*++I„æp—¡_ãÙéäpqIKn9Lae‘Éq¼ÕSYŒÚ 7‡¦(+p‘PÌèÄEf–RT””ã+ö"¥â$)FǃÔ×U É#ƒ=h¬TÉ0¾ª&|އ¹$òþ™é'Shm(¥§·Ÿ’Š´bYG*gr6BSc:²´ß褸¦ž…ÑqjZê¾Ù­°‚‡‰x*‹Û¦£«w·§„B¿“dJƵN×!ãp:‰,Q46–æÇQËqIGCmËËiÆú±úËqX x=6º.uR³e3J*ŽÁb#½#•I‘JƒÕ Ó?6GMM>·kÍÃÔ«ù`V­É»šÉgSçÉ“çïCsd3q>w6õ|x™ñ`hÝΓ'Ïz‚Ãx÷cÒ½Üc`²j)im¥Ë“gsYµµjõgÖl&ƒV¯èi,ŸÆjòå²Y$YAoxtäÔðÉ(Òj|ª÷u¸ã$óB!Ѿ ìxæ){f ̡՘)6«˜JAY‘Ÿ¶M­œ|ïuâÑ»ƒöwÆö§ŸáƒßÀ]RÌS‡Ÿ|h!AYÌpòè›dÞÒ 6Õòê/Žb¶ ˜­"‘Eö?±Ëg®²¸¸ÈcG¾†)6Mûð(zYCN£‚TY­¢¶i¥&ox¼ƒ‰™$EEv0åu›Ù½»eÍué¹z ƒ¿™@Ï%2Z òÒ,Ζ½loª&6?Lû`Gv‚éŒjŒLDxòk/¡$.Ÿü 9•…à;¯:Ή£ïc¯m#g%íÙ²æ:|\x÷w,Æ—iÝûvŒÑlE«×ÐZìŒt^ÆÓ¸]h˜+½CT5n¦ÌcÇìt’ /qíj;wîÄbÐ!+éd“ÕF&Åds£Ó®OFrçõkdBs”nÚ‡Q ‰å(“£ÃÄI¶ìÚƒÛá„\ˆßüîCêË‹ 'ybßvTR.JkÄb~ˆÝ7dT·ÇUøÔš¼ÃSKD—gð¹¼t];E×å$ù?ý5Sï#¢Ñ(zÂÑ(Rj µ¹…gš¸pü él‚+»©Øtëü 1àaõ(HG&1ùÚøÊŽrNŸ½†ÖPKqM)Á^,žb,×.R\¿{h¥ul°Á`"œGçñË$µZ“•É›WÑiÒ$’YÔZ…ørŠ„(®‹.þ‚‚9 Íuœ}ÿ*¶î"<1MÕØ\>TR€DÜC¡&Eù–}DÂë:Æ•ëƒm‹¨r™¬ˆ¤M-¢Ä²lm®£o(¹.:|(‡Ÿ>ÄÙ×.Òßõ!ަ]”—23@P2hT*Ü02àé¯þáÁ+\8uXZÄã- <7Źc‹Dc ö=¶Ÿwò}D_Õ.÷&žÚݰ.zL^=®õ9¯ÿˆ‹!ÚßMvn Q“GCzéω t‘\3uâûÿöo0W–a¶ø1»l¼ôâóo= ú¤qQ ß»ÙêFŒXN#¤sd n­–Z 8öÚ+h#Å&ó3QâB˜V;±`ï½)bµ;±•o%2ÕÍìè,%•å¬O åÕÑYýËÑ…~b‹®éa¸ûf›%“Bo+¦P˜!¢Q£Õ®„¹’R!#•’ÑË2sÛZÊ™]Ä,%ñÖ51>ÙA.Ûö$02HZÚ„aÿñMÞb"1G@YÄà±0Ö}{Ãf:.ݤºRKÿÍ^69˜­Ä_û)sŠÙË4>þ4ßr•pñB'¢( ¡SPi˜²ËÜèBg)][á¿D2¡i>|}«ÍН¾kQéÙ[46V1>É?ú!Qƒ‘™ÑY¶íÛÏÎf?‘¬å¥Êë¶0tã¥u[ºvœé‘‘uÔC‘ï/Š´j=˜††ZnõQ^WÉÔÀ[vÕÐÙ7Ni‘ŸÞî›lÜó¹X?=3|ý;ÏsùÂE¼…eT=bíFµFƒ—¹>0:½Ä\(Éìį‡Ò’BÄtšŠ¦D³ìÚ½ ¯ßËÕ3Ç‹RUS‹Ó¢#0>DAc ‰©a|ͨÓ1ÜÕzìëªÇ­ö ÄÔȆñWP]½¢GE¹ŸÔrššÖÍ̇g9°s;%>Î~ð.Óá•Uµ8Ìj&†nQ¾i3‹Ãý”oÙˆS¸¡Ÿs}j++(H¹OF‘ù>jòæ“óü± Íãrù¶_˜GYLò3Y¾š¼ËËIÂáèÃ9Ož/AÐÿƒø ?Êz¨Õ U=ÀJÞˆ¬!(­yËv‚Ôr”ë×®±4;K_ß-\>'ËI‘ʼn>®œ=ÏüÂ}×ÛQ[|8íkŸ} Ï‘Ì*ô]:IHT1Ùy ÅêÃfÖ#å’ÌÃĦûšI[¡w8@II1éÈ §OœÅb5Ð~¡‡SùSgñ–T¢Sçh?~ÁîâÖÅSD0áu®OgÃevf“YËÈà8‹ Ý]íRGzn`°ZYXŒcµÞç}‘’ôÜD§–‘4ú{޹¤"®uÜDg´c1}ô=03ƒÙ¤bv>‰ÕòË>²ót„ðûì ¤x÷•_ã®n¨[û %­ Ì*ñ3}0«‡©³‹ Ž-2¹±; ûoÊ-pùÌ,õ/_æÂÛ§Ñ:ôt*´ã½Ø+ZŒ`–‚¤'G±ÔìeôÜž,ÿKR1;2ÑiFƒðØÎ&ÎÝ xÿV4V-cƒ½øªë½F2=‡Ñ߈¤[Ivì?öº²j&{®“³9™ Åhj,¤¿ošLfŽlt’©Yz§ sa5·ºz¨,=°æºLö·#z6á)* ûòeJêèè¡øÉݤ£®vã‘ÕíF{þË6jK8öê‡lùJÁ 5%LLÍS¢_"§·Ò}±ºZÓ“A¨*^s]¾gÞCÖ«™^ÔÒ<1ÌÄì.‡šåŒÄ#ß`b¨Ÿ©øËíé()‹Çmc¼¯½ÛGx2ÈÒì(F—1³€¿å ¼Y._4Nm™·ÓI&“]3? A¥"›LFɤ“$–¤)ÜõlßÒŠ«¤ynŠKèiÝŽcy’±yرo?V!MÇÕÜåEd#x‹©ßº—ªb#]í 7ÚµýRqº=ä’Itv7¹ä"™dE%15:ƒÁâ@/ÈHJ–Œ$1ß߉h)&>6Fr9ÌÍÎ6l( O f¢ÜìžÁo,¥&! œ^ÒѹµWä bõWñäsÏ¢—3ôötaq8‘4NZ6LeÐÙ ñ©² NQÖÚJ|6ÈÜì4K²á“ï "ʲbYaóþƒ,ƒ  R^¿àP/SK)ª+‹™žã·êÇ3k¢G&¹L"g&¥¨´š¯tNÄYZÏSÏ&22ˆ¨ÊÑÝ;¹ò¾ÇGRã  ¸ £bxj›ÅDp¬—¬ÞŽ×_ÀÖ={1¨×ÉÀ¬–M½ «šfÁPˆ[;AIófnPÖR‡×¼ {ù4=#ìyæâR:—̬‹CE_wÍ›7á–ô4a@Á]à Šâ*ô®©®Ÿ†ÞVÌæÖã q6ØŸ˜Åçòa4Éô÷ ÓØÚŠ‚ðZ·IDATÛ´‘¸¤…’•ð¬A•#…‡¯¾TËHW'%-»Ù_UH`&Èî'^FkÕÐ}õ:Ki/~ûÛ$–ˆ èÖ¸$0ër,LβçëÿÑñ!ê64 ¥²¤Si< %~IÅ‚67O4»ŒÊP* {‘ÂÊjÂÁ^2ñÉŒˆË¤ÁZÜÀ憺®±qÿ£½È ©­ µÆÂ“Ï>Aƒƒ”ÕÔ`7ëQé XÛÚ°ÛŒØý¼òÿþ'6~í¯ÓËlinæóìÜwÇÕ+|åx\^L›|¸ìZBÑš¶JÆû/ðë·ÎòÏÿ›ïšOPì^›½‹Ó£4lyŠæÍfëJ]‹AKK[*­‰§_|’©éI¶ï/Çzû\”d4· Heé8q ¼ü×»ïíÂà(¡Õ»~õaEFP©e •J,¯žœ˜o›'OžÏY-áѦï•J½’–rw˜únw–™%½êAóäÉ“@£ÈŸ0.Ÿ6ƒ¹çÉi3Sè}X5èòäù|H’‚õj>E&')h×!*´®üA/µðÐô“¤™Tì“3ùÞT“U}0rrš¿ûáûT6–3Ö=AKSq…完Íд¡š›ýèôvÄð ‡ÿìEÞ?qo<ÙÂ~rŒ¦m;ñªfYÒ•“Y˜ Èá¦zëF:Þ{—‘$SóÈ©Ä"*Ü´n,ÂWQÊÑWÞÂàq¢ÎdU°e÷aê+|d1ËÑ7ß`YÖQZYÉŽ†B~øãw°ÙÁhñ†yú™}œ<~™àÂ"O¿ðu쉧{‡0)Z2j2i$AMë¦M Ñ³0ÚÎÐd‚ÒbSÓ!j›¶óø¾µ¯Ûwýâ‡X‹›ë¸@ÆàDZ˜ÆÛ¶Ÿ½-UD‚C\ºµŒ+;ÁhÚNKd`<΋ß|‰t°Ÿ·>¼FUy!ÃãKlÚ\FÇI¿üWξ£¸–ÞógqÖ7³8Ø‹·e/Úª×\§áÄ›¯ˆÆÙý•¯Q`Q3~«ÙUEc…Ÿt"‰Îh@E%„\ˆ/ÏðÄ͘T ~ð‹9üX5=A{[*Ð dÓ)tª—ºçÙÚZV«&›•Ðë5¨*Ôkà8M†gxýd'/<½µZ‡,fT*tz©å“A­Ae”LˆWß<‰£¨Œ;ÚXš¾Áõ1#‡wØyïJ”goEÎ¥QëM·³ë×E~À R’Åpû2T6”¢SeÑY¬ôO…ùöË/sþ­·yöåo1òæûôص|ÿÿú;*·îFÉ%XŒ¤@Q¸5&º¼À“õn^‰ñßmU2Z³•…©žêâÓK`4Rè7ðÞk'ÈêõèLrÅd ‘Í}¡‹ côµòÜî Þ=~­¡Žòš"Æû{0»‹°Xõ\¼x–ò†½8½+­c§º¦Œ¢³3h=>²‰8²Ñ„¢51Òs*A$ž¡B-Ž¥ˆeÖçq²¨ÀÃlZÍÆ¶>|ó*M»v³8€–*nJvŠXÄC©:Ɇ±´x p׳£a‘+—gÙ÷L#Ç^éä+ÑÆìøÍ…ùÜ NQ½q7£7®‰‘BÀ£i`$o~ë ~ùïÆÅëø«[¨©ääÛ9Ü=¥u›v’9õ¹ •®~67Á÷¾q)â÷&@¶±0ÐÎô|„ò2+*³‡é‘aÚ/»©ö«†dŠÊ<(²ÄÖýOSìüò˘œÅ¸]¼úŸÿƒI5¨ô:4‚•ž® zþ%L‚Œ¡¸Âåö<û•úyþãÿ÷eE Ægôü—¡E’¢‡ÿ2ÑÎlÿ ÏÿÕ?akcÅ—.ëjÜíàý´Ìê¦YP¡Ñ¨ÐŠ:.Ý$¦ˆD†§1ª2üüÕWQÌ^ûõ/éGð;Êù§ÿì{xLj4ìyâ{Û X˜ _ suA L³DF‘É("‘‘)D%¢°~ ­EffÓ^2RŽ:—Eëàñm›™œÿBÁ`+`²ç,¿úý»ŒÝêäÌùktµ÷£h4Èé4Z[1•V#)•€F½bù—!²D$œAeT&/6·2\˜‰PRÓ„Z-É(ì{ìËÁRëPÝot¨žî.´w¡skéo?IÎ¥áÒÙn"ó3´_ï&™£'‘àÔÏÀàRŒöc¸ÄÏß¹ˆ§TæÃרÚîàØ‰kˆé9n‡ìc24ÏÍ‹'HÙµ:æu»?(Ëó“¼ö›£”l©aÇþClj.&ž)(t‘N¦0:Ù1OžOLr+¢§¥¢à¡Ép£«M·>2½>Ϊ>˜Õ¢Hwç'ɲŒô)5yóäùSAm-¦ÑÊCý.llÞ„üˆ~%I|0L œ`0øhfpæÉ“çÑÀ¬ðåˆ"iõ 7!æ2dr2&£\.‡Z€t&‡Ñd$L¢ÑPÄ,*­)›F¥Õ¡»Ý[HÊeɈjAƒá!ÖyÍe3ä$V‡ZéTfe•³¬ ÖjÑiÔ¤ÓidYA«7 U ¤Ri4ÍŠÞj5²¬`0PEÉf²¨ÔjdIBg0¢Y‡0¡"Ë(@.“FÐèPÄ,áv„CA’dIDB… Q0ôÈ’H:AoГÍäÐtdÒY &#‚¢N%Që å@­}äCº’( Š ¾³ªõ3Qd’É$©Ä2z›‹a•ì8)ÅìbšÂ‚Õ£–ÑÅy´V&ý—“—”M§0ŒÈ²„ R¡„{¶‘ãG-cCsALn/IQi4ð‰ß×Y•C¥’,ФÈ޾úkÌî"¶o/åï~v‚µ…D±ê\ôÝšÁé4 Î†(¬¬c&ž@ /óâ·ÿ-2g~÷*Y·ŸÄÌ09ÉÎsßýsÖfÁõߘŽrôõ·±¹=ˆ: ·×ñËþ^¢¨´’±¡ö<ó=ׇX˜›åÙ—¿Ef°ƒdŠÜ\­ÇIrn›Ç‚§`²F!4~ƒÀ‚†ê +Ós¼Þ ž~nßšëÒyþ-TþÍ$&n0ˆa$ Um<±w±¹[oŸÅ• ”Ll¬õÑ×5Ä“ßú„Æ9sú"Ù”„¤Ñb·‰ÄSlê«T8àúÅ,-fÉJI¶z޲G¼¢Ý…§(i¨e.£²ÔÎäô%ELæØP]Æ­áy*JìLæÙµïc×N2É!'c(Ø´m?ƒí”7¶¹AEËnF/ÀDº€–ÚÈ,¢²W#. b.ªc~ •Ñ„ÙíÅ “™]¦¼È„ˆ‰É¡[T4µ¹Nõ–§ñ;ï/ƒûýWÂBVÍö­m„—Òø‹mæR”蘘³÷±Çøàµ_’ÊÙ¼¯@ Ni–ž® ÊJHfu œ‡_yžÅP §U!còUÑ\_½æ†F%¨åìƒE‘”ìFG+‡žnœ<ÁìØ×nŽRZâeêÖ‰ÅÍ»¸t†Àè0cã½,¥ÌM³A@ù>Wòª5eÿíß<W=˜šÆÌ_¡«goõ^úêŒ Fùê_¦ÿF/ cƒ˜JÊÐÄfðmh¦ë »›êB/™L†‘þ.dúÖMìÙ¹õ¡õÏÕèL\¤oh RK„")æ&f±: ˆ9ð–VQSàF´y±ê5x‡Q—¦³k¡†°ÆF|¤‹ˆ¬š#K tôRZçc¨?ÈÖCµôtŒQ^b'Orõây¥¥5iüÍø¼ë[›öó"kM”ÚDÆgÐ-”VÕRRèEc´S\è&±‘òê:ŠýL^»Š3§O“VY¨¬®@L&ÈÈY<…ÕÔÖU`ÑÀ毤®¶‚ÙÉA¬žt*‰â 5H©,Eµ l(51·Ak´P^SǦa6Â[XC]]jtxÜ÷WO'œ$£³S][Ëa#‘ £R›¨ØP‡ßãÄâpc0YÙ¹{'z%IB0RY]‰Ûn#›‹£2Z± q´67‚ÁJiIn%‹·×»æ3½ ŒªÜ'ŒÌª5y {F•|)ÉŽ #W˜^ˆPÕ²ƒRÿƒ¯ÀÍ“'Ï£Q•Ãoø¤F‘ÅÏ®É+äÒéÄ´¦¾…šúÛ<à1òäÉóè£Ö Ȳòù£HÅnõ%ëÓë'Ož<œˆ¹ b.u>˜çîé‹ÔÀØ@'Ç®õ“˜¹E×è%N ¯¿ýNŸ—ão¿ƒlô0ÞuŽ®±9L¹(ïŸ|™ÅÁÀ<_û³gùà?F_º‹àP/9–-•:~øJ'ßþÞó|øÊÏè›LÕh±eÆè^0Q[úð|1éÈ4ºB<³«žsý4ÕV129Îpo¶?}7ç’˜\õ (ìÙÖÂÍÞ'[ÑÀì«dfb±$Û7Ó{+ÊäÌ-¦F»™ÎRàÑbõ×1Ö7LccÕšërýÜQB¸qY¡çÜ œ¥e OSW[F|n˜w.ö‘ eIEç¨Ø´™ð@/Žª:ô*«VâÍWNR¿µ”c¯]¥v£ŸÅ¸¿ÛÌÕSo3Ÿï¿I0¥œhglšëÊ™óÇéèîg÷Ö Î ûÚ)ÆçÂ(j…˺Xšäø™+T¶l¦ãØ1¶<ýúÐ oüî≫'ÎÐÛ×Eßðcƒ7É*:Î}ð6}“º®ž&¦õSæ]Ÿ¢çïýæ'ÓtáqŽžnµÌñ7ÃèÄý#SÔ64’šîâ'ï^ÂnÒXšgòzC3œ?sŽÑ…8 5íIâJ)QY^Y— ¯üêW´´¶}ÂÀ¨VØ ²$‘J§)¨l Íï&…B*Aàæ¥Iªíˆb)'£R«ÈäD´j›÷Â,e),-CÈ}±lè/ŒRN$É ‰9²Ù,¹lŽ’º<}`'þÊ&rÓ#|¼êjÑνx—ÇèŸSqäÈaB‚£ïµSÒPIzrY3;<ÁÆj?WNC±8QÖ!.XRZŠ’q–’‹³YDÆGg±8}8 dE"'ËÌõ ¸ªXž˜ •ŠÓÙ5GKS ™LµV “Í’Š.±JRRZJ2¤¸¾‘\xUNÍÔôôº„:YÉå$&‡XŠDÄr\:y“UÅàtœíÛH§ÓLŒÓ¸µ‰óïœeÃÎÔÔ5³µ¾‚¥´›&‹p©}€= .®›‹‹˜¸ÀÕk—0MÌ͇¨®ÝL]S+ IfE®\ïÄ'†¸Ø„\ˆë½#Õ¾š]˜äÔC¿G²”å_þ«ÿ‘oüù·^u›U[Ç6µlÅaJqudŽj‡Ü<³»ã'/qè…¯±qÓVJì2’”aIróÔž ._à+/<Ëô@­;ö’‡Hä2T”¬oSñ£5Ø1°D÷t„b£Äôb%+à²AßÐ Í›ÚhmmÃêpPäsb1›ÈFƒ L¥8¸§Žö«7(®ÛÌ‘#ˆÌÍÓÒ¸™’ ?ÃÝí,cçé#‡qé’ž5S3¤E‘¹‰Ú!»4GãÖͨd¤$ùµÕ…¼åè”ÁP·»Vbj.@YSÑ…,O>»ƒ©±(›ËPT:¢¡ *‹M*Áæ}ØØÚLMe9VóúÕwý\¤£ ÌdxæÈ^’ÙÛ6o£®¢‚Êêr*K=ÌÇdªËÙPWε ç(iÝÉÒD€#/?Çd×UüÕ”—SRTHq±ŸxFä±Ý{(.ôãvÙ°˜Ö&{ún\>?­å~Ü%Õ,§ÒlÞ¼‘"·ƒ«ŒÊò¬3o)ž:DÞH]SʈF7-µ•ú½X,æ‡7ƒ‘rÈR–†ºjÜ.Û¶nâúÎ{f0ùÖ±yòäùÜd3 2©(¹lêÎk?üÑOù‹ô¿?L‹†YœŸ½ó·"ËÌf))y´ûåäyt‰„#huzl6+ÏëÂ#7*(÷=ªP¿œñvu~E¾{”n/^û¼ãÝ+l¿èÜ%ºzõ }½ŸxÍé¼×ßz1tn7oRd™ÙÀ,}ÔÔ”ÞÇG)Ož{éé½NUu>ŸƒGÁ˜|9£æËÍí¾BePé@–h\12ºÛFâ‹’˜A­6Í¥Q©VlCOOõÝïÜs¯—SŸô ­šì˜Ë$øÍ«¯c2Ù¶µ `%$•'Ï K"+žð‡mÁñîæe²*õmcñ`ãZÌ`$)Ë¿þ×ÿ3ßý'ߦ²²ü¾ï½êÓ’óŸ8sßÉ“ç3/ó£8Þc\„/d\ø’‹êcb~~‘®îžÏuÛï™Á(Š‚¢(üàûÿ‘`pîÎß²|wí»~Qîësðiû=$™ó|A¥F?µRèÿNÍÀµËüîµßr£öŽ—XQäå Ž_ž@ZçÄ•)dI¾Ü·Y:â£s +¿Ÿvž¿÷©çÏF9v¶ëαÎ?ÅÔ|äÎñ²·¯›,\çÛ?R†àüÇô—é쿳-«œï^9îÞ‚“£\<‰áÙØ=ûÞ+ŒÎÞÉ;×ïäñÌ,D?’ñ2g¢tö ¼ýÞÇ‘çËGP©ÉfEB¡àc>˜P\ä™—¾Î¥·Þæ''#èþêýHóèS˜èK!†´üòWùæwÿkäd€ðô"iYÂçJ0F2‘`l1Ã×¾~ˆžoð¿7ÌÏþÃÏ«?ý)n£_xŠýOüÕù`,ÇÞ'sY5%¦§G’´ØQëU8«¶rd“ƒ“§ŽÑuÑHÎèâ;ßÜÅünuš·.Ýâ©göRVâg¤½ƒ“#lÞ¼¦ÊbÎ^Ÿ¦Î+ñáµ1þÍ¿ÿ_ˆõs¥s÷è gd×Ïžaÿ7ÿšƒ¥YþöõÚjṁ$RlÛÞÄ™KcÔo8Âë?‹¥Ü2½}ã”ÖUÓûÁ‡$<l®rPRîåâÕ~7E$š•pÙìÕ{xn׆‡ò%ü‡ÊŒK:•Àå*>šÁ(é(o¿ù.§cźkÌÜj?Çdx™\NÂb· 2jùÊ3ÏÒPWÉSû·’s(Š‚ @NÌ!ì˜ÍQÒé#3¶V¼åõTVºùÊ3G¨öÉýa&x+(÷Ø‘u+“[«»‹úöÊO uÇön«ED…J­Âî)Á¬ÊpõâÍáUjté0¿~ã]F‚aDQDmv 7„Éd2ŒÏ'h+÷@”Ä;ÿÀ$§yÿÔe°ºhmn¡¾¼˜‚êÚªŠ‘ÂêÚªŠðVUóÜám2´”ºIÝ–Ç_UͳÏ¦‰"— §§ƒJº3mWŒøÍYÂEAï(`Sk^Çm§º²r-JjÛh)÷#£¢ÔçCc/àñ}Ûéëèg÷c›0\è AQÈIâÊ~ *-ó£ýt(­o¦¹¹»ÎÀŽý°k–xjê1 *vî?€]¥BR«P©P²’¬dÚä$£Ó…¢,’Ë$Æê ,Deųqµ~+’ÆÀîct&'«>Ȭll¥¤¼€#Ï?Éã»Z˜˜ŠQ[[Ì‘ž¤¼²šÖMõ8•½•g_x E‡Ï[„F«cïÁÇ1k`׃llð£q8qˆa"Ë"ŠVo[q›5€€¨¨VúCiMlÚÔDuSOÜŒ,‰èÌn\& ‚Ь€ÎÌþCcÈ„¹zed-¿oRüÁ¸¤R F3¡ÐŠSW0ìUþ·¿žçŸ>½º&O€Î«g dìÞ·ña‹’çããÆÅh4“N%8=XÌ_þó³hIf4VÈÑ.ëê{+ŸÒ>)ÏŸºAG;?{Ó<ZÈ’Hhi—»ˆÐÒ.w\^YDJ_WÓíÅ«¡ÜþÉ“'OžûEQ 1Ïÿ§3ñRŸ™DIEND®B`‚fox-1.6.49/doc/screenshots/imagedebugger.gif0000644000175000017500000006500511637250333015724 00000000000000GIF89a Æ÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ, Æÿ·HB° Á"4a ‡KPQÀD‹&RH‘±c %T|)REÉ“O*ù¨DEK'.](‘)¦%7äÔɳ§ÏŸ=Ýèt#E¨'G“"%*眧s J•µ*Õ«V«Jšcg’œ;’ÀŠ ;ÉÎ¥²—.YJ»–mÚ·pãÊÝtëÝM—våÝ»ëî.½éöÝukÓß¼}o .Lx“¶$ÿ´`ÕŠU¢6”14QÀÀC‰%8‡Nð0E %4r4 ruÈÕ%_ƒ4™räÊÛ*’¸ÔÝD…“¿ƒ§PÒ„¸’8›ÈTÎçN <…:J´º”éE±»yStR§E‹Êÿq3þ©›¨OÓ«*‰ª$;aålµÕë%9eóÿ¯?ÿÚÿª%àjíBà&¶¤• ^ºìUX]ÿìãÍ>Ûø³MjC¡…mìòÏ6úlÙ>n“Ƈ4ÒJ4–H"I= BUÔY§¹X€FnLä£F-* ‰%e¤l$m3%n¤p‹$´Ýâ“*$(Ç6n¸¤BoJ$8Ó—7ÕäNIèd‹%GñdË-AEçÄuÒiça–<¡ËRRŒ'Å?O‡zReå^Uv\…_¡s¼W–÷ÝgÉ$ôý‡Ös¬Å¨€bÚÖZ…%x‰&…]b ]ŸÞê&ºl£Í5Úh£*dIÿ +Û$±‹«I´šÄ6MÜòXd ábIX‚D"L’¬$èhË$N¸è™ÛH­%%81I“HRÂ%Õ¦p‰$S.9 GNl“”ÿ@*‰-U`‰ ÿÐû‘êþ†“ –Ø"Ç™nÀû¯JôûÔ-iþ“îSþúzI¯NØâÄ-¶$z ›„¹±‹µn(\-ŠI¢XÇWÜpy€®7U¢øµì^WrÀ|Ÿ$2j³ZVêÖ¦nõìé&m‘**^¦>x×-‘iã«5µþÓ†ª&j“Æ&ûh# %Ø"µc' ”†5ö ‘µhðŽ.vûÙ’l³K-º(I·Ñž}‰Œ4KòO {Ÿÿín -Š4‰6>*îp–¨{ –)Ô[ð-ÃálÉ-kù{É? Nþ%ÿà¤ðšÿ =9èN„ž . c®êålîYrèÕî²&êR,žêâP‘7ÇyXúçS]ÁÌ•}‡ög©Z:¯Eó£.ßs[šHy–нѣšº5­n£Ë¯H¨ªÍÓ¶BM¯îÒ´6 Ñˆ#DÐDhÀçŒÝÊ·öýsK¢¾|-ÚŸ‹ ç¢( ^›sÑ%¾%K4nHrC“.Ñ8¡Xb^ÿŽH~C¹gMn-ÿ€Œ¨ÔÒ94ÁcrPXÄÔ‚´Ò%ˆt¦Ó‰ÂŽ‚B…¡îº¸XèrH¹Í=Ae*ÛŠ|ÿ¢¯PMù¹™µ¼JMâk¢¦¦ˆ©ºTo/i©K¨FÅ—[|ã1ih«NÔ¦Ù¢ ñ5Hp&˜ˆk @+b‹6  ’`„Œ–Uù$k^Aq&±±hËZÑŠ³°%‰t«Z IÝ- é[÷"W•ÎE9ßÇ%"%È(KlL¢ÜMDE°Ý'AMƒ*×¢âP–Ó™Ó³j'2Y¢²v²´EW¶‘Þ Ê*éAW*uÄC͇Q4»YXœ§<ÉM‘g"Ú 4áÅ@z•«Ú@N\­ M g­n5W¥ñWìkD," Y ÁŒ€BBÿ#‡àÈ3†L‚gR°#Ï5° ‰Nd3‘DYªMI –-q 9ÀqAdR¦*]'È1¡s £&K anR RVz4•)ãiQS€¨²ú xË|&3õ3ÍK˜%,‘Ò™YxÖ*rj-ڼăò2¹£m¢IhCT§JΨ†1 ¶’ªT±*UõAF Áj™²‚†3™HjꑌÌInMÁCçÚÝ g8º¹É]gR&¾îdL:Á qžCRŸÄ)NG©ÎJE™Qî.O㉊§S>PO¢¢‚&°T*Q`áOW"©qajy¥ÍX4¶˜j/ *Õ]²7˜¿ÿ&0¶µ-br ©E&BÿøÇ7öÜà÷Æ .qƒ;ÜàŠH¸ÎUnt…K\÷ºòvŸK\äþCÞ=î>´+\ðJhß°Ð?¼AÝô¢WŠÐ„¾›Ýë²·»ÿ os›_ë¹ÚˆzÏ;àáøúxïuÕë_ E¨¹æïyü!í"ø¿!šð€]5àùVè½"‚/‚EàóŽhBÑ6(´âáNˆB,Nñ‡B´ ø«ªÒ«Re ]ôXÜ뱿§µ ·JÈ@n•Ö|œäù{LþÞŽ“üä$ÛBUHæ^ª´¡µí¹“i@ör˜},¾.sÙ{JkÕª´ÁdkÜŠÿ{\Vò‘Õ g0{⃳«ðLf(³ŠÎ­ºÆÙüç)ÿÙËoγøþ ç<»ÓÌ`ÖÆ.ðæ{YUŒŸš“,èMZÍšÞž%àYµE‡yÏÞô;·5³ÓUº`•ªS½æY׺ֱv§¬O­ª[± ̲&ó™ÙÌja§˦vÕ•y=fYÖ¬òµ”uëIo£Ëf^³³­½e0_ÚÒvÞñ¥û¼ªï][UK“6˜ÝÜ*_íyË<†µ–{ d_KÚk¶v»ËÍ´Ëb}X¾¬ÇÜo]w¯Ç¿Vu¤}¥ª\ƒ™áå~÷¾ßãVœÞì>õ² ®ï5k{ÚünU¢7nê-/ÛãªÿN³š]kîý¹Uæ>øš«Ý=™;{Ï?4¥kŽïvFZç(w9ÎuŽl„ºÜXîùªFݵ}ð¸VipÅwí{û*ª’pU$‰^Gš{IÅ£±Üísç¼ÝmcÒÿ<é[ïJÒ‘ß.º‰¬{ïÏææžÀ¡&ô= ¼Ó^.´”…Ýöíý=ÊÝûž¯×ïÂÇüãfø©· ÷Ê·ÝW‚fÕ•¹‡yBOÍâÞ7èÍÝå˜ Úî]ç^ /t±Cߺj•$ð˜†cë¹V®ŠDðH‚¬ÙÚ¼Úf¿HV}mp Z5p¨DjµFn äDêô~­Bãs!¸kXö4ꄲлw!ø4LÖp¨*hä}%ð4l ‚äƒxõ¦ &x!6HN³§dÈöi çqî¶4EGqi–q 't&7tÃq_vnxo¨€|Öo¹¶yì¤cQèy=×exg›G…{7†éTƒä¤N¹òk‰Ó5âã+O£ƒmàV3s™5×ÐÖ†ˆÆ=Ë–+'¨Nä¤ '˜uÎ&>µwF¼Bƒh"Çÿ÷ˆ¬ösЍN³7{ÿæwÛ§fö¶~<·wy·jþÇgkæmGuœÖg`¶wB·lâ¦wÞ&€2nòvi\ˆ„p'w•6Šô–5F‰i×îäz#²eÅçf² –‡°×*éô.m€Œ²Ðuè|ï"~( øŒSs¬¦4i—uÿÆn Õ"v£Ö¶€Êøcv ‘` Ψ bç{vvo'tå'r.—k¹vwî”hé'h‘GoA¨mc†oàV…FÇq|–rkíd„‰nþ‡fÞÓoÕdêh5(@‡×6lk—†6Ç}çÆ‡ Èzr–íT|øòeúFfixríd€/ÿiF5æyä’/©rí¨t¤HŒYs‘ˆfÓ¸nI–‘ÝHuúqS6‹ý8kwöjLCyö÷dšÆo^öŠ’çn2©[9{.)>Wu_UjFykøöj|Wiy—j7™i=WŠ}w–›—kîö”øw«V€qw•dwZ9Š—fš7póx„‡ïVföj ‚øgä'ok…ªÆ*îFuËÆ…™‹ˆ ŠU¸fË}ISéh ÈØšÕÐèšgòš–pŒýò.³ù.·™›°Y›¿Ù›Ðè›­Yœ¼‰Œ·éšÂ¹œÃ©œÍ©›ýòšÐ) ­™œ¬Ùœ»YÔù.­ùœÆi ߉éÿ(µ)œäɬy›è œ±é›Ö9žÑ™œÌ™›É ŸÛ ž¬9ÌY›]‡ýµaÃecU³a3ö ªB!3&"`6bZ5 j!祠æµb)6¡ (F’2` Ú¡â ‚b!¢`-&c$f¢2¦!ª*‚¢æ…¢*¢z¡Þ@bè¥!*ªa:j`¿µ ª #² ! ¡+Zc &£.Öb3j¢6¡$ùze†9 ¶s8wisV|oÙ§†Yª~`ºr8g§”Tömeúl_&s¹¸”i g…–Ki ‰ÃeÚY Úyb6§]8ŠŸv{uê”'q?w¥Gçqaz¦„ÿŠ;çš¿¢bßðobǘ:Il·e·" _D…ƒw~–†©ZC†HsT˜n¥z~÷Vuirè×pÊ&‘à&pìäfo,8lšÚ*œj ¶\À\þðfmW«³hf¸JªIkdVzŠ9mLéyËF¬Û׊¶zf¡”p—kmH’®R “jsÚähFbGrÜc ûPpò§ ]×o9„^f„ìzdóšõ úú¥g”B×iCør '§âz ïhŠùZ|‘¡7ÉÕ)d\Ut²€ ­uépý*¯¹H¨‹oDwtû§¦F¨·¨Û v'´b®Â©± mâS€@Ž­€íÔŠ'ÿ§o¶Ðx„ˆ–x‚¹FâCn†·gn4…y·e%@–´öjY˜xåæF˜y‹¸Ên„yf½Ç•æ­’P5¿j\ xFÆõ ®(i± ‰ ²Ð Ù~gfEF«SH«9x•3fÎ xy™*‡y¤×¦•÷gYG¥Úð ±®k§l` ‰t Y-‘w×ÿàFð yIg nzÝz––¨ªLÚ@NÓ•ØJmXØnà«ùFiw g‡×cŽÀ¥ŸëqD¦* \r 6‘± h ­@€€ 0tƶkËv„|‰(7yÁvˆ*s{—¨A‡t”Æ­&2"ÊVuÓJgÂÿ+vPC¨ê:m\z‡é„îXº˜êyÞ¦ ó4¡Ú¯òûŽ\qØ”ÃpðH°.v…[Ƙó÷’U˜ã{ïÛyz#ÉÕ¾Ò1Ìå‡î¤Ã;¼­Ð Å&“¢§‹G;e·úª§[@¨w±Ú¯©„9X…cx²‘ 5W†v» „°¸„P©Ü·ez3oVó«¤K‡ÎÛ™‘€4qÈ™…ên’Ž8W«Û#¹¤ ©W‹HL!ägTÃp©‹dÚ·0|îÛy,· äH8É%D’«\œ*­@¼€|€‰wÍ ‹+®MŒ…ÛÄ™è”Zêq—cZóz¥V 0L”Ûÿ0¼PÓ 5‡…{qòxFn°ëfï’zdªk0`x„L3‡èxrõq5ÇÉx“vésÜæ‚”üid‡~¬¢®l\° ˜\®« ­ qœÇqLù¹–˜]‰‹t»¬m¬¥GnѶ±€ùjy«gËj5Û»j¶®HÌ=‰à~bG€¸üEé*Ä>’­²µ3ɼläeƒÚPã3×̨‰»$PjˆiGk—a¦*%à±Ä¶s×P¾]\qPI»2ÜN¬"‡¿q¶}ü7ÐQøcë­“®ºhÁ• iýËÒßv”Û·Âj–wÖöcMéÃu9‹\,•ß‹¥yyš¸ŠŠvvAýÀ²¬¶åögµÈª;çuž­[Ö™ZÌ•ìÆÏkû…kÙ_VÀâJŒb‡!ò­R¨ Qµ¼o· qÐ"MË®‚ßGv¾7xȦŒ‡fðØuŽÀ­r%«(  «*Ò¸|Qi<Æc lɉs.JÜÅU¹Ú®×€Èf¬˜ÿ£\ÝcÛyX²¼ø·ÂÖË[p` ]§¦©Â…‡…——Û&ÌŸ8ËM³“ç&r!Ö°ue´Ð»‡ÀøÖ«©’L Ž ujwh"Èu»u§ šË4é4> üÃW#¾[VÞ MˆWã{^¶zÑç"i  â×*ô»Ð¶€U¸ˆÝm ¹â(~µ¢+‹FîÔÿŠ!ß-">.¶¯r ä¤{×Ý(.”çíí+ìÔwB÷äL֙ߣŠTpþ:p>ÍÇGÆtÜ{mghlP+äDihÛdµ¬òÀ¬BrP‚áCÀ8Šg¨m5’P{ø–é˜)Øâý]i¼²*m€YwÄ÷ÿ†¶àF)uâ[{»Pè"¨‹è¨{6èʸ+{ˆ&ªœj5g£¿,ŽG"e(ÐJ ãå}ÕÇ&gëÁ8‡ƒ´ds™‹„ÙxÏVdLig°ÚÌ0,¸dl¸±‡ 8{3{ŠÈÀ ÛeS§N¶ƒ\^Þ"ÈÄ蘕«·{O“|'žtÃŽŽÇWÉW‰g¼ØßeÔ/qøßþNÖðÚºâÅþƒ'Î*"HäèØ|^öÒ=޾"ã] f»R“äôß¶ YëHÍ{}˜#mØ*çu7©i1‡‘‰7°¼æÛ«²m-v±†N‚6Êó¼ ðŠŽ‘½¼Ú€ÅàyÚW¶Lƒžãte9}~Æ]wYÿ¬5ºÙêjGNŠˆŒ·–Óæø4¿lâÛ³Û<[o¬ûšhtä¬âøÒèãNåÛØÄGê.2lΧ‡·Ûgäò÷|¬o8gÖšØÌ8†•—niÖý¿t‹rˆŒÞê½^†GÕ~k€¬f=¬ËãBÜr¿¥×ì—Ö¤éÎ }ÙÝc“ÏÛv5·‰­IØ­©M›£–“5×±R˜“gÙdEgŠóÇwŠŒ„ y“BèNIýkIÍ–#½jl÷”|ÏêÍ«t|çÝɵh5믰ÿoÙKö 7yšæn _ÇÆVp`¸‚÷Üh®oʪ"Œk¬{ ó§>&;±æcú?dZ3Ãnf am—­m¶t]Óeí -… micx0áC†Z»QÛ­‰1j4øñ!G 3¤£­ˆ%QêBYñZK‰4­Ùºu³¡Ä’AB¼ØåÍ„ 2ÜhÔÖ®›LUž<:óæE¦·Ýô¸ÔD[A3B ³ Є sv(u—$mIþi“ÔF®\7síÖµ{—n¼xóþå«7ðàÀ}ÿúõ;×ðÞ¼‰'v̘ðäÁŽ®kYreÅ€{Þ¼92dГËe™Zuêmhþm#aKÒÿlK²$%Á·$Y–xKò­; ’ݶå4’ãH‘Eš§`ŽÜQœéÓ3/‚"{uêÔ—CoŽ"I‰¸’ÜD:ïI‰$$Ú7½ùõë“hOr\uèãï;/¯ óâz¯û’8O?é´{.»"ºS®:ítPAl0¾ôèc/…ûîsd¶Ùd»M¸Ý|ëMDO´m¶Þ„{k¸h“$’«´iâ­"þá±Ç „ÐG‘#2¹Hz I%—d²I'Ÿ„2J)§¤²J+¯Ä2K%ãòùÒ‹DŽ.yüR>IÆüG@5¿Qè$x‹D–$´‘Ñ­mP“;îд¹6Ô2PA%´PCÿµt¤K0ÓkÍEÑûsÌ%هζ’h"7¯Éq"Ʋ:4‹$òL¡ÉTX5ÉT[u5V%_euÉU[½UUYk…UÖ^iµu×\ƒ­ÕW]‹µ×bqÝÕX'¹²ÌÑ”6S»T3.6éL+[æÔ¦­·RÈ3Th»ìSŽHÿ™•2·•V¡—{奷{Y‘w^}ïõ·Föw`€óÝßz^˜_… î—^ˆN8àŠfø_‡ó¸à‹VXã+f¤d"@X5Q!u£Ñ1Y^WÈI÷ÑåªLqk# ·±óÓ.ÍU¹KR»VIH xSɹTI¥•TÿIÃiFPi%ªÛ@…T™ºêD¼›êFÆÆ:‘VÒÈ™ì¨Ù©³nûé¨iºë©™Öºkµùvš•½sæZð²«~ë°AÄk©ÍF;ëµÏv{í6â~œí4Wo´Yéœ DN^õÜ«sÌj¯2Û?·â¹R›¸ÑN<»Ô³;>‡^WI$@#D´fœ§[Aäìâ[ùZyVä–[kD~^é©G^ùÆ¡f$k§OtíA7\ú糿^î¯ÓGŸñó!>ì×/^nñϦž|­åOÞpüÁ_ܺ7½’ÑklDD‘4”!IAëË\¦(iÅÌGúSÍpd©ÿm¤ÁRnÑFVÃ’q+#,a Sã;&to^Uó+Ê&—Æ}MjmpŸ µ†Ã®uiT»WÔq¹çñkjm³× ÛÐ8~©†÷r"›Ø ¹ŒÍˆó"âÀ„Xµ«Éð†<4œå ¦6*Âltû— Í60¬Í p€Ú¼¢Æ6˜­jmHRPhB„|<Ê·QBktP5mØ™í¦Ó27ÄÁ Žâ ¤ZII(‰ hhC*ޏ¹«YÏyq´\àÈXµJîŽ]‹ÞÙÚ`/¹)¯próââ¨5Y*îr¯¼!ÞW6]žx0Lݶ7·Ëut“ۜܦ¦Ê§•ˆvŒ77°‰ÿŽ x3[’ÐHGD’Üô昗Ìi2‘$†xml¥gú‘{ä:IPgTêRüŒG¹±ùKk%ƒš qxµîÉðŸÓÜç÷\˜/űyËkÅýÖ=TDBbkDÀJÖ ¨q ~°XCåUQzMO†2<$d¾!~o^þ, ¿< Kãt¤Œ“ØK§·?O>/I)pÄ—Lç#êÈç8T˜jdA61‘–z*ÏÆE¤ ¡iRjÚ]%“t·œu1­ˆa!ÓTÄ¡qèZ+¾Ú4VŒUˆfµWE_(°±fô¬óÚW#ÑÕ±Ê1mˆDZc1×¶Bâ­Íë\Q×#F‚ÿj-#]WjV´Ú+ôÂ!,{×5b°Õ¬Ú†’EíntœåH–Gz:êKÈ9’8”s†kO¥"Ýù"\5¶Øº*놄Ï$y¨¸,ë¥R°íU_óìY±Ïe¢u`j¥ aѹ»6²-e…JEkVêuÏ¢TƒF—©@†µë@§+/¦¡®Y;/Fñ…·én×_qÈ߼º°²1 vGI›Qïŵ“¢ˬJO¦RmÐÆ5ÚUEZ‚¤ðîä ¤¨y­d½dÛj¸µ®¥ŒUÛÜópXC¡rÆÏ3›‰ë–b÷}mÇb31ÛZÌ66Ö7È=&ÿÜ‘Ç?"NO–.ÞÞ‘œ†.Ò2®]}šçäÅ6@¢{‰xcG§wà©åqQC`µÐDaáVê Q½m†q¤#s­9¸÷l„’$wµ!ÊïiÿÃñ*ÿLe¯U‘ÏØü3¿ÆÅ®9yÿôs™lâ!t‡”F¹¿J'ºpªìâ) *hV\N”8,bK{(äUM_¨¨¯÷ QÇ9¾1j.m+´ù¨KkÂW›dÔÛ"á5(¸³¤B<&ý( l]LÞ*¯Ö´^nzÃ[bµù'åéÁ: Éd2ÿ`ü¼nÖÛöA¿í¾ oÚü+5«¥Ì?G/ÑM+o1§½Äµ»dÉ£2ŸÿÛÖ¸b:yˆSã²—ÁG6xÏÀôÒ5T&×òZ¶­õQ¥r;Èa'’·ƒ4¡ B§Š|gJbt÷ ãß7h ’P"" 3G„ÒŠ„4 ‚ h0D’†„4$¢ J#n|ns£ÿÎlhø¹Š@Z6" …hBŠ^tiÎ< }NC˜À¢[j7O6aŒ›¢ãðrY¿#ÞÚ¹°Íl˜úú-s–uÏáSU¬ïܵŽÃ¨µ‚´4e’U’ËÂ)$¹%ÏÇþ1#¸½míÞRqf¦0kö|9O•¤?í²-zh®4ž'!æIw=ë®´à%¢å‰èù»n^ÿ„œâÛhHŒá•tŠnëiÐz¡46МçTK„íǾõ!Þ¼ ·<{Ê·[Ò½ibËT}ûÜ„64Ás[C¾‡ˆ©¾S-üxÛj— Ç$!ÕGmPWè×ÜMýw>0oÉ-9»0Ûc£ ò×BÀéÈÑ*)êù62` 2H ü¶kú¶Ë ÍÁ=Üc 4Ð@¼±9£²­kƒÃ!4иA6À$Ü¢Z·­Ã›„±³["Ñ <»‹;ÂQ»º»¥ ä¾­iš!¬»>û‹J£ž²1-ãI’ßê‘¢:¥²³¢’‹R@ÙmpƒpѰ/ ;!¤ •SýhÀÿ´òEK±BX¾á):%Ì—;¢C;T%µ»C³ABWóÖZA.ÛCì<=ôC.£Aõ;BlÂ>=¼¥?ìûAG<¯Ú+\“œLL…úÃÁ¿;–9*ô@øøØa¼F$kÈq¡ ‹{ÅHؓр"êœ,BÜ[: ¼¾¾›ÄHì;$äCCÜCHôœªáÁ¾k¿"4Fì£:F\F% FG„FaüAE”»¿º¥½’&42­(ü™Ü™ •1*"©8RÔ !ÊŒ8Øcƒ¤ò5yä&{¢EÃ) ¾™.-ˆ+™6š­™š~!Y¦ŒÒšˆÉ—Ë*Hzù*…l„ü ÈÂÿ ˜óʨ‡d(‹ŒÈ‰ ޤ—Xˆ„‡T+‘ÌȑɑŒ„X`I”\ɯŠÈ•<(ãA¸éáD!Éåè5QDŽ´‘vÚw´GJ;1@s„E¤¤8ZœDê¢H̨Xè¡dh†¹‘£h¸Ê¹!ÉT`ÉŒŠ­dÉÁb0¯üªÁŠ…fˆ´+°º¬±ô,µŒ†’DK¶üJ­\K·ô,‘«½l…h˜K¸üJ–¤K¼ÉÁZÉ–ËZˆÀdÉJ˳Œ…J0-8ò¡Ñbqs)Ga)ôÌx:EùBtJqÑÎë’j±¿h‘0Z´«Ê¨ÄÂŒ(¯q†­ÄJµìy‰ÿ!jË~áͶ¬~±KÞ´KßTδKâôK»˺$NâdÎä$̱Œ…ZËì¼NîdLÆŒ…jˆðÏÅ,µIY€=ßômâóÍ_y`Y*žb+öX(.e+¦_8އØÝØá «40š0" ‚zàÚá-c\N`{Þ7¦c¦à®ÝŽÝ9žc<>f*{é(.¸-hVC!XÑ ¶U…õ”o`Rm¨ [øæÚøÏ gÇ“¼“3Ð%r›Wc´”Ë”%ÙU–‡D8Åhå› e¢meLÆå¥=ãÏÛ öØá•ÙáÑ$`[…68šUÉ™4¸ãÿa6æ7†caVà.æc&f<æè;ÆcÐÉ!-óê¦DÐrgYà8’£“ÞPhÉëq¶˜îJÉávÊ0)$cKÍV—EêÉ—A?馼1Âe£³l†9OL¶·øYÀbFeù%å}NßÎߘÛÞ6f\a&Z3†QX^ÇKƒ£q6ªù匦è îe¹Þebnc;Ž]¶c½ÆëŽÖ‡ÂCƒ:"Ë!rÏ1jGjlAêÀ¿AN“¸8ŽoІƒ°‘mи°-£Ä^îplÔi@⮩i¦y¡Öhhb¢UX2‘’åOnâ$nå¯.k±h ¾è°àz…ÿX@è%ÉÛ6p9H’ß»‡_Þh‰®è ¶hcîh öë¾îhØ›òÊ­ÑL)de6e›ŽF̶0ÿÜ­xôáYŒEFi@r3µb›¹ÁËvˆßù=Ê‚M_z_}ŽßbÖgžß–ÚÜeŠf«%$phò¤]KHŸ=©=ã]k^þj»vî¾¾pdæå|Ð` Ïp}ÐkûF.kfxášÄn^ñ5 ïø†}ðsÅÍl^z4ªôβ´Už4x)ø.åöUØ3!‚Vpâ®eØþo¯¦mPhà­í-.æ3nã¤nÈÚÙ†K9èm8š v`ÿ«%c2Ïhfc¾Æk{èÿðçè]ZÏÓšëî‘ìÜEù5¡™BÚ«¹@dq!oœ¬3¢^” êÞŒ¨&L0°zgÓNr"°…F¨túÕ_–Õ_U.eNàMÿt$þêüÕå7hÓF–K°„KHð[Ø…6(€,€³‰7¶õ¶Z8Ws;ð çed.a¿vnHžŽ²ãa[štIG0±3¬Ú™)Ý.ÀýÜì ÁqÚ¢E©Y¬ô"-!º¬ -Ñ}&Ù4 jUl…¥Ít’5s$f_©¥%çêO¿èQÖâÉ&Ù…[ØŽÛ†kƒhðš}º¯ýÿmèÝÿæ–9:¹Oy2¼ªøL“ Z3ôbÈQÛ$Ê)Æ‘h¸Jg€ÓýËë×ÊVfHËf`­”…¦†…uVíÖXèÑV ~XLWÌH½Tiˆ…žýÙòó÷kÐ|U—&Aƒ…|ˆ|ùì´§ÏžÀƒ êk¨Ð!ć²BŪQ*Fp5jÕ $n"tÓèÊ”(ÛHjC2R7*Uº,I2ÎL×ti“µM›­m²´ýLòO[9”*u43åK›2Ÿþ{ @"V‰qEÕˆ"F­’Ø*kö,Ú´jײmëö,€nÚ|Û¶m×­]›vÙ²d $ IbÿŲf°âƒú,(p bÅNvè"A}—nFÅÈk«FŒ al²DT’TÿµlͲÍj×®gþÜfÍQmÚ$i³¶ É¿m(Å!N\Îj©/W¿¾Ê†£T,¢jÓHM«H(jÓe§­îßõ¡ô—Ò¼Jô穪_ýT=|”šìÚewÛ¦¼·öæMÒ¦ H AD, -´BöÜ“àD™5äàƒm6‘?©„†ˆ´’H+ &lT½&s Jò”5DñæÛnµ…Tq1:âS©•KWaÈ¡t`5’F8ýC+ÙJ‘Iº^-G¡äyæyó?ºÙ%•Yféÿ–]R‰–Zš7ß.—Ü—ß&h^²KM$H´’`c1ˆàdB(ŸœE´a+bh"€ˆã¡TÙØˆ)Õ¶JÛ°¦›6F gœŒÉÙ¨ˆ-]ÅHX\UÄJ‰´ÑJˆˆÔϪ¬ººª¢@% *Õ‰-°…&¯[–·ž˜bàF}öÕw‰.ûÙ¢WmÈ D4b`fuJvmƒ•5¶YešA´‡‰@ÇQG 6"K%¢{"UʹÁ®JßõÔl³Aùf)®1µÚ¦S=ÕÚUÒ5És®dUQ,B¢ñj< ;\SþhçÏIUm©ÆÿÄaK»›Þ¯½‹Ä-v¡¹ÿÊùé•×U ɉcõä¡¶5×ìçD9‹#l¬Qt¦„Œqø;“‰4δ©Òÿ|£Í5@ÙETx»h“ÆQ)DµTÅO¹ËéSÍÔaψ• XE¦Ú*í âÛ¿êúlèòÚz`úª÷¯¾fIBÉø)»—%eê²æš-‡Ëœ%ö`d|Ú¡ÎNè­CŒðl!ÐgƒTDÑ]Ï´nºín:Ó>ºmÃÔ»õö[pDÔ%im¶Hb;î'Ö6õê¹ã~ßU¡…ÖHX>_Kˆ ¯Úêò¬žäÏ6M"¡Í?ÓÓýODErb£~Ÿßz£GŸÉËîr ^{!~x*€€DP&Yÿ>ˆqkcÝÎÏ™—û¯"Dc* iÃ}îã»Ûénw?a ïx—@Jâ,²—.¶¢XªVakÉKš¥®×¨F> ±Á³AµBHªzXÃØ&$À+%áé›?R¾`åMK8ÄaδôåY(Ó‹ÜP‚«€û ™ã§ôƒ!ОtÖ¡j+dËH3º¶¤i)yÍHðF•8,Å:ÿðÎêrc [¤¨RG1ÊcB’–ðK*¥ûGð8ä‘° Á#‰@J”ǰWu­JÔY{~¸7îJ¶Ðù·‰kÜq»(Üš”à„%†Þ²BdFüAFB˜ÿ¹â·bé@i+ÒÁHD‡’IQhÛL¸&Ø\ðuºJP°¶ "tšRNJ®²DøÈ:Ò± ÙÖÚh5˜rÄÓ~BÇmxÇ^vÔF ¨’´g¦æ¦XáH¨¸’ ­ †ÛìÞIŽz”ÞØ£7êQ§7tAÕJTáW÷¼ÅU/™Oèå(’˜Üîr—_¤// ,Ó%6a;(1 ¤Lr±ˆ-ŒZgÅœsAE®Œ°B`a|ÊH÷e:hž´8Ä„Úí˜Ân¦#"l/M°pHÙ±ˆX¶H>J8iFC c ýÚ#JNå‰&Þ¨‹u¢äž’€í-.y”ð…ŸµUu‘A“ÝBGüí%ö0)8!ŠË5 ÿCWÉÍu•ýÕâåôÑ!ÑlÄB?š.5vØâ 7*«i]Rd xÔô€í½‚ÃL•Lv»•Uo_ÔÆ}†ˆübÑ V4£ÐhÅ”›ñdó¤Á¢Õõòh¤DSÒÅ”¨—Z*ý$8Ô£'›©G'Ù1JÄêŽùs²ÃÝ!¡NÃ[ARj dr”ƒÜÍm™ŒúI:"͆rÚ†ëÎdÆÄ¡¬MV#X9¤Îj¶H@½ÁÇ&‚¶K Q$% Së.Õ÷aàU<ÃQ®ˆ ,O>¦-pë]ËÖ†’ZM˜¾÷öð­obú‰z"|cáÅ›(èšú<9LÁÃ-«Ea$£-ÿXVÔYtîD¸8®ÒäT0²°Ä¹ÏÀûìCè~÷¹÷qW³Ú'ón©yž¨u°%ÄiÃ¥ED’š¸„9$ ž…Øk* ¥"E`¨Q*ëL\âqeÅ1Îë@ãih–Æ-Îq‘7‚ §x³6Þ6$ -O‚èÕ¬{ÖE}vé-šør‡Iì|¶6Š0˜o!ffw½kŠ¡«bJ  ËÒ˜FƒÏeàÀ¤‰ÕÝÀƧä†ÁQ ¯¥DRXEÙ”ì‘dÚ0îÅC2.ш¡<ì!UÉ#î®RHà ²<»ÇPf™ILµT-½Ë¬i(A R oì¢.Ž¿Ïš4qóO6ÿesØùå•ô$A‘¢s-·hp¾Ñ€jEñ¢ó‘¸Œ½¦­_ZÙվ؆j½y,j¸ëµÓujÒ ÙŠ_§#]6d‡œä¬ÆÛã!w{¸Ê³®Š"bê±ü»S«Z:‹D,"!tzeݺý~¡]¦ôY—˜Ã$æ)´ lE,"w­m½ôyކÂèfÓ1^‰‰`Úr¤GÔpcYl‘ÌØÑ¨D¿ÖU´XˆGeñ19¹]5¸JÝ5ó8ŒÜÍ]ý ÆòÉ« ^|›fXG¤A° OØÇºÍŽ]HرTálBù]ÂÎÙ°_Ë$A+È\Aˆ·uÿ‹è‘¸aˆÏOFÀ€D¾ K݈٥—ìÙ)–mlC¿¡ËÕQn×UäÔWd…¸"D””EC,Dƒ4´ŠÜm“=x òÕ! ’àÜ­Ê8:DÇ$ÁÇmÏ„mÃ7Èà÷ýÂ]hÃø­ÉÙ%HÛÈÁ€H¡h<ýí‰þ]Š]†t Gð¤ÀŒ• ¡bk<Åx—í鯋$ÿ…T3%ŠëL+xÔ‹ ãHY3Hƒ5HCóE_=ÜCDÝáa2Æ=ЃôEQ¡šüíWǸIá0âÍ݇"zß]à ^ØÂ&dò Ï¥@ ´` ÿèOÒi†AW;Bÿ }QyÈР‹SHÖº4`JYJ¤Ê‹½lCˆä£y­"ŽMGxÆNRDECÊ‚5ÄPßÕCÜÉÃÆ]ÑedÊL=Ħàý8Äí¹D#4KH˜]Ð`Ñ X‘'õÙl‚´]‚9Z ĉ]QHƒÔßf¥£I‡¸<Ðø‡¾¨bÁõM¡ÄÓø†‚1Õ¨½HíÔE$ ›»É‚»É[]xån0X * #\„få"’“4¼åFßêáÜÕa2Îå3âa¡ÉŸüÑQ°Q³°”Õ â6â÷1[}`X8ÒäÌÁ´€üôF5åsÁãE­ÿXGH× YJÊnœ›$¦,|å}ǪÙÎX®›m1P$tPÈlñ[pÌ v ÓM4?¢DY\…ÀÄ ¤Í’µ‚DF=X$«$#H΃ ®JfÄÃr‚d ¥ _ÆR5`ÅÁíŽKÞÇ7Œ§!z_ú$ åß$ø LÁLâ PDÜO'Ú_ΈÞ5m#ÌŠ?ÆÀ(£ô&ÝÀD•PØØXŠä[שUžIpM÷¨DqD©|±WP*ôb#Üí¡ôñÝ3^äòàÉž¥CX¶u îÌŽ}æ]Œ§Œ–çÍŒšð܆YÁLA%¶ÌÄݧ¡%aFÅÿ£G¤˜ÍŠuH„¡qD‚8LôQkL>¶DìCÍQ@åOØ‘pPEUi¢qè^¦AZr„-uÄq&§Û… ãœ G’ æe Ý;ꌕœ[öÅ"*#¢„-4¬Ú=Ù‡.ìB²l8VØ-”_ù¥ŸÈÁ@ \"ü¼á UC'Æ£Òù¤CðŒÏÏs>…Œ8KÀ™×¡â?°l5¨mnPÅ,þŸŒ BF`NU„ÇqQ[º]4TCFâ]ª³EªD"Ï9Hâ€â ¡§†ä¨þê ϪІ¬êLìê3лÈêNÌÑO|]íáKw–¦eW×”á5¡žüH/&gÛÜ!Ç"ÆóÍé‰R”õá JP†„â÷e#V&^”@øÅ-ˆ…m‚»*€¦@  A±ëUpjá’@©¤ZCýi¦eôˆ’It@B¾ÿÓº^©³¤Ô¨Ž+Z nVš¯NhJ`mHÏ’r-œ ºs²J‰ •6ß B« nÇ~a›É²¤nÍNxZ ¸UX‚tß™ð…BµF$žà6 ®â\€Ì F+@®äŽê|n‡”Š_ Òª„Ò2åy¡ï?´"Ô4VR¥% êªY‚WÊ[p´›üÎoýÒÎ>l$Lg+°©XD‚ñEC\Ö¥>\ä܉­tÚéßi[,íC•E$ÀDYdPãm+"¢$¸A[¹•¸Aá æ6XÂ%Ü‚wÍÀ ¼¤@@`@hêC@Ô-´AaXÃeÂ+ŠÙÿŸ›NÓðb©ÉïiÖï7ìÃ7äïjÚ…UZ¥ÿÊo÷ÝïÓ|êp‡Õ( H£€ñÖ­Q#DÁD™ö*•M³dÅgx(RdˆÞiÞ1D«(Dô„\D;î—$ÀAJ"žwYÍ/Œç6ÚEa"âo ¤ÁjJiÂĤ›4%—šRHÂ05·nõÂçùpü…Þ]u + 0u@]H€ÐMþ/eJèCK]Ò¯9VØIÅ…~лs³„ÐÀð # 5r"'\æÝæÃuÒÉ F4êƒßEŽå¤òDÂó–€$‡/dyrã}o 4TØNøiÿ¥$»É$7<7‚¿ÅÌY²›Ìp(“Ì5B%Ä‚¨*ÝeP 55}&ë½ 1+¬#D©R s•~ðÕYPå ÷寋äVÇü2ìÅŽˆtКgtè’e`0ºÊ[F,H™GDüIã0ÃÊt,@a¸¡Û½%÷Æ~Ù~Y°$¸I ÄDXB®òŒ¢¬]Ès„€âÎ…$“,T‚,ÄA$0JÉA»¢Æ€f/ ô‚DA ô0ì÷ÎëåŒ"¨¤²W”ÛÐHêîq0Ê™ú’6 @BmíD ìüÆa)EIeZ§¸Á§ Á ”4DN¬ìÖƒÛÕ|2¸ÿ•CM¯ô&.hvgÛm4¨$£0‚wž,`+RÇá!^ XãÍñ„n¯“â$ŸbkiÚBf£¸lK&o1ª-84(¡›tD¤˜a¤ùØ¢é64I1%b§„1bxø—fƒ-º¶>žHðŒ†4dÐx„K¤Ã _4” ábª[mvgo6~Sæ=[rwºÄVb«YÈA:×…ÇP´Î@>hW;þBqh†fW#*YW”ŠGðLkYÅ7§Ÿ{ . ÿ¸ˆ:)…”SOõü‡â¸KŽ•Ü^H“SJN8%šÏÙu‡ ºù›÷…$øG Ý£ç}/gp‰£9äü9hÒŽjB±vX<í@ñªe;íTq$< KuÇJQ é \ǨºÔ2ØÄX|$lÅ!A¶G¬ÞЀN_ä¼”ë¼ÎÇ‚,ä|YHƒYÌÑÏçJ-[KÖÅ1éB¼U÷¢ÖÇ®ùE‘·Œ$@)v§Ù‡˜¸®3bwäš&H˜_Èòm7‹¼nE0ÎT¡ K‚¦¼¡£<ËË*w/–nøD2EUÖÔK´¡„…*´e °£ ñuH“S †#çzø}=OdÐíIÿ˜O³õ~ù4Ëÿî[[±k£¦¸Ðªâ€ÀkýyÄvŒv#£2ª„å¼.Œ}YLË@r3š>H`GH¬¬}\æ:`0ÏÙý=á_aÈçÆÈ‹FߦétôŽk `Y|e„H¯Ø×V]M©yÃ6€¿ø—' ‚½o<ÊíµÎYt³4Kip v¹qÌmCɼþ²TBYd‚-Øs¼@$øOÛ7ƒÿüýÓ÷íß¶oÛtiÛµm—6]#îÒeI“¥‹–8Z’‰D H’ž5mú`Âô§Ï_¢FXµbÄÈf£D(Ýü:ÔM¤6‘Šºô_Ñ£G•2šÿ)A[ÛdÙÒjK’6kÛ4$"õRITƒ’•ÔfmÛ6CQhe“ "F©æ¶J«Q´hÕ"%j7M[d—îSüOqcÇmµqÄ$IIqfMܶùá·FrˆÄEiIV¤Íº´Æª«V-mB%‰ õuB¡…zÓ¥#D­·Ù±dG«&áz4ùq'¶è8nÍŒé:ÞD¬x6j“¨U+”‘¤še;±Y7nËSݦm½$[²H_eŸ„` ²ã‘æG<Þ­$¸(õb6¸kD/c‰¥šhnJ#®&’8 1¡[¬Â}Ûçš8i¢$²åÍ4Û¦¨dƒO’‡v±E“+©ÿ%“×þL´¶aJˆ„Z/¢1²Å£‹ŒÓDHŽìй¤d[Αéh¢./T°Kã&¼€’Š?þö[+¿¨´DÏ¥mºbO›®\jB,µ¶\+½/«*®DiÄ®F¬«³•HZñ+›LC 1,4C +Œ¥ “HÃ÷v¹e³Ívù&I’€€¸$y”R!# 5[h´E¥¸ÚˆÃöñCmØcL7Þ€¼ÈÞ@i£ã””d$NB©ÂhšŽ:Tt²Ë&›Piä;©ú#Íhëo½m¬±„=—$¹–¾mP¸/ZÿÈBK?9Qª‹WR1N4‰¥•Xš‰¦»TâªlPÄlcÿJ±˜»‡&’PH#‰"f½eÍÚÆ#7RH¡”äĎ͸’…CI.ê‰dkB£I‡¢"‰,ÚM"]Œ#ÎH­Î=fn# S"™¨‹ FPqd»î~F%K¦Úd«Ë6—vÓšeµ½mÕÔ¦I°ÎÚ?†räZë¬ÁËQì†²Ž‹xÛÅ«xÑà+šzó t_¦úµ-!ÇfÚçž}`Š• ®h—Mn¥c[â(gDZq›[H"†þù&"ÙÚÈh³’!â­"ŒR®8e¦Y8á¢h”@ЙçžõaågÁð4J”øÚ? säýRÝ ^ìß¿¾!3»ºÿj©Ã×˧À»Ï¨éÁDÚ¨9[i’ÚÍ>>ém¦•íŒP* ‡ZL¨½cÒG‘¦‘ˆrTÒ,ùM#òÇ:S”N¹ÖT¶°†P`¥6‹SްÅn¼q›”)e‚CÍ®:¢á̬t¬Xt—›X£}úhƒO Ÿ\ %IÀÏQ–6=Š z3ʶ΄Ãn]% b‘Ãg!¡!ˆBäÐ[Èb–¸ˆ p0PÚºÃ'¿ÜÄFpáÜÔw(¡°Š}îûL¤a 7(nQ–±Öà#$‹h#ï±Åÿ8%‹åÂ.ŠåvQE”¤1"”»Èçþ8A‹äOf±…éÿ8x:™ÉAu«CI#ÒP ( ¦ ¬€$‡æ+òÇ H” ‡8$D9x’)_:‹›˜b2I-‡°¢6JŸ£ü1?ŒÃg>=©8e‰7ÙI#xâ=ð½m.ÎB „æ–!ÆPˆUþè"Lži {DB .L‚˜s©J€ä0’,à(,¶Ô¢ëÑÆ>´¸Hà,DH5”G¡ld½Ù FŒÔt$IŠìg%ä`‡& Á‘HCd!š, ;uª 6Ù–8IÅI·ä.™B¨`ôx×8ÓfØÓ•õ| Nú!-ÉDP1‰ç‰ ^Ô6 »tg^±øK,°tLó‘e1 Øfÿ¡ÂDÛi„ ”*íh‡ªI£G™/Ô ¥ŽºÑ9Ç9ˆ\de?¢ÕËy:ãøª™¨ƒ¬ ‡(T1b‘xÚðÔ TüŒ|mCR³Ò“’r)¦”ÖR\r¦÷ôOý ¢%‡¼VÔIK["w 4 ¼ 385¦A ³”„°ª1BØ33T˜TÃJ.lBaN‡éÅ"±xÔVš ›c ‰ªÚˆª$Ô0Êq¦V+$Ë yœDÇb•(«¤°Ö(ÄEb’x]^ðÂìØÄF.”„,‰xR\*–†ýaʵ»•2mã•×Ün#Æ‚²Zl!žîr6ž°b/}YPö~¢S,ÿ2¦™‚É¿øæE •oÖHtRU”H4"T’hó¡Ðˆ&BµøGOˆ” $XÏ.(ô×ä4;ÒÈ·zÁCÊì8•ŽŒk‰*Ø!¹Rˆ ‰—D)O>šŒi].‘E»Úm/µ˜ò´k˜Æ+94lC»%î~r½é¥áœÚ4Vhç:@f5¨(·,~Ñ}{3óg÷‘} UoŽŸ5d! Õ¸kut‰ï¼ Ù ¡‘¸§lÒб-Úr4"ÈŽ¢2ŒòHýÔDbL³ûÉ¡ U8«t¬$ldÇÜi¶7,éÍ®mÉîy§Œ´q}yfZ%{Âbµ¥ÿx×Åšñ¾±KéŽ\ÿ@•MX¡¬6P‰5ýKƒÊg õq6ÀenÌ÷Öl1ŒÒxm‚\5<{Ï{fÍçBF[²XÄ·AôV-ø@¬X‘yˆ´¯d\+XA $Á„ C*˜äŒ8¡O°#¬’5„xÄ3ž®÷Që¬ox`#ÈWLó4k$Oj áCèýÁæÉ ÷¤—ìÉ‹˜ÙËW°ˆ¨†vÍöXs›câò˜·ÄÚªÌaRs˜4¹S‘A B°© ” -ÄQ6ǪˆœÌ …$è€Ü™õÓbrHkêzg½)hΈ UùÃ.hðžO‴,?Nÿ鵪kÈÑ¡´};ÊᵘL^‚¡»ãY;S¶D–ú%Târ#äU»yõI|92‡r7Ç”ÐÙ7Ÿ¶ÀrŽs—[~Í3 ·ó§‹L %!0½°*Á†lîÂÙMÓï¹Õι¬,n­…(Ä!­ÉÂ×[€’"l§Ô© ðW‘?‹)ýqJ-UÄ¿/ÅZ^Ù†iHµdlÙ¶!á’J‘q }[†]¶"W’Ûk.róWg,÷ •ÀϪtèßr{àçúp nGJïôO•.GŽ`o‚N H4ÁV@ÂtÆÊä@ (-ª¹¸ÎëÀî„Æ^Ø@äòOÿކíV-¥li9>£iÞ‚=¸ÂLr¨"zhÆB*PmQ0úâ€ãÄãùðÄm¦è&ò¥ d1~ªÙö†þnN¢­ íæþ‹Ìr®óÚG"Æ`Ò@b¸PqF/R  Zà´zH‚TFœîžl%êüÉtÏæ- ª€÷*° ~/‚OS€ba&ò^¡;ì‚ ˜ú’f±ôªÞ¤(Öâ®e•¾â•ìƒÊVê–‘±8.mX!Øê¢;Ħªa|¬êñ"„ÌÞÚîóšp õ/ 1³(ïæÊ"Aq & 'bèGbv±ªi‹^oÐmžêI• ¸ô Ÿ,ëÿªÀ ô`÷¢­âëZ b+%PÜJDŽ Ð v¡.JpîN¢.wéKþÁ*b-Ú EŠûh,ª,Õ–b½Àä½~&„'x‚/¤² Ê ’@þ%oºPÿÖŒ}V1À¨ÀdÂ}ÒRcŒJà`V¢ ¹ðçv±Dr+>fÄB7,⢠þÈõè"iã€Òä)ÒtOcàÆ«:àë—v¢Nq(Æ…¯†âƒˆ[ )Z°°òNyº,©²Ê8ŽvºG/ØàläŦ*Ëñ!b -ïòò§0òòæÙ¼h¨ ¼pô"f;’~ÿF¯Fo/¹ðޏjGÚè"üh,(¸Œc‘D ¢€Æ¤±.÷L –|RäÔ⪅"iÞ.«1ÐâäC VHóɬkj-ÄBL5Á†\t-Ä~çמ¨vdjOþÂ^HPøŠÌÎló`q˜ÍJH¡ ©ÙC¤bö’.=r#$Aèêº 5\enƒV2;…ëÅ$ëÐ '«±®q`ôʤ]º²ý w\³×0G N5ï}rÄÖê3}âËÄ£¢r>º¯¢Á*µ—Vj?–ÃllÌ.ò/²ç²Æ’"õF¨VñåŒÀpn ÿ›Í"Ý̤!+ª¡1êh~|±xñ.yÑó$W‚>¼Až,9<¤ 4ÂUÒHRŒHr‘êÀê¢àw/£ t/.J":< €©J»%R A+j?ÜKQ©d¤¦ |dâ`û¾…Š,ˆÄo9 òA ¯O@Bp.¾òØ )P$IÀ\ÎÌÎróÚl-Ï- ¥Ž¨ ©’%…ŠE›Ó#]Ô.et/?¤ Ti3ôÈ­%]HlÅH„ÃÝêà¬rë¦Ñd ë–Ë9¤Ä=ævójÆ¥Â-”f)“âV«"[°¥W T²T»žãÔ.Q½8$.‚m^ÿnâ=-ü"£Š Ú„“C]8§móZ.ß’[*£RhÍ$Á õ2`”#UF‡n#?äíœ@6ðd,Èe¶Ât*!(P T•£Ué0d#:Ø“;à¥Ø¸#§PÉÖÑ\@Nªçx¾‚L¥æLÓD,Α)ªÒÊ,q‰ZA¦1®BqApJ“¬è Ck8U[9-ï,FeT/Kà=Ú .ŸS¹°.K Rƒ…áC.Ÿ´ôžtSÚÀ+\oS/hÝI¬.¹²®–´ òp'YÕŠt‚ À¯ÙWÇv)Ì„-T3*Gªû¢d™¢ÊvГ%Üs@ÿL6ùÄO¸#.Ê \aCÒeó8k~êˆ #ÕfÕÓä’f—gUb°TqdAšà Qb/…¥Ž,¨Q£bfÒ¤±.˜4šÑó‘¨ãlB0m|¢+qGbË…bån*l—Õ®"¶ÂHs÷üâÖ5ñ* @ÚE]òOçÅBõ"_XöZaV[_1f)¯ÉvÑg›>˜3"r{]ùÒ$°4b¸Â ~ÎIG%Ò@i„Ü$"ôòçt|…1Uµ˜´ âà±6.â€:ئ;ÖN[¨ÈŒR(lwú†"¥â+´Á \ cé1ÊÚ¢b‡n‘Õh³]ÊÎ2óVZÿ#.Š Z — µ}ÜÒÿlkQ¬i£ó\W"{S RQ«2¼Pb$¹0 6%=N¶PÍõB¯Ÿ ÍT­Ñt™¸ÐÓÞ¢G€å+ñäSMq)L3*wk—vÅ”=0Ö%Èx¹oë£rM(áwÔ8+O(ùà%/ÜfA¦z]!pÏÒ!ï¡CqN ýÏ’ŠQêr†©3{½ÐC*ã†Ñ•›“.g8‚ÖWˆ×¨%!B|·„£¬FU÷TU'ñW'y’\šemê„/hJ3ÿÁ?×x)°(Êø»pW?å#i¯E‚«ïðê>öÊM9 ç¡€)òt}B„Ó ˜ðeÿs Eë-aÂ.å´’ê(–㮊 ‘§F‘ªqax‡q¬$ÖWq:é¨ô(f’Gÿ’Hº‰_í`“3—Tu÷ˆ ÀÃ`*(«´]†r3su-x3Ý"—Ä<¬/Œ×cÁ‚ èã ½Ëx‹—ð:YmÚ¶! }Üañ4ÿ¶ñ=Po‘ÔC´Mð'+Tº¿DÔˆQ¢X¢YãÙýghWFã•&Ͻ<¦ó¥J 5©µ¨Yõ9jåFnÀ•Bvÿ‘PBZ`%Z Æ¥V_†@’„B]g‘àF’6Ø.¶(FašX²b%vÔ!GUDÅf6¦pÖO´Q iþüãO"$ÂJ+ª%"# Ñ†oLÒvÝI¿ô‘B%¡Í- aIœEÛ 0Ru¼…&o)ýÔJ#©¸–H2±ÂHN±Hc‹,9ýTDCÉÓN<íÈ㎟ñÈWß|†Úw_ÖØbM]|AX_jEi¥yU„¤u•ðS_+×O+5q¢aƒ¥è‰c¶Øa‰z´ŠY5ØØB *±Ä²_V¤­©¦šl²Ú”Á”[nfåAÃérM'ÿž˜Ä6Ölc‘6ElÄ-LÓ‘)oÙ­l*CÚ”Z‘‘È"48E¢^®%¨;€úI}÷Mõ”¢ÚX£é¤˜bz©‚Ħ‘nÚ)§+E˜kŽÆa*>¦ «­ÖE³ÖÀ™­¸ŠZK$ÙøJZ+‰´Rnxˆ°Q,tN&[vÐ TåµÚ !*UÔ 7û¸!-«ÒJ©u‡$,q²INÕðäÓJD ‘  €Ú§3ÒôÙŽS;1…(~ÖTÔDcý„†ky­ÀÀ›Â¥ðXIÜ@‡ SÀ¤IH‡X|“ÚÄÄ©¨ªduX!‡±ÆCš€7E$QDiùˆ#lÿ°Ì$/±3A‘ðFólHOùÑpÅI›Ø@a{Qû|sû>Ûl3mï¶l³7Àoƒ»ïÓDIè p±Ô‹,Ñ×"K5ÖXÓ¼,I°I#²eQúµkO4÷le½=WE¥ gŸ-I$Ø–#¶Ô¢#I´Ñ†# ؈…È ì_ä@¿&¸€ äßþB$‰ªPyŽpD#Ld‹Ã¥H1¶ÈÄc,a‰J„ðEr¨„ܤ<4Bþhß?†CšHÄb]Ò«Ä®¤·=Y4g‡¼3Þït§ÛmC>üaq„¸ß=$"´DUdñ/ ïú"q7¼á]1xÛðÇCt—ÅÿÛéãþÈÝ7¶±ÃÜ¥wg<ˆ6^ÈF/²qÞ0#»H¼;΋m¼cáÇ}ÒŒ‚Tã ×XÈoÒh<$õ±H2⎇ˆÄ"%Ñ(ÈjòŽfÔÕøF=fòvA¬cwFÝ]qŒV¼c·(¼1†xuÌÏnY GgºÐq~¹Ë‡èìl?f¯¡ kýòl»L›©ßs!ÏTæ3ÏÆf^s™Ð<›`¤ÉLk&œ¿Ì qÌiÎ(Žs0Ú4§8Õi-ÁüK™ëÜe=ŸùÌ^BÓÜ´æ¿lILu2S˜Å‘§1u¦L‚sžÄ‰HC‘„f0" ¹–—´± „Šÿ3"·(Ž4¡ÕÐdbSg݆`" ‘df©8ÖÚH3ú3dFT£Å¡fD²9;i¶”w»»L¡ÕRâð”"C…iq"Qk1$¨)S1JÔ”>¤ÕéM¯%Ò¥^«¨[µ©H ŠÒ¦"ôªPM(VÅ:ašT©×úÝ7X*¼Ý Ok-ÎO×X\é"Åj.ZSâ0$—Í¥/£¹D¢fP™(¥HGk*OdÆsve,qJÚËŸe4— i`MÊÙ‡.v0m©_:O[ÖT˜ eh.UÊ˧2VžAE­$öÇ?þŽ$ñkâ‹x¢ØÙ8òGNèÀ$ áwúøë-φk]ä—ÿ¸´ÅDŒÓœJá-IHC ½›ÛÿM0·ÜŠD˜J"‡ÞÊo½ÄŽ$*á^à8q¾±KÌpOôDÈw¿½»O4ßi Wˆ© »ß⺗½Å-®Ì+BÉ€á­pÚ¢¼Ð(7 –ˆ& ‘¶m´xMÞˆÿцâDâ!(F㈋§xqxˆŠ“â·¶V.ñ[§ã‘€²»#,Dl¡æhC)P^q†\œŒ¾˜ û1e#úâ_F™û(±P©›ËS7 ³ós‰¼™Èoœòš ËŽk”ÈúÈòB‰³9³¶YªñÙf:»S6—n¸ò.ÒÒèj [¶¸ÿ†-R þ‰8ˆ‚fƒ‹M\§_Œs›wÇim¼øÆœNÛð»‡ÈBDñ1¾X{¤ƒåˆÇC¬ûºæØ‚m(“ Š­Éb´Ëó¨¨)âÐÁN𢦅È7R¼e¡¾ÓÑìc·ÁibS­Û3C¯ÕV4Æ9¦ç´f·»åÚ¾8Ùg{¬›Ì.+³¢8®é`S ÕWkcȨ^2 $á]/ oÄÒ?þl閘Ƴ‹1.èxâ“K²öò°úPß ‚æ%¶ðxúe[Vb¼¤vfe-ß@p¥ÅPò†u›-6PU€SWLmÕ€HSÂ$t&z 5nÁÔr½ä†ŽåZçFM+…R]wSÈ%pq-¸ CÖqiA’€þ3q7pmæz,V-úpcÖw)¦iS×u™x„>vÿk’°îÅqP6;íöåPE–@rq[¡Á)”6vvt@º%Ô ràÇØ[êµ`ˆá^`ù% ÓâD1ÀÕQÓ‚A·ÐK½ƒL¶à_û¥_!`u2_ÓH`ñ%_ Ö^Ë(6¸Á?ãeaÖ‹ûƒIh %0Wo:¸}‚¦iB§'†h¡6jÚpwG8v³“…á Æk¸>"‡q‚†ÍñeD¦3×ÀfÉPµÕrF¶ZeXÊÆNÊdTKUG÷Y!iX¸ÄfÑ&SQUˆ UMZF’–…PQU’9;(5hE†L²€½Ø?qañóD•`T•Z|†f=YL³Ó“Ù²(Õh_‰1èX'Uq_ÕÈÿŸ÷ÉŸÒùe÷;ÿi&\O„ŽOtŸ÷d÷¥ŸþÉ ûYçX :\ú¹¡AA†¡jŽ¿•öù:`øåDøy¡: /j ê¡º¡óT %:-Š¡8zŽ=š_IL™õ;Œ÷}ç—·öW©ÇLõEuÿG>Lu9’¥õN䥤÷mÛéLQjœ‡e¥:X4ÅnÕ4ZQB¹¤`ÆY8M¸mTêgª‡Í Ef•M_vM?£MÚ“µG]Ùò|eœ8h?‡†L÷–­O„*—?W§™¥RUzË™V¤u©XåKÉv–ޏ˜w‰| ªÑuAÊVÈÿž*¥O©¨§sQzª"ZŠŠX€¥l™µZ¶YdÚ`¤z¸‘p¸ AEMÛ Y>™X…hT% ÄQb+f VSË:šÀE“éLû³ ­±à ÖÐ ®ðe×P ÛPuðu ŸÚðu2w§LÃÅ«± Hx|aŠªe hØd—%’l™¦¡…¯5t¥UCù¤dª«õNaʤʉL›J[Ä”AÃ1¨¢!j}·Ê!±6Pp‚i#†zo“d&¨Pûö¢ùk#FpaXY# ÙªWÚРǺ µ`Ú fè‚uwo°¬š…XòC½Š%?sm‹…«°zNè9ˆ®uÿ¥Ú©ìTy×ö´‰Ø°=‰z›UR®ª©Hú®ÎåY†Ju©’¹‘G»¬!Fp¼ºb+&iy”·¬Ck©;—AÌQ¤¢æ‚‹QÖ0bb§€ûÓ˪¶€­à Þ:³;Wcåj qPãz6“à·°@–u·òšArV–¸©Vh9VÈæ–xT¨+Y‰|a…ºXê´âäKéŸ=Ù’¥¥žŠºâ¤°Y0Y‰¶ ^¦Ý–ýøK·õbáD¿ªjø·dØRoà +6þ¨±üCW—G'ÓË+Ùº 3{6èú;æ B6¶ ’0 Ú0Úо¼Š|‰±¾Û𶛂J»Î‰ÿ©°µ°l)‰¿çù—‹5¬ˆi©çÙµÞÔ–È7¬Pn;'«zZ§!ź(y )+iÕ'*Ö|ö;rË«t5ÇR²ûc³“‘};i{¼ÇöÂÇkz·Dp¶Ð ભÞz6àj"u  –Põ© >lcå¿Shñ\Ñ´¬~koÕYŠ•¥PŠZ³›Z:S©²šœµIYty˜[Rq:hC'¬º›X¶Io5ù–°šAà¦áiqöÛa ¼ˆÛaXv·‹²AÔtC•A'{´lÖ«ÕĹʫn6;&% _9”Ù)mmŸ@ç¼?ÁS•ˆ¥sŠ:µþ«¯øO‚©»pEÙ¤U¸©ÿ‚c6Xpø›Ì&©R|“¾¶»“Å1È%­kë˜l¶f5´ÒtQ¶ÐÁF¡TEÍ1F¹Sdl”;AtFUÔJWdEá;H$<`ÔytJºSEbÄFÇLé%–`ZYf•R¢iæ’tIb.ÖÌY'væ‰çžwö©§Ÿ|þ)h „jè ‡Šè¢¶Õ¨-Ö@©6’餒VŠé¤†BJ'¥²U*j¨¤‚jꨧ–Šêªª¶šê«¬Âÿêj¬´†z’$ŽæÊi£»êÊ믾Ûë°À+l±È«¬±Ì¢šç¨Ÿbêhžv>J*©£>{-žÙr»mÝ‚ûí¥ j[®·çŠ›.¹’¢Û®ºï²ë§5fN{齙Ћ¯¾ùîëo¿ó+ð¿LðÁ§Z­ézZç¦ Ûû«lãN\®Å™N{±ÆË»ëµƒË±È‡üñÆ%Œ©,¸Vz Yº\C©6×|úòœ27Z³l7Ç<óÎÚôœ3Í6Ã<4ÐBÿ\4ÎJóltÓA?­óÒ>OÍó×X‹íµW?zÍ·ƒ:±-YSº³57“ý3¯·„ºÍ¤Y;éÛnö£G³í6Ü.;ÿJwYwGš7YmSJ7Í}Ï}©Ý„ã=ó¤Kú éäûRž¯åâb~©æ˜_¾yæŸN¹è•‡Þ9è£;,)¨1ój7κ¬þ1šRni£=?,¹Ø½Zž«ï›NþûæÃ |ïÄ,ðÖß<ò“ÓͲØÚø¶Ù}’‡$iÌÌk´t~Ê«÷0S¾­¶~o>Ããgϰâcÿ8øìËW¶¤ñè[ŽÊÒ|¡Øèäµ<¬Á o´Ó×ùf=kàos¤ž¨nw* NPdÜÔã4È+z%! ’h„êØeAôq°„äU$"q5k$¡ ”JÂýÒж¡hÃŽî’ЕN`’ú¡ÿ=ćqˆ>$,p”ú/4Š,$hê|ÁûÝ×¼¥µó]ìYK´F Ñ›é„{w ¾ÊµÆ fÌ4bùÃFX(ÊI‚ÿÒØˆµQŽ~|#ädÁ§&A‡ðqŠ5VóBH(i°F$€†4£…¯’¸kZÌ.9³—ev ŒZ&­¶I¦2j T ÑI€À¸ÑL |ãˆ$h£ž¼·hv©¯¥k—AŒÛ%±F©GÂp.¾A‚#€²JÐ ~_;eÚg Æ¡­“k3Ü£çIT>ª D¨‹$jNDâ*“Ä5¹‰Í¹m³X‘b§\؆kø(T!À"_(ÿœ\ÅžÓܽ¦;8L_dBïd 8ËNsd‘Ã$°R(·èØ. ˜=k%p^Úüâó7œGöˆEhhf™— Rk [£BcÚ1„þJ‡:)|$ ¸¡—ÂL%F2›"nfKú]P´Q—6Á™áŠSoYm,‘|è#_GË7¿ú¹/~ðK_W»¿¯¢‹.” ö˜šj& ð±…N¯²ãÉ f’Úhê7ÁGò.¬t -‹P‹ÂÇ{aEì½UVj«±ucå _(En [ k»Ôôù‹§ÏªáfÊB–·Ý'T£µÁhP"¦nµ>|­é~HD:ÿ‡†¼úÚf®B³ÓÚ ‹í#jÝŒ‡ÖeªM-Ýô˜§Þ&ÏsˆÕ¥¶úªÀézöS9£! )Æ;95¬ŸÃ*q¥8KM smãQPVÍïÉÌNõ5QI§øºŽaÝ´ÆFÅgZS.¬Ö$šÛÔWMNM‹véê+ÝÏ% ž.=_Ûèô6ì–E€’LUØâ&JÂ=ì¿´ËlÕfÍÖaM|ÖðeMßvMã…m¦ÜÎ(ìR²ÍÉF¡Š„t‰Í4b{C$‰88"GÞq#‚Ld"ïØq`òÌc'¹Ç!”ƒ•wÜ$GËR†ò‘»¬ä(ó%„T†²•»Ìd¾xYÿo[¡˜}Œæ#ó˜ÇgNð“ŒçÍ ÙÇföñfŒ¼=ky…?53Y$å(ï˜ÇINp—#è!»Ë‚ö2‘}¬æ3³¹Ì’a›ã)‰¹ÇXŽr¨Kƒê2YÍ‘8ô¤¥¼c9,l<å*Á„—m(Axá5–” q2ÈI:Ѓ’Ͳ5[Ù:Zö„jÄ%iG4¢’´£í¡Q,4»~„z¢ÑèFVò’ž ) ÝbR°#À5;z6ŽŒ¥|·ÛÚ>êѲÉ!͈à6Ê‹ŒÌ´Ü]_‰eN w¾Žn»Fj“,"Ñ_]ÈVHø‡@þá}øCä$ÿOù?ô!r“¯\å,?¹ÈOÎr•‹<æ3'ù>r.s—Ëüä;?¹Ì_þsó¼åBÏyÐS³>è)/yÏ¡žô›«ÜçDw¹Õ¾ó¨w}åLq -¶žò¥/}ê)ǹÑg®u©#½ìiWzÜÁ©$ØçBïzɽžw²}äI×åèb6[Ø]{—ºM¾˜»¼æú`¼ÎK®.¿¼{hÐFÐÏø“£A;w¼ÔCtÊ¿üå‘ÏzÉ;zÒ „òû þ^úÉﱘ<êWþxÖ³ü÷VwüË;/yÄï¼·ø{¼@DoòîÕÞôW½Ë%?zšÓ>ñÄß;Ëc)4üƒ†²8¹ÿÿÚÐxÛ[?û§|é{¿ò ˆ.}"Â?î h# •¡=ýÓ kÐÐ"”?äwrDð}¤Dð$7d ðhP}$ Þ7z×W{Ñ·{Ò§{Ô7}n÷–ÒGÖcúð²ÀJú G‘`CÖ çuÀ·}Õ·{{Çxú { ØÚP: }¤I•Ñ€¸{18|/ˆ„èv¿·\Ú@ÿ` &W€H{æg…Ñ·~ÖGt‚. ²'v7I@rpÅ47û@ihEH` eEU¸W±q%@Û°/„+J„K$ L•[ÇF|„ˆ~¾7ˆ64øã$p «ÿ”ðq ͱ “BlÀ=ׇ„›˜…Ê·}4hr&a n` D‰JDHn`EI k<Õ¶¤|(ƒ¯·{Ê—‹ˆ}þà(¶~ÿRwa}¶xˆÀÇzÙw| Zx… €ÿàâtƒ+§†ÂA<Ô¨†g øHŽ OX'mq{W±*% LÀ‰G˜~ð(z·¨ŒØ§{,w}TÖ°¥DaDŽKŒ›Wm`t¶|LX„ÊÇ‹+§²?w±’RÅT¤V¬äƒ}Ìç i9|ŽÒ=Ý8p8v‚HXˆˆë×…’Ts#ÀaŠøS²ÿàE‚ûÐC/DRúCC¡§k]æLU©Îqø£‰¸hŒ„8ƒÅŠ ™Œ4{oa MpÛ`K?B•ácl!BMÒ€ yˆSé‰9rŽ!v}´É¥ nhAÉE  ñX‹óHG¸ŒƒXr¾x{£u?XÕwˆn§‹.w5C#˜bw(7t‘ùuU‡r–évU8rz÷r!t™¬¤zî˜u˜˜I¸¶çu2{rgs–yul§}{¹„†y–Y‘Õ3v6ŒKÑš0guhWÈ’À'š¤É}†wt€‡Œ„|é‚êx)„w)!÷{È‹i)uÆ7z‘Â…¼§sÖ€Ñ(#ÿI|yš} •°)ƒ§ˆ-¨~&—žk¹ÅœÅYY8ŠÉG%×(~y„ I‹ÿ™„!iˆ£ç(Þ§žz‹Ãyž›×œ7ØŒHB8±° 7X¡Ú z¡Š¡{š¡š¡7è¡{Ž¡yº öP¢,:¢-Š¢z¡"*£:£ª¡¦å‡-j£ £Lq£@š¢5£.Z¤)º¢"AŠ¢$j¡Az£!:¤>Ú¤"Z¥RZ¤ÂC¢Mê£@:£TJ¤Bš)ÓS)=Ö?u¦÷f¦júS7ԎЦi §Aqooš¦h*§tÚ¦:§uê¦xê§v§Ê¦jzCwš§*T¨‚Ц‡ÿê§}ú¨†Ê§pJ¨“¨€Š?oc Š}š§uJ¨º¨‚z©›j©¥)|‘§žÚ¦ ª’jªŽÚ¦îÇTýg'È„jd¦«?¶g„ÆdZ¬mÆj;Æe˜–e½*¬¥áf¬¶¬Íêiã›ÊÃ\Í­|#ˆ\³Évºp—¶âŒhÇÂPÁK)µü\ÔO©+?Ä“5±p·”"…Tœ¹o,²-³O»¸õ¸bOö[ÏcU¦â‡ý±PbnÜ º%T\j9Bdok[,ö8×¹oK¸T¼±:¬½"<´;ÂÇ\ÿüÂ×P »Ç‚{Å1˾ =²4mŽäÕ(º†m§nÒ¿¼Ä+'ÛpÅ5ûÂ.½'$ªl½ÍƾÀŒÁsû°ïæÕ…eøÇ‡²··ÛÔæV͈,pˆ¬pûÇÝk4Òø‡t=‘ÚðS>’o¥µÐ<ì¿Í½Ö²¾ý»Î3ÒMðA“Õ=1äk{í#U-nòÕl¼¬dŒíñ,ÂdaE2¢Êí$ˆûoµ ½o PX­qª";ÒÒ»Ô k¼}Ô›#¢`ì@â‹ 4rÈ|›¾ KÌhÛW¢pØÌͼµÚÜ9ë@ø¶ ï¦Ú\mlÒ¹+ ²„K´³ Ä×ÿ )Qê]HÏ(r¹}Û>¬%•Û2ÔôB±·€ûÐxßyÔi|êû@¡&§y°·Þ°ß‘§yìmrÚ‹§õÍxLŠ—0º ±7ßxÉ¡8àëÙßΡà s=b·},Çßõ áú@LZâ ÚxÍà¢hßümá‘çÜLa3~a{Ë{nß nßóy9züMàN¡ ä.â:â:à'*Þmyœî߮ߚ—ã9îÜÛ`zR®´S»H ¤’s—x·øwÖwI—æ]g‹ YvU§æsuVwz•Is¥6´Gèy÷àÏ}›‚ÿØçpn}EGæ5÷æZ÷Ÿ€˜7Jãu7w8‡u—æÌiƒ,6)ð,)„W)ò§‹O¸q–~} 5á.äB¼7ƒ,·xÙ å}œç Ý©~Fhƒ±Þ•ip×ø§Á-(}°¹z¸ëåçx̾|Êžì:ã(L1nP ª ¡Gžê‰ ÄâJ¸‹Åw|M~¡f Þ 2ô{TÚ>|Üî .^Þ(ð‡3(€’=”:D˜H° ÆCpEr9ì@øBˆQ ipovYŽ ðšÂÉv `{þ¡ú5{Gx˜.HœS ’¾©è® +Jã2£Cægš{Wž Êè ÿzí?à#JZ]hw7”-ØPûht,)›¾÷7tbK6ælÜbwLNcH¡†üWYHÐT-˜¼ÎqN¾!F{ +¨¾‘{íínì³Ùœ ™uL1î,ætÑ·„SI› o•ðØî²áä+ŠƒJH•Ižóyæt/|MXZ9»\ßWþ°wøz‚Š.9ЦÏŸ"Ï{<¾AFÿ0¡TñJ²PŒ¨Go…‰_|X‘ ¹‹ÿ Q(  j¸ ¸÷R¹…ÙŸ2Î}z¿ôˆ–ð9š#ߟ.íï•|2¯…Ïüðy˜©˜Lˆ¢Óî(!gE)u#ÎT#)ŸAOsRÿK9µ ~87Px{`½Ë?Aa•—÷võ‹SõWOKµ>˜ù›ñc -yæsš°ù‰¡Mà5û´YÓÖÆÚ>ûþéû×Ðß?† )J´X±áÈ!bì(‘#G‰­mÓgMßÁmml„Èñ£F‡ cB„X‘$͉8eÂ|hPÊmmYKòÏZ›Fÿis£0äÅ‹«öœº¡­ƒI겦K–$k\‘Žü±cZ‡h'¦åh€EŠjÓêÛ†¤mDm2Š´8ãF"s®i'Jmûj»¶ôåΉ©¶,˜&åÄ?u.X´èA—jM’¤ƒGQ¤Ö§ÓßÇ›¾¢äŒÑgÎÆ€W¾*ý4l¬>ÏZP -©>}‹Ç˜ªüŸß×6T¿RAÉä-Gm#Ô~Â̵ìü[)=†³ Ãð¾÷\ÓJ["Cb›­´‘$³lIʼñ2»ê2èJ±‹?ª‹]› µžQ_tãPÜ…: (Ší“›$ÚЙm…€Ñ”hðB&YÈ¢9t³KZxCI¶%&¸[ËÄàBIRò’1Vp` îëZaB2µnËPf4dFZx"í4æY ê(‹6®&É—â2ÚCB<­+>jÎ>(¡ð)=lãܪ§— `ÿ„…DWpfÂA<­Ð•¤LÞ‰À©¶¢”u¹, ÑÎH©XáÎ>¡Ý-%³KqfGŽj'ì0CÌ]cSÖ°¡¨xw6Q!Æ–Û°JŠCœå4G…h$—•Éšrð4ü§ zW'š$(=ÔÅŸzWQ|²n<Ù,C´á.+)Ž5)­SÊnzj8UÒ–´$£S31\†T% n%DÈ*ä§FZ¢¹èuš 4´¿hÈ {|ÛK—*Ê”ZJJä2‚fß'2ɤ=#îjºÁC6Ó_}ìÔj²µÔ3žÆ–8=CVœxÉ„{¾Ã“#’bY&·zÓLŒd!˜ÿ*¢šÕ¢(Eæu‰‰¦\Ù©Ù$5I+¹Gz*4-µph–"(DŸŠ‘»Ú²9ŠEñô¡+b9%bJ5ToÐ3¼@³Cs{U,ŠÐµÃ¡bE †K„íe/ ±H dA¦€pþKB#î¥2$@lWiúÜNß#ÑRMt¢e‰IàˆQº:Õj½|'of-"ͳfR]µÆ£Z ó1=^n˜{±•MD ðKfj-Ö¶kOÅ9JC/¤Äµ¡ÈÛ?Úp9äåÙœÄBØÄa÷²ÙÈ69I‚¹ÿ 6Ô Õ5j‹§G ÊJR:‚°çghUW~óù òê„OåÄÿ%ayǹw–ü]Ñl®ŠK?úãkÇ+ŒIö³: &;ãÛÄB¶½ÊcLáÞá¹áîÍkÃ$“XCàì#EÈŸ#P,oŽWâ€6@°ÍjqÁ‚ZQÕµ'–¸ä¾xä* ƒßíè1¨¬E“íHQߵɞ…VàAá•–®ŽlvþÚ×Ú›Lí0f4üa(õ ÜW…ÄAúh˜B¤èÃö9ÂÎŽtseц¢Œ¥L “„í\&m<ñ#r[½º8m¤\29(K¥ÕJ®Ò45]U­ ¡óÑÓ¤4¤“¨j¡´©d ?æ<È?C$XI<…Cúhƒ% 94( $´ÀsÜWÿd!Íâµ.”t ]HBØNFr’›dQ_ʘ;s%«Yñ‘¨[3u ö(XtÉŒ¨§ìD¢S2„ Ì«³Áù£{ލu[l‘böD”+Á….5ùöÊ ¸"oQ¹8DmŽ6J`'Èj>ÌÔf5Û¹‘mú\í&¥eÒ.WoÛ©×Þ„L _«ÀSŒ‹èö.u‚'Õ’Pö­²8Håá¢=¥D>áÔF\™¡Yâõ^°vqÉ4n,É1ŽYÔæ×Ð ²´z_ÒÍÅ=mLVãgÂh ZãHš–|½uÆCU&Ьº»ú(´™"¦[Ph¥×в\ã9¡]g]ÍÈ*=¾Ñú9G"Žç€?Å´Bÿ³’,Àò‰ dÁFsyDMy£V„¬è¶»½Dû ÔAÃ’¤1ý‹¹Q:-Èd7ÓI”½ (P >’ £º»¼#¸k°!͈Žò?Úùʹò»Ï: u¤Ï¹S ùI³h!˹zò»«›Kˆ¸»ÓM9€®Òƒ©Ïl“t%‹¸‘¹¸ŠO¥é‰ö¬±¬³ EˆFÀM º¡ó˜Æž&h˜èh •qUÀÈŽÁ‘)Ò&0ú,ì0>xŠ}‹,TI Ê–0êpInÛ¹´rEÀ¼6Î *{èëd¼4º} ”¬#·D y“—Õ?l†Ø•±±–ܦÿÒ¯³FžDœ;Ü©,|.êÒAtžŒq$p^ÉžFØ°éŠÆ ˆÆü1™éJI@ Ë•)¢; ’…Z`)²NöZÌ2ÒNØù 9ˆFª[p"j6N$ÒešL'@ÚŠ‹´È µèš´À—U$.ËÏ-B Š¤È«³Å¤ÀÅF$5C3^±C:ܑֈðC‰ù‰‰œÉI‹â©C™À43$ˆ„4k7¶4KG[ !($õ=Éd*‘Ó¥µºbWh@NEÇ+Ê Ïí,#{Hb-‹öCE6hŸ†@k@(\*ÿIÁ6Y(Ø$(¡BˆßZ›WI™Fõ 9Œ“";„ABƒQ°9³®‡®ŒÖØÚúQ"øðQ˜±H°Ø8hƒ¼ñÑÕ?)¼Ü8 x]¯ ý4Xʼ8±Ô¼’˜fcûB˹„2Ф–é˜±$°‰¸²±I‰Í‘…h ëºÁ+!k8±12Ö3¡0¥¢‘VI@D¥˜Ú·²Ç°Ù”(°±DZ AH¾ý‡±8\h芅ö9ˆ¼ "cQ¦´%Ú£F#Ô¬¦“M›œ´é8MðÓXk¸…HÑ~6”»!Í8$Ô ¶y -ÈÆèŸ ›H0ÉçÔ%è™ÿ ᔯØX2s»¸¤·°‹½`:ã͉4hЇ³J®{‹Î°W÷™¯Z+Ý[ ‹ÔÞ6ˆ…¦!îªÔ5¹ˆë3Œµ±È¥˜Z娭2´ÖΙ²0ù'"Þ†³ÄÌ[â0[UJYk»Ë1#0šŽ}ˆÕÐ(+àÉš,¤¿·‹Mûœ,Ùà‰ö\àÌVO牘ˆÑÍ?©àðÛà†0`%ðk'Îà Î öà©u„ ê¨ ¶½ Vá¦àÎaÖPÆŠŽ{¤î£1ánáâÃaípŸ!Ž˜KC‚£NF£âä *Fë™+ÖâL¡bÑPxòGÄÃbÄãb1&ÿ¢ˆš; 2ã6 .VÓ6Öb6¸:“#›ã2ŽãæeVæffægNfh‚&h¦fg¶æj6 U!à‹]³o‹pçqçr&çsÖ…kç0™›kvg®¸kž›Y½©UeÃgßm½T&]Q®eQ¾&Ž€æç‚hƒæg‚>èV¦e|–„^hÿˆ–è~6Žå{æ_PÎçˆh…Öç£ðhŽ6h‡6•Gúh‘¦h”e` u¶Gï³hUÉæÛÐæš¦é›.oÞnižÖii¶éviàÕXŸ¾inžfvV•xîi >j æt&j¨æi›–é¤>æ¦V•¡¦j§®ê·©é¨k¤¾j0ajvFk³°»;Ï¶Þ )éŠÞæ \›€~è»h’¶h"ÜhéQè»å”¶hÁ¦åÈhhÀ¶†Á¶ë~Þçâé‡Vl‹ì‹îk»ÄNl01ìÄvhÄì˶l¼¾ìþÊ6m0AˆÐl¹&íÌöë¾Fæ{$5d››îæo—–iÿà}S¤Vê¤Æí™Þíàömá~ëu6nmþm²&îæFîâ†n¶ñæU¦!aÞíavn¶=nà~îìîufj}6祎îî6o—ÜÎf3‰k¼^(fhQ6ié±èËhõ~ïQ¾oåúÎo~ÆïÖŽdßo7ðúÖhvfeÈ&iÑvðÒ> Çl‡ïêfäø¶o×o¯žá^=€$#zÈoÖiã¶g¬>¢™¶„àÖØ/oî†ñážî·6Ì{¶YÓ^‹¼³†˜å\³(ñ€ÃêÆî’ Ü%‹—!afkìŽæ(æ³Î굆ra†°â&rò抡òŽç™^›ƒ&fÿ¢bʲ(Ÿ"øQסÆEH2¶qÕq"3Âr#Ò!Vp¼VèÈì¿îóÕ¾kÿ›üi$ñÙ°²0™FܵX‹W‡,ªÖ;íBí|ÞBD¥.‹96±QCÜ}mÊöï ÇçÐ.õ'ïëL¿tUßè½óÚf¤_Æ6à¸ÃÁ ûÙÂ)ŸlT0Ä1T€¹3)òÓ‡Y†,jì¾n#_k¬nv §v‹L‚4pƒüiQè±9C1"(Ÿ Y €6h@ë’jãþm°Ørà~¤€:)rWIK¸œ ³:„v1“mïÞîï†ñ÷&æ~'jµv÷ƒ/ëÉN÷ÇÕM0!¬ÿƒcñÖŸ½ËQÐ{·X—A7X(KËI‚¯y˜bme÷FùÀnðüì•7‹Óuç™®¼ wËq™âiÀÍù“éû6ô… iqæ ?쟇1úƒ Ä’™ï€Ñè“ïó¦_p•ì0±ìÍNh•鶞野&ØEsûÑÑÊýÙèTB-™ Û«Ž'Áh½—¨ð—rÖmt¦{¹7çgŽ#wY@GHûéþQAKŸ57øQ›íf矞ñ}_j|.¡=$w±Ù°¨(™‡é®á¾æ€[fÏ·æ07ygßn"r5}!Ÿg 'æ²0Ò-V%çåÀó³ |ÿ8'¢¢Z›#bôZà8‹Œ…þlÉ&Žâgð@wyã—f<ÿIÜíOËñ£pSá·V9LLïkÊ^izNçó-ù8þE!K‡oV&ôå7ΆuþöüÖþûmÄm–ÈêVfj¢zS¶5þ4‹Vkmi³¦ Bº ´ÖР”ÑE‚×(Þ²XãÅŒB„x¤C‹WB¤èpÂ'‚¤iÓÌS^ÛÙ’¡À‚%/Î4ˆ±áœ5A-JS¦Ã”1§6mXudAQ·ö<˜³¤¶H’N:´eö¬YYgÕ¢mËÖÖÛ´mÝÒEnݵyåú(qîÜ»€mÿÕÂkw¯a½‡+þì81_Åf·îŒÚs æ­”y.¤|màçÍQom ñ2X¤‡ú(+Ð$iÒ$AÓFöí6it7Ù=[wšÞÀuÿmüxqãÀ}//ŽÆ7›Ù̥禽[v¤mKw6’íyðëÉiÿ>]9uóÄ‘G¢}ëAöÍÉŸ¯®Ü;ïÙIôÍÜÈ”ªj7]öŸE7hÔS…dk>e•S’ŒÕÿXxá?þX¨a†rØá†!b"ˆ~x¢‡)Žˆá‡)ò§MV’4"”5×HtM¶ˆ¨"‹<ö¸"‰(¦ˆŒÚ\ãÞvÖ$Ác‹B–˜aVÛÔÄ{}a¶ieiKÿh\f4Ða,‰iÍ–š•Ù HÚ-4—_XZ#–Bב¡Aûøc'žwþ£žúìù§Ÿ~æÉç>€þ‰§¡&º(¡w:j'¡{¾g”$mhwX9ÞiK }îé :ªè 2º¨˜¶ì·“ªÒ©Í¡¦*:ë?xVfûP%K’,UQL«‹,µDE“$D0§ÔD6JR˜$‘ ­´EÙ2Ö•Ñ—Fv+}¥$²tæê>$$á,YYó,ž’êh­¦Æ›g¡´zꩱƚ/¢óún$nˆI#ÚÅ´RŽû°QYúèXM¡ôjˆ(­õž*Ŷ .’k2´¤5$¤¡+Äœ:,kÿ†ë£k¯D"˪ YC€,H´!K¸;b ÖÈh j%q³´× $–‡4n%‰¹²P‚,‘à†ZHríÕmpmÑQ+‰!$¹ SsºÜ†$0íHŽs›¯Ÿî¦ jÊsÿ‰²žðb¬·…´6Z«>i€Õ‘BÛ䨤-H¡u²Ú°MÜüò­÷ÄV^÷Ûš+9øÖI>®5æ˜D$D‚BŽD’FßuW®áAD ž„ªû•б$QéÐjçF8»© ‚5(l$I,)ë‘HHb3 D\r‘” m€›õß»ÞÆBûJ¹I‡+Ô5(ü34mèÀÿ?æêꟆ¢|·åùû½oæX¨¼ OB!#´Ñ7x„LÉQ²nC‚öY£ C“¡à»xùsýÔ”Hà\=D(IØn“„É‘ \¢Ó Ÿø·'‡ˆ,>º‚ÏÕ¾íÔ¢Ý ~¸ ô·9Ü›$(ƒQFd)Xa bÚ‚NKC "Q-ê¢$ÀFNø(¥ùEB)QÒ>è7?úѯàŸÜô'±9vÐSÔ%vG;Ué ѪÒRѸ[üÃv¶(Azæ¯â‘b(£ã»tE#UÑS¢#Á?´€ bRk±ƒá¼ÆDU9Ì"UìŽHÐ8‚uEÿPÝã^©µÝ  U„I´æ¥®Š0m±@ ¤'µ±<®m°ÞÖº—„¡5¢ ŸqÏÄ`„“ÄAD,4r¬t«uÙ¢±›Ê6ˆ±Oâqs1ÜÊf·/šòMmh§BrD¹Lnã_ûØÇ’µG¾åÉPä Ÿ¢r’$\ŠK6 e ;Á gø Îh–nE=ËAÔ¢ ¶ˆ‹£€±FÔNÂþÜMz) ˜Lãž¼å(úF¸Äâ!ùÄ >Ú@±<âñŸàÌ\á8G<>’¨ôrÈ[¬6:íÄ ¶(g¼È6·~âªß´ÛOóäQ[á†d!×Ûþa6Ȩ);ˆÿaj¶š î$By«BPr¸Ÿt¦ ýLΔnM“DbgV2:™DB±QV¦Ø•%”¤úXì>ÙÈBV±“•ìc+kYÌRö²žÅìf=« ö4=ËLW_*"­ËRýìe+[؆ֲEÂ2UØ}ø$mÀ,å´![Ðv6¡*¬Mš0£6Í®A H~’-•‚ (bã+PÞZB‘d’@ W\µ!%—¼Eoy‹$^õ²w½ëEo{Ó›Þøš·½EÒ~JÞÿDe¾îõ/{á`ûø¼ÕïK½û’öjS¾õ-¯k_š_5±„,kúÌs!Ô™…ìA¿²JúÂÿ{=wKÚeJÒWIòF4+ÉŒ•b¬%ÓX42Œ=#•ìÖØ¢šy1·R&×xȧ©Ìj€âa—¤KDv±ŠŸ{,ktXÉ—‘»ÿˆ&Kˆ»Œ_QÃTné®›QІÇ|m&dc œ—r“t¸(ÌZPSÐŒgÕ\…ÊI¦Fò‘¤#b3Väç>×9@ðÙ‰Çj4å§8ú* ShÌæ“(\æ³£)LuýÄ­– ¢3Ó×è2Dâzñ­j\ãÓzÖE†1†3cd$J×'­* â‚më'yØt2H®œba#ÙÈ™J_D2i>—Ę 6šþ3Êÿ¯*ù`MÍW¹½b_úFͪˆ¤n9³[Ýén7¼orì¥T9ÓÒ–‰-( gCW„߇þ·‘*£åYéÞªQ¶Z…š$q3‘~®J¼Â»ªÆ4:Ñ „*ê¥1æÏ¬^³ÇÔ—\çšàcZ©ÌP®òXgF3·r2f•*s)®*­yƒJžm—Ÿœå\Q i{l²lIÌ<ŸqÌù+Ðtc8Õ&ñóK‚Ím+™œÏÂnº‚ò=•l}‰LDgŸDdA6BÃÔd'¿õ\vK3FßþN5Ù¹ô‘ÖxÌ%vˆÚ½½š,ïßi¢æµY=÷˜SeïðÆ8µe× Ë É’´d™Rûÿùá¼®QQ@3xÇŰPN‘srž[ÉËÙŽõÃ-¶oO¾åØf‰ÎŸl3ž,Jì…­3ºçš6å{WÒ=YÚnhŠ­UQ?[¼1¿Ê™A:R©6XbâLéÉ;­ï%³»@ï¾û~oѺ:»HaêÚAÜï}?ˆýêÇ}jPM]Dƒ:ÎçŽÉ€HÃÖÔ–ÿÈ€ÅÈ€$›Jé”ÚÁL«µUMäÚHðX¬±Ø@ ,‘„´AŒU]`8UŽ8B7ÙÂμW|Õ‰`³1[h@[‘F†ÅhP×Ñ…œ“íÜ‘Í}†Ä ˜DœÉJtÅÖ HtÔi–ÿ”ˆ}Þò5}I¾-à9a›äÂó\DP2AÎÀÐØÌö|îQ|Ë»µ_¥M.šá±U¤m\I _ýi_Û¥ýžþâä¥Ö¡ýʂЄ•tœe"R›¸é¥mF~ AÞµþ%¡ÌØB,LHJ MOìPAÈB”î€À2¥W¢0íµ°!Y_´ímX·%™È½ JIê]I챆Îm\–,¢V¬‰ òI!»% !2ˆ`=ÌÅšñM—J4¢Ô5„Ë][ šJ C€6ÜTŸM# A \ˉP/mŸS¤¡£å!¼éÿZ’íDúå ¬a홹}µ¡Zi`Åû5Ó©T¿¥\¤±žPa°U!‡Y_2ˆ™\wñïc½š×I”Ì(Pdì¹ ÕùàÑíM0¡ŠÛè™Ô©”³UFЙ_…•.²ÊÚ$+J›—y¤…¡‘( ©¤öyLKŠZ :ÿ¥Ø€ "0’E´$Ÿ"²š$z H[£}ˇř²}³ÈáI˜áU¦ÉÒ¡])G$¡Qâjè¾ÙßÞ)äà !AFצ!ÛÁ,&jzæqBæqÖ”c^‹r'uF¸¸¦«Õ‚v¶&\T¦k6çs>&ybçwž'q6'cŽ&y^ \°&jž§Zt-TßÒ[|X`4‚~ò§~îçöçú'(€ h€ú§*(‚.¨òç9è2è„>¨„^¨„2h(‡v¨†b(„&hƒbh†¨ˆZ(‚R(…Vh‡–è…®(‡n¨‰Îh‹¶ŸçqI…‰Žî(ö(¬ 7iƒ#\ˆŽŒÿŠÕ…D……\ ’)“^H~éŽN)•V©•^)–f©–n©–:LT0M±K …h# ±Á´DMÀl@,¬©*Í©5ÂnAšB(ÙL,\ pÕ!i…LÈÎ~¢¶œÆAˆ¢ñ§Í MÒFmhTÈÿd* ŒÊ§@J§ÒM§ U¨‚*§6J¦ŠÊ¨¦*£”*«zj£¸ê§ªª©~ê Äꦺª¨xê„…&jÜäF$ iö¸Á? 7ÝFà(î¤ á¸¾N´¤%q „žãY Î Á¶¶’·²’éë?ë¸Ö þÁ4‚,Pˆ²M¥<ÿºÆkÀxÓÅÔëNÝ«Ü •Åàë¾ÊM$=T¿†S$­Ó8íM8ñ+Á.Àî‘õÉ !•×X”ûð'Û¨#@h±"Û|#’À8kD( %P7•-´ÚM£&„®ë~º¬Œ ,™:¨¢«NÍë~Æ»f€®P̲kÈvОSìQ]NPÙ‘:--VyTÁ‘Põþ0-DQíA­¢ð Ñ"m1­ýK„hâ×€[r»œ„î¨Å-hŒ®”„ QÎnºjºNBèC$¬-Z•EIôm  .Düƒßî&Î,æÕ$T$ìÃâ6®85-Ô~mÿð+DÑ‹].×òÿ”åŽSéÑZ¢ÐT‰nU=Ô"M•¾|®Ñîkç½D¸ÅDŒéÆPÕzH¡dÈÊÜQþhnßp“®dˆŽøC‘î?Ôá:J»iN9DñîòÚ‰ŽD¯Ân®½ê‰Y-Ö. $ÍË¢-@ÉPåÊÒŽnÀÖî½€?™J:.OEFiä.̉ñèC ª©ÒšZ &íF¹¦· ×¥’G¤F„âNNuÞÊ*,€òçãh+Ð(j# j#¤€,”ãu8M#”€µAÄ]¨ïÓ½j/¨r¯ÁF­Åœ õ¾ðúš“¾XUÖZÌùæªÓ ì ã #moí X˜QCìÿ¸vÓ>X $è“Õ³’•Ͼ,*fÏöˆ"D´NÀØ ·ìç ¥ã“¤æ·Fj딫75ãŽë6ÌëlÈkë„è~Æ«òb®ämÒ¢ow­doözï×p÷ö“ ïÔ äþÏ KmÓZŽÊˆÈAD Œëòg40»ÁÍôlwÓ~VÊ¹ÊÆ±.΂vðï ~N â¸Œ³òìÅêì(ÿ–Œ(NŲk¸¬;‚Ψ-\­è"mÓvN8E­ ?®ƒÓ>i.T•î ïÔÐæ°?í435—.#Núˆ]tåÊÑüƒ$0î5D’J‚?à„5|CÔ˜EA°ÿ [üCMÝOºè“.nJàŒÍŠÕõøßPÆ’x“‘39;é9„#tQYCŒóF5t¾¥ ooÅððú2(i* 2 óÔ1o®>3Çp5òG—•ÅŒ›PlÜ\HÜXˆesÝt‡ÄPL;òGßîʨïí†È‡Š?ÝîÄ`H¿tH¾ˆ/I5TY´Qe¯® 7ÒêF®¿ÊÐÖî±"Omê^UYùËôB•Þ$ôÄMýOSìMë® eG3EpN©iãM[ß ©üÍK;Ê“o]wÐÕ2¬÷–®PaPXýk2WsU³/ÓÖpIk´ê²0Pq­M³#KÊLá Yäèb«ÿ“äî½ô“ͤ î0Íà"A±(zSøž.1ßtcguVO´^wNÂÚôK*3GóêÞõõr/é¾võ0T21Ç6lO®Ö1l–û¼KÂ*òNɰ© qé€à(ž,„«pG#µn÷«I×ëÞ 6èÞµIŸ/NaPsow×rud¬ 7ó÷ê±NKu6g•jà $÷j\V‡o½­zP&Ѕޤ=çº U×6 _Ud§/Smn›5aë7`‡®#v!'¸NCøåºöfïö†?vVmõQïÉ6û H$7;8që°å‹KÃ8þPo—4†7íw;wPݸç’Ó{ï5SÿøO 6†ƒ´ok7fCuÂ’·7w«.(@…KgÜ‚eK³l‡¸|;ìo3¬kk´‘7òY³w†÷xf×øEgµõº7“Ó|s´ “76GuT˰Žwyÿø÷nÊIùâ0ÆûýÎ{=ÉK¼³ûŒëZC œ9V#¼é3òH/5V,ÚŸ¾ù>~¤=é[¼l£ù¿yЗ~ê;ümç1ßܼ°>‰·¾ú޻ϼÚFÌÉo?pïñï[s±9»ë9èŠÍ{6‡÷zãñÆ»9ßÇ>å69}§;¶suŽs>@ìûçoÁ þ¨ïC‡ úƒHPŸ>[Ö¬é’%Éš-mÖ’„X¡Á‡ !B,‰0¢@“ÿF”¸RæB‘4Y¾dˆP§Bƒ5[äÉSeJ”îœÓ¦LŸE‰â¬é4ÿjDŸIƒb])ò'Ë“1‹NlêÒkK³SŸnÅ™ò£.Œ’d}¼ˆâ*S³¾Ì[U*X­Y‹:í{ôjWªh»t¯á¢_·®Ê´+e°„ËBí8ñRÂJ^LV,еR÷]ô()RÆŽ!i–&=µ¬ÞªX-Ý»,fÆX‹} ó´ÝàÀm^ì8r蜙 ‡ýÕpo£Vk“µ-»ãçån”«ñîÚýþ®ö¦pÄê£ãí¬}´]¤‚‡6OݺtÙ”mR*¿ÿû‹¿ãLKk¿óð“l;úÐ"×àºH›[¨ë>ëþj½õÓí:ÚDK>ÛôзÍóE²ÿŒ°T¬§ÁR|IEýD›pc/8 ’ëm"‘D›‹@ºK¶ßzªîIÍÒc«Îì»îJÏJSðº'ucñÀäND¯*ëÂÏ¿ùÚsK í09;,1Ì6ɲ(¼X¬YÒÌ\ Ëç²â2F¯+“Ç÷ òCMdp¶ç$âkMC• “ËžD¤t¾H=DS¾ölÌRÊæð#jœòí©+#ò/0Aµ“âbi~‘â#Ò3aŽ<²…çS}þÑbºÍýªJ—ßT×è ýž5Èßµ{TÞ57âß+Ë@íìœß»\×ÉÔY’«ÏV}‰Ñ“¶ðI_·ÿÑz¡n|ôydν:•coˆ1Fnn˜Á¶»d OÄ=f¢Ÿw¨rVcñ¨aúœýòzãye¿ùÛ G¶{‚üpd¸›~ªdTû¯ÝÐiwx*õúf½êoAÁˆ5¶a‹X¸êHE¸Xë¢U4c±HsÃÛZ°@è5Q«_”²šÅ®÷/1O?´šLø„ô©Q {¾ZVØpt’óYBÝú y„26Nˆmƒéà°RuÊ^ˆR°Ç!bîn3“a‚Ê%¿ýJ`4Ô´Öb?…øn[®Âl¦WµÊäE±«ÚÆÅ­Ëyá ]Ý2¶·™0;9šÔôŠæDBEJhx|ŽÿþמD©Ï²hŸ<¢mìC’´ä$+YÉm\’’’ì$&õ±IMzr”¥¼d(9™ITfò“¤t%+M©JQ~²“³4¥(_¹Ê\â”±¬å.OyËWÒÒ—¥üe/ÙJdÂ2•Àd¦0A‰KiZ’—Áœ¤ÚXµ0Bð}ºF7½ùÀ#“œùHŸºyNtbä›Úh'FÊ&Nu¾Óô\g=Õù@w®óœêÌg>˹Îx†Óœßç=ÍYÏ{æÓ è§>!Ñ„>p M§EªÐrVtŸÝgAjP’³ŸÕ§A Z6H–›çs‹¶ÎW9HºÆ-5¥©Ú`ŠSœ®4§6½ˆO—ÄÿSÊÔ¥f{©Ÿ^ꚟÞÔ¦I=êRzS¢U©AjQ— ÕæT«DjT›ÊT£ŽõªVªP½ÚÓ±‚Õlb\Œä'l&5¦[5Û-Ú:V¼¾4‚jÃ+WgUÕ(õ¬)`mqó핬yýkGnÖÖÃv°I½O‘šW®V•±ª‰lbcjÖ¬JÖ³OÕ¬c +Xk\v°¡åj_[{!³í§Š¥¬Tû´šÖ$Õ5fsMÙÔ'Wl5·*MlnÑ©¾á2I®ÄŦk|‡Üܶ“¹Á=no…˰ŒTãìn[’‹Níº…ŒÐõms™ôÜËæöœÖÅgzÝ\sV÷î=’G¾‰_ôÿz×»Þﵫ\÷J½óýH_Ù‹åþ7ºJͯxtú[&-²f]­‚}ëÖ–*X®f$‡™Ä°¥úiIŠ%£gÍfVÙª8ÄÆð„}§á±º˜¼ïj;ŒÖÖÓÃÒ±# ÙG¸Ç9ž°5Y†‰xÃ+Mñ`Ÿì[&/™ÇÐe.tÑf!ÚÖ§ö+x­zâ'‡‘÷Åñvýª`ùâµÄNv+qa|dÊզĵé\m{!#‘w½ í›Q,b;ƒøÄ$þ°†KÜb' úîñ  ‹àŸ~³ÆgN¬Ÿú|_8³WÑÚÚ0 m«ñ\dÇF§;§úbßžuº“V³§Ikà“µÿ½31‚Åš_kÐ6½­p¨ÃKá¼’—ÖÈ=ß‹…»Øù^˜ØYOl‘ͤmhcÚÓ¦dµ©Il[;ÛÚðö&§ýmj‡Riðö¸Åîkg›ÛÛÖ6»1Ùmm´½’àSïlXß”¸¼†à‘+MX:÷öÐ>αÀmQ6Þªoáœöá’"øÚ.šÐcò±™Äع¢™áf‹øX;\bKצ&~.†É™ÞnªÀåœ0ÞÉòU¯Üå5ÿgDvà2¦pÇß¼ÓÞ¾T×®¡­oiß8£Ê=渗=Íh0]ǯçÂc¼eŸWúU'øÅVµ‹U«aÿµEœVð®î¸õi°É­ªZ¹åõMðÖºo1‡—¸”îº7ÍÎÎ÷W¸|÷»sýlß÷á:nËCñŠæÃkYÂê øƒ»tš_øÙ Þ&ç{ÝVY ”[ueAÒÛ®Ú-x×îi;‚6Ì÷f#À•c‹sµÁ…af6ìgÃ|äǺö°+Õ·1 Óä‹V³ÔOk¬—?líÃÞ×]^û`—ßüØzV5}ý~c™Ÿðȉ ’ ´!þð— Ò„$´aëÄ;µ­¬ôš@€÷þâ öÚ d!‚:nŸ`NÁiçšÍÅ2/ÌÌëâŽÃòkò­×ÿ¢KΘk½.é\ Î ïò‚*Ï>ì7.ÇJÃ"Oô½@¯î¸FPñÖÉ;¢ýV« ˆ  ÚÒ€Þlaþ”ÿîªåðÎØª,á¬Ò€Ú –„dÁþ’À   SÙ¬!  ®ˆÌ¼- G¿˜LgB+à -ëŒìV¿2.¨2mãpïâÂÎ-f/é´Š]Œë Ô ŒÉ^®ŒÿŒ¸&êvÍ5H U š @`ÿX£ýèo÷ˆM& ;BHÀˆÀl¡ èo%l$Á«RŒ’Š[Œ IÃøM}2OÊHÿñÃL®u %²ž±¾@¯«‘áB°·ðç$qóúÏ%qÓ(±Óªì·ìëÔ èÒ+‚8$$! Ò$´aÿ¬Á Ú€58"¯¬êÿ\ ºdÿ$ÓÀ$a Ëí }‘ !Ù‚'˜&Îëü.±Ö®±'Më:®Ë€Í !ñÑñ¶ª/ÖZ¬êDkîz+û2Ï-xmQ¶fë¦ÖJÕê,¸\Òª"a Ó Àòªã¬ÑrnðÚê#мN­ —ÍéæªÆÃÞFpIެí$lôn*ÈÎÎølÝQ¼L©®ô."²Ü‰ÏÎIã‚+&ûkß2K/Å”NËÿjŒºÎñ¶+à\L¾ÎrœP͹åÈn ãéÒ|îœÀN#ÏêÈf* &LçBî²Ê8°»˜$È¢*Ôj-µ8mÝѹZÌCòѹDÌIJҿ^í_/Ú|'ÀŒd°lmÐlÓ#–±ì¦OPÿ€Sÿð738ó8ó7I ‚ˆ3 Šó8ŸÓ9¥93:_‘¼àb›æ0Îz²5q+Ä¸ËØlÍÔ„ ú¶ëÆôÍOxOÇŽ,cm⪠¼`/6ÓÎÌ1§Pm²:P׺ÌltÍ×ô´´@ÎG’@Û*A Ô×€‡ÔÆCɶ ÊxÎ »é‘Ì.‡+&/‘ØHS'ƒžÿÎ.“ D?3Ê ìÆðØoÌŽO.³BÓ â|LBÛ‹,9púä®=u´GSí ×nÐêÌB×Ï#á‘rÃZP¬2Œ5™ŒÂ2ðI÷’%Û³Bù3ßL7/OÁ‚l´Î1èÆ’½òìm«Ê«á*0AÎ×P åVm7U>åĨÎM«ÎN4 ŒøOéžôç¬ìãúeôuð¦,‘>» ¿t¬ü÷Z,ªúªYS®.>Ô.Ar. n'±ñ;'1ûKêºs-O-$ó0P‰F”HQCÁ,?õ,#dAmÁl!WRWyµW}õWõ€uX‰UW…µX‘5Y•uYÈ™µYõYW¡ZµY¡ZyuI¾°‘tu[¿p[õ[¹\sÕ[\Íu\ÕU\õ\yU\É•[åµ]å5]ãµ^Ý^‹Õ^Ý•^»U]ß`ÿU_ v] ¶`ö`óUa¶aVak]Ïu\#¶‘¤5Wk!WÓç[3Ö[+Vbçõ^u5cÕucm¡bûÕWÙõ ;V‚J6e]6d¹5}ä•dOvd9V_e_uöaVeçXIÖfmÖW‹Z[vd•õh•W‡–W;fox-1.6.49/doc/screenshots/tux_small.jpg0000644000175000017500000007513711637250333015167 00000000000000ÿØÿàJFIFHHÿþHCREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀM"ÿÄÿÄS !1AQq"2a‘¡Ñ#RS”±3BTbr’“ÁÒáâð5Cs‚²$4Ut£³ñ6c¢Â%&D„ÿÄÿÄ8!1AQ"aq‘¡ð2R±#Ñ3ÁBá$4CSbñÿÚ ?ÔOm+ð»á¶ð$ªêgif|±ÁåƒöÖkÃ^Çî®mO·" Ý †@›íŒî3×Zàc“†E‰]HMK…r7Î #~ÚŽöºbâ ÃþoÒÚ¬q›€ì$üa†8潜«<µÐÓF}”Ò¿‰åÿøwôWÿY½GÄ>ýÿÖGïW¦p»N-mzò\ñ$’јBø. ù#;òÛ¯×G·â—7x W€"È\b6ÉÉÇi ãj†NóoXKì^G™üCáßÑ_ýd~õøwôWÿY½^³Â¡ºµ·t¾½[™ <†•zÁ>š©ŽÇ‹™ž>.© ¨“*±\d)ëÎØÏY9£'xu„¾ÅäyçÄ>ýÿÖGïQñ‡Eõ‘ûÕë¶"æK˨î.FrêƒÙ°ócÓš£·±ðKãj˜òQ‘NÄ’pO=XÁåŠ2w‡XKì^GŸ|CáßÑ_ýd~õøwôWÿY½[æ¶ð¯¤Ž/lCoÒÓJöŽY>m½u{Äúi,ôÚ¾dÖ¤…)eq«;duŠ2w‹¬%ö/#É>!ðïè¯þ²?zˆ|;ú+ÿ¬Þ¯CK :hÙ¸ì „(Ô¹ã+Œÿ[×%µð!./m+…\‚Š ÂÁÓü)ä\ì%ö/#Ï~!ðïè¯þ²?zˆ|;ú+ÿ¬Þ¯Yái}.¼Fö+‰ ,€.yך­¸±ã¡¥6œf#8é6Yȃ¶’ƒü¾zY;ÇÖû‘çøwôWÿY½GÄ>ýÿÖGïW£Mcá8xxÌ(ý«dºl°zò6ós멼2+àñ% Ä] ª…:öß`6çì£'xu„¾ÅäygÄ>ýÿÖGïQñ‡Eõ‘ûÕé÷ðqx’Âð@šPì6ÕŸ<÷^¯Á;Œæ“Âí¸Í½Ñ~!Å!¸‰‹ŠÆÀ.6äsÛžTdï°—ؼ2ø‡Ã¿¢¿úÈýê>!ðïè¯þ²?z½#Zqkž!pÞ mâÐd ‚NqŸ0¹M‹úwcÇ` N©Ò¹ìÆ Çõ¶æNñu„¾Åäa¸ðÆ+‚×–ÜEãÐÀbà66$kõб»áÜzKIVß…qE˜ÌLyºPaq“¬õ‡Ûc}«Ð8rÝEk‹û¸§œ±:P:€û}5/¤Ož¾ºym¥ÈKäóeGž5‡èˆNÅC‰ƒ Ý ãØ•'¤çœ€{1U¼G„xQ5ÄÍeaÄáˆéè”ÝŒ‰lg‘ Ð.¿Uéç¯®Ž‘>zúèjâŽ)ÅÝEsñOkpÍøà¸è[¥Ðe †9é3‚iÁÂ.üESžyùWqžáTüNI8UŸ‚С$¹oøgí¯Wéç¯®Ž‘>zúé5rQÅÊ.ùQãøwôWÿY½GÄ>ýÿÖGïW³ô‰ó××GHŸ=}t²w–u„¾Øù1ñ‡Eõ‘ûÔ|CáßÑ_ýd~õ{?HŸ=}tt‰ó××FNðë }±ò~_l|ø‡Ã¿¢¿úÈýê>!ðïè¯þ²?z½Ÿ¤Ož¾º:Dùëë£'xu„¾Øù1ñ‡Eõ‘ûÔ|CáßÑ_ýd~õ{?HŸ=}tt‰ó××FNðë }±ò~_l|ø‡Ã¿¢¿úÈýê>!ðïè¯þ²?z½Ÿ¤Ož¾º:Dùëë£'x|ü¾Øù1ñ‡Eõ‘ûÔ|CáßÑ_ýd~õ{?HŸ=}tt‰ó××FNðë }±òzúê7éd²uµ—DÙR¥HÏ”3ÌöfŒáÖû#äbü á|~Øß|uͨ'CÓÈ8Üã«Ù±Åj®-%ntC|A—äe( ©óíŽó>:ªªÞËÂhåáí'‰Ñ-¹)Œœí¹ÈÇ<ïÏh®nnUâ[e‰£ ôŒeÒFýCû*k³¡Š¬úY¹µb?¶C¿¶I¥H±#*öÉÀôÕ@·½‡ÁëñÆb³iôÌVH#„*tŒ°N=]õdËÄßÅ?Õxt`HËì9úsêYÄŠ/ âÆúèM ‚`@àè]Gc€2qýYi\ªÈÐY» +p—ìou;%Ò ¸¡Žhä#1 ,…H0Îzé‹0>ÉÎ=‡Ýí®XÞÁÄ!i /…‘¢:—Rœ…®îH‰%÷¹Ä–Ý pEv"v3Îé`üI¼½â¯{w—@‘ZƬï4ÁsIÀÁ<…OŠkyf”!âm.|\‚{{˜ï‚")øâŠ{˜âi"Y]K(~xŽÏÉ?ÑJP¼®ŸŠ^ó¢I5$•b2UŽâ˜â7rZY¼ÈÇ#¯±ç8½]â¤UÈI5 NÄc4Ø‘$/‰ 8loƒŒÔÖ÷hrM¦–ƒv·féc`\PÛìpPœ Ážjð××þöºún¢Èå¯ùÆõ3 3T(ÉÂÕLÅt²N°²I²r»®@ê'¶¦•îÒÐVvµÊÞ+áðÞ% ·iÆYŸ/aŸ]JœeßQ¨4·ýÿ¶KšâHìÞ`X‘‚|Ã'ѹ¨|#‰Íħ:¡\—8/¶ûuvyðz±™ÓK{?ÁíZÎy4³Žè1p»cRì{joÅÜ[ñH¾°?v‡›5ÿ·©¾qõÑ©¾qõÑ%—Š6‘íb  ’~9òÕw âqN”ÛÍ ©SÒA2ʧ%†21¤Ô€±Ôß8úèÔß8úê¦ëŽÙÚ\͆]PèÖ@\ \±““èåVNËlìÌA'; mX¸æ¦ùÇ×F¦ùÇ×UÉÆ¸\ŠYx•¹Á+÷ÅÎG`ëåK‡‹pÛ‡D‡ˆÛ;¿’‹*ê>Ž}b•€©¾qõÑ©¾qõÔ+K™¯îžÞÕ#iÈ44ºN€'ÉÇá/_]Oø»‹~)ÖîÐu7Î>º57Î>ºWÅÜ[ñH¾°?v¸ÖU±´‹dü¸ýÚæ¦ùÇ×F¦ùÇ×U¼?ŠÁÄdu‚h%UÎZ ÖP HÆÕÛÞ3ø|ë ÝêÅ+c Ü÷8]µ8SœÞX«±]:›ç]›ç]'”j´qþaŽSÄ¡T‘u)v âã9 òsµ@e¦¦ùÇ×F¦ùÇ×Pµ{Y§·¹ŽàD…ˆŠEnC=]ã×L¯Vš8UíÌ’°Xצ9l•pu®#šv –z›ç]›ç]+âþ-ø¤_X»GÅÜ[ñH¾°?v Ôß8úèÔß8úê?7|*Í®ï’ÚÞÝ $—AU{É›+¥½¶£ $ 0e#´±@µ7Î>º57Î>ºm]YÙ6WÚ•Ê4­Mó®«<"fûŸ½ñÞû|â¬qùF«|!໓ò¶šÜY]K%š4VW2ÅŠ]Uq•È;–¾Ê¦›ˆðuã0^˜¯V[`á#ˆ/E—ΦÀ8,sΩÞêáÄÖÍ<†™ôÇ«Åç•5\¼OÅz)¸RŽ«Gs§†ønx)Ô–ü‹›þ%Á8ŒÖòË ònç Q$‹%þv¦qx7áß–% édøEº¢È›Qˆ8åÕYª*…ñ¼BË¢ìíÜhêºKfÍ4^ð¸-"¶Ž Óq¬K®0IU öòì¤ZxCÂl èa‚ð'2Oœœî|õœ¢ þ/Y»´½GÕ”ílÌÔ¿…œ9Õ”Áw†>'ñ¨–œo…ZNÓ"_3° –‰wÎ;1ÙööÕ r…ñŠÉY$YOîfŽøt2™ÆO^+î7m\³ÕÈy¶¦—ŒpU¿[Ño}ÓÌ óÛ>³²¨h©uÍ}ì½D¾IÉšá k¾›¡½È:´tcIoŽÚfã‹p›™ä•—ˆ)“•c\€ïêª22;Q 6v;¶¡?ŠÔ¨’œS·2ºŸÃÔYjj¿ÑcÅŸÁþ3ÄVúæ>$&~M@A'—ùIââr Æqú²ju·…¼2ÖÕà†ÖéRW/7É)ér0Cg« º…dèÅ.¶«ö¯_ì:²—7èkì¼,à|:S%§ ’':‰eŒäêÆzúôUNÿò5§â·«þ5‚¢Ž¶«ö¯_ì}[O›ô73ÿê ¬öòEÐ]&µ+©#ÙÈöUE§„<.Õ¤‘û™B$XìeÎk;ŠB j^ÃöÓ_«o¥z‹«is~†–_8\Ï#2qÒhÔ x§;vÏ#Ú*OÝwú¿ÕÉâº.¶«ö¯_ì:²—7è]§ðr)‘ðÉ‘†7X±Èc·³o=*׋p '/mÃî"c̬{óÛÛ½QÑG[Õä½±ue>oÐÕØø[Áøt¦â+ “9 ¦<± ÚˆØöãÏ€;*ÀêM™8Óç³£þ5ƒ® <`óÑÖµ8Åz‡VÓæÍ÷ÿ‘­¸ý_ñ¤Kÿ¨v²Âñüé5)]KÈÏXÉÅ`ôcÉfÚ\qO!Â'IŽxÛu¥NK×ûø}5«oÐÐÛøAÃ-¥iâć‰9'ÅrjD\VË^oÄ“ \(œ¶FÇÏæXb@LŽ\Žk6ïnB­8 ‹ñÄ ‚5Rd³âžleYKâug5–¯¼ÍS EEämÛÈÐ'icI#±»du ¬îàùUZÖ\0éø-Áù-[ÄcÊä3ËÎ|õiÃC|]ht‚>  <¼QÕê¥>G‹' ~\³©k·s\ÂÖÖÞñ—†]ÃÁÞv];äxÍ\ð=•b—v°Ì²'ƒÒ,‘¶T€¾)Êì@eUóƒ’i侨‹cÛc4`ù ·pÚ¹§¬ÆÌ{IöÒµŽµ`{³öRÊ1!ë <ÛÐ#PrFOiÞ»­zÉàŠ:DêuõÑÚ䢺<Žh¨Ç(®ÑŠåbŒS¢Š(¤‰å ^Ú]%üœüÓšqÜLV(®âŒT@å¥Vv ªI=@Ti 3„'’/ŒçÐ(!:‘‚¼™žKi k|GÎsüiî’8~öЇç6ý˜yÉ|ç.y3·£øSÔ§¥œþ…eÍŽ…‚1½!ùÒx«èÍ&K‚ãI%—æãJòÛ\6ìÀˆjü7ùc¯*½+¦ô²±¢áö1? ³fyÁhíq @<ƒ`W Œ_D5OƒŸ÷™>rþU3gľÃìãu‰OAîKxƒR漚;ø¤’ÝTtL2€7eÆýæ½u·xŒ+Âo4ç9ÞâCÔzµTÇáðëlÉqÌŸ÷™;:«ï¯Þçƒßt1E"ˆd É8lljLœSMËÂR!&¢45À=ÞšZ†ƒieÆSÑFrn¤;¯U¶Q;fàa;™ÿµv9®œ‹0[£nmåQ|÷+ap L¡ß¤_[\8>pàÿÿL¿½ÝQí¬aéïAyÆ.1þó'ÑÇùTÿÂî#6ê¤öÌi‹Y®z{ÃðLÿ´ré>÷ Ë„QSï4cýæCøCòªGÀ Õwÿš“÷ª=ì÷Mz­¾ûÐSÆòhåDkUþH2Ѩ ØØÂmIÕ>zi€æAŸ•ʨ>ÚÇWF•‰é3¸ûÔDš™e5ÂÚ’mÓM¿J÷¯PxíÌ—1Ŧ2$!õç?#%5{‹™þþãüVûk¸®qþ3}´¬WÅÿž~,õ8_ðÃÁ ŬW+9yÊ)X£ME+M¢à&»¦»I-¾j>ÁM&öÎà ɤ䷒0;Mt.NXäû*ÒâB…ï<ɦ枀ºŒò™ôS3ÜM!1ÚŒåKϼ(ë;SÜ9õj˜LH$³éÉnyû;ke,5ÖzŽÝÜLµqt‚¸ø½:c•ÓûNô±ypäÇçq€}<ªx²‰Pk28S‚Ź€ymœÑÈr®Éc‘–Ø!ç¶aç= ³H%ÊÌÆñ•¡«JÄ~c"Š«˜ÍÂd ÖýjwÇœcnþãVQȒƲFÚ‘†A¬õhº}¥ª|MØ|L+ÇMù4SÞ(èÓ©qݵ*Š«3æh²ѯk~‘£AúFö{©tQ™ŠÈF—ŸÖ(Ĩ}¥ÑFf;ÌŸ1KøQ©¾Œú¥× *ó;öuÓNüÄêíFŒý•ÝkÃcó =½Äê]P$cœ’O,ÑM›†ùÎt§ s>Š4(hÇMÙØ€ d `•äÔµ‚η2°æ±òìv™®™—RÀJŽåý4YVI¤èSðKz–‰Y»•Ju¼žUê)îJ©XôÆ;#ý­Ìû)”†âe: TëÒ¯¤ŸÚið"€aWS|ùÇØ£öÓRÜ<ã)“³$`w/!í¡]hŠãméÆýìÖÜ ³4Ǭ!ñ},v¥t‹ÄacŒKèè¥u×3tKÛ)Ǩ{«¡"Q…ÿ*C¡}\Í+±K-ÿ’YŸ$6¬Å±àŸ›¹>žtt•uŒž¢rÇÐ)Ã.5œ|ØÆ…÷Ÿe 9PB@yéý<é;G¤jЊŠ”~™ŽŸþ£z±àRã0#‡ñT_$õuÕN «N¯€°Ò0üö'Ä5vÿ4|Q ô’¦ÜåwbZY]ÿqþ3}´y›öWÅë^~,õXm(ÃÁ ÅÚ+) åÚáÀ; ÂÁyóê̳y;Óû+¡B÷ždÔ¬–âßa8fò¶ƒ+ ]¢“w *¹1F!Œáß™ì^ºŸYÛÉÌœBs³ ïã[04•J—| kɨÙq&Ú2`*ã@ 9õvävú»ªæÞÚi"Yem¶A¹'¹ŽdíÕT0·ˆ6ƒ<¹l~ß]hmø” ƒ ².ùß=ã;þ*ß()=J'F *¸ñdu-€Úr51>0*3ÌdެŽúT!£H‹nFCq¨çÅQó‡‹Ë ×'déÃ#|¡ êVÁØ‘¹QËbpIÁ®,ð¡c »ãÄ휹‚Ø#帬rƒ‹q3M)Fä>7f^Ù˜ùc:È …;väà÷ßsY~Ä>rmå?"í±ù¦´ÜFí&‰°ºpÒTÉq¿W3ÛÞkq÷ÂG*Û„¦ªAÓžÆÍÒ©š&Þ›–x –DAùGœƒI‡DFe]•¹íUrÊó¹wvf'¬ÕT¾9I©»%êtê|F vÙº0AÜ]ÅBáŽnøÚ9cz˜«$„\gÒ}UÌ©O$œyã;Å0; šN¬ù ·Ÿ«×S‡é ÜÉ žJ|f=Ê)Þ–+½FüçÃ?«¨]p)–!_,u}Ät²™ÐI3ˆbícŒþÓè§•mí‡ÉÆ |ùG>å÷ÒMq/É«´‡¬øÍëêôbœ±ÆOÂ$ÔãœqnGyä)9p)›—þä­Ü·yäÇ•#ujßÃ¥›R72écøÆsèêô×ZèF BKÖ#æ{ÛŸª’–óK²(ºÙŽi¤%x®Êʹ½ÅtéРò¶gõòŠeÄò“1Ï7Îã½=‹xBô­ó¤ñWÐ9šn[–aް9)ÙGrÛšhQWw‚Ìù°X"\ês+k!ÞÇaJéº?½éü=Ûôì¨è&´ÎG, ±û)Ñ«i’A«æ ÖÞ¡M«2SŠÞ´ÿ „6¥oœN[ÖiLùÑ­»q“RT寞VÔD~ÓIi 3;ŽÌè_P÷Ñw½ÇijPÿCFÃO üÝZ«zqP¨ûÙ?•)Ð=[šH‘”a1ìAŠHçCú:²ú¥oFB¤‚ïþ ={šŸÀŽàˆ‡ÜîÞIë;Õ}Ypí˜;Ÿý®ÃJõcâŠêЄiÉîíľ°7ƒ†Y•K}"Þ=$±Î455vgøPÚ´f ¬Ij]±Š]²†Ù£^Û+¬‚­2‚Q±¨¼JêÎ䘡âZŒ<€®­J@Ø‚=×°K]N ½´¿¹¸ny-ÔüC¤ËOVÞqRnlŒ÷I5„ŽIË8É8ïC4ö[Ü U†ÛȲI%âÈXi8 5¼vV•øŸ éýqþ3}´¼Sz§¸$oÓ6㾺UTdÈTùÛß^G“¯?zŒ7ø!àŽù›öR©¿ù%Ûó€öS_ímGž@¶ªÉ›‰fk—ß 5` &NXäû  ÉOü×T81=ƒê-m‡qÊ)=k±ôã죢­úf¡eÌzŠ¢‘Ñ'Zç¼æŽŠ?£_U0ÔéeØzë#vÚ/§c¥c·}k¨ä z+;Çá.ã‘O ñ—»®º_ šU9¢ŒBvRäE†é€Ð|`F0{9ÓæWfÈmÏõ×ßí¨@#5"2¥€9Çmu'M't8ÍZÅåè†=GÆa³œcÏ϶ôÒZv8ÈÆÛlyã·n|ªg—X$ ÿ\ºÇªž]ðÛ¨vî¬r̵mq©ˆÆ#o³†|ÝUQu+n*ûVãç#¯Úwþˆ¨±–RÜméìû9Õ´efrë-JR)p)šTˆ`30Q“¿ž‡\H5Ðé,gu2³Ñ-,#µ‰c‘Õ´(!ßÖÜ…<÷]éBDF|oKÙX›.1sh)Y¤v;¯ul-/8l° a‘g#›Ht…?š7õí^g†©NYž·:´«Ó«Óo¹ˆ\Ü"·|~cÒIûiñ¼CTŽfaÕÂŽö÷Re»i@Q–KŒ(îQûsK2îA žJÛ±îZÈß3KÍêò/Q©8€)Ñ *Ÿ1ªúO3K[Y]Îë'q«l÷/3N™àµÚÞ=-óß þÈ}µÉ-ĸPìí×å1£ÃAB/zjÝì{¥·¶8…±ørà·¡yM1%Ä’¾¢YŸ©˜äú;=÷ÅÑÇþöÀ7>‰gôõMx È¶!êÊ ¹ïn¯E=8Ë›Ež^ƒ s²Ä\‡sèçJÓ\±ùÓx£Ð£]0òÎ2¤ó GÓΙèûǧ?m4—ÞŽ¬þ§eÉd™. ©RŇRG {饙™ uªì=”Ó <åo0À÷RJNN¤d_Î\“ê5%Öä£JÕ!êáe_)€ï¦Õ]¼¢[Z°}”â…S÷¢¾p¤â‘f`Ö’»‡íåGÊJ¼äú©aÓ¬éüá¶œ\0ÊG˜Ô[·\k£cå9îgÀbUã00 >ääù&¢«1Å¡îoôš· 7ÓCÅV·G/òÑn§±¶™¸Ði"G!Dx¨;x¾z{ ¸ÿ‰]ÿÓýÊç þɲÿ–ý¤×±<ñ ¸ÿ‰]ÿÓýÊ: ø•ßý?Ü©R?Aqÿ»ÿ§û”tñ+¿ú¹R(¦~‚ãþ%wÿO÷(è.?âWôÿr¤QHýÇüJïþŸîQÐ\Ä®ÿéþåH¢€#ôñ+¿ú¹U||ÜCÃMíÄ©"Ȭ®tnÝJ5yT¾f¯|Ÿöd¦·2Jš¦¸%›3l:éÅE_$\O¾ÜŒßm( “ÈWŶñ]ïözœ2] <—ÉñG3ÏÌ)XÛÚ¸ î[Ê>Ï5*³·À¹!Çàõy«¬ªÞRƒÞ)GqƒHò“Ô{)Þûn:0<–eî4bAÖ­ßµ9EŸ²ÖG”Œ;·®««öuÒñ\*a€#Î(¼y˜bªøå˜šÏ¦UÌ‘oèë«.Œ$²÷1 ëV„b­£QÒ¨§± Ç<\Y†ÔW•p9Ï›²®xß‚Þ1ÈÓÈªŽ½n¬+SÏ[<%•—Ü:X¸)RI,ç ·g¯Ô)sÍ ã0úvõóª$žH÷FÁíÅ#Ìw玮ÊS¡™êU­™r—«%¦¬1%FrzùëÓN]£3•#Æß>~Ê©±ˆ´À‚®¯ Y4‡ÒvQן>6¬•¡rYJ*Nú"šk`s§p6¤AdŒÕԶꨀ½‹ŒòÁôó?Öi»[&wÆ–æqŒwÝ×TÊ·gS,“âWÏk… 9*"-äDìŒ:Á­Ű82jQÚpyçúôÕDðàF¬P§Vú2µš.è»á^ü†h’&Çßã]ÉóóÇ¢­c¸’ñôÄ 3ï„ñµzzë±’qè©¶f÷‚³º >ùp§ª³ÕÁFwtôgCŽÈÿ‘]ó6ëÃ’ï%ÒyôQá›ÓÔ+’_,Jc¶A zŒ{ÛÝU6üEx„=,/©:ãäTÿ_ù§Cåϲ¹R¥(;Ksµ}*Rœ®»¶ÎÍ‘œÁIÅØ(±ä dŸE8mg2é-€4[™s”)«l2Ì™Üòf€¿ {iô·QžŒI!ë1Æ[ÛKÉô8ÿU_fæžÅ/MìïàGTUÜ ûO:Xî‚9Én¿š¬çÛF•ëšfó&˜Ç°‹×v.žoéƒüè6a>V=MŠAž$Ùä[ó§º(3“1í—>ÓN,Œƒ1ÿÆ¡~Ê3FÖd[®ù":ÌhãšOÌŒšéŠW9ø g¶B«öštË/)df_œOÛKÅJ;"9*=åè0¶÷Ψ"ókgö ªÏ‚BËÅáf¹w 7Š*ù'¼Ô@*ǃÿ”‹¹¿ÒjÌ5VëÃÅ~ʪÑJ ¶Ùyòl¿å£ÿ@©5†ÿdÙËGþRkÙ`¢Š(¢Š(¢Š(¢Š(ª_ ¿³W¾Oû2UÕRøMýš½òÙ’šÜ•ï“ÿŒÿmwË|~ ý´Hyñå˜]8£J^G¥y¾özŒ6´aàŽâŒQEd4£5Ú(Ä8>OQý”ªé# ׊pܺKr;Å¥SÉmˆÄ³¸Š#È‘»wº‰Î0W“U,ÁTO *H¶ŽþÒÇ_>Š=ÛÓÔ=5Ǻ ƒ;gœîîÒ„)ƒpJjÝaQã·œç—y§gÄÉ:ò’ºì¯_Â(<)ŸU´$hŠX¶„Üì:Û¯f–¾Xí«ÿ . ]À¢$Ž5ŒéUß™ß'¬ì*™3`õ×£ÁIà ˆÑ §,Îÿ‘Kf%]Di<ÉÏU4m>Sm×±Q>é’Ï0|Œä¡ƒ¹ó×úD4n@ú6šAQò4,e.ÿ"h2üÄý/á]ÆÆ<ŸÉ#öâ¡ÚÞO9Þ8ð0IŒ³Sñ `>L®N[V000yyÅW*r‹³H_9GŸ£þ„êo¢g¾º)\—?e1%è´È"1%äOW/M qk}a{q¾µëôÑÐT{D—ÌSæKé!±çCî®+ªªÙ’õŽîÚ±y1#:3° ŸQóS‡‰¥É1Å(³‡|“÷Çü€§ÐMobÄEiY&i¡µ8š@ò|f>Š™À¤¹Ÿ‹DËn#€Ô]²çÅ8Øl*4pXXƲ—Ë7’‘RIßSøA¹“ŠÄ]¼1XcùG¬Ô°ª*´l¸­üx#-iÊIÝù|7û&ËþZ?ô “Q¸oöM—ü´è&½‰Í (¢€ (¢€ (¢€ (¢€ ¥ð›û5{äÿ³%]U/„ßÙ«ß'ý™)­Á™$ •éX$oßOŒ‡B?4ûèï“ÿŒÿm(©)€zÇQ¯%‹•ëÍw³ÓáU¨ÃÁ Ä©ê4|§ÍCçÎ?e,0o1Á®â²·n¼ÉóSôº”ù‰ú_œÅ 2Äç£7pËîýMKE–f°3“Ô§#ž33‘ œû2k¯;<}A¢€óùòwž¡æ§ø3T¯®HjΙ"³P-ÅÂõÑ<ß”i˜„×ó–ÌŒãËv i}üQÝN%º˜„²0†Þ#»õwÓI–fºNPÅj7õ¿½ÔÓVºó3¸¼öú§è…ôñÛ¶+©ù5Ééí4EèÚ{†hbÏŒï»9óvš8­c[›‚åIÄpƒ¼§³Ì)‰ây„Ó€ÌíìöÑ£ðõžÑÖ\_àBãÐüaj¢:3ʹwÏ<ŸÙYÈ ,ÁX¾vÆûó­Ë4VQ+Ü.©ßïpKv Ç^ên#tÌF¶“ c9Û»zéà*·´[…^ŽY`ïßÞYD´·@Ò—‘Ô7F™$uöü÷T›hRÎúL¾HÔJ`žXô]Q[NÈÅ\±,¸±ßúÀ«Xn˜0Éldœ+I=[újúêKDJ5S·'v[-Ò3c¤%KgWH ŽÝGÓM(Ð]„c(¾3& A' f¡t¥\X«ãcºêE´],ŠHŸdÉ·ì¬y-±oD–ãºô¸N †ãñp6ê¦Kƒ+—N ¨gϾsV£ƒ éÓ‡l9Y‰!û?¯ÛQ®xuÄ]ãh‰]//gXíåIÁ­J¿ŽZ&AáÊž“å:¹é¦ÙtŒ)\)!Û˜;SŠ¿"â9 d$@mƒµ6¦ç¤!ªÙ‚Ç °ÎG>{u`Öh»;3L&šÜ«‘@R@Pù‰\’NüûsQüSø+ƒ¨xËŒïVsÛK¤’¥rD¨ 8åçôSf1H08Ö6c|õyªÅ= ±FI],5¯ŒÀíŽÿM »°$Éœ¨'åNøý•0:@×±#——Q>Í©—‚R1¥ó¤¯Œ¹Ï«ì¦™j…Èo‚[Û¬7·úê¨ò ùŽ;êTж[*psÍN9Tyb`Çbz­Tì: (ÉØ÷§TȤhf^Îcúê®Ç!§®ï¶¤$%ʪ¡,FÀ&N{1ÌŸ}N¤FÜb'š úh–Q䑜סø+Äú Y¦uIßZhëbÉÇvõ‰·°šês0–+åMA{ñß[Ÿ¸MŸ xÕ|k-©ÜrAÎä+ySu)©}Y—¶g¬Òº‰wòl¿åãÿ@©5†ÿdÙËGþRkМð¢Š(¢Š(¢Š(¢Š(ª_ ¿³W¾Oû2UÕRøMýš½òÙ’šÜ˜ˆfIÿƶ¦cdŸ 雫~tçFO9ù¶exìb_1=x¿Ùê0Ïø!àŽ²†‡¨Žªi¥XŽ$e‡<é} u®¯Î9ûiáj:ò2Á ü2:üìÕ)ÇfY9(,ÍØeÌ@‰yò8É>Š¢†Ñ¾Tt÷?FËùÇ«¸Pe Û!NÍ!(ÿº=´Ò@ÌÁ!Ô ê]óë§tŒÎU+-4>?ƒ²;Í ’f ãÉaSÌ¢Ñ î‰|ˆ×Êù½ôj[RPi¹¹CÈóYóTsÒZYƒK+~FðªV¾äbî²PÑqb¤i.]^p¯Þá_%=çÏNCÑÁln.‰è£:BõÈÝ@Ws ®5o"0aÙç¨ÅÞêá'œ®"(Ôø±ÿi9-v‹ø¨ïÅŠYæ77|# ƒ”kØ*A‘,­MÜ‹­ó¢þ{û…"M*ÆŒy‘¸õIZúüÍÚÜ Éæ ¿g®„œå²÷bSJ)Q§»öبÑòÒÌÚçåÛ·ÍÝYî)GÄ¥ÀñYCË«ø{kG¡”ç¹F*£Ž[¬7VùaªD9LøÀug¿>ÊÕƒª½wDçB1ŠÐ«)³À'úþ»iè•”ø¾0òI<Å$n¹É¶òÜ{Å>»ä¶øÁ*£—QôWBSv±ª•4ÝΆm|dêñr»úêeËC1 6–#Q]Gm¹`ó¨ªt70È;X&–ªt‡hmY!O.¼æªr.•£ÐxgŒ@¿"òJ©â)š],¸>VØÏ?n:êY¶„B½†4Daj†6Î0œï×¾9mƒX+Y™\¡UlL D÷cúê«ûKù]"ùY0ϯR|˜r ×±ÓýoVF²ËfŽ#áòŒóA’xÍŒ ·=*İ`aÁΞó±ÈŸEPMT…£—L`öç;{7Å\ÉrF[£„lÎÚ•ž³û¢©.ñ*»I‘ñHëq¿1¶ÕŠv¾žÿštäáiã-,©°Ë7”?óšyü#r59cKhÝŒmëß=cÛ]xây•Hn“IÆwnª©JÍ3 z ^Æfdl¸*p=_"–æ9ÖŠîUÝWV¢ ÏVjªhH,Ü÷ÅthÔG.JÎÅ<±mž¾ª×ø,ñÜð’"3ÂÚ +¾9¶³sÄFjÃÁ[‡‡ˆ\Bªt ŽÒ?óVb“«AÛu©vƼM‡ÁâÈ"5È$ƒŽDó4l´j@Æ5j8Ì3N#6&ˆÔôŸÙSz42L P Ë;í®”ãÆïÄíIÓJí!ˆøl.§YaŒ»´€;yÔ8ì ¾¹ZFÑY¡ÙØå¦>`y¶ž’VâA^Th8Rœª± eü¦ß8¥7–u)Âá5ØÜÈ4¢ÉÏ:±:Ëg¯Ž‹þÌ2œ½´ Ë>k Ì¬óàE]Oß·*ƒJëÒ]ëMG!a#Ä@í¾6åO[\ÙÙÈÆ5ýóùrÔO›<€¥\\ñ GûLððèVuH}%RºìÆVï{þ üB^Á¸bê™Ý™±¥5e›ÌçNÛp™od’&±µê‰\ë~óÕöÓVQÜMÃì..fß73íŸ_ì©E8•Ó0¸»hsXb;™°W)ÔÙO^o$W)ßrØKtêŽ(׫4ŽÆ­®øš[Ú«ÊmR*ø«âžf¢Áàý©ÄŽ¿<ÃO)þ£om]YÁÐÈ¡X*€|HÐ*ò>ŸmQ…裈†­»¯ßä®SÒÇxoöMü´è&£pßì›/ùhÿÐ*M{Ò€¢Š(¢Š(¢Š(¢Š(ª_ ¿³W¾Oû2UÕRøMýš½òÙ’šÜ—˜I>#¦~G~u*¤˜œFQG7læ“lðD&fC#ôϳ(»õž¾áNK#MŽ•µÉ@Â/rûëÇã?Ï;®,ôzÒ•(Æ’¾‹W±Ó=¼tE$cýì» îÛ즋™_¥g2IóÛ|wBž1N–gGóÜã=8Îmâ ÃûéW-þUêôÖtÕ´Ëv»räqmÄ*^åº(ØåF2Íž 9Òd¸%LjE´G˜Õã¿yêîÜ´Ï]¥'Ê,K7õÙN¬ kŽ™ðÇ~…>®^š—g~"¨žõÝ—$"!«Á ÉUÀ}éÃ2CâÄ«=À翉óž³æ¤Ë,Ò¦"8O8£mÏç7])b#Ž'ŠaêÚ“Kr]ºŠßL}èk¡g”Í,Îò·68õÁ\ø We‘J ÔÎçÉìÜújK<0¶‚zyG÷q‡{rF7‡NŒ¦%ÙïT£)ï{ J6èè+þ†¤“¤‰ ´g¥¸9ËŽÅìzr8z8Õb| QŠq\…Ç=ˆ5}”?Eà¹2û¨mËKЧCµ9]¿z „0:B¥3¾Øª;˜êÚîä‘$Æfm`çIz·« ÅÅÒfø4GbÆcÞÜ…9mjÛ¬P¸ŽA>ü欄º.× :Õ35em.gãÄŒîÜÓ«äìI´wQ=¹´¹krœåO^žßE9¨²ã8ëÔ½Duzq쮃wZlΕ]\èPĆo%›“^ú\a ÌV £<ðyöRÙ •òX~#«¶^j$.G’Úº‡£¾©sÐ×£„4l‘Ju®G‚{¼õ5.H¬mJA‘XýÙ¨£YQ”\“†Ï=û+€D’,!YövT/}Ч5$‹ = bA¬çPü®ÓKR:fgpWè'—>ßÛM”Äë•GÁÁ9Ïþi×sn:V]N1¹aÝîªÛ¾œÌó(/M Óºç=g¯n¯ë9ˆúuN½'oÂÎÝt½".†ÒÈÀøÇ½”äi J_8Nú»OŸ²ª“9ÕÖƒRX™Ťܜ`ŒóoYªY­šèäÝÔ]þo]j!‚gÈbp QÑ׊f~uqt&w `t„ßáR§]'i3:wØÈ\Û`6Þ1ß™ðqY|(¶UÜ0qßµnƒ–Pü¥ÜÌÛcÆ5öøÇÕO[‹($ø?µ^®pƒ£ÈóŸ,ŠÓó«£”R½ÐSƒŒÔ‰˜Ž6Ó!Üþcè¨æ Ç2¢*Ÿ6ÏF»zÍH•:/öíaSýվŻñ¹§!IÂã‡põ…~–o(ú=æ¹pµ=M')î@ø÷'¤xt¨þúôçÈ6š³8AðŽ)0üÚ5ý•o IIÄ>pü°ñ}JO¶¬>B1ˆRXqÔ‘0¬b£“S­¸=¡Ö‡“®IlíáÎ[¦q¶”8P|íî¦ä–i×Iñcú4Ê/§¬û(kHšB!Œ.ŒÚqÝKSc0Æó0å$ÌUOrçNÕ5‘+ÄŒšrµW™òBRͦI¢ÀPR#ŽÖ=™ß?Ý)é'Ÿ¢»,‚o¿ÌÌÝJÃJŽååöÒžÚcy'ø: Õ¥Bã4Ó{6JY­­¢½BNžEÃHýYEôžf» gïqÀÊR®ÞÏÛB•䡿nzå&5ô(ÜÒ&™´•¤p‹ )ú*së¥fû$`ÒÖ”oÞÇc‹)$£^¢tGã·>Á\(²¶ê§çÌø>¥Þ–°j‡o‘‹S }cz@ˆ¹ÑÓœ‹¡?HÒ[Ýn)Íí9þÜÊ ¼ŽÚÚ1°ŠÎ94ݺÅvX/жú«1åR£™Âé€F‹Ú¾9ô³{©‹‡»¯Gn× ÛX¾Ÿ°{*Ø¿ø²8¨þ[/Š2Ô*qäÉ…aæ8Í)x@t ·Ãgäãfìå]Ž ¤|K}#?{‰røÇ/§ËY­¼êgUäó'˜\œwÑ)ÏKJäãV­5–œîùoêGnNá2¨rmŽþÑR€ÆÚq<§0Ÿm*Ù5Z‰¬ZÝÓð…ºËß«e:ÌT©¼›H$åd˜–Æü€ôURs½®?œÄkÚó°ÌÞÂ?ˆpsã õ`µ ­´²¥á°Á1ÂÌMO·€Üº‹4˜¨ŒI®Ý‹ÈTk’=IÊ6z·ßØ)Z«Kr·‹«'e+¿08\xÖ×2ÖúP{rk‘GefYbŽÙœ‘–óöR.ûÅÆ3×3êcÜ£öú©L £Ž9&8ι@ŒwàuT-,»ûýNSo´ÉMzúD™Ç,~Š Óeæëšu´FßJ€„÷ójbK‰ÕÒ'‘¢Ö|ˆ#ÆÛžc$Ôe*gqzt™\ŸIÜãÝB†…M0•í#VvJy–bc_ÚÇÑK°-utW‚8 o]íÌÔ©%ÿC$ȦRI€n1ìûsZ›ck ¼±$H¡C¼Ã¯¿í©b%ÑÁYjÈE«Ý Ž '·s¨ìÂ2\þÓVpÊeÏE8ç­€Çxæ=TärÙÅ’'˜óbã&“-Ť˜×,DŽGXÈî=UÍœúG|¯ßp§Y-‡HŸ­£O0RÄzvû)¶>\²·ù´ý˜¦ Ê'‘wšì·ßši¸•ºýöDO> G¬~ÚŠ¥Sþ+ÓÛ2N¯!Ù0Á#EÜØ ÀëÞºÑFpBé `ØŠÌ$hõ>þXØu |H¬2¬<ˆ5)gŽš™¥WS‡¦NDH<û7¸û(¡`§*ÇðXcÕÛè®ê®6—X¨ŠÓݺˆQ4í¡ÿi^æû C1•ûÛ•ü“¸©Nÿ EtÆCn§#É5«üŠv|WìQ•ä‰7û&ËþZ?ô “Q¸oöM—ü´è&¾„tŠ( Š( Š( Š( ©|&þÍ^ù?ìÉWUKá7öj÷ÉÿfJkpfv+‚±MJV>™üUñs¿YæiôÞ0ÁPÃG¿ÑšjÕÄ_xáNÌù‘ðÇŸP÷Òó%ÔÃK<“ò.£è^Šòĺyø³¹†º§Ž6v݋ŲxÑ@²¿>–Q¥}™¦äi.rÌ…N°ñGrŽ^Ú{£¿ûL៮(—SúNp+q"° €6çAË·ùŽÃÑY•øyã7éý ø3ƺ¸h{fcÜ1Ÿ],JQ~E:0?½› þ… j ydbPH¤î[ÚÇ?m%ⲉÁé$¸p|ˆßJç<½B¤’nßè'&¿É+w#…'¹”˜‰’CÊI±Ûý”àˆ£bò|Éâƒv>ï]r[¹Šiȱä@4KBZK$lâCm;4/¬éënГ’]••gè°b…`?$ž¾¯Fi¸.&eŒ<³öî[¹<½”°Ö‘r n§”éAé;ŸEO4Ä+H­üÛBwm¹¢Þýëú#7x,Ï›8ðFò·.wkoI; qgèÁ­Ç[;Ÿ>yz«‚Úá#ÔV ëéJú6÷ÒJZmþÓ²èEîë>Š.šÔ$õíÊï’)s,šá‡áŸ*RIô ~ÁR4¬d‹¹; Ñ[¤sæÀºfKÂXC$êÆz0|Øæ}•ØíÙšU6ð“Îl#óAÉõTšmv½ûðÜ~›E´ÈЬ¶ñ¨t“áÛôE »_]˜clíݤ~ÚLrYÛ0ð $9#QèÔ÷/3Εð™'&2òg80¤f O>xß×K-µH…Ô¿ûxìF{ #•’æö5‰¿ºUËwi]©q5˜¢jeä×/¸ÿ*þÚu-ŒQ³L¦Õˆ"fܧ'jˆËÃl“£‘М—+žxxÆ­O>_Q¨ãÙrü"H»»¸]#:‘•F¡Gí«K) á¬’N!Y1†‹Hf>¬Õ|\NRªBÂ'É'vÛš‘k>ŒÈ‘ªpI|/é.þºŒ©In¬Ynk³¼uf¡ø…ÇKgÃ-­ÄkŽž`©…>ng•C¾3V»¿–ëYÀéóäÿ‡kw/K¼ff9&2'°ûê@¾–mrËDWå[`ÁÜdzÈê¨Ô›¾ºÛ›! OQ»ˆ`ŽÜª¯A«ÅUµ|äWY'T1@2§v2»sî8¦Òw“Iéº`Ùô`l<厣~ª'¶µG#ͬlø-ÕȰyíœuUjœäì•ýþ¦XìJÙWh9!Éê';sý”×D÷ZaA–VÔÁаžg¸}™5Ë ;ž-bjVÒÔŒFÀêÕ̧öõÕ½•µÅ½¼eJ2”äÓK ¹nHöŠ…IÆ•ÕÖeï^>­eÀzˆCn¡¤Egç¸üÿÖI(SxHQó“ü?­©•bí¤\°ošÈõC£ª–{–P:ð£íÌ”§)^Rý™%U±Îœ à£õ×ÜzèvÀ$í¨Ž²J¥RIOá:®Ÿ³zdÛI —Rʃ´/‹çåüj]^òüjgœÉ-3>Ñ.GÏn^ŽßëzGF3©Éwí=]ê¸UÈȸrh_u ¤ŸLDSVZ'o?èË9 Ì{¯Z{«˜†OB6y’»ÒÊŠIš YOãQˆ¹wÕ"ö³FF}«cËWû3¹¾d¾†¡ôEpÅ܃ò¨öS}ýŸz<ŸfâœH!p*¸êf:½¦†œw³ÈIh9 $cز3}†¥pìü:="la·c·’zŽô mR¬†.—¹¾ÃW`ê/˜‚ï_²ÊRyÑÛ¥ø,ÄÄ=ôcU·“Žc<±ÎÅßoý+ouVäâqZ\¬7ÑÍ%”j 3ĺ(ñ€-ž¾}Y§øƒC}ðüc;Ú »„®­òXò·¯ r^.ûx§é[{¨Åßoý+ouYlè@=‹¾Þ)úVÞêLsm#·  ±:­¹E7Ãü¼á·)p"â³,@žê&7oçöʱ–;˸&·†ÉšW°¢xIëòùgj‡›­:³Å1ŒùVÞê­âŽeá…å7ä4nÑt¯œ˜Ÿ˜OÉÕé­)´â}‹'Μ}ò/ߪ^%àâYð9îä“ý©-¾S .Def$ÇИ2‚ÐÁºIXÌÙAâªïÖÆœ{Ù1àÆŸGòNM"Þ<,¯%ÌqFf}*WSú€4ð•Qz8aUë×0ÔÞ…ä=5ä1vù‰»qgj“‹§Û“²Ñl7="³ýâýã+üO®œW…N"V¸naæñyÀš/M<¼æ{¸#s݇ SÍm >.ç3È?»„e‡y ¥¥»~ý÷–ÊRJÓyW$&Yg¸ÐÒ" ¦0£ü£øÓ¯†ìÅ õ):˜ŽÀ¸¦ ÛZüœ¼u´g[w'oE%!º˜ž†ÝXëgvS;¿¬SËÇeïðF7K°²®oqós$üŒüép[ЙǮ˜éêM–âiµc2F}aê®ôV°O/NÀi)¨@<Šnn')Sa£MüHïÞÜϲ§_é_’¼Ñnë´ý £ÿµ]4/Õadsìûk*F$" ‡.O“Ÿ6Þ£°ÅØLµðfÇÁÛKòÜ#ˆ‰Í¾m~&FøÇn=`õÓ¾Ûð[‰"Œ^ϼl)€,ÙÒqø#9ì{óÁ¾%ÁnîÌ|3…Ig'@³[¬cF@cÝêóQá5ÿ ²¸OŒ8j^+E™08PvNÇs°ÏoeGÀªƒ…ø’^)Ò z¢7®œ€3»iÏn|õqÁaàÉÆ¦’Âℼr—‰õ*‘Ó6£‚áò<ÀŽÝêíøÇƒ0þÏÓˆâu_¨$P€oÌd0oÃ/,åã)|$ÛÜs‚LªéœòÂ3gÿ¯¶£³eîr¤ÊùÀï×µ;´ —n’FÒéœuTT™g Ñ)雘çKkxü­lÝ ¹9ý•åqZb'¯û;¿-:¸jj”²ìݸ®(“-Óè™Õbú(rªXÁþ»)¸Î¢WhèCø–Ý*'ßQÐù×>Ñ‘NÁ<2>"um#žª ’á˜jiäaŒçV>ÌWx`ñX¤%¶ §SOŠ{jü?1 7³_³CÁåƒf£„J á Ð)Óm¢•Øè_OqoQ¦î¸§„ðÜ\ n —1ÄZ¤9#$äç#ÌÖ ?Á¾8_ )’~ PhÓ¡waœç»´yê=Ç ðšK‹—°ã@¯&U[åB °Êq¶=9íú­¡ÍCÑñ e<52‡ÏŽ£N27 «~\š­¸l·²Ã)¾‰cq+ð1”ê$dïΪS†xDãý«Fp6F'Zœ’- ŒyúêÛ…Ásog¢ê^’Rìć,O Nøz­’Gx¤—°Ø<œ:$šåH+œÈÁÆk<¼[Âõ»1¿ƒð¼:T e6|c\±öyöÐq[{››ŽÎëà·99q àŽ°FG¦³éÂ|.KÂÉÇíÚ 0Hù^O23ëæqš–\ÿŽ]\•â|&;8º-ZÄÁ޼ÌO«Ï±ÆïxÕ¬ÉñU‚Ý(Œ³«56píÖI#¨sÎÇ´ãö÷%¸·‚ê‹cˆ)ב¾ÀmÏúÞ¹Æìø½ÕÄmÂïâ´uŒà»–'™L@õù…C.-áC¾—ð~$4ÃF¢Ë«#°Þ‘çÚÂÂãŒ?Xï-ã[}u\xÂ\GóMÎÞê 𬾙¸ìD’ÔP,G‹ÖßV6ÆþÞþI.o:hB¸Eéó‘˜dŒ…Ò ŽÃÏl7aÕçÞº·çIÿfJôóï ¿Ý[ó¤ÿ³%ÜlÉÆ\úXc¦}ˆóÒ°•ïQŸãIˆj’ãòͰÇm9Ñ'^O{^KÒÄNüÙëp‹ø!à†u[¬ŒÆ àœÿX¥|›y Ï?evX£Ò 0§$i®G“•öýµNhÚ÷eÙXÓB­“Ó°o3í]BŠAÖ¬Aäþ1¥’#8n‰g#ûi¢éÒ’Öï¸xõ5vŠåjšßqé¥y ¶  ¤î4ÛÆÄg¥•srï9 xÀ¨‘cÏS6O¨Ðq«\‰ SÆ?n Nï~F|>–š§IY/~#Né(=©#Œd‰JS³9b ±Qå`ä}¹õT™eV t±+ƒª<þÝÍ7* 9Rw2÷¬ÖŠm+q¹_p¸Ùƒê p}»Ô6‹.Å‚î Æ@>z¶d`0 ÓÍ@ÉÇ`=f˜xðB2È«‚9u÷sõVêušFIÓ*‚*€.q·›«9”šÕ1u8À>~îÊœ© Òè1Ú:þÊðtüBÙݵrî­J¢’i™Ü-©añ”+  ¶!íÏÑ×˫њŒ÷²Nº `u¤¶›—/²¡H¤ ºÈÂ=Ñi,¶Ò4Ú¡ ²ºã'?×m8ÒŠWD%«Ô˜‘J‰Ò¾‘;ã7,ã4Ü—@DQãF¦'n¾¾¿]2×biJšØŒríošœøDaUc†Ì3Õ¾äòåQtäÝä„ß‘"T;©±ýw m¥øXôÇ’½¼ÏQþºê^Y”ñ‰æßÍœšxC h4ž¼nO¯«aW*‰Éᆠ% ê¡Jƒ†$çв²qnÁQy’¤’wíåÕ¿ôiæh„FNJ2GŒp=G¿|TA»>*‘#xªØ'ÃÛPsu4z"_NÅÃjlr³ùŒéR4°óœíª8îV)$ÛîtrÆßÖò¬£šIXeºÉÎû矷omb©BÜ á\‰$eâtža#íωäõùJ6ê4•…™Iº= Ïò[Nqíª´™/HÎ[bC°À'©¶:vä=5É/SƒLƒ–¸uÓ8Õ×ÕÏ‚TdÞ‡JŽ+i%Ä„V1@+*³Œäàg»"‰%€fD´I$<¤EÎ{9€1é÷ÕZ\\ŸzU òHíäOõ×\3È%–5–€Ç~ß²«t{ t"‹†™¶xAòˆýr>Ê6%(~äçšHF_Y4ÄD˜Ô)™ˆQ•“*G£#ì¦ÝK?HÖ‘*€ùåçþ9¥vziï¼Ô ’%®ͤu«dúŽ}•Θ¿Þ®OÍÒ@ôâ£Gà4ÿ0G¯ßš"e1®`DÎà¾Ü÷Ø}šµ÷‚ؤ-¢‘\3Nø-º€1ß˶­89“ãHµ2‘†êÁòMTÍ bº¶wûsV<9‹B]ËìÛ“Á=CcWaìêÁÝn¸ ²µ)iÀØpx³ÃøJ‰À•­#`Äxʺa¶:¹ÓΫ/¸GžöôÜxCqi1—3™` ç nFp¬¸@·<#†gü6‘²4jЛî?—`óÕ?â>ÇsvœFÉܤ¤3e¤WbÍ’0vñµ÷öïí%}6‰ƒ…pB‰8ì׌*½À—~‘ l`ï¨('ÏŸ=_ð3`x{7Knf‘óŒ`»™ä6ñöób³–¼KÁER,¸s³"¤'H µvì=Õ¬²°µáÐt¬Qç:W·ûŠ­’Dn= ”ü&H¸„æÞeù`pQµ '=[àzq×Y8¸'ƒFù¥‡ÂyÑÌQæ!vŠº5x£vóòN|­õ¼v{Kn4—öæ{OJ€±`3ŽÀqX±Å|n&Ë' tºÒŒIC¹'eØõx»umÙ€Ga3Cà÷ ávw%—–þC€t² 9l?_i=´xMcÃ/.`øÇ‰ËdÆ6X™H@»ä°r0!¹Û8QË> ]ø3q|W‚Z´S|Ý(èò02vÏ’{»ŽáMß¶¶i•¡:ʱ:WZ‚6's޼C .À#&OºyäNŠ0Êo•†€ë¾<ìOœŽºµà©Á¡âr¥…Ö»—ŽBÑãQ3–êÈÇw}QÛq/¾ fD@èq©Dc}‰ÝHó1­7¶áÓ;q;[>†bóBż­¥m|‰º“ê¡ì¶¯8ð¦òÚx^8na‘ÃK•G’“¨W£Ö_Âoý½ÄÁ²”FÊ^ rØÇª$sÓJwPzÚ©¸§„œRÊâîx JÑHË[7`êÄ:üÕyÀFxrþi?ÖÔž7įxu¢ÜÚY›•Tg‘7ζϫ¯‘šÊ›ºLWvÑØTR^dpÑ3–\¦•]9 #´šï¸¿¸¸E›ƒè¤!¤uUÒ3ÙÌ÷Ô{^+Ån.BIÁÚÞ-—i5e±9Ïhäv¨Oá'[åµNîÝ”±r¹w·°'øÔr.AšW½Ùyy+[D N’IYUJ®ÈIÜŸ7_þiL°ü:ÄNÁ#g`çH;h'—xUsÅ8Ü0Z¼\(M#Gªh†F–ß 7«·9¤ž9Æ?ÿ]”áôŒOÌo¿“æ±Ut ´×zÎù—ìl~PÇ,n#A¾Þ|b¨z.3p°¥…•º±‘¤¹¸ˆ9CÒ0 ¨1€ß8§ìx¯¹».83[ÀìËÒtÅŠáCd#“§žsW=žÚ•:;¼Þ>ÿc”ÜŠ k¾.òGiÁ/Æ²ÝÆ¢“åxƒž ’Nq=-î8“\¤öÜ1Ű‘­šÚKdRv›V|Œu ÷«ÌžÏm=žÚ½Ê-·•¼¹”8œ(^i=ØX é @.ìúÊjëÀé£sÆ[‰Å^D¶Nø–IuíÀôVƒ'³ÛFOg¶«VSÏnpgdŠñòÇZp~4fÏI+”rJŒäh=y¥p”âsGâÜ.ÚÞstêDQ‚49Rví¯r{=´dö{jniÇ.Uþů2®Y”q9 ðå6‰3dØg4í§V2[¾«xƒqpÎÅYºL6›0Øñ#ÛÛÊsë­6Og¶ŒžÏmF Ózø†¼Ìå›ÞÏÃ'7|5e†FmœŽ]]•ç×¼_ÃÁ;ÁÃ$±ÈÀháŠSœo§öײdö{hÉìöÖšXˆÂMºiߟ´Ež'šø/Åü#ã°q?Hž(U E´Tµ \Æçzj©<:ð‡‡q6[ŽËÞ3m¤ìpp@Øíޱæ¯_ÉìöÑ“Ùí¢\?JêT¥um®Ò]âË%³×ÿßÇB»†F·öí<ÖHºˆ*:AE8åÚMOQ/+TchÅ+'³ÛFOg¶²»»ÖQ7•j‡¾1Jàr„å£'³ÛFOg¶•6ˆT©·R­Œr¤|_ø${rù1î§2{=´dö{h²¿‹­ÿ‹õCÝN|ƒå'ªŒžÏm=žÚvLàÃ9èG,y4ŸÆNM²çžtR²{=´dä s¥eÈwg¤c•ºŽä®üoò#~~-Uñ‹Þ#i7³øA*Ä%¼l®Äc ±Ïäö‘PGãBix=1ˆFJ˹lî9wzºÆôò.A™š#l­Î{Ò’Öq³ke$u”ª Þ;Äì,âøY˜âi¡ +kß~D(Ç=é¡Ç| Ž|gÉPTHG1’ymŒŽÐhȹ 34¢ÕTa` •߃.1ÐŒ~eWðŽ%/·šImÝ£”Ǥ¾¬áAÎp:ÉаÉìöÒʹ3‚®ß 6åâWVÝ@æ% ÁÓ‚6®dö{h¬’!uÉL²œò8#ì&Œ«]œ±¡±áÆ5W‚¬al¨èÆ[:°ûíËÅÎN¤Ýñ^3ewv‹ÈFñŒÃFØmG,FvòkÏ"áþ´’(¯Ì‘´}bºp3°êߟuj£³Ÿ¡Q-‡2¹D`Ýý¿×Pœ„ÚiNÅ/¯®w<K40‰ ³ã "Æþ HIëII^DÀØ“·`Î箨"°âi2—µ¿tÁÈèØoƒn*a³rßîT C’ÆÞ~ÿe XFLJÍ%Í”SÍjm¥q–ˆœ•ß—!U¼s‰q ã6\-¯”FYÐ!œàÛ€yÇWž²×œ?ˆ‹§¶×ý8RÊÛÓñŸÅ¯E¨H.i"ãÜjY:1༱¹Def˜iÉ`'HÆ$÷rë«~ u}yÃVn!h-n Þ0ǯϑçÆzë ñüZ÷ôZ‹øÏâ׿¢Ô4=2²þíî#þ ý•›ø¿Œþ-{ú-Wüxà­àlêÇ9íÅ XwЮðýÂ?ñ¤ÿ[QÄx…ýƒ@Ööâ[e·i$æ• Ø5sçŽtx?þáøÒ­ªÌy ùƒì¦÷ØÃ¸ºv[˵ӑ÷ÍYÁŽÇ9þXëoœ}tš ›:FçHÉô C±šY-ìÞI™íƒ±'›>Ú¥“x@Ð ƒ…|·DÚBBëÐIP?8iÎjÏ…Ì&Hô#¬ H ŠC:Ó sé©´ÀL3Ë$Aœ26HÆO H–š_‡@‚F UÉç€1öÓ”ÃÿhÛÿ‡'Ø)‹^ñK[[gáÖëpìǤ O“¿-ùÕ]Ÿ„|vòyTpcqËeŒ„þéŸ }c®´©÷˜û¿i®Ó¸Ši^wʳ(%rv=”Õ¤²È—‘˜™ä=ØêÕOT{/½Aþ<¿ëz@Tßñ¾5a;…á¦ê8Ž7F)…:pO<îÄur««k‰æ·W•'9ÊjÎ7§(¦SK(žÑFå!°y€Œqë£qK¾!mà ¼>!=ÇJF–íèÞŸŸýîÇücÿméäûÈüö  Æü ésñ3ƒ&Xø¬IÛ±´ŽG;ã5'‡ñ~-u4iuÂdµG –2êÓ‚0^çÑVôQp!­åÄ׎‹©nŽUÚF]Û)€0IÆ ;Žº¯â\_Zñ˜­x_Â`¦' W@:hÔX`voŽ»(ÿOüÐÿJTÇòÛ¾€3/Çü# Uà”‰úl†8ìÇ,ý£¾¯$¹œÛ@Úš6’h‘€<ƒH üÄÔŠwäAÿ5ýÔ öâî ©mS¥¸WPŠÙ#g–ý¦©Gð€Æª8ôº’dÂ–Û vs;“¶*êêÛá–wk1–‘`3Œ`þʨ_›áæ^%s,ÊÌÊÌÇ Fû ú» ÜD_E4;jVe©<¼ÔÌÓÉ®$˜âP%‘ ÌO¨ ~  xíìÂú] ãé¹?]!‘ø·ã\AÒχ»e…X%X¹,Ï, /Ÿzs‡ñ>'szRæÁ­íÌ!×$‡ÉÊŸF7åßšcø:xëÝÅ{5½ÇD±©±%>¬–öS<3Á©l^ ¥âw3̉‡ ìT’Á˜óÎøí©iaj^\Í*¤zde-4JHì2(>ÂiE™¦Ábp2{é3DÒ¬aqâÍœö+©>ÁI†Tœ¤Ñœ¤ˆ¬§È9"¢2âRÎêÙl¬¾nb-&œê €<½u_/„œnļÒ='Z™·C¨“ö9Ûí­)俚>Êå;û¡ãâ$¹é¶úVãÉÛ9Q¿›«ÕS8wâ×WÒGwÃZÖ:UÌ…µsß—-‡®­¨¢à&ØÝÉj.fdT|éU'P߯5K?ãq^Ë|I ŠH$Ó²äc¯$ã#–ÄUé$Œk”ÛWÑ 'Å™¨| ðŒÃ—Áçé.¬M€9g¨öÿæ®ø]ÝíÌr|2ÜÀภ’rº˜þ¡O§ª¥R“Ê=Ç쨶2OY>-á8xƒXJe !B.¡žY9?Ъéø=¼üNêko å´bdé"†@ [s¾åHaØ0yš±àÑç…ð¿–˜¶‰0¤"áwÁÁëëóÕ7oߌN8¤.·ƒ¤ËJdmCQ F ÀÈÀ;rrÀœ¸@|„4ÀøewžrƒqÌl|oq»¦­>.yx¥¼éÆšŽÚ8â‚9‹$ C²í’wßnºÍçÿN` oø˜Y·9üÏn­ö«¹Á¦ãV‰vò|=í"6ÌzEÑ ev7Yß~u2ÛŽYü/Ü[ÝñO‡’=7Qü™Œ‡R¸9æXc9ëªDà¶Âêi>ë.º>’6š5»+’«Ńgu ŸÎ›WƒCàå߯ý$¼5:qÒ;‘–P9€“çØæ³©'€/Ð9¸ŽhtƒÎYð†2Ú£—QÍ%°2U§‰`­¼/œÛüGYüQ…XÃsÛ9ì'¾¦q~ À±ŽN8Ö’¤8§1ëpùæ@öžÚ¨·oåÓ YÚÉrŒg%`ñtêÁ#O§ucƾåŘâÌlM ²3„ޱ•PÏŠ9díž[0¸«—ÂËÙ!è2µÏPeËg;dŒgÎEYpžomÄe¼¶½é•D°² ¤Ê_ÎÚrF<ç>lìÀ”Én¹”EÁfÉMI `óßAÇ^­â(Þ\pëeŠ@^iFÏŒÆØËÍz¶vÒw°"ú²þíî#þ }•¨¬‡„÷vëÁo¡2¯Jñºªƒ“$ý€ÒˆÞÄÿÜ#ÿOõµY!?0}•MÁ®>f½4N‘‡v`åÛnyöc~u3ã0™@ ÐûêOq-‰´‰eXbi$(Îɨ¿Côëúß\kûviŽÂ‡ß@Ép[Éj-á’9c1ÁÑ"é'JœRê<Üa.&Íp•!ëôÓ_CôëúßC&Ô[ˆî¯ímKYa,U[#:µ y'¨Ò>0‡é×ô¾œƒ‹¥¹”ÅpŠeP®tÀÎ?9õÐ’ï1÷~Ó]¨_@TL» n‡·¾Œ!úuýï¤2[¸Ž6‘¹($ú*=´‚ê;›¢ÀK¤"˜L`äÇ9Õì¦ÚúÝÔ«L…X`q매ã 1‡¥¸Vy !Ûnúb$QP¾0‡é×ô¾Œ!úuýï¤1ÛŸ„ÊËmg«¦ugña2va(SÐFbµHÉÉFe'·+¼Ý4W ²i)«AäH$sóU'ã4ã¦\ê,Nƒ×é¦"e ã~@ûèøÂ§_Ð>úC…Û| E0ŠyVUwM!Ò;ygÓRŸËnóPÏŒÚÃlg^‚,P‡`9t–â0–'¦]ÏÌ>úlH™P¯nîbžÞÚΖârJ^4ൠý=T|aÓ¯è}4×qü2 ¸¯Z)¡ ’1øXÏ<ö{h]àÉ3¥['Špâhœ$šùçHóžÞÚ•UðÞØµÙ’IdéÝ9œcÅ/ã~@ûè6£¢4‘ÜܤSŸÄé a2…”àõïŸU5ñŒ?N¿ }ô±ÅcFÍn@K6‡™$“Ï´“B1ü³I¨mÄ f$L ~a÷×>0‡é×ô¾Ç/ ŽìÁo%»NZUeE^tGnàG¦œH„2–1¢(4öÇU3Š’dD‰- í]pñ(c#Ì lg Go¾˜‰§’þjý•ʆxŒ™@ Ðöw×>0‡é×ô¾É´T/Œ!úuýï£ã~@ûèm ã~@ûèøÂ§_Ð>ú›]RoÖöƒñ„?N¿ }ô¨¯¢’â8ÕºBå€Ò‡oœùm@Øqk^bÓZçE¤R<•Tämž[s>Š’x½œÓǧ‡@æYYÚ,g1–È$xÀ²6Þ²·¶ÐñenÒ„h­”¹RHÆ’;wÆF<æ¦@Ö–g 'L0˅˳‹@X0I€ÆõkQÊõäV¥,Í5¡¡7ö†&—â|ª£9ÿdbtƒ‚q§<ǧÄmzy•¸p”†HÆU¥c¨Œ7!ry ‡=«#qàšo„-ÁYµ³é  çly·έ¹×V¦êžs•u2ÄÚK´z€ ŸFFÀÑ8Á[+¿0„¦ï[—øq‹Y (Qõ3)ˆèm$ Î1žXÏ022&ߊÛÊ!•xZ™Yó±ž@9íËžÕY7øT±<契â9ÆåtáB’I$àì64ÏâfÊ8ÞsmdI,‹‚ûíçP²¹alx•‘–¼.”‘¢,ÐéØ#²7\v`ÓÒ_Ã-¿ÂdàÏ$H‡ ÖlpªqâòìõÕ—ÑIwŽã? wl36G’@Ç1°Ûzž<"ÓÀ¤á‚hÝ5ü&AÌœ~yݹP¢ˆ·È›·øL¡x| ÑPÁFy:¶Å>8œq»J–‘ÒrÊ8ÎHÏy϶³Ñ^[ ‹¢e]—SíiÑ%ÓŽGÝQ±"ÞÚxâŬ…Þ5|"3 ús±Û°f±Üv5x§½ÄzæiØ[ôlÚb“'vΟj. ·½··.*í!V ‚>iÆ3¹ãjG(8*ÀŒ¬Ñô‡ÅÉz'€[ †p*IXnÙwÔ™syÄ­¬í …»\ré9_6Þ£¿ãdœ áNWÆ’å´à‘œí¶Þ¯Fôpxw*@жŒ£HògþZ÷v›ë_ÉNÖ+¹¨°¹’òÎ9äŽxÔ7Fò6@##Ó‚3Ør*VÿI'ëßXß»³ø”ßZþJ>îÏâS}kù)YŽèÙoô’~±½ôoô’~±½õû»?‰Mõ¯ä£îìþ%7Ö¿’‹0Ì–ÿI'ëßFÿI'ëßXß»³ø”ßZþJ>îÏâS}kù(³ ÈÙoô’~±½ôoô’~±½õû»?‰Mõ¯ä£îìþ%7Ö¿’‹0Ì–ÿI'ëßFÿI'ëßXß»³ø”ßZþJ>îÏâS}kù(³ ÈÙoô’~±½ôoô’~±½õû»?‰Mõ¯ä£îìþ%7Ö¿’‹0Ì–ÿI'ëßFÿI'ëßXß»³ø”ßZþJ>îÏâS}kù(³ ÈÙoô’~±½ôoô’~±½õû»?‰Mõ¯ä£îìþ%7Ö¿’‹0Ì–ÿI'ëßFÿI'ëßXß»³ø”ßZþJ>îÏâS}kù(³ ÈÙoô’~±½ôoô’~±½õû»?‰Mõ¯ä£îìþ%7Ö¿’‹0Ì–ÿI'ëßFÿI'ëßXß»³ø”ßZþJ>îÏâS}kù(³ ÈÙoô’~±½ôoô’~±½õû»?‰Mõ¯ä£îìþ%7Ö¿’‹0Ì–ÿI'ëßFÿI'ëßXß»³ø”ßZþJ>îÏâS}kù(³ ÈÙoô’~±½ôoô’~±½õû»?‰Mõ¯ä£îìþ%7Ö¿’‹0Ì–ÿI'ëßFÿI'ëßXß»³ø”ßZþJ>îÏâS}kù(³ ÈÙoô’~±½ôoô’~±½õû»?‰Mõ¯ä£îìþ%7Ö¿’‹0Ì–ÿI'ëßFÿI'ëßXß»³ø”ßZþJ>îÏâS}kù(³ ÈÙoô’~±½õÍþ’OÖ7¾±ßwgñ)¾µü”}ݟĦú×òQf‘²ßé$ýc{èßé$ýc{ë÷v›ë_ÉGÝÙüJo­%a™-þ’OÖ7¾þ’OÖ7¾±¿wgñ)¾µü”}ݟĦú×òR³dl·úI?XÞú7úI?XÞúÆýݟĦú×òQ÷v›ë_ÉNÌY‘²ßé$ýc{ê'¹¾´àWsðøÚ{´‰š(É-©€Û¿º³wgñ)¾µü•ÃáÈnv3û¯ä§$›WÑ ¸Ï„ò$ÒÙÝßÜÛÛY‰æ’Ke€³Þ*#FI Œs¤Üñ  ¹¼²–âKx%AÒÛä”0\ŽŒ®X+21š÷p?—ë_É\û¸ÿðKõ¯ä­ÿ9Oÿ‰zEy_2ãÁûþ)s{ÄÓŠO:O ì‰mðb‘¤`á\H|½CÏRü"vûŸ¼ÛxùgÏYÏ»÷ ~µü•YÄ<3{ŽsÙ±  ™úñù½ÞªÉVJ¤ó%biÙXÿÙfox-1.6.49/doc/screenshots/replacedialog.png0000644000175000017500000001004011637250333015734 00000000000000‰PNG  IHDR€Õ^ó'OçIDATxœíÝAhÇÀñï… $ŹöP“†6m°N ¨åZ¡CÁ' ƒ°n%F‚âbá ¦…‚µ ‚VC)B¥7ÛÜä$›'8‡\“C|ë-lÕ;/¿6§l+¼,"ß¿˜fºïiý¥üi2™¾”•¢0®Ó奸Î×õCý3=îik8‘¯Ì4Ó}Mox)ú¼?jAÀ´N—W_ùº¾bù.˜ï´Íô* }xsv^~T±Ч÷Ž»d~_ê’©›¯èéú:Mò­ÊÓ´L“2Cû¯È©. ­í]û pUÔ† ïƒ«ZƒjšÿÁq»Zò^QLß+jž-]Ï×%ÏÕR¯§»– ÍÚôª<9Eešé¾§õ—²ZÓ—òþdb\¶î½Zï}­Q¶­óþdrâsÊéªXº°¢<€ìÜÜ›N[¯Œ2E€L SÈ2E€L SÈ2E€L SÈ2eý§ð¹˜[8ñþð`ðÏoò™ª¼C—ÀødLoÓyH1— @zè*1õ*³¥©÷úüª|ôt›&yš–€²¬Ïö+»TÊGÜúûª4ŸË–Ëê3OyË:ˆÈ‰FRïº^›ôrZ³ž'?“ì€RudmC €”e\ºFléMĈAà|5ò 1Èú @ÖçÙÒëÒêpMùø*{Už 0™ˆHQ…<<º#[Û»²ta1t™=Ù¹¹'—/]”­íݼϪTuÓp4 ` 4òÆŽA`È2E€L SÈ2•Ýe ·îÞ ]ðjõÚ9úø“ÆëeDDÖÖ? ]ð¢Ë=KY‘âñ£ÐE‘çŸk½êdr¶ÓGg mºo|tg3 ™"@¤úþß!Y€É™s§^Õø÷²ÅãGÓÁ`}B*7ú}¬ÄÆÖØ÷¸ "2äÿ"á 2Åê5¨ëݼ]  ¢ø¶õº< Ç£ ƒâ "Ru½¿ïKD9€ˆØù>î @dÊ}_7‡eôÀñ081Q~Ÿwg=ÀÃßĬïÇBd}9Ëú bÀ£ C< b`‡ûrtÿóÐÅ€Aÿ\–]X½v%t ½€>ÿ‡e×hÙæ™0F\™êå dŸÀM1SA†5È€jÜÕüÍ7N­3¿¸$""·÷v*óøÑû€©ñõÅN½Ö76ä»ï¾›|è× cåÆßäÕ_Í7deyYæ—äöÞAz4ØU@U¿¢‚ =üJDDþ)³s 'ÿó÷ìO»ƒÔY€ÊKåç·œý FÏÎ-Dwö¢—É6 /ÙÝ \fê®cƒ8ÆmÐMOcö#õ£† ‘ï£þ¦ô³½UB¥W5°¶<º¤•ËQ÷¾\^ÓruÛ`\²?¨âÚ¸šÒÚ¬ãšÖ… ê>w¬gCþ¯×ûªŽZËB54]î7pYÖw~¦u\ƒOÓÏ¥ñÆ­÷3€Ãƒ}™_\’õÚ«€DD>ýò¹º¶6½!¬o¦n۵ͣχêÀ`ÏZY^ž^ d;²üôËodeyYfffú(V-ÓÑt×£`[_»kyÚ|]7\ rÀí½™™™‘•åeùôËoŒËèÿúÆF”G¿å2ù.cU~UiåFŸ ÀÅ`Ϻ½·#ó‹KrumMÖ76N­sumMfffäå—._=üB6oÜ˜Þ Š~ÕŒzoK¯êG/ç¡çªüë>»+—AÆm""EQòðèŽlmïÊÒ…Å명 òªçýèô‡ÀÍÍýR^yåùñK?t<  G)Ú¹¹'—/]”­íÝ0ÿ ªAWƒÆŠ~W0Nsé†"P0‰ò>Õ]¤ìhÜ´ÝÿV ZìA€†@ê¢ûŸÀz𸽷#Ü—Ï>ûL¾zøÅ4º‹þ—Ï~D9P¦‚Àƒ÷£é€ÔE7P¦ ü‰n  ,Æ;‚` ¢ðíÖÝ{¡‹^­^»"GÒx½$Æ|[[ÿ(tÀ‹.ÜY‘âñ£ÐE‘çŸk½êdr¶ÓGg mºo|tgG? è"Õ÷Uˆjüû ˆLßÿ}P!@Dl}A€«€ "CÞHËdŠ3,Ô#jP×»y» @@Eñmëuy$ŽGAÅD¤êzß—ˆr±5ò}Ü@€È”û¾n#@„T£ßçÁˆTß… @¦¸ ãQ!1°Ãƒ}9ºÿyèbÀ .Ë.¬^»º…ì@›gnÀqdŠ™"@¦)d*»«€lÊwâ½õæëJÒ±o_Œ¨s?šÞ%»zí Wû9Ê>¨kmý#czê?Ú±o_Œ¨sÿluYò¦ªenݽ7ݱŠÇN¤MΜ‘ú£ ÛïékGœ[pÎÛ×öÅþ£*!Ë›â>ÕÕPûH¹>Mªîð7Õ«r‡úøøÜ¬€bÚ±ŠÇœëSéº}13ýbZcß§t)—5†}%¤lÕ‘šþCœ97=J9ÿ‹ŸÊÑÇŸÈù7^kõ¦#}ÞìÜÂôeZ®œ¦¦«þg¨bÚ¾²6Û§—ÉV6×í)¯W·¬)OÓ×ô#¯+—ky«ôUçårÙæU}Më¹É|Óûº24©×!5ýMš–Ñÿ–ç›Þ·ùmøÂÀ1½áŸœ9çtºYçð`ÿD#e›vM+ç7´rëÒ]¶µé²]ÊìZFßeð©jŸ*¿÷‘æZG¦|š–!´®ûe›íi[_¾‚Àƒª¾EõƒÕç•§ëÄô#QôíÒçµÍ«/®yÇVÇmö)Ó{×´¦ëÄø]»¨Úg»ü&Ë wÕÁš>¿î3«êßG +?šž4=úo»SÇzšïz±åWÕ†þn†h(›ÖKU}¥¢®áñ½‡Üײ êR<½»§ÜðÝÿ\οñZ§kŠ›t3ødÚ¾2ÛןK]=Û¾6eªÎ}u£¸œ-Øê%¶îºü&]Žø]º†ÙëLWfø¸BÆvZØ&Ÿ.úؾ¡vԪϱէkÙ|/§ µOµý^\ò}V[>¿ÜèûÃc Àƒ·Þ|}úbÊGdê* —#µªþZ›ªÅ”Vþ<—È×ö™ÊÜ$˜ÕmOÛemå¨j mõ\·Ž«û”ZÆ¥›¦j»tu©»!øØWÊë•ókÒÈ× Û²¾Æ&"RE!îÈÖö®,]XìœiŠÊ—åÅÖ-ÒUÛ7ÆnŸ†Þ§Æú}ܺ{¯ÑÝÓ1vkÆdçæž\¾tQ¶¶wó>Ð ¹ÃÔukô¡Íö¹™À¬}ªjàv¬|ü׺£å1×_@©ìl¦K c>½ÏAŽuî#æXo.h„R¼ønÐW@¦)dŠ™"@¦)dŠ™"@¦)dŠ™êô0¸[wïù* ¥&ÿ/A×)øxN7 ›¶Ìîø¯;.Æ SÈ2E€L SÈ2E€L Sîöíü¯…. “ÉY9<Ø?1/…2êb+ojRØRCúWרDDây¼DÕƒîR(£.–ò¦&…} 5Ô©]ÊIdŠ™}˜[]„©˜Ê£16¸1– @ž¢ö%æ†vvn¡Õˆ}lÊur›b«SÓþç£|!·ÓöÙúüÐßÃë½O£ 17þJê;”©ü©o“ocªUö¶aLõÞ·Ñ€%ÕÓVnÓÏ”¦7&MÖ«KKMÛúqÉ£KÚØQïOŒ*¤Ôø+©:åíªz_Õ…àš–š¶õ㚇ÏzÔÓS9 °I©Þ‡0šbã¯Ä°#øV·=®Û›r½t#qYÖw~cA½»MÐOÝRûNÒVßGJßqùh¯ÌǶ´Í£ézÔ»Ÿ”ÑÝ[WI©¬:[ úˆ?µ`_¥¼-¾·-—zl*÷zÕ€’™@ª¿bªãòQVùŠ—£FÓz.i©©Û—«Qªê8—zlŠz?i”@$î ÃïCÓ^ýJ—åš|fluj*O“íl›‡kWG×AxÛç„þÆRïCm‰3Ķ4åRŸ©ocHª~ûº£uÌêöMêï´Q‘¸¾ô˜ÊÒÖ¶!f©_guÖÜèÔÑ…‘c½ SÑuuù÷fCI¡ŒºÔÊ›êÔ?êtxQ€Éälè"ÔJ¡ŒºÔÊ›êÔ?ê4Œ¨@ }p)”Q—ZyS@úG†ÁdŠ™"@¦)dŠ™"@¦)dêÔÀ;7÷B”0°‰ˆEQxËpåÝwdóÏõ–ÀÛºòî;OÎþõ¿xËXDäáѯùü¶ÕŒ@¦)dj""Ååå·C—0°ÿyŸ5fž,IEND®B`‚fox-1.6.49/doc/screenshots/printdialog.png0000644000175000017500000002340411637250333015465 00000000000000‰PNG  IHDRÛü±’ígAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœíÝ/xÛJºÇñÙûpA€Áƒ€€‚,0¸ °0°°Ðà€À€…,(0XP° PÀà‚É™NæŸF²Fz%}?OŸ>ЬQìŸÇ£±^uó`lï×êoJ©úT}$°hŸv×û?îÞèŽÕý¨PoìöûÛ7ýu«ƒ~ÿ÷ß{Ü,ÌÀîßú3ß8?í)”?í®õÄþ￯{Ù"–gçõ§í߬—O/Óvzƒö–Ïß  ”úö÷ßÿá…òÿ|þY?ýTO?ëÇc­ÿ<>ÿ·zþïñùgõü³züOõüŸêñxxÕJ©º®ë“ªëZÔûß6ö£¿]\Õ§ZýõèËÿz­×O÷ƒR÷JÕL0Ÿþ{yBF~ôÿ}}³úúf•X q;±‡Ì–u”7îEÈYeBòDÐËX‹—ßýí×ýmýô³>Õ+¥ê“RJ©S­Ôêýÿ¾$ûÏã¡>Õë‹+ýãñß*µz‰à“RoT}ªWjµ¿½ÕýÈû¿ÿþ[dß@§¿²/8ÇLûþ£Î|ãëëö¯¿ÇÄ~퇂[Òj¥ì^‹ýþö×X‹WËÕÏ&d_žn§çŸÇÃoë­RJÿ¯U‡?k¥Ôéeù•Ru­”RϧggÇ@7æÉóùT+¥¾„2Ô^¬~ý¨^þó©ÖÓ_Þ¬‚Û î11¿öÉì"ãw¢BýÈj¥^:ÔJ½´‘ëSýóǽ½PuøSYÚmê•zõ¼¼b‚‰¦‰˜Ï§ZÿS¡Õ!ËÁnùhöøÙëkv"8±‹+&˜hš ôZ<þ¬VJ÷»Q»¶Æ±U‡?íGugE­^º/îþõÍôZ¼Wªú«?› &b¶tÞù&²23FcÅV÷óÚYWÈYeBò„ßkJäÿTJ5ıV=üi.å­ìÞd¥î¾ýJä· hçæT+¥n"‰ì?jÏqM<”³ÇàêéÃr¬B‰kñר‰çºV§º®Åñáá[õðMOo.YRýeQ«š¯eC bòy¥Vv°žÖ½Æ‡‡ozÎáþ›Rêðý›îÜPVÇ…ž¶ýÎM¶B ä„V d™¯ "ä¬2!y"(Ðkñ³ºWo^uA$ú‹Õë. }1°>Õ~¿7½+¥~*õ›RŠ &âÆ—S­”ú»^ç=jÏqMÿØ¸ÇÆ-kÁCÍù•™XòÄÛœ~dÕ;‘¶`"¿Ü×M-lï{ß"ÌÔ¯DÞïo•ºíÿüØÿ6`úL·Äî¯[³½j#_üǰÇKw{÷ÍL¿³‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ Å›æEZÚ~po¿yø~\ÆŸŸ³€³ýÄFR¯Ûx0…¶ŽþY3ñ´ýðqûᣓV燗‰BãÝ65î@•Kd‡iEÚ-\ó£=¡¬VpcÚêÍbÎÆí]Û3íûÇà´yó·XØß,8Z$òúbœüqÌ܂ߡaæÛÙÚ-¼œX feÎöƒiµ…àÂÁÍÚkÅN,€Øïo¯.·™ ·k#K£wl «PCR•o6šÍY¸÷–Æíô[p€¦\S¦Ö½™a  >°³^·L;@¬iß—ü÷Oó6P?ò`bï:U;\Œõ@ï¤GN‡`¬åkÅ­ãóC–˜Ð¡‰lÚ¤‰$u¢6ØAëµhܾ$ΈŽàzé$°XSJÕ§úXÝï÷·×ÿ‘Xt}±nuÑ.'6oï¾ív×ûýíþ;¡mdX ¤ ‘@ ¤ ‘@ ¤ ‘@ ¤ ‘@ ¤ ‘@Šâwã¼8˜iî‰ Ygñ盯fΗ›OŠ\€ˆR‰|ÿpÐY\?ýªÂ·z·VJ=?VÁÒ|þ†ƒ7>ÎÏ_Ä*ÛkaDZþ±ªªô*v©PÿþÅD-€+’ȺlâX7õ›Í¦ªªõÅ:³‚µióK©úµ¢ÍZ~&ç~óÁ-ÀˆŠµÐqlOt«œ¬ë¡¼ðõÓ™RLWù4ØV‘Ú£ç4lø€ÑOäúéh÷Z4Š“î|Áæ0) @ "‰|u¹ýróiõn­SØÎâVȽ |LEÙ~dgdEã@‹9McS:¸$ÝÊ$(Õkqu¹}~¬Ôë^_¬•REȺëÙ¾âçôD€Xû‘uòê¶çÄäô /Ç%Æ,ûÛÌ™£(~e¯ß1 ^3&nô[A `Ƹ'HA"€$2HA"€$2HA"€$2HÑóxd»Î)™v»ëôW·ì¯Ú"áíûM¿_’èÿ"v©SÒd&È7hœ¨ Ð"ßÙ˼2€^Ô§:sÉ·ï7Eg𨷍å4iéT”+{ ‰ RÐk ;¿þÎ7h´kÏ;uè§ŽDp.ˆvŸw=$20‰Š‘C&—i·:ö‘øËØë&–´÷â¬î¯›)ýÈÀ|Äg”$2QhBÓÏM»$fã’z"XÚ-¶nbƒ2ÑFfÅoKÖ±ë@c¶:¶Î¿ˆÎ}ù dE"óãgâ{Ìœ™#˜à™[ ¾™šôòC™DfH‡²ü :ç°cï ¦Cø9¡˜'áÑ£%:4LöÃêfÝXëØÞxlz$2€²]Î`‰ÌN³˜³)]z-,Hfr" ‡2× Ž¸ÈïÎŽ­5zdÓF)Hd‚^ `&w§ÍÑûd"‘Éã>ô³Ñ"¾ßUUÕûfÄ”hoN®Ñ=='ònwÝï F÷XzNdª%3@'ïXkRÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ Rô\‹Úwÿp0ÓW—ÛÒ»€é*˜È:‹?ß|5s¾Ü|Rä2D”Jäû‡ƒÎâúéhf®Þ­•RÏÕñÇÑ_eûácpS‡ïwú¡Ã÷»"Ç 2”íµ°ãXÿXUUzbÀbIdÝ@vâXÛl6UU­/ÖÁf²#Ø4¶›Òæ!Ñf`bc-LòêðutÀkÑ– ÙV ^ZÇf@\"çd+Mc³T$‘¯.·_n>­Þ­ý®äüNäZÄf©l?²3²¢q E+ÛMcÙž€‰*Õkqu¹}~¬Ôë^_¬•Rç4õØän}Í \Á~d¼:…í91~¼š9öCÁ&šÌ@ñ+{™-â`Ÿ9 `Q¤Œµ |`b߀#‘@ ¤ ‘@ ¤ ‘@ ¤èy<²]ç€L»Ýuú«[öWm‘ðöý¦ßïRôÿ »Ô)i2äÌ4.A‰h‘ïìñ<è€~d‚D)HdBʽßL‘éÁVPŽÕëêr;Ê‘L‹”D0?»ÝµžØïoï„r£²‰l߇^7cí&­™¶Ëå™í‰Ìý]; €rìQtë‹õ~«”ººÜêF´™Ðtd›‡§íµb3§¥`?²‰B;Fƒ‚Õ›Lȶ]Ñ9{#ù‡ zb·»Ö­i;Río©8ÓÁµ›š¹½½4`ƒÑ1M(M·ˆ5Óƒaÿh0Mi¾÷‡ýþÖnçšÀµ7~u¹½ºÜšUüMMî{.r¹Ó4æz 0»ÙNX=¿1.MsØvüqÔ)¬û¦Gí÷€)ZV"k¦sÙï}Ð/§ÙoÉvެ郶¯:-ñÉmþ8ê&¹}³pbZŽ‚‰ì"03Lôç;Ã$òWt n„\ ;ü.`Ã$ol§/XO›áöZþ¦×ƒÓ”íµˆ¥dðQáØ‰ó7 sÁÍfº€Kšüµçg®Õ83½M –Ø  ({8šãêrë÷ Çú”ýÖqãZ3ÓÛ‰  géæ§À”Cb"—‰ `Än7Üû ¤è¿Lã˜#Ö çDžúðlJ©·ï7cÂBõœÈt3À'ݱРRÈ ‰ RÈ ‰ RÈ E»Ño 7€rZ$òÔË¥€p-y¢Õ¶`*èG)Hd‚D)Hd‚D)Hd‚D)Hd‚D)Hd‚D)Hd‚D)ÚÝ9ÇöÃGg•Æ‘É~ò´zÚèy¦aêJµ‘ßïô?ÊhÀgRµÃÓÆ¬LZÿmä˜`óǼí6NbIg&fÃiä&þî‰ç ÏL]‹D^_¬ƒó?Žë:/˜í‡ö+Ê~µ¤—´g憷ßßÚÅ zÚ˜‡ôÃy2ðü4Î+"­]9XØ)¸³VM'”cô )¸5*N ¬Ä˜ÿ´ÉסËóÃk[›´u¯Eæ ÉÞ·êt¶[7ÁSqJ¸ÿ@<0Qõ#Ǻùb‚ Ó”ö?u6ž?˜(ã‘cm5‰Ö æÁy·6ñ˜Ìn.ž?˜–Ù¿¨âOøKš?ubü¿râïî\¯Kl$6¨ÿ^‹ØÓÝÝØÂù313þ_9ñw>£b«ðüÁ$ŒÙkÑøÉeÌDæ³$؆ûÎ^)Œ¶xÎ`ÆDŒµ(ä ‘@ ¤ ‘@ ¤ ‘@Š‘Ç#XŽû‡Ã؇àÚí®sŠ' ¦x"ÛîB ,Ü盯cÂ/¿mT0‘uÛ€/7Ÿ¹ ,[ýT¶MZŸêœÅÞ¾ß=ŒnJ%òýÃAg±}öWïÖJ©çÇ*ø1Á¿ëP¬Iâ­íÁ2š&­±#B`ÿ‰VöÊžófX?sjî%êßYÞ¾!z瘖 ½Þ‹$²n ›8^½[ëÖ±Rj³ÙóKÿ:e üªö-=s÷ÌL0-&(Æ>,ÅG¿™,6$Ê>Ù­éôðLå/´(Î-³Ï¼ƒvépÛM„~·9îÚnpÄÛ­½ çéTþˆÎ%nô›}ÖL÷®ŠTM¥µ;K“¨LZèƒÀ_\à!©¼žÁòŸZŹ~:ês—yµtIžI¼OÂá×2×ïÖÎ{¶óþ\]yïúÎ6c«ûË«È+Ü_>§±ªí‰íwí||L/;†`ó(¸°¿ÇÒÁ§ó$ËÂÃ7¨H¯ÅÕåöËÍ's²ê§£‰ãªªÖëá‡dÛÅ4W!“ :ìºþ_ÖI ¿¬ª½dpþò‰þ±àòéŸm·ãs´é'|ðzé*ËýÃ!ýoìŒ*ÛF®ªj³ÙØ?ÝMþÇ £ÕÓ ßçLÎÖ:ìÑ~ïéEºZqÛ®ÂÑ_w2g*•ÈW—ÛçÇJ½Na=Ä¢hY7¯ˆã©Ëo&wܸÀçL0 ‡)M)ðldÒÉÓHfpl#ë䵺¥³8§9ø)¶LzfÎZ˜«©ü¹cOfÓ‰1•_d`Óý†Hñ+{Bîâkpñ„+ØLîÐpNÄVé–fÎösRÕ¿¤–ó"ÿ\õ•ìöµV ¯¬`ì ¿‹ƒ¸Ño…Hx~ 3»3ªm(;a6eÍÜõ9Ë'6‹°¶ÛñWtº8fŒŠí*¼ºÜ:¡,<ŽÕr“èJò;¬b=Wé%ýƒsM¬rÎò‰î¸Æíäo¤Õ*m» ‡ÌåÆ1µv(ËcÅëÌ›âIı"‘ÌÞTâXÑkŒEB¯«„c(AìPŠF$2€Y‘9Ð8‰ `8‡ïw¥¿»;é†?‰ ` »Ýõ؇ ‰ ` B¾/&µ¨@ jQ€«E}¾aö”íµðkQ7^f&Í^d~À2Id§µm³Ù´*#¬ÇãßHÛ)jÐá¶)‰ :‡HIg&´2Õ±NDÚí\s‡°üÆopkÁjcé%ýƒbÌM\";Mÿ6Œ½•iդͼdïµvæa¿¿û€É—È»ÎÜK«MXkgrZä+’Ȧµß•Ü¡µ}—îB¥˜bÝĉCЧ¢Ö€®ÊÞÓYQèûìv•„BÛOï—Ö1€^ˆ«EìáÕÍO¿N~­4§n÷\;•„:×Ú€FÒkQ'MÏI”kœ«Ôv&´"¥µÀZÑtD˜”±ƒ¾“’È2‘†DåS‚D)Hd‚D)Hd‚D)ýArî’š_— Ûw|Úà›DèQñ6òýÃÁü+½/Lš‰¶ü›ðÍò°dÔ¢†NK³m¹¬X‰/eݵqSþ1Ä ÊÄZèýVà ªE­µ}Ù$fªP‡—ÄÀì[MÙrnx’Y.+¸X°:♕·ì”Wy¿œm±3ƒ™Ùïo󛡲jQ*XGåéq ;õøQiÈ?¨ÓÜάø¥BI½«%h[dRP-êÄgFÿÑà*ù¨<=°Ò]U™±xf¿pÛŽé龃oc-Ò۾̨<=3ùE¹øKñdÀ9&6¹ÛÝâunÚ—Ñ«d¾¢œ‹ò8“9®ÇqΦb÷A5=+~­L£|&*OOBð†Ô9·¨Žåò;¾Zm*g±ÆŠ_@+¨EÝ»ü¹Z¬a¾¥òtßZÕîŠñÊ™nu Ý£ÕNMP-êœÏŒÁí÷ãaãçPZÇ )•Ⱥõúb]YÖët9Ö!`æûí‘MTÿ¢œ?‘8z-"¨µ–è¹óÎlµµÆt»–H¯E­ €4xŒNÊX‹Ñ£ åF'%‘% …Œkb߀#‘@ ¤ ‘@ ¤`¬$²«2ra,‰ Y(ψ%+žÈ4v¯CyÆØ·=óG—'¾®9@Æ¢ÇÉ¡5Äi[žQΣê4’§ÐÕ¢Îi46ÆmïàNyFýlÑ?&Ê3úüz‰Á’]þÝ_Û6Kíí÷ôã‡XeÇZøÆ']u)˜¡g>íÒÛ‡:Ží‰Îü;nÛýÆÛÆ6èl']§ñœç[ïÇÉÕ¢еÒí‘¶í…XÓÃÙ~l~ºÅ”è,}‹(':Û¾¯·jçÚ—âU…2±‰º¯®šj™ƒN¶Úiîl?ÝòWGgõÓÑîµh”8ç~݃¶O’XïY¦Î•܇(•°â9ØV‘²xž”~{'çÅàÏo|™ñ‚iË)ÏhgqågHì¥Ncgç?$—È¥kv_Hçw(Ó%Ý£ªª6›ýc/›µûacϦ%>Ï©óžÉÃ?ÆUäÊžiìøI¨E­¼Ž9uö5CsÁ—Ä9º•gÌûÔoægþíüªVuG?~HV¶\¨±“£è4§Dg_7mË3úg81ü Ñ Õy~z´CΕÀØœó“S*‘ucG½Naý2+Ú@¶/ĵ]Å™NoÜîàÞRªo£Šj‹7`ôBP-êœ&F°ù[&sSé­5>Új&æŠ7fôBJ-êÒWÞò_<´ƒÀç7Ö¢^^-´ƒµ”Dî )  jˆ€$2HA"€$2HA"€Œµxa×b·»2š{x”gÄ2‘È¿Ø%G·Øav”gÄ’‘ȯ”ÎAû;å oßošš£Îå;ÿá«‹ŠuÛKzï>¾GºX$òÐ;"öŸ ¬C-êrì‚2…n(HžÂ ‘Gvÿpàó¸Ö{yFÍŽTgf·ÂŒé²Šs6î—;Pˆzk1&ݦQܯ`Íæ¾ 9§7,À˜_ÿ)¶»ÂIl#Ð7€Æ>;ˆi)÷(qÎ)D á$&²6ݧ]ÎkÒoÊ=н©SˆÂÉMd[fŸš_ÚÃ^@e´[{‘ó)•ðõ9µ¨m:‘ƒ……¨!Û4YóûÔT¼epZz•(ÏH!jL‚ÜDv®s‘D ø¬·ØÆ™:—gt>3ù…cÕÚfLo¼\ƾŽÂÉMät½»‰ÒqÓhÉÁÝ{yÆÆ çÌOo<çJ`lNþó¯ ry®ø†HŽiÝЃ«mè˲YÎ+'»\î›( 0¢/“Lä¼®.·N(Ç“6Å'!’˜È9=hé99Ó¥5îËeâ€â[ÔãÒALÐHä‘Ç ‰½óÆP 1$ò –<Ð@#ù—®ûqE@‰üb·»û,‰übZ_0K$2Šãó‰DFYûýíØ‡L‰Œ²p ä#‘_&¼Û]Ó» , ‰üË盯cÂ/Œ“ˆD~¥tÚ7bOà‹$À2‘ÈCãŽõb¸ÓÐÈÈ_‰<&Ç„2mÚ½±¢Ô.‹5V²ƒøþáÀ(1ÓNd“wr è©øû„ÍoÊ¦È v,Üzûé\&|øæ™Èvòê©BšÏŠ^cqóLä˜Ñs™Æ–•È£{~¬r#¸e"‘‡Æ7DÄ,+‘å ÉÆî’/÷ ù§‘ó4óü†ˆ}MO‰|íùá»ä8 Í¤ìgn0…‡ŒæÆ}]]nMK™8ò‡0:o±Î šÄÂfÚ,&j Í$‘'J‡ò¼ã8v»»ÆþôVCó6¡ì/yg> •ýþ6ÿ5N"lÞq¬ ;5þâ±O9&p{ï’¢z×¶È$‰<´e¥èöÆ“ó}ô-áÝ‘ȃb q¾D±äk¶À9Hä_xy“ £ˆµµ¹¸iHäm»{PB¢-l_¯³‡Lø «¿ÞùüNggaâÒÈ/¨ú<®ÆÑŠÓ[ÈYÝ<¿!‚yøŠ0Ã5=̽˜²3F¤ ‘@ ¤ ‘@ ¤ ‘@ ¤ ‘@ ¤à;{¨Ã+ø.f€D†Põ©Î_xõfÅÝ51ôZ`&êSÍ=á0u´‘1õ©^½YÑRîñ‰“90³B(k­ú|bè ½˜‰Õ›•þ§¸¥}è mdÌÓ$Ô;Ňî>ð±cH´‘1O½|l‡FKy0$2µŠ|Z¦/h`ôZ`ÂVoT}êsƒ÷3}u¹ísÓ‚ÅâØï Êßæ2ÏäùHdLU,GºÑ òùæ«™óåæ“Z@š´:9½ó‹=“½ ‘1I½Ç±NúéøkïÖJ©çÇêøãè¯â„Ï¿öÕöª£½|¿W,ÛžF}•/±@ç3yþo4k¹$2¦§ß86ìÑ?VU•^żþ·>–º[4eêSÿç³Ã™„ÖîO±Û]—9  sD7ëLˆèþq³ÙTUµ¾XwAvÛÙiÕ:ÍjàΣÎb±-ô’þ%záí3ik{&O‚ý^¨¼7-õü™é9«÷®Å“z¿¿-t@¾ÞsäÕÆß­ÍD0YÒœî;7ÍëÙ©Û&¶[·›¢§ñLéÓ¨OBðý,±zþÌôŽü%ûÕ"‘é˜Çè¤åˆÓnJK¿†‡ï-Ôùs¾Ä©ˆ=û\ÞÌì°£Ò¤þM€ˆ¢9R?í^‹Fù¯Ûü8`دóÆ&0šÏ9 vKV5ùV;àO#ïODÊ‘«Ëí—›O¦›ÂÎâ¶Èçó‡Uô.ö9ãüÏΙ´uèD>ó$˜Vs¢‡¡íŽh8ó=LC"GúâŒ`xÀ9™Ûm]}ºì“›>Ǹg²±ulÈÜ`‡Õ;£Œ 09bBÙÉ‘ówÏ•z답RªUÙ\ 2?¦ó{?í-8[ó×Í?0Ã?QýöËw>“~|â$øKÚg2øWhœé/`Çzæ_ö|SJÕ§úXÝï÷·×ÿQh7X¬õÅz¿¿m{Yxûáã9· Z½Yu»c™ÎmÈΊ~yöbZÕéžÉ~¿i’óü¿½û¶Û]ï÷·û?îh#¿L+;$ãLvC?2HA~÷Î$20C­îœ 9Hd`nÌÛúTW÷߯>´@"³EKyrHd`ž¦~§àeb¬HQªœs/ÑyÜó…ð‰ T$‘»—(æÊ¾65ö±Ãé?‘–oæøsîä?Ì=ü! -e,J‹D¶¿¨nËùºdºÕœSy¡±Ý;< ¬Ã],bxßÅÒ´k# ;•®-b7™u(:%•s´îµ¸¶“Óû‘¸ó)E§LÝÄF¿{¥`úOd§DJ_÷ÛϬšÓUdô[ð~û‰;ðçÜŸ°{øÀXJ}CÄOÌôœ¶ËÀüL¬fŒ; ¡8†Ä™Hd”Å8q ‰Œ²'䣤 ‘@ ¤ ‘@ ¤ ‘@ ¤(>ùþá`¦š Ygñ盯fΗ›OŠ\€ˆR‰|ÿpÐY\?ýªÂ·z·VJ=?VÁÒ|þm”cR7‹-ÐáÞÊ9…V¹e3€•íµ°ãXÿXUUz»Jˆ_Þ´söµ]±±Ð*ô®H"ë²ÇÚf³©ªj}±Î©`­¬dtZ¬Î|¿p‰ þò‰æ­óP°”T¬n?š³/0¦1Ö"VÊ$o,CtB<óL%lgÅÄ£”Iܽ߂ma嵂í™ Ü\¥uÜ(ç*BéßÝ!‰KäX‘½á¤/“>ø¥¯"ôËI^zã¬ÏXIDAT³Gþ^Q‘D¾ºÜ~¹ù´z·ö»’[u"ù½ó}õã/]¨Ð§4²½+ÛF®ªj³ÙØ?Ý휖©{ݶ¯¾õÅ:8?ç]91âEO›™é%ƒ·«››ÆþGàÄ~Y,Ù~›ÿ%ŒR‰|u¹}~¬ÔëÖÏ×¢ d'LÏߎùQýõ"´ç¤—‡,ì|Žæ·@[áØÂΟ5gàM%¬àh[d²`Y'¯ÝjHgqNrp4EΘåœ'='gùÅÊl#¤Ç6 .ÜøW0MìØyp$eßGÅ™Š_٣˛'tøN¦^Åï5¶—9g/@+Ó 8mw¿‹Äè¹À€Þ‰ýÎÅ7§§Þoä¶êÇwV‰­eo“«(D†é‹oötââjæ6Ó ¤¿ùI £(z-@ ¤ ×C¿fŒ62HA"€$2HA-j‚ZÔ µ¨£ñ¤sAëÞ‡7ëߢñ–¾±UŒ‚ZÔd„üRv×0!»Ýu¿7S¢µnë'Q‹:ÿÀÌñ$fúÇи©t™Œ3c4Ø.öOÝÀÅ2ìÞ-`J¼.Š_ÙÓq¬'ü"O™b7Ùr Iä笳b·ãqjI¤ Lät§d–ÉHÅH?ûŃïm‰b%t~z}©Ouæ’oßošjOÜwö‚ma¹InÑNŒD#±í-lï‰M%n¾“¾¥ÿN³;*ï–îåúÙŠ'rýt´{-ɹáVº¹Ç{㊽ͮØæjˆZÔvÏ£u‡Ú±Ïþm7ÕjGgö;Ó Vö;{ÎÈŠkQ¶¯àÞƒÝ=Ö¶(ÇÙþðÅ2VïÖæòCìGó/g ÷ ¬T"ëZÔë‹ueY_¬K7Mðß¾ÓIlfú—¼ì‰XË4Ñî7l‹þjÛoü]ÆbzÀô?e]:f€ZÔ¹G’X7Qu¢Õ±5n!±£üƒLl'çäL—ÝNšë6\Pl•¶WG09‰Ï…E_Åï4tüq4ÿJï ³gbÑn,ç¬è,ïä©sÁÃYÆOgæ³×¶¹Öîý†‰±#rÄdÌ3ÀD5~ä-DÆ$9ßÍÔ!ă«Å 1|?ž¸oˆ voƒÝó›©C’¾ §G”vY…62ıûmK\@ 6{9þô/ÖW¹i#C®`wމ°v³W´/âéùv»ÛkᯔC"C¢Düå$cp™ØŠþ=c«Ë(Š^ ‚D)èµ€_Æ­hC"À‹B÷¡ÏG"C„Ã÷»!o ~;ãÛí®Ç>@ãã.T€ÆX ‚D)Hd‚D)Hd‚D)Ú~cÜ(:àidj‘Èûým±ÃÀlñ´òµHä«Ëm¹ãÀ\ñ´òÑ RÈ ‰ RÈ ‰ RÈ ‰ RÈ ‰ RPÕ Âúb=ö!Œàíû]Ktûáãˆ3¢ü‚ª$20¥•¼8ø3ŸWqüíûMþÂ$2€A-ê)ø¶”@?2HA"€$2HA?201öˆ…ü‹øvQhãýòÇoø‡ÝøëÈù}i#Sb²CÇÇbÇ“9ô ‰ó|´‘ÉpšrfÂo5›%U‚íëÝs~}Í>öi1Ël?|ý×§ L[¢Õl"FÏ .9ãFwìwqN‹ÿ7"ÚÈÀ´%r¤ÛCSl +¯lÏ”‰D&ïü†íÔ›ÆÁ•œ¼1$20mÁ.Ѷ¦^³D?20þ•¨Î\÷œ ÎÃè¿>‰ L‰ eÿŠœsÁ*gÝØÌ¥1'aô_Ÿ^ `büÔ°ç´}´qár~£àhŠØ2ã"‘iH·|—i~ç„D¦aº)SÎüÎ ýÈ ‰ RÐk ¤m9‰¹â<$ÈÀZ[›1ÎC‰ a~× :à$4¢¤ ‘@ ¤ ‘@ ¤ ‘@ ¤ ‘@ ¤xõ½Û»ocà%‘×›«¯û«¶+Ú]Ýßö{@0QçEâ­2‰üç¿:oE«ûÎëÀÌœ§ô#€$2HA"€SJíþ®ç Ìþ;U?Ç> €ªŸŽÿ›)‡ŒÑ–‚KtIMEÑ1”V¼IEND®B`‚fox-1.6.49/doc/screenshots/clview_icon.gif0000644000175000017500000000612311637250333015432 00000000000000GIF87a~D¥9<†‡¼¼÷ÆÆ¾þ ÌÎõ½Áb RQxë^^^þnaœœ™¥¥~ÒÒèz{ò‚òþ—# ò ¢¢öŽƒ 2þÖÖòggg***þ·­‚ú‚«ªönnnþ.$²²öOOìÍÊÊö™ÉþÇÈFFíbb|Š}àãë,*ëþ–ŽþgJæé~ΞÊÚÚÚ33ìBBîÂÂÅ¿¿ú>>î%&îjkòþþþLPÑÕþ#þÆ»ÇÈúš.Š,~Dþ@‡pH,ȤrÉl:ŸFÚh:‚8˜#f…P¿à°x<µ2´Œ­ÃKn»¿ftvýÓîxˆFëØ˜Gx‚ƒ„…wzZ{†Œ‚ˆ{B €Ž–11X–¡…˜“[ ¢©y™™§ª†ˆk”±ª³§Ÿ•¹¡ˆœŸ½¿ƒ#WsS¾ÅÇXWÊÌ͆ÏÇÓÅ#Ô±Û_Þß–áTãäwèéåìî¢ëíñ4>>õ–÷ùúüñH° Áƒ*\Ȱ¡Ã‡Hœhb¢Å‹3jÜȱ£Ç Cj4ab‡É*L–ܱ2%É•&Sª¬Hr&L”,kªÜIrÀþËž?ƒîÄ™3èKœ5²ŒYô$Q“M qÇT*˜zÀ­S­À 6€¯$pKvk¶_·n8›sjÚ©J¾5¡6À†¸SûþµkbÃX¯†ðÅ øíÕ¬nñú  £b*dÖ‘Y³;pV‹Y³èÌ*tè0y9ôeÔ§Ig=:õêªS¾=–wéÍ™wÛNéùÁ[ÔÂc'­™Á€¯:Hmº÷¹t½¬©³ÖáUÅ^«ÚÁÿÜKkÖè*; ùrXðà§žÿî~1é÷oÅ×Ü[’ƒÕÞñšz©P‘U¶Æ^hz‡™{Ä-H U28…Ã9˜ þn˜Ò_¸qæK.èØƒ¬U8áe$©à < €/80c (ð 9Òh£Ž8ú˜£Œ2™ãŽ6 d’8*@¤( à¤“<¹ã•G6¹ã‘ LIãAn¹d–Lþ¸%$ fZÀ¦VjÂù¦›sÖ¹æšr¶i§žzÞéç›q¶Ùç tú™'œ„ÒÉç¡ ãF*餔Vj饘fªé¦œvêé§ †*ª¨$x©! êª«zર*무Ö*«¯z`k®±ÚÚ꫽Ί뫾kƒ 'œ ‚+¬°À³Ð.À 7°àì³Í^-¶+P{m¶Û.®¸ÓÞ ƒ¸þÝfÛ­ ,°Àn¶7|»m»îÞ€n³Ðš[­ òB;n¸ Ø`à  7øPC7ñÃ0ËÜr îFü( øƒ 8ël²Â%kü0Ä+¼l ÝFp!,€ƒ-GÀÖZS}ƒÕ`ã°€©íúÐ-b“5ÛU³Ðœ´!xÐ-íZ½0Â><‹Ã eûÐ÷ ®® ÷!ˆ»^× 8áo·}õÛf“p¬ÆÛü1ÍË ‚ Ø0CÂÔ†þ1ê-‡Àð ¡×lîþê£þ±À¥ÏPƒëÍæ‚ä3Ç\3À{íµC Ãjû´ /Pƒ 0Ï}|êØn;ͪzp‚ >lµ4S-º >˜^³âŒ_~³’Ko¼Üíß@þúôõÇY3Þ¿äÊCßÇÜŵ­hë»ÁÌdð°gyî€ ˆù|À@øM‹jù»Ÿùø¥ªd€Û=@&2ÑAà˜Î>2òá,d8«VÎú6Â’0Ô‹>Bö0„ '€N0«€†#¡á‚¨<‘Á}>Ì¡N€DwÙ°…Jü˜4Ç‚d)K]øjÖß…®x©Ë_ÜR—ÁÕ¬5°]kÖçþŽE-oÁËYbÔ^ñè®Û©é:£ºlP*T¥ªV¼*–"9,Wí X‹L$­©«EÒjT˜Ì¤&79©B¢ê‘® –%G¹*J‚V‘„ä$sEJY+YËÂW¸Êe-É2\mŒWq)KÅQë\mT#»xGlÍ«]4»—¶ôå®~í`XÁF²ALb(ÛX5+¶2ŠÌbLÛ8–M•yìg/‹ÙÌd'7‘)Íi=Ë:—‡Í¢-iâܦÓV:ðÕ`jU»œÖ¸V¯•Íre³[ÚÖ†ÐÊÅmn,¨Ún·½õ­f9Üä w¸Ä-®q“[Ë6êб ™ÛÄDþà9Ú™kt¹CÝö@W­Ý½.v-¥éöpg:›öîw žÎj@<ãL¦ÊcÞ œÇènzÕ£ÚQ‘7;š®®{ß ñì÷¾ó¥ït¬ŸáçÀùµÏ}ø«ÁÇ¿gÊ  ÙÅ."Pl l ôÌA j¼ ûкÁtðƒ!Äâ EpÂ^±†NôáÈ xº°„7Ì! %ÛÃ2‘ˆF¬kqÖE!Bñ‰N”"EfEÌ*³[´Aa F@ޱ–Á<£1•™[6RqÃdAW0GšÕñè:ÖêöH®9"··aÌ!MõIDª²•¤4¥uC™Jî®’XØU'ÇKþÞòfÊ“§:¥(ÃËHVn•Š”¤°ÜÞW*‹YÚŠ-µõ¯måò[·´å·ÊÌß® ™Ö æn¡E¯dêvÌäׂïÍhÌ`€Ã˜Ã®9´¥iXcó˜ÇÙ4m2­œÝDgDÕY¾›¹Óšñœ§Ð&fO¤½ØÃ%~Z?¥ÆÒ€– -©Û´¦Ð2ÔÇB–ÝJQ½Ý€orèFµF9­NnˆÓÛG¹‘Rù HÖZJeÀ9–VÕv0UUµg±ÖÝT_9•©êxª;Þ-¨B^ñÔ6Uj%µy¿kjô zëõy¦Û»VÁ'>®®Ï«ê +aÉ*?µÑoÒù[ë\û÷VþéÅU‹¬«˜×ø=Pr~¥ `ï:XGö° $/KAÆ¢P…®…¬dcHYËf1³=Û¡Â6æY!‚V`¢míMÙœVµUüõkçÛÙ~ŒÉ¥+n Ìß=Bn îp‹[Ç5¦+ÛËUfsýXÌo+sº†T/{G©]ZÉ×W÷fU½±kÞ~û»¼$€A Þ[¼0˜·%NpƒüàxÂiÅðÏÛ0€Æ `hmÜ)04ÿûÌh+/£º0°qð@ã.Gc´Z~u? åˆù„û»-ý =È0N‡•€@ÏÁp,ÎnŽXŸ&^ôþ¤Øeh€ÐA€ôðø4º ¶þƒžº¼öƒê:¶A 4î” Ì8àÀËp0›4¡h3òÕ¶ª] 9w“+ÊòèhËK@R­Àñ<¸€G#À8¤ ò“¯<Üþ޹hîèTwA Îl1 °?€]ö\êæxá”õÙÃÀá¿ÎƒØÙy+àr ñ¬Ýî×C„Oü¥Ú©+ €ñ÷C«ÎªÜ#AêÎlu¬Yo{I»šÒR,¦ÕJ¯ó@õnýߺoák¼ûwìú‚8¯’3wõ‡|úg~cõ1†ES×â‡þÓ† @uä÷X´C“5CíDkÞ?ÐuªÇCÄæ%À€= |$ØD7Z"ƒ$Èö€Zt˜‚ÊæMˆ>š“q0‡ØÖ,/§qnض[µenBØ,rÐôqLx/ºô,r6‡sç„Gè[bpW+7q W,Wp\øp 7†W+a8oÿ¶†l؆nÈ)¥â]Å’o¥D_üö†ã5ŠCL &.ÇT/6a4ÓL;×qÑbxÈI08Àbìvð¤N2VOFcc9“OE·O“ˆ›Tõ7ÑóeoseųyŒÃe"?ƒãwC†R¦Ç‰™Tž˃3TEÅgTõdËhÏ3h9dh»x}‰F²8‹ŸjÚfW‚¥@£W§ATAØjÈAǘI@4CTDÈm¤ÅD§åCÏ3S޹vƒ[”£ò ®"ßcD„¤96€ªbðè"+øˆõDà0:ùxùiª;fox-1.6.49/doc/screenshots/SbSScreen1_small.jpg0000644000175000017500000004453011637250333016250 00000000000000ÿØÿàJFIFHHÿþCreated with The GIMPÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4"ÿÄÿÄP !1AQSa‘’Ñ"2q±45DRTrs“¡²Áá#BCUtÒ$3b‚%c”¢ðEd&ƒñÂÿÄÿÄ1!1QRA¡"2aq#B±ÁÑáðñÿÚ ?lg„3CcÐÉÂ:ÊGA!ÄÂܬ¬®¹Ó¡eQp†¶¢–)§á¬ð»+ âs›œ“|ÖÒÂÚo&Û¯`¾EOIÅ$²I-že¤‘•ÇNRl­s ¥¥¬¤ã*0X)¥-,|-פi±u,ðªÓþŒ¸nùŸ/„™¨«…ü6ˆíÅJÆ‹?BN›ï 7×PSp‡tõ°TpÍáÐ<5’f?REÛs°m£Sm‹èRIu³@ÌÛ‹K¢‡§Õ¥¶ÛPz/©O‡ÑMd“ §…æ÷c¢i#_BŸ1ßõÿDpåÔù63ÂLZ‚6>‡…ÒÖ_+\Æå¸9Aqô_gµdŽp›ùÅOXî_X‚¢)oÿã‘HÑ{¾&07]UšADìŽ^²“bçÆÓ—o èjÑñ8ÒÞëþˆx¥Ôù xoÂ_ç=c¹0ᯠ?œTuŽåöN*JÀbÂé¦t’dâÄBäX º1;_Œ\i}ìŒ{Ûn]ߘµõµ¼Ö>ÁÁ—S壆œ$þoQÖ;“ŽðŒÿòõc¹}^³dwÚÆ‰DyÌBÄkå'fŸxRâqQÑ6Í¢¥´“Ü]6¸r€=j<Ö>ÁÁ—SäÆ\"þmQÖ;“ð†ß ÔuŽåôæM’ˆÛÁábü¥Æ }>NÚi¦6ËÁÖÇrÖ¹Æ1a{\ù»ÏWSÍcìu>f8aÂæµa;x_ÿ5¨ë êX¤TôTÍ’>Î.ÊxƵ{Û¡PmcB%o”´ÑÔ‘{ìØ=?žk`àË©óöð·þi?XL8Y3Ÿ¬/ ²©ÜY.àÙ%¥­6ˆ ’.HØ,~ïTðKÓC°wç:!f4$Û~£ÕèQæ±ö ºŸ:+Ç™ÏÖŽc§ÿ“Ÿ¬/£b¾‡@ÉcÃéå.qnRßÝ'Kí:ZÝ)0ÙYS4S`ͧk-s¢åÛg)=[y¬}ƒƒ.§ÏÇ qË|%?XN8Qÿ2›¬/¨x 'Í`û0»à4Ÿ5‡ìÂy¬}ƒ….ãæ„Ø×óºÂqÂ\gùŒÝa}3À©>kÙ„x/Í¡û0žg`áK¸ù°á&3üÂn´ã„XÁÿ›­}Àé~mمߦù¼=€žga)u>v8E‹ŸÍÖœpƒ?—­}Àé¾o`#Á)¾o`'™ÇÚ8Rêxâ¶÷ô½iÆ=Š|ú^µï<›æñv<Ÿæñvyœ}£….§†n;ŠŽËÖœc˜ŸÏeë^ßÁiùˆ» 1`(ó0ì)u&.iŽ&.mžb£…>ãÏŒF°üaýiÆ!VŽþµ»ÅGͳ²ÅGÍ·©<Ä;G }Æ ®ªçßÖœVÔóÏë[T!½K¼[>Cz”qáÚ8Sî2EeMÿÎwZqWQλ­iñlù êGÏ’Þ¤ãôp§Üg ©ù×u§3s®ëW²7䎥ܭù#©8ðí)÷ÅD§øŽëQÏRÒI<óÚiˆ¹6m¾QØ={V†Vü‘ÔŒ­äJ“Ë*J‹C“¶ìó0p‚ªJ˜˜êÊg1îkLm‰Áíòš.^\Zn 6[Ô»UÍRÊÊpb#Xèå23#Íì ¶¡¾Ýö—+yR©‰´ &²ÀÿÂVZ(åtòRÍ,ÊèCAc\{€nomã`QÇZã3"ž’h\ã`Lp¿©×û”ÕŒmDÎd¢Ñ’ Nþ ŽŽš:¦THù|¥òŶ]räYø‹CZ}Í££KÕÌ¡QŽ=•F©Ï“˜¹Ïy±³Ë-}Äå'~íªì•Ïm%5CcÒQr3’/¸_¯SÈ —¢œ½Ï|™Ü]å нε¯Ê⯵ÇPÆ]b°fW4ÛKo¿*ÕÅ¿z(Ÿèa<2^&RâÆ“¡==z‚–©²6æ€så¹ÄÜåQÁ pqäJ÷®Ng7C®ºz~åeÏ…àæÚI#aµÀéèQ÷¸ôdý·ú#Šø«Ìö[‘ÏaÛryÁ YžÒÉc\²çñ+hBãk[÷yåéK ‘E y"àìo÷+êwTV•s+OS LRG”€rò~çf6œ‘f$¸´—YÆ×½·”®08ƒ{[ túI„¬,o”©i¿*ÎòqkûkäµGOìÌŸ¢†±‘š†š^Ù‹œàZámƒÿv…£4ðÃHj œY—0³Ž¾…Œ‚Z¨ª|ÑaœXßyÕ5K)ªátS³3,Fp?5¦ä§WÈËÃ1èñL6²²(Þ<:í$@&×êIAÂVbÒº­s›˜O{X_bÑŠ––9)#nXÒÌ¡ÍXïU©pz*J¶T²I\ö8¸9–¹Üd«sXË;[ûPøŸÄÍZè§»Ósp5;î-ʸ$Â8¸žqLœk3°=Ž×¶Ë骔b4å­¢¦y Ë™íi'@9zண‘†Ñms‘šÛbÐç,ÑaWÒ¶¢ —˜Üç4Â/•ŧByB±âó—uõV dAŠž–ãiѱ€¹ä”©F;;š)ň¿þꀗÄç.ê=ë–—š–:‰åÿñy ‘÷yØ<›ÛÖµüy?ÍÇ_ê³1)ªq › šX[—,ma]¾UÐèjèeÃé§­«4ÒÍ“)i Ü\åֿܾ­ªÌµ,1Ê÷âÀ6&‡?Év€ìß¿¿¥¥Ž–Ÿ Š…ø|S²8„Eò±¥ÎhÔú.¬øE5ˆñE%bGÝm³«r½sè)0ºŒAµ®’g–Í–'’Â6Œ£[ú*8uk1>XËø¡ $9…Í1µàíGœ´jçtôžO£ùÉŒ6ä7ÿ:ZgS™ |Ò¾I8Ç9ùF¹Cm¥·4 3køA mLŒå‚,ÙŒ¤]öÌ—°¶ó½i>¦àîuŸ=„lã5{ˆ½‡ßÔ²q~ Óc5†¦¢j¶Ë`UÕ¼K‡¥¥‚WTF)œÇFæƒp-ù¬£Ä·àÂ/-ÊÖÞÆu?U]…buãž”Æçqi66¹Ó“¡baœ0Æ«jâdQ¶7Jë6@ásô¶¯\pzvà’áp²H¢‘…¥÷Ä®&ú•’ÞÆÚøë<.~4/$‚Lò6;4.m~µfç•;8&ð9‘#dqœÄwž’¯ø–^y•œªþÒLÛžT\ò­/ËÏ3²°±ªè0I] ò°Ìc|‘Ǩ2enb:A,žyÿoµ,³:ŸtÌŒ{#3åi³aFlÀ;”4ýéØâÀp⯔o +f áŒTø'8t¥Î6,`¹¼‘éßuÇc²µ­>*®$ nš_•\unJT¾±Ífc ¼“¡"þ‚TÆvxÜÃ-·›+¼Ø•·_²T[+ÒË$•µ­y6k™•¿&í â¤'³€æ–I+ƒMk›tz—1 úL2-TÅ. qXC,gq䧧ܼ…+[XØu¤¼¦–¡Ž—(¹Ìòâ@NÞ„âFÒ¾{Šc!UŠVI+_4m{²²G°åqäó®6 mELí§ž8¸¹ž_˜Ý¯ÐFÛžDsBQÕ±.-:h´…™#isœëõ õ1ÁÜìå͉ÒåkaëRòEKK{¢Ú²Úzic©…²°¼5À\UºjÕæÍsl\Î=Ù›}—i{)Œ£5ª/`ÓN˜ˆSŒ.gJbS™îÞ=×µ÷¨u…Øp©ê#ã!šžF\·3gqÄlÜA ÄЬɃÕEžãš.lîå•TTˆc‘²Ç>ñÊ\ˆö‚âñc•Ý¢Ž,r»´P „¼Xåwh£‹®í!/9]Ú(âÇ+»EÈKÅŽWvŠ8±ÊîÑ@2ñc•Ý¢Ž,r»´P „¼Xåwh£‹®í!/9]Ú(âÇ+»EÊ–-ð]OÕIø­ñc•Ý¢¨â_Tíÿ.]§ý.@\þ;½.ü—©¡ø>›ê›ì ËÞ—~KÔÐüMõMöƾ’@໎ÝàÝec‘QDÊa5,’‡À#•íµÈ¹9OÞµþ+'û½¥WÄe©ŒCàìk¯{æ¢Ûü½!™Yâ¹qªjJ¨áxŽ2Ƈ¸ß1µ…¯åhwƒ·¤ªµÕ\£¬’ØS_+$cžÖDÛyD]Û}}6Þ¯MPÖð†6šiK<ÒáNKKŽ_+5´¶ƒo/"ާ¯‹¨‚‹ã ]i®Fq¿pµÆÓk6¢äƒ…Øh°Åìd £ÉØÛÓêµ¶ª®ÃD×É=<ÜLaåò1¹²†¼³ï-ûÇM«Gãn’œ?-ñ‡Cp94¶½ö¹SOˆb´Ì–Z|9³ÆÌäÆÛµÏ9È:îìÖ臄ÔòÊÖšj€ 3Zì¹²ÒNÏbŒp²•ÔÕ_ûËqwfäô'‡Æ#C°–ùžXå径‹Z÷y#Æ S¼á­ð†5œHÈë:öÏ­î7[gNÄ­6$Ê©cc@x”ƒp|dž%^Y”U53Í šÜ̸ñNamœA¾Ë‚z´ZhB^…42VUÖ²:*©]$yáXY%¶óCÆœº/p±k½úÿW±ˆß1¿EžÕ#4ýVï@Q·ÌoÑgµ;ucýì u8c+ yt@TYíŽB-¹èÖɃÁâéhãih–ÅÎÚIÓ_¹CSPú&È×½¯p.wèÅšÛÃnÐ>ôR×µÑÔš×3æ-hÉq\ê-ʹ¥“Èñ¾ocD¤£d°aŒ†wH)âÞ$yÝϽéPâøxÆAQ#Ìm>T`Xh_jìu²Òšˆê&s Èðf7غöÚ/Êä½ñ`Ž8é òÉË_¹f(_OHÈ¡Ëc2²ÃF馜‰)éf}pÖËîk›,óšá§Z¯=\TX¬ôrLØÃ‘°ØçX›Œ­¿¨ô&†Xå25Ó9²1Æíl 73ÀÕÎÑ—'uý6»Çõ5¿"–É¢¢™Õ 3ºœFç³6gØ‚4·G.Ÿz©S…ÕÏ_<µÂË“²ö低½*Í1§©©âªHå-/´”ÍhÚE¯šÀÝ®ÿIÝeN44ç‘ç ‘c~]=JLRaÍ«{±¸êc{óY҂؉&à]ÄêNóu¶É£—Ì{]¥ô7@b2›ÍVé*#-p”ÀÖ?VßÌÉ9oú@Bů÷ëý^Å´±k½úÿW±ˆß1¿EžÕÒñî6k`$ŸP\o˜ß¢ÏjޝàÙ¿¤á b­¤Ct¬£&!GQ›žI¸-”ÜmÿOJí=vL×Ï ‹¼ç:CsÿIë^FȲ÷½Ãê×nÿÁåúŽZª=‡Œé[/ dpºÀy¯m­?)Ýh8œ$æ8‹ å%¿ÙÐ:—²,¯èø»ŸÁ_PÉÑÁ¸™óIU²=¡¥Ï~á{lhå+‡¦ËW°G™Î .i’IµØw“Ö¼…‘dô|]Ïàz†Nˆö-Åbe²âMm¶X´[gú:PQ6« d‰²SŒáÙžgÞúåé+ÉÙOGÅÜþ¨dècãh­o¶Ü—oOú:OZãñ8$acñæ9¹\Üà]¼š3bñöE“Ññw?ê:#ØIˆÑ?!mD1¹†àµýom¶¸Èa»q\¦÷Ñíö:Jñ–E“Ññw?ê:#ÙK‹AS”Ub ¨cI!’H-r;ÈOZŽ’· ¡¤Ž–™ÔÑÁr±çAÔ¼‘dô|]Ïàz†Nˆö Å ‹0‡lmq&Áàí$¬¾×µ(Ç\†0á葿ؼU‘dô|]Ïàz†Nˆõf£ }L52¾žZˆKÜÉ^ò\ ÍÜvoºš\JŠVÛ a¸ps_¨ ßäò…㬋'£âîÔ2tG³Ðqƒ!ö¶lí½»“dí ŸãX‘Ò  ÆÆò…ã,‹'£âîÔ2tG®¤¬Âè#|t¦š&=î‘Á¯:¸›“±XñÍ'?l÷/dY=sø¡“¢=·Ži9ø;g¹9¤çàížåâl‹'£âîÔ2tG¶ñÍ'?l÷#Ç4œü³Ü¼M‘dô|]Ïàz†NˆöÞ9¤çàížäx擟ƒ¶{—‰²,ž‹¹üê:#Ûx擟ƒ¶{‘ãšN~Ùî^HÞkD„ ® nÚÝ£~õfÉèø»ŸÁ/ÇÏ¢=œ˜¥4ì16x3:ÀYç¹I‰|Sõrþ/H?ÆAõö¯e‰|Sõrþ/3ÇøHøi%vuø\òÌ›k‘søîô»ò^¦‡àúoªo°/-üwz]ù/SCð}7Õ7ØÔwâ²»ÚSɲ?¤|ZM¿½í)äØÍ¾p@H’X›4Oâíp±ô'BÃé!£‰€ÍbAf×m¹Ù`±qЬUàØ. úƒÇY±½ä à‹‹›k«[²Ö6Ý·×TÆÉ#솄_z­Y‡ÑTÍLj(⟊'‹ÌÀr\XÚý U{†a×aœ§¨Š9áqš6ÙŒnr\@½´Úíyo¨¾äØuwð©== –¨òZI9K®IÒàê6éЫAˆøgjðÊì¤6bÑæ³ÚIÒο§K+'Ã¥žxé°N5Ôï1HLMÙpk›ë°Úúò)”\]2󃃦zxäl±¶Fæ84à¦X-á$LË«#ˆÆ]|³lCc{Ø[~Šj|tU5…´UPÞ@Â' ió ÷Émm·‘T¡°…ç !&ÌÃqäæÌbhhÐNm6íÙ¥öX™ÇãÐÊúÀd%†Ìmšá|××@"û4ä@m,Zÿ~¿ÕìUß¶C… Ù°ú¶$!…¥¹\CC®F®ÒæÛms¼86¤Føó€r¿hݹ˜ß1¿EžÕWÁÒÿJÿÂóôYíIUð|¿Ò¿ð…h~H‰rg‡ÊŒªK"Ëìµ;DyQ•IdY5 #ÊŒªK"ɨQTeRYMBˆò£*’ȲjG•T–E“P¢<¨Ê¤²,š…åFU%‘dÔ(*2©,‹&¡DyQ•IdY5 #ÊŒªK"ɨQTeRYMBˆò£*’ȲjG•T–E“P¢¬¢ÓÁé>ÄK(eƒ\ÌÜ„«%ÂÎŽ”,Ðä ’”ۥ˩¤%ÓjÅ –9j¢Èðë=··¥{,KàšŸ«—Øåå)›þ*¦ßjõxÁ?W/árñ>«z£oØô¼š–•Kÿ‚çñÝéwä½MÁôßTß`^[øîô»ò^¦‡àúoªo°/$í;ñY?Ý¿¤§“dH$ø¬›?{ÚSI²?¤¡@G7˜>ö®I~6;}k³yƒéjä ™#³­©@yº'pœ6«Š¥~ø‹Ù%Å™òZÜÛo»@WÆ'“„PHÛb¸ã„Ć>CÅÞö;5;4'ôû†ÕCÃúú¸ñxå¥tW–”ºò4°4kc·[+⇞ZŽ:½‘Æ%ÍNºÄZù@¸Ûä’ouÒòh{+Ùxˆ©5OÙrUì|'á!ÇÅÜÜ®w£nop¦Öäô$ž~µÎø®= Ëp^^,ìàlßä’mÑê_|ðtßã8œöÆæ––€ÒH:7[NëìÑB0¬{k¤Æ‹[•®7äÜ–e³ŽŽì½úùŸÒ9¸_³â2{£ïaÇqëµ—LŽÚÜ\F¾”‘{§{d.Æq¶Ž42?ÚH nº‘nQ·uï­¬~Üü+„ò byaÍ—j-ktôîÞ.}-‡"2úìù?ü*v2ìsf+S];„f¥îsH\/¥È¿WJ÷õÞý«Ø¶¬-w¿_êö,g-NÍ"©Qˆß1¿EžÔ•?Éý+ÿNß1¿EžÔ•>ð“úWþ¢?’äxü«¹SÙ_[gBeFTöE’Å •SÙK&TeOdY,P™Q•=‘d±BeFTöE’Å •SÙK&TeOdY,P™Q•=‘d±BeFTöE’Å •SÙK&TeOdY,P™Q•=‘d±BeFTöE’Å •SÙKv¿âbúcÚ½6%ðMOÕËø\¼äüDH{W£Ä¾ ©ú¹ —‹õG÷Çø=/ø²çñÝéwä½MÁôßTß`^[øîô»ò^¦‡àúoªo°/(î;ñY6þ÷´§“÷6ùÁ'Ådÿw´§“dH $B€Žo0}!íK.^6<ÆÚòÙ4Þ`úCÚ¹)Xî/ªÇa´¸ÿˆ•µ4µÓ ÖÆàúc£â|·´‘a¦íJ¶ü3 ãê]SŠÉ3¤ŸFµÀñ.Ì-²å¤ÞÓn»•JÜ_ø•Y‹]*Ø [9¿–ÑlÇ.Á&ÎÞ4V™'ÛWUc’yå‘ÂV¸r3XXXlèåZæ»WÑø‹Ô®ù.Á Ã0Á$-f50Bñð†“’À8‹ßKXýê±Â°&UFãN÷˜ôq¨Î|sl6‹ÝF1> qÕTþ 8‚’;É;CËw“m îm—f¶ZX}ëj%e%9ÎÆ´¾Í‘­ غ€ýûÖFÎPSdŠwLÜ×Îçæ:êý·E•¥=44‘qPFØÙ˜»+Fòn~ò¥@ »ß¯õ{Òů÷ëý^Ä#|Æý{RTkC'ô¯ü!;|Æý{RÔ{ÅÿÓ;ð…hþH‡ÈòùQ•>Te_Qg‡BeFTùQ•,P™Q•>TeK&TeO•RÅ •SåFT±BeFTùQ•,P™Q•>TeK&TeO•RÅ •SåFT±BeFTùQ•,P™Q•>TeK&TeO•RÅÙReFT±DvE”™Q•,Q‘e&TeKÛÇô‡µoâ_Tý\¿…Ë&þÙŸH-ÌKàŠŸ«—ð¹xÿR|OCÁª‹.Þ—~KÔÐüMõMö忎ïK¿%êh~¦ú¦ûóNÓ¿“gï{Jy6Gô‚O‹I·÷½¥<›#úA"„syƒéjYIGasªi¼Áô‡µ,®k^ÂdkuØãµæ(ñIÜ=«¢©Âš â/[cØÀtûîIòwWdÅdi­mw6bá"W_nÔÞ×$õ§£¥á<6ª’i™. ,YšK¼Ó%¡»ˆÖçaÞžwðž¢IÙNÚjV2GHæ‚^ܤ çy½ì6 ¸Zd«UÑr6ÍVª¹.BTc5PÊiâàôÎù^Dd±À_Í!ºê6ÆûM–®\+%¨a£4ÏŠÁà¤ß z} !R†NºfñP¶7LshNHôÞV§Î=\¶ps‹¹Ó;Žì#lFàí¹öul 3QBXµÞý«Ø¶–-¿_êö 1æ7è³Ú–}hŸý3¿Lß1¿EžÔ³{ÍßÓ;ð…1æˆ|?•T™Q•}£Ç¢;"Éò£*k"„²,Ÿ*2¦±BeE”™W2¦±BeFU&TeMbˆò£*“*2¦±DyQ•I•s*k&TeO•w*jG•T™Q•5 #Ê‹)2®eMB„²,Ÿ*2¦±BX"Á>TeMb„°E‚|¨ÊšÅ `‹ùQ•5ŠÁ ò£*kr 8Ö} ¶1/‚j~®_Âå•hϤ®%ðEOÕËø\¼¿¨;”Nÿ ø²çñÝéwä½MÁôßTß`^[øîô»ò^¦‡àúoªo°/<ë;ñY?Ý¿¤¢ycˆGÆ=­ÖþS­±“gï{Jж’*¡<Óa 6½¹F…7„Ä*›LIã\Âð,v×fðò20 Ü äÛRlZÅžš7ðŽðùÛ-î"– mc­­}G*ªÜűjéå’bàöÖ¸r€s5:ßnË =Ÿks,fmŽÐ7¹yœƒ#Äid¨ª€´°XŒ¯»²ë¥íc¢¬Ú Å$¸“Ég˜[%Æ…º›·ë·uŪ–ð~¸OK&!y o峃39ä¶ÛH»…í²ã•JtJmr/WPWW×^ TCLè¯Å¶äºún#M÷Û~‹,ç`õ2fðŸÈhŒ>ÌÀsi~®ƒ­äð.ÒUf©t DÖÈî(›°y-p6…·±;”b—ƒ·’b­-Œ/gÝC@-;,ˆ¶íE”X§Â«ËˆgÜö<ݬdcÉëcšü¢ä¼ [zŽ©é#Š¢ ÔJÛÞRܹµÓOBǤ¬Áá”ËiC²8†’2—ŒÎ¸:´lôë{­*|Vލ·‰”¸9ù,#ÊËžÚ“¯"ꄱkýúÿW±m,Zÿ~¿Õì@b7ÌoÑgµroy»úg~ºß1¿EžÕɽæïéøB”éùÙQ•9\¸ßué?ˆààH["Ú§blìä ’úŒ$Ë/.¤VF^…0sypñeGõí|»êWâÝòOR8·|“Ô¬æFg*zŒ»KyuÔ«•Vƒó€\14 ‚ÛÔ ÿ%Frðíre|¤ìAaE•¦å`¶Ä¥ºÕÔ~í£±eáöæU '`º‘´Î"䀦µ`Ydú„ß਴|ݲ¼æµÛ@Q˜NŽÑmÇã—å±Gáä¹l‹+>OšàTnŒ´Ø…Ó øç´Yœ±Ê<Ñ–ßHZ8—Á?W/ár¢”=*ö%ðMOÕËø\¸¼k¹#§ÃreÏã»ÒïÉzšƒé¾©¾À¼·ñÝéwä½MÁôßTß`\GQß‹I·÷½¥<›#úA'Ådÿw´ª˜¤µ‘6¯»¼¼×Óg =:ié@^t8̃?.ý–ö, =Ô4ÓÖÔ6žHL#)såsƒ Ø ¶à= «Râ3G޲!I†ÜY´.,$ÛÊÍm×¶Þ^E^»ÄMlÔ”ØGÈÜÏÚ<œ®‚mpËì&Ä6§íµ x 8>ê·ÑSHÈÅ¥ ö%Ù­w—uõ6Ü f5°I#py#§p0™›‹ ,5ØOß¼©âÄ1Wq0»ƒŒlR&n}/ Ù—w¯v¶«µø´ ’XpöÎÈóþÌ]®q-h]À›ÐQc8f%YI°ùETƒgÆ»-·—uòõ…°Ì'Ža3( l€‡ € XÔ³aÄq‡JÀü)¶ ³­-¼¼·Ð‘k^ã©D1llÁQ|=¼x 0ŒŽÊÿ—}z¶]è SƒáüfqGuˆ$6×qè×ÙȤ¥…Í1@Èò»;CE€6Ë{z4PQUWË$M«§lEÂRðÛ¸6Ïšï»I>­ËE!@ ¿ß¯õ{ÒòØþ1G†V=µ+£t‘ÇûÒ6î·©M¾c~‹=©gÒßÓ;ð„ÍóôYíIQ¥‡ÿªÿœp?¼›oÉ+9³kc¢”:û 碅ìà‹å+€´þé ¼‘`SÝÖØH2Û}Ó îrƒ3ÆÅÌÎ;TÎg}©Û(;íéUˆýäÙÁ×Ú¥Ö`P$µÀU„ƒaØœKФƒroµƒ½Eœ¡²è±n¡´Êè×~‰,Ô^Ý!,a¾çÖº\5Q—\y(oÚ ‘¯}ÈKrn 5—R_[®æK qµ6b7¨ 𨠠ÝÞqõ)°Jfq>€Ž?ýEuÛ¨²I ßé)ĺjT. $² øÀwýÈkv¸*¦`G“©KƤu”°]㚀”œ¹¶°UN=Ç@ô¤.yÚGRMnašÈ.âMÖ†#ðEOÕËø\²csøÖyBÙ†–ZØ—Á5?W/árÖrݲÑIr.Þ—~I&á5U#ऎ $eò¤k m¶àë÷ën¸–Îâõ:z9U]‡Q=ÅÎÃa.&ä˜Ïþ*寻!gï¨Þ’lXÌ;[—fWÙcx²‡ùdbµ,¡þYØŸí@lNõm©ãY¬,0µ‰g©<˜ËÞÐìeœ ÚEô7¶»ŽÏZÄñeòÈ>ÄÿjHK" Ê nö“¨ªyia­lÔm‘­óCØâ¢íML†1TÜ[Ƶ®z¬€qæ7è³Ú£©° ’úá AôrÛ(ÄoéCYðdßÒ?ð„“»MìCºn‹ìºÈkœÃv:ÊÌxƒã9· œ¡ ÉËt"êhê†ÇeE•Ð>ÀèztR‰[qcoHF âv´õ.qàlÕTÎŽ0*‚ç9ñ‚ú *…רë(ÌIVDËúPÒ³¸ÒNÕÞ4ü¯½H4xÀ˜Kmáf*8į„i¹xåY\bîrw( k †ï]ð†t¬ zyR4øöî œ ² ×„ùî”o=2ßhTÓfô¨Ø„ºìMÇO½SÌ™6³;Bá©m´UlçÁ8 nÒ l ¸Ù4òW$ùEFecx$}H7Uœ¼ Bá-Þ «çs¶èºA¶›Pão/RŒÔ’|˜ýeG•­rN9·µôè@ZŠGºxî†ÏJÞľ ©ú¹ —ž§ptÑÛåjô8—Á5?W/ár×&^%ÏŒ;ÒïÉC&! U¾ æ;6žU¼H[ò=joŒ;ÒïÉAz? atQŠ©ÆqzØi|Öõm[ÇMýijÃ^ì¦v4ÞÖuÂãñši ã(¤dÄK¡°7½Z1Ñ’Id¤ªI`¤’2Àc`/l„°€Ikƒ‡ÞŸ¶LÈ|}†YçŽ}£óü‡y:_]Æ( lŽ 4ºù° ÆÚk¢_õ»!ÔÜù,ÛÔ˜ÒP—8ž.î¾m­ÅŽîM›Ãì˜Ü1‡9®¨k\Öæxq¶Q{k¦šò¥“Âã.ª`-$ZûH°Ó_R†¸¸–Bsv³P=JGÒÑÎáŸ$„^× ;vîÞŸÑýÅÆ`tÜwìÚâÒuÐë¦Î9tå8ÖœÖÖö¿6§fIÆDÖµÖ»Cccqû¼¤õ®x²’ß䳓Ìgö¥âýü Ƨ¬eLò²;ØÖ9¯ùƒîVUhi"†W¾7¼´–À7`ÚmSeÿªÿü{–$Ž„¹;'þ=Ë™ê¿ÿä¡&[ÿÿø÷ °€i'þ=ʰ+üóþßj¯[ð\ÿÒ?ð…97×”7Ú«×i…Núr~ ùÈåü[´ò‚®%¢ûJpã}¿zåfc˜ºB݇¨®‚Â5$ËÛ“”j–k¦c®ÒA=*fÕNÒ348(›%Žº…3^Çi{m‚aTÝ÷ „ívð£1Ý ®ÑÃU ³4íp°…̾W%ÎA³Žœ¡J`—-·®ž…ÑrÛ‚ ®^ÛB›´·Tùº,¡ÏmÖ]ÍèKÁÇ£­Ïþ•~„géP ³®ñ€( ¹‚lãp]ÎyUgLÆ \= ?Ì|–ŸZæsÊŒÝ*Ÿ%ö5w;Î×7Ù—3[Þ¹™ÎØ>õW#_°ß ¨&`aÈ 'ecsI#Z:6ª­kI /[骙„µ»l§ØÍQ>k=eDéÞvºÊ¹qùE c½W`Hd'k‰]h×zãaåS4-aÔ– é_þ&!þ¡í^›ø&§êåü.^fœ ‹OßÕé±/‚j~®_Âå¶.L´KŸw¥ß’Šma„§ÿòå/Æéw䦊‰ÒÒÅQœÙƒF€=ÜúyV¥‹ÎñüuŠI !îã&p9”Y¤i—'Y\§v?,µB¢Xb$¶»‡’ë;RF„7B5½ôبáÒÑbÆQEˆC;¢ HskûGJ¿â·ó­êPš|‚ÝZ"…¼ o…Ç1‹‹Ëû Xd½ÀÔ°ëõ%ŠNŠe¦¡âK@pk®A7#Q{‹rlØÕV•ΩÅj(28:L€‚Ûn¸½Á:ÛMËGÅrs­êVj¹“LZp„:ÕÅFZ?Íp'P4³´ÒçÔ6ÜÛÆãµN›™Å(f¡50å¥hÚD£9qÍ«@œ·Ø½Ÿ‹sûQ§()]B˜ÔÇÅæ/¾–Û{ò(Ìì*L4K7ŒåÀKnrqNŠÖ¾–ß³mú:RâÆ†J¨|E&'Ê ¢ sG•³e>•¥ j!d°ÔG$oÍsuBä´&7;Àa½ßméFJ‹<ÎÚñYR\"l{³ß1saæô*s¶aVÓ¢t|lÞQk[§•ÆjnoùZÛ½°ÂÜà faxW|Rþq½J [»£ÏK,‘`Ì4q—»‰`ì°ÙÍd`ÑbôØ=kêdUŸ*(ȹhÚµÛª÷)8Þ¤x¥üãz•'5¹1“J¨ñt‘W»‘ÒV4EÆ1ÌŒF2é >‹ß§‘z3æŸBÐñK¹Æõ$Ÿt0>C !£e•<>tÝÿ•ñ'®«—Á™¸zíPW áSŽZGþ>áèoµCYðdßÒ?ð…¹‘óÂ=ÆÅ[ŽâÅ/ ΄.=FvE '©t¦SuÇFZ46è)-#KÙÁ6ØSµÀèt!G|À\zÂQ}ŠAq Ø•8}À;÷‚¨5ûÕN$°±Іp®1ÛB­áv¸[}ÊS‰@¯o©J‹|ˆñêÒ}FÊ<Ò°Ù/ÐátÜÂâ-Ëd†¡¿&Gµ])K@–9¹dFäåÄMÀÊð\Ì­ÖTÙô‘%@›7¥”YýÌUA6r‡]͵ÔAÖÚ¡¼ªf4²8]ι™&nDâ„P9ÙŽVŒÄ©[MqwGfhÖêvžU8."çE ‚1F»Åô§õÞë·éסVÀ‚0¹ßd\]Ðl™%úodôçüL_M¾Õéñ/‚j~®_c—•¦wø¨~›}«Õb_Tý\¿…Ë£&^%ÏŒ;ÒïÉgâÕÐÐRÑÊÜMÔõ`6ŸKLÐ(°7Ù®»7­Œ;ÒïÉTÄx1‡b” Äêf|±]’æƒ/”3 j.µRqi¯ž‚Ni\9™\§Á°)j8A6*YÜXÚpÝZ¨IØl½ýt U”Ęeap±"öؼumÂ|6 F'1´’3$Ùl8‡îwAØòQWø4fàçæ«¦4tÒÁPÇæ‡ÑÒmË÷,iBjûJÃúrûWØ÷¿Ù·I†²“¨©î¼÷2¦÷ôy]®k“ÔEK –g†0o<»€å= Êø‚º¾:ZvUTZtƒ÷/MQ$Ìxl’7ÊkÌàym»Ò¯±›»³\y!’ô;¡(1WÓºv±ÑÄZÒûyVÚtÓmÇ©3ßÒFÑRióñåtëPÕÈljätÀàØh!ÊÐ,Ahu´µ­¡¾:­šgGWNsŃ‹Hs]mã¡i-Ç‘µ%Í–#Ž8›–65­äh·BuRžX©Úø¤‘ŒÉ!ks8 ßÊzˆ Ú¥ÕkZƆ´ÀP„ „ Z¿Þ2ú•Z¿Þ2ú Ï;¸zíPÖ|7ôü!M¸zíPVü?ôü*Y‘óÖ´9¹šuä]i»MôPDðA‘è+¹¤g#‡Þ¸L‡&í±±P¸4ꜿKÙG&â6©D£™‹lB{æÔhR4õ®6àô)—e&Õ3dã2¹Ž!¾ÕF¢|ÄÄÛ\í$ìS šx¢ksf n nªÑ6Z.¾‡U”ñ¿P2ž„ÑT²fælv¶š”ÆG,Öz¥H;X¬–x…žåT±ÍÂì:ÜŠ¢þQ7ô¦hY¢ÛÕœ“öÜŠK‘6n…˨óÅ;Õ$~õn”^ü½i`’èÌ£¿I]Ímé`|Ë·QÝ’Á%ÈÞ›9åûÔ—n€œLñ°¦ð—…^èºØªå ¼'¡SÍЋ¨ \ðw&´…G2în”¡EÞ9»ŠáœYSÌŒÉB‹ô’Þ¶â7Ú½ž%ðMOÕËø\¼-½u?Ö·Ú½Ö%ðEOÕËø\·ÅÉ—‰sãô»òW†+ÁÉhf$2f’6ŽCÖ¨üaÞ—~Kk ø>5£V¨²IìÏ€ðsà]Dø];0‘lî.ÌÙï'mÖ©nŽRHÌ=ßòêØË%kt1ÈËrŸÞ¶½!§j»Ãœ:—Âb†£†…â@èÌÒecÎðFý ËÁx5°ú™ê«ÅSjÚÁ§i¹x¹nB ɹ\ñRSá¥ö¿ù9ðÆXòp"®žýK|à”Xo#£ŸÎË;EÄqí¾ý|zØ Ž²D4ÚNòw“Ò¼Wé±É¸%L(Y3ê$xlâ83]·^×¶î…§Á 2£àÃa®t’Èdtm1‡XXú-sëS(χ±¬Å>#²÷7NÉfÍ Íå¡óH Žô°SÓÑE+ó¿;Üë]³`ƒ—bzI¥‘ó2C pÈXuµ†Ñ¸Þê:÷Ê_PÂ% ‰3ZÀ>ÿa]“JŽˆ«aHÆÎê·Éo&RcpгOŒ  rEN‚§5\ѽ¼[Þ¢;7 tu­EÈ´­:$Š>*0ÌÄ{_’û©(B­_ï} Ê­_ï} PgÜ= ö¨+´Â§¿Ìäü*}ÃÐßj‚¿àšèäü*Y‘óL~Slö­Všc–;°ÛòT¶ÂPZû‚Aå ŽŒËn.nÕÂæ8 ÆË‚|íò€HòÂ7Ž›(=™|¶<8o²«STØ´n¯;¹:Ãx°ÚVt®lÓ¸µÀò–ø`›¹rôs5λԑÃ$„er«PFÓI :m²žî–²Ö^!Ý$F”$4ìˆæÌK¾åc8¶À£Îí·ÌyA\Ò““¶Hù®6"çnRÜßÎ#Ô»r?}T {jA]¸Ùbt¹Ýtù=+—éKtfPëBLÁµ@=ùQ›¥%ј ¨ºèr8å² Æç $Ì9s7‘CŸ¤%În¤æˆÎ9>õd¦a°€±«†@«q¢ûmê\3FN™ÊÏs`»˜ïpTÌß&>²Èò>JNŠQã*P.o366…ôlKàšŸ«—ð¹|· ÌqZ;›þÝŸˆ/©b_Tý\¾Ç-±reâ\øÃ½.ü–®;"¤pMÒVWÆéwä´!§‚§kj.ÒÓg4„Uª¯rñæ`ðûƒ†:)ª(Kd05ÀÀ]bo¼n¾ŠÅ$2øÂ‹†váÔq‰À9Éî%í¿3w-7âÕÈb¤Œ à×Cµ X7j Á*Í,tØYË4­5UNÎ÷eÕäoÓpåYãŒTÜÒÝ“S–GÍ—ã±DÈ› h°AQ[1L÷]¢7—8i˜ÚçΠµ4‘Õe/$e7o.£ÿwÝW’›%ÍŽª×j$W,;ˆ±û–±KÝ–e\ ¿Çx¾rÄÈÇl»K-³p»]÷«ò™ ¯lÄ·ˆßsl§[Y6êT)ŸAƒW: &xž¥Íj‰…Þll5¶›lÞ¶|‰£kØá~PBœªÝÿ.¹•â{_-Ü Ã”ûºë×ì Ò¥. ³©À‚A¨1€=*A%cmšž27ä–çïdY¤ùP•„¹ ––“¸í ”•!V¯÷Œ¾…eV¯÷Œ¾…(3Îî†ûTßOýŸ…O¸zíPW|?ôoü(ù.·JG0ÞãU.ô…Ài¿‘q™ŠÒ[¡k²JÈÙw›V¦¹±ù-³É¸,é%|®Ì÷WF?)îöD6Y¨ªãFF\7}÷ªáÇQsc´!‘>O5¾³±YŽŒm{¯ÐS”1*#vXÃÞî%×óoä«EÀô(Ö±¶oÜœ:Û áœµI²Èq¨ó‚í´Ú£Ì FmvªMÛQkïQæ7Ú‹”šÛj.£¹ ö $]̢̂ä™Â3… r\Ý( óŇ*¯˜‹¾ZBí—½.Ru%t1 ëªÏs )ƒ\wÙF0_E ênÀK°;¬ÛúÒgjŒ¸»z[ÛjN3] †Ê2Bè½ ÆÂòR Ì1ÇÆÔ^ÏÄÕ±/‚j~®_ÂåòŒ,ͨ¾½Ÿˆ/«â_Tý\¿…Ë|\™x—>0ïK¿$ÕX‡à#Ìæù!ÂÀúÂFÛ_¥(÷ý.ü”ÌšÒÒE$ Ž@÷‹mc¦›zAܯ%kc\.*iË‘›ÁFÕI‚–±Œ1¸ºH\Ö¹¥îí®í·Ý±zÖTSÅ!«ŒÔÿ%ÔñÝ¢ÃfÓkíX˜ŒM—µY`—+j!kø¼íÓ3EùÞ…K‚q8L"&:&Ã+3ËO™)>V^‹zºU#¶:óå„Þ½·öÿÉè)«`ªk8¹ç9¹ˆk¯mêÊÉ£­¡¥í¾G<Øé©º±ãj>u]YÍ'رUK d†vÆwh;ŠÎ}&%FØE%G„G1Kf¹ÍŒ¡Àtƒ®ñ¶ÅYñµ:QóªêMlVÐÆ©)Ã<0¾<–‡T7#n7fÙ®íwn˜ç. 7Ëc}Ä„OýäUŽ+Dí²é^yø.Ù´•ÕT²1âXòIvµââùN–±µ¶YZ+¹íòCg¯hÊÐ '¤®¬ªLBžž’(¦¬tò1 :W )²ŸÆÔ|êÍ¢m¨øÚG¨ùԋʵ¼eô(¼mGΨjñ*Yidc$»ˆÑhÈÜ= ö¨+¾ ¨þŽO¬,:íUëÃŽP y£xhÎ]³3år:ÌqÏ—M¼‹%õrÌ ·(Õó„b’»4ôµN¶á­ìS &¸xÎ=žåŒtãý³5¿36*yä`scqz³ ×F·}µZÑW@M¨ª‹NÑÅ;¹[ÕqwUWäâ]ܬüVJª"QW±˜ì™CCvt%_P®ÉE\ñï‹ýK»”C®¿¼ª~ÉÝË ß2JâÜ‹¶ܧñ}uýãQöNîAÃë¾cSöNîJ`€´_rЃ‡V‘ï*›ýS»—]ó:²wrSP‹‚þ.¯ùOÙ;¹sÅõß2©û'w%0A{„º«>.¯ÝESöNî\8mw̪~ÉÝÉL‰7Ú–þµkŵÇâU?dîäx²»æU?dîä¦ ·]¾_ «¶´SƒõNî\uhј}IéâobÁKÊM’=ÚyÊ˰ìEæî¢ªûw%8eÌj~ÅÝÊi‚®cÊ”ºüªß‹q˜U}‹»’ø³?ü}WØ»¹)‚®¨¿*´p¼Cæ5_bîä¾,Ä~aUö.îJ`¯qʸ V|Wˆ´_bîåßb1ªûw%0U¿*.N­Œ+ù…OÙ;¹wÅX̪~ÅÝÉLü¥Ár®+ù•OÙ;¹ta‰ø•Hÿõ;¹)ƒ˜cm‹QÿŸˆ/¬b_Tý\¿…Ëæxv]%J÷ÒÔ¶fLd.Ó1/‚j~®_c–ع2ñ-¼”ä°:7Ý­áÖüÓqsLì„qsLì„,9¹{ª-ÿN_´ýWxˆ¹¦vB8ˆ¹¦vB–ܽ¿Õܽ¿Õwˆ‹šgd#ˆ‹šgd 9aÍËÛýQaÍËÛýWxˆ¹¦vB8ˆ¹¦vB–ܽ¿Õܽ¿Õwˆ‹šgd#ˆ‹šgd 9aÍËÛýQoúrý§ê»ÄEÍ3²ÄEÍ3²°æåíþ¨°æåíþ«¼D\Ó;!D\Ó;!Ën^ßê‹n^ßê»ÄEÍ3²ÄEÍ3²°æåíþ¨°æåûOÕwˆ‹šgd#ˆ‹šgd 9aÍËÛýQaÍÉÛýWxˆ¹¦vB8ˆ¹¦vB–ܽ¿Õܽ¿Õwˆ‹šgd#ˆ‹šgd 9aÍËÛýQaÍËÛýWxˆ¹¦vB8ˆ¹¦vB–ܽ¿ÕÜ¿Õwˆ‹šgd#ˆ‹šgd 9aÍÉÛýQaÍËÛýSb¸ý“;!dbµ5t¡ÆŽ…µOp~ÖbµÈõé÷€€Õ°æåíþ¨°æåíþ«¦VÍMFúˆEžw5Ì/Èlëj-È ç†üäÿÝ»û6ܽ¿Õܽ¿ÕcqXoÎOýÛ¿¹Vó“ÿvïî@lØsröÿUWòª æ ‡SÝ==*‡†üäÿÝ»û—(ñfA&v PÌ/±"KêIä ·p¿u¡¥Ûo1Ýëžì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½ì1j—°{ЄîÃæ©{½…ø€Ù (ÿaïBw «Ü,è)9 z_uU5¢û#Þ„ uU5¢û#ÞuU5¢û#Þ„ uU5¢û#Þ¢ªáMkèj"â)Z×Ææœ¬#qéBÿÙfox-1.6.49/doc/screenshots/boskalisday.gif0000644000175000017500000006362411637250333015447 00000000000000GIF89a,á÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ,,áÿ%Ù(Ë’¬¶ $h¡B‡ .L‘âć!^¬ˆÑ¢ÆCzÙ±$Ç“S‚ÉÒ¤J’(Wº”æË–5qJÒfË %[¶t :T(P£D]ª´iÒ§H£2…:UªS«T¯VݪµkÖ¯XÃr;V¬W³dÏ–]ëT–®FIØ$Z"‰¤6·ÚH²kk×]7@oÙº5wp`m‚¯éºeí–®kƒÛRÌØ1ä[’)7~9ñâÍ—3¶ÜyòhΘ=WÖ%+I Æ+;‰›¹ml¹i³ÍV’¼ï oƒ÷o#9{£½:´jÐ¥5“NmºyôÓΫC§®x·ð[dÇÿ¶}×VKmÒìšd[G@õúœFÒÝÔzï·8)?|…·I´‘DÚ¤g`Ä( z!¨Ö„iUˆÖ…LÍ… IDRB$$ìÕ ‘w`H´á]nÍ•FaM¤q[r¶˜x`Qˆ¡ŽlY¸•5–¤AœÖ4!ÁØF ¾%§˜]êÖÄ^¸™(ß@‘( ±I2@üv› æ%Ç‹ª¸ ]HÈgÖ¬·Yc¶H§-s f§œŽÑ¹'ž}ê)ØyÖ9(Ÿºøé™#qDÈà^[¸›YªXã^SúæÛ\¶¡‡¢@Æ ‰jMdƒYóY_§b–ꪻ´ÿÊc°Êú*c¬¢J+®±êª*¯­Öè†%Ž ±‹ –Ç©ƒ–À“¦Ú‡#’0Ðmɘ¾ñ$É$ °›` õÓ-n!äqÛD‚Paë–”c!o_EŶ˜R‚ Õo½uï½û¥¯aþ>UÐ-ÖÞR.B;I"Ø-ÛTŽ9ö$‹»Áu\ËPåÒ°Èø œïQÿû¯r—ìrÁ0#,³r§ZÂ1{ƒü°$º„ÌRuéî@$ç|K,Ùgq¹i 2PÁé|±Å •ñÕVg=õÖUsµ×Zw-ö×N[ÜPO¥MõOê"TvÙÍõØa“mwÝxƒ­7Ýÿÿ4Ô€ŶÛ›8ÕS Ô6Ú0¾ bG¾.ŒO~ä’ÛR¹6[N9嚃>yo£‡Nºè¨Ÿ®ºé¬—îzê­§þXå¡_>º5›3ŽY¬»ØŽ9ã×8®í”߸ìŠy®ücŸ'ÏüòÎGßüôÐSÿüõÒWÞ9ä£yòÇo¾½ðÛàþîœCë6WRGîWôÓG÷Ç‘Iýõ»ÿüup_ö'?÷ð ¨À2°€ó;`%2Q‰ VЂ¤`/¨A z°ƒÜàm&‰8H"'L! ·uB98…rX¡}L‰"…*Ì¡ w¨Ãò0˜!Ýðÿ£ î©Êvš¢â–ÈÄ&:ñ‰P„b%°@,X±ŠXÀ©H*@‹VÔ¢·8Æ1â‹`¼bѸF5Ž‘oT#ð@JàÁŽx¼£óÈÇ=ú1tÀD ¹Ç8àˆL¤"ÉÈF:ò‘dä6þAÉJZò’˜¤dùx§Nrò“¦©sîÔ› fò”¨Lå6ê`E:PQ‹U¤,ÕXEWÖò•X°åsIÇ,Êò—Zt¥+µxÆbæÒ—Æ&0ÙJ=ÎюϤ£3§ MjJt¤ õhÈHzó›à ç!µ‘ÊM’’’°Ä?ö‰Iö&ŠKä™Å€¦¸TfRÿD#zƒÿÏh2ÿhW@+QÅ,X± Z̳°KY.4—Eh¨`P,°Uä±WN”£­bjÅš4¤}(&ЇJÜ1v¬ƒ aÚR:fbŽ.¥DY‡—Æt¦8})èS¢R¢›âLªRÅyÎLn£=m dn‡§þƒ'½’S¼Þ™Õ_EBJƒOÇz¦44ÕžÿðÍ?¾Á„èe’¼!ÅV¹KWn±Š»Ä‚B)šW‡bQ—ÂÔc-õxÌ]ö–~…¥bq‰Å`^󎃬&%"{MÊ>“²}ì#R—ÊÙÎJ•@ùG¤ÚDõ@¡žsª¡ Jñ¹‹^LdòÿD=h½dT÷‡´ò…äŒ*qþÁ›Žt¥g4©-}iEVªô 6åir±@‰žÒÁ¥+]ètñ \rÔ£"Õ"+©°SÆT¨5ÕiPépSLôT½î©±+Sö•¦tجg÷ÛYr¢B£­-ˆ4Û€J(þÚW‚ß5ÆÁ;%"UpÜÐIœ­Qµð?H€v¹Ç>ùY¥CÝLèR”± µk$›MËjsŽxecŒ¯Xâ-Š‘s$!3ëÌ÷xÇ…æ )Sýò÷ÈLEå6&àÑnCMȧæ\{*ȬWCySl&ãZÅ•+·–œ¤·[\5­”´Å@)„’·ÿÍpñ+?JÆ‘J³ë½)êëR™Úy¤µ(œópâB3”¢È©B÷,Èö®xÏ-%êu…ª^óîY½.ÍéNÓKShÉ Žä…uËž¸'ª­9mP†`z ¥7F9•‚§Èôj_`Î5&·gAªÑ˜u.^mÝ\nšÐôñŽmLÆYvÆwme. ImA&;š×ö#‡jíi¾Ÿµ¸é_]_²”\^í•[Ëåõ`ÙÊé¦òâÖºµ®óš¤ä7ê½o|ïÃßßðG@ó-f<{—Ðr#rq¬Ç^¿¦0­¯£µÙÓðÆ9¯þ.C¥Ýf:FܽB/·%]S™öôá;ÿ¦iŸÓëÓpûå‡Lbî~Gó%‘( L¼f½Z¡ì犙2‚ëmn]óÚ×Ì”hs£ÍRƒÚ7ÇÝŽfŽwüm:;Ô „v¶]«ÈJ:y²?¾éMûhÙŸ~ÛƒÄ.&\ŽHH¸ Hˆ»"Ù@ ~`´€¹ÞSÅwuÓ©U¿ò{bdÓ`û8ßE§d´A7¤™íj6ðiŒÒ eæ`y*_•7\¾R7ìH‰ÅŒÏ9–¾ÌCtï|Çú¶˜Òö©3¡©ihnÚÓ‘ä‡îwÏ6’ ØàýîiÁè=Ô(# ½Dv¯~é<)‰ÊUp ”xKâBR%®py=ä_á¯}ÿ×çø^j;¿ÛÄ®Úí\hËç5»xõ¥Ó¡^ßc_:›g§ãÊ:ÈöF³þœÇv‡$|ºG@€hwØà{ÇçY}ge­õw¬}êfe[Ö° D—x¹P;A\ÄåxÅ%]ÕuF™'h ÇKØÆhuäyÐä~„]ÒäQÌ¥‚²ôQ£7Lõ…G;r18r,‡Y«×#烃$€ |´Pw¼G H`|H ÁG€ è€Ój‹`.£"ójµ2·eÕGI²)ïÔYÂ8”vv´EvU]*5v±g_‚Ô‚œg_awY[$lÜåP¶dP²4TzVG-{9e„§-Vˆ@ÿinhHÀwwMÈ`‰l0|NhwÅçHtW…º Æ—HHp…ÞÔw†HxGa«…xehO¼Æ›6ze~†8Hùg‡t€r=ö^õ%]*xzjdPÅtv"wS„DƒêY.øc®wmˆHG†Š ˆwvׄá„t·{ØPЉ¦I31ò’ŽÉçñF8‹¨4yÝu¬g_Ø¥g>8_z€ùHGÙ–ˆ46z·ÔQdôJøM&M9US:¦gj÷L=õèeG†”€¼‡w´|y§TH‘¡|åIóDHx( O*ÉD»@y.]”€xøˆ¡—l(—gëÿe{vQZäuÅR¼$qÝçh,fix¤ˆß6YކYq€‰€ØÀ_–¨{â’ŒT;¨“<¡ãIª9˜ñ<†bj†hU‹¯—m“…_t8HEE‡Hh|´mø~±LN×K,%u §‹õXÀvÛYǶiMù” HFºÇ€V¹HQ”8®èDH–i¥f¡‚Wåp­WròňP'„,¦ŒÀˆ]E…~C%^Y4R…Ƃ҄rÈöƒ2_8Õ‚úh^z¨i³YH€wÚø”£xd‹Ù˜W™4eÑrV‚“Q3íÂ4¶ÐN(¤9dY yUÄåœm(uh¹Gm¹^¸y”2ÿHp)”Ñ–E¼”Kg~ü÷bö€kiMD˜r/Žä”¼‡˜ |Œ)œˆäDB! ÛBŒ" ÈÙ I“,Z‚‹gpE\fY_ˆh‚ÑH×6dÖÕh/ø‚úz$‡p;h]û({A¸gFeTøWƒ}ii÷H~µÙcŸ…™È{U œü°‘þùŸ®²½Á'@ rp(„œVV1[²£VtÖÉ.Ù¹½vY4 Y¦¹iµç‚?ÈS3yš–€Ðc[úGVº‹Ú„–[Š ¹‹?†Ïˆ]F¦˜ÙÈ¿éYu§£; Ãn§r/ð¶e%ùD”ÙiU9O6P³ „Ae”yÿèc×öbøèq\ê|$Œ!—c•g©Ú—*šˆô_Bù¥I„u¦ À,À ˜Àª­Š °*H€@žu€xº£¥¡`‡2rR0xâ£,rb ²H™˜4y݉]¡IGÒu›Ñµ—w”ƒI~Úöž& ¦Ÿ ›Ùšm9ö¨Byiy€€芮纮æÚ®éj®·ª{yúŸTÃnóte©U4{Z0>*96·d†°ó¯[sšy‚ÿÇ©˜P›Ý§c-Sº¢xTœÖê²gr¹;–›/:quPmRWíJìz²%k®ëúSÀ².Û²0û²2;Op€üÿ 1›³3»³:Û³<+³}²B{'ˆA'ë‘(±´S/ª²Z†ZD3µ¿“;3·{¤Œ¼Œ­·±—Šºˆ†8YïÉ¡öum…Hv/Æ‹Êö×}‡¨”K²çš²s‹²u‹O@³z›·|»·~›·/àqз„û·†[¸|«ÅP ŒÛ¸ªðˆ;¨e¯ò"­51w¢Ž«ånøòŽÈf•`‹• T/¶¦Úº‡"wl—åhŒV~‚©¯÷¢*:®š°“†°‡vW«®îвt«²0û3¸4;¼Ák¼,›·þáÈ[¼Ä+¼ÏۼмnP 30Sp½Ù«ä ½ÃË«†ÿ¾Ö "– k@’Z¿JåR[@q¬ŠY¢9S Έ±z¨¶ö%v÷Ň(]kúbAˆ¥˜*›Žúº»Se[‡pÙb@HS&·¿{·l®}{¸<¼Ë[Á‘»Á‡[ 3 r€rà’0Š †‹eª…0·@Cj" z ñáY"m°-…¬Ú`Á5òXyÌêÀdûµ.Ö}6ÙmbûL°¹¶zH­e»@ź•6¦Ød{üÇŒÌ8¦zi ³Ã+`Æb Æ6Æ={¼ÑK¸.ÀN€ÆÙ›Ænœ¼Èû‰ðr¹wܲwl½ÎÛ²°F/„’ZSe &VCƒCÿî1¨ÌÙNÄ5W¡ËÀFLÉÌHº®K¡\ŠÉûcéY·7‘Tú™?­_ŠlgùG0¸S•`¼|k¼0Ër¬ÁØKËz«·/«üз\¸½\ËÀüË4«SÂÉÂs O Ó«·LKxûâ³B?!n`BCa-¤=ã¹³èakÈ}@h]›V_X[TÕz‡î‰vŠG®©­¡\¿¸¹Œþ­lÚGóŒrîeYzd Ä›¼Áë·~;Ë>{Æ|»Æ‘À³Ã»ÐÐËÐ=½N vœ·wLÑËìÊ ½ýò+©X*©…*E늽ÁᾟKI?ì†wÄc<˜*]{’ÖÀ—åÉ¢ÿ‹.-ŸQ÷u«÷’*:Ó*MH‡G\ì·ÝÐÄûˬÁ®üعOM³OP SPÂO`Õ!¼ÐOP¬Ð¼|üb[v´‹ÓeBáÍ'=¡kËgö¬Î°{Ï«µ˜ÖÖ°k“´]¬k‡ãúi{ÓYú¢i{S­ü¼Â¬ÔFí½püÊ4K ðrÜÇýØ]ÜÅ,;¥ðv,oÂy[ y«·Æ/·¶Š®ònAѧ«o¹bûfo³ØTçĆ«ln½Ä¦ÄçsÎ%Îâ1`° 6`:Ðç°7p3ÿpï41Zx¯€ÚZ°ÆŠm€z hx;¬ar%ã\r>u¿Î¦¨ŒM<}lN±êwµ-Úà¶ýµÓ˜àli‚AͶ ÙáLÔb.æ3Û·°Ì·/ {mP¼Î[â( â*Þ-@âÈÞn;1@çHÀIÀI@írž1°í1 '§ý€Bae³ò,Í×Z‹D*²-@žx§Æd Â}¯‹ÄÔdÊ÷Ý™æ<„Öæy; +Ÿ:FÛ^Z×üë<{×ôß”áfî¼-ÝßË×Û·³üMý7°o7``~®èè5íØ~í×^â×Nç+Žì'Ï’13÷ÿ¢|çéÉG¹—‰¬‹Ó8ø¤Ö1½ÛêÄ,÷ÓÌ™ájÓ l‹y˜Ïëêk[”ÞÆµ/šG®W ÓkË<ËÏØޏ3°H°:íÓÞ,€íØÎf?â)~í-¯öÊ>çÖNítŽòjâ黊S†+̃'>—eÉ/±qé:<¿• 4)ï·©äSÌ¿fôTn¦nûï_·ï^²îõ¡æÓõ¬ÉV ݉ ÌI-쟽3°…nç)òfŸ-@÷vû-Pí&>ç+/÷+û¶Ÿû#®¹j’+9R[ü5篿㒘 v™ð¡zvÛp9Àï‹cw–åeÜX‹gÏÿ_±Ú˜yôײ÷í5A™ÀÜ¥æ½/ÛÌ®·€í±ÿúÔNûwÞú'~ûuoì±ßòsžÿ¤ “$LZ<ØÄÖ6[ÚnikøP"Dˆ ^œ˜cEmÛ:~ôäH‘ÛJvôX‰:¹Z¾d¹’¦™3ëÔÌCO%<”êÐÌC)'M›,if¢C)M¦IiÕI©&Ô§Q§FíY³&Ò=&íÉ2¬S°B¯ºÌUgÊ“)/¦Ì`ëVuÙÞµ›w.Ûµ3nlhÒE $Ø„EAÂMf’b cÄMR4|°EãÆ‘!Ú} ôèÑ¢IŸFZô·­]¿†[vÿìm•”*Å„4ÓQ›·¡­Ù4kدY1ÕšuèWàK‘ó¬³ùmÞÇ)«Î©2»šÅ.t%Ï•2—f“©’[¼|ÛÃ}û>ûùñõ¶ýËD1cÍ“°ˆ±Ë4K¬2ÈZ¨ì1ÊCpÀ‚DÛÅ[tYÈIÚ¤B["¼…BÑ´‘D‡@‹pC )´†µÙVŒ­$´ùÇ–$dl#%«4É…+™ºûª)¤|#/'ótâ‰é€*;á¤zª¼žd:®ª&±*8+L’&'£Êé6›(É$Kت¾¼Ú;“®»fxë­v°!ý »Œ1$ll0ÿæÜ@;)k¡ „Ô0ÆÿX`(4 Ild—60ŒäÑHÒh´GCŒCMÛ£ Y0܇EQ_k£µJÿA¢ÆmÜP¡UWUPVœPÂ%šˆ#Š\w+#Ū’I_µ ¼èð`ŽH.uújª"¹*²È&‹E6;:‚ªöY*ǂʎ¼Òt ®2Ûê+®)6xónˆ ýþ[Р?õ$@ÌšH±þ3T?~ƒL²ÈBqm‘0ÃK-¼PG@ QÓˆ%‰Ã‘Hn©Ø’mFU’ÿIb›6nù§ÆJ0A“-³+×&¢xùe'œpU‰d}µæY›p¢ )xŽÂ‰^o¢ƒè›T^Kl…rØ£™“)ê±ÿ¦¤)H"­ÅÄúÌeïL6éjó±7ØÝ&dp‚w»¬±Å Ä—Î+“›îÉ´3ß$ævŒ…kH[Ô`ÝÀЖG ·ÅÃåE’H"vDK©CŽG-Õ#Iftq!Û’òZ¬‹Åv%•ñ`ª'”Mo*Ž:t­Š8rU‚V[i¦¹ÕXqžµÖ$lmÂV]g¯cv×»Ãê+Ñ©»Ö»¦§¥£rÑœÁ¯²ÿ*ûúteA $ âS Ë ÛLn:^“h0@?¼ÓÐýðŒ¬OËæ4Ø!]D[t4ƒmqƒˆl!š[œh€ ™ fšË56äÙŽ´¶=j%)&, wªõ¼ÿ™u¼Î1º-)DƒÙÏ£ÂV-ÁU.ÌÙî`%³8Ð0 7± ¯ E¨¡/SÀÞnÀ¦»{}ñ‰ðˆ.$ô¿’fD#Â:t@kPhŒ#ÍÆBG9¶ÿæc¯ùFmš×ÊE›;\$§)™ºfHØÆãL‚×dÎ6ùª;m¢2¢fBXÖh‰”_%R¾áAÓ¦Oî eGzd "Ï $jç'ÏQŽOèvQ·÷‰¤8 Z4@÷¡Œ1îÀþô6·Š]íÛŸb/`nFOjÕÅK•éÌÁFs€2$ç8Âí¸r UyCt¡ÅNv’¨ÿ©Jp‡\`ƒ¸xònpA'O(Ã.–Œ:@ùÊ™°26xqLTâÉØÀÕ1‘e\ÔtÀ…˜¯3en8ÎeæE–ï¼f^´tÈ36¤Lå'wYeO¦3œåŒ‰)‹y¸²™µ¼ç*¯¹ö+«)Iü®ä6ÃkæZÅúqµ¹‡Yî‚âEñÝ 1¿d®E™ 3’´$U£0+ ],v± I‚$¨)G[D"FHÎGlaM ²„`á¶ŠF±2³õ ³ªÂßÜD,Ó9Ò´‹V•¢²¤7ÜòMºÅy“¬’e¿ cI%*ÜV¾½ÏnLLƒ'±á7Ô}k½×ªÿïgÊ| l@!•̦…\–4 1˜­‹ãE9Ó!ý; bƒ\ÞQÕÆXM ~ƒ •`M•&æŠpÈsµÕn©´Ó‚àS5à§H‹üŽvþhx¡Ï–’‘ß £Å{¡¬ým¿@ª˜Îð­n .nHϺ ÃÏCJÔh(DÒý9³˜¦9¦EÔ¸°fÞ°æ?üñ1ýcckOû?¾1Í}Ì}îtìïS:Ë*a«H.¿y¸O.Õ¦ iZž/UÿkÒÀù';ÇYÕª%Ä® 55©YébÌã —„8ºoeÊàæR‹î¸Ÿî•A•Þ¡øÂî­)ŽR‡÷uŒºÎ.3W:ÿlŽÏ¦6ò%íÞ{SZíȳIDª=ƒR_§ •ƒ‰”Žw˜Õ`™,˜›ØÎªÕ£Hð­mƒé*ÀÞ·®/_ƒjA‡“€ˆ‚ômLX)V¥¡ ˆ ŒýIÑá&é›!„‚b ù# RH©Àª¸ƒ g Û:c*¬Þƒ mˆ,SiƒŽP‰Ÿº 瀪rS©`ªHr¾ä¡>`Á>Z<åÙ’¢p9æišÔ* ¥ò ò"¨[:„ð—Î1ÅÀÁÜbŸ4@„R((B@¨Ó¨)R¥²*ˆ¶ñ¼Ìè(|YBƒ8ÀнœB)2J 2j#[…б_Û8 ,q°°°šÿ@R9’û¯dQ¤ojÁ%‘ÁŽ´HÀ‚‘$I’„€* * ‚‘¤(HIPÉ”,I—Ä,hÉšÔI,Ø®bÚ•Z@SD¬1ʲ…W”À´³,CŠ"¹C‚ 6d¥º>©’ „¤Šf‰-¤ª#䩎c9ÒrÁŸÚ¾f\°"­ež5œ9:ȨœÌ–|ɺLI˜LɺDÉ—¼Ë½„,¨‚›ŒK8LÊ#¤â°š ¹-q¾8œ’P¤f<9ûJ™ãÊìçA$¾ƒ¯âÉ,Î,È˘4Î}Éæ´K™DÎåÄ‚á,L˜ŒÎ¼¤‚…°†mÐ…`Q…Q}ˆ2òˆÙ†}Ñk¸ˆ]°©Ìœ ¼£ —Ð…–€Pdé#Ф'7tÈ©lš^tÈË’Ã-Ù’ç`K„Á\`2˜Hn‘>#ª¨˜Žß,Ì‘¤ÿ—Ä‚¾„‚ˆåDI5NäôKÍÎèüP˜„Îã„Ï>mÏ¡Ì4 ×X¶Ø·³ Ø ô`ÐtJP±Ð–œIõ¯­0’¥Á#3¼“¯ä˜ Ú©™°¯ÎdP4´Ðl°ý‚§íÎ4Í,pKé|Î猀 ˆ¨»¼KèDQåŒSÃäP¾´K )#‹¸cý›™GœVÌ Y&̬¦ ü‡‰”Jñ8s “¿ÓT³@PICÈã¦HmÍ,FêhUˆTš¤6ªxÁ¨8 7®èL©1ªªØTÂK7â¸Ð3ÝNætN(€¨€ˆ€€`X¾ÜKä´KÿˆÝÐZ•ÓºDNSÌ=–: ÄÂ8mpTl‚F¶£ÜGÉS¹…R¡Eå6Ž,WïоŠ$¿c¹q²O\Ÿš -ªÌB°@ʯ/yH›uHÑb Y•UWÍN¸ΖDL–,Øã”]€8Ø ­ÅÕ ‰íÕã„‚ V:íаI¬K ÿ!¦g È\&‰(¶[ˆ7P,ÐÀ‹©¬’Y¶‰m*§ÙJ–ÐÔLI4üÍ}ª6,Ȳ,­jSÕ/F¢"¡òE†ÉàdHï0Æ4Í‚¥6’Ô\,ÀЖ´N‚¥†mS…¸Úƒ]X…MX¨xØ9­¨]²ýÕÿäÜÝæÜKҘ¾±Ž^ÿ±…FÌtœc«”•EÔÑÊW¢òHŽ<ÍåøHÙÚ¾<¼ ªÁÔ j­þ W!YŽ,Ùܧd‰)š‘ŒK,˜>ÂPÒåŽÃÌN÷µ_ÒµIéôU„•ÈZ„]®uÝ­UXXد¥Óƒ•€«€†•ØÔu`¯MΗ궜…ø%\0Ñ;ÂÄP< âùµâX ÎàTbì|b%fI,ˆ”¼U/vS@`×eã7–ヵ€3ŽÝ8~Ý1.ã1c.fcgnåQÅæmÑ…ˆ±íQ‡ÈQ†gxìæ“@g’PçtÖ)¨¸RVMaA·Ëê§Ò^°¸MÒL¾šcJ£ÃûÞúô‘¤XžP&ÝœŒ6']›Ôö,afA0µŠªz'$‰WÿjÍKƯ™ j×z5·xK´/{†Ã?_á e·TâhkÉ:(Ñ÷ÅjVNÓ4¥ËuXëÜK8^XgÞÚ1vcž\­´þh¶–¶†ë0>à…]¹ã.㫵„dÕ¹8dÕ…ÆÉ lw £c½k Ã)™J¹h‚4ؘGan}¯7ÔÞHE¤À%%×èÉ…w£H_± ÐÊM½*RÝ)ç™Ã´\mƒh4}h‡Fè(N%Ì+®`ÿ‰mà8fØhfãj®Ú·në˜àž’Fkâžç®/–î ~nXæÖÅÕþÉ:ŒË1ÃáBK€” Aœ±„O±9J‚Öp¾íÛÖ¨À&H‘n%°r¯:Bª ÓFýÔËÞ,þŠ-aeq’ôBwöê™íúŸ”JÖ”:À1â` 9 aÚ… I‘šv»×èÖ€N°•¨‚ØjËÂUËša$ÍHtªwø:Hšm\çs[0¤À‚¹ì&5GQÿuø\ɳíÕ8Ff3ã2îè‘~n¶6ñäžö@7ñùmïxj·ö“÷ømÇsKÀ®’R0‚ˆ—zy†À½ƒ÷ÒÙ–M¦8Lµ¤«ÈWs»ÒÝT­Oõ¬dÔW™£šàÄä U’Ú¦ßíôK–´êê\S^­Õå,ãhžàÖíèVXî!û÷hAÿx‘—Aw‚kGùj'ñ··vnô_¦±Bg- Á{ EÒ µ-Ì©šj¹“»¨»¸3üů»Æ7;»Ó«Öܤ…ÚÁ¼‰ƒœ{ç.=ÒçxgCjŸà© ' Ñ‘9dÁ‚Ží<_ž¸_¬Îm¼TÎåäÐ9ÍÓ—|Xÿ³öb­õh®´é>îk/yOH‘ôÈ$ˆâ'þºGû=Ê3ÞêÿŸÔB-LÀ¿‘À k;(|DI«–j¬Wb6_Zyæ oK×UuןSa ×[g¼3å+žjTÖ áTÚ›¥KSL)¸‹5KÍÅT»4ÒDiYxaYMìÇSÿ´‘„-þ³M%Àåe›a²õæ×^~™ffpðÃ6¡½Yb¨avZe=Ò±g“UvŒ™íxãkŒ–×_yé&muä†o¸Q‘GA²ýeÿ 1ó©O~dCÎaDº&¦ʬ’³zÞA â«_áb!©œ•Õ°†¼&jxÈŒile<M­y&4a˜¼$&å ¤9^BNºÔä½(ޤŠóº¤âôÌ9)j=f Õ‡¾lnèãµùÓžò´§B-'NoªMö•'õäÆ>£*U}ŠòWUÅ-øbvÇÑ™ÞsDšºè%‘— ɪÿë0É5#^M[1ûÖ^þÒÖŠERÓ¸LˆÉˆ„°eëÒQš¿²ë:ÔCÊvÂ=•8 ˜iù'ž¨/œEUßúÐyÔ¥ÞÔ§<Ý,Q;«ÙÑú”Ö˜'$€Z õ©lhíB§:ÕÔò °ƒnû 6xÄ—0S»ü*]FáfÑû( QëËè!Q‰\ËgD]m‰j4ËVA†8.ý¥©I'Ùæ°«V ¢ ÚT’£ %(í¹× ÖÓšºà<ä­gñ{ÔÑrÖ§ -ªRIà¥êÍ©<Ã-nÙ€6@H@«‚!Á`$@‚fƒá &Àl¨ªl­ÿŠá_ae?וÞL‘9SulP‡å2!>æˆÔ`¬ ¡ÕÚʵ‡‚Kf¥cîX[6UG¼Ž2m0^ó"ö#G)Äj‚°”(`‚Ïà ZÎöW¿ö¯h÷ûßφֿé3ð¯pÛÂc˜­ƒ?0,a›˜Îl˜Ñƒ[b~ !Ï3²sƒ)üÚ~¶Í¯bØ r^6éL±Tyæ¥ó·>v.IA}B!—Pz y"A¨³ë‹R´Â´#§¸™ç;…ò×5–¾tž9¿B-ó¯,`3÷:Ílf£-P[Uי€Fƒ‡Kü` ÿ™ÁÖ~í µ`ÿ þsžûÉ6’t‡«kºFŽùë|×!ƒ•æ‰2WÝžþññ}Ä!Ë !µq˜¨wîrÏ«½o)«á{žÄÏN8­,x^N1‡6Øeöì~1nìc[ÍmÖ¦ªOpg»äö¬¶ ¥`lˆ[±k“"Ú"­j(ZÄ"ðbSli$¶Š@„L¾ŒÎ%›k¬‘PèÓãj ûÝ*no½+!IKåä°øì¯O=Åìw<à5UØÆoQ3¾ñ XɾgŽM®ö©2z;.õHuÔ¶¦›£I±¹ÍJh^çxº»Dâ”ß©{Ï÷ñºT¦÷j¦®ìðÔÿ o@­ãhÉ©õ±{]ã¾îü×·ÞY`k<µX;ê×® 9e^ß¡.]óŠtÄïèÝžÞ!¶„Mfšbô0 ^1kWËH½é­ÞìX1N@IÔ "/?¹Ï¾íäºèÛ¬ýÐõâ]÷<ØÑ `šŒÌ*æÇú/§þó¯?ýì¿ûãß~õoC³~úG8ƒó^oŠó"‰«ØŒìõt„ ¶‹¹EO™°‹@ÇqYþUÑIÌL%JëÉ~ÌÉß´S9m^°…]Ç•àçqÝ’Öæ…Þ •Ù È\hÃ¥ØÂ\èB¥@NƒÜ ƒØ ‚ì æ ‚xަEýÍ”ÉÿÀ<Äy—šˆ Ó½^ÑS`ÙˆKÂËÝEÏÉ€C¤Ô¥½Ü¸=Ÿâ„Ä…X_eéeŸøµá±eœr æç •$XNå¡î!Æ|ÃžŠ¡Åê9þµ»PW uÜ€«¹ÀD¼¹œGVØ„Wu@Äwéß?áó)–ÄÜ‹N´À£ÈÀ£¨DžÀaø­Ù˜‰žÇ©¢×­ €YÜ÷±¢fÈ5|HXäÐ`W4BV0¨¸ ê‚#XJ1^Jå çü¡YˆE$”…6$$LP¼ŠýÅ)^à›´Ôº ÷4ݹ@Îaƒ¸ ”¥IF KÚpZ»üݺuÿ£«ÁIP°Ä}„b¢ð„;Ñ"Í¢öÍ!š‰r_øõ𨭙%lŠªDB¸A\´D’@pL\£ª @#X$DJÂC‚ˆ:#ªˆÈˆ„JÊhÃÈ¡LA“ Ü€„ãÿ…„¼¸K0¢L½CÉ#Ü1â »M“b}â&\Kl#KàÑNЄ•À º¡@®¡+jÜÅaŸŽÞ÷uhiÅ.TdìÜ‚[Ø‚[8EV4,4[€5ê"Y‚ˆ-€ÊˆdYˆ…<£$ȰEý…¢_Ɖý\{…8f  è„¡²Ø$5¦Ùü¤Ò-_ÛôrO¨MЉÌÿ‰M€ ˜è [U®¢?öãçu_hÂ"±]%MBæ„ SXdl¨ÊÈeTä‡x¤è¢.¸…ªª”ŠH²E$…6 Ê«ŒE6º€ôIŸJHtª½H7ö‡Q´ÏÀAQ¾Ü©ÛÚ Ú@aQT¦P…N8€Þˆ‡8A 8A¿N)A@Òá?ª¡?ªb ¤i²æ@ŠÞSlÊV,ÅÈhÌÿT£J‚5$èSH‚.4£H¶§X´Á-\( ºMHÖJl£ó…hºMœ´=5Á‰£<"á'º”à@dÈ(r@Á¼g{¶'žì‹žÔDg©@±‘V‚žTâÿ',Òb©fÅå§€ŒÆh…S ƒ°ŸúmÅ€`SdŒUÐeçÅ6¸AŸŒ¾Íž&P´@P …=&J ?´ÀÛA!Ô½Éëå@øŠº€@Gà@ä€ä T ØÄzô(ÝÈ‘÷ [Vd †¦}ò£V’ݰi€4ˆ/¦ßU`J¥0EV`Ì•R ÇÀ —vŽ64ÁÀĨD|ÜhÄÄIžê©œèÄeÆDD"LÂäÙÔž›8GØ@È>ÊȲÎ{¾D4@@€sP@PØ´@,Š¥Rå™ iR*ö )¸Ò¡’Î!×U#§>ˆ fi•ZE/^΃PÿŒUh‚lƒ jƒÐë5Ø«5૾Ò+fE ΠqèáÄWà¨ÚÕ©€ ”á¬Ý‡JJ™ºÉZŠÒéHðêG¸A*8Á‹Î€Ø²Š¬ ÌêPð žðßܨ³>k@ÀË6$ŠA©çÉb¶ò§¸âl‘R* jæPE¨ª_æ\i ¶«¦jŃhªðáâ!§n˜ Áð‘}9AM ÎÞt ¢Ô‡Lá‰Õº«ê%pOy¶½ÈǦC3D‚Lì>JL ÐGxüÊêm ¸Y$@@+äÈì4]Ÿ¶®f+®àâ’ ~>n£:®OL‚,ˆ¦FÅÓ¦ÿ_/nŒ¥hEçjjƒpîÆdE¥ŒnÈXJ»È Î`WP….´ÁÃôÉÖJÁ¾Œ¨ÄÕ.Ì~ Œ|艫&€ÞÅA=Jç¯ÈJÈÊGP'އ Å(¬þ¡Ìß$Uf9¥S–Qh“®Ì®øBÀß‚ är^¶äZ%Îö£Ö%é€*E€hŽ€“Ñ; 4NEÀ@¿ó}•‘ùj²:בSÆóͰRŸ('@C«(ƒ2j´A"ôû:îQIq,Ktä¸.VpŒD?Å»vîü5N±€Z…0;Å5Ðg+âµO©,Ù—à8ŒL‚@{–Q|œNZò8E¼@Ý6ö«lOÿ@ „“ ³O(@„r÷&ͰSÇ0}‚àö @t2­vÉp„vS¿bR5+ˆï?G€ùŽÎr\nÖrL¥€4/oE§5ú¹uÓ"#Èp4GLFgŽtsnÅÌïR´ÁH‡–úÜ‘X¯:¥_O5AŒ4™Gð²)rL é8—,ÄX/ÁØ:Çs'.Pkˆv= õõ%6mr%vg­Ï;×ÑõµÓ=ë·R«³~´"nöÑöAVjQq¥æ0±ä€ ÆÜ2F[øÅwæNÎÆ8Ç °\?…^‹u›AœÄ¥Y7€IwYïº)8ö~ä) Ÿ#[6ÁÑöÊÿ‘j u6áó<›Q7%Nvl_r Õjyöƶ‚ÏwP7ykïc'“QH²}:êÖç™M•öâÒr*æ¶nælñäd´/ÎàÓ²€X÷UÀ²ëÒ9Tˆñbßv÷l±½¤À‰ªÄ82-Üx!£0ß:ð@¿¶xyRÕð‚{¦hï7iWº¦#Õ‘?:ç3– ¸P_ò³6€%WõRuÕÿ°¹];ÈT,Å-÷R44ýjާ¼õ¦ô:/ ·q?…Û"±»/o)ûœ¬±¼…sÉVÕ¬2#Ó¸õJµ<ŸÑf÷j›Ñn'•µË3¤oz6m¯hƒ&ƒ“;‚/8Ssÿ;©“QP€)Ç3hªú¥ï§oo0¦7D#÷“Þ:¥w€˜9êÞzÁgLüz4åH·üꂞ§¹£/ÏJ¼gE€KümÌ5HLÅbC¤„ĨÇ ¦ûMeyº‹ûSãT w¯ùb“eùM¥v¸¼RÛl¨Ã¥s{’“ºµ›{tù%¶#griB%YÂÛµF;4t7F'H,—5¿Kí03WÔµºREŠwV×›à×1®iR2+@Åò$(¶¼½Ç–¬fûjãüQY;ïöºŸQ¥T'y<ÓÚ<¸'~˜@f{û>¢;Ñ·“Íú=â×<¸ý¶ï¾g?º;U@ߺÓ;G¼ª`g±y¯3wtƒ.‰üUT·®¸Å³æ»ˆsŒ5týR™ûчyõX³@›&Á¡êÞÍH ü´Øš2ÝËý“Ã3@P"@ÁK P „€ƒ( b¡Â6|h°¢AŠtQäABb|hráG šè8"Êš -Ö,hë–­m¶tµ5”'Ñž=ƒ½ÔZOm=­ýiKÿÐkA«êZjkÐ¥·²nõ*4h×[i æÄh3m[µ8uZT[B€$üøaK‘Â@ lxóR<[ $PaØA„?"Tx0åC™R$xРǘ:(Ptɉ !¼èY4ÃÑSha#K›p׿¾½V¬­k<£ÞŠêshUß@‡7MŠ´§Ñ¢CZ*ÝuèÔWš]º.'lÙ¾½|Ûñk ŒÀ†pŠÄìùÑú;˜°á&'H±éɤù‹ £Ö"뤊(B­?ŠbS-!ÌV)6ÔT˨•ø5›Rˆ%Ór’K·· p¨©–#Ê9® +*©«´£ÿÊ©âx2.¨¯X$N¨­´ÒjÇ ®AK7·ÌC<CÔ© H苯&i¡¥É&!IÀÅCpà ìÈ1!ìr¢‘jkH´ÕVÛȱ2Q; Í5Oc($…à0‚6BSDòŒ À»ºŽ«á®k:©n9[lÎ(ê mñ8í„;´Ržt‘I‰ÎKÏOwëS¦,ÕT~ Q€¯ðí4li&×ú£õÀÐ`ð `iÎ0ǤìK\aÖ3/êõ 3pÏ>˃H¢`TÑQèz< [EµÓƬ Gm*ЃJ×P[Ú(2¢ð”„w·gݵ ‚»NͰ$ðÿ ÇôlA/TM²ƒû+A¦ƒJЀ‹0,í`YÙ|ø`ß|Là\ðpÂ!Å#òÊkÃÕ%¸ä5™©¡nKÒk/•®Òž~»”;àKSó8…·x‹ô”È‚‹«MA“Óÿ\Ó¥ËÐ00i܈””LR(2{Žs|ĨuÕì‰|óMY„r.á80Gt^óXÖ®!qêgFj[+†’0@!ðA‚öÚÈ&p¤“Ãè⤵‚àp~pò\ƒä´«Ïˆ-ˆ‡ŒU2W7‘ˆOˆ£À™ø-› ‰ °[à>i¨H9oxFñ‘¶µ¼kqq‹Ó™â'F¶ô¬zñz¥+¥G´²A‚a¹ >äÔ¾‚ 2¤ …µ¾‡$Avy ÖRb1¥¹®AuŠ!À$+Ñ\Æ}ñØô’d‘+©À–’”9qÔÃýæ)¿ËJpÆ‚.Þ‘å+ÙÞT” ¦åAÕíbÿÉ0à_ØD‚?ãã*’  “¸È™lP¨Â± 9dC‡¹+€ÀKãÜü8ªùc ©K=£g:`9râ s¨°”ÓQu# ÓÙæ¥sœ[iiͬ½z)dÚÚaG%Ì&ð!70“ „äé!¾”H—¦æÌ‘ o| k±v?]”¬ÂßÄ  øÔIŒ ÚzRne‰ÝÁ›q~bÛšBEâ’ài+¼k¥k§ø´'$è®¶Íf†Kj#>&Ñ:!Ä «®ÒNsLÊŠbÍe!½6! R,YA¤ÀK°¬ @„5"N’¨HÀ*²¯ŠdaßúÿÊ¢¾¶ÄPþ»ßýâw(ùµD~m`˜Áýµ/‚å9—GFkOhTîy@›ÑLV0”{£5³–©Æ$&ƒ$Ð×PÑHv2  ‹7G  “´$fè<”€0ku.yPYh%Ü ­ÛxŠ6~bd°$Y»h²5Œìäm@¹ÉHÖÆ5¬ldâðhPÜŠ—AÙ£ì,Q+OQeÿèÙ©#B®ƒï…Hô—'n º‘­•i•yÈö½! £¨šäç5­t1棌1+¿Ì’"!ðcûøÑ|š#¯•AlïKÿ×fW Úp­õ<è©KjUŸzÕ©nuª5aCÄÿ,ãšYû¬µù ˆ@zK¯î¡fº~z(­4Lb+AÍÈÕ^cÿ³n ›üy¬hÈk HÀHV«çx(–6ˆ&)ƒ ˜+œÒ‘Ä»%цwË; mhƒ,n yK" ÄÔµºÀœà ÀÁN |á/¸&lQÜy7T ª8®ý7K@ÁT´Ûhòü¹®nèή+€ d!‰"ˆN`Çžª e hÍJlC‚îT€º «!DÍç­Ó“ÄÍ@™ÖJ$â-o}óûÝnʼ%ሤ@*)¶¸ÃNƒ+¼× Ç€Ö±>pˆ vH—ùYH) ª »Y!ÿo’ÇÕ—'Љ©6˜KI‚Êç'‚ô9Pî úÐmÏd‘Ívͪ1†€Þ¶]htLñI;äO3@Ñwœª§¿ñž÷¾ì_¤ó»'^O¸vký¼^;ØUq‰KøÂB5nÚ‡Féà‚>.Se\Õ5®¹jšÆ®yÜ` Ò•Ðe 3Ëzh±6Hð’9Hz'/ù8àÒE?iŠtä†ÿZ'¿ÑEž(À¡\]õ­_½Â®zC|Ö†M®ËhnŸêz!“+!„¢m-ºD² ‚A¾ÐDÜÆ ܈hvrh¬ÈfúhhZÌtæ'Æ(ÚËö.Ž-þDb€eÿjaPÔo(Pä,ឣfrd[n!õäogâÎìYd¢mØLÍ6¨^è%þa2c…àäAj"à%hI™Èçñ>d7B F'6Ò§ù2Æ|Iú`C´fŒ—€ÇZI¢v{J±älã;fÌC™ ‹i~äD$^#¼êÈÚŠ/AR Ñ.ÿ¤ a Õ‚¤#P(å e w¤ m‹(Ø/ìîëöhpìÖÌ&r0÷ Ñz& ’±Rq…”…”é¬T+«¶ä. ú’-Màݨ¯£âî™-2>Â&¹„?v¬°ü‡-Èð‡èH’E–¢;f`ì ;Ìowrä!Žõ´îæ8`á¨Rþd¯'-Žö’KûòOò mzèt(‚¿†" vRK€Žš 7ð LÀÞ1Oÿ¨‰N2*ðNâBB±R€Ç6ÒÍü¤ ¨@ ‰él!Ü ÁZ¬Af óü«zéÚÀZd"9àæàïલ"m¡;’ƒ QÍpÿ(­Í"ÜxŽk„IV ‘¨f©P¬æÎ´`.%K€SähVBŒ5‚'W( "ÃöOíj"]€Ò*! Ãþ+ßÓ*’âä ¿¬“1mAØE¦Âêäïëzíý¬’"±ÎµR›zð#AÊï/ÃtÌŽ b$ÏÆ6Ä$|¶d$γdG/ÕÇ-kƒÙd"p/#Ëø¼Q»±Òçì4RvœÀd b (ò`(ÿ+2³Óÿü‹Z¼#!ó‹¿Aê‹Ó6Ó!iðEÃŽþ0ÎÍÃÖ|íø‡#³QÇv,| HK@«ÊR@îLcNB#~£0fùL1YhòI÷3šíJ@Ã+z\ C[ l † °À²¨(¡+ª¥-ÁQ,!lD å4!ó@2AèÔNñtNõ4OïÔO÷4ªcÅHL€.÷tp>mïžTqÎ×z- !ñ TG˜ªp ‚ÓØ d@˵zhºoAÅmùxhÆÂ~Œ^BZ1Cc €‚ ° G®Å ?©%¡e¬Á®VD,A~5XuX…µX‰õXƒU+È÷ÿ40K,“™ós£‚à _"ò4'í‚b:b8m¨™6‡¯¡ü®S·Ä,âT!FCj´'B¾04j`CmALOn¦£‚†BMõFE~âÈT*aF³ÈvðY3U%T5^g„f) á¬Ø0A´Š5J¬.B@tT©T%FkH¯‰B³±•TE^5f5_© )ú‹¿To¶AM—HEþ‹ÓÅ`®×Ànán3Œ.²=Ò+á3 ƒJÿÊm°VÓ ¬•’*༼mÆèAì±`Q¼ÐkÿŒ$ÿ[ÓçLÕ- ÝÀdÀföôµ'ÿá¿6SürUEVôìR’é –1àë4Ù³=ÙE^Á##o±U Ýkzú§#±µW t¬~[•pH d8Q§dåùJ÷Úh‡Ñ&>ÿ¶f S:ëK3åÀä  úM”cWå@RnDG”ßÄD]t!„öྎ4ëö¨nmrë©+—vz óöà"ÍøDv 1Î ukÆYh6Éö~$fN¬U±†~¬Êâ΃›Òèf  ó®N¬EŸ#‰ÄÀüëÝŽ1o¤3Ïó3³îE–ÂÑPk±Ž„>V¨l”ÿ´/ŒÀ½¸r5ÿf#k“P »1%´5T§´€}ȧˆXÓr“Hº‡‚Îðœöæ72Ï*¬$Wâ(5iRò pÀˆ‘øˆ•8‰™x‰Øˆq(–•µÀƒWV[³r%>Ÿ–â\s°‹åO:ÆG-ç&õØHn2J c°uØÒbìŽ>É#¾€èd€ h`(¨ :óæ¤ž#1Æï’¶3oÊÊ9‘¯A‘±ì‘¯,’y EâV±uqGK{a'xÂÐ.b s9Ã8{Ǹñª'ž<ƒyи.|½›z6¤PÚÈñ‰Žè®C?¸;<&[L©@ˆ²êþ½ê…”œ},HÉ,~Ë+ö],Òœe‚¤¯5™Á~Ô§UÕùâsö§{±½Ú)ž…Øð»/÷»É/MjÀ^½ ²€Ÿx6e&ÿ8$ÿ¶hJo6yÂÖ-k Ú²vë ­ƒ·tÙr¨-áB'¸hãÅ5fäø$G%ÿ8v´r#J•5žlùÑ¢ ‘.[Ú4YÓcΘ/Y¦ä™ñgÍ”=5PP@… .fȘPc‚ §RJˆ!AF„5 Ð BLµ-$˜ÐaÂ] uIl+ð¡Ü¸Úb{W®Ã¼sÕîu;á„u¥a94§È+y^4¡ä&M¢Bq"®˜$râÍwJJÓ$e—•WŠFÌØ¦ R0uaÃi¼Îp:#B Ý^¡ø¦B©ŽX» Û 6Ëð [ÁÖ^[xÍasÒ¢e½ õ‚g×.Dn×ZdÇ6A›}Zqg¡çÙ…¹¹¼eÔ8ÏëÔ =üú7É =š€R2`%ƒ»ÿÁ@UTQÃn&HX€…%âu]Zq9¤\q=ô–DÏ-´‡Ç¡\lùuÖ`eyׯeäYÖÞKþµ™%Ý—Þ{#A6Bâ§Þ~<*æY~é¹h°¦” -XCTÀ„XlY…„4@á„xÔ Â-´¢\Çig rÏérÝCѵ)×›¶»{"ì^ £Ó¼ºÉOzxaœÀ4÷ÂÍÉp†•‹áælHCÈ ‡ 3sÄÊYCiaƒ&‚°eNu[ B–ƒ—É)/t\CÞ4¶ ë K„âR¢ÿÞe‹tÛbÇØ,’ˆ:Ïéâ‹Ð¸œ½”¨XÅ©¢‰—3"gnyŒbû¸Æ+RQ-E ãù¨¬‡éÒé8ңˆ ¥¡3šE•ä| A°Lƒè)–CêsâtÌ„‘ÓE>åÓ[†Z¡¶h¨AåC2¤¬þT–[í“W£ÊÕ¯nÕ•1H8_Y´$L0®Ä“8§²öp›VõéR–»Æõ…Ö\&^‘#Å"â…E šKM=4Ø`f/~¤Ó§SFâJ‹+E\NJXÀ 6§A¬b%RÍzV."=,_Û–É^v/ú\å` J.V9)Ý£AåÂÏéðs¡¡¼$r<¹FÙÚÉ¡ß)ËwB»ÎTñ`?\®sŸë¸æâºÿÔUju&ÝÆQÜE ½«Áóµ ¼z#ï˜8ÃλÝáÄÞõºo(´› ×Äë¥ÐnÑñ`yçû_ÿê×¾Î/ ûy`îåwÁf°ƒùÛOò-˜½Ö8°…Œá _˜ çm¯wó›Nä‘ÐxÂCÞðD,<ááÑx&–Þ6\Œâ§˜2®ñŒoc š˜Ä;ޱðHh0éÙ˜„0f1ù©âYÉ>&Ñ“Œc—åÈ5áöh0§ÅïËò"hâí‘0„^&³“ï¿1«¹zí#ñó` ¾/C™vÄî㤸9·#BY ás=×s‘às¼‡mfˆDiR "UæÖÿo”G’²Hˆëˆsn Vx–0£{»n°ŒšØLG<$”g I° *z¾§‹0£ŠFy%RF²„P«&oìôa~™×s»L'ŠèºH‡GØ–@yz&Ex MÀ‹>×¹ˆ>w d¨g”G‰ 3˜ò“–·# u;\‡0Ùâ§w(å‡+Ë×€i•’@™bçjª¶VÕx+í¦š c Z;¬“‰›„˜yßW‹µ©777DªC† Sœ¹;šv0³eV0kZ„N¬¹;¤ƒsa07· 7' ˆ‹ÙsÛ` ŠX§ˆ>‡miäð©;¼SJv!ÿ úÖ!ZmL%GØ'—XH‘’ 'oñzÄiP„KI’w\—G¢Uå)ƒ0'„É¡!zvyn°‰ä…Å·i‘‡¿Æ'â¶Å…J?‘ÁÒȧ‘Ç0.JÄ$j¶•D"E™§”¶ 㶤Ƞص °6kƒá~Ç(€Q{)j|¯u qp ¼×˜²pssh½éA‡”Yzu¡<ÉÄ~K,ÍÁSJ{r(U4o·pz‚´w¶à‘0H¹ PQo¤VŽEx.rm…ÆWbT ©Nn•W|TRf”ep1'Bˆ'à‘¤a¹ mpŠz‡”HÙÛ ”ÉEÜg,÷V žSÿgŶæ¹Ö¨R[Å7dW…åH¥FmH$mó¶Y(êUa—EÕ÷W¶´£­ƒgËÁH gõzË×WÒÞØpW,½RqwB†(‚pçCgáv¢˜€Í¦+è×l$Eº"PPiÆ 0Ò(D4{æi¬²õ§wR/DLyãxVbwgª:KõÔ¡JS¥×J{¹C‘7"¨I÷OЧ®,mĪÀš‚lâ—Þ”EšÈ&YCp-UM[øFË×"‡Ö_…i, ÷®ÉšXû'-™Z£J²|"MÕ”éVX{bYÅQªV´y7SpzxÉÄHë©RÄ+>Ûª_tFgv‚Sÿ” Û¢’ºkN+KÝG}‡\Ö¡~"UI5r´õk´vMW q•诅‚hùk©¥¢ñGŽéD;²S;§ÃŸ®3¸su‹ã;¼c ªƒµãŸ§ƒ¸¾³8¬ ¸+¤eÊ:²ó:€!®“c³S;§§:†K:‰û¸²ƒ:mJ;¬s¹”¹ß¹‹‹·w‹·¤Sí*¤’¹˜Û¹ªó9€ :¦«:Ûð:¥Ãº»ã:ª3œ£ ¼³û¸»›Ó°¨v¢¶C&åMR—0q¬¤¥¦}‘SwÅD{W¸t¨¦ºTn®µ­äI0êÇ\ÕZGØë¥¹âr㻾ÒKõlæÉkËë!âØy”"Õú«s±¹žÛ¹Ww:¬ºV÷·lsª«º |uÔéÀA—»¹Û:ÌÀŒÀ¼u¼À±»ܹœ»#üÁœÁ¿“Â\Âeº¹,¤œ¹¤cÁ%<à ¼ÀŠkÀ6|Â’P (¼¸*¬º9üÁ ”=ÜÂÌ©F;fox-1.6.49/doc/screenshots/filedialog.png0000644000175000017500000003303411637250333015250 00000000000000‰PNG  IHDRÿFd4– IDATxœíÝOˆ$Wžð_,s˜ÃÂn]†9Œ¡mM™¶–ÁôlVÔ’Ñf×<È….›É”F…š=°:¡†–+£5`cú`Áj5¸i©[dÚ,íÜ]c‹©±ªí…Ý®½r«µt ÷aŒ`0ÔŸV>DGÖ‹—ïE¼ñ"âû"+3þfü^ÄïÅ‹—Arô( ÖÖ º/9zDß ÖÖ)I’¦×*öÓñˬ­Ó·²|Üäú@M¾Å°{õF- þù•÷—ŽgÏüA-Ëè‹/ö!¶’ü‰ÒÄ\¥ŸŽ_^þÄ öÅ_äÞ?ûì³ ­ÉªlÝ|Z'È{öÌH+ÂäODôÿþïßÒ“ä %Ozòä =IJž<¡'O’ãÏ“ô}òtø“'ùÏeÓ€›ô³äúÅ_ á€3¿!ðÍ7ßþ}÷]ùì>»Q:Ý7ß|Sç÷h-6É#á€KÒ3ÿ¿ÿæé™û÷Öÿ9ýƒü»ôÕƒO)yò„¾ÿƒ­ÿÓìÿgþŠÎîŸ}öÙe Û"À“M[t A4Ù|TÖ[u~*—5øéÙï®:Xetæÿ¿î-Ç{æw~o™ø‰ˆþ×_߯™?@ÍDvQšeãðóc²¢eª¬SÑô:ß V7û?ú›ÅÊ4óW¡Ù Yò³I‚ü¾}/€6_óÿûâäÿ;‚ŸèúÝEÿ ’?€‡|:{.kÒ×áÓ÷h £f6ñïÿÅ£{Ÿþéòý?ük4û*»&ÏŽ`ª ù?‘þ}ö—ÿˆˆîíýÙò³¿üŸÿ•ˆˆö~ñÇ…Ó~óÍ“z¾@ˉ:È•«Ò㟽g@ÓdëÂW‚ŠÖ×Çïà;ãýçºòÙŸßþ/èð`‰ï½.êÕ."Kü²Ÿõ5I¶Ž²•Í×ïÐÂkþìíw :‰¬lÜ¢á²{ èÌO÷½É8E- g%ùW}_p§OɯOß j¹äŸ>ѯž§úeÎÿäǵ. /Ø'õžõ¥åÿ+gþ¯Œ^¬g צ·rï¥þ ›üzÉ güzÉ güzÉ g¤ôPuûÎ^eó~3zƒ⻕Ϳü%ª,È]‡ƒu?½½Ñô*€"$ÿ.]nzZg1oz ’‰äèQÓ«P¿ßþ-£É‚à;ŽWª€ä¯!X[§ápH³Ù •è<Ýf{\*ë®3á&Ztjðùã_/ÿÿÁ‰ß¬tYHþвÄ?Ý$šþlFÁÚ:¡eÀÖ™ps峪M¶Ìl9ÿ#ܤ‹Ž–ËŸ.$Í.|¢˜²Ÿ‰Þëúüñ¯éĉÑãÇÒ‰?¢ÏXiÉ_Ãt:¥ÑhD4ŸS2Ý\VX¨¨9nR’%D,_ƒ º3Íãe’óåd `2¡å+_Ñh#ŸÏüm“® Ñ|ùÏL>ïĉ ‡»®X%•{…¦É‚8N)Žc]¹’«,Ý›S°¶®]0™ Í²ãG¥‰Ÿ}_ˆìðYâž.&ý“~f×!4KøeÃu—ãJ¹‹OøUrÞìÏÑÿügì´,Ѱì3•y”\Ý‚œ%þ8Ž—ŸÇãe+@fº©v&_Ôo€½œÀ/àšJ3?P®&öò >Qâ':>c¬¢@”žùWyö!ºô’U°l?ÑN.!¯&ô²áÍ‘å¢j®ù×­ökþ²Šê°¢Ê…Ê{•õ’áf<ÑãÇ¿¤'¾GAR2Òèµ·húîÛÂy±•¾ß_qàÇ• ¨BÙY¬Ý.ŸpˆÈy@–ø—k«¸IÎgÂMš¥“ô³ìÕUàL¸IÙ· çYtéE–ðt*IrÞj¸š§gü™²l×ü›T{ò7Ý@UO§2ž(ñg²Äÿøñ/•×-“=vT j² €ý/Ÿø—ŸVÔ•%þŒË ›øE}\'~[*—^²øˆú4ÍÕ5~Îü+V×u1Ñr]È&ñ´E5¸4Ád (MÒÇŸÛžùï/æ›…‰¹&‰y‚Œ(ñgëQÅ?Q°\¢)•¾fß¡ê*BMË,Îü+Vçs¹fø¡OÜïCzýL¯ùç–ȵ2¨T TȦŠ{ˤ?±øI¡úv7‰•þT×Ãä×8ó×ds`(šÖ‡ß™†aH“É„Â0$"w‰ß´É?›MÿP'·ûáj‚9NÎǯ«MÓ–K]þÎßzVDTžø]-#›wn¶o~ý_¯Â¥7o:üéþgþ%lîfUT[*«IñU—/«¹–U.øÎyY%À4ñ³×ùùkþ¢÷*ÃÚ'Ÿh’¤ú3×êNü"‰U³u-.õtø«Îü ¨|AÝÚ“Ê0Õ—éõ"|%àúõ›ÊËÍ‹ÿ_ô^u@»èÿÎß§ €o‰?0Zölo3f¿À™Ǹº| R ˜Ífx@Q¿Ú«?&TâýúÂ,ñ‹æçj{×u‡¿"¦¿À™‡TÑoÀeK@ŸÔy€\ý)¡|˜Ž*¿CÙñ*K8ó^W1¨ë"6·ˆÆ™‡T¾ g¹ÏÚ¦+èmÛA9£› üÔl‡?Ÿ·ÏNü&}öÙçZã»Ô«ä_${èö ÀT›;üÕ¡ÊGö–Aò/°¿˜ÓÁýM¯@í|>c{HþoFo4½ •@ò—8ˆï6½ ­¦vAòk8aj—ßhz ^Hþ=ƒäÐ3Hþ=ƒäÐ3Hþ=ƒäÐ3¥¿óïÊÃ=úàÍèÒû.(ÝäçÂ¥ËNVª£ú\å;üáiu~S}ñ5ÿ`mF¯½µ|~=´ƒQòÖÖi8Òt“(9œQ°¶ŽJ@K?Øg:Òh4"šÏ)™ ‰În +¸\ÐN“ÿxóøÿ×· ‡EQ„X· bÜ}ˆq÷•ÅXÆê©~Óé”â8¦Ñ•+¹JÀÒ½9kë(L-5™L–¯ÂÇÓáDéA£)EeL·üõ­¼ºŒqVùw±ýSwšÞ«Øþªó4YvËãÎRšÆêwþqÓ`0 ñxLãñ˜Fs"ºÇô4<»IÃáÐfÐÉë[ùƒw†À‚ ××¶rãì ‡ràöc”‰jñ1Veœü³ÄÇñò³¬0º8_þM7 ý:@tàБõ áËBö^wXÑ2DÓ‹^ùÿûÎ4Ʋí*‹ûyÙöGLÝrµgÿ³Ÿóã•ý/¦RndÊʊl<™®—=ãäÏ'þLÖ ðüó?¤ñxLÁpFÉlH£×Þ²ZQhNDd—²³Âäè‘ð`2¬l¼ìŒƒ=óÈÆËvì²ùö…MŒùí\oÕxÊÆEL͹ܫھ²e¨#ŠÊJÙq¨l=ÚPö²«°:ó—yüø—tâÄ÷èñã_šÎpsÍ?«UmooÑö¶øö‚³Ù¬÷Í,mÁ&"R<3¸³ ðbÜ}®cŒã·Ìbœ²º½/¿ j €6HÏt~3z<jîí€wŸÛ5›CSVc¼¿˜ËFÎqšü3|% ÎrŸƒßꌓ‹ßøƒ>_¶­/ëÑEMþþÝ·yw•h›Ü 4m%É?ƒ`øÇùM~ÀoÆÉ?X[§Ñko¡@Ë%ÿ`m†Ã!M7‰’Ãn—Ð"Æ×ü§Ó)F#¢ùœ’Ùè즰€ëþíÄÞó{òúêÏ7ù{‚GQ„X· bÜ}ˆq÷•ÅXƪÃßt:¥8ŽitåJ®°to®}ç$–ʘøÏ‹æzr8˜Û‚FQä|ù&7ýpyÓ >ÜtÄeŒE?3Ùÿ›Úæ]-;®b\Çwr±Œ®Æ±ãÎRšÆªÃ_Ç4 h<Óx<¦Ñœˆî1¿1<»IÃáPi^üÃLž‹ìb*{ú;<‚Vì ç2ƶóa§w°wŸésŒ“–øã8^~–UFçË¿éfù¡dµ+ٽ˦“ÍÌUùˆ×*ÇÉ·¼ç„ä•ÿ¿Lc\´MEãªÆ†Σ[–PvÜ<Æ×fÛëÆE6NY“MÓæ8º`œüùÄŸÉZžþ‡4)ÎÒ{û¿ö–ÕŠªÈ*} `²»GÙ$YkLÑ0ÕyË7%‹.%ee¦Ï-E61m[á2$1T^4Õ²$›FeÞ]);¶û1‘ý¶×‰KÙ>¯Ò¼ßÅ8ѹ›£Õ™¿L“÷eÞæ ú¦¨éPߢc;a®×£K\ƸJ&ñU¾ëeÇ6Æ&ßÕ6^&ãw=Ž.8¿ÉO•‰Ÿ­••5ùãš¿[e×mè4çCuªŒq¦©Xã„ ÕÔ~lwªã4ù7yÆOÔ¯ë5M0íXR„oÚƒfUcß!·N8!HUcYlmöñ&ËK×'ÿ0 i±X,ßÛ$~Ù)ú,¡..¾}?€W©ê @Fµó‹ù£¼äUc“í]6 bè–Ñïü³Ä›c2™P†Vgü¢ €I-Ñv –Æ÷„¢(P~v4—¢_qÈ*wEóЩ ¢â(gcE1”§s¦®ZÎú\vªŠ±é>^kÕòBÔ¿8ºQ’$ =<ø˜v¯Þ WF/æF¸}g.\º\ºá‰ˆ®__½~´½½•ööŸMß}ÛéÊCuÒƒDz`PëAšPrtXõjCˆq÷!ÆÝÇÇx1§Óƒçè ¾›ïÚôõ%Ú½zƒvßûÀÍ5ÿ¬·½½EÛÛâÛ Îf34Û´[˜ˆHñÌ àÎ*Àgˆq÷!ÆÝgã”Õí}yüåQK´Az† ó›ÑãéМÖˆq÷!ÆÝ·ãýÅ\6rŽÓäŸá+Áp–ûü†8ubÜ}ˆq÷‰b|pÿÒ´•$ÿ €œßäüfœüƒµu½ö:ñt î¨Ð}FÉ?X[§ápHÓM¢äp†ƒ@‹±ûo°¶N‡‡‡txx˜û û7@·_óŸN§4ˆæsJfC¢³›Ò;òAû°÷üž¼¾úóMþžàQ!Ö-”%û½½= ÖÖéúõëôõ×_Ñõë×—ŸmllP°ö}ĸe°w_YŒe¬:üM§SŠã˜FW®ä*K÷æÎ濾»3Õ'÷у¹-hEFË`ã©Û&Ê€l™*µ]FÕöööhcccÏÿ³KDD_Ñó4™Lhccƒööö”æ%º#›IŒMáø°ÊÕ~ìöíÂþV6Æ/œ;¥4U‡¿8Ži0Ðx<¦ñxL£9Ýc~cxv“†Ã¡Í" !eOÿb‡Aàd'êÊŽØ&é͹¶éæÍ›´sòKzùÛ-+ð/o|›vN~I7oÞ¤íííÒøà!Mþib?†z™>§Á8ùg‰?ŽãågY`tq¾ü›nª?ÀCtmQtÝ×ëgûøO•GsŠÄR4ÉãCUÊYÙüUÖ…ŸŸlþMÊÖùððNœ8‘~xv“¢›_RôåÉ´"v“Nœ8±ìP ÑkÑ8ì:¨ÄC4¬émØ6.ãëjßR^eÚ°¿ùÆ8ùó‰?“µ<ÿüi<S0œ¥÷öí-é¼ø3QáaÏ&P;­Wv÷(ÓGY|U¦+*ü.[–j9+[¶ÊzŠÊj6^vàjòñ²YÒÿôÓOiooïøŒÿÞœNœ8‘VÎn=ó]zùÛÑÞÞ}ú駹ހ,•}“G'¢õÇ#zõØîÇDfû;\VöuŽmÜßê¢s7G«3ÝÇû–%s$ûæ5êR§J"q¹Ü¢§ÌÙÌW4žeúæÍ›ôÕW_ÑÆÆFz¦ODô‡czyãÛôòÆ·‰žùC""оúˆ~ö³ŸQtó&ílÑ3ß%¢ÑWÿ™¢›_ÒÖÖ]¼x‘ˆÒt¹îÀ õñy?FY¨—Ó;üÙ$~tòŸiÇ_ œå%Gh6›ÑÉ“'é믿¦­­-úŠÎR-(Š"úŠÎÒÖÖ}ýõ×tòäIç‰?[Ĥ^¾îÇ( õ2NþaÒb±X¾7MüÐ..:×ümçáBWÏH‚µô7ü;;;ôÉ'ŸÐÅ‹éæÍ›´µµE[[[tóæMºxñ"}òÉ'´³³³üÝ•ëSŸ°Ê× @ñ­žQ³?ÿÔ¾ÉdBa'~¾#FöÞÕï9Á^þߊ¢@ùÙÑ¢øêNÇO#V´,rÆÏ_Ô9I…ïeuccƒÞÿ}úòË/i6KŸ¾™õüÏ’Âp8¤÷ߟ666œ,SÖi¬h;ñÛ±¨l€œÍ~\ÄtW™¾Kû›O"J’$¡‡ÓîÕôÊèÅÜ·ïìÑ…K—KwL"¢ë×W;loo¥½ýçDÓwßvºòPô ‘Ôz&”:\>vâ:ˆ*C‡‡‡ôÌ3Ï,÷msP¯ʆº¦÷c¨ãýÅœNž£ƒønn¼kÓ[tþÕ—h÷ê Ú}ï7þø–Q%`6›UrÍÜc )8 ÖpàhÑþxñâE:yòdá8à?ìÇÝ'ŠñAü'JÓ:íí¯R €6H:¿=ž‰¢ÍМÞ%Ø»o5Æû‹¹läç?õ#Z­ÃYîsð›qòaúÊ÷mïûúùÛ©ûD1>¸ÿ@iÚJ’…À?Nçþ3NþÁÚ:^{ ¿Çh£äŸÝtºI”Îðt-€1¾æ?Ni4Íç”̆Dg7 ŸöíÂ>ôcòúVáp"¢(Šë–AŒ»1î¾²ËXuø›N§Ç1®\ÉU–îÍ+¹!~ŠTÜÀDæ¶ QÕ´VæDìåÿw½a.Æ×å2ÆMï—mÚîurc¶ b,ÆÆø…s§”¦±êðÇ1 Ç4i4'¢{Ìo ÏnÒp8´YÄ öÖ PþÞßü;<»\[µyÝm¸Œ1öK?¹Œ1bë'Óç4'ÿ,ñÇq¼ü,«Œ.ΗÓÍò‡4,ïÀÝ?ïK êaúüïŒ(žeÃØxM'šFöžŸ/?ŽÎ2UÊuQù-Z~Lc¬ºÿ– Sy¯²}Ú¶Ýëd³ËâQõ>-[ÄØŽqòç&kxþùÒx<¦`8KïíÿÚ[…ó5ÃòÿȆ£Z¯ìîQ6ÉAϲaüpÙtº;uY9r±LѸ¢åfãe3“ïã‚MŒùïeoéú)nû¶m÷:Ùîǹy5¸O#Ær:ws´:ó—1y¼/ºßŠšuéÄZe\×eÇÅ2U׉R]“\ÆX•ÉwvÑ4íÓv¯SU1®sŸFŒÝp~““Ä/RÔ¤õ+»vX7¶Fnøcâíb §ÉßUâ'¢\³jm~0íXRÓfó-Æ,ÄÛ Äˆ,’†´X,–ï]&~ ‚?\8\ÄSµSPUº\&ëL²í¨Òq̹Žq]û4¸cô;¶cQZxÂ0t–øùšÎü›—>7:3¡(:~†t™¢xšÆZÔÙGô¹JÇ!UEóÖ™—îrëbc–i¼‹¶¯,Þ]Øîuj:ƪóDŒ«Q’$ =<ø˜v¯Þ WF/æF¸}g.\º\¸A³€]¿¾zýh{{+íí?'š¾û¶Ó•‡ê¤‰ôÀ Öƒ4¡äè°êÕòJÛ4ˆq÷!ÆÝÇÇx1§Óƒçè ¾›ïÚôõ%Ú½zƒvßûÀÍ5ÿì:Íöömo‹o/8›ÍЬÓla""Å3ƒ€;«èž.•_ĸûãî3‹qÊêö¾<þr€¨%Ú =CÐùÍèñtí=.Ó­ËQˆq÷!ÆÝ·ãýÅ\6rŽÓäŸá+Áp–ûü†8ÉueÛtå{€bÜ}¢Ü 4m%É?ƒÂàç7ù¿'ÿ`mF¯½Õ©NP}`”üƒµu‡4Ý$Jg¸%#@‹_óŸN§4ˆæsJfC¢³›Â ®û·{ÏïÉë«?ßäï EbÝ2ˆq÷!ÆÝWc«Óé”â8¦Ñ•+¹JÀÒ½yëo„"búÚ¶-r8˜Û‚FQ¤<_ÕíàzU-Ûõ¼ªRÔt¨Ãt;ºO6¼Î²ÄçKü]ŸŒî÷uÑíãön‚Ë›7u¦u±|~¼>Çžçü&?&‰Ÿ­•Ù(jF2ibrµ^uÏ» e×m¨ÆÆõx®Ö«+ªŒ±®¶ímQGŒUc×·ýË7N“¿í¿ms ÛŒ$:Ô «z½š˜wL;–á›ÿêO…i™i³*blªmûG[Ôã²Ø¹ÜOÁŒqòËÅò½MâWݹue× ]/OW[h¶_¿·ÊYJ_øPèÓönB•1FìÚÁèwþl§ ¢´ð„ah”ø³ùñ6øÏùaEó°™Êz©N#𮍓ŠÏòÏøžPÊÏŽæ¿+¿}DïË:~™Žg³^ùí±^8oq›`c–éþ–®CñþÑ¥íÝW1.Rtl3ÙOùiU öå"J’$¡‡ÓîÕôÊèÅÜ·ïìÑ…K—KƒBDtýúêõ£íí­´·ÿœhúîÛNWª“$ÒƒZÒ„’£ÃªW«R};`ô1Æ}ƒwãýÅœNž£ƒønn¼kÓ[tþÕ—h÷ê Ú}ï7×ü³šÜöömo‹o/8›ÍÐÔla""Å3ƒ€;«ð_ŸËc_bÜgˆq÷™Å8eu{_9@Ômž!èüfôxºöœ9Û4O·_?bÜoˆq÷­Æx1—œã4ùgøJ@0œå>¿õ)N}ú®¬¾~ï>AŒ»Oãƒû”¦­$ùgPøüãü&?à7ã3ÿè•ÆÛù£™.*`Õ쿳³S8<ŽcŠÞùTzÍŸ(­ DQ„ @˰÷üž¼¾úóMþžàQ¡GË ÆÝ‡w_YŒe*Mþa.ÿŸL&ÒBåêÎN¦7iýÜ«o7|É=Dtà`n E‘ò|]oÛ¢ùé.«oqwcÛ;VºØö( «\ŸêãpóÝÔŸÊãÎRš¦ÒI’P’$¹gÈ=¢JxÀ„XÙÓ¿ØáA`۵˳ûøÃeŒÛÛ¶¯¿ŒésZÙÛ_åQü0Ñ4Ëûp¯¦Ëì2ÛÇm»¢m«³ÝUã+Ìc,Û®:1Õ™‡Îþ*›¦¯eÁf?–mO“í\V6Š–-{¯{|W)_]>îx“üE5…ðg겂"zˆì!e5B•evYv÷(›ä ÛvEÛVg»‹–!Šo6^¶Ãö1ž"61æ·³ILuæÁ~”!Ûýxe~šÛ™Ÿ¦¨lèÄÁäø®Z¾ÚvÜѹ›£7É_•j¢·ŠšuØÄÆE“$;ÊIž«×eÁŒË›lg×óv=­î<Ú\Ö¼Jþlm¨¬f¯Ú$c3ËéÛ®ìÚ!´Ÿo1îû>Wßb Íñ*ù«à›kx²ævÓšhß;šv,öð)ÆØçª3Á‘×IDATáSŒ¡9Þ%ÿ,yÛ6û”]§±Ñç3ۇͶëóv¯“ɱwËdzlŽß(+j*¿Ék|b—UØÏEÓØ.³oòÏøžPÊÏŽæ;ÈâǾW¦SAD?561f™Æ4]ý}eA«—/G¼UËFÑqBç"[Ócz—ÊZ@DI’$ôðàcÚ½zƒ^½˜áö=ºpéòÊ—ˆÞù°ôö¾™8Ž) C¯7䥉ôÀ Öƒ4¡äè°êÕ‡ãîCŒ»ñþbN§ÏÑA|77Þµé-:ÿêK´{õí¾÷ÍþÐ<¶0‘â™AÀU€ÏãîCŒ»Ï,Æ)«fÿ8Žm&o¥g:¿=ž­;í€wbÜ}«1Þ_Ì•¦4Nþ>v7py¦ûãîCŒ»Oãƒû”¦5Nþ(Xí„kþ=ƒäÐ3•$ÜdÀ_ÎnòÃ>©(Iù'A»°÷üž¼¾U8œˆ(Š"ĺeãîCŒAÆIòO~zƒüï c¥J@ÙTï”dzG%Ñž|¿;Sr8˜_|DQ¤<ߺ¶mË‘ÍS島˨‚Ëó4õ]×b)ã*ÆM~—¾ÄªNÖÍþ¢ÄŸŠ‰h@I’¤Ã ïÇ\õ%„²õUÙÓ¿ØáA`۵˳ûøûq¿èäK«ä/Nü1A@Aç¸P©<ê“&š†}|°hÝe'ZF›úFØ>þ³hÛŦì=ûjÕa*T˘åÀ4Ʋ盧˜ÆßtYªß«­±”qùß²í^ô^g:ãsÙ´mŠ•®,«2NþùÄ¿8þ<Ïöƒ@9ñ‹žÄ'j†áÏÔekÑC`øi²qÊÖOe™*ãeó‚ZöôA_dw²IeÛ¤lÛšÎ_e9ªÃT**eÌÇr`cþ;ªî*ã–®·á²ºKÛý87/ø™LWvœîb¬t±ùX•QòO´$þ|Ó’,–Mþ®6²j¢nBÙrÙámk^+j:Ô¡ú½U¹î<]¬“ëùøT\ŸŒéÉ@Fg—×õXÊÔ½ס«±R%ËÇe´“ÿñ‚Baâc¶æ1 "R¾îÏîðE;¸¬Ù¨l½m*!ªÓÛ.ÇWe×Û®«qÓÑTŒ±íëã2Æ*qkòd¬dùX…Ñ™‡´X;R‡Ë¦þ8h0HžŽ“o~puÝŸo6âÉÎØiLÖCeú²uk;þÀQ—ª›èº7MĸlßêZmÓ\ĸhŸA¬êÅçcUÚÉ?9zDaH†D“Iú*JüƒÁb9NâÏ ŽÍA¸¬ðÙÌ>lۇζãË‚‹²a£/qoª’G”߯UÆ¿/±”i2Æ*úU¢|¬Êèwþ¹4É‚Iü1Åq¸¬¹;ãg—]t€}.šÆv™ÑÁ©lÝÚ(ÿŒï EÿÓN9¾#Žh±ï«P´œ¢¸­»NlÛPlbÌÒ‰i•ûfѸ]¥L•1V©¨©î‡¢8¶¨±RÅçãƒøï”¦ ˆ(I’„|L»WoÐ+£s#ܾ³G.]^ـقXiâ_Pz­?N/t|ÃwUz4z&”V½ZàbÜ}MƸ‰×l>>ˆÿŽNž£ƒønnœkÓ[tþÕ—h÷ê Ú}ïóŸú%G(ÂÜïù›ú‘øÛŒ=`‘â™AÀU€Ïãîk2ÆHüõåã2V7ùY6‹r Eâo»ô !»OƒúoGÕc MCŒ»¯™#ñ7C·Ã²“{û/¯9àa>€øubÜ}MÅe«œ=ÕAhëû@»ŸùGï|¨4ÞÎýÈtP«fÿÂáqSô·¨t:õ´—Ókþ";;;E*»ÉF²@Ï–cïë>y}«p8QEˆuË ÆÝWc™J“ÈÜkp2™”Þ_Fõ,ÓôlTtÇ)“yuùl˜}ddþwñQ% ëÛŠ¨•¢ÜC^DɹõkE…órõ½Ëê…r¦ÇUŒÙméûví[bcü¹SJÓTÚá/{šßb±(·èñUrùPß ˆ)QâOÅD4P~jc°åÉweOxc‡—ݦ»Mß»O\Ƙ…8ûÃô9 ­ìí¯ú(ɲiØÇ‹¦±Y&;Ï6'EqâŸÞ4$<OáÀQ´-ŠâÃ'&‹wÑ0ÙÊ?Ç}BQÄÿ´SÉ6ÖÙººÏÕÁUŒYEñ¶Ý·uæ‡2¤' ¢$Izxð1í^½A¯Œ^ÌpûÎ]¸tyeCEï|Xz{ßLdžaï7vÛd‰Ÿ•&þ¥×úãôr@ƒqUÙ‰}ÙÑ}YLš‚å¯6Ê%”V½ZàbÜ}|Œ÷s:=xŽ⻹ñ®MoÑùW_¢Ý«7h÷½ükö$G(ÂÜïù›úýMü¾œaû²"새ÏþîÌ|†wŸYŒSVÍþqÛL-°lþÏnáû´%À×ÄOdÞÔèš/ë!–žêü.øx:Ÿ¾È!ÆÝ·ãýÅ\iJãä_G/QðÇJ% áD¦ÒÇÀ¾¬Ï×õwãîÅøàþ¥i“? V?!îí‡kþ=ƒäÐ3Hþ=åó/R ZF×üÙûAO^ß*NDE®· bÜ}ˆq?±O®KŸááG'^0S¶ËX÷öŸL&âók€(ŠL“Ãþ¼Ëä†)*u1¯®¨*Æ>o;—e¤Ée«ŽßÄ~¬ÊåwÆþJ~’{:gú£Ðbì~ü¹SJÓ5û—=Š^ÅÃ^ˆP@«æCŒ¡Zˆq¿ˆ*&¢A£Oæs¦ÏiprÍßöÑEh,ú\ueód#,z-¯o\ÅXô9ûÊŽ[VTË;¾NsµÞeË/[f]åÓeŒuöOÕ}×÷íç3qâ)‚Ü<Ë*yªÛÎd_({¯2Ù¼‹>ï+ëäŸÝYÈôÀ‘5¯‰ÀÃ++²y›Ç>°…/+0mx0KU\ÆX¶Sò—stËCYM«:O›õV™WÑxu”Ï*c¬Ó¢ïàûöóY>ñ/Ž?ú˜îl˜jëNÙ¶sµ/”-_g¶]f[èÜÍÑÙ™öª{àPmJtÕäh²<4wÚŘ%Ú–&ÛšÏÅÿŠÆ)[o›yÛŽçª|VcãªLƒý;/Mü AâÏ7ý'ÉbÙä_–m·ëí-›Ÿîç}ã&ù—\;,£ÚìWõ<@Î6Æ:Lc‰2`§Î³TâÆži‚šãÄ ³g‰""g×ý›Úeååg•³ßù›v:à›pL±ó@Í®¦1ÖaZ\•£¾«#Æ,¸õ¡ÙÖµ8i± :w.¤8—MýqÐ`<'ßTì¢sg“ÇcY9AùÉsz“Ÿ*:Cp«ccW±©"Æe×’«š·o|‰qÕóìºäè…!QM&é«(ñ?¦»š_u˜^×7·¨ÏäY=Ò7“þ󄢈ÿ)‰_ËÞ‹:íÈ(šÇñº©ÿ^Wgܾq㲚·iy(šÎtÝl×»h9ŸÊgU1.Ú6ªqkÃöóQö}³Klj?¦8—•"w‰¿l_P™NÖa¯lþ²r"û¼Ï"J’$¡‡ÓîÕôÊèÅÜ·ïìÑ…K—¹îûD,{‰–K(9:tºâP­6ĸ-s_׳Êûúû(Kü¬4ñ/(½Ö§—¯Vâ÷ãýÅœNž£ƒønn¼kÓ[tþÕ—h÷ê Ú}ïýfvAD¤xfpgà3_cŒ¦;w\DZñWrôˆ‚ Ìýžÿ¸©‰¿ÍÌöã”A³z† ó{ÂãéPÀÚÁÏ›6'‚ˆÛ#6~[6ÿg·ð}Ú€Äßv«ûñþb®4¥vòGAé>ŸcìóºÉø¸ÎU¬“ßòV*ˆY«‰âwpÿÒ´N:ü@{ éƒÓŸú€ÿüzÉ güzÉ güzÉ güzÉ güzÉ güzÉ güzÉ güzæ[ª#Ü`´€3á&í/æFÓ@œ 7)I~Eñ]:=x¯xíí«Í>¤“o“$I’/ö‘œÿÉ“ýÅ<÷÷ïþí¿Iˆ(Ù_Ì“$ù•ÖŸÍ´øÃþúóÇ+ðŠW¼ÚïCìßùŸüx™ç‰(Q>óÏØÔJl¦€îkúŒ ¯xõá5SeÎÄ5ð†^¼âµé×:8KþgÂMW³€žòáÀ‹W¼6ý*â:Ç:IþHüà‚^¼âµéW—¹Ö:ù#ñ€+>xñŠ×¦_‹¸Ê¹Vɉ\òáÀ‹W¼6ýZÆEîµJþøý>¸äïxmúµŒ‹ÜkÝì ¸âïxmúµˆ«œë¤Ã*à‚^¼âµéW—¹ÖÙOýP[>xñŠ×¦_E\çXÜä¼áïxmúµZ·÷ý÷;ÿÁxA6Ó@?øpàÅ+^}x­#g&IRþ`üáø«úχ‡©à¯M¿ÚìCªö Ò.¡‡ÓîÕôÊèEbݾ³Gÿò_løOtùàÚôõ%Ú½zƒvßû ¼ÙÿÍèÊVêWšüëê|õ@o€žAòè$€žAòè$€žAòè$€žÑº·?¬º}g¯éUðÚ›Ñ+÷Œ9n6´6ݤûÔ?$.\ºÜô*x©()%ɯj\“î ‚ïhOƒäïHrô¨éUðÎÁýÅÃqY+¦­Ï¸æÐ3Hþ=ƒäÐ3VÉÿL¸)üc‡‹þ×]†Îç¾ÖÖ—ìg¦óÒ‡é²úH–ÇØá*Ÿµ…u‡¿¢žœº?=9n:›W‚µõÊ:¢c!€[¢S–wÚ–—x•6ûÕŠŠjX¼ýżt<Ùü²÷e­:ëS$;ãæ_eãò­ü0ÙüUæa²,Ù|Øá¢u([g•íP7Y/Ê;mOüD ýÔßp¶²l~Ùû,ÙÿÙ8EÓë®[rôHéÌŸ‡}Ïÿo2×Ë*š®lžªóð]?‘ƒäÏ׌ªÚ(|ÂÖY&;\wýšrV™ «kYeËSY—²ùø¬Í×øy•^ó/b²‹*¶Ai"¨.!’)@=L[„}ÔØþ\n8Q³}“ë£ÊöÌ]ÔôÕ*:m /~篓¬U:ÿÙò© Î„®rÍ¿ÊùÔM–SÊ’{¹¨JœùóÍä:—½—­ƒêú˜•O˜¢ÿEï]Ì#{oº¬²ÏU>ÓY6€tò™Ît¾2NþeÍmÝ }Så ‰ê˜?€)Õfû.æ3ãäßÅÑGE—Ú0S}Îcõö¨þF¿Êù@}¼èíõÁ™¿û‹9ÜÐôj´Îí;{M¯B/!ù[z3z£éUh¥ øNÓ«Ð[Hþ–â»M¯@ëô¹³pÍ güzÉ gpÍßzª{3zc¥ÔéÁs ­M÷Áw´ûP ù;páÒå¦WÀKEI ¦í™ž€"ù;‚»Ø@gýöoM†Ÿòù ÉJ鞥㒨ßÐá güzƪÙ_ö,䬃ǙpSøË0]žk²çÙ³Ÿ=óž}.K4mÑ|ldó•½øˆÏMæ_rRÆúšÑ—qõEëXF\%É¢i«N¾ìºóßð•(Ùú–€›Ti‡¿¢ ÍÖÈl‚! 0?L¶¼lœ¶ ÕV~œl˜NâÆ?ÈZcYMKeÇsY®à‡±yAgº²a>i¤·?׉—OæeË«ârAÓgÈüòd—Ê*ì0öû°Ÿ¡2ÐlR” oÓ¼ “?|>©´Nþu\S©zìü| Ýße¢EÒ]² €ÇO™²uUý.múάJ¯ùQi:²]†éò\‘uÖÓeš ‹: š4ûdø @“`y¡‰\c¢±›üÔ]Pê\žJÿ:¨tD“=˜js)Q½ mÙ^üοîšR[jf.±­®Z$|Lv²ËuŸéûœk9󯫹(«Ùé,¯­µXÛ´Ÿ½ ÃY?t‘¨À÷ïâó‚Êñ¿(Ÿ´éRˆUò×é0Áëª3…lªË3]¯"²„*ê9_4~Ù°²ùØÞ@¥'?.€¯t;õeïËò‚ɽg|«´úÁ>m©a@=Úp´:ù#€Õ+:ûÇY?øyAM«“?ÔCå2tÑÛ-HþP(¾Óô*€cHþì/ætpÿAÓ«P‰ªšÒÑšÐ$KoFo4½ ­ƒÖ„f!ù[:ˆï6½ ­ƒŽyÍòâP$€žAòè$€žAòè$€žAò處ßù_›Þjb= &ËäÿONÿ>ýüÊï[Ïð§ã—éçWÞ·ž@߹ϩ7ˆˆIþöÇÿÉáÌÝÏ ¯\çT\óè$€žAò虀ˆ’ó?ùqÓë5Ø}ïúÿÂW¨|œIEND®B`‚fox-1.6.49/doc/screenshots/xfe.png0000644000175000017500000005642011637250333013737 00000000000000‰PNG  IHDR|Ñåó¬ pHYs  d_‘\ÂIDATxÚíÝqˆç'üo5ðL`˜ ÒKôr3¼ó²Ó:ÁzD޳ï ì)gƒ•õ ±¤…‹ööeWN޽ñlÉYÎ’bn#ïñ&’vc/w+9p»ƒì(Çå2Ëi|œÖ3Ç+¿ƒw ÃMCÄû¨xŸ¨`Þ?žžrMuWuuwuWW÷÷ƒ(UWWUWU×Ô¯ÏóT=DÀþþ~ omo‰³Pô.Ñ´{ëÏÞxëÍkEoEš­í­ãõãNø¢U¬¿»þôs6·Eï MµÆ¯4úe£±þî:'6éêå«]—üpëÃÏ^""Eï Mµ0ÙØ–ÑéçNlˉ½qåµ+YVý5!A^ˆˆ¨/Ágé_ö@V_©Ûp6šEОé¯ﺊh¦k1=™3_ªÚ‘[¿Ð½U""¢v±ô/K9óú»ëõ•úˆ8Ó €È®žyªzëçñPØq""¢”¤ÌuÐL‘HRÿÖO÷Îyá­Ÿî…Sb/Dç'""ÊC>‘%) |¶-TìÝãõã_½­Ê šé ÐÞŽ*6%ý%Ñ€Šj]tú¹ÓW/_=^?Æ]¶;F\ä‘éÆ3×7Þm¬=W{ãÝ€pÄZ{®àÂ3 áœáÄð%QÏŠ+^þpëÃãõã6îÚš”#:]iO]ßøáÎÚ×íHûôèÄèËØ[DDD£×2»¦£aÜEjÄÅà™®¤&õß '^<·xõ¯>‹²Wÿj'6…ˆˆ( S’ÖB9´^6É•´ߊN¼xn1Ë"DDDi m½æ¸a9sÒœgºA‡töÚ¬¼ôgÛÑ‘¨èüíïõ¬SÐíµ)r¢¥Ê]ãnuºÁ¡‡c\ûÆêKßß´ã/}3úò`Óyœˆˆ¨/‚Ü¢I–ä3dŸ ±6»Þý–¡~Z/í¤ŠMIzùâŸl^ÿÖê‹òYH޽$""ʤS¦ÛGFÛë"§Ÿ;Ý\‡ØzYºeè¯<ý{ßÙˆÎù{ßÙˆMŒÎoß¾ìõ•¥€ÁïÓ•èc@~ïÛ¢ftbû !""êA$ènmoõÔ ÐÈA.½ •¥¡6M®V$:ýÜéúJ=ÚÇ@W£YÄrb¯{íØ`ºDDT,9œéöºøhA{Ðí5Y¾óî[Þ/ùøF""*Xå½ÃkfºW/_-z ‰ˆˆzÖÓ­>#Ó%è¸yûnÑIDDTzgŸ=›ò÷ŠÞ$""¢iÁ KDD4" ºDDD# KDD4" ºDDD# KDD4"9ݰyt{;éÑ(|²l[éV>%[8ʽ›ì£A41rÿSuú[¬};ìݽûÇ7é“Dß=ûìÉA6,úÑS{s!vØ‹=t±ó§ðï±ð šBí±`ÀèЇ>ƒ.Џjx ?zôßÐ8ˆíuIÂì•]ÿA·£Ž×²agŠÓÿpKì»v˜û§'íZ×]ŽnÞÍÛw£›×¾©×Ö¾`ûÊs9øíß©ýÜöím^l_ºnUÒªrÙ‹ôÞÆ$ý^Éx4Òlj(GéÚ)ׄžät;îÆP3ŒöõÇfˆFˆÑìZ×]NYBTÒÚ’~âŒøÝñS{Êñé8>ì½dcß¶É(E *»,‰¹\]ûº£¯é,°Z.Ǻôމc;•~NŒLŽŸ8Vñ&—i/èuÁöaц¨Ä¹˜çò×7Š:ݼ"Ö8Ôéb°ÀÖß²`R9pû.”K^{‘¥. ×õä‚-™‰F¦½Ü±ãøð ½xe¾Üç®d¥kùyúÊ'£.0—½ÈXÖÝßzrÙ;"*ÐhþGýpŒ)¿W‡ó¶R¬¼}¥ŽßùʤÏ>{2ãA‹¥ãYêȉ(wûJ=Ó]²ó* W+{ìx¤’Zùö÷ÑÑöM=MmOÆé5ŽÆ*S6£×u&­*é­¤ÃÞë)1ÔÖýÞ·'÷Q²ü%æò§Z°¿¿¿µ½e_¯çŸ=eÇô‹ˆ¦Aß-r>ÜúÐŽ¯¿»~õòU>{™ˆˆhDt‰ˆˆF„A—²e"šy]ët‰ˆˆF„A—ˆˆhDt‰ˆˆF$í>Ý{wŠÞ<""¢’YVGDDDIÒ2ÝŽÁuçޔęˆˆˆ’ úìeÖûRv…¥)D4‘rèðàêå«EïM>mƒˆ&X— Û±cŸvûûûEïM‚J¥Rô& Q— ë8¯è­¥²ÊR\<¶UWÿäÆÅo](z+J&¼n¼ÿ_>•À¬ÿÅÕS_—cxõ[/ÂØaãïv~°þ3ûÖïþÇá8•Ë™ß^½õKP-Õ½x¹×Þ³—–ëÊQ@9@ xðÉVÑ»IÔ§wÞÛ˜¯-¾ñ½[kß<3Èzö~ÕˆMY8ZdmáâÑñ¾7iéèò¿¾,(GýÓøN?úÎoŒCÜ}ã;—Ö^»>ÿÄ‚¸Í‡{W¾ýâÙÓ'o®ß ï£;ž}}à«/‘”ûh¢n½·yéò¥R4òÍT§›=âÖO¬®½|}þè…@µ}o£v¬Þ`Ü¥Qyç§;í>rÓ{ÆÇ;òX.|ýtkUïmè_{ÊUs 7Þ^§÷ç¥?ü,l_{óÖ€WÌ3Ϭ†åÑñt±ë¾Ý$»1áÄ\®ãµ•§Û/½ò(¨WÿøÕw~øNŽfí $lSrñÕ‹]¯¹—¾õâ…o\à=Ô€ ߸|ã»ÿêìé“ uöÙ“6+GI ym°ýºc!äÚ›·ÐË×]»Â[ïmöz.Ù¯Û.ª3¿½zæü¥Ôâ_úÖKÙw9:§Ýߨ³GU9ª¿ ;ûì@róvÏ1Û.{óöÓíÓ“Ö–CCªPíØÒ…o\Æ ¼‡ÚþÈ•@jµÅ3çÎWf*áI=¡YL¹3ss },(€<–½æž}¹q¯±÷ë=WŒVn3<îF¯/ýá™koÞe¦ÒqíEßæ[ÑÙÙ* •£lĵÃ+¯]±¹o^ÕUíWÿøÕ蔫—¯W»¬Vdçãmù[OÍÎ)ÞÃ=8.`ŽÌWçç/¾vý¥ož½ö§7×xcõÿêŽÖààÕo_{eÐÇÙCº÷«Æ­÷MùŒÂüØ®0 çÙØ]6ühûÛkx· œùíÕK|©þíÕ¬RJ}ð‹Þø·o=È}íǶƗ–ëî3 ¦Ü¼óÓm 0oüéµ™5Ùݸ×`o·¡\U[\¹s¯á=l˜ ®r•ˆå*8ƒÆÝhVa^ß)¦ Ø}\²-{ s/{íßí5÷Šzõ_Å?z ÀÓO=^N}ùÔÉo_²3\þ×—û>€Vq/ÿë˵•§£ÓÓë¶0ö½DÃd.?³b+ìãû OžaG\?þ?¾ò+W¾så­·ß:ÿõóì<¸ñg7.½r)Ëç¶'µ'öéZ6îö¾œ„K>ñd ºY¾ÔænC¼=q å×^¹î:JûR=44tWÍFLÐçFF›ÒD‹—cÎY⮽^÷—æ›mºaRG+›Ðïq³b'}=yì””¸ë ‘À(@)w~Þõ|3uçë‹'ž~ðËÆù?¸ô£Þ8óõ5ÌÍΙÁƒHño<•<(×ígµa Oú¡–Þ<*<í²a䳑,ú[Á¶Òêo#Ï<³zæwoÔæksGæ\¸&0®ãšÀTg«ÚÑëµ¾î¬ooo?ù¥'ÓË™‡éöÑ~*töÙŽ-°Î>»‘TèÒ½xÙÆÚl¿t”Í_.`DàZ©ªçk5[õ| (nåÁj?L6LFdÊËp<zÛgK­ÇC{ÜÍ«u¨ˆ§\%áeÝQÕÏAü®Ë¹\ÞCoÏ÷fÔ¬ >¸WI  7pÕ÷~Çñô‰T¬aUÔ{øË‹¯\àκF›ªãz€ _;uõ;îœ:(’@0㊯ðÆÛm•‹6¼Æ úŽIFˆ8w½GŠ?+¶›}_£ÛÖk)wGCªÓ uuZŒ˜@»Ž[[\\0µŸ¾Ó÷v¶×„†Ñh¼±t¶}ˆÁ2]`3ÌÁm¨ˆâHu®ú£÷~ôÒ¿|©ë FpŸn7y®9Ïâe#"¨ÖÎ+ïÑAdu”˜ƒ¸ùÙkÄô‘6°j–ÚÙˆk¹3®6fnnþà­µ®‹+GUgá=lØñû{ ó(ðlI‘r€ÁZ7v `}dºƒ—OÆÄÿà©ØêtCgŸ={þTxçîÅW/¦/« ¼GÞÜçæ¼GØÛ¯åQë¡=õ°Š®ã_UãëAêtíµ™nO?­Ff™nýDýƒ{(WÁ–*Ï(Ì€Y Àæ½Í®+/.ÓE×VÍù?‘ª§âea.{¸Xé³z\ E»ö6ÊN¿|cm’£-ÑcÖÛ÷‚TRjvN¥\xtö¥ÄˆRs›ì,;/feá‰ðÏLÙz\ G X§Ó±À¹'¶•)²]Ç“nPéXÿ7ÈV ¯N×:¨Ùw*ÚýIl¬µCп֮rW¹p =]«j_+(íiå¨AêtGéØð-úL«h£åØÍNƒdºZk#&<àPP3 µÏ×¶¼­ÍŸov-ÿˆ:ûr™n¶VÍ­zß›·ŸÎí‰T=µ^¶`Ú×.\Q0b Œ WÃØ9Ü€ Œˆ$5ÇÈ®¤²ŒÓ4Øùù:à³ÒâLÔçæÔçæVŽÖà{P6'Sð=wNÍÙ³Ïv¨}AAan¶š×¦flêÒ¾T,ÊÆšÈöô¡×Þ¼5xà¹yûî?~ú$€»ÿ宲øÅE{Y°™h^Õ 7oß> Ò>c²kb`Àñµ;[µC@฀½[”£Œ¯[õ÷öÉÝÚ$‰Øa”'÷w µ¯!ùÞÜAïÓ°ý·Û s È _{¡±Ûøàçˆ#ÊQOùé­í-Ï÷æfçðÐKZ<ûçæ›é¦´j>,¼Ç7§'RõØzYl[­j_» ÀÞ˜( Q‘tÝÉÍÈ4=²&·k|²ãôõf¸ æ žz<÷Á÷ dGm*²ãåU+i X.ÞÓz¢3~ÕîÈ^}NþáÜêúü©vÍ_î\ùãóUqUU‹ŽÞ“m§·.K;½Ùì'XéÀ¶¼¢!zÛRú°WgžY½ö½k OÔœrázž·ðÄ‚šUsŸ›[˜_pá.¸ŸsÓîÐýíÕK—/%µËRK=+ãéšÿ©z*^nî6®½ÞÛÓ[šý>b(GW^éúx©SørÑ[‘cîðžf5†=pÿà?Œ®¯Üq{LØèÝzoó¥o¾} àÌ gn½·é5e'Kìÿ¸YŠÞúz’gñ²1¦èÝ9„eËãcl;¨'¢áiü-’÷Ã1ˆÚð6k""+‡âå›·ïòÇ ¥ÃbF"¢Bd-^NråµA»w&""šƒÞ¬Î—ˆˆ(£´ ËÆ/DDD9J º—¾})é-cЕ׮DËHxFÑ$‰]â¢Ò2]¶U¦‘áÉFDÓàï½DDDÓ‚A—ˆˆhDº·^ÎRß–R~MDDDV¦[†®^¾šò.}@DD”EÖâåýdƒ||{÷IýM¶qÛž)ao!y¨®võóÜ#*£AŽ‘ÅÙgOƲápJQYr澩gö؆Ç3ö’¢r9,í_D4¶FtǯSCróöݳϞ´‘`ˆ[`,ÿ06þ[HDt£×ŽAŠš£+ ¯õèërßqµ¹lØuý Œ»9îcÇï´§cÞuÁ¼>::OúéÎtÞvýí-ïøYÙËà;DÔÕ¸dºíW«^§w¼ðõ𤬶í)/{ùî{g³ÏŒó cº.˜qµh Àé{štÚ$Í“~ÎÄ6£íïxXº~. nDAw”>2^)F–qNç•+ÌÀrÙý^WÀ Ù×—ôA9n@×Ã2ç*Ñ((è¶ÿT|®$÷ëK–í™’â»0‘ +w{]|Ø'¥Ž m£”e Ù°™hlKñrÆ-heÜž‰/¾‹]öw‡mÀíÉR\\Þ½#¢áÇÇ@öqSl·rŽÏöŒ‰›·ïÆŠ1©V¤Šù¼V›qúÎ4ŸŠDc(S¦{óöÝa?å1VîÚÓ8òûißuµnÏ44]™¾Ïžì8gl לñTÉñ8DKú8,àùI4|ûûû[Û[öõñúqûǶsïŽímíÌ3«YVÄg/SvgžYõ§kO6Þ›[àŽÿ *‹ðwöÙ“n}h'®¿»~õòÕî™.£)Q.ƱN—¦V™Öø'yã¿…DÔƒ. êD#Á KDD4"‰uºW^»Rô¶Ñ´àÉFDS"1è²ý O6"š,^&""]""¢aÐ%""‘Ä:Ý{wŠÞ6šXW^»{"UÑ[DD”›Ø%.*í‰TW/_-zËiu¼”'M†ô[Þ»<r¿ë\úö¥Œ·|$;´\¿øÚà("(GņxŒØ”—_zðÉVûj+•Jtû×¹OϸàËÞü8åYÿSr¬ˆ¬é¹> ®\Ç*ýz˜CºùÞdiD$H €òyÊQžñà(1^+îF"®•ÿQ«T*=M§,c\úö¥ôxïM‰°J…ç|Wv¬rºÙ3]d¸ìÀcxñ52D+â€Z´ë¸v’>ˆˆ¦\· eJ^{XJ@ûº:[506‹u×À@D´hˆˆˆâ£|™ˆˆ(o…Õé&-ÕÜm\{ýÅžVÕÜm áÈРÊÞ)zö™Oœ*zc‰¨F]§Ûu)cLÑÇ„r`[)—=îv¦gžYeM6e—Cñr¾™.M€è}A)÷¹Å§Ò“]F\¢14æ×œ±Ët‡±Rûß_¾k×]°ìy3QºŽÑ‚ç|’Øá Ô˜±±«ÓÆR4Jc~Æ÷Ä&» ™™æRî¿þ¾ìªý•å MT¦»´\?¸£ŸTEeqóöݤ?¤èÜØ¥*š"wL—Û$s±?„ðeôœÇtŸêí?Y’RábÌädºõ«k/_Ÿ?º`! ¨í{µcõãî$J*vŽý½E/LH¾r¥è˜ì2Í¥ñ‘tþ³j¦ãOÂÌÞ§ÛÏRµcK/œ[à ¼‡º¹Ûðêf³Q«-ž9w¾2S©T*îŒ[©T¢ã¹F–è¯øŒów'*µèB,NLçynHô_ÊÌcõ›cr2Ýí¶ÕÇ;±¾vîo¾¿ñéAîk÷¸5¾´\p\’àôÇyGBYô–&êïWT ™ûn ØÇ‚±d—i.•˜7â\Æ:ݯ¹(AnÊÕ<\Cs·!Þž8PŽò ‡k¯\w¥}©Îš@”SŽçX•¢{ŸÄíDÙ—Ÿ¼DCÅS ‘¸Ø#SŽL7©CÀp|þÈâ©çÏÏÏ× ët‘Ú×JUµ¯ÕlUûŽk‡’ðÄfêÃÍÛwmþ—eØßú‡׳:…É.Ó\*J¬‘`Oƪ|5Yö(¯yòU‚L7*)ísjGj¦Õ‘ q%¢•㊈r\ñµr\ l¯D&%ÓíØ7QÓ{Z9:#Û)v8Îùnöˆ›KÐê;Çœ°ËM§Ž§ôÄŸê팷9~dÊ‘éf lþŠÀ p#/ÐJU=_«Ùªçk@ t+TJ¦Û±Gú>¦·Kêî>iÜö$8ÎáÖFÄý1¤¿lŸ˜e¼'6Ù½5êCKÓ(å,Í^X:y¶×Ï#SšÖË•J%Lû:·=þÊqaÛR‰QŽ_Û¼Vµ".D¼a×éVë:ÿøGÖ=eºEo,QaJ“éÚ˜””öµž†Ø–É"Ûã½£<ßSŽòĵmNú¬¤ÙÓô¤ :‘w+²l¹@ìMˆ 4yõ²Ó©4™n:±µ¹@|/:lÅ×Çðy‡† 1ׯõPßÓ“ì–ãA(3]¢aëZ¥B¥P²^†’¢”‘@ˆ¨0²ÊA”µYo˜ã1ƒ;†&&ë’L—ˆh@åh½œ)-~ ÏxÑÒãƒç0«V €í:®ïȶ]|z–•Og¦›w³÷O4xÎgW–c•^U‚:Ýls¶¢¬öµ WŒãÂÕ0v7€`#"&[ëåA¦gŸ961ú²9—ˆ;1y?QF<ç³+ѱºy;-è–¬N7y)AíëêlÕÀØ,Öu\Ñ¢!""vŠ;åË“"—:Ý}"¢òK¿Z– ÓͲTs·qíõ{ZUs·1ø¾“Å:]"¢,ÊQ§Ûu)cÌpŽe’û©Ø52M¤ Ét©XùF\vLD“jbêt©H9Þ§Ë®‘‰h‚1Ó¥ä›é–ºkd¢Hz6_)Õ>å&*Ó]Z®×WV—–Wë+«KËõ¥cõœŽu‘c¦k»Fö¼DG‡¶kdñmçQÇa©MTf•6EoQ9ÄTÒL9°£?à““é²"°@9fºì™¦3Ô^µGÖýN}¸eìÛmd&$ÓeE`±rÌtm×È­N‘:Hv…ÀĺF>xÚ¶a¦K¬kúÛSz×¥¯¶ò<^U?9™ná]¿Â ®nɵN7Ï®‘‰J-%KKš¡ë‚p!Êk y(o îÓMɉÃ5ØŠ@q åmE ö¥:{hh<=Š}ñe?‘ó}ºʆå¸":Ö5rô‘Ú ½kd¢Y(û•*Ç é?h†¤™nÇ™£Á˜ÅÊ1âæÛ52QYä~Å/{rÆ]³ã)Go¿—>iF duºIÇ.ߊÀ,u!íU#±™s¬†9Ö鿨52Ñ4ëéÀ%Û©,{7VÇ¡™nyVf© ±¿ž²Ü*—¥¦c+»É1Óµ]#+}¡¼Gžr”g<8JºnÌÒ5r×oh¤üRçù?>Ç¡4™n4Åì|n¤G”ãÂ^”#°7tÚŠ@é§"°¿o«ðïxrÌt„Y¬˜ÏÊí9€íTê³Ú_¢Id܇Ú/&ÑbMLÒœ<)»¨Œ2þ™÷:}¨J“é¦Ë±"ÐÆõaW$U·„S¦¶N—]#Ñ+M¦k%EÁ¼*‡aîßÍ1Óe×ÈD4ÁJpŸ.2¦ÅáÄ×È0R €í:®ï({–ÎÙ^Ä‘~Ë]Ò …Ü©‹ïÓe×ÈD4ÁJéf›3ŸŠ@+{]Hßµ)VÝ’o/CDD“ªduºÉK±"°H9·^n³°°Pô.å ™n–¥XX¬¡fº¶ÎûÒ+—®¾~µ¼…DD˜˜L×ÓøäAOÿXw˜£¡fºsã:€+ß¹²¿¿éëçËÕ®›ˆ(*‡ ;™.+ÇL·òO¾R*ß»à«O~¥Òh\ý³[—þð|å©§+råê_½½¿¿ÿÒ7_bè%¢2šL—Š•g¦+þÅ¿°þµP«©WÞ| s øØûÿþû‡®}ïÚþþþ•ï\aè%¢ra¦K9ȳNW¹öÿ3ÏÁ7ϨŠèŸþϼðÝYl?ô6?h­áÒ7.íïï_ùö¥2†ÞôÇä¸Î|H/u5¤³…ºš¨Lwi¹^_Y]Z^­¯¬.-×—ŽÕs:JÔEîuºOwž¿ À¼R¿ñÞø¯?ÿê3OÍ™ßÛÝÃcsë'?ª¬­~õ{o]ú£+ûûû7þüFõóÕŽ«Jê3ª§éCû Á‹±¹Yé ïÄ«´±ÓK}’ôÚK[ß½º ã"0!­—ÔO¬®½|}þèBØŸîö½Ú±zã“­üu–{ëåŸ8ZÃ_üSüù•·?þÿþGßýþKê µ7櫘qÏþðµûgÞðߪÿrcëOo]øý /^èÐ|=¥¯¡^§ ÕðN¼ ;‡3öÒÖ÷ôè”alÿ„dºµcK/œ[à ¼‡º¹Ûðêf³Q«-ž9w¾2S©T*îŒ[©T¢ã¹Æi—ëåÿûÓ?üë·çŸX€Oÿ_¼öÒ…—×ö¶—éaË7Óýÿãw¾òO¾¾ÜÛÝkì6žXØkîUçªÞC¯:[ÝóöŽ.ìýz/¥6·ýéø%}q¹¡…Ÿ)ã-…ïæ裄3÷Ã>1ßã¸íHi2Ý0•LlYü”ã¶¥£%¾¶y­²%ÏD¼¼êt§ö÷`T¾™îþþþòãJ¥²úä*€¯>÷Õú?¨ï|²³0¿°×Ü›ŸŸoüª±ú›«êÿ[=ýøÛÀJšyxq7ºéŸÞµ5i¬.*K+ÓŒ»Ÿq›“ÖÖß§PLÒ1Ùa/Ë÷Øë·ó¶uºèÖ(T9™k D¶ïzGy¾§å‰jÛœôY]¯¿c{:e½ …ßø“¿õäæ›µZmóƒÍ…'¶?Þ^XXX8º`ŒÉÒh9c×ÅaQR–Å;¾ÛÓxʽLYZf¥ïT=7c{(»ì§Yö¥2.;Ô–€CÒëéû〔&ÓM'¶7ˆïE‡­øúÞ#ïÐ0!æ¦T˜±9ÉðzÚßßßü`³R©<ýå§WŸ\]ýÒêÊÿº²ò›+~ã7ú¬ÍíU%A!‡šˆJ­4™®•t‘5"ˆ²ÑÊ{ä)Gyƃ£ÄÄÝHŽkİû µ?]D²Þ§þÑS?ß°GvonY~þÑø+Á}ºÈ˜?†w_#C´"n E»ŽkÇ;JJd+ w†U&ë¸þäxŸnŠ0ô¾ðµ¼_{´'~‰¦P 2Ýls¶¢¬öµ WŒãÂÕhÝëé00L`DĤ¶^Î8±×™'Õ"nhÚŽ-M’’Õé&/% }]­›ÅºŽk` "Z4DDÄNqY¾œŸáÕéM’dºY–jî6®½þbO«jî6ßw²F™é•W9êt».eŒÎñé‚EÖêtmKò¤aÑ;MDÔ³’=‘*ïçXQ>†q/}ûRÇ!ïØ!¢2šL—Š•{¦F֮âwˆ¨Ìt)¹gºö!ѧDņáݺCÅ|šŠÕõ ä)Z:Óz––ëõ•Õ¥åÕúÊêÒr}éX=§£D]Œ¾õòP»CªŒWI^L§Jß;ë£_„¼ž­Và)š´ñY¦·oöˆwdBZ/¨ŸX]{ùúüÑ…°?Ýí{µcõÆ'[ù.êlx­—£Ï»®D:¶dwÈ4aúè#vO)oíL%¡ÜJj?»w¶ß ’éÖŽ-½pn 3ðêænÃ{¨›ÍF­¶xæÜùÊL¥R©¸3n¥R‰Žçz§]î™nS“:¶LÊt+m]Q ò£¸ëj³¬°ëæÅÞí8QÊ™‰ÃçÌ ÉkÊG`âNÑBº žœLwû£mõñÎág@ÊÎýÍ÷7>=È}í·Æ—–ëî3 ÎÇêtÑé§h×L7ú 7åÇoÆËçAä™”Y~eG7>K†ÁfbÔ®ë –ræg‘ñ7¦¨S´ì%h½œ’‡khî6ÄÛÊQ^ ápí•뮣´/ÕÙCCÈ*§çº9¼g/'À”¯oØårù~cS^†wæí)Zië7éhTƦcÖrdºgŽãù#‹§ž???_$¬ÓDh_+UÕ¾V³Uík8®²R0G#¨Ó õZ§›Tü•{±Xß+ÏËX×®SFP›ôãyЦ§æ]‹µŠR²:ݤsÂU¨©Ù'0£Õ§¸ŽB`”㊈r\ñµr܃nwMJªÔµV¯¿ZÀ 6‚:ÝXÇÙ *:.^Iî5¹o?(‹0Èe3¨¤ÒOžaœ±éÛШÆçµ×ÕqûQ92Ý ”Í_.`DàZ©ªçk5[õ| (nåÁJJ•R~.uOš<ÉXÕé¦èé䓽vm:Oí—¸19E{݆qØæ¨Òdºaʘ˜;ÿ帰m©Ä(G‰¯íE\µ".D¼Œ©Òjò&ÌðîÓ0Óµ—‰P¬ú§½|":½§¯;éƒRæÌ¸Â<¿'*­¤3vx‘±¹_!§hå°ôíOÙ¯îaeJ“évL+CÊ9H} "°}×;Êó=å(OìðPÛæ¼"¯Œ£ïe(éëk?=zê ?³’~{eùM–¾I)kà¼éÑÓÙØq†^Ožôµe܆qk½<ÈûÈ” õrÒªÇE˜Å‚ÇðŒ§‘_;*^so½,lþb3vXlXôNõ¬4™®•ÞŒˆ¢Z òDVG‰9ˆ»‘K¶“±û²×ŒFî™î•×®d)€-z¿‰ˆzSŽL7SðA.{8%B+âäÁZ´ë¸v¼£ô›½zšÿð“ 'Ø0îÓøƒFDS¨™n¶9[QVûÚ…+ FŒqáj´ú·w&0"b’ët³Ôvdl`5%‘côuºDDeTšÖËÝ–о®ÎV ŒÍb]Ç50-""b§¸Ë—)ƒÑ÷2DDTF%Èt³,ÕÜm\{ýÅžVÕÜm ¾ïd1Ó%"Ê¢uº]—2Æ çøP&Ã{ö2Ñ$É¡xy2]*#.QS§KEb.QÌt)Ìt‰ˆ²˜¨Lwi¹^_Y]Z^­¯¬.-×—ŽÕs:JÔ3]"¢,&¤õ2€ú‰Õµ—¯Ï]ûÓݾ·Q;Vo|²•ßá¢ÎlþšeX©TnÞ¾[ôöcBZ/׎-]øÆeÌÀ{¨Ã'RÕj‹gίÌT>—ÊA8>%­™,),«ä‰hÊMN¦»ýѶúx'öXüû›ïo|zûÚ=n/-×ÜïžOç³”ûÃúZ"¢t%ÈtSÒ£p Í݆x{â@9Ê $®½rÝu”ö¥:{hhrí¦†™ˆˆ²(G¦Ûqæh0ž?²xêùóóó5@Â:]@$€öµRUík5[Õ¾†ãÚaŽýéeQ²ÖËIݽ¹ µ#5ûf´ú×QŒr\QŽ+¾VŽ‹€À¤dº•ˆ®ÓíxûÄŽk "¢iVŽL7eóW xVªêùZÍV=_J [yp ’2ÝXYqR·}ál¶ÿ¾”>ˆXøLDDVi2Ý0kLLƒƒ€r\ضTb”£Ä×6¯U­ˆ /Ç:]""¢,J“éÚd1)kTZ™k D­{„”ç{ÊQžØá¡¶Í½nsö²b–*Q»ÒdºéÄÖã@ñ½è°_Ã{äösm¼å2'M•’={9)† H € #«DY›õ†9®“¥{&¬DD”£ܧ‹ŒiñcxÆ‹–+GIø,ª@‹v׎wdF¥'-mZ5ø%"¢ S‚:Ýls¶¢¬öµ WŒãÂÕhõoï00L`DÄ$×éFóé¤ñ”EÒç$"¢©U²:Ý䥴¯«³Uc³X×q D@D‹†ˆˆØ)n–òe""¢ü” ÓͲTs·qíõ{ZUs·1ø¾eWŽ:Ý®Kc†s|ˆˆˆrS²ÖËy?ÇŠˆˆht&¦N—ˆˆhÜ1Ó%""‘‰Êt—–ëõ•Õ¥åÕúÊêÒr}éX=§£DDD”ƒ i½  ~buíåëóGÂþt·ïmÔŽÕŸlåw¸ˆˆˆú7!™níØÒ çÖ0ï¡nî6¼‡ºÙlÔj‹gίÌT*•Š;ãV*•èx®‡‘ˆˆ¨»ÉÉt·?ÚVï~¤ìÜß|ãÓƒÜ×îqk|i¹þà~‡$˜ÝßÑ”à>Ý”œ8\Cs·!Þž8PŽò ‡k¯\w¥}©Îš@ØŸ.X92ÝŽ3Gƒñü‘ÅSÏŸŸŸ¯Öé"´¯•ªj_«Ùªö5×ûèO—ˆˆh%«ÓMª‹ujGjö Ìhõ)$®£å¸"¢W|­÷ Û]Ó5Ó}Vø2:uÃDD”]92Ý ”Í_.`DàZ©ªçk5[õ| (nåÁb¦KDD#VšL·R©Ø´2‰ þÊqaÛR‰QŽ_Û¼Vµ".D¼®™n´[Ühëªp:›\QOJ“éÚð–甃Væí»ÞQžï)Gyb‡‡Ú6÷½Ë6î2âQOJ“é¦[Ä÷¢ÃV|} ï‘wh8@鲸¬Ð%"¢ž”ìÙËIÉ¥‘@ˆ¨0²ÊA”µYo˜ã1Yú°·‘5–Ô†/w‰ˆ¨'%¸OÓâÇðŒ-=VŽ’­L7Т]ǵãDDD£T‚:Ýls¶¢¬öµ WŒãÂÕhõoï00L`DÄ$Ôé¶'Ó±)Ñ—¬Ö%"¢ìJV§›¼” €öuu¶j`lë:®ˆhÑ;ÅÍR¾LDD”ŸdºY–jî6®½þbO«jî6ºÎÃ&ÊDD”£rÔév]Ê3Œ£ÃˆKDD9*Yë弟cEDD4:S§KDD4î˜éÈDeºKËõúÊêÒòj}eui¹¾t¬žÓQ"""ÊÁ„´^P?±ºöòõù£ aºÛ÷6jÇêO¶ò;\DDDý›L·vlé…sk˜÷P7wÞCÝl6jµÅ3çÎWf*•JÅq+•Jt<×ÃHDDÔÝädºÛm«w?Rvîo¾¿ñéAîk÷¸5¾´\p?Ï$8¼©—w÷QG%¸O7%'×ÐÜmˆ·'”£¼@ÂáÚ+×]Gi_ª³‡†&®ýéöŠ–ˆˆÒ•#Óí8s4ÏY<õüùùù a. @ûZ©ªöµš­j_Ãqípþt‰ˆˆúP²:ݤºXW¡v¤fŸÀŒVŸBâ: QŽ+"ÊqÅ×ÊqºÝ5I™®ýÛ£_8%ö¹•ˆ®ÛFDDd•#ÓÍ@ÙüAàF^ •ªz¾V³UÏ×€èV¨”L7Z;‹ƒrãhMmÇîu‰ˆˆÒ• N׊æèXzÐc.(ÇÑÊQ"F9J|ë[W/¥N—÷QXdB”£q»†—&ÓMo¬´2×@ˆl|u”ç{ÊQžØá¡¶Í}ï2/‹4T}_&¶¶·¶ïm½ù4Öß[ÿñ{?.z+Òlmo¯/z+âJ“馓V=.@ÄSŽ:4 áO9*¢ß˜ ü À4 [ÛýÜ϶þîzí µ·þò­¢7Ÿ&_ã— ô{¢ŽÆú»ëEoB¥Ét­¤ ÀˆH ÊF_(ïÑAdu”˜ƒ¸ÉqöaOãoýÝõ«—¯vííÃqå(¥xrÓÐ…5t=ŶÓÏÙ"ã©™n¦¦Î¹ìáçc|V ´h×qíxö÷÷™ÝÒhœ~îtÆ?“Ï®r‹Þpš‘è‘ý,­¯Ôí¹:šEÆP 2Ýls¶¢¬öµ WŒãÂÕhõoï00L`DÄ$Ôé&µ¢êÚºªcÛf¢A¬¿»ž¥RêP¦;£z}ðËÚ·ÖÞø“7ŠÞW*™Vör K[w½¾Rñ"㦙n†¥Äf±ÕÙªöµ¸\Ç5”‚ˆ†(À>5€Ëòe{ýeºÊýìܾð ç¿ñý¾qáÆ÷oØ—ÑEˆ2É!zL£dºY–jî6®½þbO«jî6ßw¢¡ê#Ó«Ó}ë/:´«RJ½õo…s²˜z•דt“ÎðØY² bﯿøêÅq®Ê MH¦kŒÎñ!*R™®rTüÏ:Ë_9³*‰ÓϾzùêñúñ0îÚ°]Šˆ‹‰Ét‰&R?™®O[“²Ø3_;s뇷Úç9óµ3v$|7I8glæ”é·~x«ãú£“4…ÆKq?Ô>Üúðxý¸»ö$)-C’éM¤>2]×qc­—£!Ð ï¾ç GN?w:|÷Ì×Τܧ3:sÒôö—±·Ú]³ö8˱£¶öÙõ·fwQªˆ fºDã¬ÏL÷ðÕðÎ{wbó‡3ÄFN=sêÎ{w‰wÞ»sú¹Óí‹·ÏigVŽê8=º’¤õÇfk_VIôe¢2Ý¥åúÁ½¹@ xðɘުE”Euº‹—£o…#§ž9•4Ï ÓSZlE§$Ó*ö'Q˜ã†åÌE¬&'Ó­ŸX]{ùúüÑ…°?Ýí{µcõã.•V.­—{ º›¿ØLšgé º¨Sôèµ)r¢¥Ê¥‹»%ëO7i©Ú±¥έaÞCÝÜmxu³Ù¨ÕÏœ;_™©T*wÆ­T*Ññ\#ÑPœ~îô~‡àþ×>¥ý-d˜9ãj‘íƒ:Í¿ùÁæê—Vá`õK«›lfÝþ+è_ìჰQ3ú/efÛ bíøx>i¹ÝädºÛm«w?Rvîo¾¿ñéAîk÷¸5¾´\p¸Ip×®vÙ/¥ëç‰TŽŠµ?JiŽkHµ½½½úäêöögý­¬¬D_†’æLšÞÞb«ý­è lBUR}¤›½.rú¹Óíw•%ÍE)êtSrâp Í݆x{â@9Ê $®½rÝu”ö¥:{hhF…ƒ(å«Ï'R P¼¼³³³²²ΰ³³“´xÒœékH_¹]6åCiŒ°!U_Ê‘évœ9Œç,žzþüü| °N  }­TUûZÍVµ¯á¸v8HºD£Ñ_¦ýAÙø¤‘ôû2|+6Oã“Ftm)Ÿ›4gʲ¬œ–K!ú5mmoõZº;šEÆP 2ݨ¤TÒU¨©™VoB‚pÄu”ˆVŽ+"ÊqÅ×Êq%°ý ™¤?lû¶Ò×~Vt<œ'§Û‰í3§,{‹Y2Å þìåq“¾m Göv÷Æyûé33­ÿO?wº¾Rï©Ñ,2žÊ‘éf lþŠÀ p#/ÐJU=_«Ùªçk@ t+TJ¦†öXèíØP8݆ê¤ÀÙq‘”q"«Êƹl¶ë¶óÆST,ÓíuñÑ,2†J“é†é`R*ö˜ ÊqE´r”ˆQŽ_ÇúÖ•ÀK)ÂêÚ‹_Že)]¯åi7þì†çyEo5MgLË{Çü!Ì¥ÉtÛÓͨÖÓ0Û2YD`ã«£<ßSŽòĵmî{—û¸ãˆ7)Q®^¾Zô&uöÎ_½Sô&t0ùAwž¢,­Ú\ €ˆ§uhÃ3žrT8D¿17ø³DÓ>! ݼ}·èM *‡³Ïž,zºÈáᣬÓM*Œ5"‘@å=òðÞ#OÃŽÛ¬7ÌqöaODD#VŽL7Óã«rÙÃÏÇø¬hÑ­©}îoض9å­Øƒ”ERZ5Ñ„)An¶9[QVûÚ…+ FŒqáj´ú·w&0"bêt“ZQel]ÕÓ"Œ²DDSeBž½lïÍÕ¾®ÎV ŒÍb]Ç50-""b§¸,_&"¢Ñ*A¦›e©ænãÚë/ö´ªæn£§ù‰ˆˆTŽ:Ý®Kc†s|ˆˆˆrS²ÖËy?ÇŠˆˆht&¦N—ˆˆhÜ1Ó%""‘‰Êt—–ëõ•Õ¥åÕúÊêÒr}éXéû£ "¢I2!­—ÔO¬®½|}þèBØŸîö½Ú±zã“I蘂ˆˆ&À„dºµcK/œ[à ¼‡º¹Ûðêf³Q«-ž9w¾2S©T*îŒ[©T¢ã¹F""¢î&'ÓÝþh[}¼sø²sóýOr_»Ç­ñ¥åúƒû…%Áì:—ˆh •à>Ý”œ8\Cs·!Þž8PŽò ‡k¯\w¥}©Îš@RúÓF\"¢)TŽL·ãÌÑ`<dñÔóçççk€„uº€Hík¥ªÚ×j¶ª} ǵÃAúÓ%""êCÉêt“êb]…Ú‘š}3Z} ‰ë(F9®ˆ(Ç_+ÇE@`’2]û•J%ü¬èxtJlzÊxúÌDD4%Ê‘éf lþŠÀ p#/ÐJU=_«Ùªçk@ t+TJ¦V¸Fûé‹ÖÂÆz¤O)+n゙ËDDS«4™n˜)¶ç-ÁÁ?@9.l[*1ÊQâk›×ªVÄ…ˆ—R§›±¿ö¥Â-LZŠ—ˆh𕿉Tûûû6b…#QÊ"±CÏ×°}×;ð|ŠÛ6÷½ËKŒqwY‰rqöÙ“¹¯-\gûȰ·¤§•¤ÌœïaÉ}ÆgóÆS Z/g!­z\„Yì¡a x ÏxÊQáýÆÜöãØ[Œ»4b×¾›·ï½Eã¥Ø2È·ùì³'Çö›Í¾áœÎS %«ÓM fFDQ6úBy"«£ÄÄÝÈý»FLî}؇±6%î2Óh´_‹ÇùêœqŠZÛ]z€)×—•´åYö"ËΖ÷€´+G¦›©ø —=ü| ´"îA¬E»ŽkÇûÖÝö13#.%–µO]×—vÄ.NɾÚv½^@“6¬ã'¶omöÕfÜòŽs¦Ò,“¾÷‡ ÌSŽI׃0â=Jù¦A 2Ýls¶¢¬öµ WŒãÂÕhõoï00L`DÄ$Ôé&µ¢êÚºªï™‰F)%†eY$=6÷´ÚìÙÓ<}dùYv0eÎ,óô·ïé‹Ûø—qk{ú¸þö¨¿/½§_  ™n†¥Äf±ÕÙªöµ¸\Ç5”‚ˆ†(À>5€›{ù2ÑØˆ¦/á”AÖÖÇ[9.2ìõg_¤×•%eŽ{Ôß>–¥Š:/%Èt³,ÕÜm\{ýÅžVÕÜm ¾ïDckôuºy5[͸©Iå¢ý­mÀe{Ý÷ŒydÆ}dKòZOû±š¶hšÑ„dºÆ˜á"ÊjôWÕAJq˲ï½îc^[Â9$¥¹Ow¥ˆ¦Í€éNöÅ“æìû6ÓôÐ2xú5‚e»ndÊAË7Ô,ëíX>àVMêý¾’éQTJnì­ŽÓÛOZs×Õæ»/Ññ?.ûªrÙ÷ìów-Ö–¸oaHßfÆ5ô1[ÙSðÖ³…·¶[=˯·»´sïÎÕËWÙÈ–²¸õÞæ™gVo½·™>›=©nÞ¾›™'[”½™»ýOrŒù½¹C-Ä.¤„<—-¼l?¶1n}hÇ×ß]/ä½¶oÏDeºKËõƒ{s!@ðà“º©'")…EoÚ4šÖËê'V×^¾>t!ìOwûÞFíX½Á¸KTù†!Ý%UŠ}å¾0x÷¤4½ ¥/U;¶ô¹5ÌÀ{¨›» ï¡n6µÚâ™sç+3•J¥âθ•J%:žëa$¢É7yÑeòöhüMN¦»ýѶúxçð3 eçþæûŸä¾v[ãKËõ÷™Ñè” N7%'×ÐÜmˆ·'”£¼@ÂáÚ+×]Gi_ª³‡†&”þtûÆþ ˆˆ(E92ÝŽ3Gƒñü‘ÅSÏŸŸŸ¯Öé"´¯•ªj_«Ùªö5×éO—ˆˆ¨%«ÓMª‹ujGjö Ìhõ)$®£å¸"¢W|­IÊtíGD;¨uV!iúàG•ˆˆ&O92Ý ”Í_.`DàZ©ªçk5[õ| (nåÁJÉtÃRb>Ãñ°è¸ã8»¯'"¢t¥Étà 21• þÊqaÛR‰QŽ_Û¼Vµ".D¼”:]vÌGDDÃPšL·=ÝŒj= °-“E¶ïzGy¾§å‰jÛœÿá$""JVšL7ØzÜ ¾¶âëcx¼CCÆ\""­’õ2”T®kD$"*Œ¬remÖæ¸F û°'"¢+Á}ºÈ˜?†g¼héñÁs˜U+@‹v׎çζ¥+}‰ˆ¨“Ôéf›³eµ¯]¸¢`Ä®F«{7€`#"&¡N7©U8 ¨é/‰¨¶ãš;ÞÒG‡«-¤£ßKO;2y} ¢duºÉK h_Wg«Æf±®ãˆ€ˆ ±S\–/Óä:ûìÉö#øÐ¢÷»4r‰ðɈ…(A¦›e©ænãÚë/ö´ªæncð}'Oá5±ŒùAÛ<þ‡«tÝîŽÿ!±rÔév]Ê3œãC4¢R,<Û·Â’ÃèRÑ9“&Fïø¹}\Ë.ÛÓ.t]0¯î¸§óÑXñlûµïKÇm‹ÍÐßaIÚ†ô#Óñ˜¤,›ò)7{2LH¦K…Ë÷0ª”ðE’¦Û—yÕƒ¦G¯ŽõˆIó cº.˜qµ)G/ãî¤Ï“ò´oFÛßñ°týê³ïc›”å°OŒ Ét©X¬Ì› cØÛy¯‹DçpwFv¹Oú 7 ëaä³²/;È·91˜éRnÞ¾{æ™Õ[ïmf½±4è¤áýÆAf“´ñÙ?º¨Ÿ˜Û þC_vª~µOT¦»´\?¸7>a7õ£=â2î.KgºRçnüàGoœ÷Ž›=““éÖO¬®½|}þèBØŸîö½Ú±zƒqwøq'[Jhé)JŸyôx¹Ü5Ûqµ=MïiS‡ºHŽkè{Ù‰¬ÇšL·vléÂ7.cÞC>‘ªV[Å"GÌtK$Ú‚4ãlIãh«,M[Ó”mÈqÁŽs&½,‡+ã‘ïã8DÛ²õqX’v6÷e³ÒÉŽ¸ZÏ,ÜÚn¥ƒÇëÇí>ïÜ»sõòÕ²D¦Ú±¥Õ§N·=Rvîo^þ“·r_ÇÿÕ~õÁýœ“à©íO·×ˆ ½å:ن͞Eí’ÅvþÁ{s ÜÂŽëÏ=ÍÍq>ûìÉ·>´ãëï®ra‰^ëÚ·§™nʽ(áš» ñöÄr”H8\{åºë(íKuöÐÐ’ÒŸnß²|»˜™éeQŽ:ÝŽ3Gƒñü‘ÅSÏŸŸŸ¯Öé"´¯•ªj_«Ùªö5×ÙŸnŽq'Ò( ý Ì5Ç<Í-j GsÑ*Ù³—m>í\…Ú‘š}3Z} ‰ë(F9®ˆ(Ç_+Ç=èvפdº•ˆ®÷¢›ž2ʚ˥§L·è¥¬nÞ¾þ+z[hˆFóýò,²Ê‘éf lþŠÀ p#/ÐJU=_«Ùªçk@ t+TR¦Û±ø761ú2©¸¸ã<¶ï¿¤U•3]"¢,J“éF³ÉÎapðPŽ Û–JŒr”øÚ浪q!â R§›Ôý_Ò<™.Q¥Étm KÊ [OÃlËdAë!åùžr”'vx¨msÒ…A}sÄ7$Ìt‰ˆ²(M¦›Nl=nß‹[ñõ1¼GÞ¡ar;ªý£©dñÇ 3]"¢,rº£¬ÓMʈ‚@$@…‘U¢¬ÍzÃ׈¤ûòFÇ!a¦KD”E îÓEÆ´ø1<ãµ=ãàYT €í:®ï(PÃKC3ÞÛqþpUayO«O¼OwLìÜ»Sô& ×â‰SEoÂ@JP§›mÎV”Õ¾vኂc`\¸­þíÝ€ Œˆ˜ä:ÝìÓc³4°Ê>[‰0⎫—¯½ DCtóv¹ƒnÉêt“—о®ÎV ŒÍb]Ç50-""b§¸ƒ”/Óa¬Ó3û¹ÿ#Eÿq ª™n–¥š»k¯¿ØÓªš»Á÷,fºDDY”£N·ëRƘáŸ>MÀϱž°N—ˆ(‹’µ^Îû9V”F\"¢,&$Ó\ý÷߯j“lýùùQ~ܰ1Ó%"Ê‚™.倗ˆ(‹‰i½ KËõÕ/=mÿ--×kÇê9%ê‚­—‰&X¥ÿ×þVl~J2!­—|噯\þÓ›ÕY®²µ½U;¶ÔøäA.GŠR0Ó%š`±†¡aL­T>{+N¤v’é.-׿þû—´o´o-^ø£Ë•™J¥RqgÜJ¥Ïï3]¢i‘Sq»š”L×4>Ùqg«Æ×áÀwÿ¯¿©­ D­§BBžXXZ®?¸¿•㡜fÌt‰ˆ²(Aë唜øÐüü'o?õO¾@9ÊÆ×v¿:x†øà§ï<ùåLr/C[~~ęˎ­—‰¦A,‘Ýßÿ¬¨ÙŽÇ¦P»rdºgŽcÕÔžrç_üý¯(Gá10û4æ¯<ó%p¸õÑNã—o4wwò?œÓŠ—h:Åêt;ÖòRT 2Ý,$ãë½_5ö~¥M ®£Mƒß½rý{?@8°ÓÃñßûzç;eí´væ»ÑÛj£ë¿ÿVtÎö¥Â0ò[G‰™.ÑÄcÍE92Ý®·³ý·ë‹‹µ+—/°-€ tiëã=8 ÀQtu®ª=]«zž×qU6LFdÊËp<zÛgÀD—Z3âM3ÆãìJ“éÆÚÇn\ûû‹/|í¢;ë~¶[hß €ž‚²Ã½‡{­¡“C/CÑ Ú1 Nj”a¦K4ñ’Âj4â²N·«Òdºé]((O¼æ¯›@9hzØöÌÊÁž·W«jßËþéöÔÆÜ1âM­Øµ™±6]i2Ýtˆ<’¿kÌ?1×xèuØÛmÌÍÍ%,§˜’„µoÌt‰ˆ²(Ù³—9ОV@ó¡ ù°Ù>Þ|èI ÞCO4z¶ü¹ÌzÛ1âeQŽL7Óã«ÂòdeK•÷þnsá‹«‘rfŽ{÷’Ök“mŒ³Þ¾,fºDDY” N7Ëœ ÊUUï³ø ÌÍÍÁF\ :ÝŽÏÍ/¤¬0 »6’Ê2>ÁqÇÄâ‰S7oŸò?È·Þ+z߈&BÉž½œDQ枘›bnnnnþ‰¹¹'æ„ãáô…/ÔæŸ˜[8RËñÓ‰Ï^&"Ê¢™n¿Ûyãõ—Œ´íè*eDÚ‡öÉVs·Ñ÷ÇQ 3]"¢,ÊQ§Û•1&ßã’‹))[ët‰ˆ²™L—ŠÅˆ[¬{wŠÞ¢QXÝ”œ8\Cs·!Þž8PŽò ‡k¯\w¥}©Îš@éO·£ž‚ÜøGÄà}ºDDYŒ:Óí8s4ÏY<õüùùù a. @ûZ©ªöµš­j_Ãqípdýé2¾&aÄ%"Ê¢°:ݤºXW¡v¤fŸÀŒVŸBâ: QŽ+"ÊqÅ×Êq˜,™n%"}ºiŸ3e/b‹·Pû‡¶/ÞuÃÆët‰ˆ²(¬N7™²ù+ƒÀŒ¼@+Uõ|­f«ž¯%Э<8P]3ÝX†¾ì˜¹Úîÿ2f´±™“>(ã¶%mØøÇ]fºCuöÙ“Eo壀g/Çò¼aé Ç\8PŽ+¢•£DŒr”ø:Ö·®^îuºIŒ!´™šŒòjÖéχ[½ D”›2Ý”,€rÐÊ\ "°ñÕQžï)Gyb‡‡Ú6÷·åaŸöH ~I‰,…q‰ˆ²(¬N7‰Í_í?ñ½è°_Ã{äÐŽjÿÀøáŽ3ÖéeQXnRÊhD$e£/”÷ÈSŽòŒG‰9ˆ»‘׈)Wö½F÷Rü`¦›¯­í­õw×‹Þ "Êߨët3¥ÅáÄ×Èð³z\ E»ŽkÇÓÅÙhqqûÄèü±_]Ë–“>(VŽÝ5Žö:áX§›¯ãõãEo ÅH3Ýls¶¢¬öµ WŒãÂÕhõoï00L`DÄ$ÔéÆâhú ÙßJŸ3iÁŽ“²l×+Œ¸9ÿ¯›ˆú6vÏ^¶wèj_Wg«Æf±®ãˆ€ˆ ±SÜr•/O"Öée1vÏ^nî6®½þbO«jî6†pd¨Ìt‰ˆ²(à>Ýô¥Œ1Eêët‰ˆ²È¡x9÷^†¨tq‰ˆ²Ã:]*ÖéeÁL—rÀL—ˆ(‹1Ít+•Š;ã†Ã¢ŽeÄL—ˆ(‹±k½  R©üÍúªsU8ÐM]}¢Ê‡9fºDDYŒ]ëåJ¥òƒ÷3ñ¼=_<íÍUçö~ÙøÁ¿ûÙ·7^ú?ÿqø\*å g<6švž}öäÍÛwSÖEÊJˆwöÙ“ûûû=ý”äp²‡=<ݯNûûûn}hÿ¸yûîÍÛw/¾z‘þFÀåsóòsùßܼüÆÍpÀÏþûÿüÙÖÿüÙ?øw0^ÈvRÔÍÛw³ÌfO*;³=Í¢'[+!Ê]ì,åÃpØëÉc£o^í»#ÍtSêq£k¸zñ÷?uY>tÔšRîÓKÎ÷~ó©½Zmá‰Ûó~¸—ÒŸî€åÒ,ÖîI.EÇ=­„…Õ4$ã]q8>C{VärÁunÇ™£ÁX9¸yûÃêUóy£úÓõ½O5Î]h8¨ÎUçþí••ñ;«ŽúѸ §ÕÑ}ßýéuTøUžÃqæujÖz9©M²€ãjOOÜûÛú˧½tª:¿€Ú“ê¯~)_XÜ›_XøU€r\PNÚGT*•ègU"b3Ǧw\œFïì³'‹Þš:ãp•çp|†±Óc‹Ra­—STç”öŒ;§4óI]«¡¹Õí¹f£±ò¤÷[OÏýçuüó5 HB×~ûûû±òᤗ‹‘Û§,:žŽ}·{bÄ¥B~•çp܆±3¤ïæœdºaDOhOÌòŠ©-XØÙ®ýå+ycûŸ_ÜùÚ½¼Rÿɺxžˆˆç¥ÔéÒ赟ˆŒ¸T:ãp•çp|†O’þ.P<‘ʶòŠŽD)ñO{Þžø¢þÛFu¯ÙX^Ù;¶(ˆ/&Ø>íí0³ŽÅË6©eIr^¢Q–—ʨð«<‡c5L:Oú¸LV§›Dˆ±C8já“Úýmýùyï·žF ÊQžöäÈ"O{ª—2òX ïö錻¹°±v»iy'.¨ð«<‡c5L:Oú¸LV§›RW*‘µº×|ú[gp短yGjÊUbœúË7îü³ ž‘ƒÖË}n9«l‡jð¨yóö]æ»TˆÂ¯òŽÛ°ý$éï7ê'ReI‹mÄ«Îé£óõÿ±¹7¿ÐPsÕ0˜Ûm¬þt}®ÙØSsnå`/õ>Ý0s ´c¥Êv¤ãÄöÅiôw©ãp•çp|†ígHßIÅH3Ý,s*žöàÀÓÞp jÛœúowà(RÛþÀ›ŸoœxÊ«jo¯:·ÐzJF²X¼ì>Sb*ÃmáXÎL£WøUžÃqFOA.J…={9‰О®ÎU§«sÕ;¿u ¿õ´‚ >÷4ãi é©N—ˆ¨«q¸Ês8>ÃO­q¼O÷Õµßi=m*ÜÆ®ãT´\ÚÓõ´’|[ðE~•çp܆y^pöëðàâ«{~¦8M–žÎ·¤ˆÆÇ~ÑÏÖçp¬†=<é´Z mmoÙ¹×ÛùvîÝY0èÒxé/ȵ'¾)/ÃñXèåŽ ©h| )þE×ÉøJD£ÄL—ÆÔà7ZJœ]Xø †d"ʃ.öJÖþô½¶ˆ&¢!añ2çruýe½DDùb¦Kc' ;à°¹røn¬Mr´”½d½lºLDÃàKã%cœKºy·§y:Ž3ÐÑð°x™ˆˆhDt‰ˆˆF„A—ˆˆhDt‰ˆˆF$±!Õ•×®½m4-x²Ñ”èt[7c½e4=x²Ñ”ˆÝ·>,z“ˆˆˆ&ët‰ˆˆF„A—ˆˆhD[Û[ë﮽%DDDDDDDyøÿƒLŸ£ÿIEND®B`‚fox-1.6.49/doc/screenshots/Makefile.am0000664000175000017500000000246612130340076014477 00000000000000## Process this file with automake to produce Makefile.in screenshotsdir = $(datadir)/doc/@PACKAGE@-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@/html/screenshots # Icons SCREENSHOTS_FILES = \ adie_colors.gif \ adie_edit.gif \ adie_font.gif \ adie.gif \ adie_sty.gif \ analysisview.png \ aqx_linux_visualizacao_peq.jpg \ arithmedrill-screenshot.png \ arithmedrill-screenshot_small.png \ boskalisday.gif \ boskalisnite.gif \ clview_icon.gif \ colordialog.png \ cometassay.jpg \ contact.gif \ dlgedit1.png \ dlgedit2.png \ dirdialog.png \ emso_screen.png \ emso_screen_small.jpg \ filedialog.png \ fontdialog.png \ foxcalc.jpg \ foxcalc_prefdialog_01_small.jpg \ foxcalc_prefdialog_02_small.jpg \ foxcalc_prefdialog_03_small.jpg \ glview.png \ goggles.png \ imagedebugger.gif \ pathfinder.png \ pdiary.jpg \ printdialog.png \ replacedialog.png \ SbSScreen1.jpg \ SbSScreen1_small.jpg \ scenegraphnavigator.gif \ scriptolutions.gif \ searchdialog.png \ iims1.png \ iims1_small.png \ iims2.png \ iims2_small.png \ iims3.png \ iims3_small.png \ rezound_thumb.gif \ table.png \ tmp_vision_snap.jpg \ tux_small.jpg \ udine_physics.jpg \ vorhour1.jpg \ vorhour1_small.jpg \ vorhour2.jpg \ vorhour2_small.jpg \ xfe.png \ xfe_small.png \ xtc.gif screenshots_DATA = $(SCREENSHOTS_FILES) EXTRA_DIST = $(screenshots_DATA) fox-1.6.49/doc/screenshots/glview.png0000644000175000017500000007021711637250333014452 00000000000000‰PNG  IHDR”9·GÖ IDATxœìy|Å™÷=º/[’/ùÀ’ðÅ!ÛcK|€Ú„vÕ@À D–H Kï²/9ÖY‡'z IVï±!à7`›ƒ<Œƒ‘ŒÀ ± Æ1¾eÉÖ=ÓÇûGuuW÷tÏôH3Ǫ̀¾|šîé®®®nú7ÏóT=%ÔÿÛ*ÒsÀáp8ÎHùÙÖÿB:Òspëõk°§õݨ+«E|à÷㓜Ëáp8œèYQw>9zŸ;áXfÁ ðÁÁýQ×=’ó,¼EYøíKÛ‘NwN›y>®Z{9TU¢¨PªJÖŠªBU´ýÚñæf?r а·î_‘ _«§oóm˶•ËêëÞ¸Ñæhx¬ç^V_oªgNu5戢þùˆß#ÍÍaë³¶ÃnŸÓ¹Gü~r×p[o>çߎo'Þö_ôW-Åíwþ#‚Ã}e²"C‘}»eï{#z§÷ôp{Í=ý¦ãªb9O«GUT´¶íCQA ME_Å¢¹èé  ¤8Ãç08p¯¾ú*îùÚýøû«Vâs_¸…ù™(ÈMǹžÓ8Û} ‡;pÁ…£yËcÐ@ÐÍ·ù¶e;€¬-ÿ¬ªxÃçCAYf‰"f‹"dùeeèîìÄeõõ˜-ŠèhnÆeõõ¦cÖseÖÔà½'ŸÔëïîì„¢íÿí]w!¿¬ ÕÔèǬõ_æó¡ÃïGwg'd—Ö×c–(¢»£ùeeúùÖö䗕ᚨÞ{òÉz­×Ptúý¦öXë—µç5Þÿ^|;±· +—"8«\púº?Áƒ}úÓ«xõÕWqÁüÙ8{æ$ze0½Ó¿÷Ÿ?ÀuŸ¿ o~|ÿQôõžÁ…óç˜Þé…SP:§ga¨ÿ,†ú{0Ð׃ëoº¿øå3¸zí ôží¹žÓ8×} g»O¢HAQA¶¿ø²a¡Àp Y–!É2–{+ (*οørT-_‚¥‹/4—dÒà|*€ÉZ¾Í·-Ûmûòúz¼îóáPs3Vú|èôû1WqÈïÇí~?>öûñšÏ‡RQÄ-;wBôc¯û|xÝçƒòGõÚÆ¸}çN¼æóéõSVú|xÍçÃÌêj\æóá—k×â;ªŠ×}>ÌE¼æó¡¤º³EO‰">Ö¬‹Rm_§ßY¢ˆRQD‡ß iÏÇ~¿Þþ[´:`E}=ùý(E\ª ËS¢ˆ+´¶ÏE½=ûýzý—Ö×ãõ‘ 'þíøvâmSdYÆÃ?ü)þéï@0D0(ᱟþ_¹ã½ ûήZ¾_¿÷.ÝRY¾ôbÛwº,Ëd¿$C–eÜzÇ×ðÖÛïnÿÊzlýñB’eý8àѯg”À°Q¹,É€ªTUE`8@öÓãÚÅÏhçvÈÐÏ·ù¶e;„Ë}>øeÕÕœ'ŠØéó¡L{q«f‹"$i®¤9¢¿Ï‘9w¶("°q#æŠ">´q5Ñý5;wâ#¿+ëëѤY wŠ"©sãFÜn9µÏ‡ü~”‰"‹çÕáSUtøýðkm¥íùHk³àÃæf¬­¯Ç\Ír¢÷êóùðas3nE(vú|XU_¯×ñ×®…OUá@{^ú·ãÛ‰·=Y{O†º ÐÏ@ó;=ⱟü”Ÿ6l2¿óA ‚R¹¬Ë–^DÜ^ªbh.(Ùz&—WaA‚’„ $a÷[{±§µ ;~õ^üí+˜:µS§ëÇOêÂâ%KѾå1(¦ÈùcàÛ|›Ý¦î¨rQÄä²2,­©ÁŸ|>|ÊçÙŽ”Š"^ñùp¾(¢°¬ -MM¸©© [×®Å?øýغv­éÜÚ ˜\VÀiÍe%Ö×ã°ß››±¬¦=(E|è÷ãóMM€–¦&xkj x[s—‰õõèîèÀ+7¢¨¬ ˵s½55x®¦ÆÔÖ38ì÷ãJŸÏÖÔà|Q„·¦o75á|í¸`RY™¾>ì÷£°¬ *`ª£TõöÊÒ@~‰&Ê¿ßN¼mêòš¿ð\8ûéÏñVKö´¼‹/é&‚AÈš °ïôÓ¦b¹÷b¼øÛ?áÇþ–T\¨£ïôâ©%˜5«½g» ’ý_ùÇÿ…–½ûÐúÎ>ìmkÇ_º‰œ£W=YºËK¨¯¯Wo½~ ^ö¿¢‚,S°…kì‚:]gºñµ¯¯Ç¦Yó@tèÔßæÛ–mã÷‹Á¼êj|Úçí]kstü¹gçN¼¬¹çƲ­ôy%Ê¿ßN¼íËj¿Œþª¥ÈÍ/Bß¹3eŠ¢äµíù,Å÷GýN¿lõZ ôõ ¿÷ )g ÀÓóÙ@ý‹–¡|Vî¬ýW"(kªæ# ;&ÜÓßÛ··<õy‡ÃÓ+— T‘WP4ÞMÑÉD?¾ãû‰¡|rì/œ}-S0oKô]?9‡“:ì;HÆÄx"”ãp8Ç\P8‡ J¥x#›¶…,ÑÂÖC±ÖW)Þèº.k½±‚ÖW»~ZÚÚ£n•–¶v×õDªŸ]‡»g·Ï‘Ãápãa÷~öŸ©@]Í:ý¢µÚvíú ¨ôV µ­[6¹º­§¥­[©ˆx+°µi*½ú±*mÛ‰Úšuú ÖÖ¬ÓÏßÊì«[¿­þí¨o4­Ý¶³±i¹7­îÖ¶v}m½®õžèõiyú¹¶fþ™½ú\œ¨´<ö^£iõy46l2•‰ôÜ9ÎÄ€}¿Ów }ÿGzçGty56m ù•M_d­Qüú¦JGɾ(éËÌÍK=n³í /m*:MÛt!tÛέMÛP§=<¶~ÚîÖ¶v´¶µëb`½>@^Òìui}v÷é~Ù{±Þ¿S{ØcážG¥·‚‹ ‡3Á¡ïfÀùýξpm¡¸Ý©žFæ×µõ¥êÆB©b~¡×Y^Œl}[µ'}¡Ž´áî“Z;‘ ÷ðíîß©=VKk«ƒ êä^£VõyP˦QP‡31©c~tÒÏVܸïÓDQôMÊÂŒ)Ŷª,¿ˆg•LÇu×\‰ÿªþÙ ì¯èÖ¶v\wÍ•˜U2³J¦£Šy»©ofÉtÓµiÇŽŸÄõZ½GŸD]Í:Õö¹¥Ši‡õ>Ùå:­ÎY%ÓC®o­‡Þ#ÛVÚv·ÖÕŠ³¶É®=ôzvÏcVÉt¼øûWõògâé½÷Òï_Åu×\©¿·­œì:ƒ·[ß#Ëg„ŒCiÑ€2Ò—ŽµžÑºX¬¢X½ ­íŒeÝÖëD»° ˆqàp8±Àí{/RzßÁñãÆ_8 ‡Ãáp8n ‚ÂÇ¡p8'&èAù@0ˆ $g[8‡“dd¤}»ô­ÌŒ dfdŒKƒ8‡“üp—‡ÃápbBÈ8”ò²óÐß?àêä¨[¾÷¤.ßW¿ úûéycu?”Ÿý÷¯pèðÇ®Îßò½ocά’Q]/ÞÏ#+++ªû ‚£jßXß_²—Oµçe½`ôß¡T&DPúûpòT—«“=‘ôå)cuÞXÝåÐáñ?¿ú™«óOœ<=êëÅýEs?Öºýþ’½¼•Dkßhïýw(•‰8R~fé6ëÙ¸‡Æ¦mØzX¿Ñ¾síóDmùLTy+ÂŽ”ïp7ÊÊ:ÐÑQ†YE˜Z˜u{܌ħüKý£E/íøµë|eÖë„»Ûÿ;š±9ô¼±L™Â¦Ì‰f ÌOšžƒŒt¬ôÎØÖ–¶víÞ€Þž Üö9wÏ»y×¼¶k¾ûÀ}®Û4ÒöÙÑøÞ6l}oj—˜ŸIÝûgÔøžyL=ש<¥åD;¶¾· [?íî¹Ôþqj—¬CÕ ç{ªôß”è´?Þ*šÿ^_ô·.¼ðBœ:u §OŸ6¿NôFl×C O «§………èééÁo¼*ìsg¿‹ÊÃÙêEaØk 'bûFÂ̦mèõV ÏÒ¶ü¶ö}°1”™¥Ç_ØŽ£ÝAè8uå­“Û¿óñ–¶v´Þx3ê–®Fíó ›ª¤¬¬¢øýwá?žÀŽã8Ðq§{ú¢n—DQ„(ŠÈŸ<µë7Du®›\g­míhüù3hüù3xúù?FLkðPÃÜï[§Ÿß€™¥ÛðôóäóC ODÕ6¸ê†;ðàæÇѼkOØrLZ*&n³66mÃbo`wÛ‡ËíÞŸ¯[¦¸ª¿yפO¾ÿ±¹›½#bùѶώ©çö~Xœ­/tŸSy¶lŸX¶<@Ädî©7°iæ´œˆœú¢åD;6Íœƒ¹§Þ@ˉv´Lv8çN5 ¢2<ÔðîûÆýxþùçQSSŸÏ‡ßù[ÿ~[ÚÚ±péøÄjl)¼ —ÀíþVššCwêKSSSØöÐïqK[»¾¦K4ÙuóÛÚ±pýäkmÊokÇ‚õ&¤˜a,”™¥Û_ØŽ‚Âv¬ß@[[!~ùü>Üö¹OÛ–olÚ†üÉíèêéC–pZ'·£µ¡Úrç_`•ÿü5´>ú#´6<ŽÊ»¾¶±¢Ï_H¶E²&_œ>[‹EOÏüãF›·ª©© ®ËšXX9Úá÷ûµ-G»Wã…ÀK;Z±µ!tiWO€2”—‹èìÊËŽŽtõD—ÿÁÍ£zõ |÷ûмkÜü8®X½Õ«W˜ÊýKý£¨ôV`QùL¡¹~"Qé­ÀO›šàõz‘†ÈÝÑ{{*à÷ûá÷‡fX¶ãµ]{ð›ëB†yÖдî€òÀ}À‚ócÖ>;²¦â;e^<ÔÑfÚ®<[;—o™Üާ^z—–^ïxU×þWØ6=õ¶¹üë·GmÇ:ÔY½ ~àòÍ%¸üÂÓî×ÿz¯ßjÿãñWý¿ÂE‡."2Éêýî÷qKÞ-aÛ2ÒQVV†ŽŽkâßøžy²Ñöïñh÷,·W u# ŠÀÓÏo@²dW…x šQ&4kŸšš€šš´µ‘ç}¹·ÌTzkÓ6´ú·cûv¡Ò[?ìÜ{¾zž}î9 ”ˆ÷Cù a“.*ÇjÖ!¿­DéÑH%-”cëà÷×£§ç|DNuüµ>¬þ…äãÀámh-$bRíPÿM5ë‘9™˜ÀðûŸ/ûÿŒ©·ŸÏÃïÑ,k!¢££ ¢ØŽ²<ýüCÊ׮߀™¥Ç0³ô¶j„ò"‰d TÖ¬@^Ø~¿………ú>7Ð$ŒnÜ(TTD‘,Ä"²ÿÅ,ŠÐÜ~@G”ikw<¸ùq[÷Ѓ›·¹–ˆ- cáÒÕøåóÔ…Ø­Wy+°Â{üþ&Ü[s³éXK[è¯ÒÛ>· wÝÕŒc3Cž[cÓ¢òß}à>T¯þ-Dq#Ö,{žÍCÐ,.uõ ¨mû¬´LnGÃÂWð½{Ç´D¶ì®›Œ†ë_±µ"j—n@w®¼»‹oÀ§o~W^^±]W^^‡Oßü(2߀+/¯Ã¯_»•=6ßÃNàÂÜ\|~Ú4Óran®cÝ]„/Ìû‚i¹¨è¢ˆm¢¼ûî»8{ö¬þ¹¬¬,lùg:Ö¡ÏÛŸJ~0Ü¿¾O?¿Áu²WQ±~ýz]T¬´´µãµ7÷ Ê[©E8uê`}í—\ÕOéóV ×[™MÛpl‚§E ëòê;Û…ÂÂBBEÔÔÔ`Mõ§Ý_hjº~=T_=T=üþzÌ,=R¶ºšèÈw–¢~ÔÃ;ï,…(Vã_ê )/Š~ìÔügw••¡Y”õë×ë¿xX®½a |>>Ÿˆ–wnBË;7é¢îEÿ“¦çðn@OOÚÚÚÐÖÖ†žž|ã†ð“¦çÂ=.Ö¶©D46Eç&ôûýÅ\{CeØrÕÕwbçΟcçΟ£´´ÞÕ ðÁÍCÈÈEó®=¸bõ ]DÈ‹Ùùå+Šä‡D4î®pÔ®ÿu‚i¥¥m *۵éÛãÕ«W@´µ&&Í»rqå®Íxp³ó‹=í«ûÅàeÀ÷‚â÷Eø^ðÁ÷‚[lCå ¡?Š*_¸[lÓË _ B4ê²Ðú–&2ÿ?üüz=NõÓýlùÖ=í¶õSªCŒÙ‘FhÜÐÓÓcú;]ºt)¶oßî(*½=hìØ†/6m5ä¯ÿ\;|>b½ØÑ  ¾Þø\SS¯×9¶Så­À«V ¥­§»{1mÚ4@ÃÖ§£¸3`ö#{¯;f6mÓÝ_‘ˆAybÊÊÊl_ÞÆq{‡ì±Î™ÎµûÄ}÷¯ÿuÈ>¿¿€Õð£Ù=6CÏ n\)ÿ§ãP¦=úe§f@ÇÜáüƦãhmëÓb%hl:Žºš’r•Þ <ód# ïlô/?ŸÏ§ÅyÊðôó¨ŠÅÆïm†ÏçÚeçã»܇7?Ž×â(†;Î Z·W]Í:ÜtãµúçÚõ¢5Œø56<¥».[Ú¦ nýš°õ_±z:?9 wü7^ÛÜŽO. zuänѶÏÄ$ç ¿¸u²´cå)õ×Õcã ñxñÐb›_ÐYÀåo•À?ÄE"r­úëì›C÷ûß&åÅE"üühh³o€¿ à;Ÿ÷â7Ú/sºÏŽÜÜ\¼ßù>ž=ô¬iÿûÝï£"/òßÕo¼ ¨¯¯Gaa!ššš°cÇÇ¿ÉEåëà÷o€#@ü"êëQÜ›¯¦ÎFÆûYSSÃ1å©•sãÕ«ÑØ´ W¯]‰>ÜošHÏ Öo@A[;öj‰?hØ„™MÛx e´47¦? ¿ßJ¯}ÜÅI€úΆþc,*_‡ŽŽR4û7¢¬¼ƒü²jÎDtC±>$«?É¥©Ò›Jo>›Ž£Òkß­Šé¥ÕØt\û#~®_[d*?¥°~?ù¢Wk·m¸ËDgŽï>pþýûðÚžv(§MBòà÷â ûáÆFÝ]_ÄÌÒEZ#Ïc‡!}_ÖlÌÉ*a©Öb?®=PW¯ÀUß¿9â9£i_“ñ’føD@ØØ¬ï W~ã;æxŠœPn)Û \^\‚‡Î4£Y ¿3¸^4ߨlœØüN3Üðú­Çqeõq­ýÚÎ%Îåï-½7¤w—1È÷½¬¬ ?ýß ?N+½8ÝÝ‹§·¿‚/ÝxUHù–¶M@½aˆ¢>0«(4FáõzMÎ2Œïñ̦mä's[»Þ[+Ú-1K™ˆ¢VP¦æcíÚµ!ûÙÙI¼¡4ä—­ßüpcèƒ}òÉÔ×—Âç³–oÆmº/*+Á¢²a\-zñÂN€ªqÉrýÚe¦òÇ:g¢î®¦}n,”‡jÖa«ÿ϶ÇÜøn©€TyóQå &Vˆc‚ULà;ëïÖ·›`­¾B­ +NÝkö³“Å"e~­¥æD¥÷4*½§#–vígóãØ€È"ŽhÚ+^tv‹†;6Ö 8X.Ñ0µ0?ä{ôôöWpº»×ñœ—vT ¶æÓhmkÇ3OÎD]ýð¯×QDìmÌÃ)?ň (S ó±Åç.í”+ÿúP=ŠPþŸ#^Ë*ÖÏÀÈç ¹Z¼ W‹—è\®Ed4عÐâ{½Ñ‹I4K®y r!¼¼ã¿±À˜»àž8¿ö±ã4ö6­¢ûòÑÖïònÚÿ© £ªß-VË„¥Ê[¡÷æŠd5Äkœ ':BæCyüg¿p=ºóÐáQ½ú’¤.ÿlÓc¢¿ï‘ž7V÷CÉÌÌ@áäp~ƒ¼¼\Üÿoêzñ~;žþiT÷s¸ão£jßXß_²—Oµçe½`ôß¡T„O°Åáp8œ˜À'Øâp8NLÑc(Ñd¥åp8ÉC¥·ÿt÷m®r8#E”C‡?Æg® ßïŸÃá$åsçŒw8„˜Cáp8ÉÁôiSâVwó®=¸pἸÕÏIl¸ p8ˆéÓ¦ÄÕõ••…§~µÿòO_‰i½T¨â)†N×万 ‡Ã‰)ýƒ1­ì¬,lÿŸ?âÆÏÚg݈ÙYY1Ô;Qོ8œ $£M Ê™p …ÙÀè¸6™æð©òV˜>oÕ~©³9ÝÜÌZ»~ƒžp‘ùt¤¹áìê­­ ͱR¼­þí!s"Õ,§W‚Â{‰p&:¯4¿‰yåsÇ»1…ŒFmΠƆM¨[oÌ9²ÕR†=—–wšû‡ÖOEƒZ§u_+#RvBd¥Ö¦nºf›Bï–cçIbÛí´ß‚+A¹´ji¼ÛÁá$,í=ˆC‡?N9Aa_ìôÅòKßòÙô²÷ojzlú¢®o4]7dŸfY°â`ekÃ&´´µ£ný]Ô¨T1ÖH«ÐÕÕ¬# sÿô^Ã]“×./>(Š3Qéïï&Äö—x¥hž´«Ò[aúõN׬ÁZv°u¸Á°/øÚšu¨[¿Á6‘,uiQkuŸ±±!«x°˜,¦0×äD†ÇP8œ ûÒ´n·h¿ÔéËšgçr×ÝL•·Ðâ.•Þ 4jqšF6–b³0Ä˺ßz Y–˜=Æ}t׳®cÚææšœÈD-(§{úÈ<ðL)Ì7M”ÄáÄ’HãNžêB^nòòœ§¬íï@ÿÀ «º&*4(Œnúv"9úÙ®L¤óÜÔët¶ýt?Û©€ØçAûѵ tõôádO ÚÚBç(,ìÁ@ßôÈö² _Rë”Ý‹/q8Z|ÅœäÁéE¸óÊKç //7¬ÐrnêšÈ¤úø v¾Nl‘Ë«§§Út¸ÕÕ¥Èvgg'2™rµZ *$UšOÕúEmeú³þLV\™n‹Ö5[Æ®{ +j´× ”Ô‡öDbqòÇ76lBøÌZž×n¤üý§«c>¢}ú´)cÞ9h<®™LüûC ¸ï«_6í‘ Üyg5êëï Ùï÷ûñÌ“úgÚã"R@Ž ì±< íñÑÒÖ® Bk[»m7ÆJo…©—í…BEÄ®×'uaÄé{H»ÊV2îÃGƤ}©F$Ë“:ØM26&#åë˜þÞNÇiïÖzaE†»îŽú,í—&`îåáf>yÎĤŠù~ñ.£Îȉk/¯Æ†Mº ¡ÒÆÅЇõ…oí¢¨÷÷o××4¨æÔ%µH¸‹+µ°vsM7OjÅRK¥±a¦Žª}ÎDdD‚ÒÖÖ¦ÇPX¬ûì‚^Nø&ËĦ‹"»_?n©ß®nk¼&Õ7RéÂÝJËéBx–Ã1Q JoÏiøý~Çãܵĉ'GŽÇ'6¾[–þþî<‚)E…!ÁõÃGP8y’©®Ï¬]£ÇL¸eÂጜ¨…÷ÕæŒ'™»óö ºêòë¦.Nüˆ÷´ã[¾÷mÁ¸ÕÏ %*AQ¦Ì‡2eA¼Ú’0ä>³€ ¨ÐÖÚhkæ3ݧíØsBŽÃ\/[Ýe*G¶yï°^• ¦5èšÝû2Nç FaÊöõ˜ö±ûÓÂcdm‘ € !¨}† Ânºc>f—&žu~ðwãÝ„”åÐáñòo~·ú=Î{›1<õŠ‚@^î‚ ¨‚ñÆUUæÌ¢a® ô¸ XÊ Ð…„ÝfËYÎñmòèÅĦR­L¨h ¶Bfm#K€ UUõ[ª*ð@€¿ùÅ>|mÃåŽ÷lj?Ö1]t;ˆ·5”ÊDcéqA‰)‚&BÖÝ1aµd$Wq‹QThªÇ$0_Ëz}VÈŒýZU"&fQ1ÖôUÍÀó¿xŸûò%£»Έ©«Y‡Úõôq_4 p¼%Š×ÞqÍ¥ð¿ñ|ßú:|?ð}ëë×\±Œÿ·°ñ‘Aíþ -@ý7¿†»ï¸E¿Í}¦»9ÙÙÈÎÎBNv ;;ôÏéééHOOÓ·3ÒÓµí4¤ëÛÆ~RG–éžr˜Ï¤¾tæs22¿z‡MŸ‡††ôí $A’dý³dù<È”»ŸÖEê”$ cph}}ý˜5sŠ&Orméñmì±;7Ê«Öývu;•œËÙ½ìêŽÚ:±¹Ž¹]6×6µ#ôúÕk(š²¢*0Ôëw¤ã>é<æþ8ñ†ÎBÇãŒEÖ]ÿK¿Ô…ÃÿÆ[D8˜}™ßÝ÷­¯ëûý/ýR?æûÖ×í‡Cõê¶×9tøc\²| ²²2ñQÇßðå[oÄÀà¾pÃ5øÂ ×@’$\{õZ\ó©ËqUõ*ôõõC\½«/]ŽÕ—.Çu×\‰–wö¡réÅXzñ"\´hnýüßãõÝoãüÒ9úrYÕR¼ÕÒ†™3¦aæŒi˜6¥E“ pŪ*üêùÿAA^.²33õå’e‹ñäÓ¿1ícËM.ÐëZZqö¶µ›®·p^™ÞŽ‹ÍCåÒ‹Q¹ôbüÝUW ý¯õöÓ{ºªz®½z-®½z-_¸á|ñ¦k108„`PÂß]US§Ï þ›_‹Úªã‚êîL¢/pñr7ï²îsz)›·mE$ä%?:W—XŒÔÕE¶Qc T•Š ]“óTx°çµƒ¡÷Êh&ŠVÿvlmÚ†K6Šxáã-ø~L ÿoA¼ö6øßxËTÎ÷ðc¯½ ±¦÷ IDATXX F/£‰g|à./;Fê’2Å^ìŽ9¸½Bâ+ö KW—µŒÝõ6›´Lå0Y$ª¢¹¿X+ÅXTU…àHg>é<‰Ù¥ÓGwoœaMó>¬½îvÝ]Àd­°ø¾õuE ˆ°¬¹4DLè®0Îø Ô××«å³ ðËg¶ã3WÚ'Ä[÷ùÏâä©® ÓË+çÿ=jé­Åôô2õöbËÀ¾·[Ö¶·—å:ô4¦Üæ÷Û[1´Nl{uiŸÝöêbë:©< £‡—¶cÚã+A@†a—U—aÅ#H?ø;î<‚ƦmމNùÜ9¸´j)NžêÂôiS¦çÓ·6þ/ÿæç&°‹P¨;ŒnÐ…Å÷ðcºë‹ž÷·è÷ú­?à1”ÆPþíþ{l¿3ßÚø<\ÿ¯€}?ÄÁ-;‚_†Ìö?[ö/M£·W3Fé!Æš*ô¥­÷â26ípª?’˜8¶Ç…«K¯1L Þå6ëâ"‹lc¥(PU‚eß''$† pâ±~f­§më9tûÈÑãú¾~ïÛú€VNtäåå.„pA±ƒþâ¶ ‚›ó@O‰tžØØ M¨õঠn‚øáÆ´Œ$OËp>B¬**úšÝoÄVAÅ'áGÂs8ÑÆ2K:¢xn\P CMÌq;+E+h±&ô󣓙Dsº͂jB¬“Q1'bBz…©‚‚·_ß‹K._ñYp’—~ïÛ&+"ÖDóËš¸ 8É¥¹‚èƒóÖ&«etx'WWÌÆœ°õ«*B-löi¢"˜ŽrÌI]ân5p1sx·á0¨ÄDqçj¢0ëÈrd©×ôbvw®[ëľ©±uuQêy°wwÙ-’m¹·_Û±Ý'1áŠ-v/ajq¸w{™ÏEn/cûãþ¡ÈøqsbÔ%@@VA±‡EÐsRž2õà‚∌¨ŽÑIù[ÿ¶{”. 8Ž9a»l¬‹»‹º¸XWéíź½8© O™zpA±AºøRdü…tV@ V‰Ó E ¦{°)`— ·ÕZ'¦fZË8[Æ>Vôš£ ćt7¨…R³5â$&V7IÍBÊ—¬©rxœxBgc¥ëñHIa@šR«0 Y+¦y×SzÎØÃ]^áˆäÊŠª.اb‰8&…]»¿”^?Ä"FcN¬¢PgÀεE„“ ŒÙYáQBâ4œ±e,C¡É!©HX@êû5»ŸM½âã-øßxË4 glàÉ!ÈyVKXÇ$‡4F*†ÐÄyzà7OôàÍ“=Fn8&´«'B ÞZ—µžr ìÇØ¹ºQÑ’Dz2«ã¥Õ—¢jM%Æž2~„KIc"€YX¨xXHRË„M9ÿüRž’'‡LØ[v=³ÆlL -2r1u_,\]6ÖIÔÝÅ Šáþ2»¼è¼òì>Ô"J1ጠNÉ!mÓÓ3n/Š]*{qÍ¥<9dŒàÉ!c@ð¢Èø Mm#QCEȺ;’Ûk$—r¬wpu™bl:ì‘ ¨Ó`îúK¶Yw—!"A}Mc'–òðÐ'¶ð䣀'‡ŒBÈË>dLJ¸7?ká#“âd…D²NLͰquY…Ôêê²–g]]ú1Õ*"Vw—lˆˆ…ÍRaëáÖÉÄ€'‡L=¸ ¸Áöå#ÐnçöŠÕ˜”0]õóÁÕ¥×&ïrÛÎÕ¥[((f‚ìÖ‘ñ¡î.ã3të‚€Ùsg…¿gNJÀ“C¦\P¾ø©p„)¶ª0BãÆí寥µ·`ìê 9Õ˜óç ZbyŠáê2Öº˜¡b"æ”ÎÆ,.(NRÂ%V·¨»‡~`‚ólªy68ÏÔÛkdøöÓ6ë»Fˆ×ïÝRV¯Z'4(Oô–t+z@>´­ÜÝ5qàÉ!S.(Nؼì\ÇMÜÔírzà¿ !N®®±sªE`­[ E`c)F»h ~N·N&<9dêÁ%v""hoúQL¬B0nϨûHÿ°vz7VÈ¥âëê²\ $eýdÍB µN d¤…-b"ðxT­æÖÉxÒÒÖŽÖ¶vÐsy¥ <9äÈáÉ!c€tá d¼¯Mòdëö‚!8q“âÞÕ·1'6õ„ !l—as¯/£.ãVªÖTqëdœ©òV Ê[ÚõÐØ°iÌ3Û%„d­½îvì|ñ)Ó@Fvmð8ÿüRý|ž’'‡´^GÆg°ÄF\±]!¿þÝT5rW—í…l\]ì¶µ3©‘ À,AB‚ éb"À*J‚ǃ9¥³¸u’ 46mC¥&,u5ëÆ4}½]¢G ;jžæí²®#Á“Còä B¨ˆÄtz`Û:\âMÕ8»Ãb>æÄS "K ¾PAKÒÛ×Ï÷xàñ¨ä‰ êò¢"ÒÒÖŽÍO|?fÊÓeµN¬¹º|?†úo~ °óŧôsÙô+T€8c wy…E@Èèv§žY£q{E“ÂìGW—^këÄåv¤@¼^F ¨ÔÝ¥‚—WÍukçxÒ<¸nݵ˜uÞÌÐ{åŒ •Þ ÝÕU©eŽ7z:-‡›K/ÈuoÑϾo}ùј´•.(n ÎSáå˜7©X`/Öcc=愵ZúÕ"ÐÑî‚@T1×ÇÔCp1I0h e¼Ðc!–ùLìòvÑã4µýΟҷé9ÖQøóÊçâí½ï!';ç—‡_ü¿íÈÍÉÆ³;~€Ä=^úÃN=†’ŸŸÿ®=¦JÕ²Åh}÷/z åý‡pùÊKðQçý:uÁ¥U^;qJ;ÄP^{³·|î³èí0ÅPÞ~gîüÒç1èû‡õòÝg{õʱ§°Ü[aºž$Iz;Þ?pÈ+©¸p!v½µ—Ô94„üü<¼Òü¦CQ<»ã÷$ ¹9ÙJ~÷J3¦M-ÆÆG~„yås£ú7ä‚«Øçi`öAN4¬¦7cRb:æÄ)(ÏÈ]¸ºÌ——“5ÙÚ&fíñ¸–‹ Ç‚]’G7‰!­‰&)<9äÈáÉ!cÕ+b±X ‡¸½Â]Aä1)LQöxÔxÓ¶à°]]ThŒë³—3ÊdÛ(€ÇãÁµ·~3¹˜pÆžrðä±!xA2ö·8çè4!ŘWç… ²‹«ËÒŽA¡‚ƒÐK ‚€Ysg¡rÕr.&<9d*ÂÅŒ`غ½`N”ÁyÃí%„gÝTì¾æEpuYöÙm;9ÑËÚ u—‘CfaËys×,Ãg.]Úv΄…'‡L=¸ „ÃôÕþ甯k䱽عÊFêê cŒd̉u¿Çc9ÆTd_¾ Ùk¼8à9(˜¦ÓTÉ6ÂÈáp’.(n0½ÜC- ó<).Å…‰“˜‚óvEmO· Ë1æx,Çœ°u §›&Ä2W/Eæ/Ò™˜;áN@E{šŠi 0]p1— I¬Ó¡Tz+ðOw߯c%ã”HèbbcI8ôÌŠe*««+lz—î-»íHx½ŒÕ=&Hóxà™[ÏܤÍÏy%؎Ö{Ñ â²/Üo…,`º&2œÔ'ÖÉ!? Y±~ë8c ”°8Ä+¬aÅÉíudÀœÏÇÎÕej—õX,ñ!⢉Éj/2«¯Ôw›‡5ºƒÖü^𠤑ZkVËbn½Œ)•â¨ÕFÊ×Õ¬Cíú ¨ôV µ­[6¡R¼QOÉns8hyS/¯Hn/ZΩJÁ°Z€P·—vüHÿñÙ®„ Ä;åc{DcNô@<9dÄÄöVÃe—…w5«åÝ®X" X2eF„š8±‚¦^¡y½êjÖ¡±i›¶¡VÛ`ÚMÎ/ñÚÛôA4—ÝÇŽ¢§©Uè>Z†rìÄ)|÷ýÓˆÛÁ=<—W”©Z÷Öà<ƒÝË^/§½”MñŽ0¯X¡ÇGˆ7mÇn̉µÁŠ€Q-²Í¢œ8eß>¨Ï< ¼ú'àäIçgƉ9MÛsx±éX*ã”@Ò:R6>ò#Ó F¶ŒÓ`FÎØÃ-”0(Sg™]\¬eT,''Ò˜Ã:!åÙ€{8"?~8q¾}Pµ®ÆTÜ–\¸8ÂÙœX ÄVÍimkGmÍ:Ty+ô}u5ëtáMÊ–æ]{àé—Š˜Òѳ¨Ý„¢zš¶ÌÆG~„£ÝÅc(ã W°ŽfÛO±OÅb¸™lƒóL!n/Û¦DpuYöÙmfÌ ËÐkõ§â3@ÇV*އðÞ{š& €Ç£·‰í™Æj1©òVš[‹Š‰µL<  é6¬½îv]TìÊT¯^×6qÜÁż״™ûK ç³X*Úÿ¬cRFdžX`Œ¼g^þÑŒ9±uu æ:ÂZ'ôvûëDÅÅ=›j8¦‰È»mšPyˆWP«“/°äÂñKV8±º¯ìF²Ÿc‘L’¦ §–‡…© w{%\Pdv¨Èè$/Æü׬/ÈÏBÊ;†áé­óŽ‚€Ü¥gïí€àÑlôí-Dðh6 ÎÇpzà˜»ºôÝB¨(¹puQ¬=ºœl õØ1âÒzçC@˜º¨˜°÷ÄŠ"'µ±K i—$2R™cÇy¬m¼™‚’ïW´5›æÄ¹|FïLdô^‹Àªg‘S ÈkÔ*2g  xÖý-Eèo-Q*ÇÙ¸ºŒCî\]l]#sbªKÐw…èÜòcÇ€cÇ ì}Gë‹Àcåºj°øn¡p8ÉBÊ JÏοaf#ó°ŠÌ›ú‹>r]9y… ³²bS$AE^Õ9dÎ’Ñ×2 Á£Ñ>b옔HcNܤW1Nsˆ³Ðã¶q“ÖV¨­­&A²­ÉºuB?ÛlsR“x'‡äŒ=)%(™‡UdÖ\W¯’u fÁöÕ…åU1¡PaIŽÌY НïÇ™ üÄEïlÝíeŒI±Š…] ÞtÜjFÙp®®Kd(ªEEÀÙÓièíN³¸º¬Í%]†o·@8v±c{ uY„Io§  {|ñ"n¤2<¥|ê‘Ô‚’ÿ'âºÊ<¬"ëp”'G!$4Þ®œ\C„ÃI ‹ ‚&*@:Н—8šî#q{±ÍµDFâêš1[EÅ%AL™©B–I É$m[–‚ºO¦áìé4œ>’a´@0Äâôk¡nßáØ1Ýò,bb' ¬¥¢÷æk¹˜ëâp8ÉCÒJæGª¾D%#y'±ç¨Œ|0òï>ƒ´¿ÿÌBBI‡  QÉœ•¼* ¿%èâÚThèˆ|'Kļ/¤áWWÉy*–^Ä´Y dE€,ÓBÔ½&è—G_¨ 3OÁä§d ÷d&ú.]‰á9çaxÎyÀ{ïG†}é[]]&w–I  +Š-W±èâÈÏ‹“´ðä©G JÁµÀù+Qvŵ¾ßÜœÅ9òKWÃ3ÿ ?´œfYXQÉ@þ%™@ð“aK‚a¥‚iLŠn”ظºÜZ'³JU,[Č٠dY•tÐkúÔ½†P  .T1¹$ˆì"Á"½sÎ3ÕÎ:1Ê…wuíf-n¤:<9dê‘‚Rð²æºúHEÖ!—'9½o"  UŒàJðÑûñÏóðídˆ«‹Z'f1¡ëâ¦ãÌŽÓ~2" ΗãêB]I´½sÊTT]DÉyDH…tIV!=Qus•©KÕÄ‚¬=S¼Žþ⹜6ê¾}!ÖSxWàäêb{uQ‘º˜['cNK[;Zµ‘ï[›¶ñÄœ¨sAÉüPEÖ!òâ*xYE`Ögu¤É€Iýâñcwçß!-~ð€ŠŠ±¶³VÒVUŽ!õ´Q.(Œ°hA›’âbTž7lÜk±01}K{yÏ.W0»TªòYhWUbˆ¤)€G< Nñš×KñP åÙJ gr¶YdE€$y0óì fx€¹ÅBÚ#Еa±èMB:˜>[b'Óqž.cdôxR8y®ª^…ò¹sÆ»)ay¥ùMÌ+Ÿ;âóé ÆÚõÐØ°É”i¸¶fžr…nÓcNÙˆãïáǰñ‘™FÐsÆ—¸ JÁï‰õÑó‡Nœ‡Ð/{°¤Óo  ¿ ÞM‰=Á•#:-Û;ÝU¹)–Œè ñf¨œ?×éƒkD`ÚLŸ6‹”wKÂÒþ׃8tøãQ `d®òV Ž M8’׋º0¦Vï[_ÇÆG~4f×ãD&¦‚’ù¡Š,}Ñvj?@'Ùˆ ¥¿€Ò8œQÐß?8ê:Z¡)MÛbž}˜“<ÄDP2?P1íq‡`˜ËàÐù·ObÑgBQzÞì˜ÕUé­Ðç8ilØDæAiØ„*f?+4Qd¼Fr’ƒ˜J`€^µjûx…CšÚgúÞ6£8/ìqg¼Y8?¼{ìà‡‡1¥¸SŠ‹ËtéF×™WuÅŠH‰ Y!©cfu´[õßüÚ˜^ž˜¹¼†È9Dºšz0œÈX%gòtøýöE;:šðõø˜þ ­|ô–ë1mShYö\ë'»­›Ã ÇäIŽ.ÜÃGàñ˜R\„áá€c|Ô‰âÂÉ®êšÈð,ÉEÌflTd Wè…¤!h=ŠôE±Yè1›º:::ô¥´ô°¾°P19øáatéÁÊË4qèÆÊË"`ý•GËá)²-C®QhZ( ç—‡Ôm·f·­up8€o4-vTŠ7ê“Yծߠ»Ÿ8œD"fŠéÁ•—GD„öæb-º ½¼(’d¸¸Ø²ii€,«PÕH]ég¬¨ìÝ݃Ö7ÿ†ÊUçÅç3<9dê7A ~F‹£0#穸F<…(œ±€—PQ¡bB…ŠIAYgd˜Å! ®.Šª!¡±:V…¢(*ÁMB;VdXQIÇ[ZSVPxrÈÔ#>½¼Èó2 ——ÉõÝpçD0^Màp„öäJO'"2y2Y¨ûŠuwn®’ò™µdrrˆ;,;Ûp¡¥§Û‚ B‚‚è2¤š]`{wŸÂ϶øÇæAq8£$nŠ2/#lpž.AHaëápFÂöÎ{˜Ý\´[o^žÙ2¡Ÿi …=–Mêëë3,I‚A² cSZFu!$ŠeaÅ…µVîÏ,VÉ!ë´\`ô|žrbW ”yéHû hŽŸö†9œŠM­B\Sä…ŸžN¤¨Èˆx<ÆèwëB{pÉ2‰ŸÐE–© Pêê"¢ ª‘ÅNT¬1j¥XFNÆX%‡´–£î3ž2µ‰«…h݇©E¢Y)*N¡=¼<Ì·›íéE@UIKÉȰ*JƒƒÄÕÅŠ µNX …Љ; E™…-o'* Zßük\Ÿ]¬’CÒr<1äÄ"þÊùP=ƒ< –®Ä\T8ñÀ*Ô:¡/~À"(¤’¤ ” Êå d9Ir; wL2mï}s_œŸ‡3rân¡Ðã&ÖQò\L8ñA Z¦_#å<Yû¡¯(D èÈwšäQ’ˆ±"rîœáòêëˆ*²–$²,A– %Ôò°.vâÁSLå÷îNA(ÔëÇ IDATáÉ!S1éS¹ÈxePww±Ós¿'öÈ æ0VL¨uÒßotý•$c¡óŸ bÒÛËÆQT ÊRt1 MP‚úbµ.ÌKfáp¶,˜Ô€'‡L=ÆÄå ´w·R8q`ÏrЀ8 Š+e²¬ê‚Bg`d]]ìvWpæ YΞ5Ü\d­``@ÂÀ€Œ¡! Ãà Á Ä¸º‚PU;1 '.A›ýì1ãøÏ¶4Ùóäp¢al\^‚ŸÊAÆ-éìÇê꜉Âþ³Ë@^Ú¤K¡ªªP²,@–=e’$àÜ9sN.j¥ÐùNèÜ'déïW10@,º +ú *º˜(Š€„s{E«•’s>ðä©Ç˜ @GÇÓîÂÌ G'fÐT't0 ª 8 ( dÙƒáaE@ ˜Ä$0ÒЧ¥×”`¸¸††d *šË‹º½TH’¤‰‰«+’˜„Z!d;`ÙÏv-N~xrÈÔcÌEúT2þ4ÕcL µT8œ±¿g AQ (­û/µPT ËšÀx Ëi‰°°ó™¤§†‡¨ª„`PÖ­*&DPdÍÅeµ4ì\^l9; „ IÀ¡œ„¯Þÿq{~ÖÜ]áÆÐQõvÐÁ‘­mí¦A‘œÔf -˜Ý] Òs"Âç”wϳDPÈCòË…ôð´XЇÕžU%¢þìii‚.*’ ªšÕAâ#ƒƒ$XO%¤b"AU%¨ªÕš°³RìDD‚YHìZOümrȺšuhary…Ÿ‘“C&c”¼2Wë|#˜“ErÂ’wQÕx7!‰0ë /yÚ—Œ H0}x8¨/CC qö¬Œ®.§OÝÝ*úú$ô÷Kèë“00Äà`CC JƒPÕ€¾Ø €ÕÊpZœ„Äj©Ä×¥«äP·~¶6l"Çb,&Ô˜ˆŒ©…¢”“Ë©@àyNŒÙß³äÅK-#FG,€Ì¤T ªÍ-F‚øŠ’EI‡,§AU(ŠÄX A +T ’Y©`Ñ2¡VI¸.Ãn……–•q÷ý5ñ|„1KY»~51¡çs·Wê3¦ŠRžAÜ\¼Ë0'ì?[Ã2‘510ºË2éÞKbH"VÇðð°¶ axxÀƒèë ¢¯OÂà`@Š2 E @UY+Å@˜uÀ²?`Sff+%¾J¬’CR7YcÓ¶ˆuqR‡±¡ËÓ‘v(Õ#@PxrHN,¡£ÊÓ@,ª ‚  `LyºÈzE³6Tx<ªf±¤AQH‚ B–ƒÉ"IÔí¤hSüR+Eb’A†³R쬫°A„dØr,þñ“X%‡´îãÉ!'c.(ÊùHû(È-NA^Ài`ƒtªêª’ž\VA!321!(J:TU`æƒW (Íâ¡/vªJ…ÆjœÓ¨°ëp1º [ÃBY¾Òçg˜\ð8Jb1ö‚Rž®§^ÑÝ_N ØÑyÈË—NFež.”¦\!/^0hb¥I MPffÝNTH¬©éí„ÅÚeØIP†a/(F¯ÊUËcüÔ8œØ1ö‚R–¡wV¹˜pb k°‚¦¸Ø_1ªªB–ÙùÛ*"4^a¸¶¬ó”„›H+\—áHbŠŠ[Y¾r騟P"Á“C¦c.( Ÿ¯M L»s81µNœÅú} 1fJ$½Åœæ|7q–Ý(ùpî.' …Ôs÷ý_ÝãI0xrÈÔc\E)Ë@Ú!IË<<-à¤Û;?òòMƒ½ 8u- #ƒu­ „KILhÜ„\cùÊeÜÝÅIxÆIPÒõ¿mîöâÄ6 OÝ^ìèY{—W|Å.=½]7b;!aã5*îŽcº'VŒ›…"ŸŸŽ´¥ñ¸<'%‰$(¬ubº¶v›‘pñ“pI!íÅêÞ¢ûéuÀ­NR0.‚šIÈùîîòâÄ„+*(BE…B·…µJ¢µP¬b®»°µ{0-+ƒ['œdcÜ‚WæÀsz<[ÀIA¾Îé0ÇPÜŠÛË*&ì¾p½¼œR®8 d´ººØõ¤M±Ì.ܼkž|æù˜ÕÇ™¸ØÍe3®‚"­ÍAæ³ãÙNê0 fA çö‚¶=ÚJ¸nÃnzvQ—WÐr>iG¬­“ ÎÃÃõÿÓ:9ʸ HWæïfp’˜ý=Ó@%† ¤#Ôí5’À¼Aa·b'N¹¼è¢2çI-ã9÷ ‡kÆ]P8œÑ²ÿlˆ H V «ÛË:Åêöb·ÃY'nòẠۉ ;Ó$á'Ï=>šÇÂáŒ9RPrÞ”1ûæAWeW¦apUZÌÊqâA† dÂ,(¬Û‹®)‘z{YEÄGa­“péêÃ Š cæ9#“ðÝ÷ÿïÙÅI:&œ Ì¾i9»ÝgmÍÙ-GU>n…çÌý™1»fª³¿' @?Œ—:«Û‹'+Å…b×ÃËÍü'쬌TLXÅdùÊeÜÕÅIJ&Œ Dc•ĵ.ªxKÀôùý+âÕ¢äçÀY€X(ô…nííÎJ¡Ø Š¥i@£uÂvfÝ\ìu ËW.ÃOýãQ< gü˜‚R¼%ò‚N6¦ôxÑUØ6ÞÍHPμ”éË› ÎG5ÏÉJqÓ³ËNTèqêòr†‹ '™IiAÉySFñ–@L]VãÅÔ³\PìȽ¨w_² Oly†K)†˜ØçÃMÆip£›`<+ ÖX‹3<ÏIvRVPÅÅʼn/û/ö·| øóÛÀ®@Ä$ †e’{+%œ¨8ãio¬HéêC(†ã'Ï=΃ðœ¤'%%ÚÀ;'yÙ둱#=¼ðpý·]A\^à ¢BÄn\Š“¥â4Åj¥HÌÚ*.‘E„ÂÅ„“*¤” ¤²U’^½ èïV$û+˜)qXÜðmz:ˆË)†hD ÐÛ¥_‰ÔË‹™Èn-–å+—ñîÁœ”"e%ïN켇?š¦wSŽËŒk–;þ¸á› /vÖ:¡Ø MÁ˜]Tv½¼ìrQ1qÏÝ÷ÿïÌI9’^PR)ðnGÁÎë‘!îs1qÅš¥ÀŽG€ÍO»ÚµA˜ÇÐm;q±Ëᄊ,åÜÃ]\œT%©%•]\” q×x7!ùX³”,üØü ËAk¢Hf¡Û¬5„Z-ÑÃǘpR§ù Ïì›S^LÒ«ßï&$4Ûo­ _à›_º^V/avZc¬K‹xhí̺¼¢gù¿Öp1á¤>22á0±z ðµ½ßþîÉHí@NR¹¼&Zw`©y ‚þÕÜí ºÁbÌ_&b²f©i÷^Œ{2q·”‰J•'å¤I!(©xÇ ïdøoïfJ¼ J¼kóàDÛø'¯Ü±î®èOúæ—ÉòÆ»À®÷ȾX µF,"be¯Gƽ™ƒøI ‡‹ 'åHxAIåîÀnš×àœ¸¸ó«q½Ž·fØXA‰7%˲AöèÕ–,QPŠ¢àÝ'ó ª*N½—Sû²âÚF+ìxûoøæÈN¦ @0Df#6,|9tß7mö¹àÞLb©|UaæpbEB ÊDsq9!5¯Á`Ç@iSÌêôÖ\ ï]• ½šhzuv™§]…‘½—.FÌ¡âö!"._쇢(eûŸ)€ªªèúK&μŸ³6[±˜8¡‹ÌÈD"ZžH`¯GÆOƒñ{FÎX’‚Òÿæ dß|kŸ§` ¦b긶)(ñÃ[³%ËæÈ ò°ŠIÆü"é0æj§ÛN“O‘Q n9E‘Qþy Š"A–%úõ4|¼#vciþ\µ fu'{=2.Íêã.0NJ‚’·jÞÇŸFtn4ⳋFtdÃ[SŽï4”,+‘ cì;WºÕ:¡bâYTû.Ĥ  Uwm™]\¬«+¼»+œÀ„!ay1ÿ±ÅI<¢aà <ø ¦ ÎùNd¼õ/Â< 1`¤Ja"ÚY)¬€x`¶RØ\^Kg$I䀶™ U•d&&cˆˆy W +nDˆTó[œÄ#:A<aðLì[‘ïìÂày‚×÷"Œ ;úÏ7ŒÐÑíT,„Z5T@Øøˆ’’]˜íA¨j$g— "*tš\c›“]ÅOìÄ$’¨àì9D‘8 %¹{wuqW‚räèq|rôD\P8y¦O›àoˆ\³s³¶ÅŠ ¤S1±K—B……æñ¬ô˜ à ±ŠÊT•gV`H’HYV ‡Ý>YŽìþâ »»8‰Š+Aù÷‡þwÜpUõ*,ZàœÏi¢æKª÷£D<€Ð*F¼Ä)÷µR¨`Xc#l]4˜oµLúµëØ‹ »OU%=Ho'n,zŽ“…2§?&úLÜÝÅIT\ Êg®\·”ÏöøDÌ{}ÛmöÊ0ß…nK0ÄÄúŸŠcÃ2†-Öˆ…"i“k©Ú]Ì$\96~¢(ÀìޘݻŸ\£'œ\pw'‘IŠ\^ÕJ1¬k—]äå?f¡Ç©µÑ§-¬åÁNíÛ‹ÐÊ£5º»¨UBR¥Œ<ïF\˜Õ»?¾>ù*ï*ÌI`’BP&ª•bg”ðŠöRg…ƒ]hﬨªÕ}eVTú`X&ƒÅÄl•cRœÜ]‘¶¼]L…æöZþñŽ8=ñÄfyÑÄüaÅIzÊDưN(#&‚ ò’g]_†»‹¯I+U…VÞ ÒSÁAºšDÄ*&Š"›„„º¹Â¹»ìÄÂ)¾Id˜Ñ³' '–Ûk9pœ¤°P¦Ý?ñÌükü0ŸŒø‡uvDc0#]5«„X¡v«»ëÌn¯¦{0™ž¬ƒ óÃËZ/.Ö µNF²8 ŒžuX6Ê,>d[Jm¸»‹“èp %ñÖÛ»ºh—YUU -–"C cNÈ>v 2ç¨0w=¦V íò«jƒZ7á ¾MEF–H’‚`,’DYVôø ûâgXEÂÎB±–¡û§žŽCȆ»»8É@RX(ÀÄ Ì/­gcÔ:Q`¶PÈg²-CU©ebŒjWUC!ñUí‡;!1Uíƒ,B–‡!ËHYËr’€$Ñí ‚AY’`P†$ɦ}’9n©»°Ý>;QQà‚ýÇJáî.N24‚2‘ótŘJ—XV·É¥„P§BBÝ]¬Û‹ˆˆ¢ôC–‡4ñ  «˜ I’fÈš˜X­÷n-§ÅmYzlþ_&Npž»»8Éwy% Šàñ5;v„ A .*º_†Ç£0n/@š^P¡(ÍR ©QXa¢™‚%‹ËKÒ{qɲª‹ˆULÜ E´BNT OìGÏŒÔÎsw'YH e¢æ§]¾ßò"V …uw±™~e] %¶ë/µLTµŠ2 YB–%Ía­ÃJ1[&Aƒ’f™P1¬«˜ŒÖ:q#$¬{¬ðxêIáî.N²À-”cêj"(b¥Ð ºU%¿Œ.Ä€¢8‹¢¸ŠÇ3 AP ª2NË›EIׄǣ§Ia­V HžZ'Æ‹œá%I5‰I´‚0Rë„ÓÈ2œ§oI!¸»‹“,$• L„Ìê “ 1$DXÌãP=È­ª‚æ&£.0 A4ñ`Å„º½d¦g—áî"ÖŽ¬¹½‚ ]—8ëX’h]Vvî+*n—‰wwq’‰¤”‰€¢1A0EQˆ¨Ð¬Ál)U¥VÍ(LÖ‚ CQÒ ªéºû,TPó—ÈŒ…BG®7«x„ëÉqÚïVTMLÇëjŒàî.N2‘T‚2ºÏ¿‡é×7«¨ÁxêÂbgf¤¢‰`Œ HÚšZ'TL“€8uï$‘\WáDÅIXØvL¸»‹“L$• L„®ÃÔò °‚ÂZ,Æ D‰£0W´ú¨ë*ÔB!‚£0‚ÙÚpZt ' NVþœRØDáî.N²‘T‚2e¶»°yíñ°V ;>Å,(† ©z|ÅìöEl•nt!f6’r*ó²–@º ÿÿöÎ>8޳¾ãßgß,ÇrâHJb9Ž^ ŠãJÄ4µ e,ú—;~ù£´dÚ¡À`óR Sè´fH°IgܤCM[¦6†$… ™B‌K–ì(±±-Ç’ëÅ–t·Û?ž}vŸÝÛ·;I–vï÷ñììÞîíÞÞ9Þo~ßßïù=³Ò¶™8oQiÒ|¾¢•¨J²,ÏàHv‘6(BYb‹€ªòmaoÞа¾¼ˆÁŽ^dwi%uIy ÛQÊkú0;ËEevÖ»$ý?|ÿvyr¾üí?¯R{ªÚ¨$J<¾¿™LdQPÈî"RJ*#”j8üW‡qäÓÁíÎ;ÿ§]?«ìÁÔ÷•¾ù¸­@ff܇¦¡ˆϧ„E)ò•;©Äòª¦48Lp„`$Oaûlܺ`‹ Ù]DZI¥ TÕÓ«à €Ý{hèÁ! =XÙ €G>Qù\[¿œìø¶ßvâÁ®!GP‚¬/¼]nuy÷‰H’„|%y”  Š˜d‰ŠNĶls ƳÝE¤˜T J5ô}­GþòŸ¨0 þÆßC"ú5päÛÀïtó(¥’WTüƒÅvxÅ+ÕˆI”E*~;M”$""ï“ðâûŒ·v’ÝEKŒÔ ÊœóSà¢h›¿ûªšoø?{±€™?åOMã"R*Û^ò±” »ËŸ„O:%© ÄE)⵸~YŒN²»ˆt“ZA)<°º:AaÒ2à"¸¶ÀÊy¼Á(† ÚŸûû>ŠÞ·<ñcàïàÔ(Û+¨ê+LT¢%®²+‰ ˜fybß¿ö‹ˆtMñd»ëÂÆ…Ëa-dwi'µ‚R [¿¾GþB²ä‡ñe¯ƒ?䛘öÒ.6sá'öµ„ðÙuùZ¾éùëÓnr>‰í%Ö~Ûþ¤|Ðë81©¤l8¨j,,/‹‰ ²ñÆ[;çø²4!»‹H;©”9O¶Å¤µû"xÄ´¬œéÚMiù¥}|6`-–és‚Ö¿9 Lôw¢n5ï•0Aæf{%Í£$Iʇ•0ûîbÛ¹<8ëÉx€ì."ý¤VPªÆ/ ˆØfËËð †Ø‰$ŸÂì> ó‰!—ƒ#*r”„[_aÕ^I-¯j¢ayE J\tdwÉŒ·v’ÝEK”TlTÚy¸ïkÒƒ(*B‘‡t<ìœ0Q‰;Àôw¶br¸~/ÓÓÜ åaÉnÿ±$#ÒãÊxƒÎ‹<üåû÷ ‹¿DX<É ˜ÀŠNˆ P{ / A‘‰ñ_'ìúþkF€öƒ>\¿kÅ»‡`—¥ÒÈ%.!,úpÔï»Ö×µkåöWÐ"ÛKa6“lCíŠ(¢Î—¯´í¿9: ‹L²š7ô¬¤ü ‘ R¡Ì‰0H¡D]W^K¸ÿpëaôçÒ†ŸôáâšALv&³¾ü#çýë ÑòI;'ȘÄî’ǘD‰ÉÉ÷2îWO5dwY!õ‚RUù0ƒ;æc>s(q¹“¸÷ưìÇ}¸Ðúeäó€®»¢"¬/¹œØw¾|6%®â+jd|Ø`ưÄ}©ä~/â]&«IxÙ]D–H½ TŠÓÓ HnQ‘Dâ’òRÿ». <ÓŒöÍP_ïæSdQ ŠR*•0A‰ëÝ•DPda±,xc‰I–“𲻈,‘zA©:1fwùü•F*IÅ©J9ûR 6÷-Ãɳ§ÐÐÀ#•8QÂGÆ JX«•°ÑñIE|¾ÿÞd†¶}«Ö&ÿaR Ù]D–H½ T“˜ï<Ú‰¡CÑÿ¹T{E ŒÿºF+ë7xøœiÂ7ô"–/ Ãÿ Ç¸râJˆãl/¿ øÇ—È Œ¼ó5!&dwY#õ‚¸“æRºŽvqA’Eó]Õ5ëkýÐÞÒ„øð{ðµ#/`äÊr9WTDI1P..a¶W˜¨$PäÆŽþF¢­Jìw[·#ïü ú×¾8w®ò'eÝEdL J’‘óoÉÁé¿„G AÂD\”uý ý1A|lëýø»C/àÜØê꼘?QïÏ«$•¸–+þÆŽþ,a‘ˆÌõãáwuà+¥&<@|²Ù]DÖÈ„ TD ѹ øáž$RIrn!ûq¸å0a?”?¾b€WT>¹í~œ83НüÇ‹(\QÑõrÛ+h†Ç81 ³¼Ä:¨í|R!Y¿n%~¨ëïjüú"þþÊ›ãOL9dwY¤æe‡±÷…— GÙ]~üB™ó¾¡åCjâ÷jßïûÎô`èÌDàûß_~söG. Ÿ/OÖ^A‘ r>ÌþòG'IQI-Bv‘EjNPIšÛ—0H’”:oÜ}{3î¾½¯]ÇÀï.`ìê¥|¤óÑÒv’1(A¹”°1$a´4-ß¼u Ö¯kÂÐéñ²ã¶bÿ6‡ß ÝEd‘ÚQi—X‹P¢l²0¬ÒüÌX½¢«W4`dt—Æ'ð¿¯^pr*þIº€ðÉ·¢l°JE¤uUîëlvö…EZ;»;ðÈÆçõôðèÿún_q3nª_Ž|®LÏ9 _Ô€`UÏá A×—¼T^f›%‡Z—7¡Á¨Ç2£ºf€©* ª®¨¨* ˆèDå‹eÛ]Âò2MX–ËŽN¸å¥0Š"DEGn ¯8ÙÿÒ"s‚H?5)(½Úæxq·ã„ÂŒ@†brigÖŽ£#CÏ)* j`Š,&¶ˆè¶¨»kVô{)Â,rÛ˲L–”* Rt…G(yÕ@½Îm/‚ æFM €pÛË¿•LObuÅí Jô‡}F °Ì¨G½‘GN7¸p8b¢ªb¯U7o"^ÏÚvW±«T‚eº}ò-‹ÿŒŠ¥¨ ¯öÒmÛ«Î0ðôãû÷‹D¨YA©ÈöŠŠZâ"ÿþ°× `äQgäܼb †ØVWP4Ûú²àÚ]Å"ÏŸ˜&,‹/ ¼Ê‹ Ë‹)P]U¡ÛÉùœªã©ßXì¯O©¦vEÛþ€O²-¿Ž³ÆHHq·µ u†¦ØQ‰¢rËK í—í.Mu£“’éX](•`™v”R2Ó¶»œI½ì(…©Ð”œf N7pŠl/‚˜5+(ñôð:eOÅ•WzNØyDST(Šn‹ˆ-&BD`Rt¢HûgK|)š@É„U²ò¾ë3ûªØ‰yU…®¨0y͘—AŽQËÔ¬ ìÔ÷ò¸("‰È$˜$¶XÃÅx"Ñ€Œ¹Ñ‰ˆPLHù¾¶L»ÊË,9U^…1gQ™-*ª†¼n ¯‘íEs¡f@tž£‘ñ¿'îxÔy5Ìí!'"aŠÂE…Ù‘‰°¼T©»¥¢Ø³y¹ýó­RÉÐ(Z®¸¥Ã`v”b‹‰ª(ÐÕ—’ÓtüðÀ£‹úDš©mA)…ìOR6ì?gY…‰WR©±a¶­ÅŸh0Éî’“óLq§†”gù2M'gâÄ'Œ9bÂÇ¢ˆŠ/ºª:#ç5E¥1)Q%5-(;Œ=á‰õj«´’&ê‰r_¾„17:‹°ÀT•G R2^D(–iÂ4ýmW¼íWx ±Íä¨+*òoIcR¢:jZPÊ+ ®¤Ò«ÚÏ«q‘Ù ¿K²º¤ [D+d´Â˜=ÿp‰Wy•øšçML·åŠ%µl³/Çl1¶—¦¨ÐT ºªÃÐtüðÀc‹ô+Dº©iAqÆ¢øIR6gcEE>QÑM­Âó ‰Øv¢{aöX,ÅY¾”xwaË´`™nÏ}QëŤ?")ÏDù°¢Bc UENÕ¡)*%ç ¢ jZPzÕÍñ~¼®ÖÆ  Àda’¨8û¥ÈDQ¸`8“ÙÛ墲Ë4%Qd»‹ÙŸ%óîÈy.,9M‡¡id{DÔdûz僢ó'QÑJ¥Kصk5õo ‰ˆ,b£"í/•¤D¼;ɽåÌfÁ;Ų/ÏÀ)1o‹‰êv!Ω†û¹8?A¤˜šŽP`‡¶'ø@XR!ûæJ ‹ ¬´î’r&Ìþ=˜;þDaÞÜJIªî-ëMSj¹âµ¼äX±#a©ŒAcªÔÖ^‡ª’íE•Ró‚ÒÃ6…GØ—Iš?©2ÒÓ’÷I;þÈDD+žŠ/[hìhÄèÞÝæ•]bñ}„g‘úz1Õi)ÚÚª†И‚¨ˆš”^e3ÕŸñîL*"ò:ް÷Å ŒÄ£_z½÷dOPnÕÚ¥è"Ñá‹" ‹éíÝ刉hUo§N,Xnµ—ˆxìÏ=½ÆxK{Eå‹=›£¡êPXÒ¿\‚ \Tz”Måõ8Ë«ÒÅÝ(‘‘èéÞ„£ß›Fï=›~£tѬwxøžèDÊ«(̵»J%ïbJ–—3¸QTxùþªœ*/1ÐQUhölŽb £¦hd{D Ø<–{Ö+*aÂ’DT‚ˆ—Ý÷ ûâ³ ¾Ašñ©oYt"E/žV+¦ÇêíêQžŽ‡ñ3óANù°¢8}½x”ÂÛ±ª]¥š‚¨‰ÇòÏ¢G È©âDE~_”€ à˜ïuO÷&ý¯iôvg3*‘¹Uïpó#€7qò*¶¸”JR„RtÆŸÀtñBºãP`[]bͤóno/QBÌ'ßR1|¬ÿFÿ‘ZHP|B$å!W{ñþ^šd{‘ Drè_Kv6îÅÎÆ½øÖØxË{xüü>~0IEÚ·ãÁ=è¹}zÛjWDdÌõ„«S,rm.y0£SºkyGÅ‹±&¶Åå$äíÆp5eR”÷õr›E*v.EWU¼û#»oÜA)‡¥v®Üën¯v·û¯üÇÆžwÄ% gÕ&ôÞB¢‘„Á?ºÿFJÂCÚ¶Ó (vEEFŒ·ìWœyQ„^ù¢_bU!W˜ ’B‚2ô®ØŒÞ$sáămh}y Ë¯Ìø*¾ìÅ ïäO< y·Ÿ—÷"Lº¬<E²¼ÄbIyðƒÛoèï@i†þ÷‹XTnéÝ_UÀàÛnÇÕ¦ºò<Š%Ù]%Ÿ˜øúwY¾Ã|Ó¥0»|˜A?Jq#”Û×ß{ ‚H?$(Ä’bð¾œèYÍ_ˆHŲÊDÄ8"±|6—<Á–› g‰yÕîïÕÜ}Þû¥/.ô×%ˆLA‚B,9ÆoÊã¥Í­¸Úh`¾¹â¥µåN¦eÙÛîk8J46Ì5ÁvG3rkZ[¬›&ˆ ³¤E=µØ·@¤œËm¯5Q€u­eÇLôßA,KLP^^ì[ ‚ ªdIÊÀ‰“˜œ¼¶Ø·A©åòWûbñå¿ús ¿ú»Å¾ ‚H=ëÖÞÿ&‚X@]PÖ­½ƒþ!Ad)OAÌ $(Aļ@‚BAÌ $(Aļ@‚BAÌ $(AÄ¼à” ÿã?…Ëó^‚ ˆãÊÌÌ,.¾>º˜÷BA¤ÏÀÆWÏœ[¬û ‚ Žöµ˜™]ÐÏ()¿vÍm úAÄç¦Æå.Ô¥+ØýÈÀþ¯îê˪þ JÊAÔ0ß=üV­Z…­[·â»‡ŸšÓµB¥wKö<„]ìÁ/$ºXï–¾9Ý AqãùÏàCoŸÄ蕉ŠÏ-Ô×9Û‘Í!wo߆ý¡ÿø<„Þ Ýè?>€]Û·áÀÁCàl÷nèì·÷ïÞ¾ ½[úÐÿÜáŠo ‚¸1Œ^™@㽟ƚ {p韶àÒ•‰Ä¶—,&@Œåµÿà!8x»·oC¿¥ôÀ[6t;Ò|ýǰ{û6\H<Ä£{A±ôxú¹ñÑý5ÐöQÀÁƒ|JBLN¸3 F ÊîíÛ°ËŽR‚^ Qà±ÅDÔ"DF¼Ÿ ‚X: Ÿ>‡-[¶àôéÓ€¶¶6œ>}O?÷bäy²˜t¿©ÝÙ*("ºèµ£‘ý_݇ý¶µµ[:ðÊùœÝÛ·yĆ ‚XZh׋¿û$.$pý÷Ïn͇Oz&&À>ûÙÏZk[pOÇ]xõ̹y)ÞõÈìÚ¾ o!Q!‚XÜrs“§l¸é4ïý4Vlà6׿|þ>liãnÓh[¹³$&'Nabú:¾±ÿÉ…)>ðÕ}$&AK˜7ný `èè“øÜç>Æ~ôâ˜ç˜L˜˜ÈQŠ§Ê«µe5n¹¹iaîž ‚X4 …z@ŠPŠù7c´ítïëÞ÷v^‘Ô€+‰˜>A1túyAd‘*Ÿíqb"WyipoÏý¹ðZäEOD{GWU7DA¤“SýýhïèBÝÊ ¿6 eÛëšWx’ ÊÙWOÄ^´½£ k[î® ‚ ˆ%HJ×Ç"ßqöU~œzyAóki~Àjm™\ìû ‚ RÌù‘þAÐ!ãAÕw³IEND®B`‚fox-1.6.49/doc/screenshots/goggles.png0000644000175000017500000004261211637250333014602 00000000000000‰PNG  IHDR†Í¼h×þ IDATxœíyœÕ¹¿ŸªêuºggfØÄ€ F£ˆ¨(¨ìà¾$šÄ˜DMÌÆ5šx"ñæfÓDcbÄë†+ˆ,"‹ €Êâ:((‹,²ï03ôÞUõû£éžî™îžîžža{ŸÏ§§ª«ÞzÏ9ÕSï·Î9Uç(0A„#¨G;‚ ±…%º²có꣙Aá(Ó±º7' ¿ùÍo0 #í&€™¾õÉHü“ÆO·ä~’¯$úiâ¢áKÂM7Òš°1š魒øj’bR?v6ò“ò,M¶4M=}ÒGv4¥ü¥ÍiÿcŒˆqÚÿ3O YOáÍlì!¹?³Éæ¦þŒ¤I$ØÔO¢?#¹ëfÃjóVi|ÅRL §v”°'I,H~ê̦›’d4Ý”ô 3¹Ÿ&É‹k6^My!¦ÏU?É¿EK{¶Òþ„‰×oêŸ0r4ßöo&ûéšZ5ú^±tIl=At]çã?n&Iš3ñO36©íšînjל0¤úIþmRCŠCÓ[%µi´#¥MÜZ³n›Ú¥<£ÍÚðû¦†4p#»ælšõd&9/imRÛ5ý÷MrFSü4oÓ`×Ì%@ÂyI[ôL…!}ÔhH+CaHb—üÔ5sÖ“2ýOæ¿¡‘]s6)=%½R_hiK˜òçiê m¤kög63†fBtÄ*Ψ®öP¾aé:zj " élíaahÆN„!µCr»l…AoT{H¬1„t ]„!YND’%)Â2#$œ¢”v" INn“ÄN„!¹]¶Â`è‰$CX¡z3I"ÂÂN„!µCr»Q_z ÞYœ,áfü$~ÉT®ró¼Ô&™§¡—fîü…‘õ+3çÈúÉ, ¦‘®Æ–ƒ" ImšÚÏÂ0ø²KbÛ¾½¸©Í»”>64µKˆ#y†¡W Nø>gÞæÌ[ÒW*OÑü½9ç­Ô¹ÊBFޏ’Y³ç%l5âJfÍž›pH[ ÃàK/bá;ï6ÙÝžPchô[KC³6‘" É’aH™NQJ»£! W Äüï$µ¹bÈ¥Ì[ðNB¯¼ü²ØúÜ·î·ÆoÝy“G† æñ܆_9€7ç-ÈXfÏy+fg#‡]ÁsæCtýÍùŒYÆ{5üÊ&ù5âJf è£G\ÉÌÙs=b(3gÏMÈÀè‘Ccë3Þ˜“˜¡#v£F\ÉôY‰ûbçÁ„±£‡ðúÌ7cû¯=œ×gÎæªÑ#x}Æìȶ1#˜vd=ÊÕcF0mú Ãü…‹¹bð%Ì_Ø üñßú %΃ô14kÙ(Â,I†”!ᥴkkazÅeÌ·0éþ¡WfΑ}îÌœ¹‘@>lè„õhŒ>toÎY˜ vyB숮v9³ßŒòÃ/gö›ó¬Gw£4.MRÒi8ñi~3gÍeô¨¡Ì˜503j3Ží1£†%Í+ÀèC™>óMÆŽÎô‘>vÌp^?²~Õ˜áMcä‘LL›>›«ÇŽ`Úô† µ½zìH¦½ ê×\5’×^#fsÕè¼öú,®¹jS§ÍâÚ«G1uÚ,€¸u“k¯Í”×f¦83 ŠþoÎÿC¯¸4a³Š¿Îu%Nõ1„¥A„A„!©MS»ãQ€´×xü¾Ì×Í´6#†_žtûÈáW4Ü}7ºÇŒŠÜ]OŸõ&52rç?}æì¤ez=în;“üů¿6}V³6MΟٰ}Ê´™\wõh¦L›ÙÄöê«F&õñêkÓÖ§NOZ¦TåHNbÃì¹ 1t³ç&6¹%6%騩„!YSÒ©§tO™üú Sd‹f¯ †ælâÖDDšµ9ò7#aH¼Cžmo´/óu3­MCÓICæ¦ÍœÍÕ£G0fä0¦ÍœÝä"œ6#u“ÉkÓ߈Ù%+S¶ùkÉz|±’ÙÄo{yÊëIËÔø¸ÔejZŽä$ ÃèáW0óÍù±e̪QS’%N2ê|^·~C\’€iÒ«ç©)›DÒÙ4Ú! ÂÐŒ]>…aú¬9Œ5ŒéqíÜ©šU¯_u¤»ñö«Ç&ßÞt=ñœúú,®½jTd’‹0UQškJjºnÆÖo¸vlVeŽ_¿éú«šlÏhtû‹¯Lãæ®Nê#Y™RÙ¤+Gz„a쨡LŸþ鳿&|OhJ2M …0„St>÷üF¤É§R.†t6vˆ0ˆ04c—ïÃkÓßàš±ñÍF“íS§¿+`4€G—Qû)¯Ï⺫FÅšO’Ý1¿:m&×_=:¶ýÕ×fpý5cxåÈ÷l„¡!Ìk /¾:›¯¿:¶Ì¦fðÂ˯ñí¯aò˯ñ¯É¨ÆðüKS¹å¦kcÛžq ·Ü|]lÿs/NI™fã2=û«|÷Û×GÖ'¿’þ_êH†L®3œ×f$6Ž6ãÍØö„¦$à ~LU%:ìöŽÍ«9j,ëׯk&IÒ]q6±?ÍØ¤¶aahj“ÆN„!#ahÉ{ ×_;–W¦N³‰ü¹áº«xeÊëɳ™¤é‚4ÿ ìš³Ié)éuúB‹®Þúíëyî…W’Ú¥‰NilšîLûë¤ÿ‰cvÙ¾ÇðùpX“¢'«¦ÊŠCò$ERf„„S”Òîx†›®4¼øê´û›£Û_y-¹Ä„3°iør, Ã÷n¹€§Ÿ9¥Ýñ, ‡ÄH¨1 ¹b87|ÕL’ˆ0¤°aHm'ÂÜîx†¤ûcš9ë'€0¤-á €Ÿ’BGòCª>†FYaHa'ÂÚN„!¹CÒ„“Û$±aHn—õéÑÛ¾e öïËÀcúÝiF]Oe˜a2™ü×g“D’½)Èà<7µJrPä7µN=L|–$þWe——F rÏÏ̆ìòg6›…Ìò³j6ù nØ2O6©a“-Y’4ÂÓOÕü| ™2WYæ)íÙÊ"Oi…!Ææ8Yƒb|[`K:ÄA8ñ9ZñᨿÇRu"Çïk¼½¹üå©)‚+ÍÅÉ|×,Ú\Ú¢I%Ó4RõäÇßø¸\ó/MI‚ dJ¶ñ"ßO%)0vl^}ÒÌà&Y„|Ʋ‘co¤cuo …} éª/G#èžlÚ‚ d§ŽöMk‹„áhg¾1™æGD„£Å±7“qÔžJ:š?Œ Bs´V,;êO% ‚ Ç" ‚ B" ‚ B)û¦NŸÛ–ùAÚñãdzz劤ûÒv>?¾U2$‚ »4ûTR*Ei)S§ÏM«Xâ_üMÿ‚p"½~R!} ‚ BÇ”0ôéןk®¿…bFJ»{ÇÝͽãîæ°Ç“ÖNAÈžVyÁ-—ñ;úôëÏŸ{÷²yüô'wò÷ÇÿIYY)ªÚ ]÷Ž»€^˜Ìý÷þŠÏ>[ÅYgõÁírå·­@8¬óÜŠ-„,*Ex¸éü3²öárµ(žÃui÷oÞ¼¥É¶êê®-J3J&S½f»O„Ö!¯Â½ˆÅ}Ïå‚®Y½‘~½Oá±ÇÿAyY?ºýûÌ}s&ÅU=°Ù­Ô>Œ¡û5†-»ðÆmÿvv~ù)çÜû0ÿøðC~ú­Ê£µQQ1æºØ¶Ù3¦$ˆE>D¢wßóQÓ4cËLö ‚ÐväujÏAqߦifÕ9‡qYŠCÓÎsÿœöÕ}pÆlm6[rÝ6<÷¥‡Ð—KùòÝy´oßžßÃßýož~{ ߿쬣½QQˆþfÕÕ]éÝ÷üØþÙ3¦ÄÖ³‰øa£¿ñ2Õ6©-BÛ’ah, Q²}b$'|¯Y½‘ŸÝ6*i.m6ãî¹?ö}ùû )p:šžZJ>fX;÷WÏðï‰0î¡;h×®†a ©[ü"kì½²ö×ýÔì› 6}õEFv³øïñB‘‹HDƒ}»!·PRVa‚Åb¡¸]…Nz÷ìÆk¾Â·{KŸûSÖ7‚ ´œVécXDöµh* .wòþ«ÍÆ¡]kéøÐ£xÿ9‘•+?§oß3óÖßÐQ8sı8Ðg {ô<ÿ?÷ðâ‹/rÑEñÅ_ðÈ# |heE,üô+Ÿ}jƾ3 ðù Y3RãÚD|sSsmR-.λòBõ°•Æö_ܳ’]Ú“'ßéÈÊuÝbÇHAÚ–¼C´M8þ{.wyñÂ`èAL=„ËíNjk³'6%öxòÖßÐ’a¹ÿ}úpÞyç±oß>*ŒZÞß°?+aˆ’iÍ!W!iÜ,ø¯^¹¢I-"8Dk UÅNþù~ìݳŸïü}!eåíhWYÊ’u{èÙ¾í|ò±c¤Æ mK^&êYU³<¡M8× 9xDÂ:L=„¡‡š@”ÖêcèÓ¯?Ñ’(9Ôl%Åüû/7á¡‚¯wì«ó1rļ^/ªªb±X¸úê«™4i»°lÍîœòÙš5‡dO'ÅïküW¯\;¦wßó“þþñý kfÿ‡¹UÑ¥sg&ý|(5›öòÕ–=ÔÛ;ðÖZ/ëv…yý¸Ýn<Ô¡ ÉYâûR5»dÛ­1èz =„©‡R @kC¼(äÊü¶RÛi¦v‹ªQèp0ê ©««C×uTU% âp8(¯ÛH]ÓÖ³´´vCã§“âû¢4þé„$J÷îÝÙ´iýûžÆG5«™óÖ;,{ÿÇ\1ä2~ÿЃüäá©ô8šöÁ­xGl=OFù!ä, ñÍG«ûñ­f#X¡>Vc°ªÉCµ5ÏÂÐXÌÚÏŽM«™õy5gt脦¨TWvæà¡ƒhšFaa!ªªbš&v»«ÍŽßëÍÊ[ö1ä³ gÖë/5Ô O=õ çœóMÎì{Õ=ÎફoåÀ®½¬œ9Ãû¶P^]þ§’¡­ÉYV¯\k>j, ƒrô …¨ß¿‡³S¡ë‰·ÔïÎy’EK–ÓçŒÓrL¥)û”˜ <˜õ Vnê8ôÉ»|rî 0ô+îÀ—_~IŸ>}ðz½(ŠB(¢°°´Nè¡Ü}kõ1TWweóæ-Ik -%úÿ²Öñ½¿Ù‹› #¯½ñ*_®YKûk ¢ûA¬Š¶‡cÇHƒ ´--êch|Á¶ä]†åï/¤ÿ…ƒQš@Ñ3Ó¸åÆá¸º®P³f ‹–¼s#Jtìv;N§“‹Ÿ_Å齊söÛ} ÉÞKˆ_BËÇKZ½r«j–',3Ù'BÛÑbaˆö+Ä‹ä~gÙD¦Ìçwã‹ÓéDÕ’yáv¹Rîkœßt~UÍr>Yø ʸǾ·”'u9?|øuöÝ6Š›O-à橑ʾ#¦<ù£œ}¶fC²±’¢âé[Îiîœç²O„Ö!/5†Eqëù¸Ë‹‡5kÖãóùp:ôüFœNgòc4•‚ûâÉ$Ð|sð÷XUó½,sš ¾Ñ‰ÿÆMâõP˜vE,j(´%©D"]s“ Ç7-†Öº£‹ŠÃÙgŸ…i(ªš÷AòڧͧßÑ"ÍͧÐÚ¤uµñ~AŽoZý©¤– ªêq1 ÏɈˆ€ œ¸Ÿ·ß‚ B«Ñlaêô¹­šñ/þeÿ‚p2¢ 4Âرy5oL9¶cêô¹ŒŸ¿GDA„c‹ø&á‘co¤cuo@š’A„Fˆ0‚  ˆ0‚ ÄÃa¾üòK>ýôÓ6KS„Aádûöí<öØ£Ü|S<—_|±ÍÒ>¦ßcA8™ðûý¼õÖ[Ìœùvëô÷2ôrØüuï6}H„Aá(³oß>&Nü«>™súmçÚ1~Ž0ZøËß:3mÚ«¸Ýî6ËO^…ᦛnâ´ÓfV[³f O<ñ.— MËmBA„ŸÏÇ?þñw–/{‚«Çì ÿ9ALÓDUáÐ!+¿û}1ÿýÝ»woÓ|åE&L˜Àoû[Âá0~¿G À÷Ï;ââÈÐÒµµµ"‚ D¦%˜>}:S^y!—}Å·7Ìýn±€fQxôOv&üî)ú÷ïŸÆSëÐba˜0awß}7>Ÿ¯×‹ÏçÀªëY, f³­Š‹‹Ù±c•••͊ÿ¾+íþ‰þWVyŒú›øç%¬ç“d~[+-AŽ_öîÝËo~óSºtšÇ­ß®CÓL4-"ÑÏ˯º8£÷­Œ=ú¨ä±EÂ0aÂ~ö³ŸQTT„ªª„B!‚Á Š¢` Âaj«4w€ÞYÜ4¬#/½”™8@ëÔÖÒwþú.A8 ˜8q"½zõâ²Ë.Ëø˜%K–ð÷Çîâê1¨hçÇjÝVkdùéJ+W}“9sþÖŠ¹OO‹k ~¿?2 ªÛM(âÀìß¿ŸBÓ—ÆžŽ°³,L(`añbøôÓO8p EEEY§•êÎ?›»õ\}äãî¿qM(ê+*&ñû“}oÎ mǤI“(//ÏX&NœÈûï>Àíß?€Ãn`³ÃAÂrÇNÿ­Š3&c³ÙRú ƒ,\¸÷Þ{eË–1gÎìv{¾Š–û{ 7Ýt×]w^¯—C‡qèÐ!6lØÀ_þòFŽÉOÅÜÃ[ÙÒÎ@?`úÝÊüæ3bÄêêêÐu=/ˆ¿CÌd½µ}DIeï¯qZñyh,éò•Ì ­®ëÔÕmÆïû€•+W¦µ5M“¿üåOlÛr?øÞ~Š Š‹¡´4ò)+ƒ’PU_üW!ÿþ÷«téÒ¥‰C‡±hÑ"~ùË_r饸á¯ç™gžáw¿û]^EZ §v¦i ñûýlß¾û¡C‡Æ¦÷üë#?&ð™}“ûn;®Pdn…Ï>û ÇÓlwþú®Ø'ÍÝ-gr7‚ œ<ìÙ³‡Ê ß¾)À_ÿú×”v†aðàøðÔý/#‡ÕQ\lRRÒ %%PX6›Â¯ëâç?œóÎ;/vüŽ;xî¹ç>|8gu:ýn$åÅOðíÖÒ­[WÞ~ûm˜÷òµ¨)Éï÷ÇD`ïÞ½,^ ‹}—§žzŠE‹LEá¿Ø)jWVb¶'£ÃñÓÕ2äî^޶lÙB×.½O2õµ©¼óÎ÷¸ôÒKl ÃàþûƒÃúOÆŒö`µFšŒœN((ˆ4) ˜&¼ñ¦«m,7Ýtáp˜E‹ñâ‹/2}útºWûÐßÊíßõár…1Qùëc™4i*½zõJ›OÃ0¨««‹õgJ‹„!`˜†ÍÀ¨2èׯƒ),Zdòì³ÏrÉ%PQQÃáÀ0 ÃhIr'Ç«Ø ‚Ð@DT‚A“Ý®ó?=ÀÅ/Jx¨æ¡‡c"7\çAÓ"ËNgäcµFl …§ž.åßO<ÈŒ3˜0áA‚u ºØä¡ñÕÝ‚X­‘ŽjMƒoð[~Çé§ŸDn¸}>Û¶mcãÆ¬X±‚µk×àóîÁnßÇGmáÅ—æ%ÔDš#gaX³f †@-U1J ì%*?þ8wß}7Š¢pã7òÇ?.£S§Nx<Âá0@ ×är&wè¹øh®oBe„ã—àpèè:TVè×÷cž}öYn»í6.\Èîã×ã‘'Žˆ8X, 5…pÞ_êÀ8•;î¸=ü×^eð4ÍŒãpDDaß~;;v]Á•:ð“Ÿü„5k¾$ÞEÛOE»ƒtê¤pê)&çÝdRYDQá׿éIŸ>}²*_ÎÂðÄOP\\ÌïlvÎ{,T‡ê™üÐClV:tè@—.]())ÁjµâõzùÁNeÒ¤I­þ¢[4('{Ú§-}¤ò¿íhù!w6nÜH—Ž ÑF® òÀCrë­·âñxøÇã¿â±G£(&ŠBìn_U#¢Qà¹É[·~À}÷XèÒÉK(±³Ù"µ‹¨0¨*üß³*+V¼…Ë9‡ À­7±Z ÅäHK} U…ç^(ä·÷ÿƒ‚‚‚¬Ê—ó n†a i ¼³èè±Òa ì6Øh³qÈ墰°—ËEII ………ÔÕÕQVVÆK/½ÄÀéСÃqõ´Üá ‚å–[naØåÓ(/ób·G:‘-)í÷lݺ‰!ƒþÃÙýü„Ñ}WÁf‹„®C0Üÿ@ß¹©›-L0ñ}„Õél8Æ0`×n®UÕc¢¤(‰U|vîr2uúÍLœ8)e9RÍà–sAUUjkk).(fËg³)>µ+a"m^º® …ðx<†Ayy9“&M¢¨¨ˆ¢¢¢c^DAH…×ëÅfM|€fÌh?ºóNénpþyþØ¿ªF{4p›fDB¡H­áÞÿ:€Ï ›X'uô£ª öí«‚„B$ˆB´­‘DÓzk¡‹Ÿÿü¿r*_‹:ŸÝn7;vì cÇŽ\r ûl\.WK’m¤ÉF„T˜¦‰ÅjÄš…L4Õ䱿úqØÍXÀ†qˆ~×õˆ „ÃÄš,boAÛl‘§–ìö†šB´æ­}˜fƒÐD… ^öìµ _0¨i6´HTU¥ªªŠ;vPSSC·áÛØDûŠŠŠ8ûì³3ãX@„@„d¨ªJ(¨‚3¤ #ðÛW…°ÄEUÃhÖªÚäu=ò1Í#ƒæi‘ÍÖЧõc 5‹¥á{|m!^|Tž}¾Š_ýêÿå\¾‰‡ /¼­[·òùçŸãñxbï,¸ÝnÎ<óLŠŠŠdtUANªªªØw ò’ZT £áN>°ã¿Cƒ€Dk ŠÒ VkD¢ÍIÑã¡¡ó:ú½q¿Bü¶ Xlß¡sçÎ9—//Ãn«ªJQQn·›¢¢" È ƒ¦i"‚ œPœvÚiìØßèù­ Ä·ýLJµÒ»wv§6&¯s>G¢¤¤„ÒÒRJKK‹ŽfA„lèÝ»7_o‰ëèûÑš4mÚ†æ#]oÆ5…xQˆÒ¸Ù(¾–ŒK/ñ3}zËæ‡Î«0‚ œ \pÁlÙZ‚¦)±Ú@0ùD›‰¢¢Ý/ Ñýñs0D;‘[‚¢(¨šB§N[äG„A!KœN'<< ›ÍLè?ˆ>‚ þÑíE!Zˆ6#E;§sFQP4 T=щ{îy°EåËëœÏ‚ '*¦ibš&~ø!O>ù$k¾|ƒÊJ'úÃ9ß bzì}ƒh³4C´ƒšŠB¶­í‰o9+¨šU³°â7½ûüžŽ[Vch5aˆžDˆTo”–Ö‘ŽE¡o߾̟?ŸvíÚ¥ÑpäÈ€V/N[ ó‚pŒc_ý5ÿú׿xõ•ר?d§ÔÝ·ó»ìÚ¼•Åo‰¡l¡wï #‡+\>8D÷î!t½áUÓl¨)@ƒd* Ñ㣟è6Uµ ‡lÞPÈ”)ýyä¯7´¸ÜyÓ41 ˹ܻw/.— »ÝžÕ°¯Ç#Š¢ðgõƒ( IDATãçžÅ½l—:Ÿyo/£¢¢"!èGá…&sÿ½¿bùòåôïß?§íAh¢‚°cÇî¹çæÍYŠÓr:…Ž18 ­˜¦‰ß¥•…Õ(ªÁÎ{xä/køß?nâôÓëùÖ¹pÕ8ãŒv›žÐœM¿BTX¢µ¯Weû+ï½+>ÔX¿Þ…ß_‚¡—rê7Âx<Ün7@Î7äy†Æ‚pñŸÿÄá€ŸŠŠ 6lØ@UUN§ó„‡(5«7Ò¯÷)Ì]¸”ÊÊJžƒdî›3)®Š¼ n³[©­­ÍÛlv‚ äÓ4 ‡ÃÜ{ï½L›6 ·½'Á`€ƒ¡µh”£˜D»h5M‹túª%Û/DU²÷ë½ÌؼçŸ]–=\È|„šÕùÙm£’ži›ÍÆõ×_û^[[›QCãó?,x¾‡ñh ¿ÉòŸl{ãý‚ÐÚDk ‹-âÁñ(°œÁþÚu„õÈ`  ¬ÊhJ¦âÁ`>ó+ÓJV³;U¨fG ³oh‡¼R^Ô¯g'Ÿ¯ÞÈyçúÞoˆ¤}NáüñÏa윋Më„.·ð…}„ jõØm—‚Ímà(R±iXœT J]}ycæ8ï¼ó…ÀåN>h ÕfãЮµt|èQ¼ÿœÈ²eË¸à‚ Òö7$ÁãiºÐTùŸøç5ù§r '†a¸÷Þ{YÿEU a6µ;õCt¡j*& ͉C-Ç¢ž‚Uk‡E-%ê!tj8lĪVQ]y6k þÐvž|êk.8_‰ÍÓ ýhüê×6Þšó ÂáXOÁçW „= ºâÇb1p84 tŠ‹UŠK °8„£`7ºfp(t˜úº šRÊŸþôgœSsR‹„à–®çùW^eÃÞ=ôzñ‡B„ Ý00 3®'ÝDûñóÒ¬\âƒG4À¤²’Jdš»sÍ„xa0ô ¦Âåv'µµÙ›’êêêÒö7$ÉdyNf×Ü]z²ZGªs›‹¯l‘aÏ…¶&Ú,þꫯòÅk)u ¥>ø!.Ûå(j-†âÇnq¢Y5T‹†j± Y@1¢Yö¡„ lJ6­ »åLLj \Ž l¶j–,êÄÎ]›èÔ1x$͈(¬]gá;·ºÙ¿³?.­š@`u¡m„ÌÄÍ:P¼X,&‡‰Ûm¡°°˜ÒÒát´CSÚ£éåXtª%„âØG]` [tÎýQa¨¾ù&n¹ázzTTbÓ4j}^¼ ¾P &¤ë„ ð‘ñ“ÔÝN=Ø»w/Áè¬- YŒ'>Àä#ð7Gðˆ0„uèzÂú&¥5ú’ðLÎA²ãÒ Ps¾áxÃ4M<úÓŸ(uŸ©îÃm? §£­`åE¸;wÀ]ÝwuOÜÕ=qu+ÇÕ£};RpNWl=5”ö»ZÞ¥¼´'Šåªµ›Í†¦Yp;úðØã6ÿ—ç&»Ø½ÇÊ»ïÙ{u9µ»†c†*ÙïYDجÃg|FØ<ˆ¢X°ZÚãtô ¨ðlJKûÓ®¼?¥¥ýp»»`µ(øk8P?¯÷=Çš­ÿ¡öð6ÚU”¹ C‹;Ÿ·8‡ç_y€›6â ñ‡Bõ0ÁpD ŒÿDfzíµ×¨­­¥¬¬ ‡ÃÑÒ,SDk z Caê¡”ÐÂL3¹ëÎ÷yKüImA8(ŠÂÎ;Ù¿ï•îÁô-¢È:¬ÛP~´.]°£ºì¨E6‹†¢ycmŸ †Ži31Ê”¢0û¶¼CUÉ%lÛ»Îe× ¤Ö³†¯õÇn-ǨeÜ=‹°iÕ¸ÔAøÛ9øÃì…a(J‹õ»Â¢ZŠKPܱŒâb?[D4¦Ç_Å߀'ÄÁCë Û¶ܾ &0a„¬ÏEΠ( {ö졲²’-?º½‰8Ì\Yƒ/ ±ë‘¿Eþàƒرcv»=ö$S[ÐVw±X¡Saè!¬ª™ÔÖÚ†O%å»üéüI@ŽW6oÞLYÑÙ„Í”¸Î®Yñò5Ö"–ö¨EE(6LUÃÀ©¨…`¢b˜&†FÑ6rxí×”¹‚XÕvXÄÚ5T–~ =lâÖb·– 8)+º‡?Âaš}0Ø©~ˆê.Áê*Åæî@AQڷÇUâÄæ*@)P …ýø¼^jW×QatbÿÁÏqjß ¶~+‡êm¼ðÂKm/ n·› 6УGq˜9se.?<hhvúàƒxï½÷7n_|ñE®IçD[«à‘§²ê÷oÆá,ÂÔCèzb‡ô»sždÑ’åô9#·Ù•²%]ßA®HðN4Eáù矧Äu:;ÍBUlèÊvœöà9Là˯1Oé†QáÄPBª‰aꘘGÆ@ £ë‘~ Cµ¡–—²qÛ|Nép_m›JÝáèáOqØÛaQ‹9ìÝŽa†ÙU; Íèf Û0Õ”vEh%]±—c+)ÂQVŽ­])¶²Ô"+†ÓJØÔñûÔù¡®ÖC‘ß`ßÁt­Ënß*ºT^Ae7gNç¢EÂ`·Û©ªªj"£G‚-[“ Dš’‚Á á$Oð´”æ‚^k6SÔÖÖR\\ŒòЊž™Æ-7ÇåÐbÊ5kÖ°hÉ3ô;£3ýúžEu·®YùŸn4ßý%©:îÛ¤Ú–¯ó)ÍHÂÑ$ áñM‡’1ì<8L–~ØmEõ¯Ù÷Éûø_¡ŸÚpQ;tå&&† †á82’aС;‡¿˜KqÁzªJ/BU¬(ŠÓ¬Ãô`·u¢k»[¨«;€×§¢ó%†ú9jY–ÒvXJÛa-)ÃV\Œ¥Ôâ¶ ÛÀOÁ€F0Äë9Lýá0þZ/^ó^_-6KÁ“öÚçtZ<µ§Óél"QQh,“'O¦°°²²2JJJòÖÆÞ8`6ž§¹­ænŽŸ›‡&ÀËo2jÈYèºÎšÍ»¨ùbcGÄ]ù±ÊÊʳN#UyškÚ‰?¦9;“‰Q®çSæÒŽe&O~ž?üá<õŸYt*»†:ß6íy†â‚³)vœM‰m ßö¼·_ŠÙótÂE˜Š†iz0MåÈ ñ!Ô@Óë¥Þ³…N•yaÂT–ºÐuƒ=뙿b-§-Ū Ãd+5(ee¨njŠÅ]€ÅíFu`Ú ™6<¾0¾À6 #L0èÇëõàõF¯=DÐSC7hªPØ—ó`zÊ€A#L€›WóÆô—c;¦NŸËøñã3rb>ŸÝ»wÓ£GdJ£Gy¤‰ ”””PYY›ÀçD?É0 vïÞMÇŽùæCS¿«-L8¬2ÝÕ-é1kvíÂûω¼úê« 2„ÒÒÒ6˯ܡ BÑ1’}ôQþðûÇéX6 •v×.ÀçßCqÁ7qÛOCQ<Á¯Øsè]ÅVèÖ ½¤=¦fLÐ7aùêklÛ´+éÍ÷GZùÁÈsb­(ÑGc'Ïý„G_4 …¿‡Ò¾­À‰µ¸kEol%í±8hÕj¢``èôP á#ðòz±/_K'÷ålÙõUåçîÇf)åûwžÃý÷ߟ²¼«W®ˆ­{#«#C÷ämjÏÆ5‡qãÆñ /àv»¡°°0&'∫Ñ9°ãkõŸ½OáYòÉÿËLhA8:DG‚þå/ɹçžËÏöKöï*£²p(^ÛvöÕ­`÷Á÷)qõ£²ä[”v9ƒzß—ìüü=üöèÔ½Äf)ÇØ¾‡bw_ú}c?—Ÿ;€`0{Ù,ûŠÝüá/(Ð.ÄþBE u¥Ó»Ý<„á±¢ `™„ÐÃz0D¸>H8h€ÇC‘^Ng î‚N¬ûU…:ï&:v•ÓyÈÛcAÅa×®]˜¦IyyùI!ñ4€)ó™4iRÚ!/dTA86P…‹/¾˜÷—¾Ëøñãyæ©©´s_Bçò«ñ¶°§ö]¾Ú¹ŠÎC(uŸIyÑYlÙ3“«>ÄîtaUÜX­Ýp9ª)t®£¢ØA(Š ƒ¦i¨ªÊàsO¥Ð½3èÁ©Ÿ†ïðzÌòvF]ñaª (VL3Œ±#„î a„mè!C×Aà¬óRXПýµ«(+:âòZ¾û½[éСCÛ‰‘Œ¨8tèÐ!6¬CAAÁI#ñÄ‹CMM —ËÅ™gž‰Ë•|ˆ MÓRîk-¤ IRSPPÀŸÿüg†Ê?þ)žú.”žK±û»xض÷-¶ìž…ÕæÄíèÂéÕ߯éhO xý‡¾ ¤°†¯wxvΧŒ¾°'.‡MÓ"/ÓùCLž·’Þ§”òÑêO(´"à]Y¿ÝQ~ÃÐPŒV]C« ¡Ö{!|ÏáÃ¨Š !(ˆ½[1ßnÊŠ{rÑŹï¾ûZTH ª*‡»Ýœ\“ô4&*^x!†a ªªLÊ#ÇŠ¢0xð`>üh=öÏ?7…@m%e…gqFõ¨õ~Áî (~BÆR:98¥c çÞ™óOÿÁ`ˆ7–­åþÿ,DÓT4MÃb±`ÑTF <;®:ÿ~b>ﬨ§Èq‡ö¾‡á©‡°Žb€jjèš«¥»VŠÓVNû7Ín9ìÛÁº-/¡(¼¾ý\|ñ-.s«¼av2‹AcTU•Ixá ¤¤„x€qãÆñúë¯óûßÿoФ ØÊUguâÞï ¢ØíÓ  Æ>ªb2z@OÆ\Ø‹«•bwV«MÓ0 ƒ_Þ8…½C‰ý2ê|„[¯¦Ðõ ìv•îÁЃ„ /a=€'° ÃDÓ¬(X±ZŠéÚþJ¶vì80—‹.º¨Åe•9ŸA2$úbï-·ÜÂu×]‡ÝngïÞ½Œ¸übv¨§Äm'‡Ñu]×cO"iš†ÛnÅn·ÇDAUUTU¥Se)ƒ¿åàãÕaªJ/åÀáÀF7+qtD³;°XT4µU±ÖÃ躟@¨¯ë×àõïä·ßJ·nÉŸ~ÌA„ˆŽóVYYÉÿMžÂ·o¾‘QçvàÛ—÷Ţ𠢋łÅb‰}\ÿΫûsã'Ÿâ²÷¤Ò2o`;ßVûÖ ¨AlpØ †Bøü*:taèˆËéÖíTU¥W·J†_hRïýŒÊRûžÆÝ/Áfµà°YqÚ-„uƒ§gÄGÛ&ýß3”””ùo¾Ï‹0Äg(ª™ìA8ž‰¾¨öñÇó‹?݃1°€ÝAm¨aâ»Ó«¸”szt䳪ésJ{~¸žÎíK©,u7 䊢ð¿wKˆ“QÃ0ùà‹­üí•¥ô:ç¾ÿƒ¡L:•²²2 @UUU^Ÿül±0(ŠÂþ©£Sîÿêé¡Ã¿Ž¢("‚ œ0D§ýÕ}ãðjbƒ ÐA.Ö+:¼[™2o3ê!Ó§sh»Î­½Ì™§tàÔ.ôèTFתJ #—fdv7 ÌÇk·±ø“ ,©ÙÄê ;(t9±æÕËÙ¼ó ¶ïç°_gè°á<úè£9ј C¼(”]3#¶-ž¨|ô!,ýÛ¥"‚ œ0†Á’%Kø`w zw „° V4 *j¡ kgkìŽ>|0øìð­G_Bóƒ56]%l¨Š‚GB™ ÍTp{àŽ«.àû#ΦÐaA×#7Úª¦Që 1mÉ\táfÍ~“3Î8£ÅåÊKSRÙ53b"±êh‚!ƒ`Ø 6ørÒ•œñÃù˜¦É²G/ËGr‚ Ç O?ý4Zg;zÈAe˜= 0ŒØ[Κ¦%ö8§Š¥Â Â&8²®6¯ó÷òâCß¡cY~¿¯×‹ahš†Õj¥¼ÈÁO¯¹€‹úžÂ­ß¹‰w¿Gaaa‹ÊÔ"aˆÞùxmL¬æàö   …ØùÚÍ|øø`–=züâmÌ_¤÷™éüÌí››H>W?ÙÚd’F:¹¤ÑÜ| ™”©±mªÑZ[ú¦´ Ú'œHƒA/_‚~¦ ö˜˜ è€aD&u>B.íÿ¡õ‡ùî¥gѹŸÏ‡ßï'`šæ‘éB^–=÷ôÎ\tÚW<óÌ3Ü}÷Ý-*WÞúÃ^Šm ƒÜyç<òÈ#›D(bûôÛ›mFJàRÍn˜é|ùÉÅ.Ó<å˪ù–³){2Ûæ„¶¥ù„UU±™V”µh캃i†‰yd®û\›ÏõÃ!ºV‡ B¡P,–Fk!Ñfª>§´çÓµk[\®¼õ1D‰ÖB¡Pì Ì~èÂõ1d2}2R¹Lý$›ç!]þ§¿=Un.É„%Ó|¥ò“é]{>îòÓ•/UGjÂ±Ž¦iºÜ\¼îëÖ ¡°wƒ‰ÑÞD±E&ìÉULÓÄt(|µu s†aÄÕ4Éó?cØ€ÓéÞ±œõ[÷Ó®{ËßeÈËdÑÚBT’ CÙå#>q;Ó‰Mã‰oŽE$ BöX,~ðÃÛq ÷›EüÚ´ñóZë4 —Pãƒ]A”'«ÔNqñòâÏY»u?@¬v…æʺ­û™¶x5/-øŒ›o¾¹ååj©ƒ`ÈHèS…B¬[·H†P(D(l´(­lƒVª6ýlÛï…`™¬Ö“K¾2iRÊt_¾YÝ„ã™;—ŸŸÌû5ë9ß°Ó •jSá¦Í[-|°-ÀFí0ûJ(¶¢X0- Z¡œ(‘€o±Y0l Ù,˜*˜^s_¯ÍàÛ¦0ò‚opIß.ôìTB@×ÙºÿNý€õ[örßÄy\xñ¥¼øê4zöìÙâ2µ\ÂF‚(„B!žxâ  ©0[( Ù’I;{:ŽQhL>ó•ÀŸmG2RM-*Ç2Š¢`³ÙxýY\|ñÅTlØÇi¦+Vúšv¾¥cѬö˜ìª²Ûâ3tf?¦ U…Z#„Wƒz=D;ÕÆ)¦•.f1¦ÂK¶ð?‹×Qï´ât:q¹ ¹õÖïñè¤aôèуvíÚåmFÌ C(l$ÿûî»Ûn»ªªª¼×Ž©ÚÄvðJ×VŸ­––%ç"“~A8ÖØ²e sæÌÁëõÒ¹sg&nØÈ@‹›†ƒîذ(TEE ·i£»QÕÄŒ5 Y,–ħ–¬‘ÇWMà ¬‡ …Cœ†Æ^Õà·¯¾JïÞ½q¹\X­ÖØ'Ÿä¥Æ°óµ›cO=ðÀM!bË›÷¶¸Æ¯@–©ŸtÖmMºNãø}™vgR†¶*o6OR ÂÑÆ4MÞ~ûmžù¿ÿ°kýB:–š¬ÚäçÓ¯|¸œg†xj£ÿ!…C£ÚpÐMqrªj§£¡¡…C„ÑY~†—bÁjX±h–ØÓEŠ¢ ( šªEáÝOÁ€ó¸à‚ žHŠ J´“;Ãb´ø=EQøðñÁIÅ Ö„  üø±OÒöÎç«­ùh´Y+íä¹ä#MA‚p²ðÈ#ðÂ⪠lœ}¶(œU]Ày½ìÌùЋ¦YøÉH¾ JvÐY·¿–ÙÛƒÔÕ”¢¡ °[ 2Xw2Æta7­Ø ªf!¬(x-*›Í› ?_é>öXÂTx××°`Á†ð¨j>ÒS aìØ¼š7¦¿Û1uú\Æo~òzEQXú·K#} aƒ²Ëÿ–´¦ ›üôŸŸÊp‚ ×l۶믻ÏÞÏ9½‹•ê*+Å Þ€‰ÇoP^ ÐÑ`máp˜Ã¾{Y¿Ý¤c±ÁüÏüÕ0Q]ÝbRZ¤Ò¡ÌB— +ÛYh_ªb³˜DO„ãUU4hƒ  °uëV¶nÝÊúõëÙ°a+×­eûñÖÝÕ^Œª„9xX%ÌêaÜVÍ0±¨ *&„u6ìPX»ËdË>§=ò®ÄžCºFUÎé妺âk~ö³»yþùÉ@Óá6-ZÄ“O>I¿~ý¸çž{¸ÿþû©¨¨à¿hfL¢#äe¬¤Tß3Ý'‚pžzÇw0xð`~ýë_óæÇo1àT“R§‰a@û"ÓÕ„R\y¦B»•ŠE³ã iÔûöÕ|õÕWI…Àív³wï^{챬G[Í_£” ‚EQ°X,Øl6zõêÅ”)Sxä_/SsàÞÿJÁ§G¦qˆvTšt)3(-б¨Nk˜ö%&ENøj·ÆÅ_œ4… R__Ï!C¨ªª¢¬¬Œ!C†dœO©1‚ ´1ÑùTUeäÈ‘\rÉ%Lž<™É“'³ûëÏ)w”8 PÀDETÕ$¨ëø N9›Wf†©Óç¶f>A„Vdüøñ·eÕùüàƒæ’Aá(²ªfyVöY7%™¦Éªšå'ä2ŸŸèq,”K–²”åɽ̚ƒF˜0«««ÍU5ËcŸ|Ð4M3á;`®ªYÛ~¢.Ó}Ÿ—T6 =6Ê#KYÊR–Ñ媚äq¬ººÚŒêAÖÂp´ ÕšËÆ'*Ù'a8Úå‘¥,e)ËU5Ë›¬ç]Ž…B¶ÅILõ‘ƒ,e)Ëãy¹ªFj Y-Ÿ¨d©1ÈR–²<Þ–×¥ÆãILõ‘ƒ,e)Ëãy¹ªFj Y-Ÿ¨d©1ÈR–²<Þ–×¥ÆãILõ‘ƒ,e)Ëãy¹ªFj Y-MÓ4|ðÁf?™Ø,"*KYÊòØ_6^—CK £išÛ å’¥,e)ËèrUMó  4Âرy5oL9öâ[tô½èØS§ÏåÚ±C³ƒNA8êôî{~B ‚ œdÈœÏÇS§Ï¥wßóv6AR" ‚ $  ‚ $  ‚ $aؼy ›7oɇ+!Gn½í.Î<û‚6÷—Ý­·Ý•7»LÉ·?A8ÈkAÄáèpëmwѾ}{4MkSÙ¦Û»woúôëŸ7»LÉ·?A8ÑÉxHŒæ1æ:fÏ˜ÂæÍ[¨®îš/·G•\…®%å?óì Ð4 «Õ @(B×u>ÿtYRû[o»‹þð‡lÛ¶ùóççœn¶þrI÷Ç?þ1}úõgUÍòÛeJ&þ²=ï‚p"“7a€H@Œ6+µ†84wñ¶ÆÅ=bÌui÷Ïž1¥É¶øQ ³Åív3kÖ,¶mÛÆ¾}ûX¼x1³fÍJj{ëmwñýïŸn¸ßþö·˜¦™SšÙúË%]Ó4Q…?üáà9IDAT@ê ©]¦dê/›ó.':yh]qhîâm­‹;]¯®îJï¾ç'ˆ\p¹\ÔÖÖ2dÈ>ýôS/^ºxn½í.îºë.~ðƒ0sæL¼^o‹š’2õ—kºáp˜ºº:\.WìÅšdA:S»LÉÔ_¦ç]NZ婤¨ ä»Ï!þâíÕ«@ÂÅÛÜþÖ"Ÿo‡«ªŠ®ëTUU±~ýzºwïÞ$ðÆç%K–°wï^, Á`0§43õ×’tC¡~¿ŸÚÚZÖ¯_Ïøñã¹å–[š´ýgj—)™úËä¼ ÂÉBÞk QZ£æÐÜÅÛ÷ìSÚ´Ï$ bFÂ6UmÐï[o»‹ýèG±à¼yóf|>_Îéeꯥé†ÃavîÜÉÖ­[ùòË/“ÞÁgj—ït›;ï‚p2ÑjÂù‡æ.ÞÖº¸[Òg-¡P(AÌE‰­ßzÛ]Œ7Ž›o¾™%K–°mÛ6<ˆ×ëÍ©!SùH7 áõz0 ƒ`0ÈÌ™3›éLí2%ßþád U…ò+é‚f&ûgn½-Ò„3lذØû¡C‡8|ø0@Ö©¿|¥‡ñx<ìØ±ƒýû÷c†aðæ›orûí·‘ Ý©S§Œì2 晦[\\|ÂþïB¶´º0Ä÷3´ôÎÛ4ÍX@Êeÿñ@ª2¬]»–wÞy‡ 6PVVF×®]±Z­±Àœ­0dê/_é6¾sp8têÔ‰Y³f±aƬì2%S'ÂÿŽ ä‹VmD…æûÌ”èÅ’¥æö$+Ê÷²`ÁV®\k/w»Ý”——ãr¹²N#SùJ7zç Î.—‹nݺ±lÙ2–.]ÊÒ¥KYU³Úéu]oÑþãTexoÑ\>þøc>úè#¶mÛÆÞ½{éÖ­‡#§@–©¿|¤ …ðx<±GGSçLí2%'ÂÿŽ äƒ¼6%E›ŠZKTUeýúõìܹ3¶­®®.ãýÇÍ•á½Es¹èÒa¨ªŠªª„Ãazõê…¢(tèÐ!ëô2õ×Òt£O•””P^^ž28gj—)™ú;þw!_佡µD ¬¬Œp8k3ÎvKh«q 2)ûïÌaà ¡(ŠB `Ë–->|˜}ûöå”f¦þZ’n(нï.Øgj—)™úkÍÿA8ÞÈ«0Ä7'å[6mÚ„×ëåõ×_gçÎlÚ´)«ý¹’¯·š3!Ó2¼·h. % Ñ£G@“Gu³!S¹¦‡ ‡Ã¬[·.m°ÏÔ.S2õ×Zÿ;‚p<Ò*O%µ†(@äÉ‘§Ÿ~:çýÇÙ”á½Es¹à¢Ë±X,yyÃ;S¹¦kFFÁ>S»|¦{"üïB¾È»0´–(͉|¿¨©-ɶ ËÞ}‹ó/L¯^½òò$M¦þrIwåÊ•ûLí2%ò’› 4WahMQ8ZeYñþBÎpY‹š’rñ—mº‹/Î(gj—)ùö'':y†ø;ëã!žˆ|°ôí£â/S»Ls¾¸‚ dOÞj "‚ '2|¤ ‚€ƒ ‚€CsíØ¡Òì&Â1M³} S§Ïm‹|‚ Ç)…!:‘It)‚ œ¤iîA89‘>A!A!„¦¤‘co»–Ôoýüw!~ñݳwô¬ïø_·_ôÿÉæÿâk‘“Æ ¦xHµÓ£‹ûJÍï•å’6&˜…ù9Úr¥ºƒŠÕ¼ñ‚Œ}—L³Cö)RÕ~׎C „ÃàœØäîçõKAoKñæaÏ.æÏü/Û¯úÿäóñ4§ãÕà@çÃä#}µ°Hëü5STÕ¼ aª´/i§\²†6ò[[)ŠÖʨğ½ÉèøçéTî‡òÌG^ù·gÆÎ¹ãý?Çž"Ô®õ;x4k%:l‹ï&¨Ê¹ žÎzæ›ÄÓ¥³Ý§šW"çí0ã™ ûÛºJ‹Ãšþ mCNÛwt†¹˜æ_ë•ägõ¨‡#Rn EçÝy…ßs°Ôüeâ]'N¹½¹Ò4ÿ*Þ#+ªj®[hô]y÷üm®Ï¨i×Vzõ„WZt3ù]8U-“ØŒŸj’òçHÓ¼'®Z¦½§_Ëshn&Ì ùd “òáÈ÷ë\ÏŠ¾æƒÿ`koäj$¢éór¥¯ŸêÂîûžûw£Ù^ê<°ÇçyAL§ í8ÈçŸÎ¡þÂÓ½ç'øV™ÿ¹?ë‘ÿÐ+^¸¸¶Ò‹Ú´«+O `ľUSÿ.pOZÊìcü.NN›¦gþ¸þ&“þo Ð3Lÿ¿ÿ‰¬¹|Cq§êkfRêéʔȫ¸¾ØßŸ-x–è>ÜŽ–Òà]ÙÁrªÈ&d ÝFFpjýµOæx¬ŒïøA¼-ÿ@Í3þüþ&øA¼-ÿ@Í3þüþ&µè§íª3ûÂÈÈÿ„Âßô Ó?ïÁÿâhÿ„Âßô Ó?ïÁÿâk^Š=µOæxYðƒx[þšgýø?üMðƒx[þšgýø?üMkÑG¶©üÏï ##þo Ð3Lÿ¿ÿ‰£þo Ð3Lÿ¿ÿ‰­z(öÕ?™ýádd áoúiŸ÷àÿñ4 áoúiŸ÷àÿñ5¯EÚ§ó?¼,ŒøA¼-ÿ@Í3þüþ&øA¼-ÿ@Í3þüþ&µè£ÛTþg÷…‘‘ÿ7…¿è¦߃ÿÄÑÿ7…¿è¦߃ÿÄÖ½{jŸÌþð²2?áð·ý4Ïûðøš?áð·ý4Ïûðøš×¢mSùŸÞFGü Þÿ f™ÿ~ÿGü Þÿ f™ÿ~ÿZôQíª3ûÂÈÈÿ„Âßô Ó?ïÁÿâhÿ„Âßô Ó?ïÁÿâk^Š=µOæxYðƒx[þšgýø?üMðƒx[þšgýø?üMkÑG¶©üÏï ##þo Ð3Lÿ¿ÿ‰£þo Ð3Lÿ¿ÿ‰­z(öÕ?™ýádd áoúiŸ÷àÿñ4 áoúiŸ÷àÿñ5¯EÚ§ó?¼,ŒøA¼-ÿ@Í3þüþ&øA¼-ÿ@Í3þüþ&µè£ÛTþg÷…‘‘ÿ7…¿è¦߃ÿÄÑÿ7…¿è¦߃ÿÄÖ½aßkf×^‚Ðä«0Çw$.01Há³Ï{jŸÌþð²%ÿ„Âßô Ó?ïÁÿâhÿ„Âßô Ó?ïÁÿâk6ËÅN¶Vï ’^HVO•£*Io»Ãd—÷«?ð’yÚ†™ko @áÛ•DÞ3ÇrS#èG½Ú§ó?¼,‰¤ð_…£þ%zk8@y?•ywÄè"¶ñ-¼F±Å”hˆ£T öYþüõÓÿe5ãßämþ½ÿBj™Tœ¾'qØ÷ dÜHÄû²ÉZȼ‹íФ‚åT0pcu äwõçð­KŸõçè?¨jÍû ³@bŸN7†§XÜ¿O¼Iç ü‡¥[²¨U´”0)ÇëSÑ@ùÒϬ¿šÿñTyÒϬ¿šÿñU5'üúËù¯ÿG'üúËù¯ÿSQ@ùÒϬ¿šÿñTyÒϬ¿šÿñU5'üúËù¯ÿG'üúËù¯ÿSQ@ùÒϬ¿šÿñTyÒϬ¿šÿñU5'üúËù¯ÿG'üúËù¯ÿTuézÄÚÃ[¤­µÄ쥽2àñOÖuÍ7Ãö‰uª\‹xA±Fl±À=  ~tŸóë/æ¿üUtŸóë/æ¿üU>Vx–T†@t(@#ñ§Ð>tŸóë/æ¿üUtŸóë/æ¿üUMY+â}õ¤®¡½bBǃÉ@l`‘éœÐ‡'üúËù¯ÿG'üúËù¯ÿP¶©d—¢Ñ§bBãiÚŒ…-Œ#œg4>©eè´iÀ˜¸Úv†=¶0öäÐÞtŸóë/æ¿üUtŸóë/æ¿üU2÷PµÓÒ'»˜D²Ê¦A;ŽqêjÍCçIÿ>²þkÿÅQçIÿ>²þkÿÅTÔP>tŸóë/æ¿üUtŸóë/æ¿üUMECçIÿ>²þkÿÅQçIÿ>²þkÿÅTÔP>tŸóë/æ¿üUtŸóë/æ¿üUMECçIÿ>²þkÿÅU ôôžáæh¯W{xÖUÄFyè?*Õ¢€3SO°Žh±,AüÁŠ ¡ÿ½Œõ÷©, ÓvmÌÁ#É<“ž¼ÈzUê(³4’Éî$P¯’X¯¡ô>õä?ämþ½ÿBjözñŠ¿ò6Çÿ^‰ÿ¡5{mÏúóôÈT55ÏúóôÈT4QEQEQEQEQEQEÌøÏMƒZ´´Òæ!¸’ESÆU¼™6œ}q^{­Ý^êŸ ÍÞ¤†9-Dvj²™¤Y@‘èxU9ë^Å-­¼Ò¤²ÛÅ$‰÷Y¿CÚ’[+[… 5´2Iãõ<Иøÿ_¾±ºÕ³õy|È#‚HÒ9 Bß,88—pG<ö­xêV>1´KYïf³Ö kp«;í¶—¯˜¸<|¼ð8Á>ÕÚ}†Ïû,Ùåÿ«wû¿Oj£k¢}›X–ù¯®%Œÿ©¶s”ƒ€ÏAÅjD‚(’0X…P ³'¤òMp¦µá«ßi¶MwLÛ¢†fyg<]£Sƒ×“Çc^ƒUSL°ŽA"XÛ+©Èa‚®q@c¨éº”ÐkvEdkÉüI‚NLgXî…Ç==¨ÕtÝJhѸLÐaˆÌ³Ê£ÊÀzf€<¿ÇW—Ï­hïq¤Þ(‡Y…`}Èc‘Tœù³¹¸<€8¶O©Ó$†)¶y±#ì`˹AÚGqïO Š( Š( Š( Š( Š( Š( ¼câ¯ü±ÿ×¢èM^Ï^1ñWþFØÿëÑ?ô& i¿8vÇ¢ÿ!\Ì:¼ñ\J—Ä©ó%ˆ‚HHbpÃæRHéšêníhlãI'`6«¾Àxç·µcÿÂ%©0ø•éÇí Gç–’åàäÇqžÕèajÓ„-'­Ïϰ8¼F)J”*Z5½Ý÷k¡—ÿ M iŠè$R¼-!Q·z‚p9îþ\ã"¡ÿ„©-ÙÅí¼ñŸ<Æv“ùBïäà‘ôÅn'‚58¡òSCÓ–-åö ³Ä'îz*à]H“zeœs!n]@—9V9Cœ‘¸}ë¬Sþe÷À<…”bïoe+‰ò_çþo³¿Käw‹xÁNï]¡¿“ ³¹½OçN³ð®½ag­¾™d±F»T}³õ?'ZŸûÄŸô³ÿÀÓÿÄV‹BÚ´qÏ%ÍyŸ$%oUþemÍê:¡gsw%õÄrI°§GJ…lœ®rr@Ç5±ýâOúYÿàiÿâ*…‡†µHelll «m•R-°õÁNÓùPñ.µEC&ÍTdœ%~š¯ó&ÜÞ§ó­ß ¢ËªÞ,ŠE•¹†pL·? ü…eÿ`x“þÖøøŠ³¡ÿniúõô ¥[<‚ÊÛ ^`æ\s³ÜþUÍ‹­Jtí­Ïk‡rì~牋QåkW}n¼ÎÓìÖÿóÂ/ûàQökùáýð+3íÚïýmÿð;ÿ°£íÚïýmÿð;ÿ°¯4ûcOìÖÿóÂ/ûàQökùáýð+3íÚïýmÿð;ÿ°£íÚïýmÿð;ÿ°  ?³[ÿÏ¿ïGÙ­ÿç„_÷À¬Ï·k¿ô·ÿÀïþ·k¿ô·ÿÀïþ€4þÍoÿ<"ÿ¾f·ÿžß³>Ý®ÿÐßÿ¿û >Ý®ÿÐßÿ¿û Óû5¿üð‹þø}šßþxEÿ| Ìûv»ÿ@[üÿì(ûv»ÿ@[üÿì(OìÖÿóÂ/ûàQökùáýð+3íÚïýmÿð;ÿ°£íÚïýmÿð;ÿ°  ?³[ÿÏ¿ïGÙ­ÿç„_÷À¬Ï·k¿ô·ÿÀïþ·k¿ô·ÿÀïþ€4þÍoÿ<"ÿ¾f·ÿžß³>Ý®ÿÐßÿ¿û >Ý®ÿÐßÿ¿û Óû5¿üð‹þø}šßþxEÿ| Ìûv»ÿ@[üÿì(ûv»ÿ@[üÿì(OìÖÿóÂ/ûàQökùáýð+3íÚïýmÿð;ÿ°£íÚïýmÿð;ÿ°  ?³[ÿÏ¿ïGÙ­ÿç„_÷À¬Ï·k¿ô·ÿÀïþ·k¿ô·ÿÀïþ€4þÍoÿ<"ÿ¾f·ÿžß³>Ý®ÿÐßÿ¿û >Ý®ÿÐßÿ¿û Óû5¿üð‹þøËøÂö-Æ{õµ2ù1ò¢ˆ3?ÞàRqZ¿n×è oÿßý…bëVºö§:7Ú-tÀª‹ÊûInNvWqŒvëèÆÇâ#®Ç ÜÇo=™’ì¬ÐK–ÊDNpxÁÍyïÅ_ùcÿ¯DÿК½f_ ê?iµ»½Õá-$2,qÙùe‰R½wŸïzW“|Uÿ‘¶?úôOý ¨ßtßùEþïþÉYxoÄ6÷V’Ç3·¼»¹†7“!T¸w<¨b„×R06ó¯¦ÿÈz/÷öJêh‰Ko³É$rßGQ»ÁÏg“÷XFxÏ›ŽzuªÙø±öâoEì¶öÉ$ÌѸ2¡˜°C¯îòëÔ‚èzW¢Ñ@ß…'Õnþ×=üÞd ùqŒ1ÞìJã°‰õŒ×IEV—i:x‚òäÙ5­¹‰bEm€d1'nÃÈ=rÜäÖõVE·üŽ:—ýƒí?ôeÅk×1©j_ØúÆ»¨yhþF™hû^MŠyqÕ°p=ðh§¢¹«OÛÊЭÄJ¢U«Z»\ YF" »¤rOÕÆñVŠ®ª/ †PÈñÂîœaU‚Ìw.Ç#ŽhfŠÍ±×´ÝJa ­Ã4„1ÚÑ:UŠ•;€Ã§å<ñœbªÁâ5“Ãú†«%«Æ,–fh·‚Ì#?Ȩ8$` Ê+ ëFÂ1ýµ6’1%E¼:ìÜìv)U\Œ³£#'š½o¦Z5ÕÓ8‰H¤M!ä㢂J³E`Íâx†õfÂÙîÒËÍùˆó–V< g#?Ÿçñ G¬ýŒÚfßí?d3+–7Èóþà^WoÎsÛÐåÍÜø–îit”Óí亙ÊÂ>ÖvŒ+?ïHBc%P•6}«kL¾]OJ³¿D(—P$Ê­ÕC(8?Z¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬ }Ìr«(\íQ’ ÿ{Ö·ëžñß_¢ÿìÔÇkw¾£¢)`Þ6B¨ýÔq^WñWþFØÿëÑ?ô&¯OÖ?ä'¡ÿ×ãè™+Ì>*ÿÈÛýz'þ„Ôîö÷eÕVo&i¶¹ îcòö¯ý¾?èªÿà7ÿ^³´ßùEþïþÉMHßG¹×o­íŸqÔ`°wK,aQè7Hxiÿoúê¿ø ÿ×£û|Ð'UÿÀoþ½s–þ&ñ-Ρ û¼6£ÎØ&‚a#*ïØø F2H=p: Žç]Ö%ŸM‘ã˜yoæˆ#³pÓ"C¸œà ØyÉÆJéÿ·Çýu_üÿëÑý¾?èªÿà7ÿ^°´/k·ºŒw–Ð~ñŽÙ"º&|Ö€#á#’[íÚÐ?öøÿ N«ÿ€ßýz?·Çýu_üÿëÖÅs}UüG®>¥mu Éå4BGVˆ(. Gµð…'8䓯@  ÿÛãþ:¯þõëæú-K]Õí¥ÓµtIôûT&;q$ç<ä}>†»zȶÿ‘ÇRÿ°}§þŒ¸  ³³2Ap,ü@·°³º]‹uÞþócrFGÝÆ ã<ÖLÚ,Âm¶qjvö6vÿa,"‘vbBKeˆØ3ŒyϦQ@^‰éF)æ¶×.nÀ“Ìsmµ]¤ÈÇhéË:wÆy§ZÛiÖ¶·Ö«¤ëOo{“$moÒ< ÁáN2I*ÿÈÛýz'þ„ÔîöðIqª¬Q]Mjäq,! /ËÛz°üÅH&Ιöãâ]GÓ˜LV¾` pF<ž¡¾\zÓ´ßùEþïþÉS¿„mŸR7fæ_,ͼÁ“³ËÎó3Œ>rqÈùqŠCÈæyؼa¨,r[­ÖY†HØ–W¥E‚~ϨI}o|‚qpóÁçDò(.X°u2a‡Îq·f03œUdøwhÖö?mH™¦HJyŒ‰®v°8Ìc£gŽ´¢štI,—I⻥’XD¯0[0^%Ο'•<ô梲š+øÐøÊø+Bîû,±»#0ý×+•'>”ÕðH# {˜Â¸ÿGÈ2¬¾`',I\äÄ Õï]Ojß­ÏÍ3¼ Ĭei ýá ?x~ðcÇPBšM䋹ÓÿF\Pc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Gö5ÿý º¯ýûµÿã5±Ecÿc_ÿÐ˪ÿß»_þ3Yº­¬Ö«²kë‹Æ%H’uŒ>n>EQÃ<×U\÷ˆ¾úýÿf 'Xÿž‡ÿ_ÿ¢d¯0ø«ÿ#lõèŸúW§ëòÐÿëñ¿ôL•æämþ½ÿBj÷Ý7þCÑ»ÿ²WS\¶›ÿ!è¿ÝÿÙ+© Š( Š( Š( ¹-væîÎ÷ÄØ:¥Úi–žS8ùCy·ϵuµ„e‚êòܲ¬)§Z,21æ\Pü&ZœW·²¶šÎ¬–ÉmhÒö13ù…ÛœsÇ ëšWñÕõˤvºJÂK`%–åùÞ-àž6ÈFá‘Æk®…ìu[S"Æ“E'Êë,X?)èÊÃ#±$±ZB³\Ë JgÌrƒ%è}Gµr~:ì-æm0æhà‰Þë%¤e²øO•G™Ërx'mh7Šç]Úôi‚i§¹šÔEo1uó ´eX ççœVÔÖ:Žœ`1³LŸòÉŒd©¡RÈãŽÜSìtÛ=:Ê;H8!ÉEäà’I9<’I$“É$Ð sã]Fîù…³C Ád|3si·+Æå,pOFÎ~^tõnòm3J–/2ÖI5)mgH'AŸ-'u£ &ºyÅ•¿•ç$K¾EHòƒïÿýjI¬í®#ò涆HÃoÚèÝëƒß“ùÐ ¦ø—P½ñN—hÓ°‰Ìk8À !6fR@#*2GÞø«ãÆ7>'µÒ ³"k²†f—"HÂIž6åX:®~™®ª5µ•Ìш]Ã]@$0ùHϨéúUT—JþÐ’(Ö¶vH1¼°PüñØ2œôäw4JÚåæñ<ÑÛê 41«,ñ1]¨üaPœŽrzr\ãv¨NúfŸp×3$LêÌe1€ÌÜFìrp¤ã®=ªÔ·VðZµÔÓGº¦ö–F ª¸ÎI=KEQ²Öl5 ZyÏœ«¿Ê’6ÊôÜ€%rq¸qïO²Õ,õ•mfó xÏÊ@ ç ¤™Ndu  tU[½FÒÁî§XUÈKä  8õ )8àUª(¢Š(¢Š(¢Š(¢Š(¢Š+žñß_¢ÿìÕÐ×=â/¾¿EÿÙ¨‰Ö?ä'¡ÿ×ãè™+Ì>*ÿÈÛýz'þ„ÕéúÇü„ô?úüoý%y‡Å_ùcÿ¯DÿК€=÷M8×£Ï÷öJê7/¨üë‘·´¶¾Õ–ÞîÞ+ˆ|ÑÊÔár2k6âÂÎÄê²Ë¡èwZê6Ö‘E”¡ÊÈa'Ç-‰Hµzåõ—Ô~uÃIwàÈìeº>¶>Tílñ‹w 3#/§HÎqžøæ–øøjÞ+ăÂ6ò]Â]R#cÜUK’@ÀÇr  A Æåõ—Ô~uÀÁ}àÖ¹ŽÎØ‹–Œ0d²„£¹}¤gIƒƒ“ß·‡|5wi Ìz˜TYuœyÁâ€6÷/¨üèܾ£ó¬ŸøE|;ÿ@/ÿãÿ çü7c¡ë9ŸDÒå’ì±*î+÷˜aÇxb€;mËê?:ç® ž Ö­öE'™¦Ú€’1U'̸êG#ê:U¿øE|;ÿ@/ÿãÿ Ê·ð΀|[¨Æt=4ƶ6¬ì‘à%ÆN1ßò^çÃzÕÙÓ™õ‚ÝܘÖì¶ÀYJïiŽvŸ›­U—ÁÚ¢éÑÛ$Ö÷(lbŠhg»,—]^MÛX÷LqÎÜq]?ü"¾ÿ —ÿ€qÿ…ðŠøwþ€:_þÇþF÷GÔ^[´žÝÞÍ¡-$€ûpP0FqéÀä7pì|«¤’ËÈZ=È!Oµ3ìOœ²åcAË<(éùõ_ðŠøwþ€:_þÇþÂ+áßúéøøPoá?]Ø‘%Ì6wAî\ý¡Ýæc)Ù)@] |¼œ†íÒ¶4jVؼ·é ®Î¯t_b8]± <ŒôQÉÎî£gþ_ÿÐKÿÀ8ÿÂøE|;ÿ@/ÿãÿ Æ“Ã7ë|òA5¾ÇºyÙZ2Ò.)±”Æ@À<àZ}ö=OZ¿³»Š)µ±Ê …XqÃ+8Œ‘Æ/ÿÂ+áßúéøøQÿ¯‡è¥ÿàá@‰ð6«$0¬·±H"30Š[’êãòÆ Æ c%¾ï^;æ·‡‡î`Ñïl –&ÌÐÍm³1RSËfWb Ã26O<1úV‡ü"¾ÿ —ÿ€qÿ…ðŠøwþ€:_þÇþáíâ TÞOöØlͶäÄÆRÃi;’F=¹<ã°GðÞ¡,R[yCf%FŽÝn¤uC䌧È2£oZÙÿ„WÿôÒÿð?ð£þ_ÿÐKÿÀ8ÿ€9+¿j×Is—¶Ï€¤ó¾ÚÞHÜôãç·¿µnA ^Zë©*ÿÈÛýz'þ„ÕìOáM2Ñã¼V¼ymÛt~uÜŽ ®pN3‚kÇ~*ÿÈÛýz'þ„ÔîöòOª¯mžP8Œ¾Ìü¾¸52ßIs%Ò.‘c#ùËqpRRC¦Ý¬Üq‹ÿ|ѦÿÈz/÷öJ¦4mnÏGÛg$‚â[»™"P¬ìƒ8ä1uÉç·4$šJÏp¯'…mR^@>Ü9-ÍŒu;È'ÐéRÏ¥Ësçùž‡3¹yu¬IÎy[ pKÜÖTöž'7²N±Þ‰ü©"iÇ–Ë™U“Ê@Ê[åP$u'<`êøJë\½“v§0aB9ÀÛƒ9XË(Æ~ã,€óÕ±Î(µÇ‡äžXØxu#U`Í¿WÛµ”€ "±ÛÄsœœîý¿[ó‹ÿGÿ[P?Ûõ¿úÇÿ£ÿ‰¬Í6âH®®[NѬÚbz#Ô•ÊrxÆÑœð03]]eiv;ëûù X¦žS(å‰ Èë¸åÿà@vÍ3íúßýãÿÀÑÿÄÖU½ö³ÿ n¢ÃFŒ¹±µ~Ø8eÆvý*ëk"ÛþGKþÁöŸú2â€íúßýãÿÀÑÿÄÑöýoþ€qÿàhÿâkbŠÇû~·ÿ@8ÿð4ñ4}¿[ÿ ø?øšØ¢€1þß­ÿÐ?ü üMoÖÿèþþ&¶(  ·ëôÿGÿGÛõ¿úÇÿ£ÿ‰­Š(íúßýãÿÀÑÿÄÑöýoþ€qÿàhÿâkbŠÇû~·ÿ@8ÿð4ñ4}¿[ÿ ø?øšØ¢€1þß­ÿÐ?ü üMoÖÿèþþ&¶(  ·ëôÿGÿGÛõ¿úÇÿ£ÿ‰­Š(íúßýãÿÀÑÿÄÑöýoþ€qÿàhÿâkbŠÇû~·ÿ@8ÿð4ñ4}¿[ÿ ø?øšØ¢€1þß­ÿÐ?ü üMoÖÿèþþ&¶(  ·ëôÿGÿGÛõ¿úÇÿ£ÿ‰­Š(íúßýãÿÀÑÿÄÔRÍw3»´Ò€‹(“#×8­ÚËÔ¿ãáÝþ¦€2ï?ãÒOÃù×€üUÿ‘¶?úôOý «ß¯ãÒOÃù×€üUÿ‘¶?úôOý ¨ßtßùEþïþÉ]Mq‚þ-3Ps¬­‘nWõ«¿ði_óï¨ÿàÕF–©UÅP¤ùjM'æÒ:j+™ÿ„ëJÿŸ}GÿÞøN´¯ù÷Ôð 꽕OåqŸ×ðŸóö?øÿ3¦¢¹ŸøN´¯ù÷Ôð èÿ„ëJÿŸ}GÿÞeSù_Ü_ÂÏØÿàKüÎšŠæá:Ò¿çßQÿÀ7£þ­+þ}õüz=•Oåp} ÿ?cÿ/ó:jåïîžÏĺ¤è’¹]>Ôìˆe›÷—Nÿ„ëJÿŸ}GÿÞ²Ó_ŠûÄ·³ÛXjR#Y[-[QÉÈ㚢þ;lÖqæ†i¥Œ¬‚EXÕA¹ÎÏ“"<í#<ô5^}*Ò{éï—¬¤²²É”´¤ŠT«ƒ·$‚‹Á%xéU¤ðý´¶òA%·ˆZ9šGœ}™zï¿,~Nïîàtâ·†¼£Wÿ&4|Ž„x·NhŒ‰¨<€;ë÷@lmlã8ÚsÐÕ‰uûh#µ–KÇXî±ä¾©Î1“Œ.r:ã­r÷úT­ ¹Óm5kk˜cIžÐ¾ÕÇŒd‰rçÍMq¤[Ý[éñK§ë_èqÆŠVÌá#;”íäu\z‡ÆèÒ«oûzÿ—õå¸ù£äk¯Œ´—Ž9TÊȻӆù—î}Üîé€yùN%OÙù ,š‚(IZ&Ã1‚–ÇAü#?§5‰ýe‚?²õ¾tÿìïø÷?ê±O½ïJÚM„ˆêú6®Åáh 6¤¬åý;}¨xFÂø·Nu,ºƒðªÄl|Œ–#*ÜuI< ÓæñM½ÃA-ó¤ª@ÚQùã9|À’F@ïŠÂM"Ö;y"]?\S"Æ®ëj;Øp(ûíÐqÁ ‰ô;a¨6¡›«µÀó4–Ó)—6ìÌãÕŽ: kŒ»Ò­¾åý~kš>GK6¼ÔÏoö‹°²Ù`ˆ8ÏOLùÓ,üA=ÝÒÀlõwwÊ„(úš£¤Ÿì­:+TÓ5geÌ•­X™9õÇáÒ¯iÉÿ@­SÿZ°–2WQ§QùûÅsCº4üù¿ç«þtyóÏWüë3ûNOújŸø ÔiÉÿ@­SÿZ±ú¦oü•?òaóSò4üù¿ç«þtyóÏWüë3ûNOújŸø ÔiÉÿ@­SÿZªfÿÉSÿ&j~FŸŸ7üõÎ>oùêÿfiÉÿ@­SÿZí9?èªà+QõLßù*äÁÍOÈÓóæÿž¯ùÑçÍÿ=_ó¬Ïí9?èªà+Qý§'ýµOüj>©›ÿ%Oü˜9©ù~|ßóÕÿ:<ù¿ç«þu™ý§'ýµOüj?´äÿ V©ÿ€­GÕ3ä©ÿ“5?#OÏ›þz¿çGŸ7üõγ?´äÿ V©ÿ€­GöœŸô Õ?ð¨ú¦oü•?ò`æ§äiùóÏWüê)²ÌX㹪?ÚrÐ+TÿÀV©à®³[ÜAƒ³ÆPŸpjöø{˜C¥ˆŒÔl÷½¿*®: ¼ÿI?ç^ñWþFØÿëÑ?ô&¯~¼ÿI?ç^ñWþFØÿëÑ?ô&¯¾9Oi¿ûíô_ä+‹K‰¬[QhUæ”dù¬—À §°ªö»Kÿ¾ßEþB¨W­é|ÿD~{ÅUT1É5tâ¿ô¦rVšæª±\\ÜÂv¶íˆ°» „•ï†e©ªK"eòós  ºU$”ú¸Å­ÝÌ+Õ…F¹#`®@óþßuæù˜ÛónÝ÷·¹ã8ÇN1]ÜnÓ&ya(Ûp­ÿ ÿÈ^÷þ¼m¿ômÍ`U{­zçÃòÜÝ[’?Ðí÷¡‰ýíÏ£jr1œnkå?¶ðúû²û—ùŸcþ±au÷e§’ÿ3Õh¯/;ÔHŒ‹ûr$ÎÌ*|ØëZVñΦ…C^À «•^IèOöîùe÷ÁúÉ„þY}ËüÏO¢¼Å¼mª¡!®á\uÊ(Çþ†ª§Äkçºû7Û#Œî4ùHÙÆ}NõÆ)¬óöŒ¾åþcáe´e÷/ó=bŠò‰~!j°Þws…U/(‰6.âBç¿QéVÇ£9E½€¸;J„\ƒ×¥<íye÷/óÄxT®ã/¹™éôW˜'Ž5I¢^ÀÌmªŠNCMÿ„ïQ÷Ûá[iùSƒéõ¥ý»†þY}ßðIÿY0ŸË/¹™ê4W–êFôZ-ÜM6Ær¢5;@ sé÷…x÷R” ]Ä¥ãUhÔ(ÅN~E?íÌ>ü²û—ùýcÂÚü²û—ùž§EypñÞ¢@"þÜ‚vŒ*rzcõMÿ ޳ÿ? ÿ~—ü)<÷ ·Rû—ù‰ñ.o}ËüÏK¢¼Óþgþ~þý/øQÿ ޳ÿ? ÿ~—ü)oa{?¹˜¿Öli}ËüÏK¢¼Óþgþ~þý/øQÿ ޳ÿ? ÿ~—ü(þÞÂörÿ0ÿY°}¥÷/ó=.ŠóOøLuŸùøOûô¿áGü&:Ïüü'ýú_ð£û{ ÙýËüÃýfÁö—Ü¿Ìôº+Í?á1Öçá?ïÒÿ…ð˜ë?óðŸ÷éÂíì/g÷/óõ›Ú_rÿ3Òè¯4ÿ„ÇYÿŸ„ÿ¿KþÂc¬ÿÏÂߥÿ ?·°½ŸÜ¿Ì?Öli}ËüÏK¬½Kþ>ýÁüÍqð˜ë?óðŸ÷é¶´}NëUµy®Ü3«”(`ßZéÂæ´15=œ¿Ÿü9ÕƒÎðØÊ¾ÊšwóKüË7¿ñé'áüëÀ~*ÿÈÛýz'þ„Õïןñé'áüëÀ~*ÿÈÛýz'þ„ÕéÁ캽Ä6©$ÓÊ‘F¡rÎpJÃþÞÒè%kÿEtÿ}¾‹ü…rê’ÚÜL.%i‰•Tèc Ò„È d`0È>†½\ š§óÿ#óþ(¥˜Õ¥ß*ën¯É—ÿ·´Ÿú ZÿßÑGöö“ÿA+_ûú+-|Y½&™lƒ[¤Ï ȳ½•YSÎ{޽£&¹¶’DšÙ.í;a›>XbªNÑ»,O¡õ×íWÀùÿ¨ËnGÿ/ò6?·´Ÿú ZÿßÑGöö“ÿA+_ûú*M3P•³N±íMØV ¸0À$ƒõ$}A«µ¢»WLåš§ rÊ.þ«üŒïíí'þ‚V¿÷ôQý½¤ÿÐJ×þþŠÑ¬=&îîMRâ ‰|Ôï Ys¸—€8<Òm¦‘P…9ÆRIéçÿ·ý½¤ÿÐJ×þþŠË×/tíR+‹h¯í™iç!ÀýåÁägž£ó®–·ü'ÿ!{ßúñ¶ÿÑ·5ææÔ]l7³n×höøvÚ[Xà]J(³1TB¨2AùT0Æ1Ð’9D~^wnéßëÞ¾‘¢¾UeÓÚ?¹Z²++*¯î_ä|ç …¤;±% n„‘´³§žIÏAŒTRiV³J²KªFÄ/—€¥FÌ(ìß”uÈäñéô,¢ÎþÑýÈCguUßÑ‘óÍý¦Ÿq$­|z*„õî¤lŸZ¬ºU€Y¿‰Œ‘H€”VuEÜ9ìõ<×ÑôRŽN¢¬ª?ÀQÈU•W÷#çÛ…·žöIMü" V5xö|Ça$a³Ç_J¨Ú}³ÜÏ;jƒtŸq—pd9Îs»28ƒ_FÑJ9,cµG÷!G‡£ª¿¹<ÙÚéöZ‹ÜÇwÂHÆ~\㎸Ç€ª‘éV‚îYæÔ£”²”’nå?7`°¯¤h¦²t¯ûÇ®²®ý«×M‘óµµ´Ò3.§9QcÂì’rAÁp)‡O³iᙵÞ­½ñ¸ÞcI•°9c×w}kèÊ(þÆ[ûG÷ þÀW¿µrÿ#æØô‹0󼺔R<ɱBJ 7|Ìyù{c¯jè?´-?çâ?νʊš™$j|UàE^…[sÕnÞHðßí Oùøó£ûBÓþ~#üëܨ¬ÿÕú_Îÿ/õZ‡üüá¿ÚŸóñçGö…§üüGù×¹QGú¿Kùßàêµùøÿô-?çâ?Îí Oùøó¯r¢õ~—ó¿À?Õjóñþ†ÿhZÏÄÚŸóñç^åEêý/瀪Ô?çãü þдÿŸˆÿ:?´-?çâ?νʊ?Õú_ÎÿÿU¨ÏÇøý¡iÿ?þuÙxFhçÓ&h\ ˆ$}zeê_ñð¿îÿS]X<¦ž¯´Œ›;p,eZ3m™w¿ñé'áüëÀ~*ÿÈÛýz'þ„Õïןñé'áüëÀ~*ÿÈÛýz'þ„ÕëáíÓÙO¨]kicŠW"Qž€çTÂ÷Ûªhì/%hGúþõÔ6à~~pºúVö›ÿ!è¿ÝÿÙ+:/]ÁuÄ7‰Åsup€D/2L¥—޹xŽ8ç'"µ…jV‹819f?iZv·]¾L`ð>¬ûKœ‘ö7ëÓ?~ªŸÜË+Y Ý$I 6¥›«Fà©%‘Ï¢žÕ™ä”Ζåc³CÜŒ±H|¬6p3Ê9äqº©Íá }¢»In“K ¼ËtÞdòGæ“)-É‘NÐ~GZ¯­Uî`²,½mOñæM‚u‹xµ9#Bª‹WàŸÇR®ÐOOÿÀWÿâëS–:…¿Úî/æ•IJ%— ‘½Ü±§Í!QÀùQMt”þµ[ù‰yZÝÝ%÷¿ó8øCõÏú éÿø ÿü]d®’ÑE=Ä:æê.<‰ZÞÎI K·q\+’ÌÉÆqÏ¡¯N®rçG¿[ùo­–ÞW˜¼Ž)$(~È °Sƒœž‡€=x>µ[ùƒû-ÿŸKïæcÇá=bh’Xµm1ãu ®¶ÎCЃær*]#O׬ýÁüÍeÞǤŸ‡ó¯ø«ÿ#lõèŸúW¿^ÿǤŸ‡ó¯ø«ÿ#lõèŸúP¾é¿ò‹ýßý’ºšä-äž-U^ÞßíÄ{Âgåõ5£¹¨O+Å• ’'ßD¿Œ•úÒ€7¨¬í gþ€Cÿü)§«©´EŽo“ùPÍý¡¬ÿÐàb…ÚÏý‡þ'øPÅý¡¬ÿÐàb…4꺰 NŠƒiæ§Žãó  ªÂ±ø¿Q,áA°³$ “-Àó©´5Ÿúü O𬎡¨xR†}8kMÈ/•Ä“•`ÃôÇ ŒÖ5âåMÆ;n>?ÙÛiúlšŒrù×VIrßgPÊÆd(qlà8éŽrjÏü&zxÔb°h/VéˆYË a%ˆ]ÀNHþØïŠ‚mç’' F<¥Ú±¥öÈÀØP|ƒ HS·$gªGÓg’ìÜ·†PÈ͹ÏÛ@{n^Ž£9Áäb¸~¯+|/ï_×ùr{ÈtûË++‰EÍגЂB6±8%‚çåýG^*ñ¼RÊc²¶šàùÅU5‘7 å²Ç‚Nà×ôˇ±[?øG Â’Wf¢UßâÞìó޽8¦Ç¤És…aS!Œ¶/ûƒ L8ìNhT%Ö/ïþ¿­Båy¼lÃÃòO Ãê‹§µß’Ȫ¡Bó\|™aÆwóÒ®Íãm* ‹¸d[ŒÛ—-´# ŽXÝ1õÁÎ8¨.tg»Ë—à ·Êå/ö˜ÆÂT‚WÈ< ô ºòÞ%ÈðùP² #z¬ŒTåF!@98\u§ì%ü¯ïþ¿à…ÎÜsžœRó»¾sɬŸµë_ô_ü Oð¥û^³Ÿù®3Ÿøû_𬖷oÇúþ´Ñ©ü=ñŽŸ/9VOÚõ¬È sŒÇÚ…/ÚõŸú¯9ÿ—µÿ K [·n¾× ]ƒ>ý³Gnøç²þ×­Ð {ËÚ…kÖ¿è¹ÿ¯´ÿ >­[·ãçýz…Ñ©Î{ç±£œg¾k/ízÏý×õö¿áGÚõ¯ú¯þ§øPðÕ»~?×õ ]½Ç\d`RsŽùÇ_ƲþÙ­g?ØKœÿÏÚ…'Úµœcû qùû_ð¡á«vï×úÿ€F·s×9¤ç޽±YlÖ³Ÿì%ÎOü½§øQö½kþ€kÛ?éiþþ­[·ãýZ…Ñ©Î{眚;wÇqYkÖza®?ëíµë]°—?õöŸáKêÕ»~?×üæF§>ýñKÎ{ç#5•ö½kþ€kßþ^Óü(û^³Ÿù®2?åíŸի_oÇÈ.?áïŒtüiÜîïœñY?kÖ±ÿ 5Î1ÿiþ¿kÖsÿ 5Æsÿkþ–·nݯøtjsŽ3Óš¡}þ¹zãoÚõ¯ú¯þ§øU OV6Ò^êñǧÇ‹H®¸9ä¶@Öøj5!Q9!6¬>óþ=$ü?xÅ_ùcÿ¯DÿК½nYß­‚éw0^Cur`’D …Â3ðA<åEy'Å_ùcÿ¯DÿК½"z³š;}e%•¶ ^Oü k¤±“Z»²UYfÔ`™|´¥„,@3êAÎ9üêŸõçè?¥x Œ…idÝ€N#r3ýêηÖT{möù·dÇŸË ¥öwþƒVßøÿÙÑöwþƒVßøÿÙÐÅöwþƒVßøÿÙÑöwþƒVßøÿÙÐÅfé?ò:ê?õÂ×ùËPý‡]ÿ Õ·þÿöu&Ÿ§_Y]Þ^É×sÇ+ýŸj¦ÍØ%ws÷ýGJÔ¢±þîÿÐjÛÿû:>îÿÐjÛÿû:تz„³ÅFÛ-)›r®Cáç>Ýúa×è5mÿ€?ýa×è5mÿ€?ý\µ–wº¹FË@­òHË´çºP=ž3W+ì:ïý­¿ðÿ³£ì:ïý­¿ðÿ³  Š+ì:ïý­¿ðÿ³£ì:ïý­¿ðÿ³ Hÿ¶¹ÿ_Iÿ¢’¼Ãâ¯ü±ÿ×¢èM^­¥iÓØµÜ—7Kq5Ì¢Fe‹Ë Éô¯)ø«ÿ#lõèŸúP¶Üÿ¯?Aü…+Cl6 /¨Í%ÏúóôÈQsþ¿þ¿ú ˇþ{Ÿûâ.ùîïŠ†Š›Ë‡þ{Ÿûâ.ùîïŠ†Š›Ë‡þ{Ÿûâ.ùîïŠ†Š›Ë‡þ{Ÿûâ.ùîïŠËÖ^Hô=AáfYVÚBŒ‡§{Ö©éXÑ–1™n+ŽD†Ü8è6´pØypÿÏsÿ|QåÃÿ=Ïýñ\ž«j—zŽš—+QÍl·ÐàïVÂdŸ¼ ŸCŒqšé¨o.ùîïŠ<¸ç¹ÿ¾*(o.ùîïŠ<¸ç¹ÿ¾*(o.ùîïŠ<¸ç¹ÿ¾*(#s Ö#Ócfi/7qn ýjÙŠHóÏìV4ò=Cÿ^_ûTV«ýöúО\?óÜÿßypÿÏsÿ|T4PÞ\?óÜÿßypÿÏsÿ|T4PÞ\?óÜÿßypÿÏsÿ|T4PÞ\?óÜÿßypÿÏsÿ|VvªÎš=ëD̲-¼…JœvœcÞ°-õf³Ò­ÞÐÅrÒHVR·’]ø1fäÁ*9ç€h°òáÿžçþø£Ë‡þ{Ÿûâ¹ÿ ÝÝ^iÍ-ÙÃ…ƒ”SI'’y<ýkj€&òáÿžçþø£Ë‡þ{Ÿûâ¡¢€&òáÿžçþø£Ë‡þ{Ÿûâ¡¢€&òáÿžçþø£Ë‡þ{Ÿûâ¡¢€+ÃyÅÝän?fFÌF2J†ãó¯ ø«ÿ#lõèŸúW§éò×?ëé?ôRW˜|Uÿ‘¶?úôOý ¨Ûnן þB±îcצ¹wŠþÁ#'åShÄ€8;ù®oŒ3<̱Pvÿ“ÛîÓ?áoÍÿ@dÿÀƒÿÄÐwöoÿÐKOÿÀ6ÿã”}›Ä?ôÓÿð ¿øåpŸð·æÿ 2àAÿâhÿ…¿7ý“ÿÿ@ßÙ¼CÿA-?ÿÛÿŽQöoÿÐKOÿÀ6ÿã•ÂÂß›þ€Éÿÿ‰£þüßôOü?üMwfñý´ÿüoþ9GÙ¼CÿA-?ÿÛÿŽW ÿ ~oú'þþ&ø[óÐ?ð ÿñ4ÜMc®ÜDÑK§Íâú iÿøßür¸Oø[óÐ?ð ÿñ4Âß›þ€Éÿÿ‰ öÇOÔaÕΣwym4«•Ç@>mÙ9cžžÔ†ßÄ%‰þÒÓù?óæßür¸?ø[óÐ?ð ÿñ4Âß›þ€Éÿÿ‰ ïìÞ!ÿ –Ÿÿ€mÿÇ(û7ˆè%§ÿàñÊá?áoÍÿ@dÿÀƒÿÄÑÿ ~oú'þþ&€;¿³x‡þ‚Zþ·ÿ£ìÞ!ÿ –Ÿÿ€mÿÇ+„ÿ…¿7ý“ÿÿGü-ù¿è ŸøøšîþÍâú iÿøßür³x‡þ‚Zþ·ÿ®þüßôOü?üMð·æÿ 2àAÿâh»û7ˆè%§ÿàñʯs¤j×ÜÝir´|¡{;~Ÿ¼ö®3þüßôOü?üMð·æÿ 2àAÿâh»û7ˆè%§ÿàñÊ>Íâú iÿøßür¸Oø[óÐ?ð ÿñ4Âß›þ€Éÿÿ‰ ïìÞ!ÿ –Ÿÿ€mÿÇ(û7ˆè%§ÿàñÊá?áoÍÿ@dÿÀƒÿÄÑÿ ~oú'þþ&€;¿³x‡þ‚Zþ·ÿ£ìÞ!ÿ –Ÿÿ€mÿÇ+„ÿ…¿7ý“ÿÿGü-ù¿è ŸøøšîþÍâú iÿøßür³x‡þ‚Zþ·ÿ®þüßôOü?üMð·æÿ 2àAÿâhÐt>æÉï%»¹Šy®eEªãŸîו|Uÿ‘¶?úôOý «SþüßôOü?üMpÞ/ñ[xƒYKƳ Ç´I»¡<ô÷ ÿÙfox-1.6.49/doc/screenshots/foxcalc_prefdialog_01_small.jpg0000644000175000017500000000560511637250333020453 00000000000000ÿØÿàJFIFHHÿþFox Toolkit.orgÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀiÈ"ÿÄÿÄG   !1TAQR‘“Ñ"2aq¡Ò#±ÁÂ$BCS‚’£áð”345DUbs¢³ÿÄÿÄ!qÿÚ ?¯˜ñÝÏú¬ñTó=ºUž+¦àôbÓGPZÈÀlŽn·ö»äÖû¹¿Ô?Åó=¹ÿUž*ž`Ç·1Þ³Åv®MaŸ»›ýCüVŸ¢‚‚¦8©Úæ°Ç˜æqq½Ï9AË<ÁgЧ'ñýÌw¬ñ^Ýø¥$Lc¥ÆêXi¨öjÅ(ã~WÍ”Úä5^¨<7'±ýÌw¬ñTäï71ß3Å{¨qJ9át±Ív±¡Î»HËïÑbóæåHœ—Z÷ $mµ¯m¾Ä'“¼ ÜÇ|ÏNNpƒsóPÍLDÓ“Xïý-œßó,ñV p‡Ò¶¬ íÓOzéȃ™;ƒ8ùÐaQÒíöû~J‡‚øõïæ¨öìò–ø®œˆ9a৉}°ö ìûvz?4]Mn83ÿ¨ÿÂß¼­ qY©1Þ&:‡µ™s9Œp! €NÐ=Ä]mðhSUSrd<[Òކij8kªªf“kÄ—âÚèïÅm·>¶¿?à-ÇÛÊúg’ñXÔÍûSؤõœ#Ž3#„f,Ù8Ç:÷i½îãÏÍ¥´^ƒ„ŸïñÛ÷Cï+(àþ"×@æb¹\Às䌷97è;5û¹ÀQq¨¤‚xcšc3Äd—‘kÝÎ?Ùo—Äå½5©oÈó†‘Î78m 7'WóôúŠžFo6Ð\€/Ÿ£gê$Òâl¨“‰€><þŽbÑ¥†Ío¶ûm̰ Ü\6)NÓng¶à8m6ûv¾ËªRYLøã|lèZÇèæµö÷Œšªy#¸Á'›hsŽÏ¨Öûrtª½Ø‹$s›ÜÍ¡ÀiasÛq·áÓ’õ¯d†º&FìÞˆfËX{O=Ðb§¥’•Ït4¬sÜ\H˜Þæ×ýO`ÓØ³ç­Ýéûóô)(‚6zÝÞŸ¿?Bg­Ýéûóô,•“TCM¦'1—ÒvØtŸóæµÏ¯Ä]ƒW:¶ÐËÅ<°G%Àzo¶÷A7=nïOߟ¡3Öîôýùú°* ž·w§ïÏЙëwz~üý J ž·w§ïÏЙëwz~üý J ž·w§ïÏЙëwz~üý J ž·w§ïÏЙëwz~üý J ž·w§ïÏЙëwz~üý J £sŒà[P Àø¢ª —†Wy¾yåç.k[bmÎãø-Ÿ)Ÿº·ùÿ²Ð·öŸÁù–²jvÖÔ3ª‰‘ž3ìän£0½öKoÑu:¼l{S?uoóÿe¬ÄkÎ!;e1†en[oâ¼î÷A_5ÆFÀrú eÊ./¶÷æÓOjÛó|U~§:šŒfxšòÃ+…†Rá}„ýÀö*ñ±ëöÓn»9ÔYðª:‰]$±]ÎpsŽb.@°¿ÃñX¼ÇEšùl¥¶Ìz,OtÑ1Ù]#¬M‹…ôÚ«Æ0 çm‡=ÔY°ºJ‰Ý4‘“#…‰#£À+<ÍB)僉<\¹s Ç[„8ØÁ·ËéÏÓ±QÕ1…îš6´ ’\§äTP‰\üŽÔÜ ÇNžÞt8CÇëŸH “4Tõ3ˆßFê™Aôi.PNÒ@6½ æÚÊŸºo‚EPü>IniØÜ\/v‹Ûï+Ô """ """ """ ""iü™j¦¬,œ~†ç‘#€ m·œå¾»@½¹ö­«A(ÊÀÈib|Kg.µ›a©øæù|o‚£}C„´lŽ Û´ñ—$ÛaøØv©bx]#ã°½–ÎÐávûÇ2»;/lÍ¿½µµX¨-ÍBÒ¹³€;6mÚ¯}N$Þ/-v’ñÆl7ÙÙÛbذƒîUAªŠ·‘‘<áínqwûeùÿŸ%}5F'$±yE$q°›?+¯Í·oJÙ" é)UW/”ÖKM #iŒ3'¦ë›ƒv“° –Ú¬;JÆ,•iÝ+šÐâDŒ`½‡¤ásè -v&Ü5ñ2®1òÆéchš'µ¢ä¶ÏÖÖA9\Ò× ÙQ¿´þÌ´•ü% ’©Í§mO’°>XÁË­½ÁÓW[a[¶þÓø?2òؾÖbsI=UT¼¶*¦A+šÉA€xÖoÝìW‹™{©ÔzMÙÌ^W¦ŽVTÃO[LßЪâD\ë¹·×)æ¿IØ¯æø¨°WÒHø¨i¬Öà ­>€Ðô{”®oŠç-«A©Â(ªøÃ$^”ŽÌç7BM€ÛðV»£yÍq±ë[œ›iïXæÄk¡«ž6áòM\ÐEÆ[“s·]bÄêd‚gù¾@èË@eÍÉ"ç››ü·6‰4¸u=’IH|–ÎO9wÁJZçWÕˆ¡#y|™³7>Œ°¸¹·?¹_MYU4Íd´N…¹n\\MŽšlö œˆˆ3Pºžê_RÇKÌc24ÛÕ.;~+Wapâ³Àêq1Å¢´µå×¾§Ý{€,Ì[]6!PExLòÛ“˜’MýQ êEì ă´ ¹î‘Î %Zˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ß×=9mÿ·ŠÄúh%-2AËNa™€Øô¬¿=Å5ë;´ Å-ÔªB¥jDjC¹ °ÆÊäQ°©Nij·F[l¬ÒR;-¬ØÒZm¶¸Zëí¯‘ÄeËT×h£‹5Ûhs hÖì¹èªË®»åž›îºÚ´û®½òæK/¼÷λo¼øê[/Á°¿/lp¾êiM¹@î$ăVntìê2°@Sqç1ºº\#ñ_£k͹SÌÄ*§;Õ_îVïÌúÚ,³@9kcñÎ4Cüóh<×ìóÍE tÐ:ÍôÑ@÷lq¾Öô&‹-Ö`½rÖÖd/ÖXÖ5Ö,k}®ÖSq6Ú[s½5Ú_s-6×ew}öØq¯=vÛf»ÿ6ÙrÞ7Öƒ­vÜ^³-vßo>àƒ-öÝz3.¹ßsWn÷Þã­¸á|{ùçn×Ýyâ{/¾9ÝUs*x×D>÷¹‹ç[vìkÏäå·wNtßµóûîºß{ÜÁ žyí/ß9í}×½õðo~ ô¨7<ï²³®ûíýÖàß-þî›—ß=àßãMw#’\½¹óng3ãîk¾Ü{·×û [ÿXö?Ø)n€]åG5ð¹-q_»FÚR§¿é±Mt[éög@ ÖsÔ¥‡¸ .$¡GØ¿Rí„,T`wæS ´]m>W»š-da‰«õ°D@"ÿ…øÃ’uw;W§D$:pKŒâÃç¾%® ‚×K`Ú¾6šè@ÐpÍ‹Üþ¦æ;ĤMŠdž%W=í}ñnŒãïà8G9¶±ŽxÊâ"?ÚµA•E\baµHRp‘!)‰EZ‚‘±°„>þ‚5/Zã5£1Y%µ†IÄpÍ’Ô$º8¹;Q‚²”ŸÔZáÚŵלë5û{MßVùº¶Á²dbeãF9ÏIPuWôäÊ$˜µ,^ÒnºdÙ-“Ùµer͘ÎÄ4‘ùLeRSšÖf5›yÍ—­7ãâf$¶ñ}üÃÿH':ÕiÎtžÓì„§?Ì©ñUor\ñNxÿ¶áù³ŒÈÓòü‡½0ªÎ‚ž›ßçæÈºù…O è;#ÿ8¾ŠîÏ¢ÅÛžB7ŠÐŽbT£õÑà§C±Åaú˜§>PÊÒ•ªT+)L÷ñR—ÒtÈû$Áµ¹HìrpÃx €H€*„.aP˜µÁðröãØÄì7¼úý-‹f”1U7AËÙmƒ" kÇJU°’Õ¬e]¡¥×5pö­Û˜':õqNšþƒ®t­+:Í)×vöuž¿KC²‹$ s‘pdQ ÑD¢$˜ R?Üj7IhB!7ä¦À¹#ºÅèU1¢X„ÕvD®´ käèøòÈËÑÿšïŽÏ³­ìØX[4·S\âïBcÈÚÍÚ¸«rñºÜ»Þô®}….JË)×fh4þ9P#ÒSžô€<…d‘‚4ÌÅ<¢)jP$°f7Û-Aô&Ë|aò˜ç"¦-,i²ü’²‹Ï”è÷»5Qvò/ díÜævÉ\’M¿¬ÄZ''æ5X"&‚È[¹¤Yá±QL˜%Óp.;\L SÄžŠ…?Ìb¶•Èum;)sãºoÐ5¹ú°ñ?p¬cïÃ4¥ñ?&xØrù6Å9²wÿb¯â4â1IHƒy"•G‘AhÙ#·d e@%¨ðp[Çr¯ªMtá™KÌFK2”ÿvúdèùüÐç–ηµsmñ¼[ÖVt¶ÒºHʶqγ¹Ì}.shå&N:O~ÌZàL:n8Îa%„ļÇ?IH#Јq:±œ£ZnõGÀ[µ¬ªÞÛ/C·ZÑ¿ ÕdÞÆj:5NÁ óu˜5÷Ó„µÅÎ^‚MÇÚÖ+m·hÄMü×›VûЉ¾v-ÔºèF™Oh¡®YlãîToÙ)á\ŽB¨hÓçDÑÔÏ£“WÊàãù®ÞÞ'ûNko÷í™·íj Ù‡p|œáoÜç²-±©ðñrqІµ§½ñÑ<ÇwÕqŽ9.6±!x‚þÿ‚YÜÀü2­š°dº(µÒæE~ylüµå沺ÉLê1t-¬ž,¬b O|o)´0w4|7WNÌl¢Ü/Û2(ÍÅýR°;æƒÝVó/îø>f)%W_ tà¬ÅÞDÓÜäZ;]zˆ…4~펧rÌ£c>!÷J†f>ÄgöÞQ&'[âm£þb×ê âR´¦èÖœ.\}ZôxÄ„­Â#Š1ˆ7Oל/¶æUMú-îRÅàŽß¸¾׺˵7 ±ExÊœ·_;‹»AB”3+Xà`¶÷»×,‹4Ýû&_°LÐôî‡OüÝÇø¾NñïžÃR³Ò¾ó× üê7?øÙ×´ÿî{ýÝp?³áO~ï‡üßGýšÍ>ô›iàÏÿù݇¾¦Í¯éû#Aÿø§|ü€Å7}Ô§{ãæ6n•8‘0]?ÖqÔ Ž` uPL5A]oçh¬Fœ£w N!è7¬ãbx‚&è`ÃF$ØKè‚'ˆ‚j£‚$Hƒ*F#(‚MÕl6ø4(ƒ)ƒ=(ƒÐ£ ça'åz%Ò É@ ¶P ºPrM0nʵqóT„¿Åx§•f¥hM¤…¹Cq£…^h\hw<[¸=i(Qi¸…ûd†dx†E‡Z8\u¸‡zga8‡ûÔ‡€˜‡!èVÔ GWA¶m  Òÿ É` –`“¸ R7ÖvÿÐ?T:ýó<ø‰Jʼn Ø‰$xІsPã Uƒ¤ˆŠ°‹¯Ø‰4`>B³(‹~C‹¹¨?¶Ša³KŽP\‰#'WÚàþàˆÎ  õ¤ V v` M€…4¶ŒcxÃ…p±†€H4ë"Zt(ˆÛ(ˆRe>7=&gp8ˆYôx"3LiŽåxDã¨=æØ†oˆ1xØZö‡©dˆ†áÈZâRh׸qã²3û.Ñ!œÒŒ†W8…‹Xg]ÜÄMX'M¤TLD.­’)vYE’ºäKWLÆŠžäs*ù’%鋤ˆ6æaÖ‘&ÿ`]sk·‚'©‘Zg’8iaýÓZ£_v“0éw¥e5«—5­GO!§;d„ó¡ þ.r  lpBFWùÄ…ùtÞh‡cù…ú‡lI–í¸‚7$Dµ z±0.²P z(ˆéõX„wHqøØ–þˆ†a”fƒiƒ8ˆ9T ;d ‘t5u9uéF‡³€ä"c¶zŽðãd   v°  RÉh|3.’?¯ƒ6Tf‹¼hsX3®ù‘±8‚'ÆZÐC\YÁ›XI°&øŠ´)“™5©i5€'“h^à D½U# §H‚5É6 f}À¡{Û¹Þ;t„\ÿSÊ•ˆArRT& ÿл`â¶qS¹‰7G)‘$°ƒ‡5Æ!‚ü¹ƒº€ƒÕCéVy˜oèP6I Ú à ªõô—J´ŽR×EJ.¶³]FÕ$­ù8«‡53·;‚3EÅŸÏÖTd³‚ld º‡Oh1~ØZi` òOî´WG’Ú0Œ¶PC_ƒ\ÍuS¡±½± q° T) ±g ™hš”ón–0TÿaiU:lá'HPDmA&Q†Ë‘V#ž%k"ùt)v$Ù8n#£»CZ§sz§uª'GaY2¹bÍæY! T*iW $IYUÊXÿ! Pi¥² þAEP¥ŽæQM² {Wön8ÉœjÚ`’1¤rÅh\T†cã” 8]Œ¶c¶ð û` öpNÖ óDm4åP†BƒK6.X1nC•( 2ÒE° €Åa ©ÑTñh˜È…øŽc¥ vú­x:§Ùj ßØ<Û…#©Ûå¨qpeˆ%²?Þõl@R& ñ5Tº·$p ìj$Àœ6X–˜äø74WÊuhØvW{Ê[¹7'dåé\ËØH’dmÔÙhŠ˜•Ës^XJÛÅcãDp qei Y¦“Ñ`—ÿj Š ¨³2ÙxÜšrr ®B+:œ´y´?øM¢ &ë]AIÆJ†(ˆ‚jÖ ¯` ©1Ϊ iК©ìA¨²BèŠ T{{±t…m±; hHOy QYwW]ÕÆ«}¥†;”öy%žeŸþ‘XÙI •Ú0ÀÁ–Ñ À²X« ø8=k ·”9`H®Cû Á‰­Gôø£Ž‰{ŸZ+(ª¨þ\Sâ¸láºGö‰¥laŸÛi‘@»–FŲ©Q¥Ipù¢ë$§·8 kWðÙ¶A¶7£Û£0ö8UaãbSþ07Å\n×WÔ†k£ÿ! <$òc—XS¾†4s6d8:d åNÔi›A“|*aµ÷a&PúË¿ûÛ¿ýë/4tQ÷‰Æ¹‘H69”5å[¾_¢9d—V±ªÂºƒiÏ& ÿ96܃4¸Žj‹Ré1E¤–ë‹V£vZ#‹&«‘@mWhË%«ÕÖ\÷#p(xí1T< 5>­µ5ó…Ÿç…Ôu¤$P%ÜÄÎuc(§Ù ˜„É—5Q¢ƒ>låP—eåUróBv®Œw¼wÓ5é2IQOiœ.û€t»³&²‰>uKSW‘Nú0»W W–€*›9²Y3>…Yl\ÿ´_T3auPg|¶ ƒ‹Àöjhïø8g³¢;gÀiꊓ̑föSèø—ª…8*“ª’su'T=µyŠMʸ¨f»æ5N¹6ã²Â Î… 8²S°›EÀ´’‘«3¦j¬LŠuÓoè“VG„˜òb¹Ú:Ĺ“ƒËÕ= hR55¬T®Ù¬p,ˆk½&FÊkoÔ>´sE¸4‡¢TͱÍ—cxXS±Ö€»JS“qNæáƒ‹©î•éTµÕF– qbÆ+w”¦”®ˆ”´b;©—Ûì–Û|ADy¶ÍF›DcLTgLü5>»$JÑN=v-y|ÿ{u 槯èáG 6v¾C=ÔC8ÔCŠ9[8Œwù6ŽÀ½5Œâ˜•Àm½šIù’œªÙâÖ2XÅI 7ž•ëU¢êݶ¬è—|ÐÇšÕp¥ª [qEn;5¹81œ˜|Zñ|Þçg£K¹î=Ü:%Z᛿ٛ$Ç ¸€[sR_>‘¦ªh8­ˆ\Ýéñ¡*J¬¢1páÄ£äI í‘¿ho™׫h2Œ£üO»v‘!„Ê~.òe"“ÁS(j­†M|CI3Þž×Ü}Ú’W…’ÖÐ ¡?§ ýô³· @ºýé®g r©Ö5p5:% ¤ÖºéÔÞÿ“¹r˜ÜU_‘^ Ï3ÚÖ@•6¨òµ¨-ïS'<3˜>JÞ‚‰Ä?Öd“tʹB+ß@ÉâTǯä¤ãžâl[î`.`£±ò™šhp%jA¯ø ¨‰ãð/ùÊEѨWgs¾;%àóýncŸ­E¢-ÕI‰êú»CqP(°œr=Zön?ó<¿Ñ‰¹H.¢Ë¹o®º é@…1 ÿð¡?ú¥ëO\3THFR$°(û™Š)Rj9ŽûDu¨Cïžøœ&ƒ~ÏïIÕFÜÓ³ãžd˜¥V.MË¡rñìúîÌ-y¶ŸÒDFÃ.÷E¦¿ XŸùv8ÿõ‹â¢v•Œ[¬|GõEvø©uܱòºÀ».*÷ùˆb›µ„®6†=fü[]]‡¶P»Ïï¡Íš-k ¼e°`B‚ 겑àÁˆŽ,Ñ€$mHH"‘æc$Ú^3YP×5‚+!J<¸Í–À† kÞxÍšÀ])Îdi°MDEjÔ€¾–(g>•I–­™«ÚÚfФNˆ*cj5(ÓëÓ§¼ÙPmÙ‡e äÉ–mUˆ&Û¦ÔŠ³¦[„?&ùXðàÁû´e}Q®ÉºUñNTœx­IªV'Ú’%PÖÎ[)S^}K°íå¸wŸþ h]k,ï¶)aÂDÿìÙ²k×V¢/µA”‘$UMÖóD˜]AÇ«-3X¸Škví*PqN‡×$½ÔçÄ„yi.îÌW[x»X#ïÔ–^ýzö†}Zë^S{e»ÖzB=½kó±)uA6¹ó ¢‹ÀíüRH®Ë4Ž¢môÑçŸ'ôgŸ +ÔmÔœ‹ê,¥›.!¼ö°¥·>#(+bM´÷ª@°Xk¬¼új´I¬“„»°µ·t*H§m<ò)Æû©-ˆï¹æVL¬«žlRl+âv:¢žL’).Ò²¬Ê«ÄT3P¯újê"ߨ"‹ ûÐ$K±„ä*À2[±'˜¦´F¬ÈŒd‘¯4ÿßâ7)WrQ§ÖÌr.$³¯KK„/´*0»¶à“Ž<üjÓ'è»,¼ T4Áí4(>&y<I$5Ó­‚:¬¥?@“#Ⱥ·®+®H‡ôœÑHG·ÔsIZ…¶À*uuAþ Ä2SÝ«¼0•\K¼zÈ©¼ÐÔê–®Â[÷ÓmëƒrZˆÂärÚWi¬U®<ÔTR[7*8[«L¢e˲EI,ñma…‹dºˆèâSºà¦7R_"òßìv|¯&0óùΎdw±##m,[~×úvÖ¯²x´a76UXHMÜ/È·mùgŒg†+emÒéFŠ´qDªËÔØÿˆ(ˆˆ Áj¬“‹Ð)…¥‹È?Ëäô»<§­ïèÄhR§BãSn,·åné“,‹Þ– ­ïÕ:IžñæÝ¸s×LK×V²ã@å"‘L¯°ÏµJSÛ2%·äTµñnøaÏñú2΂<Ë©ÚÂ] ÍfüæÖÔG?­KçcY³5Ih…ű»M>èÑ¡5÷énm«u‘¢’ ï»{_}¢¶)/ýÉ·D¬Ü_‹gv¶w“|›ê²«²"·$’@‚|óËoƒ³í(]˜L÷?½ÂÛ4oKðLœd>ôG¡’žäU/q] ~áÙ½òÕ”˜îdkRµšs¼´gL5Ú’dÔ׿ÿ R«lZX¯DH d mhƒR¸Â6HÂRšTt*¹ò[ é]¢n¢:2e/ZqÁà]Tf‚za™Æ4§²I©2‹™´¼V¸lÕ­/ÊÎèøoç1Þ!KÛÒ!Ì î;º0 Õ¨Æ4¸0Ä›Î}V¥ Öªó:œ¤ ©+fn[ýbÕ¶X5A¹¼Î~ó1ÜûøE.Fé;ØjCˆh¿Jav¾+ÖΈ-È%y\ŠÜ\÷¦'V&f šÈ ÆW‚$! ¬lƒÒúB•M’ 4šÛKèÖ/Ö9n+1²U;h)F|MHÒЄ$03 ã{f!(ÞÿEnŽÃÔ¼šB´:î ~˜b'O$º&j ó£DâÐÌ$(s|h_3ÑÀÌX’†8×àÞÓÆ§[¸á‘hDT|“O¾™Î@ÌLB$g €ï)$(•’1ˆ¤@h+‹$àzÇœT!|ÒÄ[” 1ˆ bpÒ& ô¤+ôa)Ja q8ì¢DÌçºÈk5Œ'H‚¥¿´¡ ˜” . G½‰wRKßnZƒÂIH¢ª–°*VVU…ícLŠH@Ÿø'Ž©ä€HP‚µ¶5Z¼SMµ! Xƒ®ÚŸoêzG  ¶HB–¾$È$ "Á5À¦*ÿ•D# $Ø" -Äl$–)5YH¢ ¾iÂE[ËJâhŸBT»ZÖ¶Ö×ó‹% D/¡…ÛhDIžYÄŠ²Šmƒae±ÎFØ5¡[ñH@¥&MÜ&ô‰„#k ̲žµFh'š>ÏŽ°?L‚$¶±[lã» ïxË‹ÞÎøG‹»’J-¼ÛèÈâ KðœÂ:ûD¥Ád7 ®Gl€ÜrqÀ²(IA‹XƒQp<ÛÐW nAB K’Ü€)߃=’„ŽøÁ¤MCü²¥X¡ .†ñ‹e¬Ú*ØaAtK|è¥Ä¤5¬ƒÉ‰mTËž…åK0åê%ï2HXí‹[KcÕÚa¦'yUß°ç?ž İãó²‰YdXm ·¹%qTJ€„‰x„ÕÏ\´@>¾Œ€$ (¸Fù ël*—š$²_#™9˜w%=ió¹íc ‘Ð@uŽgìWŪoðö%Þ|‡®v5ñ6ÿÚX×à¦D±^¦.H°ìàÄÌM Z AЄ"P×# ! ]s; Ë &ÂøbáW"È´ÊícyŠPÇØå.¶5Úf‰KRòu!²Gž)574´²»ª+Ȭ‘mXHÓ?Bem€Ì ßÈG¬hñQ¶²~-‡K‚Q#<}Š\³œÅ~^²Ë»1—SSñ"c$\-H(ÜÇ×*ʼn&âC‚#tA¾à6TÈ*iƒcÉ×´¤CÔD eÖ+{ø¼¢ÜÖhDB=Òs‚ˆkuDPh‹"PÌÇ›¦HkZ·\Ö6Þâi‚·$—i’3å²-ЧQ·D~jʇÿWïîÄ i@av'šÐ¹#a*BÖ2 T87¼R߆ÌFÜ^EÎjazm‘n²ë¢¼ÛgʈJGÐÏðXPùÉŠ£X¯6¶,Ç`£#’£¸T 9«&"Zœ¸Þ’þ¤yE&%R+ zœôƒ Ê([°[ÐÔ…l@Kx@[Ð…ú»ì¹› \˜3Ì.I¿ù!@”ŽÔÌB¬%ñ¨¿Å©Às!ˆßP ÄÀ§È ð«¶!Ÿ:c› Ü‹*‚Œ•ˆ·=Ã!ƒy?ª%” 9¸09²xŸ£¡ÑÃÈÂÃЇmØÂáÂïèŽOb â¶È@'J ÿä@¢ÁÑ“(Ê ™,$"'3b”HñÂ-ìBÝCmÐ'$Ž€:‹1¹“hш„„¡Š³Ð¦}‹«B©“Y%‘D:û›ÝHë©”Ò‘Ž3Ùµ±y$p2ž;‚$,ê¡[ªUì›9ù¤¦I,‹<›Odœ‚•ßy™*zœ½¹3Mœ³4Îk‚F½Î£ÃÐh”ß?BÚŠ{™76ä"°ù¢‰¨†hµÁŽþ!ÛAEøáEÖ(cy)á`ÛŽóÓ•›jBñŽŠðªÒ…;ÓLýKdEÞÑõSd Éá¿bÒAíÀ»¼ ae‰›­ÊÅ´%婳ƒÀŠŠR&å{KñŒÇK [€Q?däè€?0@5•ǨŠÏ©Ê'Èfº<xôYø)ÇèªúÁ^qˆ¢ÈW5ʨ5OãDµ6@«m4ÛG½X@‰Œ“±²Ôb2ÎÞ¥‹u Uy˜¨SyÅŸ¹‚£iõë|Ëà8oÊ¡Õýšd+š£rÍôÔô='*¾7‡ت^%Ôࣥ)Ö*€„³J¶db­>.WaãW(î’eZ9‚tQÖ÷}‹WùÆešd»Ç*£ø\㑉÷üë÷–Y¶Ü­WÍ7ÆB=WVÓ•ŸÜ:ªSÙú5ð9oÌÝöý!Žzxß5ªyMaGw–ÿ­¦o*>V‰æoùÍV‹%8ìêö;ʈ@§»ÚýÎr¶Æ°I}‰WOªv ¯å9ÚãZŸ ã“ülOlxûM„‡¸€mª{WÙñð†"ÓYp‚ š\çG’òpDäBQ¥GŸúÝÇ;ÓÙÕ2ÈÖ‰%l{šÄ‡¢ýLî,ð+ùêÇ84iƒr¢;Üo’ωKzBÄÚNU¶Vå^byšûnb+jƒqC¹—P\¨À ¾ñyCÜÓt2>œñK&õSá§ì·¿±µNQ黋ìøáME€ŸšŠ”’І›Ù‚$¹’öî%½I-_8¡£Ë4g8 jnT y§±D*BÿI×ÿ¦'3O†“3ÞòH¨;@-°+=4™Ÿ:6DÀmð—2”'ŸøE’€G?zü^}W‹2„$ojƒˆ4ƒk4! ¯*Ž\a kÄA4À²Ù/1È©O{‰3‘ «Hjqw‰[áïò²§!¢ ™º%¿ eŸ>²™XÙ@ MÐxù“Ÿ š÷ÏýwzÔÕz¾ôk$ÚŒO#”¢eG’$H 2¸IF†[`ÿüÓû€lŒlc‡ÃñLwÜS…~òJa~ê|€Ú×C·;Ó†† «ºcWèCîUõ/…Ý[­â‚0D±PjlÑãhC¤ ÉG¸ÝÕ4‰…EÜfxŸ¹%ô”œb³rAV¨YÖ"–-,A,©È¢˜%”e*®2ÍÍ¡§c]Ù 90°êG] S…y<>ùo2䯵ÈÛ˜µRF«h2 gI¢´' ’hƒ7!,‹Šx¦ Ö€p%máùx¬_£‰xgÿ…­påDW… Px‹³y^-M6i/T‹§¦ôÙ" 8J†q<§·!në%ÜS™yªašDž2‹O4‡ª^2Õú+bl´IÈö‡i÷¡ "¥,§ (è²”°ý¹SÓäI2›iÐúb^¦ ÀÿH¤E‰CЩÏ|(n q\XlŒH ¶%ô%%(Ó¡Zÿx4¤#iáî̹éD ›Ó)0›è `!_Uu±S°–+‰­Uô¡ ¨þâô,gzÙ¢GzHP:èÅŒiªñvΓžX2KX5iF©n†{œ4øñ‰‰fÞ¨©Öp€ òìI¨Ä¬ƒ_q·S¼hh)“#ìPƒÏðÅ&ã ÅüYg!á4¢™q"Aš9åéê¿™ j=Ý›&1¦AEòóÑËT[œûј=üãã0íî}>{dâí>¹$Hi©5̈$ÌÉk$Z%ø@ÇÒt’›™]1u jqé©Q@œÅÑÛéZÅÐ!ØÝ”Ž€ä]ú$¨5‘OÙ‚öUËÄHET X$̨…D®DbËBØt5i¸Ñ»Á×# äYCÀC¤ÿ ‰ÒUܱM ý±’ŠD®ŒD_؈¨U!§X!´$’î•Z OÑBSuÁZ­e`ðùBñù‚.ŒYÖpJ_ Y U¹tÝR )WæéùÔL ™!ê4•xTÈ­Xª¥YxDTÚ ÜüÜâã«ÔB>¢ ,ÐcHDÖxÈØRAÏÍü¨dÏÇJBÖ_~ÏS¥R"}‡•à¬Ñ:ÍRa<‰ÒaÙVìÑIv#ù Ñ-ê’’ÝáÙаõ\ÏÍ+Í+æ¤MîdÏðÌÑìLÜ`ù þôQÚËóDÑ_ÜbL¡ß)zÖ0šEK&Ù¢!šL±OEyÛåmýM«ÖÀ¢ˆ âk‘Z!MצuâkI^DŠÚPðÅÝ”} ¹ð^•=Œ°ÍOÈU幸š^xPø "ÙUB•eY€ ýàà ºðD7¢_©½W?Q%Íø‰†ÿ½éÒªÅÜ}•ÂM…ÁŒü|ÑUì-2Ð~üRDÙßúA`ãÆ`©—=ñT2&”•éÆüå×Ueȼbúù¦ó!Nx%‘Ç ŠØ`Z£ "€Õ¦ -_JÍš£’!ÔÓ€GIH&QÒͱ–kfUÜb#u}d ý%Lù“nŠüxÑ|BõJ¶åPêÝ_¬ÒM¼æv‘¥øœRóìPýÔê&ï] Ù—KâÒpf¥ ZüÑLQpv#dƦhyµ‘¢ýæwÔi¬’í|xˆ(z¥W` p–p.ÒmŠWÍÏ)Òólh5Zeà€Œ}(ddQÞZêÿ¨ ‰cÕ¥ñ€œOaÞ}¦þ”UÇõ‰T:#X- NœfaÉ‘&òÜ•¥rê%m¢ ÊucþLŽ.æN¨Øž“égß|Ò™:\gêT€:Ð× bŦ’vc"¦çØNuÅ¢þªHHÌÝôIhŠJ“%ž¾•©‹é%œqV:±OFõ‰è„Öh‚$z åvõ*!ý¡dÉÀPêž°èò°ŠÁ‘Uz"”é…Õè”e夊8~ÈieNKyÖÙLÂBHC4¤5X‚²–çåDŸ-¦"‰ŒâÌYLµW–ßc­e›Ia^¥¸†«¸ºGKmUÏ5ÔJžU¼&úñÿ6î’£îÔgâigÁN~<˜¸ji¢DÆË¬P©c•«-,Á´8€(€6ØÀ$€€X´äME ô‹,ÀäìE ó•P `¸ÈÓ‰"ÁBŒW£p. uAÔP”@ĬÈ,ÍÒì¦åzÖ¡½9%ˆ€Š  "g^8X›=Ó³ZÃå/&qšŽi…F@¤-胋:f ³N–™hƒ#¼Á$TC5T‹%øcQ¶YT؇e¤†6 ”«Å( S\Ø«4‚hXd†²ì‚iÄ5ÈBjèBp5B^®,0ÈSˆF^Ñm®I¤Æ•`ÓkY €å^.æfÿ®8Œ •ÍLÌš%R´Ûö_áZX^iƒÁ”Ä›Dj$FjÃbÓÁ„FÈE¬Eü¶$‡BÁ„¹„T#¨tf¤À lÃþ>Ä‘€¬%±ÐTAæ&0æ*NgÝ'mi¼„Gǃ€F¸ž@ȈD0®$…ÆQÀ„!ÄÊi„@°FJ€#Tj´µ¥‡úFDjè× ‰Dãþƒ>@âÑ|ŠÁÑê/É%•’ÿYN8Â,$ñØB%Üc³pÌ~IªD¬›@ôUQ€ŠrÄnl|àoü/Ä‚P±BE|¡7iÜEükü†@ÔJý›Ñi“V®å@ïñÌZîæ’Žg‘¤C®k¸Éç±tP×ËÅGDÔÇ A h†Ëiƒ@¼^¥G)Dp¸A$Iß Á5Ü«^CÄ£í0Ðà͵×W¬æWô™V¾,,±„W›×§2*IÔoÕ½U[¸¯%@Et8Å[ŽEú6FfdpëED® FƒI’føl]í¯Dè4Až<Ýê§€+p0p0)æÈDÿUƬäM”±›¼á*sb¤ë„äþFh¼ÈEdój D(KÄüFCÄBp„‘HDm ÄÁìWS'6íCòêÃЦ7ÚÂ×8Ò"È2œÃ9ÃØÀüÀT„E¶œÅ6ÁB¨oXRÉÅTˆK¿†%‘ðZ´c8 a‘¤@ %9XÕkHÎå™|H8ØBhHBƒe¢i æê1kµü±Ð™LwÌO~ËKj OðÊ]¬5A4_Ø æYTEH„_#tY ë*Åú’ð^[Òü"¤±5¤@mHµ…yë¾è‚7Yô§ ![hßpÜÄ,äÁIÿƒ3¸ƒ3¤†%ìèA†£ü ¶OCÅmÚŠ¾œ¶U°vi¶v)6€²D„JŸÂ6Ä€fº²P0…ü6pwpKB+’?9—)ŒNv›íÜU´W)ÝöǸŒÈÀj¨Ù›I·Z-AÍ_àäδòêHšGsäÀJBHAÈÁ$ |@ÅàSÅ,VþähÓá·kqÏ( éº ¡_6RQ6ZÃ>è‚ø;¶‚[t¯…ŒN–tÚéÈ)’F± ÞE¥·n”E4æ~? ‰ñYçÌsm‘š„¢R ’¢X®äJ@æÊÌ!#mxÀÀXDVëÈž];c8µú™f£ü¨ÿÉ¢ùº˜„NÜÇ‘Æn/¾W(RëåˆK mNü\Îdj"}ªD­ÎùmfS·ç#µÓ9æÄ À7|€ÄA|O‚Ù•Îõ\§`"g*‘¶+¨~Ñ×Ô±¡] j@íf‹ºR=°Z‚ ¨Œ#š4'›‚yvG z|^Ū¶hêD$±êìôÐ$€øÏ}Ä+¯½”"j¦•ÔE²Î‚ÎYB$ˆÅ’`;ï0[ˆp·X´AÄ€0U$ž-LEÇf"ÁÃØ+Âݘ2D AÓl™c­yØ0u€m¼Ì®¤šôMëm `Ê©žrè"’Ôbhª¨L® 8H¥Ö$PìTd)‘„¶3ðYn©›´1O¶«ï3„/3{&kû”¸áÇ!žB¡ÂÍhGGÍ*W+æ*òy«-5æj£”œ@ÍÅ$M•j+á0¸f$u’Ih"Š8Œ]¹õmã°Äl@‰õASõÍÿ¹ÄvÜo¢‚²Õ¶ënŸz)óP7ªÞß°ÚÀÓXìŽK°4t)^_ó%Dö ¯ì—ôtÉJ«¶Ka@#fØq‡U›P ©/ ¹Ðõ`£™G­Ä"É ýÜ6»`%¡ù²Æ¦võ§q ÌBàÆ ÓÀ%Eë²I‰"£¯Àì¤D›ŠN ^IÇ Q#J ¸Ç, ÉÚÖ¸%%*iN—IVX¢¾Db:Ïa™H‰"`JEp‹ ãâˆéÔíA$jÖº#–‹æ/2±ÄóÀ¤4.bý{X¥0^ærÿ! é×Ãæ€í!H)_7Š(¤)‚|QLÿf‚H™R&[!dg¢kÄ­Dƒ´†h´Ñ™DF‘c AáG¸A”¤e)K) 9¾¤BÕZ‰ž2 î˜g »dri½HîÒ+«X]60òl/&bSNDBd eZâËtæ259Ò]¬+•Iœv¬ò“´’‡uJMذGÄlž'–{¬Væ2¦ é áEÀD˜8«¤Š\ÃÃÙ‡?¶¡}|CÃñ‡>´¡m\†;3 [ÙÐrÉ$þ«9=ô×T>³tbSQY¹'§+ý«*Ú°§G'7œ|ŽT TŠˆ,ù£„‰M%Ÿ)fyÈ ±S$ ÑJDAb¥8Œ e)Ùª×ÿKœ2P£±LU’—zåš-ÎQ¦œpj–ÅÌM¸³Z~G‘%§é÷«f¥œ¤IçXÂF@ÏdÎ,¢ñjÚxxSËd“¡ÜK- ÒJÒ´+Ä:™ÂpÖ†<ŸüJø¼–6TKJ!\–HsœÔ`ψ,-J¨ì·Ónre¬J]ÊœçKÇfÏ/¤æ–´ƒÌ9V%Ñ ,bùP°‚E‰† \œˆxRبqYÁç¬ÉÒ„^Ä;”ŸÆKWXbÏ–YÂßM?Q‚„ ~¤ÝíXád›Þï§¾´(ÚÔsíΔµäœnˆü³ÒâJ°\b‰Sº[xb–´fEÉL¶'®£ÿ†ç -eŠaÇÒ[â–®VS¬+çéYËØ‚NŸtžà†"8¼òQ)RE«~·¤ÑÉ„taeÊ/‘ÓH$’ ¼6Y^ªIÔB–ˆEŠòã åhÆyÉQ,r$™_Å/Ç$H–àÛKÆ>¾] z޹`A.xp¶™,Dÿ)$*åÔðSK{°Ty¸µ)âºkàÛÚI)Ì™S )l’Çr˜¡Šsó~ü8ü©•"hHA ЀîYÏ{Æs@í<¹ ùÕ§èñ¥kÄC:#ƒ'{ò¯~R›Žæj”žê‡;QèÖ Ts­žL_Ù’–˜Ë•bÜ´/˘¶Z^(~ –S’»)XüªÚÿªí‹/\š™Ö´Ú„îe½$ˆX«#U6'qÉjÐp~†Ë®J_ìýÕÀTõn#!km”5:e§­hÈv™ã”u\^®Bâ<¸ì½ô¡ìhdÝ»¨þÑ¢,òb¿óKîÉvÄíó—¼p’16Øk'yãf»À„¾Õ¶7•Ü2&ÇN&1Ê™hDd«±_+8S{l^SÇÚ †÷Âc­9D§Å3u4ùT¡mmußû€V ¹dÒÊçv»·%¡ª„ßiœH2XsêÃz®Å>OÈ%GNÎÐÆFª{ ܾÍéˆÖçn¶öW5ûV£xëjs/´íB@*S†ÿÿ&J¶:½Z´ÀÆ–yk÷æ¸RåS%Œòt¾°Ç eÁënÊîµNt×ø¬‹n겈ÇÃÙÏÀÆnÓËÊfŽI¶v_Ék[ 2“{èéKgÔ¯¾ô‚vý@]/RA«¾õ­?=íY?Ò×Óþõ­—=ëe/ûÞß>÷™Äý[|² Ä/½óú{×?øÔ‡=ô­{Û—^úÕ¿¾é'çýå§Þù©·=ò9Â(ŒYC²xñ%c÷ÃDZ°ŽYlÌþy©ûÝÏÅâ¯ý¥QêoddÅæ¯ï/çÇúcÿp¬ÇâoóïþVl õ¯ýÞïÿC°P(pþò¢Qr¤â¯ßÏQÐý 0óOÛ/°?p ãepÅÜ/ÿO/^ìÿì/[°ýø¯—pGðå/÷¯Q(Ð!F¯;zJ=¬$§ Ìȶí)°<Â#¼0ÚœM 駦ÂPÙ>à ­«\R®ËI=ì0Óð+(´£¹KضmâÉ ÷Ú´C£rŠÚÍ Ñ†N£@@(BHþƒì´«šòªŽ(ÛÆ‰Ì(MΊb°BbÖ`£ bIÜ`jË4‚–œ¬Ú &ì«ñÚí)ÄËß4iŒ®É:ì먇䰉 Îëb1›ò æZâЩlÿ&Lñd‹¥ âr¬NÙˆKŒò„–,¬†k˼‚º¼ *ú%Öúâ“R#®¬é,©ç@Ǫü0± ‰ K\Qæˆq´J«òâ:RÍ¡X1Ë4Ë·¬åN†ÍjÐædjžÎpÓÐmëDÑ:ƒš¶.ôº ®úð$B«4‘ÔDÎéK%Ò1+œ‚âï´1$nM½KÈŒ\ KËÖªÓÔî0ý…£NâÔÈ«² ²"tn!+´¾ìœÜk)eµD,ŒrsN*í×Èå½P«,Rsɺh‰(Æ Ãk&ãê˃ß-ÅeI,Ì~¤Ò:gúPÏúܲøàrû¨¯/ÊD'ìò.ÿñ2/õR/e!l¨©kÑrÊÂâìÜà.=¦Í¼D®"I1ËC—Bñ ”Ê\Sºž Ñ/"f±Þ&!O‘èxi&I4Ió‘B“r24Ó`2Ä$–n.ÀŽ«ìJìLRD´ÂåÀm&έc¦hò‚j§&Â1¯ŠQႱEÓë-*£ê)²*ÁέǀÖ8­Ò†H€´g)éŒh#MRmŽ~­ØÄò+{Š"lÂ$Ôª3¿Š²”Í·²dŒDqÃd2¬.Lºî+À„ª—:LÎ2æ“Ö¢ú3ãª2¿ ­ÓtÉê×z !eäf*ñ<"2j„ÜÀóå²M~HÃ(ÿBc(¨± Ô҉جSÛzJÒt¡¾Ö´iÝèíÇFM%µ0jÒ`‚$4†–ËÚÂ…³‘¥R"°Æâ:ÂcV£ÚÀ­`Qƒ„5@Ç@}åÈ3ÃŽLE#åÀ0{Vãoi!Š'!ÐËßšC¾J‚@ªlÀÊÉÚ¬*›> ôDòZl±(ù·ìNÉÄqÌ.ªÐ²íò qlI*Ð#CöÂw*ÉWÃZ¥Q}…T2*Ù DÁ$½N0áà¸ô‹&ÅNƒAÒÀK6q)Ü€_Bbô’Òâ¤ó©âðêTíø´>å3žrñ¾·ˆL ïn³nàÂåH;äÿ´Â6+àfmÑJ{c&£S@À|º X 7Qã2ÒTY³Ý•4ÏÊ2@•C]"¡Úóå?jׄ®­r9íB‰œ-T@w6£ö´§%Ôu}ó»Ô FÙÓˆb™nÒB;‘1F¥æcFÆŽï8ñ¸Ž÷xxDúXÙŽé8 YÛ“ S¤€Œ-ìüjP§k…cÔ²þÙn²+Õl¡ç:z³ÂpK~É#1“ ˜üȯØ?+I»‚Ý6j°,‡Š–Q€`9o –m––‹`–i¦–‰ tbÙUb9–uY–k9Wÿ¤¨–]…–où—i9~™ˆ@šeš}™š¹–‡—©¹–\G¿s˜:ë{9¯ïJâ;–¹ÀXJñ”,Ø‹èíŽb±¬QÔ̦!´ÙR#<.“''&"4b"2é’ ˜- I`¯3`O¡N¡ :¡¯"`/&ú #t 8Úõ ‚ :¢ÅFýþM3…b?~#»Ž³@Ö`"oµØtÉpŒi8WÃ*AÁãÉfB„Ïø*} ¾ºSâvRœÆæ9u¾Ð”2isñȪ-ëï& 9míÝðŠ(ýq§2® a+¡X ãòË•¿·:ÇakÛ4 yä^xáÈÖ¢€Éœÿ-¢1ÿʯäŽu>×8äVÂ%Ñ£+_‹©–“Çø%01·¸z{Ÿ-aÛìš¾®àî—¬¦SXMÎÛ¨3Øv(ÿ¹Ô 16wŽz‘h@ëÔÈ®ì+¶† `ÂUÙæÇagtOF8O=ó•¸ãrR¤õb·ñ¸í˜Åc,a/|›¸ƒ{d,· 9óud€›·‹»Žu۹鸹¥c¬[¹±›¸ŸÛº{ûŽ£Û¸‹» ¿[»9¼Ù¹ñØ»Å;½öØ·Ã;¼“û¸ƒ[»õ"Dd-$ÍrE }´BªlŒÆÈ\Ò°v)Îlâná‹ÇF$¢¢Êôûuqxí ¨”#ÂŒlÇ)ÿ”¨! |âD)BÜÂ3¼®_T4ªãN¦¾Â_+#Àã×€ÊFq*C9˜´ÔÔ¢2|!R¢ÊÔuúÆãDÒn¡ <üEbŸ«,HÂW8ÕéŽÛ¸#avø˜ŽUjÊõ"_‹{Ë;ío/Â|ËÉÜ?”;ÌÁü˵ܽPÊó¸ÌÕû˳cÆ|»¿¼Îï¹Ü¸§œ»õxÏõX ¿<Ïí|Ðûü·÷¢¹½›[¥ÚÜÍ =½x[Ñ™[Ã<Ì)ýÑÝG"Úœ·íÓ|/æíÍÅÐëÎÔI=Õ¹ºSÏͼÒY}Öc]Ì=Õ•»Ì']Õµ¼Ñý<ÔÓœŽOלÔ÷<ÕÁ‹ÖÉ[½…½Ô¼Ù\Îß<ÙU·«Ðñ¸ЇGxD¶ýg!ŠGÜÉ=Ü!|çg|gÝ#AÝÃýÝÑGÊ}ÞÙ½ Äý'¸½ Î=Ü×ÝÛãEìýÝÕÜ×àåýÜADß¹]Ýžà‰„ß‹'áÛ ;fox-1.6.49/doc/screenshots/aqx_linux_visualizacao_peq.jpg0000644000175000017500000005172211637250333020600 00000000000000ÿØÿàJFIFddÿìDuckyFÿîAdobedÀÿÛ„    ÿÀÑ,ÿÄÊ  !1A"QÑ2’ÒTBR#3S“ÓU6aq‘¡±r²4t„”´ÄÔ•Gbâs³5uVvð‚C$%Á¢cƒ…!1AaQq‘"¡±Á2RÒðÑB“ábr¢²#‚Â3CñSÃ$ÿÚ ?߸ï‹xƒ…³1¤Äup»&.mkanvK²d%¸ÓÖ¦ö­­ªCzåÂuV)³Ž*âÿHŒœøØ^‘‘ÄÇBS"„-÷u¦ëªÜ¡Ô¥eÔ²Þ=$­W XZ¤Zý zPŽÛï¿Áo¹¦#¯DŒÃRTãòóIm`¨5©*u:V›ûòú\JB‚£˜ž‘½ ½9ˆ’}όۥ§¤™ [M´¥¡%àC;RKQNÅY;ÑJ ŠåøÏÒ^'?*¬¶‡Óâ-Ô­à^l¶â|4Ø0êB°Þ!Î ¨*EËôé;{ ¸žŽ2-´ëÉL×\.»»dBP”yÒvòrt“J é7Œ™œÄ œ."e³x³ ß[nK,„d#r\Ùê‚SÑP*ä4 ©;èÿŠx»ˆY×päœ ˆ²‡Ê’™.¨­."Ý4… )[/¶”.—W®WŒ{ô ¨]^¹^1ïÒ‚¡uzåxÇ¿J …Õë•ãý(*W®WŒ{ô ¨]^¹^1ïÒ‚¡uzåxÇ¿J …Õë•ãý(*W®WŒ{ô ¨]^¹^1ïÒ‚¡uzåxÇ¿J …Õë•ãý(*W®WŒ{ô ¨]^¹^1ïÒ‚¡uzåxÇ¿J …Õë•ãý(*W®WŒ{ô ¨]^¹^1ïÒ‚¡uzåxÇ¿J …Õë•ãý(*W®WŒ{ô ¨]^¹^1ïÒ‚¡uzåxÇ¿J …Õë•ãý(*W®WŒ{ô ¨]^¹^1ïÒ‚¡uzåxÇ¿J ‘ +ú¢9 €ô‘Í?—°Ó¢¢x+D­ŠŽÛii.jqe µîR›^ÿBô®[‹³xÌŒx­E‘2+Œ-ç`,-+ HÓ¦ö:Ï%ׇ8ë=œX•ŠŒ dº§ä§KZƒ…RRJˆ²­m”9/H3ñù‡ñL´öAl6Û‹j%Õ!%ÐMÔÒÁçîì `ø¿-™SáèSq¡  ))ÀIƒ¹{w GKôŸ1èïá²/0ÕÓÖc#z•)*]ÈEÓ¤ ‚9ÕnjbߥLÖ‰¿ÃÙfÛaDiÝû!liv( NÅr WÇŒÌÇâ½ \VÑ©Æ%­0ã=‚•( Z‚¹v}.zœ—çñÙw1èÅÍ›( L¨©*Ö­W@ÍHI$šþ/Šò™ 'l>Ĩ+³ÊêO ïÀiJJn”¤›ª×Ø.Êç7ˆK!C†òáíe¢’„è BB”omZz]¦äßfÊÁ„⬎fæ¸ÄÌpB´–e %Ò²@ßÂÓôÅWO¥ øß4xw,%4´§vZ: U¤ßPB¶éX;.ÎcB–ØÜ„ø1¦’üc!´ºc¾]l¨\¡c™CЃŽÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)þp¯­Þ ÒŸç úÝêí)ü½a_[½@sÅY‰æ{ájS-“pã€%¶ÐTt (&ö'šˆ¬‹L´¡éçD“Ž‘–帉zÒä¥Ô-·…§a Ò«¤‹(A“|EŽw,pÉnG[K&Cš÷­îÒ6Z¤­7¢tØÖ«­ÞÆÜ”—"´Ögx¬±Ë4܆ ¼Ô'P•&C]7ZÂBl— 'ÂäØ4íæ§ù[i_¹b5\´Ú”tÍ{®’jM$èè»K¦TM¬ŒñS§§%rzôŒk±ÒûæK+‹mN:Ñ@ mZ‘¥{Ë+PÓ}µ¶§kØÞV|úo¦¼Ú§ñ`ðΘäJGÊ5*[‘#°µ–^r;Êß¡L„©D£{ªÖRHÙ·P¯:_P³ÞK~6Ò§u5Ùà–9*:Ðó£ªX¨áŽ8p9“˜‹&Æ!Èò:]Õ +)u¦ôïœ ÞY)gRwš¬v¦ÀêMö½å¥wÉodž:«F¹xe^Š3ºYJÛ¸šÒ³äø.¹pýŒˆÎq´Iœ[±zCí%Ô¼âGIûаÚÉå<ÃmvTÛ·Ø]¿nw#JC:¼r® «¦‹™-73¥¥¶¥(4—í¾)%+%"É.j6#¤@°¸¹¯3}õ¼ÊøqÇî1³´S‚”¦¢›k'•+’}'® Æðë1äeÒó,IZXmM—^=eÂÛ-©J+ZŽ”éIMùH¸¾ÍÞúÞÚ1”ÓñtuU·V’IbÌ,íezN0iÓ³ž¥›ä7ÌñT,Øjtw’óÍ!íÙx$§Zô’]±RO…¤•ëBÖ¨)pm®|Zθsè9%ƒk1V¸›¼#¹éÆ`4µ¡D¸Oµ©IQÔ§R€:$ܬ}]•žºöª-§-T¦\UqÏÑS;VÝÙiŽc×ò˜Æ#H•¾ß·[·“Òµ,ƒw”›ôÔŸ±Zw;¥bÚ›U­=&ÇbqiI5\«ÉÓÖšì ñ\qˆÍÄÎd±9#…”¨]i/‚™+h´—Õœ6BTáN¥xZIMʼnô6±WÜRtÔ«UxåjqIÑø²ç0íÀ‰ÄØilN’‡–`%O8JÜ%QÀ%.¤žŠ¬l •ݹ-_̾ÜÏK}ô»Û5q{Þ‰q‹æ¸Ó†y‰â\^_+$Ðq¦ak2C‹ZŠRÞ¢H(ZðÉÜ®ŠUðù¨yòXC¸Æ‚´-Å‹·Òn‡6éUÅî-J„ñ³‚ÜerjÜ”ÞQX·ÔAñ'â8g13%©’QŽ »’·\ ‡ÝS-;!AË¥+Rze)IR¬‘zò·?RÛmï[³vj3¼é¼äþÝ;žUhGpøîyT¡Ãã¹åP„wŽç•@Ü>;žUhGpøîyT¡Ãã¹åP„wŽç•@Ü>;žU^ãn>áØÙé¸Yi’¾ªU^é‚ T¦ÀRR­C˜òÑ‹ô•Ãr •=ü´å*0‚ –ÑŽ]î÷~¸íå¡\.kÑŽKó±Ð2zBÓ’ä%Ù/è_„:¥¯TA¹ç®]¾Ò͉9ÛŠ‹fNMæIc8ã± ‚ÆE¶´¶‚‚ÚÜZZ–Ÿ Åmºˆ¿-¬ ¬–ÚÒ½;ê)\¸Û”–›z{{¸`5:S€“gÁQæ¹=¡“:¦Ôðêí°ÂÝq¤©@”¡O,¤÷¸Ý^l´h«ÓZÓ…r¯Xê?¤ ‹)ù‘Øž‰F™ ܨ…€âpŠZ­Ü½¹+Ÿük^j»¥kŠiKŠRÅ®Ó\|*‹'‰Ã¼wÀïÊëÎÆž©m8‡÷* AbúBs¢ž’µ%;sª÷­ŽÔÔÚñ,ãO²:#¸œc¡?G_OO³˜Ïz:ÎOg%=œ¢¤°„¶Ö–€@Ð!Z «eÁ<‡h±Û[ kuvÔ\a',éÄ}3x|†¥È‘ë ¥(BÐÚÓÑI¸CšNݼ—®-ÖÆÆê:nÇRë~ƺ{x˜«óQQOÛï¥}Hë+Æü œÝ ¤\„„2T¦Ñ»qÔ±¤¨„:M‰žK›rÖËû[7¢£r*Id˜µ¸¹jº*%/Œø&l˜ÒŸj{DorÁz*$X­ W³ÝJC‹B•ê’¢ÂoéÚ¾¡ *JµÇWB\è4KÄêtxË€Æ+2 ©pXz{°‚‚Ö”¡! ”l•ªýÅzUqTI$¸*eD[ŽL‡~o£)+‚Ýc,p ¼‡ßi(Òì­ *Rt+Z’åìî’’¤ôobAÐ⚣U;7{Ë»«že×YQ.Œ¾Ý®¯ˆû Ä~ޏ‡ÿv±Q²,c@PYË©iX:õm)Д§ù  ßfãµ58æºI»ÝÝÝIJë«IG£ÕÞú[mæ=ƒÇ\!rT…e^DÂ¥Èeö¶Ô㇤» ;T6ksU•ȵEÇøSǽ³MËÓ¹MrrÒ”Ux%’żŠÈÈÉc˜ÉF2ÙKâ%¢¨®”*èqM­jÄ‚Q¨Zé67²mª¦ºDãÇåÕ™€ÖN4‡Xê²YCj1ÞBU©µ-µ-C[wPB“k%Dm²¤cŒð6,¸¸Q&¡÷€HTr·œ R”·²¥•«MÎÊÉ\Ÿ—z›ŒkDÝi\ûÍ÷ïÊõÇ9R®™$²TX,"úCàØjul±?xó‹yn-‚âõ:n ¥’ÜHØ+Õ*&éZæ[×åu§*xb£‚K–Y¾y³–8û¢Ï•“ [y ¡ •!1@[¿ç]`­ÅIÉ,^gmB2rIVY³Ñé‚S)éÈ‹53d#vô¦¤X m]¹…U©j¦%Và¤ä–/ˆþw¤ÞÉKv\Ƹ„—±h®3R\j(e ¡ Rõdž+u‰ù7UÄ”šá%ª=93£_ƒEu¯âʔ՞ž4ʸüAÅþޏ“.îc!$_{B_i!ä4ûLº^i¹(C©Cémd©!Ô¨\žé®+Û[7®FäáNÛn-¥X×==*M*!æ}ñlØy#ÄKÈM€- å¶ò WZ\è†Þ@¾¤¥W#”åt4*²0qN¬²=â|×¢®3\Wx§ +&ä âb©Ö\F€ñIp{ȸQBn~J’Œeš­‹[‹¶«¢N:•U]™®G|CÄ>Ž8©Øïfâdž\T-¦Kiv=õ·‰;§RHV‘pvl®}ÆÒÕúy‘R¦Uééë:¶ŸQ¿µMY–Š´ÛYºd«ðñqÉñ©1ÒO AˆÄ&Ÿ¸ŒÚh*8$!´„¤¨r])QPâ»s\ܨ•]h•b๠|éð¿¹Îü›úuMaó§Âþç;òoéÐΟ ûœïÉ¿§@:|/îs¿&þ|éð¿¹Îü›útó§Âþç;òoéÐΟ ûœïÉ¿§@:|/îs¿&þ|éð¿¹Îü›útó§Âþç;òoéÐ_¾˜þÆýàê3û^ï­nmZ´[NóW…³’€¬ñ¯-ÅÙééÌã"'8:¼©·“¥)$„^×Bˆ­b3‰³„2H<„)ûÿúh@ù¥Î“n¿ÿlÿÀÐÍ6sã;9zOü |ÓgG,ø>3ÿ@4ÙÞNЃ¶àh>ió@ñŸøù§ÍüaÆàhæŸ7ñ„ÿ š|߯ió@ñŸø±è‹ˆT5&d2“ÈGX#ûßš"(Þ p÷|ºÿîtÛéî(P½ÍBÝ{5=¶±í4§¸‰qN]6·¶¶„Û–ûhð83ƒ²M´üL¦MQŸxÅnB¢4_J7…²¥$ “}µÈ;zu*kZ£^+¥r$Ú„ôIÒ]p#Ñ¿ ;Lo:úâôõbß-¼ m˲°(«ž‹¸q¤]ËËCc•e,[iìšÇ=ðÓ(q×s2›mTêÔ#„ R¢NÁ¶€í>а HZr“•R † íßšŒÆs}íšù¨Á|g7ÞÙ šŒÆs}íšù¨Á|g7ÞÙ šŒÆs}íšù¨Á|g7ÞÙ šŒÆs}íšù¨Á|g7ÞÙ šŒÆs}íšù¨Á|g7ÞÙ šŒÆs}íšù¨Á|g7ÞÙ šŒÆs}íšTz!­!c)-)Q!:„tÞÜ»  Kô{ÁX÷b±âqDáxLÉ~.>5hö4-aKº¶ "€UßF|&×ø…mH!²#­È‰xïÒ¥¶7eZ®´¡E"ÛBOpОA„DÊäñí)¨3ˆÚ×mjK ) U¶\Ûš„ÐýÖKæ«}ÖìÝöž­¸s~·Ë½ßhð¹·<œô)%á<ÌŽ'âܶ*lø³'dŠª*"à¨7¾Kô•‡ Г³b’'¢£[­Í8JÕÖݧâÓ&æ––zx5ÑV/%qF2Æ1®¬ßJj«—­`?—Á³¦=¿íw¢Ý-®ÓOîÀm´£I³‰öéŹ-Z@²øFKŒ¶ÊóTÚú”‚Ó¥6|Ñéj¾Íº”¡´Ø&€xÿ:äè’ÚÉÌm¨«mA’—¤´•¤ #‘`\¤ÞÛnvÐ Áó‘èÈÎËen¥¤ïÙmࡹt»Èµ¬XßIµ¶P '…¥¢ ÆUõ©””)Å· êJŸC×È,¡§JUÍzÒ\“¥{˜¿&€óxœ·7°Ò«ôm}–¾ËŠÖ=jüE÷¨Xõ«ñÞ  c¸¿}ê?*¼ûò¢§û-bÐÉncGyo:£«ÚÜJÒåçmt6W‡æÏâVóm(o«% SÓR´´Ã¥¶IÜ­GUԛР1€Ì+sœLþQã„›JÃ(È,ÇSˆaô/Fõ[³¬iÓkh Vµ.\7 ÙÐeã²ñ,2–YÒñaÅ¥RK‰PS«LZ§ºvE“Δ‘œd•½-U×ÞxÊŸ ®Q䌛m·ñgÇÒñ¢à²Èô™ε‰áy!-S[ ZPn.Ràä°Ú6Ø};àbuó!áÛø.'JÔ&5r¿&»äüXqÞ„ÞÅ´â!ãe6ãÌug^Z¥$‚d’êv} í ,pg°Ól7!¶’–Ð7±Å’`6,A@wû£Äÿ~cá(÷G‰þ.>üÇÂPîü\}ù„ Ý'ø¸ûó @º€?txŸâãïÌ|%~èñ?ÅÇߘøJýÑâ‹¿1ð”û£Äÿ~cá(÷G‰þ.>üÇÂPîü\}ù„ Ý'ø¸ûó @º€a–ôÅ™A ( &Ë€C–Ó;Ò¢—tº5'gƒ@0Ìú2ÏÎJ$ÊK‘cÅŠ†Ðb-*j3ª ÔV±Ò'Úìm² +y.áüÇž*w"{w‡PŒQK,£q©lØ£J·‰y+R¶ØéÒSeCšùIÄâ³µ4:Ò¿ƒ?Œ~›B–ž$Åå²IJÅ啊SŠp¤¡ZÒ·|8{$€T“j"±F;‰!d×+'Ÿ ‰¡†ÈY7Ps˜íÿ‚-ú{£ßòè~žè÷Ƽºß§º=ñ¯.€7éî|kË  ú{£ßò賚‘"ÓGU’¢TËáHPJ’ãjCX $‚\”MîãS©Fâõ6€„º¶ÙSÚ@ Ú°è$‘rO-ùꃷ0|díØ{ˆÒì'Û(}¿cB«’…ê²…‘mCO-Éås3K£1—íR¤ 4¢˜ìi)Rʰ6‚‘nm5/¿Ot{ã^]oÓÝø×—@(‡BÙ–‘æîz´+¹Ì•@l‘d5 ×M‘ºe?Ê >ÍRƒÒc>¾¬êp°±$éØAä7± ©ä%jE”T”…”“°›O¥@{½¶•r‘àžazÍèÙÑVÝ>¤ú¯øÛ@äÚúWÈO€®cnåîð^ÚUÊG‚m°^€ð: º*Û§ÔŸUÿh¾‘·Jùù£àÿ'Ô =Þ ÛJ¹mà›r^€ó|›_JùðO9·r€ É:W³W"I𓟛»@{½¶•ràžqzÍòm}+ä¿‚o´Û¹@{½µ\ãÁ>§þ6P’mÑ^Ý<©#ÂþO«@äÚúWÉßa·r€÷z/m*å#Á<Âô¨PZuGÐP ýC@3ÌÿtOü߸4(¨±V­âÙmK'QQH$“¶÷µB>æ~Qñø¬ßíMÒ„4¯àÏã¦Ð¦ƒ‡áYyÌŸMÅâq3ç5Ä[[™xÌ>ÙPƒŽS)Y[Jt  íƒkM– NËÑ2YÅ D—ðˆ[2RÓ,¹¤c†Õ¼q*N»]zCz€6ð…R<Á¦÷ü-‡iÀ˜´ê¶Û]¾KÐþàp'ù_ùoƒ Üÿ+â? ðtûÀŸå|Gä¾€?p8ü¯ˆü‚7ÁÐ÷pÆ)Þ7Åàñؘ=Y2Ä€cGêÉwþÜ•%µ¶¦‚È*Ò¥ GnËоø”6ÊáŽ%·P\pÀcxãXP݄뽭§JOóEÔîâF[‘ø?„Õ% »M7 —Òè«x‘õˆäO%ÔÜ1ÀQ‰’8³…8q6 Å0 °n •p­Mó'Oòß—–€°þàp'ù_ùoƒ Üÿ+â? ðt7p· a°r¦að°1òÊKfDH¬°æ…r§SiÆÜ”Ç·þâßÜ ΄^úEÇ!·òÐ $Jb ™6RÃq£GKÏ8yÛ{Å(Ÿ¤I4•Y²Õ¹\š„U\šK­•~ã™ÙiñàçðªÁ+,Âæðñqàñ•»„n_JT‡ &çI;z*·ÓJQÓ«ó^ÇÈú¨ýÝ‹r‹¾w–ÔnÒ4Ó'•1z¡T㯠WïF·Jí>hMVß7É{*×½ù¹9¨(€MÛ]»Ûýùly-@)@oÛr»ÚÖÛªà-¶Ð PP ±mÃvµ´‹i¹œ×Û@)@lÛ§kxj½¯õï@5ÌÿtOü߸45P‡ÎùŸ”|Aþ+7ûS@4¡ +ø3øÇé´)«ð¯ #‰äñq3ßǹŠd¸Û±¬%xøžO×ÄÚÇh#&Yšôbó.©Öø¯4›a ’ á$©e$TIÛz¤‘èåé‡n#ȳ&,DÁ\Ö—¢SÈ 'SŽƒu(lÒy¶·ØCÑ›ÉÈIžž+Í$Hw|#¦RƒHP)Ù}¤$urÐê  2âœiŸÇ‘Tú·8î¡2<‰d%HBÝêêm*J¼ ­)<é¸<´Nðf-m2Èã<‚Žêa°ñÐ‚Ú B¬ƒ«jSnâH :›Â±¤Ç[MñÆA/•ï}ÇTâ›_KjlSo »Î«ZéÒ¨Ü;Œb+ßâ©›rK‰˜CÄnS…(;4j*¶¤Ù@´´×·°þxßÕ ÞÃùãV€‚âüŒ,† DXO¡é ¶–Òv‡»jÌ|Ú‚ÃBK(u JE”Ki7¶ÛÞ€Q¼êUd»5”—RJJoq{^íÄÓYÉD8Öå!ÈùbǘãI#DPâ–ñW²b£g®­¢å=/£ÓúmØÙºî¶“„dã^2¥#ÜÝ{…1Üe}ÊWŠïz€7_r•â»Þ  ÆWÜ¥x®÷¨q•÷)^+½êÜe}ÊWŠïz€7_r•â»Þ  ÆWÜ¥x®÷¨q•÷)^+½êÜe}ÊWŠïz€7_r•â»Þ  ÆWÜ¥x®÷¨q•÷)^+½êÜe}ÊWŠïz€7_r•â»Þ  ÆWÜ¥x®÷¨q•÷)^+½êÜe}ÊWŠïz€7_r•â»Þ =²ç‘™gé!ÞõÐ…›"â4Â;»·»Õ*XØ™Dda®Ti}U2SúšyIÝ…‚«‹m½éTRøîr,܃(w˜P£OBÐól8îþ*RíÔâVÊôW/Ð¥P!1R¦!ÀæI3dèŠòµ¦b£8›6#ÆKe;ÂÞù*±ÚvR¨3¤qŽx Œº†\(ÝR|mÞí%¶Õàƒ«]έV芠„¡ +ø3øÇé´)¼ú+ûëŽÿÔÏþa ˆÉšRPPCÏ´ÛÜYŽeä%Æ—%°¶Ö’¡»;; [» ñt_yoÉ¡HÜÞ9¸·ø|IÒÂÂLe4Ú JîA ¥E*WóA¶ÛP Âb4§^>)]†¢l óÚàÐv&âè¾òß“@‰†øº/¼·äÐba¾.‹ï-ù4ؘo‹¢ûË~Mv&âè¾òß“@‰†øº/¼·äÐba¾.‹ï-ù4ؘo‹¢ûË~Mv&âè¾òß“@‰†øº/¼·äÐba¾.‹ï-ù4ؘo‹¢ûË~Mv&âè¾òß“@‰†øº/¼·äÐba¾.‹ï-ù4ؘo‹¢ûË~Mv&âè¾òß“@‰†øº/¼·äÐba¾.‹ï-ù4eé„G•¸!üvì²ê€C)zÈtÜ Iº P$ Ûm|#éƒý"Ëãn-L‹¥ß†æÛ–í¹ùR¤°ð­8§Oz¹¡F=zL1âõÎ ãÁ-,è–#õ€Ùp´RVo(ê éDý/_~÷[ZºNÍ;>ãà´Ë˜†CÑ¥F‘Ù\!鹩ÝõA(-ÆUg¯y¡hU´j°M¶Ûh¬£»ÚUj•šr Ó.cÏšOH}u§Á~:¡YT†šß%|¸TIQ:u/`Ó}º«_ù[Z{ÖkÙ÷ /™¢ðï gx[Ñfz>oŸÄªFo¸ÈâeHuy T×óA6?É_!õë–ç8hpx:èÈè¶šX+憕üücôÚÞ}ýõÇêgÿ0…DdÍ©€(€(€£fþXbÿ oû#Bga8ÚD™ k6ÚTõȈ–Ágw QÐÒYZt/Z’°§Ô'mÇF…9‰‚ãväJrNy.0ãQÛtRŒ¢ ÛçKo"Ù}Ý  yOÎ{ˆ‘ŒfR£EV=çˆm ©[ââJî´«À9;· $I[À¾¾ñHq -èfÅ)F’‹îïe™Û{ò6P ˆwa© ¬6”o4G¹RW¨®Û«]C E­n@ÚˆÓžlBƒ†Ë*4ü”µ´—že—RË yd#@Ô[Ke-ÜøJéêä­7e,slô¶6­79ÝMÆ­m¨ÅW†.¯’<áòÙl Ù,‹Ç$ d[êíÇOYˆTÌ„†ÖÞ´¥Å¤«nÛ[IÖVåª5yûM;Ë*Õ××Nq®zd«Ó<É)m;Ò¦f^fÐuÆ•4ûq)ØÚ”:]Õ •®ÝØÜˇg¬ëÞl/mZ󼪚jQ}4”[‹§\8$GÈ2ì$§%!I[Ì¡ÛGeÀ¤´ÚÔ½E(°éRù¼é½m8Ì…²‘“|(¡Äèp¥¯RWíVº@lµ¹A;h:¬á_^wFñKÝéfÚJ4„_w{Ó÷¿=¶P¦°”ƒ‘}D% TPÅÉlÝdÙ¾WÅw=Nš¬hÙœ…ääéC®6É1ÙoB]m¥¤¥E²Ý’­*äÚR ¢›Ð:¬æ¾¼îâW»ÒÍ´„i(¾îö'§{ÞüöÙ@p Ì 97Ê‚A^ˆ÷*Bõ)~Õk¬tNË[¶€o’c Ì)OGÉHK©D…7»ŽÔ…$º=Ka¯uêú^«U–997æä“"d´³cHŽŽÃHq”DeJ ¨µ­EKè¨,¦Á;@wÔ'nôv¬{°æî=õê×mÕ®GBÖµ¹¯¶€ìÖTT2/Tê‚B°&ÉNÖïfÏI<çÕ\PÇDÖr…§f="2£ †Üa l8ƒ¥K!)é/” ý1a²€“ 39þÿ?Ô·öUBn_ý²H^8WÒØâa“Œtâz–ÿyÙ2w¶ßoÑmzmígOѯ³úoÿ©¹³úeí‚·FöªÉ·Uª)eN4N”ԫ‘®å=¿)2—‹â\Ž)ùKx¨E^å$>]R÷mjy!D%ÕÜ&÷Çã‚wÂ.`²Ò²)Íä&Å‚”c¦<^a¢tt‘«¥~‡9õF€³Pûšù!ðÈ¿ž1B4Ô!¥ý6…7ŸE}qßú™ÿÌ!Q3Cª@     (Ù¿–¿Â›þÈÐ…æ… ©”£ÅÍö9ŠØò¾ûgÞ·¸ö²:¯¼çµ´Ð`qWXN¥cú¯Xg]’þóªî=šÛm¼ßxÚ9vÐ À㎮KÄõ¾®Ö¢'wÖ·þËn•÷{ŸŸ_.Ê:B8¥þ%h'³”ä8ÙR’ýÜ•!0¯exd´½ñäÓàÖ§G5ÉñrŽÚ]’þTþdG𢸊4§`2¼VæI’Qer^ iÆË·JpêQ²•6¥s/¥¶‘¢“]¿nâÞRˆMåûĿ«á9ÏFãlÔÌnnbŽí“”È·º’¨î=HÛY*¸mWK–ðŠ›>¦°¸µÉG†oÙéõ)½½«—×¼ÿ·\S—½%Õ Çýi‹q$n1ÆÎ[Œb—a­ö%ÃŽ—‹òq - :¬·˜sS¶©Ô„X®—V—­*µŸ5û3_´»«Ñ{[’QŒc)eÓ¥?v\2“÷Hi¼w˜Êœ<^“…Îf¦½«¥—%%ˆ‡r÷^zPJ®›Ë.Yj7jMÓƒÜ)*[ñ7èæú=gD~rÄœ·‰Ù·ëïO÷mð“1KÄÞI¾GzHeµÏgŠx‰m:¥:ðuÜi¤WJRÁhz×È»rÕbKn¾Žï³æa/ªZ’Ðööü¾ªŸ'æfßZÓû¢‰â/JñärøJ4‡ºÃ2aKA„¨¡€Qqõ´ê¾Ú¡¸W±ò]U<Û‹ y5ON>ƒ'°ÙKÇ ÊŒ:% ùTŠ”_^´º…QÓT´²û¹.Ŭ&9vPæÏʇXåHp÷vlm嬩uãT»+éª4y›V:.\ËÅ­C®‘Ó>T¬˜ÐMôÁ Ì‚ ãxs.þñä¼ëS¦ÄÓ(²ÉŽ\eÖžHE·ˆC¦÷rš®WW.Ú{¬ÆÝ­•ÊÖäíçDে T£O…"D;é†S¯”ÆáÌd}HƒŽÍžæØÖVˆÉðï¦ÇÁåÛJÝ|ïqtl Õeræ8Ò1‡†œ*çi”Óu·²’¶(Ëj‰Ýy¤»_o9ÛØFºgrXJŸÛŒqü?öKý^:ý'£+›8ö8]ïü‹=¬îM‡KÝJ0UÊÚq%{½Ö’§Méj5[»Ð½?qŒc±yÊâÅ~¼)âüKYrÏÜÌÇ¥¬TTKÉÁáÁ;¦åHbTÕî”ãÁ*{BØEÛJÔëÕ~•ÈèÔ•ÉÇ•:ÿa²ÖÓm{Ãns×¥´œ—᪛ÍdéïaÌ´,q†ñ{µcw;É[½IVëv:¥ì«j öîm>ÚèLc¾Ñ_vª   0ÿ÷5òB'á‘i¨CJþ þ1úm o>Šþúã¿õ3ÿ˜B¢2f‡T@@@Q³,1…7ý‘¡y />üƒ.ÜxnÎ++ZÌMÁl²•„¤µu»§U­°í4)+„øõ¥‘‡â•6’”¤®`TŸ%*²l6»§QV¯c7 ÷ $[ÆÏoŒlæfSÚñO%mÄO 'C ÚžQªã»zÈ"Iõ÷ŠBвޖt”¡J=®öQé·¿!e˜06Ú’JƒiFóDmEI^¢¿i¶¥ÙkrvÐP¢É{ˆs.'#$ÐËŒ$­.8”¤nϵoB’NÓ~–¡Z£ï¾Ãм©·¶º\ß©´Œ—%oĪ‘:I…hù6÷¤L08Bc4u{*qÀØ'N­ä¬.øZ2Ï©›¶)^„ì9iÕIF­(ëpmà«$›§‹N4álvRr'qɳ#HËéLFÞe†ä5 •{q g¢âRÊ:ìS¬K5u›ü^®i—ÔœmèÛÅ©+KÄÓªsxÊf–OŽšÖ”,¦¢²¡|$­Å±`•§JSíW²I;o‘²º`æ5ø¯Dêòää–•#tˆh (mÂâ»@éðôôµX§H½D’3”å*U·Aéƒ, £´ä-z#Ü)kÔ•ûM®ÐNË[”¶©€§U‘¼+ëÏiÞ){½,éÒQ¤#Ú落Û{ò›l 8L)A)"úˆK@¨¦=ÉlÝDÙ®W9Üõ:h±aÎS¹¬Œ° ®%¥,D h¤¶ÕÀlÜ$9´›êÔ4Ðz¬à_^{Nð/w¥:B4”{]ô“Ó;o~{l e„œœ‚ „ ¯D{•!z”¿iµÖ:*ÙkrvÐ ²‘'”ÎB^óD‚„°"¥À]‚ëZnרÕËêõP pìL^C7®| äYÒ…¿JJ>¤¥ oSZ•©Mž–«­6JÀ Éá%dq31«É¾¡*+‘T¥¢>Òá7Y.AÐy­Í«ma8ê‹]&ý½×jìf¿ O¹‰àL¬ž‘9Щ,o–Þ–¡O6‹îÔ}‰W¶Òoá –åª)ò6ïlù7ç†MvWÜv%³–;ÙRd0b ¹ÕÃ!Ä*ÅVm sZùO¨î[2N€ÌxçûüÿRßÙU\x3äÆ;í÷j¡IÚ  ÿs_$"~óÆ(Cæš„4¯àÏã¦Ð¦óè¯ï®;ÿS?ù„*#&huH@@7òÃøSټС@A«å“áŽ~pŠr€(Œ½ËÉR‚ºÄ÷ HHOE–Ûb×¶-¦µ[âùþÃÐÞ5Kqø`½.Rÿpã”§(JR‰m•FHÚy^Ôý#[O<@‚R_Æ•%$‰WIS*tƒ¸t]*Oµ›zµl·G•B€}@@2‚$äŠRL”•´¦‰=]‘u(ìpÛÕ§e¬žTšíP 3IJ±3´¥H-+R\eRPE¹ÚFտЮ FCˆ¤)y©%QP¡Ô¢‹¥ÀîËo!¿útÍê=œ¦MõG“)ƒp!¹„ò¦ÆµZ÷{_¬ô7ëûµø£ßíÒŽÛ Ò}T[•k¶ó“}àÛùœ¼õ´óÉ 1ãŸïóýKeT!qàÏ“ï´Wݪ…'h€( ?ýÍ|‰ød_Ï¡šjÒ¿ƒ?Œ~›B›Ï¢¿¾¸ïýLÿ樌™¡Õ PPPlßË _áMÿdhAÌì'ÈrB¢eÛŠÊòHgSŽ Ã!e ²T¢JuFÁËqH¨ü!é o d¸¬»ô\ÂØq(ݲ›$ AHZõ“´ò¦ÊP %ÛÆÍoŒl¼Ä·µâžJJÑh*}):#§jyF«Žè4Dן) BôicIJQ¤£Ú¯¥G¦vÞü„ ”b­ØGjI*J7šcj*JõûMµ(tÍ6ä[h΋-ìoY3¤4dÈœøF˜ÝÉye±íJö±b¿o«’µZÆ5ëõûå¦îš×JŠîŠÂD|ãb,džqm[fRT);ÒÈ*ª<·ðt•´àu {½©'V‚æ˜Úµê×íÔC“M¹µm 0ä• ƒà¸ €–,Ó¥)ö«Ù¤·¿„T6P &ĉÍY7þùhYN0νÓëRϲoyV–ð‘§MôÁ”PSÚRBŠ€½1µ-z‚ý¦×@è§e­Ê Û@wÕ_ÞkëÏéÖ¥îô³§IFj¾zcn«ò;(D)! Œ…E1îKfê&Ìò¹È¿þºhPâHSù4§$þ­úÓt¸Ã¥%ÖRIJ™³e±à#ŽšµPú«ûÍ}yý:Â÷zYÓ¤#IGµ_I=3·Uùôì 8eö”’ „ ¬¦6¢¤/Q_´Úëlµ¹;h9¸’*rŽMöÓºuŒ”‡GGÙƒ$£uêãj à"žÕâ55‘Ô¤åYSí²°êµ#<—µ,¬¥“m:T*P &:„½ÞŽÔ“«@FóLmZ‚õkö‹j#¡É¦Üڶиˆ’:æi¡5æŠ'º½(È)‘•#fè‘ žö“ájª˯؎ýÒðZu­aꔕqÙqœáL\‚¨h·]lè]ŠÃ ¶Ó;T²yv$[NZ€ÌxçûüÿRßÙU\x3äÆ;í÷j¡IÚ  ÿs_$"~óÆ(Cæš„4¯àÏã¦Ð¦óè¯ï®;ÿS?ù„*#&huH@@7òÃøSټС@A«å“áŽ~pŠr€¦ÉáÜ~c'Èd¦åd!´7+„ÊD8î!¤ ªQ&ÜûkÚÿ:{{6Ôc bÛÕnÜŸ¿.2‹| co\©[§® ÑöÌ&9×%æÐ㱚qÄ'=–-h VÄKÓÊ}NÊÑgê·•¸­6²_ôÚù½ôù1~ô¸¾‘LW£¼8ÇÇÍâæž9”mËÜøIj^~Ö·~¯{áµù6¾C‹Ë\ûØóæóçÙÏÛùÖéú½ï†×äÚù–¹÷°ù¼Áùösöþcõº~¯{áµù6¾Aå®}ìi7ÑÞ½DÞ )û&ï9”P Ý9á•˺S{mGJö„Óõ{ß ¯Éµò-sïcÓèû@I›²y?óÙpvý·¶§ê×¾_“käZçÞÎèç´”®np¤òŽßÌ~·U}bòü6¿&×È<µÏ½žüÞ`üû9û1úÝ?W½ðÚü›_ ò×>ö3èç §g¥Ù¼A»/§Fó;•JJw-xî¤ÞûW·UÇ‚Ö//Ãkòm|ƒË\ûØóæóçÙÏÛùÖéú½ï†×äÚù–¹÷°ù¼Áùösöþcõº~¯{áµù6¾Aå®}ìi•ôw‡8éA©¼@]Ý«@c9”qÛÛÔ¥Ùz ú ÙOÕï|6¿&×È<µÏ½ñ|‹\ÌÊ_Ä[¶æ%÷¼EZ7}U…{fPRQ¨«¢÷OV£àV+ê×—á·ù6¾Aå®}쑇€ÃÜE&d]n[2’ûS²Sg¶w{µ$„JyÔ¤ƒê’¬în¥¸±-q‚ÒãM6áÇŒb‚3 ¥9ü£Aw*b#Êl‘pT^Eû¶!¿­^}÷Ùí=;µ{{nœf¿¥ûG6sµA³›ž®vèou«_¯ðõ[›Á·Ñ­§ò€ÌxçûüÿRßÙU\x3äÆ;í÷j¡IÚ  ÿs_$"~óÆ(Cæš„4¯àÏã¦Ð¦óè¯ï®;ÿS?ù„*#&huH@@7òÃøSÙ³dãåt/øCVCKcPl™)­Óe·- %Ï«Èy…)ékv¶ÏGÞìSO6JJ‘ÕÅÅÁUÁ¾Ës’@šk–o‹ô»™uâ¼SÁLGN…)ä¡¥úNÛ”Eš 3–PBÊ7mØ¡(Ò¤_Mì¥tïÊ9Ê£6<Øøž1[Ùe£MЧÔÓƒ•Ø¢×P:-k} Öý류þ¹ŸNƒ–æ *½qö¤cæ6€ÛY¡´ïCi 5ÑJÒcÁÿ§mÞ{×:T9e'&Ûâ1ÁC”1‘ sÆän”Ìt´ÑK`…¥)q:Ò=#}£šÂ©ˆ÷¨äwz;QÍ{²æé›ë+Õ®Ú-pž…¹9ùh IÅeC °’·»jÁ+F”&úod<§Ÿe:±#]Èk)”Îät¬•4ÃÛÍ ²èåR¶$\&ÄŠñ…-”Œ“e /tÍÂÖ½I]´ÚèODCÊvÐ ³7…}yz7Š^ïvÝ´i¾›Ø+§~^nJ„Þr.(„² ·mm-›¬ø?õÃÜæµÆ9fFT7ÒµHp)M°”«[Œ0[RÊÓe©´Ù §¢S`«¨GªÌÞõåèÞ%{½ÛvФ¢úob®ùy¹(Ä,€l$äœ+m%{¦nV…êRí¦×Zz$rQ¶€c‡-X‰ûÌ…š-I¸z:^lG±êB©A®`6«žôXrK:¦äîÿòL­í½¢d«[ª¬ìöd[HHh{Y Ÿ #Û¸d£›Î¯-ÍÓ7ÖÚŠí¦×)è[“Ÿ–»­Ás®>Óš\,“|TNEÐ̸Oôwl'rêCcju]òAçõUæÙÖ½_ù=*§´çÿT{¿î4wYÏ?%20”êgC©Ð°wˆ:Vv” òl­§žLÐÿŸê[û*¡ |˜Ç}¢¾íT);@@aÿîkä„OÃ"þxÅ|ÓP†•üücôÚ½Eô±Ã^ó|OŠóvV]é’’¨ÒJV¦Yi!*i•&ÚIðŽÛý*"±ÿþÉp¿º«ò)ßTÿ²\/îªüŠwÀPþÉp¿º«ò)ß@û%Âþê¯È§|ì— ûª¿"ðÿ²\/îªüŠwÀP\=ÆØÞ;Ëã²ØÅ!©éaÛ´ó6XkVÀòNÃÍP R…¯–Mÿ†9ùÂ( Ê¡ u9ˆ«p6™Y¨ “¨¤”©¨%InR­Ûßø­.˜ÿòHô>šÚ»)%]1›þGOIo­'ž1Ã(«EED£j”ð”NÓÿTlWÓ PÊzˆˆÕ&ă7—MŠO¶}§üÞ¦€{@@2„¢ddAQ:d$^ØuvM‚GµòßGüÞª€{@ÊŠ1SRCJ!IxF#g3§b>Ûš€e‚[jÈñBÛR‘‘B\ Ê\¥%]F)²ÛX´uXƒºGD¤‡9\4Y”Xoêæ}ËuÝkþ qö˜¼ÑÖAÀÆwáPOX¡¥$ÛR–Ø~À[nÆ yrtœ{W·ØzV#«ou|:eéÓþáΣÛ!º©:7Â×ÞrîyçþJÜyãê1ãŸïóýKeT!qàÏ“ï´Wݪ…'h€( ?ýÍ|‰ød_Ï¡šjÒ¿ƒ?Œ~›B•¿H¿/8ðÕ}Â*æVj˜…PP¶z ö¶?Æù°¡M—'…ã¹LÏfa1–üÅ;B™ŠB†*ްz$$ ¶P×s{U)Žô¦Qs>Æït¤¥Y°xR»ª9$ѾÝ*ÛÓØ¡‹2¹žpïqO%¥:ÜVô¨¼€›6›”òØÜwk8ÂRÉT¥™>h8sI(!e»Ç±BQ¥H¾›ÙJé“Ë~M›+/&çÂûŒuǤ©ÅjLÎ&wÎYÇ‹rŒ×B#©?öð£4l‹jQ{HM­Ñ$XŠËvšòbóÒßóÏï=-²¦ÞíΗv¿ôG¾eÍPæ’¢2.€KÄ Û;¢Èý>T÷}UëAÀ2ÃBžœ|Mä÷ÁNè©·#GŽ¢-%´"ÉÞ‘·'©µï¨d7z;Qí{²æé‹ë+Õ®Û»\'¡nKmµöИ“ ʆAÐ’·»fÁ+F”¦ú/dç<÷9pç±÷œû HgQØpÓ.o Ž ;È¥'häM¯@:0§–ÊFM⇻báK^¤®Ú-t€„rÜí ê²÷…}yÍÅ/w¡«h(Ò}°WNü·ç¶Ê„Úr.¨„² ‹lí-›¬ìGýA±]ÏSjœHS÷Ù!Ú£SÎ(ÇŽØöFYФd ؤ)\»Ro¤Pú¬½æ¾¼æâW»ÐÕ´i(¾‹Ø«§~[ì½¶P ˆSƒa'&éXCh+ݱr¤/R—mºÇDŽ@9,vÐ 2ðçtÍŸQ-ÈÒÚ#±!^Ê=ŒÔ‹/wêAð½Uè±Q²F~X»2ZZDöKAö¢%·D6Ã%¤ê-­d•,°° ›#MÇ*̈ټ/YÌ©«Ç–ØyÄGG²]µkÚ€.Sз%¶Úûkб JÅÊ&ñ´Áæ3³˜axù}ºÛy¼b™ˆTfÅì66§mýUë‚훑£qy®ŽÓÒÙÇ^¸¬Ü%ü´Ÿª$œ\Ì­ÄO3š‚CLдªÊ;ÖÀV¥øZGœVR„£ï&Ž “u€39þÿ?Ô·öUB ù1ŽûE}Ú¨Rv€(€ÃÿÜ×ÉŸ†EüñŠù¦¡ +ø3øÇé´)[ô‹òóˆÿ WÜ"¡^ef©ˆPPPg Ïkcüa?› új©B€Ï8×ÑßzBâ¼|n3Ã3˜f=ça¥ò±»[¶F…' úUœnN>ä¥ᔣߥªûMõí«nݯÏjB€(€aÝõ¬¦Þ®´æ‚²­]YVÍV·³M¹ï@?  ?;»ìyÛÝÞër½{â°Ý­ê‹};}®Úž,§#Ä…¤²•«$‚ñf;¬-KêÝ[—¤$oèéÒ  åp˜\ãHc7Ž‹’a¥km©Œ7! ]­¨  -tXÜݰëjrƒ kÔGó+CÀ\ :T^Ä™šT†Òˆ‚”YöM"ÍßM­mµ·qõMä ëvã¦>ü³X®=+»éÐùY)=-ò—…ú÷ áLO9‡qøü{ïãÛ’ò °#ºã+uAµ+v”¶¤Ü*×é¥Z¯o.îó')Ó-Rn•ë9‰[U¥ZíYúËMsšÌÇŽ¿Ïõ-ý•P…ǃ>Lc¾Ñ_vª   0ÿ÷5òB'á‘i¨CJþ þ1úm Vý"ü¼â?ÃU÷¨W™Yªb@@Ùè6û¦m°öÂlyvõaB›Ü¤W’âcgXlª[kHö6¤¥ Níz$tu+hÕ¨“T§+ÀzC1Yg·\”´Bå%{«¼PÊGCp R•¡kåÔo§`&€yس\âR´ñcÆcPŠ 5¾–Üt(.ÛâÜ”¯cf?Ìs=âêôØÙóÏx…ú½˘¬£-­×x–[m6 –µ3)JR.I&=€€iˆÁgÆÅCœW.Z÷`õ”µ Ip+hP%…=Úïcf?Ìs=âêôØÙóÏx…ú½?”ë¸Øÿ½òc¾§”莦ᾄ2âT”¤0/b ®~JC±³æ9žñ õzìlÇùŽg¼Bý^€;1þc™ï¿W #ñ¸Ì›Ò2jk‹äKH•¤¶Ûp–X(e¤)¥ Á±Ô’«lð»´‡cf?Ìs=âêôØÙóÏx…ú½Ã5‡ËŒL»ñt˜l¤Lu¸M¡²­E[„ÛiîÐ Æá¬´W¥¼ž(É8f<ZL7Ù 6Ö–’cÙ³aZFÍEJåQ v6cüÇ3Þ!~¯@xp¹rrxk×¹õòèç'†½{ŸQ¿.€g ¸?ìÇã©ýôçºÄ•­IYRô„ jpؤóç'†½{ŸQ¿.€>rxk×¹õòèü×ð7ãÄæ\˜)ÆIJ.¦Ô’ I(,h œžõî}FüºùÉá¯^çÔoË œžõî}Füº‹ò€o×£{¢=ñ¯.€Íb#å¦ ñò®ãfʈŠëIU”¢ ¢w‚úI¸e”,+‘Õ)RøŠ\á&1Šyæ·m©IJK©Nôôö·“nåæN*4Ü;xUeÞŠ”#G^aƺÁ¶›xN(t´ôû·<”s8Z^K’È8ìg\qn²†¡©ÀÐRR°ùÒ,ß%¶j倲{õnx‰øJ—¤êuå!7¶¥$\ý7(žÈB(iy+Ðu´ŸßÝ ˆJÐGp¸×—@T¦:gÄÓ!Æ@y;†kG³mIHÞôKgjmÏËzjqäÏ•9ØÍä—JËêpêÝ.z‹‚‘}”’á„åW)ÕÎv!”Âã´ØQ [©t(ònAFÁnsËzƒ^ã²ÂŒ´‡$ ¦Ò^a.8Pƒ¨…úIR””©J¿.­ƒY < èïeßB_õj@Bw„ “c&çjÕ¤ €Z÷ÞÌÌ{E«ÌÕ»Ósì@6î8ÛPª|e-J&Ä“ísŸ· "óQ˜Ì3¤d\€¨ï¦@z3Í%ÅiBÑ¢áÀ@:öÐx®ÈE‘×SÄ™hT¦äº‚¶ô8Z)µYÒ4¯f±õ,6:ýÌ–ÊÓÙù©ðcï_uQ™S{²$ 7€ jM¹ÎÛ‹‚¾; &4cžŸ.[·Y J߸^«‹­@,³›mèÑÀ‘ú³ÝËJ‘¤ÜSí!Ç\»«^øXÙFÅFü¢€³—à2wFFï@ : ƒk·ä <ëxÿ;U¿… =^B XSh|-JZUµM$¡î‡»@!×£zôûã^]¿²^Û¥_’×EïãP ¸ÏöO*¾«—8§ݯxÒ¬¥­ :”¥BÊ Zе$òÚÕ“+¯ax™Å©Hã’è[-†‚F„“±E-Ü“q~j¤¡e†CQYjdö’„%.¼I P*¶—  ¶ò/3ã+É  o"ùÓ>2¼š ò/3ã+É  o"ùÓ>2¼š ò/3ã+É  o"ùÓ>2¼š ò/3ã+É  o"ùÓ>2¼š ò/3ã+É  o"ùÓ>2¼š ò/3ã+É  o"ùÓ>2¼š ò/3ã+É ¡ŸmS±ñ¢ãòi‹!¹åºÙwÀÑ¦Ý 7!D,$ôN›+e*(Wñ˜¾"‹1/d¸¤ÎŒåÄÆw[­i-­ǤÙIUÓëiQBsÚ™‰y.CkÞ?)Û§Q(P$ X GbG  ¡)¼‹çLøÊòh(ȾtÏŒ¯&‚¼‹çLøÊòh(z丈a ‰Z‚Ö££Q°! s} ¹¶Þȳ¼vK¨ºÓ»Å:7žíi@V•)+Ò¾Š­cAB#‹âH©ÉÜP'4ën%ö–Ñ@+[e(R4£J¬®…¯JЏä)–!±.zd¿«})ÍI+º uA±$ò ƒ›e =ä_:gÆW“A@ÞEó¦|ey4 ä_:gÆW“AC×eÄK-6BÔ’²t\«M¹¾…LëRr1’Þ+,q’F _J ƒJ†Î‰°¸PMrãž‚ƒ%ã²NDÆ!Yå'!nªL´!.ÜÙMø/atì ¨(%…ÄÌHŒîS‰Ñ-†¡!†ã! òì •h%6ºnÜú4eq“2+[ØüÒ1×Q³eNOFË!Ú-ü¼‡e°é¸ÕÈ^S<Ôô<†C,]Í,)²æ½ ]Ô ­Iðº[,I ¡5¼‹çLøÊòh(t•Ç I2Z° ò«É¥E×\‡×5ï¿êo/¥Ztk¿…n[mµ*(Ï‘ö×~Ýtk#š                                 Ê(R–yOÓ?fº–G‰sÞaTÖÿÙfox-1.6.49/doc/screenshots/iims3.png0000644000175000017500000015520411637250333014201 00000000000000‰PNG  IHDRÄgÞ1 T IDATxœìÝ|S×}?þוäüJ 8qZj" '¡íÌ]Œ¤:tvéÂhLÃH|[Û…Æt)n1t«ã}Ü­Ø,N³Ø”ÌöV £Å-#+Å ñ$7ÆÙ”®¥A! Ú(1 !üòé~ÿ8÷^]IW?,ÿe¿ž‡HG÷ž{tuî[ï{î½Ò¶µšÌf³É$™L’Ùôÿz·I’€<f Bj:ÌÒ̰˜1è…Å,™Í²WÆ &L€O™ƒ&Q‚™Ý¢IOêOt ˆ&7Y¿+4Þ€WûÄÿúTô"Õý&¤ZÐ`Ä€)2`X0 £ïoÿ•$K€ ’d²˜Mf²Oþû«ßúñOHÓ¦LO7¥¥À3,é˜*é˜â³LáfŸ/ìKD46"ôP"Ü%\ÐÞÐçƒwf‹ÿßpn—\í€+×ñá՜ÿáêµO|° €X$dYþ‡kUÒ¬Z¦NLñ¦˜$}·–Ž›^¤ ¢HíC¿ˆï Õ¢TݾDDDDD 1¨f¢-fÿÓÁ[jazpk„ÏâÚ×ðjŸ:£d–Òþäþ>Ïßõ¼´ð'Xù<‹Û?"ßø` Ý„>ô ¼/f7¥X$“RŠ%ÅÒ'ËfÙÀb’ûd9M’ˆBQ M’d/$IÓbDD4©ùúåD7hR3¥J¾~YN“ͲÉ+ùI7½Ò€,™àõú,²ìÅ€)^ BJ1e/$5ÐôÁb‚lÁ[Êàg‹ƒ7‘.½õ±ƒÙïYL">ð¦~D¾~M™Ó’‹Iöù|¦ASÊà€&& €AÀ ˆ%ˆTõ `ò Jƒf|ï •BDD4É0«D”`}0A­Œžö €OöAÆ-€ìõÁ'À €ÜÈjØ-xe’wPöOa–Ð7€k·pÁ…ð@îšé¤ÏPfNK”x€d6ÉÚSŠ¿‰>ÿpÉç“ÔQÞƒ&F”püAKDD“^è¹ >^²/oî಻MSS‡ð³÷Æ-ï‰7otþöô˸=ÝxçnŸ"I7ä´©†3KjSd Ê^Ÿ$K²W|ð©öñØ%Ž6hZ2j¦yP|yw{º[öþñƒ²>ŸìóA–!Ëâ?¥e²O–eÉdY~ÏÝðMéüß àÖ ^`ÁÕK¸mNÈò• ôÜ#ŸÜwà§ë×~ñâÞ•¾úž@€CËP‡}@ £½ ¦‰Jæ"¢Dc7$Wd¼à“¼ƒËæY¼ü½”šI‚× Ÿ²2 Ë€¬ÄÓJ$í“|2d|^x¯_r/»waçÿ~·L0õ£ïœ×Rp0h’ú §ù—8÷è§÷øéòfϱcǶTlðlÝýÿð®ô•w!AÉFût——ֲу<¾LDDDD‰æ•Ì"Œ–´°ujšyPöA’$I’M&IöiIiÈ$@–%H²$ %À䘚n€þ4@¹À‡ÿ >S L§ÀbÞwà§Ë—//ýÊ—¿RúU1Á–ŠmçÎþ®áwJ_yW¹gSðx‰']%SbDD4É)´x €,¢_Ÿ>¯,™àóʲ"ý,ËZ~Z–El­Ž¶$@j ¼ðÝÓe(Á´œS*̼©è7#Õ Ÿé·¿ýõúµ_ÌÜ•¥-ýÜÙ߉Ò ,>ßEÒàA4ð7-Q±%–uÃ%¼’þ>ˆ²,K>/àƒì»ÑíׯºÝW ˲:Ë"-eµÞ>mjÊoûž’·VfNn€)€¦YHMÁ Ì’¾ó¯üóBJ•§ }BßB“ H¥çÍèþûéV]ûgïÎÛpEì‚ wùš¿ýnéylýöÇê¸Yñ¥÷wEZS?žeÓž½óaáÓ¶Eš~dèÛiô’4|5ºù3º¿7ê<‰úöÇ@¸5lizîÎèWxÀ”ÎüÞþ_Ao'øWוÁKƵøì,ùkS”Ò_¾/}ïæðß!Qð¦fD '‰ûµ­•eÙ'C’ᓯ_„,[çÞÖí¾â¤eÙj½>ùúµ>1~ZÔP‰¯jf: )SílGeº/®ýRÐrµä´Æd6ùe@Í{þõŸïû6AúüÇn͹=p¦¥7ÿ=}ð/=¦_œLyxÅ7¾ý±º…”qhÚã¿‘äO~gõ‘|·ð[SÆ žÖÚykŠ®ì³³Ž|ÁâÜÙ¸êÙ?JòGÒÿ4ðÕ¨æÏèþÞ üû±)_s˜ñÉÃÇïxãR^rÓÊ1§_Ãß8Ÿúý;”& üÆô««)ò©ãþòì”ÏÿØ$ÁöOþ¼»ð'Ö#Ô]ú³Ïþö`®|Ç%é%h?H¾ÚøôÏþôÂÕ6kŠãkSÜ?=rÿæ“¢1î5­ïHÔZ!"ŠŸ%ú$D4Š"ÿ •eø|$ȲûÂÖ¬² ëÝ·¹»¯2 [­·‹Úí¾@tըڛܙéÀƒP^í©ùþû?õÃiúá¿4….]²˜$˜µ?³Å¢ÜF Ö}ó»ñP±ø ‰¤ýv}ï÷©ò㘲ê·ý:%ÌÄRfþõ‡ÿôg¿²¼Ÿ ?ÙhÛš3xûHý}‹‹¯?<ÄH€Õb.ü¯ »þðŸÚ¶JÿuÛ¬Ñhg¤Ìüë?ø»w€¬ë+Ï^|qŠãkSðû7V}þÇæ»òoëuADDDÉÎò›6 CíÏ@C†ûÂU(‹Úz÷L1‘»û}åÃV»@EÅ—nd?7Ë +÷ðYà—W¥ïéï†nÖ*ñ×yõ ó§uoªU¼ÕŸ½¯!Ð-ë…O_oôS:ðžý¿¤9~|›í—7š?6µä.m¡íÔ¿‘­ß¾£îßùNe¡¨'ÖšUnÙ ¬øî—þzå¬:øÄ­?[¨¾— zn4lj Ôw$^o0ú¼W¥ïõ‰Æ« üì´5<zþ]À±÷:nLIñ¿q>;Õt4ü´ã¶œ~u´ÏÀœµs‚? ¶ÿ6]øËÙùöžô«Ø€Ž_õ.xüÖ”mï¤Ó|üW附¯ À'n=ü ±NDc~ñÞµ”9‰OÞQòw!D¿ ¦AÀ¬„Ô>dŸš –eÈî Xï¾ ¬óf*¶û}ñ*´k}hf˜€tHÓ˜:¦T¤¦C2ÃklÌÊRic¦½ÿrÌ)ÊÀ, ² ÀÝ_þêÍc åÏjú„³“ˆP¯m[T3í£5«þõ²úýO÷~óÛ.˜~ñÊS[Þép±kÕ]5ÓV=7íwü‰o­!& ¦´U]g|bZ÷÷¦âÐëSþ³Ö/Ìr.û¦4Çg•àýÏ/ª™öÑšígo®5ý*E7媽lûÚÎÕj¸)m?:eÝ¡íÿï¹i¿{×°ÐeáwÕõnëpvû]5«ª÷¤gÆX³îí\¸ÑpÀ¢Ú£wÈ“¦¿— zžùFË»¸kê·ïûUŠIÂgÓm@Ç?=óšéš;ú¼ÏMûݱµH={Ò¯è+¨ ~xõµ_ý©ü½©Ö“¿™òØo0ý#þM@ÊÏR"f¯õ³Ñì$å© Ø?*WϽL›¥LyÑë¬ -ö‡¯M÷·õñ©V ãç¿ÁôD˜ŒÆDDD©Ê_ªE¹½·ºhçª1µÛí?®DÒ’ˆ¡e êU¨¤HJrzð:Rn L›%X$XL-~ûÛ_wÇŽ}~ª½¾`Ñ'æ~ôÎÿøî×ÿâ; /ýù[D<ím0A7fZ’3Ò?óø­û§äß… /þ[ãÕ{løî¸ ø³š73”hÿ¶x` 0Àë¯ýpª{ÊcþØçó—§Yq½å_Ûñ‰'®Ÿ»Ó Øþì·é)sm@Ç?5ü¬x v7RΞ{ä¯>«Mùó¶tç—a[z,ýÈ#ð‹Î§ÿóøÌãµÈJ±/ÛNY×qÏÀŠGò Òbª9kž¾†]»Þÿ~ê™·~˜{÷’Ûä»R±N>mø^^ýhp=ÿ“Þü{”O{¤4õ±¿LÅïÏÔ6ãáÆ¹wÇ2oÖ¼]µïÿ͆”?Ÿ xGÊüÅ¡iÿÀ×Tyó¬Šuò.ÿ7påÜÊÄ[·Íª[μo¿hÒÕc8ä20E_Àë [[‡:íŠiuK€·»j›áýÔÐP™£OBDD4ÁyÍþAƒý€TXÜRnjèÏ)´ZodH Ï›7ËÝýGÈE<-%1CJn¡?iÓX OEŠÐø-øámÈm¼ÿþOé#éü™7,,ÿò›¿¿’üƒ”"Ëý€IÙûm¸•¥¶Z¬@Ç÷ž?°X´óaÖöö’?.™` Þb€_šþ%~gõŠÙøìœ/üüÞ‹ç˜iÅ+‹u“~ö£>àÃsoÀ» gÀ÷=qÿÝfà½7_Ï@n†¶ óå÷€i0çÏnͰ î ×NK@\"im¶,ž[Í6àý¤õ‹ŽŠ-öÚ‡g~½àhÜ•¡ïŰžÖ_ ”|þž¢ÿ¯¯ø.tTÿ¤ãöåeó ÖC¸6 Ü÷ûBZ£Æ¸ÒǾpýÞµGûËžùõ‚£ß5WûPÚ/ÉÀÌ÷eàŒfìúÇ¿ßúÿv‘ÔÓ~m›ºT3Ìåã~Ëã˜9Ì\pÄ,B^2ªíÊ7nÍ`q|-ø°å¯ÿ«ãöåÞ;y%!/%šÂy}°ˆ\²ÈßÞ’eY’}2L”1Ö»oh·ûŠï±`ÁGλ¬ÆÒ²HsФcÚ Sš¸lµVR`‘`R­‘4€¹Óÿâ;Ï_üûæ4‹¸u‹4è5IÒàõ²5I)Jóe3Xfâÿ2¤À$¾\$¤˜üiŠ.y™pˆZÖVÃÜù¶æ«rInã7O,|Õ|úøcËšÝýßþ‰¥§íÀm 3k¡þéwd`Æ=Þá½Ýì_©f5|7›ES÷Ó,é‡ëÚcÍÆnÿLc`óÃ)€ûôïñ'¿—¬%¡õ´ŸŸ]üð{Wínx—}æ7†ëÁhÞpükØl–R̲Õt7pnó¥O‰‘@€ ¯ûœaÛô){™¹ívÈœ¯Î¥~\&“”bþÖg,â÷ ¬)nÀºÐŒÿ3K·À·>c~ÿóf`™ÅY®6³”‚om™b.üëþ§_¿Ã»â3ƒ)ài¨äþD·€ˆx™i¢ñÆëƒE)”"á,Yï¾ 2$À}áî W¬wßîõÉV«ÈO«7sñg¦ý;Z‹š NÅ „©©$ɌҾM›Òþ¯åïþâ;Ïøï~€HHomxñâÞ`¶˜¼ðAÆdYGÂ"k‰îN8K`ûòŠ¿þáÕº;>¢N é2á&@:çMyl à­EЙ^ñiÔ=1ïWKþ'íBÁìâòÜÍ y·î3w O}ÛÛvÖäl›>i/³™*5}/eÁÏúíÿã»P0;5ÌG,ù_I±¡¯¥þ7ÀR­Z¥©áÛit`i‹±æÀß“v~ÛÛàãæ»q£åÇq×­ E!ïE÷Æõõìl볤]x嵎ÛWxïPÚ˼[·¤Ö}Îæ~{gè{ñO¼u™ø°ýÃ<`o¾*—äþüo\©MóæÒ}èyéuŸÆ…íúõ;‘*7œBÝ—¿Øð?WKn}y–ºOãÂ7à~ïj³Èy–ºO8Ûøm÷ÞÒ[S™–Ž‹ñb""¢IcÐè‰WL+' ZïV®‚×í¾"‰ wÈp»ß×ô°Zg*ñ4 Ž™6©˜Üœ D›âEš€$™M’$K0}­ÿÓÅ©ÿ×òwPÃhADÒiß'ç¥Èƒ2LE%õÄ/+»ÿs`~«ÏþÕ·ÿ¼¨ÖZý›ÒÇH¹ôç·J¾’{øMÀã-¬ôþ§úŠ?• Y°kÏàªe³‹w»]Ox­{Þ—7}öæÃäæÊNç#%ï3ö¯¾íüçÜŸÿL,½÷Þ]?H_´Íºç}yÓc¢UÎg~øôëwzóïÒW ÛNIßTIWþ¶7¶šýä»%k¦ùÈ¿ˆ8UnþÖ~ãõ;‘ŸjÝÓò^4¬§í'fgûÈ·=ÞÅ1èoC óŠaAçkÓÿ¸­ïN]“Äÿ^}í¸²¶}æûîD¾zMC`ôßéÒoºÿ1»¹Rì>Ôþù`= ûÐÏ\õ]oqißmøÇÆ~©dvínˆ!(êK1¡¶“£DÖ‹v¾S¹S¬¥š¯]©ˆhÜ“yîQBYÄÍÅ]-ù[5»,˲O–L>À4mšùúõ·û‘Vb=%ž¾}Ú´%‡­Üi\ uîƒ7ýi$Üýk||&fNÁ 3Ò,’d–R,’zAoCÊk¾©µJ¤¥Ó¾é•Õ»x½ŸO ùà»Þ•Þæ0éŽÊû>õµþOÌöá­ôŸüX+—äLoAé­i—Ó?0ÿqqÿc«½€Ïshê±Ó¤Yö~{®vÿG1¯yþ—n.YèŠÅý­Ðf‘3½¥ýÓüÓ‹e‰¥CW9ßòïôgW«_VP;Eµó©ï¦žWÚ{ÍþEèVQ@³CÞK¸z|x+ý'oxÕÄ>¯ùÔwSº•F†T¨×ê'‚Ë鎘áÿ8‚>_åà * ¬_,Ôð%ãÚîS "ç|FÇ5‰(!´þ8èð·Ëßí?ûk˜Í0™$ɤž)§æžeY‚:D$°}²,Ë^Ÿ|ˇ™÷=ð÷ÿ>ò®}¿ÃÛ'$|ìæÍÁ´”žf’$ÙbÁ´Ù"K0÷}ßüПýÙkÿí“›¶Õõnç^íD=].]ä7%XÀÏZõñß~æ}oþ &³d2!8˜†zÕõÂy²²,˲WÆ-/fÝÿÀßž‰A|0€þ3èù¿à>Y6 za¶À+C2ÁŒ´ox›‘–«“§Ì½0˲O[üñ´dá cD‰Ä´DDDL)’?žN‘D<}c@†9ÞAÈ>I’ý×pDH-iw=T¯E-‹Kû¦¤ÞèÜÃúú‚iyÀ«\ÚÂ+ðÂgöÉ0™%ìÚe¦¹'"""¢ñÀpÀÕ‰·Ó–|Þµ·»}ýׯSþS&– Kâbx²R(Ë@Jꌹó»Ü)Aµ‰`Ú«rùVŸ×l1Ë0˜âMóÁ'™}2 hW’–½²AËdÙ @ò †¾DDcÉëå™ODDDÚÐõD³Aèì¹>,›{ïÔÔ! ¦¸Ñ/wOé<7ƒý÷Ñe¦¯_G`1à ¯7 /nZÌ©7½ÊÙfø´9S}!WДdI”™á4Q‚ñQÂy£OBD£g°˜1è…W†ä…ÏÙ¬ŒèåÎ Ó:ÏMóRÖÕÄ€Œ  Õp|`PW¯¸ ‡«³^¹Ž™€§©fI’Ä‚|)é¼€dV&“ÍxÍ0«ûi³t‡'™7|"""ÐÇ`š(¡R˜1`Ô½ƒÊ¯]íEÉ“ ^Ým6|>˜Lðù”›&úd˜$ ÈÊ¥öRÓ©bÂÀSÍ”ñ!€ià–R®æ£µHÙ?ÊC¹Þžä@D‰& Ä"¢±ÄÝ!Q‚y#¥5ëþ * š@?FzŠúàV:n\…0¥YÒ>6íöOßvõ½÷ß~~@7 º•ñE~ÿ|ý!Ÿ‰ˆˆˆˆ(6 ¦‰ˆˆˆˆâÄ`šˆˆˆˆ(NÁw@œŽŽ1nѸõØã/¿ûfh¹q0-fÍö%‡Ÿüè…p/… ¦FßDDDDD$pÌ4QœLʼnÁ4Qœ"™5ûÎ{F©šMC¦gßy#Ũ22³{=®D·‚ˆˆˆˆÆB¬Á4#éµîß#âifñã£ß̸‡„«n’à=yð³Â8„Ƨ¡ ó ñ·GÜ´Ô>×áPqÕMü '~ÖAxì—Æ'Ó£‚ßzq©}Y–¹‡Š«n’à=yð³¢ûMtCˆ$2˜ÎÈÌÖ³oQÒIL0-ÂèsçÎéJ€!5Žçwï<ÁןZ76-!"J}K{^¢aë`ZF¿úꫳfÍZºt©VšFÜó»÷Ûl¶8N7¤É \,5Tì,É+ô³©­‚h2»`ZF¿ð ³fÍZ»v-RÓhŠ%’£¦ò°kpúÌ;‹ï½kCD4!XF鈡?vµ0ÀÆÁ:ÑÆ'éåpçwﯪªŠ0Auuõ˜5†h\ÝJ(žªD4’L& ÞÄhd¦ƒÆCÏŸ?ÀD½téÒ¥K—2¤Žj¨a4TUg|êèèHtˆÆYnjZ’'±I¸3%£2Ìãĉ"†>þüùóç¬]»víÚµ8yòäÉ“'c©ÅW¿øúž$ßC£«ªP]­üËÌôÐíØ±#ÑM -A ã…eYîèèX±b…øwäšFD4AŒÖ˜é“'Oq|!µÇÅ«{öìÙ´iÓ(5u\ɸóD™`@‹¤™™º;v8ÎÈãª'›OHš$?n'‚ád£% €ˆ¡IOæA4F+˜>pà€öx¨!µ>Œ¦(ô‘43Ó!"Ÿ_("ižƒˆ :¶T=÷ÊIcx3ÄX)f¦'vU¢Ñ0ZÁôÎ;Oœ8{HÍ0:€þÄ8-QmX¨¤™™ùD›ÍÆH",Ö’—Úæ•.ææµdzጓ–$I  IÅKã-;¹éÄÚ=ˆ-KÍ0:ˆ\U%ò@RäBf¦#Š|¢ˆ¤'ù˜é€H?Ïb·cãéñLùÞˆ+E­Ÿkøç/Rbñ€ÑhÝëL/;¹ @,!5ÂDÒ³fÍzÿý÷Gµ‘ã“ahPÈÌ4àùÝûwìØǾc¦@’†OOî$㟖TN,Ì«xL  ‰FÃXÜ´%–Zd¦5çÏŸŸ5kVôHº«6cM‹öÌ^ß~`ýœm{ÂQ5(dfZ½ž´–`Öß<|<Ž™mÙÞÞªœ1]n²0¬V–cЧõôŽرcÄîåÑÓºvY¥Ã^sjQÖTRý¾Ò%å˜Xß‘iÃÇu@<»Æ„3{œÜïŸ5M,£LŸXºÀ²“›"‡ÔZZZ䪵Ø:R<={cU•Á>/LaôÌô¯¨ãU™P|ȳm¹—$0(‘´–³ºQKGG‡Íf wlzc¦¶!Rœ°~’†~iuä|³Ñ«ñt˜U7¼-G¬dÕжíãM墨Wš‘9[ïøê#zÃ?} ˆúqo>èªÎsAC_c#ºÂ'nŽ¿¦âÝ‚¾â.½¸.‹#osÅj¿””ßDÃ0™éM/àÄÆ(!5€W_}À#<‚Ø2Ó=î³ì C¾æô_…bÏ­%ºž>¿dÍY»½ÓáP¿ëÅÄb²(3bì¾b?1Ñ™é¬õM½ëÇx™~Z$-̙ن ÃœrNÚ¿T.©ž;q~Å óПŒ£¨Ãs4Fâvò@ÎçÊÐÐx¶»˳€ž×9€²ÕU9ÕÊ~éÒ,„(©ŒÒÝămz›^À‰¥{ô‰êµk׊Zxä‘GyämÔǬY³ˆ eYp”çgdfgdf¯Ýw zZ×®i±×·÷z\½‹á¨üæ>­c·}sM °hËÓÅŽ‡úÕ¿ù颬è3Ž)¹ªÊi³É£0( ÊLǬg_©XoþU «V+ÌX×ÚÓÓºV{ªNv¬Zd[VgfgdÖ³T7®S¼º®t­Vç°ÖJ}$-=;Î;vTëŒÊެùvg.Æ´~²VE%g^^'F“«®TˆaÚŸu‹Ú±#à/YEÏÔç-Ïî»Ý–ám*/é¶œž}/4öúê H:¶ÍïxÕ²J€Æ ™¥/î3nCFfvUB[XÕˆ}]kOWmFfí±ñÝG4A´&èiÚì‹ï½+ì`žžÖg{ñf;àhëèQ õ«Hyƒ†…Ýã/¥H9÷ l ¥kש[ˆ­=Ñg¬=6„q¼X¾²è<ôšØçžw›WæhŸZðÇaô‘éÑ·Ñh£`úä Ëœ<‰“'Bjý4¯¾úꫯ¾:þüùóçŸ?^ä¤#™ÎÝÖëÙ»Y}æ(ÏϨ>ÞóZ›C‹°×´p¼¥vNÇ¢-W¯gÛò\ÛfÎc¸Ô}@ñçrÓŒ#·B¢ŠõÄ ÌtŒºj—”w¢lo¯Çu¨ Žò|%tIz«×Óþì½@VÑ«W<µÃQ^õb–W‰u^|Q~¸ IDAT(hÖ©(xÆã:T8*›ºB[?}$ 5˜¶ÙlUªÑ¸R‡ØTì>˜Ëú ]«ŠÀubô[®g_éêF(…×èk–eÿŸ©wìPþå/fÊoà·ü»ÌHo³«vu#P¶·W7¨æâ[î³®X7¿œê5vöšSž¦'­! SF§þÀ÷}DÐGÃR¼Øl¶÷ôQ»Æ¥æùƒ-Á^sÊã:UŸ§0,Ôó/¥‰£ éþâ—kÛ 8^~½Gy³ÅŸÓ é þ8Œ>2͘~Ëš±æ`éÆâÁ '±XºÔ`m€b3 9ÕW5Ô3–Î\¼¸åÖsìóçªs•Öç5”·¼²oþØëŸXˆÞmƱë ˆq]ÍCù®_™‘chli8züsPw0çɪ"èNÕŠ¯Îê•”Cêc©eˆD$š~Ö]l°cÄ–ç¨\’Y e{Åvuýøw«€²V»jàu"¢”çg”«‹zëb¿^>Ê7Ç`˜G4Fo³í›k:a¯9Ã÷an~úÙckî¢-ž&1Lmœ÷‘0†uU0gš^êx¹È[ýМ,ØÑéxùõžõ#=²¬‹€NÇ[—ðQ¡5¸Fƒî3Ú+ñ¬½e‹6¶ÇHLÛ@¢ûˆ’!Æ:‹üt|·Bt:áï(~ü•F@ "¡D–ŽFç±âù@À©ê\u\]PaèªÈë/¥cÕÙ«ýOÕ9¡ÝóÀC!3gm)«t4åhb˜q Ü,ç¬x4ŽN}^ôhø‘) º?Q’¦,;;#'ãê{ï¿ýü€Vêtt<öøÆËº¸³ï¼çrlãqÅWö‰'´-¤ôg.}A »Oª!¶~Ì´x¼sçNÝ·Éð<˜„ßÞÉéè(Z·iHÍ8}æ ;ðé¿ï”Z–Q]í´ÙÝc\O÷&ÿÅ ”e9æím?ô«ÈîØ¡Ü™ÅxYjy|wOo†ºêåvâA7m¢ ¹i‹XŸ#sß–„Í×—ÈûƒνÀ%I¹Fµ$IN§sŸ²á-xFù¾<F|Ÿµ¡gŽbì:cÇ–h¤„ÆÆE¸;q£wä3Ób+ׇԆYêPA™i„£õ Jv"’–j JýWÄ5N§Ói³A$§;:lñÞ1ô;tb¬º¨œNã{²¬°Ùt %’Ÿ¿ÜFÒÝ´%T¸]ø8[{ú»Àä={büFÒÃW>:Va?è5£¸TŠFû\"ÿ’’ÔÉbé˜ÿûhˆ,²wäûèD ©œXºgüuìaôDIW¢Dä¡wh“Æ{ÄɰC9¶p/uè"ìsÒ|Žæ0$Yuêu&´aÞþ0ò>hƒÁrcêhäedfÇø‘k“I™ÙQûl’tj¢±3Š—ÆËÈÌô²eË`R/Û¸)èÚçÏŸaôöíÛwîÜ™C¯žÄ>jGÈ¿‚Óé´‰1ÓãòˆãSP$4ŠFo2l`‘)¿{‡7ÌcTnŽC£`8·?¤ä{$­'ÇO‘Þ(Ó½—ÈLG©-!½}ûvQ"¦™ðñ´XKÚ{̸óˆAúË'«¡³Á ˆq]gz"Ù±#ø*&¡áßÄÞ„FD¯ÇuúÌ;â±-¶a†t’˜žø‚ÂbFÉU|‘´Àxšh¨F÷¦-úÁáBêPâìCj³?þ+þF¿"3Ó1x~÷þp/MŒ3‡)î43#éñ/\fZDÕâ©(×JpE6w@ŒR ÚèŽùóç3Œ¦¦^#ßÑi³iÉE†5á<¿{U•8ÉSúW’&õV·øÞ»´í'¾ÙG°14J"g¦µ§¡ïõˆˆ&¼1º8‡Ԃ~àÇdhŒ‰pÙðD]$­•1¬œNgP¦ùùÝûm6[GGàt:«€ÿß;üIëÉ™¢Ö¶œØ£jnlÉ%43úoèKbzŽŒ'"24vÁ´R £#‰pƒÃª*gGI‡Ik¯`Š:nE•a*:ôßЧ7ŒdÑëqIñ›–¸/&¢±¦}H­/!§ÑÉõJ¸Ãy÷ÜÕ ¡‘tÐ…QwìØ”¢¶Ù”Ç;vpk¤ ËpÌ´þt#§Á1ÓÉ,¾xš‘4QL ì±Axl=>¡çe†Òˆ¢®ªªêèè¹êÉ9ºƒ&¨ƒ¤#<¦¤#âiñ8ÊM[t³Œj“ˆ&¤DÓ$8ÎÐ0:ÂðDFÒz;Œ.ßazï.} Ü‘ÐÆ3'!í;Mš·'ŸL'ƒãáê>€û šœ¸åOr܈F)Ñ """"JVRú’7o{ðŽ«ï½ÿöóZ©ÓÑñØã/ën§7ûÎ{.O¾»ëÅÁéè°ÙW̾óžD7„ˆˆˆˆâ$I’þNhlœQd»7z9Ìc„Ùì+ð‡Q’r:¢_BMÃaDDDDDqb0MDDDD'ÓDDDDDqb0MDDDD'‹å¾Ha ih6Ñøt¥ŽXIÀ0oÚòØã‡3;QbýäG/ göá^×€#"""¢I‹c¦‰ˆˆˆˆâÄ`šˆˆˆˆ(N ¦‰ˆˆˆˆâÄ`šˆˆˆˆ(N ¦‰&§£cö÷$ºDvX¢ €Á4QœLʼnÁ4QœLʼnÁ4QœLʼnÁ4QœLÅÉ’èPXNGG¢›@ñ{ìñ—ß}3Ñ­ ¤ÁþžÔØß' öÄq›×c0=®=öøÆD7âñ“½è&PòaORìï {bTÜæƒ0˜ïøËˆhÜ’$©uÿžD·‚hìp›Å`šˆˆ(X,‰   ‰„Û|Üx"QœLʼnÁ4Qr76»#—Ñèc0 zZ×ffg¨U]ú’Úcb’}¥Úk÷]2˜E«,hÊåºJôSѨsVHš gÀK#4»› %I’$Æâ”œŽUïé†?¥èþ>Á«^RÓ]µ³3³µ¿™cÞ™÷•ÎÎÌžY›¦¶aÌíg¯9åqõz\½'jÞx®µ'«èÀ‰»½æ”gÛr g_é’— ” <í«ßz½'h–5ÊwGà”{ï+ÏQ²q =çï;¨MYõbÏX¿iJnvöºVsÈ$¢s]‡JÌwÈñÚHlÜÍ…’YáÀa§þekÉ‘#%Ö‘l¡µäˆ,w7ŒdD†.+ô—覅×UšF1r¼*$#’7 ˜¸ôâºìŒÌÒªjÉãmjõñáÖ3J ¶.n}j²EÐI¹Í'ZòÓ]µ³×´ lïeKü]Y?gl[Ð’ËoÙÑÖsÞqïܬ€¢ãMåx¶®H-œódUQÀYEDWàl·¨¨çõC lcu•áÄOöæí‹Kœeþ; %cÝ\¡/Š«ãɸÍ'\ÒÓf÷YÞ…!]WŸj©¯žÖ™âqWíìÌÒ™ë²ggfÏèÒM,&‹2cp©¿¬8õ¨.¥¸”JÕ—jÓ´¥hi¹åÆ”œsT.? ל}¶8'फ़‹oØ Vd…™QÈš{ŸãüÅÐ)Õéyý¢-‚(‚¬ù^g.šƒz™èÕÇ£÷H=NßÙK§*{}õ%µ Æß!Z€´jõ»"pY† ÐjV\…kUíŒê ©Ð2=3{vfíÔ¨ýÝÝÞÚ¶x5¤¼­ÔµJ–e¶ÓÙ»eY–»›P*ÒgA%îæ§J‹ ·c±ËÛge-9¢¦ÄÕ0BTëØºËþăÍn8+æ¹¶‹)»‹ZŸjvÃZ²}ë.‘FwÞµuûÈæÏ%4†×QEOë³€½x³p´uˆî ÀëJ•‘{ëZ{€cÕ eµÈ=‡I/_Y tzMlÛçÀæ•9þŒ² ¸®µ§«6¨ý€ ñ8ÆAƒ‘ÇêkЪ]ݨ›_MÌkïÔpÊ0™ø¶:캑VΊyJ§ên:­¼ ôÍ]#É$Ù6?$M0íµ.`.ÏÞi­iñÖ·_VS_3ü£mÆš`Ñͧ‹ˆ88íh €þ§‹¼Ñg ±ÒÖßèôGØYEW”üVûM;ÌåUSµ €cÑMëJ}Ð2ý¨í²Çu­ pTNíŠÜàˆüc6 U„K6ˆpþ¯¡3¬áxÕ²¶ÕuEŒ¥)næ×ÚÌ€÷ѽJA˜^¡ïDèq½sJËqm‰ýO©K ó½æŠhŒ¾ŸvÕÎ,ïÙîke0—çÏð¿RÞcÕÞ~(¾æq]ölë‹e}d[ ›6Û‚JŠò­`Í/*hs¹CK¬ c—]ªpŠôv,‹†.©fß…ÓçüÕZ³ ´ÜçNc—]L9¯´M4À¶JDÓÎû¶®ŠuãŸ>’çQEÏkmÀþè¥æùƒ`EÁ3ס2ÀQÙÔ…åU{7@ñ!«×³my¸sm›Ç˯÷(9ïâÏå†NÔöMÃ-š´¯tu#ìõí½Wô|vWí’òN”ííõ¸•ÁQž_ÕdPG!>k‡C ;ìª]ÝmJua­k×´(Ë:X Gå7÷]2ž2f¶ÍM§wª±ûÜiµ'Zó‹ ÄoG­oFèÉ&‰¶ùñ i‚iän»ìû$@ì«‹ý¥²w\ÓÀü–úÅáXtSìºrmýi¸d> ¸?1ÍÜ‚œþ²–Ô£þçjF*Š#pBûüAõaPÌp¹C;Ò-rÉÁ%"ý0çÉý®Þ5#2z.¾aŸ?×?e¸òÐŽWe¾°ðDÓ“ ¥)>ŽÊ™™Ù"âôoäázYø¾ƒ=Ψ³§½Ü):»ŸÑwHÔæ+!ø[— •ßç+sô­ôÿnð£÷wë‚Åm­íî¨M‹…­N–eyÕaƒÓÃp7Îk-êIµh£¨ šºeÖE4=Ábi@'Æ}Tq©ãåN oõCs²*°«A°"xˆ`þÌné‹=rJëóà8Ç_iÊla·cÑ–È9à(Ï%,ƨl^™%)ކ£ÇáOWçoqL©¿%IJ2Ö´p¼uÉpÊ0ÃZŒXKvµ6´GŸÐÏ k$Ÿ$ÙæÇ…ä ¦ çC‘š:Q#‹û7*‰^ñW¥öÿ^9çF}Ð’ºïõT¼õOhû¶h3ë[YœÚ¨üø6ï+YÞ)j¸6Ä_ºÆËQ—³Á>n@QNi=¶„MW8^µ¬ò¾§‹²‚§<^µ¬>R®êi]ËHš†IŒ™ÚÔÃ÷²p"õ¸ÐÎ^ýÒ”Àή þ ='rÄ ý=ªl››P:Ïû:+¢ÄÁîöÖ¶ÀØU)q7W4»[ÜÝT ’ÌîæÂ0£8Ý®6ñ@Mo»Û[Û",Õº`q[ðhRÑúÓvûé4úQE×K[:·,ËÎXV递„šÜm½JXùòÏz¨ÀŽ–Wö]|#$$Uï•d­oê=X,;Êóã8ݰg_é’òN‘oŽ%µ¬eÁ{=®Þ¡îdXK¶£´´ ›}h¿S§6îÉ( ¶ùñ!¹‚iUÏy3€{çö)Çm_Š|š¼÷¡/Z^iF^ÿCsà?àeÆ`"ï°¼Õ©> ï˜.wˆc¦qhQVOëÚe•Gå’ÌÚc@Öú¦S¶)(ñ±n–Ìžp‰S ¦ÌÜ€ƒÊïrÃz^ksˆ/e^-Ƨtöƨݘú¢  UësÏ¡…úl´á”¡béïÖ’#ÝM§íêi€v„Iò¶•ÎG’[‹”óƒJ¬ à/Ø]bàvµ©Á²B½ŸýtÓdûbež§\‹#f¦muúVjº5¿¨ h4FD V %OÕçAÍìKÖƒ«íh(¯tñqæbpjFè†Né³ÑZFù¢®ûw«ÝîÂ<o¸ºR–uGùKÇt…†SÆ:fZa«slU¨›ý¼ÒÅã¤s˜®A—%Ñ ˆUZuötÝÞúö+ëç9—OÌŸ¹¬rzfËt­ü¡™³Šn–UNoÊ6ÞIÖÜm1Í,§¿ ©ÐWµ7µqCjyþìò/µ¼ezfËt߬éýZKŽÈ%úÛ‘#º×Ž@Сóˆauúçá][·ËÖHÓ„ÌeÑêr/p6”¢¨Û\Lcà•Fˆ1âiÖCvt:ÇVNžSZŸ×PÞ²:³(>t0BÅsV<šG§½þ‰9 ÷‰gí-[•KtJä••'öšS¡©âÆ ê«û·ª?»¤\)±×·Wç¹{77nh(ÏÏ(ϳ«Ý?k}õ³/ço)ÏÏ(×7`[ï‰ùk—U®ÎT#ÛëÛN•¶ ¶:Ù¦–ë7{ýd‘»M\RÚ×íÞyõ½÷ß~~@+u::{|ãåwßÔJfßyþ©á44²¸†“W?»I¿Ù\šº.Šý]Æ’B3ÔÓ:sY¥Ù^se¿ÿüEã‘#>¸Q¨8€»¹°aÁ‘QÂ鬯JÚQ¢:±t"§££hݦÖý{âît“¾ÃŽ;cÓǧ±ÙæÇ§Ðž(Þ©~ Kè4E\èÄõÞ¤ÉLE×ózª°×܈;’žÐ¬%Gê¢O5,ZþŽˆh’`0MDHVÑ•0œ†[ɈÔLÉÃéèHtˆÆ·ù¸1˜&"" IR¢›@4¦¸Íƒéqí'?z!ÑM ¢1Âþ>~´îß“è&PÂLΞÈm~8L_“ö¢Iˆýh<`O¤8X˜Ö·&Òy²Dû;ÑxÀžHC ²„d½i Ñ8À`šˆˆˆˆ(N ¦‰ˆˆˆˆâÄ`šˆˆˆˆ(N¼šÇøÅ˧'µ v«UmìïIý}Â¥žÈ-dbc0=®ñ=Ijr^¦”†‰ý=I±¿O0#Þ¹…LxæA4Âx)¢Éƒý"ã203M«XÒñ`=ÑÄÀþNQEÝH¸…LÌL WFfv¢›@‰Á`šˆˆˆhXD$Íxzrb0MD”„ÜÍ……ÍîÈ%D4&ô14ãéIˆÁtòpVHš gðŽÓÝ\¨½æ,6;› %É?¹»¹°°¢"p"I?A@…Ra³aê ž5 UîæÂ ÉÂÏH4Òª³ggfÏèJt;†/¨¿ë|ЬvovG¢PA{áÑ3ãéÉ&9ƒé®ÚÙ™Ùþ¿u­æQYÌñ™Ù³3kÓÆAÍîæBɇ¬pà°3h kɑ‚¦n¹Î  ©[Ö)±[·>¥ûÈÞ|D–eYVæÒ¦œóZ‹”*‹]nש–tµÎ«p°æ¡µ],ÅÝÞŠ¢|kl3&ŒÌìp‰nÚ¸Ø[gî»4ù3ÒýÝZrD×WG‚µäˆ,w7Œdû{zö•fdfgdÖÐU›‘™½vߥcÕºµ·®µŽWéWiõñÀj"¿Qaí±¡Îçv-v¨{ÃÒ§BÃé^+ôoØ­¥d’œÁ´P¶÷²ÇuùD×Q9sTBÞñÃÝÞŠ¦î:›úÜVç³ìÍÛ—68cž~ñkÌK³.X¬>òGÓn—ˆ¥c›1i„û–ä·§®ÚÙkZ”®êq]ö¸®¬ŸÃÆDcÔßÝÍ……ÍÍê¡'%?æj( Ê——øsj1gƒÓpºYÚa/åppíîæB-‰nö÷ahyEwŒhy•«÷`1”ííÝ_”…ãU™÷ì 5­ÊÑÍùÕ±åßZ³q:‘ÿƾ±”ÉL YEÖç-SD’IŸyëžÖ™¡iìÀB%A% ×µš»jggÖÎ¨Þ -ÓEVIyµT±6M[––]º(ÑæZ×jÒkžº¯4J’ÌÝÞÚ¦…¶±i+:’ÂVç€=¶<°mÕÖ]ö ãˆu Îû ²E­ ·¹Ü¢Litl3&‘Ðý(÷¬†Ìî³¼ CbÖОbThÞWÜI:Ôѳ3³§7±1¢ÂêãЉáKC[´A##~“ÄßßÛJ]«dYÖý´m;½[^‚’/ *q7?UªäÔÔLÑYKŽÈZNüüÕ:¶î²?ñ`g³Ίy®íÚ!¦§šÝ°–lߺK¤Ñ‡wmÝ>²ùóDaÏæ²â†£aÓÉ=û^hìõÕOf áU5ç-²Ý€’ùyk‘ü®êR ו®Õ%ÂUoh€–Õ™Ù™µ/î+õW#íp+@’¤¢u›¢þ ¡~JZÉL^ë"æ·.¡§uæšo}ûeëòÁb8*ghýÄ^sÅãºRŸ§f]Q²Sí7í0—WMíÑêk›±¦@ÕÞ~(¾æq]ölë/:Ýõ eúQÛeëZਜ*vÀá–Ž‚uSöÖÙP#NýÈ ÝaÛæ¦Ó;cÊÙêdY–åU‡ýi¨Ð:µ(ygv·¶Ûª­»;á>wzë*[˜ÆΘTô{SîYÃQúfy~p¬ÚSDÚØ^sEôÊ{®Ú™å"‘|­ æò|ÝH者®ÚéЦZc"úÒ0,ŒÔȈß$‘ö÷‚¦Í¶ e¿nÍ/*?aƒJ¬ c—]ªpép––o¶ïÂésþj­ÙÚîs§±Ë.¦œWÚ& t8ïRûÿDÀþ•¶ÍÎpc*.¾Õ à>«ñÑ!ãW»j—”w¢lo¯Çu¨ Žòüª(gG<ãq*•M]X^µw3ò¸z=ÛV ñÝ(£wûwXrl†¼JB!˜Ö˜_k3k;Ë5-¶Ž?ìöç“ò§8kq,ºaŸgŸ?¨Õ˜âŠ´ô{çzÃ7Û»¾)Êgë‚Åmê@äa²–ì.jmhyz[,;Ô\S%w7);ružU[OŸs¶·.¿/5ž1Ɉ}*÷¬‘än»ì¡$ zGõqÞ’v´@ÿÓE^˜s£ªÈ"JVæè[Y UËrv¨4Ý”CmLÔw ÿÒ-L‹ÐÈ0ß$cÚß•ÅúßÄѸ› µó%¢Ž¢8Bë"šž`±4ÀþœÏ•µ¼rtĪ;v´Àæ•9–¯,!ó ÷Î5Êz+²Ö7õz\bëå¬0Êý\~÷Íȼ‘ø$1‚é £·JÆKü…eeÞW:³¼SLœÊÒ…ËqˆeéCgÛÜ„R݉zΊøOÚ³–lGii[ä‰ÜÍ…ÚÜçNG΋[KŽ8`×íªm«—ÚK#ÄÒáfL:Ü³Æ çCÑNÔxœ¹(n»::=eÈs— ç›dÈýÝÝÞÚ»*%îæŠf7`«“»› D’ÙÝ\f,³Û¥|-¨émw{k¤/ ë‚ÅmgaØ67¶ÛO‡¤Ñ'ö÷¡Z¾²¸¡±Å𥹠ó¼á6>@ùÕ±æn.Œx•çð'£’ IDAT§’)é@ô´Î(æÃõsÔø/…;QK#YÞêTË.™ÏŒLC¢.=sÔ1”ʵ:NÛÕÇv¬²A?¹Âén.œWÚÖV:OĦúaÊÁ»N[ck”6Yó‹´¥i¶"Ôi«ën:m× m«¶B·o}FšÀzΛÜ;·Ï¨§(iÝçÄ@äKS«[u‰ÞȹçÁ…yÌûÝ(ÝJmŒ’áU.Z+싹‘±6 @¸þJíYóZ‹”óƒJ¬ à/ÝØíj+<1X½ŸýtÓdûbež§\‹#f¦•Þܳ­ùEQÏ=¦I!×¶9Ì+Yë7nåU/öÄúª>­ÏRÀ™‹FÕDÒó˜iw{k›n7º»â¨úÉK– €%Ñ †Æ ³ÅÉFöš+û‹¼r·]>1æ²Êé™-ÓÞúö+•33+ l@îÞÔÆ ©åù³Ëó¼öp ȹQŸ—ZÞ2=³e:Н˜¥=†K·F¯ùf}Lo×ZrD.ÑØ‚ŸëžÚ_PbÓOZ'kO­%GŽÄ°4„Ö8ƒn¡5Eš‘&”´ê€3½õíWÖÏr zÊúm—böµŸÚkúª¶]©?;³\éæÞúös£!’ÞõÕ7_ΟRž?»<ŽÆÌ¹io™¢}?è}iô¨‘Á{õêïGt¯€àžcЗlu²\§/pÞµu»l4MÈF=¾‘§ŒP²cŸ0ø”ÔØcÄí\Áô¸ÆkôDÅKóÒ„Áþ>ði`OŒŠÛyó """¢˜ðÖ¡˜™&"""šìb¶Áa0†˜™&""""Šƒi""""¢8™8ò…ˆˆˆ(ɸ› ›Ý‰nÅä&C–ÁÌtZuöìÌì]Ñ Çg…ÚsÜÍ…’^…S_¾ùkφ2½:µX\@‰ò<æ"LOD0ênD4\Ǫ³32³«bÙ¿»› õ;Ç‘«áKŒt'“$ ¦E˜«ü­k5wÕúŸŠ’ÐyÔiÆQpÜÓ:3\kÃs7J’}—úÔZrDV9¶¢ Û ·k±C)X\úTh'ªÎ É1Ç‘kÔ%ÂyX™Zîn:½³Ù g…2wÓi»Ñþ>¨†¨ÓS2éi]›™‘™½vß%¥¤«6#3;#³ôÅž0sì+ ˜>ØñªÌìŒÌÚc£ÑÚxˆöþ­k óæFZHw#šÙ§âP°uq«ÁÎtb þ€t‰nÚø•dÁt_•ëòÁb(Û{y‘W”Úk®x\—ÃQ9³úxÐ,iG[ăÔç†¼ŽŽã32³g/«Œ£%Ö’#rwSAè îæ»¶n/±ÂVWgS¦Í6˜.¸çáÓMÝê±,Ñ_¿ÛÕ¶xÕyx×ÖU6°æœ>çŽRCôé)ùØóðòë=péÅçÎÚ푦ÍZßÔëqX?glš6l9ÕW¯Çuª>€½¾½×ãêÝ_”56 înîæB-Cí¬ ›Í……ÍÍL\S2IdŸŠGöæí‹KœeþƒÀ¢ë¹›Ÿ*mk+pŒ7°Ð?‹2IðdwsaaEE¡¨TyQéØ!óúKæ•¶Â{îõ¸†TNHº`:’¬ù^g.Ä©=­S{q¿p´¥©¿µ ÷ôFÿ´…Z ¹«vvfmüyn}"\Ÿ/Ÿ¹ï’a‰*çCú{@eÞW2Ù8JÑ´Ù¦/r··¢(ße¾Ã»ÚJç õ0²èćWÉQ¸uÁâ6—;Ö&}z¿ Vß[ÙÔô¼~èÞ‚ÕZ±š·ÎÐg¯Eêºú¸ò`]éZ]jêXõ†hY­å§•T·.}e4c¤eM¡ÎX“d—^\§Ë¾‹E¯kí lC„ÅEKÏëé»›µdûÖ]‡€øYº½Ä ´•ºVɲé'1Qr톆ýZéqj¿Î¬=¦Í¡«£;22³W«û÷X{¢­Îý‘TgżÒŇX­%»› šºŽñê Ýó\Û•ãLE"Óí?¶ìPƒõ¶ÓÙ»eÙ±u—ý)ˆâpð¼þç×FBhÜÌH:²‰L›_k3ÞGô>qãÑ< 3õ5e/;½(Û{ÙãºV¦NjX¨h›±¦zZg®iñÖ·_Vá3ö]2ï+Þ¥Ð㺲~NhÉ(¾m--í笘×Z´ÛhÜF°­þÃÈ±Žºß«GeM“ÌŠ•Å Gk©¼oåƒþÒ¬¢W¯ÇÕëiÖGy•ÑØ‚g<®Ce€£²© Ë«ön€âCW¯gÛòžÖµkZ”ÜÕÁb8*¿éßíÌqYSvÕf¬i½æ”˜ø^ ÒR Íyòéb sKËq=¯µ9€ÍO«©5{Í)‘uõ ¹ò ÝͶJDÓþC<A?£‰’“aO‰Ð¯‹¶(éí–ÕGm½ú>nXUWíêF l¯2åÙ6ëFZ¹ÏVû5¿¨@ù‘ûÜiì²k¹d‘HÒ²Ëö]Çi Šò­€5»@{`8¯®£J=3’ŽjBÓŽÊ™™Ù3Ë;Q¶70r½”ör'×ÿÐïC^ÀüòëfuàGÿÊ}†…jý‹nz\—=Û_k3æòüÙ™Ù³×´0¿¥ìE¡>»ZŽw}SÜ1wHZÚY!íÌî6ÞG]ØVm L,»Ï.ÈÂ2‡:=g¹O<{fÃê35¥¹Å"ñ“‘™¿ÅfÆ{çF8¼+âTGy~FfvÆšµ»…ÎvYS;Úì;çɪ"DXJØ÷kÛ  Ñy —:^îŠ?øÆ³¬‹D=†oaèc]´î&¢i,M41„ëìaûµ}þ\íáÂ9Q«R:~àþ}=ÑZ²»¨µ¡=Þ·  ©[;ÉI®³¹› çµuÇ–]šw­*C3’ŽÅ„¦Å˜iërU`(ÜõÒ€Î)ËÔaÊŽÊ©qœ†hŸ?¨{¦¥œÅ½ë›´aæòüÙÕÇCKâyS±JK»› ƒ"iý0Ë`¶Uâ w{kÛâÖÈÓÃÝ\¡þ6wÞUmUeº ¢.1xzšæ<¹?xàcϾÒ%å"?G*H£d˜Ä_•ÑoÝ‘XV,KÑÉ)­ÏZ^©~i‹öú'–dåŠîˆ ™Ý~šùhšˆ‚zÊpúu|.kÉv”–¶AŒQTÆe¸Û[Û´¶†E¡n¿e(¦»½5Ò¸çÐy­ ·µ¶»c˜w$0’ŽÑ„¦ÃÉfÿp‹ú<©G.Ì`väŸ ƒx­‹˜Ë_J z!wÛeëò‰o„’ðb3ín.”æ)'4T8!ÎoЧ¥Ýí­mðƒ6¼P¾[]wQë,Q}±dTFv¥ Ià¶àÂ,|äSAD íÐÇ’œ~ãdÕ˜µ‘ˆ5£¶L)¬çÍŽ>fHÉá‹$J¤äÿ2@ݼçž[†nÎ5×\3jô„!O£F©; lŠ÷Ê5‚ôÝrúÇ{K»Ki‘¿Ï¿Gõ"""ÀL¿VgÔºfK=¢Bm°`Z s対°´ä”-™ÛÄû”Gp<ëTL¸yt¡ð-CžFF8ÿÖÐ6‹»`1 ÖˆrCýTf¸š6ÝÒm†¼{D`\î›wÏö„è–·ŸwÏ játúj-DD´v£v­Î¨ÕõOC> 6.¤L´ÃS2– ûšó^ 9¢IÓh]ˆï¨ze?O!Ç}u«Û/Qv,˜®w£—lÐ>½`ÕK­BßÍH0zɱ÷@ƹìô¯ôbèõ—ÜZj‰F‚ÑÈäY¢Ãy®à9Ú&bónKæ!Ïé3]¯µ`0É}*ýÒGŒÏ¹çã[²Çäø¡ ¿f!0~¦ë˜ f«eîýPsÎúSÑò¾¥È(eLgºÖ!4œ½ŒF‚ÑH0ꬕ£Ïƒ½¢êx3ýÚãÞø-/¶T娽¾Å·Ï2ä<î­³ Lç¢ß-¸u7%: û΂­CDÿÕø{‰“ò¦ád_•ÆÄùL¿ò´>í„XyŠ/šg¶ÄÕºœµ€ªêý¦î„•çë+²ÃÝaR6…&}°š y¶?ã·Wç¯ÒH%•’Œ‹¥Fá†=5þ`¨Ð)Ѻêh· ]Ét†Gß„A×I½²¹Ö‰ÇÜ™›„nö*ƒã…s'ÒSàrcâJ²kvÚÕ:Þ¦Ô|yz¦ùÖ›ÍysÏŠã~<¯8ì¦Á©û=·º#/‘Òæ ¦Ã×ü" ¼pH¯Òø¢ý…`jìÚÌô7 Ëâ±öxWÕF™ÿÕã^ûš{…ÁÉhü„øÕÑ…ð¨½irc$x±¥*³Emº¾³ÃöêUÞ\†DZ:)Ð]í³¾¡V·‘®+Yµ¡Z¥¡Bª.96ž£ÊšˆˆÊÍSÇp […ÃÝ;S¾gXFÚXoØ@t˜ñkÕó/4·çÃr¨-ÞY@øú˜˜rh®wŽt€m,ŒFzê¥ ·”iŽLžÝŸØƒå×ÒáXìug©ÒL÷gú8¦GpÑaVvÊGð£©û}¾ð•(ŸML‹½tFi!¥F® W/O M‡«ô‡- ^¾Ž~t©UŽ¡Ú_g$ôìºæŸǽ>)¤.sÚ9nfKRØ×,]8,ÏëWuñ+#-èÖœ6Ϋ–@g—­J#+Ó±®ÔDtèý9‹qYû$"¢uT{´ÝûÖ•âW×Há) ò\³zÃ>`êNxáê婎vnÝ ‡?s†éòÁ÷©n³ê¤3^À¹W®\Sêq_y¯?bLÃÇàõ©¹ì„o›"˜–Ïh¥/…™ó"€©Îƒñª¯ì'¸9Çß½Kù]<å,íQßâN\“?M2ZRgÕ/A³%ʾW&--ò4¦EÒ!OcÖ Ó±®3§¥ôrhÒç¯ÙcÈÝ!Ow<?c1LǺΌRÈ=•JýÛаWõ­]{¼ZnÍC­K:Þè“Ë-êLÀ{¡ëwý6S‡èw_¹ ØŽÖ­vòé²÷Uz¦Á‰Ö¦¦³NU±ïÍÁCWfU?5 ù(‰_Õ:Ÿ~¥¬®'ùi’­Eö5K#BßÍø‰r5Ó!O£¦Úî÷Û«åççTJZ:4éó#YY‡‘6‚i`Þê«Öh4šjŸUíNÄ´þ†=ˆ.@œh3À4 BÐh4šj{¨v+cÆœUZˆˆh=Ô™:²¼£oy©Ë»'>EøR.¹öh;DGï`y^_µW˜žÊÎʉdù  ç\+yT€2ë:³rʬ™¦ây¢ÔXžiWüîÀáVí­¾›¯äè;ûÖ0¤é{ýa‹€)q8p7â:{ÙÜé0kÉÞú•Ætu=Ñ»›ö6éä“{apò×ppLÉ„¾›ÎÚð¨=­Ee(±÷€®Wê0öB¾€T­Ü–«!£€¶‰Ø2F€!wÿXl u|SzSžT'IDDë öh;††Ìƒé«+2]kçAc§Ô·}$ê„S'Ý´'³:.]ñsr€08)•LìÚÛLaÿ.½tŸ½˜~/Pklrx›t^À6é‰^‚öxò˜xóÈò²ºž›ƒ·8ZµÃòd\u@zTž²ß³ƒËß Qš­Ïýñ›ÿüôÇû¯ÿýËDk@¼ú³Ÿ¿´øÑ-•Ï|Wù­j*.é¸Ô³(w¿ûí›ü=TâÂÜ ¸Þ7‡å~"qÁ–®ÄBl¾#oæJ ˆW­'^ŽF‚9úh­‡?]çÑÍ\æADDDD´¦L­ƒi""""¢Ú`7 >n~÷Û7K=""¢Ç¼´\ ¦Ëï ""ZO<òÒ 0˜._›é>Y""¢òÇ#/­k¦‰ˆˆˆˆVˆÁ4Ñ 1˜&""""Z!ÓDDDDD+ÄËW@¼Zê)ÐÊm²?µJDô8à‘·@<Æ)1˜.k|FÏÅÇ”mP<òæÅc\–y™F£)õˆˆˆh03MT¨B.iñ!Ñc…™i""""¢b0MDDDD´B ¦‰ˆˆˆˆV豦+Fí•:c¥Î¸ct¡ÔsÉ)äiÔHºÉ×Ò÷ñw»‰în¦Ñ*Õl‰ˆˆVl¦_«3j]³¥žQ¡¾¦‰ÅJ=‡ì¾iÁîL¥ÎX©³o ¯~ôÙmŽ)}÷"Á{-Unò”ÎX©ëߺú/‹¡mbÞm±¸çc&÷|,‹Åbóî¹ÓžKW—ü yNÏY,ë<ÃljVgÌöUê©¥ Úµ:£V×? 9Nm]˜v)>»NøÂ0ëT~ ¹fÓZš3³NRÔ›£CÆ4šGâÃöO¯ìçIÝi|ò…XÝ~‰TÈ!ôFÈL ¸|½¶½~{I(Ò°á»öïZ*Òx% úköÀxÌ ßd@`È^cµ–tZ›\4\V;Qð¾5“ü¦ÞŒ^²@ûHô‚UY§®u go£‘`4Œ:kåw#Áhdò¬Ñá<§Œ[gúµÇ½ñÁh$x1gZJßâÎÛg„¾›‘`ô’ bïæ°©Ô6B0 ËÃý½Ûf€ðõ-û-Íñ¼uJ©†”º>a—ß:á«H4ºflu+uƧffŸ:Ø[`¸µRgß6£6TbÃøPÛ\­[À»]ÊO« ŸÕ _ÅL¿œÃN¤é}¶Ú—Wjâ·WKEœ»Ã$µÚ^«±BžÓsîóªÿË)§Ì¸™‘4•³ŽvÛЕ¬AgxôÍ!@tÔ+›k]RHªêý¦î(‚épè6a¯28^8w"=.7žð…ãÅÓ®Ö!ð6¥æËÓ3Í·ÞlΛ{ÖïܺN&à9ò°¯Y—Øu¿3u¿ç’™r¢ÕÚÁ4±m¹2»ÕÛ»täP²Uo½ .F‚‹‘ÉÏT8œŠÚËýHð“v@ìÝ6£2 P{ÿFß¡ï^ÄýYÚP3ý•ǽRÈbdòóýxày¶O"ÁÅHσ\Sö?uÜ aߎãÞ¥ÁÉÅHpñ’ bïSÉ¥ï³\É2«ïT¢6Út¬ëŒPm¯y­Í°’Aiy”Ñ3#i"*wGLÃlwïLøž!KÚ8ì;;  a¯"ÔÖöfEüZõü Àíù°j‹w¾>&BxáPbÓzçHØÆ"Áh¤§^ÊpK™æÈäÙý‰=X~ ޵b¯[ý8Žð5¿/ÒÏôpLIiò±vˆ³3¹‰ÿÕã^GS÷û|¾ÿ0¢ÂmŒ`u/~~«uû­¾ÏêRšãwšŸSû/¿x#s¨­W¼¾b]€ªÏœÖeŒ)îû<\Œô<ºæ¯*æJ±ò¸@Å…´>Ÿµ¸—Q·­`ØSã†âß™:Üt3-{Z)†f$MDAíÑvï[W–¿]Ø×|°W XžWæ­ëz¢)<¤¨Ú5«7ì¦î„®^žêh·áÖÝpø1G˜L_ñèxŪ€ª“N«¼“ý»ôÙ¶ öÐ¥úbK•<È‘ZõGl’ixq_§µ§Pä²z¼m`UŸ].^H g+Fí;SRÒ÷“öU^Ä¡dÂîGŠïäÌ´ô%_5Kï³ñ3£!ñ­¡mBºC‘Ö #i"Ú(êØ††Õ/‡îÚÛà½Ú-†R$ ÛØkFt[ë’ ¦oôÉåu¦à½Ðõ;bÃ^›©Cô»¯ÜlGëÒ·\-9“¯íÎÕs÷®bïœ(ÍF ¦UY"Êë¨p%Ò ðiDDDDD+Ä`šˆˆˆˆh…L­ƒi""""¢z"Ƨç–+þ‰’l²¿ÚJª6÷zOû®|滫S£Ñ(ÿÒ/QQlî•XD<0)ñieÏè!>ñôñ±Y×»êïð*ÃŒxhílÖ•XD<0¥a™QùâŸ]$""*sÌL•@!i9æÞˆˆˆÊ3ÓDDDDD+ÄÌ4•žVgT~Ë› ‰h£`0MDD%¦Õß¿àè±æ·Æ/μýŽVgd* qñQPÐ/ï+äiÞ‹–/ÛUìMxu[hÀåë°°íõÛK9ÑR‹{1¼×Rµª=¶,F‚EG9Ú¾%±wÇêcå¼’«Ï`´ŒŸé:fƒÙj™{?¤Ò¢òœ>ÓõZÆù­¡m"6ï¶älÉÕ?}VE‹Å**žðÌ·õÿ¸÷ûŸ?øÀÓßÞŸø*þ.7 ¡ïf$½dƒØ{ ãj§¾Å/e!Êû–"õ[ï F/Ù }$zÁªÇ¬S×:„†³7‚ÑH0 FµÉÞ3ýÚã^´Èo­÷ÌÓ¥®‚W¢ñ˜¾É€À½Æj-`?naÎý“RƒéBXšö÷ºg€ðõ±ý–&Åñ³ð”³çÄYxÓ°¢«òT;5yP@ÚÀ40ï†}(€ç”Ï:?Ñf0ë:#¤\K tW_“SÉVŸ”6òÛƒÇb±X"ÞÍèòœ²ËÉ&µü¶i‹ ˜€§ñÞPd ãgüöꜗ”)ŸÌ¸yFÒ`y¸¿wÛ ¾¾e¿åa¢9ž·NÉ"KÉ`׬üâ„}‡"+¼ÕÕº¼Û Îou%—ÒÞ•'|©»Î—rè­÷ï“£ ª3W™›2±}ÂW‘?ïž*4éCj²Ê°§ÆŸºT3ZCv¸;Lí`E2gU _}µ´´ô裿†oßz÷í™ÿøjé+Ç^¼¾ß̼{­È;Û”ô»·î†¥kª'|á™~­®:QR(·Û›åƒQü­ÄQ)~16å –2š½ù„âÚlâ­Ô‰t´Û†®d­` ¾9ƒ®“zµwC·{SèÔ‰%÷¨z`UkÌ<.¯6aŸs%Ú^«±BžÓsîs¼Cò€©ÑTÛýŠMJot ¦ òüÛЕÙioï÷ŽJ¶ÎôpLI'Ðcífç 0Óß4ŒD£,ìk>î'£ñäÁ«Ë]À†¶7Üs‚¦Úg•×›i ‹ÅbÇÆåH6ôþΉU*-iKê5³aO Κî€2ë¤Üë„´FO(4éóËÕv¿ß^Ýxz]ÉJáô )£çMIÀƒ#¶-Wf·z{—”‹Ho½ .F‚‹‘ÉÏT8œjµ–û‘à'í€Ø»mœ#ÀöI$¸éymí‰b’Îà'íÒà³ÛSúî]°.IÝ„¾{‘à½Áˆ½O°*— ûTÜYPyúܾǽKƒ“‹‘àâ%[»Pt'W|ÁiéÄu§+1 ë¿¢Yå3óö;Á÷ÞýË_þüQä£ïùó‡.,ÿh³¾\÷ìaijÔEÝí¦¾æá…CñÕÿêq¯J?q_g$xs°ð6]1ɇ*±×=è­å|ðäY¢Ã©(h”FÛ×ùŠ ˜êôÎ&öØñŠ5=*>bêLg™çÝ;S¾gPÏ7ë ûˆ³J‡ÐwSš¹t U=°ª6ª—×–éXסÚ^£¼BdqÏ'*±”×|Jo||šGaê^<ûº¹ }7¸úºÜ6}Å  ãH-€ú#6 {‡®ÌE²1AúÄìuÈ-âä×úw´%ÿ {jz«i ;Ö­taqÏ++—CžÓ™£¤õL±ØÝ€.1¦Z³a:Ö%Œ‡ ±¶øÈ§ðÆÄž!Íx|rf«Å÷~&ƒÊö”W4ÜüÏ.¨{ñó×ÍÛÑwω­¯'›+Fí;S¹6Ü¿kiUí#‹ŠkÇœ“·ÌOœlŸ$"é¸%Ã>`ªâΰŒ Êyg^qÍ_Àa®Œ/üŠ; KN÷bë]º=Á8Ÿq3Bèý9‹±#{K`È÷¼ €t6ÜVȾdôÏ2«ÕÑh4¿üÕÆïîûäÓOc±ØÂŸÿmÈSû¯Ï54xê›ßzî~òÃêi40ìÚD·‘Ø{@× í#[ª EÀâ¾Îˆû"€™þ”ÎÂî]‰—{Óáãöª¿Õ‰Ñ0ÛïÐp`ÚY5y °­Ëì]{´½õ­+¶•ü,u=шɩk’vë0kïŒD#é û€)ñÎB*VÕÆé;*Çå¼Yå[‰¦·åLð˜ å(Ð-̹ç «˜ •3Óª:y!½qþ½ò¹rf‰XA¤›â÷ý„<‰Dpèý9‹Ñ`ØSã·²é"TjŸ§ÛL±ywjÝ¥üÆÏdÞËéÌ[¾É"4éó'j¸i%6y$ UŸ].¦²R<*ån?YÛŒÑB…X„Q*B·,í­*|ærfZú*pá‡<)1«éX×™ñ\j™-ò†ªÕÒÅ‘>«bjhþÉ/uæÄÉ—ì/;ÿ£÷—¿:³ßüú=ÏxôèáÛ\ûå/uíÚõâïxsj¦ÓŽ,Š ¹@R$-ªÒ3¸ÉÑjíƒ €÷-×ùNÂà‹õjCÕ± «åÅ]{¼Êq•¦Ö%ý87úä•ì]U¬«;ÚæPðJ„tnšÿž"f¥7Ó+WÄ@ª Kd©U?&â׭Ϋ^ö* rKzjÆ€ ¦±Æ^Ý0˜­sB¼ôJºäj˜w'Ú²\¦Íècعˆ+ýÂmòQýði˜·úªå­y'"-ßw9°…Š[+¡Àä­®Ö-°}yïöŒòè­W¼©Í3ZØ÷”c Bßý–ªBf.ׄ8Î+ » ™phÒçWÔW6zB¦‚TcU#˜d¶!Ï©\ÕÒ!O£\£¿É!³%GÿÌYåø–ëðsÿ]£Ñœèyáÿ²ÿæý‡^xöË/¾øAín¿;uìú×î=árý¢¡áPþhî*~«ç³¯Gýa‹ {†¦ÃY.æÔ™:Ô߀¾å¥¤Õdþ@°—2•8ÚªXUUËÖL§­‚ÂVbáãg”¥Ô¬–ܨXæ± u=7op´j‡@œtÕu®³—ÍŠkLRÏèÝÍ{›tò™º08yÑPøžL±XÚKSæõØŒk´Š·&Ôû ÄbY÷©þNr´e_F&JñÀ9²e¸u‹Ã\éhÈýˆ…Ú϶8¼ÛuÞí°}>˜¥×pkå0, Ž<¼Üú¤ˆ‡—z¶8zwœÀ=é·[ìÝ¿>~¿¡<£%ê­—Ôgž2·O"=‹7vï8Ø»]çÝi2“÷ ø ÕÖ•!cAf.Ñ<ë1óíܤ¿«ò¡S4?<ø,€çöúÖן~çw~"<žÿóƒ‡_,}µt¸éÐÍëïj4 –wZzçHÇpëìu4äzn•ÞÚÙÞ+í/©ÞD¨=ÚŽ¡a˜vÅoûnÕÞê»yÁꊌ@×ÚyÐØ)õmIä“HÇÊ–*„ï)Õ,®:jÖÕFµãra2ÖHæºKmIÓ[RÚãÙ´´‘0˜ÎIo½I{¨MÕÉ Á“‰÷UŠ®R:äª'éÔ®ªr‹¨œé­÷2Ñg‚ŸÉ¯kïgÖ·è{ãK#þœÁNùý¥–”²ãÏÒ–O]bó¸–ÄîÛ†}RnFÌY}´3ÏAåÇ/°fúñòûkcvV}çã¿}ºuëÖï쪚þýÖ=ûÕ£b±_ß‹ÅbŒ¥3Õ%Ž# i‡›dŸÚd»âàUï FåÅUëŠ]éÃe¼ä¼uZ2R‰Ša/Tw”¶U¡ïfZ±¥ÊU½Qå¸\·ºši"ÓDDTbçu ÀþáÝ?üé]íÎoø‘ðý¥G_Vïßùð¯ßܹM£Ñ0š.áëc" ôÙUn=$z1˜&*€xµÔSxì©äŒ©4þö×[žþöþ'wVÜy ‹i4šg¾ó÷[¶nÝöo<³ó›?þ‡zð僿ûÚ–RÏ”dÉo²=-Çžë­/FSê)•#׋Ùþ´9QùÑÈÿ˜™.k¿û훥žŸïÂoJ=*Gùz—òÓD%÷˜¯DZÓåëg?©ÔS ¢uÂõNT¸iL—¯ÅþXê)Ñ:yÜÖ;o òô¸­D* ÓDD´®xÛm& ¦‰ˆh]EÕÑMD´Añω­ƒi""""¢b™Gùâ :ÚÏ~þod!"ÚXxä-qJ ¦ËŸÑ³Añ1¥DD¼yñ—†eDEÆ'=>˜™&*T!—´x‰ˆˆè±ÂÌ4Ñ 1˜&""""Z!ÓSÈÓØè «­k¦7ˆ§±ÚîXÜóæOGò4žÂmÕo‰¨`…TÛóYT´Q„GíS„ÁÉ‹-U¥žÑÚb0½vfŸÒµn‘_Û>‰ô<^ÎôW÷&:- NÞËÿAè®öYçcîîÊ$˜Nch›˜(õÖžVgÌöÿH2­†õÄË9Þåo@Ø×|°WT©3ýÚã^ áì ÷I}÷4ëÔµ%¾k‰:k ßÖ혂Ðwó‚£v­nj Bjiz¶±HO}?ƒÙ ¹L#ÁÐ6!Bª’ f+NŸž³š 0˜­‡v¾bÕK9l¡ï¦4æ~ܵ7 ÇÓíyšª -ÕIª&ØTÿÇ–Š#*\ÕÉ êב¿óË®uŽÛµ·À{¡’žòÅ£ÿÄÍ…\GT¶L¯‰¥–—Žó[`v›c °}žv,P`ÿ.ä­™6˜­srEJY„¡íµ{µF£ÑhNk,RÓîDßÄ ˆ¦±Æ^Ýè Á°~H³aÎÌÍÕq”LóÉ1Óïô˪t'矜T|ü@·F€8`’§–}[*…\ù-EºXNº+#wUP¶©®'‘®çÒ”\³¨3uLcaþÛÑ:ET U'Ö]‰M ÈgKheNR5Á¦ú?¦Ú“ù0Z;ñ“ÏóÓËÙ*ój‰¾å¥¤Ÿâ*×ŲÓ̹ô[wsܧ!Õœ€¼Þs)|’¼FDEÄGã­‘Úû‘‘§t­ÛuÞí@âÑx[]ÆíŠëÂÒsñ*FßÌ7š¡m"Ö–Ò"?„Î0‹ äì+¿4 ÈO0 ÄLH´)^¦“ò»Ìýgi7M¤n›xX^Ɖ§˜ø ‚ò”þœ©ð] %z^ 壬¦]©õéj]‘  ñ‡‚ݺ†Õ>Ø0äð¾5ºû=Âà‹õ@fô oqG ýrhë0kï,ëÙ^Ë$ñ?6íZÖÞˆV­®'zcwóÁÞ&|ùHœ¼xxÕº"#еv4vJ í#QgÏÍÁÛ­ÚaydWPpñ±¾Åuö²¹ÓaÖ:”~ñ¬àí{èz³mXïénr˜µŽÅsKj¥&°]J ¸ªI­ ƒéµS{?£à3øÀ™Þo©Å½Ø²Ns"*„Þ°˜ç§[wöÕ²²M²ð"âîÃSCŽ^ áìá*H©aïÐë>{U…s®ëÏ;­úºžh¤'ñhÞä̺ͯêj ­»WZ3'¹ko0õ^huɸYõLµ'ˆK«¢·^ŒXS›ªN^žÌÕAÑÒâŽÆ7õÎ`T:Õ%â'±Ê·dô”–XÚ€Ê=*:Äç¹pS´­Ë˜|愳Ì$s2‰½:IõŸšh%XæADêz¢7úù±SÅ{ ‚t3¾è0kuαìÝRž¥%%KÙe½µSªžlI~zW]T¬|@ªÊ¸…»‰ öŠBßÍÌ´ôpkò~Áºž›ƒ R‹TiíªSŸ¤¾ÅuV+:’¹jµÿ1õžD©Ùøƒ8ÍbÃÙku¢N´þ˜™&*T!ðyƒRÉåäÎo¥uPMw!‘ ªUË]©e›ôÉRFÿt*oÕ¥mnÍšyJï™þSÄ©¦ÄTsiªÿcPé™=ù×ÂióRO0m ¦‰ ¢ÑðÏÑúÙÏ_*õˆˆh%L—µßý6i´N|~Sê)ÐfÆœ4Q™à‘—–‹Átùb¦Šˆˆh=ñÈK+À`º|1SEDD´žxä¥àÓ<ˆˆˆˆˆVˆÁ4Ñ 1˜&""""Z!ÓDDDDD+ÄË×&þ!Åõ³Ÿ¿Ä[Fh£ãzßÐø)Dô8c0]ÖøŒž¼ø@PÚ4¸Þ7(~ =æXæADD´BüÛ¨DÄÌ4QºBÊ6XœCD`fšˆˆˆˆhŘ™&""" »ÚÀûM) ƒi""""™õÄË9ÞF‚ë6Ú(Xæ¡0Ó¯Õµ®ÙrÜ]ÈÓ¨‘5zB*ÝÙß¿§é¬fÂDëoWå2M»ŒZÑ9SÌžDTr±ìJ=5*GåLÏ:uF­üÕ?h–¨ñ¯æÑdyK{ÂÎ3¸bØe)íA=¬¥…,ÖØO¥Ìnéý‰6CÚ–žÆø{"õHœ(.ë‚R®Mµ…ßpcÄ‹å£SùHY©_¥žÚæUЇIÊ=¯õ¯|˜è[Üê±Añ0’¦Ê(˜¾9ƒ/Ö@­}°ðž]‡nö°Hô»·î†Ã¾æŒLö´«u¼M‰ÓYe.‘»õfsþ$w\ú çN(Χ¥w¥qT÷%ÿàË9¥Mú`5”Mñ3~{uŽJ޹÷CÒ ƒÑ’xM”O|AMËkÓuRŸ¥gØwvl ú¯J¿ßò�9}ØÏ…å­šuFí‰~牔%Ù<º©gŽU™¹ äÑ|á™þ\ <;i%¦\þRû$A¼fC«36 +¶WÛ]fÏõI¡QeÆÍŒ¤×ê‡ Ò××¹´º|­ÉWø!8ïJTFÏŒ¤)·2 ¦ïÞ™ð=ƒ4ë ûˆwä³JGªð5¿/Òë­å4öäY¢Ãy.ŒzçH9óÝS/%¼¥ \dòìþÄ0–_G‚cí€ØëÎ}Á:ìk>î'£ñÞ«£8ùŠ ÀЕYÄO¯;^±êUz®ìPè®öYßH¯äºäy÷œN›æ­>9Ô®¶ûködlL¤*± º6³÷|ÑþB05vMùë­\PU'_±SÞÙÄV¯ôØ_hnχ!9‹w¾>&Bxá^eÕ¥—Ø£ÿÕã^ w53ýSÒ°±vˆ³sPû$ÁLÓ0=ãÿj»SíI2zf$½¦Ô?L2Ž×ϧÐå­w÷,ÅЉHšÓ”MÓYÕõD#Ò²¤¨:³Cì= 3JÇBéBO<ÉdîÕGM.3¨:é´Ê‡íý»²eßÒHk^Žò{!u¦Ãi,Ìß`;Z—¥g\Á×§ÝšÓÆùŒ¢h%ƒÙš™{6´MÄCm‹Å˜ck"YÆ‚Êiáêå) ¡ép•þ°EÄËדià´¥X W/OI DoØLÝ /\½<ÕÑní»áð¢2|O$ׂ÷uF‚ÑHÏ®œ‹.“üp¤@ý‘äñ8ó“DÙ3÷”T{®ÃõhZ R ÍHz©˜d=^g*ø\àJd$M…(£`z×Þï…ä^juG­KÊÝè“ 9Ò6–OXåRÎð¨ý€cJ: ]ë„|²›Ü»\ òÖèõ11Qµ¢Ús9BžÆ´H:äi”k:LǺΜ–n, Mú¤Üsò]ŧìé"DªRTÚÚL7s¾S0ÕyШ=Ø+"÷UøqïL,:Sð^èú±a¯ÍÔ!úÝWnKGÁ\sT]PÂî]yûl¹Ÿ$«Ü•9FÒkny&ªŠvVFÏŒ¤)·2 ¦õ-/u¢ãü4̺S€­3í¬1üˆüÉc©bäsSròI¾¿aáœkÙwMÅëOΧ=D:ŸrôŠhh:\•£§¤ÊФÏdatÚ39’•Õ>kæˆò“ñª}ÖÜim"uñµé<§¶H¤¤Qâ@us°ñ´®úhÒö"¾@€Ú£í½C‚åy}Õ^ajhx*-,N!ç‚*¼’2È(«~’¨žZ¨îNµ'k¦‰²Éöa²¬ãu‡àBV¢C3’¦¼Ê(˜j]òC<ŒZù±=õŠ;x¤ 4ÂàdÞsJ©’a85ŠÍ\ ñ¸ûwéQU½€²`:C! ª>©Ëùæ`ƒÔÒ4 apÒU§þI¢oqäKÆÉÕv§Þ“ˆ²Èúa¢r¼N= +G)ê!˜‘4Bóõüo‡žþøoÿõá¿™h ˆWÓþZfå3ßMûã™™}¨¸¤ÿáRÏ¢Üýî·oò÷Pi#,Ì…s'Ì":.]9 9+\ïå¦E¯ZO¼ì»ð›/º°`/ñªIx>wŸÌˆˆ6ºÌ•(­neqWfmóMãÓ¿ñωÑú _¡ÏÎHšˆÊ ÏiiLÑúÒ[/F¬¥žQñj©§@%À”3­ƒi"òXƒÇ IDAT"¢ü#DT8Óeíw¿}³ÔS ¢uÂõ^>|~Sê)цÁ`º|±r‹èñÁõND´A1˜._¬Ü"z|p½mPeõœi""""¢„Á4Ñ ±Ìƒˆˆˆà#7‘õüsH ¦‰ˆˆˆd¼xXç‡#1˜._›ûü8óïÕ¯~LF£üËŸDÈæ^ïEÄ?¾MDå†ÁtYÛ¬çǪ§Œ«<@2¡n³®÷"⣸‰¨ ñD""""¢b0MDDDD´B ¦‰ˆˆˆˆVˆ5ÓT¾´:£ò[Þ\HDDD写i*SZñ­ñ‹o_ðÖøÅ_þ¢+-¶&"¢Í*åLKñqâ넯¢€*Fí•:㎬§°ë<«Ù§tÆJ]ÿÖUî4¬c±X,kì§XÍE‹aOMÚÁ5Þò4žÂGã59«bøê«¥¥¥Gý5|ûÖ»oÏüÇWK_8ö²àõýfæÝkEÞ=¡ۄ½ÇÑÌý4‹-,üù߆<µÿú\Cã§¾ù­çþá'?¬þ‘FÃ.Þ’H«ë‰FLNTa ÑaÖÞ¹¹×/p˜µñU)*>:#î‹fúc„Gír.sI½3=Ò¯}}÷Í ‡®ž0½0)çÀêÜѼëÝb5·µÍ£±º{OL*۸ÓYêÚ t sîùCÊ(RZzÞ”6xÊ'Æš¬_¢bª3uÀ+­Ùú#6 {‡®ÌºêjYê”ÈXoØL‰ŽóÓ-=õ)ãôD#=ûšöŠñ…, N29M«·‘‚éŠÐmKñK´Kƒ“)…Ñ3Œ-j?lØâðnÝ]!biðÅ@…ê¶á» ì~”¶¡ [âæ•IK#ou·gÝ$}ï…H/ 4ëÆ&B“>Ík•–µ—­¬³š"ÅÓ¶cÛ'Ÿ~ÖÐü]U%€G¾ýÁµKÿóÿô§?-þŽi“«uE‚.@>¦Þº{w/¤S㟠»R7V€§]ƦlË\*ÎÐD³öÎHÔY[øD mo¸«=óæ<=ÕCi)-“ZÕ>ÖrýOíÑv Ik­®çæàíŽVí0ƒ“®:µöÁ†!‡·Içlc‘žèÝÍ{›tò' gòXè»é¬Åè›%øQh“Ú8eaßSŽ)}÷[ªäÊ Çùü7#¶,[½hxx¸ ‰ªŒ|ÛÊ{ß0ﬞ¸“HV-TÜÊ2¬ÚÞ ©™Múü‰ ½M£'d!H5†@fK^!O£\\VfKŽþ™³*d§:üÜ×h4'z^øÁ¿ìÿyÿ¡žýò‹/~PûƒÛïÎ_»þµ{O¸\¿hh8TÄ=Òã%ü`ÿ®z¹öã|!©½«XæóY–yžÝ.ㆶ ±Æ^Ý8”ûÏÆÏ(Öab)ŸJ©–Îü|P]¿¹?ˆÖTÓ쪤ë<ñúf©=í>BEcO=”åXr7åVÑ V=k¦©¨6Bfz¸µR:%úî]°.¨ëY¼±{ÇÁÞí:ïvR®× ¶­Þúy{ïöa ý¥Ï¤[éU·=\À†ùfµäÙ2ܺÅa®t4, ‰~r’{»Î»¶O"*{¿_ÀÿZ¹…a Hi1e´(¶Ÿ(hØÜuéïšò¬Ü> à¹}‡¾õõ§ßyçŸφçÿüàáK_-n:tóú»ˆ­Õîi3JË%dzѵ™y¬‹™Ÿ €zçHÇpëìu4‚z QOòæÞîç¯Ù\¶Ü¼`-ôa)«Õ4ËûK®ºð3—rz7ÕÅ^@e¥(ï`º®g1Ò£þ–Þz/bMmJt®UnõÀ|àÌ»mf‹œ]~x$ã²lÖYÕÞWû{×K-©%Ñ*{/°fúñòûkcvV}çã¿}ºuëÖï쪚þýÖ=ûÕ£b±_ß‹Åò‡D õÎ`Ô©ö†Þz1ã3!¥Eª¶ÈU")›'ßMš aߘ^z:ž+Ië[ ¨™&"¢£¼ƒé _ß"Bßg…ÝzHEwþW—üçÞýßÞÕîü€ ß_zôeõþ‘ÿúÍÛ4 £i*_u=ÑÀ¬ÏÓ•ˆˆ60ÓY¨äiýüí¯·<ýíýOî¬8¸ó@,Óh4Ï|çï·lݺíßxfç7üÿôàË÷µ-¥ž)=ÖLSYs½È?lLDDDå‹ÁtYûÝoëg÷Hùi¢ÇÄc¾Þ‰ˆ6(Óåëg?©ÔS ¢uÂõND´A1˜._‹ý±ÔSXWñj©§@T2Ûz'"Ú4LSYÐh4¥žѲ1˜¦²U{D7Q™Û8Nœˆˆˆˆ¨Ì0˜&""""Z!–y•oÀ-ÐÏ~þoÖ$¢²Â`šˆ¨,ðéxyñQÜDT†L—¯Í©JK/U>óÝÕ©Ñhx##­'Óem³fªTÓK«¼t»¹Ï=ˆˆˆ¨<ñD""""¢b0MDDDD´B ¦‰ˆˆˆˆVˆÁ4•/­Î¨ü*õtˆÖY »ÑJ¼ÖÄuÔ[BžFùûäfÉå¶ÌqˆˆhULS™ÒêŒo_|kü"€·Æ/þò]Œ§)¿™~éÔË9³ú±f:£V×?­Ò˜úuÂ^ýÞR…<p&ñ}`b,‹Åbóî¹ÓžPfKÈsÊgÅb±˜Xc?• §ÝšÓè²d‡ˆˆV‡Á´ÂL¥ÎXéšU¶mu+uƧŠp`^dÎ)‘tJd˜ù¥ÌÅé¹*Å›™i¬¬SÞULªÈ‰.)’þVåÓ?úñ?øqmÿãiÊkúŠWz1ôzñ\@­+ŒF‚7ƒ“ÑH0zÁª/ön m±y·%ñ½i`À$½ ý5{ j-ɉ CžÆÓÆù‰cÖqˆˆhu6o0-EƉ¯¾Š,+Fí•:ãŽÑ…¢ ˜}Jg¬Ôõo]Öä3…‚5r>IN:º)Ã4€J‹$%/•6jZöK­%GCÛD,Nì‚ÅhXåO™f÷ùáÓKKvê ßÝ»·¸ãÓfö[‡ˆþ«ñhzÚ•Ì"7.¨¶$RÚ‰Ló´«u¼M*ùi•]7ë2ÆLÝ‘”/Ú•–C:{?‹ÇÃ)-†¶‰×‚ÕF£©öYßh3!Oã)¼1ÑfÈ7­Üæ ¦%í#‹‘à'í€Ø»-Kvy©Å½ Þk©ZÁÈ‹7ú–ÄÞ«•óJ擤¤S`üL×1ÌVËÜû!• 3/•*=û¥Ö’»¿,ä9}¦ëµôcöjÅb±ŠŠ'<ómý?îýþç¾ðô·÷'¾Š»;ÚèÂ×ü" ¼ð¢ý…`jìÚ€ð¨½i8žBŽ/¶Te¶ ìk>î•[.Ù ö¾:ºPïéÛX$ôÔçÞ·Þz1ŒF‚ÑÈäY¢Ãy. Ìô7 í#ÑHp¬}õ?Ÿtözl+¼ªq¦û°"«Ó’a€Š; Ð[ïE‚‹‘àbdòsç¶08G€í“Hp1Òó ìÛqÜ»48¹ .^²Aì}jyW{Ýñ ¸PÉKâUΦ¤B…ô_›´ôÌÛïß{÷/ùóG‘>¾ÿqäÏ~¸°`ü7¢Íúrݳ‡ÏRw¿´QÍœïLu4jöŠÄ^÷ ô-îè%›ÔEt˜µ®ÙÌéu"W£ÎZµ}dµpLI## .äéŽ/ÁÀø‹ÑÑbÞS#å£!-}õzèÌqˆˆh•6{0-c\²a¸5-÷œÃÖ+^,ïhŠxŽYßU;\óWs¥ÎXyÜ  âÎBÁu&nÍiã|fäûsiÇD¹E%/eŠ7˜®6Ð-ÒÒæ—¿:ó¢xëÿ÷í·ÿÏÍÿoöæÿ}÷߆<µÿúœcÈöÿœûÿ+paþOÁÐÝ`QwK˜”NÄÒ ‚CWf ®' Foô ‰Þ©-zÃ>¢ã|žÂèìîÞ™Š¿\˜¿%¿Úµ·À{¡”æk¦CžFùX£éÀ°Òy±F#@œh3d¶˜æÝsB¼fz^½:s""Z¥'J=u¡ß½Tܺ[q¤øcW„nXÚ[U1jßá˜Zœ¼×RµÕ•«>D과݄<Õ>k2’6ëÆ&“”„zÍ Ò².¤´t¬ø{khþÉ/%ßë¸ýÛ>ùô³†æŸèª*xé…CKønÝ­@®¬ó£½ ÀTEhuùBÞ°ï)Ç„¾û-UO¸’©©Š[êÝ— û€© Çù­-=ÓSDáÙöšôùá÷Wkì‹{~b@×h4Ð%ÆLL-y…<Õv?€j½KŒ ˜TZröyNÙáž/hgËtø¹ÿ>í»ñóîýÃ;Û·o¾üò‹/~Pûƒÿçÿ½÷Ñýç×»\¿ˆÅÖ`Ç´1¹"A—ò{½õbÄ*½<Ù’ÚµÅMkIíŸlSí©þVmú êä…àIX8wÂÜ)ÚŽÖA_—uL""Úˆ6{0=ÜZ)eˆ…¾û-UÀ‹Ÿ Þ'ÅÞºÞ-µ¸>¿l~Òa®Ì‘ORŒ|ï‚u XrŽlnÝâ0W:–’—“k?lØâðn×y·ÃöI¤gñÆî{·ë¼Û¥} NÞ/àçPK9 HU)¶Ÿ(hع-µwsw_•|Àsû}ëëO¿óÎ;?ž ÏÿùÁÃ/–¾Z:Ütèæõw5 ÀhšÊÙ¬S'=_@ÃÙù BDDÐæ ¦ëz#=­UŸ]~–Þ˜èY›ØD­[î‘ÔÞ¨”ð.µ¸•‰(½õ^z,µ~m ÀΪï|ü·O·nÝú]UÓ¿¿ñúg¿zC,¶ãë;b±3ÓTÞTÓÕDD´©lÞ`š6¸ó¿ºà?ÿðîþô®vç·üHøþÒ£/«÷ïŒ|ø×oîܦÑhMQi1˜¦rô·¿Þðô·÷?¹³âàαXL£Ñ<ó¿ß²uë¶o|ã™ßüñ?üÓƒ/üÝ×¶”z¦DEó»ß¾Yê)Ѳ1˜¦²æz1ÛŸ6'ÚT~öó—J=""Z Óeí1ÏTIùi¢ÇÁâG,õˆˆh%L—/fªˆˆˆˆÊƒéòõ¸eªâÕROˆˆˆ¨@é ½ ¦©,Èm†ˆˆˆhCa0Me!ªöˆn"""¢2Ç`šˆ¨ôXæT Ÿýü¥Ç­ŽˆÊƒi"¢²À{ŽózÌpDDåék¥žÑFÅ`šˆˆˆˆh…XæQ¾XCY ÖPQ©0˜.k¬¡Ì‹5”DDDTB,ó  ŒO§&""¢ÒbfšÊQ!e,ƒ¡e™v›†Ñq)èª+õTˆˆhafšˆÊÞL¿VgL~ð…×c¯³NQ«ëŸVŒk@xÔ®UíCDD ÓD´A}7#Áè%ÄÞ®ÙRÏû^uL¶±HO}©çBDD¥Â`z³ y=¡RÏ‚¨hô»·î†Ã¾f)K=Ó/å†ãyb£Vgl]ºO»ä–¦áøŠÔ²ô®sFÑO~Ÿsµ€·I=÷|÷\w¯t\ŠGÒ©›‡±pî„Q«³Ÿ“²èñÙNÚ•Ó#"¢ŽÁôJ9NgRÑóy5’î@¶FÌnÅ îl•«ð5¿/ÒË þW{`¦ÿ€c í#ÑHp¬¢Ãìœfú›†‘hÌe¦_{Ü+'¿#“g÷ãyçHØÆ"Áhfîy¸·SÚGä ì°¯ù¸WœŒÆs篎âä+6`ªÓ;›˜vÇ+Ö]Eýß "¢’[ß`º4…« %“”i$ùGˆg›Ö‡¡mbÞm±¸çc¦Ue»Îœö„„<§!®zÀµ”òÛ’úUê©Q)ˆ½tF)b¾ØRoÜ× F#=¸âÐq¤@ý€¡+³ÓŠÆÜ䞯XõPuÒiÕçÙ02ÖR¬,:ÌZQ{Ü @¼³€:S‡Ügáêå)Àv´úw4LΟˆˆ6¸Rd¦Ë­ð1/¡—¯‡`áÜë·¡¤“ y=žne¦:ä9e÷ûíÕM£'¤Hc«'«Mbý”'à9å³v˜âc¦m’– WÙézˆF‚Ëj§MNN£NEp,ì.M®·}d¬€·Iñ!&g¦““¬µ6Þ·\ç;Eƒ/²´šˆhó)]™Ç2 3êÕZõ‘‰m3[TÆÏ˜C*KÓþ^÷ ¾>¶ßÒ¤x£ÐÍ,³U²ŒJ¿=x,‹Åbr’ÙÐö†”·ŽM´…º«ƒ¯Åb±X,6oõR§;ܰ >ëmdl讶׈±X,6Ø9}§ë$3nf$MªÙh$ÒÌGjwímð^HmqݺÎÜüuŸ|ÚìÊݬ^ªnuÎ@oØ@tœOûôжÀаhh:\…¬w""*o% ¦—[ø˜VΨV¡¸µ7 '“C[ª2[ÔÇO›C†ç؆®ÌN{{¿wäP²µðMµÙ®üÿÎâ–3Ê£%í­Ðûs8#H äj»ß © `ØS“k“Ðûsñ]ÌVË™ñ@î®1eôÌHš²ªë¹9Ø€áVéJùq_gÄ}˜v¡,|ö]™=ŠôrÆð¨]à0kñQï,`/ •-: N&ª•-Ói…•ÃÞ¡+³.[ÊTÔ½xöusún:qõu¹Mu(yª©5šÒ™Cúl òk}‹;Ú²²ÿJ5÷üD›!ñmÈs:½G [€(Ö§‡‹ˆˆˆèÍqfúHpº¼h/lL;]^íg`i§î‘²K¡ºFØŒèP~.'²uÇADD-Ž5Ó‡ŸÈ¤.o>—nt,Do`cÚÙÇÈb>Òù惹cùÁ:ÖëŒæÒQ »:^“fWï¶¿y0DDÔº83}Èéç¤9?M--›y@:mI^õÓÕb’8›¯7¦®ÐÀe¯Óålè:+‹¼Îè¦ýÖ– Á%ì¦Ì×£†9ìÈFÝ3âDDÔ¤Z5™HGý3)³ÐëPô.d¬Ë­Ù3óij]nÏr8`øÛÏ&úãÒìj>—Î?‚<ùyñ˜ü¼?œûlÀÜ£MëâF? ºµqÅ„·4µ•Kçs«·Ï–³TpÁû¹t^Œ AGîfé¾y`d1ŸK/ìý/„ˆˆšAS$ÓÙ¥ór"‹»—ÕÙ£ 6cá5ñáW¼Æj,¦<UŒ™ô9¹P( ù\èº5Î+Ÿî†ŸÄI´'|ùÜâ¨úNœÑÍì÷IY˰ûãäçjâ+ŸË¥ó¹‰.ŸÀ|j;ÛO }è+ŽjL¯Û¯D‚(3fiê~`L6Ž|ÑP”âŒåõ.""jqMQ3ýâùšôQÔýaYîb…시=é¶.’¦¶îÝÓÎþÉóÑ“{R[Ù¼ü3êoËãí1,á.×4 IDATÃ:èRJ–‘M \˜”Ÿ¾xq̵ËÙ :©®šíž Ç¿]:õ£ iöÓ®*¶TS=´¾„z=ê훯~ˆˆ¨µ5xfZöÍCœ&e¬]0ONkê…ÝÍÈ…IÀüU§+t×vþÙ}JðôEÖP:9½n3€j+&õåb]k‹Íø–LkíA ef5`À£¼s8ÁËÿ£âOý›#j¸ìÏ2€³'»”Ú¯×ËvwÐ#sáIÝ}R䮋Cæ¾æ;w£ T7¦Þ‹çkêK1ù 'Owø1cøÓfÍ4Ñ!ÓeålLŸ¯iE‡r8ÙèŒ>ž’HS[¹Ø›Ùiˆ+¿ÒGï« Eé¤íhÕVLf—B}óPséûƒíÖûñ1l[×zS©ñŽDðΰG}_¨Îo—è@næ¡‘Nø&ò§$ÄûÊ?/ÏUË#×Ì ß„ø3?/Š4ž¢Ú1uº"‹£JeHdYÛæ`ô¶¤”‹p®šˆè°jp™GW$¿8íüòÔÖ½÷¿»XþÈ|]U_tØuqóñ¹G›Ñ¡Ò#Ê“ç]“0²x°bJY>3–‹ÝÖ£^ëhÂ\1™] ÉÂgXõùNâÃ2l¸þ«o)­Cv)dZ«ÞGt ©qÇMïöJ1•À/m¡Ã¨+’ÎG츃÷sAc“µÅ²ºo"Ÿ›°y]rLãróŸ­ZbÐ~å^ú ìܽ“‡>ôÁí{“¿w""j: M¦Å”0༠œÏßì!²¢fÚܨ•NÖ2’¹b²3ïQ–Ã"Θ©e¹ÄPú܃æµêßßÌBoG"hɤ5¶Ïîà=ˆDe3âº:§¼î¾ýx¢šZm""j-Í^æ¡”3êŸiu±þTÛv´*&}ù\:/ŠLìZªÖ¸VÝ5”™ÕDÉPGɧãYóffÒD¨3Z|Ž}Mµº†ÎLû&ò9ÄõÕéDZ?~:ÿMͤ²obköÙùðUç<H³«QP÷CïlGÃDþœýj}ˆ4µ™È?>5pa²Ï¥LœK³«Bä|X½ÇHšÚŠtŠû÷õ-@gÅhmÖZúª¾½ñ ¯†+ôÉçÒÚü43i"""¢½ÕèGãm¤æpfÙ­>Ï®‹MI±m9£µêÑ®§}rU“–톪­M‡7ª™®LäÓ̤‰šÜ_ÿRçy55P£“ißD>ˆ¤YM¸˜I5¹?¹Öèˆài-Õ®ÑÉ4í>¬ƒ¨µT|žÖR˜LB‡£Ñ!µžÖR˜L7µú.6%îýyÏ#!""""+&ÓÍ‹›ˆˆˆˆš“éæÅ‹MDDDDÍÊBL¦‰ˆšo®ÒÇŸ\ãD5&ÓDDM•]ñ™e´ßxZÛÒu²ÍdšˆˆˆHÁÓÚÕÀ“m&ÓDDDDE,%¢š0™n^¼ØT%ÖPQ£0™nj¼ØTk(‰ˆˆ¨~×興ˆˆˆZ“i""""¢:1™&¢¦·1ítyµŸ¥Æ…²ÑE¢ü\NdÑá¶õ:]ÞÈF#FË&̇í0½®t*ÓâuºBwÍGkµÝöHbCñXâ`¨ªÊ`”¥Ù¥áàݬýr1™&¢1²˜Ï¥ó¹ôýÁöÆÑÍ¥ó¹ôÖl7iv5ŸKçïÝ ˆh_ˆtÍ”KUEdW–ÔÊ8àÞ¥È%6·'²?¿÷ Ï¥ó¹Å÷‘»Y¬G¯â8<ë‹n6-€¡åœX1vÅxt°íŸ] 9]W窋ÓÎ~,—8Ú U2ëR÷`,¯¼M/@:mßÌÎÝËÊîä ïO+0™&¢Ö#>‰ÅÔˆ2•r9‘ÕÍš'ŒEãåDvcZùÄÕÏs«G1 ~ÆÅÚRŽqÓZý "uÑ6trˆªã›ˆúÄ«öÓ€Íoç‡>ô€ûƒé鋬MKyöý݃±üã)©ª°þèÙíÇ]%6Pn(!›°™¢¶év{~hl°ÝÐßÌÎsYÙøü£òÏ/*zX1™n˜cQï —÷jÏËSãÕxʼ0³Ð«.ì]ÈXÚ½ dzµeb±ÒêÐÑ÷ j2óWµk‘]‘ôòäpänv3^ƒ4µ¥MKS[bæXžü¼˜³&?ï@61ÐWf” ‰>Ù¥Pß¼:ÍœKßl·¶TˆÍ¼¯Lç¬Þ–D`ÀÆtß¼2¡¾<²o¿¢ƒQÅãÀÒÎzTL‹Æûªœ0¶=Ö Û7_.›Í•=[ÖF«í´6ûÃ2zþ¨ŸÖuŸ|Ï”;ZD¢Qÿ‰bm)C­5 ŒÉJËú£8€Ñ‹†Àc®T!ª‹Ý£õ´³+²8 ¨Å%'PÍLçÀ¶'¢v˜7gw¶üƧµ›‘ ɾ™ê«¹”b0­0C+DXª*yÖõ×>úÔÂŒÇS?öW<]1wð~±ÞòT‰@–†©¿)˜Îèãže%³ŒÉg:ŽjÅÛÏLKS/séÝC'×SŒu€6¦OôÇ1²¸›K‹Ÿ— üüóÏÌøÅ«L:yî]O©¥o€Ô\±;Ãj/Ïð̰i ‹Ô¸ôD· QóÛy.Wî¤NÔ¿S?ûó¹t>ÒéŒå ‰Er8àŒnZ[ÊŸ] ¯‰a9 M‡•õŒQ¨é´³ íØöD´LÅvgËovZ»q}uú±¥Ú8ûâGãQŦE-ÌÐ ‘ïž,Ûß›.¼1¸ßï«a2X ¦š¥e§¥Áhg8§¤»s4¨ÌÃ}ê5€§/Ú²‰ãb–zcú„kúж²™ ÖÏ‹)mk‹Z8¡_×Úb3¾%¡-ó Àksõ}â¸íüº]<åƒ|[½Ø$BªbÚ[”d<¼TP3g›.« øé‰ís2Ô¡tt„’º%L¥©å¬G¯Îah9·8ЏõÆ—RÆÊ§uøkótŽoBù<(ÓRÚ‹çkêËí§Ê«“§»ü˜1üi³fšZ”íc­§{€-ÓÙòl21`Èb;?‰»ˆ¬ýìI·M °1­T_dX6OÖÚõ¯=†ÛJöbßÂŒ¾Ú6Tý´4ŒýÍÁhvîŽOâ£÷êÄtƒ’é¶ï“mÀëÞ­4$ßåŒÓÇÃkb2øŸ#h ÞÙPgˆÅ”vnõ׳@6q¼?þzvuWä~gi§m)ôö<”Æ\úå`»µÅ~|S ª×ž3Ú›iêe.ýr¶[lÚ6ûÆé·ç¡P#Q’qéaÉÊæÔxG"hH‰Õ’h±FOL-ü(¶c=ºõ˜JS Pj¦½K›w/{ûæ1ú`¢ ¡ÙnÈ“çµ|Zž4q­Yœ®È²ÚèŒÞ–”I²bÝ'Qk²=cª>íôùĢÖ`óÛyê½k*íØöD´d:¶gËuŸÖf¿OÊ((,ítEÑïuº¼çÃg–#¬-pŸú±_9z¼÷À\èbÓ_saR–'Ï[Ê íbXíû&àty’}–;ÍC• ÆnéÎÝñ’ÓÒÖ`Ô õÀòG«G¹zíÀ¿N\ž<‘Å—ƒíŸ~ò™_s±WÀ±¨Ào;¼º8ôö|ü­G›ÇðÛgÁ×ÐþK$ضjœ+£¶=ßÁi@ä¾a¼ž]ÕJ2ô-ÇÅ­ãcÈC‘ob7çÇuõ-mœç‹»CÅå¯=g€µ¶ç;mHZã±m<ö¼@qœÁØî`õ¿Aÿ¥Òà à1µ§Æ7½Û+ÃïžKÞ\Í {<Ã+…áÌBïõ2¦Æ¥'±íóxDÍÃ7‘ÏMZÓWÔ—îÁX^üe 7#B\… Öµ¶@¡8¾¥ÅÈmîÐÍ¥£æ^íWî‰8wî^ŒÉCúàöU™¨‰Ì_uŠó@ijëÞâèüÕ¹pÀî–ÔÄYÌ+oÔÓÎÐl÷\8ÞçŠCËŲéÎhn®«}.1oÕmx$…À½ýM`,p†µèŠØtš6—|jऺH³«÷mF«†åÏ@»å/Ýò·os„)Ûß~Cå©–jú—=Ú„Ún\×Ç.ËÁùH:ðdZšzy/øÚÜxê_µ¤Ï˜»žéýqh‰o$fjùg¹ÀlcèüG. ÙÄñ “mO_”¹iÒOÛÒWÖÆc–Û*eÆW¢ð9õðVwÈ,ôv¤¿%Êý†+êä²4v³ãúB`¥òl3Si¢}³)>ðµ»ÌÓ¬ˆšŽõ °9c´KõJ§†¶çœ,çÀÖ”®ôêæÍÙå²6£ñ´–öNs=ïÕÅ!o=Ú Í"+_Ššã?DP 0¾>fZß7±›Kï>žz]¢Åvüª"ËþÜàìIýi€6Âk»xlÿuº@›ñbS55Óžw¡Ö;KÍ9rf5‘ÔD÷.d<Ã+ÛÁD‡Z’OéH=¼¥/¥¶>u¨uˆ[ašè+T´;åK}]µ2Ѐ™éò|/gŸ_=1¯gWÿá0±û'úÕúiêUdb÷ñ©ã&ßvÅ߆Ú‘㺋M/#mK!S Ði3~‰;aE‹÷B›cξ Å*J„–x^Ú6Fý&ðoºÚjùg …C‹gx¥ {9l^ÃÒ8¼²b\¼–q‰ˆˆJ…¢¢p€É´ob×ZXã¾4þÙ[×µ¬XV´Êf|›¡àU$ý*bm`W¬b;ˆ]ã/÷Ò¿˜š|5ÕLÑáô׿|Õ興¨fM63MDt$}üɵF‡@DOk©vL¦kTb›ˆèMìþýoˆxZKõ`2MDDDð´–êÂdº©ñbQ3c2ݼx±‰ˆˆˆ¨É1™n^¼ØDDDDÔä˜L5^Jþ®Ñ!ÐÞøø“kœ !:R˜L5Vv¼Ñ¥Õñ´¶J(Á/,Œ·}=”L†:ĦÀ¬RãʶL›.Ž<ž²ÙŠ]¨´WDò§+ö.©5ÍÖX=³¶Ú¯ÜKçOIo4HÙ¥³ËêÑi)Ã÷ï[à0{´1™&"•û”àé‹,ŒŸIâ)›¯Å¢ “2€ù«NWèn¶XòQœ»5ôŸ^WÞ†”nÓëÚ&ôã›}´µ´FkxÖU6ó €tÚ’[VY^€xŸËëtMGŒo×µ¢DT"¥Ð~Dn¡oXÚ©rzûzèœ\( ù\: ùÄ{§PoÜ’®C¼¸¹Pl/ˆEúd4³Ð+A Q(ÌøSãʈ۱'JÇšÇïH!Ý&®/dP¹°ë±Ý™d(}IðæBžá;±žžØv¡°2œ± LOÙ•auÓÚÈ3~›­Øõ§#bd1ŸK/òdlïæ­uG¹Ðݬ˜3žŽ\ìʶrFQ<š…îf!f¸Õ“͈Ò(ì|÷ n?žèRßwE&º²‰Ë‰»Q¯räTŽ0?Ç.ëÇ´i)FÈÉìƒá(ˆÿ2™nÅ)–â‹®Í4ÁSf’‡¨¤ì÷I>zßM ôÇ¥ÙÕ¼:]ýy1ùK~Þ†–Ål4µ•‹]ÉNŸ¯i`r8 ›£ýUò™±\zk¶ˆ÷=ò>ðÜÁûÊÜÌêm r8¢û¼éù“¾§˜i³é¹ÕÛgrÃí9@̹¾e•®Èâ( -çÒùÜDÔø¶ &æ¨úæuŸââWºꛇ²•ZfµÏá–äOþ™?€ž`Àx¼=Ú %„`Àð_º'?eÔõ3« ÄFýÚÛŸžô(o=`Ï­‡©:Æãà–¤ÍC'ÓÝÈ%i´Mè´¦I†::Ò_ˆ\ÙºiýÈÖ­Øö§ýf<%¶žgöÍÛ÷•¦³ÙuØŸ$ÛŒfcgû)€îÓn‘æª ¨z’¿^{Õ–¸6•Ï¥óÎŒÅ7@~vz&04×xñe"‹ÍÈ…ŸÇDÏÇ=Ëã‰,Ú¯|64÷h6Rs#×®hSÍÙ–å3Ö™gyòùEãaGl+—ÞšÅØx"kmÉ&>Ÿ3ÜËg~QýŽÑkt2½1}ÂåÕ~ŽX1b6qÜ´E%’Кól.“Væ~ ò¹Ðu‘9w$‚Ûuâ%½šÐSZ¶cOnr&†ª&OžwyEB|°]dÕJöÙ ?WÿRä3c–ÌrýQÀèÅN]‡(ÖþÒ©“êZÖ©buZ%0&‹I”Í}&.}¶_‰Q&`¾‰|N¤Å€èÝ,·U²êb§µ£ØŠøØ®²Vd¦P(.=lÂóbí SP§„÷s[²~ººÖMd¨¤'Mm‰sfqZkwži{òl:›í²=I¶Ídþªr¹vÅÝ~å³!`M¤¿âô³àÉ«–£ôÇ•+xRÏÝ€û”¤½€(ç^ç…IYþùŸt>µ¬?Š›º£¢þwò™Zzþè÷=’ÓÔâ>ùâ}®éu1½]ÇR½šLoLŸècdq7—?/ø6&©ßüÐ;øòÙë}­ŠzCÊôÔY—Ô\±;ÚÍ=žáã>™tòÜ»†¢2”YÞt>R<Êkó©†vÛã~¹‘«íŸ] ¯‰–üŒ,¿)Û€Qe¢hJ”²¼¨¼ÊpÆò†Äk‘ÄW¹âøBð϶c=ƹáRRoi3Ê< Bs)íí»ç’ÊÛÌj"yã’¿š LcÇѵ$V3êÈÕ +ˆ©âJy†WdH½ ›M—W¦f¡·ÙNQ#åŠÐóRç™%Ožµvg¼eÎZ‹Ä †0ÕÝ„Ï? `>µŽï¾Y†>ôÕ~ D61p!Ù÷Xw)C;¢§:?‰»±ùíüЇú,Ù}ò=9ùÝÞÌ≣œÿÛ7¬;§Ú52™nË<ðÚ®±8]}9Ñu"ùr¢mcú„+tü²÷„ËûΆ®³èVaÅécæ-õüvvò@ö‡·ÎöüVU ¡ãJûô1­è´-…̳ì6‘«“ßê¢cK¡få3« øé‰éCNH†:ÄeMéI¥+¯D%©u_Wy8ÖÏFWõQgçÅó5õ¥¸>[is_Šk¾;w£ TpögÀÙ“]5îcE'Owø1cùCöMè?}«}$ˆò§Ü‘Þ)÷DŒâŸ‚<ùŽ®Xóþ8pæ×φ¼õhÀ±Gq¿}|]yE¯.½õhóX|òõÅ÷‹­e†’ÏüšK¿œíâo?òïæÒÿäÉ?lÓÇÃkb¢ýŸ#h ÞÑ•ê"_û·ø&€¶ï“mÀoŸÿUÃï,5nþlU ¥ÅGE±Ìƒ7ÜÐðMäOIÚ•ÊŠÉŸobk¶óWE£4»õ•ënK\á•ç+²\1<ñà1­õ´BÀ†ûÅUãHg‰U”]µdÓô¶÷`ô¶¤Ì¢i¥œÅû.LÊÒÔVÕ©ÀŒZ°2ì)>cÎú¢XÉ`ÉC=Ã+ú‡âÛ¿íP¥Æíún}p€_ vefÆð,<ÓŠúM¨+){g» ÅÎþsÏB¡ôÈ(ª¡Uo¦8× `óÛyˆé^=í¼Úö<³š“gÛ³ú’g­Å›@D!07ºû>hGU§µâÑ"^gÿ³Û3A·;8vVs¼Ÿ??Svfº3úxêÇ~ËýÐî÷û$eë†ÝŒmÍ>ÓD}ðÛçúÊÏ{þ›åHbjqŸ„rgH`ù£è>ä5ôëÄ}»9ÿ;®«oYõóÅ—§“mÂa¥WÛó|@$²±W°ùâoͧŽEÚÛžú͇¶¥jV´Æðé¯_ÞÆÔËŽ}©®ø}顤SZîkšSWÒú‹^]z{>þÖ£M •Žü›5ùk_lw°šßWjÜqÓ»-> Þ=—¼¹šöx†W Ù…ÞëÆ¾žwÏ%fO5ÓQæ›Èç&lÚÝÁû¹ ±ÉØbìàŒåMÿ»K÷×uóñ²3šKGÍaÃÓõ´ Û&`ë&ÊFh»#Æ·êF;í¢j¿r/}vî^ŒÉCúàöY~-Ö_QëéŒæáºÚçUÝúçQ@ž<‘ŨðEo œáâú]‘ÅÑù«sá€3Ü-3ÓÎÐl÷\8ÞçŠC˹‰üãS&Õ­@š]½?h3šÙüU§8¡•¦þ$ 9ÜÁ±‘Iy^TQW¿†#’õHrÿÄà6/¬‡£¯Çгe·uËñ³SG7¦y@›MØBé@44™€ÎäÒM¿0ÙöôÅïOÀëÙUCýtö Od;™í~+kéT›Œ×³Ÿ¾D¡E¥­Ú¹—þ̧§öCÕÇyo©‘WE¹ßP›{ñÆnv\_”úN„ÔÃ[=ÞQÛED´/6#.ñ,˜s‹}â^Yi…1ép*ºIS[†G#k癕W7§•vY©ÝhªR³êü·Vfsþ¿ÏÖÅG?Ks¾øPjôÓ<4ÙŸÛœ=ùJ©ýøÚRßlðúƒž×À[áÉ6tÿöA;ŠE#V¬F}C½ºh)>±+U"ŸC¼­ŠšéÌj"Y¬dtô.d<Ã+ÛÁD‡úà'ˆ êrÅŽD´¯Ô{sé|.Æk¬DM$ûòl÷ˆŒÔI×QÿF-¡‘3ÓÇ¢Þ·u‰Tg‚;wŸ:~aòmWüm­ýËÊîà¯#“oÏ#×~Z¾‰ªV¬F}Cù&^Î>;¾zb^Yå>Àz€5ò*x†W Ãí:ŒÒÕV Ö´Ñ¡ÐÈdúU$ýªD!ãKK±¦¥ÅnõêV,ÑS«÷¨b¨Áb•³>Œ×ƒ–êg›qvÚžºyk›µˆèhëí]¸Ã‹KuÈ,ô^uDt^3}ôdxK¤©_x¹‡ˆˆ¨Éüõ/_5:j1L¦œÍ\5Q9™…ÞŽøF”žØöÊ0z¯#x.ºuC.Ìøu‹ÅrO±E¼× t=}·n%qCÞöÞì%qC.ÌøõÛÐ6Q±§ºõb0£?õjß®‘q/zbÛwp]›BÓÉwp]Ý¢2´§ƒº±J[¿J&Ñáw›¨Zr­Ñ!Pëa2MDÔìŠ7H¤Æs©áQ JQ(ÌHw„ÎÉ…¿’•©ñŽô… D‹ñ±?É'ÞíB!3î®ÇÄ‹› £þwçL«Ü)ÓSÙ\f¡·cž×f?Å=@jÜ!_Úöš[ —–ßúX‚eôvÿþ·F‡@­‡ÉtSãÅ&" SÓèñfô¨_ršùéIOìŽ_ßù§'¸uËqK}#£ä¼òå©Þž¯òÂ~oÉžêæ<`OèajÔ[ €ÿÒ éajƇ·n\š)Fåy÷B’raÆ?3ƒÌÂMënj_ìê¿t7ÊxÍ-)o…­8&ÓÍ‹›ˆÐ3_XñhsÏú¥é¤u–·Ž*Ó*¶ÉnUD6} Æ\Z|‘á R㇄ò¶ÝÌ4Q b2ݼx±‰ˆêmf5‘„ñ¦ ÿ¥’ø>TµÅó4—®á+³«_E×3³šHÞøb?™Ònÿhìf‡„ض!—Î,Œ¯f†ý3…moïõŸ2^$ÓÀc»S©‡·z‚Û$L-þwÓR…­kÃŒ¦ùÒ""Ò¿£i<åþâœòözú\¹«FV+¥ þ™íØÉQü’§ÊÛ«~•bÏŽÐ9Ù6ûö‚=Z}†Öø.Ô(Á;Ãþá;ê‹;eýÚ)sK¥­{†¿¸qKªr§‰ˆög¦‰ˆšÎJ¡`x?£Ü`Wì ÿÒo¿º85îxø®%¾ç ºo ·}a\¥ÚžÖo OÍ…Üö˜¶í7í„yƒ™›êkK¥­›7CT‹”ü]£C3ò*„IDAT ú}üɵƒ½ªï`2MDÔêRãI¹uð†\ð74æÇxµÞ°Ô¢øÌ&ÓDD­­Ùæbý3ueôÖnk Ñà=KT&ÓÍ‹›ªtà—uˆˆˆˆL¦›/6UÄGqU&¾b°üÃòªé³·[lì€DD{„Oó ":¼2 ½õ=آ̊uIDtqfšˆèðeÇ™…:W$"¢J83MDÔ„RãêCŸÇS@f¡W÷™…ÞÞññ^ñ^Y¦tSÛu-ºYäâ8j«Ö¢}]¹Ö³w!“Yèí]X7nûz(™ uˆ!LÙïGïBƲéâÈã)›­Ø…J¤·1ítyÑÍšVZz.od£ºÞÙÄ€Ëëty.ïÀÒ`3¢´L¯+Ê´x®ÐݬiPk]l—æîåb°Àf¤8N•Á˜—ÚcÓ¿b0G“i"¢¦³Ð+A.3þÔxGèœ\( Û±'’H6“O¼w ùÆ-é:Ä‹› ­½ ™ÜÔxGú 1èv0q}!ƒâÈ…í˜åë`ÉPú’:àÍ… <Ãwb==±íBae8c˜^FìÇʰǺimä¿ÍVìúÓAª+U fW¦LQŸr©?6¹Z“ÉþüÞƒt>—Îçß Gîf±½Šé|.½5û¬/º Ø´†–sbÅØ·aÈý±õÞÆTE åÇÏ.…œ®«s†¶’K--Œ}ÿòã L¦‰ˆšN±Q¿ú&óÓ“å­'ì¹õ0õ Æ=Þí…è¬}ó ÿÒ <ù)£4óÓÜ’´yèd:£¹$­ƒ¶ ý€ÖÀ4ÉPGGú ‘+[7­ÙºÛþÔÂ:£9‘AvfWó¹tþ^°ÙS/ßDÔ'^µŸ–l~;?ô¡ÜôHO_dmZʳïŸ] Ý>½zèT1TàŒåO•ë˜M ”B6S©?ÉtË(^ñ,^òÔµ™®·–¹æJDGXOl» ±ý*ð½Ü–¬Ÿ®®uÓ*UCWo +9P '´Æõ¨˜÷ÙU2ØŒº2©›7TeˆvÓ¬öÓ¯L-vÝ´ ûæ ÛÕö¢R”?,£çúÜß}ò=ùç(Õ"v¿ìøjÿìRèsDï¶×Cã•ïlXZE0ÖÑj æpj…dZÿ‡Qû…¡Úþ`*m½aÿ¯dÒʥ؂|.t]dΉ úa³L¯f ûøÙŽ=¹É £D­*ˆÐ\J}ãy÷\Ry›YM$o\òW3Dêá-m–Ú2Ž®%±šQG®>>1U\)0ÏðŠ ©w!c³éòÊôÏ,ôr® !ÜÁûÊÕüÕÛäpänÙ¥Pß¼:ÓœKßlïŠ,Žê¥ÿ‰®òcnLŸ¯ad1ŸK/@JV3oL;û㦶Dgµ=Ê¥—Gy2¶dýq%žC'?_ÚÁÆtß<´­Ôn3r!Ù7Sý<º2 ¯fh' K/,w¾ûfMœ.¯ó¤,Ož¿œX/ö×R} æñk îàýb=†i©M0Ùrýk æÐj§yHS[÷‚îigÿäùèÉ|¤³Êõ܃±ü`½½#‹Õon¿øgÔ/8ASs!͵G®z†g† 7ìgÒÉs—< ¢–4|'ÖÛápnÈ…™míí ¹àGæ§’k&CŽºÞ°Çð¿n '¶½2<#?tt8B@Ïö5ÓVžá/n8$Ç­žØöŠ)0 ÿŒüÐÑÑ }O '¶}§ü6,¡VèO!»:^³¶Ëá€3 ivµòôªÑú£8€Ñ‹º.a>>÷h3z±tÏÏD6Ù~%ÄÆ4œ=é´5û}R8ÃjlÏwÖŸ·¢©:7ØŒ¸¾:ýØR œ}ñ£t*T¾E-ÌÐmk3þÙØ¿½ë^úŠÒ’ÇŸîÝc+Cu…ÕuKÛ¯ØSåh5sØ´ÂÌ´žû”àé‹l×›”kCÚ#ñârh ÄÕŸâ*ªlæé´ñè`Ü´2N‰xl®7YZj›;Ϭ& à§'¦9'!êEÒ“J…DÔÄ<Ã+ú‡âÛ¿X*¾¾Äú¢X¡ë©ï¦•NˆÿŒònffEÿ•(¦õ›PWZö˜3­®ö5ö,JŒR¡ÚYõÑ"““¾Úü®{0–0$^Ëá@]7,î=m¦<ŸK¿Ñ\X61`Èb;?‰»ˆ¬ýìI·M °1­$Ù–å3†lÔ®m1”ßÂÚY_]ÍPåû×ÌáÕbÉ´8é”>zßmw½©ºK9ÆKBeWq{Î@ ¬5ÒÔ–¸—B\E*ù²”í¨¤Æ;Á;úïS ¥E%u±Ìƒ÷¿Ñžyñ\›“ÞÙ~ª[à›ÈçÒnz+¡ë‹G›0ÎR€ñf>¥ç—blçnÔ¾àSýÔþZ_«}òt7€3†OÛj¦±²ß'e¬](N“uEÑïuº¼çÃg–#¬-pŸú±ß+*%Þ{`.t±é_–5†òãg—BJ…†˜,Û¹ÂR+kÿZG8¤Z§ÌCž<‘Eq!Éz½Éü§hËxI¨Â*¾‰|ÎQŸ2#‡Îç‹ù¡âr·ç °&?ßÚKÆ£»,•] Y¯@¹#U^lJ;nz·ÅäÌ»ç’7W3ÃÃÏðJa8³Ð{ÝØ×óî¹äà à©f`":øM+´·æ¯:Å{ÒÔÖ½ÅÑù«sá€3Ü-©‰³áƒOšÚŠtÍvÏ…ã}®80´\¾lÚ7±5ûì|XÙŠ4»õøô¶Ó>ôÕžùpö«ÒÔ–]5|ùǧ.Lö¹âJP³«÷£·¿ Œé>y«dW ÒÍ¥£†–Ns‹;x?,=ª¥¿~Å{ÕÄPn|KKg}xeBÕ‚)ß¿Âέ“L‹šiõv½éþ`ûz´xî>Pÿ¿Ï&.LÊ%|SS¢h“ÞÙ è{ƒû©ˆŒZ¬ÌCc{½ÉöRNy5¬’ýY†2±­Ñ&¶mã±^–‚ݨj.6eVÉbA´£w!ã^Ù&:Ôç°BTPk¦!—ʳ‰ˆˆˆh´ÎÌ´QWÄæz“»öK9åW1Í1+3ÊÙ€¡ì$ê|6ñØ\–ŠØ\úSqz†W Ãí:Ѿù½£ÑTfw±©DÕ‘vmhçîåÀ˜,¾gH[½Óî’í*°t³0–”¬‚²osŠ›ˆˆˆˆZM¡€Ö™.a3RüJúîÛ«¹±´ŽUˆˆˆèpúë_¾jtÔbY2]ú&Ù=\…÷®Fr­Ñ!Pë9dÉ4Qvÿþ·F‡@­‡ÉtSãÅ&"""¢fÆdºyñbQ“c2ݼx±‰ˆˆˆ¨Éµê—¶5“i""""¢:1™&""""ª“i""""¢:ñÄæ•’¿ktT¿?¹Æ[H‰ˆˆ=&ÓMOÇkQ|@8ÑÁ2¢=æp8ÎLU«š² ç)œ™&""""ª“i""""¢:1™&""""ª“é‘Yèu(z2z–ê¡-*Ó‡ˆˆˆˆªö» Žá@lL;]^gtS¼[z.od£ÖQ6#.¯Óôs9‘Ýë`-Rã‰àv¡P( ò¹t¦\_ÏðÊʰ§üxÕô¡Ìÿè~”B83]£Îh.Ï¥·f»H³«ù\:/è>ˆMŸ{×#^øgfü€Ô¸:W=¾°ÐÛ»°0îp8ÆSbÖ9³ÐÛ;>®Îf§d®‡’ÉP‡ÃÑ;>®öki} Sà•æÀ¨|.]S;bL¦•Yjñ3°´¨ÓØÕN<ïܽìuºBwE¿lb@¬%^XDZ ž] 7mÏéÆ-©˜ðÈ,ôJÅ\ua&$CéK…BAI´ ùÄ{GÌe߸%§à¾ëé‰m +£êª²V¡ ߸us!ƒÔxGèœv;ÖSë¯òȰæÍ̤‰ˆˆŽ¦£žLg—B}óês.}°ÙÄ@\iy0yòóri.€ö+Ÿ kcñMÙï“20ú™:]-Mm‰™l1N̓+ü3…B¡P¸ôP™Cά&õëzôßè Ãr·çŒÇvp÷`LÉã+òÏ ò[Sõìe2éä>|‰š™4ÑQvÔ“i÷`,ÿ`H¼–ÃíEm®:ŸKç#•†é Ívño£_Éf?í*Û»ÆÁÌB¯Và‘ùéI×ã šK•YG'õð–6K,{÷¢ÿÒdbµ\2`&MDDtÄ™dº8y `óÛyç}ù\:ÿxJ Í"‡¿^¯ex÷=07ºû>0Ï1¯?нØi;xåšiO øDRn ìHï {à¾ÓÚÆWíÖJ†:Äb ²xv‡gø‹·$‡£w®T 蟑Ï)«u„8KMDDDTÞïÀéŒæáºÚ犺o?žè²K¡óá5¥‹4µé:óO \˜T{Bš]­\ƒáŽLÊóÀȵ+ú§{È“ç]“0²õ˜°þ§ÊÁ{†W ÃåÛ†uí+@f=±mËóïü3…ÂLñíÊŠq-}Ô¸ãỦՉˆˆˆHïè$Ó¶‹›Üƒ±ü ¥£;x?,3ÝZ;ÛO`ô¢±lCšÚ2=;Ïfp»$5în‰—7ä‚¿¡±-ýËWˆˆjv¤’éý”ýaY¤©¯r߃ Í4×È4uMDããO®5:""ª“é=bo®4½M-'%×èèÐÚýûßÕƒÉ4QUG£C ""¢¦Ãdº©±†²y$îý¹Ñ!QÓa2ݼXCIDDDÔä˜L7/ÖP5¹#ó¥-DDDDD{É4Q˜LÕ‰É4Q~矞KDDDDT«83MDDDDT7&ÓDDDDDub2MDDDDT'&ÓD‡Š_ú#¿î‡¨Uð–è`2MDDDDT'&ÓDDDDDub2MDDDDT'&ÓDDDDDuúý›¬ü׿|µWqµœú“é?¹¶‡qµœú“i>͇ˆˆˆˆŽ8ÖLÕ‰É4Q˜LÕ©†šé”üÝþÅADDDDÔrªM¦ǾÆADDDDÔrªM¦ó¹ô¾ÆADDDDÔrX3MDDDDT§ßX¾ADDDDTPp€3ÓDDDDDu+Y3ý׿|uqµûdúãO®pDDDDD-Ç>™Þýûß8""""¢–Úi""""¢:1™&""""ª“i""""¢:Ù×L§äï8""""¢¦õñ'×lï*,ùh<>ЃˆˆˆˆeŸ]2™ŸéADDDDTk¦‰ˆˆˆˆêÄdšˆˆˆˆ¨NL¦‰ˆˆˆˆêT®fšˆˆˆ¨'þÛÿÕè‚ÃáÈçÒÚ[îõ!fÚë2˜LÑ8ôÏ-°}p0÷úPªé!Ñ,ó """"ª“i""""¢:ýÎQ¨}¥lâ¸kúXÝÛܘ>áòžˆnêÛŽE½'\Þw6ê´~ Üô~;Ä»FDDDÔHÀQ@Í3ÓÙÄq—÷xügH§Ú¢Þ"¥ɱös9ql)tÂå=¾´³·1·íϰÍïÈî8Q“«ñDwðe.ض:>oû,½Ñ-YÜtªo‚¯÷(@׃±Ý}¶ùÙ'"""jrõÌL¿óüÌkiêõ#ufÚJ_È¡Ÿ·¾œh3vu'\Þ·çmÍÓ±Ú°âÅåÐqÛa³‰ã¢qcÚfî\íl»i檶¾ÄÏ;†_]±HCk|ó]#"""¢½Sc2í¾Ì¥_‚üóëHz77ñJ[4Õ&ýÍ&Ž÷Ç_Ï®îæÒ»† O¾cLŽßžFwséŽ(mmK¡·ç¡¬’K¿l/MÏ?ÄŠòälÊ‚“ïôÇKÆ`·iÓnîæÒ»¹Õ_%´…#ÈV7ìÆPÎ> KDDDDµ©ë9ÓîàËœ¥Q_桦¶mß'Û„'ÂjËóx”×ÇÅüv±máÀ‰0^Ï®–K¦Ïž|]fä3¿æb¯€¶¥5†cÏKnZé³:^«uX ½úÎc(iŸ†%""jnN—·ÊïÑ VqþMâK[Ì9ñFª\çÁØ®gúD"¥~®/Å®…tê_¥c8-·ªÈ¤Å*Ç¢Æb‰²Ãîa åìÓ°DDDÍÊéòÀ¿·pîÕº‘ï“Cðo*ìïs¦_{Îh m[Zý¯ÓÝÚ2–êßÄn.½ûxêõ¾ÅPrÓ€ß?׿¤wÚžÖ0ìžÅðôE›MkýÃòy DDÔºœ./þ ü;ðïhѬËéò´ôQm? Œ ÓN—×i|ZñÁØ÷Óܵ}þÒßÄîã©×ˆ¿mwCáëÁè¯ÚÂý­r"í;áòž¸0Ù&M½¬oZºR ¶›Ö¼Š,þ&æÅ]‘·êÚµúcð}ú«ȓǫ¹}°ö]#""j-JÖõÿ”Ϻ6#jnêtM¯‹6]:•] ,‘I[[ Àcc†m¤ß©Æ¤¼û¤ºSõ_Ðå4÷7fìE™‡ob77Q²Å|™ W(.ýå^úóh¥W¶SáU$ý*bìfÝ¢M v›.êü‡Í?mUÃÖƒ®˜¤Ý.°âŽ×¹ke~«DDDͪêLúꆖs]ØŒ¸®ö¹°œ›èÒ–gŸ‡× th¤àpyÅ ÿQ®¯Ø©îÛcWÜÛ©6“ÖÅÅ‹¹/!_°i ü:q"""jFUf]Ù¥¯æiöÓ.è ÍvñÛÅËÅ/îŽOÊÀèƒFfÒú¼YŸI_€ý®©;5dÒÙÄ€n®z@죘¾½R]N(O S§u‹Ö–W}&lâö< J€œü.«4êÊ^Ø6*^ܽìuºBwõ«ïõ¾3™n ¯"éÝ\ú¾FÇADDԪϺ^<_ðžG¹ßí9@~®&Óó“c20²m܇l>—¾ fÏúzR™4,;¥pïçÒù\:Ÿ[½-AGî³Âž?åÒË#€<Û6¦ýqHS[¢óY ›èK³«ù\:ÿ`òäç~'U ™4ý>)ÒGŸ†>êÖ–¿×E+MmåÒ[³Ý†½°mÄÉ+Ÿ kcñMmÌÑÏöx’›É45í†<%ëÚCó©†TKkôù4€ÿ(›I—¡Ædコ'õ ¢(P³Æö+‘ ¾OÊ€8]^gúóýTï¿éÎw߬Ý}´»?è‘ù›LÓÉæ³¦R>ÿ(ÄÿbÌ¡÷ú´ŠÉ45ž’lýYwC^uS˜'OwøQ}ŒU6ó €tZÓY\ïk‚øþoã‹2ò0í”] ¯‰Ùå庾—M™™?oþŒ‡Jêþ7ÅÆ×c2€µ± ^ç…IêŒ{=”ÊŸo£_ÉZ9Ð^b2MDDDM¦êbîÁk£€þz6cá5`hL÷ ]‘ÅQóWøPíÿ¡«÷(è&nMÔÒr(µ€íîº.˜ûRïÜ& ¦l•ßR#Ôòo*fÖµÔk¶ÀÜ£MkŸQã·ÔÙ6йí¹ù¸˜ê~ã=1c2MDDD—Ï¥ñ? öÎhnqñ>—×Y|¬‡¡CHdcý x4žH—M7jõ¥ŸŽ'vjmìBñÑxâ¬@œ®Èrù­ú&DaôyQòðMäOIÊoIwÿâ~ª÷ßtóÛyè_‘ kuäÉó.oß¼±Þ¶QY?8&&òG®íÇ£Q≈ˆˆjPõ¦ª3šK›¿Ø7‘W¤ëŒåñˆXý¦õïpº¼ÕöÒÅÓ6;e³›îânvEÒyíyÁºÝW{ï[žVlî³jø7µì¸y6q€4µuÏr¡©Ñ°ûÊD¾iÆz¯0™&""¢Vªò¸¾+1ŸK;ìòf‘Ok}¬+ÚîT3ìÑÁ(ùoúxªžá²?,Ë€4ÚŸ'º0™&""¢¦ ¤˜ÿ^Û´t“§˜¥òæòa7ùNUoÏÿM-“ë¶3î5vx3L¦‰ˆˆ¨YˆÜëФ’Â!ÛZÊSEà ˆDDDÔTgÖu´îS&ÓDDDDDub2MDDDDT'&ÓDDDDDub2MDDDDT'&ÓDDDDDuâ£ñˆˆˆh¤äïBp¯‰É4½)‡ÃÑè€{M`2MDDDoîp?H¸î55ÓDDDDDuc2MDDDDT'&ÓDDDDDu*Y3ý׿|uqµûdúãO®pDDDDD-Ç>™Þýûß8""""¢–Úi""""¢:1™&""""ª“i""""¢:9ðnýÿýèxû÷ÿýßþçþ¿…ßÞÙ“q_½:¶'ã5—ÿõŸxù/_à—üïñzûïþÏÿ½ Àš­½ú øæÛ»æ‹hÏ~ÙØ»½sì]L…=ŠiCÚ«_SaBrìáÿ”{ø[Ú#Íø×dÿ ÿÝšó_nÆá®m{ù—»gº{4ÎáVÚ€ÿÂý~ÿúOü¯4:&""""¢Öóÿ ÷9™‘ä™IEND®B`‚fox-1.6.49/doc/screenshots/colordialog.png0000644000175000017500000003013011637250333015441 00000000000000‰PNG  IHDRØ ¸Ù¡DgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœí°å}ÞŸýq¥Å&®R_êë©f,5¹¨¨iäZŠR’[Í´”ŒíI2ShqZɃͥX™ P»A­L±Ç;¦6uD!Ù`|ÁÝIF2¢Fv„}©‘DzYÐÙÝþñî¾ûîû¾»gϹçÜÝsïó™Ã{ö÷9º<÷¹Ïû}ßuþ`×Kw]ûFBI’¤¾Ýuç=»>ñ_ÛéŽÝwä>®»æêô„ë.»` g$„Ñç ë.»²¨Å\s¿ŸzöÌžùÉ‹ßþñüýž~ùäS§¾øÿ}ïЋÏüáwÿö…ãOžü¿3ßvÿ‰gþè¾çŽ<öo=úìS_?öÍG¾}ðá#zúɯ<5³W=á "6ØÈeËuI"—:{VïSç*êI*ÎÙ÷åZò…³Ñž†‹G%Lœ±úö­¿´¡lÏ(*\î ð8±ÁFÖ°.×' €ÛçvÇp}¥ð¥?«}-óBbÍ`/×’/œö4¬:ëvÝyÏ»ïþû<'q'qÇI"þ³üŸüŠ8๣ßHâxåšwŠ·G>§{öÿÌ_þo‘ß±î²%×&D²-IÜæ8æÛmJUº¦ëVíœÕÒõ/§®‡kW$Dåg€MØ3bQ™Âúü3ûÞzÁ¿0¹Qîyäo¿E‘Uˆ 'ÚG" ù£rk¦e7$‰|{C’lK¹)ªÜºMÙTq!íí¶Þ/'WŠ5æÉ éJÑÄw¾5­îö­'÷ÖŒ&Þžý™Æ‘mZöÇF, ­È•[Åú®'4Ï©Uÿrbå+’õòm°±¨µ…¸•-5wÓö|x ˆØ`#kh‹©_æú“À-ŠØUl½¥^ÔkžóÆ$‘KýËi+Õ+¶ä g£= +ŒŒøûÏî7£†8‰'rà'½?Nbk4ñW|EfÄã%×&Dps’øH¦k7+9¬¶ò#ŽSgëGJ ë…¬ç¬s¹²{èᓓŇ;—ŒøÂ_þ5±õàã&q|ñÆwøçï|÷ã_»1âçdG’˜rœJÞª­ìºÕz~m«õœbkO—‹l''¤ K Q’ÇæòÍý_p`ßâíþ¯ÿ€}ÝgÝ9Šbõ„—e¦±ÁFd[>”ÉŸ³9NÙÊôG´ÛVë"‡X’[?¤ÈqÅå´•ÖK·ä g£= +–hâÙÃ_·FÙº$ÉÖ˜ûï}øQM¼8¬ÀYcñgIàƒ6G|¢_8-i¼ÞMèBŒÁ!…8àI iž$þ³ãhmBªyC׌xPM¨ü£Ÿ‘p³ãxƒÑ&¤r!Þuç=À qJórBÈÂFf×¾ÿ}¢QpÄ¿÷Û¿5ßwD!‹’O}þK²m-¥ „2Pˆ !¤a(Ä„Ò0bBi 1!„4 …˜B†BL! C!&„†¡BHÃPˆ !¤a(Ä„Ò0–'t,6ÖL®júºóôÑg›¾BȰXìB¼frÕHhܺM[Nïiú.!CaQ ñ¨¨0€Û>zƒÐâ6ûwõËä}ÎQ¼OÒ‹ZˆçÈ[.Y}ûä[籡?®ºå¿9¤mç}„‘»OÒ7â~XuI§Ó¹õ4fg±r'ÅÊ{/é,Çúë0õÖÇŽéºmþ¿™míGÏð>ÂhÝ'µx.Pˆ{æ¢zßILËon=– ->ËObæ\ñK®{ûc+ÕCÖmÚààôÙì-½cÓ²T¼-k‹·—Ÿ<øAØ -_Q±çs}}„ÉM[°Ú2{.Ž¡°Ìb°X ¬Í«õŽaâŒ~² „bÛìÉMâS¼tüp÷ù¶w¾ûÇÑ«ÂBa!Nw¤oÓ•ÂÛ°(‡„ÙIÔÝövfÅí­Å„XsðøÞ>¿O…£Ó{Pô§æÏ›ºf]v85´qzâ6gU’%ç]0¤Ÿ­‹Þpf,»tyúÞ€ l˜Å¾eHWÞ…=3—üÁ=¶L%$xØr,Ò*ê)ߪ»Åvá­ìÞ½{ïƒ{·Wî9ðÛVµÞøý¨ª¯å÷#?Å®7ôwWÿÀ[úãèUy¹ “×ÀO9 DYù(ÝMÜa'} ül·Ž~{xpZ®5®´ŸFÒ,ý8â–ÿ¡ôÈ7f†tæ‹Þpf8÷ÈV,›]6±8Œ&°a9òŒøîúæ%Sÿì±P®Qÿ÷¶êê–£Isám'ÌÖ¥ÿYÁÊqhy([²«u,?­ê…»êXÏÝ⛄"£b¥°ÆBåECõ’Ù!¹wVÖ sÓéž}q´Û’ù“&ט Ò ÐÑ {NÀÄÅêº ¼¸¸Àr,_Žå–aù­C±U„%mó­I~¯~*kRãÌc oÅKË_Ê™C¥ºÊcí÷#Lèœÿ òßgÒêfW 2%M¯Ñüâï¼ì7GþÇD&»êoŽ\Ž{gòÂ-ê"VªWþ¦® õ­\£nR%ÆB\—‹¾{ÌLàð28³aâäÊeX`=–X ¡ÈËqùI\àžKVVœpà¨Y ßZý6ײN¸÷Á½!B)Ãþ}*º¦Dê=@Ñwòc¡ßaºóÞ÷¹þÊP•7×\éÁU'+â í·‚âˆÕ•!°÷Á½bu0÷nšb\SÇáj}kfˆ\ÿTd °³®6Ÿ=Ž YûØZÙ^eÇp:À…6G°üˆMG,Ö…Ç÷?Ì Çk¹jø)ðÓ9Ÿ\ÿS:ÀyÀyÀ/—'ºç€eÀz`½}§€Òæ2Ÿé;pèÑû­ëÇ€1àçú>oÆK@z{}õÑIŽé!š(Ë"º®'ó@»„xH½Xsç¢óWàÌqì[‰ ™¹9¶«'Wž^¬N à4NÇÅ+°ìŽŸÀñU—\ñìcŠ#„ Q_u{ë.Ý"Ìdàà‚‡÷œüpõ5+m ‚|ù6 ?3¥ê[?ÿë:ðÓ·Ÿ<ÜÏÍ¿íï~õÕ#ÂaˆNˆ0Dˆ´‘¿BÝ:ûÞ-‚áÄÎ¥û‡§ÑQOtNç§ÍW†G÷ÞÛï}¾Šè!fýÙôŽOˆ•aA„i#<ƒ ƒ°£äÁj[¾í „C DÐA˜mzaºE¾vCî^Cà“ûX51ª´(šX·iK’ ùÚ˜L;6öØ7'OáØj˰ÀÚÓ¢½<8³Zì¸+gÏH «°Ö Z4!z½vïÞ½eËU@–WúJÖ™µ ýKÊ©B?ßM_9÷Ûôðƒâ_Ö:Z‰G ؽ{÷UW\b’¬†u¥(æœfwÄMd7Pü*PÌ(cIoF-«È^µC掚0UxÛ¦†oÉä©%™YeëàÄÚNx1€ÎΉiœ;#GÒ]ŽÏ`õ X1 7BÐ eï¼@†–J½ZêÚD[®„Y”ÖŠõ­48LëçR_œÞéÞ÷†rõ¯y?ûL2âà𳊷¹Ó”"‡Âi‹ŠÈŒ%ÓÜÂß#~ñ«SÔ|°u)Õ2ª¦Ãò¯´ù,r'VštÄâ§Á¢ÂÓ­üiß„SÓ°o&øfO®XËpø‚S0³ãwKú÷ÎÁ‡í_—YÑ3à pfNç”U#¤øÀ¹¢U N¥%GsÝ1ï3½Î^ »Ïsçënʸj%³f (ZBcB,ŒðNgDTÀŽ 18³V†ëÇŒéÕ89ƒq`Ú€sO`_V´öëqi½Ä`»JÖmº €ìû ÒáA­ Êbçc³70ôƒÕŸV×Ëv–߉à [¿6=Ý×}n Œ+Xf¬ ²}ê>òíå³'€ @83±:@h¹õlÿþæÄxÛ;ß àÕèEJ}Zy sËÛ9-ŒùéSé¿Â²ñí€pô§‘kKs\<ÜO?Ú-íµ²îªË¥‚ø³–h¬š‹&NïqlM°s$TX¤&pf­xÌœpà NÈ÷91‹³X~ @ÁU…„z"#Ò +ñÇ|cdAì¾ëÓW]±E©2ùmqHäGs®fÞŒ5måmpïîÝ[®¸JÝK“xó¨ÞQM„ÆYe<’¯Ù½ûÓ[®Ø’nò‘&YqˆŸíìéÊÒ×9¢tZ²jbiÖ'_üâ·&Wît´Z…O½Ë¿Hù[0˜9… ÇœÚÁœÊþgØ0‘ÛaõÄa ¼°Ô޼Ëé†ìm {ö³Cd¦*oƒ!òÏaŸ¦êoŠi¾¦J5×NUŒ…ì?Tïå´±RÝ_ €ÓY½‡ü.Lmraeϼ·V4a]ÃP¢U4㈅ ?÷Üsn¾yûÖ¤tVžúï§0¾röĸXÂÀq%E_ÿðkôÑ # J9‚”Šbí„ø»8ßf›rù–ou€#¶ßwQ=õž.m DmÙ£˜žÏTaTÖÆeviý‰Òm¨LɆŽpÄuš¼qÓåoÜtùë³W±r€sM¼ãÒöUô/PpÄR…:ôío{ûöí¿¹i¦Ó`ë[UÍæ6ýÒ~ê–™U_¾âô½éÛ#~ªÂû:ð»À¯þbS•ÒÆ†a2(š¿ìˆb€ÜA@˜I”ï°(:Á@ËØÔ[WÏ«… ÆšPÖQ„†‚ÔKý5±ùËB|ŸÅ² aŠ;aZf'µ˜»#–·"^ÅôÎ5ñxI'08ó-Ħ k­ožÞcjñ#›¶´J‹Ÿýñxãw¯àb`ü\ø7ëñóÿ° >8}o÷ ^ê2!C8Hg `p¿pÌR eJôSॹ¿KuGÎ2å@Vݱon—¯ÍKÝFs®‰Qa^…¸L…5FB‹¼tþƒ?w>¬iúN!#Íü qMXµ˜´üñ(k&W]ÍÕà}ˆ‘»O"èã Aó$Ä=©°@ú_*² ý‘$„ô÷„ ù¨šèC…‰Ææë©Â„,T†.ÄTaB©f¸ÑÄ\TØÚ_'mëµ#„¹0DG‹D¼bÇÕcÛ£ËÛnºuP§âÏ!YH4öÌ:bEêï¶›nýrâuàœ…ÓóÙ©¥81àÁ‰ð€ílIÄëSS·ŸEò’³HT]nƒ"'/x ç9ô­œ†V@!nªþ>žø¸_›ZzŽ Çƒç¯È^+Zœ-‰x¸H¼¬±wêö³ˆ_C‚ÛÄUTä(Nšº4!­…BÜ0B‚·Ýtë‘d¬çÀTÐÕ\ÔbÝ»6Gì!rì寱‹ä S·¿†ä5ÄB‘‘c 1!&âfP-ðóÉ’-SANWJp7N¥ŽØÕM±ÅKα‹äΩÛ_CŒ[Å=̧"Ç…˜Þ„x„ ×ÚÜ¥þÈ7f¶Ýtëˉßûž© “ê¯ë•,Ú]±5#6q,åØMµ8vlêö׿Š;>8oZÅñü\ˆ¢gG<ÀŽïáÑÚ.uDü4Yrž›ë¯+õW‘`M‹¡øâ²Œ8‰¢#ŽÅ[!¾OÑb±‹è#S;…;ž9Žèˆ 1è'šxþ™Ï ü>ËË/6}R‚“xɦ‚ºD_¸ª»žã%޵J5±+‹ˆ£‚ÍȈíÃêÌtØSúè\Ä>ܸ Âª;7L}åÖj11!& Jˆ[b‡S>´T×ßB:á!v]OxaOM'ºUqlsIJdBQa³§.Êúèœ(ß‚+Z<=@-f¼KˆÉ‚â6ªðþ¥ˆ=Ä~‰NÙu]×ñ;ìe‰„¬&6ӉܛÃê¬cêœd‰DìÂõ;ÅhØ\pn˜ÚÿÊ©Á aÕ!& GˆÛ`‡S~t)b?Ó_¿Äg…/ì°}pGY5qYF\ ˆe]e—TúèbNE(‘©0Dãœñë_™üøÜµ˜uÄ„˜,!nœT…¿º‘ŸKpäÁñ-v8[ãÄ®ëÊÎ:)ÇŽ&ÇVGlfÄÅ€8Vç—Ðúè<$Ne(!¼° kŸ3¾í•ÉÛæ¨ÅQÄh‚"ÄÛáT…XŠHˆ¬¯H°o±ÃÊ×-ŒìÐwZ\•«}tJ횥jm¬[4ŒôB…pΟzerÇ\´˜U„˜,!n–T…ï[‚ȃ[ %Tw\’;Žëy^œ ´«H'„grlψÕÚaÛä"”ðc]‚Õ6¤ 8IÞ@0~K8ù_úÖbF„˜,!nÜH>7–K­Jøz@aȱ뺞S1¸#ëì")Žíqâ¥Z¬ŽlÖ&—p]ÄŠ.†¥'J#Ißö;ë1YBÜ,Âo½'Èå5•]çm{5›ëUîZ 7(ôŒØSgV­E.â1 k4 @k$¹ãuã·ÿlò?õgŠc–¯b0òBܬNC‰ÿ¹´¨Âª—äÅF÷ë˜cíEŽÕéáØ–›cê”nºH-Yë¦Âº#NŒ×sÆïxeòº>´xÍä¶¹íKλààô»æ~BZÂÈ qƒ¤*|Ç’,‘(ª°ÚÜkÙ±¥šÍsõÁæXguº -#ÖJ&ÜB:löÑéZ F4aHpÞÆï 'ß߇ϱîb„žN@HMF[ˆO‡“?+d¾ª çÎ×ÏK)Ê W”²‰ Št2 [:¡;b·èˆÕ1u²|Xé£óªí°è¦S»ælv8oô•”ÑâI£á? ,ú«F)…P¨cíôÚ ×U*ØTGlfÄŧr賿û5¢a³k®(¾ò­(>÷Êä{zr¸Kλ`Xÿ$„Œ,#,ÄÍÛá.A$=«gy5»ïÔ°ØV>áDžç¹ ¼né„=#¶vÓyi(áG–z5Ø¢á.F8QžÒ+_གྷýW d0ÂBÜ ©ÞdØÕí°=/®,.–å®ç:úà­š8ˈlÒ5uL– -vQ WvÍé ñk@ÈñëÆ÷ülrK}SÌ:bBLFUˆ´ÃiÝ KR NcƒklI*JŠ‹ßðò.n,ÜQ–{ù¬ðZ:»ˆüª’aÍ—e©»Æ“¤ƒñ¿'ÿUM-f1!&£*ÄÍ’ü‘Ÿªp*¾™›ÖØžTÅÅÿÍqòI’x¸E›zBÑb(¯rb¨}tʤk‘U*\Ö5We„½¢(ׇuÄ„˜Œ¤7ž#rS œza¯øÖíbŠÍâbcåéÔþº, FÉÔî¯çÂZ"äF¸T‚M#,ßöôÜC:bBLFRˆ$M‡¯ 2åuóF¤XãT«“ éˆ-ÿ Nìk“)cíŽ8+–HŠ¡JB ÔÌ…Å…¥rÙMøåÁÈëÆÿÙä;ꤜô‡“ÑâÆípòûKÐQôWFš5ŽÜîxr$´Iä{Ž;êc;´jb{É„˜_Â+ØáªÙ$ºa½T®¤Š¹.Œ&1=!nÔ_]´ÃNÑ 9®cU9>±=I«øÓÁ÷{ž§Í¤U°9Öiˆå’ÙáÒ’ápÁçœñïL®íjŠMb2bBܼþwcˆ]…u!Vާ•#¡¿÷'óá{ð=ø~6U±ç:ÚÔG¬–LÈÉ%<$f€®c—5#ìÚ²M…Ú¦˜Ñ!&#&ÄÍ“«°“i®STd¯¼¯ÆHè¼ ÍGäÂñ<ßÜawÄÚä>àd7ª%åc—aÛ³fNÞpäš:ð)΄˜Œ’·a¢µ­ÿ:€£ª°á‹Lj,¼\ »$–É(œl2 c¬sÁ+ÓK;ì:p¢üYÕc— þ0³§Ä «›Îþ•ÉUÕéŸâLˆÉ( qã$—ûè8©Ôæ^Óê‹«“ŠÝwÊèg1=¦:õ„鈕ÇÓ©%kú8æ’®9³®4‹P¼pÁ;õL13bBLFFˆO‡d3K8 –mG‘cÍËh"¯r+I*ԑЙ;Žçzr ZM¬:⼂ØGbFÃY„f„ÕaMyUÙ•é°ò¶;âLˆÉÈq³¤¹Ä¯.5ôWuÄŠ[" ­aµÆ~Ñ«S{‰SÜ!q”>'I-–ÐT8Ä‘9wO#l“`é‚ ¦89¬L'èˆ 1 !nƒNÖ{i.aÑ_U‚¥)VÙ±%¦5v‹I…_|–RPdc…™M< Vª•¬i]sžÍklZà Ö¹N:Á:bBLFCˆ[Ad–ä:™ÈåX¬ÑbŠÒr7µèØL*ò¼Øu=×ñ”tBuÄùäÈﶱ˵Œp7ÍM×8¶¥Ë·HGLˆÁqì0€¢6´Ø*ÇNQŽÕàXO*\[R¡Î%ï!ò<ß+ö×9Ú8¿à…-Úp8M‚kØÞ.*Ü]ˆ™b0BÜ:²¡\‹s/lȱ[”ãB%rYR¡ÏœéÄ®ëÊÁNæˆ/›ý²$‘(Lå^ìˆsz•àjv€ê‡(±Ž˜“¶ qìpÚSwÁÒr!F‰Y.j´½îM‹,ÔI5Í™3=ù¤ç¢#Níp”V.85²ˆBÙCýä!œW²ã¨è¯c1!&mâ–¼ÅÃY¥SJ!Q¡Â®M‹«ê.Œ¤Bªp6ôÎq<Ïód:‘©Ëûè <‹¨®y¨éyµüÁ¶õµ²o’Ñ!&­â6Øá”Ž©7e¸¸ b粺 Í «Ã£}1¾Ãs¼,Hb¿HäóõôÔÿ–ýžI©Öâš¡°£ BLZ-Ä-¢´§ÎjÕ#»XVwQ©y±ïz©a*<h¹pµ×ñ¼ ;if4AˆI{…¸EvÀÙ®{Øœe]íÖ¢ UŽUEÎLqä¹¢š Ž‡D̲#‹¨´½÷=` ¬AGLˆI{…¸]X¢‰¹/Zˆa*¸Yh‘Ç‹}Ïõ¸b?Uá|ÐsµPUû€1!&-âvÙaÔqă Ž^gxŽë»®ç!‘YD³ [è Ĥ¥BÜ:+Äi'^·×êdÙõ7f7ŽňD°Èq;aFLˆI넸•v¥*9—E÷¹cHŠF8ö+úË"6p£‘ƒ8AG4ÊqœÏ¯–·«ýò|ª BLZ'Äm¥kÚ -•Á‚XtE¥hª{™+Ïìp\À‹7Ž;ˆD1" ãäÖX•à29–tUêÁj7ëˆ 1i—·Õ£UM%î’ö–H°ÔߨO…#ž­ì!qc±“:â8ÁYPdZ¬Êq\"Ç¥fÙé.¸Ý•ºüÇŠŽ˜“v q‹é,T tY‡[¬I°—§Ê£’òÙà"qãÄѰpÄq‚8F¹Çõä8¶%˪÷oˬ˜bÒ"!n¯,™CwQÎD6.“`C‘¥VU85Â.à"ñ’Ä‹bÄnÁÇ1:»…˜"ÊÔ¶TŽ{vÑ5\.|7ÅåÉ¿»“«Ê¾È(b4AˆN‹„¸µlÞ¸~çÍØúÑ¿®²½ö"Ì 0¬IDAT ö œk®__·(ÁY.œ†‰¢ÂâD1Å b'Sa!ÄŠ5ŽËq¾8¹òÖÍ.TjôšÊgÖñá¡„˜´Eˆ[m‡]r^ÕgF8VV ÁÕäXó¿®j„=-Fâ&žLjÜ,—È¢‰((eËUXb'·Æš'•…e}Õ~¹F„˜´BˆG@…‚ϵ¨°Ùá&%X«Bó ¬i±Ò)'í°xFsâ"ñ¢‘‹ØAìfp‚ˆc% p‹B¬YãbR¡Zãžä¸Ú/WÀ„˜´BˆGƒR.);Ë%ØAسˆ¢“¶'â)^œ8qŒØM³à™#V„8R{íJ¬±ãÈ”ã®={ÕZìÔbq&Ĥy! ; #š(«yHÏ›'†þZ³Wšâ,N5Ý…(v¹YF¬8â´š86LqQ‹Å Š¤B¦ÆšW™åbÝÅ“gïJ{ê@GLˆæ…x$ÈúëVÕ<è%hÖî8¿h„,z.,–(q"WÉ%¤ª 5LrS,zít-"'3˽Xc«AÎÛŽ¾©º§ì¬#ÄFÃB<2vX`—`­ Ø:"#Ë\·ªS.€¸ ‹’5a‡…#N{ê2G#/œˆc¥”ÍÉ䶘BµÆŠ_Ž(Ù4ÈV;,6u…Ž˜:â^¨¨B3«€­K™V±’ ç¡„—I°¬]Ëq„¼p"•ãÈbŠ;%y±”ã:ÖX—ãbòß¼®K.q&ÄF“BúìšW±7/Õs‰Ø}tUƒ8Ô‘Ínöx¤L‹-±:7¼:¾N™w"6KÙ¢ôYJZXüħï_3¹ ° ƒŽ˜tÄCD¨Øš®›øyµ^ ™ §i–OuŠåkN1 @žNX2bÙS‡<”PkŠ£¸XÐ)ZœŠý÷ÞK˜b2!¦VÉbЉ,”pãÄ]sÒkƒ8´‘Íj:¬:bKá„P˜Z\˜*^‘ã´×NÄ{†¨Â`Õ!6èˆçƒ§>»æE›øx^\&Á5*ˆUGl)œ(vÙ™cK{íìÿʰâÖb2x!¦¶’Ƴ¼yµÄa‘`cds™#¶fÄêø:ËXgc’â8£_ ÐbBG<¯d©1¢7­.Œ£3r‰ŠÚµªŒØ(œ(T°Ù¦žøÚÃÃÍ"4˜b2`!¦®ƒL*¼øæÕ –q„k¨°L'*2b91±ªÅÚ¬˜ â÷¥.óc„%¬š Ąޏ¤ö­ù!ðò¿(Ýö­ÊKÞvY·›²óî;–oü»ª#·÷wA¼|篗mz¾òÀÛnì÷Gî{å?9ÏWþoõûÿ²ôÀÊ+¾ö£gÊ6ÕœÃ1!„4 …˜B†BL! C!&„†¡BHÃPˆ !¤a(Ä„Ò0bBi˜Z:NïéoÔFÍQ%ö+ö{`·QåVÚ¨ºbŸVL¨:°ÿÏ8ßöýïØ÷—S=j£âÀ~W¬µQuÅêQöÅÁé=]Fm áŠÕ£6†qÅêQUö{Åš£6*è.Ä×_su§æ<ò@X@’$Ïzx×÷üÞoÿÖ@NJ!¤šO}þK×¾ÿ}»î¼g×'>ÃŒ˜B†BL! C!&„†¡BHÃPˆ !¤a(Ä„Ò0UuÄk&WÍÛ}BȦbÜG•|wé`!„ôÄæëË6U qÅa„B3bBi 1!„4 …˜B†BL! C!&„†¡BHÃPˆ !¤aj=*‰Ò+‹y`ê’ó.PŸu´nÓ–o¦qê<ö‰BLȰ˜û£ÌF‘G¾1c®|íGÏÌÿ´%ç]Pg7 1!d>X„¿–¬¿“¬0#&„†¡BHÃPˆ !¤a˜2¨…uzáû¾ÄN>(æç&çÿ« #&¤íH]Ò°h«Áä_xß1!­Fsg²azd¹§vˆÕMσÅ毢úŸ®æ7¦Êý¼}3tÄ„ŒYʇXiÝs-¶v“½~ºúߘù;o #&dô¨Ðˆþ6-¬Ÿ®ÎGnÃ×B!&d$™» #¬1Ç{níG¦2zX3Í^iƒ¬‰YưnÓ–>>xk?23bBZÙƒÔ·òZË [EýO§­¬øøóöÍPˆ i;R‹Í'­£©Î±e+G‘úŸ®â#›u&rçyûfM2˜Š IIO[»Ò6*î¶~]OݘóümPˆ i/Õ>wñ°à¿ 1!íeÁÍYðß…˜²Hi¾³³ŽB†Ž˜aQÿ ‹~Pˆ  5V¶Hà·Q …˜¡Ðžü±qøUt…1!„4 …˜B†BL! C!&„†¡BHÃPˆ !¤a(Ä„Ò0…:âO}þKMÝ!„,ZR!¾àm—Þ±ûÒ^¾îš«ïØ}÷ o‰BF‰¹)á=BüÀ}Ÿìû&ž9ôpßÇBÈÂ`.*ÊŒ˜B†BL! C!&„†q\û‡¿ÓômBÈ"e×'>ƒ™‡ïmú6!dñrpzÏÿDSw»Æî{tIMEÑ 8’šnIIEND®B`‚fox-1.6.49/doc/screenshots/adie_edit.gif0000644000175000017500000005450711637250333015051 00000000000000GIF89a,È÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ,,ÈÿµYkÉM£8ÜDjÓHN#‚*dèâÁ„ >,xq¢F‹3Vä’âÆˆM‚Lù‘$Ë‘(=Âì(ò$M•.eÚ,Ù2fÍ•:þÌ9Ô'N£=o&å9“éΗOÝhÓ¶m X³jÝʵ«×¯`ÊKök›6[“DpËk[n$I›DÒÕ²xóêÝË·oÞ6µÝõK¸°a½·l¥Uœd°Ö·HhKòÕêá˘3kN»ªãÍ CMÒ†4Ö·Û[%q+’£¬Ù&y+©´-I³·µ)qû5\«–1¶Õfe¶‚ÀUÌú¶èçÐÝþ½zh[³‡h£š„¤H%¾ÁÿÖ}D[$xŸíþ=Å6åmHyo«Iš¶ÜL&á†ýì$gÝ€ %1Õ6 ¨`fIèÖÆ-Ù™Un—lŠaˆÕm³`•$²œ¥e$|sV€ÚY@ ^õV† ÆX˜Q'ãe„U$v)& {s Ûi—ž‡$´a‰„#F†` (J¨v¤ù—ž‹Vâ¨e^Z£â–`†uË]þIÙÆ\èùWls±yÚ6¸é·¢6kÆ À–€Ä’umhÙv±&W˜„ÒEUr…&ªè¢ŒîÕeBm8rC“>t–¥”^Z馚všé§˜†Ê)¨£Šê©©¤žÚ)ª¹‘ê«–Zÿ*iª¦Æz–A“Κ)«¥öªê¯°ú,°¼Ëi#€æå²Û0ël³Ð>+m´ÔNkmµØ^«m¶ÜÚÂí²]£¸äŽkn¹âÞ¢ì·ß†»î¶ð²ï¼òÖK¯µÚØ"K$ÖØÒ¯5ºüëoÀþ,0Àü¯ÂŒ°Ã ?¼pÂC\ñÄgüo¾ýr\°Ç;l È#‹,PÃK¬ðʳ¬1Ê0KsÄ4_<³Í2ç\óËË"‰5ùž tÉ!{ôÇD—ltÒGôÒP?-µÓT+=µÕÖ Ü±ÊCgpÀ[+ôÆþ"¼tÈh3­6Úf¬µÒdsÜvØYÃíoÓsüöØwÿ·@`Û=´Üý¶-µðëvÙzÿÛuÝ9.÷Ö’—MyÙ“7޹åšgyä›g}¹çœƒNº×u£žºÜ;®ðÖ}¯úãr9äŒw]và°ã.»ë©ëÍ8뺫¾¸ïd/°ÐlǾ{Ý>}K¿¶è[½,–T›õÙ˲}õ?zßý÷Sÿ½·ðƒ?oxà|§úú¸ Møã_[3ýØïc¾·ýƒ'¾á¶WÉ®q>ÒÉ~@»Øúw7‚p¢k_`Ô§ÀþÏ4àÆh K(N ’˜J`”%ÂŽh"Dá ©":¿9Ïx½k^ñÞCÎwèÛY¿Äå8oì,XjÿÒÖ¯fùkˆÞúˆ<]pd@Ìšºü5½‘Mo‡‹¢˜ÅE1€]دÆ-bq‡^ä"ŨƦñŒnd#À¼÷3ŽIBŽ‹ èö˜@>òtz›µQEsQ1hO$$ÇYHÚ‘›¢5Ù1GNq\‘ôAºõM~š{ î —¶úílŒÛææÇʸ¹²ìÛß §> ~ò• Œ¥.E·@})hw¼¤$…ɱélCfÀŒi Yœ,_‘IB#òŸ³ÈB?È{¡Öæb¹LÆ{Ä ÑÇ6âñnœÌ#çÚ6x¹ùÉ€}<^ïb—¼”ÕPh­{ðÿÎܽNø¤¡@Y¦ ðõÌtD¼ÚÁ4gúK\p¨$ˆ°›³PæLZÈl7$Ü¢ DH-°Ê4B-I*‚-"Aš·0žì¤Ú„FËIÖnžŒgjÂÌRêSpKœØ.s*ÁSÊ2~¼t Û@ÉTý nù‹jã¶/ÔÝ‘–Ïì_å&8ÁÓ¥R1H¨  $\S0’ ”º ×ÔbDfÕÏYðšÒ4¦ E l‘q2/–Ãk¡5i¹€}‰\&:ŸD0_‰äñàYþÑscÌb&IEM–m˜™<£e ù/u­‘´œåŸÙY+ÖŒRÄŸA9‰}ÿ˜ì`yKÝòÈæÌ(jãNý"ABH†$¼õIjD fƒº41GšÜäf’"V8"$¸ÆZ’®8šÑ‰•›0QGÐÛÕnb¦4*e‹DQ”¼æ}Ú(Û®¦rkµó[Mµ*¸úŽrùu§« ~ÙQcó­_4Ó:±˜òsf×ÚZ½$¥g6×\Ë‰Š :\s.!ÊO$Ö2φ¢P²”~䫵öpr-Îg))æÕ³=®œ?õ* ý6O‰õ ‡ œ6û9¼ÒõȺò YɹÛl-„±åqÓ8·ÛQ¿ihC~–âðÈ<²Pk>ØM†ÐIË lÄ6ÕYœ'ÿÌ'ÚF–eqc[€eð3àî`Õý1‘°ƒ½]ïðÏc¢·lÈ”[jžÚÉ¿ÍT•U“é”ñVS¬õwmRóåàøº)dRg’´ú$ 6Ej­Y-nOA©`Ø)+‚I(.w›FiÕMlŸd‹âÃZ Û‚ýï§C ôg!ü1]·ø~·-¬eöEÒ*1wÁ~ä¿[¶ÆJuÜš®}DÝFÛ´}ÜN¯]7'w쎰<â =±T½¹³„Љk‚Ll· åò’öeÆܺvâ}H‰ÕZhÁª oøž.ž4žÝ†ïÈÁv~W0üî&I¬!L¼“Ρô"mð*ía#ÿÞ&‚o›ý«0 qZ7Hêe-5hh¤²|žó|ç“"–‡®e½çGÿ9Зê,gYçNúÏ£Žt¡ê¥a:Ïí£õ«Ý>F§úЧžô²§!ì\G:Ù×¾ó´síj»ÙÛ÷±Ÿ%í;÷^¹ÍÌH ºp–]i+H‘[Ôaq°D$Ñeac ŸÞóžõ"½ÉWÞzÚ“<å-_yÍs~ó”—<çG¿yÒc^ôŸïüåKzÕ»Þô¢g=æaŸùÙË>ö¶Ï=îw_{Þ»¾ô|«êÝ®šºúµÁÎh)vQ‰:XBRhÁ—çfsxZí™ åë²ê²“3´j?tÿ¤gºÊ&ÕÞãú™ÜLjS¿Òî¯ß-û,ÿðK<©L*.ÛwÓû~•ú6äk?C0Eœeò S!ov° vP R!;F9w–@TÖNúÄ;Ûw;¹`/–GÓO-„P~U0¯³?¹scø}!ØãbEö;XÊFƒ˜T6C.¦<¸xù¢isG„Aºð#,D¡ v`ÕƒöGc¼ƒUúµGçTìCq]C2’ö„iæCJO2cƒoTÃ5TS]E}¢FSG•SðwTéæI 6‡tX‡tˆn åd`c xô‚þÒCó þ  û/.pÇ7_ÔÃSuÃD)ÿˆqà×b±ÔC#[04ƒxƒïd2,˜‰iø<ôÄ6³¤[“³3¾erH©;H–oÀ„¨0̃r)` {•eæŠþԊÀ–4¶Ö@5xk ˆƒºU=DðúÀ–ûào¹m©q9—iP\úpRD —Ñ6?øAú2z3n·¡€ò‡Ú` ýÇ#8g'âHp|u!’H@@µa oAgR™Yß)Üa™M€,+u£é~y~D%rèãfù…è>@ï! d)qP\€µ4mV™Ç‡ò™,"Á¼é/o@»‡ïgp~I‘Ù–¶ —Ùi‘oi›Öÿÿàúqvl¹på=ç†Gö“;+ÕÞ2Mà#µ€_a#aÆ™vha ðLÒ` +µWmUñaUv'ÐÛ¡h1ÈÒx÷‚'xNé4?Ó€# iÀ–$9h3= hñRá‰Ú@„™×䟒9R $PVéÑVÒ‰«è:]™”îI=k9—$ —Ù–HÊ–¶` ö±Œ"éuŒ`#„¹Ô?Šù òI=ëQ<·µ<˜‰ Š$h ×QÌå%9¡B“,•ÅuM<ú[há’Q¦‚Î6. ”p½ IÁ–Ìö/ëD±ÐGÿZˆ¦VA¦ê@‘&å!)¦üqR²§Ê5ÂÕY*=W?Ìl;@S¨É„ØI¢m—Üi¤x$žä9#Jˆ£žƒ‡#™5’À‹¶æ§[“h6·_¿% ‚•¯áLmªýRQI@V‰§±nQiŠtº™¨Ä6c)P?ø8ôtSáG'#z¤›ôbgÕ©þv:­ˆ™Š\hA%Ö…•mªáÑɉ<3悸5R$Ú¨Kªmžã9£Q:1V=ü²‡S~õSkéG‰ö¦`@DĈv%þj›„­j¡Ÿ©eš ÿ‘$ÜQ¸Á²'¢ú“§4…£Xh*ƒóú@—tI „ÆÁ#ÜÅ™jQwµº`M’aV‘P,¥p‚<ú6‹X •µ6 ”¥€'kÙ¨¹$—o YöΚi×3?F±àˆÄJfõY{Õc÷8¦}PÔI‘³S䈑CB 4r »Ië" %\S1]SHŰCI–i² ÔIHˆâÔ8‘{ªÚ0£BÃC Ù~þ²e»¡j Ä´Öf9 +9ˆ’”X=‰«ÛY¼Fj›Ý‰‘o’ê´R]C|€Ó#µ :׬t+o±eZùI…[.³}Çÿ£0…$0®‘f932Ž€ŒY;ÃT_Sõ`ϦI –|º·Æ´é†2ã1]"r±ƒo±†’³»Tê/åYKD4ù9‘‡{2m[«Hj«ßù–FÊÜÉBÜëdzsGô(®¯« 0ÿ*\XÛq‹T=´…£uA"WT³Ë7’–U—UgŸ¤ìê‰ç3ndXÒfÀ¢cZ‹TSŠûp[t@G£Hùto^Y|¬¼‚%0¶€`SAÅ!‰Bú .Ú ·Sa‹`@3¥¡k &Œ,T8ñÑ/Þ4]Š r¡k 7GNËv…¦ó¿•ä‡'óDf‰@ûfAM•¬HEºVøÄx…®Ökùÿg1ÉÃgèç;«;‚J)‰¿Æ~×Y?RÈBÜb.+t„ª†»654Ñs¥"™:=¢¹€\uõ¤ÓåLm6 #o÷ÅgW䃡¨7kˆËš^´”mÿÔ¡×æ7»«5W´Ç½ì—~³Ž˜d€{P‡º_> ©Iõ®ØI¿¬n.<ŽCªå°é*h(C˜Î4†Ý ŒVèA%ܵWÄq­þÇŠé—;̤#I|œ2å¸PMs¸U3n$ÇL`3•ÓpŸD4õGÐGì0H”6|¦kJ¨ÜØÒ‘®eE¾Ø?!«=ÝÑýÑ}? u4=•`[¾‹»á’»I4…_£›>̳€ÿw}ÃDðÕŽ£8Ô6‚FÖcQ›=…0ý¾ÅgfÃFY¥¸ùç4˜ä»çd~úÃOT6¬­¨¹$@$@VYÝÕY]ZW`-9šWDPjVgÎ;|xÔË(ÉLz|5…Ž9Sãc®£E>æ…€g>ÇPºÌqF»l‹ôƒžNýÓSgÉOÁ»®šŠNýC×w#{ÐĈɊ¹ÙœÝÙžýÙÌ›>$ù¼‘SË^4´@÷ÓN-Dj½¦wéDºóI;ÔCgç¨ZÂC€=ɦ%mûV“ÝÈižø1v™ÆPsµ  ã?„Ä;è¼âÿÂÒ’[8tTD`f[æü€wë_¥,c =]=éѬêü¤š¤šVsºpk!°œîc#Ù®)‚IäˆFÌIìx'.µ!¡$·ÿEK˜y 2÷¨\ñÑPßì¼ ª=;™ 4Ii|Œ öÒ,7WTnEÞÅ;Á{óÖ…²0ˆ$DF£=|ÝÄ#ßánû"œïù ?ú>3bßeè×±tä¼ÚÕ/‘`Û2þ#ù#hÊ#ÞSû~=âÌŠ£Øˆþã9Ï5a¨JAƒØ"4B\6² âòú·yBóet ×C'ÛCgŠã3ÕïÕÿ^í³sS½ó~xrý×Ýß.Á·Ú[=¶‰Þ"c¥2þK"#ÀRœ‡êöåy´ø¡Ô8˜‰Ä´aM›5‚º ´5РAm¶:4èК®kÖ:LˆÐbC‹;vtxÍ GŒ jÛ¦/å5}Az\Ø‘¡CŽ ¯q<øñ`Ć.kʳäÄ *HçK¢¶Šüû§/êTûªúûgÕjÖªS¥jÓ—q¤-Y’€J²UªZ¶ÿ°nݺ¶kW·ûþ!¥s,Î’3ej”¨à¦L­Ý"ºk'ÑÂ|5}¨M$ÂmGÞê9ñfIŒgr¼&‘qGœ#MÕK:pi’.;nvÌt(ÿâ’ +µÚb}ûôõî[øïáÀƒë³¶ícDK‘H£•]ëUß^§jµªôÀ9iJ¼mM±I¿3Îx‘hxÅcWl:ð»ü͹7ͺ»j܇&K5åëì%ûVãï¯ûÈð#m0[ϨÉ>1‘²emPÚpÃm:üCGQCÀ´‘ų´&–´²ƒÑºcœÎªô«2¦bªÈ¡ðn‘ÂÜ2¾ýc-"ÿä³&4ŽÜ¶Â”Dª'üŒJ¶îÒë‘5ɼ)'1ÒM2ÆR̦ù83ð£+ÃLJÉø’:ŠN;ëÄS)ÁB³%ç.JqFïTÐèÿÂrS5Èž,(=“0TŠ$,3óë»G5ã 3ËL:óBÒ, ¬Ì„„4‰3+åƒ'ÄFzS*3òl#ùËÖOó1¦Ú;©M6mSÁ™Êb -¯¾‘j›ª½nÙ¯¢bVh“Å )Ú<]*Lõhr“ÉØ°]U¼RŠlÓ'qU“>†4erI[ÂËL§, œï¯Ô¨|­3ÑÌ­0zÔÉ"݆†’X˜|[ëdh¢6Ü0º;IÚHœE@©ø£€hHƒ-üÑ$ȱHB#üa $¤¡*`q”.R„–ÿ&éÂE›Ž,’°;Ž0 ihB`§oXeT.áÝ@Ú`8kÄ!EUÛ†áÚ@PµÁ ³E#ÖöPB4‹C6Ã6˜åf ¡°HŽ} ñ!i4=<GâØÌb8¨`å.ƒ¡ ¸!ŠE¬LÕ"Ç‹(Œ‰²¨a­A‚ü°}ÚÀÿb !ˆ’0œáœ¸?“HÚHâšI=²» bzžÒ,»è£,€” þHüƒŽÔFÚp—Ô†,Î Û‹¸R£"VÍW“uti#w%¶ d` 8²)HCK@‚ U#AÀÇÿ hÄ0B7¤²@$´G€H`šØa¨_Îò×µ¶Hʉæ3ú’EºÒ› uê]T“ Ê œ’;¬Ú‹pMåX#œ%HB9%ApÚ¢Hp¤,PàH$¡ !&4yWNY3œT» Ò°Ç6¤A{á|h$®QNmœ$TT"ÊQ–Ó”à´F ÿa®Ý˜f!Š$jQ£BëbŽH˜#U… ªlQÙ–6Ô9Ãa:ò£ìŒ& äÐ: ê̦-Ô)Þa³ lÕȺ È"Òt:é*Bu敯fzÛiî ½ .6?Kˆ$Tx•¡º„"ÿ.™šG_Ú†ª³¯’AB4PºžœÚØ]g“ðÙŠˆö$ÜlÄEGûHäÕ²ëÝ0×@¶á™qdC{"B¶ÌÅ*§ü‡8GéHS:Òªdegzd×bÉR* TAR ]ê^Ô û”Ñ€\C‡ŠSàä^(¡Nåè Ñ¦ZÉ—„¢s˜ˆE“¸¹C‡ “¥uí®J×i‰³ÑyþÜ\àÜ4¡3áDl˜¥?†Ç8njr¨+!ƒ§N7twAI]/ŒNf’wöÕ˜‡“`ªYÖw\'"›÷®gÂo< 'T± ÉÍj #¶Àé稃\OЦ?}ä‡ZTˆô © ‘ÿÅRwÙ®,!²€ò“Éâé(«“QlìHÀO±H(AK°CŸ€ÀªqT¹^f°yq o¬9ÌCZ‚’–ìÃU”¹SBÿn;ÕÍN¯REÆ+šàÏ'n¹n:ÑM¶•iŽ©º2rÜsŸ QOLb‰Kc ¬J—°`¶˜ÕyVŒîéÓŸÿ¥Éµr×3Í$5Ùº„ ^ÝJŒ÷¦÷£ôE)#Å&l«yaÈ䳕u«6Æ»ÖÈ-²¸ªùŠ#’1Û6ùÜ]2VW‰c5ÔJnóOy]vʶ‹ÔÛË\f]<#}ÈI=z: mýØxS¨Ü€7º‘¿—xÓ¤ž'âTÛª4{›Kꂞ^ª22Áù¬ZŸÒ—ã [½+WFsML@‹ íÛõ²Ç‡b–µ„%ÙwRVµÿAˆ Z»Ë]NrK N—Û˜ŠvéÙ©^3ÖsÏ‚¨ùI†U)ô,!MR„·Ò¸30:do±œ>å3'1N`‘·M Ó~üt©êœú†¶1{§¤öÿ‹äØ7ýë±ðИ±‘ #8«Þa/Þ±†Ûñо³:¸Áõ)4‘A$!•z¡ºêQ=„çcs,.T=*T+#Ê¢Ì É¿Hà ¤9ªçP²+Ó©J‹Ô¹ɰd%Z±šÝÐC"*™À±<Å R š¹)½5‹—1éÂÆ 44\’’j©ú(øÀ7¨…ÐHt =¬”±‚€‘„5¦º¤’aÊáÉ ÃãÁ1¯¨䈅¨ˆ…F°«@”ƒÚ 7@Ž,‘抈h‹9B²!Y-0‘´È+#繆H›š6Ð3’³!´8BHJ‹@‹ÿ)K² ÁˆZh¹îi”`$Π2³Y':ÆÄâ Þü9Ô°?2Qº± £K´&™P3[ ߉Kp¹æQª–«¢Œ0OA ëÍßäMö!›p¤ "9‡ðEŒà –´tTêéµ ¡‚ú‡€¢+Ô‘¡ejžF84ª³…J@*×yÊ« ¤º ý;Û¡€*Í‚® ¯* aŠ‚2'aÊ,GðÍu*©F p"sšQlR£&è³"GšÑ ž÷’…³*(å²r)6rн@<ÊaÅòµ Š4™Qa'ÞOÏ $µÑÞä R£BµŽB²jÿp„w²†rJ'p©P&9(úÚ< ¦‰Ìì˜ ·à©H(QŠÀ÷D‹î©šVZIѬß{.‡:!Ól‚âž@õ´Ý‰¦Ai¨|K iª"{«gÒ0á Lf‚»lʦ$pT‡*‹l"©QµÊè´F°l¦ó¢+°S§>B-n¢šl¼Á/äÃÍ¡¥d q¾‘((7C+9P©$è´H(‚ѪRÚ5‡p¯Ú+Wµ¬1æúü!Û0Ûr¤»²©öÓ¹ \°ÀЫŠXTáѳJ&ÞE‰ŒÒ¥ ÅŠM‹ÓPڇ͊Tí);åˆHÝ£#&þQÓp‚ÀÕ´’"ÿ=SUKz¯¼š0•*L‰ÃÒà¤/ø5Gp°8°ÓÝãÔK¹•› Y° »ÀŠë)°H§ÚUÞ1.þŒ­"…@§gê£@"Ò4X˜³RÊójpJ-öRÚ5"µ9ðyˆzÌ#;»®€Ô£¸;4$¶g›2êh¡úZ© ¢š`½[+àŠ¹X°†ð<¥©I5º†1U§$Hí)±mž@r¨P¡h³ÂEÁ4.»Õž‚¨°¢,5mƒ('Ħñ8™žSž”íÑUÚŽ»àÀ‰\¾Ú¡1#ܺÒ/ÆM"k -Õ¤³É=¨¹=ÒúÔ7mÖŠ¢Û€r)Ã!ÿ+¼ˆÛøF‹;vUDQb)Öô‰Ó¦C >©…$­†D´}h*»8›+{.1 x#É9!¤ÞÔ<‹´”'!¢z.\™ñí—¡HŸM1YdTÞŸè§(¼EÆ@•Ÿ³9‚Œ]àŒŸC_i¾¡à_Ž!ü¼ɸAÙ8ÓÑŠòòÊ â ¼y¥ÈPª³!P]‚‡|–*£`:‘¬Œ‘«r ÂÉ\%Ñ‹-4wlœë;ºÓÀÕ<üáž'£Ó‘î?n\3öˆôƒR>áß5 ãø›ˆE± 4lãËšù»ÿ¤ ´Ðäi|[íÕä? 4š:L™üa{Ë ÍrŽ'ý¾Ê!Ëxþ1lÂ[’®Œùû ¨²èEÚöEDºíÚV1ÿ»R±ÂüZy)9$ãb&ƒJ´![Mö ¨sœ^iE6Q É9wÜQ®écƈz¶8@BÉ€î<ü¡|@.‘EËxƒ#æ&ñÇ€™ËÀÃÚa¦ñ@¤Ù6½³oÆÂï®ßC­`b¦ðž*AžÌøHÿ„fˆ¾%‹w¢õò88%$p£ÌÓ¾”Ο‘ÐãÇøÉqC"i“ué °; ')7¤Y(‹@Õül×vn2pAC‚aéd¦>R\൸ZëOòiÍi‚4Þ0Þ—XÀgx”$ÕL”z@lj¢‘Š(TU¢iú«!µ"«)j"C²†žÉÀÕT;ÿ‡ÀYk8Ò]hƒ ‚$T+Z1åY–o üˆÿQ‹6ˆ„ûŒRŪÐ2ß9j扄4ØŒ žý1¤ñ1‹#U+ÅJÚ kæAóÚ‚$u ¹™%Éu‹>Efr ¬òmH›âsM‚°äêÉЙïû!Š$h-,ÍÛB¢ÕÞ9Šùš¦º÷:¯QãUöJƒÍštrЂڡÙò*f:S «lª"UA6?xâl×B4߬îlªùÖôr¯mh14?%«/iHvâ0º¦gÚ¦ˆÚbª­vGóŒº0¡ƒydÀÈ1ŽÁе836`Í}ØñáÿÄõ·èþ †¬»1 =4AM¥ Õ<’‹A'Tj1n2-‡ e³¢U² Ùt"Ú>û!"3];¯=B‚nMޢ܉ ³ f[,Šóð9h³TM=Ááón v¥\wÖí°l²5ªY¥«´˜à)¾ê4 ’&a:Ši"w8>©á5»YR‰­µ˜£zP7Ygû!}¨lz–E5,`Ò.Mqò¦7¦=:Uñ‘Â+¨Õ¤wtº(—jˆ:¡pGó©ÉUïZ-¤E‚¼ºtÅÊß±õMeÍ¿7Ã’Òú¼ nôËÛzv‹­|¶Z­¢v›­Ç-'¤¥Ÿ>“! +¯š3¨o¢ÿaš"µr ŒGèÀÈ±Šž xÔJ4hž?bÉ”Dr†–/ßÏoŸIŠ}ž~ŪöÂU?w„&( 4Ќڬ„/T-1Õ¡öù0Ðbóô·eÓe¢¾à­gyæ–0Gñˆ4I’ I")¶¶Ú IcM—µ6mlÙf‰¤"Ú’ÈŠ”¦Q›4’6&id‹Ä5k¶´É*hk`šH× l3P[#‚×Nn{hMÛÏ•>!ZÛéÓ–­"ÿþùÛÇtŸ¿Pÿéû2ÒS[ÖH$±±Í>­Z!"äu¥$}×ZÛ&Ô-Pˆqúœ«¨PŸw¯á-ªM+]²þÿö[7%ÐÄAµ]»  §­žI8êû“oQ¯néÎ] X¬W]׈¦ü¼XèÚÑt·iÛ§Mß6}*gëMŒX+P¾€år6´§h t½vfì• dº¼ÛÖž úùéÐ*‘P­^uêõ¨K«âEªµµ—UÚ’%éaÊHaÏÒ†>û–söÖv±,öï]Ü÷ï'ÌžìlzFDÉ"Ô}nÄ‚Z~G__¼áçÕP‹ÑV`¥…až%¶›søáGÖ„ÖÀ·Ÿƒz ( ]:bt#†ˆ›…IfKi"¥TSM=åcvP9…D(D H6Ù]ä™åSZ…\.v‹ŒYb—ÿŽ"‡£r6)¢•l¡çà„@ˆ¦~ÒŸp ÑÇ"hlÙ)¦•ìøWJlÅžpÚ`É`ƒªÈ¡j‚XD;õ§ƒ;™æá—¾Æš5ú$¦©6ÚØÓ©§Šaêƒ+ÉRËyDm©’Q ©”H#F‘WÈy:˜W{ª&RºÅg¢ŠMÞ¬tz=ˆ¡Áõf]û1öÙ\…ù7í…D1ÈQ:§“îýÙ¤_ Î&+^·É¦µ.™PŒRøœjÚ$×)_Œ%_|õÄÚ½—-K^G¦[a‚jUH"!¥j%¥¯~ WךÂa91ˆŠö¥_ŸÃy¶k€g9,ÿ±+©&[Íwn«êº¢OôEë}…NÑœG'”Í‹âˆ|éºw'“ÚÊGÛÎñyhyçá—–i³ÅBF"e’³4‚5 l!‚Z‘«Q³i‹ã€ÃòÉâ\ÿ†ò£Ÿ%²˜ÁÉW¥]U;gTÓ<‡ÙÞÜ€m|!tô 8è—²Bkk®ÿA(.¥Rþnž|3ˆ¬ešw¡J’ÀTZ-Ü €€AÆÖ$쉴έ°ÎX!ˆÁ- ŸÚ4¦Ka£ºT#€~nhºÆkµæ³I¸­‚ƲµîÑqÐlU¢ Aj% €D¸lÛCˆ¬˜!P%IÀæ?b‘œ¼8«.þ|¤Â†KèccJ;Š-èg— ‹^äÚ€6|s¢H ¾É¸!M¦J„oR”61H2‰ùQ‰¦“tièP– .E$6ÚI ï|‰,%‘b>Ä%hW’@Ñ´A³$Œ$Ð`‹X£—7TI|) $i´©½L’`¼BÑÆÌQ©$`êÿ@˜éT“XÃI@Qã"KK|Ô"u©N\ˆƒb²Y!‚5¨B„0ILå\ßÇ𨶴ÌÈeDi¸ØR4kàJFDò¨#PU‰ÚÍÈHÓ@Ñ$Ä—¢™eAKQ»z4 €#ˆY€ªºA0hd"Ûm VZ™%Aë®”61xIjñÀ ÈI[ÚVÚH‚¢‘A\£¡o•‡Eðb,Ræô³$BVÑ–Œ4$.í%1I°±ØU½ÍXUºZÁxç†A£ ¸&56¡®±+t'h¡æ@f™Z§FØD7}©ƒÆÒ…ÿœCà¬N•hBÿ!Ò6È‚£(AZqùÁ@W©•Y) ¶cK´ Ž(¥.:Ô­4õ'#.qG“ÊLV ¦ C& Ü ã–*Uj ¶1JÅ|L"±+R)š†“0µªIˆƒÔÓaäre§›ÀpñB!sô^ý0l':‘w--Æ3-PUhƒªÚ%˜Æ¼]Ï<´SƒÅ+Ž,?!V•˜Ù“¡N§hiN)šéHô–+Éü-{2ˆ $¬õfU¯›Ó'µá¨Å€UbRʘ©ÞDÂrµáÙ£ºs6¼•ŠEþzEløV â+•… HÍtKŬ“¡©b™¥5„}“ÿü(­¦è6<‹ŸVŸ9§Þ|Iz›Õ!Z¦=÷ŒŒ4&·\«Z—é-`ôÁHË\5 ÐmÈTF\í)ßû^myŽkC;LÛ(d­¸ˆÁ¶.è/ƒ)d[ó].ZѰc Ùº(º…”ßxk…Ñý%ŠZù¢-j¡•ÏÜCŠM„ecÀ£´ÑŠŸdIPD@±dæ½ø°$± ŽÆâ/¥Æ« š5a²CJÏWYÓ0mÔ*Y=ŵQÍD?£„›ÎDòØÎ+€#·5<Ú´¦U˜F…°—vÞK¸94òçÅÊ·ÀJ1gCôj¼Æ´¨1ɬéµüsb³çD-ÿºw7“ØðØ-/ØÈ Rùé# Ei=±®­°‰D#â`Älµ‘‹±è™ñ?9i­OVéêÒŸv~G³‡è4-ÌËèyŹç¬;˜A™”±èL#ÓÞä[ û¶ŸL–vë¦âaA_oÓõ]öêkW{4„C(#-ñD¼ƒÞ<e ‘ÚùM§æ¨ÄXÑ^_€xÉîÍT†ß$ÚBß26âKàÓO”á:þJjÜÌØ™]$ `ùx#¯ø›•ÔM^T ¥\DµÙB°ÙELmÄDåTlŠý’X¥€K V |\™y“¶¡ÛwC(PT«aDU}‹+Y^ž!T¥ÁvP¦l»$ÄD”D´æKàÖ7 Dƒ¶gõÇ@ Á-¨Bôÿ–MH„R%ÁwݨK¥EÉY”YBDBnSýÊZ²lCS°Av-¡ÉŸø¼Ÿm¶Õ>0‹‚Q8"ÈÝôÞд˜Ž¹4ñÙG}Ó¨½\2™Äh;†`˜W<)}TI˜…JáÄBÐ){É’0¨-,Éœ)˽‰í@DK~†,[UP…䵇âVšU‰1S0šH\ÔGégAW /ª•IýtÅYkfÛ ¶Á5|Ür‚`© rù.E˜ÚYJ¢âøÕ D0TúGÚK&Ïpt9ÂXy”R‰T/NZºq.-URÙÕlXÕV¸A«ÅÔ ¸ÉÑPIzpÿEN§6ÔÖ/YÆÆ@Gw2g´Ä‹ú™"ª;1Dkö:U z[©‰Ø5¬WCœJ.QÆ[aeØ×Y•HŸKæå~NK0.e6Ö4–K8‘ébAŠ»ˆÿAgOêfÃÚX¬~–Kñi°¦ADÕá,MÔ‰!g”S R¥µ¬«r3qŸrÚg‰Ö}•ÄHÉw)“{ÚŽiÊBôTìS{0ÕIÄ–PéYWUUWÕy׆õRµQFI(—Œ‘týIõÖµf[#ì [À‰=ýƒIH…°òm´ÊÍdÝQ]ÚQLPœÌò…ÉŸ1N®J‚*EÿÂy€Ç`´ÓBÜÅ–Ý‹æF„$4‚ˆÔ]C,HÄ6LD*iCh® HiЦ<èùîÞ.„5½ÜOènŸt9ùReènëjµvB4˜̫>é霥_š y\$Ê’€ŠlÜr"ò-“ÔbÑ9ŒwÔÂ4\Ì•‡wàïþbP$$Rn 1в•gÈÓ~‹ _:£èàÔç´¤e$qÓ ^ltð.p_ ‡íÈ ÚåÌÝ5c¥8žÀ5+Ô°iBñu0ç¹F›@Ï\’&éQ[ùC½ô†d$†½ô•EÿØáš8®éÌ2NàòNvÚʰÜë{ù˜&&¦F¥"fñð5Mî ¥XȨo²áß°äÕpÅ0£Óðçùœ£” ƒÎ ñ£~0ÉHBÀÁô“Ç<Òg‚§IÊL y"³öj6îj&®©K PÐBFaôÜ ßÝ4&?ÒûÕ©›OtåèöxX° ·H—Qo¡ÉJŸð¢Ýg,&퀦¥N°$§LbQ¡¾d{^Hô芡c˜lF•ø'Þ\ȵ¬ñj{Žrxc]ŽF,XíbH¼98|“%Ü€ €8™Ó aÀªD¸ÔÇéBÊu‘¾=ª‚:)Ù•ÐyÑyHiÄYª|ÑVužÑÜHtQ´ hg\ÏÒh!AëT-6ÓðëR ÿQiJË{ ¸¡`!ÈØÛ|^!7ŽéäÈw»x`˜èëà9’0c¶ðÔ&Ù­3;Ç#H‚44ƒ4x¯.X‚%(ÙÂ@¶Ù´J¸­O¹3É’LÕ_hÚDý„;5«Íy#„Ÿ_šFù”ˆqÚ>Îé€@À%ÁEy­ÉyRe­Õm¸Uøúxvy4A,ü3©‡ ‹Û΃éÊv2dÿ«(#Ú +&ô•ÊS'Ëw§ .c© õÉ#{Ô7]j\F˨„¼Áþª’õÜ5~FÕ(p3a0cPTÙz]‘Ǧ€Ó’Vž¿gý¢$ ÂV—-0Y¢bYõÖ¯!•@H‡nœ§Å%$™ø–Máj,É0Í8¦zôÕ"[L› 6åJ‡“9ÈÐg<ÝÈ »gŒ] CkÃ$èú ,®»A´}ÈÁÅT‘ˬÄN>puE¢Ê˜´ËZŒƒxAdY«º{gÑìù¥VW°ÄFõi’~¤N™Ô¸žØ>vÿŠm)œ“š¾+Ÿ5QUuH^à”Êl·ñl$àÄà¶¢iêµ&—ìðÀ¯é(M~GND·‡ÁyÆ`Lß6;Ã38C+ìÔhÂЧtV²$ØÖ5kÔ\BÊ1*Ýn'Š„X•iL¥€[žÚ•rHÏ';‚éÐæVÆ8=wíhmdžKEÚõœð4F¡ž_‚¼ÊðoÄŸsîÕm "ØÈl‡Ã¦jkéGç#±öþMwxÙ¦[2>Y¡,IH­IšXYr[’*I²dKÉ’G¾ûÌÞr'ÔÛR‡ÓÖëÑú~è(Oš),Æþƒ ¬§š¢Í–Ü‚¬¤¿®òè6’~C‹#Þ"ü-&LzJ3·Ìêh)Mï«…0Ë(ÃáD‰²ù:Kÿñ¹©¸;Q!Kò©¯¥‚ÛL–€<¡9*©$‰–X¢E’˜‚é·ØFâÑ5êxÓ°(ýü›n#äB+I¤ñP‹ +¡ 2([ª„ñ@»l,)m\l8MŒ+9?jêº)WlŒÉÝZÓ­ÃÍøT+²ì¢Ús¦XâsH–'CSè 7&uC=IÚ0ìÅ.ãÈ’‰È¤îÀC›´ª.± ŠPÅ­$1Q‰„z͹ܶMU& Î%·¬Cn¼ˆ¨¬,Ç8E‹ÃئòÊN­¾I¹Aq›ªÃß@ÔZT‘=/ðúÒÉ5Y ˆqÈ'‚à7DéQCM¡âòó³B§.|S*åæ²ÿ®>þK°%cJºbÍOüÊ{’Eœ1:Ø(¬’´þv«Í$&÷¼h²2W¼·WÕÃÐ&YÎ;©¯=)ºE’I™Fi¦‰dK$y$3µy7¨?Cc0Í›;ºF øàD‰C¡†­î3ü$<´*Þ’Êø_ç€..®úù®é¶šÕP›m–k]™TƹN‚H+».Š%/O‹JkØÔšªÅÑ"úXÏ2ƒîMØÅ¸4;Û).Í¢+ p³‹ü*Ô‘¡Bs´H©>IÏNwr°6„åüà/ùÄPÞ¢¿¶z¤‚#ÄHÑBUµ,ÂÛ#ŠÏ¦Hô™SÁ<7Œ|¦†ß¥Úv®õëÿ3-ù–Žट‹Hú驯Þúë±Ï^ûí¹ïÞûïÁŸûm‘%¯™dÜ!IH¢kÚh£*‹$IÂtŸ(Tðó(={v$ÑOÅ4‹ Irfã”EdA¡D AAN0‚¤ -¸À6Pƒt A ¢ ‚d ?hÂz°DB Yè@ªƒô S Á^°‚0Ô!øÃ>° ûÈPw¾Ó‘•í@$HP[¼oŠ üÚ8´A¿³xª•oéïT *]‰„v;Q±SÿpãáG9ΑŽu´ãñ˜G=î‘}ô£õ&ÍÙ¢9 I·ÿ*Ó¸!¶(d[4qAPàH’è NÆY <Ïqc¦Õ‘Ëý…t I$Òð@î#þ؇?ô!K}äÒ/ÚÀå?lé—\úCÀ ¤_dù{$ÓÌtæ.‹ÉK`2SšÒ´‡D’Ù;kðÒ3ÿðH3õ±Z$!—Û ¤6ôaË_V3›íl¦:‡ùNjsšìT'=ÓyË[òRû¬'0÷¡}ÀeßáH_²—°!+ÑF^èˆ6” *‘dˆ`P·M*œëÍX¸q˜_Íå?tšõ–}¨7k¡Tm¤a$ U#Q”õÿât‘(5@  •¹Iõï?œúÞ»ÚÓ¼J媃¬ÏfÞ2ÂU-¬„-La Ÿw¯Ê,J³R6“œü$ (X OÄ“ç6‚%*ÉbN|&ÓYľhg(ÚÊ  °Ÿ5âp]7ñ´CVd$ý«È6¤¡'›¼. *ëã6|T’ ±Sã—M÷=ªH0jc‰»mî#ŠˆD1É,‰ê:uá$.\õiŽvµ…?l‘Ó‡¦ ¶ÐÇ#)ÜÖé¦VM°†Q3 ˱ndñv“*I}! fݪ^!¬aúS°~­0`9 áòö°è|ÝTìÖ:Dúä(²FOF3ÄN ÿÎ[‰;ÖÎ&÷¢µ†i‹JÉ&€’Ŷ¬d+*ÑcW”ÙÛ°âG#C‘6Rw˜Žp±[·‘S`¾–HXr£HaŒ7— n¦n;™L3_cÂLÝð?Q‰Äï}¦.¼‹)Òï e‡ö¦$Babãjjå. Å Áñb‡""¤FHI¢†@Jãp€ÇpÆh ™g'ŒÅ”ƈ µpFZ±@~’&ñ%(•’(g…)—ò)‰’1,)¶å%Ä#*çƒ)rlò§$$ mÒi¼ÅO(ÂkˆF_N'xÒ1+¥O¤‚3`¤'‘%iî%m>Q"ÿwB$ð±1(ã1ò/ %k.03ij"B¤ä%®†6 Ê@ä&{PF|Š•ØÆ_†EO|Å5„NTc”ˆ4p4ÞÑ9g'.c¦àÑNJi+ª8L`Psyæc*GFä?ör¦@…,Qäêq( hY>ƒ4å"DJ-R#™Ó“‡tDE/w2RBÅFú52!lÓwj“n§Õ6F#n#dR)è…;°#Úz…?G8ÚÓyX…1NsO¶¤-¾$MD1d Fjf'bŠsD¢ãLÓ4Är5qÅ'¥EŒŠ.‹Ùóˆ´†•8¥GZ£E\…LH†jÔhòN„ «p(Ç;ÿ'GTò$?ÃÄxfd(„UlyHTYâDòâ+Ï#èò?¤RiŒãab¤v*£e¢ÅEÇ„8©æ!ÿv^Er&=ijv€†<¢¥Gd¢%:Ì,ŽDQ+ÈBD”õ7ˆ†%1ÆD³5[¡Âyè/eöñ")Òýñ(¢%£­8’+â8Ü12¬U™"Nî$Džä&I < …7xCCÄYçg/2 §`¯ä]±äˆ ÖKî¤Ygc"°f<òF1)#«"o’6F4AÅõM ¶$^¢&¢U!’ó"¸'2¥GeÅ'eµ‡e[öz`6fi¶fm–n6guÖ{îâKé@&hGS6†nd£ñdãwˆ¶h—–h7§i¡6j¥–,§¶j“Öj¡V*ªVk±¶k½ökѧ‘ÀTɈŒüÅ.©)SZµdÑ6.äm›…0i§nÿånñ6mê–nÏ6o¥†o÷6pwp9'e¨s ôDɇkT —RÿB4 ¡hƒÒ)-·r¡2s1õr£:%÷R57t9WtŸ2 ïæo•õbª ç£Y]—W÷r %: F9^×LNr·XxR”ƒ”v7xa÷N¬ô\‰—,ª¤A•x×2^É´J(£—”¸ƒ;„Ww½”y™W}êïDð±3esYö’E…SZÞBòîƒA‹DS´SÍ·GææWÓ×{OmMöCV¯eyÞñp÷ZPÅ1rqë Ñp€Ê€*¸·8ýð¡ôB%:/³ Ê‚sª‚5x%2«}:X½ÿ6„9¸‚áê2jôP4ƒm6^êRM¶Bx ËTMÜv¥·x!”…uxLü2pû“?yT-òÆQVE•EV1‚}Š¢ˆš±`q›XÛLw¥˜£x÷J +ÜtKEEU~òˆ[Ôr 2E ‡}Íx,9—qÕXkÛ˜GEåØMÌhFë†KÇDkxv{WÀ#~LŒ_t‘˜r_í(z†ét¸GmÔ<ðsl$¬÷Yõs*¿³-¢ãcгZýu&Ïô…_ø‡[˜>møqŽ—‡‰# áæ<$AÌø@…ˆëÇ"äç“9åM{׆¥Ç“E®Pö#WYr~•|9ÄFÆ!G~ÿÙó+ ÕˆýÄ}_“rþÇ‹O-~K3TšÙSõ7}T˜cNIj<©àx†A7é”ÔÂmâÇŠxŠ µ6×[Úgs)b‹aB …Y÷s”™x‡s”Jõ¶oÃÙŸÝÖ(ôSÕY3貓!Z”P·,’9<±Y Ë©¦ì’@ ¢H¤›è)CëG!tÊ%Ïèõêˈ :i£¹(ž‘À x ª!\Ça®èW|ö~ÿã+WlܸqõCY”öS·UÙ™#÷Gt—tY'#f G³þS(8rz¼£‰¦ ²€Øã`"š€þÔ7’¨³¤'è"¢}ÿŒ ¶t.æÖ±š}ÙQ˜îaà %9ˆËÔWT§O+ÓnU{]i>YøK’Wsw³uYD+;iøqˆ‰ó*2¢ HåˆÍ¾vŠÇܶ/SkÊ×~ÌIuËÛÒ \Φj"*Ê âg‹7©žg'Bþ«+>’@§ð|Ÿ#›guI~[gn$Dã¸Nߢ$¥ù¹ë7#¢Ù?J“ƨ«›A-ugMU)Š:k%6 ,ÁÉÜ “HÀŠDK’$ü"F®GÀr‘z¦²©~ ªÒ8:èx !£u*,‹?N˜pJv“wÛX—Oõ%n“#9´5MÙ #:† ð±ÕyLp²ÿ-› 9¯W·*¼ƒ‹¬¡‘¼#!"ᥦºèÄ?õQ³ƒ}B" šuq ‹¶Â#G>’/baŠ`í>üõºÄpõBCô·™‡Ö˜±rIeÀYç¨ Yª™Ü˜er+wª«<˜w²…Sè ”tÄùY×4¥9/±ü²è­–Ãôq _1‚»ïy~d¡¦f^úÙ…›FOTç:n€XuS§>‘Pu5|3µÆ][sW°;Üxq8—I9^£“phŠäðÒCÛ¦#b!æÜ5CÅ(^ä›±’ÆZ­|â#šU¨Ùž7Õy.ºW»»~Q4ʳûW…û›‘»×­å}¯›) U.6Õºÿ…[¨w µ"µAÌŠ¶"A¤Ýšý¶$!¬‘œ}ÚÍ*²}Û#AÜ¡m¥žÝ¬ž="ÁÌ =Î]¤¬Úõ‹ÀÝÌÉ´]ÛÇ}ßÍŠç (cõyFÇÖ_n¼d&»LκOŸÄWhuÓ&XÏtÁ‹W”á–]}ÃÑTN(uN(0~ëã¿ ¹B~ÉšäAÞã¿­äQÞä§Ìã_\ä‘Ë}Ræ¿Mæa^å¿ÞD¾æ[Þ}h^aXN‘Gɱ\r¸™Ö­{ŒY…¸ç84ñC©Ý„Hù7í¹©+wâ¿ôs0K¸¾ ·ÞÑ òSÙ 3²l»NŒ¥*ay­&M´WÂÿ]ý'TM+ÙO9…; Óq†·LA“ç Ù†çÂ'ý±‘x€„²>F–Cýc'‰X-UÃ7¶|W t'ìñt‚Qðrª™Ä€Îæ1”e3'›a=ª›[×5,È7õ•9É«ùmb?TŽqãDpúÕW&i &NBåwã%l´SMx†syyV¢¥<%rW³”©‚áéSÑ©CK4‡Åq¨µdCY¡Wâ¾±é3ð'ZÒ9eeòýD†í(dî››¨‡½/û¥NdD5¾ÒB´Ö:l à"’$I$ ,xÐ Aƒ‘ \˜0RCRth#ÅŒ;DXqbDˆ’ÿ4šTØÈcHŒ$OŽDHf#9U:B‰s¤Ãˆ!-úTù3(ÐD…Ò,zQ¡R˜H9 jPNNI²öiÛ¶íjV¬’þmŪì×°ZÉbýŠÖ¬Ø±gî=›¶íÛµeéÊ­‹÷m]¶[÷ñݺ7®^¸W–;8±[µ|õ!V›W0_Æacau×–­Z¶dqÖ\K’5К7›.ý™ógÒ©5Ç:½ú³gÒ°kÇ6ÝšöíܼQ—>M[wíá¹}߯-¼÷jÛ®››~½YVtγm½V®»:tÞÒUÓ†¼5wÓ³¡¿¶4:ºpéÒ;»´íµtùî=³¯ß¹Öýýšù³§ŽŸøÑçŸ~,ˆ €Z—`ƒÞ·àƒ"!~¿Ýç^†íµ7!ö‡à„†Èa‰ ~¸_@;fox-1.6.49/doc/screenshots/xtc.gif0000664000175000017500000004216712130340076013732 00000000000000GIF89aj?÷ û3®sY)ÿð\=.Éìú°Y¤^‹žãã%Y„ùøôõøøþþþÕ±¡ÿÜÙÏe¦¾ç™v2z´][ZþáÓþ¾¡½¼´ÙÜs‡èàÎd—ÄÊccÿ|ys /Ø`•éxÕ«ð¯ñîä.>>ª½Ë‹\G›’V©ªqµâ­“…¯¯ÿFd€yÍþ̶íêÞŠÒÎÄÀ{´·È×lki¡¡]×ÝÚ**ÿÿïÛ­°\µ°8ˆ8Ae~hz££šö£~LJGÖâé×ÔÊ(?Ä‚dfôrõùƒÿïç«ßô…‡Fƒƒ{õôñ–’‹ÊÊö´«ÃÆhvN<"d( Æ lšnÃÁ¹îź/šÎI/tæ™rààfÈÈûü×[²²<¸šfNJ¿Ÿ¶ÊÔÑø££ÿÔl‘‘ÿ'%$òðçœqfŒ‰‚#b‹n‘VX-ìÍÚêåØ>^A¯°°ºª†"šž¦øöñ¢lStrl¢ê ‡öôòëÝÍ´ÄÄÃÅËËæÜÊÈÆÁÀ¾¶"i“ÃÓßÝÚú SFÿWƒƒƒ˜®±/.-èÜÌlÔÔ|{{~òòå«ÓíÜÛ'©“ÍÐmÝÀ¨þ©‚”bKž–’¬ ˈj+£+q”ÞÒ¹Žþþu—²gH5ÎÓÎÊÈÀ¿¸£££ËËËèããÕÒá¡©¢8QàÒ»“‹„º´Ÿ«Á ¸»a»»»ÙÖÑ– uu>¹¶°³³³”””½ž®‚VB’ŽˆyyÿBCB(JUC~‚æéz†êêa¤Ñ@všÊƻےq±®©}ÈçRUQN·^àÝÚ‹‹‹6e‹*'aÛÛÛ‘Ìö;rtsss²¦”ææýˆŽ–,j?ÿq$àDˆ—‚*\Ȱ¡Ã‡#J,(!…¾‹ú(€£Ç CŠI²¤É“(Sª\ɲ¥Ë”)Ú‰l'/¤<™ ÛqÚ…C`‚Ÿ Ö ãAt П÷ÂÊ£M›¿ 3î%fàŒDQµ%JÄtY<œf$X¶uYRwËüüLt/ìQN~8…YF(Ì£ îÉÂ;U*ߟ¼¼Q0ƒ+^̸±ãÇ#KžL¹²å˘3S–丠A æÌX¡žxyU̓ïŒËÂh[6•`DjòD¥¤à²Ù/dq’u/‘;w%îÍ äGÛÏ V9•˜ÑÔßmPíúy L˜D?½WÿMTWŸ0bJX¿^Ra0òØËŸO¿¾ýûøóëßÏ¿¿ÿÿ(`’ÜWà(C$8JË‚ŒÂ{¨u$¬±†_G©á¡yÔ%‰6aÈBHRXq²Œ,\Í„l²¸#‹i©qχϩ!£;½q€‰3̆/„Ä23ä]\Í•ˆ,yb¢?G­Çí| ‹>)ð!Ï•`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ©¦$e6È `Æ¢tò‚xò±^…r¢Ú<+ßëïÿÿã{‡œŽò}â|tx€@:ðŒ 'Ø>þá|â£DÒ@ ó1! ïx%¨ÐÁñu%<_ É·Âð9á.ŒA ÔG‰OÔP„æ3 v¢C Bhàøÿ”‰` '  —ÈÄ&:ñ|Ä`ø6¸A&$q|§à`hÀ„y<`|oˆ°¡¼áWß9¨J(A opà Çg+2á'øàÁÆŠïƒóxƒÒE!ŒP‡:!¾˜‘ˆ2‚ÐÃð)òÒøÄNzò“ „_Ç—†lÐL _)@…l|1Ècñ&t …ôvq %ì”äƒÅ)h° !œÀxD-Ð!† t°å.ÒÐXXà‰TGÄ× #“òÐD ħ„!¤#Càd(×ÉÎv>q”!%(áò `‚(qÿ‚/šðülÔ)OXÀâï8AÃh ”°Àœ²RNøÄE)ÑhbS‘Û _æNyÜ™JØnႺó¥0)þà¾{ÖÓ€¹DŸÓCò”}MÃÙwÏ4P!|G%&ò@”¾à~€€TãàLÒ€ü Á5eÊÕ®zµ‚ýûªþ„‡²ú`|° ü)Ö¶ºõ­ã³ \A׺Úõ®xÍ«^÷Ê×¾úõ¯€ ¬`KØÂö°ˆM¬bËØ¼R¡'°X…d'KÙÊZö²˜Í¬f7ËÙÎzö³  ­hGKÚÒšö´¨M­j/ È®Â#ˆ­lgKÛÚÿÚÖ¶uX­nG›Ûúö·ÀÍ€5vKÜâ÷¸ÈmkqY?>P…t§KÝêV7Éí-Ýîz÷»àU®kë@:dc~ý/g·«Þöº÷½Æ]nsE8yŒ0t Âz>\< ‡èƒ˜CFh>ACš÷˜¦s;Є­š/½ðµlø(7°R Â#h€ð! @ñ#ÌâG¼#-±€ÈÝ ÛøÆ8Þ¬|WáÇ4˜ã48 h°Å„Ï §pÄ!~xŠCÌc4”Ý„¸A /xð,€̃NŇ|GЀ§02†s,¾]ÈòÿŽ8ø>lpqØpœ„aNfFÇ<ÐxˆŽ¾ Æ9N´¢m¼ã›# _Ž#1ÈââMÆ%&pˆS@ø3 Z „,Ÿ1ðÁŸOá\¨ºÏ8:N0è¬Çm>•i7¤™ ¡ªœ\c@p„¨i‰ tAf¸å¡Míj‡·Ñá{%š@ƒ[vô€¡#¨ð"wÀ `u’Óàƒ4[€¿>A’ß`†yXÐ|öuf-k[+Z|'`e/}д²ƒT‚®O „!§»ÝÀ†ZÚ(áGE´µ7ÎñÝb{§7ÕŸyé@ÈìÛÿxÀŠñ»âOĆ·¾qûb@Å&ˆï FnŸÆ;ÎóžÛ|°øèrõÅÜÆìõ¹Ò—ÞY ?7©ñ{Ä'¦Nõª[ýêXϺ֭Ž]+Ñ[»ØÇNö²›ýìhO»Ú׎vW¬bÇ®€«‡»Š Èýîxw¢Ûážw%ÒÝî}¼àÿ·wׯ}ðü;âÏøøž¹¯=ßO?ÅSþò˜'ßã#{øñ@  —FøªZ>Òÿ—ôß'‚H¾²Átx,Ƨ@ò¸|B ¯û,>Ý‹/å웺êèûñl ŸIï>:8“¼Ÿp~æó¾ùÈ¿  ¯BlgÁFˆÞ”NxÇÿ‹¯é—›|#Þ.zá‹?*´ °ˆ,Fœ!ˆßÅ0jø„€Õõ·?|$ö[ÅOL𔀶 C1ð`aèÃ{QåÓQoàbï`HãóÎBãcMúb8t4Pàp€÷4§k@n/¦ ôŸ uâó  bN@·¬ rˇ_É7}\U}‡‡Ž`4@Üç}SÔƒt Np ”€ Ž 9wƒnÀ~j4ELf¶”ØÀ[6>@@>¾à0`€oähl/Àå6H·¤U—¨ä’µ‚Y&k‡ÀIYÔÈtæÿKâ7ˆ"Õ`Fâð¯0>>0 …° Ì ~”V/`°Pe’(~ öbBô M `fx€GÝ N M„NГg„]…„á€-0 Oø}TDHåØPJ[Ø{äÐ ÎÅ@Q]fJdæpg`-dC Ö¨FTpf†¤Kµôn°AïÆQo„ U„å#tðHQp¤$4p@s(~äÓ e· ムà à¢x ÅQLPKJtà #  BPªp½GnâP‰ÏF#Mð¬Ðù%âÀ|ÀøRÂøâÐ-ÿÓ ³ —@ƒB`T/0‚EY>ž`!à C§”¦ŠõlÂDñ÷ ;ˆ”JÉ”âD!&> ]Î'Ø@ #v2dH’x>H ó@E€ CçJ'P•%>p—ð‹OåÀ•ùEzùÖÀ„4À …°‚ï@|‰_"H>z˜¸Ø A˜eO5z }Yf3 S5Y30õð ²uƒ¤¹>ŸÐ sØ{Âg>ÅG>§™šî#|­™>ø" ´šï[ª>Ÿ° 5 ¨{º¹›¹™ˆW“48›ñSœùãœT›Oô P̉œØ©yogxÙ?ÒÙà)SÊÿžëóäyžë$Œ¬°žìÙžîùžðŸò9ŸôYŸöiŸ†ôwŸpŸüÙŸþùŸ : Z  Ÿ/0žè©–…¸ ÊNHØ‘Ö5¡Z¡z¡š¡ª¡‚Yˆº¡ ¢":¢$Z¢&z¢(š¢˜4ˆ„ªÀ0£  0ð q £8š£:º£<Ú£>ú£@Ê£Zw/š£Ý0S¤Jº¤LÚ¤Nú¤P¥R:¥KºÔEÉà¢Ñ°¥£¿0¼8š ãcÊ ;*x £Ñ0kJ¥pª£Cšªp ³ø¦ `ÛÐi £K x £º:º—`¦9 h £Ýÿ ‹§©’:©”Š£¥0y Yºç ª —p zZÀöà§ÐÀx0Ð@ö »0öà™ ¶Ð ¶ 0€ «¶1ú©Z©T:§ªÐK°‹Ú R0;‹£™ðÑ€™ jJЀ ùÐ €®â0àÊ J¨  ™€®ö°ªâ [ªÄ:¯ôZ¯ôz©É ® ©ZÊ âÐ 0ú ’ ¤£ÊÛZ«Ý €`€° µº®ã0{ Žp ™£xèj¯Nj¬Ñ äÊK° s°¿€È ­0š «®™¶p ü«™ÿ „ÑÐ üÐ ™° x°ª:¬ ° ¬P«Ð ³Ðð»´LÛ´Kz©uůœÊyªÀ [ ¬ ` ÅR,ÿ £â0­Ð°¥ù`§¬ >;ÑÀá®Ö Kà¶6‰¶N»¤ÆŠ¬Ê £J°ôà ·´ Ð ¬Ú«ö€±™ "k ö° ÝÐ +«öP«ù°¨Ž0,› ö`KP«s»¹œ;·ª}Îg› wE*£¯ ¨¶Ajµ@ €Ú¹Aj¬v:‹1Š :Ð Jºnú£ù0±0Ê ¬ »Â;¼Kk^Ùp¼Ù0º†WºÄK¼Æº£ˆÚ¼Ò;½ÔÛ£ÕÕÊÛ©ÌË£»ðdJ[½“ÿú¼@šÑ½à{¾èË´—*>RKº9z T ¨fÚ Q ôàß«¶ëj°~›¾@*¾?:@ië¿|À’º¾áÓ¾Ëû¾ù0¸i P /Pj1Šºäú°â` ¶ ®J¹œ£ìµ[ ´—p sP ‘€§"»¦†º˜û?™¿!\Ã5¬À/ÀÀÚû¾Ñ@x¶™S è¿ÿš¸ùp³€À€±6,£#£¬Ð­iû{ (‹â Åd*K ü` 4€¸ãбO|Æè‹Ã:Lµï»¸¬°¦/`Wu 2:Å—´ o¼¥|ÆQ £ z i› ·Îp[ £€ÿ:Žð­À;_³4ŒÆ”<½jœ½l¥æ[É8úÇ»¥‹*;à a€£— /¬Û všcËɰ,½—ì¢@š³Ë>êÉ:J;jƸü˲¬—küZÛ £¡z „š   «´“ŒËº ÌԌƳ<µÄü¾?K@Œ E£@À@ È’)™ûV‹Ì~üwż¤þ0Õ<ÏÃ{ÍîkÊÝ0 Ëâ°¸Ù†1jü° »@ «KÀÁ™àÌí\ˆïü£ŒÐeࣗðKüðK0¶K > ÇŽÊфڦKÇ(½¥J‹Ê¶0áóÑ’‰Ìcû¶}ÿLÏOlÏ lÊ/°iÛ  0Ž` ù±ÐÐÄ™¸M x° h<Í=êàˆÐ=¶êm»ÄFM²1[¸ã°« £¹:«ö€º»@Ç  «Ýº«ü𸠱6}Æ8½Ã8ª¬ñ Èÿš×ÉJ²Ò€¨5ìÔ<êàTmÑãj¹E±=œ¹û­ëÒö€¦€ ª”K®Û¨×:×s ÉöЦëiž±t]×6|×™¬ÚMjØ;Ê+°‹-¨/àÊxpÛ®| ¬Œ°èÊ ® ¯¹ £ðj¦ßú·ác¦Î\Âùð¹ýÃ2ìÊÇíÚ7,̘œÍ?š MÝ0 ÛÿêËNÚ±àí§Ü]Ýì{Ýž*ÂVÛtL¿ÛP ø£€½o+Íî\Þø]½¬Ý2ú“ÀÚÓ,ñݲ p ã¼â@«<ËÉÞÛç€^›ªGûÂtœÄtœ£oZ´2Œ£xšÛ©­±9ºÉùÆÖMËø¬Ï¼MÎ~ ¶° €À­={ª•Üà8ê€RÍØ2ÜÁ9{Ü‹^lµ†›@à ëž™€¦o ¨âÀÛ€:B®;¨#nÀûÞ¦l®[ªªQ6¬Ð±ãŠE¶9˰ ~ßMŠØ ÏŒ £>û­@Þ²ÐpÖB­¹ ½±Ú}Ò4€¦›³»` I\´/^«oüÆWÿî¿YþÎÉ*ÞMÝ6.£PÝeà§{Ç!=±fÚ«€ûª4°ÖLÍ ![æ®›ªO¸=üh» _‹ºÕ Ñœè–\âØ¬å>š´Ëݑ޹êÜÝ5m¤´ž¾‹^¨½Ž@èì³ž× M¤ÃíM[ì[¾°ÝüÍ,.êŽæx€±ÍÐp Û Ííía.ÇzÛÓ*½ ~SpÒïPJíýÏûœ P/ít}¹GÍã` àÅÐ` ŽÀÖã° íÊ«g=-Ñì®æ8ÊÇ£J0ï1º¦-ï¿£ônÑ©œ® q€Uù름~ÔF °… K¦ ÿOæfkàÀ ñÍëÉ\À> P 0È å@À°±!ûä„ýñùòݽÞtÀ¨ ½åíÊý“(ÝÑ~¨w»áX/â°ëÉÀûÙ¬àó Î ô¶º aì°0ÿ¶Ú«ÍÎôÔíôò.ö᳨§pöVÀÑ‹ºÝÐØjÚÅ©JtOëv¯£½úáªíÉÒ}á p¿0÷Ð ö‡_÷¶~Ï~jµ ú·Q€;@ù ¼ù»³‚jùçÛà~ù®£vÿ“<ý·>àyÊÄSüävzà5믎¶ì¯‹ñýúÈߤ±oï=íÏ/Ю»0žÄ3þä m l­ðöŸÿÎÖÓŠçÎ+ñMÊn°fºôŠ_­kºëP¼»;¨oê»>J»=ÿÉϤ±ÿ³‚ü·†™àÁ@ ´q¬Æe×­ nÐ.+˜p¡8h€–ŒÇ E@¬~RäH’%K¾°¶jUU&Kúã€È¢—æEs$.š=†¬2uËè14Ÿ mù„‡!ƒLL9„º„A·ŸIñ¸šRñˆûÊ _7{Ðìe":ÚPq£±b…Çå\ºuíÞÅ›×d©/üÂJæj,8`­rÕRä%ÆR\ÊwI¯]“-ÏE©’¥^¬yÉÖYGÐ2ΔÏQ¾Ó ^t;Hƒ•ÿ­L¶¾Ç”©-œövJæwmâD~azo{ºÑBs´< [€2Ù»ÄOnÓËݽ’¯ß€6ŒX±KòáÝ¿™yåú»þnÜ(š4Ó ù‚H+pã¢]þƒ-7ØøÃƒ Ø^À#š%æa€ ¢á'´€H ˆ&¢ð€h+ª‚†]–À£2ø^„ñÅñþ l°ÂKŒ.ÐB²œL¾Í€©ÌÆñ1F#]ZÂ#V#2J)éš±¼ÑÑ>.醊¸ƒŠ˜ç¢ið[–03¹–€S 6+ÂÈL©2ió{4O×à”ŠÍ?¡|QH-ÿ§D4QEý®JólL/Ç.‰††™Â ˆÐ1S qì9‹w• Aë,OAíÆ‘ƒÁÃÈý #mV\u¤,‚¸ƒÑÐËüiƒQa‡%ö=G¯¼Q½Å°…Ò £˜Â :åp¸ŸvÉgñ80qìÉç,?L¨KÜ.9 ÝÜl¡Š ¥lùÑ×¼™e…F©iœ%èeJBÅ:б@Süȱ]”*EÇ ™î¡¬ Íb/ÆøØó’•44*ÞÊG @ö )ä|N¾äµ±¢aK–èæÈz‹ÈR6r¡ !ËçVBކgŸ¿ŒÑ^¼üiÄƨihvÕ[ÿ§Û¦ðàG­]²>m4[¾'ä¦29Б[Oî¦RêP•¡ªÅ9H7ŒçVcH³¤/j{Mi>Î<#´]wñ5Õ–@¨eŸjËGD;í ™za䳞 1Ä 7í4V.,Kî¼G—Òn,•«!@H¯·ï!ñb¤Œ2@Køad=%ùs$˃â?•‰ÏŰdS‰‚èÂ(“Å ‰¢AP‘T J-':R’2SVâŸC.gAµxÁ´>Ҕʅ3„pƒÆ0Ó‚‡  “6<áIõlÓÇaL¤ta„?JºTÖ1tR•ºT& E NÍDÒbkªs롘 FCªÇ°&“XG-IRÛp~ÉÉ"Ž,‰h@ŠÑŽrH.!±^á*›ýÒ$¶cêõœ…|IO4àú R½…ä1‚ÿùÀ$n*—³XUöc©,ôŒPΰÕçhš8øÁ“až "ÏiYÖ´0¸M T{’LN€P…ô1œÎÙS7*È” yS-£õâuøSÏÀÒm°ÅÝ$góâÉÀÕ!„çi—¸†C!1%Dz뜥!gYQsÆVÅqtD+KU&`iÊ%7fEîÅŽ[’htÃEñýZIÂp€vrj+À‡fâIqM> AŠ(±YÈ ÛAÅH¸ùTú´„š¥ÀæŠÆk¸‹_ãžôQ§s&_&–yˆ¯wY1X`õ랻¨Æ[2hFCF+j¾i†"¹KÀªNmÿÜ’H:ã7Y¾&FÖ'Š£„/è§@r{`‹Çd2IÚP͉}Y =‰ °@]ö1’AsÀòѾ8ŒINfÔ ,à>û Ê*­Ék@4PÌCjR$B²öâ%+÷hc8‡Úú\V/ÐId w²áaO?ËT꘹%.—•›¥8„µ#Wˆ* þÉ \V.h æ4dï‹g)à¿vJ'™_‡¯âPrÂâ”ãg†$žä€R·4ÌqôtO’£U®–µn –Ú‘anGlJv \¿ ´¸ ŸÅŠ•öèésË«ÐÁ—×@R€*ô­ï;Å÷>‰£ÿëã™ÿ>¦p1åU´²ºêv—[âÍžF­"„¨)©5YyG• yÈvÄQnáyzÙÃ#ö8Œò½oUôûnÃ.‰zÖdgƒd³¶²Ù(8͹BƒÓñ–ð2¿ðüÍlö]Èç%Ì9Gä- ^¨ßÝ D7NùV¾o—£øP>‹F$Ó(l£m™,)²FG3ëoÖÖùíoÿUnÐÝx©Ю[ŠÐ@zj»ßà>øDɽåt¡YÜ¡ ENô¹øaõ‘Öü#øBĤ}6Ì„ì#< Öôw€Š$-¢d}AÄììšðï1|×·×д± 4Â<ž$ÿ—¥ ½K¶=-Ï âØá–t/Æn°’!Ïi ˜Ô§÷ç+òÉÉcõËí"^6°Ñb=ãd{…;M*ɲûðõÞ‰=âÓ\g¤ãyøž VMÒ[SªÆ—¹©®Ë„%ŽïÓ X3Ý‘qˆ~ ‹Ø„è2:b ˆ&xÁ ÖHˆ]p z?Øc¹Ã{¹ ÈÂ:üº?D@2sÒ"k ªx+¹¸þàVò¥P£ nB± Öð@Ù(Ö¸ ãh‹ú:—h° Ÿ°ž"t¿´Œø+AJG t¸(’03%>ËèBDa‘¹X³1¤Âï°Bÿ¯£½ÉÉ"C4„Z‹†¹Z¦0LÃ<$‰5œ½)S”²ÐÈ£»…8ØDã@Bd°)\"3*¶‹š‚9èS€êB×sD€ƒD@“‡j:(Ž É¯¡ƒ "Ïû'3ʤLš)(†jÐŽj viˆn¿T̺U„¹÷óDÉù_,gF«º,¯åøBdd*e4AÂ3# xÀ†h„µã«‚x ¢Š½ÒÆ&ãF,|;32:@AÈÆvL¹wÔC<ÄG*ÔÇ<äÇ~|¿LÃ0ļIs§R$_ú É 0ˆ<3ÅzŒÿ¸1 #‘ûrH½ H*\ÁãK>ƒ‘ˆø”büžÆÑ–p¢°‡í`ŠëÊ>2ˆÀ ÅÙˆ£ÀˆØˆôaרÃÈŸ8¯ŽÄ‹ ÁûóŒüÛë™ÇÁRJ‘S¯ìÊ6Ï9¹ ¬ [ÀzY@jTòÊÉ‚0— ¡ŠvºˆëÂn-LãD£ ¤dFD¬‹âC¦I˜Ó0ë˜éˆŠT¿sI2²ðب¯´˜Y¬€'±à d[( #1 þ9¢d4¹¤ º|½€ ¡ ‰¤$ÓôÌGAÙ‹D´ËÔÔFÐôÆ×´ 1pAº¸Ç/»G؄ټÿû3I˯³¸–IŠ¡kµZd — ÏC•|lñ< I9c¹€IÞT¹Õ”¿‚¤M—ð$D`Êêq €žÈ„  ³{(%Ñ"ˆÑÈ Ýè²§‰ _:“y¨Cx±…ó3OîìMï¼Â} O“À?ÁI%@*Bè œ>·¯bxa0᪢ýLŠïJˆ¦P7—±C…?eC€LP“hƒ6h®x ¡”B3u™—q™ a )•—Ñ EêžÈxŒ3Qd9Ödźt»G2³Ý<ÒÏDÑ>Ï&RGôM¸ÃC˜ ‰Š‚+Ÿ‰»Ó’H9¬‘‹ÿŠÓ5½Ò*œÒÖLÊ% ˜8¾.5¸&I Ô˜ŽLâÊ«Vj@E˜ÑZþ˜sA6Ó€“ñ™µ0‹­#4lÓºÈÒx”Ó‘ð¤‚3Ï|°¨dÒHŸå Àð»¯éÊ®ˆ]€¢ °¸ë`7Þ‘ÑND/=É âšTJ}Ó% ÍK ûÀJ‚ˆ9ˆ%°#Yoɶpz‹„pV¶3sÖÜH K¤a…ˆ¸!ˆŸ ¾\•Ò$ýN×´ReêV‘Ø=o½‹JÍ:ÑD×mÜÕeìÕq].¦lבR×”>F}™´‹›@1;Kt²“ƒá9ÇÀ ~¸¨ƒ™ µ°³‡y† ˜ÿ“ u©×=|×nüM_ ¤Q½$ÉKÈëP Q© ‡\á…©šÑˆyP¯ç ¥ÇL7Œà‡Ë²/íD•XâҘċ‰{8¥t€58_„Õ€Pxù9 L•Û[œÖàƒxŽòjt“ŠP0Y}õº„æ`\Z¡½·|•zMŸ±ŠN³±Pœ¸è™â Ýá½Û±[Ÿi7×hœò ìÉtÑΘ X ËŒ…ÇuåØëñ'ÖË/ ZÃEPyu\U„\•\»Ð!ˆL¶øÉ#ƒÂEÐ ¿0…“k5±°‘™éùˆÏýÜz%[^»¿2‰¨‰#k­ÐZEªÿÅ™'%,/‰¾Ò“Á:ú‰´Y˜ú ا;Eº°§€"… µÐ ±õÖØµ¿ÄýO%krN}ˆTB• ù­1 ‘ZêcŠ®ÉœÞȘ¬£¿Š† Hf‰V°»±­Ü*¼£¡&ÐŒè²Oñ¥YÄÁ"µX-b’Å @ ±ùZìH¿‚¹@@è)²øž9ê  <™“Ô\Å^'cWº™« ¼Ø¦9í\w×µÜÿu ˜ˆá¥rá3#ÄE%Å7 A \4Èà!/dÜ~‘&1O„“Ê )˜ƒjðaL $ëJAB6Ö¨ˆŽ@ÔÔhßCEÿ'Ž(VÁ×4ˆ:+Þ€_paVÊ@Ø¥páë:VAÔàÚP4–5Ž/3j‚3 Hˆc¸…#¸y Iæ‹—© Þ›å§9cB.ÐNQÿ}0 Ï[uиe 2däb²¡kåzåâ:áYÞ Z–1¾<Úm]±8Ó€ñ!AнyÝS6™×ˆvÛš¨ØÎ$‰Õ½/\ºI6en]lvÇþW¶ 8‡ÚýˆD ã¸ð–Æ)ãT:9I qÈw&¨0[iˆäXçßs“ãT z pÑ[ r(È£Iܦç$9è¡hœY‚†äH·¨0ÿ‡F=Êe*íæRþfj %9ÑVêc2¥Ñú‰¬¬Ú¸V²XÔ`%\¢À›^Šë`™pò>ÃQ›fÑ:Š*RBÉpœf©"¨±³è2Çœ°º®pºÙùÍGnŽÓËí$I»Í§Ó­L†ˆ¤H¬N>Š ¹"V¿úL¯ë@ã½-ƒ—©AL­°4ÖP¯¸ÉO²`‘¸èÎ PÙ(_’.ˆˆ¸?V ÖÚß{Óe¦ºeF) QáîÐß§®h8eRoÆeäÁz°ƒpjÊÎ!£­lìù±xåì¹P+¶úò³¯šaéLŸÅ>í¸®õ ˆð<šÌ°Ñ$Ɉÿ‡ø¨’pgÔÔC¾X…`H†³èÍÆè»<¾F 3 :¨Q úŒ®Oñd¹ª≛dO·Ü“‘É,âkç@ˆlÃ%Ä©Þ;ìXâª[Y˜‘qAGõroëmD¾ø„U@)&åÃÅTÀ¡$“Ãcmk¤E§nQŸ¦—³pkÚ #´È@%Vª”sŽø5—ÞÁðô!%sa ²jçÎPU{:ˆ7oñ@”«o(ÓìÉNn¤:‡s(¸ÕB4‹ÔÀ4s(w.ɱh étB‚:ezÚ‡" Æ ”Á1±ç­H ¸`'4’é¨qcí*Ô3 àr?ó·Á0ó1'óÿ27ó3Gó4/s!s5wó7‡ó8W… 9/s!x;×ó=çs>ÿ;t@ÿa«W0ôCGôDWôEgôFwôG‡ôH—tCW‰UÈìIÇôL×ôMçôN÷ôOõP÷ô:x¹J7õSGõTWõUgõVwõW‡õX—õY§õZ·õ[Çõ\×õ]çõU?^ö`öa'öb7öcGöd?õ_·†fwög‡öh—öive·ökÇöl×ömöÓù„÷p÷q'÷r7÷p;È…ug÷vw÷w‡÷xw…dàöz·÷{Ç÷l÷vòà÷~÷÷x§„€'ø‚ÿ÷È÷„Wø…gxZßwÿ* Jx‡~ð 'xO°ƒxJøŽù€§‚`hø’7ù“Oø}‚Sè€HJpyX˜€—~3 '8'H!ð4ø&8Gxùw „Ðùðløxƒy   ƒ_‹úøJ ƒˆú­ÿ„­×ú¨ïz`y”'û²7ûcß÷HsHƒS0ƒè&P&ð 3 78\Hƒ 8%8 H'83&@\PG8„4°xSð&p pGÀ P¿8%HƒC° @G8t %@‡ `Ü;\À–?±?ûØ—ýÙwødùxµgûÿS8JHÌï€xÄï|\xƒ8túÖïÂ7|\ðã?„w|È?Ñ À†Sx¿8JÀÏ\8]8„ ð~&¨þò?…MA‡O€}Ú‡ÿø—ÿ—»}* ‚Oxy—¿ÿÐúݧ„'i¼Áö‚‰:i(19ÎBšGo˜¼xAéÓ‹…”hÐHsj! :/¥¡¡ä Ýœ²Ä‡G€P<áè•`«vòìéó'РB‡-jô(Ò¤J—2mêô)ÔU°pà€µ cŬZ³> ä•’È­Zßtð!Ö"Ö³g}¤IVmVïpêŒj÷.Þ¼z÷òíujÕ«pÿ†{±0bµ*RY•ì1äÈ’'S®lù2æÌš7sîìù3èТGÞ ØjÚĪÏÎ]íú5ìØ²gÓ®mû6îܸ]I¥jÕUìÔº‡ŸNü8òäÊ—3‡Íûô*à¬Ô~j¢ö™ªÁt„4‡=½;øðâÇ“/üÜwôß›8±àäÁ‹ê׳ÃÝ^¾ð÷ûú÷óïû|`Ò½@‡CäÀ)ñY×?–Xb‹YØÅG 6æ`s!wömÕ 1€`œVM4D˜ ”@h ¡‚Vùù÷"Œ1òàoê½ðˆ„ȳ ¾àÄòÈ“Gz3 .¸€Î(» ÈÝ€t|"¥½ÈàËVSjyÿ%ñ¼•Rb„L_V4e˜/¨ØÀb¹(#œqÊyéM‡#.òУ|N¤ÓN;„™Ý‘ä‹&8áÄÝ»â‰+¾8ã;þ8ä‘K>9å•[~9æ™k¾9ç{þùæ/Œ0úÀÝ -ê©«¾:ë­»þ:ì±Ë>;íµÛ~;î¹ë¾;ï½û¾»*¤ÐÏ §ÿ~<òÉ+¿<óÍ;ÿ<ô©gÇ4ñÆG=öÙk¿=÷Ýç®Ê'ÁóIõ½ø‚÷é«¿>ûí»ÿ:ø_—ÿpïÛ?þùëûvBøÿFñÌW£ý°€<`úbð޾c¤ú(Á R°‚ßS1ø@ôÔü C(Â’°„&ÌRŠ?€Ç0ô)Œ“¶ÓM<¨hÍcf³åða)Œ&3Œí4˜ÑN4V±h)3Lrêó )Íf6€Qfü V\euúGA’ô¡„ÂRZfôá˜ú$fÿS¡ÚƇ²µ­n}+\ÑNîp€*˜&=‡‰Wk:óŽÒ4.ãD˜róŒÂàæ½xO\’‘£dpWÈ` Åz±? "àa‚Xa,¦1‹ùØr €žQýÁ0Ýb>3Œƒ¼â5k {æ²£P¬+]úÎAâÒ]Dlb\ƒ+Üá7’sÍa]+Z 0·¹Î}.t£+ÝéR·ºÌÍ‚s±ÑëN·Øàn°¡î’·¼æ=/zÓ«Þõ²·½î…n%8‰ÜÓ€°+P·„h0àK° €,àëI4¹õc@&ø‘ V¬ ᲃÅa‹L@# žð Û¢d ΄-ÿˆn@ƒÄݘ0+Æqâø¾âèJL\¾1Ž'X`ãeb¬ =.Á ûXÃ΄=^PáþÚ#€P1?`߃Ž(14l!a왈Æ8øQå|9]G>r¬æ5ëoÇ=p7ćndb ¬P—8^‰8‹CÂ4¶ò±ª G G&hph³¬P0˜Y q4º÷=´8.‘ /¿ÀÆlþ4¨Óçf¶Îj­ãoì^Ì:T‡ºÕ®Îߨ9ÁWÓºÖ¶†V¬yxë]óšÍ¹`¯ƒ-lÿº¢Ã>6² Xì'»ÙÎnß²gýìiS;{Ñ®6¶³í¼ÿkk»ÛÞî·¿-îqÏîÚ\ºÓ­îu³»Ýî~7¼ã-ïyÓ»Þö¾7¾ó­ï}ó»ßþþ÷½¹ _ž®pàžŒ$<áO`8ÂN #$ÁF År‡ ¬´ÈA¸ÑñoÜâ5ˆ80<®ñX¼å.oy ^.s˜ÃÀxùÁgn„Ü\æÀp¸Æ's—Ó"á/§Ez®ó¥3½éN:Ô£.õ©S½êV¿úË®Á‚?9øyÂÁñp8ì/zÌn„\ÀOÈA×YNvnxé=‡ÈiÑõ'ì‡- ArZ0# I 9$Àø$@Âðßp†7ÿ>€C˜Qó{¼I0x<Þò Ýïi/:8‰Ÿa†O½å1Ÿ„'`½ö¶¿=îs¯ûÝ»\ë%u º~š'î57þÙ߉›sãÜà†Å‡Ÿñè×|úFÀ;0˜ñöësŸû©G88RŽô¢_‡ƒâ}²ë½æ'~úÉnxâaõ~FÖQsÉÓBñÃ_‡à±ÞÛUŸÆ¡Ûñ& . >ïú<-è߃R 0߯åôÑžä­ƒÆþq0¬ƒŒ`¶œÂ­ÆÝÜÏõí=A ¬ƒ8À0 _\€Âåfíi BÞð ‚ÿÃä!7pàð•à¬CÆ\ J¡rí¥ ß Ò ä½ 6 †¡ŽáÔ=àép¦¡®!¶¡¾!¶á¤á ˆCÆá;4ÁrˆC ì! ¢ "!¢!""&¢"¢¾ú@C4ØüW†Q¢%ö× ü—£Q"´@ÃÙØq"¹b¨]?@Ã.ôØ.tŒÃ*"˜-ÐÀ8\B7ÐÀ¦9 @¶Ø4Øâ8d‚#ð"’‘"1~Úµ}™†©˜¡)c+ÚÂÍY”‚1í™ mØ.\ #7âØµÍY§c†uúÌ+pM~áÁ$ŽÃEC>DC7,ÿ:& /v£= X¸5O~Ý#?VP>ö#@&Û?$AÛ@$BÚÚA&$C¶ÚB6$D®ÙCF$EØDV$Fú#]YOFvd€]¤G†äþ\›°ƒ2˜¤2”äI*CJš¤Iò‚¤$KÎ$J²;ðBMºäL®¤MÊäMÆ$;”$LªäNåLƤQ&¥åN.eR¦$R%JždTÊäQNåQÂäSn%Wv¥W~%X†¥XŽ%Y–¥Y’e#’Ú‚  ÀLÂ>\A[vA\\¢€ ØåD ÂhÁ$ÂèÂ>tÁ¨ÃlAa²åôe¸å>Âüe$l[ºee^æ$ôÿ¥4æðÂhhê‚ h/èjvfg¢æiòB^¢€.lhÊf$t.ˆ&nN/ìÃ$üÁüÁmöå ]¶%ljAh æ 4渥lªf$ fcö%uV§u^'vf§vn'wv§w~'x†§xŽ'yf§2¤¥¬1ÀlA$\A` ¦]ªƒ ð¨ƒ_^¦}Â$hÁ ¦Èe²åèg^Át°å‚öçü¥ ôg„R'‚ªÃ\A¨ ´§† Â$´§ tA{Úå¤CbFh‚ Bm>¨]F[ªÃÖ§\*&[Rg¼§p®`ªÃ$¨Cf h^òf† ‚†ÿhy)’&©’.)“6©y¢' &†¨e©eZ¦]NÂðç~ºghNB6&`Êå$L§[§.Èe²¥aF(cNg„Ê'iÂ舺ifæ%›†( üçpvAœê©‹Ê'}’¨`îCƒÂc’¦[æ––faú©£–æ{Ò©“^*¦fª¦nêwžçµ±ƒ~fh†*hÆ&/|¦hÂô%/ðBgþAhšf_ƪoVgcþA«ªêªÂªîªoò¬ªj¯òç_ª¨C€&­â*r hcꬶ*¬é©®*nšæg‚&^f³Êf¬6+p:«€6«²†&§ž+º¦«ºŽ§§n¤#Fÿ ëHÛ%,@ë,½BKI›Hî+òtÒ@ ‚åƒÀ ,´ŒC4ðÐ< ¬8D"+h+~ ?8,°‚¥¿f,ðä,, üØ.ü¢ÈŠY´X˜8xŒ=ŒƒÁN€œ!4„‹—Ñ@}9˜ÆÖ,îÐGEÌOzŠl7¨X7¤X0f‹‡í‚YØË–Ø¡õ4\£8Œ l£ÍF­ì¼ÃWP‚(¬âdêèYi‹eKâdE´h ú„í+J-Ú¾ŽðŒÀ¦­ÛvH¾­Ü&OÜέ݂›»’ÚÝî-óÔ-ßþ-íø-à.üämz.â^Ð|½kâ6ní®ã&îµåV®å^.æfÿ®æn.çv®ç~.膮èŽ.é–®éž.ꦮê®néBéÁÃýY–ìZÓyÕdÝ’0äÓ­”/õÁýQ.-Öa™jÝNÝ’ð®U#é.$ÍÒ)pÁ-ÒåÒ(ÑAïîNï ‘÷ù–¯ùºÕqÜ»‚Àƒ1S@µJüRGÁ,<<Ñ/±ÑeÁnMÓK‘’ ôÁé“!À39UXuÑû’Adïõ5ý’oýñfÓ<Ö/™þ°»5Y!R/5‘YÁîðÃð’S“áoEÖùæ°ï°%¥ïÖ­o(¹‹F…ÿQ-• °’+™´I‘S>]4¡Ö0ø0 Ó“4!Ó”4Ó-é %TmqP • XU:1/•“³Ñ›ÂT ‘UÅ/+U‘µŠÝRPÉ/UÅ’Èï2"'²ùðï¥'À0 'ñ©–0Á° QJ™<8“û=Ý’1xri1ÒNyÑ]=Ó»4`áÒ È/ C9•7ùÒ›‚ yò+÷ ´Ò…“UAÁ*iSq”»´2{²/_ò3ѲUò%ï8qTõ*²6o³p12Àº@„³839—³9Ÿ3:§³:‡³ Œÿ3Ã:£3< A<«ÀŠÄ3>ç³>ï3?÷³?ÿ3@´@—³ ¸nE=YĢާA‹:ÚÎBG.¿rˆé"Ü×ÃÞ—™íÂÒzbŒ±$.˜=BŸA8Dk¬DÛÂáAˆeK ­J-2˜-tÃ5ZXyÙIg,· DCMWÙˆUÙØW4<Ù œ˜O_‚Óú4 „l>íNï+ä*ô%´+N5O.-Á¥­+`,«Ú9všV£íµ}ìž¹t+Ú˜Ó~†åÃÊvÚSSZ‡9ÚWŸµGc$c+RÙ/ÎØ4Z5µ-Y4@­^wäµ Œƒ8\a{š…ÿ,F_¶H;5‰-vHVµg¿-h‡vÚŽ6iK­iŸ¶Í¦¶j£4W[k#.kÇ6U¿¶±ÑöàÎ6nïµm3Ûnóm'ÅÀR@%·q7r'·r/7s7·s?7tG·tO7uW·u_7vg·vo7wS7àVè,ÝU("¥Ó0˜wK¥÷Ö31ÖåS§Q”Ã42.aÑP²0hÉï#YV$±Óde/ñÂQô‘“e¹V!Uï“í)s³…_8úâÐ'ìˆ÷]I9•*‘}ëV¹R()VL‘0FíjaÔ -Ö%«Ñ”<13ДbÙ“=]ó,Ó™ÿ@RíÒ/ S9“Yýò%8³*…‘ƒ •MQ{ @L-ó9Ó.e±>¹QM±0a8™—yBEÔ <Æ xxE]Ji;YQY!q6ÀHÁƒmï8Ý“ž»ÔbéÔ8Íy6]²KÅ’)ë“<­1•S¡Q6É1RMS #¹±T¥ø0Ôñ‰ëTðT²ü>Ï99“«•™§ºªKšg›×O0A0hWÄú¬7@xi—v©@?¸v¹@ƒ hW¨@;°{x5ׯgA0à:6C­;ûvùúuùz?;¸@?0³Çú´;6P»·ûú®÷vM{¬7ÿ@ŒW¨¯{®ÿºw¡» ˆ—°÷ƒ±ûº Hû¸¿{ºO{¶¿Á¼Á<Â'¼sÅ—X€Ã[Ý‹DM<ÅW¼Å_<Æg¼Æo<Çw¼Ç<ȇ¼È<É—¼É[¼¤¼ÊC`ᴼ˿|­P”_Ì<Í×¼Íß<Îç¼ÎÿUí‹Mä†#08Á#hÌ;Ø`ƒdÅ(%¤ï7Ï,ÿ8Á<‚#Ä>,¼Ã'P?w0A?ΘCö›Î`Cö7ÄèoE7Ô=,|Â(ÈİÄa0L(A(Á Ð@Pò"̓/¾éð&M‡4ÒœØuÊ &o^œ°0á%ó˜ Lón£4BFN s2 %GŒ@8S•n8p°z뮞‡(ù8Ôaž\T9z±kfS§O¡F•:•ÿjU«W±fÕº•kW¯_ªzA¥j'”Ò(™ðŽ“/˜œ}ûâ ¥˜œ:•ÆIl”Ì]̸Ñ¥SL`½ý{Ê‚ÛۆÓ)•¬pê„õÂ甽{ËÂ;:L(q»šukׯaÇ–]U,Yª6SyÇd,/8âáJTbPqÂ$ƃæ1„¼{+$ô#ç< qò‰s!»Cï š2š/¾gÞYõ“O³áÇ—?Ÿ~}Ú/ò©Ò¿Ÿý/üSe„ÿ#ÐÀ”é…ÈBÌrz)¬Ð 1ÌPà 9ìÐÃA Q?í›ï<_¸)'YlÑÅaŒ\QÆi¬ñÀRèa‰¨BVRÈ!‰,ÒÈ#‘LRÉ%™lÒÉ'¡ŒRÊ)©¬ÒÊ+±ÌÒH¡aÅË/Á SÌ1É,ÓÌ3ÑLSÍ5ÙlÓÍ7áŒSÎ9é¬ÓÎ1¡Á! ;fox-1.6.49/doc/screenshots/emso_screen.png0000644000175000017500000030046711637250333015462 00000000000000‰PNG  IHDRâÈ#3g IDATxœì½LWšïýeÞæêT„GU‘³¢"犊œyÝíx”Ð.íÉj ãèv¤€)ÆÉU ÉhñhLãh xÞµ!Ñ;1Žnl&¹7Ë’”4 p¼´W¦c]V’ú­1x%»­[/­‘BÎÄLº÷1¹¾Z iÆð¿LFcjÂVÆMnéHM$ôeÐáBÍNųYB1b1­ïrLŸâóþÚ“N:餓N:餯”n¿d.Ê•@¹l%Æ~v Ç~óÿ({¼Fÿ+ŸŽý_ÖÛ#×Õ/EïÜáø`߃iÂÖ4‰™t+³÷ÿë«`äª:üÿÄnßÑÿOîãÿÉmÝWjâbéÑ“T–®~ÒWµî2]á[“êÿg>R*ɲ°Qdá›wÌÿœçמtÒI'tÒI'}ôÙîŠùøò¶þåÿûícÿUü@‘\ÿeãh( ¸`¯X›®ÄÆ®«†É3LÀRs»ÅÀJ©(X#‡ðWZtB~©Û™S%©„5¿ì•6C£±±°ÊMdÚ’d|kÞrär¯5ª‰}®õÔŠï9!YàRYãó>iF®«—£ö÷ßùC I’$I’$I®[Y¿Ûí}\\0Ld—á›êà•˜1Û‹¨yF™kñ¶.¸ch}Ù/l_u_ø/aX1±«-"Q­çBà˜0÷m.u»%w™(•7¸÷כࡨ›˜t‰K̪ß6yü†Ö9šÏÊÅb-¨ÐúKu( b±ºIQ†´ð:—ZW6²Æ>íF>…¯«™ò‹YË_ˉÐ2ÛY³Ç»­…Õ,y*Ÿqkº>z=ž§æÅ»Y6 åDhÙì\ îÞ$6ìó Á!sÖ7yöï‚tÒI'tÒI_zðU¯\"€ À¸˜à¦0 á![ŒÁ;Þ Lìz‚¯–ϵ864Ͻu«¸¼‘ù \‰µž˜P‹PÖ<ëÂ}ß ©:ŸiàÞ$Ö>£°&–‚Æ=pÓ°Úàœ&†¯Ä¢·ugAKJ%¬ë°ß0ÐóáxlR‡½å:­rdÈ*Ç\ªb²R—l¥Œ™±ðÑz˱óë+w)Iù•²Ò–=p0Õz/„•M¥-<ê·FÇ{cVN¡Dìz͇b4˜²‘Õîv+¥Š¡}k„nêÃW£VN»´òiE) 6¡ ŽÆÔ;<ÿ^È"‚‡ü’RÅJD÷6oåßUÚ÷Nêr©|Å'=VU÷BsÚz¤4T{»~7f§Ô>£¸7‹²$¢Úà•˜¦ëÎ'`܇®Ñ }äjLãHcÛFÖø¼o×s-òCJÙfwín·»L”JTx9j•’D±õ%÷ÞŸ÷—•)VÙÉ;±ß6d±¶eãó^ÏcÒȘÚwiœ¹î$I’$I’$׳l~É+•0æƒ Ì:ÓÒ0:7,/\ãè9â.ÁéE4νø[·‹×W»ý^€RÑ31¡~ÏŠýÿJSïp{ô˜ã‡ü¬ î÷!°ø[ÜäŒ1€Ë2K*hI¯[¾©Foëç㜧ÕsfÈ¢AÀ&¸šH®†ðµ75}YÈÛj¥ÇâÿízvÿØè°5Ñt}ò«•ßû˜¤ê€þ3Ý0Ñø‚oüfÌWÙ"o«ßÿóÎáÑáèÍqιϭ4þwÏÈÕ¨'Ðèñ7 Ž4¿à‹?ó¼û.ÔT7¸·ø¹e¡»VRªv&oÇꟑõ)ÃJ‡‰Lõ0SJ…áËv:s±Ž“ýžŠÆ]϶p®Öí–9‡³~¯öàÏ;ÁµÖ—½‚ ©u¶+#Ѝ·Õ²27À˜ ïz*vÕ´p®ÖíQ¸®L½£Ç&¹» ÜŒ—õnöÚÖÎûó]f}ðJ €»LL ¬“¿Ø$I’$I’$Éõ)'器ipnö‘âÅ ¸À÷¿6yG×§80«†y_`ëvñáѸW|½¢l“è²^Xôa ‚½š —J²(0Ƹ Ñ%ÄÛ¸‰ 787¹T"ʹTõ(hU¢”2±I &tΙ œkÌ%¤Õ!{†Lzt¬?|¼±Xx§§ô­žØ—ªv;Ì+*p´WCxD¶<ݤ²Üd8G`ÏÑ%pÓ°æz­ÇÔa¸¦:0x9ÆDÑÿ„wðR¸ñ€€$2A@ËÑN©Ôx¦‚C˜¸­r&j~Z:ð‘–·:½Þri“;üÂ7#•ÛÅÓb¥¥|úÿ–˜à&8×dS¶>°@õ!‘ ¡¥É¢T·ÇíÞ"ÁÄØ_ÔÞKQ4>ïF1F>Š%bïÅhô+ÞóQ8z=VúˆOÞX:|UïxÝ3v¥Cy©ÁY¿>etÿ.ÜúªP±¾+gÙìÝ"õ¾5(or[¶õ^àccQE °62¦yÆF‡½•Ì%„¿Òkž)o91ìvûtÎ%‘%¬Ãgº²:ç\Ó Y¸ ˜€Ëàü]N:餓N:éëS×tkZÜäŒÍøÆ–dt®1¸¦k:ç¢5%Ÿ¨ÇYüÁ@:¾ùæ»ÙÅglH->==m·þà÷ÈR<6©j$ u?õ‹b:L8 @ @EÆÁ™É8 ‚q?þs Oô@ÂûÇL%îÍ2î#ú¥Î¹—]È'[i±XÅM6#Ò&··´RŸÜ$ëvú,]©ø˜,þ¡º’s}GÆ_«ë~8°¥Fdþçk ÞÖ{8u¼1cêm]ç`¢(n”¥&IBϹ~e³WÞä†K€i„¿Äjß›GûÅòмú‚¸¯œj!Lv*Ú·†®OrnC„ÕnnòÛ¢qmè\0ð8ù“Öy&Üõ ¿ï'Y‰À½Í/or»½å–UåÛ”Ø×šzg‚sÇàcs!ü¥q`Ÿ¯éH¯X^iÛf-3\ )î€m­w{¦—àuËV…^SডªFåu2¦(nûyÎê×jêH”MRô+•1 €ówA:餓N:餯O=¦NúW´)]`Œ›†à ‚ –ä0hSºT"ÆT&‡)°ëqOëý§+>cCjñ¢¢¢éÿ˜6 <ð@QÎâÑ Õ/ÉÂFb0©%웑J{øáôckœ!–0¸ kÕY\*€èm ¦5<È%sfH+MÔ|*ü@)‡!•º'ÍÉôÉQµÌ=fržj€ÉÜúóùøè èÿÇÈðhÌZÐïèѯôòmr…Wü—x7-'C~/oØã–e)Óz>ŠÆ&5Æ€Øí˜â®´ÛÒt.ЦÔ4­§“†ñü–…¡³`’´ªj4½uŽ11ñ¤À\ð¸¥@u‡Æ ·fpTkØçîù]·XZ .毨‹Wßf”?!WýX®mîa%¥ö'ȹ—Ãæbð)Ýi³ JÖ3\,©/å‹U?V¬ ¹iÐu]Ú èú¤³NV…œ¼£{79¸—Õ ƒ$I’$I’$¹ž¥>nr€&DS0Lˆ»p† ˜‚ar€q“ëS†a‚Ù.. ú”a¿{wš±øÀ‚s¨º)ÅÓ´~÷îôƒ(ú/E‰ ðù­»YŠwÿnÜï­ÀMÄ}v˜ibT]g.p“ߺu÷ÑGD ·nÝå&J˜Æuƒƒ1æ,n­Gð) ¯ÈŠ<³%Kôf™g¥.(1€)±SŽïóvä±Êìz¶Éž Öt.oò––ú¬—ÃWÕ†*•M¥UzdYI|0|bR‹^˜ ¾=,¹Œ®c /¸~9¬ŠYgö”ƒ3ŒûàS:ŸŠ‡c[éCï×Zµu½?>ú©j§Ûså|f?:v<Ûbœs®sV”m™™{Æ„oŽy·×À„ªëòCRìvÌ;»»þЧ•Æç}o \q{+íz8\ ›CŠÍÚ”@,a0™³ÎЧåÆç}o $*Œ FÜâø§3ÓÊʇîä-Mà> ”0–î×A’$I’$I’\oRÕuÜä Œ›3 ³6“Cà¦aùߘªë0;v58‹[î{*ŸE¾qÏÒúw~àû3•|óïßi:Oj=© qÒ¿6ç0“%çàÌÅ ðoþý»$ûîÞýΘ‹i:×ïpðäâ†.& ÎsÈœÒIºî.58w:ó3;&Ÿ1ÔLW›ÔE9 >倲­R”$¦áCŸÆ”ÒÒðÍXô‹1Q,µ­²`¢¢”‹J`øª®<"Å¢#±Ûšö­Q³ÇÏïév+þírøÓ\ÌÀ¬Ö/HJ•¤Tuþ¦Mý::csÂ#wZ¨ÞÑåGŠ»Ò[^çÞ^Øh[89©P6•Â%œK"Ó4#áy;ê1ap^ùßÜû|[ûú/œS8WfÙV.‡þ’lsl’”ÇdÏô®òÇJ¢Â~eK€•ˆVº¼‘E'T¸˜•“›iZ)|i-¬E'&arƒëi$I’$I’$Éõ&9;Ðg€í÷'$Î\,>õiBãÜYƒ³xZï@Rñì­Ï*˜®õ$iÁM`ç–£fëê>>¡Zk Ú¿ëÜýë47­ÝN<6©©“*7t«¸]Éä¤ûp—I–¹ÙeÎ ©r<ÜÐû{ÂOÃ};ÜòÓvÇ»Ìù@2ÕÀ$&Â%J%"\ ®cTý|¸ö•NÆJ™+¾MH¥ú=nI”à‚T"ÕìvǾÖt}’O¡ç£hË«õòR€I%¬~Û»En9Ñ'Š¥©íºËxwp—R’Bêca.ÌØf§kSe r©hço¨v×íñìÿeïðåA··’m(›y.ë>8æÞ"w¼êw—I-Ç{SmßTO{ù=ÝJ©ß㮫öìýeïðåAåñJù¡2;§×-\²1{¿ \ÊE““7¹µ‹Éù» tÒI'tÒ×§ßÀÅ8Äãƒã2žÎ™ ª®óû³}lgñÔ¹uŸßº›TÜiCRëIaÄþÍ©­§vs%¶íkñƒP8\ÖÁ‘àœÃd#×£þ- ÀaB7¹µßè»ï¦¹iؾãH8ªËÅ’ø‰“v%¡›1Eñ”{åЧªnpƒ`Å,­ {†T=ú†Ò~¦.p“wdUd&ây88¬%;=QÖš™Vo ØOmdLm91±ô{ÅP¶T²b?TàSFi©pêWåÖøc7ÕúC=`"€ÁÑhl2Ö¸Ï×ñ Å0þBÝû?z¢7Ãòæ7y>ýšiÅäÜ€=JÓïq&Ìä—7Τw¾;~èyù“Þ˜Âð¿Ä‚ǺEQŽ©zߥÈgçàÚÞ …>Uë«=N7ñ„üuVýjt€a`rRùK¬éHOl"šjsï¥hð¥ÊÞ Ý’ r ÕCÎ _ÐïqQ½Ëw³ÙzæÒÆYÏsNŸïJél+-PŒX,,–ÈÜÅabÖï‚tÒI'tÒI_§:¸ ‰1ÃÄÓ>DöÖÿ¾Ë“ýœsØõ€Ïp÷îwN'þîÝïô)n…\ÚÅ®uÚÖïÞý.áÁïØúèƒI­;‹³ÄÆn¢hzz:ár¸LÀeß"ݘl¬óÖüØmyÌÌÆ\`tÓ€ õ޾ÿ­^CÕ%QaJ•x·È=GýÚ·ØõJ_âDÅ̹2¤Èº©Þ¶Ñ‘öcm/5”þrXºÇœïª²Î¿°‡<²*j“Q©ÔTƒÁu}bØù1±L*õ¦®5,?^çÌoLéúݼ¥Îç·Ç9Ÿ´zÊX)+õ .–¨SÕ'£à:\`¬”mô%bž=*}Dèèwô¾Kjÿ•¨ma’%0á´pÆ€‰Š´ÑkåÑ –– ¢¬ÞìOúvŠ›ë`:ž€‹ÁÅX‰ÌD·ÀXª…§Žø{?)Z)ê)n© ðòû<øV§¸¹Rk~Å[ù´ÂõíMíEÁÊÕî–¾+±Î}`2DG†”ß餓N:餓¾ntÝŒýß0àÑÿš&>À­oî2`×Ï{Ø=Æ$˜©GÇLñ¸S˜Èÿî¯ÓÜ4¸imñwwØÚúÝ»ßY'1—`Å$·>» ¡ëÈÞÆøÀWÝ—¶ÜÔ™d4ìñ×üØËûŠÄçFÿ?‡{/…ÔXŒADÙz×ÉÙ㕾ÍRׇã=…“ÂÒé93Ìè-_ vm®›ÜîUJß 3MLÍÃõ(¿8×#¥? ΩþѹÉùí¸+Q˜¨¬¸=N]`ÌÐCÜTX‰”)ü‹}†ÉØÆDØô(ŸR.–UN_²é.Œ÷7Hj_ŠÞ³)ßj‚ ‚ Ö'š9ÝÈ\ÌöŠãÓêÖ¿.pnp0¹ÿ•3V"NqãëHÛ¾g'¥Þvµoüí`Ó;ýãÑèÄ$L„¿Rÿy¼éþàÛ½±pS˜dm»O*>x%Šb4îó)²“°F-iô´‰™õ®Í50yé%.¾ØÉ4–6ÝbY¥¸¹¦ô‰à\ë_‰e•bi€‰J!ØãÔ)拇CdÈ£ª|fèbnE·X7U®¸ýù~¯^H%UǯÂ%ÅW®Òý:H’$I’$I’ëMê<~B&0#¹ Î ˜7ã+±Içú¬ÞnΧø[Oíæbñew¯f€;%¬À“Ãä:qÓ€ Ö}Ràœ™&ÀD±D—˜¶øÉÃþª %ò¥¶ÿamJ˜µ5àN©‰ùèúÄ0wÄüÚ:×#â-ó«“ôõ©7>_Þò’ÅP*zÁU0I`Ì bHýu$I’$I’$×›Ô¹ÊMùÀR¦ Drz*͵ø[OêBä²µØäÙÝg˜\p1§É9Àù” “sS‹ûM. .kq Œe*.•ˆg|Û¤Ø×FSûH$:[‘éI’\ t®¬ý©‚b^ˆEÃ`¢À$˜õC I’$I’$I®c @›R15ɹÊsˆé%“QR*•ÈI^Ä\‹/°õ¤.Ä®4À Tô¦qŒô’ÇMøLÌ%,£_•(.?ĺ~ð{eÜÇпÄ:ÏŒ«_Or ‚-8_’$¹LÒ%Ôîö¶¾ä—DXÞôƘȬ]mi$I’$I’$Éõ)€sn ~H`–ÌŒ1!¾1eV s,¾ÀÖg§[i[CbðLo^=ŸÓ<ýìÌÁCå ?ó ´oÐM&©Å£ª§¬Mð… JúZÖÝŠXºQKEw™$0t%Öt|˜OÅàšíýÏõkO’$I’$I’$¹ü2w%6š¼ГÏ&é9íÔOÉ ù!±ñy¯÷qÙóXâ$™û@qBIJáøÊ \Žô_ŽŒ3&ÁŘKâ@<Ä~a*¤“N:餓N:éˣșÍÌÄ(½Ö¹$òË–9³ÉH"óz˜†o‹u@)`°2%Iré¥~‡GokꤋE­as1k½ ûÚ“$I’$I’$I.¿Ìí®ÄFá\Ë;ânPb ‘IÏ™!ŸÌ/r¸˜uåæ“Nú2éöí€uäÿ¿ö¤“N:餓N:éˬç“M bV ÀήÆ=3å ‚ ‚ ‚X´*;»bW[HÛ­™Ïøm-‡ƒ+iAAA‹J׉$¼},±õÌemB$Z)ã‚ ‚ ‚X ˜ËÞïYÿ³ÇAAA¬1œÞ~|àAA±–°½}N+AA±æqÆÐ AAA¬q(€ ‚ ‚ Ö@AAëˆyÆèº¶Õ·£ê¹zë¿Ñ«!}JÛÿJ“õÖŽŸìZã’Ziz#ùj]×vªØ­sÎ{Îôί¹xC5õÎFó7u±z½(ö,®IÝïõvžì¶ôÁ‹Ã[};8IvümUô«˜ýüó²*Pµ(VånÈÑý,í.ÅgGAQ°d» ;b ú¸Ï™rþýS‹n_j+²IVëœý 6¾Ü0¶¬†t]«ªÙŸO£KMáØãÂ×ýn—¥]»w‡ÃãååþÉÛ*çܽYÁÒ|úAAÄ¢³h1i§Qc·Õýšªž«ßûâÁØDlÞV&F«jj÷Öìý°?©õúMº®Ïu²< œóýVÕÔW=W¿ÿ•¦ÉÛª•Þs¦wWe­Õ5ýŽæÌßôz‹µ ‘)ωFc{ëê«jê¾Ò¤ëZ–D›Zâõº£_MX³þ‘/ƼPú4 —?á…ãù[J÷;={ëêwUÖ†¯‡æ%dimî¿0ØýN€±±ÐVߎÉ;€ý¯4…ÃÑ9?¦ÌdúZZÆ·ý¦{Ñ?2‚ ‚ ˆÂÁéíÏm@Ÿâ¶“=ÔŸ~~ºíH[ëÑV÷feôj¨óD÷ÙÓsž$v¶Øéo~­@Ë[-¯5WTøSwûô;µ¸óåÌÅN½}R%£WCÁÝgÛÅ9?}æÜgü„1&ô) €®kMo¼Y³§¦¦º25ÏbÑòV°åÕF«ûÝoŸn?Öš)Ñbá–0ÆÜ[Üáð¸¢(’(û·{û?ì¾öm÷&eÖ§¸ïGÞæ_4Ž^é~·çüg‘á#Kµ¹|»÷Í‹@cèOa÷ãîÐØXÍîÊØW1ï6÷<”óËãìuÒײëx»³Hàéòö_5÷œéíüí铎ÇHA±6pÆÄy®äÜœÃ9ߌ¶‰oÜæe_j+œó‰‰‰Š ?€ÊÝ•ý Ϋâ¼q!ö¼wNãLèS:Ƙw‹»éÿörï>¯× €›¨?pÐrs3åY8IÝ?x¨)S¢Í¢XR¾Ýú4¬ÞÑË·{EQÒ¸Á9}:^÷|MRNÆXÅN?·×;Ùjžõ‘¥µY)SÔ;º>ÅÇ®‡›_;0|yT.•Ý[”Äwsn8¿<ÖN*äüZºé1AA¬ æÌ…BØL¿ L45·ÿà¬{³»­îñ •|þƒ³Ñh4|3Úý^²In~ý\ð=î¹:jy©yÚ®ØtòÂ-ñÿÈÛóÞ9]Ó+wWð=î¾2¢Oénwòp‚¹ÊÜWü?òŽ\a.”o÷wœì)•KýÛËç\KV’¾–©;¦‚ ‚ Ö0ÌÅ ‚,ú=Ö¾‘ÁKÃÖËèÅÙÆÍ+++½0|y8å]Á> fQà&ç&—7Š/$VLLNªn·»n_Mëk㟎`€µñæÍ#™ò,œ¤îûŸðeJœa1,ñz}Ñ/¢¡OÇ­Ý8åÛ½=gz­€¹Úœ¥#Ê·û{Îôz·{á‚\*^.Ú—©æyãki"ãc$‚ ‚Xp“ ‰ÛÅ_è:Ñ<ÖÙûaçÜ÷¸ûä¶Ž¹ÖàÜÆ­lRN½Ý ë×Á–Ö`Ï{=^o²‹Æ«ü»À®gkËëø œ0Æš_=TõÜ~y£\¾3>Í9o9ܦq€à‚¿š9Ÿ´ýhkçoºß<l=Úœ)ÏéúuG[{°ëÝY”ºN´gIÌimþ0Æ”Ín¸`ø¼ÞÉÛ“õû’÷ÿd¶9ÍG–Öf¹·­}Òÿ´ßÒà §.2,¤¯eëáfû-±„…þ4ÖõnÀ„³oŸ\Üv ‚ ‚ æb(MOOË;š«Ñr8 ‡VØ:‚XFt]«zvïµ?~²Ò†AA, ÃWFZåòu,@ÞÖ8‡€­¾I)Ÿ_[tS[Y¢†V¤¹œŽ=i-q²‚O)™l.@S ‚ ‚ –ç=s8hy¼¨eöÕ Í5,{ Ç’ü™‡Í¢(Ñô?AAk§·vŽ ‚ ‚ ‚XK8ïXäS€‚ ‚ ‚(4œ÷Ð AAA¬qœÞ>­AAÄÇéíÏ:¨ëÄœÏì'‚ ‚ ¢ÀqÆÌœÔrxÑn­"‚ ‚ ¢ppÆÌ¬Ð`AA±&¡‚ ‚ ‚XGÐ=AA±ŽH”i«oG¦òŸ_óxwDÂÙn]¼4b×<ÓÞl½³½s5^7»ÌÄ&T¥L^i+V »ûëü9AA,„ô1©ùÒzçïŽHØ©§÷àÛÞj0==Ɉ‘«#ís°:ÁÖ§v€™Þ<›Ø„šg……ïV®yß7{=^ÿÐÅ¥Löxý©BA1˜‹È´`MÿoõíHu²‹Š0=½€Ç»£¨@š<ÚÝ<ºøÇ 9MÚúÔŽÏÿ|-­‘NªªkÓ¦]¨ª®º8°*ÜÊy²„ò¬Ó®ÄžŒ_Hñ´ïfé ÓûOꫵ» IDATÎÚAA,ÜäBÜñÏ`¹Ô©ŽµÇ»Ã9§?=LSü3#Š¢"-ÔäÙ†Åõ?_ÛúÔŽ|¢†.8ÿ‹„C–Ç?tq ÿ¦cªýß\Í^HYg%ó.› ׿üùwšš?û»UÕµ± Õ¤Y#:KZE–âÉAA¬%˜‹¡x¦S€¶^Á¯Û·&öñÛDÂלÎ|Q2mêlï,²\k”2üdWv+Ÿ|j×Ö§v<ùTÆl[ŸÚÁÀ8rŸ_¤”ÉUÕµöyz½¶[™ê¸çïÊg/›g%ö"Æü<ÝLk ©d®uZù“F\sÚ¦•=ó\G2AAëŠ1[/ ±{g뱎Ï÷œ…§§ ǃ€§§gâ’hmkíhïœY °Æ™C’xò©]ßü•3|ÇñÀÃßß÷òM0WÜãÿüÏ×>ÿóˆ»Gòß7bí>·t§Ëk%æ¿w(µ¬½ãe®V{<€Ý_ëã°vaå_661‡E‚ ‚ ÂÂéí§H¯o½4 0\l…kdÚ‹­—Fp±õóêômÌòþS)*ùŒ³ûqïŸá»oþú€­[òï?µƒé±ö‘[zž>w’÷o—²&¤­½éYŠÛ>njY,`ãÊjXÏ*iéÃéýgZR°{j)©’ ‚ ‚ȉÓÛO{ k=ì<ÖaéVÒ֋ȧ@‚8 [?¯®Lm£@QÑtRÄ€sÀ•ZÈa˜ÓãO‘ó¼µ`~Á¾I¼…åÎæœ¿ÏRv–ج¢1€ÝY{þ>“÷ŸéIÚé‰Å“¥L¶ ?z› ‚ ¢Èu€ã´~Øé™bm3¤g;ÈŒ&8q®p<ðð÷­ñ€-ù“Oíâàñ€¬G‚Î)Ò7K óv¸“œÔÅŠX]‡¥b=Ìü½'ÖNÚƒ›ìÚV˸ˆ ‚ b9Éu€‹ñ¿ÿó=­Ç:`r¸˜S&E¤¶1 ç"@Þ+Ÿ5·q0ŽYzç[9.˜7Î-C‹âp§V›?¶ß¼(q½+Åü¼‹´Ã¹¤GºÇEAAKJîGŽ™tË×Ïyî¾Eg{gg{gš‹Àì3[q{ îý»˜µ.¿K8¡w·³ÏÇ?Éi̼Y"WrÞ;‘œÞÿjtsí)|ëå<:’i÷Ôj|AAËFîGŽY;|²\–Dk[k‡#f y¬$æþã~?7géÝíì³?ÏÇûO{$å\Ég¾R&ç Ϋ*Ì×ûO]vXøÎ¨ù1Wï?玩yîDA±ÞÈ+ ýXGÛÑ fïäù||ÖÍ»YF¹ïçʵ`Ïýs3œ·÷o±À cËûÏg¾5c½pß4íBybÇÎ.ІârÌ©#ÖÒ‡-oÙ„õ’Ö‚ ‚ Ò’#àóêÊ­‡ábÈpµ`ëiÇÜäE‰S€Ò*Ÿü1›ûßßß$îàŽ{–pçO,G亀(0Ö¹kë¼ô7õQ¬ó‡CA‘ÌÅ ‚ß³’ÒßÛEAAÄꇛ\HœÂ?³0|edÅ,"Ðr8è\Ó _%AA §åp¹B(RcZWÐ2‚XçtHswý* ‚ ‚X–ƒ‘)€ƒvTDá‘v`@A‘?¹ï ¢0©|&°Ò&A¬¶úvœüûö•¶‚ –L÷Ѐ VKq»Aĺ‚VV‰uH^÷Q°ÐV=‚ ‚ æ„3 ~ (Ý@AAkŠXt]ÛøYÙæ2ëeËk^¯»é¶óïŸÒu­êÙ½×þøIþÅ•MÊ©·ó]Á̧~‚ ‚ b­B1+†X†>îs¦œÿÔBŠÄÖ§v00ÿùÚJÛEADA1…BÚ‰ùØmµíh§6¥ L8y¬U)S²Ôû*vðõ–þ³¢(uþ¦Œ5¾TWõìÞÀîÊñð¸À„³oŸ7JÎ"Ñh¬­=hpÈ¥®í¢(麶ëÙ½•»+£7¢^¨qoó: DÑùnåîÊ%yÄ|a`Æ}Ù" [ŸÚAc‚ –“¹žO`Ç2-A‚XŸd»€XRô)^õ\½¥õ§ŸËo;ÒÖz´Õ½Y½ê<Ñ}öô©´Å;ýͯ5*›•Æ—ê[Ž´ÕTׄoDÿÁY}JÓ§xàéòö_5÷œéíüíé“ÇZõ·¼lyµ±¢Âßs¦·ûíÓíÇZð)xÚÛþ«fû_<è4 ëx»ó]¢Ðà)¿\>}º¨¸ˆÆA,'ù{ØÃWFœ‡/A‚X‡P ÀŠ‘sç<|3Úr$~ù«Gñš}5#c¡¶öΡþóñÏÓ…Š ?€ÊÝ•5%Õ?11‘æ]** H¼K é#øi @A„ Å4Ì…9môç&M¨Œ1UÓK7ÉókTd3Nd’º®9ß% k ãX\,x$¾H(¬x€­¾Ÿ§ô_äSÆ—êçÓ"ç½ö5¾Ü¥6]תjö_rf¨©®Œ²›J„“G[•Íw¸u¿Ó32:–mÌœ½Ú±±P÷»=† >¥»·x³ÍÛm |Л³kK³#•WqòxÜÔªçêõ;ºõ3u§ÿ£Á¾ pAp¡ñÕÆŠþ¤Nõ;•ÿai [ÒîÏÛª™Ï€‰à›åå~gž¾ Ö[•Ï_mH_Q`lõíÈôVÚ?eI“ò¤M$ˆu Å.Œ1÷÷à¥áš=•¢7¢îmîìE:wvú? ´´ãÛŠLŒ^ Uìô_ö?áKª¿¬¬,Ó»i )]ċ޵Ðüæw‚_°ùî¯3zQQQÚR#£#­‡ç¹§‹s£ÿ£A§—œ³6;ƒ½Š5xq¸íDw¦ x>Åû/~–Ë)ÌV­‰¦_¶ýþƒóJ™ áh4cwméº6×®- ÎŽD¾Šñ)ÎJXôFT*ô;:€LÝé¿08<:2ðA/+a““jÃ+Mb‰àõz“àœHkXA‘ú¹‡¯‡ƒíCˆú/ _8×ËJLô_\Is‰eÄ9å‘e,AëŠ(hºN´uö~ØÇ9÷=î>¹mfÚÒ`:::ý"öûÎÂ…úêš¶c­GšÅúÓX×»=Vprý¿îhkv½Û#‹R׉4· 'P€ÿüN¬ÛãOÒÓá\Ô”2Åš|­ÙW36Ö¦´®¶àÈ¿„Æ®‡µ)­ë×A¯×ÏP]3v=¤é¼ë×Aïvoý&]×­¯âÐÇ}vm¢ÑhKkP`Ry¹7msv¢¿ÜÛs¦Çz÷à¡&M7à‚$J]G[K7ɵ/6ðÄ·}àƒÞÔ ¹«59ç\²"à]ð&Ò©Aðζ`"S×’¢ó%QÌþèôœé¼8ÌJ˜ŽŸÚzjGjwW^®ÛWÓq°¦º¦ûlÝéý]ßÙÓ]¬„(-•_kìý°ï”×ëìTßû§ò9l ÕZg÷“Þe%Bꇒç×)Ës²Êù¹ëS†>5óO˜ó±À…º}5ÎVrÚ™ÿgG,i'ìszóŸ_³òXc;?Mÿ„ s1Àå#Ð Àò!ŠRÒ¿ÁvŠó­ÒRÙøëÌœú‡¬¢"`ïη–é­[ßlN*k×ïv+¿ŸœdXªt@!c­t+â 5,½ãèt¦"#WCþòøâ>Å}Ox›_k9øó–SÝíÍ¿h u¿Ósþƒ³ñ ?ò6ÿ¢qôÊH÷»=ç?8ÛwîTUÍ~{g޳¶–·:Z^k¶BÌÓ6g3|eDÙìÀ\ìÔÛ'-wjôj(x¢ûìo»f5a"5Cîj«ùYeUe•ÿÇå;ø/5ÞÙ–µs)m×’¢ó»Ž·gtœóÓgÎ}öÇO˜µƒÎLßzjGjª+¾þfÍžÊñ¿Dš²i»Ã§¸®ë΃Â|ÛÜVþ¤N¥~’ºsêí®TkmÃÒö%퇒Ï×)Ës² öœˆ‰É;“•?Ä©%•Åú숂Â9°SVÔ"‚(,¸É…¸ãO+±Ê±V‚w?˜Ùõ·«©Žçʳv»·yႵ‹Ú½Í›T“3x½±“ÝYjK 1ïÿh0µ9ËcÓuOñ¡Ï€ Ñh´ç½s7`BŸÒ“È!Gµ@ûÑÖuuc×C=ïõ„oF[ј1>׃JŸýÑ1Ƽ[ÜMo´ø·—{Ÿðy½îL­;;@¥Òb÷»=•Ï¡Ów'»ñYHíNªµNÃÒ¾›öCÉùuÊ~DÁœ¬ÂìszÎôvþ¦»5¿ÃÊë³# šû'ˆ,0C1pà{V­¬R׈µM¦S€²0~s¼|{|‹K¸˜Ì5Ä\ñYϤ vb¦Úr6gyl×þi¨îùšžsçÀDSs[ëÑÖ¡ûNý¶+M2䨠lVꞯ?u¢käÊH¶'’‡åVp¼õßï?îCîüg›_kd%B÷{=mÇ:óiÅ¢¶º¦ÿ£ÁÚ=Éwn$u‡•0Qc±™ªnDÝ[²Í|Û¤v'ÕZ§aÉïføPr>“ŵjÖCÛ]9rÕ~,ÌùXÒ6”ÝÎc׬àøx…72†Ï`brRu»ÝuûjZ_kÿt¾2býíD+¥ëD‡3›ÇëwæÙêÛaýŠÓRTT”ô_UM½uj䢘³¶Åmn©«]æ&–­•y°†ÍãÈÿe°ŠX,’þ4eÇy/ïœ 1,wBÙÙ»Ú@ÚÖ˜f åppe¬#ˆu̲ýû748‡kæ^Ûâ6·ÔÕ.sËÖÊ<(Là Ó*bQðxý¹31/¬Éýl÷Ð/ ‘üÝú­¾'ÿ~žû 2ÝöEQ°æYàZ ˆ%eqbŠŠ‹wÊéû9Î$ˆõF>ƒjç&Ÿ¹BÛ[ ‚("Ὣg®Ý‚ Rqzûó¿€÷g… ÅBQq" úç "Ož|Ž6zÄ"Óþ² Ç _È O0X+4 ˆåâõ ‚X¤.ð‰Ó©» XÙ¡1 ÖÙbò'ÓõC4 ˆeãÍ_¶­´ A %uv—Ÿ8Mc‚˜7¹c²ìH¶Ï²V:ŽÁÅì£Ç…bÁ©¥=šPUÕ‡~ØmÝäbâäÛ'«vWÙïöœîéy¯Çz«f_MDZùoŒ&ˆ‚eqÏ¥¾uëÖbU•?Š¢Äb±<åò›GÄê"uŸd–]4 ˆù‘W @ÚÃ@k ùÍï!~çèwѳK"ŠbäFÀÈèHÃ+ U_Æ=§{. \ûã5I’p=gzæÞ5‚(tÖÆÝ4äý±¤dße@c‚˜Î€ïŵùÆØ’žÆ”¿ªÐñ›ŽS§OI’Åh<Ôè̬ªª$I-‡[|^Ÿ¢(#£#-‡[|Û}Š¢„®Æg:Žu(ŠâÙæñm÷©ª `<<îóú~Òߢ”ɳ*üCð³áàïO7xO?£ñIKéF)m%åÛ•³'æÿbQqÆÄÎ]AybÎ;Žul=gA]×=Û<·gÿ‹û+÷Ä~Æ=C¿£{Üžì+vVŒ‡Ç»Þ¬ª¨¨¿>~ê·§Z·X5´µ·Eþ5¹¿>.o”ìqëÑÖH4¨457͵±ˆ¤zü«w @+A,)ö.{ñwýθoLߟNŠ °Ñ4ãÉg;ž¬ìè½:u´>Gý%¬ù…™ÀƒsF=´Êž=^?«Âg;ž¬ìèþplàtƒ×›ü7­²Â»­NÞÑÒV2v=æ.“”MÒ|A,6ÌŌį'Û @Ñl’ÞµFçÁ£ÓG§ƒG [ÏÙ¼µ(hš¦lR’fú³ÙÍXÕž*þ§ýpÁ ðýÈ›ˆ6å?*¯ª©ê:Ñ ¡Æ=#úE´¶º@ýóõöBA¬Ÿ_Kýo¥Bh,T_Wïù¡çÑGu¦Ühy£ÅóCÏçëz'yV‚XR²Ë`ôjT))î-²5‘?ôA‹(J>ù QzH°&ø F¬œcá˜\*¦Ö96 ¾3ÜúreRz]uyÿ¥°¥§­dðÊx]uyž–Ä’ÂM.Ä÷þg]˜žMÒ»™öç͉úê/ 6âF1dÉÌK«Û£—ÐX¨ëx—P"^¡E7‚È ÛÀjöÕtu&»ø¿éT'ÕÏþüÙÐðÐàÅÁ Îwi€ ˆ%eÞ» Ôì.~¥:SοÝÐöîð“•¡ë‘®#5v½Ø£}Ÿàwæl~)0|%œ¶Ú±ëQÏ9)1ð´;NžépVúK,PžmwA,ÌÅP ,Ê=ÁcEÖ¬Çq›œ9NʇáËÃî-nK¾l:Ô4ô‡!aƒ`ç¿8÷¡Nª¾í>ßv_ùöòÚºZaƒàÞâº4Tµ§ªï£¾@Å|n($ˆµïqŸïq_ä‹ä±÷àÅÁ³ÿó¬À¡Thx©¡ÿBí¾Zû]:ˆ ˆ%ÅÞe`§sm1$á³?áÂä¤ÖttÐNg%‚§L¾2 ÿRxè\ÆÛÙ_x·É»êò=ƒ„•Œ |j–Û“Tɤª+›Ò,)Äò³˜÷Ø{~ò÷û­0Qº©´÷ý^+½ñõFOúŸ´Þª{¾€¦iµ5µ#£¹/<2¸Qû\­>¥[Ýé=Ý àüç8øæ‘7K7–|<«‚ @½­ò)îÞœ{·y»ßévf ïŸ ˆ%e» ¬-ûöKqãÜvÞ×Uûìóïªëæ<½?S¾ÝùBMûVþ•Ä ’ûd½ S‘|e9íý¯7ZÃI’,ï_–eMÓìJì#}l]Ø „Æ’wùû¼¾ñðø<ì$ˆÅ"çO©Ñ¸@bñ>cλ@+A,1‹²Ë ^Õ”ùJ­¬ð Ž×íö†>àœ³’™<5{|ͯvÕõèS™¼¥ã•µ?ïMª™›+‰/¤­¤ô!1v[Ÿ«Í±ä¾Ày @׉޴w‘“UzÎåúk\“J$Äÿ¥œ5GÞ?AKʼw¤eÿáÞó'Ú߬œ¼Ãë_ïÀ§ŒþGþ©ÃàüÉg;úÞnPUí“s&u^õbì=E\ˆM¨µ‡zÃ7“·û‡þó{•‘«i+ñ=¡ŒŒe‹o$ˆeÃy@î€,Þ–Û¾‚ÿ9?5T7ɬ„E¿ˆúä¾¶cu,h€ ˆ%e®» ô;ÚÃOµdJ‰~¡&ûh:ÒgëÂcÉ1‡ú-51•sÆêv{­@Úüu»}ûßèMM'ˆågn1™V²ìä!ÂÆãÍpf³²Û„ Ó°þ(¦@p jªkzÞîñžóêºÞû»Þæ×šEÈû'‚0<:Þür t£d]Dùv%:¡ÅnÓ=¤DAW € íÿ!ˆ ô[°Õ©Üºu @ë¯ZÛŽ´=ùÔ“ÌÅê^¨sZ béY-» vÕe¼oxìzlì:Mÿ…Bî'@kËãOB`B×Û]]HÿyÿA,)ló¡•6 Ö΀l7[ÌÃûϾŸ¡(sm… ˆ•‚n&‚ ˆÕÅâÄd!gþÔøçÀÖ)Ì€ Z b‰h9ù¶]‚ …%È2f°œû¢¢¢ìÎ=¹þQÈP AKÇ›¿l[ibMqòïÛ± 1YòOOOçôþ ‚(pÈû'bI!? ksþ¢ÝZuΊŽuà×íEÇ:¦Îg‰@UUÇc_ œãžÑýnwðHFãó¯Š ˆ$h€ ‚ VK6›s`Pt¬ ¿?Ó`±–ô)½ûl‚ æM’OÞ?AA8ÌÅ ‚,Ñ)@™áiõ¢cAüº½èh°èX‡­g©¥ñõFÏ6¿Ü¯ª*ãžáßé÷¸=žmž@EÀ:xdW`—®ëžmÏ6í[­ö¹Z+OÕî*GïZ|^Ÿ¢(#£#‹×M‚X㤞ó³Ô§‡‘ý¨°x†û‹Õ`–†Æ‹ŠŠ¥¡E¬Š ‚ ²ÃM.Ägþg\p‹zG)kñìã- âhŽa­$ôLc]×ÈHåîÊ–_¶˜048‰F"7"Ío47jðÉÈ'¢(FnD"7"jŸ«-ÿQ¹•ç|ÿy»ªŠãáñ®]´V@¬OBc¡úºzÏ=>úh>éIsüŠ2ŒpÍ=î™âÆ=B‡~Q°³GUx‚cWgò÷Ðp’aê_„aäÕSAê_¨~MT®*’$ ‚x& ~­Øáßaå¬=’÷<TEé!©ñõF»¶PSAðm÷Ù« o¾ñfWgW}]½5Åâßéï}¿7ÑG­¶ºVØ H’ÔøzcÒ¶Ÿ¤½@ñ— ¥çtô$?"‡®†.xÜA|Þx»Vž¾þ>ËN§=Aaãôö—;ÀÑöL‹ÓGƒÓÇ:ðVÛô±KÏæý›º4 ï£>ÿN?ƒ0!—ÊzÞë±r‰%¢=6åO—wˆÏeÒÉ?±@2Íñ§Žì·^ÀàE"Qhw¨˜)U[wÿ·þ cW|+ž^ÿ"$ wïâÚÑûáLþý Ð5|ó¿q÷¨*Z~™—͆aôþ®·æg5vʩߞÒ4í›o¾\ÂÁC\ ]³r† á4 _2 ã›[ßÔï«·Ë^ÿó¸ñWÃý˜ûà+¨ªý"ZS]“Üp¼µîþûÝ[ÿvkìêXð­9ü]MÄ´oµ†jëj/^ ]3þjx½^«]‹áŸeAA8qzûËàh;c‹ÙEqðÒ g›gðÒ`×ßw6­m­žz|^Ÿ=©/lêöÕ))VðÀÇcccVðþ÷/¼'±žÉrÎOÒÀN—D*0xçΠaöôÿè?£ëÒCh=÷õãé‰ô#‰ü/ ëm l@ð0/ä°VxP6<ðÀðåáS§OY‰²,[$Ij=Ò:ò¿’Ð4íÜïÎ=wÖãö6ÖŒƒE×ßwI’„b4¾Ú8ö§1š®ñ™ˆäª¾ÕFÿy´ëD—µ’Ðz´µ÷ÃÞF;hþE3€šêšÉÛ“§ºOYí6¼Ü`µ›É‚ ‚p²$÷ Ÿ¡‚É™‹µë%Ö¤ IDATh;DÖ-7™N•e9íü}ðHÐŽâí87£÷ÜÌ?±ÒCÒÀÅYÑxΪdYÖ¾¥e‚È—,g}Zj¥}·ñe"ú"ÿ u2žh)JY¢æM˜œLŸîÌïù¡£I3‡µÆ]Å0îMÍMõ/Ö\0pq ûDwô‹¨õ×O%ÿER'Uî-îÔ ÈãŽ>+a–’(P免œ<°ªRÊ”D_”ÉÉIäM¼-HÍ„09;žjAA8Y’{òÉ3míãb°öü¤àŒ¦ ƒ ¢`™‡÷ ð bàÿdyf —@lÊc»ÒÒôéÎüßÜ‚ôÐÜl6 /5ì ì }«í}nïïû_ûßkQŒÐÕÐŽŸìÀìµPk.?öUÌZ(ȉ,Ëî-îÁ ƒÎPYUMĔDZ۱R«“ ¬¥KmJ³Ž(ÐïèsëAAäbÉc²,Ø{ýÓ¿ëˆ&ïŸ –Ã4¬¿†i¦‘3vù§zÿ©÷¨_cèò¬é!Tü-­0 hߢóêŸO—~<‘_BÍ>45ÃZÀSU ]ʯ›†Ñ÷aŸ²YÀ9‡ I”P õk5˜:ŠÏâ­$éÀKöØû2À¸gÄËÌÉ·O¶´¶ôõ÷Yἡ«¡†WHI?­him1 CûVë<ÖYÿ|½³ g³GE+„ÉiABA¬f¬¯ñ’Çä3d1΂¼‚X6¶þ`ëÞg÷ZÊÖlÍ™Žtsüi½ÿà>ü›ýÁ£åååÉç«ã|ÿùÞ3½‚ ìªÜÕðRC>Ï ˆåd:'ùäY) Ö¶‚5lzMÙf}‡—*À&û®¡irî ¢¸uë֜ґÉû·¤Ï‹Ô½3QzÓ´"˹2ó²åp\6 ç4zNg¬Ð‘èËô§å––7Zì—ö¾¾^~1:ŽwØaEiëLz¨XaÐI¤†!%•­Ú]U›¹¤ÜZ:pfÈÔnv{‚ â×.¥ù+¹²¬a(lÛæËÞ`±¸»†‚(4Rçø3yÿ+k'AÄÂ)ÊçÞrÛ_$ˆ¥f¾_¶•ŒX`+yý ‚Xb’vùgòþSc‚ V´ªF¬ œÞþ¢ädw eòø‹RÎJM!b‰Èâñ§®Ð¸ ˆì|>~m¥M ˆµÏ Ç,¼•´¾þôô4byÈÓû·$ý* ‚ÈN$œãˆ­ÕD!ï/XÛ Ö°dsj«/ )ŠÙžV¤ùE‚Xfæ´@±ª!7cÝa}â–Û¹†>}æbFâLï•\Hrú/3wެ)äÚœ§ªêÃ?ì~Ü &N¾}²jwU–üAädN++m,AÄ‚°ý|²¢¨¨°æ³m_¶ÐÙ‚5líÂM.Äÿ•ŽH›sÑOE1r#`dt¤á•†ª/i@ ‚¼‚ ˆUFN, Ö°$iib޹ЀÎ)@yŽ­Ù¬ÿs—Æ”Á§â=5îþ~ÛãÙæ TìãJ:Žu(ŠâÙæñm÷©ª öeÌ¿Óo¥D¢‘´yb•ù"òè£zÔ>¿«ïBŸÿ'þxbMíø§ãÎRù¯¬DŸ‚ VŽ5·o„X38c å ì¤uñí?9C u]÷lóÀ„:©Ö쫱& II†. 5jºÞ'õœŸ¤<‹r Pý õƒ—à>ö>·÷ìûg#7"Câ<þPBc¡®ã]B‰<lx¥s±ÈˆõßxxÆâÝ7¸Qû\­•ùà+{O÷øx ï£>Ï6ò˜ÒýNwÚ<±J‘DɳÙ@.•›Ñ<üÃI„¡áå†áK³Òi€ bS€ðkk³MaâôöWø&à…¬ØsÿÙdYÎônðH0x$ngÇñÂ!4–|¡üˆù=Unr!q«Ï ÄL'p&Ú¿®Uù3#ˆu­±~ €Å‡éb1—'É\ ÅÀñ&à,ã„L58Qö”öŸ™ªª?ü°ûq7˜8ùöɪÝU™2÷Œîw»í»~ÓÖæñx4MK}«çtOÏ{=V+5ûj:Ž¥ï]–b ³ð›€ÇÃxÒ‡éÿ€õÇh±X¢jõ?é{rú?¦±þ¥¨sEXÄŽ¬™gB¬k á$P‚p°T1-‡ƒ©ÿ-ÐÖTDQŒÜˆDnDN>ÕôzS–œú”ÞýN÷<šè9Ý3paàÚ¯EnD"ÿ‘KÿöÞ?¶‰+]ü~,i¦J®<®2^ŨTõ´©SªÆ¹ Æ)Wo“mõ’1ðª˜öª8ÛU‰¡ZâPmª%Õ¥ Õt N%h‚´mÜU)“jÙ&Õ¶uVek£m…ÑÄD[ÄX%Ú½DâýcœÉÄ?Æ?b'ãÉó ã3gÎyæØ?ÏyÎóºPaDëDnDÖ®]ËÌж½mÎéi°ý§míÚµIWå¥ý‡'À`’œýÇqE<<¶ÆDƒ¦uà=V„6eb?eCQÚ‰Y6XŠÐP± O„ 9ƒ­Ñ‰FTêÏÿFØQÖÖh#«H²Š´Ö[‡. ͧ5Ñ šÍµ_¦,îò$½Sò}r$)XZ”û aJ§b ëF+cf˜ZÆÖh“V7Ùšâñ8SË0µ ð¿ðmÛÛ¤:J¿ë ËRg1™Lìhb;$ï{Þ¾S}E,ç>§Tž[ê,Œ™±5Úø_æÌús—¨/¯¤äBeû®ƒ.Ë‹Éd»66[a²²ÀDfº8G-óè§W¤1€%Í>—¿2¯ ‰ô¼mjA€¦ÿ„æWÍ]óºù¶©„Ÿ‚‰ïŠÒ?ñÝD* ¯‚ ÷ïß7›Í[·oU©9Ïù|¤åÕÇëá¾ <üÇý¡+¡‚[CA  äû¨“š+²®´Kèôffçîͯ4K…$AŽ D¢‘ÈõHçþÎŽ}p•½*»  m{[ýsõR ƒäÖ76†'Âþã~i±ð@ˆß‹3f&µë»wvîŠD#¶F[G§šóA)m¢ýþ–æ–ÆÆÆð·á¾“}®ƒ®Ù s@û9ºêÜß™æÔLt¯­Ñ–é_îñ¿@Û «€¢ÀùÀC€¡K`©KTp¼†e å.œëFˆÝ‚ø=p¾žXêc©ƒ¶m³ }¦u@’`Ù‘h¢PxŽ=@Q@V}7șҖ7X á^H%p>@¯¡É*Ò±Ç!I ÇÙmE‘$iÛlãnsÐ`mi–à!¸»M&I’ÔJÊù–S!ói‰$IË‹úd<pØ¢€$Á¶¸Û‰òþS`2Iµodv’$í»ìÑÑÒÝÈýü>¿½Ý.½_ÖÖÀé€tŠÿ…oÛÒFV‘E9ßrÊã)!y*äÂÄË™ƒþSýÔJŠ^C]º<Ę’$-u‰~¥:ÁÁ $g.‹”Ž7Ò'¢({»=iVNBûn;YER+)÷awÖòL”_tbÙ ¬}táš(á>™}æ…ú… >áyÞ´Ú”˜ž_cßYë­L-sààðßÃIW „ñoÆeµ[ž­'¢å•°þ‡5vK-c‰ð@ˆÞˆ¶miû»4…Ÿ•Ùö_°BHžËs¹¯Ü@ÒayÞb±X\ï¸Q ;öw¸¸‰Ê4³r†ŸLn+©<Ç,@mí÷ÿ 7ÿã×Àý.€íE˜øHñ5쨩ñ¿„¾„æÍ`ªã غ†.§YP4|ÂáW0¯ƒ½3zðNÄy¸ûàþ]à8p½£Vþõ$üiîîKöæ?nÞ½ywbbÂÕå’ËûNöñ<÷î]²‚Ü»o/|=ö5‚ 8þËú44áîÍ»ömv…ÌÃῆ…_ó:óÞ7öf´¾“Àóp÷.°ww:œA€»7ÁñZÖ6‚8hýMk‰n„ã¸èhë–Ö䎠­½ îÿóþÍÜ¿6î~7_œØ­ÿ ïØåhko¾<üõØ×¯B]]rC …Ãy ,R.PFjdxD„›7oŠÓbòòEpuº¸ÛÜý»÷#áHð|00P/ÏD¹—©ØHų:J¸À£¹¨×Q–ȾË>üé0ÀCغ}ëÙÓg#×##ÅŒöL1{ãÒ¸U¤q…1߉"å*{W¶ŸÚW¦BY0èjú³/> ÿ5<‰Åb݇º¥òÀ™€éq“mcú‰|e–ÏT@Öþ•«€Èå@VYmÛçTæÑ/Á<1oÝu稕`~د€» â48_‡Ð©ñÄÒÿðT¯×~Xµ , r}¶Mÿ€¢–óMÿ€çaøøO$dp„áKjåêxx¥™ï®Ã]Áƒ‰‘¤iiµ!EQ]‡ºØ¯’‡…çùsgÎJF²Š´n´*döSËÀù¦sü›quh˜ZŠ‚®CÀ~ÏYÖúì7B.'É*ò±Ç }ê;ÕW¢áã<¤ ¦âáG¿õ÷Ëã8ŸESÒùv'´ni¼3Ù×Û'õëxÝ¡À¼)#üÇýòµóíÎÑ¿Œ¦Ö8?à>ì&«Hz ízÛ8P/GíR sN+1©Y€Òî  BèóùI3¢Ó‰˜Döc¥QÖÅÉ*²þ…zÿq¿ôR=oû€»c_‡ð@xý§ú¥ÌOšG>€àÇÁ¤”‘§ÅØO1élî·€ ‹ e¤˜Ç «éη;C @ìN,p.à9ìÉtUR¦¥  Ôþ•á>@xCç4ÅM˜jfZ^ ““‰ãæÍÀ^а5‚m3°W rÄ)°¾`ZÓ‹ÁÝ»`Z [ÛgÛ¤W$ˆJ€éÙ^˜gŠ~K+Äãjåê˜jL3Òš&gĺºÐ}¸›©eØQÖÿÿœk–Aß÷YmVËKêï%‚”áñðä½É&[“Åb‘bC-‹2j3u·/IïOÒþsÙ€®ˆÝšiùTW'Ž7Cè °_BóK`©ƒØ¼¶“S|Ò4t„èì½Ü½™0B„‰µ=™Ê‰ŠÌmÈ«õbwbÕ+ª€ÿ…ߺ}kçþNþŸ¼ð@¸º*UP>Z¥ŠØÏó]éÇÿ[·Cç~àÿ ¸ª¦myØ+ ü ­¯${ZT «HÇkŽñ¿Œ—èFhš6?i¾4œæ”Ô”r<å·_ê— €ŸJ<„ã÷r°Ï%ÆÈ§#½=½}'û’Ê…)¨Ê˰’ˆÇã*åIeI³vÁÕA™ÐõÈ(cжÌÏTçþÕ4Mg:ë>ä–ƒh½Ç’(öQ+©¡Ës2œÐ4-»hšV†9ßr*ÃÚ$,u–ðÄœèe Ž=LJR€LíËÇ* ÈÂÀÇyqJ¤WÓü=¾÷ý^Û‹6h~¥Y^Ôû)¶óÿÝ91òUi3~¦jÿ¹ØÔJh| \]páAœßQ°ïHœ²ýܺ““àïM¼ì}£÷ɹÏý):2<Ç­›¬în·ä¨ÏT®Bzµ$—]Àe§0Í –c¿8hùvš­Žÿ¸×uÐM×{¹q7еÎÈ”(µµÑ2¨ý#²¸tü®#>o²5ÉZKå‘ëùØßë§izùªåŒ…±ï²ËZ~¦òLè0Y’”*A%zY\2M2µŒ0³I’ÁÒ¬OËT®ÒÚˆ(á>³ð¹†)ÔþArBã™@‘¥QAÈ»[jÅ Ò‹÷hÂ6§ÅYçÅÜcŸÇ‡«†dÁH«ëÛmì(‹6‚ ’4„qZ$gÄ%þ'*€ô6€7Pj™Tzé~·T£Øk¬ÏãËtA¢SÜ,@‚ ÈB“sîÈ’t,D!m¤#.îNÀ9öâ9âÁÙ}Ñ™Vû¤µ AÊ @ôA™Å¨'‚, è@d逳HÍFtä&˜RÛ_Ì€$¥_ùRÙ©Ïã›ÏŽãV­Ze~Ú Ó@T>ºÀ˜™ÂšÊáÐûA¯¼?1‚h“ÈÈošC‰ç‚ùióÐÅ¡´…ò%¹{ ³ÂàÚãßT¯Çkà>á XoB1YѾ@ÎnP¢8[AuBA54¨ÓKU0¥¶¿È1i[N2 Šæ!°eëÅh4F®G p:б¯ƒeó³@âSñÞ÷Ñ@ʃH$’c!”Ø ÐôŸÐõ{`¿Xá ˆý¬8û+HK•õ%$ õ~A´È¢¬¶/S+>A³oP‘Sî •€…Á¶Ùý9*<¬­Œ™aj[£MR\8Ž£(ʹÏi©³ôŸêÏTÁuÐe©³˜L&v”utY6XL&ÓØµÄÖ­±ŸbÖV¦–±l°D¢‘&[S<gj¦–I=«ì18ôõšL&é,Çq‹8J’•’ÆÄnAü8_O(ú–:hÛV\ñAò`¾1Ü8Y’h1@€=ÊôýóÕ› ~4?i& rdx$D®G:÷wvìëÎÆãqÛf[x"ì|Ý™©BãÆÆðDØÂßÒÜÒØØþ6Üw²ÏuÐ%U°ï¶Ÿ=u6r=â9êéx«ã*{Ur>Hþ‡¤³Ê[_iíötG~ˆD®GÂ߆étqÇA²byÞb±X\ï¸QP/„{L5`\[·ÃÐe@[AEc} •‰$Ã:õkæ9âqV•a:KÒ4‡ià§x©Am[Ú@¥BË+-`}Á Ðòr Xž³ÄnÅ@x Œ7¾µ}k¢ò\›*íY¹G²Š¬®¾¥µ¥ys³u£ÕZoÍrKR<èjú³/>cg¸I®ã­ŽîCÝþþ´…ò%% I·\ûáÖ-¨{. S;svùlM¿œoÍóîAdI ¡ÈÁ°Îž¨"Ëy9 ÁCغ}ë÷cß3µL짘Åj‘ŠåxÇìæϺT*eGI+yRÏ* ÿvÜ}ÈmZg œd¹+)”‘¢ŒÐÕtçÛ{{ý'üi åKJÈ´§8:öÁÖvˆ\Oœî'Ç ‚,ºYiƒÁ K†2‹ðy|Y–ßeó$!ˆL]M@ÿ‡ýTH YEÖ=[H(îáoÃÆJ£(Š™Îιø!p·9Ë‹sŸÓÜ¿`aÊR ¶MCçAˆÞ(†Ð‚ ¡Û}Pï/ÍfÍ2‹èêîÊâ%ÈæH‚¬"»º»˜gKE9Ÿ{…L ] ~djÓ:Sïû½dÙ¾­Ý´Î$'U^(ˆBÛö6)\xï{§púY8ø8ÏÝဿÇ÷¾ßk{Ñ–©P¦¤€X ü'€» ÀóÐÿ!Ô?7ï›D)Œ@ô†br±.TŒ“ªš¦yžO*trËÙ9½Ç¼©ÕÔ+Ð4Íÿ’îx Í^™3y/Où§=+7HV‘cãcYnAJƒ8%Ú÷Ø'ïLBØþÃæ9æÉT(SÒc%Œ½=A€íEº8{–ü·ÙciAYêä;U+1ÊfUz§EƒÁ Ùßi®æœATèÕ4ûEòª³´…2%õP+çhü2–º,þê¬Ar㊊2`ñ³eíEwìÚ˜$$;Ê&•ä€ È<)õNÀ‚ È’FšÏFŠŠcTzé~·654Ùš ÉÖÔ°©!©d$DD¦ÔY€A´€a†b5Wœv¤ ˆ B˜ÙÔG+Y€Tzy” $‚  –Ad)šŽZ hØþѬ`ÅFœÉ™Ä9eà@Dk A)ÍÚBù V†fQAHé”G @&T↽Gæ„8-ÎF<Ì=öy|è7@Â(u €å ‚”RÇ É,X|B±{QÆ,þNÀ÷¢R_ PQ Øk¬ÏãË«;AdJí@íAí ÛÀ² x?ˆÊõ>e •UCž#T ¤t”:nѨQ ú@©í—q €ŠÍ0{‡’c A DnDÖ®]ËÌж½M>ÅŽ²-¯¶0Ï0Ì3Œë—ò*MyÂL!£g IDATaƒÁ`Ù`I*)¬kuŸŽ˜Nö“ǼÔq¿ýò/çS@A-ùçO¹€>=>Ï ¯iK·T˶I-s(ÇqƒÁñ†C~I­¤òAÊˆÈ C‡¤v”õ¾çí9Þù!òýØ÷í;Ú•õ5èˆÝŠ? Ö]îP9²£]8ä¾ù[§8 m—†KÝ#‚ ‚äD¶¹³2Û *6CWw×#P DþáD%ú4û “"Kï{^o·—y’²’´-#¢YÒLIH%\¤YÁ  ÿ¯Ç§öé7XöªzãDÑy ÓÕ5gÙÇqE9Þp0µŒµÞÊq\ž"#ˆF± „FA¸{ó®}›=õZ²ŠLûO½ÇÐÏÑúÕ´tÌÔ2Â\„ úciØq!wñÐ €!UHrT@V\¿u…'ÂÊÂx<Þürsäz¤ù忤UÑRŽÐÕôg_|þkx$4‹Åºu@<v”½ºúõŸ¿æïñP^¥AôìëíéånÏZæ<Ïœ8;p–13@V‘ÖÖÔ …BÚ*}üëë{¹¹9Yº :‹,ºŠPþ•QË$LçÐÁ2ðûü®ƒsµü hÛÒöö±kcùÊŒ Zƒ2RÌã ÐÕtçÛ¡?…€ p¾é$+I²’t¾éd¿d•WiжF›í%›Ò2ç&90?i.LŒL E#[/?Ùf·Ðtq[FD·hÖ€íK]Å(ÿʤ·g$'€ôAÏÁöÝöÉÉIö ›½*‚èz5MT*ž Ë’+hÓ}'ú/ ŽK/éjb?g±CÈ ¤­¼Ùyyxd‡½eîsŒ ‚” úHdJEÖ*rñ@ϱ÷» Ù¦aäÓ~L»–AÊ >Îsw8àïñ½ï÷Ú^´IåíÛÚûÏô ¢ L SÛK6åUÚô€i©ó·òw–¢¨=¯íÙ¹g§Ð/<Ò:î„ ¤Öìÿ6ÜñéðÕ]Û\Û&‘xôaaR#¢ipg=SØ›[žnýÇtuwe™AÌÍ-¯´H“ˆF£1t%ÄÔ2ßûÿàϵÑ*â”hßcg¦ÁÖ@¯ =Ç “%)§Mʈ)_&åzYâ#&“v”Ú~ *€ô6€Šž]D è%k €Ê‡€½Æú<¾¼ºCD=‚h²’~Ч( Ä)Ñh4ª”'‘ôÊ×H£úç@ª^»¤l€ù šÒ X‚#6ç–3V•ûè3ÀsijtÞ~™‘‘µk×23´mOä²d¬}b-Ã0Ê«4 íÂkÙ`I*)¬kuØXÌöQ:æ5ÌÍ’©AÅÂd2•„¼¼gbbÂü´Y¥<¤ÇKf5C©–¬È.‘Å-ó4åU :bxw’‡+sD‡þcfíi7AT‰Ì0tq(©$‰Ô?Wߺ¥UY_ƒ€Ø­Xð£yíò› F‚pÔÕ}¥5ÇrAJ‡ RRoA9½¹‚=»ö¸º…w›ó¿ïw¼æP//.óŸˆ\j6Ì{ÐtÄ{¢¹€%OJm_ŸŸÇg7B›Y@¦Ä¶I- (ÇqƒÁñ†C~I­¤òAôw‡ÿf¼}G»²PS ï¯ëW’ ¹§ôš¬"{ð°0‰XhÚ^˘V$?2•G®GÈ*r^]"’Ç{lýó륃Ç{L*Œ\dâKçïõÓ4½|ÕrÆÂØwÙ{êå™Èë‰T\Õ3?6›kB³qù~!#V†ö1Sjûúôtuw=Åw  QI„> Å~*P}AòÂò¼Åb±¸Þq bò,Zðã ùi3óôœ%@ô8_wR+(ß{ib{د؛ÿ¸y÷æÝ‰‰ W—+µYE¦ýWˆèsajáAš‰IAæOÚÔÞL-#O$ü((<ø_x9;ˆJ¹JGÈ–ï% Д6)zðnÞ~€ráôKÿs@ÿ1^Oíí4XöªzãDÑy 3UWàáÛ¶·1f†©eZ^nÉG^Ñ"t5ýÙŸ…ÿ Äb±îCÝI/ &Mÿƒ&=Ðw²¯·§—»Í%•{xI’¤VR]‡»‚§Y&$<Òþ+DtA–0%MDSÚe-‹´@‰nj)¬ž*àc¦ÿCê[žä¨€¬¸~ë O„•…mÛÛ꟫D#‘ë‘ ƒòA4e¤˜Ç «éη;C )φ®„Ä)1)4é[£Íö’ÍõN²ÝnªIˆaZmšœœ,L$AuJ§kêÕ PðLv.è~Ð @W1Ê¿2jY€¤À€é:X~ŸßupV™ãߌË%R1Ñ1ÁóÁÖ-­$‘¼F›è;Ñ7xip||\Y»•#v'V½¢:õ*2…É€ ÈR¦¤z§.ç³õª©—”ÂMW1Ê¿2éíÉ Y°ï¶ONN²WØ|eCróÜø{|ïû½¶mò)n’ÿKrø¯„6=`Zgêüm§ûÝ9÷»nAø_xßQŸ}—=õ*!i»Î³”'’Î/òAÅ%µ;?Õ<=~éjÉóX›”´E¢ÿ€D TäïO.è9Ö#+dYÿB½ÿ¸_zÉó|®­ ˆV§Dû;Ã0 ¶zí9æ‘O?šŸLÿ•ЬáC‡ö¾±—13P¦Óȧ#¹6„ š„^M³_¤÷q¹Þv¹ÞN“34æ°ÔY”õÉ*’ÿeŽqîØåÈšæ/Ù2<[Ò–‡®„ºu«kA–2=Òö¿À,©ífÖ¼ÈË^f *Ai}kB.S@¦«TV4%PõÐ4­œÝ“©•ÔÐå¡Ü…D]’» 0@7ëþ“ý‹-‚ z£üž‹g·èÉjš¿ÏDœÉ™ð²H‹8-Êïwúƒœ=‚¤¢)‚ HIɪA.Øj–ò~6*„×ÉúŸEÊZ0D!-Iõí»6&Ý;Ê&•ä€ H*åâHZ„ RœE.¡ eÝH¹#½}åç6™KQ>úß ûÝnhØÔÐdk€&[S憤’ÂeE%zA…>ñÁ«yæùîëj€´<Êù‰Œ K—RgBÑ(ÒD¬þV³, ‹5bZsã¨1WÔbI®«}YxJí@Ñå¤8"é(Wól®Øó¿ å>úŒs€ŠÓâìÝÎ=öy|åú@ŦÔ1‚ ÚAk1e½¨]S#¹ÔÐÿ>R €Êƒ½Æú<¾¼ºC]¹ùMóo"a›Ÿ6]€ðß¾£¾è(Ô¿Pï=ê¥WÓòUè@\ÿS(…Œ˜î¢“KKº­ôà9âÁo#‚äNdIûDaçîÍ/7G~ˆ|þžZIíÝ·WYcA ¤D¹#u<³¾´5º"úLô0{‡’õƒ H>LNNŠS¢ã5TIí;Ú%W€ zA´ÈÒÖ•Uæ…ËwRQ浕1úôø<>ƒìøœ s±m*~Pžçm6Þc a5!H±°È^aéjš©eòîAJ‰8%Ú÷؆i°5Ð+hÏ1y6p6ôyˆy†YoYÏÝæúNö)¯B‚ K®Y_ ÝdZ¢(LD¢‚fÖ¡ës'`ŸÇ—~£_¹$«`F>iy¥%øqÐºÑ ”‘§ÅØO1Ó:Sðã Ê¥ÆJ£ÒB iÚZoµï¶û{ýÙzE…†^M³_°©åÖzëÈG2]…;#‚ Gºm­tÏ|Ý;))pÄi‘œ™×çNÀ]Ý]Þ£ª.…l£Ñº:pèA 5hôýwŸÕf¥«éæÍÍ*×’Udû¶vÓ:I‘ëp¼æ] ٷٳôŠ eBY{"j‹úAÊ ƒÁ€Óê9òèÑ#)¯kXE%*X êÕ ²¢)AV@ÿÉþ¤Ç‡cC:–2ýÓ4Íó¼T¢< ”²×XçëNiÐD”»€©³.¶‚Ì¢q³|v"væ@#«Y$uvqe@Êe €>=â´(›wi®þY- hqaj¢‚¸ªšxAÊ‹²öHh\á@D;$ëÙóß\hI.h ˜LKåü¸ž=cׯ¤ûbGÙ¤u€r.þH«€DO”ÚP^þYA$#è£Ð úß ûÝnhØÔÐdk€&[S憤’ÂeE%O©=¨ý#¢Y4²þ§¼ÐšP.K§Šû1Sî O~-¤¤èÌðÔó "ˆÊ¿?þõëA¤0f£Z[’r¡øå³ KWû ²ðèÌ@!<=|$ÿ%€xêù†…”AÍR.³ÅÅd Þò@ÿ1rPqZœõwÌ=N¿Q‚,1"7"¿iþ¼ŸùióÐÅ!àîp®C®‰ï&ˆJ±ËáüíœM¬µépíwõ¾ß{•½jk´åu¡˜’AñÑÃG†eô ²´’íÌ?Ä9cÃóSºÊg¢}¾”ìæÔöõ™HŠPù¨±×XŸÇ—Ww¢c"‘äPuû»µÞ ¢°wßÞêËÕm[Úä³Zô<„À¹€ùisàL _€€ô.P´I N "¥ÆP‚™2 ±¨L=™NyŽxðˉ ÃÝáný|«óíN¨²’t¾éüxPY!w@a0Ù¼„ 8{úìà¥Á|³xIïQƒ÷)’ËHÃ2ÄS–ôk/ œ Æã|æÒ&:Ê¥fïûý-¯¶µlÏuÏÁ$áå;zÊÒвÝÞÒjߺ{oìçÄ›8>>¶µÝÞ²ÝÞÔÜÒ±_í‰-‹!Šbÿ™9›¢$w±Ý޲ݮÞZa(;:ph¶ý–íö[‹ú ~<ÜÒjoÙnßÚn½–H›$óèµ±ø¿óHÆÜÅ›ïMª¢M©D ,!QºÓ™ŸTýÇÌÚ3’·AU,Ï[,‹ë— nILôFTùRƒ€À™@ûŽvk½µ¦¦&p.¶YE’Udj¹äè<ð/÷!A*ùׯÿ’ã2õÈŽ² ±¡XމSâàåá‘?\,P‡“;2V#ƒ#ÃÁö-­ÝÇ{¦¡ãîžcþ‘‹Á«q¼–ÑÆPŠ!ŠÂàÇÃj]\ Ž\ ö(þ¯Œ²£ÈÏ1qJ€èõ(U9óÈpGƒ—†C£ìÐG‘‹Á¾~OïÄÄ„tJ)sãF«±’ºpºožâi mJ• Aì»ídI­¤Ü‡Óë™êär­¯ÿYBê,2?ôàóø|ß#P˜>s¿6ÕyŽã†‘'9Žcžaø_xžçÛZÛØQ6_QD³ÐÕôg_|Æ<Îp“\Ç[݇ºý'ü¦Õ¦šššÞžÞ®î.Qû?è—ô'­ÅÄb±Ñ¯F¥ý¹í;ìg\û]©Õ„¤ÛL2xHR1ýO¦±æ\"ŠÜ$oª1Åã<ô~Ð?>>ÆÇEÿw݆:ˆFcÝ· ½‚ò÷T<η¼ºµu[ëøø?Åû»Ýì_ÆÆ¿à§xÿw]]Äîp݇}üOdÏÑ.SIÙQÓ«[›_nŽ^¶ni}âãTe¤ü‡»ªWÓm»â”(Mÿ}Ø»¯#©Bjû”јéŽ$¬õuýgú@œEQ¤VPPWk–*¤Þ¦R ˜†x<.\ ¦íB&—ñé?¾"* ’ Ïžè1® RH½—¶—›‡?µok¼<ܺ¥µ÷}µ; œ ž=å'* ¨®¦¿uÎûêê2 üõÜm%SßÁT™eñR$S߸¬##U°½Üž˽ÌGªxœwëýƒ  «é³'ý¢(¦LþLîÙÕÚürsÁï£ú×--®Nw›»÷~<·n²šjLŽ=Žëär­íÇhß@+E 耮î®YíŠÑBQjÿˆÎ Œó8t5ÝùvgèO!©<0ˆÝŽ­~}[k[݆:£BSíyg555Öz+8v9¢7¢cãylô+y¼G î£ïQR>V¹„½6f­·HÇñ)ÑòlÝ'ƒA÷ÛÎÞú¥B×»nçëΑá`݆ºÞ§æÖ<ë~Û¹÷w.ë Òq§¤’@÷¡î®C#ƒÎ×÷øŽ÷&u$N‰¶ê><Û¾¥µïDÏÈppäbб«Ý}¼‚}F£QšŸ&*ˆÔ iÛO{G2¡+¬éq3Ñú›æ–文ܡ+³ÁÔÛTŠ¡ì&«Hz ízÛ•Öï—©N.ת ]]V³‚!Ú@ÿûx=>µ¯ÁÀ²W!ÿ½À’<¢cL5¦àG‰•$sºgçÌ€jËðç“÷&©•³šDàL@²”Hóúß]M*—<îó=*Ó2::Þº%¡ñÑ¸Ñ æººXO/ˆ¢xëÖ-i5EóËÍ{÷u$׬­ƒ ¨¯—ŽÍ±INºjâïQ×Ì‚u2¥#¨€F)¾¹¢Ñhÿ‡¼(À4ħâÉò¥«¶ý´w$iºñx\œG.^ =‡»ö´·;ÖÿaÿÄߣ]o;3Ýf.ƒ&-§Iª >>AÔ=iîØï²n¨¯{ÖRWgÎ$ÀœA0©êÆÞú›7Ûf~ôÒß‘ºüieV’:©2+ÅK{6í;«>2Òg#ý‘¯T¢(Fÿ6!¯n2V&œ$é?rògRAˆ,Gb±˜8%ÊÏ¥ºº:÷»Éú@¦:¹\»,œ6HA”ÂÎTÆè3 ’é›&—T¤»LA<gj™Ä‹ 3=¢ø8/N‰ôjš¿Ç÷¾ßk{1ñ[.L "ˆT%þ.ÜÿaÿÙSg•WiÊ0ôÙÐä½ÉÃ?R3 †/»:]}ÿÝ—´â_Ò/Ê”H…ðßÃ=Ǻ—Ϫ L @U&¾òD%'›Á™êär-h~Ý?2O•,Û©–!*Ai‰kÙgRþ•QË$™ÙšF£1r="ý»Ê&Ï"ˆn§Dû;Ã0 ¶zí9æ‘ÊãñxKs Ã0®ƒ.ï¯å¹9‹C4•hàô@û¶v¦–¡gp¾î4çrl!á˜Yóã=FºçfJbbbÂò´Y¥A‚ jjj¤2¡ÏCÖg“—ÖdºÊü¤yøÓÄ*¬èõh¦ŽÄiQœéF¾4œc…Ôö³ÞQç›Î±ï±[1QåXØèO1z•Ëm)Š¢zy0 ““œÙlnßÖÚõ[gø»pZÒvÔ¸Ñúcøk)B"í€c—½ûX¯ô29Éõ~ÐïØ•kV¥4#œ"óñRÎf}gU'Ó‘¯TAÔ=[7p>a0ħxÈá#——¨©ïc¾m•$ðS Vœ“–)ªÔÉåZx4—|%\ÐhɃRŒ•æÇ_œÉû¼ì=Ê¿2éí¥ ›A–ôjšý"Md ½šûsÆeôšòŒ|>’\´ 8ŽKW7=‰€™e?r. L°_¥.{HÂÄÛíqû?è§”ÿ¸'GIüÇ=Àù (Š–§ÍÕ+é´Ñùæ¾–í;étýÆúÜ+$µ/ϼf¼£ pì²÷žè÷÷öŸ p“AV’²O@ý6 ‚hþ¿mM¯¶a«·*»ˆË¦զ\‰¢è:ØÍ‹¤û÷î´äòîH¤½£ö­BÛnTYî·;ëÒEg"i„=‡ÜI2+ÅK½£¬ïl&Œ•ÄØ7ãþú¥°ÚùH5S¿wèrT¦jºï¤?«`ñ)¾cw.i‘Ò¾ùb2™ˆJ"ú÷¨u£&&&Ì)V_¦:¹\›ƒÁPv€–(ò {Ý”¡XñÓeâO *X $ÖÉÐõÞÎ- 4Ù_,TlÉVÛl”m²5eª) Æ ù™cꬩkN’]a¼ÓÝóë [Y9t…ut+\Í›mrƒÒU7oÞ,‘ð*¤õØmì(»ˆ;çHê›ò”¥A¥;ƒÁðcxÎ^`-­ö¡R¢˜’¢§Žôt/ó¡â¥ÍG´èRåKÒ“-ëÀ¹Ïý):2<"eòqw»S3ùdª“˵I$ô éE±žN’ÊX”Ö (îÖQE’mÖИ`KmÄüð¸ºéz/7îºÖ©ß,@ꇙšò,<#ÃÁ…Q•ôÔ‘žîe>hS5ï‰ÁÀ²W³¶8ðóP•ÔØ¸¦Ó“!È|hßÖÞ¦_aJœ Ø^JdãnÝÒÚ¢_n’ œ ´okW^¥A€„ ÁóAÓãi a†ÂZÎ1%­BRz)¸ÔÉ qZ$Ùtê0¤*IN€ PgìÚUI1f¦}W;:ãþ½Û´ÆÔ`mXo]OV’=Çz¤ò®ßwÑÕôúç×·4·´niU¦MzÈ#I’\¾|y4ýäâ'…õ[DL«M555½=½‚(ðq¾ÿƒþ¤8 ô H¹P¹aéYW”ög›‹>Ÿ½@ëÐìÉ¢‚\ýzˆPþ•QË$LgiÒòj‹ãu‡p_þãþЕPa]/è@¤¤,ÊDg¹Ï®ê{G0ýÇx&Ì qZœõwÌ=öy|åþ1Eùã}Ïëíö2O2@V’–g©*-O[,O["7"i¯ÒZ Àýü>¿½=‘½×ºÑjÝh- ß…=‚èœÒ©ÑR¾yw×òdác¦•Ú~ *€ô6€Šž]D è%k €Ê˜²×XŸÇ—Ww¢?ø{ü­ŸoEoD]].qJ´¾hí9ÚCV’Y/Ô”€ã¸èhë–Ö¬5É*¾ÿóÕ¤*.¹{2 cxÖ[àÑÿ°¬˜‚•¨ÙÅ%r=²þùõ‚€ ‘B(ßùà VÓeËYG×úðñàì>‚d%;Ê^ ]ýúÏ_ó÷ø‡är¡¦bø8t5µ¦ð@(Åž™â%Qpíw1Ï0‹Åÿ~òbª¼´ÿð @’³ÿв3axl‰MëÀ{¬mÊÄ~ˆŒg‹³áÚï2 I;·¤…©ePûG 5Š%żVåÒ½()Sõ0kÏH"AÒA8ßt’•$YI:ßt²_f×¥@cÊHwoÑöêÎ/á{ÏÇMrßÿõû‘ÐÈðåá$W6™²þ•~AHü£³Û;YhúOh~%ÑìÐE0¯›o›Jø)˜ø.ý©yÅl<œ=œ ˜Ÿ6Îæ/-‚è•XÔ^¾’¥QAÈ3!úôø<>ƒ¼8,ÝÆl¶Mji@9Ž3 L-ÃÔ2Œ™ù|$_Ù¤, WÓD¥ÂøÏyɇ¦<4M›Ÿ4_ÎZ“$I’̾À)_,O[Ú¶´Õ¬«I*¾<ìü­“$Hºšv¼æ¼4¨<+Ž­Ñ–é_î2ð¿@Û «€¢ÀùVBKº–ºDÇ`XÒ£?p¬!v â÷Àùzâ}·ÔAÛ¶Ù‡>Ó: I°l€H4Q(<Ç ( «À¾ä’´å VH¸’˜ÙX`Ýh œN(ñÇÙmE‘$iÛlãnsž †À齆¦VQRÍॠTÀÙÓg/ ò<Ÿ¸ü6GQÔÐå„­eÛl³ï¶Ë-HÃÒªßd2‘$I­¤o8rdAT@?Iîdü+±)%N‹äÌN¸úôtuw=Ų³ü7g6‘ë‘ÈõHß©¾Ž·:ò• AÊ…ömíýgúQ¦„À©€í¥Y¥S˜¤©aZ¦ç,ŸÐ”zNô¸º\ÁÁ ¤á]K«Ø ‚°`ë@¸;œ8%škÍÒ˺ں訲‚O¿ô&ø&PÆ_º’™RD!M»è6Àëñ© ŸÁÀ²¹F S‚8•qp¤ÜqÿÞmZcj°6¬·®'+Éžc=ò©§žxjë«[¥ƒ§žxJy•¦<ÐòrËÈGgär’¬";öw4on.¬ëbÁ‹<PDbºš ˆ¤'‰rˆRmYûWQär «€¬‚¶ísûúF¿ÿq I VB×aœ V‚ùi`¿î6ˆÓà|BW¤ÆKÿÃcP½\ûaÕ*°l€ÈõÙ6ýŠXÎ7aüž‡áKà?‘Á}†/©•gÕ˜ š¦™Z(Šê:ÔÅ~5;2~Ÿ_öáÄb±Ñ¯Fí;ì`ßa83 Wky¥Åñš£é?›º=ÝŸ\ü$ÙçSPÑh”çy)ü@MV€XâRâ½À Ÿ›ÏáÂEYË^Ö,âŠ)ýÇRÇ7É PêÄãqiýÏÎÝ;›_YdMAJHx}Þp8ù!Òw²O™èæ\”iͶF;ÊJa¾áoÃmÛÚ ëºXHª¿d€(ŠsV[Í5–`®  Ôþ•F”p„ <€¡‹súâ&L53-¯†ÉÉÄqóf`¯@è ØÁ¶Ø+¹âX_0­ƒÀiˆÅàî]0­†­í³mÒ+D%Àôl/Ì3 E¿¥âqµòŒ#£³1tyÈZo¥(Ь"›š›”V“Òfœ ÔÔÔHê»c—#z#:6>&ŸuþÖ½m~¹Y²%”Ð4ýÙ?º<´jÕ*ËK.Ä¢íVßéíKGéFlQ>TJm¿ì=Ê¿2jY€¤À€é,'–E#<Ï›V›œûœùЇ :Fk "ÅWÈË~&®O˜Ÿ4++¤”¤Œ&iÿ¹Qt5@ìÖLËw º:qܸBW€ýš_KÄîÀà%°½˜ïAÓÐy¢7²÷r÷fÂ$Ööd*'2̳¨Älð¿ð[·oíÜßÉÿ“WC\µ!p.pëÎ-j%E­¤,V ̆?{»½}G;{…e¯¤Ñï[^na¯°Â¯Bë+­mÛÙPDù’çÓ²¸OW<«3!«‘¥±Å2)•Ú~Ù{”eÒÛ3’@ôl%ö]öáO³Ç"ÈÒAƒ€Å%m¼Dë–Öþý‚(p“\à\ }[»ò’´˜ªýçbDQ+¡ñ%pu ÿ øŽ‚}Gâ”í?àÖ-þl›/{߇ÆÍ±øOw€ç¡ÿC¨Nµ Z·AGg"¨€ã`äSÕr#$ÚO"S̆(Š0 ”‘‚eÀÝæÜ‡ÓO }64yoòÇð‘"Ò¿¾þ¾Á¥¯îwÝ¢(ÿ7xöôÙ¶ö6nn|Çq#ŸŽ‚Ë€¨$T~û¤œÈá™Yô窬—Ý;GJ7b‹…þ÷HdJE~/³y”„>%MÝ!È=I¤—èú}]M¯~}KsKë–Ö¤UIÅ5¢†Âò‡µO@}=øgö9$« þ90­N¤ µmq lÆJÿ,ÏIÂÚµ ¦¬,JåBŒ•°ö I°Zaü[µrz ´ï‚µ UÉídŠÙ ×Ð=½=mímÒúŸ¶-é§çN´okgjzçëN£Ñ8p~€½Âö~Ð;tq–AÛ¶¶Ö-­òþÐ ¦ÁwÌ·üß—“$9x~08Ìex "m%AQ”ÊãBûn;YER+)¥=™©<e÷DÊD)-šö_âÀ‰™Nò±l‚-¢½¤ŒÐçNÀ]Ý]Þ£ª.…Üb¦¡zuµœ¢A@@ I1$AúOøý¼?€DZ#*Ó_K]š >e!µ†.§—ml|öعœû—¤Óø“úR¾$« ÿôŸJ¹Ó åÁÒ‹3ÉOSË]û]®ý®Yßr€¥Î¢üH¤Iͼ ä™~å^oò£[n^C+£òÅXit¼æ Hbëö­™ê¸:]ÜmîþÝûñxܺÉjª19ö8TÊ3!í§[ü{X<æ¿7ðR‹ýÕLj)}ž E¸L=™®ÊîÕUõÐ4½t>ÓR¹{ ¶tO^;#’„eƒÅ²Áž«Ô8?0òÇiÃi×Û®À¹€¤èg*_ ÈÆÌ|4Úò6‡ò^9bP¯áÒU @ZÄiQîôùÄ ’D©=KÜ=‹-)‚”%±XLœëžMl†WWWý{T¥|é  oÍJÚšIí”%ù¯¼Ó¤AP'©æ¢˜2@Ï€±kcÒ}±£lRI^1‚$€ùƒ))”TåÌ^•D<W)Ob¡gm¥<%rª’’÷6ß`€E×e˜Ô¤@*£÷(¥‚F†Kÿût¿Û ›šlMÐdkjØÔTR¸¬¢/ØQ¶åÕæ†y†q½“X~íîrÛl6†a,KÇþió&ôÌŸ´º¾­Ñ†I 9C®õ+Ià§föâ˜F£Jyæ2ù5È£ÈTsq%_Dò½}M —®öHK.Ÿií¼²ˆ°£¬÷=oÏñžÈ‘ïǾoß‘HUi4ûN÷E"‘«ìU¡c_‡òªRgZ  … y!Ìc}“ÉDTòòž‰‰ óÓf•r$= ’l§ìÈÝjZ\9“Ð ‚ 9â}Ïëíö2O2@V’–g-R¹ë€‹yœÊHíycÏøwãÊ«Py?hD!È<AZЛÉ0سkû¨[x p·9ÿû~Çkõò,hL™C|Ñ €œTœgïvî±ÏãÓše† ¿õó­è¨«Ë%N‰Ö­=G{$ÿ¸v”­{ºNY‚1ó(™'=ö˜ò@úM\¬~½dø{ý{ÿkïòUË ‚p¾é”Sýd*Gâ°°¹£ÿ}¤ýž½Æú<¾Lgd‰ …¾±£ìÕÐUØ»oïCúNö)ë°£ìÀ™ /( QyU26>ÖÿAÿÄß'Ä)Q¹!@¦r 4¢dž¤ý•gjÙ@’dð£4{½e*Ï„vÒ8"È| *A)ŽFŸ1ž#œÝG¬Î7d%IV’Î7ì—¬²{…íø]G_Ÿåi‹²—¯(!ªˆÖm­~_ò†_™Ê%ЈBr5ŠBX«Igñ Ò”òÃ&N‹äL|}ÆÌÚ3’ AtЫi¢RñÝ_6çìÐ塎Ύ³ýgSwlEåU‰åiKÛ–¶šu59–K … ˆþAÛIK„ôC/êÕàóø òê+i%Ö\l›²§í?ÕÏÔ2L-Ø÷a 8FôIû¶öþ3ý‚(SBàTÀöRBלt¿Û}aà‚u£5õ*T^çQ‚¤g-‘’¡ÿ}ºº»ÂîLg¨ÓªèÒÐ×þ:r=ù!BWÓùЇ eû÷nÓSƒµa½u=YIöë‘Ê}ïúÄ)qçîÌ Ê«Py?hD!H¹°@18YŽ”¥¶¯Ó,@ŸÚÉ``Ù« º˜÷=ïÕ/®R° œûœùЇ åAx}^¯/ÙO ZU‚¬ó()=z„qÀˆÐÿ>†T{=É P*„ø½8cfÔ*!È•×ùƒAd!QîPö1Ê¿2jY€¤À€éB„DD•×$„iAzŠ Ó‚0-d-4¢)/Ð’šÌP¤«å_™ôöŒäÞUYEW#ÑH¾"!È•×$žzâ©­¯n•žz⩬å€F‚”K}ýž‚JŸjSË(µý²÷¤%‘(ù-Ïæppwìë¡ÿT¾â!ˆŽ)µòZv?·7ç’µЈBòA»û”Û£Y\ôÐÕÝ•åëªêç[ζ-më­ë™Z†y†áïñùЇ :¦ÔÊ«vn‹z)Kà‰]ŤEÅžIC €ó-gäz$r=‰FpQ‚€ùƒAâ°~2Š‚®bÒ"N‹²‘þ ›AÐ0Ѐ ˆnY0| üXýÇHw8vmŒe€eÇ®)K0 ‚Ȱ£lË«-Ì3 ó ãzÇ%/­›¬Ò`m­máïÂÊKÐ0Ѐ åÂÂ=‘4™:¦pP;×Jm?1NTém•ý¶ŠH½¨Ôï~·65H/›föüJ-A%;Êzßóöìcžd„)!úsT*·ÕÛš77SF ¦¡ÿLÿÞ7ö†Ã³6zæOîFÚ²¸àF`ˆ>Ð À£Ü˜ŸÈ¢¼ïy½Ý^æIÈJÒò¬E*§WÓ”‘JTšz5­¼JS€ðDØ`0Nè54YE:ö8àál¹t<ûR3 A²Ag®‰…DKƒ¦ÿAr¿ÇßúùVôFÔºÉj±X:öwS³›UE~Ž0Ï0kŸX;tyèÂÀå…ô°_±7ÿqóîÍ»®.Waý.$€ ¢g´7ÑLTÂ̼>=Þ£^éŸû°;Ó±¦ædQˆÇãÀ޲WCW¿þó×ü=þÀ¡òYæq&òCäÇ~4Õ˜|=>å…šòHxxI’¤VR]‡»‚ ë·0ÆÆÇìívæfíÚµÊrw—Ûf³1 #W||N6á’Qá 0€$$¬‚–W@ùV¸öƒÁìhºúU@Vm3D¢ÉmfºŠ1Ï–€$^sd $Á±æ”(+dª¯.[xl‰ú¦uà=VÀh!HF 3,¶ ˆÞYÊÄi‘œÉ‚£ç•IDöëóø2E%Aà|ÓIV’ÒÁ^ÇÞ¤:d%éxݱױ×ÿ¿\¨A€©&Ñ—iµirr²°~ ƒ¨"Z·µÚwØ;~ס,7}§û˜Ç>ÎwêîØ×œµL @ø`ðTž*Y1Q#Ũ‰Ê¤DµIªÅÜT7f³RáIõ!‘Š“HÁI®³]œT Nª“êhuSœHML¥¨´YÌ£M¡Wͩڳºmͪéšj[ᨩÔD« ë‰ïÇ ƒm°1ä¼d¡™3çÇÇc3>ç|~¡þ8P‹à°êÚü­¿‚iô| Ã&Œ|ßçœQföŸ‚Ã(5Í9MZ_C6YFÅïÑô&üŸy#ücª7‡ÁHåYÄÖŒ5€.WG°kÖ ùíffâÏ`,ÿ4¯ËW™ÿ%›xŘ97 5á;±±Â?‡ ×bfy#MÆöÝ#÷#‹fALÏ™ª÷VoÚ¼)®ÜyÂ)<#àô\ݱº¡¯‡æœ)ŽCã0ü·Øi÷5 —?DÏ5HÉ2ÇQ 7§P£UÝQx.ÅŽ=—Pwt‰òj'[ø"÷á8ûꚌ¨Þ—ÆÑ cU³ö}f×399Yå~Á`dµûj=—Xå)YžŠÅµñ^õž~ëtWg—y§9±Iæóô~‚ñûø{¡oc¯z>†<_Ó´ÆçÑþþ#´ï¢ÿÓå’T µlá0ÚÞƒx$)‰ëƒÁX1VÛcör…^ΫI*76Àóä‰Gk•y2>®ÿÒë+²éó1ôW˜^!(*Bt½JI*ƒÁÈY¶ RÏ0K½Ú IDATöW}õ_…ä몠ÆBêðHò0LÇèèhŠ… iÍ`2&ùÝI²CŸ7<'®~õ^Tï}äVê¡“Ê !ä|õËÙH›ñ32Áš1Jd<æ¬}€X D”Ÿ‘…4 Cƒ¬Ò¬RVÀ€Á`,ŠU·%Á`$eíû4nZàß5eƒ‘Ó,Ìû0 ãqfMù$Ec=CSÀó¼”4C&ƒÁÀ4ËÓ0 #“¬ý<Ñ©¨2H~À4 Æ þAÕËUÂ6AØ&8ßpι6Ëï-EEEqM²JæääJ©ÚSµ*vÍ™€ÁX-<[)‘µ)·²V°,cíûÐwø2àôðú_Ô%Ì€Á øýîwÝ­çZC߆¾ |SûÊœDJmÛøuIB»g¡@þU–eyì§1=§¯Þ_½¸q3 Ó0«…ÇÁ(‘ñ8°ö}N¿u@ù‹å– –ŠòËãJ/+ƒ±†p¿ëvŸv Ï H>1=?›­6ücx o ±¡1±UViÔp×ø‡Æá¿ /®y&aƒ‘¶ŸÍHº\KT³F5Ó©±4‘ŒUt_ºóã‘ïGÌ/šM&S}C½<)+Wëê]o»tùIv²P{G’ÔþA»ñ9c\9) Êkq=/;i]DQ³(<\n¡—Lp99P³²y?\R¢çI') „<òǺ¼·Èñš£í\ÛòôÅ`0ÖÚ?j™JQŠ’øµ©`0©‰Døý7nÞúâ–t_:qê½ä½ä5ÄÐíPûûíÂ6!hÜq\`2¦:}OŠ4) ê›Ñëtv£Qg4Ö\ëQ—ó\¢(ZvY8Ž#„Xv[Ä»"L}b§*ÊÍåêN´1ñ¼­D0¬‹Ÿh¨Ü]ÙÛ×KC·CÙcl¶Váô\¿¯_–åÑÑÑèT4©ë¿³Ñ)ÞŒ=CÝW»½^írcm³öó4¿ÝÌv÷ŒT¨ÝWë¹ä‘£²<){/x-¿³¨ÜSyë‹[ýýýý—=—ôôïÚ¹Ki•µ>ó!«XÞžµ ý¶ E[Šzûz»:ç&­” ã<$ cc ¹8rÄ»¨wÀÛ YÆØ(쇵šËð\DÙöÙ’vD$Œý„cE8ßÐKAÅÈýHñ³ÅcÕ®óßðÏŒr "EÆ~{0ö@E¯öVàf>Ü™;$I#¹äÈñ#©Ü¸NÔî"ä:R\R¬h„™¥›¶smB‰êúÿzãà&Öé¼Úé:ã"„ßÈ;_wz?òj—3k›Ç"@ì('‡™£1¸Þt6ÊÍ奿R’OZ϶ :Âòô¥_¯ÀòD7;Zu€•BxF}úû·7l2´´¶¨/­ˆ€ç!”Ç¡éüŸr\ŒŒ@’@ `.KÞ–<R€'žÄÀ ôúb…’ß5´½sp„ïšæX3H @RóYi×ñã÷ÇH’仿k{¯ÎÅ]']¾k¾$õy^™6jòîOåžÄ¡vy$×}¾ž:Õ02ÏÀ§eÛ㿸áp8:5> `4G¾Ñ(g¤ÄêP”)GÛlfíçhinÉ¡SÿéiLO'~S-/j…µì²t_éVNå ™QUBc w‹; †¾ uœï Îj„g…ÑÑѸ¬ҘŒ¦ééé•rH’OìGí×Ô…+¢è탹,f®SQ‰è$ð<>ù zû°aL;àO²‘ òÈý¸|x/Å Åq¶ÅUV(sà¤c)Pã¨èä¼?=Äq±p]!flý…m]TY«’Nµ{ûzÍefj&TQY¡Ýù²™ŒèõúLŽÈ ô_ïoomï8ßWNcšqù1{-]¾Ž~mæ+#g.铟±<¬Þ•IYû>M§›¦¡Zç%[h`?lW+}}¾²ß–ñ|’tH Æã Ó,†¹ È3¯î¡f? ýy7U둪—à¿ùWX÷ z¿V'†Í躂–VHð…06 ybæ%/0…çyý:ýðwZÞ·=÷P-¾06:6»%Ÿ`Ê%Ý“jö×464J¿Hò„|sà&-§žîÒd, Pä~üT/îç̃ÖMŒÜ1n?ËXF’~½}½5µ5þÓŸC9Ñí å£NFé m¾ò8XÜpÆÚcíû¸›[´´<99~ÿMž­û¬C_Q2Þ¼öÃöGÁXÃd• §dú•§dyJ€)t_í¦†.â¸Øþ~»uUÝ$ó€h˜§ò Þ…ëL¬\Ѳ äA—]®f/€iŒÏ£ý}à8X÷¡¾1¶ ]iŒ¥ÆºÇKÍž@h$Dc¼¸ßvà8κÏZßX/IQû¯Ç‡¨ŠF£˜§çñ®èš Ó)<#èõzÏE0§\ê"”¾<J}ùáì¬J#0pc zOÌ5kó0¬j?‹î+Ýè÷õWí©J¬o0tù:żgxx¸ø¹bòldµ= YÎÚ÷ÈIœ@Ä)4á!µûj©@¼+ÿmغתՀÁxÌ`€8¶nÙZór =غe+-øt üÅršÀh46½Ý¤n’y ¿­í¨®ÙäTï¹0…–³xê7 =WÑÝ£Õ ¥±ž O@—ú|m!0›1ô•æX*pt_íV—'c·5ûk8=ú6¤|…º¼]ú|}Ñ–"BˆÙlúj(áÝñ­í­ÕµÕÔþ§zïLL˜Kg¥ò0 Æ2ô)ý<ºW5kÄ@ƒ¦ÓM ì .¤`?lþÛp6š2+ÍjÑ„n‡²Ö~oEò0 ÆRYðùü¨pW)k$€ë™)høüôô´ëT&Þ>ƒ±²øýU/W Ûa›@s¬†¾ 3Tï¯V×Ï* @bÄ•XÉ\c€lƒiŒÕBÖé$YN+Æ¢X#y4ˆNE•×ä)hŒÇÿ ßý®»õ\kèÛÐ7oj_©U.…fèýS¯ºÉjÑd3LÀ`¬Væ‰Ä2[-ŽUwÇ2(°.W§ì‰­â(@ÐõLàË}_þA\I*ã1Áý®Û}Ú-<+ ùÄô||>DVK àp°ÔT:ý¿Ù˜'˜i c9Éš`;‹!#‹ÌèT”Ì쀯M Àé·N(±œ«°T”¿XW²ŒÃ1«é¾tçÇ;#ߘ_4›L¦ú†zyrÖfÆô‚Éd29ßpÊÑ9†4L°tÒªXu‰¨‚ÃÈÉ"°íÍû¡W³Å8O:IAJ|$Éô­s¼æh;×–¹ñ ÆãŠ.WG·ÃÖ¬Àtj,㈠Æ*%‰ðúoܼõÅ-é¾tâÔ |!ÿÉgŸÿ'Ø?ЇOŸ:­n•U>òT,‡) tÁŸ1C[­MØ&%¹<Ëï-‰—2¦eÙvÈF ·ž›7AÊ¢ ³vB@ @ `ÙÐÈ2tº | ÑúétœB Çq&£ÉyÒ)Ý“´{îIí­í·¾¸µðaÓŽ…µa8l¹ÒÍuç$»ÃÜz.Û¯÷Î{ÈY7w®ÍÖ×+ÍÈæzÓÕÒÚ"Od©³ Yè°â0ó¤Å±Òwlíû0ŒÑét¯:H>!ùÄñªÃÿ_~œžžð…|ãëÿ9 n•…ù,OÄ^·¾¸µ¸q‡®@gÝgmkI¾‰Ûv±_Ç'–gÌÀÙèïŠÆ„‚¡î«ÝÞÎ%í¬'"ÿ y~Á€µ ×_öÚmms‡å Y’¤®+]Ò}IØ&hßq\`2¦:}OŠ4) =œbe½Ng7/ïI’3Þ?è7 5+ˆé9SõÞêM›7%^ ÿèhlhLr)S€Î«®3.R@ø¼óu§÷£$ Q„e8„À²âÝX¹ç n=ìÇ´F!Ž£þn¶Dž€½RÛ!({ñó¥àëóUî®L:ŠP"x;½æf×[®™Qd{ã8R@l‡ltË¿ô…R„ÄL€DQ´ì²pG±ì¶ˆwE$˜ú(‘£ÊÍåêN´1ñ¼­D0¬ã/õöõZ÷Z´í¶ë9!¿5Þ™ýï¨Ü]ÙÛó³Ý)… Æ£¡½TËÚ…\¦SÏöWA&`jЯ±þöéoinI—d ÆZ§v_­ç’ǸÈ)x/x-¿³"Rt2Ê?ÍK÷¥ö÷Û-ÿjQ7ÉB @vRßPïzÛ5g‰5Cº©)áp8:5>o¤§F£Q™:ÇÑqB $ jqä8ú¯C¼‹znúaÙybÎä>yž‹(Û>[rÀ<ÄØOPe…ó xÎÏ;–‚(Š‘û‘âg‹5ƪ;\w¤îÈÌ(ðc?¨²V9ßpzÎ{nn•šJÕö?ç;„A’¤µŽ?Ò½_ëÍâ:™oR¾ éŽïšï¦ÿf\áÀ#eOÏê…ŠKŠ‡ßŠi„™1bP¯Öœœì¹2V«,@óÛÍkf6À`d!®7]††rsy©¹”ä“Ö³­¢“Q[M„rK9¿Žo>Û¬nÂ4©à½ä5y ¤O<‰èYµ@’ໆ¶÷bð]Ók)"Q95Þ¿Ž¿?@’$ß5_Û{mÔ÷ÃuÒå›±«™ûîx¡DÀq\Ó©&ÿç~ÎçC10‹{i· 8=' êÂþÂíCŽ—fµú|}ÒÏ…Á`0–‘Uæ0»8¡ë`ƒ±¼äÂÝ⃡oCç;H>À?Íû?ó‡B¡Ð·¡Ž œ~ŽmCViLFÓôôœ@Ÿ±’d—2Føç°÷#oó™æù*dÆ€~šÒdÌk6:Õëõ‰Õzû`.‹™ëTT": lØÓø“!?€<рˇ÷R¬Pa[lPe…2¿M:–ý¦E'çÝ“ Ž‹…ë 1cë/lè ÊZ•tÝÛ×k.3S3¡ŠÊ íΗ_ŸÚÿÌ 3ª¹Öýç}6?«ˆLF’~.Œ,amlI¤õɪ»”…‚%zNg\°lñh;çV^‰§ -Í-9Š ,YWË‹Z1=-»,ÝWº•SyB&DEmÙ$I²ìJ¾o@EŽ‹·õLZÈ`¬I˜`A‚CÁñûã– “ÉT³¿€Éd¸1ëK €Á`ÐåëF¾‹Eç.~.ÞºFº‡šýhl€ô ä ÜTù{W½ÿ ȿºÕû5ÚŒ®+hi…$_c£'f^òcQxž×¯Ó§å}Ûóqe·_țݒOû#Ý“jö×464J¿Hò„|s fCÝß•¥Qä~üÊ!n_ŒÌƒÖMz¯õZ÷Í.ºo‡ôùú_±Umžó±ŽÜ1n7jwÅXA˜Bæ»'+~¯²V°ùÈ `êÙþ kœ']‰¯¸:M§›¦¡ºA˜èÁ~Ø®vzóõùÊ~[ÆóI‚r¨á8Î?¸51ƒñ8U€l@ž’éƒUž’å)@åžÊ[_Üêèïè¿ì¹   ×Î]J“ŒEª;XçzÇ%OÈâ]±íý6ûa{\…h˜§ò Þ…ëL¬\Ѳ äA—ÝB ÔM;`|íïÇÁºõ±õíJc,5Ö=Öù¿¡‘ý˜Ý?èw¿íÀqœuŸµ¾±^’$¢(&÷G£QLÓsȃxWT¡ Ïz½ÞsÑÌ)W ºê1 @ž¥¾üpö€‡ƒP#ò|¬¿î»yÐnIø¿¸1P½§š¯º cµ>~îæ­åQNŽ?Á¿JuŸuèë!å!îýÈk?l—'dóN³P,%‚e—…þÄÒ-|Çq‡Éhj{¯nç'­Iq¼æJs™9QŸþ!lÞiJÓSh$ÀýŽÛ`0Ð’õ F–Ã4qlݲµæåz°uËVDGøBž¾ôëõøBžèf7Œ3¨­½çù§6<%˜ÛA›½.~ÀoDk;ªkc69Õ{g.L¡å,žú AÏUt÷,ßåÎË(®fWÓ‰&e™1pc éTSêã2ÒÊÊoFÌhµ=$WzÓVüT£þ4WB0µ½Olå¿‹$>ë›ßnž7{%½‰ ÙêØÛmu6×—÷#¯uŸ•Zm¾´¼Ó™Œ`jÖ T§ÓÍîQò’×D.hMÛ+6Ëïçx ÈòÐ×C5µ5±>su¤€”m/«²VUî®4ï4›ËÌÚ3YNºCXæÄ­ù×"Ó¬FiæµPõï‚xÎ{4N+‹ò Zù•…m´§Bâô:kïXfË®<ô¿Kã÷>ùâD­XÈ2Õ¼Ó 0ð^õÆ~W¢fÍ7o„!üCØdŽÙhR·°9ÌSS]®.t{Σ?0~újÈuÊeØlð~¸ÌÉ8ŒLÂ4K'Ý‹(ƒ±ÖÈ’Eˆ‚²Ÿ­œ2²›lôÐ (å«6µp'öƒöúãõè1‹ AÀæcÞšS ÞfÝwÓ†) ÆçÞÎØ?øU!ÞM;LŽã޶sm̽˜±Úa>K‡i Æ#ÀæÙŒ%“y46üšN7-°¸€ý°}øoÊ›) M§›„m‚ÉhJ²ë¯b¾šz½ÞwÝ'”¾ë¾¶o‹kÕû§Þî»…Á°ÙÐþ~»•«÷W %‚P"9vÄ{mÿ3²ÿ ¿êå*a› lœo8,G–iª^ª¢ÖÛjø|œ]x¶‘±(@ c‰dÑ–›ý?ÙóÁ)$fÈ º\ºl…}RY]h,Nb¤ à7òqS ×)—ëT쭹ϺðuÇê:ÐñJPöþOû#÷#uë1tÆ`cµ0==k€lžýg›lj7€l“M!ã‚E§¢dfÓ|%}ÔÝjŒŠ*³¤7¿Ð Ê`04p¿ëvŸv Ï H>1=oÒ.§d• úÿV×ç×÷|Ü£¸ìü°³ö•Ú£7®Ì€Á`0™D—«£!†³È@cª| ¦óþAàË€º$ ƒÁHDº/ÝùñÎÈ÷#æÍ&“©¾¡^ž”5Ê²Ë öÃv菱etOò}â³7 @cÉ/N¤e‡i•à0rrfÃ(ÛÙ–MÁyÒI Îæ›L’,ÊÕåxÍÑv.Þ •±¦ "Y»ÍX=d£€Æ(§ß:  üÅò K€ KEù‹åq%ÁX{D"þAÿÍ›·¾¸%Ý—Nœ:¡Q®Uö£ö¡¿Ѩ‹Þ«ÞâgŠ“Û•'dyBN,_:¡€­Ö&lŠŠŠ”ÂÐ÷¡¢¢"a†êýsB ?&>tÖNHH,»Y¸Õ‚„n‡_¨ïŽBHá8Îd49O:¥{ñVšqH÷¤öÖö[_ÜRgó}TÂ?„M;R À[®tsgÝ9ó¶ÖÄ~½ßpÞCκ¹sm¶¾^iFl×›®–Ö–4}±ÙBÖÎþÙâdU¡ží¯ Àtjd@HcAýÚ¯:H>!ùÄñªÃÿ_~r…ìÒƒa׿îê¼Ô  óRgÝÑL[ÿë tÖ}Ö¶–$±¡zÿÔ«.¬4ò¯'ðà 8P» ¶Ðn;h›;„,OÈ’$u]é’îKÂ6Aûë'Ž‹LÆT§ïI‘&¥á¯‡S¬¬×éìFãå=ÖÅÅéHÿ+µò)×èÑ)T_óÑržçÍ¿5w^í\\·ŒTÈ Æ£’µ‹“•L=Û_ƒ‘&ø§y]¾ê?or…lÓ°µ{¯z_F~Qâ}ÅAÈbì=RÁôœ©zoõ¦Í›Ro’îE”¦`;d«ÝWËqñs,Š,ËK±÷X¦L&“Éù†SŽÎ:Ý‹¨ö)2öÓØƒ±¢(Î ðú¹ô£c£cÃÃÃÎ&'ñ®Xï¨÷vzeY›oÕq’„±1\9â]Ô;àí„,clöÃZ"Éð\DÙvµˆHû Æ Šp¾¡5–‚(Š‘û‘âg‹5ƪ;\§„bKz+nnaîW¢ã|gñ»´ IDAT‡$Iccc$—9~DëÌ× u2I|iwràÿõF¢Ñ±×N¸Ä‰¨ó¿úwàÇ‘²§yå´¸¤XQD%3b0IYe>‰Ðɵüakc)¸Þt6ÊÍ奿R’OZ϶j—S²P@]ïܹ“ÔýwEà ùO>û$ø?Áþþp8|úÔiõÕ´.¢$Iò]óµ½×F' ®“.ߌÅ÷ÛnºÓßt¦©ûãnÈr122"I) I=(xB pšNÁÿ9T !I 0—%—‡<R€'žÄÀ ôÎ"Ið]CÛ{1÷×Iø®iŽ¥¼»ˆ`Ž’*QÚuüøýño…êÝñB‰€ã¸¦SMþÏ“®‘:™$¾4šH²ìiû…ääÁµÓ컽€“Dÿáö¡@ÇK³ }¾žúí0ÒJcÕ‘µŸZÆ£ßáUæ A›ý3K$îw0 }ê8ßAòÉå²R í½¶ééiË.ËÂU3§ç„g|!ßøzãÀ¨¯¦uE Ü…mõVY«ÔDæXŸ†§ ãããxžÿä/ŸôöõnذÁ´Ã”4[yoÌe1sŠJD'€çñÉ_ÐÛ‡ `Úÿ`ryä'0úpùð^R„a[lPe…"cÒ±8= :9ïϽ…ë ¼ªw×k.3S3¡ŠÊ íΗq2Š©¨pÑCκÉYwÕÇÝ‘™Ÿc2Ã9GB5׺ÿ¼Ïfâg5‘Ɉ^¯ÏŒÀ-q>‡I5.-¢Zúzfrfsµ4õL¿Æ«Û gfûs߃ÁÈÙ¨Xm¤uÅòÆFÇf÷¡U¶OáóñðÏa:KPõR•ÿ†_þU¶î±Æ, ÝCÍ~46@úònªÖ2U/Áò¯°îAõ~Í·¼]WÐÒ š2‘/€±QÈ3/y±bïŽçõëôÃßiyßö|ÜcÙmYðV̼;©fMcC£ô‹$OÈ7b¹e¨7¼4 (¹¿rˆûé$ó !'Ÿ¯C®nìõFù”KyÑKò JåîÛ¡}¾þWlU›çügÜ1n7jŒÂHq+õé|Ç=h4™¯‡ô b+.@Šƒ®¸=dL€lñh;çV^‰§Ë…(Š999B‰@_Õ{ãØkYîzË%˲tOjy§…ÆÒ¡dYFtùºÄ-¡h˜§ò Þ…ëL¬\Ѳ äA—].´1í€ñy´¿O…„uêcëÚ•ÆXj¬{¬IÕB#!û1»Ðï~۽୘ywQLÓsȃxWtÍ„éžôz½ç¢˜S®@uÔcª){J}ÅÁW~;æ±×ÿç ë)NÈý?$ÿ¯ñ|¬¿î»yÐnIøJ ܨÞûi˪ #«È"çIWâk¾Êj3&õñ‚èõúÐí})¡–Bd2Òþ~;=æ8n¾ß!c­Â4‰lݲµæåz°uËVÑɨ­Î&B¹¥œ_Ç7ŸmV×O÷"ªËÛ¥Ï×m)"„˜Í桯†”K–ßYжm(ÚP\RÜüv3L¡ålËS¿yŠÒsµ§»§;®7~#ZÛQ]³É©Þ;sa -gñÔo@z®¢»gaÁàùòú|m!0›1ô•æX*pt_#$y2æq[³¿†Ós¡oCÊ×OãV̼;¾µ½µº¶šÚÿÌîå¡«§Ë{ÉK©¨¬Hôæ7òµk‹„¢ï<Ñì*½è¡O4Ç~ìºþ¿j½NWô‡œu›?êú9ù'^Ý™BÅU/5"Ê&Ô=)ð×@ÝáXè[ñgѸݘ¹‹±Œ¬øŠ ÀXœêÙ~l»fÅ}rrr|3´‚Úh)¿ 8t@—¯«Ü]é¹ä‘îI¢( ‚ ì Ûéž$OÈ•‘ûä¢p]¡·Ók0*,‘H„zŒÝüì¦Ò*8í‡íþA¿‘¼^ª.p¿ãö~ä%ùD§Óõÿ¥ŸWYs2ÙOê“×µÆ>FGGãJø§yÿgóî¤{E ˆç‚ÇsÁ“xÉ~Ðn¯›3—å7ò¡€v‡Î8fO¯Ñ†ÄO§ç`2Æ ¬Þ;;§'ð\€çBJc©»2Mæfï‡^û1»ÉhÒþEHz+âZ9œÎ†Ù@IŽ×ô ê¥ªªp•RN¤ªÛv_‰_,i0ýN’ 5’ÏKUž—ª/-Ø€«ÙÕt¢IY Üh:Õ”ºH ãñ!}Rdq³:Y§/çÉØ#þ@Ýæ³ÍÁ¯‚ÔÊs>ˆŽôûúC#¡ÐíPcCcýñz7ý7­‚ºòCšÎ4…FB–]–úÆzeô]»v‡ƒmçÚ\§\ä ùtóéз¡ÐíPð« ¿ŽÍþ«ŒÇ*‰UšH·`ÍÓ}¥;i¾‚Ç Ïyò»FO—ÅÒ•‘VVéþ1`µ  öXy €Úªé¹#t²®.‘'ä‘ïGèSÒöŠ­ýƒöyç!ðu å–ÈdS³Þ`‰Äõiù}ÌÞW§ÓUí©`þsýkõH)Û^Ve­ªÜ]iÞiNqÁÈf˜`é°EƒÁ`02Iù³‘|5¤Ï²» ªoB4:³"zˆšý5—?¼ºêÿKÿlyêݪ4 Ê­ Úζ‘|â:åb›XŒU›¼.ÑÄlW˜8ƒÁ`<~èruJT‚lɰ¦§§ã¤) ÅÏÓX±<8§ç¢SÑðau¡•1 $GcAÐçëWq}j…zñ®hÚarw´kc>ÄŒ•Å?è¯z¹JØ&Û%_¬ ¢hK‘ ê&˜¼úaÞ RŽCÕ„ˆ•‡‘“B@Hªö ž9% Du•Ä*+QhŸY[D1 #“D§¢d&VÛÊk(©ìýÇÙQ¿áTª}ãȮήú†zÓSdr&´s:þ£Ãl1›v˜”,0¤€4n¶ &£IÙË'¤v_­a³ú+t]é:}æ´P"øýmÿÞ6Ÿõ h> [-<8Obø;¸ÞB÷•9Õ8@ijN4JŸ!­üQ™ƒi ƒ‘IÔ>±€.W$_´s§i  îv¾Qâvýã¶ÿÕ ãQ‘îKw~¼3òýˆ³ÉŒšÿÕÜúN+ÉŸѼûãîâ犅çæ(»Ò:yEŒ|Û+s k_Á‘ºù%´ãs‹ìseaŽÔ Áa”š0ý¿ [S¶C6Ë¿X–âå<éô\ô` ‰I’$Xj*þßôºI8^sž6¨C÷0 FPÛûd‹€Æ(êðÿó±‡`ecžÁx܈D"üƒþ›7o}qKº/8u"®NϵÅ.H!­æ+Ò}à çòë0~ö”<R€¢"Dî¡+…äSIû\.C[­MØ&Å]Jê_AIë"ЦƒŠg—mò„LYÆØ ³Î °ìFhdº ݾ ÐÙ?}„R@8Ž3MΓÎ×Ò=©½µýÖ·uö¯&üCØ´#^6þpØr¥›;ëΙ›*X~[_/9ëæÎµ¹T¾^®7]-­-òÄâÅc0ŒEyæEñôE²íÿ¤§ #E¨[‹ãUÉ'$Ÿ8^uøÿkŽKúÀèd4Îiž¼rë@ŸS(ÞGáºÙSùä Hú?…P¼È>— ]κÏÚÖïö3Ÿ%3>Á¯bF‰=÷6-¿&Aþòüƒâ׉‹¡ýƒvÛAÛÜ!dyB–$©ëJ—t_¶ Ú÷D˜Œ©Nß“"MJÃ_§j+¦×éìFãå=ñÿ&Îÿê'¢N¸B¯:ºoxg Dyž7ÿÖÜyµs)2²û1»a³Âqœ­Ö¦^¯öÚoÚa¢«Ù¸L|Y–m‡l¤€pë9×™Eî½Î'Q‘“—“4wuZ Ìefºž¯z©*éqZ‡Ã–ÝR@xžW̹Ó!€÷C¯a³Bˆ¹Ìø2zçisó¬ @œ³oÜ1›ý3‹ƒš×å«ÿ fÝW»­{­DÿS‘ÖÉ+Ï£øYt_›Sè»ËîEt¦ÕçrazÎT½·zÓæMqåÚþð¨;Z繋]æ¹ä©;š`DEXvã@,»!Þ•{.À`!àÖÃ~Lk Bà8ŠáïfKä ØëÀq °šuÈžo,_Ÿ¯rweÒQ„ÁÛé5ï4»ÞrÍŒ"ÛëìÇ‘b;d£[þ¥/”bfº@EË. Çq„Ën‹xWÄŒnA ;UQn.Ww¢‰çm%‚aWÞ9<ìÚi&yà ˆ³¬Ì;<»¢¨Ü]ÙÛ×KC·CIgcŒÕ§çú}ý²,ŽŽF§¢ÕûcqGú?í?Ñp¢«³KžÇ~s¼êHlëltŠwÅcBÁP÷Õnµ«áÒUìú—]‰zÝ´ OÈ¿¯°îµÊ¿ÊÆò…Š`™@ÕËUÅ›‹år(òú“æð^,»-Áÿ ʲü«\¹§²êåªÔ;O«È¶<™…Á`ÄQ»¯ÖsÉ#GeyRö^ðZ~7¾V‡þ{(éïDº'¯­ïáô[èîB–Ñv¾>¸ß^\g }fÅ¿Âü¢Ùd2Õ7ÔË“sL>2 °´ûú|²,‡FBÒ}I#6qÇyHÆÆ@rqä8ˆwQ²Œ±QØk $OÀseÛgKØ‘0öŒAá|Ck,Q#÷#ÅÏjétê×ùoøgF9‘"c?={ Š"5²º¸…™éÎ̈’$‘\räø­w2C\'¤€$}iô–¤h4j,Œ™ ù‘qQ¹Z\R¬h„™­ÚεÑð€Ç5¾Þ8øßƒ´üDÉŽóô) I Ì:¯vºÎ¸Há7òÎ×Jx’e@!~>˜t’>Â?‡£“QçëNäÇ«Ž‘ï’˜ ¦Q€pxä»w‹yà8ÎuÊ¥lŽ,»ƒãf·Õk*§U¬:€¤,:ƒÁPãzÓeØh(7——šKI>i=Ûª\êþ¸»øÙx÷_Jº'¯U/¡ßÏ Oaà ~‰[,ÑVé33,è_‘ §ç,»,¾k¾ÎKö£óúÔò<„à84‚ÿs@.‹‘HHÌeÉÛRgŒ'žÄÀ ôúb…’ß5´½sp„oF÷’|¬¤ˆ`ŽV*QÚuüøýq’$ù®ùÚÞk£sq×I—ïš/I}žWfM§šüŸ/&ïŠ_O¿!Œ5ÌÀ§eÛˈ¢8òýHðvÐ`0pë9[­M ¨‡£“QãóFzj4“N‘'€ï%¯ñyc¢\ZŠãvcÛûmxyBö\ôÔŒßZJï ÿ}ªÿÁÄΗQªÖËù?9Þ¼7?»™bçi€²š|’¢¸P´ Å`<äÂÝ⃡oCç;Ô!€œ¯;ûú“6ÊÀäÕ²¡Cÿ볆þ&#¦§“X+͹Šä•iŸ™aAÿŠÌø8Ž:<=Þ«^ûáy½}0—ÅÌu**žÇ'Ao6l€iüñÛˆ1¨3Æè?ÀåÃ{)VH}-„m±@•Ê\7éX œž ¤aIŠ8.®+ÄŒ­¿°M  €*kUÒ)uo_¯¹ÌLÍ„**+´;_Fh¶iF ‚>wöjd2¢×ë3# cEè¿ÞßÞÚÞq¾€t_0p}  ŽþcT¼'Ö;êãêS !—Û¸Õåë–¸DT 0ËCx?ò&ÝþO·½êmÿ =çÿä<ñä÷‡;Ú;âê§UÃfCñ³Å®·\²,K’ä>ëNì| j½ÏÄÂ?¤ÒyZˆõ¹º|4`³cE`I¬dAÿŠÌä°ì¶„›·›yžOZAº‡šýhl€ô ä ܘ½Tõü7 ÿ ëTï×Ű]WÐÒ º­I£-Bž˜yÉ ŒEáy^¿N?ü–÷mÏÇ=–Ý – }ltlvK>!ìtOªÙ_ÓØÐ(ý"ÉòÍØN]žI“±]ØÈýø_Ù¸M12Z÷„ãt:ÝÈxÌñ|x\,.œýFn·5š3V5½}½5µ5þÓŸ©©ÝXqrqGíO|×ãµU´ŽòŒNF—²DŒ`¶ü“ÞÈd$©agzx‹ÅâxÕñÏþóÁƒÅÅÅ5µ5èÿKÿÈ#6l(7—›ËÌúuñ/¯ 6H'{®õ¤ØyZˆõ¹ª}Ô˜0ƒ±"°$VqÈS2}°ÊS²<›†jøW ƒ‹(ñ®ØÿirM€h˜§ò Þ…ëÌL+ý×!Ë@tùÐåÎ×A ÓŸGûûÀq°îC}cl=@»ÒKuÕ?˜ÜJ'4²³ûýî·Ý8޳î³Ö7ÖSk Qû¯Ç¿Íh4Š)pzyïŠJT áA¯×{.zèýIŒ¶AuÔcs(Õ(õ凳ÊqÑèú2 ?„8!· Ù³3þÕ{b¾‰qÉŒÕN÷•î‡ôûú«öÄœ/ ƒz; 錋ÖQL>†‡‡‹ŸK!ÀYj(t~ØYûJmR÷•´ ú1tçÎÆ×ipžÆ?4ÆiDÓ-Ãfƒÿ†_’¤ÐHH¯×›ŸBrPC?îT:O«‰Ç+©h;çV^‰§Ë…(Šjgˆ8$)æ'OÈJX(¥ð‘:ô\ð%‚P"Å¢ƒ7Åú_?¯À F6À4qlݲµæåz°uËVZ¨á_¬YDñÑÚŽêÚ˜MNõÞ™ Sh9‹§~BÐs5%çéÆx>€<]^èóQ´„ÀlÆÐWšc©püÁÑ}uNtòdÌã¶f §çB߆”{ÒåíÒçë‹¶BÌfóÐWñ^üF¾µ½µº¶šÚÿTï <’‡®ž.ï%/!¤¢²"Ñ>ŠßÈ׬-ŠRŒÏóD³«ô¢‡<Ñ{þ·ý®Š/Ð=Õê.zl%Åö«kéžøk îp,(“ø³hÜnLkê1FÆðœ÷Ôÿ±þæg7©žJÁqÔá>禪ª–³-Ö„ ±êÖ¹ÞqɲxWl{¿MÃloïŠÿ9à8šÄþ'Ý6tù:ÏÅ ©¯Zï& 0hy·¥édSbÛeà!<<4ö(Ý\°î³¦ÞyZÀÜÙ~,‚¾ag›cO4é\?}™€çëY;+°šT¶ÿEQ!Ñá&IµmB*Á’vè¹àé½ÖÛëëå8á¹äqŸ÷l¹$ad?¡á€`4‡†ÚÕnøO¼qºõß›']êÊ7üΓ.õ’¸r·Eé¶M“ðÚ$N^íuvo§7û5êeïaÒE”e—Å?èl)”¥gÎrâ2;^sXvYf'%‰ÿ•«T½Ÿ““ƒÜ9û¬1MÑCØvß5_t*jÝcíðtÐÄÐíPé ¥´Ž,ËGþ툯ϧÓé¯:Üï,f3t^××ÀõàL> JÆðú't{»ì_Ê:ÎwÐL… [~oÿy¼ðé¶smÊÜ2 ð–ß[†ÿ6Fõëô¶WlÍo7SsÁù:ÏŒtjmØÙþÒ €+qÄÔº+îJ2/uJàE<èÄÝ~ØîôKÉÛéµì²(³ù KE$¡Á"n~v“ÊrEeEä~¹(\WH'7I;w¿ë¾ùÙ͘f Êì?8÷ZÂsÞ£qÊXÕÌûàʃ÷C¯÷Ãø¨ŽB‰ LÐ !Kÿòk<9Ýï¸'”À²Ë¢ä%\ Cø‡$Jée ó1Î×yÆ@vú¤È¢gÿ”H$²k×®àp°í\›ëÔœ…ÍMÿM½^º Ý)…DGú}ý¡‘Pèv¨±¡±þx¼Û>Ež#÷#t-ÇCšÎ4…FB–]–úÆz 1Ôh>ÛêóYhF¶“îÉ뚟ýƒ™Q1 #³èruŠïÒÊGRÂùg ®¿N§£!æ1‡ï¤ð³š‡À×s™Y(Nœ<ü.ÉâUyBù~„ª™l¯Ø”l̉bÄÕ|´wÅ`dœtO^ý(ÝF ™[³¦`0 F&‰NEÉLD‡•×(‘|5¤Ï"¦4ôEcÍ3ËCÔ쯹üáåÐíPÿ_ú£ÑäMHѯӇFBI¯.ƒ F:ñú«^®¶ ¶ـÁÁ¿«­Õ‚ ‚`¯³‹?‹ê&Y¥ÿӎرP‚„PY Ó0 #“èru4Þ@åX4 Øré ôùúÄù½•1‹6MÆÍ‡ë„«þx},1äCx.xRül1L×ýq·Fd¡¸šK}3 FÊøýîwÝ­çZC߆¾ |CãCËQùÀ¡•/U†¾ }ü†[Ï9~DÝ*«4Ò$†¿^Ü8+ Ó0 #“d£@*~qÔMp¹l…I©ÝWkØl ~ÀJaÓé&a›`2šÔÛö‰8^sTï­.5— %‚°M iÿt]é:}æ´P"øýmÿÞ¦ÑCWgW}C½ÉhR¿iG#e0–÷»n÷i·ð¬€äÓó&ãããÑɨý°¹ :RûJíÈ÷s’g• Ü „€‡‘“<Œx.€[~#_¢·Bq1 ƒÁ`02‰z¶¿ÂQ€2°ºàyž†ìTbÇ÷â ½³îùJ¡ë”KñÓ¥‰ÔMÔ8^s8^‹ýi2šâBn%€i‡IñOo{¯ Çq®Ü ÆÒ‘îKw~¼3òýˆ³ÉŒšÿÕÜúN+É'†M†âçŠ=—<Ž£9*÷|ÜcÝ;'juVEº@©)fùœ›C6|Ò=¸N¡º–]¸—Ðw‹hùIë"*8,5•Nÿït–G—£Ô„éÿeJ^zPçI§ç¢SÑ,Ãw,.(ƒÁ`dõl?¶Ðåê€äk€ôåH¥Û¸]ÿ¸í<âDÁ`¨¡ê&ÿ ÿæÀMGŽ9qêDÇù—/\®Þ_ÝÞÚ ø¹â?ÿéÏê†Y¥Рñu°îEË»èhÇü)—D`(àùÀ3üÝpt2ªN) ³êÄèTT—« …f=…Ò½ˆJtÖ®ÓÅ~@Ê~‹Žó–œ°2t;ø2@CàÑé¸N§£ñ¼ › –Ý–¦MÚI¥{R{kû7ÁoL3)·Aø‡pumuÒx…‰øÃa÷—áŸÃ‘ht:!À"·žëúìæÿíó) dc!¨³p½é¶ ŽW)&c0Œ¥£hV‡€:üÿ|¤;|ƒ±&¡óÇ«’OH>q¼êˆ¥gŸBumµíÛßÿñ÷¿û÷âgŠë_›7«|4à׈ÍS¹õËÒet:ë>k[K¼_HEÙö²8-Êj÷…<¿À`ÀÚeè°ýƒvÛÁ91Ðä_eš¼³ëJ—t_¶ Úß(q\°”Ù?iRþzxáz½Ng7/'Ëêêôž6P2ù”‹¾èìÏóæßš;¯v.ETƒÁx$²Ñ`>O_$ÛþOzÊ`0R„š×å«þ÷gŒÂ?‡Ç¯;ZGr É'µ‡j?T7Ì* €.wá:iÅôœ©zoõ¦Í›æ« þ,ýuˆ:X+dÀ ÷“^Ãf!ĴÔ4L™(² B`Ù ñn¬Üs·öcZCÇQ «¬ªä ØëÀq °š Ê4ßX ¾>_åîʤ£%‚·ÓkÞiv½åšE¶×Ù9Ž#ÄvÈF ~J_(@¡y7EQ´ì²pG±ì¶ˆwEÁá`NNÆzŽª(7—«;ÑÆÄó¶Á°.‰^¢·¯7nÉGåîÊÞ¾^zºbªƒ‘nÔ³ýÕ¡ˆsö;f³cÑÔî«õ\òÈQYž”½¼–ßYêtºÎ:1êPüì ¬ÒpzI&”ÙC÷ÇÝÅÏ ÏÍɘ €¯ÏüŸ ü«\¼¹øÈ±#Iëtœ‡$al $GŽ€xõx;!Ë…ý°Öò<Q¶}¶ä€ c?áÁDÎ7´ÆRE1r?÷5‹£îpÿ†f”)2öÓØƒ±¢(Ò𵷷Ȳ¬8tœï$illŒä’¸HVó× ) I_ öã»æ³î‹-ø÷Ú¸smöëýòÃÙ Å%ÅŠªA(bAä #m¨gûÙ®`0iÅõ¦Ë°ÑPn./5—’|Òz7“ IDAT¶Ñ‘ËÞËŸÛ„RS©xW¤Ž Y¥à7¢ö ЂŖvz®õÄmÿ##€¶oã8yp¼êúëPbž‡P‡¦SðÈr12I)€¹,yçä)<ñ$n ×+”$ø®¡í=¸NÂwMs¬¤ˆ`Ž>*QÚuüøýq’$ù®ùÚÞk£sq×I—ïš/I}ž§QÝ8Žk:Õäÿ|11ä 9éK»U`(Àé9¡X0èõÿC£Øà ½ê¹7~ä“^¥Ž>_¯Ä|c0Œ  öX| œ¼tQDÕ§²ÍxcU‘ w‹ÛÝ¿Î7—™ûÿÒ?_£¬Š ûÊì1mg2Bé@}œyn D'£‰Ö Ððëxz Ë×a*I…Þ>´ŸÃÈ÷ˆN@txŸüíïÁÙˆâçÐv–]IÚÊ€<„@ÕËð^‚ë ˆã lSÕ›7éX œžŒjÞˆãbáºBÌØú ÛT•äï®·ý\ûÈ÷#ô.:™¹¬‹¾>ýÄ9B8BðĽËRõq7öÆêD&#z½>c"1¡Û¡ÒJ5ØãÀòøè “ÊÓ§•¿:èrò˜3.ƒ±öÉ* @–Ó}µÛº×JtñóÚÏ ÝCÍ~46@úònÌ^ªz þ…uª÷kubØŒ®+hi nÌÀØ(䉙—¼ÀXžçõëôÃßiyßö|ÜcÙmbÉÇFÇf·ä~é¥{RÍþšÆ†FéIžiœ+Ì8¾K“±øË‘ûñ{ðq¿†d´n Ð{­W±ÿ™‘Û#ÆíFí: Cõ¿dNNŽr,”löŸ”åñˆ&„ ¥¶`0Öp¬ûPß[Ю4ÆRcÝc/óIh$d?f÷úÝo»pgÝg­o¬§9UDQ¤iÔç¾»(¦Àé9äA¼+ºÎÄ~È„g½^O3»«Ë¨.‚z cÆ ¥¾bÖ/?ŒÓÜ/4‘$Ëa*ä„ìôWnžur¸1P½§šǹ&3ŒTPþÕ®;lê¯Áòøè¼ [0k¦ˆcë–­5/×Ѓ­[¶*åÝw?ïþKYq ¿­í¨®)@E%ªgLS0…–³xê7 =WÑݳpW ð|yº¼Ðç£h ÙŒ¡¯4ÇRáøƒ£ûj·º„<ó¸­Ù_Ãé¹Ð·!åÕåíÒçë‹¶BÌfóÐWñüF¾µ½µº¶šŠÊŠê½±©6òÐÕÓå½ä%„TTVØÇ'ã7òµk‹„¢Ãò<Ñì*½è¡O4»ø®ùª÷ņ‹D£U÷³î¢Úùýåÿ s$Ý“ Ô®£§âÏ¢q»1˳¶1«eEM<<ÜzŽßȾ ôöõ Å!Ädœ–4ªØšda€¸I¿úTQP €ûäê\§b7‹äêÀBs2k˜lóXqÔù¿Ô8_w:_Oží5­‹(“Ѥ¾q§³â5ÀÙ0{êx ø$qVwïSQ½wvNO à¹Ï…”Æšëªa2ï4{?ôÚÙçXÏç‚g®`sZ9œÎ†Ù›¯dj¯z©ª*\¥”ÓÄÃê¶4YŠ$æÿòõù.w^¦ÇŽ ÏÀÕìj:Ѥ¬1n 4jJ}Pƒ‘:á;aéžä:媮­¶ì²Ü Üâò9û¿Ù;ø2à€ýbì§1UÖ*çNÏyÏB½®JÔ>ófNjù£^ P @ã‰*ÖÿüuöxÕið Fê0 ÀÒI÷"j5òH3ï¬%iÊ…8â¦ku¶Á`d¯7°îµ¶¼ÛÒÑÞÁqûQ{ù‹å˜‰*6::J䮓.Û!ÛZý—Ôåêdtª¾°À|P €Ú*•´)¤{Rõþj¡XJ„ª—ªÈ²y§™–XvYèLBEŽãÇ&£©»'ö«@ '&£É`0øýΓNÓ“Á` Ë8îw܃A(L;L¢Ëüb2š„bÁòÿ³wÿ±M\ùÞøß–iæ*¹ò¬@ò¬ÊW¸*«z¶Aµ)+b–jã,W·ÉåêiH)ˆ¡_»­.1TKª§«B²ÕÒ¤ÕmqZRÛ„Gm“ýêrqVåÁ^-Ô^m¶vuYa´T™hAŒÕDÑbÉß?Æq&þ™8?Ìç¥(šŒÏÌœqÀ9g>ç|N½]º+-ôN !YhÀÒ­øBy¤ó¡¥—„O/ÛÇ0éÜh™¬bê€Ã¦æ¦ ÎÏ«$vfZWé9…¨ßI÷¤Îw’Íl—<°eoKÝ3uÑX4:=á<–aG†GÔ=íGÚ݇ÝjÉD"aßiGÂŽÖÙõá‰DýŽúp$Ü󛞦Ʀúúúðõpß™>Ï1yJîìêŒþ9†¯‡Õßú¾ýû:NtDcQ{½ÝÝî^èB²¬ª@t<:ϧ«ÊŠÏ „2Ÿ¬bƒÑ3ê\#¥x@7WÖ«jÀ{"å;‘òž3Ûů-OÉ¡?„ÔÆ:5ƒ*omu6¡V8zìhø/átEfvæV¦ö Ó´« €m› z¨1ë3Öøí8¶†­{¦®©¹©çTO0Dä)9ömL=ãG&P@QÆMÿÞ$l„Í‚º¢*ñ;ѱß!‚õgÖþw³ƒ¡«*P2ã[üfܺպ¸š”E!dÅÍ'«XŘï:©¹²^-”h1`÷ÞÝg?8Ž|>¢(3õcò\B»S»¹«`(ØóV[Íz{ÕÙ]„Bc߯}§OŽþ9úuðëLÂJG›Ãd2Eÿ½¸¼º4¤=jUEJ’¦¥Èb æWE!d5(™U¬b,l€BÒ€™1?¾·XïIï­x¶†­ÛV×sªGýQíoÉŠŒd: £¦g^¼ïˆÖ­V×aWÏ©žÀX€­aÍOšÕþÜàÅA{½}Iç'¤²ø~íóuú„'l5k}Ú @üN¼ý×ÛíÿÑ=ØjÖõ²ëÂÅ9É WU +ãÛà…A“ÉIJ¬uk:ËÛvÛvÌ,³¸ú”E!ä¡ÈŸ÷¬jv£`3YŤ»’,ËñxÜ—“Ú«b,l€BÒsfÆüx˾©L>Ð"†> …Bê”ß}û÷`kØŽÎa³`µXó>õ—$iž wY‘[ö¶µ‚P+|é ÿ=?€óï<Ñ)Ô ±@ÏÛ=ó¿GB*›tOºý×Û±oc¶gmV«Õ}Ä-OËÈ·Ì_ìÛ˜öÇÕýÿFÃá°ü½lÞd>øÒAÚ5b}Ú‡Ž"óŽ@§Cf‘,Ç~‡ÿÿRNè9æakÓ¬Ôåº\¯º2Oå!¬ô:(¼þWÆ"‚*n=—5œ€÷¸×{Óc¦7öžîíèìP¥ÿÝ~ezÎÿ÷Õ¼@ÏÛ=êä"×Ë®íöíY¯f>@¢`(Øÿnä/eZÑ.þS¸ûd·ÚwªÛVç;éãã3¯–µ¿oim __±Ï½p[¬`frM×mCßæR‡•¯Õl¡áHx‹u Ã0ЃÑ3¦&ûN{ÇÑŽL–¼¤»RïéÞ¯Ã_«+õ.΂Þ^$컚œ–XŒ|ÏÎFÛ>«L ÷] F¾‹'%³°@X·¼ßŸy(f1òÁ6g¡ÂZÂ{ý±I1ë%n=wþ¿®üÛ¥áÜzå6 ®—]ó\ûŒ²F•^ ï"„ £6\/»ØjVÝ8è<¨¾äð{Ox·ül‹q±qWãФ3¾Lu:Ë›–šñíábj˜æ=ÍŽî×f“ŒÉмoÿ¾öWÚ‡>’“rçù|vnYY;Q«dÚƒü=PY†û5ìkExÉ5ê}·×ñ¢C»Gþ^VãûÑñhï;½Âf! yÇÔKiýco¯}£©ùI3Dz|WƒM¥cÙkÃÆi±0ËîO³^–gÿ9.R€o,`¬6Ä0çßy`,`zÌ¤Ž³Í=!Ïó¶m¶\ùÖ,#„T íxŸ‚€ùxru²Êɉù¶hjÝþMøšv¡êõ$³éëàuÛh`Ξ™à:àȺP4"f}ïûONˆ¹ûË-ýyVJ*•ŠF‚‚Å­›zwÚýP~‚gëSVëSÖè·s–šœœT¦ç'ô`õlë ­»÷îÖ(k'*3í€,Ë¢(:Z‘?EE©ûyÝàÀ ¿WŸ §þ‘ ›þ1§ë%Šp´"ò'( ê~ŽÁð ÿ=ôœÆä$˜j4?ÿ+òp–s³{ä)¸_Ãð%(I4?³ÿ™^˜¦Ðµ2†/ çOÐ!Ô þËÞï^5D OÉî×Ü׆•¤Òü|óÙÿ<˲얟mYú;“õöÿ]˜¸™ˆÄ0ò(¬ti¨ùùæ"çlÜÙ8tiHíDÇ£[l[ä©U4^ŽòPh[ûW.éQXª“5A°ØJ–É ê›OáµE½µL»>ß—¡V¦&óSæþû]‡\²"_¸x!«VÖÀµàµ-Ö-Ú¶iß™>¡V$i_뾃‡.(Ï]ßµ$ìkÅÁÃùâ¸]¸€½ò")v¸<…þ÷Q÷Ììž}Nà&þMÍð¼Žþ3¯•!Šbâ^Âüd±DmÚ¶œ¹Ê><ÀÄß&457y^÷ôŸé(ïLÖI œÉ´¡£w¥-ö+Il4pám%ϯÅÿ¦GI¢Ùlîû×&¶ªDá}—†ûžkdôÙû‡?¾¸¢>¡¹Öy#Ój…oý¾¶<ÿO y¤Ìk!d YÐËŠü˺ªZÿª³ïmÙÛÒ{º€ù)ógŸ|¦}u9³ñ<Ïó<Žã:Žw446,äXð<p:Ž£¡ ôˆÅ`y[]þcÙ€2 ãcÿ1½S’0ü)nÝ[ÞcpìOwò_k†” Žì*RÛuüä½I’$ :|ëÖ-µuî=æuìwôŸÉÎ2·”w&£dsYXÏÉǽ’,ï»4ìù}À¿«i>§5 ß¼Ò.¬çÄ)¹åÓ ¿ÌYG«'4¯74m2e‚¡ gà³ Ér¡ª «gõS„LÈC7z9€ùÌ „µeµEDKk‹ãGÛËmPÐy¢Óýª[›¾¦Ü©µ†. õžê}S?ý³¦t—:½§ûJ”iày|ù9zO;ÌO¡çìõyŽ•ïUˆßDÓ¿Ãÿ!¼'@œa³¦ÜÌT¼×Êà œZù" |ÄIѸΈ™±þÂf!÷*sïnñïÌBq,Û^gkº88ÏDzê̾†õÕÛ›.âù‚…ã’Ô F_Î3ˆøÒ°}*rÂÄtÂ`0,ø–Ê£"ŸP²<œuŠ(žAHWÀC¬!ä§Öì8•muµþøwñÉï&Ûµ±z–­f[÷·Žý~lNrF´ŸòÒ]i÷ÞÝíGÚ¥¿Kò”¬f|ÂÌpi:)q/Ï`é.vïEûH‡<…+£³/5=‡ÀeÈߣyZö«Œi΄îÓP30ñF˜¸yjæK.q-Ïó†u†È_ŠÍ¾½pñ‚}§H/,3qkBž’Ó_9ƒõýÎd%Îf È[Ç·‚æÛñÉiåñwû¹S= çü¸S=C±(€¡O‡š÷› 6³UÓ®‚×ÒjÞÕ ä]&‹ö¾Ó ƒAÇ5ïiv·»û~ÛÇqœ(ŠáᦹÞýÎhß^Ÿüý ·>eæXVœ’½cæÚüílùÁœ ¶ ’,'ÅÄqê›ÌE ·>em|"] vo²áœ?zÈi¨æÔØjÖ£"'½<Ú²+=(kô²)™|œ²DeŸÐsÊW¨ 6îK&ù¦¦?!‹ö¶þ±Ò€Ÿþä§Ú[·n± {Ö¶û×Ýýïö°é·×ÛcrÌ®ŽýûÏíΗœ+]‘µA0 gÎÚêŠåþr½ê2=fò̬NàzÕe¯··pLHY-è“<ëó\mé’\žc^ÓŽžèyX|­ë¡EŠï´ý ÝIÞìÒô¥ò…›1¿Aÿ{ýýï÷@Í{š}ù–BÌK¼#þøÿùqWw—7g%•$I-Í-êªÃ„¬Eß„¯=šÏÒVÛ€’–3 P%Qsü“yŠÆ¢%Ëd%GÊÍ•DÈrZu*ˆ’TØ™›s@Þ‚¶c ;éÃL»¿P •J•lý}:tí«kÇáú?\ÀG•ÿœ¿ù5ûÏù u8Ž£Ö?YëÍ>Àšû›±œY€!d­Xij2OŒžQG÷)eÊT˜’w[wÒ‹7»t'¼º“¾Ìv¡Sø~íë{¯S×V¬‚ºr¡<%Ûvس Ô öz»ú MEŽã\‡]V‹uð ÿÇþ®·º¸j. ˆŽGM&“tWà:ìòñ¨‡¤/tÒg2™„ZÁºÕ*ÎoFBV‰¬kî¯E!$µþËg×`:Nx»Ó#vÒ3‘u'¼È7†Gw›ÊÙ/Oɉ{ Á,dígvdxDû5òňû°{äw#‰„}§½ÿ½~Á«A®šÌBë‹­þs~[M¨¼¿ò¶´¶¸^r…®‡ÂÁ°xOÌ\¨³«ó‡û?¤—x|BÖ–G­°æþfP€BrQ |´)Œr ¬tþÙ#y’Êìµ3WÔH‹\h^UÞvŸìNL'œÍßÌ0Lf&“ÿœ¿õÅVÎÿäñ¾ßö±,ë|É9ú»Ñ}mû¢á¨6é[ÃÖ=S×ÔÜÔ¸³Ñ¶ÃV|!dÅ­¹¿ „\Ôú/Ÿ2®P"{žQrÚý©^ÝI’ ôŒö{Þl kXgˆÆ¢ÙA€ؽw÷×Á¯…Z!~3nµYÕÝêz.dY¾ðéÃï ½ïôPeøÒ°£Õ!ËrìÛ˜¡Ú ÞM›æü¡ †‚áëáÐõ÷¸×´É¤]“UeAù³+5Ùöšû›ABÉE€ò)û:…i"šþ†ÚÖŸgöOïQ¯û°{äó¶†U'»»dEF2½ôc:AÐ\ß×m« \NOðút¨ÿƒ~G«Ãýš»qWcóóÍŽýŽhX“-áÄIѺÕjÝj­ÛZ×ÒJ ÑÈ*µ ù¾<9xÍýµ @F8‚-V¤þ5 »ôDŸžcžþ÷û‘,ºDWþš,ÇXYi7 !ZÔú/Ÿ•œ éi,rAt׫.[l[ ‰ÖZ°5lGg‡°Yà|ãs¹GùÏù/:2?6þ[ã¾¶}ýgú#‘H8Fœœûœûú~›^©GVä–½-‰éFÏøß£Çÿd5zÔú¡þ%˜Ï÷‡. ö¿ÛùKD™V´K ˆß‰žãžÈSÍ8_tº^qiZëµÕÎÌü©Û†¾3Ì¥+%: ^ ª¹>Õæ8Ã0ЃÑ3¦&ûN{ÇÑŽÌR_yIw¥ÞÓ½_‡¿V—¿]œøÍxKkKøzx>…ñ¸ïj0ò]<¡(Ú©kòürh8côŒk«Õ7³€±÷W^a³àzÙ•žcFÑ @ù”k@é¡I…Ñ3]'}'¼(zÅâÑ׫.µ å=îÍ$÷ô½åÀó¼$¥'d%÷dYV]¾1sžÌ±ê!l «f "dÕZž•û*ÏCÿƒÁÔ0Í{š/8ܯ¹µûm[mp`PV䃇/µ‹+UF@þ¨‚,Ãýöµ"Yê {ßíÕ>¬ /«Ïã£ãÑÞwz…ÍB0,ò¶ˆ“"€¥´þHÓRäÆ|oÆÀ0N‹…±Xv:gIdψSÊý£Þ„"ÛÎ ˜ §Å €çyÛ6ÛÀÇj;Bˆµþ˧,sæÓIôéNx¡g/ÃæÎ!¦õ€ )Ž>ûV ëSVëSÖè·sV\¿oÿõöÐ'CЃ­f]/»zßéÕvÊút¨û­îp$ Àù’sàÜÀßÿÀ²¬ÿ¿ÿcðêœ9¢G+"‚¢ îç¿úßCÏiLN‚©FóóðPðr, ×!l97»Gž‚û5 _‚’Dóó8ûŸ`Ùb×ʾ4<2<’÷*B­àð·ìmñ¾áUCò”ì~Í=|iXI*ÍÏ7Ÿýϳ,ËnùÙ,ËeYEG«#ò§ˆ¢(u?¯ä7ðYC}Ò?jþâl·mמ¤ø»måy+χs²ED"#/8Ø*°U¬§®Î‰8gº%;‡. ©€èxt‹m‹úLŠB€òÑÎXæu:éÃy[ÿR3Pr>1!„¬bJÎ#•Ø·1íeØaü)¢Æ3—7n ý߀ÑÿmÜ™gdßH&&Àêqð0ˆwàvÁ?YÆÄ-8»œ<…þ÷Q÷Ììž}N$$Lü ÷' Šð¼^ìZ¢(&î%ÌOHÔv -3›kŸs_BJLümâþÄ}Q=¯{\ ^ Ër¦áÞw¦O’¤‰‰ VÏ<|°ØÌÈ: [Ãæý*r†¸$)Šb1Õ-F>69ÛC0ך3¡V Ö?!Ôú/Ÿœ–•-4µþ )¤RÓø,›Æöe¸Šé1ÓÆ{O÷vtv(ŠÒÿn¿2=ç3¶¬n=g~Êø}ÀöŒMI*í/·^µï´Æí¯´gæyð<p:Ž£Aí è=b1XžÇÁV—ÿBì@™†ñ1„ÿ˜Þ)Iþ·n­ï18ö£ÿLákͦºØ 1~?yo€$IßߺuKmˆ{yûýg²“@ð<Ïó<Žã:Žw4469y!‹h ËIàØt'Ñ#‘œ}ÕPmH$‹¨ !"åSÆuæƒ÷„,Z§ñY6ËÓàð{Ox·ül‹q±qWãrF4îl \$¤„½Þnßi?Øv0:U¦Û¶ìUM†.¡÷bßBI€2 ÏUäû@â7Ñôïðï '@ج)7ÓöÍ{­ ÎÀP¦–-øp]œ댘ë/lÖ¤„Næ)?ti¨÷ToìÛ˜úg.«V>¬$YVûJý쫉é„Á`Xžš²¶Pë¿|ʸÀ¢õœòÑŒFBJ:ýv×JWÌ—i£IªÀÎoyÚ2çÕ2gªßYï~ÕH$ÿµÑj±Æ¿‹_øô‚ýö¬—Ò]ìÞ‹Ï. åU^ÅögÓ/5=‡¦ç€ðý-{!Ý-|§›pþ#l·Ãõ 8¼&n[?ßk©xž7¬3Dþ±×ì¤]¸xÁ¾Ó¤ó>OÜš(’Hº+íÞ»û³ Ÿµü¯T!x5¸ýÙí˜Y"Fš–8ޏ—ý0ž™»e¡I‘é&Žc&69i3™D&E³‘ϼYž±:–GEÊg×(¨Hëß73a@Ñ,$œµÝÝÕMBÈJ‘“²ú)*'e¬ž OË ®š ß÷¿ßö½³ÚCʰÿÜ~ûöíÉÉÉžÞõÇÞwz»ÞÌî@* gª ÞI? Š߀ý—`Y0Õ`ô(κ–§Ñû|'ÁqhÞw;ú~ ŽKŸªiWÁki5ïjŒòv¢±hï;½±@0Àq\óžfw»»ï·}lj¢¾nÚÕ4÷î$Á8TA¼#zgÖ—ž CÿûýÞã^íþ 5!Þù <æ1X~0gƒ­€6‹Å{58ò˜)¡È=¡wÇì8ªÑË£-»Ò3—gñBÖ jý—ÏÊÏȘàkç IDATU$ÐùF'Š \ twu—«f„RÊOòS톺@"‘himIÜKFß›>ë3sS–;ÀÖ°uÏÔ% u¼}§}øÿ ç6¬ù 8Ý‹–V( Lá:„±ß’è~ »[$ÌObðJj?‚ƒmè8 ¶çýð¼ŽÇeF#/¢iWáki¸^qµ4·ø4‰"ØfÕ¿T¦¦Æç£ŽfùŸ÷Ÿ÷¼îyü'+ÓŠÑht¼èÈêðøÓ½§[Z[E1m4¹¹Æ~?U8á¼û°»»«Ûô„©ý•öÐBY¶¾Øú¸ð8æ7àŸº¼Ú 5ÑEÏ/›~9ô£Ó>u€L é®üCð³ Ÿ©?Šß‰–g,Ôú'DE€òaôŒ,§s²¥Smòu¾öçWiZqßI_îã­ÀÕ@ó  «Ð\;í™_ŠúÎkWïZN¹m}g›Ó?à_Cë”ÃÒW^å²Vv½ê²×Ûµ)b y”-´õŸõyNe ñóòu>ñ+/ªÀ׺Ö@`Ň'BÈC·ÖW.ŸÌĉJ••ª(7s!2Š”£gÔ`ã ÏÈz®©ýQÛèîê^ÊQü㛟2# ¦š9ÿÑyÁ,”>ìa§äÞw{3k BHFe¬L!µþËgÍÈûÔ?«cnø^: dJ?ƒÁðàwvÆ ¬æ"%¦½ïP€’E!$EÊG›ßl¹W.¤äÒ`…}§=öט<%Ûvس Ô öz»úÔMEŽã\‡]V‹µÿ½þB<ÇÝܶ÷WÞîÓÝóY\ŒGµþËGÛÚOw²Æ«,¿"Cü;:;Jä-ÈÂÖ°ÂfÁj±jŸÁÏ¿@!CŸ ^jÓ&Sï;½l Ûº§Õ´É¤NÎzU{ ¬È-{[ÔéÂ_:èÿ²f †¾ú¢Ñè•À(pv«û»Ý-NŠ_ÿñë‘Ñ‘áKÃCŸiš`©õ{¨sŠäï!Oáþßa2a_ëC8a﻽Žs/!ËS²$Iç?:/Ý“„ÍBñ7AœX-óm¾ç%MK‘‘yöü÷ˆ8¥Ü?ê¾ìù#áÜ2†qZ,gw5gíçyÞ¶Í6ðñÀRjKH[P`¥+»Æhç¬p ç”/÷+«LéÎIÑÏó’”ýÉ{Ü+Šb8ö½åS/e+^€çùÌC©9ÛøÀå@t<¿¼0À?àߌ«#²^Õž­aƒ¡`t<†#aûÎ’©M !«…ç¨GxBÀ¸¶—ÚB7BêþáKîW\,ÃòFÞyÀyáÓ Ú£ÊP¥û?ðóxîÇ\Ö«¢{=8, ûNˆwÒûû߃É–·Î—ŠŸeá:„È_f÷ÈSp¶ãÀÖÀ±™gñ…®•1|i¸qgcÞ«µ‚ÀoÛaó¾á¹ŠìlsrÇÖ°Žýõ‘ÿ–ŸmÀ²,˲DQ´×Û9ŽcYÖ¾Ó.Þ3oH¦/”þQc»m»ö$Å D"Þ6¶ | ë©«óGòô¬<ï¨Lë²ß|;‡.¥{ƒÑñh:÷!EÊI;`%#žcÞÌWîJRÉš(œ½±À!„”I`,`yÊ@üNT¦s­YÝo©µÄ¾3bf"ÿ¸õ?·&þ6‘ûRßH&&Àêqð0ˆwàvÁ?YÆÄ-8;³<…þ÷Q÷Ììž}N$$Lü ÷' Šð¼^ìZ¢(&î%ÌOš‹\«í@[àr`æ*ûRbâo÷'î‹¢èyÝàZðY–3C€úÎôI’411ÁêÙƒ‡»“Y'akؼ_â’¤(ŠÅhT´ùØäÂ7›kÍ™hƒP+Ðp B´(P>ÚÖþÊgRå]L¥V7x5¨V20ÈÚ³Ð9„R±ÀÀ‡ç?9@R$“~Ì0Œ2=çcvæôt÷ä}žÍóàyà8tGƒúü]è‹Áò48¶ºüçdÊ4Œ!üÇôNIÂð§¸u l xÁ±ýg _k†:_‚©.öŠ_ÇOÞ› IÒð§Ã·nÝRâÞc^Ç~Gÿ™ìiZ<Ïó<€ã¸Žã óJ¥H£\N7óÆ2z$ø7ÈPmH$‹¨!Š”Ïjœ;ò'£óNÛŸÝÞ`oÐ`oØþìö¬=ËUMBÉ/p9à~ÍÝ×ßg}ÊŠ™¦¿Ú  (JV3w"j&ƒ\C—`«K×ih„2 ŒojnÊÛŒº4d«³©Ã„ŠŸ|X=H3Ñ% ãЉé„Á`x¸µ"¤bP |VÑ€Œ"€Ôü,gm !DkèÒ»Ý}¶ÿ¬½>=‡Œgª™Ì°ŸÈx$k ËJe’îb÷^´ôwÈS¸2:ûRÓs\†ü=šw¡eo±“˜6áüGè> uo€‰[§f¾ä×Rñ=•â¼ÿ¼çuÏã?y\™VŒF£ãE‡º:»æîøÓ½§[Z[E1m4¹¹Æ~?U8á¼û°»»«Ûô„©ý•öÐBY¶¾Øú¸ð8ŠNPõü²éà—C?:ícôŒk«Õ9“4zWÚòa¿|<ýç쟺æl¤NúHw¥à‚Ÿ]øL}IüN´JRagî¤×ß5íèqíRŠ´Â˭甯ÐÕÕ„?EÚ÷«†g¨@V¡y~H^}½óôÛ]žc^máÑËÏ1/ÅÇ®ÆöÌ/E}çoݺµüÕȰ×ÛcU»X™,}%à5$k%`׫.{½½åù–âGòHYP ëóüôÛ]+]ýUÊsÌkÚÑ¿êÀÕºÖ@ ëÍ®Üp-!„¬ikn%àòühp¥«°|²Òåf1"äG€òYcsf;':æ.ÝB!kÔJÍ „ÕŒæ”ÏjY «Ñ¯ýQèîêîîêNPùèt˜;ÚÇþl±4 öz»ó€Ó±?½Ô¼<%ÿèÇ?ºõ?·ÔDÑ…H’ÔÒÜRhjš(Š‚ d-0œw'!„äEBÉE€òѶöÓFÏ+ÐÈ;ò'«cÐÑÙáëêžmô§R¹}€"œœþsþL`øÒpݶºâ­ÇjýBÈÒÍ?@}BÈ£c£ÿÉ<­ÆuŠ˜ÓúÏ¥ÓWŠÞ¼§9t#”Iîæ?çwpÊS²m‡M0 B­`¯·«ÞDQä8ÎuØeµX{~ÓÃq€¼%U®W]B­`«³‰bö:ðñ›qÛ›P+X·Z£±(ßIŸÉdR÷ä–'„«q@º™D@³Ô @FÑ|Õ,˶îiõŸó?EšŸofvdx$‹FÇ£íGÚ݇ÝjáD"aßiGÂŽÒƒb%ëíÑñhãsž×=Yuìwœ}ïlt<Úu²Ëýª[ž’;»:£ŽFÇ£áëa~ÝÂV!„Tš@!¹h@ù¬–9ª¬Æ}n6ÏbY€Ô±@¥Æê88mï ¯ÿœ¿yO³ºšcðF°ûdwb:äìò Ãd§c«Ê_z¨%/8ìÿb×!OÉ¡¡Ý­»ÓçÔ3l [÷L]SsSãÎFÛ›­ŽþÉò¨£!„ä¢@ù¬¢9(šà_•¿s¢ PjÅJuyÎ`(èÿØŸÎ7÷»÷îþ:øµP+ÄoÆ­¶ô2.êrñs(Y£g¢ãQíž`(¾]y{M›Lþüó9!dõóvxƒ¡àää$Ã0¶_غNt©ËÊCÁþwû#‰(ÓJîR4€BrÑ€òYcsº»º³‡©2=‡dé“8_tª£wÔ§ï²"# ÞÈP‡/¤`É$ÔUè/ªŒ ¶†µÚÖ¾Nm[óu¾öç‹-Ç[EÿÒÖÄwÒW|%àÀX ÁÞPr(!ËožO)2 ˜{Žyµ…G/S°ˆB!Kå9æåë|bÈ €¯u­äm+¿ç”¯P÷CI*:]º£’wãÊWÅÒ€²v-sŸœB!•J;`峩Š4tÔê¯ÕJÆY{æ3€µˆ8B!ä¡ÐÎXù,@ª"€Î7:lv»úcƒ½AÝÈÝC!„BÉÅèYËk"@ƒû !„BY %©°3‰sVK "‚ !„B!KÁèTke@!EF ùN¦»JR™ñ0w»»«›b d•«à,@;í¥ B!ä!Ycs )R^6P¤}¸èîê^ÐåY™ˆ"~„BÈ2ÓŽ÷©Ì@×›]Å— „¬¬ nG Ų!k…¶µ_™€Ù;Ô逆ú²Ê<²Í&µçS·_I÷²8Ô%„¬!ÚuÒ“€×h ÐKÝ]Ý::R)¤Rén€†ýÙ…eE‘㸅ÖB!„Õ@;` g*ÒgèèìHAóà?_€µE·@+]_B!„¬"•?À×Õ]lØN\AáåâãѦo ÿ1Ì­ç\‡],öm_hõyèæŸ·j u~jݾ òß„¯•©&+¢’n¿’î…B*¶µ_™]n(+ GB­àý•·¥µeèÓ¡ÐõPÏÛ= ­!eR‘ÏþSó¶Ò5-‹JºýJºB©05@û=£ëÍ®‚`Ô‰É'w¾ä䪹}mû†. ©‹&²J,ºQÕ¦_0 B­`µXG¾)RRž’}o-¸O¾¸£TÙ±™¿JºýJºB©$5@û=#F ¨¤¢²,Ǿª â=q¡#¤¬×®ê¯èÒÐ×ü::ù|Ä}ļ,T81è}§w¡[ÜQ©Ì×Ü>ú•—’TF/B¡ˆú‰Äæs!%©ŒÍ¹÷Ø_㱿ÆÕíÉIQ›ÚeìjP™^Žç#áöÇc‰ÂUͽëeRüf”¨^ñÛñy^0ö×øX( Eæ]EBy$h[ûk>W: P®Ì#ÒR÷kîÆ]CÃCŽýyJ^hÝ)ŸÅ¦ðýÚ×÷^[Ãà7ð¾7}½¿éÅÜ W¢(rë9 ö†D"!Ô B­ p¾äj[MÅùµˆûšý›éÏÌü/.Ò³aõL]Eý²XÌ‹¸.~!q7¡n‹wœKÜ“(Š‚$˜êåx>²ôÛ7m0F"á"}€•¡›¹%ŒúQ Ü¾3¿g1ILÞëëluu–Å_B*Qå¯ÐÑÙá;Y4¤P40ti(‰„ƒaTÁyÀ¹Ï¹¯ï·} ª!峈ò”œ¸—̳ír[ÍÛQðЕÀa³E1‘H4>×èÿÀï;éó¼îüh°äQ‹îÉèt˜ÛV\èÝ*I%t5l4r‰„bÜ`¼}3®n›LF£‘Ï{ˆÁÀIÓéƉiÉl2‰‰„a—HHCºŸºQ’2 ,f3Ã0y.´OÜM(IÙRkθl·o0pæM¦øÍ¸ÚR%2CR†žµÔšÕ½X,žH$ ‡Åbaôé÷ª¾Þ–~ßBáú6‰i%2fÀÖ&EQݹ<ÒïêÜw2r=,+ŠúP¿®Î’{k™_„4-È”Ìý­@‘X,1-1`‹%÷íb&~;~ûŽÈèÙÌÛE!kšv@ef*=¢©h åù––ç[Ômïñô%$IZh )‡"üË5ºZõ„ã‡ý_ʵêS¦ò jþÊI%3ØÃ°Þ`~¤îäÖÍfNI*±XLÝ.~õ©?SÍ2zÖ¸Žß‰ï& ë j:‹Eý¼LÜ“b±˜Új̾Á`~Â4yOŠÝ¼]·ua€ÅÝ~ƒ‹ÝL•‰ŒÇ,f3SÍ$îI‘XÌRk–“ ·Þ`6›â·ã±XÌR[0`[6™ ë¸ù¼™£Ð=¤röä#'•¬wÒ²Õ …3õ ÜZú¡-™÷·9cúögþd³Îb‰ÝŒ?ÊkœB*v@eF”¤¢ÓéÔvRÞ+_]YZ} Y1‹hå³5¬a!‹f‚ÁPÐú´s{ËŠ2ßÅUœöøìN©T‘[VÇÀäî7®ãònbà b"Á%#g€>Ý.L$$“ɤH$¤Xü6’2Eóaöäúô¶ÁÀ*Ê‚Ç .îö JBJH‘ñìIj y#ûN¸ÈÑÒ´b˜-¹ìó Š¿“Eo-KžßZÒ=©Î2óoF_𜜋D"ÎÀ çBÈ*ÄèYË•^ ª÷ dí)9€U++0ÏÖ¡÷¨×}Ø=òù[ÊwDïÞÁAœS’JüfÜ´É4x1=¶ÇPm˜Ó¬Obä‹‘¦]Mƒm;ló=jt:]æÆæ _D‡GÓ?aç—á€7bñÛxÀð¼€ÁÀLNŠr†™ Áñ˜}«•©fE ]ç¹–4Uà¡Ü~"!ªg›ªÚ®QÞyÌlûú!~*ªòüne>ïdÖ­ú-çý­Íçœê¶ZÓŠ”b7oª'ÍæEÎ0!„UBI*ìÌhÆ5Ÿ(¯Î7:lv{ƒ½@ƒ½aû³Û³ö,¾®„¬¨ÅeTt½êjÜÕ¸åg[„Z¡éß›zNõ¨MyT¡ï·}6»ÍºÕšIwÃÖ°­{ZM›Lêt^ƒÁ0zyT¨†¿N/‹1£j¶[33³Y—ûRÙÖqRBš¼—ôÏq†ØÍ8Ÿyî›’ @ü»²<_úí'RìfÜ´Ézpnr2]ÕÄtzãä= €8)¦i뙎89{_\53SrU }dôŒœéÀ¸µ<òþÖôà \ü¶8[¦À9E1T3¦Çx³Ù<™Xï!„,£gÔÔö;€V™!$—çˆÇsÄ“»ßÙæt¶9ÕíL"ÿ€_ÝPÓþôŸé_ÐQ‹¦ÃœgÞºRÍ_í†aWÍeÒ œ¬Ä6šÒ ‡y“) 2z63+ –tûÕŒÅbÍ„,,µæX,Ç•$ Îl6±zFº;¿y[Õª³šM¡ëá¬û2×Z#ãáøMÖ`XòÍfÅ5ËdäÇ®=[WgɽµüÇø­ÕY,‘ñؘgÀfþÍdÓbæÒs‚Á°ÐãBÈÚWùs©Tܹ]İFÏäNÓdôŒšÖ&k»$í†É>³i£É´1ÝÐT§º£g‘6çaÝþì« “iå«ò¾F#ŸIޤÞC5S_gÿN4(Kþ>¿væ ,ôNš5CpŠÜZÖ›Ÿû[=r;йç¬ÛJ‰D !E;Þ§2#™ JR™Íy4w»»«»‚ÛR¤"­Èª<Ï/C ¬Gü?㪻ý$B‘tÍ…UVݽBð(¬ Î(òw(p5ÐÝÕ½ Ë²²*¸]µ"›Õc5Þ¾~‘Ï¿Wã½Bð(¬Ðõf—÷ "d ø&|m™¯¸ qAå¶ü·_>•t/„Ry´s*3 ÐlF§[DAB!„B*IåÏèîêîîêV×Ðs‡OØŸ]pPQA õ€ y(F/Vº +©’n¿’îeñÛ'„¬žc^%9ûyU™s::;|]ݳþT*·@YA”Å‹BYê@›ÊŸ0§õŸK§ ® ðZ`C—†F¾ IÒã?y|âÖÄB«G)„Zÿ„BÈRD#Áy–ü©uûé·»ð(¬ .¦3'kJV@Ÿï°-ÿÖâ~Õ-Þù ¼ÿœ¿uO+[Ã&¦ ª!„B!e"XJ'´ÐN²ÕÎHO^£€¬ï]ovÌ™¨v’EO]×!Wÿ‡ýúßïw½ìZhÝ!…ˆ¢ÈqK[[ŠB!@4,þ¥-¬mí¯ù,@Úïùû3Ú @Ñç!çàǃËÞÈ µÂBëF)dyV#„Bˆ–vÀšäÕÝÕ=šLX xàyÞVgsìwÐãB!„²ÖUþ:%–M-à<àT’Šcc¡#„B!d™ýÔº½È«Œž‘åôveFJ÷gJE®\‡\¨JÿHã!„BÈꤶþ‹ô”¤ÂÎ<¯Ì€’T2C€òo”еÂè£íGÛZ+BÊ'3}Vž’}o-ø¿L†öpI’ìõöEŸªé¹&n=Ç­§I½„BȊѶû õ=£>×®Ø9j&x5 Œ‚WƒÚ=%#Ññh8¦\%duJL'zßé}(‡s—þO±(íGÚ¯}umчB!d‰r[üyû•¿@ç¶?›¾ù†™5¿r÷²5؉„šŸ*:ߌ;Ú‰D‚a˜óç œ ­/´†B!ç!çàÅÁĽô0®3úü&“I{ø•ÿº"‚:¼- l;¨(ŠÑhúdˆ[ω¢(‚ó€30’ÀŸ.°ï´‹¢¸"o!„B|ž×“¸ŠZ ¯Ôü,­Ê„¬˜++ƒ!:ŽG8ö;ξw6:í:Ùå~Õ ‘HØwÚѰëkdx$‹FÇ£íGÚ݇ݹ‡gìÛ¿¯ãDG4µ×ÛÝínug"‘¨¯¯GÂ=§z¼Çi_B!dMÒ¶ö+3@È£Cž’C7B»[w«?ªý{†aZžo€*o»Ov'¦HBš.8‘]ž’cßÆÔ£/8ìÿ’~ÒÏ0LÓ®&¶ŸÛÔÞ!„BÖí:éÀ:Êw2P’ÊìÝÎÝîîê¦ © ŒžÑ>ËE‘afÂ|°{ïîBžz IDAT¯ƒ_ µBüfÜj³.øäÌlÄpÅ?(!„²8Ê€"íûÀÕ@wW÷‚.GÈêa¨6(Jú?,[ÃZž¶øüÎ6'€ðõ0ÿŸ))+2’à<€þ÷ûsÏ`kXó“æ‘/Fšv5 ^\Jj B!„”ÛBShjçTf ëÍ.ï  D*[öîi5m2± }2ähsô¾Ó++²m«­§·G[²£³CØ,ðF¾ñ¹ÆÜïüוLáó?Øvðèñ£ÆuÆ¡O†æSžç$î%Ô šL!„,ƒâk~åUùsfïPÍýOC}HEЮFçðÏîßÀ.ÏIå©]´Î{Ü›™¼›Iÿ¯=ù¬n[]îU2·¦}gfþŒa˜/G¿T¯®žáþýûõ¿˜½JöïâP[û´k÷Ü¿Ÿ©fÒUúÛ„ñ1cú*zXž±˜Ÿ4~å°úÖå-™q%peãçs×Ú7§äþ¼u&„²&dÚ%¿«Í ã¶t£ÂøÔáŠ] X§Ó¥R)y7®|U, (!kˆ:„Ã{Âë?çoÞÓ̲,€à`÷ÉîÄtIHÓéå{óLd¯Ê_z¨%/8ìÿ2g¶€<%‡n„v·îNŸSϰ5lÝ3uMÍM;m;l¶:[éJçœ_ž’c߯2;{ßí-V½Â•ѾÊ0ŒúœÛös›ûUwîU2·¦}gfÚfƒMÏ5°>cߎ£èè©þ3ý‘H$w°M.~â>·ž“eÙóºçàÿ{°dra5¶Sä®Õx’PÃ#êKÑñÁù×™BȪ²ÄuÒ€5: ÐQê¯Õû Œ²ö”œ@ÈZaÛa ýûÓ‚`÷ÞÝ_¿j…øÍ¸ÕfUKæ™È^ dqŒžÉjYCÁðõpèzÈ{ÜkÚdòàϔ̔Q”…ÈÌ£z¹•™}Is¿Å?â´% m?ƒÀßÿaÿµ¯®©°ŒÌP+¶†'EÓc&¨‚:ŠeYÏxlÏÚ –Ȳ<|iøVôV‘»VEQØ,”l÷¯3!„ÕoAsF/ð(¬ÐùF'€íÏno°7h°7lv{ÖžÅוUÆù¢Ó}Ø @}ú.+2’à<€þ÷û‹X°d#_Œ¼8¨v02ØÖò´Å?n⇯‡ñâѺÕê:ìê9Õ£}@Î8%©¨If/9?[ÚŸ4gv©ž¡ÚéKä©LQYW)’ iA/ öžî½¸–7KOã//\¼Àÿ±¿ñ¹Fx<˜9öãAëSÖ‚%ß×m«ã7ð™»XÐ]/¢Î„BV¹G}€¼æ9vjiU&dµppFþÉ akØŽÎa³`µX‹§¯-TÒ`0 1,Ô Ã_ « ái }24xqP¨L›L½ïôʊܲ·E•{ð¥ƒþ÷f³¡ }¿í³ÙmÖ­VeZÑžôòhÖùÏœwq[-ÖD"Q¤zl Ûº§Õ´É¤tɪLÉ÷êüGç;Ot µB`,{k%åÍ ºï¥íöíêdå¬b}gúüçü‚Y˜¼3Ù~´€4-Ùžµ©óŒC¡ÐÙÎ*©ÒŽÿQ-è®yž·Z­‰{ žç3‡rëL!d Yâ:éañ¦=®]Ê"ZáË"æ²úeu¾ ½8úzçé·»<ǼÚ£—•÷ÿBEA$){@?!„BæiAµ9aÚÑ¿êÀ׺*s€ïd:8 $•ÙxÇÜíî®n B!„5g‰s*3 : Hû>p5ÐÝÕ½ ËB žçéñ?!„²4 5-úÒjD!„BÈj´Ä9•™h¶?£ÓA§[t­!„BYm–¸@eFº»ºujÓ?•B*•Û°?Ki@ !„BÈš´”*5ÐÑÙ‘”¯@Èš#Šbf¹(ß[ þ/“¡=!„Bææä¡tYü³‚úbgnù·–ðŸÂâ€ÿœ¿uO+[ÃH$ööp$ìh¥†YI ö†D"¡®½ ~3nÛajëVk4ÕvVûßë·í° fA]ï)gž‰*GÂV‹U0 öz»tWÂLÌÁsÄ£®Z•ÛUÈt•í;ìâwâò½„BÈ#lqYN¾æ#ÚïŲ©’EO]×!Wÿ‡ýúßïw½ìRw3 Óò|ËBëIÈCw%pÅ`0DÇ£Ññ(Ç~ÇÙ÷ÎFÇ£]'»Ü¯º¡é¬º¹F†G¢±ht<Ú~¤Ý}Ø{xƾýû:NtDcQ{½ÝÝîVw&‰úúúp$ÜsªÇ{¼àÿSßiýï „B–Çâ"ìÌð5¿€ö{FþþŒP;E#œ‡œ6›Í¾ÃÎyõ!+†Yá8 !¹ä)9t#´»u·ú£Í›í¬V!x#Ø}²;1@ÒtÁüò”û6¦åxÁaÿ—ôĆaÔÇü¶ŸÛÔÞE®þ3ý‘HäÚW׿B!¤€EΨ*x@: P®LX xàyÞVgsìwdÿ²j1zF}œ†#ah;«°{ïŽGG>Q”ÿO×ö{ó~Pøüýö_ù¯+,Ë.ò!„²4 ŽÎŽ •Špp*Iű‡†û“UÇPmÈ4åÙÖò´Å?àW _kKÊŠŒ$x# ÿýþÜÃ3ØÖü¤y䋃ç™hðÂ`ïéÞkk™‰„B)7Z Òý™R«×!—+Àó¼$>AÈrbkØÖ=­¦M&u|ÚÐ'Cƒ…ZÁ´É”•ˆ­a;:;„Í‚ÕbÍ<ËÏ:<ãüGç;Ot µB`,ÐóvÏ|j²ï¥íöíê$ã‡t„B)f‰ë¬ù9y)IE§Ó©A€¼W¾*–€P+0zæJÑl¡„,3m/4óÈ¿\ž“ŸGÛYõ÷f&ïfÒÿk϶Z¬ê¢¼Wäy^M ¤•zP4ÔF!„2Xâ:éÀ:J½ÃàÕ z_±@Öž’€¬ì(„B!„¬ ŠŒ^`î€ÊŒt¾Ñ `û³ÛÕì êFîB!„BÖšGj~–VeB!„BVÀçTf B!„B*ÍÈÃw2ÝP’ÊìÝÎÝîîê¦ !„BYsh@ê€"íûÀÕ@wW÷‚.GÈ*d¯·;8ûÓ«UÈSò~ü£[ÿs‹çù"GI’ÔÒÜ ä}UEA²’ÞæÝY&¢( ›…ÜŒC*yJî}·7“×h5p¾äŒ\(ŠÂ0Lß™>Û[ÉWýø}§}¬ž…}gúÔ ªMÏ5odÝ»ï¤oøÒ°4-ñF>x5¸Ðêå=mÓ®¦è·QVÏÖM›L‹ºuB!+ƒæäÑõf=Ý'ç§ÿÜlBÏáKÃuÛꊷþpW¨õ¿ú%¦Yk¬¸¾ßö…#áh,ÚõV—£-{éÀÜWå)Ùýš;øU0‹öý¦Ï}Ø­–l?Ò~í«kY‡÷œê'Åp$¿º0T¼&¢(rë³WdË{ÚÃ/ŽßŒGcQçgn !„¬r4 Ù;Ôé Ó-ºV„¬rÍ{šC7BâQýÑÎï<à”§dÛ›`ÔŹâñ8Ô¦!ǹ»¬kÏozÔ…{ó–T¹^u µ‚­Î&ŠbÖEã7ã¶6¡V°nµFcQ¾“>“ɤîÑ–W/:»½žËìt¾äÌ:øzX0 V‹5Ó¾Ï[½{C"‘ju³ÜÊh/í9â±Z¬&“)Óá GÂV‹U0 öz»úD<÷ñ›=ÊsÌcÝj5™LE½³,«n$î&Le?JÏ}•­aMMRB %$ó“fµ€}§3d7ß{ßíõv¦?ëø |¡_AyOÛ´«)ýê»ø]ö¯˜BÈ*·Ä9é„9Æm]§ßîšgòœU¢H…ÕÛKeÒåæR Rfß„¯©ß‹~» €úO:kÉK´hSC^›0 ?üðCê©û¿¯¾úåç_6þkc*•š˜˜ðÙðgê¶Á`H¥R%Kv½ÙÕúbëœCR©ºmußüù›T*õåè—õ¿¬ÿáû Çßÿ®Ð?fë¦=jbb°ÎPèü©TÊü”9³S-Y¨zéWóUF{i_~þe*•úì“Ïê¶Õå^%skÚwfö¨áφùrôKõêêîß¿_ÿ‹Ù«¨îß¿o~Êl4FãÄß&æóê×üš©fŒ3÷˜{w?|ÿSÍ´ÿG»ùIsã¿6f/r×ÚÃKîO¥Rm‡ÚÚÿ£=ïK„BV³L£äwµ9aÜ–nTŸ:\™s::;|]ÝøÿÙ»ÿÐ6Î|Qø_¿80s±Aó’‚ti!sh š]—hZjeŽåM¹‘ob9Xn‰Ü6ÖfÙØN9±œ²‘K¹¥­ÕrS+…ÔJ ­\hÖ.lˆõé°NFËñvTN–U8)p7Tñé 7¿<Êx¬#É?b[þ~®6 hajj'¡jD¦pøÎúBŸ†Ú¶“þæØÝØð¹ay^† ¤ç³3¿)Šrp-ɼ­pJ¨’Ò}ØíxݡϡÌ)ñ»ñŽÎŽì9k)ºžnzµ©­½Í¹×io¶Û›–Ì€/,ïüÊœ’ü.©ùpĨxÅ £—¢(ÒÏmÿ…Ý{Ò›íÖôOf1×kv¨…¶}mÀ¿Ê§¤ Èì)†aÈÖC熼½ÞÈõHÉw»Žt}qý‹¶}m ïo½á«á‚ÏIͨê¼Êî`Ťü Ø}¢{òÆdÁ»&ã!2÷ñ±;ÙÐ¥–RK£ª•ÿ‘)£xù…Y|Kw¿Æâô)‹½.ç¤û wpO°ä»ét:õ Eš®ƒ®lk§†a(Šj?ÐÎýΡ‹Ù©’ùwM¾%ñÓendº ~¼óÍm’B¡Íby«ÑÙŠ•ÆÔÔäLý'ƒšZ0Öu¬ËÞ/ÌêLm0ž7<$”ô¾+ª°˜-ü¸h}Ô(e&oL@øZ8gMºž¶í²….g«øÂŒO@z(ñ|ωžÀ…€¾ƒœ11jFMÝO‘SœŸ®§­/YµƒÅ3Õ™´¶DÂʹ Y{g…Òé´ÖAù2ÂïâK¾Ë0 UG ¢7£Ö­çwîwF§£›Ž‘hJﺠðÕðÈÅ‘;Ñ;ZB¡Md™1ÛÔ*XHÿUc´ ™ ”1:sÎÞúhqU"Ø£ïÚv¾‘WçUýù§nNåœüò¸÷”—·ñ²,®§;v²;Y2Ñ%§0%ŸÕø•ñÁ³ƒ\½Í¿µ’ÒétN³A–åÖ×[¹޳rñéøØ¥1}²‚ï’btuvqV.øIpô£QrÐb±ð„Bëk%«Q5¤¢Ì6zö«ë¸·î2b øÎú´½À–x ޶îi-ÖHPæ”ÿöÿþ·…' @&à ´<9ïb¦nFûß¼øŽ¿ï´OŸxêf´úv¼~–[ „BU©¢R`›©é>°4ôlú€‚†ýùS€­Æo8Pp6B!„BîPÀÀà@Ñ)@D©€ìl„F^ž—+-BÈ€ÅbÁî„Bh%V¸@uŽ”nÏŽßȧ¡÷w½• !„B¡µ³Â€êP3ª6¨ð‹R#!„BmL+€êˆMÇÈŠ„ÑÛÑØtL¤ä€Æb±`0B!„Ú80 €Á·`÷žÝ­ŽVhu´îÞ³;çÈòËŠÐ:‘$‰¬Ú®Ì)Cç+þ•Ñè³ç¯kYÏqoã9+ÇÛxÒÌF!„ÐZÀʳ²"#´näy¹œ5ïËÉÎ0Œ~ë®J¾?*$1)úÏûÝÇpÓ „BèYÀ„¶œVG«,Ëdï-HÝOÙ›í\Ç7òbR$='zxü(ho¶sVŽì÷”J¥r²k£ $Òïhq™oäݾS}¼gY6¿©@Ó4y!ÿ]fŸgŸÝ#@!„¶°Ædƒa7é@±\Ú.`jF]ïXúzØ?Œƒh“º½Å½Ì‰³"ùÖ}Ä=viŒkà&¿žôžô†¯„eYvìu? Âè<ØÉ<ÇÀäIï ïäדúì’$i§í:Òå?çwp òözÃW ËrKKKàÝ@äóˆïŒ/_2Ï'NïÞ³;ý8 Ÿ„göB¡­¬¢€©›QXZÛÏ6¨Z `=ÛËØ ¸d €Aý>:öWt9„6&eN‰ßwtvoI+—¢(×À6ˆÝ Ÿ–çeÈ@z¾hD»2§$¿K’\îÃnÇëÙÀŠ¢Úö·€ývïIoN.†aHC‚´"×#«~ƒ!„Ê1øïÇÞ}´uPµ”8+’BBŠz:Ì÷:uŒ]gÅɯ&UµâßôÅSþ¡p¿áÎ@!„ÐÁ€«)55ðtù„ª†©Î¤Uåézڶ˺"ß 3Kæá(ª°˜-ü8˜Ÿ]C×ÓÖ—¬“7& |-\ÎÒ@étZ[$7òe„ßÅ/ÿ–B!T¶å(J6{uŽ û‡kHÕaòÛŽ=FË€êÃ"—¡dvI’Èœl„–‡®§;v²;Y¹ _ s »“ÍYˆ®§¸—9ÞÆk}ù9Ù5ãWÆÏr \ôv4ðN d1dYn}½•kà8+ŸŽ][½[D!„PQË Ÿî„[1ƒCþaÐf‘6N B›œÅbI§³=îZ—?X^°Do.YŸGK¾3>ß™ì/‹¶ü¿>»–˜·ñdQÁ+æoŠÇ²lNz„B=ËŒØPÅ1Kjÿùjj¢Ñ[å\B™Sò—PÌ.ŒxzqaľÓ}|#ϲ¬~#¤ž“=\go²k«¬3Ù/Ië£-x~„B!„ ` @559Ó~r&ÕB9hŠžœ˜“¢8+öžêõžÈ."ËrKs‹ïÚœm---ÂŒ0úÁhßé>-£Å!ΊÎ}ξ·²»ŽuùÏû…„`ª3Ÿ!„B¡bV¸À¦ÐÕ­DæeÊ»Æ6ˆÝÙ›ì\׺_øKv¶Ã∯١Úöµÿ*Ÿzð´ ¿´åɰ@΋ÆçG!„B¨˜•Œ@Œè¿j ·gô‘å[BQ¿0b™‹$Vt~„B!„Š!ýúå|Õ&Åè÷¨Î€‡ýÃ…7úÕŽ”7Pp Ųd`òÆdÛþ¶ðµ°½Ùº5ÉÁ•ž!„BmaZ×¾}{õÇ ”ج̀BK(–Ãd2MܘฉÚrŠã—ǽ§¼¼—ey…çGˆp´8ÂWÂÚ·ÊœB×ÓZÜy1étÚ`™ÿ‚ëØ®pmÜŠ¯“«Ì)ÚZFDÛ¾6æ9¦X™Ûö·±;YÎÊÙ›í©ûÙY‚ÒCÉÞd笜ë€Kyº,sÁ”žãÞÆ“õôË âm<»“%] «Ræ‚@!´a‰‰˜ñ?}⪊(¨t{Æp@¿ô¡ïŒO’$!! "k [Q{M„.…ÄYQ˜, IÀ7ò©û):¬åÊ??Båóõ„>]\Ðsâˉ¦×š´ÿåŠa&z;jœfÃ’ç圽Ö]ï©Þ;ßÜ)öî‰ã'R÷SbRôõ¸eã¼½^ÏQ˜Í/˜µÛ)˜rôýQ!!ˆIÑÞ¯ \H$!!¤î§"W#ÆÅ+Ø *Xæ‚@!Tª*  5£jž ¿(3¡­ý`{ün\z˜íò}òõ,_Ûs¢‡·ñw¤;ß`!Úüul5©û){³kàøF^LŠ0tnˆeYrDŸ^?n UCÉAÏqÏòÖÉmu´Ê²Ì5pd³üÂè/Ýwjq¹ÞìUéPw´8H“;ÿÉ”\ä7‡c¯ƒ1² €£Ù!}Ÿ½Ù©¯§:w€û°{êÆ”AJš¦É ùï2ûâûhLœýçüÞ“^eNôŠÿ.f‡¼¶— çwîs.oÜ[Ñ[&“IœÅY1¿09WiiiBàB@Û ­ëH×ÀÙ1):ZÞÞOÆx‘_ãÙSƆ.‘uÀÈ"]Oû<›ú>w²–’$æ8‹ÅÒ÷V™î¥Ì)²,\á¬\Û¾6­ùgð(–]T„BUCP;¾=»÷ì&ß¶:ZÉ‹ü#mvd¶†ï¬/ôi¨ý`;é0ŽÝ Ÿ–çeÈ@z>;µŒ¢¨ÜZݶÂ)õëØ:^_RßUæ”øÝxGgGöœµ]O7½ÚÔÖÞæÜë´7ÛíMeLIÏ;Î:¹#ޝxaôï..×û ;©ç\E»5ý“1^äwÙ³§‚‰„ÁL¡b)†!M¡sCÞ^oäzDͨê¼Êî`Ťü Ø}¢{òÆdÁGAI dÌ„¼Eζ*EE!´‰è?%«s ÀU‹ÇBŸ…²ÁO ãPǽØ=®KÝOñvž¤,h^$¥1ª–Ê©DÆâ1aFˆÏÄ}g|ìN6t)¤¥ÔÒ,g•Û2Š—_˜Å·Ê^¢·ØÂ¾+ZäW't9ü$xç›;¤y¦Í¿¢ëi鑤MìÉO©ç~ÃÜ$Ù)Šj?ÐÎýΡ‹Ù±ÐüGA¾•$‰{™+Yï/Y„B›ZõÇ ´¥xÞðé1¤÷½üåe‹¦ÌÀäIÐÖ±ÕÐõ´m—-t9[ÅfxÒC‰oä{Nô.ôæ:í~ IDAT䌉Q3*YOF[ý¶àùµurõ) ÏTgÒÚ c(ç*ËžÌS‘ðÕðÈÅ‘;Ñ;úe”œ¿t^½vBŸ…œûœÅR¦Óimm€È—~W¶ äÜïŒNG 6³¾d…ÊEùEE!Tª€¡sÙæ„šQïvéë ´ yŽzßôûÉ·Úò²³E«\T,%YǶÿL?EQ“_MæäŠ\¸¹GÞQTÅÞhûßc®C.y^ª– }´¸*lƒÑ÷Gí»Ålqî]rþ©›S9ç¿<îêt žÔêå‹G×Ó;Ù,MÑ⬘S˜ðU]3£ñ+ãÝǺûÏô›·›#×K¬Ÿ“/N»Ú]9³€È²Kòc™¼$IŸ¬ëŸ»ÌfónÇn0o7“ƒ£Œº¹FÞ±¾dÕV ÎO)˲«Ý¥fTÈ€õ%ëØ¥1’rôýQ×!×°Ød2iëÀVô(òË\¬¨!„ªƒ> †T‚Ùæ@Ï~uûÔ—`€,øcP¿NG[÷´b­5m#nãdS7£ýo ^|ÇßwÚ§O{:^ùrømûÚpŽB!´‘é÷Øô#ú¯£U€H`@¦ÄÉ=Ç=LÓu¬+r5B& \\à>ìŽM—Xt ¡5%ÏË#ï¬Jv†aV¸Ü{øJØl1¯ä !„ZkU ÿª)Üž!ƒ¤a`8Š¢$¿KšêLÒcœíƒ6œVG«,Ë\Ç5pºŸ²7Û¹ŽoäŤH zNôð6>øQÐÞlç¬×À9Z©T*'»>À]H¼ç¬œ£ÅA¦À‘wûNõñ6žeÙü¦‚$IÁƒ¾ÁjÛ¬!„ª2Õ](Ÿ6,PjÀû[¯s¿32qq+s É2ycÂ×Âöf{¥¥EhÝŠÞ2™Lâ¬(Ίà>âûhLœýçüÞ“^ 3Öö:„„ÐófÏäĤ˜ÅY±÷T¯÷„7?»¦ëH×ÀÙ1):ZÞ^/9(ËrKK‹¾3¹¿§ÝÇ»µÎ=!„2Vý1ƒ%63ˆ|I$ွÉî9êéòt€Édš¸1Á5p7&HTB2§ÄïÆ;:;¸®ÿt¿üXŠ¢ÈŒ5ر»1{“¼+üE08Oò»dþ<7Š¢Úö·€ýöÔƒ”>KøJxÇ ;°=ŒBm|ú€lEx“ŽËUº=c8à:àÊVž´.OܺmXT-¥ïË—$i±Kþ t긻Ç5p©û)ÞÎW|r]ï~ΊèÿúzjâÆȲlyÁò·ÿøMÓË» „B­ªŠ(HͨÚ Â/JÅ ´‘™êLªšý5¦ëiÛ.[èrˆ|+Ì,éãWT2`1[ øq0?»†®§­/Yµynå, º’JÒCIø“`2™¤‡ÖþB¡©úcÈƦc$f1z;Jæ3hGJÆ ´‘ÑõtçÁNv'K‚€#×#áka®cw²9«ÑõôÀà÷2ÇÛx­/?'»füÊøàÙA®‹ÞŽâ<7„B¨šèkûÙžpª–XÏ6€Á|žb Ò¾=»÷ì&ß¶:ZÉ‹ü#m"‹E›Š¦uù€åKôæ’õyô3Ö|g|ÚL6mù}v-1oã…Ä’ý- Yȸ`!„Ú€ªj€‚ʳ²"#„B!´9T B!„BHCÕRŠ’}]« Ë6'ÔŒº8Þ±ôõ°B!„ÐV fTúé*8Õ`P¿NG‡ýÃ]!„B¡MŠª¥`@ÇøïÇÞ}„B!„ˆêXlÏÔÔÀÓåÿª>ŽGøJXûV™SèzZ’$ã\étÚ`™I’†)çà‘$‰y®èµ”9E[ËhƒhÛׯ<Ç+³ç¸‡·ñœ•ãm¼¶¿rÁ,…îocw²œ•³7ÛS÷S IRMM ×À‘%ÜI%{“³r®.åéœÐÐ¥¹Y v§E!´aUÿ>ÃþáRõ_X€……ü6€cOÅË€>Ë Beòõ„>]\Ðsâˉ¦×š,‹q.†a6oõNž—sö:Xw½§zï|s§Ø»£ï ALŠþó~÷1·A–‚O?‘ºŸ“¢ç¨GËn2™ÄY‘ü+ùã.Ø òöz=G=bR4¿`&ÏS™S¼¿õƾ‰‰IqôÝQï o©ûF!´™èkûÕ9008°Ú, Bm„ª@ûÁöøÝ¸ô0Ûú4ä9êQæ{³ôã:Z©T¶Û˜a˜ž=¼¼ ­Ù‚)‰ž“=\go²çw0§î§ìÍv®ãy1)Àй!–eÉ}z}³Y«†’ƒžãžœó 3é&×ê÷‹×êh•e™t~,ŒþÒ}§úxϲ¬Öàéw´8ȶùO¦ïôb®¾Ó}|#ϲ¬ÖyŸÏ±×Á˜Šöh»#Ë—ÙçYƒ,¶ío˾Ûì¾7êì/ö( šúzªóp'¸»§nL]O³;Ø´œ€´œ¶¾d5>B¡Í¥ú÷òƒA @MM4zËàÌ‘/#Ú‡n:fžc”¹ì¹A­¡g¦é΃d@z(%þœh?ÐNSôäĤ˜ÅY±÷T¯Ö•+˲c¯CHîÃÙŽd£”-qVtîsö½Õ—sQ÷÷ØGcâ¬è?ç÷žô*sÊ PüwQœ…Á²½D‡49¿sŸ3çü]ǺüçýBB0Õ™ Šw+zKëÿÎ/LÎUZZZ„„¸жBë:Ò5pv@LŠŽ‡··À“‘e¹¥¹EHwmζ––aFý`´ït”š=UP:æ8‹ÅÒ÷VŸ~¾V¥†.¹¸²ž—ùFž³r='{´¿N"¿H@×ÓÀ>Ϧ¾Ï6üƯŒ¿ò¯X^°xOyÇ.-»¨!„6 ê¨¨ÉéòϨ®ÿéþ,^ÕЧ¡Îƒä“Ò¸V„кðõ„> @èÓPûÁvš¦aÄîÆìMv®ë?Ý/ü%»¹/EQZ 2«HJ¨’Ò}ØÓó­Ì)ñ»ñŽÎ’E~,ÓõtÓ«Mmím X'0 CÕQ¤å½µ¾ˆ1!TUª? » P>mXÀxÀb±Ø›ìî#îÅî0ª!´Ž šGbÓ1r_ÑÛÑœ#%GÈZ!„BU} @¶@ÕRëÙXF €AúÁ·`÷žÝäÛVG+y‘!„B¡ªGÕRŠdAéê\h¡<++2B!„B›ƒšQé§sà«3¡ª$I’¶…ÓÐùŠe4úì×µ,¿<555Ú³’$-»H!„ZST-EÖ¶©Úm P5£.F<,}=ìÆA´IÉóòÈ{#¾3Ëlë³3 £ßº«Rd‹ÙegG!„г±Ub ê÷Ñéè°¸¢Ë!´q´:ZeY&;a‰³bê~Ê}Ì-Ë2EQãWÆÃq\çáÎx<îyÓ¾–ËP æíæÐå˲úì·þxK[•_HÝǺUU5›Í‘ëæ9†¬Ùï9ê‰Þަåtèrèìž‹B¡U§ŸïS1þßû±wU±[Ñ[¤ëô¾»¸Ç>gEÿ9¿÷¤dYvìu ¡ç͞ɉI1)гbï©^ï o~vMב®³bRt´8¼½^rP–å––!!.òÇäy™oä9+×s²G™SžÅÍ#„B¨r[b€ì«šxºü?BUI™Sâwã\׺_~,EQ®.€m»³7ÙÉ»Â_ƒó$¿K’\îÃîØtvsAŠ¢Úö·€ýöÔƒ”>‹e»åÇ~f„{Â=èþ—I„B­Œ~€êöתÿÂ,,ä·{Œ–ÕB-µmdT-EºóÅYQH@QO›ôO ãPÇØ¥1qVœüjRU+þM_ê# B!„Ú¤ª*  5£jS€ ¿ÀT-Žð•°ö­2§Ðõ´$IƹÒé´Á2ÿ÷¿{–›âI’Dö+H™S´µŒ6é¡do²sVÎuÀ¥(J9ïzŽ{xÏY9ÞÆk›.;Ïй!ÞÆ³;Y{³ ] ±;YÎÊ‘5[@’¤šš®#ÿ´ÿ¢·£œ•㬜»Ó­mÚ€Bh ¢j)í³¥šGbÓ1òѽ%±ÚŒ@ÕÁsÔútqAω/'š^k²X,ƹ†Éþ"lBò¼œ³×Áºóöz=G=bR4¿`Î/[ÁwGß‚˜ýçýîcnƒ” é‘$$„ÔýTäj”9Åû[o웘˜Gßõžð’”&“IÛZûÀuÈ5vyLLŠŽrÞ+½·B¡j¥fTúixuŽ ¾=»÷ìnu´@«£u÷žÝ9G–_V„6Œöƒíñ»qéa¶»7ôiÈsÔ£Ì)öf;év´8R©<íÂï9ÑÃÛøÀ»Ò_0%Ñs²‡kàìMöüñ„Ôý”½ÙÎ5p|#/&E:7IJ,9¢O¯7ÐúõÉAÏqOÎù…ôˆkuß‚Åku´Ê²Lú¹ Fé¾S}dŸ2­Á#$Òõîhqm òŸLßéÅ\}§ûøFžeY­Ÿ>ßÔ×S‡;À}Ø=ucªœwiš&/ä¿Ëìó¬AÊ‘G|ƒÙ¿u–,@×Óì6-§ -§­/Y‹,N«óª½É޽މÅR"„ªzT-Ûª8`¡<++2Bë¦é΃d@z(%þœh?ÐNSôäĤ˜ÅY±÷T¯ÖC,˲c¯CHîÃÙ.g£”-qVtîsö½Õ—sQ÷÷ØGcâ¬è?ç÷žô*sÊ PüwQœ…Á²½Äø9¿sŸ3çü]ǺüçýBB0Õ™ Šw+zKëêÎ/LÎUZZZ„„¸жBë:Ò5pv@LŠŽ‡··À“‘e¹¥¹EHwmζ––aFý`´ïtš=E„èzØçÙÔ÷©rÞM§Ó\g±XúÞê#“¸ ¦TæY–G.ŽpV®m_›ÖÒ¿2þÊ?¾byÁâ=åÕ6`–çe¾‘ç¬\ÏÉeN†aL&Óäדù<’z°¤l!„¶”ê@hëðõ„> @èÓPûÁvš¦aÄîÆìMv®ë?Ý/ü%»¹/EQ®®%™‹¤„Z )݇Ý9=ßÊœ¿ïèì YäÇ2]O7½ÚÔÖÞ¸ˆÅc¤w¡„¼ó+sJò»¤v°DñŠFÿ.EQmûÛÀþ ;©ûæ\E»5ý“YÌõšj¡m_ð¯òä «5{ŠaqV”$©ç×=Z;$ŸšQÕy•ÝÁŠIѹÏÙ}¢›ï:ÒõÅõ/¤‡Rïoz½¿õ€e»åÇ~f„{Â=èþ—lÊÈDdðì ×À=zühåÅF!´yékûÙ©@›t X®¡sÙæ„šQ×÷ñ±;ÙÐ¥–RK£ª•ÿ‘)£xù…Y|Kw¿Æâô)‹½.vm2]OK$m>O9ï€û wpO°XJ†a(Šj?ÐÎýΡ‹CN§SR¤eâ:èùp`V4M÷ý®Ï¾'.lo² 3DoGÉ „B[“þƒ,Û j)€õlÔæ‹)`P¿NG‡ýÃ]¡ Ëó†‡L!³½U XÌ~4ÈX4e&oL¶ío _ k+Ït=mÛe ]yŽy@˜ø]¼ôHây¾‘ojlru.20&Fͨ©û)v'¾68?]O[_²j Šgª3im‰…i4jÃä\Å`)¤Š8é¼zíªç¸'ôYȹÏYòÝt: ™l}=òe„ßŜǹߎº;ݱé™îÏ0 UG‘`†èͨõE+dWøÙþ,Ìÿüésx’=ü ¸8´‚Bhë©þ}ü¿÷cï>Ú:åÀà÷2g1[œûœùÙoýqqWìñ+ãÝǺûÏô›·›#×#å”dôýQ×!×°Ød2…¯ànÙ!„Ð3Riï¹¾¶_CêÊls g¿ººµðЬî*@½³guO¸Ö”ûÁõ.Z}å·Èo¾%0u3ºŽ¿•!„Ú˜´ÐÖr\|ÇßwÚÇ6RÓ}À4ôlÖU€jžZ£ò ´*žM B!„¶”ò×ÔæÅlúRï_XXXXXÀ6ÚÈžÁ*@!„Új–Ñè¯íoÖkÿhƒÃ„B­ºeô0êkû›o@ëþ‡§ƒkX,„VGB!´êV2°ÎûäTúõß®bà£i;#ŇÄdvÒä÷R׉РÏIQtÏÑ–‘§Àd¢#õ´vJæB[Ž „BhÕUÔÃ8u3 * ï´/ÿ_±Äú¨ßŠ"€Óiå•_ ‘+¯ýUGõ¾‘]%]–¬ý£bÖzÀÑâÐ/¾©Ì)t=-I’q®t:m°Ì¿$I ÔspH’Ä—õ%˽¯|÷¦|“WúL&F;gà_]÷¾ò‰Ñ¡¦Fޤøóoß ÝûÊwgÂgÞþŒêUèÙ[ëÏQO×ä IDATèÓÅ6íÄ—M¯5Y,ã\ Ãä×S7 y^yod½K±H™S¼¿õƾ‰‰IqôÝQï oN‚ÞS½w¾¹“sPœÉ?÷awçáNrpôýQ!!ˆIÑÞï>æ&]‡\c—ÇĤèø'Gà½ìŸšÇO¤î§Ä¤è9êÑRóöz=G=bR4¿`Ö`àB@z$ !u?¹ZÖÎ!„6‚*‰(“> | “­¬ßûÊçïw‘ƒcçÝ}'v·©ªbWU×ÉÐ+ΡW~5ü4zñl'´ ¦ÿžUÐ'×3øáÔ+Ρ،8Ó®]=úoÉW~5ä»8èwUGû~ÝÆ9‡_ùÕÐîö¡Grº¢ÛA› ©Ù—üú3~÷2NÞ~°=~7.=Ìvù‡> yŽz”9ÅÞl'ÒŽG*•‚§]ø='zxx7@z ¦$zNöp œ½Éž?žºŸ²7Û¹ŽoäŤCç†X–%GôéõãZ¿>9è9îÉ9¿0#Îo­zZ°x­ŽVY–I÷yÁÂè/Ýwª·ñ,Ëj !!^vG‹#ý÷tÁ'Ówz1Wßé>¾‘gYVë’ÏA×Óì6-§ -§ó·Cvìu0¦¢üÐg!÷Ùñ f]-/”h7"„Ú8VíJ7¿æ¿øŽáÙ"W̹íxAZšrP/ž ^7,ÏËô|vˆ‰¢(××’ÌÛ §„Z )݇ݎחD (sJün¼£³#{ÎZŠ®§›^mjkosîuÚ›í¤»º„¼ó+sJò»¤vpäãâ/Œþ]Š¢HO¹ývïIoþU´[Ó?™Å\¯Ù¡Úöµÿ*Ÿz‚"³§ºŽt}qý‹¶}m ïo½á«åþ:“í[†aÄÙ숊·×¹€ÈDÄ{Òۺ߹ϙ“=øA0‘HùEÆ¢ 5£ªó*»ƒ“bðƒ`÷‰îÉ“e–!„ÐúZÞ€¢l^ÏU€VhA· X¥-u^ÿ*9[ø©ÛBç>9(Ëi`wXR¤öýMä UKEKdè9üt•ªRu%λ›,zùZ0ogI%þ’Š%Ráw=ES"T ‰ÝŒÅc¡ÏBÙ€à'Ðq¨ã^ì×À¥î§x;ORRT^¥°HJcT-E꩚X<&Ìñ™¸ïŒÝɆ.…´”ZU­üLÅË/Ìâ[ºû5þ§OYìu±3¤ÓéÔƒi'¸º²M—2(Š2ñåÄßÄ¿å¿å~ÃÜ$¯íMvaF€èí(yA„.‡‚Ÿï|sG›8”ÿ(È,)ë‹ÖÈ—ÐbÄId~Ã0Eµhç~çÐÅZBÈÀòV¢Ÿöto”€rjð9d œŒú€ñ²µíî3áÀ¿¶ß™ðQu´–²ïMܺÒsgÂg¢²UUþpR˜¸3áSžVÔyåêâ‡î}µdÍ¢®Ó!ÿïœ÷¦|ö&®ïüT±òPþÀC‹GϹ½þ«%o!ž7<$ö”ô¾+ª°˜-ü8h±hÊ ÎàðµpÎâ0t=mÛe ]ÎVñ…ž€ôPâùž= }9cbÔŒJ–© _ œŸ®§­/YµƒÅ3Õ™´¶DÂʹŠÁRHåc†ª£„„Ñ›Q당1ÅL|>ÑôZ“6ó>N“˜ˆ|áw=mí<]ù'øAÐ}8-¾¹8r'zG ±(ø(Hœ1©ý;é¼zí*„> iƒ ÎýÎètbÓ±üè„BÖ2c¶¬û>PÉþ_Ë&?NÓ;{ò'þ’â^÷€i;ã9íï¿üyìòçÙÇ4ø^vMŒ‘§È’ÿúƒúI;ÿýûÈ‹äwRNX°ü8­½+?Nÿw{¨óJë!\9tË)æû­»>Ì2xŽzßôûÉ·t==08À½ÌYÌ–üy#zÅRšL¦‰ýgú)Ššü*wZHäzÄ}Ì=òÞˆ¢*öFûØÿsrÉó2PµTè#ÝJ»Û`ôýQ»Ãn1[œ{—œêæTÎùÇ/»:]ƒgµzyÁâÑõtçÁNv'KS´8+æ¦äô›ñ+ãÝǺûÏô›·›É›Š¤ÓiW»+gÐø•ñ®Î. ê¨ñ+ã9ÉÈ¢Lòc™¼Ð‚žCŸ†§çx6}×?w™ÍæÝŽÝ`Þn&2~£Œº¹FÞ±¾d ¼“ýû3úþ¨ëkØ?l2™ôëÉ"„ÚàV¸@v=ÛèÙ¯®âö[• \*xu}¯¿~Ò¿öÚ  `½?Ÿi;#~5@ªæëK¹oÔY‹6£œÆwN@«ýOÝŒö¿5xñßiŸ>``êft+׈$IÇ¥Ó¸øB!´LêÛHM÷€¥¡g£ì`PËÑ*úÙËß,ŸÖ1ÐZÓ÷÷¯Jß?B!„¶ *Ù Ø\ é[pö¿–fõ—BhÍzÿV®ý[,ìþG!„Vb…ûlŽ€œ`ßœ×XûG›ËV®ý#„BhåV2@iAÀë¸Q,`%pJ=B!„ª>+€M1PPÍSkT„B!„6,R³/ùU[€D_Ûß”#Å–B¨êEoFûN÷©5-§í¯ÚÉïùŒWÚQ攑G|g|Pd]˪!I÷2§­¯BU mn}­>`£ì\Ñ@±x„6 ÕÜìâ ¸¹„? ìNž@ìn¬t–Bäyyä½l€a˜j­ý#„BÕM¿txI1¡ªTpó¯eS2Š ¹ßp€ûˆ{ìÒ×ÀM~=é=é _ ˲ìØë~®}w´mÉEäd‰ÞŒvëòŸÏ ŒBU¿ðÌlö eA¤âX}·V²B¼….…zÓ;usÊ÷¶/q7x7 Ì)Éï’®.pv;^_æÿÅÎCQTÛþ6°ÿÂî=éÍÉÿ·¸6ƒˆa˜ŠÎò,»ƒÞŽ:Z¡ÏB±obÊœ¿ïèìÈf©¥HFr6rfr÷A÷È{#Ù2,Í’S€‘G–÷@B¡M¡àtƒü.È€*×Àq œs¯³ÕÙx7`œX?Þ§ªËù5§(ÝVð‡¢àyϲ,«Ì)T-E†&I’ô ŸyieNYv!B¡Mç[áNN à} ÀFÙ øÙÓ?©Ÿñ»µëX¤ÕRÅ·¶Å)sJl:;'1›`Ÿg€®§­/Y'oL@øZ8gŽ>cbÔŒšºŸ"ï’ƒ¦:S~cÀø<ÑõtÓkM ÙF™TÑy:vN}=ü8è9ê!ym»l¡Ë!ò®0#ä–ðÅ왵åò³ä ä] „B›¾Æ_lú1UK)O»ÈŒö¨ÙVCo£s¾®ryו¾f¼°·ªh¾IßÚç;çcw²œ• ~»4FŽ_<;È5pÑÛÑÀ;KǶÁèû£v‡oäÕùì¯9]Owìdw²$Xctž""×#ñxœ³r\×u¤«ÒóÐõ´s¯sêÆTçáNí„áka®cw²d’ÞØå1ï)/ßȧ¾Oi#ùYÆ/{Oyy/Ë2I“N§ËiÒ „B›©÷ª•ÎNý1Œ €Rž,L'm€…'U²ò¦öŒ~ÆïŽÞGËúg5Uñ­met=-ÁÛx!±¤³Üb±h!¹žcÏ1y­ÅÎj]æ  Þ5>ÅbÉ_PŸyŽÉß‹ ¢ó„¯.餷¼`ɹGýnö&;Í~|°ëA±,|#O’™%…«"„ªzÆKPµl( æ5 TPž,TS@ÓZ½ƒU|kh«I§ÓmÎ6é±DSô׿Xïâ „B›F¹ûPP80 úÚ¤Áô3~·ö"ç­‚ÔŒ½cêji›ÕJÕ-?”Bͨñi¡¥ÅH}Ÿbw°Ë>•Þ²o-[Mâ‰DS£­À[=+ Ãä¬CŠB¡rè#~bÈÀйš¡ó´vÌ¢€ª©É$©¦¦†,QÂ5pd¾2I’DÖ\_úyów¾)ž®¥ššlMMvös"™\•2¨ >x(•NW¡Jo-W-45ÚV½T!„Bè(w2ÐÛÿMg?ý×âëü˜L&ýz|›Ë’yóÓàh® ¯ÉĨO竪š˜MBFZÚÖ`¥(*õ õà¡DÕÒP 6› `±]ͨñ¸ÐҼءž˜UÇÐÔdËÉKÕ¼þÞZö¦–vü'“)Y–µ"‘wÍfF–Uó æGÒ#5£P@6«•¢(}»i³Y2p{:ÖÒl‡eÝB!„ÐÖTéþ¶åî@F´Îë2‰³bÛ¯Ú„? ÌsLωš¢{û{9Žk?ØÇMu¦ÈDÄb±è³ ¡ûX·ªªf³9r=Â<ÇH’Äq\çáÎx<ÞÛßko´»¹eY¦(jüÊ8cbôïjÛ£–/bLëžÊÎ =J›ê²'1›$ÓäÇéD2Ùd³%ï§ô»t©£SÙùx\hjÊv·çä­ÔÊo-Ÿ’Q™çLV+›zJ&“¶ëÓƒf«•Öl!ÿgÉÓÉdÒf³å$¸=SU•¢¨Ô#Élf°öB!T¾e,ï^Y Àй€ÊwV!¯‡Îý/˲¶° sŸ3p!À5p¾õ¹:]=Ç{â3q!&H%Y–ûœ¡K¡¡sC}oõ…¯,Y¤ëH—ÿœßuÀ5tnÈÛë%ïʲìØë~{“}ìÒ×ÀM~=é=é _ ëß-ŸþÙ-,@t:[9.Þ¼’Qãñ„šQ” 8šx€ ¤åtbvÉt ÆÄ$ cbL&“©²™NËË»ò[3fÞ΀ÅlyðPÈ9²œN¦@F¥­-ÁŽ,Ò÷û"ûàaª©/ÿº[“˜(wÖ»ö“E!„PEÈg(g³‹‰Øz}­¨¨åßÚÔÍ(,(=àÓU÷}Å«þDÁ)@žãž©¯§ºŽu‰‚H–‚Z îÃnÇëKº·•9%ù]2ÿ]Š¢ÈAeN‰ßwtvd×Rúw+¢Ÿ+41F«/,@ôvåtH $ÿšJ¥RV«•×úï³ß6Úäy5-§“÷˜êYwZWW5 (÷é%ÖúÖ*Eëþ¯ŠÍ&åyK<.0ÛMT-½’Èé­ƒ³•ŽºÖ†ËIŒB! ù ]÷ÚE÷•ª,`åEI~—4Õ™¤Ç»s™‹Ûh›þUKé›’$éß]žÝ…&ÆhÝä%—Ò·¾ÈÞžŽ±ªJQcb=’Ìf ÈóiS£ªª©Ž2ÕY“˜¬µdŒô(7Þ—ª¥ÝO(7ï3¿µ‚=N›·3Ò#©À D £E@êûÂÑÌT-e21‰Ù¤u¹ÿ?lAåw Tš!„B°Žµ­ °vŸà•ÅøÎÕ9?Cçi5£Rµ”ŸØ€÷·^ç~gûv÷·(ˆ˜¼1Ù¶¿-|-lo^ÒÖ¡ëiëKVíÝüÍ;ézڶ˺"{ 3‚åy ¬LÉa”r:Èw°l2™²Ù¬¶k2™L¥RjL&Æfe²1Á@€ÍjÞÊÆgª–6=gÊ?k¶ÜžŽQµtS£-?ï³¹5%£ÞžÎþ/h21VëbM®¥Ò”ºÿàiLóRµ`ÝÉÆã±bwG°/˜Ó¤™„B!´îÖ½ö¿¦*Œx:í§œz¿>Àú¢5òe$òe$‘H1¶ç¨§ËÓ5úþ¨Édšº9Õ¦Ÿ¢¨É¯&sN2~e¼ûXwÿ™~óvsäzî&£¹qs¼7¢¨Š½Ñ ”{ëEO…/V‡¦j)ýrøìóxÞEåT‹óÐ4›-ZÝ×ú"›s6«n¢Ï ß\ö­åG“âåܵ–~É£ØÁjûäß‘~,›_ÀÚÿŠàŒ„Bhm„ͪÊ—P蠋Ų°$à:àÒfçûÎø@’$~ÌÉ›N§ÉkÞÆ ¡Ø»`yÁ½Õ'п[¾ÜHÙ"Sá—)»Ž6ø­e9ÅV`áÿ!„2°qjÿÄê¶Ê¨núZl*¼>R66]x2ý´ño-'HU kÿ!„ЪÛP#Ä*¶Ê€"»}­PNwþ‘ßAž³Ž½òͳ6ˆ*¾µ­ kÿ!„ÐZØhµbµÚåÆäÏç©V%ëféûÏWÅ·¶e}+ÜÁ6B!´ê6à¬Þ$mª–R ›ú–@°yæý/CßZuÃ6B!´êª¸öjF¥³øÈôqÁ¡o!„ÐêZ߀üò¬þ*@ÛT­€#m:Ø@!„VцXõOùrcªÒÔÒõC«IßB!„ÐZÛ˜1«¥Ü}ªRþþVm| Ck”!„Bĺ×þ×ô¼Ä>X{@hC©(ÞƒƒB¡åY߀µX|_O¿@ YëÓÒ4Ô{`M/Š*­ï´O?ˆÓºB!´r}§}–¦!)îKCÏâ@ßé¾u-B(Wßißz!„BÕ p ÀZG „*…¿•!„ZúÜ!„B¡*§(° N;F¡­ cQ–ŸÛæ‚?¯Í^Ë£nÅöX„ke"„Òà‡ÂòàsÛ\ðçµ¹ŸWÁ t ¦¦·Ë̱¥÷@!„BU#?^Ç Â„B!„¶1!„Bmd¤›¿Ø Àq€¼ÅÄKÇ „B!´‘õ¿5h°aNÿ[ƒÏ²0M~UK) Ð4€6¨Ø€,§Æïn;änkwwéNý5µ¼BÈrz·£myyB¡­‰| ÷ŸY¬â´r—ùyZÑ'oîÇýƒ”,§wïi-–^UÕà'¡œƒÝǽ7¦ôi^±·&ÿšê:î-³[Gþ_òî|ºÌ‡¦¥,ø)¿0?ëÍkakË jF¥³=ÿeŒ˜ê¨Éëa˜ørjðÂÈø¥ÑÕÿ!„B¨S%þ5¥Î«T•œM2u´üX^£ e?î?Ÿy!ïS›ÝÁ\ÎÞÔ4²´/9ÿBîc^Y–Û¹€ÔbÀÑâü_#If³&nLuh—åtÛ¯:î|s+¿ñ™„ô½Ôû»žx<ÖÝÓë0ogºŽ{{Ýc³Ys3&Së¯:œûœÉÙä±7Úûœ«ùˆ×yಜÖnй¯%ôÉeòÐò~Á”úŸH߯=Ë®kå_îêç?¦5}2Æ &ÿá[Ó2c¦nFÙ³?éÁ3ƒg¬/²·§cÃFÆ>}÷"ùÓs{:æ»02öAúÞêûMoK‹]–jiq ] >zœ6og®~qîu`í!„2Ð~ÀÙ}²¿}¿Sø³Ø{â„Öè{Û×÷ëò!;òîGþsPè“ò>µüÞSƒÅú˜§nF­/.i!ä_(|y´­½K«úE9éˆÜ˜êyÓóè‘”ü.éØëPçÓÅŠ1pº·ÿË@OìßÖŸ[cñxû>gê¯)[ƒµ@™ÏûÕyÕñšÍÿ¯½«ô\7 ík7(ËéÐ'—É»Êù)s~"u-y>mðÓÏ¿\S£ÍàÇ´ŽH¿A-G`éó©ly^m;ä–eYW'¯€ªª‰¿$ûžNI¤ ’ÉdðãËiU Èó2IöàÁƒ–;8÷9¯^› éÛ8#ŸOôüÚùrbôB`uï!„ª2&cÞnù0èÜëxú¹û!Û}›|òæjœaB>î!³eèÌ€v¼à…Šißïì{{¨çMO䯔ó—ªTÝyrŠÁî`¥Ç²<¯Æg½¿96õõm‹Ùb}‰…ÚB5 ¨…––êÙ««ÀÏ»Á¢¿Ô£0¨kÌ/*x9ƒÚ\ôµý bF> /_öŸª–´û3àí¿2f}‘M}/ué6¸¼û`»«³›ßÅ3&†}Ñh!„Bà:Ðîýmÿ­¯¾X^öÜOíB´{B–Ó‰‹±ÙlH$'nL†‡JÃþª-z3JÕBS£}èbÐl1Û› &–å´©º¦ ä?ðòo°dÊÕ­kü˜Ð&¢ß Ä*@z½¿î‰ÝRREY_²j‘þÉÙ¤šQÕŒjÙn€‰Ï³=ýEíØ±ãöt ¦¾^\ÀdbøŸ[ûÞöuì\½›B!„ªVK³ý[ቯ#r>dí»øüƒZÊœOíŠ.]äB´ª®9´ïw_€œ)"‹ÑÔh~²5Ú ,fËÄ©¦×ø•—¹j|øER.ù‰,¯®UìrÅ~L˜ˆåÌšºíkÐ8>xkÒÇT²p-xÞp¼€ÀÿÔ×Sm‡Ü­¿r]¾¦(ª÷×'Úuutvƒ®Uø½/ðÞHG§[–—,YÐ~ÀpîÍŽ^•¿ÜB!„ˆÀÿÿöîŸ'Š ŽÃø—dH~“P,÷@)–JÎNÑÄ\B!v\lD­(©Œ­Òhc¢…‰­‘ :ñ@ç&;Å»w.ÜqÀåvy>ÅäáOîÈ Éβ7ËòÊêÞ½õgkÝO8ò;jŸ÷°ÛÿDf¶tïîâƒV¾ë´¬uiÿ×~ï^@Gçè!©¹6o7óît:333'}óõ4p–ûõÏȱµVÏðÙøtC¦é*(Ÿ°ú¢¼ÚŸÈoÚXØüþ¶øùúm»ÿ×e¼Þl½1¬?m_è³F0›6Ë›çþÃA¡xݪ¥öóU³µÖ©ó5›6_¿ÚdõLùu[\Û>ØÝÔ˜k_Â^^YõNï¸+0À¸†k­Ÿ{;¬þ‡+ï8Çÿ—S÷!`d¬µÆåæü±ŸT\ÄcžåaGÝ ‚Ê«ýsÜ@•Wû\jî”=Ï_n\¸’8(Œ†×­Z˜¯j8_ù-Ç«*y–‡-ïp ò]–×…ÑðºU óU-Ì×ÌY–É{‰=@í…|ñ—ÿî€ù4}±u`ÎB”œƒ9““Š«3Jå…ýü\ªÉbù_\H¦”$Ó6åo$ÞLÉ”åï2ór2š¦iš¦iš¦+×’œ…äz—zoú£N' ! 1Kœ—dΛóRfÝiš¦iš¦iš®FççNŠA2õ6;Mä[†›¾˜“œ¼™Ir ±øŽü:Bˆ4MÓ4MÓ4MW£‹1„,*D™´ý¡%izîɿŠgÅž µnIDAT¢_òÎ$eùõ‚(iš¦iš¦éJ´w–)xÙïL Q;ŸZ’i»8˜}ø1€°I ¦bÜùœ_螨½FÚžHn=6YLêž"-é¤/Ñ4MÓ4MÓ4}…ûįþªíN>=2NIEND®B`‚fox-1.6.49/doc/screenshots/scriptolutions.gif0000644000175000017500000005576011637250333016245 00000000000000GIF89a,û÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ,,ûÿ,x0 Á*LÈp¡Ã†JŒHq¢ÅŠ/jÌÈñ"ÂA Ir¤I‘(K¦<©²%Ë‘¦Èœò"æÌ) ¦¼‘óDÎ\Ì‘#e G$]Š´©R§LŸJJªÕ©W«bݪµkÖ¯\Áz K6ª§g¥¦MºV`Ûo㢫–.[ºs&MyòdÊœKsæúô‚;µ%=艔µ¥s<©m¹¶™GmçtÛ­]çu£ß•}ºõêØábWnü2SîÉ¿‹ÿ÷N¾»ùðåJ =ØIèmðÌi§/š>do,pa) ‚ºÜqÉ»\Ú-sèrÉ.ÌM"Ç.·H²à%^¢À%Îá„Aw¨`à%w0xK—¬‡“ÛlB¡¬í2„rÜBá2ÎáA/X’ã‚¡÷„/ÜaIÛ 5P…—Üò`’/N1‰%nò—…WÈH¡%”eZYféV—0=À%˜p‘Ùå˜^–™æ™&t–An:dœ ±¨Ao„r²¨§Av&„§ 9íµ¡L ½@ÓìHóO3Š1¦T LüG¡9"(š`P*jÙ%B 5h Ü!Ih>êpºÀ-–Hÿ1É nLÓ’˜6A3XâÄ-Bf h‰äÓP2·¨¶N2É%N hë–L"Ã$vèT­n¸€¡C(“%S@9‰s(˜pæÉ.º‚ºëåœó$o—ð‚ÉçŸYÊî¾óâ 'œùz 0|Ò¹¥ºzòé×6»Ì6Ç €Yx2ö4c1s`oÂò+h«]°ºSÜXò E•ì²A/8ÁÉ!·ZðÈê– ×OÄôBCpN‘œ¼® Ð&'=°Ò9/ítÓP»õË/7=°ÕUg­4ÕV3Lõ*¼ð‚ }½à‚Ù+Li2ÈDêqRùy×Qr7urÊÁM·@ÙÿÝÛjR5RrRáýÝSK…¤à‹‡D8Cyò­øà|/^›SÜAwyáp[þxR™k…•Þ~[E:â|3uúÞ¦§^ºRb;!¶/ &öbçþÓÞüãïûøÓ»>ßüîMðÅÿ£ïÉûSü>½;¿üñÎÏüïÕïöÿ$¯ óÓûNýóÃ_½òÉŸ¼÷¾Kïû6þøÿ?Þ„/ÿïÚø|ð‹?}üã‹ß7ì7ÀêÑyäžï¸Àß-ð{ ÄÞ?8ÀNÐþ€ xÁhc~œ ï´ñ½ r%ì %x¼ÞÑOÑ« õ”÷äío{¿[ž·Á˜mèc¶øàñÿà· Z£ˆû؆7ŠèC$2ñ‡?ü ñ~¸mT‘‰V´âŸ¨‹*BÏ‹Þø ½a-Ê„Xôà³xE)J>?ô`¿g‹}l1Žc´£6¾ñÁ$Rq‹I”Ÿ‰E"zñ{l$""£Š‹Ô†-¬ÑY±ˆbüF-¡ ;PA@£%áKT¡md¢õ@NJâ‘}Ô…-lqJ>r‰ô‡$þQ‰SîCF|â6"¡FÞqjÄ¥ÍHD9¶ˆû^dцYzЃI°EÑEêUó•¶°D,"a‹zC‘°„,,a é}#²ä+¯IN[HžÚPç59ÿKYÌRå#@#qOtÚ3ˆûÔÆ= j †Öb–¹¢%qOIhˆ÷ó!ú.šÁkï{-üb﾿}Nñ×Dd+‡H|ƒ¢ÚhC=ɹ KDi¦=ëÙÐmÈBy¨ôÐ*Ty ôÁΆˆAµƒBºÐHhã¶Ð¬Ó¢úÓ© Õ…Ví°Hlãž6 §BSÊVD^s)iðŒùÃhîÃßHC5Õøjº!·ÈhCÛ ‰oÚó­ê$l$"ȲJ¢°Ö¤£-d*‰8H¢Œmá,#aYÌ~ñƒ},9[Çãýƒ þ´,Aïé·Öbmˆa³ØÖeÿþP~Ä“«JCJÒ“Þ™»=$ýêÀ& S§uCe! @ ¡¯“%la_ùJ+X¡œ•(¨YÍz‡*\•n;·a)ˆq–ÿ„h8«`‡PFw²µ§>ì`;œÖI (aÛPV¶63&5)F)Wo0æx¶¨ÅÇ?kÂõ®åÌ-ohMý%´A\ð_¹}ȯ¹uðñ ajòµ€`ü½/fô‡•¸Æ?Ê(á*þƒ®Àm«}ËÌØ·%c!XÃ.Ö°†ÝÆ'èáZÒrÌ­»em@¹É ôð÷¦¿×,ã‘'8?”‚öÆP^ž±,Å·Øÿ´¦}³‡í¨¿/øËv´Å€Æ>ÓXì3 ÿìçA‹¥( ËFZј\4¡ -èJ7:Òˆž4¡5½G.GT~adk’“|ÒoCÀÚøí2;Ä%f·Ö"—3HÈ&Âz§Þ£¡`ÿöÕJüa ¿}Ä1š´ðòöG=/“t£7Ößý‚mdæVÚè›+ ihm&×YÙH¦6µŸýÙ)ÚyyÖNv—Õîk—»‚.N·–¡½å –pÝó6·[Ýj‹ÀS¤ú.zR[Ú"ž«þ1Ž%Ä*^5²€.õˆØÍdºøâˆŒ¨§ ë>tÞûÞñ;÷¬ {Ä‚ÃKÿ¤EQ¯‹‡Ž× b'A;;H⋺¨„&ˆ÷A%6ñ™Vž9 eQ !1¥û,"m¬ &´!®Þ†.H©Dèõ;¢Ú Zwl‹KDAËÌX%šÉÉJˆÜh”ŸÕÜN|Ÿ6†_-&Q9f0¶å¥$nVmÜÍ"2' ?ŠÞÓ˜‘ø«"AÛ†f¾³ TÑ%,auôŽWœ¼í-$ Ä"nþ V2)ZAH]À€Yœe7ËêI¸òÁ ¹$Z¶Š¶À$ €£Ó‚U g¹ù<© °ÿFä’  Pf Ô€ 1@ Y pP”HEEJ¶ IyUtJUP ÎTEÜwF7†HÖP ßpD¸ôHúÓEmFGè”ùpcr€ Ðæ'©pxPj”»—lÿ(I»@y` òc ¤Žè;sP U€ VDA¤q½¦IW==$e ·`I°KYÔ®ºDXgUN¨uTûxÚ$ ÈÔg%Ge ˆattcw< À•` 5ÄI ¨ƒ¯”juØoW‡—ÐIƒÚШ@ ÊUVu€,  5SÆx ñ¥[¦¨rp`Že Ý 1`±°O¶ÐM0T„|…åA“e IQ•šJne…U÷DRôÕpD )Fq¥LR´ × ñ°E-`T EñP  uþ PtÐa|´ PPD¤ q@äCâtJ)D¶@W½FHÿV[$UoK%D„|èÔEMÕPV„^ê´GPMŽ<‡‡Ed7 Õx3ÆN±•gè%‡JVu~§ txW’`{Yx%?‰[ep¯—aVJúà ¶@"”×c6ITÑôì„pV ºPmþp fÅvO„R‰HßsÅeɤ<ª´}@R/¦I*%tci“ŽDDÖ RwmåT“E<嘲tML¤`‚7€¼Um@‘põAפfŽiZ(•cRdpçÚ£@º£B*£¨£Œ1e4 nà,LÚ¤Nú¤P¥R:¥Mº¤M: Ú WÈ×KéKÉ¥È'[È÷¥[úz¯G¦dº¥_º¦[ª¦nz¦m§n ¦c:§ëäOEeyzÚP^ ¦‰×ÛÔŽÀ¥ZXK9¨‘@¨ˆJ¨ÿðWŒÚ§‰ ¨‹Úr°”ºMŽÚ”–*¨… ¦š*Sœz¨š¨Ÿ©•º_€º”†*S^ZG¹ Ù@BCfåôÀ• Îr ·Ð«“p T¬Â ¥nÎb¬Æ: Ià·0L?ñÓ>¾£ú` Ë­Ð ­ÒŠ=9”aÏÊA؃}ܪ­Ýªܺ­eçú­ÏJT–÷U_…^ðª§ózpýt¯ö*¯øZ¯üº¯þª¯ù¯ý°÷ªNøj¯œ¤ ”0ucw¤ÄŒÿàü0±o0 ƒ¾ê,Àú«Û±û±²+²ë,o¬I@«¬'+IT) Õ hgÙ %ÿG­Ú ÖxÖ ~ö@­?› ?[r5û³úк4–ú`Õjõ@­úP³µ€vðdQs¨1›³DO² ~D»´Ù€}²D‰àÚ@ÜZMëNTyPäÄNU wZ á”¶m›¶c©NìDN…·N…·¶§¶n[ ê$·{Kt·ƒ{P‰;–…»¸sk  ·é…¸ëT ñ¤ p ›`U³Êxä¬ ðÛ«$;¬¨¥뤫û« § -`QmP ¶ úP S³:« QÐ6›jµ “•jù`e±` µ ‘ÀT½‹¼±p¼Aô¼h‡¼Ö@‘¶ \º= òS“Vµ¼µÿжд_i MÐHee¹?¡ˆš¹²`¹êôPxj¹+¼þDtó*¹öÊ¿ñ;¿÷{¯þ;·ýd{ô›`E%¼ötÀiëO–+·öú·ö{PN°r»Ne r kÝpdº"Ü«³0Â&|Â(œÂ*¼Â·ÀT;p  ÏKNðô¼A¤³º L`­6[ ‘ m`³ÔÚr𤼥$ p ¹µðt2¼X·‹v÷ØÂ± Ù€NÊk³n  ¶{¼5 4ëOMÀR’ôPõT­õ”¼hk°“‹°‚ûU‰[¿åOu»Y|¸_õ¶w,¸ ܶýä¶}LÁ•ËNÂË·r ÈkÁ °ÿÄ™hÔ¹€µ`ú¡Œ6ÉÖŸ•, Z ?d¹ºP\heM+¼É«¼Öp qÀ,` ÏOsX»‘ðPÇ[³Ë+ rÀ(¼2[ Ë+ ·;IÉI±:‡©¶¼9LÕ ¼Vfeÿ„L HBAä5HLþPMG¸ö[¹ùëTñ{pìtÀþû·ùÛÆ Àþ¤Æç ¯âl¿ä¿…l¯wZ»×<¯ä„¿v¼—é%NMu@ÐtݳWÐåÎö Pò»ÍüÎ|Íùzp.¯ l¿Ù|¯Û¼NJd –j8»æªÑ©ÖN2kE¡¹Ñ"½FÕêHÖ ÄU´CÛcKÝ }ÔIåT ñëC(ÿm®¿ ÍósBaÚ  ×ÀyAD×ð–GD›DªØÓE-IÚ°yÖð–?]“Ame»ðÔPÌÔH ÕL}ÔJæÓ9ÕYJCýÔœ×ÔLme¡dÕVÈyO}EäôA;eT'uUwctœ¶F‰L6ROÍ×ÀfgÿÅV½æAŽ £˜7£€g–f™]hõXŽmS€—]€—N‰=Ù‰ÙeOê$ ”MPêdÙÙ‰}Ù9ú¢娔½wŸ½Øy–-Ú6õX’Ù¦ÛŒýÚ¹]Ú•½Ø–ÝÚžÍÛ‰ýÛ¼ÚÅ-ÜýXéÍuåÏ3–b§åA»° Ý—¶° nPuõJMDà NB(g Ð=ØÀ±ð7'I‰igwõ —`µ T‡KUQÀŒF§ –PÞæ_³v—†–[ë·GJW<(å ߀R@Þ=<.ä?þãÝããCþ ½óãH^=<^äAäRîãÝãñ îã½³äþå^îåT¾äAžååoç\.?ëäA+uäŠôyž[$kÞÿŸeHøùšÛ9ã•î{ eEO;´×ù=‰¹Ï£nß /ð?äêL¿ôoëÿôGOõëG_ëDñ¶þìW_ß ¿@I.ë^¯ôº¹ñgõþ?×  ^OMu:O`ûÖLo•îkçê=Ll•QTä&ôாìü¤Vö‡ïë†á©.BŒÏà>ì*„ê $àùmB“/ì•Où >øöS•—½ÅaœÆ¡Šú¡ÀEŽyTV§ <‚ÃtOªðXMm`˜á$ MÐÿ€ûáÔ,Žûy€|÷áDN¹KœMÃÈd –  aZ«§…ïगÿ ôÿgÍ,ïøàþâ?þâ¿îu´çP»tkÓg4´e±ÿõ†žïOoöon]ÆSDu÷Ëy¨JqiÛ6m’,Ùºeëßµ Ûlû·Í–D[’léú÷O¡ÅH¶&JÒv+cÆ}ÿ$i,hÍÖ.•ÿEº¦k›$o^‹s dFIß&NìèÒͶƒŽDšTéR¦M>…UêRoÛdéÒ÷ÍÀm#mó'Iß6oûÊž5kV’¤H²Ør\++ÒZ[s×¶½»V’Û½kcŵûÕØ}ßôýW0qĬc5Bü–âTÊK#O–±2Sˆ˜7ZôTm¥ Ú2p êܱ‘"Nkìÿ6}'GOõ7Ñì6]ÚÈîs]ppã¯]m]Û5éÖ¤YÊo ¼]útêÕ­/õmZÛ®û<‚}ëQ|]‚…ÿÔe{â¶¹}‹F’d§¶}M,éR›X–aþAK?¿åš[zn‘®C0A´î›HŠHl›Ô ‹ã¡Ú<’¥[’hËÓªË-…(/ŽM<ú +è"à“d0Øè+Ë–ÈJÊŒAwä±G¥ôIA=6Ñf+ãÄrp6߬‘);³öûçˆTšH³ÅD#¨ Ù`\),ýøË* þ¬yN¹7¶QN9Ï|d³M7G³E¾J­Æ¯j[¬«®ÆjìúþÙÇŸ(GtP8ÿ=²ÆÏ¹} FÁÓ3$']îKßÄ4SMê )2ò%Ø[Œ60ùÛ';UµË²4íTmÕUY³Ë·ÃpDJOYJ­5¢DGŠ,£%ÃlÍ‘ŒU ÙM—e»Âƪӻ\35«T_«ñ¶ÅУY¸å6!ñÄõè ò´a1±Ö"¢6+,ô)ÀIÐüçž;S'‹´i£«r(<ßL _/­tØff¶«ŽÐÝŠ H’HIßî›},Ùq,[ôÔ¸+ðôC‹½‹­Ùe è ž:IGé#„L„h=ïèfJæ¹áïŠTÍ»8À‹¤‘6:òèbScÑqŸø@JU[ÿ¾ î$=Q*Ì¡«NÙž¿^–>m# µ®ŠmlíŽíÓ6µùкöòÐjYÐòF²ôÑe^ÍÜæ„Á&¼ðÍZ„6èŠÞ‡ Ç‹ O!Š]¥µYW1=÷ÁÊ×.ÉÀå¸6¼tÓ•ø¡"¹zi¢Úü1쟲®¦EßšVÍeÉXŸ‰{祿>½øÒùUh;Õ¶i$Ÿ­V¶Áþ9 PAKòÇêôŸì3Úþzïqô×{@µ‘ÅY,Iß#Ký?ol™7ÍåœSØxý kÔÕéÓmüç¸ìd‰€º3 «^uÀ&pÔÉÌ’Yœl š”ßö·AÿÂ}ÃA‘jÔ÷×dv‡9Ì÷®¶¥N¯…yaž^S˜ØÈˆzQº•6,¹E?bñ|·/ -@%²EKŽ% âm }³ã’q‚D*v-ÉK.2¤>-ªìR°‚ 2b ¥+ßKDŒómx°f§)cFÖ8"ߨŽ)š[Lµa&VјÒòÂk4â/‹Ù`ô0'ddn¹WEÄ#µñXdnAaIób“ÅÝ‚’vÄN%â;Sýª38Iÿ¸ÊëH©XäŠ;ÚÑŠÆU©f“ð%b6Ä—Øbcvv‘IîÂ%¾9 T4ç%IÔBc}»Æ%öq‰„¡ÿéf¬Ä&ƒÆ¢-?àTLñ¶ }#ºpU& TÞK•Ù„§hàFŸÿÁªIA×6h¡¡¥¼3A:ÔG¼)tÁnP‘Ah°¦¸P`54# }¨C 5QˆRT¢ÅèE5QŽZ´£ýèF=:R’Ô¡ü™gýTAÚpìX_±?dšÜâÖ&á@ª_5&‚‡t8¿D‘‰oHÄÐM( Ûqk |À‡»:IHIÚ+r2 >¢Îñ}(‡x0À¬å™­H?•'¥~ºþ³kq8¸­ˆK¦]›yBÊ™T ¡²(§í»£¯Á‡Ù†F“9ðÁ˜Á9˜yù­ ÄBÔy”PQ®m¸¯cÉlاš)¤è­üB¾ÁÿˈñB)9–cQ™9¤Ã:´Ã;ÄÃ<ÔÃ=äÃ>ôÃ?Ä@D| )‹ÙØ-9r„x4~¸'[pƒHp~Y á²mqHR¸™ ×`©Ü˜Š7°$ÅK°„;ÐÁS4ÅK¸KÐÁQ4ETtETŒÅUlÅWLEYdEW¼XTÅYäEZìÅ\´ER¼Åa¬E`ŒE^„EV4ÆgÄÅhüE] Ø@‹Í"©]?^îmœÞAñíޣ쓺ܲe_ÚißÃ5•(êÕú‚ø¯DÑ¿3– [ˆ…ƒ(å3n‹Z…R&åÚ‹Z°XVeK8ãJØ"Y°e[€eõ™c;eSæ3–åŠPe AšŽØ"¤±ˆ Áe]^Q¡˜áíå´¸áŒÐ…8h9à mˆ‰ZjÊÁ#ùu 9¢d=Qn RŒA'Nü¯LŽa݉G!¦„”Ñ›$"KJŸõ¡ôaŸ9†0\nŸÞí:æå€–¤[Îeÿ:že‡Vh‡–¾–¤enå‹®hI²ã!ÛîEJ¼y¥¸üã–2ì‘§<•ŽbDJŸŽ(å ±ˆš¾©š¶å\n¦g–¤šöˆÜxãmééñã-nf‡~c0þâ-cU6a0Z8¨ö©Ö嫆bnÁê©æêªæb­$ÒôI”i†žˆÁ˜´…›°9| ²ŽÎ”<šÊ¦‘À‘½Ök¤Ð˜¤¨žî1ëш’ `"ö[öÅ^T‘‘SâÂpÜÙbëÕÞkY‘ÄÂßð _ÂÜGaß7mÝŰ–Ö#¼Ø^``ÅOÎpŽÝņʘ, š2²ÈŽª(ÿTñ’ mÐm"L^šˆÊnâD~‹¿Ð »x F©¿ÀF‘‹¼ø‹ÀXnµiî»ÀnëŽnèînîf¶˜îÀÀnÜQnæ>oñ†ÝÛíÞjÖ¥ˆ$° –Î5|iöÇKÂÐìÀJÐ’Ý6²0<Ç­ âš­) ù᜺^Ù`š,Ä8Õ– `NS<&€(è KŠ™ñh“íãl‰®¶‘ô ß6@â+bM« 9` ÛûÀCtò]¶h¹Ð†#Nb ùã%¡Gú–ð§aö^`3íðae6H2ñ˜‰xtÛM|+Œ1©ÈkÂÅÜĨ£›[H”ÿúËæ•ÿ ®‘5†ò²´ôIà軌֖+*r!Tmu¾Oȹæ‡jœ¦ë®áÀCt¡‹óGD ¼°eôf¿°„á [ï+º"_`¾[>!Žñ"Úó¢9— m@ëCTëjÉsï@§>׺N\­âK@;cZèZv‹]^æè\¦eb‘ÌŽžÆÞ¨ô BáôÐ8r=^müE[ÞŠU#^tYÂÎ.ñA74/ãƒc$jõ±c†®076mÇ8nÓ^`ËÎ’ v"^Üu—žjI÷wïxw÷x§÷y·wvW÷v¯Ì¬@ëÙ0SËħ¾ƒ¸ñhƒ„xˆ½¢–ËmðUouVåÿ]ÖéŒf"ãš.kªN!&iu$i@¯‚¡ð•w|y}7ù|Gù’Oùz'y–“Ø5öÙáãáÈó Ó9ÔtàÒ#^/äA×!‹Æö7NŸ*@æˆæö6Æv~BdJ R‹ÇD „»úˆƒy¶©ñÈ1b2.¿^¿Ü°ÿì±û²'û³7ûGùôµbÌó$Óá°é)rVõfõ 9d6fWgŸ,¨(˜‹´ùbKbŸ\~õö)w÷M÷ÓŽiß•…æ!9[x¥6Xd¸ñ]Ì×´mp«Zhƒ}ài%~˜´HäÒ×lÓw.Ô‡ßÕ_úÖÇøõ˜ÏˆîV´xm¥p‚ÿ8\I}_õ‘!gð‹û¥HÌã‚Æh[Èà‹$ÈeõjfŸYŽàÄ·ß×x2A8²¸+NŽb"&؇Z—Óðrt±où{?y•w—_ùb' #„Ú]뉀h€e«¶ ˆ›Iÿ,hð „µYÚçmß7}#êÚ§°à­KÚdÙŠeIV-ޱlIªõ±Ò.¶V&áXò£%[!C’”iëß6‰îÓöϧ6žþܶÒ_ΠÛþ»©mN{â,ªíæN¤<ŸåéÔÅœ·i«s,R bu.]Û–-R¸nã¢;÷IÁ‡z·80ôç>K õÿ ¨2p[$I¶Œ]é"äÈ 7ê ¬ä[‹k)¶³¦-Ž¡eµ¹¥ËV’H+E{”³VhKÖÞNÜù·­eŸú,E’Gs$£‘†¯´ÕFVâ䶆·¹Úè[£H–J¶Qg[£Ó‰¯lÓÆVvÅÚ$%&\µ$žoÿéž(ü÷òãÓŸï>盂[XÐ5¢` AtT’x`BˆáÄ`e¦k2DlªÅGO· !‰,•ÔÔH®…XQeU|íT\I$m$›–è³oÆ$‹b’X³Ò?ÕYƒÞj㱸\zÛéI’$‰?éÙô]g‘˜õ OUi›ŠT>dåÿ–Xr™¥6nDÔ6|ù•¥>´#q‡ œq´ƒ'îcË7™Ùˆ0‰¦˜H$5’Dß…ÖÑJyÛ¡HiÕ¥•õÅTV<½•EvúcežAiCå7vFôORš)`Rmj‘Vº}³eQÙ%­uÕªm¸:º^cþ„Tñ©iÐ7ñÈcÏ-8•lSŠ5Õ°r"8ž}>٢σÁ6¡k#䧇q4R“…®…’%ÞVU]•¸_Šc ªC¹rõ^»º¾µÖDž*[”7gá:TZ?Ñ«£°zÓ]úÞš+Ä ç*¯˜ý§M_&†6öLCM²+¹±çM+ ´ÿÒ¹M,Z¶ûÓSznÙg®Áæ§Lm4ÑD0´ÀDj‡¢+¢ÉÅU Ø»c½'ŽI~”£Óâè'L9Òì$‡P£×mŽPw-µŸŠmýô‡e{mö‡> è©y²­â?‘쓟¯Jõ—k€mcM=и.Øí²YeúT Ê2$°Ò7eË·IX凮 °¤ºÖø¤WONÖŽÚ„žÓ?’ èÓEˆ'þ:ìFÄF%÷j#RLö:|ßdlY´ÅÂaìÅ”&Ò//¦'Ÿ~-Ûi¤ë2Ûi‹]Õ’ŒÊRQ˜’T׈3zŸXz8ª¶çR’\eTgÔ^u•%ÙǺÿñõÇ.‘$#ùtÜi¦‡Ø>*f±­ë>MBÈ6 1f%„~öƒŒ‚Ç” 8(2ÑV¢5ÊíH3Õ[ÉŽV“®šŒ¤EÿhÒx¬qš¸1f%WÙ“,¾Á.Õ¥;5iÖ.Bèˆì=°‡*‹ˆ$â°Äª:½‰ƒ5$ñ ÎÇLyKÞ² oØãÙ™‹–×™Ô]%x>üÉb–°˜Yp3gQ% š@®fi¼H@´’R-…* Ь5,×5å&|<Ìy ‰ g\þXÌŒ w•¸íà ‘ _ü“¼(JqÕ G²r˜õ5e<ŒY¤ yǤˆ9΂:WW³U~Ä$ˆÿŠ·ô’íñ¤-øzWŠBègN’á%d€™8aúÐT¸z RrB–±pEALt—-ó„´"ÑÈÓ˜ŒÊ‹ìã1nqÏòÊØ¼šœDI¡yckb£$ŽŒ[6©Vnòȯf“,i©×íÈrL}˜®'ʼÝSø™”îSŸÍ'Bù©”„tŸ¦shBªÏ~ö 9$ñHI8”ƪoLÄÆÀ°ô!Ä»hÈ6ã´¸/=¤‚¹ ·f"—­8œ;ÔѦ£P…ît¦#‹O{úSÓ U‘>*P›9Ôž"u©M=*QŸ*U¥RU‘MMªR¯ÔœìN>ÛðÝ™ºBÉx†r Ðÿ@Ú€¨üq›©Mm '3š}¦œ–  ÍTCӒЯ²EOòË‹ÖD­éKڸΎH.Do¤ºÎ%¹UžS²’Ð]9òXÅ ‹&’ƒ¬Í4Ëš1§£íŒ¢8¢×Vªµlœì?>z"\0(*é."q>žo•ádJqâMÜ•ò¥§Œ©b k¹œš+D˜«ÙQJö [Xáî I¶Ø(ÆCìœéskj®‘Lö|‹-/fM+Þyfƒ bïdQËÞ4r7QóýSdsWýÖä±ñÝxW•§ü®6^lŠ.XÀ„8†peB(ƒK§º€³­ÑLóú´ÊÌšDI«]§+[ÿy®-Z¯'»ˆEá¬Z88NNDÜ5É[ƒ®X:WjT—ë\ëx°ˆÕñŒÕyNmÈ&Û*u®6~°ŽSÂjëž„ÊÁŒ@r 8‹˜ƒ4Ù M…_VBîy£ìUDS9ØPî…äíM䨧ï-²äÝ yá{Zª4©….hšÛÞ•äÙ³zo,ËÖÙ×°6$yæ‚Bõ;±&DH(®€¯ŒÀ–í>˜)ãÌ öÜ7ª&1qDެ˜ú¹¦0ÛjU©:T¬Òš¨NÍj¬—*k]ÏÚÖ¾Æ*®µºk£F5ØÁöGWñI¼*L€ ò¿Hh¦d(³pb™ÿ¿`Z!0=”·hb¹êx/ ¯ü.›Õ"ŽL0*TÑ÷Ѱ©Hå!L±e™BÇzË»Žö†JVê8*µQiW¸E0upSõ›ß”•¿ûMª“Ê=:ù‡®ú-øx>`}•+8X¤r i³„G)—g1BÏÅ\‡¹ÃÀ@¯ùncE›ä¡(®K؆+~ZÅŸÇ4:Yî©*½'múC£¾ô‚Ný N‡úÔ¹Òf2³-ž¢Ê“8)“4AØäÙ{¨ [¥Û ù¶ÐZk‹4R; M€Jp:’‘lÔ#ÞrЬ.ÎvxŠQ,t5×¢“Å_Nñ‰g<ãyÈ?ÿ^ò§¼å‘DyÍ7j'µgzÒq2EŠ%õŒ¦·§ù8d62ë;Õ”û£ mHLœ-ÇÊ9zc\ž›ž%Ê¢‹§„&Zß‹\Ãe½qyù©~dÂôÈ_EÒ];ˆ-4Ñ#xdQVÃV@J±~îãù–§JDMè|ä!AX ºÊèÜER‘éz¯|_£Y¸ÁÎTáÝÌ’ðˆ‘¨ô-`ë@šmaÌ™TÆ4„IéTˆ†T‡ÉD”(FGz4‹•ÁI7EZ§56½ÉXˆ¢„WFÉ P@@Ð*%W˜!Š‘Ìô¸šuÒ-ØÉá`‰7üÉvÿ–cxOÚ1`êiCÇ)Û݈ѭ„‚1˜á¬c” YÏ-´"©ÛÉÉJ µ8Ÿ·—*…›KÄADA  €~ ¹ÜbɇÄS¨X\]žDÈþ¡Jž¬xäÆXáI"ÇÄãÔÓ\‰Í*éWh©ÑXÎßYΙÉÓPŒîLŒm,!©ðRó Ä(J)Š")¦bÅ­â(²¢*¶",¾¢,®"‚SØñN-Õ–Š"ž8‹"Dm[úu™š©Ù͆¾PvGL°à~­D#ÂâK¤XÜU°™Md#6›uãšQŽ7®D8†c6–ã8Š#:¦ã9j£:¶#Ê ¢Zÿ˜NLaÄ÷¡‹T[꬞„5DЭž0OºØÑœ2nu‘ 2²Ÿ˜YŽUœÈ÷ÙVæaG¥XŠ=EF– Fn$Gj¤Gv$HŽäG–¤I†$Hv$F¦$IZÕOÈÖ{H™OØ.üCÀÁÉlRgb¤LJGá“|›1ÊÄd•£šq#Ôl]͆?$y,UFâFì¤2RÅþ"W"ÖK!Å!jCÆ.$„ãŒ_p±ŒËÀ©`¨åßsÅQaIŽäà&ZâQ4†wp‡lGu|‡khªU#ðäáà†`W*¢NŸ2EáZð"ê Ä 8Á¸À8ÿÁefffjÚÆUS˜áÛ¸YfÍséÜK`Ï¡$Ï@- nŒmµËv†µ!5&>¦Å¼ÇÇBì‚&4@lfj¦ p&sr&iò!8¥àE`؆™K|‘Ù‘•SCŠ£Í™¨ 2L¼°`ñ&z¾ä#$IÝIÄAäÉÈÁ$XÂ$Ì \‚$ÌÁ%8u†ÒÚµ=ç…׶Єj´ÆQ“©g G ß^å*õmÊY¼ŒDÔÆ}ƒ‡v(Ûˆ¨7|hˆ‚舢h‰’¨‰¦è‰¾¨‹ÆèŠªh‹Î(¿=DW‘Þï˜öIB"ç%LÜ<ÿ%Lüg€ ÒûT˧ÁåFi˜Š^Q_m—åT@ÒÃ4Œ4Ž‘ yˆé˜–)ùœ)™¢©™nù¬©›ª)œ²©œ¦)–é›Î©DÀ$ÂTß$•”4BÌ~ ê%ø§$ÜÁ$ÜúÐùÙ‰´-*F˜¦LmËýÅ…àÔu6c Ù‚n)°‹ZÄÅž¨ÈH9„¦'oú¦€=àïH`I}CLðf JäRXË’"„u‚Þ”î™ö°CBއøQøFôbG$¸Áù†M%y¸épÑWNS¬Õ¿áDª>GMŸÝˆ”–”ªI -ÇÞ”Ì[þ¤?ZE@*AÀÿÔ—Q©•’V¬#hàIô—Í(™TMOrÐttF âj"É4\å\cnëéCŽgX^ŸA$ËM Y’Ï¢lƒØ€¦,¼‹^—$:oÍ@¯ò’óR¯ôVïó.ÊÇ6RÝ€eXbIYBÔŽÐnÑ6±%¼À (jF\’V^Jz$`ŠÐÞŠÙÎ -úì‰ …ét””ÎN ”Ú¢ª®jOH¦Nðâ74Dáxß í&“ÊÈ—XËPž’|!–¦&I\Úy×unÔkêC`žÇ±:«÷ Ï1kÜ-=D°ML¨îÛ®*NgePDzÿNá,Ÿ7<Å­ Rtúî!µ/ÉÔX®†›Ègœœfmk •ø`Å„6\ÃôÌÌŽ 2>…,¬2±Ï’†#øä»•è:mµgTP™, €_Y±žKU'„,^ …ؾ’‡#´zä^öNȆڛ0R š°”V†_ù½±„Ý"™@à?&­AX@A´‰ÉãlDk(­²ï\µQ'eR‚ÐÄ+¢l}@ÅáʱÏ'¥œP© SA1ùr/ïR0Ä/ ³1ŸÐ0#ó1ó@섞â„.>Ä!þC0¸Ž âå±Êåïrðã $b¡°‡”ŽÍŠÆW/ôÒ`ìÿ!Û]ÉGšïBR?Õ³§Ü³ÓQÝÕÔ@]@%Ý?ã3? ”?3]@ïs>õ3@4是ˆ&K“B¤Ì !Î5¸Ð.àJU„R ÚE·â‰FÎÇE·Ù-ÌÄ’±âÙ¿ÔlòŒmrØa‰>…^¸Ç–ÌÂÔôRäáNwhOƒèO;ÊDØ4ÛøDMuQÿÃQÿÃDµOk(PCuáé©÷I¦QrhnhŸáFxÖŽØú5è` $N»v©Xo»tÓ.¨UOšQÜžÿšœƒªYYÔÏÍŠ­ìµFK§_à `óuļEÄEpRÚ¿U#Ê•85¤Ù×*©Ö¥ÎTºñY ¯ÿ5ââÒ}0N7¹u‰z‡5x‡÷ŠqærfTG`F¢WµÛà ^xŽ”ÑrÎÆÇxÎvk+L­çصç.RrÔn±P†ó†…›’1Jà¶ô®[°ÞR-Y¨Wm(™à¢Òñ÷N¨ÀJ@ÓöB9·¤¬¯–A’йsášë™7}ÀcQÈ#Q2Ý`8Áed± 1%]Ânˆ  ]Ë—&L`/¶—ÖíÅ! ZðãÞx!`#®'Þr4 x·t5Š L¶éŽ z²nmnui¾ÈŲ¯Õ,/uKE¼v^£õ)­„xƒ×­áR¨8…Iä-{és¿8wsoÛz¯ÆL3ª²ÿ%"…ÈzÛ'÷{·wb©ö™SL•U[”Ky¬E¹•S¹Q]¹–÷Ú•CÕ–{9®ŸèŠ-ßVb¯ke,…ÜVìØwzìjMôÖD^ÉDgèƒ.”Ù VöäàÕ fPŒ-Ù¹%¨ ûÕ+zLæ¡/y £R¡Ö™…HŸGº¸AºMHº¸mûðWµ*O`8o¦I^4¨ÔàÜp «Æî]r¯_,pÏO]×J|P }åtöÎ9¸Xoòæúô>ïÕ̹®º¹”¬°“¯ëj‡I/9©›éÄqÀð©{·7òšGê‹üÕ¡“-¸|òŸI¾êX”–LR]á!š)ÿ%¾¡³º«§tùy¼jûúMú¢KzwºÖ£³_‚ZúßÁ²Fñ?Xò}D4îp“Æ‹ë5ö›Í%h´ TqMÈA eó]ß;]_—î’ÍÙØ•k>ïœÅÞ,ÁAR:ƒ0ƒZoÉ»¼ÉGïËKb”ÊÆy+4û¶4cu–¡‡ãê ú‡g”.,XµYÈd{ ßùSùš®›°9}±-®ÔW}èxNPY½­M•Öw½×K=­AìCKDD»êw´À¨yWìf¨³Âº†|Ƥ‹`ÖWCƉª÷M-÷„÷iÅo…ßSIZÊ2‘*Nx_âþâï½á>©á#¾vïÿ½t¾áï[9>®LÅáø}å wæg>á;JÇYƲ…ë™K78¥mÏþq ï8‹L$A>Tƒ‘€5Òç»”ˆ?Ì–-™È"õÔ•R;LÀè…>xÃïËñLûCÀÔÆž2ÅQ ÝM#õÄüþªìéò/?õC¸SgO+nÇ•H4!¶Â3"\9§Y¯«S-ÈÉ0B5Ôÿ¸¼YqHúá8.ó‹á@Ø8ÐÖ-[ÿ¶ùK¸¡¾oû¶íó&¢Bˆ‘$Ù¢øMßB‡~ÜöO[G’'¦Ü§­!G—ûztù‘£Lš"CÎ\èæ_ÏYj3° (L}–|&Uº”iS§O¡úÜéÿ¤Ê‰ºöEýwë’6Y–jÙŠeK–­Je–•$+NDŒe´$+¬¤ZåÚ’dM§¿ ¶ùP%GIY*U¨ IÇÚ£”¨MÒTÀZÓek›@mš#ÙŠ4Õ3A[Œ%Oü yÍ•[…­Mòê7IUjÛfàÀÄ™‡µ>œéQŠ6m}Ójp[­¯eÁBeiz¤8LÚX’Ô(#ݹdŽ¥‹–dg‡+[טzeQßeí©Ô«­6i«¼0çÊ6izÒæ›¯Ú¨ÀFtÁLíÒ(pmî[Ë’6Êân¶ýÎËͱônbˆ¶—&â/"onóI²o†ZíàˆkÑŧ(ÿL!ÇZ®«çœÓ ¼#qDŒ M­Zæ²Ä#3ªÄš„ÂH'ÿ ÍII$‘ò÷ÉH ¥`ÒM/E”1Ìù‚ÒñËm:+¯¤Ó:c¬ÍÏ´ÑåA¬BÌ §1ï3OâÉ'ýtã Ð}zÑÐC{Ú&Â^ J·åNëH¬)Í´J#h3Ó$Íñ Ý€¬’ÊÐþ ²;*e¡S¢„ eJ0Ç\s¯Qö;¥;rl6İ&;kzŒ=«f%vÐÂüì)Õ†²©UD¡NKn V#½2²,mvaŒ[Í<­27)ÝSk2ÅkK–²Ò§'Œé<ÇÄÜ5"xaýÉ7lêÿwÃÿjMÄj? ê›ü$rÍØF«ªhD‡7\Ͼ¶IöŸ™¾Ù­7ÉXŒÖã¨ô9 á¿’ƒ´¹¯î’4­ÑB‹Ó#].+ÇÇ~pâ=uoL;GRQVÕþù5<…=v£e‰õ¹á…=lé£'’º3Å;þØj¦,kš6¬°}¼ïì:r¬¹*Ùq:YÎ"KÛ²å²F?wo¥X~#¸_1_õy¥8ÊrŒ/¤÷ÑEB X ê q YÚy`Šq–Éb„ÚØ£g¯ÎÜ'o/üL¹¨ bÌ»ñ¨S»,ºÔN¹åÒ§ÏS”5â‡דQŒmöׇƒJó⎦´…»Œ"¹¥’µÒÿÕ´’„±»œÛ½èãxžàÝ#s"jŒ§FsÍ3§lú‘®ýÆït(#ç\™ù°¿Jë¬"cQUDë_RúC“„Æö¥OÔ‘Q$Ü)P„ä¼*ÙGT˜™ ~d ]È‚J¶ˆCmf#aïa¸[JJÔ“`jc*¡ øP¸ªì/!,)è8–³Ô%Gñ‹hp¸£õ}å†2#ÏjhÕ¹ MVúƒÍý°´ oÐ&@ÿÀ×|ò;ÀTÄ(ßÀÂT¢µÎýË_µãÔ|Ò¡fɨj(´Ú´ØÃ®™/[jùÚXÆv:õ™¥,g3XäÒ7„íNaÅ’ G½Á܉ JDÿ¼Á!%êC5Á"ìDB¬Øùohs!'29šTnPß3£Ç¼²0oðRõÉaÚŒôÐPG[éCY<%3Âý1ˆc:‰K¡¯,ˆ‚º<^xI% U°Js‘Äñ(𵓂w ¦„z¹ËHP—º4æ4µãL žUݤ΂bAÌi¢ÊØ$ž„Vò ‹‰!Ý3Š'? ­¬ånkYacOW:ºh©eÐÃg‘`ƶu• LgÒMÈ<3•Ö°éK)cÚ½„…¥’Ë\R***Ý-ôk_‘Ü&-a¤@^‰mbÊhæQÅÓ‹,Œt†s¤UÛÚh²w‚š<E1j5‚¡¢L§6ð å¦n¸©$â€@ŽÇu>üÔ?ܵŸxÁŠQ™‘Hj”¨Ä®¶ªêÜPÆÈ!IJFÔÑkR›UÆ©uc± ñlñ£]Ö!PèÌŒ4?YâoÛ8Øõªu´ƒ¡„E‘Š.’2Únw¢IÁ˜E9¶]ℬaµãL)e?õät™K$²+ð­t’:K?KÏñÿÕMz,ç4›!Q•JGâÝ.S·Ç¯¨&dªÆÚ 3¸FÝÒQR¿ÅaÙÜ ¼jT£ ؃––‹2€2÷fŽÃÂ$‘1ÎìU·Ðâãà͆¢á¤ÃŽ"c­¸ `qìG9#žV†g²µhC6êQH8¾â©!xÄ#8ÊNicЅޱLŸo„´/AQ6Û,ÇH&¸ W“‘é@//ÀdE#‘†•Ô.d (_‰?†ÅŽÁº¨Ôˬ”?o)Ëí®O~EBb°ÐLQ¡Óøs^Ö§•-SYXÑî¤l,9Šåd?5ÄòŽÚ‹h¦^Ú°QmC;¼ltDY¢½0>µÿ#± Lƒ =­ëΞRÙ윪ç0—½“Ò’\Î&P[غŒž7:¦ÝW³v°Þeäª [1cÙ+þ³±´Âœ—Öï42è–Ädn(–¢#-ˆä}Ô'eÞ(ìÂÒÿúƒÿ4¤…ÔBÄ@J¥@¶Ä>t¤ Ä ÞB@4%Üi" NƬ €$ì)âO]B•DÊáì¢çx«³ægIðF‘O'.$ÅhcéÈÅŰŃ$äãLÆÏM†o!ÀË„îîÑ<ŽI>Çùö©Ø\‰m:0GÊ*-¤ŒèmÊäfDdQnÁ)¾c-ÁjÂÖìódáJ¥ßH/Ír®Î8KH&+ãÂbŸ*±çg,öƒÙ<(ƒR¢‚¦ÂH‚˜ü Äú†òÊŽxÀP°ÐÚ\¢îN¢¬Û¢ëL0Ð}B, pHâx¯ú@-íg?0)õa*álAa32 ÿñé´DÕt  ФxÖïò$à‚…óŠ‚àîÎ2é*ÑæJo~\j.*ѯà(çP¦Žð(‡$ƒÏòFÞ”(KVQ©V¢ÆÞ²ÑÁŒ£N8Ä£„ð4ÜH²@,<%ãZ)"Uö$Þô†#(¢ò1©lÖªëì îÈ,oJEáã× o:œ Ù –vèqh/n ˆn Pè/Zª Ñô¡°6Æîàn±ÔîÇ ²VF™¾ÆÒ²urÑkFpƒ†=hÏú°&! _K5bë#dÑÀt­±JK(ßHl6ðÓÂf,B#G´dëQ?<®´ÔJ*!jå~Ç%ÊСÿF†FÖ° ëCKØgõ† eÔ,²–«í'2ø^ãÑàò“¢©ºLÁÀ¬vhR¼²¦ÇêéëBÎ⧳ϾæH¿£†JÇ5ÈèÓŒn’åjâÆ$Ð#)ÐgøÈ„2uX&}òb†NOfˆp †Q1O00^£2W“8¨rÖÎãËd%+Åë†|ÊþJ/ Éæ3ý.ŸÖKþÜqG0h’öŒ&øÃ8S8„ÏÚZ¨.'åRîÑXÈ/Je/ÃÍ Ï(}ÑH ¯%sD¹ðèKÈ‹Œˆ#*Ë3s¢êº,^ Qý1ô!Q7;°lÎ{hȶm䈋þoÞ~†< 4*ÿhcøR¼xRêBiXj3(ýÔ´³!7 G'mâgûú¯a¼-XÈ+D¯&9ªQ.Çz²ýèÉëî©õRF¹öÓÒ" è`ÆS:„‹n4`"%xôŒHbøjÂå>DWk£øè!r>½"eVÏ·ÒÇ3Á¢;=óçDöÒñP%le%ì”6ðôNõ4OùtOý´OõO5P uP µ$þA«…#½4± 6º’ô¾ÍK¾Ä ¤Rm¦ 25S-p‚ñn>È*øÃ%ƒTÂTýTÄ!J•UOÕUSV_ñ¬”%j•V%Â1nuWsÕV{W½AWUD4i!`‘6œs»|R&ÿm†”Ã^~⩪(+Úå'@ë'Î_ uW:ꈺ/&‰±9$a,ÊnI¸j侄RŠ Hì]¢ñáÊ.RLÃ+2E05Š¢ˆH–ŒF_ó’)Å!â*UEQ6jP)vá‰?ôÇ`X#‘D5‘r¿‰QÀÓhŒ$B‚Uì£ …@F#šàÏ Ä¤Þ4,Á¾ƒ¬"á@"¥ (Ȧl! "câÍsvgæ/t&Н„ìîðò4›¯ âù¥.P‘¯NƒÝ4ƒ[‰ë.ö[O¬qäuOL®B€þÁܰâ4äd Ù$(µÅç`®Z¤ÌK¢-‡fYò'6.*nÿo'wÒã;5Ò¯QK#l:—‚+ØIEŽ+2í¬a;d0~„3ˆ¥&"ÁA„¥a~Kø¨gè!:b^Xâ§Õ5~…9ˆèLìtAÕv$ãg[ΰbE93I(çsÉ4#ðtCÝlaVÂ\,AÝ#JH0Tge'c6rtæbφ_ê `ŸÐnªwçæfT·Zr0%vP>Ob/á°eJÌW˜¦DTÎw}Õ—J¬Öq¸^OzqV&/VÔ¨´gâMkÔÎ4ƒ`ç P¸L&Ô“1¥ óäho&®5Z¯_8´våsÜå!xÅžì¥^tögÊ,1…ˆ’ÿd¥r×ûˆnn=dZRJSØ‹6®%,¦n8/Lü°¶2º Ô1õl7Õ (•S/•S55ˆwxˆ…ØR‹˜ˆ¸‡ƒ8‰•‰˜‡ŸX‰¥8Š©ŠV*ò-?O¼Íf ÅZåWŒ8Šå©´5W®µfpÕ‰2÷]²‚Whƒ8MëL‹"ä×]êm9"2^î8Û¥ëÍŽ3˜"t¥ŽZOË‚åÅ‘ÿø‘'Z³U’Ù^öý&ó‘H1a“‚+ã`bA‰pdÄ·5I ·&TC|+b‚D`VõA$¡0®'`J`ƒsï1‘hÆ!VcV ¦ÙH‚똗Á•ÿô_¤Kn%æz÷„¥@}$7hö†ÞFÂbdâXÁ·'óáöN>­!"(€/jáÚ`q]Ð=m¡þ¡,^V/ˆi?l¡FÂö!¤Ûo…lºÄ–ŸcZ™…ˆY´I1ýU"ý÷*&)n:†ÿí$Yi ôÔ”}âÂ!0ë'"X)¢ýb¡Ä%r…WÖó1v!ðô]8$•Ťa‡¦iWE yõ'¬×²–,)­gnÔà×!t:‹oh¥9•8{â\l\ßë›Dc›¾b4Rf-¤m¨$œì#JÔŒ¶õJeѦ |åÿJ™²CÙþ_ß~“y¹õæXv")4¨o;YIæÌ¸:‘:u£pFM"–¼‡NÑãï1_q áVÚÙÈzæ–e"geZƒÕ޳óVi;ØaŽ[ ñ8=¸,7"0$ìšÚfSw.täà \æÀ æ@&áÁ%\ü \ÂaÂÿ'ÜÁÝ ÂÂ%AÂM<ÂQ|ÃQ\ÂÜÁ]¼Å-|ÅeüÄYüÅgüÆiÇuÆu<Ç}|Çm<ÇÇ-&5¾÷ÀW :%㆛bß" ""b"Ê "ª<sM M²¼Ë±ÜÉ¥&Ä|Ê¥µÌÇ\ÌÃ<ÍÑüÌÓüÉc"Ëל̭<ÑÜÍçüÌÍÜÌ¿ÜÎÛ<ÌË\Úâ¹€ÙÓ߸/ÆôJ½GOB(:Œ‘Ê1Ñ%]Ñ f‹‘µ‹AØv'}Ó_äº7¹`aq^Â1HÓMýEVƒK1Ê#x‰3eÐ`¡¦X›/õlyØ[rXе¹Ry½×}Ý×k=ØsÝÖ½ØýØÿ]Ø‘}ÙÓÕIœýØÛw4Ž ³.ó%nàÆZí5®Lc/FÚ Ú£M"dŒø‰ÓD…mÂ=+¶Z­KÌ£ÕÝå]_¸µñØ(è]~çÞùýÝý}ßÿ=Þó}qØ]G""W²‚ß~á DHŒ©ß©B¦Ï‹Åh'¹Ø#Íå`pW0\¨@¶åá&È‚d*—0£ Dn\RŒB(—¦I¥ba©c$ÂÛ>¨b=R"(RB˜«”øZcŠ™˜}ž$rþ`vž#(vUo^è†èÉè{þ#vSVåâZ¹š€¸Yy[¾$'9‚otäÏ\¨šN ä†ä$oVHQT’@ÓLþ€. ÿr¯^ƤÖ"]Óìs©”7ãÖb3:ðD7àu Ì%t§žO³)»zò÷²q÷BD8ò6MæØªíÃ(l¡ˆÛ!€$B3Âc°Â¿¢$ÃBB§Ê‚àCä´'b†©ª5ÚâGD’`-Ú dA%Œ U ä(ÒçkÔÇ…óÝN§ÈGfЇ‡6þ)÷ì {¬òß"ewh û¯_¥fðÔ;4nŠFnÊX1%RÂ÷&HN8uÃ)å’Je_©‡‰´6VäDà%U3—sƒH2Âß·}ÞîûöOÛ¿}Ú&<èo[ÂÛ"êX0£A>,¨°!Èÿ~ÓWqÛE”O¦\ùÒeK–*eÖ¤±¥AmÛlÙz8QäÁƒ‰Jò‰ÔçE…ú&l”ÔVL”|ùóŸÖ­\»zý 6¬X±ÊÒ£GQDOùã‘_Ûœ–Þ@ÀQeBR*ôäEQ„e•ÄM™%[VQDa´OJ‘4PDÝ´¤ANét•›ù¥·$ž)Ù™'Ÿwò©&–nî©ç 9J蛇¾©h k º'Q µÙ†VûüÓæ¥—JôÚ@“.„饠ŽÉ-“X"‡V aº7 ùóÚ@e‹6>E¢–º¦·kB½jók°¼ëëŸ7Ùt¨>U”ŸP# e[\3ÿFSP$5KL3¥´I}{æJ'iDm¹[®¸ê¦kî³5±XHÀe$˜7Àªd/Ag…–‘$ºlcM*¶eëR²h£Ë¥³- V–üh‹Ût íµWŒ1Å?kÐqÚzœ¨³‡kSPçr n³#ƒ«Q´'¿\Ði0“¼nÍíÎÌn“þTŠ­>áê)®œ¹¹O©¶Ä#M;ºXcKµ"u$OüÍ%•OÖè‚Ieº¼µÖ:qýµ×Çâ²·!‹§Ê2“Kö¡É¢móÈØºmÝ7M…÷¶œ÷ÝnK”Ä›âÚF-¡ƒ þ?’DÔŽ4ÑlÓ YÒ~µ½öZEC±}sÌëÕ¢û9çA‹n®ÊÍm·ÙhÛÑÊÝrÛrŸt]zž{ÛÓÞ(7ù±Ü›]iШ¡.‘£ªåWt¶Öüs“SzŽÑÔOÎ…Ü{SÏ“õóT=}Û?™½÷Ø×÷l©ÅVöç_?ý÷Ô£o¾ûk]Ÿ}ùÕ3×þú×§yùó?öÉï|á ÷þ÷?îp-œÞüò·ÀóÏ~ðË_ÿØw?[IP}ÿKr\Â?*5°| ù²g€ªp…,l¡ _ÃÊp†4¬¡ oˆÃêp‡<ì¡h€€;fox-1.6.49/doc/screenshots/arithmedrill-screenshot.png0000644000175000017500000017325311637250333020014 00000000000000‰PNG  IHDR X'gAMA± üabKGDÿÿÿ ½§“ pHYs ˆ ‹ΣzŠtIMEÓ +/Ý·/ IDATxœìÝAˆ$Y~çù_ Vð` ÏÀ Ü! "  *‹t5l׬`2¦Zs˜sjXX†ÑaF0+]¶²Z¨+û¤ÞÃZ õ^Í–Q¤n´uÐNÖ@• Ýt6¨ *Á *À”ÃûCä,ÂÓÃÝÃ3"Ó"Ü=òû!I,ÌÍž™Gäÿû۳מ>}úéçzôDxy?øß¿U|ú¹~ø£‡ë¾€›ãŸP»èW±î7]+ɽí¶ó³='RëÝN—ëìNo%å“=o÷«ïu,påF{ïv‡V;ïtÛã£Og±M’”Žëk½¹+ðOæ~ÞKÿüþi÷gÅi«?x•Í¬ÃøÞt{”–žóçðOÿô{z…7°Í–Lþ»ÿøßºÕ‡üáG¢qÜŸýôÏÿàŸ~ô'–ï-ž¸…¾þfüô0Ýü‹°µÆ‡ü´ªyòË®kîOÉv^…ÿÅÎíùæï¿ßK,ïÁúèO>úð?”ôáøïþã³€Õ¯¹È5§;æßýÇÿ6·snϬ?ü—ïî½$~ž¿ÿ£G+ÿÁ¿? vßþ³‡’Þÿ­½÷¾:ªnéÓ?{¸ô€«Ð×E§guò¯uø¤ùëOÆããssÛÜ…VÿÀ)Ì IòINõQ·ÏÃÑW¾Þmu毽¯„Çÿý'×pw?ùOôþ¿]>;×¥±Ù¶¸gÑüag÷?ú“ºíi»U7c¸"'M=}út¶IkuÃV­KW’öÞ ÕIÛ…|ó£êÖÅïÇ]4¼®wöªÿí_¿3\â7^Àk3VÙ©iÑ«Ûxíµ×~òŸþhÅYç>E8ŽûÒ‡ÝöÞä¡·þáx‘tÕyúôéôŽg·}ãöHÒ¸ÉV„ê–¾q{ô“O»¦%™‡›ÛC»÷Ÿ)nÍV€~ðïß›+Û¼w{ôþo«*Œ›üWÿïáá8Ížò_ÿáðýÿiO­þóÿw8Œ¶ÿÕQ‘ø÷‡]éë·Gïm8z#t÷vð³úáÏÇϽèôÒû_ŽbÐë7ùá/êƒGã¿«oÿÙÃÊì_ýöÞ×oWáu½ÿ[{?ü»ÇÏýúÏuÞWxù‘ØRÓœôôéÓnã"“ƒßüýïÿø/þpzn—jΫxuV-Ó0mÆ:,ß;oŽonžKÒŸÿ~üw?þæ?ÿæßþäo¿ùÏ¿ùã¿ûñê›~ï푤O•‚¥ýwGï½ý,`=;ævõé?6«Ç™ó­ßÙë6FUøÖ?Û»ÿ_Îdˆßûí=Iz]ÿæô0I£7¿ù½ûÿåÑ{¿1úÖ™ýUøÖ=“~¾*'Ü깿÷Û{jŸsnãþן~ýv%éöN5?æå¿þ¿Â Œ À‹h}Úƒ‡»Óu°ÆŸ}Ú}:wøáÏw.õ’ U?ùO¤…uKKWºÈ:XÓ˜µÔsóÓjïìÅnºí“[aû[zçÍøËÏÏô!ýðïÎç€oÿÙÃ]G?ü›_6®?ü×ïHêª8³¾ÿ£_þá¿}:-e­6[úºH€[°ºuºXÃÒ"Öï¾ÿ»Ëïãï~ü»ïÿîßþäo»¿Ï»Ä7Þ>ù•Ýÿ_¾þlçWGsëñçM¾XŒZýˆßáÌø¿\8²ºµq¤ªZ²sÉa§ç>zÜäÖ«qç v’Ãò¯ç?z¯Á¯ð#°Q¾ùûß_ݵh6~=·K3}W’ž>}úã¿øÃçf¬sV—®N[«0iá]„g¥4îñ]„œœšVȦ9lqÏ¢%Ë4ìMja±«éª ÝúXÏ5[Ù:ïÙÃ÷Þ>éªÇ'¿ÍÇŸ7s­ö×ÿý0gIjj3/ãáÏÇõñaÓœŒ9nò_ýýáÃÇã‹\ôàÑø¯>>‘õkIjšü_ÿáðà§ÏŸ(ÌYŸ6÷ÿŸ_®X«¯¯Àu+¬súãI´íìvöF»·»V˜&)†q¸‡»’¬fÁìB½:«}ó÷¿ÿÚY9ëýû§sYjqÏœ×þòáÓOú¬ ³—þÑÿÑÒH4JÓtuñõÀ«®}6gæ“g0Þúhx2Û3>zÖKãîqpZ…yrdÓs½ÏzÊUØýê{’>ùÑæ+Xç¥+­iuU.,š¯`ô¬[õªë£jó³=' =X3;½•”{ìÁºRçV°ð’ž=EX­ZGàZ&É IÛ÷–Þ3Ë4|û_ìwVøÁß<[4€)B€ž°zFÀè  g,€ž-ÙóRw÷ï.ÝÿààA÷уƒýÜÔ²kÍ >½âì¥{¿ €p‰€Õ¹Îør‘k§À¦¹tÀšµ´b4[|ê=ý,^q®”Õí!u€5ê¹kwfçìz|é°ÓPEºëué Ö4Ü\CŽ9¯v^ÆØWÒƒÕWú¡¶ÑKõ`‡`^eW¸ÖÝý»W4‘÷Üa™@kÔsÀšö¶÷²$U7ÎÜh+|î×ൿ|øôÓŸ>”T=þö¿Ø[÷ýl¥üÍáp÷¶¤O~ôƒ‹ö`­^¡_+–Œ¿ŠËôë¢kÓpØX¼ì g,€ž°zFÀè  g,€ž°zFÀèÙ™…F>>X×}pÜÿîýÙLù‡õÕqÿ»÷ð7?œþ8¿’ûþýë½n2þa}51EÐ3@ÏX=#`ôŒ€Ð3@ÏX=#`ôŒ€гù•ÜW»Ër´€WÛƒ¾ß~ÃRï[á²o=º\Àýº÷{ë¾<ßes0 €u¢‚u#уÐ3@ÏX=#`ôŒ€Ð3@ÏX=#`ôŒ€Ð3@ÏX=#`ôŒ€гbÝ7–Û¿³ßãhÜŒÁ· €ÍÕW¶8øø`1ôlïà›)B€ž°zFÀè  g,€ž°zFÀèë`°­îîß•ôààÁÜé}ü+|CPÁ`ûÜÝ¿;Sz\Òƒƒ]úé÷BW:øæ ‚Àö¹Òtr¥U¥›Z²šCÀË]ÃäMÍ[L€%®.]é˜"$`€yWš®^,péêå°Àõ¹Òç7Mî`‰+Z­êÁÁƒÙŒuSëd,¶ÕÕu _Ű×6þ& `°}–βõ\¶wðÍAÀ`ûlïZ 7/K-E“;@ÏX=#`ôŒ€Ð3@ÏX=c™6×ÁÇ ¾Xl¨ƒöïì3ø6bŠ g,€ž°zFÀèMîl¨~ûÄçëÛÞÁ· €ÍÕW¶XúXßö¾ù˜"è  g,€ž°zFÀè  g,€ž±Ûíîþ]Iô>æÔÕ ÞïÈ›ƒ€À›KBýºŠô3ïîß½»÷Ff,¦ØVW”N®¢$¶Ôƒƒ72]‰ XjZ»©èJ°ØJW7¹6;ìÍâÝøôÆ!ÛgÛ[—¦“ƒWÚC¶FT°ØJsѤÇÈum=X7 €í37‹'òІaŠœ1»†‚úŽnW:øæ ‚Àv»ŠŒr¥¹ç¦†ªY,¶ÏÒÞð~{°¶qðÍAÀ`ûlo…éæe©¥èÁè  g,€ž°zFÀè  g,ÓÀæ:øø€Á· € uðñÁþ}ßFLôŒ€Ð3@ÏX=£É€ ÕoŸøÜc}Û;øV `°¹úÊKëÛÞÁ7S„=#`ôŒ€Ð3@ÏX=#`ôŒ€Ð3ÖÁ`ûÜÝ¿;·çÁÁƒ+¿ß‘¯zð A €íóààÁôOïƒwh:øb˜ÛØÁ7 €-6Í+뾜AÀgLkK¤·FÀ`[]QºÒY¼¹ôvSÑä®Õ4ÞàŒE  g,¶Ò–6HÝøÉÁ œq¥Mî¯H==Xl¥+&Û;ø† `kõÚkKv>}zí÷q[t«À+`é,[_Áe{ß,`M–æ•Ù6'»lÑ­¯Œí­0ݼ,µ ¸v+òÊâaëÍ.[t«°Ihr®×#Ë ߣ-ºUØ0,`ãmQpÙ¢[€«DÀ®Ñå-ºUØ<,`<}zòç<›w¶èV`}hr®ËyÉc6¬<}ÚO@YäRè×y«p°€µZÌ=\¶èVäàãßF,àºLÊæ‡’-ºUàF;øø`ÿÎ>ƒo#pí¶h½¨-ºUØ$4¹ôŒ€l˜-zåßÝ*\/°I¶(²lÑ­Àµ£ Ø [ÔN¾E· l¹~ûÄ_ñÇú® ØYwjClÑ­7B_©ˆÇú® ØTÏ,—ª$­8øå³é Î"`›j‰6?¾lÑ­Àµ ÉØx[Ôó´E· W‰ °æ ?‹1åµ×6¥8´E· ëC Ø}þìÛŠ™¸Ås¯nÚî"· ¯[æîþ]IÌíéÌîǺ0EÀÖ¸»w6KMwJzpð ‹V‹àúQÁ®ÑÜTÚ&O¢mÑ­¯"Ô¶ `×b‹¬Û¢[€MÅ!°>+¢Ì¦¥œ-ºUØ,àZô2Åv=ót[t«°©˜"Öª+ÿÌÆ‘-mÑ­Àº°€ p‘¤²!5¡-ºUXp]–.Èyu×zÉÓ©NÛãÁÁƒÙåXk°€kôÂÁåúkB[t«À«g1Bª6  ¸^/\ÖY¶èVWÛÒe±ˆ\ëEÀ®]—B¶¢™i‹nx…‘¥6 X“ÕÙe£òÊÝ*l°V[”N¶èV`ÝXh g,€ž°zFÀèMîl®ƒÖ} x,6ÔÁÇûwö×}xLôŒ€Ð3@ÏX=#`ôŒ€Ð3@ÏX=#`ôŒ€Ð3@ÏX=#`ô¬X÷ ðJÛ¿³¿î[Àó||p©ã X¬Ó½ïÜ[÷-àù.›ƒ X¬¬‰,€ž°zFÀè  g,€ž°zFÀèë`°6A¬×^{íÁÁƒé{Ãs÷¹,6ÅeßÇr–ÞÛÞð†ÜS„=#`ôŒ€Ð3@ÏX=#`ôŒ€Ð3ÖÁ`ËÌ-õ4]ð³Û©õ?_à”pwÿîìÓU@»ýk_ô*PÁ`›t‘èþwïwt~Þº¸+ XÓÕýÑBÞº‘¨`°•fsÕþý{ß¹×mßûν.0Í ™zÕ\&›žr¦1ëîþÝÅà5»çÁÁƒ­«uQÁ`›tIèÞwîMÓRWÇš&¤ûß½?PK«\Óíî£é)WtÃÓ¨4[ÊÒLZšËR‹akiÛpT°Ø2ûwö»’ÕyïÝ;øø ;F3qj¶p5V³§\Ùý.ÉX/púv¡‚Àöé"Ôt{é1÷¾soi›Ö´®ù½Ès½í7 €m2Œ¦kq‚onŠpé§×cZ¸ÒvÖ¢^  €í³ºejiÇÕj×\Íš³º¦µ/Ûd¶É}Z¦šûhÚùÞ6Ý¿b´iÏVïf°æz°¦Íö¶/öimãS„4¹°eÃÐì¤á´·}î°óòÓb;|ïV£¹ õ#l&[cšÃÐÒž÷ Î^]´Z1»·u™éRXlÕyëí£Zêf§¨Xl“ LQWg{óMî=#`ôŒ€Ð3@Ïhr`Sl]ûÖÝðµ!`°^{íµußÂålÝ _'aë–$غ¾Nô`ôŒ€Ð3@ÏX=#`ôŒ€Ð3@ÏX €uÚ¿³¿î[Àó]vÍzëtï;÷Ö} x¾Ëæ`ëDëF¢  g,€ž°zFÀè  g,€ž°zÆ:Xl»ûwg|pð`õ‘+¸ìYs—~ÁŸ{Ż繡õrŸ/†€À¦›Ëw÷ïÞÝ¿{ÍéáJ/÷’ƒÏþf^~´^°Øb³Å›Å`±ôÓÅÓ=—ÊmÓ³<èN<¯(õÜ+^äà¹Ã.~‡‹ñë¼Wÿ2/…,6Ý4gLÁ\òXŒ&ç}zÞ³ºˆó"ÑŠ#/rÅßhþV_îâæ\ý˼,*XlÅŒÕטt^ugZêå*ýŽÓÝÛb‘¬ß[Š€ÀÖ˜…Ù¹¼‹z¹ô ŸÛ×=\ƒ¾n•€À¦›­¾,VŒVGŸµw|_|2ñ*L‹XºØ¯¢¯_=XÜÓqñOÏÛyÙë^pç¥F¸—ýu]  €M7Û€5WÍÒùYK?=ï”éþóJ8Ó«ÏU¤»šÎÛ9×Tþ܃¿Ñ‹9o¹Æ¬~/ýÚ_>|úéOJªß.÷ïì¯8úîÊO¸ñ||°âÓý;û3||°úÖ›asVŸ:Ï\Œ»ŠÞ¿³ÿ{ÿá‡ÃÝÛ’>ùѨ`€›l-S,pc­«ºÆS„à¥lòäàÒ{»†¦‚Ð3*Xl„ÙîøW¡5þf#`°f]´úÞGß›ÛOÌÚ^,Öéàãƒ.Z-®#pÿ»÷Î_âê*^ÝÈ×ï®óZ׉,ÖoqÐÕØ].¹ÿÝû÷¿{_gÃV_®3ôܼ€E €µéÊWçe©nÒÅð4MWÓcº€rï;÷¦Çt{æF˜ÛÖLé¼JÒbì¹cžwÖâ…¦‡Ýûν¹=Kof‹PÁ`[MãÈÁÇ]ºZ¬iuyh6-½¦+ÎÏ…¹óêd«Ç\Q]›»Ð4BÝÿîýiöºÒ²Üµ!`p£,Ö“ž[pêòÍÜΗséY+.4[Íš†¶í-b1EV•‹fg/î¼³V\¨›ëìÖ \q£°X›®B3÷*âÙO7!jtv×sÖlƒ×V¿*›€À–é"ÈÒÆð3ê<¼Àz —:kv>q¶~"æ   €uÚ¿³ÿôéÓ¹22Î;K3 fÚ>_»TiºàÖÜYÓ‡§Ÿ^$*]ê¬éÁ³ò/ð6 ,Öl±Ìs‘²Ítu†é)«÷œ·=·gÅYóâg­¸ô›‰€ÀFx0qÞYçí9oû*޼øYÏ=q1EÐ3*Xl„µ,bÞW›<æ°X³.ßt¯|žµ½‹€€À:u¯#ÔÙ÷=ßÝ¿«™‡ûÎ;Q+^_ºTúÒ·.}} ^ €õ›[hô¼×?Oͽpé1Kzèž›쎜}šïÒ_g°X›®|5Ss5¤ÙeÍM¾š]ú\ç®f÷Ì<dé[Ÿçê[º.‚§Ø³E©KÙ½õoº8çâ’K§gWœš{óÜâ¥sRåº[onÝÎÕ,µ40ÍÎ!vsQìnõAÀ`#\6¸LßEsͨ]]=X¬M—¥îîßíÚ°__sÞzè³ïé»÷{Ý,!6 €­t^%iõdßeGËaŠ€uÚ¿³ÿôéÓ¥¯^¾Tè™}¨pvœÅsZqÖbµ D €5[º’ÂyÏ>ý7·gö£Ù¹s#<÷,>qö]:¯2*X¬MW¾:/Ku‹#¬Osm[Ýzîç“KM:]kúÑÜÆt䥗[:ÎÒ·AÏÝÒ«P袂À–™[´«Í}:·=]Jt.ÜÌœæk˜+-ÝyÞK —<|1Ý<—«`=¸Ñ¿ ¶E·ÔçÅß÷<—ŠÎ[ÑjnÑöéG³§Ì.:úÜ•±GXq'7 S„l¥Ù ÄiYhõñ«X¬W½ÌhWtî¶`Š€µÙ¿³ÿÁ‡tÏ .ýô¼²Ðlehnãe, Ä `°•ž»4ì®ÿý‚?÷£Ù„w‘q^A—›"Ï"fm/ëÔ½ŽPg»»º¦çûß½¿byôóšÜÏ»ŠÎ>œxÞ+ —žõbo¼ø…nz°X¿¹Þùž»ÄÒ°²:Á,>Ø-ñܳ.rØê‹¾ÌÛˆ kÓ•¯ÎËR³/ÃY4}³–½ð¼ºÑôÈéÊU³W9¯X5=LçôŠ­XÄkîB+~áRÙ¢‚À¶ZD–®b5»=[OšÍI+Ö8}aóâ‹ çvžw¡¥_äêÛ…€À¶ê–Já8²xâÒÔuÞ¹ÓY¿ÅÅè—ö‡wõÕ™oK°ØJÓ×ã¨×wÑ\*®M_Jxï;÷î}çÞËWžn@íªCkÓÅ£»ûw—¶a­hÀšZñçk3õÓfÜÏ& ‚À¶Z]¾zn8[<àRñhZ¾zîoL]êâX¬Óþý§OŸ.}×òÅsÉâsy³Ï.^ñ¼¦+oÚ¦çN›¾¶¹Û9Ý>ïB‹#\ð;n¦X³‹),5Í4³gÍíœ;`vÏy#Ì}Ô¥¥ÅÓ熚ÞübŠšá¼[]zضw¸Kzí/>ýô§%ÕGo—‡«¿R·°,¯¬ÕëΕ¦Í7­'½‚Óy½Ø¿³ÿ{ÿá‡ÃÝÛ’>ùј"èS„`~ùu¼$*X=#`ôŒ€Ð3z°X§myÌðwÙî4ëÄ»e¶Âes0 €u¢‚u#уÐ3@ÏX=#`ôŒ€Ð3@ÏX=#`ôŒ…FØ>w÷ïJzpð`ÃÇ|±{˜êýf®í;RÁaš~º?ZÈ[[„ 7Äl™ (Ó‚Íì‹o¬ém/ý:‹ì¼Î¯I €›`¶ü£çÕ~.uðµ™ÞÌÜíuîîß½Û¥_aõÎëüš,n¬¥9cÍ÷´Òl6ê½ë:¿;S„Ü—*ÒlHájÑ´Ú4­ZgéWØ„ïEÀàæXŒ#]XYZ¾Ú´jÖìM^pFoéWØ„ïÅ!7ÍâüZ_¯ÑŠ›\úw^çפ‚À¶š{bn6RÌVqº÷,=xæîJ˾…Ζ¸æ¾Âê×ÙçNÀ`û\vjléÔáÅO¿6«ïá"Sœ«w^ÛwdŠ g,€ž1E6Ú&Ì]^,€ž°zFÀè  g,€ž°zÆ2 ¬ÍÁÇë¾…ÞÜÿîýÙ¯s“¾š¾Ýs°X§ï}ô½ußB–.Uu3¾š^h!.`C}PH­¬0o]3ÛVÈ[YÍŒj IDAT!µÒÉöì~óÖãɧ¦Ós»ítvÌïµëþ’’6x!Íý;û9ìµ×^;ï£ýjW€Xƒt’x¦©¨KB³iI­ÂÉþù¿OÒ³íÓ¼õüíPX>ÝþÓÓý©•öaëëþÅlœç΋ݰ©À¾ÐäXƒ¥[ÿPJ'U(wÉO·ít;·ž¥|R…rI§™ÌM²“J•Guu)©uÓIeK3ãL·«Bj=H¡U(¤Ö«™s?’>Xë¯eó§.ˆ ` >дRuR…Rë]m©û»:SZ²=·'žÌ ž©u™ÜufÛä>sŒÏœ«Ó¿?:ÝîÆ¿!mDÏswÿ®ž7£×¥«ƒ.8uøÜKt{:‹—žýtö˜óκÈW¸6,À|ORë=ër;IWÊÏ’–¦ŸÆÓcºÞ)“[iϪYf’ÇR’«° —É Wk.—Ô%6—ç‰L'ãK’» sŸÞƒ¼õªP~vWú ÕÍÎX‹9f©¹'/•±–^b6ÝÝ¿{wÿî\6ZÅ–žuÁ¯pX€+ô‘4×#5ÛuºÚÒiJ µ(›­Efr•&y03If’K&—º=¥$7™JfÙÝ[©Õ0šÜ½U,e…©p¹¹\­©ðÊì—¿p™¹?«~¥Ö­°qëVØG­¸æ_äZ, -õbU«K]â<Ï-M]dü¥u¯‹ï¼,à y!o] ½PñtÿlOU—ìۖÇB*\…Tx0U]]J²Ò¼ðª°,¯rw™òD¡ E³TxlÍ ­¥‰›ÌÍciéôŠjÕ˜W…²yUÉJ¹¼u÷®~&¹›”üd¿¤?ÕÉ‹¯š›Ñtµ¢îu‘/pEà Ù³'Ï<fº¬4SÇòÖ½0+<–&ye¦ÂÕšÅӹгõ¨|¦¿ê¤·étª“c줿ÊÌUÈÌU*”>2óÂG•å/]·L­ë ¹¹ZY”v†j]o\ÕÄrëÁ”K òÜÍè™W;ßÈ^‡'‡yâÁ-ë¤f¦$+=XÌEªÜrëjc.R°(%¹šÖ«‰e÷äŠ_º¿.3EÙ[6šøáçžÖý^—¹ õ2=ï«ÍuA© 4ç¼G—^èe®NÀô㣳]V]Õ*Ï×®ÌNWU¥Yé’Yé•Y.¼*Mo¸™™¼2Ë­ë ¥IÞÞ“¤ã±$M\­Ôª’åÂCa*ZË­E®b¨ãÃP•Öu¬‡8”{peO¡5M’dM·FÃqòlî©zÓw³.±™O<¼n22oÌÕêö›öÉzËë³gš±zIW]Ö™Æ æ˜ϺøÎ@À¼¸™õBågf]§kYt+-˜›™ fxe’ZXW=ž]] k\™¼Šf¥›™•J“y¬Ì̃Y–‡Ö$ËqÞz'”C5µ‚ÂëãÐJE”®ƒE• W¡àQ'ozVe¦R9)ËÃÀÂðd±ø 5JU2¦ánˆIÇ>®ÝÌš‰[aõ®/+™LÁM¦èag$oªVù8…8~’º§Crµ,®û?ÀµÚüõ6 p!¾pvýªîï|òö›é;’ç©¢yé±4™[u²¿K9*†C‹{ªFY És™‚7>I*¤•Ü'©ÚæT‡#k’[! ÝoÒiOÕ@Ábžx˜¤\(ȲÜ4l&ÉZ©Uh=wõ¶/ÝÝd.Iæ*Ì»ùÁÒ½Uó‹GÖJ¥I–Òh8Ì©îFÓDõý÷`mÈˉ—zÉ{Ûä¯vÕX€ç›v\ù³wJ­æz­ÒÂ;»7ýES50•>¬º·FµIEW1º­7o‹¹©ƒ$óÐJ…ªr¨®;ª°PF•|¨6UѺ74ëØCiŠ^É$i")jR{maWÁ¢äÁ¢”²Ž”¬*=wo€~ýäFo]¿6{Ý­íºÁ†yR§Zþ…Ç[æOêªëÙjm\¸Þè¹ëþwï÷;àæ¸Á_í"X€U>4ÓkŸm+Ê­={Ÿ`<Ý–NžÑ ÍåÕPñÍÓ·,K¹MÁLæaøn¶Qh=qèǵÚÊÐLÆr™’&òãîMƒª\Ù,ÈsŒÁ•Û“5H•$ó0°”Ü“YY‡2š’³KÇ)y•–]Á¥Â5ˆJ)r¹}¡Ôº½.»åî²ÂÕêð¨¶/eæñ Së!ÆÔ½kï´×Ê[T­¤Üj¦×êd·–™¦Ï ÊLæUT.¼*Ôõ¶g÷¦>Ú¹´š<´`¦cU­«4)äÿñI ÕÖ*Ô¨ÊU›I­2æV::JÇí(·)´²²[GT¹ˆ*$³æ‰Û“ºþBv+ÅÁéMJ¹U²'ý,)Ö£‰Æµ›jÛ~äVÖi"ý¼¶ ™¢I…‡VMínòä!yÓÖÕÎmµRʦPÊÜåJ]§ªm`¡8i$½=T©à’×:VVJf6©«¯ I……Ö÷Þ´&y°Ú$3µ¦VrÉM»¦¤8IiâÕÎ(È5ˆ¡NšHr1OR0Sá•L¥)Ž£~eòq(-ê Ñ”|´#µ.ï¿ 7 ^9,[ã*Ÿ®q5Ûƒ¥™Þ,¦îÍÍr©{O³l¤jg˜ÛZÝ e*1· ­rY…ãf\x,£&9LÌå2³ÚC<½bárkŽ“E“EA;·ÃÄóä±OÌ'.W4—›^ wóàêøa“R–¥äÊÊžÜMÝ ® sw{â¹áØ5Œ#Où}b:ªÕ->Úš{ª,fóÐZv÷c—¥J·½õÃÏÝni4°¬$·ÜšŽ¥ÒƒYöž+X¯ørç[äþwï_ê? ^!œÖ®fVÕ\½ÊgªVÓí®ËJ…U§]íUixµ;ÔÐÂ$6­[ƒI垊±Ü%…"ê-³Gƒ™b¥tè‡6¶ß8­oE rÕɳ)ºV§qm·,™v‡á«#ÕãñÏêMJu8ò|œªÂdb×I­ùÄU¨*¤Â²{M“ÙØÓh’TÈͼԨŒã䣩Œ!©9:òd^xUšËÓföxTF½Õýóè¡Už¸Z¥cÝzZEÿ,šÜo¤²î\‡Šù¾+éÙWÒLíêô˜3ë]ÉÕªKW.7S6·Jy`ŠU.­ÄT¸v¾žßð܆䵣ܦü…Ü\oÞÎOóq¾å£½(ùøóԸ˽IRiñ-«âP­F{1e×jÚZî2íÄæØe–£7îã_Õ))ËU(G½=TTÈ¢­™xj”'®#ÏGµ&j’«4ÄQ´<ˆ£·÷š”T×Ù“·:}®PUŒÃ7·æØ«n®ÐÕxRaãLÝJ¤ñ‰©Ë\è‰M£Á»Ò8¥ÚÌ“[ˆ Ë“:”&)”&w‹V <'ÓÛ1Jÿ½®b<ù¾Ç)»¾vÛÃf’ÔjôÕ(YsTWÃØL¼Ú‰a’4´æ‰››J¯ÌTÈ'JÃa>®ëcz°p!T°àUÑͦÖOú¥ÎôWÍþ}²?ù´ïJêÞÇWz5™Ç‘|à ³Æ¡õü†FoíåÂ5ñœj¥ÃzÃÔšRr÷ÑÎPòª0• ©Þ{{WÇî¥W»·UJ²ñ¯ÅšŸ=¶®âUD™ÅPÖ²*×Õ 6G)' wG¥ëzT›£Ú ;Rõ$c,\ ^ 3ë]UÏÞ!xv«Å¾+S÷Ì E·BY>ª”£‡î-R¶dMÓTîÙ›’äAÊ…³Üz(G¹mÔÊý¤Ó+ bŽRódZ)Zˆ{ÙŽštì)=R«¯ÿv¥P*×)H‡c ß”wïTª K[PÝø°¨U˜+{†Ãœêt,‹òÉ‘E¥±¬‡ÒÆ©63/b5T®ëÆå_z¬’òVÖ>6³\§J×îõÑð7ßýÆ{ùóÃÊS#n¹M¡ˆš¤5þ7ÄaŠ^ Ö*f'u,YavÒu²}²ßÌ ÅnE+³`RyòÌ`(U ¬23ÅÝPTÍÄÂw4ºm)©~Žë»ü¤RÕš —ÌÌ%“¹• Q±2ÝúRÝ ã8TïJ)´Rª,6“T#•ҤΓ†{²&'î­iR³]“KGžÝLæ£Ý¨Âr|âᤥެ𰻛?;JOšFï¼=ÔnêÜ´G*M¯ûÞ0fKa0T›”êfâ2ËîVšËý‰ª7¥µó/j¹‡·LÉÃΰyRW;Qî*¤2wMRÄ0åÿq˜'É “{Uµã¡NÄw†’¤ºVŒÕ. Â!¼fÞ3øìýƒj݋ӿ ’ŠÓ5±Ì¬t2;yW`•Í-›KãÆ¬Ñ07ôùãñ$Uo½Ÿ-JAq(Y~òXu'IÝÒfY.·¦vyryˆ6J¦|r„«TsTçÚë±»+×Ij¾ðw~+fóüäp|tT -þ¶v,Gƒ˜-iâ*¼*dîA’k"+]eÌm’»—¢åä.e¯«ËË­kפnRj\¹•Z¹¹g™¼Š–Í+ó\¸ŽS“j••–Ÿ¤\Óƒ… ¡‚7ÙGgß68}Ϡͬ}eÝûøJ“y,Ì»ÚUwLá£hö†‡hÙb”§Pî߸3ÚÙSšO‡öpd>þùOF;{ŠRÓ”V™é³:›þç&Ò¤–Y3TUX®]_˜ÞU“TEÓ±+¥êØš/ä­Æîï¼›ãdiì£=ÓqòGVý†«0{HRá!™RRmY ÑôÏnûg‡!©iU½uäÍ$UÑô¤¶d¹p¹U¥Ë­I^M\Ç’,oÛÑãPš’«~ìcÓ^Ũ¤0IL.u+×׫8T‘´Ã2 ¸ÜdÝ<`j=êÞåì'+5¸ŸÌÊ[¯J“Ü yá&sy¥Â­0{ÃÃ@¹ôPX.ŠØ”ÃÑÛûyp;Lj/÷䞋ÑUÙ›P{c^ bV%•ŽRŽ ¥©õªæ'É'²=©›«PÓªë‹òVúRU©\È¢e%d¥Ôšý†g7®Á0×u(¬™x5ˆÉRXÞ’®Âm'ªPS'‹– …á0×VÈv%·\XµkÍD*£íÞoŽr”R“룠¡½QWsë¡UޱŠÊîa¢Æ=”Ã|\³ñS„¸ÜdÓµ¯B+v²Oû±ºuDÍ̤îmƒUi*½Òé{o¹†¦áí`.åP„¦Ú«v¾¡8 ¹ª‘&µWT¨5NGq0”ªàÍØ=šåc…5¦ª¤à:üµöLj}£¢UJMòjCtIãG ©Ôø‰lhá+{ªÇÁÕ˜,Ùø¨Vcá·¬˜¾r{t”šö°Ú‰úìq¨¥BaâùWÉMoy5ª´8°Pšvö4iÂDú쨲(“nUú|&®£:Ԧߴªê8¥ÏUO|¯Mri" ¼2kŽëÊ4®Ý®à]„¸‘Xp“M×¾ ÏÖ¸’ ÙÉ;õ\¦`Ý3ƒ²RY>2é–[kŠîÑ|`a8ʯ+äܤdñv.÷‚[®†É8{Ê¡$sGI…ËÇãIm¥©TxbÍÄ%K#)—í™G…V¹Má35’–£…coZ,'—š/õÎŽòñØë$S5ªMés5­’=ì0G³‰Æ¿z4:òl®aLî£"ú ¹”åáØUFEËOÃÄŸÔCY°”eJ’êÚ÷JåB!Vy22µIRvIî _fwKžcµÎ»qA,¸Él¦ë´šuR»²ÂUXèzŒNÿ®Ì,( ,·Ý³uR9Ò- ÅPE2) ß•™Ò'¡Èj‡/ó— o½§Ç?ÑÄB!’§QŒ*\…4”›’›™ʽ F.µuhm<ñXX0Óqj޽˜J I’W·Lî~$™*³ü¤åPª÷F&)ÖÔ©úʻک‚KíXƒ*üËoëèP?ÿIõÕ‘R#©©k+¬9ò4¶Xøð–¥]ùÄtìU50¥¤)ÿê‘OLòXYúÒÝÍåVXS§®–w’ÕÖÚä~wÿîì\Ñ%¶käÍÄS„pc}PÈOŸ\òw«`.©i=ʺ§ÝÜKå6¹Y.%5ÅPйH2Ó­Jq”ÍÕZž¯’\YžçWp¾ìÁ¹àfðÏ@r¡„ Q#ѳ(%½Éeö®{7³¬íìšYÕôŸ0ËîYMmŠÎ¥6M+wRC Š ¹@þ@Ì î…gp¾à4 ó%)•ÊêÌV(äÃÝžùï÷,¾~î÷|O'sº p%e2ªP­òŠ Á¸}Ÿíãt¬ëhòÒ1XPêœ;‚Ì÷€-†7{^“[N‡ÇJ 7»H°D:ìf‡·}‰^Ù‰kæNt‹0×sýÁs²þ÷ôÖ…—ŠKëÂ… ^]Úó Ѐgò÷yWN®:†”‘d¤m‰nÇl@«V'Ù•ƒnp¤- e™sÿމ€?6ì‘hKÝr.³rGÌu1‹t7×£†-ÐßXÕÔÍžˆ­Û",G`+ˆèd] •eåäv$)jŠ™õ^ºÝ÷£áæ&þŸÿ˶£="Ê€¾dõ¨³ eQIùî&kDª2„ž¸;èæ2š ,ÎÜi5®Y"T <ר^>^TZÏKDßÞù\¢}ãÂ7nøâÍ¿çÞþ¤‡øù®žs©`]¸pá«ËZ©zð]=Ÿ9ˆ‡Y„HÏ×Mè ʈ àÉÃúH  š)È"FUðÝð÷¹ýuøc¼±ãÍcËýˆ×ß)ÝÏÁ8ÄõnM+ÅÍ}‹†ÑÛ±8üf‡Þá9ÈHœŽsqãxóq±ò5±…:U¼1Ƶçk„+߯€NúŠÓÝm½½»Ë§Oçhó4#’ò–è1ü/7Ñ‹â8O p-¼¹Ãu?ÝVn"$¨–5ëú>šÐK…#¤Ü1–­‚õ\Á¼XÊÂ?¯l=¿ú;Wž_þþcþè½ýIñ3,¶]*X.\¸ðÊÂÒÛ_tbq­`It òD@™ô+™.s€°«1NÙºEyxŒäÖe@¶Ð >û$–ƒù;1Ë(€¶8À‡H;Ó Œí`‹€ÉTÑ ¤y… IDATh‰Ó¬Áó>§ŒyŸí„¤¯ˆ×eæƒ5”£âÆ­£=½…;03fX%({£·¥ârP½Ãð¯—Û=gY"4Ãnh×c‘gÚ´ÕpöÙmTÆÓ½½ñض³ˆ­ò Ñ`KÁv3þÛÞ® RIÖÉÚYÁú¶ÆúÎ~øý|ÿ?äN~àCü 5ÖE`]¸páÂ+ËšÒÎsÔäß•}µª+œ“®d ·”#ÁºˆDËÉm;F'#£…5DgÖ½Û²˜÷¶Ý•¯>Ê8>¶¦¨´Gc¤b6”å—GYCœçtÐPØvˆ¥¨# #9 d̳5•')î*:ÙšÑÇÚÆâÙçv½CƒõcÔ°¥ÄþÀ”£[&p0‘&[z8è xÁR×ùµÑ’´–ÑU$N‹†­G­j´F¢ÊI@¶ªÀÖC´Eµ©Á[_E"QöHP½ÍQŸ 1Úle_ŽûüÆßA³-‡²t¶½% !”áÊîH0aª•©Z› 9’ÌdÞ:šðã5¾Xµú3„þÅbèÅçós«Ný.ëÂ… ^Mô¼RÄÙç¾æ`WF"ƒ¥)wˆ$£Ý®†è²Z×G¢ù>Zƒ^“=z+NÙ6Œu( y7ÆíÏÑÑÒPæOò–±}Ëz$‹Y5lëq¬&ÄRu't}N†uŽ$ƒ‚²ëÜÝ¢ó¨2[ªÀ2ã5@GÜŒÐj$8'°«Ú1“ÌGÆ?}ŒEku«Üê]Å?þ¹¢– ñu`A´jIÐ\œìhd4 Écª¦y¿f°ZÇ V—ýýÁ~ÿbGù·-íÞ*ÔÏP]Lî.\¸ðjÂÄs!_¸ì$Œ$ÁD$X":A)›ÀjEKÍH€¶!’}¥˜X¾:X#RŸ¯Çؾktc±n„&p߲ĀÑ3òM¾~¯¿cБ<{Æ2Ù,ÌÂQh°ëZ!PÖ>¾µ.µfÍ ƒ{¾î­s\ h¥öƽѯ݅q7Ù<¯I¡vóØÞØÙ›óß¼?þëß°9¾ØÛ±B²me6€õÌUXfÛp’ë~ šÁ8xÿ#}žÿÌ€õj¾eÌú£n­ï?æÝô!þPëùþŸá¢á¥‚uáÂ… ¯ ÿÂÌA¼p™‰jÊŽHòuƳI⺆ˆH0Ž‘`>F#8€´nˆäöhP{€.cù<{Ž&kŒ¢ðlÄ|0·@â$ iŠÔƒ5eã%ˆŽyx+NŪJ­X@Â:U¨ Êt8€s¥-’PG^3ß™c>Ø3Cb;ˆ´ÏRÜVT”‡Ž?Û‘[ŽêÖâÈs†gKˆN`qgÅ"…¹E+h5–®ÇhEËGi!Ô ÷?$S¾G?ý‹÷|ãGô!þèsû¹i¬‹ÀºpáÂ…W½à¾úÆüA&d¨ìåqµº¯`É#Ñ8jÊÝct´6bÊ8!o€˜ ¡ÍÖ¡j>" ËXðAn3Ò»Ö4}ùÑðîßáé´¬,P"¯ß3º+‘ÐXæ 2¿Ic&óÁ: @¶ÈzaõÂk†ªØÓ}§*ÌU-rœ«JËH q÷QÐ8–jMHÂöod4¬Sƒ£qDýcÂZž*¼3û]ö¿…ÛÞTË,sÇ _Èþõ¯íÓ¦Ïæ¡«vMØ"ŽÀgZG\gøPþûž þú1àÑ`õ î*Ò!:·6ãºÇÓ¹‡ô%‹¤t©`]øA\Ö… .¼jè¹×*ý¾—ÐÏS)ˆ`Mr²B= hýß q/Û"’,•ÑÆ¸‡ÑÁbãT°É,y÷æ ó#šGs»F,,u &ëúH°…1U\öÙËÞ#U«*ªH#Ò!wÈšT±ˆc™íæ&ŽsÆ^æŠS™Z ˜Û>wµ|ñ;²gŶ·Áùô:‡H:–EŒŽvM´ qWM5¶ÌoÞ„„§už]YBt°>GÊ–€e¶#ë½ô£š°.üt¸¬ .\xÕx†üâüÁD@Àš/J$9øÐµ'Э#® "Á¶ì 8Á0 Uk=lçîBÏ>Æœˆ+D¢ués©·ÎÌGhVý, l9D­–ó›¿)ç‰X&[€¦Œ,·§ECÇr{›»ǽ‰hU `W€Áږ0\?FGÌ<ç4MOgëûåûØ”éÓ½÷ÞðÜPŽ5o‰»j$:G®K3;°LtC~ËòîF‹«ƒ0=É pC6ÙÖ_꜆ / Ö… .¼j¨I€ÖôößÏ„ÐëüÁ&JXšFl e™ Å"°“°1½f8–òô´ˆ{šÈ¢ ¨)6x­ÉÌdƒuo1e°ðwÕï¬÷Õ I"јû·"Xš!Õè.QÅ»ó|ÀØhÌÃÀ.£*îöåˆ8ÎÃSÅÝ›\°Lq3øÛ» ñÅ'ñå ¨{H@ˆ#úØöe;ÔíˆÝ»ñhÄö&úÇ€  §îìQ»±v[¦q,±¬ ¬22tñ`]øA\*Xþœ½¾þêr–¹páe…ߨZ½èÁ‚Ð(‰r['=‰–2HKZÉͰ®4Ø&㶯änŒd– sD¢Ù€¸!NÀ†8›¯á£u=0[›°=`ÇóÞZ¨MhïbÙ›*c©"‰ vã­S…ÞQ+¶n‰èÈ4€´–'–h7Z'I["¢ Y©·œk5t^jÍ½Û ±MÖh½G^ˬ8VLSäQÙÛ;KroÜÕT€™HŸX%¸e,2^ÏõÜÛ<Årk7ÎG#RŽn²n‡mX×g~áÂå"°~¸÷h`GÁ<, èÂaH`¢À³5ƒë0/`ëXS©€%`Mkû´AL®ß_EHhkŸ°H)´ì Mh¬ªê²*°s% àE„]¸ðç…ÿ<ûêÛ¬óüAŠW ƒ°dh°N`oÝ㳿*ÂaÉp‚mˆ$ëG€k}Ë®€ íëçÕ,»BˆìÈÖ9–š·@«H€ŠÉ#‘‰±Ûxø`iÄñ`ɧƒS‡Ý»X`ÝKXÀ¼€Rîˆtƒ5jKBh22f`[àãßY:b‘-ÀR-u?,À\áÂvgD¹­9OŸXÞý ÓÊ HÙngTYž>ÉN¬ õÉìxø±?Þ ? .ë•å\£Jð”‘"û@4vÎ$h=Œ!Sd »N0䄲a>@¦Mɧ\¬äS&Z€I¸AA–{œªm<îe¢Á¶Œ&´M5U,1h,Ë„¦ª Pïz50¡.¥u៭U–†ü Öº}˜Ü—qNÆ È€’”¢Ñb)êÀ3”Sd“šY™=móPß:ÉÕ^ãåÜØkí5ëFH–QÍÜ¢w-d“ùÛir“‚°×ßv U8†Ápõ1ÏÆ¾K~ã©N^'l`Eª³½ñ8 v¶È˜£©Ì`'»A‘pŽ5ß0–ªF-¢À-4‹o»u#:Œ»CnŒmÆq=ú¡Ž³®{¾>ØÐÇì®Æñã Æ]­G0ÍÙºT°.ü .ëUûž‰$à9ÓÝ$­ƒÆhIñ¼™hÛ€ÉV—’™²PÖ#†ÎЈµð4 aHùáòº?{^¿(C ì2ØÐà‰jë¤/°1ÃKN675'/Ël­/ª€êR¼Žj“Î\<^.ü ùÀ¿Ç9½ó!É}„C>ôZ÷°•¬s4fªF ÁhÖ„+ádyÜO¼ÑeÛ`BbéßÉ*@æçšÖéyλýX_Ã|Œ x.­ä4bKã€D3Äg{[ÑhÛÇ'V¢t#—CQÎ]:Ó>‹x*p´/‹íã2ˆ»½Ýì åyÆv¤¹pÓ—§3Ö9¶yb?4áö ´ÖÛoïìõË_îQgË‚LA°&xÍ×}ñmßÅÝÛŽÀÁ„"®…¾Çíl—$÷ ?Œ‹Àzpö H²ËÃv$a<¯è! àÚª è쟂 ³¤Dï6€êСŠÁsBiRFãìÁ’¥/Çù²ÖµÅ@5°U‚‚¯[o3Ò€V±µº`¸Ú šÔ8p” Ó®4Ú©NuB²2“¦ãT른uáŸÀƒ«ñ/ÊଫÎ?íV“å꯲H°ä«×* Œ¢TÃP¾Ú£‡Ï&{ôV`Ê­Èluw=ø®¨¦¯7|íaË õš™dæ;‘x¾ ÊÁtˆãÞ¶»H´ÔÇÐçþÀ>w£Á¼Fq÷Ä|ð-ñ)ãnoÈ‘d3ËÝ“Lʸ‹›À"H\Ü¥8L±ìo~­RrÞE›-ñOÿ`d=ªé®|³‹6Õ#p¯á5¼eÒW=Ý»¨ªüKcEcԪĥ‚uáqX?mHÏÃÖ úv@k«®B Ú¦”AlD8X½¹˜L$Õࣉ’ÀM¹ëÑdÁ’[–JN `„Щ‰6=X7ÁΧl`m&K çý44ˆ=Z=k/ «$љՊ3×9ôáÊã~æõ€¥¬±Z/5­ ~(/&¹ÿÞƒÕ3ž™ˆÖÞ=C„]e$Y#ZX×ÃǵCв#¹C›à†Ø€ ÏWÜ|Óš†uî%|è(ŒHÙºœÂ69" 6ɉ¬JNR#P,!®ß7(<ìÑ[ˆÉÊrÈÜÁ“ÂàÑ”Õãš6îÐFsâð$êd‰ a©X€V­1õù¿F’}!ÜMVhXM ë+]¨ìXŽBSÁ“ܪn÷.Bkr),’5T€íǬ`ýêý_½xõ/1>y}ˆŸÄ`æÿÁ§ú—~¥õSŽ9x¦ûàÃê07”¤|E40­3T!È9 i@Z Üè (‰Èj‘²P™«àÐ(Šýš£¦HÌm5 0ZE"#q¶` ôó¹g3±HȲ£Ð Ðâ\“#¡Y]¢oØO{UIK‘t©]]¸ð/¤ ¬5Éýa¡@*Éè`D8­#ÉT´4F’uãCEê5#&õZ¦§‚M^kW8MhKµlÕ¬‡-¾V3[ëdÖg§b@´n†¸=¦Œ¬þV~óß&kB:X÷¸œ"Û0¥8„dÃãØRÇ[}úÁP×°á­ ¬"–Ù5*À‰4ƶ·vw·˜&$X{(±'QŽ¢n%ä„陆G Ê´z³<–Y :GÅ"$ óÂò£U°¾!~õþ¯~õþ¯~JèçÉE`ýô`×÷ׯíÎ:0±& ­CÇ`€ÞYmáɔЧ¬OŽdÖ H‹4Oµ B)OÐ\¨lT ©€`3$ŠòækÅ«¹ ä´C 8ÐP𲆂b¢„HMz@ëP,BGA•ÄDÒí $¼j-*õðt?Õi>^Õ… ¾™ƒ…ßç`AçÖásšfÖõ¥"'¢Ì{ty­HņauB·;|s2Ö¹R5`S°¦aiÂj< s“£CE7ÚÆ~ß]¸62ÂÿwK#n?´EXn‡þ´ƒ-5n?Ì®KîßlØPÆ1´”3Rm¶»õC\?.Ë!@!–„ÎyêÞòŒ¯&;î§§z†¤JÛÊÜApQ­Ò3rs7%ª-Œ¥ê „‰ °u´O_FÖ‹•­Ur}[}ãG/üíãº|Ï«{qçó=9‘zX?1è½wCîÝ™ (T# À0°­¹Vð”•äidÒ@ŠF°,R ¨Ö2•*$ªUP$"û±@™éÌÈÈÈ Ÿ§±~6ËK€³S­bBQU-@‚PJQ gŠhªšë {µ)j™ïnÔw÷Â…W‡‡t†ofb<÷®3õš@a] h5Ro×}´Ñ6X+X¸KŠe²¦èhݨöß?8Ù†vš°âv2LÁÑ‘& Xö–Ç+[儼Éj² ¢…-%t«S°£ucÔ½-ûHÀò^h²«}ozwt9Ž“MS!ó›}|1ÛÂpäÄP±”ѪÙ,eȇ˜ªµUCXd©GšK–€^C‡‚ÈGQª2UX¨&f"4Ý ¹÷XdbàGó*ü×ÿëZµZ/ÿ!ñôýŠá;~¾óK?9¾ÿÕ½¸óûÿ\ÖO÷Þ·ƒ‘ýÍsÄ èy' Ö€Pd¥BÓšhÅÁH˜æZË^PTi™ÔÈ–Ñ pÒsŸiôÎÇë)€m° H‰jòîÁƱYó«€Ós“Ï™¢k§R‚6§š8« ®2b6(Y2L_“ã¶qœ  &µ‚ãl×€FK@ƒ-Àýtœ¸V°òF8ÙYimß ¿5Ç– ‰¸ûО>9Û:t#|4{ 7f>¢=Ágû²È,Ö³4æa@…=HK;Є«ñ_~gìÑêü%¸A¥Y÷t“5QÃÖÑ!CÓ¾¢ÀþWçR‘ÒšÔ‘HÎEž Âj*èǬ`½¨ž_ýN‰ð\ýIJâÐXˆçºêÚ#^ÖOzïdÞŽãÍ&œ÷Õ®Èa«þ ’1€§ y›×ŒÁéîó¹u.ZÓC únè|¼rçdf´ówÜõ†H«‹«W««ž‰Ø'b$ à©f&`ÃÕ#O¸PyêϺªÉ¯XïÁŽhðœu?é©öO?ØÿÓ“éxXePßõÎÉògǼfÊ[€tC t†s‚ü¹)'C ÀÊR²¥–që ×cHhªT°]’å/ü\ø÷ÿXÎ,¥5½5i yC4X[s°<,Y$7øÚ!÷°T ˜¨3êóh5ž}WIvvbAM4²UkSa"Ñ|ˆNVØö°üPDzõø¼a,Ÿ‹€Ó8Ä""È FYSö”ùü&δ®Ì!&Xö >XŽ,K}<Û[Ä´ÔáH`.}Â\P ëÐÿ맪§Ê‘ÙŽˆDz? ç~d$1`#„˜ˆEZ3 µÔÕ´q®Eˆ “„‚а&8Èfž(ÌëñhÔ½ÐX±÷Ô뇧·þîÕ(ÇÃÚžÓw}mˆ¦‡®Æ|žŒ¶Îüê@Þ”*Öÿ9çÌùd@äÕ§ßQ@†iýj:†¨EjÁ&¤^—8Ó ¯:ßžB¸n%B"YÖæâ5¶EÕ´ÙŽsY”¯wH3¿p¢]NcÞÖ&´‚-ãŸþoëzt£ù<ï"$PÀ!0Ùñp»ËñÁhauÆ>ž×±¸ùÏ>²EöËÿ qÜ«>1ºmG¼ùkÔ©4ä×wvN_ÐíiÌ×#0ØÆ jÆãéÙǃðUº÷²ôÄêÀïjy¦ºƒ¸%«ðŒÜH{ ÐP Bùo U$âîìÄá‡}eP¿të'–ícýFÕêEþ€¿ê©ŠWÀkõ§òmUú—æ"°^jØõîy|c—ÏÍyD¯M°uÕ,k $Gd:ÑTê4O‡i®Uƒžþíßüzxc­WÙÚÍwOÖ(Ôä`m`wXFÈõõ^L^[u°ž)LV[†$6VÊ„Âû\Qˆ\1‘çç&¶qÿÙ'å8üñ'«´RÚª®à„`7БÓ<õç!bW ('¬îû5Ò°ùÊã$ˆò•—{9ˆ¦ ¬k…¤!AKä.c»V¹&k˜jf+U¸(­ ¯*Ï}W¬óöyÚCHžª9¢Mv?†9éÑ&Óˆ¶G÷X¯½Æ Ë)²Öǃ@t£mǬ…^{›ˆgª0hD©%·‚C~ã×!ØíŠvc¢Èò97+žP©† D’é ×9޲¥™¹:½ ×^c"ûwl|Ræ]NmÎÏ>‰†¡Ö8 z³ä¡jK‰&“°Wˆ*poìb>ØSQi ü:`ëƒj¬¾(ÖÜŠÄ ú‘€ ÆíÁ¤h²Šx…r°¾­½^ÉÊÖ‹®µï|!ÉuX//î½wyx{ÌW!4ev^¬(ž2œ=“²g,1ÝMû¯j= ¹»_¼·{{Gw£=÷Q½¸ÒaÀÈÍuª¾9+9µ¡¦‘ër`bM€PS ¡"(„ªBR)Ð 4ÔTØPÛ:s0´ì?ÿìðäɾçX¢žMˆ¤ÀÞsî\ɼs:…9_ÝÄIØ0NeµpP\¨À8)?"Œ„­ šàq6î'a㺯̮û šÄZår£[©ìU ¬Ý¨*hçÖ…W„gâAi¡ä:0tí%¬Mc#¬šl±Žº]Խ݌8‘ TKŠFk°›wÑhËPyO¤j>ÄÓ°Dt9oUŽûüÅGqíöúK±ÆhfýÚ{ˆbkˆyo­Æq¶TЧ<Ã*1Ä Ø0N@ðË—¿øÏqW-ÍHÀv˲EÆt[PꌅuO”dk•NÄ2ˆ®23ß}z;Wê·5_ ÉëqCA¹'Öü-˹²5f™?šëÅŠÔó=øV¥êEŸûzõEõð;ùÆ=ü=X¨h‡ïzð‚ üÆ{õgç"°^RÈÞ»lî™}„¬!ÜX?4y2Þ9 Ì¬%Bu~6¡V!ÈÁ݇GãøÆn¸™À+Ô{¬õ*$Â@#î1¤Q žˆ“ê´®Ö•Õ´ÁF¤‚F% Z¦V"=´®¿D‚VßÄv^ITŸŽ¸Ý×zœCª)oÆŒ™Ôš5Ÿ@NTœkT¤ b‚ÖÿHÖÁjÛ0Nçm¾òó–€XUœ¹B=YQòõ€%„!€Ü‰¼Ôêk°Äŧuá'ÎCöÕj©üXÏç)YC,4GD1˱K5|ÒQ¨´Gx­›b.·±Ì¶û7j₸{bn@èsÃ4'EDÖ.ÕÚoƒÿÖú÷"…àHnÄW,ǽêD‡5LË< LMœ÷$ cÔbi§ì…T-Ët¬@‘”_ÿ5²p_£û(kTXBѬ”¬‹$D Ô9WNÒàà5@’%wVu–m­ƒÇR™ÐeîDűÆR!È[F÷ã›Ü¿ÿ] üC¦øïˆ—ï!tç÷ìÿ³pX/)N½çíMhɳñÁ² ’h »%#­Ôrûåam¬€wy÷Wßyó=:ÝY[Eb½ ‘«WÀzÂ]g!ÎyëbXפõ5¿ªMH,Ël` <Ú @Âê¯?Ï—¥‰É :î¦Ã—‡Ãí~m\ªíÜHgîÜ»a&%ˆL„süƒ§Œ~^µT’ãa‹¶5¬ÔÎÛ¸?×À°¡4à´FÙ¬3‚ hk¸…@[ÄmÞmQ¨œŽ-S­—yˆ~ª|Û}…J×(‰[ çI…kó Ðd]„53V´_ÍìFè`÷·H0'N 𥢆|3¢ £¦‘"Çá< IDATIv=¢™§‚µp0íÊ L–*Ú¾,%O è;C‡,u¶Ô‡dÛmþºF$+*Ù: ×q÷ÁÁê„VÌGaÚÌ…Zÿäï¡Jå'’Ђé$4NM$r/T@Ê|è¬\óë‰:ÑÉȺ(/Í–ˆ¥B¬U8­‰©.ü .륃]Ï„|=×#H¸êY-Öœ"sEE¹;ì÷s­…ÉÐ wãØïvoŒHDR]]V«*¢qÖI5(Z ÉÔ¦õ4ƒ†ªÊu„ €VqÎvGiç‘jSÔ6¡åÕc.è"@$ˆ‚&­3ÑV ‚XkZë:àÏ+[DC8 –ûzîBÉÔD¡ ¹GCx;¨5Èþ²txá'ÄÃlØ ~¬s5k-ý¾Œe‰hȘJ̃¡UKRSÆ„„Ü͘ž”Ï>Ì© ™¡@n¯{à=›?B?ÚQÐl©7¶»èz‹ˆãçÖ €2*èhdÐg*N´.ðeµ¯TTJ¿µ®¢a|V€œ§}Y P±3kㇶË!œF 9¶`¤±#H4Ö6{Oµ–©{#:²!Z5:¶Ð ì«Çé™h4‚²4 Mçl°ÄÒäˆ&£#=´^¸ðǸ¬—ïûa;æGŽИ ¬Æ´®¤ùZõ9Ü–ùË'eý:Õ »×w»õxØf5é-ðGTƒŸF4°O©Z?´xðZAcE…­B(KÖ^õKçï=[¤;'ÞÐÐã¾@MUp`zV‡GƒƒÃµîu˜ZÆé8—ñˆ~Ô–k3Çya;ý°jk?,!$#£’¦ãä˜@â~Ž/«mËlÛžùÆŽ…h¢w|v°Î*KÆØ¶}/–Pý­Þ–§g!î–=Ê­YA»ÉåXp÷!6Õn?Š¥®SŸsBü—ß=z7"–È>Ä]w‘*–ФºÀonðú;2|¤¢Üeäa?—¹“މ:K"UÕ÷šûÇõ³'èÁë=æZ Ê‚:–dQ­µ‚ ¾(o‰„é*5þã~¦~B\ÖK‡ûÐ÷™§up)±!µJH6E³Ü8ÍŸÌ_Öi™˜„n|ÿÝßø5r—òÖÁŒ9¾yn#ªhQ[°3¢ª "¨g€RE‹5ù}5{UU¡Ã\j9VKA5”*áUu5ÒžÏÚ€XbU2eHˆñz§$>r2€o3WÁ€TS&c}Õ«e$‰MRq¾['r De)Ðài6½fžõÙ:ÐZ/zíWÿV£’ ¨ÁI%)!îeW H€§5hšžM–Ánpf9vC®Ï¦¾õn*]®KHºÔ´.¼´üàïÓC7\Ö•ÁDB‘èÀXäÁXgðÕŠF`¶Gî p0U*‹òñ€ë÷õÙ´¿þ;›÷vø =¶_þºÜíqœŒ&KïÅÝçyú-–jì§6úëï´ûr‘Zµò9|À,tD¸•m T»ªl÷>:NŸ˜æµ¤ ÊæŠíd9G?zÝó «ŒVÙ¸0OÀVš —=vÔª ±#Úwb–9á°-G×\‰äCϨ³UÙÖõL Y#Þv,Ði\ߥ þ8õráÞ›»å*¹!‘Â4`’à¹T´ @%L¸£_3{F+8Á7£Ûx. AhT ¤¬TÐ΋jbHçõÁ³´2 ЪH‡g5 R *&’˜PW‡ûÚ`•Vç_(ëÚ"˜ ‰Ùt8ˆÁNh†$Ò)žûr¤µh€D\€sTûÉÖá?kÒ»ÒÚÆX,1Œëa·A7Åç¥\Û¤uÎôª嫪»"ØÑš<ùÔd†r/4…ÜÓÚ»,ðG#U `gy)‡»‰©¿x³.¼´<÷`1ÑÖeú&$R×Åñµèû|Z%WƒQª5„ª%éøÄË݇¹?P™]6°j*·2Q‚îaþ«p÷¤h‚ïP?2ÕR•Åhr-Ð"jQ¹(ƒ±È¶×Äp§ÙéM™ÌsœÆ»ûô㬡@¹gTÙ‡©«Ãî]ôÌ7O¦ÏÄe¢nJ@ÜVsú€zšà¤r°Ž(MÙÉ­Ê<£÷ü‹÷ãɇֈ+©!(;ÎÓ4DââÁºðø¬— ²}‡„¸§­«y©P ï2Ù‰Íw‡é«YKQû¼{û½¡^»’c<ß[OÔ"0Ð xè”ˬ…jÓª·„Šäl¦n¿,h*ËTU±žPHHE…Ìhˆ%å.—ZðàyZkHu Dnð.cËìƒ{oÐ;`Çs}w®Zˆõ„ ) nàƒbcûÿÙ{ŸK²,Ïï[Ù÷ßS2÷Ž^3ð@n)òUБLƒ2‘`*k¥„Ñ¢´«^ÎRóh#z§þf@=ËZæ,†É´¨è&} ’z`áÈ âÑ÷ŽÜèóUùh-®yd¶4šŠbª*#»ßwñxáîï§Û;vÎ÷|¾ßÀí©hdy2Fu±¬³¨Ž­ÒÚL'^sꀊÈH¨™Ì›ežZÕG–ª()ò!3²ÔFÕ"À9ç:0F Š£ºÒ?Ê¥^OÓó)k(§\ÊÍïþÍrÖYÿq½Þ"´VW½¾l[„¤ª ‡.—Úe±"ß[ À£¤;A³aÀiJ•¨3” {ÚéçÞ]¿ÿæ_ü$­ÿÝR÷¡ËU¦Ôe»zŠÛ)¿¸±G}º±ÊÂèÁm½hÍY‰ ëŒO-DÔ£õeŒ#]²:·Ó|{ÆÚ2çU©'$¬„ Kñ¾7®žr¹Ö*ë¨;ùº9Ü‘¤Ežô *óiã¬Z Cé2âÉa0â‹c#¼«@{ ßës)& hè F€8ÝX8w°Îz# ¬·K‘–6¥¢ECˆ …†n€Êò¢´]¹á*]>zz8¨n\«-û¹Zï[¼ ±m Š!¡fÔâ+%hÍ ¡e:-×ó„¹ÌPÙ9òµ¹ìi€×F´â¼æØFm»XÖ›¾ë¨Îlß÷— ˆéÙ‚PcÀüšjÍlËÆïKNª³3U@b4`óãRͫ޼iê9H’îjumÆ^CuÒBÕ¬:Hÿ²¿ETŒd®bQkÄK-À€0“;”:Å•Àaì­Ô Ò×ÔW¨Óáb@EÉÓ|3æªršQuN<<ë-Ñk†;€Ÿ»€ÆV¡CC… Vx•9´UÜlµwƒ]>åíÑ*\nÊdÝ(^a]€ÉNæüÓt•ý²¿¼1šs¶åX®ÿ…׌ý+dx:ØãÑ•m~†yBH®b]ôu12ƒ) n¡P0ß<à H=PÀ"_>±Žóizú÷G›3–íÜîÏñò$Ðë+tÚ*Èq4Ãëbù¤á¨ÈíܱÂNe¾=ìÂÏ>›Oúîeïï¦ô…òmA{“× Ösë¬7Ò¹ÀzËÔj уD°H$ CT;äå³,IN€ébË^6{±îÈ RE¸¡¡ñB!¨ù¨TT]«Ç|rU –vPn’¬-W‡òÍÃÔ£ŠÄÖ ¼)7T¡ÎȽÑ.ˆ˜Z–s ‘U \JmáÎaë«=”tŽ`È¥öµ`Buò50b›i2–2#«+€pÐP½@¯P²!!0?d >L3±ñ,Â1”uŽ„jr9ˆ¾–"cH °^3Y rˆWÀZ,Ëô»xŸœuÖè€Rñºƒõ7ÈX« T'€pa%öJ-à3$_a–ÀÁ⌠c‚&ã.¼üëµÝ÷À»Ÿât4&¯-%ŸxñÙ¼.CÍ(œ„5åòSì>²ý`]Ä‹?ŲK[dz}8 LóŸýdèG<ýЮ>ògÿtè™ë5œhUp:°rþ…bÈmÐO0ÀVú Ã5*¦Fö ZÁtlÀUÙJÄæX—)bk´ËVy9êH<•]Žó_\‘(² ù¶`az"ì¬<ÿâ|útÖé\`½]Jq@0øl VjŽ˜""(ÒP¹Ì&eThñ÷‡1¶~Õ#êN¼€î¡Fà,pˆÂÌ:¨N¬ðµH’ÚÐÐ,Ÿ¦›yòæ²* rqëlóT¤I¨4šC[nWÛ1$JE XÆdd"cêS|Ô÷ h6(²VCudCBpVS«m<ˆê‘† ‹æ›¬kµ‘¼¢qI B ‘W¥Ø~t¨D²ñN[½šäüÊeËöÖÓbò5'Òµ¡®cˆY-‚`ÍËi.%£¢¿­³!Zg…èÕÆ½Ç5H{ÏW‡²NóíPÊÌŠrneõõjó]á«,Iì€6Ö—€;Ù>f•ÔÑ Ôâ÷fÅ}.¨b‚0ˆ§›<=c…Žó…YÕôù'ãZœ°çGg‰+=ÀVørc!zðÔ Ù34ùÉm…@°H¿¢,Š¡¤Óâ§É@ï`‰¾CªœoJ)Òhàl?r´B*&d)uô ±°`Eé`{ðB¶ïq·Ì7 0$€Šà„:[0Fi|ÑÔÑ#>Ž7óÏ»I‚õ@€Ÿ¦Ôzæ+]Ž$$âëKÊ9ë¦sõv‰5oM—…L°ÀbCÚTQ’V׺€±‡C U±‹E3CBóm|ÑÌ U#[Š®›²Rò¶x'_§›/Ê\2°…ç’Ñ¥¬Œ¶Í'¶¥?mõTQN_©´Æ|K§dÏÔ§ûÆ@2uüÒHX£Æ³JB"ró×G–‹§Î\Ž`Ûbc Á o­8ª›¥¾U™)1ngq)ó6s¤m}»êh®/¾öo©-iI¯s¬Cc[¸Ö!RóË,”ùÏnÒeÏ Ž—##b`)Hûäu‰’‡G‡a_æÛ˜×‚S#Dð<4<ëëÑûÊþF«}zX¼MtmûqV¹}2h²šAXq|fU¸;ÚÝb!ƒ¿÷Á°e÷þlRw0Û_ùrchtxæR„w?HwÂi6/Ùºq°ï'Í·3ûh—°“ðüSކɨ£åáþCi`~~¤8\Eôƒ??Rô½hW†áN6\åø§ Ù PÛüÓK5ÔKÒ–l ÒÂëÈ*°ÞXñý2îÆÿ+PU±Ê$|ÿ`/g¬Åúþk{5ÏúFé¯ûœõ7Õ\V­m‹h!µ=¼.dÏ@{D^îYV ;ÄзGªIBð‡™™¡…=˜K²f¬KKôÕS—Ts;$m6Ø/CÍSêÿ·V`€¨´"{Û1îSìS»õ¼Êºd$j ðÀ/ LA¬CÛ:L  ÑP &aÛ†# X ¼*v& ‘h­ ãÃ&cõö³ F¤Y°öˆ,l0F ½í32 Y;0 1s)yÖt3IRUÜGtJ1!Ä´˜âÐãå÷zwgõ»—õ«d·yþÙ4ð AÖ%übÎ'5xJbb¢P{ôÄI®…+½눢T¡—(ÿêš[?X¾(4Œ{_—aÏ%«‡G (ÛGPɬ¡[„ q»¤.ÎSÁJuÇ~.ËÀÏ>`Y*ë×vÂôÃ~øúú7(’ù-ÔWŸIüÖžÌsõv‰j 6â1X©$ÚQ€ `mÜ´¬™]ºa›…u”g†¦xAÔ‚š„y[µ«w%µÎ¿œ¤yš§ù´q­(ØC§'©Î P@K-|Sp9ӰܳåÆ}Úª«}zÀq9W²#6¦·[ &È@oŽöŠaP•Bi?Ø@Y[¼š—_ܧ¶vŽU­Si=L_é·CBd(Å¡J½Ý€ Ñ0BP1 j‘D d’\|mÃDB§¯âþýÍ·Ót{œ^Ì󋟤®ßeÜ¿¯ ƒˆèÈSJ0\Îóí¤Uói:ƒàÏúÝéµïªÊ8XªŠ„A\™W {‚BG¯°UŽ2­sêŸj¹–†GKBô «ðuÑNɤy9ýÁËÑ}O/À»›;S+¹§­š‹"Á.YÍY3ƒ¤Ÿ]³‹þx¾ßû‹7 –‚ÔÂé!‚¬2ן¨d;\¬²Ê|'^ ¸pÇù‹2<Ž2!À£ Øâ+îµ¹»\Â"tH„?LHA¤KåîËð˜^a¢c‰•¾ÝB-_Ïa« Z)ðÃ~øÃ~x®±þõÛ~Ï#·KmIÚ[Œ£(Uhm[{™€ª«Ûú:ªŠ!q×6À=2ŠIjT!UJËÎ $¨ny„T3Tg6zEÑ›VW-£š{ÆG¿WÜ'=ìîåSFs> *„Ú3•I±Ýº×lX[êb!å•. º.@nÄöס Y¥zšËJëv‹ («oÄù­N@#Û¥ƒ­ª{ ¹·-É$˜Ký9XZèE‚Q´ÈÃå0>9ŒTN§åø…æÛÊì̈FDÄiˆýûãÈîìá8ëw¤?zð`}5‹¬phA"ˆ-öh]2"íH)íÇ„Œj°Á¬KC[v,GÛž‰¶¿Â6g„9Rß+WÑö\ܳh²åSLר±t4Ž"¡¹<fE¨°@5\0í1 L{¤È$@+”©;é%ó¬å§YZY2⃧jž 2•U¹Å½·` à“°ÊãFÿ½Jb.B ¸ÁöŒô*½$$½¤!2vžœÓr¾Ùúj©ú[Õ¹ƒõ–©˜O›·ª9bT!ÄÈùEa°YyŒ‡øh/ˆ*²AºjRÍ„µ¬˜\ Á¢¼½àUói–&òšÐØîàÆµb©›íýM»Ä‡GÒEBEì©:k1ˆ­Ž˜(_aÄ4Û"+Ø j=§¡CA;ÓmS<´~»‡aǸo'冀ȤUí÷6÷ЮGrмÑçÛ 1äÚѽM(ÎíÙˆqÐvØÕæÕb©•ãíÍÓ÷žãÕ8/ãR4ýâçÇë ÆÇ‡¡â¾êáUD:ã4œ†yËí$‰YgýÖÕ€vª°€\•U)€’:@€:Ù~pÈ‚9` &åŠ$¹²Åƒ_ìöz®e`ŸŸ_'È™È*~D-`.%î£W©“†~ð:›Ôêö«‘RÿÔל=Š¢Ï?5Ø|šã ?ÉH§ ðé©Òp+¨íÊЗya…ªÆó,&‚¡`1z‡r£;@Rz¯÷UyÑÖ«²0x]*(E —z‡½\Â]"L `/¬ðUÖóLrÿÛ¡×SÂß^¥u.°Þ.åu>ðJ`ãUÆ„Â@­ J ¦0.uBý¸GqE‹Ü:FDëEU(d„1×`TÛ9^ÌšÊË¥y•¥ÌÚÂvË“‘~ê*öÜ3í“ßËvD$;–U±cÚÁP½ `×ÈéœU"é€m–ü,4jÃFU%Ú<”‚“j3“ ¤Z Øm–G‹€äPmÏσÓ,PÊÔP`\3裬-…ÚH°º…„5³Åð€ÛÏ6@—»¬*bÐÂqÉÈUùäÇåxxLÕacå¡ÿ`ºy–O~ý³ëòbÂÇ'cÜ#ÖBEŒ²œó~œo¯ËšÊrü¿‘Î:ëµ^»¯üoî¶M:Fâ¢ùÇi(ÙÚ1d7àå„D…¿øÌ}ŒŠáöˆv ˆ ¯‚XNmÎÈ!0¯JXo†ŽXŽVUiU(ÄZ,ºFöѺä]#Èçàq $õBžuZ3ÖÉHÅv(xÉéNyr)kÁ"‘÷v)ç‚÷ÿûø€bÏ í·Eëˆ6sÔÂ@ Xå Å=í*â$tBå¼”íÔñ¬o¬¾ZQýV‡­çëí’V©rP.¤THØ M5 ˆJ¥62'aÐ]a vĽE¦R$ˆ˜›½€A AŽ`K.Pd˜óêmp˜²¶™ClIeXßè>ǮǖDÍt‘Ùöûb[ƆŠ>R)*-7§9jA BjÕÍækþô 0ôÚ‰µ= BGUÅ]Ô}«„A\€•ðRiÐ=Q….a‚±¢u¹Ô°Á¶1ëÆ,õÈ$xd*r×`̉TE^3"X„,!¹€˺¤Õæ—ªA|„‘Ocɪ:~qdo'v€¡KSÍ€.QÀ£ Œ©`R>»²Îúíéµ+ø—4,xUlá脚)aãÈ‹v0 Nj¹F‚uƒ‡këö3 ÙVz)CG' ô=¹ÐO³]ö¾,Vá+Ú!Èü²·U~Zl ¨Ì]aö´_Š*ÙË€ÖÁÊm?z­Fg±Gƒ¿üÌn—¬'É¢ß.8¤•z)&0È"ý*O¾JŸ_O³¾;ƒNÂÕàš­BÖõ^e’¯Å€¹%Jô#:øí#´ïµ. ÚP†=<ž ¬³ÞHçëíRYs~‰ô(CDB ÊÒˆ*與ÉÒ 1Bã¶»æÎ&€R3;´iœƒÂ¢ ɽ*Uh-³²$Ò¤L¦\sƒâ´ê ÀrzÓ|ý~Àžé¢¼Q¸¦= ¢zTzÛ‰Q¡6ª 1°°“*#{éH& -‘·eé;( xÒÂÔ¼@`ä-»Ñ"!¹hä. B¢\ñ"/¨PõÒzZÍ>_·1kÙ¨ñ 8{M^0„Bä¢ ÎÀ"Y‡¼*†~¾|ú˜RË&ââÅ0ì‡Ã÷Æé¶Ü|ñÓO_Þ0ÄÃxûADËkFd_i|è9ÝL¹¨¬ùÍ»†gõ†zí»j¬×»„ Ä ZöìÌ`À Ðq°/>A™íþÐŽöŒ¢5ßÕÕ’-GÆä’q@¯|;ÛӃՄέûÑÖ‚íÝùt´_ü¥X ú8@.™ [Hh=Â:dÄ´ñø©íßÇ:Ùþ€Ûɹû µ -D `)¶@ A¢±ÚO8Z¥:YÀ¼jècVÉ R¢Å/û[ŒDáCþ´ >õE%(2µÇÝW¡¢ä*¬`Äÿ½ IDAT0µ^—ØD™+›/z½Ìˆ˜¢/ë’K!Á´S Q^xÁ‡ñRå½þøù4Íåx=-{CŒ—CŒ[W‘¨!³T–r¼ùŒå\fõ›ÓW³[æ ªZã›-ù4ÀƒÜïÍ‹]À+,®ÙP|ÿTø® í É—göÞU¶1=ÊŽhZ¾ƒ­TéGs÷hŽÇ½=yߟü¡Â'8}j¡x^‹d!E ? ·“«Xåe90ó*eØä<&À™m8x¥ÕEº6Â×õ¥"¤=f`ˆÉqLdÙ‰¾g q:–´Â[^a .˜b)A¢"Osy¾ô=ìÑÁƒl- ²}ïQÚÒYgýJ ¬·N¹”ù¥Rb¹+q3{ hèÍ…qšçªQjì(l®Km](kùzÚÔO’A!s›"7þÀšŠ|cŠüZ &²ß0†÷² ¢Û@ *Z:;Jˆ³Ê@6ࡵ˜›ViÕB\©Šˆ7mèÉû‡ÄC(‚ºîÁÖ¥kƒQ/má»(/…(w‡«hûJ Ô ÉP*y­FRj{ˆ ‰j„w˜‡ÔZn¬Ru†6U4K`ÆÌÚMcxªÝ‘>.˜ˆÄ ÄGcÿd9Ö¬2…Á½Å¥1¿Â‚J]0í(¡cYçúóÐð¬ß”^w°ì¡w!qOIV‰= À±Îžú÷~¬›?EÆñòhþÇÿÙ?M.a€=ùËu:-ØÓÆC~QÒ>âb€;¥Ç\R~ö/ÒžN¡~Ñn~ ÐÞý‘'+G O-OØ‹ëŒ@ëõ·÷§[÷~.Szò#_e˜mù//öDËʺäÏ®õ‚Óªqh}8ê¹ÒJ—†žÞV™Ë1öLA~SrÕ8—ѪÐb括#Ö%’¹* ]Œ—´qÀz­é¨‰ÄíÒö ­?|-¯ã¿þô_7ÃÐë~-wão~gÏä¹ÀzëTNs‰Ãøx,¹(€(¨Š] †bìƒMÏ‘„ù‹yùsܸ¹€ È­Ü DÛ¾za²`Yhé1äWBÊ›: "{DûØ2±±EQ‰DðØ%ÕF„o†Óm-¼ÙWãED•¤1Š­ËhÜ;é4l].‹ò‚®q U ÍfÖRz2ªÌ †àm±]¨¢()/œºeˆ#˜Y©šyŸ¶nbÅ¡Ëã“Ãôùõtš?»~6 1Æá»Wã Z=v,,cÀШ‡ãókå¼cxÖoBÿ/ÖƒçyÕØÑ![áȺ#¬Ê1¡÷ÑÖìXø:›’íÞÔà&«È©ÂïÄŽ~‘Œ½¿¸¶Nè˜~ÿÇ¥—òå'ÖÅ|aÀ$Ã1ïÇtyð¥·þ#¿ýÄ^N膼L,NBOûâè㘞|„ý`Ãà>Š/Jt‡Éžò¾Ø‹c¾¹Öm!€¾§Uz‘î‘£éU¶üÜXQÊfÜÄJ¶Ê [Û6¢\°@Q,ôEåìœà„…È»„Kx1zÿµy°ÎEÕoJ¿›gò\`½u*§eÂgÃãž»Øþ¬YQÖ"‚APÏø´%’•i™ÇîíÐÒÀ 6;‘dÉ‘S§ÓÌ`”+( |m!ólu^§â¼¡ƒqÏ–9;S`¬7<4»AeÅ„FLE"!îXî hhrö)‰¡¡ ¿Ùc«±€­ÎÁèÉöo²J^Ð*LGi•厼v P€j§Vi±M-â~›H*D¢ˆ‘UêÒCsP‰×Ì #UÍ‚‰(u*'ÓúÙЀC,šY)µ#wøô¿}:œžÎ¿>=þ”óq9Mã{vûTna!S©yäÓ¸Ê:M7¿Æ.çYgýõä`µ-B{Ôb•ö0ù² /GƒP²eG-í$#¡ÇÓø¡çRSºÁ.F ôy½A'´T«›g|Öõ{ß–±Æ‹ƒîCÄ Ð 2¤qNT®1‰RË)cË%d©Æ5¿yU|ã7EìÒæXBËlüôÆS!-_™ ]dåqU°­R#"ˆFÕÂÖÇjzË@Ü"q¶þWت¥¾6nÙÅ^|Ã-&Üo¬¬R_‡»B¼‡Ð6 ±Cܽ6ÿ!²}]2ÂËÖd°²:9 ‚L€T‘‚Qc^=Á²–¡…ÌPPûö¬Æ{j‡xAAý>ò{OŸÊ—<Í/rö @Ü'¬ðµ— ƒñ°À…rή¬³þôšƒ…l×œŠ¾.±9¢òd՜Ŗ93'šÃ,Ð;£[2ôÞ¶FÏ7é*; eäÌ4%ÅÞ»h^³–,à=¬ûȻѺÑuTW"%I‹ªn îÊÃ%ÒãQÍÖk/Åâö¸Hú–þ:ŒvÏg/³YÄ>Ú~qÊQB SÆC¬3NÅ×¢|$”èZxyÕP豉À²Š'ÙžY,3ÑòÓ“ÞQ@¢vùcÕOR<0í¾?àóóßãY¿Zçë-Õô|JCÏÀ¢×S¶˜WK¤ôx9Ï·Çyš§>ößé,ká#¶“в ™Le•U@pAdâ“Ö‰Á¾ä‘†F¨Ú’sÞDâ>ÆÆ%d¨”š‘ ’ªmWÑ2˜P Bw[„Í«^X#‚ ¨}GUµ1¸ýÞíÖÑ~H¥!·¾jc Aí K—vàýëAIiÈ1¥ŠíYª@-bÄ:¶Á°”ICõØYãà·>ƒ«š(•’×È’æúYâ€PàJpÔÔØZØ©ÌÃûªýôß|²¼-ÒâV±PÝF|àŽ- -&çâÁYO¢q€ kœwq@•Õ˜%B¥f"9 ±… ² ,ÄÈ"^E˜BFMØÞGñUñÑ?øhºËiþìx]æ‰xxòaìYªr%ˆ¢‘…é&Î!eV”³1ë¬_G_å`á!‹p;KÖ™kI5z…!y…—!X-ž¥ rH «XP)2È[}FYÙ^³ÕÅ»Þø]¿<Ÿú:Øï=íLå]ïëd0®åš,Àå6òíÏ i.Ëð³Ÿx{%Àç„ÐvƒçŸÛí§ó|äù耋âëÑVf´ª±Gÿ~^>Ã󣀡‹¨ÛeÚ¶‡tŽbŠ®bŒÜctÀ˜¼l/•c’“ÅÑÑ›ä]´Tí¯wнÝ/éYß ³ß^ͧì y«r û!u™´z~±,³aG^`KÔNÄ^ÔZr³:ô£@“2ƒY]Õ7õ`ÅØ;ð@Š‚ØAÖÉkAˆXÛ–Ÿ£Z à•BaÃ@WúJ+R‰KQË–cø0ìàC' ÛàƒßŠ·í뀃’Úu<ÔŽ-Â" Ø5Ïûöñ ÑáIx Cô<ì?: <†AȨ 55¤TÊ:I³¯eVË5tT”0(»jëWq¸ûË÷‡aÌ«ôRÓí ÕÉ@0"€6ðC?°#»¤¯)hö¬o®^{°¶?Š­Þ‚ZähÚ¢ Z˜B-z(ÛzD™Ì” F¡ÑG¥¡ «*Ë‚*Lä u£wWÆ6F÷¬„÷ˆû–ŪP>3‰ûÞºèÓÑV!xê¿‹>ïýÀKQ)V+Òí§öoŸáù'¸ýÄÿüOl9"LÃPRŸ¬3„Á\"}ï©]}lï~„LJ´4DâÉÁöÞ‹ÃUŸ.c?P.T2¨ §Å6Z3 Éž åô½§Y“  ×ÉÜÍ ´{pg_ëëyÖ7FçÖÛ«ù”3¦Ÿt'©Xå57¶Âp9®Çç×å”úo?ùø?ŠdK›QE ŸÆF(¨ŽÀ!Fœ$8+¹‚b7x-‰Ã¼êK–b|#L@â:ÃâvŠL‹F@ R‘ZŒ+Ô-’ +² !"TÄÖ²BзΣÕ*Ê@„¶ÙB~À@kS€êÐî[G—$0<`Ôm~(µëͧOT ¢€4ŵçÁˆ{ ’€>„¶5 *) #NާùzyŒßϱ~ÝœW%ôÙQð­§hI/ÀÊžúŽ1çiþ⨗¹Sê#B3ÕS5#ŒÓû|š¥é&.e:³²Îzsi‚cÛ"ÄÉ]jé¥[H<à*ƃw4ȃ¬Ìó4³L|ݤé'órp5ŸÄ'=Ç ðµX¹ÎëÕ¿û¡±ä:ðÔ󂿘–¢hà%- Ÿ”.#Pò Yåü|Þ;øzȧðÏfüÁ ßÍe¦à댓f³/þu¿¤g}3t.°Þ^-Ë –›´O‡ñJ*Ø–êJ[uA7 ãÓã2ÅÕ¯¯?.û§‡U{´±Wã§oÝv’ÕÌnL}Ö:e n‡ÝmpP´Û~¥DL@¬TŒ$HV & ³ˆÉÍÁJŒ8 L¸/¥2nD¬°ù¢¸ÅœIµl¾õÐf…›K× ´Z|£ªR*mEñáÿÙ5»ý!¬õ®Z WQî l›K"ªà(µðu-U½e®)*Ž-‚ •-‘šdY•BʘÍâôâˆUsI‡w‘ö¶å…d[OÎ’î·{Ò°£ñés×ÃñóáxüùñÙõ0^ßû.öÆàuA7€y¨ƒv‹|šcíϳ³~¥þç‡Vloé@½¾ÞÎp^QdXHíöS\~Ä‹‰xjõÚÃvw 8âQl-jëb^•º&V ¬3öøï‘NG°z¬GcÄóO-°¬J•v:‚3Ö#0#Àæ#¾÷¡õ?öÏŸÙ÷>À¿úǬ Ý•ÍG”9Eáî:):SÁôS2åe*Q˰2Ÿ`Ïÿ",FŒ¦§çŸ}Â/~‚ÃÇLOóÝÄe² xG¸”/b%J±}Ó‚páæ:CLáþÉ܆š°þœ/öû£Kxþ n\ŽÀ×ÃÁ:ë§óˆð­×)·åjUoí«ôE%FŒG„DY^5g°ï#vн1µÎ Ñ2"Õ# R\Píóžo6%djmu``È ð@l¤ƒÌp@h]0Zþ´fVG`[——͹N¨z(hH2d‹ÄAàh¡ÝªbÑPúÃpÀv«e»¦@0ðaލxÙía«G j‡¯N *ÈZÀhˆ Æ¶Š•JÍb C”BõéÅÍt›UÅšPá«¶é^UceÅû(ï)/#WW}L)æ¹Ì·s¾ÍŒÉ‚Y×#€€L2vãÐddÿxƒõ·[ ¿ *ÿJ!ˆ²ªm‡øÅáÑ«cG¯ka(vA¿^3àðüÅ”_\‘Lýè^fuÄZæ0z7ú‹c*S¾}–ÿÍŸÌÿÇ!ô^ŽXá+ØÑOŸ¡FøÏŽÈ‹?Š(žŸ_ã‹?ñùÇh4¾—7ù4Åë¹D™œ?ÂpH1º„žÞ3]¾?K¨òÓ’¯?õ/ž¥vŠø2CK@¬$ň´÷z]ÉûÞcÂžÚ ‹ÒþCþàc\~à§e¨Å׌ùˆåYþ—ÿØÿ÷ÿaôî)ÔKùë|AÏúæèÜÁzÛuýù³¸gz98¯§g×åtÿáÿ¤Ý‚{6VB;°"ˆÝ ‰è­¸wqÜÓR@IbHRޝ™XopßÄöûd!¥™9HCpÔBÆvH"KݸV uÙ¦“Z·üœÍÑ´YzØd©B ‡-2ÍÈ×T3ðn­/äªìTe cëYhn*~éÙÚVÌ¿FÝ ;É"\ °+º£Yˆ¾ •EÛÞ%§,W Ý °ä•P¡T–Yyôwsâå² 0u½ª£¢t3CÚ>üاþáÇóíôìÚ×Sb´ª¡¤ý0Ÿf2©`ÜA÷"q|þYßõožyÖßAýQÅ?ù +½Þ"|ý^©Uä%A…ä÷ÍS•ÄéÆ."B²Ã§¬`É_º‰è*¬Â¯Æ"h¸: <ÿ û1u½ ‰>OóP‹§Á. §‚Pl% 0ÑjÌ·Çä VAרGK#|Nû§Å*f-C™ÛٚǧV'Ä„SŠ]ò# ÿ €ÉLl¨†ˆ_\[VyAØ!% ¯HÁ=Fª %/”ÙÞýÈ]¸4[0h±[HGhO~”"pú5â.Îú;«ßûþÑÿ2ÿŸ/¬åôèÛeÿcµþ¿ýóßÕ;ëK•UXëÅhøwªßªáÛ Ðîë/Ëÿë¡OË\ʺþeýíð_½«¿®@­5w!UÔðNЫÜ«XíPQùŽôËj¸` Æn¾=…wvª™ßæúKñÔoCëú¿W}ÿøñ9òÑðÎv@øv@`üŽ †kT@°âu‡ ~«ÖZ_U¢Ò:ýâ}]¯ ß®x'¯^ ¯ª}þËðmÂî•ØÅ;U{h8…Š;§¦6;|ÅðŽøX«¾õw!쀻€ªP_ ¯`d­¡¾RÛ&¼øw¨õê+ ¯*¾€*°«` u ±þu%^…‚^i÷ñª’]ý«ømû÷¯¾…_B¯jXÿ²~k]ƒŠþJÝúÕõ/¿µþÕ)ýg‚ÕW/ë/ÿo jx碆»ðη°«DWQù…ðèñ£îï øwµ¾ú÷Óí4¦8à?‡1Ø; ¯j}§»³‹8ü½ïUõUWë¯x½Îú;«_ÕÔWªõ[@}U€Zñ„ïÔ”P¿S-gØ}ÇüG¶«þªî^UYvõ…×®þRõâÝÝÿÃÞûüH–e÷}ß*Þ¨þžæËѽt¤üž™%eX]BGsF˜,̪†lxÚ€µ¦vZІ7\^y¤5óg;i!Áã…& JÕÆè+«W‡yNÁë'šàÀ¼šæúûå蓹v´“­ßY­Ê¡þÓ4öpù‹b/P•¼~2}2û ®ÒQ?<²RO/_Üý wøf³Ù_ì_~»¿Øÿä?¬?õ€ýѧÙçÿô9ïâ1€ËGß»~TÓXFdÀ$¡ù±ªK@žG†ïn¨äñÉX$€L«"¡u§ˆ3‘å¼cLÃÐÅæúñ]ÂÚø©u¹VQN„ü2P.y€…/šÀ,ì¡yÉá•^tªÔ‚ç(+0¨ýnr «Ë``½6fY‹^ ËuáexíBso‰Š@mäuoʉ€ê0ÂÈÚúXm8²ðQ‹èGž-ª±F ŸCUp•k€s!B‹3¬‚€%L"rce©ÀK™÷ãaÜFùO5Cß’ÑjÈvØ×qokâ°ƒ”õ¼æ™63ccë¾^ù€HtÒÆŽë;y›_µáÍô·þÞðµ_Ãð¦1P:E Ð£;M›_C—‡Ú¿e÷þ;t[gvoË~[;YŒp §[œœc"ÌY[jˆÖÞR„z>fœÁ©$Õôõ·qºÕ¼Ëe§(¦‚¾O÷Þ̪n6yoô™t3"ü|hº¼ø ØýxM+€ªŒsÙ¾¶ÁU)%ïvï±ÇæµálsVræó„ÀH j º•.¡ÏšÊœ0)Æáõ­!Ï…!Éó2)ãOû£í×ÔO|hœLrÐR¯dc‚Wt5T^¡sã¬WQ(mnѲŸ{ Ðk™€‚ŒqI!$’3X 8šñ¼$0 ŽD vL‰1C†¸Ì]X¯ÿÀ´ ÀöòÂÐE Q(Ñb©mÈJóxaAz  ¦.åcè'ì=§¤%mz4ôk¥È6(ˆ±$.à[:Ôfž&Ea:{};œDë6»ó‡ûi_|Üœ¾Ib‡R ÐçRÚâýöuìžDÓtñgñÜ»Ñç]/9Xíc‰½ l¸^mAEmæNÉ:´%’ ¨Vöɰ©.’•J!Ö`æ¨ÓÎÎÞG¦ÚüÔCµÁjG8«ÓÖ.ÞC—jÛ‡]@¬—èã=;¦0Ô•RÙgíÓÉ[•o©ìT„n‹q5Žéía}V]Öãûÿ8*¡ì䬂:ìÙ'hÀ¼Ç½·k MUv U‡ÝÛTn1p4íëz°RZæ`FI]¬¡Øƒ³z%VÐæ’#éHUd¢Õ ‹Ãèx¿ÆÁdõéžžë0àæ#Í>ƒn ¬Ï..vFö§C:îé+•rØÛÌȸýÊÙt˜Æ÷§ÝwîwÛÍi±¹¶‹ã:†, 9r(>Zè vÍÓ°ÙlÆRÙþâ#†T *³úõOô÷pÇ(0ðÆ€Á( ‘Õ« ÔÆ@oË}ºÎl–ƒ¨@L"ËŸ•ºlA’*Z T€- RT´þ–0K ¥DfÀ©ãÒá‚ØzcЬ뚕„«B­7Á¡Ð¼Y Q(\=€<‹ÅNPEg˜+t`gù 832©j°2IùiÙlNùe@Ãx€u¡’Un `CØ3$­»töÕ»Ëݸß+¿w: ÃIÏÐKBˆÂÄ@q{öfΉÁ¦’o² oô)ñz°UWŸÊ%„Sɱ4ƒÛI€!Âh]„²‰EJ.ÌÓ>%Æ<îQdÌ“½¶ÁÉ‹[\¾ƒÃˆþïÚú~¾øNºøo2ÀtfA8L·"ÊdÎÓé[õÉC ²/¿ žþ¦ñ>€ak·±¸A(ܾ Ð37éî}|ü‘ùù{éÞ›è]¼gEi.ãÇ™>Ù×ÝÂ8žÿÖ \&ä2’¬RŠ=Œy”Ãâ`R¾ØkjMsÚ‰ðÕ-@L;²& Ûý6Ãf¨S¶ËÊS¿öçü Þèó ›áçIuÎå2/˜Z'¦-Á1õë~è7ƒÊ´,yj•\bרT MJ±K `gpmŽ7$ÉA^‰*¤Øñ§÷Á… Ñ @êØýÐQޤl¹–VXµ¡ƒ-9†í^R[~vÖëF6‚(Y -T­öÙ¶ö H¡ä@Ç¥¶s°.æ»æ5ÔÆ2è¨mX ÃR)¦®‘®(a ö¤·[¬–-]žÿè¶ÉÐÇtÀVÔ\å~n‹–¹õgIyÊS9 hD`•„ázºšX ˆ0¬Èç“GúþÁkÈX¥é0–¹)®7 bÑ!vÀóœB´ØßÌ oô'õ£ñ}@½Â-CvA®,UWuÔPਞá±â]ªnˆoÔhYµ€9§¾¯1ñøŒ¯mjˆ51æY`ge UeW}ŸÆ}}ú^ZoÁ-B¬OGÇ: O÷5Ä߬AS}:ÕGïWM¸÷ö8œaèk7X·‘,¦×·v2È,ݽ/—Ñj¿ÅjS?ÞcÚ!Ÿãü;u÷pð ˜÷õrÇ’ë<ÙÕ 8 ÀNb=Ýy$' IDAT€È\N¼˜p9Ö‹Â(v@œôyµÉǰy€ŽãaDþ ŽÃWî×0¨C½×#²ÞääÜè³é¦ƒõyÒÅåÅÅå‰a³Õ<Æs ¡Ñ§M‚|ýÁ»ß­ÕË;¿ýðíÿZ›õ)SÒ(ŅЦr„™`5ƱÛH§FP™…âzÙ°ûw”]oÀu«"0Ï2¶ôÀ„€ «^SÈrC =“¶d?³B&T`® ^ Øéù5kE¹¹¯\æÊÒ[[Öa††€ËîähÌ­Üj,/Ör¡Cl×'¨.‹Š¨¼öZ-¾®Ö3£Pˆ ÈÁ['mÉ–®ˆ+´ëåê;¯×à[«>W‡qÚ3 ¨µ „ÀìÅÅŒ;W<î‰È.aѵº¨@WÔŠÑ$gŒ)®ù6Þ~÷{ßɨÚ|%²K)¦|Ø D°xT‹qËÍ 7SÙßô±nôR߀e—ðzÍö:Ú‚³M±¹ÙîÞaì¡ Œ˜a±Ç½·õá;6Àöï`ó¦ÍÞÿ­ê´N(BGvć¿9lÿ®ÞE|ï7M×›êɯÚa‡Ëwe²iTËÂIÎÎíõ·ôõ3iB¿ýÍh<‡­**þUlþ8ÏAUpc«Œ¯ý*.ö“vˆ½=íÓ(¿i][î1¼e»wlA'€yVZGÜ{Kûm¶Vs¹œi}ÄiÂݳôñ¾ƒ®Ç½ûñª"˜…ÿó7M²5q!œÒÊÏøsÌ·~ã[?ÛÞè/ˆn ¬ÏŸÞÿÝ÷¤8(3”bæsvCäöÁÙ[ûýùþ0>üí÷¶›ñÍo¼‡(—®ÄصxWÈsäß'ô{g‚À´Ý(eÎu™àKÖò§oƒæ©b0$išÁNK+T!²À®Ú vI‚¡ÝÚi…*úÑôÅë2”f5üBO5‡¤…±Î†È×®.ªM¡Ô¾s´¦:Zsn Ì™}ɇNl9ƒ¼h–Å7ÖPÆRDŠP¹J³Æw†Y¶bnýEe†AM0Beó\áܼ¦6÷LNÆu”#„‘«¡Õm<žcxmó üêîb¿ßï´;ï‡8œ¼1ÄmñŒP2òqóÚý¡Œx‚É¡ é~L?öaàerN£3€ê¬ê„Љõj4WÅ©9êåhq¨‡bA<p5Ö.á*C£µðuƪbèŠÂ@ †¡:lÞUŸ†{¿Ú÷¿]?Þ›yFrTm½­÷ÎìÐRzvCzý~UµÐëy5WeÚUõ檡¢u¢Ìø¼ÖËwlÚWep/öôiÁøM" ‘uM{ÿ;•Ѻ¡–ѺŒ²ÓªÃŽÉÍ}_?c€:áPòaâTÁbŽªÉj•;Lµìàd3–pˆùglrøîßí oôD7ÖçRãTúE kJ±JP×Û ·ÓwóXö»ÇeóúÀÍye`¹®ŠóFÜ/|`êbŠ=u.@E Ü$ ýô©ðœ™Õe”ÁAÞ\ä#jBnÛ‹@›GP±£\t¯pc¨h1˜|I’‰]*/m¹Þ›YÛþ #qéc½D&20Ï%B¥Å«!PzÚÏáxÕ­ò¸·pT_‰ö¥M~À—°zú‡åèKwë_}cõäÃú0}éíI‡ôÚÝzËðoÎýÙÑê÷wõ™¯îx}59=©ëjúë«õWò'€V‡rxüOÃjðr‘|ªeöR\O¡¾(ÐÈ;ÇúýïY¿ÆGïúã!çÃ94ûÅÅ꨷}õ+gõ—ŽWpQŸiÕiœòÑ_Ûê—ÏìkÿeG«i_—«Wc~¼NøW—«Ë¢?tv(ô£“ ;âmú«ôOàVÝ0žâPüø—Ž//.‡¿ñŸÔÙVõÌe{éoü„»úß—ƒu£/Œ>ÅÁº)°>¯šç¢Yóíàþoí•.p5;ø?|qkÆ!~éîpœøJ(íŸìÊ3l6ÇüH„»ßq¾rä~…¦Ûµ ´.¬nwå“n§pçVüÅ}rø£Ûðg ÜŸ­ÂÈgÞ þ áUèºpËÖÇø…° sèwauÇÚüí–¿ÀÑè·ç‚{èVa†ÂÑ ¼Ð+ %­–î¬Bn¯‚W†•¼†Û«ùYÏnÍÏ®ü¶Í¿w7xõà/`wˆÛî¡»zæ·^@ðp;Ì®#t^x˜çŽa–óô ê…b€$Þéü¶¯€ ¤;¼‚ ðÛ½ÀqægŽò‰à…GRÏ$o%½(kBçè/4ûhë™—dü@—‡ýüƒi~6»æY³4#0ÜqáÀo­Üó3÷Þ†?ÖáÅ_Á‹£[Hxñáo¸Âey†€ä+ $ÉCG1ufnÿõ4WÈKú¥»vÇWXù ø‹™·‰[~|ü×Àg^æÃŸó3õFaôÖ „ÀðÂ-0¸30¸‡;ü£ ‚·‚ÿ%"`ˆÛ«•¯ÜZunÿ·V¿|*»Í•­ó¿y×GñîêÞÛõ_«ˆÕ­/0?_áôWËÿŽÃ£ï­ž?^¥{õÚ‹€à«_ºWéoÚ_»W¸râÕ`¥XàªKУ£buç–½¡WœŸøÉà«yÖ¿Ùýò=»ü.ž]ãª<Å‹bi˜ÿÏïiB(¬^Ìþ‡åò÷çãî¿ò_¥M­?<úÖyi¿ûpü?ÞçïÓ‹=Öiõ3žÉœ«Î^%"íU¬Ö›U<šŸ•£®“=Ãê…V/ª (²nåøøàs*¶Oó'ÜÏ7ÖÏ­>U`ÝŒ?Ç*eà T* šW¸9Æ ËÇÊÓ~¿;ßÚöî)Ž’®ZH ™0¡Ò)Š‘:ˆ¤uy¸{†§»Icö ‘QÉÛ¤¯Ê•HbÞ#n@0˜¼Fœ¶˜<"\ "Ax!ˆ e_Ôªe*·áEÆ‚Ó4 ¶<Á°+Ôŧuç|M[0‡šk* ¾œ0Šq™âz8‚ë”›…ø s´}L˜[¤6²ÐÆ‘À€2/,Óò| 1¨,pr-óA7Ì€ /DÂÿ{Õˆ€„H¶+h{†eV§< ¯mä#|/À¨¤}lÞµ¨ŸÛ^u³5GíJ:>Íù…5F:êtnã{õù¨"xM1Õ«1õ¬Šµ]ãC)Ž>²òÂ>|'K©êåvÀx9ѵ,°–bëk4õãïLÌ@P+i§¬GL곃Ө2%Å*Ù,ÎÊ¿·gPŒy¼ø6¿þ3|\ÞúÆ[?óÝèÏN·nÝúÿÅg?þ¦Àú|k÷äOÀ¹l¶gé9C&er‰íöÁ9*„wþÙ;úÆ7†“íéݡ̠‚à È-û/’ðXדćõƒÝ‡ûZ "H™H…˜€$¯ùc’LRÇâ•Å1J!j:Âc\MBÏÆ—j«LŒH ⊨"­-Ó!7¡FTºÉ3a‹çiµ„˜š¡jV ­j)mCRiURYL¾`† Ì*/Ó «ËÔÒ |{q´4\-×µ¬»gï³·z.C–=¬WPþ„Kc*S¿î¯k»ÜümpI@|‡“á a#ÂŽáM… $\µßºà9±šØqs2œíÎ߯£ÎïáÙ—ß²ué:G²¶šlûåMýÝ=±Êîÿ§gäþ"ëÚwer—0°HITQŠd”½XJðX[gL‚ˆçCbÅÕήöÀÞ"Q”ºÓ;v÷Wh1"Œ%˜y}–`Y#Ž ‹VöH§¨]K‘dWÅ$”Ñgp° 3eß¥î š0N}‡Ž‰Â¡”bà Ô 'ê̪)©Çë*ã,’šEYù¶ù„¿ƒɈ®ØšP¶°Üò4Š‘¸œlMëT/ Gü©æÝøÜÿâëÿÃctS`}´¿lÖCN©*OP©±P=X¾ñà­R°;øðwÎ7wKýÛ6wâªÑGE¼Fˆ)Ä,õëAŽí×}É“Êa$€¸8¯ÉFÀ‚ ºÔj”0TÉåbˆÈÖÁjáÓýRcèh.ë" U`+`êsJ9²ñÐ ª…)6¿¹‹ÖHë-9‡Hžà ) Að%EgñŒp2oѶ¬¾4à X\óZºSòå ”Äç«"g –& ½¸3à²#jb ÿTŽ;?–È ¾¼\û§{Um¿ò&¢ˆq+ÉdÀг?¢(:aäÞüÚ›:hÿt—÷ÚwûÍ逯¬wÄ€eWtÆý/¿5–õ7}¬-` våŠí¥T©DŽH:%*ÉKŽD×3ȺTÃÖ}wçÉ÷ãAÃ몙žJ¶î«Wt=>~Ï‚êÕ^£Î~}8ÝHH'÷ëúAjGs«¿óŽ¡Ô#³ñaí`GzÌe§Ëý0©”X”Nâ0Ö¹(BŒH`¥°ŽUEJ¯{;{»~|“ô|£Ï¤ÐèA¥Lù0î§Qµ­»A µ`: ëïníÆóÝ£÷Ë•@'¥Õ@„T(c'9œo6wc ±µuäÀB1¼JÊWÂ<–¹ UI0yQQ°$÷ +â9—3@P€½R´œÁ#a溭Ž\ … &* 2¨EÏ¡«"@WŤÑUpåV( 5·T=ki€µÝÒV…p5£$⺨r­>ƒTðò‚父iu[uŒá¼æ¹Åø°^©x.× ¶O=L-i@ËÒ©Zõ7Íe<|k‰ËÈT]p”\ "dÀ ÀÇ…wï»– ‹10¬‡·1¤\J3×§n°¥GÈ–kܬ7CÜýÏäiv£Ï¯¾ È¥€ìª@u•€â’£8ªg•ÆUgÔ2¡ŒuÞ¦ ÁK½º7ÐZoª2:2 BuR-SQKDC*ûZ>„y²òQõ ÞW ù(ZŸš±  ºÆ•À¬:ïÇÇï×9¨—;ÌE¸ÜÕY¬À¡v†.å¨<«žF5¨ö}E©%¦ÓmDˆõ¨–ç ”±æ=ŽÉN‰àsñˆªªsÉ¥”+D—q ¸<ÇwÿI~ôîÝõÉE}²¯óx3p¿ÑgÔMõÔ4Mïþ¯ïì¿·ßí>Ð<¶¸qÞ—y,‡=œ½…9žw÷ö›»wí Rb%‰Í"b™c§íWú³³77'g©‹ò A­b¾Är(:ä\&Íur l9²p)˜HpVa!9`‹ÿ‰˜[З@¶(EpÑ‘ëˆÆ¨šÁŒ¶‚ÓÈë…²ž—É £(ãJRÖ•ŠKÏQ®Šž£@zÕ‚@Õ‚ç(µð9Š‹Ö8òZî‡,§æ(³*2>€«ƒ T$”î¥mö§=@‡ -rq†U¸ÌQf‡q÷ô\‚|„£ºÁ¡yGB¥.JÍ×.±ÖÊb/žn¬Umû‹óƒÈ@øÀ iÊ%õ±?ÝÄøgýì»Ñç@ßnO¡kVuèúë2CN9L”`"&Ø,x6#.3:ØÉYJ[ÃPI‹Í”I@Æh!.aê J±"”Ñæ¹ÎmfZ¿©&f Ã×Îìì-DXÕžN8Œ6¡ gê¢&aš Ìeo†Mê7)Ò‚!D‹}[¶“˜^;ü³ÃMöœ˜÷˜‰Ë¢Ë=ï5B™©ª!ÑBL§§H`ODYÓIo³0•!Ôátƒ<’©ÅØßèF?]7Ï”/¬Î¿ÿ~ߟ±ÙlÁy¥:ìú¸ßøÆÛ»‹óòñøðwŽ‡Íæd³Ýl¨RÈVÀ–Cb¬è˜‹ð$mN6ãasñtWgYè‰ÚÁâ…E0A,ŒÃ²çB%­´JHˆ€,¤ì5ˆmÅ©‹¥%F+³#Ð bG8©RZg+"–¹´“œf`;çŠêó—‹è™LtÁ ¨r[¼íhà@€$¼t\…å§ðZPƒ×L×䆯’0 ’4¢‹U…eÎpÕ¢Ÿ²gTS¿î—I+dnÄ‚ŒœKÙÄZ|;+~ÝN ÓË!)ðÍ¿ývâþ½ówƧ‚ï7_ݨKæ9—¶·¨>Å"lŒ¥ßjÆëFßþ‹+ÔkjC¯SBªÒ1j‘1Öá„Ìc=dÓ”ç1ͥűk׬’9k‘ R&TM6³ÆÑ®Þ¯»AÞZÍ©ÎêÇ;‹c>`ÄaÔ4&–*%¢N樬½Ð½°Cq9¡gvbü€ÃÖãïî†>Ö4¤‹)Ùº¯Îmf•RÇzØ[)\RÛ‘ûøñ„G&ňxB|u‹£MþîwÒºgÅÓÓdW¨³â¹l.õfDx£Ï¦›달iº€€a½‰Ç¤‹q*{2ÅÈádKF=>ß}ï¼LÙOïmá¤j±q¤œ ™EHë8N¥5›R—”6:’®rÒõR‘¤±”,‚a3Ì£Â`a¬¤i³PˆXA„š#JëW¹bÛlWÓÎÙ06¤JiÅ"5/U×â7o³E(Í­…Ù*5Ϲ ÄZ¬xÁÊò£Ê`@E0µcƒWe°¢ n®vÁèya’Æ¡–¬1#£ ñ™Þå U$+ªµ™àº¡%PÂH„l¡/êûx¡p ‡¼iù=rÉá$âÈy3¦Y±ƒFJ‹¯ð\co¸D 7Ô†áÛ\ÿ(ð¿wý£çc¹,ø_€\É@p²u\ðÀq€©p˜ ÄZ)p,œZ0(yEìFyJé´Æ…‚.ÙÕK Ä)±½?¾ÿ`k4B„¼¤Ì²9ŽÐÐVe­#<ï¿?müí‡Ûi¿=Iq8SˆmB‡z*hÌu8Ùj«(M›Ó­4iŽTÁ !3¤â9vš+0–ÎàÁÆD`BíµR$å¥mZª†$GŠfÕuÅéú–\¸$±‹  ¢¸î¥[¤²â²•èBˆp1EI/ÙZh2WÏW\âo—ê ƒ hüú%õ™I¡¦PÉA+XŒs¾6 Wú–ô§©ñ¸´%Bz&;N‡1Å7…1†¡jJ]_ü”JXÈû™ž@§°G9ûÓíf}¾»((ÊÓ>žnbÇ:_›â½6Ë×NKŸÇ›=ó]ëø5X€·­‰P‘ù ‚ J3j(V‡©ÔÇ{Û µƒ=B BG@CÇ*¡°<„åå…Â\”è¦!¦š/Œ¨Œ¥v2¡F™TÏ߀Ú@%é'f%Ueû2ëŒÁ5>ÑQ;Ù„ûMŒõíÑX\‘¨‡l§ÛñûïÆ‹©DF'(cÔ¡0 ®£•‚ˆÁY]˜¡’Q]CXlfþçï¢g}íÌúM=|dP.…—D×ÈQ È—?§¬V!}ë7¾Õ¾ýæ?üæÃwþxÁôÖ7Þú©4ÎÏrÌF7ÖÏ…¦izOï ‡MŒÜÞÛ–¹‚ >ñÄ}Œ›_[‡|þøáùû»sâì+Ü~¹§% B–Y"Ê„ÜHÈIí IDATîÖõµ€q‹aœK‘$Ä: ŽñI¢ŒT)±4ë Ž< 0¨b°"%¨¸a ï ÂKÏ;õrVÇ}ëW]3¢Úñ¤CDËÀ¹æyÆ%‡gñ… G.4ŽÃQ4•º¢ÔºSè-€¶uÎ2ƒ•æé—L-Ç+bBÉr™(–‚2í¥\ô™šC-÷FKêNN!UXuAàUFrh.·Œ)…ÌpS¨€¢³ óºËf»Ý=Ùa®ûýn8è+Z+1ä"2 Æ €épñgöt»ÑçOËÐ9®H‰d•bá^œp¥“a’hßýŽ…˜ƒÒv‹¯JOvIYgX‰HBj¯ƒÄXQRˆ˜‹u>š£ŽÕŽý…ÝM¸û÷ ¥>ÞÙ½ ö{ûþ_ë!³Øg<)æ‚hNtq“ì„JýŒ v< „Rðèý¡ëÙecÎR`–pYì´·ð5è²ê;Z×@ÈÂS" ~Ž/oí ¨$ÿÙ¦^ìáHý‡ýÍ¢ÈWHo}ã­oþÃo¶¯¿ù¿Ùê­Oðã—ü„c¾xº1¹ÿ¼¨”)öåP¦ñbqI;3öR)óì¹NÛ{÷ÉŠç>Ü_L%Ö"!Œ­—"®­ëSdìD"EÄn;Šâ‘qÍÔFA3Š—æ‚k#ƒ€pX¯ã ZçìGgˆH`G„…‡~M„j‹„”·I_ó›·ŽÙÅ…bÚa©±ºHŒ¨Ðõj ,2«e316\P—Èæû@ˆËb0JtÃ’·†œçò“÷\Ëm^öYÛ–£/¿us½Ü”È„ 7xŲ}™ [j,0uðîfj.t!˜…$ 4î¨+­»oþJÜèÇô®=Xµ!Q–ŒBŒEyæx©ýÈÝY©õée¡|9É+j̇i,eÿT¸T ‚”¡ì¬Eë´Ï‡RtÌÓ„¢öù¤– ® U0å¢qß,”ÂAùÑÝ€ uV ”/X krƒt/*‡qÚ# u¨eD úŸÓ×N+ƒZãª}ÛºY/Ë£oýÆ·^6¨¾õßj?ýÔdð'óÅÓMëçHÓ4© òæõšâ#a HóXL¾þ`*eÿx÷Îï|'uýÙÙöìì>#c“R¾v&12Þ×R¢GB%¤R.ûk£CóÈÀ|Ø%ߌ³˜gë¤ç¢Q$ª³…Û0¤âàœ¶Ø"Ÿ¤…«ŽL\WTh™ÍhÑ’Ó¼\ hû†K¯hH¶Êlš‹‘˜ €¡¶óXõr£ðÚW~*MjT`#8åq„ÏÎÈyÉ‹_Rƒ`ðŠÎh®YcâFž’”S4!H"µ{ Ydj|PSRçq›UìF?/zÉÇÂu\zß:@³2hÚÏ,ë;*‰F/C : ÐN;‰(ËG§DVˆ3kó•C&Öæ‚gcãÍ0– (*¾Ö€`ð’Ö=¤}-ã¬Á EÖ ‹=Ö ‡Q™¼Ö“ª×®/€%¨f¥ŽˆÀšu–ňÈÄ €Ä¾–É@š8=-±£Ð ªÂ59ô‡2=WbOãK¶ùÏí1ús×[ßx«µ¬þ´’¨ ?Õ£úÔXðSݬ?yüF7ÖÏ—Š&ÓÿvÑ÷ýæt;l‡ˆ!+7_¶¤õë>Ƴþ²ŸÆéüýóÝ“ýöµ7¶g§±µ@޹P3IÓ\b0FÀ‡¬qJžµ‰ÆÃ$¯¹”6+ ÈeŸZ6mT˜"ãñˆ1J° ÜÈR!EÏš »F~J×35Å0ÈE,àÍÅêñ²§ÕvI8(ÈÅØŽáËý;Æ(5˜(Ç@B´CKE$´LñÀ(´$¥´@žbs½K)¥ÌùºZúéj;Œ‹GªQÁ‚U˜'xaˆR1I9vN F>ORŒu^:€°ÂÿÃÞµH’eךŸà$¬–px‚dA8” £¹‚[â F3úó{šzjú§ÌÓpõØ/â¶.¨.¨Q Ô(*ð€0ƒr8Òà,ˆó0Ç"»ÔÒíN]µT]U¾ê!+sp÷m{¯ý­ór~W‹\×˦pž')¨ìƒ‰å”T·2lËËÛ?®ûßøã¦™7}4ö G^a†ÒÇŸ·S@»jWÛ´ÉË«c ·=n1¹%âÛ¹]sûæDÜE 6/xNÛoÎ}k½RO[œÔpœ`s<¥öÉ=å¡mkÜhï–ùN±n-(µ}sÇ×-CyªtÊÕy²q>¥&r`µ“pwN´î8f—R»Ö¸×Auo˜R«5šQF“ ã|Ú$Bl¡ÆSš§«ÚIˆ¶×Ô~ÛŽðw[£„ÅЯy°>èÃÐð¦ßZ¨}7t~OµmÛåñÁ—Zë àFWqµÛæ‹‚–·Ëùþ%ÿ²¾ûëŸ^þî±öƒMå¯2=ÚM!® Pó'µ^%IKNé…Duç°”žK‡Þl»»u×Rkc«UÝ¥Ã`‚vj¦ä—tgüùA…ùký­£'ôOnk|ÏÇí£§5Þ쥵ی4FÕR (¨ôãî5Èåàú&/*®Õu„¸RéãkÑàóQ=¶z" cJø¡±8îLˆuÐM_]€R=Eö!¡$)Ö½Ðå^Ž+†—gÀ–T1a$àÖ›nú |Þ!¨pd:hë¸ËÕT±ã]µ@“P¬”§-n¦«è‘€’”÷jV”4AR}¦¾—ù”èĸ9^EµI¼cJl5þÝW¿ŒÆÝžbˆ¤4¶›ã”òœòÛ‘“òœò$®Î#9'éb E)§´^qY„"8•+q§|¹Åke¯Xk73z«ø_î )J".ÛÅW³×¨Ä‰ˆ­bé{»Eø³¿üÙ×›R¿vãë§ñµñßox´_[BüîéV`}µmÛOÿ¿ŸþÍõððP»Ý‹ ì³Õ tÒÿõ'vwŸæü§_üÅ_ýôÿý¯ù?óû¢‰4¡×)éLˆz­‹¦†ª¦³Â9§YR JS^NKžRV‰®Ö ‹Ýu[[-e[½®k­¥ŽÜhúJwµ=ˆšnÞWz{I-,„·c ÄD†xô±Ðà¼wj‡ž‡ P’!£R.aä󧃀00èÒ‘(ä÷• ¹Óö¢zmÙÕײnkë¸ó‘w¥ùpëèdeBCñÅaæ— rdTWÝD„çãû N/|º—”Ò›9)ÛÅ_÷£w( ¾ƒ zÆøÃïèwô×tÓwGŸwµ» Ú{ÐÖ]aÛ]6ÖG_þ–õÑõÂZ¬®²×¶Õ1+oõ¡ŒÞNíöW´1ŽŸÓ|Ùšh2È¢W·÷.Þ*¦MÐÕž6zm{M»^Ø+¶»u8©éC@»›]®u­fÊœÏóIÆXm«)‰ÉHÍo>H-85dyy›x{ÎoS àz¤åIàvÕú×hTSB¬û÷ºƒõ1,†~û×ÎùP«ý†Bí; Ûˆðû®Ç§ÇǧÇuÛrJ÷x¯Ie/"·XQÊç·æîå­Þ=\Ö‡wï>û“Ï–Ór÷É™`¡JI¯å¾¹K”ÝcN¸;µÝšÎö¦½‹Š«p ±…F/h)×5+V+¥Òv¸)óš ¸¡)žÄiæúÈ®x—Àì°×¶y,ÃÄ· R–‹[^»âÔqǸmíj[Ö$Û9¨T³G@‘ľFZÙ¬®†£E@–w§¨µ³œf‚yªÈKJßÏ´ç1üúøïCêÃÿú0û§ýÚñ_;çCö›{]ß^Ý ¬›¼—ÕEÒòÉ’¦dŠ&ZOr©¤¤Ór¦ìuûååáï.e©î–3B{6yi£J¦)Û-‘í¦)¹Wº‹¢Ý¬Ô<®wP¤Ho€w "h±#Nú b*P»“ÒXNüÕè¬7ÓRÈîe$ô "—»~"D…6æ•ÕG×'OÙ´aìՔƇG³s tü]äÙƒÑ0–®ƒ\χTÁ<Œ½)(¢$«±XŽ =GÓÌ}:2 Í냼ŠÒ²>mIÙ¬qìZNÔêæ6+Ml‹(Íšàfúé®Ï» ¥;Ü=mW§@ÝmP¶&ÊV1JÄ0jZÀPßû,µëe· —¾ÍQ ÇVÕP³¿R™œm·kURÍö%¼P» N)RÛnúðiå–ïÞ•Ÿ?fÔ°;~ëåq+Õy‚Y1¤¶o ´4ç«/¿Ü¤àxu»>x«’ó<·}‹–û€!‹I˧ƒP Híúýí`}0¤Ðׇ†¼ê¿vÚ??þÏÏùNN oÖMð’Ž·mÛÝv¥û?ú,…B/«³¥®qÒõûŸÍ ?f†øÑ­ÀºéŸèññ(u=ßÝç”çׂ æ*PLa^þË}óýe»l—‡Ç‡Ë»tùì>;¿]Ò'Гƒð{)HÄÚ›B&µî¼ƒ›=Ÿf÷ ®µ”½º’¶jÐ ´Ñ[­ƒ;EÙVD¹’¥mªÕW$©å—D‘x³îkËøYFnO¤Ð½(äê6¼V(ÚÐÝPÄÅŽÊÍR‡°º'ÛbÄdã¾Á¹ô‹ìÒQˆõÊàèÔu]·ê:¿5p¨š$*$%÷±î„[o9-tò¼äS¦GSSHM!+¤¢i ™0œX ,d–J^.+h˜À¼[Êt@ V8ª«1I¬¯<‹UÒ”F2ÉM7ýylúÑÁZÐf§}tžÔÆý—5£6%w³«Õ÷”7æ ÁÊ”Ý9¨ç7jÝ jè µ©uÇ* r5 »Ïâ«\/µ„ÑIJMkœ²>=Çki6;õѵ+Í5 Wn2FÓÑ–Ž“Zp”šÄ|n_¾[N©aFí(5;VŠ«¯4÷Zž*–‚ãÊe{Ôøê¦Ý'ÿT¿¡­õ=×­Àºé_жm€§…n}’ä$¹tG³õK"ƒÎ§3Zëº^þ¡]¶øÇýOç7’¨ŠŒ^¾)ê˜6Ò SÀ˜hÕ’ÑaµE«»é•n ×”Œ´[“Š=ü³£§%¼%©Q£T:1¨ô5¿LÁÜD÷FÆ­Óp ²ÄÖ—ÜzõÈ„f© T¡JÕ³Ümhý’;kGD×B í`Öëæ½ÙëGÒ4ÍcqTW3"dz‹Êîžç„Æî䪞LUX ¤Ê£¸ƒ&"¯@C«ØL¹º¤°¸W]îå`½B gƒÞŽC9öïï°ã¦×OàÇc»ðk}¬²Û¨ìÎ’w§¤Ò­4"á…ÈSj½ÚrwÚu)^Þ(OnÃáUª™Ä§süì‡\.l:± ‹«›œOq­¤¼ü៵¿øs[N[ÖL/ÑZŸ¶%ˆÑ·½)žœçDr«ŠÝœvì¢;v!¢Äv©Oò\ó$ Ún¬u¯ ¹;Z œ^p j?ç]JŽULÄùüMÿB~ït«¨þEÝ ¬›þemÛ¶±•½Äm™OÙKJSsÏyÒZ/9`ÝÿðÓsë>ß×¼Ô_ú¿þòÏÏçå|:Ÿp¯×JÈvÒâ`uÜH“í–N™Þ¤ˆÅ$»Ëz>×ýâP›AÓd»5¥Ü«Á{9²•.—”• ö`µ¿BRíuI©xLÄJDQ %öLpä0Ò6¼4‚dl*«ž«_%šr¯&ÜÒ­Ž{34Cðå«KÝ.mozá üf)ÍI#á'Á p1úLqÊtRJË'÷Ë)Ó£F…í¢ß.âÌ« Üë¨&ÇÄó¢°d=lN€BDÎSFc6*º@/ÙŽÍXa‰Ti†ï§a÷¦>‡u'­Pº3Œªµ£' ìjDLÄ“¸š×l_yy¸YƒÈ®lf\Ÿ›·jOj“¢+‰h˜Ûk+Ýù¤úhuZ NKëe ”îŒ\-¡· ¹Õʱ½¡¶U:î¨sY½¼Ai±_YiÌ=›kÝ^ºÚÄh®±&BÍA¨g)Øl¨>ðGßÜoâ¦onÖM¿IÛ#Ûãšæôe^îæå´¸§4ÅÕM¹éÑqˆ.®ÕWó΋L­TÊ—ïêWJ™<©\kžÇe mÛbHÍÔÎÆrw>‰I?”‘FRjüO÷¸Ä ®›w¥É1ˆ«£Õì*¡æS:£i¼É(Ÿh[­ë÷ÚƒuÓÇëV`ÝôÛUëVë%׺¼=+ÌRô^â”í6€ç)¥s8Går½\Öõááa}S£˜ÏgŽœåœ^ð:ÓŠz„&Åcß’5]f{›•+1»9¹u—ÝËT½#2*„ˆWiñ¾jZÜMq{Gœsë¦g﫲ÔKZN.ÃÕ^»õ! ñØJ¬GÞN8ž·ÎJ²7÷4Ð;õ}ñþX¼ Þ•4§ñX¢~Í?nHÂÔ9zWXalYFÒ"iN ܆U,§¤`)Ù÷ ccàìAx5b°äÇgèÞ¾Z"´¬ïþqÀÝ‚ÖYe7™šX'lþ÷ÙÍΗÕ)Àäñ‚) n® “#³ÓVª1P Ox"‹†#”ÝyJ-@õ¶:)Û_±îþ!noSœhÝNb²aŽƒVúLz›âÛäx>LsÛã—ÈoiÁ¹§ÖÉUå—Õûhr»Ôñ27ÃúxÝLâßIÝ ¬›þµ==@«»Ûîó'wÕ3]Ó̾& NšIvŠl«¯~XlÚôæèô)°¡ø"úC®‹¢!õÙ&³;2—°)ˆàe?Û5+W:e/ ‘]Hvgë¨oľšL_¥èÞÜQÈXÕÉl„äºÍ1NN1`‚¼›¾Ø…®bØ©^øq¬ §yøU¿j˜TŽGIÕìÓ&E NIbIg½Éy®ê’¦hÖ<-†Ì<ã)úz¶?¤÷Õ1àìâ™øêÝúôÀ袩èt/™Ž]˜Tjè,~…ž©½áæ½Üòžoú·ÈÄËva —./ˆ+ˤ¿ÿÂËIqñùœš«»HÎ3±CŸÎñ±®W§ þ³ô¤8C§U« 3À¿š(Ú^±rJ<ƒâŸH_ºtëÑ$G©yrªùmâmНÞEL¯ù©UcÓã)±Õ,µÍ1¨ì5Ï©¹){™®tÅ4>0Mø'xþÁüÁïöoú=Ñ­Àºé]ÛÓãöôXNóe[—IËÛszƒë"é‚3Ó–¤æóæµ{õºþ z·œÎé-K:§7Õž“äà#ƒ¸æ9BK!š˜B6íÌ]­ÎA%ÔέWõìn‘ŽCÓˆ¥_Q(ªçá%dBk=«cŒŠ{QÏÅ—Ôz$¨\ztˆ6êàFȼ¿¸R÷‚Mh ÑÝšäîôÒ¯r»NS¶‹”ÝQÀƒÈÊRZæ…ךOg…šƒ¬4¼)DDæe \ˆ<¾¯8¼ü šëË×rUH~®—Ëüxù›ñ89—SÒt¶+]Í›‚¢zq‡g¤Óý›ø£¹é;¦2Ö¸´{yÚÌ/IëÃåÉçG-?¨ùœ˜ûáÖò¾ucA­Ž_>ÖŽ»$âÛÔjeWćÏþ,ÿÝO›kÝpñüw#­ï­/íÀ"µ`HÅK®yJ¥Ví†ÇzE"OjrD­×¨Ô\ËãAŠo(59µ^ã$NŽÐz#Ýxw<.W~—úo?ûo¿Û¼é÷D·ë¦«¶ëÆu{„y[ó”Ó)åy™»+¦MЇO )Ù™êZ®ëús¿ã’RZ>çé.å<ê•‘x¬ÅìfzãÅ¿•N2,$wÔg÷JO­_<ê–z-{Tp½6ujþnÒä2Ìèݱ/%¬ô\@}°Ý£{SÀ{¹vÔ†ãUµ>¨S:îQ´£#²{ᘠfÓǧ#eÈ!%‘O ¯Ó|ZÄ’»€¤Lž¤A:–"›b6%…£V€SS­^Ï9ò—_ü¼½{¸”ºi"j™Ï‹´¸^l5×(­Õ¢lÓ«^Ïõ«Çµ>Ü„7ýõ“Î'Öhܶ_¹²Dý°¸§¯Òë-&òI¥³üà³ò·ïòÛ™êu5h p2ÃõpįOÛŸÓ5¶­ãîUeIsšÒä“Êæ˜´>Ԕŧ)‚Ù²ÄD<%¾¬ƒÔ5×}Ë­:žS™<±sì0Ý1¥²UÒH0¼é¦ß®[uÓïLÛöÈÉe_u“&è¹Ø9Ø!ªBÊ)ɤ K-ig[«Ì:=üñ§÷ó'YcÃN³{=XçQF´Nfhidê R”Áb¶q³Ž®ÒDÝã"Ø[ n{…fujo„‚Ѥڋ¤‘²<Š » Ÿ»´¹ØÑ®û *}M{xã5<^!{dQ÷A7%O¹ubš$åeIš–<’péÄ4.ýã$It4øXÄ:ê*¬ç<8ôL/&+¤Ú«ž#¯´¾ÿ¬Ô?g¯vÉZ–ùÞ0¸ˆbšˆ~¶B"к¼ÿºÄM7}Œ>ïdžà^üXºYv+ð!:½\!ø|>MY´í"(Û–ƒÒ=m«L‡I1*qª¤@y´w§ DzCžSë^vJðý9WnÔIDATe%í›GDé3)C aÃÃ/½°ñŒ^©MÄêR­.ïŽ;mª/Ÿ.ã»uÇ®bãb"=º¯4 xf­®k½%=ßôï¦AÌ~ÔíV–¯¶åàT7k#OÛù³Ô\#j [ºƒîp= Ž Çi,Þª¡<Ñ®&¨í¶å¯|þC5•Z¯ Æ£1âÛí\$ïöÞ©©z3¤7Ž?¸k%Ô&Àëµ.)5­Vk}ÏȇnOŽAk±Ý–o›7}¤n)7ý;ªÖ­ÂœæËãƒçs¹–|Zx3 Š·¬³¦PN)ÑaZÊVè¾<^”¸l빞—·Kz-ºÅàHÙ IÞ«¤ƒÃþŒ ¾lÚiÂöÁc ;q‚®h•r˜FŒÆpŽ­ÆIÕe9e;’ð~Ôv0tuëÎá~ÔR$Âh9êX§B¦huv')@Q§4PXHkš€Ðè@;òãøVÆ2£‹½¸gÍÄζýÕ»ü‚«è-O©…ª7 ‘½hÞè¸GBhxß”g¿w­å澺é?F?^|Zª»S“AÞ\&µÿ^ó[‘MW>™«š‰'Åt$L·ªö4¸VƒkŠ-‡ªIùD±HÃ}åØÅKÖ¡¤Z½$µ0–yͳôÚyd?ŸÕ®•à(Å”Øj|I†FG+¢õj#aI1¶ÖM7ývÝ ¬›þݵ՗¹ái¾<]Îói™—ZפEûœ“j7ÁfÍiR:-böþxÙš¿xxøÛMätžgåé>½‘4Æf©`…äplðéu: ¶îƒü²¦¨Þ‹åoG4î•p¶W‘ƃà3¹yôºÆ´Îê2>‡èN<ªÃ ?ˆê‚(∷6R£Ã¬NÖì—‚F¹æ~lÒ#4B„–^gw§8òsäÑ™{…žUÛ¢×ãÒY¿¼¬OõÝ_ÿe©@ÉÓ’Îé~þ,¥Houo ïƒ6Xùø}µ­i¯_>\®¥ÞâqnúÔçÝ?fô±¨ÝªÔÝç$ÛÞ©Õ鎼8Îw­o11Üe'v‡äØivì8°Ìs;-LI×wT·î(Z Î3O›+¶S»]àµó§³N[ì©]jÝ©­Ò1œÿÔ\m)9–©hŸ¦h—ÇêŽ&/?¸k®uóú•8oºé#t+°núÓ‡NsšÏ‹.:ååÍ]š2AqÊ›·´'CM‰åþ¢Šù\«M-×uý[»½ST:-9‘ÒÝ2gb‹ÔG·éh¤×‹mÅ “¸D¬m¸Ú‚ÞÒ´˜–&©[c?qÂvîdäîdUÙu¸©BΪfåÑ-S¶W„$"¬ÒØv^±ñ¾<¦ýªÐô:3v É6ÏM·_µá O¯q¡î<üâ§ïÖkÓ„RŒÜßßç4Ÿ Ôk!T  WYwB®Åས|gêå/—m½UW7ýÇësøqÐ:¶ _:C)8žT¿4Wy}'q¢í>&wH8žÔìR뎻ÚnvŽ!µÉšðnwܽüos«•Îáß ÐSê•]-8&µ ØiµÆ.ä¶àÑZ73Lкy™)û0' *ò­ƒuÓGéV`ÝôÍht³ëõ¢)]~sš5ÅóÞiÊ’0„¼õM!ÕþQ¤ó§wì5þà¾ÔG;•ýR¶õâ•¿Ö¤EIYJóy9‰SNàerÙ Êxd-Ì™…n÷èžEö«2hòé•ýü£‡&äPŽ4è)¹7B˜ƒ¦‰dœ²kcÎÑÏQȯJz éè¢e|âú¹ñª±g?¯zy@'Ńrï½n—u½®ïÞ=”§ËhË¥SŽº»;ŸÏóbjÝ/xk¨^¨mãæ1Á4¬¿¼¬O×ÛgÃMߤ7kDWÕÄ,+uƒŠ' Ê•Ëc]Nªoœ’Žh¸ÎK5;#”Ó²¤xÃ^c£Åd¦ÄÕŽþ–?ðEç²mJj¦É ƒPªzõòi"xа@L,wà”'ç°ŒÞtÓoÓ­Àºé›W­•ZGæùîòåßäÓ9MÊóy~ã<áÐÔ£Ý,tµd׊’?œ?k({µ×RÌåZyúÙ¤¼ÌIŠ9¥tB1PHtÇ@3 ƒ¤•ŒÕ3„Æ6â‘*ØM‡Wû™óAçê™×+^ÒE…îá5îû SĨÞè2Ö3¦èUNqì’4Ü÷*ÝRÙ¾¢<=ÖÚ.ï¼Q\¡iÊQžßÜå»&aTmï…à¶ÃÈaî®N}o Á)ËÅëãåòx¹õ®nú}Ð×¹Yt ÔíƒL­¾+_¸TëŠOžÚD ©¹ŽÆ¯tÛAUƒL4]èö~䄜ƒš]Mm›^áݼWMˆbkÜD ”ÍÙ#WIŠ¢Çí¶!rÓÇéV`Ýôû¥m{L§y}z(Sª{mµn“æO¤pŽ“p±²+d;˜^G4XžRÞ&U3•âä½Ö÷v/õÁz%kO)‹4å|š¥ì×P”xØ%û}£®ò?ÝRãü0<ò’Š;ìuëXGVXƒÀŽŽ—Zp É89¬„³Ç^dÏ5¿«ïím¾<½»üòÁ»ËU£’•Ó›$-yVÒU¸ÔUÎ>:mÇïÙB¯äRË•õéV]Ýô{§ܬ±cø›uy2AÂq’wûªõÉç·• ¿ò’D»Ã•0|TÇIëflv qR´Û8Þ%¬×"8N F°‘òHkGmßbR–q´tç“¢¡¼ø›nú­ºX7ýÞ©^7€ZÙýð‹wó|Çß’Órô´r•„"`E»çIò´œûQ-Õ½bŠKÝëv¹lÑ !ÍŠÒó¤y^ÊJz£_QÔƒÔ7èdLŠ{V2 P€Ô^ZY9¤¬Ž¤BÆ^B¢¿l:oåâN¹nµ¶u»¸UocGÉ [ËiN)+;ÏŸ%T{]÷5ãÖ­.wxo XvÀï+A Y×íòåß×Ý·„›~Ÿõy÷Ãÿ_’ S«u’úám_¬eÑœºáHŒ‰6)Zm¯Ì1ˣᘎě"€ÏAÌŠ¤á²jvìn0x(qL;gÔ‚ó¤ÖûÜ®Ûvnþïoö »éÛ¡[uÓï¯^ø@­N“þáAÒ1ï›r>%½N 8ÄôÒ%ºÀˆ?;’j™È).DõÏ6õy«µõbW葉mÛÛßô‡ø!äµ[SRž]„Õ=Óýr©ŽAÍ€«Û±¼Ô©@Ànîv«î ¬×ª®÷EÛ]o¥ÕMßrý~Ã;_ZÕ®›Ö«ïÿ‹òd•ëØõ]%/“Êf‚V Z-A‰Úqׇ0«å$^¡¼·w/«Jƒj³«r,à&iÝÍ®j7T°­üM??7}+t+°núÖkx¶66 ¥9Iî(Ŭ¤@ž³”x%)W_Fl`„šúÖºbPí IQ¢—#¨mbŠ ,’P¥ŽM½†ÑCµû¨~Ú4Töy ©è–P š¨u¤| XF³{ñ56 ªÞ+Á¸¡è½buS·¢ö*ä÷/?ù뤆k½<­˜Ëm xÓwH#ÍðGƒü ;ÍAäë0)ÚW­ÕˬäPäa…Œ¨aWUÛAÀ(:Z\ºóaÌèmãe’¯(˼ÔU¡[xtÔnQ97}œnÖMß)ôC€+žï¬µæIšᲜ^ QÃè5íÍd Ë.{“²±ŽKgcÊÁth Xt‡Àf4¹º¥¡éHΉ6LÛñÆpÃNµ·Kwœr«¥ÙU&aW¶„¼Û½12|öFÀ^©bA-ª˜W¶`­t.Ok»–Ú}ۼ黧±iøã™Ðƒj÷z=G,ƒÖÍLr0’1ãe‚Ší.pæ¿ÊI²-«ìV’1–w ]®.ûË™¶û±Õ¨àÊÁî½´oúY¹éÛ¡[uÓwVÃî(àŠ6y¿@FfŽ÷E)º›.wšB¬ûª Úk"ÕPS”»õÞëue÷e» Ãû­®ºé;//äwÃzõR™ÃÑUr¶IàØ@áëIÃÃÈ¥Çù§ç(gÒ1G¶4ü“ÛG‹º›ë@é>cÏÄMß&Ý ¬›¾úõÙÙÓñï]ºspVn@ OJ§dò2 X¯PÐFM!ÕŽÄZÛ ªSÉzÙ㫽Œa"”Ú£hÕ‡kJP9j,Aínó |-~†Wé`4ôÂ3µlt|ñÕe/†º[áŸý87ÝôÖOÆ?ýWG~Ü©› ÒÅÁúÐgÙ…¼l#Ö¯õŸ>/=*~ý¾þ—ëÃñ×rë`ÝôqºX7}¯õX'p€®R¶zU BH9ÒÆ£”è’²‡ë< PÜ_ÆâÿoïŽuÛ6ÂŽ,8H€èà±k£ö#ôM t*²É#tìSt–ò8Í& tw8‘¢íX‘„/!*þ~!ˆ4pF€èïãéXºMß[uªaé¯i÷;­G‹XîR¶‹v»mÄmé¶ÑÆfû¹”]݇úßÇe³},CTYïë7 ëûÙÝ¡º¬ÁâT BÛW§noîý3sêÄ‹6–±Üµ±¼¹­øÖ}³¢+q³ˆ®¯¨ö]©sZûÿš7õwíró¸‰vQ·Q÷ íbSoL”MÝ‹!"¢sïŽùýœVñGÃìTéÊÇ~åÖv4kU»j¨¨e,}{-uøÙ2šÓú½+±šð׿ÿC`Á1—UÎÝwõiÖÀ÷Q¿uÃ1âý‹wÎ8Ʊ³pš¦\!u0s ™ÀH&°’ ,€d ™ÀH&°’ ,€d ™ÀH&°’yØ3Læþ—û©‡ÀIš¦Y­W§_/°`JëO멇ÀW\ðoä!@2L`$XÉ@2L`$³pž‡û‡ï¼µ g½²ž¿¾z ¸Ä)©4“œzÍ-B ÁÃýÃ0³5¼¿NM5ÂïI`ßÜ0•5“9-·€KŒç¢VëÕj½ObÍ$¤Þ"°€K¼N¨ÚX_<57n9æ¶Ðê$æ®Æ›2¹òº¹E\âŬ¯^?,Қà Dœç‹…4~ó­ï Î!­*œá­|ó‰§S,à Bê¹$XÉ@2L`$ó-B˜ÒúÓzê!O`Àdš¦™z|ç–­/ ‘Öke @2L`$XÉ@2L`$XÉ@²g;¹øóÃTã€ëãƒu¶žÖ¯¿ý=Õ8àúüõÖ™:ÖÝO?O8€«a @²æééiê1\¦iþvŠlQân„¢IEND®B`‚fox-1.6.49/doc/screenshots/dlgedit2.png0000664000175000017500000024501612130340076014647 00000000000000‰PNG  IHDRdå?ñPLTE9{ƒöA@A}{‘Âÿÿÿ  $8D  $) D ])$ ),))i111419$9<99@19…9• 9¥9ú1AA,ADAA… A A¥J<)JLJJ)Jª)RR0 RD1RURR‘1R¶)Z½ZZ8 ZLJZYZZÊ1bÅb<b@ b]Jbebb¡Rj Íj,)jL9jPjPAjijjÖ9ss$s(s4)s@sLs]RseJsussÂJ{LA{YA{]){mZ{}{}{{{{ªb{¾R{ÒZƒƒ ƒ$îƒ0ƒDAƒP1ƒYƒe1ƒeRƒ}sƒ…ƒ‹]Z‹mZ‹‰‹‹Êb”])”e)”yj”•””Öjœ4ÿœ<œ‰Jœ‰{œ™œœÆ‹¤ ¤4)¤Hÿ¤m1¤u9¤}R¤™”¤¡¤¬P¬}A¬…Z¬j¬‘{¬ª¬´´´U´qÿ´uA´…J´b´™{´¶´½(½4)½]½•j½¡A½¡‹½¶R½¶‹½¾½ÅÅ}9ÅÿÅ•bÅRÅ{Å¥ƒÅÂÅÂÅÅÂÿÅÆÅÅÿÿÍ<1Í@1ÍiÍ…AÍÿÍ¡sÍ¡ÿͪsÍ®‹Í®”Ͷ¤Í¾´ÍÆ‹ÍÎÍÍâÅÕÕLAÕ]RÕ™RÕ®Õ²‹Õ¶sÕ¾¤ÕƽÕÖÕÞ]RÞiZÞ¥ZÞªbÞνÞÚÞæ}sæ¥Ræ®Ræº‹æÆƒæÊ”æÒ”æâææææîî…{î™Rî”î¶bî¾jî¾ƒîÆ‹îÆ¤îΔîάîÖœîÖ½îÞœîîîö89öLJö¥œö¾jöʽöÞÍöæÞöööÿÿÿ$)ÿÿªZÿ®Zÿ¶bÿÂÅÿÆ{ÿ΋ÿÖœÿÞ¤ÿæ¤ÿæ½ÿî¤ÿî½ÿîæÿöÅÿööÿú½ÿÿÿÿÞÿÿÿ͵ßtEXtSoftwaregif2png 2.3.2¦Q‹ IDATxœì½]Œ$Éy –ÔîápÚ!gö´s\/–bmS^H#}¼Ãjj%Ñô½ìÝà ^–ª¬ x]pSDЀr“®‚`·„~ðK ¢­Ë©Ûg‘ÄP/6· † ô bO°ÅYß­DŠ‚‚ç“3"¾ÿˆÌªÊ®ž®î­¨îü‰Ÿ/þ¾¿ø"2¢¨ƒ{´uWPÜö›nïöîò oQµîü|ûtq~^}Üe4ÝÞíÝå; Т}|ÔÞÇÒuЮ‰ÓÿZU%`ݦۻ½»|7„@[ àìøP¸Gðuœþ×Ö>µš_•[»éönï.ß !Т~têÝøð|yvöpQW§§‡ç§Ygâô¿¶®Íàª%ôåºõ›nïöîòÝ-Z)vÚþƇËÉd:=v®<9l½Ø5Þ…è&Nßë#ôô°¾b–xÉnUÓíÝ «½ø;þgbìÝZnQеìaÙ†Cd5öQ.Nöµ(„Û­¬jº½[å$áïÀ…Ý-œúßøð,0W–óÃG “;ÀÄñÏ pð:ú—rî!´@Oo¶ °¢éön¥á/@Ô7cïÝ:n8> ¬¢ ,ÏOе€O1ÀóqÚW„¯"´zzrx徭ôeºª¿éön¥ Ôîï'MÀ´Óæ¤%ø`>¬!üÛ»n ¶ 8ê‹=fÃ_ìörbà?ʼrvêឨóMwr­·ÿëÿ Dîq+Ð:ü á3¸êB^—¿aÊ `qìq¸<9q\äÀ Ç ˆâ„×^k„ïþUKéKt‚ä›nïV: øˆž'{ `7„@‹Gsÿ4oCCÒ“ùÉñᣂÿk¾Úë\Æi_ŽÀª}õàáB=„sŸx~£5€vk:ï3ßÿ­ñØE@þ·>ðïÊ‹zþhË‚k#{!ÖÆ=õ‘ÌàÚ^h/"Î<Æ9¯e)^!óðêÝMžhk–k:_ñ“«Æ…kò‡È…ñ~Ø·çZ9Œ@™œzV[:w<9?äM#ã”>δ^Oæâµ}/%„›< ÐÖ,mº©nº½[á"fIât£Ä½½[à !ЖÌbZv÷ÚÐ`– >FhÿÏKµ´Ð¼zøeyƒg¼j“iºÃGºÉö.çJj$õ$uì½ëuØBC´xÔj¯­;?ôèÑù£sïy¿à[â­¤8m¬íÑFÄ\/6é¨5€f3¿Ž à†Î€^ )õPlïöîÒÜê àÞ¥1×2€k½& ®Œ?¼qûﯙÁªj%'œ¸²Û…2ïöÛË•å+z™-ˆCwi ÀÝÐYPâ`áMYn¦qZ"óþÊW‰¬Gs~Ž¢^}Éwù ¿`R ˜Èá¿0‹‘˜\æ eî¦j ÔÚv<Á!âk4f‡FÞ_ÍUblét»•tU _yÉwöZ–H⹦7‹±Á?¾µC€hôX¼}°tÅò¦Î P?j[ódÁMíÄ ™ðþÊW‰•?s8k½w¡ü»y͹¤%3Q¢P]¦ à†Î PyÞ FÀ8óQ6¦•£oxòa"|mÞçͰ»’$1ºbËbæ )@]%Ó1šÎˆ ¤é¸w—ë¢Pk ~-|VtPuÿ»‚3 àj¤ÈY€—xwáÉ…W'c6Ó^›¼¿€Äil|Î=sm²i“K ¹£Ì(OÓU~v Ô“v¨Âåk±¿J'Îø;õèßhPJ n[`7P  ¢!€C‰æå^㸷ƒnÐTÒ^›奤³?¦Å8B$º†® j:wæ0qx‘ËK¢·‹×Ir£Ç(NEæU–?ªCZ¬~¬ ŽShÈ3Ö2ƒÒ`èl'¯Ð^ÔH¢ý”)•"q0eA(²TAþ"äcÀ ]À @Ô¢  !ŒÏ¨é Ñ÷ˆLð¢ýÓÑÓ„,A@ˆ ^MæX(Fe0e‰ìHfš«e„#™—ktTäXªxe ‡LŽX“¿k¬u„±)SØ;t²¥€8â f†Å‰%ÌØu0(:å4*ºŒçt¨.VÏ÷N:h¢ þ‰‚ê ÙuÛs7s€Rêø9°oÍ&¿æFÓÌ.“:Iß%ywæá²kºÄŸ°£F´€¡~˜ˆTÅnÕb A´˜¼'þ>ÇlRv=3òtôÏX’]°upÃ4¥ÄY€…S©ù¬Ëõ„î5O§ ¥èvâ¯ÔW¡s—[E%-«( p3)oÊ"ÍÔÐb_¦vÊþo‹™Vö~ÍÌ”psYn ±€<²ë¶ænæ:­„` må¼ú…=¿’bþmçæ=A†`" M_ ¬º1­+X‚æõ'=*0ë/°zÊf¡ÐYʹýU5gr˜8¶}óë¶çnä:­øÏ£ )P·¹$o!â²Ý£%½ì-—Äp™^׊º³I(‘ãÂÈ": B鬈Ì9)bW½ ‹µIäŒSm·ÿe°D6TâÕ÷r¿¼‘대+KùF¦¡)W½9í‘R·Ž¡ÉTæžäÚ™ré-fåRëÒ™,“b¹R7@ kﺜËu–hz—6}*0ì:—w‘åt;ÍD»ëŒm£Ñè`$~ë÷ív+­±;Nrp¡ìèº^M9·M[fï:Ý&My 4€âÜ[`€°ð2Znïöîi8±àRÜM›° €8䣫aJÆ’‡½»ˆÛ¼=w¬Fl Éýh`jÜ1ý¦Ó¾­¿ûÂnÚ:€Dî6º„±Þæn„s»QœkïFwïæ).ÕxÚŸ•zÁÑ3iÇÝzBÓc ,úÂnš(~!ÃMGNsZsA³] ã[^­_ØÐƒÊèKQëâpîº 2“ Ç/KS ^AmÃv>y©Œ„O÷êF°á›­™Ê!).©lÙö“­Èþ#챬ãuÓ¢Sðõ0×ÃnÜ:€TC¿)°»-«EN÷_„íYù™ˆg†±œ ¢Îñô3êØ¹3Aø¢‡GmqB‘bq pV"±«Ìfä…åe>3£äIe”Å@¸ -ÆwnR„8Ñ¢Ú¥3 ƒ|z×2Ès”¼ÑZe)Ú—ö¿]R™‘vEEÄãý€EÈFWöÁu®Õä,xªˆ\\€ܨY€TÛ‚×^FŒ@ãsÔÆN\„|(KÓêÍ¥~²Ó1†³ 8³Q˜H,±/>‘§Ä(G™érÉòƒçÌT‘"s1gªNÅÔÕK¡Èbx®¼Š]lOß½ IWmÐS8ß!.©T©Ëv‰w½¸VhIrèºÀ²‡,oÚ:€ŒPG@dõª¥Ýk‡Ÿ8½üâÛ·Š‚±Æ-ï]´Äj2nÝ[/¾ð¡¿ñ7>ô¡ùïnÝ~ËpmÊqúQ,sþLéC ,Qºçl>1øÞw'*^жAºÊÖ\ð Õ×íL©`m{8ߣ5Êñˆb£2¯ÕBÁ´“í#7êíp«!uyÁp àF­È(QˆÿN³ÚÃepg‹ÓÂÙŽb".U„²|ñÍ7áx÷ ¿ð³Án›Ž»–ÖÇ?”‰]4AÊšq/y—E…îvÀ¯:”éåc[Xp-å·ÔÿbKO/ßòO] ÚhË:4LùÅŠR¥nØ{¡«ÏvæÂÀ+Uª{“é4•yé{`æ:Säê¬æ«uñ)m’Õ©ßk]šmY³0vÚÃÀZSjê‡þº»wÉáÝó;‹È@F !{;• öÅ·Þ“)›Ç£Ñ£%¶7šÉÃæáäñ²¢É3€:ö:™ 8•{é¥ûß|÷›÷¡KþàJÒ©c^%°+ÜQ80€ƒfq[§ƒØÿïÿù¿ýOô;‡ÍY}üâ+_ùg_ù¢©6Æ{mùF±,o-—¯ÝY¶/í›¶ò:ªÃ‘¸ñ0ÜW¿L®Ä!ÕH0߇ÅûÊÉþ= „œË”9a:ŽLéš^ ­?l4ˆ³­ø9B¹dÀ¢X¸I³9 ì ¼-k„ÔZüKè°w_lºB“[À!âÂEÁ à½ø–ž]}\ŒnKŒh£ðåƯ€F> !@ÄÂÛdñƒwn±E¯D«µ  ý½äÃ^j¾ù…OêSŸ|õÕOé]f?!èÝ/}úÕO¾ú©O}ú ß|‚ ÎomÏk.žþ…i5€Ã{/ßa$º)þú«ÿÍùÆ'îŒ^~ùÎÇß~û3)Ðÿr @dF ‘®I«·Ï m|%àÅ9(UÄL3€÷Ÿ¼ÿ,k>, Â!¨ÛÖ’áC€LjÑ^³Œ ZmÓ¦ Ñ–;´D ®k 1€C–òÖÿ1Ëþ§d€*® šÝAÑc½ÖÒC”ñD î£ýøG¡'fÔYh>w/¾)‡í ØD ¶<þÁ;…êÐvøqoDË+ø-‘?þ§_ýùغŸýÕ/Ý/8W÷Òý/½úz zõS_h9@yWéöPô™‹˘!пˆÔ2¥7¶ã’Åü­Û·ïܾs§,© ža|ÿw¾ú;¿ýOÿÃW^yåãýÈ­ÛùÌ-έ´ÈVðäí€$#ü+|!ájÿhà`SƦQ·2· ‘¤ñ( j5¤¢fðäÉ“ÀC¸‘ÓBVHÊœÑdè öÑmp«–#áÇ@m’4u 0`Þ`@áäð?¼Ý¨uy ì°á ¬nîeÒšwžÔ!Þ½ò—ßûÞ_¾R*?çžüg¿õ{¿õŸÿÇÿ€4©N–‰í‡oÌߨW ,¥Äj‰ÿ›/½ôÿ}¡%ÿ×=q}ìc¯¿ªðè¥æÕ×?ö1ôzËZp÷]iXèÄV€ÓÚüˆLé‡?|·ºU[cà¬,þê«¿óÕßü/þé+1ÚËÇ· N+\‹e0@ `)  —ÀQãÕü…®¨‘ Å—f/ãô 7ãˆ,pHEšŽg=ï?x6þ¢ û0¤jРÌxI™-P¡:uªÑ÷ÛlûŠ+Å~QXŠD€bšÇgYpcfò -)!Ü‹¤4Íù;3Õm¯ü¯õý¿ú«¿|å#­»ý‘;·cwpø‹o¾)ÄÿãVÝÖ1±±àaAÑ_úæ»÷¿ðÉ–üŸ÷qn}øc?ý«÷ïRèÝû¿úÓû°I¸ç[ðÉ/ÜôuZÞƒý 5€7&‹ÉkoÍÞúã; 0 ÖtëOó7û«¿ùE`ÍÃ;9ÜôC€2 „ @ ,ÐàDÊ|*8èh1§wÁ¦İwªklJ%h¾±¢Bo%iË„‹êS#…õo±KÊœÕTœ÷Ø%=ãÖ˜ÈN1 æü$ð,AjEÂÈ o ¸aë:€`ÔfwDÃHøáøç§døñ—W¾÷ý¿úÞ_þÅ_üÅûþ÷þû¯hv/~îÍæg…{|0º­Qœˆí¿zëênѯvIq^züO>ïéËðá»?ÑÜ¥Ým~âî‡KX¡ç9ÀçÿÉ¿o ïÂà`yx-0”¤´•ýÁw~ðÇ·¦‹æÞÃæXL^¸âÿͯ|å·¿üö+d+ *B*Îp`x#7 Ðêþ-’Å«& ÁÛh/õ ÷ñÚ]]\qþ?¼ŒÉÛ“—» <÷€ï+UÈ¢“ ÃvúfÚ ô1€> S6n2ùƒp(VÖÆØŸc…ÑS¶€›´ CÀ…@U*¿pNôÿƒüàëjðÊ÷þïïýÉòSÞµãáü£¥A! ŸûˆÿÇ?|ì0êâˆÄöƒÇ?øÎ;Ò†ËP¤Ärž¼úêëŸvˆç_zõ.Á»ûêKÏ3÷)>ùú«¯þ»¢4‚3ùÇ™cù¯Ã[¦ô£×¾þ¿üËïÜi‘æÞ½ƒ—yàÊ[ÿËW¾òÅ/ÿú/pÈÁ1Ë0 àE?h»ÑDú]Å':§àÑÅ!@Ï2rtJÞÉàÖú•‘ò™øE}NL§…¼ÿ¸¸ó…Î\ c*«H×¥P¨ÒœèY @Hù¬ ÀÄe…^ð_´äm ¥4Ý à¬€ƒ½-ì7f@—5€RšÝ±_n/™þ¿óoR’¾Òêÿ_ù¹–°ß}÷ÑrùpQW§''#J\¾ðÆ•Oê9€w§£[²ï\ñÙŸl^«ÞÄö㟕è‡N¬(ýàõW_ÿ‡4Áתãû®sðîßþ0,úk³¿ûîÏúõOÉ™·DÈͨyb¤–)ý •ÿßùó?ÿÖíÃ` œÜâ§ø—_~ûí·=ðæ‹E°ñ)à¸è1Âwÿ‰½­þQ„ÿÇ]ÀÏ Œ Àá’°à¥Ùx)ͯì×C€¨1»‚ Xh;hˆ¡}  µªƒ­Y ÀÙKSs•ÛjZÐÌb€Ÿô×6X °Ž žêEÿòŒÀ™èRâB ÒøäœØ­s¦ÿ–"ÔÜï+ßûÞû?µxôèÜÿééI鎧o¼ÀÔÖ2€7^‹îððÞ½OŒ@@}ñ³ÿégiAÿäOþ8Ûì݈?M`–óÒ¯þÄßý™ŸþöߺËÃÖ™+îÞ"ðwýÌÏüÝŸþé‚¢ #€¢¶l¸ÜnÆ­üëç~ã—¿~»µ'#@`:ÿòË¿þö/}ñ³¯ùâ·K…–ø¡’úpª}ûî¿ùCÁ\¤üÇ‘ðZ$.¨c# < /ŠéQDDGk@Ë’¡–È\ñ×­c»^¹u =à˜—)mÓ[®Jíž”å“p¥ìfÖhŠ-SSkc˜“¶ Lª¸ Ú<±kÀ¢k|Øàj"à&­èTx EDhÜbÉòÿÏ¿ýuÃþâ˯=>÷òÿÌs€yy<æ„+_xíµÀ=ýø‰ó[Lm· /¦îø€Oø@/´ÈȈßHTù’,ÏßeùßþÝ¥!@¯f-"° @j#ýù·¿ýµÛóÉ“ùdy‡%¹»õ?~ùí/~ñ×ÿñÇÙVرfJõÝ?‹Oßý×øsu(úáæ$Î# Ω#’!@Ù2ÕLFÑ(WöcûK —ò¤IÐx@ @Lä=q¥§r9G ¹×“¢ý9JYšÔ¹žÁÔ°Ø<½ë`‡>ZÃÀëŠt0=!èæh @8L.g*Ž(Q ÷Êÿõ'ÿáÙòQ«œ=ô `vü¦Œð‚—ý¸[ê~yôrën3ìÜ,ïRrX†âtÇkÛoùá»·DvmaƒPÈ£ Πƒõ€¸ PÞþã‡ï¼ó­¯ý¾öµÛ‹P¬¥¤ðâ¾üö—¿üög? óïüñ%®8ïà÷Ý?{ïÃý_ÿî¯ý˜$”„ĪTÝB#,„¼›¨ð7 Ò¿„Q¹XEE#^’y€ò| xû#E1yc1ŸL—·E¼ðë_þâ/~´y m…É,€x)þÞýžç­þÿkzHTÿ8!ñ˜u.ˆÂ'‚¨²9gÈÐÉY€’×yaÔVðÿ‰—üíC´Ã‚:Zà Læ!I8x¾8.„a85žLíZê~(ÜéÔá‚A%äÚ €­%×ÐgÀÞ-êüçÀ5H"ïg7b [€oXç&L,ÎÔ˜—ÿßþö¿úƒ‚È­½¼òþß?i5€eKÿ§-po¼ p؇÷ïß{íÐëeËÚ!o›u±x¸hSâ¯}>A}Üâ§ ¨h<>Ïß}Þâ{þßy¾Tˆ‘Q\É©•€<þlÿnÇOH[wN€o‘?úÊÛ­ûÇ ŒÑ¾u[$NpùÇ<ø³–þÿÑßÑea²¬À–ÒwÅb.ø©¦å#½´“ d÷†Îh<Þ2€÷¿ÿ×ßG¹/ÅbÐb I<“¹Ëj³`”mf€‚Ã[׎@Ps˜(Qn‘hÖ‰oú¿1ëz€°È+0÷.Æ¢­Vº–þÿÕ× "V¿òÏ~îaý°¥þ8Ð*#îŸö^;òtïs¯ùpÏ^±•Îm’Sÿ'n´v_«¬V¬÷<­óeÌp³‚í©I> ý¬„øà×&àÃ*ů•ÿoÌ'K¹~©e¿Þ2€_ºÕ¼ååÿáoü߸ízò+[ðü›vüÿwt&Žlü¤ä¿ç‚'çG1<+O%ÄÊ~n,Ïœ‹«ðƒ௿_p=ãB §d¯™º”$žh(0@PÁÆÄÿÞ{qÈ/ª-ÚÇϰ é4 7°¿›u¸)H] uà¾@w;±@)΃˜ ôÿ§úû¬!¶½òÊOœV^Œ‡9€yé-RzpoyðZ˪Óò÷^d€uÇÇÓ°Y+߯¤1¦ËP4~©I"Å„AÝ;þFÁqŒ8 @PÚ@û—Ñ—Š^`º.¾ò‹ŸùÌg?ó™¢AÆø55åné9ÊMÎBŸJ’…F˜OÆ“ñ8üûkxö·Éd}Æñ-<ÅXÆÉoÄJ°™ÐÆ Xʯ¸„º‘Ä÷‘ú¹Ÿ×lË„ç÷ÄŸËB x|àÊü:Çéä:€« à+4€Â~} @å¿PÀ`w·•ÿ!ÉÏd'o.¼ä®¼ô>™ÏÜøe­©¾8:88X~âÞ½–þOËÏnq·£ÑááË,^¾wøòˤO •U*¾ô”êÚzܺÀÁ«Äo4 ÝY’mB™ù‹° HqçìßùÆ·¾þõÿùk¿'ÉAhþ» ¿÷k¿VÈ Èa&0Xq3 ¨Ñb  @| ʉ–v97‡ÜG| @MÊåtå¤rÑd¤ •¶¼¬§ðï©ÄèBpùçÛ½#P(Mv?e¸à¦ ×~ O¨ñ[€d±xYœy›ø;ßúÖ×ÿà~ÿ÷ÿ;Ãè; IDATðµ]ý‚oúù¼lª­4?¿q[uJ ñÑÒçâ Œ^F@èÈ™+>÷¹7ù¦Ï½ù¹{,–yŠ¢ IV"#CRå‘ÅÍd„!uûÎÛáwçÎmo(ç# ß Þ¾}ÛÎi»X?áñc?öc¬±š’Å-òĦ‡2*¶á·gÙ¹µVbÀˆû2ƒVHqÄ~§Þuÿ…†!-÷rûÏ2P÷{Ô*–Ãspt#YJf£Øíb@‡`M@.ì&¬èUâJ@øô†€®Ì-íbb¹=zñet/¶î–^1Ö ·tê[o ËœEÄ8(‡$4é˜ç át(ä aÄmeˆ•¤ºj™}7⻣X@73]øõ%I)‘=ý鬢InOÕ^·Ø;1¨¸(-œœ¢w\MÓ}•´ì.iØë‡üI1uIÚÈ*¹+pÆð×z€:ÉèË}‰#hF'A'ÙŽ3ï0FƒÑô?ÊîQʨ£_ ¶dÙÍ%T¥.ás¤Mo Ÿb$¹¸ôU° YmNÛ”+j§MÌQƒ1¥°å–hEéG p¥xO¦®V3Û&Û*v(V:;ËL«pÓz›U¯ÈZ‚Ðy4hÑvÖô+q tdôí;Kúƒ.H&‡%-¦š¸Ðã5B󈸔›‚&âÊfeñÈiØ\“Ï!Ëx•Um¥¢tʃ(fà "eå§PX€ÐÜ!б™“+`®E2ƒÕÖo—ÏÎ̪P$³Ïžz“›‚:Ý I‰‘#p[Íl%RægñÀ¨\†uçfDih@f})Ñÿаë¿`…@ßT¡îNHIã@ʇ;»ÈäêEî(Ò…+"Ô GRª x—Þ¨lì®òõI²OÁ&A„âDòíº AËe=ºlND/8 àFü‰¥Ž[²|ÎDјõçØ¿ MŽpÀèv ùÏ Z0ôü¿Þ³¯ý:€ @·ÖÖX‘{͆“(4âMÆêEoIAe Å‘´*08•Ò°¨ ø\!ò"I½Úá~Ù‘DH>f£–Êeáa2nOÈó™,ƒÅ>éÏÉ‚Ùì¸Ãl…a+ƒ.QgŸ¦êE—¬H£¬T@€p*Bx£uC }7zÀ*ö€Ž×Ý*‘Eã ¼ a~.;Ð"gVxKψ~NI¬,†§Èb°SÓQR´$¡Kü%¬„Á¸¼·I£ð»ƒ¶Ó2%™(+ÛÌ©h™ŒC œ5—‹͘|TË„YúMkîtÅ‘ï¤g†!d€Ó íA^p àÚϬRÂJÀî¥$á/ñëw:Q}%€,È »ƒðÛªëgs;­h—+rƒ òÔj`¤VchÀйþ&:ìPˆ…nÀ:€• œ æOëQ˜=U3)äÄ"Ë0źˆ­qÂ5œF…‡±eбÀi üx«E4L² 2-àq!&yxÂÇÀÇùE@¢ð/y6൞X­à¹N àpËUÐZ*œ×½^:2+úrV¬Sè–ÒŠH(ÑB¡€¢Zÿ/)²åR~ÕzZ¬Sq¿0ÉDÓ9,KIm"2TU–D-cúçzó¾?²-CéªKG^SeYŒLi¨Ì Z6…ÉX/MX©}VÜÌp2 ,¯@ 1*Ûýà ÃBȱß1Èÿ;Lw½×¬¡Tx:p‰ß‹ºÒN?Üh·¦-ð ?(E)z P>eŒÕÑyu¨Ã¥¦¼Uqz¡gCDHB YÉø$¡†¢¬¿ò’8µ½€¾â/µb’Y¦“0S'#Z+8„Kk¥Jëw²‰ëHh‰¿Õ´ 2Ï$"™KÄß°vp½×¬¡ˆs­¡]ŒGdZYŽ­^ÒH6'e$Z`¨²æ°‘L%÷Oþ[³Ñ¢&«¦¬Ö‚SB>–6ÿH€”Å’‰ü¢¦T2˜‘R<ÉBV‹*HÓY7©A…Ù‘¾ZYP›¶A¼ùj9'šD–HráR‹°àVp—B.$;sµ•Ö`oEHMp;› "Æ¥Ó€ž´;lBh¹Ä: àZ¯XG¨ã~NlÁަõ‡ÌÃ/ÿì/òŽ,ýƒÂÄ…’ÌÃÆö£úºžsñr2çT*{“¢¢R }2QxYA[H.ÕÃFG(O‚‘±æª>¡JT}2¢­Ñrt#ÉYS›zN‡@F *êÏ æ ^d¾ Œ·E°¦ëÓXTñ2±Pÿ8@ lK¯¨ ¾×`á0"ð¦8f à:Ϭ£Ä]qËhÛ°#%kgæ¹T¾‰'ô‘äì¥3_œ‘Ž—HŽð4 Zó5uoðýÕ'k)ç븭Î}{`¢ñ¼Ã<7'¡•²3QÊ¥Wx’Û£ æúVä—rÀ‰ªPêÌxÀ>d>/6C`„0  §[:vKÁhœOsü~° c[†DÇÀ¥»ÎëÖR`‹ƒ^UóÙÔÝNiz‚Ö%V9Õ‹ý@R¤Ϧã°VøŸÆ °âx‰ûaÑ^Y㉅€êù(FûjMâ®Z@Ž  z%Ok"£OTj.ñ˜ÒO°Èc““l_w<ÎGིšiv¡›¿TQÕ¨[¨:¡ê*ÜžTu^¡>Í’ kY>Z¹a$„* ›,ÇH¤®C+³ì,@Ý­ 83g€ÔŠeBˆ5×YXKЧCÛÂÉ”ÞùO¢Ju ·z<õŠ«]þ%ÑñnO<ÝNÇMû?´‰\`:iixŽÚwOYž¨Ûë¸Тt4m¦Ó&ÆoSúØÓp›Â;Ýý-¼M¦ôóÑáqŒ—fÊP§cS?Bzd›5ko¹è˜ ´âE{ª¤¦÷(O uö &aèç͉Ô(Ÿb¤=9å‚< ×=l6˜ìG0©uÆ•L¤†aa@†08&ú/€Hp àX1€kº`= áëÏhV>•O¥ÊRöÆ `]7&Íݓӌ[*jZÂiÚû4ÒmxðÔu4õ\azä½³€‹ÀxÒŒ'!½‡îþvßÄ|'ñ=<ûl¦˜/"&É1|2ò<žÃf¦Ä®kàÂV¦‚ªŒDt$½‰fH¨S†Ë;ù “ê ‘¤T\ºZ²„„AÉ2Iºf‰ï]:`ž ‘0·ÈR Àsäâ`‡ ÀN3€cçÜŒuë)UؘgBã¹TDÑA @] ‰\¡ÃiâÕñ¨Ê&«æg-‡‹'èÁþ„ì‘'‰§û û›q ZO^á: »ã¶ôäUÿláG…:hS¯A´šis4iŽZ8­ÇQ+¯9 ¿Iëè·•â‘NÇ>ŸÀëQø‹—eˆ÷à5 é§ôœˆé$¦Âž¹ÞKœày Ü! â™ æ ³˜Êñ‘ÞR°²²^ÒЛC$ü€(›%!×"3CÀIyôŸkšQüË<Ö0 o° ó1Ð1+üËÄè:kéÿx‰ `É €Cp­×¬©À®Àz×Èx*Ehä&žE¥tþÖÄ[ Â3kчqÃé¾J†xr Xò¤ÈŸl-Iy² B³™ù=ñ7Ðᣊ}xV=Qøò¦˜Ë8–ÜC;®:—8§ùF ¡LAš|4°ÀY\á¬2ƒ™ —¥˜pªÇm83ÅñºDF¶°œ ®ª¥³,ö ½ÚOÍøãÝ2ý0Î’pm׬©ÀéÀ.P?nçRÅΧvQî+æP:8²>Oÿ"ˆõWÉɃR°ìéÖSvK¦A]nNƒô” ¢x=¼fŠ'²a1ž*¨žeL@öéÑÀÒj¦¾ ³ö{Õö<HU{ú‚[1l2Óñee(tq?)È]IpÛç.AXv&˜+‰²º~ ر!èj½?0RÊ7w׬­# ozU: RžGýÁ ôæÁ!Nš˜nçâ[Ùïe6 d¤¥ >è„!€¢›h†~p4€8ì÷×À ¦ÁÆ0%ÒžbàG”óâ%¾3%ý>ƨ”(iÏœ §!¼ïäh¢¤b™[ASy¥&߸•ž™Á§„´@.@œTÇ…+Ì( ‡3²6MÕVþÛÜ“3(Ô$"…™ùd¾Ô:@²ÜWh ŽÝuÖÖVê¸%˜8 ÈÞ96tf~˜hJêƒÍŸ=q^À"b‡ìWzv'ì³ËÓ÷A·nü JD‚<šj 'yE¢ cþIœ ˜Ä…Ó0 @""\â (É¥¦0•ì<êR;‹1Š c¢Û-ic™‘³KéGÔ\³™84Ó‘bQhÅïþî{ïýÛ[”¦Ð ÈþkÊÒ°Ì"!rCÐf\#u“¤¸ä±¥{t€3&rù –é Ž ÜÙ5^°¾ AÃÙÔî>'ÇN`ŒÌ¢«3« ‚ ¸Ñþ6 †ö ’Ó*¾VQØÂš8ë|`N~r$À ÙN‰à‘tY™z“½/1 ,2ÝFsºáÃÚ;!Y5=Zp¼hLësÔàüˆèŸé–(ÀòœÞi BŒ„Øñ”©!}?™ØêÇkœ'íH°V¾»Rí4 Mñ=#’KÕ¥§Ï>SºÀÀÀJÔ$óÍû±¸9ý@û‹p©‚8ñ$9G×J@ÍR°Eðôe*ʨ›%<Â*šë:ÍrhEö {Iÿ+¿òÏÿù“'¤ 4fý\-RóyǺ°–‚…Z!3[@ÁÛ] ¡Ò,@`Îÿ+ûϼ–ë6QäŽ@t ãV§¿‹t»@nª³‰³«ý4…fE$jVO)mÉL`m ÀjñŽäc•Š«d }…3êJöàQ«¢¯Û!@:ޏ¸»–³›(v Þ/£)7s[+ÅnTg×ù=žY%AŽF„`¢'ÏT #y• ’ð·Ý%VPF¤NçÒ¼$d‚¨l—u6à5Ó6R`w©±°yÁg!yíÿ%ð¨«í(Pá.Ç•ø¡C&-(©+_g|‰HÔ=ƒ„*L‰:)­”¢®hPЙ)÷W8K[™$ÎÄV-©ZM'R;i°H}ÕØDßMä|­rup;ú°÷d  œ x 5€¹# æÄ0tÆ(L$¡N¬W¯’r%i™ÈÜɸ=ðÌ™”ºãÀ+‘ܲÞ‡×É-yUÁ¸\:Ô ºè Ï0AÓ ª"¦0l–)±Å|‘›.|R+›>ã’f!ˆ3QÙëø‘@|æ-k¬ k ¬Uh'ãÊ&uü5 »¤³¯á:€Í±#\–t=¼„¡ß, kÄq^½xõÁx¥£ìÃL‚‚pf9 z9G!òydBI8…$_ J³Œ!£•S†¨”s²4NæM¥ŸqÑelÅ*²Çæ:“l ËŽ›ñÎdéóPg.©ã€â®À³l¡—Ä6<·¼jDS³¤ Ñ†^Œ]¸v³›)x!褋¥är_…8å±¶À1Ã,¨té%a)+PÜ& ‘¼Ì‡mh!W—R±tÈ,S`I[]M˜#eS0—‰­‰8WF•˜é_+ªdIžàÑ÷5 ¹5Îì »~ë6T"àY€]q„4šj¤Œèf¨e˜ fÄ3¤êÒ,eBSf[ =ä鉬B%Ó“aþ˜Tdç’»Š–a9öÙŽËT•,ÿÉVÑåî2úL¾+À)OÙ;Ù³7”ò7kÀ† @X ¸€oÒG]&Q¬+ŠB º»\ä=`YZê 0› ÷hŠ™ÃÁ|Ü„*+£òµØÎ¹ÄŠ+éŸÏCµŸK'M•’y†HÝQSI×Üí‚ôluM:‹ªŠ[%ì£4Eì`I©ûkÀB²&r?ÍÑËè#¢k·`SÀïäø\‡½¤­Nª \.ŠQž52IÉ•¢¤ Ï"¢A©™Å@'; 'l–Á¡—TG¸œÌ f†seFÞ¥ #*Ê”8­ÖŠçÊÒÉ©Bâ.­”ôœ,§6S乑L2ØY¼PØ1ëüPPxBä-Y7Í™Ý-HÓ?nríf6U`G 2îÔEÿ’m¯ Æk—¤Éؾ#ÏŸ$@´óonLépºMŒ8Ñ`ÆtçËŒÊäç7(³ygCDIw™Ú˜ŒM4MöŠ)è´¾'úÁ“Ê*%û,aŠ„Nf+KdºÜ™T–0È—CåÚù5`û¥R¾•ÿaw+8?0e~¯cw=5€ú˜†¥=ô@\­ë;(gþËK¥^*2p*Š+ ç×ÍÙ¥£yâÊû¨‘B†8„jà$îâzUKt¦,U)Í›ëlÎN"*u×õ¦=È¿öŸº~iÌ5þÈ×àH®8Û>¢y-_â\Ã"ý7MfC’ÿ¸—à5[°¹€³NޭЧYâqœòXP>ÜS¾Ãéšx"fû—YÒšÙïÒöuÉãm”Øfq¸é¸<…‚erË # Iús^’5}Ÿ/‹æ²–;Jjüu<§4‹„1ÜÈâ¬Q83´–¯â £ò4Vlqÿ e]ã ¤|š+;<É”N+¥óDŸséä“:éNŤ£2õwíá±(¸w3œþ¹gKIvDùøªØ@·Ç3,EîBS¨ì¦ÎÙ¥°Î8“pDTœýn_€Nv¾¢tm‹ÏsG«žÌÕ¦Éñ¬ò»¨ÈÃJõ9®âØÒäUÑÛÊç©ÒÑ«!iñžß*VçHɇNŠiäGlft +ÔFôöü Ü w)ÄÎTMÃd ˆõÈ]Ó°eÄC‹3Hƒªl{'ÃU±â‘ÊòP'd ¢8±,V:Í š_mC\ÎŽjÉDs$í¯¸ÜÏB·ˆ•M¤‘æv26OÁî¸%ïcW䈼m÷¥—ÿNŸèÿg×nÀ Nvr°%XtÍÀ~‘P»H³…DÅRa ä d—Äååž]„?§?Q ݇”h’¤Prg8Ä[wÓU…UB¥rS“«¾ùò‰OM…š#Yî°wtBY¦•âãía$«¬MJèºBÝEQ5·É¹T ¦òèâ)w6`áü±_ÇþÈïã”È‹pÚùu˜þ \§Y€! €™ˆNœ PDH»¹¥âü™þÕ£T¸'ñ鱈Ê@¡#3ME ¬ȉIùBH}Gº‚>îÈpÁÉM» Q6H *$Ÿ¡|9àäiŒC÷V§Ãr}ÚÒ1®scÔJÑéÔv£• ÿ˜Ý8 ÿ£èDZ<…Eïwû9KÂŒü¿në)0 àøs`gÏhd÷PO¨wÖ.ñ.“gÒ£IM÷ÎFw@5Ž€Rejm#ÑH‘pô-nR ÷vP*{€âkºb’¡cÉ0€öa®IŠkË—ˆfïx#E„5x¼{<Ü å~~>Ô1×YOÆÛÜÅÍ¥‘r)YTÔÈ˽¸rhölÀåYç4 0ñ%aÇÎ \O `€;E4Dt¬ñpPqÜv€ÓÝÀNíbЧÇ=ñùܳ¥ãu)UGÆüŒÉBB„ð‰ØB%¹*㟛‹wÊz:Ç—€8ÄQZò³& ˆád»+Óã• #dz¡:>Qõbèã\ˆäág:ÍUœë¢èÙé?îiÝï–Ç)"¥ˆŒ5„$\dѼš“è,e/pÜŽ¯õJ@&r#âU˜Kèÿz­¦Ä=K5px:0žü“0™ÜßÑŽPŽÄ¡\¥tvÀ’å³Ï™®fR(H\L׿U‰•ˆ+õ9Û´Þ '|\! y #I¼”aÀ˜IS €Š7´9‘`†ê›žZÜG£ P!<*â 'âб☧’sLÎG1SÍŒ— ^Æ\ýkÍd‘u‹+f,¹@¦Ë¢p)‘›!¾ «ƒmØ5Z0Lˆ~,mÒBRô<™{ sšxRˆøV¥‹T©1'Cn3¶ó¹B$Å4c)Œ%K^$R\áÏÏ•dªg4”X«.NuhÈ‚œºlRp;1P¬É‘òÃUwÔâ<ŸXÂAo£-F IDATmƒ“ø÷/QÇ"Ñïâ™O0à䓦Ngœ~JˆY¶mæØL?'˜¦í­‚]÷| ¨Çò@ä‰üç°Bó »>ë*<p¹Óáì¿´'Ó.“‡\º’§™Òã,@vÛÆßä²? B ÝмÀ9GFˆ«‘†Y¦k„Ž©Y 2fõa®ª.¼–hδ¸´Ï%’ϼòA¨3YÞ“›ˆ$ÑjîTŽFÃWM"•i5\€£7°÷58 Y€h!@ŽYÏ=fe¼®·KcÚqz†î†RÌ0„T(¹A £(ËÕg®Cä«6½³C>À•r!ê\ºê±˜é55VLO¹ ƒ„^ øø-€EÝá ããDŠŒ3´²`K.:,iý0TfæØZ!ç.¥ŒÇÔéY¾EÉëÿÌjƳwXIœxÑ-^†3Õs\Ó¦ËxdÆÙŽoJ½“¤ì é hþÀÒ,‘ ´.±xz6àºa×eÀ` ..Kµ#ŸÊgx¼ûJY)»Å%}  f‘ðä¹:…¯am@‘ÚŒö"ÆB¢0*—6MHö$y›BPÅâè   ÀyŒ<ó‰«|¬ª8UU–Š-»ÏpÅÓWéVîÏ1œçŠ·1ö¬<VBШ0™ >ðã˜Î„EL¡Ãe3EÖ(ú3Q,ûrúk@ÛºÛp×dÀp  âàs`DÇmË©ø{Ú¥Z(HÙ’ˆ9¥$bAQb*´p·òi1úF™$àÕÃTT‰¶êœ$Û²ä [jñ-zz®ÓNLï:ýZ>¥³¯@¤oæ. ÀN¡•€[až‰N™;â&Ãç ¦šk²?¨F!ÞØÈuk´=`ï¥6÷†Yup’,HÁf:ómµøu;µHºZ Ádå•]îkÀŒ~6àµXp@|LFÀ²CR­ð²:è&’L°aVŒëg'#¢gîœéœ:"‡#ŒìâQ5_KS¸\ªtÌÐÕ²3=‘é§L'u‡uÄZ™xÝŸbH´T¦u3ýFë.Éx-Ö\D YßœÈtw‰.?Þ-‹â‘™hÉeF’+à1U:ƒ,|m°ò4º¦D)‘šbw³”.Qæ7å,9RlUµ¹nð5ˆR&JÑâ²UÌúLw<1x`٭Ϲ\rgìSŠ$Eΰnñ˜ðÓ™<¸¼ÃAw~à" îÿF¢¡ãqžö€‰ÁÌ(ˆº‚¾ÞƒÝû:H4Ç>ë`.ܽ’žœb#§¯‰³¼Å‚‘8&PKåš“<êɥɨðŠSe Çét½KÑèp°*é-z¸ëdâW• t.u³æ´øÌy9<8˜pè;ƒd:–wÈÓØBSЕµ*gî¸p! ÌtÚhøÏîmö}>ÐI²‘7q´ô…ÜAR nά£‰ÖL%Ú“K}`ã±÷ ÀÄi}»³ÒDƒ‹ tad2Ï4Óƒ£ŒÎHGïo£$4õ°g‚mფ\H»ÃÖÒb+jÜì;øÆ¸ß³ ‰Hã·‡]Ÿr»hØÖã+¿w£æ-¦ÅéÓ¸q5f$÷»®e¾"n ÂÒתí KD[Èt ‘NEFXØh†/Squ˸Uë-¨!TÄ…lt¢=ÁºÅE£è¾Ò}&ÚLXÔ¹ìõ£n?Ê3“iM1DFÂ;‘€PÛ†zUíLÎ;¡GWš¥ÀaC@WÄßvÀޝ¸˜P£  ý_„ ÁZþ…áÁhöšÎÎ0-z9øÞíÝ%;\@@\À³ôέGäb· B+×b?€‹)aàw‹+ãÆ`þ‹‘ƒÚËØo2i€À‡¿:øñ€GÃØ’=s¬{÷Áu…Ïk M“ß&H{€g F@>ÐoêÝ:EËkÚüna…ß27¸û\P¨ÂñàÊ~%ì>±¡[pâ×mÖÒÄëBû×&0bzÔþzYìÝ×¥Âeìk )c´QÐN ,h€ÐZú?Ž€çn} àØyÆq|&NÞýuTpàÕÿpBH¾ ’×–ø•ê-Ù=½`û)Þ]1^Oú¿¦ZËõ*6¤‘Në4bG=ƒdÕ¯‚Â:'Œ€K˜@KüPØóC†"Jb;¿ࢠ@”AÙ­_ý `ÀH~Gëÿ}#öÏ+ŽŒ0x5æÓë Ü©rš×kÕÖÀ !ÿéµj™¬9 Ï‹dpæ–Ñ×x~ŸìÁ z7៸¨PãŽ@¬×;Ñ#á!hå„ÍÜFÀ©åç·…QvñÖ Û3€Ë+P`” Cãô«qig3€c`<Î×ë à,œ ~½Î¸°¿´*¼S 47-FNŸ¨F@ú4@`ìÄŠ&wÖ³V˜0àrÚÖô„õ¥ë +úÓCŠþt—³à ãKT± ÇFÀd|á u²@há®4?Âwþ̰xnXqý5€ +õ#Ç[µfÝÁÈk.œØÊºô6˜:~ö ›;*Æ^ôO!°%¹õ†õd÷M§îϯÐéºGgM–xlž®'¬‹°wg~ÝéúòÛ<,üÁÝ1¢”qûÏ ÂÇA }FfY€™2(q@k¸Às‚"Ü¡¸Ä@m€†ìð:€‹+•oº…lbÕÊ®Épë Àâ>™¤à™½’¼‡È‡j} g­¢ïÍÄïªC1ÙÖ“n¸0,]_9û`vÕÁ0GŠ€ƒ+2BAGX©L¬”N¯ƒ€åò,êEj8va©Ã# pKÃvzàâ €´X… ™€_פ³‹‘اDÊà†ªò=ÌÁªëk§ëe8úV¬®³,bØC¯ºÞ—®—á ¬_ß°"þEôÂSž\¼ÄCšÂÌJÙ/¿&Ig€ýÆ3|ñì0—ØœVv~ÀZ ¨‡ýê ¤ªP À± @2ö^©Ûwë#º¡Œã2Àpé#ò˜MÌ~Iþ”@GXÁI£(‡ýãîm¨BªEz(€KTf%ìúPó:—2€ÄˆÜ<`ÏÜéu[P*úP™cùÙ @¬1Ú!Àbää¶ô{%ùp#àÀ°¾˜ƒ`º9jx:èX¿|T-„| +G Ð4 ÄGã0(Θ]Í@ߪùÆÙ£ÃuØN¯؆P©!’¼Ðfj«¾O­Ãê@î¦B ÙöÓ€O5ì:NòÑ®|sj)ð*W8ˆýÂ0?Œôýo}|G¸ã³ÛPâ×€šµZ×ÐB …Ö Ñ3„ýB §vý5âñB Ǩ%lRWëd)ðŸÿ³ ¿³ ö@†Áa»¼`+ @-ÖXË 6|«ÌYû¹ `Sµ#€éQ/b쪓5¼ê²là®W±ÓÝÔ™¾›"¥yiþ“ ñc þ AÖÿx©OÛm `+ @Ü4ݱž\= F@G+ †i¸uL1m5€kù1Àõ¢$r×«ØæÜ!A\²øCÆ&ÀÀ% ëí¦;÷ÿçøïþzŽÏñ•ƒÏ½óWz¯Gv."©|(œâ#pÊcŸ?’‰¯‘Kkx-Üeû€Öêùû?¡ÅÔq<`á[€{µü`Û fÎÏŸžn¿ž³“JÜ+Zÿ©±ª8ˆ‚ï7jcpôlad¤<íÝÆîÑ£ì&C‡H"E·X,Òí `3Å8j{(XÐÏ.º' ¯KcéίBé¿:·££ ½»€SøühÅk+ŸÒ?ºËÄuÜLJÂ=ºâÞ[Óª[w„‹ß»ëè>Ÿ¯xmÝá{OÇõRçä¹Û?0®xtêÝøð|yvöpQW§§‡ç§×ÁUêÖaXSïÝ®¹ÊãóòìáÃV»; ßóRnÙw½ šb Ó}‡ç­¨ó ¶œL¦ÓcçÊ“¶…®ºÿ€ü*|ôŒoñ•ígµÆ/Mú`A:~±á!ÜNézÚ(Ï à¦@B›ãíü[/RKâ“q‹Ï-BŸ>ZñêS옟¨ß¨çô$Hû–øpÙ~Ã\K­tÇòe=D§Ü»aÎ ´@àŸ³¯þ“ÙÒ3ïŸ èe‹yø LÌüÔ´tºágzðèäÔÿƇgAþ·¹Ï¡I®ÎùÅ;< ºÒýä4ãNT„U¿L$éƒéúEJ=aºošàÒßöâß}?Ÿ@hoý9 Pð“€çêzœ¬eUe6úm¡0$Û ðŸ#ÁÏ[|ö¯¨÷«§ÿ¢ˆ¡>Á0ÿYjKü07èÏ¿üuPý¶Iñß¶Hyx~r¥.(Üá‡×@ÿøJ3m;ÄNp;;Ø`% sÝa6]Ì}õçãÃ:Èÿ“ùÉqh’ùüŠþNBüc¸ÑƒŒ0Ÿã?¼ž`è ùÏOèv’ûGøäd0d£ÍO2‰æá$PèüD2øÙ @ÔŸ|VÎoã6—¯¥G•cOíÃ0ÿYj €"è5ðu¯ÞøóØé?›È¬“ ¸¶I¼üoèôøð|.Hê©ÿEg•m£úALæä•sÝ!*ÊIâ“q-•ÒÿãõDyòM>qâ“ù½"áÇPˆ¿Vy×rkG¼˜y¤É:‰ø‡×“¹xmßK‰í;À¼€k€K‡@×Ç@q£ÇùKþ—øèI Àù]4ËÆÑ·÷ˆÈ¥À-'¸‚N+!ÛR<ム›ÏÚëÌߥÆŸÜ‘×Le–)Ç þñåJÝé‘É¿´O¶Ë4vq•[+Z¦ºC]/˜y¤ÉÊ\Û¬p-~>ßkÿ•zí¯Åö6rÀâèÿ úŒ€dÁ0€_ûÛ¥¸Œà€qÎá¾´Ÿ\úÑÀSw¡¯á þè9ÜfeÛ³~¯9yú¥ž”ƒ_H0çÄóÒÙ¬$àÒÍ<™ì’r-©|Tç{&ú\>5MüÏ#fÞwÏû#Qè¼'Ò&×ùŠÀ0/á·F3”¡%Îñ ïðáö<¢6¡7~X ¯>Û`­ÀŸI# K5 ÿcÃüv ~Sð„88è1iÇbPvºm ɺW•é þæúÂC¤ÀL|å9Kf@æ3Æû”²0EÁD0 Û?ÍæÈ”Âû\æ< ûJ›yïæënO¤ù,­û…û¬‡ ‡Á4ɰÿeýÖF¦ Ü0? (v¢u™!€kâ°~i@Ó,ã1ÀVp9€+{€{ŠW  ìˆ, Ìó*_™Án 3øW©f/GSÁ¼kÖͨð!uü‘Oà Žü1tæ=ÇAæPŒ™ŒNtØ-z¶ÌD ©g1d†m}ñ>[èú‚×H&pŒZ|‚mæÜ0€°¢ç!@¢8öøUç´ôßÇKäÚ°´6€%2€:î—?¤¼¢.*Þ£‚ý½`“?ÂýÀ°ïäT@縙XÍûˆÐ¦#µí2H1s7°ÓGrE¨l̪#¢Ú Åä'®UÕi]«a&^ªoV¡=$©Û kŒ0én0Ô#“¥À†ûØ®Höþôï 4gvÚ` ¾£®¯nw EÍH¿Dƒµˆ'jîÒZõ®I•ÉnE˜@¢ÑuðJÀi¬Þ êÜkz]i-›\u7t„iË.ëФÒ1-ØD¹<¢Ìn N&ÞÇñ¯Sò¿þ[è?ꎵ0hÇZÀ=¹¢ýqt‹îÛþJ¹_W¶Õ#lªÁ扴®©Áj„‘¹‚'Ø×]%´¥[pëóÄáP7‚$ÎÝM«º³–øàvÔvC ü: Úá—NŽôïOw…e=³í #¡¿­é‰k_m¡6HØŠt¡Ñ¥*€`œ Òº@ѧ"(X—¡N\E¬ƒÔϪ’:6U™rEoL¥"ÊÇJ¾&W†œ$ Ü c£«*|&p ̬—ªC?lY‰Î²‹í £ìÄ Ù ÷P@¤ÿt®¿e@ÿάÖä4€¥èöQMô´®Då,€e?Õ5S4eUËÂrêWP*Å´àÂ07Á¿ìØÈb“`Vµ 0±‰æu1j1ãÕÑ€9äÖ U ô@Z»»úÂÌz©:ô©ïÆç5-í}'@ê2ëÂøÿ8³Ü7p ÿc—ÓŽó³NØb¶í=üå]×Î&êzQê|?ÓŸ‰bi_Ò,±€:™¼! f5ùdiH»î(¿:X[Èä×™÷ÆÁ©ueà@˜= q%P1-€Ø¯‰`Glµu™uVþ#à2ŒÿÛð"Ü5 ÖdD%YPìj°Ú­ÍT[Y+‡ÊoèÀJHjÅìSË]Q‰Ô*h¿îÆ0öí&Øn·vħ kKy,R'#Ü$}] $"u Û°+6óQÓ˜÷ @Ë}þ_ÿûð¢pkØ`ÐQ[±mªÂÿµ¨(hàÈ£õR…H!zÔE.fEpB|ñæÿã³î"îÂTw²fn€žužX¹8!J— Æ¨’Ô";Ž 2$™xo¨†å’I–Ö¡ÈP @«ìÂÀ D{‚•n2Ngü -ÿõ7ÿ…s1<^Ùà9@ò-@;Z8< €€–0¡\É» ¶Û­ñ)ÃÚRž‹ÔÉ7I_×ZÜ Ÿ~Mï„ ]téëJÒj‰V õÅ“šU(ë=€Zu†‰¬;YõZ]+ ií5B¸4 €Ðo‘î-æª S,»g€…@Ok@^‹ZRÎé&¯“«€C»¹ “?³Ž@ÌB0„„˜WXdi¹*{ €¼Ö+ÂÌz%xÔ}E¶Ï›ZvÅ0ç)€²,ŸÖ:€Ò ${oÈÓ­â!I™ù¥£tY î%ñAÁ©ueà@˜ª^`¥cZ€’XvÄÀF@'–猀a¯›È‹å²paš ÀÍÔƒØ{ @µ›`»ÝÚŸ2¬-å9°HŒp“ôu­Å úé×\ò°ÔsØØ}>ó:{8hKáK{øÇ €ëö‚ÎÐö€äª s,;ephèxúGÏŒóý»|»¥8¤²ŽÈÍ6šŒ‘ˆ¿4>RÙÞ€J…h Û`I{¼M®9äÎö™Íkèµ^8fÖ+Á£î+²%xÞܰ+6iëέPx§}ò FKQ€¥À¢±÷€< Ù*n’”™_:J—¥à^Öç»P­$ü½ 'YZ‡~ Û°ìˆ €¾ôÛt®( ­Øqþ2ž ¤ÃpþOÛ–þ9ìÐHîIªY ëj寴1ãOƒÞqDÖHý ûÛ&l³¹C‚è]#ìÐ1íJØ(ýH ° ‹2‚¸ãÕ•jYOª¨±R±™Oí-+’¥uè‚l ž‡YvÄ»‡Õ–`Z(ÌÙ š´t]¤ö" RHãï 쿨j¾šÙ#‘÷Hl=òÏ‘ÅäÀq»½Ts0ñÙ½Qhƒo-c‹¾¥RxÚ‹OD¤h˜G-³® n1![X'•!šÈv³ÞuGÄ÷’ø àÔº2p Ì U¯ °Ò1-€Ø[+,;bÀ¥ÀúkÀTPcè ôßÍt˜ú0àóƒÓOü¥Š?¢5ôx‰šüÛ¨‡büqpÚ;ćÏmÏåÈiŽÞóèJ¸‹ØsŽ˜vxFkéPfLs‘"Q&ØͤërÊì¶ kKy,R'#Ü$}]K±7¹Àk7°,$è\àé_ñ¡Ît…::Ðt˜<¨örðÁý§OZ¢no÷Ü?}€ò±}Ϫ*~ôG ”ÍÞ³x®xpZmØiþõ¤yÒŒ›±Oü8CWºi¸ÛBûãˆÄy`Øm$°4˜†‚Ìk'ÆðÆtŽA“ZÐlQ ªÅ‘A€Ý€›`íu®K0‡2¿L'‡ß{ Àµ°ìˆ  æ!€ë^Ðs6`Ñhù/ÂÜqøé°3²Ô0Ô}ÐÜr¿9õÄúàÁ}8ßð ²…÷?ô£ÈZÿÖ£xî¹–EGÁ8yÒ<ñüæÁiø=Àñy`4•'7êžÎq|îå ì+`Uôj#ÕÒh¾Ž 2”Š„oÍÃöˆ5ŽÀr0ŠE¶Ñ¤ Ã#¼qQ `1ƒ¹ gNà݈æ¹T+MØàmrÍ!·©Z Òúºzoà@˜Y¯ôä‡áy¨`GlµÜ¬{@çÙ€QÄw¾ ?¦mu-K“-I9víïßæQ¢ÿ Öö„@Ta€ _‘¾'hv ÎH-ƒg ˆfü—³`¬šŠ‰iÀ¹D£§¹• soX7YZ‡~ Û³ì’ €­€f@O¡aéàþ鄃ÇIú‰¢ö7ŒWÛŒŸx&€+*5Ò¹öÄÛ²¼(•iiŸ¬c j¨€ã¦ @dÏñeŒ‡›#ÍÖÈUÉV³u˜lT>,0TH9"1KhŒ{DóèÝ©ð¯Å7‡ÜY½Øæ5ôZ¯3ë¥êÐÙ<_İs6ü » qÃÏŒ ØøàÁƒ1—gü€$½ôìoèå©X ñFÜ "ÏÑ£2V¢Ù06ÇÍðQŒÖN뉔 HEÐÛã’µ­‰˜X'$25#2ŽyU›tŒÉZYXA+"­ccj]8fC\ÉTL RÿZ€²° P­pËË0.Ó€mëœÞW @Ìtiš1ˆož}¦u?"4lk^1¶Pzûèep ³Ð*šv‡Âqr ^¡–QWÉwür)}õ,@ˆü¡Ž 1€¨ÿ9³;ÜmÖ–òX¤NF¸Iúº®Y«'u`3 ÀÙVï°Elr!ŸàòLXÒ+ú?íÔøïþæß,üA±f‰@­"ñF’³U˜ÑÓ~b€tUËØMXåUZFUUû+ú§…Ca… ›P¨*1 Ðm¾fà’£°T¬`ì”ø”–Wx¯9 òØS”µB!•*KðZUñ׸G4Þ ¯ñêP|sÈ­A 006ÕÕ{ÂÌz©:ôA¶Ï³ìŽ Àù ]²À¥ F@ßJðq|Êë]«Ô¨HwʳÚ¿â¥ÃþǼ$ùT7hÎÈ÷+^ÛWcÇù0a·ƒÝ *¡ä>¬(6I.&EéÌ(k)Q´Ê"1ñ¾GHYS:Æd-€¬Gލב»¢èÞ/ðÌ|($©óßÐ Ôý’÷Çù¼lë†T¾®ljbî ^±kìuäµÖ2ºªBìÀx#q׈'òダM¬Oh4Fÿ4çl‹ tÛ„µ¥<©“n’¾–ÈDlxS À®ØäÑ`r@þxðh]¹ {‚uîœgl¨h†ígðœ\ê©CP²"!PÇ9WlÅsݰºXW²`@ÄÜ[ÖM–Ö¡Èv-»b˜—Ò Øu.€ OêfO@çŽùÜPcpÙ€vö‚®ÕùOà­Ïÿñ+о.aA9Ô2®˜Ä=¢yÄÅN…×xu(¾9äÖ ˜›êê½af½Tú [‚ç‹ZvÄ€C^ س àÚ±Õü–ÁâàೄävŠ6€­M]trß›çêÌS¥äSœ¡à^(xè–?Jµaö0Ä•@Å´ó ÍWZêxjåNØê5ö°‡ÿéqþ±ø™0·KiWàü7ôWäRÿÄP}‰8Q_3^ÐM·l‹åi ôôÝŠÞND±k;‹jõ.Ùz×\Š ß86ê¹Ü+°Ð€Ì`ªŸ¦«YtŠ;Fv|±œg’¥˜µèÐÊíU>…‰k&Ç Iÿ.F“äâŸqB-žºÐé7«€@ý¢H¨;>œ ec—‘5;dàu™ý¶ï@X͵®ÀwZ›ŽÕ€"±tšm]lÙz¯KÛÙ€AÚ•Œ‚Ç»«âO3ÏÚd˜îêYë™â'‰¦"á4šdUæÃYÀª@~AÎCA®ñ?Òpd®ðÕ:ÅÊRwŽ ˆÍfì æ=^aô¿K6€îu=' wÑǃ×✞u\—,e§žk2€xŒp­×xüBBbm p2H&SO"º6dÆ8¤m°_mÞG«…¯.ª|Ôeàìùî Å,}‘FÕîé,šùJ3¯‹iÚÉB0PrÌRi$ÕùÊ,Õü € ¼À+ð„¢FëÑ&í~+4€jGl× uâs`ßÚ€¢CK†KëSD®P„@ò$Ÿ5\M6e Àx×L»çÆÅx·Â1MÞ¦°¯ø-@# üœ^ÀZAj€G¸Of¹EŸ«ìß!À°uÛc5¬XÇà›1t{TêHæðOíðÀÇŠaëYب,h˜ŽšÕ$wiÑ~MòU T8*@J‚ͺy[‘¦.V©Ø¦A°Ñ‡=8=.ª€pöXl„kW¦è ŠUºbµ„nƒïuä¨(Ò×ù¤Ý¨GZÂPó€5€¨«DÙZê÷ ðYÅgñ_b¡½¢lÚA@ç¹—Ä–NÚª -¹ë¬¨#{@´îù€'÷9ÙY €Œ /Û´Èh½€*hëËcèd5a 6€:žßJ€š(ÃX9XËØHzW `c# l¹³¬y.@påÊI~Þ ´Èsý1Ðf6éQ_KPPðú €‡dcÂd *ĺX©p­\½‘±õwŠ12±¸Œ¼›HKà: š 0 ÊH1ÜA@×:€ÜÉ@nýSç? αØøÝh+õ¹B/á_Å ôÚˆþ8ðoh XÇ Öh™‡R(ÌVÖÏìÝZ.Œ¦Öž°´ÞÅŒ"ät=¾¨„ºµ{6€Þujôýp|Íp2†i@4n`ˆë` ÿ¢V³Eÿ¯9 P³ †!_D·¨<óÌ„_ük/øö# |’0ñ.C“¹ÒO& ¦8à‘- ¦ï “Þiq3õˆ‰x`\sP/€è”7è@Š0èÁýp$ÈvÒ°Æ~Ã4€ãÌ0€w´@Ðíºžk9o ‡Ô'ãPÌ P ðGðíP>I˜"›É„@2†ô“Ƀ)QyGfÆÇV€¼Óâfê3/Ïĵ¼Ç¿Wò#À^º€ªÂ®Ù6Yðÿ³÷õز£ÈÖ¹î™È[ŸÙΛ4ÃZíëšUV—ugPV;m=³{D²¾Ä/eŠLnÕåäÉÔBHÁfý q† ³ý)±9§¥‚”üàOè‚K³\d%ˆ$¸ª‘ ~ˆÂE, ˆ Ç?vó¤#§è€ç åÖ9LÄœ±8©Rô/‘’€8­é_€ @D.Nœ°Wòÿw°%4TAÜŠ?Û–Áy–ºõ!Ò[ m¼¾èÄö%‰ÂA¤JÇJ 1:åò–1ÌŒx’Ü/~pœÚ°NZgÈ\€éâÙ¼5б.i¾O"%ÿ¬ ÿQª¯{>i—sîC!?r×Û9€„@|ÛâáýøCÊr—´·ª1—|"àHœ%ôQ'$)ò]Í MÿÃÊL%|°Ô¿prNÇÿ XÊ\€¨šÃQÔbz?ópÇë<ܸ_ðÏË#L¤Á¡ PìoKm‹íLj=S¿EyŒ ö>¾%=BÁÛG P$€d¹¾Àv‚éI\@=6óTh?HÂDÈI*x†¤Í2DÑÉû‡ŒQ~Øt8Î’ž™=uRŽàr‘eC o×ÿ}Œ\œbP®ûÙàˆæÿΊ§I8˜*Üš@©-bÒÈŸoy+n~£¢ÿ­òÆ›u^K‹]Dëƒ'Ç•ÄÙ†ŽDQ¬wAR)r\” êÌ$<Í;Æ(Éä´÷wuˆºÑ!ø\V‰ø`oî’¿o£€Ÿ„dP Ö\€ùh@8?ưQ€ˆRÛaÀGFü |#[[‘g&€ 3¸†&”Èž§Be ï Èy‘ÀMìCæÎê1`vÄÑ-˜Î4ÇÿI€2|ºñ§ !ø s¼õzž ÷ç‹ölOÁŒ²h(ÎôŒ¤Â5Æ¥=ØïC×ð?acL¿÷É' Ó%eÐL3êß¾îKí~È£©…„öQt-¿}ƒ_ª Šø@È Ç¡¥i}ËÍ6Jn¹%mÝ¿åX%oß¾A*Ьð{£âø ñ!×% $KpA>_å¡!P¥Ùwt¿á³4wrò‘ Xù~6ÄçØ›ÔT­Å¡¼É·Èä ƒyBéýÌÃ\k`ÜA*€¯ïœ˜Á“X’¸PÛBÔÚ\¤9'aû€ï­@gÕ¾BÛ’¡q.±Éù.Xþƒ%Ç›®H¾u`ÂBÀuÿÇê¤T‚6—&Úì÷Þ"ù²Ù úÉŸl¯—z–pÕHÞ?ò20Ð ¦þÏpòþɶ°Zƒì>@…K¯ $ž —ÆD áÍjâÿàoikˆÀ£xâ¶Ø”n.Âo"mTô@9ø&ÁOåL°ÌªvU¨Ãr„`¤Ín¸ÍVß>ãÌ(Ä@B± ö{o0“l2¾ÅýXiÿÌ'>GDEN6­n_¡}ÀOÂ\l Â—Be6 ïœ 0ž >80K*+rµ|½W~l¶± 'ŸoåW69¥ùÿ z¦Àô¢4¾•û%•´•›áTzä @’ öUðòç·¿a®é… ,ÊÁ¬ï ?²¤–½ÖI"ür p߀bJ ŠyafRO`ï%%ð¯ª÷“ž…!€3¾B»À^á¦à.¶PÁV|i°·3Ì!ª¨‹±JlDY8Ë9 G¤˜S \0 ÒB‡Ö›¤•tÍVZuV}QâáÞè²L´Sš«’yPr‡x<“t!³‘çG5=7Š%`@m2R.RãŸs=@@…È’’¿}…þdÀ —(€ÿûzÔ#иPÖ`>¸2X—X¹·"”D ¨Ô¢,ô_mÿ)ÂG² «9þQîB’úø@“&¦phÇIŸ 6É6•r©ITûOŸ¿X¤!’o-#C¨ùIvÐ ,㼇 ´£6€Ïεÿñ·‚Ž}…þdÀµv*|YÀ?„Sз†PÖ݇—Ìü\—µß“»Fˆ6‡óå+e«§Õ·»ùu(@9ãs2ˆ<³Îã ¢U?YKÚ*€ª¯ÐŸ‹¸Ø@…Z  ÝÄç~úÍb¸ ºK ÊP„ÀQ€„*ÛÕþõ!äyIï·!ΆúX°G/¿Mùf'8ª¡€·ÀÞøpë ´Ñèƒÿ´}«ŒlTÞm_¡?p±€ ‡€os„Hò }²2ž¹ôU§€Â@rY³@­Ëox¶°Í™¯”«Šð“5Ëœ~:î_lWG IDAT~NH†@{|Öé÷»‡ÿ¿(@À)_¡?P]`x˜¸‘Ÿ„nõåú—Êë„…3‰Ü9ßg¯ôÚÙœ,dú´îP·÷œã=ç ʹbTr+Å:ÈAb6ÛÿrÑ`KÀy8€kíTP€°<ãà†¿7æX/TöŽ¥ßgŸ€bqÐPÖøåüthYRÙ–X6 c ®+â](@¥ù›hÓ»>0êòw™ pÎàßAßàI;„QÌkc€ür<ËÀ ‡&ãNØüÖ¾BôpœÀÚ/k~Ö1e<[œhœTåÖŸ ®ž³` ÷¾ Ý…²THÇAñ›y2Ч¸Žì´TêoSâ­V@ÕÓ=ËôGYP–ëxìso&À5{o$r;™.V¸)8€ü\Ðè² Yð@(ú|Ñ€r@R @(‹ƒ2 s«ì\ip¯¶H’¥xææ”W.¬¸ôr`1ãÏšX\,p¹€TÅCœKx2à„@é` ð2€"ªq<Ô=¡ºÅû8Ü¥õüE&x˧ÞJú¢:o«£bmÿ `ƒª4ð"€8›d#fû7i¯_fë9ëâRÅ A7ž*u tæeù¹8€óëüó~Ý3 @qF™¿8€©Ã&­‚¸N$èq¾ã`1É«YLòÚódˆ/€ à¸èKQgÇlÝ€Ø^!¿·ÆO(³É49ý—Îê~Y“qU;€zà~Ý?S¦ÀÀêîÕ2iÄ|:Õ¸(x€W„dÌèßÎPXÑ;B¨¥*pÆ%Ð5 @PÀ5 €Ì¤ B%wV@iMÂÔíŒaÀÆ¿]<Ý8µ.À ÂÞˆr xh“8Çu-¸*­úïê@¯  Ìz¹5°ˆAc0… ?=Ï"€œú S.[pãó`ÏöÀ;€ÿ»ÿåùrÓ„b_*Ý‚{CpHrwóI¤ðcŠ8|@Tl€ÞŠÊ %7•q*á¶`õ± £A ÒåßžS€€Äç@.­i8€vQ‚ÓuWr=u^î]gà >0C XL9PòÌDýÆùpËn€Hºãþïpƒ>ÜòV~n"f—ïã(Påj¢_ë% )T%ð*k€R·Ó UE jЩ¾¾·þ¾Útô•ƒ—{ÄM0ßß®dÙx*€TwŸ€±ªŠ.@¼"{'Š3ó$…hOœÒïRœn ¤·,Ã>]oy{Z™ø423ú7sX&~rP°hNè…˜;Q$\^XùÌÜ_JàÌCþjà´jÁrŸ‚øñãǽn¦ï}íìÉ@ÉøŸ :ø5« ÀìŒÆÊ|?N†õ¶Þ~„xi=eîüÃa9>Ê%€¿ µ|”Ðc8“šë¦¸Q‡G·´[Ž1)Ù˜ñmc2`€RRÐõyzT^o¬>èé×Ðk]pö^“q’ƒïš ø•ãÇA¯ ØVKV.ôkw»_/m)ú˜% ™ÔZâ@9OZ~˜¬èÅÔdk‡qÉuaR<·ìé0¥Uàôç}*dHÇ’20òV_öž¬.@MºŸ‹„,6áù·Ðk_xöf¹ÜgáÂïØû¢v]ÓQ’h)€À]þ{ÀF€T‹üAj½¨ä¹ñFù·ñ'öÞ¡ce>ó…éPê@Dpa|:‘4DnPS ùüœdU²šÈm $yYêÅešV2)çCr°_)m:¤b!€ ^‚ïNè$¹8ðG2L4ÀZ~PÊ€zßæ¥ï’XRÛF d/®T¥Ø¯G OòŒ€Œ±éÀç â}OŸ;öÂEAÙ UPïN€çS–V9–‚¿õ}Iò²:ÕjÀ)ˆ/¨2h±}ÚìÀóáoâ0$lönQ–ìþ“HÀ¯JHêâ ìB,q,‡€4õÉ3Aw(È4^€~{H¢X`{ðøñžíP@Ñ„giyr^‹hƒè“ eòêÀ†Ÿ8Ò* Æ*Ž4Áû¼;Ÿ”DI}êf„û™˜È]€Šït8ÁÄ~ü#À@³~äòè „08€PòœE8wüC‘רˆ yq\zKÇ* ´²¨g€pß"K— týßhï‰q‰¥R)¬fD¶9€ŸË!Hiqæãød ; Ž =8 €€«¶4¬}€òXX.NA‘€F½T|bO@R È$EÊ–'4‘vË ¢LB¡ËNÀ.ÁÛêGƒPÔ?Q RÐÒâކ<Ôße]€?ذ=› T˜<&_0…èÀ €¸èÄ(À=<ÃÔCär‡‚z”Ïœ1G瀲]dü£Fi *Û'Rš8.äœÝWªA–½Ùüÿu€Ÿ… ¢#ì¾K)gÂÿ] ¸’÷õ?ÿ…¿ÿæ´ˆíj‹²^è0à9ùç£f-Ûëlî”.e|q°ÇE†°õض³½@"l)Mä[kÃGø zrñvÀ€ÌX%j³°;Š„·3Ð%ØX@{æ§à~˜À_þ—Ê6Ü:gj€ï{j%|Ïü¤ú;€Ê(€l>ÎìÓ]QX¿7”qÒÈr,OqMB,dˆ6à7ÅAObú|¢­èUmñV ætàº(Û| PK¶¶²»rÀKÀ+Ÿ}°G I9€ÒðÿµZj‚6üß¿ÿƒá{îøÂ˜  =ÍTÆaܳÜÒl@èød!¹s£sQ%{7+Š#€h í‹rx;ðy¦Â4Þ¾,o¤”mgJñ•ˆßÛ%#ÿò¡6œúƒ© àKÀI9´ðþ¿G |g à+î{@dž@Ë@€6Xñ›7²I3¹…tp 9€Ç€÷s¬\Œ±Ñ/ï²Hõ  ƒ$N(JÁ@P£s£]6ãÁ°Á`@~ øÜ'¢?€{Ûò¿Ï >R†„BØÕÁ½Ä25 ú†µQ20 ^“èA³Z 8Ç…£Ï2W6×·· &×ô\iøM@U 'GBþpž,Þ}vÂ^ c=홟ƒøIívû‹ýßá{‰5@é$KÀÔªŸç\ÓÒ„/¡•cBX¡¶±ú$à³ ÀýÑ7ÔÙ—ôKû¨Hà;‹ý€r’¢}V_Ë<"'ã @àX³¡fóÏy0Ø#Ð,zŽÍué¤jö¿ÿ øÓõù_øÉÿ©®!€RÒWÌ0µ€à>c—Ÿ ?ÕL™ä.FyŽ¥Oÿ,°%x_@#Ó¬GŽVŒ”ìsF—F¬ÉP£ã×íÆÀ#üàX@óp¿3Ð^HÀPê6øÁ÷~¤H”Fq߈ÀqÔðœ(£lü™¿±¿˜"Ÿù *là*€‡gB&L‚T¿Ý,äý¹:pô¤¾ÆDP£7ÑXŸ%éð¡ˆp3y'’¿WX\Sp?~g´ý vž{Îæ½ÜG4@@М@¨ 6z~ Ú Ø„€ 3fà*à­71Cx–˜3·Ëu JaÄwk2ÔèÍV#ªþ‚@ø­ Û-¤ àq’ Ð°«zð3)rÛŸ•ÊP$àc£ FI"€@|‚¾‚ÚÈë7€Ï3Øx’˜är¬ð°Ò²ÇÔ8>¨®.…,©y"®ŽþDmàQ@³peà HÀl0´)èb Ü—þq ÷Òoþ 2 °[¯‘¿=³ Ëë> ^¿7|œòjÞÌ„ €ñÚ´â¶XkÝ`W£ñ{ÌCm½’ý3Ûüà±R?e.À›;ñ·öx@0 |­97` ®4݃á)`Z@гR®èÙ3`ÏBA~´?€ ‹k×ü-uÀ` è@ÙçÜö–½õO¿‰%`¥ê)M柬L+71¦œî îÙN—…Uä†Ôó.=¬+m6v>|6`ÏÛ<÷ÆÓûÙ³=@¼#ˆ3SÇÿˆK°"Ýö?ý–€Ç£Q3©a@ÐÁ@S1"€^=UÁ’쯊:1QC€|`0rq…I8X0£WHÀ‘  K°x| sK{.€@{Ö’×LeAÂ60#æ=µa@é°¡m$ Fp%$à8pÊ`Ñí¼DúÖ +µOŽ„b ˆ¢½ÇÛ[2‹˜Š˜H‰å­KDÅtò JuŠþÀ`ÿÉ1Ø#Ÿ„ ˃G@Öªº8°’ný§ŸOÒ_@p< àÌü© TüÝàÞ«€[„þL’kå^Q l.@H…¿75gg{ZŒõ´g{ @˜;€¡àØ 9PlÔ Ûjgdzc ¾ò1—V"’»ÍÇL‹jåWæ8ÖÂÛ€.ɆG pÐóÄ$€òP—îk=…I8€€vûœ f Ìåà€8î¶«—Úïˆ> ¼= Ø(€xÖ713")Ú¥W+sa o=Ç=jÞÞƒU&AÂÎÜ¿çàþ€æÿ‹Ù G³Ý’rw—Ó$­ûÜÏ –lëþ¡r]bT7> ó¶q΢ÒX `2`f`Ù–fÐ.€Ä®÷ÄÀ¶Ç=×(€Áü$ÀN¦¥Á#øÈ5r8æ¶õ↋"½nJ¼Óuû¤µ%ÅÀjVmv8äSm#£©Ã90=P^‚ÄNK¿Þ íà’W0Ø#P˜„È^p—`£å ð¹K±[b³Ÿ~Ù>]êè;ùÜèoYAÀ©xv-‘Ò8‚œHjsœdŒ( ”]ÏúF`ZÀ zõßFÚÁð’MpÍëhÿž‚Øø¯ 0 `)€ÔÖ§pÿýÜÇú¬_aH0’»°ï#ñ\9µÐ™$0c2 ɽ”Ë@iºÃE À¤Àm§ô€=Ì'¶i/ ^_ ÃD=Ô˜€Å5@%;€q9³ à–d6Reç3u V8±¦ žrq °‹E` @K@|Ôx• 6徨Œ÷2 ÜØPõ-ï Õp“ñòÁòÓ­J*s¨ +Æ¡¿è³4‚±.@®gA6;OèÝõÆìN7½Ÿ=ÛSpÌ%]l$ ËƒW|¦šŒ|>ËÁÏd%ðé>“åÿšÎ­éTŒù¹–¸küØ^-E>ä—ðÐm™‹P€°- Ê¾rÎõ赕óO¥¼&߆а‡ á}ýòá©Q€/ðÂ\‚ÈІË÷“ׇ½&¬F=ˆÒï :^ãŠ0$?ÎìB]æ¡£¡4:¤›ÀDû] €F¥|7®°½¿ÑY,8¶•¶®@Ç£û\¨é¯aÈNÀ»ûi=íßsp¿—!€ßÒt`Xh  ÔWr¼ÜéVoÞ’¨–¢Š › ŸÕØTµQiìWŽò™S@Ö_(Ž_ßð$ê7ùQCG¥%GÈ›:Úg‹k »_Ù#8|QQV‚ÁëΠUKÄ)30 I –‹$Cl6 ßh”'Â… @÷(@Úź<œ¨…ÌŒ¾›S›NpžÏ†úLÏmÊž¿áÍ'"¬ÎDÈ·{´Ï×DÀWþ#v#@À.@hy†:±â¦®¼8¬S9p¼Ø¡I_`³3ïTÞ î½¨"Õø“Q€mè(€hê±U):sñ`YŒðÐ#huËOEba«þŒ(«‰‡@z?{’sq»! _`ð…Œ‚gÍþCíp¶À“cÉ€¯‰úø„H‚œÜ FK@9s&bf¶´ÊQóüæyÅîâ x“Äéæ“ ×dZ´ªÖ¸„i8€BüÆ\‚ 6@ÝxghèÆàº¥» Iîp’À`40å\«gju¶iôî7àuw×ó¸` \öï‰8€/ a 80;= ØÒ ®þÓ”üâ¼€$] µcKA¤åݤô?.efD•Þ˜Ô‡VÞÔ©;USóTÀQ õPÈø„d×è/Á K0n0P;€ÃÕ-׎- °X€-ÔRŒÈ‰œØ5SA ©!!€ònJ«ìñâ×3“"l=`耥‚huÀSð&j´¨ÛGO!P2¹Ã}ÒûÙ‡@c`ô0ô#¾<`‘ùOT|qº±´úŒHÄþ‚¥í3 ˜jœ˜˜TYâ h6H¯°'  cï ¯oD$+^}ÎqhTñW²ø‚Aæl(`–€=«·è¢¸ô·e€(Ýí$qK£âY'`fDš§m™ü¨£´P"Öfz¨¢BF—,®)8€ìè·Ì SБ€Ø„pI,.ü¸‡~ì ï÷­¸›éÿÏ|$Äýð8€š` €\Ú±\áÊlÀTÛæcæDBšQ€9ؾ¡' wà袇ÚïZS`,®Y8€ÂR;€¡íÚ 6ã? ·#€2aã$`nº!n™ ˜j‚£Ò*—×èká—…ŸØ®?l^oáVV,:¯â§ ¸g{ Œ2;€¡€ØTÀÀc ÀÝÚ}Æ$.‚ ˆv(é 001Ðcùö £q%7 ·‹6‹F„\\aÀH–€Ã@8š á °k€ºü/œHöœð–OÀà™Q¾#¶ój`F`3ùtˆ´ÒÜ"@© xß–G k¦zí-HqÍÂàÊ€_” ãY €™x¬MC ÆðuŠ0§ª·ÂlÀ|T¶vçÃå Àœ 0yN6ë(ã50 7Ë.Žø±þòMWX¥î¢€Å5ð;8âvCõ ØäÀÆþ®@Ì0PA!€Ò”“•fa&D•wo!ÿET ÿÅܨt#9€Fíy<Ü›?ðUX@±.À @ìZà9`GuÀ€ÔŽà(@†äPçÈ(@H˜&cæD•¶Ü ¹¬ã¶¨d TÍ Àò¹\rq…Y8€ß‹ðs;Z›¯Nª!ÁÈ6ÿ"ÊdŸ€Jœ7G|q †¢ý~`BÀÆúìž?ëXã,©Ëk<EèŸî·^âÓ`qÍÁp·à+[`8ô ¥½‡'8€†` ]€3ÔDÒÀ…ç9€ À”@ÀyC!H¹g‡¤ß{äè‰ëå=Í…y}>`qMÁâäK® 0 : ØRËHàé(@H^ @ln,‡ ¥U.¯!Ð×Âÿ. ?€—Wï…9ÖøS§atìOüº"EŽÅš\¾®z¨»Øï±ÿ^ñæÄOÅ·àÒ`$ðí…AJ¡ÇQ€‡@²PcŠ% e|ˆÜ/úÌâ·ÍÇLˆ„O@*¾†©_õˆ1?G8€¯2cæû<øB xKëN<ýÌçâ óp0Àü ¡p8à‰O@ƤŒŸ€ù1™‹à9€)€£x_ŠÆÝ’x32"€\û Œ59ᤲõØÉ°\æôÑP’Àâš‚øñÇr|]€qÀÓ…AÆåQ€j` ® @„99Ý¡[iàBÎóa0!¨É€f%ΪCœË» #p€Íø}Xú·ÈÜsq[V’©§Ú²¦ÉLÀ¶ÀPÈòàC@]p ù&ä €ç(@À>0+ Â˘}¡(‡zyuiÇbMæÿdÖÿ3]€ÛB$øŠà¦ã~·í†äBìokgÇ Æäu85S¬wO"p~`R 'ÿÕ:BBH$æ6€ö¯s IDATJa È_EܸÿŽÓÁ¯ Í|²ýÇÎÅ&á~€C/@Ðà]‚%y¶ÿù. Ôjc˜?_„¹ŸLE{`J ¥º*ïBKW¤(F|§±&ç/ïÜëåjödç`qMÁÀ0 ¶UUÿ#@2èãȺ”H­x€|pðl­0ˆ˜`³k~ŸPâ$#CA"€².@9öà ñë牅+9@7€>¥À@À@Wà´81 ƃ/Ö%ðT…¶‘AJ«\^C ¯…ÿ]~F@‹@³}Ë"µ€uu”ÂHßCŠÝû‚@Î{z?{¶§àBá´?€aÀÿ÷ @' ØÒw´¨ënÆàº„`kñÛ œŸ†˜P®mJM`j©¸Ú€w:Ѐ¿h  |ª\\a f0„ÿtØ8ÎŒ@t6`öâOû&ÜŽ ’£ïefEœÃ£›d&€¦1@B Æ_xíCíš<Ñü‹ÇÂ⚃¨Ø ¡ €†X–ÇFÐЌȣ(ÌIAª• À€Qõ¹…ã¤PQÈ•Ž y(Ïù‹ƒvoŠÅ5P³ ˆCß|Ô 3‰ŒôŒH†@±ÈäÊ@³13"l>›|û¥±ìE‚`ÞÊ8@A¾þ?,@‡q5;€¡9€}·GœA? ¨§¼0Fà=ÕÕï-LÇL‰ ±ÕÛIX-‚qxƒ#ý Iu:Ÿ€Ä@øBȈð9PWD6ïð %`X‚H€1AŠ ÞÌ̈”à²b¥G¥Z`Ô¹ˆVŠ$¿ÍÀ(§ X\sp5;€‘à8?Ù4FHX¢´R«²++=_ý±ÍíKÂt`ålêbm}²t,Eñ@ƒ½ûI8€ªÀH€ TÀàQ¿•F9dDVpe©Æ¹Ö‰•æc¦E†¼×h5c1 y)ÔŠå%þ.ëT솊B—)ð¾oí…A²y–ôXÔ ftÝX500#0Ä@‚ ̶ŸƒÅ,–G \/ï=ÿP›½¸ß“!W˜…@;2 ŽGde?(è[èòQÖhÅò@0)²Àý”°yò ¼goåM À¤ÀâüÔ!!èjäŠ?öé ö@¸zú5ø­²¼ï“‹k æ`$Ð2vÙ à´OÀn;Ñ~†R«à! .[èA`(0!(â+óLFÀ‰(ŒÁRõ”êôLº§ ·ívbv4©W¿O,®)8€ª?€‘WÚ«KéÀ¹l‚Ï{<8 Õ…C@_C ¯…ÿ]~JÀúíŽçzÀ2 p2"C1@°qc ~vÖï%Äcr—†\áü$@Õ`$@°_Pþå ;€ªÈüq–ôÌ0œ‚®’ðÓ1s"KæeÏžâÇÀ€/Ú8~oM ÷ûŠ%{YÈÅfáŠÀoÌÀPе6 SFXƒå± ó@†¯À{öVÞÆL‰PŽÕò`íÀ cÀ@€ð MÐÙà©^°¸æà*vC@B¾Çø);€†‚($`aÄÚ€åè#À``NP-Uû˜€ `©z‚¶è“ëÐïlÀâš‚¨Ù ‚†ÖÊ@cG¼§í'!K5¦q žßèkôµð¿ËÂωœlÁÙ/*SÅð”2-“zÒ>ÁT·Ÿ«†ã‡£ 䜃@;€ï¿u¯ ð,pÐxp }ÚP¶Ù¡ƒ )9€é€i€±03ï£]eìSeË#ÚïÀ7ô\¾ÜÐ6P쾘ÀP mÀëç(;€h è‘P ‡m>à'Bv9ÓHŠ5¤ N’Âð?Ùd ,®98€Öx  rfÔ§}6Fdû™—G @ýdpžÎL‹˜|‹ö¿Áþ;â¨Ùþþ&sÀàKÚŒ„¦À³³ë¡j Hž êá < €©€i€ç§ûHи²àhô2 _ÎO‹ölOÁ<°.Àó`ìlÀTƒ‰ Ö,Û| À¼@QLˆÒ ŒOÎ–Âøi@˜…ø£X2CY(tù ¯™ à)àksæcfD¢( !¶#XF:j)Œ\¯cR ´¸æà`yð/á`$èY8¶6À´` ÀUk¾€˜¬\ˆ+ôÞbj}Ù_Ð#Ÿ„8¿.€¬Ó€®ÕÝ2r.@šΩBóp¿O ´ N!€5€ñò¿8Z@c6PsÀ'­Õ¬ xZ*íía9RÅ×mA,%Xöä]GÀ1Ÿ „ø¸ÝŠÄ³¹ÿ›P[§ÿÒÞÏþ=pn] èGtC> ?££qá‰OІ½}}(ÏrY:lÀåž{ø­ˆ9±`çNxºÝ.QþDÜ3a2 üþÕ¿.€¬Ò€¡£)ô¬ @¬Hú{Òéð"Öü¬`¼æTõ¤ÐvAt`)Ôèí:p£°âªÞÏDÌævCCW/ ò Hà™0ÆÚ€óª€ÀU×ûn_C6¥ç¤ êÀÖ!inŒ´¸‚†æáJàûẗŠuÒ(@]4F|Öj%cù ÿ ÀS݈ǂ|´ô¶ éP,oéÕQCMXvr@ €Höß®øës‰ì[@Öé‡@7X^…"éÏõîcÛyñzð¦@[ÿ-¾.WmþÍñ«ã¯—¿Â#P·@ÿ]æüaû z@,ðHÜù[Ï!€†™åµ×åãÛ·o-ôúP›y9a»¿¬ý(%ô„‡ÿ6A`3ÿt ê¼?€nð7ñ@\‚1CÀ)j€G8Ê„PÀ.ÿt^(XÞ`…È^æö±¿..µìWê;ÁyFòƒÿ´` [*;€¡ÀŸ™ ¸c€õô߃a@3ÝÀÇ#à= Àû-³X›#ùÆÁJ4µº`üÕÀ€‡öw4п.€¬ÓO€.°äaÀ'B­Z-†%`‹|Æ=ÞîäãÛÇ®Žž³þدdÞl ¸wîoëceBKºóçGÎê1@~IÑ6 øúßUoÄAeF ç@ñ (üŒ THÀ2 ð˜X²¨0 úŒíX~ÃPç¦ 7Èõ{@`£ö(¾!ãjf€0ø zš…€u¸W`Ã#Е w6à¡%ü{°9€ü”YS§TÖh€Šn:6;•{x;H™!‡ÿø¨žUfÚ4ˆìçÿy=MÃÔü ½£Ï†s|ñ ŒqÕ ]Rio !Ù2&ð²:Õ,êÝ ~mè8Æj2Ä8€ŸK¤÷³OÁÀºÊ`$è²p€½ï¿ñÀ–÷7ˆ‘7رEœ¬i[,†½Æ}.ëõTÉûvôÄZ[v]ñh( •Ñ[€yü„N¢ëƒÑÒ%z@ ½ÙúÓë ˆ~Z@{æ§à:×Uú9@@ƒ\݇á³4oJ®7òC§£ë*ÑPå ¯f~ò¸^óؘOýò[>âá@‰vx…ôïF~’0à—2÷!­;mþ¥ ¤ÐåHüõZ÷¶œ†¨Ø ]Àš„øÓ­ëºåÿø½¸õžs·oçŸýx> ?÷»R¨v, ?enVÑ0ú-¡CÐ"øÇòn+€¤;ªFÿgA1¤•údßp}H ø|«@ê`ßëh b0ôÚléçsÝá’[ã¡mW÷í-ýì168ZNÆjÐþÔÚ€Å'àY€+€€nþ†:¡à„|ì–ŽÑC¼äÔ‰IÏrYê ¯À¬@Mµ¤;r‰àƒ…„ðGÊ4¡8È@ µ‡ÚFzò“p}ëøk@§À³˜uÁ.ÍŸQ´wp°&QO?{HR¿lø³‰µ)xPs‚ZÐCí ÄÀsI`ãë¹åy‹]ü¹Kê.¬·<$%Ò)~`ÿ¤TZ/˜`˜ð^ @€éÀµ—ÏGõ¸rÐ=Ëu8QG òs;‹†yÚ3?~¢¶®Qª{]€«@pŸ ÊðŽbÙoQìY/Ì@Ô ¬ä'®†Žµ=Ô?欗H‰AãHÓO~nö1~¶—x7( "ÖÃס:ÐP¹Hr!õxzP ö4 ¤ä³|[ëø‹@§À.Çiλ&Ø;ví4ò+üìq6…š@…  @^d9Û °!ãøüêR›¯Eà ø„BKd{˜i@ÎTô`¿|.ôö¸Ÿ±ý„G ?‰zš†ÐA{ºtÚ¬ ¹U‡­¨¶ˆò׬VÖ¦°9Âø²8èãBÄÿ7ÐIœ…(Ò Çð@(;m-o çqNP(ÊÒ,\Zòk‰î("¨Ñ[lç@?ap"ä ç'áÒÂ@_°<Зµ.€¿PpHÆŽê8àî9ßÇ–Ô÷ß-?EgØAû`ëÄtàSr»¼†ÈRn Ñ ØáVäŽyu Bƒ`¶.«SÝ!q9…æ(çÿ¬†^Z]„´ ¥Ôãèà¯ï0ÙýV\ƒ¯z]€ë@§G •ÖÖÿÌ¿ÐyIäÅçÂ~Ö&б6 ÇaÀ³«ßr7ÐØ$³€„õ=%ý3þ'NqïF„kRY6¾aò£ |Î#4ãù»whïobðûo0@­ à/ Ô=}:xøri `ûϨ ²b¸Ç͌ᇠã .©gm@‡qIh+€À$!ÐWØÖÙ §È…¤W¿Ù< dªŒˆ€”t¤ µD*E cÐC “qÔ%`4Pë t åd‰Òž«Ðgššç>a¡âÊêK¢ *©B°8ÎXš Udõ\Šå ˜ˆÐ¥¹È¡>N*JÐYÊ`ߘöË„G€P_z]Qq¯ˆš$ hß&5b‡ Ÿ‹ ͱ¤š% }J¸ºý€:›ÏŒ=ˆüæ’"-­uÞ¡ï·\Cpx³ V¦ @A¥á«Jñ 5àäiÊÆQ€üzZ°g{ àw4Œ_j]€ ×pQ @sX}–Ÿ¹ÓàVì( €ÈoJ Ø€hæ÷]áÍ@ôk`´>9d¬Ò}÷Wð4 f€û×o»ëù½@/%ãV~ Ô™5žÛO„’× à@( ÿ„1áý€hIXÔi¤'#Ñ_ö –'<u‡1©’É›Óp_ÑPþú.=…À@‡ Gáhm@ Mx·ÿ-Ù=ø,—Õ©îpÄ PÛª÷Ùþ‚ü$@Zûr]?èè `µíª¿È«U=´×L é¤n?t:Gx/` @ð-@å¸ÝKspR^Áö¡bþâ <9 ðL 댈B/ j 1|ýNškÂá¬[ÈêÀó*€ @ /Ô”áÅÚç ŸÑdÀÏ¥r…›… ÁP@cEÇ£‚BnW¨„V³FÑp°6`@Íć»Ë;»@~; ìÁᇲ:¼LÍñ>ͱQ€Ÿ×#Ð4ÀïûgS ï|]€A !€ƒ.À^ÔO†–¼ÔGÊOÌÂç/à0(Ûî@„6ÕÇè’B2ÞI@üL¯-ðßdmÀ?¾3ð¯ àÇ€„¡wòÝ>iô–¼4Öb®‘€À/`F’P xüQ?¨p=åª=@Åìöt£G»^ÑX@{¶§à~/à4@F¸8À‚?´•WÍ>mtkâáÜ ^¯!#$$Î^¨éø¨µgùë"<ਜ¹e@pƒµ‚kú`°G Y8€ßÑ (¹¢ëŒˆ°¡µfÚ°se Îc¬†¼´ÖL\@É]÷â0B!+€wâ]iÿ)6Ÿ_m €º=ñ3¸scëˆÓ0Ö#Ð4€œ @= t § °8)ëës½!/6À,ÚŠÕÉ/ š€&òªñØœ uÓåè­½¡ê]‚Áü4@æ¿SàoC@×(@ìÜ?!üø±ÿß¿÷ýkÿù3ý„éȲ±oäöl.ø”É‚âêö~VðnÀŽmä ƒEóÑhNDŠ£¹bv{ª!€ºõ´g{à I€ßÐ`(ð¹ е:ð‡BÆuyi¯ ó¾æj‡  ¡¯ÞðY.«SÝ!ȵÓõl@!çE9è!£!Á…qˆ Fo¦G ó `°G y8€ïdà‹t¤ü^B&æ<¡ÂYàqmÀÌxe~!;xj)%9€ ¯¿0v‹BfÌÒ+Ë¡Û#ÐC€¦{Y˜Žø"ÆÀd2ÐH@íê]€ÏÔxœðžx.sÚR.Äd j’ï ø,—Õ©î`rÌKJ³Y0ÒØ«¬+ÆR£¡×#ÿ‘÷#þÀ6@” 7@q]?°Q€QàÔ(Àž×Å3ÖX!î/P ¾Ì” ÖfÔOÕmøµ†PÖô ÔÊ_s <Ç|vÀ©Q€"Ô,ãb¿‚òbs,ïPýrý†Ès|–gªÑc¡6°6î¯ ¥ØÕ ó†@ÊüòáÉQ° v@ïl@ÖàB¾­l_j€‡8€ôœÀ ¨û¼îÅ/P ÞD(âtäß u !¹£¹Vþ´`à÷ÿ¿$º|.Hßxß@ž>; Š)0ÐýâBÕ€*F T{Êlˆ§æþ ü, v#õ Ø‹”¸µÀY¿9€&ŠÅíý/`0/-{,"ÐèúAŒä»>ŒIµxÚ³=ðÛ ¾s:p0  À£<ï!Õ·uáÃÜõì¾5à³\V§ºCsu` zÛYw9° îø+xš‰@Kâ`$=Aܸ1  Àù¹œ@¯ÀÙéí/P X4u¿ð}gàs¤?ñ(ÀD@™ ÄíF€^Ÿ€Í.Àz£,€òRá¨)@ªqë/à(Ž8ÚŽ/‹ú¿Ø––ÒàçR¹ÂùY8Òú3;€‘ éÀÍÙ€Ï €“±L Ÿ ô 4‚‰êoß²2ø>Ó~ü¼öÌOÂ| ¬ 0øÿ~u"€†8BgG¨SФ ÊýBÁF®üñN<Ý\` »æËv*¢snêÄÁCuDz ” 7 P†˜ÀPþÓád9¸ì™Ÿ€åÑK‡s ¿@+Øv*Ðü&ɯ0¿ä Ÿñ´u*€±&âèt@n 8 „ˆü SàMûÕ)#€s£ ðÉ¿ì:C{]€Z1H»¿–+E€Âø^@·r”Îh<Ô6Ä!H®p~àw:À트^p:ðÑl@@ÚÖ·n·P€. ò 4ƒmP÷[´Q …ô—yÊGo9@ä¡¶! `2€ 2;€À—éÀÝà„Xo?œ €yÐ7Ñ«â»>Ëeuª;4,kãx‹Œ ì„áa@ú§õP‘¹ÂÍÙ@Ì ˆëõ ‡ ‡Î#w;ÏìœgB€z~!€vh¸Òt;¶Ï0=l•5À@S¯G ÀX@3q¶ÀH@‚ @nxÄ#pà}þB¡‚Úq\{96ȇa£pˆ Fo låÐI0Ò#ŸŽ0üDq|X^Š|ô Hÿ‹è æ(@ýsT¾­¾½.'© ÔxÔΓ°ÿßÉ C{¶'â´ÀP€sF €5!€³sÈÊ@IßÁ0àú „£Õc°‡ú5OÈ•‚5”£áÐ#Pþ¢£LCÔ ¯¾2ä 7  ƒXþ¼5®Y>ËœóäS Ð熸¿8€ƒÐàœ)ãõQ;vI¬˜fäðÀ\€Þ÷ó7™ ðGÛ` èZh¹4䥅òÔ¸Ÿ”åoR!ç}m(ÇãåƒðÓßý=B¼ÀY>MšcBcdEsÖ#ÐVïoâàÀ`  >Ûàðâ(c~f€xxC- Ê¾rœë{6 îi0¯7 §c0 «çYp‚Óû›ølÛ Ä¨Ù¤>ÖXee Ì„°æZ÷"€R¾WØÞßndM,lð±£¼mÝ  ŽœléùÅþ«¸ 9¿š¸<üM|þÞ´ppß­Wê×!€X*œÀu~b°Kdòœä§j¨ÁsjZ ˜Á‰uÎ#й¸½1Ï…B:ÍÃÔíFæðrðÌ(aÒd }]€Ÿ`Ÿ6òiã‘Ø´ÀØ]ÁD8¨†öMÎOò|üƼÆ#ÐÅ+Üd€µ.À €>}}.@Rþ/  þþR^Œ„£.  8áÐ><î™’&l”ôH@— ë2%`Û ý†@÷zð ¨"Áé¼Dž3à³lu€Q|º °m ô†ª% hßëB-„¤ZÐjâ5.*Òû™‰¨Ú 3r‚æÎâ_0À 68€  ‰8Ú7ÉýÛ·H G†zZ/Q%ÎÇÔìÆÂL~‚xhu`òq2PLáçEªñ'£ÛÁ(À ;x ¬%gN‹½á4¢.œø¥iøŒÓ„?R±Ÿ¶á}OfDAMÉèu†‚êõZ;ïó\¢ÂRÌŸ¼8T,…m*ƒ D Lšc6à–÷žVŸKìÉÜî¿—|rÞ§äÌuÆð 's5»OØ<6 € @î›ü”£/-K@5Â/ð=…8èg›a*„àvôò䋨‹Œ•dü™d>W¸‰8€ŠÀ@>›£Ë“àäêÀ¸4XM–Jî8 õuÌ" "^?OOv{’£™O=Ôý^·{ ÑŠœ %•ù8Û`$ µ¨‡ÖÊ@ ù î/pŽ|ʦPí~cˆp1=å ½]§v `ÉVÍ´ÿÀ(ùI9¹.À@à{8€ôÊ^æÈǹL…¥2û…CÅ' ©ú2 »pÑÏw<9Î@”“â¸9Ã3º£Æƒ›“0Ö † gÂ/Ð:üð~°Îܳ. @Üœá™à׬.iÿñIr…›ˆ0톀îQ€×"ï)ëüB‡¡Â,ÐpóF~¡{Æz@NÇur4òt] ÜKþy€çè·ÌȘvC8"Ÿ³¬«€úÊ@Eóy(¹\ýLE IDAT_à `5¤vÉâÍt‚ŽS¶ÝbX ¤È(@à^qrÓ/ìÖ劀O‘+œŸŽàvCCÕ.€{á(@,®Âj–€“†Ù€lõÀŸ€. 3bF£-Oyê~¨Èÿ <ÛÈyŸ’0ýŒ'À«FBö Œ €란²˜— ‚€ ŽþíÕ5pyðk ¥œ N<üÄ€ô0°Ù€“ \¤è©Tr jnž·Ù€-=’ésü¨«Å•G¡˜Îy:XexøÃšÁÜÉœ0üŒ åúG|&‘@v’s3a)~Ü'EëS ¿(¸Ì"aŠè€ô°ÖµPo I@æÓû™‰°ýŒ¡wqÐ×yK@dìQ€)>»V¾å#ÞÓ5—ÓÞÁ’Üá-§CËbÔýÒÒ#ë—ý¸Ï=Ð#÷|¸ý‡GËfJ@Û '8€l ¸·ëý¯LŸ¦+;ÕÚép£EðåÝVZsÈ0#XÀóø396Ä»Î*ô`®}ôÜCí·LbÒõºT«½2Û)¤÷3`Ú lyð.KÀ´êwÇ_”ÿ‡ì|Ÿ2¡ÀP–UÚqÔnRn~oÌã\ë[(8!ƒƒøÇx¼ð@̇äË—„;!”Âü¬7ž¥(¤Âˆß©._üP LŠáá)ÔÊqßš¨Ø çGz1@ÒçG"Á¯G’ ÛVT»˜Ç+o·tâ®øw±ÞõBjð£rØ5ÂMû'æéZ!=>Ëeuª;t­Ìd‚;‚»Lzè1'8ïÙ:¾0ài4ÅŸ&ÜV¾Ôyü7jŸ›˜PëŒt+€Sáü\€À‚DVpáv)uBâRü$d4?t'Èùƒ¢qËù¶ì´'Pãúʃ9g†Cˆra„À™ tÅd ÇïG›’°Ö8®uÖ¦O@Mp/íb x:<²:0gL;€pŠH8&ì/D Cy®hßmZ ;ô–`õP9oW Ÿ‡bÑ€PÛÓ DKÀlÑD\œõ"¢¾XÈÅ5`ÛŒ—‡A ËI "Îh¯À)l @€f?5ÝïsÉqÚüt:@Á˜P67j«£z…Ððt¹HÓóíeûv8 0`¯ p\í¬M»zªhvPžÃ'þ¶°W¦ €´e¶0QÔS:Ð~ß@¢6óª  Z ©_ËÀÖeuª;X€5‚TvÅ!¾a0„Æhåèz°.ÀeºHœ"xw‡>×d€X`$@p ˆà§þÀ'ùÖ©*ê)›–€DOEÁJ×€Ðî„Üš_ìB¶(Íü.þ‰÷Ò(ŸÛ!ÀÜÀ ÄX¹˜¢/(B-K¥0ÒX@ªËðu p×ÿ+ ÿ³@Ã| Sr†ÀAx $àótîÆ{,’}ª7P®iô%m@oØ@£ÓŽ™”gôÀ„\¤j=€ü+¢9†‚@×øõ³<îŒ tį\\q¶ÀHÎ, †ÒOÚøOõªâ И J>•˜Fm §‚²[nãQÙdŽàû- ðS ¦d'¿¤nè÷tÁKõ²»@:ü1Òï|€ipXí¬M»zÑ28Z@W‰Võ±®i)eÂÂ1 Ê,*­&@téO€Ž€}¢-Ø»à‚ª~-O€[—Õ©îPE5)§åÈ·,q'¥v@eÖü\¡VrãVUj }&æ¸ÀPàh…O‡ß:|:E7Cm.J,·À°uÞáµa6ÀËB÷úÕd?Ø7žmÞÍ8ˆ¬ô€ è'Ÿt.€µ.@+< „#²yÿM{y+§Ë϶èÐЖ% g”@®Ýg¦%½0à³\S¡Î„š% hÿ)ø¯“c×XñÜk<aËýlûÏRHïg&À´ (h¬ pkë¶±uM¾Å*Ù5n¯ûÏÆ/<*´:(=zf0}˜ ¨’Ô¢a`6…ýºÚ)ÚCÅ#гó«cìíÂäîŽg­í÷åª5PñЬlÖ¦])Íh½^ïr½®kÙØv]°&Qßv°î ÿÜUEüÚaÂ}sY›J@"ôÐa'v ÌŽ9¹·‡IÀŠli³H0”ÅBOBBÀ–Œô@µTÙêêÐç(‹ ƒw ô~öïÉ8é Ù°÷éÚ¸#€¯ž¹Q´ãÒ걕OÊ`Ùb›¿®øo1ʶq×÷Ã[س)@íúd,-$˜ÿʨЂô9€Ù™·¤7ŸX­<“*C/è.4ÛÏü@§ƒú/aJàœÀÓÀGõªˆ/,æ2iÏ-ý,`M¿ly+ï¤OÜéG>ŽˆŒÆëÁä´­î ˆnþA…Qƒ,Üžž"8œ<¼%S“ KôòV‰+éÑÒôb@=JþÖÓ”í\á&âNÛ< z×HBž‡cöFý3AÏ%Âýmoú—LlYY$°š¤ µ•è˜~*3‰.+²KÃl£¢î-üÂåˤ´eÈP #jÈ1¥sÛÑ ”ÀŒsÎÚ<ºHÀÔqÚ"ø¹¸Ø»kõì[ŸIòãé´ûkä ³8…|™\TÆ¥ À/¯À*Ø€î[ ¿c¢ãÄ/½hôpÛØD€²õðëˆð–<ñŸF0°¿Äéýìß“qÝvÏŸ9€æÂ K„ß[ü^“toûÁuïݸ¿Ñ.Àʺg8€ÈE0€Øô¹+0lîiÓ¨».GTGd)"Ú8ÖdòŸëös `×ÿÙ 8ýÄ™·CþO°êELÉœ±¸øb Ü$׺ò.*‚„ëã¡ÄøoÑ0 c4 ˆà$FÄЉK€­®îÞÇL‡¸8pQàP™éI½'8Ünq>ÀíñYÅ#ÓA<®3ž0½Ÿ™8€“vh[î}€üúÀÚ÷N¯Q?Ü1ÿúIÍcìUÛË`Ï  Úœ],sòl@ÿ7õ Ì„Â-¢QÔ¹“§ŒîA¹0€Øàßè„À‡ç& hÝgpƒ5­϶€8ø¸óqç쮾s:0•÷OÖ<¸Ï(óŸIî?SĆZ?ym±‚½.€' Ø8D¾ä¹nt£þ±¼Û @kfD«Õÿg¡HŒV n1´»ÔgôDüÜòŸÔÛƒ $_€ñ~·Øû¿ €ŠvÇÒûÙ¿'ã:í®!N&¯r%SøÌÿ®¨„Ï5G;^Сb H°è[Œ2èÐïN@“' t"zM‡Nˆóýã±[òö¯ûýw‡ Äpõ–ik^eXºÉŽÉ¾lÚ50 Æ„V…Ø\­üÞäàsÜÖ¥cb°ð_(pOjNfäúí.ÈìŽ^)´é‚f-|’üO³Ûh{m@àztb·³¢î<0}YÞ“Xǽ?@èñ+€ ê(¤àøfªcÂLˆ˜>ÒÆ*’Ýü“ô €Eý"°,t}¤ª`ûᘈ8ep  –€@Þ††]UŠ…ËÔÈQ™X–€Œˆviîá9àz¯À~AçE²LE‹ÎÊÔ©‹ÚN›¥0ÒX@ªËS·§@"–,ùktv«Ö*ÓþÏéç˜8cp ð=ÓùÛÐUû yz6`€±%f l?íXŠ8†ò@¾Â·À¬ TÇ´ô"7êýeæ0˜^T÷„nÁnY <‡ö°F`YŠ@½ý·«WX\“q]v×€PìšÃ€#ƒ9€2ÄFùP tù¡Å§^ý±¼‡r `(ÊLˆ*ÚÙA'c€"¢WóÂóP*ëGë…sÊ-˜P•MÉôÚ\|!÷Æ =ê<"É"4îa¯³ƒ)€@¯cr³|Ð^ýC^-ÏÀŒ˜膾AÓ46Ýý7Ö@-#õþ¿êŸêƒ¹¸&âNØ\Ⱥ]ÞÔ§’”(øòëzÀ^€uÀ'Ô) ø«½ÚL‰¬—Ï[D‰›%ŒfåGõÈþ >„ãVDÔ;ÙÀo|ÄçôÛ\<]´«  FëêQicì ìÀüC&·‡ž»CÛ’÷Šð3 €Ådüti‘þ-wŸWz¢ˆþZJ¹7žqb Ãà*z†Ϲ¯ø¯–•By:0µ qIÐ €3Y{„" !Ðh°x¬ Ð}­F80#0Ė˵wZjìÂsEа0ZuñÑ`êYU6An.¶’ 9<%ÐgpÀu¼ï]ìPê)sqÐAÜ¢× +~mºëa& R]´s¼¶£‚{ÎL‰I@.ç–ì“Þb‡¸ oj¸G ž7³ÿï¨*K„/t2ó¹¸&âºí.á?8¨m èYõGoפ¿,PMZ[Þðà@!€z~ߦC1€…ȵ¥ ø4`Ùñƒ}д£=9’”Ï4¿v> ×à:¨WàÕP¨?…X˜F`‹„-mPC¨îj*ªñÕAÜ\»zö}&à³\V§ºÃáêÀª•çêTºNd) ÷dåÃjüé#ìߟªíAõ…n2àÐà:àû¼“E~Ô:¡²ùW€åÈÓ)2¶.L&C’¨u虀› ‚_å žúEŒŒTžGeWt$& Ðcp! @hvîáóÇâÿýûÙ ûl§Ãpàþ}ž‹ÌjÔåKòD}MfAfûϧi¹’HÛñSx`÷ Üð­³ï%-¾‚A`Å#PŽöLéýÌÄtÚ\Bq Úè¸Ìüx(ÜÎ!˜Ì8¸B9¿Í+ð¡Ê‘£ÉžñÅÁ7íL`ë–m}‰€Ù@¶”?¨Bœ °ûZ³ØÛ“Œ§X9aLȾ5Ðgp% ^ýáâ )w{€` €/naû¼Ýó„ÏrY:DQ‹É@ag”ŸVElø1'8…n·â(MHó‚Î:‚z NÜátàO㘦°ÂMÆØ\ ¨Wà£.À£ j€s£œ¨Í˜2Ðæ÷ ÷æí`$ mÿHÃXéPy'Ü€b@@E°™À7>-ð”D¥;E©¿•EÂãøÀò~¦äŽí.¡Ç0’€Ëã`=Ź2Ðn”³Á½ÿ "oE¹gB^ÅåÔ!׿³ÎCy0ÄpÀ}÷KTÌViñwÉ¿Ù$€î߈ƒìtz?3q]v—€ó]Éñ§°Å¶>~žDÙ@5Î ô!€)€ƒ.È nŸ_(%óêœ%9j€x1€zà9õá2`ûΊåo~š¸;Ðcp-   ¯ ଡïÛ~:*©N#OírµŽWâ°)S0“„Š% PDƱƒ¯T‚ÑZX`», u’nm‘³VÅÉô~öïÉ8€¦Àµ€vÚ‹ƒ‚X­â»+€û×]ÜUA ëF@=¨Qjà“’¸s‡É¶21=^cRŠœ8¢àÜ=58€íA€uÇ3·´&€ìh¿ô©¥òÂQ€=ÛqGvß98ŽäåÝÈü®tçŸ"€º 8XȧQq1µ`¾•Ý–\ºoa|ã, *G$0FŠ.8%QK6H¿»‘Ü©õ*Uxaàfä:ì.li°Úd G»UPS§Ú”à0n‡üb$âað…I·%I7 ¥Hr8œ ð¸Y”_¬Õ%t‰ Xö÷0plp5H–€!!¸£Ù€)€‡8Æø²4õ \“ƒ_ Úˆ÷÷%Õ/fþðÖ^‹;ðæšþvCkÕj§²Ì3ËŸ›ÇKïgÿžŒhØ\ ÂpmÀ¦O@B™¿;x¼1LÇRÒ…xÈFÞxGôGÞ†Û·ÀiãBy„@i±Jí•ãSrm;€Ë@èYæõ= jP¶<ø/À•·"Ö$¢Ë‘€0*O!v¤pyð‚¸dø¥¢Ó*g,0php9ð¸6`hw–!´ ÕãÊÁ/À@­0Ï+ì¯(‚¼o¡å¨~¦÷Ñä+·ÚµÜ½#ç¸*uï_ÎÇÙ\Ð-xly àI ^«vX”Ö·C¯ÀµÊò‹à9aͧèP¤ìXT¡’e›ü˜%¼š$Þ‰€=edžÙz1›%N‚ÒûÙ¿'ãªv×€.KXµxÖÀû¢ÒIÜyÄ €XPôêMZÀÀš($ûùö¹dì"~N—]™E ;ÉxUÍ-?¡À@×ì³|Á(@Y¨€7(³ü†g ÛÛóeÖ‡”«UóbVsi1l’´øBP5 pa¨wUêa5ýÍÅØ d6`½øÜ+9°`Êìc A{°å|MƤl1P,Ÿ:[¥ÚEc ÍkÑ6ñÝ­*Ü#}îëÅ?(ý'óe³¦™ÞOfœ жÀ`481 à“@@ÀgŸ€ëòñíÛ·sQà$ïaÂö-æ«©(^ölí `iт›vA¢sç ²©ÍÊ6 #UwYôOgüðé‹ØÝ§„Oƒ‹ž‘¨ØŒÉ+°ï°<ä²€G °ËÙ·Ùíþò>vQÃçxu¨0Ûýeí òö™RhDb¿LGd)Šœ9€Ï…}0íχ>œÁsvžÌ–_`‹˜’¨Û ¡ €†À’@xÉ(@K@2Ø“®¾#€½Foõl¾)ܱöŽÞ v`»bè\´ïeƒˆ BfÝ劉„G _À'èÈ ÝSzOšñj}2r)ï»H¬0в|Ÿ%àëçP 6,…Ì~rLyX˜5_1ØcÙÐÁ-†`éæ"ÊÞö›%z²ý—=‘K+?"Ó––ƒ ¬p“q¦Àˆ%`¯C#óWr!›#ò0à¬"6i¾`°l‡e§xRâä1~MÓ#̃¥\ºƒ‰F¤j¢O£/Ê‹üN: f0t-ºDðù²Q€Ô ¦u‡uåïzEËì-¥‰ÜùMÈU…ˆE¦Ûï²q¾ý¯<¡<}¤_T^˜ˆhØ ”h.Ž@ ú¶ª£À ìJÆÜº¸ ÿò`õ»n_»óZœâC<.Rä© 8ÃRe i ¢iSÁÑ ¹Ò ;ÁP[Žfܵ2?P·|ïòàe6à™WñÐ(@d @î\0–ü÷ ¼Îs] ›N«Œ@þ˜XÑ„Ê@ò£=€Ú•ì(ÇùV;Ÿ[*Ül€a0 |èrRɽ‰ B>r”HÀ÷æÿóñöddx¼†_uó³§” ’SÐL9Å: ¨R( ~³€¼G;$,ßg_‚‚Sr¶À0ÀÀ‘ˆv÷fýÏn·¼±–è§ Î¯ °s|r+ÐÉþ>Y…õ_ýÎ ¾Ewœe׸[¨x:Ys'[roEy H­ÁÎÐfóÝî™9€ªÀ0@@ŸÀ®þ½ÿí#ÍikòË@ðžs` &­S†7æëøÖ(¬±×I8s—_Uv²(B)EÉ›zÆÑ :›ú-ïÍsEnÅ"±ÇtäÜ|@Í`èŸìˆˆíÿz PEÈ4jice Ì€?€_ádàÍ:ÖãoúSiW‰j £¹It±HI<Ì6»…“Ù2“Ô²23e3W8? ìÆtf*°›šH@<Êp øR’3*UÛ_{óÊÍv*W³-YcGAuK aÄIP}6 UMT—9I>Ëþ3%`Ù ‘.ÀŽûÿ¼ýë_ÿú3õŠ@+Ô?7ÁÔD!€@Fà0«sý½5cµ;Óú®EŸÅÀ3 Ù/æHÔ¸ JÚ0bïæLpVx[nk]ÇrÁwìaÜŒ@Å` .ÁÎv’ ]b#ôçs€©®þflþ—93&»Ð £U²ÏŒ–+؇R*A^#2q&ëb‡ÿÚ:@<­ÓÛb>À¶ Cñ  qùû‚ìc¾øæª‰]à@ á›Ò^’Q’Ú×pšœ $¥’e …”¦p Éšõ¤¸Íp„©ÍèfúhØ §æøñ#ñ¹Ÿo"äê)/ß—µ ¹¥wô´›}pZo_~s–ÙQ^ó‚7ã9¾ÃToí­øPD‰ÐÒm=U n©B–Ø Až"䜌°ì€@é4†ÿ«[×2ýÿ  –³‰¥Â€IÀò¾@徨Zê6Ó))pêB•ŒëGÿG IDAT¼™ãzÿÍíO¬@°€ÕMõÜÊÛËhN<f†É7køeî„:áúlJ b0 ÐÕû,+ËP¹Æ_×\€{ÛAÿ<âãÕ w†7õÔ½|ØÀ Ä–ÝÙ™÷¡ûŽ‘€§›8£ ÿÅ••ëu Õ¡åÝ~LÄÔíF\¸E§ÃàòŸF#8Éå™þhDáû¥7'ÁÒFÓB¦ K= „ÈhJ1 ôºÅ¯È³}7ß“6ð2¾ãb%ERØÿçãªvÃ@ZØŸàN‡£Qü€‰»o ½£ kd…Ì q4Žu#’@Ò P“èl@~‰ÑÍö_7ÖN\ÉSæ`ç.e7àeJ@Û tqÐæ\€eì/– gÊ\€YÂAÕ{Éý%$m5‰¹È˜NlU u9 ”íÃN^H¶×T¥ÔÛngåHdÌ©ž’³’Qñö0%`ÚŒÀt €å)P΄vÆÞº€íÀ;WÖD_±€ý ßóç«ýf2‰ÀØøvûo=y€¦žrÍ”%âe0P³ˆ%`]ÎÜS]€“ ªeÆD³™þ˜ø¼üæD>èÑrÎ’²«$}¡Ò£Ó‘íþB/îÐaÀàY”ˆ¤ÁTåöV‚Æ3cŠÎLo8ã\€ŠÀ@à» ²p·ô·Þ܉¿{ì“£~á À„`yøoÕíuˆ°˜BT&ô¤¿4@]ÚbõR )°aç„Þ‰hY²Â¯ ch Cò õAF~:@Ú è°=ÜîŠXЧ9hý‰C™Âûdß™rhoÊ–‰•ùVK­P?ÕûFáá¯ÇþìÖ,Ý/DBµL¨Råû¼Ùv49SÉÄ_$3†T=€jÑóœ¶z2gö³è÷ÃS"o*~e0`ÛŒtqУ.ÀÍÿ õ”M€1úpõZ=úÆå×ÎZ „HÉJ4`´ÿ 8º2"h4ÿ†¶Rwâ/’SWkµ…×óç™0í†äÚsn”{Š£žrÅ€2s[¾8ØÂâdå®à¢œ¸ÐÙi©‘·†Ê”¦t-,}µÃ/Åĉèø]Õ­ëpÆR*26ÍLF~:€Û "€c9û<ŒaN+p !ÎÌÅ`#ø ñ~#ZE†LÍÀZ¢£qœÏ]PÝ\TIÕzëé­1„§$Ÿ)^5%Põ0øl x4àÉÐÆÄžd±°û˜å>Îëï,_j:߆ԡ2ž]ÄY«½5 }úòÅ !€ºú0‚nŸ¼(;3W]ª!#€‰8€–?€1 ü½·HÀRVï¿i6ð·lᣠ82 €¹ÀûBC’K„òCA1¤-¸Õ3àI¸ÅfuµÐNAM¥$²Ã´*É„FìˆjrÍ<2åHwæãþ€¾ÅAKUØàÈÿéÈVN’ ¾M€1S)B¿ô¾KU0&@p@7ƒLŠÚġ޼¡#³ciq3Úvúi<]=bÓ¾ ËœqšDÉÀOÇÔÖÐ)h8 ÛïE»®Ûº®ûo܈ÿ[:¾Ý¿ï±Æ¯ü·ŸÙÚ¬…!€4èÀصœå Àkï Å@7«Èœ ÄA,*Q‡ÉЛ8úô)@–€,®Œ®“2N‹K¾‚Çvüep¡/„˜SruF€Ðé8…»<Çð¹ÞúmÿÝØOÜ¥ÿß–]Ä4ªc¶äÿƒµÿs!€E4ª¯¼-þRÙ!k6NH™}}°úŒüÞh£ÎŒnµÿrÏTh:›L;ÕŸ‚5=ŽïÆÀD@ÝÀ(àI c¸=æ4oFïOYìßë2¿ŸŠÿ»N8„ÊÚ0,œ˜Èà]€*ª­ÅÔÛNü‰tf”ªÆ)ïZj H^SãpQ—ºKµ×âŽÕ§ì*‚+æãšë ¾gqP(¯Ï»tƒDoqûŽôÓÖ¶$íM<»ë ,¾Z¨Ø`"°¼^òÙ=…<9&%ÏΦ”l;}úÃÅÔJÓãl@¼C“70Ú£‹`À}Q(¥ ßMZŸ7#?`¯ 0„ÎåÁã‹Û»ýQDÁOB¿on¹é_ÓÖÞûOš!uz@êø ‚øyfÒªôÚû.LºKÍfb¡öÊåcW”Ç‚£Ó³ 8|p  ×Ð|…oךAùŒN7¯'IW5‹>%Ðop è]8…]Àld%°wüão×%÷ âù²µo|®«LA‡£¹q\ð•x»‰ÄÉ;yÝ]½­ùF9ž—‘ŽÕ•V*êBÙnCñ —q–’hè2&”\%9y\=IÑbËgé!ÜÏÀOÇtÙ\Bçòà¹Â§¹8#`—þODaÿL’ÿy×ûáô-Ë@ΤQÎ̃ö kÙ«î*¿Kl( {‹0UzúeÄ­) ˆÄ@¹µTŽ$®’Ò·ÑyÄH\èuR:9gÝ{Ò¹½vº:p‡œE¡. õ‰ßôó¹,zy˜–À0 {–ã ÀD³_.øåž&æ‡ìæ–l9&CM`!’5Ú4:A!B5yKG1UÁäÞD‘TÞ<æ×ЂÍ3r'ì.tuà–œé×WŸXƒk•P› € À,$ Ž+*W¿X·À°k¶ï<™†pQÀ dʵ%ïf#1§£‚^s¸G€é’ý> ßà*à;=á¦ÝÔEMJ`9‚Ìí¹)ûSÌd-Ñ+oË_iå]ªöÙ)–š#Ï‚e¸ˆÂR­7Ýßÿ` r<öŽ3âJ¤Âs$’ @Ø&Ñ3ðÓqvWê ÙÐ:õú¯]Ÿ2~o` @ Šm°¼¼å/7•÷%âªÊ&—|«5¯H“uKS`|ŠRÀÕÓ‘RÏÚg¦‡TM g JXíÕœ@ŸÀe ×#Ða0úý1y…9ö³Ì ÂòB=`6ÇdÏÉ='.Qí?H°Ð‹Ôòú¼•»‚š“6êOa€;ÐEdËéâç¹Êa13˜ˆè¶¸ à(€?˜ ˆ¯Ï±÷/Ô8 ë!@[Œ¹»CÆL2=Æ+oÊÞµ ôë5ĤR 9IK¹`*RÙà1DЄÐZ"zÑžÃ}ëL1žÛx”Ê¿(¦:Ðkpè²4kDc¼¸hí=hDª«`ƒ¡æ^p;)% ¼aT€[+ãöWµvz%6å‚wêRq?©ªÙåyQÑÈä«0r΢”³øé8€C;€ë@ “š^íúÃKÆ”øC É€< À€)ì^(õÍÛ[m}GÓ¨. ;H[˯cQ¸Š@ 4u¹A¼Õ§·'µUÍùn«ƒ m½ž’豸ÐéÀÍaÀ'C£Ø€€0S(Ö¿î–NW~ÑøaDyZÈx3ó¦b·[}ºÅ8Ï×0ï"Û}_…Œ¡ý Õð);rо¦Œ&â:í.è¤arïŽÀ±~hT i (0Ãl@Q_wS£0»W,\­PÑà÷tê+5‚|6f­}3—ps­i”;š×FþÄE<:Sr}vWº0È  …,ò@þÆSðSzu`Äì7.Q ðõ•€ˆ¥£yÀ,qqúDÙ‘À‰_’x£N1\ùE€7!Z°ì[¯ÑD!Æ™…<¢È­V&*UÜÏÀOÇØ\ pi°Æ0`D(×DØ ød§ˆF¨ÎlÐ(­M^*b1ðv6ž•Ypµ OeÍѸZrä-HšTýè'/ –•™‘úë’JÍñ›*ÅÒs<¦¥PœÚÀ$& plp) Ú¦ÀZæ¦DW`!ÿ)R50ç0[ÀÒ¾½ëÏh'Çßò("É0µ8mŠ’«îÕÄ%æäl@~'GÅ´€K€EDv®q2G&dpÉŒCFq]v—êèpi°áGØ?÷¯ìSŽþy÷GÚÛ?Ë9 ¶#œ˜hE0ün¢m”›ä›œ>‘:½Ú>íH!„ûoA>õÕœ‘“zê•óâЧŽ_C=•WÀòÿóq=v×2ðÜ?? ·„ªIËÕ}$Ù÷l@WÝyá}eÝv²ÚÓ=G«;1uÑ¡ªDÀq3c?#ꌤK[q®²\;ɰ̟ù¤ò4 sßMÌ4í®} ƒx(¸Û!€}€Ä%-¨Ñ‚oC“V_¤D“ÏÎzÀnöZÉ;+^­µ.ý!’жDÎ . š-¿n´•rŽ €i9§’O»SrGvâ¨ip÷„¸­·¦` A˜á7Ϥ•%ò÷”Uš·T4 ÎŠÀ KNhIå­µºÌv¾ÄfP)2—žu<R8nYDÊä| ÌÂDÓùu9¦ÀÅ€Ìh#€åQ€X8 rE׸||µðe7¥­?«Ê2c·³Sf ¿,<¶„Ù–"`ª@´$ÖÚ€T¯pÍ€{²yÖÙnC›šŠn_ï:ð?2Xàj@æ4'!Ã1læá @CrøêÀ©á À»»–p ¾¡ñƒQj´éâ¼ãðÒ²eM+é’·\LPrÍZÔ»4CI¯+HCß’k¶r&#? \z ÷MËàjú!$ »éðc³ÿØzaŠ?¼u6 ¬¢P—^qO^ÛU" jÌ`%&’ªÅ5rCÄsß—ôåÇ2¢o¬„µ– +³<®(¥#•ˆ‡'ã~üþÇï÷Oüûãþÿ?†Àå w]‚n:ïQXG‘¨«ÆL7°•ó¡·µEH7ÿJIÑ ÖÌ«4j d¡7'ZÉ‘så"Âìd™p¹–h%·,†¶ãq8d¾Ì’x¬r„¦DõGF³p?þøþÛ÷ý“ìÖÿ1ì.}³A«­ŒÃý€¬ˆ¸¢›Ã€VÊÜJls1ùà:@É7f]¡k+jç3¦XÐ’°µeB¶ªá»<®©£Ä# Gß)E~z2 üþzÿÿo·þmp=ðÄ-ø! ªGÚ‘…3ïSVëó’{Ú ÝÕ ¨‰ª Â_¢làì¸üèCnÉ*:Ûpê[V»4LЭç ÔŽã©ð4²“€Ÿ„ø ྃàv׀е0ÈBºPí#ʯÀÜpt§û¸3޲ò‚{Ö_— C­×&H± ²­;lÅÓP€Òò.=KÓ‚g«ÝUgŠIkE#CA¨ä¹îšŒ|ÿ*òÿÛ×¢Gßé”’€:ïÇ ¡0Ûl@ÕL½ú¶®Ò2ZàZ‰é"³.[Sg&Tƒ¦æ(@"k¬|¥¡oœ¾ŒB“=Œ+_õ e0 pW¾¾“.ÀP@gú„(P8Tlí¾ÉÈ«­ÃU¯°ª¥·#Qm*"CÖ¥Èë×¾nî{Ð’àºô¼Ý`sÁ?Ðaæ‹—ª¤Õþ³»:ò?ðc·†@TŒ¾si°ÃQ€ç9° ³Ì4êв<™æñ=M˜ ù© 3«þ²™7˳Ä]*¢cbpv&mCõ‹ÂâŒtèwÊË‘Ó:©ÚSaôJV®|Ü|Àn Ì€°(pàðq°4gq åƒ3o#E´esäÍ+­(=ÏTA;{TÁªr¡ÍMÚ”VFÜ"^ªSûæ´u6€ŒBn ²Ä.¡i9ëÔl@ô 埰H;€!€® 8 ¸#ØK…3ï› x,T×ßÐ1±#õ¶”ž'¢Aÿm,N÷t 6–p¤5>ž·¢8¹éØýê92ôG0Zód0 »ß3øÂ.ÀP@ý49€'@CŽ8*¶¤j× ¤ZµÐùÀ›ó†yᷧͪŠ;v;O~YJÁ7YË X ð<›épáØ{fùªÜÐÜ—¸¤vyQÓÍØGv Ï–vc€ÿïWç(€û†Hû?Ïl@³ö,O&z|SSpƒçL7Ò$¿L&&Ÿª}Î)ÌíJQåÕe*ô¹šwq46^+#9–’Èx94‰XNdà'áÂ|6°°Âpi°PEÚî‰Q€£€ g‘ú®qùàÐ%ƒniâßsépi"­ŸV4D…Sum˜å Ú¦Ä4ä\&ßtr1Ñ -  ÖÌ‹?ðãwâ äKŽ !"?ž¨×_Æd É€7(.Dp^t×ÖyDz›L&fL€å-ø†Ùtʋ̆»pžÔ Çò¡´Ê"¢UkéùAgGuÆEŽ<U¨LÄP@Â`@C ƒ†v ` @Å:`yðG,nUºey"É®›âMX¥5Û3!ú´â+aU­;MÁ”xgÅdyKG )á>TÙ3üJœ€/_§`h-‘9ónì¶xp:`Y—è dkí20 p0 ˜Üû޳( À,³­VÄ”«ïÉp:»!ÃïBxtÕ–G•ÒåôåÕ¶2ÁƒêWtaH @j¯O«[qډǣ2mb [ÝñÇYæã”Cb0 Q€ºœ¹å [V¥‡3 ‰p}÷;€ÁâÞú³áDÍ·°v…ø“æ·ÖŒ£Asƒ“Œ¶›+G2+šòr¦ª5„ZRb]¨QIŒ8 Ú ¾Ÿxxà˜c6 ­C®Z㮿©FÙôÖNqìœLMˆ‚¡ƒUko¥$1„?//à #áƒ7êøƒª„*È¿·Öƒe9€ïãÃWóÜW^à ~¾£À0Èd ¦œ!°ÿÝ€y´Ìh”5c¦˜ (ëë{¼iUÌÏižàœ‚êË¢ÒÕ÷bšÍ-"~K#_ ³\@Sé®ÃD²¥~SoD½‰#–êësäŸs/PÍðõÛ×þûŸûç¿ÿ½ÿ$evã"€& H8¿Ø‡ ¨kÆL5°Ö´ ½¥Ò5âέVÍq`¢Èµ‚2q-»E]=9Ììͺ¨P“é:Ñ`È^‰¼Ê-B‹HF.ÌÀGà/ðÆ¹øý¿Ò¡;ˆ` ^«vnyÂ-8XVƒš ðæÙ€¤u’Õkœ PH¶ÅÅ…¹Xµu‹XKÍn1e+]ËþÍM4$ñŸN`Šƒ‡@²åR1­dU¾\HŠs_ßGÿ}ož»‡ÿþ7¶þ;Hjáÿëw0<àð´Wà“sÂ{gŠšÄ«ÞЛR,+«#¹Qz1ÄJ‚gl9ùCš’ÁÓÈ—0Ü€Y.€B5KzùeònÆ£Wž‹d•¼ˆªÂt$¾ˆ–@æîüûÈÿêç"à/áë{»À@€>ÛvŽ ¡íø`.cf˜ h‚Ñq­?¤.Úm¥ LédWÙq¬ÇaÆ”œuo}WŒR€WMˆ™ŠÊÕƒVPp`戼Fà‘÷Õ@‹Œ§¿î~¢:ØE÷6Ð¥Á|.9=DŒ˜g6 j2Æjuwúí¬Ã­‹-] ®¯6¶f+íXÚªæQ±n ”ÜX,r¥¯ÖJ“ëÝþ“ ªïE!9Tò•[Ä*Ø8í®³5 ø'ÀÎz¯ÅßÇ@èì,GðöÙ€¼åƒ£”ƒ ¼±“yaA¤Ñlµ8yÒh!ù¦“ñážÐ¤ÀºLѨûÔw+—10PÁt¿uÝØÿ9È„'€GŸ€âRü}ÐjhÉ\€ËGðÆÙ€¼5²êà{Ê}HWf ©£` )`m¥º³V ôb¦•Œ ˜6oÕ5Q+³Í€-AmÒ± 1Rçó!31QÿQØÊoBû\€ž¦ü±àŸÄ' ¸ŸÝ–€î`i°§F¦˜ (ª=T}Òn ¹'kòt ¬„Ö‚á–’rÖÏÂÔƒFö Àl¾ …ú„–‹È\€ZI¤¤!&¨3Šd ù‡ÄiZ¹õƒ¨!xš½™ïCì¾F"€ð @Ÿ€âRü}P;€¾ÕpÓÍØæÜ’É¢Py‰]»/¬1õ~ãæŽÄ-ùE€×;!µTâ˱¬  ä ^¾UnEoM•ÖþTÌâ0àØQÿ@Ÿ€âZü};€VàP*μk6 S2dáèËïÉÒ†[iÉ&H„¡rÚ/RÌT‡£‘ùIã@í”U~ùHÒFŽ´ûJä ‚Ã\~C`šÂlƒy›ÙÀþ¤¹f†®¡ò°} ø—âïSíöF]7 À€wÍÄêO8!9×ß“´²V ®åqQ±ä!;’©¤¢ —U´‚S÷vt°Ù„ÌR•£l#Güs Üèy¼ÿ{_cÉq×°'D „´€Òxõf´@b>(âƒIÀ4 ؉ã…áÞŽ ﵆HØH kƱt##–Ʊ¤¨%ÄÊ×?‚ fD äq"IQšmѲ¬p€HòðAHî’«ÝÁöSº«êœóSÕ÷Þ™{{v)³îÌíîú;§ªÎùΩêîº+9K=0Ê»·÷mÀ>3¨5e@²*Î Ï(ÕlÃ^Z]7uÍ1ó}i´RNS|ÐZš;x °á57ä]·šP,E帚PÃOƒ-·'à`ïÜî·•~@Y[«}Ù‰xjçh{¿Ã`T8_<¥ NÒ5€ÑËh0zÝù€wêW@º”•ãj€ƒ)À<`ÕçzjîÂñ6`ÞÙ%“ê!ÉæÔ[l¯hí¤Çh8±–möabuä nú-¥â \cܹ“§y™æ©”E@]Ôum«XŸ°äŽ@«?ÐAÐAåÕ<} ¢hû][€:Ù•Ý–¾2¤”qó%;RP@DQu4¬~äü3œ/Àš=€zÈ»õª€+$]ÊÊqEŸ¸½ïÜæ·ûæáiÎUx¥¡=3”>7EADÖÁÈs²¤ÄÊiœx lEðJ»ä €Ÿôh”>bô @Špfç+é"ˆ%Rìt击 àVuêbP †mÁÞˆÏdvþl²»…¿LޜؓI¢^À‚輚pˆ.÷qä3™£Oò ”–L’ÖÛº'˜7qdO@?V~ù¶ï°žp€ß~qù€Bê*d uá€Z¼õÇô†» P¯ì„=MY9®êÐs‹=€Ñ ·_æ]€Ûû6 RC=Ö—CL4¹¤Û•2†t>5õ7…MíÚ±O›Ÿ>ßd„»w7ª ²8ÜÍ€ IDAT½ û“Î/pÝWÑyµÝ—×QWÔ’¹ûò6¹U=îj)âw³;_¡«ƒ·QÇèðÝ*MW½§U1Úš@wwÜÊìÀE帲€Ïôÿ<8NŽ¿ p§¼ ˜ªE~f¼.R†¦ýN½ñÜéÄY'Ñ…ã/ʲxŸ¿®¼/ êO¸êZ (ÿeÄ€ú4îÔ«;°—•ãÊ€[æ6àdXî]€Ûû6`âŸÆJ@Ζ§nˆMÓ³uÐc­Ü)TX îs8&ê„‹šµ©,I|°“.šz»¸àõ8º¤–Dx’]˜ô± ¨ rBG‰1–U¿p0“6@w9Ô]·º ûpQ9®î,¿'àh5 ?ÜÞ·'Z¥ŒÁfú/zžLìÄÛd£=÷ÄÕÏNüs®NÎÐ÷µ\“ 7<× v»#ˆåêíÁ ¸5èrc¬›fûm31‘@`€öÖ­E²†¿ P¯Áý¸¬Wwä]€9Àh@¯"ÝÞ·3RÍ8¨È0 0WiŠZyUHIjb3ë†ăz’"Ö9™¨s ËB7pƒBŽ]{‡W¢¤ØS¢_G•eÝ/  *ÑÃ!bPbሠ¼€&ÐÆ]·/j̾&€žk8‰ÈÈðó]€A<€Ûû6à›7ÉjÒz(¦W‹m»ûßWdÙ&‰×3Ø^ðFG<vík¼‚Éyì¢HköÂݾ‚ò…'eëì" ¯B¯œÂ]€zïÀeå¸pá`RœäÓý6èÜ5€Ûø6`V»S>ªOÚîâýz¹‰¯h0ÀPwÜzí¬Ý¨á§Á\lŸ·”Ÿþ ìàð¹ÞÎp9@%£U^ÕTe{à\öŒ-Çë2¤ý›) ×c)÷ÐB®Ã†JÖŠdá*#ÊQÒó#ð |÷`õ’€¡ïÔkr´°vÀɯÏœ8,¶žÝ@ô Yø¹öÓzPÉyn` ÷ž‹¿xíŒzª˜)!í¤ž…­¹Ÿ]íbÄšH«/£ðp~áïÔùÇñƒÚ…›}!–ïëù§õo× ÀÐwÜš ›r\“ o.¡gqnÔ„«éð— |ð¤½þ;Ú¤õ4ÞÌ15gÍkÝÄ­"ö™`0|¡ë ³N2•ä®’éý„}®¥3’œ<Ú+û¸ðXoŸê§‡û ¸?¯¼ÿš¬ä€+ߨ×å(`ý€¼ XÏñ¼,ŒE¯ømoè[¢´eCˆøx7-â¨Öƒ¼ \YõP–NÏ Ö9Hú2dÜr,=Ï7QDrž¿Î·$¼q¯X4Bu #¾süjž3OòËãúñ®ïmYø.€[—€ÀÀ’»wƒ=7ã.LFþ„þ»˜fÜÄËî¬ mœ÷ ÚëÑ!‹¶#´3xd§ñ6`:Í­Èó7:œ!œIJÒSS>‘ÌÙ|•Å Ÿªd¢KaÙŒàÓâP™5§Ë'Õwì8€c#ð ô6X½Ì À°wêµ9è à¸%oŽF—¼a¿äÏ[­nÆþØø˜Ný›hû t'þ¬I寄º¹\äSzpÒ+ä ƒLì r4o2Ð_6£¸ó 'Òø<¤èòäıj¼0Žœ<~Oξc@À‰=§/VútW†½ àÖæFá,µ#Pê`ÜGæ tvÞ[ùNõåo¢}Ê‚W6p¦dƒ¿ hÕ¥'qªbhÎ¥,ô˜ýÔr[ÅÍÍ™ó§”S÷A;%˜ÕÉ–÷àżøÞ®^Tþ{¸ +ƒÞ¨×ç€0„°ìŽ@£‰÷¼òû³öÜ#À˜æüù‹ë…ã¬1Âö"‰ƒ=½°þ·•*ŒÀ/F~IeœfÛ‰^o•Z¦NÂD_š¬šnßP!ûT¬;Š:…û7l¤Á"‰ ªÑèƒÂŸþ À wÜúñqð]€¹‹€~êߪû¤ûoÕºsóý1š~eûÃŒ`}ƒ—BÅwDv‚c°î×Ä9‰CÐÎÌò)fjn +_AƋ׋“L¼¦A“N*€NIç‡Ýù7‚, ´6X½ì Àwê5:â âÈ»ÞòÎÍ%: †Ô­xoÄö Œ#,Ô&ýœoxHûnëždu&\#h“v¾`‘s’f“‹ R0ÒŽ4‡á©¿í:¬Y|Pì°c;î”Õ#QW yú+CÞpkt1‡q–ݨ ã&ŠI§cïè{Mÿçï Œ|J—u‘:@­¬ùm@«\ Ðè`ƒg¼®YG&)õí͆~·”Ê•Q á ƒ98Ô §]ñuT+øe Qa‡'ŽE¤1€òþ9aà€ïÔëtØÆÀœz/ï6…SzÐÈsŸÝ\ˆ^Ǥ‰þ;;Ù»nª?gÑœelú\'G˜éãÓ’±SàšFɯÐ \…Þb‚XAÑ*‰%;Õ€ï¸u:ä äÀŽ@5ÍãF¹{Dˆ$tÜe̶ÀÆíìmîi¼ ˜Ÿ5PyÖ©÷‹ƒ™®÷šô¤ £µÞ“ä[%óùŽó[n»kšÌ+úÙFàÔÆré²¹‡º P¯Õ ` @ï¯å°ß”CbÄàd„Ì qC¥½€lŽÇcø·SçØœ[_y­d{¦†¼:Ó ¦xêŸë%ý‰‰ÍTa= ™p¤Î’Â)ÞÐ=ŽÚ¾0Ü]·V zC95> ßév0›Òõ+zHUÏ#hÌïW6Owø·s:C‚žÑúõN”VÀðE'J{'J%*ãôè´¹˜$ñ=x— ˜¾°:ù½lV» P¯×ˆÀP€S/5s•õ4Âðo&ªÐcŒ‡™djÛÞ7I\”‰Vî\3,’è\}¾PŸXÕÇé‚¹Æ `üqÐ8n¬‡Ê«„¨Û¸0Ø]·^ . ûúõëÀN¶æ¸=+§ò6`ê/÷[¾P`’ѹ,'Ì›šë JL@Ûmmi¹t) S°o²" d„ñ7úŠ:f~Am,—®'÷0wê5;ÁÌÀýâÓ@ÔÕ¤ñ ó¾¨Nå½]êBTW5TÚ ÈHý6`N-ÐÞ)­#I_aždX&&’ĪÙã)ôù¹H *ñÖ‰ÏW6™t%$qC÷8jwþ ÀPwÜšØAi Þ/ùwhcGq§týD@^ò¾/tçç ÃcTìžß40Ñz`}‚5Ú£>YeV'!É–]RèwYT[&6¶—t’™C`¬N~ÌF¢ÂOœC`cxWº P¯ÛðÀp€ÛÃßXj @žå Ž€üô+GÄ8È¿ÍÒNémÀœÙì›~¯™n:Sý›K|=[ÏVj+4êŸ#Å`ŸãŸáHÖR¿lVº àÖíĩغØÔѽ\°ö„B×E—Ű͋‹û¼ÈK 5ÄQŽðн­ôm@´^é$W«ËR:pÂaúLµµülìç1„†5ZŸcËC~ 7ùãw\x¥kÞÀŠf~AmArç¬ s ^»Ðy:j0,€ß”Eâà’ÔòûKtp!•ã¼ÖKj¨´†iз• Ò(Q>PµNÔIذùæ«{~‚`ç0}•ú«Ò™¸ÿ9?cOúã¨w]­Zä.@½~ s¡©Ž½%ØkÀÕüC°`÷åÇaéf\Ç\´ÀS²aÞd-ÉJ»Uª¹ÐpÂ=W½\Sl4w‚ºoþ^"à:dœÇg`©¯ýëÀŽF ±ò*!ê6¯ rÀ­ß¿±‹­ß€ßpô.ÀÜ€ÀQœÓÃþo¸P#茋š;ìm@^˜‡K Üz'Þµ° U{¢¸RìLFFc'ß"ìyX–&aSq2C`ÀËIÿÀ\!_ŒÀ/¨-HîÜ€!îÔ8ÝžjŽÊ­ßpø:°üDi|ŠÄmzk7ü¿ã[mõV¨as¨+ü€·5-ö ¹NM&Çk&œ«:q8!ט)œZD(%Ýaz!Ó'ñ‚Æ(>ô²Yâ.€ÀÀýp`O@ßÍÙ"àÌ ÇìÀÜ ÀÀoö)SÞå]#PuÚǘ$j5Ç÷‡}¢¯'º¼¦h+í¯[)ÒI¯hoŠ žxY¬ p ÂÀýpœúyð…k =pbP×Ù¸EãUùÛ€ÆøM¬(‹¯ŽJ¶& ”fÞÀ $÷p’³ÈŠf‚(Ø®IO¼TÈ’ë0ØÜÑÈ¡!FmŨ۾0À]7„û á„'¼ °h@fç8 *‹u¢ÅÍêmÀQ^§Qµô[ÃÕ)‹µOˆõª6¥¡=V­È˜ç Ò¤š›K¢ S©_¤à„Ä`þ~+j—øE¶Ä-±°þ»õ ì0„ž¬Ãƒ@ô.i|ŠÄä’|Ë5—qÇ>Ai/ ´“ŠOã·­u!_³×Ÿ!,G¥f¡2.Bot¯nOl''€‚Óˆ¤ôDåÉ¢1Š9wg¯¬ÿ.€Äýq`CwIðöôV†z0¯UJä%‹v—×rV<Ã[Æ÷O#4~¡wÊ›qgn²ñsç>!6"Ô A’ßxy¬¬ý.@=Œ û âÔz  gàO1 ò6àD–µ£_Ñy}`]]¹¦“Á`;ÇcN=-@#$ØÉƒ…­«§ÔR¸…|»·”ÆF²©R*+ÝcÅÀŸÇ;Ù©Tl/¨dÚíº›k•Ù9ìPb«kþìα Kòºæ¬~À¹¾æ‹D©®ç†BôÊÁ`ÕT¡3Lš£xä8ð–Ñ#}ÂÐÄ:®†ÿU“©ô<'o®¹g—TÒ͹iUc‡Ø†`£Œq©j@?Âe8Ôîµ­ÜA­À’!àÒ8|$3ÎiæLRîä°ž»u¯Á ÑuNÔâ8@Ü`(@Ön÷@¨àŒ$®œ¹ß9ÉbÜãµ é´&QBžì<$±€* mp”û‘’DmO‘q5p,-ºÝ‹Ç'ó+ßp½ãVtä×”qx ` NN! 4RÄj¬(q6ÕC¶¾ž`ºê èé»ГáeÜêwêူÀ`¿ p§ ¡-8y`î • †V‡NùŠÁ(V$ÁÚ¦—9zÙ®¼|ƒoתwœë+-uB€vÛÈ `Q1Ay16GÇk6¯êÄv •«…Dî_YHGhåqKto:+‚è ‡¥„l«3ê¤äÍÕ„Úh.{>¦ïV¼ P3é|Ê*€ß`8@<€ù)à 1 ¸¸þTké«ÍùJÁ™+¸$‹q×”|+M¢„<Ù—Ç @.–H -DÅk9' ®±”ÕZ.´>)y¶©esêï²®xÀ¥=¦Rt9JYNÌ Ý ¬œLC†.ÌqU³ìu@ÊîO’‰úÊ$-þ੯$œÀqåPš«2-ádmtD¨•:G¦\?;%r[ÚÌ¥®¶Ô‹ Uû1÷*knH î <”žÊôV©/ŒâkWCkef¾2•j°äGÿxŸœ‰AÉQMeo5Â}-–<ª³t«ÓB‰Þ*æñ =Zšü¹žÎÖ‹ùµv£´èÊJEÛ œa•Ålo$l* ²ò€!”zFç‚„uç:qWà¡ÿ À|=å`åb%5̈¦‰ÀŒZÖÖ€À²c”O·T$Zr)–•öeð¬ÄRFÑ}F”T=Qfò›ªà3´ÂÞÞ^œ¯²àuh/Ý¡€ð(ÐÜ.´2ÛßÇ+‰ZÙg O\q¬W.Kø¯òm\‘¤nª$ÚTQD*Œ¸$ªXªžóÚ¢¼‰²'_jŒ“‰uBÀiÀI‰@¸¾c€°+ðp@û}á=ß“¨ªè¹Õ%P³.µ¯2|fhÝaŽåQ×€WñLmZ³³‡\þå*Ÿ§8´I½ý=Ѓ@–áLOÌa¼³0]è M—íÂ{  Žoè´áÂ+á•ð÷:œÜþî„·‡tºï çÕG_Äo9 '}AãÌLņ ¤ÇËõ¨ö<|§¹ølFÎÃWÂö"³|Þ·×¹—’ç!ëy© ­EEþt çM KÀc…HÈBV—DôŒüXaLä ê—<;¼]ܲ¶¸Ç ëøç†ujûÈ„yfÊI•'qHIã̶bCÒû^!@µj’\|6 #¾žôxI÷ªâö:× '%duRAZ‹*ŠüéœIa ¨mHŒ"! YE\Ñ3òc…1‘7`¨_òìðÆJOúK×ëqüsÃ:ÎàˆC`É "@dPH*Ê©Ì9U ‘Ì• 85q>¸Á@Q`IþdX±´K®Yeóà°3s GFð˜ûLøQeQûÐr'jÊÒÐêàäp™G#oÇBƒcXã4Xå±)j˜NâÔÅi8@ "€X§lí`ˆ0s?ÕXN!Ö*pœ’`Èí¯[(C‰µé¤À‚fDT J×É5›/ŽÉ¦kU°†:€(,ª N@Џ‘8b¤¡V䤊کC-‡„KVvUÎÈpÊ<$i¨ôå*#n•Ǧ¨a")ì/” …qª] “3Is¤˜128âXæ2îÖÈ %4F˜¹‰–Sµ §$rûëÊPb­Az)°$€Ý‚Ò.¹f{ â¥Ó±3µi†œ*è ` ‹jC-(EÜH1Òà9©ÂÕêàäpÉÚ®ÊyN™‡ä# •¾\eÄ­òØ5L$…ý…r¡À§ÊÕ(Õ&iŽ3¦?FjÄ…¹Œ»N™‘„†3÷Qåb­Ç) †Üþº…2”XkA ,`FDµ t\³9PñÒ騙Ú4 Cµ*XCÀ@Õ' EÜH1ÒP+rREíÔ¡–CÂ%+»*gä 8e’4Túr•·ÊcSÔ0‘öʆGœjWÃäLÒ)fL† Ž8…¹Œ»µ2C fîG"‡åd­Ç) †Üþº…2”XkA , `FD· ´K®Ù¨xétìLm…!§ :¨ˆÂ¢ÚP J7GL€48ENªpµ:89$\²¶«rFÞ€Sæ!ùHC¥/Wq«<6E Ia¡l(`À©r5JµIš#ÄŒéÀ‘qEa.ã®@f$¡!ÂÌý@Tc9…X«ÀqJ‚!·¿n¡ %Ö¤G ˜Q-(]'×lT¼t:v¦6ÂP­ ÖP0…EµÁ H7GL€4ÔŠœTQ;u¨åpÉÊ®ÊyN™‡ä# •¾\eÄ­òØ5L$…ý…ò¡€§ÚÕ09“4GŠÓ!ƒ#Ea.ãn-€ÌPBc„™û‘Èa9Y«ÀqJ‚!·¿n¡ %Ö¤GK˜Ñ-(í’k¶*^:;S›FaÈ©‚ꢰ¨6Ô‚RÄÄ N‘“*\­N —¬íªœ‘7à”yH>ÒPéËUFÜ*MQÃDRØ_( pª\Rm’æ1c:ðc`¤F\Q˜Ë¸ëIhˆ0s?ÕXN!Ö*pœ’`Èí¯[(C‰µé¤À‚fDT J×É5›/Ž©M£0T«‚5Ô DaQmpRÄÄ µ"'UÔNj9$\²²«rFÞ€Sæ!ùHC¥/Wq«<6E Ia¡žPȈSíj˜œIš#ÅŒéÀÁ‡À¢0—q·@f(¡1ÂÌýHä°œ‚¬Uà8%ÁÛ_·P†k Ò#H%̈è”vÉ5Û/Ž©M£0äTAuQXTjA)âF∠§ÈI®V'‡„KÖvUÎÈpÊ<$i¨ôå*#n•Ǧ¨a")ì/Ô ¡š*ìã\tÊUMbå €@„Â\Æ]'€ÌHBC„™û¨Ær ±Vã”CnÝBJ¬5H 0#¢ZPºN®Ù¨xétìLm…¡Z¬¡` ‹jƒ"n$Ž˜i¨9©¢vêPË!á’•]•3òœ2ÉG*}¹Êˆ[å±)j˜H û õ…B†ÈQ}¬ë¡NÙr$‡PÞ D(ÌeÜ­JhŒ0s?9,§ k8NI0äö×-”¡ÄZƒôR`I3"º¥]rÍö@ÅK§cgjÓ( 9UÐAÀ@Õ†ZPЏ‘8b¤Á)rR…«ÕÁÉ!á’µ]•3òœ2ÉG*}¹Êˆ[å±)j˜H û õ…‚G¨¦ û8×#rU“By ¡0—q× 3’Ðaæ~ ª±œB¬Uà8%ÁÛ_·P†k Ò#Ḧ¨”®“k6*^:;S›Fa¨Vk¨ˆÂ¢Úई‰#&@jENª¨:ÔrH¸deW匼§ÌCò‘†J_®2âVylŠ&’ÂþB½¡à!rTcëz¨S¶É!”7 swkd†#ÌÜDË)ÈZŽS ¹ýu e(±Ö =‚XÀŒˆnAi—\S§)ft:v¦6ÂSÔ DaQm¨¥ˆ‰#&@œ"'U¸Zœ.YÛU9#oÀ)ó|¤¡Ò—«Œ¸U›¢†‰¤°¿Po(´\êQªMÒ!fL~ ŒÔˆ+ sw2# fî¢Ë)ÄZŽS ¹ýu e(±Ö =‚XÀŒˆjAé:¹¦NSÌÖÒ騙Ú4 Cµ*XCÀ@Õ' EÜH1ÒP+rREíÔ¡–CÂ%+»*gä 8e’4Túr•·ÊcSÔ0‘öê…L=LÎ$Í‘bÆt`ÈàˆC`Q˜Ë¸[ 3”Ðaæ~$rXNAÖ*pœ’`Èí¯[(C‰µé¤À’fDt J»äš:M1ë¤Ó±3µi†œ*è ` ‹jC-(EÜH1Òà9©ÂÕêàäpÉÚ®ÊyN™‡ä# •¾\eÄ­òØ5L$…ý…úC¡ŠèQªMÒ!fL~ ŒÔˆ+ sw2# fî¢Ë)ýìVÆ IDATÄZŽS ¹ýu e(±Ö =‚XÀŒˆjAé:¹¦NSÌÖÒ騙Ú4 Cµ*XCÀ@Õ' EÜH1ÒP+rREíÔ¡–CÂ%+»*gä 8e’4Túr•·ÊcSÔ0‘öš UF“3Is¤˜128âXæ2îÖÈ %4F˜¹‰–Sµ §$rûëÊPb­Az)°$€Ý‚Ò.¹¦NSÌ:étìLm…!§ :¨ˆÂ¢ÚP J7GL€48ENªpµ:89$\²¶«rFÞ€Sæ!ùHC¥/Wq«<6E Ia¡9¡(ØÚš†Ïtk«;ÿ>Š“0e*é¾ÈЇ ]\LcV>Ý 'M_ÂVÌþsAÁŒ[˜):Ñß–:וå)l­@-÷G¸‹uõeß~™-ºÆñ›N5èôn¶lÆP”‡EøAÊR—°¸Eq‚˜ÈgšùßB9 ©BY.RµZÞ¨ ДôCÍæöY‰8f°Êƒ)B‡šºÅe–"ÐúÂÑf¦ÅtæÂÇÍÚà⿚Q¦8I÷E)º(¸p1+ŸÎ DÓ—°3‡ÿ\ÐE0ã 3EB'ú›©s]YžÂlj¹?"À]„¨“¨(û øe¶èÇÏ9M:½‡›™ÍŠò ñ°?HYêgÄw ˆ‰|\æ†r@R…²(\ ¤jµ¼Q )釚Íí³qÌ`•S„5uÆe–” sÅŒµž ,¶fvƒãÛÖ±­¶ÝùzØ=æ¿øè•ð#VÓ•rÉPn€Ö3ú±™bêà§"äw'2?IS©Œú‡rÌN¨ä9QxÅ‹Êg3Gxãß•HªYåXC‘Rg¹ï«ltrûŸø`hÀÀ:Uˆmàl&æ„­‡²dÚ¬¡¡ã»rE¥<€XS`ˆkT<)b†8«‹Õb”n!an¯¡lCcgÔ“…ÑÈÑPGãVÇÇÕÿ™••ã üÒâ[VèÌÊÍ6n³Å‚é̪d÷µ)¿•àã7KI€K"°‰Ê±©Õjš¤¹ÓZƨ•"B¦/(›RDÅÂ*0+çTÌ<ÛföÐ •U£Ùñ¸Èt’&^øý§;«Ó€‰t°’2­‘{tT”3[ÆÒ€T¨F ´¦¬WêŠRÕdº¡¬4=`Û4Ö7$—u™0uU€€êd¶|k1Ìbì&) Â’âÓ[€èàÀ–“îÛì›]vÜ[‰lv‰áO"1Û&FlæSçWiJw燒eŽ Ìw‚¿ª<§5QÓ3Ô@øË Ͷ² ,ÜÿÇ 2ž)éy…Ò–,;?׸¨&·‚uâzËLÜbr9—ÌÔ6$÷^…ĬU«>ÕF¨ct,Vc˜*IÈßЗZá²R»©ÿBÖ"†t•n=Ë@¯lÍi]¹¹l‰H2”—¡h²ÍÍyìaÁ¢å2¥—•ù˜ PáÄZõǺBk8g oEÑäÛeæT8\.@(@¦HlÀÔ‘:ŽN¬~½Eç(ѱÈm€ÖG  € dEq<©\B]Keê '%Ü0õ•E 0²Ïc9Ne¥€®óŠ^'„ˆ7DH‹»¥ääêt=%&(Shì &tข¢ˆmÐ4JEÜLÌ0‡«ªJ³ŠQš=Ŵ꫌áÆ !ÄÓfb–ª\ED%¨O÷5—=yç}¶ú‚e¬?ÈHO¦¾xìµ Ðzœ„i)Ö]”õî~ÄÄbg»WQ"Qž0Ï_½š8†Fp«¢nzC½J<“Á÷ ê=ºµð/”ÜH–k,FŠJÚÊÚYÀØù³¢éø¯×|*%P= ýòŸ*9v¹e‘3ƒz°º(Í%"ñ=VÿûîmFæ*©@‚i,V_U•53ÀÑ­\QUªfì”X'Ѻ!34ÖÅHrN(É‚—­—>S}'€~’~ÐE׌Ò>O‚cô.@÷WøIHéu¸'(ï’ÚÓÙYl–œÆYÜ ïÙw_”Ðà9nÑtaoo· ;;;WÚ0 O8],æô_QÈÈ)±x¨_+ŠeF³/8™t¡8Bß–:EÞ†°âZŵߢ‹§ÓžûDB>¬—i7ÒËá¬Q=ß­ËÄâ› < ò¤™Mkµ„N¬ìE¬q32Ôyþ:¨ÿ}ØÏ>ûlQNÛê=ɦ;MúÃçØÄÎ*ÄËfÊÌ&h{<+mO—f’ ©q áää‹€­ÇI@;HXY¦¸˜Cª¢¥;eã¿Ûs?tÞl·_M0xMÆ`Žh P†»±Ûƒ…¦ sù×wCüŸ@‰Z! ?Ý=†+ÿ%@·R—Y4‡?lõo¿C€+ÛXçÿbº3-JAtéÅØ Žú÷˜ú±ÿBmçH<åÈ&%só7K[\u wØF¸`7Z øl¸¨H#ØQ(tdU¡XyTU%Sn┥ʇ2@$¦µþÔ<ûì=ÔtQ·(ž¥•…c\ì¬þ´ç]œ÷¹ Ó²&~Hnï²5P=3T+)ÞŠÍf‹WT¼œ7}Ì´yÑiìôÿcûس¤ÞQ*Kâ¨óSÏ[— óy\"s‡d8@ˆ6Êäe`hÊš4UžIådÉŸŠRÐ%44°¡s›Dÿ»ÿèú)@ˆæ»Ýƒ@°ÂU´µÌ3~,‹Ö;8 úߣŠÇlhgEqõÚÕtE¡ pW^s…»ïºûî×4=WZÏ¡ C—]§ˆÔ7ξû{~"¥>/PÃf‰=IM•±Ìý•u0À{z^Ëèé“Âûÿ² P_Uàêå<¾ª/»à¡HCÂ.$'04×VÛ4ïtúÿ†G:û\“†™)•ïU6Óke«4›×'•’ÆkÄóLÿ· v-Å@@¯À­lt:DkÇ %Ýè/çSf±K«ÚäTõ3ƒB“¦^Ù(fÖh±Á߈Rì4ÍnQ\~½€úþâVwrµÿ.3Í(ö›æ°U¢øõºpMÖ) ûMz ŠýýŸŠrº³5ñgûû9\êïŽÔ<1Þèil_¬,„vJ1×*šä‹£¦7d±Ig›28 2×ÊWV¨âT¶„k*Î$‰y5Õ6±ªL†~²íÿ~ö÷y)ƒ˜ óU¤ÈAc‘Eþ¦fûÔ.YÀýn‰Ÿc¹‰Xˆæ5€F½9]K)£ñ6d zñýŸj‰»žË ߥ씬÷ÑïGëÐSG¥<zú'¼ ;§˜µ Sàb±íõÿõýU²£abùʯ!¶J¸wÅ?ùñï=÷BÀ½Lì`ï"ƒyhûp·,f‡;·]±yxØì“{/ƒ-ÔgŠúÂ.WMqê “Ó¦c(Ö…„±Ÿe<€¨›ä¤7 úð×Z¯J´ì#y©å xI0'çâRyQ@yº·ÄÛ€ÙÿÝÝp'0N.JžƒXH \Fj› y°ÎæT†²âõkžÊ kÉöaº¯h3> ØÕ1*¹€á M½Ä0” T¥­æ9€u›€fέÆ\n~8 pö²Ÿ¸3IïgzP Pv6Ø+áÞî•âÝùƒo?÷üóF=ÝfÏ{Á€f:ÍÜ(.nl¿éÂ/¼ãþóç·¦7÷/Ñ3<—ýÔËÅÒ  ‘/@ÕÊÂ( †•µ‡ ß×—è9€ä.)Mø¢CÆ„GjD„Gr èШJ,îIn›q•¶Ê‚;I^lcÆaþ¿û~üÇýHˆoÁ>³Œ©¥Ð(ù[õª4çÁ/ˆÙ”Iô oæ˜&‚ Z¾8È“€í Ct~ðS”PÅúCåàn–ðMdž3&xb×br\ˆ éÅ£‡»çòp¹”@A\à è + ðˆr³ýìž=ûñÿàìÆ§üj€nA€LÈ@wsáâô`ëM÷½ Oûé_¸0;Ž‚°äóYêßß ê @Z¦ÕÔ_6Ÿïm•ª2î©M°»«Òã”Z_JãTf_Y~ xÆHŠ“×XªCR©¦àŸˆE·ü¿»ûêÕ«^Å® 2¢9*Ù[²9‚ .² .¯†<špp $u‡-z—.¬;Ä'ñE”¤/h‰ÆÇ*L²Tûá\? ÞPž ñ°ßùÏ7ë3@J‘.mO눸¼¿×àÃî&ÿ^·÷ñÒC@¡›ÛÀ®€»IþéC½‘ Óòâ |Óï=Ù†¯ûé§Ÿûð›vhVŒzê7Û™Âõ³D}3y\:ûô4µÇ,«Êv³=c¼–©i\ðŽiÑ}x6ájÕ× DœG4ÚïV/’ÈWi’Ã@ég?Ö=ÃѼúÕ¿ÿêWi$‹ ¯8Šnke;ÇPZ sÎæî­nTÀpoNkeÅß!xû¹ÙiñèÒ²¸ƒ\Ð]­·Èe÷çøT@‹š+ïA¼ëÎü œ‡5N*+.Þ×á^õ M†SŸŠÀþþÞNŠÑ´,7~í{E¥ú¸€‡Ù¾îuwýÄ'¿õ·Ÿþ7o|ë»Þ•@Ç5»ðáNý;àéo?÷{îË-Fê-ñ@}BÔ— Ì↾Tç¬Ë‚u·`Ÿ€—GéIÀTxYÀ‡ÉR¢Ø*ËͲá r3CNŸ Ï–c?q €F­Jjíí¨ ¤QYE'øÜ'¬ù0b‹$õe,J¦ ô›ÝÓ'¸ nÎïÏ„`¹™HøL’$@7ŸZÙþá¹=³ó µ¥ ‚ ÞsÏþ¾ÀçÊWO·Êï:gÑìîòà'>ñø¯<ô­££¿y×;郿b ËòÀþèß?ùÄÝ௿ñ|Þ1Ý»·KàÎViÏ»ÿÝ#†z©/j’tZDßLã*é6U¦$Cºwø6Ëé ÁìCå¦ê” ¤ˆ¸_ª~0,@i’ Ô„ü#ÑMüÉ«~¬¥¦mBñcÑÈ!’Æ…ð2j•úÛ¬$0I|Ât ex §¥*«úîN’×í,~Þ§ê$aÛ6Äé†VÚE×™ l™»ÝICw¡•Às»Ÿk`{˯ŸMÎEÅJYËáŽBƒÎ‡÷|ç¯þùÞn÷|o·ýB½µI*Èã¡àG×?ûž«GGϼë³×ŽžzA b{çÊÞ´¹øä“_~â¿ýæ7ÿö7^¼võù_n¶Z/ÛäÝmZ÷ÿ {ÀØSoá§žz`Éþé–xôM  ; ÏHä5.9›*ä¬<ícQšTÅðA>Ô„­Âj-ÞPñ·¨ñ@d3<äåÅE´t³Òå ©‡˜JÓ0Vf²+EÖ`‘Ñ7¨kºg„•2—éªi7ã]€c¿ Õ`Š’×Z8 7Y}×OÃjRUðüÄ+ÞìfdE\Åhç{MyøðGšæVX<³ã`cú˜+‹LO¦#SIĨâ|qpÏwþߟ?òÚ]¯ÿ³ºUÁê,Û`Ÿi³µ»;î>ûž£ë_ýе·¾õžoݺöΟú‰i7ö¯Ôû>ùžxòéŸzsñšO½øÂ W¿8n¦û‡‡»ò×=×@oìлH½/€zhqöY©.Uq‰A ÍÑ£Y|ÿgqK™q÷}©ûû˜Kü²Ðˆò„}Å”q,bÆ”¡-þF!ö’ÿ¹ªñHODFÄĘv¸ÇcbÁŸ/E¢Eé"7“qLyî™qnÀ˜š§ØçŒ¥bÆ¸ÞÆcn/g±Fã1Ô8sC|[’} ÊœaïNØ‚—þ.@_™ÞЦ3U(ï²;æ~Š¬à ¼k UWÁð€À/ÉÓ¸9M· UÞ;»Eðæ3þ6úN‹{…ö…ªDÞ¥gTžÖhíÿ_üéþ‡7´î¿{ÌÕÛÛ­ ~_ûêoüÍw½÷èÖ‹zü¨yæ7_ºuãKïúä'þyÁµnVÅìæáî´yô O|ùɧßÜ6å‹×_|ñê«fëfÓ= @zêóîDûßé·T þ½ù÷uŸû/ž0ix“F«î/m]Ø?¥¯lTüˆ„¹/r¿œ‚Aë>}5âQú»exºóØw@À4 ¡ ~ÜÁñ|/Õ¿"äŸ o¥øJ®7@ë»Û€áI°X†§¹mþè­£—üü;î 7Ï=ö'E¸냅CkÚϵöÿ/þôþðwym«u«Û[•_(!cÑì¸ë½/|ó}_½uý©ÝúꧯÝ:ú̧n<+e±qîáéÃûyâ‰'¿þÜ ï(>ztãú‹×¿RÜ;}øÜ9}7§€Vÿ÷v¼þ×õ©§>Wÿ±ïélCô•ü7T… ¨2zs,ñó§}¹PTTrR¼§öþbó?ÒQs ©Zç7 ·‚¡?BP €í,…q}®ª.ª„©Ó2$,ÌJxi¿¡;9tÑȽžR§êšø.@z›¡ØÜ;,>ú¶£—^ð0yè oô^ξϯ.Lröÿþáý÷?ò†Nû·§Ó­²µÁ¼–鿊æÊ¯ÿÒÑK_ùàÑѵ÷¾të[_¼që»xæÖ*øis]8°ÿå'Ÿ|ú/^¿qã¨E€kŸÛß9{¡Ð|¶þÇ•ƒ°þßêÿcu ï©÷‡ƒ.¸lËld2|œÇ÷=éÆìG»LçOûré]2õ®ÖºxOíýÅæ¸èŒ0SjÙ¸q&´t|¦¦[˜ã?dC¤OÂüߌÓÉç/Ã…yÀ‚oÃYà»ât¡¸ëîóÓý W_xο 0yð‰ÿTøe€dŸ'è”Þ‡¤ ÿÔêÿûßÿÈk;l€ËÉ:¼xê,ÿ—nÝxük·þïãGGO}äÆÑµD_‹³“ƒÝ/ùé箾xãú£W¿tÐê9æê3‹€L¦LËè :VÇ'Üð íÔ¹8î.¸wd 5Lœk÷_ä ¯ûÛ€Çq>|ä€gE,Fm)P—J~f<(  ŸÄç¯è6`SêŠûþôó_ÀÏ|á ?!L2cñEú ÒïùΟÿÇù‹¿øö·¿ýú—ÞÿÈ?nÕkZ]ökT­0 ð+OÝzñ+º~ã©Ï5Ï<~ãÖ{Ÿ9ºñh‘¨Uñpuë»_þúÓÏ_½~½µÿŸßoÆ—Ô:nÈW¸+{~úïgÿÞþõžPšÞKÛ¨bJ›. Í+mönK°%]ßyiÇur—!t¼ªGE÷(CþƒË”#¿ÜgéŒ'ÿ0{[üd¬Œ™ñ²2RÒ“|•_¬Ž •Þ4/v dòUůuI ½ÔÐֹƨ»öQà ·wÿ“.?ø…/| ð÷o†ñü$£¢ È{¾ó¿~龩ßÄ~6½¯E€×nM§U°Á¥%O|Ï{ÿöèÚ'¿zë¥ÏÜúÚg®àèÆÿ(¤_ã_1Û¹wÚì}çÉ¿~î…«/<ÿâAsùâþ•¢âúb»‹jÛ]Ù¹Ö¯(êæ¯4  ö:ÐJ.!É£ôXÙí04¦ýYãÿ&+{JÏUJïJ’^QE°£3TþaOŠä˜Þ*e·Žùò Žg_(õmPŸN@.o å̼ hñ!žÑ{¼ü(ek¸;HEoTIÊ‚;æ·½D‹ûo^yÛgšý]wñÁ/|êzÝ=ɳ»:h-œ0[Êe sÏ_ýï_úÉéÞÁþAû·¿ýÖΨ¶*¶Á¬%yÿâ×ÿÀõ[ßüÀS÷¹_ûâõ/}öèŇ Ð>_¤¸²¿¿wïxvpxxõ…šÆ]|ôæf…âÁ7®¨¦õvœý·¡ÚÚ*/Ÿí€dxäl£´í‡^P2¡*Ìܨ6Guýü3æå[£²õ@);«GðÑÛ$Xo®JÞn'áÒÔ΄äÍ$sV%Șt÷Ó´u•[uô5²§ó?ÃÛâ±ý›Êã Ùš9úŠ·Ïû.@¬r‹ÖÄ)!‹a#‰AnÕ½@Àì®À]ŽnPrõÃÍî£g|øWß»²÷¶3­ú§[ê¡v”ê€yîùg_¹Ù=ŽßþíM^wÏ:\æÖZ …³Ÿºñw_ùЭþÆç®í~æè#_=úÀ½É›šÅÎ~Îß7ÚîîSîm]|ÓÅæ{€XÛ”®(ŠÉt{»E€ðÃ¥L=‡ £x¦^6ÚäOÔ Z\S©3Å«¸ýÞ¾Š»¤‰oñÆåÚŠF·d¸Vg¤´ Ç0PK„è\ò6Ô7dÔ]\uÇø3<—œO¿DþÐ%´'Îÿ…˜X@2žÂý· ÀvX„Ò|+‰§ò$àødwȸ[+$—øÓ]1I‰V©Æ` ÔÍÙ(èWŒ”0Ik‹C÷ÀáAyé7û÷¾øÝƒÝ+ˇÍ-éà¶Tf Zqv´ÓþúÛö-7oî•g¶6[ ¼|9®Ã‹G]4Î?¥ó¯ßóÌ¿ûÌgn\ûÜK_ûê·¾ùÌã׿ôSò(0 KѪÿöùâM6î½páü½gò\qaûàp–¬x-TáWT+¯ÿ—çܞÚ6ÒLe¶H&¢cŸ‘ d žX3oөت²%ú"›þl+…2zALÚOÑYÕÉèÒ¬ýù¯ º/7¾4éâ]ûí|´ W>2ü‰T:`+háßÚbñCÁ‚ûÝ:Êãn 2Ëž€i"ÛБÀ GÇ»jÖLÀýÂóÄqG X¤Øê¿Pû÷vwêû·¶§ÛåÙkIKtL„”jïæÛß÷·_úwo9Ü2Þª`œ…KÙ¢™Íþá?iíôCïºvëÆS|éÏžúÁ3ßþÏ_Û¥ômÀâ\Y^èžAÙØ;<¸¹ww/êM¥ÛÈlí[;ª:ýßl?‘z>$ÈšsÆJÌ FSÎ EŽy#¨2 wˆÒôŠzifÇÊ,O‚ÆÉ`Yñ+vâHX y©XŒRö7!Ûœ°0 ÞEÀÛÿ6j4 Çpð1r#»ƒSi§.Ñã°ÊŠ…ªôÄû$¾Ï¿Ÿè[ñ³ŸŠòNy^žïm°"œÀ™qú]ª¢™á²k1VÞð¾õáÁö™3oݺ²»seëÞןyôO¶?º}f¾0CDi’ZìØk~õo¾ðñßøÙf¯ô¯\– þ¾™T´@·øv=>ôÉ—n=ó¾¯_ûöµ«×ž{îÖÓ÷‹û.„ÇÎkù ¿P\8göud†|{ÇÁÔÍHõ=ó(€µ •5õIe$LÝó˜#GszïÈ£ÖüŽ,*2lôB1ÀËýa›èP1ïË’5¯iJ0^éÎÝy#]PÐe§ÍšN×ÝaÂé.&Ìn›ÝJÀT~âP#EDcʸà÷<.ø€kðýfUì…ICnÊLVس°Å›µîÀîþöëËêì]—¸ÿâ]gªêÌè±í3F픟óIhàæ¿ýÎÇÿø·~¶ó._îR½ –g»E}1„ÑÅуï{æè+yõúÑ­£ëÏ¿½“é×w÷->8h†]A¥'6qVâ!àaCÝv´ /6˜ƒ<Ôæ-gfDºï ÿË@¢|Eøyƒ¨¹MCÛõ :Ó@ò¼GÃ{oáôãqOÞÒ ÷»îXi³YzŽ1|`â'Aÿ}è¦×³¨Ò€QŒv3¯òã™ì¾ÃÀÄjç°a`´å*;ˆóh\|‚`ãx»ËL"{€ƒétØÐæßá›oÀÇ׃0ILRò6 Å–lKÚY£3Ýá®ýÙwïîbΞy½ð•»´CDH鎀Ïêëçš½N Ç“Ëa^ÐOv] ¯{ès_áèVsëÖ‹Ÿè®­Y•rEqppp7oùov³7蔣n+ÎŒ`){Þ@Gd•]wÖK?"1“J Y ,q À@@èŠUZ¶õ‹3x |U…)Á à;Åļ:Õ=QæÎUgx`•¨C€Q˜ø9ö¥Ù$ªû¬sf³Yйàtqí÷¸ûדpìP#NþùdÀ€ÑˆhÇS§¦ššžU"å­ú¸pvœß ±÷O¢ jÿ ÄÅ[ö4”´·J…í¯ø¶aÕêUÏ8n3o‚ûš?»òØ•×Y\óex3'ÕYÝÀOÿ÷?î<€=/é.\²kÔØ~Zî~æ¿uø¾ôÂ/ØÛ•ùnÛ±ýÑÙ?²TSq!¡.}“83È׆íÅ8W®¯ ïaAg /%­ø@åE£Ï\òu *MÖ½Dˆà§´>IDATÁ‚[‚Òa=žð¯Ôñ:€äÔw‹nÌ×Ñ·“Y@øÃ·#O1L:À  …vÛ•ÈóëÀmÌød[‚åîˆa™­œª*Ú„’–|è‡ ª&ù–¶/£5ä=†Š©ºÍMëöcõö]Áê´¬ÍÌ›Ð.sçüôoüîïþF€¨„í,\nKw ™¢øä7¯]ûÖ{õ3€FS[ÿÖ3¯;sAÛdÀvÜõïuaZ«nF¿yXèöy÷èR9D8¬ñK3—‚u ì @3ŠEEÖ í5‘KúaƒùË÷ÀœˆµÅ 6G-Ë2è§ê6}¤ž*Æ]~â0‹9-¯°ÌÉ`៛Q÷Çtöd«Üààó¡¸z nëWVñ 1¿ä_J¾†£øBP*ì¸öŒsÚWÜQÑŠ |€àLâßMºs×ùÿ¼4à`ýÏ À0ßD+> °åp,¹‰´zƤ¯`?;ͺ4›³Ü `w–¿ `º»¤gxSàÉ])»¼Çï27ça à k€¥”u$?ü= §rtVæög)-zÿœ1cdƒFlJ B£? ŠsšVÕ²ªÒŸ+ç4ÄvÓ¸äQ€DCÂÒ ²Ÿók]fÚ¨zKk“J^’E%öû÷erUÚÓÔÙÕç <0ñú?Ó]vÑjÐì6ul'ùœ ÷ͶßsÑy ÿùîMQ èdtàªÒwÊÌYW?ÍiѾ;‡OÌ‚ò,„ŠÍ" ˆ.'®ÞáµSæb é«“×™Í8ùH+¬’±˜Ã&eâJÄ jC¼“Ž\¶Þ”ökYÅ´üË@ŠÑRù)9mM.Ë$•ÅÃÀ˜m'7³ÄÓt˜íyÒ p‰•œö²Á›Y­}—ÒL=ç…K@Ã{Ò?óD+š-ýà Ë5“Øš¥i2Àþ$N2À(šðzÝ.’ß j6õrOº' t€ÉY%¶ ÑH r-ñP…øRH "è'ÝSâŸê…w¹Fs †pÀHž>¨DHd9æ)9ûK©É{8eÁÂæÔÎ{Æ9OÔS /ÈÍõ™b9a±}XÚv¨êâŒ7¼Ž’lº7÷Åîâfv1†^dåMðÆ*†òòþ}¸Ý ½ã¿e#=Þ3/žúRY[`:Ýšú-¦!lÁw8á¤ix${º lé“õoyŽ…F{¡ß0•b ä•Õƒc¼ $ä=D’Ô¹xØL¸èñ’j»KíP|!¿LPUn+k Í…H›šÎ Õѧèªi=ºL'Ir™Ìަ¦XÚ4Ù»Ý`›…‘ŸTŒ(ŸjlÁ5/›PÆÝˆºWÚãý‰bèvòu¼žu/gÓU6`Ùz€ïŽ!ÚG‰·6² aÊ:Èè•zP[ý ¯Òt÷ׯ£€+‹>S‚ €?É]€%)¦Ì” ¦V+'ÍJB\AX°Y²­©nn™G?“Õ*ÕÑÍä'æ¥ò|„éwSÖÀ¥î£ÿÖEÁ!LªœO}C•†‚¶ã¨q…v¼ÊPY9ž£/«0•Ÿ-Êȧ‹òÚRëýžG·E›Røý,BN‡føq=WV—–ÝOÍ—1KJˆ@âàÏâ™”UºaMš?7wbábkÆspv.I]>œÓ•õDž‹dΔdþXë*m˜WoRó9ˆÉ=7'í•ðJ!+[:ê\^‘lA“ŒÀ+á•ðJøûþ?¡«#‡yîIEND®B`‚fox-1.6.49/doc/screenshots/vorhour2_small.jpg0000644000175000017500000002406311637250333016125 00000000000000ÿØÿàJFIF``ÿþCreated with The GIMPÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ±,"ÿÄÿÄG !1QA‘Sa’Ñ"Rqð25TU“¡²Ò#4t±Á3BEbr”áD‚¢CñÿÄÿÄ#R!1AQ±‘ÿÚ ?íܤääúçzfíœâ&–„Ë ¦‘u"”ÉYÇžJtŽvb]…¹Ó‡ÛuËØ¨ axIÔ§AÁ@î#ÐíK&Ï™µ[“v¢µq3ÒèSŽWˆ%Cù eìÉkNmv-›2ã´ (e´è¨ÔeÝïŽøóãóÇ9㛸ŸëŒzÞ´ï/«ôèÝH$ },‘@)žªWðéÂ5s¤V«}^3tÞiâîh7V›å¥rUÔø»ãÐìÛ:Êž—.9Ñùiu%WJ\–@®ZŒ´öÄ3Xò/­.Ø¥´´°ŒÉŒˆÔBt1¯g¿Äñeûq®Z¶°™u-ôõ¢ÒWD¨©5)5Ïùou ÖBß´æÚ’[½2\¾/÷×ÔŠ£Ò_ G¢sÔ¬G`¡f¦T½ý•ME=,Ù®•5SÒŽÑrFJÊ.^°—¹Oïe/VºSÙc¿ÃÅ—íçs]#·eäU0ßJ\yIR†*J’‘™ƒ±x^ž›tëlLsQé6²ägL«}•™p ))i¤^ã¨#!ßøDnÌÙ’ì¾ëÝi-´ª^ "ŠÌÐÔ•øãxÿ«Š#ç ÿ‰J³¾Ï•û”ùF~K³¾¡+÷)ò‡µÅÑ<9öy°éUºÌßæ"AÒ›pÿ™?ÌG¢ü—gýF[îSåù2Cê2ßtŸ({\]}žxž“ÛgüÅþb$OIm“þb÷8ïþMú”·Ý'Ê3òtÔ¥þé>Q=®.‡ƒ>Î tŽØûAîq¸é¯õ÷¹Çsò|—Ôåþé>QŸ“侨ÇÝ({\]}œJzAk}}îq ·í_¯=Î;.¡'õF>ìFzŒ§ÕXû±Úâèx3ìänÚ‡ÿ9Þq ¶í?®»Î:¾¥+õf~ìFzœ¯Õ™ð{<}}œ¸¶­#ÿ˜ï8Ü[‡×ç/T–ú»^U—ú»^g¡àϳžM­?õ·9Ă՞úÓœá÷V—ìð:»‹~Ùãèx3ìH›Ntÿä¹Î%M£9õ‡9Ã|{&ü" »$xD=ž>‡ƒ>ÅbЛíÜç&zk‹ëç pZìÑáa7Ù§”=ž>§ƒ>ÊBrdÿû¯œH™©ŽÙ|ãi×[“•S唬%I Š€­NYV¹Â¹ xN̴ѳi.$)* t­)ÀT{³‡±ÇÔðgØÔÚY—š˜)i´Þ$“ý3'¸B™ž”!Ä…ÈϰÛkâßiÅ”×µ@RUþŒô¯|6œŸ“³’Ö;k%Â@Ãensº y…öÍ®õŸ),d䛘}õM”‚ã|½ñÇ>HÊn>0ÂqŠŸ•í3貚™ açÖàIo %7*UrUrÔé:G:äÔë/oÚ‚JMAÅøè­[rfͳdŸnÎna÷ëŠØ*8B•½èƒTƒÃS§(EÒÕ…Úl,`´ùÊŒmÕK¼qCiε®ð˜t–Ï!· ͸¢RP¦”JHài\ýšq¤9s÷‡>8˜…2²é%†€  G#ÛG+<Ìâ¶o”¥A5R­RQ^",^+”a 6Ð!´%çDŠFм6W(/ •Ê3/ •Ê ÃerŠË´¤[qM®m”­&ŠIX¨1¯Ê¶×ñˆ w†Êåá²¹EO•d>¸ÏŒAò­ŸõÆ|bÝá²¹Axl®QÒ³.ؘmÅx¥*©¦ÿˆ‹¼6W(/ •Ê#~e‰T%Oº†Ò£tšTëOÀÄ*Ùÿ\gÆ -Þ+”†Êå>U³þ¸ÏŒAò¬‡×ñˆ w†Êåá²¹ECkYàTΰûÄ[( AÐÀ†Êåá²¹F`€Åá²¹Axl®Q˜ 1xl®P^+”f ^+”†Ê傆Êåá²¹F`€Åá²¹Axl®Q˜ 1xl®P^+”f ^+”†Ê傆Êåá²¹F`€Åá²¹GÓ[Y’8˧ó*;ˆáº_ô¤¿ðÉüÊ‹ºs÷‡=¿ÔÂ¥ÙOâ©Æ­V¥)I¥S™¨â4üxå”5s÷‡=¿ÔÂW&-ÔL¸–ä™q¢±qw€¢J”3Τ€{ëMtƒ2vLë*eS£a¨*á )J‚*=µÓÛYß³_reÇÙžq’³R¨Ñ qàA>üÁïg½h¼§ºô¢%Ò›¸e.^Ë:ÓHÑ÷-Fæ\,°Û¬“è@"=üIPî¥sЄòÏJK–Þš\¯T-B„ ²Ô×þâÔUrqÉrgYCN…RˆUAê{âÔ^VVÔ¹0eçÚ–mN*ëk¨$’ ú`S‰‡6Q•›|ÏZmL²²¢š UU9S* µÛÚy©v±ÞšH³¦&Ü/&JR ¥ Ó@ç© ,ä$%g&ÔÓ¶ü³i!8ŽÍ:+T“P+¦T­u#|· :ž»-Û&+ÎÏK‰'Ê\¼n*‰@©9p_û1dö/ÊwõD3]²š•uÀÓ©)A53NåAþèBÊ–LòÕ35;20^Ù–Ñ@RÛ)H ´ 9Ã>Qé6ŠšSù ÊžÒ{¹oRUXîM*ÑP}†¥×‚õÖÛTÂTÛ Y¨­N[k ä랺Ê[Xæ‘™ã¡?œ*rÔ$}™‡f亳¥¥ÕÕâ*«.&õ8ШE…ËÛe¦®Ûl¤—¨PšH7rº.ÐŒ«©1FÑ¡vI*CŽ$º²ZBÔ’åqA5IP2Þ‘¶RÚ–z9>ª®ëiLÓեњ«¦…vÎãô’ìZœd6·ÐWLÈÒ±¿]–í“ ¥º9f=,ÛŽJ¾ÚÔTƒ4íRi§Î‰³Ob÷ü§TiÇKÌÌäúLœÔòCj4ĺV‡ê“@TA#:hw‹­¤¡¤%B„$ zU+òdâZ–IeM¨¼ã–‹ˆS9I­îc8jÉ%†ÉÖèþQ‰XoDhAUë†å/S*éXRµÛˆ@Âj]Í?½4W}hiÿTã V´¶…-F‰H$žè¢«rÍEÜI¤6T+E‚’zƒ¦‡_ë:å¼—m‰5¢”­H©¥k®[qÓ¿)ßfК³CX­K̨µ&ñHÓBM+B *ݶ,æUuÙÖrùËQ_圴[“z]’…-ÇÔ€’‘™ ™’D6™¦RÒe œAšzJ ¥oÝ×tÏXVÔÇHÒèJåXZµUFž†Â•e®~øi3jÈɾY™™CN$R¬¨7ögüö1™[NJyç•™må6*«Š¨‘ý" rî[‹™dL1.Ó7¿h[54»Þwøã —@Sï¾ã¥âåJVnt­êšëßÂ"*nN¹.ërˆJ”47ÂkR%\6ŠÂÞ²Ë%Ñ8‹€¨V‡:kALÿìn"ŠÎ9n6—.!¢€ µ ñ  Iö>Üè"[Ý$S«[RÒáUBTFc=s¯íä2ÓLÎ6\eW’Rr¡p‰¢†pAApÝ/úR_ødþeGs7Kþ”—þ?™Qa%Ý9ûÞßêa4ÇH¥eKÔ.©s jjFyå˜ãÀƒ\ýáÏoõ1ˆ‚¼”ëSòøìÞ¹x§ÒMQUûe™Y—y·h(A I?‚‡·†pÊ# —‹!ÔRhQxTe]=„ ŒÚÌLYÎδ‡Km}%>¥ ä BÇH$ŸœjQ!Ðû…I (âa›Ž!¤¸°”I4¢f¥Ö@Kí’­áS=—'hÏ·0ã6ƒrí¡õ6” r­Ì›Ã}¢÷ȶ¯Û(ÿŠ\Q³'-Û˜EŸf¸ëAõ^^"U•iUWh½×íï²ûÖ¿Tm'åm 9œW­pQnJTŠt¿ÝðŠ-®buÓ.%HR®™ªZäN©RtÔwа››´–g,fÔô1œdçC¥Uµb°~aGö6;vê‚VÓŒ_H)¡½µ=Ô€Kc̾¹×\¦ pÜ9É–J®­ PAšpÊ2zS"”‚¶¦SZÓöGQÑI®™Æ¶1’Dë†Bî:J”´Öú1>o«¹˜j'¥¤ËZ^ùãJ‘^`Æea ¤ã–šìÞ¤àaS/ßq»ÅmjÒ£?FžÃ¾Eµ~ÙGüSúá8šjÏzU•L¼§ŽB€ô°×Rj@ù·¿q×íï²ûÖ¿TXúI"Ú¿l£þ)ýqJÒ—Ÿ²åÐûö½[R D¥näMOí4Ë»×íï²ûÖ¿TFóöÌÂB^°ñ“x­£C¾jŠ9kiÉ™g¢ß\ZÒ¢· š¥a”ÔPH9¦™¾‘jrÚD“­¡æ]ä¡Jq]MâFdœ³ŽÀÅ{|¶§¥•hH:Ñ +«¡§Z&é½v„ÓÑ®ÐL°’†ï„‹Á$èžÿŽ™ ­Î”Ùí¤,‡n_)Q)Œ‰­+S§Ÿ ÜùU’ì²RÓÅ/•¬3‘NµŒò‰úüô£­2T¤•$_ŠÒ¼ã&fY§Æ"¢(„m2÷ÁT¿,©u¼¢–пœ2¼*# Ÿ(‰¾’˸øg IR€"«Nu#-uÏMÁÚ°ÕÉ©vµ-ä%(UÕ’rI¥sÛ#X»JMÕ„70Ú”H‰áYRB’R "„1Wä¹DõFj Á”[‚ «òl‘unfÊ×KĦµ •Ê-¤Ü]ôÐ.…7©£ð£Aæ$e¦¯c2•)BéVЦz˜ÔÀÄ”¬±«,! ¥/Ÿ=bÄV®!.Ë*]@`¨( †z󩊈²d­ª¦¤¯Ó<Íbì4ËL$¥¦Ò€MHH¥LoAApÝ/úR_ødþeGs7Kþ”—þ?™Qa%Ý9ûÞßêc:_Y¾ IÐSdDÛ:‹í̦´ªT’+Ê –+™s8™¢ÙÆI$*ñ¥Hºr­4%ôj*ªtÍ>QšÑ|Ç”i²¶œMä-%*ƒš±,æfÑ4ܰKÈ*RUyYk•i¨;EóO”¢ù§Êõ‘4‹:]æÖ Ë)̸V™~妻5B*Ñ|Óåh¾iò‹r†6ŒÄ­¦Èiìd£:„úUΠû} E’ a%× ¤¥”š…ä}Ò«YÿÛ¸¥h¾iò‚ƒ´_4ùB䢻.É\ŒÚÞ_U¡i£,¥ÞRH‰š Nqºº;d(d[ $äHÌ€ ×ý"Ðv‹æŸ((;EóO”EG#&Č̂˜N2®©ÀØ©­[Z(6ùÕçËMvj„T¢ù§Ê Ñ|Óå™Cß–šìÕ¹k0ëjmm,¥@ƒ2„”¢ù§Ê Ñ|Óåä¢Û^ÇDßUnM™T3.Æ LÃiqJ*JI ¨"„i&¬¹IÔ L ¸P› ßR}ºµAÚ/š|  íÍ>Q¹V˜²’eÏ¢ ´ŒEP(R†•¡ù©×a®Ç‘p4d¨4€„µP¦U¥s9ñ‹”¢ù§Ê Ñ|ÓåUv\’ÁT’ˆÐG!D§-2Ò5jÇ‘aam²   ¼ÜQÌqÌÅÊÑ|Óåh¾iò€ÚÖƒ´_4ùAAÚ/š| 6‚5 íÍ>PPv‹æŸ(  h;EóO”¢ù§Êh#ZÑ|Óåh¾iò€ÚÖƒ´_4ùAAÚ/š| 6‚5 íÍ>PPv‹æŸ(  h;EóO”¢ù§Êháº_ô¤¿ðÉüÊŽÚƒµ_4ùGÓ Y4éüÊ‹¹R/M9@+¿8Rý‡e…2‡’’¥ªê/.µºš¶IM?îL:¦\yiiN¨ $€MIr„SáÛMùwl逜R œD$¬„(Ðå¿ €´çEì·0¯0†(€  m¥}µÜà ie%Òà mÑ7«JšÿXFÿG'B–ƒhJ†I›h©[õãøáŒ›hȇ,©¥—¢·™©4§­Ý6…Æ–Óì¥ä- ‚M2:D¸]èæ#œ´.©)Ä©Hm.Þfé)§wöDtrÒi*RÐZŠï©†©‘9RözŠû.ð†èæ"5)´<†”¤¬^•þbIôz~Ml¯¨OºZUá‹2Ò³¡U—Î:Dö…‘?i:И²ÁJH)¶ ä( •þ“àÛ ½Ä`¶©(LÈ„­t~}§ÛtHÚ*¸´¬4Öd géfòwˆžèÕ ú..NѦZL²4¦zë–ºæwpè0¿ÙÌDl–æmæÔ‚‡“ZTÄ@ĵ§/.Û)²fTHH*}¢M77¡hèüúØ• ³çë ´’¶fH%‡üYŠœë­Ñàæ­ãàÞF%Ûô¯ Ò0úš–enº´% IQÏ€î„ è¬ò_B•'h)$Í·Sž`ú_6ž6QŒ+¢³éme¹KD¯  ¦ÛR@ï \:\!º9ˆÅ4Ó¡j@S„„ç­'ð=›m䩹+H6œƒbešP Å{¢UtzÑ,0ÁœRxº¥<ûKR4ÍDk™÷À¸>ÂïG1z9ˆO#cZR3 q2Î%D›ŽL´@4SÒàæaËSìwþù¯Õụ¶R•-HKJ©D9‘aÅÄRš•µ_K)ù%ä„>Û„—šÑ+Ÿ;ºÿg'”´š¨M´iD„ñV”iP6.Ê›Ké`©Å ¬ ðø¨D˜]èæ#þÍÏ.i+23jB)¢ŸeJ&‰©;w©‰èäû*Aêv’Âhh¹¦•ZêU^ïyÜÀ¸=㘌᳘Žq®‹O¶šKDªõëÂaiéP|î¿8k)%iIË%„YSKJt+}¢4 …ì.ôsaw£˜ˆ.ZŸc¿÷Í~¨.ZŸc¿÷Í~¨B|.ôsaw£˜ˆ.ZŸc¿÷Í~¨.ZŸc¿÷Í~¨B|.ôsaw£˜ˆ.ZŸc¿÷Í~¨.ZŸc¿÷Í~¨B|.ôsaw£˜ˆ.ZŸc¿÷Í~¨.ZŸc¿÷Í~¨B|.ôsaw£˜ˆ.ZŸc¿÷Í~¨.ZŸc¿÷Í~¨B|.ôsaw£˜ˆ.ZŸc¿÷Í~¨.ZŸc¿÷Í~¨C(q§TâPB‹j¸¬´4úˆâº_ô¤¿ðÉüÊŽ¾JZb]S&e’ÊÝx¸T@ºd8G!Òÿ¥%ÿ†OæTX_÷™Ä:[hº As©Œ)ô&„ÔuËhÖãž¡æ"­¡gõùEK8”¬I$TS<¡PV+ØÉõUÆNÊŽq]qObBz—²ZA&èükíÞ°ÂBÄMžû!O8·J‹ŠI àÀl2…A®&˜ÉõU †À5Ë3´c ÏPóšk£MOM.eÅ<¥D„PP‚™æ8îF†buŽ‚±@NDpô„CR2ÒÙÖP³P¦Ú(,Þ7Šx§…6‰&d ï2ò‚`¨„ú4$Š{yyB ¬WqÑZg]i”j·ÐšPÔÓh@:&Œ039|7‡y+HËôä„]EŠ„Y‹³Ö^u§SqEÕ+æPŸi¥}¤Â ¬M1“² ¡B¢¤i•! ú.ùxÎÚ®¥ …)A¥r×^:Æò=ê˜è˜™P$¨¶¥€ššèíÀwÕPk‰ÒMJÔ8]9gKMN=2·^BÜ•2ʦ— ©9ñ‹ªC”ù‡QÄo æìvææÝyÅ8ä±—ZM.RsÎBK.FVËIC qi)»Uè3áMϺ›C²Õ@®gAQÙèä²eú½÷œMA&úk‘5j {#CÑ)bù~³Ò€Š…$P ( 5Σˆ…AXºdúªŒÐH d3¤%—èîˆWZXEò§E Rn“ÈsÎ+žŠ ÅÙéÕâ,,UHôt;kQ¯H…A®.'ü*ƒ>ª¡ ¯EÛ”AJœUZÂ7¾•âHÐ’u'Q”FÇEKE rvyå¥4ôž¢t¦€Œª+¯¾¸º,dúªƒ>ª¡3ýÇ@ ˜œ -¬¥Áé€kŸy:òˆE7+3>n¦”Æ&õjG ö´* qtÉõLj©†Óó²Ê¹‘ fl²ðt¿6’ n‡Óʇ†¾ÚžýmæCe鼚-—¥(^5'SÃÙ”* q>ÇIà`TÃiU@ÈTÒËômÓb`?:µ$$$-à 9~#Ø£ÏFÚ˜•L²œ› ¥Òîo^$•jªÓ1L¸¹…A®'xÉõU2}UEYiG%˜ U×ÿŠ÷çíÏßa¹Ùžb¸¤ÆOª¨1“êª#Ãs³<Änvg˜…A®%³ê š$2Çžô¿éIá“ù•ƒ:™ Šóî—ý)/ü22¡Ÿ‡ròÖ‡žSmT¢@'^$ :Чm™dLK̲‡ÜUûÏ¡A@4º¤ *+^ê÷–´<ò›iN¨D$€N¼Iº…OÚ6|¼ä»’ì)ÅÞ8ˆUᄺ§"u­xV’LÑIU7E*{+' ÍÞ©P;Òµ:WM…:€‡þí\ÇœskèÕ–ZSS¸Y:\MêÞIÒ”© gJé°Ž˜N6ÍW!XcXsÓ3óJ뮺eM+ŸçÂJË)‰FYBRÚ€TEh3νeYÏÏLL¼óß¶?´n©Ð3ùÃ"xÿ!%^bZQ–ÄRm(IU á¬Ã|7;5sq…!w“û5k¸Ø÷Äq¿U|„j©ÆÊ‘è«#·q†°i a¹Ù«˜óŒá¹Ù«˜óºã~ªù:ã~ªùkÓ }š¹8„­H$a(æs¼œ³ï>ø³×õWÊMÙ³ŽL¼ûÉZ—z€ R„4Ìz5ÏsÀÃX4ƒ„_qY4¡JŒÔ“¶Æ5ZœH2ë@¢¤ÐåZë^ïúŠö[¶bTÛ uiQ©*»‘)áN $êX›q—\•¤34¦|a¬ÂP· ‚p ùÉóø¬ajZR•-¥#=¤í턃£òE!&vwåä) ÝÐÓ˜ä„_LŒ£vZìõ­÷Yu7§HR³EÒ}¦—½¤˜k°¹ˆáHR%ÜX" ¥HÏ/÷Fo¸TR™w N_ýB‘$R¤”ÎO!Þi.¢¥7k—šûMcA`Ê2µ:™ùäÕÂâÉRR7B»L¨‘ìËhk|´9t~ÍZŽ#l-œ³±§Ÿ˜ ˜Cª”,’‚Ý jNŠãRuË8j¹ÆÊ~jµ;á|ì¼´ÜÃÎ-çP\–S!(É$æjE¦PÖ aZÍ’M˜…¥‰i‚•( ¥mÐi˜¢¨>2†%ÇÁ4’|ûŒÿú…LY2 Êõf¦¹TÞ ¡W‡ óåÀFX2l,Öд‰( ¾=Ìe]¡¬ÁÊ\yH½ÔÞb¤WZzßPûΩ2O]P¨7Û#óBìô7Lý¢–T0­j +¯øb1щVÛe¦m ä6‹×)%U¯-@Ðä) `Ò1ž ©j“y ÑJGê¤nâ“Q.áÔd¤ê?ö÷BCÑùEÊ)—g§U}°…É¡ Ì„@':ïSZÔÆ­ôzA•8¡hZ7ˆºN8ôTt#eTÔw˜k| ¤‘ÕÜÈT§>ý`ý·Õ]æŸÕ¬™IK/ù—¯PE…Rƒ/ÂöB‚MoÐeSMxÃX4„D¾ GTtÞ¤)Ž\}/vQ’÷w°§Î%3ÍRæ‘”­*8k…Eð’D£Ê9dŠþhÝ!Òªœµ%>q!žh  7Ê1òƒ¥Oáç `Òš¹80ÜìÕÌyÆÝq¿U|„q¿U|„5ƒHk†çf®cÎ1†çf®cÎ7ëú«ä ëú«ä!¬A¤œUAƒ#wÒÿ¥%ÿ†OæTz-¤°ä┃Xó®—ý)/ü22¢GÛuPîulºòÐÒPIšÔq B·˜zÔ˜–jfQéyt-JuWÐj’…&í:Ö‡º°ÙÏÞöÿS‚¨+£¶bÛÌΕƒPáP½¨VÔ­R3¥y tuÕÊA ’LÙ2sO¾ë¯Uâ šd(¨¯~ºû5fa†m ¥¨!! «2h)œQ‚%õÆwW(Áœj£5dv…ðB䣸Îêå\gur…ÐB䣺Ïú¹By»*Fvms.¼øZ”RŠ @Ó<À×r41<¹)%œÔ­š…¶ÊÝRToàeà˜’dJL¿,ú˘’ÊRÛ¡ T¤¤ÔqÈÅx!rR°¤°ÀTäåü<;É eLø{9'aS'&›5R%é•¶ªµ+Óé½Eïi0A ’”•`YÊJ“Ö§‚UJ¤¬Q@"€Ö¦£s¼ °¤ÚÛ3³å+* XP5hAÀ‹°Bä¡!,Åžµ©3S/h5¡*$³Ë‡Úf^Zbqɬw›qræ\ÝJHºMk˜9þ¬¹)l©åÔ˜J '+¹U%&‚”Ì(ÅSÑÙm·gç”R›¥@¤^Ti’M4ï;˜c.JWnÉ“in8‰¹²µ‘|Þ*e°Ï@FƒhÂl‰$Ì6èŸ7ĺ]¨V™ÆC.è³.JB»*AÆÝB¦&ÈuÅ8hºªøáܺ{VnÀ”d¬"軤ÞPRª8Þ>ÄŸw²—à…ÉJMX2 áNÏ (‚T@¦\ÙQ¡‰ÑeH%†[ëEL‡(å@Q+ ’HÔA ’"Ê“C´&æÈu7Wz鯤„S…ÃH«Îja/%ùŠ‹ ¤¥)AóÒ?Ì[‚%"6l–Ãbb`!òo $U^9íöTñ5ˆ›°ìæÞ.%ùŠ‘J'Avœ?Ò?ÌZ‚%õÆwW(:ã;«”.‚%õÆwW(:ã;«”.‚%%˜q.ºT)Kþ”—þ?™QÜÇ Òÿ¥%ÿ†OæT —nû‰DÊêF}ãsc£qâqf´˜|ì?¬VŸ´LŒ““%¥»r€!´•)D{` tnüùÃD4°€¤’2­áŸ|m†wOˆ@Pe¦“êÍM§?H/ÒÌ’Mk¹1]R -%*´ŸRH¡óB9Ã|3º|B 3º|B;vt³-†Ú´B‰KÔÝXÛ©3öœÇߟ8m†wOˆA†wOˆ@Q•n^Qµ!¹”ªòŠÔ¥ªñ$÷Ö'Ço·kãßáÓâaÓâíöí|{àÇo·kãßáÓâaÓâc·Ûµñݯ|O†wOˆA†wOˆ@AŽßn×Ǿ vûv¾=ñ>Ý>!Ý>!;}»_ø1ÛíÚø÷Äøgtø„gtø„íöí|{àÇo·kãßáÓâaÓâc·Ûµñݯ|O†wOˆA†wOˆ@AŽßn×Ǿ vûv¾=ñ>Ý>!Ý>!;}»_ø1ÛíÚø÷Äøgtø„gtø„íöí|{àÇo·kãßáÓâaÓâc·Ûµñݯ|O†wOˆA†wOˆ@AŽßn×Ǿ vûv¾=ñ>Ý>!Ý>!;}»_ø1ÛíÚø÷Äøgtø„gtø„íöí|{àÇo·kãßáÓâaÓâñÛíÚø÷ÇÓªÀ£«¦‡ÿeGpª£ *{³§ÇÇÓ¥™×÷q¿¬­âÀ@ç÷«ÿqþq¬FAAAAAAAAAAAAAAAAA+´xOûó0AÿÙfox-1.6.49/doc/screenshots/table.png0000644000175000017500000033014011637250333014236 00000000000000‰PNG  IHDRX,=Í– IDATxœìwXTÇÚÀ»ô¥w©"‚€¨D±÷Þ»±\ÛMbzO¼‰Ñ˜\o¾$¦MÓ˜X¢)£±EcÃ‚Š‚‚iJ•¾»lcËùþXXAMV|ö÷<<¼sÎ;ç¼sfÞ9s¦ˆ-Z$8:ØaÁ‚ ,X°`áî€SÇc 0zHŽŸJÁÃÓëŽ/P^VJÿþýHøú[Š“ËN ,X°`Á‚…[°¶·'öÅ'È*-ÇÊVR§ŽA¯ÇÝÓkW3qus¿ãk———LE…üÎ ÀÕÍ w{6ýú“±àã×’½B¯7 7è1è ¤\¸LD›P.^J#4$ÁtþÔ)¶vÒW¬F¯ÖàØ¥p‹l ”’²#`Sl Hë­y•,þ›²¨h@v2>”UÇë“ €ê6²ÐTɺzd-PY‡\Y¥'©Gv¬ºF]²ºêÞÕ²¡*nµìX•á6²¢ªL4$WT=_Ǫg\—,«Ê³ºdë*Û¤ó¾¦ìˆ±,Ô%—a,CÕ²]UÜšr)`“ì”Ô#WéJ‹ªtë’ª®URu¼>¹9ø‡g|v §Õ¨Q„ŽCN\×ÈÚ¹€Àh5r$‡_€6¿håW®P“€>}›8‘+›6>y2©¿üBÄ´iä=Jî¡C( hѽ;Q>Ê瞣>|cci7w.ûž|€°I“ðÅû¡‡¸ºgi›7#Ïή3®gt4_?gÏF¸cñ‹Xê¡þ(ò:¶CÖšIc&¢Q–’p*™+i™D· 8ȹ\AvA9A!mèÚ1½Î€Á` ñÌ9RÓ20 ‚@td!!AtÆ6Ή„DÔ•#FŒ¢RY†Þ ¯Š«'ùÜ%Dbá¡!¦6‘Þ`@¯Ó‘‘]B5¦€R!C¯×£Óë9˜ÂÌÇ_fö£“ùaý¯|öÑ":ÆD›Î«TÆÇ¥ª2Aƒ±ÀÕ%s“¬ª ×%‹« ëß•¹\ù†¿) È$ õȆ*½údù=–õ {C²¡¹Úá…»”5`jÊüM¹ºœV6 ‹o#7TöïD†ûÃ?ʹ‘Ïׯ\Á=7ùõëœÿùgz-ZDÈØ±%'ÓöÑGÉ?y’Ñ[·’¾c"¢½N‡O»vìž;Åõëˆ\]q £å˜1¸„…ÑíÝwÉOH dìX\"#±vp lÌW¬`ø/¿ÓRT„ë›eY²õmd]•¾ô6²ø&YV‡Üüê*ªÿz¾û./ƱU+òΜÁ10ÈG%ÿÌ’Ö¬Aäà@÷ ææâKEQò’Ô:©‚öîÐ//¬œHݵ‹ Q”•áJÒÚµh**ˆ}ñE-Y‚,?¯Ž >i^ŠÒRQ³íÉ')ÎÍEøôê…‹ éqq þæJ³²ÐVV"+-EVVFËÁƒ9¸x1ƒ­VËïÿþ7…YYH«ž¥Å?,þa©?Œú£­VÇÉ„3´oÄÁžˆðP“ΡÑhL:5Û0—/¥ñúM¬ùq3ë7náZvîMmcÉÒiu¦c Þû¿/ð÷¥E –|¸¢Vœš÷‚›Xju¥éïÔé>βßáô™óO8Së¼éæIÄ U=ë›djè4$kï@¾~u®KÖÖ#×§¯¯’ Ȇ;Щ–«Y\lu‡²î&Y¨ºNµ\}œ›têÓ×пYÖÖˆ«­qÍ›eQ ýºäÊúÕoÁuÉâúuÉš›äê¸7¯)[Õ!««d«*Y|“|»¸7—qQ ›åæàÕ½À¿o_J32(ºv˜'ž@ZXˆµ³3áá䧤Ðå•WÈA÷®¡ÑTÅ„Zm˜G§Odö£#‹yöÉ اÖy½¾ª£Ó›ŽUVVâã剷·'Þ^xy¹×Š£VWRÑ¢E‹„©c{sàØY|Ü% ô‚A ´¬g'Ê¥2%AÀ ¿_•ðÄܧø¼M”j ¶¿ƒ+0öjYcl™Þ­l…±å{;Y]%W;ä½”©ÊL;ntÁß©\ýc{‡²¾êÏ®êØ?•µU×­–…ªëÿSÙŽÝów*W¿•ÜNWÉJŒyy/eÆòTS¶Çøæs'²MU\yÕó¨)ÛVéÔ”í¨íõÉ÷«Té°srÂÖÙy~>n-[¢¯¬ÄÊÖk;ã¬c\ŽF.ÇÎÙL†K@•Èòò¨‰ÄÃei)´j5îî¨ÊÊp  (6–¢+Wè2gÊòrö¿ÿ>®T*•ÈrrLzÒœÓ5]Q–” U©p ÀÖÑiN‚Á€[p0Z• iv6.ˆÄb¤Uã³ÔÇnXüÃâ–úãÁ¨?Ï‘¢à@¼}ý©•PTTŠT*ÇÅÅ ‰ƒ=šJ-­ÂÛ‘›“›³5½€Á`À Ðëôdçäãïïk’ ,-ztƯSgììëÕ‹Å ÿwåŸÄ‰Äˆ rþw©±çµàzÑá¡»…‹+Ao¿ú÷âX°`Á‚ ,4)â۫܃x‚ pîJÑ]ÝÑ‚ ,X°`ÁB=X7trÝÏ¿#ßhƒEG…cÐééôP»¿uƒÁÀ¯¿ïB«Ó1iÌ0ìk¿t%ƒr© wWÊËetù[×oˆßþØÃàþ=qqv"3+›ì¼úöìR¯þö?л{,n®.už¿–“GZÆUöíQëøŽ?ЭóCœ:“Bç‡Úãåyç š5„ ì=p”¢’R<Ü]6¨/â=s*ryž ;;''G‚ýȼ–CE…’Áý{’y5›Ì«989:2vÄ ¬­­¼÷š¿¡Ö¨™þðX¾[ÿ+ƒ€­ —Ó2Hˆ åüÅT tïCAaç.¦r-;‘XD—Žˆ;–À¨aýÙ¹ç‰=ÇÎàêâLÊ…Ë88ØÓµSV¬úY…m¥™\Îî}qh*+éÑ¥#§ÏœÃßϗ¢FéÇö? ÑTÒ-6†è¨ðí¿p9Ÿ·ì`ÉÛ¯±båz<Ü]ÉÌÊA¥ÖбC[~ßñ­¬8rü*•š˜v‘H$=~[[öéÁW«7зgü[øâåéÎ/[v¢T©‰Ž #;¯'G ùEL?‰ƒCƒöX°`Á‚ nÏm?þ´y;gR.²iÛnÓ`¯w>XFHpï/ýMeåm®ç/¥Ñ.*œ6­C¸–“ÇùKi:r[[ÖlÜB‡èÂ[‡›_Àé³çXòñWŒÒ¯WoàÔ™s8|{{[¾ÿq;ö¢¬\F¥¶Ý®ßw(ž]Å‘šž€T&§ePßÿ¸‰ø„$ö<†££ßüðî;ÌùKiì=xG‰„¯¿ßÈžG(—ÊMÿ«¯èÏO›·£Rkðôp£Ct:ÆÞƒÇ8qê QmZóåªõì;B¡dÏþ#ìÜ{ÈÔø)—Énk{td8/>5›¯¿ß€­­ M%›¶íÆÁގϾú€+éYü²e'‰=Ÿ~ù=_}÷#mÂBèØ¡-öövú· Ct$GOœæÈñÓlÙ¾‡ž];òñòï8v"‘œÜÎ]L娉¤;zž,X°`Á‚…†¹mkÚ¤Ñ<Ô>ê–ãîn®L8 +«†{"ÂZqéJéY×ôo5M%A¨¥w)5£Îø~¾ÞØÙ'¼èÓÐ ÖlÜ‚¼BQ§þÍL3”îgìˆAüºu'"X‰¶{{yà(©ÝsS©Õ¢×ߘ=_PˆTvcO¢-Û÷ Õêk¥¿ °˜²r)ua\M<=ܘ8f(™×رçÀmm¿˜šÎ¦m»˜÷Â\IÏâbjÖÖÖ„†1t@o“žµ•­Z1lPÓ± …­Ö8é¾\*#ÿzQƒ¶Y°`Á‚ î Výû÷ÇÝÅO÷Z³5šJT*5í¢Â©Ôj±³³%6&?F éÇ…Ki´#$8°ÁÙ‡•••ôéÑ…¿åò• žr&™Y9 Ow¦?<†m#ÈÍ/¤sÇvúû1zøŽLdä~´h·—'-ƒðöòÀÛÓƒk9y Ô‡¶a Þ[«Õ¢P©éÝ=–>Þøáä(aÔÐ\¾’É„ÑC)+—Ò±}[BC‚ðpw¥uH0öö”–•Èäñ#éÕµeåR"Ã[Ž _†îËå´ ÆŽDi™”q#SZZNÛˆ0õ뉽­-ù׋xtêx\]œ‰lг“„‡ÚEq-'{{{;WWç3ÈÞÎŽÒ2)'O'Õ¦5F ÅÃÝ•œ¼zt鈇»=ºt$ÀÏ—ìÜ|ztéHÿ^]IL¾@e¥ŽŽÚòP»Hò 騾-Ýb;èGjzN‡—§;­C‚ñps¥u«`ÜÝ\ÿ~)²`Á‚ ,PXZFÂ鳯u°B\nY¦!5=“ËW2Má‘Cûcu›±Vu‘‘uó—Òj»œ–‰§»s™ôÏSpää”rá–ãzwÃÉ©þ53Nœ:ñ“‰¼ü̿Ӽ;"þdÅ¥e¦°»›+½»ÇšÑ" ,X°`ÁB]—iHgÅ7këo`Y°`Á‚ ,X¸sj6°L³¥r9rùi²`Á‚ ,X°Pgç_ÇL ¬ÞÞ´ 6‹A,X°`Á‚ Í…BEvA!P£¥R«Qk4õF²`Á‚ ,X°P?BÕnYhôÝûɯj}Y°`Á‚ ,Xh‘ˆ§ÿ=½^_ëð- ¬ø„$¼ö ööö7ŸjVœ¿˜Š·—þ-nl!# p î8ý{w»íêó÷7œ¤W÷Xl¬\Œÿ¾'îXÝbc°³³5·)wE|Bí£Ú48;µ9pár®ÎN´áöú÷+¹y”Ëä´‹ GhÆéW(8wá2=»ÅÖz3nn‚À¾CÇÜ¿—¹M¹+¸:¤[,66W‡èõzô¶66v¦àp|m#Âðòô¸ÅAà–áéáFaQI­su>Ù ?þؽ¿Þýøšß|ÿÿyi®iõy0.š”|)FÞò šR™œ£ÇOóð¸áÍ:M%{a☡Í:`ÜÃrè€ÞÈäͺ"ÞMlá±ãψD"FíÀs¯¿Ë²ß®µÉvsaá’Ïxé©Ùxz¸™Û”»&5-“{ñÒÓ³MÇÒ2®²m÷>^¹Ö¬P©Ô,_µžÖ!AL3ì_gæmúck{ozv¯¤g±uç_øz{¡×ë™ÝÀ„ZŽ×üÏ?XxG×¾ßü£ °ˆu?oÅÊJÌþ½iß¶M­óÇN$‘qõNWëø¢%Ÿóü“3ñòto2[S.\æÝx~î ¾únS&Œ $8ð®®ùù×?0|P?"Â[Ý#+ïŒUë~A©T£Õé˜5mB“>Ǧ&ójûãñ™SÔkÞß—ná£').)㥧góìëïðØŒ†Fc#•Éùé·í îß­VǦ­»iÆÚŸ~ÃËÝ?_R.\F,SPX\µr½;¾Þ^\¸œ†J­æÇ_ÿ`ÆÔq·¿™8 wwW.^N#!1™eß®c@Ÿn(•*D"EÅ¥¤\¸Œ‡»+-ƒ‰îÏ.öìÜ|~ݺ‹‘Cûóó–Ä'$qñr7ýH$bê„Q¼ûál\õ)¿ïü úþ’xö<»÷ÅQZVN»¨6¤\¸Ì¥Ô :wlGVvÓ&Žbã¦?pt”Ðù¡væ6·Adò Î_ºÂÛK>cò¸‘lÚ¶‹Ð`Î_¼Â;ÿ·Œ £†`gkËÚŸ¶Ð­óCf±ñàÑøz{’r!•ÿ¬Ù¸…·ç=Ëÿo9“Çàø©3””–Ó¥S{öÇgñ[/³à½OxtÊ8Ç' Vk˜6i4{ö!$8ÐÔÈ¿[Ò2®RXTÂðA}Ùù×!ÏžgëÎ}èõz¦NÉâW0~ô2²²1¸/ÇN&’|þ2›·í&¼uYÙ´i‚H$"åÂeÚ· åÂe¦?<–ø„$~Ù²ƒ‹©L0’ ¿nC$3eÜ´‚¶‘aØØXãáÞ4üæý—÷¾†¯'3Ÿ~¯=Ëï;öâ`oGß]8xäW2®Ò±C[6nÞŽÄÁžž];‘˜|žßþø“ÜüëL­ö ‰]:uà·í{ðöô@­ÖàëãuÏl-+—qôø)ºÆv åÂe:Å´å»u›pws!4$ˆ§Î0{ú$Tj5[wî#"¬…Å%—”Ñ¿ww.¦¦¡Õê°¶¶F¯ÓáççÃùKiTjuÈ~­à_“FóÓæíxyºããåÉå´LA ¨¸„¿{–0¾ Ðw7WÞx÷C¦ŒEzÖ5ýçù{zssöÜ%^žÿ>R™œüëE,xí™zuë­ášû,[[zwåÄ©3,_¹_//ZÜ=&^îü²e'›¶îÆÃÍWg¢#Û ÒhØ{ð(…Åøùz3û_É/(ä¹'f0aôPzuíDIi™WsÌœŠ[Ñëõì?OvN>9¹=‘HIiCôfçÞC””–a0øtɲs Ìmîm oÝŠå+×qøX~úS.•ŸÀ¨aX¾r=_®ú‘‰c†›ÙÚ[)—ÊÐW}¯P().)3ýÏÉ+``ßœM¹ÈáøSd\ÍF«ÕrâôY3[]7Z­™¼Â.(,F­Ñ˜þŒ9˜«Ö³båzÓž£M^¯çÀá\ÍÎ%;7Ÿø“Iäæ ÓéÉÉ+àÀáãDG†cogK¹TNN^z½ñœX$¢´LJ  ZÚ’Ñ÷̶¾½ºòú‹O°jÝ/äå]'îXR™…RIâÙó\ËÍcÜÈAlÿs?í£#‹ÅDE´fÇžƒ9~вr2yþ-Êäøq8ÞèÇ cÇŸ8ŠÒr)†„¤d®fç2t@o¦NuÏÒr;Ê¥rÜÝ\pqvB¥RsúÌ9ìlmyã¥'éÞ¥#í£#iÝ*˜´Œ«X[YÑ.ª `ØÀ>$%_¨ò‹*µ:Nœ>KnÞuÚ·mÃsOО½ˆsSYôŸçyçX÷óï(•*’Rðöô SLt³ÌÞ±C[²®åòâS³øëàQ®Ó¾mE%¥Ìš6½Ž2iÌ0ìÌkl¼øÆ{9~‰ÄoOJ§Ïœ3¯.K®.Îøz{Ñ)&š];šËÜIMÏâÕÿ#ëZÞžÆýHÏ]Låza±Iç¡ömiáãC…RE÷.æIGN^WÒ³Xøús¼=ï9~úm;öö¦Fº·§Y×r¹š‡µ5‰ƒéœ€@·Ø;ɉÓgñöôàjvW2®ÞÛ~Ûö'k6üÆŒ©ã¹š‹·§þ-|èÒ©íÛF`08rü4ÞžˆD"<ÝÝ8pø8Þ^Ä´bô° ^?îèI¼<ÝñöôÀ×Nj؇ÚÑ)&€.:4éoפ±Ãø}Ç^¶îü‹ÞÝ;è¼BÁŽ?rüÔÜ\]¨P(ÉÈÊF¡P’›ÝôŸ„ƒƒ}U:<‰}(šUå©sÇöØ4Ò`í^Ýc±·³ÅÉQ‚N¯7æ‘—=ºtÄÞÞŽ€-ˆi…·§a¡-éß§[ƒ=i§ÎœCc:¼½èØ!šþ½»ûP»{öéùf²sóÙ¹÷ãG ÁÛ˃¾æïÔ¸W‚@iY9J•šJ­ÖøW©­õòw3÷o} fè€^øz{R&•›Õ–¶a¼úÜ¿ñõòB$ѱC[üZxÓ½s "DÌ{q. …’Ö­‚qvrä—ž¤Balpµnƒ¯—'¯>÷olmmI<{Þ¬i¹oOþïyxzºóïÌãÓ¯¾'6&š¾=º P*q”8àììÄÒÅoââì„ØJÌÅÔt3[~+ãF ¡º)ÞÂ×›ï¾ø1í"iŒ¯·׋ŒûCí£;Ò<½%·ã“÷ç“›ÏÒÅoèOdx(î®h*+Q(Ux{zð¿E¯Ñ:$˜˜è4•Z"Û„ÖÚô~!:2ÌäÃõEäѧGgœ% ìÓ0æG§˜¶f³Ó×Ç‹% _5ÊÞž¬^þŽìlm‰i…F­¡´\JIi^žî,]ü¶66DG…Â…Ëi¼õÊ3DG…Ó«{,©i™(Uê{²lÎôÉcH¹ À7Ÿ½‡§‡;).#‰ˆo…••íÛF°jÙl¬­YõÅÿ‹Å¬þâ\/*aÊ„‘‰Œ“Kk¾ªvëü-|¼ø~ÅÿáçëMhH1í"ùöó÷°jâ—õ'çü‹sSÑéôŒÒ‚üÐêt´ÃÖÖo/wÂCC¸’‘…V«#*¢5ûöÀÃÝ•];Ò2(€È6¡TVj‰jJ /|}¼Þã:$¦]$þ-ðñöäãÅoàß‚.Û£T©WõÛ²ðõgMû/xíÒ³²iß6_/"ÃCñõñbÞ Oÿ¿8àä(aøà>„‡†Ð!:ÂXÄDÓ!:o/ÏF™ˆóô¿A*“cggKT›Ö¨Õ2¯Ý_[þ)IɈOHªó\qIYÇëm` ‚Pk^sCA îèIž˜5[[[S¡ª>×Ô8;9â\cXÕàö°V·rÖ­n¬¬ïäh”œ‘Êä&ûeÆš­­ QmZ#¶66téÔžñ£†`üÎïáîjÒmiœ<¡Ñg©ÝOéhQãÍPbÚE˜þ·ðõâÜÅTúöêB€Ÿo-ûï—´x¸»šž¹ DEÜ:9"ªjÂD͉÷[:ª k|Sø†ÏøúxQXTŒV«eü¨!fË;[["Û„}ÀÖÖô|«mÌÍ¿Îéäó„¶ fpÿž8T è._‚ `cmMtd8'“ïI:Äb±éúÕT‡µ:Ó&ŽÆ¯ª·A“ ܶ·è}#M÷"wJtdx-›ªsL᪠\5'rÕôAjå_µÜët¸8;áâì„ „·0ý¯¾Ou!NN޵ž¯S•_Tÿ¯é'¾xÝZT]«1êà€ZvÛÙÙzßý–ü]ªmïØ¡-cG B©RßtÞÀ3¯½SgÜ:Xñ I¬\ó3B3^§°¨”Ô´,²²sÉÊÎ5w”8°zý&.\N3£uwAؼm7ñ gÌmJƒ|¸leƒçÕj {åÏý‡›È¢{Ë™”‹H¥rNž>ËÖ]ûšõIQq)W2®òÎa+¢ IDATÃÆßL àæÄg_ÿ€L®ÀÅÙ‰–­B^qÿí±úÅ·ëîH¯²RKûè>úb%¥åjÓí|õnñoáç_~OnþõF½Ocó Ô!‚``ó¶?ë핹x¸»Ò!:’ƒGN4Ú=š…B‰H$B­ÑPRZ»·J„[­¦ÎV§Ñlüî³{oe²ïÐQÂÚFòè³skWI˱ܱ¶u0“e÷†Ju‚­‚)OÜÓÓÿ)z­u‰†ácg™Û”»F^‘E¿ñcÍmÆ]#Ï/aÌÄÇÌmÆ]#—^cºß½›ñe.ä× qv1·wMEy?Ä÷éìá;åÁ«Cæ4Ú=t5Z©À¸‡Ÿh´{4ƒ¢k§ÿv¼:Xvv¶·´ÒšGŽŸ&$*G¯Ú?°ƒ;Á[{g3Yvo°².Å`oÄÃÃܦÜ:A©ÄÑõÞN6Cá-å­9¢)Ó<ùQYú`ä‡Lñ@äG¥ZŽ£§W3_ÝR‡ü*• ÄZC³/¿ƒž¢¯y—ôdde³èŸ³déWµŽ¿=ïmþ·èL5™Ò’Òzb7>:…BBQF£F¡P°eË/ôêÃñãGké* d2):®*^ß|óóç¿Ì”)cÈÌ4ßÀp½^O…¼•R…F­¡B^Á_»ÿbd¿‘lúiS-]•R…L*£²²ƒÁ€\nüî_R\ÂØAcÙðÃs$0vëÊdRÔj5™LʉÇø×¿ÆñÙgÖÒ­>¯V¿½ËdR45QQ,_¾ô–ükjä29µ•J…\.ç|òyžšõ¯=÷Z-½ÊÊJdR*¥ € yÉg’™6f/?õ2¿nøÕ曨é EW¯fòŸÿ¼È´iµ{u:2™…¢¢*ž‚ìì«|ùå§¼öÚ³·è755}C¥TQ\TÌ’EKèýPïZzƒ™Tfò •JEIq “GNæÃÿ~È3sê__§)¨éjµ•JÅŠŸrk…,“I‘ɤ‚€F£F­V3uê–/_ÊÃ@§Ó5©íµ|B&ç\ò9žœù$ó^˜WK¯.Ÿ¸xî"ÏÌy†Ÿ|€WŸ}•÷¾Ïä‘“))nÚÉ«}B©4úDVVóæ½ÀôéãkéÝð EU<×®eñæ›/3i’qÑçmÛ6Ó¯_,qqû›4 Í‘cÇâ˜2e_ýù]]çi`…†ѹcû[–¬ÿï‡ÿ¥CǸ{¸›u™ƒ¸¸ýÄÆ¶aüø¡¬_¿š7ß|‰ ¦àââZëûmjê%&OÉ×_/cåÊœ;w–W_}–'Ÿ|žîÝ{£PT ÕjÍ–ŽÌôL"#yxäì_½ž9Óæ0xø`‚Z¡­¼aWIq £ŽæÇïä½…ïQTXÄŒ‰3ÐVjYýõjZ…¶2ëV,Z­––-Ý™>}ëׯfÔ¨þtëÖ“víbÐhjb<¸[·n⥪­—FêÏúõ«éÓg ¥¥%‡˜'Ut‰êÂäQ“ùìƒÏ˜1q^>^ôê×ËTiT3gêV½šWžyi¹”9Óæ°wç^ôz=?ó8c'™·a2aÂ0Æ›o¾Ä«¯>KYY)£F35¤ªyûí×ùè£÷˜7ïrr®ñæ›/QPϬYsIM½ÌË/¿a¦yþ‰çÙo$s¦ÍáÃ÷>$áxÓgMG.«=íÛ/¾åÍ—ßdþËó¹xî"Ÿ}ð»¶íB&•™_æäÃ3dHOFêÏÚµ+ùé§µ<ýô‹H¥µÇ‚íØ±•'ŸœÁÛoÏãĉclذ–µkW’œœHŸ>ý9xð¯zǨ4±±L5…Ï?üœG&<‚¯½úÞê³'Ïæûo¾çÕg^E&•1{Êl\Ü\è;°¯I÷ÀžL›1Œ´Œ&I7nãÇeþüWxå•gɤŒ9öŸX°àU–.]¼yÏ“››ÍþóEE×3f¢IwìØI¸»{6yc·9Ò³g_"#Û¢©g œ;å_¦a劕dedñÙ7Ÿ!‘Hªn©‘ðõõcÓ¦¸ºÖ¿¢qa¡qÎyónlSñõ×k£ƒ¬^ý 99×ði\cÀÙÙ™Õ?­Æ·…/=S÷XE…‚ëù×yú¥§MÇ~ßû;_}þ^Þ^ÄÇÅãäâÔT&׉H$æÓO¿¦eËV<öXý½))gxä‘9̘aLëáÃI¤¥¥Ò§Ï@þøc3«V­àí·—4•ÙuòÆ;oгOÏuRΤðþÒ÷ à׿òóúŸÑh4lþi3"‘ˆ…ïßÙö(ŬYs™6m†)\×ÛvròæÍ[Hß¾XV58ûøñ£¨Õ*ºukø94ÃFcÞ½%YY·è$ŸI¦gŸž<úoãâ•Qí¢ÈËÉãý…ï3ë‰Y èÒðÚSMA‡Y¾ü;S¸®™å))ghßþ!æÏÿ/Ý»7t6l4YYf›ôñæߤ{¯î ê$ŸIæƒÏ? 8Ä8ÓnÓ®M ꛃ9sždÊ”GLáƒÿºE'9ù óç¿KïÞýLyvìXóœ<ô ðÀô`ÕÇ—Ÿ~‰£“#ëW¯§¼¬qgáÜww\]Ý8~ü(O>9³N??ÞyçMV¬ø„ÄÄæÌ™Æ·ß.çí·ç¡Õj jJ³oÁAâ€o _®]½Æ˜cêÔqrvÂ?ÀŸO–|Â[¯¾E~~>Ãzãá=L¿AýpuwÅËÛ¼ãcÄb1-[¶B§Ó[ÿªÙ:uaåÊ<öØ¿0 ÄÆFžžÊüù/“pœNº4¡ÕuSÝhÖ{ùùùuêtêÒ‰ŸÖþÄcÓCZ.eÌÀ1ØÙÙ!‰ÈÏÍÇÓ˳ -®›PæÌ™FbbB:±±]ؾýw|:99×xòÉ™?~”¯¿þœ§žº?¶å¨Î·^}‹í[¶×©Û%–CûñÄ#OpñÜEÞ}ó]öìØCPË ~üþG:uéÔ„×Mu~¬Xñ ß~»¼NNº˜˜Àܹ38~ü(+W®`ÅŠOX²äm.^ae%FîÜ'ªÏUëÖ¬oš¢©T*Ðpvoz?¼[ŒÏÄb+ =Y);ðòt§¨¸ögbA˜¿x)ß}ñ? ‹JsWÒYñÍÚú?Jeæ]õün©Þ‡í~Ù^¦æM¹.ûn>V­kccþÇj¾Y®kµf++«ZÇk¦ËÔxlLc@$™*‰šò¤£Z·±¶Íø»XÛÜx®5óæfnnÈWëÞ/>RÓŽšòÍr}é¸_f§Õ,+õ•¨]îŠg.ê³§®r¿¥£–OØü}Ÿ¨©{³NSR—O+ý;ó‰êsu·Ð0÷¢ìÖù´ãŽ%pøXB3^fÔ¸A¬ä…µ»†ÕR):ÄhTR3YvoÐj*Ô*ô:ó x¿´:4J ò²æïø•ŠŠ[Ê[s¤R)G^Öü·¸¨TÊŒüPT 7ÿüШ¤T ˆîƒ=aïKrçè4tпܒ0"ÿ¬+ ÎZ­W÷XúöìzW™› ¿nE$ØàëV{‹r]>‚vv÷ß½…XƒÁÎ g·æ½ÎV£A¦¸†§Só΀½Ë-å­9RPªÀ÷AÈýƒ‘Rõ‘…*+¼Ü‹Íß;w7...øùùaemƒµ`…Mãì&þwP(•ääæ"‘H hPW©R‘“ƒƒ½=ÁAAX[Û`°±ÅÆÖ¾‰¬­ŸÊÊJ233±±±!44ôŽâ`oo£ƒ=VVÖ÷E~‚@jšqû‹ˆððÛhCjZ‚ àá——1÷A~¤§§£Óé ½í§ÌŒŒ ´Z-­ZµÂÖÖö¾É€k99¨T*‚‘8Ô¿rvµ&¹Ÿò#??™LF‹-pumx tAAR©___ÜÜÜî«ü(.)¡¤´O¼<žQRZJqIÉ-þa®Ößñ ©TŠR©ÄÏÏ™LF~~>ÎÎÎøûû›½¹SŸ£_—”h•›‹‡»;Ž ÖÖ6ˆ¹Ñë´÷Uù½S WÒӉŴi݃áŸ-3Òü¿ËT‘‘•ÍŽ=Ðêt8;ÞØPyÙ²e„††òé§Ÿ²eË$fÊçâÒR®^»†^¯ÇÓòòr±¶¶fýÏ?³üãißÖ8°8!1‘²òr:wìˆH$âJz:ÉçÏ£ÓéøeË>~ï=Ú„…˜% …‚¤¤$\]]‘H$äççSXXHff&ॗ^bðàÁœ;w޼¼<¢££ñôôääÉ“ôíÛ—³gÏòÔSO1gÎæÌª{6ecc0Øwè!ÁÁˆÅb2²²H$ìÙ·+Œ:”G¦L =3“ôÌLBCB e„0jÊ>Y²„6­[ãmÆÃ:D`` jµš’’$ ›7oF¥RáííÍ[o½@^^çÎÃÏÏöíÛsäÈÊËËùꫯ4hÁÁÁ<üðÃfKÇÉÓ§M¾a0°³³cÝO?áéáAFV+—- ´¬ŒSII¸»¹Ñ¥S'N%%áæêJzf&ìÞ¼¢‚õß~k¶t¤¤¤˜|ÃÕÕkkk¾þúkbbbظq#{÷îŒ ‹>|{{{úöíËùóçÑjµÌž=›W_}••+Wg¶t\IO7ùF«–ÆÍµ?Y±‚QC‡2zêT®$&št÷ì7.§1dÀ2¯^Å`00fÚ4þïÝwy}áBÎÅ7팶jŸÐh4áèèÈæÍ›Q*•´hÑ‚7ß|€ÜÜ\Ο?¿¿?íÚµãðáÃH$>ùäÄb1ëÖ­cêÔ©Lœ8‘o¾ù†ßÿ½Ië§NáåéI¹TŠ^¯7ù„‡»;W³³ùæ3ã–vuù„­­-+׬áLr2‡wïfó¶mÌ÷]¾øè#†Øt‰h†:z”#ññ¤\¸Àäñã™4¶îÙò·ãþz bìˆÁdçä3¨_Óñ påÊÆ‡·wãu…ÞŽÄ3gè7r$K—/çü¥KÄ=ÊÓ=†V«¥sÇŽ„VÍ>;™˜Èk °uçNŠ‹‹9pø0Ïœ‰·—‚ÁpÛ·–Æ$77—Aƒ±páBΟ?ÏÎ;™8q"aaaxxxйsg“Þ”)SpvvfãÆ(•J¶oßNEEþù'íÚµ3[À8›fè„ ¼ðŸÿpþÒ%6mÝJ¯nÝ=|8eee pc ¢C†à×¢«×¯Ç`0°iëVÎ_ºÄÃãÆ±iëVÊÊÍ;ãvúôéÌž=›S§N±}ûvBCC™={6Lœ8Ѥ7~üxAà÷ß§¼¼œ;w’ššJqq1ÎÎÎ 2ÄŒ©€—ß|“I3gwô(FboÏ+Ï>Ëé³g™5}ºIï©—_&'/CGŽp-'‡¸£G©ÔjéÃ¥ÔTÞ|ùe3¦>øà† ÆÎ;9yò$ååå,^¼˜}ûöñÜsÏ™ô-Zĉ'HNNæÜ¹sœ:uŠììlIOOÇËÌÛüüðãô:”M[·’rá—RSYññÇlÞ¶7j<ã/W­bËöíääåqìäI.\¾LÊ… ¸8;“›ŸOzffëg5&Ó¦McΜ9&Ÿhݺ5³fÍ"33³–OŒ7€ß~û ©TÊÎ; føðá&´´4úõë‡L&3­”ÞT¼ôÆ<}ú°jÕ*Nž<Éwß}gêz×jµ( ºvíJDD®®®¼ñÆ,]º‰D¹sçÐétfëÁ°¶²bë† ØØØÐ³kWö8À'+V°uãFlmo¼¦É+Ï>‹H$âý… I¹p}ûr21‘m»vѽ‹y×ÂZ»v-­Zµ¢´´”´´4,XÀ?þX륢¨¨ˆððpºv튳³3¯¿þ:Û¶m£eË–ˆÅb^xáÖ¬YcÆTÀ§ï¿Ï€¾}‘J¥ä2ëé§ùjéRÂZ·6é̤±cqppà±™3qppàÐáÃXYYeÆyë­·˜3gr¹¹\ÎĉùàƒL/ `ÌÈÈH&OžŒ !!!••ÅO´ðõåÙ×^C§Ó‘–‘N¯'77—¶‘‘€1ïNž>ÍÖ;èÞ¥ ß{>>lܼ™—Ÿ}Ö4žQ®”áìÑô;$&&Exx8ï½÷œ={‰DÂÅ‹騱#ööö:tˆíÛ·÷ß~‹R©ÄÞÞž¬¬,bbb0`ò²"œ%M_é_º|O:ÅİjÍÎ]¼ÈÑ'ðõõåxB=ª€înnìÙ·]{÷Ò:4”=û÷“xæ ¿ïØAzf&­Z¶dô°a(•2=|‰ÿÃÉž={˜6mŽŽŽL˜0www (--¥¢¢Â䤤¤°eËÈ£>jê­ª¨¨`àÀ(•JΞ=‹§§'&L@ÐW6Yr$>ž}ûâëãÃÓ¯¼‚^¯'-3NGn^Þ­>±s'Ý;wæ­Å‹ ðóÃÞÎŽô¬,Æ @üÉ“t‰%( €J­ÁÚ{‡ÆÛQC§­D«¨À¡‰ë©»e×Þ½(”J²®]ÃÚÊ ÿ-¸^x ‰Ä¥òÖÝ`öÅÅ3nä`Uç KËH8}öÁZh´&ËW®cΜ9ô4ªÖñÒÂ$‚öö3Yvo¨PH1ØÛãb† ä^¢Õ¨)ÏÉÄÛËßܦÜ5yeyø‡˜¿÷änÉ»’‚¿OóŸ}—W”˜y?Eß ò2.àïÙð$˜æ@Áõ«ø„E7ûY„R¢··ÃÕ£ñ¾†¨•r”…x¸7ïzÊ`Ðs6åȽYhT²só1ÓR÷­eCK ,X°`Á‚™¨³uèh—®¤7µ-÷wWW¬Ez r®Ô:®”KQ`uóš6z3šJt¨ò®!ØÙƒ=h*©Tv¶ààp#lk ¨¬D¤¬Ö"R*lm@"¹¶±G hµˆ …uˆ kkprQECa=¢Š ++pv½ƒLŽJ¯CohÆ­ù**Te·”·æHE…”rÍmÆ]S¡(0òC^FÁ?r_!WÈrÓšäacò Õ!‚•RÖh÷ÐVjÐV(¨Ô6ï±ÿé†åu6°ú÷îJ¯næßhônøæ‡¨=µ»&u…‚Yö"¼×ˆ¥)¸nÛ…vêD Áˆ®fc»iÚÉ0„·Dt-Ûu›Ð><C›–ˆrò°]» í¤±Æpn¾1=Ílá½Eœ–Aå“s°Ú•Z¬Î¦ÜëtXI6†½qͰA@œT>x€øÏ¾"+2œ¾»ÿ"@$Â*ñ¬ñü¡#`e…U♪ðQ°±FyðÛ}¼—ž ¶¶X®:wìì°:T>öXª > V§QϘ÷É| ƒÁÀ/¿¬DL›6ã¶ú?ÿ¼A0ÕŽ˜˜ûë…dÛæm(JÆLƒ£SÃL·oÙN…¼‚‘ãGÞw3¨öíÛMQQ!ÅǧE½zEE…ìÛ·OOo† ÑT&ÞñG⹚q•n½ºÑªu«uOÆŸ$ãJ»w&¬MXYxg$'ŸáÂ…dÚµ‹¡]»˜uÏŸO&%åÌ}ã[7mE¥T1fÒö‰ÌôL ò èÑ»Ç}W‡üõ×nŠ‹ 8p>> Ÿ*,¼Nrrƒ—8p`/‘‘Ñøù5ÿ1¯‰V«eóæXYY1yò#ÿø:Ì2 YÙ¨5Ê¥2V¬\‡Db\+jÿžýôîß›™Ïä§m?áéd¾5¤î5ú>=üZ ïÞ›ŸC7f„1Ü£+6?mF7z¸1ܳ6~E7j˜1Ü«;ÛÉKϵmî®.~·Ž±ˆÐN˜ýØó0Ð DžA`Sj:n«ä‘wç³ãxaîÿ±‹ò غg?£ïÆæûõèõCðk®l¿[‡n`_cx@lW­E׿wU¸/¶+× ë× ÁËr”Mÿìôz>ýô:v쌽½=ññGèÓgNNÎ>|€ÒÒžyæ%Àø£tñâ9"#£0`K—.¡GÞ¬\¹œU«6ÜöG®±ùò³/‰ŠŽB£Ö™‘I§.P«Õ²xÁb>øì‰?OPH£Çæ»/¿ÃÚÆš¸ýq<õÂS‹;ÆðÑÃos·ÆãÇ¿Çß?ÂÂëèõ:BCÃÈÎÎÆÉɉ—^zŠ ~ =ý ;wnÅÓÓ›)SaóæŸˆíÊС£X¶ì#³6°þØòNNN¤]NÃ/ÐOΞ>KLl 3&ÍàÈ™#³aÍ$Ìž;›}»÷aeeżçç±rÃJ¦›ÎÉ‹'Í–Ž¸¸èõ:NŸ>I·n=‹Å?~”‡þ}útäÚ5ãKle¥†¯¾úAxê©ILL@¯×ñ¯ãôéËÄÆFž^Ô¤¶¯øtmÛµ¥RSIzZ:±]c©ÔTR_Àû ßgÉ'K8}ò´±ñ̨ñ£Xµb1±1¬Z± ‘XDÞ=˜>~:_¬ú‚§g=ÍÆmñqm¼Yw7³~ýj‚(**D«­¤uëprs³qpðÊ+O³~ýo¤¥¥²k×6¼¼|˜2e:¿þº‘VüöÛÏ$'ŸaðàálÛ¶™wßÏG}ai`݆“'ãquugÏžÈd2æÌ™û®Ó¼ûjkDtdÒ3¯àãMwÒ´I|úÁ§¼õß· 1Ÿ€õ_°Þ¶«3)TÎqvŽ1œtÖÎÍ3†©œÿ*¢ücøÄ)689òÎÓ/ã{ì$eR¼_~†©C’øñrBŒú¥e,=… ¹‚–o¼LNÊy¼â#øõ IDATŽawŒ?Ã[Ó/ÐÊ¥Xí?dÔW*±Þ¶ë=ŒaµÚÞý—1¬ÕÃ;÷Ãz=Vû™åÙéõzÞ{oÛ¶mÆÉÉ ßÿgï¼Ã¢¸¾ü.ìKgéE@{/‰½×Ø{oÄMb4Q£&š_LLŒKìšØM¬±Å®ØQD°aoôÎ.,Ûw¿?V±&*¬ðñ>sgÏΞ;wÎÜ3wî=ÇÓ‹÷ßo€¯¯?Þ'0ðqŒ™nÝÚðÑGŸûƒÁ€§§ööö <œ¯¿þ‚ƒÿ1KòøeÎ/¬^¾GgGÜ=Ü©R­ 5ëÔäÆõùFK†öJ‡®Ðj´È³å¸¹»¡Óê¸wçÇ£T€yƒ®[÷+sçÎÄÅE‚DâJéÒA´mÛÈÈ‹”.ý8ÖgŸ¤zõZ¸¹¹‘’’„‹‹[[;222 ;ËÈ‘Ÿ¼äW ž¿·þÍÔñSqswÃÉÙ O/O† äÜ©s– 4ÉMÿr:W •«VæÁ½8:;âìâŒÄM™gòÉšƒãÇ3jÔàÜëÝ{{G>ÿ| ÇŽ&0ðq{Ì›7 ¹<›æÍ[}{{{ìíèÙ³[¶üANNáG\8{!kV¬ÁÑ)×&ªW¡Fíܸ~#ßyÒkºwB­V#—Ëqóp£R•J´l×Ò$£T(qvvF§ÓzÀÔµkWñóÏ?˜l¢L™ Z·þ€¨¨‹ùÚ`ìØÔ¬Y‰DBJJ2‰„€€2tíÚÛ$Ó¹sJ• (Tý‹* 6ÁÃø¸üý_û8ÅÆÁJJIE¥RQ»FnÞ¾gÚ?´÷PzôíA§î¯êþ]Æà`YÙÆÿ€Á>·lÿT9ïó§ä¿ìÝÎmšã,qF«ÑrE$¢K›æDw0W`ÆWÑB¡ˆ… WRµjM<=½¹sç&ŽŽŽT«V“Ë—/=#ïåå@ ÀÓÓ›7¢±°° fÍ:\¾ñœ£.?ýò 7ÀÝÃÄøDTJ š4 *"êYww,--qópÃRhI¹ å(\–ù?Î7ƒæù™6m&mÚ|€DâFv¶ŒØØG´ióQQÏžcW¬¬¬‘H\±¶¶æÜ¹“–ÆÇÇüó=ÆOO·>ÝpvvD^Œ¤{Ÿî\ޏüŒ¬£“#b[1NNN âcãéÕ¿×se ›‘#?aРs,;ÚÇàÁ>÷š··wÀÁÁ;;£ƒÕ¡CÆŒo ¢\ØÌ^4›úëãáéAb\"jµš<÷¼æÙ„»‡;–Âw+ŒÄôé?кu{$7²²dÄÇÇÒºõÏm‰Ä ++ë\Û(Ú“ðÍÉÍ›ÑH$nT¨P™k×^ß‹ƒegkË©sáÄ'&2ðq>µºõêríò5–Î_JfFÑŽíõ4úÊÑèÁÇÑ/+0ØŠe?_cÙÆí€ÞèJ!úeˆDÆr`í3¥”jß í€ÞDHeÈþø‹ègØ«ÕñÓ´Iˆ~Y@o`ÂÆ•ÜIOçø_a/¶áb¥òè+–ç_ÆôëÉð1Ã)W¥¢Q^©B; 7ºê•eyޱ\£š±œm,×®n,Keh»vxuE † Wˆ<¸gg ›7¯G¯7äY¶lË—/4EE>xp-[¶åáÃ(•J>úè3³Ô!~ƒûakgŒÉz$¡•ý{öËS¾0ÉÍY<‡¿·þÍ­›·‰DœŽÈZľ]ûˆ‹gü”Çi~æ.™ËÎ-;¹së"‘ˆGO ÈQT.ˆ¦-›Ƈ—=;÷0fÜJîP§NÝMSÂÂΠTª8wî4/†1}ú&¹ÿýïGÂÂÎpþüYllÄ\¸pŽôô4<=½éÐáqºœví:âëkþwGG'6mZ‡X,fȯ}œbhtà°Ôn™?©eVrR±X¢”§#8¿ë–Íî=€ÁÏ‹{÷Ñtë„pßA ¾>Xܽ‡¦{g„ÿÂàãÅ»hztA¸ÿoo,nßAÓ³+‡1xyaqëš^]8‚ÁË‹›·Ñôî†ðàQ žXܸ…¦Ow„‡ŽaðpÇ"ú&š¾=>†ÁÝ‹èhúöÄòÈqpsÃâú 4ýzby4\]±¸vMÿÞX; W¯£èÓ y:8ƒU„éQHrsJeÒoÇ!)«ÓS®! *úIú½‡H\«™[7&#éNAEaqêCô6Rl p¡:GŽ*YC1XEøàÊÞ·h4.!‰c'Ïé@£ ‰ÉæV¡ÀÑû—ÂúçEÆ0 Ë£/åk,÷ꆾrôþ~ÆrÏ®è«TDèo,÷茾jeô¥ŒånÐW¯‚¾lic¹kGô5ª¢.c,wþ}­êèË•5–;¶G_§úòAÆr‡¶èëÖBW¡œ±üAôïÕFW©¼±Ü¾ú÷뢫\ÁXnÛ}ý÷ÐU­ˆÕ²ß÷fîSYB %”PB o•ç:X1q ˆ„E{açZáfo<61ß~U– = 4Bk3iövP«`Ù¶-b(Ôä´m‹A/0–sž*˕ƲÁ2™ÜrŽÂXs—û¹…(Yhe,+U¹ek ±‰ T¡xâsTjcYôTÙÊx<Ô Í›£ÎJD®Gb5¼jEÖ3×[QDŽœæVãQË3Çíû€:K†\WÚ#œ8=Àܪ¼Å©1ˆ rÔöZµM¶ MÑ ûô$Ãë-nxîÝÇB`ÁžýǨ^µèæUÚ¿;nnžøø•Ï·¿8å‘ÒÛø|.ÂàW”ŸÓót¹ìËËß¼\„Þ¯¥Þ»D|†á™ë­(¯PããQ Ú#E[<ÚC­Ãǵè·G¢A‡opI.Âw„’\„ÿ½^Grâÿü½>ÞU(W†az¼‘Ræ">1‡ÜàŠû÷ïçòåË8::bfÍž%G¡`ÁÒ¥ôêÚ•à²O{#9ÁácÇÛØ0jØ»÷JM£Ñ°bÅ êÔ©C½zõ^*«ÕjYµjU«Våýºu IÇÁ``ßâ&‘ðA›6/•;i¥x¯vm¾¢Îæ`ïÞ½¤§§3hЋƒ¦Êd2–.]ŠF£¡gÏžT¬øî=T=ž°‹7zô eâøkÇ”J%"‘ˆ Ÿ~Zˆþ;nÝºÅÆ™1cÆ e´Z-kÖ¬A*•R®\9:wî\ˆþ;RÓÒøæÇY2wîKåþز…¤dcÈ€Á}û’v/g÷îÝH¥RøB™LÆñãÇÉÈÈ`È!ïdr&,ŒðK—ûÑG/”Q(„]¼HDTŸü1q üþçŸtjßžŠå‹þƒGA£×ëY÷ÇøúøÐªYÓ×:FÑ?Š“g/ðÍ Ùµi%A.žXYYÑ£Gz÷îMÇŽ±5ÓÊÕˆ¨(~[¿VK³F¸vã3§Mã×uëø}ËÖ«GpÙ²ddf2{Á¬¬­©Qµ*åÊ–eݦMtïÔ‰:5kòÓüù4nЀ åʼúG €¸¸8&OžŒ§§'µjÕâØ±c¬ZµŠµkײ}ûv¨W¯ …‚ü±XŒD"¡{÷îLœ8‘µkײ~ýzvî܉¥¥¥Ù,FCÁƒ©S£AeʰyûvvmÚÄ[¶°ïàA*–+gr°f΋­­-ÙÙÙ|=q"]ú÷§o÷î„]¼H§öí©ÿÞ{f©CC† !88GGG"""˜3g‘‘‘lß¾½^or°V­ZEjj* …‚É“'óÙgŸÌ•+Wøé§ŸHN6ï¼Å‰Ó¦áää„B¡@£Ñ0¤_?´:¿oÙµèh“ƒõ÷¾}\ŒŒD­V3é³ÏøyñbzuíÊø1cøø‹/¨`æÎcîܹ(•J>|H… ¨Y³&•*UbÕªUlݺÕä`;wŽíÛ·£ÓéøüóÏÙ¶m®®®,Z´ˆ©S§òÓO?™ÕÁZ¿iââ8ñ"½ºtA$Ñ»[7­\ÉÒ_59X÷<`ÁÒ¥ 0vÔ(Â/]B£ÑòÉ'Ȱ÷ñ¡o÷î…ªû Aƒ(_¾aôèÑ?~œ””† §Ÿ~ÊÞ½{騱#Í›7ÇÝååQàß&¾ú gT*J¥’a ÖhøcË¢oÝ29X;÷îåRTj†‰cÇ2wÑ"Z7oÎùðpö8ÀçLLl,›¶n¥Fµj%Ö¿`㟲çÀÞ«]»ÄÁxOV–û'Ò øûûóÅ_°fÍüüüHOŽ5‹n©iiìÜ»—ÕK–P£jUêÕ­Ëß{÷Ò¨~}¶îÚe’‹ºz•3çϳoË““ñòð`Ô°a”-]šû"P« îù«ËåìÚµ‹_ý•&MšP»vmŽ;Fpp0~~WŠ$%%±nÝ:n߾ͽ{÷prrbòäÉœ8q‚€€üýýÍV0ŽTíÙ¿Ÿ.íÛÓ²iSªV®ÌÅÈHìí)”ÿ=ç×ß.=k7Œó`fN›†‡›U+Ubåúõ\»q㥣+ÍáÇ ¦{÷î´iÓ†¤¤$233©[·.aaa&¹~ø#GŽ V«±´´d„ œ:uŠ7n0kÖ,Z¶lI­ZæKir&,ŒêUª0aìX z½žKáá´mÑ‚kÑÑ&¹K—2mÒ$ýý±‰øpÐ <ÜܸEÔÕ«Ìúö[³ÕàÒ¥Kdgg3{öllmm1 ìÝ»—¾}û²uëV“ÜŠ+hܸ1mÚ´A,Ó½{w²²²P«Õ¸¹¹!—~€Î'¹yû6cõ’%¸»¹°|Í> aÆO?™ä6lÞŒ³³3Á` E“&è –ÏŸÏâ•+Ñé ?SõáÇ©X±"ݺu£U«V$$$ “ɨ[·.ááá&¹™3gŠR©ÄÒÒ’‰'R¦L¢££9xð`¡ëý4§Ã¨U£>ý½^^¯'âòeZ·hAô­[&¹ùK–ðíÔ©øûùaeeÅðÁƒñpwGhiÉž¨W·®©Kx9aáá¸I$”-ýò´V¯¢h¯—}Šß6l!=SJ¶\Îåk7èܹ3'NÄÏÏÏ,†þ$•+T mË–dËåœ8sYv6¡§OÏÙóÆ”ÂÜÅ÷< ,<œÔ´4ŽŸ<ÉŸÛ·#•É(U*sVOOOzõê…P(äŸþA&“qéÒ%¢££9{ö,`Œ3% IHHàèÑ£( öî5¦¸|ù2W¯^5Éš ¡¥%Œ›«+ÛþþYVwsÏûÙ Lr666¤gd°gÿ~ Ûþþ›ÍÛ¶±iÛ6œee™±F† †ŸŸ{÷î%55•˜˜BCC¹víR©0ÖC*•rèÐ! ÿüójµš   ªV­ÊîÝ»Í\ л7e9~ò$qññ$&'óÏáÃÄÄÅë‘•k;é™™œ8s†¤”öLLl,±ññ&³²²8~ê™™„ž>MrJá¦'*Ndeeqóî]Â/]Ê×üWŠÕÖ·SŒ/D\¦võÊ|ÿý÷ܹs‡;wîеk×—}½@©\±"ÆŽ@,ããåE›Æ]Ê•£f5cœ›Fõê1å‹/ˆˆŠ¢M‹XXXàãíM­5Øèã?þ˜Mš-—š¥žžžÌšeÌm'‰ð÷÷§K—.Ô©Sooãd\Ö­[ÇñãÇiݺ5B¡:vìÀûï¿›Ÿ¦,--ùmñbeiÞ¸1Í7¦Y£FùV:=tˆ½ЮU+,,,(ÈÀ>}Øø×_ôzöéc®j0þ|cÄpŒç½nݺ4k֌۷o“””„““`œrúôijÔ¨³³3þþþ´jÕ OOO²²²˜?ß¼‘Ü¿š0Á4ÑÇÛ›ŠåËÓ¬qcéüÁ”òõ`ÍÒ¥8|/üýüðñòB,ó^íÚT~æ5Ê4šëááÍ›7'++‹š5kR¹²ñÞ4gζmÛ@•*UJ¥¸»»³iÓ&ÂÃÃÙ¿¿ÙêУK„¹QØ]œ±´´äËqã0 ¸º¸P¿n]¾7Žu›6‘œœLÛ-¸rý::Žö­Z±÷ÀB÷îÅÚºpWÜ-\¸ÐtݘlâÖ­[¤¤¤˜’šïÙ³‡3gÎP«V-œœœð÷÷G$Ñ AscÚýý÷ßœeóè+N+@ô66¿Š°€Ñ¨òVýä£ññøý›Wüí+øx˜÷îÛ >%Ÿ *æV㉿wW_s«ñÆ$&=Ä#¨rÉ*Âw„’U„ÿ½^GÔ•So'Ш§‡+ŸŽŒ£ƒù‡Ú_±Ø­¹•(¡„J(¡„þ_ò\ËÝU‚]ÑöÎOž ÇËÏuþw檬l„8`)Ì1“fo­:ƒ(‘Œœ¢±^¯ÕaÈJÇ 7ÿ|“7ÅH¾öJ¹wK 9¹è¶ÌÊÎáaìUs«ñÆäde Ñí – ¹eÜõbh´8õ! 2s n®–N­F›m KS´§{¿Õ@£¶¶bRÓ2ÞH!s³÷à1€³_©|ûKòH½[hU*ô:î®E»%¼{¨°Àñ)û/ŠèÕzœ]_#¯¨`0èpò-ÉEø®P’‹ðߣ×ëÈHŒ~µàSX6kÖì.ŽÖx¸º 8râ,Úµ@¡(z©KÆOIl\"J•Š„¤ªÕ¬ÆŸíääÑ“lݼ•†M‚V“ûôaþ'‹Ï3nÜ(RR’ðõ-…ƒƒã e7o^Ï–-°sçVjÖ¬µƒP…H,.DŸO\lý:÷Cš!ÅÁÉ7÷—O^ÏÉÉ᳟¡×ë .Wƒ,;[ó×ãm3áëY\¾vƒµlÇÝ]‚Ÿ×kgÅšMT*„H$z¥l‡ÞÃiÙ´}B>£Eãú¦€»ÿ‘å(±vu5·ü0ývïØMbB"ÕkV¡\Ž<‡Éã&s5ê*'Žž Q³F(2¤ˆm nžÌaõêåüöÛR<¸Gݺõ_*;yò8nܸÆ_ýNË–íPåd`#±3ÛVÏzòèÁ#”*%¥Ë¾xùýƒ{Xôó"N?E“æMXðÓN=Á¶Íۨߤ>­Ö¬}È'Ÿ|Hxx™™T¨ðâ¤ì))I¬Zµ”ß_Ãt&4ô_=‘R¥ðõõC«Qx¢ÓhÐÉ X‹_Ü·½‹( Ú·oLvv––B¼¼¼ÉL¾­­˜œÅ3òGNœ¥Ë­ç~–œžÁ…‹QÅgááãgHKÏD(R!¸,QÆ¥ÐCG åÁý|3ùÔj5fŠ3ÊÉ“Çøú뉅–ôèÑ—ˆˆ ääÈñòòÆÍÍOOã께˜‡Lš4–²eƒñòò¦~ýÆ,\8›E‹~E$²bõêÈd2œlÌR{wïѳ}OJ•*EÛŽmÙ³cUªWÁÕͱ AåŒ1¤¤™RF EÍ:5ÉÌÈdìı ê>ˆƒg²bÑ tZi©if©Ca}ë...Ntnß‚ô )Õš1:¤?§Î…3õóÑ,X¶KK ú÷ìĸ©3 Ø‹³"hݬÿ E"q¦gç¶,X¶©,›#'Îâá&¡Ë­Ø8”_VoÜÆ™ƒâíiœDzùÚM.]¾Æ™°Nœ9ÏñÓçñtw%"ê´iÆ£˜x“Sñôp%9%& ê2¤_á,îŒûhI IH3¤T«U ÿ6oØÌÐC©Z½ªInË[8v芓¦MbÓúM– äjÔUÜ=ܹzÙ¼¯7çÎIxø9¢£¯1|ø,--ùùç=z•+?vÏœ9ÉÒ¥ó±²²bäÈO‰ŠŠ@­V±víJnÞŒ§lYwfΜW¨º¿_ù}‚ËT>ˆGOг_O2sû‡êµëþùèÏñðôàfôM®\Hï½Y¼z1^Þ^\8g\ž¿þ×õlÙ»…Þ{“”„—Ká9 =z´ÇÚÚ{{{rrrhР1/ž§wïT«VÓ$7oÞ¤¤$“˜Ï÷ßÏeÚ´I„„Œ¢|ùŠìßo ¿R£FmÒÓÓÈÊ*úÓ1 š%K~ÆÑуÁ@Õª5^û8ÅÆÁz¿NuªW©@ØÅ(,[ƒ‡»ñÉ5ìl[þØÂÆ­qtv$+9É,úi4Švï>Ч§q$ãÑ£¸¹yгg;|}KѰaS>¼TšÉ÷ß?NC±~½1îL}Ù°a5±±ð÷5Ϫ ½NL*cÞÞy” .˘ñcHˆKÀÖΖ/Ç~‰Ø†þCú#Í”r5ê*›wm6}÷ð¹ÃlÞ°™ à "/D’š’j–:??…RIǾ#™;ãKÒÒ33|3^ÊÂYÓ¨P® —¯Ýàp¨ñáà£aý˜»èWjW¯BPÊ—1}–£PP&°Õ*—çpèiö6ž9ßÍaȈ!4¯ÛÜluãH³P($*ê`\-Õ²e;‚ƒË#‘X’™i¼îNœ8J¥JU˜:Õ¡¾^½†4iÒ‚;þÂ`0<ÿ Œô † ¤]§vdfdÒ½Owî;È7“¾añoÆ-÷d_è>ü«f÷Ÿ2†Æ þ ©4“Þ½û3r¤1õ“\žM§Nݹ{÷6Ÿ}6’]»Žpøð~¦Ný–Fš°zõ&Àèüæáä䌕•¹†Šƒ $d4 üÄ’%ó;vÂk§Ø8X×nÜfó¶=”òÅÏ× µZÀ”qSø|Êçœ?{žúM^>¤]ÐøøøáééETT;vüErrRî¯ggœïÃׯÿ­VK½z ùý÷µ”/_N‡N§E"1ïkG'GÊ—%!>ï¾úÿ@äYr222ðö1ŽÄÙˆmp‘¸°ã¯ÜŒ¾É‡c>dêø©|>ùsâãâ‘ËåȤÅûIª÷Ð±Ìøê3Ú·l‚Tf ^¸iënü|¼8Áõ›w¨[«Q×ÐhþÛš× Òlß}¹üùmƒJð÷¾Ãx¸»R&ПïÕÄÁáÿïë¦FãSï‚Ù ðööfÉü%Œút¥ƒ¿š*T†ëW®3cê zõïÅÑCGqssÃÕÍ•“ÇNæ“55jSYýñÇZ,--™5k?ý´Ò¥g;(]º,‡ícÖ¬ÿѼyk=zˆF£&**‚-ÚXÆ,¯óÚ`xÿá´þ 5;·ì$ tÀ3mpêø)®D^aÊ·Sørì—|3ë›|Ç)Tš3'Îàà耭åµÁ”)ã©Q£6¬¦E‹6ùÚ L™ .^<Ï{ù裱¬X±ˆ^½Šn˜%s³gÏN"". —gQ³æë§s{n¬ó¿#-=ó-ª[8ÄÄ% ÕêðóñbÅÚM 6I`i4£³X&Uf†Y&(Êår22Òðóó7mK$®ÄÆÆ ÛRªÔã¸C11P(rðó+HKKÁÍ͘˜GØØˆñ÷0Û$wµZM\L¥Ë–6mû–òåÁ½ˆD¢|s‘IexzybkgKÌÃÊs(&%$a-¶Æ^,Fû XNrOKÏ$%÷5h¹ Ò8ù×äÊÙ}ˆm¬ñtwãÖû89: •e磕 äîƒ\œÑéôX[‰P©ÕdeÉqvvD§Õamm…J¥æ¯ûèЦ9Û÷å±øzçèܹ÷€R¾ÈsrP(”ˆÅ6$&¥àè耭yŽ"ÿy>ÞïÆüž·MLJŽÁå ýwâ°³³ÃÑÉÑ´#ÏA&“áéíi €©Ñh¸÷>B¡2AeHLHD,£T(‘J¥xxyàììLú½‡H\«½âWß>©©)\]ÝLÛ|´Êª IDATƒôô4\]Ýpu}<×òÖ-ãªÓààò¤§c ÒÒR‘H\qss'#éNA…3Éýîí»”@(rïÎ=J”"æa Z­–ÒeK›æ3J3¥$%&áè舗÷ïÞÇ·”/J…¹\Ž·72©ŒÄ„Dðöõ.ÔIî=ÀÝݱXÌ£Gqww'55…BŸŸ¿)J~NŽ<·/SªT11puu%¯ÿ(U*€ØØG¸¸¸bggW2Éý%èõzîܹ…@ 8¸élØÚ¼P¶°±²²2Ó'·ËUx¶#óòöÂËûñÄî<ç À3·Sך9íOAâ*qÆUâl*óå§x{ºc;L_.÷IÚÓãqGU®là3Çñòpf_½:5ØõÏV.œ‰×ã×ÅAeŒ×г“#ÎNަí<œžû¿„·GÞ(î“ÛŽNÆüID"Q>»É³'g'“}˜77÷Wnçñä½éIÇëÉí¤lðãU—y÷'ï?y89;áäìd*?yos̵G'GÓvaãïøÄ¶Ñ¶óœ¥'±µµË×Oö!yý€Ÿ_Ñ \XXX¼•þö¹Öé°þ9ŠÂwþ¶HÏb (ŸÊç¥Q(À C¯/ÚaHÕÊ,ôú,„Eû-¯N£A¯V›V_gF8­V‡Vûæu­\±•+;çœ"¸â·0ШÕÏØQD«R¡Ì)Úas´jª¬¬"«¤ù÷h” 4*C‘¿~ ú·«n­ª4|¿ö)dnö8Šv†üïÌu969Vzó&~~S, rôëgêWÔÐÔdl1œ^-üŽ“š•Š›÷³O—EÔ˜{¸¹˜åM±@Yäí@vzó'S”¨°Õ‹‹|¬âÔ‡è ¸Q@iH/òׯÞðzmý\ËJ$"-½h{œá‘W©Z³.öNù'„«UŠb‘G èmlž©_QC£R¢‘fbo_ô,™F^`í‘À°aÃHMMeõêÕT«VpsrdÉñÅ£=²"o²´¤bÑÙòLì$E>aqêCt6Öj#J‘(”EþúÕ¿¦3]´%J(áÿ ;vìevvv”-]š{ 78qú4§Ï#=#ƒ¿ÿn¶z}HNNæÇŒø7‰DT¬X‘˜˜T*  OŸ>>|˜}ûö™­‰II&ÛðpsÃ|г'ŸŽIèéÓ¬[¾Ü${ùª1obÕÊ•INIÁ`0Щo_Fʲß~#ìÈ‘BÕýúõëH$´Z-2™ŒøøxæÎKåÊ•iܸ1]»v ==ØØX\\\(Uª7nÜ@©T2gÎ,,,ذa  V­ZìÚµ‹íÛ·c]ˆsôŸ¶‰ôŒ &MŸNóÆqsuåã#€gmâîýûh´Z–¬ZEäå˜ܿŸm»v1õÛoY4gmZ´(¼JAþز…¿÷îÅÉɉ‘C‡R»Æ‹´¿ŒbóŠ0&.VG­ê•hXïqˆ‰ï¿ÿkkkêׯÿ¯GW ‚³çÏS§Y3>ûòKŽž8Áꉼr'''†br®"¯\!ä㉼r…ß·láÁ£G¬Z·Ž1ÇSµR%0ZšoÎÇ©U«£Fâèѣ̛7ÈÈHèׯŸÉ¹JLL¤S§NÜ»w%K– •J™={6 …‚-[¶P¥J³ÕŒOv55bè˜1=q‚é3gyå v¶¶tj×Îä\ÔoÝšäÔT~˜7½^Ïô™39zâ=ºt!"* këÓ3ùpê:îFq{¾¾¾„nÂâá2>¬y²ø$ÌòÑGtîÛ—Õ7²jÝ:Î^¸@zFµªU£oÏž&¹±“&qèØ1~[¿žG±±¬Þ¸‘ììlºvèÀý˜>i’kS¦L¡U«VÌ›7­[·ròäIdìGpÿáCZ4iB«fÍØùÇ\ˆˆ t@GOœà-[øaúôÑÑ©Ú$RB‡ð ü7ΰlåœÓ˜?Ì×êã°°*ÚËŸŸfÚĉtj߀#¡¡ØÙÚ’)“1rìX¶oÜÛc`Ÿ>´hÒ€ï¿þ€ÓçΡR«©Yýõž6ß&£FâÓO zïÞ½‹H$ÂÞÞž.]ºÀýû÷iܸ1!!!T©R…ØØXÆψ#¨û„“o.ºvèÀÏ3gÆ©GŒ B¹r¼ß²%éðàáCJäsº:¶mKZzºÙ‹.Y²„Ê•+°jÕ*œ¹rå ¡¡¡Ì;0¶Aƒ èßߘ·ï×_5‹®/cú¤ItÈu ;†™™Œ7Ž­¹+Šï?|ÈÐh–;¢=3÷~tòÌó(] ðtwg×¾}ÄÆÅ1â5û©b3‚U±|Y,,<Œ‰§J¥Çé'BCCÉÉÉaÉ’%dd˜/¶—µ•¥|}ÛØpêìYúNÇvíŒÄÃÍ /cšŒ2¸»¹1áë¯ùyñbÎ_¼HÏÁƒY´bã§NÅÑÑ‘re˾â× ¡PˆŸŸE`a|F’ËåÄÅÅ™õSÜ\]ñò0¦ýé9x0éøúøEÃzõLrÛµc÷þýô:”G±±ô>œSgϲä×_ù~Ú4s©oÂÅÅÅ4Ú8nÜ8BCCyï½÷ ¥I®SЮ];NŸ>MŸ>}¸zõ*“&MâŸþ¡^½z¬^½Úô`b.ðÏñ˜»h‹V®¤{§NìÙ¿ßäÜ´nÞœè›7éÂésçX´bs-Ⓣù{ß>:·oe!º{yyáæfLÓóÞ{ï›_îï¿ÿ¾I®K—.¬[·Ž>}ú •JiÔ¨=B,ãââb’Ù¸q#U«VÅÝýÙ4AÉ“6Ñ}à@¤2>^^\º|™†OÔ£c»vìúçú FL\ýBB8†••n®ã\¹J$¦T]%¼˜6-Zð(.ŽôŒ j¼AÌÁb•ìùI¯ÚÀ°aÃhܲC¾ýéɱÅ"H\¶\ŠÞÆG‰Ç«…ßa4*%™±÷qw3Ïœ²·I|F<>_ï»ññ(•JRRRðööF«Õ2tèPÌ… ˜?¾i‚í… Ðh4Ô©S‡ôôt²³³=z4=zô 22’9sæààðú9ão_ÁÇ£èç,‹O‰Á'ȼ¯¢ßñ÷®ããêkn5ޘĤ‡xU.òF‹S¢³±ÆIRpoC”9Yä$'"q)Úý”^¯#êÊ©·—칄J(<¶lÙÂ?þHÓ¦MéÕ«ÙÙÙ\¿~NLj#LÎÕ¶mÛøë¯¿hݺ5R©+++îÝ»Çõë×éÒ¥ Æ {#窄J(¡„·C±yEXB EŽ;²iÓ&ºvíÊ€hÔ¨ݺu#%%€ääd\\\:t(­Zµ¢iÓ¦ :€† Ò¿âââÌU…J(¡„r)Á*¡„wggg±°°à÷ßçÁƒ 8]»vѼysìííhÒ¤ §OŸfôèÑtëÖ¬¬,®\¹Â€Ø»w/ 6ÄÉ©xM|/¡„J(Š”8X%”ð0dÈÓö Aƒ^(W¹re6殦ˣOŸ>¦W %”PB ¯GÉ+ÂJ(¡„J(¡„·ÌsG°Î…G²}÷A †ÂVçí—ÐjTùöë´Z´=ZmÑÎã¦ÓiÑk5ÏÔ¯¨¡Õ¨ÑétE¾=ô:]‘oÈ­GI{¼3—öÐéuh5êW¦©y×)N}ˆNkQ 6b¼¿k‹ü¹Òëu¯õ½ç:X5ªT¤^šÏû¨ÈpòìyhHLo¿R.CnpF¨~—²àýw4*zu&rC¶¹Uy#t-*¥­LanUÞ˜l…ô™ë­(’­R’XÚC•S<ÚC™E¢ÌÙÜj¼1r¥}úCEûÞ[Üúƒ¼À~C«R¡UPYíû‰Áðz™žë`ÙØX“–^t=qŽeËâàé•ÿkƒV6E{)»RžŽÞFŠ­DbnUÞ­J…@•ƒƒ¤è§pÐÒŸ½ÞŠ ™®x´‡NV<ÚC®*í¡Õ(°÷t/ò#X%}È¿G#G¥×ãàâW`¿Qèõ:Rc£þó÷ŠÍ$÷{b8{á÷Ä Û`mmŒV;}ÒtÄb17oÜdÁò˜+Äá9ï[wîÜBBB;wná‡æQ§N½Ê®\¹˜‡ïÏŒ³ñp5q?O·#Žp+úGaÐðAtíÙõ…²€ì¬lBú†Ðk@/ºõè\à:?çévþüY.^ ãüù³¼÷^ÆŒ÷Œ¬@ 0•kÖ bøð1Ô©SzõŽâÏáéºÜ¸vƒc‡Ž}-'g'¾Ÿûý3ryõ¸uã?~ó#.4i@¯þ½ U÷'yºqq1ì򵯯âY³fó3ryõHLŒgÇŽ¿HHˆçþý;lܸ£Pu’§ë!“Êø}ÍïȤ2Ž:ÆÓž‘Ë«‡<[Î'~Båj•IIJaö¢Ù…ªû“<]ƒÁÀòå 1 ,[¶«W¾P`ĈÔ¨Q›ðð0~ýõ×÷IžÖ'új4ÇçúÕë¸H\ønÎwÏÈ™l"úK,El+fÖ‚Y|óå7ØØØp3ú&ó—Ï/ÔNóézÄÆ>b÷îíÄÄ<"99‘ß~ÛôÂz$$ıtéB>¼Ï† [ÙµkK—.`Ú´™4lØ„^Ì™3'ˆŒ¼È™3'iÞ¼5Æ|­ã«L`)¼<Ý4j‹ç|ö]ƛ،Ù3L†eNŽ;ħŸŽÀÕÕ•¾}qéR8«Výή]Ûqw÷49W÷îÝæ“O†S»ö{xzzQ¿~c.œÃúõ[صk+V,F©Tæq°îÞ¾K‹÷[P©r%:÷èÌž{غ776­ßdr®2Ò2èÛ¹/-Ûµ$#=ƒ±Ç2¨Ç öŸÜÏÒKñöñFž]pCÓ¯B£Ñàé)¦Y³–´nÝž•+y—àà üôÓ Ö®ýË$Ûºu}ºwïÃ… çøí·MÔªÌÈ‘ŸP£F-²³³.o¶zTô«H…Ѝ^»:§Oœfö >˜¦uš²ûÈn“܇ý>¤lpYîܺ è×¥-Z·@­R3~òx¼}½ÍX hÛ¶VV"¼½}Q©Ô|öÙDBB>¢{÷¶Ì˜ñØÑøöÛ)dgg‘––ÊwßÍáÛo§2š?M¯^™<¹`òBþ[F AìÃX,,-¨^«:õ×gä'#>`8cÆ?Nö¼fÅN‡žÆ 70qÚD6oØL`é@â¨P©ñqñæ«ðÝw_sâÄRSSøðÃшDVŒ=ŽÉ“?c̘ñ&¹Ã‡÷³té|\\$Œñ QQ¨Õ*Ž=È”)ßò¿ÿMF§{½9,¯KyŸòTªR‰šujz4”MobððÁ4©Õ„½¡{MrÃú £\…rܾy›…+Ò§cVþ¾’úësôàQvoßÍ–½[èݱ7©)©x¹8Z=Z·n€ >>~(9Œ?…èÚµ 3gþl’ûæ›/Q(rHMMáûïç2}ú$FŽü”>èÌŒSèܹ«W¯@¥RšþE• šPºtY.œÍÆÛßʑгT®Œ·çã°ü¬ûƒðsá,[· {{{²’“̦Ÿ³³ ;wB"yœjÙ²|ýõ÷¦r|¼1HäwßÍ1í[¿~ ðØ@bcáïk¾Ôb±˜_7ýŠ_)?S‡±lÁ²|GVVq±qLš6É´ïðÙì^¾šRþ¥¸v‘GºîO"˜={ÁÁåMƲe òuááaý‡B×ÿIÆMG³VÍLå «7P¯a=|ü§  gúÓ ,À¾Ð}ü¹ñOŽ<Êò…ËqrqâËé_²æùéÝ{ ƒ7•Oœ8Š¥¥ÐôÆö˜4iMš´`Õªß8wî4J¥‚ ÌÿtÞ¨Y#¾þþkSùÁ½\ ¿ÄÚ¿Öšö…‡…Ó¼us† àÛŸ¾%>6žÙßÍfȈ!4¯[09.ÿ eÊqøð9SY¯×³råb22ÏI £N÷™:u€i4·]»NDG_}îèVaðù”ÏiÒâñµ°þ×õ4lÚoŸÇáaá̘=ÿ@cj¨NþSèz¾Š¾}1p`ˆ©|üøa¬­­©]û=Ó¾ðð0¦Ný–Fš˜F¶Îœ9Y¨º'ž×üWŠøËðülÛu€ÚæÛ7ç»9”`÷öÝÈd23ifÄÝ݉ĕðð0Æÿˆ‹ð´´¤zõZ&c^¨Ÿþ‘åË!**‚?á·ß–1gÎwhµ¼¼Ì;Ò`go‡_)?bÅÒ¯s?âbâ¸|é2m;<>÷vvvxxy°jñ*þ7ù$%&Ñ£]Z·oM¥ª•‰DXY›7騅…ÁÁåÑjµ4kVNÇúõ«:tD>¹*Uª³yóF6&{nÖ¬‘‘™2e—/_¢J•êfªÁcÊU4&ÙîÑ®I‰I¬Y¾†¡#‡æ“©R½ »·ïæã‘fJé×¹B¡± J…kkk3hžŸr匹?þ8„¨¨V¯^ÎС£òÉT©R£G2vìbc1~üG„‡‡±fÍò×ÊÛäµÇw_Ç=X½|5CG Í'S¥zÂ΄1nÔ8¢¯FóÓŒŸ8ràÞ¾Þìܺ“*ÕÍŸG1¯=V­ZÂÚµ«^ÐÕ¸ví2_|1†sçN³nÝ*V­ZÂ/¿ÌA*ͤR¥*f™w•×ÝÚv#%9ÅØϱ‰]ÛwñIÈ'Ȥ2útìC|lü32{vîAâ*ÁÁ±ðßäµÁèÑø|92· ò_çUªTçÈ‘Œ;‚¸¸>ûl$/ž/t]‹ …‚íÛÿ¢_¿!¯~ Å*ÙsVV6vv¶XXX°xÕ@PíÚ¦ái'g'rÒR±6xúEFR©ÄÁÁFƒR©ÀÆFŒR©ÀÁ!ÿsV– FcÚ¯P(‹ÅdeÉ …8::™m’»N§#;+'g'Ó¶½ƒ½iߓȳå¨T*ìì슄dɲpvq6}& ±€<6'·ÀB­‡Á` 33 ƒŒŒt\\$dd¤çaP(rLm Û’žž†‹‹„ÌÌt pq‘ HψBX¸õÈÌÈÄÑÉ 232qpt K–…ƒ£––gªT*äÙr¬­­±³·Cš)5µN§ÃÉÙ KKKÒoÇ!ñ¨TèõɤˆÅ¶ˆD"d2b±ØtÞE"‘IN£ÑäÚ‚GGG²²d&[²±±A$2:îé)×þäÚììlD"ÖÖÖ¦m­F‹P$ÌçÄêt:¤™R,,,pvq6Ù„V«5Ùµ5é÷"q­VèõÈÉÉA ä¶C Œ£QbqþDÇééi€Ñ”Je®œ…"1¶¶¶d$ÝÂ)¨p&¹?mŽNŽÈ¤2±°|üû/² ­V‹F£ÁÞÞÞ$cemez RX}ˆL&ÅÖÖ¡Pd²…"Çd'yäÙ„H$ÂÁá±M€±ÿpt4ö%ÆýF)´IîÉEo’û“ý'¹?¸²÷í%{Ζçl …9 ãûe½Þ8„ýt§o.D"+Ó_$™ŒãI#Éãi‡+OæéŽßXZZšÎé“ÛÏ;ÏvövØÙÛ™ÊyÎUÞg`\EhÉxéÜ>ï‹Å¶ù:”<ó·ä?¯yÛOîËÃÚÚ:_ÿ²¶3ŽŽNOlmàyö!‰òµSž½»1y ÆáY‡êižl±XüÜíÂäMmÂÒÒÒ´ÿi™Â$¿M·E¢gíõE6‘÷Ùóö—ðbžìÞ„ç:X'φsôÄÙ7>¸9É–ç €<--ß~UVzDhTæ›`ý6Ш²Ñ«åf›ßð¶Ði4¨*äÒDs«òÆhrrž¹ÞŠ"¥¼x´‡R^<ÚC‘S,ÚC­Ì"'Ý hÏL)éCþ=Z•MŽ ‹¢=Ýû­ÆÁª_·&ë×}#…ÌÍÖ¿÷aa!çŸ .ÍÑcX[mÇ$G¯Go팽øÝEy]´–*dÂX$ÖE»=´*Ûg®·¢ˆV˜Y<ÚC(,&í!+í¡‚‹Ø ¹‚弊S¢³vÂAìV`¿¡ÈQŠRp*âׯÞ` ù5¾÷\K(´,’FÓ3¤èõ:\œ¸vãïÕoŒA`Iff&b±gggr²m°6Xbcóò!ïÂ@¥R‘ž‘••®¯x®V«IKOGde…›D‚V§Aomƒ­ýK¿WhµZRRR°´´ÄÃãßuhR©Ô8OEl‡HdõN´‡Á` 1ɸÊÔÛëÕ*’’À`ÀÞ΄ «w¢=’““Ñétxxx䛇õ2Ywww„B!B¡èh€´ôtÔj5‰k«/ŠÈ³Àd#Bá»Ó™™™( œœœò½z{R©”œœ“¬ð±€¬ìl²³³±··ÇÁþåç6;;›¬ììÇö!a#¶ÇÂÂ<VRRz½þ_Ù„B¡@¥RáììŒB¡ 33\\\ÌÞ‡äÙ„«D‚ÕKlŒv‘•mê_ÒÓÓsû¬­Ñê4謭 ØF èDÖïÌõûoÑëõ$%'#ðòô, Óp1ò*kÿØŽ·G¾0 ³fÍÂÛÛ›µkײcǬÍôð”)•’˜ˆ^¯ÇÉÑYv6¿¬X§»;ÇObÙ¼yT*oŒ§týÆ dYYT,_@@Ll,'ÏC&“±ÿÐ!æÏšEÙÒæ‰ì¬P(¸yó&öööØØØššÊþýûyôè÷ïßgòäÉ4mÚ€»wï’’’B™2eprrâÚµkÔªU‹7n0lØ0ãßÁf©‡^¯çBDÞ^^XÄ%$pÿÑ#¶íÚ…^§£_ÏžôìҀظ8bããñõñ¡”¯/aááøz{Ó m[f}ó U*V¤ZóµobB IDAT­øŠˆˆÀÃÕJ…T*%99™_~ù‚‚‚˜0a)))ܽ{777‚‚‚ˆŒŒ$%%…Ÿþ™zõêQ©R%z÷îm¶z\‹Ž6Ù†A¯Gš•ÅÔo¿¥qƒddf²xŽ1t‰,+‹ë7nààà@å ¸~ó&V"á—.qôÄ 2¤R¶¬]k¶zܹsÇdööö(•JBBB8p dÏž=€ñëÒ¥KXYYQ«V-îÞ½‹Z­fРA„„„°cÇ:d¶z<Š5Ù†—àƒž=ùjÂfþü3WÏ>žFrîÂÞ¯S‡¸„ z=úõc§ŸòÓ‚D„†ªî/^ÄÓÓµZMff&IIIü{çåñ5à‡¥ˆôŽ  E Š(v±ÆÞK4¶ˆ±Å5šÄKº%»Fc‰+±+6¤ˆˆ"ˆ…eEz¯[¾?Ö¬ágÊ®øñœÃYØûî½ÌÞygîÜ»nÝ:j×®‹‹ _|ñ ¿¹HJJÂÜÜGGG¢¢¢øùçŸìÚµ‹#FСCöíÛÇáÇÑV⨇‘¡!ùH¥RròòX°l­[¶$¿ €_ø€Ü¼=º¿Zè9TíÍðQ£†b±˜‚‚"tt´Ï/]º”ÂÂB¼½½12R]=¯°k×ðêÚ•o–-#$<œƒþþèëê’•-_)Ôzˆyý:“¿ø¡H„ßáäˆDì?|˜IãÆáhoL&{é|e“œœŒ——3gÎ$$$„íÛ·£¯¯Onn.eeeŠ ÖGÑ¿òòòضmùùùlݺ•¢¢"Ž=Š› '$ _uóêÒ…‰3fΚ Ð×Õ¥  €‚ÂBôtŸ{uíŠT*eÍúõòÇ  gpß¾\ B"}³ýùwEŸ>}9r$gÏžeëÖ­H$ÊÊÊÈÍÍE_ÿéI§’’’ÂöíÛÉÉÉaûöí\¿~‚‚4hÀG}¤B+`âŒô9’ƒþþì?|˜ŒŒ @~ÇþïÕ’©³gÅ#Gx(rÐߟââb:wè@âÝ»,x2¡T‹/¦k×®lß¾S§Nqçδ´´HKK«ÐË—/çï¿ÿæÌ™3ÄÆÆröìYnݺE5ži« 6mßNënÝX³aWˆ@OW—G£ÿ/ÿØöÇlÞ¹“«‡…Á•°0ÉPSSãV|¼âБ²èÝ»7#GŽäܹslÞ¼©Tª¸ù÷ÿuÀ€ˆD"¶mÛFnn.Û·oÇÚÚš=z(Úܼy“^½z‘M~~¾Ríð™>þ#Grèï¿Ùwè™™òSjYÙÙú`Ê_píúuüŽ!9%…G"•ÉÚ¿¿¢Í ¾}©kSõK.)}]]ò (**ª0üW>˜¬{„X˜›Ò¢Yc®]ÇÂ\›ôÅ_`kkË·ß~‹††ÅÊõ 4iØý;v ¡¡D*Å»OV,\ÈõØXR=¢žƒyOx`Ÿ>H$ÔÕÕY0w.åb1z÷fÓöí< ©SÛRevXYY±ÿ~jÖ¬Iÿþý?~<Ý»wçܹsܺu OOOJKKÉËË£k×®têÔ Ö®]ËŠ+ÐÔÔ$66±X¬²,ŸòÛ¹=]]úõìɲŸ~ÂËÓ±XLhD=ºt@(ѪE <ÜÝQSScç† DDEÑ¿woCBð;r÷ÆÊ?Fÿo6mÚ„‹‹ åååìܹ[[[Ú¶mK`` Ÿ}&Ï[$ qww§oß¾hhhðË/¿°oß>,,,HOOgöìÙlÞ¼Y¥v,_°€]ºP^^ÎÅ  ƒûõcÙO3¹ E"ƹ¸Ð®ukÔæÏš…º@@PHåb1MT>>>´h¡ú8؇ áû%KH$H$†GðÙ³ÌþæE¡HDkk>ŸX17S·N())AMM5E‘·lÙ‚³³3eeeìØ±;;;ZµjEHH>>ò\wB¡f͚ѧO444Xµjï×°¸rÑ"ºy{S^^ÎùË—ÑÐÐ`Pß¾|·j•¢P$¢¡‹ mZµB] à«Ù³Q¸rõêK®\Í‹¸A;//Ò33‰ˆŠ¢S»¶otfË­3b±„˜›·éÐæi†Ûëׯ“““Ão¿ýFv¶êâÊtjÖÄÞÎ---BÂÃùtÚ4÷í˱S§°©]›z898PÇÚšù‹³aÛ6®EGóÉgŸ±uçNæ.\ˆ¹™.ÎÎ*³CSSGGGtttxøð!=zô _¿~#‹iÙ²%&&&´k׎åË—óÍ7ßššŠ··7K–,á›o¾ÁÛÛ›îÝßlÙõ]QÏÁ}==$ Û´¡W·nÄ'$˜”DÏ®]íF ÆÚ ?m2™ŒÆmÚ PWgãöíÜŠ§W·n*´ìì쫳ÞÞÞØÛÛSRRBhh(ýžls >œ]»v1nÜ8òòòèÑ£–––hkkG—'JUQÇÚs3yÀí'Ÿ}FAa!V––œ8s†A}ŸÖ¬Ô·/'Μaì¤Iˆ=âÓiÓ gÛîÝ|·d‰Š´Š¥¥%ÖÖò úóçÏ'$$„Ö­[³k×.†®hׯ_?BCC=z4ñññ,Z´ˆ€€:uêÄï¿ÿΈ#Te¦&&ØÖ‘ç/Z»q#›vìàã!CX»a£† S´ëÙµ+‰IIŒž4‰ðÈH6nßÎÚ™ýÍ7üyð ÃTú¤ÅÞÞ^á:u¢^½zFß}–†ÎüÁ¸qãÈÏϧ[·n$''£¯¯¥¥ü&vذaìÝ»OOÏ׎1}WÔ±¶ÆÜT¾X0ÊLJâ’,ÍÍ9yölEŸè×ã§O3vòdD©©ŒŸ2…Ј´µµ©mý´šƒµ•:*JQ•èݽ;±·n!‰èÚéÍ+*|P‰Fÿͺ-ò¤]ç^žÏJ¢óž¹¿ …¹Hµµ10©Ú§¤ÊKKÈÞÃÜÌúÕßsDÙ"¬í¨Z·F”pk [U«ñÖˆÒ“±®§úÕ¬·E”‡µimU«ñÖ¤>~€E½†* rW|HcˆD»†&•·RR”OQZ*&ÆU{œ’J%\¿ôîŠRßäPâûƒX¬Üâ¢ÕTSM5ÕTSM5ÿðÜ ÖÅ PbnÆ+[—wŠž®j +<_”ŸChj¼YŸß”Ò²dšê©¶¾âÛ"—SœŸ­ô ØÊ  8ç™Ï[U¤  —ÇU­Æ[SPøaôljS§yø ê'-(ÈA×ļÊ'-.Ìc̘›V^þ(ePZV‚TS@IQå&——•R^P@yyY¥½‡2¾a2ÖçN°:¶mYånÞ¹b™í:æž/O“ª¤á;çI)m%×"|׈KKKj¢­äZ„•AQöõg>oU‘¢â2´UP‹ð]S”~óƒè+×c(͗Ѿý›Ç‚¼æ¦RÓRAŸ`-ž·‰¡Ã'¡má¢jUÞ%Œ!‚¢BH3D»ŠÕ"ü_¤R ¤&ýg¹næäV½•‘«áQ””–ѲyÒÒå%2„ÉB®_»ŽukÜ=ÜU¬aE22Ò ½‚©©­Z½ü”BVV&!!™Ð¦M{%iøzrñìEjêÔÄ»ÛëåW‰‰ŠÁÈØk+Õ†ü_d2'N W¯þ¯h 'NE&“áè茋Ëû5! 8@Iq ºuzebË g/PTXD‡.*ÔÑ{$;;“V­Úbú’ƒüx/}$úZ4)É)4nÖÛ—•‰Š!ùA2š6ÂÖN ×¢E+FŒ£ U_J|ü-ãqrrÁÙù匄„xîܹ¥ðe{~çN£´¤ïnÞÔÔyy ·ð¡ôôtÜ›»“’œBôµhÅòËÊ_”¤ñó ¾LvvÖ+} 33ƒøø[´nÝ€ÐÐ+888an^µc¢*±XÌéÓÇÔùè£>o|÷ë<ê[pîR0ç.^¡¡‹a‘1èÔ”çÂ:~ä8^m½˜øÉDöùïÃTO5'(’“‰X\N:¶¤¦ŠØ³çw†Å·ß~Í·ßþ„‡‡üÞÑ£‰„ôí;55aaÁ”——aeU‡~ø–ùóѬ‰j‚ws²s8á K I¸@ôµhlíl‰ ??Ÿ~ƒä'×Ο=O|\<»t¤ŽmŽì?Â'Ÿ~ÂÅsY±p#ÇdÔÕœ”’H$lݺž¦M›#ˆŒ £¼¼‘HˆD"ááÃLž<€ðð«DD„Ò¼¹'žž^lÚô+Íšy²jÕwlÙ²##Õ®"þ±õ¸5 ° äÉ\¹øjæW¬Þ¸šû}L`”|"˜Ÿ—Ïîßw£§¯Ç'ãå~0kÒ,6ïÚÌžC U•„†+|ÃÝÝPcÈž\¼AÇŽ'**‰D̈ý8sæ ]»¶æÖ­¥ê¾sËN\¹RTXă{¸|þ2 7$80˜¿¬àöÍÛ\8wú êãÝÍ›=¿ïÁÙÅ™Íë6£&Pcó®ÍŒ8Š¥?,eÊØ)ì=ºW©v:ô66uyüøååålß¾‘Q£Æ3sægìÚu€””düýam]›~ýãï+«Úøùí!&&šS§ñ÷?ÈÒ¥_óÓO¿áí­Ú“Ïï;kÖü@AA¹¹Ùotª½Vû/ìmë “É¸}'‰‚‚§E8GÅß-|ñÕÔµ¯«2ýâ™0ác®] C&“!•Jiݺ=‘‘áˆD)”––t‘M›~¥OŸ„……ò¶C†Œ$++‰D‚™™êî>2Ò3˜>a:þ™L†D*¡e›–$Ä'ðàÞ ŸüïÞÈô ÓùxÌÇ„…„òIH(â~Ò}\ÝT»â#‘H˜7o:›6ý&·C"¡y󖤦ŠHHˆ'7÷é)Ú®]½ðñ™JDÄU¤R)‰™LÆ€Ø7oW¯^Q¡%°rñJ¾[òB·ú®õ‘H$\ºNnN®¢ÝÐ^CéÞ«;"¡ˆÜœ\$R …ù…<¸÷€èÈh\\U»å±aÃZæÍ›ŽT*E*•bm]SSs®^½R¡?&Nü„  >D*•¢¥U™ "#Ù4i†ªL`ß®}L5‰T‚T*Eß@Ÿpáì… ý1oÆ<ôôô°®mÍ­Ø[H¥RjÔ¨…¥§prqR¡púôq† é‰D"A*•Ç tìØ…'ŽVèï¿_JffÍ›{~õIÿÉèÔ©+'OþMNŽòÓã¬X´‚ï—~/÷ ©—†.ˆÅbb¢b*ôÁàžƒù¨ÏG ÉËÍC"•àÜÀ™Î=žæ+ËÍÉ¥vÚ”••!‹•jÇúõk˜?†Â'j×¶ÁÄÄŒÐЊ>áã3І !•JIIIF*•>¹yZ™¡oßAØØ¨n ¬Jxx´"%å!‰‰wÈËË}µÀ ø`&XF†Lùt$^ž·ÇÏG}>bèÈ¡*Kx÷^^íX¾ügœ]prª·w7¾ür!ÖÖÏÁ600ÀÉ©>zzú8;»wƒöí½ÑÔÔD(|¨íŸbkoËÚMkiÔ´ 5¤±{c,[@ýõŸi«­­[c7´´´hÔ´þ‡ü)*,".6Žðphÿ M¶oÿ“-ZáîÞ‚ÚµëTXIü7wwÔÔÔpwoH$ÄÂÂ’–-[òœ«+—uÛÖáÝÍ›FMaemÅ‚å ðîúìv­@  aã†Ô¨Qƒ†RC»Î.ÎÔµ«ËÊE+U yEV®\M¿~ƒqvvÁÊÊš/¿\@¿~ƒŸi'prª¾¾â1<<„Zµ¬±µµS¾âÿÃWK¿â“ñŸ`ç`‡•µ3æÎ`ÔøQÏ´SSS£®}]LÌL¨kWíšÚ<¼ÿ1>cˆ¸¡Í+2mÚl¦L™…µum¬¬¬™4i:“'Ï|¦ššš¢••5ÖÖµ™0a S¦ÌzeÝ¿ÊÂw»/ºv¢Q¹O,\¾N]Ÿcòï¨Z¸5v£F*ÐöÅ|÷Ýúö„³s¬¬¬™7o!}ûz¦@ ÀÙÙ==}…OTófØÙ9°dÉOVnßœf‚¥®.àÄ™‹<Š9äi¶zNõˆ¿ÏúÕëÉÉV]n/KK+:tx"Q §N#==ÅÛ»;Mš4 I“æx{wcãÆ_IOO#5õ'N%33ƒM›~£uëvÏ( =}=>ê+/©’Ÿ›ÏÁ?R\Țu›°©kC÷^òä¡–V–|öùglX»{wïQXPÈ_»ÿbÒôIL™5…ÑŸŽfØ'Ã^öV•Š@ `ð`ùö¤T*eçÎͨ«k°yó:JJJ3æé’ð?þÆÆk‰‰‰`çÎÍ´háEll4yyyŒ7I%6üCŸ}%ŠþÚý%%%ìûc÷’î1eÖE»%ß/áˆß‚.¡¦¦ÆÁ?Ò²MKìí¹sûÓfOS• x{wÃÌL”~âÄQÒÓÓ8qŸ«Wƒ˜;w¢Ýܹ ¸z5ˆ'üœ:u ‘(¡ð!sæ|­*õ´lÓR;uùüe’“ºÄ¿#,ù~‰¢Ý”YS¸—t}ìCC]ƒ KAdge3õ‹©ìß³ŸoüVEÈiÔ¨ ÈC"#Ã‰ŽŽ$&&š×òã¿)ÚãCII ›7¯C]]ƒèèH"#ùyó6¬aùòŸÑÔTî©í¾û¢­-ùk÷_”––²÷½<¸÷€É3'+Ú-ý~)‡þ:Ä•ËWPSSÃo¯ùùùÔµ¯KËÖòïÙE+áÈŸ1>c°©«ÜR3;wWÄY?~„ŒŒtŽ;Bhh0sæ<õ‰/¿\Hpp 'O>õ‰GR033ÇÛûiÒä¼±´´Rª U•-[Ö!1âÍ«|ЉFGIóÎïâóÓ§KžœÑùN ‹0üNfe_ÇÄÎNÕj¼5Y )˜|§³ÒobR¯jŸ^˜ùÙL»´düxÕNäßU¹¿+<ê{°w÷߯ òßQÆRVTHišýàáýÇßM¢ÑŒÌlC"ñf¹Þ22UW§šjª©æ]’šúˆÛ·ãT­Æ[‘—yý²,Ôª Õx[ÊJ«vN§j”Çs'X©ié˜*[—wJkOw´Õ+&è+ÍÏEB eï×>û¥¼¬™¦iQÕvv©¸œÒü ¤¥ªVå­)+ÎæóV)+È¢€ªh ¬0›aÕ?(]ׂЫÁÄD«Z•·¢´´-=•Ǿ-NŽP$¢ ­jÛQ^V„´’ÇqY)â‚RÔÊ _Ýø=F&{³DØÏýöqkàL~AÑ[)¤jB¯]G"Ó vŠ×R©¦¡äæfµT­Ê[#Ê–b]çÙ@ÿª†¨¸ k‹ ?ÒË?ˆþ˜8n Kރز·¥ºáûEu-Â×G*•žšðŸå^x{WVVµWFŠ‹KT­B5ÕTSM5¯`ݺuäææ"•JÑÓÓ#==E‹¡­­Mdd$yyytìØñ¹èèh²²²ðö~½äÆÿKDD÷ïßÇÞÞž¤¤$6lÈÇéÑ£Ç[ZTM5rªþúy5ÕTSM5U–iÓ¦ñóÏ?“ššÊÂ… 100ÀÕÕ•´´4œÉÊÊbÛ¶mdgg#˜>}:<~ü‘HÄŽ;HOOGMMéÓ§£¥¥E@@iiiܸqƒFqãÆ FŒÁ¦M›Xºt)K–,ÁÆÆ†[·n¡¥¥ETT .$99YÕÿŽj> ªöqŽjª©¦šj>8š4iÂÒ¥K‰ˆˆ 22’ÀÀ@îß¿ŽŽ²'…wˆˆˆP¼öï2O‰‰‰\¼x;;;Ο?½½=k×®åèÑ£)¼¼¼puu%++‹«W¯râÄ üüü(((P‰íÕ|8Té –D"áàß§)(,B*“qøØvï?JnÞÓêà±±±¬^½šcÇŽ)SUÈd2’îßgÿayÉû°Ú×—¿z¥nÉ))¬öõåO?¿÷ÂŽŒŒ ¶nÝ @VV«V­bëÖ­H¥¯”Édœ:uŠëׯW¶ª¯Ô£¬¬Œ_Ö­@,‘°Ê×—U¾¾¯eÇ*__V¯_Ï•«W+[ÕW"‹Ù¸q#yyyH¥R6oÞ̪U«ÈÉyyº©TʶmÛXµj™™™JÒöÅH$öúù!‰Édì;xÕ¾¾!¡ðɤI¬X¸Ë—SËÒ’mÚP\\Ì–;),*¢Sûö˜™˜pìÔ)êÚÚÒºeK¾ùö[êÔ®{“†J³ã÷ßGKK‹¤¤$lll¨]»6ìÝ»— &0cÆ ºvíʹsçÐÔÔd̘1”——³cÇrrrhذ!^^^¬ZµŠeË–qàÀV¯^ÍØ±cquQ^òÑ'((( "* ïöíQ×ÐàNBó/fö´i,ýþ{455‹Å,ûñGÏŸÀžýûIËÈÀÜÔ”‘C‡2sþ|ºwéÂþÇٵiõ”f@PPqqq$%%Ѿ}{rss)..fþüùôêÕ ???®^½JÛ¶m™5k¿ÿþ;§NâÆ2nÜ8V®\‰,Z´ˆˆˆºwï®4;ânßæÄÙ³”••Ñ´qcîÝ»‡¥¥% –/gçÆÄ'$°yÇÌËØÉ“¹pìa×®pé:5kâ3v,Ûwí¢K§NÌš2…Ë–QP¨ÜK?Æ×× ˆˆˆ eË–,]º”éÓ§£­­ÍçŸιsçèܹ3÷îÝä«,{÷îESS“©S§rìØ1´µµùòË/ùã?9r$7oÞTšåååÌ]¸fMš`ffÆ™€† ÈŠŸ¦—žÍšÑ¡W/Ä™™¨›˜ {2™ÉÊÎf͆ ¨Ó'M"<2±XÌ€Q£(|ô=kkò_1ðööV¬(ýøãhkkóã?Ò´iSJKK100 00`ll @»vípssÃÄÄ„K—.±oß>,,äÁÔmÚ´ÁÉÉ ±´´ÄÁÁY³f‘ššÊªU«puu%??Ÿ.]º “ÉhР¹¹¹XY©.çÍ[·8@II îMšpïÁ,ÌÌX°l»·l!îöm¶íÚÅüY³7e þþ„FDpþòettt˜8f [þøƒF®®=~œkÑÑŒ<˜¿ObÑŠüúãØýÏö]óèÑ#6n܈£½-½;¾_…ןGyy9¾[¶ðí?0}Ò$,_Ž…™©óÓ¯¿2wúçotÝ*=ÁêûQg6íØ÷Ò6ݺucÖ¬Y¬Y³{{{²Ò^îèï¿#G°®U‹¹3f ‹ièâByy9?¬YóB™Ðk×8èïϡݻ¹uçÆFFx¸»ÓÖË‹°0E ¨29}ú4B¡¥K—bdd„¥¥%vvvìÝûâ§))),_¾œ[·nqåÊ´µµi×®111¨©©Ñ°¡ò&ˆÿÆ!V­\‰£½=êêêtíØ‘9 ¾TnÔĉH²²8vú4]:vÄÑÎŽ¯¿ø‚¥?ü@—ŽûñÇÊ0¯Ê.[¶ŒŸþGGGŠ‹‹iÚ´)‹-z©ÜäÉ“  ))‰²²2Ú¶mKbb"·oßæ÷ß§wïÞJ²@ÎC¡•¿üÂw‹ãhg‡±¡!^žž¬Y¿þ¥ró/fá—_¢]£………4kÚSccââã¹Ì?þP’r²³³ùùçŸYºt)ŽŽŽÔ¨QƒÎ;³k×®—Ê­X±‚víÚáîîNvv6®®®òÚ…úúÄÇÇcnn®$ äH$~Ý´‰ofϦ¥‡;vÄËÓ“Íš½Tî·M›øxèPÒ32p°³C"•2Ö,ÖmÞ¬(Üý2šýë=&M’'Týì³Ï*´iÚ´i…¿›4i¢ø½qãÆ^sss{æ÷Ÿ÷Ý3vìØWê¨ $'Wô ##¾–³* IDAT¼Z´`õ+|âËE‹Xúõ×hjjRXT„GÓ¦8Õ«‡†º:מ¬„öïÕ‹õ[¶(à …O¬X¶D)ï÷¶hii1iÜ8¾ýá‡wzÝ*½Eø: 4ˆ)S¦Ð¹sçW7®æÎ˜W‹äååQþ …–——+dòòó9€­ ¤gdT¢ÆÏgêÔ©tîÜ™‚‚JK_?g•T*%;;©TJNN111$''«X’W&ãF¢wS\òßNšfee!“ÉÈÌÎæbP’“iP¿>w+IÛÓ»woFŒ—ú)ü+6999H$²³³‘H$¸¸¸Ð¨Q#Ö¿âK¼2hѬŸ‡žžyÿÚ¶yòòóþQ^^ÎùK—psuÅBÉæÎK­Zµ^¹Mõ¿RZZJaa!999¤¥¥Ñ­[7îܹSIÚ¾-MM–-X@=²²²^-ð/Š‹‹å~õä§ž½=3&O~«Z„{öì!**ŠÐÐÐ×jûöm‚ƒ_/lÿþýïmŒ•góæL;]]Ý [™¯Ã?¾—Ÿ¸¼¼’4|=lmm“åÿ¯¨wìØq‰±A ,LQSS#àr}zxW©4\iàì@Ff6ùŒÖ›·pwwÇÄÜŠäädBCCqqqi9šÐШü­B™LF³&M040àrp0v¶¶`ldDÓFhÕ¢ƒ‚hÓª½»wG PÇÚu€«ááx6oŽ@M7oÒÄÍGâÙ¬ýzõB")G¦¡AšºJ±ÃÕÕKKK"""000ÀÒÒ’š5kÒªU+ZµjEpp0vvvŒ;uuu °µµåüùó4lØSSS.]ºÄgŸ}†——tîÜ™Z–”äå «Sù¥‹d2vvÔµ±!îömÄb1umlPSS£cÛ¶´jÑ‚ˆ¨(455™óùçhhÈx[yxpìôiìlmqrtÄÿäI&Ï•ÐPÔÔÔ˜óùçhii‘_’¾Qåî2™ kkkêׯÏýû÷IKK£~ýúÈd2¼¼¼hÖ¬"‘ˆÜÜ\fÏž­XñlÕªgΜÁÐÐ&MšÀ!C((( 33“Ù³gc``@~Vúº•ŸhX&“ablL77ÒÒÓ¹}çM5B¸7nŒ›«+jÀÝ{÷øbÚ4ÌLåÛþÿøT"ÁËÓ“«ááXתEZz:CÄäÉR~QúJÈ'“ÉÐÑÑ¡eË–LË–-ÛNÎÎÎÔ©S‡ÐÐPfÍšE:ò²!ÿøMff&;w&&&sssZ·nÍ•+W˜5k¶¶¶äg§£¯Sù…{e2€mÚ •J9vêÚ¶E&“a_·.v¶¶´lÞœãgÎ0sòdÅÖx+®EG“˜”D¯îÝIºŸ¢¢"tuu9vêS}|pqv¦°0] ÔÔ^ÿ¾¾}ûöx{{“››‹¿¿?åååÄÄÄ`ggÇo¿ýÆåË—iР::òœT³gÏfß¾} 0€Í›7séÒ%œÙ¸q#nnnøúú"“É1bõëׯ°ÒõºæUÚ"“É056¦±›ÓÒˆOH ‰››b,iÔ°!2©”¤øbêÔ >q)0©TŠ—§'ÁaaÔ¶²ÂØÐCÜŸ¬öÉd2»¹ablLYy)2 ´k¾û™L†®®.ÍÜ›R^X@M%ŒSïuuuÚµnM«-»v ===¦Oš„ºº€ÇiÑÑ©IQQñ3r—Cè׳ …O^KËÊ&üÚõ»á¸qãh×¹W…ç?¤$qL¢Qá=ÌͬU­Ê[#Êam×@Õj¼5¢„X[TnŒ†2¥'c]¢8¬Mk«Z·æM1sæL²³³Ùµk~~~ :”Ï?ÿœÛ·oãàà@nn.¾¾¾lذëׯãîîÎÙ³gquuåÑ£GXZZrïÞ=455ñõõ¥AƒR·nÝÿlLJ4†T'}=¤R ×oýçZ„üa5ÕTSM5îîîŠßKJJptt¤S§NÏ´‹§¤¤{{{ºt邉‰ ¹¹¹*ŠM?|øPX_M5•Aõ«šjª©¦š÷<==i×®>>>Ô¨Qƒ &àãデ‡B¡OOOEû?þ>ýôS¼¼¼HNNÆÓÓ“¬¬,víÚ…%%%lܸ‘H„¦¦òN•Wóÿ*}аšjª©¦š—Ÿ~úIñûàÁƒøáÉI¯ <ÓÞÐÐo¾ù¨xZpùòå,[¶ €ž={VŽÂÕTó/^8ÁÊÍËGµé,ßÉ[$«¦šjª©¦šjªyž;ÁºN`H¨8cøÛ .£®&%ëqżWyY”# ¨ø¿}ß()-BV¢…¸¼jå–ˆË),ÊC=ûÍr¿/æ=óy«Š•ýXÕj¼5ÅEùFæ“%¨úýQT\@vZÊ:Eø>ò!!ÒM$•˜Î¡¼¬˜ÒÂ\¨ÒË5 {ÛçN°Ú¶jNûÖžÏ{©Ê°Çï(¥212ã_h “Y"«Q5޾A²yÏÚWÅ•…&ÈôlT­ÊÛ#)¨òý@¶.2½ªŠÒâ£?ò´>Œþ(#3ª‚ª=ÁúÆ*y ‘K Ì™žê²ã¿ ä¬ÿž—î¹,@@fVöÛ꤄¢TjY˜¡¡¡AAA!%¥¥˜™š˜ô€VÚRT\ÂãGÑ7Ч–u-¨Ë´ÐÐTM©¢¢B²²²¨SG>¡HN~ˆ©©™"Ë‹(..B(|ˆ¶vMllê"ÖÐBMS --e¨ý eeeˆ„"ììH}”ŠŽŽ†¯—¯çqêc´µµÑ­©@]¬²þÉd$&ÞÁÉI^²'3SžÄÕÔÔ앲 ñ€ ccSÌĮ̀««¬?’“°©kƒ¦¦&¹9¹”—`iõê#Ø÷“îS^VN]‡ºhii!P×PY$'?ÀÌÌœš5užøK&uê¼|‚ñ ¨k¨´?RE©èèÊ}¢¼¬a²{GûWÊ=N}L^Nµ,042”®TØéj˜˜˜=ñ—xœœ\^)—••Iffú¿üCu--Å)>e”˜„m][445ä>QR‚e­WûD^nE…EÔ²®E^^EªCžõ‰§cÈË(.."##¹ÿ…É› «««”1D*.G .Uéç÷u‘J¥$%%R¯ž3iꘘ˜"•¾ºÁó¨Ò·GŽŸeÔÄÙ¤ed‘t?™•«7ò릊e26¯ÛÌõÈë ï7‘P¤Tý""®’””Htô5""B‰½Î‚s˜:u‡ï§wïNDEET‹Œ ' à4YY™äädsíZ~~{ ¼È”)㈎¾¦T;b¯Ç’”˜DHP7cnÏ÷K¿g@·œ;uŽá}‡süèñ rq±qœ@”"¢¤¤„+—®p#ú£ŒâðþÃJµ#1ñII‰\¸p–»wHJJ`ݺU´j%† f„‘lÝZ1£yRÒ]N“”$ÏØ~þü’’6¬7II‰ääü·Œ×oKJr ·oÞ&èbI‰Iܾy›[vÒÑ£#i©iÜŠ½Å¬É³øö›o+È=JyDÀénÞ×· áÔ±S|ùù—œ=y–“þ'•jGff†Â7’’‰ŠŠàС¿èÕ«ÑÑ× ²pá\&O[A.;;‹€€Ó\»@TT‰¸ÿ6üÊòåÏ?W&……„…óÄOC8{ò,Ãûç¤ÿIrsrùáÛèßµ¹’âN(üâÖÍ[܈¾Á ƒˆ dDßJµC"‘<ñ§~zŸÙ¶M^ôvýúÕxzº>#{þüN#“ɸwï.wï&УG[ïУG[ÊÊ*7”AøPÈí¸Û^ TøÄŽÍ;èмéiéÄ݈cæg3Y¾`y9QŠˆ€ÓÄ݈ ør0Ñ×¢™=e6‹æÉKO6ž †÷NŠ0¥RíÈÈH':úááOÇŽƒ÷Ñ«Wbb¢HN~Pa ù‡|"22!7oưxñ<||Fàï~ýºz¥Rm(((àjÐU’“*ý½Þee¥¬]û#:4 8ø2ãÆ g×®mouÝ*=Áêß«+ººò•;¼Z¸?ÓfÎ7sHLH¤W¿^˜™¿zUâ]2þLÆŒBHH ÐÑÑ¥OŸŠ× еuł׮…±`ÁÔÔÔ8yÒŸÌÌ ‚‚.2zôÌÌÌ‘Jeèè(wizÕw«Ôc§ˆ ??Ÿ‘cG*^ïÒ£ õT,Ú,J1vÈX 8øçAŠ‹Š9}â4……œ?sW·g¿¤+›Ý»·Ó£G[þþûqq±$&ÞaÒ¤éŠ×[¶l‡GËgäºvm…•Umvïþ©TÊß$>>Žþý‡pø°ÙÙÊ]í=}ü4ÝÛvgÏŽ=ÄÇÅ}-š1>cÐÕ“.¸5 S×gs}Ü_^/ñÄ‘äæärîÔ9îÞ¹KfF&:º:tìÒQ™fAÏžX¿~5ññq2pà0¬¬äIgëÔ±¥_¿ÁÏÈÍœù‰¾ŒPøààË”——Ѹ±;wîÜbÖ¬ùJµ#E˜BßÎ}ùnñwÄÇÅsîô9º~Ôgù°¡‘!£ÆzFnÅ¢D†Gr+ö·boMJr ºººÜ»{3¥ÚQ^^΀Ý™7oññqøû¢eË64o.÷ @ÀäÉ3Ÿ‘۲ŗcÇóèQ aaÁܹs›Û·o¢¯o€H”½{w‘Ur<ï©c§èѶ{wì%>.žë‘×;Q^nÀµ‘ës}bDߎ9F^ngO¥Žm:÷xZZ-)1‰6íÛŸ—OQaåæÍŠŒ §W¯lذ–øø8BB4h8µjÉ}ÂÆ¦.}ûzFnút?~Ä•+—HII&8ø2ššZôï?TѦoßAØØü÷Īo‚ð¡¾ûâ»ÊW)ï÷¶hiÕ`„©Š¿[·n»{ó·¾îŸ¦aºÏtš{6ç“O?A ðúUôÞ ß¿†6m:››ƒŽŽ.Ü{iûâb¹·k׉¢¢Bttt;v"yy¹ôèчíÛ7!>Ͷr3ãÎ]8—Ç|L~^>ZZZ“_<,.STTD³ͨç\Cf͛źUë¨Y³&q±qˆÅbFQî]úøñ“™?1EE…€ÚkÉdffàââÊÔ©3QSScÁ‚ÄÅÝ ]»NDF†qò¤?-Z´ª\Åÿ‡ÞzóÛÖß(+-Cüš5.332qtr¤Y‹fèéë1mö4Nþ}[;[444˜?c>vn¨dÍ+Ò¢E+¶lÙƒD"¡M›gKP<ÌÌ lmëÒ§Ïtttøä“OÑÖ®IPÐEÔÕ5pqQ~!q[vúíD 5Zµ}½ÏBfF&õÔ§ÿþhhj`S׆´Çi<¼ÿ1>cèÔâÙ Ae£©©ÉŸECCOÏÖ¯%“™™™™9G̬ÈhÞÜ}}æÍ›þŠ+¼ú ì´´ô?ûDÓæMÑÕÓeúœé¯æPYxzz±eËn$ %%ÿÅ'ìèÕ«¿Â'tttÈÈH¯dm_Œ­-?üúå.ð¿WTé,€zöuÑ|R3ÎÐ@ëZ'é¤>JeãÚäd+·ü““ FFòºh_=‹øø›èëëãèè¤hS¯ž3ººOkA9;»àäTŸ•+qôèAââbùæ›9?~„+bkk‡««rËÔµ¯‹…¥üÿºæ‡5^¤F4p{ZÆÖÎccÅߦf¦tíÙ•Õß­f‹ï2Ò3ðåüEó˜>w:Ý{u§GŸJµÃʪ¶"–gÏžß9tèOÔÔÔhÒ¤™¢M­ZÖXZV Èœ0a*6¬eåÊ%Èd2† 鉑‘1ìåþý$úôyö޲2153ÅÞÑ@ÀÙ“gÙ¸v# 5T$N415Á¦nÅÑFã·Ço¿þ–â¢b¦ŽŸJ]ûºèéëqãú ú î§T;ôõ prrA]]ë×#Yºôkœœê+|BOOGGç r#FŒæüù3,Zô%YY™,Y2Ÿ˜˜(Ž?ÂÂ…Ë”j@ í¸6rECCQŠˆiŸN*ú„––V4|×#¯óÕ̯ E¬_³žk¡×ø¨ïGìݹ—±Ç*ÕŽ|ASS ±XÌС½|¢–¢Ý¿ý w襤$óå—ÓHL¼Ã{Ù»w'kÖüÀï¿obìØ‰Šºž•…™¹öŽö¨ Ô8}ü4}âÿåfÏúÄŸ1üµû/–}³Œââb&ÌãG161ÆÖNþ]1zÂhì;@{ïö¯¿õ6<õ‰¨¨¾ýVžÓKîòÕ8¹O8U1b4çÎbÑ¢/ÉÎÎbñâùܸq]]=êÕ{º»àè脾~åO µµµ>QU4jÔTñ·µum,,Þ®¿?èZ„£Æ¤ygï Ïç§=¦†Ì -íÊ/.\™”f!ÕÎEÇD¹Ûïqi)…Â" ÍìT­Ê[“•};;U«ñÖd%¤`b¡ü-ÜwMVúMLêÕQµoMVÒLL«Z·&ûñ ë™+5Ƚ2¨C^Ÿ²¢BJÓ¤èWm?”J%Ü¿qü?×"|îôR&“ñPøˆªœ»¢ü5—ˆ«©¦šjª©¦šjÞ5/L4zûNÕˆþ&F†ÔPS#ïN}”äçSNU;?NyY2ÍrÄE¯·Gÿ¾"‹)Í/AMZyÉî”EiqÞ3Ÿ·ªHiA6y$¨Z·¦´0‡<áëÅٽϔæç‘'ùú#ƒü”rÔÔªvŸT!¯¸¬ qYyÕ§d²w˜h´COZ{6{ÞKU†M;þD*ÓĦNŭެ4!:2u´µ_žwê}§ 0©¶6&Ê v×”—–#¹‡¹YÕ¶@”-ƺNƒW7|ÏßÀÚâèôR¬ëTý­NQYÖ¦U¿?ReÅXÔvA ¨ÚU>¤1D¢]C“Ê‹++)ʧ(-ãªýù•J%d¦Æÿg¹F å引BÊ"àR0^žîèÔ¬IÀ劋KèÔ®•"†,))‰ÀÀ@h׮еQj*±qqtóöæQj*g.\ –…Ý;w~©ÜãôtN;‡…™uíª$m_L^^çÎcàÀäççsèÐ!ôõõ8pà«…àà`ÌḬ̀¯«Ú ÕR©”=û÷óÉðáH¥RvýõjÀè¯>ݸkß>¤2\]iÖ¤Iå+û üüüèÙ³'ººº8p€ÂÂB „žžÞKå>L^^ýû÷ÇÐÐPIÚ¾˜“gÏÒ¬I,-,8uîÓÓéÞ¹3µ^2éûÇ?ÌÍÌèùøH`` ÖÖÖ8::ÄÝ»wiÓ¦ õêÕ{©\pp0 xyyáììüÒ¶Ê *&u€ÆnnDÇÄpýæMšº¹Ñ¤Q£—ÊÅܼITLŒJýÃÏÏ^½z¡££ƒŸŸEEE 2„°0¬,,8tìyùù|6nì]·JçøßD£šܺs—©ž&õ>|8+W®dÙ²e888(U¿-;wòÝêÕ˜š˜`njŠ“ƒûôQ¼Þ¯gOvîÝË'C‡ÒÊÀ «WÙ¶k#‡%áî]´´´035eØÀäæå!‘J156~Ñ[V ~~~Ì™3 Œ±¶¶fìØ±Š×»téÂåË—quueð`ybȇ2kÖ,|||¸wïêêêXZZr÷î]222psS¾Ó½pqS¦`]«úú0}Ò$Åë^žž…BJJJ“+€n2cÒ$„"2™ k++ôõôð=šÙ püÌ¥ÚÁ§Ÿ~Ц¦&úúúáãã£X©rss{’úà:Ë–=M[0lØ0ú÷ïX,¦   ¤R)‰‰‰œ9s[[å®&&&%1mΧ¥¡¯§‡©‰ ÃT|ùÛÖ©ƒ£½=ŽeÃêÕ ¹ÏfΤY“&˜›™‘–žŽ™‰¼ôGfV!¡¡L›8Q©vddd0gÎ"""Ð××Ç‚>úy9###¼½½ùþûïñóóSÈÍ›73337n̽{÷022ÂÄÄ333Ū»2‹Å,X±‚#Ç£¯§‡u­Z´iÙ’–Íå ãFŽäÓiÓ8ÿ÷ß ¹ïW¯¦°¨ˆnÞÞÄݾžžúzzŒ2„=û÷SXT¹É9A~ó0~üø >1qâDÅJU£FPSS#66–o¿}Zá`èС 8òòr ±°°ÀÍÍ=ž¦)))ÁÈȉD‚ô ‹þ¾. wï2uölÒ22>1|Ð ¬kÉÓdÔµ±ÁÞÖ–ÃÇŽ±þ—_rgÌÀÃÝ3SSÒ22031Á¡n]†öZ=`Pß¾ÔµQNÍ×ôôtfÏžMXX˜RÞïm©¡¥ÅÔ ·õòâNRLþôÓ7¾n•ž`ý›ð(üO°`ÎŤ ä4bÄ  ½V.ZD.]011Qäcù‡©³gÓ¤Q#|þ5Yù-MMLLL䯯\ ÇÃÝM R=R’öOùꫯ2dFFFÔ¬YñnåÊ•”••±dÉ’gäÔÕÕ177G]] Î;GVV±±±„„„(Iû§L›8‘q#G¢§«ûÌ6ÁŽ={¸ÆæµkŸ+[ËÂ555,-,¸yû6jîîDÅÄ(Cõ 2„éÓ§cjjú̶ÞÉ“'ùã?ؼy3úúÏ%ÿ§?þytqqÁÉɉï¿ÿ^Yê+hݲ% æÎŦvmLþçÆ!òúu¯\ɦ5k°²|6NÄÄØ---ŒŒÐÒÒ"(${;;êX[+K}vvvüôÓO8;;cfV±b„H$bÔ¨Qlذ''§gd ©Y³&†††H¥R„B!#FŒ **JYê+ÐÒÔdÓš54mÔè™í'‰DB›nÝXÿË/ÏÝòÓÕÕEïɾž}?úˆYS¦ ®®œ˜«aÆ)|ÂÀ b®§ãdz{÷n6oÞüÜ-óÿõ UÒÖË‹sæPÇÚc#£ ¯]‹Žfé?°qõjj½Ä'þyT%|ýõ×*ÕáMÙ´};±qq¬ûé§·ºŽzÇŽ—ÔÀÂÔ555.‡Ð§‡7ÅÅ%ïHÕÊ%7/ŸfMÜ().!7?ŸûS((,äÑãtÜÝÝ)— ÈÎÎ&,,L~G)-G𝾸[’“C‹æÍ162bÿáÃØÙÚ¢««‹¦†-=<¸÷๹¹DDEaS»6úúX˜›STTDhDv¶¶.]¢®­-~GÒÀÙ™}úRdÔ¨YùesrssquuÅÚÚšS§N¡­­M­Zµ())¡S§NÀÁ^ÿ»¯™¢L\=jAab ®ŽÕ›|ð*™—Ž«×¿?þ㯙‡«Û_?ø/GvÎC½Z¼Î"ü—àuá߇Z]Æí˜K¯Fh4#3‡3#ÐÔ`¡ÑÌìÜê6á5^ã5^ã5^ã5þ?Å3'X2¹œ–>OÇ Ô$Ô±²ÄPPŠPx¿Òu…¤ æÖ ‘¸2Šd5»’¦VhTJ‰ºf¯j¤òGO½o5Òâ"„äT·/ ©T\;úCR€°¬F'| •£Êˆ¯’#B}¢v!¥Hd¢*ûŒ2e ªb%2UÍݬW,4êÝØƒÂ"ÉKTÝ8~ê­ý±vÿS:j®Áë:Rÿ"”–”@™ ëZP‹P%’?ý¾Õ@¨äj¬«_ée¡ÊSÕŽþP*±¶«ùýQª+·š_‹ðõò÷Q›jæg'üÏíž»,*--{)ƒôŒ¬ö<Á¸‘obddÈ®ýG)-+£W·Î(UÚÒ+'$.&+k+ÆþglµÚ+“I¹ví*÷ïÇñî»3‰Œ¼ÂåËç133gâÄ©˜›?ÿL?:úçÎÄÔÔœI“Þ©ÖôO¥RIÌ­þ8òóÏ'1>‘};÷allÌä÷&?•Áóg”––²yÃfšû6'0°ú*h4’’âÙ°a5ß}·šüü<Ö¯ÿ€iÓfakk÷ÂösæÌ aCOüýƒhß¾“>L~.RSR [Ƈó?ÄÀÀ€ «7PVZưÑÃhìÝø¹í$E~^ó3*•ŠAo ¢©OS=Zý422Ò ßÌС#qvveÓ¦õ(r‚ƒ»Øþ¹í²²2Ø¿ …cccfÌøXV?œìì>@@P¾~¾l ÛŠD"Á§¹½ú÷zn»RU)¿múM›€áíE¿AýôhõÓxô(Ÿ'ŽàààH}رc+"Ñ#lmí9òÅß§»vm#//—zõê1r¤þôîÊQΉ|„@ `Ãê ”––2üíáxz=_CR$á⹋ˆ ÄŒž0šSÇOq÷ÎÝjC„Ât¶oß̰a£prr~Ì ]»†Ðî¹íär9ׯGrûö ÞÿC23…ìܹ~ýÒ´iÍ}•P«Ëˆ¿ÏÖ­¿ðÕWËÉÎÎ",l¼ûîÿX€¹F/%22søýØ)dr9R©Œ¦ÞËœ8}A÷Œ™™† `Ë/[ÈËÍÓ«}Ÿ|ò!ß}·”/¿üŒO?ý˜[·®Á±c MÞOr²¶Ö˜X\À¢Eóøê«Ï9|x?÷îŲpáÔj5mÚpâÄâãõ'>°òÛ•|·ô;fMŪe«8ûÇYbnŰkÛ.@Kä€v\»z¨ˆ(r_.ü’å_/'l]ùyù¼;^«9¾9œ£¿%>î/=ð2ضíW¾ûn)£GfûöÍìÛ·ƒ„„xÂÂÖ Ю]'>|À‰Gtí¾ûî Ö®]Á²eKÑh4Œ9Ý»·} ŸuЫýƒEó1aøvoÛÍúדš’ÊÖ°­H‹¥Ѻmk$ {wìÕµûuï,ÿj9_~ö%r™œ“g¶.Œ¸Ø8Æüg %нúqëV4}43&³{÷6–.ý¡0Ý»ÃÉÉÉB.—áíÝccc6oÞ¨kwôèï|õÕB>ÿ|"QK—~B^^Ó§Ï&#Cˆ©©™^ýÈHÏ`꘩|òá'ìÞ¶›™Sg’“•á}‡HJHB¥RáVß 'g'~Zþ“®]TD ÿo!Ÿ|ø YY¬[µŽ};÷±qõFÜÜÝXõݳåBª J¥’Q£ñÍ7‹Ø½{£F ¢  Ÿ“'rëV4¶¶¶4kÖ‚¯¿^¤k—ššÂœ93˜;w&ÉɉìÝ»ƒ;¶0}ú¦N}>˜ŠJUµµFO9Áâù‹?|<»·ífÃê ¤¦¤²åç-Ȥ² NJØ»³‚›Öobù×Ëùrá—ÈårÞÿÏû$%$qùüeÎ>Àœsxcð¬]±–‡V©7nDññÇï1cÆؽ{_~ùBa»wo#77™L†·w3ŒŒŒØ¼ùg]»Ã‡ðÕW Y´HˉŋçsýzÑÑ‘>¼€ÌL!ûöí ##½J}HOKç±ï°fùš*ÿ¬WµZM||œî{¦°PLPP’’8sæŸëÖèƒý _ÌLµçàNŽö˜››q?1…¢¢bŒµ®¹ÕwãÓ?emØZÜÜÝäê/¶$2ò ~~¼ÿþǨÕe899SR¢äÒ¥sZûƒ:’ššhP©”ÄÆÞáÚµ«ìÞ}”¼¼œ˜4é]<< V«9qâ0ýû"$¤-[¶ÆÛ»kãq½zõçîݘJüرc+66õ˜2å}4 ÁÁÝÑh4¬\¹ž VSVVõ§!éÓuœhèÑÒÒR\Ü\*sÂÊ’èkÑ•þ¯?|õGÏ¥¤¤Dˉ9аQCâïÅsæ3Un÷Ÿ¡åÄï¬Y³‰–-} êDÆØØh¿§ìíèØ1˜¬¬ŒJ}°ví ,XŒ»{LLL˜0a*ööqüøaÚcgWõ22Òb-'Þ°R/Ÿ÷²022&4´B\¶iSlll8pÀ™ìŸó°Fï`=‰”Ôt"®ßÂÚʪ’NŨ£˜ù3quwÕ ÑÿŒáÃߦaC.\8ãGù•îíÞ½MG’òI“‘‘vb˜ššLTTåqáÂöíÛIa¡@@I‰þ5Ê¿5¯&^DED‘þ°ò è#žšŽ±‰1òÇÿ{ŒŒŒÈÎÌæÜésÈä2Ž>FqQ1wïÜ%.6ލ«Qz÷£ÿAøø´äîݘ§v##¯pûv4VVÖWÄ š™™!püø!4 ìfÏžìÞ޵µ5ÅÅEúvƒN];Ø>aº[×oUºw/öçOž§®M]Š‹*¾„ÍÌÌ(ræ3Èårþ8ú*• O/OZ´jÁ‰Ã'ôí>>-èÞ½‰„Ë—/Tº'¦±ÿ.lmí*ýÍÌÌHЏxñ,"Q—.'//‡'Ó¹sW¬¬ôãäìÄ aƒ004àäÑ“•îŠ Ù´~NOõ‡´Xʵ+×ÈÎÌæfÔM’“’)))ÁÑɱҳú‚‘‘1cÆL¢^=;ØSéžZ­fÅŠopqq}ª?är9·n]çÁƒdâã㈋‹!??#Æba¡ ¤Î! h@zZ:7£+‹´ÆÅÄqþô 8qâ ¹‚?ŽüñÔĶüCCC½Ä5oÞŠnÝzRTTÄ•+ç+ÝKOÈï¿ï~.'.]:‡X,ââÅsäåUo&½³‹3½ßè]­6üS\¾|»wc°°°¬´¸û_Qã…FíñnÜG;RÓ3£† àVL¾~¾øuê@nv.I Ixxz (+Åk½d€8;»Ò¼yK,,,ÉËËÁݽ!vvö4nìM£F±³s 2ò2={ö£K—n¸»7ÀÙÙ•””$BBz`ll‚L&#(¨‘‘— éA÷î½(UÉÑ•`l^uu±ÊaïhO lêÙPð¨;;hÔ¸M}šâèâȵ+×hå׊7‡kóëÔ­C›€6ܹy‡Î!©S·ùôÜŸÀ4kތccSU‘ 3 ›¿°âåacS&M|ptt¢¨¨ Kñðð¤eËÖ¸ººu'¦LyO×®wï\½z‘öí;ãììBF†ñã'“““M½z¶L™ò>È9˜ÛT½VÖVx7õÆ­¾Òb)·ún¸×w§¥oK\Ý]‰¿Ó>˜¦StíÊ­ë·hÚ¼)^M¼ÈÎʦÿ þ˜[š£.S3mÖ4LÍL‘H0·¬ú•®™™¹Ž …‚’5ÆÙÙŸ–¸¸¸‘››ƒHôˆ3>ÂÒR+ˆÒƒû÷ïâääB›6þäççâêꆉ‰)½{÷×M°ä²<Ìm«^ ÓÈØÏÆž4ñiB©ª‘HDSŸ¦Ø;ØÓ´ySœ]Q©T$ÞOdÖÜYÔ³ÕîFtéLjJ*&¦&t錨@Dý†õéÙ·'÷bï1{þllíl‘‹ 1·¨:­¢r‚Ç\ðE£Ñ™™AË–­u¼qrrÆÒÒšˆˆ‹|üñ§89iË·´oß™œœld2)½zõG"‘`ff†—W®^½È¬Ysqs«Bú3[KÁ+·ÝÚÚïfÞ¸¹»Q\\Œ– ÜiáÛWwWîÇÝÇÈЈw?xWlj}{p3ê&ÍZ4£q“ÆdgeãåíE=Ûzx7ñ¦~ÃúZÞDßb䨑´nÛ¥TZecˆ¹¹97ÁÃÃóœh…‹‹99ÙˆÅ"ÞÿINôäÞ½Xœ]iݺ-yy¹¸¹¹ëÆOOmq''g||Zbmm]¥cˆ±±1ž^ž4nìA™Tƒ©yÕóðea``€‡‡'-Z´ÂÅÅ•¨¨«¸»7`„)ZÒÜÄ×B£åX½q+c&¾h÷J×%¹9¯3@þE(-)A*”Q·dˆncëáQÝf¼4 3°ul^Ýf¼4 òîbëU³³— Rbk§¿£Ûª‚('º^5?‹ðõò÷Q›²Sc޼¡Ñk7î°÷à 4šš«]‘”ò1ýØk¼Æk¼Æk¼Æk¼Æ+Ç3'X-šyضf¯˜®ß¸ƒ¹À…°rÜ“J"A€µjV%”Jc#²ª­î^ÕP—ª(• Pë?ÞäU£T.}ê}«‰(-.@Alu›ñÒ(•ŠQõ›QX(•HP”Õ†þQ’!¨ñB£µi QaP…cH©RªX‚BU³OÄþéfÓ3'X–æ5þˆðèÉóLœè‰“{e  ÚTGªÖÔ",ÓÔŠZ„e¢Ì§Þ·šˆ2¹ 'ÇúÕmÆK£,ÚÑÊœjA-BF£›çëZ„ÿ¼®Eø÷¡V—‘•ýànW£—g.\eê¬O+‰†ý¶›uaáºß¿ùæ–,Y´iÓ(*ҶדÈÌÎæË~`Ú‡ê®eçä0pÔ(¢oÝzAKؼ};s?ÿœ©3g’™]Õ¦¾EEEüôÓO ü—íe2&L`ß¾}Uiæ_¢L­fóöíu¯ˆÓÓh4¼÷ÑGløõ׿lß.4”V¯ærDDZù÷°wï^BBBÈ~âÝXºt)‹-za»””&OžÌ|À¡C‡ªØÊ¿Æ‰Ó§8r$7ïÜÑ]ûeëVÞ™õbŒŒ¬,V¬]Ë‚%K˜øÞ{/|V¸técÆŒáÈ‘ =µ£G2`À€¶“J¥L›6¯¾úê/ûN¸uçÓ?úˆŸ·l©¸C@HÈ_¶ý`Þ<~X½š÷>þ¸Z2¸÷ìÙC×®]ÉͭȦ[²d K–,ya»””>ùä>ûì3¾ýö[–,Y»ï¾Kaaa•Úü,?uŠ#Fp+¶bsãæÍ¼;{ö ÛåäåñíÊ•L~ÿ}N;Ç1cˆˆÒöö¿J•а­[éÒ§Bª¡´´”wfÍâ×ðð´|1jôË¿MKÒ3²P•–pìÔdrE¥BÏS§N¥oß¾$&&ê]?ª÷! =š±ï¼Ã1cHMK£©—‰ÉÉ”••±iÛ6òòó)–jSƒ¦§3hÔ(>þôS~X½škÑÑ 7ŽÁýûãçëKbr²Þ'ŠS¦LaàÀtëÖ™3gròäI‚‚‚ˆ}LxµZÍš5kP*•>^'èøÛo¿!“Éxø°Bqúôé|þùçŒ1±XLpp0áááH$.\Hpp°^ý8}þ<þ]»Ô½;+Ö®eÌ”)´  '7WLJs—.‘š–FBR’®Ý7+V0kÞ P(pööfШQ¬X»¯6mðöòÂÌÔ”ì­~ ¢¤„#'NTZ^¸r…7ÇŒaä¤I\Žˆà§õëùþ§ŸØ¸y3“ÆŽeï¿Rúø;ºªF÷îÝuœ˜?>ݺu«Ä‰-[¶ —Ë+qbÚ´i,Z´ˆ#FPXXHçÎ)--ÅÍÍÔÔT~þùgFŽÉ™3g*-`ª'Ïž% $„ÀnÝX±v-cßy‡ödçæ"}̉3.&êÆ€¯~øÙóç3bâDÒ325i÷ããiÞ´)ñ¹ض-Iª¾ ^||E æHŠ¥Ô³ÑJÛ_¾|™íÛ·³gÏlll(Èê;¢"ôéÃûS§ê®<{V÷óʵk ò÷gÏÁƒä=žlm»‰„&Mšðý÷ßë®%&&ê~Þ¼y3Íš5ãÊ•+äåiÕòÅb1wîÜ©´+ÁÖ­[ñöö&**J÷¬¾ “É055%ñÆ Ýµ'¦=Š«‹ ÒÒP(*dJŸ8ÁïÛ·3ûñÎHÊíÛäåçóö[o±qË–.[ÆW êÍ…BAYYÑÑÑXXTSj^.]ºDQQ–––ˆÅb”J%&&&;vŒÓ§Oãé©-ráÂ~ûí7:Äœ9sðññáãõWbF¥R¡P(8sèNŽGÆÆÚØ–{ññDDEáÙ°!'NŸF*“aiaÁ‰Ó§ùlκ?ž†ÿ¬U´¾Aþ£G ìÛWo>€v¡TTTĆ ðòòböã…r‘ËÜÜ\ÂÂÂèÚµ+6l@,cccéS§fÒ¤I,[¶ ¡PÈÒ¥K™2e zõàQA‹æÏÇÏ×—ÙÓ§èÞ1µZÍÇŸ|»“&ñé_—Ÿƒ½=g/\ Uóæ,Y°€Níµ%BƒƒÙ½¿^’¥žÇ‰òñáâÅ‹H¥RÌÍ͉D¨T*Œ9zô(çÏŸÇãqöï¥K—ˆŒŒ¬r›Ÿ•J…¢¤„3âèP!•RΉ¸û÷‰ºq 8yæL%N,^°€ÎØÀÅ+Wt£n::yŠªFYY‰„yóæéåó^Ø?‘M¹÷àA¸»Ÿ˜¨›ÿÑß}Æýàâì@wWŠŠŠQ(Jt[Ò³gϦ{÷î\½zU·Ð'üýü˜5>wï߯t¯KÇŽ”––¢T*)|¼+e[O«‘³qófþûË/Äܽˇ ðó–-¬ £´¬ »jfð÷÷à믿æÌ™Ê ǘ››#“Ét[èæææØÚÚ²sçN-ZDnn.o¿ý6mÛ¶ÅÒÒ©TZ-Ûíþw›Â~ûð=•…›ûøà`oO‘D¢ë/OOŽ:Å{}„Z­¦ï°aœ8}šæÍ#!) /Ïç×5«*øøø`aaÁÑ£GY±bE¥{4nܘ‚‚¤R©Ž ^^^œ;wŽY³f!‹™0aöööØÙÙU˺»›NŽŽDߺÅü?‰9:8àçëKî£G”””PR¢-åãåéɵèhþï³ÏH ™ûùçܸ}›­;w2fĽû`ccƒ——B¡P7a*‡••]»v%;;›²²2Ý÷——111,X°€ØØX–/_ÎÙ³gqppàÌ™3xyyéÝCCCü|}Q©Tô6¬Ò=@À€¾}ffè8âåéIRJ Ÿý5—## ß½›_ÃÃÙŽ«‹ 5ªí«?£yóæXXXpøðaV­ª\f¨Q£Fxzz"‰ÉdºµrN|ðÁ2~üx²²²*µõòòâÂ… Ô©SK˪M­ï憣ƒQ7n0ñâJ÷œiÓªyùù(JJ(y|*ãåéIäõë|üÙg¤gd0gáBÝnLuÁÆÆ†Ækf d«æÍ±­WIqq¥±àE×Áffãìh¯S@/–ÊP(ìØw„‰'âÖÈGw4èééI±8WoŠÓÓq´·ÇÜÜœ‡éé8ØÛ£Ñh((( ¾{….HšPˆ½­­nå•&"“Ë©ïæ†@ ??{{{Ò„BÌÍÌhX¿¾^ƒÜ333±²²¢N:ºŸÍÌÌ …ºÝ€¬¬,,,,t…1³²²(,,ÄÙÙKKKÒÒÒt„ËÎÎÆÌÌ Ks3ÄÂz rÏËÏÇÀÀ;[[Ý϶õê‘”DSooÝsù9ííìt¿ç`ok‹½ñ‰‰4ñò"!) ÐÔË @@¦(Wª/¢*‹µÇ9ÎΕ~NJJ¢aƺծX,F.—ãââ@aa!YYYÔ­[RRRpwwG(¢T*ñôôÄÄÄ„ÌÄ\T¹ÅR)"±˜únnH¥R D"ê»»ë¸bñXQ*“ñ¨ €9#“ÉHËÈÀÂÌŒõë“.bkkKAA¶¶¶X>æQf^:®^-«Ü’’222ðôôD©Têx‘™™‰¥¥¥ŽJ¥’ôôtT*ÉÉÉÓ¸qc' b±ggglllÈL‰ÃUAîjµšÄ”šzy¡Ñht¼ÈËÏGðÄ _£ÑŸ”D³'8sÿñŽvS//‰DhÔj È{ô»zõp°·';ç!Ž^-ª$È]$QRRòÒœHNN¦~ýúÈår¤R)®®®‘™™I:upuu­Ò ÷'9ñäÏ›ææ4pw'M(ÄÎÖV7~4¨¯MZI ±­WKKË* r/ç„«³C rW«Õ$¥¤Ð䉅Mn~>†Ô³©Ëí˜Kÿ³Ös'XYÙy@ÍÕÁZÿë&MšD—Ðþ•®×¦ Z“E¨§ VUC_¬ª†¾&XU }M°ªúš`U5ªr‚¥OÔ¦1äuá߃Z]ö&XÏŒÁºyƒc'Ï×àéˆDb Ð -Uº^"—"VP½ IDATÐPVVµA—U ¹BŠF­Â°†k±”ª””(åH¥Õ›áù* ,‘?õ¾ÕD(•ŠÚÑJEíè’ÚÒ%H%" 5{‚U›ÆµZ…‘QÕÅe)2JJjþ÷»Zóϴž9Á lÛŠNíü_Ê êÆág(EE±¦rÆ„\#§Lc‡’š½ú(Ñ”¡Ñ£ÑT}FHU¢T£¤DcJq ï•æé÷­&B…A-éjI”ÖŠþ(Á˜bM15<ô·¶!T!GT9J 5üõJ'X&ÆÆ<*¨+¿²²2 ”••¡ ¢oÅâã×kkÔj5CCCT% L56ÕVGJ£Q£Vk044D£Ñè _Zþl¹ @m¦Áìq|‡¾Qn‘‘Q%? þV­±r_ŒT*Ê e˜YÚUµÉÏÄËøQ([þ¬L)¬¶þ(·§ü=*·­â}yq;¨xe¹ÅÕÖð Nk4éÇ“}Wþ¬L–]­ýQþŽèütñ¢/j§Ñh*Þ«GâjíµZ;¸ V«u¿ÿ•åÏ–û!/~„Yºz­EøO9¡V«Ñh´ßÓå~TçòO8Z^¨ÕjÝsÚ¿S®¦_õcˆ±ÈÕÕúþþ]¼h,ø§áR5z)qàÈIB#+'©LÎð‰3Ù¾k7*ôc–,XÂò¯—Ó¯k?òrõ+ ™)D$* ;;“ÌÌ ãùè£÷2¤7¿ÿ¾‡Þ½;ö_²²2uí²²2xð ¹\ŽB!'33ƒW³xñ|ìABÂ=½ú‘›“‹¨@„0MHnN.i,ýt)Í´iä7¯ß$È'ˆ°ÿ†‘_!ß—›ÇƒäHŠ$”––’ö0 aš>û°åç-Ïü¼ªBAÁ#D¢RSS((xDAA>«W/ÇÉI›NÿèQ>ÞÞN„…ý—›7¯ëÚ‰D¿nø•FvÈÎÌFR$!È'ˆ—ýÈ¥s—tí$E9ñxlH˜NìXÞûÓ&L`êØ©|»ø[úuíGnÎ?×Dú;ɤdggUâÄÞ½;ðók̵kWËeôï—_~ʱcuížÅ‰””DæÎIÿþ!<¸—  æœ={ªJ}€ NˆjÈFRYÂÊ•ßÒ°¡6‹?#Cˆ;aaÿåΛÿøïÖè Öàþ=±´Ôn=ÞŽ½O‹fMÊdX˜WÔ[ôÍ"ÜÜÝhÕºU%}}`ܸa ÞŸµkW²bÅ7”–ª0`ˆî~DÄ%ºwïEvv–ζ¸¸þóŸÑœ9óÛ¶m"))‘U«–1uê Û?nYõ)ÏObÞó:/>ý‚-·˜ÈÛÞÖÝ?wê}ö%ýa:uëååä1´ïP¢"¢øé‡Ÿˆø|Îç”(JØùÛNš·l®W~üñ;zõêćNãðáýœ:uœwß©»üø!Þ|s8ÉɉØÛWhÐôìÙ¸¸X–,ùµZÍìÙïpìØA ÂǰµÕïêlÏö=t èÆûÿyŸc±cËÆO¥•6…üꥫu¢P\ˆ•µ•®Ýøaã9æ<˾XF¡¸¥ –rõâUÐÀÀ¡é7¸Ÿ^ý¸rå;·aÚ´ ;v5kV0dÈ\\´  ÷qrrÆÄÄ£'b çÏŸÅÞ½ÛùñÇï ÓX³f9……bFŒ‹P˜Îüù‹Ÿ÷‘U‚Ô”T‚šñÎØw8vð_|ú=ûö¤I³&äçå£+p«ïF©ª"nçÇïdݪuü¼ægîÅÞcû–í\½tU»KQZ¦×Њ~~ÞLž<šcÇ2{ö4ڵ넿;@;‹ÃÏÏÉb•{ölgéÒOøí·0®]»Â‰‡9|øùù¹4mêí[Ѻ]¯ªÂ®m»èXÁ‰[w2aê¬Â•‹Whß©=b±¸'ÆËųY¶tE…E,^°{{{Bû„êž¹qí#ÇŽ$?7ŸBqÕJË\ºtžÎ[ë8±víJ†‰³³–÷ïÇáì슱qeNÌ;“}ûvòÓOß“‘‘ÎêÕß#‘3xðpÝ3¥~ý†Uj9R’Rh×¢ ç|®—Ï{Y˜˜˜2yrEˆ?þ8 AÃxð ;;ûüwk´Ðè“pwuâÍ7z‘•Ëžßãè ô¾ûâ;Ôej¾\þ%¦¦¦Hdú-*}œðð_Y¸ð+½úáèÇ/ÛÑ¥Ÿ? O/OÆMGrB2aëÂh õ#!‰Ð&L™À†ß6°ó·˜˜šp=ò:Çãë_ëÓ <=½Ø¾ýw,,žÖrrrf̘‰˜˜˜²lÙRúöÕ–™IJJ`ÈkK}ñ…V7"â2%% üüôçÀcØÙÛ±iç&lêÙ0zÂèJ÷¬¬¬5~müÛ00t ã&´ýѱKGÆLÒîTù´ô!S˜ÉÂÿ[Èø)ãéØMï~²~ýV=zB¥{€#Æ0jÔxlm ùè#­°hRR^^MX°@[‚¦]»NôîÝŸÜÜl½h`øùóó¶Ÿ12~zX+çDÂý6­ß„6Æ8)!‰!º>ùyÛÏz±õEhÜØ›íÛ>sCÀÙÙ…1c&bddÄòå_Ó§¶jARRÇ¿MçÎ!|ùår®\¹øÔßÐìííùâû¥ ß*¯mÚøÓ®]'vîÜÊÞ½;˜9óŸ 0×è,ЦÈ%lÞ¾Ÿë7cðk¥»pïAJKKùeí/ˆEúÕö²´´ÂÅE›^=fÌnÞ¼Ž¡¡‘n0¹q#Š+¾ÅÊÊZ·²hÐÀ+++>ýôcV¯þèèkŒ7ŒõëbÁ‚Ù˜˜˜Ð¨‘~ÅÛÌ-Ìq«¯õcÎÌ99pÝJ059•ï¿ü±HL«ÖÚÿ}]›º4kÞŒo—|ËüÙóÉÊÌ¢GûLû`ã&£™O3Z¶Öo ½©©™îÿ¼jÕ26lø €:u´»nb±ˆo¾YLlìm:wîªkÚ›ÿþw%&Œ@­VÓºµ'"Qß~»„[·¢u_jú‚‰‰ ®î®³;|7‹æ.ÀºŽ5i±”Uß®âÒùKw¯(Ó­g7Â7‡3aÄ Å…ô îG:u044$%1Ÿú•˜022ÂÑÑ K®\¹À”)Ú‰†¥¥†††( 6lXÍ‘#¿R±£Ê‘#¿3a„Â4&OÍÕ«—ذá'þïÿ>Ñ« Ñ°³·Ã¦ž ©)©ôÑJØ[˜cllLii)¿múðÍátëY1i îÌ¥ó—˜8b"÷bï±pÎBþ8ú-|[°õ—­të¥ÿ –M=Q*•´i£Õ255ÃÔÔ€½{wòßÿ®$4´·®MçÎ]‰½Í¤I#‰ˆ¸Ìúõ?ñÓOßóÉ'rîÜ)ºv ýËX¡—E9'ŒŒØùÛN?ÞÅ|’+¿]Éå —éÒ­‹®]÷^ÝÙöë6&Ž˜HQa}:÷!=-cccÌ-´šSÝzvcÇÖxzybkWµ"ÏFFF89¹`aaÁ¥Kçxç±ÀÓœ8zô ]»>ɉ>|€‰G‘‘ΤI£ˆŒ¼‚¡¡a%qT Ë¿Œ{000ÀÎÁNw¢QSP§NòòrY¶l ‰‰ñ´oßéÿ½/4ú<¬Þ¸•1߯?´{¥ë’ÜL5.Õäþª  6+Ä¢TÝ_%JKJ eÔµ÷¨nS^¢ÛØ>.¹Q“Q˜­£þp_5 òîbëåþ×þËQò[;ßê6ã¥!ÊI ®—ƒÞ>_5^!J™”’\5Öõj6Õê2Ü9Œ±±¢?køjùº¿¯ƒÿH„¦+aUGõö×x×x×xר}ˆ»ŸÈåkÏx¯÷œºgN°Î_ºFdôíWgY5ÀØÈfT.î¬HPjJ126{NËš•R†ÆHŽJ.«nS^ e¥¥(‹•ðuFþMPÈŠžzßj"Å… RªÛŒ—†¢XLaFu[ñòPH )Tׂþ@¦=ÅdU^!¥J%¥ êÒˆõÔ5AméÒþ™÷ŸWÐü™¬àNtíÜîÕYW øeë.4cê»VŽ+)Èͨ%e Q›9PÇÖá¯þCUR‚Xõûš}Ô )RàêÚ¬ºÍxidJcq­ ý¡‘âêZ J)îáZű?ú@v™G—¦µ TNíCÊÌì©[…åÖ²bddc[¯f¿¿ju‰âÿ}‘óÌ –@ ¨1B£qñIx5j€‰‰ qñI(•*|š6F˜™ ÈËË'11š4i‚@ @€@o™-†¸°af&-}|r÷Þ=êÖ©CËæ/Žy)’Hˆ¹{kkk|[´Ðú!(ŒÓ?är9qqqøûû#—˹q㦦¦ü½ ®¤¤$¬¬¬°«g£ó¥: V«‰ˆŠ¢c»vh4®DF‚@@§v½À¸‰F£ÁÝ͆õëWkDEEáëë‹©©)ׯ_§¤¤ÌÌ^¼ÒŽŽŽF¡Pжm[ÌÍÍ«µ?îܽKÃúõ©[§1wïR$‘вysê>@}Êùü‰#Õ× ØØØàèèHBByyyx{{ãèøâ-))‰œœ7nŒ³³sµ÷ÇÃôt ¨ïæFZz:éÔww×~Ò32HKOŠúì“'9…R©$ @´ÿ<äææ"‹iÒ¤ yyy$$$`ooOÓ¦M«e ¹s÷. PÇÚš;wï"ùœ(,*"-=V-Zp÷Þ=\]\¨gc£—1¤â3þý»–eeeDݸAûÀ@ÊÊʈˆŠÂÀÀ€AAZûŸ³Kõ"ÔèhÃGN2ý£ÏÉ/sñja¿í&=#‹ˆ'ÎI·lÙ‚T*eĈ<|øP¯ö8}š˜»w9sáœ9Ãõ[·˜¿x1³æÍàÙ³‰½wý‡#̬=uîá»w“›Kn^'Ïžeß¡Cdåä0{Þ<"¢¢ôêÇ¥K—ˆ‰‰áСC\¾|™›7oòÅ_0bÄ-ZÄÉ“'9sæ qqqºv„‡‡“œœŒT*åÀ\½z•±cÇrðàÁg~^UáVL 1wï²cï^nÅÄpçî]V¬YCp?­þÓºM›Ø¼c×oÞ¬ô?޹{—ðÝ»¹ Àö={ˆ¹{—w?üCC½í&&&ríÚ5öíÛGLL ‘‘‘lܸ‘ž={’››Ëï¿ÿÎ×_MBB'OžÔµKII!<<œ«W¯pðàAvíÚÅ’%KHNNæøñãzõ#3;[ÇržìÜ·Á£Fqçî]¢nÜ`æÜ¹dçæ²÷‰w%'/ðÝ»9yö,§ÏŸ''7cccvíßÏêõêGaa¡Žå<9vì£GæÄ‰…B† †L&ã×_Õµ“J¥„‡‡ëxÉ•+W8p b±˜7ÞxC¯~”••é¸QΓˑ‘Lž9“Íáᔕ•Ñ¡W/ŒŒŒøiýúJmÃ÷ì!|÷nÔj5±qqÜŽ¥sŸ> Ð¥O”ʪ="JHH¨Ä‰k×®±aÃzôèA~~>àÛo¿%>>¾'’““+qâ÷ßçÚµkÌž=›¥K—0lØ0²²²ô2†ddeqöâÅJcÇŽ½{8j1qqD^¿Î¬yóÈÊÉaÿ¡Cºv9¹¹„ïÞÍ©sç-'¢oÝâÓ/¾`úG°÷àA†ŒCÔUêh9qøðabbbªü³^J”J¾ûñGz Àë׳sï^"®_©ÿWž`=)4*.”“ûqa¾-+ŽifÍšÅñãÇ™4innú­Hÿù×_3îÝwIMK#ùÁìíì2`€î~fV±÷îѸQ#\œ¸ÉÒeËhÖ¤ §ÎC*“‘’šÊ„Ñ£¨Õjlô\þcõêÕ 4ˆ„„ÒÓÓL˜0¡ÂÌL©[·.MšhÅÓÒÒ3f ;v •JÅýû÷‰DDFFÒ²¥~%vìÝKÈo{ï9¹¹<*(`æ»ïVø‘•EºPˆJ©Ä¿MÝõ={Ò-8˜CÇk{÷ÈÉËcøàÁ,_³†„¤$½úqúôiBCC¹pá999ddd0eʬ¬´²ùùù…B=zDÇŽu툗—‘‘‘ˆÅbÈÊÊB(’››[éY}àNl,ý‡g÷ääåñàáCF ‚«‹  Ý•ff’š–F×ÎuíþóÞ{˜šš’š–FšPȃ‡¸:;s;6–ÿ›1C¯~dee1dÈÖ¬YCNN ôíÛ—fÍ´ßC%%%dddC=tíæÎKnn.2™ŒØØX„B!R©”zõêEƒ ôê‡J¥bÔþï¾"'/ظ8:µkG;ÿŠº´™YY\¹v~½zé®}ÿãDß¼‰••QQäæç““›K“ƹzíYYÏQyU8uê¡¡¡\¼xQlj©S§ê$ òòò …СC]»ФI"""(,,$>>///úôéSásf&¾¾¾Èd2 E•úq;&†~o½ÅÞƒÉÉË#5-‘C‡âúx|(çÄÃôt‚;UÈLœ>sssR>$=#ƒ”ÔTlêÖeøã ÀÐiX¿~•Ú_ŽŒŒ Þ|óM~ùå½|ÞËÂÔÄ„÷&OÖýž™•Ejz:m|gðþƒ]¸=Áú3<=êSϦ.+ÖnÒ]{ûí· dÆŒzÑÿø3Ö._Τ1cè׫ŽöO+¾5x0ë6mâÒãT¹ðe3ooºt耓ƒ}zô M(¤Oh(ÆÆÆ¤ õHýå—_òÑGL£Fžºß»wo._¾Ì¶mÛíÑ›J¥ÂÃÃ>}ú`iiɰaÃX·n656V·jÔ'>ž1ƒ/>ý”¶­[ë¶ÍŸD‡  ŠŠ‹ùê‡tפ2N 8@ÀØ‘#)))¡eóæ´iÕŠÓçÏëÓFÍÊ•+ ¨4`”£E‹ØÚÚòñÇyR©{{{ €……o¾ù&ÖÖÖ4kÖ fÏž­OîØ‘?þH‡À@zu{Z÷©¾›~¾¾L~ÿ}Ý5©LF=z‡†bgkK¯îÝqqv&úÖ-êX[ãÝX¿:qžžž„‡‡Ì›o¾ùÔýºuë2xð`†ª»&•J©S§ݺuÃÝÝŽ;âââBjj*S¦L!""BŸ.Úæàöí„víÊØ‘#Ÿº/øàÝwéþÄBQ*“aiiIÇ  ¼7Æ·E ü|}YýÝw|ôþûU®UŽ1cưbÅ üýýŸÉ‰–-[bccÜ9s*l̉bnnÎСCu •êBHçÎlXµŠöô yê~wwZ·lÉ”™U(Ê9Ñ'4Ûzõèг““­~^^^¬\¹²ZmxtéЬìl–¯^ ðN* CBBÕ«cŠ£]=§/\e@ŸîÈåU;SU¸ŸLçö¸:;r?!q¡„Þ¡]HÏÈÂÏϘ¸ ˆŽŽÖ®(Õ*Œ1¨Tf ªG§öíq°·gÑ7ßàéቱ1"±˜ݺaýxÅW>x›››cmeч‰¼~]W¨t]X&&&ìÚ¿;[[Þ<##4FF˜š?­€ýª‘€5bõêÕàââBRRƒÆÞÞž‹/bjjÊØ±c©S§&&&ˆÅb¢££IOOÇËË‹yóæ±bÅ :tè€D"!88˜ÆžP‰±´¨zM™‡éé8:8вysvíÛGZz:-||ˆŒŽfÌðḹ¸pöâEdr9SÆÇî±>ŒF£ávl,Q7nЭKƽó£‡gûž=H¥R&‡ƒ½=…k›ªO:ÈÎÎÆÈȈöíÛsæÌΟ?O‡ˆŽŽæ7Þ aÆDGGSPPÀÛo¿­Û 111áúõëDDDÐ¥KæÎËo¼Arr2ùùùŒ9$¹X[Vý.©H,¦°¨ˆÐ®]‰‰‹csx8=BBˆ½wAAx5nLòƒ32Ô¯>M›PÇÊŠ«×®q9"‚ö¬Z»g''Nœ>ÍôÉ“u«}‰¬ë* à-‡\.'%%…Aƒ‘••ÅâÅ‹4h‰‰‰4iÒ„æÍ›óèÑ# %0P[ÃÓÁÁ‹/ráÂصkjµâãã ¡}ûöHDyX[¼8ÖæU@­Vuã£ßz‹ÒÒR&NŸÎÛÇ“&bog‡o‹¨ÕjnÇÆÒ. €n]´‚å¼9ù2¾-ZpéêUî'&råÚ5nܾM@›6„víŠTV„¥­c•Äü”s¢]»vœ>}š‹/Ò¾}{®_¿Î€ðððàúõë:NÔ¼“SΉÈÈH:wîÌœ9sèÔ©r¹µZM§Nt1^^^ôïߟ2•¢ÊÆ‘XL‘DBh׮܎eëÎ:~tj×/OO’RRff2ø NX[Yq5*Š+‘‘´ dÅš5¸¹hKsóòèª%»Ÿ??\QªJÐafþê'”2™ŒЯoTÒbÌõ0N½,ÊÊʸyç#‡ÅÅɉ³—.¡T©˜p˜±“Ærêø)î% AC÷^ÝñiñâÁ@£ÑpöäYœœhÚÔKOV?ÛŽ²²26lø‰éÓgy…èèH4 lOPÐÓ™HObíÚ•€†¶mƒ^ªâú«€Z­fËÏ[:j(‡BΞÔjD5mÞ”ÐÞ¡Ïm§ÑhضiE…EŒ?Šz¶õôeò3¡V«Ù¿:tF­Vsðà^\\ÜxóÍáÏm—••Áþý»prrfèÐQz±÷yÐh4œ[P«ÕlÞ¸™·F¿EZjçN Y‹ftïÕý¹í4 ÷ãî#LÒ³oOâãâ9}â4^M¼èÙOÿcˆZ­fß¾têLii)‡íÀÕÕÁƒßzn;FCf¦ÈÈ+ 2µZÍ¡Cûðó  A=Y_3 Ñh())aË–L:ƒ+W.pëV4 tèЙ6mÚÿû.²þu ^!;ͪõ›iÐOúxzÔgþ’ï±­W‘uãÚ ½5ˆ¡}†Ò¤Yì¬Ìõfßš5Ëqrr¡°PLI‰__?öïßERRƒ ãÍ7‡“””ÀLÕ  …œÍ›F&“Ü[[;Ž?Œ»{}ÚµëÄâÅ pqq¥­¿xà ÇÄÔ„Ô”TÜÜÝpq#5¢ IDATuáÒùKìݱ—±“ÆÒ£Oüü=x´n0/U•²}ËvD"Í[6' ]kW®eÁâü¾çwÖ,_ÃÛßÖëëØ±ƒH¥RnÞŒ¢K—î… ç0}úlÚµëH``{zöìPirµgÏvrs³qppbذQ,Xð!¡¡½Ø·o7þ†‡‡~e".Gp/Ô”T:véHaa!Òb) ç,¤gßžø´ôÁ§¥†OÀÙÕY×îô‰Óܽs›z6Œ?Š߬ÀÊÊŠ›×o2ç³9D_‹¦GŸ/øäW‹øø{œ:u ¥RI«V­IM}€=K–,`ݺÍtèÐ…éÓg³páÿUª¼y3гgOaaaÉøñSøí·ÿÇÞy‡Eu|oü³Ôé½(bDÄÖX°b5£QcÑDK4&1&1&–(¶¨ÑÄì±Å.ņ"ˆé HÝÆ²í÷Çê*AÍ7Æ]ƒ?ßçññrïœÝ9wî»3wæÌ{ÖÒ®]ãÆMáóÏg!‰ æ@^nkV¬ÁÙÅïZÞ\ºp‰à¦Á|1û ÆNË ÿAŒ›2ŽÕËVséÂ%Ý+-5­¿lÅÔÔ”Qïâàރ̚ͅ>‹UW1rðHb“b æ‡B¡`Μ jŒ££#ÇŽ&<¼? Σe˶4kʸqS8th+W.Õ °Š‹‹X±B»̘‰\¼¨Ý=tè›Ü½+ÁÃʬ,ý¶É¹Sç¸uã©·RiÕ¶¥¥¥ˆJEÌž>›®=»âè ?#úÀ½º»ÎîèÁ£\»z ;;†Œ·_~KÛömY·r S·N ̶}ÛØs µêÖÂÍ^;:¯_OâèÑ?ôHOOÃÞÞyófµ‰VŒ7…O?ýÅcËn/ÆqüøQªU³âí·ßeÆ5Ô¯ÀÞ½»HH¸Dß¾ƒØ·ïwæÏÿ”¯¿þAï¬Ü{¹¬[¹Ž:µ¼èÚ¶×ß¼d(åüôÓ,Z4ŸÑ£'вe[š6 ¡{÷7hÙR»[ÖÈøŸÏ¼Vé¹ÚðîaT³|´“#þâ$)íZ=JsÖ-Œ9Óçðåâ/ñ®ímÐúíÚµ•]»¶Ò AAAMð÷¤gÏŠ9?ü°ˆþý‡àá¡B=>–èèíŒñ.r¹[‚‚Ó«W_”Jjµ++ÃNM9x„UKWÑ4¤)õêáSχÁoWœ!X·r-Û¶¤ž¿V\1';‡…óòî¸w˜››Ò2„¤«Z¥wÿÏN ¤ÄÆžeÁ‚Ù´nÝoïÚx{×fô芢”Û·oÁۻ͚=Jêùî»C3f–žµ6mÚáåU‹)S>æË/çðë¯ êGÒÕ$Ì^@½€zxÕòÂÇχšÕ£­ÐÇG&“ѵ×#ÁÄ)c¦Ð»_oª{U§¼¼œf¡ÍZ¹qý›ÞŒµµaŸ«ÌÌt-ú[¼¼jDŸ>qs{´£ôÚµ+\¼Ïðá#uçfÍšNÓ¦!4jÔ‰DL``#ìííIIIæÌ™DFŽyÒ×é ÅEÅ,ùz b‘¯Z^4 mJX×0|ëùêÊäÞËeÓºM|0ãѬÏ×ó¿ÆÃÓƒ;PXXˆo=_ª×¬Žµ5ד®ãâjØW*•Š+¾çÆd¼¼jѺu;BBZÒ¤Is]µZÍ'ŸLåË/ëÎýôÓh4ú÷L^^^^Þx{×bÒ¤é¬Zµ•J¥÷º_»z³àßÀ_lj·G½­øóðŸ”ËËéÚã'&½7‰7¼Iõ8Ô8ˆ]ž>Ã¥Odd¤±hÑ|ìììñòªEƒAôí;7·GƒÂ«W¸|ùÆEèÎ}úé4š7oAÆÁˆÅb6lDýú 4ÃÕ«W_ªW7Ìîà¢Â"–,\B~Þ}ƒ|ß¿…™™9#GŽ­pî·ß6âççOpðÿ–þíI¨Ò¬¿âäÙxš7nˆÅc[)‡÷Nä˜HÚwª,bhLž<–H¥âJ?4÷îÝåÖ­´jÕ¶’J¥B*• R©HÄ;v/¯Z˜˜˜pÿ~¾¡ª¯Ãèñ£iÖ™T¦C}‘HÄÙ“géܽs%;ZƒX$F­Q#*qåòr²rHJL"þœaSþ I·n½‘ËËË宩Õj~ÿ}}û>y)ª´´FCii gÏž$;; ??nÞL1DÕ+ [¯n :###Êž Y·÷~Ú…µÓ ‡X$F­Vëþ÷­ç‹¢–6Å @ãÆÍ9r,ÖÖ6Hž°ó÷øñ#ãèXY¤W"‘ T*‘JµÿŸ>†àà¦F$&^& èèí7¥G7ѨÊјÈ1µÐÿ’§Z­¦ž=\\]¸w+k+\\]0šÓ,´R‰‰DBßA}u6VÖVxV÷ä䱓øÖ÷ÅÑÉ‘SÇN1rìHšµh†“³ot|WWg¥ „–vñÃÛ»65jÔ$99…BA5Ñh4´iÓFÃÉ•Þd7nΡCûðô¬Aݺ¾ìÝ»‹ÈȱÄÄœŒÿ!fffÈÊr±°Ó¿WwW|ü|H¿“NÞ½<|êù V« i‚¹ÐœëI×1¬B¢ç&Í›ðçá?©fUÀ @Ž>FxÿpÄ"1……¼ÿÁûØØÚ +aQMÿ‚©;;{ƒÈÏÏåúõ$¡Ñ¨ jŒ­­))Iôï?[ÛG÷µI“Μ9R© yóÄÅÅÍ̓ÜÜ»ôí;{{mЮLš…ƒþ:5 B¡¦¡M‹Åœ;}Žf¡Í´ƒ×ú¾¸º¹’’”BÏ>=qu{tß$¤ qç⸟wŸ7:¾AbB"N4oÑœ˜³1Œ™4†5k +*ÁÂRÿÁúµ|Z·~µZÍþýÑ´nÝF—W-¼¼¼III",¬+5k>ÊæÐ¤I—/_àöí›tîÜ;wR‘JÅ…üñÇ>FŽ‹Ÿ_}Ê$…ªé%ñ¯F£ÁÍÃí'róðñ{ŒæZN ޹ðÑoÿCNXY[Ñ ¨Ç# 0¡Pˆ³«3õüëѤyŽ9N÷ðî´hÓ…Lª·>DË 4"//—””dƒP«µœ°±±%%%‰†TâÄéÓÇQ©T4kÖ‚ØØ3¸»{bkkµµ5AAío`ƒAØÛ; TÈôÖ‡h4,,,nÜ•Dƒ¹…þyø" hÕª-*•Šôô4FŒÐ¦ÏÑh4H ï`fútqÙÿwB£Ã"†Ò¤cÅ©^Q^î+±¤ìÚE(É’bû ì",,JÀÁÛûeWã_£ðf6.†_Â}Ñ(Ì¿†Cݪ½{  05dž/»ÿE¹7°­[õw¾îCþw”K%ÈóÔX¿»soÁÊêÉŠôÿHhôfj:œÔk…õ;é†Ï×÷¯ñ¯ñ¯ñ¯OÙEh!4'¼»ávéõ}ë`!0Fš•Wá|¹¨ 2”¯€HœÆTÒ*.à¦TP.*AªþïË‚ü2q¥ç­*B!.DJòˮƿ†BR„4«jó@!!U½ íQ€,[£—\„†Ä«Õ‡ ×>DY.G!– UvgFó|qyO`U÷p«òK„gã.âëß÷ê>οJy¤^™\„ªW#¡¦ˆJÏ[U„FV†»Ë+ÐùªW£=ʸ;Výö¸§QàâY÷u.Âÿ^ç"üß¡V«—þóìUZ+ùÆm¶GäýQÃØ¼m7´oª“µß¼y3éééLž<ù¥Õ ¸¤„?ŽåÆíÛÌš6‡ñ"`ÊØ±ØØ<=ðÈñ㜎‰†ÉãÆaò[N&“qüøq8À?üÀùóçÙµk†É“'ãâòl2•——³páBZ´hÁm /@øjµšsqq,ŠbËš5¤gfòãÊ•h€ÉcÇRÃóÙ v‡¼û.Mƒƒ iÒ„V¡¡Ï,«o\¸påË—³páBÔj5‹/F 0`À‚ƒƒŸj—ŸŸÏ÷ßk5ŒÂÃÃiÞ¼ùSˉÉɬٰÑx¸¹±xùr@‹æÍéÜáé[ç³ïÞeë®]ˆÄb ó?ùÄp•~n޼ɦM›èر#Í›7×µGõêÕ6lØSíär9ßÿ=ÞyçÃUú ÈÈÊbÛï¿SËË‹>½ziÛãAú”qãžiûÃO?¡T©Ðh4[V8þ<Ë—/ç›o¾A¡PèžóAƒѨQ£§Úåçç³gϤR)ãÇgË–-¤¥¥iý˜2ÅPÕ×!1)‰Õ7262W¾_¾Z…„ЩýÓwÇ—ŠD:vŒ«×®ñÙÌ™$¥¤°nÓ&† DPƒªŸýEB©Rq&&†µ7òóO?q+5•Uë×kû´qãpwuçØœQ¥çjh¥ÊÊäÜIË$åæJÅbâ.\Ñ•ñ÷÷§OŸ>DGGS\lØY¹‘&0yÆ &}ô£&Näʵkäæåqâôi¢@¥VsìäI²îÞ /?Ÿ±|ÀÌyóX¿y3—¯\á½É“ñpw§Q` 'Ïœ!=óŸKöÿ|úé§Lž<™2{ölþøãÄb1û÷ïàÈ‘#qéÒ%’“µK‰„ &°`Á¾üòKrsséÝ»7«W¯æüù󤦦ÔeQQLž1ƒ6ݺ±bÍÖoÞŒF£aÛï¿p.>žô¬,ÒÒÓ‰=^g7yÆ /[Ƥ?F­VÓ²sg¢6làö;¸»ºÚ¬™Aýعs'£F¢cÇŽDEEñÅ_ سg2™ŒÄÄD(,,äèÑ£:»… òùçŸ3~üxÄb1ýúõcõêÕ¤¥¥1eÊìí «â~..ŽAô:”¨ ˜8}:àØÉ“Ü/( #+‹ã§N¡T©Ø}à€Înï¿2ã³ÏûÁäæå1aÚ4²sr˜2nwÒÒ¨åe­Ÿ‡HKK£[·n¼ýöÛDEE1`€V* 66–ôôtŠ‹‹Ùµk–––üúë¯:»Ã‡3qâDFMjj*_|ñ›7ofÛ¶mXYYñË/¿Ô¹\N«Î™0mQ6кK@ÛÁ'¥¤ ÑhX»q#n..¬Ù¸Qg—˜”ÄÈ xwâDY·i?­[ÇÔO?eüèÑÌøì³JÒ./;vì`ôèÑtèШ¨(¾úê+»wïÖqâÊ•+pìØ1ÝW_}Å‚ tœèÛ·/ÙÙÙ¤§§«y={6ýúõcýúõdddèÕ³±±¼É›C†µa“>úŽž8ÁýÂB2²²8qæ …‚=êì~Þ¼™™óæi9‘ŸÏû~ÈùK—¸_PÀ±“ÚxjpâÌróôÆpçκwïÎìÙ³õþ]/ *¥’{öp:&†ìœn¦¦rþÒ¥çþÌ*=ƒUÏ·ffÚm“…ÅX[YâíU´Œ,¬Dû1mÚ4¶lÙ‚»»;…y† ~¿–œLÇ7Þ`êøñ¨5l¬¬ËåºÎ"=#ƒ.:ðç©S””h5g’RRHº~ÿÿŽH,ÆÚÊŠ/fÏÆÑÁWgg–®ZEQq1ðô´:/·nÝÂÌÌŒeË–abb‚P($+ëÑ}LOO§~ýú’›› hßwïÞMjj*8::²zõj8€¿¿?çÏkÕž ‰Ììl®$&²uýz¬,-u¨:?22ðöòB¥T’þØé’+P’›—‡@ `ÇÆX…tëØ‘¥QQÜIOgæÔ©ó#//øøx¶oߎ««+jµ[[[ÌÌ´1!÷îÝÃÞÞ___îܹ£³ûé§Ÿ8zô(VVV…BV¬XÁþýûÙ¾};3fÌ M›6øønI­¤´”¸ رq#>uêЯgO°¶²´3¾€†lزEg·nÓ&fMŸNPƒXU«ÆÜ3°ªV¸ ¸yë?-^ü´¯Ô ÊÊʈeçÎ4iÒ„ððp\\\prrÒ]/))¡yóæDE=ÒÛ¼y3mÚ´¡oß¾˜™™1nÜ8 ˜?>¡¡¡ºCA£Ñ{þ<MžLû¶méÙ¥ î®®xzxè®§geѶU+FOš¤³Û±{7žîîL›8€:ÞÞhwWW–EEDh477—øøx¶mÛöDNܽ{üüüt++V¬àĉXZZ" ùé§ŸpppàêÕ«í3wá;6l n:(zõÂÁÞ^lj¢âbŒŒŒhÀæmÛtvk7mâ³™3 ô÷ÇÊÊŠy3gbee…écKõýü°{Æ*É‹„LB–©S&äûþ-LŒiÖ¸±îïôŒ j{{SX\LæÃ¾î9’=Wé¬ÇabbŒJ­¦¼¼SÓGUß¾}™8q" …¢Bº C¡g×®8ØÛ³þ—_ÈÌήpÍÌÌ éA¼‡b|t‹ÎÄİ÷àA2²²X¿y3›¶nåÒ•+ Ñ`b á¾ÇÑ­[7œÙµkW¯^­pÍÌÌŒ²²2T*&mbb‚……—/_fÓ¦M”––²dÉ„B!III¤¤¤pñâEƒûÑ©}{Ü]]9vê§bb*ùQ^^޼¼\÷à à`oÏÛ·Y¾f †ß|ÃÆß~cÁ·ßV*k(„„„P·n]Ø»wo…k¦¦¦¨T*äryE?¸sç«W¯F,³lÙ2”J%ÞÞÞøùùgh7ð­[—ÆAAdegóËÖ­®=ä„L&«ÔYÙÙlüõWróóÙ´u+wÒÓù}ï^ºuî\aÐl(8;;Ó®];¤R)Ë—/¯pÍÈÈccc$I¥öÈÍÍå·ß~#55•½{÷rùòå'–5LLLèݽ;B!_|óM¥ë榦ˆÄâJíQPXÈïûöqõÚ5N;ÇŸ§Nq1!naa8:8èEûê¯ ¥nݺ\¾|™}ûöU¸fjjŠR©¤¬¬ì©œH$üøã•V:HKKÃÜÜÓgè ½(øùøDFV¿<6ˆí@@£Ñ û«8±á×_ÉËÏgão¿‘öØ@òeÀÅÅ…V­^nŽÖç…™™òòr …î>?m•õ©ãw O|êxcgcµµoöãÒ•$‚ƒƒéÞ²²2 ©Q£*E¦ab¢¢Ô÷õ¥¾ŸŸnÐTÃÓWgg‚ƒ‚¨îáA§ví((( ¼{wBšjåø«{xPß×—R‘ˆömÛbii‰……-š5#-#ƒî;Ó*4”r…‰ æOÖåx‘¨]»6º1wwwœiÒ¤ µjÕ¢mÛ¶H¥RZ´hA÷îݰ±±¡M›6äääСClll011¡C‡4kÖŒf͚ѥK¬­ªQVZL5KýkÊT÷ð Ð߇KaNŽŽ8:8Ьqc|êÔ!´iSÔj5>uë2lУ„Ú}zöäVj*íZ·ÆùÁ¬Äþý162¢vÍšŒxë-¢2Övúètvv&((WWmpª­­-®®®áççGPPööö8::©ëzôèAvv6Mš4Áû^W×®]ñôôÄÎÎŽwß}333D…yXW³}Ú׿0ØØØܰ!ÕÌXZZRÝÃz¾¾øûùá[·.~uë";r$–ÃÚµ£°¨Ÿ:uhP_›X¼º‡.Î΄µk§KŸ%’–bm€M B¡°Â=533ÃÛÛ›Zµj@5hÕªEEELžø[[[DEùX[êæA è¸ððoŸ:uðtw'Ðß'GGÂ{ôàvj*Ó'MÂñ~ÒÃß. ¡mµY)íí äÖíÛL0WÄ’ª9¸èeá_9agg§ãD½zõhÔH›NÉÉÉ©'²²²hÚ´)5kÖ V­Z¸¹¹Ñ¨Q#ÜÜÜèÞ½;999Œ1d’R½õ!¶8ñpÖ°ÚNÔ÷õ¥¾¯/~>>øÔ©ƒ‘‘cGŽÄâ!'Ú·§ °Ÿ:uxŒ®..éâI}ëÖÅßÏj––º>DhaõÂýxȉêžî($b, ÐOý[Ó48˜ºµkÓ¢Y3”J%þõêñVß¾h4 sžùÒóÿNh4""‚6{T8ÿ*íyevf½»sŠrðð®ÿ²«ñ¯‘só*.†cÒrò3ñ¨[õƒysR“ðp|ö†‹ª€{¹é¸Ô x½‹ð?‚×»ÿw¨Õ*nÜŒ1B£1ç/³sÏ¡çYrüÏ ;ç A©¨¸,¨R)Qj4(•ú ºÔ7T*%j¥¢’U JE9*•ªÊ·€Z¥ªòíÚ“W¢=Ô¯H{¼*üxÐU}€õ*õ!*¥‘^9¢T*´÷«Šß+µZ…à92¡MŸ¾µ»*àÔ¹x(¸Wp§Ây™¨ v˜È«ðèPÈå¨Ë‹‘¨+'–­JP)•ÈËÊQ–VNô[Õ –•TzÞª"ÄeeÜ{Ú£LúŠ´G)÷Jõ¿d«oHÊ( Ó12@<–>ñªõ!Ruå„Ò/ Êr9 ™¹QÕþ=Q?˜¡ú§xª’{AaÑ¿®ÔËı“çV§6Önn/ ^ç‘úA)—#K±v¨úKR AQåç­ B!R½í¡½í!•¿í¡T”aíZõs¾îCþw”K%ÈÕ¯F.²¢›ÿØ®J?éÑû3(b¹y÷IMËdÆg‹øü›åúó´®Ìœæðåœ/‰x+‚⢗W–™™ÎÌ™0jÔP–.ý–Y³>$"b99Ï–XµêGfΜBDÄ[df¾ÜÝ!ÅEÅ|9÷Kº¿¡ hßùÛN&žLÄ ®']ÿ[{±XÌ žƒØ¶yÛß–Õ'T*Ë–}G£FÚ ÞØØ3Œ9˜ˆˆAÄÇÇü5×eéÒo‰‰9£ïªþ-6¬Þ@hƒPîåÜ#91™ˆAL5‘èÑÏ´»‘|ƒˆAL3…í›·¨¶OÇ®][éܹ%/Æ‘••ADÄ >ùd*+V<[²àîÝl–/_ÌìÙÓ>¼¯jût9x„~]û±gçJŠKˆÁWŸ}ŧ~úL;±HLä[‘,ú|MüÈ@µ}:bcÏðÎ;Y¹òGÔj5o±lÙb"#ßú[ÛÑ£‡±té·DF¾epI€Ÿ£~&4 ”¼{y$]M"bPÞÀž{ži—’”Âä÷&3cÊ æ~<—/ç|Iä HŠ^ÂÄÃοѩS .]:Off:ƒ˜9ó~úé‡gÚåäd1kÖ4FŒÀž=;éÖí Ξ­Úy†õòr9K–,"$$€“'1zô0""qéÒù¿±~:ªô«w÷0D *µšÔ4­n‘·—'§Ï=º!s¿šK˶-Q”~ 8,,”^½ÚóÞ{Ã6¬/÷ïçÖ•¼<­VÔ©SÒ¤Iw¸sç6©©·èÑ£Ÿ~ú!K—~Ë… qŒÑŸQ£ÆÚš¼¼\d2Ãæí‹|+’nm»Ñ³}O¦OœÎ™ãg0dw³µâ¨çNçžJ…’‹ñZé…¢Â"º´îÂÂy ™1ewsî†R©dùâ帺¹"ëojúI˜;÷c:wnIãÆ>,Yò5kÖ,gÔ¨ñºk\Ü9ÜÜÜquuãèÑ?tv:µ`Ù²ïxçA¨Õj‚‚j³|ùb!‹ñõ­gP?Öþ´–– [ÒÔ¯)Ë/gîGs>r8ÅEŨT*’“162¦®o]þØûÈ‘ƒGòù¬ÏygÐ;”—нmwvïØ\.çƒ> Ü ~9rÀ@oÚ¶ fùòÅŒ5Œ7ßËådeeŸŸGppSöí{4Püì³Lú>ï¼3ˆ¬¬ Þ}wiiw9r —3fÒÓ¿T¸qýÞÞtiÝ…å‹—Ó£]:v鈃£R‰”’’¯$òF‡7ؽc·ÎnÝÊuŒ<’ˆA$'&3{úl¶þ²•ìÌlTJÙYÙÏøÖ²²2MèÓ§3Ë—/¦Q£º4oÞ’:u|(--A£ÑpôèAzö|“;ÓÙ=ú}ûv!2ò-bbΰråüøã79r=ÂÙ½{‡Þµ°V/_M« V4ñkÂòÅËùlÆgŒxwE…E¨T*’®&albLŸ:ü±ï'"E°`ö"EPZRJ×Ö]±¬fIH« î°{ÇnHÂ¥îçß׫‡í§aÃZ´i£åÄ{ï §OŸ€v™™AAÁ}‚ƒ›°ÿ#NÌ™óÓ¦'"bÙÙ™DF&33®]{‘—w€ž=ûè$uôëIשåX‹¦ï› IDAT1oÑûw½˜ššñYYÚqDlìY<=½°µµçÄ ­X³ú9žá*-4*të¢aíZaiiÁé˜ Êü¶ñ7bÏÆòÓÏ?aem…èÁàÆP4hÆÔýý矇uÇK—®%&æ4bñ£8ªœœ,4 ŸþHƒfÃíÌBïÞýX»v%YYxyvWFë7ZóÉüGéGnß¼­;žûÕ\Ž:ÆþÝûuçD¥"²3³ùhö£·ð#1GX·r5jÖàbìE2Ó «HP«V]:«ûûq…éñã§²wï.vìØ‚Ý£ióøøþøã ￯}IHH%33ƒ=ú°}û/,]ú-³ga8'W7W¶DoAh!Ô{È…¾oõÅÚÖºÂà >&žY fá]Û€ý'÷óÛ¦ß8zè(Ë/ÇÞў鳦Ì[[;~ÿýŽºsý mÍŒs9uêx›øø¦OŸEÛ¶ÚÔ9«Wo &æ 2™”V­Þ0LåƒP(dí–µxÖðdÜmZ˜‡~xÕôb寕\Н¨OûNí©M3ïëyädå°hþ"Þõ6í›== о øúëñññcܸ)ºs ÝÆ~èÐY._®øCÓ¦!Ìœ9€ÐP­öQ—.=IL¼¢K[¦o¸º¹²9z3BaeNôÒ[;[î=XÁ&>&žÏ~†—·v öàéƒì^ìì숎>нý£ß ‡õiÙ² Ó§ÏæÔ©?+ØÄÇÇ0sæg´nÝ€µkµÂ¼gÏžªð†ôKh!dÖ‚ª¡äþ×{3eÊÇ8°›-[6àí]ë¹?·JÏ`=ŽÔ´LŽŸŽE¡PP·vMÝù…óR«n-öý¾ÒÒRƒ×ËÏÏ€÷ßàêÕË®íØñ+·nÝÀÉÉggí€ÉÙY»evñâ¯X¹ò.1~üHÖ®]Á7ß,@©TâêênX'??æ2ŸÃW¸vøÀa.¿„P(ÔuÞ–Õ,qquaõòÕÌ1—Ü{¹ôïÞŸŽ]:R? >&¦&íû+üü´2 QQKÙ¸qM…k±±g9yò …’€€@Ýù€€†üöÛ&Æ‹@­VÓ¡Cs.]ŠgÆŒÉ\¹r™€€†õ f­š-„ìÙ¹‡EóU¸–œ˜Ìþèý”——Ð0@w> a{ßËø‘ã)).aHø ¬\.)íáâ⊃ƒ#ññç˜:õý ײ²2غõäò² ÷8  !þy˜I“F“••ÁŒåüùXÖ­[É;ïŒ2´ XY[áYÓÌôL†öZáZIq kW¬E&“Uj¸sqL3…äÄd¾žÿ5ÇÃÍÃÝ;vW(k(ããã‡B¡ C‡ ×Ôj5?ü°©Tú—öäÚµ«L›6ž˜˜3lذšÕ«—³té·ˆÅ"ê×0HÜ•wmo„B!ÑÛ£ùfAE‘Ô¤«Iìß³Ÿrù8±k/FN ´¤”·z¿ENVŤ¾ ؽ{{¬môwåâ↽½±±gùðÊœÈÌLgÛ¶'sâØ±CLš4šììL&O~‹ãõ^×gÁÚÚÏêUS~çìÙ“œ9sFM½zÏÏÃ*¯ƒUR*ÂʪÆFF”–ŠQkÔX[Y±bí/ ‹Jíà`«½Ò‚û P,))ÆÒ²¦¦¦ºcFCY™ [ŠrJKK155ÅÆæÑ.¡ÒÒ ÅABR©KËj”––`bb‚­­AƒÜE¥"ÌÌÍ077G$afj†‰© ¥%¥Ø;Ø£R©(.Ò¦p°wx”ÏN,#—Ë©f¥½Ë?¼fbj‚‰@€$KŠ­“·ÞýJ%,,,uÇB¡……8::¡Ñh(,Ô. 8::=f'E&“baa¥e5 îãàà¨+ëààˆ@  °(oýûQ&+C©RbeeEYYJ…+k+Š ‹°±µÁØØ˜¢Â"Ôj5vöv:Ety™±XŒ¹¹y…ò¢R*•JW¶ðf6.þz÷£¼¼\Ç…ÇÿÊ¥R‰­n¨P(*p¡´´ d2B¡…N °0ÿuõ\«Rª‰DØÙÛ¡R©•jÅ"1¦¦¦˜ Íu\°²²Â\¨Ušÿ+orB©Pêx# )LMÇÁQÿƒø‡Ïÿã\pttB*•,-µ¼‘ÉdXXXbiùHª @»tæààø „A*ð¦(÷¶uõä^akk‹‘±Ñ9QVV†D,©Ä ¥B‰B¡ÀÊÚJÇ3s3¬­­ååê­y~NhûSlmmuœxØØÚÚÚ¾å!GôÙ‡(•JÄ"1–æ¦ÈóªF»Z­¦¸¸GÝó/€ƒƒjµŠ¼[G©VíÉÚgÿH @"•j9ò‡‰±1eTç0ƈ²²2Ý êñßÐxøPÿõøa`jjV¡#ˆÇ[Û>©¬!ðø[›µõ£ã‡÷ÖØØG'ÇJvVÖVXY[U*ÿðhw ––Õžxüð¾ ‚'ÞcKËŠÉÃ2/«=_ …ðàÏÇï{s¡¹®s¼Œ½]¥²†€™™™Ž ?7ajjZáÞ?ä‹©©áSË›ëñ£ãÇŸý¿ráaÙÇy£».¤RYCàñçÿñã¿òæñ¿âñöxœ+ë8ñØñßqB(VXR|ü7í!WþÊ}âù9aöDNüµü_û}ÁÄÄ;{;Ê¥†³ý7022Ò…*<©/xa:X§ÏçèÉsUZhT$–b"IAA…ór±µ¦EyÕÖåP”‰P+$‹oÐÔ å29’RÃÆÆé ™´ÒóV¡(“¼íQ&y5ÚC&}%Ú£¼LŒ´Ðø¥Æ7½¼îCþw(åe(dŒŒ ~ð"¡yŽ<„ð”Vh³`Z·hö¯*ô²±=úFS,*æ†+‘ªjÔ˜›=ß û¯@ªR£6³ÃÊ¢Šë`—Sj’…Co¥‰e¥ç­*BiRôj´‡±É+Ò¥¯D{¨MÔØ ª¼Ö«Ô‡¨Ìl±¶¨¼úð¢ GB™É}l«ø½R«U<Ï\ÜX&&ÆUBh´L.G"‘ann†U5KŠŠKµkì¶Ö\»~“æ-Z£˜PR¢]¶µµE*.Áü%æ‘*,*¢\¡ÀÁÎ PT\Œ™©©.ñÓP^^Náce•*js!B$I~JJJÉdØÚjãîß¿±±1ÎÎÿ[‡VRR¢O±¨†©©ÙKk‘XŒD*ŪZ5ªYZ’›Ÿ€›ËßïÒÌÍËCƒ6!«µ•&2³—ÖR©”ÒÒRÝsžŸŸJ¥ÂÙÙYoò4Ü¿¥R‰““&&&˜˜¼¼ö——WàÄã|yV¢Õ‡üt¶&¦/¯=”J%÷ïßÇÄÄ''§ |y˜ ÷ixXÖÆÆKKK­/©=4 ¹ùù@›°Y,Fü€/VÕžÀW,‘ –HñÃÄ ¡¥•ÁRåüNÈd2ÊË˱µµE&“QRR‚P(ÄÎÎÎà}ˆ\.§¨¤s33ìíìþgN€–b‰D׿cii‰¹™J••¹¹Þ9¢2U‰¼"‘‰L†µ•–Úç^ ÀÕÙµZ¥ ;ú'¨Ò2 «7lÅÝÕ…èý‡1¸/ÑûŽàáæ‚‡û£Îñ«¯¾ÂÕÕ• 6°k×.Ì ˜ëÚõëØÚØ –HP©Th4–EEaog‡T*E^^޳“'ΜaÅwßáï§Ý©—œ’B©XL=Œ2³³9yö,Å%%:z”ï¿úŠÚµjÌ[·n! )(( Z5m þ¢E‹¨_¿>'Nœ E‹¤¥¥‘––ÆŒ3hÛ¶-©©©äççS»vmlllHJJ"88˜ëׯ¡ý÷öƒù‘™•…ÀȈ»÷îáæªÝ­9÷Ë/iߦ ßüø#3>ø€íÑѨÔj†öïO¿p­.TvNYwïâéæFuOOâ.\ÀÃÝ–:ñÅœ9úûÔÀpI…sss‘J¥áââ‚B¡`åʕԮ]›¨¨(>úè#Ö®]K5ðõõeêÔ©äçç“ššŠ““uêÔ!!!üü|¾ùæBBBð÷÷gРA󣸤„{yy¨T*-OÄbþ8v …BÁž˜ðÞ{,]µŠÖ¡¡”ˆDüøõ×”ŠD$߸µ•þ~~\¿qâ/^äØÉ“—”°íçŸ æ‡L&ãÆT«VMÇ“””‰gäÈ‘|ýõ× 2„£G²gVèR.—sùòeÌÍÍiÔ¨©©©”——3lØ0"""ˆŽŽæÐ¡CóC­VsáòeÜ\]äܽ‹¼¼œÑÑdde1dÀ>ûê+>þà¾úî;®ž;§³»p мqcrîÝC­VÓû­·ø`üx-YÂ…'ôZ÷'qbÅŠøøø°råJ>þøcÖ®]‹§§'þþþL™¢• xÈ gggj×®ÍåË—Ñh4|óÍ7±qãF† B›6mغu+;wîD¨Ç^³¸¤„ܼ<”J%¶¶¶ˆ%>ŒZ­&zß>&Žò¨(Z4oŽD"aÉÂ…À#NØXYQßÏä”4ÀŠ5k¸|å §dÇîÝÌüì3~\´ˆÎ:èÏ ´œ¸yó&–BSÌþûà yy9SfΤeH«Ö¯gld$;†T*%røpzvéÌóÄLUé¹Úñ£†#–HmLI‰{[ü¸}'CWæ³Ï>£¬¬ŒöíÛcggØ`Þ‘ãÇÓgèP¶GG³eûvLLL˜óñǤgfÒ½sg““ k×FCþ}í.œ‹ Œ™2…ôŒ ¶îÚEVN¿îØÁ˜ÈH|êÔA£Ñüí[ˋƧŸ~JçÎY»v-ûöíãÞ½{|ûí·$''3`ÀiÑ¢ÎÎÎܹ£Íýv÷î]ÂÃÃ)**"** ‘HÄÊ•+‘J¥DGGÓÀ€’‡X¶z5­»tañòåœ:wŽø‹‰úáÎ_¾Ì;C†˜œL`@ ê×'19Yg×¢S'åå|·|9jµšï–-ãl\ýÂÃ9yö¬ÁãàvíÚE‹-X°`gÏžå?þ૯¾¢  €nݺ‘——‡››!!!$&&êìúõëGFF«W¯¦¸¸˜Õ«WsùòeÄb1tïÞÝ ~ÄÄÇÚ±#3çÍãl\ÛÿIcÆàäèH`@ÆÆÆÑá7HLJÒÙÿðCâΟgëÎdde±õ÷ß‘ÊdtjßžÛ©©|:mšAýHOO'44”É“'söìYÖ¬YÃÀiÕªxzzrÿþ}z÷î]¡=,X@tt4 11‘C‡qíÚ5ÌÍÍÉÏÏÇÊʰîååå„tìȨ‰9ÇâeËhÓ¢‘Æ!++£ip0×®_gp¿~ø±fãFV¬]Ë™˜ÎÆÅÏ™˜Ô ÆÆÆ$¥¤<×Ûÿ?ÁŽ;*pâðáÃ|ýõ×äççÓ½{wîÝ»‡‡‡G%NôéÓ‡¬¬,¢¢¢())aõêÕxxxеkW]™ÄÄDzöìIaa!"‘H¯~œ%4,ŒOæÏ×r":š)ãÆá`gGP` ccc:´m[¡ Æ}ðñ/òÛÎdfg³u×.Ô*ß|SW¦_ïÞÔ¬a˜ó;wîÊüùó ò}ÿæff¬øî;._¹ÂðAƒHLN&80ߺuINIyîÏýï-Ÿ¯ˆ¢fu† gÿá'¿!M:•êÕ«3oÞ[M·°°€˜˜ÓØÛ;ТEÕöé¸|á29Y95³†' ptv¤zÿHW/_ÅÖÎwÃî†ü+RR’¹}û¾¾õ©[×—7®#ðññû[Ûö Ñ¨©SÇ?¿—; ÉHÏ ñr"5jÖ °Q ™™Ñ0øï“?r©DJÛŽm . ðWÜ¿ŸG\Ü9 iIAA>·nÝ $¤Õ3íòøOpD"–pâè ,«YÒ.¬R‰”¸sq´ k÷·¶W/_%3=“A ðò~¹±pjµšƒ÷ èÖ­7†öн{￵½uë7n$¿4~d¤e˜ð'Ò3).*&°ÑßïøÍÎÌ&??ŸF‘•MÂ…—ׇäçç''š7oÁýûùܾ}“–k[XX@JJ2-Z´ .îµjÕÁÙ¹jÇDéÉɉܹs›zõ¨]».ׯ_ÃÌ̌ڵ}žû3Ûµk7×ÞÆG{GOž£W×È$Pþ/c÷£øÖñfæ¼oðªáÁÆß~çÚõ›´oJÜÅ+4 nÈñS1ԨϘwÆÖ- K3SL°ÆØDÿÉ;wíÚŠD"æÒ¥ó$%]E$‘pðãßðá‡ã i‰—WMÝž=;9~ü0îîH$bŽ;ÄÍ›)8::±pá|jÖ¬…»› 9¦Øräà 9ùçIrïåRx_{\³VM&¼;ê^Õ™ùÁLœ]œ zôãõç‘?9´÷VÖV…B¶þ²UÛ&GóéÔO±¶±¦a£@¥ „–ú×(‹=ý{wÙ·/•JÉÝ»ÙìÛMÛ¶èܹ¡¡­™;÷cD¢RZ·~Cgwþ|,{öìD£ÑàéYU«–¢Ñh˜7oïáää‚……²²\,  µ–t5‰äkÉœ~>È EXTÓÿÌOFF:§O')é b±˜‹µÀ·_|ËØIcuv¢RëW®çzÒu7äÄѤ§¦3fÄHÄ[Œz²¢,,õÿ"¢T*Y³fJ¥’{÷rØ·/¥RAAA§N'5õqqg?>’?žSÁvåʹp!–Æ›qñbÂÎΎװ{÷~$q“Å–-ëÉÉÉÂÏÏŸ={v"•°rålÝú ÆE²{÷¦M›@PPcjÕªƒR!Ó[RXXÈ”–âj…þyøoP^.gÆÕ4kÖ‚>}:ܔٳ?B©TÚ Fƒ¤0õ™”‰T@^añª¶LCßžÙ²c/c"†Ú´-šW*3EX¶ì;¦OŸ€R©D©TP½z š5kÁîÝÛùâ‹Åôé3Š»ƒNŸ>ΊKèÞ=œØØs¨Õ”J%¥¨¨•J…““a—=6¯ßÌèa£Q*”(•J¬m¬ ïβbý º†áW¿âŒOFZFN`ÐðAÄž‰E£Ñ P(¸›}—;·îàßÀðo´ìaÀ€(å¨TÚMcÇNâã'±eK4!!-iÚ4¤’]§N-ˆŒK\ÜYÔjµÎ¾oßAÌœ9…ØØ'kÓè 1gb>˜œìT*J•’ˆ÷"XúíRæ|1‡vaíhß©}%»=Ö-Œ¬Œ,JŠKP(ˆEbÒÓÒ¹zù*õ »òÆdFŽÌùóqZ?”Júö}‹ƒ÷Þ^½úÞ¿’Ý{ï Ç×·>jµŠ¬¬ ”J%ffæ.^ŒgìØÉõ#?/Ÿñ‘ãÙ³sÖ…’NÝ:qûÆmjÖ¬Éàƒ9¬’ÝÇ“?ÆÂÒ777’“µ~˜›áìê̱CÇðñ{þ7ççR©dÚ´ñ¬Zõ#*•J+<Ò @@QQ£Gâ½]¸pùù¹4jÔ„øøÔj5jµŠ7ÞèÀ죨¨Pïu?wúoõ~‹{9÷P©T¨T*"ÇDòâølág¼Ññ'r¢÷þtîÑ™Œ´ JKJQ”+ð­çKÇ®ueJŠJ¨^£:ååå(J½úqýz‘‘oqñb¼ŽýûæÀhúôHÏž}èÝ»_%»Ñ£‡Q¯^J¥’ììL”J%nn¼ùæã² ý¨QÃ0}`Þ½<ÞxŸ}¿ï7öÍ IDATÈ÷ý[˜™™1†¹s?fãÆ´lÙ–àà&Ê<ÏÒv•6û+÷ëE«Ð&O-98’á‘Ãéñf§–Ñ'.\B³f-HL¼BZZ*_|1›õë·áèèôL;[[;üüêcmmM½zþ$''Ò¶mGÖ®]IVV^ž†â9o&ý÷çfÊMäerƾ3–Ÿ·ýLšÏV¶°° °Q fæf5â÷í¿£QkHJLB©T2ìíÁò@‹ ¦2nÜ22Ò5]»¶æçŸ·ãç÷ôÁ…æ"u“&Zý«¦MC¸{7WW7š7oA\Ü9ºvíõT{}`À|4û#rïå"KÚg(?œH‡.OײzèG`£@ÌÍÍiÜ„‹ øÖóÅ«¦ f-`õæÕôZ¶lËçŸCqq666LŸ>Æ›òÎ;ï=Õæ¡~~þX[ÛàçW[>€««;^^Þ†sà¼k{³dÕd2æÿÇÞyT]ÿÿÁeï%({ˆ‚ B@ÁQ¦&·8²4ËÌiÙG­4qáÖÌ­•{2Q@†‚ì}áÞËÜ{`”9úfr>ÿb¼ïsx½Ï}÷ëœó<úú¬\¶±HÌâïžÎd­V«¸y¸ajfŠž¾ 2ïg2*dï<Ô6ôôôÙ¼ywMÓÉþý»8uê(›7ïxb3Êv888=lW V«˜8ñc‚øê«ÙÑ}ÐðAÌ\0“üÜ|Äb1Cú aú¬éO ¬þª»¶¶6Þ¾Þèéëáíë¾Aíg7ž…ví:°xñò‡>aÎŒSdÔ¨§Êüa‡—WSLLLk|ãeÂÝÃ/¿]€¬àÕo`ª¬”зog¶o߇ÇSÊCžãäµN§SÉåÜNJÁÝÕ…¢ ]=]šy5ªIæ•"•J‰½K#¯FTJ¥³²2 ÂÊʚ͛×bllByy9¹¹ÙäææàéÙ”ìì´lPs*eiiEqq!QQ˜››#hóÛo°¶®Ç¯¿îÃÉÉ…>} -Pk,E˜—›‡gO9´ç …¡PHiI)w“îâíëM~^><Õ\† †×o P(ptvdýë™óÕ‚@ mßi‹³³£ÆR„ÅÅ…ØÙÙÓ¨‘ç΢  Ÿ²²R*+%DEEHII¶¶  ¸,-­¹q#œüü<üý[³hцÍñ㇑ÉdŒ7ss ¥…eBŒŒðiéCtD4·bo¡P(J¥ÄDÆàÕÜ ©TоþžêÚÔ·!âZ™÷3  `튵ôèÓƒÜì\ŠŠŠ6fvövKŠÅb”Ê*‚‚Ú‘––ÂÉ“G122B"©$..g´µuËå´ióvœ½½#ׯ_%%%‰€€ öîý‰úõÁȑ㰵­N§i*E(—Ë)).¡Sp'Š‹ŠÙ²~ ì KHˆKÀ̬fØpç®kä\Ü\¿έ›·hÔŠ³'Ï¢«§‹«»+ ñ ôìדæ>Í5–"T©TÜ¿ŸNÏžýP*•|óÍ|<=½‹Å$&& ¥%ÀÎÎôô”GNQ6lDxøbbª}èæÍ(²²2¹w/ˆˆ«tìL«VAÈ$%µ–"– 111ÁÛ×›¨ˆ(nÝ|Ô'š´h‚´RŠ‘Á#uT6õmˆ¼ɃŒøú³ú‡Õøø¡RªÐÓÓ£e@KlØq-Ÿ–>têÒ •\Vk{ˆøáÜÚÀÀv¤¤Üåôéc!•Jˆ‹‹ÁÑÑmm …‚6mþ¬3´·w$"â*))ɱgÏìì011¡²²’ví:““…OKlmë×jŠP.“SZRÊ;ï¶C)V¿ò)ª*117¦e£ñókEQQööxxx¢V«‘”ÞGW÷égROJ¾ÖD£ÃÇ Ã¯Ó£oôù¯EˆôaˆÑkÐE(Î’`þt–”Æaåêú²ÕøÏ(IÉÆê5è",)¼•GÝî^(IÏÀÊúŸ›^u”æßÅÜ£îw¾ÙCþïKÄÈ T˜¾]„…iç12zr0ú¯ˆF‹JJ¹šºË½RT¢Ù±8oðoðoðoðzây¸Ÿ`åæbnV·£ó _ ´ˆ²òù¹¬Bˆ)r ¤k ¹µ® •¤Ž¸U)Uˆ©d/[•ÿ yeÅcÏ[]„\T‚ˆçŸ ÿª@..E”U§ËLW”#R¾ëQ„8[‰V'}öU-ï!UrU"Z q­ÝCP«Ÿ¯Žì‰Ÿ>-š6F$’ü'…^6Önù¥ZÇG Ö^§9R¯Í,Bå=lê5xÙªüg䔪°wügþ¬W9•rìm_ƒõ(T¼ë!Wbo]÷×#O-ÃÖ¡ñ›Y„¯ÞÌ"ü¿C¥Rr·,ó_Ë=õõN&õOFbâns;)ÛzV¼Ý¶¿=ƒL&§û{ïÔé_½z•ððpììì4>þïËålÛµ‹2¡ÁÁ(•JNž=‹•¥%#‡ AO÷é£î$%qôÔ),ÌÌ=l˜µ~UUUìÝ»—¼¼<qvvæçŸÆÐЉ'b`ðä˜@©T²oß>6lˆ¯ÏË«-Q«Õ>~œôŒ 5lÈ;mÛ²jýzÐÒâ“É“1þ‡Iðó¿þ+++ZµlIÛÀ@ iýd\¼x‘èèhèÕ«6l@*•2räHž>(X*•²aÃ$ C† ÁÅE³T&G\B§ÏÃÊÊŠÁ°kß>J…BºwéBó&OïôÌÎÍeß/¿TÓˆ˜š2iÌ jý8233ÙµkFFFŒ7Žß~ûÜÜ\ZµjEûöO'AU*•8p€¬¬,üüüèСƒæ”~Ê+* CKK‹i“'sîâEÒîßÇÃÍ^ݺ=SöØ©SÜMKÃÍÅ…>Ý»?óÚÚÀ… ˆ‰‰ÁÑÑ‘ž={ָčQ£°·úpy©TJdd$ùùù 8k×®qíÚµ—¶‡Ü¼u‹3.`miÉ øyß¾ê=¤Kš=Ã'ä w‰Œ‰aÂèÑ” …ì=tˆŽo¿M£† 5hÁ«•JůGrÿÁšyyÑÊÏu›7#˜:q"úh=Gí`î"LJI§UKo–ü°ž&Rߦ¹ùÄÄßFKK ___ŠËDtìØ‘©S§Ò£Gôuè"@Gs¤¾üö[¹xù2g/^DGG ssT*;öì¡¡«+mZ·fѲeøúø`ß å,_µŠKW¯"—ËQ(¬Ý´ œY»iM½¼°µ±F­£ƒ¾¡q­Û±zõj"""Ø¿?)))”––¢­­»»;sæÌ! ___6oÞŒ……7F&“±råJ._¾Lff&öööÌš5‹nݺ±k×.6mÚ„ ¾où -/ÃØ¨öSÒ{ä•+¬Ý´ ¹BÁÝ´4*++ îÔ‰÷GŒ Û{ïáÙ¨§Î£¤¤¿·ª»VoØÀÕˆ¢bbhåçǨI“P©Õü´gÆŒ¡µ¿?ZZZTH+0µ¨ýî»sçαoß>vìØ\.çÚµktîÜ™‰'€““iii„‡‡Ó©S5§Ïž={8vìáááøùù1sæL‰ŠŠbêÔ©deeáììLEI¦ÆæµnG\B«Ö¯çÄÙ³TˆD>v S“jŸXºgGÇê ZZlÛ¹“½«ÙÃÏ]ºÄν{¹Î[ÞÞü°f ÎŽŽôéÞC‡£¯§G›Ö­©”cªÞœœfÏžMTTEEElÞ¼‡ŸÐÓÓÃÐÐF1kÖ,Æ@||<¡¡¡œ?ž-Z°k×.ÒÒÒøê«¯6l³gÏf„ T”bj¤™nȱS¦ñàÙ¹¹,]±¯ÆñjܘgÏRZV†Z­¦Û{ïÑwèP>ûè£jûssY´|9g/\ IãÆœÿýwnݹÃÀÑ£ùu×.|Û·ç‹iÓJE[ÙÖJŠðÌ™38p Æ'ÂÃÃQ«ÕtîÜ™Z·n³³3)))DDDбcuóÓîÝ»9~ü8ׯ_ÇÏÏÏ?ÿœzõê±sçNnݺEÿþý騱#‹-bâĉtíÚcC½ZÛCnÞºEè† ?s‘HÄ‘'011¡]ëÖ,üßÿpqrÂÚÊ µZÍŽÝ»éß«šæìÅ‹ìÜ·Ë×®ñ–·7ß…†püôi?ÎØáùÁ¢¥KiåçGC77ä j _üô†ììlæÎKfÆ=Zx6ÆPûÔ¢ªŠÛII¼Ý¦ #&L s‡4ñôäȉH*+ñiޜҲ¼ÝEX§ <=Üø~ÍΞJSO~Úû+"q%Ga㎽øúúòé§Ÿ²~ýz\\\()ÐÜÛSçÎáÕ¨3>þ¥J…›‹ ¿=Jdt4«—/G&“ñÙܹ̞>?bââ8sá‡÷ì!#3» èÛ£ÞÍ›sëÎàùÏþ ®\¹Bii)ß|ó &&&XYYqóæMÂÂÂ8xð FFF̘1ƒ~ýúѳgOrss %99™øøxLLL>|8‘‘‘XZZâáá¡Q úÃëÄ™3¬ýþ{ìíÑ( ™4}:WNÂÉÁóæáÕ¨F®‘ûxæL”%%\‹ˆ`˜1898°üë¯Ù´c±qqL;Vcv¤¤¤°aÃÖ®]K“&MËåèèèðÉ'ŸðÓO?ѲeK–/_Nee%óçϯ‘›={6çΣ¸¸ºÓeèÐ¡ÄÆÆ’””Dhh(ÁÁÁ³ 7/Í?ýDè²eøûúâéáM½z|6osfÌ k§Nü´w/á‘‘¬ýᇹ¯—/gþÌ™ØX[£R©èÙµ+ööÄß¾Mdt4‡÷ìѨååålß¾+Vàïï‹‹ žžžÌ˜1ƒþýû3hРΞ=ËÚµk9tèPÜŠ+hß¾=íÚµC©TÒ¡C¤R)™L†ŽŽf?žU*;÷îŧE ü}}i`k‹w³f|>>Í<= 5Š„ÄDB¦N%üÌ™¹Û·ch`Àø‘#QªT´|ë-T*K¿úŠÕ6ÔúÖ&RRR cݺuxyy!—ËÑÖÖfÚ´iüüóÏøúú²téRärù#>1kÖ,.]ºDaaaO4oÞœ6mÚpúôéZ×ûïÈÉÍ}Ì'êÕ«ÇŒ¹s™?s&]:vdÇîÝDDG³ú»ïjä/[ÆWsæ`ei‰J¥¢w·n89:¢£­ÍÅ+Õ#¤:½óvõ53šL(²}ûv~\ñÝ?_ü @OW—†nn|>>祭-3æÏ§¥£†E¥z¾g¸NXŸÌþ†Ås?¡QCWÎ\¼Êí¤Ï™ŽŽÎŸ9þ¾}û²~ýzüýýQ«5ß9qìXš7mÊîHLNfÇîÝÝ»}}}†Žτѣ îÔ©¦ÍóËËIJIÁÊÊŠ;ÉÉÜMKÃï­·” …·côèÑøûûsìØ1ÒÓÓ™1cóñÇÓ´iS†þ˜R©”øøxš4iÂÍ›7±²²âÁƒ$$$PUUŘQ#Ÿq×ÁÐ60+áá ¥EïÁƒI»ys33¾ E |:eÊcv¨T*nÄÆÒ¦uknÄÄ‹T&ÃÅɉÌ,Ííà½÷Þ£k×®ÄÇÇ“——Ç´iÓØ·oÍš5cÏž=ÄÄİ}ûöÇ6i•JE||<5"..™L†§§'¾¾¾lß¾]ãAÖ[-ZðA¿~ÜÏÌ$)%…Ï,àÃñãéòî»\ gËO?q|ÿ~ôõ-(V©T$¥¤`nnNòÝ»˜™šrêÜ9Zùûc©.²¿ÃÞÞžñãÇSZZʹsçØ¼y3-Z´`ذaÜ¿Ÿ>úˆ7n`lü蛼J¥"==GGGrrª™ùKKKñ÷÷'3óß×|üWèêêòé”)(•J~9r„+ׯ£¥¥Å'~HUU킃¹¹Ù£'jjµš¬œxH:ªT*L aÖÂ…Ñ=88˜àà`âââ(((à£>âСC4iÒ„]»vÏÖ­[Ÿèqqq4nܘ¸¸85zœAÿy:Èž¾ÞÞ ìÛ—{$§¦òÙ¼yL8‘Î:ðûµklÛµ‹cûö=Ù'îÞÅÒ¢Æ7^&2d’‚W¿ñ§B$¢ç A$ݸ™©)ß|÷Ɔ†|4aÂ_â†?Ô類ž.™Ù9‰F´¸“œŠH,!7¯___7iAjj*‘‘‘xzz‚J¡±¡©‰ >-Z`jbBbr2.ÎΘGn^>Í›ó ;›Èèh035ÅÕÙ3SS"££éÒ±#--²ssiÛº5¿=Ê;íÚÑ»{÷šã]M¤iÚ´)õêÕ#==KKK4h@ll,ÉÉÉøûûSTTDdd$fffØØØ`aaAóæÍ9{ö,ï¼óæææ$&&2|øp‚‚‚pss£sçÎÔ³¶ÖXŠÐÐÀ€F â`gGVNÚ::x¸»—@TL ˆ%"££ÑÒÒÂñaF·ÎùåèQZûùáìèHTL M˜ÀÍ[·ÐÓÕeÖ'Ÿ 4–"Ô××ÇÕÕwww ¨¬¬¤iÓ¦$''IóæÍÑÒÒ"** ‘HDÇõ]ºtáäÉ“4lØfÍšÏ|@UU¥¥¥Ì™3CCC¥uttp²·Ç«qc„ååäççãÝ¢²²ˆŒŽÆÙÉ S¢ãâÈÉÍ¥©guÁzç¸tõ*f&&µjERJ vvȤRúöì‰ÅÃES)B@@ƒ ðññA*•’’’‚ŸŸ………DFFbaa]Íi¡¯o5ùkÇŽ‰ŒŒD.—̽{÷ppp K—.\ºt‰ P¿~}¥¬,-iåç‡Z­&&.ŽÀ€Db1‘ÑÑ5lH\B‘ÑÑúûС];îÜ!;7—½{“›Ÿpqrâ—£G™ûÙg¸¹¸  k-E¨¯¯››nnn"‘Hñ‰-ªg¤FEE!‹qwwªƒ²'NàááQãMšTOÐpqqÁÃÃ.]ºpêÔ)FŒA`` •âòZÛCtutptp¨ñ‰‚‚|š7'ó¡O¸89aòÐ'róòhò7Ÿ°03#0 €¤»wq´·ÇÊÒ{;;šyy`blL‹fͰ07¯Õá>Ѭ© ±è•OBõþ—@l\­ýý)‰ˆŒŽFGG»õ)*Êþ׳_k¢Ñ1cÆÐ¾Ó£#r^§צ‹0ë6õž^tZWSšƒ½«fçùÕrRnaoëü²ÕøÏÈ)|€½Gó—­ÆFNúì­ŸÞ¨PW—Ÿ­G³7]„¯Þtþß¡R)¹›r“'ŠÿŠh4þv2‡Oœ{))µ…Ä»é/[…7xƒ7xƒ7xƒ7øÿO °íë3uâ(MëòBqëv-™Y·ù¹¬¢!¦hëÔmâ³j¢Qe’—­Ê‚ªª Y…ŒJUݶ@RYDÕßž·º‰¨œ*^ƒõ _õ¨(¡JùôÔD]D,F–X+³5‰×mJŠjíJ¹œ*‘‘¢n¯¹Z­z®çö‰–•¥EOž½táîn˜;>:éÍ©W U2åë1‹PY*~ìy«‹PVjan«ù.Ï e¡ìõX¹s뺿*µ 3‡7³_¼™Eø‡J¥DVñ‰Fëv8B¥T†H,¦O÷Îìûå8:::¼Ý& æšMk7QVRFyy9_,øâ%j EE…üðà ðñi‰B¡ )é6‰˜Ï>›‹••õSe>H\\ I%Ÿ}6×WÇ ‰Yºh)fæfXXXàÕÌ‹“GO¢+˜úùTœž]/"­”²pöBÞíü.Þë ¥Ÿ•JÅ×_ÏÃÚºBaï¿?„°°PÔj5~8ÆÏ”ïß?˜N‚ñókM``[ iýd¬]±©TŠP(dĘlX½]]]zôëA›ömž*—“•ÃË~DOOÎÝ:óN§w4¨õã8p`7ÉɉH$bÆŒ™À–-aѼ¹}û|ª\nn6¿ü²²²R„Â2–.]¥A­ÇïççôñÓ(ä B¦„°cóÌÍÍ153eÂÇž*'­”òíÂo±°°@O_)ŸNÑ Ö#)é7®ÔLž<]»v`m]’’bæÏÿú™²K–|‰¹¹9ÅÅEÌ»X3 ÿ«XB®@X*døØá„­CWW—^ý{Ô.è©rÙYÙÜ}ªª*>ýéKßCöíû™ÔÔdÄâ?}ÂÐÐoï–ôé3à©r%%ÅüöÛ’“ùßÿVrãÆu¶mÛÀøñâëë¯A ^}TU)øæ›XYY#•JéÖ­Û·oB¥R2eʧ¸ºº=×ß­Ó¯ï´mEû6þÄÆßAGG‡ŽoQR&$%ý~Í5]ºw¡Gß\¿v‰X³ãFŽ|Ÿ †óá‡c=úRR’øøãEPP;7öâæÍhJKKÈÉÉfüøaÌŸ?“õë$&æcÇÆß?¦M›Kqqíé> ³¦ÍbÂð ô}¯/s¦ÏáÜÉsŒÿp<.n.„_ §±WcZ·iMòdr²s¨(¯ dXË/cþÌùäææÒµ}W6­ÛD~N>¹9¹µcÕªåL˜0œÖ­›ú=[¶¬cøð±øûráÂêÕ³¥k×^m [Æ×ó¾¦W¿^¼×í=®þ~}}z÷ïMA~‰ ‰5r_~ñ%Ë-#dXåô|·' ’î$Õ//ý>èDZ_Õ|¾Õ._¾HŸ>éÚµaa«øðÃ1´mû6|0œØØ(är9ýû@EE9±±úÄúõ«˜?ÿsBB†‘““Å„ ÃIHˆÃÔÔŒ›7£ptt"%ånÍ^S›HKI£c«ŽÌüxf­ßëE@ ÐfäÈñx{ûréÒ9ììèܹ+÷ï§sÿþó×s×é¬ìÜ|öþrœ•ßÎÇÜÌ»ú6dåäw›zõª=332Y¿r=»Ùµ5ùÓ/''‹Þ½ûóᇟjªªªøßÿ¾ÂƦ>Ó§ÏB Ð¯ß ¶n #??—† ‘žžBNN6ü„J¥B °aÃNtttèÓg ;vl!'' GÍÆä`emÅš­kÐÒÒB¥R±yÝf²2³ØøóFÝzwãÈ¡#¤ÞM% 0€Ò’R¯„³a窪ªÐÑÑáÈù#üºÿW<›xGEE…Æl€ê7º²²2®\¹ù°“IÍáÇ8|ø'O^A[[›Ž»pýúnÞŒ¦K—êñûöídýúí(•Uhii~ ‰DÂÀÃØ´i ß~û%óæ=ûmþE¢¢¼‚Üœ\Ž^<Š©™)¨áòÅËlZ»‰ýÇ÷cnaŽ££#©wS‰Šˆª‘;´÷‡ÏÆÁÉž<ÈÁ=9rèŸOù¿Ö~„L ј••²²ðë¯g°·w¬î¾IˆcÙ²E„…íÀÉÉ•JEy¹•+—ÖÈ>|™3çÓ¦ÍÛV¯Þ‚@ "âÙÙèß_³ãL ™÷3Y³e žM=;y,ÙYÙ|1õ –|¿„fÞÍP«Õèëë3°ûŸ§pǧMû6 9–€¹‹æ’—“DzÅËø`ØlY·E£v¨ÕjîÝKeÍšÍøû2vì$$ ãÇå³ÏæÔµZ££³fM«‘;sæ 6â‹/¾ eËVøùµbãÆ5!-–“››ËñKÇ1155ü~áw6¯ÛÌÁ1³0ÃÁÑÔäTb£ckäî9ÈñKDZs°CGG‡_Nÿ‚ŽŽ7cnB|­«ý*+%dgWû„jµš[·n²|ù×lØðŽŽÎ¨T*ÊÊÊX½úû¹Ã‡2gÎW¶C °ví6ׯÿ¤ÛÙ9`ôã¿^þð‰k–kä~/׸xñ,¿ývmmm:wîÊ￟'!!Ž:=Z°þoŸ}4ŽŒYèéê~#©L^\|<îc,Y@ZjF&šo« jŽŽ_=[Ûú\ºtŽ¥KWq÷nW±°°ÀĤ:ŸojZÍwsøð!„Â2Ûrðàn\\Ü144@¥RÕ\£I¶ DWW—õ«ÖcbbBèòP¶í߯‚)OI IDAT­¸[dedQR\‚X$ƺ^ušSO_S3SΟ>ÏÍ蛌ž0šoæÃð±Ã¹Ÿ~Ÿüü|²24OÐØ]]=Ø@ $d'N\&&&•JEtt$yy¹´nýgÊÏÞÞ‘7Â9|ø‹/gÒ¤Q¼óN'®_¿‚¾¾>ÍšùhÜŽ>-°°´àâÙ‹ÜO»ÏÒEKù~í÷$'&£§¯Ç…ÓUˆh`ÿç`{G{âbâØ±iÓfNcÉ‚%ø´ôÁÞÁWwWd<и..n89¹ljG8{öƒ 77‘¨‚ß~;ˆ•• üIãaoïHRÒm®]»Ìðácصk;=zôá—_öÑ·ïû/¥ÆÇÒÊ’¦-š’—“ÇŠ¥+()*Á§¥b±˜´”4~Þú3>-}[{i÷ý.”®=»~%s sÌÌ͸û‘k5mmZ·nKUU“&ÆÕÕ {{G´µµÉÊÊdݺéÝ»ÿcëq•°°Uøùµ"??…BA\\ Ý»÷ÆÁÁQ#…íÞoycnaÎ…3ȸ—Á·_~ËÊ +IJLBOO g.P.,¢OlÛ°O¾ø„Åóóù¼Ïù»öŽöÄÇÆcdlôsV_\]Ýqtt&>þ&§OãÔ©£ :†œœlÊËË9rä ææ–­Abâm®\¹Èˆãعs+½zõ¯u]Ÿ+k+š4óBV 9’Öç…X,búô‰üöÛ9bc£J+¹}ûEE´hQ=2ç`U¨Ó*700 ‘W#nݼ…¾¾>Þ¾o¾—v¢Â"\Ý]137#év>-«ƒ‘ûé÷166ÆÒ q–fŠÜ³²2ÑÖÖÆÎά¬L´´5ë¡¥¥…Ÿ_+¢¢"ÐÒÿ?Ó~ÙÙYäädaoƒQQøùµ"::µZŸ_+%¥qX¹Ö¾ùHÄ\Ý])Ì/D,#,"8 ÝÛ×›¤;IÈer¼}½kŸ‹ ‹¸—vëzÖ¸{¸sëæ-y5"%)©TJ ŸP’’•mÓg©ðB –‘ŸŸKãÆM ËÈËËE¥R!UŸlzy5%;ûxy5­y±¨¨(')馦¦xy5#99;;{rsshÐÀsój&÷’ÂÛXyÔ~qmee%©É©´x«ÒJ))É)›S\T €[C7Ê…åãÖÐz6õ€ê”\|lí×ÖÖÆÇ§%117ýAI~ÊÙ̓õÔ«°¨ö󴵉5›v2bìpü:u|äço:@^-TÉd °jš °jš °jš °jš °jµ`ioöÿ;^§.ÂüÔs˜?9 ö¯ˆFÃ#cùíøÙ瘼óê °¨ —Ñèk´‡h¡[»>"ÓB¥(GO^·ƒjõsû~b€¥¯¯GqIéRèeãZd žÍ|0·~´PT©¬z-æHikë¼6³UbæfOç«++e=ouâ’Â×c=d’×c=„%¯ÅzTVŠ0³ª_çg¾N{ˆ&fjË«êüó«R))(ºÿ¯åêtXùýêÍlؾ—)3R^!B.Wð¿•a|½|MÍ53gÎäË/¿$88˜¢"ÍòG ËË‘TVR^Q°¼œÔ{÷4f þ9_÷É))4 âJxx\yy9Å%%(  ÂòrBØ>gÝߟÔtÍÎY¬¨¨@"‘PVVFEEyyy 4ˆùóç3aB5ibnn.íÚµã矮‘‰D#•JQ*•”–VítèÐ-[4Û†.‘HTVR\R‚D"A$3h̾_½š®ª ûÄ ½æÛïÿlþ« Pýue%vžž|¿z5W¯_רR©‘HDiiiµ"Ó¦McñâÅ# ‘J¥Lš4‰I“&ÕÈÉd2Š‹‹k fKKK‰‰‰¡GLš4‰]»viÔ¹BQãøÉòU«ø|þ|º ÀýÌL _÷Ýß¿FN¡PP\R‚°¼€òŠ îgf²bíZ&MŸNÏAš¥iP*•5¾ñ‡ŸìÞ½›‰'Ò£GnÞ¼‰R©dÛ¶m4kÖì¹ââ⿉DÐ¥K-ZĈ#4j‡Z­®yÎÿxæ/_»Æqãè5x0._F­VsöâEL%..)¡¸¤µZ¤²‰DB·÷ßç»Õ«y¯oßZçÁz’O|üñÇ|ýõ×téÒ…òòr¤R)&LàÃ?|Dîï>‘ÀèÑ£?~<'NdÞ¼yÙCärùc>±tåJf.X@·Èxð…BÁâeËèùÁ5rùDy9÷22ødÖ,ºôí ÀÁÇy«];Î]ºT«6TUUQVVVó™ùªC&—3hÌ–®\Iß¡Cêý»Û€ü°¦:žxžS¬:`}öÑ8\°©g…޶6GNǶž5ò‡#Ë–-ÃÛÛ;;;ôô4;Ï+¸‚ûõcöÂ…L›5 ‘HÄÆU«ª¹dìí)¯¨àÈÉ“XYZ¢|¸x‰ÉÉô<˜ Û¶±nófnݹÃôÙ³ùxâDÚRYYYëVGHH:t`̘1|ûí·ÄÄİ}ûv®®®Èd2¶nÝŠ»»{n………têÔ‰={ö°páB :t(r¹œ7Ò¨Q#Û±hÙ2ÚtéB÷Ù²s'{bÏ–-èéêÒÈݵZÍòÄ×Ûû‘g(¨sgŽž<ɇ3f R©è:`;öì¡Ë»ïRXT„³†Ç±lÛ¶–-[ÌŽ;X±b?þø#88Ts\mÛ¶ '''d2YÜ|À¶mÛ˜6meeeŒ5ŠS§N¡R©˜0aýûk¶­ûü¥KxÐcà@vìÙì/¿äó©SéÒ±#–püÌ ôõ©|Ø 0cþ|–¯ZÅŒyóÈÌÊbæ‚ä2j)iiÌýì3Ú‘’’‚³³3½{÷fÇŽŒ=š!C†0yòdôôô055%&&†òòòG6œU«VñÅ_0kÖ,øá‡8vìb±•J…X¬Ù”L&ÃÖÃ~ƱcϺ @û6mX¾x1 …kKKrrsIMOGôÝ~9r„qÌ‚%K¸Á®}ûغk ‰‰´ ââ•+µÎ…µeËüüüj|båÊ•„††âî£#:::lÙ²—G|bàÀlß¾iÓ¦! 9r$têÔ©æºóçÏ3räHîÝ»Gqqq­ÚqöâEšÐý¡OÌ^¸/>ù„Î:ÔøÄ±S§000xÄ'>;—ïW¯fƼy<ÈÎfÆüù3 wïšëôîm½zá%»{÷....L™òr'ü_¡¯§Ç®M›ÐÕÕ¥¡›J¥’×®¥E³f5¨êç i¨ÓñÕœ9th×€ ?þÀåkמzŸÚ†……K—.^},…BÁ_~‰‹³3ßó a[¶`aaAÌ­[Xü‡SË:}‚µûàQtut8øÛI7t¡g׎Ø5°ÅÌÌ]Ýê¢éU«V¡««Ë† jŽâ5 WggúΖŸ~"2*Šä»w9xø0Ó&M¢Cûö˜c× ºVÄѾš<îóùóù~õj"££yäHBÃÂøtÎ …ÆOL\ÒL:•õë×sàÀJKKÙºu+£G¦k×®XYYagg€™™ŽŽŽ,Z´ˆéÓ§“““C`` #FŒ {÷îX[[×\«Q;®Ç²äÇõëY±f º::ü¸~=ý{õ¢o4¨_»ú°þþü¸nƒÆŒA¥RáþÖ[¤gdðéœ9\‹ˆ Ð_ós½ìììÐ××g×®]Ìš5‹•+W¢§§ÇúõëiÙ²%#GŽÄÙÙkkëš ,00­[·2hÐ ÊÊÊxçw000@­V“‘‘ñRÖÃÊÒ333~¿vá!!¬ßº¶î܉…™…„àѰ!¦ÆÆ˜W¿4úûsððaCfVÃÆçJx8+Ö®eÚ_Ò?š„‘‘¶¶¶¤§§Ó¡C¶m«fÒÞ½{7ÅÅÅÌ™3‡¦M›¢¯¯µuu=J`` gΜaРA$$$ðÅ_pôèQ\]]Ù´išÁ pvtD.—ãáëËžƒÑÒÒâ—#G¸Ãÿ.Ä×»š2âiíïODTCÆãêõ넆…ñ]h(s-"*6__´µk¿îÊÞÞ===vîÜÉìÙ³k|bݺuøûû3bÄœ±²²ª ÂÙ²e ƒ B(Ò¾}{23êÈöíÛ±µµÅÒÒ²Öí°²´ÄÌÔ”‹W®0bâDÖoÙRãV––L ¡‘»;&&&˜üÅ'üöƒÆŒáAv6CÆãZDD­ëú,üáu•R)k6mB­R±fãFöëGïîÝ©ocóÈ^ðoQ§‰Fÿþf¤¥¥Uó³5›v2fÌÚuìþÈ5¥…Ù+PüC—¿êõw}ÿ~Ý_¿´´´‰…+r‘vüýwUreY÷°©gÿص//ÂŽgÉæ”æ`ïÚä…ëýwü“ÿÝ¿¶#åö¶Î/ZíÇP[vüq]Náì=š¿p½ÿŽZ_ô;Ø[?{€ú‹ÀóÚñWÙ§AKK‹¼ü l=šÕJ‘{m>K¿¦¤ «ÖöÚö‰¿Ê‰ÄÂZ+rÿã>²J’‚<¬,_í@ëŸþ_jµŠÔôŒ ŸÌäÿ¯x°Ê„šM¥½hüQÓô2[‚ÿzïgéñ÷ß½jm̵aÇ˰ñEÙñ²×çoì¨ <¯ÿt½&P›k IÛjûYÒ”-/ûyø·ø§ÿ×óf¹Ÿ`ý~íW£ê4ѨR©D[KEqþ£óÕÄå%ÈÕt%š-xÑÉ*QUê¢PÈþùâWJ…‰¸¼Î³;TŠË{Þê"*%—ä½l5þ3*%¯ÇzˆË)ÖªÛÔ‰ˆ’ü¬:O4úzí!:T)äµv…LŠ\T†Zýê×a= Ï«ÿ¬v~¼ÝFó…¢/;÷ýŠL]…–•᣿Pꂺ>Zš/°~¡”¡¥_Ž–¥á?_û*C&‰5ZfN/[“ÿÕíÇŸ·ºˆ2S´Ì\_¶ÿrÙë±åú¯ÇzÈ”`eXç¬7{È¿¹‡ 6h™i¾¾óEB­R¡.Éú×rO °A -¯QXT‚©‰1¶6Öd>ÈAQU…©‰1i÷2 ê"±„œìÌÌÍppt@ £ƒ¶Zmý—¢sFÆ=$ ..®¨Õj233pqqÅÈèɃ$$1÷144ÂÕÕ mm]T::hë¾ôœ¬„B!öö’–’€ƒÿ(Ÿ›“‹¦ÆF´/m= ó)**ÂÆÆkëz$%Ý ^=llž]7”tµZµu=lmë#ÐÖ~iëQVZFnN.Ø9Ø‘z7…B¹…9öÏ®oKKIC.—ãîᎾ¾>öK[±XDffÆÆÆ8;»Öø‹‘‘1..®O•ûÃ? quu©ë!—ÉIKMCOO†Öø‹®®.=ž)››“KYi ì`ieYmÇKZµZMRÒ´´ª PTTÝéܤI³gÊRXXð§ª?¯4uZ]ZRJ^n–ØÙÛ‘šœŠ¢JQã#Ï‚°LˆX$ÆÞÑa™ð¥î!"‘ˆ÷‰?¾$1……¸¸¸™y+«z˜˜˜hdÑÖÕE ­ziÏï¿A~~%%ÅØÚÖÇÒÒŠääêŽøêï-Ÿ‹K»C‡ -Íô±µ¶DKK‹s¿‡Ó«kG*+¥ÿ,ý’±}Ï!ZZ|ûÃzšxzðå·?âê쀡¡©÷2ðöõæÐ¯ÇQ*•|þñçtéÞ}m:˜jdÁ#"®!“I¹w/¬¬ JJŠÙµk;ÙÙ8p`7EE…üüóV6l„M} «ß$¢¢®“¥¥%R©”[·nrùò²³ðÝwKhÒ¤96Ö–¨udèÖþz|l<"‘ˆÄ„D„eBJ‹KÙ´vUÊ*–,XBýõYøÅB¼}½±°´Àôa{qB|7£ob``€®ž.á—Ãqqs!.6ŽÉ£&£§¯‡÷[-P”+00úç ì¿"%%‰²²Rbbn<$>-&4ô;lll=z ï¾Û…aÃúÔccc,-«‡ ¦¥¥Z­ÆÊÊš3gN0thZ·ÂÈÈ++k*¥ùþ‚ËÿŠ™ÈÎÌæN”J%y9yìܲ¦Mœ†_+?&Ž˜ˆgOLLL°±µªƒâð+áH$ê7¨Ï•‹W¸›ï—|@ /7¯¦^T–T`hlSëv’˜x›¬¬ ¤Òj?9{öEE…|óÍ\\ܘ5ëêÕ³ÁÄÄ;»êBï’’b._¾HII1ŽDEE T*ÉÊÊdïÞŸ¸pá4={ö£RRˆ¡•Y­Û!‰¹~ƒ²Ò2D"wîpëæ-âؼn3Æ&Æüï«ÿ¡¥¥…©™)N.Õ§µ•••\8sìÙ¸¸¹pûÖmr³s5p =2÷Ó¹ ;œÊR!†FµOË¢T*9þôCâÔR¢£#)(ÈçìÙ“=ú •••„……R\\„™™nn kdÏœ9NZZ îîÜ»—Fqq!}û¾G«VŒýcÆLB!-ÃÀʸVêsd< '+‡Û·n?âºzºL ™Š ?†O I³&›×øDvV6ׯ\§RR‰m[._¸Liq)ßÌÿ†Kç/Ñ«/†öŠ¥…%s?›Ë{ÝÞC_§ööÂÂ’“ï™™Q³wœ9sœââ"¾þz>®® ùâ‹©ØØØbbbŠ]õËÓ“|¢¤¤˜\ÆæÍë>|,‡dòä14kÖ7·†T)*kmUˆ¸qýR‰3Kô kßÿ ärK–,ÀÌ̂ɓGÓªUBB†ÑªU&&&˜››#.I&—¦––bI%%¥ÜˆŽ«Û4 F æNrÁÞF*•ÑÚ߇Ș[dfåÔ\óٜϸ“p‡>úÔ8•¦0wî§Œ=¨¨ë\¿~SBB¦Áˆc‘HDx{û²gÏOH’ÁEGG°`ÁèëpòäQJJJˆˆ¸Êˆã°°°D¥Ralüô“®ÚÀÊ¥+Ðu¿Ÿÿ›17‹ÅÌ\0“s'Ï1yÚdòsóéй»wìFTQ͈œ“•ØÆ`ccÃ/û~AZ)åÂÙ ˆEb.ž½HÓæM5jÀÏ?o#8¸§NãîÝDîßOçÛoWràÀn>ÿ|>iiwé×ïvïÞNiiIÜ{ïáêêÆž=;P©Tœ:u”ÔÔdúôyŸýûwÕ¼Ñk gŽŸ¡kû®ìÿy?©É©$Ä%0û«Ùܸ~ƒÁ##ªÑ)¸Î\ =íOÖÿ¡}‡¢§§Çéc§– ¹tþé©é¢£«C‡Î4jÇÍ›Ñôìù.6¬&55™7®3n܇”— iÕ*sss|}ýIN¾ML̹O>™Hqq!‘‘ádeerãÆuªª4kÖ‚¤¤D¦OŸ¥Q;²³²éû^_–-^Fjr*¿ŸÿÞzcgo‡µµ5Mš5ÁÍÝra9gOœ­‘ûfþ7ܺy‹Ô»©$&$’p3¼Üùd"¡¡›pvv%>þ&½z3yò(ÒÓS°³³§²²: j‡X,ÂØØ„áÃÇRZZB×®=Ù²%Œ¬¬Lœ4Ûö:ká,Œ°Lˆ¨BÄðþÃY²b -|Zphï!ºöêʺ•ë¸qý<«YÚ+++ñné“«fæfL™>…Õ?¬ÆÈ؈; w¨ªªbø¨!µc„˜9s>"Q*•ŠÞ½;1gÎ"Ú¶}›óçOÓ¾ý»NŸ>NË–ÕD%%ÅxxxòZZZÌœ9ŸÄÄÛ´ió67oFqêÔQZ·n£Q;ú¼ß‡UW!­”¢P(?d<Á=ƒyèûÄFÅâëïKEyÇ~=F>=ªí(.ÁÕÝ•æ>Í161fâÇ9uì®î®2ó㙄ý¦Q;Z·bÆj²ÓV­Ä|õÕ,ÌÌÌùòËo¹?F¼pwoȲe‹?¾šãªú-݉®]{allÌàÁ#066æ÷ß/¢§§‹§§æƒw''¶ïߎZ­Æ¯µ[Öo!!.Ð͡˄Ø9ÚÑ÷ý¾ôîÔ›KªIiKŠKðjêEï½ÑÕÕÅÁÉÂüB2ïg2*dKq;tuuÙ³ç0ÚÚÚøúúsæÌ 6n\Íî݇ßð§ae¥ÍúõÛ«í()ÆÊÊšÞ½û×´««ÕjÞzË+++æÌùôîúbÐo`?VnXY=íBQÅØAcéÞ·; æF ¾¾K…ûíÝzw«Öý¡O4mÑccc&M„…eíŸB? mÙ°á' ‰˜/¿üKK+,X½{i4nÜW~øá[Æ›\mGI1ŽŽN÷ÀØØ„!CFU“‘¾¼!á.®., ]FUí’ß¿ÈdR èÊüùßкu[NŸ>N‡8uJÊùó§iÞÜû¹RÛu:ExääyŒŒ I¼›†ƒ}}N_¸B©°œŽo’›_ˆ·¯7—®D`dlD|l<¼!P)5–"ŒŒ¼FûöïbcSŸ™3§Ø-þß IDAT>$t¼ìÿµwÞaUkÿCïH)Šˆ¨`/Ѩ±+öKb,Ø5&jr“ë5‰&ÞDKŠÑ¨ñÆÄ˜ˆ QƒF° EAºH•Þ9Àéß(Šb‰ÂAüÎïy|Ö]fvßÙÝ÷ÌìÌ[ÄÕdgßF&“|CC#ÆŒ™€zzzÄÅÝ <ü2……ùhhh²yó$ ‡DOO±c'¢«­©Ò%B77œ]œùüãÏ)È/ >6---ã1·0çÈoGP¢dâô‰˜¶0ESS“ÌŒLb®Åp-âmÜÚ°øÍÅlÙ¹…n=»‘Ÿ—O÷ÞÝiÓÖE…K„ XXXСƒ7?ýô‰‰ñDD„affÆÕ«Wpw÷dïÞ(//cúôÙXZÖ,Ë””“˜˜ÀÉ“¼úêüüãç7‘}ûvQVVÊ”)3±±±Ué¡R¡¤gŸž äÔñS¤$§`dlDTxN.N:pˆÂ‚BF“KýEuu51×b<HïWz³xÎbLRBÅ…Å = W•.æåå2xð0¢¢®²cÇW”——£¥¥Ell4VV6%'ç6ýû¢C‡ŽBÂÃ/x _ßîlܸ++þüóW,XŠ]M ^U.Þˆ¾ÁØIcÉÊÌâÝ%«‹L.#9!#BÏ…’–šF—®]èÑ»úú„œ !èxžÞžìÛµqµ}}n¥Ü»‹7½úõRéá¹sg˜1c2™Œñã‡Ñª•大ßB rýzII ¸º¶càÀšAŠ™™9gÏqæL mÚ¸|šë×£ >ÝÙ°áClm[¢««Gzz*C‡Ž <ü ]ºøbggßèK„q1qŒ;¹HùÂ/ŠÅÕ8°cc"#ÃqqiË?QYYÉ´i³07· ²$-­GÏIÕ·Dج>ޝ¿ÛËôÙÓèòê€:ÇËórÑQÚ¢­kÔD’5 Õ¢"º¥è›™5µ(Ï…L,F”Y‰‰…cS‹òÜ_ÃìNÄûæLQRfVªŸjhŠòo`ÖFõYš¢”4Ì̽šZŒç¦87“6–Í>$‹ºyz$•"Äy ŒZ4o=T(ää§üÕ0Får·Ò3iΰ$é“ ©Q£F5jÔ<‰†Jör9œÄû ›#–fè”efÕ9^]^Ž ÕÍÀmôqH%•(µ¤ÈîLI6W2âòjŠæ? W•=ô¾5GÄÅ”‘ÔÔb<7bQ e™Í+¢t}ˆËË(“¿ Ï£€ò,i³‹òý ê>äé‘K$H+d(¥Í»ŸR*(ž!LC½¬¾=}éîãýÜB5%;w@¡Ô¢•}Ý¥ŽÆÌ#¥JT™‹°1‘Š«)‘ßÂÒ¢y·àv± ;ûÆÏEØØÜ®ŠÆ®™$i}·óÅØÙ7ÿ¥ÎÛ’XìÌ›ÿóÈQVaÕÒ­Qrª’—©i¬\„w©®,o¹Ÿ„B!'±$õ×{¤ÅVy…èyäQ i·‰ŠŽÅÁÞ–N^ýBeU_éIQq)ÉÉÉœ?ggg^y啦8H^~>ÃF!—sòÌl­­:hÐcëåæåqìÔ)¬,,1dˆŠ¤}4ÁÁÁ¤¤¤Ð·o_¬¬¬øí·ß022b„ OUÿÂ… XZZâ쨷áGŵ˜:w숗‡»þ€7¦ObÝÝû÷£P*ñòðÀ§S§Æõ±$$$‚««+½{÷æ—_~A$1qâD qú·ß~£¬¬ŒqãÆabb¢"‰ë'+;›À3g°³±aÈÀ;uŠÜ¼<†ôجöwõx!t¤´´”C‡ÕêÄùóçINN¦OŸ>´mÛö±u/\¸@bb"½zõ¢]»v*’¸~ »þ@ÀìiÓˆˆŠ"*&†N^^tòz¼]XTt4×®5™~ÄÇÇZ«ÿûßÿ¨¬¬|*HNN&++‹~ýúqóæMÎ;×d}HæíÛœ:{öžN’›ŸÏ°Aƒ°yŒNääæÅð×^àäéÓtpw§¥ÝãƒÿäJx81qqøvîŒ[Û¶ìýå444˜9åÙ=Ý›u˜†+×èáãÍ’w×3jø@’o¦2Ño8Q×ãjËœ={–þýûãççÇ‘#G05T]þ¨ïöìÁÞÎŽüÂB$ íÚ¶¥¨¸}}®\IiY+-"'/ÌÛ·±·³C*“±ï—_(,,dØàÁèësúÜ9 iïêÊ¿>úccc:w||å†ä×_ÅÐФ¤$ììì°´´$66–N:1iÒ$:uê„€ØØXÜÝÝ‘Ëåüþû蠟§Ó£G<<<øþûïY¹r%|òÉ'Ìž=gÇ*kGÐ_!“É‹Œ¤g×®hhhÁ´ ðêÕ‹åþþTVWÓ·G.……ÑÝ·&LÉ  â“’hצ C â?Ÿ~Jß^½Øñãüüý÷ØÚب¬ aaa¤¥¥‘’’‚¯¯/eeedff2tèP^{í5æÌ™Ã7˜?>.\`ÈÁÆÅ‹ ¥U«VŒ7ޝ¿þmmm‚ƒƒY±bÿý7#FŒPY;’nÞäï‹ku##3 MM|:ubáÊ•DÇÆrüÔ)¶nÚĹ ˜®\¹BFFÉÉÉtíÚ•òòrÒÓÓ>|8dîܹįÆ2wî\BBBxí΀#44”‹/âààÀرcÙºu+¾¾¾lÛ¶ ¡PH¿~ý=z4{öìaÚ´i`nÒxžÛ‰ÉÉ„\ºDµXŒ›«+YY…B|;ubÁŠDÇÆròôi¶lÜȹ& @\BG±03cúäÉìÿå\œ9xø0Qׯ3üµ×8täk×­cë¦M>ÀÊËËãÀ8:´¤O§Žz­†@,‘ð÷Å‹Œ>œ¾C‡2{Ú4t´µéìíMXD]¼;>SЧfíÎ1¸o¶ÿx€‹Þļ…)i· ¹^ `üøñ|ôÑG|üñÇ8;;«T¾öîåó¯¿ÆÆÊ [\Û´¡¥­-‡eÛçŸ#–H8Dn^¦wfB.]b÷þýLŸ4‰´Œ tuu±µ±a’ŸeÈ ÌT à~:Äš5k°··ÇÒÒ{{{zõêŧŸ~ÊÁƒ‹Åüý÷ßÄÄÄ`sg°‘‘‘ÁÛo¿Í¼yóÈÊÊBSS“V­Z‘””DII žžž*mÀ™sçxkéRhajŠY‹L›07/æl@b‰„Èk×¾pG‡ÚzÃ&L`éüùä T*qlÝš¦¦Ìã V}ðGŽWi;ÂÃÙ7oÞhó-°°°`òäɼ÷Þ{lݺ 8qâöö÷¼w¦NŠŸŸB¡‘H„½½=J¥’äädŽ?^§¬*¸yëËV¯¦¸¤„¦¦ØX[3jȾ۽›ÙÓ§Ó¹cG2oßæðÑ£u¾Ô¬XAooìllÈ/,ÄÆÚCCCòòò½t‰…o½¥Òv²zõj¢££iÑ¢ööö 8   ¼¼¼3f EEE8p ‹{ÁC׬Yƒ¥¥%;w&-- ,,,077'44G{¤Êårþ½q#'‚‚hajŠ£ƒ=»u#éæMr9KæÍ£Z,æÇýûk¯>Û²…ʪ*†D|R¦&&´05eæÔ©ütà@ml¿ÆäêÕ«Ì›7CCÃ::±fͶoߎ™™ œ>ž×_lmm™1cFmgabbÂùóç±´´ÄÆÆ†ƒòöÛoÓ£G èß¿?-íì¨.+Á@¿ñcÊTVVâ`o‹“—®^¥¬¼¼&_^W®^eî¬Y\ C,]°=Ýš˜'®..œ9-MM:xx°ã‡˜3s&§ÿú ¹\ÎÒùó1Ð×§¼º#ÓÆÐY]]¹¹9žžžÜ¸qƒ›7obhhHAA—/_f̘1dddPZZÊÂ… 1»çÆÍÍàà`ª««éÒ¥ `ìØ±RXXˆ¿¿?”åadÐø¶X©]|;w&#+‹Ð+W°¶²¢¸¤„°ÈHºvé‚PCƒÔ´4æÍž];pòpsãïÐPò éáëËñS§°³±!19™×'M¼f»¼² #8Èård2}ûö¥¤¤„?þøgggJKK‰ˆˆÀÞÞ'''"##yã7hÓ¦&Ùs‡ ­µe ÁØØ///˜={6®®®”çc¤ßø•J%¥ee¼öê«Èår¾Ý½/*D"¢¢£ …¼Ò»7gÏŸgÆäÉtð¨1SèèéÉå°0¢ãâз/±ññ!‰8ÌÔñãéäå…HTŠ™AÃ`î׉˜˜RRRê脟Ÿééé”––²hÑ"Z´hÜÓ ±XL—.]øùçŸéÔ©SíHÇŽiß¾=ÁÁÁ 0€þýû#©5Zr¿N¤gfr),¬ŽNt»cŠ‘–‘Á¼Ù³±»O'·†RXXHw__Ž:EK;;LŒŒÐÐШ5w(+/§“—ææH¤b”ššèê=ÞíYËåÈårzöè†TTž ú©çA!—“šžNvNá‘‘Ì™1ƒ‹W® ­£Ã·ÞBGG›¢âlu Ñ»|ýÝ^fÏžMŸW‡×9þ2y€¼4^„™·°´hþF—·‹ocçøx&Ecgåðä‚/8·ó3°k£ú¥è†ævJ,væ-›ZŒç&'7 «6j/µáÓ£PÈILºŠ¡aýÏüÍÈÊæÌ9Õ/ß4$YÙ¹M-‚5jÔ¨Q£æ¥ J$R•z©5f-LÐÈÈ̬ë…S]^Nzh¾Aâä”U6ƒLš¡&Ðh%bEóþª¨¨*D‘©:¯¯Æ¢¢¢ Íÿ¥BTòr<ò"òfíð €HT4+á¥4úòô!2Ê+‹í2‰Y…„Ji3N CM Ñg¡^­uqr ¤´ü¹jjŽž<‹G—NÙ?°ô¤Î#õB!‹A^‰ÑK‹PZ\õðûÖ ‘V)1²rmj1ži¾ôåx)FæÍÿyÈ”`زùç"T÷!OÏË”‹PTšþë=ò³H.—?—@ª øÂeÒ3n£§§KGO7Â"£©Ubkm‰T& ðh ñ±ñèè1kά&•W$ªà‡¶#‘HèÛwYYdgg‘‘‘Λo. M›Gÿˆ†…]äܹ³hkëðæ›óiÊù‰XžïöPYY‰›»š$Æ%’“ÿtíÑõ±õ¥R)?îøOoOºví¢"©F©T²oß.ÊÊÊ033ÃÙ¹-áá—),,À×·C†<>&ÔÊ•þ8;·¥K—®tïÞKER×ÏÑÃGIINÁÀÐßî¾\¾@YiNL9õ‘õÊJËøîëïÉdŒ?ŠöMkCzž‹/ ««ËàÁà :Aee%ººº,Z´ò‘õ²³³8|ø UUUhhh°lYÓz/Å߈çßþ@SS“IÓ'ð{R©”Ò’R>øäƒGÖ“J¥üôýOˆ*D8¹81rìHJý0yy9|ûí×ÌŸ¿„ƒk<ªãÙ²eçcë8ðEE…3mÚìF—õA~àÖÍ[âÓ݇ Á(--ÅÑÙ‘)3<²¬´ŒsgÎQZRÊô7¦x,ø˜xô ô™ùÖL¶ †s\º‚®®ƒ åôéÐÓÓgáÂå¬WYYÉ•+¡\¿É’%«ÈÌLçÿÛˈ~¸¹5ÿ  ‰\.gß¾]”——ammKË–öDE…SPO¯^}éßÐ3}4ëyg#Cú÷éλÿþŒ}º3mÂ(¬ü/v¤gÞÀÐØ‘cG2{òlFŒ‘¶ê†&«W/ÃÔÔ‰DJuu%#FŒ¡wïWˆŠ ççŸw³eËN¢££X³fææ5ñqŠ‹‹Ø¼y#ºººxxxѶ­û÷ÿȸq“ñöî—_~Fß¾ýqk뤲v|±á $b Y™Y8·qÆÝÃ/*++Ù¶y¿þŽgGO& ŸÄü¥ó¨ªªbÓG›044ÄÈØˆ1ÇðÞò÷øvß·ü¼çgN;…¶Ž¶JX{÷î"++ÈÈ«Œ5mmmìììéÖ­5S§ŽæêÕ|}»Ó¥‹kaãÆcllBii «Wÿ›‰‡3~ü¢¢Â2d$]»öPYr!ø©)©Œ3‚¢Â"<;z2Âo3ÆÏ`ÔøQø/÷g䀑tïÓ½¶ÞÛ ¤¸Q…ˆ·ß›U WáÚÞ•øØxÖoZOA~JÛy•={¾C"‘Яßâãã6l~~Y¸ð ú÷Œ¿ÿr.œM·n½këüÎõë‘TWW³|ùj¾új~~“ð÷_Ί pwï Òvdfdòá;baeAgŸÎœ>Ï‚% ˜8m"k–¯Á§»þËýùtݧ5îýH_¹LÀáä29‹Þ^ÄŸ¿þ‰¹…9?îø‘%ï,aÛæm*`I$¦O÷£cÇδiãÊ¡C¿ðÉ'_0eÊ,6lø€³gƒð÷_Î5WwIIIfÛ¶-0oÞ"#¯"•JY²dÙÙ"ìì ™8ñÉ™ž‡“' ý;””äFú¤¸¸÷îŒðÁëã^gô„Ñø/÷gø+ÃéÕïÞÇÐ÷Û¾§¬´ŒŠŠ V½·Šþ+˜·xW.^!7'—éoLgͲ5üzìW&Ž˜È+ƒ^Á¦Eãyt†‡_aß¾]TWWóÊ+¯’ÏС#ñ󛈿ÿ P£ Ì¢W¯~µõŽ9Dtô5Äâ*–-[Í—_~ÆÀC¸~=ŠãǰdÉ*òòr9rä;û6ú+#-ƒukÖáÖÎ…y35êµ¥R‰ƒƒ#ææ,X0‹ktîÜ•>}¼™1cÎ3Ÿ·Y°ÌÍLùü›]|òÁJÌÍ[ð×ß—02ÐÇÇ»áQ5±‰llmxoå{ìØ½;{;ÊóTg[rõê%||º±hÑJ ––VüôÓ÷deeòÉ'›øôÓÿðÖ[‹iÑ¢fšöÆë\½z™ß~;AAA>–Ì›·G22Ò„TW«6„F̵š˜Oë>]‡®®.†ŸæDÀ vÜ ÀW›¾bü´ñص¬Y’ÉÏÍçྃD&G’‘š©©)ï~ø.‚/àäâDËVª÷Šºy3‘s|óÍ´ha†P($%%™÷Þ[A``ß~û5ÅÙ¹Mm½×QT$'))€?þ33 ¼½}ؽ{‰‰q,\øp\ Æ"+#‹À£ìÜ»“V­[!“É(-)eÍò5ì>¸KKKþ<ô'æ–æôê{¯3ùò³/9ræ …MMMV¾·’ó!$Æ'òßÿKŸþ}ðì¨:¯»ÂÂN:Îöí{ððè@Ïžý …¬^½”uë>ÅÝÝ“°°K¤¥¥²iÓ×µõvîÜÊ;ïü ''tttyó͘™YÁѬ_¿Iem¨Ut"ˆm»·Ñ½Wwºö슙…+æ¯`ö¼Ù¼òê+dedqøàaCkëíù~=ûôdàèéë1vòXÊKË©®ªÆ®¥e¥e*m‡B¡àô铸ùMâÕW‡Ð©“/NN.,Zô&¼ÆÄ‰ÓP(¼ÿþÛ\¾[[ïàÁý˜™™1oÞb”J0`0J¥‚­[¿çÛo¿QÉjHfFfNü´ûÖöÈerJŠKX³l ?ýöææüùëŸXÛXÓ£÷½¢-Ÿnáø¹ãÈd2455Yõþ*ìì‰'7Gõvˆ5:qŒíÛÂÝÝ“^½ú!X½zë×Fûö\¹Jff:cÇNª­·cÇW¬]»ŽÖ­ÐÕÕeÎÌÍ-ÐÐÐäøñ?èÜÙ33‹G]ºA‰DÂo\ÓÎÀ>-šššhii³qã:ΰsç— 2GGgŠg{‡ë Ó°ùãµèë¿ø.¨r……BÖx$÷ï‡E\ǶUKl‘+ähkפÈ——£‰ *0P‹«ÑÒÒ®3µøà±š}­Z×e…BŽT*EGG·þsJÄhij¢‰QjU¡¥‚ç$KÐÐÐ@CóÞìŸD"ACxï˜D"EC(¬ÝW*•ˆ«ÅèêÕm‡L*CSK©DŠ@(DˆI‰]ƒÆ·%“ʤ NüšÕW¦ªªf:¾>d2)J@KS‹Êª,•ØÄÉdr” ZÚ÷d”Ëî¼ûwŽÉerä Ú÷•©®ªFGW§Ž‘qM99BZ=©Ì/Eß°ñÓÿ(5ñ£´µuê“ÊdèÜ9öà>ÜÓÝý R©¤Vw*E9è[4~{椛(W(¾PÈÄbDòJL^`#÷§ML¤(®ÀÔ^5©(E•S+—¦ã¹QäWcªâô?B¢ÀÔ\5Ï£¾wýÁcÿ4Q×ÝòJ¥“—ÀÈ]݇<=eRvvö„…Å7Ú5TÁ‡¾‹LöÏcƒ6ï7½™q…5k–Õî¯\éOtôÓåjZ½za%Zƒ ª±tîR¶þwë#ËT”W°ç»=5Sóª6‡ßÓòÓOß³oß®Úý!Cz7z²Æâõq¯“û’Ä„»v-‚U«êÚsDG_cåJÿ&’èa*Ê+Xä¡¿Ÿ>öÉ•žÀ;ï,&**¼¤ûg¬=ï¿ý>+ýW’•‘¥òë76J Z,®÷_\âÍzë4kq+´«‹IDAT¬'pø(¿üq’_ndxÿálÿq;憗 ýI”––°kׯŸ‚X,fïÞèÖ­_|±;»–ØÙµ$,ì àöíLlm[âààˆ••5qq1ìÛ÷_~¹‰õë?ÃʼñSgüSŽýq W7Wã9sò kW®e줱¡¥¥EFZáW±´´Ä«“¦-T›´úiÉÌLgûö/™:uÛ¶mæÒ¥®^½Ä¶m_"À[o-bþü\½šÀ®]Û‹Å,]úNS‹]/‘W#ùeï/äääеGW.‡\&<,œþûÏÂå Ù¶y¦f¦ôìÓ“‰Ó'6µÈ¤¬¬ŒØØfÍšÈüùKÙ¹ó+:tðæÆhæÌ™ÊìÙóÐÓÓã‹/6°oßá&‘ñÈ¡#xzyr#úAǃøü“Ïùvß·Ì™6‡y‹çqîô9233yuð«ü~ðwöþ¶—×ǽΒUK8uü"‘ÿeþûãInI =¬AäJOO%;û6ãÇO!0ðÁÁ§Ù·ïGd2)sç.bþü™Ì™SóÁ7sæ[„†þMXØE¾þú |}{q…N| „…]Â×·;aa—X°`—.…°}û._¾È¢EËÙ¶m B¡7ßôgÁ‚Ytî샷wfNñk¶<‰qCÆñ¿#ÿÃÎÞŽ^^½Ø¼c3{¾Ûƒ‘‰ƒ‡ &èx7¢oл_o¾Ùü Æ&ÆôÜŸÈ«‘ü°ý’’jôbË6LLMèݯ7»vîÂÚÆ+k+þõ¯G{³þSJJЏ|9„¿þ "&æ±±×Ù°áClmípqiË_fÕª÷‰*ؽû{<=;PXX@zz£G#<ü2Ê;!¦¶¶vÄÆÆ°wïlÞ¼‘… —óÍ7[pph¹¹ÑÑ×ËeH¥R~øö‡k@R|c'Å®¥3'ÌäMÿ79öDZ½FSRUU…‰‘•¤T*lÙ¾›o·|ôP—zk¤ß®\¼ÂÚåkq÷tÇÑÙ±©E¢U«ÖìÜù5»víÄÎÎss ºuë…X,æÄ‰ òñòêćn$//—õë7±xñÛŒ9ŽÒÒ’“›¸#•J9~ä8‰ ‰¤§¦t"Q…ˆ©3§rôðQJŠK015áTÈ)r²UŸ¬úŸÒ­[OÖ®]Î_ M›v¸ººQ^^ÆÙ³,Z´’µk—óÙg±`Á²'œMõd¦g"“Ö„*©¬¬¤¸¨¸v››Ë䓹y³§Îr+倈°ˆ&–º~ªªªÈɹ7³PPD"®Ý,\¸œõëßãßÿ^‹¿¿êîG*‘r"àñ±ñ¤ÝJãLàrsr‘Ëåäfçt<ˆî}ºcmcMyY9¹Ù5ËÉÎÁÄÔ„Šò œ]œiïÑwOw|{ø6˜l}û૯¾cÛ¶-DD„qæL å( ¢¢ÂÉÍÍaîÜÅüùç!|}{ ¡¡·w~j<>ËÊJ‰*îèA9íÚ¹söì),XF@À!Ξ=Eii1B¡ˆˆ+ܾÉܹ‹T6£¼¬cc ¨®®ærèeŒMÙúýVFމo_Ú{´'1>Cº÷îNÐñ ¦¿1¨ð(Ξ:KjJjM;Â"ÈÍÉeȈ!|¶µá¢·kçŽH$"33ÄÄxD¢ ÂÉ“GY¸pëÖ­aýú÷X´h'NA"““s›´´®_bÈ\¿É!#9q"€Ñ£ÇSTTÈÙ³§ˆŠºŠ@ 22ŒÂÂÜÝ=Ù¿¿ñ>@ŒMŒ)/+çÔ±STÝÉÍ÷2 ¨‹IIMçzL|Í¿ñ•<ґ㥞Áø`ÃL=•¨‡§Š›{{||º¡££CVV:‰‰q;öS¦Ì$.%øúvÇØØ@ÀÁƒû‰DM-öÉÊÈ"òj$×R®‘–šFG§Ž˜˜šx,Çš¼v>Ý|šXʧÇǧ‰‰ñlذ™®]OrâÄÒÒnáãÓ[·’Y»ö?øø´cÖ¬¹µ/oM‹9þs015ÁÁÑë‘×ùû¯¿*gim‰­-:vÀÂJ5Fÿ”ÄÄ8Ö®]Á°a£qppD péÒ²²2jËtêä‹«k{âãcéÙ³O“È™z+•ØèXÂù™t“^^½pmïZûïàè@̵âcãqusÅÄÔ„£‡5ƒÈξùý—ßéÚ³+ŽÄÅÄqãú l Ÿ?ﯿî'!!Ž×_“>xGÊË˱·o…·wd2üñ+­´lيÇÒªUk:tðfèÐQ=ÿ¡Cÿ£U«Ö888rëÖMÚ·÷Äǧ&DÈÝ­ªX¸b!;·îÄÊÆŠÑãGãæéFÌõ¾Ýú-NXÛXS\TLRB%Å%$Æ%âàè@ȹŽýq cc°±³Á³£'VÖVħ{ãý~½öÚ0¾øb-Z˜!•J‰‰¹Žƒƒ#½zõe×. ðööÁÁÁgç6acóhOìÓ§O¢P(pppÄÎÎOÏŽ8::säÈïú<ânÄqåâæ-™GÚ­4òróHOÉl´ë5ùE,]½žÜ¼Þ˜>o>:ÎàKìyúìi˜9:±é£MlÞ¾]&5P,//£  KKk99ÙØØØ’““]ëÅ"Uàää‚¡¡))ɵûyy¹XZZSP‡……%ZBÙ eä.KH¹™‚›»‰„àÓÁ¬X°‚“ŸDß@ŸJQ%úú‘œ”Œ‘‘úúú Ê|±ŒÜss³šçammCttžž‰‰¹†¥¥5ùù¹xzvdÖ¬‰|üñçØÛ× ‹Š¯aö€SESQTXDVF¦f¦´rhE|l<-ÌZ K‰j‚X¦ÞLÅÑőԛ©H$\Ý\ÑÑÕ¡() 3«+áÍ›ITVŠprª Ÿ‘›[£3†TT”ãâÒ–ï¾û###&Ož@Qþ ÌÚ¨ÎÈ]\-&õV*íÚ·C,“z3}}´u´kg+E•ùý½_éMß}ÑÖÖ¦¸°ç¶Î$Ä& ©¥I{öH%R’“iïÙž¢”4Ì̽žK6¹\Nll466v˜™™@ ÀÅÅGG3®]»‰P¨••599· …(Jòós±¶¶A¡PÞùRrW? &©•• J¥ÛZ»Ò¹Ž‡G„B!ʉ˜´Q‘{\L2™ 77´´´ˆ»‡L*£{;´µµ‰¿s[gR’RJ¥´soGJrJ­Ž´jÝŠ„Ø„½hïJjJ*ŽNŽ Þ‡”••RTTˆ££3ÉɉØÙµäöí,ªª*qqi‹¾¾ååe…P^^NjêM ±²²&//÷¾­ yy5«÷ëÅÝ~ÄÑÑ¥¶ÿ022np#÷´[i”•–¡£«ƒ«›+ÕÕÕœ>~šu«×¿FîÊêÞ^<‡ü‚"ró ¹Á؃Q*•¬]ÿ9?lÝðt^„²;‘Л+Ê; ÓÁ§ƒyýûèè6}Þ(##cŒŒîÙN¹¸´­³}ûc1Ý9GͶZÔxù£žmmÜÜÝjþ¯­M×]™¿t>ö5œ™ù=%¾?Z¸L,V­ Oµµmý¼ëlmll¹zõ2S§Î¢eËÓkÐÌܬÎ=¿ûlî§{»:Û™uÄÐðÞ¾µµ ÙÙYèêê2nÜ£#t76:º:´k_s/uttêÜWkkLLMøeï/xwñf” hëh×þ  ƒ÷½©ZÚZ´÷l¸¨úµïï]îîK¥RV®\‹Í½Puÿ_WÄÚºnHû¯Ó¡CÇg–ùyxðÞ=˜¡ÀÍíÎÖ‘ûŸßÝçÚЛ`l\Jän&3zÜßgÕ¹¿wû…{Û{}ÆÝçr?r·ÿh Z;µ®³¯««‹kûæŸâ©>¬­,;bðËÕ;À ½ÁÑ“=Cîè‡ÂÂb„ÀÔiWT «®F ¬¨€5W¤b ªjÛõ¢¡§¥É[sg=Q>¹T‚LZ¸JµAŸ—w~°%Õ÷rvÊ$’öyüdRq³{f¦FL?…¬ ±¬ÆîC&¿PÏÃÌØˆ k¢B+¥ÄRÉSÕ“I$þ<–.^Úè×I«‘ˆDÍ>Ù³ºyz$••äæf³hÑv Uq¯ö­ùóøªœP*)¯¨ßŒ§Þ–{»6øx?œn¢¤´œÓçB˜ä7üù%Võ„‹)D•ó&•UUè4’Ž8ûv£œWÕ”Š^·ÞÒ„Ò¦¡A(Í*lj„Ò„k¦÷Y)]ij„²Ä¼¦¡Aòr´·1ª³í¿6øySR3ÈÈÊf@߆³'S*¡ºZ\'8ó]:··å\è45„ê?‰`Æäú=dë`™š×;"»›Kn^a½¨y4¹\þðÈW5jÔ¨yI tô|Ø<áy©U¢©©Iïté¹ÎóØ–g{WÞ^<§Ù%ªQ£F5jÔ< B!o/y w·ú=üŸ–z—Š{KÆ ¥²ª…BqÇkB=Øú§(• W¨—WÕ¨Q£FšçE©TÒNœwÇ>³§G_O·¶Ï~VчXÆÆ†|òÅŽGºº8: “Õ^Mýø-€˜çœjT£F5jÔÔØIõïÓ½AÇ"R©”O¿ü– QåCS(”´ui]O­ÇóÐkÝê¥èë5]Bä—‘×á©F5jÔ¨iz´µµùתEÏ\_CCã¡c °ªªª©z [´5jÔ¨Q£Fš§G@GG—„”ôÇ”J$h½€ImÕ¨Q£F5jTT*EKëñ±@utt;,W7'ž43»€.ÝPªC¨Q£F5jþŸ!—ɹ‘˜Š…écËÝ5Š×ÈLO~ò™µL(+Îiöù—Ô¨Q£F5jþ)r¹”O3Ý' †¶¬”¶zØjþa„hi>6l–5jÔ¨Q£FÍK‰R©D®P¢T>!ä’’düY_ˆcž…¸IEND®B`‚fox-1.6.49/doc/screenshots/Makefile.in0000664000175000017500000003352712130340141014503 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/screenshots DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(screenshotsdir)" DATA = $(screenshots_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOX_BYTEORDER = @FOX_BYTEORDER@ FOX_MAJOR_VERSION = @FOX_MAJOR_VERSION@ FOX_MINOR_VERSION = @FOX_MINOR_VERSION@ FOX_PATCH_LEVEL = @FOX_PATCH_LEVEL@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_BASE_LIBS = @X_BASE_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ screenshotsdir = $(datadir)/doc/@PACKAGE@-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@/html/screenshots # Icons SCREENSHOTS_FILES = \ adie_colors.gif \ adie_edit.gif \ adie_font.gif \ adie.gif \ adie_sty.gif \ analysisview.png \ aqx_linux_visualizacao_peq.jpg \ arithmedrill-screenshot.png \ arithmedrill-screenshot_small.png \ boskalisday.gif \ boskalisnite.gif \ clview_icon.gif \ colordialog.png \ cometassay.jpg \ contact.gif \ dlgedit1.png \ dlgedit2.png \ dirdialog.png \ emso_screen.png \ emso_screen_small.jpg \ filedialog.png \ fontdialog.png \ foxcalc.jpg \ foxcalc_prefdialog_01_small.jpg \ foxcalc_prefdialog_02_small.jpg \ foxcalc_prefdialog_03_small.jpg \ glview.png \ goggles.png \ imagedebugger.gif \ pathfinder.png \ pdiary.jpg \ printdialog.png \ replacedialog.png \ SbSScreen1.jpg \ SbSScreen1_small.jpg \ scenegraphnavigator.gif \ scriptolutions.gif \ searchdialog.png \ iims1.png \ iims1_small.png \ iims2.png \ iims2_small.png \ iims3.png \ iims3_small.png \ rezound_thumb.gif \ table.png \ tmp_vision_snap.jpg \ tux_small.jpg \ udine_physics.jpg \ vorhour1.jpg \ vorhour1_small.jpg \ vorhour2.jpg \ vorhour2_small.jpg \ xfe.png \ xfe_small.png \ xtc.gif screenshots_DATA = $(SCREENSHOTS_FILES) EXTRA_DIST = $(screenshots_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/screenshots/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/screenshots/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-screenshotsDATA: $(screenshots_DATA) @$(NORMAL_INSTALL) @list='$(screenshots_DATA)'; test -n "$(screenshotsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(screenshotsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(screenshotsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(screenshotsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(screenshotsdir)" || exit $$?; \ done uninstall-screenshotsDATA: @$(NORMAL_UNINSTALL) @list='$(screenshots_DATA)'; test -n "$(screenshotsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(screenshotsdir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(screenshotsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-screenshotsDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-screenshotsDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am \ install-screenshotsDATA install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-screenshotsDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: fox-1.6.49/doc/screenshots/pathfinder.png0000644000175000017500000006027211637250333015301 00000000000000‰PNG  IHDRP²ì>Ï>qPLTEx€ˆ¸Àø<<8@@@|€¼¼¸Àü (,(0,000088<@@PPTPXTXXXXhhdXpxx|x|x€€|€€€€€€ˆˆ€p˜œ˜˜œ  Œh œ    ¨h¨ °¨˜°¬ ¸¬ ¸° ¸´ ¸¼¸¼¸¸À¸¸ü¸ÀÀ´¨À¸¨À¸°À¼¨ÀÀÀÀÀÀüÀȼ¨È¼°ÈÀ¨ÈÀ°ÈİÐİÐĸÐȰÐȸÐ̰Ð̸ÐÐ¸ÐØÐØœØœØ ØÌ¸ØÌÀØÐ¸ØÐÀØÔÀØØØØÜØà àÐÀàÔÀàÔÈàØÀàØÈàÜÈèØÈèÜÈèÜÐèàÈèàÐèäÐðäÐðèÐðèØøø|ø€ø ø¤ø¤Pø¤Xø¨Xø¼¸øØ øÜ øÜ¨øèØøìØøüøü¸øüÀøüøG_7tEXtSoftwaregif2png 2.3.2¦Q‹ IDATxœí½ƒãÈu'öf"¯4Y)Þd†«1 KZì4Õ¼½ä®Éœ ¯}’uº9j­;™tä“âÜÅãÅd/g‚ñ×§ªðUU(øxEÄû±ùÑ øªP|¿úÕ+Ô#à $ü/@ÀÁ§¢· ¡~P öæŸ׌·EDGq”,)¡J,zûç1`Ä­`ج¼ýEqçLæ«íW}Gi÷¬êùsV³ø^Ãâ5ãËkÊqŒ,9¡‚úÿþñŸþñÿÛÿ‡øýÿõ»¿ÿÛßýö·oÿó¯~Å õoÿâ/øCøœâxê–ôE •½Ž”Z§/ö.Þì—ø„ ÞýãgÎÿ_ÿÛßþæ?sÖ”2âYrB½û§ÿGfòoýÃ/8¡~üg?âŸ@¥?–¶ä”·~¬ívl§JûUÜKÙ=ýHòœˆú¢€‹7ûþ¡8?ø,ãÆÛ¿æ¬I‘ÎÞåŒÈÉò{ö.gSN–œPñ.ÿ7û—ñ €ïòË_ýâ—‚PÃEìt‰Æ^Å,ˆª%¥ûGògRÞ=XÿT¾³ºíÇÑÍ‹ŸTv×j˜8J$;ª—lˆ Åøô‡ßýýoáío~õKΚœ9#²·~ÿû˜YrBqùúÃþëïãOÿêíøÕ/þúç?ÿ'Ô—ÃEÉé=Dâÿ—½É»©ÿÈ;Kæ5S‘´A-P­@l0*nUwÏŽ {Ž’ówsí†A€ÿƤäwÿå·oá¿ü9gMÊ1 ûĈcdÉ %ŒZìò«x—»¿1Ô—_ðO J¸þW¤X©že®«ф§4ŠèÛTƒÆOªœ‹ò¢³Z}©•¿Hß¹x³_äOàð;AøåÏ¡F¤ •3âÈ[¡þð1#%÷W?ûÙO…BýÙ—CüûRa‚¬2¦ܹÀ6… ™“>U¢(ßQ5˜¢Pµ:•‹›ÀÅ›ýœlüö·ÿ…Ý~ÿþç?å¬I‘²&gÄ‘·$Bý^âp’þì¯~úÓ¿üKN¨ Q$¿JïùCú¾üN¼-{¡X)ZW>%¢(TËÓk%×ìGúÞ¦ƒ)©ã êoá·œO Ìñ9kJ‘¿•ÄNYrB%#Eö/3 ÌèÏ~úÓóoþ5*!³…PºáRB™ !ÔÔšj¬þ“Ö°‰®‚Pœ:lìös¸cŽÏY“ÅNœOl@—1B&‹€D–œPŸLþñìçl—ÿƒíò—ÿZêßþèGüûQ3Jî‘ö­ Ÿª~/Ùª ”T•鯂té6¿ÐŸ ÔÿÉÜ?fs|Κ¿Ï¦ÃŸþJbDöVJ(‰,9¡~óÛ·o•ÇNb‡ÿõûWœP?ü³ñï‡?Œ¢¦`>)þMïù‹j³]ù‹(·"+ù”lÖ´­`0~!oU>þCm·´Ô|‡ø=Ùèå›ý‚Poó~ÅœŸ¹>s|ΚRF#K•µ|þCÂÅQ #_â¯å+[ÄðÖ<åK \ Ž RB•sŽ@ TGJ¨;ÐD(D(D(D(D(D(D(&B¥+þØ ãg’wã—b'ÃŽÙ.5Pü3S¿€#V Œ{5-3/£IË:ñÅåßžé{4êÈÔÍ9¯ ûÔö³——™iì˜F«•ÊnÉ„”P­Œ.‡V„Êħ´3÷eî¿#ö¸Ó_¦oBVÏr'7‘⿤ø¬š½²úçï%Ÿ4®›Ö>U(Òð¤ÛTê%ß ‡És´ïî¡Lß¶<Ü+òIÊ%íb|™¹lq<¥H¥éÍŒ )# öJjº…R…’M«µ7Y|2×ÙЄîCí©eËPC%ÀqÇ©D¨;½r%þwÊ9!cˆÁ^‰·‚R%ãÀ2;Ê"™î´íÒ“V1C³¨íšÿGè> àúÿ:­P¥ã¹Ö„:ÉK¹"ÇhíX´gª²¯Êƒc‡YÉj ÊvPù˜¯PìÝZ/"TŸ:[þ½7 T‰Ùö„:-%Ç•sH:P³Ùòf©N¨|›a»N¨Ü„Iö”z¡úÙsîÌž‰Cdõeâ›êØ`ÑD(SŠi½öG»cGS<"ón„N¢è9c¨;ùsÆnV6ygö…SB%•Ñ´hÅX‹"¡ÌöL#>iL¦IN¡#qóOéÇ'í`,Y&QÖÌD¨¾@ûö$d¸ê•ä¨Ë(¸˜PéTF¹;TÚ¥ŽØ9UDyÏÌjuûM`Ã&á|0xNB] Ès ö1 BŠ@@Š@@Š@@Š@@Š@@DN¨×¡%$B½#-AC>D(D(D(WG¨’`.µ½i½°ç”½ôý’Ù«’.¯j¹×#¡Î:шƒwiÝß‘\j{Óz5ý\S{ù+–WµÜk™PÆFí2îˆP-íI BUE ¡‚®C8¡ZÚ“,¡Z ·„Rë[‹PRRXKâ€aûWZÍª× åsD¨Ë¢”PžûÊõ.M›rœ T<”÷H·³ûÿûÏ&"()¾Õ`^ÜþÕWÊþj½ô‡ªNP>ôÔí)o •|üéB Ké½”P_IóÕq¿¾£ŒPÞü‘ݺ˨㄂LjÝ@Þ##ü3hÛÅ[ÿâ‹Ì+ >3ê+y¹^Éï(ì}ùe|/û\ú©¡"SÇ!˜òø˜óÍD(xûö?½}ûž<­J(¾çô\[¡¾Ê‡=¿3î×w”*æc”뺞›z1Ûó’$’q”PÚ„ÅL(¦Oüf"À_|Åíâ½âþðY¡rFiŽ wÚ¯ÿ%ŸûòK•Oµ:øÂýÁý³=Æ'ƨ·ÿñíÛ'&…zòôI‘PO£'BÒç´¼§Ož<‘ïåC¾´q¾ú*–¼ÁÊ$x ºC§S„Š¥[þÅsÎüsq˜Fý 3¡LŠöY9¡2F鎬ÿšfú9O&BA1öc\ḃŸ¦š‘l÷\˜/ù ¼/ „ýÌ[øO±FêI¤0*U¨'bŸô¹A õN4NʧáêUô8ÏnnL$•>^˜_ïäu*Jð(e”B¨XŸ2Òc">ê+nÏ]9ßÎùTN¨¯²íJ½@UOM¡ »宨D¢¿{ÊF¥ å¥E¸¯L„bºö6¾±!Ÿ1†zÂìVŽ¡žV¡²öIÍ †Pn”ói.+Trï¡î$·,*?ª‚BÆ‚êïGlc¬QÑîïõ!ŸàÓB}•n—ë%*Àã–øžªJ u§L?ä ð$fÕSi»÷E~3Šq)ÅŒб´¨PE4™å“ø4By…’ •Õe u—Ó¢ Pâ-]¡D¤žBVÆ'>ê+*ã“N¨˜OÇõU²]®W™·ðÏ>û‰\>¤OpW¢P†ÉŒX¡žð]òí,†ò¾Hb3¡øG«R{’å$†**T:ÒËF|*ÿ¼¾_ßÑP¡.Pe~\_C ÆJ"ÔÝBÁ§Ôm¢1>=Ñ5?©PzÐÌòÁÛŸüä_2>ýËï~÷'P¥‡ÏÞ Oå÷5…âÄÊ· mŠ·ÇcÁÂ/Šç3J ežåK&#žh“ÇꯇhÃøZP#†êžBåî_9†Êßïîd‡Hø”µ€4Ôb|zúD‹­æ'b¨BÐVøm]¡²Ê¬PO¤¹-†Šåøi¾ñéÕO£|,h&TTJ¨xLœÏö¥ õTì“ÍÔW¨¤iŠCâkAŸc(©¾&…JG}:¡î ¹ßÉ­ðI&ûããŸxÔ—oŸå+Ý¡~’¡ŽBq~ÊY%—b¹BA<|jòÅÍsJ¡žÆ³}X1TÖ4_ l–¯4†êÐ,Ÿ\_ƒB=–)ÔA¡4>©± °Xä^'”`T¡ A·¤Pÿ1¾×Q¨'B¡tBÅx’p£CE9Óê*T†d¶i–O´MÒLZ¹×‚2…òä[‡Î?¥8­PæóP1¡ôJçS¾¿xàút_˜¬˜—®”ȽϨP"†ª§PO¸×>-#Ô…JÆ‚êI<Û‡·R"k›wæýú޲¥Gêó¥éSÄqB•N—Jÿ^ÓíñÍ›+4/YË'õæEB©“J¾>÷4æ”CÅxúäivnW>=ðE¡âÙ¾t¥ÄÓd¥ÄSu¥DåJj›­åë:Žªiéä篎õ°É¬\ŒŸ˜×øÍ„’GGh«Ís.øœ¤\Ó +%¤V¨<ˇ°RBÝB„ê Þ)ùº—ʇš¥Ô ïéél¥oTE_ ¥ê.C¨ Û›Ö«éçp ¥*T“òª–{-0êRµi"TK{’"T  ejÒ®#«»ùG\àRÛ›Ö ûxNÙKß/éLß5-¯j¹×‚«û1èšÖ ûxNÙKß/ë°š–WµÜkÁÕŠ@¸$ˆP"ˆP"ˆP"2B™'a:xEÐ ¼Ë uij7CL¨Kׂ@ˆA„"A„"A„"¡*=u]rþZßÜ…ÓÜ¡²3ïÆZ™6V9O_õ\~–’&þ`üS|Ú€®:¡Ž²¤‹>!*ÙR¹–ÕUÕV¶kN!é¿.6ÁŠ„J¾þôOêsÕGåßÊ=9þð‡œP‰ïj•‘Ì£Ýåñ•´Ç€?è„*Ö*ËÏÎë™o*¦úR;fu“¦H¡ä±ŸÁ6áqŒP…ñŠJ(ݱ.tü!ÿt¤»¹À¤ „ÒwP¹yú£¾ã[ˆpNò¥¾™Péžùè2ÀŠ ¥×ÊD¨#ìÈ´HþO–U ï¤¡¤A¡î”¦#}ºfœ"”Øé(¡RKbTéO­UmBÉûÈÍ…M¥„Òß$…̳|…îØ8Ô3øâ€?TŒ¡î´-Ç e|:ñŽfø.W©âp’p(=¥¹ƒÜï*C—^Íò•J:¦²-†˜zŸ;eýšå»~ÐJ‰S ß'ÔêˆP„ Bñ‰PD(D(9¡Îù£”˜GA tô#-"ˆP"ˆP"ˆP"èwù&ºù<”vÕÂ×ú?nðæËé|:›Îàaœ_RPzÒ€|Sz lyŸêPõ5#TM+‚!”‚×ê3€;÷§Ó©ÛIºK)¡ÄÕ;™Pñ† }®Yc ¯‰P„N¡²B¥H7Ìb…šç…~Ih"¡C¨ªP¯Õ¦7SØÖטvhL¨jX–Íúª eS)xè¡ö{›uµlþŒ ž§Z(G“ ¨%BAMB±Šn?î?Úª®eóç,£¥ÍŽÇ®ùK£•B]1ƒ NSªA¨h °ÛÛ’ËæÏ XE+›„²kþÒh©P€`P<å_PQää20B­•eóJQâÁqc›#X.–¢úÈaÙ|GÐL¡À¹\ÔžD«I¨(—‘ýþªKZ6¯”ÄÏé±Â° `Ò1‡1¸f{ã²W T)±l¾+h¤Pàl/7´i8){|&#â†x –Íkñ‡12¥À߬gþ&ZºÎØq—Ñf5[o|´,›ï )DÎøaßè´l{´$T&#ø„²d^-GèS4ž R &sùÎØu}×ühå/&x„²k¾3h¦PQ4O¶Ìe¶ÒgÒÙ—\X3¡¬—LÔ«q B-£å|6…ÝÃö!‘š…_ʼR $÷GS¥`â,6®ã>°ÚÜ=øŽ»Y8˜„²j¾3h´R„ç8|l3ÎwI™£.8 ­óµS¨y4ŸÏǰÝñ tê•}1ór)‚O÷÷÷ cÄX `í:þnûa»ß~Øï˜Ë¯1G –ÍwÖòð›9 wù‡ „Š'¤ 4jK(e±|-B-™Ã³û|ƆeŸÃ–õ•hý»]óy!1Ÿ¾{œO qJïù¬Î" ÷}Çß`Ê®ù® Ùjsæ5Kƨåt®¯6Ï •r›P…åò5*î|&"ØÁ$”EóYa̧Où\"Ÿ&¬%ݕDŽãÇ£ñž¹üÎ÷.ÛŽ°XÓ²ù.¡ŽBå„Jüf:WW›+1”‘PjìÔ4†’oÕ µŒoóä6]NxØ"¹¼eó¢ˆ0Šp£‰ói¬U€¦O°‰6þ†8L@&#4ù¸?ì\¶-ÂËæ»„ê ;B¨ÔgäÕæŠîhüʉ¦ÇPµ õîN¿UU¨L@xW nìÐeÕ| ø†œTa<ìK)…§åj=¿Y½bÁM¸÷ÁÜcÏáöUt³ˆVí Y6ß)´P(æ1|µ¹“î¢*{úÓéO¡ìšg| ¹>…Iµ}I)¹ž?™¯Ý—ç°R½¿\M|ϵ'”]ó~Æn6knË%ñB‰¡‚3*”à,yw0AT(»æÃCÈã§Ctˆ^2=¼¿¿ÿcz*ƒQÎØy‹¥û°ç…°`-üè΢وmï¾ù.¡»J p¦l¸::Ÿã)”Móðø(ô‰ãeÌ"ΨoÅá¯n¸ˆ0d2âÞ°ðk1ŒeóB/3v)Ô\ pø 1†²j¼ÇÇÇ—ß¹e:ë»E9Ÿ<¤BÜåjæÎø‰¢m¼ìÎܤ´k¾+è_ÆnS…šúj€ƒCY6ÿÌe”úþ³Û—<Œz¿ ÅäDü.N“¹Ï\>Z¹¾ï»ìyéú oRÅ®ùΠ—»jâLgr€ƒäØ5/&‚¥ž…ÑíAŒøx4%¢˜á0ZGë™ë-6kfu½Y01a[ÐêoÙ|gпŒÝ† Å<ÒßHŽr§áìš%¸ü4Tt{Ë•éýû0ïM‘¬¯6Q´òž;,¸Y³`Çyî­ÖÑf…”hÙ|wÐËŒÝ& p3IÜʾy^@x¸åC¾[®RáF¬RüÄŒÏVßË‘ë±ÛèŒ=³ša)¸]óÝAÿ2v›*—‘4ÀA>Qtó|’ïö–ÇOL¥âS¼HúÄŒ}—9|<_2 Y>ç[<×cÊ®ùî —» ŠD°c#ȱn^œ‹b·7bÈ÷†©Zü$ÌOœø¼ ORwã3„¸ùP6ÍwýËØm£Pq°c#ȱl¼0×'¾ØOŸ„ýäì»·bÁÈ›ú`¾+@ÌØU–D¤ñÂ#LêµS¨¸Jc'rпUkæÜ£¿‹øéÛXñ“VÌÌ·ÚX6iXÈØM'ÓÕå±hh«Pq¥â`‡9tÖšyF©0Òù§b!cÇfhcÙü¥a!c7suehœ¨q[…Š+˃‰ #Wkæ¦q$eKŸDVþú–É@ÌØ äŸ~džBŵä+3­(”UóÇRð Õ* ˆ»AJ©"¡ºCåµµCY7Ï\s~€ÄŒ]ñŽB iè‡,…JªksøaÍ<àÎïð€±«dB®X˜5ÆR(Ø»ÅôÜ.+€ ÄŒÝô<”PÝŒ¡t &c—@8“±K œƒÉØ%ÎÁdìžÊO§5ü| Oåè–âÔFßv›×Uý‘¹öV»Šádìž B´ý¼f©­ý“%7~ÿاˆPEtƒaU¨L™ò.¹‘€§'ï²ÏË+N‚2ûÉ›AüîÉR³S„’žfÂú5‰òŽ'Ðk¬—~EVÆ®Uh+®rç¬m'%TÑR©}…Õ´F. –Mf›4s‹Å#h56î$†–±k&‡oR­D(r—–œ%lMBºgëÿ)¹ oÔ:žò.aP„ºÒŒ]k0¸K#JñÏùI"Tqü•ùL&¡²¡'ª"ð2vòE±o¤o…=R¨ £òñ‘Y‹Ô­¾™P(!BbƮœô?eø€Rc…jæ¬æ!~«* gt{³sV%ÔqËúݵ‹ÊËaJA…ŒÝœ9ñâºH ‡ Pv•9‡ìí ŠÉ •zqfTnRɾºk¥£+̳•¨”\zCï×>«XµôM\˜»J‹uY¡'q]^~F fìê„V u5¸>Ù8#P3vSBIRN ÕC\fúö:€˜±+QH‰'ºC¶€˜±{&B‘B: ̌ݡÔ3’C®”±K ‚2v DPÆ.€ÊØ%A»"”±kYLmkµ¸6­z³Z¡”± {«Y‘–ͯ"ž¥âzÞó\ƒÉØeÇÈÓMlUÛ²y·@(×£`-mv0)T\$¡œÅÆuÜVû»ßq7 “PVÍwV2vå-Ú¦öŒj§Pb°:†íŽßX Ó²2ç2˜b(\…b_ÍÚuüÝöÃv¿ý°ß1—_cZ-›ï ð3v;C-™Ã³û|ƆeŸÃ–õ•hý»]óA©B!jã{>«³ˆÃýGßñ7˜„²k¾+ÀÏØíò,_<™Âà;0Á&¡,š,ÇPæîÊcÂB¿ñh¼g.¿ó½Ÿ÷@Hx³l¾KÀÏØ-œ‡ÊÞ¸ðy¨e|›/³«[$—·l>°CÁ&Úøà0™ŒüÑäãþ°pÙ¶CF,›ï“± ’€ˆá*¿9°C#”UóÝ –«õüfõŠ7áÞ[s=‡ÛWÑÍ"Zµ§¬eóÂ`2v! pÄt?sy1džBY5Ø¡øI"&,Ä ™tx/˜ÃGLBØ– ÆÉ"Ëæ;…Ádì‚" þœ W§Ó žBÙ5Ø¡`äzþd¾vw\:XœEa¸÷—«‰ï¹£ö„²k¾SLÆ.hÎ’X'ˆ eÕ|`;†rÆÎÈ[,݇ý!<0³‡ð£;‹f#¶#†²k¾KLÆ.¨Δ W§Sçs<…²j>°}JÌù«."a1qoXxƒÕaZ6ß! &cæZ€Ãoˆ1”]óÁ9ÎCyîr5sgüDÑ6^v‡¹˜Ý²ù®`0»0õÕ9†²k>8ÏZ>æòÑÊõ}ßeÏK×_¸¨kù,šï †“±;q¦39ÀAŽ¡ìšì¯å­£õÌõ›5³ºÞ,˜˜°-hõ·l¾3LÆ.Æ;ã)ÀAž„X6o}-¬6Q´òž;,¸Y³`Çyî­ÖÑf…”hÙ|w`%c7ô D¥Ü“ÖRê«5n¤P¢°1“‘4ÀAr,›·CÁlµñ½1¼‰T½€±çoV³~˜ïleìfWÝ.¿‘Ͳ+oÖ]Ý×T¡âòqà 9–Í[Ž¡`ì»Ìáƒàù’IÈò9ßâ¹þ¸æ»[»%„ Wß­I¨æ WŽ;V‚ËæÏ\F; eżõŠ€+»APù ª˜P9¥ƒ;6b(KæÝe¾\P¾¡:…Ádìay­ªy(Z  &c—@8“±K œƒÉØ%ÎÁdìçÀ`2v „s`0»Â90˜ŒÝêù°&§ÁJ —ÿ×Ü\nG·(ŸÙC+57Œ%ÕÀrYÁp2v9R%¯›,Ô¨\†RBÞÇ®Åㄺ:2qXÈØUóX>ÐB¡ÊÓHšA²“ýIk«ôö5: l•~ÑNö¨”\‡Še@ Ù— ²ýì¯vSeŸªPÖ•ÀBÆn`Þ„Õf-J'TÐRbuBúJrIùe5Ëiõ Þ]¤±ÒkUvNµVP¨«R8ä´nØ@'˺XÉØ5õF^Rc4… ÚRJ?¬â“²Kõ¢’Þ[aJ*§Ç UÙëóØZd@­þ@.C­`yYWüŒ]co¤¿jÖá (TšŠokñ]Ö"T²øG‚|d$Jf)ÕÆ ¡¤¢k¶ÊŒê»r¯fèJÛtxI[+”Üß·ú.kª:£”H-&;År^{„ªÜ,JD¨ 3v³ö)t¥Š4nÆö³|iMÛJ1¨öJQµb =FSfEÒU«úÃʱ4úÂ2kʺàgìæ dÆè2 •ISÞe"MK][)*kª…ªÂ»é IDATå„ ”ŸôJ+§6¡òj^¤Zíêˇ¡VòHY×üŒ]co„H(Z)q&œÓÉA(5¯±h½N‡—Ô˜ÖòYGãî®ãeÙǰ3v eh;îjYÖA»"(c—@@e술Œ]”±K ‚2v D ,c—@°‹aeì–—±«­(*.a“Ÿóµ™ÐX¡®éô!¡«@ÌØ•WB˜U¤Z3o¬P°¿Ü8µW ž§3vÍ„J¿méuó\ ŠUŠwä+'K 3v•µæöÕP¡ ìö¤R'«hEmÔˆ» uÆŠÅ}‘“«À¨nÁ•‘ˆ}3ÛÁr±­c¥,7Îر«ELS(ŽL¥öû¶¾Tˆx ³S€5óL™æ0wÃlo\öjaA©,7Î嘱{&BµP¨(W)q³ò¥Š‚øÃØŠ×X3þf=ó7ÑÒe±±»Œ6«Ùzãc“Önãt˜»r2nçfù »*m¢R¾ÒÌeXÐ6± #ÖÌÃdî¯"ß»®ïºã‘­üÅ·ú–§ ÀÌØMC¢Nž‡Š ŧûgSØ=lbª[z¥b ¹?:è2bχ-ëŠm i¾{Üec¹¼Uó°ñ=Ÿ5‰1ÃýGßñ7vÔÕJãtƒÉØ…LŸ8|&"–Bï‚ÃØe>åÓYødÉü„¹€»ò˜>±Èr<ï£v¾·pÙv¤!ˆåÆé “±+–K‰j™Mú;ð°E¬>„Qt€CMœOãîPùdÑîû—m‹TÊrãtƒÉØIŸÄ”?¿9°ÃûB™Ë„!÷›0Ù¤^ƒÇ'kæa¹ZÏoV¯Xìî½E0÷Øs¸}Ý,¢Ê:$ËÓ &c’øI,™bŒÓþcÀS¨ØeÜc¸Ë|“yMÌósPLX2eò^0>EL¡Ø– ι(ËÓ! &c}òçÓ©?Nð ÂwÁa)lßߣz]ó0r=2_»;®L,Œb¥„{¹šøž;j_€åÆé“± Zü´ä“þ4…‚ðòᢗÌQÞßßÿ1J½¦ëæÙ7:vFÞbé>ìy!,Ü ?º³h6bÛ»_û.a0» ÆOÓé »;Ÿ#)<>Š.˜ãeì(Üi¾ArËæƒä$»¿ºáÅ”„©”{â'”¯Ø~í;Ìkì&ÒJˆ [؇G½¦ 5×â'~C‹¡À{|||ù[ÖÇ]0»E¹ËxÝ6Ÿâ.W3wÆÏCmãU}N„vŽÚwx»¡2.éËø0ÐT¡¦¾?áÆPðÌe^óýg·/y¤ð~Šø;~·ëæE“¹Ï­\ß÷]ö¼tý…‹Ã(ûµï 3võ|§ÖKaM5n¦Pg:“ã'ÜJ¬f^ó,ŒnbPÃÀ¬æƒ`´ŽÖ3×[lÖÌêz³`ZŶ -k²\ûÎ󻆵±€O¨† ÅÊwÆ7Rü$b(ÌóP|Å0?ÓÝÞòÎ÷ýû0ÒL{aV›(ZyÏ;­Y,å<÷Vëh³ÂÊ1´Ü8þ5vmª¡B‰Œ™J¥ñj •nù¨æ–wÄáæ;ÄÁªy˜­6¾7†#×c·Ñ {þf5CTp«Ó`^c×”½Q¨¸†Î8ŸÏC ó|ëö–‡¬#ŽÏb"vÁVÍÃØwŸ‚àù’)Ôò9ßâ¹þñÄ·ÕÆé 3v i…ÝQ¨¸’<–²C%§[ØíÕ¼a1jˆ`Ûüĉ¿'žïÆßb>”åÚwx»¦Y¾ ;³|âXÊJ å… xÌ vÁ–ͧßx+K¼ źåÚwx»?%!‰¥’ ÓiÀ=0áw"|7D°l>+fæãEN’ÙóÔþÒLÆ®‚4–â1êzæ5aüS,–Í'…Œ¼ÈI1|ŽÚ_=ÌØU•ÆR¡P¨+¨X«ÄÁ‚.زù¤ [_é9jaô/c÷î„×M «”ƒ­P±a.À+T«ç2oý®}ô2c7G B‰X 7†Ê ?s=‹SX–Í[F¿kýËØÅ#”ÅþìNaY6oý®ý ô2cP2ú—±K„"t½ÌØ%BºŠþeì¡~Æ®¶¤sD(B‡Ÿ±«§éb3ŠEè0ð3v%"Y6$T¡. ‹k˜®#’l‡J£.®*ÛÙ*ÅŒ¶\RZ0Ù¢Á«|¼†ýò¾Ô¸õj~NÌFÆnÒš–Z© „’2¿Š/”Gyð[دRÏ4¬ïÓ ØßUÍ* P êeìÊIø5®J(©{Ï;qMI‹Uj÷2é„’_¡ªP°BÖjÐÛ%;úüåU.]ù›UêÛ bËz‰Zakù*x'*}wR(ÂÐPgµyö<â«ø\oû°‘ß”(TrOžH¡CC³ß”pýé|î{B¥B2¡¡ê–BÑK‚}4ÊØ F³ùŒçìr•2)TòÐ-…‚ýå~“ãº;¶fùPàò”Ýõ|3Ýe1TÇŠ#ÿÙ³«þ2{XFË+þÅPL¢Ü cÔ&ú8îK Ñ`·'•: 9ûÄ‚õU´ºâ¯ aÆnϧ«uES5†êî,°Ê:¹JŒ,Ô-)J¥¬™¿¿¿Ïìç|â¯qìÃdî¯"ß»®ïºã‘­üÅdP„*ÀÄ0x>JÊ”¿Ñ9Bñ‹̦°ã§¤…Fa×Nrø(zt°eÄšùû˜P9Ÿ° å,6®ã>°¶ÿ¸{ðw³p†E¨Z»}ƒ>|´S(q™ƒ1lù)é‹£+—;Íù}>c£¾‡ÏaËúJ䉬Ì¿{Üá·—·eþ>&”§X¥ðÚ6¾ç³l¸ÿè;þfX„:ÍiÊï|Ým£Pñex|&"–B­6/#ŒþS>gOvÌÇ?A¦ó O\'̸»ò˜>±Àu<ï£v¾·àuçþ]GËÀQ¨s^t·1¡–ñm¾Ì.uàÀñÖFÑa4q>…(C°ød×|aí ÍI`˜‡M´ñ7,~bú4ù£ÉÇýaÿà²mѵ©ŽBó¢»Í*Ó'q¡~s`‡8¦ £0ä^æ.É}O6ͱiC…O(öa¹ZÏoV¯Xìî½E0÷Øs¸}Ý,¢Õ•­CBR(ÓEwƒ ÿ™PéÇMÛ׸!¡âøI\(Ž1J\ì` x ;üû;wÉopM¶Í3} ÃðüÎÌÞÞf|òlû›5S#A…L™¼ŒOS(¶esuç¢+Ôé‹îÊ¿´›ý*oû%bM ¥è“?ŸNýét‚§P̹€„Iœ³}êó–ÍÇöya¢O ¥0øÀÈõüÉ|íî¸2±n—D¸÷—«‰ï¹£Áª€òÕ²åÝMŸ³_$½¡´øiÉ“$'h á!äÎ!:D/™#>¼¿¿ÿ#ިɲù“„>½‰’G>ñ{쌼ÅÒ}Øóc`±`øÑE³Û~]|j¡PApꢻ:¡pVt6V(%~šNoØÝùI¡˜CÆý;ÃËØÍ¹Ëƒäò–Íó|œGVÄKðx$…¬OÂ>‡¿ºáÅd–©”{â§+ü™ÚV •ÊxÑÝ¡P(Õ‚PJüÄoh1xÌ!_~ç– I, ìåßÖ/-›ç%ˆ"y “ QŸ’a)øjE+ï¹Ãb§5‹¥œçÞjmVW—cˆ3Ë'¾mý¢»2gžþ{©J?f*•ÆO¨1TZëáã1ð óüâ¸É¶y/碥Þp>ˆ| `¶ÚøÞ^Œ\ÝF/`ìù›Õìê$ ç<ǹ.ºÛæwù¸J¥ñòy(a>ëàEâ ˆmó¼S Sp¢"ò)€±ï2>Áó%S¨ås¾ÅsýñUÀ©µHç¹èn»ºKÙˆ¡’“EìöFŒÉÞ0A p¬›E•:$‡È'ÃÆC~žïƃʇ NìqŽ‹î¶ýåØ8–²CyiÿO“±~U@ìšO *$1ù”û½‹¥@ÞtUÀ·²ª®ýO1'±TC!Ö—yc…Äη1ç­›ÏJñPçË ögþõEN9pêÀømó4–â1j ‡!!Ò ¢ó™OK±É';9×9åLÆ®†8–š…BUHÆ¡Ž±lþ¸¾åF2“±[W)[¡bÃ"ØW¨VÏežÐƒÉØ5€ÅR¸1Tfø™ëaOÀÏ<¡ “±k„µ ƒ… ¸ó™'4‡ÝŒ]yý iC-¯¦ ®: «»2ˆP„!ÀnÆnšV˜¥ìJÉ»òåÍô"B: ‹» qÔWê†@¡Ù©°†Eè0,fìªcº\zT!*êd‰P„ÎÂbÆnže„eXa¼¡†ÅŒÝŒÎN(¼_²ËS½Ò±jö3„é{ù³ôªªùÌ`ö!¹Ê›-¨h»É9äÖ²a¹[°˜±{$†Ð UqF‚×øµŒËª˜×¯2LwxÍý«WU6‘oÉ5^/丵š¸R··›»ù,Ÿ2‘§ÐKfUæG*êJjælˆ;”rB)ÎC(©ÈÌ¢,UÇ©­,@j{©yŠÊ…2UÎe¦_¾bW6'9Äu »ïîô[uBåâ( d#Ç\Ùc ¡jŽº å:§‡Qñ@”ñ€ò™.ڻʇr”¤²z‘jáùw‘Û»ô2cWaSMBißlc!”4Õ’÷ÌRŸ_« éÓ' u\2TNª•=gªgzK#YUT •RX»Ž­kè_ÆnK…Â#”6N:¡PYa5UÐ8uX,±C­B¹µBuƒŠÏrÁ²-Þ^åTùËÍPt&c· ¥ô²UU£_/¢ø:¡Ì %‹P¡Œ"¡NHáÓ£†G¨Žfìv#†RØ’Ñ¥QP…úkG¬™\Ö@uÇ´ÅtB+ŠUµÈBw&¿¡ èLÆnc…Ê¿ÅÔš~²w§VtBeöe‡oCªC§†5ŠÆã²ÖŽÍòé NŠÙ2 ”%#Á©c)pX­ƒIþúŽþeì¶Q(° 0BЙŒÝæ E@vÌC1Tasfì’B]ØßóYüæL°œ±k¡¡H¡†åŒ] „"…"t–¯±‹3¥¦Õ˜ŠÐYØÍØÅZ8'ƒŠÐaXÎØU …TcR(Bga9cסH¡†åŒ]R(°`7c—b(ÂÀ`7c·S³|WtöÐY (cög[E8‚ëîØ“±ËŽ‘Ÿw¾ê/³€e´¼â/a0»v{R©KVÑꊿ‚ÁdìBEN®R#k5L³“ȼjXØÁr±oó+¸“±Ë å*µß°å’ñÙV˜újž)ÓÆàn˜íË^-®R©“±*S)q³â’¢ þ0¶âó}5þf=ó7ÑÒuÆŽ»Œ6«Ùzã_£“±›*S) •Î<’m ý|_ÍÃdî¯"ß»®ïºã‘­üÅdP„* ×»1¡x–Él »‡íC¬Qص“<2Šô~¾·æaâ,6®ã>°¶ÿ¸{ðw³p†E¨ëÊØMJ䙌a»ã7G!W.÷ÈûûûG†1j4Ògók×ñwÛÛýöÃ~ǵ¾Æ W‹»…æR74mÍ µd|b÷ùŒú>‡-ë+q¿ÒÜ#¿{Ü#cùdŸÍÃÆ÷|Öâ"‚ ÷}Çß ‹P¸×Ø °ÕF¡âMFþhòqØ?¸l[tm*u–Œ]ùÇóW W 7W¨LŸD¦ ¿9°Ãû>™G†!wË08¥N‰çð}5ËÕz~³zÅb§pï-‚¹ÇžÃí«èf­®l’ÝŒ]5ªËшP*ŽŸïYME¶Éð*öÈwHî‘ßdNIæù9(¦F,‚ ™2y/Ÿ"¦PlËæêÎEÙÍØ=I¨c¾¦ ¥è“?ŸNýét‚§P†¼‡“@dûþÕ){mF®çOækwÇ•‰…Q¬”pï/WßsGƒ!Tõ3v+(Tƒ7¡¤øiÉsM&h á!äÈ!:D/™>¼¿¿ÿc”:åÀÍÀ¢ë‘·Xº{^ ÖÂî,šØöëâ“õŒ]íIŽ«ÎC©ñÓ”q:u>GR(x|=<ÇËØ¹O~ƒä“ý6ijOà¯n¸F1d*åÞ°èéš~26ÅŒ]eR¯0½wöY¾¹?ñZ ÞãããËïܲž>îáÙ-Ê=Ò´ù´w¹š¹3~ne¯êó®MÁ€2vaê«ñn Ï\æ”ßvû’"ïw¡ïãpn^1™ûŒQÑÊõ}ßeÏK×_¸×ǨádìNœéLŽŸpc(1ìeNù,ŒnbÌÄã.ÀŒÌÁh­g®·Ø¬™ÕõfÁ´Šm¡®+c—ÕÍßHñ“ˆ¡0ÏCña/?‘ÝÞò¾ýýû01MÉ<³¾ÚDÑÊ{î°ØiÍb)ç¹·ZG›ÕÕå&cWÔmÌT*ŸPc¨´€ðpËM·¼Ÿß0×< E }7³ÕÆ÷Æðbäzì6zcÏ߬fW'QƒÉØà*•ÆOÈç¡„y>Mv{Ë#ÖÏÇ'I±¤çæa컌OAð|Éjùœoñ\<$BÐëŒÝ b)1Tr6‡ÝÞˆAÓÖÏ£E W`~âÄË:y¼/ð¤|¨ lîgìfˆc)+1”&à=<_ €) =7ŸÝ÷V,–yÓUa0»’X*‰¡0Ó¼Á=0‡äw|/Àé¿ù¬˜™}‘SŽÁdì*Hc)C¡Vš9e˜é ÎÕ˜O ;×9å°|]yyQÁ«;u{…ŠËã±ÔD(j70c;=|¿Í'e\1ŸÎ˜±+ªØ¤ÕC¡âùÊLd…Š ‹h^¡Z½óWë»ùB>9ÅPZ*›ï©äõ©1†BÅDŽ¡2ÃÏ\s†ìªÌ_9¬fìÊIº)eäÿe^©IRG ÆR¨¤Šv†€;Cv]æ¯ö¯±+¿Ôî%OÇë§P:ì_c7•œ „J‡‚G©P2ÎvÝj œžž …"tV3võJW*9“·r^<)¡Ã°Ÿ±«“¥H¨Â,߉“B: ‹»–&ÐH¡†ÅŒ]K„ª¯P…Š4]¤q¤„d>ȧÿÛŸ:.û¸y{½ÂŒuÃøêJCbi‹9[ò—3ÃbÆnwÊ¡é4ú q¬•ùªÛ뱃“u,儺 !c7ŸÉÃ4cøÖEöäæš*S<ùäƒi;ÿ' S!ý§n1êy@.P±]Á^¾»<ã¤6¾R¤¾[üñþÒk»ù,¢òíå_ŸFú8F¨š’‘,©¯ö$•^ï@ KºµØñÔ7—½2,™Ñi”Q©ÒÌTw1„Œ]“´1Š1”"{ÍzܲúšÞÎï5Dõðô£’ൠTÚ¯Ò}ò(tn [«+BÆnBµf”)Tî;M†|G¥¿½Töý¼æJÅåãÑ$¥ž¹¡ÒfH_ •]C膱[M¡Úà¡TW­að¡Œÿå=CÂJ*ˆýº ¡´FŠ-!TŸ5„Œ]@·×q™²òIœ0eòMã“̯ºifJm×7g4Ê›òwÔ*®ƒ8_Æ.Ú(T Ìg)O­¾Â\òN%Ó(›êYLG‘ü)¯-¡ÔVQ›¤¡‚ld*7ròZySV¨aÎò5¸Æ.h¥¡Ã°˜±«t¡x½­å#tv¯±›R óÜ)¡Ã°š±«Îì Õ˜ŠÐYXÌØ•¹„H(R(B‡a1c7ÈÏdB»×صqnŠÐaXÌØ 乚å# ƒ¹Æ.p æ»Â90œkìgÀ2vóªÙ­0ˆŒÝ°?[Š a°BÆ®;F¾v—(E°Š!dì @4ØíI¥V1„Œ]ˆ¢ÈÉU `d­†ùF2nóÇ2v“*rd*µß°UWˆøúV˜È|§a3c×ÐfÍØB¡¢\¥ÄÍÊ—* âc+^s%毖R63víª•BI*Åaá+Í\†m|¯¹óþ”ÙÂ+¥”Õkì~ AÙÔ¸Æ-Šó~6…ÝÃö!Ö¨æõ8R $÷G»Ÿ¿ós˜:0‹®U¥,fì~§îo~˜ÐN¡óǰÝñ‹£WãH)Â#ïïïƨ^Ó{ó!ã“û n"¡P×H)‹»…ßÊ6µjà µd|b÷ùŒú>‡íÃö#î×™{äwï{d.yf><ð±‰;ëÃÓ|G`3c7Þe?|%år4¯q…ŠG¦ ¾K¡~›¼Œ0öÈOùt–‡ï±ù0â®0ž‚ÃŒN…_„WÇ'«»êØNþm‰6Œj¬PËø6_fìwàów¹àFçÓ¸·dìµy¡Oß÷Ÿ"7îi¯ŽO63v³¡žCµýÑ–æ •é“à>¿9°ÃûB™G†!wË0›Ž]¦÷æ…@MÇB–ÂQB¨kã“ÕŒ]Ã/ž*¿ Ú´Æ *ŽŸÄÜ c”àÿð*öÈC<Eß Ý}7àÆžÏ\˜r»3È~]îÊ0˜Œ]PôÉŸ3îO§<…‚0ä=|˜"Û÷÷¨NyæCøö”ŸÿŸ³2¾©B]¥“± Zü´ä쟠)ë‚C¢Cô’ùáÃûûû?F©S’yQLœérâd”ˆÒ®ŒQƒÉØ5~š2îO§ÎçH ¢‡çxû!÷Éo|ò Ìs…âx~3žGÿ£D¨+cÔ`2va®ÅOü†C÷øøøò;·¬#Ž{xv‹rôÈü!!|ß›f`˜ï“± S_Ÿpc(xæ2¯ùþ³Û—<y¿ ã¥â\2ÏÌ'„‚çÓqF¨Ã|§0œŒ]6~ŸÉñn %N0¯yF·bÀ{ðW˜‘ya>!‘“EP|RÅ|‡0˜Œ]ö:ã)~1æy(~ê@œd¹½å}ûû÷ñr5˜’ùÄ| ×É …f¾3LÆnÀ¿Ó1S©4~B¡ÒÂÃ-4Ýò~>|Ã\ó€"ôÛ|ñ˜o,óéºâ'ŽÁdì p•Jã'äóPÂ<ŸËº½åëç㓤ˆ]pÿ̓†«Ó§KgìJ‹’jÔ¸©BÅ%òXÊF •n}{½aýÅBæ;‹3eìf:dšå«'Qx E  c0»Â90˜Œ]áLÆ.p &c—@8“±K œÃÉØ•ÏwÎæâȪš›€dT2]a¯ÚVÖ§&N¯“¾ &cW=Ëlz·=$ÂâU-£ìÖp÷ B™Ð¯ŒÝüWvî+;,-tÏ÷ÌΘ5>Begé”sâêZ­Â~Zå«E²†te{P, îaä'ó¥ÖÏ7Å;Ö©sçq½»ÅïP^™!-ÔЖl´8 B©KK 5$?TöÓŽ¨Ráªå@· ņÜúú6) «°™±›¾Ù²ß×PC¡4Ñï¥>Ù[*(qHý˜ò˜?U¥,ÉÝ%/ت{,æú› պݻ›» ŠÐ Õ*÷”j„j=“€¥PA™C¥ÔZ=”Jee&†‚nË:¡2"÷V3v³o$oÈöVS¡JÈdV¨ ï/@¨båkx¿Y¡‚lÖ¢Yê:e1c·Ør;6FóJW*¹bÇ6j‘ʋƄ*]«ª¹7(~ªbY…fÊZ«¾ÉâaäÎ f›Šåô3vKœ¡}kÏòèï³—m¿Ô¡š(²>mW^kùðôÝ+•[Zܹ´šå“¬h/õ޶v…ÅŒ]ƒ#`PªN u8×q¡—Sbðʾ'‹»&B!0ªN um8縈Õ3vÕñ3Ú8yÐ uÆqªlfìÇÏçœå#.ÊØ%A»"(c—@@e술Œ]ƒÉØ%ÎÁdìçÀõfì`;ºs½ÂÍjy¸èwí»ƒëÍØ-övIÿ*ÒáY*ÎF3Ÿ¯ö×3dìúò’vîÐP¡Ø1òüG‹”r .éÚñIXFKtÃg«ý•ã »´sê† Ñ`··¨R^Ñ%çV|VÑ ÝîÙjå°Ÿ±›/哳aʲpªÔ¸™B1qr•U)¬ }|„ë“q `¹XŠêc„ýÚçÉØUœ›3þ*¯Do¬P™Jí÷°¥Ê…D¨>É”icp7ÌôÆe¯ˆJe½öåkì¸cdR"PUkÜX¡¢\¥Ä —R†>¾YÎn À߬gþ&Zºl$à.£Íj¶ÞøXÖm×~(°|ÝꄪL©V %©ª·£9¡&sùÎØu}×ühå/&XÖm×~(°|Ý:„ªÈ¨V ÅçNfSØ=lbªP`Uûø¸H‘PßóYE î?úŽ¿A3n½öÁ`2v!Ó'߉ˆ¥ýÅj2aß‘»ò˜>±Ðo<ï£v¾·à3( N1“±+Î=‹j™Í 8ð`^ÙÑV£ØDÃâ'¦O“‘?š|Üö.Ûá¨ÅP8hµ–¯€g삤Obþ„ߨáUÖfËÕz~³zÅb§pï-‚¹ÇžÃí«èf­Pœžb( &c’øIœfŒs(c°¯P8„ò7k¦F,‚ ™2y/Ÿ"¦PlËé\ÅP8ÀU¨s ©B)úäϧS:`*”Í(F®çOækwÇ•‰…QQ†{¹šøž;Â(b( &c´øiÉgP&gP(¤Ê;#o±tö‡ðÀÌÂî,šØvŠ¡:„f uÆÝ+”?M§7ìî|Þ“*Kƒ¿ºá†S)÷†EOhClŠ¡pÐH¡Î™ [@S…škñ¿õ&†Ï]®f‡ÚÆ«úð¯R …ƒF uÎÝš*ÔÔWã§^ÅP|-cT´r}ßwÙóÒõ.­åëš)”9A·"¿Z²°©BMœéLŽŸúC1ŒÖÑzæz‹ÍšY]oL«ØZË×-TU¨ ºU‰Ò’P ŠëŒo¤øIÄP}9ðl¨M­¼ç‹Ö,–rž{«u´Y!åR …ƒª U%A·˜‰«¾§¼©m¨ž´ÛP¡Dc¦RiüÔ· f«ïáÅHü$ÑèŒ=³š!™§ •*8• {$ý¶ºQÌ娞´ÛT¡âŠ8ã4~ê[ cße| ‚çK¦PËç|‹çúc$óCá ŽBå„*KÐ 4ÊÞ‘W–ƒr±Ýb‚ÔÉ7U¨¸8Kõ2†b5»žïÆåCu ÕªJ‚®šÞ”œ@“êqºÞj½Ôn0hæŸ"B‚ÕŒÝî)Tä£lBIFÕ—gR¨üðò§“õ–*ÈÇXk"TXÍØ…îÆPR}[@ᡊm¦6¨Ú¶¥¡Ôéz«%äÒd®ªìfìf_ô^û£Ìò¡ÔGåQ~®H'T2xªT >ËW¦RºÏËM|ª ÒÔG}"BUÁp3vû u f·Bm 9c·žV¡Ú`Ø»½ƒ4–Ã@˰bv  Œ]”±K ‚2v DPÆ.€ÊØ%A»"ð2v‹ ltºáЊÐaàeìébG¿H¡fÆnaM˜¶>LZsÖªÆ ÊöU\úV½Y-P‚K׫OÀËØÍ)WtæÙ5-¿ Æ {»3)ÅëWx=sÅ4qTCÏŽâ²ÀËØÕ2 Pr&C»7R(V>DµH©â–Üž1 –tE›¶ÀËØÕVþ¡,B5T(ˆÆ»½E•*^Ð÷‹Ql(ŸPH`N„ª¼Œ]EƒLYQV(æN®R£Ö5Ñ`P¨È£òF·¼Lèôï>ûwÿûŸ~éÿø%]/ð2vå!Ÿy¨wÑ „‹g*µßÀvIC Y`D¼™u|J MšÃÿôÉ'ßûì³ï}òÉ·’ Øå\3ð2v‹é£jh ¼Õ¦Æ*ÊUJÜp]Ò P&ÉÄqð‡1>¥„"q>1F}ïO¿õÉ'D¨šLÆ.dnž¨ª«œå:êŸXL8Á¦¤yJ¨O¾ÅoÁ,ãÚQg¥„†~eìÆ„â'¤gSØ=lbB¬Ø9®£.ñ)Šd•â |¬'ð­O¾õ'ß"T= &c7Q(qJz Û¿±8 ±bg¸ŽzΧûûûG†1j,Åõ>Kõ­X¢ˆPõÐB¡8ú“± BŸæü>Ÿ±QßÃç°}Ø~D¬}‰B!úcΧïÞçSÒK`•+T¨?ùä[ßûì{D¨šLÆ.dúÄá;0±¢³X¡ø!„1Ÿ>ås}Ø|JJŠËÓgD¨Úh©P@c…ZÆ·ù2;-íÀÃï mÇPFÑa4q>µ pù”)ÔgÊG|Ÿ²çO‰P5QI¡.™ [@s…ÊôIœ”æ7vxGf9†b| CNª0ö¥” ÑÄœÞgß‹§ø¸TÑ,_]TQ¨‹&èÐX¡âøI,êeŒ'¦Ç`_¡ü1æÓÓ‰ó雌R(Ö“2Äy¨ï‰ê[Âøô]:UUê¢ º4U(EŸüùtêO§L…²CAr} “0jûþÞ¥’…1¡ž|ïÓïÒJ‰Ú¨¤PÆKêf Òo`§k!ò„|Í„ö~‹7¡¤øiÉOKOΠP(1„‡ÇO‡è½dFÞßßÿ1-oR"]Ë÷É“§Ož~Jkù „PÕ/©«¬+—¶Ëo¡®m¬PJü4Þ°»óy?b(x|úÄñ26Ë•‰Tûâbhµyk”J~6&èV%”’jˆA¨¦ 5×â'~ëK ÞãããËïÜ2Šõ‰Ý¢œO^ûâb(ª5Ž ‚“—Ô .@¨¦ 5õÕø©W1ä»å*¾aÄ: ÄOp`z#¨t+ßR%Œ"BÕA%B•^R7¸¡š*T\¶3Nã§^ÅPbšïö–ÇOL¥âS¼ú”(”~c¸"T]T™å L ºB•ÄPB]$†ÊjÍc©ÆPɹ(v{#†|o˜JaÄOÂòáñ ãÐåñññ ,éÄn]T9Åq±ÝÚ(GKõ1†òÂ\Ÿ"¾ EŸ„BiÔ'BŸæsR¨º¨¾ÚüB º´S(Ž$–Jb(´:C åø]ÄOßF;ÿôæöö¶pOøD„ª…:ùPIÐ- ­Bq¤±¡Ð–(žá7%¥Â íÏ?åfM˜ÓJ‰¨—…æ|-Ð^¡8âXj" é Îñ›|œœ&BÓ'Éx¶ØQÜ,ô×ÁdìÀUÊÁT¨3ü¦ı¼Â5+LÏÏq×ÁdìÀb)Ôj™/”ïèÍ Ï\i~O3l>‚~øEG0˜Œ]#P‡°æHÄÊ °æ÷t³ç:€ëÅ`2v „s`0»Â9€—±› ä5òÞÊ{ ½yZïQâ’B: ¼ŒÝºsugý=õýlÃ)$…"tØ»Éj¾ }”÷•X¤$|µE Eè0°3v*R(Bÿ™±ùºsuF“PMÊ`·õ$‹2¸UÛC CþÜšø#LV0Q’nÓ‰‰©;c7ù7燴ïqB¥’fK¡l*=òÌAkW,A0K„ÂvÆnæVÖÕP¡rýÐþi#†)›WÑÔë¡Nb8»©»Hª‘q¼i]Ž+T 9g}<7¡”¹¥ @$"T5 'cWu7P\ÒÎO*¤„Jß …j»»pj˜sr‡"Z(½³] -9}Ñ3óm e’¥ÿ‚üRÙX͸ú!SˉuÊØ…ïo±ŠÅëC¹vKä‹NÕü•c0»v{‹*U¼‚¡;·Â(XE+›„²kþÊ1˜Œ]`îä*0®˜A¡"\FÅC€,KQ}䃰l~Ì5vA¸x¦Rûýì#1ÄP*£˜tÌa ޸ìÕUJ,›“± ‰“'*%n¸cP(ÔÀüÍzæo¢¥ëŒwmV³õÆG;Ëæ‡‚ÁdìBææ‰Jq º‹í«ÀÃdî¯"ß»®ïºã‘­üÅPvÍƒÉØ ÅWùΦ°{Ø>Ä…X1ÛW‡‰³Ø¸ŽûÀjÿq÷à;îfá`ʪù¡`0»‰B‰u¾cØîøÅQˆ³~x€µëø»í‡í~ûa¿c.¿Æ´Z6? &c„>Íù}>c£¾‡Ïa˺bÄÃ*Q(DBm|Ïgu1`¸ÿè;þ“PvÍƒÉØ…LŸ8|&"–B<"«1Ô„5¾»ò˜€°Ðo<ï™Ëï|oÁç=N Z6? ´¾Æ®¶+(ËÐó=¤}埩kTㆠµŒoóe¶Öׇ-£¬ÆP°‰6þ†8L@&#4ù¸?ì\¶-ÂËæ„Œ]ò%Ê{H¿p¥ìÒÍ*Ó'±Ò—ßØá¹‹Í –«õüfõŠ7áÞ[s=‡ÛWÑÍ"Zµ§¬eóCÂ5vM?lªS¦H¨ÆÃÇÆ ÇO"S’1J¬öƒ}…Â!”¿Y3¹`!NȤÃ{Á>b¶l0NY6?$´ÍØÕ~··¡†dMJÑ'>úÓéS¡lÆP0r=2_»;.lðEa¸÷—«‰ï¹£ö„²k~Hh›±›³HåQL©ã¼âË5nCIñÓ’¯õœA¡b(6>y‹¥û°?„fö~tgÑlĶcÄPvÍm3vµ€©ºBå&j¢±B)ñÓtzÃîÎç=‰¡’ÞÉ_Ýp ÈɈ{ì©WËæ‡ƒ¶»Ç*w.ÆPgU¨¹?ñ[ob(ðÜåjæÎøìÐ6^v‡¹˜Ý²ù mÆnI ¥ÌòéºC ÕT¡¦¾?õ*†âà‹í˜ËG+×÷}—=/]áâÑÕ®ù¡á»E2iç¡ –‡jVãf 5q¦39~êW Å0ZGë™ë-6kfu½Y01a[ÐêoÙüP0˜Œ]vÎøFŠŸD Õ—óP °ÚDÑÊ{î°àf͂繷ZG›R eóƒÁ`2v~c¦RiüÔ· f«ïáÅHü ÒèŒ=³šõÃü`0˜Œ]®RiüÔ· ƾË>ž/™„,Ÿó-žëûa~0LÆn±T/c(Vó8øäIên†âæCÙ4? &c7CKõ/†Ê§¼ vZœÉ»Œù`0»’X*‰¡ÐœÆúy¨0óm†6–Í_9“±« ¥x …6Œµ}*ël†6–Í_9“±«!Ž¥&B¡e;†ÊA?ÅÜ] &c·®R¦BY¡=@óŒ]iI„´ )КãÓG¡âŠâÆPË|¹ |'B Í3v¥õzÒº¢@]«¬éÖBÅÕC¬”­B÷p]±Œ6áUúh‘Px E  á»òªØ@#”…S¡d´ÉØ-.5È6IñUWc(8»±Ä ÔQ2£H¡BÆ®ü´ÔAŠ¡ÃBóŒÝŒ, ³¤ ¼"H¡FóŒÝ4f*!TgÎCŠ×6µHÈWÎÙJhñ#„Š•òòEŸ2yd‹±Ê4ÿ_ן±[‰P%;žÄ)Bµ0]´râö¬•_¡šáê3vóYÇl0*oÊb¿f'y•3…ÏtÞSÚRÁ`~ª\þ¤ôñ°ô½*–WÌhKŸV*n$qý» “ýn˜H©ƒœP²=s)UJP+ªR$Ý¢TIy§ ËÍ—×W¯1ê4®?c·¨×kA(IÛò×mxQ¬¤L¬âA¾&•¶š-P —A8†ëÏØM‰”9º²©5¡¤So¹¤Ss¹¶Tsó¼‚GuG:µ¬lÛéš«;K¶@>¤t"T\Æ®ìš~f_­ÂÀI³eB·g¨•±’©NŠQŠ=ÝV¡¾m†ÅÃÂõg즃ÕAAvœu+#>g;š´šB·Rz$ù¡T¡Ž¶JI¥G1€ŒÝt𢠈dµJݧÁ1æ„J9³)k¡TÞIƒ^_ƒJåƒ1U>*vÔ–¦PZëŽ`¸»ýD'¾B902våÜþ7>ܵ|$=FÆnú%ÃY¾ñ+TGÆ„#ÀÈØ=/¡†«P„+c7y>ùô+¡ûÀÉØÍb¨3ŠŠÐa ]c7{mP €Eè°®±›¿¶¯P^¡BÆ®B¨³ ùr¡ÝBÆîùÏC¡]Eÿ2v‰P„£—»w±&ŠÐ5ô/cW0(áŠÐ1ô2c7f ùÝCÿ2v“ (†"t½ÌØ¥I BWÑ¿Œ]"¡ÃèeÆ.ŠÐUô/c—Eè0p2v•ÿ““D ¯M‚ô· Úsòîµ "¡S@ÌØ•È%=ê;´¨ Bº…PÅÌ-z¦›þ D(B‡ JÍŒ(ø6: e˜nj¾ŠÐ]h„’õuA¡ðEªP†Q¡´Z¡ÝÅ1B}aª’B¡}‘Pù2¹Î(äŸ Bº ¡Òu§]R("¡0J^ÈÝ…‚l5,ŠÐ] ÐM…ÊhN„"t¤P"(†"A³|"è<€Z)A B%”š¡{ök|TR(-_ƒEè.B3#ä›þ6 *ðIÿŠÐ]È„BÉ1¡.] !FN(üìŒó@Ðd„º4µ „kŠ@@„L( óx„ž£ÕÉ’KW µÚ@!T›Æ#\%ÚÊÊÔð¹Q¯ ˆP„chI¨KOc7‚:Ë ÊðŽ3Šp ƒ$”z J¸\³Ü#ÇL„"J%ÌÙ­°¼@Šp í •þà©ò à mÐ {u~%ÔÿÌØR‹PI fÀQb®©3in!^žtˆ×^¥O!T ½P‘ýzwù.–q”P_ÿÍ×Ëš„*k*"Ô‘êNö€„ŠÿtB%2âäÔI7äûžùeœÙõë¯çG‚¨wå„Jz¤ì)ù#b :¡bwÒËìÕA^§¬)#”$^ÚÛæâ×'TñÂèi;|ýwQT΀wå •5SN&"Ôð *q¹ÛÍØ”1ê¡ Û½›óF¥ÐÅU¸0zÒ nįJ[«4†’ZFj§”T„ÀC•êN%Çëì"F¥ •ùŒº¡ô £ x øyæsQlÇ×F…J¥<{&B ŠBÝe·ÈCP){Ž ùÒ­úœ…á¿3Aþm•PœOs!Q&p>òÝ),JUé«"ô¡ŒC¾»âÿ1*ÊC¥¸$¡ÒcP 5_Æ„rMMõúÈ,Ÿ1†ÊE´Ê •;…®PR u‚P†Y¾. æ‰@E]‰ùTi–Ožâ»#B †!Ÿ.Q¦˜*F£•2‡:vêë#„JøT¥1iP8ÿÒ£îê×_ÿ:ž“ˆ~ ðu¡^›gùN€¤iX¸ÀZ>íïùñNɆÊõõß|ýw_ >ÍÿŽ¿ÖšéuÉ,ßqŸ†!.Ž¡~ýõ×1¡àkþZm¥×e³|‚„v„ªÅe‘¶Áß0]ú?ñWê¯Kgù ­u™ßÂGz½&BÍ¡ó)W(€€˜PEüÀ°@ È0±Dê_ðƒè-@8Š˜˜C„"šE ‚E ¢ŒP—ž!®ÒÖ„¶øþ¶ ¹p÷GóIEND®B`‚fox-1.6.49/doc/screenshots/cometassay.jpg0000644000175000017500000002107111637250333015313 00000000000000ÿØÿàJFIFb`ÿþCreated with The GIMPÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ»ò"ÿÄÿÄV  !1AÑ"QTq‘“Ò26SUau’²#34RVbt”±³$¡ÁBcrsáðE‚Â&5CDFdƒ¢ÃñÿÄÿÄ01!QAa"2q¡C‘ÑÁðRSÿÚ ?“;eËÎd³R–}ž©ÇdÙ)*—B\Rª’Uœ¼ŠóÄf[$§’¥*bÊB…ê„&a§oaÏCꉜ”ºÑcÉK¸¤‰D¶H'®ˆL­˜Ó!ôºJ’›”JˆA4cúÅñÔJ_ä¦Xc:² öIMæ.1e å+TÃb”×KÇL5Þu±O ·×7¶'oÙýÑ7žSå"å˨QëÍü¡RÒUå¸qw†…¬?”Xµ¹c‡¤‡¹Þu±O ·×7¶ ç[…¾¹½±6›‘aS vfi-%dP GŸ£E4ܰĴª¥\›BJ’@/9ÂÆ¸êÿb'žÉÙÊCÜŒŽ¶9 }s{`lrúæöÄÍŠÜ™p¯¡# ¦!켪$Ъ:¢“¤¸²iü¡Ïdì‡)r¿Þu±_ ·×7¶ ç[ú }s{bj,d)×[êk*ù5ééÒ¶cr‹B󪻀 p‘¢š){'d9L~ääu±_ ·×7¶‘ÖÇ!o®olY?w¤ì‚‡îôç²vC”‡¹[ï:Øä-õÍíƒyÖÅ>‚ß\ÞØ²(~ïIÙÝé;!Ïdì‡)Ü­÷lSè-õÍíƒyÖÅ>‚ß\ÞØ²(~ïIÙÝé;!Ïdì‡)Ü­ÆG[…¾¹½° ޶9 }s{bÈ¡û½'d?w¤ì‡=“²¦?r·Þu±È[ë›Ûó­Šý¾¹½±dPýÞ“² »ÒvCžÉÙS¹[ï:دÐ[ë›ÛÈëc·×7¶,Š»ÒvAC÷zNÈsÙ;!ÊC»+s‘ÖÇ!o®olζ)ôúæöÅ‘C÷zNÈ(~ïIÙ{'d9L~åo¼ëbŸAo®olζ)ôúæöÅ‘C÷zNÈ(~ïIÙ{'d9L~ån2:Øä-õÍí€du±È[ë›ÛEÝé; ¡û½'d9ìå!îq,+&bJÈ——}†ÐâV²´ðPT xAXSFµÕ jδĽ×o=ýÖÏ‚©¦TÖ‡TwÔǧ2¦-…„’A§QU®8k+d"QöÝC**Y ×Õ«#$¤äÛ~¦˜®’!sê`Ú3$%4ίû>s7›úcÿæ+õ‚ ’y1,ä섳imJ@BBÒB‚VœjšŒF"eÙé³dó-²´ÞZ–BP£‰ú&§NÖUøþIJÍîNQ^-Ïa[!©$ôôºPÑ[J ¼IiF¢„SͧN¨ó&zs”«®ÿX3Ó|¥]wúÅ’ðÜTó/÷îD2JRKª=A',e$Ù— uA¤ƒ›#G›Pü/çVvG–3Ó|¥]wúÁž›å*ë¿Ö%xvûËñýç&í£Ôü/çVvAÂñnugdyc=7ÊU׬é¾R®»ýbãðÿì¿ÙO±ê~‹s«; áx·:³²<ÏaÏ KrNbÐqOI¶èS­—¯'X¡417s+²ié¼è³Ûa ’–™hŠÕD‘x¢î4Œù´¸ñºSOé_Ù)·è\‚Új¥ãR *Œ5ᢄ( úeAsN©&©+$¯#B;ÄóAq7QU2–SÑí{ˈ)TM·T4Êy?G5ï. ÕŒÓ_4Eü( ŒÁvLbpñ@SHX¡ˆU "$0Fi A‚ ¤…]›Ê©YfL;ɰ”§ô×]Ž(®·UðžKÑ’þé‹?s±L‚³Çþñ?¾"°ÝWÂy/FKû¦.ŽÈ¦[h ‚: ‚‚  € ‚"ÉÜp‘lZÔeOVM5BA$ü³f´“M4TVÑdî6 ­«TÉ2iá®õ>u¤t`F0×0úå Cí<q Ro(PPSJây£dº»¦].¸‹Õª§L!äº.&Re%´©ÃŠŽµjM@:ã\³v€˜Ñ2ÊÛHÅ(M ÓBÞ¨ºGxžh Gxžh þê¾Iú9¯yqJ ‰Îêb¹Q'èæ½åÄRZ^ù2å— fœq´hD¹V¨Ú%IÕ K!n ‚a/K2Ù¦u°F‘xFªMÒ6-;JÙÃ2ç‹Ô¦iª:®f4u¿hF‡¥bÈäerÆŽqkÍ”ŠCåŠF‡5º2*”F„F)T!òìY¶ÖPâäдšªuAâ"ô_N*²·Ks™t>˜ñ²?žg·øgÆÈþyžÜYËæÿ£þÏ{Œ!IÀÃßæ|lç™íƹ‰¥[8©u$ªïÉL¶á®:’¢uDKX«quô K¹vîxkvãûâ*ýÕ|'’ôd¿ºbÎÜä× lÿÆ'÷ÄV[ªr¢D I³%ÿCGåErÝX#7Më´5â…f]¼S›UEk„tr"^iÊVâ©£D§8 ÇF …æ]©µTi Ӕ­ÅSFˆBó. pŽŒ ̹R3j¨Ó„ˆ!y§)[Цf\¨ŽŒ E‘¸í߆-kìÓÜiªQ?:Œx « 8pŠë2åHÍ« 8E“¸ËO9nÚ¨ia§;Œ®´¦uÖ”8Ž(àµ[–Jš3ÖhOÉ·Àh|Ù¢(4]XC‹>JZU¬ä»Jo:”•(“Æ4Ÿ9„Í3h"a¾ä™ml! •jµ‰ÖEyáÔ¹tË4_=p_@U1€*ôw‰æ‚w‰æ‚áî ?íLŸ£Ú÷— >íô‚#½º‰¦TIú9¯yq•x%@Ö0jSvmÓº¢ã°eÙE‚ãí´•¸Q©#A¦‡LE-ì‰~EN<äôšŠ”n¶dÅRžBñŸÒÙyHü“Wå.~ßrv¥Å•zãÁÃV Ë¥o«Ý¾Ë©êäXs|SwÓ¢8S >ÛŠRD$Þ%2´5ÇE†Ÿ÷[9MpéÙ€£Œ3qÀcÖó2N¸Ì<‡ÊhsD7QÂ7-@Ö¬ãEHÔ¨°ç2.ÓµŸzI™ûxÌ¥.Þ| ¼ëœTÁ&+Õ4^¬LJ&Þ–aÉ+βC¡ÓZæÓJ'A˜Óž5áÏäµ.›ª¾å‹•ý›™oL!kTþN‚´¨)aK ¢…Òkv ùÿ¦ÎWsn@)ôZRéͤ‡55®EkÑŒY½×g)¥,ÅP BZ ¥©Ž„ÒeååÙAd)è„è 48Ÿ6œ}që/Ε*þ œª·n©hqvŠB@j—Ü©¹¦¦íyÏ8ÐH1ܤÈKK%,´MNÌJ:‡_Ki ©DƒuG¤qEاä‹k&E)ÖI¦$ƒ¯GD÷cðZKñ©÷f׿ž7TΣ¤‡{œxgþ5?¾"²ÝW §‘ôd¿èbÌÜãÀ?ñ©ýñ¦ê`+*dM³e…x°1Ž;Kr SzµÇŽ6<µgÜáøëó³ ÝQϦ©:Ò+¦5½óîˆþ±$¾¯¬z`¾¯¬zc IZ‚R Q4k1¶bUÙU%.¤  ‚>±k¾¯¬z`¾¯¬za0@ ¾¯¬z`¾¯¬za0@ ¾¯¬z`¾¯¬za0@ ¾¯¬zbÑÜg8¬¬µ’ÚP·.⨜^@ÄÐáU‘hn>ë’ùKl­”)Õ‰^õ“‹¨®W]óMÙ“‰–\B‹-_MMt(Lœû¥ÀËwnR[ Ó]‘ªyÙÖV—”ae(+iõT‚kxTu 50«9Ù§Ò·rYmš " šâ}PpŽñ<Ð@Žñ<Ð@ Õ<'“ôs^òâÛ”12ÝWÂy?G5ï. õ¤fÈ­³D!ú&×lÒÌÔûLÌÌ*]ƒRã©Eò„€I7uèÑ`ºC©5|²¿ÊsÜTSå«-ãt“KúzYWȫ۩ècÐ)u”×Û©’“³^T´ó³2 $ÑWs¤«Rn€Q)[–ûÅ”$T9,£]$ݯOš15—Y6ê–í¶Û7ª£›sÅ¢<ùÂPu5_SΖ9GuGh»jæ[*b\ª„¬p#EuóáúF·O•”œÉÖ››T°KÊ[E-_¾àie(Ó…xõFW–ah9JàZˆ iÁwÍêóÖ89•-¹eIËÙ³è˜u7Ô”¥B‰Í¬WÆDVÚ£”­Î<³ÿŸßXî«á<—£%ýÓvçÙÿO÷S eLP¨lµG&; nA5ÂÞù÷?ÄXRÜmE7[„×ÏŒ%ïŸsüGõ‰ sgü™~g[ &¿X‘ë«êé&rÂx(•;(èpõÁWÿk1 |Œ¿˜y®'Ü«-ô32¶Ý®eöÔÓ”Ô¿Qú¢bÙG¸Æq3$ü©«ˆ7+@âqIõÿM0Þ$¬ ‚‚ ,ýÇæ+”–ÓÎ%hIRR]@Ĩ€œ˜¬"Ï܆e¹\¤¶_q"âeEkJ•@©®xßœ]üÚ͘¹„­-ªµI 5¸Ûg¼¥…£¸×,„Ѐ¬*MkNç-WqÆÝŸrj\¸„ªµºk¨¤F#l„ƒ 0Ë(8Š€µÔPãZqãWHïÍïÍÝWÂy?G5ï. ñ8ÝWÂy?G5ï. ñž1|vu%óêÿ)ÏqPÔd°ôÔúeåÛ[¯8…¥  ¥ƒ@³™h²”%?:´…)ZÒ€=X“ç§{R#¯¦¨l‘æÄ"å¬ú.”º¤Ðê¡¥"ÚɰÏÁM†’ÙUSz¦‡HóGâ:©á¥¹èé0ÆQr—¡]9"äšÁBÁÀŒ޼œÁ˜bª¦q&Ч묮e„¸.…!&¢#vi9ç@ïnãÏ\?¬zߥ|K*ÕA-§Ñ¯óöïØ¿4<§q:PA~°]Šrá[¶C/°ÂmðIÔ›ü{c» ­K:`Ö”lãXÇ®Á6 G"µF©Â91µ$Wö€þ>`x¯Ö5IâÓÌ¯ÐÆë@ÿ0¼Wë ²¤&çf]\¬³¯%†–ëŴЪ•MÏš­Ï—{ç>ÙÿO·TåDˆ¤Ù’øzŒY»œøgþ5?¾"²ÝQE9Q" hE›,GA1ØÏ-ÈFmÀ Š ¤ly‡sî|š»ã«Ï î—hEúWMëÙe.M¸ã£ä]WçÄÑ>ºUN¨’¾†ÉÖV†e  ÕU b¢Uú=PÌ4°A ¾6Àûʘ}n¬ÕKQ&5Ä#©>½­žó¬<®TÊÙtï…ñZ±×C ‹,.—”–N²•…Ž#¤Æë#‚ë„ÿm§O­ ôÒ#›»8’·Ä‡ ”PIR]iiJUZsñzã^ez®eƒýa R ¤š~Iщ /Y#‚z=Vä[[‰Ì;O›QæŒ)§ß!CœFÚ›4Pè Ô\a+R R¢“æ4‰:»Ò¬YÛÌ\¤¶^H$‰j`iW+Áôb³:48±ÿ1‹Oqu¬åe°ª’®ä:ÿ¼LnO»:• ÜeN)´©m:ª“Mf‡]Z¡Ä»éq!ÆËÉHÎ% é¤"fÏbqÐìİqÀ(V00™;1‰4Ñ 5ªÊÁ$Zi€+dw‰æ‚w‰æ‚î«á<Ÿ£š÷—hœî«á<Ÿ£š÷—hÏ?˜¾;‡¶[îËO%ö[O6‡‡QJ’B #A†0æKçÕþSžâ£’Gè}S˜¼Tè;\N^ÛççŽÌ…¼üªh‡T9ŒDÚuM¬) )PÐAÆ5<‹à»,Òñá I¢òŒùtñËÒFŒY¥БLZ®Í*ªQR‰é޼„º¥åÎpQÅš¨qqáÙÖå–Âð}̯R¿æq¨~ÞQÙë­ç (*j“Ià:–k>L±rô[WóG¥C'Å9£¯0fØ‘˜]ÆßJ•JÓúˆÔõ¿g² Ε4š×Š>Áë´Êbo!¤Ö—šCH™+  •®i¯š%v¼«Ò ªg¸AºÒB¦±  ²pÆ*Ö4Ƹü¨Ë-Ùæ]âe_ÙëKòêÙñ2¯ìõ¥ùulT¢A”>ÃO7`¨Ue¤¨ªèV8Rƒƒ\M=E™eM!¥´Ý˜t­e (½B:dE[«<“¼L«û=i~][ Þ&Uýž´¿.­‘ë™»"ËÏ8†¥ä›JTxðºj¼ MEÒ#T••(¢Ô¥–V]†ÛUiBF›ÔÓÇhž v<—¼L«û=i~][ Þ&Uýž´¿.­‘ë•Xö[hCÌI%NµJ‚JRµ§˜ÃW%l‡qRíY±x ,R¼J‹º*£MF: „£^§”7‰•g­/Ë«dÄÊ¿³Ö—åÕ²=b‹707-b&]+áæÐ«Ô=èÇ\lv̳Ú ˜³›Yh*ê"´Ãýë6‘Ô1Ê{JÞ&Uýž´¿.­o*þÏZ_—VÈö4µ…d8ÂJ¬ùe, ,†è †šaÇw½cù6[Ø' S£Æ›ÄÊ¿³Ö—åÕ²,=ȲvÙ±­ÛEëNËš”ir—·š)WÒh+æ=½ëɲÞÀŽ}¯eÈHʇ%eedЩ ¡"8 ‚ªÑÞ'šÞ'š=º·…~ŽkÞ\AbçË •·gšž~yÖÜ¢JÐPÁ+]TJ…¥4H†ŠÜzËJˆßÍ >a=¸ªQm–FI"£‚-¿‰û/íú„öàøŸ²þѹÔ'·ÀθÑRÁ×Äý—öΡ=¸ÏÄý—öΡ=¸Ž8ÑRFÄ&¦-Š /íú„öáiÜ’ÌOþ¡_PžÜC„‰S‰Zʱ}@R$ XS —ÏTQÇH›Kngf˨‡TªržÔJÙ²d“ÝÚ’¥n§lyÚ¬Z®žToîÚ|ºoÜ•}Š=æ3d‚1†ªÃT\Mî_+l2f…ªãaKZ@ ‚8*)®Ÿ4$î-,ão~\v¢èiò×ÄŠçŸôe2¨Ð°"é;ˆÊŸøãß—¨k=¸¼œœ›Ó*¶æ–TR™`J©¨p´˜¹ašô)y`ÉäÊJ7ÂvA¾K[–a; wÁïrç:¦û0|÷.sªo³òZܰû Ùù-nX}„ì€&i—BBQjL%#@@ìg5=åiŸe˜…ï’Ö凨NÈ7ÉkrÃì'd4ÍOyZgÙGf0¹yÇR»RaI:AB÷b¾K[–a; ß%­Ë°É2ÓhMÔZo¤q ÓfVn]”4Õ©0„!! £@Ùâß%­Ë°o’Ö凨NÈk›´<¯5죳nÐò¼×²ŽÌB·ÉkrÃì'däµ¹aö²šæí+Í{(ìÁ›´<¯5죳­òZܰû Ùù-nX}„ì€&¹»CÊó^Ê;0fí+Í{(ìÄ+|–·,>ÂvA¾K[–a; ®nÐò¼×²ŽÌ»CÊó^Ê;1 ß%­Ë°o’Ö凨NÈk›´<¯5죳nÐò¼×²ŽÌB·ÉkrÃì'däµ¹aö²šæí+Í{(ìÆÌòÅj̨q ÿÓ½òZܰû Ùù-nX}„ì€&=É5å'º¶û1‘)3Z›Eúkù6û1 ß%­Ë°“”6ª´Î+ØNÈŒËIbiÖPIKk)Ó@i1ziå¾âÔº©J$š 5‚ÿÙfox-1.6.49/doc/screenshots/dlgedit1.png0000664000175000017500000002477112130340076014651 00000000000000‰PNG  IHDR -®8})PLTEAƒÅÿ@@A……ƒÆÆÅÿÿÿ j(j j s(j(s0s(s({0s0{8{ 0{ 8{ 8ƒ @ƒ)@ƒ)@‹)Hƒ)H‹1H‹1H”1P‹1P”9P”9Pœ9Y”9YœAAAA@A@AAYœAaœAa¤JaœJa¤Ji¤Ri¤Ri¬Rq¤Rq¬Zq¬Zq´Zy¬Zy´by´by½b…´b…½j…½j½jÅsÅs•Ås•ÍsÍ{•Í{Í{Õ{¥Íƒƒƒƒ@ƒ@Aƒ…ƒ…ƒƒ…ÿƒÕƒ¥Íƒ¥Õƒ®Õƒÿƒƒÿÿ‹¥Õ‹¥Þ‹®Õ‹®Þ‹¶Þ”®Þ”¶Þ”¶æ”¾æœ¶æœ¾æœ¾îœÆî¤¾î¤Æî¤Æö¤Îî¤Îö¬Îö´ÆÞÅÅÅÅ@ÅÆÅÆÅÅÆÿÅÿÅÅÿÍÍÍÎÍÕÖÍæææÿÿÿÿ…ÿ…ƒÿ…ÿÿƃÿÆÅÿÆÿÿæÅÿÿÿÿƒÿÿÅÿÿÿHÿ°ªtEXtSoftwaregif2png 2.3.2¦Q‹ IDATxœí‰£$Å]ÇËçS£¬K’%î’]@H‚AMBrlÀxd4ñ$!HxŒºÛâí3õ‡Ûuuýªºú®ê®êþ~úu¿™š™îž©ßg~U} «Uõ4«8à$TØZG¶* Ñ*\óÉz¼¡†õðéz¼QOnÞx¨oÞ¸uãæC·ÔpSŽ7oÝ’cÍí[×ãí‡ÅpGŽwnËQÜ~äΣ·yäQwxô11ÖÃãzxâÑÇâ7Ÿxœ Oˆñsõ¿/¨áóO~^Œrø‚$_ÔÃSO>õÅg¾(Æfxª%¿§É—åè _úÊ—¾òåzhx¶Ÿ«§ÏÙáÙçÕðüóð¼ä9ªá«õøâó/¾P_ÓËb|‰ /×Ã+/¾üÒ+/½ò2^}ùÕWäX¯©ArWŽjøºî¾þÚëwëáëõØð†ßxýzxS o¾ùGo¶ø‹zø®¾Uß©ÇïÖS‡·êám9¾ý—õð–ßzûm9j~¨†ï¿ó}1¾óC9Úáwø£wÞUÃôðî{b$Ãûïþä½÷ß}ÿ'dx_Œ?}_Œ?}ÿƒzøðý~ö¡>øðƒYô¨ð©z¸A=pâÿÆÏH „õ`¸©|VZ m‰ÿz¸sçö£wj Ä ãÿ±GÅèOûüsÏ‹ñ¹¶õðÂW•ƃ]Äð‡/½ôâ+ž6þµ¯¾öÊÝW_{õîkw]îÊñ®ï€o€´àÚoÔSÂ7µÄ‚7ë€ÿÖw=þ¦¾Wo[ÞÒ4ü „ïˆñû~üËÑ xOŒïºÃß¾W[ðž¬bøPZP(ä_iÊ9Aáæ2tæ„'ÆåeÄ¢œðeš¼0.'¼Ê Ö‡¯µèÌ ¯49áU›îÎÍ o„rÂ7Ýœ †`NFôå„ÌÎ ïÍÉ Â‡Ÿ>ðúÃOû÷ÛÏpUpc#rÂoÔÓ[fhÅ 'Üå„;±sÂüœð[&'ȼ0”~?˜š¼0:'Øèoå„rñ`jNyÁÉ o„rÂuNøÆˆœð?'|æ1´ÚDÃ9áÇõäÇõ x'BN°Ã‡"+p¯àßo?ÃSáÒrf“ú œ÷åÎÑW@_a;B@f˜¡Â§Tš¸~Cþ»ñ`=~ºkTÁgêÿ¦¯P{«¯ Ÿ%óç·ë[õ}ôVé+ŒSAÜVÓ– '‹Ì µ×… uN¨CŸóëQä1UR˜¾B}¯•„ª­Tߪsçè+ ¯°R_! ‚¾C³‚°@úÐRáLPYᆲàAù2¨¬P÷¤Ÿ‘…2+Ü”·n6É ¾!û ò¾ð@ü¿£¦õÝ;}ôVì+„T¨T–TA÷£¯›¬ð Ì ¢¯ Tø´TA›ñ¼#¨ïÔ£È Ê ¡…ü÷°è1<,ZIÒŒz‚¾ú +öB*è6Ò„¬p]ZÐ4Šäý7u¿Á: òƒnÝú¬è!оB­Äy}ôÖí+,Ì ´¯ð  zÓWP*hnª[5FؾB“T_Aµ‘î„rú è+ÒWPÝ“Ô(z ·:³ÂgåTg…‡e&ج€¾ú Éú f{Q· =[Yá“M—AoAR}nÚHê¶Ü¯ oÜzHؾÂMÓexX<,{ bŠý è+¤í+ø*LÚ¯àg…¹Ç ©¬€cÐWȨ¯à~¿ Ìaî1H2 à$ô6í+œžöï·Ÿ1pd*ŽAB_¡Ì¾ÂÓ´Ÿ1td*ÎW@_¡È¾ÎW@_}…åç+pt ¨€* H ’X»€]ã© ŽXb]*09xÒû0™â«àý÷`ݵç1ýA¶#¨‚üâׇ¸:0çÁæ¯ý$û úlñÚÀ\È€ÎR8(ˆ*TÎóœ)Ò™š3Œ Ęî¬À¬/PäN· Á§“¬Põª`šFPB¯ ¸¥aÝÙˆªìC¬‚  ¦u›ÝŽp— ªidŸbžÍšK ‰÷6#îA)„¶ uÇïÀÃäIæöâ`p ¨€* H ¨€* H ¨€* H ¢Ãb•›ENzÙÄâ¨ËèŸÙðEAU?Å*7·‚w¼ljqÔeôÎlÄE @¨$ž Õ\}d15nKš_¿µå¬ý|õÇn¹Y¤üUݳƒy™[Ú,ÅýñPFž}¡Ÿz¡gB—q³ŒsÏ2œîX‡Pyâ*i˜¬Bù<à¨À®±Æ‡F~ÅOüäÌÇ,rº ÝA=O…&p© vFfÑ=+̼—_Š¢¥¯Uà}*Ô&8*°k×j˜§Â¿±Ö­‚ Æ ¦6R© ò™¦|¹ ú® ¼...äÿô·U¯ƒ eÓÎ WWW¶qh ¼¬P»p­®¾}jÚIDÄq&¢ÈQ¡¾g²*0u_—T¡»Y%—zÁ=” Ê….Ôköˆ§Â•áÄ|Ôw¼4á#¯¯pM&/+\ò«“ÜÎ.\¨ ¾}Uô™—©P4Ô}]Þ«§Ÿõÿþ6«‚|÷²B-‡»Tò†T8C…Ò f…s¿œÑЮ=¸:‰&Ì Ž â·­¿¼vɵ uŸ!QV0í’ 3w4ixYá|qö³‚Ìr¼˜”lâ %Óî+œ„ "ŠUát%iÂóQYAfF…˺貞ɥœÕi‹¾‚ nÓ”o« D´*\PB*\˜¬pá© UfA…rig…ºm#²‚Ú"àƒÛOÍ'ªˆÈ µ üòâ$g•j ’_ì,£Ü ²‚jº™&£‚6C…¢ ª s¢Y‰ž°Ø"¢¯ \¸V«À‡·M«pa¿ýÏ^²8“e»ËЛƒlp÷e…Á¾BgV@itª Ž+;9YÁšpņ[„ Rlzëí’¾ ²ÀÆ•Ó)Pÿ¼.„éC´—!ûL‚»7+,Ú‚DíM\e xHׄAEÄ~éB§ Ìvš=tÇ™öô¦"ýÏÛ°d¶,¢—ÛaĤû:· acjñŒUÁýòTD4›ú³³›R½©zs*n d…éûT_¡'+`Û~YœŠœN§KÖQ²Â¬¾‚Ûtiímöû mqÜwcvÃX\û>ñ &ö5Gé+t¨ÐŠuºŒl?wô樎*O\e l½Rœ/ÿAEÔAUi¶ |‘w«0²¸gf]/;C…b ™z²|Žº˵ aÚ^¥8ê2zgÖõ2¨P*8u*É*œB°(ÅQ—Ñ?³®—A…B¡*L¬ñ¹â÷4cusg¶fýh¢„" . €* H ¨€* H ’áßW؈m?0ƒ­Cf.zçïà1HqÚzÀd²  ñœ ˆLV4¨b“U§8‡»‚ 0U”U§K…M?K…\3¨P¦Š B„Ï’öçOP¡0L©8Új;ÐX†*´$… åP” í|@, BÄÏ*” TˆøYª5`P¡H BÄÏR.ZŸþ J£0ìÉö¹ª`.0 ‚_"æWŸ¦ªæ²™ªà¯Ÿ_Cö¹ %§ý«àëÎSáþ,ƨ`c~H… ßp`2GPÁk‹ÏTaòç4æEP!¡‚»…f® “¯Æ¡BICó^ítŽ }*T¨6UÁ¹7F…ë Pa‚ çÉ*œyý¢W… 6WÁ z¨°GPÁYó HκB…­8€ ¡H^*´³ÖtøÚ‘³;¢¨P{PAÌþºU*,DGB…U¸îÄ?TXŠúø¡B™*Ô.óÃõæ¿É`*ê㇠%« ÿóæ>T˜ƒúøª01>ÆqN2Wµiu_*ˆA…Å@…âUàבbJV_‡ Ñ€ ŪÀÍÆTy Ýæ¥d®‚z­@œ™‚½¨ÐT˜C,zcdNÄJÄ åQÿù°™sÞ» IaÙ«@_ p R:⪠¿À™Ža{Û~¯OàÜ̉ÎYÍJLõ­ÉóM©BëB…rˆž˜ o:™³ùâ'JÑùiù&Ï7º ôýùC…rˆž˜Žh*pW#ÿù–*xK^_Šh*˜¦Q¼ÿí€zÇúC@‰­cªM©Y2M‚á® T(‹(*¨¨ Ñtpeùäˆm¶ ÙŽ²Ûm榱™ Ìü³rB…²‰½‹mVhaö+ô² Ìé²@…ý¯ C³š³$õŽõ;_–šÎÅ|.¾^JVysox³)˜YëÆ}£Âì>D¾§îL ± &ädì235±,¦6ª™žxÏbMY³ô@ˆ£¾3à¡‚w¢B“æ‘ï©;XG¨vZÙ[^›(ô,ÒD:Ùo²@#Œ4ËW‰Ü6öA˜mbdŽÒ˜ŽÒ ä1u‹ÙN@H…Š C´a­Å6B…PiQ·™ܓѩ;ØF*E3 ’*çYêÛÜ.½Ú*4>ySÚÎ*‘|w± FÞÁUp{„ ¬ <‹Óv©’Ó² H3Z… *ÄÇ Ñâ.âânLm„¢*¸[«lAUY§¬ÂÖgãLB½cýΡ‚»˜&…Ä™Mq +TP,]0zÏrÿlJ*TãT8OVáÌ땨B³Ù¨P!+¥ç2› € ÕhîO¤4}è™ÃìL…ç0dyêÎôÅ•¥B’¹fÏ)® Þ^er„ÄL²¯/ª2;ug"œLû>Ë\U¸¬ŸÛ.j5f’ß1Hòå2´¹¾í¾}†) ,*¢ [Ÿ3 úÞ'ª`C>âí2¨PÈ¢"ªp=Ѳ‚±ô½ÏQ᤿öÕD̾É6øMy{ùÏ*@…•T`„jq)ø‰» $-G0{@…ìu ÈE*8ÿmèû&î)Qª ú[U‚ äë<H‰Êá¨@þ«‚·è}üØ«ÀG” «ðsC>*øYÀi égì¢Ô¬ÑŽlqUa |RA…æwaY`jöL3/…$Tv›O{ë67kôóý°Š ~¬óVøGSAßô§äŽã‰‘–ÖÖcETSq§‰~YÌ›ÿ£¤h«ÀtèPÑRÁ¸°(+$*¬Çº $éZ†&pý@=—Y5';‡H½*˜FT˜ T¨>M +H“ÉSa” =*ÌÉ ¦ ¦ªOã©@b½'+ÌTA7q檠 ¢#Ó…@…ês*$¬‚u!RVœ³3¶ÛܰoÜ^ƒ -Vì+¨¦•Äié6'R!õÆÔD@…õXC…øä··9ñT0¿sÀœßE ¿×øÚA Â@õ9’L…(¸qµô¯~TæÇÑìýYi* TŸS!y«àAßûþU¨*ó›œêæ`äâdëøHr¢FFjè{ß— zzK…æájŽ Pa úœ ™qéí ï}g*¨IHV9“)@…ês*¤ –œÅ–ˆØ*¸ÝæŠv˜gôš¡ÂPõ9rZ笋,:¡3ØÛ¼P¡*L* TŸ*,*¬Th€ “ Õ§ñTÝ{MZy=@…É@…êÓ¸*Œ¯ž(GÇÌ`© “·Xøh¡Âz¬¥Â„Ú©>% fÖb`¹KU˜ú;lP!+²TaRUFK"UÛí¡Bad©ÂÄê˜ôôžÅRÁ0 Š*Ø-V>fìA B^@;£*0™>*< UèÉP!/6S¡;€ËUÁ´¬ t$È»%« 7YìL…І˜D*0rÈ=½Ð ærUøXÇùÇâ>@Ø êšÓ{S!í•´*W¿Œ,œ1ÿ‰m˜·® ‰¡B=|lO4¥*0ÓXy*äÅ*0}*asl°{ðÉ=v¾ î×"H.»b´¯@²CcTÈ‹² ž@Bc›[ߨÃL‹È“‘ —:Ü/… W´qÔh²e]š86QMTh:V…Êu…yeÙe…K1\v© G¨)«gÍôm…Tp­!÷³Rá~-‚TA¬Þ•¿iW*` RlúHÎèÓìý¬Thv±ÙÝÍf¿‚é6³ûMß¡dš5Ú:~#²ê~=Wó•Κë,„»Í­’w+CØ}fƒ{›‹"׽ͤADºÍîF¨*·nó}+‚”*”D®*${zÏŒpöT Tª0õƒ‚ Y쌪À&r*ØáÜæ©@…êÓÌWaòYÂKQ1–èÜæéŸ ù,¡Âjä¨Âj5Ù,1Ž ó{ÇÝŸ%TX UX¨0¨0P}¨J*T T ;š¡B!@…*¾ t—3T(…uU8ç‡}»ñ.þrb$/@…B€ U|~1Jcm¦ï’MKîÝ»w*”Æê*,ˆ‹¬¥BxçÛðúA…õ€ U Ä/¬;*ÌÜÊ Ö£ -›YóiÏ8 Lå¨P…¨õÀ:ã*¨54M$¨P›¨Ðú‚*`|àþˆy ’¨ L¸/meaTÈ’mTð¿àÙSDÁÿRDè;k-TøgŠxÉ¿PDÁ?QDÁÿPªpêP©Sü¡B–@…*® ¢§ ; Ê«‚ö*ä T¨âªp¯S}i˜Æ¨P¡ŠªÂ=±!Ur±{*0d… ULîÝ3.¨›AH9ª4*°n²*T1U0.ÔýmB°Û¼›¾ÂZ Z¨¹Û|ïžÚq_™Þ˜ZúåƒÍ‚öEè-B…{›=v¹·¹'vv¶(¨z ýÁ> B/P*ô©ÐQκƒ , *ÌPÁ?B÷×ùTÈ|Q82u† )€ [/ ç+@…^°i\õ™«æ,¶äªÂqÈ­”¨*€!R«ð¯¤ÿAÿEÿGEMNÿI `P* T€ @ @¨$P* T€ @æ© wVÊcïÔU/šòÓŒ_8—Ÿ%Tب0S…fÊð‡ Å–¨ < Bpum¤S3ëE®*\(’/gûEA…% $­ ûÍí|1ôY檂|§ëÄç¶‹‚ ‹²B+ì¡B±‹‚ ‘H'¨Pè¢pdj¬n3T(|Q¹¯Œ”*ènƒî)›‘Ÿ BI‹‚ ØÅÖ ¶ «>ÍHÑÉUoÑû ø±¥VÁùq¤SDÁ¿SDÁE<@×(¢à’" þ–Ó}• lP*ŒWÒ¨> TXTX¨PA…Ù@…êÓ@…å@…õ€ T °á§8k´uüF*TGPAn!q :©‚Þ¿3¶Ø¯Æ~–±T¨¼(gÞ¿|½_vo*lp TûYÆUAe1Õ¹ 1Â<Ð<©¨0®úœ Kp—ºT;5°ðÃ.@…qÕçTTX‚¿C´ZÔWбN‚=¤B«_ Âö*Ô‹¦Ã|HÄ 1²Â Pa\õ9–ÀÛ.DP<}`J [ÆàVŽL]BܬP‘n1³E´?=²ÛÜDÇÖñ‘Mö+äC<γZ¿XY!P¡óÒƒ©0cé|ðE±²B" Â@õiŽÕ@:O?vÿ<¬²Âzl£‚ó|¤Gÿ@ÿH¿J¿F¿HO‰¯Bë·Û8› F¨€¬°P¡J­-?Û›'d…¼€ UTDçWÛcFVÈ ¨PÅT!”–¨{VXkA«"ª`¢^¦1Ñÿ™)«£ßô™÷FôŽJ"ô¡Â"T~P÷™½W"+(ÊÎ ¸Tˆ ÂYšPvVÀÕñ B άø¾T€ ý*h†T( T€ *è>²šÜnó.¶ A¨0¤Â4ö‘JXTH¥ÂNŽAÂ$¨Ð§ÂäC´ËÍ ÇG¦ÎPaDRèk/É5+œ¯0]…Y ­²ÂÖ@…É*°^êh°|hý¶ ¤é*\Œƒæ„a¶&µ OSDþ1Eü)E|›" ~…" >Aa~pŠ‚?¡$PAl‰ãð§eÎ È Ùæe~R»*lÈ Ùæ«ÀéDY0_d…­ ‹²‚¹sßU!+TX¦×½†.˜>LY!{ Ââ¬pÑ£‚Ü€…¬PPa² ž =YAoÌEV(¨0KÝ[67š?º [Ê*¤Ûņ-HE¦«0ã¯òŸig*„¤‡ ™¨=+„¦-*ï^¥Ô€ S ñˆÞWð\§úAäsÂ%¨0P}P!³BWn0uª@æ¦Z=û•û ÝÍ$óPo *@…aäìd¼s}Ï‚÷äñŸe‚¬P‘Æé6W¶§Ü¨àt›¡TV¡™òpàÞíñ.DÊ ©€ Õ§9˜ 'NMàâ»_LôÞ”©ÐÛ=äz ’YôZ Z¨©äD6'jp{OL!†DæYï‹Ð[„ 3²ÂHÈt¸©”kVÀu B ´K…\³®ŽºUpºÍ#Ul e› B$¶9µUBÓàÆƒ¦Ðt¥ý.tßg‰¬°oòá {›£Fa^ –ƒ¬°õ¢Ð@ÊD…l³¶ Á¼ô0Ýæ„䚎TÈD…\³Âq€ ™¨€¬°5P!¶*d¢²ÂÖ@…LT@Vب‰ È [2QYak B&* +l TÈDd…­ ™¨€¬°5P!¶*d¢²ÂÖàÈÔÉ*œg1ôY"+l ÎW˜®ÂŒ¥;¿QYak Â ØTÎÃ* +l T˜£ÂÅ0´q4Fd…­ ©T°Ýö²B $T!3âªPGøÀ­ ¶ÇŒ¬PéTÈûvcd~RÏVYakR©)qUàt¢,ðT`£U@Vب°,+¨‘;÷­ ¢]†¬PPa¡ \÷B*¨>JÒ¬0¹Î@'PaqV¸èPÁô×f…Í6Bì%‘T˜<›5Y·4¡Û Bi˜*:² r'@(̡‘0Ut`Xg˜C…#aª*ˆÝÃfÂ*óOM*[ ö ThÂ]ß‘·ÌT—èǡž1UtdšÐ·½†FRö©"¨Ð„{×*ìSEP¡‚ ÇÆTÑUhºÉnsˆ1§Ýæ½JÃTTˆ T( SEÛÇÎ, ˆ…©¢ícgPÄÂTÑö±3‹N¶þ\qšq˜*Ú™ ,äzµV䊩¢òºÍ¼O…\€ å`ªˆ‡k.c ˆŠ©"¨¨P¦Š B B9˜*Ú™ [_Œã’`ÅáÖŽTØfؘZ¦ŠÔv@ïÀ³öqh£ŽLk=©÷ULOºO°t€ *¦ŠHV޼† #ÿ„ *¦ŠZ*˜ó{«Ê¿ËôùòæŠ5gþÚWšƒžÉYÃöU䉭ӊ+•‘èS; *¦Š|ÌÉíæXýöÙ,VÛΔ±fvNð7SÛ¢í"³°“e ˆŠ©¢@‰5¿AÜ:ÑW‡¹ŽWèÌ¯ŠÆ{û)U@ó`ÿ©2k©À:nJÃTQXn3'hÓ¨Ðz±Th|ïXT8¦Š:UpH䂤·à~“k ±AVj …:T8¦Š‚*´»ÍM!AËÒ<¡ymÓ–by•ûDò}›Ú²JVh¦¬÷º`On† ¥áÖœ]l¢#.1H•Óâ ·õ’”T( '°¦ª0í{22±HÍÆ»¥‹1¨°{œÀ:ä-È=wCTØ5¦Š¯HGÇ ¬cª@›?äâÙ¦“nóApë*$*”†©"OF¦nY6@SEA\ Â Bi˜*²*覲·GŒ ìðZ¨¢bªÈžºSY‚‡ åB¿ [®¸$Xq8ETÐSzN[I*,¼šWäzùk½u}ƒNœÀ ¨ ‹ËS! B9˜*ÚY) B9˜*î6œI³:PDÅTQp[^±ï@TL…TÈÚ\ ÄÅ ,xlL- SEP!2P¡4LA…È@…Ò0U"JÃTTˆ T( SEP!2P¡4LVs´-ÜšT( SEGU¡î‘ö¦@…Ò0UtPšË]ØË€‘ ¹0ب«”Q Bi8uXBG†®ûÓüwŒXPÁ¨ ÓAà’`ã]€ ¥áT ×;b^žÐS4öŠXÇS¡ãZxmœë~*”†XTÁé+Wô²`ÎEÁÍ£ã[HP¡4œÀ:¢ ©€ ¥aª*D*”†©"¨¨P¦Š Bd Bi˜*Ú› [®¸$Xq8•Ã)ÁãéSa­Ë~õÊÂU¡8pÅ  SEYÐxŠSdOV4¨b“U*€Ød°Ée¶^%‡íjÌdëÍ-³Q«OTàÈ@$P T@@$B…­·›O³§5ÿ*JB!Wx²IEND®B`‚fox-1.6.49/doc/screenshots/dirdialog.png0000644000175000017500000002156611637250333015116 00000000000000‰PNG  IHDRõ?_;Zà IDATxœíÝoŒçaßñß~Q @Ò{cô_°•«°Äk› nDÎ%Ú­4³À)^ø…=„õBEmABHð¨*€àº®ˆèJ@³Htël£°eUÚméØpHZ²ÍH.™š ØIƒE‹¼2oúânöæΟgþìììÌ÷,nvþ<óÜ¥ß>ó<óŒ#) ÃP`==ã}B—_}]ˆV¼wóÍUÖTôsÅå×®4râW&_Y|‘xåÌSœ€u÷Ìo¥n{(Ô¥ÃÀ]¦g¼OŸëÌSúðRϬÆ3F·Ö+޳¢šØ‰êÕÓ| þÙ§ôÏR‚ý¯¥ôWùcý¿ÿõžþïŸÿ‘þÏŸýH÷ÿô‡úß÷ÞÕ_þÉ;ú‹ÿqSþ“ú³ÿþ‡úŸw¾§{ÿí»ú“Gwßû¶~rëšþøGÿE·0×ß}[ïÿ-ýÑ7õ£ëßÒ¿÷M½ûÝo™{܃W醤oU–e–×e9íù¢ã,Ö}1ÖÚÍ:v•/³~_tœ¿CSçmúÕ†K,³\d9‹££ÑïQÿöå×®è•ÉWtÿO¨ƒð@áA¨ƒƒ„¡Âƒ„:µùüñ­ÿªðà@ú¹íź[7¾¥ƒƒ0õø×ÿý\ô©¿ræ)Ω$°.>wÔBÿW)—¬Ííñ÷YÇ~θ”ß'©Œ¬:d•›V·¼ºfÕ/é\iÇ™Çfý>i¿wÞ¾Àºû+é¡Ëï—_»¢Ë¯¾^®¥þ“÷®-ö{ä±_<è?úÃ7 ·ÔWõ ¯º_Ûí‘Ï…¡^Ž]ü˜(^vœÄ}’ÊH*Ç|Å˳©k|[^ýèáð޶ÇÏŸV?³Ì¤ú˜u¶ý»ðâµN¯,¥/¿ßþÁì¡c~ð½o”ºüþ ±Ê²Ìòº,gýÇf»=ò[Gaö[Gö|Bh-#«ÏaÖ1Yç‰^6õ‹Ÿ+zeíŸU¿¤Ï%^nÒ~fYæ« ÿ–Xf¹Èr–Ò¡žØâ¶8&鸹¤w*Ë2Ë벜ôŠØnOÚ?mŸß Cý¦ÑJ¶-æžy妕Y¦~/ÆÖ¶þEëcûY´áßË,YÎ’xK›$ýô§RûÄÂ=–poùã¿ðô½ùïé <ÈìS7=ôaÿÈ2Ë벜¦èö¤ýÍusúƒmÊ(sŒM]¥rõ+Z›ú\t]:j©ÛÖ­ ÿ–XfÙv9Kj¨?xêïïl±ßo]áÁ¶~ñK’þÁö?Ñ·ÿóW ‡:ÐçG/…¡.…¡ÎAòÒQ+Ö\/• ¯2eÔqÞ´2‹œë¥„ϧ®P\2®]‘z‰=kÛƒ©¯ïç?I’®_ûýźï¼ý»’¤kßújæ±<Ü/¾>íøo¼9?qKÛßtWÒé£J±Ìòº,gù¼1*û¹„º¹í~ñ}¢myë²êøœãýÍž€5¿ªþ™O=½X~¨¥þÉÑÇ›©¨äËþ×N¼ÏÖ¡@GêtDêŒr‘7Þº–· X²ç/=§›ó?ÈÜ'7Ô%é…¿PK…@q7fS«ý¬B]’Âû·­Oþò¿yUÏÿóO[ï“Ç,ÓÙØT†šÏçÚÞÞÖ|>—$M&ùCI[Þ£óSùÿö_ZÕÅÙØ,ôûçæ»·Jwf0Ìßéˆu¨Q4ÐmŽK }3Ð%Éó<&izüÍÆkgcSÒÃ_h¢õE·úí‰íÚÿ募/´ÿRB½LKÝdÀf G<Ï“$ݽ{O§OŸ’3( \Î]°j±ÇÏŸ¶\d’rûÅ«XÊè÷ª^DR G¢@¿{÷^ármÃ8¾X¥¥„ºMÿxgcsq ;¾\T•@¯"ªsÙzPVëZêáýÛ‹o|¹ˆUzTgZí[EÃei]K½¨Á` Ùl¶xßt Ó"TzÁÞªÑïq6-Ýø5IÚÛÛÓ`0Xj ‡÷o§ŽpOÚÆ`9@3ÈÏ †Ö÷¤'iÕè÷²-|3Ü÷÷¯–*Ç,Ïö}Ù}ý•Ö2¯ì­i©›Ç”ùb`îA(°RUZäiZÛ§^Ç`»ñxWãñn庰Z7ú=Rǃx¸K’ã‹õtM'[ê¦ømf: «ZÓ§nªcªYÚ¤è\îEµjô{œíñÎÆ¦\×eð Õêš`&ËZ÷©Gî¥ðNÀô¬€Öº1›* ÿ¢ÔO[kß§îû¾FÓÃ祇{"Ü™‡ÐOlT7çPê§­µn©G|ß?|†ºî‹Wà ö¬}‹~Aà @:~äjÑŸŽóAës´¦O=)ÄÍuieÎçsmoo/Þ&ùšJ[Gý[C¹n¡êP»"­n©øÀºV~Ï:.­åzü¹êžçi4™HÓã~¨Âó°G­ls¦º¨óg|I¢ø2´¶OÝö²µèÏóäyžvvÎÊó<9îáeøÑ¹ Öçîk7Ã=Úñ`/дÖö©ÛJ ôH•ǰڶ¶Í§´°*­k©ÇG«W¹ÞôsÕXµVõ©Kª¥oš@´Qog”³5 ´··§Á` ‰@´S¯g”³i¥GÙ¢PŸÍf:áE51£\«ZêeûâÍ[Îö÷¯–*Ç,/é}•e@U™QÎö6¸Öô©›Ç”ùb`îAðð@ã–èR G¿Gª¶ ïßÖx¼«ñx·r]¨Š¹ß+Ї»$9n°X@“h©×$ ÷è@Óh©Ð´Ô-8›»Àmf€V£¥žÃÙØ”ëºò‡Rx'¨4­,ËDKÝ‚ïûM¥Ñù©ÂÀ=îñ«DKÝ’ïû‡ÏP7Â}ñ ÜBÁžµo|[Ù/ |É€þi¢¥Þšå’BÜ\—Væ|>×öööâýh2‘¯©´u4ÏîÖP®[¨:ÔªW3Êå—Ör=þ\uÏó4šL¤éñ|¹þ°ø“ߢµ9SÙZïß>ñ3~LZY€~éuŸºí%j3Ð#žçÉó<í윕çyrÜÃËð£s¬ÏÝ×nrü~÷xH'“µÐ½îS·•è‘*a-Ó¢¶}² zÙRV¯2rçªÚ¤‰–z«úÔ¥“ý×e[µ: mzÙR/j0h6›-Þ¯2Ðm®*ЧýÔË–z¤Hÿt”{{{ KôøU„ørÚèws=ÁýÓ«ûÔ£ãÊ0Ã}ÿj©rÌò’Þ§-g­³9Ðm½ºOÝ<¦Ì›p‚@A¬€FõºO½ê`»ðþmÇ»w+×€ªz}Ÿz_ âá.IŽ,Ö×–? -õšD០€&ÑR #h©[p665:wÛÄ­FK=‡³±)×uå¥ðNPiZY–‰–ºß÷5šJ£óS…{"Üã/V‰–º%ß÷Ÿ¡n„û⸅‚/€ºõjF¹¤7×¥•9ŸÏµ½½½x?šLäk*m Wl åºöua„< n½šQ.︴–{èñçª{ž§Ñd"M§‹uþÐþÉoæ~ñ–»y|Ú¶¨Œ¤¹àãÇñú¡×}ê¶—ÀÍ@xž'Ïó´³sVžçÉq/ÃÎ](\ø=îñzem3·§Ç¥~è‡^÷©ÛJ ôÈ2ÃZ¤e]äIs€nëeK=>Z½ÊÈõU>W=OÔB§•ýÑËç©'=§¼¨6z¤Žß°>zÙR/j0h6›-Þ/;Ðëh]ÓB€þéeK=R¤?: ɽ½= ƒÚûÐÓF¸gm³-“V:ôC¯îSŽ+à ÷ýý«¥Ê1ËK{o³-¯ Âú¥W÷©›Ç”ùb`îA(BШ^÷©WlÞ¿­ñxWãñnåºPU¯ïS¯ã‹A<Ü%ÉqƒÅzšDK½&ñYßtÀ*ÐR #h©Ð´ÔKb V@ÛÐR·ôd´´m¬ -õ‚œM…axâU&Øù2¨[¯f”K qs]V™Q ›Â0”ã8µ?2€"z5£\ÞqY-÷´@ vóÉiió»GûÅ÷Ïš Þ¦œ¤ãë¯×}êEdz|Ÿ²—âã÷¸'õá›QMÚ×¶œ¤m€õ×ë>uy-tSÙ`Ï,³¦V5­sè¶^¶Ô£ÛÑ⯴ý$Éqû²ö-ìyuiºÀúéåóÔ‹<“\*ÐeZÄ´ÆUõ²¥^•ã8‹×Rʯ©•Mkú¥—-õ:Ô9ØÌ,+«µµo‘rÝÓ«ûÔ£ãÚ(-€“Öç…¾Ízº§W÷©›Ç”ýb@õºO}UnN<@z}Ÿz‘/iƒãâëmÎè€e ¥n!>K[ôJ[O`V…–:AK½¡z8›»À½ã€¥¡¥Þ@=œM¹®+(…w¦q,-õ†êáû¾FSit~ª0pO„;óµêÐëåê¸O½Èñ¾ïk>Ÿk4™HÓÃp×Öðx‡ëÓÒ·»åg~aH{–{Òv›2lÊIûÒ’v.›:¤}Ô»åâ–5#]Z¹óù\ÛÛÛ‹÷£ÉD¾¦ÇÁ¾5”ë®Ò"³‚0)€Í)f³¶Û”aSŽMçý>6õ€>êÕŒr¦²_ ²ŽI ý(Ðçóùbçy‹V{ÄÖR¶ÁX¶Œ6j[ê«FŸzE¶ýàf G<Ï“çyÚÙ9+Ïóä¸ÂÀÕèÜëóÇï›_÷~ù®ý>Ð$úÔš*6)Ð#wïÞÓéÓ§t÷î½Fê’$¯¿¼®rè€å¡O½¤x8EËe©Ž@¯£5k3 ­ŽrlûÔÅ5ѧÞÉûÔ“¦‹-ªj G—ªÍWÕP¬ë²wÑr–õû@_ЧÞÁ` Ùl¶xßÔ%÷´P,”Ye´áÒy[ê«FŸzÅrlÂ$Ú' ƽ½= ƒÆúГB¹hÖQ†TOŸz]ýÿÐ5ô©—õ‚åÔõüt);܃ P&À}ê+¬G4J|<ÞÕx¼[¹.€~ã>õÔ#î’ä¸Áb=¶h©· îóTAK½õ ´Ôª‡³±©Ñ¹ ÜXZê ÔÃÙØ”ëºò‡Rx'`ntÀRÐRo¨¾ïk4•Fç§ ÷D¸ó@˜Q®Á l|ß×|>_yç1g­³Ý°ÇŒr%Î[¶Üù|®íííÅûÑd"_Óã`ßÊu Wi¨e¾$c®³Ù§È9âïmΰÌr%ÊÉ:&-ô£@?WÝó¼E«=â› ¶´óØ„lÙ/fù€úЧ^‘m?¸èÏóäyžvvÎÊó<9n 0p5:wÁúüQH–}KS’Æ DuŽ^>”Çè÷†$z¤ a•t"\—Qv4©N¼üøú¶)€¶£¥^R<üªa^W/s&;Zà°|´ÔKŠ`Ù0¬èf+—Ö.ô-õ† Íf³Åû6\rOúÖçm¢ÿÚ‡ûÔ+–clæóÓ÷öö4  ô¬{ÌÍÐN ñ´u¶çI:GÖùåpŸzÉs—a†ûþþÕRå˜åe­/ò¥#똼rªl'È ܧ^°œºžŸ.e‡{ ‚€ÀX£O}…õˆ¶Ç»w+×ÐoŒ~oA=âá.IŽ,Ö`‹–z ê1oM Zê-¨u ¥ÞP=œMÎ]`bÀÒÐRo ÎƦ\ו?”Â;ÁÒæWô-õ†êáû¾FSit~ª0pO„û2¤èf”kpß÷5ŸÏÏPWÚïp}ZzúÕ´ãlÊ«2[\ÚvsŸ¨Y_\²žÑ_Ÿ÷;™Ûm~?èf”+qÞ²åÎçsmoo/Þ&ùšûÖP®[¸J'³h`%“ŠyûHÉAŸµO•ùã³Â?o?æ­ÐUÌ(W¢œ¬cÒB? ôøsÕ=Ï[´Ú#þ°¹ÐI;Mð–ýÑëXg°AŸzE¶ýàf G<Ï“çyÚÙ9+Ïóä¸ÂÀÕèÜëó§=8¥ËÒž0—te€ñ ú‚>õ†î3O ôHÃ*ü‚R¶_?®Ê¥õ:™síÓRÐU´ÔKŠ·þª´ëôºFÏWÉ®®ÙðÌ™õ²žFÿØ<)®OW3ô÷©—›²AV5У 3_m­¶Ô£ u€¦ÐRoÈ`0Ðl6[¼oÃ%÷´~é¼}¢ýÚp{ì@ÝèS¯XŽM˜˜}º{{{ zV_·ÚI!ž¶n¬sÝ (îS/yî2Ìpßß¿Zª³¼¬õE¾tdcÓ_]´EΓUVÑ÷ÐUܧ^°œºžŸ.e‡{ ‚€@X£O}…õˆ¶Ç»w+×ÐoŒ~oA=âá.IŽ,Ö`‹–z ê±¹7€4Œ~_Ñ`»²~÷ëo4z>¤û§g?¶ê*À ´Ô®G³¿]ùæ-~¶à'´M-uGR†¡Þ»ù¦.¿vEŸ}üÄo¼uM/¼ø…Æ/979÷{ÄÙØT¸ºôþ£ÚÛÛ“T¬ïœ–z{ÐRÐ67ß½U©¥žÔjÿ²ÿ5}æSOëòkWtùÕ×i©'¹¸û¨ÂÀÕÞÞÞ‰Ö»M ž–âjñùh+úԗܧžùä³­¡.nIwƒãu×§¹Óž>ý«=´îìÎ/ëëßxËz}´Íß·h™EÎí—T‡¤º¤•Ÿw¼Í16牯Oúü  ˜Q®Äy‹–M.óø/ýš\×=\y}zøskxòà­¡Â {nõ+ß¼u"X¢°É Õ4¶–'«Yël¾Dd•o{¼M]òÖEÌÏÚ‚åJ”“uLRèß½{G§OHÏ>ûYIÒ¥÷ïèâ£ïnL ÷è²|R°w!PÊ|q¨*-¨Ó¾,¤íß…Ï@71ú½¢¼>ððþmM§ÓëNŸþ.½ÿ¨.½ÿèñÊëÓã€ÏïÓODMË«C´®lÝÚð;ÆÑ§ ­èSo`ôû;ï¼³h­KÒéÓ§]½tÔ`¨åž¡Î–¢MÿrÌ>ôU´Ô‹Jk­ÓRÐVô©—o¡GËYO{ü—~MÏ>ûÙE˜GÁ~úô)IÒ¥ÙᾋpÏÔ§^V^¸¦ ³Y—U^ѾûUµÎ“‚>umEŸzÉrâOZ³¹Ïü¸µ~ä’têÔ)Ý»wO»»»ºví»’òC= ”2£ÐëfS‡*õiÃïh"д}ê ‰úÖg³™N:õ{÷îéÔ©Szä‘Gô‰'? ‘E·:}ºå¤õÇç}A0ãóÐVô©W,§Èlpßûwällj:êÙg?«'ŸüyIÒ#Ý´0J»;k¿"ÛmÊ7×Ûg™:Ô±®È9éSÐVô©,§®KöIá¾½½-=òëz4g°²Z|þÚŠ>õ×#¼[ßûw4 ôøãk>ŸëâÅ‹™ÇЧ»Z|þÚª‰>õ¥„z¹®zH‡»9aMÜÓ¿úØÊ;Ú矴Ô´U-õ¥µžKÞ”v\Ò…ø~eÏhf”+qÞ²åÎçóà fŽŒ&ùšûÖP®[¸J‹`N hsAÝÄŒr%ÊÉ:&-ô£@ŸÏç‹užç-ZíHèÊ¡O½"Û~p3Ð#žçÉó<í윕çyrÜ@aàjtî‚õù£/QkÐOŒ~oHR GîÞ½§Ó§OéîÝ{K9·9«ÐM´ÔKŠV¯2r½Ž@Ï=Þ¿}âè&Zê%ŲlXV ô¨Õm¾¸ýDK½!ƒÁ@³Ùlñ~Ù—ÜýÃ}ê˱i¡ÇŸ.I{{{ ­ t³eÏ%zXOܧ^òÜe˜á¾¿µT9fyYëóš€îà>õ‚åÔq^›p‚@Aºkô©¯°ÑÀ¶ñxWãñnåºúÑï-¨G<Ü%ÉqƒÅzlÑRoA="ÜO¨‚–z ê@h©7TgcS£s˜°4´Ô¨‡³±)×uå¥ðNPiZYÒÐRo¨¾ïk4•Fç§ ÷D¸çÍÝ€ Zê ÖÃ÷ýÃg¨á¾xné`Ï:.ë‹CÚq|Á€õÃŒr%Î[¶Üù|®íííÅûÑd"_Sikx¸bk(×-\¥Åƒ]’«j»°þ˜Q®D9YǤ…~èñçª{ž§Ñd"M§‹uþpù¡K @7ѧ^‘íej3Ð#žçÉó<í윕çyrÜÃËð£s¬ÏlÒÃY诀þˆºÈÏ3ƒ¡uùk©—‘è‘e?†Õœk>ér< Š z“¤—/~¾ÐþêSă0-,mÔè¶¡÷¼'¹ô°¾Š\N/ª“£ßãS¹–Öµj Gál¾’¾pP‡N÷©Û šÍf‹÷˾äÀ2tºOݦ…nöiïííi04èiƒçÝ—5îÆlšº-KçúÔË^%0Ã}ÿj©rÌòòÖg…¸m€õsc6M ö².u¬¥^×óÓ¥ìp‚@A®€JÌ`¯èRÇûÔël7ïj<Þ­\’DA^5Ð¥ŽŽ~¯³ñp—$Ç ë¨C.ÑR·fÞš@ÛÐR #h©ëpPÜèÜ&ƒ¬µN~/SgcS®ëÊJþKA¥ieÈRt.÷¢:wŸz™zø¾¯Ñh$M§ WÚ&¶Ú z@YEž¶V–U¨ß˜MuóÝ[Ö…~ì—Ÿ,´ÿ²ØÔãÆlª›óßÓçõ¤¾›ûgÃÚŸ!»Œ2«p66Þ¿½øÙ÷z$IªSZ=³êïll>´.¾oÑ2‹œ+Ú/©IuI+?ïx›cêø,tOåry!Þ¦ðí‹uøŸx•/ ¶V¥Yël¾Dd•o{¼M]òÖè—Ú/¿ß˜MO´à“–ÍuÑË”´­Hæ¾iÛ«HûŸkRk,Zon‹ÞÇ×9Þ¬GRùEÎ[¥þyu[g«øÒ>»èËBÞ:ýÒø-mñ–¼Ùª·Ù}i°)#é½M½ª0Ã5i9ë}ô?e³…—w¼M}òÞ—Ý–·oVVÕ]WóoQwù° ‡zÙà\öqeÊOúuÙÿq§]ž-[2ç­"ïtlú—ë`^ùX‡Pæ Ðo+Ÿ|¦ŽKàeÏ»nýýeꮫóÒn•²ò+mÀXÙ:Ø^([~Ýv ¿VêM«yé~Ý´µ5^DFiÛÔ¡J}Úð;è§ÚÊU ͬVûªZôiVý?èøà´U´mÊYõgÔiƒßò>[ÍýËË‘1IDATT¹¥n†m‘@7GÊ›·Â¥m‹Î8g{þ´Öú²[ðæÿdËÜÆUæø"Çeí[µþEåõ›/[ÚèòU([‚èGR†¡Þ»ù¦.¿vEŸ}|ÕuZº2þÆ[×ô‹_X‹–'-dXo7ß½¥'¶?šûèÕ/û_Óg>õ´.¿vE—_}½|KÝærxû®×¹O€,¥C}ƒ±N+ú«Wtéz Këq/5`9zêtÙÊïS_'7fSÝ|÷Öª«@"BÝÒó—ž[uÈD¨[Ê»­€U£O€Ž ÔèB€Ž ÔèB€Ž ÔèB€Ž ÔèB€Ž ÔèB€Ž`îw½òÄöGW]…ÎpœêÆlzbŸo}’>ß<„:€ÞáMÕ½ñÖµÔm|¾Õe}¾Y¸ü@Gêt¡@Gêtå fgÃ`®Ó™Áp¥ç_µ¼¿EÒç³ÎŸ¡5êZH¬³2‹uÿ[êP“´@H –¤mÑñÑvÛãò¶õQÖß"mÛººD¨@£ÌàÈzŸ¶\dìtå3c 4(/8lƒ¥ Ôf¿û:£¥ [Fˆt)˜š–vÅcêР¤KåuX÷0jƒ¬þöuÁåw¨I|[\Ó-sZíÙ‹¬ÐN;n]ÐR€%…BßÕ!ÔôŠã|pÕUè4>ßÕ"ÔôJŸQ5ÏwµèS #u:‚P #u:‚P #u:‚P #ºOýËþ×VQPÑ"Ô?üįè•ɯT.ðïzeò•ÊåÐUõgåI±Pÿý¯þ» —Þ»ùf­åÐ5ug/}êt¡@Gêt„#)ü̧cÕõ\~õuýs÷¿°U±uIEND®B`‚fox-1.6.49/doc/screenshots/adie.gif0000644000175000017500000017144611637250333014046 00000000000000GIF89a÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ,ÿ÷iÛ¦íÚÀ‚·ÙZȰ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠÙ0!B‚ ¦4¹ÍJ—ÔfMM]¶HØÉ³§ÏŸ@ƒ J´¨Ñ£HIHŠäiPI>“èÚêQ7‘œhÓÆTnÚHm IIHÈþ´Ê³R­pãÊKè›4-Ù:Xó¦5IÖøjÓx¡,—ú´IJµ¥-kSëJžLY.Û²dÍrÝÊ83Y±dÁÚ)ÉήY£’¸esÙί‘”@ÒTìÖÚ¦“ÐÌY­’ÀnNbKjí­»uo½Eâ³éÊУKÿùØšœF€m]K‰D‰$uÉÿ"8P¶ËÇ2Éë´†žùô÷ð%Þɘqð[b™Kú}¶ªÒÕä$‰ZbyÀn:ý6š6`ÑI ŵaKUm@HÂB«5§~n—k‹xšT·ÈÆ€†¥Ù€%˜]# ‘pK´xIÿ…øEj”M‚C0* )°fF˜L’µä“µa:ÿç@ÅM@ÝèL9»Zвdõ¤`*?×ÃNþS‡5œ!Jq¨Ò–¦ô¥,…éJ©: ^ÒjŒ’YˆÐ†H“\ %YiTŸh¢Çºà©$ŠÐ„$€ÀEÀžÉj‚Ç4¤ ªŠ*,‰Ó4vÆšª¢[r’2Ýq ˜-ˆÀ¶ršè4%ãFCMÆœ§9rœ×êâìF,»‘D#¬˜›N5r49lIcËkÈ.wŒÛkÉöø2˜,² d0{YÐE–‚ œª.$[VaNf¶LíVWËXÖN¶µ°}­lU[ÚÿÎÖµ¶Í-nWKa²ìe%`Áð%À0îz“JÜât¾ úÅ e±8É1D¥¼ kÚOÚ2|ì c"YSkH–‚ìXޤ¹Ùîe`“{*E—LZÔvéœn ³ëÞ>îuÄoFÂPJòðt½cýÜÓò·Át0ƒ'¾SؽÎp„7üÉÅ’ÐÀÀk˜÷’ˆòþ%‰óØ¡—Aš¢ {Õ ¹ÒEMÓ«(ðV8×(žT„uÙGIɺ–aXÀÙóí,;Ë:–ÙÒ³¤$'GIÛâ“0¾þ[ÄZVy„R6k,É=®Rxc>3™ÑlfN®ùÿÍj޳›EȲ” ø& îäÉT‹‰#†H -h@“$"„ös¡’èC³k"v4¢!½h‡4úÒ•n¦i†lÚÒ!‰ô ³£À]­†h3²©Qxj:ðu°žh¬[­êŽÖºÖ£uàò|j\OôÔàÚEäÓÿ‹xÂI.Ý?<݇Üh£L¹7‚KQ.‘TâÒ÷©šDR}Yb,ýò»gÕ=4½Ž 3vYëå ~´žøŽzúš§à½È•«$ÿ$º© Z%ÖÅÚÁyYí8¯ì[½I$?¶YwÛ¢‹õËc,AÓðÝbç>´¥ÕTYó:ÏÎþ4;M€k ú]ÕyÙgu†Ã_¶ðÕ |g oø²ÛYñ‚?{_ÀŸýïgï‹7hù%¶QKTTr³W‹j¼7;{d ( \·{njD#䀄±gO–àŠÏ üÃPÖû¾Ej˜–&+£6®1‚3»ÁªgÊc?ä–:ô¹æ ¨C€9ÙÿÑ #ݽ`ÜqŽ¡5bшDÄ‚ÀFÌ>…ȤkôT^ìj‰5HÑ `4# ´c>ö_Ç'<Ÿ”I4u2tv{äWr)W:¨_ª#r.×€ÆeÀ£Xˆ^ì# QX¿”D"èAŠ1 ÔlÐ0€ä„:éWx$ÃÖé àq2éÓ)Û !ó–dÛTalvBñOïƒII„Dƒn=äi@æoÙcg‚FU:nq@æ !ô4r “$]ñS;XF„ õAáÖO=õ=¶ îÓسsÖ `àjÐ!N7J&ôa B 4]+Äu}µ_ä‡õ”B†ÿh_0DKðÖ?‡JþC.‚:@µ ± èñ-:HDáÄQÀ½ÔP"•&“ º µÃ0>dòCý•EϳM lP^¡…@çoûæ8Ćeµuf² ØFD¢_ÄM-–J‰ XXD‹²Isõ|'$ ‰ €½# åJà)]dgðR%‚O&3a ` lH; sz–€÷xK*Wr,€x€¤TSç·6{…hOJŸ —T©Dq°q .çp þàýP ¡4R¨”N…`é£\M R ,™#Ù¨pçf:£vnÈ-’ÿ  d1 Q´SBí“;[W«BÊ÷H$Èq4 d @Ðc÷gïGt–$žÒa€@w³3ù´Ì´oyÄ=Iè± ² Dw`H¥y0hYÇw¸ãP‰G8$Ãbœ§NvÙ[¿}tI—§—„Á—NV—ϳ—¥Sz)dôUVî³#D.«×88DDUlà‘ÙÙ£_ƒ…¡S”–{µŽU°™)ðC\%‰–J”„lÀ‡²;,“vèöxïò‚%—’:S! ÐDPèD@ÉéwOe‘$ß³uÐ5!A ág‰+Ãe8A±€wIÿäS$¤–Î#X¥Öxéå)¶HvÑà ­ >$oõr‰eAoåo¸€xŸøØŸ©$·„‹³óu÷†×Zå<ž")×L Iæ]£³‘°¡‘qyB2£uô2R‘)€)€ÙZfs;‘7)q9WnàÛÇv äeE"wЇBØãF9Ê¥h¡šõçöל5‘H° (pƒì)…! ±0Œ)£¼ã‚–;Æe ͆`£ù-Ñ8ÐCNްQzw4Öp™å¦ôõe‰¦,úAo v&uJw–úYa©SRšA&Ø:@%Â(3tšk²£o\ÿ÷5{¥Q&d5–ø˜çŸ$ê77U¼£Ø8¶ û :Àst¯†^0¦gZ^ ©_—”~V;hg3ýæp™ulö&ÈŸ.Jd (’>6€¸G qšô§¿ røµªŒ—q—jÔgÂXh›¶gãož62ÖúgÄX­ÕZt&­ÖŠ­Ñ­Þ:9‹¦­FhèJŒå*9Ý®îê®ð*®šs­×*¯ì:®éŠ­íʯÙj¯ïº¯ãJ­ûJ­èJ®ïº®;­K1 I€¼Ô‰TT¼4±+±f¡H]ÔT]Ô±«±뱆dE›«GÒ±MeE!›±+K±rd²ÛR¸²Hÿ€±˱:˲/kM`)1+%+²¼TT/«F‰Ä±&˲9…±J[ñ”±7;±˲K«3ë³*kµOû²Vt²Z˳_›³- ¶Në²>;¶*‹µi{µ=+G«± ‹´P‹³jä´²c+·g[´jt·\«µz‹µK·Ù’Oÿ°þ°ú ¸“¸ÿ ÿ°¸”«¸‘{¹’Û¸‹›¹“«¸–«¹žK¹—ë¹ÿ0)Á8mÐI ‘“2‰áºä¡ ¡[»•+¹‹»¢Ë¹ Ë»—»¹‰ë»¶º‘ë¹¾+¹À{¼˜[¼·‹¹µk»Ìk¼Ë›¹Ò{¼µË¹ÉÛ¹¼[½ÑK½Í ºßÿ{½Ñ¾ä+¾à›»Ãë½Õ›¾Ýû»è›½½;½ã+§« ÑÔ)mйÚй‘Ð׳¼•;ºþྫྷ»ûй¼¼œ¸‹‹5èñ>ڥ˺¬+¬;¬¤;ü¹+¿¤»¸“+¿È{À•+º| ÌÀ,¹—+ÀÃûÂ.<ÃŒÀ,œÀ» À+ Ã#l¹\ÂìÃA<Ä;LÃ2üGÂ&lÂEÌÂ,ÂDÌÃPÌÄ–+ÅKÜÃlÅOÜÂHìÂS\ÌŠœJDr.‰ :ÿ@Ž‘P Sz¹²àn`úÐ!J0£]ŒÄ\» <¼ œç´i ºlÁ°K»ÚpÁS`œÿKÛpÁ¥» ¼¿®[ºû+’<) Éɼ¿˜|”츌þ»”LÉž|ÉžL§<ɇü “ìÈ ŒÉ®ÜÈ­Ìʦü¸¥œÊŽ«Ê,¹ŸÌœìÊ´»Ë‘ÌÇœÊÞ`ÉÉlÉ¢ÌɯÊ»lÉÃ̽¬¸¸|È­lÍÆͺLËÜÌˬÍ<Ì,̺ÁЏþÀû  ûОèŒÀÀ& ¸Ž` ÷, jÏ}¼Â@¼Ä*Ðþ€#at@M–ÜÈ…LÈ·`ž› –àº4°uuà 0º  PúÑ•ÀÑ0  š"] ÛÐÑ(­ÒúÀÒ6ÿÑÑÛ 2MÓÚ0pÓ½T Óš Ñ3-Ô}Ñ• ÑþÔ­ÑÿÐÑC}Ñ$­ 4ðÔ0P# •  T ÒT°tÐÒ`}Ò)½Ò-ýÒh­Ò@ špÖ1­Ö6ÁÓ(mÔ4]Ñ= ?ÔU½K]S­ÕVýÓYý×$½ ‡]Ñ\Ñ–`ÒÒ]] /MÚ` 0ÖA×D-Ù,íÒ]G=Ô{Ý×HmÓ|]û°ØÕ‚ Àa)Åц”¸ôÿ ! 0–«¬’Dü Ã8ÌÅ(<Ä\ìÃúCÁÎ|È ýÜû  wиÚPÁ[‚­ t° ÿm¥[•ðºPû«Ýá=Þå}Þ‚­ âMÞæýèíÞã uÀÞá ÿP ÷-ßí]š°ßý=ßUÏö-¹nàªí ¾ßŠü ï½Þòm‹‹Þ>ß>àÿ­Þ"íßám Žßî­ û`ß"^àÉu@á×­àŠ»â¥ŒâÚýâÛ]º àûà ßÎá"^ ~áÿ âµP*þßÎß?žäFÎàí]¶âN^ºÐ¥‹3Ö ¤‚5¹þVʲõì¹Û¢’°û ¸}¤˹||źûÅ1³4‘ |ÁlȆl w°¿™PÌH¼ÀŒÇ"ìÂ|ǤûÂNÿlĉëÄ£»èw|Ã…Ž»Iüèo~ÅË+ЋNè6ìÄ‘þçaŒèŸÎÄ„žÅÆ}ÀBÌÅ^è>è˜ÞèŸ.ézŒèB¼Ã¬é ,ë œÄ"üÂ¥ŽÄ»NÃÀÞEi!×°¡ù«Çž[D # Å[üì%lÃ)L¼ÛkÈ–œåÝÖŽç M»~Ü¡‹½Æ-¼þì—ÞÇ9 ÄjŽÜMÀ4<í üÂïßNí$ŒÀ|<è+ ¹µþÁî÷®ÿ,îlï ì»ýÆV®ïÐßÁÇMÜGlÀ ¡ú›Ç‰+Éç®Äë.Ð\lÀínݯ4 Ý(ŸÌЗ` önîÑþælÿNÄæ>ÅñŽÜÃìï<ÏðøÞï_,ðy¼î¯ïG¬ïÿò#,îH_êA,í·®Ça ô!ŸóVŽðòí,õw Ä{Lô"¯ó‰±ce¼åÇkì¸-ó9?ëÐëõJü‘œí¦+Á°Ûºaɬ« ·  ÕÝÊ öœ+¿éÞõ¯ô4¬ï¿óWÿõkî¾<óÿð\ïó?Ão¯æG µnóÿïø.øÉ õ‘¯ð2|óš¯óz ö´ŒïÏ%¤ˆ;¾ö' Õ°]¯¸jðüN¼CêÏð–<)Ë-È MÁ†Lüa·PÊP•ÜîJïø€ô OóŠÇDßë‡?ý9ßñMÿÿùjïõŸù¯õÉ]ܘÏôû~óö>ëãÏóYoÃ3ïÁ¿öÔ/ò§ŽóŠ؆¹Øµ=ÙRۡ}þö5±¦-a#[úö¹Q"I‰ 5•ô÷OàÆÿôXPäÇ}$3nܦힶm ­5ÑG¥¾m1kÎÔv§aÇJv žì(hÁB‹þ R GBKþ ’©I§$5f4ÊQkÇ­K9Nõ¨4iUP§–%ëqªS¤^©†%:²ëT±b›ÙV-ÚµzÙž…K7j\¬HÔVGWÖÖl%L¢M’¤F\÷i#IRBYMJêS¢Ä ÄÑEÜŒ$ʱnjªf ÆÄœ³ÿµ$ej£iÓ¦®;–v-% Ö-kÕŸ[3Î+תkãRï–<üÔ8GÂÓ¹ÂÊW¯_ G…› 5ûXðnÑâmn1uñG¥gmüßâ…­›Ûþúó˜ '±&’HÚlÀ$$I‚@ƒÜÅ‘Ñ$‘EŽÓÆ O½äÞ¢‰ —ZJ"7™jºé2÷™‹­õ®l>ûÄ{Ϻ­ä;¯¯ï°k±=åÛ+$áÄJÇÕ’r9ü¼S¤à¶¢qEÖ”»+H÷ú2®ºW3l<ÑÓæ1]h“L5ŠK#IT­£Œ‚*ì»"߃ò$Ìp“í¥Ë.»-à µ¹Äm’Ìñ¼%}d’¼ä̪ÿ_¼L,t,ƒr9ò-ñlañŸ\ll(+÷ÉEÏ«ü3ÒçÐkk±ñš ÈQ uEU uÒO±¾{Ž<öJRÈš[´P³Ê¨ɯæb/VIoÔË!–¬I‰YÚüÁLDíLiKî0H‚Žó±(>‹›ÒEZãk¸Œt©cLÒvOŽt©¥ ï²LJ]} Š{áÒF^¦8݆;j©ãŸJL²÷9ÌLÕèÍ=EÒFÛr‰vb]¨p/‰Q­Ò;a=δº4‡-ï8…ü“È7ShK.%Ð2» ò¾PG6¹½ZaƒÍ%ÏrKéN 1ÓI#`Ð¥©ånNÑ­V‰S1UÃÿø,Èš‚× †~Ý5X“J – m0I—\¢à: ]*ÑE­± CŠ'‡ÕÄÔÏö¡a*„‚¡Š:2)éŸ:üÆx©J´Y×#ôÞÓ L,±$]ÄªÐæ`•Ôù:Æ¢S2çª6ÏÜ\À* àêÒ2 ["ñ2©ƒ6t¦,½Œ2$ÁÈ>¬!ÉH"\Qƒd178"4ч ¸Õ£ì¡Å&oòÙœp#“ /O$«Ù«°'ŸW‰ìIÌQQÈ€R¹op¤¶1Ò¥ðu®÷D¶Ø£öÅ‘JÎm”bQ:Õ8\UbjãÆr¯¤qEµÐ„Zrñ‰…m ÛG%4‘BÝÁjUC’çZt¬Ž)íc)S‘ ’¥k@&@1ƒAØP‹Hdd3! Kㆀý£ KR¡ÌÕmØc&Îêœ>4Ä㥤fšÂ`ZÀµJ)…ÎI,ÖH$%è-PfzR”º³Eç#`iš˜øœ@IÿMs»ÎÜò* Š GFaÌU¾2Y9© -Ù’-"!‘È#²ˆl0å7Hb4Jp„=O£„¡;åB}ú›„ÌÆ38‘‰gb­šô©d•ŠçÈMU:Ô‚ˆêÖE±I¥M¯0ˆŠæ­PÒ’QsiÑKöRºË¥Ájƒéq(p ÚLûPô5¨³¤¯n¹HÔ‚^e Ë3Á“¬[~ª£A[‡ü1­›$N–˜©îÌš‚jœNƒšJM ÓCN´>6×KGº•\nê˜C:ÑDY²[¥{¼üÑÓ8j¨V‘3¤  ÿ#™˜!†(‰”þ…¡Þ‘ÕH³R–6®1D…Ä’ZÿvšÉµì`‰@iÚ©±DN@Õ•¥$UGQÑM}GH4T/w÷UFvB2a:Ónrôr½X8«Kk’î~ûi‰- Ö¤) U5‹Y¶¢P–Î:hñ Ñܳ†¶FEä58ÂÍm²Z’!—$AZ²ÌÐenB(V˜,õ%r³‰šó.Å-IµÃ*‰ª÷‰‚sÄåKoFM«¹5#ù[¬;«¥ŽTk/ó˜Æv©o"Ñ“?R )ïÃ1-Ô HâË“ù‡la‚$l㔣 ëtX‚},ö%>sL.‘§6Š~úàQ`Þ«_¨Iw6i¸ä3d7¯¸œ~Þ.Ô´Y²Ãú«¡ÕÔ0Í"£kSøÚ3r4laì`9æºHC€N¸‘§´A„ÿˆÄcÂÏ$áž]¶D>+Âå:H{!Œÿ›áä:h šì%öôZ$Í^Š˜mñ/þ#«ůøÅ=5œ&c8Ƶ1Eqܶд¦z¯Žç‘ä'O§(Kò;¤S*—xÒNž‰9Dc6ÇÔÅ;ž4o€ÑRÚâÔb"¶qŠqŠR$·—Ècr¯}°\æ*§”Õ;5%ÝæŒÊ’¢<.ó·æNï¹×íuEmø´æÛ¸”?X^s’'}èS¿¢ÆZž¨Åèá#ßWÃ[Îõ¾ëÜ€‹8b[f—Å LR‰E ÑPdvä™gB¦ªÿÑê"“ך°‘­›5Oy_¼CLªˆA u€€©ÀúÒa°?\´vÿÀ:èöÚ:ÜKç{h Pø†..:qP؆ò ç?bËßÇìµåz}ø6ûÅWùH—.퇿û±÷FhÏ}ÜëmqµßG ­ì~ø¿G\Þ¤/¸ù#Ž Ñ¿¿êû?éÛ‡æ3>±Ù?õÛ¾üÑ„Øû‡Õ»—¾Ñ‡Lˆ=½Y¿×«ÀÙ@ ¤Õk½t=Ÿª÷ @ãÓ¿Ò‰¿êƒo>À¿¾¹¾tñ@õ¾\X¾€ðƒÁL¸ÁáÈáê•Ö™ ÑŠùr-ûÚ)¥P3W"¨èâ°5[3[¸M¸„Œh¸*Ò…™¤0ºˆq¹-´„¶ñB>¢.L¹èÃŽûÿM»}QCM¼¶yÙsC‰9¼¨.¬#¯ÁÃ= C°„=ú¢¶¹B{á9mC¢C92l›\Є}(:9ô”›:H1?ŒCK1»ìšº¶#L¼ŒA’;[ð†ª;mCƒ1K8ÄT¼—€¹CTôCEüÂ=aÐA´„R¼¹1TÃ?|¹9œ£ÅPCAÆQÜ]8ÃL ª[1ÜÂ"D'Ç0°ÊЈ†2ÿZ+¦¹³¼Š }(³ “.Ù(½]®À‰”04ABô  yÇD ¶2‘¨©ëñ ‚´{ü ¾82"/$*ø@ TZŠ|4™æP ©©ªŠx|¦HÊm4ÿC–À)^¹$2!Y؉Ÿp„sòH÷PÀ²n܈WŠ3"ê‘hé5(úòª’j2 ‹÷¢ª´r©&`ËÉbêÇ£˜É?ó‡+q6öºa³É@sÇH$4¢B–Ù’'ò/nKBˆñ—iÇ“ŽHð†mˆ²¢È'S 505L‘7 óB¯¢Pˆ8i ˜ =ãA³”°ƒ;ˆÉ¨瑱ïÚˆ‚A É!‘‡A tÙ‡ÇI—\ ÌÏÐðŸË¨ƒƒ)£¶)‹Ä8Ž1˜÷‰Ìp£"É2*"[ÛJ:ÌŒ¨ðQÍ¢ð½åس!©Àñ‡(@ŒÇÔˆ*(£Ë°œÿÏ›`)] ÀÔJì¶©zK¬McŽBuûÛ }À”M“2090‚Pµð·1H[)ÞÉ ¹gqª±Ð…†bް…‚!Aê>–K¶©…L˜t™@¶Aš+ª‚ÿ¹›è(à>R à#Ÿ¿AÎL©Lò¡AòoÐ=« [°L†ãšŒ€¾®\ˆÏǶц› ÊÊ}ðšµ1¹ˆ@UÔç ¡ÄðˆLøËŸc®Z¤¿ÄÁЛÝìÓ–S¬Mõa9 Ï¿d£¿ô†…ÑJ€”Ç™@˜Å ¤ûùš.‚6äζ0ŒH ÿº[H¾ú‡ ŠFx·X˜§m 7 #ˆY°'IP‚Ót•¸ ¨¹¤ I"’‰;°ƒ<<еé´ñÀÁ¿ù¤!Ÿ=Q 6¬ä$tÉ‘uÑÚMÀÚ:ÐèóŸJhÝô)½šÕ=[@ ’htùÌô±MXKÝš2 V(5ŸÄÁQŸÐ;Ø#(£m€*°*hÕoà`#ÍLµŒ£‰?»1ª“¨LMÀ˜$5š©€€Ëê—ìÛ†öIÒÿ#MÞ$á(ÐX…ÕµiÕ¥OаÞÐmxœ¨œ)[‰KK(X ®œBÿè1ˆHhJ¸ÏÁ ò6gj+}H²–…°K‹‰ÒÓ†]hTÊ‚9´Øš¿‰õÙ´AÂDœªƒ‚«áªL] ±‘œu*ÄÑoÒ{Q ÊÙTû©ƒ±ôŸ÷¤óù¬ùˆÊdÊÑÈK´¬9ZÊqž<Ú¢8 xQŒkŮ牉´eEá¢púš!JRhÁAù !T¶Œ˜8ÈÔd„‚÷X´Ñ¹yUuœÄˆÑÊù-AêA£Ü+XT¼9>¢=ňÙÊŒ¿ÓZ%y\­ÄÌÅS§ª # ¹ô¼»€‘¸ô¥öH [{ÆÎâ¡”‡ˆH¤XÌÈTÿ¹—M•KmA— }¨"Þ¥Ø÷‘O“ž³ ØSÑRUN6â®Q³¡£’, ‰iœç­:m¨"ÚŽÐ[Š ·±¥}AÌÔ¸nm¥…n!oR ŒX˜=‰8ŒDЈSŒJȃ€ ˜ª£‰}!I½—¥ò^1`¥“sߨÔIib“mbØËpŒœb²†’É 3¦Ü1ÎêåaӔ藄É'<ÙnIj›Œ¨M "‰Ç)E)”¿"Ó…T ðâÝÀa´¢Â eÄÞ3ÙÇÓ­yÇni’'é<êR©¸a’ ÓB%<´X{¦cS6û ¨#ô±o3‘2½Š–P2K#‰ÿ‘)óŠÓ[Ñ,¤øb­Zs[p7õ §¢“]€lù®Õ ¥9/c’6Û(†ü”Œ)I©É¢úXðr'†¥àJ±+XëØBÞê!ⱸ3%Ö¹(Ð1²ZÉœeƒNÔ©@6 YÈIØ{âS.ƒG°‡p„³1{ôˆÙ.6Å 3[áÛp*š°„*üRˆáʱEÄKص±E&M9.íÌ%DfœæÊÁ}fj¶3*#n~œm®œ¶)#jE¼[Œá ;t£Õ.gžUíú"]£YeÒ¤çdf›“óæ{îfqÞçZ¨„RÔgrœî;gr Ú¤æÅ¬ñÑÿ}æ‚$¹óff¦¬Zð”oç6˜„f8kæè[ÜO€V”Ã3éY ˆç¼r _†™K‹…oØ´ë´·‰509P˜ #8b“4®ýP¡tz¹“Úf5³‡ÐP¤á½ÊÉ@ûAÐ*ˆLAàÛjÞ#>ã« kÄ¡Þûí3ëüõ‹Ô„åóÔî£À‡ž½·~ÐØË>¤©ë«ÖÝk=:HÁ´ê®Ö†úãêD@Tkä½} kÈ.ÁµnÀÞ£kÐWßÂA©–Àö£©FAжjâ£ÁŽìüêʆ±ëÉ>kÇ®¾Ø–Açã>‡ý-¦ÈÈÿ $:s„lø[˜'m 7°'V»[˜Œ:¬Ô¢«EZª\ù¢6å•‚ÃK!‘K°ƒ²1•ˆq^gŒœã£:Jàý¥º¨ã#Þ­8¼j—ñ¦bd ÷Æ«•¡:¼:G¹C‰9_ü†ï¦:oðnóVº×o©’CõÆL7Dð÷¦Nùöïgo–Àï×ã%ðdl›ªËo /ˆ,oðÎï7êºÇpè=pŸoõÆ”£úöî¦Eç …HžÑŒÒ#Z ”»Çܨe5óÉÎ++p¬cØ¡'”¥–¼Ò ™Ç#[6›‚ä|³ ê\Ë# :Ý(¥aX 2 ñ¶ÿOÖñÚ6z¬±²:]#-oói&-_N„Œëp„ò/JMû&¤å[%Kÿįñ ?‚13|ó`K• L´ùO›5[Ö´%±IV›–Úöé‹$I›­m‘´T"Ɉ InL˜p¤æŸ-«ÛŒŒu3Óæ¾צ]+sßP¡¶Úm¢O›6}Ûîî]šw›®;vlÿ±Ä›S›Ç( ëhƒ€·’.* Bp¸RŸ¦JŒk$ô7ð‡uªÀ¸x†%} =fÌøy ?m 3K¤šVW%Mur×ÑgG—A*–r•†a)¡ã:,ÖÙ÷5ËujÁˆl)Óñ:*3ÊÆ]Et”T3¦4øòn†P,!Ôå±J%[%ýé‚!›#nKTtew¨KWkÿÔGUh¹¤uWÄU¡hõEFP.is‘KûPaG!1¶ V²n?Qa 0ù”QAh±µ"ZjmcX€Lmc.A%¡$’4Â’>ûxSPlØâ?’¤ÿ$!€$j(QÂ5–Èb‹,"hc•_ÑÔâÿŠ8µ¶Tq¥1c?é—^x™æ^0¥ˆÓKQµMMúø£Ï‚'~£bPl£ÑO“™ØÚ7}ƒSqê5Ó¡Dä’^j¥u KmÑé¦?—z&S™lSEZT½uÖ]ý¨‘[ˆ2Õè¤?äê›u^ (Š©Úv“>{¨A”NjÛ›9ÈÖ®£¾¨”.™½…jŠ1žÕ,2ÑÊk[Í%QFE’wi ‘’ ø5ä¾8ã6¶€¹-T Å®¤Ì>{‹?Å]D¥yæš}õűÃB[kN“é’œ  FŠ)¥ÂÆK¥¤¶dq€JÊU5ŦKÇÇ+q­o,/ÿ³òÆ*qN,jüòÆQl1œÇÜ¥Z€î“‹.&;+-Á»šÄب2A¦t„?NôÞ ŒªDí‡Õ‚öpMq÷÷dÄ&Zr—8O u´‡YcQ9î8ì¸+—œ²ª··h³³ëúut™xíû|_–\bËq„ª€ÊåRY³ÿá©]þØR ÛHH9çÜÁ  µ(WIÿná;¶O&9”›fŒU­l&Ÿñ`ä!€dT£—Ô¢'Q@ÍC¤ – ¤ ¸AcˆŽøc7aÌ›ðS¶š¨E÷ÔÂ9ú-ps”MssŸûü‡~5T[è€Êè­Ó âþŒTá'¬æè':hâ3=‚vx¦še=Îb)ƒ‹ŽTå4J÷¶Å£½¼¥²ˆ¦rJÍ왢¹â83Âmì.xYÊP¬‘„²ÙÑye³Ä.¤Àºê(Tvs ý² ‡Ð€"u`bB¬‹ D3&ôÈ›¢Kj#<úx_å”Õ’T¢ yz‰d,JÍeÄ!#ÿùÎûj B±Dv£HÍd‚B ! pRT¿•P®ˆ±Œ…^TDhåF#ÀÄHer ?‡X¢>š ÂRb¢ qä|o¡`"È‘‰Ó š ‰{„øM@!!#‘“dÚÙ3Ø *ZEã[´è¸“æÐ+T4²†­! ¦ÙÌgÌŽ r YÔ*T"Lk¨4P”  ¶pÄUŽ—ª€íåE@™QÀÔ—3­QMÛ¼a~BFaÚ4Ÿk ,¤›”ا ¶Èƒ|¢eú¡¯{"X;esœçP0—ºI§NJ)Ä…IÊ Ñ\úÐù¨*ôÒ#ã,%NtAòQî:¡¦.òV[¤ ÍÑÉÿåÇã4çpwÁDèpTi¦Ûø^àsAæ|µyà©nµ›^†DnðñŸ%h0šŒDŽéj"Žèf£ ë`Ù& aM^™gU]‹F7rÊŽ ²F}H"é²…¸0â%¸a+np’ʵ7HÂJІ Ô’5dEñRÔÎd3eñ‹HŸÇ/ÓM¦Rýݸræ:–E'-‚zVtÎ(ŸÀ vó®Éb"¨ñŠÎ»ÒšK”—Ï~ŽÌ»ê-¯ÆâTïºd2Çs/×kº‹Tê»[YФ»·4¤<äÍè¦e;ü (5 hk“â-Œ0µðXüÿB[5ØÖ b‰‰z›[%èc%˜…Jp G¬w öè5ÆfŽ­h’.Œäõ³ÒÙZwâ›jÕÒšë²f«§F›5“ëªm-pœ™Šp‡3æµÌq‘ÙÃÒVEHQmŽu²2ËÆSµ$ê³³—Ž ²ÎÕ³ja—í¢&'€ï[L3÷.}¤FRB¹…-„² YÈBN²0º3%­ÈbF7»³¤ðb½ä1 oìh^z¼ €éV`Ê|!D ãI Š• ขֽJd‚RˆYÐDL±Ü“©C‘;×b9~vw){ùV}–6»ŽËpÌ†Û ÇÍÐ!Âú€‚Üô1‘ÿO¦:Eíû¨¥"6vy^bžÔ¯‹‘mtÂ)«˜lqvOGo¡ŽÐH0 “+G²èÉþíÆ׳Nc»£ŽË—…|¾¹….©À!F9fí vZè(Tó[m+cî>›âe{2ÜäD«ÉŽ$£ÑÏ[8&PšaÕŽ@hBmDY™,)F™»™Ä Wò´ hœ·Es Ó„¦„Q4šÍ4àÁÍÍø ÍÌÄ™\_4õ˜šh €ÌHmÀÊLˆ8ÐqHëŠTA‰ sÔÁ7HÒöFuèÿ]MY„h„;ÅöìF „ÜwŒF)Õ‡tTϘ…$6YFh 5FÏÔ¨DˆD”ó•LcÐIHÄ m;!„Ÿø a’AŒF-ØFÑQ…d@ËnX!dØTÔIÇnøú”\Bœ¡²TÇö¥DslÒ²°Ð!ñ=QWîPQœÕ …`iéÂiÙ›já„,ÄÁ‹p ¹P”6È‚8BºÔʼ‘‹5 žºXCŽTH[ÑÜÑ‹ä1\GÝE䘜[xc³XMD‡ñJw%J¼¸WäÁ–mIyÑ×{{)cæLЖTW]£uÛqÕ3Ö×îxc2*ŠO`£ÞÜ—2ª×}ÝÿDwåLLÈÎÈœ£¬YØFQ^¹‰ …TðˆÑ‘D%¸V¢íF¬XVlEÌ‚Y0EVÀmõ–,¸AÔ–dýLÆp‘I¦pžØð‹š<™ÇHÏ£PÞ4VÙg…ɬ7Î‹É LM¢™™™ÈâË%JYÁíh ÞÉtà’ñ£Š¤Íà5¹åí°šSš[KZ"?ÆY­›Õè…E…Ÿ%…j‘ DB,€˜P,dXˆ€VA 䈡e…<š6—V<É$@”½Ä z þË‹ð‹%8œ6œGªÍg¬…6¨³]¢òädCZ´©Ìgèš3ÚŒ.ÁÈä#ïØ Mÿ—I¹eâ`¢Œ‘I¦gy™ÃðN %¶„]bóL&Ñ$fÕ JÔÄ[˜Ô[B¹¹€ T¨™qÉ‚%$š$Ü‚$k‰$Ø‚l+Ú‚ TÚ”8‚±! FHO”óôõš6\‚èÇ·uÐÂàGÎeSAD}ðTH å¬Ií1ÆìÄu€HÜ­G­‰g€ÐÏa1†G¼F( Ë©GiCÜeH­0ndƆԕfŒìàÔa&«%% emV¦5 šMŠæ„-ÛÅÌÉøÌ†Oà©…-Оg…˜„W®KMØB$´K‚íWíDŽÌBÎpA¸AvÖ xKŽiÿ§Åšlž>æ.ØA8UKv˜OÿLˆ=ÕRXQ.UŸ$ÝD3Á€dåB5)Ç?DÈJGUñDH¼€ÆRUˆ˜ ;ñ‡Çu”ÄKL8Uc0Ÿ€\GÙÑ©@ §e$æÞ`‰:Ù{Ñ×–©ïŒ[j¢Û›Q™dR*ŠâÓfÞ §6O&¼ßͶÏf‘°´S.ãk6K=¥—™”6ä˜ùQ_®àèÂ6ÈÁôÌäYÈ>äÁqTÂ7ÄAoÈI.©§Çé ¥{fãôÆh0ˆ„(‡G<©O% ®2‡M5Ìøà .ýG¨sdª˜TaÄÜÙ‚ƒ€›|‚ÿÈ«ÁíÎh>‚a &>ªÆÀä eg¹f^–ý$jþÝ=µ×2ÞN@Þ‚Ò –¤dŒ?a@Kå]éàëé|$^ìb]ˆvö 0öŹņ2ºàDÈŸ¬——éLô)cu¹—Áu2.GdK1Ž—;*|Ù6ZNíÊ`>*嵦µéÌuÁä–ˆbZ;njƆÙ>NË?ÒKfÆKieK†ÉÄJ‘‹×XÃðl‹YÃ-„MÓ¤¢5(‚‰# ÉR¨Û¥±ªš Å.FçùÑ.°‰y¦ÌàbRæäЬHkÌLO΋³ÁN ÅÓ¶™Àh¦Î: ÅZ¬…†hå M¤Zlå%*‘Uÿ%Tz¨ã4êhlåV^¿þ˜ÜËiýªÙÉ\lõ)¤5”‰¹ì—>„… ð– d„ÈV„>¡¤—è¥>Ä¢•$¬îƒ8œ.̨„gŠWg†.u©#l %.^j?b‘‰2Û»mïÊfhœ¹Ùª-ÁyV÷Vmij(uñ­^¥&Š`ø²&¹¥ïãZž\`­½µF±A-D‚ZÜ‚5dŠÈ‰ÑV£ýƒ$8Âí:çOä– ”À6¨îD˜µhÃ=\ÇY’r§>|ë(Æï6*Ë/ô†(Ò:ÊbÞ%…Nê¢M¥š¨Þ¬äšÙå,ù¦£Je ^ûÜÛÀÌù.å¿~ÿæYÔjäbe Œ6ÍŒòf»¨ oITŠ©$”@qš…TVàˆç6nKèåGéÑO$iI-©^XLµTKÊ—ß>¯ë¸÷ÊÀšoŠÎë®Ñ1yÕXýî±¢Š.£ì÷Þ“ßA¤ÞääYlº¥/ÔÖ¯ «…%€j—\K¬"Á5…)æm,HB¦ˆzDm TŽÔVœ$°q‘Ûà¢^\0\tìæI—&ܪ.L&¤-O¿Âf²¿Ú±jReözè"‡àæž™çÒoÕž¦È|` ÿc‰Ò䣲ZjV*KBêä¦Wç.àÐXW³‰ªiሽUYð"nLä¬)ë»/Åœ ./¨™ÿäR”Ôš(Y‘¡³ ¯j¿bè²¼æäM꯬3Ö«!òT>Øûº/Ùë=ñò¥‚®‰NsRtÔfÓþþS@-ž) FŒ%ìäè4™Q4‡šTŽÕIýâóÜmCŒíQÞÈhCÌfh—›MsÇÀBM·`, ðJLÈl¢?[Ù¬4mlŽ(àòνãt>ÎxäEu2‹L# { ˆØÄ±%÷>Þ¸t±Ùr”Ù ÞÈ@%8„5x ªMLLAdqu~S(AÀP öˆ?xÑ[V¢å Å]/øÑñ&¯> š%ÜÁ¤‡eÍŠå%À®§. jˆD D²ÿϼ“Í@GÉØcí0 ÑÚM–‡sÙœzÝZØÂÖÕʇbÚíZOˆ¶@ ëd/ݶa„Vµ/”õê/3´ ûð©ö¦P…Ãî4˜xM*$p¡­A“¸¥ÌÖl%o%‰AA–(UË“¤˜0î™  ^ìX¿YÈ@š\A6ឦüƒð­äôå66ÈÊá&}j}¤Ä}”¶A‹}L+(G¼\%íFfØÇÑ=!9ñüˆ¡:Éç÷ôôÕB.­¶tøI&hß -!yäR.È6±Õ„[µN†€ÌhDFðNKãØGB@"f¸ óí—Íælœ´Æÿ§+xïýC þxMG­øú¶4Ëš>|ªå  @Å¢g-F,ÿú¯ùTmi¤XÂíBI €­YJ‚hDC’X¤™Ø[×>–T^tÚH¦à™Ü_IJyd›•Vü´nlÌ@€Ók°ß\}Faaž¸Ä éNT÷ivLDx´ì—bŸËŽŸ¦k€ D}ÂA„ö£ÃÇpLÆçÀ@‰d)h\Õ[XFB|RH„F} 8ùCêTHi¸“Ï  ï9„ŸŠJ29ƒ–ÒqìôéóÅA^=ìHõFnC{1Á•&<VÖH¶Xr‹œ‘7dCº¨Í*ZÃt_Ãt_±#8‚8‚(ÿ'8‚ð–$\Ã@mErÞõíâ¹4­JöØÂ.X‚Â|ö#j‚{¸¸²„ }mí1ü“K„#¶‚ëÿȉ„ØÂ~,èùö†M . ‘þhNØÂ2iSð ah ë-¡Ad¶fqÄ'¼t(KMÐÐÁhv¸8™ |ݹê‡6°“LÛ|X‰DMH"n,ÐL _ÕA.ØÇ±Ä€zÃâ'Ùt´÷6 /­¬…ã°”–-õ7ƒ ªHB,ÔˆÆWÎtc'ëÿi…” ×ÝÖˆ¦3¬òbȆš_l^<·ãÏ~£d¦|‚É„MµNœÀ½ÍR˜n¢—76£Ñ"ÿc‚A£¿F^‹Ü¥6{LNˆ>˜ÑŽŽÃT×zírtTˆ3 ˜ÝacŠ„Èèh®Òò¦YD·Déb»q‹Q·ÐJ¹dª/ϯ‚ÅHÜß2s-W©ù €ll¹üÚ­ SÐK^x^Äôhƒ¬®BuC”x ÝElŒd¨)ÅšÐGl”8}¸]TçLëB.†yö$TY©Ð4L^‡’0Tk/@dÛ÷oŸ?êÓ…PÛ?}ýéû—ÍáA‡/JÔ˜‘ãC‚-nÔ§P[AŽý}ühåE”/]B4)òÄŽ*%:ÜfÍš-kI´I’ÕæŸÃ—mI´I“éM™K/†¬™pÿŸ¶mú¶i³¦5 V}Ú°‚µªÏÎŒª·dlÒØ²R¥†ý骣rŒ¶êìƒp0W}v5Õ¡¢JM÷QÑ•óa•*Ú Ô©Tç1•„ÿìV \ÇR]º¢ÀØç¹Žä:0¾Y†‘µòMs-”«OS¥¦úöÑÑ…q-Ä×ßf´«­ŠÄ}#;Î}xÜ7暟7"„@°¦Èàoým{Šp¶ëŠÿÿG mL0A%ÜËP«vêÊÞx¯²ÅŽ[Àºd7ã.”L;ÎÊ1§Oc“«l9óúÿ,Kv›l ·2Ò¥¡kÙ-¯ŒæÊÄMnÖ¤¤<æZ>xﵑ³ˆ*i1U‚ôé³’o$û·’ÏÀMN]&û&ÓèÓEû®d?üýã}™Lù8šL,Ä"xÒ…-´W‰É /ÁËK¦Þ·5100™’‹6$v³·æ|Úà^Ž*a‹õíÍ3’®`x™Yp2¼I‚p5+›Ìç%Zñ‰-€"‰ýL…w²€ÃWì“mÙ j`¢ܰ 5¨@Ptƒ-” &Ê¢&×pB Üp$üòpƒNG ™Œ%+[±F‡À’•ª\Å*õòPIôVho4œ•J¤’‹ô±(‰ŠKÿö¸‹ÔJWzôãT2ÅÇ?b#4¤"gÈ7=^&o€¤Ë sR”.ͧ&z³ K\"8J‘H†XhŸL€0ÒÆ:òVåqŸ©…÷þ‘‹ªdÂ÷Œ Bø©\ÜSMûÈ!õæ[,O!nygõʦ¦ùÑFŸïDp2Q=SeHµ(Iyâ’·…JìµØþÔDÐvÔ„ ¡'ÓêÉ)'å«Å7’¡ùé´>úðh>ëcÿ*[XÍV)ßî BýT—9Œaƒ6?¦‡néáÛzvy—`EX? ÊáÇ’]´©SõNY7™AÎÑ*[á ¼@4–²…œ- k:4J9oêÌhº¥ÉdêYi8³À¹xf]’HCâ$,HŒÎú´AƒHql²Kb²â'n„F)&ã„Lf.¡Â6raÉlŒl± ^èd—S•ªfnâ D<ÓªÌ, 3‘u qRë@]“nÎYL†\YN.YUo ÎIæ&+æV'Á¥ cXžG-²<ö1oá†xˆXÈ©ÚÕ!'‡é@Þ±$ÖØI¾ò¡¬ÿ|¥*SÐÆ-Æùª­è"r©¦¥BU"Jë #¤ªé鋪«þ‡†pÌ sñÇc2Ô¡S+ûŸRÅ"Ž ¬¸nZ u!°"éÑJDªCdHj[ð<® P¨Í.ij¨œ-D7ÉÌ¡œc £9„±*RÒ¬JüÌÜxO¥Yà‘5S$BE•‘i iƒ§!iäE\ Œñ Õ¦§¨Y d|œ:·ôJLkäÉ5†U,¢$:Úh„- 7G¼Ë!²@ZTÕ}ØbŽ ¥}eÁEdeC®ûÉŽ®BG¸æK»ÐÅ"<‚ü»ˆÚjHcÐ*Äå4–Y`ªö´7ÿÈ AZJä2 +íššõm‚Öw5S¡júlC$[ÛƒÇÈNìEÿ¢ L’·úø™’jsÐ"I$3™`a—|&ŒUxÄ»áÒÔðW1ËxF;«YîG¸0ù±UPp‹#B͇YEht¶KKBcõWSq`’è˜ù9BÆ« G“×ãqPŸuºY[¤GÀWÑO"?ÕÇ74N"HìhÚø—r‚dì¯ê(÷ÚR#/1ONjÂ÷ØüæïÞ¼´‚êç ®7ÓÒ‡= âç•6,N"‘¸ä$G¹v¹AþPB°x«Z\tZ¤E dÁ –ˆ\LNLB¶¡DrT®šÿÊEJgҜϾވžî^´A-lÎ_pQÜ¢ªBL*)¢B`2/#j¨"lÃ%²ak""Ä!¤6ÞË" «ïâë6Þ"ÊGàrå ½‹‘šÐ».¤ ¦¼£#Â+©Þ.`•>o µJ•ÌÿÉ Ïà )AŽ —0X|"ˆÀê82B²A$Müœ©’ÜŪšÉ¬á¬Á丨ôAtF8ì+ùæEÓšo,aôaœtáR" €T„8Àm7BÍuXH"pw ËuNê_X$Ô¬fÚb0`£µ ‡$°‡¨èìh1¾‚¨>ã ã]P#/r‰ K Wñq2dwÿ†1$@¨BJOŽÉ¬†N"¶PºÐúºK*`ŪØÐ)´k>ÞŒ» nBèæ.ƒ"#ìS"$å(CÚ( ²ã^”Ïï@lÎÐ/˜Ç¤¶Az˜'&"ï¼g!¼M{üÁÎi~ÿ,Á$å"²Ð3ðç+·&·&Ÿ,AŸ^F`*tÆÂn´'íÜ¢6²"ðÒCNvd~ºî2>”y6ó.kXb”fŽJ4á3ZˆêÜÂÒçKÄòª¼QÍK‰,Ë/. нޒó°4VØ&x¨{Âô˜…?ŒB&Ú`mA&ð@ÜÀ¬áN•À8‡O'ÎP„B¼å\,$ïÔjOHc* ÝHv ²@cNžÐr»àLàœéüžÊýé¬0âK“é’íóò(•L à( Tgü¨jý0u<â‹þ°Oü±û<"ôÜP.Ç,“êWÀ±ßâ ÿ@OÎh•Ðp)‡²É=ðB®bõÿ‚*b\šHöÊEQ ®¡ô U $A$‚[ @ P‡X RC8„ž˜ù´Á_Äé^eÿ °V2.ñ¦M•,µôLÙ“*ÐÜ=ѱA•vbMñðX¼¢&0C¼AÒ¶Z$!å®Eœ(‹&'‹®Á\€C ’ÀøþÁ\Ü ”àdç7 Ô¾‚›2-hAäùKî6À¢^7¶½žJ©¶Ë'Ö_ÛK;v»þqRϲ@<µguµ<Ãë†ÜñLÏpÍbb ™+MÁ6—Òcg5XéÉe¬£ÿÑ‹?hbœÕè4'ªO‚}v'DçõjdÝ7¢P'âC~^舎’žüË!¢°³XÁ4þfðoÅsKéÐåÕ߸SL±–ÛvKg( ÑL–sõVƒ5úÔ0u›–,uXõõÿh—€|e=ªÂ.óL/A&d!ÒS<½¶$€gÂuä…+ôƒíH,Bäieé»ÂQ†»Ö ×w‚{0nöó”ø©ÜX…×kMt˜0 .$~pˆ/V|nÑWÿ¯_ׯo6%¶¢>~"?„‰¢˜ö±oÿÁ[Ì(š‚Â(Ä“›÷Z&¡Š"tªÉ6¯#²âê!Ù(!ƒ¶8mζ ¢¦–YN ˜ÉÈÃG½ìßz×¢—ÿϳ—É“¯tVQj©î}“ìHznÆ%.ÏVÁ8ª.Ôr!}¦"jGb)a¥êrAºØÖà2Övãul§¶-™PXð«ölQ÷!Ô*b¡^”`RV®Eå” ”ˆtT‡AôÁDgøðøKç6xÏ•1µ÷*ŒvnG—»–ô¡0¼-6\jiCTz¢`´¤vdÃvî³În' ÊuÈ.!ì)¥ª  '’À‚©¾R \š"ΠÒM\‡‚„1*7­8”„©#÷ J§4ÆJRä#cGJj7ªG,¼M¢tšE4ËkÀcTm¡x €h 9K‰ÃnñI¿"¤ÿÓn¡ž‹˜Á¯ )–€ùàÒ.«ìÃcï‘? b.‚Ø`1¼N/tΈ[LÐä<9‹:fý°\(Ç>Ñs)²CôŒ3M,®µa ì zScE,XOŽdk4k0.b0¤ÌÌŠ¤ ºOœË$'`ÒܤHàD´Ð§H6eÁòi7¡€¥+!Æ tÁ¹FÄÆfˆlÂ.,LO¢Àt>Â*ÃŒ2if Õ2¡Ô`@j` b€Ýº$pòÂ4&c5è@¢@P–æã/:•P†j.† g\˺wÇ!\ºÉ 4„²%%ãµæ§'áàak8;Ùowç£W˜"6¤’ÛÀÿˆ—ˆ’% BhhBÛ°í r>jda\2­*„ÈÑrÎmç³^®¢QËÕC4Í,QwäÀ!ïB¶Ä3ÆÎ/Zò#†j2¶lôÄ3ìUJ*O>«f¸$±l&2¶Öf*˜ô1´ÒÛžÛIK⳦ibÌN¬MAVSÐÇA§RTˆÃ3Rë±ò$e¶ŠK`Ë.rÁ’[LÄ(2𮵲C<öÍI§ìµjÛÀµa7uÅ\É2N&|-ãì&¸Í9b~z[¿µÁ,C.T²ÒÄÏ8¢mlã2y .KÏ«8“±Õò=\®A¨·(<Ü™àð€=»­²÷^"7uÇ>ÿd‘ ‚EbÃ!Èg*¼yjžtá  ªÔò¢€¼n7†Ñ„x¬&²Xð ¾ÁT^eyí-øé¤†Q=×Iò ŠìT²6¸g3_ÅDiFÕjCé ð^qÔÎÄÛ¨À;Q%Ùš…0íäîœÈ¥fåLJgºÝî¤ø§ˆ´6ö!Ú½]%#ÊÊá+‚U×LñjïæIðCˆø#pŒŽwI”IÙT x!uGÊ•myÅ7V;“Æ/iö:où–´P‡xHn½±yñ94c†kE•’Æoÿ˜^‚wm‚¼@µS™‚›Ié 9KKi­ºV¹ôq—W'–ÿ×Ö3™Ï\¢Ž78ifh-¦©PËéõþó‚ƒÃâ'>d{o+쀜Ùún1y]ã ¾RžPjeªív]‹á÷ŽoÕ·‡Á|y¹ÚLµªÂmÏ΀w$;hÒî»>SN¥^×wì°îC×IRéø,ûO…‹øíYj?—¡¢=0„ÑøåM#„È>HÜ!fq„²[Ü¢ß÷ö¡'̨] â4e݀ˀX+èI1áåçõáòv>-%ªÇÂyzŽÛ4ïÎ)é¼®iÜéÖ‚ ŠC2B“¾uÖÒTëß?ƒºtéÓUI×¾\–üi‹¨+Wĵ*ik˜P_¦} ÿKÖÙ篎®Š$õ!Ôö¢?]tùCIò¦?[uLhËf.0/ÂÄI³¨G…‰j«Ri Eÿž’Ôf+“¶}-V*¹FÕ}2÷ÁØ—É mlÿ}­ôbÌJ(ÿÕ8°$^½vý•¼ v¯NÀy×ÅégÉ›Uumõ‹wVk¶¬%Ñ&IR#½Ûôí‹ ë¶H(·%¹&É7jT»1!I‰¤ºJd™0¡MÉ?"$©Ym«oK¾ú´mc{|›e‹úŽïl\ߌâw,YÙ§¯ Q°*ÅVHe_•:u¶Q‰òomßJu4‰Uù/W·vžîVhëk{ûTŽW‘;?0lÓÝ6ÿi¢KbÃ7¶h“‰&UÀPÅOVUãñ%™œ´àpƒ¥§ {’EIbéƒ.+îfVUPü3c^ûÐPÕ‚–@5JÚ´øXº@¡ ‘-¾X•-ThÞZ5iS•¬UbæE&èíØ`‰AÆcŽÉT_|ý5¢abºÁ|Ý¥œ6Öè’†5 µÁvßèÃFµø£%Øm£„-²¸æknH¢mxÕ¦B Û¨¡-&$ª„#²À˜æB’iÓœ5rj“„dÐIÖÜs2gÉ-v(Qa ºHPBQx“åW0§‰b•ÔÅ{Í ŸXØÅ§’J,þ…CÅXzÚÿÔñ£B%•&éíV‡%•L8žD_¨"I*& A;Ú·LKÕE4XÒŸ_ºT¡âGÿÛ×Z÷Z5•óImE %¨UÿP±’.QL[¦~–P[ŶÅí C »&HLÿ~Åb9 G.qe’‰fÊjv©Ø`Úhò˜bÅQfe˜É‚ç@0½‰E–fÍ-ÿTvÜ-¶H¶-Á‘¤´Ö•tfnXsœ™äúµÐq¢êsœIøsjtÑér‹DdïuòÐ=Ô«?UMìWŒv.K;Ö¨0ÆäØ6U}” ß1 wI Ñø¯DvårÜGm© àUí5DÚôTZ.(u ¦>ßÿlµ3GŽ5&YCÑîCœ6V\L’ ôWè—“T‹.…^\C=Ùe{¶ƒ®6r79ØÞ-£‹®pT¡½ò—Èïý¦—‹ÆÙœs&a§fy’‹iÅGO=IÖd&‹$×€ùOù#£_Nl}Ê–e¨:wÒ ¾ßåeF‹¡bÁ¾²ûäezgBÛé“ NŒwÞ"`´p’@Åäx_RÈú„Á5•¬X»b삦Ó}P0&ÃКHò—éJdèÛc¤×<á¬Îƒk ‘×¹2æ†^’Sel&‰H䬀 á÷ …¸°.«Ùb<ÅãPMNMh¨ÂVœKÜAÛ°Äôg8ÿ)©Nz¼H™ô†–Á±y[ˆ-¨2oe¢8yÙ@²A›ædT™N¢P‹:ìä+‡Q^K2­ïPÎM¡“Þ´ òA^,î£Õú¢74…á¡V‚Ö8¼ð¤ä$ÙÙM~¸¥FЏ¥Ù)N&ØãÇ¥$’Í¥ ˆÃ JTÂ^$pÆ”m¤É3^ê É´—­øñ†zÙÊÖDe™±\qšÒÆ,a‰]Ø$±*I [¢È¯Ø"eaµ¾ó£ù¤D)€c‰í5Œæ“ÎJÿÄK–Iv´ñ0|¹1'O¹ÐDç™ óàËßáŠ.‚óFÀ`^ÔêcKú´DæÂ(lG.ò¸ñ?PøÆŒÈ2ª¤ùdKD¹G#êì]Ë›Le.“™ÍD†*Ù“Eb$ሩÉbã³F×naMЬÁq”,Œ™Ö¤Q­f†´¢qîj™âXq¯Ð¹ƒ-¶h+èÃQØNåþóÑÕ`aäÙ…^öK@¡¤vQV>©Ð­§¬I';K2Q1½]M8lIÐ#z“‡ÂÀ=ߢ…r’ É=ejQQð!;Ô!<‰A&b`²‰ÜK,òÙÖ?ª0Õþ”/íÑнÒóÆ!%#ÿVÊKõ [±Pá1ÓƒÁĬD“.¹%bض,"Re•¨"ö‘ŒJðU/$íå\ùäØŒ5¢Fo!šhôì2ª9ÕéNy ]-üfIø¥ 1-œI˜@ –Joœ „Õ8¢a•DUŒ`‹Ø(¡5&“ûœà&˜*U kŽ,qœ)ØÁ˜ )ÌCÝ¢ •L6R"Q ëo H%_¡BpBZ,Ñý¥RMrË·Ìè“Å'/Bg”y¹¨¤£uW·""d¶\™_Ë:ØŒþCž+#èœññg䃈dö,)HGMg/ŸHitxdp ¦“§Ü+AõÈJ4Q¸ÐVY'yÿá{„Š_OUöÊC‚ÎY8‚\TaÊÄK½AänE)m7‘D´BÅGqú½d鸛LÊ\ˆÀÄËcdq¹ªD¢/¶…lá#dæRÖpðoZ£(G˜5&¨”¶!âD•€€Åéš•ó5èð•-e³Eãp÷É ò(«JL¶á  “,Vêït“£úe&E17ñ²‚’‰)0£{¡1:ÿŒÎ8î† "é²<&ák“‘G¶|#á! ž[2º‡øÍ܃Åï>~˜Tó`E©wsÒã ÿýÍG)ÔBŠÒmLür éŒîÓ·l|vùàa>ò‘…,d~§Êÿþ Eëé—Ú^Ilцjhc׌ù‡$p=KPMÞ~+eBL™mÈâg’˜kùlAa°ÞBƒðÓš×æ7MÏ/UfB ûÌ4o’]rÞDÔËFSÈ< VPujáhm„µ,ë¯êt!µïƒ.nÖçT1‹èÄü Ðè•g¢aþ޶úã…(|“ÍBÑÛ𿘼4½‹N4¢…³_[ìZ¼§K"ÖPx–I!”ÚÒ¨2<ÉXã9Ö¨"ýŠ3?/ Ê—àR«Éeú’uêXÇLJö«¿Æsp}2S!õLÊ‚‘K3TåÏŸúØï·ü탑žË ¦?‡°ÿ;õþÿ<ËÓDwW<{äDÑ3*½d'ÀtÛ° ×hS”]“8DzC ˆRä5=pvµ úpÚ`—°3¯´ÞÐO^á._q#3XQ ZÁ#qòp‘ƒ¶³ƒ[!„?È–p9ý4„8¦ åƒ]ÑQØÑRHx„U¸Š4^’„± •`ƒÁRì+7èdC8O8øƒ;Áƒ`È…¶†ƒV8.Lh…#ÁRQhÞrß1„=ˆÕf8ÈPš0A胙¡†:„4¨ƒJx†?8Ø„psHOÓcU@¤=8±Iþp »` »0Чhж€ÿŠ«hЦx Ûp ¨¸nxböEØwÏÁbs ØÔß¶Õ&ÓJ8!Ñ&A1€ŒQ5¡ ÍøŒ!óŒÊèÔH¡ŽÛÕÚø#jÖ&û@5á"ÛÕ_t‘ŽA!ÊèŽ-ÒÄX æá/É0sŒÝhŽ¡1ÕàXψŽ×Hiú(4rŽéè™pŽÒE‘óx‘• iô¨†–'1Ú,ÙX’9Ž%ùXãøåø H…Ž”&“Ù!€\íÈzq"`vr{N·Ù3eÛàv ’`4“` ·p ­" ÐÆ”I ÿm&”·  —PFÓ{Vc*ÑMÎwE,ÖVÐ*Yi;ã{r8ăg@ç–ªs8xÃ73,ma:¥qó;@G—mé—xÙ—¶“p3ñ;£“sm‰˜—‹y‡ Aq0fÓ’ù”É—Ÿr˜g9É—·q~˜¶“ t“—Ži˜¯64@Õ˜™é žY—zI—–9—‚©™“™²i|s›ŽQ9–“pïäC5ƒUÀô}Š1'»‘Vÿ° &° ÛPoa‰b²!‰¢–an®‹! “ LG÷r ‚ËÑÐpǤhL”TuýGî'CB›%CN4"‡xåWÿHþÉ?J4-w€†·yÇx¬·y,y {ÁÅô{¤÷DáSu!³Lˆw¥'|$ÄC:ÄÃ÷ Ì£|ºp=Ù³ X?µ`pS—5²q ` Jp)¯ž%0 J öJðVùI©‹² òEM¥r?éy?ö3?Ë#€à7€ˆLæ—CØr࣠FÊ Ö‡R@iâ<Ãw.¥©7=Öçzî×)VºFGUúi¤—_RúFÖWŸ«~—txÊñCXu{ä8“ þ@~q ·(’ðÀv “°(Šz ’ð©1 r ¨n ¨L ©“P}ñrRÚÐ5ÍgEs×ÿWvÀ‚w`Ö`<_bZÚ@'±ÔrHpá&–ç¥`‘"°1kju 9`b’L±]zaI³Gá†nÃ8?¥ p3 a àˆ,KakåÕO}473Â÷ø%Rò¹ `u@ªAO±{==–²'‡t¦ü¹ÿ?óY~¤—CGgŸý™_êÇzÙ“ÐD'@‰'ž²<(ƒ~è#€•G¡ù:Ám‡¦Z?c™žRM¶0/`°F]F#óQ¶à/=‚5)ü^ßaµ·Ë#.\Uâ"¡ Ô¾4âpú°ŒàCA½.bpf¿ób2$” ªo4ë#¶•-ˆ¡ Û0Ø%N‘-ÿ@!¬ó“D:[yôÈ…I¶e™7L® r¬oÚj\Ç]ùFŠAž»x¤·sS?ö:œ´6D1“0À(8a ¬‘*Hãž±3!núÐlHwìš¾!*÷0*Jj? ‚ȧ—e ñÿ 8á †·ð–57Aæ–yv‘rÖâ7É${Wë6­­³2ƒUËzp†Ëb’¿'x/øA¥éÊ)·u[Ëê>ÁeÊÑóI¾úÌÜ•{*¸³Ç~,¯|ºD~K~áLÊ»d¢K‡¢y2”á¶þ`»ª¡rp)æŽp”ª‘)n±¡`ÛPnSÇÓLHŠm̱ÁEO:Ÿ„«} Dmv JyaÁÈ<¯,³¯)SWºŠ¦#âüFû9y#½@›E&ŸR<ýwÑõš§GTO64¸óWÀm¯õ$zw1È€:D« ±›A§AÉÖ )puÄæ`üœ(­!aÛ ÿ’±›R  hžQÔ|+6– s—`õÕTÕÜ|Òrzzì^zÑÿ5y Ê·üú~ýGÓqͦtœeV³ÑÒ?×5’QªI wøsWÖäbk§O‚tQ_aZ£ô‚=f ¶Ú¶‰% "T¼-0ñÛ=ÆÂ=µ#³%|ÆÎRAƒ_ÌÍM4ø»[«´M-,Õh=VÛÃýÁ=K·ýݺ=µâDÞg<ÅíÅS+â¿MÁ‘Üà ‡1KËÝ7ÁÿÝÙÍØÑcÁíÜújã-ÜtÁÛdÜgœ³ç=-šãÞ±ßó=µ<Ñß÷}Qà¦3‰{ H0Œ;9ö×|ÔAJ|J-(þ®Ð3ªQ?*6M{ERpW®²é"È÷èZð¨ãi’0° 9®Œ–à 'IÍ R»ù’00Yyù# )åÇ¥ŽµËþ‘.Rò¨4@ñT;æ?ÎãþB!úTŒL…:ÉæJˆäÉøä#‰åàø0ý•"]ŽÚ` mBXYÞ•@çcÊ(HÁr‘h¾ b¾èòˆC¾æÑ¨„3åä×8YÝ(˜þ22yàH.èßèÿ"ƒî_PåÐÒ@Ç*r²ÀAôØ-# l}á§A·>Ÿë—žO3Wªý|a#—  `3¹œÊt£Ò27UcEsÎ~Ñ¢ë–7Í6ä&rÊ”?ŒU“nEa푼íǾÉ>îÈn*YSrñKîОË/ç7l¡3µŒ?'×í⿵œnƾì»ÙË.nÒ.î)·›žSð*mEÙ¾ïÃSrõ^žñ®ïñ>ª¹¬3u›7ù‹ •63ó§SWkÜ•¢Lúƒ¥®§wmm@ÓÚX]E-ÆÚNê±5ôxž÷DȇBuñBêx`!€x·Ò ºyýwŸý[âªç@O„x"ÿŸ@——x+Øiõjј'ÁâU¦8O¯õ%³:®öxMŸâMõÞ `J‡=Y#u‹‹Œ»Áës ‰âA² ScªØè¢òrb*I:9̤ºø>‡]Ò­ò´è%‡çÑizLw1<4Óhª¥÷·Í%ô׋÷&Ú¬ F4Šu½}%¸g’~HdúË”C_ÀhrÓ>4k—A`¥¯ÖÐDékž½iðûh'*º1ù\°Ïû0Ð=êƒð*¥*–swE¬ cÖÔ6v y%k vpΓ–QvÐ+0b–ÜþÚ º ào 2ðRP2 ‚v€ÿÿº šP%Áýû6þéøoŸ?ƒ $¸àAˆ&dH±á?û Nt¸Q!ňCB´RbF”/z$™eÁ‚’$ø2¢ÊŠ1ižÔøò"G“='¶Äù0¥ÎF’ÔfM›-mI¬I’Õã>mY÷±© ¡-kþ¶%ùgË7’LèS¢d›’I¶™0¢M B¶œ(qdëêÑšX·é»–µi¬ú´a]¬m[ÖmR´Ý±âwŸºöYÉhG—6;–ìø»¤Ih;ÚþɨhI“AÖ¶¬H‘aÅŽ+2ªìÓdGÆmÏûl„Ö„ÓNh+Dºœù¨R™6}"½ù·ùuÿå8].Mú©ÁŠ_­(SßI˜Ðu¦Ï9^3ibÏ¢š3t¼íšjJ—4¦ŠÄªŒÎÓhŸHlÑŘÀÃÈY‚« ©$qÃÿ70RuA¿ÈÛŽ¡Çî1ì0µIQ1¬f°Ä’}ô¹£UKtÙF—ÌþIí)¼Ù%4Klئ2¥ O#+D‹ÒŠg‘3+ʺ-Ç;ŽÓeW0 .¹+‰Í7ÓM4;ôî ÏóÌ“:‰MT¦›ì…_œ î_@CÄNÝ‹ä Ϻ÷îKØ¢¦À²Æ¿HªJh0Uò«!”ò¡õ< ôN4“2l°O¼µ1–{,«û”©<1ÛüN䉨«YU%ÒÄ–×&R¨å´K´Ì‚v¸^¢ý\ïÏ…ëSJQúj–YÎ~m¾š§96zá ´½ƒ•[w¦¦v±F©$ ðª‡õ±†Qÿ•è<¨&¤kvú½Œ“û±Ãh¬•eÈÓŠë½ åî&Kî×q} ŠœßWí´™Íª§ÞnÞ°e ñîØ; ?«µƒn_ƒ՛벻Î:éW¿sšsúæ¬N:%¦xREûnc3_x#[ôék&Y QMÅJÌ*eÄ´²õe¬î€ÑŽ_·éŒW„Ê5ȶâF#[&mŽÖ6_ cc¢‚bO¬z“d#3ïh¿É@ ®k[½š|kÇ4Úi¿ø¤š?RÄŸ¸îÎ* 駘34„”ój•/cþù¼$¼’¤¸*Œl=¿Ü‹Â~„åDGÕ¢˜¾™—>ûø:¶Çµý§óv»~8Æf•cwãôct:Í¿8þ±n»[á:*m³A“ÒkTì¼ÆãP¨E¡J2äÚ`¥Ž97Xš¨±’%¢`¬ÿ`½K,†³í¤“¶¼®uõZ «åÌ{¨Ðµœ5~#’/HßÿþQ¶Þ¤'†/ jÆk£;¥H¹ºM@YLßFh Io ¬(•SD¨Z¡`ý± T)Bú|O¯ ÷ÃÀ½LEÑÇ.ä°;\Bwp#…KÛÑÞš÷ÍüÛ3êæc(áÑûíZ ¦çÝ6­Æ~­×^Ëh¬ÝÖv_-2G»@GÄQk‹T$ÙŰÁ±PM–µ!X³¸¥ûP‚Cêb„¼¤j%˜„&4^[ØQ…ÉðŠúXYb2vàÙ °ÍÖ¶'Æ­•VÈE«3Øfu+[ îÿͦup$´måå9g;Ȳ£/ŽÑ'8cGiXáÏ5"M×ZN$lІ7ôѤÈmR u!eZ‚%”à…S1BÎ"Jª…—ºN‘åajÉá—ùÖc³±Oëña«³åörSN¶õÀ|kßÔ±tãÅO€c±Gñ>»~H›õëq·l}Í䓸²–üyŠT$ Jm$Y‘Et2æøÁOÅp‰ð>Lb8뉠…#kË}fšr¦À.§_uq{ì*ß ¡æ<Õ#»Ñ«û¶»èlí)c6Üoÿ6!h÷ˆ xæ‡Ä Á\œ_{M¿›GpT´!P«dm¶ØCB’}lÿÙDúÔÆ5ðŒgŽhýŸ'ªÕ†Ÿu lÙâÒ‚/Ô`oc NüÐQ/¹¾8>@Ð}½´óĪÝ,çr“ó/t:›uz±=â6½ã3Ù;¹—s­ëлp”þˆ²r,ŸÈ›D $Ó²³dŒ‘›Xã0ÂÙ]˜Ÿ5S£‡ƒ=ªÂ¬€“`ƒ/i›§¥8“Ž">û°8 { jƒ»áa©ê¿ú½ü86ü>ãC1|;‹½µ9‘RuÂ[Èp •æYh8¿úGx£ùr™„2œ‰ù¼Z!A9pŒ(!²DÓñ»0¬±¹;1Ø)>C[Á;Š'ò¤×C/ÌÁÜ:½àÂö3-ÿ„#D3¾9b¶Åé8GŠ+þHƒÿàÄkˆ8 >[h¼}ØT™ G¸…€ˆ©8µ0(·y »3Å‚¥¦@‘[¢+°„KÈ>K˜È£Øc½;lsr40¬,Í .©6ñœ®c¹^D/ûr¿÷ «# ¶?óDZÀø32‹»±ÁÓ‚ó è ­hês IP Oò‡Q+¥SB5¥R¬[P¬:ë®YEZjŒÁY™Yƒ f‹=ã¿:œFÛ2lã=SœòÇ¡BÛ ;EƒHÛB Eüš,ÆÌú-À£Ã’ÈÃûÁ¾A0[ ˜·©”‰€žÓs¬#„YHºmÿ(‚kÈS)#؆྘¨Ià+e˧¾1‘¬"ìjŒÇØ2(q¦"dm³ÈÍ"H‰«”‹-dd­Ÿ¼2›h1þò1«<@]¬½6L }*»«œe+¾ƒ1¬¤¹Mé èKˆ‹Ø†Fð9Ix ǔƅ[0J<Åh5Û‰“j É0¿Q{))°5YÆK½¯³8ƒÈ¤­ÔH7\š ¬8²j@;<˜ñ*@”C=×K¨Y1d´<4̪³›I‰¦@0Š©À©)¡Õ mÞT ˜Ð†[Xˆg;›†Ð.çiÅÇҰLj[¸m¸‚ÊÈEÿ£Aøû3 ¢³•ÿ‹Ê\Ëþƒ? œ0¦ñ¸ 9:Y˯99 Dø²¶îRÀèê8±['Z²( ¡/›Ê÷„±aLm°˜~Ô05´_±…ȈÏÔC§DÀ’3ÂFÔÌ;DŠ‹­ûcƳÌNúb+ í3:aD®º¯»;Mó\ÐQBÛ›Ž¦°9[Ds³ '“œŠ©¤ˆ¥Ä˜…“Œ‰¿š¸}B J2lEæ\¬˜“Z¸‚b+ê¬LÉäÀ¶tH¶»P±BQD¿ íCÕ¬C ;ð$\LÏÁÄ6B"@ µªÕCyK&[0'3(êÓ ¡Ér›½µmŽº†QÿR ™…Œ¢IÀR ¾B˜EN² ³–Á}˜,©óϦ”?c ò4=>Ö*ΟôJÜ$Õ£=6q;> ´„ˆÓ¯!Í €Œ# ܶ¯J郫‘d$9.­0·MrD¡2³P‚N2I€I5¨´}»…$˜G¾z7iÖìŒÆ˜¥‚cN–y5¬E†P ÅÀË1ž±Ò¬%ÑLØRC¼ðÐ…\PõÜ£¦ŒÈ%1b3ÎôR»Ú›AýìÈÝ{OÒɪ ’Ê@ܽæ.¸ä1i6°Ÿ³²}(J‹¡@SÇ‚hIy4‹©h‹)¥; 18Åà°úÿI¸eQ‰*×ø Ø¢:ðqÅŠ›µ†)q$q%GÁ¡*¨W¬0°Ç¨ˆ:hWo¬¥ð†§•“m MÐ…–­%•,W•Ôž¬¨%Ÿû*À}Í1wU;-•Ò?zÀ6-„= $˯ äEŒ˜-d¯¼ã§Ú\¤Š‘Q\©¯XÉžXª{žОÂ0‘[@‰LsƒÅx®ç‹9«¬«º|ĺZ¹ϰ^ú‡\x }¨o *–ò¶÷²×Ÿ|ArJ[ý¤=Ú¶fl´ãc‰ú„ËFÊ LñÉB![Ôk ƒ‰¿*ˤ°0§pŒšµ¢ŒÙ§°µZª‚Œ°]ÈmÈ…ðý‡:@ß *ØØ¥ˆ›Ý¬åÝ£ýÞL¸Úæ­¥£a‰èÙ* [åͰ]m¨ƒ:ÐM؆îõKÈqU®Þ‡›ý‡J€Þ<Þ<èÝ*¨Fâ›ÍYÙU,1SLûë0-À8Ê*"›³=ô­_<ÍQÈÆÚŒÄI\ëPRe`@¢Îp•5ÆÿZÒ!ʵ“Ú•Áø Œ¨„(ˆvîÍê£>#ÍÀ´I苦•oÆÐ Æ2C"ÊŠ)ص]íb‹é£¡0¿·¹YóÌò¼Øqϳ&ø$ˆêLr©©çC‚ ‚oƒ öGI¸F"Ðq³–œJˆkpX‚L“(Õörz×Dñœ[b÷‡ïñI  ö4hƒ%ßñ&'‹eƒ}@ï™Qï•k[=zÍA¤“ó;9Ôì€ì¸+u«fŒ¯Àn<ŽK“¼ àIìœñ¦÷‡¦ Ih\˜¬'ÿOý@AÌ­ã0“r&[X&ƒRñkƒ[ $[Pñž½Iû‡Nϳç}0ÒHp„ç#zY²Â6èô*$ÔLt›LÄ´ §¯j;,§³PqJº…žW?sœ„Xr¬èI†gƒ8zß¶Âà›,ªB›¦B)¼îêÛA2ÖÁÊì6jF×ETQú“hÄ"ØÌü=>¶ Á¦Àn4›Îìµñš=ÿ:ÃÄ`åül£dRÉú˜É™—@X˜ˆ°˜ý—}‘ýÔ_¯ÇK踆&q¼åx}çhÓÃ2“ÒÏýÌzÛ„dUøÝïþ¢P5D¿ß³½ØäTFßR›ÑUÿi*çŠÿÁg[dUŽœ69ÍJ)L N‚ë*³¬E­ÝM;¨®˜N÷íªö‹¨Nž¥×”Öˆ¦öîIࢇvÓ‡¨ž®€h$É–ÀXÿ¬Ùú§¯Q¤m‘*L³PR$„û*6j”pŸ?…ÿö)ä¨M B M¢ä¨Ò£¾±´ÉФ’#ËŽ-QzL™òΖ*{þcùÑßM-}=ÊÓèR4‘®,ºtjK¡P›2EšóçP¡+wVUÊU©P…ڬ麦-‰µH‘Ú Ý§4–¤mÚà¶´¦Æ–­knÜHº&묤[ž^³5ÐDB}ÝÈ2¡T¬Imv¯9>›DŸe}Ûš\’¥ˆ(É’D#<¥! uÿ¤¡ ƒ¡ŸùV[$´±ŽÔÿ úDrç[Çf|Tׯ`%€×’lúÈæ’XóOmj$‹€;×U°eŸ5Urnå––„©Í%–ˆõA•þm)A”zIÍn-|ÿÄ´º%µ%{Íùö™‘ø7Ø>}^¼w’¸”?mÖÌYB2ÝyCÓÔP¼‘¼'_ˆ”¢-‘Ø"¶äÇÈ=³@éĵ±Ä1KlƒRu8•ÖâÈgCe­Õò›,·*›T¬¹˜Hña‹ìðb©ŸlË?ÄBÿMš² GÈ ƒ<ñȺn! í KÚP‹e¤Ã™+}æ`¡Ñ†gàµA¹8OX>Ù Þ>˜ ­á0(S‰aP¾Ò•i½PDg–€|øµèl7й’ 5lCRP³@¨•ú‹*ÕzÖ¨…¿±A(m\©Pج·5ˆŒóãɉú#¯3å­‚h,"i¢7]yM~RâŒÀ>'Ѭ`¦³„.¶a KHÐZG K¢’%ªEM(a%ý•š¬5‹}_ ‹µžtÉfÝD*U¡4E¶Œ‹ì"qb5ú…2š;ÛÛwI¦(r–°”P,í' ³(P[nq ³¬‹š‰Èjpëßÿ¡…KÑX#…Ñ4a”¶š)Ia¶Ø…Þ“˜ Ý"!Ö˜„?na‚k˜¤.©‹-Lð™ÉqÄ·PÂA™EWV+nµì•3ó‰E´a’2¨lŸ±^9D*^‘l_û`ñYJe 0™Y+h>?¹µ«dˆ)`Ä¡@­¸º97*Âh´f‹8Ø.A—>0s°$p*9‹#¬ñ.…˜H^JØ%ý&³4a…€”–.Á°mXá3Nç$šÎ7hÃI*0‰ ®‘¯7”ó*Pˆ ¶¡‚[¸Á«þÀÙÅö¾=“¡d;£ÛàæÑõ©2Z÷lD¥5F‡‹™ÇÒßÛV?ñ­cƒ›†¤ÿÊSæ•*Ù¹Å,‚Ž )Á‘þb„|)I ŽXŠ$aÆÐ3InPƒÔP3ef……j±f,ÕÂ=ZF¥™mKš3 I@õ auÂ?”`"'Øb¶pRù”0Â|Æ Ú g|‹+MW5å,­]‰*”€<è3kiV”¯€àZ]MúuŸBì¨^ÑŠ]&+»»Bìö­iIh¨D,¼ñžJíƒbšýK½Þ¹›A_&à—h”t£æP75-¡Z>÷Ú^é¨Ó预pZ @ÛP“gÔt¸[dþ±Æ%bkì‚qi§+ÉJ\9…–ðè,Íˬ~ÿj”¼ •V®ºÖ¿·úrâí¥uÙ«K®ùomÇ2hüÒ»LŽsmY‘XÞÓßç¸Ð“ˆb&g ‚IJPA]³®¿ ©“Y>CBÍü‘…Õ,˜•´ôžñNe¯]äުl¶/Æ­¢Y3`Zo™52Úu°Žö$ŽPHÞˆúØëC½Èd³•“¨”tawh‹Æ÷BЄ¹U™›à}v|!g j°*ÿpƒ#üÃVWúä§ö¡Ò £t0ËXÂÚ¼ê`é¦Å¢öñMdF³@Ñ,‘6 gª˜é_)EºàI&Â]‡LŒ¾þ¡1Gdk“\È(ÚØ"§+ÐJƒmÿÇiLo¦'ÍÊ0¾‡¹´kï=gî–µf̲0ï+a­1†?AJ—køI~ºUž©–<§ƒ­¨¦䯊G[ ¡ OLö ó¥Aj¸:¦>’°™ãÍHޱâÙHêoWTð6ª -Md‚#™À’.ü¡ ]P@?ÁÒ?’Žn¹h¢ ÚÈÄÒÿQ‰qÓAë˜.ë­x¹èîæ˜Æ =ëByuPKÑ 2)§Ìh|‘È÷ãŒ5ƒ¢‘²hƒ²@È*äA÷™ØFÚZ¶Œ÷ã©ì¥ÁKï¸[ÈøÆèþ~üo+¹»•”ëá²ÕØ3q@3­ÓQ”À•©He6Q‰Êä?P%Îo¨ÓØ–R¨çl]Á6Ù‚—tÍÃøƒ@ÐÌšJ#¬…DXG-¬Ä?ÐÅß(Jr´…t¤:Ç6œIÁÅ¥>d‚&èJ.àîi‚6ÔAäÂ>Ѐ>¤Û?Ü^ ÐÀ>$ß?PÁ6Øä>ä!ÉH”…ÝÉR\y¡Ý]©Q½9ÓØ—`É’üøXá!Ù5Z·Ð—u¤È}qÛ€ÄHKðEÿƒ%Á$$¨ ×>t–$`€xÐþø›U`I”LèX“5mƒ.”Ž-l|©€U Õ%ÄA NBâÏùJ-ˆá(bñ4€Wta… [±ØEGä‚.xƒŒ›¸¹ÑÉ`Êü¼åÂîÕ€ æBP<a¡‘wáQAQÚÁµ^C•öye[õuÀUQBAª ce …–5ÐPŒô8O$´Är ‰èºÔ’0†( 25áyi ÙƒetÜfð™ÁèÙ5…Æw -Â×U¨ÚVć_© =‘û”…ÄÐÎÛ¾AWD=aŽ!–£yÑõÁÒ’Õ/½y±[ÚñÓÿ)É"CæK˜«‰”«I\qôÍÒ —Š<Ø?4Á,8B;¤ 8B¼1!,~ÔöèhI~Ù…\¶èà ¡WX‡o´cpÏGÔ‚6R—S°AØl ½Æ©ÁÝíC6h‚BtJœ›.ÐAIèÙd" mˆBäÁ“TB°PTÂ?.áÙ¡Í©ä ¤öÑݹ×&Y_ZJ_FùS¤ñÃ1Ãq‡´AV¿äDPxÌÇD˜ÚqÔG¬5´ a‰•`˜]èÂԤ̡¦I`žðF•ôÎxHÛBERÔITÄíœÉ¬ÜÍlÏED›BØÊFµDúCѱ„WZJÿÔ› vb.T‚6xC%$]. ÔI7 ›6èf\ØžlÍ[XÖàÓålé‚ÕMg?’ZƒPÁM_Оv™W[™Za\J6¡ø•åÜùÝÀ‡H­He$‘DM=òþ}ç.^KæÙKb‰g  %\X´HBØBG #ÌAlÌ> €5ÈÁ^²Eùx„5AuȆÒÈÉÈX†p¤ÈžˆGžXFÏé¢?Ôìmʼn~DðÑ Bmjƒ&hÖ¥ÔžBЀ&àìCÓ©ñåASÚ^ÔýCä`.Ô€îéBlƒÈ$øça&Ô¯ äñ"½Y)ª%¡¾Õ¢Ýu|Üÿ3bË-“c).F) )‹Â9lbÉ=°¤t é§!éÂpÆlÄÚÄkìl[P„š¼ «x¨ƒH ¶€ÀZ|^l¬ÉeDÜšolP«˜e·l¥^%Oè‚WfB æÁ Þž6dHÐ@ÑiBl Л֕[ðÝ’ÞÞÂàVªàÖ!·9Ë\^Ú_1d_ñõ©M[–¥xöâ*ÙÖxšêßÕM’T*mÏ"9 ™ì韔@T#‰4áÈ£6‘£aáTGTJ·Á€Ô¶ØGëÄYÄ“‰DHøB”TKA}(kPˆ‰R†¸‰†ÊVàÀ‹Ó.|ƒÿBd¢lìTPÝlRÝ#LGˆÛ7t›†ÔORª×FQ©z­åy&YnßÈ‚›ƒpë‚Øå–9 ÅE%´Ä@(D\N¹¨Ár„I:É:f¥ n8Ƈ]XX96æ~¢ÕÁUwÒ+},-µOYh#^•ç“l×U kž°hgUÐê“:¦%]鲦NTZÞ «¤åÑ/šm]µ‚L$BT$©ÌÑö O8ãAtiM#„½ =A_õIH±±Ð4MÇ–(. É$éÈ俈k4Pí̆]DÇ.­tUéݵííC׏Y‚Ñýj³ ! 9Û‘®Ò>%˜jßZE¤Ç¤Û9™ÿ=ž¬°®ÞaWZriGÉ¥Q´ì0ýŠFtDC˜Ä6†$ü…òÚH€©ò"!Æ m8¶c^“¸ÝAã&Òˆ¸F!vž¥M[4Âá°‡©AEwH]4‚Êì$7FÿTA»Õ¨€ÐÁ.XŠíµ¢pj‚pöæÖYÝÿ§¥g&|]SÔA'z]¹Mg×M¥6Ð@€„ªžâ×=°u£RÚõÑ¥/ £…šI!’Éc\&k„¨çß­H±Q°WèÍéÅÝ·1«ÿЩÀ¨EÌæ Þ¸]ƒXÔxXàlD‚@Êš ÙQhƒ{@h ¤‰ÊéCžŒgbq…ÿŠê…ªvD j]èè6ˆqŒêh¨Úh úTîŸ ¹ f‚¸ WBàß>X°‰b‰Ññ %xƒVØÔaÖ!”^¦íXzT“MrÉfa.uˆùh™žßÜD` 9Å a)Ù9ßsAÉ·z\žR ]‚.PfãÆWkúl¸…=À¤®  ”r\r0 E°JB´Éÿ¬×ÙŠF¦FgäBtÎñ?„jtÊ*×Þ¬ºê>PÁÓ¨&øCði…¬j]ä‚<×é iXRASf³¨Þq]m,\ ëüú,?õ“wå. ãÚpÞl1ò ÝÔ—´jÍdÝE‘-ÿZò\ÎÇÝ¡…Uöb ãÄ+©„LI8fI^|„˜VetŠÖ¤«‰˜d+&?ɿڱÞLì܈ ù¦HlOøZK?… 2’e…eXŠN‹ÁPÝ>ˆŒÈØhƳ=Ê®›WÙ~´1k×ôÛ1çîìŠMyc01—‘R¼@`Hl–JÜŽCòØ·ine<´Àˆ# í†mÉWD”Üt2w#æPKDY6²æÎsᘩ¹Ér*-9mí1'òt«l$ßð guÝ[ô9ß.êÎm«Ù-Júó`L!–À^ Ëh•Vmå¯Ö]/Úœ mâ^/çlƒ0Ûkñÿóq„, $Ç6Tƒ¦ J0v:›Ö ²XÃp›2p*D8© VsW6 rµ´â%iÃVŽì%Ë’)F±_?éuÂs/ôØnðuQáv¦ 3c—Α–šÅ1615& 4ãŠÙÈä÷_$DlƒÇDò•u'5¦Ç]X±…†.À¶%ŒËÅB(¢Í)ÄtÔ‚#ìä†(Z…úf¨@ÀŸÂ‘mÏk>¶xéCýÊ O |ƒto]XúÃ*ú`%˜è©V¯`ÞD% ]p]"° þ8XŠ[O0Gœ›s{e¶ :ù¡)k]Ý¢_öÍ.çR©\FŸ)×ÿB}°ç´Òï#iƒÈ º(ïgoCŽF¢—FQÈÁÄG ögÜ‚0äek¨Ìl Ÿæ£F¯hx  Ïr€$ A†F ߀ßBŸÄ‰Åt#¹'VAŽîž>_ŽëmêÂ:Ó“.éRtª\Ô€¸%_×ñt"ŸÏ´Øqºî‰Ì’¢ÁÙã[W Jw§‘]­×*ò•c³*áïj¬cÙ¦i2cmËk’…,°ñ4Q¡ù… sc)ý“)^}œãI‰ `¶˜.¹Z¤¦›à²mì 4QÈr( Ä¥ØÂ¢ÚÇtD‘?÷(vg }Dò¨gâ^ÿ§>]Ñ- vj&è¸Bìžî9]ì xC þÃîEs§Š`&Ìž>RHL§.ÄžwBÐÊMU|éœÝÊ®ʵz36—“le÷Ý$†}‘T"=ÔQsC*õÁ-’CWXP›PiôkZÝÄ;I²@.ÜÈNÅ«L¥N£$t€gJÌô¹>l·)ÄÂ2{ÅBÚJ õÙD=½yøñ|½!á2ûú¬Úâ¢a—>Þý>á³înãw4aµË6ROx´{ãÙ>u±-IÇýßkå¹]èQšy·­vvˆ¸4zzT€CÙûI©²æ[2v…ÜPb ú»aÊ|Rû"ÿí¦¬xIõ[â5eÿúáQ\vÝB\J背OcLK$Æ°Ö ì¨D͈ELŽf®ãmo+“Ž?ˆ,ˆGÆÀ\ wj¨O±J«Di…éR˜ ÄÏý‰÷ #ãJ.ð¼G´èµDðÑþ®. ï.|VåÌ75îÄ¿}þ¸ïŸ?„ú.lhPáC„ ):dx CŠþÓ8cÅŒ9z,yÑŸ6kº¬iKb-R¤6&?jkdË–,Yµ™pdÍMP¡ªq#ËÄ@G’$)q£d$C“&7êÛ¦ +ÖmÖšìӶͪ>m^Ã^²ãÕέ‘c%±%I›}ú’ü‹Õ¦ÿ5[¬Meˆrn’˜ÿdEÚ—&R£}mdÚ ò¯_“ÿi«Â0—¦š2í£¢©’·:šòì«SÏiËuRæ©ó/3]µÖEÃR¦urUÒ¤t}y2iÊEAÛ¿LÅkgò©NrÊ‘¥~éP$M‰#'œÞ£öÉÚ#G¬.ùzwôn‰‘rv«ÖôZK¢M’¬™½ŽSË–ä$é˧Ü0Â)£ÔèË7l1A‰ž*á%J°Å‘öÀ»N¬mìñP%—ÂÒÆ*¯K›)¾²BŸïöÑï $öáŸH$ù‡Éû‡ªÊŠø' }lICG™ÚÄ0mdiï¼6¬Ã¯ªÿØH¡Ìþ¡a·ß2Ñ…Š<*qMº®ˆSNyÃ’ä#ÉÒGÁ«y_ê$Åæì(Y;EÕì\±èÓ+ üó°HH”„ ˆ2Mè7<ºFÉ[L¸ÚŸü´–ùÓHmIÙ&œ%ÑD±Èk¬}Aèjè¾8Òœ+%è¤#Ï:ÊŽæÑ ‹éV°Ž:êNªÃ;m!„ê>7¤½+è:ˆ$ Rìà+"ËÏ«T¢‡œìí¨â\fÀOºZ%]¸.U¿ÂiÃ|“ÓÆ®­ù\µŠzo¯Z2^¥ á~¶Ãæ¿Ëöb‘þ+ïêCºü=l‹eïÒŸÉ£(ÔªBóá'}ññòÿ5]_ÐÕ+¾õÀ wR~²C/42Pcö%â Zq¹`ü$b<[èå>L9•BRõ8Ï…n<å+Ôç¾À]å+*銉8ø,;˜eV¸Ã[64 bùã oÑÇ(Áë!*g—{ÝþÞ—¹õ­sIš{Ìf³õaÎ: {ÐjÈŸmj|çúŸ_ø³ø ~ìÓNù¦˜/cA0|;ÒHKd˜4f{‘‰L" {iÄŒ‘Æ6Æèˆ\%dI‘š ÅÒ¼e)¯mcaÛ>ì`‡mÈa„ š„ÖœðIÈÁ r¸FØnÑ¢B®Cÿ@Œ›>ÑMýsÒß8ç)ñIfh»b ;Y½ÿíé,‹–šŠþª¸¹«=1f.‚Yw†4SÒpf¢Üô^©½¸?µKßGjÁ;I\$ û š"‰¥¸Á°…˜âm8BÖp„,Ü +YôCÜ”E»‘¯«´d+[ÙàÛ:ˆ•)X»8‹®ò”¸á 7RÁ?¡–|-\„³Æ—x?Ò5j“§Ôå,kÙºLJ&zöó¡õÎÓIJ1±…?³$BS7Ç0ê•?+è%3×Ñõñ¡¹¤È6FåESƒ‘Å7x „˜@&pƒJ`”œjC  °˜©Óm”`WJøš>pÕ[(Õ™ q^Vì“’]5ZÖÒÅä° <ÿaWÛÄ$œ€OIÌBNxCðT`‹}0sÿ@Ã4Y¹ÞL¡˜Œ¨·ÃSº²QU” Þˆ>B쾿èÐgeâ>b5ÏÆ÷{Cå·½Ù°¡KtñQì¨!òr.7æßû—€¼a±ê¬3ݾRgÄ8”êNFL“*·¨Å¹£á>jѕ؂¥M°†¥J6‘ UÝCËëáù/ÚàZ·RnXZwÐÅìð–ÌÑK÷s#$€aR¿7rIíê«]äh^Ö %d‡!á[‘‹Ìô1“"îTá!æ]‹4äd&høYuRÈ¢’hƒ>rÔˆ±´§¨£NŽ<"i[D‘`Ö¬µ#—› iIÿ˜—vT­¿‰!ïÒÿ‡$˜1·)GñvHi$Év j‰yE] “w9$Ž|¹%¥£?6-ö’|Ÿ2TóvÕ%«nkÛá¹ )ÀWIhñ>â£l§¡ ¶¸ÉMÒ€˜¼ÊmhZ’€ˆ·AÄEIAGÚ ÁS ¥ ˆDa†eî¾Ô‚äi °²q[€À­‘EˆÕp}”À.I¸É^ú’X@Ü!µÿÑ—[\$o„¤=-¬‹‹á'GÕÔÒ†ºpË>„¶"ñkÐÊn1Cr$éüü-‰ÉËÞñþfe}&’Suºz„í2_ÿöA¯ÈÚ+·†ÆóR»6L= 9bŠß®/…œ› 1oš~6 "ùÖ˜K†¤‹ü€¶Ç[¬öï~§Úïãwn•E®n§Ñ­q$ ”óX0,pæè*WÐÆ-lq…ü$t݆Œè^#…×¥ÛwŸ ’*“£»d^F_y$dT—¸¸•\~wy§ëåûHZDJ ‚ôªgUu±²m…ÔÂÓèB.t$úþF²Í$lÄ3ePÎ#ÌæÀL]ÞÜL‚YÎoè¯×êB!Ì.ÚXêôt¤S2®H$a|PNú‚Ö<ôÀÀá¬-ÝNÍáf‚â&"Â%€äHü!õÿæ‚/dû´Ïð jMÎmÿå(âÔ¶ jMÖ c]ö¡ñ¼î€’&Ö!ªMdA~í ®¶Áž*?lÁA„EtÂ* MPz'µdrF +Päœì¬?6Œà´áì U¦È ý¡i$îPn1Ä%Ðn‚áä dmòš& ¯  ˜ /fâ%£.€M<-ÜJ]šFÙôã× #/"_"Ñ6ÎbnI&Ñ •wòbå¬å$/eÄüÁêÖE ð¨¯.Ò@db¼b&Ø… N’Ú`cæBNJÀÖfå¡ N¿¸ñ0Ø #îîO’fÿN\"nïä* %©/îâ ÃÝ¢êeê d!€$!~M ÃF¨l]`â€Ü/I¾®ñ¶áãØ/FQÔÅÔ…/R¢>t!ž¦E¨–ËïjGnK§Ü@œÀ(L@Ü@§Ô€%U‹¶®¡dE ”€!”àA ëY”%Dð¹òˆˆç•x)MGC ǹ’Òj)ç)Ól•¦‚$4Ĺžˆo Òp¢’í"¸RsžK´²Ì^öC*žòp’2uB í)¥bn¶R.ŸëjTÐïšr+ñæjîn/ïÆA‚¹2­rßòRrú²p " F‘A¢’oÿ, ‡%\ŠÑ´Cj¢*¡ ŒàŠ€™¡¬`24¯¶‚Â)ÁÚpúA ø)B¾†fHŒD¸¦Dìãm6¬D2(n|O#B,}Zh!"Ææ"DHìì?‚9Ÿï;hâÄÜ«íô‚l.‚zœÍ†É“<³ZÍ 3*#¦ƒRh¬°Æ±ð‡#@ê#4¥=)‰ŠÂS¢²3¤‹<¼‹&¶â€tÁ³Ö YÂ&*AÀòr‘nA%–‚Àüî*®Âxìe ®á*üŽø´ì'±b ¸bD åή@¶ÁTÄuÅ'CxïX„¤¤'dMÒ"º +©êTT$hP¤ Íìÿ« vOp‚H¼ðͽ¤¨°É<}´¼RŒ£èSo¾Ë‰ÐȨH€ês¤´“b‡¿¾¨ëúÇïà,uä¬DIs *ßPDæ,yRBÃôÈ*>ÈF(E:Ç&abó·ÔÊ ´A æ@œÀ^ÎJu´†@§Äñb!®¡Ö N6r!ôƒÐ|Ë*Rò´áGÂÝ"BæÀ˜iWIž@©¬<â¾3Œ8Š8¯HŸÏFcfŽëÇÖ ²¼“VûŠ»z¨Æ8ɯ–TÆPâË–ï]f-‡‡tÎ'ŠtmGp ¸:l¸vù¾âƒd@«¨erB äà-$A-è‰ Üàþÿ!6má Àu äÌ BÇ;í>4o\” ýt¤=º°íî£2’‘12¤^ÄÈ0bŸÜLŸÞà+˜éºIüÉ*Zm—Ó–øs ­‡ :¿‹=¥†ìG+}Ï” ÊVß3dÏÓ;oõ/XŠ>\b̼ðÃEõ¨b‘,Â(Ân*GJÇNLC’C=tmP„ZÌ¢IžÀ‘´¦›<â˜âPÇÊ .Á ðã h="Ð^+äæÅˆà×¢ŽH4®0ØÒHbÁ­ƒj$0Â#\èÉ &!\¶bÎ*D­A!lQbó¯м¼‡—t–€¤Ìu¨ÔuæëÉú2¿H‰ŽÅº0ÿ¥{à‡V‚it!&ÐR“pB ÂôÁ¦ 5eá€âAd¡˜O÷Bw@ܪwâ†ÚN*S8¬Cþ®mŒ+Â:èzDr¸c,?©uÐc*£ÒLíŠ-år~ò’Œ`*5‡J8‚Ylèb¥LÇ=7c±‡=ÑK†ôí<W Ô`WŒ&õÁnÁ@`Ó‹šL @ìIf³üM+~¶y Ô®@ ôa,áÖJé p%&/}† ­ *®"¥°]„™#¢Ï2î+Gq)‚Y^Â#îclÄÀá…ÓAÊ!Rx89”É¡“o̵èm¹/}žÍr„°“2îSÐÑjlpÄ·f>§•<¶>‡æ>i¨“Ø-£7Ràe? UB⊩í¤â-Ü*E1Dε{‡‹ìEš“c÷¸Y¬YÒ)“§2ŒÿKଠùôAž´Ò^ôv Pè-œB‘¾]íe†i³lÒoG’­îdD?Ú‚+Ò`1HÈÓÀÔH@F@òÜeçdÂ>È.LÂÝØåÀABÈáÐÁìa“Ó¡FYR8â÷<í–‹ÈÏî,. –DÒÀ"ætñRuÄø Ò/Ë&Z…tˆ³·z¹·WÙ3hø‹WWWt—Êœ¸¨ó¬vøÃI|X{-ÚŸ Ëqš+ø¾šHý-84‚Ñ&yrn4,ZôaNÕÄ®®á‘ÜP'!Uš6Eå`éè)¬þ,ê$éîZlÔŽÄÀ /ÃFF±Oa -ædm0 :æ´&1*ÚÜ-BäáHú D»¤Sú¤Ûᤠ¯2Zš1f"Amô› 8°0ä¢ë"N!€NýM†Œûº˜øqùJ³Ê&»œZ–ÿ—dÊ©ÃËëöë>27Sn(Åx¬Än\sX‰±ªãZ74ÃöèvëHÀ8Ht#šë¾ŒÒw#‡«ç’n&")ÁÜ«¯Ò¹ÔÄËg+¯Ü¹ ¨9çF*sÕqÊ3"Ø Á´Ag±TZ 7V—¡ªËj¸|[)©''=€õ;‘™}3³ÒÌFê1!P §H³V^¤7I³œ9øÂ‚D˜§¸´aÔ̬gò„˜Ï•Û®4CÜ‹"Dɻ؃8Ce:Q"„‡™s~™©EI{#÷•ª×dÙ-ÇÙí¸ýœ?ÃòӰǤÈF%vár_j˜zía”¤þèw§æ×Þ0]¢~•@@s=©<#NÿDCÕ‰¦*EúLZ.ázj´ŒÕ£Ô¤Bêo“Ø¢®WÅFv±‚šº”¨³è½ð‹€Ò×qo†¯´Tº?MI'*u¾×WyõÇ[™ t,°¸2ž¹ž“Œ‘JB€Ò®Év¡¨Ô 'gìá‘å€54 è-Ê¡%-¬`.ÒBÆB“e„ˆyHZû||‘¸…˜V³ü±üçcMVdë}߇lp|ü¯d×lj³H'ÙGË4ˆÙŒgf\ÖZŠù«[„I‡à(°Â02bIÍnÁŒª9Ew/?! •`œ&Øo ÔžçŽrW¬µÁ,TDÏ ±¼ˆ`¹Â‚Ý’Tº—¾‡ª\á—„yHÊF‡×ÿKc‹UÙ‘7—÷œrá¹}Ô°˜8Éò³©÷=×gd¯Þ<ò¹iC‡ÂQ—Rr¼<-y„t ‰÷„þŠÚƒ°ÂwÔæÎè¸CPFZ„‹ìƒ!" V_µÊñ1+éíýÏ }]uÙ—œá/ÿèý¶{5ÆÁ÷²2–ǧt¢r|©¡U©ü2ƒ¼1†Ì'«Í­ŒJß•NêyØôïNÍyÓ¤_º`<‘¬×…¨˜K öùû§ïŸ@‚ÿü ܇P¡B„ \øpbBŠÄX°bC†yñ¢Æ(ARŒHaG•(3®ôH“ã?—7_:Ì(s ɘ6 BôYR¨Îˆ!?ÿž\¨Íšµ]Ö’X“$«L’HƒšÌš’¨Vœ/µ‰Õ·ÍZÙ$dõi#»v›¶}Ú¶éÚfÉ–6žG5æÜ»±«Í¡`÷¦ü¨´'^Â:yF<8‘hÒy{õh´¨R‘€+[|ù2Ѽ}[®‰s¦Ê¡¡·n]ºuÌ—†E7îYÖ–5mI´E’Ôèâ]’Öv[Ëhd_Y’ÔHr$ ®@Y޶qÆ ›$ìl¯‰k­ \¶àÝj›bå©¥K”6¬,Ú£h×±.Mʾ4}ƒˆq:lÉÿ²}™8©÷“l– ¨ZuÓ`c§±Çƒ¤]Z‚žé‡ÙkæŸ@;™Öš>ûD²[$Ž qˆÿV-d”6¶ dK,7!‰ n(ᆠŽÔ(‰ÿÈ¢„ÎwZz¾©µ>fEå[i½Õ–¶\A–·t˜ÞLuf¡‚6X’_=Ó‚{ E Pfy!F,(æ`b®F]™&‘‰¡÷]Ée`+eXe[¶Éæ|~.h‹,²X"‹-¶Pe•Bj½e-9E‚ßáÆ¦&H2£§ú,§„t˜ ê%epÅuwh9 בâ]bÇbÝb‡kN6¤‡°eFgö—˜u†ñ7™Gåw'|ŽÙ”•j~6› p>K!±¦GäŸ"Kga¦½™¡KâEoöI‰?þÄq?Žøã)¢ÿÍyêÈ5TÝ"IZE6R\F&é][kud\–ìb‰%Gª«´VVQW…9nÄÏö'jÿM› L˜ÖÞ³‚‰¥Ä».[Óµ‹m ֧ƒÞòùY±¾‚å¤[eI‰U5¬Q#îcæM7í”PÒsf82aºu’M%±d[d}w°sk9ç 8ç×Ç[Yj˜kXhbn¨Ã!cé,¡©¡]gŸÛúÇ Ú3óÝldzq5§EÛÙÃ]$UAü¥Kƒ½¼²h}3(Ö«¬rÁº¬µ‹.s²<6žáÎÝSß#ßLZœÄN~_jÉvæ±…Ðæêëëzú1_h¯ì+Øÿ'+g…1Ë­kÙ d æ=£KázÎzÈSîSªªj£Õo>ž”—ÈPe›÷i|˜|cŸì°»f³©zóîYÝc‡ÞïéªÝ2¿7CÌïhºÄÚÖ¥“(‹zÚÛÞ„îÌ(BÈ[°ã3%D ûHƒ¾Y”¦zËÊ™‘·¨¼ªIZ³B”lq(Áìt/äV³Òä¬ÚY‰vd_áöø¨mÔÂ!ùr5½¯J„çξv<üÅ&Zþòa¶öçæ5ÅQ9Y ‹b‰Z0¤·(ÔàÕ(Gÿ°ÆÌç5¸±`ÚéN“¼w KLAQ²Ä©@æ+ÍÐ)ÿNÓÝÅʯK„)â+T¿@¢/M„Îü˜ù¸íO샞©Ê¶Ä´¡Ìï1P¤¨¶¢« Û ¥‰ƒAftƒŒ>U/G(á7þûÝt.·ªªi­{G‚‹µq ]ЮuÖ«ÿÔ5ÛÅd4Ù±Ìןø¹Ž™¾C¦Ë¼õQ¾vÇÜ‹îöÈD/õ L¹ÄÕ?´ç¤+þ,‹‰D,Øå.‡¸anðÔŽ¶áæ Ç›"Ó%%ÔU•¥,MZ~©µ…j‹ $ýöD²ÿ„R¦»h2gÉ’!Ðl4`›@ÃIpz+’FôæËšMúÑ£!%hô"—¦0Î*#ÿ1“6ÚЛëˆS(Kcšò§¾ЧjþpÀ˜$–Kèâ( *d¢Úø¯&DKMè¢] ¶‘ ]äAu AªP‡,Ѐ Úx0(° ,è¢ û%›µr±½õg¢àw+)]³.’U¦ØŽMûéug«(†Ò4»ê¤ê Si¤¾ªX¨Ä úpá¨r¨ÀM¥”䊈+Ò”šBv’Ï-ìøÔ]Ø.U/U÷R cÚW´®B*a`*|£ U˜ªIj°NMTÂU AòP‡±rMMx9¬aí`lÉåC¨…q&RÙùMHÌ4º©[ËT®ùÎÔ´¥u¢î“òbÌF(’NϺ4žamv»7²ÒIÄqÌ¿sÿ6nêÈÅ@"Ñ%üC Žƒ-µ±)GèQ!—ŦÜà#€þš94²xC2î …5?˜..¡:jv!rPÓƒ|æ[ô&–oƒ;B’ Zƒ§ÅrHJÀb„ÛB:yÃC$1n±(“ai<•i” 1-b$Ð&g úp(oÁ8È€‡‚€– 0² eñÿ¶ð¶0 ¡/Á2Q @S iwA="¶Ð$° ±`0 ¶€$Œâ¶ñ±ÐJ/"“â‚ê1$HÜô:uÕ?0|v@õQÉ¥o]u_/to…Wܵ$-q~0ÅXþÐc‡Q> wl¸a[ Õ2PY-t-" ·@Lÿàvú0Ö np ¶p N° Íñ$@AÑÿ€’ð{­”‘Cû€€y‘pHp $0)úPš¡ D *  o°#)·‡¶0 þ`‡û ÿ ‡,r²€ûòmÐÿ€„Öµ¸ H€¶ €»qÿi`y’@$M48ДH’ÐÖà‚qvûV-³i!dIv…;—6xØÔ7wõ|‡Å@2wEBf4S:Õ…;’GDQ3JÅ5í+*äTw°r¸­È{¨|h “ ×ð‡Bñ "‘e H`rL–‰¬g"µ°€ÀøEÐ(Qq’pHƒ6Z›—å·‡NðŠ{( ‘'‚á±(xããó$Òé‚ùy•(€3h U¡DcJI°ŒmÐi@I` IÐh‹m° .HtØXVý#vC $VàÈ2ŠvQOˆ}º§CãØR± ¦&5»ÑS "‚çÿWyˆ²(×'@ÉË# ¤g\BAXÓÇè)'ÔNs_øµéúR%|¨— ¥d U‚;˜”âEMq"RJÿàEú Ú± È¡Rqþ "¤IX­ôÖ€¡×0[|›·F—@)’0 o±Š;‘™£9š²à"’0‹™ –Fg“‚Ç(¶ÁœÚð‘“Â¥ø•ÇøR`8,–LpÅŒ6§b,vC¨\ƒ>!âÑ3ï4(±/Û QU+·wµæÌi “0FJÀzçžf5×g±NêeskˆzÞä¿ò-†TIQt‚A¡êÑHK£ÿ¬ˆèÔ—SçoŽ„1¥R'H™6¢k¥u†ô„àöÆsÝ8Ý™?1Sº„7²á$dv8•žo1q Q °f3²)j TÑq q ÿ©q%@ˆmp %€…Í5FÒ©ë+ÉÆl sz4ŸÇ8È8&Ç8úÀSÚà âÒ`0§Úðzlç°ƒŽ( ®Ç8±àˆÃ¸™±—FD3ŽHháˆT#iðyyÚL°6Œˆ|a >{e#òBûfQZ©bdy¡ŒV:{‚R¦S=Qç„-–b¢5UJž¢€Y“m  k÷7$÷ijr¬'Fàÿ;’k’`#gHÒlql“*Å&S`d¡ w6éqˆi •ÿ€Ú0•"YJàšFMP.Èm0Œ‹X‰|·Nÿ ¸ñ$P±ÐS9SÙ®öŠMi)>CÉ"ú°(àAÿ:)½q.dÑ·A{ÖP x(€dé•N÷,”&ªîƒHqåQRzT8To³,æóPšs ·^ÇA›Ê@@*c8~I“³iÄ(AeX>+IÈRSê‰TéµPN2¶0j1o:µ( Ñ–â‚'—°áº4Ep…J%@VA-r$0ƒ4X6™‰‰XЉ¹( ÿE™¡ØH‰»¨—ë„„Ùj¯²Ð‰°”ÿZÿ háµ´g c[ƒ À™UéFh1ÛQ^ƒ|7VžX—2(N%æWðcžyE8Ò“ªâpXô4M[ó)3©&Ê2ºÇbqÛTS0k8˜c’oH#¡áT<á³n‚X¡B8[l¢,;tAw~?K;« 7÷]iʹóIãUY™K©3P!²ÆãÉ9Ãxœ$7¥&²à ÏùøYy9âw.çqúÐO¶ q~'id"B[®kÁÀd­ú`ÿwPX˜a 3‰‡©W òHû"™Ì,T¼|ÐåŽW?€ÍÔµR˜„?iÃbÜ,3U÷±Ùk>ª4)Bû,o4ôj ꛯ9†¾9ÑAßR18ë Ûæ@úžËªÆèlS°¹ñcÁï¶!QBÝô0:ƒb­%Ø$426×`«-µ)ÝkM»Õ¦”Í6Ý®Tïmêh¥Ë\óª²,s²’J6QûòK ·;p¼ñö³¦‰ï~£.½>Ûî5(Ý´,Ð9µû¨Íî>t0Ú°„m5ìíÒPø®¡r¾%”t»ÉR³i»ü&¤”NÙ$pË*$QRNé,T;V µÍ4¿¬%¶NWåÒJ/iõ•;0åRKAÎÿ–H4ºí4Ü\547E•37U½½;%úsÌïv±â[¶±äŽQ“M–[¸³¥R e™c5mˆ®YüAÂ"¨Ì­‘ùLU+KA", Y´IcÂGUkD°Ã(ÕJ:õ¢-1 Q#­]AŸŒ6YÞxc½–P”ä8\#Øg£lîª&yD°•sQØ*”TcݼÙÍm´J8'¼s<}l‘„¸»’p?6SöZií¹+›M Ž:<õ4¯k¬¥°dK,¹ÅY»¦27Èš/龜xßIôIé¹·Y{5"ô'‰$¶A‚²¯8z(œÚ-[¢²FÚˆE’6RHÿ¡®a[’°¦‘Ç„z¨ ¢ ²¬a7­‘d‘Ä%²&‘ääà(/aŸD›Yæ²FÁÖ¶æI™+iA·¹Æš7nÙg‰7vÿg–INÐç‘G²¼&îIfyDŸI`öþ‘kf 9û#jLþš‰%'µ’@P×G=U8ʳ‡55ØkÑí¸+kz«Žp"!™Ë¬F9=¹Œ$láˆ}¬Î% ÄÉÑ1«žAj7¬Éy‚“x <ÔéÓ.´1;ˆp 6óŠ„G½TðmÜ n@# [´ °Œz½³… öCÌ0uJøÆ>ä0 m8a4Žzø”p‚<â jøÇ q mŒ7$[ƒ-nñ†5ÀnK˜„ ¶±†nc†µú‡,*ó¬Í,'JA£–® 65-ŠW[ÂØ¢pyÁéŒI<¨cÖeBt4üt'Ú0‚ üa #HB IPƒÔ ˜„ÀÀºŸÐNU1ù2 &§§#‡riCWf°$a¯8aúàcSg‰Iàe ºPëœ`K°øC#€S`KÎÒmLÑöHA$H§˜$´A7_±ÿ¸FDDIˆ…" $asM!A ¢Ê !EˆáØ#è©'¸dŸ¶¨á]X—:Ÿ`;IûˆVèÜI –8å\þ1ê&{“I0AÚLàS7LS%h  ¨°#ÉXF2š/ƒÓ„¬ gO§´°ɦFEÚŽtT5aÚÆB+³NI*º9ZéC¯g"QVTE¦ÕæDù‡5Ô©}?¬ñkâz+mç\#Ñm>«ÿ²ÏR¨;£…QU¨´ùƒH’m¡¬D(YÃƂ뵨¶°I•wcÂåÐ\5¦^§L9yQx"‹\´¯‰Û¨Œn±¦º|'‚–:ÏH…1}§!¥¬l·*ë5ŽI‹elR«.‹uÁí4…RåÌ~¶VÒt˜Â¹”ÐFƒKƺÇÖp‡»£Þ[ÐÚìX¬d‰¨õ*·P;ÿb¹K[êW¯¤€YiãÿOÊb¯´ÊG×QV›Ù-a)°óH¶!|²ì˜v!…Kèbv¸„†+5žQ’ÂFº„W©D‚Ž4ì+h܉™L˜0ÊWqJͲJƒ–kÅHÞ*s’-ÿµ¦RUWÄŽB¨™ÉBG{¬?ÈÖ7XÏJªaäÊ6”²;³IP‚Ù‡#ú(›R¯þhY¥hù¸É¦ÛK&¥]'À®~°>rɱ+ÙOPì•C(Û'šg\¶„>î`µ]k‹>æà9\C ´sƒI&a‹zæ6o½%,TÓ†oî`M@Ì@³„-+!!Œ>#ïÉ%£m@H°¹¨´d€Ø&wË §4üMš>$1kàNÚð²†Þ9š±ð&iІ,¶Ý»ß$iInV78"ÍGUê,¨Wé_eO©“xƒ>žóJÛ‚|“|Ã>4ž}TTÿ–hØ”†Bðæ Ïm¶yÃ{“ØÃ[Ê eTYDNÓÀ~Fbæä–~®ŽÓ –*ÿÆ<ºÐÇ Ž|[—W+T óß¼T“êxâf$ ê¤ ˆ!HGdA} À2GtbÃZb¥£4Ås©¢DeñÄŽl± %ø¢è×Ï}Äb*]™á>èé¼ôqŒá¯'%èic’xÂ>öù3j|Ÿþ˜C»\0€l û8,žàHœà b2Yj’z|å…l{ \BWïCÊ,-®M­T›Ò:c]Î’TõÛ% µYâgÍšLÁlû>,77PÉ”±‰x°º™7Gÿ»‹,ìŸÛ[,Ð J˜V“ñðòX°bÓ†;(§;‚庙TR€y‚µq‚¹ƒ7p'¸…|ÚÀå" p„Ãp„H€¢†hƒm¢Ü"‚8 "°%b%›‚4H¡HI@ 7#Žš‰|ù»ˆŠÖù4˜¥Ð%⑼™ák£»³…}’„»Ó”K59Ú‘ƒ¤ÙÂ7*¯˜ }˜¡B{ƒà G¢*•»†'XžÕ°…ÈñX‚G…%À*Àp9‚¨ÃæR?Â¥à±îËŸ_Ù€©”B?¶rðÐ{¸“zQ®½ŠüR–ÞRð)#(,%P5p#ˆÿ8GQý3m(Cp„ÿsœÀ’Ô¨Žð À< 'bëýê›á5Ò*/ù‰-Çš « ²’Æá`­œÑ>³R‹DÁ bI€øáúY  ! ýÚŸR‘VºÚð¯€D‘“Ò8›#™Ó­W2´ªš¡QÄí«– ‹``C¨+-Ì€[ð°ˆ+kK‚7RŸZ'TL%°(mPþ*‚|¿óZ•ì_â ÈÂ2?1H#­;›yì´¡±Æ`\œ;³…£‘²Á¨ ^™Gk 0@Ó1C˜xÓ™ZrHƒ²ïÉRaµf¤ŠIÔp±é>¢|+'ûÉXJÿD—dŽép:†X²Á؆Hx±´P[8ü¢$Yp´ŒK¥&’…R´ ›H7°1é/Ášý‘<¹Ec]à2]°…e«Œnüˆ¸ÓDÉTÒ!ljf˜:T0ÊNá!O+«ÜŠXK1¹š1;ÓI7i±ñ ? j+4éÉ^\J ¢•Íú³c«¨94X{«u\ÊñRÍXÒ `#¤ù<}¨‚`D%ÔI¸‹²` F{#qÄ>aˆoÂ,d™¸K²q›ó‡µq—ÑÀGÀ§¸‰¹khIˆé»Vø‡f؇Vhh{ø‡h†D¨ <$(Á}€3Ω¢XˆÿG ˆÚ>qÔ¾ñÃ3¶âÏñúÈxTGy I #?Ô$LÊ?XÃF´Ì CDkMò #Ó-ä £ˆÊ3Û•^«ZP£¼z,Àaû C–ЇriÇÁPØa¡èÔ>š!˜š *¤íhih…X˜Bø‡VøŸDø‡ThF› $z ¥ˆ†aÕ€"HÊ` ÑSƯ£S-ÍI%óÏÍ ?þ$²³ŠÐ‹þ ²£¤ÈH{Ç–t¬×À m±úų†È GB\•VÉ ™LÓïènº2ެe ›jщ[0£BʶRYà©»˜ƒ ´t‚å:(Bhÿò„DT·XDàh¨„9"$à(HØ ¸è'´jœ%à”25 ÑÆ:/XŠÇmT5¡;«¤ûº!ëUDÜOºœÙ°^#LÒ”GaúŸñPâPM‰Ô2R¸Û‡Üi˜äQ%Åê-kpk8Å’²!ðø%Ê:NžsÄ߀×cEG¹0Rs”XÆ/X«‰‚mŽM„M”î¨ WA\UÄ«û™bÅÒ3»É_‘Ì3}×6 ˜i]Êšt×ÅÒhý0ã>ê5E¡À¬¸|¯ÐÒ ¶°Ä©Ø#0€áQvmÅÁ70€VT¦˜&†¼ÎkSX‰E,ÿN‚¡¹Äš^ê%¶R«ƒmÇØÚ ª]Óî09o¼åµzµCl͉Äi=Û˜,Ê -–)Ñ´ÍÔÌ ÍŸÈtÊEµ’¥Ø¿W¼Gá˜Òñ &Hû°óP‚p#%ІÁµž-µd§ˆ[ÈS =ºõ4Á1Ù ‹E-›]°…K°— Æ^£ #¤íÙì3 i¸Ž$P#ˆÙ(+ëâ®õµ0…ÐTëÒ›ŒPbYʉMM^ÕØ Õ¬ÄLÙ»U:Ì”P©ÅI1Ó1`…µ]Ñ _’MX, áð‡eÚ—82q{ *Y'Br„pÝ2G»—‘ÖïˆÊ­™ËbûÿŽ)°„0Ó…;`²#Ùƒ!½pƒ7¨6'X›lCšÝÉ6mØ;*ÏóÕ@…q†h`ÏÒPˆ0‡pUbƒ„©ˆ=[޽É\aíŸa¤I=D‰0¢sÓ,½5D¯µJÙӌɣG_ËF´má9­ØË1 =‘¸Ö‹ab$5} ƒXp#ÁØEÈäŽöú[²KŽÔ†]Р]ˆ€)ÈYµ¹Q¢!I¸ÆÝ…o£ŠýÑù@„"=Ò$m†!ˆpk¨”DŠ€ÂOýX5vœ°¢“Ðí«IWËÛþüRlÛ’DV$NLeáïKÖ£µáèáJa1Þ°öÿ&<õF­M1%KX“MPæÍ1qº¸ä–ùÕ0 ;¸]±…%°®7’#ØÂÜ`ƒd£GèÔgÑPÕò¼mHœPOT%ßš`‰Ú¤Ï„ù ý¨#ø,1}=aþ©a¦A^ÖR3ÓTK¯çuµ‘T£s,käþ¹XÓ$ç†L “W¬¹VÂ+–Œc2{N£¥M¦–NNÑNÏí“æ0VÒÈIaiâ@Ø¡ô´‡Gy_ñåCˆQ.Í5Ê4Y]£Lõæ€uMœ4/žg¥DÓŒÖ TÞýÕ”fVÆÛÚTÚðx¯ûøK€Ó†©Ð†‡¤-™£¬¸ˆœ½ÿ …c¦€–Z³«+o"ˆMèñ!¯¡d¤ðˆAES^“š#™ýç‘eé…^éõÅœ¥¬¥P’>Í“–gÎU‹miu^kâÅU¤dJÏ„ØkáÌ$DËè‰m¨YˆÿQ‚Ut„PGH\LA_7…d'}PÇVE6†k~…ZVfÑó j)°-Þp™Cþ‡ÛÝXî“Ö7=53­¥l:µÍkÖÝ•~µ·U^íêÙ/mçßvá¬åÉ«6ÞT£ÉÌt]G¾GÌèì&ð`ƒJˆ…opbMñÄ7j&‚|ÉU‚k@‰Æµ'P¬óEV±-#+hº¬²º_]ýÅÿdÑÐf/mKE~Eߺñ£Þr /–VŠ L6=Ó[·Ö¤;Íf#PŽb<ëí±~ð[]pX›íË_âPˆV–Ú ñB9x¿[pìAÁÒ†4jEiZ×½ÜU ±ÈY´â¹L0ZVNK¸;QÖ0)lQ5áÅdöU¶eYàfäC[Û¶Ø·­ÚÚFî¶Õm %MüùLéeä(?gvž•SN^KöÓýÌúdøz Ë9\³JXªx#¤ ¹µ)Gx?FÉ¥‹5°¢ÁЦ­²ñ€å¬°ZvÖù&ø Bîä~i˜ŒXÊd±­ H¾j8ýæ9[ÍœòñKaVPcò½ÿPcp¹ÝrZŠmHæ”D—ôñ«¿C2DÖ.Í.!Îð¶DNxŲ¡“’ÈÉ„–ž\Ä»†É^Lk“½5DŸòJ®aÛ5n^Y]å[2-ÍÿlÞ³æôp.Ñ^¿ïUÊÿŽFâ¼G3i»Ë°>¤›L€Æë”Ž nꥑ(»Íböؼ¬.ïÛte+ÖüÝ3áŽpQGЙNäÎç"gg]Vk_Öi)S/Ðg­åⳓÛω!!©”º×°†8À/ŽZ@7x¿f²5°6}˜&GèY™Qk¹&T_*N²ÅéÐ…)0c‘î÷tnÊ­ÎI­îSÌÿáûua½a¶}äFøªõù5­çýø8•â¥gal¯ð1IæÞ`óÙLŽ¿†JèˆÒ0‚u-‰€Ü†l×¼ÍÛ GŠñ ;\,63;Ƚ¬¿za L¦ÖëÐ6îCîòÓtÇ1¥t$éûÆØÕ ÎØþè•ôÒãmÍm÷R/î±½÷æ ÞpÕ À@«ð§A P,j׸†8š·÷©yŸúYÊ–ýð¦Ï §Þ°„}ªž ý¾öŒÎw |½­[aï÷Ä¿dZzk'dþ4ÐNkµÉrwé+u—£|‚ÞßUD õáóÐR Ëa¯Ê€ÿ ’·HZÅM•„ –#ù³!ù;kò⎖m×´Yk²O›¾m nÓ¶ÏÎ%[ÚîØqèoŸ¿÷ýÓ×ñãGŒ/^ ™ÑãÈ$UnüGRãK"QÒtÉÑcÌqr\y2eÉ’3uþKi’¨É› we*Ó'R¦Q›.µù“eUŸJyUy”+L‘^¥>ÚèP²Y[zÔ¦­aCk‘$5 KSR-m¶:Š„é²hI£¹Š]iUéE·öܺµ–$¡¾·‘:dù`Òœ†ÕöÄš³fU¯¢_båyØjR´‡3¶ ªVëϧC W­iÚ4Tµ¶‰æM6âΫÓÚÌÜùìî’5•mÿMœsN¾#”©Mm#;î¥9[vlߙò¾º°á>kÛ N¾lYÛ.KouÝÒwÖ0æØ?ïQ¶.S¼eÉ%–èRci«ùåÔ“äÝÇ–Qü5”_å·e… xZtàÑh ˜R9â…9‚È!~8JHån7 WÓ•c¶YZyäA¨B}ê% ]6Ñ©$²dù”,Zn6\syî´\->6d{oAd‡)ĦQûiÿàUVby”ÒVªRMv‰–‚¦2§_yûQ驚"z¨[DµJ­îZâX¬êlo¡ä)•U±ˆž\×Á´éN–èóM$Ö©†’(!‹#ná¸)á†,J¨®þÆ`Ÿ”ÔÄB™6—è3’ÚHQ%±š™çP –Ug˜Õ$XŽ8Û¯_.꟞Å(›°¸¦Ø ©§õÛ(‚©š*¬s)Bèjˆ)ùé–-…bwuûèS `‘(´Í¸¶˜`‹#*”àÆ5%ücMº²¸1®,>ëú¯¬oDÐzIé¥Hê2‘%Û¼º%¯$ëXæpg]}e”¸é1²üq q çÿDc¿-ážÌ-Úa¬á=Þn o\ë”u¯yµz Y³-sÕj#¶øãO$4)!‰5Fª† nhcDÊçj î¹/š ËnÔA“.T)eó*têÅrM¦œ[j(¥¨c;J{ëŸg­eÈbÇš1T ‡Ø±Ýtê~»¬[ªkp„Ðݹö¨Â u?Z‡_ÙÒHžö}Qß ý#–”¹k~ë5ÖÈzðJV½—hr‹.Iêr“?ùR6šh“[p×2=(B*Y’ñX·';áÊK;^Ü&¦šà™Íxª‰“ü†š`ly [œl%ªƒ‰oÅiÑè\„¶x8+Œzÿ’AÖyª1Ö°†-ÚPº§Qj>s˜ÚAna…TA;ú AH¨ Lhâ2A¢‚Kþ·LÔA:@ `d:â #±!ùÓ‡70¢ *´í'®4#«‚ÍèÁÙ èÎ'1jvóÝ¿H´7 ø†¼ûÜæÈº}ÄO± ê’½ä+(gdäóÞhÇ ÖhCûèE©†ÜÁw@ˆ‘0¢‹ÑË=mD,d YH„=©ëÓ;í· [,4@’ÐÉÕˆ"âÄÙÓÍJTëbQϲÄÂZ]9ÐÕœ78ÖHb#{ –\AbÁÅóªòˆ\|\2Xm$EÙHjÚ wíoÿ·#(Z &lŸ2g8ñGµ ®2ë™ uÊ¥Å527ÔËZqxCÛ^¤#£4ÒYã|ÎáZ-Ü´ »Ù!º°Â@<©‰;@yQ_êC¸™ùh$DØ.l‘„ô8­G±–H àm¨±GrØécºP¶ÖP¬E“¸lfN¸…ÓuI$&¸0‘…"#шWÿE¹a;;¢F pipõϬÑN‚¤!é±Ez¬em´'Ívj D0žÓ™"'cë6~­ Uüü,Qí#DJ" ëAäüM? Ï—H‰uCL"ÄGÝÖGp×sÅ´¹t:|ÿ‘ž­¡ðwµLtí²Ã.j…9hG“°Æ-ü‘®HB*pÃ-lq %l£È!^4âlôˆDr¸ì}„úܱhCD­ž·!–z-Úðs¿X>QÁ5œ` 7üCŽ˜D¡þ¡ŒÐì²DÌmR‹$D‚#R/J«­„4 Ú…[çâ’FH¢ ²@B ’І44Ú KH êÊ¢Õyxí­ÔôŠEZóÃx ä9 x*L‚c°”sˆÃóèzA=u¸žÈØ£!vÆ3Ÿohèt2t4càâ–h# DX¸ƒgß´ m˜ —ÐÆòX®!bOÿ&uK”o¶p‚Õ8B˜4ÝiùÜ €a/–´F«ù®ê6;D°Nʪåˆ$X‡(Ö‰ ˜? ®›@1ŸƒÊñEºøŸ?lŠÙ­Ì‹´µ´š-%°`G@mÃÑýC,Ø]$¸à¡Át¥Aà] ÒßiƒÏ0E¹1¿0Šæå èØÈ¢˜PÕν‘»%ë„S‚ä^cJœõ˜Gc@Šmœ-¬˜^„1œ¸q›6´ž6ÜCÃ1DŸ\ƒÌ”ÚØrœ»¨BäKBYÂF˜œ@ÈÁ^ $ÔÜ$¬Ø$ä“K8¡X BXÙ>D‚#Þ?´\ÄߋɅ$øC#ÿ(Ø>ðËŠ?X®eúɆ Èœ?ÄœõÝ‹]^ä°Ü$ÑÏY,D¢Ô…?œ-ÈÞaÛYG'¾Ø\È‚%ØøÕ“ˆ™Ý6ŒŸoÍ„%ÝMS}íÉ#õSMH :j¡}YSòpS´Y¬Ø\ tµ Ý;‰›»äÐt5Â3N6f㤠š[šî1ÍÝaã²µÁ5(Ÿ5M{ÜVvE½ü…Ù”ÈhíS_˜QF\Yq€Ä÷Ô#J<Еý×Á#°¸ X ÕcKü…ÈÆK $V€^—U.–Yè5h zJ•Ó0ÇÝ‹ í ‰éÙÆ#8’žÿÙXÆá„-MšZÆEd DTí!†yœ¥\‚.$Ôñ‘”ñ]ˆE²U‹Ï¡4‚>Š´u"6¥²©DS"DÓ ÎÏ!QåÏäÓÏâWÖZoÑÍ¡5üaw܉GðÝmR:…¬ Á"µ›¬JŒ)UÞ„–=ítVRáŽhè”EnS0vD¨¬… xœ2¡Mªä iÜc2¦ÂáÆŸ!a¡•XÆáÙM"fZ˜MºÕ&U†.tR½(É(ÇOÄ‚E¾Z«Ùã!Á[ÔB h‡c([ X 4†²%ݨEà^ì´Ï?(^´Á6D¢8ß[G°vÿ w,¡VÝ‚Ÿ¬Ú¾XUê ´Ùùäñ‘Åøb}ˆº|YšôWºÙQ®Õ‡l$—´–OyGâQÁå Üe"œÂu¦…9fì ¨DÌ^–@9˜J>XÆÙØ.¤ädúȨ½Ï¼T†%„ÕLÙìÊ'¼X«¥AÕÉ‚5ÁF<Ʋ  ° $HÀ¦αßÏa‰j¬Ÿ¥€ãeD«±ZQ€R’›FÄÓ?”\C6'F8Û‡ÍÓ(™?AnƒßýH$Ê>œ 6mÖf­.Rù ™ÖkA™ªÍ|!SÑŠÖ¬QîYƒ@ŸeÞ°ÿÝP„ª$Âa‚ê…„E¦ƒ5&fú§ê6&{¸‡›%DE‰ORšoСK$`‚ß68¨ÇjÇuØB%íƒÝs(Þt9 ü$xþƒÝ9†6$§ß!Ác”e«âª9ž>$äÅ‚#çÙiƒ#’*¬ÆB ÈÚsªª–TðݪAÞ]š—š¶çÍJ@ˆiÁ[x±li¤jõŠØÐÔ jÄ!KBkâXR¡4êƒM¨dê™$D á%gr áµAÜ+Ò­êà5Á¿ökÀâ+Áêk¿ÆjéŒN\½“>ÜBÕè…½œ‘Ã}blO%ÆS¢Äáð™]VG<åVˆeâ\ÿ8Äš]Bì‰i‡,t§GXYFøÛ,êÅfbGœì^ø–\Äb%ÚB,ØÇjÈ]„Œžì>0A”莺ÄÈ iQ}Ó–¡Yż—€ð¢:é“Yy̸šˆPœ„^ î™ÔÍEáä™D=…OøÔ£ÛÆ­ÜέÛê#‹h& a„ŠYÆÌÀ•¸ÒÉÛr„wyMá¢ëRyÅv¼F9mÃ0dùE` .MH?†×ã&Ç—y- J{È{æ¢PÁà»å—z‘™C6 ½ B˜ÝÕ“DL×-Øh#@@Eׇ]áˆùœ5ÄBкLÓ)™¶Åˆaö–>Ä¡èƒShÅÁݪÂUè†ÿQŠ&d¨>l¸éz\„D`D¢#ÖTë~‘ iàTmDš}Iàåžôb”˜Væ ˆSá"™XE&îa QY±‰€yNÇ€^¨¤¤¨¹ˆ^8ÎU©ºA@$("R-\Ò¿ö!L×u(àtiÝÀðÉïÏ$ €Ú MX\|’%XDèd(ïê8Ä:Ú‡ Ë ‡Ž}\ +ï¼ìð÷šò¾° ÏKñ1;1 çðê±·é° ˰ Ç°ËØ0O± ¿°_ñ7q #Ä ûðk17ñ» d„Ž+q_q«q£±òêšËtD³Ì+/_Äÿç°ùö1¿•ç1O1»15 ìàäà­@ 4­&AÐ* .¨Lâ%Að¬âÁà5p@ù–?è÷윃H›5^ï郃V(ïù›K\\è  Ír Ñ²áž-ãŠÌ²7Úr.˲/³0ã²0×ò0ï2-ûH á13/Û²2;ó3+M4O3-oCq Áé`3wã/k³7ß0s76éc♞⟉¢Á®:ßÐøµš$À‡‰ÓAÄàT®2ÛNi²DÆ%„iCqZCÔ9i<æ¾E¦£>¨C§äCêž!(DK4DïiÆõéJ(EÛ„}´MZôEÿStFÛ$F‹ôI³dJO´K·4Ê•ôF¿4°™´Gó©L÷©™Îê¹^à4Äb<¡dHœbÜVp¹RJà¼EPwÛ褣5`œ¬"d¾+2¦f*蟙>~ºÂmF4LÔiýÌ¡>F€>†-Ðsï ª9z&dâÙƒ\e"áŠù°Q¦ÆEÚÒÀ5\ÿç¡ê„Nh„ndNæ!QµaªfÆëa'Ú-Èu¢%dÞ5…UöU7ªVSv]Cæc—#^ëzüµ¢è†vg&Zj‹v€¶öM ècè`ƒÝr E3 Í63W³úÜ-¡Q3cÈ´\¬RtœM¨‚"’•mí[iÄ<ÿ%FëQ­50á«^˜pß9F4¨£^fHCfMGfA_õƒZ4ŸAXjKtx‹txŸôž"¨qçµDSõMƒ4wÇ4KÞ´9ÂdZæe›ã|Ï7ìöžÚw€SõŸ xìí÷y3xJΞƒ;ø 5ACµÃõ¼8ÜPÇ$AQÜè±#Q£ˆ7\ Q`¬ZAv’w\cu\ï2ŒÓ¶2+3ï-M,Ó¶7Ϊ^T@õ¸¹9‘¹‘9’¹:'9“'ù’79”G¹”O9•Wù‘ ”í­Hã$R³m/³ƒdÁ‰9îÙY“ðƒZ5í±¤q“4C?&z¿¹…æwƒæ›£ô}ÿS#­f#Ÿ÷¹Ÿÿy6î9 :¡º¡û¹ º¢z¢z£/:¤w ¢?ú£ó¹ 7ºúÌx¶È¦3;A §ï›ZŲ¨{ú¨·ÈŠõ9Ê öøÕ2¡}c83{³î!3c Ä7n³¬¿ÅM샯'įûú÷:!;{»±/»} {³û³{´;»²ó1'û´g{µ3{±Sûw»¶_„·;µ[{¹ƒ{°Û±¶;_»¸Gû±‹û·7»¯Ž±›û r›;·;;´'1´ÿƒB¬£HÞ](Ê‚,Ô‰%<Â<Ð’Xˆ=¼ÃËBÐ2<Ň"ÐbüÂ+¼Ä_¼Çs|Äm,ÿ¬b-XBЭ% ¼Â[Âʯ|(VB(¦¼,À|áìê)^¤L-°‰Á¼*Îï|Λ<‹½<ÐT%XÊË«¢Ðï<Ñ˼Ï7½Ì§üÈ£<Ö_}Ò³¼Î§ŒÍ{&Ø×õe"œ•?ö`›½ÆYyØ}eh•ã.$9ìù[«½-!€¦¤ØÃIª­k·xK6}?¶‹»x„ëýkc¡žÁÞŽ'þž5¾V/>‹“7g"÷gR~ž_¾¢ÞÙãKþæG> B¾è/¾çÓõK4€”ï¼cf§tÙ£~€§¾Á9ëùíËYíùv*ùá­~‘ï8Å7Âѱ3J^«³âtvÿ_’çïõا¶b÷}å—6xc&€3>wOþ¡:>g&wõW¿gƒžû}ç³ø[3þó[¾äk¾÷“7Uÿ ­+u¹6:æ¿yÔ©L‰6@ØjÓh—5mm´YÓeM–5‡!Ft(°‘A…mYkÓÆV£„.´–Q¢CYmbIb#©Q‡‘d}ÔØ‘æFŒ76Š$PV¤m#FФ±¢µXm„¶iHQàЄ#‰)Ò(VEm¶®^µ&IRÌŒI$¥i“¦‰¬$m$µ!‘D[’ŒGÊÔj .ÈŒÛ2Úµvm!È[µ^½†‘îDm/’,˜7qܼZ±Úº–±¯c }µV®ÙñdÿÈŸÿb5 tqãÍsVÍ7îH¼†#?i3ÉYGm’Èj’—òÅ…¿Ë’E îŸ@¦éš“ÀI¾¶l—îûâF¶Žƒ”÷öHgm%Q(kúo–)ˆ¸ÙºQ I -YkàûX´m‘ÐFB9‰Hmô.2ÜdAÂ’ðÀ+¡’hd-I@Ð/m")"’£Ù 9¬¶Š·4p"Ò,I‰Á.jÍ/‡: Æ%û (ÔD¬7Ë ÃL¡Á°b­°Öþʪ5][赋$ I­–I´»œ„Íš[äRl4¸ž´ë£Ÿ¨ÌȬH 3¯¶!YPÁ¦2‹ó2kÿ,YÑ=$,Zè¯$"ÙO–H˜l¢Aå”ó 6Š­²‘Hh„kN,$  Åèºú\­0­Y³6<Û›Òp „D9ÍH$lÁ-è†ëH¼$UË"[ˆ°fm†Ûô¢‚xD¬bâ.³ÆâO-m–‰$çl’RÛ«ÐŒì¤Ì¬¼‘1)gdR&õv/Q3w.)µtÝ9-ãŒÉpËtKrɕׯžŠQS$-7"I#²ÞŒŒ±Ì³¶3N°¬¶Kƒ„dÓº º„1 ‰0[Ì"A×#ÙtC­³-5&³¥$ŠØ®êƒO>[h˜@‹;Ý&Â5W”9¡íÿl)‰ÏJ‚ˆÚp Û(AB‡”ÒGmHDΠ˜$IIfÔ5¶(mQT…güì[s/ô¦AÙEwJ2ÃÖ,µ cëMGÇÌ6mNm/òì1sëžsº³åα1äR º°UÛ°\/lÃ/ÿ®Ôqo?“I¯ië]¼^×.ã°Ti$ѱ3}q‘,Fm—Ç;ò[ö‘ð¼y½JXÞ4·/Øû=w®Í_TýÖŒ«ìë'%)’ÜÐSø£q}œ^†' ¹º8}—^ÙÚÕ«ÊìÝ•\ho¤®z#1\Â÷w_×÷§¦y±§÷–Cøù—?þ©¯‘«,)p‰™Þÿv%À]ÿÍoj?©_\þG¿§í/™ 1ø“*°] ô `Þ§Äo[Ù ýÇ?úP~õK UØ?²° ì` =ÁÂo~» `ÿˆÀv†EtáeøÂ&1ƒL! (Äÿ/ry˜ù>'«… ^Ú LD>W¦§<5ê³Ò¢.×¢’8Ä3k|ˆhJR¥jYÄt´š¾æ´5^Ä0V#tH¡4‚%:q Y‰@F¢}l„#¹ÈC22’”D$ ubÉ>*’%ŽLd#ÉHCZ2”“ ä'C)ÉT&r‘©$d iÈW¾R”‘d¥#%9KV*r“ª„å ]É’BVÒÿ”œl„a +Èd‰éLB e“¨ŒC%qMf&s™Ðe †Ler’šBùd"A0‚e-› \æ7™ Íd2R™ÜT&Z”‰Nz:È„¦?)Îÿd“:i'=‰{ôšqH(6ë¹Ì‚>Ó Uf»t±«[àe?ÜE?:¿]ð£Ûx’6>z”+¤Û0i±4¡—N KDTˆ„ž´+]¼/>Ì KZÓ¢´]%Í(JuuÔ]h”©ÚxÒJ1º+ì P!? iAf:ÒÃHhªØÑ•IAJÒ¨¾”¬GªU—·+­>ͧ3e¡W¨Ó 5£;ý¡'Ä—ÞKª:ÿmkB>êÕŒbe¨4ì WqšTŽuyÔëYh¼’P¦œŸAâŠAÈF5HN}ßÇxJÄf”„N½ŸL-!BʞαàX-l1¬Z K¶¨Em¡3,×Öv·µ°DmeÛàŠc¶¨Dmo ×7¶Äým%Š;\Y—c²°DrcñÛIb¶ÄÝmk«k[à¶·ßrÑûÚâ&÷µ¸Å-sß ^õ*—¾Ú‰{… Þà¦7¹é]îr+Üßúv¿ú¥.l[{ ï·½¹M0~£+^æš÷µ´eðxñ[[ê–VÉÅî ßëZ·¸ÿåt\_àŽxÄÄ¥îr#ì^Kô¶½¿•ï †;\aè ø@‘;fox-1.6.49/doc/screenshots/iims1_small.png0000644000175000017500000004210411637250333015361 00000000000000‰PNG  IHDR¯r%2„ IDATxœìw˜]eµÿ?»Ÿ>gzKf&=“2 !F-z¹(( W½Š\½W½ŠØ»W¯þ,X( ŠÒ¤!J*é…R§÷Ówß¿?ÎÌ$“IÏLˆÈ÷yÎ3³÷Ùg¿ïÙgíw¯w­ïú¾ÂºïüÔûÄî™lTªú$~Y‘$ÇÀã|€‡ëx.àvíð<¦K›pq°u\ËÆM'˜çLæ¶'*Á c‚‚Ÿ\ð }EüæÑ±²üáìàòþº»ßO8ƒ—±ƒevÖCÚhéðˆ§=´wÚŒjÌHw:„Uö‘lÖ¤ÇÎ}iÊ+}L—·àv´á´5cÕîA ±Ûê_–ñ^ðdDÄ0 "n§ƒTk€—5jDþpsÁõÈÏõøÚ56º¼žQrGOGÇÕ¸Ôí`®ÄC³›)´S‡ýbåe ×TêGýò×L•„qÌ‹tÎÙ>nç·¸äbûªž .™$3J;v?>À!ð`³Gs»Ms§Gm;Ôu‚î€ €ãBG †äÚ”EÊ¢ƒó\QÜX^GÁ›îFÊ/ rççÁ6@Ū$™¢’¢l»®GYf1õÁKÀ‘Ì ˆQÚb"o4Ȥ[[Øæ–‚ØÕQAF0užþ÷4Í)?«·‹3ÿuW”ýk÷°E,á[WKüm•ÌÙá–6E¸0ÜÎùÓS·qƒFóÛ·$>5>ôذÅàüsЉîè`ê%Q&rÒÙΈ’ ‹› Wxj_Ÿ¯1®Î.ƒQ#ºÜs³Å–·EªÏ²iî”xv‘̽×Yì{W&ÇßAEU«wÙH–…î‹0Dk& øI¸;:]r\ƒ¸¦:Є,ÀŠlkmeÛÞ! Їÿ¡Þ+ïuŽ OPhIØ4p%p5Ðé~˜K8®LÆtÙP+³µI"eÈd7•À®ÛýGÈ{à7´}ù&¼–Ý0h4(H~d?H ´m ÕÑFT‚;ÏÄ’g^€š«Að™Qô·‰ ˆ ªóŒŠÀšzö57鬋q;jÙ™Pð<¶±œ,Í‹[dÚ·wÐpY ¹)ƒ {5Ây6ÞTÆý5"9²‡_É Z S#¨Š%YӔǢNÐ'!Ø«¶:Ć•1·²ag=ÈÕ”û›Iɯ¾Úν7)¬^ÒÉð’ ±V™…ñ2><¥–õo%=:þ%ܶ}$w¯Å‹5áä[ÙȘìG`Ò^ê<Ð4Ð$Ŭ ìq`6{†^ Ź%Mä4Õózl^ðƒ‘t Q]ìpaN=Ž“ Þšˆ˜Ž€mZÄý…¼Û¦¶âHž‡‡ˆE6&¹µn”_x–ê–¹ˆ¢ˆè9ˆŽgš¬,¾‘;̆]o#P³Û£ÔYYIQAÊÆz]À;Ã|½Sçˆa¿ð>ú*@6,ëy]qÝ®}‚—HÀvÁ“¡é]d%âñ‡û%®=Àî:Úz/ºý>Àqá¹2ÿ\¹{G,Ãõ¤l㟆¡S\TˆÔÞoõÆÓÞ¾í8lnmáÍ}»¹rÈ0Fö>œ04 ýâi´µ·€ ¾×½9!dÒIܳÝc¼†aP6¨ ÛL¿';tvZ€ˆ ¨ïî;mí¶¦S<´n5Ùº‰v#À•/LžÆícjkÚiëË #Ä%lÛ¡¤$Çþç‰a[F Q”éö•äCÇYIVEå´wìD`Z&+W,gÔÈa§µÝæTŠ?nx›Ç6¯'föþÑ–É7–-äû+—òqǸ‰§µo' Iö!Šg`å d2iÖ­]CEEùA{ݾÆ+Š2–yøÌØ™‚ÎŽöîÝÚŒ·!™ä×kWòÄÖdìó²²AŒYÍÒe‹Q™d2‰áØ|wùbÊC.®zZúw*EéŒÿ½[Z¨oh<Äx½nÃè‹}±NÛ´ž?oYOÂʦž£Ñ\.¾h&\x1•UCˆ'\}å5lß±•çþñ4†Î¿½ü,7¨æë3.¢ |/¿Æûò™Lî8ÝH[& öîfÁþ½¬i®gk[nת®Çu×ÝÈij&!K«V­¤±©)S¦3¾f<ªªqÞŒ‹±‡×ç¿JGG;OíØÊÜ=;ùpu ÷N8›²pä=þ†ï/ ˆñ¾ðÒ|Òû¨Çäæh\qùEýßøI ¦gøÕš•üyëF:Þ„¡êêqÜú¡Û©©™€çy¼³u3/¾ø<™Tб55L™2hN^Ïñª¢rý ·HÄY´pÍÍ ünÃÛ<¼q-ç•fzÙ`.\EMqÉéþšНãK¼¹à)n½å³|ö3÷³k×{ü'Œ©–¸ð‚¯RRÜÿ‘˜q2ºÍ† صlbŠLŽm“³/>œõ¶¼çÆkØ6oXÃoׯ¦9s Ê"Š"SÎÆÕ³¯eÌØñX¦ÉÂoïìdܸþôØ_xáùçX³~ ªz ä¤È2Š¢R5d•CØ·oÖ®eÇÎwXP»—µ{ùþÊ%L/Ì]c'2kؤ3ðs‚0 “ŠÊ)\=û| ‹²£áº ï0fÌ•´·}Ž5k+¸êÊ/ô{»ýn¼_øÙï±%ÆŒa’,³oáB*F"8¦šê.CÎÄýÝì csKÿµ`k[{ö‰¢ÈÔ)3¸õ¶Û©¨¨$“ÉðÊœéèhçöÛï`ÊÔéˆZ4’ @8éÉtéºôœ¯ªj(UUCéèhgõªålÚ¸ÇqXZ¿Ÿ¥õûÿv!_›~!TT¶ïÞßPÇÖ9o| õÉ,5¶´$Ÿ¶“¹s¡²r`Ú•û;»(ŠO„žà¢Î[0¯¸‹ŸÀ1®ã¶ßÖsÌï÷û~nõøáz.Þ´Žo,[„ng]Q™:uºívWT’ɤy}Þ«´·µñ‘ÞɤI“{>ÇY²x¯ÏŸÇÈQÕ}ΟÉdˆÛgnn—]~S¦Ì`íšUlÞ´t&ÍÆön{éi.­Ê·Ï»˜ÊhßϞɰ,‹;~öó×§ø„&òw#‘’F.ç]¦é ‹ðïßÅUÐv¿¼ 8=ÌßöJ^³£øß‘ëxö¹§€F}ôîþnò¸ÑšÉðÙù/³`ßîž}ãÇMäîOÜCEe¦iòÚ+sظqßûþ9jTÏqÖ¯géâ…(ªB{[;ÕÕcpܾYQ•#ÇÉ#99\xñ¥L?ï¶lÞÄê•ËéèlgÞ¾],|r/÷M:—ÏLš‚&ÿs‚2×öÖCÚÿ1çÚbîøÛ‹L¼ñzšÎºŽ¼CS*Åoz”OÝ{W¿¶ÝïWhT8I}j­<ö½i >œåË—àóU±ùrÔ·Wã†ýÝôQ±?™ä“óæ°¾a?²,sË-·sÃ7ãº.ÏÿãY6¬[Guõ8¢Ñ\† Šëº,\ð›6m¤¦fÕcÇbdtæÎ}™‘£FSPX|bð< Ã$•Na¤t"Á\.ºðrjëö±}Ç;Äbíüxõ2æïÛÃO/ºœÑ…p%ú–eq÷=_ç|cåeõïÄíz„f’ºµ‹¨û*ŠDÉÍÍŰúŸ/ÓïÆë¸Eä-NÈlá¹ç–­äD6pÇw°rÕJÒ‰ãÆ±iíÛýÝôñz},[Ìž¦Z¢9¹|éË0dÈžþû_Y±|ÅÅ¥D£¹lÞ¼ž¢âþÃïÈ‰ä€ õ Ì›7ýûwóýïÿ”§Ÿ}‘üà;O”V)h> ͧAxž‡eš—•0¾fµû÷³yó:Ö6Ô1ë™Çùظ‰|iÊùgì(¬( 3¦ij>›ÎŽó©Ý§®ÞBp\·õE6àð! ö^?™oãËýÞ~¿_•oŸÆ¥—\JQq éTšËÞâÙºZ\Ó@>¨ªÂ0 |ŠÝÈ Š'ÇÌó¼lx÷änBÍ$V¿½‚«ž{’û&œÍÝ&Ÿq£°i¶ãy&`61Óæ¡Ï^O]ÝvŠ ¯ÁØ¿²²Òi{@®DIq>ðß=ÛK–®àÅ9ó6´Š«?r#–m£eRÓ_øå–MˆÀðP°'²ÍÅó²a¬p8ÍçÇï÷ÑÑ#7¿Ïs(-)åúëoÂ0 Þ˜÷×®% ¢É %±V4ÇdxÀg7M“H0;º8މt”r!Û´I§Ó˜¦‰ë¸8Ž“}Ù®{hìGà쳦ÇùÃæ·yjû;Ü5~"®z†”$ù|…¤R€ŒëtP_߉$¯GV"¬ßðš:Œ‹/œFIÉ$)NGx<ðS\”O0২¨EøÑcG,ÆòÖ6&äå⺆“¥å‡CY#ÓuTº“1cư~ÃzÂáãÆã²K¯àÝ];yæoO"‰"¢( à&Ôs†"H-M=ûĮ㎲*V˜¦‰©›èºŽçºØÞ‘S‘H„éÓ.¦©©ž—/aUC-?¿dV¯Ñÿ½Â¿ßso-[Iss+åe˶¬CNS—leæ%ãñ<—EKV0iÒ„~oûä­ÈH0Õv.žq6‡>%×/y•w2!.š2™âˆÆ¤³j˜tV `²nÕN ¤¼JJr|§Öû£@wl¦1!7—Œmc»YãÍËϦrËËñéÏ|Ž}ì#|ô£w1aÂ$^›û2üþ·ƒA”#<ž‡ @ÓAÆ{0úŽž}!š¦¡iáœ.ÐËÎÞ Ý@×uLÝÄ0zÓ.‹‹Ë>|ÏlYO@–ùÑÅW×µè7xk–/gè„sxgíZj¦N! ÁôiçörýuWŸ¶îœ´ñ®zýiüÕë”þáG¼ð賄•’ovР»D¤;ô$G§®®‰ñÇҼg3ùÃGðÐwçÖÎÄ ï¡aÏnjÆcéªÍäç…œãA¸ŠY—LG‘N­¢c|^>?ÌËNrV7Öcº.’("áHMÓ¨¨¨â;ßùó_{å‹z²‡C:¦½³ƒöŽ"+öA4Éx<~r@QU! áyŽå`¦a’Τ1 “Aå•lݺ‘=±“lçTàÙ<ö§'™zÅæ<ñ&Ÿÿf›ßZÈðq™¿t¥ƒJ9{PomØÍ´³±pÕ; 3‰øþ]\”xž!mŹàÒ«7´ì”ºsÒ¶¿¿´ëÏœϾB{LÀíXAØV9*ÄÚ½I£•'6.ãÞÿü™µOòööfòœ(ƒK‡;ùÍ3óøøG>Â3s^%¬ Ù¸”Ò³&ó—WçpÉSP¤þs-ZSIüþ ©dY‘ikoã¾Ï}ŠXGyÑ\£Ç×Á²m$IbPY9 M ü~b±J ³DYQQ”#—×8¶ƒ®ëdÒ2é ¶utÓ¡eI’•ÿÞD_.Õc&±{è:–/z=»Zh×%½m«ÞàÝuµ ê‚̘2…eKæ³nWš{ï¼–…o,áË?ü¦¢(øƒÙã~¼§ÓG/£’d‰`(H0”á-ËBOë躎žÖ±ícsV“ ¦à$ýÓöç†ywë.ÄpÓ&^À°ªÆ!éHˆF b*ECÊcPHçÁïÿŽ|å{ÜèÔÑê)|äßÿ€ 2í’ÙL>ïìSîÏIZ‰Ê·¾óÅž­Ïvýþ‹Ÿ÷ìëæ¼WΞÀ„ñ]<€!.ú°AÙ;¯´°àäºqœhËdiŽªOCêòe…®BS˲ÀKãºñd’ ?@N$‡ÜœDIÂõ\LËîaŽŠ¨rïHI2‘ìùß4OL/MQ”¥Ç÷µM›L&“HèfcN¥“xŽÃØÍîõTÕǃ_ÿ¯ìÆa}Û,§¦këéçgvý×»âåúkgõKú”½Ÿ!‰"ªæÃç ÉÆ C’e2é4’$‘—›‡aè467²¯s©`3c‚" H TùÐ&9oÂô^çu\Ÿ/; ‡O! ïØ‚(tê®ã’Éd]ŒL&CG{ù~?Cr¢'!Þ'ø—0Þa²¢¹yøýA ñD‚h$Biq ͬmXKÊ—ÆU7í ´Ër}ÈÅ2bP&½(ÆÈòüAì‰UëzvdÏdRèúQÜÏËF S7ÐõìdÌ;J˜ìP$Ó †„£øOCœüLG·¡¶¶–ç_xá½èËqÃ4MrO€:تg Q¤µ¹×¶ö6’©8;“ï’)4á)ùˆ~A°j Ÿ„ ¤—Ç)Úây«Ì ¢("w¹‰xçñuDPTEU!Üŋ𸮋w0_XÈN2mÇap?rþóê6ÆxßϺ ŠªRT:˜œH”¼¼ rrð<¦–&r29ø ý}>£†¡“J§Ø‘N£lË¡3#£§»b\ÆL{ípD_À‡æ×0uƒLFGÏèd2™ã–臒`ÿï?¯nÈÿ •杖ÕÚ¶MsÃ~šöÓÒÒľý»ñ©Y×À0mY"•N£ëi,ÛÅÅASüšŸ`0HQAÁ`Y’X°t!†aà÷pEôLæ¨#o7A@óûÐüÙ'‚çzÙ,Z:¡˜º~Ø* Çqð‰¹þK«ÿ3á_Âx+"Y?ò`&›ëzÄ::i·$I"77Jnn%EE„‚¡ž8ðÑJ¦ˆöCÍ™ h~ Í@ãìpñ^ÏsñKyþ¾OˆE (½«©©™Åo­¢µ-A4'LÅ Â^$ŽÓ…’`E1zFE¿ÏÇЪ¡äççôŽËXEw–LèÊÂÅÙê‹#Áó0M§›¼ãe'fÝp§Ç}°]×u‘d ОÑ1 Ûq…3«TÞ²,æ¼<¯Ï~I–¸æê+¬Ý~7޷׬çÝݵH¢D]c ǧ¦|(Á@˶xò©9 ./dÆôÓgÄEÁ EAóû)-¯"É¡¸ø ‚'©æh;6Š¢¢©–eìJ';Žstã„ìèoÙ˜¦‰eZ˜†‰i94v0<ÏÃN¦.~‹¥O<‹´{C¯¹–Q_Buu5K–.ÐvûÏ»mÇΙ2ƒÊÊJ:;:Ù¶mûöï#‰0xÐ`οàb6¬ßÀ“{ŽÛ>tC?·~xD}~|²Œ‘ÉÐP·‡†:¨¯«#•I¢* jW¨JQ44EFÓ|ü1Ý00MÓ²H§ÓÄ1B¡‘H±X «Ëð‰ᜣ/ÙQZÕTT­7yÇu\tCÇ6lt=ƒifã¾½ŽqÂg‡÷P”—•’ äìÙƒõË_ðÆ/Aç#fSïˆq¾øø·ùÐŒk™\YÔ©SèìèÄ0 öíÝÇöw¶#ÂQ« ú²("â8Žƒ¡ë¤’IlÇF@ÀÃCVÊ‹ËK5Â!?>_€!……Ÿ_@ å>|ík_éÃcpç˜ì´#A”Äìg!‚c;x®G:Ó=‰3I¥’½Âkg êêzmýöí? ˆñ®4¶QI3ëk_džJ&WÕÅÙ¼e3²,œÞ¼|Ò40Uó‘_XŠÏïgPÅ`&ŸMÅ  † FÅ  JËÊ))-E–eÇ¡µ¥µ¹Üï÷Í’J¥°³K927šM$“IB#W»®›õ]uË´zjÖ<ÏÃvìží#Á8Zêù=DùÕ¨ ý®˜Ó aK !1ˆ¾ÄêE¹bÐtt]'/7QOëZÜ–ãàz¦¡ÓÙÞŠª©ÔŒŸÈ}÷ßÏ›oÎg÷»ï²ímlܸž²¢RlÇ&™J±mûV†ÈVNÄ:;ñüå¯O ©*ª¢’±Äu-ËÂw”0–(Š=¤Ƕ³#[1á¸Ù:¶£áD8§‡Ž¼§ 2òžª¡½äMƇ®$" c¥ù:†aày¦•­ Å÷æ‡p‹LÚÂqöï¯å—¿øŸ½ï~DQ¤¡¡ží»wô{ÉÌ˘|îTño¼ñ‘œímíÈŠŒ$IH’„ç¹ø|Yƒu]‡`äø’,åöXöó.¶eõø»‡NæÒºÎ™gÈâ=yûû„£FT1Ûv-•ì~˜ÎB‹µMÓ-[63vÌ0nùðÍýÝôa:ÎðT’‰™LŠD¢“y¯Î¥®~ñxœDò¦T¥Ô*¥M“ʤXºt)~¿ŸÓ>|ZJß»‘²l,×AÄ„v¼Kn4Ù³¯¥¸¤”Ë/¿œªÊ!äåPXTØ“òÕuŽöl½Úþ½{yò/¦££ƒÊª!]•§ÝqWEQX¸ Y·Ár,\Ûí"ñXئnè½y G€ë8œy±†ìÈ»£¹™Éí[¹j%®ëð¡›0Î;¡ÓÏaÆôsxê™xeîë >’ç·­à¼éçpíìË©¬|ì“ rr"=4Æúúzæ½þ*mm­¬\¹’T"A"§#Öž%' ±-Ûvpl›§þñ·ÜúáƒÎ›ÓuŒÕ‹çp8(ŠrØ×±ž‰œnèYwᆚaêœyQ^¨=’ßÍ{–9/¿Fýò•´®^ËÅçOæ²K/Ðv4ÃvËM×rËM×òÒœWù·Ûf¿gFë¸.®çáy.‰x®ë²nÝÞZ¶Y”‘e_À¢j”•U …Qýþ#fÝ:Z[1l¤¡­µµg¿eY'ÍÐ’d‰@¨«à ãyžë‘Éd²ú†Î R.OEæú뮂ëBÌôðè7ãmÜ»“åë¶3íâ™Gzg®f`Šðx³ ÷ÀL>“Î’ÉsrrÐ4?šÏ‡¦ùðùüHŠrÌ…Cá0zæ@”!ÊNÒQ<ª¼©cÛ¦‰¥g}X×q³þ/^ŸTñá`:Ò™à÷z.o/]L}Ìcæ•8ÆýÚ¾o7 µ€Ê’þÕ,ë7ãýö~Âå7|©u;|v=ù•ìY¹ŠÝbÖ W²y{£“˜à'×KÏhØÄ8wÆeœ=fHuã¨P4ùEehþ$9yœdE‚(IY#Y–Пí&S©£Nغ# ²¤s×q1LÛ<(]lšG ™¹Žƒ_>Ï¿vSH IDATæ¯Ï¼Á…5E¼¼(ŸÌÞõ˜Á<Äæ½t S& cźw8gÊ9,›»ˆö†ýX¥S™04MqE —÷Cå0Б—ï?ðU¶ÎšOÿàwl­7)öû>r ?þÊ÷ÉJüé¥å±eõ;\vÃÅ´îÙÎ ‹7õWŽˆTw¥ƒ¡ÓÖ\Ïæëhi¨cß®í4Öî§£µ…t"sœéLÏózŒ×±TUÅuì‚Ï'Qñûý„sÂäæSR^BÅ *‡UR^YNqY1ù…ù„sÂÈŠŒçyHgÈòºV¢™§—l"רÅÓ ·R\Ëæ ¨Æ~úËSÔŒÎSsßd&‡ÎGÍ9‘R1}¶/çdÑo#ï÷òSÚ?úòGؾe'Z €OÞ=›Üa#øâ7ïçœIç2²(‡=q›?v;>…³¦ÍdôäéÇ>ù)"~ˆlR"Ãq]R©©Ô"¶*«‚A"9Qü¡pŸI[7<×%–Ì*Öd2iDQÄ0tTí裢c;ئ…nX]*;®ãf]†®0ZO¶ Ïé]]‘Î…N¯(÷á`ÚyC™4(Ì–Zƒ¯ß}íž„j£dÒÇxè㼺h üÇ'¨­Q=(@ã­„†åóÓ‡÷[?úÑxh6T Ñë½içL`Ì䩌9hÿìÙýS¿"‰d"I0&‰ hªêCÕ´#ë¡H¥’477‘J¦p=UQ³¬cŒ¼’,eˇ¾l¨Ì´p,˲ql Ëq0-ë¨a3å X9HUµú á²ó0¯»&«£VÐÅw¾ö𒥬Î4ttñxU%œ“‹a;44ÖÑÐX×çXQ{È/‚ PTPÚþRUÍçÇq AÓ0E‘t:àÿ#ýH!3è ›ä Û¦aeŸGáNü«á_Âxõ® "ÉÄ;[¹ø‚ 8wÒ¤t•¤çääæà„ðûˆÒQNÏdhmi!Wp@áG%4M#N£ªG绎‹ifu\7ë.tÐmÇÆõÜ7âpû×!¤œÁ+ÊŸfüKè6t£;#&I"9¹¹hª†¢ùPU ŸÏ‡¢feG¥k.Zø&ÏüýIÂámm-̼ôJnþPvi.]71«·k]êI”²\^Ó0qmÝÌR»fÇþÞ:aõÈ"~'ƒtÞ#¯nCC:«%†)-¯"wzÚ0 ^}eãÇŒC†TTòÎ;›{Þt‘r÷pÊæ}!Š">¿ŸßGwÔÓór¢øUE–4Uë51;>ùÉOñ›_ÿ’íÛ·ñÝïüˆÂ¢‹û÷ %dGqÇq°,“Ì1mL3Ë->lÛBq=¢Ç˜þ+á_Âxã]Æk[:±ÎVb1EQñù|¨šMÓP5?>ÍwXCG"ÜõñOòìSObÛ6±XŒœœœì*>îñׄâEÃù®ëfSú‰nêXºÕ•8¢ 1Ãf».ܾ|Ÿ›«NOºý½F¿ïú ïNë */AÕ”^÷P(À®ÝûillåìIcÉÏ4f=ËÔ±Ìê6‚(!Ë Á`˜`8B(êuغu»ßZÀÂo²³ªš¯}ë{虬¢ã©BÅ>FÄY=¥BéT Ÿ":´êØóXÛÖÆï·ogCgW••a».ò’;Û[é/Ét:ÍÿýòQ.9s&OìóþÞ}µüí©—1l07\ßÿ ©~7Þ`ÀONN˜d*Ùaâ÷i<ó9äD²þ`{{'y RvÚŒ×ìz,û|ró‹º*²¬"Ë2Š¢ÑuH&<ñÐÿãœmk¹Å/òTÊáú+³ªà–ež©Þu\ #+´×MÀñ<×9pƒ÷Ä€»?Óõ¿m[ØŽƒå8ŽÃŽxŒ]ñ8ë:;±]—iE…Ü?v,£)½×-‹ -M,©ÝËúÎvg æ|ñÓÇÝç£!PYYÎC¿{œŠŠrŠ‹z¯•üöšõ!ZÛÚxèâÞO|´_ÚíF¿oQq1_|êY̲Îu“å2xÔ¸ží}@˳sxà¿OmùÓãE·¬¿®§‰wvdÝŸŸÏÁ|„uáÒ©úÞ7¸±£–W2&/¥L**ªèèÈr‚MËB’²Æ›I{Ò#J"þ€ +×”5f»kÕÛ´1Lãˆ!7ÃvØÓÙÁ ˆK¾,“Ÿ—Ç9yytè:)Ëb{K#«k÷ÐL²;ÞI›™!%{Œ(/æ’i£Y½°ñ¡þMÓÞ~ÛuTU–ó«_?Æg>}gïÝ»Ÿ’’*‚ÁK–.aBͨ~mÀx âýLÌ+Á²,.\È`·–Q ª¹$âư]9«¿›>"JCAè :ŽE*e‘J%z#+*>-KH÷ûCCA–-[JÝ®íüXó£ó9ßmepG«æ½Ìe—_çºx]a8÷8&]‡"kÌ]ôƒ}`ÛÁ°²ia˲p,+«[æXÜùú‹ä„Pd‰¼PE’ˆƒ„>¢!y!†åsAA”ðA•ÌiÃd˾¾|Þe'ÜÏcaú´É€À¯~ý'>ó©’Ñuvïi!‘H±eËFîúè- Úÿ…ýn¼á°³&NdâÄkɤÓüuçNЧÞȶƒŽišû*¥ù«¦rlYÉ&͇¢ùðù´®É›¯‡Ëpî9S1 ‹Í+–pYãNÞ‘%æi>u×'Q¥'{¼pl=u Óè#kÚ >º+7î¾â<®œ4î¸WÜì†nšt&RŒ+è‚ ÀôiYŽîÿýòa&Lœ@:¥ÓÔTÏg?ó1‚ÁìwãýÜ ÿÍóË_¢äå~xÃ9W¸¶¤„G^y„GÚaîÍsy9àçß>ü¡þnú˜PU?…e„Â|~ß1 @Vö¬XÌÔÚ<•2hÉ)à‡?ü_¢¹'§ )É2ÁˆL0ÌÊšštlÓ‚#Äw!Ëu°,›Ÿ<û/­ÚÀWn¾ŠÁ…y}Žó<”i!>EAêJ‰{e…¡Ñè€if”•R]]Íò¯~†h”ï=ùð€. €ñnr7‘ß–ÏøÐ8xæØW\ÇOû £S£Lj4Ö7¢(2ùù§KèL3CkK=­- =«ùýì_Ÿ¿Ï¤-™L²f÷æ%ÓTËùcÆ÷2ÜXG'ÚIÆ]63LÌ.9˰hooeÍÚå˜]̲wö7òãgçò‹{oï{^A ¨ªtdtêb„4•¨_E·,FDó(*‰>Ÿ:uìÙ³ÝûÚ0Ó:û}~. …Ùø©û <öJŠf´ïwã­ÞVMîYy<±÷¯”Ï,ç[­RÉç~‰¬ÈäGà 6„tÚ$è_’ÉñÃÃ42˜F†xg[×>Uõá øñûC ùê7¿GG{%eƒxû핽ÎbÛö o·¼S÷çÝŸÙíq#ºe’(±u×FÖ¬YÙGE²¡=ŽiÛ¨²ŒëÑkýgA€¼€¿"SÛ‘$–1©mneX?®eÑeËßfïþVªªªÈdtZ;ÛøæŸËë×}†eÅŸbÊp¿ï|éMF×DÈÙÚ½Vd Ü—ÿ÷s<®½æôeFº ìPÕBQ”Ðz~4MCî’.í…«†¥jèPvízM;5^ã88–Ý•es°-»çeZf/—¡µµ™µëVOÄ{®ª¢|Ô.ßÜõ\Z“lBšLPU‘D¿"3´ Bs"ÃNËfh?kÄÅâq-y›––F ÁËsæðÃ|•`ÀOâñ?°âŽOP5t(+?ú)Î}ì7””ô¯÷»ñ>2ãw´¶¶ÍÍ¥Cëä{oüˆ†A ÜWñ õª`8äååÖ‘××U´(ˆEÅåø|Ú‘Cd‡C[k+Ñ£,Üwè í‡C·DÔ‘ày™tšo¾ŽÞÑÄ·o»Š-ûëøû’Õt$³"{¢ 0ixŸ¿î@Ô@E CAÚR:õi M@• û">•’HT:Éð`ÿÙ~?U%̺âtëµ<ýìK47·ñ•/¶×ûSgœO>Ê–­;¸é†þ×s8%•Ȇ½;X±n¦Ï¢ì¤CHµÐd†^‘Ø´nßÍ¥WÝÉÌšAýÐÝÇ+»w²7ïµÏq,œŒ…žÉ&DIFU5TMCQ²Äô@0Ôˈëjk©™Ð7zܲ»Kݶìžr÷;·B²•oø ôŽ"H¢HEaoUrƒiÝ­q|ŠDn@%ìÓ¨Ì SO“Ô³nRÊ´ÙÓÜJtØ„“ï3Éë¯,¢hìΞMDÝ|ãlê6­àñ œ?u c†dÅ÷¦N™ÄÔ)“Žx¾SÁ)¼ëÏEy?úî¸çóXúöf†åX<¿ÑÇÇoÍÊ·73ºHâ¹u+‰·_H(ÕÌþ¸GCˆ %êÅØ´«‘Ñ£±sœÙ³¯¢4zê¡ÓuYÕÒ‚"À/×d'YŠ$‘Éè„#y]"#Ý…—êq ]745âóõîÛÁËVDZ`vnÃAˆÅb,zã5¦Väñá oîñcE6fã¸AMíá.ä|È¢HC,E},ƒ׉úUòƒE¢%©cš6ñT†–Tò°ç>üõ×?¦rÖ}Œ-²ù¿ßü¢ÒRšëö!¸.B{#™Ò1,Zù6sçìGTü(þÃq_9+7µ2v|„†ÚnýÈNíÁß/nƒ¤É<óâӴׯ)Ÿu1ãΪfî+¥qo'‘ ÏaìèJ^xéB²@:f3û‚<ñôËä¤öqþ57ãS},xå †ž5ã”w}[+?ݼ™ÏTW³zÿnvt¶ ¸gÖ¼U— o'™”PU5ËqP}=\‡,§Wëã 755¢gÒ„C½_R©bφià?Æ*=ŽíôðuöîÞÅžM«ùÊõ—RQÔ7`»Y·B•$A ¤)è–À¾öª$ øª aŸŠ&‹Ôv¦0l—ö´A{Ú@‘šJJ7HdtVÔ×3{Bÿ~4îXAR+fÓ¢…XR€³Ã-áÑ”yòO1ý›hÞúíf» %˜aäy³xî—2ûßîÀ¶O]ú”Œ× –2÷¡Ÿ1aÚù\1¡’½mS¦Žcéâ̘}3m:Õ£³~Ã;\ý•/²{ùäâ|£ƒûî™Á¸R‹VnF D¸åŽ1}Tá±= ¶vvòÍõëùJÍÊ5•;×®"?â§Ÿ¸QYݼÏu0ô †ž².…$e×¢ÈÆƒC!´®W-x“ÒÒ²ž¸nˆmÇbíDŽ‘¼%Á°L‹e‹P¤X|ï#×:‚ µ, tf,šô49~°¦àSdªò#´$ÒìïH¢H¹Q¿JEnˆý©ž‚SËñ°“ŽDÓ¶Ù„Èʼn â¬ ùë¾Îä+fqA•Ê ÝG2ÑI®b Èa”`#†ðô/~0x_ž=†íµŒ5_a9ÿðA–mÜ…ÖsžS2ÞÙ7ÜÌìèìvk2\sÍE½Ž«2€Ê«/ésŽë®«`Ò)ºcïÆã|aÕJ>3z4gçåñ¹ù¯P”ŸÃWo½ŠŠ¢|:’)\ׯç ô]ªŠr %|„ÈÃÖ-[xñ¥ð…/|¹Ï{y¹yÄÚ²ò§º¡=FÆN’É8+–,dÖ˜Á\9yÜ1—¥Šú}h’L],Ec,MŽ?;ÒG‚5…¦x†æDöò)DiÓ"ÞåïÖ¶´óû9ó¹uä¾{Á¥Çs)Š .¼„ .<ôwì]áPY^ƹ¿û}ÏvõÁ4–Ü‘\W5ò”ûï2zƱùöúu”\V>ˆ‡7¬¡I²øÙ'o%Ð5zúT…D,N:£SÎéED?\š¸µ¥…9/=Ïœ—_à²K¯d|Mß»+ gÕÉr[¶Àî]ï²jñë|åæ+U^rØc,Ç!¡›ø™€š0úU™Ê¼0u±íi“ö´‰*gWœ¢5¡ÓM’ºER·Q€¦ö8¿qŸ7‰{&N>a>Ä™Ž÷…ñú%™ÿ©™€î8lkiâ'«—q팳ÕüªJgg;¯ÏŸG[k3–••^R4…p$Y–E‘T*MKs3--Í :Œ»îº‡Ë.¿â°?¼ßÀî’Çã}Þï†ã8¬Z±Œ–=Ûøá×Sí÷¼”Š$‘ã÷ÑœLÓO øk2Š$S‘¢1ž&–11m¦D†¦D†ŸJÔ¯0l×Ãõ<šÚ;yüÕüü‚˘Yu’µ~g8Þ7º #"a¿yÛ]ü`Ù">õÿþÌ—o™E$àç…ë°=¸þºñù4dEÉ>²ôH&“¸Ž‹ äææ’ŸŸÌ‘JSUÔ®Jâ#Õ¡¥“I^yåEFD5~ö‰[ñ©}cȦc“4,‚jÖ§•DÒH”aRKÓ÷ªY£.‰(‰L®_ìj޶x’?ÏYÀog΢¦èð#|7>Ðmxp$݆ÒP˜ÿ»ìjÞØ³‹ž|…ºDö‘%™Ý»ßeÈ*T/[³¦i>"‘(¥¥'¾(H7%Ò4õà Ž456ðâóÏpVe _¼ñ äƒBr¶š,#‰õIl×#7 ñi5•!ù2 ±î¤C )!ãW) hIfp©sKet^]¼’¿Ìºžªãfù@·á4ãxu.©ÊÃ×°«£Èòeýë_2zt5ç͘Á Aƒz´DQÎj8¨>€`(LÀèJ.í]ªèŽãd%N»àyë×®fáÂ7¸lÂ(>wí¥½ Àö\âiE k ²(087D,cДÐiŠgð«2Ñ€Fy4HGÆ 5™] ¾=ÕU -ÂÁš|-qæ.\Á§Ï<.Ã…tN;ND·!ß×[Ôq6oÙÄæ-›<¸’K/¹„©ÓÏÇç Ë2ª¢!ÉÇ÷c655÷Ùg™&¯Î}‰mïláÆé“¸wÖ…=†k».’ "YµÇ¼€öt†­r| yhÀ‡O‘©ëL‘6mÒ¦$äJÂZS:VçàP©iZ¼²x?ž6“á¹ÇÏû@·á ƃç]„áÚ¼´kÎ!ØöæF”¦,xê]ÈÄäs§Q5tèqŸ»£‡N™ESc Χ³£ÿ¼árfMßkÙXXÆÀñ\">E’Èú ¨2 ñ m)ƒ–%ÓTä…iMeèL›8žG{ÊLT©ï£ •ÑùÛ¼%|µf #€öx¦â}o¼yþ¿½âZZÓ)Ö45°?ÞÉKïî`G²“Ÿ|âV*»2[- žyî1nMrÎÔL™:ƒââ’£» ííøâó.\ü&Š$ñ?ºŠ Çe =ÏÃv]IB¢Œi±¯=‰*‹äveɪòdšãi:2&IÃÊŽ¶~…Ÿö”Þsã™Nï0cüqÎ|¾yöyLTÑÏWïÌÆ€ï‹s^í#7qâxªNóÊ@ —ɪrßV]Ã/x/þþ︮KsK#s_{©'TöÑK¦õ.dŽçёȠÉ"!MÁ¯*TåGh:(KõûÈúúcil×£=ª²Àá2-›¿Î_ÊgFMàÂÁUsáŽÃ0ùÃÃO³oß»˜ƒ|´RBÐh[ mm§¬¬¬çØQ£†pé%Óúµý5Þy¯/à×ϽJò¬ƒR,\ºa+>ð…lú¨ª*¿º|6m\Ç—~†»/?ë§OBÊò£ü÷M³¸÷Ê O/}›¿=ñ¿ÏèDsò8ë쳩?qãj†B44Ô³mÛ–^çþó‚åœ=¢’ÁEùh’Œ,‰ød-$Ó™ÑÙÙ# *ä4J#A¢~úX’–d†–d–¾XÒHš6I=k±¦ÝWþ4cX<òò\YTÁ-ÕãOËu;bñ4—•U`_8•GGŽÇN„(úôÀË ¨ñ>ÿâ·9ønæåߺŒáƒÒ¼l¯á’Η²ÙãÆã'RþëÕy$ ƒ;.žÖã£æýÜ}ùy|ä’©,Þ´ƒ%[v°~Õ[¼ùÆ<,ÁûP˜–ÍöÚfF•—ДÈ`;9~¦Û5kˆ<âj Î Ñž2è̘d,‡Œå ²Ø{RÖ ×uyvÑrÆ"üç¹Sú2Œ?-aù ‡Ò©Ó¨9ÆbŠýÍ:Äâ0.'Ió wƇpŸ«Ùtã¦ÑcyöÚ[ymùF~üÌ\ÌCjÅTYfæÄj¼ýZ>~éy@v}àÃ.dÝ„!%‚@I$@nÐGS"ÃΖõ±$žç1$?Laȇíx´$uvµ&Ðm‡Oî©öu<ï°†kÙÏ[„Ëðý /;&7â½À¥-ÏRäÕx;’ínljæüTz¡Ð­ì\¹š¢ù?D~î©^ûâ—cŸXRÆŸfÝÀÚ­{øþß_écÀÝ^VDAäèü…sG¥´ ·g¡îìd,ŒO‘ˆe,ö¶'ÙÕCçñu…åtË!©gÓ»G‚çy<»x9µuÍülæ¬3cM¶Ã༑!¾ð“?x;bEÿxa>†é2åœ)„‚£9OõQÿ‹ÿ#4÷Aœ… hmkgî«o DÓ'±…E<}Ý­´7´ó•Çž¡5Ö·@|dy1Þÿ1¾pÃeœ;j‘.*£(ŒŢ¯º˜ÿùÐ,†ÍŽ–XWå® À h˜ÒHAÈú°Í‰ ûÚSÈ’ˆ*ûiäyóVo`Û»µ<6ëÊÑ~¿§Çq¨««c¦÷Y WÙüé±ç¼Í~wL^}í JŠË¨­¯E@ NSßPÏ´©Ó(-ÛK¬³ŸdÍÚM\yE_Šä{‰yù<>û&î|åÜ÷»'ùñÝ·P–×»è2 i\}ή>'Ë23m‡Ž´_ kZV7AÓhIè´§u†…(@اãSÒU¢£[ÙLÒ8>å e[v0gÅ~=ó*ÆŒB UkpãöÿßÞ¹Æ6užqüçãûqìØ&7Ç%!! À(LÀèJ[D¹ Ýh»²u£Ý:i«¦®&Mc«º{‘øPišÚIÛ¤ÒªÕ*­ªÖQ±Òv¥…)áV!¤ ‰ߎsÛ‡ :(„‡€ò“ŽäW¯å÷ë9¯Ÿãç}ÿÿ—Y´g[6çv,aâëÙ¯äÁÕ÷óÉÁ~Á6›h4JWW‡Bkk+Í-͸ÝSS$¹È“Ç+ë·PæÌãÇzƒÎþÁ+ú dEed4!uجyÝÈ#:í1’)tàØç&œïA-áÆd…sÃç£ID‡óÆK²rf„wþs„'æ/bcu­©×; d9FÕì2b±(áp˜íÊìúÇ6TÂ¥þ±#à7ßü0'„ÕÕ´žl%Êz˜½ð»ç( Ý>•Ÿn‘W7>Ä3ûÿÉÿø*;ÝÀ’êlåÍb—ÝF\ÎÐÁç¶ãs9)ö‰x]vzc)“Ü+AÑAå ýq™Äè «h—ªe7Ža8,ÖÍ¿þ›'—ÓɳÏ|Ÿxøð•i.ðùâÔÕ•Qß ¢©At-4^wÛë’“à=zDâµ×#d·Ø´óÈÛr1LNív^\µžç?ù7?ßó6?yh-KëªpX,@¾Û‰è°q!*ÑŸHE>zcñ´B÷ˆŒUHãwÛñ[DS7'D­¨v‹…B¹~fáóåñÀý+(/3¢œcíš z{†HJC=ê#rSTxU1Yt$\mX_OJž\jp¹n•¬Óİ[­üb޹]ìzó]_-qÏü9جVòÝÙµ åA/‘¤L$™a0™Áë²ãw;ñ8í $dTÝ 2:ÓÚ­müÓO2F0,ø]¹­3ƒªÙ@V[/55â MçÏG¨©žE¥Én¦o_W;‡Žµ±ì¾X·v)ën@Å=q±›>ÙEuùÔM)‹À/£¡(ÄÓû÷RwW1EÁgbä¹ìE7…^ÓAw4I"­H+Ø­|.²¢"+ÿÛy3tôö^ uŠ¡óéÁƒH®–}i6šBŠ[iïwâóܳÂ<³ìË1-mxþ÷»X½ù›tŸ#ˆ$cI:NœÅSZB£GÖX¶d>‡šNÐp÷"š?<@,¡[+g×owàµOí5¥_-›ÅÖªZþ¼ïc~ý­åŒóIDAT-xú):cˆwVì£/‘BʨÙÜ6•Á2ÁÙA×u޶wžÂžÃý§?â­¦!‚Ãû8ÒRËœ²bC2ƒ=|üv+»_ú%åÅæŸ¿`Öý›Ÿý”Ö÷þÆî7ösêìYNžiç|Nµ4r´¥“|Û0øëjæÖñæÞ÷8ÝÛÖ.aÞÂS>p/±­v>-=¼{ü ±t†b¯‡™ª¦Ñ“ø,Ç.DÇXÐNô!åÂ`„öî^¬ÌÍìe&†¡Òqúmgh=ÝÆ©‹2e59 \01x›OµÐ°úë<±é>N8L(ÏÊà¹vÙþ=<†„mær^~áWRŠO?Å“;62{éJ*2 %WrÇæR ²¸8ÄÇO2˜Ìpv0FDÊ0#ÏMPt¢•GN ˜†Á¾ÃŸâ³ÛÙZS7ñ̲kjÇ~ÞjN°ãkë( ”³eÓžÚº™Í[jèꟸRÏÕ0-mX¾rÍØë{WeÞï>™me÷î±¾ ²}%ÁÀh{¥Y§s‹À7êêyöÀ¿t ]°^±ÛÁmÈh:º×8g.ôr¬½‹ïÌ[@¡É f2«¼œçv¿8ÖžÛpYçœòœ{Ç/F7›åá2솅ÆÓí¬ýòB¢r†UG3 dåê¿c†aO¥ˆ&S$ä4#ŠJB–Q5Á>QÌÊ9¹]ÌðåáݽÇqYm|»>7Bu·;“$4zçPèñ°°°„wšš™7»«Ò# ªn“$z‡¢ Å“D‘d’¡x‚ád uœnA>ÑM<%óøÜ*ÿï=1ͤÛ0™,.)åý¦Nvþåu¤tv'o‘K$ìõR’ç%ìñQëâ”Rèñà´Ú(vça þYVm Á°›–U 8¶í–¡I,. €÷b”mnÍýš·ÍÏ'áië-^³P#÷®º¸·cIPmJj{»»ËÙ½‹ÿ/YëgÞ¾9çä:—«WƒÊŒÔöqûé›­vÎY}¼HùUÛ&TWA%±u1gt[ÙÅA‹!áà¶|Ö ~$Ü¢MOÞ¤vAh"_)­tâŠ3åTVZ‘ÕÛGiuKH”‘Œ$èØÛkvÅe×\@Z5,&9[$MôH–ŽNF å”OV)¥•T^©e–\béå–_vye)‘ dšY„Žd–PD%Q o²I§“qž¹¦Ž%¡£%äHD9öhæ¡ÆÉg¢`6*æ£aFꨤNzeœIÈòO$×Xc6×hó©5ÛŒZª¨ ¢ª©¬ªêj«¤Žÿšê§«Šzj¬¯Îj+¬ºÖŠë¯ºÚb°Ãk‹¨Äê2ª²Ã–ª¬°Ê"ëi´Ã^#,ªÄ »‹§Ékͳ¥ Kl®¿ÞÚ+ªåÊZ«¯·š».ºíªKn¼¹²Ëë§ÚòO#Ïz+®¿ÿ+pÀlpÁ¬0ÂÑûí¨3û¯.f+j±ÊJ<,¶Åjã0´øN ±§ã[òÂ('¬rÊ,¯ìò¢nj­¨ {ló±8߬sÎ<ïìsÏ@ÿ,tÐD­3·ÖX‹t¿=wšñ×ìtÈâÒlìÅ»±5Û‚ìé6E‡m´ØdmvÙeo¼¯´Z«õÛnÇí)ÜsËôÝtãmwÞ|ïÿí÷ƶ€mµ6·\xµÞ"í±Òÿ{j¶žn ¸ÔÑÞ-·%÷]÷æzs®yç .úß¡ [1¨úÆ13Úgûìá·¡âì,©9_S¹Í\ã+8ì6¿®¬àGíá±¶ëîð¶¢2Þ6ÕƒGu·ÌRû¯ÍÅC}xæ×â,2Å {¼;òÇú»÷êíÇOóø¾ÓN>ú竟{ïëß<»ùÅßÜñÚÆÊ’¡ÿ¶ ÿGÀp€”ä —¸Þí_Ëc Á¥™Œg€[^ 77¨i«qw‹¾²Ç¶u¬œ Ò$˜Â²ð…ta aXÁ¶qlS…ó˜Ãà%+Z¡‹\<Ä–ÿV3"šÌˆ¸{ZŸgµ"*ÑyOC¡ ‡èDkäP{ÃËc—ÁkU dýRV×¢FFŸ]wfLcÏθÃ5ªñhoÌ…¨½ªYcm 欸ÇÃ},iÖ½b4ÜD`¨–!É-Ôˆ+ ´Vî&‰4œ¬ƒ³àѸ·8q1î_9ô–³‡IŽ yZ{-:µbYNŠ*„¥ kHÁZ®p†¸¤å-­ˆªÃéBf8sXÇþˆ;SZÅôž°H€4¢ Ÿ¡Oc"ám0³©‰Ä4Ý I›x¯q ‘nP \£ д†¼"*ðíŽsó%Éäh?Z„Sfæ*ÿB0î±_›Ô]ùd'<ê5ì{&_=W;øÍ/pcŸÕ€7;ÂT~’«±þÑæŽil ¤H‘u:‹Yƒi°â€F´´+V!PÜðR—ö$ 2u„b<€ÆEÈ”b"G0“rð©OuC#>Mcr³›ÆFöEQùÑ„Wì¡Û¦Ú¯/6Õ–²¤!XcIÖYŽu– ›gR8•Ï*«}þÜØð&9f G.:íÉc\*‹À¦éI_“P l¬¯tY þ’£gR„"ŠABb«ØÂš…m{ÅÚµ¶–Vý Ìy݃^­œ÷Æ2’öˆÔZ"euZÕ¢–µƒ{íj96L­ÿñ‚—\¡UçÆ½=Â3·ÑJ˜ùÒÆèÔ0~êÉq‹Y¡fhXu‘2Õ˜òP5ÐŒ.Àªx1Óq‹•€œ§ÖzkÁ•ìŠØÒcîÖv¢ŠJ.ù/U_¬'›äÀ˜&ñŽG|âQñxÈ™rŒcÜãÿ¹ÆCnr»¼å0¹Ë9Nñ‘w\æ17ùÅqÎó˜ß<ç?OCσ>ô èG/yÇ%~àWî‹Y[3Ø@$dB–ÐE䃴Á%“ò·ìøCTÙꇟÊ6ÉÌžö²ˆf{©Ü.+´Û=íqoûÛëN2½ªÎo¿{é.x¾ðˆ?¼âÏx;wïŽÿN`þT)ImHÃÉVla‡MH¡Ü,ï0•&õ>OÌ_¬ÎZÊh­=Öw„áfÙ%A 2…ýÕ¸¯#M¿û.ö^÷¼¾ï…üá¿ø§ç󰬬 Ytw¶ƒ>J% møEvЂ%NÌ[ÆVz#+&ÿ»耓V˜Î{µÀ¿Oè+›‰µ}^§x9c’²•PÏ?o÷õ‘…»ÿ—5¨zöTm°ç~få7n¬d3—65š–~Ç" Î×|¤’mÛ  r²À%s{$A•6Rtƒ=ÇäJ˳:óP&X-vE9ìERž¤bÄ¢J\Ä8ೂ`u“Ç-z´ƒ¹sc4F@˜Qz$9ëµ^ÁóA‘37F˜YN…Í…MX…K˜„H˜QSƒ^ÙBm¨–-‘  r@I± ! 0†`·J'-ÅÃP÷´i°³1o¨4QÆ8í3Qù$L©tQ·'^¸~¯€xDb6w'HL݆—Bíÿ×U hB3‰(`ñW‰Ø~—(2Û"3³>„<¡ ¦qœ· 2` éD‰‘d^ÛC!…YdR%c¨§|ÿwh¹çQþÄ{ÆjÈÒ{þ·‰øŽŒÊ÷{X‰¾·bF`ÐH5$ûÃ/ܲUs6 · ØäŸ!IÛ`Û—NµG;yh¡u1:æOî¥c‚lPÞ¢˜¥DF´5“ÓJ^Ä,¿Çk¢4.}†&2鈈~º–ݵ XŨü€º6LÃ(OÙƒ¶àþM†×hCC eC TBý˜‚5ÈYÓ2>ðE~¯ó-¾„‡ß…‚sÿ>ñô’võ]Si×,³ƒ¤“”¸b§#OWTií•4£‚8£‚O•TIeÊ•d•€”•«•Ųƒu^œÅQÒ²}Ò˜-óÏ]^æ|S=ÇTGƒ;˜‹z*”›Zzj ;AÏG€ü*zL0Ì«¤Ÿ ~´¯ô\.ꤨã6´“-½_X­ŒhA€Ó)…g\›“>¤Q¨9=o3^ —+¤GŒSD9(WWK‡R“dlH“$%¶ÕB=çõ²1ØdMÌbž2y0øc«?P‹ÅÉÄ[x$*ƒs#c(|Êb ì1Oc9hYø…‰çˆÁôJ¿¨€«W©‰Oø4c”UPwZÏ‹4ð%~ÁxÁ˜ÿäQŸ;°òØASu™8œ+¹›«Âþ*,x¶ÕHk°CÂò7È$¨Ã¢j1]‘ʪœÊ¨¼Ê¬ìÊl«ÊÓÕÊ­|ÊAÊ ¨àÆ^£¹¹TÕÅü[ÇÇ¡¥cÿä’á–VPäV®8Çê8DÐû—ö$GE„OôÃo•«é’’ã"2öZ2º-™bgt§·æü+=¤.„GÃ÷r µà?ò@Hp…Ã2¼·×~Õ,ÍÏ?R¶Ï¤÷j*iD˜ Ä~&‹,u1äÉßÌÓøh =CÈâš›‰~|Kyè]üÛ¢³jûðÿðÑûà" ÒÒþÒÿ@Ò$mÒ*ÝÒ#­Ò(=Ó'ÿ­.ÓÚ`†Ù†HЫ6ÃÃÉ¿}(Ô¡¥~†ìFMµWi¸b4P+ H°ŸâúpÖ§vÙ6Ò_ÿ3¦ább‹Ñ«åÙÆ¢쉈‡CF#­¥œzÄ6–PyOPÔ[©CdÁoŸÙɘ–•ß €€Žà~à NvOD° ÃS*fh;¥²-–` v‹.Uc;VÆÑÉRQÆ92vzo½Ö— ýÇâM¢)ᙊfˆÉLíÙ+nãÝ)Ó§ÞéHðuÌt¯ZL%ÙÿR±s»iÛ¥±£&]ššNÄéi$`;ì©ÃÉ´Hp ^Q€,Qñºm€µ¡qp² ²j¶ S–”)ôœ6Q´ "±‰$fŠ“Ð¹Ø,mðç€è‚îÙm³+~èˆÿžaŽ‚´É¯/óLn²ÏëéÎ,{,Á Âýh€RMðdN5qG@T¢ž°Þ þ­מ Q‘ê ›:¥M1]#Ö¾>ý)¦‘1#*ˆ S2rRÄúD$T’êL6Þ2,ÿôéÝÇ×ïà¾{õÞk¸ïßÅ„ÿã+8ñàX’"Y¶ì(‰,¯3%éÚSâhžLG¾É”'Î×x®ž »æÿk[®ƒ|;¤k‡’¼¶m-I¤6%FφkmÜm:›ó\>7.AY•4eºžûöë™´ dz3º¤æ0GrtY’ù˶T“•~ó_¡8oμ T:Ü«áµÉ©ÏlÂk0ÁƒL±Èû+²Äö1PAÃþb B Ófm¶Ñ‡Ãmpϧ–êЩLäÊ>kš;.¨¤{Ñ´fÒo¦árÍäÂ1‰4tê-§ÊZmÈÐî»E(õÉP›™ÔðIÛ+(&¥Ä²É(ñsª-›À>±lt±Ho¬’H[8+h8bY$Yl“Î8팳–9AZ³–<çÜS?ãœSO>ÿ­¥Å6댠ϨT±ÄÿàZ®?¹lÄ´J¯”3KMÖf¬)´ðÌÂ/·›jã,Iï».´ÒD1V¼oÖ²NÅQDNOœéŸF,e³ÆNoEí8m\ÛI-š€ül¹ádAT8vMA¥ZC¯í“[m½ÍVOCW$õ.ø~âŒÕcÝJÎ'/Ç:öHÝÚ§åˆÅõ¹9Í×ÛŠ®X® Ý´¦ak¥µØúN®Jé ÞtÓrË)'žÀBË&ÎÚÒoLNoò-¶PÄqµÏvJ¢‘>ËO³=ñZKdæV’igÖ³@-©sç‡ý 6mjÀ*Yý‰9^ÑL:$P/4.‰ÿNº]^ibj6û»`³š#ˆE§£˜ì‡É’8IcUÄO"µýÉW.ñCš &|¼ûnŒîN#þv‘Má"™Ó´ û»Æšö Û»Þ%ÜOÎö©Eq5çŒDk®aôRI¾K•µ±„”ºÕ›ž¶ô_‹oLÍLݰ ŒU µEŠ ¶8j+½@KC«Rmý\ÌõEm^•k_0ᲤS Gs$Ž6iÇ"iÄ6F·ÓÏnntmd™™§Î™ÿ8Á߆t'W¬eÒìÚŠñ¬aÜIB­‰i¤¢¬™LÌ{›t*5)Ñ 9±ÂàVd°9ÐK’šÔñ:%2ÿ·åm “AÞ5°š@ŠyËk"›Ø¦6Êãà–3Ÿ¹% b)(B J$¡:D‚$L·æÑD¦yý¤Å¡ ÅBCêóÇšœXømC`Ù_7d Æ1Nqþ0Ú>tf Âe.$íÒEè˜e—úÈR>!’Úbí)DK±„¥$×Õ1D™óÓVâסUr±LÑâ@Ǥæ`–ŒË™ $¶×iCh‘2ÉÈ÷¸®Võ •7›ŒÑFW«â ëã0Â+›èDÛ‰žÃÀa9Œk#Ùmx'Âe™Lļ”êd±[H©²pêF¹²)]Hg|±Lœb±³­n ª¶Ðú¦u-Bë[Z¥ÎÀµQh­°Mð)Úu£¯D~ j·)ÛÃJçºÛ< ÔUÍÄÀVêXL£`Yn ФÁGÿ¬Þ’Є4°eˆÖ°„c);YÎ:6²i¾\§ ¹éäŒÄ³Ñ$ô‰O”€$ßÈ’‡®×¤¬[MÝÖÌxVhí¶Zl«ÄÚÔÿ¡O¬jÕ“ÂP6´ \$i@BEÞe ©r@˜x% $˜&"Î9 uņ+®}äleÁøv" {–Ð`Ê SX×û´Á ÙÅNbÇ¢[Tõ3"Õ Lˆ6¦Ø¡P,–pœÖü™—8p yÖÆް5<5ªòN6¸9môfpšVS‡ûË™á–fåœZ §H×ÅR •’€Ô5åÆ7çûMze‘ãá\$ ô!Èè#+¾Dcøÿˆ#š`‘7‚±øA0â77üXФt7Ó‰¸!+XMƒ6¸{LEô™± Çv;¢WQsœá܆4À45Šœõ,•6@yTñ5Ki O‹½Ê '8Á‘‚èá!µJìBŦ̘A ²Ð¥ô AFÓ˜õ‚.ä 'R ؆oÒ|ÕÖÈJVHk/›™Õ×8It[}OÜ(dÇiD«KІ‡äÖ(ð ukkÀ$ÈîMrMxÄËIÐ5««;›.¬'%Ë.̳ç¨4õ*ß©àX’@î4'ÈUiƒýbÈ“My¡é§$”à=í¹!Þ»¯®ÿîm“i£@ºt„.MjN1 õ§ƒi±E,±ˆßXl,›*‘€Çò×°úÊD(A:laÛ ÊFa.æßÈÈä™ü úÜçm€ !Ç–)R‹ß0DèIè8«M3ž)œNÿÞž1‚;÷ÎFPѳ,@u­Fyi„~Θ«¤ÍbØi ,Õ>/«ådhºÈõˆbHøEˆô±;MÒˆm4¦áWa „ð­&Ò3öJHT}ã+={²ÞF@~„”`ÙddoR0ë‰øè7æ!Òmv)W· “' \펟¤>XŽn¹ kŒ ½H·F &ÿýþãÜQht“¼D$8ÂàHøø¿4¸†»Á‹© Ü“„”)3š¢Ú󈆰ˆˆà lK Œ@Ï¢.§Ðó"Õ[Àt$ ¸—ˆ‰JJŸ`3gâ‘6°„v{9⻊÷hä› ´Šxƒ#@£!œˆžgz‹Ã¢‰óؤË0Îx²û18k#€Œ—‹{º"€B“°(Ô‡ˆ«À@Œ„û 0L¿‚ Ä‘#Ò+9–ÿܰ  È ‰° 8´ Ù#Õ˜8´‰ÜP&±èžX¨6*‚ É»5$ü=ã1 db 1sô0ÂõpDóp²"A– £ò8ôÐDGÌ)KBÒŠ>$„¦Z1›µ¹µ°*¯È.°È `È "ð öÂ2ßpÒºÁ[8À¿Æ &™ž4š™ˆaä2ù:é™-çP‘”š‰ñ"’¤*››ªÀÍÀuK³sA §£)Ô%ñ&ÇþI&Šq$G)¡©M´Š!Þ¡•J\ÆV™4ÐŽ ‰„ˆ XÓ‡`¯2Ø‚­ð‹ ‡Û4Rû ù;O[Ã!1ÃI[ºQÿ@+$¡’˪‘Ü)ZQz´®6ªHÒ¸,K1ÉpS˜±9•ØØ—•,YAšx 7Œ1–«=‘ "ƒ"Ÿ¨é)¦(PÔBX È€­j[7€*K‚-ôÂ]¬ÂãÅMÛ ã$À8šˆ«ã!žÞqoê’"¡·¸’a¯› ÔéD„Ædd3XÁ‰¹”‘¿Y Ýè”RQARñ˹ÉX‰˜w|eù´•9 bƒ¶È3†@–”È6É‹ƒ”³0싨ÈÌÌ|¸Æ¸Ê‡›Ê/Œ dÌ&5j.»h!@™tk#uBžÞÓ.±aKy¦òHM™MÄqšL¡¯¿4µÿHâf”Ø NM97L&6é•PJ§H‚ZÔ$عj#€¾YJ#¼Lº3%ápB¾ ÉÊ IÈN ÃQë4óôÂôlC~‰H¯è±›Â«À„£J¶ìà°Ï£ñKQêÆk¬Ï©ËM)rb¤=j¡9$¤™Íf,ªÆéAA iµì©®ÕS?9h„¸²>ðª‰m(JœÁË4„Lùë …ìÂôŒ8†Ûb1ÍõbœŽê—ŽÊ™B# ‘©¤Š ~úœé‘¯žh#:â=Ú`R‰MgŠ´´ §Ó)Pð/¬QšÑ:ªŸ ¦`µÆ€kh5Ü/£Oÿ C̓“¿MëÅǨJ‡û;F1´"õ(ëœsÉó ±9!œ›±`‘a< ‚# JR„¤þœ":Ð41ey$Ãë©éðŒ¦›Í9’› `®þxNl»"ˆ¸1ö’EÛ1‘aü> Cõ¼LsÓ8•UôŒŸ¡Q<Ôü¶¦ÉR:VEÊ©fº¦‰I$ÁÞKš#©Ä¿$'IÙ=Àaš„‘”ob›ËZ¹‘‹‰„ÛÉ©»äC:$Ò¨?ø€å,&ù1}@‹€SÁó„h„Д[]Ñóô‹4@ rÉûSS2)ˆg Ë,V§cKþÈg ŠÛq ‘|—ÿ D§ $¥‰7ÊCU³N-§²•º²ÈªiÎóB](-yìÙš>…­O¡Ü°é@ 3 Ùª¿X¢'܋ґšˆ…ý±Œ‹…¼(Z[pŸóaÅ¼Ø a”˜ˆ¤-Òˆ[!¯¥V„!P·Š¦‚¤šRÉg¥HšV¿\Ò@ê9x¬ÉB;ÍB»Š¨ˆ‰•ÇÂŒh[ÊÚ¬&p€Ôaù‡óAžªšj dªšº%$}äǨø±@;$pˆá¨EYtJ½h„ˆTØsdkƒÎ}9êÚ1ls@̽p!CR#ϸÑ5@Y€-ú°ÆâRØ 3e ÁÏqÿ« ‡$¢nu””I¯€‰<‘„Ø8À§¬)P8šªÿx#‡è/š¸ÈÞ‰ÿê=[ ‚ü²…í%_íåoûV¥2õñBKR(å‘-Ê) 4hÈ-M"ï3¨»žMƒm8 (ü—° ~¹ÕkU´ƒ5ĘQ.‘Z›À¸þð ‚2&³4pƒŽ#œ —`µôx¹¸=ú8³ŽX+Ô:Û(¼ ¶ ’Џ;á½`‡[HK°á9>³È#‚Å3Ék±2ãšBå#R!6vƒ39¨3šŽusb>ó³‘j§èÓº©‚¯Öx°ªr›‡*¹¥ÿöŽxC6Øb¯w½¢Çõ‹(`ô1§ H,€þ©6:»²-ÌJª’ˆŠ#šÏ¨‚ð â5ÈZ=۹쌮E>º_k½F Äl5G8?,œÝY»‹Í@L~9“`µP(³ ÞµY; Y3 /·X)<ê’¨#7s+¾L¥ *Þ3wËA©˜)Y&­°“¦e¯iNÝ`ÉÝ)¸q(âÈÎü…ÐãŒhö‹Ð‘h–Y̱ôŠ…"H[е}èæ}@7C’ÌXzU ^ÌDNƒÆƒ‰XëPŠx¹â¸2îJ¢û8!ë‰9è3ªXaúP:‰À6Þ˜ç>Ãd\ë3´¹±ÿ€îÐŒhÕgDféíD›hb=›:¬¸3¢ ¬“³Ä ¾ãбSÚP¬˜§AЗäÖˆ Ëå¼C=»i_ôE=ãLÑÌŸŽ³ êȘчAµœÆàz–ÜSe“è`lë³`Ã5—ð™wCäh¯[Äq»54z-üü… ƒ\e¥tªV ³WtJ˜Ûµ¦2`§]ÊfÈ-²!5ŠB&ÒÒÒŽJ 475ír0eT&d‚$œw•”Oñÿħb±™ò’‘Åî}A]šÄ"ÌÒ/ù-ù˜ôF¸Ø0$Èòˆ•°Ÿ&0`SJM:»+£üµ¶† &ˆÎäÅq©2$cç(%اKe´¬‘JšòrØ7‹w,9"Q?§àœ‰†%{âmÖ´Ù²V° 5] DˆÐšA ·1$(°"C[!>Ô¨1á¿H·zdØP`A·,fl˜p¡B“Ú$éS˜ÄÚ¿±H$‘õ¯ פI¢ À?$²l!qÓfR"¶Ú$!±M©$$?Óèû·Ïß¿®_÷ýóGV¬¾‹ öD‰R–Z’Û>îzùqã˵7~œØ¢Ã—Gÿî=˜—#Çk&_Ž$¨8åÇ‘z³|¸˜°D—?BάðൂŸ9Zí’¥B]pMþkÄaæƒ(k¼6ÛàcˆŸ7Ò,x3lβdƒ'>Ü,ØâŇ ¶+táþ¶ÍN™„sDš1M#F¸ÝÚÜîˆ].ï1E¼]*Ö[:öìʤ§¶6r}]÷% †>9¿¥wུÞwäiÆŸasRhn™Gš5’8RšAÀe E“]£‹w²PgMº…ÜWÍ5‰`•"Ša!çÕs0š–6éaèÛjE¨ií5àJ²õeM]ƒ „š éb›aâF¡a-ÙUÝa>Þ6¤I É4PÿVTQ•F^‚ÙÆ˜à•—d‘¶48Ð}KÖÑC?Q© GáÔ x)F#ý5IŸ5‘ì£ÑMfg"‰ÂghtÑ\‰+žuhtÿØ£AH`§‘víYCÂRÝY…„$!¦˜Am¨ CýU$ tf„’ªLRÉ’6+Ád ª’X¥™]ÖÔ*ßKùíÊWªnزì-Ì.kK³Ë–º…GšX°-«H‘4¸ìEafK"’$B†,‰Øb®-€8‰ºÖÚ…Ð5‚„Ä51V]Š0–Ø•¡/vé‹+ú+Ý>ÚÄ6PO€ñÆ#CI4AÄ6‘Ôš‘8ËuÚ\'I˜%‘D#’´!Kÿlµq,ÈÒF„ª”ÄÊ#Û’†6m˜¼³ÎiÀÜ„-Èq2ÐSIom4a϶ØÜô»nH’FG-¤àÉÊ)g2ÔEÉ׆𽗒`…‹“kº…X"„€H„È" !e¼MF"³r»—v j)£” ð£ÿ‹°Àˆ>êO{ƒˆ]Bpy´6$8€$ID ¶à X’qç °êtUU©úëÑmXŽ‚$D4ABE ‘€Þª“@Bç–»Üúð²·AƺeœÆï²³Ž»ôôN‚iúå&¬$Zç´.ñ Ííh1iK²)iN"5ùº$ÿ…ˆk ô·b+nê´š6Š È‚(TC‚°Â3£|% 1à g"çîpüÚÇ>ô1 %iC)(‰‰$õ¿Õx«9Ú§Úàž¤¡es„Mªâ—Œ% B  ¤á.+%¨Ê„<€Ë*%tYË´‚8`. i°\~x¤Äe ƒ" ŠR‚F€. PGP…¤6XBkT»fª5m; ºD†’°Ñ§5x!Ûw B·D4 ®¸“»æ·-Ó K!½QûHko $`d#þÁHID¢Ái”¢0©¸LÊ(-€ALÇf%¨µO-Ë%[f‹Œ} i”ÿkBj¨º1h9š¯.GËϽld²“bçJ|j†‘àÉçÁBàAä(”\¡ y’:éÝd*Ù V“²œu¥±›çÓ:’†Ô…#…ÁI<å‘oéP×5Þi‹t5 ‰Å€´›¾]'$!P#%iCœXoÀ‹…¯ "ÁÀLR&Ü¡b¡ª‰ªªœQI,f“IX᫊o¨2!“1Íf ñÙF±§*XA‘ÅG§’G Á( ‚ÉHÎ5‚ˆ¨» ™T¥¹¬|J™á¡Ê#³’‚—éld9ö²äŸ˜ÜBgÿ N7³Ú5Älgœc3É›êó¹æ ‚ÿf²D.DHÆjA§!å±ö³ŠÿP¢Uþ±ºH’h™,•¨….îp‡KÑ>"!‰’-–’‘ÀЬBxذW°¹Ë€Žä’ôD•ÝgBÒÎ †Zˆ™2Ä-Ï^D³­…P_˜4žµÜœ/0¦9Sú¨¥û²¤ $§l"B˜õl ›pEë•N6†°÷oÞÇ6öñ K8aŸŒËÕ³$r6ä1òÁKkFÿs_M·$Á]m€[±}( “EÊò)§åD)V‰äu`J¦>ô¼êõWCõU#…ic½žŒìocòÿtFWæã äÄZ¶%Ÿ6'yÈhàt¶'íç¶Ó•¥4þ–¤|Y˜aŒZBþÉT_K®·ÞçÙ i6åÔKnºº˜Þ̵,‡ÊI¥V –¡#Ü¡…ã`÷ „³œ¹·î£¶V§.öõìwæœ%TA–ª±qÕC,½€XqÕdíãdéj#·Ég¦c‹¤µŒçJ¨´ABl5†8™Ó 91…\CBì7ˆ.X¿â¨94qËž ¿ªk¤%-(I Mr¡ÿÔȶ6õMf¶<ZC¹¸JSs”G&‡YÃ\=КòÇd2ôµï»Ë—­ûx{ Ê%H€m=l%©ÚÛé@âÃ%n°“'UØd?GaVuØW’i«Iâ©ï¬öcðH•¸1‰;ë¥ ¶ÆVÙÀš¤1HO•žê•µÍe´î*59Êu#ÌWà7ùÏ1 ;³v¤‘"è¢Ç /³[^Ä9=È^9’‘­qäAìšòªÏ‡'ë*‹ä9ç×’ù8“®åý2ÙËlBó@d«­ÿ%%ººßÚ´-Ï=#Û#dû¾µà‘[QV±5OƒÕC3ÉÕÍ{hôÿúáû*oÔ'¥÷~ˆ:Žæ ‹5ã§—ŒžÀ+7¹ªK+¥T›‰î×TµBÆ~#Ãv¶'ø’Æ*r]v#k²¬EtU{Å|SvL \Üi嬕¾Â\#R )š•€¾Z HÆ¡—ŒòºúH~C„~%°˜ŸTϯ¢ÀŽÙwM‹=líO&¤º&1Vì‰,üwÇIפSAÜj! ÏÑZñ­Yi JWîÍ–ÉǤ•,†ŸPˆ”U ÀAD‘üC:1„%ð´AÐŒ5€#ÈÎ6 UÅ‘ 2Á˜IÔË> a×?øÊ*L-˜Œ-°J|Ì´ÁŒ,›Už ]ÿçaÜ{ÕĉéFAVÕØ[3™rmñá—ð\XØìFÕ°Š¡VBÜž},ÌÜÆ’Ë—.„±˜ b_|Dѳ´NÆ€NÎ<’õÐ îlî€N<Ìð J0Ð?<‘Fì1a ï¤AõùJP!Å&!âCQGZÌ`µQvh›Ý’ ‰ùøH©áJp‰šÞпùßÙH®MšT ‘ðZ»ËjƒS• DËœTšTY™¾-Hœ˜ìÜÒvåN2•€ åÎ}Ê ’@¨J×?áDW0Rè•6Å?øa`ÁŽ!ÅÀPÐ9F\æ­¤¤…m(!uÀÿ—‡„‹PxŽjqÄF‡odŵ€ ©œCdÎ5 ÙÔÆ^ÈÖ¸P ¿ùGêÑh8WÄ-ÅRœ ØÆÝ#؉œš¥„®\\I D$ôDlÃÉäŒ,H4J–ŠÎÔ‚XC¤G‘ M@Äo“ ú ¨H¢æ å5\¢µ&Òˆ‘iCüi|Ù H" ç¼ %Õ‹$NEäÌTѼÌLøL-VÂê‹ÎÜLÎd…˘ DîJÁOÌ1û\ ÿ•–apÛý1Ì5Ç=â[¾…Üš dÜÕ„r Ä…TÇgͪPFÊ §(ŒÓü>ÐÌNªP$• ÕÜÌ?àÿ”9FÜLaáÅDZåÈL“0qððædñ”0QOI…A€€Î`Oð¼æÔ`OI2׬¼)R†‰é]6fKØ[[µáMDJ‘’“µÛi™±Xš9é£@ȉ† ¦e„½†|á±­Äo Zp$‡z†GQ"¡]"Õ¡#Ä™E‘Õ§Åãfp‰FÈ0)Ó5ôæ6€€U…Qð"ánVŽS7e% 2YÄ"Û1§DÈ‘Öb!-Ä€9WßéÂo@•œšØfYg ½ýÈFfIfxJBDN2…6šE:áÀ4Ã5”âb)›mdÿœƒèÁ‰ËÈŽ‘,€êô`.¥PoJ£ËTÂM^ÃG‘€J¾à/y垆Z‹g%ŽÇ_ˆY[&';Éu!{‰ÆÂ(ÆÞFêc~‚XYmF\Äš@T(©ÓÎ)Ä2 N¨Ÿæ=;¾gûŒÔ tÖgÂ(ŒµÉD©Ì†ìX_p‚ ÍÔ”>’æ …¯øÊ6Å€TCààÚ¤Uàˆ4Bpî‡(¶D[¡ÜdÁ¹½¡Š¢áG؈ÇHf5ŽÐ‘áaDI>)¦{¬ÆK„Äi]ÈbâÁцF’’ùÆßèK|™ŒH^à©gúý×z ˆƒ(µ°Oš6Ú@|ç©áE‘xÿ¢kQKg©‰z<™pH®ê•\¦=à‰EI”,Ä‚N¤`aâYÔHµ1¥ç‰Rè©Ú|Ѹ­Œ¦…’Þ­ža•¡–Cã·Ñl;9ˆÎFŠËÚða( ÅáÊ…Ût‚a3ýÛ²Ö»äV$”LÉ(–ø†ï3‘¯”¯hŒÆ< ¡$RNX1EÂR ÅÊH"Î@,À*“Ké «`Nçð?€ '‘¥){uÖÿ”+ôâœuFk¼åÆ»ä™ùŽÌ*Ê•Û_ç|AÎȽ[q%®ö^oqòÇñ’ž".d„†eD$xžiY<–¦ Û®ÅI’Ã*ÆN*Ò>€ Ò,ÿRXîEçxD AwYà!O’NUÈÂŽÖÕ§inËLì§zœI…¦Õ5u!ABñQ‰\ÆÝ~ÍšŸØŠðÁ,ŒºílN'rn(ºjÐÑÚ0ëûÐDsœ…äA‡ ‡…ä¹HAô ˆÈ§@—ªfFSZâNþæ„AUŽìàSIÂŒË ³JåNÂ\EÜ08…Ð*®vèc ÝZ¦ÝÓ)½¬þ­›î— `ä0†ÜóÝ’Qh“m¶ÆÝG¸.&!b5³äEŽDÐ"Ì6PmŒÙG‘ U”J„Ÿ5ÀXŒ5Å1•@`%–Ï€fÀÐH‘Qÿ[‘•2XU×™‚FŠ—|X   ð6sHÉîJ?òÇ…'CâÊïåÿü¥áê3‚Aì­üöÂGEp :…ÐÆ.³:rëŠ$r±iãè–È|Gr¤çGûsÐx ‡&5Jz”¦Sžr×ùâ±,—ãÄÛx|¡*Ú«ÚБ‡Ø[NZËVÆË-ç3×îqÛú!àYÆ™ì׈!ó²D´-ó7t¡7ŒEVC3Eü†³e4£(›£žrl£T7ê±añRŽ+~îÓ~ڗЪÄ£ÜW9N°¸‡W¸5I¬eiåÑö+vΚ07&‚èݼ!æ·iè^߆D$­ @Û6˜EVOuU‡ÿÅeÿGkD þ˜ìV"´©óÁ`Râ°sÆu¢Ã$ò NDq¾¢KÌl‚Ó:å“«a’̲Î^|¨ËH‚®C'„ªøÌDÔñîj-.B,¤_fЙ“¯H5c4uOuXè§o@ÞÄ%Zâ–y η:oå̑EÖÙPÉxŒ·ÒDU}ÈQhüÊIqT½Õ¢.dŽpB,6 ·!Èm—áFlä’1÷L­ËRØ‚qa\öÏTÍ)^¬Ým§·pFì:s3O7fcqtå¦õ%RžàX÷ÔùbÁ£;²dH§¨f''D™L#ØÌʨJ©Ð¸°ŰÒ<áÿ¸YžL_ÍSôô°¾S´Ìá+éÏ]Ú”…ŸYaÜžÊÁï®^”0lutOWL¶tO L9œ9\ƒØ€ GëÃeC‡ÉIgÇBëøz)QÈGo} øÙžÈ’È&jgYÛµÙ(ÄÌ ”ŒçX#ñðDP”ŒG©ƒóÑ@î¬Ð*Í’õµô nê³BT°ñmp”%†”a¤êáÛˆÚ–1.Yòâ5–P´Gô äeµ?ˆä6ă<ȃ hÃ&ä7 Lë$NÔB PByî? f¦þ.ˆà XRâëvã7&AêEA´BùÇDH›ÿw{y"¡®6IX¹A”®Æäá&cÎB˜`¾GhY×B7`G†i’¸qÒ– h$/¦u¶Žª±ÈtÊš„¤<ľðAHµFO @>Ð=”@ÄA¤;\êþƒÉ†8OjW·LPE;é1QÅQ(#)ÖNpÔÉTçLRôN´5˜ÙjÖCÄ0G Ð*)hU $ ùÒò¡m–€R,1x,QÔŸ 2M…õÉB49µ®w9N÷e€99ða|KxõWÄ©Œ20æì¹:…—i·øÈ<5JœKÒ$L‚uIÂ6èÀU÷„ýé‚4WÒu=å8‘ÍNKÿþDt5 m¯iۦϚ6k¶.Z“¤#F‹Ûl}¬h+¢5kºLj+i±bKm!/¾¬XrÛH–5-z„©£I”fĈ’¨Ð–?o¹ì9Ô&L”Æ”øPÿ¢>Ž.õh“kV GOÆkðZH[¶$%\¨ïÛmþîÍ“7/–$KŸv}’éŸZoj*¬¸±bkÿ&I£-Rš6ÿ’h“Ë ¤F¶§Ù·W[4†m%yÜy1äF’ˆØkÐ1bµú¶i»×jìŒ/eÙ–¹Thΰa;7 “wðž(;Ö4î*ï¢Ö’š 뛤N¬'¯™ì©=¦Ù—_¡JïNënîÁF¯®½§Ìm¨óe«ïÛü¶óÎå/B Å?PáŸÀÔj«/0’„'$c ± |p¡Ð5ýéë@Ä*Œ¤„ 94П‰Šm•,Ú±}:J‘9äFÿ‹¹ñ"Âè–¯¾›®º¯˜cé8•³&;¯0* » ˜z);ï¼»‘;“’*’Èï–Jq¸‘@Â1,”²œî7³„Ô…,â"YË@û´±DKlÙç7yÃL¶Ûç/%ӥȳÏÏÀüÁ]ÔP‡`«È!ˆ½+“ÕóÞªÖVƒ«øJ0“ .Ê}ϳ¦Ë⺕¥Sùª£)cä´ÅO«6µkô«•a䯯ŒØ¥$úÌ[ܘäM7t±E7™c–š‰NPOk 3Ú¾¢ÍÜYrž»ý–rË'o 'ØTZº9Y´á˜«/s J»™ê2G™*ºñÇ{³c-ÒVm\çé$'a,J×Psí7+VWNôŽ9nÿ¸öP>,Ž!/*“rû$á€@Îça,ø!˜¨­d; ôˆ¸Å Ú(mèÌ糦 {Žüòr;ÄØµ’)Â`µ$™°ÎH§zNw„Tî˜Çc§ÃZ×P·ÀžîWO¹HÔ¥š¼êmT*àÈlQ“¨\ðWWêØªs7`ñ…P(ÛÆ-fa‹yØc÷ÐÅ/lq‹Ü-×RF¸å!ÄX ‹iDc’` 4È mØG,óP¦~æ2Úý®Ø§ØØÃDSñùl37„y$w«ÂÈì¼Ö£Â„*šQ{ÊsªæíŠV*Ò¿ &ê¨tÒ¡Øç5«>â®x>êšMÿÆ”“X«hïSˆ#ËE'ÜHŠO‘A$lAYH‚m@:)¿hÒ‰EHˆ%¨T†K] ùˆ¤âµ¡¤Lœâ#¦bgA¦LxèaÙfOEWà©ð`¤žÊnK ä”Qå¶Z½íWMÊIHÔ3¬W•LoÒ¡ö¨kéféÌa"A‚‰¨ÆCmHÂ?ÒЄSª¦Iåü9+jzm9‘CNd¢–\*±aNp²C%ÿá‘x哎ʲ¼Š)tŒ_áàtœ´F\m¥(¨+ Q´¤%mÄ68øÜ5E¢ó*U‘(¨‹$ò"i!š;“øÌØ'ySÊrÿ'iä*AüÐ(÷B„Ö8F”š@gÚ ?[¨‹\F'º6Ä.m؃*¹ÈO6Ò[! IPY˜¨$È‚(Å4#yÃÀ$mG™¦sN»£˜’Í(ÝÉÕV˜ÓÈ"² NNxÕ5\n'—ztΰâÃH[D~òcPÞÐ’$l#ðÖA„f‘¼„OÖh„?³Múc“ÚHð0Òk´auÉç㨚ۢI:±‰ˆ,š‘Ñ&è©™m&€m´a²„•„ŒhÑ4*)Gm|+E-˜” ‘`´Ž_«û´\©q7‘yBöu<ìX‰H_“`N`÷ç™Åe:“>Ú€IÿL•nÈ$~›˜ÑÔ³ % øÉ"É ˆÕº"b2”! MXC®â…7¤[Ví°hC’¨)[€®%‘…'9) Dèä@Ú_=f'SU‚Û_÷¨°§’7m„Š.#Æ»f2Ìl· ·æ3‘ž”*b œfœ ¥—@V(Æ:׉@¤"×h(íY""y|û¸‰Cs˜pÙ/œ†:åò§ÛcíV·úîZ©“§¡¨˜¤$pñ6àI7¨hÎ3õÈ:"W¬ãèuq¬ šdv E¬¼¤Ð’½¤#¯'Lé‚ÄOÙHJÖ§Éþ£©Ï•_üáÕl£ÿ$ñd#Q²‘=5¨›! ”Þè¬Ê9kxQª%éiˆ˜n`цŠ-?Oº˜ =DDQ(·9ZÊØ‰[w‚tL½®m¢Æá•ò˜Ãä+Ay[‡á™9X¤=*ó6wŒfL ‹7È1 |a¢DpÚ6\ E ’pZû˜9O…q÷¡6\¿B‹‡·5Ьj´‘+¾Fˆ5˜«<IhâXË* X£ €-˜j+ Ôè+F–ÆÇ‡By`$ “_·c%æˆVñ€"qt'*ÁD½FšžfxÔF¥@…æ(ÏbŠ®)ëi–ì(üŽù(¨Æcçl óJèE¼â &¨¬#ä£×ÿF¯fΤ@èC-Ê ˆÐéCÌ 2É2¶!ž8n‘$âºåsã2l@¢G k¿ „~ Ír®E°d&ô…;²bÒ (¤ôª–b fºÎƒ¢¸ Ó,-‚l0G˜»Ð<šG¡@':Ä$@hÄN&¨°ŽÉ'0€ŠüFLRdkÃ,¢ëÒÀ° áËé­"œ¾éqÑ÷¡ È*‘ àtï)tM:‚©ùîHc,H·K;x…I¾ÍÞZøÊDhjúHa+—Jâ),ÐS PHÂ#š~‚Æ:bQ(ß´c½©›’e>†Q•VÐkâD”ñŸÚEÿÛE« O«bC¡16¦q¿‰!”ñ-H¤7´EŽÉ: y\ûÚc ?Ðñ†ðÀ¢7`'|*|¼Ø®Ê1Gf»p‚´ë¯2†ÄBæy€Ã¾‚‘{ÈÍ Ò@0¢Ld8d‚WÇ%$ÒJ(r"%R" Æ …%$¢Àâ^‚Ãvª‰_ÆlRe¹b±fŽ7àqò`g9X*ŸD iN8˜é ¯¦È /‚®¦,jÅÏÂÊFÄ@êüô¦Zü‚á¾ñG€ïÛxé)srm@ê°:°E2*q®øÒm*-ð8j2™¤«±Ìð°í^~¥€¸DÖí$¹ÑÌÒc$ Ä""º×ÿ‚qœÄ‰‘À)AÐb“dÁ$a“ê"07é/-°s¿s1ó0'Ã1“°³°0-s“&Cs0#A9 Ë2ë -HÓ.—ÆÃÞó!è“6œ‘>åiú“6ÎÓ?íÓ>ï?™i>ŒDöS?›1>áó>?Ìÿé?ó“s˜ÑÛÅÃ(BÔ@3´Aô>ÿ=ô@94BtDtB“&+hŠú\t„ÄãÒ\ô™’_n´Fu”nvé!ÇCç NbÌmiEñŒ¯G7æ"œOÇÔk^˜Ô(ãMH÷q8Êò÷q ÔF5%·ÔIcR ¥Ë¯6Pw¦¡ËðÂÂæÔP‚ÊÆ:¯ÉÞ+`ꨢè*`gÜ‚ëÛ¾¨Q"±¤æIPÇ|¢&_rñîô—P¨ùÊWn'û€'MwC¾&yIK™xŽNHÑà4£ ËÑ|£$WT¡Ž¢.% +ÈÓ¾¢Òl,%ˆ#IUUº@ÕL‘º °šÉu€çlõEºÑî*Uƒ…¨lè˜I$ÿ¼By”GȦä˜.Í"|µ™°ÆD ¾lî°Ð’§év4J+ñ¥¦Ô)e„öêW¿h=ˆ.#zît|U'¶$­†lœ´F â¥¬Tù5ñdTUøÅWN å³* ÏB“Ñ]ø§‹JC¶?»HA«b5t*6b9ça3cST" D'¶A”a'öa;Vc#vd5vdÏóE%¶`)biƒf#åeMC/eQöDy¶‹GLT¨°ˆ–5'#9S³h‹v6÷¹ns3‹¶ Öh‰–:ëBi¶i{êj³¶ji“k‹5Ã8 ³i™¶0-ÓkSkÑ“"³.œ“:mgsmÿ{8§S¤³jçvmѶ5¹v/Ðâo•¶6{ª¾´“3çÖl-³.Ö–h×vm“l¥ö8 ëní6kws7mËÖ°L‚¦´„ÙKé#ÿÊîJwu?Ò"+òu]w XBÆZ·c"ÒJDjÛÊFu¡Ì,eWHJw"·Â¡X"cÄât%jÛjƒ×EDˆvæ&v7%–·![âwY%6¯È8E™zì„BPUdò*OCâR׃aˆ4,0S`ä¥àË:ø”ŸÒTuµlz'¯ÈFâ·ð®Õ€ˆÿNñ[Ñ×IÆ ƒåXIâ)PÂWó%J ¨¦÷nƒ¦Äh\¯½Ü²ùîÕ]ÅuUÿh.jƔܮ•Ó¢‚n6æ+Á"ºä­/okê-ó~F‚„‹ÉèðªGÖëNç—ºüñtðÕ&eÓöèæVÅ‚ÌÔCpR 5•úH؈‰G„ƒ…„Ä"n UOÏQ ™é„Ñ; µOÁ„b†ù )}Ô˜Âx¶˜Gí(‚}î ìPïÒ èøï‚Å´£tn‹‰ðŒ°‡ 3ØpXôøHUw‰¤[ÁƒLƒU-_oL<>1c>­P…ã]I8~È7ø8u¦Ïð®e?Ö9Ç‹Å[v=?v•¡ñ¹t!–_—Y–SöcK¤•#=A¢j€R'mé[©©éÿîd¢ì ¥’„°Iƒ'ñªÔF¯ÄWb'9ê'XVQ™FŒ+†·m¤ƒw]w%Z÷µ¤"Ç b®—±¨xñvl‹‹×›¯×"æF,ÕKfçwx¬Êè^xEÈÍŒº2„Y矿x^$8|?°NŸûtçUÈ£w%¨€JÒ½"m]Eê|S…T¡ò[A²‹ƒ^b¨þ¸ñ€”mú÷Sâ­¼€ (|ñ»—Nému=bå7ŠðºYZ[•šÿˆZqn)õjXè¨0|ÛŠI¦³Y-«¤žýµñÈkŒ § uÄŠ Eõ¨ŸÏ ÷ªçdì)œ¤ßX‡,‚o¥Áد&m'¸…oXÿ…•ÝØtÜ*oM¯ÚvÏWÍwÒ‚¤lFuÆÆG:õé‚„£}¤¬H ¯_ÇWã¦äQ;P ;ôQLI¦“ôñŽ€®F¡²M€bb­˜bǬúâ!ü÷¦ø:dµw«ÈVÇ{·dëc±(áп¾Ô?H€PàýÑŸÜŸþSCý‘ ì?þíýû?ÿIm¶Ú(B‚H "$,DС„2D˜„"ˆv,‘#B[ÖÿtY³ö/Ò5[ÚJ^3©íÁ–0mmcim&É['MútYódÏk- ž$ ³¤RžHsâ¬iÔÉ“<¥ Uj¨SEY²¼6´iVž5·YåitåÑžJ§ÚZÉUmV¨^•µ™3§6mf÷æ$J´/QkÛZÖF±aÅ„›},U1ß½ž\¸ñdʼn/óÕL8oæ©2ÿ5jIÒmÖÔVUK5k’õj«:Õ¦Ö¹vê˼oIŸ=9S+ÝÈu[¯»Sh]œMq¯¦y4xP«°*lWµÜ»Ö×25ŽÕ-êÜÆY75w¼yð·UËf›xùÖFJM‰Ö+t˜2·*Õ…[ÐÝT”qÒÿ­•SÆ×Üþ¹6•oQ‡t\=]†ÖØæƒÝ­¶›‡$q…`S :5•Y#êgÝØ™D†b˜aTmùg—ƒ6BÕ¡rãegaV'í¦i6 iMUï 5Ýzô}åZP² 8_‰:¨£ZÁ¹Wå“òÙÄ¢{Эx¥jAŠ©Ÿ\f¶Å]nêmãT?-¹¤ƒ·aŸ|H’Iç\x†W¢ƒ»÷O¶jÉ¡ˆZ‹¢Ž"*‹-‘>J©¤–6êh¤“>š¨¦•Rê©,µ„*©%zúiª–º©¨¨>ú*©¢fj馴zŠ)¬–Lj+¬”Æâk¯ªÖz+«¾rªè«©¢ª,¨µæzè?7ÿY3è[&Ý¢’-ñí²“N±]ëR,ÉdË ·|K­W»™XIÕR+˜& ºàK^H.½â&i¹+];¹øzûoÁº€Aߢ߹%‘ÅÔÀ`®«ÂêzE–½IÕ›.'W®T»A¬pj7Í{qÉR}Gî‰L‘µ±Çû4òÊR ‡Ä‘ݲ ¦“Žzhߨú3¯ÉÚrªÏ’* ô¥«¶jì¡ÀJ­(°‘žÊè¦SO:uÔM;}µÑ¶t õÒ«Ž}4ÖH¯º5«˜’­è×bãz¶«Œ«6ÚŽN tÒfS øÚWÇ7×w ž,Ö@Ó½·-’h#¶¥7 nk#=?ûôÑQŸùæ¼Ù*]·æœk-zØGG>kèYÛ¶Þ—ݺ՞¯zÒeNkà›ƒ.·Ü³Ïntð™ÿÞ*è¶‚Þµ-‘ô,v£‘4G#nDÒõз! ôÚË¡}ôÑWßF÷m8GøàG2ýøÞ7r~Ü·á=øÚÃýüöË~úìS/IûÔÿO?ø9‚~ߣ^øðG½8O~ , öÂ=Òý`÷Àô¥ï}þ«^ú (¿÷9Pz$Ÿô¬W¾ –°|ÖaýÖ·>2}ÝcŸ8¾öÝ}, þÜðÀ^o€;fox-1.6.49/doc/screenshots/iims3_small.png0000644000175000017500000005670411637250333015376 00000000000000‰PNG  IHDR9ÍÕJ IDATxœìw|eþÇß[²»)¤÷Mï $@B± ê©çéw¿kzÞYÏŠgA,¨A!é-@hÐÒ{ÙH²Iv“-¿?6"-`Ên˜÷ë•×ffž™ùÎóì|÷™™ÏóÑÌ6~ ~’‡~Ø)ÄXÛHÊDH$"ô0 FF`ha4‚QD‹ÎˆÑZ~òZÞ˜©C6~ƒ1Ó±Èd`mVR‰[·è[ÿ„|sÀh‘ŒdzAözDz#ˆ£ ÐÔØL~™†xy5ÒÌr;5#nVñXŒ‘=ûv“- %´4›²¤^hY@øÁ7Œ˜ºr¸#HM?‡  k½Á´L¯Ç`£gm…‡d!F'‘ŒAÁrÂä›y"QGXÍbSc xº‰™>XA‚Œì#Á×AL¤Sëelëß½ƒŒ ’´›w£¿xÿKåGõ—á(¾z¹„w†HojÛ—ÿņȘž C~Ù>ï¬ ÖKLB„Œûú[µ›´í7' Ó+p“ÝÚ>…?áOøëÂ?=Ð £0âêd `ÀÑÞ £AµÂ b¤Hì@"‘„@·Pò òÑëZ®$ â¢åh¶mãH•ýâ}øãd+Žl( ¹ÅÀüÙÞ<ú•âz1\2© ö&ÿ¤–ØÑ.¤žhÆÕKŠ+FÎÖC‚‡ˆ%âý$œÌi!:RÆïÃK¸'Û„DO»äò§W†Ø´+WŒ„?ód=žJ?’¼Eì-4-GodûI±Áô21¨õè$"<Eä_€ª2•Z˜;¨–Õ©ÍÌðÕ2:ZLþg–r™¿’¹wùp£/Ýa…—Ud¸ñÒ0#‘u<¹”r*qF@IO €h1˜îÇõТ£©Üݬ F¥ªo-g" R¬ìÀJŽ®¾™\ŠLÂ}¾ù|T›A‹}, fh‚ {{ð§À,Že+ÑI$xêZ¨)(¢¤ÂìPú»Ñ§ªžqS]QÖ1õ!2óùï^[Þ¸_Ìú|'þ>BGæ±l¢=J¥HÔ6JÉ(¯åõ»ä¬/¶•Û[ã Ö.lnñáÍÇ@á¦%§BÄ0ÿf2‘éÀûˆ©ÎÉ$!‰£Ùà½E؆€Z Öž 7ì ASkh ÕPê7˜?¨êÉS;TAùI9yM®DFRuZD@\IÖdg(zª9/qñL@à¶GˆA¬±tF4ö}¤è› èõS”ÉAjƒd ‘“£‚ü#ûˆv³ci-}$ ·í½ uE`d€³#ó›@/§ÅÑž P/rê ¤´˜môHêZøhù~w¿?C›¤”¢eP¤5§‹¹ w$WçÆ£âfW Ö¶ a´u£TâЮ\½³HÀÁ*ªÓiѹ’“QC±Ä½#;r¯Âàè Ͱ‘N‚ÑÑj+ÀÁªkê0ÚxH‹XÝ€ÁÅqyÏP׃ Tç#nÒ`PF˜smØõ¹² ªÊ—bPC]ëòÆ:°±u"£¤ö@4vöÐXmŠÛÉZêÁÁQU."ƒƒ­ â •<#A_‡¸²Äô¿X‹¸$£ƒ'Æ>N=Öžm'—y üИ­ªInù„ê3A,£Œ:0Ðéas}gS31°ÀHHËA.©¤€¡õæƒቒ9 $9F@g½/…†8»rD¢Ö¤U/§ÕIØ•çLsÎq¤b+÷«@d4eC1€ä’ÚΈI7'г´iz¡ Ì £Á$sSÎ0€LÏ„¨*Öe6#•yJYô§ku„äf>ˆí üšëŸN«5H/N”–©°¶±íòº'S>kKrÖ6¶m3,™óµ mÿK½P"•#_1»[Ù¹s'#F ëñ8.ÒÒÜ`õbn±t&:©Ô 4‰LKsà tWœ)b±ô†RRRFÚácL™<±K‚:uúÆ%¢×i»dû7ËÒåk˜õðt³ˆÇœbéL¾[²œ'æ>Ñ+ÂwK–óج{:ŒÛ–›ê”””‘zð M:†ʲ•)(d0uJç';£Á|t+--úëÆ£V7’~"ÎôèM¥RáïïÌ „¸nÅRÑj¯ž´¥å³êo®¹^lS /Ü÷TW…Õ)\ëØºiGžŸ~4ÿ[”J?lmmÑ%xz¹R^QŽ¿¬\³…Lº÷®.¸DÝÈgégùìÄÙö ”J¾MŒaŠ{÷ wó T„†…·MïÛ¿++ÿn£·q(í(ë~JAV}å½búõíGN^ND&`9è;Ö“+¯¨dÈÐáôíÛ1bNfœ$'7‡°°0dV2¼<”¤¤¤tK’{É+€ub¸ãNÓ¨{{8pÐôÙhµZT*UÛ´\.ïö’œ 9§€uÇ2 ®¾m~‚‡+ ž®¼ùÔ£ÝÓoå§ã§©=þªËšsr˜>}:ßÿ}7G%`it(ÉeggógÕLS%‘äCß~}‰îMA~û÷íG*m¿™CûvQ­³aÂÈ„. zAU5Û£"Ñæä298˜¹uµ¦WWŠîéÉ©Õ>z‚ˆ°jjÎ#“]º$Q©TyÞÔö?É Ñ·Ïã›wARÌlJøõ¦D—VTHZúYüø3Ó§Ý{Íõ« sh°õÂßÅæ†ûJݵ•ÐøQ¸ÚvíÃ$__´uõlzbîËTÀ¸üƒÇ>[Сm•äç”Ýÿ$гtø[ê!sæ\¹?™v[ Ûq‚¡^8vøÚ-^î^måte'xýÛͼù·gؾñgÎäWâÅÖƒ¥(<­î-CgçKnnîAdîN¥ÿ]3›àÓá ¿2QÕÕ\Nqe%¸¹BÝð 4¨<Ã쯳蟳Hݵ[ïp\¤¤«ÄÏ*´r¬ öñc–¡!F¦ ‰åti#1~öœ8WDTÂëžìju#Å¥µ”—G¯/Ä?0˜ÔÔT&ŒŸ@VvVû*Ï0â¹/õqå÷ÓGµÛÿ‹sâ9q®’7¬äá»gpç1¬ß´—Øa£(<¾¿hbB};\7œÊ0ý]Ö›PUÖ·Årçÿ}G‚‡ qI‘øEÄQzîâª\*• D)]I²áïÿü’a“î"Ö¯O»ºññ°aÞWÛIÊ)gJR'2Ë Fa«@£Õ¡¹P‡N¥e$ äÙ93ãD"‡¦ðÔI† O$íÐQ•$Ewè¾®5õØ›››ÛÍ߸i#èumÓ%G62æK8¸u!û7íÄ1(Û†2r/€®ä iuö<|ß½ä¦ÅÏϗ¢ÅøÊ^!.6‘aÃÙ»ç±Iƒ¨.,¢¢ªš!Cqº I]1z{lu( ìø÷Y k¹©ŸâÂv<(›ÉZçxf÷á|íyìÐé.}Ѥ^1¼ó»FþöÚû84«¸÷¡YTäf<ô^¤‡–óåq#c#³ÈÕm`}µ‚?ßD‚ˆss#ÃÞžfyI>JŽVV^µ'W›µ‹uõT­û« o¿ñ&¿ü²ž­É[¹ûž;ˆ‰cÿ®%œM?ÌÈ`gþ»É@T_Ž$ïäå¹×~˜¢V7’Ÿ_HHXõuõ¼ÿÁ&úGK¨®ª.Þh¶¾b½A 1²é²ý¿7ïSÞ~ãM~ÜðyGWðö‘=X9yS²n%›ÖoáÙ—^'æ¦jçÆ(ÃúçRÂ/ûÓ±ËÈ¥ Xͱ®|ñþ<>_ò-µEû±ŠeʘDžyñíë&[‹»¯'2N“•q˜XWgqpGUÙ@Æž,žxl4™ÈkïlõU¼þÖ«¼ðäãüç½¹ ðǹ6™¤yŸ^7΢¢"T•çÙ´9ƒU«Š¯ZfÜvÜs÷H¾[–Lb¨ ëwìcÿB4»vã¢Ó7Êžý9j´ºjþýÚËüù_óí'3#µC1Žˆ áó¥+HMÝ…³_U;¶°uÍœÎëoî ¬o?ví?MxT êÓÇ™0÷÷„vr£ Ü2Jr>>>Ø9q$r!jç™móœÐ¶hÑ6k©¹P@¼ûùRDóìôçÙ{ì‘#Ç£póÄ#n¡¥Í ucã†(lÝùÝœ vêa\Ön$éPÍ“&‘q×x´Úfðñnß““÷A)QsºÖ/I6‘C†ã`l"yó>´5ÕDõ#$º/Y»³‰éß?[1UµLá Ôj쮇§§+'¿‘•OjêkÔÕIè½+My¦LžÈïfŽã»Ï?i·ÿ‘#†‘¼yqñëÓ„]@Gž#i`$JG;tMÍ×Ùð-ÐZ7ÕÖÌ/¡7¢r2qôqæ¯Ï‡q,5¸©Ã Þº”äm3$±}ÝÔiðtm‹=.’FvnÚνsîãÔ‰ÓDF„ãé„‹¼w”¾þÈ£òÑÈxxz4GœàIã9QÖŒuýÎý ŸÌÄÄ,¦O¿²7«ÕÆ¡®w¼8…cP gá‹å›©È=˸ûF’½s+¥-¾L¿£/çTõ(½½8º#GC}‡c”»¸2áîqDG‡’v(AýÂAïÊäÃ8ôÊ<žv7-uMEGSÝGARBø± ôÒŽ¸[üå…'ùìË¥ÌJNQ9Í9àO‹®…ôôtäV"¾˜ÿ.A‘q,úú’tbŠßå—$6 r0ý7á&5vû÷fÛäø?¹¹S¿j%î“&“aogêÁ]Ö“+©—áÄhä…§¯¼Ÿs‘Ⱦ·.ñ8uÖýînyÿ5Ûw$`—‘AS°S&?ÔV¶¤^B­Žäu)<öôn¸ÿĸXâú÷ïp< žn¤]c™»\Ž»›{[, ¦'¿~á±$)½`tâë<úÜÅz»rÙEN§À#$‰;ûr÷è1í–Å^œÚ÷Šõ†0âÚÓŠ••ÛPl¬‡P_'»ârµ±©›¶³owÖï8IBÿ’†ÜA\t0'ÂCˆŠF Œ½ÖŽnãð1[§aÐÀÁÄ´®òæ[/ðûçæ˜ftÑ}h[§C=9¥Ò‹É÷Œ!yÝf4Í:þsÁÁÁ,[¾Œˆ°Bƒýº:N† ‰GµðS’™M»ÿƒ»îâ•”'í8€êÎЧ--z”J/”J¯oô7ðê yìÝí@u•Ž»Æ cì˜QTŸŠÙ—ºž¿m±tu<[æÌ$+[Å–_¶‚ß%ùJ¿¾ýpwwGémêñtf,Q ‰DuÊ–®¯¯/ãÇß‹L&k›'“›þŸ?>EEEmó¯&N‰½õ‡9½ƒß“”Ç „8¥%yÝf–-]ÆÌîcü¸Q]~_N¿ÖêîÚfÔ®.|ßÜÌèº:fZÛ®3beÕ½N†'0uÊx>û|)^^ÞDFõA®(fóÖ•Ü5vF·ÕOhˆ;Jå4t-í/íí-{¨TuU5v}ìÚ¤9õõõôéÓk¦=ÑñÛ·'7­¸˜ìz‚ððHâKËP%ÆãnoMRýìјNbûîK´çΞb×®]èõ-üá÷ððƒ÷’²i§2´Ô×5sß”îKp±±–]홇ŢkÑvxÿU—‰h±ø.Ðõˆl&K¶p¾¶'[¬d¶=>~ðô™³ôï?°Gc¸œü‚"üoBÆÑ…˜S,In^>!ÁÁzáµÜ¼|‚z:ŒÛ‚;w2tHB[>sœ~ó=¹î *2¢Çíå(½œÍ&sŠ¥3ñUº¡ÕÔõt]‚¯Ò­W¶™9rêô)†iÿðGz­ù•UÕH­„KóÇÊJ‚ÍÕóÕ5{rR+…`¢) `\n’ùk„—8˜Í-ºèQ„6²,„$gf44 ÞcæŽÐF–…äz5fùtõFh4êê,ÿIœ£“32+‹l‚ëR[[Û+Üp=<½z óå~‡=EOÕ§EžauuuøDXü{T•*dÙ×Å€”°¨=ÆMѬmãzÅŠeÜ_`¯‘~ØôqÇÇ·û¬QÌ©>-ö Óë´½æ x[ SSv¼œ0}º]ß饻i¬oßÓ9‘~”ûï›ÜCÑX>æTŸ—ä´uÈ–$cDwN ’”•ˆD®ˆŒÖ´LLêøþš ygÞ|B](>ULü Î76£©jÀÊÉ ×@jrÏ!‘èðV†’Y]IX`Ãã»zHyRWŒâãµü}iž5ª—6bè¨éæ-¶¡Õ‚e´<óP»yòO°|çi<±1*°²*fÿ‘z&Ž eëY&N¾‡ªìT|û& 5áI]EÆyh¨$>)Ž’¢<¤H öräxQ‘ÎØ%H½|±ëäŸç’’2^zåM¦Lúí/fÒ¨Îñ—O¶ð¿×ÿÐv’­^°ŒQÞEIi#1¡¾¬_²‚¤I^¼Ž„Q£®mŽZWÌü­¹ü~êÕ[T)|yvˆ_¾õCžü”~n—Ê}þöËŒ|p&y9:tÕeÄ‹åìñ=$Œ˜Àî”팾oR§Õkg×ço¡ó¾* 5H·îÄ ³A¼q)²ô´ã† Í¡} 5FWdv¢;Ñ–ƒ´¼ôoÄÙ§=lo[Ž Ñc÷FlŒdÃOˆ\iNË£íßU ;—ä@‹¦…?kRÊ <9u Öþ€³Ï@Ærä¿]ÇÛÀÑŒÒN;\³D[ôd:uЧ·£‹ GVvCf ";-Fi#ÍsŸÁú­7hyüYÄßþ.6è§ŒE\,Eû@d[ÊÖ­¥Åµìû!)UaôñF¼+|1( E‡ÁÇé ¨` p@dtnû¡:–ËÔGfâ¡ÍfåöóØi+ÁáëÌá­? ¯³ÃÆ£ª-ÉEÆÄr臓Xòùàã\†Ä)AnÍáûK\iÝÉ©ƒ9S;X›RéÅ”IIþ)…)“'’q*ã7m/yùJ¨¯'5í o}¾'°Í/D`ÃJ˜ާ+ü°h5Rk[æ-^Œæd>®^vÄŒŠ£0¯†ƒ»·óÿ~Ähï&ÒΠQã¬Bj%â®W>\¼ƒ'̉Üó(•L›ú .ôwi@]^†~ãJ¬&L"ÜÍ$’õë?ŒÒôìßÓÈ3šÈÿóÿzýÞüûGôâͱ“Å íGãήÏßBç=]•Èiypå¶hŸžƒÁ^†nÖýhï AZî„ÁÛ†–¡i ‘Ñ·:ì@uqƒ3Fê@n‡!Ê}X¢ó5|#Ð>2åWû³ÁÃÅg[Jr*ð ræD^%þ¶l\—‚w¿ÈÅy¬^³Ÿ9ÿ˜Âþ}ǰUÈ®Œ»—aŠ@óöK ·C7}´ifP(FGz¬¶l¦%.qMDDóá_¿ù1ÍßÙ® z5’Ì2Óú:-(ZÕäRQ»ýéfMÂàwå›ÉMÊÆ%‹Ùtà,!Á¾xúS•ßø¡¦ÏP8I‰«Xž¼аqÍ~ܰrt!v@á¡Dø0 :·†&õýßAq«L™<‘E__ß­¸£l>˜Ë¨ø`~X’ŒGp$Ö†:ü/Ö“Üž)“Ç’xçDvÿ´‰)£MvP.‘¹tG¥#µqfP¤;™ÞJW’yŠÔ“¹mÛߺ/_'ª4È¥ÐëqñàùG¦€®åª1yzz20*‰ø;ú³å§cŒ›yöŽLœ0±Î_Ç«®w«tf}þDŠÉEƲ« п8mލT*”>–SøjuÜíõ®«C¶d ÍO»êbѾ-ˆÝâÐûƒÕꣴ<4<_Û@`p¿Ží^]‰Zê†cFj.¡Qøv¨ìÍ’yú`»é/.âÕÿ¼zÕï˜9Ÿ×BÝD·>x¸™úì .¶É— ñԳ̀þ°¶¶¥ªºÚâ+¬­ÍàD‘Ú_3Á‡Žãb-w$Á™V‚⢼›Bº£Eëó:^¶ƒ‘šz Ý¼˜þ=c'ÖU455Üd›Ü:æVŸz¹´¹Ñ§$kâähYíêKÄUnú[ú•Âå¸9w_›˜[}ZdON›7‚ØüèˆØÚÚ¶Wv ,ò «««#,jpO‡qSèZ4í.¯wïÞƒ•ÜV› æ$^í ®&¾ü˜µZ ›6mæÎÑ7!ã²,ñjÕ"Ñ6ÕÑX¯jû;z$µ§Cê^tjÊ*Õ—>ÍŒËÛ¦±^ʼnô£=R—ÓX¯bÆŒ,[ºˆ²âlŠ‹¯þn[K§Ó»²ùŸ‚Ìž–‰S0*í¯[V”¶1AmR’›+§céÂo0Úºcë¨`êÃxõ•Opó’âæNÁ¹CÜ=k&)ÉiTUd3ýÑ'q®ÌgGqúj-rŠË°õ샯Wº¤'H=ÖÂÁì?XApP(Ìß µb⥽AIi9JoOüý»æ ëVkWƒØš–±ãÀ¶Í›‘‚â hæNÄÀf"^÷Úë„% @"•±÷Tm(ÐË5f vê¾_{ø1#y¥tÇD=ß,ØÉœgî½bI~Æ/dÔrψŽOgHR<ªJµµµ]{P=H§'9iN)ÿ7ëù NGäˆ^rl´Ü3 ÅGóÚ„¨F?GD°úúàUÅ¿FÉyôF †˜$åEHÎèi¾(Öcë’À}÷Å’²qHíHKYöI[6Ð$|ŒŒ ^ÄE ñ”`W]AáùÜ=°¶µ¡²¸–¸±ÁÚŒLîT¢°³½£cçꆞ}z.?ño¾ö6nîÔm_Dtx?=Ʀrä+·¢K‚¸º––Ĭda´!®*1ÕëÀhÄ%çÁ¯õݪ— º1pωW+Õåd-_ͬ矣¤QÅ»vðɼøú‹ÏIšõ.‘’žþÛH­D¨âZ‡JHUm5A¡øé« '?Ò& ät QZ~eë ÙOžÎ½j,½ñßc~“¨«‘­ÜFËпñê‘ìÝÖNˆÚ|ÿÓ¢k‰m1øÛ`ô¸Ê/–"kQK–'£QW²sÏвÊpòômŽ®&ᣫžžž”•W@“ž~ÁH;7žýÃl²Žœ@iëHdâ(<ÝìÐh$Ü;óq¼D5¨;ÑQ©ôbËÆÕ]ú/ýè1èEˆk/ ¯Mk½Šk5¥¨ÌÂ*%U›‰x…+î6rs³))("ÔÑ…ïפPR«eÐàá¬_²”´3mÅôj޶¶UTÿHô"Ü®.|ÏÏ+¥¢"___ÆŒŒ£½†%ÅvË¡õÝ"¶úv-?tã‚D¥RY܃‡Ò¢,Ôõ5mÓ+V®aÖ¬Y=/¾‚¸÷Š3OD£Õ +¨­­eoêqtzEøÛèq1pg&80=êî.acg±jÕÚvÓ}ì]ÌC |1pïà×bà«sRRbw‡Õ-X¤~Áµ<–ú y+b`óã×bàksoÄ"“œ9ˆ{«p²3è-b`è=‚mÁØÂ01°¥].w'–(¾y9½B°};; b`NÇœÄÕ:@_t|òÅD•ˆdö4?ô0F9²×þ†î‰cð¶Áê­çÐ?ù)†ŠËD¨×E‹Õ§_b÷ ú0×vK. 3È(kÀ¾áÔ–v× †‡º’.Ÿö#ÎÛŽŒ2O_Ç¥£§Yúù‡ÄN|Œ­Kòà_þŠ»t ÕœnuŸ“#íØgÂá÷q:í+6î`Â}3HŠî¼ànȦåK8TÚÈc³gáïÒqùÌÕœ»sWwj?ܨtGÜXˆøÌqô~ÞˆjµkŽ"®1"[µ cÙnDåeˆV|ˆ¨ê<¸y£˜ò$†!XKG—4 éŽÍh^|żOÑü÷#ôýÀºqu#âÅ‹Û9_68€’]»p¶ŽÁXa:0;7üÝìЪ%ŒR:áÞ¾§kpUøç«äìy5#žÄ¢ÇW2ûÛK)‡PGvïI¥¬TK¿{§S²ëLgVQ§sâL%õ²…œÍ-"÷T¿í î™ñ;¦¢–6GZi¸K>ýš—@<$çq4j˜9÷>xËT~Å¶Ãø8·Ü@Pÿ‘äÝÄôÞþf1q ‰T¯ø‘—:þòæR¤u¹4×V`°UЯo8ëÖï$*iÑ}cyäf,ìnÈð!al_WHõ¡5<÷U ±gÀ™íá[CÍèq÷ÆÊ>˜ƒ~º®3pwbNâêN½\åf#.(¹Ú7ßÂàgo&? ñÁˆZKEšV*˜‚ã•&á긡è#ýžR™>´ˆOd#>{öŠý]6îÙÇ0ÄV'xy“ºó:u%3ó%V IDATÙYYØ{[qJ¯'wÓªh`ßú}T׿‘’–…rP¶,ÜÆÝ¯cËÂm¶#5µ˜GŸxžé÷ÞIêþ8tò¨‡®àÑ9%Ì]Î]›‰Œ‹¥¦ÆôP¦#­NwÉ9ÖÆ‘(¶m¹TþbÙKØ2÷é9øÙ_•ÚzÇâPž‚W⤀="©”„¡¹ÿj¢cNC $ È„01… Î(Z´£¢\‰ £á|Í »sW‹l&K,ÐØ<ØYwþv͹Þ~\ü w<0‡Ë–1íñ‡¸ZáfÄÀæN^N†Ù ¶;‚à laX¢¸·0íÑ9<ÒÉo®å¶vî±=ÿ}š€ÀÍ!8[‚X@àæÄÀ† ¸9º[ ükŠ‹òJ‚X@@@ ³éÔ$—{|/ýï{>úè|¼à jMãç½ö7N–6&‘bF%¨2Rxãë”lµžÕK~ä»U›:3TnaOÊJÖoÜÎÂkxéµw8yâ8Ÿ}º„Cg2Yñé'ìɬ yíj’×¥PÕpÉÀ° ëÇvmgkÚ%[òÙ/þ³íÿCÛæãÏ¿áǽ¿ÖrÖóÍ‚Ÿ»ô¸,‰N½\ RºSÒXHÉ™ãxøyS]«Å±æ(¹5F–¯ÚÄ÷e»Q——ѸâCÊ«ÎcçæÍÌ)O70„=ÇÒ‰JÆÑ›yñÅç˜7ïSþñßÝ?€‘ÃÂùÓkhiRñÄeb`s§0ûåF*Dn¨.ÔrhÓb’f½K¬—”Òý?SXmúñÏ<¼Ÿ\=§Eæ5j1 ZD:Y[“OÙ$šÆ üñwsxá½o(ÍË$·TCUÝ6¶þ¼©•›ª âû²ù§ãWu¾éÜž\«“©NîÀ+o¾EœŸ=?,I&,~Yw i)j4ä­b`—È W’0t"ŒÊ H?öœR1(҇΂¶ŠISž&:n½ãåp·îNvhjË()(Ä#d ë—,åЙLNŸÈ&³Uäž4z Ž"Âûr¶Þ•³©gbor_N«»¡Õä%aÂ,þ9ûÎKËåv<öÄC×t¾égàÎF›7‚Øüèn1ð¯).ÊÃÉÁVwA , pst§øZûï©‹Lr‚>M@àæèN1ðÕ°³îº^ܰÈ$gbàΠ·¸Î ˜?‚ØÂ01ðÍ¢kÑ`¸¬wïÞƒ•ܶW¸Î ˜?‚X ËÑ6ÕµsJ=z$µ§C¸-øÕ«‚o Ѿ-H/ôÁ -Fl7€–¡¡W/¨;â…÷мûØ^êÁˆÒv#&}‚ÏMìUÇÒ…ß`´ugTR89ez”vjªÕ-Ø9¹RY˜[P?ÎçÃ5$ }Ù)Î+<Ûs¾g/ýë JJËQz{âï3Ç*`©ìIYI­È•òÚ äef1sÊ]ìÙ}’ø1±>‹ZaÇcÓÇ“¼v5ˆ­6v®­çFAÖ)jJ+¨¶ clë¹1ûŲhÞ[€I | ³ï~ILvù÷ºžoìdÎ3÷v÷áš%“äŠr‘ˆÐKó{º"^ó ü¡!½Q}1x»#ÉÈG\¥ÇjÕ×È—í@;w4â{Œª ĺHäËOÑâZöýžÖ¡·ÏB–^‚vܤY2ô‰ö4_kбuIà¾ûbY»êGäͰW&A®×¡(8ŠÑ~4¥[7£°µ!­hv1`Wô\’{öé¹<þÄs¼ùÚKlظ¹Çâè>®'RùÓkxlúxA Ü…tÚåªnÄtC‚ê,âgŒÔ#PØ 9”n‚‘LCç넨õ•¡UðhÔ«‘d–™¶7k`‹öé9ìeèfMÂxùX‹²X²<7'*¹-ýC‰%ÀGIFÚN<úEÓlÔà‰^—EvÙùÎ:Ü[B©ôbËÆÕ(•^=‡@÷rU1pú‘6‘»A Ü•ôNg`š²óàåf×nvYY9^^ž]ÝÕ)-ÊB]_Ó6½båfÍšÕ+„¦¿F›‚ØÂ訸¸¨ò*ózF¹jÕÚvÓ}ì]°¶¶¬¥Ã{Uoi#A laX¢øñG§÷t݆“£åµOoç¶o\ÆìÄÀæMmm-Z­¶K÷ááiº¯)•^û¦zaa>^ž=ôâQ3ã¶[b’ÄÀæ)aQºlû…¥pý÷ü¼~O=1»Ëâ°$1p/¢¬¬¼§C¸*‚¸ë())ãÝ÷>æ›o—öt(–NMY¥º§£ètz¶¡­â•·Wòç'Ç1ÿ§£üóém‹T)|y^ž;h/‚ !›WßßHH˜¾ž:S¦§±ü0Å>ÉÏÏ#>iÙ'÷êË×)Eüûùž½/Öbàsû¶z¡áÒbªípO«0ûhz:qýûP˜¶›L‚Ú¦óçJP¿ÁL™põÖóÒ‚Ÿñsvç±'ïo}תùN·ü²  0š››xé_o0yÒD%ôÌ+ð~-Ð-È:…­wx›À÷F\[<<‚AANÌ_’LPhäµÛª•/ßzŽ!O~J¿Ë®ÖuêJ¾Z³‹¾öz72Ðdž#ÅÜ32’Zu v6:¶í-fÌ]Ã);†WT"ýB®|떥ѳINßHIáY>ÙÔÕ™l^zùoТÃCéNiu G%Ó¦>DƒK }`áâÅW8{x(¯—Pv y3Ôʨ<™•!Ÿ>>ÿþ2™}GòIÛCy‰îWår°@D“4§+¯¬ù„"ü1«¡ñ úÇÄp¤¼ˆa £ÒÒO5ð¾þèuN–ˆ‰÷·æp‰ûÐD^{|hë)ÑÛkÈbEò6,šÏÌeÃO±—ó݆=D% #ºo,LLê’ãºÅ%¥Ì¸?‰ŒŒ“+a#ÇÞPD¼zÁ2F=z%¥Ä„Z¾p·+0Û$gµk šÿ{ë¿C”—ƒAgƒ¨à -—‹õjŒŽŽ¬_»&‰ å}•MníyÄõÕäéÄlO=ͨø~ÄDp8Ϥ•+/HG-DÕñ-(¼ï††ljsÒð>›@ &)†Ôs90<ŽÐþ8{º×N0W½U1pmI¯½þ܇ÍbæPŽ«$)Ê‹\•‰¤–êÂFì\AéáÆöã(í¬pTbÛPF‰VŽ6{7 žMáîüRbË”8x ®.ÇÃņcç*‰ò·!G¥gÂÈ„¶Ñ%Y§8]ÚHB 3{cØØqœ9°…?¤ðÞ?lI;WÉIÁü¸äkò þL0Š˜P_ªkÎó׿¿ÚCªÇn:w¿¶¿ù÷Ø•^¤qCÈ.«kõ¾iÔÎ÷»vðɼÙñãg|™Uƒ£3¿ÎÃÇ©™–œr´ú&¶îß‹DŒÙzwì«¢h>r‡·P„?ÇذtËae ¤V"ÔU%85ÄÏàÑ“n{g`³MrGd˶ђ”ˆ(1É¡ ¿ÌðRbǽ3§&÷(’ȪšåxÙè8Utž˜‘8¥Uyø( öräÄÙ|Üåü´j#¾ÁxÚûBÃ@ÎeìGîãMP¿Ñ4U–¾TÖTâããKêÎH5%Taà¼Z‡›Ýo«®‹bà›ÅAéE\”?Ãùà ‹`í#yº@šrR‰ˆ²Æ™Hví=LvE5:‡Pœk“=d›’·žØ—@À¯_ªÕ²]4–ò¬_°·µ¡¦¦€·ßx“·þó؆ßÙn¸ÐÛ ¾bd°3kªâ¹p6•ã'3Ð8…âjï¼7ð°^Ùö#ÇŒ&/³÷y¼Y. ÛŸá]À–¹OÏÁº*™W_²U ÉÏnµéèÂ÷kR ö’[‹Gp$ÖUqòó#ÈÏ…‚3e¸8ô™ µé4KÀÇÚŽ{Gyó×]ÎXÛÖ]é &Ñ·k]›{ðíNït6C~«xOÊJÜ&‘»uu6}ðµ¡÷O `ß<=¤Ø{úRTXEym=ôñÁº> IS#µõ"‚¢ýq…kC'Nf"N@{2‡øiÔžÙM­Ñ?+2K5üîÁ{˜?ÿS”ÁШ‹©®ª¥¯Ÿ;çJªñ ˆ$ÿ\Í")ýœí¨³éƒw#'2‹qrrÂÐÇ—G&&±>e3¸ÔãnÑ6ôªž\wµ%¬ß¼ƒ˜±S‰öûmr˜ÛY l‘I®¾¾‘Ô×nZ•‘Â_§Üp»æLII³ç>Çì¹Ï‘¼Î|eÞkãdicÛôê˨n¨æDVÑu׫S7ó׿¿Êƒ?¯_h»C½ßt¤?~ÿ9 ³ÞåÓ÷^&ܺ…\= £Æ\rG•žã•µ ÚD‹ø÷á—]'˜’HEΞüË?ùêý·HKÏhP& '82†Ó…µdØy]gàÛ‰‹õZ¿»À¡¼:&€äå+¡¾žÔ´ƒ¼õù:|œôØj¤Ä†öáp¡ 5j1 ZD9ÃÁ ?ÑàH´¤ž„x¶lØDƒK ¿z³­=.:5½û>>›÷wΘá#GhT_j«±ãb©¹ EjíÂÒ”Ôqî ”J/¦LšHòO)L™<‘ŒS=ÒÔæ¥’[cdùªMü¨:DPÿ‘Ø–‚<À†ï6ìFéÞ}u&nÖMìM/áîi÷0~ÒÌ61ðŒ3(**bé’o{øHº—ßÔ“4x8—-ÆÓ1”¤ÑctQXmú•I˜0‹?Þí׿LûkÑ¢Gp$Ö†Ö‡êj’7íEß* |ö™'Yøé"žz`ôµoS&Ìâý‘†ÓÇZ{rZ6ÌeT|0?,In­×hu›ýǃ œ­wålê…ØÕ?’†ó5—êUnÇ÷h_ÏmíaâÀ®-DÆÅ¢ª¨@Фu®©­•+Wâë{{ ÿ²Hœ9ˆ‹‹ò°³îüívV½ßŠÛlgÑÕÎÀ]Aæéƒí¦¿\¸ˆWÿóêU<˜ó¹q- F rù¥á]½U»Øktr–è ÜÝÜŠÛl§ÑÅÎÀMqq©©ÚÍ‹éß3oûê*Ä"ýmû¤Ø"“œ O3oºÚ¸³‰õ%â*·kRèmXd’ë1ðE×^+ÙµOØââ"<Ü»4KÄÄÀ‚ër{ ‹U8»¸÷t¿™šjÁA7§_´ÈoAwˆór2Ú\{¯U¡ë~úI°ß¾ æ ¾¼ýÀÙ¥g{’^ç ÜU|ÿý*Þxó}JJÊz:Û]C5{ÒÎq"ãtÛ¼Ú’rK,ÿ']E§üÔÚþ3i…uxxF1m¼éMõÉ_@srCwS€ùó?E!³gøÄ)„)M¶2«,cì3ápuò3~!£Æê#{úø¡+.¼ì3’‡§A§®ä«5»Ûßç’Ã/¬Xµ;Ïx*³ö0ãÙg¸Þ]¤äu)Œ»sï¼ÿ?>™ÿ%‰ƒ˜2yâMÖ’e¼v5ˆ­6v\»v+È:…­w¸i^åfu˜EÿœECÙ)~I+fИ»ð¾¬w­]N¡Fƒ£[(•gŽ òôG^QŒÞÇC^R'ÙZü æ‰ Sâ俉”FÂëÂ=r„‡gNå•÷ß E.Âh쌚3?2ï'Wc¤©œ/Wn%vìh2·ÄÕËŽè1w±uéî™ñX[ù¿ýóßœ(ÑðtSm›Ÿ '¦Þ7ž½«Ö SH¨×”ãã1ƒ±€fWg²ËÏ®Xä@ !¡èU™Èü tät 7áŒ'{ Ç`¬ 0ˆÓ50 ”ó"ï©s`X‚+»S‹hQ×02Ø™ÜWbâãøaÑkLxhR©5×,cæ3Ïâb#\²wÚåjÚ¶ŸPú÷ã¢HÔÏÞ$D¼û¡G¯öÊíxâ…?ãPž‚WâS¦UWóõÊmŒˆèÓ^@¬Ó]SœŸWJEE®¾ö 1êWŸI ; 'Γ•Å/ë6PE>1ĸÁ³™Ø;øR]UHVöõ‡Ä|þ÷üñ¿á=ÀÀ¾ž4jzÆèr.Šº³jI:‘iC#q‰ÈØxìÚLd\,55­—FuÅd• ¾¡!í¶cra^…2:[+[B|#¶:Ä+ÈÔ>£ïÄÓÍ×€Pî>± Ñ(m‰Œom׆ÖòZ?½[ççq"£‚qc⻿r̹k=ð(ï¿òæIúM๧Ào¾÷r@nëÈ#sŸ"ηOO‡kô¨øÇÅßpÇsp¹É÷«t‡8/'£­>öíÛÃ+¾Ã»Ÿ+M-$õ* ÕÕªNð`iBÓܼbä #J¯K s_l¿®ÀÒÚzÞ¸³¸–ðي§=:ç–Öë1ðå.ªƒLÂÐÒÒÖWV·'ÕÕ=ÿÂÞž&(ð*o31pOºà ˜yÁÞbào¾]DSÓ•U¥Šêêš«¬!`ib`ÞE&¹îdÖ÷myg!ˆÌ ‹üÔÖÖbèâЭ¬$ØÙ(+ì1\Ã{÷ž=$ î]c;A ,`NXä·@«ÕvùI”—cò3®=°ùäÉB’0szfă¶É™SÇÞòfŽîù…£góÉHÝIvÑ…+>.e³3Õ”°ª*«Z×Ô°qÕF4À…ʪ:ê–””ñÕÂ%<ùÔ lß±û–ã5G:â*|ÑÕ¹¶¤€?x¯×ìºa|ûÙ.ûÜ“ò Ÿ|ô5‹.båâøúÓÏØº÷ ­ RÝ‘- Ü<]žälžúÖsŸ@rꢢÄGS‘}ÿòµ»‘lKAþÙ7måd}ˆtûa¤ëRg¡˜ö’´sHöíBr2qzz»mÅ$Prf/eR2ޤüês/iGÎÑR‘O­º’e?ÿÀ¹ÛÀÖ9ü°bÙ _ž—vøÓ¦N%22Š•k×ñö¼O:½žz “«p;áΉ“Ù¸õîœ8™_öìaÚÔ‡˜ðäKìٖž´s8(ýM*úñl\ú£ÇÍdÙwò÷¿ÂËoÄÒ”ÔvÛjZr!?“…:Ϋ›‘É[8¹£€{ŸžÌÑ/~ÁJ^Oúq˱f°,º¥'gðQbµl Òý»‘ý²iFdïÂꬣ]k!;šgŒÁjW*âÊR-?ô¾dK¶bµc×ÛÍ;–Fhtâ5÷»gëOT6˜zR;7B¼œÈ?{”cg/P!a:†·Þ}›&š²ÆRT¼?oAÇ+ÀŒ¹è*üãêÝ ŠôcÏ)ƒ"ýØ‘zªM„ýkWg€­ûÒˆñu¢ºAsMgà‹BëêªB*už<;ûAî™xH<õÆ$¶,ÜÆÝ¯OÇF'GéãÖÕ‡*p›Òå÷ätý£­h‰@z,}xÏzÈ]PA°i¬«.ØÙúãh‹lí>tûbPd· ïˆ!:Iz:†þýÛ¶­Ö5Q”_F‡…ÏD4ÅÇ/ûFˆ¯#в9^¬A®®¤A]cÀxfþ)Š«v0vúÒ¶ž"/»ˆ~!×·„®£‘*unÁŽD÷Â^ëØ+trß.3ùýOk7÷ávSF&\Zòü« Y°0]®߼ƒ˜±S‰ö³o·ÞÔYO0 ä©¶yq±žÄÅFðÈӦϾ¿ù8®…`~ .ñŸ—ÍËo½I³mFºá©ðD.—Üö#®Æù XÉ{ö¤PÈn\îV°Ä6F=ëWŸ™y–¸þ ssÇ"“tïMÔfmõ—ž¤ªT*ÒÓOZd’›ÿÑÿÐËì™üÐÃø;´÷¸Re¤ðåAxynûÞk›Cs]1ó7g +¬àw~ŒÛÛoVÀR¸é$whß.Jë%Ü3~ØoϺFvì;ʼnáì8Vĉ}ÛÕek6Ü?Ú4ljþwËøýc]¶®š/>[ÅcÏ?Ž8}ì8A±P»6n"~Âxv­ZB5n¸PI7/ŠÏC]QQÛ:7uÜiGÛ¬–üý•¿í¸{´ÃÇñðóæç/>â@¾ NÎEØ·èðPºSZÝ€³ßªÆ¾ê NÖvõÉm)ÈãrO€÷^þ;ÿüp üýv¥—4(†¨øXNÏ#r`Â%g`3á¦óÔgß®a|’/}QHm¥ÿšªZîHÈÖ#ÙDû¸[Z‹_0%™'HJJ$5õÇ gÇÞT]ÝÔW!² àá{B˜ÿá§ä=>Ô퇩.ޤ¢ª–!±lÚ¶ ½k K OÓ w -=ƒ…‹_²?—ÚáêÅŸ¿GI½‚8|p/ë·l#hÀ=ÄO€²òršŒ:\B½ˆK þ8(t·ÔQz{ñøÏ‘Ç»ÿ}…ã'2oa+f€ÜWÞ|‹ôŸã4|"§7Ì@«iõÊl¨ÍH§YNÖ¦Uü.'N™ÆŽåK Uš G ŽbÒ”'YòýÇ:w¡'ŽH@àºÜ|gL[‹(àA’*“6Ž?ÌÈ`gþûÅ7üîÿÞæôŠÿR ëKT´œ´¬ 6Š]hÌÊ`Ey)·œÜ¿çF/}> ñˆL 1ÒŸãÛ³mÿF;óîׇ™=ã^öìKç»3øý“&»£¸Ë„ÀèÔ¤í9FôðX†b4dW”3ᾇEx…D3qÂx–~òiVÎæB}þFOÓ‰N©ôbKÊj”J/T*Ë/ZøCf>Í€¤wn¼ÒŒ mÿ®xçW/ÑÕ1÷w¿#,8’°à΋ûØAsIDATS@ ³¸é$÷ì /Ë…B·ÿoïÌâºî>þ™eßÙŠb\bL4®i’7j5‹6[mÚ&m“¦mÒ&±í›¾mš´&¦Æ,MbÕ¨I4DàŠ‚AÙe‘ÕAf{ÿ@P4b=Ÿçá™áÞ;çžsïßÜ{Î÷|x«<˜æó#òªZùpe(Û’r׊gÉKKG)—ûl¢b"Év·'&iU'£šõ4´œ·dDzqaÅ’Ù„‡øñÈÃ2œ ¯ª•wô`÷Á–,_É犨ÔÉxjùbÀÔ£æ¼ôÇ_÷ªÛ”Kê:göÝüð'¿`—犸V¼½=¯û³7-rG{¤÷| á ,Nô;È%ÄY¦a¹øâà_°e]—ܯóµëÎ+À×2eÊoêÌÎR:§PÉ퉴üüÇÄXúã.–Õ¹¿'Q}Ôc0¿D{÷î!;«·[JT´°XºB ,NXå誻‡'rùàíý`Ñ~°hÁe˯ä3w«#ÄÀ‚á„U^æ«Y †! '†Æ4ó{R[[KK×ôwèÈ·(lÄã“@p«"5}÷6ßÑþ}þR«Ð4V³g×Nì eï7C]Õá…®™5ï~ÀWû2®¸IYa.õÚËzûë , ®û~Þ m  ²o¿Pz ç“?ÛŒ[äÜå­dd“4 ?gû¨ë)Ì:BÚñî]¶ ðÖÚuTVÕß9H"¸ˆAÛÈÁ=©4ì9þÕGì˪dþ¬I)” 1U‘èoGe‡‚v‰œ‘Îþøškؼ'˜yóò#³pV´àßé üú)¬\:ìâ&äv΄E%1°`ØqÝAî•çcw¦Ž'^z™åSƒxã½MŒtQ“²ñK~7ŒÝÿEãÁko®%@ab¤Ï4-uÄOšÊñô#„Ž ¥¾¤­R³¤•gÚê\Ëk]çê5ćøóåáü‚LxyFPYvꢸÁÑ©)¯Ã|úñ&‚‚C e×7Ѷmøpà Sò?‹ïcoúI\°zíꋵl>5_ñ·ý­,½ÍÄêt@üä9,LÛ«œKûÎg& =×äšÏ’V$A®‚°°`4åÇ©6:‘sø0n^^øù:SdŸ®å…'æñòk_3É.ƒØIóù×»ÿÄ=t‹]õ,};“ÿè~ ¬ÛœÌƒãY·9WESH>ÜLàä *KfÝæd^X9¿Ïêd$LêÉó„M7°lÉýüê¹_SYUÃê—CåY‘; '¶jO.𼂻ÊãlZdyw%5aœ‚áÀõ9G^|þy̶z|GSYPµ§[è«âgÌ%Æq4ÞjxüÑÙDŒäË=Gyý/oR|âEFþú³ETêd¸û‡ðìxh,áÙñþxÙ¶“WÕÊSþNhUTI;×›Zú¬NüÝKˆ·è~Ñ6ÃSO¬ ãX¦ïjo?–>úpï…B <ìh¼ ¬úÁÒŽQêþ™s\÷ãjÒÔ¸^ÿ'^"ôõöí^×%øíº{p™<µsMà%Bß‹ó‚ºDÁ.ô_äJ_¢wÖ®¡­Í"/9™{c݃}#ÄÀÃÀë·>¥öÇ`hï×g¬RHt51ðóÏýê²eý=(‚ï‡?ne]©U^B <¼bàáGiyjµz¨«ñ½èè0àîÚÿ6XåU0œÛZµ¸:‹Ç2u V«­.ÃØ¥4i®ïÆÆ*ƒ }zµ¡îX¿^Ö¬ù'·Mè•KõZÑT–ñþ§ÿEåŸÀC÷NµÞ‹gPY’Ncð¾Ätdf”Ú½MmI.1ã.B\j(›—‘C@|d/û°=Ÿ­#dæ zxçf’‘]Ahˆ¹•:|•¤—ëX:*Û>ÛÂÝ÷þ[ yÇ.“BIÞú-ñ‹î!@­$uçVÌn¡«Î€{3'„SVxœF³/šSG0»ûw›Þnûl AÞdu–¶†;ÒšŒÊpŠz›B\nÌíƒþ]§ºfÉ1„bŒó°ÎòŒá‘˜‚¯žÜYñþ:ô­èµ,eÇ&ZdØ·—böˆAR“‰Ù#†™o.:[÷ï×À’‘•Cøøé¬{ãr*¥ÄùÙq¬²G/ v%v|2³OLâxÊ×<óÌ*þö·òë?½ÁŒè1B <@dìý&<ŒRs–¯÷ìÁwÜíd§ï'>>˜Õ/nâõwÿ—ìÎmö~°žÜ#éÔ$$Æ‘šº£K_]8Km‡ ™?bæ/žåüé\´J5jI“wÑ2‚³çêj 1Ôžm¤¤Ì@¸RƉ2ár[¾ü€£ßÖàà•›³ŽvöœN­`ú'“ùy&ùÎçQêÃ0Ÿ;Gcc5t¶0!?o ²ZQºÖV¤¤aÐrøÛªÏ«˜èî@Ú¡4ã¹{b8GNfðm^Îþ¶Ã8È5W¢8RŽ)u?Ò¨Ì '¤- ˜]\Á܆Äìˆq„yiú/䕼m,¯£P¤ŸÄ0i"²ß`¼ëA¤Ç?BjB»å«ÿÀ<Æ£³yi“¢PdžÆä†4'Yv.H>@ßC <ýžy|±u3&C¦êH Q˜ÎìgõçŸ ut@ÓjGuã)d®‰ìßþ1/ýõM\DbÚu0µÛ —[&g :lmmq;ž)q´Û{3wf$òšSÈ­%a¬/©é§™=¦» !Nþ’좪̣9_x’'ü¼‚ðv¤ØFI}K3èUdŸ*'4Ä–77X eSäóe±–¶3j_¢|L¬ø»EwúÍŽÝD…xâ³ýůøñ½Ÿsà´†P¯ì¯62ÎKÉþ*?^¹OûƒDOŒGlصOÿ1$¿¿›àé÷`Ïß݈ÉÝm‹jKÖî²ârNëˆ÷‘ÑØÐˆÊÅ‘és—£´?HKûyöWcæH/ *øÛšÏY²òA^˜Éî¬Á=ÆÛæêwõݧ6–ìÔ}f ¯;…êwhûýÏQ¼±†ögïÁvW#’¢Ã˜õí´¿º»Çǰd&WÊ×סô‡(Ö„ÉÇýK±ùæ0æ;Ú__èòY˜%îHtEPyÃ’eHòÒØ„bÔ¡8ç ù»èxèG˜¢£©­­%$|ÿøí/qNº ΜÆè3ÙÙRŒ£ä8;`ßþ"^üí]lùϲ*µ¬þêK¾r¶¢»*¬ƒ=ÿÐ.j]c™r¿¬}‰›4ZüoÈjö›’¢“7ì8Ä9ª,É'#»ˆÀÎVVâ7Æ‚üÂnsY÷ ¼•ìÙþ ¾1x÷/2þþeÌçÍîƒ9„DEP•]ˆÊ×/(?/Gm¬£R§$Ð òŠë ôÃÓ?•|Я«ÁÕÚеî_ïnౕwÿ?jBV?ƒœ®YAÆÈ@¤™9˜b"‘íÛƒÙ+³¼y~úpO™ùÇx#«¾€!pò¢&ôSÆ¢Øsýô$¤eu˜"‘œ:޼ ý¤0ìV½IÇïŽQe@‘™~zò”ƒ˜ÂÑåÁL²^An(¹Y‚Ü é¼…rhÛ —­Í)ÛÏQqi9öÖýc4ËðtwîsÝÕ‚\ÿW•Ž#-¿Ö¦˜HËŽ{uõ`½¯¥¿ÎÔ™’Aß)ìÕwŠMe˜ÇÆ¢ïœÙ¶ñïËéü¼¡kûà1—Ue¨;þÛZµ8U}Ÿ1ðð#4dìwod\tÌ*ÈÛ¸/F©UB«w†ƒx ¸YDÅ·òµj•gOˆ‡7ÃA ${ ýQΗ!ÕÙ`–·"‘¹`òí{¤äZ)=F½ÉŸó凨mQâ`nâ¼Á%‹Yoôî ÝÒrŠˆliæåçS8Øíæ«GS­Ã¶ëlP{&ý³ƒÜi”Ê9/‰ÂXËüq~¼þA .Š'¯¢wŸ Êʪ™;-Š ÿþ­³?_ý{5ÇSÜ­†ýwáS's:ù$h¼8®­ ^›‹më;Œ4·1>’¢J‹øèþ½<óÌ*:„øzh®ä­­Ç˜ÄQœ#ê)«(!8r<…9ËÎ%.ô ©ÇN¨já«bWî™äHqi±Ñ~a°ûDˆ´cÍÖ½¹g36”8_{Ž”4rÇü»ÅÀ*çѨ$e¼óÚhámS {T6.>ò ‹Xˆ­B‰Ü)ŒQõ§˜qï<Ü:ÊùÛß·¤£°ÐDùé64çí(/VPüm ®z˜È!>€WçúbAu6¶ï}MÛsO"ûê ‹ø7ÈÅÑ*Ì Œ^6à0Yq ¦¤ûÓ0Þõ æ¢Ý(ËTäÇy,Ĩ¯D¢TcÖT#Ñ0{;`‰4ç¸E`|¡šµHÆNÆ\[¦Ž^bà1£]É;t£)WÇzŠókÐHOI=˜¸„±æOO°úùz¸ùÞGÖ§|i(¼€óØñÌŒ†“8s¦ÚKÏt wµFKyI½¥PƒçÑa¬¸w6‰3îÀ|ø…­7à9ãùGZ~¾~?ÕYû‘„»4Ó ±ˆ€%öN±pÆi"£ãú¨¹à;Q*‘·´ÓŽœ–sŨÝÝøø?ï2~.¹|º} üçN'*.–^fö’eìÙ±•„é³È(³ã´.å¹"þ|ÄÀ«ÏÞ‡S1p^ÆjkÑÊJ"'ÄCÃAô*Gêëõ¨ôVRVÝBdÀP´k§:¹H3Ž`÷æ'˜:j1,Y†¹¦IÈ>ÔŒ—ô<5ô8Ú¶c2¸ñÈϺáS¹nuÜÕ‡ƒx èKT|#ÎQ^ÆÎG ,=À– {žyì> ÒR1ŽðÀ˦ƒ²†&MŠ %å$ñ1>ddæNff!Q1„{©ºW3ØXîÆò‰î¨¼ú'ÎÈÊ$>zàs£ÔÖÖâíãÃN Ü…¦Ej¦eΩ²Ef>†Ð@pY®AVÕ1ØùŽTL¡ —cŠ „ò"$*OÌ4 ÕÚCÕ)¤:%&G[ÌRÌŽHÛåHÊs1{…BËyL1‘(_ø úŸýTŸb`+@¹áÇP‹5 áã†$È]ßãªÚý‚‹Öâ]â] ö;Gª —æð ÄܹÉðMâÒ”ˆ&ÿ®²-éº?þÃò¯ÛÅNo!®¡{û y­UöÏ 1°@Ð?nåkÕ*ƒœ ýc¨ÅÀpd„X`M µx ÎÀƒÌP÷ ¬›kqÎË8BAUãU¾é{¿€ i©A/ò}§Ý3‹ÔÎW[ètGRYØíÜålªÊGêÁô¸î}DÆ’“q„±3åiOñÉ}œÓ{p®¼F8²pFҀϫ1`A.ýÐ>ª.Ș{wÒe…Ïʺ¢R>ýÐ> ö×eÇ}ˈ7×â ?‘5Ïþ‚5w'ñÆÚuŒtq¥EÛBèˆ6|¢I?yMQ-é¥4NŸFý©¬s6Žvöè´ ¤Ëèt®C†Å0éÃ0Ÿ+¥²D‹ö\.ò L™žHíÙF¼ƒ"(;YÅYjíÙ”œ†³ÿt檩T î Ȁł·ÞûŒ»GóÑNŠšŒ¿ƒ´»1Jl°w°#-í0Æv‰‰QÈÈÃ/| ÆÊy彯YýÜ“|´v-µ w͜Ɖ錿ƒô´ý„Ž ¥¾¤­RLßÄÊ[T ,¸9¹š3pšòLªNä>€A/AâÙJIF û Eç Ñyä`ò6Žž:?`ÎÀvþœ: ³§N·8{âmoq†(êëv`ò $,Ά£Œúî}x†ä›/J´¨GGóÂS£Øe íL÷Ý7yPñÀÝðè4HÆ,Ƨj8U±™G$Mù»hÆrÂ&¹4óñ–îž5Œ’~0cÿûx+Ͻü;©ˆ±åÃÍ›0·i)¬úŒ–,vÕ³ôm‹­³¯Kïùr¥g 8q¦/é™N10Øë¥è´aÁÀ?c.ÙGq˜Å´‘ÎÀ.XœG¦¸²™oGV,_†:8šU{PÍzÛöòŠëX:=‰””ƒ„Ü>ww'ÚfòÀ¹"*u2~òÈ2òŠë¸D£MìŒùÄÎ转+Íû¤ÿx1¯¬\Î¥ôµÌ²Ë«_¯%_îLüérÉôÔOJl\ ÚJOô# åý?¯F?2Ч˜€‹RÏm+/¾ú&÷ýüÚ5ÕT5²úÅ_ðÑ_ÿŒCØ|~æÉáœBÃc8_q’"£ýÙ"*u²Ëö9&z/ˆùâ+ÄÛ?ïN“ÙÈHËã[x˜Å]Ö¯‡mW7Ob÷²Ñ„XüjYx©Õß“¨Î·]ÛtÑÔÔ0¤N Ñ,ƒë<° —g™ ¢ööc¶·«ßZÛç¶›¶]üÕXØ)*~míšîe]ŸÇ·ëw&°ûäu1ÔÿB ,°&†Z ÅÄ}ÓÎ~†CpÓ'v±Z¨nOWh¯áxa ž–ÿ‡Û¶ïê*·ƒäzØ;»Ä6ÒÔÔJR¸3Oãϼ‰¡h·¬ÇÁ3¬ßð)q¾ö7˜(?wŽà˜4…¹}Š[¸Øêyï­·iÕ¶–Ì®m§‰IpÀ¨Ss¦ê,­uFbâTÔ5ÂAquÈlî½=h0ZÝ'¬\Å{ïþsÈö/ÜjHe/]öÎ-rÔj_}¶™}º‰âpW÷%•£:WÄŸÿ›‰“±µ»+Û·|ÊûÉ™¸»¹öžfhÇ(•Qvª½Ñ¶#™w`@opÀ#(ˆQ #ØŽbÞÂy´Õµ`â‡ó… æpòÄ¡ËõMà†18_{ÇžYTË9ã$œá‡+cîÌXvïHÅVn‰³I³@å¢Äeb Å^nØR@^i xéeNe\.–dÉòe—íê¡ås ˆ‡-pGÒŤ*O?½€/¾8DT”ÏléwâííùÝY;æ¡×1vB iõ Ú½MxüDÂ;ßûY„ÝÌîqGã€ËÔù3˜Ô¹Î{bÒ5‹]ÔÔ_a]â´ p¡š³®§ßwÖ®¡­íâÀCCCãàWb5RÁðÁ*GW‡ƒ¸¿<ÿܯ.[f20tCPàÖÁ*ƒœ ‚kE:8#@04ˆ7ÌPÙ_ê+nˆsd]ˆ 7̰QXeÂ-…8GÖÅÏ–B.»îÄ@0˜8::Æ>×]1È9¨¬kôR ÜÊôà  —ššJn^î ­Ž@ Ü,wt½‘›.Y0yR<“'õ?s–@  GºïäDœ@ ¸YèÙG×äDœ@ ¸y¸ØG×䪪k±³sÁÍA—ëvw³³W +n@pSгëM¨‚a„­½Ó 7mØðþ‡,]|/6¶Ž˜MW–^ šf »¾Þ5hVÿëßÛÀ²¥½÷ÕgÞUIÖ!dùFŒñîȳ‹0¹»bŒŒ•šÏb³§˜Ž{oGñþ:ô­èþœ4+ Sôwd{.?Žâ ègÄ~¿ÖhVµb }ÙªKë%X Fƒî†›OhµÍÀà]´4_´ Sžvf]ô\ZÛˆ´¤É… dm>˜¥:äéíHËÊ0¹8 Ϫ„ª\dÙ¹˜•À3ÃÔxä'r!í0´èxò'HŽíÂ&¥ÃøQÈKëÐGû¡H݇Ä}"zC+ò{vØ`n©Âlë†Dw‰RMÇây(Þ[ßk™YÒ„´¬Sh4&75ÒZ ’v=l܈)0 ©î<&ÿ0¤9ȲsÑ?t£§@ °úœ»jž4Žçþã´™Hj‹±Ù´I˜m¡4©Â³HÚ[±Ùœ €<ë$ò‚ Ì­ùH›ARQŒir6>Æäå|ÇVô q–Ô• O;Ž|_²£§1LñÄ&9³›+ÀeËdéÇ0kå -.B–_€<÷Ò[$™–º5eu×Kš•5‡O ¶íßÉÃ/­ðr?{¥üëMº¤k&ýTY¿?ÖŸö¤ŸÈéWÙWí“3̘ N š‹a‘²i˜|Ñ=ÿ"’²|¸íQ̆Ftã-éuË`Rê1;“îĬò@ÿ—WQdæ£üÈ3ó蘞N“0ûzbÆ>‘´ý¬ i§ÍyÇãËz-ëxd6ý3úçŸCšŸCÇ‚IH &ÌfLc=‘ïHÅŽÁ6n{´_A °&¶íßÉov½Ê®'·`ÐVóÛß­G†¯1JŠ:ð‹˜ÍÓÄõ¯Üí;¹ýÅÕüûóL9–Iº×fâcÉÙ·•mG5Ü5g E%x‡GÒ®9KC½‘;§GñeòAbâcÉÌ8NL¨;omÍ#aìå© ®µ=kþø<'õþ¼òÈLf擘@^Z:#ByçƒQ˜b´³-Z•'~ÎöW-ÿªAÎìjy£¶¼z&`xÙöÆq‘½øbpDïkÙ^ï;¦{µaÁÌ^››&&Ñ5ÃyÙ²ö –ƒ` »¼®«n¦à1—­n¶íßIƱã¼Õºž¯lî΢©ÈEI$yì.ºÀ7ûsÙõÌåNÔßÅÂsؼ6†ŸËäOO<ÊOã-ýæéG0wÙkD:jXwä›Þ8ŠIÒF‚g+¿Þ÷ û ©ÿù 5ª ê*kÓÜ^©=èùúØY¤”“–bFãèÃßþ7òöQ´ïÛÈùòÓÑÊmxæÅ—¾s?btU °*«ªykÄzžT=JBüÅ;ç°)„¦l¤‘`~x· ‹îžÅž¯ðØSûUþ¿{• Ç2yÇ˃{×®g³—'÷=¹‚û–>Á¶|BKœZ ÄÀ,52¢XŸhÒSv};-E $D‡¢Ùñ½ÚS[\ÀòU¿$€2vï˦¤áþ9I¬ýûf-šŠ^ׯc¤üi¯·k°öAN °N™Ãöwòãe½•••Ø{¹`„Æ\wF8—¸X=Ë^ù-Û¶ïä¾Î§£üª¼F;£”9ð̳+/ûÜÄ„ÞÅQã¿_{ôŽ~È 2)GÎìÙÓPÇâ§§ßziy"¬//â÷O_[;E¬ooOv=¿¥Ïå‘ê2qÁ;[ÏÜÀ=ï²’þ¶§+À¸øârûÎÀà¦FÜÉ ÈõïmèSÐ:tåü,ïÈqÑQ”—•òÅŽ7|_}ùÉIìT˜+ßÕӤъ¹«ঠ+žš%üäÁ͇ð“79$R¿ífFH1®2a– Æ(Ua2‚¦‚ÿøw;‰“òÜIEND®B`‚fox-1.6.49/doc/screenshots/SbSScreen1.jpg0000644000175000017500000025027511637250333015065 00000000000000ÿØÿàJFIFddÿìDuckyÿîAdobedÀÿÛ„   #%'%#//33//@@@@@@@@@@@@@@@&&0##0+.'''.+550055@@?@@@@@@@@@@@@ÿÀ"ÿļ !1AQq"’SÓa‘¡2RÒ#3s“³ð±áBbr¢²ÂÁÑC£4T5e$”ÔU‚cDƒãt´ñd%6F!1QAaq‘¡Ñ"2Rrð±ÁB3áb‚#ñ’ÂâÿÚ ?êíí¼v1€úðï”LŸ1Õ®eχó…Ôñ¾H¶nvǦ’ “¼ß%‰¦>à§óqˆ^l³0:¿0-/®a”i'pw…6óÛAmPÄÖ5Œps \æå¦S¸Øšïâ½Ó¬Ò>ÜÌZó;ZÃóá"¢ÄSÒ‰OùÙþDzÁÑ.gæHì„úËc«2¸P>gf ®%õÓŽÐÚö ¦ÍÚE“쉡m”sYÇ=¡´³BÙ^ÈüüŒy‘Ù†5¨8Ô‘§sM8ˆÍ~rE­=¬_çgùëD§üèÿ"=`è–ÞÉÙV{?oYOY$šêâý‘Yq¶ßrsۋЕåG,x‰þT•±â/>¥::|>rsۋДŸåG,x‰þR•¡â.'GO‡ÎN{qwÿÊò£”3žÜ]¯òü¸å?ÈOòã”yÊ"~>yÊ"ä"t©ÃæsÛ‹±øùæ(x‰øñælx‹‰Ò§™Ïn.¿ãǘ±â)ütó¶g=¸ºŸždvÇŠ§ñ³ÌŽØñW)Jt©ÃæsÛ‹©øÑæGlx©øÑæGlx«˜‰Ò§™Ïn.§ã'™±â§ã'™±â®b”éS‡Ìç·KñƒÌŽØñTþ0y‘Û*æ)N•8|Î{qt¿<Ðí?<Ðís‘N•8|Î{qt¿<Ðí?<Ðís”§Jœ>g=¸º‹hvÇŠ§ñSÍØñW9Jt©ÃæsÛ‹¡ø©æ‡lx©ø¡æ‡lx«A¥N3žÜ]Å4;ž*~(y¡ÜñV‚”éS‡Ìê[‹{ñ3͎犧ñ3͎犴§Jœ>gRÜ[߉lwî~¥¬¥:Tàu-űÖÏ‚;Ÿ©O[>î~¥¬¥:tàu-űւ;Ÿ©:ÑðGsõ,:p:–âØë'Á¡ú“¬Ÿv‡êX§Nœ¥¸³u“àŽÐýJzÁðGh~¥JtéÀê[‹7X>íÔšóàŽÐýK'Nœ¥¸¶k/‚ÞÛU&ŸQæ—+cŒ9ÜS@8;ËÛ;Gÿª¸Š ääÖ½¬ÍM4ÌEiU©µ'†ãc\M–'0呎i¡¡¡nWŸ1úÇÍÛÆ~N•eð[Ûj¤Óê"|Òålq‚ç;Šhä_ì}›µ6åÇ_‡]©·ƒWÆ{išKœÝã›à…§.ͲÙÚ°YGª‰Ö¶ï-Ìçq‹îZ¼“ Ì~±ó1W9Ù\úÆ× %XÕ´V+ˆÄX™Î׆wå¾÷9ï·.{ÉsÜdޤÓÇ[2ìÏÎd×:y5nGžä;+ÛÞ¹µ“7×­B>Ê Ã²3©ÓǬq’L—¹ží.u$Äõ Ù_šã·êÌ×6Ü‚Ó ghŽŽ®a”ILkŠõÒÞ[C®Ö?/VˆO6åŒç£°ù·hYXðñQP-ãÓV’Óƒ€Ã î‘‚uíúÓÈéÇxOñ­·ü·ï#ñÔÿm¿å¿y޽â+îo§N;Þükm-ûÈüu?ã{kùo¯޽Ú'¸¿ 8ïxOñ½µü·×ÇSþ7¶¿–úñøëÝ,—^Fe€¸±®sv>3™†Ž‘­88pOq~:qÞñŸã›kùo¯ާüslÿ/õãñ×¹D÷áS§ï þ9¶—úñøêÇ6Ïòÿ^?{C4m™ådkžÖÐâֵƺ0/ "{‹ð©ÓŽ÷‡ÿÛ?Ëýxüu?ã»cù¯Œ½º'¸¿ 8ïxñݱü¿×ÆSþ=¶?—úñøËÙO4vðÉ<Ç,Q5Ï‘Ô&hÌM:-®â¹Í«l­ÉJëb’;ÚÖ6º7÷áS§ï!þ=¶?—úìñ”ÿmåþ»»»Ñæ~³f'ŒüšsE´œÿ#;"Œ 5¦,çgǨÚÿͳԎ‘tY¶vòÇÍ9{çää]Úº×aÜÂçg!¯qpk™åú*wÑlí¯éW?@¢œÛsŽïð¸Ù‹}Ú}áð.fÙl©:æQ ¸.’C7W jfh£ÃØêæ#{•]7¶CÞ“A\ÎÊ4pŒëÁˆªt a®ý5çæ²}äÆM“0–&°FË¡>´²A óq“;ßVºá¼4-ý‹bëMqË oËHåêíã76gìÚ#¨ãW1¥ Ez>_z>[º4òûÑòÝÑ ºÐÛ2E˜™ò2)"{$€ÈöÇšHÎ}S^òLa;Äé sËïGËwFž_z>[º4pìþ²ÁÕ%¶±²Þ;‰ t/7GÖLµlÅñ—ÌÉŸ„Ëb=wF1²:>!W?$މÖòK-³HfFà郲´en¯'®]¿/½-Ýy}èùnèÐ`Ù°É £DÃ$²:I¤Ž ätïtÅ•¥ùk»¥m*y}èùnèÓËïGËwFƒ“¶]hÛ¸·PÛ‰eÔrHÆÀÙA{^æçiÕº:ìvåAÒ~ʹ¸vº’9 ®µ|·"3%Äó6mdÍ{˜ÉC¢«°ÄT5z?/½-Ýy}èùnèÐq.6EëÙrÆ?ŠçM bÆ×:Ißß|—HÜ4VΰÜìkǾõÍd¯¸•·T—4 ŽFJÙ YòëÝ—3FWÑJƒF¶¾€™†‘$ýÚNöjù™Jµ„¸Ð縓JèlGy6ãf–ßZºÚßXȲq§É c9’I\ýsgvœâ¡Æ™¼&õÖlÜßrn…5³s}ɺ—–Š/Äá‘Öìd“@Í èi,2:9îflÖÏk¢‘ù¦Ž¨¡°O£ÖÍÍ÷&èS[5H „‚@”ŠƒCˆ… kâÚ­†Mž.­ipë[f¶Æ3-.k%{ѬÏÙ©&˜Õe‡fÞ±ñ ã×^5ÖÎG3]«Ž&Â';È—ŽY&´9ñÒêv5³s}ɺÖÍÍ÷&èPrlö@¶fÊt–‚W[Ã’fœ|s¿Qå³Hí ÕV’@ h¦X6%ÛbÈöM­&s!|1‰œÉá’IXëpÙ^@cˆ|Ž®q§ 2ÌK© KRhNSŽ„ÖÍÍ÷&èPsÙ`èö»f†ÜXÖÊȈ#Yhæ;XÁ^ù®n^øŠ|®²Ã­››îMЦ¶no¹7Bƒ×a“dÞ±´Öò´ÑRÇ \â’¹¶×6·ÐºÒÃ0¹k„‘K-Ìw/„Ó)˜e¸ônŒº›)â¹Ävν¦„F1§~í$Ó›O/½-Ý=5‘–êx#°¥×T‰°Íš7õi%×–Ö½ÂL]ÇÌÐ^t‘›{Í—w,w,ŠÛýSúÑ}ÝX5ñLÉ› ³k\ñàð2àpm{Þ_z>[º4òûÑòÝÑ äÜì’Ùæ6°€ùmL·U­å÷:G=ÇYW™G¹‰5.ìëÛlWg„%e®¼>Xe6ìl7 .ÕY†²Ž/k]‰.8e÷¼¾ô|·tiå÷£å»£Aα´–-§q9†‘¿=n&lfw9Ï­ŽHœIˆƒ^‡HÁ½EO/½-Ýy}èùnèÐjmrÑf÷5ŒdöÏ{Þæ±¡¬ž'¸—< .(‚ÄÜÚÁ³®`¹!Õ-d¬.ÊË‹7±¡¹É9-íéQ§-N%z_/½-Ýy}èùnèÐpaÙ— g¬¶l¬t°ÊØ:ÕÐ •§^æ?S-ö¸p$ÕÔ.¿ás;i2àC,m…Ðd6íe¼,daйÙ_+qk¸±œ†´¨Ìâ»~_z>[º4òûÑòÝÑ óì›ÖØ²ÞæØ¾*ÄçÇ·’LñÚÛÂëY¢Ê dåh§«5žÉºdâxGâZë7u‚ZéµlŽÕ—V¤Ó‹ "¸ã¦¸÷|¾ô|·tiå÷£å»£Aç­¶5äQ<9’º\±‹¬î¬º-’7Ë—TÐé3µÀñ¨{ç³okukr/"³p·ò¬ŠÊ3_ eß'XØ€/…î9]òÒ]NÇ—Þ–î<¾ô|·th8›/fÝ[ÜYºK~4PDÉ¥œDý^Hy-dcÌãwÁÃ)ãGÊï*y}èùnèÓËïGËwFƒ[k°É²oXÚëyZ ˆh©c†.qÉ\[¨¬nnY̽¹ð½g[8kmåtleÄ’ ¾8Þ1OËÁz?/½-Ýy}èùnèÐy››,Dç[½öÙÃM¼† ùK›G«„2‡êÝ€ÃuÄ»{.ÝðG7‘êÐÉ.x-¸¾I™Òܱ—0Uís¸§vºj¶ü¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EO/½-Ýy}èùnèÐ]<¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EO/½-Ýy}èùnèÐ]<¾ô|·tj˜€@Œ‚*wh?ý4SËïGËwFž_z>[º4EO/½-Ýy}èùnèÐ]<¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EO/½-Ý€f # ŠƒÚÿMDTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EŒˆÈ" çvƒÿÓSå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwF ˆÈ" çvƒÿÓA‘<¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EO/½-Ýy}èùnèÐ]<¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EO/½-Ýy}èùnèÐ]<¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EO/½-Ýy}èùnèÐ]<¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EO/½-Ýy}èùnèÐ]<¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–îÑSËïGËwFž_z>[º4EO/½-Ýy}èùnèÐ]<¾ô|·tiå÷£å»£AtTòûÑòÝѧ—Þ–î¦Úþ•sô (Û¿ ¹ÍJä5¡$iß " ˸æ–ÚHà˜ÛÊàÜ“5­yi¦+Áoþ+VÆ;È£·eôÂâèFýl­hh$¹†€04c¥o¾¹JÖ‚”¥{Ó£6 \ŸõCè»v¼ßk{+ƒ^ÖD#}K å-%£½q³LÃ¥›RÕÌk® Ý\†‡z¹®Ê†Þ[s$ñ²SÄk Ú[0mFýVÌX4!¿©|éõ·¬ÌN'àôtb[Oí.ˆ’Êj Mh‡¾±Ü^6 à€ÆùqŸ)fZ ‚§6g5kYzãÆE”ÔÈE4˜¦ûúžÏÿë}½º7M:Þcq½ym1¿ wHIrËX$19™ŸrXèß#C@kY“ÊP¹Îi¡ ºÚòÛÖãâep…ì®r3+†`ŒvзiÞ\5ÌlŽ~W·åº®ŒŽÖU–ycæ…Ï#C²‚;i5¼ÌÌ[“²½±&6f3ÅÙ¶›¬[E=2ëX×å­i˜R«W[vâùY#XÖ½ìÈñÅ£InßYlÚ £gÙ RæÑ†å™õ‘ïk¤{\ÌÇ‹›Â*j×RÑ;rNw”šÄýі嬦kvHêìÕ-®S•ÎmExU¡;¯"†8Ù®0àÒa{ÞðÀXƈ=Õ{gÌùÈÓBf%ÄŒ´«Zã€5WŸ9‹LãòÇÚrì›f<;[2èg¤íµOíàúgÙ½Dºé#ûmSûx>™öo]`¹uûä{!¹|-iï›nÐ\iÇì8 $vk€7j’oå}k†ª£ Ö­·º’È(k˜è¤ÖbÁúpùAqÒ×ÕKÖÕ¬V¿ŒòoøËWÓ§,LLæwýÊ[·h2V뮟+IµÑÆöP¬¯3 S©yc̲€ZOÒßáÇÞYßGô­ioS M%whõÞm3·gÂ"ˆÇÿ-'³j—uù#&ŒC•µÇ(¨qò‘³k8oe¡Äy(1î-¹^–¦Ž­h@Ð{ ñy¦}ð+Ï?öÿõƒ–;üåXŒ¤[ë^dx”ŒÅ¡§߸ÜÄ$‘̆áñ4;¾lq»Aq§°à4|‘Ù®Ã{ø½;½›Ôk×½¦µÌw øÎg~Ï#yT ¡+Ž8j 0?%l[æÊÝmÛåi º8Ú;l¡R<æõsœpÒà²7ÎGô‚ójzÍH×>YšÆyc;]k£Y¤ß6Ìg·bÓ÷ÃÒÇí¬«?|=,~ѪËÒæ‚h Þ\Û©Ý´.#”;V𠉫h8¦ƒqbêûb;ÀédmÅ©ðxŽiß#A $¾×Hµa‡(¥}E 8Êf]"µÄíŽÇy;f7jÒ·ÙÂ8¬i.pá+¢«ã–9¦ŽÌ’5½¾¹°í]sžÞöR|œ{Íýõ]£óhÝA4í‘–BÖ¸òá¡ i¦êèAªG\Ùw踛Q•¹½9ï'Ìï9 áãá-Nb±·i£ZÚó˜ÌÖäÚ—Ñëx°;TÐã•Î9Ë«„~)ŠÜ²»–y%†Qxƒxœ\ß6Šïe\[ˆÿŠòVøFÑ䎊æÂ.Ÿ t¶PËwt2ÄÞ,\X<ßí;Ü•™Ëz”¬iÌÄDN#ü}]›+('ƒY&ròù"GsF pÏøm¦óýlž:äí ;K“nëˆ#™Ì½…¬21¯-l—±²@3@æàwÔI{}ÙPIµ´2C ½‘pk¥·,;ÙnÛwÈàÜÏÍ‘¬n^0£]^+¯øm¦óýlž:~i¼ÿ['ޏ——SÝZ=»"(¤¶|µišÞ;˜%ög´°ˆ€Æƒ'íÉ$a¹Ÿ¶L9íÍë4—vL²/1k'µ›ª6IÖ†‡µÅÒqš)¦”¦Õü6Óyþ¶OUö6´:Bæ4–´M žC1~’â\'í-®Ý™²æ–ö8ºìb{¹]£üêákä‚á•psœFZ’ ikFD»¾žs w÷bÞä]lí]ƒCcmÃ\ûY_(eÃ:ÅŽxÀŠd¡Aßü6Óyþ¶O? ´Þ­“Ç[hƒSðÛMçúÙ„nÉ'ްêbÞw¬“Ç[bs€½ñ´dN1ÈÓ\ \ÝßqÁym°vÌòM´¶Œó[Âïôñ‰¤¤Û¡ò Øàß_dO%Ń%”ÕÆIÛ_šÉåcF;Í-¨|Ä>Ÿd--ƒý.?KsÿìÌ·aóú6}‚—7vöŒ\;#\rƒBìhOÉyjl‹ëËÆ½÷1ÛF:2æf­iœšîhQ·÷ÚÆX:ÁÅæœWq¼“š{ %ͬ¢ Ö¸E%›-Ú-ŸAŸ+ÿfâ÷:ƒ²Þk}û"3Ùãäá©©5Ôß²±œnÏ.çjÓjõ›é¬õaºœü|Õ®Gw¹E+UÐ^aßOu´¦/‘Æ76G¶2òðß(ÚP0z½+sW9ÎÙoFüôæÎ~éìÃÓGfYNV6›„’I  ’I4bNyË­¹´ãÚÅ ѱ̎6 ¯Ê\ÆÈ5‡)ãôÀ–×¾í¶¢¼Úo둘C#²ÌàZ×9­€Ô)_)£µ2~+´ÆfºXÛ–™³f‚††ãRkJn¬j_f+çzº™ŒWÎgM$öqË)Ì÷f© FâàíË›è6‹šÉddRPÆ÷ƒZáŠîl›y­¶|0Α¡Ä´»9hs‹šÒᤀhtð'µ¡uþÑ’¯·!ÝéwÆ]V‚{ Þ&tâ6ó—^Ÿ>Ÿ,ïåßœmrÙwµ ú™ˆ®#÷øVfOµoõÐ ã#û+³Ú%-p JkZî…¶ýVgP÷yÝ•×ÒzJëSžú–ûfk4‰ÇƒäkjëRóIæÌOÕëÕ!óú6}®©˜‡Ñ³ì„}¥‰tIà•Ä“óU‹dŒ0ƒ—0qqF\­ [?˜:çáÎ6§ÉÐõ€;ðÚaO›¾¼^Ϲ c€¶œyym0Þ¨]ôôâc3·=á««13öòãm§9ï{ûØ/íú͹%™‹1bÚoð­…ç-Í{² Y~Ü;E~N_î+Ñ.z´ä¶"rÖŽ¯RœØåþ»‡ÌCèÙöBѺÛ0[ÝA³ÈƵÒ²ÌÕ vg´ƒLth¢Þ‡ÌCèÙöBózÞòËh¡.ŠbV´ÑŽkc‹+Ý f Ëï…‡WBM¿8{µVeу@]%Hµkð1;ë{fí(v„%ì%eГRÂ~ûÃP<ÜvíÚ%ÒÁ&¦CçZ¼| jb’M—u•Ìë0×#«F\FîùŽ,ÐwxhqAì•!óú6}®©˜‡Ñ³ì„—2H.œ×KÛG9ä†ú—âÁcdÛ8ÜÜÚÉs=ô¥wÝÀp¬W‘Èí£bö´–3[ÀVŠTî-̳s­õg¤L³s­õg¤]b"""6D13®k¶Vi¦™Ž{L®$ŒÔN\«ÙŽt­Ž]fG\ '{}u²Íη՞‘2Íη՞‘P‚8Ùq ¢ºh9™>¾9bk]•¯iqo|Xj(×x+&Y¹Öú³Ò&Y¹Öú³Ò Ôºmì¬c M,Î cófhÖ+C¥M¬R¶à»Vø`k Cüõ$ŠQ¡î(Õµ–nu¾¬ô‰–nu¾¬ô‹§x¾m˜Œc;<šæž^]„ºé#ûmSûx>™öoQ–nu¾¬ôˆ0!ÚÆTh:ªÓsœ[d-ƒ[!{F|Ç1Tˆµ²WCxôÀøB‹.{žy¾«ÿ¸™îyæú¯þâ Î×=¸œÃpª<jAé*4þÑêÙîyæú¯þâ\4PJÀ*NnœOíµsYŒã1…‰ÄĵèÀ[SÁL(Vx¤`€šÑ\òœ÷<ó}Wÿq3ÜóÍõ_ýÅ->yy¦Ûs›-­Í9Æ<º¸fu=[ÕK`ÖÈ^ÑŸ1ÄŒU‹® ÊÂA¨òZŽq3ÜóÍõ_ýÅÑ–@úÐåãÓ¾(®Â ±Ò½ðÜ+&{žy¾«ÿ¸™îyæú¯þâóÛÓVÚ±«39‰‰ÇfÇHÔ˜¯.?|=,~Ѫʅ³S+jõž‘2Íη՞‘zÖ"¢›ëŸe`b¾¸ž@iƒa'¤åÞÅoe›o«="e›o«=".gWT’<ùxŹMpL³s­õg¤L³s­õg¤DkÞlènÎgU®ÝpÝTm§T°Û76cåéߪÛË7:ßVzDË7:ßVzE1 Æ¥±3˜ŽÉK@k@€ s/ödóÍ3ãlN±­.öe¨âÇi®+¥–nu¾¬ô‰–nu¾¬ô‰1”¥æ³˜qäÙoÖùVkZ2— Xó~O ×»³ìæ·–i%dQ‰c†¹FLÕÀµ¾ÛË7:ßVzDË7:ßVzDŠÄmjÚ¶´rÎ1ý}¶22+`ÉìÏ4ì9îpî±Ö ðÂåe›o«="e›o«="®n¯XƒÃ Ö ðÂåe›o«="e›o«="¯XƒÃ Ö ðÂåe›o«="e›o«="¯XƒÃ Ö ðÂåe›o«="F\CÈ%¯ËP2á•®ÑWxH:½b 'XƒÃ ‘¹ñ±æF‚öµÔÕ“L¼â¶Y¹Öú³Ò êõˆ<0b .VY¹Öú³Ò&Y¹Öú³Ò êõˆ<0b .VY¹Öú³Ò&Y¹Öú³Ò Ó}þÒ/qnʘ´“JÍl =r×¹vÓ½u´ggÉ Ys¯‘ÒÀà­{°l¤èu2Íη՞‘2Íη՞‘BÒX㵆7¸²65Ãx†€TÜ;›ym§!ðÌÇG#jEXñ•¢‡A\ì³s­õg¤L³s­õg¤AÕëxa:Ä\¬³s­õg¤L³s­õg¤AÕëxa:Ä\¬³s­õg¤L³s­õg¤A;Zöá²±¶¶o»nZ¹ì’&4÷¾VFšûËG¯mOú©}u·L·rÍη՞‘2Íη՞‘®È‚{}W ÕËžg–׉&’FÔ°¹½ë†êÚ‡ÌCèÙöBe›o«="e›o«=" m§×õ êÖç©“¼£¹Ì4Ñyé6>ׇ:Ü4Ñ äÔ0`k¡„ê²Íη՞‘2Íη՞‘s¾”^vͼ;u4+©?u­á±ÄØ{6úÒíÒ\FXÃÚ s.{]ò Þ]åL³s­õg¤L³s­õg¤Z¥"•åÍééÆyk»¿½åãØ{G5ƲY+êssuliÃ6ø+§±ö;íÞëëç:[É-kÈ~¤6 3ùùBìwªxÎwW,Üë}Yé,Üë}Yé®k9ŒüRšU¬æ3>+¯9vý§e¶ç½³‚Y+”7+\XF¬4ÖƒW Ë7:ßVzDË7:ßVzE«F{p뇖¹Ù—’0݃,ÓÊsº3šááT‘¦ºXu[OùiE Õ:¿õùfç[êÏH™fç[êÏH¥kjZm§{Rg/o‹Ï­é´õgšÑ‹qŽÕÕ!óú6}™fç[êÏH™fç[êÏH´î³†f–èoEæÙùBXÆÚí #€’fÿãM+Ñe›o«="e›o«="Õm5Ü–¬NöŸfë+QnéŸpCœíd”¯˜aÀ¶U2Íη՞‘2Íη՞‘fg;T‡ÌCèÙöBM 3Æbž6Ë©™Í45²™fç[êÏH™fç[êÏHƒÎË—Ð=ì´1> 5ošG¶C€®}\T覆¡ü·h oºy¸|nÎ[@ØÜErÔqA½› W,Üë}Yé,Üë}Yéêùˆ}>ÈL³s­õg¤L³s­õg¤A©sfé.1¶‚完ãBÂÇHM<”šsŽÒ˜,n#·†3u$f8ØÂØÄe•kCM3Ä]¹º¶²Íη՞‘2Íη՞‘f+i´o¶3ð\ìÇ;ðé3o›¬kºÍ|®]vº”ÕiËÅï—QS,Üë}Yé,Üë}Y鵊çí<Óã$ÎWEL³s­õg¤L³s­õg¤ZEÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yé]2Íη՞‘2Íη՞‘ÑS,Üë}Yé,Üë}Yéjm¯éW?@¢®Õ%Û亄åx$ +ËtTï" é|ô<'Ù=S#_3óf!­esš1/¯zFò¼¾zìž¡¾z_£Ã"¦-çzÉò ÊÉêç¥ú1ü2 ÈÝàý!sd½»÷““µ²uGkÁ&qgË^>.4¥Ej:MÐîÒ“¶s4¯t²§p|ÖüM[Èkcljž”`¨ÍC»!uÑšDÛŸåíŒöÆqߌ¤°_m˜mqiÖb‰ïŒ9Ìps™š…Œ~°`7Zg\—[Z8â’î7B%ÍV½ñ00Š’5¼m5£3ÅpI6Lº’CošGõj´Gšf½’ÁºÌuŽ=öêO²Äñ¹¹˜:XÌ3È5Y¥Ž®£]䲊gwzf«¬{o²'ÿ9Û™úqíÛÜ›v¢ÊýïvªáóÏS™«’L¬®ÍƒºÑ£Ný#ÛÖR0–és²6Ä×ÄâçI˜°²C9p8v[\Ÿ„Àìí–I%Εâ†5ÓçÎAcZý8bã§Ì.Ö—ÝÌ÷LÖÇ#œØMcf~&]NZa® 3é¦mI2œìu(eu)CŽ5Y³-¤ˆC&gF$–RÚÓ1œJÒE0ò¦”ì-^}4ÄÌDÄÚÖݑٳå¿rmb‡mÚÎÒ!k¤›0kac¢{œ\áG²GF0Ç ‘ZIù‚Æ ÝptNãk÷F×F÷ÄIN?ŽÂ<DZˆ­åÙ’qçdòMyÄÕI#£&McpÉ›ÞÊý,>ö”¶ÙNŽ1žâFÌüÝaÑ–`|›)v@FS#†fd;¸aMcÒþ]™œÓßwgãÃfþãîlÛ]²ëY‘kb{£.x s˜ç1ÙqǽӣúϳŸ« ­6\Ùo4V€V(™îÇ+[Z¸î •Ó‚@ÂÆA{ä5ß•î‘Ý×.~ΗíQ šÉ:áÊç´½£ÉAZ´9Ÿ óO'Sd}œÝ¼±m—Æ!.ê€N$s%7T„ˆ‹A&§ó…7oÄnéÝ, m½¡âFÈ\æù6Jç5†6æksïÖƒ\ vËwÄbáÙõ¥Ñ8Æsˆ[Åh”ÐB4¸î©ü:áî²ÎÇ[Ýn#le®w“dNk^dvV»&õhp5Åz'ÚìüÏçœóvã¹>äô%|­BÖC,ÒÛÄö¼¹åð™1s "#¡Çqb;^VÂ×Ë0¹ÒKi',‡È»VA”Åß9ÕÊܸ€MwX6\Vòõˆ²¶äÉ#¤”0VHæÈèߎ4†¸Sz­(-6„ê㸄¸É$Žs qUÆJ'㻽ïÌúlÎ"¸Ìl·WÏ«Ö ;Î5 KMtàiMÚž—8­ï1ˆÛß·fîÄû¸2õlfÉ«{©%2G#Þ^Ñ@ý '¾8 •®Ý¹¢|š§;# cdsÙÄ'3]«#]ƒi˜Ó@ª¼{'$qÇ­®®;Hë—OSË^ûå֎ʬ;!ðÛõvÌ ) êYŽºÜDÖ;¿ï¤Uºtñ–¢=$Lí´Ç5qœîÙ™Ùîm›ÈøØìí2†–¹Ñ½­ã`Ðç–åk‰Ã+ˆ5Áj?j¾-Ÿctñ}Øfc$š˜˜_¥'1küŸd¾{†Nù"sÃâ‘Ït9¤iˆ±Å°¼ÉäØìº1ÒìqY?•–¶PÃ3[%Ž\¯{ šì±:V‡¶•Í]*DzhŠæÜÓ?”Nc'¶#Ž «Aµmd 8G)a‘Í5-‚ñ­ ³ãL2èÌHïídsXæ½îÈÖ=õÊçŽ,i¡ v:0#JÁÉ`eË$¸]Äc—(ËB÷Í#ÜÚæ¦3ZSIQ.ÊuÎwÝÊ×Êü%Œ,f­šÆ¹¹LŽ5{&{k›t*šúi›bÖˆÿ^ÝýØÝ ÷3þ%g‘¯.dr1­cÜç6\Å™XÖ—†8Ð €*Tõû]ccÌàçeıá­/µqnV8Ôq\AÄaˆZòì–qŒÇšYÚdcŸ«gñ2Ȭ‘î£57*Ý‹.[6fHAΖh›%ÁtMkY¢¹xµ­H"¢Ž_K·ï¼lÙã³~ÏîbÛV÷—of·~²# ¨ú oÐï ®Âãíh:·å‹‹lÙõ6º¼Ô¥r46´Çyv òó[“<¹ûs¿ ""È""" "" ~Üz7ý¨Ò=2úO¹~Üz7ý¨Ò=2úO¹>bFϲä1Ñ„5ùNRá˜SB@"½µH|Ä>Ÿd+稥2;'õúÈ9FÆôNÛ¸â‚7‰DŽ·lޏ䙼Eß»Z+Äù:w·­`|ZÙ$#[pýd½ëNVÆÚâhÖ wN4Â.·Öµã9v~±º!Ç; æÌZ‰FwæqãR>®û8ˆvL…ÝšÓqOá3=¥äê'ÌÀÙå™Á€IζaPC&v@ƒ¨I:]ýÞ·ë~;ÎXr$ØÏÌ_««‘¦õ‹É5²ÑšÈ†fetî¦\2†·|¬ö;ªÎéÜÖèšÁB繤É4Ò òUƦAq"´ÐE›z[Vk3²qð1kÿÿaƒÿÛÚºK­b}Ⱥ%Í™¬15Í#8‡8QÀŒKGk…dÕžvO©Ñ®*º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º*jÏ;'ÔèÓVyÙ>§F‚è©«<ìŸS£MYçdú ¢¦¬ó²}N5g“êth.Šš³ÎÉõ:4ÕžvO©Ñ º,35Ì…ïl²fkIÉJôw 8 ƒ›µ?£\ðI퉵?£\ðIíˆ7åóÐðŸdõ óÒýþËç¡á>Éêç¥ú1ü2 ½NÂ|m<‘=º=RßÀîŸÖ¹»¬ô‘{V. =RßÀîŸÖ¨ûXC££M ¸Ô'FWiÀîðpAWÅ…hòtVœW|ÓNçá õKºZÖq³Ì! y-d¤qs4І:¼mãïîõÉtr’à.îí(ùk01ì5‘îÍ%´§w nÅ ¤ÌFÒZIæi«NRuµ6ƒŸm-» µ36g†9Õ4;¦¼\*jx7VÝ«Äv®’@XÐù^si‘î®R+¡qd¾µÖÆn_¶âA¡ÑfÕÉ•qñf讞MóË·Øøç,ÛdgáÜîõKºZuKºZÓØ×Ñ\Ç$¿?VÈÖ».Rè‹xÒîøµÝðv½zž¿¬u ’ëz¦»Y¯¬zšõ?+—.³æïã•jbbf&10‘11˜œ·$‚Î(Ý,´dlÏ{œZÖµ¢¤’N*±–jõncõÌÖE•õÏËÇm-ã Fø^Wÿò[+ÿ‘|ùögÿÙŒD]eê.$Žúm'åÄܺ·¿¶ÚÖÞ)º­¼2:9¢k¨Û[‹›GKÊQìdr†6>0fL¼e躥¿Ý?­`‚ ¨"¹·Ìa™‚HÜ×És^3‡e«t×t.@×gþ½ø6yu:×Y®K}^}_ú¬¹õýþ72-]—×Ö –Ià1ÇfØ Îæê[ :à÷‰™lÓ›X±†AòqÈz^¡oÿ³ÖÉã§P·ÿÙëdñÖÊ Öêÿû=lž:u ýž¶Ol¢ n¡oÿ³ÖÉã§P·ÿÙëdñÖÊ Öêÿû=lž:u ýž¶Ol¢ n¡oÿ³ÖÉã§P·ÿÙëdñÖÊ Öêÿû=lž:u ýž¶Ol¢ n¡oÿ³ÖÉã§P·ÿÙëdñÖÊ Öêÿû=lž:u ýž¶Ol¢ n¡oÿ³ÖÉã§P·ÿÙëdñÖÊ Öêÿû=lž:u ýž¶Ol¢ n¡oÿ³ÖÉã§P·ÿÙëdñÖÊ Öêÿû=lž:Õ¹¶Š7ñ]( dÝ®ûŽòé®vÔ{XéD.{h×աþã78#ÈAªÑ‹šÙ$qaÊð&q-4¡ÇB ÒØ÷ÜÀe™ÅÏ&FÔãÅeÅÃ1ÞhjlÍ‹³ö]Ûî ¿™ïšºæË,nl¤ÔÕü@IÖµ¯l¬ûøOü¦ÿö®Pt¿n=þÔi™}'Ü?n=þÔi™}'Ü1£gÙ ™}'Ü!óú6}‘é—Ò}ÈÐkË}´Yµ›h- ¬Þî¸ÙpfQÞº<ºsP tc¸iž]nq%Å$œI$+Èê=ÀSHßqÅÔÐ4-î§µ²†H }Çf ¥Fp©3ˆÉ ›Fó©Û:qN- ¨$R¸è¢ÙcƒÚÜC…A\™¶”Z‰¥:¶9®4Ô;&[†8£6´P2Þ&±Î|ŒBÆ—9‚˜fÞ÷×*ëfÓ˜¶&b#dçâé4Ù˜íív¾`x ÔoÔoẲFâö5äæÊt…ÏÙ÷7r>Qr’ 8Í#¾%Σ†:—Ý‚çê¯zEf“ù,.•bsÛ7¢ƒŠwH:j¬ÙI~W =é —cµ¤žú[I!,`®W0Ç\Kxd‚ýŒuKxÙNø¡WÒÖú¶¼[W’tëϼñgkŸ¬¼úyÒŽ—4jÚ)6‰ü9·eÕPH§4•+™´¦2DøÚü‡çtÂôLÄoZRלU›B)aŒ9AÝqßylÆòøÚò)˜V‹Å¶êê;Öˆ[™õ Œ ‚òöVÁí‚1& ‡es¬ju-3njLf½ËnX¬F1xœY•­.phÒp ;írŽùbÙ^ Ë=ÃrÒ¼c .>¯ÔN”lß1³¿¸¥rÁ£¶ÖÏ„¾H˜çÉW9 žýÛ¥I55Z—nq°Šœ¢âáÑ<9 äs‡¾Eè›òéóÚ1ŠóL3™Äq$»±ÍKk!p+”=¬hkŽó0«½à¯os³å‘±MjØ$y!ìnW¸7{f9ðM­ãÎñXÙ ¤f"¿'½Ò±Ë»Ža3hé\ìíÑ•íâaJè˧ß_>=uâ‘«;¦ü³N]˜þ\]ú1™¯Îsþφ™ä˜ÖTŠåV•ÞZóË©·–jfÕF÷å­+‘¥Ô®;ÊÖ³>}Ÿ²yÇ4g;î±O-©ŽH¦{r¹®lŒÍ‰ip¦ éDÄÄLvÆaçÝ8`·½º”E#íK!›%ÓMeM4î­å¢Ö›X-Û+œØ£sŒ¹™šØÈ-Ç/@ÍNÍ+»¸Ç²A™Ž*ÓQ_ycO©‰êrç;9x5n_õI! ¸à’±ëªÇ:&:RÌh¦;Üj «‡RxÃG;±˜Pá+-íÄ\Mn¡Î{”Mi­¹k‹ZDÆeÑ©lAòÑ„6¯Ô7*¢'™#-,͈M+÷Æ+“q¶àšØÆö¹Ž‘ºÒñÝ[û6WKc Þâçe¥]§ŠrŠö”о¥¦yþñXˆÃÎÚ/ºl‚V€öË+P2FòÀMIÅo5Ù—cŸ-(ÿÛq휺Æâ(•¨…ŠëÛÜ[NÓJÂÍ"4âݲØV·µžâ-h•ŒÏ¥…Ýë‹tçËV+¡,®£šWÞªµÉºfÌ‚[k©-Ö™„m‰ÁÍží°ººèäÅ­q¥=ú¯Mo[g–sË<³âç5šã1ŒÆ~ ßî9öz³Ò'á×û=Yé6íIb7±><ÌÙùbë2¼q3¢†HÚ dæq’‡+tåÈ×FáµÛ׎öö€_&²9Ÿ$1†Ä!q!Ò[ëjEÃ(~V4»HÚü:ãŸg«="~qϳ՞‘rNÓ»}”ñ@K§‚ü5Ï’GFN}§ªŽ!Åsµe€´º™Gz3QÁ»ÓmÉâìêìuô3j¥·kæ”PFÉ‹ã0[I#š¬˜Ú4®ŒÁ±øuÇ>ÏVzDü:ãŸg«="æì¥%öÚ2²I:¬ñË,P¼š5®ƒeÈʶ¥ k»g}z$ÿî9öz³Ò'á×û=YéAsd±¸c õì4ÜÕž‘kå›o«="êÜy‡ð/¶v§æ‹ øíím ¹‚åÙmžú×NI<­è¦;àh\¹»A–N£óÀùóå¦GÆÀ;çV¹ÖÒå[‹‘¶múÙc®:ŒÚÃ-Žºè0nbMw±¡uP+Ÿáåúøg÷îá+ Ïðòý| 3û÷p”Ý©ýç‚OhäM©ýç‚OhäA¿/ž‡„û'¨ož—èÇðȦ_= öOPß=/Ñá‘·Yé"ö¬]…ÇÝg¤‹Ú±v9_£ÉÑZq]óM;œ;‡"Ç «â´y:+N+¾i§s‡p†EŽAWÅ…hòtVœW|ÓNçáȱÈ*ø°­NŠÓŠïšiÜáÜ!‘hºM•ŠÕØ"yÈÞ(Õ:Ž$´Å5àý yp.¤¾×Û KÛ{x㹜ÎÉEH¬ Ï¥ÄY›W6¦š:´AÚ¶Á¥öÁ’¸½ÎŽ”{Ï|â[¤á‰Z;bkmí¯lÅë&1ì4?½«ZàF` ;˜UmY=YÒf5“;5p¦±æµ\ÇݶI#|ÏkLïŒ3HÍSÃ[Äp 5;»ü oÙ·ÀÄÎçq–̼mÄNXÙ$·-cÜ 9ø çãƒhtÂV ¯v`¸·Š[Ïí$d®}ß’o•aŒG{†½œf¹î¥*rá€+S‰ŒOxê"ñwVòëeJË›k§ÙŽÃnav\ÖZ×Éyf¶<ÏwÌv^ôß•±<òìí¡ÏÚ³co#c–€êì'¹²ceÇ3F¡í«ëæó¿ õбɱ¶XœÀsÒ×5 ‚4‚¼èÚ’ˆ¥Úzš(‹ky®,e»˜Ícã0ºYG ù?šêéì}£´€Ù¶íž¢d6QÅj÷ÒIá|0ºI[·|¡sÀ{dkF^0£]PõÎ’69{ƒ]!Ë$çP¾ß9ZO¼¬¹íãmçëghΫ\+¬‘ýg/…ÞC_ ±æ³gÉs¶¯æŽè¯ q¿$õ–68-dtLh½{jÓåvAD«$‘Å¥•Á‘°=î!­kZ*I'@ ÇÜm[«Énn@‚CÓš$ŠK‹ÁyjN¶6ÀÁ qxÉL¸ž)͵µ/D¶[R6yi(´·¬#®Bmc¼Îê½ÏÆ2ÅÑAêrc—jAwqe Åû£Ž ƒîžØÎŽ­à- j[A“tñ´Çžâì;hêÝûRa} #‰ŽöÑ0LëgælŽpŒêãÊÆ‚çµÕ.5pzä\=>Ë·¼º“gºìÇ2Ò6P jYf‰Àjx¹Îhƒ·i–¸QjÙˆÿcƒ£7FêäO@¬ˆ ò>æZæ|ŒÕ´± V.1Ê3¦UŽHå²ÄàøÞ˜öæ¹®¤Ëü³-´›1ÂÖQ4qÝ]´ÔÆFÐdkYZÆ5­¹¸k@këÅeÿÙ^ ßîn:_wÚÞÒ 7u{v–ÄÖsžjù%{Žg’MIßA—öãÑ¿íF‘é—Ò}ÈÓöãÑ¿íF‘é—Ò}ÈÐ!óú6}‘é—Ò}ÈÒ1£gÙ ™}'Ü¥¨{«P*)R;þÆ%c¶þ/ ßK›1{ž×0f>&•Àœo©š¸ØÊ×+CkÀ(ƒSj"¶t†çÐÜ­&•[ðch$¾@sÝß”€tâ¥f+i·ì³9ˆŽåÛØÃi4Ž -d®š—6ƒÞUt®¢Œ­¥((±­§kâ"qrÕ-¾ò¾2 0`Ggu^'²RÒà5ÿø$vÄQ QÃFNF ÑQ£ …=$ÖÕžoÆÙúù·mX´LcI­âêé§]åÏÚ2Iœ_¦l\Òw{ ¦‹×1½ŠjZ“š¹6ÖQìøÄ’ ×4ϧ(> ê4Q£pÒt© "ªR# ksmý²Œw4®$“ÞÉ´ÙnŽÎúVµÓŠî(RÔ­±ÍnYÌgŠDÌnJÂûgÜXR: £•òBNŒí‘ø 2´O3 Š“‰Ýq.;•mXµf³ºc‘8œ´`¿`š7‘–h\u°<†=µk›ò´Š•GܺS$6À>æW¼†´æ‡¸œÏpÀ èJ-禺KMÀw£tP·$Q66ø-£´ñG ŒE&ùÓ­ùùq·>.Ým¹ÇÝ1Œ‚ÛÚÅ;ØÀh;ôªóW6R‹ë‡I Ü×»3ƹÀƒôô²KœR”ƪ‹Ù5Œcv³·.<–Ò> øÜè¢y¶ŽÌÖ†ñ{íå»o Ÿý4nc ²­{A Œ½ø•¶‹3¥Jêfßlc‹ÍöÍqX®€6ÒTT4S蚟-iÙì,.•¶öR–$q=Á¤ƒI®ŽÅVÑ‚¨8TjØXcÊ2;¾m0]DeÖ]žèÞØÙk%¹®i=h ë{£Åçì]­´…­„0Ûƒco•´²;VÐ]40;6±ó±Í#\(ѳRÕw=3à‰òÇ;›åaÍ«x$(æšiiÀÐáPEÏóûqÌ“Ù[Ç$-ÜÖ\¾hÜòÊka£HÐñº¹á·³m›ÍCn3Cw[9›ý,pˆm¤š#—9®}¨ñœ F—ºÛ[J|‘Åä¡»|lû¼™‹­ÚÇÆk.^÷µìœW0ŒÓ cÅØÚ³ßϳ6Ìn’ ¼ÐNѳË!´lÅìv¶‘¶²”‡hï±À=.[/ö„ZO_š&C(u£[c3hYs=8¦9ñÍÞáU˹ڗð[ßm W?¯[XÈÉœàÇZ ÜÌÖ®`ŒanIysSLhÐô“Aù5­Ì#x‘­$Ó;{ÒFƒCˆ®ƒC¤².]¡e–Ѻ´3?«6Y¯•ò‘,òO“¹Îãd` ­+ TšóÛ=ÃnÅÔ·/‚Þ{‹»ste&‚ÜñM´ ÛÄØõ5 —e›Ç}Ò,pA´M†åckARI$æsœçT¹Î&¤œIÄâ´öTG­›k.^¯ Ãä–QLÙ¥s§sžÜõŒž(4sœÐÙ>LÞÙ·ÌÙÜà rEÈfðk ¥­CCFâ‚" """ """ -K¿8>é>ïv;kRïΣúO»Ýˆ`÷{½ßÿïFϵ"Ïî÷{¾<þ%ÞŸjDûqèßö£HôËé>äiûqèßö£HôËé>ähùˆ}>ÈHôËé>äi˜‡Ñ³ì„L¾“îF‚“\Z[E¯¼ŸT×Ë#äÑ6¡î£E\€¥’C)òNs˜X×µâiZGhÁEŵ½Õ“íî˜Ù ‘òµìvƒYM=úè¦*¬ÔÀ÷†1DÀZÖ°¼`0Àƒ6F×úÙwÉlȲjœæIœJÆ–å-5ªÈÝ÷úÉÙΆG—Œ¡ÕÀJö7*–™¹ÌÏl³ŒF+ Øv>˹b´„Vlç=ðµ­`ïu\æåhb³Igi,Ž–X#|ŒÀ÷¹sLd‘‹Nö…³™âp-‘´°‚ܯÊG…b¼¼¸ŠâKHY5ÄÌ’P%ÅŽ#]ÆlrœÕ•´wñß*ÎÙ{1ö̳}œµŒæŽ mv8µ”ÊöÕ›³ì,S¶ÚÍnÁÚ`ÇR­m À.Çæ[‰6|²Ã-ë\ÂéžDŽÛu‘Õ˜èrNÖT˜մ¦lŸŒÝÛO´ç[V†¾š(IqÌC°#ŒHéC@‘À5Ï ÌZÒKA;Ã1§ XÛghË—Þ2Ûu Ë$á9¸`çÓ1QÚ\™ÿ0>(úÜÖïŠÖ+‹˜IcØçJ-#»sÝ”·½:N3Noš8ö‡hÝA´îÿŒ±¢ ]\6ºëÆ‚÷ÝUùY\ÒrPñw(7†É°dL‚Yofeá­’2ÂàÖî9­vï@8TŽÙö–YÝm ¦¸aŽy m/’2,{©W6€`Wm»uw×d‘²1w“"u´’Ú ]‰cŒùŽ¡ç­§¾£Ò±}ÄW÷63Nû¦Å ²YC•™Ó±Íò,¹F¨Å®' ‹MŸaeŸ©[Cm¬¦}Lm6ZÓ6@+J«ZZÇi†2\*ç¹î¦g¾G$y ®s‰À¼\x¯¶”—À6RØçžâÚ7=‘ºÒ°‰²ˆšÌ·Ƙ¸ùÈa£òœX·¶Sî­y÷Vg/V¸”1²HxÙÜÝK#i‹½ÈrÔñŽ-,(:´v\’RêÒG ”æÈâKœÇ2;ˆÁ&¤–6PÊ’K²æ8•¼€ˆˆˆ€ˆˆˆ€µ.üàú?¤û½Øí­K¿8>é>ïv!ƒÝî÷|xüK½>Ô‹?»Ýîøð?ø—z6}©GíÇ£Ú#Ó/¤û‘§íÇ£Ú#Ó/¤û‘ Cæ!ôlû!#Ó/¤û‘¤>bFϲ=2úO¹ êp¯œ—E9Ó¾µ¥ŒÍÖ¢i’"Àk˜T™F•²a¦vSˆ®‰IXÛ^±%MxŒ?YûÉ;vtñ›«HfkÈ+nNV¼¶Ì~ñm®<›jÙÑ M´6á³@Z(Ç4¿)c›Å£³îo-©lƒ¤t°<Ã#ûúæ?é0à¨,à[<Ù£:c‚ ï¤A$öׂºô¥ôkµ/˜‹Lãmû;]¦ô™‹Îsž XñõÓÄšBc>X3{ä†k{—_‹ÆÂÓ©s"cM+$o¦y³WweÑœ~Ó‹ÐkZÖ†´µ¢€ p)^Í-8Ó¥iër´óLÏ:Xõv±7U©®ÐÙ3g®kæ;=~}sSr´] »K»ëæ4Å5¨XÇݲf˜ÌOŽXØëvæ%“ÖFœú°EÜå½ö+«qs«;¢!ñÈÙ—3_Û+Î×7¾hÒu{KþÖç‘kÿm?º€Èk=ͼWŒš8¢|Vòº&ÙõPbu¿W !ΡÍY†ž6ÁnÕÕEiug=Õ÷¶9!sÞ×HýU¼îšf#‹.zkŹ³Æ¯iÚÜò-ã&¯iÚÜò-ã Û|Wsí[yM»âÏy|Α¯ñJÖj£ÍVËW¶®Õ´Ó3s–÷Ü¿ÌP]Ëaw{qi0Ölê[ÌÖuyZÙŸ ¸-’-sq”qÆ£Fn6ίiÚÜò-ã,ww·6òÛO´î_ Ìtr7-°«2¸T[ƒ  ¬¶yö¬Y*ÆDüﮉrÃ…| ¥íãòU%WkuZší“6zæ¾c³×ç×57+EÑXn­ÅÌ:¬îˆ‡Ç#df\Í|Ol¬#;\Þù£HA/ÙW–{PíWÍt57’èZ4¦Gs~Wd $œ¡ Àšý¨ËwÉÇ]ìmÍî³WGšÀΰö³½k\ì3g:ß55{KþÖç‘kÿ5{KþÖç‘kÿ.,.ÜVÖ2FÍ£f,Ú×¾"è$¹Í-õ®Ì¯.a{‘›Nk Û[þ#&cMÅÌ×:löÒÃ;¥•‘Å ‘Ù^öTêÛÞ»ŒkƦ¯iÚÜò-ã&¯iÚÜò-ã Ìr]Ͱg×ÙL3Z>Wê'hÔK«~vMI"ÎÆ×äçÆ­ÀW]æéÛM®’ÒWÁ èŒu7<Ï•¯«qh£jm9¨2ÜYÞÜÛËm>Ó¹|31ÑÈܶ¬xÊáQn‚·s¥WkuZší“6zæ¾c³×ç×57+EÔu«îv¥üw6Ï67V‘[™K˜&S9‘£$šÁQ=+A ö+­un.aÕgtD>9#2ækâ{eaÚæ÷ÍB®¯iÚÜò-ã ÄvVÑ{Íüýb|ω®·{àŽðE .2KlaŽ2O^+ë¸æ1¡Ùw±B ´Ì¾‘÷\e“,ÒÁ×#Öµ²êõ ¹Ô”¸ç®m/Ë«Ú_ö·<‹_øÉ«Ú_ö·<‹_øÈ7vŒ2]0ëlä•¶Ó‡A¨¸0Ìæ˜²™cs_tŽakž0©Çuï™såM Û¢u‚Öè´=ÙÞØËd11î©ÌæÇ•®55 ñ¤âÕí/û[žE¯üeŽâÎöæÞ[iöËᙎŽFå¶cÆW ‹pt»"Kˆ¶³©.ºã7Vk'|lúxãnf6F³¿iaÂϴãɲöõZ½dR»>lÚßôínz|ž÷-;Ý]EŠêÝ—VÓZÈHdìto-ÒÁi¥kŽ(7&eÁÛ–’¶ºÝ–óÇ$à³#_+á{AixìN†îŽÍ9û"ÏilÛvÇ;ªÚäŠ[ŒñÝ\Æ"6ùä“TÎ+Æ!óx¸qgW´¿íny¿ñ“W´¿íny¿ñtå‚Yö”2HÚ[Z0ɨãÜIš*áˆÕÇQŽÖoµn.¯iÚÜò-ã&¯iÚÜò-ã ï¯-³®a´ü¿gs9-Š+X\÷5®y#jr°Aº¶µ{KþÖç‘kÿ^ÖÝ–¶ÐÚÆId ll.ÒCh­)Ž5vvÛÙ›QïeŒ¦cyÕÈÐÐpsÚNò^YÜO´-åŠWÛ²8gkåVM^è [IXüBpšVÅ¥•¥”f+H› nsžZÁA™Æ¤û´  : [kXí¦,†\L‚£—9vfÆd¤yI'ˆÜÝ…6,¸vÌü´è`|Ì…É3ÚXl6‚§;ÚN2ƒÅwhÊÓ·³½¶·ŠÚ §rÈacc¹mÁ•¢¦Ü^(%~Òšîvål,Z ƒV?,³I‡†àÖÑÚ2Tw˱ÝÞõÏ¢.-ÍÛ35ùe‹#â‚­¡4çÌÜ8”89hjö—ý­Ï"×þ2jö—ý­Ï"×þ2ú.¯iÚÜò-ã&¯iÚÜò-ã Çdñ½ËÝRuzâ ÌÇ´O`,6?˜vFÑœ[YNf”‚ì¢9i%Î`p­Ë[qm«;¥%òHé—3Ÿ+Ý+ÉÈÖ·¾qÐAeim$ÒÁc’åÙæsE ÝJTû´Ôé% £k=Ëìõ/tZ©Ëß+2fcu32 H×Rà4*–Ö²E´Rì’ Þ÷Î.{%s®kòÝ!Ÿ$¸ÓŠÐOE`±ëf®Û,.vÆ1ü_'žÞÕ†Z?jÁÏ—åR›«zêÒVØ;eØBÆÂm%†$!ñÆöµ±ÃØðòöMk^÷Õs…¥ÄsM-µôöÂáâI#c`ss†2*l/wzÁº­«Ú_ö·<‹_øÈ6öE¬±\\LašÞË©Dóça½ÆMlç%Ü­ÏÌrŠÕÝEÀÕí/û[žE¯üdÕí/û[žE¯üdõùþ½sÿâZûKµM^Òÿµ¹äZÿÆHmdŽâK™®e¹šV22éDbŒŒ½ÍCcL…œß™64fÊYœÛ¦¸3U©”¸¸è‘šÖ¸SNâê,²´}Üw¯‰¦ê&–G)fµÚG»|ï•i³ø9½}‹ëû÷p•¤Ïàæômö,[¯ïÝÂPsv§ôkž =£‘6§ôkž =£‘ü¾zìž¡¾z_£Ã"™|ô<'Ù=C|ô¿F?†DÝg¤‹Ú±vuž’/jÅØ@Xä|XV'EiÅwÍ4îpî‹‚¯‹ Ñäè­8®ù¦ÎÂ9_£ÉÑZq]óM;œ;‡"Ç «â´y:+N+¾i§s‡p†EŽAWÅ…hòtVœW|ÓNçáȱÈ*ø°­NŠÓŠïšiÜáÜ!‘kõ(*H271.!²ÈÑWǼ %l" MŒ„Ãssqƒ‰p.$“™Õ5©\³°ß[l×’ÆB#fVhV »V8¸ã]á.ÊäËxÆ?ËËuœ>BÁ«§cC^ø…¼”4õí¦6óvâcá+1¹ŸfìÓ`g&wM®pwR”ùG}çå;w mk!vȚəmpDr¸ÊZE]M¼öïÆ€‘š˜hÀ³hçº(â÷5ò71 $1îh®P€¹{@Úß\Fâæe·{H&l‚V€Ù)@ÓPMÝ!-6™Ìí™âÎ1¯Í³ÀÙ­·m´’xÙ¶ –YÜ‚=A-f`Æ8² ¹¾ViöNϹºuäÑf¸t"ÜÉ™ÀˆÃõ­Ë•Ã+šñ˜8qÐVkk†\ÂÙXF fh5ÊâÊ{"«Ýð¶’8Y —7‡=°Å;$e¡ï¬Ï´íkŽ4+ØÖ6°6F¹¤»\Ù¦lî.;4íJàC[wÉo‚(‹bìØ]Ž"ÖÀÖF$“Vu 67><Ù憶Žp.Á¸àŒ¿™£–ÆæãgÂù]oiÖžçêÃ!/€ÜÄÉ™­q…;ÀFæl ,Ý»$o‚;¦ n®f\Ç9ºÜRÛ[±‘‡»ÊéêÌôâ¹®$  é>Ò·±ÞFüŽkÍ¥D±ž3kB8ÌwzMhñN5F;í“c^²×œì1É«–Hu‘šñ$Ô½™ÛÆ4­*wÊÂ6ÓíLv³¾ô ,ƨHÀÁœç9Òˆ©I£é>ïv!ƒÝî÷|xüK½>Ô‹?»Ýîøð?ø—z6}©GíÇ£Ú#Ó/¤û‘§íÇ£Ú#Ó/¤û‘ Cæ!ôlû!#Ó/¤û‘¤>bFϲ=2úO¹ 9¥°sÜË—èäÇ «Ü~N .ËŽ¹æ×NS øçñsúGý¢°¯£§è´­JÚfùµbwÇoÁä·¨¼Zb"»&aÖë;?*Të;?*UÉE¯c¥û_Î>Œû›ð«­Öv:þT©Öv:þT«’‰ìt¿kùÇÐ÷7áW[¬ìþuü©S¬ìþuü©W%Øé~×ó¡îo®·YÙüëùR§YÙüëùR®J'±Òý¯çCÜß…]n³³ù×ò¥N³³ù×ò¥\”Oc¥û_Î>‡¹¿ ºÝggó¯åJggó¯åJ¹(žÇKö¿œ}s~uºÎÏç_Ê•:ÎÏç_Ê•rQ=Ž—í8úæü*ëuŸÎ¿•*uŸÎ¿•*ä¢{/Úþqô=ÍøUÖë;?*Të;?*UÉDö:_µüãè{›ð«­Öv:þT©Öv:þT«’‰ìt¿kùÇÐ÷7áW[¬ìþuü©S¬ìþuü©W%Øé~×ó¡îo®·YÙüëùR§YÙüëùR®J'±Òý¯çCÜß…]n³³ù×ò¥N³³ù×ò¥\”Oc¥û_Î>‡¹¿ ºÝggó¯åJggó¯åJ¹(žÇKö¿œ}s~uºÎÏç_Ê•:ÎÏç_Ê•rQ=Ž—í8úæü*ëuŸÎ¿•*uŸÎ¿•*ä¢{/Úþqô=ÍøUÖë;?*Të;?*UÉDö:_µüãè{›ð«­Öv:þT©Öv:þT«’‰ìt¿kùÇÐ÷7áW[¬ìþuü©S¬ìþuü©W%Øé~×ó¡îo®·YÙüëùR§YÙüëùR®J'±Òý¯çCÜß…]n³³ù×ò¥N³³ù×ò¥\”Oc¥û_Î>‡¹¿ ºÝggó¯åJggó¯åJ¹(žÇKö¿œ}s~uºÎÏç_Ê•:ÎÏç_Ê•rQ=Ž—í8úæü*ëuŸÎ¿•*uŸÎ¿•*ä¢{/Úþqô=ÍøUÖë;?*Të;?*UÉDö:_µüãè{›ð«­Öv:þT©Öv:þT«’‰ìt¿kùÇÐ÷7áW[¬ìþuü©S¬ìþuü©W%Øé~×ó¡îo®·YÙüëùR§YÙüëùR®J'±Òý¯çCÜß…]n³³ù×ò¥N³³ù×ò¥\”Oc¥û_Î>‡¹¿ ºÝggó¯åJggó¯åJ¹(žÇKö¿œ}s~uºÎÏç_Ê•:ÎÏç_Ê•rQ=Ž—í8úæü*ëuŸÎ¿•*uŸÎ¿•*ä¢{/Úþqô=ÍøUÖë;?*Të;?*UÉDö:_µüãè{›ð«­Öv:þT©Öv:þT«’‰ìt¿kùÇÐ÷7áW[¬ìþuü©S¬ìþuü©W%Øé~×ó¡îo®·YÙüëùR§YÙüëùR®J«ÞØÚ^ó@=ý8ÒJ{ .:žqô_s~v:ÎÏç_Ê•:ÎÏç_Ê•p­îDõaฺ†¡Ž,$†;Ý¢s«?ÿ?N'7ó¡îu8UÖë;?*Të;?*UÉE=Ž—í8ú'¹¿ ºÝggó¯åJggó¯åJ¹(žÇKö¿œ}s~v“«Üjû̃/¥”Ò¶ßß»„­&7£o±bÝ~î¾m£˜á8{"s.nÔþsÁ'´r&ÔþsÁ'´r(­ù|ô<'Ù=C|ô¿F?†E2ùèxO²z†ùé~Œ ˆ-ºÏIµbì.>ë=$^Õ‹°€±È*ø°­NŠÓŠïšiÜáÜ99_£ÉÑZq]óM;œ;„2,r ¾,+G“¢´â»æšw8wEŽAWÅ…hòtVœW|ÓNçá ‹‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"" -ahöæÕÜHƹÎvP# ’ãLÑ“¤­”A… 1Fó˜ç"GNg’êÐ4•Ë7l¥ËtÈ„2fsgäŠâz€{á…~h]¥ÉŸiÛÅ [BÒÑí{ÌqM”<µ®|!ÜyZq¡Ä˜ÛÍÛ‰>剘gÙ–—ÖθuÜâmkÙJî šè͇`Ú`£jÙÝͪžÁڻȳ0I¬l~JL®{xö÷-5sò+‡|1jÖGÉi(^öÐ@9æV„åÎÚQ¾êæ-S¦hµ‘ºÝ^@ ¹ÀƒˆÇz¡-i™ÎùŸƒ;£fߊƒòͼ–°[]ÜI;míM¬4ll燫I$d0¼6¸9îocÓbçaZ\ß:ùÏ‘’º0ÀÖ†5í’9›8ii¬Ð³PC@ €·á•³DÉY\¯hp®šUŠîúÞÓ ˜¼ºJäŽ(ß4„6™’½ÙEEM(*7Â+TlV5Úèî§eé.2^ Q‘áâ6¹®k¢1RÆ8¬ïeÕZlHlÄL·¸F"„9¡²º2&=î Ï\±¶¡® 4Ÿºµ¸üÁbË9n­óÜä·uÓC#“V@‹¬5¯—VYœÊ;F…ŽÌÛ» VÛñîs¶ïü,¬lÞO½ò•}´­«pâ×AÂ.\ߘ,ã0edÎÖͪ‘†›3ŠYZñ‹Xæ“mCi§)VƒnZÉÏ•²Fèg’ß ŠW™’F5Ycò„¶2â\¸×B’-8v¶Ïžá–ÑKšy¬ev`ʽ¤¼ñrº75Ù©•Ôi¡ ÄD@DDD@DDD@DD©wçÑý'ÝîÇmj]ùÁôI÷{± ïw»ãÀÿâ]èÙö¤YýÞïwÇÿĻѳíH‚?n=þÔi™}'Ü?n=þÔi™}'Ü1£gÙ ™}'Ü!óú6}‘é—Ò}ÈÐq/?‹ŸÒ?í‰f»þ.Hÿ´Vö´âÓþþÏ©ùÛùHˆ‹£" „Rˆ!¢E(‚J „Rˆ!¢E(‚J (Rˆ!J"Rˆ‚J (Rˆˆ‚¢ ""…(€ˆˆˆ‚¢ ""E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(€¡J …(ˆ!J"Æb¬ÚdžŠ1¾ ±Ìî ;ùY"p­[x›$‚%˜µÃKN±ø…²Ðì£1ÔÄA^ VL#|ÉdÌ7³¸ÈߪàVu«ÏÝ>3$ï)E”B)Dv7£o±bÝ~î´›ü޾ŋuýû¸Jøwü­ü¥ôëøÇƒ›µ?£\ðI퉵?£\ðIí‹*ß—ÏCÂ}“Ô7ÏKôcødS/ž‡„û'¨ož—èÇðȂ۬ô‘{V.Âãî³ÒEíX» ‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"Ç «â´y:+N+¾i§s‡päXä|XV'EiÅwÍ4îpîȱÈ*ø°­NŠÓŠïšiÜáÜ99_£ÉÑZq]óM;œ;„2""" -VAufÇ,a…ïxÄŒî/¥Dƒ}m" E,09Í|¤½ÀZÜÏsŸ¢¤Ò¥q…–ÕÿI’ÖÖHCÄ™ Ä4h¬¹j{êeùµùKÐ-A%ÌÄ=‘G–9]!ä.‹šu=â¹î˜ÇfÕ‰ÇfX6D;B#r/ÈÚé£ ¦šeqn_‘€Ë^6œÉµ¢¼l^Ø0Éu|922Fêæ,{Él“Ûcš&Ðçßâ#i·/6ΛWW´¹¦6ê–<°ÐÐWFòóûKó(‘±Ma­lvòvKiAQV÷ØñCŽïf‹[mm‘¶gucü3²#lîâÍåy“mäž8ÔŬ†Þ75Ò?«õjÎý`lÍmK˜ PŒkÒ½Øñ\¸:9lçLùå’2D…ï¶}–f8ž#š×'F5[v×]AÄ'4R´9†”À𨺼´³ŒKyW¶6—M*ò1Áe\{Ër[Në¨dµ‚á¦'BÛ{S Ѷâ2dˆNKË›pt9º§BÍq°5ñ$2BˇÝÛG<Ö &2™DÍÖ4HÚÌì”Ë— æ¦;“m—sKw¬&å­{ák\ó#Ú¹ÍÊÒx¡a“mÅl#vÑ‚MŸ²™-Ëà ÌY$¸º9ŸAäéŽéð[fì–ìù#\Ê>âÕÇa¦9'”–5˜“=Ó†.q$®‚ÓºÚÖͺÍ35œ.¸žÙŽi˜FÆç'W˜iß ÃjlÂØ/ -º%¶ÄJÊJàrÉêç¥ú1ü2 ¶ë=$^Õ‹°¸û¬ô‘{V.ÂÇ «â´y:+N+¾i§s‡päXä|XV'EiÅwÍ4îpîȱÈ*ø°­NŠÓŠïšiÜáÜ99_£ÉÑZq]óM;œ;„2,r ¾,+G“¢´â»æšw8wEŽAWÅ…hòtVœW|ÓNçá ˆˆ€ˆˆˆ€¹Sl«yŸ[­Ÿivòç†K0Îà×=ò†šÂü f;´¯ ê¬r ¾,+G“¢´â»æšw8wVÖ7ÇY(^÷ÒHÞçÒ¤ õäÿ3þ]ºšù³Ø¹ÙnÞ0leù £\òZ7ŽïgW²Typtt­ ¸ÔÞÊí,Æ€9ÑËh q¦Œ0¡9]FÛ¸¬È:É£’Vœ2å‰Ñ±ÕÇO•÷ÐfDDZó^Å ÄÎkËî‘„4ä²Yqq Ñ ´TŒ*(VÂÔ»óƒèþ“î÷c–{¨à–Þ'‚]u!Š2)@á“q±Ñ–2±]ùÁôI÷{± ïw»ãÀÿâ]èÙö¤YýÞïwÇÿĻѳíH‚?n=þÔi™}'Ü?n=þÔi™}'Ü1£gÙ ™}'Ü!óú6}‘é—Ò}ÈÐqŸÒ?í‰eºþ*oHÿ´V5ö4¿ã§ð¯ö|ýOÎßÊPŠQm”"•ˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆŠPB" "")Dˆ¥")A¥B)DŠQ")A¥B" """ """ """ """ """ """ Â!{_#£xÇ89¥Ø†µ˜QÍÜjœ—²6›¤0×Þ«ŠÊ¥p½5¦ù¬óVq˜½í òîù¯WV1)ûéYŸ>VSùçö™â&¡§¾sÜwNbÞãH *.‘§û¾ÿÌyLËq¯«¦)Q;ËÅþeÙì½vгi–ÚbL‘š¸²G»±‰‡i{e¾ü͵Ûc¢XâÙœ;âAÊí_Ñ:wô õ×Bu"ßúã31¹ßÓN¯<Æ”M­1;#Ìü£³.önË{o0šæS9aÅÌc»dqG›.LùsÛ}. ·{®…û¼Øç«Ó3e\2ÞųÞȘzÄrJÀûˆ÷¹–„DåÁóMqcÞàfÍi(ž;ÓA}5ܲEªk]Ã\ç´—D.u™wræÂ¾H~uÛXf¸èÍA¯yZ§;Îíæ±üå·c-l³JÓF¸‚ØK\êŠÛèpÌG tÓ}¾§w™Ô«ÒÚì[é:üïˆÚÝOͲ{ä†Y®/ä:—<5“³Œ*EHiï–÷åýœë°DS[Å&L±MÕ™ÆnlÏlV,lb¡Àf$¸Ò„Ñ_?:í¬3\Htf €W¼­?ÓçvÇ‚sç]µ†k‰ŒÔ ÷•§ús¼îØðNg·Ôîó:•{}œÇËâ²6âÒe(…Á“ !f¯4Eäe.Áñ—S×aUÍvȺuƒ-¤°cm5ÏAo¹¨k“2rû\ÇÌǼ hÌÑçŸù¿oë×M /kd§úpK]—j n`EwÓˆï±Î»k ר ï+OôçyݱàœÏo~ï3©W§±Ø·Œ·Wàím}‹ºË‹>®8ìã¹òÕ.§Pá^6:sc„l£ ×6ÝEÖ–2õÍ©HŸ­º‰ö󲿑<Ë- ¤òè#žvÖ®$:3P@+ÞVŸéÎó»cÁ9ƒó®ÚÃ5ćFj{ÊÓý9Þwlx'3ÛêwyJ½Ý•Ö­—3M%µÌò›¸cÕ9®sƒCays„q±±æanjfÒW&ßd\²>=†¶Õ³1óA3múåàÌ×u—2MDÙd‘iyiÁÄÕÀyÈÿ9m×ÖÍ+ÈœØ+•®yþÐQ¯=Œ<š£ó®ÚÃ5ćFj{ÊÓý9Þwlx'3ÛêwyJ½M–ÉÚm+[‡Å–Þ׿o‘‹ÿòy" wìÛq(ÚòjVÄÛ:öö[«ÇEÕo&ÙÑElã%DN9ècùQë@ÎZ—I ÈEùËm½ì¬>®-mI·cjrÆ|hï±:*+ÞœÝÿÊ»gk_íÁ#Èdr‡G#ÒÙb04÷°ÇCW» Æ›£uÙ¶«œ,^'s^{+ûãq³öC%ÙÑ>ÜÍmTtr9±ßµÇ‰1…Îi–:‚ìÃM »io-½¬qJ܆²9‘TTO–GÅ­òlsYFÔ PaJõ֥ߜGôŸw»m0{½Þïÿ‰w£gÚ‘g÷{½ßÿïFϵ"ý¸ôoûQ¤zeôŸr4ý¸ôoûQ¤zeôŸr4|Ä>Ÿd$zeôŸr4‡ÌCèÙöBG¦_I÷#AȺþ&oHÿ´V%–çø™½#þÑX××ÒÿŽŸÂ¿Ùà¿çoå(E(¶ÂJ „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ:CøI½}‹ëû÷p•¤?„›Ñ·Ø±n¿¿w _ÿ•¼eôkº<Ý©ýç‚OhäM©ýç‚OhäYVü¾zìž¡¾z_£Ã"™|ô<'Ù=C|ô¿F?†DÝg¤‹Ú±vuž’/jÅØ@Xä|XV'EiÅwÍ4îpî‹‚¯‹ Ñäè­8®ù¦ÎÂ9_£ÉÑZq]óM;œ;‡"Ç «â´y:+N+¾i§s‡p†EŽAWÅ…hòtVœW|ÓNçáȱÈ*ø°­NŠÓŠïšiÜáÜ!‘9_£ÉÑZq]óM;œ;‡"Ç «â´y:+N+¾i§s‡p†EŠf—À¨9%¼G еÃàý*Ç «â´y:+N+¾i§s‡p…Ú$»jiºtaM Â~a°ŸcI=Ñk)Ü鎒<Ö„îi÷Â÷‹‘´¶ÖΆvÙܰM u'qÍa"­ æ¡¡;Ü8.º½möG4ã±ßÓßR·ÿÕkLNÈßã oÉv×°l—¾ðºâgMvVæFÑÅù5-&‹‡ùˆÄï݃®™¢ºäCÂ-ãÖ€n˜#®bÏ”]¼3{¶¹®hsHs\*ÄW*ËðË´%Ú1Ý\[\M@ó ¸4G…]O$Ü ¦ò¥o÷ͧ|æ~.“7™™ßiÌü^#l2Ò8¯£°Û\LÖ1¢ _1¸òÖáŒEÀnÆÇ ¶.ÚN|‚9œ,­›nøšÍsb·kÁ|í’ ZÐþüiÀq¨½hü²›JK7”«mÎŒšk=àîøN¨~FÙM¥%›‹JU¶çFM5ƒðw|'W¬j×sä—q²tó²Ö3˜uF—6F‹ŒŒÖkÖ1†:ï^zeòZÅißã2f·"K(b´sŒ1¼MU ì®i7†™¨Á¸}hü²›JK7”«mÎŒšk=àîøN¨~FÙM¥%›‹JU¶çFM5ƒðw|'UÖ¯‘É/-rí•R‚FÛº7Mo¤+Ü"dzÐ 8çã7æ¡ÅÕÓÛo·v£$QE0ÏŸU,Õœ\•êqEÇ6û·ðʽ¨ü²›JK7”«mÎŒšk=àîøN¨~FÙM¥%›‹JU¶çFM5ƒðw|'UÕŒwIx«Î¬0—]ùØýÚu7–¾<¡¼`5$P @Âo¼¶ –ë›È¬ŸuIÄ6Û¹¥Í’Ç/ðÜW9¡Ï4;•¨-$/Qþ³H®žw€la´º‚°h«jwêï Õ›¿Ê»>AÖo¯n$³® ÊÈò»Œé!I,zØ‹C[;@kžÜÏym`)–—oSëRf}»IŽ2ùòY9¶¢²9шäîM2ñ㣻«¤?’¶4N®žF¹ä60áoW9¡¯ Í劧ÿ*éul?#l¦Ò’ÍÅ¥*Ûs£&šÁx;¾ªê×iË/ ³"ke!ú©[=ÓËHkÌe‘L[\ÈðèÃ…1¥7×Zù–‘ßÜÇtÛF9—·g²1kZ8`˜C€]Ožì× ëÒ³òVÍŒ²yÀp p¤sZcpòaXšqìïšØ~M°lÂà\ÜkÚá ”ê ó‚Çf.0Tš°ðøNªu«3žâ)/ ¶˜æõHØ[4–åÒ›qÎ×ÎÐÓù2r€0^«òÀ§æ ³*ÛwGpêbn#m›gÌüœc­ÍSÕ8áZ»¤(Yºá·O»¹}ËK\&v¥Òf&CГQ«owÂuv6Oå«“pn-ß#žc1Qâ02œœÜl$ù1¤ï$•›jÄ×ÓóX¬ÄºëRïΣúO»ÝŽÚÔ»óƒèþ“î÷cÁ¶w»Ýñàñ.ôlûR,þïw»ãÀÿâ]èÙö¤A·ÿj4L¾“îFŸ·ÿj4L¾“îF˜‡Ñ³ì„L¾“îFùˆ}>ÈHôËé>äh97?ÄÍéöŠÆ²Ü7¤Ú+úÚ_ñÓøWû<üíü¥¥ÙB)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQD ?£o±bÜ~î´Çð³ýìX·ß»„¯‘oÊÞ2úÝnÔþsÁ'´r&ÔþsÁ'´r,«~_= öOPß=/Ñá‘L¾zìž¡¾z_£Ã" n³ÒEíX» ºÏIµbì ,r ¾,+G“¢´â»æšw8wEŽAWÅ…hòtVœW|ÓNçá ‹‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"Ç «â´y:+N+¾i§s‡päXä|XV'EiÅwÍ4îpîȈˆˆ€ˆˆ ‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"Å0qtYiPúÔŒÔ]]Ì0ݨý*Ç «â´y:+N+¾i§s‡p…˜‡1h-ÜÒNêð;nÚ}•s1»íå|’Á+G†âì£ßv#ß_@\½­q±å-Ù»I¢Xæ-Ì×w¬:YœÔR¿ÿ8.Ú–Ó¶kœv;úm[éÞf‘™˜ìßâÒü’û¹6;ßsPÇNãl{ªÊÎóæçÌ·v½Ù‚âÞ)o?´‘’¹÷~I¾U†1Yîöqšçº”©Ë†®“ZÖ45 5­kF¸;«X®£ÊéÐs²BêÐŽú±ÔÇEW+O5¦ÓÛ9r½¦Ö›OûLÏ›Ïì½£q5œÓ‹–ÝZÄd¶„ÀöÒKa$޾…ÑëçqKSV‚xØØÌÙEû5Yïºâ@ØâŽk­^i]­h­cs0ŒrŠõÇQ¶(škÐÖµ¢€4¬£/>Í¥z-à2]°™zÔѳXÈ {c»1Æ8àeÌæd>u­Õ±áØí.̓¼¥æH†Ñ¹ëÐ˪k-¡•×’Bç¡ìl¯Õ¸»2àh}" ó6»Wj]uû‹iÅÄv°M5¬,¯¼\_Åf%¹af ÅÔw}›Fæå÷qÛ6þöÆâÑ·l¥ÄÎeÝ»\mîó2W2+8ކåo| ©4- Ú"2û§AÔ›.î6Úlë]E›!“KšèËQ–G¹ÐІ¼Ž5Åjíí¯p]}lÙ™©š¸g$Œ×Æ"¶úÑakÚ׺*µÎ•ÀµÀå†_`ˆ<æÑ¸ÖÄë ŸÅ›l÷Km=&{ƒg´3A[VÆ×S#P3q´âÕÔü¿wwsÖ×PÞDÌš¹a‘³ÑÎÍŽ–+{xð§(µq£š»€ˆˆˆ€µ.üàú?¤û½Øí­K¿8>é>ïv!ƒÝî÷|xüK½>Ô‹?»Ýîøð?ø—z6}©GíÇ£Ú#Ó/¤û‘§íÇ£Ú#Ó/¤û‘ Cæ!ôlû!#Ó/¤û‘¤>bFϲ=2úO¹UÇñzGý¢±¬·ÄMéöŠÆ¾®—ütþþÏ ÿ;)B)E¶PŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”AÐÂÏô±bÜ~î´ÿø³ýìX·ß»„¯“oÊ|eï®èðsv§ôkž =£‘6§ôkž =£‘e[òùèxO²z†ùé~Œ ŠeóÐðŸdõ óÒýþ[už’/jÅØ\}ÖzH½«acUñaZ<§ß4ӹør,r ¾,+G“¢´â»æšw8wdXä|XV'EiÅwÍ4îpî‹‚¯‹ Ñäè­8®ù¦ÎÂ9_£ÉÑZq]óM;œ;‡"Ç «â´y:+N+¾i§s‡p†DD@DDD@Xä|XV'EiÅwÍ4îpî‹‚¯‹ Ñäè­8®ù¦ÎÂ)ƒ«hpq Èí'+©Ã‡è9V9_£ÉÑZq]óM;œ;„.ÜÔã Nƒ\+†àÜ_>ÚÍšÒòæ=¡V‡>Ib”ÔµÌ{‰³¸;З/mZl¢ÈövÐvWÌkS•àƒ¸êfÑŽžÛCVtíÍŽþ›^to6ˆÌãÉ©ù2úê÷eHëŠÒÝ5ÄêÚÆ3nÑÎ#¹¸º7·}n 7G“G,ÆYXéZ ¢fLŒ’,]®­saMáµoo ´,··`ŽÀkÑ@ZûOfA´íÛo9ÊÖ¼<\2âo{s­ù[Õì®VœÚgvg.W·5­mÜÓ3ææØíKëî¦ÛÖ‹k}¡5y!3¾K}|š©â›Èc@öÔå«\~N'º±±i³]]Ýß\Ú³]+î22 .‹r²âxÛƒ"Ëß·|æ"‡µk³6u›šû[h⑱¶(hÖØÖ±Ò3€ NâÉ%¤°:ÚX#}»Ésásæ9Îv°’Ò(Iw‡rÛµ¯µVÂVÁ÷eð窖)’A’4µØ õl…±—ù›]Ÿy~ÇB%•“Cu´níØ ]¬Ž8xúg2ìbhoQ¸c¥u… Ñ#º1™‘¹LM62)ތƃF%VMŸa6»[m g/XÍ]­Õ÷šÊŽ6]ÊèAÇnÞ¿®Ð”Ç ·ÙÐÏ;ÀÌ$~ªkÈÁ¤ Âݤ»s)ÍÅ×¹ºÛWR[Y\Å«˜Ü0ålÆÈÉ »vWõIîÞÖ‡EPkÆ8SŠJôVöv–­Ëkp6´‰`Ê ž 3=Çß;ëàû#«õ^£oÕóë5:–jõ”ËŸ&Zf¦AÍžóhlöÜ2ƒfÙ²òh¥2ÜÉ#žnøÛs$­pFs˜tè‹rû¹/º‹£H¤•×ÊìZ•€°×¾vvŒE d´ïBÚgØE ŠÚá{5o±µ¬tuqÈZ j÷aÙ;ë0Ž1#¥ G×>ƒ1kI-ï Æœ%‘j]ùÁôI÷{±ÛZ—~p}Ò}ÞìC»Ýîøð?ø—z6}©w»Ýñàñ.ôlûR ÛFÿµG¦_I÷#OÛFÿµG¦_I÷#@‡ÌCèÙöBG¦_I÷#H|Ä>Ÿd$zeôŸr4¹ÿˆ›Ò?íE’â&ôûEQ}M?øéücû<7üíü¥¥ÙB)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ÷ÿ =‹ãû÷p•§ÿÅŸèbŸþýÜ%|›~Sã/}wGƒ›µ?£\ðI퉵?£\ðIíŠ+~_= öOPß=/Ñá‘L¾zìž¡¾z_£Ã" n³ÒEíX» ºÏIµbì ,r ¾,+G“¢´â»æšw8wEŽAWÅ…hòtVœW|ÓNçá ‹‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"Ç «â´y:+N+¾i§s‡päXä|XV'EiÅwÍ4îpîȈˆˆ€ˆˆ ‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"Å5sDCK¨ýÀ0«\+ˆ;ûãô«‚¯‹ Ñäè­8®ù¦ÎÂc‹…K 4`êoòIà^iÍ9½¹Žô˜ælsKð`'&=†Ó->ôÈÛûËlBÛi¤\»e/ Îhi#6­+¶†¬iß›Øôzm~ù±›ÿ*mYö¦Î’Iê]Æóß=¡Œxs»bFϲ=2úO¹Cæ!ôlû!#Ó/¤û‘ æÏçæôûEQ^o?7¤Ú*‹ééÿÇOãÙâ¿åoå""-²""" """ """ """ """ """ """ """ """ """ """ """ """ """ ""E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(ƒwÿ?ÐÅ‹qýû¸JÓÿãOô±bÜ~î¾U¿)ñ—º7Gƒ›µ?£\ðI퉵?£\ðIíŠ+~_= öOPß=/Ñá‘L¾zìž¡¾z_£Ã" n³ÒEíX» ºÏIµbì ,r ¾,+G“¢´â»æšw8wEŽAWÅ…hòtVœW|ÓNçá ‹‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"Ç «â´y:+N+¾i§s‡päXä|XV'EiÅwÍ4îpîȈˆˆ€ˆˆ ‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"Å1Æâ q&€¸÷ŽÑF¸ü åXä|XV'EiÅwÍ4îpî»\*+¤ŒA 7WƒÚ÷W7Ó—½ÑÜ[ÊðÁ‹Hdn9 7¨{:W½\?Ì—µá/·s`½Á¢C\®mt;.8 ¥ÛÓêWNüÖŒìz=.µt¯ÍjŶlÎßë,ß—6Áۙà †¼`ZÖ?8•[—wÂÚHád2\ÜJöÃ@ì‘–‡¾³>6дi®:4ÓÈÙVÛ&Ͷ–õ8ç’GwÒ<€ k´«µlîæÕO`í]äY˜$Ö6?%&W=¼{{–š¹ŒùþƒÊÓi˜ŒDÎÈq¼ÄÚÓˆ™œGs]Ÿ™¬å‚KˆašXmíÛuræê…¯‡¬±c¥ÌæR™Amp̓©°g¿´ãhI ¡‘ñDØ ‰ÙÙ$ò²&VWËGµ¥øœ®šõa¶ü½o-w!¼m”c‘‘ˆÛä…¼„Ìô{kV¹în:0m3’\ÇE-íİñLQ¼ÄuOí’'µú¬îsÁMc_•™FZ;KlÎÍ¥­«ÌmŽFÅp ZCœéöozMM5WNnæžÀ)²6ÕÕͧ]¼x,ê½eѶÒkV´åkÈ7Rê\wÅ{êаß˶æn±5ÄóÎdºG˜ÁsšëWŠˆâciþ‘ƒ¿ïm ™n6l;49ú«vDȤ¨Ö4ÛåtOÑ”¹®`8ŠoŠ`ƒVßó­Üm6PÉu;‹Á·‰Ð¹ÍËݬ×jHÖw¯=÷aÔ´˜¶tûHìØÝå³¾&œÑœÒE›XÝ[d2¶™‹˜†ÔÍ„÷NËÛx÷¹î»¤:ÂÈ£s2êuyHŸ"¸iÄ­ˆ6k`¸2Ç<ڜµh‰²J\éÅh{ªç¸ÑÎ-©À`Úâ" """ ""Ô»óƒèþ“î÷c¶µ.üàú?¤û½Ø†w»Ýñàñ.ôlûR,þïw»ãÀÿâ]èÙö¤A·ÿj4L¾“îFŸ·ÿj4L¾“îF˜‡Ñ³ì„L¾“îFùˆ}>ÈHôËé>äh9Óyù}#þÑTW—ÏËéöŠªúZ…Œ€ö,[ïÝÂWË·å>2öÆèðsv§ôkž =£‘6§ôkž =£‘EoËç¡á>Éêç¥ú1ü2)—ÏCÂ}“Ô7ÏKôcødAmÖzH½«aq÷Yé"ö¬]„ŽAWÅ…hòtVœW|ÓNçáȱÈ*ø°­NŠÓŠïšiÜáÜ!‘cUñaZ<§ß4ӹør,r ¾,+G“¢´â»æšw8wdXä|XV'EiÅwÍ4îpî‹‚¯‹ Ñäè­8®ù¦ÎÂcUñaZ<§ß4ӹør,r ¾,+G“¢´â»æšw8wdX¦-ˆº€é;å®hù'I4ÜáÜ9V9_£ÉÑZq]óM;œ;„,É «0Ť 8h쯶nîo_4OÕ¾ÎW¶6âʺN7kBöëÍ~eü·-ã]w²Àeë°{*˜Ðº»†šwøWoOzVù¼sF;w=—SN—æÔ¬Z18‰Ýáñu6&×kÙ™Ø2¾'˜¦ëã”îŠ8-›»ë{L‚bòé+’8£|ÒÚfvHZ÷e4 ¨ß S`lflkj×ë${µ³?CKËZÞ(Ü4;Z+ÆÉíƒ —QÓ#$n®bǼ–É=¶9¢m}þ)Ò9[Ó˲3³ÁÆøæ·,b¹œx-øÝ‹ãÖ[‰®«½­‚Pc×5™²äkÜÊ×qáiÌRÚg ymå¸êï}Œ²_œ!šb2Å p,nã°'F”ÙûêÐ[9D Aó86vFæfˆæ#Œ2Ôa¯}ù[­C,Zè]®ëÜ[ëõ=bYgÏoåY«xÖÑÎÇ6Và(²^þ^¸ºö¢íŒ³/º•0—J$¼Žv>²kCKZë‡2 (+ºƒy›kfºG°Êc™é%ŽH¢Íp”6iØÜ[‘Õ£´t²Zm+[É$Š`’ ×=’Ã, ¸4Òf2 ä:7–ÆÀŽæÑ¶rÌuzû¹žZÐ[xÛ– “BÞ³§1M‘ÔuÝÕîÑ`ÒÇ 1³#cu!tÏ$µ“ܶžWŸŠ4ë""" """ -K¿8>é>ïv;kRïΣúO»Ýˆ`÷{½ßÿïFϵ"Ïî÷{¾<þ%ÞŸjDûqèßö£HôËé>äiûqèßö£HôËé>ähùˆ}>ÈHôËé>äi˜‡Ñ³ì„L¾“îFƒŸ/ž—Ò?íUy|ô¾‘ÿhª¯£§øWøÃÇÊÞ2„R‹l¡¢DR‚J„R¡¢DR‚J „R¡¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „E(!¨@E*mŸá®>€ö,[oïÝÂV¡þãèbŶþýÜ%|Ë~SâöÆèðsv§ôkž =£‘6§ôkž =£‘EoËç¡á>Éêç¥ú1ü2)—ÏCÂ}“Ô7ÏKôcødAmÖzH½«aq÷Yé"ö¬]„ŽAWÅ…hòtVœW|ÓNçáȱÈ*ø°­NŠÓŠïšiÜáÜ!‘cUñaZ<§ß4ӹør,r ¾,+G“¢´â»æšw8wdXä|XV'EiÅwÍ4îpî‹‚¯‹ Ñäè­8®ù¦ÎÂcUñaZ<§ß4ӹør,r ¾,+G“¢´â»æšw8wdXä|XV'EiÅwÍ4îpîН’ =¡ÃÒ NžÁ¢ /#´?1]ºðÉjrÇk+£1׊r’ìNja½Â½kZÖŠ4*M“R{kÉ~eü¿q“hl†I%D¶ì%Ï8¹­ì×í+·§8¾u#1Ž×£ÒÛJ·Î¬sF'dîz-™´­ö¶¾ ]’V,KO¼BÍuyig–òxíã'(|¯lm. šUäc‚æþXØÒl}š`™ÁÓM!šP1 sšÖevšwÖM®éín-ö”ëÝ%·0å˜ÔNc“=m¡¸pË©§yLt•±Í<»³³ÁÆü¼Öåüs8ðìfºÛ[2ÖJûˆÞᮣ…a’X˜×Iš&ækM…Ž=»i$ö6íd†Kðâäƽå—n#¼›ÛLxÍpù%raØSðΩKMuˆ†é¦c(šn¨Ûf‡Æc-‹#€ãÆó˜7j2ô®ö#ŒÂ{ ¼îóºRÐíYu´ð7VÊP,ºÌ®8¹Ï?)FY¥ÛÛ"8៭Âûy¦6ýa’0ÄÉnš~j Û!l;hX6Y`uÌ-šÝ†Iã24>8À½í­ZÚ‰\X6.ÒŠð߆F$ˆÂè ’î{òÆ]DüÓÏs.jk´nVª·?–îemÜMÈD½rH&}ÅÁ˶Ìê¾j<ºâ3ŒÕñjî(v´¬c2™'Ž8  2Lé# isßSÆ«H|e¸Ž¤_Çqw%¼T|l‚†L×5íÓ4R›žJµ®5Z7{&èÜI%‘dpm¡Ì‘öÙ™¸òzØ]FµŽ4åÊh l-“u³äšK‚Ï*À[#æ-=bîã%k\î,íŽ$Ö¨;ˆ€ˆˆˆ€ˆˆ RïΣúO»ÝŽÚÔ»óƒèþ“î÷b=ÞïwÇÿĻѳíH³û½Þïÿ‰w£gÚ‘~Üz7ý¨Ò=2úO¹~Üz7ý¨Ò=2úO¹>bFϲ=2úO¹Cæ!ôlû!#Ó/¤û‘ Ð“ÏKéöŠª¼žv_Hÿ´UWÐÓü+üaä¿åoB)E¦PŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A¥B)DŠQ"”A²‡¸úرm¿¿w ZŽþãèbŶþýÜ%|ë~SâöFèðsv§ôkž =£‘6§ôkž =£‘EoËç¡á>Éêç¥ú1ü2)—ÏCÂ}“Ô7ÏKôcødAmÖzH½«aq÷Yé"ö¬]„ŽAWÅ…hòtVœW|ÓNçáȱÈ*ø°­NŠÓŠïšiÜáÜ!‘cUñaZ<§ß4ӹør,r ¾,+G“¢´â»æšw8wdXä|XV'EiÅwÍ4îpî‹‚¯‹ Ñäè­8®ù¦ÎÂcUñaZ<§ß4ӹør*½~\¹HsN‚àA+ÊíoÍ›F “ϱsàf–V?Ž~hi+Ô5!µ?IÅÚ>Q;ˆëÆ×É;ÞÇàZ¬Dïn•‰Îg ~ZÛ×;`OÖ!dF”ÈN9³i¯î®/å­&̵{ç?ê.Htð­ÃŽ)ù€ÚÃ%µÖÑŠ;›‰#u¼®…­3HctRRíñÆKZÇ9¸Ø ,³;ö;IQºY\sÞâÖµ¢¤’t°Ú_CwŸTÙ›’•×A,kÞëØÌÚ7Ù{.á³–[;[g.Üp9À6ÔG¨´.{dasÉFSÆ5oÊØu…ä€ZO&Îd‘ºM›u3.%˜†NÇšË<¬-Ìøœé f#µ×b뮲ÊýkY˃Ie%×e©miæ]ßPh©¢¬»FÚ¦†RZmãŠWº•Né#¬ «œâèé” j©+οaí‡>°7PK ~pÞ®ͨ!g’ÝH¹‰¼JòjØ·Ùr3h:þÏfu­õe¯ŒÎö6ò)rê${²\3R¤e$0õ­ÔWQ™"lh9H–)!uh{3êc¦‹2ò·7kߺþ;©í¢’Q=óö[ä{Øðm¨×6Q^üf…Ëa›*ñ“Æ$€Ët$µ|[IÒ2GC -€O ™Ù&¬š¹;Öev|i™ÔD‹ËØì‹Xmuv¬Šh!Ù¼fdilÍ”þ àZ{çÄyøÃ¡z„D@DDD@DD©wçÑý'ÝîÇmj]ùÁôI÷{± ïw»ãÀÿâ]èÙö¤YýÞïwÇÿĻѳíH‚?n=þÔi™}'Ü?n=þÔi™}'Ü1£gÙ ™}'Ü!óú6}‘é—Ò}ÈÐhÉçeôûEB³üì¾’O¶T/}? ÿy-ùOŒ¡¢Ò!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!Än;”áR";¥bu´ã}£áµ¨¥§±]PßÅF«²³î4¿o”¯NÜÑdÕvSUÙOq¥û|¥:vàÆ‹.¨n’š¦ï•=Οò^•˜‘d1o\ŽÞ[®¶œÆbÑñØ“KGb¨¤´!âÑ;bsàÌÆ7¡¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ!¢E(‚J „Rˆ3»ø{ =‹Ûû÷p•¨ïáî>ˆö,[oïÝÂW϶ùñzãt9»Sú5ÏžÑÈ›Sú5ÏžÑÈ¢·åóÐðŸdõ óÒýþËç¡á>Éêç¥ú1ü2 ¶ë=$^Õ‹°¸û¬ô‘{V.ÂÇ «â´y:+N+¾i§s‡päXä|XV'EiÅwÍ4îpîȱÈ*ø°­NŠÓŠïšiÜáÜ99_£ÉÑZq]óM;œ;„2-WÝBç¶îÕ½Ùˆ‰îÌ4"7nïøv—%ÑÊK€»»´£å¬pÀǰÖG¸;4–ÒœAÜ4AÓŠVLÁ$d–’F ´Õ§):‡HZ›BòîÚ[vAnflÏ s·Néù8TÔðn¬¶¯ÚºIcCåyÌ!¦Gº¹H®…Å’ú×[¹|ZÛ‰r‡E›W&V4ÇÄq›¢ºxi7Ï,NÜsb7â7œ³m‘Ÿ‡sÑ¢æìkè®c’ߟ«dk]—)tE¼Géw|ZîÎø »^½bß_Ö:†Iu½S]¬×Ö=MzŸ•Ë—Yówñʵ113˜H˜˜ÌN])$Ž(Ý,® €¹ïq kZÑRI:Ueżš½\¬~¹šÈ²¸ñŒ¼vÓKxþÿü…ÖÊÿä_>}™ÿöcYz‹§I#¾›Iù@q7.­ïí¶€µ·Šn«o ŽŽhšê6ÖâæÑÒÀDz”{¡Œ“/Ez…ŽÞx®mâ¹Ùá™’7Pбã3M ‚¼ø×gþ½ø6yu:×Y®K}^}_ú¬¹õýþ72-]—×Ö –Ià1ÇfØ Îæê[ :à÷‰™lÓ›X±†AòqÈz§Ï%Ž;ÊÍ›VÀ $0UÎ4ÐÑ€©Â¤ $,ˆXu¾£ÖaëŸËk­ïsùºæïqÑ¡k·‹·Ÿ­ý¥£:­q¦®Gõœ¾ |,4åÃU›>îâþüHñ‰¼‚põ’:m^×2Rü¹sÆâ@v$q´:G4–´gÆŒwKˆVâx­­å¹Ù!…Ž’GPš1ƒ3N€¼œ¬Úw3HÉq©—%Åå¸eØÔ>«iK"žY×¹¬ÖeêùsR­‹M­¡¥µÚ1Þ>GÚÈݘÊ]9Ž…Ö€(ï †Lþ{ÊVŸ5¦XúÅ¿XêºÖuŒšÍNa¬Õ×.|šr× ®lvÛB »‹kŒvâ8$cîÄ·m/s§l­kß3]Z6<3Ðoqª¹sÛmGC´l¡×Íqxo„ÐÉ[ŽFÌ-ŸÉ™æYC+²´‘”e⇤µ¼´¼ŒËgÔˆ#öãÑ¿íF‘é—Ò}ÈÓöãÑ¿íF‘é—Ò}ÈÐ!óú6}‘é—Ò}ÈÒ1£gÙ ™}'Ü›üì¾’O¶å ]ç%ô’}·(^ê~þ0òÛòŸk("%æ¯1<¥M‹3«§í ÉnP¯•2…‰õ:|f~ Ó²ªè(R=NŸýн+w*ŠùZ¦ƒyIõTì‹IÒž0Ħ‡ye³>¯…|åz\e#·“#·–DY÷WáVºUïcÈíäÈíå’©U=ÕøTéW½ŒµÃqBËTÀ­GªŸö¯’N”vK,™[¼…ƒsÒ=U8Zé[¹‰J’(¡w‰‰ŒÃHi:F´Ö¹jkVóÁªÒgºò;y2;yeEÃÝ_…]:Uïa¢,¤¥FV…Ò=Uq¶&%‰ÒžÉcR⮕‹z©ÿXÇ‹Q¥²†° t•u¼öµ­9´åÒ"#pˆ•P¨DD@DD¢"¢eJ&EuaTÆwD]+­zÎËL÷NØI¥g±‡)ÞJ¤,´ •uU=µ†:QÅŠ…2å–J“ê­Ù:QÆXh¡f RÍåÒž¦³²ÑËý™)ÛXÑd ß4Sªì®}?Ûå)Ó·$YµMì¨Õ éÁgÜiñŸ#§f$YÄm•%­:BÌúªçdNéOºš,™¼¬ >ª½•™ñØF”öËcŽâjß¼³& Ÿº¿ µÒ¯bÕ»W)ÞY艪ݱòIÒŽÉk¢ÎXÓ¸¨c;‹µ}E'ÛâÄéÚ;ØÑX‚4… ´LNØœ³„"”DB)DŠQ"”A™ßÃÜ}ìX¶ßß»„­Gy‹Ÿ¢=‹Ûû÷p•à¶ùñzãt9»Sú5ÏžÑÈ›Sú5ÏžÑÈ¢·åóÐðŸdõ óÒýþËç¡á>Éêç¥ú1ü2 ¶ë=$^Õ‹°¸û¬ô‘{V.ÂÇ «â´y:+N+¾i§s‡päXä|XV'EiÅwÍ4îpîȱÈ*ø°­NŠÓŠïšiÜáÜ99_£ÉÑZq]óM;œ;„2,r ¾,+G“¢´â»æšw8wEŽAWÅ…hòtVœW|ÓNçá ‹EÒl¨ PŽ®ÁÎFñF©Ôq% )¯è[Ëg¹ismï­-€’\ÑÏ‘ùµ¯5«n" ¥0§¾ƒ¥mƒKíƒ%q{(÷žùÄ·IôvÄÖ ÛÛ^Ù‹ÖM cØ$h{VµÀŒÀw0ªÚ²{:³¤Ì2k&vjáMcÍj¹»l’FùžÖ™Þf‘𧆷ˆà(jwwøß²'nÿ‰Îâ--™xÛˆ±²InZǸsñAÏÆÐè;„¬^ìÁqo·Ÿ‡ZHÉ\û¿$ß*ÃŽ,÷ {8ÍsÝJTåÃV¦&'žñÔEâî6­åÖÊ•—7:×O³!†ÜÂ칬µ¯’ò"Ílyžî#˜ì½è!¿+byåÙÛB-ŸµfÆÞFÇ-ÕØOsdÆËŽfCÛW×Íç~Aêosö‡:3š2@%®¡e[¼r¸}#’9cl±8>7€æ=¤9®k…Aiyѵ$/K´õ;4>QÖò\XËw1šÇÆ`5t²Ž+Aò5ÕÓØûGi³mÛ<1DÈl£ŠÕï¤“Âøat’¶nùBç€öÈÖŒ¼aFº¡ë$ls÷ºC–0HΡ}¾r´ŸyYsÛÆÛÏÖþÎÑV¸WY#úÎ_ ¼†¾3c¯s³ìù’ÎwÛBéoq!ÆÒó$RZß˜Šæ`&A¨e‘í,’G?+¸®ré«èÔ|—/’+G²Ú,l-2ClçO,š²ÐÖ:BòrQ£1-pÊÖ‡iÑÆ÷1Ïhs£9£$ZêU»Ç+ˆ÷Õ—kßÏ+#mÔo{$6ͼ€ÃpâÉ'ÙaŲêÂipæá ‚[™w¬î6–º{Q’é–·.&~ª][¢‚|Ùa‡#Ü5®#7jPucŽ8£lQ426Ö1 5­kEhxûk‰e–wAq5À¶›kË %‡%Äxo‰’L5rH(ìkXñ—. ílyì¢tñÛ¹²¸»Õìá¬Ú9^!ÉÄ ÎÉ ¦³|¤…Y$Ž(Ý,® €¹ïq kZÑRI:^Oe A¹tn…ö¤íÄ _óÁÄÚŽav²L]™Ï ænW;/còèŒ[Ü6Fûq9ÔÉn-\Ý\D›vðÖæ¨pw9®4ÖEÏØXlÈÚß3åŽÛ{«G+ÙnZ~SuA´wÊÔÖ« €ˆˆˆ€ˆˆ RïΣúO»ÝŽÚÔ»óƒèþ“î÷b=ÞïwÇÿĻѳíH³û½Þïÿ‰w£gÚ‘~Üz7ý¨Ò=2úO¹~Üz7ý¨Ò=2úO¹>bFϲ=2úO¹Cæ!ôlû!#Ó/¤û‘ Ôwœ—ÒIöܪ¥Þr_I'Ûr,M§;åœGU*‰E2&©UZ&R‚Ù”æXèS*•XêS2+%Rª™“2 •JªUMQªTªÕ*P[QTªQJ ­JT«(A-*ʉZp ±P¢Ô^Ñ3)1¶`R œIß+*º‚h©Z©ÁÔ”¢„ª "®d%ªŠ•)ï ½Rª‰‚ Ô(ª¥SJ*ù“2¥…ó&eU/™MV:”ª •Jª""õP«TÌŠµR½•Z”¯a|T¦¨,Š*ˆ@HDA!Ý… ª¥QV®ò(ªT ”QR„ ”QU(‚" "„ª U,˜&e5Z­í_ÆpLDï„3…5Cp©@µºŸ´§-x(cr‚Ò4…˜Ò·_Sxß,Μvl`E‘ÑîŽÒ¢õSR·ŒÇ“”ÖczJ©sFê³h³8"&w3?Ì\ýìX¶ßß»„­GqôG±bÛ~î¼S¾^˜ÝnÔþsÁ'´r&ÔþsÁ'´r(­ù|ô<'Ù=C|ô¿F?†E2ùèxO²z†ùé~Œ ˆ-ºÏIµbì.>ë=$^Õ‹°€±È*ø°­NŠÓŠïšiÜáÜ99_£ÉÑZq]óM;œ;„2,r ¾,+G“¢´â»æšw8wEŽAWÅ…hòtVœW|ÓNçá ‹‚¯‹ Ñäè­8®ù¦ÎÑcUñaZ<§ß4ӹøC"" ‡5®ik€-"„Ah;dlÐ`Y¯1È^×8¹Î¥s9Ç6nôwÇ{xÐ\ ¨ïµöÆÒÊÞâ9.g¾SB@ë+éo.VÕ­£«¦¥ S·=»ŒË¯kcigœÛD#2š¾•÷€®†À0‹[jÜX7Soy$±ë2d’V¹] Øâ*íïÓ ­‹µ°´µ²L¯À.|“© •ÁÙ^üötÔTÌqy'7|“™íÚ˜ÙŠìø:ñÇQ¶(škÐÖµ¢€4¬µ¬n ñóYa:©¨ZF°5¥Ýá#ub½¸»ëpXÙº8¤š9f2ÊÇJÐØ]2dd‘bíuk› hÇ·‘y[­¹´äÙ.žjY¶æÁÒ[½‘½ÆiM£®\b™’ùÇV{jrÕ®?'$³_XÝÙI}<Œ²ÙòKnçæõ˜Ûmqq®˜~Ô¶6EˆsY‡zƒÑ>Ÿ,s¹¾VÚ·‚AâŽi¦–œ éd^dí·5íµŒ Z]6v<=ñŒŽ[{Þ+á†î\À: ùÑ8¼^6Fm ­©1u%ÕýÕ½«rf|MŽ[§œÚËˆÛ Ë33(ð©B‰fm-¥yy¨š8bd0µ÷9äÖn`Ê5o{]Hq“q‰ÌÞÂ" ,o‚)%Žg·3áÍ«$š4¸e. Ñš˜WH5Ȉ ²1²FèÜHkÁi-qc¨E0sp=U‘cŽ8£lQ426Ö1 5­kEhY¥ßœGôŸw»µ©wçÑý'ÝîÄ0{½Þïÿ‰w£gÚ‘g÷{½ßÿïFϵ"ý¸ôoûQ¤zeôŸr4ý¸ôoûQ¤zeôŸr4|Ä>Ÿd$zeôŸr4‡ÌCèÙöBG¦_I÷#A£!:Ù}#þÑQR¢W4¾‘ÿh¨Ì9Þ‹b¬<Ê*wÑ‘aÌíô«ŽéPfEN6úq·ÐZ(*å5waå@Еu78î‚‚r…LÁMBÇ}*å8)A•!Ûê(”A`AÐT¬X‚¬¿ÛT]f U¢Š©@i¡¡÷•ª•Ʀ‰MüU\ p¨!Al¢Š¨QNÊš¢Ê”J¥U žòbT„”ï¦P¥ ¡(J(ª®mäP£(DJ ")TEÑ@J¢ &#²ˆT©D¢e9”(.F'°‚ÕR±<œ0QWo”LN“T¡A™*¼%^ƒ! %V:å`P\¨UÌ£9ÞA|Á*ª7E;PMJ£0LÍßAj©X̵ìÎwmD$ I§ ÅW'´«@ƒ1•ƒv¼¬O»C}òˆ‘i‰Ìl'nõc¤ûÊCBT Õ&Ó;ægÄÇgù‹Ÿ¢=‹Ûû÷p•¨ÿ1sôG±bÛ~îº4æíOè×<{G"mOè×<{G" ù|ô<'Ù=C|ô¿F?†E2ùèxO²z†ùé~Œ ˆ-ºÏIµbì.>ë=$^Õ‹°€±È*ø°­NŠÓŠïšiÜáÜ99_£ÉÑZq]óM;œ;„2,r ¾,+G“¢´â»æšw8wEŽAWÅ…hòtVœW|ÓNçá ‹‚¯‹ Ñäè­8®ù¦ÎÑp/.¦ŠâÑ­´¸º×ÜÌÂöJVÜÈÃî#Êà#™rÔV¸ ï¬3]Û[¹š@Ã!£kÙ4ÞÇ Ul«¨ ’ì²JÐ\K#Ú1uN€¹×F;Ùâ‘ñ‚ØžlçC#ËÆPêà@¥{•IÏbN{•ÖVnqs Îq©%$“ºpKYÌñ8ÈÚ XAnWå#±^^\Eq ¥¤,šâfI(ÈbŒG®ã69NjÊÚ »øï•±©ˆDakb ´±£(£´÷«ž/ظÄé+ßšç8¾†Gqiœ4A‘ºÑÃ^}Çæ[‰6|²Ã-ë\ÂéžDŽÛu‘Õ˜èrNÖT˜մ¦lŸŒÝÛO´ç[§5¯{€2ŒCE hbºLØû"8¤‚;vC6]tm…’d5nv†ÐÐèªÉ&ϰ›]­¶†N³—¬f®ÖêûÍeG.åt.-׿;‡9ÐZÄŽ’ZMå5SÄn õ’[v¶lÂŽX(I¯{›6ÔÚ7îÙûPE"êvò¶y›3„‘ÏÕ„ãRC3F±¼bæ<\1ÄVöðÓS#£ÈÐÚGr3’ÜÆƒqd\ÖígÃ$°_Àcž!éj%¼idÆ@ÃäákÁ¬.¯š1Æ‹Ÿ6ݺŠ;ëDzHÙ»ŠÉŽ:ÚIm®Ä±Æ|ÇPóŽVÓ‹ßQÎD‹Ÿbûˆ¯îlf÷MŠ'd²† +3§c›äYrP#‹\N:)ÏVú+³;õÓ[™®b±‘º)»f";f´ ‘ÇYÄ'>S‹z\…´®/~.j í n¦HZÆ>ž5ÌcœC‹ªHàì­kšÆË’J]ZHã!²œÂÙIs˜æGq$Ô’ÆÊRIv\ǃy¥ßœGôŸw»µ©uçïnvO»Ýˆ`÷{½ßÿïFϵ"ÏŽñíw»·©Ä72ºX™C3 ÷ÑÉ+§yÍ(/ûqèßö£HôËé>äiûqèßö£HôËé>ähùˆ}>ÈHôËé>äi˜‡Ñ³ì„L¾“îFƒ›9òòúGý¢¨K‡s7¤Ú*™Ö'{,• UQC¡J‚j¤Bª‘ª •SUJ¥TJ*íå5r *¹ØQWvd¨LÁcÅ*‚ä‚¢§}T)AlÅN~Â¥…óo(h*i¼P1R Š¢ éÁQr”;¥T§0¢ `¥S2œÊ PpLÁ ®QUR(1LT¢ ☫")P@LB R¢µD ¨.;Š ®„„éSJ) *¥BŒB "U´àD@ªUTÕ¢„A(¢ª ¨‚À¡pU ‰Ð=ô}P.'ƒyHDPJ(DŠ """ )QŠŠnâ‚ÇB($ ÕG8Ê ¾m=…SëU›‰˜ï ¸Ð¥S9ÕÇvdPM4¬yžF•Z¤ ÉRí‡}S¾TdA“é4LÌ¿¥cÊS)A¸ìmîÌÅ‹mýû¸JÓ?Ã\}ìX·ß»„®­9»Sú5ÏžÑÈ›Sú5ÏžÑȃ~_= öOPß=/Ñá‘L¾zìž¡¾z_£Ã" n³ÒEíX» Œç€ã¡¯ˆŸzF.[xöÛã ØXä|XV'EiÅwÍ4îpîY¶µ´3ÛÀæ¼Étóyr‘V±Òî6Š5d}Ìntd7¼uMK|7 ;ýÐCicUñaZ<§ß4ӹøqõÈ÷m¾2«îcs£!½ãªj[๸ißì~‚KUöq´´ÈÐ÷¸¼6YÞ0sŽ 4nÐm×#Þ=¶øËQÏ™ÏkŒ®óŽ&†!«g)fhÜK©@qN;„7› †2æ4æãà\I'3ªkR¹Nؤ:ÔI|æ>9Œ¬v‰I%˜7Z» ønKcË+‹Þ ¸Ü\[˜å­(+–‹KhÂËÙ¡yŒ üî\àì®hiù@*cÍñ„ï3hü[;7f›93ºmsƒ¸Â”§Ê;ï?)Û¸`§jlçßG¦Añ“I¼¨vG3­ç·} 'L)™·Œ ÌÚ;tÒ+ÃPr=ãÛoŒµ33339™HˆˆÄ5cØ5¶í¶‘²O Á²Ë#›G¨%¬ÌÇT1 âwÊÍ>ÉÙ÷7N¼š,ׄ[™38~µ¹r¸es^30: \^?«ËÕCzÆGju„jõ”âgÊê定,pÞ]ÿ§ë/2zÖ¬þßÉÓU™Ýç§÷²¢¬v5¬ ‘®i.×6i›;‹€Í;d¸Öà]ò[àŠ"Ø»6Dcˆµ°5‘‰$ÕH Ï6G¹¡­£œ °n8›®G¼{mñ–;™Yi/¬ºllÈܹ] hÎáÞà]Ø3>Ò·±ÞFüŽkÍ¥D±ž3kB8ÌwzMhñN5FH Š'Í$mÊ뇉%5'3ÃqÑÅ`-Y.euÌ%ŽËlÐó0âç{ø¢6ã^..'A¨næ`p›­¥ÖÜðè ˜{C!-p”ÆZÜî2ër‡f d5 ŠÔA°¶c\\#xccL²–DÂæ>°¿,Ttm-ÈZ ´¢´›ÂPàöÈ[$f[®˜6V–jI•¢J=Ù0Î껎Z{Çä\7>vWXE5yÛ¬¦WwÙ+—³Jà«ys+í'e›µwNâ —+d-9{ì»Ó`‰·¹ ¤Ò1‘½Õ8²2÷0SFG-s²vy•òº,úÌù¢{œøk "G68Æ×<9ÙˆmM]^ø×'\xöÛã-w^]ëesDF°ˆ"&|”9òæ!­[@ÇxUù(ØÖùnxhe•ò=óÊñnýtlL÷84<LE3PìË36mœw&é¬"J¹á¥ï1µï®g²"í[\êš¹­ÕØñpÚ]]·;o]º $…º­5«]å—Fþlk R§ ·{[4®„ÛñOŽêžùCøà¸ Í m*hã—Œ( Š'Í$mÊ뇉%5'3ÃqÑÅ`,vVV'5ÏÖÍ+Ý,òÒ™äy©Ý'+EÐI£C[SE¯iqvÌývX¦­2jbÔÓMsg¸–½ÅkK™YeÓµ’´¸k—ŒÀã«s©”f,¦j3V˜ ÞE¯×#Þ=¶øÉ×#Þ=¶øÈ6kõÈ÷m¾2uÈ÷m¾2 „Zýr=ãÛoŒr=ãÛoŒƒa¿\xöÛã'\xöÛã ØE¥iµm¯ ד<Œ€±=Ñ“§E[‚ÍÖãÞwsô”Ö†Ñ9„d5å£#œ3xÔ% ¶£ß ?\xöÛã.-æÒ¾»¹•›2]³„3:âG0™DœAÅ£Æ5Ó¹ºCGe\~ešòfm8mà¶€–篬ƕ2d<\kR;­räØÂå7ÿµr¯Ÿó1gë¥èUöM¬Ö'Ë­£žì„¹£Y<ò šÒh¼ƒsöãÑ¿íF‘é—Ò}ÈÓöãÑ¿íF‘é—Ò}ÈÐ!óú6}‘é—Ò}ÈÒ1£gÙ ™}'Ü&䩘ÿìÚ+Íq^³5í§éŒ éøX芫ÜTû긨Œ¡À©Ì*•9eŒB°~úÄ×q—}ADXëMpAР”D@¢Š)QT %ªj‚1J•)P‚µßLˆU"ˆ'•ß *•T+¼¦ªµJ ½Rª•STªUV¨‚ù”‡,jjƒ%RªÁN` ²(ÌfAdU©J”ˆÐ”'IP PM" """ Ž ÕvB E“0Ae 3&dT. µDjt`ï¢U°ER€ˆˆˆ€ˆ˜ "ŠüTgv§°‚ÞòVšhÆ^ã£ê­EwÊ †A¸*¨\ã¤ûÁGö€)D;èpU/е%‹”U!´R€0DE¨”Q™£ ŽÚ QUíß ¥àè*ãü5ÇÐÅ‹mýû¸JÓÿâÏô±bÜ~îºÃNnÔþsÁ'´r&ÔþsÁ'´r ß—ÏCÂ}“Ô7ÏKôcødS/ž‡„û'¨ož—èÇðÈ7š?J?hÅÉüÝsµm¶l²lÖîž±+IÖEë˜>|=–õ.Ý ›œ4Êhi´½•xKžbÛ¤ÔÞ6§ÿê³þZ ·ßÕvG§—ØJº %ŽØ’x'}ÓL–ÎsâÿLÚUÌtf¿ê÷œ²jvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh:¨¹Z»üÛÚ³þZjvïómÿjÏùh3þ]þ”ßMsÿìKî÷aÒvƒÁúBÐÙ‘>ÂͶÎkåptsÃXÀL²:\­u)›}Më¯å n6ô®rø™.m§—es¶ ÎÕšëh²é¹¬c¹™¶³<œæ’84|¦7s@¯ÉÙÙ>iÿù‡ØÂ©©Û¿Í·ý«?å¬Û:ÚkFÎg/ž[‰LÎsXÈÀ%ŒŽ™uÏð7Ðoª~Üú6}©Xy©>§H¡¥Î•Ï,s‘­©RAy=ëá ŸÛFÿµG¦_I÷#OÛFÿµG¦_I÷#@‡ÌCèÙöBG¦_I÷#H|Ä>Ÿd$zeôŸr4»‚Þ±0®:Çý¢±SÞX¯^æÞÜPá¬vùXÛ1pì®s¾Ylâ‡cl™±ÅvÈœ>ßQŠÈETÑ\ŠVŠs)Ê£*Jò BŠ) AM¾;JD­ßXè¨2g cDÌ£1UJ ¾b•Tªfè-Tª®a¾0ßT^©ULÃ}3ªUcÎ8A’©U8Sœ ½Rª™ÂŒè2Õ*±gì&±Z¥V,霠ËṮg)˜ Í™3,9Žúgvú`fÌ™ÖîßLîßL úÄÖv îßLç}03ë k Áœï©ÎS6r£1XƒÜUª‚ùŠf*µJ µIEJ¥P^©UJ©ª W²•*µ)R‚Õ)R«˜¦b‚ùŠUÛê•)R‚õ;éR©Žêp ¾eè©U2g* ÉTî©¡@©=•`Ò4”«‚™B”@ j((Ê*Tfˆ,œÇ™Ü 0®ùAÈÑ»ÚQ¬ÅR§p*“¾Pd37xªºW•AS +ï ©$šé(ÝW¥©‘S(R¥A½ÿÅŸèbŸþýÜ%iÿñgúرn?¿w ]¡§7jF¹à“Ú9jF¹à“Ú9oËç¡á>Éê•-•äµä9¬¡ká}{ÐwÕåóÐðŸdõRé ÜÆ5¤44’çßo5Þ ÖOVÿ5£À“Õ¿ÅO/½-Ýy}èùnèÐ5£À“Õ¿ÅMhð$õoñSËïGËwFž_z>[º4 hð$õoñSZ< =[üTòûÑòÝѧ—Þ–îZ< =[üTÖOVÿ<¾ô|·tiå÷£å»£@ÖOVÿ5£À“Õ¿ÅO/½-Ýy}èùnèÐ5£À“Õ¿ÅMhð$õoñSËïGËwFž_z>[º4 hð$õoñSZ< =[üTòûÑòÝѧ—Þ–îZ< =[üTÖOVÿ<¾ô|·tiå÷£å»£@ÖOVÿ5£À“Õ¿ÅO/½-Ýy}èùnèÐ5£À“Õ¿ÅMhð$õoñSËïGËwFž_z>[º4 hð$õoñSZ< =[üTòûÑòÝѧ—Þ–îZ< =[üTÖOVÿ<¾ô|·tiå÷£å»£@ÖOVÿ5£À“Õ¿ÅO/½-Ýy}èùnèÐ5£À“Õ¿ÅMhð$õoñSËïGËwFž_z>[º4 hð$õoñSZ< =[üTòûÑòÝѧ—Þ–îZ< =[üTÖOVÿ<¾ô|·tiå÷£å»£@ÖOVÿ5£À“Õ¿ÅO/½-Ýy}èùnèÐ5£À“Õ¿ÅMhð$õoñSËïGËwFž_z>[º4 hð$õoñSZ< =[üTòûÑòÝѧ—Þ–îZ< =[üTÖOVÿ<¾ô|·tiå÷£å»£A %Óf xhÀ—5Í.e;à7”Ǧ_I÷#FºMfG†Š´¸¸£u­ð’=2úO¹>bFϲ=2úO¹Cæ!ôlû!#Ó/¤û‘ àß?¤ÂV½Åñÿ[?¤ÂVW9ß, `j ;*âWîÐðüJª((ƒ3g§Í®Ð²¶bwðö–™iPPtÚ¤BÑHšðâ¬&aï™ÂB`mÐ(8,aáÝäžñÃáLò V„n”VJ¥UCë¤SMAС…ªŠª*ˆ½RªµJ ²©nòU*‚©UcBª[¼¨U*£Aj¥Uj¦¨&©UJ µRªµJ š©ª­Qª•UDªUV¨‚ÕJª©¡(&©T ßV T⬉‘Zå4*Q2$`¦ª©Š U*«U(&¨¡B‚Õ¡Y(ªžú "ªU‘EQèQTDR”%X­Q¸‚\¤%T‚È©A È‹°ï(.qÝL ŽxtïB÷ÀTŪ f%8ÇFŠqÜ@ÊwqRh‡u($î!£NïeZˆEÑP¿²‚Ù‰V}bÎwf%Qš´Ð‹%\(7ÿø³ýìX·ß»„­?þ,ÿ@{-Ç÷îá+´niÍÚŸÑ®x$öŽDÚŸÑ®x$öŽDòùèxO²z†ùé~Œ ŠeóÐðŸdõ óÒýþ\ àå=ŽØFèwé Y×¶Ì›Pçõ '+‹çw­t€dkE5Äo…b¶·ã8Û°lå=ŽØL§±Û VÖþÖîš—;ŒÜìÎÇǘq™¬ks F#|o«ºêݹêújäd/Àá$™27FÎâyf¶‹Gf6™gÊ{°™Oc¶àö5â 8iÇ}®¡ú²Èœ§±Û ¯-¹¤sZÚ†‚\.!­t’h®oæ/èwÞ…ß’,Sß[Ûeë7 ƒ=rëZi¦b4UWñK!#¢7‘k›;5­ÌÜ€—TW ´Åj4ï1˜­¦8Äp2΋ v£¡uÃn£00å|¢F–4áuh4„vÑ´l-¸uÔbœ¬”ÈÐÇp­‚;þ¶ßË»·–dXºõ¿Xê½ac™Î5š3w•®ŒS¯[õŽ«ÖÖ9œãY£7yZèÅ9-úÛñæÝþ¼|TGÍ«cž÷åcAsœã@Ä’JœïðmdB*Ow³î'l,'(t ÓJ¸ä†î)Å`²Šf«%µâö‘ïymŽlO/lEQp ®„<ëÖ½ÍǼ¸4×ÿ‘\ š_Ëšæˆã1ÅŽï9¥11¾'³ç¸Y]rÆgÏ(n­¹ä«©•˜ñ¼8§³fÎ*Çæ–’ qiÊáïDÄïÀ"œïðm3¿Â=µ"ÑÚóÍv¯îkºÔ 48ÈñÁ Z㧇H ySöãÑ¿íF‘é—Ò}ÈÓöãÑ¿íF‘é—Ò}ÈÐ!óú6}‘é—Ò}ÈÒ1£gÙ ™}'ÜŸ¿?ën=#¾€{ð íǤwÂV «œï–dªUNU!Š ×ªœŠC ¨¢¾@™"ŠCœ48…9e*äH{«ß$“RqQB”)ÆY;ÀÄTv–A;Nœ½ P Ú°î…Z«LÔ)cË]†î•Ý{ UˆK¾;JD£ƒ…J¥U3ƒJ¦¥“Z”©ÞA9BŒªjˆ+”¨WL{ äQJ±…òdB)¢Š …8¦T ¢©V ßJ¥J P%UjR¥Aj©UÅ1AdUÅ1Adª®)R‚ÕJ•Z”ª T©ÁV©Š Q(ª SR‚Rªµ)‚ U*«@žú U*«ï¢ ªUF jT©LS •8¨ÅF(-ÆQŽú®c¾•qAl7TU¡ W´&E*NU`ÂtšvµZÑŽc7 ®(.ѹ^eˆÎÚTÞ 5Çp Ì¢ ,&Wn*—WI%03:FŽÏ©—x,uL\Èíú*™¾¡0T ‰ÝªŠöªP@'yXWx¨©V °*ÁRµì ï¨:_üYþ€ö,[ïÝÂVŸÿ =‹ãû÷p•Ú74æíOè×<{G"mOè×<{G" ù|ô<'Ù=C|ô¿F?†E2ùèxO²z†ùé~Œ ˆ27C¸?H\ùMÄ—¡’ÛHûhÜÝSšcÕ—`u²H×q†åÜ͉˗{8i :_P=à_ð5JÕ/Ë38‰ÌcnvwÆ. §Caкߨ5¥ååŽÎñ £5ovbji¹®e²‘ûE’ƒþÙd•¸e2DÖUµÄ»;Mi†­½Šo¢é:ö›M±ZóVkˆÝ÷N{{ӦʺŽKgLÉ5‘¶ß+ÚaÉcŽ6É{šé…\×qYÅ5Ò*â²Á²îØØçqZè¢x£pŠÑÍ|/Óò°Ò5˜×"í"ݽf¬íÅ#wg ÉË=ǹä{eÖ¸y|L¹³D÷ÈÓlŽ kˆtŽÃomö2=zÆ45ÍkZ(€MkßZ2öÒ[I k&nG–é¡ÓJî¬kkßWòÄm™ÅwføXŒ5¶tr™-ŒÂõрƲ"ø¥-.12W˜ÜÖŒÎ5ã7‰ÑM"${BÞ·.–Qx#·0;UÇ|¯il‚,s s§vòÍη՞‘2Íη՞‘jž¢+XŽ\âbÙÙœ×wfïë&«á5ãÙ=£ÀÃé"{s;¬C# ÙæÆâN靖M ‰Ø÷Ü>î d0Ä÷1Íc⣘œŠGPîÁmz¹fç[êÏH™fç[êÏH‘ê1¯/ÛKf?nÉÄÛàa£ tw¢+S1ˆÉ!ž)"-‰ÙÞçÇ#ãiq2Óå»h)£ áï;Jѱɯ¹wêß«S [&·.A‘í®šá†4 ©–nu¾¬ô‰–nu¾¬ôŠF¾-ÍË·–#~ù‰æÌìÚaÿmüóÏB@éÛ<.ƒ,Æ<š™nÖ½ú™Á‡ŠÐEhO}[mÎ-ÚlºÃq¹öîs.¥’Ijî#Û™¤P´SZ p½¬³s­õg¤L³s­õg¤[Uø}›4û3ÿN6ö'.öå½ì³Û5. ˜øc£âf¦qÇ2ZkP+”wVµô{A²˜Ù4΀6lÅ®q¥nK¨Û]S«›VJS6]|³s­õg¤L³s­õg¤X¯¨˜ÇÛYå®?Îüæ6.FGvÙ¦3¾È›<ŒdŒ‘ч]–çËtuÇ=;ÿ”–¬· lïŒË!dåk®%v¹ò÷®âPä—¸jhîÞY¹Öú³Ò&Y¹Öú³Ò-Ï«™Îk¿§²&7|{;6'+GhÚË,ì'tÑou¤Ö6»Y‰§jõ­¨ùNoÑ™»MÒÉ4`:^¯Hå—ëæ§y$l&¯.·‰NÆeÜË7:ßVzDË7:ßVzEšz›V±^ZÏ/lïùç³g‚Ì9ǵrÎØÜì, 5}OZsžÉMȳD+ò@“N íÚy®ÜÙ&×e¹Ë#–™2ɨË!“U^òš¶ç®Ÿ”Ws,Üë}Yé,Üë}Y鯪˜ÿJyqÞœ®nÖUihÌÎy–µ{Í\âfi$þ¡€Ð ªµn¬Ó#d“#–9›–?•ƒÛZÈp¨YòÍη՞‘y¦s9žÖ—EL³s­õg¤L³s­õg¤AtTË7:ßVzDË7:ßVzDEL³s­õg¤L³s­õg¤AtTË7:ßVzDË7:ßVzDEL³s­õg¤L³s­õg¤AtTË7:ßVzDË7:ßVzDEL³s­õg¤Hˈxqµùj\2µÚ*ï öãÑ¿íF‘é—Ò}ÈÓöãÑ¿íF‘é—Ò}ÈÐ!óú6}‘é—Ò}ÈÒ1£gÙ ™}'ÜŸ¿þ6ãÒ;áX+&Ñu/î=#¾ˆ*¹Îùe9аr¥JUA|Êj±à¬8TT̤2»ª Ña2šªa\p*i¼UJ¥òœÈ-E ¡C\­V=µeL¡^FS‚¥ª(UøpL©‘J&R4+QX{ ‘Lï Â@tà­“²ªèû ‘lêœwê±d;‰WF_y*<ãv¡[·DEZÓuNÔ•Q†úTo š¥Ja¾•*TUEB bŠ*•A8¥JŒÝ…5&¨¢¡G c¾ ï(Å ®´TªŠ©Á¨ˆŠ&)Š JöT¥PMBUT•ÀAz¥V=hP%÷bƒ*,ZÓ¼…Î;´ìÿü ÊH“EÁ¸kÀ± øò “.𪮴ø=ÔÊ”ì k©ò{ªEÅ>GwâUʱ ÏÖƒÝø”—SC¿Z¬˜g9Ï5qª*j¬Ý*Œ™TÑR¥1P_Š•hTÅ(P[0Q™UMBT(¢°jª°Í¼¤¤Èíå*À¢ ¢¶BþFßbŸþýÜ%iá&ômö,[¯ïÝÂWhÜÓ›µ?£\ðI퉵?£\ðIíˆ7åóÐðŸdõ óÒýþËç¡á>Éêç¥ú1ü2 ?ÎÃôìÞ±möìÛ']º'Ž2L‚&µÎkiß÷7»NY_çaúNöoYx Çsÿ ¸tôyk£kâŽAÚö—æ$êòÛ¶¼bÕ´E©<ÕÓ¢¤zeôŸr5uHôËé>äj©ûqèßö£HôËé>äiûqèßö£HôËé>ähùˆ}>ÈHôËé>äi˜‡Ñ³ì„L¾“îFƒÍív…ÀÿØï…bYv€ÿü…ÉÿØï…`ªç;ÙX)T¥TÁM7Š¥T °$+g+!* Ê2¹T¶š;J ©ÌPH$&…ªº1 j ƒ±aQpú+µý¥Š‚ˆ AœÐ  uUƒI 0*jŠ …%T Ьˆ‚ÚðªÔƒˆW ª e¾i@4цøW,ÞU-vèUVkÚpv^`!3¼h=µFbÕXµÒ 8v0FÜ6´x-î«Ë=›|D@øÝÞ‘g4ì¨#ªP…-TU¨ßDEZ”©Adª®dª U+¾ª•Az¥Ujˆ,•UªUª™ÀÒVç® ”Ì7¡‘ÅUHªqÝ÷•ƒqã)hTÒºT@÷’€p)ȈhàM П¡Hyáì(ÒN;¨25Ú eX»!GqÆŠ`dsp;Ë ¦á¯e 'êö‡qUp)ʬP®ÑE*h"*•R”PET+QMVŠÀ¢œ§yÒ‰•TÕ@R‰Ù‚p¢ ”DAÒÂÏôìX·ß»„­1ü$þ¾Å‹qýû¸Jï›sv§ôkž =£‘6§ôkž =£‘ü¾zìž¡¾z_£Ã"™|ô<'Ù=C|ô¿F?†DùØ~“½›ÕßMX­;íÐNëw•çaúNöoWy¤cs¿—u¾ê ÄÊõ‰+ZånšßI¼³ä{6˜ÒæÇ(t„C[Õ.Wo ÎßX#§X’”¦Vè|©7×FÚâ(m¢‰Æ®i aVŠ`ƒÏÝ3mçÚd×c%æXc†zjòKÕrJfêù¼Ù¦k+ý¡]Ao{ýÄ‘ºâé¶Ö‘¾ÞÉ–;‹—:è¿3¨›(8­«x¼VeèuÈ7Ïi:äç´ƒÉÊvÓa¸ŠÒK¹ckèÞ!¼…ÚÇZß‚[’YO±RŽË›-vŸIc–·÷6ì3:ÌC‘™Ÿ$ÞUβ†É3žîõŒâÖƒM1Çc®A¾{I× ß=¤Ùc»c¶ƒ¢lt›JÍÍ-ÑRÅ’‘M-Ê×n`kº¹{. ¯¬,“ÀcŽÍ±@!ÍÔ¶uÁï2Ù§6°c ƒäã/M× ß=¤ëožÒ~×s¡¸tÖN¸nÒt!±²8]$–˜bšCØÆçsªCØhê“ ŽMü^Q´Úé'|Žõ¦Ù°Îæ:2VÛ#¦êä‘«óQë+ƒ¿hW¦ëožÒuÈ7ÏiŸs6÷[¼|M×?Õj¡Ôɪɖ^©åf›ªsgˆÌõÁß´+aZºþÆæ&ßhõÑæÞëò:Ùч‰|¦¨ˆÝ\ÞOØëožÒuÈ7ÏiŸ°üSWiÖ:ßâ?èµYµÚ®¯«·ëZïØç®»ÎqëJ|…¹± ¼·ü;XnX±2_u‡Ë-.[Õòƒ®sµnãÉÅ®÷§\ƒ|ö“®A¾{H9»{gZm8ßivÌѸÁÌpÐöÂ>#‚óÛò¤+‹‰œ..ËdlrR‚8è@ÊÊpÒ}áºOwhMµdºs¬ã¶0PºidkÎÕ¬…ÀcÙ+Qão½ŽaŠÊŽM6îË ÅùzÎâ÷bºfdCYjfl‘™c–1akXÞÖÉÊM ãcL¦­$$6×ÑlwÛO ޏ½ØööváÉA3[p5rÓ>¬·\À]!h8œ(@ͳ-6®Ì·ÛÜÛÑ͇Xä£ã‚wepž./’¯z·:ÎÞþfÓý¬ŸòÐwpúÎÞþfÓý¬ŸòÓ¬íïæm?ÚÉÿ-m»çv_ÿ–ïÿVår.¶]ã®…Ì%Í©.·—ïˆ[’³iÝMlûˈ´†PÈ |nsŒrCß>y0ò•ж‘bf'18p^ÙÅóxõEÏ mxò:‡ˆpж¶uŽÑŠMmÌà0’E»¹˜â³2À7iºð—W•»àÖ§¼¤CV¼ÎȘ† »ss ‰²¾t=„W{urúí­±‰óG4™¼›Þ Kð=þ‘‚é_Ã4ÐÀdl‘HÉh:¹ò*·ò¬ÐÜ]ÙË ìdR8̯/0%ÙNÒL´ÄÆÜF\¸-6…ż"ÞxÚXçk.[SCSäØ0­7×nI-d’^2{Kc¸µ·† X£x¡®ÆÑHßZ«ØÃ%½œ0ÉMdl vSQQ¼H á-iòµËÜÈ^æim+LHǸ¼æÒ–9†P(Fƒº½3cc^çÆv’µÎ̳2‰K8ÀÖ›•àY˜™˜˜uÒÔ¥kjÚ3ÍýaÈØ;*[yurí[Ÿ]\^d®ŽÛÈ,³½ŽxcÚê7pÁU´Èæ{ˆ1‘ÅßW•‚Fd" é¡¢—ü-8Ïto—?ö®;¶|W0B÷ 6ð’"“à â7J¦ÊÙ±:yƒ‹5° íozò— öÕuµR5ŽŽ™ÚúÔÔc¾±Ak$1GmÊØ€k*AÀ/ WZ'5‹WšÎ6øù½S«[hέûf½“^Øe±…ðFö?Ã$ñ@¶U^[Ç\=ð{*ëèEïx‹êF/oËÅà¦tëtük²3ÀTL¾“îF®©™}'ÜVÛFÿµG¦_I÷#OÛFÿµG¦_I÷#@‡ÌCèÙöBG¦_I÷#H|Ä>Ÿd$zeôŸr4whõ×‘ß Ö!mßõ³úG|+^‹”ïŸTEj(!AŠØZ)ÌFœB Ge*+Š6‡B©ÒPZƒqA¸*ƒElØ ­™k¸T‘Ù,2¹WŸÒ o…lÕÀª, t©XÆ À¨'¸¬;ÅF(­ •!\ృU"¡âÓ¾Á¨Tª°PHLPU "j•Pˆ!ÍÕBÒ² «+À¨"˜P«â‚ÒFöÈÆbiÑ‚¦i#4©§qfÇuAàV¢óÛ¶ ,ÉXöÐ0Äï«]4Þí-G4±Ø ³6f`jwô%«Û\ÌI¹1Ü¢š‚0Ы ¬‰®ú•JöMBW°£Á×°• àŠ*•A5SU TẫEzª‘C‚B‘¾£²§²ˆš©®î…^Ê'²£GéQúPNíSy=ÁF„½ÝOÒ£U. b‚Îu;*˜¼ãÚÖ—hгµ£³º›…[ Ù(¬•œŠå ”)ÅFP£*¶„AQEdAª¦¨€•@ˆ ¥°¥B š¢&”ЉT1ü$þ¾Å‹qýû¸JÓÂMèÛìX·ß»„®ñ¹·7jF¹à“Ú9jF¹à“Ú9oËç¡á>Éêç¥ú1ü2)—ÏCÂ}“Ô7ÏKôcød@‡é;Ù½KÝ h´;\Ä·{y¥Cüì?IÞÍëvÕŒtd¹ šîŽÀB¶McžðÑVµ 4—w¥Çt õ•lO“@ÇZdÎ-udŒ×.’ \E~OœÍÃq´v=¬§[3‡ˆæ¶²eÈN–³0iã{þòN+™ˆîú“ˆÛ3eT[6ww°6âÜ5Ìv*Óº× õŸU€ÞÐR&'l,Fc19‰sÑt5Qø íÕGà7´ÉÊç¢Ï´a­…Æ©¯Ü[© ”+•„µô.ÑZW{Æ|÷öLµ·†k'“\4®•Ó9ÔÌàÀÝkó»Í娠;í ë§£:‘šÌDçžäŽ’.†ª?½ š¨üö‚å•åsÑt5Qø íÕGà7´'+ž‹x6òÌ‚ N\(k¡Ô¡Ñî¨VÕGà7´Þ‹¡ªÀoh&ª?½ ™9\ô[rIeÄr>&=Å­k\Z /¨`øYM7è²ê£ðÚ ¶7Æóz.†ª?½ š¨üö‚dåsÑlÝDZ,-ÃX̹³FMÅ b7p Ò¯ì箥ÑË–™²º•ÑZ)¸k§<¼Ñ¶;{¼Zhº¨üö‚j£ðÚ åžW=CU€ÞÐMT~{A2r¹èº¨üö‚j£ðÚ “•ÏEÐÕGà7´U€ÞÐLœ®z.†ª?½ š¨üö‚dåsÑt5Qø íÕGà7´'+ž‹¡ªÀoh&ª?½ ™9\õHôËé>äk~áŒ8†€pÄÊÐL¾“îF„Áûqèßö£HôËé>äiûqèßö£HôËé>äh„>bFϲ=2úO¹Cæ!ôlû!#Ó/¤û‘ àÞ‘×gœwÂVe¿þ6ãÒ;á+ \tÆÛçÅ™ (ªFúÈJŒ ˆ ª 7–L¡T„ÈÇ” *²ªÐ*åUÀ¨8ií©ÊFŽÒiÀ  ‚²‚1X†n+Ñ4…R(¦¤iB€ (àR¨U«UM Tšý¨ÓP…A•ÍŠ: ¦*sÓÛApêiЭ˜o¬ Õ ãhã8Tn|IŒŒáÃ} Ö×C£7¿Š‡\Eô½ïÖ¯%¸J6‰n颩 vx£®áF4ŽÍR“%˱¥=à4+ÓžÙˆñVÉ'p*cºV,ÃH. ýaÔ¦¨áoÞW’{§âe–…(à°¤ù,§lþ¤¬îÀ»(÷o'$öÌ@´ÏnZnV†½½é…@š¸öVLÉ3Ÿ%fš44 é­PšŠ«TªÈ°&Ÿ©*ªâ”TªŠ" ªUB •8ª¥P[•U©J”¨EZ¥PYj™[BŸusï ¶„Ñ‚ŒS]¢©ŽòPï""¿–³6 C¼­Š*à€S™c©RJ‚äÕ* 7}Z€(ˆÄ MP `•@˜ J¨5A8 (¢ˆ$ E š"iP‚S ©@DQT•P•AÔÂMèÛìX·_ß»„­&ÿ 7£o±bÝ~î»ÆæÜÝ©ýç‚OhäM©ýç‚OhäA¿/ž‡„û'¨ož—èÇðȦ_= öOPß=/Ñá‘þv¤ïfõiö•¾ÎµÖÍ$l«°lŽ-.”1s©Q *¿ÎÃôìÞ·mØÉ |r4=%®k…AP‚ ±Ë˜æÌ×·–q?åk¿²|X›´cÖ€÷Øã« uušìú¼­,ÌÇŒxÙOœm<_#¶íYg´æ†6DhøÅm£iL¨Þ]¡³-6<—$¹ÐÝæ¾Gfpž=dú²÷9µkÃhÐæ¾®¡p4ÙvžË’é­c&ÖÍ^öÌA{\Ö86hxºÉjÇbÎûInœUõ>ž&´š[š·üm1Ë·§Úƾ”jéÏ,bôû¹s¾;q?áÌØ›QÛ:ëN¯1kf®àŠTñkï¯p¸[;òÄVÒÇqq)–HË^Ö4e`xÇ¥Ô:4.êóèÖÕ®-ð†}5/JL_áD]]Ú{VmUŒŒkõs\RÞÝÕÊu³y6tàNcLh \ý‰f`¿™Ž/s¬í­í\çæg Ë#b‘ÍÏ”fi¥wtP6™£ÖÂø³:=cKs°å{s fiÜ#qiɲ-Ý PµÎ ‚á—Qg%å¯kó¿s;5]ß‹¸ï§©XÓ¶œÏ/<íœg†Öf6çƒ}„D@E† »{‰&Žçu»²J@9Cé\¹©”‘ºÃufVbbq1Ž h-˜c‚8ɨcph?5ºïn㤕2Í-åisX ãHàÆŒ7Üà®°Ïioq$2LÌî·vx'(})›-r’7 n+lÞg¿¶OÞ͇hÍoq5¾­ñ8gsˆlº¼šÀøœH-—.5CCÆÜ‚9™-ävfI tB¤å`Ž6eÇG®8o¬È¬êZb+;¢1Ãnv&DXQc–Þ ©­`qmr8Ž3kº×iiì…‘bf'18žå!¶&¶b s‡Ê§Ê¦®šn+¢!3™Èˆˆ‚" """ """ Åsæ]ï|+Ÿ™}'Üt.|˽ï…sãÓ/¤û‘ªÌŸ·ÿj4L¾“îFŸ·ÿj4L¾“îFˆCæ!ôlû!#Ó/¤û‘¤>bFϲ=2úO¹ÿñ“úGü%k­›Ò:ìãwXÿ„¬9W ß>,Îô¸›ªÚ váD]A*F…W7t(%Qͦ#Fò°%FjiÁQV»p£…xPТªª¸î«†hTSt °váRFòÇZ« Õ5¨J‚¢´¡'aQ`wB¶`™Ç(íœ4àEjEGÂŽ!ØP¦c;ZŠÌ¬ªkÃÙSÃŠÆÆe$·wqZ¥YÇgÍ”7Å›¥^¨‘3˜îíÒ0ßT[eQÌiÒ=õÖ5xÇ’`ñNôïÕiº"1n#º¥“><#x©jE¶ÖFÑ• ŽÝÊ{*ëœÄÆøT)B¢¡A5Eì¥PMTU*˜ªHE©Å*‰D T⢨‚jRª*Õ" E‚QB ”Pˆ&¥MJª ¾nœácSUó…!ácªT ÍV© R©œ•9– Å3”ÀÏ‚š¬C¼¤=L ¥5‰ðSU0Là"/TÒ«œ(΂邮`TÕÕ*¢¡*H)URR¨.£J®eAj﨨U¨Jª®Ãƒ›Ñ·Ø±n¿¿w ZLþoFßbźþýÜ%vÍ9»Sú5ÏžÑÈ›Sú5ÏžÑȃ~_= öOPß=/Ñá‘L¾zìž¡¾z_£Ã"üì?IÞÍê·ÛOðÛ#2ºw¿,Mv#p¸‘PhvŠÏó°ý'{7¬Wf>þÀ[šâÖ1ZT;(sq v}åLòÏ.öoÍÉnOËxvì²¶km©K‹k‘•ÅÍÌ"4 ~FÑ@Hn;­ÇLÛ²ò3yÕåëvÓ ¥ÊN¤ R –8‹Zr·Õ™FÈÝ;½‹µíbu̶çQÍ&W1Îh*q¨ßÞÒ½»b²»Ž;†±¯d”Ž¥3gW™Ã Ö7SŒ»z{êièbñÍ[Ú-·ò¼³òË–oÿ³;8ïÅ·ïj]í˜ílåšV§k䊞Çs x¨mXEHÃV«ËM¶¶¬ôÏtñ–´ÈDzwõyjºÒ[Z[m ö}Ûf6— 1à™#Œ´»Ë<»3¢Èܱƒ¢ƒ‚ãí-›>ΟU/ŽÆ)F‡×¾—ÕVÑ1jç§hÙŽÉí‰ð–=djÖÛç“»¿tÏ‹Ö~]þoÿŸ´ré/7ùWiΔŽ(/ƒ@ݫۧ5úô‹ZsJã²1äí¡h¶•qÙ_Œ ¥€¼?€@4¡¦–è:=Õ*ȶê"" ·°Y@f˜’ c3>G»½cºâ¸»O¯JÈÝum ד9£gì×;Y X]3æÌèÚó–£E…4’»ÓC ñ˜§ceÔÌǀ暊ƒ†•«víŸ Ç[š¼·ˆ˜¢¬™\rù8‹©™îâƒJžö«¾…ⳬÚûýc³3ùw3hïf²¶6°‰e$6(ÄQ´Æ0S|ÔœIฺ‚Ù­tïµî ki˜ïïh\¹¿2@Ç…µË$1çÌøluÖëáGaCJîTÙA´gšÖêñÑ\DæºPK@12¹­`ìe'ú§Bå«Í<Øç¶ÜxÎýŽúzYŽ{ýºq»³1ÄeÐëÐn 7ؤsOd9¬ ŽÈN»ïY1;Ú™§ŒÑ£ÿâ¥l"ÆÞ1äÎiúÛÿ·ý#¾³‘¬s'Œ‰ Æ“‡‡â0YÕ]nÍ™ ç_Pfãß•ŠÉÎu¬y‰qh-ÎqÎKDŸù›ßM»¤˜¬ÄÚ¹ŒN6íÞÎˆŠ°""" """ """ """ Åsæ]ï|+Ÿ™}'Üt.|˽ï…sãÓ/¤û‘ªÌŸ·ÿj4L¾“îFŸ·ÿj4L¾“îFˆCæ!ôlû!#Ó/¤û‘¤>bFϲ=2úO¹=´?ŽŸÒ;áTkª¯´úëHï…an•ÆÛçÅ™d4:U¢ã½5ìQ&よÈ+Lw”5í¦•%À Šƒ£NêŒFŒB©Ò®¨áLQDì  ©¢¢§| 4R „R¨ 8T; ¨M4èPâs⣦:ÛY˜ F&§t­XÆg€·(õ"+ˆ‰™”ÙJ¦UpÊ‚@$Rw†…ÌQ(­n`¦JdP)¡ÞS™¡AxÜS0¼¶à„sZí"ª¤¸é4àÃõªä¯Êq÷Ö¢cŠòÌoC£âSuº;!Q’½¸ FòË“‡¶U˜ÐDz¡ÀÔ8i…n·Ù1m©llÂÍ}Z ;ÊI žúœ8¢Š¦e¢Š¦=¤¥¦BЦ¨%+ØQR˜ œ\R…‘WÅÑW}J(•D ©ª„A5J¨DTª„A5J¨J š¥B„A(¡ŠA8¦(ˆßSU‚jB •5UJ µTæUªU³&eTA|åFeZ¢ fQR¢¨‚j•P”AÛgðRú6û-ç÷îá+F?à¥ômö [ÏïÝÂWhiÍÚŸÑ®x$öŽDÚŸÑ®x$öŽDòùèxO²z†ùé~Œ ŠeóÐðŸdõ óÒýþçaúNöo[Öžlý/Ћüì?IÞÍëzÓÍŸ¥ú,og\M‡w Ülg½®šÕùa{@ò±5­ p tŒh v›´+/æKÇ[lç1€æ¸:¬ÔÀ4Ž64#‡th^.)ÒÂXö8A5‚æúŵù+zÅy¢ys<'.Þ£’ÑÆÿ‹ßmNµXÖ5ïÃ;Zøèl²µÚXâÑ£Ðî,QÀÝ£dûKö¸½§f]h;â1ÓPÒÑBX6ÜmóE½Á »hàº;;ãß‹_Eumw-ì&yѶ8¨êI{šÚ885®Ñ\ŽÄéh­mm®ÉŽYìž?áêÓµ5´ñ²v}¼{ë.t_–.bÚltreµÂFÍxÊj”ü®Í)»Ø^q¡ÚÖNŒm2 ¬Î'ËŒiG´w„7‹I4ur´Çæx[>ËmÃ2¸Dæ¼?I,ŠFù ¬òÆm5Œö¹ÛGÛÖÖ¬sFý“³ggÁ·q·6]»s:á² kb:Âi¹Å¨ý&çów|Û[}ì”öêÆøËÍ«Á·¶Z_#Íмó¯yÙ<z­[l¯Ûá½ê6wæ~µJ74g0ͺr(Ý'I¢ï.6ÅØ‡Èng{dŸ)kZÑÅeN$9ØÖœ«xO=̤[²Ù¢†ã—¸óT4âïšã…0+½&Ñ_¿|½Þžº¶¤Î¤Äc¶{#àÚsšÆ—8†µ¢®qÀ7JÔ–Ynã|vÌ:½â÷C\‰ÍkÉ!emœÁïij)/!ÚjÐìÿˆ :ÞÙîv‰­g1÷O~Èù4ì¬ '™ Ý»Î9¯‘í­i×\¸W‡qFÔ}óc`²lO‘ÄÉdtn{˜Òö1™;ì[R €ƒ¨’f·’IXé'‹7—À—6 8:4f i´i¦pàû¶vu¡¼m‘²fuı¹•cÛäÛµÌsdsk¸[N´¯$ÄÄE¢#;vGÇs7½¯36™Ïøá VSÄØ€’Úgµ²qé ͬ•Æ>$mÀBâk–¹—Asï"¾„‰,šfÌŽŒÊìٜĎÊöìÙ30Ü8o1áìkÅ@pÓC¾×P}56Åm²s²f7üa˜YkÛù9f¶ù,Êøš467Šeå1Øn SxfaycL€5ä ÍiÌÝÚö–«Ç_”BÖÃg<‘—5hn ŽÊvLxºR3ûs·Æˆµú¼çw 'Hkc ÷ƒ£q§ *–·SºAmweÆW?;@Õ9­v^!ÌNèÒ™ã:{&kjÛâ7üÛhˆ«" """ """ """ Åsæ]ï|+Ÿ™}'Üt.|˽ï…sãÓ/¤û‘ªÌŸ·ÿj4L¾“îFŸ·ÿj4L¾“îFˆCæ!ôlû!#Ó/¤û‘¤>bFϲ=2úO¹9´p¿¸§8ï…ac±ÅeÚD¡q½¬w°0ÔÐi\m¾Y–jª–‡ií¨ã ïŠ(Š8&b4…rT`PB…e(%HiPkºŠ¡5 ÍupÝQÀ åE„7 "•áR;*;)Z㸂ì£3½àµÞòóS£p$Îì4  j ôR˜Œö¤ËbËNgn«1–6é v7V–wœ3Ú…'O3›O‘–Ó®YòA=ŬÉQ  Ú,(¬i×–åwÍQ`dùE kMÁg NœhWžÚs]î½Hì‚…(Tâw=õ…1 Í­=©¦þ( b ‚«+UEJT©ÞAj¨Á‚{è' UE=åSŠP4'¾™» P‚QV©TÅ*UASTR•QTª ªT(ª ¶ 0Pˆ%)@J¨ª”ª…(¡J•U(%" ÷ÑF(‚jŠ1LPMJb¢©Š ©LTU*‚R¥ER¨%MUj•AdUJ ²*Õ*‚ÕJªÕ*‚È«Tª "®aºTkâüÁKè›ì·Ÿß»„­±±ÿêo°bÞ~î»CNnÔþsÁ'´r&ÔþsÁ'´r ß—ÏCÂ}“Ô7ÏKôcødS/ž‡„û'¨ož—èÇðÈ€ÿ;Òw³zÞ´ógé~€´_çaúNöo[Öžlý/Ðcy{jËËImŸ€‘´xŒZìÐq_?¹³žÊíñLÒ 'iÊræm@«]M+èëÅ­½ÔF+˜Û,g®¡ÑQ¼{!bÕÎî¯,øo)Œ¹ëhƦ؜N0ùã\æ8=„µÍ µÀЂ4WÑ#3ëÙ(X,pnQRçá߸àÜ»ƒvÔ‡aì˜\\Ëf’E8õvž\#jþf•²¾ÞÃ(kM:Ç›Gz¦šÚî.TÿÓ[sLO67w9i×ÛÖgR,b+Üíí+i.m! \Çå-ÜZ+{Ó•ü^Þ+ZÑö÷QIF¶ÚqVƒÞ±Ô0 Íc¸£ŽÃ”qq§°vö»-•ë¼¶ˆ¥?/æ»çoÞ;v¶±2êöÎcY$›¯Bî( 85¡Ìq«ÊŠb7×jÚ·¬ãÆ#¿¶<¿³Û£«MM)í¯o‰úO÷—˜Ú›.}Ÿ;Úæ8Û—y)t‚ r‚ꚃú¨Ø{%»>Ü>FŽ· ò®­rŠàÀ~ϼ·¡~º<³4b JÚU¢Fåx-­pÐáúÔ^Ë$V²:*™H Š”ó!Œï°ïˆ\ë§ZÌÛç /IÕÙ¾gÎèÏz’³®ç„¸¶Ý§#ËM ¤S3sx?$ÓÔaLvZÖ±¡­­h£Z0 À« 1Aa…¡‘°Q­ ë¤Gok½­Ÿ¶?Ýæ{ÅW¼0TÔ‚@À¸å6»þö’¬Š²ÂæH×>RçJÖñâ…´k³––×3Zàw´k£-Ý /‘’½t‘WVòs3 ;)Ò*4¡:ÆÈƹÌpâç„ÌÜí-4¯dW õ,ih¡qy©54­ ¨P4høV³>»†Á©ø6ÌÖ>]@&R]3Iqd„¹Ï¬‘“‘ôs3MÍm±ŒŽ6†1€5­h ` Àxf5 hiAM.Ð4û¨U’×½±Ík[†g& Z±ÈÇ_ËCPèÚÖÂbsõ”?7X߃p©%÷O-i-µis\渵ï{NZ ¸†ƒ]ÐIšØÃ+¡hdM"€Ñ–*ÔãuŽx;ýÓÏ9˜uŠÅk|ïÆï=͵¯}{gÜÒGå# «šöâѺá¸7th+a¦3s­¹mŽÉȈˆ‚" """ """ """ Åsæ]ï|+Ÿ™}'Üt.|˽ï…sãÓ/¤û‘ªÌŸ·ÿj4L¾“îFŸ·ÿj4L¾“îFˆCæ!ôlû!#Ó/¤û‘¤>bFϲ=2úO¹;´Eo®+£Xï…i¹¤c¸¶¶ƒé´.AѬw±UqóâÊ#˜`×öÖl³˜{‚˜å-ÁØ…1Áh=‚±àVJµÃP†‡N…:”̥ͦ ¥Q`j¤¬js¸hÅlµÐªö86»ÊDûá\JÎÚ0vF•pj>/hÒÊWtJÍÝÕDÒµÞXe˜S+q®’«4®q,èX—jiî™òI”¢„]Q(]±9ݾ³6ˆÞ¸Qdd/våeddMkƒ5 %JŵS ²Üw{8«ñ†ò€JT®S3;Õ`㺕Tª•ÕMU(§TªŠ€í a@Ò¦ƒqAk‚P œ¨¢ŒP[ÁF*1AjÁBb‚h%R¥ˆ•D &)U(!JŒQJb¡*‚S¢UÕ*¡MBRª‘U[U¢ º*" Ð(¨UàJ ¶ P«ŠUª¡Q*‚ø"¥R¨.¡R©UEðJ…J•(/P£6ðP;*Õ Çu( š…À œ¡As[Ù*¥Î=…Jo ô°šØHõ3ØF·ßß»„­§¿Ñ3ØF·ßß»„®ÐÓ›µ?£\ðI퉵?£\ðIíˆ7åóÐðŸdõ óÒýþËç¡á>Éêç¥ú1ü2 ?ÎÃôìÞ·­<Ùú_ -ùØ~“½›Öõ§›?KôXÞΈŠ4äþd¸ºƒg;PÐY!ÕÌüIk)¢”ÇE^1}!ÍkÚXð×Ò*:A Î;ò{K‰eÙ ©Ê u nTçí.Úv´ÄÆÞç“ÔèÞö‹WîÙŒpy¥í…´—›6Êf»ýd,Žh¤y8¿ «^áÆÊý§wBÕoå+Ð,ÅÔˆ-Ú ¦µÙŠ8ímÙjEs8Žõ‚•qÀh èÒÔ™™þíz]-M+LÎ6ÇÉη½™ò¼Ü1±ÝÛ½LÆ[$r¼1’âo8´á_9mºF<õ·šZÛµÏk´æ4¡S¡µ­w‰åIþ¯h1툺Ý€vQ™Žu»ƒ‹ ³esmd¥F+«µ;öuË Ò:7Ò ¨#Œn5¦ŽÊëi‰û£õÎ;ÿë½ïÕÿ×]ßv-ŽÜW¼ó+´¿0ÞÝÊE¼Ž··ˆÖ¯4®.sqÇz´øV‡3aÚÖÏp$dÃ~@X;®\úŠÓwNŒ;kÑ~XÙBG~!;Ac 5À÷âžS{ ³À¼•çµã9Ïå·ƒãiΦ¦­g9œómìz…@ÙÎy}c-hltWìÎͤæaØì©{ÃçšÐI ƃy­©>òÄgyDä•“0Ë^.c›”¸5Ø÷²PðÐé^è‰Æq³vqž÷ÓgEÏÙÞA$ñÊ-ó¹ñ:iÃÜ ²´hXÐÖV‡7}ßTÐKÖ+lDÅ»àC³œ SŠ  '²hT­;÷NÿôÐF%c3K²Í€åu ñÓ¼xF&q R¼ÖˆÙñÜɳÛ,mÄ}æ­¤`ZŠÔ\N’«®ÞñÑ 4]VV dhkdÞÒ2žQ+ wÓ7,&`v dRHèñÑ••‡+©ój¬øîûYîžæH„`¶6ëèÆ’â^à+ܬæ1ìvš[šüû:œØŒæm;ãw{yÞqC- ÒE…*;"µ QI$¼æ{K£s´f1¸Æ]A£6ZÑfPÖµ¢ “A†$ÔŸ|©Hܶ˜›LÄb&wˆˆ""" """ "" W>eÞ÷¹ñé—Ò}È×BçÌ»ÞøW>=2úO¹¬Éûqèßö£HôËé>äiûqèßö£HôËé>äh„>bFϲ=2úO¹Cæ!ôlû!#Ó/¤û‘ ó;Kú…Í9Çaï­jÑmíй;ò;áZÅròÌ£7eIÇN‘º«E;ŠK˜j ÌÉZìX*§ƒdª–…¯u4×…[?aL!ERÚhViÝÅ*b*UȰU!UA4MÌ;©¤×{B‡½¬mNÁ¾¬Fg`ÕE4.Ð;JDo:è^™´FùˆLLö/àj1ªÉª{ºUacÁ5вÑyï6æœZqÝ-ÄÖ+º2¨€Ô VG?3‹ˆ&¸h*€R‹9ÎùË+k*$Ñ¢pV´µ5 ”)DÌæ ”)B‚Ä„ªŠ(à>ú EŽèú”)ÅA9†âgL­L¡çì(.L¡(*˜¥§ Š©Q‚ )Pˆ T%P¨ªU¨J¥PJŠ (‚T%J "bˆ&¨¡MPB” ¦)@ˆE 4 µQWÅÕqLPZ©P«Tª U*«R¢»è.¢¡V©UD¥UkU5hÒB ªŠÀ§Yj ÌÍÀTÈP•!¥TϼÚpª™d'yLªIX‹œtš¨ª ¹š;*¦C¸Rˆ'3ŽêŠ¨Ê”Aê þœÿBÏaè?¿w \ø?§?гØFºïÝÂWhiÍÚŸÑ®x$öŽDÚŸÑ®x$öŽDòùèxO²z†ùé~Œ ŠeóÐðŸdõ óÒýþçaúNöo[Öžlý/Ћüì?IÞÍëvÕá¬Ö¯y€‘\¹±#FÞXÞØDEpÿ1m‰ìLpZ¹­–F—=ŵ-r׋ âÃùkDàL¢VÔ’Ç´sTévî÷OÌì‘»UÎ{³5ìc£'+i–˜èãW!xõ/nyÄÌb_7[WS«lZÕÄâ"%ô;9=¤¼éccÜй š.VÓd×m’äO$V–S³Y£Š"×\;0-qË | JéD:–Î`—Õ¡òã][qËZo.&Çž]¥`û›Á+m"‘ÎdC+EÑ~láô¦p^êòI~4ú5Ÿù-øérͼgtcÍõ)˜¦ÏÎø¤ù‡Z+K{Y­­`fH˜$”b\âæBڹĒ_Ox ‹y`¶‰ÀºâPDó†—¶µ V7aSŽé©ì,ëžffmi™›Nvï/•õŒ–™Ù;5Ó¾áÖìt²wåÃ0$îåLŒ¦­Õº­ù ÊßZ×mlïŠÑÀHu’ˆ,ˆ´Óßqo½T´F +Z-g–'šcº6ÎÆ[xäŠG#õ¯` 2PŒÔÝ5.Ç‘i‰œÌÌöíDDD@DDD@DDD@DD®|˽ï…sãÓ/¤û‘®…Ï™w½ð®|zeôŸr5Y“öãÑ¿íF‘é—Ò}ÈÓöãÑ¿íF‘é—Ò}ÈÑ|Ä>Ÿd$zeôŸr4‡ÌCèÙöBG¦_I÷#Aæöñ÷‘ß Ö[;D¯¸ÇöŽøVµß>,Ê¢8¨5!`ˆ.Ò¦ª€Ñ^¨¡¦ ­1BIâ×J“Û;ʦŒÎ {´*xµ÷€Z®sžjt©’B÷Wsp*/E)Ëw¤¬ÑS¤¾pV2=¼\ÕàǺ±©ZšÄÎÝ¿'±žÝç¼äk¡sæ]ï|+Ÿ™}'ÜVdý¸ôoûQ¤zeôŸr4ý¸ôoûQ¤zeôŸr4B1£gÙ ™}'Ü!óú6}‘é—Ò}ÈÐyÍ£ü}Ǥwµª¶vñ×‘ß Ö¢ã;çÅ™¨ º ‚У)Vª ¡iRЮpШENßA:×IÀGÈÈñ8º˜o•­$®ã£p-×NmÝ –gÜñcí¬sœjãRª‹ÑZEw"QB*%)&±¥î-Æ€Ö€4‚8…*Iï`²ƒ†ÿepÔ¶g;–SU\wp@+ÁÝ\Õ9©Ù@Eqín)ÃyAª˜*QJ "¥Bš œª*•%*¢©TPTU*‚QFe9‚Q*T ”QT©A)Š„A**•P•A5J¨QTªfUÁZ©™V©TªTªÕ3 š¢©!EPY*«UP[2ŒÇqUƒS"¸î©[*µLŠ€¦ŠpPdhщP •CŠ‚êéP\¨š€£2­Qª£2„@ª(¢ ”ÅETÕ%Q*ˆ£‰Š b˜¥Qª·þœïBÏaè?¿w \ûéÏô,ö®ƒû÷p•Úsv§ôkž =£‘6§ôkž =£‘ü¾zìž¡¾z_£Ã"™|ô<'Ù=C|ô¿F?†DùØ~“½›Öõ§›?Kô¢ÿ;Òw³zÞ´ógé~€‹Ù^ÆHÇG#CØðZæ¸Tp ‚°¾êÞ)q’wqŒL«Ü0hÄh`Ѧƒw}ZîGÇ Xhç>6fÞÖ=¬$WtfÁs¯ïa³´¸†&º[ a,Ž]•ÄëKHÎc:N5ßÒ±kb<6½:=I“niåŒyîÚÍw.¶‘N#„8U¬’Bd8󑞤aG÷pXµSÎæE›2ذÎÜ´ycÜç¿! Ò§uÛ‹5”7Q[±°28"ÈÞ+ØDŽu2ºG†:: 1'A#sjÞÙgw},§4².;ØÖÜYŠæs1¶wÏkSÒÓµ­ZÓŸw4DLÏÆvÇšm­¢¶‹Wt—9Î5sÜt¹Çt••26í)$†K¢Ë9ªXæ26lŽÌæÀÑ­q8ø]©LÄíŠÅ­Ï=­39œÌ˦ªö2F:9Ç‚×5 ƒc‹…KK H¡¥h â“§O¬³ºE$†rëXÙ5nf`•íÐæ×AëVM•`dD±¡íqþZ<‚­tMŽ\Íc\Çñ)ÚÁn¢Õojî™ðìò1lí¦Df‡VÇÉÞK"É•ºìÝö|Åï&½…–ÃeAb÷ˬ–æáã)žáúÉ9ê 6¸û‚ÝE©Õ¼ÄÆÊÅ¿.XÆ|SÀo` $´jŒï{†A)¬ÍBÊãJ’íå’¡ž1,l±º¹^ÂÓCCB0Òµ®"¿mÃg¶ÔÊÜAŽ`XöµÃŒ#™ÔÍi¡aáÐ6ËkÞA}=†Ð¶k2eI[a¯Ìù¦~²_7›åü€qÊ·<ô™¦&kÓÛqÛ³»aœN×y K¡t×ÈÆ‘ [©Ô XøÙ xç¼³®3‰Ù*""ƒ –v’¼¾H#{Η9$Ó $,QIwtO·’P׌shëVWXöº `k½Z­´S67“ŒOßœÙÙàÕ’âõŒ2u`æ K%eË»ÅÉ”¸ ÌÜ[¯ÚŽýÆ!áJÇÄÞ Ò5¢½…°‰‰ãæsRwÓÆqýò¬rG+ãp{‡4‚ 0Ò‘b{„D@DDD@DDD@DD®|˽ï…sãÓ/¤û‘®…Ï™w½ð®|zeôŸr5Y“öãÑ¿íF‘é—Ò}ÈÓöãÑ¿íF‘é—Ò}ÈÑ|Ä>Ÿd$zeôŸr4‡ÌCèÙöBG¦_I÷#Aç6ñ÷‘ß Ö5 ghÿqéð­m ŒïŸdC¥H¡áUuìïn¨&й´Ó(9«§UÒµœ].$+3²6‹qýK—'C9K‘çS)]饶ÛÜ“&'‰•Êr»yuD"œ…]°9§¾¤ÌDfF5fÄ÷cJ ò³5fŽùVÅr¶¯ó\(Ø;ã^âÈQÖ‹”Úg|¨7Tà4c¾«RtথA4¸”Qï¨AdÁEJ„ÁJ¦ PI¢(QTP¥B ER‚*¥ET‚€¡JŠ •©ª‚‚QB œQBU¨ªUEB E T ¢Š¥PJЦ)B€J)MQJµŠ€‚(¦‰P§0Aj¦€%w”U5TÌѺ™Â‚õP\•Bþ¡$¦œúöЍ¢…DéÝE*q@QŠš¥Pªˆ&ªEPJ&*PF(¥BQˆ D¨J Q¨ƒÕ[ÿNw¡g°tß»„®}¿ôçz{×Aýû¸Jí 9»Sú5ÏžÑÈ›Sú5ÏžÑȃ~_= öOPß=/Ñá‘L¾zìž¡¾z_£Ã"üì?IÞÍëzÓÍŸ¥úчé;Ù½l6î XZéÝ•²I«Ü¶£6ðÁIœCT¬Ú؈Ìð†[ÙcŽÚms+J¸5¯/«2f­[Ù'^ç®Ýξ1®’L‘—2ež=\o”°¼1ì~PW] ¨a3h66Þ0Ç”=ÁìÕ»9•ޏ;˜c‰\è-¯ìß$-alŽc&l&ŽÖIØì¡Ô°«¨ÃØ­W IÌã?¬>§¤ÓåÓ›E¹mmÜÓ›9ãöv·ß¶6›`ë=Y¬…‘5Ò9õ£Ÿ!£LdF ‘¹ˆªè~)fÖƒ3-/Ë3•0£ˆ®†ÕE›[4,•²¬žw·!â¼ÊÚ;}¼jðÑgšÖ È30<†½€šàÙNºD[1læ;^]Khͦ¶Óääµ£:s·Ê{Ø`ÚP\]uhjâ#ÖŽ)¹´áî-µ«-»ã—ÌfõÑÓ)~³).iÑš¬tï…ŽM§‘æ7E¨pݹ{bc¾ƒšdÌx=õsɉӋã¥ë¶&Ñœ·‘iØÊe’âC$rf-!±Je rÒ”hn žÏ¼¶¤‘‘°½æþœi'p+˜Ë©5·/nÏ9YdDD‚îÑ—l`/|O‰âH¥ŒÑÍp¨Ý‚AB³¢±3˜Ù091I·!uÅ®Au#Lf¹‹bŒµñœÄ¶&|™Þéã iŠ^퇷f]ÏnÂ.í[þÒ6—1«Hóg6j9—Y`¸³Šâ¤¹ñ½Á­t‘=Ѹµ®ÊKHÞ¦øÔ¥Jí]]9´Môë²k3˳8ߘïîLN6K+ƼT@p-4;íu÷Õ—*KÍ• ¢KÛ9*e‰ïiš9iS+#š{擤Ôn…šÛj:^,Ö—=&ZÆ\Ƽf«æT¿ E(€³m)Û4˜½~ï3Çc}®ÏÚ_Á‘‘ñG3Ø`Á&aLÔ¡£˜áï,—rM»ÝsÌhØ·;Èc\ü¸åÕÝŠ¬M-ä˜å¶qµs³,ʘ4府PM=“BªÉ£‘Ò1†®…Ù$88µ¯§%Á]fbcx¬b@À$ps÷KAhíï…Y b¹ó.÷¾ÏL¾“îFº>eÞ÷¹ñé—Ò}ÈÕfOÛFÿµG¦_I÷#OÛFÿµG¦_I÷#D!óú6}‘é—Ò}ÈÒ1£gÙ ™}'Ü›Ú?ÇÜzG|+Xšb¶v‰ÿ_p7uŽøJÖ¦ë´÷ã;çÅ•$/ .ocFNܼnû±‰=••ŹH%h-iÓ›=˘Æ0Ìû‡»Gv4öÖ*¥\p¯oãCQ¤hÞ]âb»1g—;cjÕRŽ Sî+j¥Ýaí¨½g¶k1¾Šý^oºú´€ñ±ŒRu)í …c6.Á¿ ØÃB®`™Æà^kÞm9òj!hE’jB­ ÓÚÜYR›ØvTå¥P)¢„ÅÐ( Rˆ”R ®¦0TT+` €€Š …*¢ªT‚T¥Qbˆjˆ¨ªš(!0@ª(D¡*•A)‚„¢ UES)L¡©R¤*µ*ÅT” ”ª‚ˆŠ*‚Tbˆ€•D@R£@DªUŠ*¨A5E Š Á*¢‰TR£ª U*”J š¨ªQB DRAQн õ6ÿÓèYì#]÷îá+Ÿoý9þ…žÂ5Ð~î»FæœÝ©ýç‚OhäM©ýç‚OhäA¿/ž‡„û'¨ož—èÇðȦ_= öOPß=/Ñá‘þv¤ïfõ»lÖ¾5À9®$9§A´ŸçaúNöo[Öžlý/ÐV»ÜÉ ³F[l³Vhã`lM#+\\×;0ˆÞ.é”â€ÜØI i~ªWÔÈè‘5% ±î†àáðS5£§¸¿’y`Ôj#âZç9ÏË#†f ˜nð¹s.`|#exKO|ßü†ûÔ8¬VµœÄÄbg~6áëÔ×Ԭזö‰­kœ[1Ÿí.Wå÷¾=e¬Ž$Ù˜þ+[!ÛŒ 4phÂÓmísÝo² uôí¨sÇ;¾y¥{޸奶6{d’íÎÌÖ¶å‘f%ŽŽ®Ö`iB×—;NîlCµ­!ØÓ‹rÛym#sXÖ[˜ñXö ç‘ßå¾±[cí˜Ë¶¾—?þúÇ??.cw,Ìoœqþì{ jm 'l{BA,WaýN`Ðã !ôkZ×b1ãSGezÈvÊxØp[BÝ]ݳY4B¡ÙnÇ:]—1÷c´¢»´†àÑ®œØš\óƒÄgä´ñI(7éŠéXÛÞMLLóV1ÆÏ—›_h[ÆÓÜ-1‘!d¥­wíBü,~bðÜZjG„Å¥¬/‰I#šòñ¯/¨sKš#ŽQŽº+ŠÉu‹í£=ëæ†þF>Výf¶ŠÆf[¶­úT¬ÌçnØŸõiÀDDD@DDDA̺ü½²¯n乺¶{Ãk&²@I- Z@{´èºâû`]ämÖÒÙ÷K&'[,2w…Ÿ;3‹iRÞÅMW¡XÝo‹ÜAÌðZ_™ÁÍ  ujÊåí1ÇJïOQ8åÕΦŸ//%¦gÝËú³5í’ó–û~Ö×aIq míîptp±š¶Êç9°çcˆkªÂàOzOÍ]µ?±z—AW9¹\j_”ÇPT{Új_ÃlÍÛîßO•ů9Ò°eÌêÓ¶€M;«7å˜Dæ{©¬‹èDz22¶"ícã‹AޝÇM8PÑuµý6¤Z>í;͹ùí÷x×g÷þÉ‹Gs± ÑÏ 'ˆæŽV‡±Ô"­p¨48èWZ»6ÀlûVÛ _(hh«É ±¬9‰ÊÓ–¹k…p[KËx¬Zb³šçdÏã¼DEDDD@DDD@DD®|˽ï…sãÓ/¤û‘®…Ï™w½ð®|zeôŸr5Y“öãÑ¿íF‘é—Ò}ÈÓöãÑ¿íF‘é—Ò}ÈÑ|Ä>Ÿd$zeôŸr4‡ÌCèÙöBG¦_I÷#Aæöˆ~ãÒ:½µ¡%ÄM8qϵ}´ç©rÚà$4 Q±8éÁNcm§c½.–IÐ’0 u.ì+¶6·‰ß*Ø©:˜ÙM‘à±ÛµŒB7]‚¶Z VªÙIV,ZÖ¶ùËQhдÆGw›‡{…l+Tµ¥ed´wmc_–vÆÎæ`¥U¥§Aª±Fæ´éXŒuu{$ʻަgcŽ”-ËÅQU/ÜUªªUJŠ©Tb¦ª*‚Q*•A«UVªjŠŠ•g× 8V‡²+Bª‚j•*ÑßED£J •ˆSU(A5QR¥BJ&(‚…JR¨!1S@)S‘Y§j)‘@Õ9h® ¹£‚"(¡ÔnžÒ‡MàŠvJÅZ¢¬\O`(ªQU«(@DªUE©TªT"Rª(˜ š¨QR¥QTª*Q(TªQ‰TA4 ‚ŒS¥V…EZ¡Ej¡Jš…S” U*™TåPz›éÏô,ö®ƒû÷p•Ï·þœÿBÏaè?¿w ]ãsNnÔþsÁ'´r&ÔþsÁ'´r ß—ÏCÂ}“Ô7ÏKôcødS/ž‡„û'¬fXãšMcÚʶ:f V†MôxvhÜÖ—eq$¡c›òˆßR%¢àvH©ÖmùÖr‚u›~uœ ƒ&¾çÀ“–Α5÷>œ¶t‹Y·çYÊ ÖmùÖr‚ šûŸN[:EI]$Ì1Í ¤ÝóèÜÓC\Az޳o㔬Ûó¬å2ɯ¹ð$峤M}Ï'-"ÇÖmùÖr‚u›~uœ ƒ&¾çÀ“–Α5÷>œ¶t‹Y·çYÊ ÖmùÖr‚ šûŸN[:D×ÜørÙÒ,}fßg('Y·çYÊ2kî| 9lé_sàIËgH±õ›~uœ fßg( ɯ¹ð$峤M}Ï'-"ÇÖmùÖr‚u›~uœ ƒ&¾çÀ“–Α5÷>œ¶t‹Y·çYÊ ÖmùÖr‚ šûŸN[:D×ÜørÙÒ,}fßg('Y·çYÊ2kî| 9lé_sàIËgH±õ›~uœ fßg( ɯ¹ð$峤M}Ï'-"ÇÖmùÖr‚u›~uœ ƒ&¾çÀ“–Α5÷>œ¶t‹Y·çYÊ ÖmùÖr‚ šûŸN[:D×ÜørÙÒ,}fßg('Y·çYÊ2kî| 9lé_sàIËgH±õ›~uœ fßg( ɯ¹ð$峤M}Ï'-"ÇÖmùÖr‚u›~uœ ƒ&¾çÀ“–Α5÷>œ¶t‹Y·çYÊ ÖmùÖr‚ šûŸN[:D×ÜørÙÒ,}fßg('Y·çYÊ2kî| 9lé_sàIËgH±õ›~uœ fßg( ¹šàŠÞFñ{:E‡òæå.y  ¦V7䓼«ÖmùÖr‚u›~uœ ‚ß·ÿj4L¾“îF¨É#’q‘íu#}r~T{Êñé—Ò}ÈÐ!óú6}‘é—Ò}ÈÒ1£gÙ 5oŲìÔ,.ÆnœíðPq/vL·sNÇ´6W— ²ZÐïÒ%ƒð;Žqœ‰º%èòÍη՞‘2Íη՞‘g–;øÇ8ÞDÝŸÁ'çÈ›¢^‡,Üë}Yé,Üë}Yé’ <÷à·ãytIø-Ç8ÞDÝô9fç[êÏH™fç[êÏHœa翸çÈ›¢Pv-ÆäŒäMÑ/E–nu¾¬ô‰–nu¾¬ô‰ÉtlKޱµÜ9&Ã÷K'áWt¦µ¼‰º%ÞË7:ßVzDË7:ßVzDäƒ=ø5Æì­?øÍÑ)üço&n‰z ³s­õg¤L³s­õg¤NH0óÿƒ\nÈÞLÝÁgçÈ›¢^‡,Üë}Yé,Üë}Yé’ <÷à³óäMÑ'à·ãytKÐå›o«="e›o«="rA‡žü~q¼‰º$ü~q¼‰º%èrÍη՞‘2Íη՞‘9 ÃÏ~ qÎ3‘7DŸ‚ÜsäMÑ/C–nu¾¬ô‰–nu¾¬ô‰É{ð[Žqœ‰º$üãœg"n‰z³s­õg¤L³s­õg¤NH0óÿƒ\säMÑ'à×ã9tKÐe›o«="e›o«="rA‡Ÿüãœo"n‰?¸çÈ›¢^ƒ,Üë}Yé,Üë}Yé’ <ÿà×ãytJ?¸çÈ›¢^‡,Üë}Yé,Üë}Yé’ <ñسŸÚ7‘7DŸ‚ÜsäMÑ/C–nu¾¬ô‰–nu¾¬ô‰Éwð[Žqœ‰º%?‚ÜsŒäMÑ/C–nu¾¬ô‰–nu¾¬ô‰É{ð[Žqœ‰º$üãœo"n‰z³s­õg¤L³s­õg¤NH0óß‚ÜsŒäMÑ'à·ã9tKÐå›o«="e›o«="rA‡üãœg"n‰?¸çÈ›¢^‹,Üë}Yé,Üë}Yé– <÷à·ãytIø-Ç8ÞDÝô9fç[êÏH™fç[êÏHœa翸çÈ›¢OÁgçÈ›¢^‡,Üë}Yé,Üë}Yé’ <ÿà×ãytJÃdÏ»#ytK½–nu¾¬ô‰–nu¾¬ô‰É}Û"èàÙÑš¾ÉPì;“ûVrfè—£Ë7:ßVzDË7:ßVzDäƒóŸÜsŒäÍÑ'àw<ã9tKÑå›o«="e›o«="rÁ‡œüçœg&n‰?¹çÈ›¢^,Üë}Yé,Üë}Yé’ <çàw<ã9tJ?¹çÉ›¢^“,Üë}Yé,Üë}Yé– <ßàW<ã93tIøÏ8ÎLÝô™fç[êÏH™fç[êÏHœaæÿ¹çÉ›¢Qø Ï8ÎDÝô¹fç[êÏH™fç[êÏHœ°aæÿ¹çÉ›¢OÀ®yÆrfè—¤Ë7:ßVzDË7:ßVzDåƒ7øÏ8ÎLÝÀ®yÆrfè—¥Ë7:ßVzDË7:ßVzDäƒ5øÏ8ÎLÝ~sÎ3“7D½.Y¹Öú³Ò&Y¹Öú³Ò'$y¯ÀnyÆrfè“ðžqœ™º%érÍη՞‘2Íη՞‘9`ÃÍþsÎ3“7DŸ\óŒäÍÑ/I–nu¾¬ô‰–nu¾¬ô‰Éoð+žqœ‰º$ü ãœg"n‰zL³s­õg¤L³s­õg¤NH0óOÎ3‘7D§ð+Žqœ‰º%èòÍη՞‘2Íη՞‘9 Ä<çàwã9tIøÇ8ÎLÝôyfç[êÏH™fç[êÏHœaç?¸çÈ›¢OÀî9Ær&è—£Ë7:ßVzDË7:ßVzDäƒ9øÇ8ÎDÝ~qÎ3‘7D½Y¹Öú³Ò&Y¹Öú³Ò'$‡ü~q¼‰º%?‚OÎ3‘7D½Y¹Öú³Ò&Y¹Öú³Ò'$yïÁgçÈ›¢OÁ'çÈ›¢^‡,Üë}Yé,Üë}Yé’ 5caeŒ¬?&0ÚЊ剌$fé yýû¸JÂø¥{Ã+hàA¤gwqeq«‰ß+JçmOè×<{G"mOè×<{G" ùƒ³Ææ´»)©€hcs~Qê“ <å޲;O¼>³¹íl/-p³AÿÍMlüÛùqô‰­Ÿ›.>‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛ‘SZþeý¶xé­2þÛðø<ßvÚÀËyn%–"ðصbV×e’1¦@ºÓïr¦Ù¦ôÚÈé#¶’<ðÈø¤—RZàYJàpÑA¶6…‰e»Ììh»ÖÁî 2PŒ­} }[ÌÔ’Ú•ÊiU¼µÛýrÓÿǸö–¨'mJ¹úmJ¹úo»O¼>V661¬Ñ R70Þ\gõŒæ¿‰WvšŠ{ÔŠ<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊåY¼{U›Ç·ñ.—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ%Y¼{áùî¹O/ýÏ÷(;•fñíüIVoßĸ~_ûŸîSËÿsýÊà-;?®Vç5¨ i¡Þì./—þçû”òÿÜÿrƒ¹VoßÄ•fñíüK‡åÿ¹þå<¿÷?Ü îU›Ç·ñ-Gì#Ý$–=ï%Ï{£Œ—‰$–i\ï/ýÏ÷)åÿ¹þåÿà»þ¾ßÕGâ'à»þ¾ßÕGâ-/ýÏ÷)åÿ¹þåÿà»þ¾ßÕGâ'à»þ¾ßÕGâ-/ýÏ÷)åÿ¹þåÿà»þ¾ßÕGâ'à»þ¾ßÕGâ-/ýÏ÷)åÿ¹þåÿà»þ¾ßÕGâ'à»þ¾ßÕGâ-/ýÏ÷)åÿ¹þåÿà»þ¾ßÕGâ'à»þ¾ßÕGâ-/ýÏ÷)åÿ¹þåÿà»þ¾ßÕGâ,¶Ö6ÒMm­¤PIJFÆ0‘ZÒ­hÃËòÿÜÿrž_ûŸîPní¯éW?@¢å_뺔ÕëôÊk®Ôêÿò¦(ƒÿÙfox-1.6.49/doc/screenshots/rezound_thumb.gif0000644000175000017500000023701711637250333016026 00000000000000GIF89a,í÷ÿ   &, +39 : 5. 8-35 ').-%$%...*$+222<<<995,.1'] BF Eofz ys"K&Q&+U48\*.P7úР“ÉX,Y¹ºuãäÉ“'Oš¼l»5‹Û6\Üpqㆠ7€¸¸ †+.n¸¸qÃÅíÖ·n¦dñã‡ÏÛ/'¹ÄD¡Å •(§ÀT’k™/è¦P‰RE•…oÞ Uù÷… 2¢©EJ•(Uˆñ† 7nÜpqK†K.\¸¸áâÆ-.n¸ÄëFÅ‚ªo¸¼‰áæK†(6ÌhÒ$a¸„]Ã…+.aÂ’áÂÅ›0\Ûpqã†ëš0a¸p%»&,Ù/a¸ †+7n¸páÂÅ.\¸¸ † ®m¸pq»þEÆ[†Q¬,d¨bæÂ)o¸pqㆠ.aÂpáÂ…‹.\¸’áJ† —0a„]Ã%Œ.aÂ’á•k›0a¸p ãÆ .\¸páÚ†‹.\É„áÂÅ­\7 ².lÃuÊÀrµøôé¨ Vß’Ý—ŠOŸ>øÊdíZ.mÝ@yÒäI“&/ÛrÍ↋.n¸¸á↋®dÉ„áâÆ.\ܸÝò– ׸{ÿî™ûu+7YÛnݺ&ë.\¹º}Õ‹Û-\³p"Ž›°\ß„ÉâFëV®m·fq£…ëV®\߸qãÆí7nÜ„%Ãu .\¸¸åÂÕM˜˜nÝvÉòÆþ›·1ÂTÑbµ*Õ˜S¦T±Jå·dÜ„qã&Œ7n߸qãÆ7nܸqãÆ7nܸqãö7nܸ}ãÆ7nܸqãö7nܸqëÆÛ·o·ÄŒ;×)V¦X•šÕ7nܸqãÆ7nܸqãö[7nݸ}ãÆ 7nÉ’qãÆ7nܸqãÆ7nܸqãÆ7nܸqãÆ[2nܸq+ÇMƒ¬ âd•òVnŸ>|øÄ€a&®[æXõéÇOŒ ŒšÝÂÕí(Mž4iÒäå[®YÜpqㆋ.n¸¸áâ&L.aÜpáâÆ ®[Ý„qÃ5K—.þ]·nÍÒuK—®[ºnÍš¥K׬Yºnͺ5ëÖ­T²néÒ¥k–®[³nݺ5ëÖ­[·fÝÒukÖ¬[³néšu ×µnß¼}ëæÍ·\¸¸m #Œ1`Ä€SE 1dÈCf 2dÀˆFŒ1bĈ#Œ0bÄ€FŒ0bÄ€#Œ1bÀˆ#F 1`ĈF 1bÀ€PŒ0bÀˆ ˜/dÄ€C†Ì2dÄ€#Œ0bÄ€#FŒ1`Ä€F 0bÀˆFŒ0bĈŒ1bÄ€#Œ1bÄ€#F 1bĈ#F NåþºiuK–]ÝÊÑâÃ'Æ„ ¸qãvk«>|`Lè Ù²[¸¸};¥I“&Mššt»F‹7nÜpqã†K˜0a¸¸áâÆ 7n¸¸áâvë[7UUJCf ™1cÈŒCæ§1dÆŒ3†Ì˜1cÆ!Sj̘1dÆŒ!3f̘QvÈâ4f ™1cÆŒ3† 2‡¾ÌòVÎܸqÞÊáÊ… 7n`ÈéÃ×>}øöéó·>|øðáÇß¾~úúáˆ>|úðéÇŸ>|øôá÷¾}øðáÓ‡O>|øöáÓ‡Ÿ>|úðáÓ‡>|úðáÓ‡ß>|øðáþ÷oß>|øðáÇ/>}ûôéÛç>}ûðíç¾}ýöáÇ>|øðõÇO>|úðíç>|øôá÷¾}øðáÓ‡O>|øôáÓ—o\7 ²8ˆh!n[¹Y5bLøâJ–*UªtcÆ 1™†eŠ¥ ×7n£˜0a„I“k·fqãÆ 7\Üp%K&,.n¸pqÃ…‹7\Ün}ëÆJ¿~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñë·¯?~üøñãÇ?~üø7n¾S³¼Ã… ®m²ráÂÕ›˜~üðáâÇþ?~ýþ•ã÷¿}üøõãWW¾kûøñãÇo?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøÉÇo_?~ûúñãWîß8åÐñãGn¿~üöíã7îÖ­~ûøñã×ß¾nüøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üöë¦AÖ-ºq+G F”[ßrå† ×­q¬`|É•ì2dËnáú¶íPœÈQÅíÖ,nܸáÂ…‹.a¸¸]ㆠ7\Üpá↋ۭnÞLͺ'¦Tþ9rå’ë7._¾r÷ª‡¯™\äòñËæ¹}åòí§ï_9~¬Ä˜ëWj>tùÆñ#WŽ¿~·VíÚÅi–·qÛ’ ãÆmV.\¸ºq£_¾Tüøñã·Ö¬C³L©R¥ê¿{¥T‰é&+_?Y²n­JÅí?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ_¿0¥nÑše*•.S³T©:%Ë”)\¥dÂ¥Š«UÜdÍ¢•K–,\§VÝRÅj•7~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇß¾qþÝ4ÈÊ ¢…8nånêÆM·dܸ »5N+oÉp!C†l6\½%ãæ 8oÞºmË5‹.\ܸqÃÅ-.\Üpqㆋ.nÜpáâvë[7S¸ÆÜâw!Ê1d¨Üª2æV”n`ˆùRåË~÷¢PS¥Š˜0UÂ``ÅoŒ˜r`¾PCåK2UNõãÇïÚfÍò6Ž7nܺÍÊ…+×7nbôñÓ'‹_¿~üîíÒ…‹V˜oªTuãWNŒYånýãwëK7V¦Råâ×_?~ýúñëǯ¿~üøñëǯ¿~üøõã×_?~üøõã×_?~üøõã׿~üøþñGÆ›)YªXÝZF+Y¦Nɓʷ\²L}¡¥‹•.n´Æp£Š 92³L©šÅ¯?~ýøõëÇ¿~üúñãׯ?€ýøñã×?~ýøõã·o7 ².ˆh!.™7]¹nÝ•ëÖ­[ºnq»•KW®\Ël Ë5 —°[·néÒ¥K×­\³tqㆋ7n¸¸ Ã… .n¸¸áâÆ 7\Ün}ëfêÖ*V¹¢pf×1·4Ì#«Š“0bT|9Åï”0©6°e 0üø"S®Ê'œ¾D³kÕ }üúu»ÆÛ˜YÞÈÉ:t¨T©[¹páú† L?~üþñãþÇ¿råôÝ·Ï•7{¸Ä•Gî¾~ùöuëGî¹}üúñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~÷ÈùÃ'®\¾{øî‘ÃGÎÀ{Þðq»·>râîá·ïž¸~Ûúu§_7råöñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üúë¦AÖ-Äq+×mÜ8\³f]óöíÛ·qÝÆy»5kV¸uÞ¾yóöÍ[·oÞ¼}ëö­[.nܸáÂ…‹.\Ûpqㆋ.n¸¸qㆋۭnÞXÑâ'kþ×-~´nýSåm›¬ÛÊÍú¥K–¸YÝøíÓuÍ-oÛ¼Ñòv¿o«Àu£eËT”o²þéšÅ_?oÞÆ5ËÛ¸kº®Ýº¥+®dݶ… vî\ºsçÎ;—ݹséÎK̰tèÒKwîܹtçÒ¡KwîܹsçÎ;wîܹsçÎ;wà¹sçÎ;wîܹsçÎ;wîܹsçÎ;wîܹsçÎ;wîܹtçÎ¥KwÝ9téΡK‡.ݹtçÎC‡.ºséΡCw.ݹtéСK‡.ݹsçÎ;wîܹsçÎ;wîܹsçÎ;wîܹsçÎ;wîœ9þqß4ÈÊ ¢…8nån™*Õ‚… 7ª¸áÒ5N+1/X¸ys¬Ù­\Ýp ãÖMX·oܸݚÅ7\¸¸á↋7\ܸqÃ…‹7\Üpq»ÅÍ›)YüøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üð©ºÅ?~üøñËwªT)VXjy3—+W®\¹dåÂ…‹[7,#H  $H A‚ gHœ9s† $H A‚ $H8C‚ $Î A‚‰3$H A‚ gH q† $H q† gH q† gþH A‚‰$H A‚ $H A‚ $H A‚ $H A‚ $H Aâ $H8C‚ $Î A‚‰3$H A‚ $HPCŽ›YD´Ç­->BÞèšõfζo·Æ±â£¦Ž0Lj9»–Ë›0n«R%£Å*·\³¸áÂÅ 7n¸¸áâÆ 7\ÜpqÃÅ .n·ºm»åm_¾|øðåÇ/>|øðå×_>|øðáÇ/>|øðáˆ/>|øðáˇ_>|ûúáˇï¹|ø¼¥ZµjUªqß®éÒ5kÖ¬[Âráâ¶m ‰3jò¤þ9sæ ‰8yà”HCB hΔH“æL 4gΜ9s†Ä™3gΜ9sæÌ™3gΜ9sæÌ™3gΜ9sæÌ™3gΜ9sæÌ™3gΜ9sæÌ™3gΜ9sæÌ™3$òÀ!‘ÆDš4hÐP£N5jH”X£¦DšiÒ”P'Nš4%ДHC" 4gΜ9sæÌ™3gΜ9sæÌ™3gΜ9sæÌ™3gΜ9sæÌ™3iÊ}Ó ë‚‰⸕›%cS¹Æ‘EK—9V3ö\QulÎ[²rqãLT¨W£Dò–k7nÜpá↋.n¸¸䆋.nܸáâÆÛ­o„ÍR%þK•,YªvÉÚµk—*Y»dÉR%K•¬]ªd©’µK–ª]»dÉ’µk×®]²víÚ%K•,Y²dqëÖÛ·qãÊ•+× ®mܸqãÆ.\ܺM!q†5hΜ!‘'N=qx©‰CBMž8q`ʼn£†Ä™3gΜ9sæ ‰3gHœ9sæÌ™3gÎ8CâÌ™3gÎ8sæÌ™3gÎ8sæÌ™3gÎ8sæÌ™3gΔ8s& ¯6ài£&Ë6n·Æ±âCäM$/Y»†«·Z¢B½ê”·\´¸qÃ%Œ.nÜ„áÂÅ.\ÜpqÃÅ .n·¾yc%‹?~üøñëÇ?~üøñãÇß½}ýúñãÇ?~üøñãÇ?~üøíÃÇ¿råÈá3¥j\.n¸¶á•Œ[2n¸®qÃ…+.n¹pqë†e‰4jJþ A‚D hJHS¢D‰iLPƒÆ $H A‚ $H A‚ $H A‚ $H A‚ $H A‚ $H A‚ €$H A‚ hÒ )‘&M‰hÒ¤1‘&M5$Ô )Q¢D‰4iФ)F 5$Ô¤)& š4%H A‚ $H A‚ $H A‚ $H A‚ iÄqÓ@낈⸕Óŧ)8á†ëV9V}úàxbF¥f¹puãVKT(^£Bòvk7\ÜpqÃÅ W2aÉ®qÃÅ 7\ÜpqÃÅíV7o¦r‰9þ$&W.|WR©*—Ï›·mýøÉ*†Š,\ãV…ÁGn¾\ÞÆÝòv¨?]aVñë—KÌQbdÃÅ 7\¸pmÆ —0\Ü’áÚÆ ®oܪÀ8qàÄ8pàÀ8pàÀÀ8pàÀ8pâÀN8qàÀ'8pàÄ'8pàÄ'8pàÄ'8pàÄ8pàÀ8pàÀ8pàÀœ7pàÀóÎ8pàÀ8pàÄ'8pàÄ8pâÀN8pàÀ'þϸndeÑBœ¶r³øð1Á‰*n¹pÝǪºC¶ìV®nÜj‰ UkT¨;ßrÍê&L˜0\Üpq&Œ7\ܸqÃÅ®k„Ýòæ­T®R`¨¨CL©/bÈ€©¥?*ùÊA©b…Œ0_¾Œ!£ª *T”â—oT:~ü¾Ið¥Ô®q¹¶qㆠ7\¸páâ&L˜0aÂ’qË…ë›00úøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?þ~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøõ÷Mƒ¬ "Zˆã6nV =ÆÐ’¥J•ª[ãXŘ…Õ°L˜b©ÂÕÛ¬'Ot=yêÛ­YÉ„ KÆ 7\Â’åÚÆ .nܸá• —°[ݼ…GV0UÄ”ª°Ô¬ 㢔ºÇoŒ*PNªTL˜*c¾€©’aœ˜/ øQqÕ_¿nÛJ#k.\¸pqãÆ ×6n¸~%K& —0n¹p}&?~ýþøõã×_?~üúñëǯ¿~üúñëǯ¿~üøõãÇ_¿~üøõã×_?~üúñëǯ¿~üøõëǯ?~ýøõëǯ?~ýøõëǯ?~ýøõëǯ?~ýøõãÇ_¿~üøõã×_?~üúñëǯ¿~üøõãÇ_¿~üøõã×_?~üúñëǯ¿~üøõãÇ_¿~üøõã×_?~üøõëǯ¿}ã¸iuAD q×Èɺ!FØ·dɸqãvkœ©¼%C† ™µk¹¾q¸MÌn¦ÌÌú–kV2a®áJ¶ .a¸’áÂÅ .nÛp –ì–·n¦fáþÃWŽœ·r÷¸‘ëwŸ·nüøñËõË\·(Þîm»—ïV?oãrõ»‡ë?o·Ðñã7ÎÛ¸r¥dË…‹.n¸¸%–L˜0a×p ÃÅ ®nÉÀôãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøäÇ?~üøñãÇþo_9ndeÑB7s·\}†K˜0\¸pÝò&‹–·\¸!C¶,W®n¹p}ó–ë[·mÜrÉJ– .n¹páÂ… .nÜpqㆠW2\Â’ÝêÖÍ”,~ýøñãÇ?~ýøñãÇ¿~üøñë—‹?~üøñãÇ?~üøñãÇ?~÷Ĉ3&Ьq¹¸á↋®_„ –,™0\ܸåÊõí˜}üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇþ?~üøñãÇ?~üøñãÇ?~üòãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøí+×Mƒ¬ "Zxëæí–°[·rݺuë–­[Ýr底ë–-[¹rÝ&ìÖ­[·nݺuëÖ-\Þ¼yóæÍÛ8oÞ¼yã&LX2a¸¸qÃÅ ·[Þ¸å÷9räÈý+‡î9räÈýû÷9räð‘#GŽ:räÈ•#÷ï_¹äÈ‘#wÏÛ¬Y³fÝ*Ç 7\¸¸áÂ…‹·k¸¸qÃ…Kض\¸ºá£?~þüøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~ùñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ¿~å¸i uAD qÜÈuóÖÍ[7oß¼ywîZ·qÝ„yó&ÎÛ·o߯}óÖÍ›7oݼyû&lÜ8nÞ¼yó6ÎÛ¸o·¸ý&Œ.\Üpqãvë.nݸþq&Œ·mɸqãÆ7nܸqãÆ.nܸqÛÆ7nܸqãÆ7nܸ}óæÍ›7pܶqÃÅ.nÜpqÃÅ7\ܸáJ†+—7\bôñãÇ?€üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãþ·oÜ7 ².ˆhÑÛ¸\Â~áÂÅ­”0¸FAQ%+Š˜o¸pá•ë7\¸pqËõMLªYT¾àe7\¸p ã6k7nÜ®áÂÅ 7\Ün}Ã… 7\Ü„áÂ% ×¶k¸pá•L.\ÜpáÂÅ .\ÉpmÃ…‹Àd¸]ㆠ®kÂpáJ– .a¸áÂÅ.n¸¸áº&Œ.n¸¸åÂõ ˜}üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇþ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üöã¦AÖ-Äq+‡ ×6n¼‰ùæ‹•0b¢„ó —°mÜpáê–L˜0n¸ºC% ˜*_ªÌâ& W2nÜnéâ– .nܸá↠·[ÝpmKÆ W²kɸ K–L7n„%»Æ 7nܸáâ& —0a¸pqK&LX2a¸¸qã&,™°dÛpqã–LØ5nÜpqㆋ.n„á↋7\¸º ³?þ~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇß¾qÝ4Ⱥ ¢…7nãpqKP.oa¨PaåB©/¾ˆ»ÆM·\¸¾á–Œ.oUĈ¹@ÅÔ† ³¸qÆm·[·¸qㆋ.n¸¸áâvë›°d¸þpqㆠ.\ܸáâ†+™0\Üpqㆋ®d„%&LX²d¸p%†‹.n¸¸á↠7\Ü~%Û†‹.n¸pqÃ…+™°dÂpqã–+—7n`ôñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñÈ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñþã×o7 ²2ˆh!ŽÛ¸\¸páÂÅMU*VÜhU‘Õ Ì¡n¹¸á–+7\¸páÊÅ-•¬obÄxKõåV2\¸„åâ6k7\¸¸á↋.nÜn}»¶ 7\ܸmÃÅ .n¸¸ Æ .n¸¸áâ& .aÉ„áº&L˜0\¸¸á↋7n¸¸qÃÅ —0a¸pá↋7\ܶ ûuM˜0aÜráúvMÌ>~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøäÇþ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üúû¦AV-Ä%w+W®\¹náJ†+.oÂnuã–+W®[¸n}ãv+W®\·rqËu«›°[¸¸Ýºu+W®\¹nåâÆ 7nܸá↋Û-oܸqÃÅ.n¸pqㆋ·dÂpqㆋ.n¸¸ &ì.aÉ„áJ&ŒÛ5\ÜpqÃÅ.\Üpqㆋ.n¸¸qÃÅ-.aÂ’ K&L.\ÞpÙÇþ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üòãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇß¾qÝ4Ⱥ ¢…¸däºyëæÍ[·qݼu7KX¹[¹¼yóæÍ·nãºyëÖm\2]ãºÍòæm\·qÞ¼yóæÍ®[ÜpqÃÅ .n¸pq»õ .\þÜpá↋.n¸¸áÂ% 7\¸¸á↋۵d¸’%&LX2aÂp KÆ 7\Üpá↋7\ܸáâÆ .\¹áâ†+Y2a¸„ – W²m`öñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøþñÛ7Ž›YD´Çm\.a¹páâfªÊ)nb ¨RL·\¸páÊ•ë[.\¸p};%åÐ,)_p©ªBF.\¸„q›u‹7n¸¸áÂÅ .n·º K†‹›0n¸¸áâÆ 7€¸¸á↠—0\×’á↋7\Üp †+.a¸®%Õ‹7\Üpqㆋ.nÜpqÃÅ —0a¸„ ÃÅ 7\Üråò† Ì>~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãþÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~ýÆqÓ +ƒˆâ¸Ãµ 7n·ªÐ S…Ê—0Q¾€é†K7n¸puõM@\ßLUѦŒ“(ad…Qõ —0nÜfÝâÆ 7\ܸqㆋۭo„ ㆠ7\ܸá↋.nÉpm–L.n¸¸áÂÅ 7\Érm–,™0a¶%ÃÅ 7\ܸá↠7\ÜpqK–,.\ÂpqÃÅ.\Þ„‰ÙÇþ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ ?~üøñãÇß¾qÝ4Ⱥ ¢…8nãpqãÆ.1NÀÌŠbÁ” _¼ &,®\Ý’mK†ËÛ¨Wv]¸°ê*·¸]K&ŒÛ-]ܸqÃÅ 7\Üpq»åMØ5þn¸¸qÃ…‹.n¸¸áÂ…‹.aÂ’%Æ .nܸqÃ…‹7n„ K–L.\¸¸qÃÅ 7\ÜpqÃ…‹7n„qÕŒ7\Ü„qËuí70úøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñã?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üþøñÛ7î›ZD´Ç­\.\¸pá↠խn·ÄÌêvÈT7\¸pmË•ë[.\ÂpqS%×50³ºqK5‹›0\¸’%›¥‹.\ÜpqÃÅ .n·¾áJ†‹.\ܸá↋7\Û¸áJ†K˜0\Âpqㆋ.n¹¸áâ†+™0\ׄ K&Œ.nÜpqÃÅ 7\ܸáâ†ë7\ܶåÂÅ .n¸r}ã&f?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñÈ?~üøñãÇ?~üøñãÇ?~üøñþãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~ûÆqÓ ë‚ˆâ’]“E‹–,Z´hÍ¢%kÖ­Y²né’5k­Y²rÝ’EKÖ¬Y³nÍ¢uk–,Z³fÉ¢E‹–,Z²rqãÆ 7n®qãÆíÖ7nܸ K†+.nÜpq»– .\Üpá–L7\ÜpáJ&l.nÜpqㆋ.aÜpá↋.n¸¸áÂ%L.n¸¸áâÆ .aÜpqÃÅ-®oÛÀìãÇþ?~üøäÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇo߸ndeÑB\®kߺqÛ†kÛ/\¸páÊ…KX®\¸rå•+W.\¸ráÊ•+®\ÂráÚ† —0\ܶqëÆ­Û5\¸ru›5K·\ܸÝꆋþ.a„]ㆠ7\Ép ãÆ ·dׄ ÃÅ 7aÂp%ㆠ7n¸rÃ%,Ù5nÜpqÃÅ 7\„%Æ 7nÜpáâ&,Ù5n¸¸qË…ë[.1úøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~þüøõ×Mƒ¬ "ZˆÃu«Ê1cN•Jej•ªT´vÉš¥KÖ­\³ráÂ6ëׯY³nÑ’5K•*U©R¥*Ū§0a¾ìòV*Œ0«|!3& 7n·¾qÛ–L®d¸áâ†K˜0a¸¸áÂÅ-™0aÉ’ ãv-™°d׸á↠7\Ü’ ㆋ.n¸pqã†+.aÉpá↠7n¸’ K† ×6n¸ruãf?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøþñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ¿~ãºi•AD qÉfE™QÆT.€¬ºâ¶í¹Y»ÄcÕ«måHRF.®r³dÝ“Ek\ª[ÜLyc• J•C§ÄÚRF $1¦ÈTá†ëV7\¸p K†K.n¸¸%–L.n¸¸á†K˜0\Â’ Ã%L.n¸¸qÃÅ W2a¸¸á↋7n¸páÚ†+7n¸¸qÃ…‹[2aÜpáâÆ-®nÛÀìãþÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ@~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãǯß8nd]ÑB·YT ˆI…+U7Sß„"7K•7o¬¸ýKuË©QÜʱºUNÖ®²dKuk›)o©TIùrÊT·\ºhu»†‹Û¬YܸÝúÆþ.n¸„áÂ%,™0\Üpqã†+™0a¶á↋.n¸’ »Æ 7n¸pá†K®dÉpmÃÅ .n¸¸]ÃÅ ·dÜp%– —0n¸¸åÂõ›˜}üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?þ~üøí÷mƒ¬ "Zˆã6‹ 1¬r™òvŠ®SäfÉúæ·r¬n™#Åé9V·ÊÍRõO–,q¬ná:å•*(UN™ò¶­›·mÜpuë–L·[ݸá↋[2aÉp Æ 7\¸¸ ö+.\¸¸á↋›°_ÂpqÃÅ[2\¸„ & .\Üpqㆋ.nÜpqㆠ7\Âp%»Æ ·\¸º%³?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñã?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üþøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ¿}ã¾iuAD q¸f]"Æ.VÞLuÛVªœ.Yá¼¥úF.®r¤8ûÇ ×¿Y²îÉš5.Õ-n¦À±R¥J)Sݸ•buè™Tªnqãvë7\Û¸ Ã%LØ5aÉpqKÆ.n׸á↠7\¸¸]&LX2\Üpqõ-Y2\ɸá↠7n¸¸á↋.n¸¶á¸ —0aÂpáÂÅ-®o¸ÄìþãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñã·o\7 ²2ˆh!.Ù-*UÀ1U*Õ)UªXÍ’%kÖ-Yº„ÍÊ•,Û¬_¸féº%KÖ-Uªd±JµªTª1c¾|©âŠ[7VdÈ|!óåË­dÛnuÃ…þ+ÙµdÂ’ K†KX²k¸pÄÅ 7\Üpqã– ×6\Ü„%û%Œ.n¸’qvM˜0\Üpqㆋ7\ÜpqÃÅ 7\¸„%K&,™°mܸåÂÕ ˜~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇþ?~üú•ã¦AÖ/Äåâ–l[.\¹pÝÊ•+®[Ânݺ…ëÖ­\·nåºuëÖ­[·æÊu+W®[¹rå•+W®mÂpmË%L×­TºRÍšu‹·[Ý’ ㆠ®m¸„%Æ-™°m¸¸ ㆋ7\ÛpáJ†+®mÂ’ õ .nɸáÂ…‹7\Ü„áâ&L®d¸¸qÃ%L˜0n¸pmÃ… ×¶[¹ºå¢uïÞ½{ùòÝËw/ß½{ùòÝË—ïÞ=|ùòåËwïÞ½{ùòÝ»‡ïÞ½{ùòå»—ïÞ½{ùòÝ»w/ß½{ùîåËwïÞ½{ùòÝ»—ï^¾|÷ðÝ»wïÞ=|þùîÝËwïÞ½|÷îå»—ï^¾|÷îå»wïÞ½{ùîåËw/ß½{÷îÝ»—/_¾|÷îÝ»wïÞ½{ùòåËwïÞ½{ùîå³—/_¾|÷òÝ»wï^¾{óÝË—ïÞ½{ã¸i•AD qɸqãÆm[7n߸}ãÆ-Y·nɸqëÖ­[2nÞº}ûÖ[·nß¾qëÖí·nܸ}ãÆ7nß„}ûæ-™·nݸqû–Ë7nܸqãÆM7nܸqãÆ7nܸqãÆ7nܸqãÆ7nܸqãÆ7nܸqãÆ7nܸqãÆ7nܸqãÆ7nܸqû&l›7\ã¼þyëöÍ›7oݼyóÖÍ›7oݺyóÖÍ›7oÞ¼yóæÍ›7oÞ¼yóÖ­›7oݼyëæÍ›7oÞ¼yóæÍ›·nÞ¼yóæ­›7oÞ¼yëæÍ›7oÞ¼yóæÍ›7oÞ¼}ó&Λ7oÞ¼yëæ­›7oÞ¼yóæÍ›7€Ý¼uóæÍ›7oÞ¼yëæ­›·oÞ¼yóæ­›·nÞºyëæÍ›7oß¾yëæ­›·nÞ¼yóæí›7oÞ¼uûæÍ›7 ².”@1ªŽ1bĈ†Œ1dĈ#F 2bĈCFŒ1bÄ#FŒ1bĈ!#FÌ1bȈCFŒ2bÄ#FŒ1bĈþ#F 1dĈ#F 1bȈ#FŒ2dÄ#FŒ1dĈ!#FŒ1bȈCFŒ2bȈ#FŒ2dÄ!#†Œ1dĈ!#F 1bȈCFŒ1bÄ#†Œ1bĈ#F 1bÄ€C 1bĈCFŒ1bĈ#FŒ1bÄ€#F 1`È€CF @1bĈ!#FŒ1`Ȉ#FŒ1bĈ#FŒ2bÄ!#FŒ1bĈ#FŒ1bȈCFŒ1bĈ#†Œ1dĈ#F 1bĈ#FŒ1bĈ#FŒ1bĈ#FŒ1bĈ#Fþ 1bĈ!sAV/ºýÂ% ·[·¾ÍºåmÖ­n³n%›•ëÛ¬\Üfá6 ·Y¸É–l–0\²¶á¢Å ×,n¹hqË¥‹Û­YÝnÍúvkV·[·¸ÝºÅmÖ­o³n}›•‹Û¬\ÜfáâF 7Z¸¸ÑÚ†‹7\³¸ášÅ ×,n¹fu»5ëÛ­[ÜnÝú6K×·Y·ºÍºÕMW.n³r}£…‹­\Üh ã6k[2ZÛpÑ↠à,n¹fqÃ5ëÛ­YÝnÍúvkV7]º¾éºÕmÖ­o³r}›•«Û¬\ÝfáâF W7Y¸¶Ñ–L.\³¶ášÅ ×,n¹fqË5ëÛ-þ]ÝnÍúvk·Yº¼ÍÒÕM×­o³nu›•ë­\Ûháâ6 7Z¸ÉJ†KÖ6\´¶ášÅ ׬n¹f}»5ËÛ­Yßnéò¦K×7]·¾ÍÊ%L˜°kܸqÛ†K.aޠȺ ¢…¸nÝ®yó¶*U9U´¼©’5NÕ,s©t‰+5Ë›©[ÝXåâf 7SÜpáI†‹U·\¬¾åbåMW*o³J“µ -UÞd©ò¦JÖ8VªÆ­šåmÕ¬q©nc•Ë[©[ÜLáâf 7SÜr™ê–‹“·\©¼ÍJÐÛ,Vâf©ò¶ËÔ8Yª¼©’åM•,p©hy+Ek\ª\ÞRÝò–*W7S¸þ¸Á…Ë7\¦¾åbÕíV*o³F™›µ Ü,Uãf©ò&k׸T©Æ©’5n-o©f}K5Ë[©[ÞXáâÆ W7Sܸ±êÆm 7\¦¾Ý2ÕM«o³Ry“uÊœ,Uãd©'K•9U²Æ™R5.-o¬t}cu««\Ý8áêfŠÛ6Vܶ™ê†‹•·[c¼ÝJõmV*o³Ry›µÊœ*VåvÑò¦J–8U´ºqãÆ­·dÞÈ+WÎÛYD´—*•7H¸\Áº…K7\¹nÝÚ6k›®d©p%ã¶-7nܸqãÆ®Q¸nåºõm–°\Ü„m»•L–¬oܸá¸Û5nÜpqþãÖ-•¬[Üfu»•kV.\³¸ÝÒuJ7nܸqãÆ7nܸ]3•+W®\ßfuÆ-·\ÝTÉêÆ[2nܶqã¶7o¬fÍâ6ËÛ-\³r%»%ìV7UܶqãÆ7\ܸqãÆmÖ\¸náâ6k-nܸÝâ¦J7nÜrqãÆ·mÜ’}+¥ë–0]ÞtášÅ-×­\¹f©êÆ-Ù6\ܸqã–Œ·n´RÝvK7\·nuõí·T¹¸qÛ¶·dܸ%ãÆ[©\·pÍú– ×-n·rÝÂ5K7\ÜpqãÆ›°d„uS¥Ê®Yɸ庖«›0\·fÉâÆþm7aÜrÙr"낈äÄ\ÐUàš¬Q¥È$“ª1¬d‰!ƒGÌ©Rªºá↋۶\ܸá↠Ï)1dJ­£JÌ·Sœ@‰cªÔ6\ÜpqK& W2n¸º­:UJ ™T¥F±J% Œ1¬È˜’õ .nÜpáÂ…‹·[‡L‘!c*V_Æ‘9Ä LU§¸ ㆠ.\ܸáºöU)Nd8©"à Œ*U`ÈŠ-nܸá↋.n¸¸ÝÂcJ S¬È¤Ó L)0©J±2Å ×¶m¸~ ãv ®o§N‘ƒgÕ˜Qah­C¦L+S¥tqã–‹[²m¸p ãÆþ§Rdİš%Æn`JSÊTªo¸„ ã&L˜0n¸„qƒdŠ 2·ÈЃË1cÄ”:•‹®d¸rÃ%ì.\ßT•º#†L*Y‡d‘ùöŘUbL­*÷­·[·œ¨Ê â9N¢X¸¥‹2dR•C¦Ô*2dÆ)%&Õ7\Üpáµ W2n¸p©2E†L©TbdºEæÐ©1dĈÁÅ 7\Â’ ¶í7Y¬@q:” Ï2¦n}IÆÔ¬1ªºáÂ…‹7\¸¶%ã†kU)2dJ±"sêË-0¥@sJ 7aÜpqㆋ.n¸’Éb5fÌ¡TdL­:5ëK*0þœÈˆ‘õí.n¸¸áâ†K·[©N‘!sÊÔV²r}a%&•©1c¾á– —°d„qÃÕM•)‚ $H A‚ñ±þ`Á‚ ,X° A‚ $H°`Á‚ ,X`Á‚ \° Á‚ ,X°`A‚ ,X`Á‚ ,X°`Á‚ $X`Á‚ ,@àê߸rÝÀÈR%‹Öª\Md]ÑBÜ5nÜp}ÛÅ A 4hÐBƒ @hР„ 4pР„ 4hÐÀAƒ 4hР 4h¡Aƒ @h¡Aƒ @hÐBƒC†A‚d$FŒ12Ĉ$C† ‚dˆ#F A2É!H† 2ÄÈ#FŒA‚É$C† 1bĈ$H 1b þ$H ‚d$C† 1b $C A2ÄÈ#F† 1b ’!H† 2Ĉ#FŒ‚dˆ‘!HŒA‚É$H™â¥’!H 2É$H|4hР„ 4hÐBƒ 4€Ð A4hР„ 4€¡„ @hР„ 4€Ð „ 4pÐBƒ 4hÐB \•F˜˜RTÀˆ‰B Ь "Zˆû… —°o»4hРAƒ 4hРAƒ 0hРAƒ 4hРAƒ 4hРA 4hРAƒ 4hРAƒþ 4hРAƒ 4`ðaÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!‡ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ"S¼2dÈ!C† ‚‰ 4hЀAƒ 4hРAƒ 4hРA 4hРAƒ 4hРAƒ 4hРAƒ 4hРA 4hРAƒ 4hÐ A­m2þÈ“ê‹1Uf9q•AD q¸pmÃÕÍUƒ 4hРAƒ 4`РAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ  2dÈ!C† 2dÈ!C† 2dÈ!C† A2dÈ€C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† RdŠ—"C† 2dÈ!C€ ñþÑ Aƒ 4`Рƒ 4hРAƒ 4hРAƒ 4hЀAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hÀ Aƒ $¨5®Û8n`R‘aÅJ̬&².ˆh!W2nÛ¸ÉbРAƒ 4hРAƒ 4hРAƒ 4hРA 4hРAƒ 4hÀ Aƒ 4hРÀ 0hЀAƒ 4hРAC† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dþÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C†LñRÄÈ!C† A2d#>4hРAƒ 4hРƒ 4hÀ Aƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4`РAƒ 4hРA_Ä€æË*Uׄ¥š¥AÖ-ÄåºÆ W7W 4hÐ`ƒ 4hРAƒ 4hЀA 4hРAƒ 4hРAƒ 4hЀAƒ 4hРAƒþ 4hРAƒ 4`ðaÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dH‘)^Š 2dÈ!@ bÄGƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hЀA 4hРAƒ 4h°Aƒ 4hЀAƒ 4`À`,rÞþ¼+§Ê”*U¥f5‘•AD q¸’ ÃÅM 4hРAƒ 4hÀ A 0hРAƒ 4`РAƒ 4hРAƒ 4hРƒ 4hРAƒ 4hРAƒ  2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† )2eJ‘!C† 2Ä#FŒøþhРA 4Ø A 4hРAƒ 4hРAƒ 4hЀAƒ 4`ЀAƒ 4hРAƒ 4hРAƒ 4hРAƒ B,¨…ïß¿ÿv©še+Õ- ².ˆh!.—°d¸¾¹bРA 4hÀ Aƒ 4hРAƒ 4hРAƒ 4hРAƒ 4`ЀAƒ 4hРAƒ 4`РAƒ 0hЀÁ‡!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2þdÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C†2dÈ!C† 2dÈ!C† 2dÈ!@ŠLñRdÈ!C† AÄ#>4hРAƒ 4hРAƒ 4`ЀAƒ 4hЀAƒ 4hЀAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒµð•û÷œ,U´h¥ªåDÖ-¼áÂ… ×·] 4hРAƒ 4hРAƒ 4hÀ Aƒ 4hÀ Aƒ 0hРAƒ 4hЀAƒ 4`ЀAþƒ 4hРAƒ 0€0dÈ!C† 2dÈ!CŒA‚’!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C2d$H† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dH‘)^Š 2dÈ!C†‚ÄGƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРA 4`ЀAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4h°€>rþÿþý“¥J–,Uº4Ⱥ ¢…8\¸¶áêæjAƒ 4hРAƒ 4hРAƒ 4hÀ Aƒ 4hРƒ,4hРA 4hРAƒ 4hРAƒ 4hРA † 2dÈ!‡ 2dÈ FŒ2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C†IÂ(’!C† 2dÈ!C† 2dÈ!C† 2dÈ!H† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† )2eJ‘!C† 2dÈ$@þøhРAƒ 4hРÁ 4hРAƒ 4hÀ Aƒ 4hРAƒ 4hРAƒ 4hРA 8`РAƒ 4hÀ AƒкGîß?r²TÉ’¥êVYD´‡‹.\Ýv1hРA 0hЀŠ 4hРAƒ 4hРA€ 4hÀàÜ 4`À Aƒ 4hРAƒ 4hÀ Aƒ 4hЀÁ‡"C† 2d’!C†‘£È C† RdH%‹| 2d‘!EŠ2dÈ!C† ‚dÈ!C† 2dÈŒ(ù@þ2dÈ!C† 2dÈ!C† 2dÈ!C† 2È!C† 2É!C† 2dÈ!C† 2dÈ!C† 2dÈ!E¦x)„È!C† 1Ä 4hРAƒ 4¢Aƒ 4hРAƒ 4`РA 0hРAƒ 4hЀA 4hÀ A 4hЀAƒ 4hÀ A‚Z÷þ‘#÷OÀq÷îq³¥AÖ-ÄåâÆ·W hùB 0øÐŠ 0hÀ€ƒ 0hРAƒ |˜³ AƒBR,`À€ƒ 4hРþAƒ >4`Рƒ 0ø0 ’!C 1bĈ ŠA‚ #F† Q²hQ$Œ€ A‚„H—FA A‚ÄÈ$HŒ1bĈ$C AâCR%F 2É#FŒA2d$C 1bd’!F†ÈA2ÄÈ#FŒA2 $H† Abd$H 1bd$H† 2¤È/;)2d’!F I⃠4`À€AƒZR,Ñ A 4hРAƒ 0hÐ`4hРAƒ 0`РAƒ!4hbÁ- 4hЀ 4`°à>þrÿÈ•›ÅªT)V¶œÈº ¢…8\¸¸áê¶KŠT+p•râ+f! !‚„$Dˆðà„4X %Å‚ l± ƒ 6h!< >4X°Ä‚†‚dÈ!C† Aò“3 C† !2„’]¨½ëÅ ^/f”Š1‹#KI,õêÕ¬—¢ Häüè²È˜œ H|0rd –Ú$I/%@† 2dÈ$>(Iò1dIH”X 2’!C† 2dÈ•2dÈ!CŒøè-Ö3j̈ËÂéR5hŠQÊQŒY£bþ|,`Q¬:(T,hภ|¨‚„ZÌ¥Xà Aƒ 0øðk ê€k Ä‚ 0XÀ AƒÜq¡Aƒ 4hРAƒ hÙ#GŽÜ¿Yåþýgˉ¬ "ZˆÃÅM˜°o®jñãÇ?~ùå«U ?[¯òñãg ?W ¤‡ Ö¯_ýR,XÀB_ŠpQ±€Aˆuê,hРAƒ >$¸S'„ ¶€hÐàƒF½ä2dÈ#FtT‚6d r† ADŽ;hÏ¢AsíÝ»iÏžcÖ˳hΞÁSô#É$F’bÅë‰aÍ~þA2Ę’ H~4Š×È’!C† ‚Ä%I>Œ ")Ic@’(ñd$€ 1âcX±!I€2d±¨ ›6­š³ab@a‚6­—%c8†9kT¬—*Z}C÷j ‹€3— Aƒµ°,h€ ¿ R€XРAƒ еJ!A~XìÔYÀ€Á‰(R,`РA€wj`РAƒ 4hРÁ‚ZøÈý#Wî–,S¬dáj"낈Þpq»†ë,püøñãÇ?~øÐñã÷k\?~üÐéã‡K‚üÀ½Â×_Š Tð»“àÃ.)0€Ï/ 4hþРAvj%hÐ`Á– ´4²šœ F† 1bÄLцDÒ!C‚È™ Ú;hÓ Aƒ6 ´iЦ={í´w‹~$éU‰Y4xÆ| 2ì] F‚ “3dÈ:ñý02dÈ!Cø Äȇ#?z1’Ã̈œFJ˜1âÑE$H‚ôz·¨˜%C† A¢£¼jϦM{‡L6gÐàõêµLN1xØ5óÑ ?~üúýR± Àà¾-€Ð`A¾Z>$hÅïŽVu 0hРAƒ}¯|HP‡ß;ü°,ø€‡­2'>0€àŽ2 4hРAƒ 4X@ þ9r÷ÊÝòÆÛ·[3veÑB.aÂpuƒõ?~üøñãÇ?~üøñãÇ?~ýø½B°…_?}üøñc±` ~¶pA0ç ØAƒ 0hÀ¸  @…åÖIzM“4dÈ!C† ñQ)9Š|HB‚I9ÓÜMƒ6mÚ´gÓÞ={ ´iÓžMƒ¯WEÓŠ½ƒ6ÍX$?zÅ‹5 ^ÆäùÑ(%H† 2d”†ù0b$H%hÕÞ)QR©W`*,¸g+Á‡¿ø«õëÎ 4H±ÏU‚ æð3w‡_*j-PöKßÜᧃ 4hРƒ ^á+÷ï_¹[â¾yë–Kƒ¬ "ZˆË…+™°n«ÀñãÇ?~üøñãÇ¿~üøñãǯ?`Pñë×_?~¨,`Á/_[´ð›Ã Á[¿ð,€Ð AƒÜQvg‹ ­\5ز I5hÅä12dˆ‘E8zAó±ÈY’^r~"gÚ4wϦ=ƒM4hϦM‹6íÙ´iÏÞ1B)Þ;hÏÞESpH^ðþ¨92¤19@‚(‚÷Œ!C† 2Ä%b>Ù Þ³iräs Þ"KðªYbä£W¼gѨ9Cd½à={ö4jÚ®Q{6ÍY/xÕ¢Mƒöì:üúñãǬ üâgUŠù€!€° ¿~µ~ÕùµïîîýZ!A~ý¾ñ«£¢U-;èøñCõ„;ýêpY€„ 4hbA-|äÈý+wKÖ©R²®i•AD o¸¸qÃÕ 8~ýøñãÇ?~üøñãÇ?~üøñã‡OK+~ýøñãÇ„,øñû…N…~åT€@X9 0þhРA‚:üðýâ·å8°q6-ž$F† hÄ’^Ð|0Чh±$C€tö Ú3hЦA› ´iÓ¦¹› ´iÍ$½ƒ6 Ú´iÓ(ùðá ^4x’sf©˜’EÓàIâadÈ!Cð DÌ$>*Á‹­W›hОM³Ô+ž3bÏrôŠmZ4xÃä⣼gÓ =ƒFíÛ5xÏžEs6 Ú»iОÁ£T‡?~üøñã§bÁ‚_üÌ¡›3 Ÿ­,(ã×oŸ>XèøXâW¾|) $ØÂ¯_?~wÌ{UŽ_?~µZýzU‡ß¯Wê`IРAƒ $xeþÜ¿äfýˇ¯Ü­².ˆh!.\¸º­Ç?~üøñãÇ?~üøñãÇ?~üîÙâÇ?~üøäw' ~üúõ«‹:t° €³Åï0h`¿~üø½ºÃïÄ/Iª=ƒÇè‡#F€B)ž¢XÔz1ƒ§ÈÇFÓ¦A›6mÚ4hЦA›íÙ4hî MƒöŽÙ±wЦA{6í49>zÅ‹X#fð˜A‹ÖëÙ´f“’ 2dÈ ½à- ‚d±xÏÞmÚ»iÏÞMsF,šœJð¢A›6Y±JC€ô‚Í´iШi»FíÙ;hОAƒ&mþ´wÐjñãÇ¿~ü¶,Xð‹_?~ภ«…êÕœ}üøñã·¯¿9 >èãׯՂwøñãÇ\9~ÊÐñãÇ_?~úÀñãwÏŽ>s @,hРAƒ´ð‘#÷¯Ü­YªªšuM­ "ZˆÃå­Û7o®¾ñãÇ?~üøñãÇ?~üøñãÇ¿~øøñãÇ¿~ü\ Â?~üjñãÇO_¾~µúñƒ• AÌá×?p¨øýÊת‘³gï|ýòHb”*Á£ÄìÝ´wшIRb 4hРAƒ6m4hÓ A{& ´iРAƒöìÙ´iÓ¦M›Ö(G¯xþÑà£TìÝ3hïªA›6 žœ C† B¤Xt¨4hÐ`A-|äþý+7K­Yºn5‘uAD q³R¥b•Ë7~ýøñãÇ?~üøñãÇ?~üøñãÇ?~ýøñãÇ>+øñãǯß+~üøñãÇï?~å þÜaРA‚2üúñã×?~üø1bö.Ú;9I(Ñ R,ž³wÌ A›6íÝ;x,Á{ 4hÓ Mƒ š;hî¦Aƒ6 ´iЦ½‹& Ú3hï˜)1ö´ẅÁ{ö,Ú;hϢœ$G$H†,{÷¬’$ÎÞAƒ Þ3hÓž={íÙ»gîÜAƒ 4hï EÃÄ Þ3hÐÜA›öí5€ÏžA›m4hРAƒÇ?~ýøõãׯpüúñã×?~üúñãÇ?~üøŽ?~ýö½ÂÇ?~üøñãǯ?~üøñã×?~üúñãǪ , þ…¹äf»÷ÏÛ­².ˆxAL)Y©¸}ËÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñã‡?~üøñûÅ?~üøñãǯ_ su|HàŠ_?~üøñãÇ?gѦI£fÌX¼j̦M›&mš4iÓ¦I“’%xÒ¦I“&MÚ4iÓ¦M“&MÚ´iÔ¤M“6mš´iÓ¦M›&mÚ4gѦI›Fí1jÓ¦I“6mÚ4j˜(Ó±c@ÇàQ{wŒÙ»iÓ¤I“&Mš´iÒ¦M“6Mš4iÓ I“6š´iÓ¦I“6Mš´iÔ¨y»FÍ4iÒ¤M›6MþÚ4iñøñãÇ?~üøñÓÇ?~üøñãÇ?~üøñãÇ¿~ýøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñë—bAƒ¯ð‘#÷Ü,U©R©ÊÕDV-Ø!Çß=oõêÕ«W¯^½zõêÕ«W¯^½zõêÕ«W¯^½zõêÕ«W¯^½zõêù«W¯^½zõêÕ«W¯^½zõêÕ7¯Þµn©¶ù«W¯^½zõêÕ³×nݺuíÖ­[·®ÝºuëÖ­[·nݺuëÖY[¶nݺuëÖ­[·àºuëÖ­[·nݺuëÖ­[×nݺuëÖ­[·®ÝºþuëÖµS·nݺuëÖ­[·n]²eëf©Š)Ü:uëÚµ[·nݺuëÖ­[×n]»uëÖ­[·nݺuëÖ­[·nݺvëÖ­[·n];lØÚ­[·nݺuëÖ­[·n]½zõêÕ«W¯^½zõêÕ«W¯^½zõêÕ«W¯^½zõêÕ«W¯^½zõêÕ«W¯^½zõêÕ«W¯^½zõêÕ«W¯^½zõêÕ«W¯^={þR…¢¾rÿÈ‘“µÍ›·\·4ÈÂ`¢Å81åøñ»çÞ¼yóæÍ›7oÞrÿþ‘Û•kœ·[³œÈÊ ¢…¸\¸páê¶ê?~üøñãÇ?~üøñãÇ?~üøñã×?~üøñãÇÏÖüøñÇî?~ýøñãǯ¿Wþ ¶$ø!A~üøñCW‹?~ü1{-ž$"Œù æŒÙ»wÄžMƒ6 Z/–â=› ´iРMƒæZ´iÓ¦A›6 Ú4hÓ¦¹ƒ Ú3x’rô‚÷ Ú;fÆàE‹6 ´wМuQ"gÈ!@˜M{6MŽgcVŒÚ4hРMƒm´i§M› Ú4hÓžSâlÚ3hÐÜA£Æí$¨Ã¯¿~\îðÛÇ#fÓÞ 32d ÌQ‚WMÒ4hÑàÅÚDÎ;hϦMƒ 4wÓ Mƒmš;hÓ Mƒ-´iÓ ={Ç̈€Ã¦=ƒöÎX±wÐâ1#6íYŒ 2d@”â-’¯±i”~‘m´iϦM›6 Ú4hРAƒö.š4wÐâUêõ.š»iÏàòÃþ¼gОY*¯Y/9•àsfɇ‘!C† ùÑ ž%FT›íÝ1:ÕÞE‹6mÚ´iï–áèÚ3ẅÅb ³iÓžMƒÚ·kÔ ½ƒ& Ú4hÓ¢Aƒç«¿~üøñãÇoË‚¿øõã—¯º|uj¹âÇ?~µôñc‘@ ¿~üÐai°…_?~üøñã×?~üøõ»W®?|°Àñãwç* 4Hð ¹ÿþí:Å*Õ¨YNd]ÑÂ.a„u[Ž?~üøñãÇ?~üøñãÇ?~üøõk€Š_?~üøõëÇ üøñC‡`K¿,,øÆoK‚þ 4hÐ A~üîÕù`çW«W‘|ørQ#F† ¢£R€Ä‚ ^¯$Ħ1 ¢#$½KdˆfÏžA«”ä±hñˆU‚÷Ì£ ½àM‹ön˜%#r†©/š»hÓ Qûv 4hï¦M{íÙ´hð(Íá×?~üî0h°à?}®^!Èg ˆûøõëwïŽ9~ €øÅŸ­ êôëÇ?~¿Æ½â§8XX^Ùá×ïD~øP°Ð’ Aƒ þjå+Gî9U²¶iS–WD´‡‹[2\Ý`}ãÇ?~üøñãÇ?~üøñãÇ?~è âÇ?~üX0XÀ‚¿|XÌA‡ AƒàøIhРƒ $¨Ãï:î´Ò‚¥^ðÞIòadÈ$H|Äzg¤z«4-If±,IÊѨ%I?‚ô‚G,Z$°Å;Z°€XÀàà |¯|HP§\¿{¿îÀbQk ,À4ø€À¿2¶¤€Ð Aƒ |HP _¹ÿÈ­sO]Md]ÑB.n¸’u[Ž_?~üøñã·O0~üøõã‡._¿~üø½Bbß+~ùÊmYˆ~ß@0X€…Å‚ Ô²“ Aþƒ 4h¸ $˜ƒ…—AbIb¤È!C†á©:Œ’2dH9ð†9{ ´iÓÞM“o˜1g̦ cQ‹œ)‘ô®˜¢!A1óÉb‚ Ò¨˜œ H† 2dˆ”ã1dˆ^ÄE“¤‘$#@Œ$‘ÓH޽â5²ôLN$CŒøèoZ4fÐÞ[¥š;xÄ*ëíݱeÅrœÈת•²_®„,hœ¹!4øU‡„ÀôÝy•Ä– 0` ï êüB÷ÊV)^-h° EØá7Á– 4hЀAƒþ dá#÷¹UL˜0©`k†¬ "Zˆ»† ®n¯îôã·?~ü^髬_¿}üìŒç 8 X¼šÃOÙ 0X€Î‚ ´¤XÐ ‚;u4`РAƒà—Bƒ*°,`ðŒºì2dÈ#>(õ¢HŽ!C† Ò†±^Ñž=£6í³h§13†©±xÆœÅSdH—hCºÀ£ôIFΈdØ‘!H|,êdÈ!C† 1‚Ä%_> áQ‰‘hr€2ÄÈ!A’ $–4%Œ,ù@2d’ •¦‹Öë],ñ¡Aƒ öÁJðaAŠW\jÍi° –4hÐB‚;ùR,ñƒ 4hÐ`A-|äþý»gj©OOdA‘•AD q¿pmÃÕ͈~ýìèã×__wNèû…ªtæNÀª…àCƒ `©ØÒ Aƒ îÙIЀˆ @@©‚ 4hРA€vÌ%hЀ , @ B„ˆ¢$Dˆ 2ĈJ½ A2dÈ!C€téU £Jï¨A“+Ú;c±-’ô¬%h]€ù1i‰"bHˆ ñþÁˆX!CˆH’ĈF”|2dÈ!C†à ÄÈ’!D)AÂL $C† 2d#F~Tª´ƒ‘¤ F† 2„Q³^ņ1cvI §FŒÞÉ¡SìH/x±ŒóÁàĵê,€Ð Apà4`b ˆ ´J±€Aƒ 4hÐ8 0ëà 4hÀ€Aƒ 4@p§Uƒ 4`РAƒ $¨…Ü¿ånÙ²l7 ²2ˆh!W2\ɺ­Jñ –|üøñc¡ À÷Za¹³à޹u^!hÀ Á‚-R0hЀÁtX4`À€Aƒ ¤Á þAƒ 0‘ÀŽ«!0Ñ€C )2 ’!FˆùQ©×"HŒ1b %”&QˆY1xÆ0IrFiÒ9F†1’C©È!C† A‚d$DYò1dFJ€!Â(V%C 12Ä’”$A‚„ˆ$$J†1bdÈ"F AbÉ^’€tA‚I#C†aÔ«×¢Ir]‰ÒFR1E@-±ôLޤ^>0`°`KŠ 4HðÍÜ‚ >lYРAƒ 4hРA €°Å Aƒ ^P‚Aƒ 0`À€A PÕIÐ`ƒ 0hРAƒþ jå#÷ï߸räÊ÷«‰¬ "ZˆÃ%L®nªVüúrO.~®H‰p"_ HÈA$HpB‚‚$pðÈAi 8xààƒ8ˆ,É!çÈ)Qrtv]þåà$Ç $Hðà j•QP‚„eHð@‚„Hx álIxðàÁ )@x á„$Hˆð@<]Hð@ƒ"Dx Á¬|äÈý7n[.\³j9‘•AD qׄ%ÃÕm- €p°K RÀZЀ @áÀAƒ4€ÐÀA`Ah¡A 4h 8`à A 4pРƒ ! D†B$ˆ9A†2d!D‚a4dH%½ä(i¤’œ!@†òCŽ’ @†B„ C€þI²è A† „ C€Bd C€d!C‚(©äc!@€!2È!>Éè @€ d A† dŠtñ2„ C€ñáÀƒ 8hàB‚Z'4hAƒ4hà A 4pÀ,4p ƒ8hà ƒ4H K4pРAƒ $x…9rãÆqûæíÖ- ²2ˆhá —°d¸º¹bÀ  4`РA 4hЀA 4hЀ 4h°àà 4hРAƒ 4hÐþ Aƒ 4hРƒ 4hЀÁ‡!H† ‚dÈ!C ‚Ĉ‘!C† A2d’!H† ‚  @†2dÈ!F† 2dÈ!C† 2dÈ!HŒ‚É!C† 2dÈ#C† 2ÄÈ!C† ‚dÈ!F”2dÈ#CŒ2dHEr€ A‚dÈ!C† 2ÄÈ!FŠX™R$I’!C† bdÈ$>0Á ƒ 0hP§Aƒ ,hРAƒ 4hЀƒ @8Á Aƒ 4hРAƒ 4hРA T`YРAƒ 4hЀAþƒ²ð‘ûw¯Ü¸m¦hå²åDÖ-Äá& 7Y 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4øÀ Aƒ 4hРAƒ 4hРAƒ 4hРAƒ 01dÈ!C† 2dÈ!C2dÈ!C† 2dÈ!C† 2É!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2É!C† 2dÈ!C† 2dÈ!C†A‚ $H† 2dÈ!C† 2dH‘)^Š2dÈ!þC† ‚ă 4hРA >4hРAƒ 0hРƒ 4hРAƒ 4hРAƒ 4`РAƒ 4hÐ A ! 4hРAƒ 4€° >rÿîÇMÕ­[ºœìº ¢…¸\É„áòæŠAƒ 4hРAƒ 4hРAƒ 4hÀ Aƒ 4hРA4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ >2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C†þ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ#H€2dÈ!C† 2dÈ!C† )2ÅK‘!C† 2dÈ!Cø`РAƒ 4hРAƒ 4hРAƒ 4hЀAƒ 4hÐÀAƒ 4hРƒ 4hРAƒ 4h° Aƒ 4hÀ Aƒ ¼ÂGîß¿rã¾}ëvë– €».ˆhá —°d¸ºíbРA 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hþРAƒ 4hРAƒ 4`Ѐ„!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2d$H€ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!E¦x)bdÈ!C† 2d 4hРAƒ 4hРAƒ 8hРƒ 4hРAƒ 4hРÀ 4hРAƒ 4hРAƒ4hРAƒ 4hРþAƒµò•û÷oܸm·pͪåDÖ-ÄᆠW·] 4hРAƒ 4hРA 4hРA 4hРAƒ 4hÀ Aƒ 4hРA 4hРA 4hРAƒ 0ø0dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† AÄ’!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† b¤È/DŒ 2àþ!C† ‚ÄGƒ 4hРAƒ 4hÀ ƒ 4hРA 4hÀ Aƒ 4hРAƒ 4hЀA 0hРAƒ 4hÀ ƒ 0€ >räþ•ã6‹Ö,Y¿4ÈÊ ¢…¸\„ ãæªAƒ 4hРAƒ 4hРA 4hРAƒ 4hРA 4hРA 0hРA 4hРAƒ 4hРA!ˆ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!Cþ† 2dÈ!C† 2dÈ!C† 2dÈ!C† pÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† )2ÅK#C† 2dÈ#FøhРAƒ 4`РAƒ 4`РAƒ 4hРƒ 4hРAƒ4hРAƒ 4hРAƒ 4hРAƒ 4hРA ÔÂGŽÜ¿r¸¸qãÆÍ›YD´‡ W2aÝT1hРAƒ 4hà ƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hÀ ƒ 4þhРAƒ4hРAƒ 4hÐÂ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 8dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!E¨L)bdÈ!C† 2Ä 4hÀ Aƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hÐÀAƒ 4`ЀAƒ 4hРAƒ 4hÐþB‚ZöÈýûGN7aÜpuÓ ë‚ˆâ®qÃ…ë›+ 4hРAƒ 4`ЀAƒ 4hà A 4hРAƒ 4hРAƒ 4`РAƒ 4hÀ A lРAƒ 4h€dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2¤È/E† 2dÈþ!C† Aâ£Aƒ 4hÀ ƒ 4hРAƒ 4hÀ Aƒ 4hРAƒ 4pРAƒ 0hРAƒ 4hРƒ 4hРAƒ 4`P 9rÿÊáJ&L®od]ÑBÜ/n¸pu“Å ƒ 4`РAƒ 6hЀA 4hРAƒ 8hРAƒ 4hРAƒ 4`ЀA 4hРAƒ 8hРAƒ!ˆ12dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!þC† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C†™â¥È!C† 2dÈ H|4hРAƒ 4hРAƒ 4hРA 4hРAƒ 0hРA 4hРAƒ4hРAƒ 4hРAƒ4hРAƒ ÐÂGîß¿r¸„ Ã…«›YD´‡ .\Ýv5hРAƒ 8hÀ Aƒ 4hРAƒ 4hРAƒ 4hÐÀA 4hÀ Aƒ þ4hРAƒ 4hРAƒ 4hÐàÃ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ"S¦2dÈ!C A‰ 4hРƒ 4hРA€ 4hРAƒ 4hÐÀAƒ 4hÀ Aƒ 4`РAƒ 4hРƒ 4hРAƒ 4hþРÁ‚WøÊýûWn[2aÉpqÓ ‹ƒˆâpm†ë›+ 4hРAƒ 4hРAƒ 4`РAƒ 0hРAƒ 4hРA 4hРAƒ 4`РAƒ 0hРAƒ @bdÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÀ!C† 2dÈ!C† b¤È/E† 2dþÈ H€ Aâ£Aƒ 4hРAƒ 8`À Aƒ 4`ÐÀAƒ 4`РA 4hРAƒ 4hРAƒ 4hРAƒ 4`ЀAƒ 4HP ¹ÿÊáÂ%ì®ndeÑB®dÜpu“Å Aƒ 4hЀAƒ 4hРƒ 4hРA 4hРAƒ 0hЀAƒ 4hРƒ 4hРA 4hРÁC† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈþ!C† 2à!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C€ ™â¥ˆ#C†   C|0hРƒ 4hРAƒ 4hРƒ 4hРƒ 4hРAƒ 4`РAƒ 4hРA 4hРAƒ 4hЀA jáû‡î¹mÂp%ÖMƒ¬ "ZˆÃ%ìš°o®4hРAƒ 4hЀAƒ 4hРAƒ 4`РAƒ 4hРAƒ 4hЀAƒ þ4hà Aƒ 4`РAƒ 4hÐ`È!C† 2dÈ!C† pÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ"S¼1dÈ!C‚  4`РAƒ 0hРA 0hРAƒ 4hРAƒ 4hЀAƒ 4hРAƒ 4hРAƒ 0hРAƒ4þhÐ -|åþý+—KX2\¸ºiÅAD q¹’ ÃÕM 4hРAƒ 4hРA 4hЀA 4hРAƒ 4Ø€Aƒ 4hРA 4hРƒ 4hРAƒ |2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† RdŠ—"FŒ 2þd$FŒ ñÑ Aƒ 4hРƒ 4hРAƒ 4hРAƒ 8hÀ Aƒ 4pЀƒ 4hРAƒ 4hРƒ 4hРAƒ ,¨…¹å¶%&ìÚ7 ².ÑB\®dÂpqsÅ Aƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hÀÀAƒ 4hРA 4hРAƒ 4hРAƒ 4hРÁ‚E† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈþ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!CŠL™RdÈ!C† 1bˆ$>4hÐÀAƒ0hРAƒ 4`РAƒ 4pÀ Aƒ 4hÀ Aƒ 6hРAƒ 4hРAƒ 8hÀ Aƒ 4hРAƒ ^á#÷\9\„áÂõMƒ¬ "ZxÃ%L®n»4hРƒ 4hРAƒ 4hЀA 4hРAƒ 4hРAƒ 4hРAƒþ 4`РAƒ 0hРAƒ 4`ðaÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2ÄH‘)^Š2dÈ!‡ 2dˆ 4hРAƒ 4hРAƒ 4hРAƒ 0hРAƒ 4hà Aƒ 4`РAƒ 4hРA 4hРAƒ þ4`Ð`A-|äÈý+w 7\¸¾i•AD q¸p ÃÕmׂ 0hРAƒ 4hРA 4hРƒ 4hРAƒ 4hРAƒ 4`РAƒ 4hРAƒ 4hРAƒ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ€C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÊ”"F† þ2dÈ!C† ñÁ€Aƒ 0hÀ Aƒ 4`ЀAƒ 4hЀAƒ4hРAƒ 4hРAƒ 4hЀAƒ 4`РAƒ 0hРAƒ $¨…¹å„áÚÆ 7 ².ˆh!7\¸¾¹bРAƒ 4`РAƒ 4hРA 4hРƒ 4`РAƒ 4hРAƒ 4pРAƒ 4hÀ Aƒ 4hЀÁ‡!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÀ!C† 2dÈ!C† 2dþÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!CŠLñR’!C† 2dÈ$B4hÀ Aƒ 4hРAƒ0hÀ Aƒ 4hРAƒ 4hÀ ƒ 4hРAƒ 4hРAƒ 4hРAƒ 8hРAƒ¯ð‘û÷¯œ0a¸’áê¦-ÄåâÆ W7W 4hРAƒ 4hРAƒ 4hРAƒ 0hРAƒ 4hРAƒ 4pРAƒþ 4hРAƒ4hРƒ 4hÐ`È!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† dH‘)^Š2dÈ!C† ‚ă 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4`РAƒ 4hРAƒ 4hРAƒ þ4h° ¾rÿþ•– —0\Ý4Ⱥ ¢…¸kÜpáú&‹Aƒ 4hРƒ 4h°Aƒ 4hРAƒ 8hРAƒ 4hЀA 4hРAƒ 4hРAƒ 4hРAƒ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† )2ÅK#@†þAdÈ!CøXРAƒ 4hРAƒ 4hРAƒ 4hРA 4hРAƒ 4`РA 4hРAƒ 4hРAƒ 4Ø Aƒ $x…¯Ü¿å¶%&LX7 ²2ˆh!î7\¸º¹bРAƒ 0hРAƒ 4hÀ Aƒ 4hРAƒ 8hРAƒ 4hРAƒ 4hРAƒ 4hРƒ 4hРAˆ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2þdÈ!C€ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!E¦x)bĈ#C 2d 4hРAƒ 4hРAƒ lРAƒ 4hРAƒ4`РAƒ 4hÀ Aƒ 4hРA 4hРAƒ 4`РAƒ´ð‘û÷oœ0n¸„áú¶AÖ-Äáâ†KX7W @hРAƒ 4hÐÀAƒ 4hРAƒ 0hÀ Aƒ 4hÀ Aƒ 4hРAþƒ 4hРAƒ 4hРAƒ 4€0dÈ!C† 2dÈ!@† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2I›!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C2dÈ!C† 2ÄH‘)^Š12dÈ!C†1‚ÄGƒ 4hРAƒ 4hЀAƒ 4hРAƒ 0hРAƒ 4hРƒ 0hРAƒ 4hРA 4pРAƒþ 4h >rÿÈ‘v —0\ß4ÈÊ ¢…8\Üp ã&«ƒ 4hРAƒ T4hРAƒ 4hà ƒ 4hРAƒ 4hРA0`ЀAƒ 4hÐÀ 4hРA€ 2dÈ C† D‰ C† 2dÈ!C‚ 2dÈ!C† AdÈ!C† 2dÈ!C† 2dÈ!C€$adÈ!‡ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C‚ 2dÈ!C† 2dÈ!C† )2ÅËŽ$I€þ 2dÈ!HøhРAƒ 4hР 4hРAƒ 4hРAƒ 4XBK‚ 4hЀAƒ 4hРAƒ 4`À Aƒ 0hÀ Aƒ ÔÂGîß¿q¸’ K†«›YD´‡‹7\Ü\1h âƒ 4`РÁ 4`À Aƒ 4`À A 0hðaÎ 4`РAƒ 0`À€A ,Xñƒ 0hÀÂ"H 2dÈ!Hˆ(RĈ€C† 2dHEm€ IdÈ!C4B‚dÈ#C1bdÈ#H† þ2dÈ Š$ý2dÈ!C† 2dˆ#C† A2dÈ!C† A2„’!C† 2 ’!C† ‚ˆ"%D† 2dÈ!C† 12d"E¦xÙѨÑ#F† 12dˆ‘ 4hÀ€A $Ð’bA 4hРA 0`Р @lYРAƒ 4hРƒ 0`À€Aˆv´$hÀ Aƒ 4`РÁ‚ZùÈ‘ûWN.nÂpqÓ +ƒˆâpqÃ…«›¬ ¶8pp"@€Â°0pàÀ@hà‚ƒ$lY¡@4pà þ 8pàÀA ¶œH¡„ 8€„‘ @ˆB$ÈŒé„H @ˆøãH‘"Œ’ !B䇒hH~!D€!$ Cˆ!‚ƒ%C€ !B Aˆ‘ @ˆ ¢(I D~0B„"Aˆ 2$‘ @€ø¨¤ D€!B$ˆ%A€ Òf•):äÈñA€ÂÂ8€à „YV$pÁÁ@€‚4pàÀÁ‰- @hàÀA8pàÀ4€€U@pРþ @H@ _9täÊ ã†K®nd]Ñ ¸\Üpqû¶KÁŠT+N•Y±âAò­ðà„2 0`Ñ — 4Á 4H V‚ ¤Á A)>0`РAƒ $°c'Aƒ æ€XÀàC$H†1b‰‘!H|ôbäcÈ!Š AB¤ 1b<UºÔˈ’âIb„H#I½$É2dÈ$HþA‚ÄHFÌ€1Ä‘’!FŒ I2 ’!CŒA‚ä%I? "éÈ#HŒ A‚ #C AâcX5"DŠ ‚ ÃbiTiQ¯6S¼iôlˆF>ù„‘ °¨XÐàC B$g'Aæ,hЀAƒ9,B0`РA >kÀ Á-s4Á€ƒ 4hРAƒ‘ì$hÀ€Aƒ 4hРA‚WöÈýûW®mÉ„uÓ +ƒˆâpá↋-¶øéã×,`áwÁ-[~Õiu'AuÔÑ’Bƒ °|ÁÂ.)4h°þ` Š 4hЀ„v\%€Ð`Á @B¤È!@† dˆ^Ã|2DÒ!C€(&­‹1gÑœIšÔ¥×»aJ~èXTÉ’¤E?† 12ÄIG€ñÑ‹Y!C€SdÈ$”ä2dÈ!CŒà äȇ$@L$È!C† 2È"C†øƬH£!Iº)2ÄÇ0LH,£ÔìÒ•)mESbD^ÎpôRâD-,ÔÁ¢„à\%hÀàà ,Øë– 4hРÁ[ 4@pçW 0ø¡Á‚ 4øàN- 4`РAþƒ 4X@ ¹ÿÊ ã†ëÚ¯od]ñBœ0n¸¸usõ«?~üøõƒ…NŇsüì øëW¿_¿P%hà‹;¶”±XÐ` ~Z4X€EÅ‚ l9± ƒ 4h°À8 ,¨bAƒ;ºt2dÈ!C(ÑQ)Ú!C€H2d9Ôœe‚çî]´aÒõ¢6Ž$9Ž2cÖ‹˜ I,)ÁÁhZ F|sdÈ ½%2dȰFAŒ 2dÈ!>(1úaÄIF’0bdÈ!C†$I2Äâɉ%§Q# C†ð0V©M´hÅ–a’⥑¤iþÆ$1Êaì™%btr€èwÏÎW[X$h°à›¹ |(³…AƒsÊµš³€  0€ð ƒ êÜCÀƒxZ-HÁ€Aƒ ÜÉbAƒ 4hРƒ já#GîÞ8aÜ’ ÖMƒ¬ "Zˆ»¶-®n«”ñëÇ?~üòµâ²_«-ýÌ•ã×_«¶ð«ÕŠ_>`[,`Á¯ êàAð¡Á-'4hРAƒ!Ø)Ç„QÝqÀàC‘b‹|2dH‘!±€ÄŠ6dˆ‘½äDλiϦAƒmµbÌܽ#F¬W¯gï¢Å£dˆ1JC(þÁ3fĈ^ñ䤗$9@†©ÖhÈ!C† ‚Ä¥J<Œ ‚INbAº£¤hHE|ò£×4JÌIRô ½˜I‚ï±hS°aêõÎÙ°^@zÅkæËXŽ;üøÕºÇ¯–Š!€— Aƒ°ê0h` ¿_®>,€ubA~ÕY!A~[¶ @€§ß/[>0hÐB‚;ü 0hРAƒ 4hÐ`Á+|äÈý+· ®d¸¾m•AD o¹p KÖÍ8~üøñãÇß¾o¯øñã®?€üøõã×–_üúéã·ß Xðû‚A‚-À@,€þ° ŽŠ 4hÀ AƒuúÙ‚ A$| R42­×!C† R„’Jφd˜ C‚È¡öŒÚ´iÐÞM{oÚ3wÐÞ½‹öìÝ3x’r(©Ö‹3hï Ò+žœ F€ë%È!ÌŠ- bdÈ!C†ø°ä È#:bI’3,ÈhÎz-Â!©‘œErpøzWì]¯Et‚ Aò£R¼hϦ9cF­ÖµLÕâ1ë¯W¯xňÅò‹?`øø¡S‘Bpà@h°]­há×¶@0`À ¸: $˜ÃO–:"ñÇåŽ;4Hp‡— 4hРþÀ 4XP _9rÿÊáµ —°nd]ÑBܯm¸pusŽ?~üøñãÇoß7~üøñãÇ?~ýø¡ªÓ?~üúñsÕ` ~ûN4H°å €3·eAƒ 4€ ?puZ¸ÃÅFªcôcÈ!C€ô2+ZE‹pô’ 9Ï ={6 Ú³wРM{6 Ú4hÓ¦A{/Vbïš½›-ž¤AzÅ“‰bÎ$ýÒè(Á{6ÍÝ4hï A›6í´iÓ A› Ú;fĨAƒ6 ´w½€#AˆÅ¸,ˆFïâ óAdQ— C†!!CœMƒöL’’hÓ Ák4)Þ3hÕœ½“& ´wÎ, I‚¤Ú´gÓ¦AƒFíÛ5xϦ={6 ´gÓ MkÖ?~üøñÃ÷A‚_üÊ©ø°À¿; lá×?Tèî$€` ?~u$¨ÃOß+~e”ñãÇ_?~­|@`‡_?})ê€[‘þ Aƒ ,¨…ïß¿å„qÃ… W· ²2ˆh!7a¼¹úÆ?~üøñãÇ?~üøñãÇ?~üîýâÇ?~üøñ«ƒ@¿~ü¾%ØÂ¯¿VÀñã‡çÇ_ 4HP‡_?~üнâ§O‹$Ѧ½³”CR¯@ˆM›F%x½–|' ÉJðž={6m4hÓ A{ænÚ3hÓ¦Aƒ&-Z´wÓ =ƒ Ú3% ãǯˆsøõËǯU9~üøñãǯ¸VåÐñãÇï›>~û„$hРAƒ¯ð•#w¯7nÜpqû¦AÖ-Ä]Ã…+7WßøñãÇ?~üøñãÇ?~üøñãÇ¿~üøñãÇ_?~¿láǾZòëÇpüúñ+Ãà×”á׿}µøñãL3jÓ–±DMbð =ëí¼wÑšSd)Þ³iïžMƒ6 Ú³iÓ¦M›6 Ú³iР½{6íÙ»gþÓÜM{·ˆ‡3jÐàÃQì´wÕœ½ƒ Þ’I–|A¤Ø»wpqöîÙ´i•¢M›6íÝ´wÓ =“ölÚ´gÓ¦½{÷Ž’’jïÜ={6 µnר¹ƒ6 Ú´gЦ={ ?~üøñã×*'øñëǯU ~üöÝ㇎?~üøõãW }üøÕ²µb ?~üøñãÇ?~üøñãÇ?~üøñã×_¾W 0h°€>rä‹.\Ý6Ⱥ ¢Å¸R¿£K8~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ_?-µøõëÇo ~ýøþñ÷_?~æ S1@XüúñãÇo?~üøÅŠ6íÙ»I’â‹åì´gÑÞ=s7mš»xŒ$Å{æîÙ³gï MƒÍݳiÏ E{m4hïžM{ænZ4hïª-²6íÙ»frŒÁ{öìÝ´gОÁëÂÈŽ @‚ƒçŽX—EΦM{6Í»gÏž={7 ´gОM{÷ìÙ4hÏ =+ÖìÝ´iÏžA“Öí¼gÏž½{6 Ú´gî ¹ãÇ?~üøñã÷ë¿~üøý¿~üøñãÇ?~üöm±Å¯¿}ü`ýâ×?€üøñãÇ?~ýøñëÇ?~ýúñãþÇo_­! $x…¯9rå„qÃÅ ×7 ²2ˆhQ 9~üîãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñûÆ?~ýúñãÇß+}àî´ÊŽ?~üøñãÇ?xÓ¤½›-Ú4jð¦I£6 š4xÔ¨M›61xÔ¨M“5jÓ¤Q{G Þ4iÒ¤M£FmÚ´iÒ M›6 õüùóçÏŸ?õÚµk×®]»gëÖµk×®];kíÚµk×®];kËÚµk×®]»víÚ­k×®]»víÚµ³°]»víÚµk׮ݺuÖÜÉkg­ÝºvÖ¬µkg­]»víÖµ[¶Lž¥H -k×n];yÏÖY[÷¬]»víÚµk×®Ý:kíÚµk×®]»víÚµk×n]»víÚµkw Û´uíÚ­kg­]»víÚµóçÏŸ?þüùóçÏŸ?þüù#çÏŸ?þüùóçÏŸ?þüíóçÏŸ?þüùóçÏŸ?þüùóçÏŸ?þüùóçÏŸ?þüùþó篟« ÔÂGîß¿rɸá↫›YD´—‹9rÿÆñãÇ?~üøñãÇ?~üøñãÇ?~üøñãÇ?~üøñûÕ?~ü€máÇ¿~ýøñã÷ D>; hÅ?~üøñÈ¿hÒ¤MƒGÉ\øõëÇÏÕ/~ýø½BOƒ ¶ðëÇ_?tüøñã'‰Ù4wË’H"Vi1xРA;í´hïŒýˆ/4hРAsmÚ³iЦAƒ6 š»iÒ¦¹‹6 šþ´iϤų„£Ú;hð˜ù(ïY¼hÌÞAƒÖL‰$K> Rìݳit|8{÷ ³bïžMƒ Ú´gÓ¦M{mÚ´iÓ ÁcÆl³wÏ Mƒš¶kÔ Mƒö 4hϦAƒöŽ?~üøñãÇψ;üúõã÷*Á8~ýøéƒÅ?~ýúñ{5?~üúñË‚Š?~üúñãÇ?~üøñãÇ?~üøñãׯ?[ 6hà¾räþ•ÛÆ 7\Ý4ÈÊ ¢…¸\Ép%ëë?~üøñãÇ?~üøñãÇ?~üøñë×?~üøñëÇïüøõ«…` ?~þø¶,Ǻl…hÐ A~üøñC‹_?~ü1{ÏQFŒŽ)öÚ;fÞEk¯W”àAƒönÚ3iЦM› Ú4hÐÜIƒ 4hÓÜA› ´ir| {7Y/Ĩ½ë%‡µiÑä ‘³èÇ!@˜½ƒG)gÓžMcÆ(Ú3hÓÞAƒ6m´gï Aƒ6mZ´f’‚$iönÚ;hÓ¢QûvÚ³iРM›6mÚ´iÐàñãÇ?~ýøm¢?~ü´$(Ç/ß>T·ðëÇ_­}üT$¡?~ü@lá×?~üøñãÇ?~ýÀíãÇ?~ýøþ¹ªÅïN‚ÔÂGŽÜ¿r¸¸áâÆí›YD´—‹.\Ý\ã×?~üøñãÇ?~üøñãÇ?~÷~ñãÇ?~ýøÕAÀ‚?e lá‡ïU‚àø™SàÄœ $¨Ã?~¯îðëǘ"gÓàIÂ!I ĦEƒ'INä âƒY±^ïŽ(zW¬3%C~X‚m´iЦMƒ6ÍÝ4hРA“mš´i̊Ń6 þ´iïŠùÑ ^49A‚‹')@ tÞÅ“Ä#C† Ò+^¥ CT{Gí™%9Ñܽsg„R&ÁëI_Õ˜M£“$Ú;I–€,"Vl³aÄÞAƒ6X, FŒø¨4hÓ Qûv4hÓ¢½ëÅŒ4hÌŠ¼âׯ¿~üX,ø°à?X B,¸g+Á‡ZøõãǯÎ/, ,Àˆ êðÛ·X_üú•«ÕJ_ŠÜá—Äœ;eþ4hРAƒ jÙ#÷ï_9a¸páÂÕm­ "ZˆÃ…k®n°¾ñãÇ?~üøñã×?~üøñãÇ¿9 PñûÅOŸ¾|X,PÁ¯U‚ ¸Ôb°Aƒàø`РAƒ $¨Ãº îÔÚ’¥cñb)‚d–Q‚ö£Qµ$½äDδjѦA› Ú´gÓžIƒmš»iïÞM£d¤¼iÑŠM‹'ÉÇcÑèA„X5%@ YV)É$C† Abć%jE€ ÁыآhJ’Dk¦$’ ”˜c¦¤¼hÒ¦ÃÄ•àAƒö š;iÜ®Áþƒöî]¥wÆšÁcVìX ü~}ãÇÏ‹üâwbAƒùl%ø` ¿~üÊq‚ ö½Bð!Á~¯^Õa‘ÂN-<¯êÔiРA;üê Ø‚Aƒ 4hÐ Á+|äÈÝ+Ç7n¸¾iuAD q¹¸](ì›+WüøñãÇ?~ûjýâÇ_¿Wèø•Ó‡nATü\õû,W‚ XðòàÃ,w0€°àŽ9 4hР„uøýjõA+- ¸0ðÑ‹Ø"%@€ 2$É^Ï|,j”× F€È¡fŒÙ2hЦ=›6íÙ4bÄz9cY1xrxH*þ˜¤wÐ$ b‰#C€ kdÈ!ÎA2dÈ!Cø°4- $>z[Ô ˆœ^@ 2$I%L‹|ô‚ÇÌX¼JŒ 1¤W0hÀ\«!lA‡JÙ–[N,hЀ¾W >$¨ÃOK >Äò ˇ4‘À¿: >|hРAƒ @XP 9räÊqÃÅM®nMd]ÑB.nÜ„%£eG¿~ýøñãǯ,;üÌ3W§¿WÊ^%HÐÊÖ}ZîlYЀ~Y4XÀ%Åþ‚ lQ± Aƒ 4hÀ޹,$hµ%Aƒ>0Éù1dÈ!C† ñAÉØ#I~PRÄ9ñˆ-ªô´iÏ¢A‹6¬—$I½zÑé¯Ñ$rˆ5Râ®X# A92Ic]ˆ 2„X£C† 2d–Þ%‚DG,JŒz‘ãË’!CøX$'ˆ^ñbë…„!F|ôz홳iÅ2Iáä¨3K‹àùrVŒ³a9¢ÈgçN-[Z4‘¸ 0ø……AƒXðhyb  4` ïU‚ °Ô‚ ƒ)P-h° Aƒàá·%Aƒþ 4`РAƒ ^á#Gî^¹\ܸáÂÕm†¬ "ZˆûµM˜°o®Tìãì?~ý~åS¡_9; €wçU- >hòŠA  0`ð+Å‚ @|`À€A‚-(4hРƒØ—àCƒ­¶$h!ˆ¤$C€ 2dÈ!A(a: C† Òå±’(ƒW-Z¯hÓˆYò‘D%E¾¦!!b„‡¤.>˜Q22ä£X?†AbÉÈ!@XRÉ C† ƒR±CøÀÔHN/ “Xd!@” â£W49”ù@d½ÞÁ£$ž¤6V¼þ8êÕ‹R9Œ|1ÒËQްR ¨óëÄ‚€— D® 0h°‹,N0`À A¾mY‚X)@@h° …– 4hРA‚;ù@,hРA 4hÐ`Á+|åþÝ+· 7a¸¸­uAD q¹p ÃÕ͈ZµîüBÇß– @컳eÁ‡VµÔy•Bƒ R„XÀ A ~}`À ƒ „X ƒ 4hÐ D;¿4h`‹– BY„ $H† A‚$¥^IŒ A‚Ĉ#@Ú#D ^ñ˜ «¤š1IA†‘#GR%€A Aþ‚É9I€ !r‰$H 2É$’ˆA‚ $HŒø $é‡$>z)JBŒ9H A‚É!F‚ô¢$I$H 1âcØ0_Œ€ôZ¤ÃÊ”"‹ˆÉ bÄ1g@$ÉÉ ƒsî4`РApæ4hða ƒ hI±€ƒ 4hÀàƒ- ,H±e @@Á A 4Hp§ 4hРƒ ,¨…Ü¿åpqÕ 7'²2ˆhá .n¸ºíb°"ˉ,wÆÕ’àÀÁ‰+²@HÅÕ,«@€ À@p‚- 8àþ8x‚H@€§œX¡À@?ˆü„È?ˆüÀ1IR A~üøñƒÈ%Œý‚ƒ5b‹¡V ‰"?~üàƒ‘D~üâã"9YÊA„È?~ùa„"?‚ „‘–åB¥.K&á ‚ƒÈ?~!ƒŽ^Šxü„È A‚Ĉ#F A‚„È#FŒ 2dÈ!CŽ AbÄ:]Ž A‚„’!FŒ1bd$C þ1bdÈ!FŒ Qˆ‘!F†A‚É!C† A‚Ĉ#Fˆ0Rbdˆ$FŽ ‚dˆ#HŒ1bĈ#@)2dÈ!C† 1bĈ#F )bÅËE| 1b ’!C’ø`À€ƒ 0`À`Á+ 0`À€A 0Ø€ 0`ÀÄ 0h°€Aƒ 0`ЀA 4H`gK 4hÀ€Aƒ ,¨…¹{å„%Æ W7 ².ˆh!7a¸ºíjРAƒ 8`À Aƒ 4hРAƒ 4hРAƒ 0hÀàC– 4hÐþ Aƒ 4hРAƒ 4hРAƒ 4hР„!C†2dÈ!C† !2dÈ!C† 2dÈ!C† Bd"D,"2dÈ!C† 2dÈ!C† 2dÈ!CŒ 2dÈ!C† 2dÈ!C† 2dHFJ‚ 2d‘!C† 2dÈ!C† b$H#9@† 2dÈ!C†2dÈ!CŠXñ²É‘!C† 2d#>4hРAƒ 8h€¥Aƒ 0hРAƒ 4`ЀAƒ €À² Aƒ 4hРAƒ 0hРAƒ RpIЀAþ 4hРAƒ¯ð‘#G®œ°kÂ’qã¦AV-Ä]ãÆ-7Y 4hРAƒ 4hРAƒ 4hРAƒ 4hРƒ 4hРAƒ 4hРAƒ 4hРA 4hРAƒ ,hPÉ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C2dÈ!C† A2DΑ!C† 2dÈ!C† 2dÈ!C† ²HQ!C† 2dÈ!C† 2dH‘)þSŠ 2dÈ!C† 2ă 4hРƒ 4hРAƒ 4hÐÀAƒ 4hРAƒ 0hРAƒ4hРAƒ 4hЀ 4hРA 4h V¾räî•Û†‹.\ß6Ⱥ ¢…¸_ÉpqëöŠAƒ 4hРAƒ 4`ЀAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРA 4hРAƒ† 2dÈ!C† 2dÈ!C† 2dÈ!‡ 2dÈ!C† 2dÈ!C† 2dÈ!C†þ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C†2dÈ!C† 2dÈ!C† 2dÈ!@ä(2dÈ!C† 2dÈ!C† )bÅK‘!C† 2dÈ!Cø`РAƒ 4hРAƒ 4hРAƒ 4hРƒ 4hРAƒ 4hÀ Aƒ 4hÀ Aƒ 0`РAƒ 4hРAƒÔÂG޹q¸áâ†ë›YD´‡ ®dÝv1hРAƒ 4hРAƒ 4hРAƒ 4pРƒ 4hРAƒ 4hþРA€ 4`Ѐƒ 0hРAƒ 4hРAƒ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!E† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!E¦x)2dÈ!C† 2dˆ‘ 4hРAƒ 4hРAƒ 0hРA 4hРƒ 4`РAƒ 4`РAƒ 4hÀ Aƒ 4hРþAƒ 4`РA‚ZøÈýûW.Ù6nÉpuÓ +ƒˆâpm†‹@W 4hРAƒ 4hРƒ 4hРƒ 4hРAƒ 4hРAƒ 4hÀ ƒ 4hРAƒ 4hРAƒ 4ø0dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2¤Èþ/E† 2dÈ!C† 1â£Aƒ 4hРAƒ 0hРAƒ 4hЀAƒ 0hРAƒ 4hРAƒ 4hÐ`ƒ 4hРAƒ 4hРAƒ 4€€>rä 7\Ý4Ⱥ ¢…8\ܸáê&‹Aƒ 4hРƒ 4hРAƒ 4hÀ Aƒ 4hРA 4hРAƒ 4hЀAƒ 0hРAƒ 4hРA€ 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!Cþ† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C†™â¥!C† 2dÈ!F€0h°Aƒ 4hРAƒ 0hРA 4hРAƒ 4pРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ ¼ºW®¹[×páâ†ë›YD´‡‹.\Ý\1hРAƒ 4hРAƒ 4hРAƒ 4hÀ Aƒ 0hРAƒ 4þhРAƒ 4hРAƒ 4hÀ Aƒ 4hÐÂ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 8dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!E¦x)dÈ!C† 2dˆ‘ 4hРA 4`РAƒ 4`РAƒ 4hРA 4hРAƒ 4hРAƒ 4`РAƒ 0hÐþ Aƒ 4hРAWÿÈÝ&W2nÜp}Ó ë‚ˆârqÃ…ë›, 4hРƒ 4hРAƒ 4hРAƒ 4hÐÀAƒ 4hРAƒ 4hРA 4hРAƒ 4hРAƒ „2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C†2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 1b¤Èþ/EŒ 2dÈ!CŒ AâƒAƒ 4hРAƒ 4hРAƒ 4hРAƒ 0hЀAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ @HPk›)²ÀäâÆ ®nd]ÑB\.\ÜpusÅ Aƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРÁE2dÈ#C† 2dÈ!C† ‚dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!þC† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2ÄÈ!C† bdÈ!C† 12dÈ F†™â¥ˆ‘!C† 2dˆ#H|4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ 4hРAƒ \•£BEX˜\ÜpqÃÕMƒ¬ &ZˆË…k®n»0`РAƒ 4hРAƒ 4hРAƒ4hРAƒ 4`РAƒ þ4hÀ Aƒ 4hРAƒ 4hРAƒ 4hРÁ$C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ"C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† 2dÈ!C† bdÈ"S¼2dÈ!C† 2‰ 4hРƒ 4`РAƒ 4hРA 4pРAƒ 4hÀ A 4hРAƒ 4hРƒ 0hþРƒ 0hÐ A-€ÿÄ•óW2aÂp}Û ë‚ˆÞpqãÆÍ­ 4hРAƒ 0`ЀAƒ 4hР 0hРAƒ 0hÀ Aƒ 4hРA 4hРA 4hРAƒ |BÉ!C† !2dÈ!C† 2dÈ"C† 2dÈ!C† )2dÈ"E† 2dÈ!CŠ !2dÈ!C† 2dÈ!C† !‚¤È!C† 2dÈ$D† 2dÈ!CŠ 2dÈ$C† !2dÈ!CŠ 2dÈ"C† 2¤È!C€ )RÄþÊ”"C† 2dÈ"C†ñÑ€Aƒ 4hРƒ 0hÀ Aƒ 4hЀÀ 4`Р 4hРAƒ 4hÀ A 0`РAƒ 4hР 0`P†“1b¨à& ®nd]0ñÂ^¹råÊ•Ãs‹®o©ðxKÆ-Y2nÉ’}ãö-Ù¯oܸýâö-Ù·dß’qûÆ-™2nÜ”qSÆ·dÉ’%S–Œ·dɸ)SÆ·dɸ)K–LY2eß¾}ûöíÛ·oß¾}SNÙ7eß¾}ûæíÛ·oß¾}SöMÙ·oß¼}ûöíÛ·oß¾}ûöíÛ·þoÞ¼}ûöíÛ·oß¾}ûÎÛ·oß¾}ûöíÛ·oß¾)ûöíÛ·oß¾}ûöí›·oß¾}ûöíÛ·oß¾}Sö-œ²oß¾}ûæíÛ·oß¾yûö  ·oß¼}óÖíÛ·oß¾}ûæÍÛ7oÞ¾)Kö[²dܸýâö-7nß”qãÆ-·oÜ~qûö[²dܸýâö-™2n߸qûÅí7nܸýâ¦ì·oܸ}ãÆM·oÜ~qû•ë®o¦ÊÈJ¥j•,nÂ’qÃõMƒ¬ "^Øã†ËJ.n_ÆËÅmUª~÷îÝ»—ïÞ½{÷îÝ»wï^>|÷îÝ»wïÞ½{÷îÝ»w/ß½{÷þîÝ»wï¾{÷îÝËwïÞ½{÷îÝËwïÞ½{÷îÝËgïÞ½{÷îÝ»wïÞ½{÷îÝ»‡ïÞ½{÷îÝ»wïÞ½{ùòÙ»wïÞ½{÷îÝ»wïÞ½{÷îÝ»wïÞ½{÷îÝ»wïÞ½{÷îÝ»wïÞ½{÷îÝ»ðž½{ùîÝ»wïÞ½{÷îÝ»wïÞ½{÷îÝ»wïÞ½{÷îÝ»wïÞ½{÷îÝ»wïÞ½{÷òÝ»wïÞ½{÷îÝ»wï^¾{÷îÝ»wïÞ½{øîÝ»w/ß=|ùîÝËwïÞ½|÷òÝ»w/¾{÷îÝ»wï^>|÷îÝ»wïÞ½|øòÝË—/_>|÷îÝ»w/ß½{÷îÝþ»w/¾{÷þÍâVΔ©qß¾uû& W²k¸ºiuAÄ {ÜrÍÈÅ Œ·Yd¥b…¯Ü?räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘ûGî¹äÈ‘#÷9räþ‘ûGŽ9räþ‘Hîß¿äÈ‘ûGŽÜ¿äÈ‘#Gî9rÿÈ‘#÷9rÿþý#÷9räÈýûGî9rÿþý#GŽ9räÈ‘#GŽÜ?räÈ‘#Gî¹äÈý#÷9räÈý#Gî9räÈýCGŽ9räÈ‘#Gþî9räÈý#G޹äÈýCGŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ¡#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#G9räÈ‘#G9räÈ‘#G®Ü¿0¼:Õ —0a¸¸áâÆ ×7 ².ˆha¯®1ݸ'lÃ,U¬ð‘#GŽÜ?rÿÈ‘û÷ïß?räþý#Gî¹äþ‘#÷Ü?rÿÈý#Gîß¿räþüGŽÜ?rÿþýûGŽÜ¿äÈÝ#Gîß?räÈýû÷ïß¿ÿÈýû÷ï¹ìÈý#GŽ9räþ¡û÷¹äÈ‘û÷Ü¿äþ‘ûGŽÜþ?täþ‘û÷Ü¿äÈý#Gî9räþ¡û÷ºÿÈý#Gîß¿ÿÈ‘#GŽ9rÿþ‘#÷Ü?rÿБûGîß¿ÿþ‘#÷ï¹ÿþ‘#÷9r÷È‘ûGŽ9rÿÈý#÷ï:rÿÈ‘#G޹ÿÈ‘ûGŽÜ¿ÿÈýûGŽÜ¿äþý#GŽ9rÿþ‘ûGî9räÈý#÷ï¹ÿþ‘ûGî¹äÈ‘û÷ï9rÿþ•»ÆÊ8S¦¼]Ã%Œ.n¸páê¦AV-þåÒfÖ­/×Þº¥«T*|äîý»÷ïß?rÿþýû÷ïß¿ÿþýûwïß¿ÿîýûwÜ¿þ÷þÝûGîÞ=rÿîÝ»÷ïß¿{÷þÝûwܽ{ÿîÝ#wïß¿ÿîýû÷ïß¿ÿþ‘#÷ïß¿{÷îÝ»÷ï¹{ÿþÝûwïß¿{ÿîýû÷ïß½÷þÝû÷ïß¿ÿþÝû÷ïÞ¿÷þý»÷ïß¿äþý»wïÞ½ÿîý»wïß=r÷þý»wïÞ¿÷þýû÷ï¹ÿþÝû÷ïÞ¿÷þýû÷ïß¿÷î‘ûwÜ=r÷þý»wܽ{÷þýû÷ïß¿ÿþýû÷ïß¿ÿþÝû÷ïß¿ÿþýû÷ïß?rÿþýûwÜ¿ÿîýû÷ïß½÷þý»÷ï¹ÿýû÷ïß¿ÿþþýû÷ïß¿äºÉÊ…ë)o׸qãÆ7\¸¾muAD‹[_ˆù¦J˜0aÀTÙEÎÛ¸qãÊý#GŽ\¹räÊ‘+Wn¹rãÈ7®Ü¸rãÊ+7nܸqãÆ7nÜ8oãÆ7nܸqåÆ7n\¹qãÊ+Wn\¹råÊ•#W®¹äþ•3gÎÛ¸qã¼7NݸqæÆ7nܸqæÆ7nܸqæÆ+7nܸqãÆ3gnܸqãÆ7nܸqãÆ…3gnܸqæÆgnœ¹qãÆgnܸqãÆ7nœ¹qãÆgnܸqãÆ•7nܸrãÆþ7nœ¹qãÆ7nœ¸rãÆ•7®Ü8€åÆ•Wn\¹qãÊ+7n\¹qãÊWn\¹qåÆ+WnܸqãÆ•7®Ü¸qãÆ7®Ü¸qåÆ7nܸqãÆ•W×0_ÂTQõ.\¸páÂ…‹[7 ²2ˆh!Ž9rùîÝû÷Ï[¹{åÊ+7N›)1¥J2eÊT*V©R¥RµJ•*U»díÚ%K–¬Y´hÑš5kÖ¬[·tÝÒuë–®Y³fÍ¢E‹–,Y´dí’¥JÕ.U«V­J•*+V¬L™*uŠ™SÞÊ7®Ü¸qÛpᆫ7a¸¸qÆM7\¸páÂ… þ.\¸pᆠ.\¸ráÂ… .\¸p Ë… .\¸páÂ… .\¸p Ã… .\¸r]Ã… @\¸pá& .\¸páÂ… .\¸páÂ… .\¸páÂ… .\¸páÂ… .\¸páÂ… .\¸¸åÂ… .\¹® Ã… .\¸páÂ…‹[.\¸páÂ… .\¸páÂ… .\¸pá•‹[¹rÿÈ™7n\¹qÞÆ#Ç®\¹㺕7®\¹rãÆuã¦AV-Ä +§k•ª[³„É— —0nÜrÙêä„ UbnÝ*E W*UÂnÝbÅíÖ·m©¾áâæmU7þnÂÈÍÒåÍ›·rª¼uKVN—®oÛ¸•cÕm[®q©på•Ë.]¸LÉÊ¥ÊÔ-1²¾ˆó¥\7nܸqãvkV7\ܸ©šÅ›¬Y¸d ÓÅMX2aÉp ÃÅ 7n„ K†‹7nܸqãÆ.nܶ%ã& —°dÂ’ –ìš0aÛp K†‹7nÂ’ †‹7nÜ„ KÆ 7\Üp]ãÆ 7\¸¸qÃ%,®mɶqKv-Y2aܸá↋7nÜpqㆋ7n¸„áâÆ[²dܸá↋7\ÜpqãÆ.nÛ’áâÆ-Y²k¸¸qÃÅ.nܶy7+Õ,oÞþ¸y»Åmœ7oɺuûæM–7o¸¶á¶›0ZÞ4Ⱥ ¢…8a÷¨|ÁC悬Yã’mûÆ[.[ž¤“ë¸n¬pÛE«7n¦º%óÆ-•7\ÜÆ™ú†+W9Y³¸á6Î7a¸ÊÑ’Å[²r¦¾áÊE..nÜp™òP˜7V¹ÆÑR5Ž .1¦L‰)×7\ܸݚŠ׷TP¢àJ… • _d}Ã%L˜0\¸á↠.a¸pqÃÅ 7\ܸáÂÅ.a¸’ Ã%Œ.\ÜpqÃÅ W2\Ü„ &,®dÉpqÃÅ —0a¸¸qã†K˜°dÂpqㆋ.\ÜpáþöK.\¸p &Œ.n¸¸á↠7n¸¸áÂÅ.n„ Ã%Œ.n¸¸áâÆ 7\ÜpqÃ… 7\Ü„ † 7\ÜpqÃÅ.oäfˆ‰¢j ­TÄŒ)uJ•*U²VÕJæ-×·oݸqÃ%«›YD´wí^3dª@™5k7a¦TuËU‹Ó&TdtúöÍT®n»dq˜ —)n¸ºqKÕM·q¬º%ËõOÖ,nÉ„•cõMX.v´hqã¶mœ)nÛp•c…‹Û¶\¦ºáòÆê–7Yªº‘¹%æP)0ã¸q#sáÖ·[³¸qó6L\©¾TIUJL*]Û’ K&þ,.n¸¸áÚ†+7\ÜpqÃÅ 7\ÜpqㆋÛ5aÉpáâ†K7\Üp »Æ ®d¸’ &L7\Üp Kv.n¸¸%K& 7n¸¸áâÆ 7nÉ„áÚ†‹›°d¸„á↋.n¸¸qÃ…‹.nÜpá↋®d„á↋.n¸¸áâÆ 7\¸¶áÂÅ —°d„qÃÅ7\ÜpáÂÕ­œ+U¢DÙ@…Ê…(b¢P¡Ê(`ɼä¦*U*UÜpÑú¦AÖ-ÄýºG…•©/TLÍÇ —¬YÜrÙê´©Õ[xº}3•Kœ*Yß¶á2õ W7n©¾áÚæÍTþ7\¹ÊÉšÅM˜°q¦¸ Ë5N–,n„3Å W.r¬páچ˷\ÞRÝòFKU72·Ä”:%f\7n©¢àâ–k7\ßXA±’ª (ÜL}±Pª.\Âp]K†KX2nÜpqㆠ7\Üp Õ 7\ÜpqÃÅ-™0n¸pqㆠ7aÉ„ K&L˜°kÉpqㆋ·d„%&Œ.a¸pqÃÅ.n¸¸qÕìš0\ÜpqÃ…‹.\ܸá–L˜°k¸„%ÃÅ 7\ÜpqK† .\¸¸áº&L.n¸rÃ%,®d„á†K.nÜpqÃ…‹.nÜpu+7c(þUÀPrA aÂPrkÖ7o×dÉ’5k[.YÝ4Ⱥ ¢…8näfáÊuëÖ-Zã¾mëö­[.[ž "ckÔ·o¦rS%«7\¦º óÆ-•7n߯±òÆMØ?Y³ºqûVŽ•7nÂÈÍšå­7r¦ºqãöÕ6nÜp±'Ì›©[Þh©òFæ–P¥ÀŒë¶­›7nßrÍâv-Ù7U³nÍ’E‹Û¬\²p K&,Y2a„áÆ 7\¸¸qãÆ —°dÛpqãÆ 7\Üp Æ7\¸¸qã&L®d„ Ã…K˜0\¸¸áâ&L.a¸„áâ†K7\Üpá↋7\…þá&Œ.n¸¸qÃÅ.\Üpá–,™0a¸qㆋ.n¸pmÃÅ ×6\Ü’%Ã% 7\Ü„ †+Y2aÉ’áÂÅ 7\ܸá↋.oåf%Ó•K•°Y³fáÊEëÖ­[º¼Íú&.™7oÞ¾mK&Ë›YD´Ç­Û¬Y³t麥ÊÛ­Y³fÍ’¥‹L0`Æ€1eê©T¦X©R¥Š•,Y³d­š5kÖ-Y·nÝÂ5ë–0aÂ’é& ®[ºnÝÒ•KÕ¬Y´f©’µK•+SªV­:e*U©1¦Ä † ˜q·fÍš5k–¬YÜp Ö7nܺáâÆí.\É„ þ– 7aÂpqÃÅ.n¸® K& 7nܸáâÆ W2€Â’á↋7\Üp%†ë.\É’ &L7\Üp%Õ,Y2a¸p%Ã…‹.\Üpá↋[2aÉ„á↋7\Üpá↋›0\¸„ K–L7\ÜpqÃ…‹.nÜpáJ&L˜0\Â’áÆ —°dׄ ÃÅí7\ÜpqÃÅ.nܸmÃå ׬YºtÝšuK×­YºtÝš¥kÖ,UÞrÍš5kÖ¬Y²dyÓ ë‚ˆâpáºuëÖ­\·rmËu+×­\¹pqã–+W.n¸®]Ãu+®\·nẕ+W.\·r底+þ×­[·råÊuëÖ­\·rݺ•+×­[¹náÊ•+×­\¹påÊ…+W®\¹på•+×¶k¸„ &,×­\·nåÊ…‹@aÉ„ ãÆ›0\ܸq˵ —°dÂp]ã†KX2n¸¸áÂÅ ·d¸„ Õ W.\ܸáâv —0n¸¸áÂÅ 7a¸’ K&ìš°dÂp%ÃÅ 7\„]†‹·m¸¸áâÆ 7n¸¸á&L®d׸áâÆ 7n¸¸áâÆMX²k¸„áÂÅ 7\ܸáâÆ 7aÉp K&LX2aÉ®qÃ%,®dÂpqÃÅ 7\Üpá↠.\ܸåºuëÖ­þ[¹nݺ•+×­[¹nݺ…KX®[¹rÝÊ•+W®od]ÑB\®mܺqãÆ-™0\ܸmÛ†+Ù6\¸’™ë&L7nܸqãÆ-Ùµ_ܸqãÆ7nܶ%Æ·dÛ¸qãÆ 7nܸqãö‹7nܸqÛ†‹7nܸqãÆ7nܸ ãÆ7nܸmKÆ7nÉ„ K&L.n¸pqÃ%L.\¸¶áÂ… .\„ẖ‹Û¶k¸p%»–Œ›0aÝÊýûWN.n¸„áÂ…‹·\¸¸m»† .\Â’ K&,™°k¸p]ã¶-7\„%ÃÅ .n¸¸á†+™0\Éþ„á↋[2aÂpáJ–Œ.n¸¸qÃÅ.nÜpqㆋ7\ÜpqÃ…‹.n¸¸qÃÅ 7nÜpqㆋ7\ÜpqÃÅíZ²d„mËÅ.nܸqãÆ[2aɸqãÆ7nܸqãÆ7nܸqÃÅMƒ¬ "ZˆãÆ-—¬_·¸uãÐ[®\߸}ãæ ×7YGdu»õ-7nÝ’]S¦,7nܸqãÆÛ7nݸuûÆí7n¸’qãÆ­·dÜp}ãÆMØ5n߸qãÆ ·dܸáâÖ·nÜ’uËÅ7nÉráê†ë.aÉ’ ãÆ­[2nܼqã–ì®mݾuþûÆMX7nß¼qëæ­Û7nܶ »ÕÍ[91b¼}ÁÕ[·nɸqãö.nݺ}ëÆí[7nݸ KÆ —·dܸÝâ†+Ù5n¸pqㆋ.a¸]K& —0n¸¸áú%l.\Üpá↋.\Üpqㆠ7n¸¸áÂÅ 7nܸqㆋ.\Üpqㆠ7n¸¸áÂÅ 7nÜpqÃ%,™°dܸላ7\¸¸áâ&LX2aÉ„qÃ…‹7\¸¸á↋.nÜpuÓ ë‚ˆâry åJYªd­cJÕ-UªLq›õgPŒY·¸u“U¥Ì­d‡F}»–+—·Tªn™sþŠ ˜STpá–L˜0\ÜnI™µ-82bf ãví Vªnýú%ì.n«¨ÐÊE…•8N¸pucÊ[.aßpáâ– .\ÜTAaÅ ×YÜn…ÉÅmÌVTdm“J o‡¾°¢"k[.\·¾•ÓuႬ0ÜÄ„#†[®n¯¾äâ6ëJª*x¶cŠÊ,o³8úÂ-·[ß¶ ûµ 7\¸¸qÃ%,.a„ Ã%ìÚ5aÉ„áâÆ ×6\Â’áÂÅ .n¸¸䆋.\ÜpáÂÅ 7n¸¸áÂÅ.\Üpqㆋ.\ÜpáÂÅ 7n¸¸á†‹.n¸¸áÂÅ þ7n¸¸]ÃÅM.n¸pqㆋ.a׸á↋®ndqÑB\®q_ €RåB'*œl€¢Aʘo§%êSŠ7p¬f\!E˜(QÄäšµ •/`¾DÑ%ƒ*nÜ’]Ã…Ë[)bªHùÂÁÉ—x¾E¡ò…L˜*NªˆÉÅSåÈT9tJ+Q.¨â–«.n¸„ Û†‹7 ³®D¹`Š )d¸EÑEYUðÈÒP®J†*ðÌ(ÕíÖ¸YbL¥Så(Q¤˜jƉ†1³ mPáDJ'dEQõ Ê—TU†‰ÂíV·dÂpᆋ7\Üp%– —°dþÂp%Ã%L.\¸pqÃ… —0aܸáâÆ 7\¸¸áâÆ 7nÜpqÃ…‹.nÜpáâÆ 7\¸¸áâÆ 7nÜpqÃ…‹.n¸„á↋.nÜpqㆋ.n¸páÚÆ 7\¸¸áâ&Œ.n¸¸áÂõMƒ¬ "ZˆË5.L©nT¾DƒáK*_¢ds-— >2rÝâæ-•“)T.h3£Ê˜\ª4D©eÌ—(N®\P…‹Û7\ÉpuƒBe†”&P6¬p’á 71Q4T‰bêB˜R¹¼‘¡¢ªT*d,d€â¤É…Rßr}õ —0\É„ K¦BÖ'QÈdÈà¤T·(¨þdø2ë˘R”вJ1RÂt»õm\®*_tÁUŠŠ“0_.\ Cå”.S¨lˆR ÊVRÀ˜¢%Š,1pÝê†k›·nݸáÂ…ë7n×páÂ%L˜7mÞ¸áêÖ›·kɼ}ÃÕ ×/aÂpq†KX2n¸¸áµ 7\Üpqㆋ.n¸pqㆋÛ5n¸pqÃÅ 7\Üpqㆋ7\ܸáÂÅ 7n¸¸á↋7\ÜpqÃÅ.nÜ’ ㆋ.n¸ºiuAD q¹¸qãÆ-7n³ðtõÍ[)2Û~%ûuêÖ·[߾͢E‹–,U´híRuËÛ¬\¸fÍÒþ%K•­Tßrqã†k7nª¸É’%ë+YºVÝâ–J•.U¦fí’µ ×7€ªR©ÚÅê–7U²T¹RÅŠ[®mÝpáÂ%,™0aÉ„©Ú&K–.Z²V­ZÅ–ª\©dÉ¢¥kÕ+U´TåJ•‹Õ-n¹¸+G…J·0Üd±ÊåŠÖ.S·f±º…+U.U´TÉ’5+•¬Y¸dÉÂ¥JÕ·[ݸÍ"£*Õ-oݼ墮۷nÞ¸ÝÂs -o©TÑ:•lUÝTyû&ìš°kÉ® † .n¸pqÕì7\¸¸á↋7\¸¸ † 7\ÜpqÃ…‹7\¸¸áÂÅ .nÜpá↋þ.n¸¸qÃÅ 7\Üpá↠.a¸¸á↋Û7 ².ˆh!î7n¸¸%&LØ7a¸’áâö-Ùµ_ܼ ãv«Û6n߸qëÖ@nߺqÃÅ ×6nܸ}ûÆ­·\ܸáÊÅ ×7nܸuãÖí·nÜpuûÆ­Û7nܺuK†«[7nߺqÃÅíÛ·_ߺqË…«.\×’ Ã%ŒÛµoܸqãÆÛ·oß’qëÆ­Û·nܸuãö[7nݸuã–+—·\c "Se·nºqûÖÛ7oܶuãÆ[7nܸuûÆ ·nܾuãvë›·;*¢h(%˜0aÊŒ%Ì5þ2¢lˆ2Fƒ)d‰«"¦T1b¾áöK˜0aÂpá↠W²dÂp ÃÅ 7nܸá↋.aÂ’áÂÅ7n¸¸áÂÅ 7n¸pqãÆ 7\¸¸á↋.\ÜpqÃÅ.n¸pqK†  0\ÜpqÃÕMƒ¬ "Zˆû…‹›7n¸p »– .\¸puÃ%LX·\ܸÝâÆ-·n¸¶áÂ… .\¸’åJ¶ .\¸¸qãv‹Û·mܸqㆠ.n¸pqÃ…K.\ܸqãÆ .\„qã†k7nݸáÂu.n¹p}ÃÅí›0\ܸáâ– 7nÜpáÂ…+—0nÜþpqÃ…‹7nÜpqㆠW2\ܶåò†ëš.[·Àà•ŒÛ6\¸pá• ®nܸmÃÅ7n¸páÚÆ[®\Ünuó6*ƒ¬(Q,DÙàÄÉ +VˆÙ&&ƒ QNiÐ0¤[QdEÉPE7\Â’ K– W²m¸¸ Ã%L˜°dÜpqÃÅ .n¸¸áâ0Ù/aÛ¸áÂÅ 7\ܸáâÆ 7n¸¸á↋7\ܸqÃÅ.n¸¸qÃÅ 7n¸’ ÃÅ 7\¸¾iuAD q¸º­³ëÛ·nݺ}ãÖ­Û¶Sßpq+… ·[ܶuË¥*.nß¾qëÆ­7oÉnyþëæÛ­YÝnáú–ëÖ­[·¼uû† ·[Þ¾}û¶-—,]·nuûæ ·\´¸q£…k­nݺÝâö-®oÂpÉæÛ­nݾyË•+—7nß¾uã†K·YݺÍúeK7\³¸qÃå·\߯•Óà¤[\ÜnÍÊ…«Û·oݺq»6‹Û-\ÞpÙÊ5‹[2n¸nÝ÷Û-nÞT™*7攘T*F•SJ 1·f}( Ì©RcƤSÊÔo²È”:Ä .n¸¸ &L7\Üpáâv —0aÉ„á↋[²kÂp]&L.n¸¸á↋.n¸pqÃ…‹.n¸¸qÃ…þK.n¸¸á↋.n¸¸qÃÅ7\Üpá–ì×· ²2ˆhá-—·/Q¨œúB&L)+ª¨˜ú’A ·UQÆ€1Å·[UÄT‚K•,Wªf­ºµêP•UªXqcµA®mÞdQ ¦Ê.Uº¢TY%F•,Y¬Ä}‰¢ŠÊU«Xåê¦J«mRªdH%+­/UºáÂÅ›“(´R¢²KÕ,0P¥J5k•,Vݨ¬ø’Ï© _œˆgåB.1bRÍâ–«7ST¨”úÂ-W†0PÀ”¥J–ªT·R]³ÁË®QXÈ`PU®”˜/bd±úvë7nÝpuóÖM˜ªoß¾y›¥êþ7nݾuóÖ­[·oݺ}û&Œ›·nã¶%ㆋ.\Â’áÂÅ7n¸’ K&L.n¸¸á– —°d¸’ v .n¸¸á↋7\ܸá↋.\Ü„ ㆋ.nÜpqㆋ.\ܸáÂÅ 7n„ ë¦AÖ-ÄåW… -'œd(ã$Ê…*œ”úÆ*ЬR¥’qófÊÊ?0¨DÉàd…“ N.x¡B%Ê©d·¨ÜÊÅ·(0ˆY1cÆ•c4hp²"C®*`R]€bJ)aÜpQQåí”2Uœd˜!åB©o¹ºáÂ%Š*PbðÒŒ06@Ùå·(þN 8 F” T¸‰¹f• `¾åòv‹•*U¦ÂpË&Š04@Ù&×! N HI•*J˜ ©fe¨"FLÜnqã†+7\¸p û† .\ܺåâ& .\ÂpáÂ… .a¿¸ vMX2\¸¸áâ–LX2a¸¸á↋.n¸„áJ†‹.\¸„ K& W²d„ýÚÆ .nܸqÃÅ 7n¸¸qãÆ —°dÜpáâÆ W2\ÜpáâÆ ®mÜpqÃÅ —0aß4Ⱥ ¢…8\ÝXÑ žS«ÄÈC <¸¶‘©B†[®nÜr…ù†Ê—*R T¡2åK1_Àþ|ÓÊn¹¸qóF¦J”Y©TùŠJ•(V¬|± Œ*UP¾T#&—·0UN‰©&Ì”*S¨DÑ j®o¸ÄTCEL*‡¾ˆóåK”0Tªˆé& (bÈHc…Š˜RPh…ùReL·\ÜÊuË!\·ÀTCÆÊ QÄÌ’¥”/‡T})Œ)N_J‘……Û­nܸm– W2a¸®%&L˜0\Ûp%Ã%L˜°dÂp K† —°d®q& 7n¸¸áº–Œ.n¸¸áâ†KX²k¸áâ¶MX2aÂ’ &,™°dÂpqã†+×¶dÂpqÃÅ.\Üpqþ& 7\Üpá↠7n¸pqÃ… 7\Üpq»Æ­ÛYD´—+×7n¹¼yëÖíW7€ß¾uëÖ­®dÂnq㦋Û6n¸nq»vÛ¶\ÛpáJöë—°\Ûráúu ×­mÜpqã¶-ÙµmÉp)Ë• W7Y_p Ã… ×µk¸r Ã…ëÖ-\׺åâ¶-×5a¸¸ÝÊõ ®[Ýpáâ–ìÚµ\Ürq»ÆM˜°\„ ㆠW.\ܸmÕë7nÜrýÂu‹›·d£ðäú‚ëZ.\Ýr]ëæ.\¿~}Ã…ë7\Üp]ÃÅ.a¸®qÓÅí.\¸p † ®d¿ráÂ… þ.\¸’áÂuí.a¸påÂ…ë.\¸páÂ… —0\¸„å↠.\ÛpáÂu .\ׄáÂ… ×µm¹®áÂ… ®k„áÂ…K.\¿„áÂ… Àk¸’áÂ…k.\¸~áÂ…k.\¸¶áÂ… .\¸påê¦Ö-Èuû¬Û·nݼuóÖÍ[7oÞº}óæí›7oÞ¾y×í›·oÞº‰óæÍ[·oßÀ)ëæÍ›7oÞ¼yëæÍ›7oݾ}óæÍ[7pà¼yóæmœ8oÞ¼}ó6î›·nÞ¾óæÍÛ8oÞ¼‰óöMœ·nݼuóæ­›7oß¼yûæÍ›·oÞ¾yóæ­Û7þoß¼yûî›·nÞ¼yóæÍ›7pต»UÆ0b¼uóæ­›7oÞÊyëæ­¸nÞ¾óæ­›7oã¼yëæÍ›7oÜÆûæÍ›7oÞ¼uëÖ͸nÞ¼yóæ­›7oÞ¼ëæÍÛ·oà¾yëæÍ›¸nÞ¼yóæ `7oÞ¾} æí›7oÞ¾‰ëæí›·nß¼yëæ­›·oÞ¼yûöÍ›·oÞÄuóæÍ›7oݼyûö­Û7oÞ¾yóæ­8eÞºyóæ­›7oݼ}óöíÛ7oãfȺ â«C¥Fáuh(° @@<РÀ€€  ,pâQ$ùúJ–dÉþÿNNŽë=[ö“l]Ë’mc̯X†OÏŒùÇð4l½%´â—ë«‹^<ÿx<ßoº1´å™ýÇét“1éw§›1îžþv™1Yòºþçÿá3çïw™bä/×WãÄéo—/²¤´êÚê¤8=»p>·?ÙÐu¨'¥‘m6÷þo—?{1ò?3~þ8|úh>}þzÆÿÿzüü¿çÏÿûøùãùóÇó_ÿ:þ×ù¯Ç‡¿Ïþz|øøçÃÇ?Ï÷Ïÿ¼üç½ÞK&˜è"èúi˜¢àl‚q¨ãvNÿÒ™~µ­‘bb‚‰5Ž@€Çì|~Œ1Ã0 OfódžÿøÒþöÇŸ^Oƒùúí—ÿÇ¥¾=xŒ¹7f`‚‰ž'ücx÷ìâݳ‹ñ“/Gзß—­ÿÏÞ¶I5RLL0‘6ô1fx¾tžnÞn†O‡§á˜áÉcÌÓ`ÌÅóÿúb?>> OËŸ^>þóΘ‹/ñɘgfx.ÌÅéæfìƒ<ýíòÇ™uýúåkü[œá—¯ç‹öÌ¿X'‘ÓçÊE¦œýE4[µ%¿|{î+ü| /ƒ1ö%ÖÓéæôû­ÛiŒ†ÏSÌûr4<}þøøðã‹WƘñÿÑùán0Æ<}™ÿ˜a0ƘÏOŸ»´¸oÿò4üãÙůOÃ4mŒÿœ¦§ÏíEœ¯œEìµË©É[»%Óo™[°'¡>Hsa¾\)5æK rx>þyoÏt~¸3Ö·v‹óÂ|sð¼f‚‰þ'lú 1ÎãÌ9Fyauö Qáê×§aú§Y6* ¾f‚‰þ'ÿád÷#~¾íeôçüúíç¯}ƒqû ï93ÁDçQœØãÿi*¿èÿ)$n'\dúÜþ—¶ñÂVÝ·QLL0‘6èƒüë_gcíÂÞíŒç?î¦hza÷DsûþýÔùý̺Nýö4c~›3Î öŸšiûO]ÂWú­Un¡ü°¡>È™ä7íÂaþþxþãý8ýòÿ]N-Ë)RfàÙu8 ßž†ß–öü®L×$È sa÷&ŽÓcãÃïÇOîßc>¼žc.ÆVãØŽ§m—L0Ñÿ„ÍnN+4.¶À¾I$i‘ů„µÌIØ_#ÅÄk&K¬Ï÷æÙ7×Kík­_®¦çÛ¯£^ŸÌ…1ÃÓp÷á~ºÄzaÌGc~4Æ0ÁDÏŽXéW+„ŒŸOŸÿ?™¾JXDÞ†¹YÜ~Í–S3[—L¬™ø>t‰õ;óm€4ùØ@rˆ& ¿¹2׃Xmϳ§Ø8‚”o@ÿ§Ó17ù×ðßoó§ @VÓ5Ôë¯/Ûø¦yõöçºÛ@CnnßOÓQ¬€ @€$H  @@€ € @€€g˳X^½qŸ<þðá6a­c:n§‰„Dpdöž37-,¢ÿ–]TÏ©¦LÓä!ù\S°¤(_\€­ÏAÊõ±×åT¯¯Þ¼}õæ-yÞ ¹’¢°|)ÒaŸŒLg"SëÐX-E3ªâ—™03°(¸[úÓò®8%2Õõ챜<Žt‘Å9‘‘sPLœcÁ©PÖöAN¬Pìxéç2L8&íZ8¸×ÍUf>î¸ ÈeÊ7'ócóP.;¬7WRö ·‡-””9æì\榱óݯ›¨žŒ|zþ~µ¸§±7 ì t®,„#]™8ÖÓ””¦tv_(ú s6¾°gnbjš¯éƒ¤ì*X,)ªúµ}Á›4ciíþ¢6r™v˜¹ÞAö¢šìü^¾žhŽtÊ®MI?<`¡tp¤pX´xIŸŽœÅfÛä|5‹7D§PÖHûBöúväÏPP‚? !ø­f‹šùÈì<q²óPceæËë %eóg8`¡|gŒž†Çóýétsõöç­·‡šUí€oG:Útsûþúúêtº9ý~ÑYáªô¾[ëÈHÞUäÝ’ ˜Üã5?6ç—Îa–ˆY:¨¶ ·f?±‰¬L £¨<äHoE3Éð$\(TÃζ!2½è`+õ©Z÷<”Þ`ÎõõÕãŸÓŸìÛ¢8zAI œÌ™£½ÄúëoïÖm"x9޽q+G/()þ"Däði9ÞyÏçàçì› 8zAI æ2ÇG$H¼òâ‡F¼ämϰ83àÓï6Á9ÙëòŠ:¢§(…MŒÙ>š2?øá‘µò  è]ÚQ̱_Ÿs*sñà çLeúpÛíÜ\t€œ;ï“O=üo§Oœ²IK—°7²eç¼æëÑmÄñÛÁÙy«”Øéì÷Ó.îïåsßN%,ª¨ôqpi{#{Q9ÎÑ­<~9ÌëãdQ–x‰ÕÉP9rŸƒ^ò•=ªà:¨ÚDt\”­R®k¨‰€#£h ÑQ#Ïm周oì5@kˆŽJé}7‚³K¬‘¶ÿ°×Õ‘\:6— Q¦þÈàà°UçÛizñDÆNÁpâƒo {£™é/g{iv>Ëõƒ¿‡ycV;NþÛÒû …q:~ÎÎ}ëe]œ˜Ì…VîìTy)넨ª%Ìå3ùïàQs ˆ¾ÄJp´ ж >Üêß ÅÞØŠ£”T,U€¼¾¾*¼€{cS(Ž^PR Tòtº)¼À,çÀfoÜÅÑ JJ <]Ð^býõ·wéÛ¤zøpëÈÞ¸Š£”” ˜9A£XõãWÄÀ³ŽCß òêÍÛ¹¯ØUr¡8zQ¢¤‚oµq–Ìñe{›‡­¯œE}/~Z~Ì&W„ª¡8zAI JdNJ€¨8=MÑ™6Þ;iGešÐ“ZíÄ•s¢kRš ¡8z‘·¤‚•j¿5möÝ8ýmö3ˆå—€ë_øõjxÊ)r‰Õ!œ,>c(mî:6G‰`[t’²Sð?\\Ñ>¬,'åÌ—óÜOy®höW kJj÷²dÎÆò°{6&öœ\) =âÁžlç²j–íÃúâ0V†äÊ|yàBÚFö.KIíU®ÌÙ @êß[Í®wÏßw+êìT¶ŒÅ¡¹^­Ï|9µ^ßüÀiYÆÌI¤³ø¢ðàÛå÷†ëçÄžèi±ÒaÛQrGðÞ­•æ9fQíÀéQÆÌ©1ŠØÜ1«ÑF¬Ï|ûç:¨†‰ñ¯Õ˵-uqFÊÌ'Ïk’ …ÓJF±bç‚=Ùö@a*ˆ•ô™¯,çY"H67TØðl -Hl ãã"5½×òó´ä.ó„õî*޹O?\ÔYÞbj——¯//_kÖœS¿ø^å*Žñˆ¶ós1o§(Ù˜·yœ)”9™G±_Ø8nJÞäÝÝýÝÝ}ì6¤-u´ ʜ̃thbQ–~ߨ™êY»EâW¾ÎÌG–«8†Oc?™1æîîÞnGŽù,”ˆ]rÁÓ˜·…œ}(”9Eîƒô“qñõõë\_E¡èhW¯S…ë×¹ö·\Ö3Åú §ØfÁ\‰L”³ -ÈEÍõA:‚í|%z Òš4PLî>È9 Q¹î:¡rQ¡ÌI¹Äûˆ}Ã'ÂMÉØ‚”。9˜¬ò}=j½ (q"Ü”:-HçÚ)¢Ð‚\T(s¨­Pd–Ц1UîƒL. hT®R¸ï ¯[hAb' õAÚ#!§!ÁѪӷ´fLɤÏv‰pä‚;¬-H9þuG õAkä=×sFKúŸ?™[ê€òöA ¥07-S¦RxäÙôØü¿¤ZØ ºRšR§kйˆ>HìD¡s=¤©Ð‰•jÞ9=d»/…2‡K¬¨-ê\YZ®âháP;þ¿Î“t:ަX­’òº+`óùµ;;4¯»ÊëÇÿ|Nqt!KI9Õ¸ðÊÂI5ÿÊZÅf¿îjW-Èmâ³rísoÙ¬¼d9×ûùï—•7{¯b_¤L„⨠KI-¬Âª7Ú¯Il…ZôA¢6®¯6…âè%%h¨r®­c7Ïí1Äò´Ÿ²‚œ¬Ÿ¦ùvŒòÜüŠ’·ÊÏŸ´Å3¦Óæ9 }M¡8zQ¢¤„Ê¡µzCÖ\ rêÎká©.n¯YLÐOAHÖÙ€©8Ë5jÛVnUìâÓi3:N„Cqô‚’Œ?Yóÿ÷Ï_ê“MïƒÔÔ¼c[Í¥©¸•‰+6saÙióä­ºøúº®ÅÍÈV¦Ólt44YCqô‚’’½PÜàx:ÝD¥™yNBñ~²QacjœµrúÂAÞŠ£”Ô¢ì?<ó ±™5רj-Y³Ô'êÌfŠd—|¡»‚¨á­7vÿ(Ž^PRõÅza=wª©Çð¦l‡]„¤üpnñàt‚Ŷ£~«b×»2…fc$'ÂM¡8zAIÕ—-@®¿L!*Y'k¨ËâR…¶*yqçd"-6c$'ÂM¡8zAIÕ—ÒiWÄsÓšùå9……ƒ_i¸Æ~¥ßªØÅç¶6a3æ–Ú'ÂM¡8zAIÕǃšk`í'ÂM¡8zAIÕ·«GÍ%`lj}œ7…âèE‰’ò+@Í3LŽãè-È#c!ãD¸)G/ò–ÔÜ@H³îy/;sô$ê£ÉÒŠ£yKj1Òr0QòýÿÜ•ÛÇååk*åvDµK(Ž QRõÑ‚DmäM¡8zQ­¤œ»Øìè}¨N¯¦P½¨VRôAN¨&KS(Ž^PRõ• ——¯//_+gXœû@“¥)G/(©úꃼ»»ßzP'ÂM¡8zQ¡¤¦NæÛü.¥ȱwww?MØŸühçk·íÔÒÒG/Œ×Š£%JjñY•—~‰uŒjækÜš‚™ü¦™ýo§ ŒvQé£#TÇM¡8zAIÕ—~‰Õ‰jr“.¡ÁGq¯h²4…âè%U_Î>ÈÅñ8×…~q7…âè%U_¶Q¬Î%Шoq( Æk ÅÑ Jª¾ôäÔG˜íËãàD¸)G/²”Ô^Ÿúã>/‘lz Òe:q×L3¿¦c­‚¡‡²gœ7…âè%Uߪ>HaœŽÀæ¾õDz.Ή®Ñdi ÅÑ Jª>5‡Ú8n ÅÑ Jª¾†ž¤ƒƒàD¸)G/²—TðÑ+<Å–Ò‚d0*ÖàD¸)G/ò–TðÑ+<ÅA µÑdi ÅÑ‹¼%E#G#"@þü÷ËrÛãž*åvDµK(Ž *©ÝÜp:ÝdO“$j£:n ÅÑ ¢£àÕ›·%’e+j£Ó«)G/²—Ôn¢£1æó_燷ÊÿõÉ QÛxz«ùÿûç/7Ü΃ Ù‹¼%µ§èhŠíƉ—XÇ7jf|sXB‚Ù·ÕhÎpKô(ÀGd/()A¡Ìi¥’8w4G;€›EÛ‹r}£ñîŽéqž¦«öeC-ȱé6NŒmúÄ| uSónúJ˜öç·'œ•¢)í’^ä-©¹à×QP´ÚSú §øäÄ6?X:Óö<Áù™§o…UXƒèØ JJP(sŠÒ™¢ZìRë°ˆQ¬½ ¤…2'[d°U—}€¼h—ô‚’´Þ‚y…šzÎ%V¹Ð.é%%h´é4ì¸õè í’^d)©½>1ô|>7Ô‚ ޵)íU0NȈvI/()As-H;úAÑe#OûÊikЂì%%h½@h—ô‚’4ׂ°´Kz‘½¤ä§¯ô5 „$€üh—ô"oIÉO_én-Hì"o-È^ä-)¡i8Ž…ì+FÚ ¨­Ð«M‘&êÔ›¹¡B%Õ×¥Ô9…2‡‰Ú>ÜR·ƒèØ‹:Ñqº•®/ôAb'èôj ÅÑ‹ì%µ›èhèƒÄnÐdi ÅÑ‹¼%5weÕ­ÓEÈl«9=7Ç™Ñdi ÅÑ‹ %å?R»‹èhZnAö’ƒhM–¦P½(×9êº&/´§H»í8'ìÁÁδ³ìâ‡Ø«¨s=*åÒ(Ž^ä-©Åš¶¯ª¸Ðnœr‰Uh};/wîB Þš*߯Šý÷NÍÿß?¹ávÅÑ JJP(sZ¤cGS잦€‡ TCqô‚’”Èœ ¤ÓF¬ð¶,4ˆ‹uM¡8zAI ²gÎ2§Ë^Föm탒» §&#mG@ƒ[cƒ/ö™¶ÓRÓŸsâ ‚Ïe}øp[K`(Ž~PR‚Œ™“Þ‚œÆÔø‹ÓÎxœà‡8¯å ßÅÑ JJ1sx+6fï»䛣8zAI reÛ÷`òFP½XYRcß–ó¬Ðà‡=ʲ Ѫã¦P½XÍÞÛ²~7nåA€jð¡A€€ƒâö—Xà vs5µZØÀaÙ&Š£”” Dæ Q[ð6^l…âè%%(”9Úùðáö|>—ØÍú¡eìQ½(WRcÊçóyš°?\¹Ò: »VÈëë«ë°76…âè%•@ yÁ ÚÁÞØŠ£”TF±@€ € @€$H  @@€ € @€$H¨Þéxõæí4ýðávü³Ð •®Y‹½Ù‹IÕùQ•eÉûs:˜²¼ÈÎ2¹§4w0.f/ùÈ¢¤súGi›œº`ÜòCU uràPYÚ‚#ïÒ@iqÒ©d¦ƒ_O :§´Î„=°à81×^ñúQšÕíµöÑä@TRs™6—lpÏÙknåYÂ!ã/ü8¬l}Îq8cþÁéÔŃ!YNÜá4yýô…ÕíC®ò$ó‚õ²3§_ŽX)ê!ÿ ”>È §Þ”C‹2ð¤Å§¹¥ü±>;¬ÉG° 8·R¹æŠÁpÈUòe >¹1'Ï“œþâ±=U"v¨sgr`Of@9¥äÜøÆØyÉ}cþ‰öj™Œ90.~Z‡×éà(Úò¦ï|’q„Õu4^w M†'¤õùÜf Yì!Cþ£èA:Ê~,{¶¹6bpž¹ôíúÒìEœ¶Ôâêô™Ó²Ê90·øþ2¶Y+ßc†§áñ|:Ý\½ýyëí`37·ï¯¯¯N§›Óï·q¢·lx”s~ÿüeÑ-±Qv Ú,ÊQ³Úr¦± >‹õ°4—Œvv¡l¯(Êdvƒ õhNèšm$—P•Ü‹L×쨅\Š?¼0_»@榒 ~ek¶Ó¥G ……–Q Æ{Úsl*?¥6øíšÛ …u>ŸTr¶Ùy±¹ÿ[æž¡¶ºX[åÒ¤éäÁøB¦“‹^Ã;@šP½Ïñ}ö‹˜øÆøù¤Ýø›WÿÄ£:Ø`›ð×eÏ“°©þâ2á…A›ïm~ïóê˜õoËE9j°@ÛÉ4{K‚o—›MÊV£°–Fv’Qòûwmþ ¶DýxÜK.M¢Ÿ¤#Qöi“Á§t²¢~ÕàTÆŠÄÂVé_$¿l+ÎÆ¯ùÇÑfQŽš-ÐÊ™æ¿ÏË©¸í?ƒN„oç^Þ''؈à6'§£ÉÿÝys 6+±é4û4Gà¸HB'åhqÁź@³j9ü/.î˜Î§ìOb©ÆùãéÎXjGn>Žú*ÊÑæZ9ÓßyéÔ×r:±_e™¿YS9&gÔ#õKm¥H¤¥¦Ð{X–˜ÓáÔ¼§ÛvÑÎ~@1A›E9j¶@ëgÚ´F¹›Mn¾¤5nºh¥md–²ëñ­Ý)Ò>5¡ÎŒ`¸šÎ[›Jàl‰ßg³ÞxͰ7ø%5µMmŽÝ|œ´S”£. ´N¦Ùu®ßrfö甿´³cøü˜4ªÊ”g0(ø6éP\<&cCQZè–’«•õÚß DQ&h$ÓÖ‡ÍâöZ¶ B ³bîn™fs)s€ ^M»Ä:}.ÎéŸf~a]ÆÔ·¸©ŒX14wg¯j_¾sZ“Æ»¬g87º2øíÜý‚=^LkÒp4"CdDÇG¹ùH[Ј²÷AN1y©é*ëx)Õ¯i«@–?@N!-ØIiÄ+´‹MLêøÎ3< çûÓéæêíÏ[o›¹¹}}}u:Ýœ~¿åQs  @@€ @uäý¥·€:®¯¯ÿ|\œMû €_{·n{Øžþ6ˆ'é Ÿ–ã--;ŸÏÊ9éƒ € @€$H  @ñ €6]üðbœ˜{ŽÁ4ƒLù!µ1åêä5&$’åg.þ:ýlÉ¥LA¹©N:úÍóù‹hö™àRú¤‚Û»ç¬ßÓÒ~iUËëÕJQ›‘¶sê– fKÔ•³Èÿv} )oF›º‹‚ûÿáÜ>7ç\ÜÅýÚnaúDQî¯Ê_çlŒ°…ÁµÛó,þFyÍ6Ì­Z³ö¹¢Žÿ¹Ÿï'5·38sjâ_ˆÁÂÛ’à™|tl»jå©›R054;çâÞeϦߟ•§žB¶ÈÇÂ\àÔìÁ#TØøÆ££éýkÚñ0WŠBjsÇùðéQØõçÖ¾þôvLA³{«›ÛNóµ Î0}˜e?Þä`*è\‰'Óo•\ vš«ÊMR£yñèX¿jÍ&Í-p@\bÝž?Zrç¢\J˜S33ªÕìbtR˜Û°Åîɹ-~éâVá…šù…Ì‘ç·?ÝþÅ’Õk0卯ßDæÒ”7rñ¥ÊʃdZ.¾¸aò¯[ÜÃý• ùü-~Êœ¢m‚¹±i×·d Gµû°”\× Žë]Œ¯Á{-”cyãÓâ·rfÚj~‹&ývÆÎofŠl.† ÎÅT?eyóäüTÎ?—šÙü vG &â¤ü\y@é7†¡L"@nÆ©ìÿt^ù4í{¢jNí³xNmÿLù¤8-:ÆÞ¼hçLì½%iÆÎìÌ,²Å0uªä/ÜÂÅèh¼½Z'BšM[-8³Q4ËæIûsgÿ±?RVFñ£P}Û(wV¨9¢¢Öž|ˆ®<ƒž»3ÒÿJXJ³–ÅÙœZ8xa¯wŠFÂÆ+ëàïfXÜN!ea~}sMÙ_ØžEs™ ?0/þêØ¢·—Ò|õçÀþ—ò¢ÙäjnM,\dÓ·QGx°½«L-¶JJ˜a.:j>œKDÃ`rßU¹”5‰'Ìi¾=gZ\VséE¿F[0+ÖœLÉ&¤ƒ¼hAn Xß-´k•\‡YBtŒMYYó®Ù’Œý:Á^¨BÁ£„´|М¨]Ì? Ü^¤ <+w§„ $:6‚ٜ䞰5¹¦ûs:h³·þ¹JÐg‘+ý ÅBÉØ|ô-v+ÊkfP¦,„É(iÒÁMJ–ɈŽí @6a®ÆÑTŽi×5}cN“Hèù ¦é7­Œâà__iÚâYj}œ.+|{’¤é«²EÙQª!ï!r&è[~i#¡Vοѱ)ÈÚrßËH3œ/-e;FÚmPý†¥­7#¡æí¥%='6„(¸p.•&o—alúBÓ_³øÜRš¡FØr{Q]VÓ"ãÄúc)aíQœñxY"q–Ÿlàú«PŠjÌmhñrnò¦ú9–«¬³w¬O$y«ú[8M<,䯿Æ@j–]ß›ÖÛ-§?h5½PÊ5.ú°¥ÂˆZE,¿Í±X]jRÓ_Ñ-MrȃÑbãPÞ£CþÕBÃ\jòŠ¢v°\=¸HÆm›Nå+;?ìé‘'¯]YM§UÁrm–fô8±˜Qi„kËv³{\ ŸÇþŠœO4sf¡ŒŽ&íô„Ô‚Ïàv^ü ì-HtOˆŽvSƹ¸Ø|Ô×õN ÑD£qÃôí¹ÅÔ¢æ_¹:ÍziDb8åkœç‚YZXŒ Q >eSXN!¡¹É³[±{HôM_M—hÐämu%¤œååQËÒ.ÄqÐ ¸²ÄåÛN¶¥ß†¶¨Œ‰¨Ó²QŽMUÞ7¢LS^Wr úW^Û‘VtŠK¬èXr³&ù‹¹oíF¡EngT.˜ëNDç•×ë:E Ð’[~PñçQÞ…b¬ûFäûíµ+gvÖüVóà!Y`Ø¡¼#wÛ…š`¶f“‚É:íEÿNÄ5÷±h2à¯È> Å‰ @bÏrUÓ ÷D&?+.jÎúÆ¥ßé(ÄHn|ÄþЉ=(W5g©÷…åÔy™¼–´ågæé} GP kHNÔ½ CoÂÃQ³K{ª€òñ@B @Ø­•Õ´æYçú.Lg“æF‡f ÉÂ@å#×cÑ|ÄÎ ±7Yªéä@塌Whcãqvš  ùˆÝ @¢cÂ¥¿5UùôΦä”eYbXT× ‰Œ²sËÚŸ{‰ŽØF±bïALHJ3[ðÝOf]œˆMÓ¿÷#í.Fù…V~²šõ]£‰¾M£@:ØüÞÁ¨»ƒ12ùæBá}ÂíüÎ6¬|zìâ9;Ø7$ö ×Ë1оעD^ößU"£€Nq‰€$H  @@€ € @€$ÚGÍ=|¸=ŸÏE7€v¨äõõUáÍ -ªùø'& }  @@€ € @€$H  @ }›ìÆ‹Ÿ^l½ øþùˇ·ÓŸ¯Þ¼Ýpc6ggÅ$€#:Ú;îÿxð?üü×A_bøýó—šÙp\G;Q03ç AôA@€ € @}Î ª™¼ŠB‰gQg ëç-HH4UÙc­}Ì'¦_½¿ŸO R8 šiÂoSNs:‹[Ÿš¤ÙùçúŸ¦Ì.; WËZЦœjöñÃàœÝ5I-ŒýiúìòOD*  ÙÕwÚW½ þ4Íïm!OÓúf_û GÇÊ nö÷  ›`·Y¬Oþ°ÒWoÞ&üêf/}Â<’ƒË®I°úŸæ|(üöjÙB€€DSŒô›8cL4ËÎ}ØýO~¯?èwš¹Z¶p‰Òù•µSËG}»¸HS„MÕ͉»T9+MnÄî3 ÑvÖØ}&  i'î2H€ZŽHÿZù}#H‡óýó—[oBÈÀá´Ó˵!2a}  @@€ € @€$ßÜysû~«í )_ä‹—¯ß^Ç.üËõÕ»ÓMÞ `½uêÆLòîÿ'§bÏ÷ÉËPΚèF$H|gŒ¹þï·[o 9ý~k†O[om>=þñðààxitIMEÑ3¿ÇýÒIEND®B`‚fox-1.6.49/doc/screenshots/arithmedrill-screenshot_small.png0000644000175000017500000006545611637250333021211 00000000000000‰PNG  IHDR,bÕr•bKGDÿÿÿ ½§“ pHYs ‡ Š&îùtIMEÓ0šwß IDATxœìÝ{Ç}'øoeeeWW¿{Þ 1 ¢ºA=(Ó²‚òR'[~^xï|^´m}qwÞõèþpÜÅ.©Ø¸‹]oxN» _lìÃjìãvϯµlÙ´D”,Ézq¦IQ„Ç 0fóèžžîêꬬ_Ý4‡ƒg€Á£ù Ô꬚‘ðUfv毌W߬õ­4MÓîmo}û+ü«o5æ/ÌÝí+Ñ4­w„ RD (TD)"¢@…p‡Ïi'ÒÍFƒ_~¢Ö¾öå?=øÄžw¸xzjãSMÓ41:þxmyΈ¥Öëóîò<”g'³Òu½f])¥T´ÃçÌŽ`Ñg.œžª~ñ÷„ªE¯T¿ø{û ûoý4É8¿ÉOHÚ7ûYMÓn§µÕÏm¶×–”·½"=W)¹­F?4öËŸzê—?õÔã‡Æ¶øóè/ývs½àýø±“ßþë×_ûæÃO~²úÅßxäh¼¼{ÜwþúÞY{èÑ‹§§~ø­/|"zsö¯ãÉç>¸÷Dõ"Ñ;½Àßÿ­§ô¥ãÿäÿ›ïÌ}òɱú‹ïûÒ·¶1öüçÿ胖eœºÐˆš:uám¿ÿ[OýÔ“cÿÅ‡ÇÆ‡Ó¯Ÿ] ®\@÷tÑgîÍl÷욦]W_yÊo_šy])9zè#Zõ%ø…ÒÇ)„»¶¸•!áÇŸzßé×¾¼:Ö’ËÖE÷õù™¸¸ÚêÏ”Ÿ{è/ÿökñT€ÈÈvó.Œä¹â§>óçŸÿšoþùÀ#G£ÁàÁÑÌÁ½iõ72ÿö_ý/Ÿ}᳿räéuêS– ÔšÎÍÒïž\üýßzjÍUùõsÑ»ÿè'øä“—ãóþ¯‹¹ø¿ûâìIýÔ“c‹5Og‡ÿñÃÑÁÄÏ~d þêïç„ņrâ§žë¦ÌÑãŸúðLüõ·æþö{ºðWßš{kfíú¯Þ÷ᇆÒIþSOŽ[h}ÿÜêÕ¿tBüãŸ~dßPbn©õïþâ­§Þ7ü»ÿ©º•ÿŽ4Më¢@‘È‚³õÕyé®E¯×æÏxë+›þåO==ø£/~cã‹ÿͧžÂ§žúü¿ÿ«óg7ÿ;¿÷ÿågþáÊü™_üåÿö#?ý7¾Å65ý+¿ñ™ãÿþ_wŸ¾ñí¯üÑçç>ÿ;o|û+§Nzüý¯®¾+ žz´ßSÊõü§í¿ü‘³µ¿ÿáRôø¯¾5 :ÿç—N ÎìIEOßõ‘Ë9õWúD?ûÔØwO¯üoÿÏëç.¹›®ùÜr@2Á¯œå®å# ìJH|øá¬iÚ $úÆ„“yäßìß{¨yiFº Î9g¼>Æ[_ÍæGl'Õ=xuþÌé×¾|úµ/ŸúÞ—76Ò·çÁ‡>ðÜã½òÊ+_üÐØÊü¿ñ™ÿuÓyßéa]<=•ôfÒïû…=ž¨~ñ÷ÆÿÇÏKž³G?d~€½ò¿ù›¿iïùÐ…ÓS£WfâûÒö¡±Ì‰éyÎØÇÞ?Ô—¶¬µ< /O¸ÀÃ{sÑÓ¥5oã¹Û`åÊ‹‹õ¶ëÑÒš×X—ÑgÞ›í†ÝR]Ø“úÙsââä\­ÛÈC{ÓÃy!Nž_{d_@­é}WÿŠ/Õ<à•×燲ögk‡ê»r°¦iÛÓiÕ•ôj—æ¼f Œ¿ó-!Àk7•ßéü7ß]~à'76ò ÏçG¼úê—ƒ?µñõÑ”ŒúVŸøàЫógò#ºo]žÃ²ÕÚéoýÙýu¼{2«{œaùñ>üä'~ò“†a¤ò#3v½%ÿò›s?8_Ãp­)ë-yêíÆêzÀ©·?œ«·;Áb­Uoú+ëhêÔÛÕFge½sêíÆÆ_žžqÖôüo¼¹ØñƒÅš×lË3óëÑ»'¦/R6ÚòKß>ïÉ {a+N£åÿçoÎÍ.4ãJƒÆÕ§ûÚ «®3ßœ©Ÿ™×1š¦mCˆ0T¤:nsUúÞО¿ÓÃ0Ý7L!HºÑꆴñÆæþú‹þê+¯¾qr®oÏo¾ØÚûУѮÌaÿâÏÏ_˜Û´‚áâé© §^û‰ð_zffçZMÓzB¥üùR‘´ãié6<·©%„íµ]ÕiRÜ8°¶+;8Ö\Yà¤ç¦û÷6ëKÝ÷Òý{Óý{—×%°tý4M»/½³p”(T^Ëí =·ID`œ|óù­a&G4‡%½Vù'Rïu¼¦iÚ]SùÚ:®þ–PÓ4힥KÓ´žqí½/Ï}öXùØÆWÊåò{¶ÕýTtp¥Ré~ö٣Ͼtâ¥[½XMÓîo×ݬ…N7ƒ&&&ŠÅbµZœœ¼AsѧªÓÕÊñ €b±x¼r¼T,E/KŽzMÓî+× ¬J¥M¤:]-‹Õé÷ØÅÒíU‹ïdS”S:­4M»EïÑúñ+×ûT[Õjuclé–¦i·È<úK¿½º4_ÚÛôF©t¹{U*–†‡‡Ÿ{î¹_|1z|ƒæªÕjµZ-—ËÕjõÏ}bxxxhx¨T*EµVÓ4ízªç¥×¬_£‡û¢^ÒÆ^ÕûGG‹Õéj÷ƒz<¨iÚN¹F`Kśȗ›û”¦iÚÖéuXš¦õ Xš¦õ Xš¦õŒËsXSSSÙ\öî^Цi7pôÈљٙ™Ù™»}!wÁ¥'€ut+›ËÆ wõ’4MÛ’ûðŸj6›ÎC 5Më!:°4Më:°4Më×ÞKXÍæ¦³z^Óî¦òÖæ×sÙ\v×ýk½Þw ׬élöxá¾›ØÓ´{ÊëììÙz½~»/æ»Þ ×­Ö iZOÈes¹lîn_Å¢ç°4Më:°4Më:°4Më:°4Më:°4Mëú[BMÛU¶¸Ó0Zè´Å5\õz½V¯m·ñÛA–¦í6ï™3³3Qôd³Ù­„K÷øm5~;è!¡¦i=C–¦i=C–¦i=CÏaiÚ®U®VŽWŠÅâVî‚ `bb¢X,V«ÕÉÉÉ-6 |¬|Ç{Xš¶kKÅw_O“““Ñ=·ØxùØ–rpéÀÒ4í²¨Ó´•îU$ Äéêôm½ªôPÓ´Ë&&&^:ñÒÞx³÷;F–¦íf[â8V>V©TleΫX*nýࢇ„š¶kU§«ÓÕééêt”,ÛúàÖÙnã·B÷°4m×*–ŠÛúþn[}¥í6¾#tKÓ´ž¡KÓ´ž¡‡„š¶«lëvöõz}+w+:l«ñÛA–¦í6[/–P«×¶[YáöUbØ =$Ô4­gè–¦í*‡®×Þã6…7]o[ß:°4mW©×Þ{Zj[ù6¿ÝÆwœjšÖ3t`išÖ3ôPÓv¹hÍVV¥G[y°å%ïz/¡¦i;)ª³Å 0•ã•R±´­´*Kw²lƒ,MÛͦ«Ó[¯á·š˜˜ØâñÕjuº:}'wêÀÒ´]+êU«Õju« r¹¼õS…ºZƒ¦i; Üm=PªÕj¥RÙb©T,ukºßôn—îaiÚ®U®n«ûõ˜ŠÅâ;YÅ¢.‘¬iÚÑõ°4MÓîXš¦õ =$Ô´]e+%®êµ:Æ/?ÞV}«í6¾ãt`iÚ®²¥Wã—ÿs»•·Õøí ‡„š¦õ ÝÃÒ´]e[%®rÙ\·üñ Ütý¬§KÓv›­—¬Êf³Ûª‡µ­Æo=$Ô4­gèÀÒ4­gèÀÒ4­gè9,MÛµ¢‚|ÕjµX,neÛÍÄÄD±X¬V«“““[i¼»ùùŽíÑÑ¥i»V´ÝïÙ£Ïn%€¶«[iëN–ÄÒCBMÛÍ*•ʱò±-\®n½VÔeÛz¥­¡KÓv³jµZ*–nKËÓÕR±´õr¦;B–¦ífÅâ6ŠÀLNNV*•-Ž‹¥â¶îX±#t`õ²W^Á3ÏÀ0.ÿùìgw¦ÙÏ~ö6Ÿy¯¼²3Íjw\4¸«T*[,ãP4S¿ÅÆ¡K$k[ru”¼ð^x/¿Œ#Gn²Í(7½òÊ+8r/¿|“mjw.à§Ý¢¹¦M‰³-×룽òÊŽuß4íèÀêMããå—†ïêU]/\>ûÙË®ic9‚0|W¯ê…nþj5m‡è!aoŠâé•Wð —¿ü2 ã=>Õ çŸ¿îÑ1QT9òÎ+Z˜™Ùz±„­äЭ谭ÆoX½éùç¯:7íÈ9²óÍjwÜÖ‹%l© ßÍ6~;è!ánѺÚÁЉzp=é®Ýt«÷müjoÓjã·Ý§vÏ;|øp½V¿ñ1Ý‚|=GVï{õÕwoŠ•Ï~öÚ3Pg»^xáÚ·q^ëõÚ{OKÝÖ{·•¬Þ÷ôÓ—Siã”ù­§LÔTôÕaôG µ»MVï‹&Ë#QÊ<ó ÂðV›º]Ï?¹;-ÅÒSòÚ]¥'Ýw‘i-¶zþy„á;º6¾øžÔTêõ ½¦»ifë»sîq:°zSÔßÙñÕçQ›zóà®P©TŽWŽãݱuW¯hè!aÚ8•þôÓïŒo1hº3ñǘ·Þ¬v—”Ëå(°vÝÃêA›†~Q lÚîw“MÝÜØÔÆ—jw›îaõ¦#GÞÉ©«{@×K–'ÎÓO¿ëÈ«Ö3T,u‹¯ßík¹U:°zÓË/_·RÕ ÖŽÞ8q¢2×+ö ×4ô —N¼=¸óÅ×o=$ìY/¿¼y½U”8·’,Q‘†M}«^Ø\ Bë)ÅR±|Åݾ–[¥{X½lÓìøN¹;«5m'è–¦i=C÷°4mWÙJ‰«z­Žñ;r5;M–¦í*[*q5~'®ävÐCBMÓz†,MÓz†,MÓz†,MÓz†,MÓz†,MÓz†,MÓz†,MÓz†,MÓz†,MÓz†,MÓz†ÞK¨i»ÁVnø¼uõzýsÿæsåryï·ÚmóVÑ¥i»ÁVnø¼u›Ú©fw¤=$Ô4­gèÀÒ4­gè!¡¦íZÑ(,›Íæ²¹™Ù™kNHÕê5¹lnëÍV§«ÓÕiår¹:]pÇîm¡{Xš¶;E uôÈÑ©©)333jõÚÌìL­^‹þÌÌÎÌÎÌÖëÛ›­Ÿ˜˜ˆæÎ+•Jåx%º‡X¥R‰î,]©TªÓÕ(Èvœ,MÛ ã…Z½ö§ö§GŸ9u > à~þ¢›šš*Œ>\/l«‡599911 \.‹Åb±E€J¥Ýn::`ÇéÀÒ´Ý)ëÆO¼|"z¥^«ÏÎÌFi•Ëæ¢ ‹†ÑÁ[4]žœœ¬V«ÝœÚäöu`iÚ®U¯×ëõz¡Pˆ¦±^›~-›ËÖêµ9•Íf·»à U¥b©T,U«ÕèÅjµZ*–T*•Û”YzÒ]Óv§z½å€×¦_‹†~ÑÄÖþñýÙlÀÌìL.›Û?¾[îdU§«Ñ}¤‹Åâtuº\.O–&7sûîØªKÓv§'JOD© €ÂÌìLÔ“ºz ¸­ñ`±T¼qïéXùØÍ\îÖèÀÒ´Ý)úðΟ÷öu¯ ç°4Më!º‡¥i»Á Ÿ}avfv/ŒxåÕW¾ð‡_ØÙ6o…,MÛ nÓ@lß¾}Ï¿ðüíhùæè!¡¦i=C–¦i=C–¦i=C–¦i=C–¦i=C–¦i=C–¦i=C–¦i=C–¦í6ÕéêÄÄD¥RÙTEïÙ£Ï^ï#ߊ>}ÏsE¼^a¬îõT*•g>»Å6o@¯t×´Ý)*MU®F%ŒËÇÊ›žVŽWŠÅbµZí¾Õ-ÃP,£¥óÝÈ‹JÊDªÕꦯ/KÝ–'&&Ž•U«ÕÉÉI\)ðp¼r¼\.W*•¨(ͳGŸŽÙt1ÑG®G–¦í6ÅRq²4¹©{Ý6"ú;zP~W:l,•è+KÕéêK'^zö賫|¬}¼8Yì~pº:Ó½?Å5;tÝ×£*4ÝDe¶Þ³ÿ¥‡„š¶ÛD÷ƒ˜œœ¼|K›b±|¬u¸®~ÚÍm ‹¨‡%ÑÆ×£Q÷&Wp+Ž•E½­nƒ‘r¹üžµ´Ì£¿ôÛ«Kóû2îÆ*ôÕl®šÛFQzMÓv\ùÝ•‹sÙ\Tòø=oQ*•¢‚Åårù¹O1<<üÜsϽøâ‹åryqa1:`hx(jW¶a—J¥îß/¬{yÏ=÷\µZÎX.—7^ÌÕ?Q.›{åõE¯Y7þÅŸ?õæk[ÞxϲÊxáxá·0Ó4íŽyéÊÍ#"QãëÝ^ð¶zöè³/xi§Z›˜˜(+K—ïµ³•:…ñ ÿáõúü¬žÃÒ4í=ì`ZèNœÝDIXšÖóffgŽá8€c¿zìÎ÷¿î$=é®i½mfvæóÿöóÏ¿ðüó/<ÿÕW¿º1°¢{;G·zÞJS'^>±­;ªÞʧnŽîaiZo;þ…ã×dMMM}fâ3SSSÑM d³ÙÙ™ÙñÂx÷ïl.[¯Õ±¡~qt[«/ŒG7µÏf³SSS…B¡^«w?555uøðáèïÛ÷Ãê–¦ífQ½6ýZÔóÊesµzí‰ÒÝ¿£»ÕÆ£^RÔ«×êW½à~þ¢·d³ÙñÂx”V·µ·¥KÓzÛ±_=v½1ÑžkõZ[×33;u"…ñBtû«ÜøÖÆ6£õã…ñïþfsÇé!¡¦õ¶Âxá董ݧï;øðá¨gtôמxùDÔ™ŠúPÑÀ-ú»0^¨ÕkÑ[…ñB4x<|øðÆc¢G_ï­¨ŸþµOo̾§×aiÚ=êάú+ »¶K¯ÃÒ´ÝãV–5Üûiµ‘žÃÒ´Þvãe '^>Ñ]Ó°q}C4ÙÔäêΩßãtKÓz[´¬ajj W-k˜™ýÌÄgþôÏþѼx­^/LMMu×"œ=Íg³Ù³³gggf£¥ ×:ÜSA¦{Xš¶kE=¬™™™\6W/dsÙèÅh-€\6—Íe ã…hOu4é~õZ‡{‡,MëmѲ†î7w]3³3GŸ9úDé‰Ã‡GÀîB„«¿È»æº‡Ûú}ßÍÑCBMëm×[ÖÍf£/|ú×>ýÚôkÑÒ„îZ„\6—Í^îsußš™ùô¯}:úê0êjͼ»ÊÍÝ¥KÓzÞ53%šPï>ˆwуhŠ=škè¾Õm-zzO¥t`iÚ. «5hšÖn°¬!úêpSµ†O·RÈážZ÷ {XšÖÛnP­@­^Ëf³O”žøƒ?üƒ_üù_ü“?û“Ç×ëõËծ̵ÏÎÌF‘-kØX˜ážZ÷píÀ*ÏΔﱱ«¦iÛͯw7$GSì¹l.—ÍÕ²µ\6WÏÕ£iõl.ûë¿þë³3³ggÏÖêµÃÙËE¢Ñ1…ñÂT}ª0^8ñò‰Ã‡cw¾Û¥‡„šÖÛnP­!*­W(.×W¸²LaSy†î‚Ò?ù³?9úÌ;_8Öêµh·3î™u×îaU*•ã•ãwøR4MÛh‹•Ôß³Zæ" ¹l®p¤­rÀ†5 3³3Ñp/* svölw„xï¬{ÐsXšÖó®ÝñZTttãj†\6MÉo\ÊÐ=¾;ÖÛtÌ]_÷ KÓzž^Ö iZo¸Á²†îí!®¹²ášëÞsCÔæÝZå KÓzÛ—5œ= Úÿe͉—Od³Ù\6W¯Õ£Yó³³gO¼|bfv¦;Œæ­ºw܉^^ŒšÝtÀÆßV:°4m7«×ëµz­p¥€pwe€upå¦;h…ñBa¼mŸŽº]Ý[Ntè¶võÇoXšÖÛn°¬À¥'¢…TÑÓÔi¸fÿ(ZÙpâå—;\s5Ãïs±Sô¤»¦õ¶/kˆ–¹Ÿ=u”p: rÙ\w½B÷–ÑÊÑr‡z½¾éžWߨâ¶Ò¥i=ïË6l¸^ÙlvÓz…îʆMË¢¿7pgV9è!¡¦i8úÌÑ{­’Ì5éÀÒ4­gèÀÒ4­gèÀÒ4­gèÀÒ4­gèÀÒ4­gèÀÒ4­gèuXš¶kU§«Š¥âyƒ¦«Ó¸Ö~Æ<£,MÛµ¢‰B!Ú¾S.—+•J¹\Žò":¦T,m<òæLLL¼tâ¥J¥¨T,E vÏ%Z©Xê¾xgÔCBMÛýºQ©TªÕjuºZ9^011Q.—'&&ný“““Q;år9ªW<11±ñ¼ÝsE/V«Õ›8‹,M»/DQ*–ÊÇÊQZu{^ÇÊÇn½ýéêôäädµZò¨ÛuêžwÓ¹ŠÅ›éÍéÀҴݬ› ¸’Q””•»o®³s½u³©X*F7ž·Z­–Š¥jµzs'ÕsXš¶k]oþ»[ð¯ûàÖmjª{êÉÒ䦛o‹îaiš¶ÃvdŒyM:°4MÛa[\Ùpt`išÖ3t`išÖ3ô¤»¦õ¶?üžŸ=[OQ,ûŸþvtœèˆwætW¿¥KÓnÞQƒ1ÀˆÀzÆ`¢·.c6@W¯f€ÙØ+!]ï,7v~öüó/<¿? påF8ÕëõÏý›ÏuŸŽÆoßÕ{Ò¥i7€½`‡ ðÁ Y @H¶„Ä ð0ÀBÀ¢¿¯ÈP„!s |ìofB:wÇh¿Nô8êÚLMMƯW¦½»pã†lØQ­Àê¾uë{#:°4m{>n0€Øå~Þg0$ Æ@d0â„f2fQ2Æ Š…ÜŽ“eÁN‘RP:.,ÆÚ’Œ--“GøÀÖ öÝÉúê•JåxåøÆ~S­^Ëæ²Ý[níì)‹ÅR1ÚBøìÑg_:ñ€béò‹¥b©ûÖääd÷øn ›önÚlx½KÕ¥iÛóØ•þT€É1 B‚!(·H›Èõ1ÛP–â $XÞfÒc$Èv )IŠ¡Sß„$¸u´ÛX­ãŸÌ5ÞûJvJw÷€W^}å ø…MŒÆ7>-–ŠÅêu3åêÎÔÕÇOLLLNNNW§£î®„f´}Z–¦í€#{æJ*p° –´(™` A"ÍRýp²HšŽT|SO1Ø©vÛIv”å0˜H„ä×™ )žV,Î “:«TŸÇ¹̯Þä”Ö­þŒO9òô‘¯lšÃzOÓÕé÷Ü'øÒ‰—¢ÒÅb±Z­‹ÅR±tÇñ^k¸t`iÚ{+ìiàà•žT,„c Øœ$e2°S”E> ‹ 5’†ty–c½º 1@!îÄ8€‹§Ð‚VÁc ëh­’0˜×–vŒ‘OùQd‡ÅAO¾q—~ؙٙZ½ÝmððáÃ7¾ýW4¦‹úDÑÀ0ê(mzk“‰‰‰(ªºû »ÃÃjµzƒ C:°4íº û à€ÁH€qi0$ –ä4gé<2È÷‘ˆ3íÛ«rñ,§ºgí g¸i›Y¹Œ)åó9dÒÌõÌU!3‰ÀÉk@‚ì kÄbLšÄ %2wô'"¦+ŠªkN`EÞÙ*¸!\¢FºMm|kS¿iã[×Ülx=:°4íÚþc!®ôªâ!ÙDHI¤T?FÇ);‚t?(ά}èömÁXÌ¿Žš‹¾|,ïtÚÒXA`#"Î,åúÉ$øÌ“”OÍ&KÇÉmƒr騽ÚltL³³ïÊO½•9¬»H–¦mV0Ø1ƒ!ú¾ˆ°\ù6Ðæ44ÊƨÿƸ¢LÒzì2/1[KZ•V&IsË¡¯bÄÈ`,Î̸ ¦ .Б Î}""·Éd@MÎä6Û!©úÂòÕbËÛâÕ~îsŸËf³;ö³6Íamz÷è‘£;u®› KÓÞqe qeUÌõ­œ’)êe#û•cÜ&6¼×Üó(˜¢ ¯&©.¸rUePmÀÎÚíŽd-2áw¤•N£­ÔÂ2¹\!Äx:ËEMWÜâÍš‚t‚Iæý?ù‘-^s­^«Õk·õײÑݽ£½,M®DÕAà€e0ûJKŒ›”L°¾~ !;F,k³¼µw´Î£Ýd¾Ëcž²’`Ü$¸¡Ì¡$[kÄÒv€ƒÉ©â&CH°9äÕ¥òÈéIXInXh,¨¡=lýük¿Û¿”{,MCÁ`¿b€‡à€¸Ü«"Ç!LA™<|€RYä‡ÁÇè ëëó;ÒZ_‚¬û.³FúÛu—-¹,ÁÙˆã5Éævpj•;hÇ™ª7SIÞjzÂæÀAJyKÄã<“²×¥ë8 ä“GP.ë4XJmuHx_Ñ¥Ý× Ûê–µ& ¥K?]ƒ,í>uÄ`Ïïž±â f$,–ÊÀN!ÿúÉv¤ØYžf0œ¶l f»Üõâ}ÜLS»AŠkÇ6ãJ6mƒ,¤™Ñ ›K©¼²K!ci‡ &|ÏS yÆxRÖ\a(o¾™4°¾&S9å¯sÙF"µÕÖÔÔT6·cßÞ#Ž9ªËËhÚe3ð4`ñØð Ã@DI‚S:ÍsC*y0ŒìSn-–Jujó¦Ñ„ë™™´ã(’¨]ðœ„Íä:¼¥Uæ¨'Ûy‡{åÜZªoXðÐ&×£)—â>šu™ÙŸ¶ågÒj¹Žé¼õ¦u D¿h5Õ–l.{uM˜ÝJ–v?‹úSüò+p€ ÆA\°xŠÒY62JɇylÀA2•ˆ î$wëŒsN¼}îí¸c“_wrIÖ‘Ê&ÇNœ×/É•.çö "¦b ’éöŦx0é¥f ¡­l–#?‘VõU¶âÆ H'}W!Öä°MÆ[ëRØ”èOÞí_Ò½H–v?:`€‡ˆ_YcÅB€l V‚Òy–é£ì° û‰Q†5 í†i‰vˆØžýèBk¡i9Xã°ÏçÝ3««u7?`#àK¯-Ø} u0ÉÈ ït“{ÔvKH¹îqÛVÖ*K$Ù\c­é:I·á#;$,5Îе¾óÆ.¹xònÿšî=:°´ûÄåc ›3.ˆs³I¤Ð·‡²ÃÌ| ‰¡÷[É~j]ð-›YvHÆ,Ѿx2ÎA¡e{o7ø£K«Åž½LÄœ<ë,§ö÷¯M­J¦øO;Þ9—sEia»Jr&æ]eK2(7$(%úBÙqV=g\­Ÿ¬28lÀ6B÷nÿ’îE:°´ûKÁ`ˆ…àœ8ƒHP&prâÌNQÿ^ˆaÎr¼Ý×Ö¥7)¾Ïâ¢S¿d.¹ñ!;³¸œo&E˜€¡P«»²Áœ<ê ýCvûÒ¥Ì>Ž€ÃbC ¦Í/0ú˜ÍpK"ã´.¹,!˜Ï¨CJ„h’Ò J½ëôW§Úýeð´`l€L˜È8<™ÅÀë¡¡ƒ,~¨ßÉw†?/ý÷,ÿ„‘Q£µ²ënù–%ÅË;žÁ(I†ß'»"ÉÀ)½?i9ÅÖWAŒ‡v¿Úû€•l€ä8 Ãi+×oàï;{ø1 ,–²¹-ÚóJÄ«A³ÑÔyu-:°´û !€à”HC¤•Æžq6xÛÅ,þ˜Ÿ}„?ôsX:«ÿý‡‚Kóvè)÷¢ØÃIÁ[„p IÎTû’äq›§2Ѭ‘ðd«!ã–í.J_"t VTûÑ£ñ|¶€RÞŠZÿQ³}QRu¦öµ*\Ï·A¾rW=ùv³c9‘̉[ù«ÓÕJ¥UÞ¢ÛwðÒCBíþò"02¶ ƒg©±4a,k ¾¦`™sø Þþ;ßXP±ÇDÒ1%ƒ“ô[ˬ_8®ô3›YÄ&#ØNpúE«Áx›u|™ÀFœÔ™O:Îް‡ƒCÖâ<[òÐ$•·cÉÖWíüL6æ6p¨ŸÕVc!`z¨Q§-oåÇŒê©G™U*–®. ½ *RUIŽ^¹fõ¨ÙîãM5àïXÚý…•c¿•k»zH¨ÝG c7ÀÛ`6G,ƸE}},‘eÈf‘²R¶•+ ðc±ìËzàB¾8<ž4³c±½hôPÐrIº<äL(S¤¤lòCÓŲÂ_¯ÇB޵Æúå÷e39²ó”I§Y~@îÌy ï`ßÇb¿øÏ¥•7[ ö`¿•u¬¤hÕ]317óv½¥›ÓÕéÉÉÉjµÚM¢«;D“““Qb\¹+×ÕåŒ7¶p¬|,jäÖïÖuÓt`i÷‘}b!À@Ìãàq†- ³Îòô—(Ö‡ÁøÙÇÌ¡}|ÿÁ$Ñ÷Azàˆ±ç#lhu¼VKBµ¶ËR|$¤K0ËGkI®¿µj÷e©oÈO8vJtÖ±… võ-€+ïÛÿþê…\Êú´Ö.#ŽŸpq»}öMJ;l`0켕Ÿ´4Ý‘`të­nõè°èA”Y¢ìWV,»ÇtŒw…j÷‘§ fƒ¢ï…¸Ã’dòÄR„„$QòAJîå÷!‘E’ß°|7`}è{\]øf,ÏZA2aÖ0ü¸ï‰ü}ïKþ )ÎùY¹4™ü¦Í`¥¸¯Èš;·žJ;;_ö/\bČܓéóƒ†D>m®7üÂ[^1»Í±BÕÖü¥KXV(ÝüOzÍ¢éwï±é•M‡]]g=jùnÝüY–v¿(Œ…Í^1‚cÃNR2‹Ä03FÈ|è`ÇÈÁ“±¬1ãÌìGfT:¢½˜HŽ­%³ÿ rúcc¬Ó˜ç©¯ !™§ä²B+›&kÔR.É8 —.9#¨³ÒQ*6œlƒÇ±Ö9uFA©CÙX†f¦‚þ~DM… tVWÝ%×öôèçt`i÷‹}7`0À⌬s2`Ûw fܶ¼%ð”™L#D 8|ßL@d‚¾Gć?ÝZ˜JdF©þ­×bÂeõµûIÐIjs~¾)ƒK°Ó–Ï}»ã™HÅ2àMÙ8'bIÃt:‰¤@¼­:±¤„HäU0{úcÃûüK5kLqŽÁƒkÙ«R ]ëtŠ_›àçÎݾ m‡© —{X­q7IqP,m橹„"°ó`ºx>LE3̘Ù÷pbôãÈ ýŒ•î dÃcŒ¥ó‰‡>„Xö xŒæ%° )Rã87ç¯Öã+®JöùqК¢ ó\^b)NL`ä1y¨øHgäV27=£81I<¡œ[Z†µkÝ=,;–d––pRC¶Å„HÂ`,sÁL"Hf€ ÁHQ¬ûm3 ¶§È—ng]v:Rv”ïQ ‰@¤ˆniÉŒvÇp PdÛ`"N<Æâ9 žKaÿGag :¬ÁŠ 3“0âHf[s?`‹gY{"›èw:žÇ¥@ß°µ¶ÜI§ÙÁ}±Ü(¤2%aý´ŸaHg;äžÿF@ŒŹUKq¸ž™p‚•sñ¡¾öëoÅyÒïßg-½…‹s±~á›d=ü j wû·u/º_‹›Â‰9ÉÜp:Ó—rl.2‰„`B0Ι Æbœq‚‘b¡ÃRèp0|Rc€ôë ŽGå­·<é6”ÛòšhûÍzí‚×iJ©7¬Þ»fB’`ˆj·à&1;F03"øë¾™62ÓC¬?€¤ÔX,‘CH£à±Ä@ÉWnÀöPlÄÌïã³!ÌÑRÛšáÃ#´Ò!O¶±ßþ†__µ¨Ñ±MŸA™’]8‡Áµ¹‹Œ ð$ÇÒ"˜¿|Ñl,·ß÷±ø^àÍïdíp5îë!á5ìòÀbŒÛv~ppphÏþ\*ésÄb‚cœ˜œ§f[InxàN*Ž0ä&lbfLÁÈÈÀ0&±ÐR!ÖHyž„ò[FTDµÖrsqeîìÉÕý÷œs3XRã&¥’,.0 „ ,cñHQ‹á2žµìÀaB ™bCš‰4Œdà5¼s¯Ù™Ž9(ÞaÅjo µh.Ï™†òßœ³F²(ü8’§„Ah7M·ÉŽþªe ¼ùÿªåf§¦bcõ%ö@´ÖÖ~ô_¤Ä~–\oÜR`E+Ô±¯ó*•ÊŽ÷W®â†ë¶¶{Ò]XÌùÁá±=úú†„Å9r”-ln‚³D2–q‹¡£Ôº×ixíPzë ®K$I¦XhqËà1ƒ‘Á ЇŒ,€)Á„°ÁâB;L'êó3Þž›9ªÙrÝVC)=B¼W…dà! .ˆ,Æm†l¹!ß÷¬ÔÒßäÌjZ,˜Œ…ÊW“™LµËP»e&÷‚Y ŽiÁ>ôqóÂ×ÃDÎÜÿsÁò)cÏÊÁ©ÿ?)Ͻ*æ›~n*€©à»¦ãtúÞ»ô½öÅy¶êÆ*4ÙÊÔE›X‚g¦ì‹Ô\c‰† Òv¦¹ó[s¢·¢…TÑî\ÙƒÛ³Û& Í(°®¹Ý'Ú´õ•¨»3°’©üàÞƒ£…±”‘„€0mn a™Ìv'c“ßt› çkîZ£%·DB8ýƒC#ýû„“àB¤ÓŽ`ÜIEg‚£ÞºïRGÊ@6›í¶×X­/¾ñÝïuZµÕµåÕÕeÂJ2SØ–ÍL€›DÄD)ßÕYvwEkÜa0„Dc °m$‡ÉexàÇa1øfó\๦ó!D!,Î:+slõfî€ß\‰=ð`‘Á˜5@ƹ$jsæì_¤ø#ŸÀú“Á—áùf¿ vÓŠV¦p+7ÂWN·/,PÝ#_@ ‹œ!×gÉ7[“j"Ž•Kª/åtní*·æDñôìÑg'''+Ç+e”7®_¶éÜîÝ6WŸnº:}ëæw[`1Sô=ðð#O8IƒDŒƒ [dÛIeÌoüÁwk«M‚Ý÷ØûÜ“Ng( ‰nJÆ1“s %cœ†Lž IžÃ7«¯½ñ7ΜzCœ ‘L ÛqÇNô%¶Ž;ñ´bRu<„@)‰T`ífCzÒm®{í¦×^½Û¿­û˃!@H2„'‰Àgh{‹ ÁéCÀ tо„Ú"„Ä>$`F o†`œ°REþqÆ3YÞÿ±Ÿ£Ú9¬½þ¥à öÄW7ÎsþÐ1©L‡;C1o¥½´¨¾~ž­®#™!»-E^…¹Šœ&7XY¾rIö(¯LÉr;°5gbb¢R©tã©X*â8*Ç+åcåéêtµZ-‹¥bé8ŽßÉÝ6/xibbâæ>»«‹s±gß¡‡yœ3Æ…ÍM!â)›Û‰ÌÚúúÉé¿_YnŽíÝÿäG<ôиã$À˜ =„$ÀHÄM2FA›|’P `ÄÈ £``&k,Ï~é¥W^ûÞw]·‘iÛé©ln(egÒ6O&â‚ EJ¶:®™u…Ì—ŠHÉ@¥3nÓ¼öz«î6+ÒóX¨½ÀÇlåKŠóþá-J’,ÖÇò¶`¦0 ¸µ9¬ [s¢]5ÅR±:]-+WŽW¢xê­»mºW]FùX9êúu¯j[ÓX»*°ö Žï/b¤l;-,Á­T2™OÚæü¹ó3gO‹xòcOýôÁÇ%ÓB@Èx ¬# òá{MP“ RH€)å2Öʥ X¯×¾þÕ¯>9íJÅbNºthx,ž´íLR8L'†$£¦ÏydžAÈu âÛ²‰¤í8NÖ˹yéI€…JÖ—ëõÚœçéïo§Ë+°˜ xäû Z„æ¢s¨5ø¾5ô0Vgá-˜#ïóg¿!˜‚jüˆŒxÌEûì_ŠÇ)=h¶æ:?8ÁæÿN=ø3¦Iíõ3ܦÉëLAYƒ>óâû~ì›ü‡oùsžÛXáÌ$jÉÚD ,Åc>uÖ¥•Õmfy­¶´ó—–k«*=zK ±®·5§ût㦜èÁíØmsÍ6ßµUh›CÑÝX¶“ßÿhɶ…“Nà"žÍfãaüäk¿´°z xøÈÂNszâŒIåù²C<ô(`^»Aªãµ[R)¥B‰Àˆ T‡(”ðY«]ÿÚ«ßX_o(•>Í:¶#b1·EŒ‘ïöY‚ R¶X[¡°Èç Ò'"…¶ŸRª­—- | Ý4Sn{î[Â’¢¹ú^lè\ü®˜LìKÄb¶‡‘ƒ\ðÿ–üеxª“µÁà0Þú³`e¾'‚jµ•¶–¨ÿÑØÅ7;‰˜l÷»Î@~ÿ{«Óuc‚C’Ž“&E–' æ“úÈÛ`##v0Gk$; gš‚ÆÝþmÝ‹vK`ÙvÞ±UGòXŠÇd:Ö'ö½S§ciçé#Ÿ°œ)nó>&•T-’ŒyFmµá¹mRjmõâOž©-Í+éJ‚OŒ¨ÍBH_5$q”Êó½t~lìÑC£{“¹¸ÃÛæÌBBp 7™#ÀXL±Ž}[)CòP´Üó<%¥ôÛœÀ‹$Šb¼£ÙŽ ‰|"fqÛ&n°Õúâþ=çú3í¾Üð‡¯7O;unæGµKJ5ïöoº·Í„ƒQHd@)Z÷XÎ'jƒ_2 ÍÂaœ\A{‰ò?k¶Ï(WÄÈ‹-|ÓOî‘_ÿ]»vVX©Nf(þ¡_ŽMý¡ßjÆ»ã¤ÁÇØæç¾Ù<ùFF0ùÝ…vž#6¥o×¥÷5‘ÊB žíC³î¥ö€ù¬C¤B¦f—3CÙ•“3}û[îB˜±L_gn«w~¾¯ì’Àrâ ŒÔKäDœ­œo5Ö—>ðÔÇ„ Ù‘¼Ã¥$I¥d«±Rk(Ù–^ó­·ÞZ\XnÖϵƒ@ œI)UH²#)ÑðA*™Ï 8Îå’ŽÍ Š[Âá–0}˜)'Ÿ[–ˆ“+´1f Û28Oð¶ïªªãI¿£ ÀLF!ÅÁ}Cª€s0ĉSªIíÙ™Óä«á±Ñ¡Á$凲}ùÂþÎÏœþÑòòy¥ôîÅ›tDkÖC°€à3r©Óáq.ê`uÍý–q!î.ûkç±ÿ'äÜ׌‹'­æ 4¤Iäs'Ocy†:ž ”Vh&N~ÉßûáX*ÎæÏ)'ÛäQ§æÂ50¬â9çQ«êÜwÜô0ã)ú IÆK0ßCgeÕ•?·_'–~fo¬ÜÍßÔ½j—,Î@ 6797YÜHÏ.ŸeLŒí/ `J1a‚1xmE¤€Ö܆”ë03sò¹“-·¥(ð ‰)’pÝ&…ð:ïtg’éÁ¡ñÂÐÞ½ý#¶±˜Ü†`Œƒqa ¥Š1Á8WLrprF ¤-8ã&3mP1ÑêHå{JA>…©¶°Q*„1+ .‰/×—W.-^Ø3"’¬¿/3пçÜìÉ s3õµKzßâÍ‘¡ŒË•ƒ7„cš`}ÆJ s’¾ÿÇÖÞíÖbâü7ƒVͯKô§Û3õxÎS‹g‚äÕwÈ_~Ëzßûíx¾söïb«¯uæ¥:§Òã&çq&ßnð87’låT=¹O:–ã©e‘ ÁMa&X³•¡¨#Éób9X¦X9'¡X2G–Akçß¾•;?w—•ïØ/î6ØXu‹Ù-E¾‚° ÁŒŠ qžËfÁÀ¤ävR…MEm „×^ö”¢óÏ<õ–ô=W…d@)EÕMK¢˜)ú÷ŒõïÝ—ÈK$’ n3ŽÃX´[†²LJÄr»LpÄH )ɹ@X”´ÒïÈ8cm¥LÀÈs‰›s˲}<†?úäw«ßúÆ×þö‘Çé)žî:pèð¹3?|IëuÓ&ºxÎÌ ™‹+ð=öý¿m/]ŠæMÎ;É,L·Í³p]H—#‘ò.ÌðD;Þ7àŸ¿ˆK$ÒœÙJ*Ù<+¹ÇTƒÔy"4ËMf3žD<Õ†T€¤K,fušèØh¬zC¢SWtÉk¿üM–¼ùŸqã²ò{6³ªÓÕjµzŸ.kíP˜%M$#EÌ₃1pÓ!Z{EëH¦Úm¥šoÏîHÕ”-î’B½¹JW-àÌæ‡öR™¼mÛ\pn3[0"“ ŸÅ9ó8wÀ)Âc``àn1œ1¥ ‰ÙñtH*ð¹!˜WY ¾"¢˜T#ƒ¥2²Ðl®Í7/ýÉ6ꇿ?uêäëg‡‡2££éõwÒÞ3wqæÜ™·5[Ûp>Ä@°C"†£F÷™IN¶ãƒ7›áƒ‡• >'´ Ú|Õ :ÒŠ§®ç¿þKÚÁž=ñ$ókgÔ‚B]q‡QBY{²1æ‹«¦çµ¤ã]tyÀ8”ÜëHÙdÁâµ%•±ƒ(!cl;n`™d{˜ OÉ]òOóFŠÅâÄÄDùXù¾ëa5›k ’)0«PÀN2Ãç Ï#œ € ©|—B¬5›ëk-×[猻ä‘Édà]VB$ÓC#¹|ÞÉÇ„ó´•T†äƒÉâ‚sE`6g)0Á,â©@‚˜2Èæ&à+pÎÀHJ&é–ëû’03¹ X"f·ÉSF'“J1`nþ\:-F†ö}ôé‘Åù¥ïM}kyý­þÁÑþÁ>Áíl~hdpäÔ¾3¿¸èµëwå7ß“ 2@’I&œ¾ Scñ‘x\Á`¾„Õ_à¬xδ–¬¤¤ÚŠïëG£+o=¸/¸¸hžUƒ1É—Y‡˜=J âÑOÂNš+?l¿ñU{pØÞ[Ç…º»;!¬4†>ôèü÷~ Z’KX1êH/ÖŸí¬4ÑòØøĸýpJ-¢P k—üÛ¼îï»ÀòÚõ¥‹—††öPÀ””*ðÒù´Âz»YÙ} AŒsÆ…oÒ"…œ[P®ï¹gÜ qFJ5Ö¯±¹Oij£c¸Íma3R<ˆ“‚ãˆ8cÌ10ŽA Ã&Iapa‡BÒö•)ŸÀy´®† ¡”âƒÉ“RJ²C,TŽ#dH\šg¶J(OÅ-®TòÜÜÜ@.)ŒÜèèÀÈÈO_šŸûÆ×¿GtöÐáG¥J¥–ïpéêß7êoëý=[r¥²»° Åò87™Ó<@í5ËwI®uLóÑ;ØßiÇxÊF®¯c§ÙÙ7(ïÄ>úß©3oš'ÿÉðÒ¼9žOÔ/ü8‰=ÁÐòí¿çÃ?oµ1Rl}ýEÖ^µ3 –À÷NŽ3ƒ±ð%S P#f3òÜu&ìþ¶´ÒI¿só GKÅRåx@ùØ=:ŒÜÄEî’Àpòäë#Ã{]¥œ &;K£CC,§ÎžÚ;˜eÈo3WÒÿßÞýÅØuÜw‚ÿÖïüN:çžû¯ÿ²Ùl6ÿˆ¢(Š")9v¢qÇÊ$ޱÌÎþÁîC’A6 0Àî<ÍÃ3ا}ñx°/ lÌÈf gÆð±ìØN$[–È–LQÕìn6ÉþïíûçÜsêÔùÕ>Ðqd‹¶µ^KÔŸûyh\ž tWÕi~»ªnUM-âu¸È²f›+Q/xЯ‡Ó™…Ùz»eLÌQÂ&&V9£ Ò±f’ ¥5:#DTY@ “脽8'"Ί0Ha ˆ(Ò räPB„IIè$‰*¬7 IDAT´•LgjFô‡›wöfV†£Ú±Ååÿìw–7Vo^¹òÍÖT<½´¤ëÓEóíÆÍ›7V7nô{“âÏÀ °"çÐ(\™wÃÊRk)náp=¤É|rëz¤ÏðìIksmŽ>Wܽ¶NVÁ|x:ÅÙ_«†Z®¼û’ëY-3ñ¯ü³ª¶Ïœ…Ûg㕯âÎ*la,r8DEÁÞ!ev4•¶È²pZûM—îëæT8º^_,z‡tâìÏ]Á·n»yßúù ùá ¬ýíÛ‡‡ÛÓ­cRaPR#Õ‹s§7nn>󌓊t‹àPk:lõ‡wIT‘!*¥b@@Xö‘1i™D'X2^ qÖ¡&1DG‰SÂbç˜5ß?»Ä¦g¼ˆs¢ÈZ!€¼OV¬f EŽ(€äV3IÅoª¾qo‹5fSC€ J£›gÏŸžn}÷êK«×__~ôäü‘©.ë3¦Ö˜š]}ã•í[“®ÖOówg6èÖÚª p¸‰qï $‹h¯t‚Ú1í†ó3#1SºÙÜxãÛòKþíÒªn1û1^ûKÔD™¸Aem^n¹8úËäǺ?Äök5»Z9’¦K¦“ >‰ë×è@F$Ùb¢ù¤¿ÓO絜2zOô±V•„òé…‚ö㸺ú°[ê}çCõŠ7^½b]ß¹\Š<·îòÓŸîïön¼¶ŠPgY—BǪO¤£0!Šjµé£Ó³P%ðŽÔš"M“¹©–‰¹$ ˆ³ÅXö‚ФV"˜µ!Pk‘ÀLf&ïîG›6Ƙ¤QO’ˆtÈ&æ„™!iHF!ÕŒ‰LÒ¬§Ðr‹T²³ywk{»×½cK›W{Pý¹Åægó³O?ñ›×^¼¶sïÞâòÂÔ±ÖòÙ3Ï|âÓçN"­}Ï›ÿƒCAP„¶ —[Ø%B±˜?‡Æ˜©â‡Ûèu\–Þh§ûm}ö¿(ëSâl˜wãÝ—e°FÙA8µäjËrõ£Þµüî·ã½oÐÖ5¿ý·²x³K ŽjçÔÜ'woàÑvÁ %R”­†¶ÝÒ!§Q£-ÎY•ÉÜy,<‰ã¿\4–v3½}xzX¶övnܺyþ1¶¡>(v¦Ož>zþ…oëüãg’hÖy2ñœícRm¬×G—NÞÙ½é²#¶…3&ÍóYJn’¶6Ä̵ˆ:ɃXç4*¦PŒ'”V3+€œf–R‰xÑÌ¡w…¢Q!pØ:!/¢@žÁ@%iöÈ=%Þ‘“Ä!Øz{GS¬ ˜•ºúÚ‹I`/íÓ9¹ûbp÷z|åËnî2jä»·Ýï©ÊcGã”$uzöxyìѤÛ¯_×uÆØ 7Þµ˜uð99Š#¢v”ì^u÷&·'õª–µùÆkÎÙl<–2ï ¶Ï>~ÞØäÛ/þ dKbŒH³=……#­¸Ö ‚VĉÛw4”hv¬a—$5R±®¬ä¹”Ö!Cåà2‚spBŒP3k° u€µŽ˜ bˆBfªE¬¦tÈĤà,„h„,$!3´08S#Ž•ÞX¿û·ÏgóÎÚÁþ~oÐqyéF±Òh§Ÿþ•Oœ=qéæÊƨc§§ÛI{a~iîÒùÏÌÍŸÐádíR %%@ Ö!;„s Så½8È¢PK%Ö––SjÏ…Á¼¤ ×l`4êK¥¦f§”m4j­xîùïýåÌb£Ùhš¤\%ŠC]V¥Qlz½žñ@U•üý®…åÓ­öL³ÞL"æ(®‡6Ò”@E¤¬P  œ’È{CPQe½ˆQÊ{¯5y *òBH%D𢈴R*Ž™¼"® œ¢ÀŠtP• ¨À)ÒUàËÊIÅPÒ îÝ]e]çŠîAw4ÎêufRã@Ò2G†§[SG—yíû×w{w—æ§“8ª|ÜnÌ„¦Ñëí–eþoÊûÇ ¥N*Rð¡B¤5ZXÔº­05d¦HZ¡nZ{O׎T7ÿÖ'u=ÚEÙÃò¯úÑnÐZ.;߯²=*Gb3m”’Hé¶«MéþM×x\]ø'Eë<Ïý9ò„Pé»¯áØ³”½‘÷Ö’Ç~£Ê,™Q¥*/ehByt!˜]Ü\ Šx^ÓÜ"‹W‹O”SG¨ˆÔÆó·ç>ûÖ’O+ö>TsX?´±v#‰ôÙ'.ê ìÍåSgö;Ïýåùÿú˜ñ9yb Àµf½å*wâøòhØ¿±ú}¡k-ʳû3Y耀Y¼°"Rd‚Hkز0ŠÄÎT„Y©–&d0;"í½BM^\¨½¥È{qÄ$ΕS@ÄÄ ›ƒ2nÀ T@œœÔUDLðÆyä¥u~°ñÆ*+œ9Ksj " ŒµÍÓ3sÓ¿ñéÿü¯¾õ囯¿|öÂ§ÓÆáIÌÙ‹7n^˲É15Xó²œQ (¸±ìnÙã']P‰Mu£G·‚ÝëÁÌ"º ¸¡¼øîµ`¸*»küøï·þ< ƒÞa9ÏTZ)~í_EQó—kG—š&0ÚKãõo†·¿BÛwã‚`äÍ•àØ’=Z:YìߥN…šä×{Éã-õø¹*WQ4:àx¾ìß ‡ïô#§.=ÕjµÞÕF{ÿøpV^äWV^ÔÆœ>õ øƒ]}pñÒ'®­¼ô§ÿþßýîïþ÷6b¬r •r@ÎÑS—j¹Í6ïÝÇ$ÎZg¥²pHY‘ÇqCPJI”Ràt¤¹r"Ž-åyÁZ†9s¨­8£, Æ•‹4y'ÒœƒH^D¨ð`ˆ0S^Â$œYGˆTÌJl%’ê°É™•É «Ià,ÔÍ7V»ýü™_¸ÜU&QGĘ žš?÷™ÿò¹¯=wååç.^üdÄ á3ç.&Qû¥«•Ûú5À-ü`wŽÄñá®s=ݪ¾,v+ˆ[az 7ʨÁJ“CŠ¡„;«¼p1xñ•ê ¬gÿ«ˆ ž¦Hœž/mÞùj mG'>å·¿§ /”Ãk4¤êÆ>¶\î„ OàÞw]FöÔYRƒÛâW£`X»Œ{×*uyVÔï°FÝ^·Û뾫öþñ!þÐÞÞ®2ª^×Nëv:¯Ýxùø™s "]AiQPGfÙ¬ŽG¾âÉè4ˆÒæôtc6©·æã@Í:äˆ=‚06ëÈD™ 8$o]VUà}å,W•'ˆ€¼G)òJQž•"BÄzRP tVʉ€”„¼¬Â€œk”VÆã²ªÊÒ£a±½öæþî¢*<à/*pÙ(˲v»©¡ŒÈ—ÎGA3dz‹g7Wwºíùé h[µÝ¬5’p~oÃUåþ3Ù:ü¯)Å‘{©Õ¨Ý–¨åIsÐl”ιJ˜– Oµ«ƒ®ž—qÏ/~6lÏøý5ë¥ ‰ÕÜSakAæ?îÂk­n…;Ïî¼¹žëÝàÞ«Áú Ø{Åí¬s‘«GO”npô ŽžÇÂ/W_ˆ µr „Ç™âfI–£H¶ö2UÓSGåÄÓw⿵Ø?iHøQð!Þgm~ã•—œÍ/œ»ÜW;’ËOüÊÊË/}õËþ›¿õ›­tV$¦pœ¤©0 äÉ'/GAzuý%ã¬cF–ĉ+3IŒÔ*vÞ0H µÊ™JKëÂj²r•u9'ºb ˆCM ØpÆh©¬TäˆBÞÙ €„$⊡œ«ˆ4S^Jî:\MZýjè2åÞV./‡(!ÎêPÃYäîúFÚLΆÈ'0’„ƉE˜6šô™_ÿ/ÿÅŸÞ]Û:ýè#ÖÍçr¸xr¦7¼póÍW­û¨Mã§`ÌÑ`€í7HOõ£xÌ?͵™*Ûº7)] Œ–í;¡i…G7 5srâtN©>ûTµEß©¤Á[ßAï.–t•”»¹Î÷ªW¯=jµf”mÜ~“µø+Ô4Ã7¾L…§¹š9›±øþnÔ <² †f|ç^­âz¿_t:®Ÿü§ï¤.—/_îu?T;I{½ÞþÍxÎć9°dãáõW¯ÀÚ Oþ’d$ÓúÂÓ:÷†ÿþßýùïüã´tlÑ–±¢Ô0M‰ÑœÖçM‹¾¿²â‚ÃL,yô†)”bY… (#žEC˜˜¥iRÔ\‘ÙN*ÖfNòÒQ Dk•0šó±£€ivB '#VÖA‘! /³¡U–«>—4vc@¤øÁ'}ÖÙÜf‰B^"P´zs51-s¦9ì9jtàÛŽchn>ýµO~î+ÿÏhÔkÓ3Ó{Â@pî‰Ë¹þú‹÷¾ñÉO&&Ƀíö(23Hœ~2zÍììm‘+t§ÓcŠ9DƒÛÌÐN„5”@\@ i¢ eoY3Dtᜓ²t"Î [›[OD/BE,€r¶räÅú\œ¶nèJí*[¸ÜÚB*?´ùÐý裹êÄho­‹†‡ÃÕ[7/\âÑP3rÎ&ÚÌŠ’ÓþîÑÕÕç.=%A‚кÄ]<ÿÌw¾÷—?¶¬ÿ£æÅý‘ûÁùîäDo µ8Œ6¿櫃1~õ¿“W<×Çz.¹­ré0\ýK4Ú\×µE;w:îÝ®ºÎ…R]ŠößõZi«ëÐ §µ4šAË”e7vv<ÎY’ÚqŒk-Œiÿ®aˆ"*‹•Ä •;kòܪœ¾P}ç |§“î)æI÷3 o¯¯…aPo˜Ìg Ç'–ÏtúßýÎ7­ta~Q0$´ T¯s¤éèÂñFcÞ[hŠ| åtA#fçÄ…ÔP¨Ž\  8´öÃA ÂMHµ5S¨€½ØÒVΕ¹­ªª,K_”¥uå¸Ìl¦Êª,«ª*+((_’/²êÖ·o_+]ñÃêTRÁ{š@ <Ù²•¦‰•13ËC×/]㤦­Ýà8ËX …¼­j Ï$Õ~”ÒÈR<»C'h$E7‡‡S ½JâsÇ‘Ûbk;2šÇùà §ŸÐÌÆ=Ô½Ÿ½n¯ÛêxêÒS/_}ym}퇻ÿu}m½Ýj?ué©÷l]ÅG:°äE~ãõW·¶6Ï?ñÔÉSä¶ŸÖçÏ<öøAçð¹ÿøí3çN9sæÈô™¬„VGIê[ôÃÃÌÆùj 2ä¶Ü;ìq¯6LR3Õh5j\K%Ä (ÔðŽ©)¾'Ã* ¸|lÀᅉ³Ò¢„…vN\Á¹Ón”YëÙÚìõû;ùÛžùœ$ @$>¬ÇÉT­…jLQ8Rp•!§˜H³ŽRÓ<(ÞDàTs&n4·{·JË¿m$ò —tsˆƒ=á(ÏMj3$•¸”h;ƒ–á>Ò˜ò¢³™ÏÏHŠbW:çÂÐñtŠV^Œ­yb®Ü\c+£ÌQ&qJX€ÀÒá ‹ïî#M7J›aš´ÔL• Ù=Ì'?_¾|ù䉓O]zêþ ´Õjµ[íS'NµZ­·?ß~åÝöQ,¶´ûû»ý¯Þ|ãØ¥ÇŸšZ>2/4ëóK K›w6¯¼ôŸâ±Ë¿ˆØ€˜cGÜÐIÚ¹Á¨e‹^§{8̬1 û·µiï™nqÇ­vËÓˆ] ¹²ƒ8`ñ¡H”‚+ÂJFƒ âf­ÛsκYñXl&ÃCt6·6n\ÏŠO+ 4kVÂ…F·g¦ëÍi¡&dRÐa(D’{»,—"œh;†0i"[kÔF“¿¯}ÍËE¤€!ì:õ:˜Z@½)R˜X—õÄ*¤5¸LN?z\ïwPåÜC©€Ù™`áTµò‚PNÍÙ®{};Ùæ,È3+dãZR0·¦Äm ¥„i8Ùɵ³AÍ<Üvøa§é‡›«×Ö×Þ¾iñ=ÞÆ8 ¬¿wïÞÎþþÜÂò™³g–9ÌÂæÌòÓsïîõÿìKÿ×ÂÔì¹Ç/ÎçÈäã\‡•®±i½9UèõvªÃlÜŽ£,èRîÖ“š‰˜"“6ÆèÈ@MŠs›#·B¹µpå†+!¹Ës¡¼È‡ýâ°3¼þÚÊðpëÇN³2&ÕqƒCÒpXסžš™ºpásĬÛõ9ˆrŽBÍ”Y+âóÁž³…Ijše8&‚"€j‘Ö¶“Ó²ÞbøßEþPÑHa˜IoŒb@òÒmÇ1Õç©¿%IPä¼pŒz ´d!£Ê†våµ°žøÜ 6‡zÁsڄϵäH0†b]XÔ†¦ävìj•®œ•¡Ö1õ÷‡q¬»~ýa·€÷ÙæêI`ýˆÜæ·7nìïÞ]_¸yþ‰‹SÓ£´6›LÍž½tÐ9øÆ7¾µ|riùô‰™¹Ylž# ˜Y*ÅGÓqnó¡g6‹ £ª<š¨ÆšºbkÖQÈ!iãDˆHrÎ9Ér•ÍÆùÁA?ëV«ßùð`+I’)xA@®”& hOh<léì#çt”pÀõz’Dšæ°)@î„cÊjw·v:»ÓG¦ ,êÐyq¥g8xGJ“ÀúÀÿìïOiñ%2‘[K*YNÜš×vdQÁ¤-&Û¢è4dFÌ2pön‡—`Ð.§]àêžÇýŒC Œ–ÌêT;¹ö2 …¨Í¦ãžu%å{Vóçô`ÃQ49*ö&õÙx¸zëÆê­Gzâ±';nâZ½6³0{.+ð½®|éÒÅ#Çf!gs#«D±-qùp•¹Í­ÝëmJ¥}GaÅ!†È°óÐ\ b#•Ή«Af]i‡C—bgóÎÝmQ ‰R ‚¡ƒ‰A*âP×bsò‘3'OŸNØèˆg§çØ0“&ŽX1»Jœ«§°++Ï»ª{ìÄYç­+EJ²UAÂþúþlxü‘wÿ QáCd#™oóMØå“§TB¨†²²(ÄV·]5–j2´èlÓi *B‰T¦4>´zy*e&¦p6A?c–ý¡n€ã„œµ™¥ãjá;-ç¿üWÿr}mý]lˆ‡áÄɼ> ¬ŸæÞ[û;wZ­™³gÎÏY˜›9£“xùè²ó¸µ¶þÚ7j©9vòÈâô¼©³©œ­ll¢TÄÙLfgŽä6Ãáxèòñ ³äâH*bè Bpz‹‰órì|[ˆîÝîíßI“ñ,‰"曀ÚÓ³‹‹§ó³Ó†Ù¤i7 ±Ñ†CÄ¥Þ®¼²±µuwvaav~aØóJô% —IDATe»Ò²C¿Û•I`ýT73 [µ’†{n.ãÍU÷Ø#tâW´Jìšmîµr3+ª‚™¹xÔÛy­Ÿh2ÒEËn`á £|ÐËꋺ*³8Ñ£­ÜD:\PeáÕDèAa‹àNº?ðTƒ«I`ý ¶´»{÷z½ýF³uæäÝÅÅù^k.mÏL7ŽÎŽÝ•µ›æîÒüôì‘ùV;ÕI%y™ëy5NKc]2ífœu6—<·E‘ÆÝ<·y9—X±ÎBÔÀæâà†yî¶×?¨”©*!€QX‹uš¦íÆÔÔT«ÙœÖ‘F(ÈÔL­ÑœÓ!3% ÏlˆDªÜz– 룟ÿf¬éôc熶,\ßÚÒVfÃýþGz¥û;ñ'">¥À^ž%Ú¸†‚ÜÃ]º §‡ƒm.è²kÃy®õøÐºîhÇVÎŽ¹µùÈ2ËÖúæK¯>?yRáÿOÿöïæ¶uxj€ý¾I)\ÏÓYÌ.ÓÌ ×áœÀ–2Þ"‹ G¹‰Èöœn!˜â`—}˜©€QHH”"|ÈëFß§&õ‹am¾}ïvgwûÚ+/¦Í™…ùŹ™ù陹©™YÒF«¨Æ457¿¸°(•õëk×_º‘¹.££$1õ–1&5IÜL¬‰µ!rš ˆY WMAamf3çyžåYÖïtö;û’›F³–¦‹'>ñX”¦¥ä{M›s[e®°¨l>οÿÚ˃ýIZý¢|Óã›?PtVQo$Mö1˜wÍYJ†V¼ÄQHa?vlA©€Ò˜ÃU%S5°HlP‘qTºÑ]¾ýšÅgv>j&õ‹dÐÙ»ÓÙ»s“µ1iÚlÎÏ™žO[V2§ÅABTKÚõÆ”dÙy7¶Æ8¸7¶ù¾ ·2‚hA0‘HƒX Il>„gWY­ h¨©‘¦³œZ S˜ eGEÙëÞ©l>ʬ#"—õû;{;kë7z‡“Gþâý± ËÀÿ  ±×ÅB>€Sè¸ÑDˆC¤) 0œ³ÜBÑh׉P[;â2!é{][ èaWëýhXïë¬vúÃν»kÒ¤AÌGæŽÎÎδÛsF#5‰#ÑTg†Ò©N‚4º–jAâ”3“ˆâ^C CÉ+kA•Xb˱Ű×wÎ;g\iEH`³ƒÞú­7×wÖ›ôªÞ]À¿ðò)à*jæà7qú(ݽÒh6`#àö!¬E!‘zSŠ ù¸1rØ1l…ÍJòYzØ5zšÖ{d˜õôû7ÞD§Ì”è$®ÕgÚ3I­Î‰n¶¦´f¦„™zŠ)âB‹w¤´P_Á€x’*à¼h‚udyÏåöpxØfÝîÞþþvžÛÉð½ôMx!éÉ;¤†G:)°‡fä¢R`€H`•§ ¢à0&511ñ1 ¬‰‰‰ŒÉ§„lï僗ß3_úÒ—.^ºøöë“Àš˜øÀ{Ï øÞX[_»ºrõ5NLL|`LkbbâcX“9¬‰‰‰û⿸²²rñâÅK/ýpFiåê €«+Wñ0Ø3 ¬‰‰‰ŸèâÅ‹÷SéÙÏ<ûµç¾öìgžý½ßÿ=+++¥<“!áÄÄÄO´²²òÅ/~qåêÊç?ÿùg?óìç?ÿùû×/^¼xñâ>Å{·Mkbbâ'ºßúxéâÿä‹¿÷û¿÷Å?ùâ[ß½?<|/MkbbâÁ.]¼„û3YWW~\/^ºxéÒÅK÷lj\*õ®šÌaMLL<Øý™õû/î'Ô[gÙßûwLkbbâ'y(‘ôÓM†„“ÖÄÄ[¯×ûí%ìu{?é­Ö¥‹—ð¾ë NLL<ÀþÍv~ñîÏ÷¿Ýƒë⥋ïýüÿÄÄÄÏá}8Óôî™ÌaMLL|`LkbbâcX?˜ÃzêÒS­Vëáebbâg:yâä‡òL䟮ÕþA:1mj_ø‹ÛÀí‡Z¤‰‰‰wæ[¯<ì<ÚÔð§Î5ÇÎ>ìÂLLLLü _Þ{éÿVÅ~âÑŒÇvIEND®B`‚fox-1.6.49/doc/screenshots/iims1.png0000644000175000017500000020722011637250333014173 00000000000000‰PNG  IHDR¾\Qçïk IDATxœì{|Õùÿ?gfsÅÍšpÛKDP)Å’TP¬VJIZ¼k¤¤ˆõ ­ µé7I‹¡U~ "¢¢¢6¡¾µ¢@7(DJƒAA ¹d ( ä²»3ç÷ÇÙûÎn6—ÝÍ&ÏûÅ+Ìž9óœ3çÌå3Ï>è$ÀÙ1 ’ðÜß- ­—šy³+7[!I0[@hÉf ËÍf4µX®Ž¿PüÄ÷ ªkÊZ:j„«kv˜õá›cVLo¼ðêoëÎ7¨—xK3·Z¸Å I‚Õ €+ nnEQÍÍÖæ¦ï®¸úÙ§‹ï­ùÛYÛ.5KÌhùŠ¡O ú%¢W/)V§^ˆ€(ÛÈÍŒ'¿7rCÉßïÉùiõ™:öpθÍÓ¬ºøÆžf+½/&‚ z$$ ÀK“Ÿ\×Ò/éd\¸ÄÏ_B‹f WUXU(*8‡Eኳ‚3olÁ·Ê… .Gõ»ËÇöÏ;Ý FfÕà›®ixîI9±“uêw”oÏss Ìf®ªP¬\Q«…+ ·š¹¹…77Z/}{þÂ…ÓQ—ßøÊúÿø3˜-°Hh¼©u_:àª8u3 ¶ŽØPò÷ñëjwïÞ=oÁBË—š ¿²@òŒ,aô™A„ºsA]€o¾ãû0Yf:Q:®¨à*³2çÀ98gà\R!KL'ñ(Q2jÎ|çžÑQ#Â9}ñÝ€L–!ë˜. ªÂU«…s™àœKœqp&A²å‘tQß­éwu4DGÁ¢@½RlÓ¥ð(HÑ”h˜eDËP%HØPò÷ñãÇÏzø¡‡gýBìÀ¼ ¿:|tåˉÒýµ*ƒ›×Y@¡^èÙ• €açÛF~±:™7¶ð¦´˜a¶p³+,V®¨0[9ÌVXX®¨$Èbh I× FÛœ‚üÒ·êw™NÇ›yKoiáf3·˜¹Å­®*Üb8·˜¡X¸ÕÂ’$É2ð@#HѰÏ4¨ÍçŸvOÎO“þlp¤|uøh§·,AAÑÍ0[qþ—%\jFc3Z̼г•›Íh±r‹-V®rXU¨çà*—‹ã(kynvŒÿG?vIÓ·˜ÕïÎC’yÓ¥^?œ7fâÙßÜ‹Yµ˜¹µ ·¶@Uløø»m¿ùëÓ\åL’˜NûÃ?¤ÞˆŽ‚€2s<1K¦Üv;¶³l¹¯:ر¥Ä¯wúµ/$>‚ooüÛ­néqÆ¿õÎô.ÿ¬wÎ@¬y2õÄ÷îÔÖu‹êfó›µ;güÛå_9÷Ôã'A&h†]‚°c±âR3$ f3,Û?³f+̘˜!Ë` ```vÉkÕ0Ò*V•¹±Ã-Þx ²Ä[Ìqc&èó— §çÜÅ­fXÌÜjæ³áÿ¸lÊŒo^.4£(T3ì1ˆŠìoš8 2øiÎÏ<¶òpQ Y…+P8˜¤-Òm\Ó|s.gËrEºÅ¿b˜'ÆÆ§Þ{þkudnsïv›‰»c4`jM¦‡Çš;)ºƒbðõô¿rê€()C¢°ˆ`éÌ#‚ "ä4›¹Ä˜ªrE…Â¡Š¿Šø\P«XæÐ`6½ªi@ΛÍfÞb…ÙÊ[˜Þ¢0‹ «Š#/Ç[<Œ¸„Fð–f.IPU(ÊÙÿÉéóÿJô/Þ~êþñÞúÈcºkT\…¬cÜÅóÌ£f‡)é&Ùæì>ÿü3Ñì;ÖYç`ŠË$¤’Á¡åÖ2¸â¨ž\füÛø¤%s´ˆt±®[ôͬcxbÑÕËFðìÙüÛ_>—õïãß®Èü¤q]¿øGúŸ\dKZìyœ[ºµ/ô~¤HlYð³ÆÔzg0d¼{Xl/;"å"[Ò`ê½ß»ÖÎ6ÞþxK¶¶5ïm5j‹A½Ž/‰Oœøç7×{>g ­Œ›¯{üÒ…¥è“®pÍ D4^Bï«´v6F³éheÕse/ŸËú74j5¨×ñ%Ñ;þ©xù#}ÌÅ3÷ê»øÉW÷}ñásæÝ  ºüŽ>‹{ÝñB¯£ç¼ìœ€ïŒ½Žž„ÌÀ|Ç•ƶÄÿÖû|󣡋{õ]üäᦩBۚƶ^µ³_ÍÇõY|Ùï§ÜÙ»,ý‚G³Œè¯CÍù“ú£;ŽE ޹¥yçîÜ|ÝãM 3ïõÕtÚ™xå{wêÊ–®êÕwñ“h[›ÔK£VÝ#7|þ£ ïÜñjCʽ_n:=aÕ¯6¤Ü©®»êûÚÊ»2Ê,Ï;ÙʱAÿ|ý#‚ ˆ.€ÅŠf3ÌX¨\¨_ÆÀ“ ——¡JP$feÌjŸåDÓàÏàeD V oi†Å Å ®‚sÆùé_Nu”rzæH&qƸÄT ãVÆ­PˆÒ!ŠG€õ¢®pØt : \§2ÀçŸötaᆒ¿;²\;tprßÄÿ{ú±ÿnHÍmG„zV,â†muw*kˆï2øÍ|â܇ßéÍ™·–0ç&_‘*ý;ŠOæ¶(…a–I“-"Û‡»ÿ ~ðó¥0DbR/ó[ùvSW¤Jÿ^nšDç¾}_Õ´+—¾¨ÁMÀåöH’›,£G[íe§{eÄ.3L‰Ív¾¸òCÜd™4zé*DþJ6dhXóÞÖ«¶Sš”‚KůîÀà{/}•XdŽû[wbÓ¶ëýOæŸæ¼û€ùƒ–Û“ZÞ›ž²t3–ž5ßþÄØ­žó²ãšAÖ9¾ßÌJÖß~õ”kÇZÄðÛÃïµø²æ¾-dÏRF\#½r7å纴‚Üp‰×Úé®íƒ“;êVž<ÿìׯ¬‰>±çȇLJœÄU×oû]nþ¥×Κ}4ÝDÌM*Òúÿè‘ÔçOê¦Úv­~ÄObxÖêÛ @,¥ï‹ä(BoûTõ#úiîË9 —V?¶éÀ ‚è’(ôÜO6Z,h±@– “9cvo±ÄÀ$0P €ƒ‰yAT•)Ü-`ÃÕàÏ+cnFtѰrÜÒÂÍ-\’™NÇÁ8ç}_Ü"ìŸ}sŸ5H|å¿çÅ$Î…©`VU^çèh𠽬°RŒT­–:9€¦vº@²þ²ÿnEõ™:I'`VEb 1â“FÉ.d%Di¼<殎d­ î™™«5[ª,³(’Ýq%;¥s”ìô¹‰lÀmÉ2ðí¿×ÿGM}hxZp^ä| ¢_X=åÁìwJxùöφl¿ÁµbÞv8´+`<­—_;üj•íž»éi͵òî¥<˯‹§¯úÕg;0à fÏÉÅ7‚(ÛÔ²§2r4çþG93æ80pˆœu•öÎj–ž•¢‘Ùøf˺ô¸GžÎƒÀ”ýeÃã_}sV­n¿É¾‹’sweg¤ÏÁŽï{ïKZ+MÀAø0|AÁ‚fD!;f+o±@'Œm.ÐÇà†ß7ƒ3®Ú¿ TTf±ÍW-yÄW†\„mp&ôg€ÊÜÐ1Üjæ–®ÓLêûÂ&±òìœ[^ûÈ’ÖýGêuERɱºéýÀU( SnµYÀbçÍUgWÉѰ2ÄG`L ý¢%//æÓâ?üøw+üßÓÎæ'V¾Q}¦°ÕXÈDÛÇŒV‡æ‘ÝoæE/»eëÌY»à’îÌ 6zB#›­².™ÊÜé!gîŸê|d»üÚá‰8š”ÚÀU×g8ýïyÈZþð¿NÊ'X*å)_Õê3ýÙ‘ åêIÿ…¨ì4»æ3¢ì—ÈÌ™õ¨î½x¶vIÔµÿ4gíb_ÕÂÓš÷¶^¥lýzrjBîüŒ¹+'4—ÿs)nƒµ S€Gjó»Ÿ"³÷þÿJĤ˿ªEæ DÔ)Z;ë«é´ZÆóH?œ|ó¯ÃŸ¨ùÔô…ïU¨'ïðªÕ5±ëÚ\ÎeãNõäO¼÷ÅWeÜZŒ&¥l?Ñ­g!‚ ˆ`#ÆQ²¯A’Π‚©€EåVª•[Å«›h¦«ÂTp•3p¡—íFXT¸‘%ñ"ˆ›[¸¹…ë¢Öïå ËgæÜÊ8ç?÷à W¿ö€ÄM§ëîøž¤X¹U…؈Ž·Ñ¸hЇSwF)ˆÑ`L–B^žk¹17êÓâ?À.šB7Çübå·rHà°àQv±+£ˆK9¶4öë…-‰\O\B-<² <2;šé\DµÇ2ܳ[7Z×ÝõÈÓ³›€²÷¿;yÛe)CšYÊ2pÖô£Eµaõ¯æGÎx÷P«ÜžÏ=ìjÖ+ùÃïîu”¡€NÍúÅ©²¿füëŸpâýúëþürìÐ…îÖÛzÖ§””Õßð¼6Ý €¯ËßU¶Q~àeã¶LćàŠïýùõ±øÏwö¾N¹‚WÕ7_7ò'×e\ë¹³µ›Î¸Áº.Í«eð@ʽ¿¸t¯­Ö-¶üâ¤V­®Í°’]\–iî‹ÝWíÙÜ£ÅÞAD„Á­ôµAØ0[Ñl†NæÞs”΄ÿXά ¬ U0YÓÈ»E±~Jô4¢‹ÄÜbæ-Í\§péÃw{Ý|Ǚٓ•s+S¨ W•s÷ ¹zѦ÷×CU¸Õ ‹•‹/!â“[ Ä€ášÏ0à*\‡ËeÄè“Y”ŽÙ?Õ—3¯Ðýmñ¯Õ.çèù¶ E„•pL ±Æ—ed™³2@®|:ê8Ôñ¿3'Ù,¨8»ñoò÷lÞÙì™Ö,bÃA?kJ@>º6úS(Sg™{A®|:úØóŒiŠÃ¾=›Ãˆô ¨7dáS#nüesßC±["^€õ¶UF­Ý¿û =åjÙÝ\2Ø“'‰ ˆB…5õ†_š'ÀÓZ†EkÛæ^žµuÛÐnß×Wk7Ç~;Ago„ ²÷ÎþZ³éš{y·ÌÜóë{¨Db`|ä»g§MúÐWœ)Êò¨•z©o&ˆ0at2¬ ¦@UÁeÛàœCUau‰.vu%[­°pD1èt°ÂžañÒ²"Öùä^û¦ç/á* ¶Ñ2cL¤FÅPfŸ‘Ë:(2d‡˜æ3'qšH‰ ‚è±´t&ˆ0@†EëT¬¶§ZÇJ¦B’ ¸¸›T’UµE¨ªƒ…C :ˆÝ8¢eàœƒ,ͶtÇt*öŒÎx ±Ä˜s ˆðÁµ‚©‚ t $ˆ°¡øšy€]"ËZ‰¢\s 6Ç¢ñ"tb"nŽ˜ó•cõÏ}sªXcšD‚ ‚ ‚è±èì ÔâôY¨f¯€e‚ ‚ ‚ ´ éLAAAÒ™ ‚ ‚ ÂsœgeÆ¡¬1ãç³ê9~RûAA„UæŠOé {f^pêCxR_[å8ãç³C_‚ ‚ ˆžÌÆwÖøYëO:ƒº Ì÷ˆ~¾žx‚ ‚ ˆÐÓŠt©· CAA‘}&HAAAÒ™ ‚ ‚ ‚¤3AAAIg‚ ‚ ‚’ÎÝ SiÎÌRS÷(%Œtû$‚ ¢]tŽLL¥9I©zç¿¥»;WíyÚŸõ†·iG‰í.ÚmÚ7fÎz£<ÈšÕ£ª$‘ ‚ ‚h ­NGtQ²W¾mpIÿ6`* ž}O Ù%ow¬ÃMÓP°Ó”}Ÿ0}¼SŸËȾ/£c6 ‚ ‚ ‚F˜¥³>)õ¡‡pþüù«®ºJüõþùꫯjηG81•æ,ÀsË\~¦ç`Âòе÷ù“Àm)ÂfÈZl+ñí›v.È7‘–”ŸõüŽ’{ú·ÅbÿIwá×ÕÜwO˜Žá®{ 6›ÙúÃ5ýؼڅãQóÆÌ7¾½p|gì™gs9Žâ•F˜»©ªˆd=AAôlÂïuÒùĉ)))â¯÷ÏW_}µýUäáC-_ªŸ^ŒG×׌íHåÉ1?-)ßþ#wsÅ —u{ ÒÍ«­*Ð¥“üû[µŸµ¸òíäµéùÃ7U•dØdºþ÷-[¼YèÚ¶ï„!e¨q[ Ð÷¶âáSú®òpcY5€¶tèåŸQsƒ&µ½D÷v²kçx1RQUoÌÒ[k;I©A™„_: Y|üøñÌÌÌóçÏ?~€XpüôboAÒ+=ÒZ 0èfx쯩t¹s¹ú ¯L*¶ÿέÚÜ2^ö¿ÈZü\§»]32çN/Û]Ðÿø—¹·"îX£þÙ·>ºæ¸ 82ôÖÜAË‹÷ÂPýÅuÉíén×ýÏÅÙŸC²¦N2Øë‰5ÇM߃Ž0‚ ‚ <Ñ!ÜŸ ¯³Ñh,,,ôåu.**rßhlQmU`Ú0+mþ®¶Ç ô"æAbì­®9^þñæë2K\“½êo‚L{|9h–á¦i_¾¹Û„áS²;­~žC‚ ‚ $ Ö&„[6À‰'Nœ8qþüyÇ_ïŸÚr"gCs•1?M¤{¨P¾Ô9”„}íî"v"CòpcþÚòN·¹u§ Lm5z¬5«n¯áñS†Î›ž?|ŠKäŒVý §â…5_Üu“ý'Ý…¶aHg=Ò\åe+h‚ ‚ z*á—Î))))))W]u•ã¯÷Ï@m²Kj«êk«êkw,Ï‚q~sHµ¬Å•µU•ÏO€1ÿ×®RØTš3½8ëùõµUõ›rÅZÓ†YÓ^‚-±¶*]Úc‹*1Ýóy m86lƒÓ-Ú4t^zª>)õ×G†f¹æ4dÏ{´xZ»Ÿ122ç"÷V·P­ú’aÄ´‰ýR°òËA'd}7—£¦csdxñ ‚ ‚"áuNeW7³÷ÏÀ!¾ÖR†»ŒGjbÏ/¨óoÑÏ·¥Ô`çߢŸ. â=0œ=Å–nÈ.©í@<ƒææ†…õµ ]u_PU_ÐîÂÆÕÚ]ÎŽýÒ¨€K¶Œ…õ틺öh7ßÅ•ˆ‘þ"&î… ‚ ˆP~é,œÊÇ÷3ÂF€¸†>ï.JöR zéã±õ)KõÓ‹!ô‘®8‡>)Õ#¥sÇï ¶ýP–â¿ÄJAD÷ üÒ¹½ÎÕGþæšã_jdؽ­ÀÜ)c2‘bóCÏs÷=îãŽe,¬¯]è6’q#Øj/4j2ôšµ %v|΂ ‚ ºá—Îèu_°~îK¬œ‹~þ„¬,÷uŽÑ|]_”8¾ ËXX_1('=š}l²¬çw<‡ªëÎ IDATgÔGÖâÊ®çr&‚ ‚ BOø¥sG¼Î†{ÖÖßãš`´Î­°Ý —°]°Z³AAѤs'z ‚ ‚ "x„_:gffНyO(3î w‚ ‚ z™Y“üg³t¦‘ ZeÆÏg‡» AA=‚†ºCþ3„ßëLø§Õ.$‚ ‚ BCøg$‚ ‚ ˆˆ€¤3AAAIg‚ ‚ ‚’ÎAA­&Hƒ£E ‰© u]qè}RªGJbeŪ· ]S ›33LÕ!‚ ¢´"c¡©ÑBYŸ” òÁ•`Wê ¾zBRªŸµ‚x`Ò933³¬¬Lü,,, Ë“ƒ¨Oyh!‚ ˆÎ¥é¼±êthêÑã¹Ø)V‡9³s]î:8usÑÔÇBX‡@7fffNš4içÎeeeb ²²²²²2}Rj(%¬ÍÉ·Ý࿸÷?}3dEû‚t)µæuØÿ{òÏ#F 9}ªáûÏdŒí-~+¥AD÷€¦Dé&ÅìJAA¡X(** ±w.aÍŽr=ts}m•wès§#ıÊõÝ {T†C1ïÜéöÙÀ¤I“D†Hg}Rjâ˜o,åÓ†/cü=ŒðÁ«›jÎÔ}ÿá™ÿ}åmGÎq¿¼Ï˯‡ >ÞdèR‚ ‚h+4ÂF7¡¡®Jüs¤ìÜYp€àœ‡@§Ð'¥Šœ£°°sgJ(ýÍ8TrBRjÈt³ 33³¨¨^ºY¤Çs¸ztÊ[ÝðÈÆÿy¡ìåËû^ÑwLÊÀ‰Cn{qfné㼺ilîLqxŒûåýßÖ~ìÊL¾m&¼¾?Å*‚ ‚è²tîV$$q;w–y„„L= Å\TTXPPXTTÈ…bvÑÍܾJ£«V™n ‚›½u3¼â7‚‡x’ùŦy‰æ$k¹zô…Cû}üé÷F§¤d ¾íř￲iàFûåý?Ÿ–ìÊ<ûçuû÷ï‡Wû÷ïöÏë‚]‚ ˆ°S¹).§ÐíßoËi`†È€¤s·Âñ] ø(͑΃¥„@= Å\XXÈÄ_`ö€H±¹¢CE‚KY !,×1¤F¹rpÒw&IÕýëË?ÙðúÉœÜùAUé¦òÿµÿÿÕM¼íÅ™ùùOͺ'ï¶ñ™Á®Ì¶mÛ,X°À{•H‚ º- ºßÆ=ó©gòÑbs cÞmG•ˆ¶@Ò¹Ûâpj”ÙýÛµà!üÍ8çœûûÔj¸â:Jk¸sp ©áèШêKg¾púÓ©ý»\ÓÏùïálùò…*ýÐħßûËúS¯]ìÊ—ó“O<â½J$Š AÝyõ‹QG}®•^}1º2„µ!Ú}&Ø#Ylì^g `÷û7xî,FÞÁˆÎâ+@o},ºcçÎ"CPë úŠøsoU·4|«¹¶©ú›úÃur‚¤Ó›.œ ve‚ z2gËuÛíË“ïiÊêHùÕ›)ÿ­œ¥eÐÐg]’ÎÝ’pžr"Zƒsø×ÍŒ…"ÖÙ׬(®ãÖÇæÌÒÙ1>1Æs°+ hz‡W~¦0ÎÍ­;Ô\Rè‘Ýw`ô™¨ÿW®Ø·e§ëìét69 õ¡lë©£€tª°Kg— åg6 +èf‡£5t³cO7ÉÝÉ÷LÒ™èdºN´F ~å8ž<6g¦/e\XXÈ9ãŸU=Ÿ9VÑwðØ+û%†Ž3Þã+[úeûûoO¾m¦ð= Å,5jÔö÷ƒû +AD˜j~êF§wöè±9Ø‚úxå­Üm׸öˆ—˜ —¸éÔ»Á3’«¯¼Û?€õ Cm*ÙÅålI묂>´y£]#4œ~h/{DCÒ¹ÂXØÇ† ´† UYÊ1ž½Z™1&Ôs°§ÍU“z_LHæ˜Ð@™q猟ÏvM!‚ ¢ÛÁÞ]kviéî ªO·âf½á¯˜½Ó/¯¨ª¯­*ÊRm´ðl­J:šˆ”:AÝ‘>Ã{d³üŒP™G;BTúxçw 7è~ë©€³‡d»‹—÷ÓÄ|ÌH›„Ý.cÉùªXû ÎDýÊ%¸Ùe¾îF;6º ×Yh対úÊ‘ríµýtpíàF¹˜>ތܹغӔ}Ÿ!X…0m˜•6èæÚªñ€ÝEKwcPËk•¬Å•og˜JsÒS 6…VúÂQ+;ãƒ:êš[#,X»p¼f6Sõzk0Ÿx5ˆ'†ì˜Ž ˆnL‚õg7FÙkCjhàòù]‚2¡oÔQá þ4:ÇuÔä3Q¿*”Åh.Ójþæ!aßjöt9w¬ >æ‡Øc =6·å÷áäŽX$¼íó6w)¯³ð1õÕW_}õÕöíÛ÷í³ÉS‘Òu<ÐA}Þ0}´wÝ{ëu»6TcO²»úÒó¾RÚLÍÎ-X^áTfã lË;‹Ü\¿¦ ³Ü\Œ¦Òœ™¥o¸çqsF:<ŽyOµ0d—T,þâ¿v<ÓkÞXo4æ§%¥æl¨éPéþžTÿÐþNqÁ<ܵP·ÝÙ[žoDñ4{ƒ¿Q”ªOZº[#§K÷ÙÀýÛaöˆ6·•>ërálvï‚ ˆnDÚôæ‡úúYï1ë¿#Ïíx§÷¿oÙ⬬ŕµU%÷Ôt´t÷Is ØðÙPÑ)®”—­Ì” híìØ¢ ÛÎÖW,βÕdáxÒ_Ϻ¹¶ª¾¶jóuǪ5ªÝ±™i« 濹5o,Ø:­b­ýU‰kôïx{At%øyM%…:uò=M%ßÒ)ynAÃ0øÖæ’BûèË ò.{ÜtН‰žâ,Å×çz+(Áú'¯Í}ïTÄI#lxk_ž±fͳgÏ˽{÷ÎÉɰ}ûöÞ½{3Æ‘3¼!AŽÖ˜úœ0dξf§)û>T‘µø9×ГWJû°)3Äų„eà ›þ3•æ8ܨYƒLÞy¼ëcªþÅ+“Ší¿s«öhØÔºýÎ*]àŸ`*]nOo¥Ú‡1?-)ß­ÜVwÇQÌáÈŸ–„͵ Ç,„©t¹wÿ¶ï€ CösÏÏJKº%ëù%€¢› ‚è)(y…Myç¶\¡I‚õO…ÖÎ*®ƒùÛ¼{±Îq̃ PRR"Dó˜1cÆŒÓõtðž7Lm5wÙÄõQÍ}ƒQŽpë®i=œÚTš“¾uZEU‰0•æ,ÐÌsÌè$ÝjD¬LÕ_d šåmÇE¹ú³ßÁÒȨ¹©4'ý˜S"¾;Þ‘ÙµUEØ[”: ¹›+‚ËnH ì ’q‚ ‚3ÂFEEÅ Aƒ„h>vìØ±cÇrrr–,Y2f̘}ûö­Y³f̘1³gÏ^³fÍš5kfÏž““ã+„ƒsÎ9}GО7jvnÙ5W¼ô¯­ªß”kÜò±É<ܸu§ˆ[ýh«Bõº§´‡±³žÇ¼tgÂî"—hW²¦N2ø-+#s®½>6 ÉÃùkÛJ»· =øãÙ_v|¥UwBéí¢s:Åa-»d¦‰øÀwÇ;§©´`C 0¶¨vÇò¬ÃǃåÞ[0›kן_àY.z„ ‚ º‘áuí+üÇB=ÈÉÉÉÉÉ)))Ù·oß¾}ûü{ …òkW¯^—ø “N X^gÓÇ›áòÒ?CÄl¬-ÚT¦OOd=š›c½Rڃ឵•˜•–”jûýèúzT/÷Ì”=ïºTá÷]–³>µ[T±8'=UoO ÈiêˆUÀ„åU÷ ag™½Doû†ìy¦NK*Îz~GI;Jï(Ó)N2V>?+-iÖòе7¦w³$cþ-úùõüŽÃÇ›;^1g7˜°¼bö‘ô°©j<0~S™>}é@‡oÛµG(Ü™ ‚èb0ô­ŒéwåM‰mšˆ;ıÎ3RûUTT”””"Ø! EG‡C^{hWÑì /¯«Ì4ÞÓ'â._ªß–Y_06Üõ ‚ ¢§ãs"î“»p©½q‡Åëüì³Ï:´À¿Úh Á{ÞÐ;|À.Ô×Vuñ²v¥N{I,æn®m§n徎w­B_¥®P?tñêA„&‘4€ô}y9«" »Žh¯ÅB©9:±¬ñUõ5Ò5õVW¨UW¨ƒºxõ‚ B“Hò: Ò÷åD@ÇnîÝ»÷7ß|šÚº®ç ‚ ‚ ¢Sˆ0¯³ƒ@´ð:;8vìXï޽å›Ñeæ‘!‚ ‚ ÚGäyTŒY }_žíp9 ?´CI“×™ ‚ ‚h‘êuÎ[ƒŠÙ­hÛ·o0yòd×™ ‚ ‚èéuä­ ! óòòD 3\D3ÈëLAAtŒHõ:Ø·&}Ìì 1E k‡ë<‡ÝÌë\fÜÙ)5!‚ ‚ ´uö:™]!ÖìÃl`ŒÖÔàÝÏë<ãç³;¥2AA=œï´yãHõ:¯žm Ø0[K4 º™×YÐŽn&‚ ‚ \iŸ;2’¼ÎcÆŒÁì›m™nöjûüV¤ûyÙ3ó:ÅAAD¤Ý3sE’×yõêÕòòò=ÆŸ€öåub:Ätn‹qÎ;ÑbcÔƒ õ`àP[µU¤C=^YÖ'¥¶»”ˆñ:§§§WTTÀ¯€öÆÛë,–Ÿ}öY«N‡¦ò‚NÞhST;Ñup|îI=¡PµUàP[E:Ôƒ]„Äa­æé`àkdx…ÆMOíÀ€öÆÃëŒ0‰fAWø¶’ ‚ ¢ìG—ˆñ:#  bÌê<8etÍ‚°[IAAt„Èð:;˜‘ÚOÈåôôth èôÙyãm;vLˆæ'Ÿ|òÙgŸ‘Ú/\ê™t3AADDI^g«NÏHí»\ö% gó“O>)RDžp©gò:AA„}Rj»ÓÐ$¼ΰG\øÐÞˆo…°&¯s·¡Oÿgk†»AAtEÄH«ž#ÌëìÀ¿€8â4 ^Ñ, ¯sçÒ§ÿ«ÕÒ§©g‚ ‚ ì w…ëT¾TŸ4+g¦‹#GdÙZÙÐSÕÍ}4wå6— ºÈìñm³0˾jénG)WŠw¹îhêfA7QÏ ÙÏ=?(^.ÚÍW_øMtos[¯=°Ч‰öo_ØŽûV3KMÀnËahµ.ŒaP€/«ÝŽgSéò—€¬Ü¹Y€qëNû:‡GvÚKμ‰Þç£Ö¹ãê߇„wбEµvEF"¥­ Æú¼À®#¡‘óŽÆñØ#±;E{[¿Æ¶~•7…Y¶‡¼…èÞ´áh¯ëÒ_ZW`ø9ò©»ƒ@÷ñ:w}‚÷¼aH À8ÿÏ3dzqÖó;êíîŠ_;¯þ[=½:ïñ\Bõ ¿ÎÜdz ­oèŔ̹/•9“!»Äö„íå•1W[Uùü xÚ¶ÌúÚªÍÆüµåþ+ìD§‹ÿü¤D:¶=Rã¯M²WŠ–‰~ÚÜÞk·¬Ÿ ¹›k«êkŽ+ÛÙ#SŸsÉ9^Ó20}´ÕdÝu“A#ñÞYwMvmþÈvSœö’Í£¹ùQ{VÍDöóQ«§LfM{ ¶ÄÚª’{ú{§ïÛF„µ•Ðô˜0Ä ±²ÓñjWc?gtëW qSØ5¯x¯£Ä¹g‡dÿº'm¸; ÿ´xÃP»cùu@ùÒ´ù»dzqþ-.KnW`í#Ÿº;hDê‘H¿­ÌXX_›Y$<0οEd}å­FóoÑÏ·å2©ÁD±4t^íÚØ;Å+_*Û]Ðÿø—roÍ€iC z0öÖGø`›ÓeeÚ0+mþ.ŒYƒ’‹îââ¼õ,nyŸz8˜»ëg‚Úm2Ñ™Á2Ø%Êg›»t÷ÞkÛÚ#)€ë’ @u;w«Ç`ÌOKÊ€G×»k¯š[v¦MìoÀÔ,ì2nùØtOvµx|2ÖÕÆn­D»}[Ïš6ÌÒè©!€¸ÌGÖó;ðNéD\[™JsD|KÖÔIÁÖcrÛ#”/uËìûŒ†Ÿ+³æMaË.qS ÚOÀwçÝGìÞ+è_Aöî¢TØçñSrñRñÊm{‹¦ð¼û:ò{fwo|gM°‹ˆì6"‹ ·ØØ¢Úª"Ø/è_VWàuÑ7U®×Ö±³žŸ°r~ñ}aDÖó÷އí²ÜÚ†žŒŸ’;Íî§«° ¾ö œ.wGïø´ûÂc?mî»×Á³ôò²ëad-®|[Ë…Sþæ<#€]óÒSç‰cþÚòì[Ûlß­g½Î±õ)KõÓ‹a¿a׬õJÑR™a!²ÚªÜ¶ ÈݬYíÎE³qÚ~^v•°ßаÒ~S :F@wçÝE\jÏìn½×¨Á  Ç:×¼µ8µßŒÔ~3Rû-.=ôâ‚Oˆ¢\LÇŒ®Ko{Oô¦ÿÀSÃÄ©YÀÊùùFL˜6±?œ/˜ZÙГŒÌ¹öÅê#ŽÇÜšã_j åv?L¥¿ž¿ Y‹Ÿ»§«mâp6´¯ÍýC=$D¯9‚*ŸŸ`å¶½ÉC&øâ„[œ’f¢>{*c¡íÃS?)]›®ØV¦Ò¡›³WFTxR€W ÛMá¥bØo Dçà÷î<~J.œÂÖ¼QTš<Å+¢RóŠ#¿gv·æ¨>ÔF—u.í–ÿ·C|ðWj8ÖÞ ïyÃm°'AU0 ë+gÙ¾Üò=&Ž!{žztö}­à†žŒ½Õb%"_óoÑ'l|7ÚXn÷ qÆKèÅ('“Ÿ61槉/B]_”`›%" ü˜¯ =ÒFËÝŽÝE©67äK´öÍÞ^‚ë]JܺðRYõ=E˳la‘‘A+Ñ­žr~`$ލ‚±Þ)®µ*H²ï‚1?-˜ÃÀE~[Ù1æ§ùþ¦¹ è•Ùû¦@´—6Ü3ÚQIJÕ'Ý2ïK caåóÄ}ADÞûªYóÈï±Ý8¬ÕeÆ)‚¡oeLŸ¸+oJ¼xî›S+œc”wfÏÌ ß8寥îH¯úýõ®i5o-¾å7•9gdžÉxkqÆ ýͪâ9Ø1xÓ-G§ÛòÛ·õ“¿ê÷W—Þ3'¿ &üeÕÚ»ƒ¿K~¢\&õ¾˜8¬¡î#¥Ì¸sÆÏg»¦87¾³&{fçÜc-)ˆ“«ý=(ÞúùzÁMŸŽö`O‚Ú*pºL[Õ¼1ó–yFšV£Ít™lÝ­»=Ô”&¢§êk«‡m|g/¹åš¨°/.ÃÉ]¸Tße½Î鹫þ7µßŒ¥×Gùk·.žÛñã=oÕØõ›šÌÓ«~}ÿ»§ç®ªãíݱ%÷–ëýç¯ykMþu¨:½±êô†=äPt8AÑÕ1}¼Ùd-žÕ-„Ñ ÔÝmG€µ}³¨ÀëžÞ¸ØûÇ©ÙÈ-ÝxïIVmI]e_?çcÂ_n·¿F»>sÎÿ–•?86ãó²/çÜû{Ô¼å/ÿk øÍÿ¦âU¿¿~á/ú¶’è Ù%µÙá®AݺÂô(¨»‡œ¡ Ç:ÛûûU¥wïøÀ„¿¬rÎxâË`ìÃsïøå‡|ƒˆ‹ó—?ãÁªÓ«n©Hí7#õŸ‡dWH7AAD4]u„š·;B5jNš& ¾ºÿ5†]¿yÏs RWÜ0õËŠ¥;LS'&ðŸ¿æ­×JOVí3áË3!™Ržæ‘!‚ ‚ˆhºê¸Îý'Ž;ð"Ú€Kã(½ü±=á­ƒŸc†ÐÂõ‚9nØ'÷'„®=o(!)´g@Ò¹»0nØ'÷㙹压ÚM•£7Ù–³çdzFNO{m޾Ôãn×?®úõò»öЯX9lA…ÐIú‰h(GÂTCõ¤~ÂÀÈéi¯Mntô`öœaÙhrËaª¾k lWaCòuîÏ3†ä‰u Õ7Ø;šV•?±ë@¿bQÂGKÊ—™èW̉ ›öCò–EÃŽÏ=TjªÿÃlǃA? ¿«ÁÄ@6ì¼¶ê²Ø4eÝ©Õâ÷¸qƉgŒ†úãwõwzYÈžã•_óÓ‘dj¬NLæuË´!\‰&ˆÓï£âÆÒþ Oݦ¹©û^×ÂŽA?1±q}›¼‰^[i‰ZwêÁbÀžCϤe¬WÿXM«Û×—úÔÊŒ§\ß¶kÚŒKȨknÈg¤ÅÙi Õ•‡ß°G¿ `Ô݉â5·>Ó‘ìÿôÆ;¿ó<Õ¾6ÏÓ‚‹Ìmk¼J´_[ˆPaë2}Þ¢¸õ¡hHÞ’›¼µHŒ?¹¤ü1!\r“·5æ- ^Ø^/üHpÍûå£W¯Æ ûäNý2×µã†}r[òÈ=ü‘Ó u «¡_áa|•íXBzBõÁÆÌq(Ý š¶B¿B£ªö‚ É[&7>3·²Èž3¬ ‡b„‘ðô"|ä·v ÕÆ/ÖêŽÀ»Ì× ¥=6’Ínvà} Å?íÖ§ZǪX¾"L¾ë a? 5Øtî6¸†BËÞcÜtº…â½·q<ºMŠ÷ø•àr§45”ßo ˜àR×ÔÊ'Ážù=c$Äÿ¥ÿ<õ@nòÈb[¹Pºª¼À¸aŸ¬j‹„ó¶éÐÄ®«ö4”ߟƉ e{CÀöD—•/ƒ~ÅÊ´K:ñüq9Oý­õûB ƒ%’Ë9\â“‘ðÔÊŒ§l¿†¡ u [M€x™09n˜Éu§~·Çž²(!ûŸM¨;µÚáUqs%6œkkšNy”èq:’=ãPÙAÃ@Ч±ìŸMÜ©GM|r]ãíªÚ 25VcÀS+‡aî¡ÒUm»þE‰øh{ãݹÉ[5>\ñÝøÞ)mê2ÍJ;lâ}­aÇÛ‚GŸ’ð>¼¶È%hÞOںס‚¤s·ÃTÿQݰÀør â“ëš¹ÇCô+VN:^*¥' HŒsx“)f#x˜«;éáÄTý»ÏÒòÒÍ¿çÐè=ú+²ÿ© ç|ãçâª/;h8N?±®a™Æ6~6ì±Ô—šÙß%Á~Š[~·óÔ kí2ÛS ›ärŽ.ózXm[p—-~ Üñáo+ð|è,2ûë¯IlZmªÿ(ÑÝÕ•Õ@²ßªÖ?6W|;›ñT7þ±®aë¦ê­H{mNãèUõmn|A›¶ ð†Ò¾š´bÁ½O—4iu§žù,á)ñ¡…ÿ:t¼†ÁAÀÃ] ¢ÃÔ—Lx`z<`{Sc‹an!›;¹¾ì`Bæ8@hâºFÏë !y‹ÛÝ1~ê q寗ž[>znùè×Ü ôeº0õ«·ãîEÃ²í¿³ç8—ÛÊM&LvòB Cò–9v—d«ÊT}×ëxj¥³J¥•wß? º²µ j¯ {#§[`‹úÌM'k´ÎACòŸíã+¿»Šuµà¹ÖÛB[ë U"<®-DhЯX4 úýê¦ÆêÄyã´3LOp°¡Ô%-Å#ŸÝK=2=¡•k…7ZÆT4à6Cògõиõ3d¦ád[N É+¦ÇõÍÝÿV]ü@C[ëIØtè­Ä¡[Ämº}߆­¾¡´jÓÔX˜0Õà;‡>…öphSå3¬5:r v:œäuî6”®Ú?°`Ô'“!BéK ~A®›[¨tÕáÌ•ŸÜ á™¹^ŸÕ§' @ÜÝ‹lÓ§6.¯iöPÌFp9°©òA¤½æx±uððhÄ?àŒ!vH÷Úʸg–4¹…£é­×]ÝÌõ½žðÉm~Ë3Õ”8ê“•Cm›/©<€d6÷z°oÚk+Ó µ§¡ü~”9À7ìÖ8" ^[9 üõòÇÎàµEÎ/–™¿ç †¯üžçéöýwU¸lî½ÖË‚ÿë€wV÷õ²¹ ×"ˆ8O®&ûø õ-‰ß²Ht¢ýë·˜Šz.yž™[ïö°©z}]†Èê`CÛßz×{`jDbÂGœAÆ M«}UÕYF,·-œÚ¾ÿ®n~}h\Vtøš•£¶`ÿúºQmnü6v™ö ¥=6ë{=á“Ewkæñ¶àÙ§ðq”®:œÙjktô@  }+cúÄ]I³ †šM°B3NE:ÔƒCm8ÔV‘õ` îl‚—êqr.Ñl‚AA$ ‚ ‚ " H:AAD@t&‚ ‚ ˆ€ éLAAAƒÓE0ëç\î*‚z0Ò¡ j«À¡¶Št¨»7$#˜#F„» Dû9xð õ`DC=8ÔVCméP†‘V‡¥ë(`ƒ ‚ ‚ ‚¤3AAADälÌHí×Y¦h®D‚ ‚ ˆnÃÆwÖ»ˆ“Î3RûqÎ;ËcŒÔ3AA´Â‰u·ÏÁª÷I £…Î2Òé"Íùè“RCPJ$lݼ³ó(,,ìDvø)[ÀcŒÝ¾î€ëng®,(sæ` ʼ7wÙàöu'<¶×Ú€èlý#ZüĺÛE_ œ=² Ì³wo_W¶îv{×Û2ß¾`{&æš­ô¸Ã¦ç¦nµ:±îvl¾7ì)”-pî±KÚN!¿ç ? öü½æÆZïÛX‡€lÁÁõt+[Ò÷¸í£+ÜIÝêÐÍû’s^_[àßv—IÒÙ•²Žîê², FÎ9çâ±3å‘÷¸ã˜ššR¶À–ãøÚƒYާωªF[ö³æ¬;L]{\$_{ðÙ¦BΉu·;zsnÄ»e9RyïøÚ©S×çË2áÒ;Ž>ŸúĈÒ9.ý”:÷=[÷Mµgþÿì½oh[W¶ð½ôRxæŽa†Ö¡Fɱ]l¹Ñ½0æÅta0“XdÚ>a ‘Ü^ÛÏL‘&`|§Ê\È•BHï8~ˆ­€†Üö6Hé`¤6:º3Å<¸p£ÄJhìc«Î[ª ž/SÐûáüÛ玎dY²¤õÃM­}Ö^{Ÿ½ÎÚgµ·Ž‰”ã·‹gYÐÖ)^îh‡ŸjÈ ÑU®v5 î!ÊXÅ€ »L&GHüÌ, å]¨„ª4hÈ«ýTV_yT­¡Ü>¨t²a—p¥&ÁÑjOFõ‚ »ÁùkÑZ‰é1y'uÔ)tûÐì>û—ož½z¬Çà¿·Ò¡3Ã0ƒ188X2Ìrfq»È¤Ê†o„|W=ìrÈ7BPCngæ«£ƒB}ÊêThÈ&l]T»‹(aW£@ZP²FX§®Ú¼sŒayѨZ£º„—-±3›å"gc›Ê/l/JÞ#+çBL TjÐ’×ñS£j åöA­“Í&x @øYµ¤Ê°aWGÔ½Í?ù*—ذË“ ê#µˆöŠMG«è…:¼ eøž*–4¤åú©<âcüªÕ2E´ôëõáCyâbJã¼²s.y ¹Ò¥‡TÒ@ôY-åB¹h^á‘>¹ñ¸ùÕc=·Ò¡3Ã0P(TòoÂ,‡ÞmŸaæ¼°8E“ET—Mç†'¦E•ŽŒBReØÕh¹O'’Á‰9‹&A3“¨†ñ…ŠËES'³rZ¹Š—³â;m¬bKÂÝY–GéB}T£–ýT»YÕQµ†rû é#nʪ}#Õ$:AÄÍ@®(&…Gå„7;•øB\d¦*1T‹£ØtT‰NÆßáåW-Äç1^&H«5°á Ahé×9ëÚÀ;Öy%2Öynœ€_1†NZ :ð©±á!§•R+fv5jóq« l8IuW…n(íU0ë,1j=ÎmJ6™L4M iL&Å¿L*Eêÿ[ç“9,|IiIˆˆ†ø”3¥YG|^$¢ÆßuÏ{(¯¹«V†‘*Sn|Iî‘ öaÐSFw×ÐÁB¡P(Œ,KÏ[jbL|Ã*Ý»é_h™öEFÈ>¬ØŠp7¸‘å*çd?-ûè[¤ƒÛî(oÝ/.H6 p/Ê÷户#Ä?Å8…䆸¡.1RKDs:ª@'û"ãT%^È…ªË!nS Òì‹ „âµÆ=é%¼٫⳨NÊ=ëš¡y^NþY—r;Y–:jÈí -3p€S&dþ)LC9=â˼`ÍÚF¦¬n‚·uQÚ]’Û놪\j—u6U¯Ó‡Á¨õ¸ñMÌšñ´âßzŸÐ!#_…ÕH97Y)â±Uˆm¿f¤Snv )ªË–6T•gÞ[5,O …¤/Td/#o/:e=â˼`V£6>r6\±eQíl|Ð(2ù"~ªTÝb}ë'ŽíEgK/)Ô§{È”¾2ÀoÞçqKRV-ƒÓQe=)¡{¢'èeß£à¿æ‘”¶þëöáà=¬:¢Ó©Ï«<=ežšØ\ñDe…,Ë,g¬5äÎ,3l–Ÿàõºª²W½9ä¬s h”¬3Ѓƒƒƒƒôà MÓâïÒ¿4MÓ4'Y(E]Ïã GÄõr­M–ræS…  6ì*v?nõ5÷@O-‚—ø:ã¯|¢(í,TSL^åQµ†rû 33°á oéÍîH5 <ó‹áû]Bz’]–ps’2jžŽJê$¢pm…Þgè`a{Ñ™y]¶„Æ×7¸yÅÐhT6V‡ãïðÚ®z(Jû¼8ØÕhÂ7B2|‰Bî §¦¥œrÃ÷Ô–—ÁJÉ$µú*·[n?ªîu–Qà²ã&L&“PÂ}*ðO­‹´†Úuó_ï`ò”3L‚ƒ[u±%UO¹ìj4AlYuÍe‰½Îlé5÷ZÀ}Ä!lvÀ äb?Æ]ÞDÂÛÁE9äöbåf:˜ô•joÈ-¶&.îë褃ۋ‡XHø€˜ËWljذËÄÛÈäg€ê… éû ZƒZ^é§òaUUk(·-ò¯-“ïÀEÊOÚ¼®Õ¡«6ÞY›ÑL*å)«–ötT‰N:˜ä…4dÔ$Ÿáf%~úP_îœÞ£QæY’÷ܰòïHÑ:/rOE&e4\õ §¦¥œê‚ÿ,LuA(c¢ŠtUê†Â^e÷£êÔf¯³ Þøâ{¯ÿÃ~rìÛü_¿úÝßÅL2å~烣ðC¸ ôà ¿×¢`‚B¡`"âi.nN¥š¦Kæ•M&S¡PH¥RÜ›:ŽÂ9þð[…!™djôçï+LËÆ>½ë~çƒÇÛl­óê‚&$“É ´ qp¬ŒƒcÕè ëKYÑó«ÇzbŸÞ-n‘…¯½ûy`Óð·?7LÖ™Ï7 \»vMÌ=C¡`25ÿfAA¤ø† =¹sšv3‚ ‚ RšÚìu~¥Š=>\ Yâ¹ ¼Äħ›Å¤³©HþckAAf³Îr¸€X ÿ ‚ ‚ M ¾aCF Ü_BRÎÜ‹5Œü ‚ ‚ MLm²Î³aþWIÛ3¸Íš[5šxŸF&“©wltЂÆÁ±2ŽU£ƒ¬6›­ÑsÃ…ÎùGYd\2J¾f2q5Ádb@Lc7&¯¼ÞYï. •óÝ×[hÁ†-h+ãàX5:hÁ:‚{ø |f9ÀýϤ…fýkDù5Aå!õAA©%ø† 4M3 £(ãþG&›S©”ø¹|¨ÊI_»v £gAA&÷:óIJ/iëq1›\PüÍ@  ÞËa2™7#‚ ‚4ee+ŽžcÃF,û’ûsÙ…BaEúYÿ5šq3‚ ‚ FÉEÆÏGöê«¡ZJŽ GdxÜë¬=s…[ñ·¸?üðÃ?üŒ›S©T*•"•4[Ö9=ÝÛÞÖÛÞ6~öîŸá>ò?5€µ ÿqz]]=„9 ¤NAr˜(F[1Jš^'ŒÕÛÞÖÛ~&–ŽŒ“†ËEÆÏOÏ·É®RT/¢Sú˜5‹½ÚWˆ¯Ø*¬¥ñ=Nt]ÔÓ Èkú©ˆÆQu‹eÎRI«™ò@º[zº·½-˜®UÓ8ùWù¼Z;óíƒÎÌÓ à{•IJ/M&# –k¾¿ùÚµk&“©P(ˆß¤iš¦i.zæôp:kx‡Izº÷,Dòû›ùý… 'À|áÑf~Ÿû‰LýÍ“ë'<ÜßÌï¯Üz2¦ž wžu?ääÝ—ËÁÞý3¢ÎÍü~âÍírõ¥ôh[Æ6îØwVò×ûÀqgEÞÌ?= à¸ÔýÙ/‰à¦ç½û›ùýM¾–tmÀZ°oɹ!XüËÐÖ)”lœKôM¯€Åá„¥Ïù0:™€soŸ4V±Ø»¦·ÝyOüœŽïS›³OC±”ðA• y•ŸÊPUk(sØ]®“‡§f®`Z«Nä"ãgŸÌnìûíµh 'ÿj"M†wžŸ­Sô,öá!Œ5ur³ÎIJ/b!ùn ñ;‚\¾YÜñLÐâ/Í7¬¯<™Ý¸Þ¯y,Y˜»4~a'5wiÐ`Ùé€ÝÏ?Rg ˆ~¤ Te´{ÞûÕ©™°ñüÐ)‹…ûeÀ(!kéìæ;ñöiH¤vvžÁi‡ÙhÅæÇ|áÑæÆ)¶‘|jg+yÊbY+áƒJ ZòJ?•£<ªÖPª:úOöÔ$lCTä"ã}KÎG£ÙŠâ™XŽÏLÇD^S]b¤–DÑéèó tŠ)ϾÉ42Óëj d á[ôHOs%Åû ¥_ï¬ËØÂÆç;¯gŸW-ñ‘©âRC*i`w]L>Û+¢\(ç’»±óÂ!##|4"òZfµßæv4áö=‹QoA .ß òÎd-h¦|3ÀZjne¦OÛgÖÓpëŸeq˜¥³›sM¸T"$I1´B™\ù£œ×àÄ9Ë~=Nc÷ƒÁ©ÛcŠ¥XMéø=G%›©Sé/w`}åv7uÂxÅ–d7v¾­·=>˜¿^†ªQËs~ZìšQUk02XNŒ>ðmqsKß’óæX ›²^,ˆ¸ÈŇ£rrrk˜+¹t‹ÌT%†jq›Ž*ѹì›ä×1ÄgB^æz¿ZC.¸|ŠËvGÞz¶kÁ¾gãâú•¸è‘‹ŒŸ…HþѨE§Zúuκ6ðN§u^É'7¹å ˜¹":ièÀ§¶w?tÏÑcV+fƒ½ÔR÷¤Ò°³œ¤º«B7”öª?‡žu64\ÖYæK¹³ÉdR§œ›šKiIˆXçSÎ'4ëˆÏ‹Ä¦Éµ xƒl鈧æ”;Úä‰R@Óï²¥èìoæ÷7‡ãÒ^FµN1&þ¨gElÅîº8_‡ÝÜS>i´b+rbôÁþfÞ•ªòFaÂOË>Zž~aƒÇæ¬c¥œ5 ¤J$ÁyK¾UFÌž½ ܺãÎ{œ'Š+ê#µD4§£ tæ¶ž‹%j=j –În¸=Ö>½Î¥ºs[Ïáö˜˜´æžô’“Ã}ÏÆÅgQ>”{Ö5Có¼ü³®yðœ=ùl:óà9û\|pj„<üÙ¹•cf åƒSOr9ØûòÔ §çùÊä¶ž¿ÕiÖîªÐÂ^‡ îïž<þÏ»@ #f‰þÀfî|oïežÝxÔ°»2 ·6‰¯z$Rím½—"yeг—ZJÃJº¯mì·6.Ü÷S0#8ÔŇû£]ÔР’×ðÓA¢ºú¨JCÙóÀÆñ>N^œ[ÚsbôAb«½wüÖæø[½œ»Ù§.ͤZÆÆßj3^K{:ªDç€ÿa¼·¯mFSF­ÁÒ —¹Øom.XN€tù8î¬Üä«ö©’£QæYÒô8<»±?j€¿ú¼D1Ç•@È\Šä ·%é<è© (•€¥’à¼yÌÜû¬g¥XW¥n(ìUv?ªNm²Î&xã‹ï½þýü¤ýÛü_¿úÝßÅL2å~çƒF 7¹|³ø î•Gü}ƒ?üVaH&™ýùû Ór…±Oïºßùàñãǯ¼ÞYóž"U㻯·Ð‚ ZÐ88VÆÁ±jtЂuÄúÚ÷ËŠž_=Öûôn±p‹,|mì ØÏÃNöÿÜ„Yg.D•ÿíî£7#‚ ‚ ¤6Yç& 90VFAiÊÊ7W=7ç×AA–ß°Q„½Of½Ÿ|Sï^ ‚ ‚ G‡y¯óW+Þã£„ÂÆhQcnAA&¥5ö:ï­}§áÿ½÷îpYùÊüîÌb™mUPåhóÝ×[¥…# Z°ÑA ÇÊ88VZ°^¼j³Õ z®sèüÍŸþÎû·úþé«a÷`ï“Ù¿´Àügi€Ó¿9fV—ÀÞ'³Âû‹ïƒ?F¬îÏ€?êÚ}ob†zbõãaóW+^ù" Ö+?¾8Ïß|ñÝc{ŸÌ]ù`â·Ù9µ÷Éì‡ðv÷•ù{BýðMTÐc¿9¿øî±šŽŠQl6[½»€TN&“A 64hAãàXǪÑA Ö‘VØëüÕ'àíŸüè=ñEbßJ‘Þ4_{˾Œý~â³_üëÍBÃŠ× ¿0™Jû IDATçÿòöX?sÌÿ!îß÷ÎÿÇ~4|íæí7ç³/gþ×›ðÇÈÐËï_Ʋ/çg7óoH_Ù£…&î~òÍÞ'wgz›}˾üm÷—ùšŽ ‚ ‚ R6-°×yoísøÙ?™ú‡N§ÿðß{`ÿÙ?qyåþ¡Ó°ùÿíi•È4Ü”ýyʽOf­ÇG­ÇG1Ïw4v6ïíäì|•c?ùÙï­>¡ÌoþÌ'-0ÿë¿>8õë9UíóFAAªKóg¿ùÓ¾H_™°µº?æó?}uP{ŸÌýáíÕ—±ìËØêÍW®è§cÙ—±ìÐÿµµ*òÜ‚ ‚ È‘£é³Î_ýw‚9-쵈ýžØ³Á±¾ú™˜o.Vbx®Ä׉Aà›?ýá ±0Mlº0Ÿ´¤ù*ßüé_\ÒH*ï}‰~ðÓ±ìú„]žçFA »\a¶Þ½h~>Îh)hþ¬³b¯…¸gƒÏCýü–û~žºDâGÃ×næ~q|Ôz|Ôz<²÷îÙn^øîV/Ÿu6¿{öâüo¬ÇgÿãKøéØ*_eb¦÷·¿þ©FßÌ'a¦Ôz|ÔÚÿ¹óßÊ{õGaü&“Éd2qîÆ]&?#I˜üŒº:QÁfõµ* ÕF´7⊩P²ˆŸQZ×fÂ.Áô¼°Ëï— ™H(aqQ§²ª¬WlØ¥+^±U`üÒå]H×õ4ò «)(z”Ô©/_YŸ+£éÆJ’©Òe¯?W-ÉÀ :Mc Grî¤Õ2z#P»¬sÁT½^ÇüîŒ,þéXöãa3€ýæ<—‡Î ›Œ%\E±ºùÝ™¬ô5ÁS¿æŸùõ¿ˆú¹B©DªB(”õŠÛ°ñ2–}9ãþQ å0~“’…B¡Pˆ{( <ñ‚@ÒN+Åøy‰íÅŒCí>lÖ–äÅmÞ‰0 à\Üæ ¶3Žfw¸zÆ]¢ …B–…å‰o/:‹Û… „uD›;}¶èq˲NÅyó9aîÚÆßuo ϲ ­S¼ÜÑ?Ô¢«\+ìjÜC”±Š-v™LŽø™Y,º½˜¹f¡„ª4hÈ«ýTV_㨲WúòÊ>³a—p]&ÁQ½¨9ÇjBð)­+„œ‡oÈuRž8áÒe+¬ªAÚ«&æ(ÜIÛèG†CÎ:óárÝÿ$ R˜åÌâvÖ<Ɔo„|W=ìrÈ7BPCngæ«£ƒB}ÊꔢWF3ŽÙ9 o°ËûMüê“+̪â’ŒnšQ4¨"YN6!6.aÃÞDÂÛ¡\°’ª³ûÐRwRŠìœK^B®4‚Ò.š«&«•]R.”‹k(¡â—GÕZHÓïuÖB™ŠÖ*A4`–C o‡¶Ï0s^Xœ¢É"ªË¦s S‰Æ« „]*n½%‘ NÌYt0 š:5ôˆ/äP\.š:9˜åÓÊuP¼˜åßic[îβ´üÅ©9æë<—›ïD˜ÆßÁº´BØåÀF—+¼†]Ú|Ü¢'›…R—‡ò¨?;ש2>iåŒø”3¥YG|^$¢Æ_ÅI1N¹ñ%¹G‚X¥§Œ®ÐÁB¡P(Œ,KÏ[jâmû†u[l…ñ…–`_d„|¤ÁŠ­wƒY®rNFßOËõb…<Ùg:¸íŽò¶ìð–û€W>V⦑íEg¢œõ]ȽO\àâTäBˆ©ÜâŸtDuþ[ðÍŽ¨{;î¡Ø9D sOŠ&¨.„¸½Ê%*ÍêBÏ‹ö¡ÅÑsþyŒr;Y–}‘r;CË Èír@£+•Ó#¾Ì جmdÊšá&x[W‰ËCç¨-™uFŽ|uS#å 싌ÓJ­BlÃø‹E:BäP ºl añAUyæÝѹUÃòt°PHúBª­ÕÜm{{Ñ)KãÑ#¾Ì f5jã#gÃ[Õ^‡rJ&_ÜOK5./ôYœ&¶µ˜v¬VÃ7ø¼ðálq+–}gÃ.ñ{ Åv›ˆ±¸x²ï*h@܃6ùœ­¥°huD@¼88h7º Ê Y–YÎX)jÈYfØ,?ÁëuU÷¨˜uFŒCˆë3äÒ¿,å̧ "lØUô.Âø;¼¶b¹k¤ ÐS‹à%¾NÇø+Ÿ†(ÏUðzúBÂ66¡ å‰'ü~ =bó:¼:‘s±Š-ö Á·mEË¥…jŠÉËý”Ô çņäU}&ªMxËÚ×PÍ0VC]61×\Á¬’èì}–ìj´„ã«¡ˆnƒ?U:XØ^S3\o¤:Â#ÜIu]&|#4!×(äªdtQ95ä†72î! ¨!7,/ƒ•*e_Í £®`Ö)iUµ#êæ¿mƆ'd)g:˜·êbKªžrÙÕh‚زêšËŸnX·1™p¸py*‡°aØ#4{ˆý vup_Íñ3 ß^¬\ঃI_©ö†Übkâ´ŽN:¸½˜qˆ…ôˆˆ¹ÜxŦ† »L¼L~¨.·©B2î¡Jø ZƒZ^é§òaÕ<ªÐ©/¯î³ð6~¥ǪøXñ׺0ZUš2Jƒ(¡ˆe_Vã\ þð[…!™djôçï+LËÆ>½ë~çƒÇÛl­óê‚&$“É ´ qp¬ŒƒcÕè ëKYÑó«ÇzbŸÞ-n‘…¯½û†5Øÿ3fAA†÷:#‚ ‚ ˆ!p¯3‚ ‚ ‚³Î‚ ‚ bÌ:#‚ ‚ ˆ!j“u~¥Š=FjL&“©wltЂÆÁ±2ŽU£ƒ¬6›­Ñ3†Î Ì+¯wÖ» Hå|÷õZ°¡A ÇÊ88VZ°Žà^gAA1îuFAAC`ÖAAA YgAAŽ¹ÈøùÈ^}5TKÉäˆ oãS»¬³©P¨^·‘ú‘žîmoëmo¿¿ {÷ÏpùŸÀÀZÿ8½®®ž‹Œ Âã÷wɽím½ígb¹šŸQ«!X·—b*”,2½®¶N:2.˜ž>?<ß&»H0`ñ4Y"\²^íÆÎ+ÄŠWlÖ‚ÒøˆÇ9 ”ðA= ‚¼Âj 4Žª[Ôïƒò¨ÖL‚Ô ÒÝÒÓ½ímÁt­šVLGHeÈçÕÚ™¯htfžfà³Î|´ŒYçf!=Ý{"ùýÍüþÂ…`¾ðh3¿ÏýD¦ÀþæÉõ€îoæ÷Wn=SO…;Ϻrò‰îË¿Œí8î¬6óF-u8­ÖaïþÑ‚›ùýÄ•œelaãŽÝqg%½TÖ9 à¸ÔýÙ/‰8µç½û›ùýM¾–tmÀZ°oɹ!XüËÐÖ)”lœKôM¯€Åá„¥Ïù0:™€soŸ4V±Ø»¦·ÝyOüœŽïS›³OC±”ðA• y…Ÿ*KTGÕtû°;ÏÝ|cç#{Z3Iõ 1L.2~öÉìÆ¾ß^‹ÖJOGˆq¤ÉðÎó³uŠžÅ>~ݬà^g¤ ÖWžÌn\ï×<–‹,Ì]¿°“š»4h0ž³?ÝR:ýº0)Ÿìtf_ v?ÿ H öŠXSž÷~uj&l ‰Ô.ÀÎ38í0­Øü˜/<Úܸ#Å6’Oíl%OY,k%|P©AK^ßO•GÕôû°³•ä‚Ýu1ùLv”ŸINRcr‘ñ¾%矿 ÖÎÄr|f: òšê#µ$ŠNGŸW SLyöM¦”™^Wk K¸OʘÊׯÒÓ\Iñ>hé×;ëÃÇ2¶°qçùGÅÎëÙÇçUK|dª¸ÔÐÊ@ˆ~­¥\(ç’»±óÂ!##|4"rÜëŒg-5·2Ó§í3ëáI¸õϲ8ÌÒÙ­¸)’ˆ©Äää°¸Ês4¼¢iÉ%I15†¦uì×#à4v?œº=¦XŠÕ±x:~ÏÑÃEÉfêTúËX_¹ÝM0^±%Ùoëm毗áƒjÔòœŸ»fÔGÕ´ûð$Ç߆Ov:Äß4g¤,ˆ¸Èu€‡Â£rrrk˜+¹t‹ÌT%†jq›Ž*ѹì›äWBÄgB^æz¿ZC.¸|ŠËvGÞz¶kÁ¾gãâúÕ¡“¹ÈøYˆäZtú ¥_ç¬kïtZç•|Òy“[‚™+²¡“ˆ|j{÷C÷=fµra6ØK-uOA* ;[ÀIª»*tCi¯úƒYg¤,.E¤%!b}\7Q$>/›&ׂ}KΛcf¯Â?káè§&”_±N¿GÈj”¢?°¿™ßߎK{Õ:Řø£ž±»ëâ\|vsO… ¥ÁŠ­È‰Ñû›yWªÊ{¾ ?-û¨þs þ!¼w†ŒŸ0å\/’à¼ujæŠÖ×ÎÞnÝÀqç=ÎOöð᩺ÄH-Í騹­çb‰ZZƒ¥³nµO¯s©îÜÖs¸=&&­¹'½ääpß³qñYT§åžuÍÐÛ#†Î_‡œš0!vnåÁ˜YCùÀàÔ“\ö¾<5èéy¾²¹­çoušµ»*4¤°×!›0ëŒT„Åá$rEÚ‰¢ÜÖsG™xl¶À®ÛC¸­¹æX:»“Â⃪ œ^ú8eXÞ~}3Ÿ¸8Wd/#oܱËÒ“ƒSOrédâ-WѹR»bË208µ²µC>h™¼¾Ÿ9ªnQ³–±á!ÜNÅ”sÝpœ{ûÂõ•ÓKÃÜó-¿yCžÇ-IYµ NG•õ¤„†ž{Ô6ȾGÁÍ#"faõûpðVÑéÔçUžž2OMl®x"Ãü&lí¬¥žö˜-çÓøúγîáY]®ªìUo0ëŒg`pêö—9&×Úd‰¢Á©Û)nƒZj)ýV§Òr‘qŒ›ëÆÀ{·`†ø:Ýz òiÈ|Á—'KìÚÈEÆÅ­%Ã8ËØÂC#fÆþáS3g'ù‰µœŠ-ÅÞýi!Ó¼–šî<©åƒÒÎB5Åäå~JjPUk0Ø‡ÝØ•Ii#;¦œëù¿Ï>uò˃Bzr/µTÆfÝ2jžŽJê$¢pm…†\$x`ÀŸßœu<ÉAgwròcU5ó…G06•Õa±ì›ìþÕ˜Ù¢}^{©¥ô”«ŸáKr95-åæÁsðQèùi‡N¼}R+ÐyR&©Â^GàeJµÉ:¿RÅÿóî?¾ó>ù;YR™¶ƒh8‚ô6sç{{/ÀðìÆ£~þæwk“øªG"ÕÞÖ p)’W={©¥4¬¤ûÚfÀ>u ’·‡Û'…ãóU&æ VàÌp{ÿy*± [ ÉIÁ—"= }“i€áög‘ÀðìÃs„²ÿÃK÷>ÒmÏâp>íímªo<2CDO§ýúÊ­3ÃígøËÀîº0(æ:ŒWljö¼Ãí“îû)˜êâÃýQ €®jhPÉ+ýôÖæÂ Q]}T¥A€ôtïÙÛ|]>VVÎ$H=81ú ±ÕÞ;~ksü­^ÎÝìS—ŒfR-cãoµ¯¥=U¢sÀÿ0ÞÛ×6£)£Ö`é„ËÜ ì·6,'`ãÎxw¹8î¬Üä«ö©’£QæYÒô8<»±?j€¿ú¼D1Ç•@È\Šä ·%é<è© (•€¥’à¼yÌÜû¬g¥XW¥n(ìUv?ªNm²Î&xã‹ï½þ?øÉ±oóýêw0É”ûbÙ—Õ8—ƒòø?ïïr¿DWýH…΃?üVaH&™ýùû Ór…±Oïºßùàñãǯ¼ÞYóž"U㻯·Ð‚ ZÐ88VÆÁ±jtЂuÄúÚ÷ËŠž_=Öûôn±p‹,|mì ØÏÃNöÿÜ06yb.†æ~á~×ùEü]-Póó@AAªîuV¢NsÁ´X®Þ†¡H0‹ÿ’AAFß°qPÄ ‚ ‚ HsS›¬sc|M°êÝÏ@î7Š´ÿ€@àˆlæFAABYY犣çÆÕ{0ÈMJ™BÁ¨^“éH}YAA© Ì:ó¼úõs U0™¯3GŠï¾Þ*-„aЂZÐ88VÆÁ±jtЂõâU› ³Îy½[úP2£l2 gM dÛl¶zw©œL&ƒlhЂÆÁ±2ŽU£ƒ¬#˜uæ³ÎF3Ê×®ñb~XP|TBAAš€Úìun€7lüåõnî ¥k}ø¡L ùQqAAitj—u.í} ²¬3@*•â~'·AsÛ0„wið§F~_ ‚ ‚4˜uæ!³Î4=¨ñ{¡`ôwk ‚ HIذËfëÝ‹æçà㌖ük‚"¯~ýœûK&¥ñ»ÉdôàÚµkµ=‰šÀøM&“Édâ܇ »L$~F’0ùmlØ%ÔGjhÎDŠ©P²¨ŸQZ×fä¦cÃ.—ß/2)lK(q…YÕÃëTV•õŠ »bÅ+¶ Œ_:c¢¼Ï•ôÁby…Õ=JêÔoQ9“ÓPÍ7VFú\r¯T*­ Z’)<@'ušÆŽDß‚uèC}ºP3ð¯ ò(²ÎƒŠßKnƒ&÷CÓÑÞ¦R6Œßä€d¡P(â (O\<夜VŠñóÛ‹‡¦û°«Qðù ºÊÖ´ïp“›`ÁB¡„eF!AyâÛ‹Nçâv!H€sq[º¨ã Àé³E'ˆ[–uŠ»øZÒµŒ¿#êæU$mY´u %Ûîh‡ŸjÈ-^!ìjÜC”±Š-v™LŽø™Y,º½˜¹f¡¤*4hȳY[R°šwB¡hUöªDŸ•3II •Ñ”cUzŽ­É•¸! n`ذËûMüê“+̪è’Œnš‘ñ%²,õÕ¥ªr6<áM$¼Ê+©:k°-剋Ï?ŠAÈιä%äJ#(í¢¹j²Z‰Ñ%åB9ÿèv ‡Š_çQW0ëÌó—×»iš†ð?þG?m\àÞ¶AV‘óï¼ÿï¼/{itÃ,‡ÞmŸaæ¼°8E“ET—s| ‘ñaì\kØÕhB d!œ˜³è` f»è_È¡¸\4ur0Ë!§•ë xù0Ë!¾ÓÆ*¶$Üey¤ Gµ}°8jy1å¯Ý¬îÑ¢èÍ$‡OU¹}ÖAlÄ‘á'ò„7;R(£$­1&…‡g^¦PHúB7´c6|#ä´RÀø;²WÅ5".ÿ®h‚ Oxù}Ò–eòÌókYq«Q]èyÉ>´ü…¡9æë<—›ïD˜ÆßÁº´ˆAØåÀF—+®Xv5jóq‹žlJ]Ê £þ`Ö™gÔz ×®˜ˆ88 3p%…BÄè: Óê-Ô ŽOZí$c'>åLiÖŸ]aVº`ì\Ê/É=Äò(=¥ZÕ-, …ÂȲtçWëoÛ7¬Ûb+ôˆ/´Ìû"ÃçØŒVlE¸ÜÈr•s2Œ¿#êž/6°úGõ)2“Ô+-ȽO\àâTäBˆ©Ü.Û-ʨî‚ovDÝÛqžÈ@ÈÁUïð&¸ˆ_ÑÕeƒ·×@¹D¥Y]èyÑ>´8ÚcÎ?¿QCng"˲/2ÂRCngh™¹]ht¥rzÄ—yÁ›µLY3Üoë*qyè\u³Î*¿K±rAú!èb¨_ÜÑ$ÈW 5RÎÀ¾È8­ñØ÷Pìj4Á{—#;ת«jÛd(ϼ;:·jXž I_Hµµšƒ»mo/:e)4zÄ—yÁ¬Fm|äl¸bË"®’ >h™<ã×{"Ñ?j˜CÙs`„¦«rûl¨•"™l6ì¿·`d_‹‹ç-û®‚fÄ=h“ÏÙZ ‹VGÄ ã€ƒvp£« ¬e™åŒ•¢†Ü™e†Íò¼^Wu/Œz€YgF@Ф¹-\NÚpÍÐŽŽæÊ:Ó#âú ¹ô/K9ó©B…ˆ»M)”B!‰yçCO-‚—ø:ã¯|¢$pq¼‘êãïðÚ®z(ÝAcW£ ßMÈð% ¹*]TN ¹áÆŒ{ˆjÈ ËË`¥JÙWó¨+˜uæ‰e_‚ €û€ bÙ—±ìKI. ñK€øÛ'ŠíM–u¦ƒÛîh‡°Ã=²á YÊ™&ÁÁ­ºØ’ŠGGv5*Å=µ†û‰C¸J0B¹‡ØÏ°aW÷Õ?òíÅÊn:˜ô•joÈ-¶&.Xë褃ۋ‡XHø€˜ËWljذËÄÛÈäg€êq›*$ãJ×µ4¨åÙÕh‚nŰjUè,Õ¢z&)¡ÇJ«’}®„„b`TPž«6^f"k+kï¢ÚÃÄ7!šG˜,(ÏU_Èa2¹ÂTéê-Žt•ݰò/HÒsrOw5 2—SõŒ.)§º Áïú§º ”±QEº*uCuaÔ›ÚdMðÆÿãïÿÏ·Û¿Íÿõ«ßý]<À$Sîw>Ŧu‚K ó¯Â¥â/>ÍÌ0ŒX…¦iN À‡N ÿ‚â»5ŽBô<øÃo†d’©ÑŸ¿¯0-Wûô®û?~l³µÎ« šL&ƒlhЂÆÁ±2ŽU£ƒ¬/eEϯë‰}z·X¸E¾6öìça' û~¥æ'U6\ŒËñÜ+êÄo  ‚è’ð?¾ó>ùñ/Õí%‚ ‚ R?j“un€Ð £¦ãüg"©LRrײ(ÀÅâb–ú(dAAƒPV¾¹âè¹ABgàö7;Z2æÿç].i3‚ ‚ HÓ€Yg9€±aƒ+ ø¯É:“|]¡º(14‚ ‚ H£ƒYg9Õ_ @,ûrÔt DNzÔz\ü›)€°ZQ#fAA&³Î&`F|'Ã0@fšU9ià²ÎФ ²Î™L¦Þ]@Z°ÑA ÇÊ88VZ°^Øl6Ì:ïÖø‹ð‹È_„££&Ùk7xJyMð†W^ï¬wÊùîë-´`Cƒ4Ž•qp¬´`Á¬3OÉWgH¯Ýùkžý¥ÀÆÍ:#‚ ‚ µÛël*ªÚó*c0´e_ŽZ÷·%^Ç ‚ ‚4‡7›øÿš!ë,¢xëó¨õ8ù'‹YgAAFß°ÁSnhK&››`C3‚ ‚Ô™\dü Œ™ë¨¡ZJŽ GdxŸÚìuþªØc¤Î¤§{ÛÛzÛÛÆïïÀÞý3ÜGþ'°°ä?N¯@.2NÓõî?"X·W.2~>²'•ì5½.·]oû™X:2.˜ž>?<ß&»H™Â¶ñû»PD§ô1'j{µ;¯+^±UX Jã#z瀠ôÁ24ò «)Ð8ªnQ¿:-¶š)¤»¥§k:Q+¦#¤2ŽÂ}VÖ™§(+ë\q+Í:ï}2ëýä›z÷¢ž¤§{ÏB$¿¿™ß_¸pÌmæ÷¹ŸÈØß<¹pÂÃýÍüþÊ­'cÜT踳ÂÉlÜyþ¥!5gïþÑ‚›ùýÄ•œelaãŽÝqg%½Ûå÷7óFO8.uöK"¸éyïo\» Ì]°ì[rnpÕÝ_Nñ 9—è›^‹Ã KŸóat2çÞ>i¬b °wÿLo»óžø9çìÆÎóG7ÂØùÈìÆ®×ÉÃS3Wp–¨¹ÈøÙ'³û~{-Z+=!Æ!ï³gë=‹„R1/ IDAT}àýºii™¬óÞ'³Öã£ÂODÇA1>.ÎúÊ“ÙëýšÇr‘…¹KãvRs—íæÁsö§[2çÙy–~«³ÅzêÊîçŸiÁþ@kêÑóÞ¯NÍ„ç‡NY,Ü/þÀ@ YK§°qêÄÛ§!‘ÚØy§%.©bóc¾ðhsãŽÛد ÎÎVò”Ų¦çƒ´ä%';ªúÊ£j ú}ØÙJòGÁ|&;z²§&a¢"ï[rn<µÈVÏÄr|f: òšê#µ$ŠNGŸW SLyöM¦”™^Wk K¸¯Ø¢Gzš+)Þ-ýzg}øXÆÄ,•Æy=ûø¼j‰O±P¬;t 2¢_k)ʹdÇnì¼bZw„FDÞJYgûÍùìËXöelõfîºÑ3¢ÍZjne¦OÛgÖÓpëŸeq˜¥³›sžää0wÑŸ}2ë)<Éñ·á“Ž'¹Ü‰Ñ¾-nné[rÞlõ”õ`)@ÄÍ@®(>•““[Ã\É¥{\d¦*1T‹£ØtT‰Îµ`ß$¿">ò2×ûÕr‘ÀåS\¶;òÖ³=X ö=ׯÄE\dü,DòF-:}ÐÒ¯sÖµw:­óJ>é¼É-ÁÌÙÐI D>µ½û¡{޳Z¹0쥖º§ •€-à$Õ]º¡´Wýi™¬3‰ùݙ՛¹»Ÿ|ðMô=!ýÞÊ|µòá•/ÒW&¬Çg£_©ŽÀ—q¯¬D-#•pÙk)á]D ‘¸‘–„ˆõq>å|B»¹ªŽK±õ¥Üø’Ü#A|5¤ßctïM`3¿¿9—ö2ªuŠ1ñG=+b+v׏ø:ìæž Jƒ[‘£ö7ó®T•7 ¯õYý£: ø7Î%ø‡ðÞ™ä)‹EÜà±9ëX)gM©IpÞ’o•³€go·nà¸óç‰âÊ€ºÄH-Í騹­çb‰ZZƒ¥³nµO¯s©îÜÖs¸=&&­ÅŒOß³qñYT§åžuÍÐÛ#†Î_‡œš0!vnåÁ˜YCùÀàÔ“\ö¾<5èéy¾²¹­çoušµ»*4¤°×!›Z)ëLb>iI™8æþ8Æ¥¢ß;ÿøÑðµ›?¶ßœÏ¾œqÿHu ½i¾ö2–}9? ó~òZÃÞ'wgz›}˾üm÷—yøcdè˳|¶ûgŸøÉ7JÆÄâp:ļ‘VʸéL>3–›Cª‹¥³;)l >¨ª±Àé¥S†åí×7ó‰‹sEö2r1ñÆ»ìòœz’K'o¹ŠÎ•Ú[–Á©•­¢@íƒúÈäׂí¡N" )§ÈQu‹š}°Œ-ávG9YxÊÝ&OŒ>àwl#5Åqîí ×WN/ sÏ·üæ y·$eÕ28UÖ“üyîQSØH ûÿ5ˆ˜…ÕïÃÁ{XuD§SŸWyzÊ<5±¹â‰ ó›°µ³–zÚc¶8œOãë;Ϻ‡du5ºª²W½iɬ3‰˜þÅ<<ßQæ€ÕGí?û'3À±ŸüìÇé/ójóI ÌÿÆú¯ONýú_Nííä`þ7œÀЕ/Ò_æ5?ã008u{ûB=¹Ö&K9 NÝNqÔRKÊÍ­¾ª^wÞ»3Ä×éÖ•OCæ >¸ =?í0É·OCj:OÊ$5PØëN^œ[ÚsbôAb«½wüÖæø[½œ»Ù§.ͤZÆÆßj3^K{:ªDç€ÿa¼·¯mFSF­ÁÒ —¹Øom.XN€tù8î¬Üä«ö©’£QæYÒô8<»±?j€¿ú¼D1Ç•@È·l‘ƒžÚ€R9X:! Λ'ÀLÁ½ÏzVŠuUê†Â^e÷£êÔ&ël‚7¾øÞëÿðƒŸû6ÿׯ~÷wñ“L¹ßù Ëzï“Ùá}>„ýcÄê†ß¿3K…ßDß›Hül~ñÝc{ŸÌ}y6û/§öTG¯Á]²dëÇþ׎Z&þ§1÷¾Zñþ®ýï½!7üþåX¿Ô“ˆLàãáZÅ’ƒ?üVaH&™ýùû Ór…±Oïºßùàñãǯ¼ÞY£þ!‡Àw_o¡´ qp¬ŒƒcÕè ëˆõµï—=¿z¬'öéÝbáYøÚØð·<°ÿûù£‘uN_™°^zbõå°Þ=Û}œ+üñʼnsbæwÏ^<þëüg×Ïv÷+ŠJì7ç ðS¥óI˜éøñìúŒùG°zsvèø(WÝ~s~Q!P«ÓGAAFm²ÎG t6¿;“}W]|ê×/c¿Ö)TU+Qk˾ÓmZ)€ ‚ ‚4eå›+Žžð×AAÄ-ÿ† AA1F«¾×AAAʤeö:#•òÝ×[¥…# Z°ÑA ÇÊ88VZ°^¼j³Õ zæBgSûÔ ›ÍVï. •“ÉdЂ ZÐ88VÆÁ±jtЂu÷:#‚ ‚ ˆ!p¯3‚ ‚ ‚³Î‚ ‚ bÌ:#‚ R>lØå ³FdŒHl®*ª´`E`Ö)Æo2™L&wå³a—‰ÄÏHüG•ŒËåRÔ ‰ñ õ”m‘Šq¢-¾L,áuHý›ÐÐÓJcæg”S§48~Fe¹0v‘ƒÆ†].¿_.¤UÅhÑ©¬*ëv)ÄŠWlˆëYåqŽ ¤A^ßGô<ј†’³„NÇ‘ªÃ>1æŒßd"CœC‰u›«çž š k f‘r`ü&$ …B¡÷P@y⤜V ˜e^¢°½˜¹fU268·e"lØåÈ,n‚´F[Àfm¼æ¤Í;!Tóñe…¸‡ÆÏ×Ù^Ì8d7qGHjESOKÀ†]⨠…$,3 Êß^t:y#H–íàôÙ¢ä Y§â¼)‚0o/Æßuo £eA[§x=¸£~¨!7DW¹VØÕ(¸‡(c[åõ¬ò8M/ÐÑ !¯ï#ª£ek(9KX©*Œb§Ï'ÎÅløFÆéÊ'œ¹ÚPžx¡°½è¬Oš´` Á¬3RÌrfq;HkcÃ7B¾« è  Áf¶.J%3e%J6ìꈺ·y÷ÒhKÒLY•Î*t0䡨!·3ó‚å¤=q™{—ÖÓ¬°«Q GU‰2°N]µyçÃò¢ ´Fu /["bg6ËEÎÆ*6?ůgδ½ ¸-y}Q=ˆ†"³DóÜdëˆàqÌœ×ævˆ©J6<áM$¼|zQZ1ð¯¬*V¤„ÊÒŒ:=‘£hˆ »\á°ßÔªkhÁÚYgÄ8Ìr(áíÐ^Peæ¼°8EóŸ8‡X)Èb%IFTãÈ•¢Dܬߖ”†94]œê²%²ò"2=-»U„)%‘Œ@ 1L‚f6S =â 9&ÔÔÉÁ,‡„|£h@f9ÄwÚXÅ–DÛã y¾¼¾¨–¡¡Ô,ÔÊsÕæcØðÌâÔüÈ<¿¦÷@Ø%­[‡Þì¿XâÖ<:²Wŵ ŠVõŠ÷„D«!¾3dš´`ÍÀ¬3RÂîÅJ°2QÄ­¾Ž,“)C®³óîEźn‘¶¸=óœ":(¬ñ–¿õ‚ÔÓ2”_’{$ˆå6zJ¾Ó¦8¼…F–¥g µN1&¾a•žžè_h™öE†Ïh­ØŠhy\Ð÷#¤#Sj–@j =â 9:¼6°«QÅ“SøÈ­.°/2B:ÃÔáM”õäV^O´r¶øSZ°F`Ö©ùJp‘D=â“ÜN[FÌQ9ÝCž ö†UY[Œ_;JR- ³/2zab1=M ÕeKˆªÊ3ïŽÎ­–§ƒ…BÒRm­æàbâíE§lš¦G|™ÌjÔÆGΆ+¶,2(é*dòú>Räh4úŒ)çúBO-:ÁWÜߌ!ûNB…éCC=©FCMZ°6`Ö1=­ç€|é_ž(bÃ~ñeÒ"z±d’|òÌ/f®0«Ýv)îÄŒ_Ø›ÅÉð‰JÐß› ÖÓ*ÐS‹à%žNÄñ«Ês¼Þ„¾v‰-” ã(O< bo=bó:¼:‘s±Š-…Êã´¼€ »ŠŽO1y¹”GËÖPÞ,Ô Ê/Áp8Ôt¿é@uÙå|‚ÍjÏ!:=©¬¡-X0댔ÜvG;L&“©#êæ¿mƆ'd‰"ª ÄÌänœJb¯³ "ÔöÄ“6o‡+̪ÛbW£ b»«+ÌeÍ8øå[2Hó»pÉ®‹.Sÿ% ?£¥§e <ñíE~ÌL&“Fh ÷û6ìâÇÊÏ€|{±r¨è`ÒWª½!·Øš¸p¯£“n/fb!=â#óÆ+65ŠëYíqš^ £A-¯ï#ê£åj04K GÊsÕr˜L®0xæ¥į±îÄ»b©éUø¦š#³Xá®9ƒ !€¬2µÉ:›à/¾÷ú÷ð“öoóýêw0É”ûbÙ—Õ8¤ƒ?üVaH&™ýùû Ór…±OïºßùàñãÇ6[뼺  Éd2hÁ†-h+ãàX5:hÁúRVôü걞اw‹…[dákcoÀßòÀþìç1ëŒ ‚ ‚4<¸×AAA {AAĘuFAAC`ÖAAA Q›¬ó+Uì1Rc2™L½»€´`£ƒ4Ž•qp¬´`½°Ùl5ˆž1tn`^y½³Þ]@*绯·Ð‚ ZÐ88VÆÁ±jtЂu÷:#‚ ‚ ˆ!p¯3‚ ‚ ‚³Î‚ ‚ bÌ:#‚ R>¹ÈøùÈž#’›«Š*„-X˜uFÊ$=ÝÛÞÖÛÞ6~öîŸá>ò?5€µ ì£Jæü™qâc0-÷Þô4_¨j r±"_bHFìÏô:@‘>·ˆñ箘Ťœ^'³·½­·ýL,'???<ß&ORT)¢Sú˜5‹½ÚWˆ¯Ø*¬¥ñQzœúš7¬A×ô5^VBC…}FÎXÄL¸hë%CœC‰uvcÜÔ¡žtz‚h‚¬-˜uFÊ!=Ý{"ùýÍüþÂ…`¾ðh3¿ÏýD¦ÀþæIHÇá!W²9û4Ë©dÞ:Ž;+\ÉÆçɽîì“Ù}¿]£-ØyÖÍkNt_þe,gDf7vÞÉ÷ç!Œìiö¹eØ»F±Íü~âÊ0Å2¶°qÇ’¿Þ Y*¿¿™4zÀq©û³_qjÏ{xSÚaÞkÁ¾%ç†`‘/w@[§x=œKôM¯€Åá„¥Ïù0:™€soŸ4V±Ø»¦·ÝyOü¬ò¸õͯÜz2¦õd¨Ð !¯ö5ÕѲ5(û¬á§HMq\ºø4$>¸.<¶€eláÁ˜ù°š<1ú`s㎽þ=i Ђ5³ÎH¬¯<™Ý¸Þ¯y,Y˜»4~áدûyOÚÙJž²XT2â!lçYú­N³pt¼oɹñhÔR¤-IóÉN‡A™­ä¥A®Ä|&»%‹}nv?ÿ È뱦=ïýêÔLØxª^¼ü²–Înþ·oŸ†Dj`çœv”˜s¥ŠÍùÂ#ÙíJéqk©9þš7ž³?ÝR‡¡r Zò*_“¡¹ ¬‡'áÖ? q·ŽÌË"3I&99Ì9ÌÙ'³.œZ q³~[|ÒbDžäxç?ÙéW÷¹È%Ї™’ˆ–"Wåì×#àT¸6ƒS·Ç»b4ur¤ã÷=\”l¦N¥¿Ü€õ•ÛÝÔ ã[mKgwYa¨Z^ò#-ÔGËРèsQ?Ejƒù‚¯ûòÿYÏEžÞyo³’2ä:;ï0à¼ujFæ¥EÚâöÜä–~JÊ ø7Î%øðºw† [.å 寗ä b¹­ß#ßiSœþÀþf~s8.íjUëcâzVÄV쮋sñuØÍ=ò‘+¶"ZWH_+÷hI²ÏÅý©ƒS·Çú&»Uܦ¹dî¼G®Ð;„'{ìÛz·Ç8¯ì›LW¸€`¤'Z 9ä}k9Ђ5³ÎHEXN"3T$};08µ²µ£+#æ¨çÞ¾p}åôÒ°zk¦¬­µ`{¨SJN±Œ-áµ[.å Üh ˆªj,pzéã”ayûõÍ|ââœjk5oܱ˦éÁ©'¹t2ñ–«¨™´+¶,2Èm=/ëaI&_Ä×ô–¡AÞç"~ŠÔ’~Ï;Oª#ûNB…éCC=©FCMZ°6`Ö1ÎÀàÔíþEÄÒ¿<}»wZÈ{­¥æ†;OjÈHÈ×ÙÍþ}ö©süþ®v[¹È¸ìNlDFd7veRÚ2Ûš)gxïÌ_§[T¾¥Ì|Á—'KìÚÈEÆÅg¡’aœelá!Œ»Üú‡OÍœì.¹CZY±¥PyÜÀàÔíT`/µÄ— /:>Åäå~DjÐòIJ4hÏJ?EjŒel¡XÃ=ZN˜üXÇí-ÝI];Ï´euzRYC-Z°&Ô&ëüJ{ŒÔ‘þÀfî|oïežÝxÔÀßênmŠb¦`¦¯m.>ܵhÈ@rr¸}.Eòcæ\D8pbôAb«½w6Tmí¥–Ò°’”Ûo“¡þOïÙÛüï|¬¬êOË`¾ðhÎ ··ñŸ§›°µ@šc£g¡o2 0Üþ,²ÑCX †gž#” ø^º÷‘n{‡óioo»P}ã‘"z:í×Wnn?3Ë…\v×E)oa¼bS³wÿÌðånŸ¼øp߯ö¸@"ÕÞÖ p)’×xðPjPÉkø±aQËËÓ 1K¤§U~Š,cãSmcí·í·6nÞïãl oÝQ‰ø7$pÜY¹©©q-È¿ãexvãzEOJB-Xej“u6Á_|ïõïÿà'íßæÿúÕïþ.`’)÷;IJ/«q.H ø­ÂL25úó÷¦å cŸÞu¿óÁãÇ_y½³æ=EªÆw_o¡´ qp¬ŒƒcÕè ëˆõµï—=¿z¬'öéÝbáYøÚØð·<°ÿûyܰ ‚ ‚4<¸×AAA oØ@AAC`ÖAAA YgAA1Dm²Îørº滯·êÝä@ ´ qp¬ŒƒcÕè ëÅ«6[ ¢g ›ÍVï. •“ÉdЂ ZÐ88VÆÁ±jtЂu÷:#‚ ‚ ˆ!p¯3‚ ‚ ‚³Î‚ ‚ bÌ:#‚ ‚´lØå ³åÊ—[«Á¬3RŒßÄág¸6ìâKL¢7e&ÂÅĺ&“Éf÷cÃ.IñóÊUm‰zZÞoi?£œ=%ãùÒ¢ÕH›²a—Ëï— É®ºBŠèTV•õŠ »bÅ+¶ ¤å}¥˜ï”Ô ç×G+óVùQA‡¼úûᣞ*‹XõüP+ÛÕ±é£y¾Œ_ÛóE™2G1¬fã°a—’…B¡PH‚ÃfñwDÝۮȖe9!©¬´y;¿ó%ùò¸‡î²%²Üv5 N>¼È8­ãçÛÚ^Ì8d7tG¨†çÜd°a—I°a¡PHÂ2£ <ñíE§sq»¤À¹(˜²P(Ä=€Óg‹NS©u*^àìä„ãJ8ªq…héJ¶ÝÑ?Ô¢«\+ìjÜC”±Š-€Ò ˜eÁ¢Û‹™aVÛwt4hȳY[Rtá åSu´oU…_¼2Åëý½žPž8áÉFQÎ5¤ŽMذˑ¦o9”]‚Ï'Nňfã°Ù„o„zÄǾ¶.Š;Jƒ43ç…ÅyÑ?éàöb¿£G|™,§×võªMüî! ˜åß5ävòÇ€òÄ Û‹ÎjŸXËÀ®Faq[šT9›•‰uêªÍ;Ç–W\!ºP]ÂË–ˆØ™¿$ Vl~”^ +›Mغ(mß)®AK^ÒIYÕþ¦S¤–IJr »\ápÑu ­ùA±ÉÊ—…Õ(Aã*£]cMËJšîa›O\ ²Ö²À†'¼‰„·ÃdrÍe`µø²«QpOØÚ÷ð² Ô<`Ö) ñ>LY™,=â 9H/a_dœò0‡’²Ë!1ƒQV.6b_€•¢GlÑU€Y‰¡––ä°«Ñ„rtKðv¨÷DÐÁ$hf3Õ¨®b:9˜åÓÊuP4»tI«Ø’p7±åE²©\ßQË‹)ífUG+ôVf9$Y·¹oºGÒ¹:¼ éãïÈ^×v¸¬n›áV|¡ª<¯r~`ü^~™¢èƒå¹ê qk`ÌrÈwÕC•ß®¡¦¥’bk2 Kt‚Œ›5 @yæùÂø”UwHy÷¦G|Z±sEj0댇n»£âäj뢀 …BadÙÀ—y©!7dY`W£ÐEe…, 싌ØFƒrãKr±ØGOq[J£q…¨uŠ·íViæ§G|¡e†¼$ VlE(OœåênKdüQ÷|±Õ?Z.Ân®¦‹hҹȗ}‘R¦o‚{.r.NÑ ½&Šù}‘åuàý]XÂ0Ö®˜÷䨥›&J¨!·3¤Ú±Ö¸$À½Hì®Ò@5:¦Œ5cçŠ.Œ¦³ÎH9p7hnn%ƒ0:X($}¡e†êR®í{—I-¼WQ]¶Ð2Ãfm#4·@ÿ‚e³ Ší44 ¡¶Nåª<óîèܪayñ Ñ<Êݶ·²ùñe^0«Q[ñ‡)íŠ-‹´Š§\ß‘É3~½'’"Gî­Åv™ õBöc[¼ÈùÍ&JHsp±³´ùÇH»â)>e=@ÓMÓ=ä ʾôQáØÕh‚ÏM8B uç8˜þ†³ÎH°á /¸‡(6ì’mÕ°R@O-ñµ"Æßáµ]õPÀøyYiÛ=âËܸ‘áî´TD'ndøå_!QÑ.¤ôÔ"x‰¯Ó‰6©Ês¼Þw&+DOc< bñ‚±y^ȹXÅ–‚ ûůÖ/‡œVJËwÈ­¤JŠÉË#cRƒò¨1o-Õ>Wˆ¤ ºl‰r¾Ú ÖçÍœ%ñqq¡§3G†K\VÚn‰¦ µìj4Ñtkœ”g~1ãp…ÙX:×À®Fâ÷ú I• ` &³ÎH9ðovTQCîŒCØÇ/ÝRž¸´­Ã䀤ð4JYyÙ¯-)–ABÜ+IY!‘ ¾S–‡BذËÔÁÅ¡E¥ƒAyâÛ‹¢ÍL¡Üæègذ‹a?òÊÍt0é+՞Ƣ§“n/fb!=ââæf¼bS£ðª „qq@2î¡´}GGƒZž]&ˆáV «úhÞªêƒ0mtDÝÂ÷Ñß¼ki_ úùù&müÕÂí¢æâ;“Éd2MdmÒÊ>5ävŠß•©¸]ݦ µÅ¼£Á¡¹ÈøùÈž#’›«Š*Œ™O-ãYg¤|vcçÛzž“žîmoã‘Øù6éc{[o{Ûx`Zæl2ß#îjו•œ‰å´z’‹bÓë¼òµ ²D(oYç—kM9{JÃ8½.Ò¶Þö3±td¼½müþ®$|~:¨6™( SØ6~ŠèTWy…(ÄŠWl¤ xïþÙøs6Õ´E ÒUaTÖ¢s´bòEu"u€»`kbo)Ñ %Zf{õü£ÓDr|ÒÓ½ímÁtq™2Sëv`Ö)›\2—.ÂÒçB¤²wÿLïYˆä÷7óû›ùý<ûÿÙ{ÿÐ6²,ñ÷f_vvè¸`ä”}þÑ,kÓ3+c {†˜ÄÚL^0«Á’§;=ÞlK0ñ€ d¤&“ž±³´¥°Züúû:#Û$`$ÞצJX³³¸Y¢DN¶c—­ñÐý”ÇÌ·ÁóÏ4èýQ¿«n•J²lYÖùf¤[çž{}NÝ{O{Km}p+ä6çìιÕÂA®p0ïÓ¿{ [Gˆu…ϹÂA®ðpÄJî‰$¶ ÞËñ}€i,ä «wžz…éxa¸»Ùuÿ¨ t¢Ñ8+©t¬ÞyÞø·zÔ–? àœìxô¡,Ní¼ªuÙh«pu=ܳäÚ䪧:¾Ü²N¡dóRªgj¬N—èÙ<‚Kï5W±PÝÀ-£s¢C`ÿë³°û¼cY°ùõµê!™ï ™ïôå`cºi&íügÂ@}y=HÍpNŽ=‹ˆ®óÏí`õÎ?ð¶U“­#r›svUq zrŠÈÇÇ/>Ù<©ÍZ‘ µ‹,˜uFÊe?½>èw5•æ²S{ÁÌæ­^A wZú\‘ÂjT´»Çèçû°žžì·´ô_²?Ûæ[Fæë†à°Î€Î«?93FHœ·r:Кî+!kmïà?µ¾wxÏî>‡ Î3¾Tñô£{çãó³“㣭`¿%,œgÛ¥5l¬>•ßfZÜ_žÿëœðHLh +oøW µ¡³_q±‰Ž —ÄôäÞâGzbß”wšÂi€ÇÓÂW.Ó)mzT¶dÐ%ª†òññËñÅé[§™||¼gɵ)f—öQx3ö´î“QbuÖµ?YÛi³ÎHYì=~®þÖÞÁÉÌ#zòtŠc£j($BO ŠûÑÂуŠû ‘ûÎNE°emï Ÿ7ú®SÎ"XÀ~+.s3c_à®W¹KÖÉ‘IŠŽk¡Îg¾Ü€Õ»T«ùŠ ËFlî| ˆ€¹„} ¯§gWoö”±àí/ Oïˆùiâ@3’GN -£ÁŽëÿº‘Ï?›»Ú/¿Ò:ò1¿§4? ‹—ù†\á Ô@Olr{}“÷?‰ïÃz¸çù¸¸ôQ%{ýú=‘CjˆïLSÀÒ´6c–Iþ ÏæÜ‹‹%3v{­f®ww77u÷Ldè‰ÁË‘åÉŸæ5µžéëÜõöLtüDÿžÉÓ)˜»*ß,p _ÏvÚ ¿ýîz¹QÙ3‘©0aa¦'¤†œÊ¾54¸îœ¿)†È&¡rŸãÕÙØþZm§ Ì:#e°Ÿ^ÊðÁŠë>¬¦Ò{`mï0y+Px˜Šbh¥¢òÛ/>+yHg)Uy§/,}–6-o¿•+¤Æf5G«98ÇmÎÙó{_ài>C§ÞuëæÈMÊy=Üi—RPæ°:]ΧùwˆðB‚xÀýAP:-ChZùÆ~È9Áôúæì <©VŒâ„ À¦zR†NÎKïÞZ½°4(nñÎ>¥Wç¶?fóì=~´:&lÕå–¹Mœ¾«wà¦ì ­iRÖJ´í§—2ï¶·VÜ-}ý»éŒ¼ÅÇœ³ÌÑ2„ë%¶÷óñqq/ùôbõÎ/ƒWvN±wðüÍ‹ƒ%OH«+6ª”s>>®Š›óñq]ûôõîÎs?¬!é1’'kP´ò4 '«w^/âžN­NL|f0ì­í´¡€ŠÝçdYƒžTÖPcÐ2ú«™g®ñ…½ö)k(µÈ6¶ý1댘FµU'lâ´Œ>\½óÔ+Bõ1GØÚ¼”ÎS>º´:ݧ§€ükóðb†Tq—P¯w:›º››¯Ÿ ï¨í/ óǧýU-dgIæÚÈÇÇyãLm€Æò #÷…–'K´guºž¹øêâáö[«wžzÅ·‹ìî1yæÉ|ÅSæÞ[üH‘rÞO/e@:¾¬ý½9•†ÞéœëQ7ï#Òû‚%‡ q •ùW '«wlÌ펱fdÌHšl®*ª0ç>­<Ú³ÎHù°1·Å¢9LÈ"ŠÅÜîPH1ØcO®%×UÄ…TˆRUwŒQµÒðÃCá,FmÉŒ!†hR¹óÙ˜[ã‹êî)qÇX²›´UÕwˆÚéº&$3•Â0œOKÛEÒÀ}+O^¬ÄŠw?uTò¦zˆœ;d®ã=%Ã#™>…›@;ÿô!"·"ÃJ¼IZîÌ:#eî% „Ä+ÄÜ'ÐE¶Î%‹Åb±¸u¹¢;Åb±XLºÌ)¤|ĺÂg®ÀGT²Í:…iB%æðˆýd×à ŽÌ,u‚ÆY+ŒJ‚ò%y㇠1)à Ú×dSiW@ë2%\eBm ¯‚¶m±@Ö)zÓ“h 1@‘|g¦bÀÆÜ‹3"|ÆL±X,ÒApuQÀnÙhÁæþkÚuO¥˜xWÈ|§//Tº Aÿ™¯¿Í:uü —/ÙCä¸qƒÙÛâÓØí¬Ë”/I¼!ªåK‹;QWí{rŠ`cngV˜¾•T`CÍrp`Ö)v-žÀ-%k¢;Ò8u„ c¶…eBù’;Qq¦U]“â/v #çÃ; º7lþYÆ´¼íeº5êœðcKeúNªxú¡|IBÀlìv$xÃGÉ,MuäÔ˜•¬ü®0Ó"sßîÚ‰™•HpÈ@ x\Ù—,¡kry(ÙCäØéF3ë·y<bz’]ó§Rþ6>ÿ(í[…ÖÖT;Ò–BeéJƒž(Q5ÄÆÜîXL'åÚ°1w[³#È$û(¼9»Z÷Éõ¯Îºö/µýTÿ`Ö) >è òƒ‰]K¤Äب ‰¤üm;óÔ9[j‹%‰‰W˜•ÈazyJ¨ÀYDË;Â4èåU8†‚§j5ð&³quq$øÎ\ņ…™õC4à™ÚlaV"’e͸•¹¯Á=rKt›IyÜ:1P¾6ÿ,ÃÆng£å•{üžRÒ1·´oHù·†ø-Èí L¨m놸TÑŽ‚~Oäâ;SAFà¸&›u!óf Kã>9Æ«³ý‰ÚN˜uFÊA\çäƒé0! Q¡ùN½Á–“VÌ1Œ¬0À¾ÌòY±F§\géXÞÐËô«q„‹Åb±8´"ÅeZbäv»Kšùµ¾3Y±1SÎL¨-á¹gÆ,A>28o!ki-‘â ßæO¥ümîÛÙòäÅ;Ç|‘cÀ1Œ8Ûü¶úaתç3—ð•Û?`_f!âäFe›?¥yŽª^OH ¹TÏŽD gŸÒ«s۳ΈyصDJHO‹4÷ êDÁ/{C‹ ‘²VÊ M88@TX.LÈ09á²ù~ŒœL:Ë”ïøý)c!6æ[0zÂá5&ipÊŽ ˜õ¦báJ9³1·**ecn]û8†ÄÍUñH‘¢7g·tÕ”^ÚþGœu¶@‘û¿w¾ø‹·_ÿËï7SøÃï~ýgñ:C§=WÞ_Üú}Õþ DŸþï}£r$C§G~øc•k¹ÂÅÏ?õ\yÿÉ“'6[ãütÁ)$›Í¢ëô yÐVæA[Õ;èÁÚRVôüÆ›‹ŸªnÉ Ïxß?½‚ ü©€YgAA¤îÁ³Î‚ ‚ b <ëŒ ‚ ‚ ¦À¬3‚ ‚ ‚˜³Î‚ ‚ bŠãÉ:¿VÅ#ÇL6kø_ CN<èÁz=h´•yÐVõz°VØl¶cˆž1t®c^{»½Ö]@*çÛ¯¶Ñƒu zÐ>~9¾oFÆŒ¤É檢 sîÓÊ£ý1댔ÏÞâå¦nÕÈÉLu77ñÿ¦ã‹—›¤¯ÍMÝÍMãÓSŠÁ¦{r…{亊’áÅL\(™Úഉ {°– H¬‡~Ì+µ®ž=ó2ÛÊ +·¼`dÎSa­ËDÐxGG§ô5/j–ß!*1ýŠ‚t'ï/ +ìÏù”è  Ò]aV6¦Å‘«7℺òî!' ¹†÷¬8 $Zf{íücЄˆÜ>™©îæ¦pF_¦ c’–{³ÎHÙäéLŽÁÒc!RÙ_î¾ñÂA®p+Äá¹õÁA®pÛœ³;çV ¹ÂÁ¼OÿîQ(l!Ö>ç ¹Âûwž¸Õ ëáž%×&w)Õñå.lL»`ù W8X½óÔ+ÌÂû ÃÝÍ®ûGmŸ“ÆYIu c•ÛÔ–? àœìxô¡,Ní¼ªuÙh«p•à’N¡dóRªgj¬N—xåé\zï¬¹Š €êNn}˜û_Ÿ…Ýç˂ͯ¨}¨P…Ì”xWÈ|§/ÓMó0iç?FœD& |r3Ï" öS'8'ÇD×äãóÏí`õÎ?ð¶U“­#r›söÚ÷ä‘_|:³yR›µ"j–{„³ÎHyì§—àÂýﮦÒ\vjïñ#˜Ù¼Õ+ôNKŸ+RXç­VîC_hº`==;Ùohé¿d¶Í=1·Œ>$LÓÅaWrþfÌ|îPåC¬íü§Ö÷.Kì>‡ Î3¾Tñô£{'çãó³“㣭`¿%,œgÛ¥5l¬>•ßfZÜ_žÿëœðHLqRv·iñ~@NýˆۈMt\¸ ¦'÷?šÈЃü¦„´‡N<ž¾r™NiÓ£²½ ƒž(Q5”_Ž/Nëm}4ùøxÏ’kóáˆUøª±Â›±ç uŸŒ«³®ýÉÚN˜uFÊbïñ#põ·öNfÑû§S‡Z 5 ‰Ðƒâ†¯zíëÜõêm[Û;èç¸ÙÄS³ˆ–·ßŠƒËÜÌHòŽ73ÉûÎN.Jn¡Îg¸=„Õ»T«ùŠ ËFlî| ˆ€¹„} ¯§gWoö”±àí/ OïˆùiýÇíÎ'û <­!ÇAËh°ãú¿näãóÏæ®ö˯´Ž|Ìï)ÍÂâe—°‡pê '¶r…ƒÜòäýOâû°îy>.î}TÉ^¿~Oäâ;Ó˜÷ØÒ´6c–Iþ ÏæÜ‹‹%3v{­f®ww77u÷Ldè‰ÁË‘¥›àÎb¹Ó w*½ŽèëÜõöLtüDÿžÉÓ)˜»*߀p _ÏvÚ ¿ýîz¹QÙ3‘©0sa¦'¤†œÊ¾54¸îœ¿)†È&¡rŸãÕÙØþZm§ Ì:#e°Ÿ^ÊðÁŠë>¬¦Ò{`mï0y+PX1ö[¹BjlVyx7¿ý¢á“‘‡s–R•wúÂÒgiÓòDïˆp1ñæœ]1¿÷õžæ3tê]·n‰\±Ѥœ×ÃÍ‘v)e«Óå|š/q‡/$ˆÜ¥Ó2%F\_`u{·œ.!ÇH¯oΓjÅ(ÞI¨0lª'Õhèôà¼ôÞè­Õ Kƒbþèpö)½:7°ý6ë\,‚CçÓÂÞãG«cÂV]n™ÛÄé»znÊÞÐÚ˜&e­”AÛ~z)ón{ Ya™äããâLÁ/Û}ý»éŒ¼!„ܳÌÑ2„ë%¶÷ ÞÑÇê_¯ìœbïàù›':KžVWl8T)ç||\7çããºöéëÜç~XC<Òc$OÖ q2 û SB¦y==;Ø~¶ì¿9&¬Þy½ˆ{:µ:]0ñ™Á°·¶wІ*vŸ“e zRYCAËè¯fž¹ÆöJاt®¡ÔêÜØö?ž¬ókUì1R3òt æ¦Å4€Ý=v1ò8ï}¸ ÃÍM|y •#Tî mn÷4Ýä¾9çVôA>NV¨Í“у͗Á™åK©‹€Áæçñ®gÝÝÍ¥͇--Ó©tsS7Àd¼À^û Ã×W`°ybl™ôrÐBpÖö¼dÞÉøfç|`ÛÍN­åeÊúBË“÷?1lÏêÔx'n¤Ó~kõÎð`óð öÙÝcRæÉ|ÅSæNÞ[ühîäÄ8c?½”ÕŒ0Üìwróý†¦sùËÝÝ×ó‘6^)9vzI#N¤…‚›BgÆ–N½ƒN!Vïx ÉÛ|×~'7ÿñÜxçk»3§í mJàœ[ý˜¨q=ÌÿfËàÌæ­Š²&j4ZG¤¶›»Ç!7¯gÑ›IÀޏÜï*çÿ¶ÿñœu¶À;_üÅÛ¯ÿå÷›¿)üáw¿þ³x¡Óž+ï/ný¾ R‚þï}£r$C§G~øc•k¹ÂÅÏ?õ\yÿÉ“'¯½Ý~ì=EªÆ·_m£ëô yÐVæA[Õ;èÁÒuæõ²¢ç7Þì\üüS½pK^xÆû`÷·pPÀ‚ ‚ H݃¿° ‚ ‚ ¦À_Ø@AAS`ÖAAALYgAA1ÅñdñÇéê˜o¿Ú®uC¬wЃæA[™mUï kÅ6Û1DÏ:×16›­Ö]@*'›Í¢ëô yÐVæA[Õ;èÁ‚gAAÄxÖAAALYgAA1fA)6ævÇX32f$M6WU˜sŸVíYg¤|ؘÛbQ&d Åbn‹ w(¤lб'WÈ’ë* bŒ(b”•­b‡BŒ¬¥L£¢p£ž=Y™mÕÞà-¯pÆ=j «,¯£S]U}‡¨Äô+6 LHf*…a8Ÿ–¶‹¤ûVž¼X‰/ÔŒ8²ŠÆsT]ÀÝ02×ñž‡á‘DKÂmª z‚‘Û‡ ‘Ça%Þ$-÷f‘²a× Bb bn‹è" [ç’Åb±X܉º\Ñb±X,&]æR>b]á3Wàsø’¼@ØL¨-áá/Ó¶-˜ß¡hÖÉM!ì–dü×v&Ð8k…QIPrÛ‚Úò€+hKÈ ØкÌG W Þ!éJv<‰¶Ô€G¼Çصx(s6æ¶Xœá«0fŠÅb‘‚«‹*y·«4ï ™ïôå…J·!èâ?kFœ¹˜²j‘ïÔkV`G¸X,‹C+&V~&Ô–ðÜkà5¼\géXÞˆfÍÍŒïhuŠ‘Ûí.iæw #+ °/³|FÓlÅÆDL9K˜¿Ûƒ|,dpÞBÖÒZ"ž͟JùÛÜ·³åÉŸæ5µžq #Î6¿í†þ=î%TÏg.á+·ÃÁ¾ÌBÄÉÊ6JóU½žr©ž‰x¢²óY&¡rŸãÕÙØþ§}s³ÎHÈÖ@gR‰5¨s‡9jAPX1Žp±H#Êûìˬ,2¡°ç,¥*ß=ObvÍ´<Ñ;"\L¼u)æwÇP0û’YKØøÈÙtÅFD“r®èn×;o¡’WsÜ“7¤Ó2Ч'߸Cð„ãD]ÔoæP¼“PaØTOªÑÐéÁåð…/}Î>¥Wç¶?žuFÌî%RBzªX¤¹QG ~ÙZLˆ”µRmÂÁ¢Âr;s‹ òË6Ÿ®ù 6ænð¸L:Ë”ïøý)c!‚wŒ4&ipÊ6C6¿Óo9ëUl8T)gíÝÎÆÜºöq ‰›«â€1’'k ¸öHBù’z1÷tJ xÀðMêœ-UΫìy1èIe 5”ï^4ëtÇØö)k(µ:7¶ý1댘FµU'lâP¾äN4ëΠ:é8Â;ž„pž²-áÙ ;ôrå~•ŒÛùµ„jÀ#6.lO;Â48¹}$vp}OÉ´4ìŽ1ÙYò“®¬Ì¶ ±<+WæÓÁRí¼c¤ÓÞ‰fb¡c((Ï<™¯xªacnþäƒøëŒ×)ç’w»Jƒ48ù‘Y²E5Ú‡œ*(ß`Äi±¸cà»'Í !¾?KMµÂ»†Îl´Ât&j4(_’¶ùÛÜ1J×>¢7g·tÕ”^ÚþÇ“u¶À;_|çí׿ûýæo øÝ¯ÿ,^`è´çÊû‹[¿¯Æß‚” ÿ{ߨÉÐé‘þXåZ®pñóO=WÞòä‰ÍÖ8?]p Éf³èÁº=h¾Å6 IDAT´•yÐVõz°¶”=¿ñfçâçŸê…[òÂ3Þwà »¿…ƒfAAºÏ:#‚ ‚ ˆ)ð¬3‚ ‚ ‚˜³Î‚ ‚ b Ì:#‚ ‚ ˆ)Ž'ëüZ{Œ3Ù¬á) 9ñ ëô yÐVæA[Õ;èÁZa³ÙŽ!zÆÐ¹ŽyííöZw©œo¿ÚFÖ5èAó ­Ìƒ¶ªwЃ5Ï:#‚ ‚ ˆ)ð¬3‚ ‚ ‚˜³Î‚ ‚ b Ì:#‚ R òññËñý“ )I¹væäÑ;˜uFÊgoñrS·jäd¦º››øÓëê)~ÍÇDZñ…=ù×îæáżR˜okx1#k g1m!b†’Îâ¯Nm(ÜÝÌûb|aO¾<¾,—œKP¨uº¤³ÜÛ@·b£°–ì³–;TQ2µQžA^å5„«ÚË샤SåJy?‘£¡âéÔd¥šsª#wDfŠìDùBlvL‘–{³ÎHÙäéLŽÁÒcayÛ_î¾ñÂA®p+Ä!©³R®‡{–\›œXªãË]çÜ*WqóRªgj¬N—¨ÌmÎI+£ý–°LînÓç­Öõôìd¿ ¥ÿ’ýÙ¶ö©R©$/é<ÛîÔÔW_Õj(·2ÎvÚKÊ G‡lŽÝ_VìêäããŠ]…© íŽbÏ„2êÖ™sä»[’B!íx<-Ë‚çãã—ã‹Ó¼<¡cüÕÆÞ„ÌÇÇ{–\›G¬ÂW•öaoñ£‰ =1ØÜ4{*;+Ñ,÷šæÕ Gœu¶@±:Ÿ"ö?Wkïàdæ½y:E‹±‘1}ý»^½ »Lò¾³“ Z¨ó™/w`cõnÕª–´¶wÐÏ÷€žäÆíŧ3¾R1e9K@4r³lÛÎ~+.s3#ÉéDÆ·¹Š ÉÞâå¦îædAù,$“hå¹”¿Þ=£½ªÕ`ª­#‚Û=\ìµäú¸ÌÜR]—µŒ>ä7y–Ïߌ­ƒÕ;¸›æ~&y?àn¶õpÏ¿¡zÔ!Ï9’¼°)±·xÙ%lž„úè‰íA®éÉû\®„/¹Õ«í䎥iyÜ ëážçãâ¦ÜG¢MZG>æwç}†vÓ,÷ HúÆ ˜uFÊA\)íî1ZØÄ1²ôNä ¹Á¤tâM †>é\÷’ìî±ÙäìåŸñ‰+2òÍúNó(­&寗ò3²Í¾^ŸÙC2§kuš¼ LVlDZGä ît•Ï|¯‡Yã«å!ðÈÍ8WËÙÓ@Ž1­xñ.<ÛÞ蜼¿º«²„E~û…sîªÞ\­sdò-ý—ì³É<¥Q¡¸ !oBÓ1‚|£AƒëŽtØ òÛ/à®WÜ Ð{|5°q¹—®’ô7Œð¬3Rûé¥ ¬¸îÃj*½Ööí 2Æ~+WHÍ&7@†6çìŠÝ×xšÏЩwÝ„ãùíª¹¸ÜÔZÃR³tUy§/,}–6-/wº– n£Š K_`u{WV ,Æ(ä×ÃÍ‘v)‰¥B窶E3}ÈÇçŸq‹nëÈþÄ6R38—ñ»ÿÊ\²ýƒ™gÉ XO?Óß‹SÅ9Gê©cˆóÒ{£·V/, Š[|Š—CÊ>›GXîÕ-J]ƒYgÄ<{­Ž {j¹en§ïê¸){CkczjC9]î§—2ï¶·äããâV­¦Vïü2xeoâ÷ž¿yq¢cP{ c=Ü3Ññe¢«Ñ7ëÍCrV¥ºZFƒp}¢Ä© §k)ã6(Q±¡Ø_˜Íõôì`ûÙ¾~aWz :¥ªBO^Ë5¨¯j5”Ùk{=ñÿã9å+Bª‰lŽuòññ~zIé­ï]xšžN¾¿~ ›ðe’z ïîýôR&àîµ:] Üf t hýÕÌ3×øÂžbLi)k .÷2ŒõŸvŽ'ëüZ{ŒÔŒ<‚¹iñßî»yœ÷ŽŒ>\…áÁæ&¾<ÊA_ïæöxOÓM®Ä9·ú à¬ëYww3W48³ù°â’rû­Õ;ÃÍÃ3ÜzlwH§5è‰Áæ ¡âÁˆ //œŒy³¾ ZÎÚž—[r³s¾g"0Øü<¾Ù)32 Î,_’)ë -OÞÿİ=«“àtfoƒRO5û Ã×W`°yblù DÁMa¬-ŒX¦S鿦n€Éxðà¡Ö ‘ßO/e`5#¨µßÉÍ÷˪k¯j4ô–ۇ͹ñN~pfóa/QŒG‡vŽïø»M\¡=0)½»ÙéÅõçãù[(}¡ådwOÓM¥$/O^ Dwó·ÇÈÇb ŒÝ™3ꪕÜ1ZG¤¶›»Ç!7/À9·ú± bõŽš¼ÍwíIÀޏÜï*ç=ý Àñd-ðÎßyûõï~¿ù›Â~÷ë?‹:í¹òþâÖï«ñ· %èÿÞ7*G2tzä‡?V¹–+\üüSÏ•÷ŸªÕIô¦c(Ya€}™–h“.–Z©ò©`&Ô–ðÜÓ3¬ñÕãér”ˆIAg²/YqP0+ÙhÀ!ˆ½Ìº¤oj´sŽLžð¸"+ »–¥Q¡¸å oBÓ1‚|#Rj!~ÀÈÔìË,DœâB…ϽfzBjÈàF:I`Ö)v-‘âƒg”±s ê) ¡€:G àÓÁRíij¬SæMÇPPž·0_ñTÃÆÜÞG–Ô9ìâ:飸³èÜ.¨&-^* Zyv-‘’™[eVíU­†rû -1îRe$KßîÚáß°ñ…×¶lbr—ðd# Ü‡w„i^T.ÉËæ~¸ÊnÊwO ogét 1‚òÝFœ‹;¥L-yÇpà ï:³Ñ ÏS™lè$rMì-^nêïû||¼¹©{z]¼¼1ÝÔÍæ¦îæ¦îæ© îBfª›/‘Ë+µ‰ ››º››Æöä_»››ÂÍP¯ÿAxܨ¡µ§è8¥ñ»›‡3ñqÎ/¢ðå©ðe¹Œà8‚B‚CEÒ×¼¨YìÕÞâe•˜~ÅFa=,Ùg=¬Yb‰0úÌjäU^Óì y’#´ÚŒå‘cF;Íš¯hfú%OþHõ0XˆÅZý…ro‘›üµ+ˆAON˜uFÊ$O§`r –‹ žsrìYDŒxæŸ ÚÀêßœ³;çV ·zö†»/B¼p+ä qHnµ­‡{–\›œXªãË]çÜ*WqsîÅ'§gìÕ]Gˆ('¿p+<9 àœìxô¡,Üé¼ú€÷Ž]žm®:TÒ)ºøRªgj¬N—xWäé\zï¬¹Š ÀþÂpw³ë¾ø=“„eÎ&¹™g‘Åô…¦ûjvŸgÞm?5c¯è:¢:¯þäü͘ùÔ‘¾CµXÛ;øO­ï 7ì>‡ Î~—*ž~ZF*–+û­ÿew›>oµ®§g'ûí-ý—ì϶µ©RI^Òy¶ÝIèÃþÂðü_çæ}š„ÊÙNõ:j¬(Ô«w^HRì/ +vuòñqic=ÌmL©¶z&”Q·Îœ£Ý–”mž„Ó§Õ›‹Ó¼<¡cüÕ2³æ§ ÒBÌ;hoñ£‰ =1Èoûš¿)dÐ%ª†”^>É`Ö)‹½ÇÀÕßÚ;8™yD‹Ã e4Øqý_7òñùgsWû5•òtŠã'cm}ý»^Õ¦=1È®‹Og|¥b/Ä]Gè#_¾+g¿—¹õÉСª>È$ï;;¹(¹…:Ÿùr6VïvP­æ+6$ÜÎi²¿ |²¶wÐÏËÈéjå¹”¿òžÙ_ž†_ÉöZG·{¸ÈiÉõ±~n‰×fZ© ÂmÐ2úßäY>3¶Vïxànšø™äý€[¸ÙÖÃ=üÆ‚*Ižs$ya£coñ²KØ<9õÐÛƒ\Ó“÷¹ÍF¾äV¯¶c@’o<ôâÖ‘ù]ÁùQ(eêõpÏóqq7¯¢M¡!©!™—O2˜uFÊA\Gíî1Zvfƒ‹z&:~¢³ Ã’¶Þéƒ\á 7˜”NÅÉ7åqo÷”_ÊÏHȶÛz}fÏ9TÔ)ÆÄŸt®Š­ØÝc³É ØË?ãs¢f+6"­#rwºÊG‡×ÄÐvïñ£ÕÌõn>ÅHO ^Ž/òG>r3ÎUý IÛ†)y¤ÖˆIÁ‹wáÙö>@ïàäýÕuØX•%2òÛ/œsWõ¶´sŽL¾¥ÿ’}6¹‘§S Ô *÷%äMh:FoDJ-ÄÀ-»†¦Îo¿€»^q¡¬gïòzBjÈàF:I`Ö)ƒýôR†V\÷A~Êz}svBÖöEœ]ZØoå ©±Y婸rShˆ GT¤Ê;}aé³´iy¢CE¸˜xsήðo_ài>C§Þuëf È–¾þÀêö®¬ ¿ý¢¬‡%…üz¸9Ò¾ùpD2äÂtÙ÷!õŒ[ðZGðç­5È´q¹¨òHíànƒ||\|QAÌ%Û?˜y–Ü€õô3õ^™*Î9R÷HCÀx!6â­’ À¦zR†jfóì=~´:&lôä–g6Àê×½õû®Þ›²·¸6¦§6ˆÚòñqqg_»ês›òʹx?½„ MCtD…´ŒáúD‰SÆUaõÎ/ƒWvÊ­wðüÍ‹ƒ%OH«+6û SB蹞žl?Û×/ìªK£CqJU…ž¼2n6Ð`mï '>ãOI ôry•6¢<Ͱûœ,kTÔÐIâx²Î¯U±ÇHÍÈÓ)˜›"í‘ǻڗ9áøxÏD`°ùy¼p«wôá* 67ñW©\žž×jƒ_¹žuw7sEƒ3›[ ôÄ`óLÆ Þ€ÐæöxOÓMNÊ9·ú@›¥EëØž—[x³s^tÜf§Ìø08³,ww_hyòþ'†íY†Õè´ßZ½3<Ø<<Ã…Yv÷€”·0_ñT³¿0K`ìΜQW­äŽ!FX½ã&oó]ûÜ| Sˇ3€snõc¢Æõ0ÿ+=ƒ3›·*Ê^™lè$r³¡޹¹Í\Kˆ’QNálõo IDATœª†Dm0ौMòµÂ;ѬÓ⎱@ù’;žD›Øïí 8ägˆCŒÒqŠãÅêÃŽ0,ÕÉ¡:ep åy óO5lÌÍŸ”°XB Pç@°‹è¤â΢s» 6š´x©4håÙµDJfîRfå­Ï{yGÝ$AÕ%Èët9f$ÿÜîÚáß°ñ…×¶lbr—ðd# Ü‡w„i^T.ÉËæé†üOùîIB!ãí,Ž!FP¾ÁˆÓbqÇ ”©eÃÙhð ï:³Ñ’+5“ DŽ'ëlw¾øÎÛ¯÷ûÍßþð»_ÿY¼ÀÐiÏ•÷·~_¿)Aÿ÷¾Q9’¡Ó#?ü±Êµ\áâçŸz®¼ÿäÉ›­q~ºà’Ífуu zЕ7ÂrÕÝÜÔ=½®^óñqÑÚÒgÁAsž ›Æö@G§ô5/j{µ·xY%¦_±Qßüâiêž^W–¨†LI ‚¼Êk*W@rlȇ[fª»¹)¼`2PÞ[4þF¬‡/>Ù<ÈBöÊûŽhlÄ…¸Ü%’¸ W±Ÿ'³éòÁ¬3R&y:“c°ôXŒTœ“>T.êÂΫr…ƒÜæœÝ9·Z8Èæ} |Îr…‡#£·â»ó {°¿å[½Ó.X>ÈVï<õò‘ì/ w7»îÇ|ªØ_î¾qÁæqHªÃ«wž÷Ñ­^µƒÎšóìh«pu=ܳäÚ䪧:¾Ü²N¡dóRªgj¬N—xåé\zï¬¹Š €úæÏ$¹’+äfžEóä!c  ¿û¼cYðÚuÍèÖ\=´†½Å˼†Ü2xOð’yÊÉÇÇ/>Ù<zçx[JWh1þÆmm¿€óVë!{Œèc5éD%Äýx¨aÓe‚Yg¤<öÓKpáƒþwWSi1µÐyõ'çoÆT+4±°4½Ó©Žë.fâÓ.]µÀzzv²ßÐÒÉþl›[S[Fæ6ç0UQ&{ÁÌæ­^á{ï´ôÙ4åzV\ûBÓ}%d­íü§Ö÷.í>‡ Î €Tñô£¾ùí·„¤Ýî6}Þj%} $yIçÙv§¦¾úêá5ìnÓ¼°»Çèç:×€||¼gɵùpĪH[.N+·2S¥7y¤]Ù>’¢d=Ü3‘»Þæ¦na£Rvuoñ²xŠc=Üp{JUBLܪÌ+¹•xZ†4ÃËw Uùlþ3Éeåµk®iPnVÅPåƒYg¤,ö?Wkïàdæ--oö[qp©G±P=1¨Ðwõܼ¸äúXó¸lmïÀ5õ0äé]fš‡à sžåéëÜõJ ôurd’÷œß[¨ó™/w`cõnÕj¾bCÂí›'û Êg¡r‡ŒVžKùëÝ3Ú«•kxšçã³íNñ3rl,M‹q³zb{ð 'ÞWùøøEˆ4b ÖÃ=ÏÇÅí âû„’¾˜¨~Ðþ™újëÈO&ﯮd’÷AÃæPN=²éYk|Ñ­¹åÉûŸh6yÔ3üz¸g‚ß&ÒÍXi]V~»¦š–JôvÕŽÌ:#å ®sv÷-;³Ðë›{¡ ÄBò-xak©…:_ýž#寗$ÏŠ’Ó¹ÂAn0)ÄÕê'ýO:WÅVìî±ÙäìåŸ ùH“nßÜ®r~n=ÜCzˆ5uµ, }¡ÍK©náï¾YîrxhpÝ9ó#Í vÎ]c%zb°çùx¡ÔVU~û—Næb8úù¾¶ÄXÄá«wÇKíV! œå.Ѽ¢[ÏvCaÅ Ÿß~!¿ ôP¹Ì\»û ÃüùØsSMËJZú/Ùg5gÌ:#e°Ÿ^ÊðÁŠë>ÈÏlX½Ó–>K++ K°¾ñeÒ$žß~ÑЙÅCcmïP>ðBU™žµßÊRczÓ7éoÎÙkj_ài>C§Þuë.ÕäŠ K_`u{WVPîQȯ‡›#íÚ4¤ñÕŠ5X½óâªÃüøq^zoôÖê…¥Aƒ4žs.n2ϧx-AûÖ„&ø&\íëÜMg¤³@H埈|†ß}nîP4.3ÑnËèÜøîSåM7˜uF̳÷øÑêØ²0–•g6ZFƒp}Bu£ àß´0Ÿe@\àþn;®©‡ ïê¸){ncºò³b¦<›‹ mÉ0Îê_¯ìøZïàù›':Jæœ4Šý…)!Ó¼žžl?K2ùø¸®}ôä•Q¯\ƒúêá5ˆì-~4Qúh;r4´Œþjæ™Ëà'2ZFÆÁH€{Dçfoýcyà²]/î|Pþûˆ cãë#ÍðšMf![±Ÿ^u+\Vi»%š–©ÝO/eú‰•£³Îˆiòt d['Ü=-OqA_hyRSX( ?žÕ<¼¸05È¿Ø:òñÜ‹‹S½Ó)¸ØÔÝÜ4xý|\xÏla¸»g‚Kão‚š§eôáê§^Áæ^p÷‚Ü Sùø8oØ© Ð8¨´»•X®g.áø°qo Ó~kõÎS¯xêÀîYÎÉ|ÅSêæo¡à&ÔÁËG¬ä!c A+¿Ÿ^ÊÀª VýscÚ«‡× üfbwêBÎìO4 Õ§uäAªãz·¸{®¥w:Õq½Û0zî mν¸(-A[b,V§Ë9èêÇ›áß°"?Ã÷…–Ïó£•;EmõN ëÈô—ç¥]…Ë*n×°i™Z½ùí8ž¬³Þùâ/Þ~ý/¿ßüMá¿ûõŸÅ ö\yqë÷Õø[ôï•#:=òë\Ë.~þ©çÊûOžÈM›«ºËL6}Ì”•o®8zƳ΂ ‚ H݃¿° ‚ ‚ ¦À_Ø@AASßYç"«×mäøøö«íZw9èÁz=h´•yÐVõz°V¼a³aô\,‚Åøš`]c³Ùjݤr²Ù,z°®Ašme´U½ƒ¬!xÖAAALgAAĘuFAASOÖ¹ÄYçKïT¬1‰ÅbyõõV­{ ‚œ^ؘûÜKú¨š+AJR®9ù{p­á½sR²ÎÿßÿûÿÝ¿ÅÏ?­ØyؘÛbqÇXÒ7`cná s[òB™¼²ME¦EBLõþÄÓ RXMåɪ!Fia‹Åc´î…”Bj¯i=NÒ©®ªès«Äô+6 LHú‹eå‡Xb0,ˆy•×tU—%y’8᪶ÏHí¨x.%MàTsRuäŽ`Bd3‹2&½Æ×i¼ÉÕxÖ)v-Á $ÖX¡Ä´%®©Æs·%<;EÚæosÇX&$•Ò¶-e£ŠzMGyÉhÖ‰sriؘÛâº(ØV•åKîD]®èN1ì™…‹Åb1飴îî $y¸aY>‚äq‚NÑžD[ˆjÀ#:š]K€g€2W±`cn‹Å¿3+‚Gw¢ÙÛ1˜ïãhÖI²ŠJAžÝ²ÑâTn¡–å6]œ¾k‚— ⤫š>#5¦²¹”ò%KeKÏ9HacngV˜¾•˜p–F›fÍEàäd‘z]K€'0dKÉSWà†Í?ËȤ˜Y?DÔÞ‰ £ÏvŽ ƒÛ "±iÊ—Ä%¸4ìZ¢;’݉>(…ÖÝÆ{\ uNø±%YìÌnq‘³¹Š§Ê—,îD]âwÉ®ìVÊvŽbV"Á!5àqe_²%4ä%T—KS€¹owí$]ÕDqÍUuŸ ê Ç‹l.Uï=°1·T3!ncJµíÐæO)ÔéÌ9òÝ-I¡P´°&ß acnw,’¾©;Æ_mì¼6ŸydÕnï,6vÍŸJùÛ,÷ì¨ì¬Òg°æêèo/`Ö) >è *“#Lƒ,½Å¾Ìº”ÁuΖÚbÁ1Œ8 F•nEý¦ ’ˆìZ¢Ü0%åoÓž‰P¹Û’lj:9˜•ˆ«‹ë èOf%ÂwÚ\ņ„[ÄV†Tɦr…V^Lù+Sžu¤|É[œoÚž{ªÌ–ÞU>#5G¸ (_RÚÿ›e€òÝFø¤±ôÀL¨ÍÏoSÈê@oΑä…6æ–RÓနkˆk:ár"|IØ¡íäŽÄ5yÜ L¨m놸)'íQ¾{üa2Ðeh7ã5—¤¿a¼€Yg¤ÄuT3˜SI_G¸X,‹C+e?–ê7”A¹ñ¥üŒ„,V2én z\«SŒ‰owI3¿c(Ya€}™–h“.–Z©ò±D&D…ÙµDŠ7|›?•ò·¹c1þÈÇNÔ•ÒîH0ä«GÔg¤zˆiEg²/YqP0+ÙhÀ!ˆ½Ìº¤oj´sŽLžð¸"+ »–¥Q¡¸S!oBÓ1‚|£‘OTv\Š}™…ˆSÜ Ð{„6°›ñšKÔß0^À¬3R²5Óå`¢|÷<‰Ù5îó9õû2+Ÿ@áb‘ó2%ºš&6hÑš·rU2w›AÏã\L¼u)æwÇP0û’YKØÄä–ÉŠ ‹c(¨4D¹ƒB!Ï„ÈO$RÊ?à~|E:8ÅÆn\Õö©9Üm ïDÌ%;Ñì ÌJ¶ä!*¨êœ#uÔ1Äåð…/}(^){o§ôš{8ýu fó°k‰TPzÝCý Jùn€Ÿ;èæDAö¶jóÛnø(6æG5yQ'TÏUªi©‰jý­§G ~ÙëtL¨òi2wëSÚã Iäo(9†l~§ß rÖ«ØP°±øjýJÄÕE‰™AÙn¹â”ª =yeÜl :g³É¢ QžtUÓçòÿlä¨Í¥Âñ9v-!ŒtjÀ“] )#gY|,“ä Í9²[‚]K¤‚CjÀå¼@AèÀÆÈ:Ý1V1î´”~\-µæë?íœò¬ó™·º~5÷?äÿF.¿_«ÎÔ=ª=5Â&Ž#L¹O”/¹ãI'S@s'ÔŠ;‹Îí£ÚhÒ¨PiÐʳk‰”ÌÜ¥ÌÊ[Ÿ÷òŽªIÂUmŸ‘£K)ß _xmË&&w©O6Ê4…#Ló¢rI^ž0çH·„pËq!Ÿ0 ogét .‘`ó·¹cTXnwù¦|7‚§ðš 3˽žþàx²Îxç‹ï¼ý¿}÷ûo~SøÃï~ýgñC§=WÞ/‹‡ÑnÀ™·ºhºÈ²¬X²ÿöáÄÿymd8;¿úzKåH†NüðÇ*ãs…‹Ÿê¹òþ“'Ol¶Ãýtþ¸}MÉf³‡õ RSЃæA[™mUï kKYÑóov.~þ©^¸%/<ã} °û[8(œ ‡ãÌ[šTBŽ)CÐ`¥‚ ‚œ:NùYçW_o1Ì´²ÌÑßßoT'ŸøÇ·ºÎHÿü ù£èÚÆÏÞê:óÖ/~{ºOüo,1óŒ ‚ H}sÊÏ:ÀÏþsТĝ,Ë:ŽÒÕœ3_|½õê?gœùç¿kˆAA1æø²Î°T¯ÛfáÎfhCe³g6¬­ïÊ¿þÇ/¤lô•D4)j® ÿ™_,üÇÏöA”¼’ÈÿÇ/μõ‹ŸýüŸfî ¹çßþ¼K]AA9I}Ö¹µÊ:Ÿy«ëßþíß¼^¯ü5AŠ¢þøÇ?þò—¿4=ç÷žÀ„ãï ŸøÇ‹÷wÖ^}½õjy è›ÿ"¸Î™/¾ÞúâŽ/ü_üíõ Lüû«¯·N}}àgÿ!jLýËÅûðüìßc¿ÞzõõO[?óϯüë­ß\m©šAA*q©†•êÈÐÿ½ÿÛÿ¾è€¿ÿ‡1˜»?û?7~>ÆÕéøç¯£¿Øø´m^8sœwÖNTèœÍfkÝäP ëô yÐVæA[Õ;èÁZa³ÙŽ!z®Aè|æ­®& üÍßüÍ™·º^}­ó»†Î™/Âð/w“žû§ŸýÃÖÏ «âÚü^yÝr¶·’Š­W£¯¨_œ¹x¸ú¿ùxý$ðÚÛíµîR9ß~µ¬kЃæA[™mUï kÈiÎ:ÿò—¿€¿ú«¿"^•Ÿâ cõüfyûÌÅû³ýÿûFG¹¤òõÿë·Wú÷$ñßþO>Ùü÷ dšÐ+” ²ðÓW_ÿò‰ü»›t QAA¤”uÖ¹ž²Îð¿þùÀÅ݋īÅb1—PñƒŸ>œ¸?<—ùç¿óÃF_ýgû?þÝÍá·îswÖ~ÃØîøùà§_Üyñ·×ÿéÌ/öó¨á®×Ç>{ýþð[÷Æ~yçÅ?_ÏðWœ3_œ˜”3‚ ‚ "rš³ÎŽ´X`Uåßýîwàü#¹šÕó›¯=â·¿ÿÙÖ«Ÿ‰ß—„€Ø9óÅÿí±Êu\¾ºj¤V+3ª’GAAN§9ëü£ý¨ÄýAA“C>>þL?ð¶” '™ðà©ý¯ rïÿ¥ Ñ}GЪùGŽj.BÊ=x¬p1qÉÿ5û_!Q›ßuæ~#Ùà_MzUß8çV ¹ÂAnsîÅ'ñ}«w~sÎîœ[-ÜêØ_|t‰(ä\_Òûª*ùèY)™ê¸ÞÍ-Àd HõØ_î¾qÞÂqHªÃ¥O%÷r…‡#gœ“>”Å©Wðþµ Âó£âɬ‡{–\›‚£¿Ü²Nñ&¹”ê™Ú«ÓKù0šNÁ¥÷Κ«Øì/ w7»î‹ß3IXæ‡Ì̳Èb6¦]\Éê§^RªÒ@ß}Þ±,ÏÕ%š«Z %ûÓMó0i×ù+ã¥uäÁAnsÎ~”m”˜¬ÞùS”˜ÏüÿíÝ}Lgžð»]]Õêz9ÕÔ8ºå%ÑJ$BtË‹È(ôŽþ’ bQˆ(IWæ®ÁÛMtªŒ%é`[H¯‰zIކ ¡¦!¡î?åZ"caØ-B©jp²'B˜"Õ‹{¥½ã®Û7î±Çóî1ø~="óòÌ3ÏóÌãÇÏ<3Þ›'¾B&‡ÝÔý*ÙäÖu‰/!GËe®Ã-ݲòÌí‹ô¾_¶\¤jùïS÷ísüS¨¥]ç’"µ é¥}ÿ®\pŸ#zS¦òLW¥ö¦äÈËþ•ûËÃ4X&"zp—3 jB|Çí/§Ù'ú€¬8w&úŸ‹þ}ÇdàÂéª "¢œªç*î,Ê¿ŠcPÚ>çžê|ypE¾„ìrïãÆ>÷&SÃw ”à6€®óv!¼?þ²Ú7ÅÔg\™5gkJ¶)œ#!¸Wúw!±Ò®õ…Õõ…êâãäqò}â× Æù£T<ÛzáƒZfïDÇ/õî¸åÖ½»¾°úlÀà9ß“½nÖ¼ª–±Úk5,ÿáýñ »¨(ûÑ¢® ßU½ÒÓt<~$òèyânpã{ *ø?ˆˆ]¼Gç[¸-¸‚Üw¤è•K3ãç[«Å#,Šís±I2É 6†’Sõ\§d‰#/ŸÎ·d¿2³É[g;JpëC×yÛQ[â&§ªÏ¸bï19ñ-Õ–›1gk'’çüæ£jé:|sXÿ<®Šs «c\s¬€ëß¾X!ªT•UퟲAÿØÞgUVåw¬Êªöñłܕ¥?Ñö“½Ù¿Ë»í«SrVY+?¢B¸.²`мèkì,ÀdìàIþ…„í°è ®TYÕ~>ŒOÚ‰2°ý¡Ê3«Ü·¬Ï¡îP(AÙì…ò†ÄŒ®ó¶£p¼²‰¿5£l²÷€+ÿ¥–é–“½\t˜‘-ÃU6õQ§àqº™®Í·Y9Í¿%·+Á¬ vð$?U#a7ÎÑry”ZÍhiõ¾Î£®üê„3¤¥;î(+C¯ÄÆh'ªóöp{DD+›ÑgØÁ“ªù£¶½¸g,ŒAºVC²iŸÅf³RñànôŠŽ®nj]㎼|¿kX¶Eé ï­¹×÷kñ—Þ¤ÛŸ•ÀÍ`»è›st ;Ø;´LTyfu¡›ù”Å= JÐtòwNõŠÄïuNñ9D0‰ßUí""¢Óƒ«-9ìàÉ® QuöÝÁÕs¥Í¾qªm@} 9äìRÝ}{û¬ÍoÙ:º~¹BayEß¾Ÿ±~4úÿö±Z¼,,ÖÛ—ù2½] (>"ªî}NYå™ÑÓ¯kÏÁÔÜ)*ÊŽí~Û—CƒZqVœï«­Î®íæºe϶Ň=ô︭­ ÕV»Ç‰¨:ÛÕ:º~ÆIí$"¢ÖÑõ:Q×X ûÑ""¢Óƒ« _<¤1ȶ_ Ü Òx0mEßÂeÁ+òÖÊb(M”‰ùY€y&{£o\©î¾}.ÇA'÷>Ê]kí§5Ç,+ÏܾxòWÐDü SÃTS•d.»Jû#•¿Ò™‹ãïV»(]BDî¢"7WýP[P‚ ‡ø‘fßÞ–E»ç~ò‘ÇžÎþzõËÏÞøŽ_1áÔ7¾hÔa@[$’¼ {¨;vJò(·ðƵKõ/~òÉ'=™gzJÁ0ß¾ˆÜÒP‚ú!¯ôKo^_Ùñ¤J0ƒ²då?wb³JúÍ\—ëzݸvI­»%\hkÙMë«ô Hë‘£Î)Ÿ$•••é$Àö73~¾õ¥uôº¶.”à&þk!‰'l¤þ<Ѐù0`ŽÒ®u¼3aKC ZÁOˆhƒžj²¢=f¼a@—Ä6¬ïƵKé>ºÎ[Ø÷Ÿ/f: ”àV‡Ôy¥òj«C fŠí¿0á(è:oU»Ÿø™Î-å¯eØr¸¦Œ{óB„wN˜T‘ÖVˆc@×¹ú‰hü?ÞÑØ¦îù¿úꫵµµÙÇR?"p¢ á6ü =X×”YáS!B„f†”doÇÆŒ:÷÷÷—8gð¯ Çž…ý扉 ŇÙáKˆ˜>¯¤ßÌOÈñN÷Øì…¶Æ¶nyãK3ž’N?]Å"Dhf¨Öd°Ûcüqó½çùùùþ£G5úÍD´üÇ íu或N÷ìwÉõv$ò¹Èï>䙿×Õ¼ù\DþÎ+Ó¥ÞÙn†ˆ˜î¹ð•fg|÷Ú‹Äï®ÃØoŽ9ꯇC‘p(¾ÕÏßíb©Üóv;Q«/Š„Ï–'H= 0Þ[Û^Æ?Å"Dhr¨ÖlŸQg"²Ù [ZZÖÖÖŠÏŸ,-iô›ÕL}4@DíÏ”Qù3­Dtá£Øhnn†îÝuñçwĺűäCþô&2Ð{€í-ãŸâ"49Tl 2Ûá1¸ëÌÏÓø«ùy/Qmqqß®]uêƒê¹?¯ ¢;K}êŽÉË%""v¸m¿;ÈôÝÒ=\m9è=À6–ñOq„šÊÛŒwuŒé:óS~ùùÍY’Ó¹k~žˆ:Š‹ÕzÏŽ¦SíÁâ&=„¬Ý_XÖ˜|ÌÍ!"¢•û Ž’b"Ó'ãU M2þ)Ž!B“CI#`…NŽ]gîÍÍ÷ïß¿ÿþ‘#G„Ï.9ó zÏ¥ÞðÛíì(¼œ®ìì\_]ô–h¬Æ²¥ °ðýfµwf$ê:³# öB[ìŸgÚðê°åšc£ÌÇ“T„Ó=|yÙ¼3'i{³æw‰dcØ~emÂé9„Å3Öœä¥/£6×ÜJØoV{a†ê6â˜î¹wêDÄŽ4”zFCÞ2C“™£þú;æÑ"’?qv¸m¿;ߕє·gŠò6€U˜P{q(ÅÌDY@†èé7Sr6õ×g»ï¼ˆmöL‘xœ þ÷â•Fn›¶!áB|_ñò¨?È=)‰P¶Š¸AVQ<ìp›M1~v¤¡qdÈ+H³t3AüÓÊ稰{I§_”þ•¡3~ç~{aÃðŠ4§G’IœÑG¨e%ð>õÏž-ý¿ÜûÛ¨Š„Ï–+$C™Ò9Šv®Ìv3¢cä4÷v3L÷\8t½iE=£ä P‹SaŽVé°¿÷ùóÿÖ¡±Eêy¨#—Ôpõa´õÂQqp_â¹*XßE²J¡òÈ’*ÏF¥*/JÅ|V/8vä7î|_8 ‡|E*×B:a+)ìP<Š£¾ÃUXk`ún]—f”VTãF(šý)åhº2GÑ‚ "r½¡å~#ó0GW.9êêƒ2M–TyÑÈöêU‰^OÁ9rÉ}Èæ&"bún]wäV=Ç*»|XÕŽ±(W+Qžt•¼¤Žhb©éº5.Ÿt´ñÃ1ݺ[ Ù©%¾®Å§©ÔÖ9*kî¸;ÂòÊ «œZ•MÖxjÔV×ú¬Ñª'@Z'Ë$éOò2HÒæúÍD”E»ç~ò‘ÇžÎþzõËÏÞøŽ[ª½À–4Ýcûè`Ä£ÖÙ€AO¿Y8ãÙÖ²›ÖWi)HÿÙÔc‚[Ç”·°ö"÷§Æ 1ìÉö›%Ðu€m®ÜŠx2°€ûÍ”ô6¶ ¤úÍjoØPu®;v*M‰0_Rýfµ§þ”?&ˆ ºD'l|ÿùÿ=öä_ÿÍ?~¹ñí_ïŸÿü†ÄIë«´}»|´ëüÝúúúö'ëßûÍsŒ~fL†-VbDdÍb3(œÚ†{KÚ ú)Ñô÷Dôý¸Jëÿé4XÝÿ¬ýl-Í® IEND®B`‚fox-1.6.49/doc/screenshots/foxcalc_prefdialog_03_small.jpg0000644000175000017500000000671611637250333020461 00000000000000ÿØÿàJFIFHHÿþFOX-toolkit ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀiÈ"ÿÄÿÄE !1AQ"Taq‘“2R¡ÑÒ‚£±#$4C²³Âñ5Bbrð3SÁáâÿÄÿÄ1"qÿÚ ?‡ögʆk?g| ècÅgÍw˜ ÌñËŽc‹I±µÆî՗ⴳ˲d½…‡;f§MËznxQÃýžÇúñYóYû?ô1â³æ»¦â:F²îq¼ßZûî=ÅbLJš+r,»ËHõˆÛnãÜ7<(áýô1â³æ³è {¡Ÿ5ÛIŠÑDÀ÷ÎÓ¼‚-¥õ÷½ÓâÕe‚39ÍÎiÜuí·jtÜð£‡ô=ÐNJϚϠ±î‰ø¬ù¯ "tÝœôpƒÇzâ³æ³èk¾Dê¹ÏGèLw¢~+>k>…Ç:'â³æ»ÄN¬‡=/¡±Î‰ø¬ù¬ú蟊ϚîQoVCžŽÐøßDüV|ÔÆÑbA®›ØùÃ4Ð|—X‹:®sÑËù¥~ìn´·®ý÷ø-~eŠûa ÊëXšrØ÷âA÷.±¦ç=Ãé± €n´íÓo^»Gry­}ïèQ´›yÃmmtÛÖ;—N‰ÓsžŽIÔ©sËpì¡Þ¨å˜rüQu¨·«#9¨7÷Ÿsú—?b" ¸`ó¼4‘­îmr<4½•ÍD¢7´9¢Îa³›™§ÖЋŽÞÐ6á•-òúBCšöiÍÚGùµµ÷ü­àÍ‹Ö"7­=T·æUø-kªñFŽ\H;‰ ÍfœÍâJè÷qTçª!¶Åfk{·7>·Zµ‚3 Œ½Ï-.qÔ›mU‹u½–·ê~!:•Ïõ°êim_}8zAzdÄç:: &9ÄÈA$o<Å9D ˆfk‹… q7$HnMïSˆË¦{Ý™Øu uó\¿[ñõôA\h®,pÊ,³ð½Å °ÃAGµ®ÉÓÜÎ¥9FÏ[Ñéüsô&zÞO㟡ID³Öôzý ž·£ÓøçèRQlõ½ŸÇ?Bg­èôþ9ú”A=oG§ñÏЙëz=?Ž~…%FÏ[Ñéüsô&zÞO㟡ID³Öôzý ž·£ÓøçèRQlõ½ŸÇ?Bg­èôþ9ú”A†æ-À¶ ïE”@oï>çõ"7÷Ÿsú•dÔí­¨g/U#<§èän£0½öKoÂêm:¶#k4ÝïUcÝ|Ô<¯)ËÌ-.Qq}·¾í4ëVû½ê¿ÔÖÑh܈jêyj! †SÁ$â7lÛ­”•®yiØÇE¦%à87ü­Ô“ðAͱ²¡’U3+žÎH€A {[R8/M¦­rà3”Ù‰»nn5iaîë+̕Ց:bh_#NL»H¾7Ý¿…Ö‘Lðó4iµÛs­Ž›7hnô¦§ÄN~Bv73w9Äݦö°¶–ÓfÛ-rAŒº&ˆê¡l‚ä¸ëskl˲÷>þ«¬3ªs€8UHÙ©þËwžÕw¹Ô®cÀŒŽkŸ`㮀\–¨3E#·ª¨cã µ›´7Øu©ê«ÒµYA8\àæïÞÛY>ïrõKŠO<ÐC-±>F¹Î½ìÛÄ æÝÝv 4Ug©câg˜ÊüÌ.sÚÇÓì6ÿÎyŸª¯1á“ÈZK@ÊíNã³fÄÈ¢ÒUÉRç )¤„‚ ¯­ï¦ÍÚwûÔ¤D@DDD@DDþóîRªš°²qú›žDŽ1·:ç-õÚí¿j·†)g™ñBÌî!¼ÕÀ#Ñx‡Fþ/¥CeœZ’xîÒÖ—ÞÍÚ¸kðV{½êW¢ñü_JÓ-<´á¢Pœ °'Mm¼µÏÔâS3|nsy&HÈÃ[>M»Iß§ü  QNBI&Š˜“¿’oÉp͊טšÎ´ºZ#ì"`µSU6gJEÅ€ùÀÔý‹~&èÊy**92\ÃAÎ!ŽÓ^ÿr• Ó´¶£¤Ü†4rÓ[Òò ‰‘¹¦OÒ€lÌ®½ºöy]1ÖkX‰²Ó¹Ü+!©¢¥s%“fFjE‹A¸Ë¼ñ×´“¿O"œ“bÎÐG'0€ã`@õ·Ín†† SÉÊÒR "móئͷßÿ¼ÄÊÚ™ZÊÜ: Žg8Ø–›X÷*ÒóE#cå^üQÕ1ÀÂù- ·e좄 ‘N÷ñ™ÃXÇ1ÁÌ sŽkûÆÏel£Ž¶õ§‡“ËÍ‘­8` ɽ‡äµSÓV²jü.HZy72 ŽPyÚë·f‡un†hÙR_&0l^Í-·;Q·aüÖ¹|߉ÇvBóθŽsÝtÙ~³~*dÏ/6|2•¢ÖÌëu ‚û­ÛmÖŠæb2Q¼”ÊNl® Êçq:›|võj$®…’¼É£cÐs48_Cpo¶ÛÚFõ"Ÿ¢§†8MSd  X@6Ÿ€=ËI¦žF; Ã9,Á X4}{{€ëR(`†¢ºl>œE¹!®ƒ_Ì{l8µ`{§ ¡Ú´ÞÄ\nংl*,˜m°º'RÄ憜¬A°h¤€l2ˆˆˆ€ˆˆˆ‚ËÉÿñsþÑù9kòŸË†à•sÓA)%+9I[”’áÍ:[`³†§ûìòü_îÉÊ¿Êß%07ûS;üÇ.q;^´¬DE ´ÔT6œG™¤ç~Qbâwö-Ë j æc´/ ¾çg7®Ë[ü¢¢c\rÊâÛÜê6ñ=_eÈE›7&ÛÜÛz":As¸M¶„Ÿ‰DÉ䌱ÿ¢Õ½Æ·6ÙÁkŸ† †Âc‘ÅÏ,ÚâÝ}ji†"I1´’CŽ›ô×à;—®M†üÆë·M¨"zRœQùÓÙpÐk›õvñZÑ27=ܨ °#“7¹Ø-¿Ý¦—³  qXÈË[+tØ‚!Å)„"R^x·¨;øMû/ÁkÕ#© KKË,lH×éwr°°µ¬+ml¢Ü,‚1Šy¨ÝS d{ƒ@#)'€½‘˜Å,š6çÏfW6Û‚œcanRÆ–ð²ñæðÞCÉ2ò ?OXu÷”YŽÑ<´':ö» ´µÿ?‡eõIå%)[;[3šãfŒ¹o¥ÎÛn·zµlQ±­cCE¬Ùo쎆'·+£c›{Ø´‚8å,®Ê[,n.-ÍÔz¯omÑeØÕ+*dÜ£^À­Ú, ûnŠÃ+o{ ñ²di7-ìAY=KPlÆÈ9…Ú€-ge¶Ýçݽmƒ¤©ž8b/&BàÒ[a¦ÝªnF­orðiá3‰Œm2`ëjmDDðW¶ AÓ<´4µànvË‘Å]K6<‚Iià{ófs£$[€rÞò; kí;¼ ê!~O#d†šÞÝŽkãhÕÖB§Åäd•¹Žk¹¤œ®×{´']U~¾Ó»Êkí;¼ "kí;¼¦¾Ó»Ê&¾Ó»Êkí;¼ "kí;¼¦¾Ó»Ê&¾Ó»Êkí;¼ "kí;¼¦¾Ó»Ê&¾Ó»Êkí;¼ "ôÆ‚\÷€8kÿ•âY`„4¾Y¹Ç(¤’{êA”Z…u “ ­þÎa}¶â½ÁQMRÂø*]#A±suµøõ ô‹ÌR¶Yªš@!-møÜ_ŠÌ³SÂdžFçpcn6“»j ¢ÕçÔC¼øXؘkz÷E-Hs ©t®ÊKuØ<Aé¨çÍPÁšÐÈw¼Ö»ú¾ƒj" """ """ """ ""òæ2Ø$Ž'S# …» M u[Ù+ nWf=¦ý¢Edˆ*cÂe‰ÁÌ}\ ÁϸüE¶š†ªŽ.Jžj8ãÛ•´Î·óŠ …=lbw šs$¯k‰ä € µ­Ÿãu¦««¬k[5M1 9…©Ü5ÙÿqY¢ ‡àòÉc¤¤-<Ýú°Òm[©è«)XY ôi7?«;Sk_þ§R±D©)å€Îé¥dšLä±…€sZÛX“ìüQIDÿÙfox-1.6.49/doc/screenshots/analysisview.png0000644000175000017500000012161111637250333015666 00000000000000‰PNG  IHDR;I#¡œ IDATxœìw|Teöÿß÷ÎLfÒ{!¤P’:$¡÷ލ€(6°!(~]¿®»ë¶¯ëϯ붯ë*‹ź(¢ (¢Ò{‘J€T’Fê¤MŸ¹¿?fæÎ„T"‚â|^bæÞûœsÏÓÎ=ÏóœógY‰®| ‚ý9ÎòÂ^FàÆß^ö-ÊÇ!‹NpÈ-! "6œåéª3×µààoÏ¿ ˆH‚ƒž–ôÎ:“ÜèrØélޱËkCDìe# Øk_œYÅõí¼ä÷ÙK¸Ò Ù\é]í ¹¼Eg":dwÐ;ÚÎrräÇ&Øó£@À&ˆ‚³¼D$y“ËÛMvõ(:û“ ד„è–WÑUö·»úš³¯8ò+9Û¼³¹:š£þœ…"Éua/Qp>v‹ˆrÓsk‹r!^ÞWœ]@ÀNh rûE'½—,[›$·>Ùös9¿í²¦É°+;'¬u);„¤\ÆÍ%‹ÛOÀ®¼@’ì…do.öJ@}È^°v€ÜZ¢«]mÄYÀ ù]’ IÀæz,Óº ïv-! ìÔ!© º¥Zñ“Ïìô"-é2:•œý©›Bv°S\^´nRˆ@M¡Eö./{Y!µ(wEgoÁ®Æ"·ðVœìu&Èr9º`sÈ«pÜ“ìJÚA¯ó#:ê^r«·œV’M²™%;c;½à|XV«äP6É¢‹^’åäkA6?‘ßïüPÙŠÆþÛ¡f厅ëÃãMØùˆØ$§Å!Ú--\J\rXg²rœ¥!`“å³[WH6$D ÇËD7á¤rü’ËG‹HrÛ’eŒCõ¹ì<W q©tg ÙŸŠîµí9ëVþëäéTËÎvêüüØyÚ«ÑñQrÖ­#/²¾sü–Û¼³¯ÈÒØËg]:%¿ü{âh‹’do+®¾â²Õ—h EŠ0ô¼óÖþö·¶x¶wïVŠ/6 zuU—X½ú=x`1*•’·Þz—¥K¤¸¨˜87ºË”ÝP$i,6k&*E=)ýƒ8‘åRx¾Þ^¼óòüéo ö#2ÌQ˜5iý“{¢jtø°c_&³¦Â`0“¡š™“qèháaþ¤ Žã«íx3~TMÍý½¹á( ‹j8¡š'—N#,Ì×!¶g(1Ñ <ýø |¼½8žQÄ-3‡°aó –-‹¿¿†‘Ãã¹ï—€I½#X|ûHL+O.‚ ,Z0‚‚‹ÕÜ>»'ç/TSp±†Ù““É-¼Äís†Q^ÝH¯è`  ·Ý4˜Øè ¸€^gbÖÄþä\âRucÓz¡Rˆ¤Ÿ)E­Q0()šýGÏs÷­ÃÑx«hj2ðåŽsX,‹æ§ðÙ·LžýïY|³3“F‘°_B4©™=1™3ye,š›FC“}‡ òóf`b› «MÁ ÄÌ&¶žkÙ".û0·û·Ý ÁiÕº YZòs³VÛå E7KÃÉס(d:ܬWÇhm?ÊRµ„ä¦èZÜo+omAjñKpS–ÓÍ‘ —.8¥q }å¼N]kï䢛vå*ÊoÜlwQpÙÀvulWPN ß=ÏN¥j·§]ÏœV~[tîÖÈ™l¡ÀZ–„+Oò…€Ë¢\‰$ç3¹8™]n5ºjÔ9u€à  ®‘Žà)´4Ö:ÄÎ_ÀÚµŸ´™fĈT{ì¿Q(<ôÐ}(—ŸÚ°†% ^Û0€S9ƒY>¿ÁAÞ®Ä ¾Þ|µã,k>ýŽÜ‚þë¡ÉL—LxˆúEÓ§W8ƒúG3cÊ º{%—´<óÔ-ÄDñÚ_ïaÒè$^ûÛ½Ü9/™“ú1e\"™ç˨©k&·°èÄ7[ÏrôTŸ}’áƒã¨¨¬'7¿’¡É1ÀüYCðÑx¡­×Ó#"Ç':"ÜÂK—Ör÷¼”UÔs÷Ü4Î^âá»Fc2ùŃã™1!‘qi}8râÏ?5›È0?´M:ôF ^*‘E·¦ð—§ofLjÿï©ÙL݇ÑÃzáå%2wÆ@~½t2 MÍ„…øPTZ̓wŒÀßG ‹ ›£™E…ú³ýàyvÈãTfûO\`|Zo K«™˜Ö›¯÷dâï§":ҟ϶œ!$؇òÊf6|{š°`*ªíI¶êÀn Hò@Ùiu´P<ŽO® 9¿È6@’lrå N‹ çðÜ&w+’àv-9¿ä6×_I²Û/‚ä²j%ÉN'H.z‡%á4ÊœöŽ=½cT %dïSòRžêtòÁeq8­CÇPRrëL‚$ IÎa™Ó>såÃÝ w•€ I’Üò&as–·dOd“é9œ9‘pý²Ét®;Žbt+i›\ ®t _;-täwÛïºlOû¢£y8í>û ­Äæl ö’rÐIòµàøíÙ8ëÈ&ÓÙ³ìjö±ó’ói’sl'ÙZüuÞ¿š2djµ“ÉDZZJ›idËN@" ò‰%:\CtD?ù[0…¸«T…Íf£©YÏm³‡âOAQµV€¼ü*Ô*yù•øªU(E…(âëã…Åf• ¨Ig`õÚ}úÑܬÇÇÛ‹Ä^$öŽ” ›M¢¼²Ž[g¡¡ÙH|L£S{sáb-½b˜4&Xóù1ËgäxÊ+ëykíA¬VÅ5 JŽæÅU;øÃã39|<Ÿ„Þ‘(J$GÝjëõèôVŽž*¢oïpr/Ôàå¥@­RauȽuo6^*&‹…êšfŠJ‰ B’$TJ%¢ÂÞ22/a³¹&þ•J»­ —j˜5!½ÁÌ¥=÷ÎÂ[ë³ï»»g,_ïÎF¯·’24†q#zs¾¨–ØÈ@ÏF^a-Ñ-kvKCÇ3g×ñM‡ý&xæìZÔù5ž³sâ?ÿùˆÆFû¼Û,ÂÏϯ…”V«‹ÅÞOm¶¶[Ê“O>Í¢EwáëëËý×/Yµêß­Ò´PvóX@¥6€±3c(=7­:ˆ£o÷eðýÃhÖ¹û±ÕLŸ0½ÉLáÅ*V¼µƒÜ‚ ªµ:.–USSÛDÙ%-JÑnFúx«yîÅ/Q«•”–ÖsäT!©ƒãùzW&¢`¥GdÇO±ûP :fLêÏ·»Ïñ¯7w1w憌áü…K;UÈÎ9„‡ú‘2(³M¢èb’+ê8x,Ÿ‡ïÇæmg(«Ô²fà Š*9t,ŸWÞÞÍ®yˆ¢ÀœixåÝ•ÖR\V‡|¼éçrÊHÃÅÒ:¶ïÍB|»ç½•éû‘WPIem3•ÕM”UÖÓØ¬cËÞsôëEé¥:>ü"&½‘5Ó¤7`²Xì<óÏmŒ¿¿7'³+8žQJTX SÆ%ñá¦t¾Þ™MAI- ¥’«ÕÊÞ#ù HˆÂh¶±ïh¾£=zæìw|“Eg^œ÷ù‡p™Û‚üÁE…£¡Ñ˺sfAvÃq”…ˆ _Knå!:«»{‡ûT°7`Ñiuö-ÊeìüòŠŽÿ\ü™ŸSÉ9äל“S~¹ÂìC§;Sgù òÿÜÜ]œe'¹»;ØåhíFr¹Û‰<^u(-½àTæN÷gÅ:Ëñ¼/"ÐÂÂÍ=ÃY^N¥ë,g»v_¡wŸ³“]Rä6ïâ/ ´(?Ah=gçÌ—ÓŠq̽‰.×ÁU(«SDt“Í©,îm]îWrÅ!—žè¢rŠ+ Š‚[ÛZ”±“ŸÓåÇÙF[ôgÛu¶Iѽ|mЕÆ9gçlËvw¥×wî4m¡©±‘¤~I”••·ù¼¡¡ÙO¬ ìÀû\ÈÏo3M}}=·þæ-†{ç±bÅ*—²›x÷¤hO¶I`EAFðPZúÙ9 .Ÿ:G÷mág'W8¸:±ˆ«¸å ݃½ØÜ¦q«`÷Jp=kÙa….ówv"ùÚ.+?9¹ÑȌǶ[glÑÑäŒ8èémnü»êgçò}.ó³sòuϧØBa´¼–ù·³=:G-{ÀirˆÎÝúA]ײu(ÈòÛ;“«œÑAïôµ²çÓ­¼d…ç®\Úð³svo¹_]?;G‹ù#êhi¨E99ÒØ}#]~v-l27Eã> ótëO¢à r«;×o€–×¢ãžË`\õåÔPŽßδ.9×GÏþHt6aW•Åw§s>ûø¹Ë~vWCÕ9¬X±Ê>ŒEŸ>àĉSX­VŒF’$É~?—ÿíŸ|ò¿øÅ¯HO?Ù‚—ûïÕ«ßkqÝÌf3o½õ.éé'årw*U‹Å‚ÉdB«Õ²~ýçX­Vù}ÎgMMÍäæž—¯;ÃÛo¿ÕjcëÖí¬_ÿ96›üã%.\(nUöº9Ö¢Úúç^_a÷î}œ?o_y³—“­E¹Y,VL&s—Ê̓Ÿnºi>ãÇOcüøi¼ôRkÿ¹µk?塇Á`0päÈ1Æ›†Å¡(ÝѦya0ÀÊ•ðË_‰ð‹_Àÿý½}aÌf3£G`ÿþCìÚµ—ÜÜ<¼½5<øà}fD’$Ìf3‹™­[wPZZFAÁjkk)**æâÅâãã:äqúô¶oßI=:t'NœD¡P0tè`Ž?@dd$™™Y˜Í’’ú2tèày&$ôáüù|ΟÏgæÌilÙ²ììšššéÛ·…L˜0–}ûrÏ=wòé§ŸñÈ#K:äyß}÷ÐÜŲ̈Q#xûí÷E¤¤D²²rP(D’“ûv…"ÇeĈÔyšL& gΜ#99‰ßýîO 6„Aƒpòäi$IbÀ€dêê´lذ‘É“'²}ûN›P($&&PRRÊž=ûP(Lš4~ýÛ}ß´i“Ù±cÅÅ%deåÂÖ­Û)--'>>–Áƒ’‘q–ŠŠ À{ï­qÔA‘‘”—_Bì×55µ\¼X‚B¡`îÜ›‰ŠŠì0¿ë×Nhh(µµu¬[÷) ôîÝ €ßýîèß?™øøXf̘Ö!~üÈÈ8ËîÝûˆaøð¡<òÈC|ðÁG­ÒÝwß=œ¬S~Ó§Oe×®½\¼XJ¯^ñœ>}µZR©$&¦'ûöD¡PðñÇŸ2oÞ-]’Ó ‹ÅÂ’%pöl&V«•%K #ã,€î2lØyH’Ä{ï­Áf³qìX:‹•Q£Ò¸ë®Û9w. A°X,deåL}}7nbÑ¢»8°?>>>$%%àççKÿþýðóó#!¡O‡ï‚‚B˜½yøáÈÏ/ì”×ö‘‹QþמUŸ““‹B!2qâ8 yóÍw0›[[lwÝu99y$''µÛoÚTv“&JeÊÈí î>O¢P(P(Œ•†ÉdBt߈«466²jÕÛ|òÉûòÖ[ïR^^B¡@«ÕRXXÔ!½ ( Ù«ªªšÒÒ2ÊË+ðöÖ†ÕjE©´§E‘':ÐÞnèÓ§3gN“ó6rdŠÃ’¹å–›P*•<òÈ”J%‘‘]âé,/FͪUo“š: µÚ‹U«Þ&--…BÁ©S§±Ùl·M&,_¾”_ü Ÿ|²Aæ¯T*EQ.…BäöÛç‚^¯';;—¦¦& 1 äæž§¡¡Â ¾³oß>(•J¦NDRRJ¥’I“& P¸Þ×£GçÎe²eË6zöŒ&#ã,ÇŽ¥CZZ ©©ÃIIƈ©”—WPVVNYY9ÕÕ5¾ÛÉßYŽ#F¤Êõ¡P(¸p¡ˆ7ß|‡þýûu©.<¸>ضm'Îÿ]¾«‰;,˜Ë½÷ÞEZZ >¸˜'žXÞ*MzúIþû¿ÍŠ/ÊÒ¥·9…&\,-”jª\Û¬¬zë þú÷Z$jn†—_z‚û/jÅ`ÿþCœ;— À„ ã8°—3 °}û.òó »eзoÇ–Åå(/¯àÈ‘cÌŸëÑu†O>Ù@]kÇ—»ï^HPP`ãÝwÿ#Ï‹-Yr?^^[¾Áb±ðöÛïË×*•Ї~ Ýôû÷$<"?¿çž…h49]ph8µÕ•œ>}ƒA/Où|ðÁG,^|ùùèßß>%óÊ+«Z+»ô'É8s¶• #ÒR4pàÕÌ»xð3‚——šóù…ô†6ŸúŽ—ZCnNžc¶5‚‚‰ˆE­ñ&ó\v» ¡!!A„…Ù·†jSÙyàÜhxå•U®ÕØêêZjj´¥÷À<øI!)©·<Ï++»Ø¸’¾Ç\ŽxàÁ µÕUòoYÙéu:ô:Ý1r:ovtÂÏIߨlR—V‰Û§·}¯ˆý÷£oÍïûÕg+~’Û)lßW»}_þr#á{µ:“ÉLcsç^÷í¡©I‡Ñ|m½Ý++«Q¨4ݦ/))ÇÛ7 ÛôŇv›>7¯Ð𮹹´…ü‚b‚¾Çû‹ŠÊðèþªtIi%>¾~'ì"Ê/Õà奾jüªª®jx[]½þªðÐë è žQº‹¶4¯#l6úvVkDQÄÛ»µ¢***ÁhlÂjUŸŸo·Þm±Xøä“©««ãŽ;î$**ª[|¾Ìf³¼ ¥R©0›|}tÕÔ& #V›ZÝ­8U{È$û~_8C†®?gx ûvvΰ= Í¸âîðrò±‡ºbE=°£Í^$IºCZ__Ÿn½Àé—5nÜúõKìÔ·,?¿€^Xθñ÷ìæCU\TLMuýës­‰„Ræ.¨äo/œgãVÝ{ÑÑ=Å+kä«Wÿ.ƒÁÈ»ïžàÑG_"4´ëVÙl–k»“ÉÌ{ヒ·Z‚€ÉlãÕ×Â8uªc6³ÙÌ믿…(*3f$ii)Žø]K›a3íA_UÍ™õkÙ?¦GOfhHÇTÉ«,ÇTZFòÝw±ä7Ou™Öf³q1§ßu¨*½ÈÍ&ìŽ`z%ÆvK¡Øl6.œË!hÍZMd%M§çüAÄôŠë¶‚*«®å[“•ã°–„3|x¼¬P:ÂØ±£ºÄËl2s!ýÿY‹9cn%qf?£"®˜—$ITžÈÀööû”Ý4“¤iy£y5Úâz~Ý÷ BƒCº•ßm*;³ÙÌŸ_x‘ÉS'c2š8tðwÜ>·ÝS{Üa·Ìôxyy¡R©¸x±”åË—²sçnÞzë]V®|©Sýúùr×=wïÓرõ36õY»4Ù¹ L™åKŸ>Õ‡F¢7ÚÈÎÊb@ÿDüüº¦¨cb† R¥`2Yعóyê뺬ìÌf3¿{öÏ<¹|)aa.ŸN;Øo¬¶ïÚ!J YèÓ'™qcÓ0›-¼úÚNßm±X()© --Ó§38~üF£‘¢¢bþõ¯tI~Cu5§žý3sÆRfÍàWGÿÀ¿Fü¡¡Ç;¡Õjñ«¸D™Ý%'Ê÷W“úÎHT1 ‡Ðïp?>ÚöÆ¿™IÓ÷Šx”mÞÊØ/¾D€ÿáÃô>|˜¾ ÇúÊ?é5ðÊ᪪jxªW_&øj8‰m´Àá[ayú}4”Çðî»ÿ!-mx§s«ÕJõꘜ“²±ï³çˆ8¼ß$3îßÿD©Vñî»àããÝi¸ @s³Ž°—Wvö,GòòH©bí#ë`=ô<ÍãS—]q~oT´;>7~¿|ê—477søÐaÖ~¼¡KÊnïÞ-˜,‡¨©6ÐÔhß^åĉS$%%0uê¤ï!j3P׿“ââ8ž¼tfoø£á0¾þix©¬ÄÅëÐÌHR3þþm- õõ5œ>½•òò2šÚ>d¼M˜Íf~ÿõ6výñìúîä:b3b÷“Ë î>,<’¦Æ:¼½½©¯«æÌÙlNž:‡¯?¾¾]›Ÿ+--Áb13jT wß}'F£‘‚‚ ]ÎCæëoÐÿ޹ˆiÉÌQŰdøþ°õ÷lš±¾KôÉý’`ÌhÊdÒCíGq\ŽÆÆ&¾Œ@Hµøž=66ˆ iqúÍSô‰7F£Éq8‹¦ý9׺ºzb¿ø ëÐÁ96 ˆúUU‘ÿÖ;DüíÑhÔèõûép*%juÇs~[Fúhø ,›óÃõ ¬?yóv‘q–ÔÔádgç0dHLJª’r’víÆœ: ÿ}öY/ Gv6¹ë6pÎGÃСƒ»lzyyQ>2ƒ¹¹h†fxôb7ÇÒœ×ÌDO€;: òõõeã¦<ÿÜó]b˜Ÿ_À?_e?v±Ñ>÷ô׿gèPûPÌl6wahÕH^î.U¸BÇ´uGÛMWÌòÆlþgh2=5V±,ö£ÇôàõWß`þü9~%wîÜEnîkˆ HH½Ìæ®-¾\¸PÌÉ~ý`ø0àÚN¶§j‘‡^ <úØ£œ-"C0yêd¬V+U—J;•ùСÿ ­·O öƒe7mZÃÓO¿Ð)mbb_ÞÌËç‘…wqW|,¾¾.+ÒÛÛ»J9xà û÷í¿âÕbI’Ø»w?©©)‚ÀêÕïQQQEii)~øv—xDDŒ¡N{ˆÒüãÄzDzeí&Œ»"9îú×ì3š±£»6ßàççËž!»¹ùâ-„Š„D%•d“ß0_,{å-·ÜDIIi‡Š ((€¯ûOå¶CŸ€ýðœ NKŨ²7ù… o£¦¦¦SE0êhÛ¬ØnU€¨þ }zJnnƒäÃ×±dÉýË×£'âGr[ÑaÔØ•\6P©R“:œ3gÎÑ¿2GŽgذ¡Êf4yMÙ0ÿWŒ\’ÉS÷fqÓó·°W¿—ÓÂ9†ÏîÚ4ÄÏW]ÙÙlëÖnâø‘LÆŒ±ß“$((eùò®(:;´Ú&O~ŒòòrFŒÁž=kijhûXµüó&^þW‡+Î"ääãU¡CH¾2¹ V „Da4êQˆA(•]w±HLìË[Kî£gÏžøøtMÁ]-X­V¾øâ+JJJQ©T( †Þ¥Í8ˆ‰™H|²v«VÁ¼y·ðôÓ]_dؽi3Ÿ®gØð¡ôíݵzöññ&x^ï‡äÊþX$ ybBÁ·ô§´¾„¿$<üa¼¼:_lñ÷÷Ãçö4ÞÈÜÆ`­–Fà‚("ÄÇ“pÓ ´¬Yó1Ë—wÀäɾ|ñËóœ[ÑË(%¬µÊÀÝ¿Î%44??_rrryýõò ‹ áü£ø÷«'n4R T*•¨†#q¼¼T¼ÿþ~ùË'º$›Ùl!ß×6Cqq(µ…ZÐB¥T‰TäqSqG»Ênÿ¾}-VdO¤§sçs;e¨ÕZxå_EDFúqþ¼ýžJåÇÿÜ%E†Í6ˆŠŠJ<@ss3•U—())'(°m%2sædfΜÌöÒ Šaæ¢1F£ÕjiêâäÛƒ>ÏúõOR]]†·w>>±,YòH—hHLLèËG_e (&€¤¹}‰ŽŽ¤qònÉ’®Í™6‘À„>d¼sS3¡‰}éwÓ ""ÂèÙÛµ?bWùòÊ+ìÙSHzº7Ìûï¯#11A2d0Ë—wm!@¡}ïBòSS8µöSzŽJ#iâXíþ›Ë—/#)©kmÉÏÏ—ßçT±æÀ^füÁHÚèÁ¬·~‚©Þ̘EoüúsÃ÷ÚÀh4a4KøuÏ©³±±•Ú×Õó¨ÏÊÊiµ_Ý̙ӷO~WTTÑ36«¹µ/_qñEöï?ÀÍ7ßÔæ–NÅÅ¥ôëß}sC·ä;þ©#R©¯ëxï¶ö“ϸñc¨©ªì}Þù Œ‘ж›ï/,,aÈÐ46Ôw‹¾øbÉÉ èš¯`¨”–WÓ;¾'¦v¶ ºR\ªª§Gdp§ÇtV«•úF#!AÝsÛº:IPáëýÓð»ü1á{ïzb³Ùð £¹¡¶[ôV«Àpšê»×ñº³ÙJXDD·•Ñd!2ªÚڪηƒÑBèÔÕ|ú(êjª»Eo¶BhH0 õm¯lw ü}ijìž²j4j%z]s牻¥ÚÁfîòbRgÐøbÔ5\•s,$IÂ/ ”æÆîõËaµÙ £©þêðû9AVvÕ•ínwìxðS…R©D…–[<½òÊ”••]O¹~–P(ˆ‚}ß•¶<ðÀƒ®A©TòâKÿÉÞ¯deWVVFtt4µµ›È:£ÑˆO§™?w8Ïem &“‘¿ýýï¨U’$ñòËopéR-ºZ0ƒ+ wò¤÷¤ïvz‰vÛá5—¥íôö¾Õvr£ÑÈ‹ÿü;áá¡TWV—­ÆVTTðͶo°Ym”••ÛÒ1U§ÓñØäÉ4dd;kÿþò‹® ü3D]MU›gXüþ·$0ЃÎ>Y_VVÆgŸ½ÔnÈ‘¡Á€& ë>xžô×/½$I]No³Ú0ëͨ»¸ØgµX±­xùví‹É‚d•PywÍÝÆl0#Ju×CÌz3‚B@éÕµô¦f µE7+06Qy«®ÅÌÚZV)çÚîøÕ/CPpËÆV’Ùl6öîÞ+G9K¯Þ½ì™2›iÊÍe$pòlë³*œ°Z­lß¶ÉS&·ÞSy©’’’RR[‡¡]ª¸„V«¥ß ²¡h[‹@µµž¡=ðàûAj³oÕÕµöh¥ì$IB£Ñ0fœÝ#Ød2q2ý¤¬ìé¿t)úW_eò¯Ý®ååå;zŒŠŠ æÎËË/½LXDËYÆW›¾¢òR%“§Læàƒ‚@T(ÊJËÈÉÎA[¯å¦›nB§Óñá>¤©¹‰%/ùÞ§q]oFöï?È´iS<0zàÁU„Á`àÀCö­6mN‹Å ÏÛä&Lœ€FÝÒ2Óx{Ó d:xˆ´iœ>ušÆÆF’ú%1~ÂxÞyû´uZjkkÑjµDDDpðÀABBCHLLäbÉER†§púôijkj©ªª"%5…²Ò2Yáþa0yòÉßpäÈ1ž{î®øPm<ð m ü)ÒÓOò—¿<Çœ9³ÚLצ²S*•<óì3€Ë²sǯÿøG^ dÉ’%m2ÕjµäŸÏ'((ŽqýØPß@l\,¡¡¡ÔÔÔŒ¯åeåÄ÷Šgò”ÉœÏ=ÊK…Åjaêô©defµØî駈ââb¦L™È”)1 íÎãyàW† Š˜1c*3fL¥±±±ÝÁ6•]iI)ÛÏX­VüüZn£ýõ_pøÏfßÈ‘Lœ8±½J©bÞmó0`dge@hh(wÜy%K°‡Æ¡kÖa³Ùˆˆˆà䉓¨¼TL6•ƆF²³³ñññ!)©íM~*HJJ$))ñz‹á7’“ûuéà÷VÊN¡PpÇ]wtH""¢Ý}Ú|ý|àØêÈßߟ#]1šôë×R°ãÇŽ3wž=îvÖl— Fï.nðc…Á``ßÞ4·£«×_½ó <ðàçƒÁÀ¾ý'Ð5·ŽÆ1[‡v+Ènò´iLÎË»¢]5:BÚˆ´«ÂçLjªê:JJ.¶ùlÆÌ©xyya¸²CÝ<ðÀ ²²†ÒÒ’6ŸÍ¾iF«ã¾WD±sžÍƒö‘˜Ø—Q÷µûüjÄ`zàÁÏIýé; ó„\õí¬V0™À}Ïʦ&ð»z§çÝÐ04°yµ=Áj1Z04´}òš'ý+½$IXMÖ®§·IX-V$[×>~6› É"a³vmw›Õf‡¹k{ÜY-V,Æ®-¤YÍVQÀbèbz“‹ÙÒåé,& 6‹ ÁíŒ`‹Õ èúRÝRvÙYÙTWUS^VÎÅâ‹H’Ä„I°ZáË/!.’“í O¯‡½{!8ƺí4m±XXÿézª««yhÉClúbuuu<¼ìa Û·mgê´©( >^û1ºf‹ï_Ìgë?Ãh4òÀCÜ¡jš'‚âHèW#‚¦1^ÁP·”]uU5ã'Ž—¯+·[·Bh(|û­ýŸ0ÄqÄúOÖ3bäÂÂÂÈÎÎfÔ˜Q ¾ùúI?žŽÅbaÌØ1Œ;–‹/²yÓfÆOOaA!‡fò”ÉÝß<ø¢Û»fnݲ•ž—þé:qòdÈÌ„)S`Îxê)ûßAƒ ¶Ö¥èòóóIHL (8ˆ´´4âãã9“q†aÇqüøqRRSÈ?ŸOxx8AdœÎ`ÐàAøûûsöÌY""ºvê–üaµZY¿~ þÇ«èt®¡p]ƒŽ¯æy¶dëº=g7kö,ÙMÄiÙùøÀý÷Cq1ôïoO—š ééðÐC-éGÅý Ãh2òÝ¡ï9y½`Ðë0èÛ¶µ÷ìÙÇ”©S®±Dü°qãvÎ +ãËAÛÉx&‹?=ü4ÅM&ªt&þ6žOÒPi²1.9šèè°ë-îuC{Äz_¿–ǧvKÙ ¢ +8€êj×®¹¾¾.EçDj[áϘ9ƒ];wqæÌ¦Ï˜Î±#ÇÈ<—‰Z­æŽ…wлOoª««ijj"7'Î>g·åÛ-FæÍŸ×ѯ ‚Bз± ùçŸmbâ¤ÖNÙxPTTNñÜbršr*Íä5šX6l}.\@çãͯÃúPÊ–ê\´ÚôúŽB¬f+’UB©Q¢R© ëø,㟠z EP› ÏüÏÿãÅ—þÞâØÖn)»qã¯ìˆ½ö0uÚTù÷ÒG–¶zFXX½zõ’ï;iöUy÷µ„Éhèö™ü<1þTV<|(àî´tz_("+ €×_ãì£Ë™·åçÞXµ†AƒGv™÷Ñ#xëÍç~8á¯!$©í]O´Ú.ìzâ\_Ô×7²ö›Lýx*ëÖñ¿÷¯ÅïÑß¡×hˆzå_¬0€I¯maëGs8ÙPÍè1ú6…öPQ^ôJÿãŪìŒ#uÚ:¢¢¢Z=ÓëõX,v?÷C¥=ðàZ¡YgÀËO(þ¸¶ÛÒë 4Ú ¬c \gâƒc{øMh_ÎÝú_Lúè[X's†ìæ÷¿—øüsûöh]…ÁÐuß ×ܲ³Ùld8„þíwPeçP2œÇç0nöÌãk<ø!`2Y0MÔÖ6²´VÁ_êJ†R©@£ùqì—àG”Z û€˜Ÿ0ƒ TŠ`Ö§§Ù·ï¦LÙϱc (ùLš”Ê·›?ì§Ó©X¡R0rı!î•âš+»Ì=ûˆþíï ;Nœ ™¬Ûÿ! /<Ïܧž”Ó]ª¸Ä믽ŽÅbaÊÔ)ìÙ½FÜ[æ’’Bff&&£‰aDZù«ÍÜr«}¸Í_m¦èBuuuôêÝ‹   ùÙŠ—WÐØØHBbååå475Ë=÷Þ#;òêõzÞYýAÁAÜu÷]|ƒ!3óO™ý™S^ÌñY7³mË×üÞä˯êJ¸eòÎ\øøx³è¶y¼úô@ ãf¥2¦W[ÂΑ©6’™©åÙ?±š3‰ŽŽfàÀ^L™2ºCžWêT|#âš*;]³ã»ï2i¬X €H3Ù¾b%åwÝIèDFErÛí·q±ø"!!!$%%1uúT>Zó)))|¾ás† †^¯';+Qinj¦¢¢‚G{Zê7VÉÊ®ªªŠåÿµFÃË/½Ìc?ÆýÈËËcàÀ€ýŽ·/`çŽ]("!±k'³{ðÓ@p°?’Η?-Xeå¼0½Š/­jB’¤»Ünß~€Ï÷m‘ϱš¬(¼ø+ü P´âÝØØÄ?þñôU‘322Œ‚ÿìmu¿o_3äÑ/©÷EPxp ”Ñ`¤èBÆÞ•™ëÖµHÓˆ}K–zm½¬ì.ÇÉ“'Ùºe+Ïýù9 ð÷÷ÇËË‹¬sYL˜8¯¾ü A¸ùÖ›Ù·oÛ·noÅ«ºªší[·CuU5¯­|ظXYÑôîÝ›ÂÂB.]ºt]æ=±±?\ú²Š–ëÔ”FÂÞ½üï¡]ü_Ÿ45Nãñ7yå¥"†rÍ/ŸJ?Ç{S6€OK>¿ù-Ïôz¾ÿžA~ÿÛ'&c“ñgk6X¯ bôWvjZ^ 0äM½ÀŒcÄcߨN¾©)Dõh½áÄôÓ‰‰‰!+3‹êêjí_Öýû÷óÈòG Âj³Ò£G‚ƒƒ™1sjšûPr±µFMXX3fÎ@£Ñpä»#<óì3üãoÿÀd2ÉÃØ¬Ì,, ‘4·±OÖ Olì—>ÐìOru õõ.FDrFgÀz<¿o›èŸRKX¤ z•æÊ‡|NzOllǸ±±:‹ëltM‡±jµšá÷Mã‹mè‘—‡ÙLŽ("FE1ö‘¥µHKHp>¾>„‡‡‹$IÄÅÅ1lø0N<À„Iä¯â¸ñãØ±}=¢{0vÜXvlßAtÏhƌÎí;èÛSÚÞsï=TVVÊŽ‰ááØw€¸¸8ÏöChh¿‰Ñ3Oç‡ÿÇ¡|véoø}ÕL3{LIß¾-#üü|‰Ù%÷É&!ˆg|Oñ‚ßs­øŸ>}XüÃgănáš/Pô:ﯾà»×Q–“KDp0ã–-¥_ÿÖ+D¡¡¡„††¶¸çTr—_»»·Ü4ç¦.ËGQQ»wí >>žù æw™ÞƒŸõŒ>Ǥ¤Ã<¾b.ýû×ddDÑÔÔ:¤oéÒ»XÊ]òõ•Zš]A}}#~~¾456cl6᧦¾¾‘À@ù¹¯¯ƒ«ÕJ` ?55ZTJ¥ššš:t:=þ¨TJ||¼[Ð{àÂuq*Ž‹#î÷¿½¯nñññ<øÐƒ×[ ®ìÅ¡¦&’{ï9ÂäÉ}Y¶,üºÉ³rå,^<Ÿ¯6í¤²¬šß=ó>ø47®’Ÿß~ûM<˜NEE%¿ÿýrþô§—‘:˜éSdznÃf""B‰Œ £±±™… ç°rå<óÌ/®[ž~¬¸n:³ÙŒ(Šøû{¾Bü08x0ää>:t‚   JâÌ™l.^,çÅ¿Îæà±t>ùäÒÒ†`6›¹õÖilß~€qãRñññîüW~ø…<ãççCjê ¬V+U|ö™k¿´sçòèׯgÏæ1mÊ8 ‘úúFNæƒ>''§€¬¬ó×D½ÅSwaµZ9»{/™Ë–S4m;<Íî_b6™¯µ(ü pþ|Û¶íçÔ©LŽ=^oàØ± .^¬ ¾¾‘#GNsß}·1cÆ8öï?FQQ)‡¥_³-”¦Lƒ¯¯7S¦Œ&(4«ÕŠVÛ@MM‡`ܸ4‚‚;6… Ö®ÝDPP =zF°{ÿn¿ý&RR±{÷a,˜Å3Ïü‚þý=sÍmáš[vY»÷ÑóÿCðèQpêIœbÝ¡iøßç˜÷›§ät›¾ÜÄÜysÉÎʦ¡±‘#G²éËMÌš=‹­[¶2cæ AàÃ5RQ^Á-·ÞBqq±L#*DùøE½^ÏʋE÷-º!w8ö møúú••G` ?õõ<˜ÎÁƒéøúúðÕ7;Y°`{÷ÁÛ[Cii{÷áüùk;š–6ˆ@zÅ÷$( “ÉÌ!Éhµ ,\8‡æf11QôèA\\Oš›u Ú­¶üœ"öî=B@€K—ÞEm­=øýÖ[§]3ùJ¸NÅï7ÙƒŸ&~ð9;µFM|¯x"£"ñññáüôÛÉL€(ÇáTœ–Ö"â!&6†ºº:¦Nʸ ã(-)ÅßߣÑHCC^^^lùv ~>~,\¸ÛvÉ}ÜÇŒ™3ZÈŸŸOYi=£{ÒØÐøCg¹š›hnÖµúç9FÑ®®é0ÖKíEê}ÓØ´}0‘ÙÙx›Íä‰"bÏžŒtArÚæÍŸGl\,óæÏ#ºg4½ûô¦gLOª*«0[ÌdžËäÀþ,¾1U•öÕ«äädŒF#………øúú’—›Ghhè5ž=›É«ÿ~­Íí£ëêj¯ÙpÉ~î¸æ ‰ƒqç—Ÿsä“õTææÌ؇"©_R«´C†ió7Ø#¢££å{=zØ-èQT”W°cÇùþõÚá8mD¯¾¾¢Ýç’$¡ovY›žØØ#½çÜØNÒ߈±±m!6.–اõƒ¾#ªG‹ïûé…îxbcoŒôžØØŽqÃÇÆº£¹¹“É„BTÈAýxà?®¹²³Z­dîÚƒù÷ðÊÍå|ð0ü—Ïf¼[Úµh<ðà§I’¨©®'ëëƒH@Ѐþ$îù£Ùùç†k¿Sñ®=Ä>ó,A£F† $’Áºï>á›gÿÄüßý¦eÚÌL>ßð9ÓgL'22’Õo®ÆÇׇY³gQZZÊüÛ\û§NžÂf³‘’šÂ‰ô|óõ7DFF2nü8>\ó!¢(²ü¿–Ë.)ÍÍͼÿÞûøxûpïâ{=ŽÆ\UH’DÞ¡ ¯¼ÃøÓXµõ|5˜“wŒâΞð(¼ë€kªìš››1¿ûA£GÂko ÆîT¼åU”-¾—èžö‡â¢bŽ=Æ3Ï>ö­Û¸Px„„&N™È»«ßÅÇ×§…²ÛüÕfRRSصs=ü QB¡`ÊÔ)øûû·ð½ÓÖi™;w.ûöí#??Ÿ~ün{ðÓNgÀú÷×2}*TU¡Ðj™]‘Ák¯ŸåHr/&-½½Eú>þ’íg Pµœ°W…·¹+²Ålâ¿]þƒæáFÃ5w*¶æ\„õZ¤©LF# õ ²²ÓjµS^^Îþ½ûéÕ»y¹yxûx£­×âãëÚ>67'___DQ$+3‹ûî¿Í›7c³ÚX|Û‹=czRRRBuUµçt3®:NÍaü±cÐØ™Y¨€~6é[µRvéçÏòém_·âózÂë,‰ZÒêþóÏþé‘ûFÆ5Ý©Ød4Q0óvü3ŽÐÛñò à4à7r„=öÛôôtšššH€=&md%%%ÔkëÉËËÃ[ãÍÞ={å]Ž÷íÛG||<'M$ãTYކv9rssÑÖi ».;{pcB’$MME3^ qk @äY»¸öNÅ‹§³iÇ0Â33јLä‹"bl,–?B` Ë©888˜ù·Ígë·[™·}'ÖwßC›Çù ax?:“‰ æy|ÝðÄÆ^«ô ÆF,f ƒ‘š-J‹½;$ôB!º…1™Á`6´Ëÿô‰,$I¤7‘“SˆQgdâè‘lÞ¼“ÒŠJn5•ððV­^KŸ˜XššuœËÈe쨻ÉRä2wÚt ³JøjË-ìÚaOžØØŸ@lì¹»‰{îy‚FŽ€Ï7Ò—³|rôS¾=Ñ[e IDAT¹PÈmøœ.¦G0Þ7’r-û¿ËC©ÉÈ*@£V2sÒvìÏÆf“¸gþ"ÂüÙ¶7“¤>‘lÚv€[gáÓM餉Ãd²r&»´…,#‡÷bÊØ~lÚzš¬ó×®:€'6öê§7YMèV[qC)VÉŠ¿Ê‹ÅJ¨}¼{}/þJµ’ ró/Â;ï¯güøT¾û⛾z›Ï?ßÂ7;ö (Er Ñé ¨4*‚ý™í=Á‡ÂCe4ù6R-ÔãßùèÂû#mnjÆòÎ{H…×ÝœŠM&¾]õ¥÷-¦gLO‚¼ù.½‹eµÌ5”“g‹ee7(¹'’¢il6RS×D]½Žu_#>&”s†SSׄB!rÛ¬a|º)éì;·^®ì |üÅ1n1äG£ì<øþh05a“l4™š¨Ö×¢•ø(í‡çôMD)Ú›½¡Á€ÆûûÌc-â7>bÙ²»P*,[v7+^|—}ûŽ›[HTT8f³…;ï¼™ÆÆf¾øbÁš ¶lÙGéÅ n›7 µÂ‹‹ ¥Dø†£Vx¢,®&®¹S±%¯>û¬EšÀd2µÚXsÁœáœÉ*åäÙ‹-î§ '+¯œ!ý{²âí]øjXzïx=ωÿÏÞ{ǵyžûÿoM„„@€ØŒm†÷Â{Å;ŽÇŽ'']IwÓœ~OÏéø5ÇmOsÜÖ§iÓ¦Mâx&q¼âÇ{à‰'{ï½HhKüþPŒCÛ õ~½xéAºŸû¹.Ýãs]WZ)F;ÒWßÌ,'~x-:#n1Ñáj KëÛûÉίfîô´è }só.ú³Í‚Þ¢GgÑSÝ\ƒØ(ÆC¢@$â!U0Ö?±Ïmxíµµ¿ýí5´µµñê«k‘yʘ7oZ‡öJ¥‚§Ÿ^Êúõ`Ñ¢™üǼæÈz"w£^ß@qs)‘^á.‡×‹ô¯¨Øl¦hñSx¤^"áÈT| ð˜2¹=zâ6{ßàЉ4ÆÄ‡2at8ãJEØím…´:# gÇÓª7ñÅéLÍqèår ª±ÛÛˆ‹ bÚÄhªk…Hf%Åvpv‹fÇSTÖ@|l .Z³›ÝF…® ‹ÝŠX(F!‘£ÈIôÙëE¬û ™Ì­Cmׯ®½©å¾¨d^ä4 ró$DÔU.î“þK¥L|á1öŸOzî&…"¢ðpf½ö©žJ+iÐ8"ŠËˆW“0<ˆ¬üjö¹Im½•‘HÈðè†ñѾÔ> êkk#·°€ì|ÇãÈa„‡øà.s¬[dÔ0>1Œm»¯ôçŸá‘£¹¹‹ÅŠÝdëÖiÍ:ÜŲö)&€ÅfÁh4¡·¨58¾¤<$ DB±ÞÑH¿6ê¹ŸÍ gG,“ A­¾Þ5­í%ú}ƒ"&>Žg÷ìâÊî=ÔååªR1í¥uD‹îЮEk¤Eëxó6·Ø{äf§¾›ôÔ5èÚŸ«o¼s|ÛYÞ&;¿†ÙI±x«±°§.ätÙ¯‹ÞÁb±’vè¢>AZ^ENÐd<¿‘ÄŒÇg ýr!Ûb·R­«!¹â2“ƒÆã+ó¦RWÙns^B/äb÷~™Ž:#þrµkZÛK ˆÎ.8$˜•?ü~·¯»IÅŒÖ7SËšz-5õ޵Á /‚ü¹ŽKúÞÓ ÿ×ÇxÄDÃÑ„gf²ãâN,¿ÿ9‹¾ó4Z³Ž5i6—`Ô›8\|’U$A¸‰Ü0éÌ6k×Ú£¦¦f¼}¼ûÙšþ¡¡¡éæ]xÄÇûÿ@LÐë9÷mŒ_µ«»‘pϼe^ì9t„ß§ü¾Œ¸z3âMbÜc€®§¦—/]æåu ‰ïf8‘ˆÓÚšÖ:ÊZ*Q»y#¢g² ú_Tlµ‘qä(öM›åå“§ƒôÛ ˜³ú)܆෴ѠG"•vY]ì÷¿ûo®ÿÿúݦþÀh4c/n€ÿìð|`0˜0L„û´?_Ò¶B‚ã÷ycæ1Q9±-(ü¨Ó7PÒRN˜{0R\ÓÚžÒÿ¢âã'‰øÝïðš8>ÛO™|ru7‡Š‹Yõ‹ÿìÐ655•ýûö3g«Yýôjòóò¹yã&WS®â¡ôàùµÏ£Ñhøüðç,\´ÒÒRV?½š+—¯Hxx8Z­–-nA*•ò‹/à.wï·{¶Ûí4ÔÕtz¾¥E×Eë¡’3sâVF$ J€l@=k*juiŽ*/ÿ-…’BÜÝÿÊÊʈîÕíëC?¹/ž²kóñ×`×´¶' €¨ø¼Æí *žl6sø_ïSñÒK„„9DÅ%Å%ܼq“_üêdefñùáÏ7’Œ´ rss‰Í´éÓÐh4¶·ËÎÊæÔÉS4iš˜Þ(…ã‰Öé6»Sÿ÷ Wúj?}¿_¥¿êƪ¤Jêô ä·* êÖá¹bc@T\²dŠÔ‹ ûòâ|)*NJjˆˆˆàúõ뤥¥QR\‚··7O®z’”+)ùüÁÁÁ ‹†§Ò“3§Ï––FYi‘üâW¿àOþÄÌY3ÛS®äPQQÊK…ÉhêëÛî’üà5–-[LttT·m[ll¦‹ÅBHH ùù%DF† ‰°Ùl(•Gª­žCtt8 UúÝ-*ëëhmÕãá!'*ʱ+¡Õ¶R\\NLL8r¹»SÞ¯3Ö ó Ál³§)Ä[¢"Ø# S{Wl,ôÌ­öQñBŽMšÄÇ2»€D" Æ1廯¶§^ðRy±òÉ•ä0aâV?½€˜a1¬~f5þþäàîîβǗQ_À¤É“ÚÛ½¸îEêëêIKM#-5 ¡HH[[Ñ1Ñý>…ý*wstƒôŒ\Μ¹LJJ*Ÿ}vœ;±yó22r¹pá:çÏ_å?ÿs:]+ï>DÛ0-)ûr©¨¨æø••wÖ2õz%lÛ¶o niÐ"IHP@ˆ€rm%f›y Mr:ú}ƒ":nÏíÞIÊÞϨËÏ'\¥bê‹k‰ê ¨Tªö b·³ ûøøàããC\\\‡¶·Ûùùù9ýý¨­­åÆøûû3{NÇiRÐÔÔÄÁ‡1èõ]¾6˜9râ,ßüæ³¼ýöf""B))©@£i&..€ÖVœ`Ù²¹8p‚ÈÐ`n¤g¡.‰æÙ×'qæÌe¦O¿³Ü F£iF©t@zP=ü©Ó7PÜ\F¤W˜kï+tpv«Ÿ^E}mïfÿ éÔ§D,`Ú×òvõöuÁ1l1=©O¯q/êêêËeä^xñ9är9FýàÜ•Mš8–[·²3&žœœ¦LKhh ii9ÈdnÔÕ5âç烧§'O^àÕo¬%,:„ÿr”ºŒÎEŽ´Z&ŒâÔ©‹p7C?¹/^nJò4…øÈ¼ êbZû(Òîì ÎÇhpeéM‚ƒ‚ê>Ûd4ÒÖv NÄŒiIÍÎÆh4ñôÓKÉÉ)D¥ò⥗&sö¬#ÞøÕW×âïïˈÑT—×ÑܪåÕ7ž¥ôT«W/ ?¿½Þ€^o ¦¦žuëV äm ¤") ê‘Téj(×Vâ#öF2p1NA‡»×i›Êƒ”ɓǶÓ~¼bÅ‚íFŽŒ!28¤}Á¾5£_»c·½ºº–ÆÆfüü|;çâáò N_O©¶œp$ôlƒb(ÒîìÚÚÚ8~ü :«†j²`á|ò¡9r/¼"d4—ð‹W0cƤ6gHã'Wã!R[_H€Ý@ÿ6i@è0²;xðsžåå2¥{ŒZACsÝ!$4„fMàÊ>(Á=¹üçRÂgZ‘z<ÚÓ«þ@"ï3œz[#åÚ*üåj¤¢Gk”×á]& Y¸tñ@ÙÒ-º Ãb†Žd㫠Ħ‰³0VIÍ-aÓU÷nì¢W¸=­-i)#Â3ô‘Ú­íò+µ¶¦ÿ€ž¤jkjðöñAÛÒ‚¯o¯÷uZ[[ÉÍÍ%&&‘PDnžãØÓÓNG[[J¥­VK~~>±±±Øív ;…‡KÒàLøRõi­ËÙõ3~r5žROr5…ø¹û œÓÚ††F:„ÑÐ9J¥¹¹óþC—ÎnÇæ­üøgoewfz:ÁAxûø•žA`p0*oÙ™øðomàµý€ÆÆF Ú-1ÃbÈÉÊF"•0âkš¸AߪgÏî=x{{S_€D,A$q!ùßûÁ÷غy+mmm|÷ûßåØÑcH¥R.]¼„¿¿?nnn\¾t™W_{õ¡ípÑ{ÈÕRä~Rê³ZQǹ¾ˆú7±”DõH*uÕ”k+ñ—û ºimºvÔ¯}÷ÛˆD£3î¹X²o÷<=•œ:~‚Ð<½¼ÈLÏÀ?ÀŸ×®ÓØÐ€N§¥¾®Ž ç’ŠD„„†pëÆ 2ÒÒ™0i"uµu̘=ë¡n,++ µ¯š%Ë–´?§Óéø×»ÿB§Óa4hµZV=µŠÍnFé¡ä©ÕOñá¢T*ïÒ»ó0”bc{Ò>`¼Œ¼õx„t öwGÅÆ>lÝXTÔêë)h-"Ä-¨Ýá †ØØ@u Föè|è³+-.æÇ?{ƒôÔ4JKJùñÏÞ ¦ºšs§ÏŸ˜ÀG[·1vüxBÃÃ1›Íø0yjmÙF|b§LæÂÙäÔr¹œÖVÇNqUeJO%{wïå…u/|6™’’gNŸa„ ¼ôòK¬s=U•U¼üÊˬsýCÛÐ ¶ØØ‡m/ó”½ ¡P‚ÔCtÏö}mOoµïÏØØžp·ØØpÏPLVyš"ü¤¾(üEl¬Ý ÄÔ90©[º´ÌWíËÆ·6 ‹Y²üq6¾µÐ°PFfã[‹'>1_#>1¥RIfz:QÑÑ477³ë£O˜·ð1ª«ª‘H$½’7.>ŽššÖ¿¹ž 'PXXHnN.6» «ÕÊÆ¿lཽGZZï¿÷>S§M%õV*ï¿÷>Ó¦O»Ç\ ¡Ó½(;ßDÌ¢¾[ïuqwÜÄn$ú¤B[E…¶ o¡RñÐÚ¼èÒÙ½øÊ¿uø}DÜÈö㸄øöãøÄ»A3ÎñøØâEj_æÌܹsîÚæ›ßú& -lnÑ’Þ¹¾3RRRÁ‡[àéÁk/¾8¦8G2Êq³Ú™?.r` ì!“½H^_ìrvN@ˆ2ˆZ}=¥Ú "¼Â¡¨‹wÒÖÖ†Iï|áb³vpÆÞ ‰ôá„M&3[v~Áµ_grâïÇñÛ¥¦I@x 7°*4´bL+¥¹FÃóé%«ûßáîÔg·¢éÚ¨hüåj¸“ÛX@—?þ ¿6©Wèä¶m¶ž%÷ëOÚìv,Ë@›Ñë|uýáAhkkÃå(B¹½ÞÀ‰pÎ…À*ShµpV$böO[¬Üº•u×þÌ­&¤Š;kFQQaøúö,$b®7Y»j]ÎÎI ¥$øŽ Ú\GÅ—"dÉ Û­ý:œ@ @®ô([ºÅn¶ Ù*\z]ËŸ+•J°éu¼@óÙ&ÜßAX}=õ“§¶}+&¥'úËð:ÖÄÁšVÖ|ü4|™æµà×Xè½ðk=Šá˼¦U•Uäå³fÍò¶ï~ûIq÷•PŸ£G=BÞ/×tqoB¿œÖ·”é6¨^·r»ÝN]m_ Óª®ªBí燦±?‡ÆÅb±ÐPWX"Aí§îC[[[ÉÌÈDá¡ <<›Í†—ׂ+„„82ggg£mÑ22n$---íÏßnÓÔÔ„D"iÏbÙ¶pLmo^»Nueÿ°ªÊJJŠŠ©«­Åb±PUQɉ£Çøð_ïQ]YÐþØ[dgeóÅç_r%…­›·rùÒåö×232ùà½H½•JZjç“ÏÓÐÐÀÉã'ùÑ÷DVfׯ]ç?þÝQ‹vˇ[ضe[¯Ú7”Ræ^F‘½*á[ƾŸr4JÞZÃî‚o!ý£…_ýê"¿ü¥TYŽŸâŤ\Iéö'55µßï'$É‹º fó-¥<êÈÄn$úÅa¶™©ÐVa±9–•rê%èÍ‚{œítéììv;e¥¥¨ýÔÔT×°÷ÓÝh4N?Áh ¹©™ ç’ùl÷^ ó 8}â$W.^Âh0pìȪ*+ÙõÉÎ^7Vé©D!W`¶tL9]R\BpHpû£V«E 0ï±y„†…rúÔiÎ'Ÿ' 0€¦¦&­­­íº½ÁÊsÏ=Žñ½°‚Û'n¬[·’s(YöÇkŒxKĤ| Ó¦åsá‚;ááì{îŸì rüL·ÅÒP›Õ᧺øVû±\ªcöìÉ÷6¢—QÇ+¨ÏÜÿ—¡L¨2‰PBIK9³%<µ#‚ÆÁ1µír[^VFIQ1V«•=ŸìÄd2±ú¹g¨ª¬¤¦ºš°ð0”žJ$)GΚu/ÒP_Ÿ¿?Kžxœ-ï}@Âè»ËRVGhX(aa479bß´Z-ÇÇÛÇ›ô´tÆOÏ+ßx…ì¬l¶nÞŠZ­Æh2"ŠP©T?vœÒÒRL&—/^fÞcózÝÎþbøð(fª'SöÛ*Ü•2bc#ø£¸åD?ª¬%ÀÏÌ/~å‹N烛›”Å‹ïÅr¿"Û¾ h¼’¬ÝuOꢮ¬ §À_¡¦AïÍÖ[Øìöf)øyR+uuM´ @&sÃÇÇù"–ºtvÎ&ó§wÞàã­Û?i"ßÚ@xDÞ>>¤Þ¼…Ÿ¿³æÎåÜ鳈Åbƒ‚ÈÉÊÂ××בõxI÷ëA‚B¡`îü¹$MM"==¶Ä•ËW5jkÖ®a⤉ܸ~ƒììlÒÓÒÑjµLŸ1â¢bËå¤\IAÛ¢åÿø¿lzS¯Ú8¼öíµ¼ÆÚößcb‚xûm6ƒµÚ µzð“–ûI‘y‹iÈmEØ3u½‹þ'ÎOÄ'Ïj8YXɤãÚöd¼6ïÄMÓÌ¥ˆx½4YOÎE"qž ¬¢¨­¾¶šŸüäç…B>عã¡:Ôétœ:vœåO®¼wãžö9ÄS<5ÔÕÐÖÖÆ¿ÿû/Ù¾é·Ý†‹õ¤ŽêPh¯¯3“wPCÂó¾Naσ´¿Ûãö_ÆÆö4Üêvl¬HÚ³/„Û±±"IÏÚߎŠï-:÷îVfOÇÍS ;wÑ lQ(þÖ/™þtÇ”qõõ J°Ûq®Á½×ûÆO@Ð&@$uˆ5Û¤˜ìîw=W P_[ÍÆÿè,*6>¤¨X,±`Ñ¢‡îç«XÌf´-Ú{7dtåÔµØØ®¸/k·€Ìoàíyöƒ)6¶+zYOôžã¸ ›6 Æ¶¶’òáN&®^€—×ÕùCW1Y•÷ȎÇ7&/¹GïÇÆ¶9£¨¸­Í)Å΋ÝÞ³Œ"!I^T¦hñ\á|ºOwÐëMØ«íŽî6•€¾ÕˆÅÒ9 ÊŒ™36lXú/**ê 3.DÅîN(*¶™-¨¼‡f‚ÇVÝÝ‹•—;$l6;|®•'γiÓ§ÔÔÔ³oßQ>üp7‹•wßýˆO?=ŒFÓÌÞ½_ Óµb6[(**g÷î#]~û:ÊP1¹÷1OqÑïÈå2ƾºˆƒ£ùX"á#àswwDÓ¦0ýÅÇ‘~-þ{Μ)¨”F45Ù47æ¢kοëÏcóñòêÝ.'ä;·Ôž©Øf³qãÚ5BðÛ퇄PYQ@7¯_'<"¢Cû¾¢²²’´´4LF&“‰‰“zÇÛ¶lÙ À¬Y“¹z5ÒÒ Ìf UUuúqåJ**•'W¯¦âéyçÍ‘‘‘‹Ýn#==­V‡R©àúõ FÉÌ™“0M„„8g1£àIžk!p¼óÉ\ÜatR"^Ÿü”½Ç1´èÄ„e3 èâäOPÿýç³³˜ÚÎ{nýìúè*+*¨¯«'aT"³çÏcÏ';ñU«©©®F£ÑàããóІ܋àà`¦OŸÎûï½OÒÔ¤>¿ž3±ví ¶oÿŒ5Ï-§¬¬Š²²*ÌfG–WµÚwww¬Vb±ˆ fræÌ%¬V+—®ÜdÇÎý<óÌ2ššZøì³ãL˜0 ­VÇ•+·7.a oí®Èý¤¸y‰hÌ×ã3ÌBÖŸdfæÑ¢mÅG­¢­ÍNKK+‰‰Ãñôô --‡ÈÈP¬V+‰6‹‰¨™£1Y,øúª0›šoÞÌD¯7¢V{ÓÚªÇ`01n\<¢/'•µµ äç—0aB"nn}›?ïžûÊåeeLœ2™qdzrõ*vnßATL4ååLœ2™±ãÇõ©·Ñiu¸»»³xÉb úåšÎÀóÏ?Att8k×® **Œ¶¶6V­Z̰aDG‡óâ‹Ob0xöÙe<ÿü k×®üòØÈ /¬ä±Ç¦óÄóY¶l.ƒ¹ÜåËç£V{³pá̾Żâ.£¹¤ç©Ó]ô&³™÷Þû“ÉÌ|ŠÁ``ëÖ½h4Íüïÿþ“‹¯qéÒ rr ؼy7›69Ú™Lf6ov,£¼ÿþN f³¹ýøö2 8fŽ_®¯èÒÙ°ñ­ üõOY¹ú)®]IA$!W( åñ•+XñÔ“\»’‚X,!øË@û¾ÄÞfgûöíœO>ÏĉÎ6::¼ÃcLLóæMm]$1þtæÌI"66’ùó§ÌðáQÌĬYŽ/©TJtt8óçOgæLGQj™ÌÍi§°· ›®¢6U‡YçœëŠC•qcˆŠ eüøš›µìÜyˆQ£F°gÏfΜĮ]Gˆ‹Æ•+·¸té“§Œ¥±±™‹op'Q@Cƒ†‹oèO}½†;u˜Qù“™™Ÿ_ßÏ»œÆ®Y÷b‡ß¿º÷ÌÚ5 9’á#GÒ_xzzòý|¿ß®çÂyžìIå•"çõýÂEg¢¢Â˜:ub±ˆôô<–/ŸGccõõx{{±mÛ>ÞüÕùâèæÎŠFÓL}½†óç¯áá¡`îÜ©44hHLÎèÑ#‹ï¸ÚÚzÆO$##·Ï¨¸Õùv¿,f3-Íž÷ÍY‘öñÅP!lºŠäõÅ.g×Ϭ]»¢ý1**Œ¢¢2~øÃ—ˆŠ c̘8$1‘‘¡ÄÇÇ¢Tz°fÍr &3‹•çŸ_ŽNgà¹ç–c2™±Z­ú¹~#³Í °Zm¬[·ªÏï§³¨¸­g¥Üú“¶¶6§´ëaŠ÷ÔW¨¢dh xGß=<ÈEïÖå#€¯ïVµÚ‹Á¤IczîFyqf›…ââz&0~X:‹Š=œ/¡¥ÍdÆK5x‚Ùï‡VmGQñ£V7¶§íƒ“ää¨eÌ¿u¿ÆèLö–º±ÝÑ×ucÇJ@   {ô7êªn¬Õ&zž^ª[7\VRBuU5“’¦tx¾¼¬ŒÐ°°nÎê;´Z-³_ZZZ°Z­]J^šššP©Th4„Ba‡ŒÆÎŽ+6¶ëö2OØšŠ$H]k³œÉþG%6¶½ý ¨ÛånlIQ1—/^Âd2ñÙ®=Øl6._¸HyißÚ@UeÅ…E\»’Òó+=$¹9¹|ÿ»Ž Šÿúùq5å*iiiܺy €ÔÔTRo¥rëæ-Ξ9Kjj*†’âÎ=GzZ:7nÜ ==½ßìvÑ{}¹QáÂŃХÞûé.~ü³7(-.¡¶¦†ógÏqíJ Õ•U´µµ¡Ójyïïÿ@íçG}]‹–-ícýüÙ²y 2™Œòòr._ºLKK ·nÝÂn·ãííMsS3©©©466ÒÜÜLKs ¾¾¾Èd2®_¿NzZ:‹…A^õþ IDATW¿û*#FŒè»]Ü›&£€}™¼<Þ‘Ýæ\±Œœ*wÇ›9œ+gbˆ‰ñ3T\þS)Á“=»ݹpÑ]Žì‚CB¨(/Çf³qåÂ%ª**™”4…ÊÊJÂÂÃñðÇMæFÒ´©ö›±”—á(¤‚P(lnöœÙx©¼xbÅŽ6_îàŽ?ŽÐ°PJŠKˆìY³Pz¸BœŠ6eÍw¾{¯Uº$3òiº’iá&Î;6&TÑî49_mcÎO—Înõšg9æ,û÷ìå‡o¼Î¤¤)\O¹Êä¤)øùû“›C\B7oÜ$0(¨_ õPz0mÚ4"##™÷ØwÞÜNçŒë"”múŒé}d¡‹‡¡¤IDy³˜*­Ëe2&›È©’±:QËç¹rfE:Fsr?)R…ˆ¦"ª(— ÅEÏé$*6蜯²“Ùdn/°3”psëÙÎÛ£@„ÊÆ†% ¬Nt¼'ù8v?¿=©c–j¯G¼¬ËÙ¹¸:ìz’¾¿àœv¹Âg96*‚&¹6*\ôœN¢b™ÂùRéX&<½†fi=ÝÐ+­Ñ/MTR•ÒBÄœÎ9Ó\¸èŠnuvçÏž£¼¬ŒÒ’’þ¶©[ZZZhhpLunݼÅõkר"Eø,o×F…‹û¢Kg·û“H$v¼“вrlVçÏž£¢¼«ÕÊù³ç¨¬¨Àb±pþì9ª*+1›Íœ?{Žêʪ>1´¥¥…?üþ¤\I¡¼¼œ’â²³³¹–r­O®çÂùñ w£©Ä%CqÑ3ºí°˜Í pùÂE ó ¨­©áÀÞ}Œ7Ž˜Øa¤\¼Lss õ Þ€y ‘IC}=O¬z²× Ìž3»ÝNhh(¡¡¡:x¨C¬ÜPÀÛóöÞ±>-‡ I$ý4tÀíù*®ØØ{´7Û°ZÙ¶{BŸÆÆJÝÜxæùçødÛª«ª˜5wåå±fÝ ”—ðÉöÌ™?ÊŠJ"£¢Édh5=¾øý T*ñññ¡¾ÞQ•èÜÙs( ÆOß'×(\±±=kýÝ n}XEÍ r_)2O™SÙ;Nɤ¤)ÎSÏ>Ãù³ç‰D<±êI6¾µ´[·XõÌjΟ=‡D"Án·“ré2âÿ (=•øúúR^^ζ-ÛH>—LaAaŸ]Ï…ó2þ;!Lü~(yÏF.\t醟zö™NÇ_ÍVÜ“ã¾à«±¬ï¾÷nŸ^Ë…ó3jm  óÓZÌ­C¯ˆº‹ÞeˆŠM4išÚŒ^ÇMæ?,‰kQÇ+qThvᢇ¨X @$zâQgü[FÇ))/¯£µÙ€¿'~~ª6É…2hDÅJÏ¡¸¯s¥g{(t:iÿÜMà¶Ý(´:’#gâþâæ¯Y„DÒ³Årݾl6•å„E8JøY­Vª+« ïÿ,Å·¹qýf‹™)Sú7 ç%ý/;˜˜ž‡dÄØ»Ÿ²|pmîØ™½ny‡¶ååÕdeå·ÿnÖ›‘Êï¾›9wnR‡jX./Ýëì,~¶ŸEK—PYQÁØñã8¸ï3FÃôY3ÉÏÍ£¶¦†i3gô‹¡•••T”W`0hkk#))©_®ëÂy).®&äã}H&N€ Æëõ¤|ð)㟜Ryg¦rôè9¾ÛøK¸K„ÙSê§øAðøäãO˜:u.g7¸ë¾½ÉhäðþˆEb>Û½—Ë."ØõÑ'Ø»êª*n^¿Ñ/†3~Âx²³³Qûªï}‚‹!Á`ÆØH»£»M`0˜°u%¸$tÿ4.ˆ¤©I$MM"""¢ooÀE¿Ò¥³ûxëvÀ±;+‘H5v µ55„„…’8z õL1ÚÀÏϯ_ mnnF"‘°xÉb úåš.œ“–3MM&$§gL!0ZàP D¯^ЇG) n—»ÿ)9[ÂÑ/Žrô‹£äääôÏ ¹èºŸÏ˜=‹wßþϽ¸–ógÏñþ»ï²ê™§9rè›ßû€ÕkžåÜé³ÔVW÷[¡g‘HÄî]»1›Í¬{y]¿\Ó…s`6ÛÐë­X,vL&D"QQ>˜~ºŠ#e\NuÔiR*!r,I+v¸?þø<ŠbïôÛíšC–ÿòºE¸»÷<ÂÂ…s#(«(j«¯­æ'?ù9B¡vîh›:¡kÐ0,&j Íèêk«i¨«¡­­ÿ÷_²}Óo» ³š¬=ßìíµZ3&³ $„´!´! qwï|~M†K‡“±›Œø…âe‹ÆÛ׃Ðiw/¡Ù—öߎíqû/cc{nu;6V$í™$ëvl¬HÒ³ö·cc…âžE¨ÜŽýj8×]Û›míuc{‚ÕlE$uˆ5Û¤˜ìwOà*¨¯­fãÆt뵺]¼?1M}s;ÈdG jl¬VkÆjmÃ`°`·ƒ‡‡”¦(ÈñÆßßFHˆ‘{2Ï6ª«…TW‹;ÖLU•¬oÔ‰þ`•4£¦&!W¶k«Íäµú3y²÷¯|&N’áïo#&LëŠí†¡ÛÉ2gï „B$’žg7,ôô[m(b±ØÐé¬_qnb$!žžrD_¾¡O ·©¬rò¤Œ… Œmá‹/ܹySJLŒ…íÛŒÓBP˜ýÈ_º7‘“#áV©ŠÓ¹l¾áDbgÚ4sûµ½½m;æŽj…Ž¡™ÖEt»É/¯¿Å`ÄCé1Ðfô ÚGDTl±ØiÑZЙÛ0mˆD”JIçÖÍÍBD¢6nKݪ«Ž/<ÜÆ©S2ÆŒ±pü¸‚•+-Ìžm$%EŠJe'0ÐFrK qîU¼ûn ãÆ5´îìvÐj¸J€ÍˆÒŠ6|}íˆ3ññäò6‚ƒmä盉ucìØVªË¬DÆ:úåÇÚsp°_i%ÝHO÷À×ׯÓO·âíݳD™.†]¾óæ<6]}˜qcIš>Ÿ¿þ!¡!  WÈùl÷^~ü³7øl÷^ z=cÆ£ ¿€ø„r²²0Œ½îìôz=þþþ¨ýÔ466öjß. åjGê®s¤ñÏ}˜Ã3KžÀh4s­®•ßû„²-§ ‘HH` O»~Íjµ£Ñ±ÙSÓ¯;·‡E¥jC¦p8$oo;'š;¼lÃn7êµX¹ý–¾“%i7þ£¿Ç=‘¸ 5ÊŒT ÆGd Á…ƒ.ß‘&£‰üô'xxzòéG£R©˜·h§L& 0p¤m/+)E$3zìXlV+aáLJš‚ÕÚ³ÔÌ.œ‡/¾8OÉ“å\[u¿ÙƱ¬ –‹Ù£‡’€@Þª1óŒÝ‡ììJ ”—ëhl6#‘ˆËÅ„†zàí-ÃÃCÒ+Ž®'45ñôìÙnäü7ü‘å•2&Á@7›Ý.†8]ŽìÜd2þ²áO…Bž}áyΟ9Çù3çX±zgOæ¥o¾Â»}‡„Q‰466rñüyF%"‹9ö‰cF÷º¡#ãFrõêUòóó]¢â>`é’™<þÛo^LZEˆT„Íje×äÉpõÛçÍçñ“g°JÛø¿ÿ{©›;v[BѽÓTô-üö·?éu›Íf;žž=Û¥—«¥x†ºQ}SGhÒÝõw.†&]:»ÐY‡W=ûtûñ¯Ö¿ À÷_ÿ1ŸíÞʧVµ¿ÞWÙŠ ßyõ;}Ò÷£Ž^oäRjk¯áoÚ¿ñþ‡çùçÚŸ Qyö¯òV”Š5{Ì$ožDiY-£Ç4òÞ¦zÜÿúßü²×m6›m´µLÖs©Tô_òÕSu½… ñ.ÍÉ£FgQqËýUm^°`Á}Ÿs¿˜Œ&4 COTì,™Šëëi›øÛ„¿ôõåü4ý:›"GP6woîù.<ÁTi:+¿g"/ßg MF«µ TÞÿ|tØ25ÿ·¿xEXå™é,*vBñ®H$ì·Üþ¤§êñ¾ÆÝÝ¢ôL(®Â$Y,1J7j üú ‘‚‚Ù\E¾$œY³*Ðj½Xÿ›ÿÄf±#’Ü{}N,êý]O£ÑŠ·÷ƒ}YŒù· ÒwÔ0ìq¸x EÅNølÑPx Ío⯉¢n¬ÒMÁ¼ð-vüq/O>¶µÕÂÿh/Ó:YÇÎ*ùã;×(«”ÑfQñÍuO·÷ßÓp"c‹±×ì×¶Zq¶aÖ™zÔþë¥àî+¤úf ¡I=ßLqÕ½KûÁZ7Öf³qâè1DB!ó-lÞb±PY^ADTd·Fêkë £ /Ÿ˜Øa=6æ^\¾|³ÉÌÌY3hllä|òy’¦&! ¹pþS§ME­¼ùî*66rx(gV~„›‡ááÁøø¨˜”•5ãé}“ù ‘É:Ú5P±´-F=ž^Rܾæhï§ÿ+9ÿ‡B&úâîÓ³Œ+6ö.íAll—nõ£-[ Á/ÀŸ«—¯“•͉£ÇÈHMãÝ·ÿFAž#µuA^>yùdedPVR @sSgOŸàÀÞ}ím z=G¡²¢¢çÖ}…ÌŒLr³s©¯¯o¢ØòáÂÂÂØ¶e%,,Œ­›·>Pÿ:R©”1£ã;6Ÿ;k¼x饘NŽn 1›í݃÷´9{ë°šz6:r1¸éÒÙÍ_´ãGŽR[]KÂèQ¼óázÊUŽq¥§'öîÎlçö”³o×îöóO|q”om =5í›·PVRÊÙSg(,( õÆ­2Ô`0 V« E«uLþt:cÇ¥µµµÃ±‹¡KS“©Çr“{!WK¾BÍ­*{¥?ÎM—ήU×Ê~úÔþj>Ýñ1jµšEK—0qÊdüü0›Í”#‹‰OLÄf»³0ÑB~ü³7H= OOOæ<6ðÈp&Nž„Åèâ!hmµàáÑ{£L¹ZŠg˜Œê}«(p1ðtéìüeß8{ò4K_Fâ˜Ñœ9yŠa±±TUVñÔsÏðÏ¿ý±ãÇ# I¹t¹]HìææFh˜£YLì°ö5;‰DJò™³xy=˜ 3.>޲ò2._ºÌÔiS9{æ,‹—,fý›ëylÁc,Z¼ˆõo®gÁÂÔ¿ çÇl¶!  {·ÞnìãjJÏ5alv}e:Sñ½ûXþäÊ>2ÏÁ£”©x÷î?öú…FÓÌñãÉh4-¬ZµˆC‡NQVVELLkÖ,§ªª–_ÿz#¡ÁÌ[0ÆÆf–-›KII¯¿¾žÝ»ÿNròUNŸ¾„ŸŸ……¥,Z4 µ§7øó»lß¾‘×__ÏÊ• ™5kò=í¹_ûoS[«ÇÓSŠLÖõzÝÃô¯¯7“³¯žÑëI»Þ!tmPÜ¥ýlPè BZõw¿Ÿ»f*nm¾¿áü¼yóïûœûÅd4ÒX?ô‚ÿeý$ó±Ùläå•`³Ùøä“ƒ¸¹IùéO¿ÉßþæØÌ±X¬LŸ>‘)ãFóégŸí¨¼ÿq¾óçù⋳TTÔ˜8‚I“Fó÷¿oãÚµt$b1!!de0vl}"ÿýßo£Óµò£ýuu(•L0–fƒŽ;ö“]À믃™3'±k×a>Eff>3fL¤¾¾‘ FÁ¹Ë)¬^½”‚‚šûh”o2Ùzœáäa¾\Íå?—âãŽTé*Ž=”èò¿™“•Ma~>ÃãF3¬wDÁúV=šÆFBÂBÉËÉ%vÄðûîCÓ¨Ád6ÈùäóX­VfÏ™Mò¹dìv;³fÏ ®¶ŽäädfΚ‰ÝfçüùóÌš= __ß^¹—ÁÈêÕK;<þéO¿hÍÏχ¹s“0¶ P³aÃvyîªUžFà¥l &¦oŠJß úïç3êÅ@2>®aôËA= ‡s18èò?yè³ýDÅÄppïgäåä’—“‹Õbáðþƒb1›9¼ÿ ÅEE˜L&ï?HIQ1F£‘ÃûRZR‚Á`àðþƒ”•:ÄÆ õõ\úR |è³ýíýê´Zï?HUÅݵN†ßÿî÷ܼq“òòrŒF#|ºóS, uuu¤\qŒ2¶nÙJìðX¶nÞÚ~¼eó–Þü»¹èGt: ý·¼"WKñ¤7ßséï†]U¶µQ˜Ÿ@ `߮݌;– çΑ4}:öîÃÓË‹©3¦“•žÉÑCŸÓÚÚÊ©cÇXüøã”! ‰³)-.F$îXðþâð甕–’•‘‰¦QÃÂ¥‹ÉËÉ¡¢¼±DLPHp·†Êd2–,]‚Éd"44Ú`Ó›XûÂZÄ1É›’?a<àÈjœ˜˜È¾=ñóWˆuööÚ7Œ-wëìM{ñ³"JÎÕ0Æã¾ûwÅÆÞ£½³ÄÆ"KÒôily‹–-aã[7’ϤI£aDÜH„Bii,r%E‡ãçïG~^#ããñ÷÷o¯S°héžzî6¾µ€é³f’žšF@` ÕUUw5ÔÝÝ¥R‰Éd¢¡¡±DÌc #åJ sçÍeî¼¹”—5¸%*jÝØîÚ›Úx«Ý‘{Þ{ƒª·í‰&ˆK,!x‚7¹È%=¹[ûÁ;"n$#âFâãëÛ¾¶öìÚ5l|k £Fñôóϱñ­ ”—òì ÏóùƒHÝÜP(<8yì8>¾¾ÈrN?Ï—ëdîrwBÂ[ú±#†·÷ëæ&åÜé3øøÞ;Gš··7¸»»³ÿ³ýܸ~ƒ¹óç²wÏ^ÒRÓ˜4ygÏœm/Yº„ °þÍõ,{|YÏÿ*.œ³Ù†´‡Uïû‚Ñ/‘¶­»ÕUœg°óТâþÀ%*vàŒ#¯¾n_ßb%4´g5ƒûÊ}½™¬OkIX«R#»cÇ.pøÌG…ógŸ µÕÈßÒ«˜ê!aê°@§Ùõ‚¨ØùJ.™ FêÚŒ^§¿DŃ•æfÊûp^}…\-EìF}¦žÐ¤·§7HKËæ’!Ãÿ}ŒWƒï>5)rFIì|;†ÆÔ›$kŒ ³èyznï×”º;Ÿx×b0á®ph3z±XŒá>Ö5,ñ{€Ôë}Áð~œýMÁ“¼{TdÈÙqw—Ñhh ÄR‚I…··’뼎^îÎ&• hãϹ7©©©çܹ”»ög5[í#µ fàåå\Âì.DÅÎçìÌ1r¹| ÍpјÍ6„z=èÿaH\çÏÍU2ö[ÁƒÞáùø¨¤Ù È@YâÎI› q‹–f‹™Yÿ÷W²âFCdçß·PzŽßXÎÔ Sy'ö{ö}âØ ÊʪœÛÙÝ&+#“üÜ\D"KŸX~ÏNLFU••DFG‘“• @xd¥Å%¸»»ùðbÓÆÆFN?ÀŒ™3 ºç9$$$P]]MC}ATWWðÐ6¹è;Z[-tßç6Š ó²"ùr9épŽœ…±z*S.±’®#`Œs}ï—Í[Ðð -:5ÿSÃÇ¥uç‚ú¦ËÔ^+¦ôïó¸TÊøñWa2(¢ÄÅÅݳœ~¸ƒû§KgwäÀA–¯z³ÙÌ'Û¶“8f %ÅÅ,]þ8é©i”•–²ä+»›Z­–s§ÏÅÞOwQRTÌ÷_ÿeå4i4½âìŠ ‹hÒ41söL¶oÝÎ˯¼ÌÉ'™={6B‘S'O1gΜö|{{wï%!!´Ô4Þï}.ZHLL çΞs9;'G¯·â­˜p­ßŸñæOKë‘ˆÚØ™¦ !À̶›hôÄñ>Ääƒ@@Àèžmœ8#¥¥dj3i¶B!ü*HÏɪrŠL3ø½ñ8¬Æ¯´•ßü½ ‰$„­{¡ºµš;ïÙ÷Õ+WýX?ÜÅýÑå»Én·óÙî=”óó_ÿ’ßþú7DDE¢ih ¶¦–áq#¸qíã&LèÜ¡XŒŸ¿b±˜Œ´tBBCzÍØäsÉœušgž}†O?ù”E‹!‰ùâÔ,Yº„ââbˆˆŒhÏdÀ¢Å‹HOOoŸ¾æææ¢ôP’——G@@*•Šœœœöd.³Ù†ÝÞ†L&Æ8@Îîµ)Í(Ýì óµâ)³S¢ám¥ÆÛŒ›R†Xb_ AnÔ¦·Úéì¿ÿÛ~÷õuÑÝ´©±À©TÒcÝ`À%*`¾.*Þ¾é·ÝŠŠï§Në`mߢ³  P¸‹Âž{µ/8¬A&ÁTG‡w;6¶§ýߎíéÈèvl¬¨‡Ñ%·ccE’žµ¿+÷l—èvlìWE¿wmo¶! î+6V$uE›mRLö»KÒî**ÖÝe*8P êkëÚŒ^Ç]Þùõ¨ÇÆ6h­¨ý…§°ç^íž "y}1áÓ;.‘ †Š»1cc;Yææî|â]›ÉŒB9ô’wºDÅé«‚:}Í„×B¸úN9¿ë|‹ò.îÐIT,qsÅúW‰Å¸;¡vÑ»47›û%qoãÞ¾~§Ã/^AÖ§µÄ=ãïû¦™ÖV=õµøcņLæ†Éd&88€úúF,+õõÕØlv23ó…@ '¿ˆyó¦rüx2cÆÄcµZÉÉ)dΜ¤¾µû¦Ë1§Ífcÿž}ˆDBžXõdÛÔ- ˜Œ&‚¿Ì{WWWÇñ£Ç™;.B¡ÇN0ï±y °¥.“ɆŸßàüR±RMòúbRÞ.'c{Ó8»²²*nÜÈ ¸¨œÑ£ãºIÈÉ) >>–ààòóK(,,£  „øøa–ާ§SؑQüõ¯[fË–=ØívÂÃIMÍbôè{ Œ‰.Ýæ÷>`ނǰڬ\½|7™ŒâÂB/[J~^R©”ÐðpÊËÊжh©,/gÞ‚ sw§©QCMu5‹{)µRCC¿ûíïX°`A»³ÛòáV<¹‚m[¶!Xñä ¶nÞÊ?{£W®é¢ÿhi1õk6âÞ&cG ×Þ©À¨±";×4¼´´¡HHzFãÇ'2kÖdêë5œ>} ¦™‚‚23ó8|ø4»£Ñ„™™yŒŸ@jª#:J¥òÄd2Øý<(]n…<ñÔ“ìÛµ›ŒÔtFâÿ÷6Ù™l~~û?xûøpü‹£¤Ý¼EfZïÿã]RoÜbë¦yû‘Édœ>q’¶¶62RÓzÅP…BÁO<Ñá9ƒÁÀ°aÃ0Ž] >´ZË œÂÞ&xŠ'ы¿¹­{õÛÏc5Y™3g I&n( IDATii9¤¥å0bD4³gOà{ß{€åËç3vl±r/»ÝNffúÍ{°#@?u– Çϯ÷#‹î…V³oǵ¿î¨||¼:<´KO”*Ç`%$äÎ:¸¼ ÉÔ` Ëw˜¯ZÍ¿²îõøÊ;ÓGÿ@ÇM+ fÎ ÀЧîÔØ» »òé§zÝØèè;!+·#F¹“XpÌØ1½~M}Ok«…  ¡#-²ÛÛ¸þÞ>†í=Šª¶–¶ŒL®|€?Ås[þw@ž ºkœPT¬7PWS7Ðfô:]‰Š5ZZL(’A=…ý:µÕx½»Õòeð÷wc ®Ÿ:Ë¥w¶±ü×ßëÐþ­·þ…É"†6ôàÏPZZÄßÿöë¾1~ÓYTì„mf3J'K؈D"ŒÝ@›1 ˜Íöÿ¿½ó‹òJö=)ô¢©"JSlÁŠØ5j½DcÊn61›d››ýÜ–%»¿MâªYKŠK%ÅU•(*RD±!H/‚Ôa˜öý1‚šÌ Å÷¾./ßò¼gž—òpÎy¶¶× k‰ô+9Œ¼prs¡Â4yŽÀÕófòõõZþü·7­?æ¿µŽ¢æAÅM¤*µ'©…¢kÔþÿ9¦¾±õõz4µzìlDÔiÍ“þ;ºþMáääÀwÝáÑâÛ¥Ì €kb1=Â‚ÌÆÐÕ[×˵£Áˆ¦Z#ôm¾±z½ž¯v~‰D"aÆœYVöS.žO%´o85Õ5defbkgKmu ¡}Û5Vii)ß}ócÇåòÅËhuZ&?z»~]ÊÙ"úGpðÀAŠŠŠððô ,<Œ‹.2~ÂøÆû™‡)7VS¡ÁÞI†¢‰“Ž®S„FøszVï­?à HD>> _ü„ÙÁ¡üã¯Ë1è V劊Ð#·“ ¹±-ÍØòÁF&N}½NOÂéxd66\KÏ`Ú‘v% 0ûúû‘“}ÊÊ òrr?y×Ò3P*•ôìÈÁïÚ7œò²2V¿õ6>~~L˜<‰Óq'›mììí퉊Žbí»k ¤üf9*¥Š?ž`DÔöïÛÏÞ={Ù¸y#ýú÷ãèG©¯¯ç“íŸÐ³gOÞ]ý.ýúw.I]…êê®å˜h@,3ÿ/q0´7ßl4Uò>˜A §¢uª1“Ÿ7oÚ}hÝŒ9³Ù¶i3¾~~<úØ4~óÒ2z²åÃbNˆã_«Þá«_2ð‘ÁqàëoèáãMA^>g“’yëÝUfczûøàããÃ鸓÷¥¨\.§²¢’¨QQ¸»»:ž²eDG›<ÂQ£¢H9›€‡‡999¼üÊËxyy‘””DEEåeå”””Э[·ûÒA õè ±u÷B©R0iöÆÌ€B!C.·A­­ãbé<í×Þ¯Õ¥1›Ù)m;Þ¡A«Ãѹëmæ> AÅ55jÒÓóQ(ä,‘»ódRQRuu*½Ú[½1mÚX¦M ˜ª…ÜùÿãGS¥A,1}úD¦ßZüL˜€ƒƒ=11k˜8q$Ï¿<ƒØº˜9ûÃ,¨XjÓñ–‰¹Ü:—¼@Ç¢¼¼šgmòjµš¼œ\zõjrÌ–PRRB]]>>>¼eýiZ‚‚2ãFÚ¨†µ9il:}Šs.+Xú×ñ¬XÏ+¯ôj”×hêÉSæ[ì:”!àË/¾D×…‚kMN ²*®ST[B—^?ÿ€ÕXNÓéXýÖ;hµZ¤R)+ÿõ¬Z¿–-n"¼__’‰ûñ8W.]"¼_?²23ɹ~D¦Ü½wW®Â?ÀÔëõ¿+WáÚÍ=_îbæÜ9÷¥¨ƒ£3gͤºº­VËþ}û  &zt4‡`ÑâE÷5vG¢+åÆ:(äü#?½±×Ø8vIN¢ºpž; yýÿâ3Òçî\ÙÚæ—úÖTkÇhï÷½“†¾±VËßêk4ñ»SkPs!ï2öþåúÆ ¹±-Ì•H¥¼ú‡ß¡V«yïݵ 9;;;FFâFi)R©™ ÿ€’yñ•—ùú«½äääP[Sçs1õÉ ‰ÇIg(/+G©º?¤ …‚êjÓ†þü…ó±··çÐÁCŒ9²³² èÜÍ´»Znl˜§¯×;ôR…'à'+¢ä†UUŽôìsw&K@/Ï|<²Lçºz=ÒŸ4VˆÄH—¦²ü#†.jÔ¡#¼o-í«@\+çzU½]Íä…¾±­”ÞÏ´·&‘Hè‡ÜFŽD*¥´¤„ké Iÿé?h )IÉDË…óçñïٓ϶ÌÃY°ä)>Ûþ ÃFޤÿÀ„„…r)õ!áaÖkxnÝÜP(ôîÝ›O¶‚V«åÕ×^eçÎô?½ø¾Æh;”J^¯ºŒçbÏ“2ëÉ FŒÈA¥2Ÿ‘„…±þ_ÿh÷ßHØßß¿ñxé³KŸ}îÙûS mqv¶gæÄ¾èõzÖ¬ºJH˜;>>¯YK{a+SámçIZY†Åž€õ˜—•·—.MRWSKQAQ{«Ñêt¥ âåËÿ½½-AAþóꫦ —§žú ¿øÅ<‚‚H8sø#½zù±wïavìXìY/±|ù/©­U³iÓN¶m[ÙÎoÒñ°µQÑC0x-Æ<¨Ø¾ãU6êô8»:··­ŽX,FSg^ò§3booËŠËeÏ3sædââ’ðôìŽT"!´_oìíméÕË—U«6Ü­VË©SÉ̘1‘¤¤Tl^ù¯‡Áàµó bYÇëò$–HšÜ´è³–©SÇðÍ7Gضm7öääPXXÂS g”z‘“'“5j§N%3rä`~üñ —/gP]]ËÑ£§c×¶6*¼ì'rèzÿ¤ÚHkRR\Â7û¿áñ'çܹsØØØ°wï^¦L™‚D*aÿ¾ý 47ßx“uï­#áL‰Dè#û€h0tÏ??ï®{~ú5d°yIòà@‚ƒo/ËîGÀ2v6¶„»…p­4 ‰\‚£Ü¡½UêXŒè‹ýá£ÇÅÓË‹ÐðpΜ<ÅÐÃÙüþüxä®n®TUUØ;ˆ¸ãÇ©ª¬$//¯M½~ý:¸{¸3aâ¶nÙÊÓŸà“?áûÃß#‰(.*¦Opª«ªI9›‚H$"çzN›ê% ЈE"üì½¹¡.§RSÕÞêt ,»°¾á¤ž;N§ãÂùóˆÅb\Ý\©S×5:N‡««+¶¶¶¸¸¸0mÆtrÛØ¨tëÖâbSÞ`BBõõõ¸»»£Õj $22’ÚÚZììì°µ³e欙””” “u¼Â­X$ÆßчRu‚ÁûY,»ñ“'Q—dž5ÿ%¬o8~=زq3O?ÿ,¥%¥¤_M§wH0åeåxûú²ë³Ï-&ÿ·&¾~¾ 1œ˜7bÉdÌž3›˜7bxbú89;±ß~BBBpss£¶¦–¸qèõz\\]ˆ=KFz¹¹¹Ä‹mS=$ L˜áý ¢œ¼Lciq!¯½ö:b±˜Í;?mǫ¾QN¯ÀÎ֥ŅÜ()Âh4òûßÿ™O>z³IϳN£³:}Go_ù†ÜX«åoåÆZ›nÕ+¹•Ng0È­+ÀI쀃Ü<|¬!7V"³.=«!7V,µ.wµ!7öÎt®{Ê×ëIEÍÊ•H%wåÆÖëmÐî]Ú_$QZ\ÈêÕï™WÞèxAÅššZ ó Û[VçÎ~ tµÜ؇U¾¥¹±?‡¥ÜØ^dUä +Ì žkÁkëØñ‚ŠÑpíæúórŒ®T,Ðþ4,i³*®Sª.£§“uº:´JÞãÌ‚Š%ÒŽT, V`2x¾TÕW“Zr™ìÊ»…ÐCáÑÞªµ;ÌIgΰuã&Χœ»ëz}}=ϧÞuílRg“’ÚNÃ[³aÝv}±ËìÞ™ø3wçæær&þ ùm®—€@GC,#—ÈɨȢD}ƒÔ’Kí­R‡À¢±;öÃQ{rE…¤¦œãÌéx>Ù²Óq'ÙðîZ4 [>ÜÄ¥ Pת9zøÔµj¶|¸‰+—.·‰¢9×spqq!$4„Ÿî ° õk×OÌ1äæä²wÏ^ö~µ­VË… ¸ví»wífÿ¾ým¢“€@G%¿º§[ÁÆ5ÚZªê»vc'k°¸f‰D¸¸¸0":Š÷Þ]Ë…sçéLQa!}B‚9yüåee¬yû?ébqÇSW§¦0¿€>m”Iáàà@hX(»wí&þt<...lú`aáah4Î¥œ#//‹/¢ÓéJ¤dff2ø‘ÁäæäâÝ‚òR‰žNþø;ú2Äs™×Ñt šš:.]º@PŽŽví¬éƒãž~ßó)çï×—¾ýxúùgøÈ`”J%—R/0ñ"Ôju£¬³³3ϘAvVV›*\TXDw÷î8:8òâ²™3w*•Š’’?2˜îÝ»£Ó™JCKeRæÌCQaÒ¸) ЖˆEbR9!®A8+œH;‘•ٯ6a.¾žã‹™'öVóaÑôèÇê·ÞaPä#ŒŸ< ±óÓÏxjé’Yú‹çøtëv,^ÔØâÐ/ €í›?j,æÙÚtëÞ}{ö‘““ÃÓÏu99ù|õÕAfÍz//÷ö|ÍcfÒ¥R)½ž”ä³ <ˆÚÚZN0ÅâTVV²úí•$%$Ö¯/Þ¾>œ<~½ÁÀð¨(Ö­Zõô 2®¦“œ˜ØªŠêõzär9J¥²1ŽN§Óáèäˆ^¯G¯×ßó¸á®†——;F£‘;öñÑG_PXXÊÎßPSSË’%3‘H¤tïæJ/6oÞ‰——û­ëˆeÉ’™¤§g3qbÅÅ7˜<ùvÔ‚§gw–,™ÉÖ­»Ûñ [‹ æ~ús:î$ÑãÆŠT*å|Ê9?»”z‘H„\.o\n) lí쨯¯G"‘^FˆB!G¡ãææÂ„ #Ù²åKz÷@¯×³nÝ6®_ÏãÈÑSœŠOÆÛÛ“ýû¿g×®äçÑ£‡;ŽŽöŒ;[[ …Û;úK¥Röì9ˆOÇÛªSךö.F³Yñ7³ ŽÅö¨1£ƒ…£FG£²UÑm7³ø¹g°‘ɨ««ãÒ…‹ |d0*[[”J%#GGs£¤½Þ‚+»…ôПŸî 77—¥Ï.%öX,óÌ#æfÍž…D"!æfÏ Fˆy#†¹óç¢Óêˆy#†ù æ·ºNS§’9{ö"..Nx{{2þã$$œG­V#“ɨ«Ó0fô0¦LŽ&#û:'N$RUU››3ééY¬Yó®®N,Z4Ãlìë×ó¹y³'§ŽÙÔG,‘P^Zlv='Ǽ'N«V*®©®áÃõP©T,ýåó­V–éaªT¼k×JÁAÑ䤃B­®C¯7 “I‘ËmÐë èt:4šz$1 …­F‹D$Al#¦¦Æ”æ©R)‰DÔÔ¨Q©H¥R4šzär>ÿìkòr ñöõdòähT*%Ò{8ÚÃAQVV‡ÞèHìÑ£$&&7^_¸p.Ë—ÿ•7m@&“5]©¸¢ô†UÞKŸY @mEe‹Æ¹MšüÜüV¯£`gÿð$a ´JåÝU"#‘Ø —ßþ£i”1êH$îþ¹»ó¼á™É£1 ÈU6¨T÷.}ÞÞôîÝ‹5kÖŸÀ[o½Ùd8‹™¶wvnsåš‹ØîžÛd ‘HD™T,Ði˜õ5§GG{!“ÉX·nqq§5j"‘È¢œYP±µA„‘XÜ!ƒ:2™Œèè{!±h¶ãOž$91™!ÆÒÐÀ+’†Á‘´xœ¯v…Z­fÁÂìþr7ÙÙÙxõðbÄÈ|ñùÌš= _NÆdØða|¶ã3 ò ðó÷ãÉ™O¶XŽCêù‹TW™o™æ™(݉ØãürÙ‹|°n:½É}Û¯>úàC†AŸ`¶lÜĈ¨(ƒ‚ضy3#££ñïÀÇm!jÌh|ýüødËV¢ÇŽA[_Ï‘Ãß“vù2cÆÇÝÃïöC¯>A ŽŒ´ê¥’“’‘ˆ%øúúrøÐaÆOÏ”iS8qüZ­–m[¶ñÊk¯°fÕ8òÆ ÆÓŸàð¡Ã8:vÀœ_ ”•iÉÌS€ŒF#—.\ePä³{êZËM{t5Úæ¥CuEù””s f^½C§·Á ¶~ÅÐlyVËb zzkå b : :+å zŒh±R^ Bl°n¥gÐzb½•­u6ˆ#ÒZ^r6 ©Sc0L­ë w-Qß{o–»!úùõ0[ÎZ4v½ží›· ‘H8rè{¢FGóÁÚõ<óÂ/ø`ízbå™~ARüÖ®ZT*eÍÛï0wáB@DYé òrr‹Ä”–”’p:ƒÁÀ ¿^Ƈë6 ‹™5.ÿÓŸ­6vƒ™L†\.§¦ÆôË­P(8}ê4Ë__NQaïoxŸììl~÷‡ß‘‘a*c£T*9î<Ë__nÕç´7z£̽±IIÉüøã)‚Ãïž!FD"ˆ\,ë2'»®üÕ´ öì¥oD”…'¤ÍJ7j{y47ö½¹òZko™†úfÊ[Ô*Ý R© ±#Ð0_»z‰üü2^~ù…&ŸýéÖ—E Å ‹Ÿ]ŠT&cݪ5 1œS'âP©LÁ†:•J…B©D*•òÂË/‘x&¹\Î̹³ÙÿÕ^Âûõeúì™|{«ÿƒX,F¥R™¤õz”Je‹÷áNŸ:ÍàÁƒ‘H$ö döœÙ¼ýÖÛw…nùþ£¢Guš=?‘HÄ’¢Æó³gSèß?‚šê{÷¸óÛTUÞ¼ý"Ðé‰D”•–ššJ@€? …ÉóliéúsXœs‰R¥B&“1èÖ^Ûó/ýŠÕo½Ãð¨‘<÷«_²ú­w0ϾðKÞ_»¥RIPp>þh+ЫwŸlÙFÄÀ Š|¤qœA‘°ðé%ìÞù%=­VtÀÀ”•—‘r6…ñÆ{,zö4áééÉVþ‡‹LûyÆ›–->>>øøø4û ÓX¶ì7œ<ßÞj´;))çyé¥×Ðh4÷=†Å™]Ôèh³c[[Û»*7÷øÎñ|ý •Lž6ÅjEÅb1 -l<ÿiIõÀ^•‹Æ7%2÷êÝËêÏèH$&&süxaa­WLA@ 3Óð;1nܘûzÞ<¨¸¤eAÅÖ0lÈP†  `ÕçijÕäåš§tvììš*4hëÖ­âܹÔ&e&Þ|óoŒ;ú¾Ÿ7›ÙuÑ´¬ŽJY©ºt¥q“IDATÉ{#F cÈ–‡ìtvfÏ~±XÜdÀ°5˜[Y9T møÓWPVvÓìºÁ §ÿ€³ëz½ž×—¯ ¬Ì² þaÇh4âéåÑÞjÜ'ÿŒù7×®e™]7Í®¯wW!€·WþÏ.˜–Õ‘Q(Uä]Ï4%Žk¸º6®'•J-z•[²iû0 ‘Hš²þ]úúz‹Â`ú¾Þ+ÊBekGºÖ¼€`èÚ‡:u-ή¦fB"‘辦é îx®FC©¹û¡N]‹ByGm>0ý’ÙH…X-®KãÌÎh4réÒÕm t†FYéífŠààΗ& p'"ÑÝÎVÁõ* Ðåpqën¶-gÑEµ~ýˆÅbŒF#Ç%"¢o“ƒ–——sèÐÌ™3³uµ¸\ܺs5- ƒ^O·n®×-;£ÑT¾Ùh4¢ÑhxÿýM "#“ˆÁ`$2r0gÎ$RW§A.·á‹/v3fL4ÇŽýÈÌ™ÓØ‹ 4àâÖô´+èuzüüýî*fq+‹Y¼Ø”Pß·oÉÉ)ˆD"ôzƒ‘úúzâãpttà©§æáììÄeìÚµ‡30o% p&C—†N§'84ԬΣEc×Ð6<<” .Ñ÷V Xƒ¸¹Ü†›7+ؾ}"‘ˆ™3ŸÀÙÙ ±X|W§¶æ¶¡ÓÊÕ+W(ùIÞ½('/ÓØ°‘wùr:ÁÁ½0 {v ÑË K[ƒÁTQ$5Þ‰D?‡³³3áá¡Ï ´5.nÝHO»ŠV«#$,”ô´+è~²Œ5k¥Ø@ƒ¡²Ñ§»óÞÈ‘ÃÏC' ð pqm0tZB¸zk¿.84”²Ÿ4Ï¾ËØùøúàÚMHè\½rå¶¡»r½ÞdèÒ®\Áh04íµUÉ…”1Nƒ³³©ÿJYi1..NÇ®·ŽïD(! Ði¹s+­©ã¤«ÿó.7nµÐº.7oÞäÿš½²”F2jIEND®B`‚fox-1.6.49/doc/screenshots/vorhour1_small.jpg0000644000175000017500000002420611637250333016123 00000000000000ÿØÿàJFIF``ÿþCreated with The GIMPÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ¦,"ÿÄÿÄS !1Q‘"ARTa’Ñ3SUq“”¡Òá#24s±²ÓðBDVr¢Á6CEbt£â$%‚ñ&5ƒÿÄÿÄ#R!1S±Q¡‘ÿÚ ?Û6ó“ë›Ë¬õ¢im¦XL6‹©¦ Æ<î_(­˜mjˇ›qYËÍ( fÀQ’tÖ• Äƒ‡iØsö«®ØYUjáž–BœY:'ÉgYLÙ2Ó °,¹—\YBŠ%ÛBh/p…GùttÇ|uñˆóÈs9¿öÆÌÛ¶¢Tè–Ë»ÉA]Òµ"Š7JS’¥ñhAè¯Ê Y²Ðh¥t… â3…%4®âzxi×A¼²¬ëҖΜ”a@&ò\”lbEpÃí§®93%aÊÌ©µäü‘@ ¼™fëSJ`F‚M+] ñ ƹ8uþBmeûc»§l*`!¼½—Í©j–´Š òà=ØÃ™AkÌË%g, K7ÉÎ)#B‚@¦‘Pkä°@°×(&K$$ªíÓ$ÕxµW\J“±'—u9<Ã\Ä»(Ø\b é®äa×ùÖ_¶rÞ¶ååæŸg+TòY"ê@®ªP¢¢´Mï$TŒ¶ÊSþ/1êìL´eìK5öÛU…$íôÖëL¶W¦Ÿ$5§’":±€Yw&Z@BR¥.Ù´Ó¢”'T$Ò5åiDyÂÿÄ,¿o?i”ž7˜õvCƒ,ò‹ÆÓGdze%bZR¢a«U &€.Y¼pŠ£Ž!¾l†-&2z]Å¥5C ã_(éM|§T^^—DÙϳ2Ç(|k1´vC‰Êü ñ«þ®ÈÛµ1c8\ÿ㢉]Ä„Ê ’(1§&V•‹†¬›)ÆPಥ}!WU.€ExŽåit]œû<ÐevPñGöŽÈq9[oxÍý£²=/¸Ö_‹düÂ{ î=™âéO0žÈr´z&Î}žp2®Ý?âoíàÊ›sÆOíèȳ|_)æSÙrlïÊù”öC•¥ÐÙϳφSÛgüEí¢KlŸñ¶ˆßw*Îæ¾e=w.Ïæ2Þe=‘9Z] œû0©ÊK`ÿˆ=¶NQZäüýí±·îd‡1–óI샹²<Ê[Í'²­.†Î}˜Äå­ÏÝÛ ~Õ?·;¶6Αærþi=w>K™Ëù±Ù“¥ÐÙϳ&-ÛPþÜîØp[–Ÿ=wljwŸ4c͈îá”æ¬y±N—Cg>ÌÀ¶­#ûc»ai¶-ûc»cI¸¥y³>lGw¯6g¨!ÉÒèlçÙžM­>ksl8-YãûS›b÷rKsvº‚;¹eü]A“¥ÐÙϲ”Zs¼åͰà´g9Ë›bÛs1à[êˆîçgÀ·Õäiô6sì¬ó~Ͱâg¦÷ëÛó x$uDw2߃GTC‘§ÔØÏ²g&|2öÂjcÃ/l"Ò›nΗK»—;REAJ%J®?ÃO®#Y¶Ë6ŒÊ˜O2 ›ã8”ƒwYáˆ?ûÂ>¦Æ}“^µZ•rfqõ†Ò@ Q5Ô”â~¨©ŸÊg‘}RsrÁ!K)Î4ã—€Cd&‰P)$©XZ0‹y¹é9WÛ–q•©Õ¦©"]Å$€ºŸ¬ˆ¬¶mw$&¥ee,¶¦u!KRÖ”ZàjNBƒ Ç óÇ)¸ðë†3ŒTù8æQ8Òdî–]­aÕ®æ‘~T®8q}z‰ö$ÓRj}ÕUn(ž’Ú WZ–¹³ç¬ùfìÖßLÈNqÞª€ª¨¸té¤[Y¦ð™U«€Ð}"LÄ­Qo¶Ë“ m*Ut”W\Tªß²’”6òƒd®æmhÅTqhѧ¹sçþxÌDDœŠÐ %¥”œº„‘¬}¾¸äÙRӬͅ©’µ% $ ŠÔ)†"„Cª¸´ÝZ †¢‚a•–$RœÛ”2ÝJ”z9œ˜ñtÿ˜0 ¾5+ª`¼5+ªaÉÏú9ƒ91âÙÿG0 £p¬, Þ ÃQ$AJˆ:AA†›[D$§N¶L:ÃÈ™—iöëqĦ¢†„TB‚¯úªê˜MÖÂ|¬Ù¯ÙA›ÃRº¦ ÃRº¦o Jê˜/ Jê˜T ¼5+ª`¼5+ªaP@&ðÔ®©‚ðÔ®©…G´¶…-j JEI&€^•Õ0^•Õ1Ф•…@©Ž••¤(èã^•Õ0^•Õ0gUt-5©®­0¨Þ•Õ0^•Õ0¨ xjWTÁxjWT €Má©]Sá©]S ‚7†¥uL†¥uL*Þ•Õ0^•Õ0¨ °‡ÙPÔPOôŽÞ­ÕuL*„Ô “Òƒ¸MJ ÿÀÂà€A¸q(>Rƒ‘L>â _{WÁ%ßg>˜}ÄF±I-Ïœ;ùã1Dœ•‘CˆPzjê»âïÑNˆ½sçþxÌP‰L Hm)œ— KF·‰Q.R‚¤§×-]1•IReäÛ—feiHt¬ºêê¡T‘Z멉ÎJ¶¦ÜÍe$ÓN¸ TâjjÒ®ƒNªb]÷ÙeIJìÆq7¯¦­•Ý8x«U%h„-"ıøM›«Km•!Z€è¢¼t¡Ô$¯¥­YvCfmNP’³SBI¤ÔÐaõCÝÜðÂ3É•Ÿ  ÉûšbR„jS"Ð!ÆnŒ Át\XÄU®y¯ްƒ<ׄGXD¶lô¥,ç,‹=_»÷›j·ª‹µ ¥iFƒäÖ‚ ,ÙÜé½fH†®Š|K«…kÄp½ª¤'@¨…^y¯ް…‚¨8¸”²¬Ó$Á™³äÆm9Ú2Š^¦ËŒ•”ßM M*òÅDÛ–›–ƒ&Zyl2PÉS!(¸¥(õÆ£O&c3>‡/On…­­2^|¢óªIQ&ˆQ¦‘•dÌš‚èôÊT¤%`Q5ã]u:MaodäƒíÖà¤% ¡H¼U‡X$[ÁQï^T©J33U'*4qÒºGÙª,¬û=›6\°Ê–PU{†kLþ‘*(‚  ‚‚  ‚‚  ‚‚ ¾ö¯!‚K¾Î}0ûˆ}í^C—}œúa÷Å™)Рû„jxÏI„ðõ'­î…8™pšàpÄë1HÅ…2Ër¨î£ŸºªêJBÅ¥/aúÆ¿æè•]± '¬{ ¼çGXöC2Ì-¹d¡÷ëƒJŠˆû)Xvâ9'®®Ø£·œèëÈ/9ÑÖ=‘ˈ䞺»`¸ŽIë«¶ íçz:Dz Îtudrâ9'®®Ø.#’zêí€íç::Dz Îtudrâ9'®®Ø.#’zêí€íçz:Dz ¯RzDz9q“×WlÉ=uvÅ’¾è8|”í÷Aq“×WlÉ=uvÀv«Ôž±ì‚ócÙ¸ŽIë«¶ ˆäžº»`%;}Ðpù)Ûî‚â9'®®Ø.#’zêí€8|”í÷AÃä§oº ˆäžº»`¸ŽIë«¶áòS·Ý’¾è.#’zêí‚â9'®®Ø‡ÉNßt>Jvû ¸ŽIë«¶ ˆäžº»`%;}Ðpù)Ûî‚â9'®®Ø.#’zêí€8|”í÷AÃä§oº ˆäžº»`¸ŽIë«¶áòS·Ý’¾è.#’zêí‚â9'®®Ø‡ÉNßt>Jvû ¸ŽIë«¶ ˆäžº»`%;}Ðpù)Ûî‚â9'®®Ø.#’zêí€8|”í÷AÃä§oº ˆäžº»`¸ŽIë«¶!j‘\4û ’ﳟL>â#ŠBB ‚-]±Ù.û9ôÃî",{I-Ïœ;åþ¦*œ¶’î¥ÙWÂH H¨UM5Û„Z¹ó‡3Y§gÝœgš§7œ Q»…+ލ€Œ£•Rî&ëtð@Ã’0ÇN¬b\Ë®ËYBlN4à[Ͷ¹ŠsaK Q)¾I45¥D-ÁšQJ­¹káÐÍÞç®·ªþó@¨'P"ºD(µiʉ~ %f+œP ªAMê‘Zñ/ÔbÂFÑn|ºmÔféŠÀ¢«]QÆϰ[¨·åD©wSg®ò馃9ޝ¨ê4”ûbUâËÙC"‡Q(ÜJ¯NÎ(RYè!¶åÖó!»vMyÔ…6S$¢ º sš+‡I#\BLäºÔ„£(dÖUwȨšƒƒžAå…JÚÆ‚^B_,ªÜ•Jƒ™µ"ª$ð´œæƒëN¸yHRC—m©wÛ+yhEž²R”| Fs\(q®©-"@o[òi½®Exk©ÎqTWUF±TÌß”uÆÞµš mA ¥œ³‰ÑýçÏ%U%¥Á œ@IrÙaWèUg®œÇ9þaëÔh™”;+2eݵZÎ^¸³Ôjx…sœœª¤´˜#²VdÜûjq‹Z\¥*ºk"¡Ä„ÔDIÞí§ãI_BWâB¤´X"V÷m?Jú¿ îÚ~4•ô%~$*KE‚%ovÓñ¤¯¡+ñ Þí§ãI_BWâB¤´X‹=6©6ÛRYS¥k»u:t«£ k#LZovÓñ¤¯¡+ñ"Ì”ëV„ž™¶3¯^xËšP$œ q¤µl½».ûÍ3˜} qE Œ)¯Î4­ 0öSÊ´Ú”%ævá èU4Pâ@::: ]îÚ~5•ô%~$Ý´ük+èJüHRZ.¥öu „­!@(PЊ㠉[Ý´üi+èJüHÍZœ…ª©7-[) fD³9égBžYm ¢@Q¢ôWŠ+k•÷µy ]ösé‡ÜD)äÜ š‘Q]p™.û9ôÃî",$–çÎüñ˜fξek+“®L¶v+sÕJÎÄ^X?(qñ9ó‡žØÐbrzÚvQÖÕcÏ4•$‚´;/TŽŠ¬ý‘™Xe ›Ý­Ú5ÜN“ž[$–ê›×nqèÓYܯ±Ý’y¶m -h)É”„šë"¿dclë6A¹Yöd]²ÙiRÏ y¢í È%J%"‰§F$†¸"h,¬d‘¾tª’Õ8×MýxÄÎé[~"›ó¬~$ó°¼e)çÓÛüì/JyôöÅt­¿MùÖ?+­y›Vj] ~Í´eZ´ìµI¡ÀÕF,wåaxÊSϧ¶)ržÛ±mÛ%V~ê³iÃñ‰zs7‡AH&µòD¬÷RÃì-™YççòèÚÖÕòæ`Ô’M.té‹—LëÊZÉU¸§++ÜĪš+ÃÆ”Cc.JΓj›³Ú”fqK—ï6‘˜Í„*t$j7åaxÊSϧ¶+-ˆ6;²é ”0’Õ\Yp]¥ÕüªV¤BÓ*òoS$+Uâ%Ž#A<4GmKfδÙiö'¥‹RÓ ºã™ÐR—¨HÐM("~üì/JyôöÀA̾PQ½péMÙZç…¯w:¥)Ü—uÕ(•â¥Ôj@Kš€Ù÷çaxÊSϧ¶ ùØ^2”óéíŠ#¡ËA»—2]ÄÜHBhe…ÔƒPy‰‰Žû’E_'NæýZ]ý~*Ÿ¿; ÆRž}=°oÎÂñ”§ŸOlÔÉKaY$¥æÍRW¹”A¥+RºÖ€c BfÚR”ÞI”)i¸¢‘, N£ÃÑ÷çaxÊSϧ¶ ùØ^2”óé퀊­Ø²J²QD‘t“¹±¾_@Š‹nÛ–²ivÅ™)f4ýõg¦ØiÀâê’E¢jjI'ThwçaxÊSϧ¶0¤ùg²õ‹6G&ËÓêq牆ÅÔQ"¸‘ÆDoOË(‰š†r™ˆ¸KßîM’×tìlÚjRÂh+JÐW lyy“.-K]¥b©J%Dª@’IÒtñÇ–§ôI–«­Û!††“làzñß‚<¶¼SÜtÔ ‘ºÙöãÙÆÑù>œw3êõvI6²JX¶ì¶’Mâ(¤‚uà¨wáFÉýá³ý~Ôy'Á\x™>”Ï·Á\x™>”Ï·6ÉôngÕëGô£ePÓ(,òÓ/Ú„³úS³VÃjrÞ³ÐáH*NçYºiˆùQäÿqâdúS>Üsà‹-üNŸKgÛ‡Gäú73êõÏ…'÷†ÏôeûP|(Ù?¼6£/Ú#ø!Ë'Ò™öã‡ôG–Àl„€8ÌÛ>Ü8Ú?'ѹŸW®ü(Ù_¼6£/ÚˆŽþl7mg”29Ökv’ë¦ ŽV£]ðE–þ'O¥3íÇú$Ëe¤)B“ ‰¶HûðãhüŸFæ}^»ð£dþðÙþŒ¿j…'÷†ÏôeûQäŸqâdúS>ÜqâdúS>Ü8Ú?'ѹŸW­ü(Ù?¼6£/Ú‡¥òžVe´NJÚRŽ&vd¥*LªÔè@O+ƒÁW¶<{àƒ.ÄÞujÍ·8°.šPüZîÿX㯣§†7ŽW-ážYML/ìËAv­‡)h¸„¡sRéyIN€TšÐm‰’]ösé‡ÜDTd¿ö2ÈÿB×Üo%ßg>˜}ÄG—Y-Ïœ;ùã1i“ŠK*鸼óꢰ4.¬ƒõ‚ U¹ó‡;c»¡Ÿ±Q½[7•;é¯{PoVÍåNúkÞÔT[î†|"vÅV̺lb܌ӬM)TmÖe”ýÓC¥) ‘#z¶o*wÓ^ö¢§(¬f,»)sR2óÓo¤àÀŸu%}•R°‘ÂDÇtd>å'Öµ:ó%¢¡¹Jo( °æègÂ'lyí”Úç&%e&wCHr}H[beeIšýÛõ©átƯz¶o.wÓ^ö¡ &²€‡Œžk‡vn]Fî4Ô’~  ‹ÍÐÏ„NØË[T½žÃ K®d%ù©vÖU0µ*êJHšŠ‚tE–õlÞT尿íAû¡Ÿ°n†|"vÅFõlÞT尿íA½[7•;é¯{Pû¡Ÿ°n†|"vÅFõlÞT尿íA½[7•;é¯{Pû¡Ÿ°n†|"vÅFõlÞT尿íA½[7—;é¯{Pû¡Ÿ±OkîY©”2üÀm•ʺ—) ­¡LAèúã»Õ³yS¾š÷µß±ìÛ:ÑmeS7.ºÞ™qf¡ÆŠiU`oSDP5`HîT´Ý®ý JƒâªÄ¨« +ÃÒ8L6rzG:©„ÛoÎi+ÏŒ( kÒq§‘T„æòL´å^ €ÚC€<¾ #iNÇF'0†%rEɤ0„$8µfV ¿ÅN‚i¦Af;-/eË5»™~ãiР°Ó¤éòÄæÜC¨ miZME䚈§VIX‹Îß‘J³¨JUT¤¤§ŠêvEœ¤›M–åÑq&˜T z :#&‹ËRe”Ý®¤%·p!iJT®h'i®4˜}ÄDd–çÎüñ˜q™‡eÛ ²²Ú&êp&§ÖI†œ4}ÓùÒb1›e.)µL!+M*­;FÑ®2«Ý5á×¶ Ý5á×¶+Dì±e··SA·EP¢@ ÀŸ°õ7t®õŒâ¢Ÿ”4Š×îò'<û“,­—ÕibŠBÀRT5bv|‹!a™F󉸻Œ%7“¨Ðb:!N>ÛY»ï%9Å¢¿¬NŠB›eÙ…0ÛáN£å$ X Ý5á×¶ Ý5á×¶+Ñ6Õ¹4Ù¡RH¨À¤Ñ[ -%ÚæÞBé¦éwtׇ^Ø6”ZJ'Zje 5J^m+ëš+•ꂊåz Q2ì1)ssK²ÀBŠÒm)DP‘A¦˜WTLÝÓ^{b-ÊõAEr½P:óÝΪýÕ&ð­5ê8ÛºkïlE¢¹^¨(®WªVîšðëÛîšðëÛh®Wª +•ꇒ’·tׇ^Ø7tׇ^Ø‹Er½PQ\¯T<”•»¦¼:öÁ»¦¼:öÄZ+•ꂊåz¡ä¤­Ý5á×¶ÝÅ3ÅÉ io‡¡ÚÃnŠåz –ué{O:ÊsަMÒ”Ü*©¾×Æ,{$…Û¹4†JSc %WR´nTV”4Àit b±%õ€&Ñ›²×º3”A©õtƒÅSùÓ÷vÑJÔé°3yWI*R«‚G==•eœ£¶K(.Øa»ë¢H©® i¬ÿ@vÊB2ÊÏP5blªëÁ±Ó©5úÄZÙ¶£6£*u”:”¤ÓãBF8úŒ?(òæ%yÆ”ÊÖ€¥6­)'ˆÃÐd»³`‡Y[–S!÷ܨRZB± T•a H#+¬&‚3ÂÝ´ÒXJ¬‡œ.(_ZP¤„ +ÔUBº ÐpæÖɤ±.{š‹“ºÈ7†±M$â*08ÂÕ–VsL|T»éJn¥åˆI¦(8¢AÊ ÐÔº……9yÚÞ|Œ@Ç£N4h†”V¾mEÀ$¤&µ'’j(5ž>#ôžWÈOM!†Ú˜Iqw¢Œ ¦5Ô+‡Õ«le¤‚ìL!àÚ¶Ò›×o Œxÿ˜}ÄE6K¼û$û'ù\ÉwÙϦq#Ù%;ßÝüñ˜¯™²$§C›¦YkÎÎh `‰î¢ôæúP‰'ÊzD7FùÓ=ùÄT6ì‰&åÒÂeÔJ‚ÒÈ)!7F ×Û¦6˜VÚ·ªßÈøÕpq®-qañ|é/þp|_:g¯ÿ8“aöÚC,†ˆ(¢È ƒS jÏ–fct!—3µQ¼§ ´éÒaöf[Î2ú‹ÊMáZTÖÖ!Íί ŸÏþPÎØ–{åÂäªÉqEj£ª&¸à®“´ë‰2²ŒI… v ¨ ¨À4@Dί ¿ò„<‘.úúRÛi+R±ÀSúÐ ¼yÕãÈ>¨eçÁ@[‹ªÍÒÔ}DÂ7C|§ýÞØ 7 ú ¼yÕ·C|§ýÞØ7K|§ýÞØ 7 ú ¼yÕ 0¤L0‡šzókI¸¡QõªÍ ü§Ú€íãÈ>¨/AõG3GÂ)ö Í ü§Ú€íãÈ>¨/AõG3GÂ)ö Í ü§Ú€íãÈ>¨/AõG3GÂ)ö Í ü§Ú€íãÈ>¨ã­vª&B2˺¥€@ƫꬣá?”ûP©6r×JzêÌ«´8§õÚ¨­ITb+XG´•ÝŒ«QlŽê6”9›M@)"õTM)ÅB‘å-(5Fmû/( ¶Mà GA[¤¨R‚§]ÅHå ÕZè¼R@R›F¤Ö—8…+ÓåÚ40Eu-;)+›ž›.•_¥)RM?;"ƇDfæV!Â…5*´U':H¨€šŽ:§ÅÅZ9ÑÑf[¨Ì%»M BTàQ+*¥8È­ Ó TD“3ëO-m°ÖaJ áPàÐ$ #‡¦•Àt„I¿”κ§%dÙo8©lÞUÜkC{ÉïÐTdò„·.i°šçNlcˆÿ.8j ãÖŽå—”kiAvÛi¼RHÍŠkˆé Õ§@€ÓÐj‚ƒTgd¬û}©´93k!ÆÊêãaÒ”4tbk†‚Úlì¡Ca¹{e¬Ò[BR¥ (’’Rtž<|šƒO!  Ø 7”&šapg­×DÅ´ƒwA1¡ŠkJBNfp­ùF]Ð/-°£ë‰+ vKWzUAp3޾\ÉwÙϦqA ‹5‹¤¥±DšRš4ÿH—%ßg>˜}ÄDd‘<ðeJ)qUM[AR‰®¡“V¸rQæÚ“´ŠmAs­8‘† Tyb]¡?/+:[}Ö›½R’´£NJS^ÞKiKRÇ’—K ?u´’@¸¬*IAîý™ÎÛWder“(Úì I©”¥&óÙ»5׃‰§É ¢MõV “ÿëú1öD‰.û9ôÃî"*rq©„dÍ—Ÿ‰V¯‡7®Œ Mk_®±u úÒ¹´¤Š°ªAýDÄd©¶,÷ÝZž’S·ª8`+£Ô6DuMØË­l´Ô¤¤4¥4ýf" i·å(™URh…o†[›9¶!@ß ·6slá–æÎm‚P7Ã-ÍœÛøe¹³›`‚ ðËsg6Á¾nlæØ …|2ÜÙͰo†[›9¶!@ß ·6slá–æÎm‚P7Ã-ÍœÛøe¹³›`‚ ðËsg6Á¾nlæØ …|2ÜÙͰo†[›9¶!@ß ·6slá–æÎm‚P7Å-ÍœÛø¥¹³›`‚ ñKsg6Á¾)nlæØ …|RÜÙͰoŠ[›9¶!@ß·6slâ–æÎm‚P7Å-ÍœÛø¥¹³›`‚ ñKsg6Á¾)nlæØ …|2ÜÙͰo†[›9¶!AµÛòê=åÀ8†ŸÏ–,ìUîÆf_@º•=€:pBDEÿÙfox-1.6.49/doc/screenshots/boskalisnite.gif0000644000175000017500000006731111637250333015626 00000000000000GIF89a,á÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ,,áÿ“ )$  ",xp Ã… FLØ"ÄŠ%bœ˜Ñ¢Æ‹ ?ŠôH²£IŽ(7ª Y2%Ë“+GÂ|éRfÍ–1[&QX"I = Jt¨Q¡H‹&=ª´)Ó§K£:• uªÕªX©j½º5+ׯ^Ãv V*Ã6m¤IÁM#$ŒÚ0R‹ ,V±bC° ƒ)Š ð+ØoП€IŒ¢ðàĉf|ø bÅŽWŽœ™²Ah%` ·ï@F¦SìÅË( 6‚[¿.Á†Qš¶IP£`…¦ ç ò±â¾Œ /n9òÉ%–_ü‡ûî˜Ó^Ðî«»Žüé™'ïÎiþyçÏW»æºï¤9ñÈS?zê®cϺöÇû¤ðAa+Tºå,›óNÂwÏycͯ_D‘‘Õ7Pc“½_e A€â·ÿ]èq.Bàÿg¶ÿ‘`lj;àˆ@·1ÐEgƒ`äÒ¦¹9PAúó_ë¦AÅèmôÝBT6ò€DáÛVCµ¹Ð0ü‡öVCìtÐleJÚÿ4È7ÇA8H@H@€ý„ltó’Ùš…6D!MÀ¢²9PñŠNˆCªØÅ(|Ñ‹b4£±(‡+r‘ŒqØb­8Æ6HÁ€÷ÈÇ>úñtÂA°DB †@ Ü€E'4á‘Mpd$)É&¸’“Œd4)ÉN6AñëÉÖž'˜Ò¦cÁŸêÖG=Ì-ä:‹ÙÆ\•&Tu+0; qÚ¶"«}Š8ÂCŸ‹¬ÃŒ!€@”äd™³°m-°# F3~± Ô´æ)ÆKn3ŒQpä6¿(Î-~ñ‘ctÑ)‡<J|ç›°G"  $Qÿ"è‘rØä&•ÐÔ EèA JЂ>r M‚$šà¬5'3<#U䂙˦H³Np)Ï’’Ô³°|iËíh ÇLf›É4à' ŠQ#­HE)ð´Žfôb©xM2Õ nÄ"?ÉÅŸr‘šMȧýYRAþ3†ZEªÊÕ`ò‘udC›°Öµ&A’oek&ã*‡6lki r˜ðTRƒ4á~ñ+úb7˜ûÐr0%E+® è…z!ÂÀ|‚窰¨aÈÐSžðH¨.vÂéÎüÒ$¡‰KÐojs,è1‰D½£·¨T¦ÿšÑ§fÌ­m› ÇÝæªq€ªnå(M2ZѤU} >±êÏ«š”žzDH D4\5†ÿT(A7éÐ…¢õ¡ =hwZPFMU¿D rBXM‹£¥LZ:dÁ””Žeôk]féQ¿@„APD(L–Ns›¶¨l=¨é–ÕFd¶5ÑEJUCB¢iÔÿô§Æí­Rk[EÚît›%ÎâNï˜Eá¶³¤†”jeüN¯`º7¾q>e [‡ª•“lh\¿ëãMÂ5’‘8U´ZÈhOM|õÜ_z¢ùåXKk Œá"`Dˆ‹µ§?¥ûÏ“ÇÀöò’sÔ„†ï$Aÿe®‰sªŠ¦6ŽºÆI¯L’ð[¥†‘·+Vq8sëçB•·V¤&ˆ­ÓjBÒ'MA¤›€„hFZ ’ÎtíN‡Ð͵  µk¤3½¹”.­å.DÇ+Wñ™¼Œ”Lµl‰´SAF£?Y])“^‘Ä7ËÖ}YA`VàFD àC ‹Õ “Þ½ñ/m“ûèP&ÄpmÓ#Qs»Îmâö§H%·…KâDÅ'Vôɘ[£ÊAn‚ô-7ìÛ ùv‚ø- 9ü;àýÞ·¿ûýÐîv·“q%/ª]íHîV¼®£1³ æä !†S_kNÒž&‰•À¤(ÿ/é ƒCÔ-§\s—Ó€-HÈÉ ‚<’Š#ÀŽ÷ˆÎc1ŽTDªms‹[Ê‘¸ƒ¦¢¹ÈÛuk±ÑêT÷O}JMu:²ëÒìº%ƒ‹è-zÝŒH½äw<ñ·ªúÈgµB79Ñ»v¬¢˜!Íë<þµ¯²Ê>^1£"%ÊØ‡Ü#âû¸x=ºñ†ñ(@dZ™¸< À¥À¸À.€øDòäA>—ªÛF ÚŠN­­¸e/uáª{Ü'7ÓÃ-…8àÛì^ô)×·˜ößSÓß‘ .ñÍÞp‡«Z“àõq«· äWß;äíY^Aµ³R^hS¦âTÿÆ¿†DX’ ûü¹€`6T«ÊEVõià}Öp ,›<6?y P€þGþÇ0 2)@H ° ¸rhƒfGVu±µn·ÅS¸•E½¥SlDTh´[B%u*&FrÈ'p‘ÔuûfI*è{ØÔu^äHùfIAÆIn÷cE^•Ir·IW>3ÄÄ1~%J;[§¤>;q„—CeÊ4¢u&€ä_¬Y‹ÅFT%YûEfþµUB„-°y”G†@yh(€Àyyä ø'O<¥TÃeGG÷Iv‡¿¥SB%\I×zçäF·e[n`pÁƒapá$M ÿ—pÂwIÿF|áÔjÜIãUqD¶v WB&’ k[r¥²xeÁ¡ UŠs¥Ã2$ð‚±|~€tUˆ@ˆÀ»èOú%mûEø¤Od `úU3yú€h Pyk82ù‡ €îDH?·G$H8T!VnƒˆTôZ×z°gb~¸bèGøÖˆ_'|‘N'xoÇTïHƒiw‰¯†P ÅâÕP%d›øv%èŠÀdjL–*ÛWP+ãJa3LØ=§$x@Á¬K$H¹8WÅ,òGHTµ_`f`û•lUµD„(š·’šW€»ƒ€ È€7†Ó5ÓÅUzÿ„{˜{BU\‚VT€ØtÙô“Q G‚]„o‘Äo‹¸”È·EˆxIõ¨o1h¥ƒêÔf‰Íw‰ÿ¨ƒœ ˆRKÔ–1Ù'2Ç14F4Åñ3߇1DÓ©ty—€¤\$ UàORñ´cùt“KôOf,À,p˜¥Å‹¹˜,Ð(°HЀ.°–¹§µ—y9šÉG¶•‡)u´Q—TM7‚±šîéæ{d×uÁ¥•úÆ[Þ„‚³ipŽÄpŽTWI€¥ŸÔiÕpþˆjþøvEV‚Ú¢4Ñ+«<¦¤>j2Š~RˆQk—ã!W&&tr(7‡~Ä|ÿÄA1@1詞é9sç - EGðöù{„Ub5]Fc"(GJ÷nâ8Tâ–T€Ø‡º7Mn„Ž( ê”pN›^ƒºé—›a|ŽÔuU^IpIÔ×pו" }9h ³@“KÕ¶„H4J(2FÈ23Z>§# ²`r+ÒKÁØÇ£«è£°Ô!Ò¡*,€y,™y—Çy­CH pŸ8nN•b' XŠ¥ª¥:{Lš¯'ˆ®éE—4›´…‚+¡d•^Tgv>uI;Áj:WšXœkGdWW5¥LÛ±}³Ä4ω*Ìñn©–/zwƒá)’ÿ`W©—ª+4v—ÿ4`7c1†’œ‚ÐÈ”‡g8€X€P–O0÷ ž€´[½§_d‚Z‚r u% X„‰…oƒ6u…(FÒÊ|÷‚á´ˆH¥¦oš‚´Y‰1ˆE—‰IP Ù b™ƒcçjØêP³Ú„§(„GÑ£;Ñ¡£>€ÕWѹ®ã¶ Gˆg)º%)RR¬‹’lU¨yÄ& ¦fœº†g(°+€ªRó õ‰ª ¥{¹—ñ¤OÜX{$vbˆEØT[²€£8:‚FˆÖªAUbjIý§Ÿ$ƒ-¡·±Ç[³mW}QÿµºðjDf IС“´MPwΤ˜ŠCÓ!ƒQP1ÂXS–(ðp ‹iƒXjkòr1²d÷e`¼ˆ¨0½¸_‹f?çD,“y”w° p[†+2H ¥*pS0Wp€šé\zt’DgŽèŠÀ*ŽpoXj¸XÚZ9Q‚‚gª[G7 Í*vhª²”¸›Úu*«•Äi¢<ë‘ •BÖIž+§Øj«¯ê…-éUQõ<Ñ<€§9FX;n%;€q0ñ’0y÷ôJäCÖu`„ä‹1d`¶DcÈ’+y†0À%^[ °+°îD“Ö5˜ÊÿEthTo³•EŽ`¡CŽ`‚Y$²+޵ÕFãÆFátoñèo¬)v\—v‘”vºI|‘„MdŠMr5wœø]‘P %W©ö³«æƒràR ²q·´^Y¦q~KoIxÓ1J’°Žú-E¢&qÛ%•lfŒÆˆOä_,¼r’˜Œy˜6œÃ,Ð,RkªÙ›½»c„„}tNÈ º…{fÔ¨* :)¹T§F7IS™›i¡•h›NPÅÃ'³fw«Ï´šh‰NP µP —¤•QP s´ÇëÅ„é#LMøœc)µc©^r‰(m°º¦LÁ2L†1è€dÿÓ1)Ž 癞s>L2v Ä È-6šLLGu˜EŒt¾uøg y|¬)nê¦\§ˆˆ&p*øIeЬ—$•reœu§c|ƱP ŒëðË]lÜ›ŒÛ³œÃû)Ó>AÃÇÑù¨ôS6em màŽ0X‚W&@tK£)§ªŠ·G)©—÷©Ò»y “™ØÄ ˜c€»—ÛzòfGV¤trU˜N‚uCK¦‘ƒá\-kÐ2X‚ú³fz|[™‰ÄÉ]mg hìÆ%PqÑ箕ƒ–¤¨5“-ëõsB30n KHÔ›†È‘wLkëá2ÿ¢*8iRÖµ‹ûÅlHf‹ÕD©r¤ëŒ Š†—W€=q!œìÉ{D“ì§c {*Åyè¥ïFGJ\ctoŽˆMò˜¿¹9IúV¦‘$ *+•»‰•LÑ&*š(‰nìP_ÍL>!—1ýÌÛ±„¸ÛP¶2…9HH»¢¤’À„r9åJŠQÁÂd$²)—lû4Vh`Ì»D«XBmy;yo»¤êszKpÚK™ÈËUtÓñ6FH5b=[:Ùb»çh¾'‰,»|´‰¡ŒøÛ¸I¦_L|^t*\9wp÷uo¥ºq|Q£D?­«#}WÔ‚‚JŒ±’‹TÿU¦(JTFŽjI»£“úNаOîg’zmI6¦¨yjx†gxÔt›Gà/þ±Íõsù„]{häfb²M ¸wÕ ê ½‚i͹ØÄÛêäÕ³¹oØäodçÖ }#š­š5«×ÉLs\€±:Ó!1Xz\:¥ê»>,eŠ- îÊ2‘0Þ~¥® ']_ƒ“3)G`;BÐ``1œl¹ÈµÑÛΚdž £ßü= ÜFî†á(й%T\ ¦¼¿“4ƒùÖáKYмå É·ˆ°I^Í×EæËÒ÷h·Ñµ¦-Ë¡*£â)€‘3°äç³Ä1’à§2ÛŒŠÿ;ÇxV1»¤f‰œrah¨É0°Ã,7Œ˜1€˜ñ¹9„Q±$ž´Ýg ›T UjEmªÅ´,á h\‡Ð]¦Ç ëX4œ^îëÐÇÜÞU‚Ì9kw-Ç> K›ƒÇ×üQ#ÞLAŠÖrI?dR9 sjk%}!*Ù8tà¾âþs=‡cL¤zÝ„@¡@@ î¾î…@ @€P DÀ%ˆµßü½GZ5±Ó`9yÕôF¥}h‡VšŸÄà^7Ëò¸ÅÁ%‰úfG.¡ÒäØô||œd%Új] عtâ}j›¥´Ï‹Ëž>Îx=q͙ܽÿ<Ž óSV%\¤‘¹KÚÑѱ!¥BBoCTôB¿7^Rà°ôLßôN€€ [¨Ú±ÿô½[Õ³EGªLTSwàZƒd§·lG°.Àú†æ\‡öLUƒ ߃DövvÊ]ŒdW„j*Ù÷Ü~Ê4¯ÔL³+Î!ÄôÇÇ»áр&ƒè/=•“ðã"K    šßù›ßùà@äO ¨/ùiÏñ§—9IŽîvêã&\?UmjÀú¶¿þu2«Ï2Èo|Å”xƒäePoÆ\ùpª‹´â¬}Ç®W1>X¸»ìÁã»JˆíM „xÿý.ÍJKeI 0­5Ó¿a<ß3é H¼˜GŒpUïO×áe°ô€ `ðù€õP‘„€ PáB†šDi"b”8M*ƉÒ&c7-JyÈÑ#DIr"ºi"ÇID–N¤´y鲉ˎN"É©™ÒI›•&$iÒèÊ¡3 54 Ñ JŒ®t")‰HJ (‚¢êÕ¬ER˜‚HŠ­_Sd-6IÖ$\I|v,\ªZ‘ˆÕ 6I®Xý^uC+Ø$šØ-œDñà6$Ò0bèV®fß¹Z¢áfhÐ D€QhDÐZ%8`«Aô:vÿlp„º&xP@€Í½-n„ùÐ D'>´ˆ|b9Qœ¬”Õ§'qž?çXª7>UF¬Žò¨ÓŸAËOÚÄ)ÒòHƒº™ÚÖ*V¸}íË¥í^mûN+®’èo,šH˪$ìO–6âêO¬÷R ¬þúƒ¨$ð¯4R@ƒ‘FÐ`£2°Hðj¬±ê¡Ñ@ˆÑ@‚*«Ä*wäqGÚ! $x+è …È …@@‚ˆ…”î!6ú(¹—ˆ›’¹”fê%îf ¤ž¶”.&ë r.8¡˜b逸Ül*ÎöÈKB“V¬ï¯Ç:m+úN”kÃR¸‹ÏÿÿR@A¬$Œë­ÿsĬ°Àb4, ¤¯ˆ&ÞJp+ÁêJ«±ü³"Hè œ¤ÊÏ"È „ 0Ȱ•Ö[m­µÌ8L‚‚N0Á„XD'JõI“*Úˆ¸ß¤<#á ŠÃÎážû2:Žšp#L¨† ·’Ð %ñ˜ú‰Íõ䬳 Ü[(9Ã/Ô´.³lÒ³ÓŠÑ-!¡4¤P±½äK^I&A’&äÝk«FF¢ ‚ ê-°šPqÀ·ÐZÑ- OÜ­SWfV®ÌM f²Ú"Ë㸈(„Š5E'—…qY…B’¤‹®e©"£©â;'r %nÿÁÝ)º3ûÎêç¶œw(8Û{S© îín)÷œ#’“ýCKÏÊV”ï>@ lÔ †+Jï ä…7P8Ž%iãÁ ˆ [¬¸Ü¸QÁ6UX@`·"ìD¯*Çod¿útÛ*Ï«R1 Uu0Ï +yA   …`uu œŸ¬È¤(¤]ŽJ*%‚‰'˜r2‰:ç¬ .:žÂûî;áQZÓlô朷]õ&Þ[©•à KÖDõÝ3?Í9_¬ª$1œîÈÍWì® 9L¡ GÞJA›¯ >ÎÓ ‹¬óÕmÊ6÷˜É03³„¬.²²UÊÒ¿ì«>ÀVë – Í8É–í"¢‘ÿáè®$Ñ™‰Ndáq‹'â*I½õ4ó ÅlõŠÓôà´¦®Ç –€èNô¯æ-'ËS:9Y<Œ@û"£,T!º•@xT¢âÂD¸ˆl1Š€¥˜­ôpTöCL_º"–R•ê,œ¢fô#*²Àm‡!ƒ[bÀB„ä¦H ÑëX””l$Jãr U9ÄAjÖÉÕ‚óëÌ$;d Õ*"Õ¸Çyîšžô4d‰¡1K ‰ðãÆFåP+ÚÆ5HÀ—»°‘T$ 5·/Últf"†´â/ÏI€&+Âe샛ñ«p|ÛW8×§_²q‡âËãnvs$$ÿ+!$@CùX­-çJ!éHF$!ì@‡'Î1'U;µ$:ÍyP{š•6¥Glì ¡TøõL0¦`ûñÕ¢B1H I¸†,*Ö!T/ ²J$á Q*.w™"rÙ– Œn• C@€’ñd}jTæÚHF­üi™bÔ ZHF—\$V°‚¬,eõt!BsHí”C%h}[*áÈKŒ—gàÙÒ½žS®êÐ0NïÚ$Ø®Ãõ޾Ê/ðÑ¥ýiC#Ü Q !æˆKA5Oét#Õ]F–÷Üh¤ÚáL=ÙÃ.Z…S˜ì.{FÆâé˜ÿ_-lUŠ ¬DÀ²VOYEÙíÑ!·+ršÈBÊaœ3L®‡Îã¥I;Ú ÓL¬ã¼éÑ+Nè©­õÜcÚ~Õ€lK”XC&¾[.±.IHáRú½þn¹òKif7 ÝåS³ØçÞÖËen”dcŠ”é¿>W”Ƥ«bRÙH Ú³:8¥Ð‚6 kªR[âÕ¦É[ÝqJîÕµ¤x-†é©—&gRÈ‹Á͇ëiòT*ˆA׊„â(¥ןAeˆBU삤—#fh•M4ˆ5d±‘í³-(3,ÛfYÀA “®à2OSgÆÍ*@€{-›Ù ÕJÿdU©³-è°°&ÛÒ xx’B´mð)_«góÒc6±í¤“=sY|©ðFè“k£ \ZúC@íòa²ê«}ü2©°ÜHS±Ï,õb!éî³»TÁ³ËþÇúàé6bW2ØËñÅ`¯{3ë$kºŠ@Íî,2œŠœË9ßršsÔù41IUL-i¤›V’`ÛXÁ64‰ÀJ Ž4”ôÁÊ‚8¤EÅYQA‚.‡"D„&(tØ"ÖK ‡bs(A|‰ú0Ê>½tE˜gu`„yÜED·¸¸féQöE9ÂÅš(°Bª°Saýl!hêC:’ÝE$[桎 s"5G²mÚJRÿœÃÚxztê2'Û0gY­-hnåض–Å.<´W“IQ‹â׊út—« H(–ËËWè7b󘣈朹Ê_ž™Fç1W#O¢C@!J"8ˤxOd8H–‚!3²5Æ!E^†+ÜLäU5–à¤ëñœ¼tkð{ÂÐ& 'Õ?»=Ö3ÚøRÜ£z„†.±ÙbAPd¡b%qULÜß3ŠE3Wbjñ´¤ ±{1çq­Û•ÈO[² ÅüF5:EP;˜@.:ˆÌ²* r#¦…2P®.‡¼Ù-^àOwJñlõk¸}a&Ñsÿ/¶y`k¦8žv8ËùLtô«Ì.Q@!_A0‹vyh?BaQ#PrH™âÇù/*L09Lªˆ3(JŒ[`^Ò>aƤ9žåùõãg›¡  /:|·‰ä‘¤äœNn¡ »Jª¤”°Ž.ɲ¢@8豤.K‚û:¢~Š‹dÚ.O1#üꊳ»Ð1Jø1—Ðñ'µ€ѹ®¹Ø‘^¾°‚‹‹aÅ¡;a£GY”`"³Z‹,FH6@ÈHƒѳ! Êù8‹–¡Ë?ýSÛ)-ðh2ÖzŽã¹t’ƒXІ|¨r»§hÀ,[@ó*Fã!µ·8*³‚²®ÿì5Ù¨=k"Œ’%èj6Ééñ5üág ¼i‚¬"Ã: Aƒ6@V`„6`Êi‹Q9Ħ’1¬Æ@ƒÇh"0Ę©G¼œö+£&€`ÑcÂÑÂIX²¨âð°0‰à‰&Ð…X¨…\¨=VS5¯Á¤VsŠBÊïÚ®SjŸ1  Ë5<£«“³Zš°ñi„Ì襶1£gº–,9›“”±pÁd›Dx 4H‚JdF0‘ñz,”ˆîJ?Ï B6ˆ4@‚Á“8ò³³Å›MòGHjY¤áÙš*[ªí@-ïÀ/Ö+Š”ž{2¸Üs‡©ÿòBC3"6C4Ê ©(…Y¼1º¶_SŒÂQ6Já˜Å£¢Šô1Ÿ“Û‘¤ÁÏ¡>°@霔#p+)³®àÀâ›)ÄA÷sÄ~Ù¸ ²/¦tÊä°œà(Cª)¡*£븯"‰8p“ÐUÛ2ÝcÚ¢!}²"ôJG‰["¾NËà¿Ê r‹³ñ6æk ~z‹»«ÌhŒÆ˜€ªÈ +>¹ÊŒ0 e„©ló=DeRÇvÇÔž­@©¤7åàÌãУ‘˜YœJ1ñ’ž€²R뎦R æ!8²S5‡< ÞrÆeú$¡8gÛœJ1É1Œ"à˜ÿþ`¹S‹‡aŸ K3‹ÊŠ6¡ …q¼PR‹9|, ¢Ä<Ê2â>õû“ê3$š¹›+Œ™S i±ŒèˆÞ‰àž{±Bpž0‰¥ ¡t±“’“(8湤6‘Vc‰Úˆ#¯ÚäH#«ði"ÿñ§˜q«µ‘„4Ø®úÐ0“ꥳ¨‹Ñ”È,>ü‹]ÂËú¡_%ï ·E›¿èú¾ ,ÂÞ଄`4 €Ï$ûºˆ¦9—F’‰pi )£‰2-Èò8-";Kb .#Zó+èZK Œ³KY Ú$³²¨‘¸ñ Å16éÔ“ÄK´ ¹œÙ!$h‚E1ÿ{ } L(Å0—Ó¿…À¹¸ D F(D{T?Î@Ä„ÐSœŸ‰HÏ+‘/¡-2“ '/¡Žþª²û¬ŠŠ£pGx˜²ÜªòàT ±º!¾Æüœ]£ & ¢4Õ°ÄÙ¼çœ@÷±¢ÇëH…ùCÿе C‚ÀH"ŽÂU:›%Äh]³¡A?ÏZ– ´·ø"`ƒ lrDQ=f!D€FD˜ÑhéÌoƒsщ˜ø´"WÓL IÀOy!ƒ«½VÛ¤‚ã$È!¾YûPÇ$7ò⢖º”A³ ¼ ÷ÙÒúµü襨RÍ©ud”£üpƒÿ"ÂKhc ý™IßôŒM¡ŠžJ:lb BZšGÏ Çx,FÈÍhøA@•Ÿ$‰àˆƒ+É–šð‰“`T.$'§‘YàÂÚ"VcMä2°‘ŽH(І#7•ºLüp<`+AŽÂ¨̨ A®Ç˨Ô<6]1ÈÁ!¶ DŸ--¯I½[³kßTÙB<ÇñôŒÏè "h’JÛ Æì¥Æk !”)Ð&†h’ÍR’ne B½ li¤«ÔŽ~‹‰¦ª²SW©úB @8 pþDR¢IxR~A4 ÔP·A3¡è3XúÀ¶j›Iy si»ñ6GILAÁ0d%4ÊŠÝPÿÕÀp„FH7p„‰ÛÙ¬Âq9éŒz„7lj‘:Í ´Ð¡Rå)ø²‘Ôˆ£Éî8­/™OR;!Gò01—XäO±|HKŠ’È½†D1,]|½¾?ñ-îB”T=‹>¼0@Î4š¦é#óm2®ëQ´ÙÃÏèB÷°ß9•Ö³ ËéId,©¹¹ü°¯‚CÄâ*Rɺ2L`Pâ@å›Í”ëŠÅh«)ª ÔýPŸ$ò™(㵋¶X4 €à¬ÿY®  dDûNûaâpëà 1šª:*‘ܨ٠s!.quM ©¢­NæœÚ¤w-8 >¹k»5*©!24ud6r¸\-à|ý³:3¶8™&FÁÍ7E¯bX ¡Rír ­ÀŒšë9ñÔ G%G&aÉ#]Î,—+O¢­{Y!rq‰&sŽEuUÍÛsÀ½‘˜^‰L-¸¨@;OF³+­Í°häÓ€S+*<6<½Î\¥(ÎÕÖ5Žº–ü˜L KÁy°­0—Õ µ Ì®X6àÕ¼z,PvK7üPF"r4,z$Ç V¹ÞøÓ$aÿ  ’(©Øñ…øä 0¨\ÓÒ-‚C¸K¤Ø\ŠY“léží*L@I»1c `éKoìÄl¾ ò@˜…My¥|=©«˜Ýß ßÚ!¹Êic¢µUA¤FR˜êìà—æ9gQ@{¹ù@hV˜Rc % (Aý´{ÛŸàcwÚ’îffyͤ{‚ž×Ô\Öƒ ƒñ¾ ¢€a´GÞöIç A`« à™Õ& rN<6lI …Ù%b#(Á‹6´ÕÓ¨`G¸ YøˆÃI~LÁÇBÊ)ÓÀ)#ü`Ì B•ei½©Ö„À[n ÑH ÿ$° C‚Â';OzšGz'I°;©¥•×K28å6i¯ŠüÆïúk¥¤zn¶õšÎ‹¶H… (k{NÎò½ ô¹Æs"h)ºŸŠÂ¥í‰©Â^‹Ë@Œ>Oá°‘+“5Ç$@„ríŸ# «èAbrË•jö~Ṳ́âʤj &Kªëù’Œ~ uUW~3°£øÂwѽÞ-|)jm8)-Cí¹X~1 *Ãîõ™Ù‹á‹¸S³j4ûÒ £.¹ŠçŠáùÉÁ8 VÚUS—žôx¬iì69"Yªp#€r ì”wC©Îœñ¹‘-ªC'ðà•Àõ­yæ"KÛræ³)$j””Ý9ÿ*‹”l.ú¨ÃŽ‘O1CL¶ŸŒ_¢;ä°ä=Œ‘$1¿.Þâe%ÿ¯×¡ÂÉýe÷íb áò97î3BÊ1vÚ¼œ+µµe=£R ¦ÒJF’Üá¨\Uœ—‘v §‡M®’zp²ú>YZyZ#·îYmû‹ešKEƒ°¯pÁbÊ´@—Õ‹!1`J"‘¨…sŠˆ(J !X"E’6%IA"‘E,èPâ@ŠI BL‚I‘$$JŒ$Q²$I’'U2|ˆòeJ“1aÒ$ ‘D’$MÜDqâ„§Ï6N¢ðœ$gg“¤Nt&m¢$i’¥N“>•*uj“¨Y•JÊšóa’‚(&nDâ1âC´ÇRd˜Ñ`Ø;¢(Kwc’±HâÔ‹°‘°ëÿâÄ[w`^b ¯5œ&qßœ( ¦€+)g’F”'$’$M“ˆjÓVkPlÈ%òlXòbI²gÓ®M{$b²Š=Æåmaâà{›%88jÏ&Rš8‰ãDJ9rdÉqÓ†ùÖ©Zu:Š•)wðÝÃˉc¶NôÑsf½žÄ‘˵®Eb4ȶ!ñÕcS Þ¸ïD¥aÔ˜,Š„“@ô¦_Y͵˜qH(QW‚«åÅÙb$´áˆ$è‘Wè]¤šEjÙgßDdqÆVl !RJ¶É(ãF$Di¼XR$±$õXÂ#Ù#D)±ç„N´!…OÌÉ!‰O‘`U[I¥ÿTãÇÜvØ•GŸNyY—UëE§ž&¤áä¦|±Æep‘‘E}¡˜Qn|E_g”½YßhòÁYjrñÇQDl•¥Ð~ƒ¶ñ‘õ•(§K¥ÛŸ’€F) ÓŒ¥Ê6Ò(D„†\£²ÑÈ«oÉ*­oávZË õSÒIB¥s[m÷%˜JmõTV^f^]!X‘H’¥–XAIÄaÉ› j¢£a•ía!Q8ç¸ñõ™,ivVb™»WouÉ­»ì¡ÇÛ½÷ÖÅ^c9ÉéAiÆÚ\{®6芛âäЦh°Q«&‘`ª©0V[E Ñ/¢a–g­mÖÑj‰ÛPÿ9ýDÔPnü*PÉz§%SÚ{SÝ!›«%Ml{щl,g™„)_–&¸V­qÆ×VEï'¢Kœ šb[”z #ÉâuaCu]Ca7bq6ï~Ž„(µ}ôa¸§Õ%1Z :><IÏxë ¾ÈÆiÞV¤y–8×r"ÑòPSv×ܲKéÜeT5ƒæåâuˆ0E‚6ˆxH–Ä¡‰B¨ý'úŸµí¹ó2hn²4¡b«ÁK‚Ïìºï¸Õî›PzÄ7¡^V(Ü»lˆ6_Vñ=”"ÒstÔÅUKg-ä÷Œ5Ê7Nÿ‹C-ÕX™‰?ª<”$³ü*…ÿsZ!;óý4»1Θ;aú‡ „8;QFy‰C‚4Õ”é!B£•Ü2BJMF-r‚ÒH ÁýP6•yS€²½¯TF^¨¢‚Þbš6#+ð”ê8CŸB)oúA!B ±Ä|µiI’öó£±t)ÒZ´à¤¢Hâ(ÝñþøÇ”§ ë)I(wºƒ•&tHˆÕk‹\N´7<æ"m¨C.¤¾˜e.ø¹ÐdèUœh/m˜Å^智„DN„‰µÅœL0+aLÝ £åÝ. ­pF+Ü ™l¥`‰¢$eHDü¨ ÝãžÃGpMð,W»ã68´€ ÿÀÄZ €W`– IN^æ“`ÉlsSlJ/¹L.5q€yœai(´6¤‘©CêÐt¨ËKJg3 m°2‰V$!BŽ`S #…Ì©§©¥HZªTÝÒ².¶a’ã[䃶")jŸsáž Š(>\âò„c! HÐ"³€Jhª‰%#DH”h˜ Ð0•I'ûãÍþ‡¥©ì,+—‘²äà!dFnÿJT¸IÖ¡IÑPR"7XÄzš,àÎf²¨]‚Á²¥‚]»é$Ò;5¡%h„+ì9=¡E ™¤^ CÂ#˜OH59kÿLjÔ$‚ …CA¶Z©X€¯”($ " <\RhL¤Èa¤[ñS.㤭L‰>`É”ZV0ô8‚`yH 9%&Bôºìà¥ÈàPSDx2LCƵÙ=vŠ7rŽd<”L uU ¢™íyÒ†T´‚7M°H™Ê¤ÓÆHOSˆ“Ìò²(Š´ÈÎnæåƒ°¡E®ÊáÜT„Z€DDAÀ Ù°‚¬@UT¦ïk‚•Ê,Ú`Û)!r@Â8— ÆB‘¦–-êm2MFMWžü}ª[u™}®%¬ˆãÒD§Á–X…Y$Ô†Ì& ™6y \ÿ‘ˆTè„…5K™B„Ó84‰™›H†4$ˆ äGE*Œ´# ɬß"ŽÚÀPÂÝÈ4²#î óšd–ˆ €î®T¬`âŒX÷ë“|uÒ3”eø> Ä”uxjIZ Š2 ¡ƒrRÞõ³³¿ä-¬a @ævÍå…É»ý±] 퇄æX¤åD- $×&¤"þuOñ„µRj{uúž¢v´ˆu2 s`j³Î!ÄH% ”§|ËM–IY;ûR•ų9K@êgnú— SÙ–ê×B¬c¤®×½<§ Ãý‡-lQܹ™L¦ž6çA¦W˜ºàí¶.}“Ï€ã¸ÿÕ¸L[õ¼Þ Lck›3ªi‹¹Vã ¦ì„oÂ1ªêÚg¥ï $HàJ®#ra¾E*çŒKS±„ÚâÕKÍ-èyLòn½6JÄÍ¥´[d($/@òNùGn!¡€ˆÙšU›ï%ÕŒ[Rf R^væ÷¡fB•ç]f÷ "4Âl¢|–fT¶,$,’ÅæjÆ‚Ãȧá A+0Â2Že¯Ü—^X£|_Í…|ÉVž ¥I(Ú!…ÀåþÕ…ö䄾ø‹h]è·´(zÛ`Æ!ÝÉ—qSAr(¤”MÚ_}`Š#dXƧavË †ç ÍAÌCí“K”ÿá ŽDv! ÷ØÄHL—Ý,ÉÔM‰i| aR)‰™ØMã…ÉžSÊ“Rz£LUˆÇUì ¦¨©Ò-ã´¥–ÂdÜ\X2UbÑ{``•ŽYÑÕø]¿˜+é¾ù,ÁR¸’¢j¾* Gê¨ÐZ.&IzYÀ…Gw¬G†áhÂì(%p†R¶DÏÜÎW ªGgyËF„†GµEWb’¸¤€WèÉíŸM=ˆ5\Ì‰Ž¶V Qþ¦£¤ ÓÀPÎA_ÃÌ2Bl˜ |m€@µÎF¶ÂÒA© N»¥„­LW‘VÍß]=U&óu•L9BhHÿ˜™©£¶à8ÊŠ/n“%V\•Ö<ÞÐHOH d©ÁÐäÏð©‰gªþë»ÚZõ]öT*·0á˜éל€gªÍ<04\ÔlÐÀÃw±+”æ-=雨š­ÄðpEN9˜¨%Þ˜5Ïæ!W)ɉ ƒèކ!DD„ÓpHDµØîdž5iàe…q¤A ÕidF¸NšÒX8í’‰rÞáäM2b—QàbÔ ]Õ Œ@Ãlä,Û®-,]M-ìÕÝÁÙª,\xrÇÎâd0áÂ!ÁÑÖʾ V¡]Ô¥HÆM Ñ¡Béêê ÿeüšÔS¢%CP‹ˆøè¦ùWmõÝ{*vVËí(8ÎHÇÙl ÂÝ<¤-yùÛÁÌ^íð•ÌØ- §ø Þzì©4#hÔ&©TÔ°…ÒˆËEiö)\É)W¹Æ˜Œ„Ëì“®vV&\q™(ך]#:Q áztäÈÕcÔ _„®ÍÄboÿF2‘ÈU"'•€ìz,<ÔîíBƒÛÖ ƆÞòÕwÙ-,uŒd ¯FÍN@™Ø©+¦ÞE"¸Í­_´°™‰Z(o,n«îŽkñѽ|Ö´gˆî†îØŠí/Íb¤ÿHÝø‘õåͽì…ö „õcþ:D&.AݬŽh„]Ãç[ÌHÇ- "Ì,€,Ðn÷ámðÂR{ðsp¶F00ïlÌDCjÊŠR#Q&D÷µe^JšêæUÊ>qú„û>ÖJÐ8‰Å¹1M ¨ðM f$ÅòÌÍ¥œÈËÂÖñ4fÔá žFÞ8˜%§àx²' D×¢ÖA• 4EíÕ½1pÇ3ôÕx=é¤À+©¬ß¼Äß_KÝqˆ` @Ž(2ˆV§Ÿ) ŠUîŴɥ™ry‹ìÌð†fbUVFèADœ³aHb9f‘BWè@V}ühÀÍ¥üï%[ÿ±NeŠ?ÝS©,™Çê-,1ÌFôʆXŒ @Ç„@ËYÃXe)ÍÜÁEùÑzΡº¢ÓB¢eö¦RFóDžaÂ+ü©*æªòŒpWݺÒlàõ,ÕR¥àt2¥Ûµ?:&Z& G×l2%DýÛ4F®_Z2:Ý¡M:`.›ÿůˆ6ŠÒ‚pud„ÕÞš-‚î?!ÍUš’•ê†ÁX²ªA)s¡ G´ÞV£$H£ÐmÁ ¼´GlRÉÜ¥õpÐ c-&ÓW=$y`ÚéñíP"Côn±è†c·äNŠgbž×ä¢ÑqƯۘý<–0½&QŸð1n)Ù54C²6{4èö^LgOìføËiq›YaD =Ô:«+Ðî»7v< 5Ä’„WìË~|Æe¸3½-ÆœðgUó¸œç…$ÈBìh¯GìªhÍ*p¬‹¹îüº·ï‘€K#ž2¡Šr“Äå…+ qʼndFÕ {EZ$Œþÿ âna*UŠ {iï¢ÆXKq’ì"æÉUZ!Ä#¤  .E7¥ÐÇ_•£ð¾ZÞŠô‚hoÃlØÊÕ9b.“7Š3eç|0D³œ#þ~/§ŒgV™Tä\  ÷h$yWïz:+úª§F°y¹Í?ë±YªNõ4ÏšE†ùl³ ŒHäh½°gdø4K )B¬qÝõºz8‡ …cVµ‚48ƒ4D®KC+Ü839 +ž4"²®N\u7`zLÉQô‰HHH[pŸ¢wm)W¥Àp†žå‰OÒLž†€XÔÎot'Ü(Ü„í&@&ÿVà•õޝ>«§¹–hƒ›Š/5k¤+Øz3¸ ¤‰bˆô»44C+8Â1ý8BŠô„8W %ÖR2PìÄ…¸ÄÄLLßè[¢âÛ£Þ”1ª¡–ŒJŒ¡Ïï¤ zšœÜð|+̓ãGÅá#ÏÂKCŽ">J|¶h8Lz¤o$´évyˬ§"†»®ˆÓ$D#8C4„È[ Å¬LX]`U38º¸U9ŠÔŒr+ƯNä¢E´AÏ0GtLÎQHAKQëÞÀËFÏ-ŠÔ\L›íey*p€6zðïž_·àcÌf¨œœ "ëI«¢Ÿ•|†:ÈÂL7Þ­«UqÅ6ýÿý'gFÁGñû¡€˜Y§N<Òó¨W­àûŒnÈÛ -ç^DXBWX”(Ç®Œ‡¹ðŒ@+´2mllîÖ,@C¿auÿ滳[{žm‘>†E†!Ù9·9Ï• Ð7Òäb8™5xÏÛõpa#Ñ ‘´ØÍ Gê\Ÿ k `~+ø}¦œt¥Qõ—7M#4ƒ+ÀÑ|àæXS¨X\hD‡0Gr¸@8i"ÇI)m’ (‚¢ !>$Á X‰00´‡I”PH"‘EH¦LråI’&M–@R¢¤L‘EnÞLX¤‰šH-I.´9SaŠ$ “”8ŠÄh$IŸ}ª4ÿ‰QU^µz´I³b•‰•HÕ§W¿¦`ZéW¤D…ÂMq•nÉ62\é!É›y“´qÖjnK¼E¤Ú´{4I“© gF.ѦÑà¹vé&TLE7$ü\VNœ&¥8q#¥IêÓqÚÈ™‰9bD4hƒˆInŽX…¤«4d^œ’GÚ-ófJÌ-MfMÑ()à—w!K-Œ¶zÈË"½§Ìn’óBÄ²Ú eø5óuÈ"•æD¡œüÑíÏëþŲsá•;×Kc°&ê2ï=¦®úk¬&s /âRåªÊ)ì&å"s$0%qðÀ‚$a Ó¢Pm &"q#'’ˆ‰ˆjƒÿè¶dÄ­£Œb¿¤‰¹÷òZn® 3kº¿’H£:ÅDËŒ±´´Z !µx*ˬ*ÃÚê¿£¨ûï+ª¢t+A¤¼$“;¬î[ˆ?šÚ[“)›ÚäÁ jÅ…‚ÎB1Ÿ[¥Æ˜œËFÜЬVZùϹúJh‘Ai#¨/R± %VlÍ UŒÄ‰O£€ ¾±£iôèÔfJ0¹Iq*ŠQ¸ô®¥<5 ’(çjB(†¢»@ø€ý®VÌNŠ3×»M!HòÔBö¿†,lð¬fëÓ˜fÚÉ©íôlÅ•ì;6½¼0”)»ê«Ë‘µÖs¥•skr¥Îܘ ÚÆ$‰ÿ# 'V”bÓÔâpÃS'J\QO‡H½‘D Â!hˆ`7f@ƒ"ï^œÉ$ó&µéº"‡;öEãšK±ÀDúϪ­®BJ©¯B ­™ÁB¢«(¯ê–½ªÊÚÊ.¶@ÓŠ)$šè«0ìTz½@“ ŽXÄ\å©™ ¹Uº&»¯Ý»[ººHpãjŸkH¶ô´17¢¸ 8aM ÕJB¨ÞÈ⇠"â¿+b‡X¥öW…ª›´&¡iòغõ=»ÎRK)ÍþòË£K@ìó“l>J’ÏlÞÊs—×›Á2%·¯±ôÚPËò9‡«Á6ëLÒ5ÑmZ®]Èò…P/ÿ’(gù+Ϙë:ê+KcÍ „ç>Ø 'äx-_åî[ü9> >üàkÛô^:m™ÝíäÚ$ê"¯Ø•$!ÂOù2ÉxÍY¡›ÏRlâûÏqN›LÖFÀ44[|Ý´è42 ¸©*i8›€’q].:OS T0uO5q(ö"9$T ŸøP›ÕÄ8„Ü®ªV¸ )e4“V\f&®™©v`I"U¦3 esfR`b’˜)6…ú [ô Z ZWñLÚØó²F¸â[]óaZ§A9êI)è~Z".¸0È8nIA¿ Õ„& ¬ )ˆ‰ÿœp9D¡ ŒlÑ\Œ7:ã©k'š«d UV$ãÈçOA©šüN¶·—á >%;Cæ÷­$Ñб@—çAÒO< TPì#šÙ%mwwÜ »œ JüÔNRqÆ›ÜG¼°HÕ©WaðG/Y „­p„BาÿR˜X#ºÇšpªÈ4ŒŒBj84¤!c+ ÈD)¹÷H’C‚ Tö?v)È<ÛÁIfÒ†¯Ìd‰bŠAÂE49)i…WÊ–´hÆWS\É jÄÔi…uÿšDÆ‘¬‰ÂŠ)œ$ ¡Em`DžÊˆu2" R-åUSB-Éy’?BQÙíBö+Ró)`Ü–ævuÏ—Iì2OiÕb’/–2D%ÍÙ`]‹R4'Ò*„7cJÖ´™e.Lo¶“Æï²U®±ö>cÄ PÚ†ýq ’ýXZˆà†2 rˆ„A®7ÆA猂ié/ÎQ RMÖ Û "h8ÉZºÕ­èÜÏq#9’/D¹÷¨Œ[•ÛI·ôšÀ’`E¯T² ƒZâ’ά>{¤uÇ3¢@åe^â•_\zËãå•,ïw‹ÒŠD¤+ƒkšb3™‰G’x0R‘k<Ø4ÿ°¡eÿ)MƒùÙ ²ÆnDmB,ÑH„a+1ØÂT4 Bh(Ñ¿dí0/1’|´+ös8’q\ÏZFÌB­œƒZ•”$¼K]Z‰Ö$Sg]ÐP’%$èKs9à-¨Ÿ€ý* ÖˆJFµ— ÒÏ׌|™ºÈuŒ³¹Ê:éĆF°!0 >dÒ‘HÑ’{¦1jiÜH5;“M ¡‰ÈìBay¹£ ±ëGíœWQIȉ³'˜«˜~×Êyšd¡™1žŒMÅ«Pò‡¹ª„ŒŽÚ²´ñKK¹ ÇTl•iRÄOÃ×™1ïJÙÁI·,‘°E#æÕ ÒÿnÝ+':Ñ)KX✬1Í#Û£¨ªdŽ=¾ÝüNìÎ<3îÈÀ]ÌÒ\V–Ÿ•‰‹MÚYš0ÒF0(JT™èS’‚ѬX4Z[*u>©v»Ûuk¤%{&“íâŒ:Vƒi2ºkÅêÚA¹¶¿³¬ZÄ94¦ °d‰ìfDÍºŽ„šM+ä"Ž&¶2Ð2O…. ÀBÒ@Û&Îö6¬ÞÓÛg¢XQ-±ÐeºJT‚°¿r- byŸâë2ÆópQàˆ¬H}Ý4¹ @G@›4¢ÆaoºSÀ5ɸ4ÒŠÕ‹•ä¼ÎŒ\zýåIgý%È·µf´¾µ9lÎÒ$ žÿý‰_€³UÄ6D"2ÑpÓ…‘’èWÃ&!„„H×3ß ®·&,k3ôÛ‹ýŠ#!næ.1‰àÆ[º¥¥ÄÌŠšûá·5DW ¹>ÎXµŸÖÆbòÈ„Õúd 0ÿUêci $Ñ(á4ÛÓ=ÁZƒÎ„)øœ¥I0i#‘ü¤˜dG7á¯Ifò±`˜©~ÈJØòžÇ”xAf\“V^¹E‰Ù$Íeë'Š¹á­‚E&0Bÿ ­JΣÂožVªXl¢]âbK¸C]xÌ’\%0í¥äˆÐ"þ¨Ëv†Blæ¥ö$ÝäÈ("¸œe–‡°æ%ľ ®ŠÒpŒôud‚ËÀ …vº*÷.¥÷éS †ÉÖN¤ ÕLA…MÙ„¤ÙXïc< (þ„HHÌ„-™Ì „bÚdPÆæ“¤'¬Ã,6g*°spF¡¢ëÆK“â¤bL ËB\Š·6M0P‰è0cФ0ÐÒ®`M&˜Ê£ƒL¬-ÜÀLƒEiÖP¬œŠÊœ„ïÀÜ.2p <,«^D8jb«†„®†„ž> ml%«nŇÿÔ§@` *èéb§Ò#™ /EéÄFc>‚ÞÚ¥è8Çx–ækvH4.šá‡MèƒÓ†êJ­\’ ÷Ö š”¢ ¸¦ ô16B¤1xoÌF˜خ‘à&ÍŠ ÕP3Ðä°9ĪUäE:f9DÆ"³J8‚±!„%„ÃÍ>2$A²c&ÚÈhö1I$Ê,VÒvJŒ²èZd§vÍÊ í¬º¦ h¬½ $•<Ï(¤¯ÈÈ(RwŠ2—J²üê(’&6䀧|ª1F„ ↑V„ Ì¥ %a!w1xÑ7b#H g#B€@€H `-×’Ôò-Ù’,Ù’ÿB -)n#Ø’#Ù²ÄÒ'0}‘-wä-Ê9MÊ B®I$ô¥ÑD¥en†!D¦:BHOø-k@­(kMmjÌŠ  i« /œÉ›É í £ê*6bí_nÖBk†¬âÐiÁâ 4ºRÁR‡3u1 n(9•s9™3"h†-Üñž¤PŽh%Ý‚’Ädc,¡\†*¨pfÎjVœpÆ4c‘.¼èÍ.PàNî¤ „kôlŽœ0°¨£,!6é4zêzâ&ø¤ÀœJä¨ɨbC8“¯ŒA×,W¢9!4B#”hèÇ„B¢ MEÝðÊC¢=Ý‚Þÿî‹MÜQ¦*‘$H³OF­$:Íü8SáØV sÚà)ì®’ ?E „{„ªDIÍpø&P ,w‘n’Ï8‘SBôIÅGh¢ú&cJÊ‚g`±´[¤,Œ&Å´…€8IõTNçXô7ã@2Aò@\(i¦£Øçüv Y¾æ§P&؉j>£­ºì_I]‘…B`°â íÜnA×°”8×0¢¯6ÂJ1µaz#F‚æÚdC¯‘Y~F=OÏqTï'~ö£¦ž0kXÍ32cáçÀ*Áê âÀ\¨ÜTê€ÛÍgÂñõ*h(jô‡†A,aSÿzŠ÷Ž…Jä Ó,@…4͈*A‡“8±5ù`!b! AùH2µ\Ç•T8çA¢fÒÀ&dœî“Д<¤&Bó'ÏkšÊ¨K™)H£ÚôW—„Ø´ê*š!xõWÕ¥>&m$A’#EÒe"–Ö”J«"¡¸“AR€EÀ¢ Z€à¢nd›’ Ú€ š œjeÙàdùÑdùqäb„\͵f‚fkƒ-–«)dA¶"*ª‹(K5f¾:³‰c€–ìy\ï=âªyúH¼®¢ 2!ì g¥ k¢qZŽ"(¥ Ú”£jLsœƒD³&ˆ…#±j9:b_"#‚®|„#ÿç‚Ñ>²a‹£aQ¢”ÎÕfkgÓÊNQ}òª€f¢È†l>œÃ@L‚¨f%¹ð(»j\†§ ê Òƒ$!þ4&âs.4‘XÚ€Wã` š#tzÌØ‚ŒÈ·æo,­bLÕ|¬clÉÁ’PyÔÅ犬t2îRop—TFPda‰±h¿£ŒV¡Žó¶Xw–¨"ÿÄ«+zdt·kMý-ä!´¶&e‚2è*xµö¤Ln“ãE€+”èGAò‡ËT¿¿Ø%Ú€ÂlËaÅ]ã©}ˆ#'$Ì`fm(Øø%8‚)‚!˜Ð50:(±ÕÎÿ€âi¢â:„b²¢ÅW6í(´o( $ 2¡ C!ÐCC³i£(v~ ¯ :!0#$0Î!ÌÇýاcî5—#äRí6žjë^«û·X²æzHÑ$¸f9`‹¹¸‹½ø‹Á˜0TÊuFU°nFf^‡;škK|Ò^®ÃJêúb>‚¬xP 2>§+t2W@‘äípcb‰ÞÔ„‚8P¢«Â<˜¤9†fOKà©`‰Ù©,Œô 4Œ'9] $%‡8Ò ê2‹Í5ŒY¹•·xŒcÄvîˆkM«ås`'—ö„ŽÂ‹qcØx<(>JŠUkW`x_×V2ÿÔí*Z>I,C‚ ÓÄõ"0äGs|iÈHâ@Fct5äK­c7Ö®4]jô©ø«ø‹ëD6%yr¨©rãÚY35$‚ш7–Ø Ã1õ’™“È‘ãÔ@Ntµt?HÝjÖš®²Ã@Ž£FÕ¾¢,nc©^ËClb›Ë¹k`äÐ>b@€Ó›œ¸%Ç™“°7SoZâ#ÔJ¢$*Ž"h¯ëì ]D÷¬ˆ®Cújy%jg¢ÍÑSä["™@1 ŽÉM†Œp“Q¸Þ¬ßݬéÏ%p!”¼º#âãHZâç#>±1}9q:–"Ts¤EæTŒZ²ðÁ”×m—­âÝ÷Ô}”lÉ\„ye¼-HA¢¡^÷[&P/dU£Éf¥ƒÿÖ/ qêR.ã’.ÏRˆÇFH /’ ~99៴°Àð•SÚŒ6h‚VQF±±X·KC e–m³#¢@á]ƒŽeOíâ°ò‰WšLK‰£Äóì‡.óò&¿9É2{Ž&p,âÃöû 1thn²(,Bàð“~9³ñ›>„È/4¥£Ù.K5…šŠâŠ`Ô&º.ÚàÅ'ßîo–(÷k<ˆN=Ç@ÈÚÈüç yW¬€ïbi¹‡FLŸÞ[çúJQ2) è~Ã-1~¸­Ò~‰ý¢H EP”@’¤M) –X˜‚H †¦8ˆ1âE$IԱð F‡ÿ94Q"‰”1žL‘Ä™I‡ ›$I‚"I‰’iФܙ†áÎE\á¸Ð!GŒW’pX@WδŠÑéÂS¢9X0ì̉: ‘ ­ÚµlÛº} 7®Ü¶0Éæ¤hs¢ÞŠ9jäK6äIŒIÜ,détdI—:g4Ø$ÓaŠ{.ìWeÙW–°I‰³&‘¤hc󰤕>‘øôÉ( ›DŒÐ• [vmF‡K$&Bô±C©¬0òFyä%^ó¦šÄÅØl’ÇfĨy 6hØab®øñäË«%Ò·c˜8Ãþ ÌRsð¡æ$K¿ðÇ.ók%aICeÖL6ÿ5’D^¿ÁGÙJ•ÐH+)Ôjކo±¹¦›lÍ%Äq=µáÓ|,• ‘R\¡A@QŒ ÑFm1¢‘Ý¥Ñ\Dt…DO=±‘Bh¤‘Òˆbæ-É$“uÓz¦-ÈP‰ùQXIB¤@)bœ@ž(Ñ`‡åÑÞe¥ÑŠ3Í8ÓŠ+mFãL#i(¦ž`Mh…‚3Q‚S0ÅÒF_=%ADn!™OPÖÆF#HHŠ¢e©4‘˜:mö á©§]ÇF–*¢Ë-ÔrAeå›oT‘0k­²ÞJ+®¶æÊ뮾ê l¯ùå VX&æÞY¢ð×Më%Ƙ'ÿ©8–fµQ}%ÑH3­(ôCTÁØJ+Ž˜FRG0õÇ-je‘ #‘ø4.QB!$ Dg±ÖkÖE*yØAÿM䯸Ã%‘PëÕ`}÷Þ—»g±bÂŽsìqÈ SÕRcªGØÉ‡µ¨Q‹f)±0K”Pe|]ºg‚ 8AðÅGg뵑J"-v³±žÖŒÑ&GÔY ÚtÐM(4á$ðÞçòwL…ÑÀÓ.ÖToc«ëÛ²ßmŶgõëXÊ–nõö•&ñÌßÝjšÕˆ Á ¬0¬ Dâ*óââ ošZª;±Fq§7Y i¸ñ´f‚ÿ©xöÓZÒD‚iÞ”J+“•…ßJwmÕF3û"EZNM4Q„M(%Á%Nû&p¥ýú¬’Ë8¥S_Ô`ÌóUÒÎÛ«qôY*ß›ØP„[$ ál€ˆTŒ@¿À—–½ë·Ï<ˆ:o”³Ï”™Øc1¡ p‹ $ 0ÕIÒ¨•MˆC4‘ Mäá—uÐC%2¡‡L|Q&ì Šô·V ˆ!^< Ö…@²3Æñ "jô©õ ˆÒØ@IŒàL†Ô’4G‚ä D5Ýežé¹.eJ“;¦²CƒøfIÒyJ¦F1àÄ3NÓC2ç6]F,bšƒÞUI½ÿ$jé¥0뀚LÕ*@k‚%2‘‰(`ôk±D³r—Yrã¤jö(JþkÌ¡2ôÖ€èSç -kȼ~!l)T1HP2È}ñ‡–$L›oZ©¬N=\ÌÍfÎ*•   ÌJ‚œµ©$™K+•P¡Qå G‰ÒM¤ø5¹j$ VÃÛf.§.y1yˆÃ+qè?XÖÁ&Í€W2±Ø-OSZi‘’‡6T£rHˆgo‡jú¡= Šæ'ÃY-mõ¢Ò|Ò#´þh”´I½Y×°Z¶¥r8«ÌYÙŒ‡)‚í)þñÚݪŠH/…©’7ù Ú@ªÅ-¶ÿ¡“Ç´3JLÐD,ÑT—4dq¾ÑDZ±/ƒ´!•XôôúÐY"‘¨}oúE›¸!§©ñ Oe™Éy°‚aÃÓ!“¥)à.W†7k§Q¬gHÖî–_¼ðBßQ¯6!Ù(ahI É*p¹DAJ‚œuOâd¿ñÜlyöb¤ÅA…r/- ŽdBFKY‚†ù¬gÍ-!Ì"$a‰/Ú¢µ°t©vCûÈï.C[G<·|U{3Ënõ“Ú•zòžóÉèÍâw²iQ„r=c'suÈÖÖpÍ[0Kà¾;.4Ø1ŽŠU?ã,Ÿ &±pòå•@·@™pÿ…inH–8äAP|JД"‰0Êa¿’Èì]]·œÞ„¸³IjxÒ#KF¤«ÚI•%7àÕ«“á*K¶=[¸(àký¼Ù"Ø@ç½’‰YY5=ƒ™¢\¯çÄ”¨‰Ù¹«¨DßbM§ Í{²Ýù& eV¯R…¦¸õV JA]°ß$¤aOÊžUktUZ9ñ6!*T#!¤í´Â5×idÚ€ˆ4hH6Å锌²3½YƵ¡ºý_;g½†¢ÙR÷lÉÍ*RHÀ!V*-šÂÍŒ†eÍokðâ­O—%m¥‡nsÝ6c¿$Ô¡ØmùÌÜTž…D@Ñÿ§bôð¤å,¥t ZÔt£/²ˆg‚.•³¨E*DСQ$†º;;IHåŒ3=ÉCëœh‡h ó™­£w‘ÏYϪ+XzЃ´È Œ€CS¢Xá“ýÅÂaжÕø Á‰ ʧ É’‚Ë|¢i zÎB©½”E/¢ÑÉ—(¥¯¥ lABÑI4Œžå“zèÓ‚£Ÿå ²‘Â_‘Ù˜†’RÕ!È$©:¾iÄ#¹Ã_êX[ýí`V®TÏù†S¨ [ù šðƒÆîh±é$ԴǶqøÊt1» ñËݸøøÎYªÙ¢ö,Øÿ p¤7u$@ˆ“(iñ=DP>O§\á=F'{¥„‰ò=8K‡8 "=K3WWõŸ’oCrxv ƒqÀÅ 8“qÒ—s—GqÐC=&@}â&Û‡0³FhIU\öóPÑ"hm^“ƒhà×f Ô}šÇ²¤K¦ç=L÷y@\'ueeuSHlauºGt³GzRˆ¯ÍÃ0D@<“†kÓbî–Kj6Cöc„sõID1÷cemãv['Nˆw2Àulõ´BPVÆó‚Ж?Zâ,Î’I ‰•h‰'VM™ˆ‰ b‘¸‰‘hjmà;Ò$ã‘¥ÊVÿ< 5^±rxªUo£ŠCÑT©E‹áŠF\^†"T10³²0¾ÈZºU‹âR)¾ˆ0t£PÔ³} …g¥<ÊS†S<˸Œ%†e*Ñ $Á`ÄèjEWh¶>Hpg»Ç=[qy•cy™£Ž´+àH%Š£8¥õhÏ¢\H [ÔS¶Ô>ø˜,‘,›0ç:3&Š¡þóe&P#Q Q3øa1H³ c&4¶:#+ÎØZîXoù†ƒ²ø/&©l I‹²8ňƒ$9’1I,91ù’Èø6iŒ*©“¸²=“ÆÈ+7I”: ”"Y”E‹Gi”IÙ“av0Qÿ9þ"QbøØë5S%aaW911 ÒRI–PR–+‘X<•"QiW=•X9•w ¡umûèðâ—$….ôP{É•w)%Ø…bV³˜p™•F•=å3Ž ™\9–QI™‹‰•ìq‹I‡ÑS©—‘ÿ8™¦yWZy™ûèD:‰eò—„d?vÁÂ5%åaEÆM¦Á@Uâ:É3ñ*¢–‰AmBhÔt0 ÚU1c ýÃ=ûyBXdˆ¶Á‘w0j9µ”Qj;¡%MœÑ£‚Á **Á :Üø¢¡>øÂDËwV7)²wñcUÚ3ŒÓS‡tÆû”ž´µ6¸&WsX`¹‰wÞcXº>+ÊkʵCbbCÙE8¤kz¨œSœoê}Ò(›fú[žqB_cPµ~j VkŠ,ÖuXp_`r”¨°Z‡àg²Ú2Y`³ Áa.µ¦ýб \jza,³F& ޹IÇy/ã:‡0Ër1­w‡>v¥­wu†[À9^VCÙ¦HPm,:o6}“—‡ºÀ­ K,”÷„v­Ø× ‰f<3kggw#ìÿ®¸ˆf f,”ÜZ¬:©HuƧ%‡/s°Þ‡Ëx`T|7Çs3Â*®=µD0b#&‘!_‘³-ÁèôG5"aTÅÃÃÔóÅ/(a°EƒÒÊ8¸Ø§ÛlÆ Å¡*0zÅPz•Í´º0¿Ök»3¬ªS¦y7CÉøVØœ3`ÛÆ$=áÌú2O=Œ]ƃ‡Ð* w†¬×ÐÔD u¾1pµÑ ]EðЇ‘òÛ«YÄš„%fys‘WaÕg®b,ÂùÆå &×jЗƒèè[?ˆÒ¬öÃ9㱌ÌjmCØÑl°ÐЬÅQ¬±õà–Û` ÛÿÌ3pm Ŭа’? )ðBGU¬PÑl å 0éd[ç*\TAÁV6˶övï¡k½uUÒÌy¶LY–RΔZ«±IÉb¬‚Ú÷[Ó…\¸18“RÚ —èˆ]ØAÙ…òа@ÙØ‘°@÷—ƒSÔ±qÛh áóЃCÙ´w£J ÊÄ9“r¤óluH¥Œ¹ª± šUÖǦEHÅ 52Ù Çx/XÕÁ]Ñ¿°" <0²@’ÐPZÛëPÌàÿB) €tÔö" Ú° ÿ€/Œù›;H’3tÖ@û³®zUMQÖõÍڔРWÔÌÇ6§ýG¸ÜXͰÐ%À 0ŒötÆnÆ®y·Å#l3;SJ:˜teµ7l,­”×­P=‘Ü)ðá¡l&“-Ö-„>‘Ñî+,Äèv¸XÖ°p|i ø(.œ-௴ŠaQ ò¹²Y«*¥2O±qO‚êãÈÑÐõ]Ô ÍDPÖ§]);Ž$2pÇÝ âîVØÎ¬(wÊ2QwZÈVËJh%?ñês°1½ÇÄ EPÕm08w4ëqõ}£TÔäÐ4?À) —ÿÐÝq|>>}]é =êZ}Ú^"û àþ²â @|wój"‘Ý rÐËöé/B"?vÛ`áÈ8Bë‘ kÚ±*õ’,DœFÐÓ6ï ÝQVÆÞÛ”…ÅÍr3؇µ‡Å~ìUCA¥a%Ñ·4%ôÒÃ*Ä !RŸ EÀ}Ѐ3££_9`åß` ßÚ H¿ý t³þùæ/’Eí³¹…†![/7$ÓVÇå›â.§tÕÜ1ŸèiTòa² XüÆ„‘¶|ŒìXU‹0ܦsÕÒš©¶ ÜD$ónÔóé»ëãȇ0‘` ° øbÿ)7D"EP*0l":QõT®¿%Ó£QÔý¥sH]lª¥*gÝ7‡¶Ù¦©ûÉt3aŒqã~¨Øþ×Î3±„3͹eΓåm %úŽëû\ê½G#ˆ‹|øâ‹xr°ôÿàx ¶ŠW:a ‘ê¤>>ÎÎÎCCC GGGEEE|||FFFãããlll^^^[[[...ººº½½½333000¸¸¸±±±ÍÍÍ111¿¿¿°°°mmmÚÚÚPPP666---wwwÕÕÕ¯¯¯ÃÃÓ““ÈÈÈÁÁÁ’’’ÖÖÖ'''sssØØØ    ¡¡¡©©©{{{ååå«««‚‚‚ÏÏÏ···‡‡‡´´´ÝÝÝ¢¢¢ÉÉÉÅÅÅ@@@eee888DDD¨¨¨¤¤¤ÒÒÒxxx×××ÜÜÜgggŸŸŸ€€€+++¹¹¹ÔÔÔŠŠŠ˜˜˜ªªªWWW}}}¶¶¶XXX¬¬¬ÊÊÊ–––fffAAAiiijjj”””ËËË KKK444ppp•••999ddd&&&ˆˆˆHHH]]]……… äääÌÌÌRRR„„„,,,tttÑÑÑ555µµµâââÞÞÞ(((===™™™­­­///ccc___)))???ÂÂÂŽŽŽÙÙÙ"""BBB›››IIIƒƒƒooo®®®œœœSSSrrrššš‘‘‘ÇÇÇ:::$$$‹‹‹TTT———%%%¼¼¼NNNžžž<<U@´NA1]*ÀÀÀ„*5¥‚ =Ê1éÅ`4pð€k­!D0B…:-\p€!ƒ† :D¨ª–­[:=|˜pÂ2 €ˆ$8”Øxpá„Lœø€b'€¾mß —®â…) ¨°`éO\ð‚…„UAžÝêâŒ2\ÌžA#A #nàÈ¡c‡ÀÞ¿ƒÞÀ#A DÈDŠÿ92"Äôêךø¢ÏÐ Mܸ…I8œýšÿì (±"í@Þ äijA1QH!И ކƒ@R8@B(\ |HP Ó†thbA6 ;!ø† Žæ`CWtÀ@A^ù7e¡EhmÁQ\Œ¦ÁlWÔ…(¹d“:ñ0y!À€`bL°—YnyN÷PÅNV2Õ¤Š<ÙÐ`$¯éÔ„@dÀ%He`Jn$•PJIe¢z2ÊgBœ††k@žé$Úž£m5œhE*ÚBltå¢ýMÿ:š§+F¹O¶±¦¤˜á„nXè뢣z†Ðp°„@q ‡@s„*)©ÈE¦°Q£Ç"ËjÐñk¬^éT‡@(°à‘w,€Ç 7 ”‡{ðч³­ ÀÊÕ  ݛᆪ%{ë@6D±D Ü 2„b­Â¥`HMüà™Áúò›0CÖ` 9[ŸÈЈx”È '(²ÈAÀH#8òH¿™ jD2¨Î<û<²¬ù Ñ tÆ“¨*$G ’ègH÷üóÒ -Ùfï±òl“¸AI$¹q%wLuTb Ðsç S\ÿ‚É @«÷à*éäðûKøâŒ7îøãG~¶.e¢ƒjlDÅ J”¿ þi›·DÕJ–<¢ %lr7œTB¢gDyCXúA§¯-yDvtâÉ'^ø€‚@žJG·ç$øî¸+‹RlD½Ú_£•V×]yí•ÖZ¡&a „"ÊòeðÚLe÷zI5ÀÃ1A ™müÞ¿WüxÈî` ,°F6Ñfþ×?:i/A0 Àén ñ‘}Šsœä,§9Ïñ|ÎcŒ‚ûƒ6á¾ y9Î@ 8PŠO˜â q¡r`(‚lŸ@ÿPÀÀõ§y=ÜáéTŸã@â Ø‚,+ØHA9¢ÓŽÞ7,PÈB7ÊX$TpàO2ƒR!•AHB^¬@2¡F¨‚s¾ã"¿øÆ É‘N ÀVa@#R!}Œcƒ„Jà“ â!ã´”9éÄNtzÕ”ªd6, @Ktr¹¼&œ@e:Ñ$°X à °\Ã!3é¨ ¤²–@•P‘ƒ*æ!·À&Ô(”B’¾ƒ”ªŠ¹Ie&n4¨È–V3E Rª Z!Wäàa„ßµ$«8ßü8–èn8&Vã[“ < D'©Ã5÷º QÀ@˜»à ¯xÇK^ð"b¤¡vQ^ÆqbH.á^ôâP:YŠûBU8@Zµ-l«þþ7§xt@ ‚@@©ú•~’PB¾/}í+Î:Ü@”Ã+|Ë1™À/´` :y,1ˆ¬€‡2c @B‡×øÆÐA ¾€G° ~C„#õâÄX ©hÅ,ÀoÅ*f1®p‚<ˆŋ 7ŒY „Ø$-¬€bô‚ÿ!k.ˆ’žl ì¤/€Â’}™3-¨WAÐ|…= ¾ø…X#'ÜÈ ÇP(tÂE à º‚€¡ I`¢v,ªB4ÍiOÿ© ‚@BA  AÉ0<+}éÅàiaÃ4 iP€ÂLøD”‰ßé$Ù¦s0âõÿ8Á"†gx¢´YäZ3b‚$ ‹˜SAêý ‹)„À\„ôüç‹¶Ä%¸€^ ¨„  AC à|…8w.%ÜjÝÚ5nžs´†ð88.a‹ø„!¤ñÝ‚l‚*øÄ®X(¢èÓPÅBôÎw¿] Ô0 õØäÀÞ ¹» Àº¸r§û@މ8!è[Ä R $ä , 8Â$jkb€nÅ5â0 LäÔ`H dO{Û¤À6P…‚¨Û ªg½ëaß-l¡°réO–T@¬ˆA– ßf£1Ûj¼ ƒ' B ›(xì@‚ (£vApÀ“²þö¿_ 8І>Ѓÿ¤åw~é×XÛ@ «Ð jµ$ñ…>b%Ð&’“H 1#Ð^ŒÓ 9v ø ‚"8‚$X‚&x‚(88;fox-1.6.49/doc/screenshots/scenegraphnavigator.gif0000644000175000017500000016760711637250333017202 00000000000000GIF89aÂL÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ,ÂLÿ·}Û'à7þÛÆàÂmûÜöð!C‰3R¼È1¡Çƒ ?Š Ir¤É’(OªLÉr¥Ë–0_ÊŒIs¦Íš8oêÌÉs§Îˆ%ÜHt›¶m‘â8Š$)’›Hmä´ç©£ªNJj³uëÕ®qš^}ê¦iY­r‰eª4i¤HrÁeÛ´.Ó»vóâÝ«·/ß¿~ó Ìt°¤ºˆ 3µT¸ÒaÇ’3–4™±¥È’lEº,y3æÎœ){–Lšr%[‘m1V]I–¥Ó©-YªeI5mÛµkŸÎ­º7ïß¾{ ¯=ÜVqãÄ+_μ¹óçУK·¥Kyuãשcß^]×­îÔ¯Uÿ×fk—µêÛl‘O¯íÖzõîÕë:O¾.öÆÚØ&€¥[’Ì‘B” @„PÀ‚ Ààƒ%,¨Â‚%a&X …–‚&$`aˆ&˜0b &”âŠVˆb ” ‚Œ4Îhc* ˜£ &¤ ÂŽ?úøã?*Q¤ F&‰ä’I¦ä“H:¡„RVIå•UfI¥\b©e—\‚æ–a:ᆙhž‰æšg¶i¦mÆÉ¥Oœ)‡™OÜéœo˜éFpÖ)ÇŸƒ:‡…"Šh¡ŒÊáè£FêèR*‡¥—Nª)¥wdÚévp*G§—Œ*ɧžZê%—ØÁª%¯²ÿ*무Öjë­´Þª®—誫-½ûß®»nÒ«±·»Ë%Ë6Ë,CÐî—Þ6ÖHB”6µ}Ó„é)Én̘¢ LØcnÌá y †“pÙ#Š.(á£NÌQÀ3Æ8!Š ô8ï¼;ú(#ŠÛ(äÂAš`/’>Úkd*P¬ÅI\,1Æwœ±“K™D•*4AåÈFJY/ÊV:Áò—[’YæÌ2§¦š3³É¥šw:¡'šwÝ瞈 j¦o-‡Ž*êhž†úŒè†fJéÕ—¦‹´ÕV_Mi€rL¶–=‡%s¤ŠjÚg‹}‰$“X2‰$oObGÜgŸý6¬rÈÿjÞ—Ne°ÊV¸á— .[â…'î8°Gî8«šèZ¹±º\’yæ¶lrK嚇¾‹%»$ëžQ÷Eb I°‹µLµqK ¥Á­$·lƒè-nì’Â6»ØB6ð%\2ò6ML²ÍÞ·ìBî”ýŠ{îIl#ø%Û¬‹p2&p¿5Þ[ðø/þù@FÌpŽF:Ù±» ‚)ÈŸ„ü%#éÂýó§@¿ËõÚ_½šP/'¸Àd¤Rrö%:0gnÚ™¤ð& ÍÉgìSÐ0¸AGqPh{¢SÓÅ´K1 Q˜rZ£*ÅÂJI"S0´š`¶IY¢o_Õ¥Be*ÀåÍT¨ºÚÿ 'ÄIÜáw˜Ä¬â¦Ä·Í V±šœä&+Ï]Âs˜£œ°Xe,V-ËX4³Æ˜¹]hCæÑ…l‘;ÕEâÚ(íÚ°‹o¨! nXã6äGY" ·h‚ñtÕ„ Êz%j¢W7  nÛ(ò(¼¹Ý‚lr¸D„zd!q!Ì ;˜¿¸—#¤/}í+ØÃ<$‹¹/b-˜û ¦„ýÁO M@R ¦4ÀùQÉ—Yª’ɾT@\Ji\Bæ!è@5Qg=«à™žIM Ú‰hÌW¥v§90-OéR”¥e)¬™³…XƒaÇV*±¡íTa»Û¥Ð–Éz¶SnwË'Þ`uÿ*¹ pvó§%P5PÉùÓqPLh­ +côUÉc²€µ¹+ZîsÌ"è<÷H@ÚÈLâ„]DÂz¶ˆÃ-â° o(NpÙ"D  i覲i¸(Ô¡ž–Àg=M‡<$Ô¢zÏC=j ŠJÔ-µ`3XÅÆ1Š9)V­˜½0vÕ‹íoª^½ßÇìE?\Ni—&™X]ö?µ²•­#[`\¦a:ÁdrM¦™è†mÝUNyÜ™›«§kæN…uÚÑœÆØDpQ‚¬ W()Lbò…—uf7kÙzö†/-Ù(C¶ËØ2î¤[ßì·½1‘Ÿ‰kíAévPØÿ..r·Ü-`,`íÖW Vo­¸,6VÎteÔ\ó”ëÙ¨p…lnàŠ$ÊB]|C}lC`cf%7\éL[ò®^q¦&œqI $ïÌÌ[^.ÕÉfƒMSç»X?Å)°ó…ScÛXÈ>–Q*”l¤üë_H¸²bÃd‚ìÙ¯iöÁ™m0&Ó66 ‹µ— Ð;Ó¶6IÈsŸn£[ÙêæÏג؉"F±Šå†Ð(*TŠ.®¯lÅ[ïÆÕÕ° Ç+Èùê½=Ö->×¼æun¢XìÜèF×<ïl¢tžÛ\ó<· )—Î;Í*]•ų #oã>»ÛsŠüãÌÿøšÑì5ÿ#ÿÛÚŠ¢œâ7(EQN“éX¶—´P—ºÓÕsŸeJ]§ jºˆªóûŒ¨¨üyºRîÕ†6$áÒM¸4¦5½éNs: ™Öt¨=}é4ˆšÓ£.5¦M„4dÚÔ°Ö4«‘`j$´šÓ¬Vu«GéL[z×¢Fƒ¦Û`ë$ûÖ—þuØ0ìb—ÚÙL õ§9íì6¤Áٟƶ³µ-ë$ûÚ—6­mMnpÓ:ۭƶ·oÝ„X×úÒ¶võ¥£-jr×{Ýð¦ö³§ýîu«ÛÞèÎ7À5Ímu7âÞHÕ£å¤ÇÆ©–$X§é! XÅ*§3ŽñŽkÜâ—Öø¥/.òo|ÚIÿ@ÊWŽÕ‹{ÜäIÀfNóšÛüæ8ϹÎwÎóžûüç@ºÐÞ†o ýèHOºÒ—Ît¥eä8Ä•£ êÈ‚9U1O€M~è¦j‚ÂNö²›ýArØ×Nvµ‡=B’ÐEÓçN÷ºÛýî4§ ðÎ÷¾ûýï4_ˆ>¢kèãg¼aÌc”ÆK"ÅS™T€(øý4J“À…dÓ´Ýó ÿ¼èCÏ ·]ìž/}ƒJ ¶d¼ìgOû ë½ö¸Ï½îgÞxoÜçŒhŒ‚ôЂœ‘=ÚH º2Y€w]âL?ÅY„¦¿!꟧g·©ê·Ïv´C¨@½rýÿ-vOþò÷væO¿ú›n棬Ç–(¾ Kèâ(©ƒ¼“‰.ÿe(\ãSÛ—!²I›·zšG€žW!Ây ‚}¢y¢vR®g ë—HtÛ°wø hs§ ¿‡x»P@)p Ô¢ ÖR™]R¡]•¶@qЕV·` Cv ¶p ?„;ÈF„C„@„Dh <È„>„M˜„FØ„Tø@Ø<ØA!Ø…x{^†ëGñ‚íFrí"„Wx0èfi<_6d¤‡vx‡x˜‡z¸‡x¨ bø‡æ‡~€8ˆº÷tGa Fxé!êá‚ÔÿbF’ v¸HM)ж f|¸‰œØ‰{8~„г†¢XŠ}÷G1xˆø‚_v÷a†Ô² ™1‰‡Ñ¶rpfšè‰¼Ø‹|(w¦ŒwGŠÂXŒLwxˆîç$ ’èfß`’ ÌÒ’ ‰Úà‹ÜØn†Æ¨sã8Žáˆs‚xŽê8tGag¸$˜–@;¬”±avfF1 Ž`‹Âj¦û` ì! o¶‹Þ˜xŒÆXŽä‘ XiŒÄ¸ŽÉsûà päŽÇǃ ðƒgô{ºGí˜G‡vhf mðf’àÿ€>ÿ¨:y‡Ö`ŠåX‘ãXYäHr”µq¶€fa E{¥¸‘9•7Ç áˆ/˜:×ÐFˆ÷R±à» ÿpÓE²±²° W÷ª±“réf׊ $0”!@ŽJP$p P±ƒ·”v¸¶à8ˆéH•Žis¨è~Šh†¬è•«ˆÑxfm˜:8f6— ù‹€‘°—]g‘¬#GPH G¬sÛÐ:k¤xx IˆRù˜Tiá†Ëˆ’_‹ˆ‰kvió5dך̹‡àè…㈚y `šé!npi%s؈;\14‡‘ÿ™™¹fû ˜|Ù…»É›É’îØ•-茈|!e˜úÚUºÐœüy‡Ú   : Z z  * º Ê  @%À…¦I I$•–› `”xyi[akmàrBIŽ{IŽ€t‡‡‘æ¸ÉžŽé›úÀxÖ`FØê‹ûpx™±œhvmÖŸÍÙ“  Jº¤LÚ¤NÚ¤Iú¤MJ$P¹æ¢yšÆæmjiØEvviF9›–À¡³ã¢ {s©’ é©ë)£ê¸ôÙ‚G\Ñ‚îHy¨‰Ò¢‹Fʜϩ~(àšÞfo( ¡(ÿ@¥4‡nÀ•†M ¡€É¡x) ]Šƒq ]$PC E Û‡%pš0Útú˜G’ˆÛÀI°£óA-³¨‡û0“i†ˆpiŸgf?:¨›¸ š~DÐ:¯‰äÆ:¯™lIpq®&n­FEP¡V¡šF*—UQYޱ÷Qd¹f’0sâ™~1ºª‰ŠÛ g4Ÿ=ÚÔ¢ ó‰¾ ‡ ›’0 l¤f±£ 1·H»¨1{*¬xˆ¤å{‹Š‹H@Û¨[l¶f±TÊ:ª§;nI€ŸÚÉ:)€þØ­¹¾IÓ‰GPY~sê®Åÿ-ßp£‡øž;z|êqy¸ ssãBk’ˆ;o–¤š@ ¬ {‡…ª{®Y($p²®y²­“r­£¡Þ–¬VåÖnáÆ¥øf”CEne±×i‘¤Ê”Ó¹—iš4«ª6Û‘© û0ލ’é‚îw«w¨‰^j Q š~¸{À:*7n$À¬þ†¬€I!€d¹öƬ’ËlI l릡°˜X›y):«hö JŽ.š¢º×®yŽF¯îG‰x_¦ˆ>ʇ]ö™‰«“SK{§±^«¡Hð¸)WUº¨É;¹þF¶ù¦iyIéêmMPlFi·Dyêÿqf×@0·Ô‰š¹W³µ[ŠvꆱH‚ˈxõH¸üºé!´¶ÉfÃËÄš{éšqHÐ8¹Ë:⹋ZšDP±þ¶¬‘‹o#‹ƒê:¡X ¶Œ]Eé?…¸ÿ° Ó)”帮µ§¾ëŠ­š»ú1‚µ:f!e þy•ÿP=±¨h GŠeI‘°@¼¿pX¼€×¸€‰’` mà¬Ôˬ'«À ̱X›¨ÜZÉš¬¶† @  ®Fù©{‡‘ Э˜‹½°›žµá) ªK @”´G»)Œð:xgxF7ª:F±/x ªs‡²¸¶sëpÿRÒ…L—qR‘PªB¼f‹;{ª»ÆA9sIP •±̨‹j±SŒRŒ¹Y{ÅŠ‘ÕI”k<}kЍ$À…€Y¡@¾áš‘EYÁ9·¼—t x(|Ç€ˆŒ=«ˆ2ÙŠx|!Už–l·ð®7]¹@ZÈWg m9‹Õ\ÉkFÄ|W¹uK¾Yirµ ,±¤|º[ÊŽ‹ÅÊÊ­ºªÑYo‡ªœÉäˆË‰ª¿Üϲ+ÌxKÌŨ pD‚Ë#ȵº|¸²Ð¦|¸¯ÞÜ¿€×uYI¾Øº¼‡ÒY[À!=Å¡LÀÛ:€YÏ| ‘DF)¹”J§ÿË^\¾A‰ÓXê¢ûüËÁìwvlСÄÌœ¯ëF¬ˆFƉ‡ÂëÍÄ+{·=Çèkš\講ëoi€šš™Ë BŽ\¸ÏuwA=ÛØŽþ0ŸÅ;8ˆ:Ë´›8% Œ;¨gf-Þ‰Ó¨:ÖÒ²¨¡Íµü™Øw7Õ©M‘ðm”£ü±Xuµ›‹ÊÀXKÒŒªÙŽ+ºpìË×ù¸Ìбö&º\øË@IÎú“z~²­ß„uî8™:Œ²pR¹kRmÉkö™»€f:«†‰ø'-MëƒÑ¬:Õ! × ÃÍ ÎM÷Ù)‘×»É'{²$@X+± ½Ý¡¼â(®ÀD æu¾¼¶Ì—|ª]Ç­—=ÞÐÛ­êÊy¢jæ©ÿ‰Á}§u7ÌBþC‘Œúa¯Ì¸Œ½½‰Ej‡j†–)¨‚ª‰mªf=—mw›L·å¸—,+Æ­Óš-ŽÎ°žâ{â,~âTÚ¨‹êÅÝÅ[±¸Þ:6þšÛ¸3w¢8íÏI”?mwùýè]uWy£/¸Œ Ô¶ æ„üä?JÔ Ú]ÚJÖÓÍÊÝ>ÇÊØ.—b®t›üãä®ì´\©q>±‰z²kµaÌâ+^±r¾šêÊʸ¼]ý±—½¨V{ðF9Ýo½èäÇ':ŒAîìbˆÐî—ˆûa çÑ‚ó ‰Î̇C±r €nPJ°/âIûòSb!%Pò¬‡Øxâÿ9תž‘DI•еi^ÀÞmѶ±+±)‡ï–º¨Ë[ÀÙm±é½³ŽÙÀÞâÊäÈÑá‘ÀÜÚ ßè/ñ^uß ¯^) µÀ…ó:Èxˆ¥Š-I;%f² o€.—°&Sò|p4Jp ;Cy‡¢Ä¡ÝtwìŠÁÊþ“‰mÒe oÌM@©ÂæóO¿Ý£\ùu^ô+½ÎÎûšFÒm®¡BÅãq|¡q½è8Íì¥Îõb-ÊØ·äÙÀHˆgä§ž¸Q>(;S nðS~iw?òy4 àsS<ÍwWÝ,—ÎtYæ2/ø®ÞW Ÿ±ëÆ]Ú’Ú?ÿ/±ŸÒDðè²X‹— Œµü>Ò+.â+îâN‘fÍÑä»ê/ÚtŽ®úé÷‘_ßxÖÀÄNKaKÛÀ]Ö$Ùú—PáBm &””$…œ9Jœ”¸è&…I:ZTÒÄI%)J^t’ÂM I]¾„ùÏš5mÞÄ™@!”Øàg|-A ‰$$œ6E‘„I£6m"QeÒ¦ ›$( Û…Ó±c’0 v,%¸uK"Ú³hK ЖÀ]¡GI(@Ô(€ByÁSçâÅm¶‘`YòdÊ•-_ÆœYsÍmÚ:k»FК®ÎÛ:‡¾å9’¬˜/¿)¼•DIÿ›$mÜ4i’ÄI7Iš„ô-;w“4¿§ñ}«õò—Û6çD,0a‡AŠ7îܱwÓTÄ(Nªlš0‘šâëW²N 8%0·XDÆ"áN÷¬Y§wóÞ-„ŸÜ#¡®Kl§¡® á°çlrìA '¤°B -ÛçµÏRóLk¶íÃ>”Ä’˜^Sˆ4[va®E_Œi& û ÁÀ¨»ñ¨¢äªk¾¯Ècêò¶j ô¾êª«ü’ª«,´ºBk©²¸»k.®ü‰Ÿx/…»þúËÁ 4'Ÿ|šÐ1È.d³M7ß”ì³Îl1H[¶HÏ>$M›ÕZCqKâ„ åÿ`D4Ñå´™‘º#¬(-« *±³ºš¯-$„¼Š¼6‚D¢H&Bõª‰²îr2¯¹è:•>îœìn/¼B(аL›2s¨(!:Ÿ”PM8‡%¶X ÿiÈ3["iC’HÒ$h­’¤ ÏjN›;‘•¤Z7âhB!Aÿ1Å„XT4ÝÖn™1Lµ,ê:HãéÒ6¾²ˆ"á—¼H‚ÔŠ«PL‚öœÌ…ù\åûÔrŠJ"nË@ d½‹¯ZÇ”®ÖάõÁ%¹d“3í³kšÄ‘HªÃeg[—<ëìŸ6,‰"xÞ&¡Zþ‘¥ [œuÃ[Œ6Q]§bôAéÿúr0º\?V°-°ª¢€®ˆ’ªò’à =³ÎoUV­2JµR(KJVÑâŽKš¬µ×Âhåõ§ê®«Tºç„=¹pÃÝG›oצÙFlÑåC¥º¦Ïn³-­ 9ÚøMLôG¦kŽ–D–ƒZÒ³¥§W—iB €¢7Á§ 0×/¹õIªj$H€A½wTSÍfÊa'y’•¿ìcïÕ†áVXáÄ, vÿ’îºZûþðÁ;<|ñÙÜÆ›C+Íš]:”Óml~hÎÎ’°„…84±CsƒnÈ’}¼ùGiXÇ:çHÍ@“a#8žÌ§Ya’°  i¸ ¿˜Uÿ³Ie`LPZæC”!…>›¢‡µ´pn|yÔ_j•¾]ç/eŠ”P¾7>^¦-?ÜÌš*#Dœ€`qßèh«4[ìY'%@VmÖza±žOYP”ÄhðÔ¡]$7–Ñ¢¥m™KËTojêüô8ýVåb®ÕqŒEIe [Äâ¼ã¨ÿDënÚô½SUŠWîh%¹xsš7Å,0%*¦H;ǦN¯B¦ì3ûpb³fZç}Ö32UÝÆ[²Ùòù­I´Åw^F­=i#5½eN‰ÕÍЇbæ(@Áî¼ÉL&0îŽs/b! ]¬—_±¸ UþEê“é+ŠU pÝÝ\7EUðfÇò£H ˜3²¢vг“ãŸdmØZUÆ‘Ll¥Ê„4Ž&rO"úf^•i¤Ã8_(‰«Ò毴Å>âð)R]; »)£@í’LAðôÜÒ°-=ŽqL¥G“†Z4B½¼yXíݺÚH>‚²Ãwíÿ¶µ)ŒèÀ0™Ê ƾÞâfÒ’ƒÜ^™eÃÝdRÄ4fîþVÓ=”ò\mZr‹~FÂ44¼-âXº¥Ñ D–c͹2a;­D²°„Lt<5ª6æYœ™M&0aä1í©žO!Õ€„!³·HØ”Z`–bJ‘"5c¢5$h$AS‘Š)ó®QI’õx¸°c' {”xÙ.¡«Áà˜¡£«`Ëh>ç#¹»ëcŒ}:š—ñ¾²6œÐ;$¨‰$è;7ð>ÃS"›ˆÓè%r±¦q‘û†WZ+8[‘F·¥é)2;a®†Ð¿ª®ˆ2 ¡AÁ@'Ñ ’Ò/9ª…ÿ¢µ4@ "$ˆ=Âj48 ºC´À¨0˜÷Š5+Ó5Ø™«IQ$a¡ó,â43 â{;4Çð‡ +f 9Æh‰jc ¾KˆKÄ ”Û³ªÚ*µê 1m(Äk Åk érˆtӿ蛌ÂP' =_±(\¬Ä C®|»Š«@ƒ5¼Š ’ ½"µ¬(’"‘,$0­ÓÃ"1˜f´2¸AŸ!>¶3ò,b›+CFŠqÁŽƒD’!„ˆÚ¸8£ª†€°š9NªAÏðÁš€*YÂ"t«?U4¼?鄚ê* ¾ù‹£È.1«¡|“„|#4hÿYh½M‘@ Ù+ßI©³™ É:¸jt8°Ø/îø4„T ¼ -¢‘⣨Ÿ a>s"Dì¹=éð´TÁž :–,Çš,œÝѓΨ¤‰ªŠG›8º+<ÙAÅ\œöQBЈœ$ZV<‘Y¢×  £Ä§o0GƒGk‰ïãBKÓ<É À¹y3rÚ‹µ$ˆ\ ¨«ÈÿXCû¸!#,R˜"¹©;ò® Ij’¬µA‹Ïc ÁQIE Š0Ê. SSIǤ‰|™”IÄÔ ¦@ÏË x‹ÈØO:ÏÿÇ"ˆs"THéG€%³ „Â庆8(Û¨„p溼†¢EÆøâ+¡C2áN«°Š¥»7󊆥k½ ¢ñ€ûÃ|¸¸tÆ $Ijb+¹.‰#>í$ºÀ< bkDy1ÄÏz,ÊOÌ ÒÌ!5Ò"5Oò1ÄYôñGm´Ò(‘˜€EC±…[˜)ÄÈÙRÓPšnY–kP7›ŒÙ$¶ÿ¿4;ë2ŒÄ9k°†Z†{³È«XC®H°Y&ß1)&°£ d ºœËò&}ñ¦ÊœƒD§¡>–„3"¾_:03Ä™ ""("ˆ©ý!¼€¡ Q½ ( ‚/YUÈ€U˜*XÝD§U¸Õ\]ÕòŒŒP-‚`VøU$Å Ñê UÖg VQåÕ^ýÑjµÖkÅ dI"(•´Tt¢ÎMõcŽ*eYj-m·ò5¡ò4Ú}À5¬†}£ŠÁ²†‰…Zh ÚS±1©²øúŠ([©C-¸ü ½ä±ŠK>¢SAµã¼FzÔÿ®œI«ÖfýÑfÅÔŒ±5¹p ¶§Œ*‚ðÔ"H‚“µµà „*ŒA“­$(˜ÙšÙ"x ™µµ–åÙŒ™Ù¶øÙ øU"ÐTfÍX£ Lî ¶Uí£‹EZ¢‚UÅTL%¾×YVVŒÖ™ÚcmVÄ€ ù}¨¿~ˆë0¥, ª\ØŒŒTÈ XÔÚÀŒûŽZ°†jÈò2½ò*Æ ‘#ß ’¬ µh²©)küC’´@ LسË.Á¼®Ú¹¸1:$J1¾2ù´‹ ÇÁN›+Øù4G1D•<]‡µÎOKÈê)m‹“Íš:Y j‚OŠ›¦Tïbÿ »ÃjƒöR¬\¬›rŠ6ú¡õ˜ @õÊjŠåQYÑ”ºÐÝ“%‚Û%èµ @–Äi$Ü“>©[X¤'re·} «”M4#A¡âNoÌ•Òë·~Û¨ Š„óÊ_9² FÐHßA, Òµ²² ¤Fµ ¹È®2«¸Ú¾ÍšQQ;ΕŽÙO>{ w½G\4£Ê5A™‹ã›ºº­Ÿ™Â‹{Iª¸ÝÙm ²aºh# *žúPôT˜·XŠ·pм$‚ã…’ Š‹—§¥àX‘Õ—6‚â"Fϳœ ½C"ÎÜ“&5¼~$H€Ê1ˆ†X®³"Í;1šÿÔ@PY«F³Y\·vÃá[ÈFLHNƒÉ6ˆS«¨sC"(¯Ó;½ãdÔRÑÃèT‹‚C\¾¸åsØÂ`I²¸ƒô›Íí5Jé£É]êä.2T¤½™+¾¸\‘q²к!«í•ê¬i¼Ø‹ÿ¸Àªˆ ¹P!v¬ˆ‘NºÈ‹¼h´x’ÎXãŽ6е†s©œŠ›b•œB ²‹yú³@ ´BËÏǤÊë£q–]¸Üj¦K¿ cÖ´´Õ‰RvD_QAJæ Nƒ~ó ­ ’º8r™!kF(©: œ ?…¯;:事 Œ²+á`Ó,ÿõ¼þëà%:ªXÀ¨ÎyQÔ»ª¡Ìe»c$ëÇí¡PÓmdB /¼ Õ»8Ùªˆ©Þ±P›l¢›^NŠV‰ &0Ô& ›´ðá§ð @²²/Qº!‹Ýæ?óݪ%J •‰Òp}Eê»k0.¦®Ö¬?ゾ£±ƒXP†2SÉ eFšcà#§¾ O;ч~Ë_òh„±Œ¿MÃQ³Š5Š Åj¡hòCö.Ú‹5½Š3Â96ÅÜD2;Ö¸CMÎ`Ç­ø%º)Œ†¦(î™QJ5³y‘¿)Õ–¾_öe­éþ¨ û¨º¨&® |© ‚–â ‚íâ‘âÿ\fŠ8`Šhb^ѯ ¡1¦³´ {ZœÙâ$RŸ¤tŸ)Wàjô%#_[bgèxÉ -ºáÃhV´LƒW‚º¨ûE~C‹ºN è€Iîûp/åÄC¥Æ‹!Ìu:]’Ž·“ŠŠžqœäIÃÄž(#ÝrzWÓåN #ÄKŠ–Ý‹–ÙèM•µ¦"^!ÞUdBYd$ñ½Ú ’ÒŠÃ’ ù¢ŠA‹Œ¢Þ´x艒æ=óÞ­ŠÄ(ψêóCŸRüÌôSß.„ÛÅHÁá4ã -ëPëœ*GȵÌß~³³…Vˆ-Oµ…a.# D.ë:ÿÆR§‰rן:¤íìÎwæF´Ó±0º!Ê®‘‡®hpœš2ñd†.ÕMœÕZ•UØNmà&‘âáγ\=-²ñ 2eº—$°C4pÀä>îÄE) XK TÁ‹Þ»”'‰ïŒêcjKQkƒ§.Åšû ÐPìÆ¥„´Yê"—Ð9]HöeŒtâ­,;2á¼ù‰HøÕ$`ÀF(¯6à·½½ò+ß7°:NŒöx\艵\`û:  œÓ…XÓ CáË¡çRæÑ >]ìÀ]!¾ 6 -•Ùy]”M£—µéãf ÚŠ} ÞïÈH'"iô’òWA¸dâ×M!ñÿcD)²’‡C\Vù *ê¹9\±Ó.jæÉQREè^ݪ9énŽøY«»‹]Г;‘mënц˜—Ô„ˆÉa.K³†vû/OžÜC¶D Òh„$PU‰T/)׋…½µ…=î”ßY\oòýÀ „’ê¿dâó¬K^eËݘGý=ÈžÉá³rªšJ^ዟ 'N\ B;dúc¬ œE ?®û:$&4 ôƒoƒVHº! d€µzÍgÝô@^üÁb„e÷WÆW½8DÚe£þÔ¦0FÐ×ôÐ?ÆM¹§}HŸ%r%ªœÐ@?¶…´#×úæÓaã)gÿ¶r-Ò SKÓË ådð–|Ðx Ÿ„U]–ÒçÞ$˧_üõ ÞÅ"tB­~å즤ªÙ¡äÍ*Ý£w2Û¬8A¦+ë¡sd ‹ íñ‹–i‰—xF§Ã¼Ï¹1œýŽïdº/-ˆH" Œd+R,ƒÕdÕ"˜PàÀFm$Jœib£ŒmÚ$šØ†‘Åˆ JDÒ& ›$m˜¤I’‰K—HÒ´Q™2e&mLÚT¹‘ÍÆþ¶mÓ§m—5mÛ´]Ӧ͖S¦LuI²õï*Ö¬Z¯nÛºOé?«¶¶ÙÛUÖ?Kÿd}{:Vim[çÒ­«Õ€¼z÷ò $ÿP¸à ÿ5¼xqà¿$@Ô$ÑHRJ$3ÊŠ•ñaÅ6lræD‚‚D ÓIP XE‘Ö/_kn=xp ¿\¸DâܹN<ØïmÆt ÂoßèyÝl ¢0 èͳO.Ab&K6Hд(Zt£4Œ2‚̬™‘ï/“™ÿ3ä@‚úeU’e-–-±xFB9’ÑH%4‚æÇÆ@¢Ñ$áD@¤ƒI„ÒE•”…m ‘Lä}(bP?‘øÍ6,:µ”5KÝ¢”T»8uAvue=úø#×H']‹-ÇØcÎæX‘‰öÜs% I# !K$H4ÓÿD XÐE£±ÄDdÂtf(˜FÂi$ð& I€ÚšG‚oŒù%sÚ=·Ÿ’¹oÍæäsCòÕÆ6F^·œw%W„L>¡aÒyzaF™ñ©ùDL4UDPD1Ä€.Xà@I‚ª¨"ˆàzyFQ„ä1Øá­‰„¡D£èQ±ÆAzUP_јÔ5ºh“Ô61êB­S’¨ä?;‚;.¹àâºè®º ¬ %xV\`‹ý)èÅ@#Û´‘ÝF/!al$XFÒŠE‘ÇF™¥éf ³¡àaÎ q®–[‡&o` ‡gdžÉ{˜ÿ¼gz†ÀX`ŠîŨ›î‚@BlŸb”©Åá`#>K‘{Dx÷‰=Ñ!ª$‰g±tVpBy”Fixƒù…a#µÌJѲÀŠdaAN§ÚH%ê—×T^”«yÁ¶7¡6ßüCãŒK-¥Í¶~eMUãúsÕ>’\%]‘Ì5Ö?û”;ùâìÂå˜kD tÞc|"&²Êºyü×b$`™%ìÄZL72`# ‡¹™L¤à&Æ·‰Ba~Õk\™ûÕœo‹í©òHš¯rÐ:`'ç+³^4‡PB .i¨)Š G´ðOA/É—D[¦ ‰Î*Ëÿ©ôôª€ÅBåÕkß>ÒyîW«ˆ|©i©[„Ø Ÿbi#‘¨…5¬{hc‡ƒÊß¾"A6 ÷[˜Òð}îZR™QS²8mH-uVºBÈU¥ ¶°¡ «b‹Yݰ‡dùG$¼µCRŽG·ÀÞ^£2'%&PÐ)YFæ•Õä9M؉fø™„x0?JB ”÷2‹)Q8ù* žà’&@Lx!øS¼€së˜Ì7u$Ì£’ãDÑ!)xH¤Yø´žNÁ­"WQŠî³“ú°OM31ÕF¤f4è "ùÏÔ:S [Ô¢U^ÊH€Þ׊·ÍÎVù‘dŠX¡ aÄ#ÿJU+‚6;[èㇳåUji”…ÔK :Ï™^Ò†ŸíÃE©‘Sbô"kÁh‘øÖ¸X¨¸°ü£*’Ðan1ê…d±&TŠø#m Q/ÏAãÓ›(–Îc‡ZâõJЈÜ`60ÉÈÔÒЈFNò Ì:K—˜â@F0eêŠ(<>o¡ÌiÞ½ ÇÄ"uLt×·¡™$˜(UYíÊ&šeÅ¡|"’Ó§„™*•4½âŒDòW W ÄKù»©%5Ío“4X+»æ¡ïy¤<¡#>úÑUAð)±Ø‡>¬[HP@¥jy.b&•(ÅEºÈXµ1£QËZ…ÿã´"C†Ë*;bëŽv(F‰ÓG¶(§ï²Ä4tOŠQbÕ¸! ër‚i`¢ÀªÑÎm5y¢@õÔ¤—-(x0˜î¥àMÒ+No¬GQ&ѱIö‚ì?);ØŒ’Y¨ú¤y«b¥aDG9zž–%k$±ˆ5dñ‘ûítW­d~|Ù*ˆÜ*@•²4ÂXˆˆ<´ò«šBºlÈÁ¦ê%Eâ|5½O¸ô±”¦<åo4R YèBº±®ö-â6ðz¼Èœ6µ KLêìÄ±Ò ×/*I,M"ñŸÑO?q Ápº¤& 1/‹Y @&ÃJ)) `]ÿ–¯—‘9‰9Ì£bÇêé—Q›AàoË7 ¡Æ%Ê*³µ:×’±…4zéѤH2!¾ ¯·xUÐK„|Œ•*K YŸ š]þ:idôrª×’ 5zY0W¦iZ\ˆ•^ )b½–ßÍIî¾vÒ]ñ:àŠ>éxË»ð‘s¨Ü(Æ ’Àhkˆë¨¶8îcÿ„% J“t P& ³@Ì_ âyñY^•-Ÿþ´ê æœËŽÌh6Íh¦Aìѯ$ kŒ¹­Øõ˜£š23˲€D…Ò VÙ*¼s€ö'µiwæÈks6I¬5ÿã×"µÚHGFs¾µ@qv'Âëhó@ ž1–jK“„sûøê¶¦õ·mX«)T± ¸ô®~Q3+i W¸²ÉjÞÙGäÄ+¡Rý×ÒEx²‘I§éòREƒj Iê»M‹e–¢)+@Êå¼Ñf ¡)pA F@EÆy§mLÉîµ×ß©yAÌ2z&RÑDga[¯µ1æjh#ó—½`GГ‘ZD¨Ê ©¬¦®‚ȹ âlçZ5¦`…#vÅ\F@²lG–±@B‘$×M? eÝÆûq’TăA ‰f‡ ÎSaïXÿÖ”êh+4’ÄŒÂrCI ÿAmàaYl˜„H$a,V âå#áÇ5\+GÄ+Ê…ê#ÝëæÇù';!Uèܨ, ©iBòË,5¢¤q ´rèȘGø‰„ánlЂ¤@Jõa(Îz€†ã5 šTN+,väni€lQìZÃ(öàµ>ª¡zh£Q­F5Ð -{©ªaþÏ®Eíý!ÚˆêÔtÐL„Ýô„ô –ÍÔQYRÿáÊIœOmÈ„üÊ´ˆ/ÍFD`ßuÜ|˜HPÔV ÅWÀHT¼ŒØˆR<ÓäÈ‚.\…ç•…\¹Á6Á`YlCUÜBY‚,ØBLSéaÅÕ¤ä Ç Xô¥ÿÞÄÁŒsÄŒ`€ÄLkdÑg„n!”Ê`üÕ‘ì•^É na€ Xð|ZëhÇCQš_ßg¡XÏá\¼^q_ìćÀÄ–qüÅü=ÛÒùa:[•ßù©Ÿ6œ_'ÕTR$Eü̯IM-4DÿÔ”RiÕ@¢P•--DÃGabüYàþ¤‡H\„!Á§ÌDGÉÒ MŒˆ±ÌǧÔGQÝÖW|ƒ>|Õ›5ÅXXƒ.°WµÀI}ÕEZùÈ5ü VäY9霴ž’œÓŸ„ëAÏqðF†™DríO$´ÖN ‰½SrAáKGÈ€@ ¨@ D “LÿØQÜÝ\¼¡É,I¢ŽMÄL â?š„u†-ø‡,L€ˆ_ vbùEUúÝŸ ¦ÛA–Ÿ«H$âý\d´Yà@´Â£íÊÝ}bþ|†-´‚þèZ)e„¯lQ,˜dÁŒ’+ìJ" ÂL¼DJÁ¨‰0éV‚IG•Èf‹¨™2­×‹`K|•2.åääÄÅáËàF˜ŸQàß´%d4DÿM$HÃÿiY@D™¢ÚUmaHQMAŒÒì”â­ÜTÕìUE ûÌGN O"QÄØˆÈ6xÞ03ÁY5žVc#Sò3"‘2¡‰b”É1’Gôe˜0µT‡hFš0F“ “ìᥞ´lÉ{À‡yX p€”åÅÈ^r°Li-QȨVÐmß6ÓèÊÜEÌÉw ¢G¸[e^Kv‘]øíš«hâÿùƒ=tR€ô’«T['5â‚,`Á0×kbbE2HW*ÈìXÃìÐOt-††YµUƒ4 dKÆR,ÝŠvPzŒˆ¯XMµzUÐ/¾ˆTd‹Thÿ‹ ã¸øËYŒÅ‰Å?ØPWX…%ìƒ%X£'sÚYBçC]õõ™X‰Ù`ITbåwªDvˆå“tÌ…IÄ$¨É–4A  @@ÌÅHQY¢¡Ê-ϦÖjñã+ñ]I¤TàåÞÁÔ˜5ä.&whˆHT¤MabNuÙ(©þ$d%æfÒ íxŽV„Ü›JÞ BÈB4HC,È*¬æÏ#þZk‚‰­) $…K[`KR8E|½™TäÈ 9^X´Á5Dé“ÎÊ5]S ^žåí ÀUEYSsžž®S¡Ó’˜ÑóP–—n‡¨` ªçNhßõ5¡õÿ"÷8Áapçš$Ô¤@Vª^ ±“¥Þ¾˜6Fa(ÐqMÂ`†À$A#ÈÂJÒ¬´J5]e.(&íÚ 2b D ÎN¤"€DC´E¨£½Jb ÔÄhî“DU$t„v¥FèhÄOÂ,Jd„z€É—”’$ „Üx¯lѯ-„RRøbS¤P/šà55%ã…XÑ` b JÂÔÞ 6ØPsn)—’ÌhÇšÖ \Gjy«@k8’† Sú˜F¸QÏñ\¸BØp`Ô›ðiÈx‡¨4í¡\õ F,Gr4‡Yö+vÂ#ÇÆîƒÇõÝIíGD-D•þ)Èø‘ÿìÿý_5ìƒøi6øƒ?XPÿ™å¡£elüåT€ìÓ× K, ¤®…*¯9›ÔˆÛìì‚L$/ûL ×éÏL9DŒÿÞÖ¬6Vd+HC$Œàe>…Tô"Rì›0r¯ÿˆSBܤEØ»š¡ý ¼åMcআšè¤–‡f4ŸŸÄ«lœ±”¸‹á¾Œ¼ ïį^i LÌIÊnPÚ£¤áª¡~€‹&šùJ“õG,l˃.Õ"È`™ 9èZÐÿ¥Ÿøm.w¤ f&Õ€7^ÍzHMüEƒ“åM¥$g¨¦ÿD„ˆ¼"®}FÚÝÔQ•Gȉœ ñ5,¬Â*TìÃó&m ý Y¥àœyÅVxC %]('4_qVaÅ .0_É&ù‡6ô$8‚÷Ä«üT‘²—éC´YC_&ÓM´þ(j‚™T5lh6š¬FÛDº(HØ–ð~FM9z˜—­­ttñÊÓ˜ªþtkæ(M´„i qœAî‘"HB-8ñ ëT•ØHƒKW|îB5y“çÙ 3U… ¦E¶X…9“{­ÌÌ­YÔ5ŠÑx)ØVV ÆÍœkmhVÃØ†?KÚk°ók !‰QZΑ”Dœw´Déã?›Ú«iß¾¤ ¾úg#ˆneZ €h^@U4Ä=H»[ù]è_fS…ÿpè*ÝϺBAh¨Ô•u5ÂŦ¨ .ÝÔmÚœthíÎün®ñŠŠœDHŒfµ]™ˆ4AúÐûHn/“ E[èø› )ãëUÜRälí-\Z8kmÒ-Dõä•…óÊ‚%Îek!﫞Tì@ñ%è@ÙªžþjÚjÌ9Òiä…üjœ±œüs;­X`°¤¬Ë;-Ô…5üpÄ‹’(àJØnì-®>ŒÌQHÂeb¢&^*Ch°e/—ÄvTeì—ehGšèbÑJFóšcÒym*.3‹°H—nvMÞÐ|FmÓ”´!È+"/ûK"  !ÿ­¶4…/3 …·PޏèâSïPXt…âÈ‚7±A()÷j5öDɉ Ÿ_¶Z:%Ç=ÎʉL:#Æèz·-LÌFóÙží±s¨4@s`XaŒÊXY’X„œð ɾÒ^‚7Â?T¦?l®$LÆ—ƒÀ…ghw5X“ipA¿VÁ@BDj&§_,@Иq«œ$³([M¡¦£¡²«Œ ˜4˜FäJ§´ô*Éö+ƒàźFBLNM+@HÈöñ"æùÞ½aËQ© ±Wõn…À]¹[³ŽA)Ñ ¬C™§»¢¥žHŠzÃDšè1h˜šÌ7°€N楫±ÌÅPÔÿ.ôü7‹ýÅwc%¹ú392£,øáN.h›LyhøS|¢s5¬Ôi8T-دQƒBú• Ä ÍΗ¥›ÞÔ¦šjφ×B‹l'o"É[•…„°`È÷¸xï’qeMtÕlš ‘O1¾)“T7]ÔY. öRs’v÷Ø:ÍeþÈŒCãTbŒwœ1Lœœ³s·¿†¾¾ÓŠÉKʼë?8¡%G¸êËíÕ9ãÚ;V'º6Ô‡øÞÖ”ŸSÌß(d ›¥G•»q®‹ò–AÐe:¤ùqׂC§ä­’PÙn"…mªbÎÆ s/ä’ϨsjgàŠ1³TDÿ±+ÓW©`]Ü’Rì‚6…¡ã¼}9;—F´CÇ€—÷\·L:QÝ‚NÄyXÆÄA-}¨@“¬ÓqÊ]²L:Ñ‘v”íÜæ•dùÜ¡&8p’@<Ë÷@Â@Tƒ? xÁ”ÅêW—iÒDvxH¸–)O,øW¦úñÚbRИ…lE꺭˜è~]¶zoˆäÖîKƒ\ÙËIèDÒÜ–h¨'@$AÒf $IØ´iÓ¨¶}û´i»ñ𮉻¬IÔfQ›5I¶þ…)ÒÖ6mÿ$%I‘ÄMÉH!myrdM›7qæÔySŸ?€D€ „P@RJ(eZ"ÿÀS«!Ž: €].% $ %@ m™ h‚)‰%H0ÍʵhWª]µõšiFÇú<öh€ª†{:9h›mH"5Š)aÂ8l"ÕҦϟ>kÕb5JKV5[ѬŮ–9ëÌ .Œ«–-׬kó¶V«ÚéÓ²‚·®mÍ·µX¶€'¯©ÕnYµj7ÒÎP{æÛÚÛ°I#>!’4hÚœO¯»Ñîö±$µÂ^ašƒ‹D’?‰}ˆˆ$ˆ8¶IP›’"2i"“8ÒÆ¤pÚæˆþÙÅäC—˜B’D”l‘Elyi§Yl1¤[(‹ÿñ§@àÊÆ­"+ )®º‚ЬÈh¬*½–ò ¬Çžr,,¨@(…TB"$ÚJÂ-ƒP2¯Å¸bjÈ ,’«Ãº)H !4´Q°¨ÌÒQFÊ,C‚;FÚ`DµXFëSm\“&–H©Í7ßb‰µî‚s®ijqºA#‰$&èœCnÐà­f{´©‡¹âHÍ–á¬An·D£9•ÓFôÜ®ÒöT»-·ùJˆ½öjï»íJ# 4ʯ@ƒ’h¾ƒ¤R $JðÇÂ;ÚÆ]"ºE#kuÙ&’yŠi[Ú°DŽ&RÄ™ù(EI^jãI\¬×Þšzš3F§°:ÿ3+¥¶Ê(¤ »ê0¨ÂDa!‹ɪԤ2Ë,§´’Ê)›Hb,‚{KG/ 3¬„Âx$ „"RHSDZŠL+õ¬ÎF@S­OP­Ñ‡4M‹-Óç€S5;N‰èç°ÃnºÕ¢3®šVƒû–S¥wƒN¹×†Ô6XW}<î2S=ôrSH¡îÚ«NVíâà® 4„=È­¯ P@HHÐ$kM’К¾#ÊÈAu+”PŸo’M¡‰&æý&$ ¿) ¤qï­ü^[bŽqá…›²Çüüã½+€¹r˜*É¢r2‰)F‚ ,Uê‹LWfê«Ip£ âHB­4ÿ›&Ú@ÿŸ P³„8¿Ê+s¡,CC’HuM{òѹ´ÒF#;êÜcT»à$i¹ë¢Y?6{NÔ©iÝ“µjà¯FÓFZá Òëe´Û¤fOש rªœ÷¤&lnCnЀ„¦¡W•’¥l6³¥á<ç)H0  $’Ö?$T-[H¨$û›.þ¦ Kéd!‰Ã.tñ‹ÈY¢–óáE²é0^9ÌSþe$…ì*„Ñ‘&–¢@åˆé™¬B‚¶PI?M8^¤´£èmÅGMq ^—¬×¡ iL‚B˜`%'¡HÂÉä (–‰ÄŸ2’=žílÚ; jÿXÃê¬&mDTÿ:õ´è€ÝMüôwÀG-h‡jÍ'•œþij} ¬_xÔã6†Ø‡@Ü Ö‰ð ë§+‰€âå2 êÛD"‘]ø­oó’ÉNla‰$DBq°…ã€ÍËñQ(áœã°( tbØ›ŒH”0I,! ] Ðéº82!އ’éF·¼´L© Èc fÇ„&°ó3Xr•´ˆ4î±II æOªw¨j˜FÝãølæX퀱h$ó3RF§”ÚÖöÈU¡ ‘š"Z­>jZDãKsdtT¥Zšímb ÐŽeŸ³5@ –n¾ÓÿD¬‡ƒûa‚¶±lýRÚÊHF"$"X¨&Ь‰?¤™Uäë >ÓÀø$¤i*R‹˜ä˜–‘å‰(gcºr˜•õDÖ$™¥Î/K)AŤ„0&AŸ afÆ”érJŒ¬_÷ØÕ:цk‰²Fiþ¸Ø˜5ïÙ_Ð’X´/”iµÕ¨v; -ŽÏHu*× ’Vx:ŸjLºÑmVb3Ühšdå’—d£)ŸõSíÈ‚µy2Û}`ii$†ÄÔÆ.&’BÂåĪ"©á‹BB“‘ˆ÷˜ ºIwµzuuFÛäÑŽÜš°÷i­Yy }·²²–ÿÙ®U´¯_ž¤OàŽ,«ó’‘…p‘²cgªK-é²-rÑ Ø €ê9¢R•b $®ãa—F"}çÛl8% ýÕb»Ô¡¢V?‘¶öĜҊ}&›õ­ŠSíc`p2‰¾Aq¸:a£`My…¹½Î2.I¸ko!iˆ,b² ªvYr–ñ!W $¬1cÙ¡u÷Þ´&Šn¥ÑÊLw»(–ñ+ËS“>ËjNUå,Éâ¢k8êç Zl¬Ä‹,·,½“EÛm¼Ó®çĺÿVȱüŒ# Ÿt*N‹KãóÝOÎá”ÓŒJYTÊÓéß"³ÚE’oPËöÕ×ÌVÑr=·Rí­jІÚj=B50Ò7kmD#_Ö…ê5-7Ðëxnƒ$´Ñ†LŽÄßh„2݉–À„^Iø‡Áé}ï{ÛBúö!æ2ì“méˆ8š¯ ÁÚ9ÛF›dcZ6–lºõ)MA£§÷èè´¬¼*%`Á>Û2¥û¬SbVj F½Ø\jqb‘e¯´‘ሖ·Á‰vÔG)¤ÝoRUÕG[iÈÆØ²H h­]«¥}VŲéHl¢‘µ…ÔÖQ{%É÷m†'nÿ ÐxzÕ«¯Ù–>Ëz#Hs#¥0p±.Gb8g²HBmF¾o!.Š«©Ó:Õ0z­0Aû¦U+'Ĉ“®HTq˜R>6–Lƒ ua4b˜è˜ÃèÅôWD˜—Ðb¥à…+*I#SœÀ†Áê§±ú¼Øž”%ÂJÌI(HY`7o™FŒ¦ÚN¤*ÈÀÁÇW Ü“¢r«¶ê@*g¦IÔ«  ­A­ØŒÎ{š×ÐÆÙiÛM« @g»'Ö™%q#›"a„ ¡Õ¯Ú èN¸Ì#¸Þ†•¼!AüáAäZø†"6âÆ 'ÐëBZD¼tâ0¯&*/½ nó~¤s²‰›ÿØŠóH2v„ãæK›À"äVÏŒÔ G°¨î£böò Œ¶Œ¨Œt0—Ü¢J|ÏI ø*ù¶¶at¦ûxƆÃÖÞc7feSªîÇ‚ÆìAP#“dAþ††Ø‰5®# SãèÁØû(jSp+fË9¬a× ¥6ªcìÀ#!ð¯>lêV  ÛÖnƒ âô=’@öîº\ˆïôLp ï˜Zä»Òk·jó~b*pd¬ÖjôBN¯¸‚œH¬Æê0Šbt­tô«HL†-ä¦)Ø‚°tp‹†°‚ç´ˆçô㟤æ0 gºG{ü¤#¦ãúå[Ej*J::e ÿ_K ¦”C^ 9¨æhŽñ=^8J…ÅîG:út ´`-Xƒ;hæÉÎFÉc!ð<øYH@§X)‚d‡Aþ†A$†¬%,aªl‚&ÆÅB &H‚$2¼\dïe½,±GH12ÊÈcLð"ÙʽÄÊ1&N`JîKÆ*+ ”–QaCkÂÐטã9¢Aiú^c™Q;b¥â‘!l‹µ‚ =À(‚!²Ì<ÌCÍ…¾Áºšª× Bÿ¶Aªì%A’©†Úlá"AHŒ^îmÎØL&ä…\ØŒ&Ú€Í,Åá,Ð6ï‰x¤(&²(mw¾¢¥¢H@¯`Âb/¨âMÒ"ö°éõÆ„%lŸdçYŒïb¶ÈƒÏ[Ñ-£ n’ ©#ã|þ¤8rR‹Ci’ñúJe¡:bל#€^«UŠ£¢~sؘ2S¢“5NÙbÁ5Ze׈ÆjDKS‚ÊÛXË–Þæ>têYBl„ëž !‚…˜ŠÝÆÌàÍ^´Ažißd!ðÍ2d^¶¡1—‰áÜ%DV( öÁ2ò3Œé‡>0"ÇêL,Ž­f"Ý©d†äFJLzwÿÐJ®:Ô1|D`Šä".BÍ‹f“ÂÒ„Âd´-´ˆ°ò 7“pòa40 ³r2Qüa¤Ï4´TxSHGãÄdCÅŠ’U2~Å([#ÇŠ:t#µdéÿEP`«ŠsTšƒÅ¨¤!+[c“„fبpS* Vjj=Р ˆ¥? K§Î&{éæ²oªK[²‹©¶ '$q' ‚ªJ"΂ÈB,ä»ÕnAdÍ ¯Îr/grFC2Bo­¶©ôΨC¦_D”H^¦4-0N1úB"}ÂÓB­Áz.Z’FeUMnÝÂç|Q|t|´#´çG­!Ê{ ‰92¢{¶¡ÿpæ:“ƒT–ÃKÇñ€ÚÖLj¥šC;Ÿ#¶ £`i’LJ“`J^<àf=uÊ-×ã·BÿB’ ÓÍ+b%ä[2P$ç4Ð)ñ_GbBg’2Ýjâ\+à 2 mt m392Iîsà„ŠÆ¢ôØdeˆâu2f÷¦DoU—@‹ØÂø(ì>.•&á©WƒTÅ&]{ŒufÿÄû¶sY·'¸g{ê¡ ßç4ˆèÂu€î‡Åè/mM¼cV`ÍÖmSð¬èæZUe7.H¤²Ž;:£ƒÄÆƒÎæVÄãðB²+…V(…bHîs«b‚ÄH –%“B VÿOðsvg#æaIµHp§B ô>q)¶DsÇ'H€ßbbhFAVŸ$FkTÁNVù|'w5œð yó¡–µO¶Ô˜u{LÃHe óaXµpI¡uˆ ŸӮר/µR£]}Å:xiR%j¶8v#Ä“SfXl =ŽLOÖ17àÕ!€•od"Ð ×Ö&0Ï?£  ÞL_ã6½ òd5•u$Ö#6†¯B5H0n1:34aðLÍKxP7´ˆkõIB–6¯„)*7G1³¾.XÁ'gŒTgT¶sµ!Tú¶Ð—Õ8zV óGsû¾ÏØhl”nWÚÿ¢fx½1lðD7zÃj:¬Ã6…ÇâC‡vìò. ÿÂ=ä2…¶[2B#†)††Iðxb‡ObÌ%ì`ZÀB¢?yâ{#S|½Ê,<†ÐÈwÒôª12&rT=³ä@¯7re¶iCSÀ ôéx,r]’ÂJ d‹çhJ†G¡WŸ° ½ÇX#g‚•7GÃ9¾¥8–5‚­¡"XgL7TÀN×ÒÏ8–9œ£;õ ›:ô­1XcYPp•¢/¸Bâà>Þâ÷fµq‰Žõ—JÚ@WøŽsò8ŠC{šÏfcCž;×ûjA‘·~LWP®OTê¡Hÿµ0:[ÃtƒJµC<ö¤RÐ@wfJC˜ÅŒr8 3;¼–zKÄ.ˆ…™¶Ö”ñWÌç;Äí¶"u>ùª(Â2'äšÀ 4Ed™y:«–™™5’õJÑoÉ‚‹7òÉ÷FDT©÷b/*"M† Ü€q˹œ@dã¸d€}Zùžð e« v5šÃH‰7gêžcûöÙ­}¶8DìÜYTt¶#¢s!"…ijá|ÚyŸµ8DËi˜K°tÙž¶U‹‘ÚÃ! Upª‹#Ôm#Ô|&ö͘-!ñ,ä[D{Îðmâ§ù#à% ,2AÈÞ«ndoû¢YÐ2ƉöÊa[û«Þ‰1$ƒ*J ÞBÄ+LM(¬H–6y.enß'*}“û7°S GCg»ÏJYæZ8ù™ Ÿ#âK}È!iÕá'Z!,_¶tñhù“_°·Uka”J¥äPÂZ¬F‘"%jË–µj±bɪõÐDˆ e$è0V¤†‘eÔØ°a£‘±ÿÚèÛ¶M[ÊkÚlic™Òš.–Ö¶Y“dëŸÎ{õ´í^˜ºš½†µgïÖVo¡FÖò鳆\›@¹“÷N«–µØ­-”UMZ-‘?Úª&ЖÆà?ׇ>¾HFÑ{>äÂï!9\¿Q€ ©7ÐFÿµ2Õ6ßh£ƒ)µÔàJº¨‰%_éÔFnè¢USMõ´Ï7>ýóá…&ž¸•6¤­ÈâXr±Wb‚åU%@X_Ð%X‡±ÅÖŽwùåVl0£oyÖMLVYg(” Y HHF ŸÐb—¥mÓkª‰©\-ÒÄŸ5ÅUôÜlöTƒ^rmÆòÜmiò7Ò~zÎÙJnz¢Í@ýE³P Y4R#mP›-’×™ñ©9©5 yç]oöhS™ÚZ H F±EbQódJû´d“6·¨$M ^ƒ“W%êtË®(þ ,°·xI¬hmÙ…˜\Êâu˜^C* ÂaIÿÞ-`n%fã]%¤‘Äc‘};Ù·WrF. ÅžK–iŒü“ÏjbÞætè冟n iÏ~ù gMrèÕöÞ¾­4BuÐEÓšÞé÷¦ž"U ¡Á&R#l¤ÁHG¤" ‚±ôyÞÄzÚivÐiªœ@¸-TjA 8Ryç©[lîã7Ò!tÛèbÓ„A¡xKF‹tÒ_©ˆnÓbP£‘kaVãˆub5n=5}Í5äŽAJ^$ÑF†HPIdœeI%H8Æ¥Ó窫t®eóz®Eó©5†bçg6ù¦9iœðŸ û)„^Gëè™ YNqyFsÞC±ÿTóÿ%”Qy²à'Þ™gR[¤Áéló øC-·hÄ^,²û‹$'½jSñZ³‹tÒ¥´ÍS(~“DNJOO½NaÙíôÔwÉUu†­³Ëþ-PÃÕlÙmE]ØÙm4Fr'ÆÅiÇïXØß½MÊÀø´GpûyÎåô…œýð+_vº l<ÂØŒg ÛCR Î= <ªj],RÇ‘xÌ!‘„y&ˆ*ôHjb±YE4æ2õ§=¡ªˆ™"AŸÿL<Ðk’mxƒ%.‰ƒ^¢™hCÚJRlñ¡¤¸ÁC;iXvÂ<5hDÕ›Þ6ö—=ÿ¯é0Wë‹©fµî%f/‰ÑÚŽ ƒ¬Ä€€%`CÚš†EÅÁeMJÑe4”JP,OÇ ¤8ÝÌ&³!¡à“šz¼©asÜD¶Sòè 7àOëJH’Ž-*$ Ì`غЅjR¯ÛOCCŒ|,!€K%¨œÞ.$’ÊŽ,ô!¢#%³B^ƒ(”•É"zŠUZ²œH"mV1M$¨éœ,¥‹J»ÞÏõ"©Éñ/Ìßö#-$y}wÉ q—ð‘`(mÈc4&‹4¬ ¡ù¦—y*G(*”òÈF¤ñAûTC:jÚS¦ °M-DrË H.µÊË5ÿÄc}²YyH2Ãñ°,?² H¢bÖ;OYN;·ÃTB®6\Dc–SŽÁ~—õÔ‚f ‘åCÄÃr ê­x“Ê=&cZ÷¢%Ùºá[ç[¸F˜7z%¨ ©¹ $œ´ l ó^eÁ_z²Ïí1ܤ’ƒ§^¶"Ñ€ïHzH‘cDr’óiI´Ü†D([Ù"%+—_kGl9×D©ïDÜAÙ=„“&í˜çâ Líöˆ¾­‰Lb%Ü­èc'º°ÈC ê/Þ:{v¹‘¶&$¹yGð4®‹­ð¼i¦ÑuüœeE¡! gƒwì±X4ClÝÿÚoÃTÈWM»¢Úaé¡ÈÓ ¶.Qh¥-6PVi;ˋڲ~µC±D]LÙ'ÿc©»VĉRù-ÕxUØþüç<Q‹ç[ ±AWñ Tu!‰&È!\8¨G=q‚·0êl_<É GuÖÈ\! {ÚVñE!ãŠÒgòH’« Qvd];óŽ´ÂS*t¥à5ŸžS{$%M}B¦ž%Ê@nÆ€;©a–¨=‡˜Êeùx_±ƒœå>HZþ¨Š¯ßÑP“¸<è\#·Ãtž_‚’8 ¶ ’ØÅRžøÊìÀÚñÝ›†#»èÈÝó ×÷»<ßn¦!B=7Þ†ÿ=Û$qi3" 5‹€Ô†íOCUÓocy¬ðL[8žÏ=Ø”Òü@Pÿ'u;Ìf`¶a#t®ô:˜ó°ÄkV`³Sy£ ¯¢D0¡u ¢uÛo<±D‘ð3màLa ·EŸ& O! –0MÓ¤ËÇ|_ñ\ÛÇcU$6Hj”6Åk't±pr åCŽ¥…BÃq’gQ´ó°IÛ[™eR|ç€C/§b ¨BB>)ú*œcJæh}æJ²Á}’aha)Ôr¥c{<3TºÇ{º§ RÅ(Á G»p ²P"FqR%UÉõ3¸4:xWo¡Ž]'P¶eèñ‡7/::ÙÑ…94m€£t/Öµ00ÿ`²ÕsL¨2›U²¤YÑQ¾#Y±AƆ³0˜È/1±Ax»˜g qÿpDEô30±<âÿ¦E(áVJ0 \a 3ƈÀ‚v’(ŽãØ%$ }" Ñ7'—š¸0HšWs$QOŒ „ÒW~©8_Àf9Ñ€Peá·„â¶lަ‘f6U0Ã_°ƒ¾sŒŸ³/”Ön“¡3~è[»ç[Òqi4±ˆ]!"IPIði߸UGŽ1)“_’2g)Þ±ÎAäÚ2éQQ|æ1éÇ÷8ZýgaÃ…E lXRŒÐ/Ò)§ÿY=Gy£å9sfbÕ€ñP•#fÔ“ñKŒ2ý§ŽRR½s*'á)qiÆcLö¦uL,ßnU.ÙEá8“)“õPÕPúP˜µq˜ÚÐ0mXC¤ƒáÖãQ*}B™C2×~è†*µP CK‰ƒ;½Vz uxC#aG9„u©rk‘g‚˜(8tš91ô±P{̃‡ âb"i¨Â—Å©c€‰œ©.8Ù“ùQ*$†—BK¥’J]Ø;²Q%øäaòâ9úå0=Õ ¸Ô2'ö`«”‚ _)8³S õ"(¶É;¨²êÿC*q[/ö@S+°’D'iœßXƒÉÉ ’HŠé;µ’D¾AJˆ†xщˆ‚5ã”ý÷WšÓ‹‰s&¯D2 E1%ª3Œ!QP3¡Ó:5E(SS¸ÑW"Tg*Ö 9Ä€>”Ž !B"¼ç;+’¶DÉ” Æé| *¥wHû 8Θˆµ˜Š€&£Á1í6B$Á*g¦ ‰f*Ö ¢ñz÷R)`6K'¥š›×=9Y!;”(l80Ú&­g2ÂPð9qFÄ3"ù35Á{ò¤ ê—SJ©TÖûÀû7;™ yc8œ’93ˆÆ™:%™RÿmÕÖnPs=è˜E)D "æH”8J0–¸«v ‘^1*õr±8±úJ÷±€ò›gøš!ÑMÅ t¹¤ôÆ<©f¥•ª­“¸ ŒàΙ“ùÂ7°! ¶óJGø8U‹bG½¦ª‹2$1sQQ†ò†œ†ç1é)µ Œ°`Rn&•1­@C+•:³7K-TŒâQ/Ƕòâ€h‡ça 'QPÒÊ ³Bœ×Ê—Jñ>iÐiƒ62²%K²&;²)‹²(‹G%‹61û²4k³jP²N!nP²Jð>n0³@û³3»³4«³h£³9;²<Û8Û>ÛNÿGx”´wTO%K³‚²3K²+û²'‹Gïsµ,Û²i“²²  „È y“'áÞ‘\–bc6–­Ò‘–i) ²` |Û·kB±·~›\~‹DÐa ÅÄ[—¢/·¹•{öV¸Éu Ûñ·–à·~{“¹•–v;·}sÛi‰‚—2º5ñÂio6‘–xk)oyLËsDŠD*a­ jßp A ÌD¼û»½ë»~¼ÀK¼Æ[¼¾  Ë‹¼Â;¼Ã˼̫¼ÇK½¿k½Ôë¼× ¼FTÝ!Bô 'a û {©«lË ¯’¨Ì£Ðx[A%Lnë 㛨Äý„¿÷‹¿úÿ*ÐA¬ÔÕýÕ-üÕQR%4¼(<åB-Þ>ìÜMNÌâ}ÝAGE¬Ö0%m#4‚iÔ,‡Ñ=pÁLC\°\sôSÜhÐ(.Ø žšçŠ2ÙŠ‚âH€ÉM?‰~ô3 zÙŒŽsî:óWš}M“ØžÝ$hÜÿG· É{éŽQsú~‘ kbûÈZbG²ØžGmò. ¢¼ 2++»môÐŽÿÜV²î-Œd>ÖY-æáÍÞXÎÂT27Z=Ì!lí"ŒÞ¸ÝFïìÅíÓëõœfÍÖm?%oõNa•NÕujAR{þŽ‘úÜÆ¾ñ(Þ®›|?˜^ëï? ]s…N0ŽCЋ~MÎk„Ø“¾øÏð3ð[<â¡àõ¤ø Æ®ûiG"ÏÆMb1÷ÓƒÁéºC:EÌØë»çÀ: ¾©AoìEýß` õÀÍÞ‘QÌÙ­õÅlåe~ݼÔÖ¾íZ]Ýa_îàÍÕÍŸîé=ÂÓþÑëý!,ÃO]Þ¬pÉÎbóNèƒ-üÍh“ÉüœùÎð£Øÿ𡨂>tÏКŒEjÔˆÍ@ƒl#°`Â6hдa“†ÍD6H(¶A‚I“ A’d¢F6m"YlÓ2%ÂFm`räX²¤K•2S2ÒÉçÀX‘‚"DsPh¬Xm´íÛ§m›6mÖvYÛö”ª-§Úlm“dëßW°aÅŽ%[ÖìY´iÍê"$LP p[—Eºs‘¤`’ÉÝ¼Ýæu‹w¯`¿zçN±Ø±Þ$Kž‹…e›tk†<·-]¹%ûÆåëV®åÀ‹S4&Q€ëB €mÜ@È ÷nÚBÔŽ³Í5€$ih¦L)ÓùD:#’œ½aÌÿmšP$™¤"sç#Uä™°¢Áë8+nd‰f;’4LИ$©þwï#ÓÀw~ðaK†ÄÓɤšlŠh#ôNjD–Hd ʧHЊ  ­©F¼}¶ùªk²ÚÆ]žrÊš¬´‘DµRTqEÓº†.¼3¬ $Z̯ÆLKÍ2Ô,Û,¯ÆYãË#—J!•€‚P%6š ‚U“7’9j™2ª®pê“â¨oôiŠÙ¨žÚ ÄuéЖ®ÜÖ³´‰œ°ÒÄe.Øúaîæ¤ 5ãú œ´"”«Š f6ó#n‘dq› ”,w/‘¦ƒïzoØ4ºÒ!ÌtpMšX€4Åp7¶qƒÿJ%êÿ FQˆL2¨á=ÌéIˆ’šxgeÝñË:²œ44!ˆ$Y•M”—©šÍ*:Ô‹ …”†üä‹>IbJJÕ’ým}¨"Ô&ÔˆXØ¢Ö°†­@ [yMCY¡ ‡ ""@šEü#$!m¡&$ ùÊ˼6#·B N: 0ãx9Žq@â$ºŠ4¯’ÀHoå²`]FB—ƒéê`HP€1©L¿I“mbH¦8ÙFN¸y  ã” %% üô…DPóG£ÁîAKÙЇê76m(Ô*#’„$*zÙjU,K¨”›\P€·½„F£ïúl`æµpµë^ŸõÛÿjq4.Çæ£~ ­"½5ÂyÉ”0‰Ô(I–Àt•62`HW›ZöfL¥“ÓOMçÂ49Â8 MNrL/†¬<¡TyR­n©L´É}˜w¼ý€ä«èõMDròE‚' [#„Ö9”£LoBùäH[F’»>Å¢ŽÖ™@Ês¡£!a{¤ª#bQ 9ZöøÚûI"Ç’ˆ¡X‘D%öño|8Ä q‰I|â§ØÄ*FñŠ]ÜbøûøÆŒkLãoã‡Ì oUªAÌQérEŠmiKÛA *¦³À•”÷Ñ Îe‚ª©Œ|‹%!³Ô0’!ÜWSl®Ä%S ƒÿºá„.8¸€´›6$Ç›Ê9È9’]æ\5z›R™ï wŸ­¢d˜Ü9Ðw4‚nl'Q¥$„†Tñj¿æã“QŽÒ÷!z¨r0^¬¥áŸÕà•LàƒG«%XÒÀU4ê yã~ŽÕŠØÚ,§DÂU®jBr\õ‘ä”$ 4Jï{½^ÃÇØÁNv±ÃÉìa+ûÙÈŽ¶³Mí­öú¿7‘[ü†J€ñk¦]ä”P«ZÖ:ùn˜3L òRSr%pݲÍÝNƒJ º%‚•a©éõ–ÒÌÖo‚O_¹94õF—cbó›ry›Û8,º€¦Û žÚ‰Lzÿ)OU‰ÿ?Ñä¼Q¬ˆ7]Â(Ž€ä#Úl¤øé‚.Ä»¤ÝyGÀ^D‘ÐyHFXÕ5¬õ W¶’£@e"¡ÀÑ`ˆ@­¬j8µp,œHKY U$Q]KÈB•èJWdQvü¶;´dÁöYbí š»ÚÍŽö»["a—…%Ð~v½óÝír|ã~öHT ¥óö\XÀ„0F6©âNÛ#y±ôÝŠÙŒeçÒN)2GZÒ-‘LYÛ»Ø;Oµí 悱yt¿XmfÙ°4Ç’ö¤+lZ—Eœ0dzÙîKvJ-­wÄçó2¨Q jR¢:ÕisHÿލ"t#â“òÊ3ŒÕû¢ƒ…b«8Fk²“Ð;ßÎÏ©-}Ž:ú“òaÉï)¢ ‰üHYè  ‘³™,¬ˆÉʺ?ò?ªØ†,‘Zƒ >š@‘@‘@†ºÀ®€)Õ²y ¹­o!²¿À¼!9·Õ©"—×Ë7Ï‚ ’ ¿€‹-á– I%¸È~á–!XB³¢‚’“׸ #t89i!Ú«7©®_++&0§˜¸3Tñ‡ˆØ šéžÞQ"þx>“ièC™€ªdÒ/ر/¤¨«ñA@!FA>¡/‹¸#Tƒ«¡€#‚¨IPŸ*lƒ^ ¤¨¤ÿ¨6 ¤I@\+ÀH 7ØŠ°ºk¨ü±ªˆƒÊJüQiI¸IIH‚FØ…H°Qt…Ú@§˜®ë#úI–³é¿é?®;›©›­P輎ªœ¸X$ºÁÅ;7ÌѲÅ;—{á­Ê©Áè‹Ëq2#C©Àñ}áÐPFÕ Ú¢ ÐH’˜-´­mâ·²’)Ϫ¼¶ô­W*u<“u„¸Ù(¡8!‡›½3‰“6Û†„i‰‰êx9·‚ yâ'ê!g’™Cë™ùh¢K)”cºÇáó ¢9 àÃt"Ÿ8h£§ “è¢u²£ºê“…HD¤ø">Ù8뱚¨aˆ–k" "`*À?„bI«ô¿!‘¯S›F Ê…º6(µ™Ä®ÿ)Eüi¿ÓÉ®hµϮРä?äºfÙ eé¿§LÏô,@d‰OfÙ†F8¤Í*ÆŽB%( PÁ ¡Kú sC7Ñ»ŒÃ’)k¤i, ä7w ¥˜¢¢Ð¢"ÞjFÆÉAÌà€˜º Z®ÂlG]¸Ù¸Nר.F‰a*Iñ˜;ʸ鸚HiH¹Bƒ,¤Bû‚*Gƒ!Z¦-´¯ŽÙ'>9'Š/•ð¢Ã¬tІô™šZè9!:CƒHAäC™Q¢4 Ç$È=*Àþ[ʮۅ´)n[D§@`‚Jöt,8­Š¤E$‘fÙ??²Š@Ò¿ø‰,þÿk–>@èd‹S*-Eš©Œ* a’êO"ëŒKª›}ÁÔÔ€œxë7Ô-n™’’ZePº©¢ò‘Ñ`©Æ(€WZÇ9qG…C˜£"B…CB7“£ê `"€BÁ¦ðÁŽ-|ˆïë“ A&ìàÈX Ízòá“{ü¡Ô$·:§½’ÚD8Ȭ±Ö¤ˆ+H0«šSÉÍÓ$ˆ8x ‹q 2UGÇ$üÊNJ¬¬è­ûº›ä?ÌJc›møšmEó ·7j²Ú#SÁÆ“KQ…²³”ÆÃù1¿hÆ:¥Ó’zœ©ÑȨe¬ŒM}¥W…²%$좚rÿ”“ÓA˜ëÓèý  åy"ì8=¦:~Ò>@)á{'Hˆ…mMC¨Š AßÖ;â!ª&m…påC>ŒŠdˆ'š} ©q„S,ˆsG]:žb¡@[|(?꿯s³§‰Z‹¯ˆ„oб¯$Q 8ÕŠâ𯈄¯˜0ù9 mø/QôŸF%ÓÀK¸°Š] ÇcÁ%áDâ‹Ü›E©`D’¸Ì·Ò<ú¬ÏؤW©Ä¨\+2)iŒØ@¸X­¥àP9Q!"Ž1‰“4éUä(¯í‰³ù೑øŽg-ÍsâhMºß¼>(M'H3>ñ8Zùÿ²/Ì„4Zy„ðcÚ:ô®©«ÐôÍìj@©HA4°˜#Lú§À¿éE…ò#Xä p„Z#‘°¬­ÐI¤<Êkø¼ÏðÔIé V$JNä «+E7èšm¤ÊÂË2‹´![E¶¸ËiDþU’ Õ ÙUáoƒŒJ $ù—ê-íhŒKj) b$N-ñÀ`l ÚH³]M®^Š¡µõ¥^š 7¸ë$"(/Kj‹›ÙLá– ÖzÚ³8€Ú†DV욨íÈëSÍwÚÍÕô¢õÚ¡aƒ(~Ö7âF‘>Z”µšž¤p“Ñ7ib8!ÿ ¤5åS¨¸ !Â]\€’»$ر²C`³7ˆ[¸Î&°:ÁŸ»[¨ Ó…e™°[¨„ˆb‘¼ä³¨eñÉŠÁ‹îËo¹V•b$ÛJ·’iÔ­_î1xã¬8ktA ›H øÁÖ{XM’ÆÀqÕw”U•…•MY\õœ7!Äkm‰bÛ¦”§˜ù/-l¦„ø‰vu‰ø²4ÅÇŒ#×¶ZŸ#•´ÙMúê¡è«á‰ZÃÚ±Yˆº*ç¬ò3:£V8Š£H…b"TǃñªÐ1ˆ²µ|EÀ¬ø:ÿ톢W¿U‹n›‘& § –a)‹}(ÅÿY»l)©li¼Z·d<¹à .Qœ†æIòŒÑÛTºŒ€)h¸+·‰Hýºp’ÿá’áÒU‡I3•%Á\Ç«†˜&FªÖ@6a +ÉÑ"òH¡”îi mK/«%V$m£E‚•ïÓ^ì]'8rè½^hí“ÃÂG¹ˆRáŽ`šÖl„WÁ”p~¢™9:A¬…¯â[5â;Ž6¡1Ãí:óT ‹„˜É?Ji°Ð±ªé ±.íÔþДֱ–€õÛÕþ0û ûŠ#±ðìæ-á¨ÒPÆæÎs©™‚ÔŠ¤³„‹-ÕDÆ$ˆƒ&H£ÿ¶î$ƒÖ%“²²É`­ØÐJ}C0Ù ŒßÜcbá¸ÕZML5q¸¢˜Ö½‰–{™î©牕—A6hÿÞP`š§éLgâ”)lÒíµ>!Äëuˆ~DÖ0b‡p4ü°¢ì!èÑ3²ö™û@HQ›6 Ó4ûê1ñ)Ç´ (m ‘CeO©ìàòèaq ]P‘ Ñfm²˜¨hIÜ S‹µ1‹tS<$¼G¤²HÍœ†ËÝ2K%­¨VÝsù$· ‘–ƒ^+¢v•Ëh‚ úo宯¸\æF=AžV·×³ÝXYÅïP_ Ñ‚ysÓq3/ÿo 7p“ÿ!V:3Wz×ø}˜áøï(‚@W‰v¢ÐHÞ"ý¡|ÞÌì’ž5|ôœ°HhC¡Ð‰²²#*t•΂`QJ¹t„øï^z„Ù]—-8y[?}À ÔÅù:I8ä†J›–6OÛ \@¾ä E`ª…m°„F ‹8x;îôŠðÔ†UæDƒEïl´€ä¨àm “ ’Ž-2L‚Øp8ÇZ··ÌéTB¥é6fWY$¸îzßÖªPmI%º jnÜ\+z)“¢2˜ˆâß]bÄ„Ù99Lרaû5¥*M#‚Eo9÷ë8›$êò åŽv¤® EÅœF¨³²LGÿScþ¦È£ ã«*tŸºr4ãÝø_#õñÚþ˜H±Å³ýÐjùýj ú Ðå<–YÏÁµ]à׫Œ VÅÊ‚vG˜°$ dI`üqƒ¾C‘G¾Î! Gø† “.‰„}ð»I܇UîÎOòV¾ïŠÃQaM•˦ KÒ Êë÷àBKd–jœÒ¨as)ë^ü¢ê@ü{)«ÈWî+·¼x '®5ûœæ"˜9ïÝÃ=$î Š)óÓŸR.2%Ó׈"ÉsŸrõ;Ÿè¢=¸¡BûçïP/w¶¾ä«ž-ô܉ˆ—˜Bž³g†pVd;NòF‹ pf‰;s¦:ÿC#"¸%–uLáp!®€¦ ›O®[]¬ÛŒþ‡v@ŵ×8– ×1`¿qÙ¹‹aɳí¯x K1Ò¦W€ø'pàÀomºi#I $(R8L‚b¢ÃQHtè‹9bäÈ" ‹I\D¢ÅŽQ®¼¨± Ç6r$&I¡3gÎ)x–HÒ¤IDLf"!zdE)™‚´H¢ ( ¬Z €`5@!Àr%»ukذYÛl#]ëbµZ‚«V$H¤ø»•@ÖµªÐ€„XÆB&Qâ ‘6H"µ‰sM¤Fm:wn‰Q6mДÿ.¦3›Fžµ>È5Ëh’ ñÜÆuÒhL›Æ]„HâÄ…¢Nsð oÞH¤A#:V¤Hއõº•ñÕ°ŽËZý·m›¾mÚni3M—5mߥM GîÛ›ÿ÷mŸ~ñ·ý7€þù·Ï7íw`‚ÿð7 7îÇ`„ ÈŸ?jã€Û\¨Ÿ>‰É6@•ÒG qÔÒGNuä!]„ÒEˆ¢Œ€qÔPH?5áF?¥ BAýäS >dn ‘ÄQ1Q”&1%¸„B €UxdU^XU9@^W¶X_]eVqlóUVÍé–bU™µUŒA6ÿ'[^ê¹•š‚ºµf]$Ä#£ÁVh@âZ¤Ÿ±sË™ÖÄ]kl(WÛm–Yöœrh4ÑFЭŠ9ZjŽTš¨ ¢Z#iDK-ÖÄâY´™ÖXZù©–™t‰÷{浇^zç=ÛÞ5‘ ‡6ðíb ˆ ø­¸ã~›¹ç¢ î´ Ù¥L%:EQŠ&!±ÔF%<ô’”OM$UJEA™YG™B’GîäSÁ9)Ñd51nH””‹0껑J)X›l–åÕa~ÖÉ _²¥V^Ä•b#¯cXagvÙݱ…íõrb•8Z]Ћ>ú§¶6ùÿšg¹wšk°5’œ¨ª"QÄs¸­:qI¨šÊE}Щi—ʥш-½6 °žÑ¥XW#ã™&Èmî³MÞÚX#´ÛX£ž{èmCŸ}楷M$¶ø6Œÿã@éAž®¸ºÀe³¶dh¹ç¶ A‚r ‘ ‘¼4™>‘“¦S©:-¼žÔ¿(Î’Œ*i)oDK6¡ðN:!œ¤OF&É“IÈÑ"E%Ñä’FøBõÑ«õËåcUûØXkyù2÷f]oæUeAæFËÛ¥…æw1›•×]g ^ÎcÑ9Øa¥_´£»uFÚ¢lÅ2LhZiÈÖˆ&Ùê4¤ "ÖÜ$¡!¥CÿqjÂâ7M òœ©5É ‘àš$j! a½¯Mà)Ë^ uµìgZ€ãâØci™‡>"²¡6ö¡ÔÆjSˆ$Øõ–}F‘„ç¢Dô±rM<×6d‘„](D2ªW ^¤±/ökcºc‚“JÄ/Ð(F'ÚN4Ã’‚ Ž@^OrR<®Ai^Qž¤t#Œ ¤˜[™æÆ³AÕo/ØŸZȇ&HBZQŒÎâW•¯ŒÅày ÍÀã&Æ`§j" Pê­DÛ”gHãA"\ €±YÕ¸´ƒÜæjµ)`“$Bœ^6© (È%ÚjóšJpÎ=m]ÿæ$83D˜‹ýÜÒ¥±pROˆ Á6äžiu pˆ{ßæC7L«oÿ…-,!‹&üà –„$la vþÃÿ g$Ð3Å}˜‹¶¸ÅÓeO{¦¡ž:‚ÈQ`7#0¾Ê)DÉFjôБ<¥!RBc‹zdG ý$'ÀëI‘Æ“­”&% G¹”D,%[¢™›*)–µ(’‘‚z øÒä>«˜1&ËNwh*¦œ…ldõ³Y™vš>¯LFÌ Ígø'šÌ4°#Dj6“„Uí¦7—!×Òв )‚% [S œ6¡‰‘LPpc‰öhC²øÊ]´²µ"Œ¯fzÙ^Ÿè„ÿ'O:n<Ô«6Âi Ä­Gq%Qàøv ‚bA™âAí¹‡hv«‘òZÂÜÌ«yµC‘Æ(•Ô9¤ ‘hO †$‚•tkÃË- ¦(A˜ AmS ò3â®ùB@™¾3–.uÅ“iåMk–§³Œ"êÓ`ÈG'—¥©P<ݤÍR–´„‘¤äšiz•JÒD¢i­ÂR Ø€‚Í<$ØŒg0sU¹üÀ~ñ aÚD,RA.¶ ±ˆõ—TEÐ/bqKY@`+µ}/, ˜–…•¼]ˆœâÄ+àä“kÐ.3O¸ ‚DøCþHnCý×fý19ñÿ¤g–èçí\d\Úí1$&)IIò•‰¨EùâobR#! x#ðˆ”Ú¦”IÆ­Èô*Ò/À|&ã’ pš>lš,M™D‹OS†&¸p-K“öÒ{I§*f°ÛÌKUèüBR:aªbUÔn¸ªRŒ$y,+ƒßÚ é…”¤ÝÎ"?±(ËÓ[Á ú”%J_S1ÜùnžS戇ÅñÁ«|àCCüDb²ˆ œ>8'.{ÄÞ—Å%‹HlösÕ)b$aª;ÕQ„% ¥ÅZô:ÖB„ü2­Fò˜7‚9JÊmk¼9*‰·9y`QŽ [gOO%ĵȖ<œ«ˆlÿ‘¢l‹šͧ<õŒ|pB– Ë=5QX{¢ð›¹#³›ªÚ/MxTg"UJ}0‚!B`2=,%ØU¼’\¤K]žÞ›,ìî÷U·™Áy{ôx±ÒÒ'ši<äÑ…­GœWø¨GŠ;ç¶„žžzF2’qðÖ6úÆî Š;(Ñ¥DÎI" ÈNö·¶‘H²‹#DˆjŸ¯ 6é(‹ÛcÂZ%?„kn(RÁŠ÷»ÝzÙ`¿;©’¶Ò68ÁEN L¤t" N¤ciRaMñÍ•žžI/ß;µüàˆm¼/MÔí’#Å·ôåy”ËËËŽï« ™SªïAȺ‰¬7 ÿY+þXʵ6LRP{™Óâ™j¨M»-L¹wnÊÂéúTMgšS™°—²ª€à"§ÑÅ™W£˜‘Ü–{öñX¸Øé9¨­Ñ†ù„_nøGžŽ®oÈÂ…["A¹"ÊiC! QŠF0Ú¤hŸD¼ÑQXT­ˆ¼„ÄQ ¸)‰ ¹•ÔÁìVý„ü„‚™ “¼Öq¥ÈnDI`°Á‰ÒõÔ‰(ýTtZO¡¹:¹Ê‹ýè™äÑO¡ä Ì vŘd–$h, ¥”j¡,AÐ_ ”01!É5SÈØOûÈœaôÉaµ™‡ÙŒäY—N•—aaׄ¥Åÿñ\9= á_áì—y¤!üé|ߌ5ÝøíÂxØüeHÓµ˜ýeÖ6„UB4Q8ÔFÉˉ˜”¼T¨YÛ½¦@¸Á—‰”¹u™N íßß¡”’ÈÁ°Dš©ÎjÌ–°IÄYÝHáéuaaHBËàvÚÞ›Põ¢þÝ4Æ0Ž…/@ÄÁU}Jj‘–ì‡7ˆÿBîC.d…0¤x|ÈŽýC?‰]kA›³QnEód›“ÔȾ˜4²@(¦›ÞÑnO°$ß™ÄT§…R VF˜GD ` ›õ 6šL›”aXð˜x×ø8Ÿ ºIzÕ OE—a¬/*KzMáQyVü…ÀÈJjDŒIxeÇÅM]䢿¥\¡}Oýˆaø˜WQmXÎÈM& eu½¿½ F7‰‡ÐÍ·´‡<6–9¡Ó‰u ¾Ÿ@ø£aZCÈS¤NH „D0!W3ÆË«0ÅÆíHªÐV$‰ÈäJ ÞñVºÝ…”’ Ìsà$T¼^î<"¾€\ Ö¨QØÿ¢eö<×½Ù‰YÀ‰Íl™¨Iç•6aWΈŒPÞÅ©)U«É™†ÅàO¤JAï #5‚ažxãwhö°`†ß &‹wÊ8Ž…ÍÐT6¦ x8N:æ7™G·œX‘eQ)†DØ“³¬_zè‚û¦å´“bZF¢Ñìh$FxѼ¼•àÝ^(ÏhâÄŠ”&r(IYhÖ–Ý}â$>Ði9Dàî<Ç#N…pnÅ8âÜ¿%Õ"\Y®Åå-R¡Ì\ŒßâÕ`ÉØ#™LReì’gQÄÔs FÆÊÑOžÉéMe¦Üñ 0–WÏdX²Ü¥äÿ¿…,:äÍ7”lj=Và¬é6èaŽ€Yð“È-fQ$„ *\L‘, hºÔ“ƒÙ‰žÄcÆÎ“  ”àÄpµˆT©ä‡‚‘œ[–- n¡ÔGÝQX ¹„=èÒìåì1×H—ÍÕT'Îp—( œUp^!qæÞ 'Mqéx©—Ílé` árÜÆAZRÐVzméæYÉð^t×\tÏœeWÊÆwMi'¡eRÎIø %¶Hâàa~|ô9iKà´‡ûÅŸ@]$Õ!E‚,ÜB±¡Ëã*ºDÂ5ÀRê´uă^Ì5ÙÙ1ÅAœÔ…úÝÿÁ„HùNZP$L§Ö¹ÕÑI±ÛDy Æ†fFìµè¶þQ2ÞÃ-ÒT*‹š°Ì"Ñ  F¥ ¿-ÕâåE ÁâéeÅÔxåĤFLÅ }ay:žpãÍÌ™ÍXÓ6jÇ®>^ʺ‰8¦g 8Ò—ÌÍc@d©á ÉЛ^}°Ì´ÜBbæ+ˆˆ­@øX¾òG$0D!`Ú…QS8À\”EX™i¦f(Úݥʦújª¤Ý¥ÛˆnÍPDL“9Û‰þ‘JHYÒE^”Ìröà„‰ÒPÑ̆ÉæÚÍE¥t)\´®'ÏKa%\Q ÊY$Ré,ÇRpd ÜzGO-Õþ›ÿøŸ\Þ ÷Ðà˜*¥0¢ô….ÎñV¼TeÉarŽ­Ñ‡¶¬‡{p-­!|Øš­±©–Ó_f/ö²Ç›ZÛ¢爯|~Ó´”/^i¯öŽ5| ”µŽ>ÇÚñQD”"JL¦®ÅêÊ‘ÂPêLî]Þ*‰ÿZàñÔdF…»ÁHDl «æÅ ²šñ9_²¥åIRS¦ÜnNÌNmãÝL›‰LãY“'QÒž$`oMÿ§æ]!Ÿ”ßÅÁâb¦ŽpÙI†JО™d˜ƒÉ8/’X œW¡3ÒméÂÉܦ1\˜ ËæŒ…•Ò€­•Ì•W' ÏÌ[†§Ï¨IN“4¯fiMÚu¡×·Vú˜‡ô=K9ñ8©«FÂ]]¤y´ï ÝâØ*DW+Ž$Lœé¡13ö&Рγ°‡€VáP ûÐEÂ.ÀÔJxQì M´9ê}Ñ–ï­L†bˆ¢[Z=ìÃîÄÔ%"vñEàYJ¶EÀ”T’ XW+naø,ÒŸÍpX0e.v¨}2TÎ0 ê¬ö s˜ïM©,Ž.ô ÿIëLjðT®ʹÚ,Ëeêf™h6úä¦Yæ*¨ieC Î÷E–{Ž.ÐS$E°­¯”ŠHg”<¦!8Ÿ˜Ð}³à¬µ´˜³Ö‡ôB‹Ñq_e jí8‰ìø+ë¸&G¼ˆM\¢Kâ–Bã­àâÖHå/Þ‚b¤þoÂÐ$O´AdÎwDTöŠj †2ïâåSp[œÚ-‚£Ž¾2kŸL̼٨í`o‹!ÌÆ¿ÑÔb O8œB.Oû®šà›z’ìhcëЧ?Õ ÜSq£nóßpŸùºqce_æ’X✡³èÞ쇬åM¬iR”Þôaâ(¤”³XÞ;*ÖÞ,¹ÿyìM7Ey+COŽDÅœ¢¼xQKFÄA]íï~ ðbcj‡†!÷]BÏ9H9ö}«$uR„½42îÜÈ_l ±”Œ·rë³²vúÀ…bÌ8 Dmå1mO)÷´‡U˰ÎÌÅ–€ ´ÊÈnæq˜˜NzÑî6‘~Wµò"›h8yy϶J¡ ±™b|.}¦³9}í •íØD~ ;ˆH‚58›F•âF£Q³›E,bƒ{œBƒ¢`è6€ï~e`̳EÔ‰ª¡8ú4e*Ïìª@æ^8wº7¶eG·úSbøà_°Và—|MRÖp† ž,<Ÿ©çŽ?¼­·" æ{^éŸÈ¥mgº¿@á‹q·¸„6m·´]ÓeM‰8Û®iÛfë_¤[’þÙ²µ­¢Å‡%Yô¨í_Ç[ÿ•4iRÛEˆ'Y¶tù²eGHPФÙ ›LjöL‚(‰Ÿ(~ÚlÒ&E’¤)’–PZ"E‘¦K—*•šÂ)T©J•$MòÕkX°J“(k–iT¦`‹|u›¢Mœ¢L )Z3ÿP¢zIèZ@ @‰Á„@ØpäÊ7ÚFñ`ŠCfì¸3ãÄ‹1cD!<.\xs€Òc·6̘D‰6m˜´a³ûw#&Iv“!;3cÎŽÍœyä†;W‡~ü°óÃÛ«g‡<¶áÔm Ï:9tˆ´‰Ô¨Í>mßôéÚf;µ‚·ñw¨-!GüsȤ}¾Ù¦’,%¿ùgÁ’0:iÂ-„ÉŸ’"Ù…€¾’N§ž˜H¡.óÒ E›zJA.¦œ¢Š,¬ª‚*+“€J©ªÆ+)³bü‘¬Õ‚«&Ü`¢š’@¢‰šhêÉ® zÿ‚ò'¡JÀì0,Eƒm˪#LµÎä¸ :ÊÂ\ͰÖPËN´ÃZÛºÆàl¬Mİ»9ÙŠØÍ·6a¤ 4üüm·7ì5ÕìµÛè”SºÖ$ S2ñ6[lµD….´KËl“µ¾k,‰Fy¯müÙ¦?‡ôëO—†.Òχ")a!üÒ?¬Ù%¥šµÖ‡ú»è ”¶I¿û’-è ]|M¶Vühå•Zlõ»ÖZ^Äššš ‹'&‰B¢\(Q Q¯'Ñu’ 7ÔºQ­ŸR«©‚´H·”jÂǪ2`å`^†£ë\vÕEÁÃ)¡$bÁk 3Jisô3ÃRÿÅì¶ã2f³S/1í4äÔ,TICý.µI³”í(6Ð@¢Ï6p޾HÚ0Ž2:1kOÑcT:¢­#YÎÑ>ó,¼ÂÍ4³ñÀTŠx/’X‰E}T½loý³¦?²jÄIdIU7dyH’ÿú3è>Iê¾HÙý,yí´_u¨ØýXµÛ¡´G¼?`J[`ÿëè\îz÷&£€¢I( î 7rLKÈ“P!Ç«h+H¯|4 ö&Ê Ò_{_ü1)7Ú¸«¦%Cl·a›Øí vŒ©Ü4cì6ƈFMÑÆÆ$:cå¦F.èä4ý T¨“ãîéC“#¾Ýêâ‰4ÿήÝÍ‹Y´JÕ²;ÑÊ‹ôeÍ `mæ“7ÕÎNÈa™g4“ØÀO’h¸¬a‹}xrÞ:ÈCþó+ˆn°ˆ%"Q&8‚gq„ÏÒ?¥Ê=m„ ùt”6Ä¢ MhDŠ5A¾¡WÞª•AôC_ÑÊY A[³tå-ý\cC$ KNn".(5éIÀó‰Âl’Ù¡ -»ŠŒèe:Óyå‹hñ×Wd—£·”Œ<š[⢢%®x6é ðŠ¢"9 DèÉ•H¦ÙH‡cÍ1Œe•-­MkZÎlŽVô€¬Qè¡Z󆦛H\’ ¨Ë’ú$(" áëù’v–†œÿBB¦;õëRgÞ4žÐÀljù `¦J &"¸á’­ˆE,ªa ±m£>û«„-$– –…6´ ŽÐ¶h.A؉tp,aGÒ 7¶›٠—CWµjWeóOš¥HØ/‡M]Z˜HÀ§"¡ÕqìÒ¾yF9˜BLaº¨^*RCuÊQEšãÔ)j™I*e ƒY\Òk±h…$ü1ŸVQÿmà¼Ïä2˜‹.rÖ¸E$¶!‰8D˜¿2VdÕ‚Ôê"dCAŒµÉ=®ˆÎ"[±jå¸Xd8D›$t1›àss+Šà˜‚tÙÄ ëÂÝUT×”†Ö‹v::(W¬xÒþh´»© ÃâÍb|¹Üë2œznTJ(Å–÷4Õ@dZikR)šÙ˜æRŠLéš,ÕÈý½I€4T$Lh¾žö©.v!Å@à©ãPF21 Ul@° ²éMJšFIŽæ¸Ü£§²­eU—±èZ$öLvþ°±2Ú"A‚º ®?ÿ„þ’±iÃ@òQ°‚Ar oôWÁÿúøF‚dž Ógý=Ð|"| cÅbSðªV¼}#×€‰ÒUÝÑ]tT—¼²Ò•ÓÉ( úêÑg¥â”~¬´¤-ãZιLÉ‹­^N$%»”‹]Âco˜ÄÚ+]é;¢Bêy>-Mêd+í-} Õô8fKûskH †à g8sújêÓŸvÆQÍë^ô‚Z€SJ©þ¢3‚§ÊÉ1n"4ȲT€"” …¦c!‹]‚Mlß°[­rØ*Éñ5@ûÁ„&”\HA®NP«T²Z|c™õ®#b %fxLŒâæeÚ¢ /’Ñ‹”}•вEG¬«ÿJÊ:3&¥ rq£ðú¢GÇvŽsÌ lí¸t¡k&3©’ÄRÁ0社Sö.å&WNÐû#¾áGK‹‰ ތ٠q’à36ø,í³ ’À†$¤'zl](Ö€³œ)£K`_$Á D “¼=™Ö$`h£Žx"ÅéL®E¢8ߥ5v¶ónùk:1(‹U‘Ø[pAR·»« xµHƒmñ ¾mãl=‰>:²‹6ü# `ÿGªjÁkX3–x ëPš”Ë•{Šžs-Qäb• ߎÉcÉʶBZØ‘-`,mWÐâB¼Dö²À›IMÿúnMùPê)Nš´—½´{IM¹’ÑCÈèHM,ƒ®¢êä½G‡TÌk´¢P“õ¬|[Þ(ÃÛP õ%A(»ÃýWJÐñ.5fæZyzOI8B¼oŒSpyÕÝÜèqJbÊCU9·G Ô¯~¿¶s¯5xÞ° "-XÉ ƒ–"HÚ [(Ó ÉØ%a‰FÀ¿m¡È?d¡· Ê‚%ÚÊ",ãëRåVÂì$‰´ ‹Øf îlÂr6G^®-Úúé^RÀ,nçtÆw&Hj7.KI0Iò‚sÖò¦ Ÿh"]‚ 'Ò-Ö.²^ËÝÌCÞ¶K …¾Ê$ßÌÿl4PŠ–ÂKeì­6ˆR g"!“ØÀሠÏÜBá– Ú#PvÇ7 ná(& Nå(—jáOº†ûÞcû>­~bH€të} ¼‘(÷²j—pç(¿ôK>úË?fe?1mÂèÒ"¬áFBPÁ:¢"(¸,áŠ#>"ÿ–¥BþaUDítAþqðBdÂÜŒ&Š Ÿä)ÇJñIb(_´Â_tï8K/°ÉüÅGH« ä€7>$Ž>¤÷¢ñ fÜänÊ(ë\ŠâsVkI(† •(Ž’0Ö%7z¯1J Òô'¥nc{æä÷mS Ã6šJHâ\8¬ÿ‹(|cIhoáR #'°Ðõà£(Ó¸&; ^¨Óð1jÁ2jA¿|æ_I ä@ùé8Vã+bHP ÒkðñO2M«®êȉ \Å>,oH@@ ##æ£ÁäAä4 Ã2¤$'#äÂ( AfRB& $ $Cô¡$üa2(3¤%5ñA|(!$‹‰ðâ(²L×Eq¯'Z¤u’À bÄÙòå‹£$Ÿœ'® *Oæˆ&êF¹ç0R©1 ц46&’&£iVæ8àâ„zæàÒqPØ 70³.ࣧ®mô„ÐÀGß U®´Á’´˜”6wÿÉ8i“[1r—¾0çZA—ÀT«Ò`HTjá6± ñ1%/¨?ê´üÖXÂJ-ÁØÊ™œ)…N„ÚOV(J¨-vCd4¬† X VÆOZÈO<áJ,±0±†p(o|­ëÓTƒM]¦rî ¬}*+=K,FkÆb N‹,ÜàÉ2§ËЇ.t‚µäIÜRpñfpñVÕY'H„ÛpK(”$ØH€­ÌËÞÄãz$CͶöNèi-Næ‡8<óàšg.'ˆƒ \ïF ® Ò F{Ê AÓOÞÃ"b! Ö6“xnHkI‘ôÓ¼/^ÏÐIkÁ¸/7Ñ5½µûì—Œ³]ýÿ$pìpxÈWØ Vƪ­2¨mÔT ¶I…!Þæm¶Á¶¡˜)ºIé”κéu'(%„sèœb;ÓiptW KÕ”…­Ž6£Ô Z`£nÌDÀM—÷”Är°@õGhÖSj^<0Ûp‚(X‹ÆêB'Ue©0¶&ksàƒP@é2­‹O 8P†£=8 gÐH}f"±êp½†x.œ46r£Áq£Á†” /É„³]yÉH³çÄP¿êÖ"/I>VÅ?':iW?‚­pÿhœÔrZ¥üúƒé À'±vY óbÇꈛZÐ&:Óª9ç’¶&B$ÊpLyá²7g/AŽ^t)¶u45)P',½Bw2 Ëèb\>ÄË­ËÎe\"K.mË)Ói§Ò]zª'jUË7£ êk®F¨ÊckC ;T‰dÞDÎ ˆ£€ý$¥ Å„<3öʧY?³§® »ð(L³G3ÍA µAôÁÆÕ5£!Ó¤!6[³ Ô[ß¶¥oïÕqw©6¸]-Rå2Ék¾îp˜Øœ€îè0È |X0lB€òÅn’ÁÄ@ d%1ÌÄ&l9³Y&µ9'Y’œoÿ2CÊ™ÁX2›÷!‰îtìs>É £h0ŠøiFìŽ+™ŒðÆHÈ"26Ç\쨊Êea†Âû¸Ž~Vòø¸.euŠ´÷Ê@'²ò"Rƒ+¾~ÒÔ#°Pj6dFÌXONj*.Ág… ³ šP}ΖOLØ7|ƺº°x.“ì±OȘÝIõÁ²¡ªa\a9Izƒ‘T4ÓtÉ5˵\gÓÓFh—‹¹€a•UÌ9LÀŽeèn…­>$ô[ÂÕRâ$ÆÖ‚EDw(ÑŽ‰øXŠJ¤¢Vp¶µwø *f^‚ŒŸ=Õ)²mxoÕs:Êx›$ñ ZŸ z¶œ¶wlÿk‰š×'Êe“z‚x~b\ü0<¤/ Ø*{þòz¼±N¶i0újgFúr/…‚£³‰ \PØ18îl¦wÇ£6I}òÖ=è’Êçk¬¡•ŕ焻I‘”¸—kêV¤AˆÓ5c¡×\¹ôOÔ•ÑÀª3íªäãpÆé‚å«ô¯¬î#pâ"®É¬8èþa!lA8¢VÌNo¤­ÍN"æØúبRî¶ ?’E2ð+TS×b` fH¾BÛp‰æË஢sÂwܨ Yë±oõÜ€.–¤IÒîI*† 1ÓÞLF –::ô\ ’Ÿ†8vP"ó’ ¡ ÿá·Û€Lˆ |F6‡x8…˜jÕ‰+bš $ôæë®$q„šÀwÍýþæ¾é»±üÛYöQéÙÜ^Ð.7g+—M‹†¤?ªS“bÍqbD‚–‰¾×9¼}7*J&3ãŠÎ ²ñra6 UU[Õ*Ç ?&ÎX4ôJ¯ô"ÍWQ\úN4]/4Ý#Ça”g !ÞãYk|8emÝ#}ftÈ3mu±ý„2‰qÉ\¢ÜtÉZÿy—ªÜ§gó•_S¨ëáH…I[S¿†ÔOD“çÞC »ÆÚ`/Èl¸:dõ!Dòß BÁ.B "ütí!*‚plá®"äBX2Ñ0Ƭ˜žÏAíBGÊN¤UÛ€(‚¬?üÚÜÙHgj• ☊ð8óîÕÕNîܘ ÒvsÆI†W-IÄæKdÖÑåsüXŸrÌ}M\2Æ+Å1Cß6ÚR¤cßbNj y’{ôà~44#„Ȥ#ó7Þã|èÂF×ç2í>’@PV·3{ÔÞ]³€[A ƒ¹ó•‡»´aÝ_ó•ƒIcï·’/IKwé\™7¿¦¿‡ Kœ ç"¦ÿó?.BÃÄ™Á$Â*œ%„šYÌV,%Œ(¿(Cÿ'Mbóÿ­yòA6ôMí"ܲ!pî`>* :æ•Ä Š¯é¥-rqGââåmKåíB'¾7-Üøc>¡Ô²ì‚òækþ¶ÌÔ1‡Ãçó¿áÑŽû"xÙd1$­}ýNžcõÍ€¼$22È=Hø¥ñ± t|¿2oh“¡U¦Ø2!xÆEפ›¼"A83 ªÙÓ§¯š>kÖôe#xPŸ½löVh­š´ZѬŲ«‘Ç#Eº(-c,Y±b]Ü·M›¶mÖ´ÅÔví¥5]-e¶”DÂM›ÿ‚ J´èÐmF‹ÿ¶LÊ´©Ó‘n¡@’ÉÔ«V‘¤ÈŠ¢êÖ®L’ À ‰V«)˜ŒJ¢I’)J¤x›Ä\ºs“(I¢"‰_9mÊNe‚$,a…«bmaµ*W$,Äbm V1’&…ÍbÎŒ¹ÉÔ$ˆ5c똪ÙÒÇ’Ð:‰$m@@"€±€Ð»@¿q˦€@€·(°\önÅo(‘¦M¤F×Ù´a+ûvìØEŠ¿~½›8×ã„ì¾ š6ÕÛ¸7)eý˜;vlT±ÖÀlùX“Ï@ÕÔS=ÙcM‚Õ¤ÔJ,ÅÒJ}ö5ÒÆƒFa5&]”Ð7ÿ¸ÔÒ.ÖädKKÿ%âôR$%ı./½d‹-Ú„¸”6ßXCã?3þ³M<ÚX RNEbËSH&)‰-$ÆDgSmeVXƒµ–•Zg¡€ ˆ©u•d(¤€‚I”ðVs• —\~åÕWmÄAU†eXuâ9WQFi•Ÿ`‘eVb†ÝI l´VfN^fÕ–XáÙ™YXÑ ¯!g[q›rÊ\›BjБjÛ§ÓI·im²‘Z@qX×vm°Ñˆ$"…Gw²'^’'l®Â~$߬õÕ²aA')K-²T£M>USCúÔ£EždQJ*U#‹IYÓJ#)IcMFÑH#®†%´Í¼ÿ.¨S‰1–Ó5‘ôdS‰þHòÀIü(‰|Û$Ô‰PIòÚ’ÇÙÔ’IVÜT$Û¬¶%a|âYØVž5ñdYT~œÕV_=Ö†[sÁÕrm*‘œr’ÌhUO:Š–X®Å§U^î)( (¬6'V› ºU;ê–iKŸµ(œ+ûEU ZUE‚$W[pÒ…àõq©–Àim¹íVtÀåÆ)À‘`}¾—«­õ]ÇÈuݱÇvÝE²·Þàu÷7yáí}ø†Ö6XKE²$¤MCúLNPã!ô¬»ñžô7¸ìJh­»q»nEîF®OKûü£Š7åt Œ<É¡“6GÎhËÁ<Î(pTÿ< Ì5;ÌpS=Z¬2,ä %}kyúž\ù*oaD­ ‰A(@©Æ>òáÊD=̇å´áîèç$é"<‚¡xEÃшˆº2Ru)¨tY]ˆ`]Ô_5¹…ˆ´ÁŸ´äDûXÞPާÆ6&)*«IËTª×šÍh)}m8Tž®â3Ÿ¡ìÿ3„iƒðÒ¦6Á¬ rˆCaöǨËÒ‘Ž´ ú˜š?]jOb² ѬW™Cae“¦iWð”à”¨NYÀUð7$h%@`;°!9bÛ ËFãÔFSº!ÛÀªÌ¦-PO 8fö …àW}Ð5Íhê'<Zܳ&R}PË=¼\å¼I%ñ#ÀJCy:" •Äâ] â–‚TE{DQ"§“ÅêèUµDŒ.ùI‰xâ"mìBDEÑSˆä#§ìãHyh¿‘ƤQ¢ EJD)jÑ ¤ÑíhE_³šÉ´¦Kw ¥öÇÇö‰_qÌX¨$4µÌLoÿJ`脳«äì0š)Ù¡8é'ÄÄt--Õ Æ"¥Ä‘~NjB`ÌbÊTÀ”¸*m¦C‚à$«% #ºªS-ç¬¡Ó šm7Ds~Sëü„Ì OอŽÔ#±á³(Ãômš{ó‡äˆüЇø!ˆå*§ jpä#)¹æJ— {T1[ñ¬5ªv™V‡Úð‡‰`‚"›”&´ó×½B$°¤é% ŠK$ K¸qyFúZ ãýeFJ¬á#R‘@´¬üiX’j `63îMµJNcƒEÆR¤ŎðÛ“d¸B4íý©dI/ö.Uë…¥ UMeÿVW‰SÚ· AX¯Ö6l—ÀN0uY6^zЂÂùsp9×kÇBû)â"1!t1šz–,¦Y¸”ü5»‚p±—„HÖ ŒMµÈi {ˆ[œ{œµT„TQ  ­D¤ ÄÃ?®‡EäÕ’"kC)‚‰Kj#‚΋FHØ‘Úp8ìÎa8’$|k‹FèbIÅ{M‘$öÛŠIB$xžs£»Èþ!¡B»TVšKÄlÆcb‚Ó\ú²7H‚iÛsZÿr6(-…)5IU*'-ù<Ëü©¼gåXîÌQž2«We%¦MyK”ÀÓú uX·¶ çtÐSh­ mLÿÕ›²‚PÕËI3®DhBW”]ÐÄŽeSbCŒ€«‚óð~¬IØF¼ç®þÙV7%[p’³ZaP4ÙÕ¸hKAªGeÛYÔÓÛ<þì¼ôäŸøÓ 1a­5Êx;k|C<ÚFþ! Ilø ³Ñ?ÚÀ»Fl#I`cRVf‹ÁñdgiÂhvö?çÍ)DzÒ%)M>ya‚ààܳLé*^ôÖû§¯¨“S™dy­W\GÉOÚsŒgØ_«ª26³ÄoGÖž“À ÚÐ.Ìà7Ëù tjÃôMµêè ÂÁleÂbvšÕlwô*ìýP“×½2’@ÿù@¸;Û’ÜŠ B-{¤½í8lWºÄ5|:Ä› Ч=bQÚˆÈÃÇ@ö¬=Åý½¨&5Ar‘o²¢åd“r¦P‰U´¡ßàw Îy¡ÔO‡2‹£\Eµæ’' KhH£TI”  ¸r‹È.s˜òáÉ0Y“V¼D¿«dR~{*oœ¿Ä>²,z~ee)/JÝd5çΩ/ÏE½sŒA°6\ÎÛÒ6 Ö¦SmSkš#!Ÿê`¶²hĹ¾~’Ž@Bšhh$ÐuÙ?Ë>öÉ[$Ð6¤ î1+¶!ñÒBt ¡ˆpa"!’ Ùâb£!EÖROôäYÒðcÿ±O«C#øb(‚øÂn#AQ#i´ E$H"R18ƒ"EQ¥P Õ u[ÿ"ß Zþ"ÁUhóS=æãSò“Ia2¤Ô(iáp Äo‘3l@{¤¤‹„…Žâ%œ$ãur'|ò# Ô>"(-5)˜†JtJ¿1 äst¨_=Ç5Mçt t ötz¸jGWô•* TuÃÆwP¤,í„Ñà,Íäï¡ . 8!çÂAï!ñg““Ò‚-¦# Œ N^‡.r:8–- qm ¢mÞ6Z ¢m´( ´òP û°:cäO4’/²Ó/¶c e ÿœ7yN¡ ·ÐyH²$$îÅp„RIEr-Õ¸W|¬g)0æÃ•¦3~‚#ׄ´7së)ÄG4NõpbRRkáhŒQzîcIEãT¨„švUÔ×sÓ…hS®¡ ¦’*³AA¨Â}fãKœÒA¦b¬”Ž`8™#wV AlF!Ö|# ‡ƒ.Ƶð8‘` Ð2-ÖPbÒ²wû‘~W.¬èbÁ“ÚÖc²‹B‹öd ¢E²£x12;6aPdä/-ÑO»S#¯u‚SÉ#@¢ þ•;ºóFÂŒOAR@£3D•%’ñr€†­QŽ)sƒ¡]ÿÚ¥h0q’bIj¡'Ì…rI†”b=ìøp€I4a…£öîS\Ïxz–Dð|VÅi\õTAv3ãR· ¦‡¶K·„`Á$ou6´¡_sCu¡‘ !ªÉ‘ÒN.-$’Ô¤~&y‰)à!Ch€ב€ ŸcbN„ŠÖ4.ܦmrw4†¢U×cC9Qâ¶”"ö’"æÆ";úà[²ð i`0‘àø¶0QÆoþà_g Æ81d–I€4G…]”D|ræ\#g§‡z*e\“")OŽÂÅñ¨}‚4j†€éŽDÃ@o¸@åu¡Ã%4ÿi†J¤b_™¶s¡–D@ãÓ^ãc} "ÚGA™Vɾ!‘ÇL`&¸R8Zg!&Ô ï’¨ʲa§‰›;:›çwkbvµ‚ýgl‘~ÝÁ•“ ·yM(Q.¥cEw×bâROD‰cD9¦žÕHá^äÕ$è:üB#R"½³;‘à#d¤e5B1S60¶à3ÂPI;ô91h†IµgI”g©!,%(b¢= Óf´ãO¨IÐ\k–Ú'š4†qAÏagu·¤_Z¥_‡^ 7¨”U§Ús™“Y¢~‘M ]¡»¡6¨¶‡Ð¬ÿÚwVWŤ9¤v~|7.Íꀵ€!Ww~#”+!y‰&‰Mä×i'¿Ù¶P &‰W”.|·.¢wÑbÌ)bm‚ç‚7¯8VG9/FöEJÆd5A"ÿ&7c$Kb bt 4B°¸y;#ÄØ°àj°¸ƒd{7A°ºƒ;K± «;«;:b :¢#Hv°ûo¶pzéxI|´'÷'Š iÖ>ç8³7C{6K=%ó¨È§\ªTc8E0@™Ùt»`KÇ6®¤@c¨_ó•s@>WEP«ðq,Ç’–Ð5š‚VØ*)š©bLŪ_·M:z´6+fM'‘­ÿŸs‰–xk´ö6¹xS7gû›OÚîa ÁÁ.²(xÚ0Ú` ±œUô“‹ÛYB¹ŠÏÙ“5¦ßà ­•¦8e3;<±QE–‚AA/vZƒµ,¸–«QÛðPóâ#5ƒª‹ƒ/øP"%»Q3ÈhV–á…:ÛqG¡?ãœôSy„{‰ê(tÒ…xù>Ê&™TBc=NVÊa*à÷™bc¿áµ‰ñUUN»s³Z¢V+Umàë ®¥&*¬2€øA«¶¢fEˆE6%iaš× ›è!&’V7Àb‰pwEé×e,hà­¹’Ö"Šÿ9ä.¢wË ¯‘;Z^¹ qÁ?ÄX±œ“³º†—n馦+̃ÃÇ$}|áÕqи\ªa½¹·3Üu„‚{H8^s¤Rêgï¸=‹TœäTTßûK„6P¶¦´KÑ™¦¢õuU5ª_&Ê4ÕÁ¾n@ÆëÛ~t©¦³aAŸ‚6¤Èáiêt+#4+f÷¿à‘§ùLö·Èb‰&iÀÿ+Bl€Bul (‘ý7+æ'Ñ29“…Oh’û¥ ’ ï‹aêvõZÝô· Á‚2#覌:eO)îìFßp²Y1ÙCè|.KrRÒuR(s3)ÿË{)ÞuêÄ:œ—)6eõ}õ+6¼**¾‘¢ÂÚÆ¶!K²!jH`&·*UdœLŽŽ re˜ùA-j­Lf‡YÅ$3FaqÀm°DV9*!yõ`xËBÙ"‘2”™…¶+ÙX±0COŠD°’&FNn§“ žµ“(Zó:?ø¥ 2 Òœ=99,1F ‹ÊJÖEëF¯ÓËCËÚRR¢\ö(¡g=]8)!‡3¿L()ãhŽQ̽ǟ›ÚGð#´iE´ Ç0ª½£~Ù›™ý˜súµÍãÓc<+r ‘PV+ bf+ %2KOA¤B¬¾¡J ÏÖ­Oj¤ Àâuv=¤:Šÿ€Æ6¸RÐFÚ›HB²ÙQ:+2„¤,$6NQј ŸݓaZ-ÓiEiÙD‰ ÿó*xÚöc«c¹Ø™¦©\Œ/²Ú­=âIAÓ3EĬ=ë²7{%îC:m³[ñÓ93GûùÛaÜÉ…Ìñ8¡%ТɱKÝË)ÊQ¿qEVÅÚU›„Ýí[Îd f²°;8±6m,WÃÁVeÓã<α §È7×DM´Ö7°‰øìŒÇNB-äs .Ñçó-‹|dž !D î椓 œŸ%ZèÑÈÙñ:¦D Ò÷"6¡"MéOŠ×/$^éE!Ëó8|ƧÖÒ> ·3`1{>3³çSnYj¸˜f9|1Û„ªÌ¢Æ6fUÅJ×jPwjÌ ™$€sa…&T«ÿò1ÎÓ[Än –À°Û0«fä­Ä_È:ÎíØ„×•(B|ƒŒÝNÆB~üwkþWŠÖ8 ‰‘(¡uEIt–Y7䨓í®m1èÚÂE M”Qòʸ}”º›°÷B‚ÞO"né•î &>JЛã€y*5Ä3ãAh»w, zþù>šá©d‘fH˜ÈL½(¿t–g5WÌíÆÎ‘ØW´­´ë;Gµí[<ÇÞ±ºÓÀ4´ßKgìØÑ€ÐTah[³~l ’8y›¹Ùü€¹)Bö­úì,éîÀ¨ ~°i êb-Í8¶ Nÿ[š³W'ô1¡÷…¶øuTIL|LUòÔ;£Æò{hL›2tÃÑ6Ö)›Ò½œ9Ka5]~ÁÕì‹+Æ3åºs :┞¯ùçêÁ7ö\Ûqk·†‰Ñp&áÞàÁÖ>·¸¿B (4ÀÖ/² èÞ¥#N‡[¸Ó“!‹Q¸Q¸ÿö´¨ÙCé¥òúŠ£¬-O´:­•§ü"úé,ò÷ OË–2šê'hI?I3ã" “Q 9˜â B$)4ˆa’‰› Àˆ$ÿ 1¢PHcG† I(@)€xé2/k°g < „  “$@(Z‚Å$iÚ´‘ÓH’$[Umݲ¥ÍÖ.k¶¶i ±R§NJK´q©ÑÚXmeµ…Û(ÖZºk­Ué­\kúªY«&+ÒÝFmÖ²i¤6–µ¹‘àFj+R$ÃlÚ¨% —1`Æpíµ•+Q-kÖ´ÙÓ—ZujkõìÙ³†Ú^5ÙÙìåëk¯ž¾¾õbÛv­ûµo×´gßFn÷ì¾Û¾iÛfM—6k_«kÓ={uI$þ}^üxòåÍŸGŸÞ¼-’!ù “’YP<ÈB!Ãùÿù;ôï"‰¢Ï"‰4:pÀ†Þ+ ‘rO!‡:€ t a¦  ,ž.d)Ä™B €°j"&€R*„²P("‰$šhÃFäˆDKd©ª«[¤»:m>ìé¨"¤JL®$“+–·dÁ+ʺ”l¤µZ!í¯j"KÌJºkr0¹lik²F1 (kKÀôÑFŸÏk‹±ZìÑ&ÔVKͶӀ»­µÓx#´žAƒ ޶ֆN¸ÝE Qk¢é뛯„ 2;]ª3-ºm¦ëN=QG%µÔôØÃèÁŒ>ªÏ 4òÏ¡úp@ü d¨V¢HÀ‰Z]°¢‘†Ý•£‘4Êÿ&˜Z«CÇzÖÄžzÚ0ÙiI©²H("Ÿ‚*Gª®Ú*«[´új˜lZÊ‘¼2–ÈæzK².!“¬*“„+J«‰f/}ciƒ0%k¬Yªqk®4 cr®¹ù«Bí©%´X¤áŒÐÔòáN{l“Ó8ÚôÙí¯Ýz‹4R9QnRD_ÓÓ5=í‰O}œ³nm‚¼ºN¯ ÕT£Fº<[V5¨£W?ÚÏ?"È¿†ú›‰&®ÎºØˆ$¢lþÄN"…:bÕi¨ÑÆ(¤”16\I% €ª[D i‚§ äž¶E”rè[7КJKzôÊ\m„d p.ãRÿßÄ$‰$­&«òàyç­Ò­ÀþŠ&†ûM¯‰3XâZkÄ©%e©å­ÒcÙÓ7†yÃMËÔ 9µÓTn­ä’g“Ó5Þ$Õí´›m£6×v›eÆh‹s›…~ü«Æ¡ÛT袓&¿|RÙ»zÕ’Úso£‚Jò•@©sÕ:#öWÝZkë["µ% Ûж‘¸'2QJ\–Ù'wÑÜV“laë$f!‚Œ’.M¥*çªÊ6¼ru¥(EÀœÄRǶ8&]Š…$bá zõËѸáÂBS»¶È¥^eú’šÒ $(%É0r9[ÈÔ—jÀitÕh„΀WA­&NMŒÿžlšˆ<ÀÀ†w¯AŽõ`Ʋ™g8~Žqõç\J„?ë^§´q.mŒÏ|wÄãxPÕ ˆÐŠ#éCItÅ X„>,àƒdÅ6„mkL¨Õ~¢Ö6ù|D€&AR­ín ÔMxâ“ á'ë‚IXB‚ Ž•$ðVSš`#IHÅ*Wc>µm e(I@˜#X¨B')L_ˆñabò…¯z…¦Ò¨Æ3o' 6L0“‹az ÄLM”¡LaèÒ–ñæ/€Ñ˜6t7i ,N|:MÇþ‚<ÔÏ5‹ò u³(Eì8Ó»Ù̦—Ï}ìãqtt£t¢#$Ú1½ãÿi!VÍ#OãÚ@R5‰\Ä?ˆ¼èBj¥ÑWI„ ð1%-i¿ÀR$qP`ÀJ‹CzkBÁý„&?e—ÜVtÁ¥È¨ Nq×TÆõÆse‡¡-AàÅ¥aê _S¦#£¯y9)`8üªWeÑU&¡‰-Å4Sa,ÓË !h`C+:“•®‹ç”^U2Ce±5œ‰ækМ›Á7Ë‹MÍh&³Ø$ªQ©áÙ〦KqE+Ðq(D5‹4T©!íÙHTúY‘ž4µ¢A*‚ ŒøjkmPmEBë TÉ €+­¨h‘â¶VÊ­&s£ ÅTŸLZ êÞ€²ÿ-¥Ä¨)5Šƒ#tdkpÅSpüŠQ’PKÈL¦_O²U±:Ì"l/maX5ý富ÕuPBX™äÕ4$ i@BÐpDޱ3½èeL4Ìi›f7(SÍžPEýecÇÑÒ>÷é› 7jz¯©qZ#=~ê&Ÿ_1¨÷ÒešÉr/³›Eñ¨¾±ÇŒLò=¹DÞ7 ú<@­d%2؋ҕBì§¾Ý"Å·uËPKVr¢TžÒ&)e(o“£ ä‚%ÐÈŒžâˆ8HB<:×5¦ã³tñr)‚ÑÜX¥ÒŠzE&¼v3%vUyÁ%4è,ÍWsè:¸’ìȃ܆ÛeÒ$®Mh­)pZ’ÖM@97ž®GQJY4˜†ÃM%GVù”. §$¼E†òšŒ•ó˜1«qqRd~™hFwÑø×¤n×+ÕëLÙWì±_¾àLà_X鯙ëSO©Á°î&µñgÖ‰Âу™„³xáâxÚÓ6s\{êÃRÿàÔ©£ ¡Ë¬vuÎõȶÿÈtÏNZŠPÍÆ¿š¬†EÖj´‰,ŒÛ¶tnk¦ÀU¥M|².'PÉ>QÝ0´·VËßzJRm±81WÇ©¼ô/Ñ ˜½¨¥K|!xCc¹³\2ÔtRKchÒæ/ç Ó¼æý§ 3t‹ù4¡9øÆâid•S#­%hÎ&`m¡k—''à,6n<\ãiEà”Š>1¶8]j:žº½/…s÷þ°.Û±9@Ž`T¤Rml}=Ÿ&°¡ '%~EI‹ÑÐýÖ y)G„|6gpp~ÃK„r7šÌM‚2¥³@©d °ò•fÑ`Ú TeEݤÿæåÎÐB»O¬»Ÿw »ª3¨Á-©Ã5Ž( è­òst| ¯s–UR fªó› +c.x®r;·ªÀ®tù†}ÈC$ÈG¹x·&9ÈÈ jbŽãŒÉ‹¼õjHrz‹KHk†ƒDµ`„CÀ Ψ÷Z Îì ¹˜2ù¡>›3ÉÍ ”.A€ŒÒ‰¦k½Ö<Jc0Š<€}ðK95!±¬OÉÁ:òŽ¡Ê΂Ъ>ø$üØ1­‰„­¡ˆ6`ƒ¦KªTh„¥†0 ¹”˜J‚Ž(­ÔÊ-<‰( (ôL–nó-²*®+Ke‰Oã2¿pkÿ®øC qù èGèøz¢5ŒÆl˜y¡”)Å ¼9H|Ä~1< µ´!2 m²†…±HŽô3B«@¶hÐI<+µÐ&¼(Á£ˆ³4ƒà w £èé<•AE¿àŒ¿j0[Ø™íùŠs1ëà”ZNâ,Σ$Y#-‹ê5&è±[!©÷˜¤Tˆ(œ†O˜²ºV*Š¢ÈÆj¬:ó„6 ɶ¹A¥JKßÂ: j˲¬Oæ‚%üt¥B7UÓ<ÜQ=¬‹‰«ŽÛŒI‰L€±†V`¹â¼ŽÌ¤!Éǘ‹ý¢¯4h«%Q 5Q“À#“ ‚4Aƒ†Ñ Æ€½(ÿ¦3©‹mݘgB#J±¼—q™=y9‰“Óƒ°Y@}¦H0¨ç0îù™Û˽…J"Í£c:‹R)քਭÙ1&œˆç{Cm  zCÞj%¥ð©!ôDO”‰n- ŒÏ(s…¶lý)‹Pº :´”–$+K²,’·¹  Ú r‹©Pœb¨¯x¹¯ªrŒºÍ ¼I©F€<8ÐA˜“Œ÷2¸ ͦ!2ÀԧH Y¸‹HÀ/(¢k:ÍÓ™X1IÑŠ%LÈ· Þˆ“ZÕŠCwZæxÀ- ‡s&¹Ð‹Ù½„Žrª É”¯ðÿ™`V<ê,!›-b‘±…hJ¢ƒ­°ùµïìÖl!œ«9‰n}›¡0 iS‰pìÖlͤ³%«D‰5×sD.©¶¯{Wº²±€ª°Ï²ˆ¥ ªÌ¡CÒ½ÔÍmˆ;$'e’ € %ÀDijרÕsbŒ‚@ª¾ë¡Â ŒØ©Ì"’ÈO'Ñ PÕiÌÀH Åx iŽLÍUпàÄJrêY-EÝÀ¸Yõ@ÚˆÄ!†á˜Š\@[ÈÕ8âÛš™cÚ¦5Ÿ¥1Ê„Àƨm§ÜŸ)XúÚ 2 ·Ñ[½ €˜2²¹!‘»Á‰ôœ‰0 MJn,€øm–T ÿG5ähã‹Z–œx ú67-}Ý ‘/[…âOmxŽÿ$ØQÍŒq0-L°²HÚ€Éû. |ŒÅÇ$É/ŒÍÓÂ@¨ "ˆ1“‘lÙ ´ØØ½žÒØÈgE¬DS…&Ó™8Ȥ"Œ”Æê¢KÙVX, — 1møMÓ3!¡£æu^òBSÊ”z’6¦À^†¸ÊðüN--[ 컺)HOhCgDO•.võ­¸u z5? ‰¶hS öÄÛYLj‘6pЍð \º†tÑÉ6ªG…‘ ý*,ÉÅ<Ø(lÝ΀·Ôé&{™Î#Ê ˆ‘ÿ E (Ü¿Hà!P }û‹@,´’„YŽ\ÈŒ<'Å!Θ—%'}‹4€ë¼äظÙ8HiÚQ{ê§zc1'~bÎr\)Ÿ“1ÙJ$9W¨8d_$ ßôë6%Ã[tUÕx”É-ââX/ê!¤4* ±#1ê°.S“Žêˆ„hf! 6÷É­ïœÿæXA,f-e%³¨˜ˆjôEGßÚ:hɾQÓÁájk£ã²4¡yE  IC(£ORS»=K=Þ[ ¢Z«3ZÌÕ}xŽ4°ÍÁdÄI™a†Ø:8K®‹(tŠ¢ ÁØhF¡µ€BÇ®Ìɬ“¶ ÇȳƒDÍ‘ÔkÀá”Ôl· _î"Ó"°Ë$pûeCá²j±˜ñ»š`çuýV¯6.®‹á’ãn_#§›'Wë;~u„6ær®ž¿@¶Á-ñ¼üŠ4`e C¤ÁΦ”’Q”hHЀ<7_ÔÍ»ÂFƒüb¸!š˜· 2!4ˆ±…ŠlaÀÔ €«:©Õ7Ñ¢‘F§ÀHÐʘÖdíÌK™Éc°I¦äÒq3ÖŒú†ÿ¬b®¹OGb8º¬kêO1‹­[i±‡X¶4`‚ý…0‹â2¥x=‘›ŠWç^–2¦2l;² )ß³¾õá’²ã¢6Pr²þÝõ¹³(‹†ˆC.C`\"3èègç€4 ÈýVÄ~™ ±@ˆ†Rv”ˆ²"K2W¢PÂc‰†7%‰¢Ä… sš´i“Ò$J<ØÆMIRmÙºem›¶mZ³úÛæmYÕbI‹e-V5kÖ¢Y«V íÙX²bÑ­[·ZÙFdåÒmÕȯÞF·l«›F‘Zµ‰¤Xp£¹± DzÅ7V«HҬك˹š=kõ8׳g¯ôi{ Kë«§Oµ=m¥E›­Z4gӜն=WZ5¶ÕææF šöëÑ­õ1ßÿöM›¶kY¯ÚʪKº¶[Útm‹DâøðâÇ“/oþ<úôêÍc%€$™o~AƒHš$I¢? É$ÒCD=DSx`M4UÄ`‚ ^äQHj4¡D,(TE :ôaQ%}x`J%6ÀP¨‹$qPm<‰$²XB•6»dÅ•Vÿ`•ˆ6ÂI [ѤÕÖ\yÑ¥—,јŗ_˜E‚]®ÄâØd‚&X$ŽyÙH]B&˜\µŒ©—-ˆè•e[i…Æš5ùØóZ>¤Ù#gj©¡&'k®Í9gi£ÁæÚhÎIlj…[l‚Ê™\rj£Ï6û`]uÓAtÛXÿ£$$$шÄáH$Q™*‰ªrDâH¬²Úˆ$‘¸‘ª$«’Jë©‘”š+°´ ,±Ã[쯪:æª$¶Ô_,d_ñÕ÷ì})EÂBHÑ·ÕtJ= õ“IQD†ëPH6‰F3ͤn9åÄ‘„úvˆ"Dø:áRI-ED I¤ñTT4ReVoÓÕ7”2Z[mISKÆcÑUË\k–%W4µ´Ò—c~ur–c~ù¥e‘ Áå–f‘¹¦eiØ’Ö_núöšlœµV[hDŸöÚkÙ˜´i†çÛÒ¦!-ôlºfMYsâ… ‘]'¥_qªÕ§»\¥Kth{ÿ*IqHœÕÛ½ãVqË}7Ýyã½·Þzs§7VÒI¢KA(<›éç ðU[B)(E’K~H.‚F•äaJiï€NhTNwÞíF¼#<â…5™d/‰š«»­R06±ð¯–ÈBÕÝXíóÍ>_¥¡nxU“V5;«e [t‰}]­4X”ÑÌåe`¦ÚˆŒmtï—¹¶ÌädÒc¦Ö“V Ò¥Éù¾j¯­¶kwæ‰Z=²!ÿZjÒR(@!Ç5ÖXNÆÖÒˆ´ yðóSià¨9QjúàΧ¬¡£éxŠƒº•$®¢ Ú¢Y‘¸FuH( mØ…¶ˆÄ6dÿ1Â]D‚SœºÊ§®¡ êd‡…Û¨Žvlñà ˆ>4¢sxÃ…Ðp(xâ Òh½)†ËA À“ÍÑD$*ú×F~/‘ôÄ!ùIGb·“έ¤'aQäe/2Fˆ#:é„„€‘¤\!@JÁJPQ)¬ m@ÕTp¤ˆ=ç•Ò#šã8°-vÑ È¤ç—&Ù¢,,‹Ëú´&ÁtO1hXØcC¾F¼%}²8 úô‚±ÑPl6Þ„® M’ÌålJ£4ÚØhò%Æð5i4|”¡àD)G~ÊSca§Îv•X€Y‘hBV`¾Æ°ŠF2êN—dĪÿX¥ª1CÔwÔÖ©y—º'=ñ)ÄAço#ìÎ.êã$” ŠÕ‚RÆõ§[4йè{Q%¨ûPDA‡!ËmHŒ¢‹]ÂG×y®$£+Ñh7“”Ü„"¤+ØRŠ E†I¥YU[Vö¡áuEmp ò\£ø9Lê#Ë”êÒ$ŽÁ’K²PLfÖ†Ä(†QEU,Ò0³1)5dua’‘zs?qÆtÒ¥›ð4´h6-4rêŸÐÚÚŠ9¸‰Æaè'êo9¦ÁSÿô¡S±Ÿ³/*GØ"*mXÛaduÈ8X£T%d•,j•„ÆÊbF‡½aµÃCéÿñS¢"iC;Ã$®¶ƒ:ìŽ-PІ'® pbH°Ðÿè–"ñh…~KF€¥”$é‰4Ü h^æjn…òÛŠ h&ú"¼x2ìqu-!nŽb0¦$la3ªUö±¯è”xÚ8ÞÔ@3Tûf2I­L]ÊÉXïL¤Ÿ–Ä÷%.)fJ!kƒd(£ýæFhceZZâ·K·J­˜Ô›bÀ¢Qð€‡JŽ¢Ff–?é/8ZkÚ×t£o<矜’ޱ£AP‘ T‘D,ÑàYÂ+¼±5JècÚ"È2LoiíéCè`§ƒX¡ ìbþÓŸRá ±hŸÿd¡ÿ9YJA*"‹`„%#êc‰8ª¥Í4\évñ‹ìéò,»”zÎD³›í\ª¯@ºFO9•$|§H¸a…xÏÙÆÅÚt§85ÓIWBŸö´W½½ …‘‘§í+‰DPÀŠÉL#ÕÁ¤O.SM-s$³È·°ÉåP‰A=™ægÊ1`mê±¼Ï ŠÒx¡ËbÄr´×ÔBóí+× (XKÕS;üœñŒ×FIì-ƒOÆ[ß°²ÈNqŸ8ÌQ5«#ë@ç´;ÄJ’­ùO%‚T±EAäŸÅ€½ 3²ÅwDŽkÆó… [Æ­K¹zÞWçŒb‘–Î!Âÿ×u÷ÅÝŽøv¤Ú"»êS¥)1Ь9náMl>ÒF#‚ƤÍÜoiE³Ç"™³¬ìJ­(å– #>¡wOU`B‚©Wy¾hl-TrÒ-ƒSKÓ:²ŸýŠÓë]+瘄Â.HÎÔBÓÒps"È–?É O|:ͤä¶ÏzCY:Ý)A#¾=¿mÐlLÞiÓ&xK¹ÉÛqr5³©©Ka§Éïö'ÔRÇÐr0O_d‰5ÂÌDB˜ØWdTÃc ’,¤J÷ÿDüÝRXùÑEY‡¢ÐßQ©ÏÍóÉf P¯é ¢Ü†ò8ÝYhòLÒfDÏú‰…!M>ÐIn¼•`Y Và&¹=i‡ŽüP v õºõ”]ÓâÞ ‘ÛŽüÍŒ ž“ýÍÜI¹ÁVAäÛ~„_ЇBé–C©E×è á r%ÈD¡Yƒ¨”A—KWÁ…×íåÞ‡ÀNî5×K¨‚d£pÀȹÈ쎰“M-ÒÛ<ÇËÅœoÔ ó$PˆÙBfX c$‚˜”R,äJLF"Ä‚Œ<hU°A÷0]ìŒXàYÌ…$Ø~Õ’ Ú­uØÕX"ÕÿˆÆÐP"- üeÏý£›¨E,,‡>Œb®) N2GÛéO`i…7HÇÖ] 5Íݹíȹ•2/Θ‘>q %‘Sf…ºÙä ¥‹ ލ Ä!LQ}LNCˆ‘oÅÄ8RˆŒH²Té¡Ñ–DŠtŽFtv‰HÆa×u¥È¾áæ¿€êáÎR4EŒ,ßÝt…˵MÑ›Z`lUTÑ¡cÌÌdœ…Vi *5Æ“‡YDÏndÚÒeIúLÉc¨üí…YXC6Ìœ‡[J¤ðOÑÛ“<ÉFΦ ¼O44ÊÌåZ„ÅÉqÎ×jµmV.ž*ÿVÇ6„JÞeVl š ß5Þ»!Ö¥èȧ(Ù¹Y›ßmƒ<™ÛEå¥TSâ¡çàE‚5ÈG ˆ%d la D#‡\HžY„E˜ DȾ ˆMHžÅÎJ HéYGpˆIýçN(¼üg…*(Ÿ±ƒ_v]DOîta4Aò%’ýÍVD_ôm"lC„Î}ŒdXF*a¦ÌÈ‚VùE+ðœ_0‚^ü#\Fü I‘´EôLÝ+É…ê…•ÈB+D‰XL]e "UJòæÑð&&ÞÒn ÉLÚFViÍÁ†|â£Ó}ÃË• 6áS n›-²¹Ö¼©à<#z »Ívÿ&ºX.VÙ,²§{Ôµ<ËX¢€¿éV6n£r½ÞK€NŠè¼¨ŒÇ•cK9‡׺@W¼¬QŠ Wš ‰ËwqHMtÄKÒ$Áî´AïüÎÊA_XÐ64‚%Å‚“F#hF°šùÈùT¤\(OÖ4‰Xâ\hâgX’ž&³RÉdœÌÉ€’ô°ÅfldZE5L sÜFÿœhäRõmoŒÆ-}XÔ©… À¨¢ÕÌbÓàFͽPÉ ?IG,þSu¨›w¸âܬ`5©Íµ[6É)VÔâ¿*%b[ß™ÖäàVFÆŠP³X‘@ÁÈRˆDGlA×Àh—‚ÿ¨‘r5—›í;ÚiÜ8¾YêQט©ì›A—]ò‡þÞš•ȇZ ä’Њ‰Æ ôÙª6 eð€!]ˆOD¤©!Fd4Òap¾%•…ÇÐE&âF'Âß*¹¦kꪰ«mí‰, OlTóGo1"lôcmÜÕqî$ü°á£Ø+OÆ­ËíbYGÞÐØ ¡'ŒEç·)Ñ=%ÞŽÄÛY¬ÚP' "âÂg­¢¿’ àEá8‘|LQ ¤@BLªZ*Äë™T¹XãK„ÑwacžªÅÜ›N™¬î”PäQ‡Úñv׿¬Ž™…DñRК¬.&Uÿh`V¬¨t…÷Y­c ÁY8FaœÒø=$­0¨HF_hÌpnÆEÊB&=Éh ^˜‰.L"]`P‰ú–E`´ÒíòÀ…›|+îí…ñ!›Jæ1˜êƒ6¼UÿìäàöUÜ…'ÅjEVRÇ›>–ý«ž² uQt %Šj.åÑÉ"VFLuÄ"»YŒí‚5%žæjJ5ލ |¤@€Œ£G„‰h€ZˆƒHÈ4öYƒDªŸ)/ƒüeíVãë¦%Ÿíî›Ý¬I±£7Ž‹MülÁ$Œ>­”P‘Å¢Äè#VĈ°ÄL$€¥ DT¥AîE“ÅpNÒ^à•“ÿìÌ~G3dÍO,¨Úc˜f”ÎÇ Ç‘$Æ$ë¡(²ó¤¥ °JnØœdnîMv2Cð'ëCmÞ O^¥”Q§‘‚Y šP³ÔH³db Ùˆ ×Þ²,¿F/ׂTTFøNýu¤ q, 3ïr ½23{¥¨Ü°Cí°ë–‘žDçñI^çÌlÃÙÑ„ÚQ¨"¨ÍÊž)hsEáí~ªš]j©6!ÇÁQÉZ‹!!­8 ðœðŠUÊ£yšy FÚz/T‹©€O+”,Æ^hä‘” Ï5›¦iL]¸Â˜ Z,-FRñœ¾oưkÆœ¦ÿ¢¤ZP‡éÏÅÜöÕÑÔÔèärÎt½2°kÐkÜ–•Í /™Ñ ¬§d ¡ biÐQïPÂÑ¡P#Vv –eGÀnGu\Ç™ÍQ«›R“ ð^u ÞppÚÔ NñYÛÍY3ÚÙ uZŸuð„›[ËõZ¿5ÒÖÍÛPžôîMÜTÌó5µmàÏ5\E¥ØÄ˜5aEÌbãõsv`ÓVL6^S6ÞvbçTbv݈M£Ivõ# co¶68R#vV¬Xñ öŽÖs‘WY? õ?ìÃ?¬Ømÿƒšúnß6ñ€Çoïöð·qãvp«épï¶Œ‡Ëÿ1÷s?7xøw_÷€û÷t‡Gpãvq“G€OŒuc·ƒß¶?üv€+8vã¶`Ýv†78x\8s† ÷?L¸ˆïƒ‡ 7vøˆOŒˆ¸ˆ—¸ˆ§8x@xà·rÛxx÷ö‡«¸yàvz§wxȸ‡“8swňÿvŠ ¹v÷ˆPÏ¿ò+xÚPe.tðPW£ m#™–o9¦lJR{›QW9¦6} wõ™y›ºgÂ^n•·¹›çåF¹ {¹˜_®ŒÿaùxާŒÅy•yâú9¡ïytº˜î »y¦u?A秤Ðåê“âÁ“%¬¥ïiVn{"z¹y=To‡¡“`VŸpU—y—gJ£o ¦,e —úœSGâ&î»Ùºåй=îÞa‡µ%™h¥M¤CË¢è²giÍ",r¢çÞè­Gx °vØa«¢ã¦0õ´µoõtêÝ"q‡¸‰5Çðg]“^ÛÝáíÓkͺù«¶/Ò>»5éµ§èÈ»ë;wìû؈½‹õGŒ¾÷«¶G®¼å{t2µ°‹ç“cSºÏÂ{½M ›à¤×iá x¾'ÝÜ:”okÿzOËWêvþ{ 2ûâÁ` ÇXÊ;%ÛBÅl‘ýØ¥€Ê )®SþPT4;¨ÔW®`‘I;x|J®”PVèØwî4ºµ «È6ü0# Ù˜ÜX‚›;B Ñ Q妬ۥìÓŽmCB†ðŸ·V¡º˜µo»¦ÈXäjÊ êâPZ%¦gÊP¶} ê¶à ’z{º)Ûßijðx²`W¾ßˆ½*Ÿç‹MäÙb°>.V~ÛCû޼–ʳ[,ª…ÜëÈ »‰þæ²Q9tBü¥ãâ“þã¶ýC•PÃ(ŸOùraÜŠTGÀÜ6ÔþÏmªÄc¬ÙHEµvüƒ$ÿÈ~cýÃc5ŒŒà¾ò)Ÿcóïw‡#hƒ¯t–v<Övä "˜:E¿68zI‚#€? ‘@VN »?V;©J³ü{=‰ÐÂ(¥—¯ü•é½Tj%@hÓfMൂ·YÛ6p¡Am! $˜P ®„Ût)|(ð¡EmÛlmÔfk!È üˆò 6]uuü8pfɃ×2V\¨1æJm·8ܹ‹å™8Nüør&PŒÕHr`OŒ©š„ºQ¨Kƒ1*´8Q¥VmD/2Œi4¬Ï­omû’dIÚ8²»-’^YIÚlk“Dã­Hwí¶A²PÒá¿m®EJBÒÕ6¶lI²ewî?ÿͲþ}Œ´MÒ`kwÝXkÓHRœÒšHâ¸Ù®¬6‘./¤Úض$’’°N2²q¤4’ÒÄi³1íY@†¼fë°$Û‚?ÿ(ýèY‚NRuú2cÛ]U5ŠMÈíØ™cתíþÓeÂóO2Ô²¡Ä…c)òé¾µ("j»"Ji=Š€ú*&°pêŠ)¡¨Ú@ù ɦiÒO¢¥òûo¨‡L‚ɨ®¨K»üÜÛI¿± ,Q óp:‰¢®i!¢Bú†$ k Ò&›4"r›þ†¬©2¹þ9R›Îl ¨]þ -='‡´éšoVÂò(¶4ÂQ $m‘ÅÉ.udˆ%††,²»ü²š(¦"ÿUŠˆ>¥˜ssG‚4bŽ&Œ¾:ˆ¤õsÊO¤¼¢o¦ú¤? fox-toolkit.org fox-1.6.49/doc/news3.html0000664000175000017500000017622012130340076012030 00000000000000 News
News [Remove Frame]

November 7 - FOX STABLE 1.4.22

  • Fixed bug in fxloadGIF [and thus also in FXGIFIcon and FXGIFImage; some subltety with the LZW implementation was wrong. It is very rare as we've lived with this flaw for a long time before discovering it. The symptom is that the decoder complains that the image is truncated [it isn't!].
  • Bug in FXSettings causes trouble when writing large integer numbers back to the registry file.

November 2 - FOX STABLE 1.6.0 (Release Candidate 1)

This is the first release candidate for FOX 1.6. The input methods for X11 now work. The next one will implement input methods on Windows. The API's are now pretty much frozen except insofar as changes are needed for input method support. Please note, we're doing the "root" method only. On the spot and over the spot methods will be done later.

  • A new class FXComposeContext manages the input context in text entry widgets.
  • Small tweak to movement algorithm of docked bars:- don't add a new galley when the dock bar is about to be undocked from the dock site. However, you can still create a new galley by first undocking, and then redocking the dock bar.
  • Added restore() API to FXBitmap like FXImage has.
  • New API dropFinished() issues message to DND source that target has successfully acquired drop data and can proceed. This is normally done automatically when the SEL_DND_DROP message returns, but in a few cases one may want to release the DND source prior to returning from the handler, for example when the SEL_DND_DROP message handler takes a long time to process the DND data.
  • Changed the way limits are handled in FXInputDialog.
  • Changed some internals of FXFileList and FXDirList.
  • FXTreeList, FXDirList makeItemVisible() tweaked to scroll the expand-box into view.
  • Fixed some small drawing and layout issues in FXGroupBox.
  • FXTopWindow HICON is deleted if FXTopWindow is.
  • Obtain proper HINSTANCE on Windows; don't use GetModuleHandle(NULL) anymore; see October 29.
  • Fixed FXGroupBox caption display issues. Now looks better at default size.
  • Implemented extremely dumb and slow StretchBlt on X11.
  • Added tooltip capability to pulldown menu items.
  • New API in FXApp, getActiveWindow() returns active toplevel window; previously, this API was called getFocusWindow(). The new implementation of getFocusWindow() returns the child widget of the active window that has the focus.

October 29 - FOX STABLE 1.4.21

  • The getDisplay() API now returns the proper HINSTANCE on Windows; thanks to Henrik and Claus Wann Jensen feedback on this problem. The solution fixes some instability problems in .DLL use of FOX on Windows.

October 25 - FOX STABLE 1.4.20

  • Set active window to owner when dialog closes on Windows.
  • Fixed Thread Local Storage handle leak on Windows.
  • Fixed GDI HICON handle leak for FXTopLevel's big/small icons on Windows.

October 19

I have written a few words here about the Unicode table compression method used in the FOX Unicode implementation. The method achieves very nice compaction of the Unicode Character Properties tables by recursive partial overlapping identical property data and indirection blocks.

September 23 - FOX UNSTABLE 1.5.13

  • Fixed bug in FXText for search selected option.
  • Fixed X11 keysym determination code; was not observing shift state.
  • Added registry setting for scrollbar width.
  • Fixed some problem with FXRex encoding of characters in compiled regular expressions.
  • Updated Windows keyboard handling for UTF-8.

September 15 - FOX UNSTABLE 1.5.12

  • Implemented keyboard translation for X11 to unicode; the Windows keyboard translation will come in the next version, so stay tuned!.
  • Moved fxparseAccel(), fxunparseAccel(), fxparseHotKey(), fxfindHotKey(), and fxstripHotKey() to FXAccelTable, and dropped the "fx" prefix. FXAccelTable is a more logical home for these functions.
  • Added SEL_DOCKED and SEL_FLOATED messages to signify docking events; these are generated by FXDockBar as it is being docked or undocked.
  • Updated Windows studio project files.
  • Updated some documentation items in various widgets.
  • Updated Watcom C++ makefiles.

September 13 - FOX UNSTABLE 1.5.11

This is the FOX 1.6 pre-release; please test! The next one [barring bugs!] is going to be FOX 1.6.0!!

  • Added unicode clipboard support to FXTable.
  • FXTable overlayText() and countText() can now have sets of column and row separators.
  • FXTable extractText() can have separator of multiple characters.
  • Updated comparecase in FXString for utf-8 awareness.
  • Updated list widgets for utf-8 aware item comparison.
  • Fixed FXTable overlayText(). Also fixed paste selection in FXTable.
  • Fixed FXTable countText() and made it public.
  • Corrected FXBZFileStream and FXGZFileStream filenames.
  • Added missing getNumPatterns() API to FXFileDialog.
  • Changed FXDataTarget constructors so as to avoid accidents.
  • Fixed FXText upper/lower case conversion for utf-8.
  • Fixed overly enthusiastic argument checking in FXText.
  • Added checks against editing non-editable FXText widget.
  • Fixed FXTextField against editing when non-editable.
  • Fixed some minor issues with FXFont and FXApp for Windows.
  • Fixed Windows VC++ studio projects for -DUNICODE.

September 7 - FOX UNSTABLE 1.5.10

  • Added unicode clipboard and primary selection support to FXText.
  • Added unixToDos and dosToUnix API's to FXString.
  • Expunged some FXbool's in favor of bool. This is OK where serialization is not required.
  • New API's to FXMatXX classes.
  • New API's to FXVecXX classes.
  • Fixed minor internal issues in FXText.
  • Updates FXRangeXX and FXSphereXX classes.
  • Added API's to FXText taking FXString.
  • Switched argument order in FXText's changeStyle(); it was inconsistent.
  • Safe-guarded FXOptionMenu for children it its FXMenuPane not being FXOption's.

September 3 - FOX UNSTABLE 1.5.9

  • Updated FXBZFileStream to subclass from FXFileStream.
  • Ditto updated FXGZFileStream as well.
  • Updated makefiles for Watcom C++.
  • FXMemMap now supports utf8 filenames on Windows as well.
  • Fixed some typos in FXExtentd.
  • Fixed missing operator << and >> in FXHiliteStyle for Watcom C++.

September 2 - FOX UNSTABLE 1.5.8

  • Modifier keys now stick around when a normal key is pressed; thus both press and release of normal key now have same modifier set applied.
  • Fixed strtoll where it is used.
  • Fixed compile with Xft for Fedora Core 4; FC4 apparently ships with old version of fontconfig.
  • Fixed build issues with multi-monitor stuff on MS-Windows.
  • Added FXExtentf and FXExtentd classes for 2D ranges.
  • Added dllName() API to FXSystem.
  • Added API's to FXString: compareversion().
  • Fixed Windows compile issues with Visual Studio 7.
  • FXToolBarGrip no longer gets focus.
  • Added some API's to FXRectangle FXSize, FXPoint, FXVec3f (etc.).

August 19 - FOX UNSTABLE 1.5.7

  • Added NET_WM_PING message support for Extended Window Manager hints.
  • New FXSystem namespace added to be a collection of system-interrogation functions.
  • New FXIO class added which is the base class for FXFile, FXSocket, FXPipe. So far, FXFile is the most advanced in implementation; but FXPipe and FXSocket will follow...
  • Added extractItem() API to the list widgets; it allows you to remove an item but not destroy it. The removed item can then be re-added to another list widget.
  • Added private copy constructor and assignment operator to list items in order to prevent accidental copying.
  • Added FXPath::convert() API. It will convert a path to local path separator convention.
  • Added FXPath::contract() API, which will to the opposite of FXPath::expand().
  • Added includeInRadius() API's to FXSphere. These include the new point or sphere without moving the center of the original FXSphere. This is often convenient when maintaining nested bounding spheres.
  • Added DOCKSITE_NO_WRAP mode to FXDockSite. Passing the DOCKSITE_NO_WRAP will cause FXDockSite NOT to wrap toolbars to another galley should the amount of space be insufficient.
  • Added new FXFile class which encapsulates low-level file manipulation on the system.
  • Added -z option to reswrap. This new option causes reswrap to compute the size of the resource, and incorporate this into the declaration.
  • FXSlider, FXRealSlider, FXDial, and FXKnob now respond to keyboard arrows as well as + and - key bindings.
  • Updated FXTopWindow to allow setting unicode title string in Extended Window Manager Hints-enabled window managers.
  • Split off many functions from FXFile into new namespace FXPath; FXPath is a collection of functions manipulating pathnames in a resonably system-independent way. FXPath knows about local name conventions, forward and backward slashes, and so on. FXPath knows about unicode filenames.
  • Some other functions from FXFile have been split off into a new class FXStat. FXStat is a collection of file-metadata such as access time, size, and so on. It replaces the unix stat() function. FXStat also knows about unicode filenames.
  • FXDir has acquired a few additional functions which were moved out of FXFile; the new static member function listFiles() now is implemented in terms of FXDir's basic capabilities. FXDir also knows about unicode filenames.
  • Fixed makeItemVisible() in FXList, FXIconList, FXTreeList, and FXFoldingList when widgets aren't realized yet. We now to delayed makeItemVisible() in such cases, causing a scroll when layout() is finally done.
  • More features added to FXKnob; now can operate in speedometer mode.

August 1 - FOX STABLE 1.4.17

  • Fixed problem in FXMessageBox. When running MBOX_SAVE_CANCEL_DONTSAVE, a click on Save should return MBOX_CLICKED_SAVE and not MBOX_CLICKED_YES.
  • Fixed problem on multi-head Windows machines in FXPopup and FXTopWindow.
  • Fixed problem in FXQuatf and FXQuatd.

July 21 - FOX UNSTABLE 1.5.6

Well, after weeks of pounding the keyboard, here's a massive number of new features; first, we've got a nice set of new widgets:- the FXKnob control contributed by Leandro Nini which can be a drop-in for FXSlider or FXDial with different looks.
Next, there's FXColorList which is a flavor of FXList which can be used to select from a set of named colors. To wrap up the color selection methods, we now also have a new widget called FXColorRing, which is a hue/saturation/value control which manipulates a colors hue by means of a ring, and saturation and value by a rotating triangle centered in the hue ring. The tip of the triangle rotates to follow the hue selected in the outer ring. Its a quite intuitive way to control colors.
Then, we have a UTF-8 enabled FXTextField and FXText widget. FXTextField supports UTF-8 and UTF-16 clipboard support for interaction with other applications.
Finally, I have now embarked on the implementation of possessive match support for FXRex. The possessive match is a fairly recent addition in the world of regular expressions; what it does is to eliminate back tracking in greedy closures. For example, the pattern "a*b" is not ever going to match "aaaaaaac", so instead of performing massive numbers of vain backtracking attempts, we can now write a pattern "a*+b", which will simply give up as soon as we fail to match the "b" against the "c".
It is interesting for our purposes as it may substantially speed up the syntax coloring engine or other sophisticated pattern matching using FXRex.

A detailed list of features follows:

  • Unicode support added to FXText; over the next few days, FXText will go through overhaul of the internals, plus we're adding clipboard and selection support similar to what FXTextField already has.
  • Unicode support added to FXTextField. FXTextField is at this point pretty complete. Note that due to multi-byte representation of unicode in UTF8, the cursor in FXTextField is constrained to character-starts, i.e. positions passed into FXTextField will be adjusted if necessary.
  • Added possessive match mode in FXRex. Current implementation is still limited to possessive match of simple patterns [this will change in subsequent releases]. The syntax is similar to that of the lazy match, except a + instead of a ? is used. The possessive match is a greedy match that does not backtrack; therefore, using possessive match for syntax coloring can yield some dramatic speedups in the editor.
  • Also added some [as yet internal] documentation on future syntax FXRex will support for unicode regular expressions. We stick to the standards whenever possible.
  • Added FXColorRing class to edit color based on hue-ring and saturation/value triangle. This is now used in FXColorDialog in favor of FXColorWheel. The FXColorRing provides a single control that can select hue, saturation, and value using more a intuitive interface than sliders.
  • Added Leandro Nini's FXKnob widget. It is a rotational valuator which can replace dial or slider if different looks are required.
  • Split fxchar.h into fxascii.h and fxunicode.h.
  • Added new FXColorList widget to pick from named colors; you can load your own colors in such a list.
  • Added notify flag to FXTextField, FXSlider, FXRealSlider, FXDial, FXSpinner, FXRealSpinner, FXCheckButton, FXToggleButton, FXRadioButton.
  • Added API to FXFileDict to change settings database being used.
  • Fixed jumping mouse wheel bug in FXScrollBar.
  • Fixed some subtleties in FXText w.r.t. makePositionVisible().
  • Re-added getWindowCount(), to FXApp. The new implementation is more elegant in that it eliminates global variables.
  • The fxgetticks() is now implemented for x86-64, IA64, PPC, HP-PA, and SPARC-V9, in addition to x86, when using GCC compiler. Please test!
  • Added SSE3, HT detect to fxcpuid() [x86 only!].
  • Replaced all old "ctype.h" functions with functions from fxascii.h; these don't interpret the upper 128 codes and thus are safe to call on UTF-8 encoded unicode.
  • Few bug fixes in FXString as well as additonal API's.

June 29 - FOX UNSTABLE 1.5.5

  • Added FXDir class for directory scanning; it scans one file at a time.
  • Implemented text at an angle drawing routines.
  • Added API's to FXScrollPane to get/set number of visible items.
  • Fixed windows-related flaw by not disabling arrows in FXScrollPane.
  • FXDragCorner now uses Extended Window Manager Hints if available.
  • Implemented drawing at angles on Windows also.

June 11 - FOX STABLE 1.4.16

  • Fixed bug in FXList and FXIconList: select lone item with arrow keys didn't work.
  • Fixed sign error in quaternion classes in setAxes(). This only happens in one of the exceptional cases.
  • Issue in FXMemoryStream fixed.

June 4 - FOX STABLE 1.4.15

  • Fixed x86-64 bug with FXString::vformat().

April 14 - FOX DEVELOPMENT 1.5.4

  • Added access function wc() to FXString for reading wide character at byte offset.
  • Added setData() API's to FXBitmap, analoguous to FXImage.
  • The setCurrentItem() function in FXComboBox now has notify parameter; it generates SEL_COMMAND when current item is programmatically changed; note that the argument passed to the SEL_COMMAND is the new text in the box.
  • Added compose API to FXString.
  • Added charCompose() API to FXchar to compose unicode character with diacritic marks.
  • Added Hangul composition/decomposition functions.
  • Added API's wide to utf and vice versa API's to fxdefs.h. A whole slew of new functions. Used internally by FXString but useful elsewhere also.
  • The setCurrentItem() function in FXListBox now has notify parameter; it generates SEL_COMMAND when current item is programmatically changed. The argument passed to the SEL_COMMAND is the index of the new current item.
  • FXTreeListBox was erroneously sending a SEL_CHANGED when calling setCurrentItem() with notify=TRUE; it should have sent SEL_COMMAND as it sends SEL_COMMAND whenever the current item changes by other means. It still sends SEL_CHANGED when mouse is hovering over the list when its popped up.
  • FXMDIChild forwards all unhandled messages, but does not forward unhandled messages with ID's which belong to the FXMDIChild itself.
  • Added some checks in FXQuat{f,d}::arc(). Floating point rounding errors could in rare cases cause trouble.
  • Added Euler angles to quaternion and back API's. There are now 6 of them, one for each sequence of roll/pitch/yaw.

April 9 - FOX DEVELOPMENT 1.5.3

  • Fixed loadImage() API in FXIconSource. It was returning FXIcon* instead of FXImage*.
  • Added decompose API's to FXString; this returns the decomposition of a string in terms of its diacritic marks.
  • Added decompose tables to fxchar.cpp.
  • Added decomposeType(), charNumDecompose(), and charDecompose() API's to fxchar.h.
  • Added count() API to FXString; counts number of utf8 characters.
  • Added API index() to FXString, which gives utf8 character index of utf8 character at given byte offset in FXString.
  • Added API offset() to FXString, which gives byte offset of utf8 character with given index.
  • Added inc() and dec() API's to FXString to advance byte offset to next/previous utf8 character.
  • Added Ascii-only character type functions to fxchar.h. These work when searching ascii codes in utf8. Using the ctype.h for this purpose would trigger spurious hits depending on locale settings. So use the fxchar.h versions if possible!
  • Dropped fill() API's from FXString:- duplicates functionality of assign().
  • Dropped count() API from FXString:- dupplicates contains() API.
  • Added many API's to FXString which take wide and narrow characters; in particular, constructors, assign(), append(), prepend(), insert(), replace(), and assignment operators.
  • FXwchar is now typedef-ed to wchar_t when wchar_t is 32-bits. On machines where wchar_t is 16-bits, FXnchar is typedef-ed as wchar_t. Thus, we can now populate FXString directly with wide character string constants; on Windows machines this translates to a call via the FXnchar API, while on UNIX machines this becomes a call via the FXwchar API.
    This may often be more convenient than embedding utf8 string constants into your code; however, since a translation is involved embedding utf8 character string constants is probably faster, so use this whenever possible.

April 9 - FOX STABLE 1.4.12

  • Fixed documentation bugs.
  • Fixed loadImage() API in FXIconSource. It was returning FXIcon* instead of FXImage*.

March 30 - FOX DEVELOPMENT 1.5.2

  • Added many text codecs; all character sets from FXFont, as well as utf8, utf16, utf16be, utf16le, utf32, utf32be, and utf32le have been implemented.
  • Overhauled and fixed number of bugs with the unicode character classes; renamed some of the API's and added a few more API's to fxchar.h.
  • Added narrow character (FXnchar) type to fxdefs.h. This is used to represent 16-bit unicode.
  • FXTextCodec now mostly complete. Added lots of API's for moving between various unicode transformation formats, and added convenience API's for encoding and decoding multi-byte characters. Also implemented lots of error checking.
  • Added some API's to FXString for utf-8 support, these API's will be used for adding many utf-8 and wide character convenience functions later.
  • Fixed FXTable selection rectangle issue; selection rectangle now set before callbacks are invoked.
  • Added compile #define symbol FLOAT_MATH_FUNCTIONS which can indicate that single-precision math functions are available; if not set, FOX will use the symbol __USE_ISOC99 or turn on the single-precision convenience macros.
  • Fixed layout in FXListBox. Size of FXListBox should be based on width of ALL strings currently added, similar to static FXComboBox.

March 20 - FOX DEVELOPMENT 1.5.1

  • Added scroll capability to FXTabBar and FXTabBook.
  • Renamed remove API's in various containet classes to erase which more closely resembles STL container classes' nomenclature.

March 20 - FOX STABLE 1.4.10

  • Fixed compile problem on Windows.

March 17 - FOX STABLE 1.4.9

  • Added fixes to LaTeX syntax coloring (thanks to: Mikkel Kamstrup Erlandsen).
  • Fixed typo in FXApp; handleTimout(), should have been handleTimeout().
  • Changed some bugs in FXGZStream, FXBZStream, and FXFileStream; in some cases, the FXStreamEnd flag was set prematurely.
  • More work on unicode done.

March 16 - FOX STABLE 1.4.8

  • FXUndoList should account for FXCommandGroup when FXUndoList::end() is called, and not at the beginning when FXCommandGroup is still empty.
    This is useful if you subclass FXCommandGroup and add extra space when a complex undo command is completed. As an example, suppose you're disconnecting nodes from a graph. Then it is not known whether a collection of nodes becomes completely detached from the graph until the last node is cut loose.
    To properly account for space when nodes become completely detached from the graph, you can then add the extra space to the subclassed FXCommandGroup just prior to the call to FXUndoList::end(). If you merely remove some connections but the nodes are still connected by other edges then the space is not added since the data structures are not completely owned by the undo system yet.
  • Also, incorrectly accounted for size changes when merging undo records.
  • Adding an undo command should only change the size when its committed, i.e. either an add() of a simple command at the toplevel, or an end() of a compound command at the toplevel.

March 8 - FOX DEVELOPMENT 1.5.0

This is a development preview; it is not recommended for any development work at this time; in particular, no effort has been made to make it compile on all platforms. Some of the highlights of this release are below.

  • Added fxchar.h and fxchar.cpp unicode tables. The fxchar.h header file provides functions operating on 32-bit wide unicode characters. They support the full range U+000000 to U+10FFFF. FOX will support wide characters but most functions are going to be working on UTF-8, which is a more compact and manageable representation of unicode characters.
    Some FXString API's have been added already for UTF-8. Many more will follow. FXString has API's taking strings (sequences of bytes), as well as API's taking single character parameters. The former will serve us well for UTF-8, but for the latter, equivalent API's will be added which take wide characters, allowing one to e.g. insert wide characters without explicitly converting to UTF-8.
  • Added new class, FXTranslator. FXTranslator, once it is fleshed out, will be responsible for translating messages into local languages.
  • Added new API, tr(), to FXWindow. This gets passed the message text and optional translation hint. It adds the name of the widget as the context and then passes these parameters to FXTranslator. Thus, three things are available to translate a message. Actually, there may be a forth (fifth) thing as well, and that is the application and vendor keys, which FXTranslator could get at if needed. Some of the mechanisms have yet to be worked out, at this time.
  • Went through the entire FOX library and added a call to tr() for each and every message. Once FXTranslator is implemented, this will then instantly enable localization of FOX.
  • Added mouse wheel support for FXComboBox, FXListBox, FXTreeListBox; I can't believe I didn't add this long ago; its really very convenient!
  • Added utf.cpp source file containing some utf helper functions; this is an internal file.
  • If you ever listen to music at your PC you've got to get the [FOX-based!] Goggles Media Manager. What I like about it is that you don't have to create play-lists like XMMS; it keeps its info in a database and can do a number of useful queries. Yet another nice program from Sander.

March 8 - FOX STABLE 1.4.7

  • Removed check for used thread-id; this allows restart of a thread.

February 22 - FOX STABLE 1.4.6

  • Added missing FXAPI in FXGUISignal.
  • Removed friend FXEmbeddedWindow from FXApp.
  • Flags TABLE_COL_SIZABLE and TABLE_ROW_SIZABLE now cause corresponding row and column header controls to allow resizing or not.
  • Flags TABLE_NO_COLSELECT and TABLE_NO_ROWSELECT disable column and row select mode for corresponding table headers.
  • Fixed bug in FXHeader which caused HEADER_BUTTON to be ignored (button was always enabled).
  • Added flag HEADER_RESIZE to FXHeader which enables interactive header section resizing by the user; this is now used by the FXTable as well.
  • Fixed problem in FXToolBar dealing with special children FXSeparator and FXToolBarGrip which have special layout from the normal children.
  • Removed #error from ControlPanel application.

February 15 - FOX STABLE 1.4.5

  • Core dump with hitting select all in empty table FXTable fixed.
  • Core dump with non-ascii characters in FXSettings fixed.
  • Added missing FXRex.h in fx.h.

February 13 - FOX STABLE 1.4.4

  • Problem in fxtargaio fixed.
  • Rewrote important part of fxpcxio routine; all test images of depth 1, 4, 8, and 24 bits per pixel now pass the test.

February 12 - FOX STABLE 1.4.3

Well, here's a few other minor updates. Nothing very serious this time. Now that the worst errors have been taken care of, I'm going to hold off these rapid releases until there is something serious or after I've been able to collect a bunch of them.

  • Fixed warnings and error that came up on SGI build.
  • Fixed TABLE_NO_ROWSELECT and TABLE_NO_ROWSELECT not working right in FXTable.
  • Suppress warning on VC++ for DLL binding templates.

February 10 - FOX STABLE 1.4.2

  • Fixed FXFileSelector popup menu:- was unable to delete directory due to introduced problem.
  • Updated Digital Mars C++ compiler makefiles.
  • Updated Watcom C++ compiler makefiles.
  • Fixed some FXCursor for Digital Mars C++.
  • Added FXAPI declaration to FXObjectListOf.
  • Fixed type on FXSplashWindow comment.
  • Removed default parameter from non-floating bar constructors in FXMenuBar, FXToolBar, and FXDockBar. One must always pass a 2nd parameter as the two constructors can otherwise not be distinguished [GCC people: can't this be detected during compilation?].
  • Fixed FXMutex reserved memory amount for HP-UX support.
  • Fixed FXMemMap for Digital Mars C++ compile issue.
  • Removed ControlPanel from Windows Builds; you can remove the warning message and compile it, but it wont quite work since ControlPanel doesn't change the Windows Registry but only the file-based registry [Maybe that will change in future versions; however, the FOX control panel isn't as important on Windows since FOX follows many of the standard Windows Control Panel settings].

February 8 - FOX STABLE 1.4.1

  • Fixed bug in fxsaveJPG() routine; saving JPEG images didn't work properly.
  • Fixed problem with ControlPanel crash. ControlPanel would crash when registry was empty.

February 7 - FOX STABLE 1.4.0

Well, after another last-minute feature got snuck in over the weekend, I'm pleased to present the new major stable release, the FOX Toolkit version 1.4!
This release is going to make a lot of people happy, since we've accomplished quite a bit of work since the 1.2 release!

  • Smooth dragging and side-by-side docking of toolbars and dockable panels has been implemented.
  • A new class FXIconSource facilitates loading and scaling of images or icons, from a large variety of image formats.
  • The file selection widget now support thumbnail previewing mode. If a filename is recognized as an image, and the thumbnail mode is in effect, the image is loaded and scaled down to serve as the thumbnail.
  • Support was added for shaped windows, allowing you to make non-rectangular windows.
  • Thread support was augmented with synchronization primitives and a global application mutex was added to deconflict worker threads and GUI thread.
    Also, a new class FXGUISignal serves to wake the GUI thread from a worker thread.
  • Editable cell support were added for the Table widgets.
  • SUN Raster image and Amiga IFF image file formats have been added.
  • Upgraded to XDND release 5, the latest specification of the XDND standard; interoperability with OpenOffice has been accomplished.
  • Exception handling for common resource errors was introduced, allowing FOX programs to gracefully handle various runtime errors like running out of window handles and bitmaps and so on.
  • Added alpha channel support for TGA format.
  • New 7 Segment Display widget was added. It is arbitrarily scalable.
  • Ruler widget was completed. This is a document ruler widget a-la MS-Word.
  • New class added for support of Memory Mapped Files. This sure helps with manipulating large blocks of data in a platform-independent way.
  • New class FXSplashWindow has been added. It uses the new shaped window facility to present an attractive, arbitrarily shaped introduction window for your application.

February 7 - FOX DEVELOPMENT 1.4.0

  • Added thumbnail icon previewing mode to FXFileList, when set in big icon mode. This feature uses the new FXIconSource for the loading and scaling.
    It is quite fast for loading icons, but a bit tardy for directories with large collections of photographs.
  • Changed setIcon API's in the various list widgets. An optional owned flag is now passed. If the old icon was owned by the list item, it is deleted, and replaced by the new icon. If the new icon is set to be owned, it will be deleted when the list item is deleted, or when it in its turn is replaced when a new icon is set. As a special case, resetting the same icon does not delete the icon but just changes the owned flag; this allows the application to "reposses" or "disown" the icon.
  • Also added a new class, FXIconSource, which embodies the knowledge of various image file formats. It has three main API's: loading an icon from a file, loading an icon from a reswrapped stream, or loading an icon from an already opened FXStream.
    These API's are in turn invoked by three other API's, which can load and scale an icon down to a certain size, using either the fast image rescaler or the slower high-quality scaler.
    These six API's are duplicated for loading images instead of icons.
    Finally, the core loading API's are virtual so that the FXIconSource may be subclassed to provide additional image format support.
  • Split off FXIconDict into its own class, and reorganized it to use the new FXIconSource class. Consequently a set of API's has been added to FXIconDict to set/get the FXIconSource.
    FXIconDict manages the lifetime of the FXIconSource object it uses; initially, it creates its own icon source.
  • Every time I explain the new toolbar system to someone, I say "dock site" when I meant FXToolBarDock. Obviously, the latter is the wrong name. As of today, there is another reason why this name is not ideal and that is that I have added another class, FXDockBar, which is basically a general- purpose FXPacker with docking capabilities.
    FXToolBar now derives from that, adding just the reorientation capabilities to the FXDockBar's capabilities.
    So now we have a general purpose packer that can be floated, we need a different- looking handle to move it around, and indeed, that is another class now which is another flavor of FXToolBarGrip called FXDockTitle. This serves as both decorative title as well as a grip for moving the bar.
    We reserve the toolbar grip for small handle-bars inside FXToolBars.
  • FXMenuTitle now pops its FXMenuPane to the side depending on where the FXMenuBar containing the FXMenuTitle is docked. The idea is to prevent obscuring the other FXMenuTitles and to try and make sure the mouse is not over the menu pane when first popped up; the latter is potentially dangerous since the risk exists of accidentally invoking a menu option by releasing, without movement, the mouse button [under normal circumstances pressing and releasing the mouse lets the panel stay up; but if the panel appears right under the cursor, a menu option may be invoked instead].
  • A few more toolbar docking issues; first, toolbars which are stretched should undock only when their default size sticks out, or oscillation will result. Next, new API's have been added to FXToolBarDock which adjust the layout options of the remaining items in the dock when toolbars are undocked or docked.
    Finally, when releasing the mouse in the toolbar grip, the toolbar was not docking at the same place as it was when the timer expired. This has now been fixed.
  • Refactored the code a bit between FXToolBar and FXDockSite. Its FXDockSite's responsibility to know about the interpretation of the layout issues of the toolbar inside of itself; this means FXDockSite needs to be informed when toolbars dock and undock, or are moved around. It falls upon FXToolBar to find which dock should be attempted, and to determine based on heuristic fudge constants when something docks or undocks. We now have a single internal function which decides dock/no dock. While not perfect, it can be counted upon to give the same answer solely based on the relative relationships of toolbar and dock, regardless of whether we're docking or undocking. It is hoped that this prevents oscillation as much as possible.
  • Finally, we have a new option in the right-mouse popup menu over FXToolBarGrip which gives the user the ability to flip the orientation of the toolbar without having to dock it.
  • Fixed bug to allow dragging even when no alternate parent has been specified; you should be able to reorganize the layout inside a dock site even if floating is not an option.
  • Hold Control key while dragging toolbars to prevent docking; this allows parking toolbars near edges of the main window where they would otherwise have docked.
  • Drag and drop between FOX and OpenOffice works too!
    OpenOffice appears to be using XDND 5. also. I've managed to drag both text from Adie as well as JPEG image files via PathFinder into OpenOffice; I think I may get used to this!.
  • Fixed bug in drawEllipse() on Windows; thanks to Mauro Zecchini for discovering this problem.
  • FXFile::search() now expands environment variables (e.g. $HOME) and user names (e.g. ~user) in directories from the search path.

January 31 - FOX DEVELOPMENT 1.3.26

  • Upgraded to XDND version 5 standard. Verified interoperation between KDE and FOX, as well as GTK and FOX. using application/x-color drag. Unfortunately, GTK does not accept color drags from FOX, but FOX does accept color drags from GTK. The problem is GTK, since it doesn't accept color drags from KDE either.
    XDND version 5 brings a final confirmation in response to endDrag(). It is possible that the drop target, in processing the drop, encounters some sort of error. The XDND 5 implementation in FOX allows the drop target to call acceptDrop(), indication which action the target DID manage to perform.
    For example, when attempting to move a file from one place to another, the drop target may accept a drop but be unable to perform it [e.g. running out of disk space]. Returning DRAG_REJECT will allow the drop target to tell the drag source it was unsuccessful, and that it should remove the original file
    Note that we used to perform such a thing by trying to obtain TWO DND data's from the source, the real data and NULL data using the "DELETE" atom.
  • FXSettings, doesn't quote values unless leading and trailing spaces or special characters in it.
  • Updated Control Panel with capability to set file bindings; thanks to Sander for this!
  • Minor tweaks to toolbar dragging.

January 30 - FOX DEVELOPMENT 1.3.25

  • Changed algorithm that determines when a toolbar docks. For a horizontal dock site, the new algorithm docks the toolbar when the upper or lower edge of the bar falls inside the dock (with a slight amount of fudge since dock sites may be collapsed to 0 pixels when there's no bar inside), and when the bar doesn't stick out too much (mostly overlaps with the dock horizontally).
  • Also added some small icons to the toolbar grip docking menu.
  • Implemented workaround for grab-lost problems which happen under X11 when a window which is grabbed is docked or undocked. The workaround appear to really kill the issue dead and the opaque-dragging toolbars work just super now.
  • LAYOUT_DOCK_NEXT and LAYOUT_DOCK_SAME options conflicted with other layout options. One of the two reserved flag bits has now been used.
  • Removed the undock timer. Undocking now happens immediately, but docking is still done with a timer since we shouldn't dock just casually dragging a toolbar across a dock site by accident.
  • Docking back now happens not only when hovering near a dock area, but also when you release the toolbar grip near a dock area.
  • FXMenuTitle now pops its FXMenuPane besides itself instead of below, if the menubar is oriented vertically.
  • Fixed SUN Solaris build issue with FXGUISignal class.

January 28 - FOX DEVELOPMENT 1.3.24

  • Reintroduced FXTextCodec's. These were not be part of official 1.4 API, but apparently were being used by the FOX based SWT Widget Set for the Eclipse Project. Note that FXWString really is permanently gone:- FOX 1.5 will take a different approach to unicode support.
  • Fixed Borland C++ build issues and some Borland C++ specific compiler warnings.
  • Fixed Visual C++ build issues.

January 27 - FOX DEVELOPMENT 1.3.23

  • Added new class, FXGUISignal, which allows an FXThread to awaken the FOX GUI and cause it to run some callback message handler. Any number of FXGUISignals may be installed.
  • Changed FXToolBar class for docking/floating behaviour against FXToolBarDock.
  • Added new class called FXToolBarDock. FXToolBarDock implements rearranging of FXToolBars inside of it. FXToolBarDock is meant to be placed against the sides of an FXTopWindow where docking of toolbars and menubars is to be allowed. FXToolBarDock arranges FXToolBar in multiple galleys or rows. Each galley can have one or more FXToolBar widgets parked side-by-side.
    When space runs out, FXToolBarDock adjusts the number of toolbars on each galley by placing the last bar on the galley onto the next galley down until each galley fits.
  • Added new API's to FXUndoList and FXCommand to allow merging of undo records. The undo records can be made mergeable by implementing canMerge() and mergeWith() API's in your subclass of FXCommand. FXUndoList uses these to merge two records when adding a new FXCommand to the undo list.
  • Added before() and after() API's to FXWindow to allow testing of order of sinbling windows.
  • Changed reparent() function to have extra argument. The new reparent() API makes it possible to insert a widget at any location in the widget tree with a single call. If the widget keeps the same parent, all that happens is a layout recalculation; otherwise, the widget is reparented using a call to the native window interface. The old linkBefore() and linkAfter() API's are now obsolete.
  • Added option MBOX_SAVE_CANCEL_DONTSAVE; patch contributed by Sander.
  • Augmented FXStream for long file support.
  • Added own replacement strtoll() and strtoull() functions in case not available in local C-library.
  • 64-bit FXlong and FXulong datatypes are now ALWAYS available.
  • Updated FXFile, FXFileList, FXDirList for long file support.
  • Added FXLongVal, FXULongVal and signed and unsigned long FXStringVal API's for FXString.
  • Dropped FXWString and old text codecs; these are obsolete now.
  • Fixed bug in Windows event processing of WM_MOUSEMOVE. When mouse was grabbed, coordinates were wrong when cursor moves outside of grabbed window.
  • Fixed bug in getAppName() and getVendorName() in FXApp and similar problems in FXRegistry.
  • Upgraded internals of FXIconList, FXList, and FXHeader widgets to use FXObjectListOf template class instead of maintaining own array; this saves some code.
  • Changed many access function to return const FXString& instead of FXString. This eliminates generating a string copy.
  • Fixed FXMutex reserved memory size to be sufficient for IBM PowerPC/AIX.

X-Mas Release - FOX DEVELOPMENT 1.3.22

  • Completed layout computation for FXDockSite widget.
  • Fixed highlighting in FXToolBarGrip widget.
  • Added API's to FXStream: setBigEndian() and isBigEndian(). These force the FXStream into a particular byte order. Byte swapping will be enabled or disabled depending on the endianness of the platform. The old API isLittleEndian() is removed: to determine byte order, just use FOX_BIGENDIAN macro directly.
  • Simplify code for FXHorizontalFrame and FXVerticalFrame a little bit.

December 21 - FOX STABLE 1.2.13

  • Backported fixes to 1.2 branch.

December 14 - FOX DEVELOPMENT 1.3.21

  • In the FX***Image classes, loadPixels() now can be called even after the image has been created already. It'll resize the server-side pixel storage but not yet call render(), since further manipulations may be desired prior to render().
  • Added new colors to FXApp for selected menu foreground and background.
  • Fixed some long-standing issues with FXPopup menu handling code. It works better now...
  • Added API's like fxcheckTIF(), fxcheckJPG(), etc. These API's read a portion of the image file from the stream, determine if the image format is recognized, and then rewind the stream back to the same point. Thus, you can successively try each image type, create the right FXXXXImage class, and call loadPixels().
    A few of these fxcheckXYZ() API's need some further testing [mostly, due to poorly designed image formats where it is hard to determine the correct type easily].
  • Fixed issues with reswrap: first, when passing a prefix for the resource name, the resource name can start with a digit since the prefix is in front of it. Second, the prefix is now also used when using the -r altname option. Finally, filenames on windows can have mixed \ and / path separators. When turning filenames into legal identifiers, we now allow ":" in the name since one could use scope-resolution operator in icon name.
  • FXFile::absolute() no longerdoes tilde or environment expansion; there were cases where this was inappropriate and unexpected. You can call FXFile::expand() explicitly where desired.
  • FXFileList now shows "." instead of ".." when displaying root of a file system.
  • FXFile::simplify didn't handle cases like "/." to "/", causing trouble with the change made to FXFileList; we all knew we had to do slashdot right ;-).
  • FXFileDialog could not select "/" when in Directory selection mode. Adding "." in the top directory and simplifying "/." to "/" fixed this problem.
  • Changed handling of default color settings; system settings now applied only to settings NOT superceded from FOX Registry. Also, added support to read a few of the most important color settings from X Defaults database, which means FOX displays in colors as set up by your local window manager.
  • Updated HTML Syntax patterns from Andy Preston.
  • Updated Makefile Syntax patterns.
  • Fixed focus navigation code eating key/modifier combinations other than the ones its supposed to; thanks to chafar@alcances.net for pointing this out.
  • Hmmm, the FLTK people seem to like my timer-handling code too ;-)

November 29 - FOX DEVELOPMENT 1.3.20

  • Fixed problems with FXFileSelector/FXFileDialog; right-mouse popup menu functions Move/Copy/Link/Delete were not quite working right when multiple files were selected.
  • Added overloaded setData() to FXImage which changes shape as well as contents of client-side pixel buffer from given pixel array.
  • Updated FXDockSite.
  • FXFile::getUserDirectory() now uses %USERPROFILE%.
  • Added Python and Makefile patterns to Adie.stx syntax coloring file.

November 24 - FOX DEVELOPMENT 1.3.19

  • New program, fxdesktop control panel, allows you to set FOX colors and other settings interactively.
  • The quaternion function arc() now returns the quaternion representing the rotation of the two vectors, instead of double the angle of rotation about the same axis.
  • More new functions for manipulation of quaternions.
  • Ascii mode FXRegistry now uses %USERPROFILE% as default location for registry subdirectory. This affects few FOX programs since on Windows, the normal Windows Registry is used by default.
  • Added support for Xft in glUseFXFont(). It now properly generates OpenGL display list bitmaps for FreeType fonts.
  • Further work in FXFont support for Xft:- now properly fill in properties of the font that matched the desired font.
  • Made some API's in FXGLViewer virtual upon request from ESI-Group.
  • Fixed some HTML highlight pattern for Adie.
  • Read/write ascii based registry from %USERPROFILE%/foxrc on Windows; this is a more logical choice on Windows that %HOME%/.foxrc, which was the old choice. Note, this only affects programs which use the ascii-based registry on Windows. Most FOX programs use the Windows Registry and are thus not affected by this change.
  • Fixed problem with FXMessageBox ID_CLICKED_SKIP and ID_CLICKED_SKIPALL.
  • Fixed bug in FXStream usage of FXHash.

Halloween Release - FOX DEVELOPMENT 1.3.18

  • Important change: consolidated reparentItem(), moveItemBefore(), and moveItemAfter() in FXFoldingList and FXTreeList into a single new API called moveItem(). This is much easier to remember and also allows one to move an item into the right place in the tree in a single call.
  • Another important change: harmonized and simplified item addition API's in FXTreeList, FXFoldingList, and FXTreeListBox. The new API's are simpler to use, and easier to remember due to more similar naming to similar API's in the other list widgets.
  • Added setHeaders() API's to FXIconList and FXFoldingList. setHeaders() allows you to populate the entire header control of the list widget with a single call.
  • Fixed slight offset in editable cell text v.s. non-edited cell in FXTable.
  • Added new API's to list widgets. The new API's fillItems() can be used to populate a list widget with a number of items in one fell swoop. The new items are appended to the already existing ones.
  • Updated FXSpheref and FXSphered. including one point at a time now produces smaller bounding spheres. Also, empty sphere cases are now handled properly.
  • Fixed FXTreeListBox. When adding or removing items, the field was not updated properly.

October 28, 2004 - FOX DEVELOPMENT 1.3.17

  • Added editability to FXTable. You can edit cells in the table. From a user's perspective, editing a cell in FXTable is initiated in a number of different ways:

    • Double-click. This will create an input control in the cell and allow you to type.
    • Hit F2 function key, or RETURN key.
    • Start typing any printable character. This works if the input control is a text field; other input controls may drop the input.
    • Send an ID_START_INPUT message to the table.

    The editing ends in one of two ways. If the input is to be discarded, you can hit the ESC key. If the input is to be accepted, you can hit RETURN or nativage to the next cell using arrows or TAB keys.
  • Added API's startInput(), cancelInput(), acceptInput() to FXTable. These API's introduce sub-classable input editing for table items to the FXTable class.
  • Added setEditable() and isEditable() API's to FXTable.
  • getColumnX() and getRowY() in FXTable now return proper scrolled x and y positions of the start of a column (row).
  • Removed setColumnX() and setRowY() API's. Functionality of these API's is more intelligibly supported by calling setColumnWidth() and setColumnHeight().
  • Added new API's to FXTableItem. The getControlFor() creates and populates a editor control to be used to edit the item. It is used by FXTable to determine what type of control to use to edit a cell. By making this virtual, you can make custom FXTableItems which are edited by a control of your choice.
    The FXTableItem setFromControl() API is used to populate the item from the control. Its function is to read the control and extract the data into the item. In typical usage, it is envisioned that getControlFor() and setFromControl() are both reimplemented for subclassed FXTableItems.
  • Added more extensive documentation for FXRegistry.
  • Added center-justification mode to FXTextField. In addition to right- and left-justified text in the text field, you can now also have centered text. Centered text larger than the text field can scroll both ways. For backward compatibility reasons, the centered mode is only enabled when explicitly passing JUSTIFY_CENTER_X in the setJustify() API [otherwise, all text fields would end up being centered!].
  • Added API changeFocus() to FXWindow; it lets a parent widget know when the focus child is changed.
  • Added new API changeFocus() to FXWindow. It can be used by a composite widget to know when the focus changes to another child.
  • Added _POSIX_PTHREAD_SEMANTICS for older SUN Solaris thread support.
  • Added some API's in FXXYZStream classes.
  • Defaulted the normal FOX font to "helvetica,90" normally and "Sans,90" when XFT is enabled.
  • Removed deprecated timer and chore API's from FXApp.

Older News

Older news...

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/install.html0000664000175000017500000005107212130340076012434 00000000000000 Download
Download [Remove Frame]

Installation instructions

                              The FOX GUI Library Installation
                              ================================



Systems Which are Supported or Known to work:
=============================================

  o Linux (gcc, INTEL C++), x86, IA64 (Itanium), x86-64 (Opteron).
  o Windows XP, 2K, NT, Windows 9x, (VC++, Cygwin, MinGW,
    Borland C++, Digital Mars C++, OpenWatcom C++, ... )
  o Digital Unix/COMPAQ Tru64  OSF1 3.2, 4.0x, 5.0x (gcc and DEC cxx).
  o SGI IRIX 5.3, 6.1, 6.2, 6.4, 6.5 (gcc and MIPS Pro C++)
  o SUN Solaris, SunOS (gcc, SUN WorkShop Compiler, SUN Forte C++)
  o HP-UX PA-RISC 9.x, 10.x and B.11.00, (gcc and aCC).
  o HP-UX B.11.22 Intel Itanium (IA64) using aCC.
  o AIX 4.2, 4.3
  o FreeBSD
  o Sequent DYNIX/ptx 4.4.7
  o IBM VisualAge C++ 3.5 (Windows)
  o Apple MAC OS-X.  You will need an X-Server, either Apple's or XFree.



For most UNIX systems.
======================

For most unix systems you can configure simply as:


        ./configure


You can disable OpenGL support by configuring as:


        ./configure --disable-opengl.


After configure runs its course, simply type ``make'' to build the library,
and ``make install'' to install it.

FOX should compile on most UNIX platforms; we have tested the following:
SGI, IBM, HP, SUN, DEC, LINUX, all with gcc; however, FOX uses a fairly
conservative subset of C++, and should be no problem to port to other, more
primitive, C++ compilers.

On some machines, the X11 header files are still K&R C, instead of ANSI-C.
You might try define add "-fpermissive" to the CXXFLAGS environment variable
prior to running configure (this is the flag for GCC; other compilers may
have similar option for old K&R C).

When programming against FOX, you should only have to include "fx.h", and
for 3D programs, "fx3d.h".  To use keyboard symbols, include "fxkeys.h" also.
Specifically, to remain portable application programs should NOT include any X
window header files.

You may of course need other system headers ("stdio.h", "gl.h", etc).


Building for Debug or Release.
==============================

Normal builds [w/o any special arguments to configure] will include assert and
trace statements into the library, but no debug symbols.  This mode compiles
the fastest and allows for tracing of the FOX library.  This mode is the
recommended way to develop FOX applications, as it allows for resource tracing
and internal consistency checks.

Building for debug will add debug symbols as needed by your debugger.  It also
includes assert and tracing into the library.  This setting is recommended if
you need to debug the FOX library itself.  Full debug executables are build by
configuring with:


        ./configure --enable-debug



Release builds strip all debug information, asserts, and tracing, and generates
optimized code.  The resulting library is the smallest/fastest, and this is the
recommended setting for production code.  To build for release, use:


        ./configure --enable-release




Building Shared or Non-Shared Libraries.
========================================

You can build FOX either as shared library, static library, or both.  The
default is both.  To build static library only [this may be necessary on
certain systems where shared library support is lacking]:

        ./configure --disable-shared

to build shared library only:

        ./configure  --disable-static



Image File Format Support.
==========================

FOX needs external libraries for JPEG, TIFF, and PNG image format. On
some systems, such as Linux, *BSD, these are likely already installed
on your system.  On Windows or older UNIX systems, they need to be
compiled and installed first.  See below on how to override default
locations on UNIX systems.

The JPEG support is provided by jpegsrc.v6b.tar.gz, the PNG support
by libpng-1.2.5.tar.gz (or a newer version).  The TIFF support is
in tiff-v3.5.7.tar.gz (or later).  All these files are available on
ftp.fox-toolkit.org.

After these libraries have been compiled and installed, compile FOX
with HAVE_TIFF_H=1, HAVE_PNG_H=1, HAVE_JPEG_H=1.

The TIFF library may also need the JPEG library (JPEG is one of the
tags supported in the TIFF format), so compile the JPEG library first.
TIFF also needs the GNU compression library zlib (available as
zlib-1.1.4.tar.gz (or later) on ftp.fox-toolkit.org).


Compression Library Support.
============================

Compressed FXStream support is enabled by installing zlib-1.1.4.tar.gz
and bzip2-1.0.2.tar.gz (or later), then compiling FOX with HAVE_ZLIB_H=1
and HAVE_BZ2LIB_H=1, respectively.  You do not need to install them on
Linux, *BSD, but you probably do on Windows and older UNIX systems.




Overriding Libraries.
=====================

The default libraries determined by configurations are not always the ones you
want to use; therefore, there is a mechanism to override the default choices
of the configuration system.

The override is done simply by setting environment variables prior to running
configure; make sure config.cache is removed if you've ran configure before.

Configure allows for the following overrides:


        Environment Variable    Default value if not set
        ====================    ========================

        LIBJPEG                 -ljpeg
        LIBPNG                  -lpng
        LIBTIFF                 -ltiff
        LIBZ                    -lz
        LIBBZ2                  -lbz2
        LIBGL                   -lopengl32      (win32)
        LIBGLU                  -lglu32         (win32)
        LIBGL                   -lGL            (unix)
        LIBGLU                  -lGLU           (unix)



On SGI IRIX 6.x
===============


On SGI Systems where MIPS Pro C++ compiler is used instead of GCC, you will
need to set the environment variable CXX to:

        CC -n32

and then run:

        ./configure --x-libraries=/usr/lib32


or, you can also build FOX for the 64 bit model, and set CXX to:


        CC -64


and run configure with:

        ./configure --x-libraries=/usr/lib64


The first argument is only needed if you also have MESA on your system.
FOX searches for the png library [for Portable Network Graphics, the successor
of GIF],  but the library it finds, even though it has the same name, is not
the right one.  You will need to disable this feature, or download the PNG
library from http://www.graphicswiz.com/png/ and compile it, and pass the
appropriate flags for your compiler to find the new version.
If compiling without PNG, pass the flag:  --disable-png; likewise, you
can disable JPEG with the flag: --disable-jpeg.


Using gcc 2.95.2 on IRIX 6.x (Thanks to Theo Venker)
====================================================

You won`t believe the solution: rename FXApp.cpp to FXApp.C and everything
is fine. The manual page of g++ says that it accepts C++ suffixes .C, .cc,
.cxx, .cpp, and .c++, and it does, but for .cpp and .c++ it compiles with
-D__LANGUAGE_C -D_LANGUAGE_C -DLANGUAGE_C whereas the others suffixes
use -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS. This is clearly a
bug in g++. I decided to wait for the next g++ release, so I didn`t
report this to the g++ maintainers. May be you will.

The work-arround is:

        export CC="g++ -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS"

and then run configure.




Building 64-bit code on Linux for x86-64 (AMD Opteron, Athlon64)
================================================================

Linux for AMD Opteron supports execution of both 32 and 64 bit code
on the same system; consequenly, two sets of libraries are installed.
To configure properly, you will need to let ld search the right set
of directories.  Here's how:


        export LDFLAGS="-L/usr/lib64 -L/usr/X11R6/lib64 -L/lib64"
        ./configure 


No other issues are known at this time.




On Alpha Processor based Workstations (COMPAQ/DEC OSF1)
=======================================================


If you use DEC's "cxx" instead of GNU gcc, you will need to make sure the
you add the flag option -D_XOPEN_SOURCE_EXTENDED to the compiler; this
will allow usage of a wider set of POSIX functions; GCC seems to have
this flag on by default, but the standard C++ compiler on OSF1 does not;
thanks to thomas.goessler@avl.com for pointing this out.

When compiling with gcc on Digital Unix, you may want to enable gradual
underflow support for IEEE754 conformant floating point operations:


        export CXX="gcc -mieee"
        ./configure ....


If this flag is NOT set, floating point operations which yield underflows
will cause a floating point exception (SIGFPE).

Many perfectly correct programs may generate underflows when working
with small numbers (~1e-38 single precision, ~1e-308 double precision);
working with these numbers may involve so-called denormalized floating
point numbers, i.e. numbers where the mantissa can no longer be shifted
to be within [0.5,1.0> range due to the exponent becoming 0.

The ALPHA CPU does not include hardware do manipulate these numbers and
will generate a trap when trying to manipulate these numbers; passing
the "-mieee" flag will incorporate a software handler to ensure IEEE754
conformant floating arithmetic.




Compiling FOX with the SUN WorkShop Compiler
============================================

To use the SUN compilers, simply configure FOX as follows:

  > cd fox
  > env CC=cc CXX=CC LD=CC ./configure


Explanation:

The SUN compilers require 'CC' to be used instead of 'ld' for creating the
shared object library. This is to ensure that template instances will be
included in the library. To build a static library 'CC -xar' should be
used instead of 'ar' but there is no simple way to do this, due to
limitations in 'libtool'.

To get around this problem, the configure script invokes 'CC' with the
argument '-instances=global', thus including template instances in the
object file instead of using a template repository. This works fine and
'ar' can be used to build a static object library.

Daniel Gehriger 



Compiling FOX using the HP/UX C++ Compiler
==========================================

You may want to use GNU make instead of HP's make (/usr/bin/make). The default
version of make doesn't seem to process the dependencies for PathFinder
correctly and thus doesn't generate the reswrapped icon header files. Since
PathFinder is built after the library and all the test programs, this isn't
a huge problem -- it just means that the build will stop at that point with
an error message.

Configure the build by typing:

    env CC="cc +DA2.0W" CXX="aCC +DA2.0W +W740,749,863" ./configure

The "+DA2.0W" flag tells it to compile as 64 bit. The "+W740,749,863" option
suppresses a few warning messages that we believe are safe to ignore ;)



Compiling FOX using the HP/UX Itanium^2 aCC C++ Compiler
========================================================

Assuming the aCC is installed in the recommended place:


    export CXX="aCC -fast -mt +DD64 -DHAVE_VSSCANF=1 -DHPOGL_SUPPRESS_FAST_API=1
                   -I/opt/aCC/include -I/opt/graphics/OpenGL/include -L/lib/hpux64
                   -L/usr/lib/hpux64 -L/opt/graphics/OpenGL/lib/hpux64"


You may want to build the image support libraries also if you need them.



Windows 95/98/ME/NT/XP Builds
=============================

We currently build FOX on a regular basis using Microsoft Visual C++ 6.0.
There is also support for Mingw32, the latest net release of Cygwin (v1.1)
and Borland C++. We have heard of mixed success with building under Symantec's
C++ 7.5 compiler.

A few things to keep in mind:

 1. If you want to include OpenGL support be sure to define the HAVE_OPENGL
    symbol on the compiler's command line, and to link your executables to
    the opengl32.lib and glu32.lib libraries.

 2. The native Windows version of FOX relies on an undocumented API called
    _TrackMouseEvent() which is found in comctl32.dll. You should be sure
    to link your FOX applications with the comctl32.lib import library.
    Note that for this function is only available for comctl32.dll
    versions 4.70 or later; the latest version of this DLL can be downloaded
    from Microsoft's web site:

	http://www.microsoft.com/msdownload/ieplatform/ie/comctrlx86.asp

    If you are running Windows 98, Windows NT 4.0 SP3, or have installed
    Internet Explorer 4.0 or later, you *probably* already have the latest
    version of this DLL already.

 3. The FOX registry mechanism uses the regular Windows registry under the
    hood; those functions are found in advapi32.lib which is not always a
    standard library. If you get some unresolved symbols at link time (esp.
    with names beginning with "Reg") try adding advapi32.lib to the list
    of libraries.

 4. To build or use FOX as a DLL, the symbol FOXDLL must be defined; for
    building the core FOX library, FOXDLL_EXPORTS must also be defined.
    If FOXDLL_EXPORTS must NOT be not defined when you are just using FOX
    as a DLL.

 5. It is recommended that extension DLL's are compiled with FOXDLL but
    that you define your own symbol to signify export; for example, the
    CHART library is build with CHARTDLL_EXPORTS; since the CHART library
    USES FOX, it must import the core FOX library, yet export its own
    functions.



Building with Microsoft Visual C++
==================================

We now have a project workspace and project files set up for Win32 builds
under Visual C++ 6.0. To use these, perform the following steps:

  1. Download the latest fox.tar.gz from the web site;

  2. Unzip & untar in your favorite place;

  3. Start Visual C++ and open the fox/windows/vcpp/win32.dsw workspace;

  4. Choose a project and build it. The project corresponding to the library
     itself is named "fox", and all of the other projects list it as a
     dependency. So if you choose, say, "glviewer" to build, it should first
     build the library and then build the glviewer test program.


Building with Borland C++ Compilers
===================================

The Borland makefiles are now tested semi-regularly against the free
command-line compiler tools (compiler version 5.5) distributed by
Borland/Inprise. We believe that they should also be usable for any recent
Borland C++ compilers (e.g. Borland C++ Builder 3 or later).

To build the FOX library, utility programs and example programs, change to the
fox-0.99.xxx\windows\borland subdirectory and type "make". It should compile
without a hitch, with the possible exception of building the OpenGL test
programs in the "tests" subdirectory:

 + If you're using the free command-line compiler tools, you want to be sure
   that the %BCCDIR%\Lib\PSDK directory appears in the linker configuration
   file (%BCCDIR%\Bin\ilink32.cfg). If it isn't there, the linker won't know
   where to find the opengl32.lib and glu32.lib import libraries.

 + If you're using an older Borland compiler, you similarly want to be sure
   to have the updated OpenGL SDK for Win32 (including the OpenGL 1.2 header
   files and import libraries).

If for some reason you don't have the correct header files and import libraries
for OpenGL, and if OpenGL support isn't important for your project anyways,
just modify the "Makefile.bc" in the fox-0.99.xxx\tests subdirectory so that
it doesn't try to build the "glviewer.exe" or "gltest.exe" examples.


Building FOX as a DLL
=====================

The FOX library can also be built as a DLL for Windows; this is done by
selecting the "foxdll" project and building it. Building this project
causes the import libraries and DLLs to be placed in fox/lib.
The filenames are foxdll.lib and foxdll.dll for the Release build, or
foxdlld.lib and foxdlld.dll for the Debug build.

To compile your own FOX applications so that they use the FOX DLL instead of
the static FOX library, be sure to define the FOXDLL symbol in your compiler
flags. Also note that the DLL must be in your search path for the program to
run!


Building FOX using OpenWatcom C++
=================================

The OpenWatcom C++ compiler can be downloaded free of charge from:


         http://www.openwatcom.org.


To use the OpenWatcom "patch" with a fresh copy of FOX vx.y.zz, please make
sure you've installed OpenWatcom C++ v1.0 and executed the SETVARS.BAT file
found in the OpenWatcom installation directory.
The Makefile.wc files rely on a Watcom environment variable, %WATCOM%, to
determine the location of the COMCTL32.LIB file.  Use the Makefile provided
in windows/watcom/Makefile.
Thanks to mikael@lyngvig.org for this port.



Building FOX using MinGW
========================

Please see the standard FOX documentation file, "Developing Win32 GUI
Applications Using FOX", available in this distribution as the file
"doc/win32.html".


Building FOX using Cygwin 1.1
=============================

FOX can also be built against the latest net release of Cygwin, available
for download from here:

	http://sourceware.cygnus.com/cygwin/mirrors

It absolutely will not compile with previous releases of Cygwin (i.e.
Cygwin B20.1 or earlier), at least not without a lot of headaches. The
win32api header files distributed with earlier versions of Cygwin were not
up-to-date enough for FOX.

It should compile out-of-the-box by typing:

	./configure --disable-shared
	make



Building FOX on QNX
===================


For those interested in using FOX with QNX, before running configure for
FOX on QNX it might be a good idea to run:

        automake --add-missing
        libtoolize -f

Doing so will ensure that the configuration files needed to detect QNX
are present.  

Also, for now it is probably best to disable shared libraries when
building FOX on QNX.  Programs linked with the FOX shared library will
not run, but instead will segfault.  I plan on looking into a fix for
this eventually.  

Dustin Graves 



Building on MAC OS-X
====================


When building on Mac OS-X, the following might help:


        CXX="c++ -I/sw/include -L/sw/lib
        ./configure 


This might help; no guarantees, I can not test this myself....



Image Formats in File Browser
=============================

By default, all available image formats are supported in the File and
Directory Browsers.  Some of these image formats require external
library support and consequently the size of your application executables
may be reduced by limiting the supported formats to those supported in
the core library; the image formats supported in the core library do
not require external libraries and therefore supporting them does not
incur any additional "code bloat".

To support only the core image formats, pass the compiler flag:


        -DCORE_IMAGE_FORMATS=1


This will enable all available image formats.  This will necessitate every FOX
application to link to the image libraries!!

Another flag is the default icon search path, i.e. where the file browser will
normally look to find and load icons bound to file extensions.
The path below will cause the system to look in three different directories:


    -DDEFAULICONPATH="~/.foxicons:/usr/local/share/icons:/usr/share/icons"


This would be a common setting for LINUX.  Note that this is only the default;
the actual search path can by set at any time by means of the FOX registry setting:


    [SETTINGS]
    iconpath="/home/extraicondir:/usr/share/icons"


Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/xml.html0000664000175000017500000001642512130340076011571 00000000000000 Documentation: HTML/XML resources for possible future widgets
Documentation: HTML/XML resources for possible future widgets [Remove Frame]

    This page is intended to collect some background resources for the FOX HTML viewer widget.  Yes, we're planning to have an HTML widget!  Currently, we're in the information collection stage.

    If you have additional links or HTML and XML URL's, please contact me and I'll add to the collection.  I'm looking for all sorts of references, ranging from source code to technical background articles.

W3 Consortium

Parsers

Web Servers

App Servers

Low-level tools

GUI's

More

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/license.html0000664000175000017500000007560412130340076012417 00000000000000 Download
FOX Library License [Remove Frame]

    FOX basically follows the standard GNU Lesser General Public License (LGPL). Because of repeated questions on this topic, it has become apparent that many people still had a number of uncertainties about licensing issues.

    Also, a number of stipulations in the GNU Lesser Public License statement have evidently been an impediment to truely wide-spread adoption of the FOX Library.

    Thus, the intent of the License Addendum has been to provide clarification of a number of obscure issues in the GNU Lesser General Public License, and to relax a few of its stipulations with an eye to solving a couple of practical issues.

    Below follows the GNU Lesser Public License, followed by the FOX Library License addendum.

    Finally, detailed rationale behind the License Addendum is presented.

    		  GNU LESSER GENERAL PUBLIC LICENSE
    		       Version 2.1, February 1999
    
     Copyright (C) 1991, 1999 Free Software Foundation, Inc.
         59 Temple Place, Suite 330, Boston, MA  02111-1307  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.
    
    		     END OF TERMS AND CONDITIONS
    
    

    
    
                               ADDENDUM TO LICENSE
                                   March 2003
    
                    Copyright (C) 2002,2005 Jeroen van der Zijp.
    
            Everyone is permitted to copy and distribute verbatim copies
         of this license addendum document, but changing it is not allowed.
    
    
    FOX Toolkit Library License Addendum.
    
    
    1. License.  The FOX Toolkit Library ("The Library") is licensed under GNU
    Lesser General Public License as published by the Free Software Foundation,
    version 2.1 of the License, or (at your option) any later version.
    
    2. Relinking Exemption.  You may distribute a combined work using a
    statically linked, unmodified copy of the FOX Library under terms of your
    choice, without the relinking requirement stipulated under the GNU Lesser
    Public License, subject to the following conditions:
    
      a. This static relinking exemption covers only the FOX Toolkit Library.
      Other libraries which the FOX Library may need are covered by their own
      respective licenses.
    
      b. Modification of the configure scripts, makefiles, or installation
      tools of the FOX Library to support a specific platform does not
      constitute creating a modified copy based on the FOX Library.
    
      c. Programs or binaries statically linked with the FOX Library must be
      identified as such by including, in the Documentation or by other means
      (for example in the About Box or Online Help), the following statement:
    
      "This software uses the FOX Toolkit Library (http://www.fox-toolkit.org)."
    
      d. Subclassing from Objects or Widgets supplied by the Library involves
      no modifications to the source code of the Library itself, and does not
      constitute creating a modified copy based on the Library.
    
    3. If you do not accept or are unable to meet the conditions under (2), you
    may continue to distribute the combined work under the original GNU Lesser
    General Public License.
    
    
                                 END OF ADDENDUM
    
    

Rationale

    We now launch into a point by point discussion of the License Addendum:

    • Point 1. says that basically, FOX follows the GNU Lesser General Public License.
    • Point 2. addresses the practical problem of static linking FOX into an application program or combined work. The GNU Lesser General Public License insists that the recipient of a distribution of a combined work i.e. a program linked with the Library, be allowed to relink.

      Linking a program dynamically is usually the easiest way to comply with this stipulation. However, there are sometimes practical or logistical problems which make it difficult to comply with this requirement.

      We have taken the position that static linking is functionally equivalent to dynamic linking, and we're not really denying the recipient of a statically linked program any source code he or she wouldn't be able to obtain otherwise, as long as the program is linked with an unmodified copy of the Library.

      Static linking with a modified copy of the Library, however, would deny the community the benefit of these modifications, as these modifications would now be locked up inside a closed binary executable, so therefore we must insist on the original GNU Lesser General Public License when the Library has been modified.

      • Item a. says we can not make any statements about anyone else's code; if your application must use other libraries (jpeg, png, tiff, glibc, and so on), then you must observe the licenses of these other libraries.
      • Item b. clarifies that when we're talking about derived works, we're not talking about making some minor changes to Makefiles or configuration scripts which are often needed to make the code compile on a particular platform or compiler.
      • Item c. requires you to identify your program as using the FOX library. With static linking, there would be no way for a normal user to tell otherwise. We request that you include the given statement, and preferably a version number also. The motivation is two-fold:

        • A certain amount of publicity for the FOX Library :-).
        • Some way for recipients of your program to verify that the distribution was made according to the FOX License. This might appease some license-vigilantes.

      • Item d. aims to differentiate between the C++ programmer's interpretation of deriving (or subclassing), and the legal concept of making a derived work. When you're subclassing your own class from an existing FOX widget or other object, you're not making any changes to the source text of the FOX Library itself, and hence this cannot be interpreted as a derivate work in the legal sense.

    • Point 3. says that if you are unwilling or unable to meet these demands, then you can always distribute your program under the original GNU Lesser General Public License.

    This concludes our remarks on the License revision; please feel free to contact me if you have additional questions. The rationale section will likely be expanded when there are still questions left unanswered.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/goals.html0000664000175000017500000002756112130340076012101 00000000000000 Goals and Approach
Goals and Approach [Remove Frame]

Goals

    Developing a single application for multiple platforms is a difficult task.  The most significant issue is the need for a clean solution for developing Graphical User Interfaces [GUI's].   FOX aims to address this by providing a single GUI library that can run on different computer hardware and operating system environments.  The benefits to application vendors and developers are clear:
     
    1. Development effort to support multiple environments is substantially reduced.  After development, your FOX based application is only a compile away from running on other operating systems.  When multiple hardware and software combinations are required by customers operating in a heterogeneous environment, using a single GUI system such as FOX is clearly the most cost-effective method to achieve the goal.

    2.  
    3. Availability of your software on other platforms will engender additional revenues.   Without the necessity of additional development  work, the cost of  which would have to be amortized over the number of sales, additional revenues can be engendered by having your software be available on multiple hardware and software environments.  Software development is a costly undertaking; because of this, software vendors typically limit the number of platforms to a small subset of the platforms being used by all customers, effectively leaving certain customers in the dark.  FOX allows applications to be developed on one platform, then simply recompile the application on a number of other hardware/software systems.  Because the cost of doing so is negligible, this approach will be able to generate positive cashflow even with low sales volumes.

    4.  
    5. Captive audience.  If the application you're developing is available on all platforms, you may be able to create a captive customer base on hardware/software systems where your competitor is absent; you may in fact even be able to charge premium prices.  Using the additional revenues derived from these customers, your product will be able to derive a steady addional revenue stream which will allow you to compete more aggressively against your single-platform competitor.

    6.  
    7. Higher Quality. For programmers, the benefits of multi-platform development v.s. single platform development are the additional confidence and code quality that compiling under different environments will give.  For example, I have compiled FOX on a number of different systems, and different compilers will discover different types of code bugs.  By compiling on all these different systems, FOX has gotten quite a bit better in the course of time.

    8. Control Your Destiny.  Programmers understand it as a matter of course that they need to continually work to track the changes in a system's API's.  But what if the system vendor is also your competitor?  In such a case, you will loose, sooner or later.  The FOX GUI Library provides a platform-independent escape hatch that relies only on core system facilities which can be expected to be present on any modern operating system.

Approach

    FOX attains the goal of platform independence by eliminating all  system dependencies from its public interfaces.  In fact, a typical FOX application may not even need to include any system-specific header files at all!  By not including e.g. X-Windows header files, applications can not even accidentally slip up and introduce platform dependencies. This strategy is also carried out inside FOX itself.  Thus, large parts of FOX are in fact defined entirely in FOX itself.  The only dependencies are concentrated in a few select base classes where this couldn't be avoided.

    The following salient points highlight some fundamental benefits of FOX vis-a-vis other purported platform independent toolkits:
     

    1. Eliminate all platform specific header files.  Applications should only include header files from FOX, and a few header files for such basic system services as opening files etc.

    2.  
    3. Internal Layering. FOX itself relies largely on FOX base classes, and therefore a large fraction of FOX itself is platform independent as well.

    4.  
    5. Rely only on low-level system facilities. FOX relies only on core system facilities, and does NOT wrap native GUI libraries or toolkits.  This has the following benefits:

    6.  
      • Identical behaviour. The behaviour will be close to identical on all systems, as the behaviour is completely controlled by the FOX implementation, rather than some underlying library.

      •  
      • Identical looks. FOX applications will look the same no matter what system you're running it on.

      •  
      • Ability to subclass.  Because FOX is written from the ground up in C++, and is NOT a C++ wrapper around some other legacy toolkit or library, FOX Controls may be subclassed and extended by application programmers.  Moreover, if these additions can be done by calling upon FOX built-in facilities, those additions will be platform independent also.

      •  
      • Higher Quality. It is a given in software development that those facilities which are most frequently used are the ones which are most stable.  Thus, by using core system facilities instead of higher-level transient API's, the impact of the underlying system's instability is minimized.  A chain is as strong as the weakest link, and while I can not control the quality of the links, I can minimize the number of them.

      •  
      • Higher Speed. Eliminating layers between FOX and the underlying system not only increases the application's quality, it will also make it faster, and reduce memory overhead.

      •  
      • Go to the Bedrock. FOX's core facilities needed from the target system are things like mouse/keyboard event handling, and basic graphics facilities such as drawing of lines and rectangles [and some other system facilities].  In most operating systems, these are fairly mature API's and not subject to much change.  If you want to build a big building, you need to go down to the solid bedrock.  This is what FOX does.

      •  
    7. FOX is extensible.  The FOX library is designed to be open-ended and extensible. What this means is that unlike other libraries which take the approach of wrapping legacy GUI toolkits, FOX may be extended with Custom Controls and Widgets which will set your application apart from the others.  Building Custom Controls is extremely easy in FOX, as it is essentially just a matter of C++ subclassing.

    8.  
    9. FOX is available under Library GNU Public License. Since FOX is distributed in source form under LGPL, you have the ability to make changes or extensions to FOX to suit your needs.  Having FOX inspected by 1000's of programmers all over the world will iron out any bugs it may have very quickly.  This process is already under way.

    I care a great deal about software quality; I imagine, so do you.  In the course of my programming life, I have ran into many situations where the bugs I needed to fix were not in my own code, but in someone else's, and of course I didn't have the source.  Thus, the quality of my own software was limited by the quality of someone else's.  Problem is, the developers of the libraries and software I depend on are frequently not motivated to make their software correct.

    This has made me a firm believer in the GPL or Open Source model of software development. FOX was started in part because I didn't want to explain to our customers that the reason X or Y didn't work was because of the broken software or libraries on their machine.  The only way one can create high-quality applications is to bring as much of the underlying system under one's control as possible.  Hence the Go to the Bedrock philosophy.

    FOX is not perfect.  But as the source code is available under LGPL,  it has the advantage that its imperfections can be addressed as soon as they are discovered.

Why Windows?

    Some people may argue that porting FOX to Windows ``helps'' Microsoft.  It doesn't.  Porting FOX to Windows does however help application vendors:- instead of subjugating to a proprietary lock-in GUI environment, they can now ship their application on a large variety of platforms, like LINUX, and this with little or no additional effort, and derive additional revenues.

    In addition, being distributed under LGPL, it lowers costs, and does not incur any license fees for distribution.   Being distributed under LGPL also has the concomittant benefit that a large number of people may inspect the source code, and spot its inevitable deficiencies; thus, more bugs are found and they are found more quickly.  Remember, the person which is the most motivated to fix a bug is the one bitten by it; under the Open Source development model, this person can actually localize, and possibly fix the bug himself, and contribute those changes to the library.

    Finally, I believe application developers will find the FOX library a more attractive alternative.  For a software developer, the FOX Library is far more easy to learn, and offers some unique benefits, such as tying Widgets [Controls] together with little effort, being able to subclass from existing Widgets to make custom ones, and last but not least the ability to modify FOX's source code itself if necessary.  FOX represents what I consider to be the ideal GUI Library; I wrote FOX to use it myself!

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/news.html0000664000175000017500000002356512130340076011750 00000000000000 News
News [Remove Frame]

March 21 - FOX STABLE 1.6.0

  • New FXExpression class to evaluate numerical expressions. Its fast as it compiles to easy to interpret byte-code. It also allows expressions with variable arguments, which can be named arbitrarily.
  • Fixed but in fxtoDos and fxfromDOS; the end-of-string is no longer accounted for in the length [but it is still added, for convenience].
  • Changed sleep() API of FXThread; it now has a single argument, the number of nanoseconds to sleep.
  • Added wakeat() API to FXThread. The wakeat() API sleeps till the given absolute time is reached. The time is expressed as a 64-bit long counting nanoseconds since Jan. 1, 1970.
  • Added time() API to FXThread. It returns nanoseconds since Jan. 1, 1970.
  • Internal timer calculations in FXApp now use FXThread::time() and so on.
  • FXCondition's wait() API now also waits a number of nanoseconds.
  • Fixed tooltip on FX7Segment widget.
  • Fixed document-comment in FXString.
  • Added update handlers for FXTable row/column selection.
  • Bug in fxrgbio fixed.
  • Warning in FXWindow fixed.
  • Added sample program for expression class.
  • fxsleep() is now deprecated. Please stop using it!

March 21 - FOX STABLE 1.4.32

  • Back-ported fixes for GCC 4.1 C++ Language Changes [Friend Injection].

February 10 - FOX STABLE 1.6.0 (Release Candidate 4)

  • Updated FXRealSpinner. New API setGranularity() allows the values to stay at "nice round numbers".
  • Logarithmic mode of FXRealSpinner also updated.
  • Updated FX4Splitter. In case only one panel is collapsed, panel besides it will stretch to fit.
  • Also fixed layout issue with FX4Splitter which inadvertently placed barsize worth of pixels on the side even if all but one panel was collapsed.
  • Update FX4Spliiter's default size computation based on which panels are collapsed; this has gotten a bit complex now.

February 6 - FOX STABLE 1.6.0 (Release Candidate 3)

  • Reconciled API inconsistencies between FXObjectList and FXArray.
  • Added mimeType constant to FX***Image and FX***Icon classes for drag and drop and clipboard support.
  • Added auto-repeat snapshot capability to shutterbug.
  • Added auto-renumbering option for row and column headers in FXTable.
  • Implemented no-navigation mode in FXFileDialog.
  • Extra option for compression quality added to FXJPGImage and FXJPGIcon.
  • Added missing FXAPI to codec declarations.
  • Block generation of some callback messages if message is 0.
  • Improved fxbmpio implementation by directly using FXStream's primitive types.
  • Fixed issue with FXStat::touched().
  • Added bunch of missing API's to FXTable to control row and column header appearance.
  • Added ComboBox table item to enter a choice among a number of strings.
  • Added FXExpression which contains a function to evaluate expression.
  • Added Control-click mode to FXSpinner and FXRealSpinner.
  • Adie shows number of rows in status bar instead of byte count.
  • Wheel support in FXOptionMenu.
  • The setValue() API in FXRuler now has value relative to document position.
  • The setArrowPosY() and setArrowPosY() APIs in FXRulerView also relative to document position.

December 19 - FOX STABLE 1.6.0 (Release Candidate 2)

  • Added FXRulerView widget. The ruler view coordinates the scroll bars and rulers to automatically adjust to the stated document dimensions and margin settings for a document- oriented workview. It is intended as a base class for an applications document drawing framework.
  • Added FILELIST_NO_PARENT option to FXFileList to suppress '.' and '..' display in directory lists.
  • Added extra field in FILETYPES binding for "change directory" and "run in terminal" flags.
  • Optimized FXText continuous wrap mode layout update when using fixed-pitch fonts; this frequent scenario is quite a bit faster now; also greatly simplified layout handling in FXText.
  • Fixed layout issues with LAYOUT_FIX_X and LAYOUT_FIX_Y in FXPacker, FXTopWindow, FXGroupBox, FXHorizontalFrame, and FXVerticalFrame widgets.
  • Updated FXArray implementation; many API's added, a few dropped to so as to require no insert- or extract operators, or equality operators, on the contained items.
  • Updated FXVec{2,3,4}{d,f} classes; changed many friend functions to members, added explicit declarations for remaining friend functions in preparation for GCC 4.1 C++-language-change.
  • Small changes to FXQuat{d,f}. Some friend functions have become member functions.
  • Updated xinc.h to accomodate broken prototypes on older unix machines with respect to input method support.
  • Also simplified FXText layout logic.
  • Fixed tons of warnings on SGI, HPUX, Solaris, OSF1, and Windows builds.
  • Split FXComposeContext creation from construction. This is necessary as input method editor server may come and go.
  • Updated FXHash class with a few additional API's to make it easier to look over all contents in the table.
  • Added clearElms() API to FXElement.h.
  • Fixed FXVisual getNumGreen() and getNumBlue() access functions.
  • Expunged a number of FXbool in favor of bool.
  • Speeded up fxloadBMP(), fxsaveBMP(), fxloadICO() and fxsaveICO() functions through use of byte-swapping capability of FXStream.
  • Fixed typo in FXDebugTarget.
  • Fixed problem in FXFile::removeFiles().
  • Removed tons of warnings on Solaris builds.
  • Turned off XIM by default until it works across the board.

November 29 - FOX STABLE 1.4.26

  • Fixed SUN Solaris compile issue with threads.
  • Missing fxcheckTIF(), fxcheckPNG(), fxcheckJPG() declarations if TIF, PNG, and JPEG support is stubbed out.

November 14 - FOX STABLE 1.4.24

  • Fixed small issue in FXVec4{d,f} distance() routine.

November 9 - FOX STABLE 1.4.23

  • Fixed compile issue with new GetOwnModuleHandle() function.
  • Delete thread local storage key upon global destructor in FXThread.

Older News

Older news...

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/timers.html0000664000175000017500000003673112130340076012276 00000000000000 Documentation: Timers, Signals and Input Messages
Documentation: Timers, Signals and Input Messages [Remove Frame]

    Most messages your application will receive are generated from FOX Widgets, such as buttons, sliders, and other controls.  However, FOX also provides some messages which are generated from other sources.

    There are four types of such messages: Timers, Chores, Signals, and Inputs.

Timer Messages

    Timer messages are used so your program can receive a message after some specified interval has elapsed. This can be very useful, for example for performing an animation of some kind. Like all messages, timer messages are handled by specifying a target object which is to handle the message.  When the specified time has elapsed, the object will receive a message of the type SEL_TIMEOUT,  with the message ID being the one which was registered at the beginning of the time interval. The length of the time interval is expressed in milliseconds, and the interval starts at the time the callback message was registered.  The message callback to the target object will be when the interval has expired.

    Here's how you would  program a message map entry to catch a timer message in a target object of type MyObject:

    // Message map entry of "object"
    FXDEFMAP(MyObject) MyObjectMap[]={
        FXMAPFUNC(SEL_TIMEOUT,MyObject::ID_ANIMATIONSTEP,MyObject::onAnimationStep),
      ...
    };
    
    

    A timer may be registered with a specific target object and message-id identifying the object and method to be invoked on that object when the timer expires. An optional user-data pointer may be passed which is made available to the message handler when the timer message is invoked. This can be used by the handler to e.g. determine what to do. To register a timer message, you would call the function FXApp::addTimeout(), as follows:

    // Register Timer callback message for 1000 milliseconds
    MyObject* object;
    void *userdata;
    app->addTimeout(object,ID_ANIMATIONSTEP,1000,userdata);
    
    If a timer with this particular target and message combination already exists, the interval is reset to the new time.

    Timers can be removed or unregistered at any time, by calling FXApp::removeTimeout() with same target and message-id with which it was registered previously:

    // Unregister Timer callback message
    removeTimeout(object,ID_ANIMATIONSTEP);
    

    It is OK to call removeTimeout() on a timer that has already fired. Timers in FOX are fired only once, not repeatedly; thus, to do animations the timer must be reset each time it expires, as is done below:

    // Receive a Timer callback
    long MyObject::onAnimationStep(FXObject*,FXSelector,void* ptr){
      if(continueToAnimate){
      
        // Do something ...
      
        // Restart timer for another interval, passing the user data for next time
        app->addTimeout(object,ID_ANIMATIONSTEP,1000,ptr);
        }
      return 1;
      }
      
    

    It is OK to call FXApp::removeTimeout() even when the timer has already fired. A typical scenario used in FOX programs is to remove any timers that may be outstanding in the destructor of the target.
    Since a timer is uniquely identified by the target and message-id, a class using timers does not need to bother with bookkeeping issues like keeping track of which timers are still in use. This is very convenient in destructors:

    // Destructor: just remove the timer, regarless of whether it was set
    MyObject::~MyObject(){
      removeTimeout(object,ID_ANIMATIONSTEP);
      }
    

    Which makes for much cleaner code.

    Timers are fired when the application returns to the event loop. In other words, handlers may be invoked a bit later than specified by the timer interval. To maintain smooth animation sequences, you might want to call gettimeofday() or some equivalent function so as to decrease the next timer interval in the sequence a little bit to correct for this effect, particularly if some of your applications are CPU intensive.

Chore Messages

    Chore messages are messages which are delivered to their target object when the application is about to block for events.  They are used for background tasks which are to be performed when no other, more urgent tasks need to be performed.  You can use chores for housekeeping tasks in your application, or  perhaps for animations.  A chore will fire as soon as the event stream is exhausted and there is nothing else for the application to do, this is why it is also sometimes referred to as idle processing.

    When the chore message is fired, your object will receive a message of the type SEL_CHORE, with the message ID being the one which was registered.  To intercept this message, here's how you would program your message map:

    FXDEFMAP(MyObject) MyObjectMap[]={
      FXMAPFUNC(SEL_CHORE,MyObject::ID_IDLETASK,MyObject::onIdleTask),
      ...
      };
    

    As you see, it is very similar to timer callback processing.  Setting or registering a chore callback message is similar as well, and is done by calling FXApp::addChore() as shown below:

    // Register Chore callback message
    MyObject* object;
    void *userdata;
    app->addChore(object,ID_ANIMATIONSTEP,userdata);
    

    Chores can be unregistered at any time prior to being fired, by calling FXApp::removeChore() with the same target and message-id as was used to register it in FXApp::addChore():

    // Unregister Chore callback message
    app->removeChore(object,ID_ANIMATIONSTEP);
    

    Like timers, it is OK to remove chores that have already fired. Thus, classes which are receiving chore messages can remove them in the destructor, regardless of whether they were set or not. This can substantially simplify book keeping.

    Some notes:

    • Some computer graphics books describe using Motif work-proc's to perform delayed drawing for complicated 3D graphics. While FOX's Chores are indeed equivalent to Motif's work-proc's, this is unnecessary, as ALL paint operations in the FOX toolkit are already delayed.
    • Repeatedly resetting the chore callback will mean that your application will never yield the CPU, because there will always be a chore ready to execute prior to blocking for event input.
    • The GUI update and the Chore processing are interleaved, so that each time through the event loop, at least one GUI update callback and one Chore are always being executed. This means however, that if a Chore takes a long time, the GUI update process itself will also proceed much slower, as it will proceed in lock-step with the Chore processing.

Signal Messages

    Signal messages are generated when certain asynchronous events happen.  On most systems, these events are generated in the form of POSIX signals.  The POSIX signal facility is available on most systems to which FOX has been ported, although  non-POSIX [e.g. BSD) signals should work also.

    You can use Signal messages to allow FOX objects to receive signals and process them.  For example, you could  register a signal handler for SIGINT, so that an application may be closed down properly when the user hits ^C on the controlling terminal.  Another use might be to register a handler to catch the SIGFPE during a computation, so a warning panel can be popped for a divide by zero, and perhaps gracefully save the user's data rather than core dumping.

    When a Signal message is sent, your target object will receive a message of the type SEL_SIGNAL with the ID being the one specified when the callback message was registered:

    // Message map entry of "object"
    FXDEFMAP(MyObject) MyObjectMap[]={
      FXMAPFUNC(SEL_SIGNAL,MyObject::ID_INTERRUPT,MyObject::onCleanUpAndQuit),
      ...
      };
    

    A signal handler can be added by calling FXApp::addSignal().  There are two methods to deliver a signal to the application: synchronously, and asynchronously (immediately).

    Synchronous or non-immediatesignals are held until the application returns to the event loop, and then dispatched to the application.  Thus, in most cases, the normal flow of computation in the application will not be interrupted, and your signal callback message handler can assume that all data structures are in a consistent state.    Relatively harmless signals such as SIGINT are best handled synchronously.

    Asynchronous or immediate signals are dispatched to the target object immediately.  Since the regular processing of your application may have been interrupted by the signal, you will have to exercise extreme caution in the handler, as data structures may be partically complete.  The immediate signal handlers are best reserved for last-ditch efforts, such as cleaning up after a SIGSEGV or SIGBUS, when a grave error has occured but there may be a chance to perhaps recover some of the user's data.

    // Register Signal callback message
    app->addSignal(SIGINT,myobject,ID_INTERRUPT,FALSE,flags);
    

    The flags are set as for POSIX signal handling facilities, pleace confer your man pages for sigaction(2).
    To remove the signal handler callback message and restore the default signal handling action, you can call FXApp::removeSignal() as follows:

    // Unregister Signal callback message
    app->removeSignal(SIGINT);
    

Input Messages

    Input messages allow your programs to receive inputs from other sources than the GUI.  Input messages can for example be used to watch sockets, pipes, and a host of other synchronization objects [if available on your machine].

    Writing networked applications, such as e.g. a chat program, involves watching inputs from a number of different sources.  You could have your program continuously check all these inputs for activity in a timer callback, but it is far more efficient to register an input source and yield the CPU until there is something going on.

    Fortunately, most operating systems provide such a facility, and FOX can take advantage of this:

    • On UNIX, the select() system call is used.  The select mechanism allow a group of file descriptors representing sockets, pipes, and [where supported] asynchronous files to be watched for activity.  In fact, the connection to the display, i.e. the GUI is just one of the file descriptors that can be watched.  Please consult your UNIX select(2) man pages for more information about this system call.
    • On WIndows NT, the MsgWaitForMultipleObjects() system call is used.  This system call waits for GUI messages, as well as any number of synchronization objects, such as asynchronous files, sockets, pipes, event objects, mutexes, and even directories.  More information about this can be found on the Microsoft Developer Network CD's, or on their on-line version of MSDN.

    To register a callback message for an input source, you can call FXApp::addInput().  The callback message will remain registered even even after it has fired, unlike for Timers and Chores which are automatically removed after being fired once.

    When a synchronization object becomes signaled, a message of the type SEL_IO_READ, SEL_IO_WRITE, or SEL_IO_EXCEPT will be sent to the target object, with the ID being the one specified in addInput().  You can intercept these messages as follows:

    // Message map entry of "object"
    FXDEFMAP(MyObject) MyObjectMap[]={
      FXMAPFUNC(SEL_IO_READ,MyObject::ID_ACCEPT,MyObject::onAcceptConnectionFromTheNet),
      FXMAPFUNC(SEL_IO_READ,MyObject::ID_SOCKET,MyObject::onReceivedInputFromTheNet),
      FXMAPFUNC(SEL_IO_WRITE,MyObject::ID_SOCKET,MyObject::onSendOutputToTheNet),
      FXMAPFUNC(SEL_IO_EXCEPT,MyObject::ID_SOCKET,MyObject::onDealWithExcept),
      ...
      };
    

    In this example, a server type application may be creating a socket (socket(2)), and listen for incoming connections.  When an incoming connection is received the callback handler onAcceptConnectionFromTheNet() presumably verifies the request and calls accept (accept(2))  and registers another handler to deal with incoming or outgoing data, and exceptional conditions.

    You can register a input handler by calling FXApp::addInput().

    // Accept the connection
    socket=accept(...);
    
    // Register input callback message
    app->addInput(socket,INPUT_READ|INPUT_WRITE|INPUT_EXCEPT,myobject,ID_SOCKET);
    

     

    Passing INPUT_READ|INPUT_WRITE|INPUT_EXCEPT will register the same callback message handler ID for all three types of I/O activities.
    To remove a callback message handler, you can call FXApp::removeInput() as follows:

    // Unregister input callback message
    app->removeInput(socket,INPUT_WRITE);
    

    This will remove the callback message ID for I/O output.  It is usually a good idea for output, because the file descriptor will remain signaled as long as there is buffering to accept more outgoing data.
    You would add the INPUT_WRITE back only when buffers get full [when the other party is tardy processing the data you're sending, lets say].

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/doxygen.cfg0000664000175000017500000013251712130340076012242 00000000000000# Doxyfile 1.3.7 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "FOX C++ GUI TOOLKIT Reference" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 1.5 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 2 levels of 10 sub-directories under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of source # files, where putting all generated files in the same directory would otherwise # cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, # Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en # (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese, # Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = NO # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is used # as the annotated text. Otherwise, the brief description is used as-is. If left # blank, the following values are used ("$name" is automatically replaced with the # name of the entity): "The $name class" "The $name widget" "The $name file" # "is" "provides" "specifies" "contains" "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited # members of a class in the documentation of that class as if those members were # ordinary class members. Constructors, destructors and assignment operators of # the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 2 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = NO #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. WARN_FORMAT = # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../include # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = xincs.h \ fxkeys.h \ fx.h # The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories # that are symbolic links (a Unix filesystem feature) are excluded from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = ./filter.pl # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = FX #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = ./ref # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = header.html # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = page.css # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = YES # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 1 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = FXAPI= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse the # parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. Note that this # option is superseded by the HAVE_DOT option below. This is only a fallback. It is # recommended to install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found on the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes that # lay further from the root node will be omitted. Note that setting this option to # 1 or 2 may greatly reduce the computation time needed for large code bases. Also # note that a graph may be further truncated if the graph's image dimensions are # not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). # If 0 is used for the depth value (the default), the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO fox-1.6.49/doc/page.css0000644000175000017500000000210011637250333011517 00000000000000BODY { font-size:10pt; font-family:arial,verdana,sans-serif; } th { font-size:10pt; font-family:arial,verdana,sans-serif; } td { font-size:10pt; font-family:arial,verdana,sans-serif; } p { margin-top:1em; margin-bottom:1em; padding:0px; } pre { border-right: #646464 1px solid; padding-right: 0.5em; border-top: #646464 1px solid; padding-top: 0.5em; border-left: #646464 1px solid; padding-left: 0.5em; border-bottom: #646464 1px solid; padding-bottom: 0.5em; margin-left: 1em; margin-right: 2em; white-space: pre; background-color: #e6e6e6; color: black; wrap:yes; } #HEADLINE { font-size:10pt; font-family:arial,verdana,sans-serif; } A { color:#993300; font-size:10pt; font-family:arial,verdana,sans-serif; text-decoration:none; } A:hover { color:#404040; font-size:10pt; font-family:arial,verdana,sans-serif; text-decoration:none; } div.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } span.comment { color:green; } span.keyword { color:red; } span.keywordtype { color:red; } span.preprocessor { color:blue; } fox-1.6.49/doc/consulting.html0000664000175000017500000001247212130340076013154 00000000000000 Consulting
Consulting Services [Remove Frame]

    I now offer consulting services in various areas of technical computing, with an emphasis on user interfacing, computer graphics, data visualization, programming language parsing, and geometric and numerical algorithms development.

FOX User Interface Development

FOX is a multi-platform toolkit for graphical user interfaces to applications. By using FOX for the user interface of your application, your application can, in most cases, be ported across several platforms by a simple recompile.

Since FOX uses C++ for its implementation, it can be interfaced easily to existing libraries and applications written in C++, C, and FORTRAN as well as many other programming languages.

Therefore large, existing software packages may be given a modern user interface without performing a complete code rewrite. Moreover, through the FOX toolkit, such applications are then simultaneously available on Microsoft Windows as well as Linux and other UNIX systems, such as workstations from HP, SGI, SUN, or IBM.

The FOX toolkit library is freely available, without fees or royalties, subject to the Lesser GPL License. However, in the course of incorporating the library into your application, you may find that you need various additional capabilities unique to your particular application, such as:

  • Custom, one-of-a-kind widgets which set your FOX application apart.

  • Building specialized extensions to FOX toolkit or interfacing FOX toolkit with other software packages.

  • Adding new features to the FOX library itself.

  • Porting applications to new platforms.

  • Aiding in porting applications to the FOX Toolkit.

Technical and Engineering Software

Many Engineering Software companies have chosen to adopt FOX because it works on big 64-bit workstations. Software for these machines was historically developed using the Motif user interface. FOX has turned out to be a great replacement for Motif: while using many of the same concepts of layout managers, it is much more succinct and offers a larger, and more easily expandable, set of controls.

As a former Motif programmer myself, I estimate that it takes between one tenth to one twentieth the amount of code to construct user interfaces in FOX as compared to Motif.

Moreover, FOX offers finer control over layout placements and makes embedding icons in the user interface much simpler. Of course, it works on Windows, too...

A key feature in most Engineering Software is the ability to perform OpenGL drawing. FOX offers a number of easy to use Widgets for this, allowing designers to draw geometry on the screen without having to learn about OpenGL camera and lighting models.

As an example, look at the CFD (Computational Fluid Dynamics) and FEM (Finite Element Method) visualization and analysis code which was developed by CFD Research Corp. using the FOX Library. The image shows particle traces through a multi-zone, unstructured grid of an air flow problem around our favorite mascot.

I have been active in computer graphics and scientific data visualization software for many years, working on all aspects, ranging from writing special-purpose mini-programming languages to development of geometric and numerical algorithms.

Contact Information


Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/Makefile.am0000664000175000017500000000202012130340076012121 00000000000000## Process this file with automake to produce Makefile.in htmldir = $(datadir)/doc/@PACKAGE@-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@/html SUBDIRS = art screenshots # Human-written HTML files HTML_FILES = \ adie.html \ app.html \ calc.html \ consulting.html \ clipboard.html \ datatarget.html \ doc.html \ download.html \ doxygen.cfg \ draganddrop.html \ faq.html \ filefuncs.html \ filter.pl \ focus.html \ fonts.html \ footer.html \ foreword.html \ fox.html \ goals.html \ gpgkey.html \ guiupdate.html \ header.html \ home.html \ icons.html \ install.html \ introduction.html \ layout.html \ license.html \ menu.css \ menu.html \ messages.html \ news.html \ news1.html \ news2.html \ news3.html \ page.css \ pathfinder.html \ projects.html \ references.html \ registry.html \ rex.html \ screenshots.html \ serialization.html \ styles.css \ timers.html \ top.html \ widgets.html \ win32.html \ window.html \ xml.html docs: doxygen doxygen.cfg # Complete documentation package html_DATA = $(HTML_FILES) EXTRA_DIST = $(html_DATA) fox-1.6.49/doc/references.html0000664000175000017500000002517012130340076013107 00000000000000 References
References [Remove Frame]

References

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/draganddrop.html0000664000175000017500000006435212130340076013260 00000000000000 Documentation: FOX Drag and Drop Facilities
Documentation: FOX Drag and Drop Facilities [Remove Frame]

    Drag and Drop refers to the facility in FOX that allows entities to be dragged not just from within one part of an application to another, but also between applications.  The FOX Drag And Drop implementation is based on the  XDND Protocol  developed by John Lindal.
    FOX supports the latest version (XDND 5)  of this protocol.  On Windows, FOX uses a very similar protocol.
    As FOX provides fairly high-level API's to access these features, it is actually fairly easy to instrument your programs with a Drag & Drop facility.

    For better understanding of how this works, it is important to define some terminology first:

    • A Drag Source is a FOX Widget capable of sourcing one or more types of drag and drop data or Drag Types.
    • A Drop Target is a FOX Widget capable of accepting one or more types of Drag Types.
    • A Drag Type is an abstract handle to a type of drag and drop data.
    • A Drag Action determines what happens when a drop takes place; examples of drag actions are copy, move, and link.

    As mentioned before, the Drag Source and the Drop Target may or may not be in the same application.  In fact, their corresponding applications could even be running on different machines.  We assume, of course, that both drag source and drop target are shown on the same display.

Registering Drag Types

    In order to communicate a particular data structure across applications, both partners need to first register a Drag Type.  The Drag Type is created by calling the function:

    FXDragType FXApp::registerDragType(const FXString& name) const;

    The registerDragType() function registers a new Drag Type "name" with the application's display, and returns an abstract handle to the Drag Type.  The returned handle is used in all subsequent Drag and Drop operations.  The Drag Type handle is unique for the display, that is, each application subsequently registering the same drag type name will receive the same handle.  Obviously, the display must have been already opened before calling this function.

    It is strongly suggested that if your application intends to communicate with others, the Drag Type Names you use should be those of the corresponding MIME types.
    This guarantees everybody else's applications can make sense of drag data originating in your application [and vice versa].  Otherwise, Drag Type Names can be any ASCII string sequence.

    A corresponding function:

    FXString FXApp::getDragTypeName(FXDragType type) const;

    Will return the Drag Type Name, given the Drag Type.  You may need to use this in case your application receives a drop of an unknown type, and you need to decide what to do with it.

Becoming A Drop Target

    In order to be able to receive drops, a FOX Widget first needs to make itself a Drop Target.  It does this by calling:

    virtual void FXWindow::dropEnable();

    To cancel drop-ability, use a function:

    virtual void FXWindow::dropDisable();

    A Widget will not receive drag and drop messages unless it has been enabled as a drop target with dropEnable(). Note that the Widget may receive drag and drop messages with drop-data it does not understand, and thus it should only accept drops of the proper type.

Messages to the Drop Target

    FOX Widgets which have have been enabled for Drop Targets may receive a number of messages during a drag-and-drop operation.  To give a user feedback about what is going on, I suggest that the Widget somehow change its visual appearance based on receiving these messages.

    For example, a Folder Icon, normally shown in the closed state, may be changed to the opened state to indicate that a drop is pending and will be accepted if performed.  Another method [which is usually performed by the Drag Source Widget, see later], is to change the shape of the cursor to a STOP sign when the drop will NOT be accepted; one could also use a combination of the two methods.

    Drop Target Widgets may receive the following messages:

    • SEL_DND_ENTER.  This message is received when the cursor first enters the Widget.  At this point, the Widget may inspect the Drag Types available, and determine whether or not to accept a drop.  If necessary, the Widget could even tentatively request the Drop Data, and inspect the data itself.  It must be prepared to throw the data away again, however.
    • SEL_DND_LEAVE.  This message is received when the cursor leaves the Widget.  If the Widget did not receive a SEL_DND_DROP before this message, it must release the data, if it has requested it.
    • SEL_DND_DROP.  The Widget receives this message when an actual drop takes place.  Typically, the Widget requests the Drop Data at this point.
    • SEL_DND_MOTION.  This message indicates to the Widget the exact position of the cursor (and thus the Drop Point).  Simple Widgets may not care about this, but more complicated Widgets will probably use the position to determine the exact action to take.  For example, depending on position, the Widget may or may not accept certain Drop Types.

    At any point between receiving SEL_DND_ENTER and SEL_DND_LEAVE /SEL_DND_DROP, the Drop Target may call the following functions to inquire about the type of the data being dragged, the data itself,  and the drag-action being performed.  Based on this information, it can feed back information to the Drag Source to indicate whether or not it will accept the data:

    void FXWindow::acceptDrop(FXDragAction action=DRAG_ACCEPT);

    To accept or reject a drop, the Widget calls acceptDrop() with an argument specifying the Drag Action suggested by the Drop Target.  The Widget can call this any number of times; however, the last value will be the one reported to the Drag Source Widget.  For acceptDrop(), the following values are valid:

    • DRAG_REJECT. This indicates that the Drop Target will NOT accept any type of Drag Action.
    • DRAG_ACCEPT. The Drop Target chooses to accept the drop, no matter what the Drag Action is.  The suggested Drag Action is the same as the one supplied by the Drag Source.
    • DRAG_COPY. The Drop Target accepts the drop, but suggests that the Drag Action be a copy.
    • DRAG_MOVE. The Drop Target accepts the drop and suggests that the Drag Action be a move.
    • DRAG_LINK. The Drop Target accepts the drop and suggests that the Drag Action be a link.

    Other Drag Actions may be supported in the future.  The Drop Target can find out the Drag Action by calling the following function:

    FXDragAction FXWindow::inquireDNDAction() const;

    The Drag Source should change the cursor to reflect the Drag Action in effect; if necessary, the cursor should change to reflect the Drag Action suggested by the Drop Target.

    Normally, a Widget may get many, many SEL_DND_MOTION messages.  In order to cut down on the traffic, a Drop Target Widget may indicate a rectangle and whether or not it wants further updates while the cursor is inside this rectangle by calling:

    void FXWindow::setDragRectangle(FXint x,FXint y,FXint w,FXint h,FXbool wantupdates=TRUE);

    Widgets which do not care where the drop takes place may call setDragRectangle(0,0,width,height,FALSE), which will cause the Drag Source to send no further updates while the cursor is inside the Widget.

    void FXWindow::clearDragRectangle();

    Clearly, this is the opposite of setDragRectangle().  It is equivalent to setDragRectangle(0,0,0,0,TRUE);

    FXbool FXWindow::inquireDNDTypes(FXDNDOrigin origin,const FXDragType*& types,FXuint& numtypes);
    FXbool FXWindow::offeredDNDType(FXDNDOrigin origin,FXDragType type);

    The first call yields an array of Drag Types currently available from the Drag Source.  The list is read-only, and should NOT be freed.  The Widget should NOT keep pointers to this list, as the list ceases to exist after SEL_DND_LEAVE.  The second call tests to see if a certain Drag Type is being offered by the Drag Source.

    If the Drag Type information is not enough, the Drop Target may have to inquire the actual data from the Drag Source and inspect it.  It does this by calling:

    FXbool FXWindow::getDNDData(FXDNDOrigin origin,FXDragType type,FXuchar*& data,FXuint& size);

    This call acquires the Drag Type type from the Drag Source.  Upon return, data points to an array of bytes containing the Drop Data, and size is set to the number of bytes in the array.  The array is now owned by the Drop Target Widget, and should be freed with the FXFREE() macro.  The corresponding function in the Drag Source is describes elsewhere.  The parameter origin should be set to FROM_DRAGNDROP.

Becoming a Drag Source

    Making a Widget a Drag Source is comparatively easy.  The transaction begins when the mouse button goes down.  The Widget will need to call grab() to capture the mouse to the Widget, so that all future mouse events will be reported to the Widget, even if they occur outside of the Widget. Next, the Widget will call:

    FXbool FXWindow::beginDrag(const FXDragType *types,FXuint numtypes);

    to start a drag-operation.  The arguments to beginDrag() describe the list of types [which must have been registered previously] which are being offered.  The Drag Source must be willing to furnish each of these types when requested by the Drop Target.  The beginDrag() function returns FALSE if it failed to initiate a drag operation; the application should not proceed with dragging in this case.

    Upon each mouse movement, the Drag Source needs to indicate the new mouse position to the system; it also notifies the Drop Target of the new Drag Action.  It does this by calling the function:

    FXbool FXWindow::handleDrag(FXint x,FXint y,FXDragAction action=DRAG_COPY);

    The handleDrag() function determines the Widget under the cursor, and issues a SEL_DND_ENTER when it first enters a Widget, a SEL_DND_LEAVE when it leaves the Widget, and a SEL_DND_MOTION when the cursor simply has moved over the Widget [subject to the drag rectangle set by the Drop Target].  It will not send any messages if the widget under the cursor has not called dropEnable() first to enable drops on it.

    The handleDrag() function may return FALSE if it fails.  To find out if a Drag Source is in the middle of a drag operation, applications may call the following member function:

    FXbool FXWindow::isDragging() const;

    While the Drag Source is dragging, it may want to inquire whether the Drop Target's accepted or rejected a drop.  It does this by calling:

    FXDragAction FXWindow::didAccept() const;

    The function didAccept() simply returns DRAG_REJECT when the Drop Target would NOT accept the drop, and returns DRAG_COPY, DRAG_MOVE, DRAG_LINK if it did; the Drag Source should reflect the Drag Action returned by changing its cursor. For safety's sake, didAccept() will also returns DRAG_REJECT if the Drop Target has not called dropEnable(), or if the Drop Target fails to respond to any drag-and-drop messages.

    Applications may choose to change the cursor shape based on what didAccept() returned, as illustrated by the following code fragment:

    handleDrag(event->root_x,event->root_y);

    if(didAccept()!=DRAG_REJECT){
    setDragCursor(drop_ok_cursor);
    }
    else{
    setDragCursor(drop_not_ok_cursor);
    }

    The rationale is that even though Drop Targets may give a visual cue when a drop is OK, not all applications running on your system may be drag-and-drop aware;  changing the cursor also will give an additional clue.

    When the user releases the mouse button, the Widget needs to call ungrab() to release the mouse capture, and then calls:

      FXDragAction FXWindow::endDrag(FXbool drop=TRUE);

    This will cause a SEL_DND_DROP message to be sent to the Drop Target, if and only if:

    • The flag drop is TRUE.
    • The Drop Target has previously called acceptDrop().
    • The Drag Source has received status messages back from the Drop Target.

    Passing a flag drop allows the Drag Source to deny a drop even though the Drop Target may have accepted a drop.  The endDrag() function returns the action actually performed by the drop target.
    The XDND version 5 protocol returns the drag action performed by the target, since in processing the drop, the target may be unable to perform the requested action, perhaps due to some runtime error.  Returning the action actually performed allows the drag source to take the appropriate action.

Messages to the Drag Source

    During a drag operation, a drag source may receive one or more requests for the drag data. These requests take the form of a SEL_DND_REQUEST message sent to the owner of the drag data. When a drag source receives a request for its data, it should first inspect the requested drag type, which is found in the FXEvent's target member variable. If the drag source can supply its data in the requested drag type, it should then allocate an array (using the FXMALLOC macro) and stuff the data into it.

    The drag source then calls

      FXbool FXWindow::setDNDData(FXDNDOrigin origin,FXDragType type,FXuchar* data,FXuint size);

    To hand the array over to the system. At this point, ownership of the array passes to the system, and the drag source should not attempt to make any further references to this array. The origin parameter should be set to FROM_DRAGNDROP.

    The drop target may make a request for the drag data from the drag source by calling getDNDData(), described above.

Drag and Drop of FOX Objects

    The data exchange described above takes place using raw bytes.  In more realistic cases,  complicated data structures may have to be exchanges.  It is important to realize that:

    • The Drag Source and Drop Target may be different programs.  Thus, it is usually meaningless to exchange pointers to data structures.
    • The Drop Target and Drag Source may not only be different programs, but also may be programs running on different machines with different byte orders and different word lengths.

    FOX takes care of some of the latter troubles by furnishing special FOX primitive types, such as FXchar, FXshort, FXint and so on.  A FOX implementation will ALWAYS make sure these types have the same size, although byte order may still be reversed on some machines.

    More sophisticated data transfers can be accomplished using the FOX FXMemoryStream class.  The FXMemoryStream is a subclass of FXStream that serializes/deserializes data to/from a memory-buffer.  The FXStream classes also support byte swapping on the reader side, making it very convenient to exchange data between hererogeneous machines; moreover, the FOX Stream classes support serialization of FOX Objects.

    Thus, entire networks of objects may be serialized, transmitted to the drop site, and then deserialized.

    Example:

    Serialize into a buffer, then give the buffer to the DND system:
     

    FXMemoryStream str;
    FXuchar *buffer;
    FXuint size;
    FXObject *myobjectptr;        // Pointer to the FXObject-derived object we wish to transfer
    FXuchar endianness;

    endianness=FXStream::isLittleEndian();

    str.open(NULL,FXStreamSave);                                // The FXMemoryStream will create its own buffer
    str << endianness;
    str << myobjectptr;
    str.takeBuffer(buffer,size);                                // Take ownership of the buffer away from the FXMemoryStream
    str.close();
    setDNDData(dndtype,buffer,size);                            // Give the buffer to the DND system


    Take data from the DND system, then give the buffer to the Stream and deserialize from it:

    FXMemoryStream str;
    FXuchar *buffer;
    FXuint size;
    FXObject *myobjectptr;        // When done, this points to an FXObject-derived object
    FXuchar endianness;

    getDNDData(dndtype,buffer,size);                            // Take possesion of the buffer from the DND system

    str.open(buffer,size,FXStreamLoad);
    str >> endianness;
    str.swapBytes(endianness!=FXStream::isLittleEndian());      // Swap bytes in the receiver if necessary!!
    str >> myobjectptr;
    str.close();
    FXFREE(&buffer);
     

    As you see, this is a mighty fine way to transfer arbitrary objects between applications.  All you have to do is derive certain objects from the FXObject base class, then properly inplement the load() and save() member functions for that class, so that all object member data may be properly serialized or deserialized.  For more info, see the chapter on Serialization.

Tips and Hints: Moving Data Between Applications

    When data is being moved between applications, the Drop Target should perform the following sequence of operations:

    Acquire the dropped data, using getDNDData(), exactly the same as what it would do for a Copy Drag Action;

    Then do a getDNDData() with the Drag Type DELETE, which must have been previously registered with registerDragType("DELETE").

    The Drag Source will not supply any data when a request for the DELETE drag type is received; instead, knowing the data has been properly received by the Drop Target, it will delete the data instead.

    Thus, the getDNDData() call with Drag Type DELETE will yield a NULL data array pointer.

Tips and Hints: When to Copy and When to Move

    This is no hard and fast rule, but generally speaking when data are being dragged within the same window, the default Drag Action should default to DRAG_MOVE, whereas when dragging between windows, the Drag Action should default to DRAG_COPY.  These defaults can be overridden by holding down the Control-Key, which should force a DRAG_COPY, or the Shift-Key, which should force a DRAG_MOVE.  Holding down the Alt-Key should probably force a DRAG_LINK.

Tips and Hints: When to Auto-Scroll

    When dragging from within scrollable windows, no scrolling should take place while outside the window; instead, scrolling should happen only when the cursor is being moved very close to the window border.

Tips and Hints: Let Cursor Reflect the Action

    There are two major schools of thought; some people prefer to let animate or highlight the drop-site to indicate an impending accept or reject of a drop, whereas others change the cursor instead.  Apart from psychology, my take on this is do both:

    • Changing the cursor has the advantage that there is some feedback while moving over inert backgrounds.
    • Changing the drop site has the advantage that it is very clear where the dropped data will wind up, especially if drop sites may be very small on the screen.

    This reflects my view that in the software world, we can make our own rules;  we can diverge from the physical model of ``manipulating rigid objects'' if this is appropriate or gives the user a better handle on things.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/faq.html0000664000175000017500000027466212130340076011551 00000000000000 Frequently Asked Questions
Frequently Answered Questions [Remove Frame]

Questions

Why does FOX look so much like Windows?

    FOX looks much like Windows in part because of historical reasons, and in part because it is intentional. Having FOX look similar to Windows means the users of a FOX application will be able to bring to bear their prior experience on Windows, and therefore they will be able to be productive much quicker.
    But let there be no mistake about it:- for software developers, FOX looks very differently internally.

Has FOX been ported to the Apple Macintosh?

    Please refer to The fifthplanet Macintosh Wiki. Basically, if you have installed XFree or Apple's own X Server, FOX can be compiled and run on OS-X. Only a few environment variables need to be modified (the usual bunch, see INSTALL for more detailed information).

    A native port running on top of OS-X w/o the need of an X Server is possible. However, the author currently does not own a Macintosh, nor has access too one. Therefore, unless some hardware is donated to the FOX Project for this purpose, chances are small that a software port will happen any time soon, esp. since Apple's own X-Server already solves the problem.

Which Systems are supported by FOX?

    There are two main ports of FOX:- UNIX/X11 and MS-Windows. Specifically, FOX is known to work on the following systems:

    These are the systems we know about. Since FOX uses GNU autoconfigure, chances are good that most UNIX/X11 combinations can be made to work. If you're running FOX under a system not mentioned above, please drop me a line so we can add it to the list.

Is FOX `64-bit clean'?

    With the arrival of 64-bit PC's, this is a pertinent question. The answer is yes. FOX is currently being compiled on several 64-bit architectures, such as HP/Compaq/DEC Alpha, HP-PA, SUN UltraSparc, and SGI MIPS R10000. More recently, porting to Intel Itanium and AMD Opteron has been performed. We have reports from people who have compiled on Windows-XP 64.

    While coding of FOX itself has been prepared for the coming 64-bit era, the same may not be true for your own application code. A few guidelines:

    • Most systems (except Microsoft) follow the ILP32 vs LP64 model, i.e. in 32-bit mode integers, longs, and pointers are 32-bits, and in 64-bit mode longs and pointers become 64-bits while integers stay 32-bit. Microsoft seems to continue with long equal to 32-bit even for 64-bit CPU's.

      If you use the FOX types like FXlong and FXint the sizes are going to be typedef-ed properly according to the LP64 model.

    • On some 64-bit compilers, a double-cast may be needed for casting pointers to an int via long. For this purpose, FOX defines a signed and unsigned integer type whose size is big enough to fit a pointer.

      These types are called FXival and FXuval. Note that FXival and FXuval are defined to be the size of a pointer, and so these are not fixed-size types to be used for streaming!

      For portable code you will need to cast void* to FXint by way of FXival or FXuval, as in:

      intval=(FXint)(FXival)ptr;
      
      Conversely, its a good idea to cast from FXint to void* by way of FXival or FXuval to get predictable zero-extended or sign-extended results:
      ptr=(void*)(FXuval)intval;
      

    • You should use the FXint, FXlong, etc. types when serializing data using FXStream. The types FXint, FXlong, etc. are defined to be a certain size and are the same on all architectures; otherwise binary data will not be compatible between platforms.

    Of course all the usual caveats apply, like using sizeof() instead of hard-coded assumptions about sizes; the best practice of developing portable code is to develop it on a number different platforms from the very beginning.

How do I write portable code?

    FOX is a platform-independent toolkit (currently, it supports many architectures and compilers), but a few caveats still apply if your own code is going to have to be ported.
    A few guidelines which I found useful in my own development practices can make the process very painless:

    • Don't include any platform-dependent libraries (e.g. no "Windows.h" or "X11.h". Just your regular stdio, stdlib and so on (those are C/C++-language standard libraries, and pretty much the same on most machines except for some minor nitty gritty stuff.
    • Of course, you will use FOX, and while your own code isn't platform dependent, FOX itself is. So you *will* have to link your application with various platform-dependent libraries that FOX itself uses.
    • You can safely assume sizes of FXchar, FXshort, FXint, FXlong, FXfloat and FXdouble to be the same on all platforms. However, int, long, etc. are NOT guaranteed to be a certain size. This is important when saving loading binary data files (e.g. using FOX's FXStream class). Also, there is byte-order. This is also platform-dependent. FXStream allows for byte swapping during I/O. The symbol FOX_BIGENDIAN is set 1 on big-endian machines (e.g. SGI, PPC) and 0 for little-endian machines (Intel, Alpha).
    • To be 64-bit future-proof, you *must* use double-cast to- and from pointers. see above. Just to be sure.
    • Try avoid very sophisticated C++ features (this means most of STL). Code that does a lot of STL doesn't port one iota's worth, at best it compiles with thousands of warnings [some people are going to flame me for this, but its true!].
    • Use FOX macros like FXMALLOC(), FXFREE() and so on. They are implemented to behave EXACTLY the same on all systems (even though underlying malloc() and realloc() library functions don't always treat the corner cases properly.
    • Use FXTRACE(()) for debugging; use FXASSERT for asserts. Use fxwarning fxerror() and fxmessage() for messages to the console (on Windows, you don't have a console, and printf() will crash!!). These functions "do the right thing" on the various platforms.
    • Don't try to do your own filename manipulation routines. Use the functions in the FXFile namespace. These functions properly handle drive letters, Windows Uniform Naming Convention, and so on. They also know about forward and backward slashes and such stuff. Use the PATHSEP, ISPATHSEP etc. macros to check for path separation characters.
    • Do not assume characters are signed or unsigned; FXuchar is always unsigned, however, FXchar may be either.
    • When opening a binary file, don't forget fopen("name","rb") instead of fopen("name","r"). On UNIX there is no difference, but on Windows, forgetting the "b" will cause "\r\n" to be translated to "\n", corrupting the data stream.

Why do I get an `illegal icon specified' message when I change some Widget's icon?

    Basically, an Icon [Widget, Image, Font, etc] comprises a part which lives in your program [the client-side], and a part which lives in the X-Server or GDI subsystem [the server-side].

    The C++ CTOR only builds the part in the client side. The server side part of the Icon [Widget, Image, etc] is realized when you call create() on it. For convenience, all reachable resources may be created with a single call to FXApp::create(). The call to FXApp::create() traverses the entire Widget tree and creates all Windows, Icons, and other resources that are needed to realize that Widget tree on the screen.

    The reasons for all this are:

    • Since all FOX classes may be subclassed, it cannot be assumed that after an object's ctor has run that the object has been fully constructed; after all, you may have subclassed it.

    • It will also be important later on when the GUI itself will be subject to serialization. As we can not serialize server-resident resources, we need a two-step process of construction [via deserialization] and creation [from a single call to FXApp::create()].

    Because of this, when you construct an FXIcon later on, then you need to call FXIcon::create() manually, as the icon was not a part of the Widget tree at the time the Widget tree was first realized.

Compiling FOX as a DLL under VC++ gives me a unresolved external symbol?

    If you build a project under VC++ to compile a FOX application, do not forget to specify -DFOXDLL on the compiler command line. Without it, you will get an error like: error LNK2001: unresolved external symbol "public: static struct FXMetaClass const FXApp::metaClass" (?metaClass@FXApp@@2UFXMetaClass@@B). Or words to that effect.

    Of course, you can also build FOX as a static library, in which case there is no problem.

When do I call flush(), forceRefresh(), refresh() and update() after a change?

    Under normal circumstances, the display on the screen is kept up-to-date automatically. However, FOX uses a lazy screen refreshing technique. The lazy technique allows your callback routine to make lots of changes in the GUI, then update the screen in one fell swoop. This obviates the need that some other toolkits have for freeze/thaw API's.

    There are several aspects to this: repainting the screen, i.e. processing expose or repaint events, performing layout computations, and performing GUI updating.

    • Repaint Events are piled up until there are no further events to be processed. In fact, repaint events are not simply saved but are conglomerated into larger and larger rectangles, so as to minimize the number of times that repainting is actually done (it actually also minimizes the area which is repainted).

    • Layout Reconciliation is also delayed. No layout is performed until returning to the event loop, in fact. Like repainting, layout is delayed until no more events are available.

    • GUI Updating is also delayed until there are no more events in the queue.

    The order in which these are performed are repaints, layout, and gui-updates. Contrary to intuition, delaying the expensive operations such as repainting instead of doing them right away is actually faster.

    Sometimes, you want to force the display to refresh without returning from a callback; this can be effected with the following routines:

    • FXApp::flush() will flush all drawing commands to the display. In other words, it will cause all drawing commands to be executed eventually. Note that flush() is moderately expensive as it causes synchronization between the display and the program.

    • FXApp::forceRefresh() will perform a layout reconciliation, followed by a GUI update. Since this may lead to more expose events, you typically follow a call to forceRefresh() with a call to flush(). Note that forceRefresh() is a very expensive operation.

    • FXApp::refresh() is similar to forceRefresh() in that it causes a layout and a GUI update to be performed. The difference is that refresh() will not actually perform the operation but simply cause the system to perform layout/gui-update later, after returning to the event loop. The call to refresh() is very cheap.

    • FXWindow::update() marks the window, or part of the window as dirty. This causes the window to receive an expose event at some point in the future. The rectangles marked with update() as dirty may be conglomerated into a few big rectangles. No repainting is actually performed until returning to the event loop or calling flush(). Since no drawing is performed, a call to update() is fairly cheap.

    • FXWindow::repaint() performs the opposite of update(). It paints the window, or part of the window by issuing SEL_PAINT messages if necessary. It works by first pulls all outstanding expose events from the X server, compositing the dirty rectangles. Then, it processes all dirty rectangles pertaining to the given window; if a rectangle is passed, it only processes the dirty rectangles overlapping with the given rectangle. Note that repaint() should NOT be called while performing a painting operation as it would lead to multiple locks of the device context FXDCWindow.

    • FXApp::repaint(), does the same as FXWindow::repaint(), except FXApp::repaint() causes ALL windows to process their backlogged SEL_PAINT messages.

    • FXWindow::recalc() marks the widget, and all of its parents, as dirty, i.e. in need of layout. Under normal circumstances, layout is only called when the size of a widget has changed; however, there are often other reasons why layout is needed. In such cases, calling recalc() will ultimately cause a layout to happen also. The entire chain from the widget to its top most parent must be marked this way, otherwise (as there may have been no size changes), the layout process will stop. A few widgets will overload recalc() to cause additional layout computations to happen (e.g. computing content size inside a scrolled view of a list).

How does layout work, exactly?

    Automatic layout is a very usuful feature in FOX. It allows automatic placement of widgets in the desired arrangement without explicitly placing each widget in terms of position and size. Thus, changes in widget's contents, font, and language binding can be accomodated with ease.

    But automatic placement takes a bit of getting used to, especially for Windows developers who are not accustomed to the concept (many UNIX GUI systems such as Xt and Motif have similar layout facilities so UNIX programmers tend to be more familiar with the idea).

    Composite widgets may contain one or more child widgets. These child widgets could be simple controls, like Buttons, but also other Composite widgets. Thus, layout is inherently a recursive process.
    Layout of a widget tree is determined by the following:

    • The arrangement pattern. For example, a Matrix layout manager arranges the children in rows and columns; a HorizontalFrame arranges its children side by side, and a Packer arranges them against the sides of the interior.
    • The packing flags. A layout manager has certain flags which apply to the layout of all of its children. For example the flag PACK_UNIFORM_WIDTH causes each child to be made the same width.
    • The layout hints. Each child has certain layout flags which affect the way the layout manager places that child; an example is the LAYOUT_FIX_WIDTH flag which tells the layout manager of that child that the child wants to keep its initially assigned width instead of its minimum (default) width.
      Not all layout hints are observed by the layout manager; certain arrangements interpret certain hints, and ignore others. For instance the Switcher layout manager places all children on top of each other, and makes them all the same size.
    • Other information, such as the interior padding between the edges of the layout manager and its children, spacing between children, and other information like the number of rows and columns in a Matrix layout manager, or which child is on top in a Switcher layout manager, and so on.
    Layout is a recursive process, proceeding from the top down. A layout recalculation is needed under the following circumstances:
    • The widget's size has changed in response to position() or resize().
    • The widget has been marked as dirty by means of recalc().
    • In a few cases, layout() is called directly.
    Because layout involves a lot of calculations, its quite expensive; we therefore try to perform it as infrequently as possible, and to stop the layout recursion as soon as we can. The former is implemented by performing the layout only when there's nothing better to do, during idle time when there are no events demanding our immediate attention. The latter is done by stopping the recursion when we hit a widget that already has the right size and is not marked as dirty.
    This makes layout pretty fast (close to real-time when interactively resizing windows).

    Only a handful of API's are responsible for the whole layout process:

    • getDefaultWidth() and getDefaultHeight(). These API's measure the minimum size of the widget. For simple controls such as Buttons the implementation consists of simply adding up the size of the icon, caption, and surrounding borders.
      For layout managers however, it is more complex:- the size of the layout manager depends on the arrangement, and the size of the children, and needs to take into account the packing flags and layout hints as well.
    • getWidthForHeight() and getHeightForWidth(). These measure the width of a widget in terms of its height, and the height of a widget given its width, respectively. In order for getWidthForHeight() to work, the height has to be known in advance.
      Because of these restrictions, these functions are basically only called from top level windows, as top level windows are given a size directly by the user and therefore the required information is known.
    • position(). This API physcally moves a child's to its new location, and if the child's size was changed or the child was marked as dirty, recursively invokes layout() on the child.
    • layout(). This is the workhorse of the layout system. The typical implementation in a layout manager loops over all the children, applying each child's layout hints and default size as computed by getDefaultWidth() and getDefaultHeight(), and then placing each child accordingly by calling position(). Note that by calling position(), the child's layout() may in turn be called!

When I construct a window at the beginning it works but when I construct it later it doesn't

    When you construct a window before calling FXApp::create(), the window will be created when all windows are created. If however you construct a window later on, then you need to call window->create() yourself.

    Please refer to the section about creating icons for a more detailed explanation.

About numbering Message ID's.

    When deriving classes from FOX Widgets such as FXDialogBox, make sure you're messages are numbered so as to not conflict with those of the base classes. The most simple way is to continue numbering from where the base class left of; I suggest the following C++ trick:
    class MyDialog : public FXDialogBox {
      ...
      enum{
        ID_CLICKED_YES=FXDialogBox::ID_LAST,
        ID_CLICKED_NO,
        ID_CLICKED_OK,
        ID_CLICKED_CANCEL,
        ID_CLICKED_QUIT,
        ID_CLICKED_SAVE,
        ID_LAST
        };
      ...
      };
    

    As you see, the implementor of the base class can insert additional message ID's but the numbering is automatically kept straight by the compiler. Also, if you're own class is being derived from then this derived class can start counting from MyDialog::ID_LAST and not worry about any messages being inserted into MyDialog.

Why Support GIF!

    The compression technique in GIF was patented by UNISYS. In 2003, this patent expires and using GIFs no longer presents a problem; until that time FOX does not support compressed output, only decompression.

    From what I've read, LZW decompression is not subject to the patent [hence ability gzip support for the old ``compressed'' files].

    I feel that there is therefore no need to remove the FOX support for GIF icons/images, and therefore any existing investment should you have in large icon collections would be protected.

    Should you still harbor any qualms about using GIF's in your project, you could of course always use BMP icons. However, GIF icons appear to be typically about half the size of BMP icons.

    Note that the LZW patent will expire soon, and so compressed GIF support will therefore be reinstated.

    Nevertheless, software patents are very bad for software developers, particularly since so many completely trivial ideas seem to slip through the patent system, see The Case Against Software Patents.

Failing to delete menu panes in owner's destructor.

    When you create a MenuPane, the pointer passed in to MenuPane is the owner of that MenuPane, which is typically a MainWindow or DialogBox. This causes the MenuPane to stay on top of the owner window.

    When adding a MenuCommand in a MenuPane, the MenuCommand will obtain the owner of the MenuPane and install its accelerator in the owner's accelerator table. This is necessary, as the accelerator is to be effective without the MenuPane being having been popped up.

    When the MenuCommand is destroyed, it tries to remove this accelerator again by obtaining the MenuPane's owner and removing the accelerator from the owner's accelerator table. Should it be the case that the owner of the MenuPane had already been deleted, an access to a non-existing memory location (segmentation fault) will likely occur.

    Thus, it is necessary for the owner of a MenuPane to be still in existence when the MenuPane itself is destroyed. So when the owner of a MenuPane is destroyed, it must make sure the MenuPane is destroyed before its destructor completes:- otherwise, the MenuPane would refer to a non-existent owner.

    As a general rule, shared resources such as Icons, Fonts, Cursors, Bitmaps, and also MenuPanes, must be explicitly deleted by the widgets that owns them.

How does FXStream serialize an FXObject?

    When you serialize a pointer to an object, like for example:
    
      // Declarations
      FXStream    stream;
      FXDocument *document;
    
      // Serialize
      stream.open(FXStreamSave);
      stream << document;
      stream.close();
    
      // Deserialize
      stream.open(FXStreamLoad);
      stream >> document;
      stream.close();
    
    
    What really happens when you serialize a pointer to an object is the following:

    • stream checks an internal hash table to see if document has been serialized before.
    • if it has been serialized before we just save a reference number into the stream, and we're done.
    • if document was not encountered before, stream saves the classname.
    • then, the document->save(stream) is called to save the object's contents [member data] into the stream.

    When you deserialize an object is:

    • stream loads an item from the stream.
    • if the item represents a reference number, then we must have loaded the document previously; using an internal lookup table, stream maps reference number to the memory address where document was loaded, and returns this address.
    • if the item is a classname, then stream calls FXMetaClass::getMetaClassFromName(classname) to obtain the metaclass, and calls metaclass->makeInstance() to properly manufacture an object.
    • then, stream calls document->load(stream) to pull in the object's contents.

    Sometimes, a special container object is referred by other objects, but should not itself be serialized. In this case, you may want to use the constructor:

      FXStream    stream(container);
    

    instead. This will add the pointer container to the internal table of stream, so that any subsequent encounter of the same pointer value will generate a reference number only.

Why did FOX choose the message-map based callback paradigm

    There are several different mechanisms to connect Widgets, the sources of events, and their targets, or the application code that you write.
    I have evaluated several different callback mechanisms, each have their different strengths and weaknesses.
    • Function pointer [Motif, Xt].
      • Very dissatisfying for C++ programs, as it is not object-oriented.
      • Extra callback parameter [call_data] is not type safe.
      • This is mostly interesting for procedural programming styles, e.g. using C.
      • Hard to serialize (or save to file) the connectivity.

    • Message handling with fixed routing [Microsoft Foundation Classes, Borland C++ Builder].
      • Can bind source and target together at run time.
      • Need fixed message routing scheme, since there is no specific target.
      • Need to keep the messages globally unique (because of the fixed message routing scheme).
      • Message-delegation [forwarding of messages to another party] is easy.
      • GUI widgets can not receive messages, only sent them (because of a fixed message routine scheme).
      • May be not type-safe.
      • Easy to serialize the connectivity.

    • Signal/Slot [Qt (Preprocessor), C++ templates (Gtk--, I believe)].
      • A special preprocessor does not seem very elegant to me [Qt].
      • A template-based signal/slot system is elegant from a theoretical point of view.
      • Templates are instantiated at compile time. This means it's going to be difficult to hook up objects which are only known at run time [like e.g. loading a custom control from a DLL].
      • To connect a message source and a target, you actually construct a connector object that is parameterized by the target; you can not do this unless you know the type of the target [This is because pointer-to-member-of-class types can only be downcast!].
      • Hard to serialize, because a pointer-to-member-of-class contains a function-pointer when the member is not a virtual.

    • Message handling with specific target [FOX, NeXTSTEP (using Objective-C of course)].
      • You can connect at run-time, because connectivity does not involve compile-time code generation like with a signal-slot mechanism. Run-time connectivity is needed because you may load objects dynamically from a DLL, from deserialization, or you may want to write an GUI-Builder which interactively connects things up.
      • There is no need for a globally unique list of message ID's. The message is addressed to a specific target, and the same message-ID can be reused by another target for another purpose.
      • Widgets may receive messages as well as send them. This is very important for component-based programming paradigms. It is also important to note that this allows for ``glue-less'' programming; for example, a message ID_HIDE to any Control will hide the Control.
      • No special preprocessor is needed. The compiler automatically keeps the message-ID's straight [see above].
      • It is not type safe, in the sense that if you do need to interpret the void*, you would need to cast. Note however that in the vast majority of cases, the void* argument is not used; when it is used, the use is pretty consistent:- what do you think the void* refers to when the message-id is ID_SETINTVALUE?
      • In the case of NeXTSTEP, the argument signature was a part of the message, which means that for an object to implement the message, the signature had to match up; this was type-safe while at the same time very flexible.
        Alas, FOX was written in C++, not Objective-C.
      • You connect things simply by passing the target-pointer in the constructor when you create a widget.
      • FOX supports message delegation very easily.
      • You can actually turn FOX into a type of template-based signal/slot system of you make FXObject-derived connectors!
    As you see, FOX's message handling system may not be type safe, but it is very compact, allows for run-time connectivity, is serializable, and favors component-oriented development.
    Were FOX written in Objective-C, one could achieve the goal of type-safety as well; C++ clearly limits our choices.

Why does a AUTOGRAY disable, but not enable the Button?

    AUTOGRAY and AUTOHIDE are very useful features when messages are being delegated around, like for example in an Multiple Document Interface [MDI] application. In an MDI application, the target which actually ends up handling the message may be different from one moment to the next. When no target handles the message (e.g. when all FXMDIChild windows have been deleted), an FXButton which is set to BUTTON_AUTOGRAY will be disabled automatically. When there is a target, this target should enable or disable the button as appropriate. The FXButton does not automatically enable itself when there is a target that handles the message, as it is not necessarily the case that the button should be enabled when it does.

I get compiler errors in Visual C++ when inclusing FXArray or FXElement

    FOX uses the placement version of the C++ new operator. Declarations for this operator may be made available to your program by:
      #include < new >
    
    just before including FXArray and FXElement. FXArray and FXElement are not automatically included into fx.h because these files rely on a proper template implementation of your compiler; also, FOX widgets do not need these headers.

My Motif application complains with messages about failing to allocate colors

    This typically happens on PseudoColor systems, i.e. systems which use a colormap or color palette. Even many high end SGI systems run the Motif GUI in PseudoColor mode [these systems support multiple hardware colormaps]. FOX normally allocates about half of the available colormap [125 colors, to be exact]. Under normal circumstances, this leaves plenty of colors for other applications. However, sometimes of course it can happen that other X11 applications require more colors than are available. Fortunately, FOX can be told to use a different number of colors. There are several ways to do this:
    • The simplest way is to specify the maximum number of colors on the command line, with the parameter -maxcolors n. The number n should be between 2 and 256. Setting the parameter causes FOX to allocate no more than the indicated number of colors. FOX will attempt to allocate a block of colors such that nRed x nGreen x nBlue is not larged than n; it will favor slightly more resolution in the green and red than in blue, because the eye is more sensitive to these colors.

    • If you find yourself passing this parameter regularly, you may consider specifying the number of colors using the Registry mechanism instead; this way, FOX applications will automatically pick this up. The most easy way to do this is to load the file $HOME/.foxrc/Desktop into your editor, and adding the following to the [SETTINGS] group:
      [SETTINGS]
      maxcolors = 64
      
      Of course you may specify any number you like.

    • The last method is to specify the maximum number of colors programmatically. In case you're developing e.g. a data-entry application, you may not need many colors and you can simply set the value to a fairly low value, like 27:
      FXVisual *vis = application->getDefaultVisual();
      vis->setMaxColors(27);
      
      Of course you will need to do this prior to a call to application->create().
    On some machines, you may be able to switch the video hardware into a higher color resolution, and if this is possible, it may be by far the best solution.

File fxpngio.cpp does not compile on IRIX 6.5

    FOX uses GNU autoconfigure to determine the whereabouts of various files. It so happens that IRIX 6.5 ships with an older release of the PNG library. You can do two things:
    • Re-run configure as configure --disable-png to disable PNG image file support. FOX will be fully functional, except that PNG image file support is stubbed out.

    • Obtain the PNG library libpng version 1.05 or better, and install this on your machine.
      You can find PNG on: http://www.libpng.org/pub/png/.
    If you choose the latter, you will of course have to make sure the configure script is able to locate the new library; how this is done depends on where it is installed.

Developing FOX Applications under Windows.

    Developing FOX applications under Windows warrants a lot of extra information. You can find this here.

Why are there various flavors of running an event loop?

    FOX applications are event driven applications. All FOX applications therefore spend almost all their time in an event loop, waiting for events [such as keyboard and mouse events] from a user. Depending on the situation, there are several types of event loops possible:

    • FXApp::run(). This is the main event loop and it is entered when you start your program, and does not exit until you call FXApp::exit(), or the application object receives the ID_QUIT message. Typically, after returning from FXApp::run() your program will exit.

    • FXApp::runModalFor(window). You enter this event loop to run a modal dialog. A modal dialog is a dialog which will block any interaction with any other window of the program except for the indicated dialog window, until the modal event loop is exited.
      FXApp::runModalFor() is a recursive invocation of the event loop, and it will not return until FXApp::stopModal(window,code) is called. The return code is passed along and will be returned by FXApp::runModalFor().

    • FXApp::runModalWhileShown(window). This routine is a variant of FXApp::runModalFor() which returns as soon as the window is no longer visible, or until terminated by FXApp::stopModal().

    • FXApp::runUntil(condition). This routine enters a recursive event loop, passing all events normally. The event loop returns as soon as the variable condition is set no a non-zero value.

    • FXApp::runWhileEvents(). This routine enters a recursive event loop, but returns as soon as no current events are outstanding in the event queue. This can be used to catch up with the event stream during processing of some long computation, and then resume the computation as soon as all events have been processed.

    • FXApp::runOneEvent(). This function processes one single event and then returns.

    • FXApp::peekEvent(). This tests if any events are present on the event queue, and returns immediately with TRUE if there are, or FALSE otherwise.

    Recursive invocations of the event loop are very useful, because they allow you to temporarily resume processing of events without returning from your message handler.
    The runModalFor() is especially useful if your message handler needs to display a temporary dialog box, acquire some information from a user, and then continue processing the user input all without returning to the main event loop.

Why do I need to declare a default contructor in my classes?

    The FXObject-derived classes need to have the FXDECLARE() macro in the header (.h) file and the FXIMPLEMENT() macro in the implementation (.cpp) file. The FXDECLARE macro declares a static const member variable called metaClass, which is a table describing this class. It provides some form of runtime type information. It also declares a virtual function getMetaClass() which can be used to obtain a pointer to an objects metaclass variable; this way, one can interrogate the type of an object. In addition, it declares a static member function called manufacture() which will construct an object of this class using the default constructor. Finally, it declares two convenience functions for serialization of pointers to objects of this class.
    The FXIMPLEMENT macro is used to define and fill-in the table declared using FXDECLARE. It defines the static member function manufacture(), the virtual member function getMetaClass(), and fills in the static member variable metaClass. If the object handles messages, it also fills in a pointer to the message table.

    A default constructor needs to be defined in your class because the manufacture() function needs to use the default contructor to create a properly initialized object of this type. This is needed by the deserialization system so that it can allocate and initialize an object prior to loading values for the persistent member variables.

Which FOX objects do I need to delete to avoid memory leaks?

    Most FOX Widgets are automatically deleted by their parent Widget. However there are some resources which are sharable, and these resources must be deleted explicitly by the program in order to avoid memory leaks or other problems.

    Cursors, Fonts, Images, Icons, Bitmaps, and Visuals are sharable resources which must be cleaned up explicitly. Because several Widgets may refer to the same icon or font, these resources are not automatically deleted by the Widget as they may be used in another Widget. A number of resources, such as the default cursors, the default font, and the default visual, are automatically created by the Application object, and the Application object also assumes responsibility to destroy these when the Application object itself is being destroyed.

    Menu panes usually refer to the Widget that owns them, and because dangling references to a deleted owner object are not allowed, the owner Widget must make sure the Menu panes are deleted when the owner Widget itself is. Failing to do this will leave the Menu pane in existence while their owner is already deleted, and this will cause problems.

    Ordinary Widgets, like Buttons, Sliders, and so on, are automatically deleted by their parent Widget; therefore it is not necessary for your application to keep track of them explicitly

What's the difference between detach and delete?

    Many FOX objects, like widgets and icons and fonts and so on, have resources which are resident in the X-Server (or GDI in the case of Windows). The existence of these X-Server resident resources is manipulated through the member functions create() and destroy().
    When a program's GUI is realized, all the X-Server resident resources are automatically created by recursively working through the entire widget tree and calling create() for every reachable object.
    When a widget is deleted, the X-Server resident resources are released by recursing through the widget tree and calling destroy().
    However, destroy() is only called for those objects which not shared; shared resources like icons and fonts are not destroyed because they may still be referenced from other places.
    On UNIX systems, it is possible to fork() a process, which creates a child process which has initially all the same data as the parent. This includes the handles to the X-Server resident resources. Of course, these resources really belong to the parent process, and should not be references by the child process after the fork.
    To clean up, a child process forked off from a parent process needs to call detach(). The call to detach() will recursively work down the widget tree and detach all reachable objects (widgets as well as sharable resources like icons and fonts) from their X-Server resident representations. After having been detached, the objects can then be destroyed without generating a call to destroy() along the way, so the child will not accidentally release any resources which the parent process still needs.

Can I use multiple threads in my FOX application?

    FOX assumes one single thread to be responsible for the User Interface related tasks. This is because certain FOX resources are not thread-safe; also, because on MS-Windows message queues from a window are tied to the thread that created that window, it is very important for portability reasons that it is always the same thread performing the User Interface tasks.

    You can however use any number of threads in your application, as long as they are worker bees, i.e. they do not perform User Interface functions.

    Synchronization between the User Interface thread and the worker threads can be performed using a synchronization object, a pipe (UNIX/LINUX) or an event object (MS-Windows).

    The synchronization object is passed to FXApp::addInput() so that the User Interface thread is awakened when the worker thread turns the synchronization object into a signalled state.

Can I cross compile FOX on Linux for Windows?

    Yes. Markus Fleck writes:
      FROM: Markus Fleck
      DATE: 04/10/2001 09:42:55
      SUBJECT:  [Foxgui-users]Convenient cross-compiling for Win32 on Linux
    
    
    
      Hi!
    
      Below are some experiences that I thought I'd share; they're mostly of
      interest if you're a UNIX developer at heart and are forced to create Win32
      versions of your applications as well (using FOX for the GUI part, of
      course :-).
    
      I'm currently using FOX for cross-platform development (Linux and Win32),
      and have been using Cygwin under Windows for some time to create binaries
      for Win32. Unfortunately, Cygwin under Windows is quite slow, and tends to
      crash rather often (at least for me.)
    
      Recently, I came across a patched GCC cross-compiler for Win32:
    
        http://www.libsdl.org/Xmingw32/
    
      A Linux binary build of the cross-compiler can be downloaded from that site,
      or you can use the script at
    
        http://www.libsdl.org/extras/win32/cross/build-cross.sh
    
      to automatically download, configure and build the cross-compiler from
      sources for your platform.
    
      The cross-compiler works like a charm; I am now able to create Win32 .EXE
      binaries in a fraction of the time that Cygwin used to require running under
      native Windows.
    
      Using the cross-configure.sh/cross-make.sh scripts as a starting point, even
      "configure" and "make" can be run on Linux, even though you're generating
      target code for the Win32 platform.
    
      I have also started to make use of "Wine" (the Linux/FreeBSD-based execution
      environment for Win32 EXE/DLL code) instead of booting into Windows for the
      purpose of testing my application; I had to uncomment (or "#if 0") the call
      to "TrackMouseEvent" in FOX's src/FXApp.cpp, though, because apparently Wine
      doesn't implement that function and aborts when it encounters a call to it.
    
      I also had to disable (or actually, comment out using "dnl") the invocation
      of autoconf's "AC_C_BIGENDIAN" macro in configure.in (and invoke "autoconf"
      to rebuild the "configure" script); it appears that "AC_C_BIGENDIAN" doesn't
      (yet) accept a default endianness value to use when cross-compiling, so that
      effectively the "AC_C_BIGENDIAN" test cannot be used when cross-compiling
      (yet). So in order to better support cross-compiling, configure.in should
      probably test for "ac_cv_prog_cc_cross=yes" and/or shortcut the endianness
      test if Win32 is the target platform.
    
      In a nutshell, I can only recommend using the GCC cross-compiler to build
      Win32 executables; it's much faster than Cygwin and much more convenient if
      you prefer to do development on a UNIX-type system. If you're using Linux
      or FreeBSD, "Wine" can give you some additional convenience when it comes
      to testing you application.
    

    So cross compiling is not only possible, but it works very well and may be faster than working natively. One note on the AC_C_BIGENDIAN thing:- you can simply pass -DFOX_BIGENDIAN=0 on the compiler command line to override it.

Can I have other colors besides black and white for my cursor?

    As of FOX 1.1.45, yes! Under X11, you will need the Xcursor extension, which means you must have a recent X server such as XFree 4.3 or later. On Windows, it should be OK in all cases.

Why is the SEL_DELETED message sent before the actual deletion?

    SEL_DELETED is sent so as to afford the target of the message a chance to save the text that existed prior to the removal; this is useful for the purpose of maintaining undo list.
    Since the SEL_DELETED message contains the information about the to-be-deleted stuff, its a small matter to determine what the state of the widget will be after the deletion, should it be necessary.

How do I perform double buffered drawing?

    You can perform double buffered drawing by using an FXImage. First, create an off-screen FXImage, which will be the target of the drawing operations. Then, set the FXDCWindow to draw on the FXImage. Finally, whenever the widget needs to be repainted, BLIT the contents, or part of the contents of the FXImage to the Widget.
    In code:

      picture=new FXBMPImage(getApp(),NULL,IMAGE_SHMI|IMAGE_SHMP,500,500);
      ...
      picture->create();
      ...
      FXDCWindow dc(picture);
      dc.setBackground(FXRGB(255,255,255));
      dc.drawRectangle(0,0,500,500);        // Erase it!
      ...
      ... drawing commands ...
      ...
    
    And in onPaint:
    
      FXDCWindow dc(this,(FXEvent*)ptr);
      ...
      dc.drawImage(picture,0,0);
      ...
    
    
    Some details are omitted here; most likely, the drawing of the FXImage and the repainting are not both done in onPaint(); because the FXImage is off-screen, its not "clobbered" by other programs so there's no need to redraw it unless the widget changed size or if the content data was changed.

How do I make sure drawing is flicker-free?

    The following tricks have been proven to be very helpful in reducing visual flicker while redrawing widgets:

    • Limit drawing to the dirty area. Use FXDCWindow dc(this,event), because that will clip all drawing commands to the event's dirty rectangle. Drawing takes more time that almost anything else; so it is worth a lot of work to limit the amount of drawing. I refer to FXTable to give you an idea. Drawing the table seems simple enough, but initially it was very slow. I've since then expended a lot of code to determine which cells of the table were clobbered, and for each cell set clipping rectangles so as to not erase the grid lines. Now the table is virtually flicker free, and draws a whole lot faster.
    • Try to avoid erasing the background of the entire widget. Instead, paint background around the content area, then paint the content over. This is done in most FOX widgets, particularly FXTable.
    • If you have to erase the background, try and erase it little bits at a time. For example, in the FXList widget, instead of erasing the entire widget and then painting the icons over it, I erase and paint over each item individually. While is is actually a bit slower, it is visually much more acceptable because at no time is the entire widget completely erased.
    • Flush the command buffer prior to the erase, and after the last drawing command which paints over the erased background. Drawing commands are buffered, and the buffer is flushed when it is full. However, you don't want to have the situation where the last command sent is the erase, as in that case the window will stay white for the entire duration while the command buffer is filled up with commands to paint over the background. You want the erase command and the paint command to be in the same batch, if possible, so that they get executed by the X server right after each other.
    • Perform double-buffered drawing, using an FXImage as noted above.

Why does the border style not follow what I specify?

    Under Windows, you should essentially get what was specified. Some decorations under Windows are tied, for example it is not possible get DECOR_MINIMIZE and DECOR_MAXIMIZE without also getting the System Menu. Also, the Close button is tied to the Menu.

    Under X11, the decorations are mere Hints to the Window Manager. Different Window Managers may or may not observe the hints properly. As the Window Manager is a program written by other people, I have little influence over their correctness in observing the decoration hints.

    However, I have had fairly good luck with Motif, KDE 2.2, and other Window Managers like WindowMaker, Sawmill, BlackBox, and Enlightenment.

    The Free Desktop Project is trying to standardize various aspects of client and Window Manager interaction, and FOX will try to take advantage of this where it makes sense.

What's the deal with default buttons?

    Certain buttons in a dialog box may be designated as default buttons. If the focus moves onto a default button, a RETURN key will be dispatched to this button. The way to make a button be a default button is to pass BUTTON_DEFAULT.

    One single button in the dialog box may be designated as the initial default button. The initial default button is the one that will become the default button whenever the focus moves to a widget which can not itself be the default widget and which does not handle the RETURN key. Passing BUTTON_INITIAL will make it the initial default. BUTTON_DEFAULT means that if the focus lands on this button, it will become the one to respond to RETURN key.

    To programmatically set BUTTON_DEFAULT, use setButtonStyle(BUTTON_DEFAULT). Calling setDefault(TRUE) will MAKE the button the default; this is different from ALLOWING it to be the default, which is what BUTTON_DEFAULT does.

    Recommendations:

    • Only buttons normally terminating a dialog should have BUTTON_DEFAULT. For example, the "Accept" and "Cancel" buttons at the bottom of the dialog.
    • Only one single button should have BUTTON_INITIAL. This should correspond to the choice that would be the most often chosen one, e.g. "Accept". If the dialog does something dangerous, like "Erase All files" then make "Cancel" your default choice:- hitting RETURN is a reflex and in some cases its better for the easy path to lead to safety rather than to danger!
    • If you write custom widgets and your custom widget handles the RETURN key, your overload of setFocus() and killFocus() should call setDefault(TRUE) and setDefault(MAYBE), respectively.

      Calling setDefault(TRUE) means the current default button will no longer be default one because your widget now deals with the RETURN key. Calling setDefault(MAYBE) when your widget looses the focus means the default button will revert to the initial default button (unless of course the focus lands on another widget which can handle the RETURN key!).

Shouldn't fx.h include fxkeys.h?

    The header file fxkeys.h is rarely used, basically only by programs which catch keyboard messages directly. The vast number of programs will use the widgets and rely on the regular callbacks from these widgets.

    To make programs compile faster, the file fxkeys.h, which contains a very large number of definitions, is therefore not normally included.

I have this great idea, but you will need to rewrite all of the FOX library and applications.

    No!

How do I monitor activity on sockets?

    When you are running a GUI, you can monitor sockets in two ways:- first, you can of course dedicate a worker thread to the socket activity, and leave GUI work to the GUI thread.

    Another approach is to use the addInput() facility of FXApp. The addInput() call registers a callback message, and target object, to be invoked when the event on the file descriptor occurs. For example, adding:

    
            app->addInput(fd,INPUT_READ|INPUT_WRITE,myobject,MyClass::ID_FD);
    
    
    Will send a message ID_FD of type SEL_IO_READ when new data is available on fd to be read, and a message ID_FD of type SEL_IO_WRITE when the buffer is ready to accept more data to be written. In either case the void* ptr refers to the file descriptor fd, permitting you to use the same handler for multiple file descriptors.

    On MS-Windows, instead of a POSIX file descriptor, you must use a handle. Thus, under MS-Windows, the addInput() API can be used to wait on a great variety of kernel objects, ranging from event objects (which is what you need to use for sockets), to process and thread handles, and so on. Please consult the MSDN documentation on Winsock2 for details.

What do the different version numbers for FOX mean?

    Starting with the FOX 1.0.0 release, FOX library releases will have a version number of the form major.minor.patch. When the minor version number is odd, this indicates that it's a development version of FOX; when it's even, this indicates a stable release version.

    The intent is for even-numbered releases to keep the header files untouched, to guarantee DLL or shared library compatibility. If bugs are fixed, the patch number will be increased. Thus, applications should be able to link to shared library versions of FOX with confidence. For odd-numbered releases, everything may be changed from one patch level to the next, so one would have to recompile applications (that's the nature of it being a development version!).

Why didn't you fix the problem of the last pixel of a line not being drawn on MS-Windows?

    I have received many such suggestions. Here's why the suggestions received so far do not work:
    • You may draw thicker lines; adding a pixel with thin lines (1 pixel wide) is possible, but with thick lines it gets kind of complicated.
    • You may be drawing with stipple style. The stipple algorithm is closely tied to the DDA and to draw the end-point properly you must know the state of stippling algorithm in order to decide what color to give the final pixel.
    • Drawing with patterns and various BLIT modes. There are ways to draw with hatched brushes, and you can use many different BLIT modes to combine foreground, background, and hatch patterns with the background. So it gets even more complicated....
    • Even if you can solve the problem of doing all the above, there is one problem left which you CAN NOT SOLVE. You can not solve it because of the mathematics of rational numbers:
         Y
      
         5
         4            oo@
         3         ooo
         2      ooo
         1   ooo
         0ooo
          0123456789012345  X
      
      Suppose you draw the line above, but you want to include @. You'd think its a matter of specifying a slightly different end point P, such that @ is touched in the DDA algorithm.
      However, this is impossible, because the line shown has a slope of 3:1, and this hypothetical endpoint would be at at (15,4 1/3) and of course that's not an integer coordinate. The next best thing would be either (15,4) or (15,5), but that will give you a different slope line (and totally different pixelization) altogether. In effect, rather than having a tiny problem at the end of a line segment, you now have many problems along the entire line.

    The moral of the story is that we're basically better off NOT trying to fix this problem, but simply organize code so as to (a) minimize the reliance on line drawing, and use rectangle fills instead, and (b) whenever we do need to draw lines, try to make sure this effect is hidden, and finally (c) if all else fails, there is #ifdef style conditional compilation.

    As it happens, I have been able to make do with (a) and (b) in almost all cases, and had to resort to (c) only once or twice.

Why doesn't FOX use ASSERTs to check API arguments?

    The philosophy of error checking is like this:

    • As a library, FOX is installed and used by many programs, and so under normal circumstances it is compiled with optimization flags, and so assertions and such are normally removed.
    • Application developers may compile their own code with debugging enabled, but usually link against a pre-installed copy of the library.
    • Thus, errors in arguments and such need to be checked by means other than assertions.
    • If you're working on additional FOX widgets, or perhaps suspect a bug in the FOX library, then the library can be compiled for debug mode. In this case, we're interested to uncover bugs and inconsistencies in the library itself, so assertions and tracing and so on must be turned on.
    • The assertions in the library itself should however NEVER be triggered, even if the application program is ill-behaved or the library is used in the wrong way:- because the assertions are there to verify the correctness of the library itself, and the standpoint is that other checks should catch bad parameters to API's and other abuses.
    All this checking introduces some overhead, of course. But lets not forget that its a GUI library, and so the speed of many operations is not so critical, because 99% of the time the application is simply waiting for the user to do something; also, the dominant amount of CPU is actually spent on drawing, which is not slowed down at all. The payoff of all this checking is that various kinds of programming problems are (hopefully) discovered sooner.

Why can I not paste clipboard data out of a deleted window?

    Deferring the generation of the clipboard data until a request is received from another application has a number of advantages:

    • A cut or copy operation can be nearly instantaneous, even for very large data, as no actual data are being transferred.
    • It is more open-ended in terms of clipboard data types, since not all data formats need to be generated up front.
    • It allows for some optimizations; for example, if the requestor and the source are in fact the same application, no inter-process communication needs to be performed at all; data can be exchanged directly in memory.

    The alternative would be to generate all clipboard-types up front; imagine what this would mean if we had 10 image formats and you clipped an image to the clipboard:- you'd have to place the same image on the clipboard in all 10 image formats just on the off-chance that one of them may be requested!

    The source of the clipboard data is the widget from which the data was clipped to the clipboard; that widget is the one which owns the clipboard, and that widget is the one that will be asked to generate a specific representation of the data for a specific clipboard type when it is asked by another application. Only that particular widget has the methods and knowledge for generating the requested representation of the clipped data.

    While this allows for a lot of flexibility in the clipboard data types, it does have a downside:- when the owner of the clipboard is deleted, so does the clipped data.

What is valgrind?

    Valgrind is a tool for detecting various memory problems in your code, such as:

    • Use of uninitialised memory;
    • Reading/writing memory after it has been freed;
    • Reading/writing off the end of malloc'd blocks;
    • Reading/writing inappropriate areas on the stack;
    • Memory leaks -- where pointers to malloc'd blocks are lost forever;
    • Passing of uninitialised and/or unaddressible memory to system calls;
    • Mismatched use of malloc/new/new [] vs free/delete/delete [];
    • Some misuses of the POSIX pthreads API.

    Valgrind works on Linux/x86 only (on Windows, consider tools such as Purify or BoundsChecked; there may be other tools).

    Valgrind translates x86 instructions into instrumented code, basically inserting various checks on memory references. Because its still not completely aware of all sorts of x86 instruction set extensions like 3DNow and SSE, you should probably compile your code in "vanilla" pentium mode.

    If your code links against OpenGL libraries from NVidia then you can disable the OpenGL library's use of 3DNow and SSE by setting:

      export __GL_FORCE_GENERIC_CPU=1
    
    on recent releases of the OpenGL library.

    If you care about software quality, you owe it to yourself to try valgrind out as it can catch a great many bugs; some memory bugs are like "time-bombs" and may linger in the code for a long time; valgrind can ferret them out.

When is a member function virtual or not?

    There are often questions about why certain member functions of FOX classes are not virtual. The point below attempt to explain the reasoning behind the decisions.

    1. Functions which need to be virtual are. Examples of these are functions like getDefaultWidth() and layout().
    2. Certain functions which may be overloaded in derived classes are; for instance expandTree() is virtual because it allows a derived class to know when a subtree is unfolded.
    3. Message handlers are never virtual. You can just add the same message handler in the derived class's message map, which is faster anyway.
    4. Functions which should not be overloaded (e.g because it could break the abstraction, like for example getNext() and getPrev()), are never virtual either.
    5. Other than the above 4 rules, non-virtual may have been chosen without good reason. On such cases, I'm open to suggestions.

    Obviously the full scope of widget subclassing is not really known until people try; because of rule (4) chosing non-virtual is a better way to enforce the integrity of the abstraction.

Why does a toplevel window have different decorations than I specified?

    The toplevel windows (anything derived from FXTopWindow) can have various decoration hints, such as DECOR_TITLE, DECOR_BORDER, and so on. FXTopWindow passes these hints to the underlying system. On X11, a separate program called a Window Manager is responsible for interpreting these hints and applying the appropriate borders, title bar, close buttons, minimize and maximize buttons and so on. On Microsoft Windows, this is done by the GDI layer. Either way, the decorations specified from within the FOX program are just hints:- the interpretation of these hints depends on the underlying system, and is therefore out of our jurisdiction.

    There are many Window Managers under X11, such as KDE, WindowMaker, FVWM, Motif Window Manager (MWM), and so on. The ICCCM document details a few common conventions that Window Managers are supposed to adhere to; unfortunately, decoration styles are not part of this document. Because of its historic popularity, many Window Managers have opted to follow the Motif Window Manager hints.

    There is also some effort under way to define some more modern standards, the Free Desktop Organization. FOX adheres to many of the Free Desktop's standards, insofar as it does not conflict with Motif Window Manager standards (since FOX needs to work reliably under Motif for some time to come).

    Under MS-Windows, the part that is responsible for the title and border drawing is implemented in the Windows DLL's that FOX needs to link to. The non-client drawing is handled by these libraries, ensuring that FOX's toplevel windows look and behave according to the particular version of Windows your FOX program runs on.

    Since the behaviour of the decoration hints depends on the underlying system, FOX programmers must perform some testing under various systems to ensure that the particular combinations of hints they have chosen work as expected; the FOX library itself uses very conservative settings which are known to work properly on most Window Managers.

Why do none of the FXScrollArea derived widgets have a frame?

    The short answer is that FXScrollArea is derived from FXComposite, and FXComposite does not support a frame.

    The longer and more accurate answer is a bit more complicated. The FXScrollArea widget, and its derivatives, present a small view of a larger content. The content may be a drawing, but sometimes also other widgets are involved, for example in the case of FXIconList. It is necessary to clip all drawing to the visible viewport of the FXScrollArea. This is made possible by making sure the FXScrollArea's scroll bars and scroll corners are always the topmost three children, and positioned so as to leave a simple rectangular viewport area in which the content is shown.

    If FXScrollArea would draw borders or padding around itself, this would necessarily not be covered by the scroll bars and scroll corner; however that would present a problem as any content or sub-windows of the content would be drawn on top of the FXScrollArea's borders.

    Thus, FXScrollArea does not support borders. If you need a sunken border around a scrolling widget, simply create a FXVerticalFrame with no padding as the immediate parent.

What is the Legal Status of FOX since your departure from CFD Research?

CFD Research has been very nice to work out an arrangement for the legal status of FOX which is acceptable to all parties. The issues were the continued availability of the FOX Library to CFD Research, and the acknowledgement of copyrights to its author and contributors.

The arrangement is as follows:

  1. CFD Research disclaims all Copyright Interests to the FOX Library.
  2. CFD Research will continue to be able to use the FOX Library under the Lesser GPL license.

What is all this stuff with FXSelector and so on?

When a target receives a message from a widget, it may want to know several things:

  • From which widget did the target receive the message? This is determined by FXObject *sender argument of the message handler.
  • What happened? The answer to this question is in the type-part of the FXSelector sel argument of the message handler. You can obtain the message type by means of the macro: FXSELTYPE(sel).
  • The identity of the widget from which the message was received. This is answered by the id-part of the FXSelector sel argument of the message handler. You can obtain the message id by means of the macro: FXSELID(sel).
  • Any other pertinent data. This data depends on the type of widget, the message type which was received, and is found in the void* ptr argument of the message handler. You must typically cast this to the appropriate type.
Sometimes, a handler may have to send messages back to the sender, for example, in response to a SEL_COMMAND message a message handler may want to obtain the value of the sending widget by sending it a message of type SEL_COMMAND, and message id ID_GETINTVALUE. To build a message out of the type and id parts, you can use the macro: FXSEL(type,id).

For historical reasons, the data type used for the message-id, message-type, as well as the combined selector is FXSelector.

How do I add an icon for Windows Explorer?

You need to create a file, call it "myapp.rc", and then put into it:

  0 ICON DISCARDABLE "myapp16.ico"
  1 ICON DISCARDABLE "myapp32.ico"

Where, obviously, myapp16.ico and myapp32.ico are the icons you want to be associated with your application.

You will also need to convince your resource compiler to compile that, of course.

The TextField stops updating while the cursor is in it?

While a Control is being manipulated by the user, the GUI update (the process by which the widget updates itself from the application state) is turned off.
For most simple controls like Sliders this is done only during the time the mouse has grabbed the slider head.
However, for TextFields the updating is turned off while the TextField is being edited. There is no easy way to detect when the user is "done" with the TextField; but it is clear that the TextField can be updated again when:

  • You've moved the focus to another Control, or
  • You've hit RETURN in the Text Field to accept the typed input.

Building and using DLL's with FOX under Windows.

When you compile something, the header files can be parsed two ways on Windows. When compiling the FOX library itself as a DLL, the FXAPI macro should be set to FXEXPORT, which itself is set to __declspec(dllexport), (or possibly as something else depending on the compiler and linkage ideosyncracies). When you're compiling your own code which uses the FOX DLL, then FXAPI is defined as FXIMPORT which is then typically set to __declspec(dllimport).

There are two layers of macros so for your own DLL and EXE building you won't have to remember what to do for export or import, you can use the FXEXPORT and FXIMPORT macros. Now, you can NOT use FXAPI. When you build your own library, that library is a importer of the FOX API but an exporter of its own API!

For example, in FXChart new symbol FXCHARTAPI is defined so that when it is compiled it could be import symbols from FOX yet at the same time export its own symbols.

So in a nutshell:

  • Compile FOX with -DFOXDLL and -DFOXDLL_EXPORTS.
  • Compile programs which use FOX with -DFOXDLL and nothing else.
  • Compile your own DLL's which use FOX with -DFOXDLL and -DYOURDLL_EXPORTS [see FXChart for example]. Your own FOX-based DLL's export ONLY their own symbols but import the core library's symbols.

Creating an MDI application.

When you build an MDI application, messages should be routed via the FXMDIClient to an FXMDIChild, and from there, to either FXMDIChild's content window and the FXMDIChild's target. The FXMDIChild's target is typically a document object of some kind.

So, GUI controls basically have FXMDIClient as their target. The FXMDIClient is a kind of delegator, in the sense that when it does not understand a message, it forwards it to its currently active FXMDIChild; if there is no such child, then control is returned to the calling widget with the "unhandled" message return code.

The FXMDIChild similarly does a delegation. It tries the content window first, then its target "document" object.

Since we do not know which FXMDIChild is going to be active, it is important to ensure that all message ID's are unique if you have different types of FXMDIChild widgets.

For example, an application may have a 3D viewer in one FXMDIChild and a text view in another FXMDIChild. We don't want messages intended for a 3D viewer to be connected to a wrong handler when the text view FXMDIChild is active.

So, I recommend a common base class for your various FXMDIChild subclasses, and to define all message ID's in there. Then various subclasses of this base class map whatever ID's they need to specific handlers.

If you also have a Document class as target of the FXMDIChild windows, then number the messages the Document deals with starting from the ID_LAST of the FXMDIChild base class widget in your application. See below:

  // MDI Child base class
  class MyMDIChildBase : public FXMDIChild {
  ...
  enum {
    ID_FIRST=3000,      // High number away from any ID's defined in widgets
    ...
    messages defined for all subclasses of MyMDIChildBase
    ...
    ID_LAST
    };
  ...
  };


  // Custom document class
  class MyDocument : public FXObjecvt {
  ...
  enum {
    ID_FIRST=MyMDIChildBase::ID_LAST,
    ...
    ID_LAST
    };
  ...
  };

This is convenient. For example, a "Cut Selection" message could have radically different implementations in the various subclasses, yet be invoked from the same single menu.

When a particular FXMDIChild is active, some message ID's will be mapped to a handler, and some will not be.

FOX can take advantage of this fact by allowing you to specify the AUTOGRAY or AUTOHIDE flags on certain controls. For example, if you were to specify BUTTON_AUTOGRAY on a toolbar button, the button is automatically grayed out when no corresponding handler is found in the currently active FXMDIChild, or when there is no open document at all.

BUTTON_AUTOHIDE works similarly, except that in this case the button will be hidden instead of simply grayed out.

When you use BUTTON_AUTOGRAY, it is of course going to be necessary to implement the SEL_UPDATE handler as well as the usual SEL_COMMAND handler, so that you can enable the button. You can enable the button by means of a message, so that your handler won't have to know what kind of widget the sender was.

Example:

  // Undo last command
  long MyDocument::onCmdUndo(FXObject*,FXSelector,void*){
    /// perform the command for undo
    return 1;
    }


  // Sensitize undo widget; the ID_ENABLE message
  // enables the sender [presumably a widget of some sort]
  // We don't need to know what kind of widget the sender is,
  // so we can actually use this handler for sensitizing toolbar
  // buttons as well as the corresponding pulldown menu commands.
  long MyDocument::onUpdUndo(FXObject* sender,FXSelector,void*){
    sender->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);
    return 1;
    }

  // Example: pulldown menu command
  new FXMenuCommand(editmenu,"&Undo",undoicon,clientarea,MyDocument::ID_UNDO,MENU_AUTOGRAY);

  // Example: toolbar command
  new FXButton(maintoolbar,"\tUndo",undoicon,clientarea,MyDocument::ID_UNDO,BUTTON_AUTOGRAY|BUTTON_TOOLBAR|FRAME_RAISED);

Of course there may be a few cases where you may need to perform a wholesale update of the user interface when the user switches FXMDIChild windows or documents. Some major widgets with lots of content should probably not be updated using the SEL_UPDATE mechanism.

There are two ways; first is the SEL_CHANGED from FXMDIClient; a better way, and the recommended one, is to catch the SEL_SELECTED and SEL_DESELECTED messages from FXMDIChild:

  // Switched to new active document
  long MyDocument::onChildActivate(FXObject*,FXSelector,void* ptr){
    if(!ptr || ((FXMDIChild*)ptr)->getTarget()!=this) activateDocument();
    return 1;
    }


  // Switched from old active documents
  long MyDocument::onChildDeactivate(FXObject*,FXSelector,void* ptr){
    if(!ptr || ((FXMDIChild*)ptr)->getTarget()!=this) deactivateDocument();
    return 1;
    }

The void* in these messages reflects the OLD FXMDIChild window that was active before the switch. The code above takes care of the case where there are multiple FXMDIChild windows which may have a common document, and we would of course only want to update the GUI controls when we switch documents, not when we switch between FXMDIChild windows of the same document.

The implementation of activateDocument() will be responsible for setting up the GUI controls with data pertaining to the document. Likewise, deactivateDocument() should tear down the user interface and leave widgets in their pristine state [as if there were no document].

MS-Windows GDI handle limits.

MS-Windows has finite limits on GDI handles; the maximum number of HWND handles in the entire system is determined by 16-bit handle values. There is also a maximum number of bitmap handles.

These limits manifest themselves when calls to create() are failing by throwing an exception.
Windows NT, 2K, and XP probably have higher limits than Windows 95, Windows 98, and Windows ME.

It is therefore important to make sure that resources are deleted as soon as they're no longer needed. Since its pretty fast to create resources, its best to delay creation of windows and icons until they're actually needed.

In particular, dialogs should "own" their icons, and delete them in the dialog's destructor. Try to construct dialogs only when they're actually brought on-screen, and try to delete them when the interaction with them is done.

Note that un-created() icons and images do not use any handles in the system, so refrain from calling create() on icons or images if all you want to do is load and manipulate the image's pixel data. You only need to call create() when images are to be drawn into or used as sources for drawing (like e.g. drawing onto widgets).

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/win32.html0000664000175000017500000003703212130340076011730 00000000000000 Documentation: Developing Win32 GUI Applications Using FOX
Documentation: Developing Win32 GUI Applications Using FOX [Remove Frame]

    FOX provides a nice platform-independent alternative to the traditional GUI frameworks for Win32 (namely MFC). While most of the other FOX documentation applies to FOX programming in general, this document deals specifically with some of the logistical details of creating a FOX-based application for Windows. Many thanks to Daniel Gehriger, who provided a lot of the information you see here!

Compilers and Development Tools

    One goal is for FOX to work with as many different compilers and development environments as possible. We have used Microsoft Visual C++ versions 5.0 and 6.0, Borland C++ Builder 3.0 and gcc (or egcs) to build FOX applications for Windows. The standard FOX source code distribution includes project workspace files for Microsoft Visual C++ 6.0 as well as make files for Borland C++. You may also be able to use the Visual C++ project files with Visual C++ 5.0, but this is unconfirmed at present. For detailed information about how to build the library itself, please refer to the INSTALLfile which is found in the top-level directory of the standard FOX distribution.

Using Microsoft Visual C++ 6.0

    This section, and the following two sections, deal specifically with FOX development under Microsoft Visual C++ 6.0. This discussion assumes that you are at least minimally familiar with how to use Visual C++ 6.0. In particular, you should know how to create a new project workspace, and then add new project(s) to that workspace. Most of this information should be useful for Visual C++ 5.0 as well, although some settings may appear in different places.

    1. Create the project. All FOX applications are just standard Win32 applications, so when you create a new project select that option:
    2. Open the Project Settings dialog for this project. You will want to make changes for both the compile-time options and link-time options of this project. Choose the Settings... option from the Project pulldown menu. Change to the "C/C++" tab and then select "Preprocessor" from the "Category" drop-down list:
    3. Modify preprocessor definitions for linking against the FOX DLL.The FOX library can be built as either a static library or a dynamic link library (DLL). If you prefer to link your application against the DLL version of the library, you will need to add FOXDLL to the preprocessor definitions (not shown above).
    4. Modify preprocessor definitions for OpenGL. If you plan to use FOX's OpenGL-related features you should also add HAVE_OPENGL to the preprocessor
      definitions (as shown).
    5. Add FOX's include directory to the list of "Additional include directories".This setting is on the "Preprocessor" page too!
    6. Add the FOX library to the list of input libraries for this application.Now change to the "Link" tab of the Project Settings dialog box, and select "Input" from the "Category" drop-down list (see below). Add the appropriate library name (foxd.lib or foxdlld.lib for Debug builds; or fox.lib or foxdll.lib for Release builds) to the list of libraries under "Object/library modules".
    7. Add FOX's lib directory to the "Additional library path". This setting is also on the "Input" page.
    8. Change the entry-point symbol. Now select "Output" from the drop-down list on the "Link" tab and type mainCRTStartup in the "Entry-point symbol" type-in field (see below). Note that this field is empty by default. This setting tells the linker to use your application's main()function as the entry point instead of the standard WinMain()function.

Common Problems

    This section lists some commonly encountered problems for building Win32 applications with FOX.

    Unresolved symbols at link time. If you get one or more "error LNK2001" messages at link time, this usually means you've omitted required libraries from the list. Open the Project Settings dialog and change to the "Link" tab. On this tab, choose "Input" from the "Category" drop-down list. Finally, add the missing libraries to the list under "Object/library modules". Here is a list of commonly forgotten libraries:

    If the error message is...
    You need
    this library
    foxd.lib(FXPrintDialog.obj) : error LNK2001: unresolved external symbol _EnumPrintersA@28 winspool.lib
    foxd.lib(FXRegistry.obj) : error LNK2001: unresolved external symbol __imp__RegCloseKey@4
    foxd.lib(FXRegistry.obj) : error LNK2001: unresolved external symbol __imp__RegEnumKeyExA@32
    foxd.lib(FXRegistry.obj) : error LNK2001: unresolved external symbol __imp__RegCreateKeyExA@36
    foxd.lib(FXRegistry.obj) : error LNK2001: unresolved external symbol __imp__RegOpenKeyExA@20
    foxd.lib(FXRegistry.obj) : error LNK2001: unresolved external symbol __imp__RegEnumValueA@32
    foxd.lib(FXRegistry.obj) : error LNK2001: unresolved external symbol __imp__RegSetValueExA@24
    foxd.lib(FXRegistry.obj) : error LNK2001: unresolved external symbol __imp__RegDeleteKeyA@8
    advapi32.lib
    foxd.lib(FXApp.obj) : error LNK2001: unresolved external symbol __imp___TrackMouseEvent@4 comctl32.lib

    On the other hand, if you get this error message:

    MSVCRTD.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
    

    this indicates that you forgot to change the application's entry-point symbol to mainCRTStartup. See this sectionfor the details.

    Missing support for JPEG or PNG images. If you're trying to use the FXJPEGIcon, FXJPEGImage, FXPNGIcon or FXPNGImage classes and it doesn't seem to be working, it's possible that the FOX library was not compiled correctly to include support for these image formats. Load the FOX library project into Developer Studio and then launch the Project Settings dialog box. On the C/C++ tab of this dialog box, look at the list of preprocessor definitions and confirm that HAVE_JPEGLIB_H (for JPEG support) and/or HAVE_PNG_H (for PNG support) are defined. You will also want to be sure that the compiler can find its way to the JPEG and PNG header files, so make sure the include paths are correct as well. Note that these settings are only relevant for building the FOX library itself; you don't need to have HAVE_JPEGLIB_H or HAVE_PNG_H defined when compiling your FOX-based application code, nor do you need access to the JPEG or PNG header files. You will need to link your applications to the JPEG or PNG libraries, however.

Other Tips...

    1. If you find yourself using FOX on a regular basis (as we hope) you might want to add its installation directory to the lists of standard directories searched by Visual C++ for include files and libraries. To do this, open the Options dialog by selecting the Options... command from the Toolspulldown menu, and switch to the "Directories" tab:
      • Select "Include files" from the "Show directories for:" drop-down list and the list of directories should show the default include path (in order). Add your FOX installation's include directory to the end of the list. Then select "Library files" from the drop-down list and add your FOX installation's lib directory that list.

    2. If you do link your executables against the FOX DLL, the executable needs to find it in the path when it runs. You can copy this DLL by hand to some directory in the path, but you may want to instead make the following modifications to automatically copy the DLL into your application's build directory (requires Windows NT). Start by opening the Project Settings dialog box and change to the "Post-Build Step" tab (it's on the far right, you'll need to scroll over to see it!)
      • Add a description such as "Updating DLL..." to indicate what's going on; this message gets printed to the Build output window in Developer Studio when these commands are executed. Then, add the following two commands to the "Post-build command(s)" list:

      REPLACE C:\src\fox\lib\foxdlld.dll /U Debug
      IF NOT EXIST Debug\foxdlld.dll COPY C:\src\fox\lib\foxdlld.dll Debug
      You should, of course, use the correct path to the DLL for your FOX installation. You should also be sure to copy the release build of the DLL (named foxdll.dll) to your project's Release subdirectory, if that's the configuration you're configuring.
       
    3. You may want to add the fox or foxdll project (fox.DSP or foxdll.DSP) to your own workspace, and configure a dependency
      from your application's project to the appropriate library's project. You
      can do this by selecting the Dependencies... option from the Project pulldown menu, to open the Project Dependencies dialog box. That way you can simply unpack a new FOX drop over the existing tree and your project will first re-compile the new files before compiling your project.

Using the MinGW Compilers

    The FOX library, and FOX-based applications, can now be built using the MinGW compilers and related Unix-like tools. If you are not familiar with this development option, but would like to know more, I recommend starting with the MinGW FAQ list.

    Disclaimer. The process described here has been tested using the most recent release of the Cygwin tools (i.e. the 1.1.x series) and the MinGW tools, under Windows 2000.

    To get started, you will need to download and install the following packages:

    • The Cygwin tools, or
      some reasonable substitute. You will at least need a bash-compatible shell
      and GNU make version 3.76.1 or earlier;
    • The latest MinGW distribution; and,
    • The latest FOX distribution;

    If you want to use OpenGL, you'll also need to download the OpenGL header files MinGW; they are not a standard part of the packages listed above. Check the MinGW FAQ listfor more information about how to develop OpenGL applications using MinGW.

    Now, because of some problems with the version of make distributed with MinGW (currently, make-3.77) you'll need to use an earlier version of make, such as the one distributed with the Cygwin tools (make-3.76.1). Ensure that the correct version of make is picked up by either renaming or deleting the version of make distributed with MinGW.

    Next, unpack the FOX distribution somewhere by typing, e.g.,

      tar xzf fox-0.99.149.tar.gz
    

    and then go to the top-level directory of the FOX distribution and type:

      ./configure
    

    If configure stops rather quickly, right after it prints the message about "checking whether make sets ${MAKE}", it's picking up the wrong version of make (see the notes a few paragraphs earlier).

    Once configure is finished doing its thing, and assuming there were no errors, build the library and supporting executables by typing:

     make
    

    and then sit back and wait ;)

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/datatarget.html0000664000175000017500000002451312130340076013106 00000000000000 Documentation: DataTargets
Documentation: DataTargets [Remove Frame]

    A common application of GUI development is the collection of inputs from the user in the form of booleans, numbers and strings of text.  This usually involves building a dialog panel with a collection of controls such as text fields, sliders, and other input controls.  The GUI developer then would write callback handler functions so as to be notified when any of these controls changes value.  Often, the developer is forced to fill up these controls to reflect the initial suggested values.

    This process is common enough that we have found that it makes sense to support it with a much more declarative programming style:-  instead of writing many callback routines, and routines to preset the GUI controls with their initial value, we have implemented a more easy to use method in the form of the FOX FXDataTarget class.

    The FXDataTarget acts as an intermediary between a program variable, such as an integer or string, and a FOX widget such as a FXTextField or FXSlider.   The FXDataTarget works by associating a variable in the application code with one or more control widgets in the GUI.  Several controls may be connected to the same data target, although each data target is associated with only one variable at a time.

    A FXDataTarget forms a bi-directional channel through which a GUI control can communicate with a variable in an application program.  Thus, once the GUI is created and connected via the FXDataTarget, the GUI controls will automatically display the current value of that variable, and when the user starts interacting with a control, the variable will be automatically changed.  Moreover, if several GUI controls are connected to one single FXDataTarget, each of these controls will automatically update when the variable has been changed.

Example Usage

    Suppose you are writing a program to enter personnel data by means of a dialog.  One or the first things you may want to do is to design a data structure which is to hold this information:

    // Employee record
    struct Employee {
      FXString name;
      FXint    number;
      FXdouble salary;
      FXString address;
      };
    

    Lets make a dialog box which obtains this information from the user, and of course we'll use the FXDataTargets to eliminate as much coding as possible; first comes the header file (we'll omit some details in the interest of brevity):

    /* EmployeeEntry.h */
    
    // Employee Information Entry Dialog
    class EmployeeEntry : public FXDialogBox {
      FXDECLARE(EmployeeEntry)
    public:
      Employee record;   // Record we'll be modifying
    private:
      FXDataTarget nameTarget;
      FXDataTarget numberTarget;
      FXDataTarget salaryTarget;
      FXDataTarget addressTarget;
    public:
      EmployeeEntry(FXWindow* owner);
      };
    
    

    Well, that's basically it.  Now for the implementation file:

    /* EmployeeEntry.cpp */
    #include "EmployeeEntry.h"
    
    FXIMPLEMENT(EmployeeEntry,FXDialogBox,NULL,0)
    
    EmployeeEntry::EmployeeEntry(FXWindow* owner):
      FXDialogBox(owner,"Enter Employee Information"),
      nameTarget(record.name),
      numberTarget(record.number),
      salaryTarget(record.salary),
      addressTarget(record.address){
    
      ...
      new FXTextField(frame,5,&nameTarget,FXDataTarget::ID_VALUE,...);
      new FXSpinner(frame,5,&numberTarget_target,FXDataTarget::ID_VALUE,...);
      new FXTextField(frame,5,&addressTarget,FXDataTarget::ID_VALUE,...);
      new FXSlider(frame,&salaryTarget,FXDataTarget::ID_VALUE,...);
      new FXTextField(frame,5,&salaryTarget,FXDataTarget::ID_VALUE,...);
      ...
      new FXButton(frame,"Cancal",NULL,this,FXDialogBox::ID_CANCEL,...);
      new FXButton(frame,"Accept",NULL,this,FXDialogBox::ID_ACCEPT,...);
      }
    
    

    We have of course omitted some details here regarding the layout and other  visual  paraphernalia.  Note that we have connected the data target controlling the salary member to both a text field as well as a slider, so we can set the salary either way.  So far, it sounds rediculously simple, doesn't it? The secret is, it really is! Next, we're getting ready to use this new panel.  Here's how we would do that.  Lets say we have selected the employee from a big array of employee records, and we enter the following callback handler to edit one of the entries in this array:

    /* EmployeeDatabase.cpp */
    #include "EmployeeEntry.h"
    
      ...
    
    Employee *employeedatabase;     // Database of records
    int       currentemployee;      // Current employee number we're going to edit
    int       numberofemployees;    // Total number
    
      ...
    
    long EmployeeDatabase::onCmdChangeInformation(FXObject*,FXSelector,void*){
      EmployeeEntry dialog(mainwindow);
      dialog.record=employeedatabase[currentemployee];    // We will work on the copy
      if(dialog.execute()){
        employeedatabase[currentemployee]=dialog.record;  // We accept the change
        }
      return 1;
      }
    

    In the above code, we copy the employee record from the database, and then pop up the EmployeeEntry dialog by calling its execute() member function. When this dialog shows up, it will initially display the old information from employeedatabase[currentemployee].  After editing it with the dialog, if the user hits the Accept button, execute() will return true and we copy the changed record back into the database; if the user hit the Cancel button, execute() we will simply do nothing and return from the callback. The EmployeeEntry dialog's destructors will automatically clean up the mess.

More Advanced Usage

    The above shows the most basic usage of FXDataTarget.  It uses the ID_VALUE message.  When a FXDataTarget receives this message, it will ask the sender of the message for the desired value, and then place that value into the connected program variable.
    However, the FXDataTarget also understands the ID_OPTION messages.  With these messages, the actual value is encoded in the message ID itself, by adding the value to the message ID.

    For example, to set a program variable to the value 10, we could send the FXDataTarget a message ID_OPTION+10.  With the ID_OPTION messages we can for example connect a FXDataTarget to a number of FXRadioButtons, and set a program variable by clicking on one of several radio buttons:

      enum Color {Red, Green, Blue};
    
      FXint color;
      FXDataTarget colorTarget(color);
      color=Red;
    
      new FXRadioButton(matrix,"Red",option_target,FXDataTarget::ID_OPTION+Red,...);
      new FXRadioButton(matrix,"Green",option_target,FXDataTarget::ID_OPTION+Green,...);
      new FXRadioButton(matrix,"Blue",option_target,FXDataTarget::ID_OPTION+Blue,...);
    

    Here we set the variable color to one of the three values {Red, Green, Blue} by directly connecting the FXDataTarget to three FXRadioButtons.
    When the FXDataTarget receives an ID_OPTION message, it changes the program variable to (message-ID_OPTION).  Using this method, its easy to input yes/no values, lists of choices, and so on, all without having to write explicit callback handlers.

How It Works

    The FXDataTarget idea works because of FOX's built-in GUI Update mechanism.  The GUI Update mechanism is responsible for refreshing the state of each widget in your program, based on the state of your application data structures.  Basically, each widget periodically inquires about its state by sending its target a SEL_UPDATE message.

    When an FXDataTarget receives a message of type SEL_UPDATE, it reads the value of its associated variable and updates the sender of the message by means of another message.  Note that the FXDataTarget does not need to know what type of Widget did the sending.

    There are two ways the FXDataTarget can receive updates: by an ID_VALUE message or an  ID_OPTION message.  The former type is usually generated by a valuator control, such as an FXSlider.  When a message from a valuator control is received, FXDataTarget responds by sending back an ID_SETINTVALUE, ID_SETREALVALUE, or ID_SETSTRINGVALUE message to the sender of the request.

    When a FXDataTarget receives a message of the form (ID_OPTION+i),  it resonds by sending back one of two messages: ID_CHECK or ID_UNCHECK, depending on whether the value of the associated variable is equal to i.

    In the example above, the "Red" radio button will receive an ID_CHECK message, because the initial value of the variable color is red.  The other radio buttons will receive the ID_UNCHECK message.

    All of these methods explained here are deployed in the datatarget example program.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/foreword.html0000664000175000017500000002301012130340076012604 00000000000000 Home
Documentation: Foreword [Remove Frame]

    FOX stands for Free Objects for X. It is a C++ based class library for building Graphical User Interfaces. Initially, it was developed for LINUX, but the scope of this project has in the course of time become somewhat more ambitious. Current aims are to make FOX completely platform independent, and thus programs written against the FOX library will be only a compile away from running on a variety of platforms.

    The idea of designing and implementing something like FOX started in spring '97.  In the course of using several different systems, ranging from OSF Motif, NeXTstep,  MS Windows,  and Intergraph's System 5, the author has developed some conception of what the ideal GUI toolkit was supposed to look like.  After a couple of false starts, and some experimentation with various ideas under different platforms, FOX was born.

    Because it draws from so many sources, most experienced GUI programmers will probably recognize a few of the underlying concepts; but only FOX brings all these together in one integrated system.

    Some of the ideas and concepts underlying the FOX system are listed below:

    • Ease of Development.  Developing Graphical User Interfaces is a fairly complicated process. FOX reduces the burden on the developer significantly:

      • Orthogonality.  A few powerfull concepts that can be recombined in many intuitive ways is preferable to a hodge-podge of ad-hoc solutions. In a well designed orthogonal toolkit, the developer will be able to transfer knowledge gained from one scenario to another.

      • Consistency.  Consistent naming of member functions, consistent ordering of arguments and default parameters, as well as consistent behaviour of each Widget makes the system much more easy to learn.

      • ConcisenessEvery line of code not written is a correct one. So minimizing the number of lines of code to accomplish the job is a Good Thing. FOX helps with this by being able to create and initialize most Widgets with a single line of code. The C++ capability for default parameters to arguments is heavily used, and a lot of glue code to cement Widgets to each other is eliminated completely by the ability of FOX Widgets to send messages to each other.

    • C++ Based. Since FOX is completely written in C++ from the ground up, developers can easily augment the basic toolkit with their own Widgets. Since FOX is not a wrapper around some legacy toolkit, these third-party Widgets are full citizens in the FOX system. Many GUI toolkits have been written before the advent of C++. Some toolkits have subsequently been repackaged into C++ wrapper libraries, to give the C++ programmer the feel of working with a C++ based toolkit. However, this approach denies users some of the benefits of C++, such as derivation and overloading to induce new behaviour, as the basic functionality is not really implemented in C++.

    • Modern GUI Features.  FOX provides a rich set of Widgets, and moreover, this set is easily extensible by application programmers. In the core system, several basic facilities are supported which are part and parcel of current GUI development:

      • Icons and Images.  FOX provides easy to use facilities for creating icons and images.  Resources such as Icons and Images can be compiled into the application, and may be instantiated as needed. FOX supports both GIF and BMP image formats.

      • A Registry, or persistent settings database whereby applications  can save certain parameters such as recent file list, customizations, and so on.

      • Tool Tips.  Controls in FOX support Tool Tips or Balloon Help.  When the user hovers the cursor over a button or other control, a small yellow window appears near the cursor with further information detailing the button operation.

      • Status Line Help.  Besides Tool Tips, FOX also supports additional help on the status line for each Control.  The Status Line typically displays more extensive help information about the Control the cursor is over than a Tool Tip.

      • Floatable Tool Bars.  Toolbars can be interactively dragged and docked or undocked. Dock sites allow for parking of toolbars side-by-side.

      • Tab Books.  Ever more sophisticated applications need considerable more screen real-estate.  With Tab Books, several panels of GUI Widgets may be placed on top of each other and flipped over, similar to browsing through file folders.

      • Tree Lists.  Many applications need to present hierarchically organized information to a user.  The FOX Tree List provides a concise view of a hierarchy, allowing users to open and close sublists with the click of a mouse.

      • Multiple Document Interface (MDI) Widgets.  FOX supports both Single Document Interface applications as well as Multiple Document Interface applications, by providing convenient Widget sets for this purpose.

      • 3D OpenGL Widgets.  FOX supports simple, as well as advanced 3D Widgets which make it easy for developers to get started writing 3D enabled applications.

      • Drag and Drop.  FOX supports Drag and Drop using XDND. Using drag & drop, a user can move data objects from one Widget to another, even between applications running on different machines.

      • Selection.  FOX supports the transfer of data between Widgets (possibly in different applications) through the X Selection mechanism.

      • Clipboard Support. Ability to transfer arbitrary data structures between programs via cut & paste, even between programs running on different machines.

      • Timers, Idle Processing.  FOX supports both scheduled timers, i.e. pseudo-events that will cause some action to happen in the future, as well as Idle Processing, or background actions that execute while no activity is performed by the user.

      • WYSIWYG Rendering. FOX's device context classes provide abstract rendering facilities which allow a single rendering code to produce output to an [user extensible] variety of output devices.

      • Facilities to watch network sockets, pipes, and other i/o channels, as well as signals. Also supported are a thread class, semaphores, mutexes, conditions. The FOX library uses reentrant library functions when compiled normally.

      • C++ Exceptions are used in the library to signal errors during allocation of memory, windows, and other system resources, permitting application to handle low-resource conditions gracefully.

    • GUI Updating.  FOX makes it easy to keep the graphical user interface consistent with your application data structures using a unique facility called GUI Updating.  In essence, the FOX Controls such as Buttons, Sliders, and so on will continuously interrogate the application  and change their state; for example, from enabled to disabled, checked to unchecked, pressed or unpressed, etc.

    • Target/Message Based.  FOX is a target/message based system, in that all GUI events or actions are ultimately translated into messages sent between objects.  As FOX Widgets are also objects, glue-code which would normally have to be written by the developer can often be eliminated by simply making one FOX Widget directly the target of another.  In some cases, these messages may even be bi-directional.

    • Platform Independence.  Applications using FOX are not dependent directly on X-Windows.  As all platform-dependencies are completely hidden from view by the FOX System (applications don't even include X-Windows header files!!), such applications will be easily ported to other platforms, simply by recompiling.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/footer.html0000664000175000017500000000046612130340076012265 00000000000000

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/window.html0000664000175000017500000001646412130340076012303 00000000000000 Documentation: The FXWindow Class
Documentation: The FXWindow Class [Remove Frame]

    The FXWindow class manages a window on the screen. FXWindow is the base class of all FOX GUI widgets such as buttons and sliders, in other words, all widgets are ultimately derived from FXWindow. All windows are organized into a so called widget tree; at the root of this widget tree is the root window which is a special window which represents the entire screen. Top level or shell windows are children of the root window; they're special because top level windows, such as the main window and dialog box, are positioned and resized directly by the user. Layout manager windows are composite windows which may have zero or more children, possibly including other layout managers. Layout managers position their child-windows according to certain layout patterns and layout flags. Child windows or simple windows are windows which do not themselves have any children. Child windows are usually simple controls such as buttons and sliders.

Navigating The Widget Tree

    As each window is positioned somewhere in the widget tree, each window maintains some information about where in the tree it is; this information can be obtained with the following API's:

      FXWindow::getParent()

      This function returns the window which is this window's immediate parent. For the root window, this returns NULL as the root window does not have a parent.

      FXWindow::getRoot()

      This function returns the root window, or the window's ultimate parent.

      FXWindow::getShell()

      This function returns the top level or shell window of this window. The shell window is always a child of the root window.

      FXWindow::getOwner()

      This returns the window's owner, if any. The owner of a window is the window that is resposible for this window in some way. For example, a modal dialog may be owned by a main window. The system usually ensures that a top level window stays on top of the window that owns it. Windows which have no owner return NULL as the owner window.

      FXWindow::getFirst()

      This returns the first child of this window, if any.

      FXWindow::getLast()

      This returns the last child of this window, if any.

      FXWindow::getNext()

      This returns the next sibling of this window. Use this function to iterate over all windows which have a common parent.

      FXWindow::getPrev()

      This returns the previous sibling of this window.

Querying Widget Tree Information

    There are a number of common questions about the various possible relationships between windows in the widget tree. While it is possible to answer them with the API's above, it is cumbersome and so a number of API's are available to make this more easy:

      FXWindow::isChildOf(window)

      Determines if this window is a child of the given window.

      FXWindow::containsChild(window)

      Determines if this window contains the given window as a child.

      FXWindow::containsChild(window)

      Determines if this window contains the given window as a child; also returns TRUE if the given window is the same as this window.

      FXWindow::numChildren()

      Returns the number of children of this window by counting them.

      FXWindow::indexOfChild(window)

      Returns the 0-based position of the given window in this window's list of children. If the window is not a child of this window then it returns -1.

      FXWindow::childAtIndex(index)

      Returns the child window at the given position, or NULL if the index is invalid.

      FXWindow::commonAncestor(window1,window2)

      This function determines the lowest common ancestor of window1 and window2.

Primary,Clipboard, Drag and Drop Selections

    Many widgets display some data. For example, a text widget can display some text. When the user highlights a range of text, a primary selection is in effect. This primary selection can be obtained by other widgets, or even by other programs. For instance a selection of some text may be pasted into a terminal by means of the middle mouse button under X-Windows (under MS-Windows, the primary selection only works within the same FOX program).

    When a selection is copied or cut to the clipboard, a clipboard-selection is in effect. Usually, a clipboard selection is made by Ctrl-C for copy, or a Ctrl-X for cut. Again, other widgets or other programs can obtain this data from the clipboard. For instance, an application can obtain the clipboard selection by a paste operation, typically invoked by means of Ctrl-V.

    Finally, when a drag operation is started from this widget, a drag-and-drop selection is in effect. Drag and drop selections are only in effect while a drag operation is ongoing. In contrast, a clipboard or primary selection remains in effect until another selection is made (possibly by another application).

    The following API's pertain to the selections:

      FXWindow::hasSelection()

      Return true if this window owns the primary selection.

      FXWindow::acquireSelection(types,FXuinumtypes)

      Try to acquire the primary selection, given a list of drag types. The list of drag types must have been previously registered by means of FXApp::registerDragType().

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/screenshots.html0000664000175000017500000001500412130340076013321 00000000000000 Screenshots Hall of Fame
Screenshots Hall of Fame [Remove Frame]

I.T. Infrastructure Management System

    I.T. Infrastructure Management System written by Jamey Cribbs using FOX and the FXRuby Ruby language bindings.

CFD-VIEW

    CFD-VIEW is an interactive graphics program for post-processing numerical results from CFD and other analysis software. It provides an easy-to-use and interactive environment, with many graphics tools to visualize the flow physics, as well as the ability to extract data relevant to engineering design.

    It has been developed by CFD Research Corporation. CFDRC software has been used for design and analysis of a wide variety of industrial applications involving fluid flow, heat transfer, combustion, fluid-structure interaction and other associated physical phenomena.

Side-by-Side Viewer

    The Side-by-Side Viewer is a tool developed by AcuSoft to allow easy exploration and examination of SEDRIS transmittals, as well as other formats, such as:

    • OpenFlight (FLT)
    • Performer Binary (PFB)
    • Compact Terrain Database (CTDB)
    • Digital Terrain Elevation Data (DTED)

    Side-by-Side also has the capability of displaying multiple databases simultaneously, simplifying the process of finding discrepancies amongst different formats of the same database.

    For more screenshots see: http://www.acusoft.com/products/sbs/gallery.html

Arithmedrill

    Arithmedrill, written by Daniel P. Zepeda,is an attempt to make drilling basic math into an 8-year-old's head a bit more captivating, and therefore more effective. It is basically a game where the child must correctly answer an equation like '3+4' or '3x4' in a given amount of time to 'save' a planet, or other appropriately sized PNG graphic, from being devoured by the sun. Written in Ruby, FOX+FXRuby, this is a free, open source, cross-platform program that runs on Windows or Linux/Unix.

    The equations presented are the subset necessary for Japanese Arithmetic on a soroban. That is, nothing over 10 for addition and subtraction, and nothing over single digits for multiplication.

X File Explorer

    X File Explorer (Xfe) is a filemanager for X. It is based on the popular, but discontinued, X Win Commander. Xfe is desktop independent and is written with the C++ Fox Toolkit. It looks similar to Windows Commander or MS-Explorer, and is very fast and simple. It features file associations, the ability to mount/umount devices, a directory tree for quickly changing directories, the ability to change file attributes, automatic registry saving, the ability to view/create/extract compressed archives, and much more.

Goggles

VORHour

    A timecard/hour registration program developed and used by VORtech. It is written using FOX and is connected via ODBC to a local MySQL Database

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/news2.html0000664000175000017500000012340712130340076012026 00000000000000 News
News [Remove Frame]

October 18, 2004 - FOX DEVELOPMENT 1.3.16

  • FXToolBarGrip and FXToolBarTab now support tooltips.
  • Fix FXBitmap::crop() to match FXImage::crop().
  • Pass margins in FXText's constructor.
  • Changed type of FXSELID and FXSELTYPE back to unsigned short.
  • Fixed overstrike bug in FXTextField.
  • FXTabBar and FXTabBook now properly observe LAYOUT_FIX_WIDTH and LAYOUT_FIX_HEIGHT in the FXTabItems.
  • Fixed bug in Adie preferences panel style editing; thanks to Sander for discovering this.
  • Made some enum's public in various list items; some options were inaccessible to user programs.

October 9, 2004 - FOX DEVELOPMENT 1.3.15

  • The raise() API does not make a window the foreground window anymore except if the window is derived from FXTopWindow; this only pertains to WIN32.
  • Adie highlighting pattern for PHP added.
  • Added some tests in FXString to check for NULL arguments passed to assign and other API's.
  • Fixed some problems in FXWString.
  • Fixed fox-config --cflags output: now inludes full header path.

October 9, 2004 - FOX DEVELOPMENT 1.3.14

  • Fixed introduced problem in FXDirBox.

October 7, 2004 - FOX DEVELOPMENT 1.3.13

  • Creation scarce resources such as images, icons, fonts, cursors, and windows now may generate exceptions instead of simply failing. There are new exception types for these resources: FXWindowException, FXImageException, FXFontException. Note that exceptions are only thrown in case of errors due to limitations at run time; programming errors are still handled via fxerror().
  • Added new API, tryHandle() to FXObject, which performs an exception-safe message call through handle(). This is now used by most widgets to push messages to their targets.
  • Spruced up TARGA reader with alpha channel support in colormaps.
  • Simplified internals on some widgets, in particular, eliminated some useless self-messages.
  • Expanded documentation on some widgets.
  • Added friend functions to FXVec4d and FXVec4f to construct plane equations from points, point and vector, or point and distance.
  • Added API to FXVec4 for intersection test with line segment.
  • Added API to FXVec4 for signed distance to point (if FXVec4 contains a normalized plane equation.
  • Added API to FXVec3 to get normal to 3 points, or (approximate) normal to 4 points.
  • Changed defintion of FXSphere intersect with plane to mean normalized plane equation. This is much faster as it eliminates bunch of multiplies and square root.
  • Fixed the above function to return more sensible values.
  • Calling setCurrentItem() on the FXListBox and FXComboBox now scrolls the current item into view inside the associated popup list.

September 22, 2004 - FOX DEVELOPMENT 1.3.12

  • Implemented new widget, FX7Segment, which draws LCD-style text. This will look nice for clocks and timers. Of course FX7Segment can be hooked up to a FXDataTarget.
  • After creating a new directory in FXFileSelector, the panel immediately switches to that directory.
  • Fixed bug in FXMenuButton which caused its FXPopup menu to be improperly resized first time around.
  • Changed looks of FXDirSelector and added some much needed functionality to it; its fully on a par now with FXFileSelector. This includes setting bookmarks and so on.
  • Removed API to FXApp: awaken(); it will be split off into its own special class.
  • Eliminated getClassNameLength() API which appears to be only used once in the entire library. Also eliminated corresponding member variable and adjusted FXIMPLEMENT and FXIMPLEMENT_ABSTRACT macros.
  • Added parameter to FXMutex, for creation of recursive mutexes.
  • Added API addObject() to FXStream which allows additional objects to be entered into its hash table.
  • FXStream now uses FXHash internally, eliminating some duplicate code.
  • Added more extensive documentation in FXMDIChild and FXMDIClient.
  • Added some API's to FXHash for use in other applications.
  • Fixed some border cases in FXHash (when only 2 items in table).
  • Extended capability of crop(). It can now accept arguments larger than the original image. It has an extra argument which determines the color with which new pixels will be filled. For example, given an original image of size wxh, a call to crop:
         image->crop(-1,-1,w+2,h+2,FXRGB(255,0,0));
      
    will resize the image and give it a red border all around.
  • Added function getWMBorders() to FXTopWindow to obtain window-manager provided borders. This allows you to determine the position of the window as the user sees it. Note that if you have an unusual window manager, this may not work properly.

September 8, 2004 - FOX DEVELOPMENT 1.3.11

  • Added new standard dialog, FXChoiceBox. It allows picking an item from a list.
  • Added new API to FXApp: awaken(). This can be called by other threads to wake up the main user interface thread; it also causes a GUI update cycle, so you can call this in case a thread has changed something that needs to be reflected in the user interface.
  • Added a new layout manager, FXDockSite. Do not rely on this yet, it is still under development. The purpose is ultimately to enable side-by-side docking toolbars.
  • The API's findItem() and findItemByData() in FXTreeList, FXFoldingList, etc. have been updated; they now search the entire tree instead of just looking at a given level.
  • Made slight optimization to FXFileDict; no longer creates icon only to discover that an icon-file does not exist.
  • Border cases in FXFile::simplify() and FXFile::expand() now handled better.
  • Added missing flavors for FXInputDialog; just as FXMessageBox, you now have stand-alone versions of these [as opposed to having to have an owner].
  • Added API fxdllError() to FXDLL which can be used to obtain the error message.
  • Fixed some tooltip trouble in FXPicker.
  • FXRegion::bounds() now returns bounding rectangle as return value instead of as a parameter; this is more succint in usage.
  • Adie now understands SUN CC compiler error syntax when hitting ^E to open a highlighted error message.
  • Fixed some Adie syntax patterns.

August 22, 2004 - FOX DEVELOPMENT 1.3.10

  • Finished implementation of FXRuler widget. FXRuler widget can be used to provide a scale above (or besides) a document. It provides document margin control, tick marks, and optional indentation settings. The entire ruler scale can be scrolled in case the document is larger than the visible area allows for.
  • Updated fox.spec for package building; changed fox.spec.in so version numbers are automatically embedded into fox.spec.
  • Fixed some inconsistent names in FXThread; hopefully, this will be the last API change for 1.4.
  • Added feature to allow filter entry in the Filter combo box of the file dialog; this feature can be enabled with the allowPatternEntry() API's.
  • Changed some enum-names in FXMemMap due to conflicting names on SGI machines.
  • Removed expensive update handler for FXText and FXTextField: the method is not scalable to large numbers of widgets, or large numbers of FOX applications running on a desktop. The method may be reinstated if a better idea arises.

August 15, 2004 - FOX DEVELOPMENT 1.3.9

  • Added classes FXSemaphore, FXCondition; tweaked API's of FXMutex, FXMutexLock just a bit. Note that the underlying implementation of the synchronization primitives is concealed from the application code; however, this does entail some guesswork about the probable sizes of these data structures. There are asserts in the code to verify the assumptions; however, until you know that these assumtions are correct, I recommend compiling with debug mode the first time you're porting to a new platform.
  • Having SEL_PASTE_SEL in FXText and FXTextField check for clipboard data was, in hindsight, probably not a good idea due to possibility of extraordinary amounts of network traffic in large applications. The idea might come back at some later date when we have a better, more scalable, implementation concept.

August 13, 2004 - FOX DEVELOPMENT 1.3.8

  • Added class FXSplashWindow which puts the new shaped window feature to good use.
  • Fixed bug inquireDNDTypes().
  • Added FXMemMap class for memory mapped files.
  • Implemented FXTopWindow placement patch.
  • Update handler for SEL_PASTE_SEL in FXText and FXTextField now checks for clipboard data.
  • Added some missing API's to FXFileSelector and FXFileDialog.
  • FXFileDialog now remembers its size, file display mode, in the registry.

August 13, 2004 - FOX STABLE 1.2.9

  • Fixed bug inquireDNDTypes().
  • Back-ported FXTopWindow placement patch.

August 13, 2004 - OLD FOX STABLE 1.0.53

  • Fixed bug inquireDNDTypes().

August 2, 2004 - FOX STABLE 1.2.8

  • Fixed bug in TARGA input routine fxloadTGA().
  • Added support for 15bpp TARGA format.
  • Updated config script for cygwin thread.
  • Fixed configure issue with fox-config installation.
  • Added FX_NO_GLOBAL_NAMESPACE to fxkeys.h.
  • Fixed fxloadICO(), which was not accepting icons with 4 colors.

July 31, 2004 - FOX DEVELOPMENT 1.3.7

  • Added support for SUN Raster Image Format; thus, we have new classes FXRASImage and FXRASIcon, as well as fxsaveRAS() and fxloadRAS().
  • Added RAS support to ShutterBug also.
  • Fixed configure test for XShape support.
  • Fixed configure issue with fox-config installation.
  • Added preliminary support for XRandR (I can't test it on my video card as the NVidia driver does not seem to support it; so its as yet untested).
  • Added getCurrentUserName() API to FXFile; it returns the current user name.
  • Added:
            #ifndef FX_NO_GLOBAL_NAMESPACE
            using namespace FX;
            #endif
      
    to fxkeys.h.

July 28, 2004 - FOX DEVELOPMENT 1.3.6

  • Added new API's to FXWindow for non-rectangular widgets. The new API's are:
    • setShape()
    • clearShape()
    The setShape() API has several overloads; you can set the shape based on an FXRegion, a bitmap, or based on the shape mask of an icon.
  • Updated the Shutterbug application to draw a shaped window, just the single icon:- its a window with legs ;-).
  • Added a setRootWindow() API to FXApp which allows setting a custom root window. Changing the Root Window absolutely must be done prior to constructing any other widgets.
  • Adie now only pops up the "File Changed Externally" dialog when the focus moves into the window.
  • Added setData() API to FXImage. This allows you to set the image buffer of the FXImage after construction.
  • Relaxed check in fxloadICO(). It was not accepting icons with 4 colors.
  • Implemented Lothar's patch to tooltip placement into FXToolTip; prior to the patch, a possibility existed for the tooltips to appear too close to the taskbar on Windows.

July 18, 2004 - FOX DEVELOPMENT 1.3.5

  • Added drawRoundedRectangle(), fillRoundedRectangle() and drawEllipse() and fillEllipse() API's to device context functions.
  • Updated Windows VC++ project files for FXIFFImage.cpp, FXIFFIcon.cpp and fxiffio.cpp files.
  • Added test for XShape extension to configure.in.
  • PathFinder now can show IFF files if double-clicked.
  • Updated dctest with some drawings for new drawEllipse() and drawRoundedRectangle() API's.

July 17, 2004 - FOX DEVELOPMENT 1.3.4

Finally, most of my coursework is now behind me (I've been teaching a Computer Science class this summer!), and today was the first day I could pick up normal FOX development again. I still have a few more lectures and finals to prepare, but I thought it'd be nice to make a release of the latest additions.

  • Added for Amiga IFF files; this includes new classes FXIFFImage and FXIFFIcon. Currently, it supports loading only, and files of type normal, HALFBRIGHT, HAM, HAM8, and 24-bit support. I am interested to add Maya IFF support also, but I have insufficient information and I have no sample files of this format.
  • An application-side FXMutex is now available. You can assume that each callback message handler runs protected under this lock, and the lock is released when blocking for events (thus, 99% of the time, the mutex is not held by the GUI thread).
  • Fixed issue with our own vsscanf() implementation which is used if no native version of this function is available.
  • FXListBox, FXTreeListBox and FXComboBox should not react to arrows when disabled.
  • Removed ID_QUERY_TIP, ID_QUERY_HELP in favor of new message types SEL_QUERY_TIP, SEL_QUERY_HELP. The advantage is that we can (and do!) now bounce the ToolTip and Status help messages to the target object first; this allows your program to override the tooltip and status line help messages based on the widget from which the messages originate.
  • Added findItemByData() to various list widgets so one can determine the item from the void* ptr passed during creation. This is handy when the list widgets are filled with pointers to data in the application program and one has to resolve these pointers back to items. Contributed by Mal Goris.
  • The function fxloadPPM() returned FALSE, even if successful. It should return TRUE if successful.

June 18, 2004 - FOX DEVELOPMENT 1.3.3

  • FXTreeList, FXList, FXIconList, FXFoldingList now invoke layout() inside makeItemVisible(), if necessary; this removes some problems with scrolling item into view just after the list was populated.
  • Removed a great number of compiler warnings again.
  • Made getItemAt() and makeItemVisible() virtual again.
  • Fixed small bug in FXSpring widget.
  • Adie now recognizes filename(linenumber) : error message when you invoke "Goto Selected". It will load the file and jump to the line number.
  • Also, another update has been made to the syntax pattern file; please send your submissions for syntax patterns for other programming languages!

June 11, 2004 - FOX STABLE 1.2.4

Minor bug fix in FXObjectList which manifests itself on 64 bit machines; updating should not be necessary for 32 bit users.

June 9, 2004 - Web Page Updated

Updated FOX Projects web page with new entry, XTC [X-Windows Test Control] application which was developed by Daniel K. Osawa for Intel Corporation's Enterprise Products Group.

June 3, 2004 - FOX STABLE 1.2.3, STABLE 1.0.52

I discovered a small bug and retroactively fixed the FOX 1.2 as well as the FOX 1.0 releases. The particular bug was in the vector classes return value of the operator!(), which should have been int. This has now been fixed.

May 18, 2004 - FOX STABLE 1.2.1

As happens with a major release, some little tidbits were overlooked; so here goes a small update with a couple of small fixes.

  • Fixed some small bugs in Adie C++ patterns.
  • The Library should now be called libFOX-1.2 of course!
  • Forgot one file for the Borland C++ Makefile.bc in Adie.
  • getCurrentContext() API needed to be stubbed out when building with NO OpenGL.

May 16, 2004 - FOX STABLE 1.2.0

Here it is: the stable 1.2 release! I'm going to be extremely busy in the next few months, so I figured its good to get it out now!

  • The A.d.i.e. Editor has a new syntax coloring engine! Since the new engine incrementally colorizes the text buffer, working with the editor on large text files no longer feels sluggish, but very responsive now. The old registry-based patterns setup is also gone, in its place we now have a syntax file. Windows users will enjoy this as this means you can just drop the provided Adie.stx file in your $PATH and then you're ready to go!
    The syntax file does not specify colors, but only symbolic style values; the colors are still specified using the registry. Since the initial color settings are rather boring, you will have to change the colors using the Preferences Dialogs. This needs to be done only once, the colors will be saved to the registry after that. Future versions will probably provide some default color setup.
  • The current style file contains some preliminary patterns for C++, Python, and Ruby, as well as a few other languages. I expect to provide additional patterns, and I welcome contributions in this area.
  • The new A.d.i.e. can handle multiple top level windows.
  • A reminder:- the A.d.i.e. Editor is licensed under GNU General Public License, and not Lesser GPL like the FOX Library itself. There has been some confusion about this in the past.
  • Also, fixed small problem with FXGLVisual::isBufferSwapCopy().
  • Simplified blinking cursor code in FXText; also fixed some unpainted pixels during blink near margins.
  • Fixed a few other minor things, as usual.

May 13, 2004 - News

What's going on:

  • My DSL provider changed IP numbers on me; I had hoped to change my domain registrar at the same time, so as to have minimal disruption. Alas, it didn't work out that way; as of now, the registrar has been changed and is set up, but the old registrar still maps fox-toolkit.org to their parking site. The good news is, I have also registered fox-toolkit.com and this should now be fully operational.
  • Meanwhile, Sander has registered fox-toolkit.net and this site now holds the FOX community web pages.
  • On the FOX development front, I have been working on the Adie editor. I started uprooting the way style and syntax information is read in, because for people running on Windows its pretty hard to make use of the standard style and syntax files. With the new system, the style and syntax descriptions will just be read from an ordinary file which you can download and place on a specific location for Adie to find.
    While working on this, I decided to make a small side-step and implement the incremental style recoloring I had been planning to do. This small side-step turned out to be a little more involved than originally planned.
    The good news is, I just completed some of the code restructuring and it appears that it works! This means I've now come back to the issue of the style and syntax file reader; hopefully I will have something for y'all in the next couple of days.
  • There have been a few minor bug fixes in FOX, and these will go out at the same time.
  • Totally unrelated to FOX, I have recently bought a NVidia CineFX based video card and have been playing with that. I have managed to do some cube- and sphere-environment mapping, and even played around with some OpenGL vertex-programs. My next project is to see how I can do environment mapped bump mapping, and write some fragment-programs as well. Of course, all this is done using the FOX FXGLViewer!
    The new programmable GPU's are certainly very exciting, and I'm hoping to be able to get more into it. Perhaps a few new FOX 3D capabilities will result from it one of these days.
  • Finally, it appears that due to changing circumstances, my spare time will be extremely over-committed until the end of July:- I will be teaching some undergraduate computer science classes and this will absorb most of my spare time in the coming months. I hope to be able to whip out this upcoming release before I'm really getting bogged down in it.

April 24, 2004 - New drop: DEVELOPMENT FOX 1.1.53

Collection of bug fixes today:

  • New function fxwuquantize() added for quantizing colors using Wu's method. This algorithm may be used instead of the Floyd-Steinberg fxfsquantize() which is fast but does not give very nice-looking results.
    Pass FALSE for the "fast" parameter in fxsaveGIF() to use this algorithm.
  • Shutterbug now saves using the new Wu quantization algorithm when saving GIF or XPM.
  • Some more tweaks added to FXPopup::popup() having the menu positioned right when using multiple monitors; in particular, the code now detects when running on W2K and above.
  • FXLabel now responds to ID_SETVALUE, which sets the string.
  • VISUAL_SWAP_COPY mode added for FXGLVisual mode; this currently works on Windows only. When passed, the PIXELFORMAT matcher will favor a BLIT instead of SWAP for double buffer mode.
  • Added tweak in FXCursor to suppress color cursors on Windows versions below Windows 2K; it will perform a thresholding operation if you use a color cursor on Windows NT, 9x.
  • FXFoldingList ID_QUERY_TIP now shows a tip comprising the first text field only, instead of the entire item string.
  • FXDCWindow's setClipRegion() was leaking a region under Windows.

April 16, 2004 - New drop: DEVELOPMENT FOX 1.1.52

Collection of bug fixes today:

  • FXFile::absolute() now returns no trailing "/" when passed an empty filename argument.
  • FXScrollArea now keeps viewport at least 50% filled with data; as size decreases below the point where scrollbars would take up most of the space, the scrollbars will be hidden. Note that you can still scroll using right-mouse dragging or using the mouse wheel.
  • Fixed some minor 64-bit porting issues reported due to Itanium port.
  • Small problem was discovered in cursor blinking inside FXText widget; the clip rectangle used to redraw characters was slightly too large. This primarily affected the Windows port, especially when ClearType was enabled.
  • Addressed the missing FXAPI declarations in the image loader routines; during compilation for DLL build, incorrect external linkage is generated unless the proper declaration has been seen by the compiler.
  • Focus navigation in FXSplitter and FX4Splitter did not take into account the need to skip hidden widgets; this caused focus to land on invisible widgets.
  • Character type functions should be called with argument from 0 to 255; there were a few places in FXText, FXRex, and elsewhere where this was not guaranteed. This issue chiefly affects non ASCII character sets.
  • Added Dmitris' patch to FXPopup to affect placement of popups on multi-head machines under Windows.
  • Hopefully fixed the (hard to reproduce) infinite loop in FXRegistry write-back on Windows.

March 29, 2004 - New drop: DEVELOPMENT FOX 1.1.51

New for this release:

  • Added basic clipboard support to FXTable.
  • Added layout modes for header controls in FXTable; column (row) headers can now be fixed height (width) or have a height (width) which is computed from the contents; the rest of the table will adjust automatically.
  • Added API's to change height (width) of column (row) header controls in FXTable.
  • Implemented selectRow() and selectColumn() API's in FXTable.
  • Fixed problem in FXTable's killSelection() API.
  • FXTable now can understand ID_CUT_SEL, ID_COPY_SEL, ID_PASTE_SEL, and ID_DELETE_SEL messages directly.
  • Fixed getDefaultWidth() and getDefaultHeight() in FXTable when visible rows and columns are set: now properly accounts for the scrollbars and header control layout modes.
  • Added extractText() and overlayText() API's to FXTable to obtain delimiter- separated text block from the table, and to populate the table from a text block, respectively.
  • When cell is changed to NULL we now issue SEL_REPLACED callback message instead of SEL_DELETED. SEL_DELETED should probably be reserved for when rows and or columns disappear from the table.
  • Added global functions fxtoDOS() and fxfromDOS() to convert back and forth to DOS and UNIX string formats.
  • Fixed layout.dsp project for VC++.

March 25, 2004 - New drop: DEVELOPMENT FOX 1.1.50

I'm pretty busy with my software, so some of the additions to FOX are being driven by this work and by bug reports from the mailing list. I hope, however, to devote a block of time to pure FOX work in the weeks to come.
Anyway, here's what is new for today:

  • Added FXRealSlider widget; this was from an implementation initially posted by Kevin Fitch on the mailing list; unfortunately, the original implementation had some serious issues with rounding. Hopefully, I have resolved most of these with this version; the only remaining issue is that we still want some minor tweak to keep the reported values on "nice numbers". Currently, nice numbers can however be achieved when using discrete hops, for example when auto-incrementing, auto-decrementing, or using the mouse wheel.
  • Added fillElms() API to FXElement.h.
  • Added setHasItems() and hasItems() API's to FXTreeItem and FXFoldingItem. These API's can be used to cause placememt of the "+ box" in front of the tree item even though the item may not have children yet. It is used in FXDirList to allow deferring the scan of subdirectories until the item is really opened.
  • Added wheel support to FXSlider and FXRealSlider.
  • Made subclassing FXFileSelector a bit easier.
  • Killed warning printouts in TIFF I/O.
  • Fixed subtle bugs in FXSlider; vertical slider with 0 range was showing head on top instead of on the bottom.
  • Fixed FXDial onMouseWheel: it should always return 1.
  • Changed definiton of "empty range" in FXRangef and FXRanged. Range is empty when negative bounding box, not when negative or zero. This allows range boxes around single points.
    A similar fix was added to FXSpheref and FXSphered bounding spheres.
  • Put back FXSelType for message type declaration in fxdefs.h.

March 10, 2004 - New drop: DEVELOPMENT FOX 1.1.49

New stuff in this release

  • Added API's to FXFont to obtain actual matched font information; this does not work yet for Xft fonts, as there doesn't seem to be a way to determine what font was matched for Xft [If someone knows the scoop please let me know]. Also, there are some questions about retrieving the actual font info under Windows; caveat emptor.
  • Updated the Watcom C++ makefiles.
  • Fixed bug in FOX-supplied vsscanf(). Note that some systems like Linux do not use the FOX-supplied function, but use the system-supplied one, which works correctly.

March 6, 2004 - New drop: DEVELOPMENT FOX 1.1.48

New stuff in this release

  • Added new API's to FXBitmap: crop(), rotate(), mirror(), fill(), and scale(). Thanks to Marc Cartright for initial versions of these routines.
  • Added FXBitmapView, FXBitmapFrame classes for black/white bitmap display; these work exactly the same as the corresponding FXImage classes only they display a 1-bit/pixel FXBitmap.
  • When reswrapping text, the output array is now declared as char instead of unsigned char. You can override this with the new option -u which forces unsigned char mode.
  • Added bitmapviewer demo program.
  • You can now set display foreground color in Calculator.
  • Updated TIFF i/o routines for libtiff version 3.6.1.
  • Fixed FXThread internals for SUN and SGI builds; dropped min stack size test as the symbol is not available on all platforms.
  • Fixed "lost line" from FXDCWindow (presumably, keyboard incident).
  • Fixed various minor bugs in FXBitmap; updated Marc's routines to work for bitmaps with widths which are not multiples of 8.
  • Slight speedup in FXStream block mode save/load by taking byteswap test out of the loop.

February 24, 2004 - New drop: DEVELOPMENT FOX 1.1.47

New stuff in this release

  • Added FXSpheref and FXSphered spherical bounds classes.
  • Broken up FXRange into new FXRangef and FXRanged classes; new and more usable interior representation, plus a number of new API's. Be aware that old code using FXRange needs to be updated; in particular, indexing is now reversed!
  • Moved patternFromText() and extensionFromPattern() to public API in FXFileSelector.
  • Added setMatchMode() and getMatchMode API's to FXFileSelector and FXFileDialog. You can use these to change the wildcard matching options in the FXFileDialog (like e.g. FILEMATCH_CASEFOLD option!).
  • Updated FXGLVisual internals; now searches for 24bit Z-Buffer by default. Since some cards support only 24bit Z-buffer when stencil buffer is also enabled, decreased matching weight of stencil buffer a little bit to weigh Z depth higher.
  • Added API setDiskColor() and getDiskColor() to FXRadioButton so you can change both the ball as well as the disk color of the radio button.
  • Added setBoxColor() and getBoxColor() API's to FXCheckButton so you can change both the checkmark color as well as the background color of the check box.
  • Updated FXGLViewer, FXGLObjects to use new FXRangef classes.
  • Removed FXThread::yield(). Apparently, this functionality is not always available in POSIX.
  • Added FXRegion::reset() to clear region back to empty.
  • Fixed some typo bugs in FXQuatf and FXQuatd.
  • Cleaned up some functions from FXImage's public interface.
  • Fixed bug in FXDCWindow Xft2 font handling.
  • When FXSpinner or FXRealSpinner are set to be non-editable, the value can no longer be changed in any way by the user but only programmatically.
  • Fixed bug in FXImage mirror() implementation; mirror() was not working when mirroring both vertically and horizontally.
  • Added safety check for potential divide by zero in FXMatrix.
  • FXEvent type member was not always set in SEL_MOTION message under WIN32.
  • Added new test program layout originally constributed by Bill Baxter.
  • New code in FXImage render() should leave some memory checkers less confused.
  • Added EOLSTRING macro, which is set to "\n" on UNIX and "\r\n" on Windows; this works similarly to PATHSEPSTRING and PATHLISTSEPSTRING.

February 8, 2004 - New drop: DEVELOPMENT FOX 1.1.46

New stuff in this release

  • Added FXThread and FXMutex classes for threading support.
  • Updated pthread library detection.
  • Updated Xft2 detection when compiling with --with-xft=yes.
  • Removed nr,nc parameters to FXTable; it was found to be confusing. You can use table->setVisibleRows() and table->setVisibleColumns() to force a particular layout size of the table.
  • Fixed FXTable default size computation. It didn't properly account for the headers.
  • Removed confusing "nvis" parameter to FXList, FXTreeList, and other list widgets. Use list->setNumVisible() to set the number of visible items if a non-zero value is desired.
  • Fixed some issues in FXFont and FXDCWindow as suggested by Ivan Markov.
  • Added documentation in the standard tarball delivery.
  • If you have cool applications based on FOX, commercial or otherwise, please consider submitting a small abstract and screenshot for the FOX projects page!.

January 26, 2004 - A New Beginning!

I'm no longer at CFD Research Corp!

What happened?

What is the status of FOX?
  • CFD Research has officially disclaimed all copyright interests in FOX; in practical terms, that means I get to keep full rights and title to FOX.
  • CFD Research will continue to be able to use FOX under the current license.
What will happen to FOX in the future?
  • In the immediate future, I will have a lot more time to concentrate on FOX ;-)
  • FOX will continue to be available under its current license, if I can help it.
  • I am now offering consulting services.
  • I hope to be able to not only work on, but continue to use FOX myself in the future.

Older News

Older news...

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/widgets.html0000664000175000017500000002217412130340076012435 00000000000000 Documentation: Writing your very own Widgets
Documentation: Writing your very own Widgets [Remove Frame]

    FOX makes it very easy to build your own widgets.  It was designed to do this from the ground up.  This is actually one of the prime benefits of FOX vis-a-vis other widget libraries.  As FOX is completely written in C++, and most important functions are overloadable, writing your own widget typically entails picking an existing widget class which looks close to the one you want, and then redefining selected aspects of that widget by subclassing it.

    We illustrate this process with an example from FOX itself:- the FXProgressBar widget.  First, you pick which widget to subclass from; in this case, we subclass of of FXFrame, as the progress bar widget needs to inherit the margins and borders from FXFrame.

    In terms of C++ code, this means:

    class FXProgressBar: public FXFrame {
      FXDECLARE(FXProgressBar)
    

    The FXDECLARE() macro establishes some boilerplate member functions that every class derived from FXObject should redefine. Next, we add some member data.  In the case, we want to add:

    protected:
      FXuint   progress;                      // Integer percentage number
      FXuint   total;                         // Amount for completion
      FXint    barsize;                       // Bar size
      FXFont*  font;                          // Font used for the percentage text
      FXPixel  barBGColor;                    // Background color of bar
      FXPixel  barColor;                      // Bar color
      FXPixel  textNumColor;                  // Text color outside of bar
      FXPixel  textAltColor;                  // Text color inside of bar
    

    There is nothing unusual about this. Standard C++ programming practice!  Next, we make the default and copy constructors protected; while this is not required, it prevents an application programmer from accidentally creating an object with these, causing the creation of an improperly initialized object, which will most certainly cause problems later on.

    protected:
      FXProgressBar(){}
      FXProgressBar(const FXProgressBar&){}
    

    So far so good.  Now comes the meat.  The progress bar should  of course draw itself to reflect the amount of progress.  This should look something like:


    Progress Bar

    This is done by implementing the onPaint() message.  Every time  FOX determines that a widget needs to be repainted, for example, after moving a window out of the way, it sends the widget a SEL_PAINT message.  This message should be intercepted by your widget so that you can make it draw in a different manner.  If you didn't intercept it, the message would be intercepted later on by the base class, which will perform its usual drawing behaviour. Hence, we declare the message-handling routine (handler):

    public:
      long onPaint(FXObject*,FXSelector,void*);
    

    Note that the message handler should be declared public.  The message handler is passed three parameters when invoked: the object that sent it the message, the selector, and a pointer.  The sending object is in this case the widget itself; the selector is a combination of the message-type and message-id.
    The message type identifies the type of message that occurred; here it is SEL_PAINT.  The message id identifies the sender of the message; for mesages from the system itself, this id is always set to zero (0).  The message type and id can be extracted from the selector by means of  two convenience macros: FXSELTYPE(selector) and FXSELID(selector).

    The pointer which is passed to the message handler may refer to different things; for system messages, however, it typically points to a data structure called FXEvent, which contains information about the event that caused this handler to be invoked.

    The onPaint() handler may use the information in the FXEvent structure to determine the rectangle that needs to be repainted.  Widgets (especially complicated ones!) should try and redraw only the indicated area.  This cuts down significantly on expensive drawing commands, as well as reducing visual flickering on the screen.

    Next,  we define the widget's main constructor.  As a first argument, all child-widgets pass in a pointer to the parent widget (Toplevel or shell widgets pass in a pointer to the application object).  Next,  the layout and other options are passed, followed by the x, y coordinate, followed by the width, and height.  All of these have default values, as in many cases the exact widget placement and size is left to a container class such as the Packer or Matrix layout manager.

    The options should be passed in as a bit-wise or (|) of a number of option flags. Care should be taken so as to not conflict with any option flags which have already been used in base classes of this widget .

      FXProgressBar(FXComposite* p,FXuint opts=(FRAME_SUNKEN|FRAME_THICK),
               FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,
               FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD);
    

    The constructor you write should simply pass the arguments to their corresponding arguments in the base class of your class, then initialize the newly added member data to some sensible values.
    The intent is that your widget should be useful without setting additional parameters or calling additional member functions, at least for the most common usage of your widget.

    In order to interact properly with the layout managers, each child widget needs to properly compute its dimensions when asked by its parent.  The two functions involved with this are:

      virtual FXint getDefaultWidth();
      virtual FXint getDefaultHeight();
    

    These two functions compute the minimum width and height of the widget, given the current state of the widget.  The layout managers use this information to place the widgets properly.  In the case of the ProgressBar, for example, getDefaultWidth() computes the widget's size based on the border, left- and right padding, current text font, whether it is horizontal or vertical, and presence of the percentage display.

    Next, the create() function needs to be implemented:

      void create();
    

    The create() function is called in the second stage of the widget instantiation process.  In the first stage, the C++ objects have been created, but no windows have been associated yet with those C++ objects.  The second stage takes place when the application is instantiating the widgets, and building X-Windows associated with the C++ objects.  It does this by recursively travering all widgets, starting from the root window.


    It is sometimes necessary to overload the create() routine, so as to determine resources which were not yet known before.  In the case of the ProgressBar,  until the connection with the X-Server was established, it was not yet known which colors were going to be available, so these colors will have to be allocated in the create() routine. Also, the create() routine makes sure the font is available, by calling font->create() to create the font.

    After implementing the ordinary C++ member functions for your new widget, you may have to define a destructor:

      virtual ~FXProgressBar();
    

    The FOX library usually implements a destructor which intentionally thrashes the object; in this case,  it sets font to (FXFont*)(-1).  Thrashing objects intentionally may cause dangling pointers etc. to be discovered much sooner, and thus ease debugging and increase program correctness.

    Note that FOX does not try trash the other member variables:- thrash-values for the other variables would not be distinguishable from good values anyway.  But a thrash value for a pointer like -1 will most likely cause a SIGSEGV, when accidentally used!!

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/calc.html0000664000175000017500000002217212130340076011667 00000000000000 Adie
FOX Calculator [Remove Frame]

Screenshots

    foxcalc

Where to get it?

    FOX Calculator can be downloaded from the download page either as a Linux or as Win32 Binary (both statically linked with FOX). The source code for FOX Calculator can be found in the FOX distribution. FOX Calculator is GPL Licensed.

Introduction

    FOX Calculator can be downloaded from the download page either as a Linux or as Win32 Binary (both statically linked with FOX). The source code for FOX Calculator can be found in the FOX distribution. FOX Calculator is GPL Licensed. The FOX Calculator is a simple desktop calculator geared toward the programmer. It supports not only a full complement scientific functions, but also common operations that programmers need, such as bitwise operations, bitwise shifting, and base-2 logarithm and exponents, and numeric conversion between hexadecimal, octal, binary, and decimal. The FOX Calculator implements correct operator precedences, so expressions like 2+3*5 yield the correct result, which is 17, and not 25. Also featured is a constant memory, which permanently stores its value even if you exit the calculator and restart it later.

Configuration

    Pressing on the calculator icon brings up the Calculator Preferences dialog. The Calculator Preferences dialog comprises three settings:

    • Settings for the calculator itself
    • Color settings of the button groups
    • Information about the calculator

    In the Calculator settings panel, you can change font used for the display, by pressing the "Set..." button to bring up the standard Font Selection Dialog. You can change the way numbers are printed as well. Checking "Always show exponent" will cause the calculator display always to display the number in exponential notation. Checking "Never show exponent" will cause the calculator to render the number in simple dot notation. The precision can be set by means of the spin button; the default precision is set to 16. Finally, the calculator can be set to beep when errors occur.

    In the Color settings panel, you can change the colors of the various button groups. The buttons are grouped by function; the numbers are in one group, and the operators are in another, and so on.

    In the About panel, some information is presented about the calculator, like version number and author's contact.

Entering Numbers

    You can enter a number by clicking on the digit buttons, or simply hit the right digit on the keyboard. Numbers in exponential notation are entered by entering the mantissa first, then hitting the "EXP" button, and then entering the exponent. Up to 3 digits may be entered for the exponent; entering more than 3 will cause the digits to shift, i.e. the first digit entered will be dropped and replaced by the second, the second digit will be replaced by the third, and the third will be replaced by the new input. Changing the sign of the exponent is accomplished by hittin the "+/-" button. At any time, you can hit the Backspace key to delete the last digit entered. Two numbers, pi and e (euler's number) may be entered with a single button:

    • pi Enters the number 3.1415926535897932384626433833
    • e Enters the number 2.7182818284590452353602874713 (hit the "inv" button first)

Operators

    The operators in the FOX Calculator are the usual suspects:

    • + Addition
    • - Substraction
    • * Multiplication
    • / Floating point division

    In addition, FOX Calculator also includes bitwise operators, such as:

    • AND Bit-wise logical and
    • OR Bit-wise logical or
    • XOR Bit-wise logical exclusive or
    • NOT Bit-wise logical not
    • SHL Bit-wise shift left
    • SHR Bit-wise shift right
    • SAR Bit-wise signed shift right (hit the "inv" button first)

    Also nice for programmers is the inclusion of integer operations:

    • mod Integer modulo
    • div Integer division (hit the "inv" button first)

    All the operators have certain precedence relations with each other, so that an expression is evaluated correctly.

Trigonometric Functions

    The Calculator incorporates the usual trigonometric functions:

    • sin Sine
    • cos Cosine
    • tan Tangent
    • asin Inverse sine or arc sine (hit the "inv" button first)
    • acos Inverse cosine
    • atan Inverse tangent
    • sinh Hyperbolic sine (hit the "hyp" button first)
    • cosh Hyperbolic cosine
    • tanh Hyperbolic tangent
    • asinh Inverse hyperbolic sine (hit the "hyp" and "inv"buttons first)
    • acosh Inverse hyperbolic cosine
    • atanh Inverse hyperbolic tangent
    For the first 6 functions, the angle mode determines whether the argument is specified in terms of degrees, radians, or grad. Note that the angle mode is preserved across invocations of the Calculator.

Other Functions

    Other functions supported by the calculator are the following:

    • log Base 10 logarithm
    • ln Natural logarithm
    • 2log Base 2 logarithm
    • x! Factorial
    • nPr Permutations
    • nCr Combinations
    • sqrt Square root
    • x^y X raised to the power y
    • 1/x Reciprocal
    • 10^x Base 10 exponentiation (hit the "inv" button first)
    • e^x Exponentiation
    • 2^x Base 2 exponentiation
    • x^1/y X raised to the power 1/y
    • x^2 X squared

Limits

    The calculator works in IEEE 746 double precision mode; for bit-wise operations, it uses 32 bit integers. Thus, the numeric limits are as follows:

    • Smallest real number: 2.2250738585072010e-308
    • Largest real number: 1.7976931348623158e+308
    • Smallest integer number: 0
    • Largest integer number: 4294967295

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/introduction.html0000664000175000017500000005350412130340076013511 00000000000000 Home
Documentation: Introduction [Remove Frame]

    To illustrate the facility with which you can build a FOX application, we're going to build a few simple FOX applications.  The first application called Scribble.  A picture of the Scribble application is shown below:

Scribble


    Fig 1. The Scribble Application.

    Scribble demonstrates how to use the FOX Layout Managers, how to create Buttons, and how to handle messages.  Enough talk, lets start coding! The very first thing is to include the FOX header files. This is simple, as there is just one thing you need to include:

      #include "fx.h"
    
    Next, we need a top level Window object, this is a class derived from FXMainWindow. There is only one Main Window; if you need additional toplevel windows, you will probably derive those from FXDialogBox or FXTopWindow.

    In the case of Scribble, we make a class called ScribbleWindow:

      // Event Handler Object
      class ScribbleWindow : public FXMainWindow {
        // Macro for class hierarchy declarations
        FXDECLARE(ScribbleWindow)
    
    The first line says ScribbleWindow is derived from FXMainWindow; FXMainWindow, like most FOX classes, is derived from FXObject. Most classes you will write in the course of programming with FOX are either directly or indirectly derived from one single top level class called FXObject.

    The macro FXDECLARE(ScribbleWindow) declares a number of member functions which every object derived from FXObject should have; we've used a macro as it is always the same, and more convenient to program this way.

    Next, we add some member variables to keep track of the various Widgets, and the drawing color.  We also keep a flag to remember if the mouse was down, and a flag to remember if the canvas is dirty, i.e. has been scribbled on:

      private:
      FXHorizontalFrame *contents;     // Content frame
      FXVerticalFrame   *buttonFrame;  // Button frame
      FXCanvas          *canvas;       // Canvas to draw into
      int                mdflag;       // Mouse button down?
      int                dirty;        // Canvas has been painted?
      FXColor            drawColor;    // Color for the line
    


    To satisfy the serialization macro, we need to furnish a default contructor:
      protected:
        ScribbleWindow(){}
    

    FOX handles events from the user through a system of messages sent to a certain object.  In this case, the received of the messages is the ScribbleWindow class.  Thus, we need to add handler member functions to catch these messages and perform some action in response.  All message handler functions in FOX have the same argument signature:

      long onSomeCommand(FXObject* sender,FXSelector sel,void *ptr);
    
    Where:

      sender is the sender object that sent the message to us.
      sel is the selector, a combination of a message type and message id, which identifies the action being performed.
      ptr is a pointer to some event-related data; usually, this points to the FXEvent structure which contains the event that led to the message.
    For the Scribble application, we want  to handle mouse messages, as well as messages from the two buttons:

      public:
        long onPaint(FXObject*,FXSelector,void*);
        long onMouseDown(FXObject*,FXSelector,void*);
        long onMouseUp(FXObject*,FXSelector,void*);
        long onMouseMove(FXObject*,FXSelector,void*);
        long onCmdClear(FXObject*,FXSelector,void*);
        long onUpdClear(FXObject*,FXSelector,void*);
    

    ScribbleWindow also needs to define some new message ID's.  A message consists of a type and an id.  The type defines what has happened; the id identifies the source of the message.  Even though we know the object that sent us the message, in many cases, we can be sent the same message from different sources, and the id is much more convenient; so:

      public:
        enum{
          ID_CANVAS=FXMainWindow::ID_LAST,
          ID_CLEAR,
          ID_LAST
          };
    

    We typically define the list of messages some target understands as an enum type.  As the ScribbleWindow class is derived from FXMainWindow, it also understands all the messages already understood by the basic FXMainWindow.  Our new messages should have different numbers from those.  Rather than counting by hand, we let the compiler worry about this by simply defining one extra message id with the name ID_LAST, a subclass can simply use the ID_LAST of it's base class to start counting its message id's from; if ever any new message id's are added to the base class, our own messages are automatically renumbered by the compiler.

    We wrap up the remainder of the ScribbleApp class declaration by defining a constructor and one member function called create():

      public:
        ScribbleWindow(FXApp* a);
        virtual void create();
        };
    


    In our implementation, the constructor ScribbleWindow will actually build the GUI. The create() function is a virtual function that is called by the system. Most FOX Widgets have this create function. FOX Widgets have a two-stage creation process; first, the client side Widgets are constructed, using ordinary C++ constructors. Then, once the whole widget tree is complete, a single call to the application's create() function will create all the windows for those widgets. This two step process is needed as the second step may only be executed one the connecion to the display has been established.

    Now, we're ready to implement this new class; in most cases, the previous code would reside in a header file, while the implementation would be in a C++ source file, of course. In the case of ScribbleWindow, it is so simple that we placed everything into one file.

    The first thing to do is to define the message map. The message map is a simple table that associates a message type, and message id to a class's member function. Having a message map allows us to send any message to any [FXObject-derived] object.
    Thus:

      FXDEFMAP(ScribbleWindow) ScribbleWindowMap[]={
        //________Message_Type_____________________ID_______________Message_Handler_______
        FXMAPFUNC(SEL_PAINT,            ScribbleWindow::ID_CANVAS,ScribbleWindow::onPaint),
        FXMAPFUNC(SEL_LEFTBUTTONPRESS,  ScribbleWindow::ID_CANVAS,ScribbleWindow::onMouseDown),
        FXMAPFUNC(SEL_LEFTBUTTONRELEASE,ScribbleWindow::ID_CANVAS,ScribbleWindow::onMouseUp),
        FXMAPFUNC(SEL_MOTION,           ScribbleWindow::ID_CANVAS,ScribbleWindow::onMouseMove),
        FXMAPFUNC(SEL_COMMAND,          ScribbleWindow::ID_CLEAR, ScribbleWindow::onCmdClear),
        FXMAPFUNC(SEL_UPDATE,           ScribbleWindow::ID_CLEAR, ScribbleWindow::onUpdClear),
        };
    

    Note several things about this table; first, there are several messages with the same id, but a different type. Message types indicate what happened, for example, SEL_LEFTBUTTONPRESS means that the left mouse button was just pressed. The message id identifies the source. FOX defines a large collection of message types, each of them has a specific meaning.

    Next, we need to implement the ``boilerplate'' stuff that the previous FXDECLARE macro has declared:

      FXIMPLEMENT(ScribbleWindow,FXMainWindow,ScribbleWindowMap,ARRAYNUMBER(ScribbleWindowMap))
    

    This the first argument of the macro should have the name of the class, in this case ScribbleWindow; the second argument should be the name of the class from which the class has been derived; in this case, that's FXMainWindow. The last to arguments are a pointer to the message map, and the number of messages in that map. FOX has a convenience macro ARRAYNUMBER() that expands to the number of elements in a compile-time defined array; this makes it easier to add or remove messages.

    If the class you're defining implements no additional messages, the last two arguments of FXIMPLEMENT should be simply NULL and 0.

    The remainder of the ScribbleWindow's implementation is pretty much ordinary C++ code. The constructor follows below:

      // Construct a ScribbleWindow
      ScribbleWindow::ScribbleWindow(FXApp *a):FXMainWindow(a,"ScribbleApplication",NULL,NULL,DECOR_ALL,0,0,800,600){
    
      contents=new FXHorizontalFrame(this,LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0,0,0,0,0);
    
      // LEFT pane to contain the canvas
      canvasFrame=new FXVerticalFrame(contents,
                                      FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,0,0,0,0,10,10,10,10);
    
      // Label above the canvas
      new FXLabel(canvasFrame,"CanvasFrame",NULL,JUSTIFY_CENTER_X|LAYOUT_FILL_X);
    
      // Horizontal divider line
      new FXHorizontalSeparator(canvasFrame,SEPARATOR_GROOVE|LAYOUT_FILL_X);
    
      // Drawing canvas
      canvas=new FXCanvas(canvasFrame,this,ID_CANVAS,
                          FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT);
    
      // RIGHT pane for the buttons
      buttonFrame=new FXVerticalFrame(contents,
                                      FRAME_SUNKEN|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,0,0,0,0,10,10,10,10);
    
      // Label above the buttons
      new FXLabel(buttonFrame,"ButtonFrame",NULL,JUSTIFY_CENTER_X|LAYOUT_FILL_X);
    
      // Horizontal divider line
      new FXHorizontalSeparator(buttonFrame,SEPARATOR_RIDGE|LAYOUT_FILL_X);
    
      // Button to clear
      new FXButton(buttonFrame,"&Clear",NULL,this,ID_CLEAR,
                   FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,0,0,0,0,10,10,5,5);
    
      // Exit button
      new FXButton(buttonFrame,"&Exit",NULL,getApp(),FXApp::ID_QUIT,
                   FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,0,0,0,0,10,10,5,5);
    
      // Initialize private variables
      drawColor=FXRGB(255,0,0);
      mdflag=0;
      dirty=0;
      }
    

    In almost all cases, it takes just one line of C++ code to create a FOX Widget. Typically, that is a constructor invocation. As most FOX Widget supply convenient default parameters to the constructor, you may not have to specify most of them.

    The first line in the body of the constructor creates a top level window; toplevel windows in FOX have no parent, so pass in a pointer to the application object (this in this case). The remaining parameters are the window title, window decorations (such as resize handles, borders, etc.), as well as the initial size and position. The initial size and position may be ignored by your particular window manager, they are just hints.

    The next line creates a FXHorizontalFrame Widget. The FXHorizontalFrame Widget is a Layout Manager that places its children horizontally.

    The FXMainWindow Widget itself is also a Layout Manager, and the options passed to the FXHorizontalFrame widget's constructor determine how it is placed in the FXMainWindow.

    Next, two FXVerticalFrame widgets are created, one for the drawing Canvas and one for the buttons. In the canvasFrame, we then place a Label, a grooved Separator, and the Canvas for drawing into. The Canvas's target object is ScribbleWindow (i.e. this), and its message is set to ID_CANVAS. This causes Canvas to send all its messages to the ScribbleApp object, with the ID set to ID_CANVAS.

    Likewise, in the right buttonFrame we place a Label, a grooved Separator, and two Buttons. The clear button has a caption "&Clear". The & in front of a latter will cause the Button to install a hot-key Alt-C automatically. The caption is drawn with the C underlines, as in "Clear." The target of the clear Button is again the ScribbleApp object, and its message ID is ID_CLEAR. Likewise, the exit Button sends ID_QUIT.

    Note that we didn't have to define ID_QUIT, as this is a message every FXApp object already understands. Thus, we can simply hook up buttons to their targets.

    The remaining arguments to the Buttons determine its frame style (FRAME_THICK|FRAME_RAISED), and how it is placed inside the VerticalFrame Layout Manager (LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT) tells the Layout Manager to stretch the Buttons to fill the available room, making them nicely the same size.

    Finally, the ScribbleWindow's constructor initializes its member variables for the drawing color and the flags.

    Next, we implement the create() routine:

      // Create and initialize
      void ScribbleWindow::create(){
        // Create the windows
        FXMainWindow::create();
        // Make the main window appear
        show();
        }
    

    First, we call the base classes' create; then, the main window is shown on the screen by calling its show() member function.

    Now, we're ready to handle some messages:

       // Mouse button was pressed somewhere
       long ScribbleWindow::onMouseDown(FXObject*,FXSelector,void*){
    
         // While the mouse is down, we'll draw lines
         mdflag=1;
         return 1;
         }
    
       // The mouse has moved, draw a line
       long ScribbleWindow::onMouseMove(FXObject*, FXSelector,void* ptr){
         FXEvent *ev=(FXEvent*)ptr;
         if(mdflag){
    
           // Get DC for the canvas
           FXDCWindow dc(canvas);
    
           // Set foreground color
           dc.setForeground(drawColor);
    
           // Draw line
           dc.drawLine(ev->last_x, ev->last_y,ev->win_x, ev->win_y);
    
           // We have drawn something, sonow the canvas is dirty
           dirty=1;
           }
         return 1;
         }
    
       // The mouse button was released again
       long ScribbleWindow::onMouseUp(FXObject*,FXSelector,void*ptr){
         FXEvent *ev=(FXEvent*) ptr;
         if(mdflag){
           FXDCWindow dc(canvas);
           dc.setForeground(drawColor);
           dc.drawLine(ev->last_x, ev->last_y,ev->win_x, ev->win_y);
    
           // We have drawn something, sonow the canvas is dirty
           dirty=1;
    
           // Mouse no longer down
           mdflag=0;
           }
         return 1;
         }
    
       // Paint the canvas
       long ScribbleWindow::onPaint(FXObject*,FXSelector,void*ptr){
         FXEvent *ev=(FXEvent*)ptr;
         FXDCWindow dc(canvas,ev);
         dc.setForeground(canvas->getBackColor());
         dc.fillRectangle(ev->rect.x,ev->rect.y,ev->rect.w,ev->rect.h);
         return 1;
         }
    

    The onMouseDown message handler simply sets a flag to remember than the mouse is now down; the onMouseMove handler draws a line from the last to the current mouse positions; it then sets a dirty flag to 1 to remember that the Canvas has been drawn onto. The onMouseUp handler finishes the line, and resets the mouse down flag. Finally, the onPaint handler repaints the canvas to the background color.
    Nothing remarkable here at all.

    The next few message handlers are more interesting:

      // Handle the clear message
      long ScribbleWindow::onCmdClear(FXObject*,FXSelector,void*){
        FXDCWindow dc(canvas);
        dc.setForeground(canvas->getBackColor());
        dc.fillRectangle(0,0,canvas->getWidth(),canvas->getHeight());
        dirty=0;
        return 1;
        }
    
    
      // Update the clear button
      long ScribbleWindow::onUpdClear(FXObject* sender,FXSelector,void*){
        if(dirty)
          sender->handle(this,FXSEL(SEL_COMMAND,ID_ENABLE),NULL);
        else
          sender->handle(this,FXSEL(SEL_COMMAND,ID_DISABLE),NULL);
        return 1;
        }
    

    The onCmdClear message handler clears the canvas, then resets the dirty flag.  The onUpdClear message handler updates the clear Button.

    Each Widget in FOX receives a message during idle processing asking it to be updated.  For example, Buttons can be sensitized or desensitized when the state of the application changes.  In this case, we desensitize the sender (the clear Button) when the Canvas has already been cleared, and sensitize it when it has been painted (as indicated by the dirty flag).

    This GUI Update process is extremely powerful:- if an application has N commands, and M Widgets to update for each command, one might have to write NxM update routines; with the GUI Update process, one needs to write only N+M routines.  Moreover, if the application data change by some other means (e.g. timers, external data inputs, mulitple computing threads, etc), the GUI will automatically keep itself up to date without any additional coding.

    To complete the Scribble Application, only one thing remains:- to kick it all off from the main() routine:

      // Here we begin
      int main(int argc,char *argv[]){
    
        // Make application
        FXApp* application=new FXApp("Scribble","Test");
    
        // Start app
        application->init(argc,argv);
        // Scribble window
        new ScribbleWindow(application);
    
        // Create the application's windows
        application->create();
    
        // Run the application
        application->run();
    
        return 0;
        }
    

    First, we construct a FXApp object by calling new FXApp("Scribble","Test"). The first string is the name of the application `Scribble' is often referred to as the Application Key, while the second string`Test' is called the Vendor Key. Together, these two strings are used to determine the application's registry- or preference-settings.

    The call to application->init(argc,argv) initializes the application; argc and argv of the command line are passed in so that the FOX system can filter out some FOX-specific command line arguments, such as for example the -display parameter.

    The call new ScribbleWindow(application) builds the entire GUI for our application; the GUI consists essentially of two parts:- the client-side resources, which live in our own process, and the server-side resources which live in the X server (X11) or GDI (Windows).
    When we construct a FOX widget, only the client-side resources are determined. A subsequent call to application->create() recursively creates all server-side resources for each widget that has been previously constructed.

    Finally, application->run() member function is called to run the application. This function never returns.

Recap

    In the previous example, several FOX features have been discussed:

    • Building applications using FOX means building more C++ classes; these new classes should always be derived from FXObject, either directly or indirectly. The sophisticated developer will try and make these new classes general, so that he/she may use these again in some other project. Thus, the development effort may be leveraged many times over.


    • FOX uses a target/message system; Each message handler has three arguments:- the sender of the message, which is always an object derived from FXObject, the message selector, which is a combination of the message type and message id, and a void pointer which may provide additional information about the message. The message type identifies the type of action that occurred, whereas the message id identifies the source of the message; it makes the message unique.


    • When defining new messages, use enums. The first new message for a derived class should be equal to the base classes ID_LAST. This way, the compiler takes care of unique message numbering. Note that messages should be unique with respect to a specific target only:- unrelated targets do not have to be unique. If the class you're writing may be subclassed later, define a message ID_LAST, so that the subclass may define additional message id's starting from that point.


    • Major FOX building blocks already understand a bunch of messages; for example, FXApp understands the message ID_QUIT. This means that in many cases, simple glue-code may be avoided.


    • During idle processing, FOX automatically updates eachWidget, by asking the Widget's target what its state should be; the message being sent to the target object is of type SEL_UPDATE. The GUI Update process is an important tool to use for large-scale applications, where multiple developers may not even be aware of which widgets may need updating when some data structure changes. With GUI Updating, it is easy to keep it consistent.


    • Hot Keys may be set on Button captions simply by prefixing the hotkey latter with an &. The indicated letter will be automatically underlined.


    • FOX uses a two-step process to build its Widgets; in the construction phase, C++ data structures are built, and member data are filled in; in the second phase, the connection to the display is established, and actual windows are created for each Widget.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/clipboard.html0000664000175000017500000003471012130340076012725 00000000000000 Documentation: Clipboard and Primary Selection
Documentation: Clipboard and Primary Selection [Remove Frame]

    FOX supports three different ways of moving or copying data between applications:

    • Drag and drop. Drag and drop is used when you grab some object on the screen and drag it to another location, and then drop it there. It is the most visually intuitive way to move information from one place to another. The drag and drop mechanism is described in the section on drag and drop.
    • Clipboard. The clipboard is used by typically selecting some object or text and copying it to the clipboard using Ctrl-C, or cutting it to the clipboard using Ctrl-X. Next you can move to another application and pasted the object or text into it by using Ctrl-V.
      Conceptually, the clipboard is a memory region which holds on to a copy of the object or text that was copied or cut. This memory region will continue to exist until it is replaced by another clipboard copy or cut operation, either in the same application or in another application; there is conceptually only one single memory region serving all applications on the desktop.
    • Primary Selection. The primary selection is silently established by selecting some text in a text field. It can be pasted into another text field simply by using the middle mouse button. Unlike the clipboard, there is no memory region to remember the primary selection other than the selection on the screen itself. Thus, changing the selection immediately overwrites the old one.
      Analoguous to the clipboard, there is only one primary selection active among all applications on the desktop; selecting text in another application will deselect the text in the current one.

    All three methods can exchange essentially arbitrary amounts of data, or arbitrary types. Exchanges may take place between different controls in the same application, or different controls in different applications. Under X-Windows, the different applications may even be running on different machines of different types.

    Whether using the clipboard, drag and drop, or primary selection, applications must first agree on the types of data being exchanged. A single piece of data, for example, an image, may be exchanged using different representations. For an image, for instance, the transfer may take place as GIF or BMP formats.

    To increase the odds that both the originating application and the receiving one support the same data representations, the originating application can furnish its list of supported representations for the data. The receiving application, after inspecting this list, can then ask for the one format of the supplied list it also supports.

Registering Clipboard Types

    In order to communicate a particular data structure across applications, both partners need to first register a Drag Type. Registering a drag type yields a unique number which is guaranteed to be the same for all applications on the desktop.
    The Drag Type is created by calling the function:

    FXDragType FXApp::registerDragType(const FXString& name) const;
    

    The registerDragType() function registers a new Drag Type name on the application's desktop, and returns an abstract handle to the Drag Type. The returned handle is used in all subsequent clipboard, drag and drop, or primary selection operations to signify the data type being exchanged.

    Chosing one of the standard MIME types. for commonly available data streams will ensure that data can be exchanged between FOX programs and programs written using other toolkits.

    The function:

    FXString FXApp::getDragTypeName(FXDragType type) const;
    

    will return the Drag Type Name, given the Drag Type type. You may need to use this in case your application receives a drop of an unknown type, and you need to decide what to do with it.

Clipboard Exchange

    The clipboard is a single facility on the desktop which can be interrogated about the types of objects currently retained, and the contents of these objects.
    The clipboard is said to be owned by a window, meaning that whenever such a query must be asnwered, that particular window is the one which will be asked.
    The advantage of this model is that it permits an easy-going decentralized scheme where 3rd-party widgets can implement any number of clipboard data types without any need for central coordination.
    Moreover, the originator can furnish a large number of potential formats for the clipboard selection, yet will only be called upon to actually supply one of these formats during the transaction.

    Upon performing a Cut or Copy to clipboard operation, the originating widget will claim ownership of the clipboard by calling:

    FXbool FXWindow::acquireClipboard(const FXDragType *types,FXuint numtypes);
    

    where types is a list of Drag Types previously registered (see above), and numtypes is the number of such types.

    When one widget acquires the clipboard, the previous widget which owned the clipboard will receive a message of type SEL_CLIPBOARD_LOST, which should cause that widget to release all data previously retained regarding the clipboard operation.

    If the caller has successfully invoked acquireClipboard(), it can allocate storage to remember the clipboard selection in. As it may be requested to furnish the selection in any of the previously stated data types, it may have to remember multiple representations of the clipboard selection.

    The widget calling acquireClipboard() will receive a message of type SEL_CLIPBOARD_GAINED.

    To voluntarily release the clipboard, a widget may call:

    virtual void FXWindow::releaseClipboard();
    

    This will cause the calling widget to receive a message of type SEL_CLIPBOARD_LOST, just as if some other widget had called acquireClipboard().

    The proper response to receiving a SEL_CLIPBOARD_LOST message is to release the clipboard selection data:

    long MyWidget::onClipboardLost(FXObject* sender,FXSelector sel,void* ptr){
      BaseClassOfMyWidget::onClipboardLost(sender,sel,ptr);
      ...
      free the data
      ...
      return 1;
      }
    

    A widget which wants to obtain the clipboard selection can ask for the entire list of clipboard types by calling:

    FXbool inquireDNDTypes(FXDNDOrigin origin,FXDragType*& types,FXuint& numtypes) const;
    

    Where the parameter origin should be set to FROM_CLIPBOARD. The result will be placed in an array of Drag Types types of length numtypes.

    Often, the requesting widget can deal with only one single type of data; for such cases, its more convenient to be able to ask if one particular Drag Type is supported by the originator:

    FXbool offeredDNDType(FXDNDOrigin origin,FXDragType type) const;
    

    Where again, origin must be set to FROM_CLIPBOARD, and type is the type which we want to know about.

    In even simpler scenarios, the requesting widget may simply ask for the clipboard data of a certain datatype. This is appropriate if there is no special action needed in preparation to receiving the data.

    A widget can obtain the data using:

    FXbool getDNDData(FXDNDOrigin origin,FXDragType type,FXuchar*& data,FXuint& size) const;
    

    Once more, origin is set to FROM_CLIPBOARD. The requested type is given in type. Upon successful return, data will refer to a byte array containing the clipboard selection data, and size will contain the length of this data array. If the originating widget is unable to furnish the requested data type, getDNDData() returns FALSE and the data and size will be set to NULL and 0, respectively.

    The requesting widget is now resposible for deleting the memory, which must be done using FXFREE().

    When a widget requests data using getDNDData(), a message of type SEL_CLIPBOARD_REQUEST is issued to the widget owning the clipboard. The originating widget must call:

    FXbool setDNDData(FXDNDOrigin origin,FXDragType type,FXuchar* data,FXuint size) const;
    

    With origin set to FROM_CLIPBOARD, type to the requested data type. The originating widget must allocate (using FXMALLOC) and fill a data array with the clipboard selection and pass a reference to data, and the size of the array in size.

    After handing the array to setDNDData(), the originating widget no longer owns the data array and should make NO attempts to free it!

    To figure out which datatype was requested by the requesting widget, the originating widget can inspect the target member of the FXEvent structure passed in the SEL_CLIPBOARD_REQUEST message pointer.

    A typical widget implementation first lets its base class inspect the Drag Type, and if it was not handled yet, inspects it itself:

    long MyWidget::onClipboardRequest(FXObject* sender,FXSelector sel,void* ptr){
    
      // See if base class knows how to deal with the requested clipboard type
      if(BaseClassOfMyWidget::onClipboardRequest(sender,sel,ptr)) return 1;
    
      // See if we can deal with this type ourselves
      if(((FXEvent*)ptr)->target==mydataType){
        FXuchar *data;
        FXuint len;
        ...
        FXMALLOC(&data,FXuchar,len);
        ...
        fill data
        ...
    
        // Give the array to the system!
        setDNDData(FROM_CLIPBOARD,event->target,data,len);
    
        // Return 1 because it was handled here
        return 1;
        }
    
      // Return 0 to signify we haven't dealt with it yet; a derived
      // class from MyWidget may yet give it another try ...
      return 0;
      }
    

    Thus, MyWidget itself can also be subclassed so as to add even more data types!

Clipboard Originator

    The originator's responsibilities during a clipboard transaction are as follows:

  • Register the desired clipboard data types; in most widgets, this is done once only in the widget's create() routine. Usually, all widgets of the same type support the same set of clipboard types so it is appropriate to remember the clipboard type in a static member variable.
  • When performing a Cut or Copy to clipboard operation, call acquireClipboard(), and if successfully obtaining the clipboard, allocate the necessary memory for keeping a copy of the clipboard selection data.
  • Alternatively, allocate the memory and remember the clipboard selection when the SEL_CLIPBOARD_GAINED is received.
  • Sit there and wait for a SEL_CLIPBOARD_REQUEST message. If a request is received, try handle the request in the base class, and if still not handled, try handle it in the widget.
    Return 1 only if it was handled.
  • If a SEL_CLIPBOARD_LOST is received, release the memory used to keep the clipboard selection and forget anything has happened.
  • Typically, just in case the widget still owns the clipboard when it is destroyed, release the memory for the clipboard selection in the destructor also.

Clipboard Requestor

    The requestor's responsibilities in a clipboard transaction are as follows:

  • Upon performing a Paste command, determine the type of data using inquireDNDTypes() or offeredDNDType(). Then ask for the data using getDNDData(), passing in the requested data type, which is typically one of the data types furnished by the originator.
  • If getDNDData() returned successfully, insert the data into the widget, and release the data array obtained from getDNDData().

Primary Selection Exchange

    The primary selection data exchange mechanism is pretty much the same as that for the clipboard.
    The key difference is that typically, no copy is made of the selection. As soon as some text is selected, the originating window acquires the primary selection. If the selected text is changed, the widget typically releases and reacquires the primary selection.

    Also, upon receiving a SEL_SELECTION_LOST, typically all that happens is that the text is deselected, instead of deleted.

    When exchanging via primary selection, the origin parameter is normally set to FROM_SELECTION.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/fonts.html0000664000175000017500000003424612130340076012123 00000000000000 Documentation: Fonts
Documentation: Fonts [Remove Frame]

    Type faces in FOX are manipulated using FXFont objects.  To provide a consistent look and feel for all applications, most FOX widgets normally share one common font object, which is automatically adopted when the widget is constructed.  However, a widget's font is readily changed using the setFont() member function.  Changing fonts on widgets will automatically cause an adjustment in layout so that the new size of the widget is accomodated.

    As with most other resources such as FXIcon and FXCursor etc., building FXFont objects also takes two steps:- construction of the client-side part of the font object, followed by creation of the corresponding server-side part.   During construction, all necessary information is supplied to the FXFont object so that the desired font may be located and loaded into memory during the creation. In most cases, the font objects are automatically created when the widget that uses it is being created.  If you have constructed a new FXFont object later on, however, you may have to make a call to the font object's create() member function to make sure the font object is fully initialized. As different computer systems may have different fonts, it is possible that the specific font your application needs may not be available.  Since you probably still would like this application to run anyway, alternative fonts must be found.

    FOX supports mechanisms to localize fonts which are ``close'' [in some easthetic sense] to the desired font, so that applications will typically not fail simply because of missing fonts.  Keep in mind, however, that the information you supplied to the FXFont contructor may not accurately reflect the font that is actually being used in your application.

    Also note that information about a font will not be available until after the font has been created using create().

Using Font Objects

    Using fonts is really very easy.  For example, to build a Button Control with a different Font for the caption, you would use the following C++ code:

    FXButton *button = new FXButton(parent,"&Caption");
    FXFont* captionfont = new FXFont(app,"times",24);
    button->setFont(captionfont);
    

    This statements will create a Button with caption ``Caption'' and use a font of 24 points Times.  Note that in this case we assume that the captionfont will be created in the process of creating the Button; if you were to change fonts after the application has already started running, you would want to call captionfont->create() to make sure the font resources are created. Also note that font objects may be shared between several controls; thus, you don't have to create a different font object for each control [unless of course you want to use a different font!]. In the above example, we have taken default values for many parameters influencing the choice of font. The above call is actually equivalent to:

    FXFont* captionfont = new FXFont(app,
                                     "times",
                                     24,
                                     FONTWEIGHT_NORMAL,
                                     FONTSLANT_REGULAR,
                                     FONTENCODING_DEFAULT,
                                     0);
    

    That is to say, construct a font with face name ``times,'' 24 points, normal weight [not bold], no italics, and use whatever character encoding is available for this font; finally, the zero (0) indicates there are no hints.

    Besides the above platform-independent font constructor, FXFont also has an alternative constructor which is only applicable to the X11 Window System; this method bypasses the font matching algorithm. Assuming that our display was 75 dots per inch (dpi), the alternative method of contructing fonts using the X11 font string would have been:

    FXFont* captionfont = new FXFont(app,"-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1");
    

    Besides being harder to remember, this method would not port over very well to other systems, or systems where this particular font is not available.  However, there are a few reasons why sometimes you may need this method:

    1. You want to make sure you obtain a specific font, and do not want the matching algorithm to get in the way;
    2. You need to obtain certain raster-based system fonts, for example "9x15bold."

Font Matching and Substitution

    In order to be able to write applications which may be ported to a large variety of computer systems and software environments, it is necessary to make sure that the absence of certain fonts is handled gracefully.
    The FXFont implementation offers a number of benefits that allow you to get your application running under a wide variety of  environments, even on systems where very few fonts have been installed:

    1. Font Substitution.  Font substitution is used to map type face names which may be hard-coded in your application to another type face name, so an alternative font may be used without having to make changes to programs or recompiling them.  FOX uses the standard Registry mechanism to map one type face name to another.
    2. Font Matching.  Font matching algorithms are used to determine the closest available font to the desired font.  Different weighting factors are applied to different font attributes to get the best visual approximation.
    3. Font Match Hints.  Hints may be passed to the matching algorithms so you are able to emphasize certain types of font attributes more strongly than others.
    4. X11 Font String.  Platform-dependent fonts may be directly specified also.  This method is not recommended unless you need to select a specific font, and are not interested in portability.

    Before trying to acquire a list of available fonts for a certain type face, the FXFont implementation first tries a substitution for the type face name.  The standard FOX registry is used to make this association.  The substitute font is found in the section FONTSUBSTITUTIONS of the registry.
    For example, the following fragment decribes the registry settings which would replace ``swiss'' by ``helvetica'' and ``new century schoolbook'' by ``courier'':

    [FONTSUBSTITUTIONS]
    swiss = helvetica
    new century schoolbook =  courier
    

     Thus, you can easily give a FOX application another font even if you might not have the source code around!

    After having substituted the type face name, the FXFont implementation tries to find the font from the given type face  that best matches the parameters and hints.  Parameters or hints which are given a ``don't care'' value are considered matched.  For example, if you specify FONTWEIGHT_DONTCARE for the font weight, all font weights would match and the resulting font will be based on other parameters.

    Not all parameters have the same priority as far as matching goes; the importance of the parameters is as follows:


     
    1. Character Set Encoding.  If you needed East European character sets and you got Greek instead, even all other things being equal, you'd be disappointed.
    2. Fixed or Variable Pitch hints.  For programming editors, for example, fixed pitch fonts are a must so that indentation is properly maintained; therefore, font pitch is quite important for legibility purposes.
    3. Screen Resolution.  Bitmapped fonts are much more readable when the resolution matches that of your screen; so resolution is quite important.  The FXFont implementation tries to determine the screen's resolution (in terms of dots per inch) and then match fonts designed for this resolution.
    4. Scalable Font Hint.  Certain operations such as scaling and shearing [obliqueing] are only possible with scalable fonts; thus, if you have specified this hint, all other things being equal, you'd prefer scalable fonts over other ones.
    5. Polymorphic Font Hint. Polymorphic fonts allow continuous variations in various attributes of a font, such as set width, weight, slant, and others. If your application needs such fonts for certain effects, this much be made to match.
    6. Point Size. When all the above are satisfied, you certainly want the size of the font to be roughly equal to the one specified.  For scalable fonts, you can of course virtually always match the requested size exactly.  For non-scalable fonts, the FXFont implementation matches the largest font which is less than or equal to the desired size.  Even though a larger font may be closer, the larger one may be too large for proper layout on a finite screen; therefore, the implementation yields only smaller fonts.  As the resolution has influence over the observed point size, the implementation corrects for this [see ``Screen Resolution'' below].
    7. Weight.  The weight or ``boldness'' of the font.
    8. Slant. Oblique and italic may both be matched for a slanted font.
    9. Set Width. Wide or narrow (condensed) printing.

    After having tried all the members of the specified type face, if no match is found at all, the FXFont implementation tries a number of other common fonts, based on additional hints:

    • If no hints are given, or if the hint FONTHINT_SWISS is given, the face ``helvetica'' or its substitution will be tried;
    • Next, if no hint is given or if the hint given is FONTHINT_ROMAN, the face ``times'' or its substitution will be tried;
    • Next, if no hint given or if the given hint was equal to FONTHINT_MODERN, the face ``courier'' or its substitution will be tried;
    • After that, if no hint is given or if the hint was FONTHINT_DECORATIVE, the face ``gothic'' or its substitution will be tried;
    • Finally, if all else fails, the implementation will try a number of ``fallback fonts'' which have been determined to be commonly available.

    If all the above failed, yet there is at least one font on your system, then you should report this problem on the FOX mailing list...

Screen Resolution

    Since current-day analog monitors can stretch and shrink the visible field of the display, the actual resolution is typically not exactly 75dpi or 100dpi.  To get a font's point size as close to the desired pointsize as possible, FOX adjusts for the actual screen dpi relative to the font's dpi.For example, suppose we have a font such as:

    -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1
    

    This font is a 12-point font designed for a 75 dpi device.  If your monitor however is set to display 90 dpi, the font would be too small.  The implementation can correct for this by multiplying the font's point size by (75/90) which means visually this font would actually be more like 10-points on your monitor.  Thus, to get a font designed for 100 dpi to display as 12 points on your monitor, we should search for a font which is slightly larger than 12-point; to be exact, we should be looking for a font (90/75)*12 = 14.4-point font.

    On many systems such as work stations, the machine is shipped with accurate information about the particular monitor supplied with the system;  on such systems, the font implementation of FOX will correctly determine the right resolution to use.  On PC's however, hardware is mixed and matched from different sources, and the reported screen sizes may be incorrect, causing fonts to bigger or smaller than requested.

    When the system reports the wrong resolution, you can easily correct that by setting the resolution yourself using the registry database. On my system, for example, the XFree86 X Server reports 75 dpi, while I really have 100dpi.  So I change my registry database as follows:

    [SETTINGS]
    screenxres = 100
    screenyres =  100
    

    These entries need to go into the ``Desktop'' file so that all FOX programs will be aware of this, regardless of vendor or application name.  For more about the registry, see the section on FXRegistry.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/filefuncs.html0000664000175000017500000005232012130340076012741 00000000000000 Documentation: File Manipulation
Documentation: File Manipulation [Remove Frame]

    Almost all applications will eventually be faced with the need to manipulate file, and directories, and access the underlying operating system's file system.  In FOX, a large collection of useful filename and directory name manipulation functions is provided with which you can perform these tasks easily.
    Moreover, the FOX file manipulations are aware of platform specific idiosyncracies, such as UNC under MS-Windows and escaping sequences under UNIX.

Finding Special Directories

    Certain directories in the file system are special, like the applications current working directory, the users home directory, and so on. FOX supplies the following functions for this purpose:


    FXString getEnvironment(const FXString& name)

    This function obtains the environment variable name from the environment. It returns the empty string if not found.


    FXString getHomeDirectory()

    Returns the current user's home directory.


    FXString getUserDirectory(const FXString& user)

    Returns the home directory of the named user, or the current user's home directory if the parameter user is empty.


    FXString setCurrentDirectory(const FXString& path)

    Change the application's current working directory to path


    FXString getCurrentDirectory()

    Returns the current working directory of the application.


    FXString setCurrentDrive(const FXString& prefix)

    Change the application's current drive letter to prefix, where prefix is the drive letter, like "a:", "b:", and so on. This function of course has no effect on UNIX systems.


    FXString getCurrentDrive()

    Returns the current drive letter of the application. This function of course has no effect on UNIX systems.


    FXString getExecPath()

    Returns the path along which the systems shell usually locates executable programs, or "$PATH". The returned path string is a sequence of directories separated by PATHLISTSEP.

Filename Manipulation

    Manipulating filenames is done with the following functions:


    FXString directory(const FXString& file)

    Return the directory part of file. Note that directory("/bla/bla/") yields "/bla/bla" and NOT "/bla". However, directory("/bla/bla") yields "/bla" as we expect!


    FXString name(const FXString& file)

    Return name and extension part of file. Note that name("/bla/bla/") yields "" and NOT "bla". However, name("/bla/bla") yields "bla" as we expect.


    FXString title(const FXString& file)

    Return title part of file. This is the name of the document with the directory part and the extension part removed.


    FXString extension(const FXString& file)

    Return extension part of file.


    FXString stripExtension(const FXString& file)

    Strip the extension part of file.


    FXString drive(const FXString& file)

    Return the drive letter part of file. Of course, on UNIX systems this will return the empty string.


    FXString expand(const FXString& file)

    Expand meta-characters in file. On UNIX systems, "~" is expanded into the current user's home directory, "~user" into the given user's home directory, via getUserDirectory(). Also, "$VARIABLE", "${VARIABLE}", or "$(VARIABLE)" will be expanded into the environment variable VARIABLE, via getEnvironment(). On MS-Windows, environment variables of the form "%VARIABLE%" are expanded similarly.


    FXString simplify(const FXString& file)

    Return the simplest pathname representation of file. The path will remain relative if it was relative, or absolute if it was absolute. Also, a trailing "/" will be preserved as this is important in other functions. For example, simplify("..//aaa/./bbb//../c/") yields "../aaa/c/".


    FXString absolute(const FXString& file)

    Return the absolute path to the file, given the current working directory and drive letter.


    FXString absolute(const FXString& base,const FXString& file)

    Build the absolute path to the file, from the given base directory and file.


    FXString relative(const FXString& file)

    Return the path to file, relative to the current working directory.


    FXString relative(const FXString& base,const FXString& file)

    Return the path to file, relative to the directory base.


    FXString enquote(const FXString& file,FXbool forcequotes=FALSE)

    Enquote file to make safe for shell. Normally, quotes are only generated when necessary, but if forcequotes is TRUE quotes are always generated regarless of necessity.
    Files with special characters need to be quoted before they may be passed to bash, ksh, csh (UNIX) or cmd (MS-Windows).


    FXString dequote(const FXString& file)

    Dequote file to yield the original again.


    FXString unique(const FXString& file)

    Generate unique filename of the form "pathnameXXX.ext", where pathname.ext is the original input file, and XXX is a number, possibly empty, that makes the file unique.


    FXString search(const FXString& pathlist,const FXString& file)

    Search pathlist for this file, return full path name for first occurrence. The pathlist is a PATHLISTSEP separated list of directories, such as returned by getExecPath.


    FXString upLevel(const FXString& file)

    Return path to directory above input directory file.

Obtaining information about files

    A number of functions are also available to obtain various kinds of information about files or directories:


    FXbool isAbsolute(const FXString& file)

    Return true if file is an absolute pathname.


    FXbool isTopDirectory(const FXString& file)

    Return true if input file is a top-level directory.


    FXbool isFile(const FXString& file)

    Return true if input file is a file name.


    FXbool isLink(const FXString& file)

    Return true if input file is a link.


    FXbool isDirectory(const FXString& file)

    Return true if input file is a directory.


    FXbool isReadable(const FXString& file)

    Return true if input file is readable.


    FXbool isWritable(const FXString& file)

    Return true if input file is writable.


    FXbool isExecutable(const FXString& file)

    Return true if input file is executable.


    FXbool isOwnerReadWriteExecute(const FXString& file)

    Return true if owner has read-write-execute permissions.


    FXbool isOwnerReadable(const FXString& file)

    Return true if owner has read permissions.


    FXbool isOwnerWritable(const FXString& file)

    Return true if owner has write permissions.


    FXbool isOwnerExecutable(const FXString& file)

    Return true if owner has execute permissions.


    FXbool isGroupReadWriteExecute(const FXString& file)

    Return true if group has read-write-execute permissions.


    FXbool isGroupReadable(const FXString& file)

    Return true if group has read permissions.


    FXbool isGroupWritable(const FXString& file)

    Return true if group has write permissions.


    FXbool isGroupExecutable(const FXString& file)

    Return true if group has execute permissions.


    FXbool isOtherReadWriteExecute(const FXString& file)

    Return true if others have read-write-execute permissions.


    FXbool isOtherReadable(const FXString& file)

    Return true if others have read permissions.


    FXbool isOtherWritable(const FXString& file)

    Return true if others have write permissions.


    FXbool isOtherExecutable(const FXString& file)

    Return true if others have execute permissions.


    FXbool isSetUid(const FXString& file)

    Return true if the file sets the user id on execution.


    FXbool isSetGid(const FXString& file)

    Return true if the file sets the group id on execution.


    FXbool isSetSticky(const FXString& file)

    Return true if the file has the sticky bit set.


    FXString owner(const FXString& file)

    Return owner name of file, if available; otherwise "user".


    FXString group(const FXString& file)

    Return group name of file, if available; otherwise "group".


    unsigned long size(const FXString& file)

    Return size of file in bytes


    FXTime modified(const FXString& file)

    Return last modified time of file.


    FXTime accessed(const FXString& file)

    Return last accessed time of file.


    FXTime created(const FXString& file)

    Return create-time of file.


    FXTime touched(const FXString& file)

    Return touched time of file.

Copying, Moving, Linking Files

    The following operations are available on files:


    FXbool createDirectory(const FXString& path,FXuint mode)

    Create new directory path, with permissions set to mode.


    FXbool createFile(const FXString& file,FXuint mode)

    Create new empty file, with permissions set to mode.


    FXbool concatenate(const FXString& srcfile1,const FXString& srcfile2,const FXString& dstfile,FXbool overwrite=FALSE)

    Concatenate srcfile1 and srcfile2 to a dstfile. If overwrite is true, then the operation fails if dstfile already exists. srcfile1 and srcfile2 should not be the same as dstfile.


    FXbool remove(const FXString& file)

    Remove file or directory, recursively.


    FXbool copy(const FXString& srcfile,const FXString& dstfile,FXbool overwrite=FALSE)

    Copy srcfile to a dstfile, recursively if srcfile is a directory. If overwrite is true, then the operation fails if dstfile or a file inside dstfile already exists.


    FXbool move(const FXString& srcfile,const FXString& dstfile,FXbool overwrite=FALSE)

    Move srcfile to a dstfile, recursively if srcfile is a directory. If overwrite is true, then the operation fails if dstfile or a file inside dstfile already exists. If srcfile and dstfile are on the same file system, the files are moved; if srcfile and dstfile are on different file systems, the files are copied and the original srcfile is removed only after all files have been copied successfully.


    FXbool link(const FXString& srcfile,const FXString& dstfile,FXbool overwrite=FALSE)

    Link dstfile to srcfile. If overwrite is true, then the operation fails if dstfilealready exists. If srcfile and dstfile are on different filesystems, the operation will fail.


    FXbool symlink(const FXString& srcfile,const FXString& dstfile,FXbool overwrite=FALSE)

    Make a symbolic link from dstfile to srcfile. If overwrite is true, then the operation fails if dstfilealready exists.


    FXString symlink(const FXString& file)

    Return the destination of the symlink file.

Other File Operations

    Finally, some operations which don't fit in any easy categories:


    FXbool match(const FXString& pattern,const FXString& file,FXuint flags=(FILEMATCH_NOESCAPE|FILEMATCH_FILE_NAME))

    Perform wildcard match of file against the pattern. The pattern may contain special wild-card characters:

    ?Matches single character.
    *Matches zero or more characters.
    [abc]Matches a single character, which must be a, b, or c.
    [^abc]Matches a single character, which must be anything other than a, b, or c.
    [!abc]Ditto.
    [a-zA-Z]Matches single character, which must be one of a-z or A-Z.
    [^a-zA-Z]Matches single character, which must be anything other than a-z or A-Z.
    [!a-zA-Z]Ditto.
    pat1|pat2Matches either pat1 or pat2.
    pat1,pat2Ditto.
    (pat1|pat2)Matches either pat1 or pat2; patterns may be nested.
    (pat1,pat2)Ditto.

    Matching can be influenced using the flags as follows:

    FILEMATCH_FILE_NAMENo wildcard can ever match "/" (or "\","/" under Windows).
    FILEMATCH_NOESCAPEBackslashes don't quote special chars ("\" is treated as "\").
    FILEMATCH_PERIODLeading "." is matched only explicitly (Useful to match hidden files on Unix).
    FILEMATCH_LEADING_DIRIgnore "/..." after a match.
    FILEMATCH_CASEFOLDCompare without regard to case.

    For example,

    *.cpp|*.cc|*.cxx|*.CMatches some common extensions for C++ source files.
    image.(bmp,gif,jpg)Matches a file called image given as either bmp, gif, or jpg.
    *.[^o]Matches any file except object files.


    FXint listFiles(FXString*& list,const FXString& path,const FXString& pattern="*",FXuint flags=LIST_MATCHING_FILES|LIST_MATCHING_DIRS)

    List files matching pattern in the directory given by path. Returns the number of files in the string-array list which matched the pattern or satisfied the flag conditions. The flags parameter can be a combination of the following:

    LIST_MATCHING_FILESMatch files (default).
    LIST_MATCHING_DIRSMatch directories (default).
    LIST_NO_FILESDo not match any files.
    LIST_NO_DIRSDo not match any directories.
    LIST_ALL_FILESMatch all files.
    LIST_ALL_DIRSMatch all directories.
    LIST_HIDDEN_FILESMatch hidden files also.
    LIST_HIDDEN_DIRSMatch hidden directories also.
    LIST_NO_PARENTDo not match "..".
    LIST_CASEFOLDPerform case insensitive matching.


    FXTime now()

    Return current time.


    FXString time(FXTime filetime)

    Convert filetime to date-string.


    FXString time(const FXchar *format,FXTime filetime)

    Convert file time to date-string as per strftime(3). Format characters supported by most systems are:

    %a %A %b %B %c %d %H %I %j %m %M %p %S %U %w %W %x %X %y %Y %Z %%

    Some systems support additional conversions.


    FXbool info(const FXString& file,struct stat& info)

    Return info of file as reported by system stat(2) function.


    FXbool exists(const FXString& file)

    Return true if file exists.


    FXbool identical(const FXString& file1,const FXString& file2)

    Return true if file1 and file2 are identical, i.e. refer to the same inode.


    FXuint mode(const FXString& file)

    Return the permissions of file.


    FXbool mode(const FXString& file,FXuint mode)

    Change the permission of file to mode.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/app.html0000664000175000017500000006211112130340076011542 00000000000000 Documentation: The Application Class
Documentation: The Application Class [Remove Frame]

The FXApp Class

    The application object manages the message queue, timers, chores, signal handling, GUI updating, and other system facilities. Each FOX application will have exactly one application instance. Every FOX application will start by constructing one FXApp object prior to building the GUI.  Usually, the FXApp object is the last object to be deleted as well.

    Using the code below, the application object will be constructed on the stack and hence is automatically destroyed when the program terminates.  Also, when the application object is destroyed, all the windows and other resources it knows about are destroyed as well.

    int main(int argc,char *argv[]){

    // Make application
    FXApp application("ApplicationName","VendorName");


    // Open display
    application.init(argc,argv);


    // Make window
    MainWindow* mainwindow=new MainWindow(&application);


    // Create it
    application.create();


    // Show Window
    mainwindow->show();


    // Run
    return application.run();
    }

    In the first line of code above, an application object is constructed.  The constructor has two parameters, the application name, and the vendor name.  The application name and vendor name are used to determine the application's registry settings.

    The next line of code initializes the application object, passing in the command line arguments of the process.  The application object parses its own arguments and removes them, but leaves the remaining arguments alone, to be interpreted by your own code.

    The next line creates a toplevel window, passing in a pointer to the application object.

    The call to the application object's create() function realizes the entire widget tree, i.e. creates the necessary resources in the system (X Server or Windows GDI), to turn what was up till that point a collection of C++ data structures into a real-life application which is able to receive events and draw on the screen.

    The final call to run() starts the toplevel event loop. A typical application will not return from this loop until the user closes the application.

Event Loops

    Most GUI applications have something called an event loop or message loop.  Unlike batch-oriented programs which read a datafile, perform some processing, and then produce an output file, a GUI driven application spends almost all its time in an event loop, waiting for user input, determining where that input came from, and then dispatching it to the proper function to perform some processing. Unlike batch oriented programs, these functions are typically very short, and mostly take only very little time to execute, and so the user is in complete control of the application most of the time. The events a GUI program processes can be of different types:

    • Keyboard input;
    • Mouse movements;
    • Mouse buttons;
    • Inputs from other sources (e.g. network sockets, timers, signals, and so on);
    • Changes in selection and clipboard ownership;
    • Drag and drop events;
    • Window repaint events;
    • And other things which can happen to a window.

    The application object is solely responsible for coordinating all these events and dispatching them to the proper destination where they are handled.

    FXApp performs delayed repaints on windows; it delays issuing the repainting of windows until all other events have been performed.  The theory behind this is that most events are not as time-consuming as redrawing, and also that many events cause more things to be redrawn so if we were to draw as soon as possible it might be invain.  Also FXApp combines repaint rectangles so as to minimize the video card hardware setup and tear down time relative to the number of pixels drawn.

Event Queues

    Certain devices, such as a moving mouse, can generate events faster than some programs can process them.  To prevent losing events, events are commonly queued up, so programs can catch up as fast as they can. Likewise, the drawing commands a GUI program generates as its trying to draw buttons and other controls on the screen are also queued up, so that the X server (or GDI on Windows) can take its time to catch up.

    Finally, the X Server has its own event queue and drawing queue, making for a total of four queues.  All these queues allow for much faster performance of applications, as bigger chunks of data can be transmitted between the application and the X server, and fewer context switches of video card and cpu hardware are needed.

    From the point of programming in FOX, the existence of these queues is for the most part hidden, but in a few cases some special functions are available that you may need to call:

      FXApp::flush(sync)

      This function flushes the output queue, i.e. the commands which have been already performed are pushed to the X Server, where they are executed. If we want to make sure that the display shows the correct picture, however, just pushing the commands to the X Server is not enough! Sometimes we need to make sure that these commands have been executed before we continue!
      Thus, when passing TRUE to flush(), the X Server is forced to execute the commands queued up in the drawing queue prior to returning control to the caller.

    Sometimes, we want to check if there are any events, but continue to do some processing if no events are available.  Under normal circumstances, returning to the event loop will cause our process to block until there are events; but if there is stuff we may want to do, this is of course not desirable.  We have just the right solution for this problem:

      FXApp::peekEvent()

      This function will return TRUE if there are any events ready to process, and FALSE if there are none.  The peekEvent() function can be used when we are doing a long calculation and we want to check if the user has hit the STOP button.

Types of Event Loops

    There are several types of event loops supported, each of them is appropriate for certain situations.  Most commonly, application developers will however only call:

      FXApp::run()

      This is the top level event loop, and it will only terminate when the application is ready to call it quits. When run() finally returns, its return value is the exit value passed to stop() earlier.

      FXApp::stop(code)

      This function terminates the top level event loop, but also terminates all nested event loops which have been directly or indirectly invoked from this top level loop.  Each nested loop is terminated with a code of zero (0), but the top level event loop is terminated with the given code.

      FXApp::runOneEvent()

      As the name implies, this function reads and then processes one single event, and then returns.  It is primarily interesting to use in combination with peekEvent(), as peekEvent() returns TRUE if there is at least one event ready to be processed.
      If there is no event ready, runOneEvent() will block until there is at least one event.

      FXApp::runWhileEvents()

      This function processes events while events are available.  This function is useful if you are running a long calculation, and want to temporarily dip into the event stream to process some event, for example to redraw damaged windows and so on.

      FXApp::runUntil(condition)

      This function processes events until the variable condition, which is passed as a reference, becomes non-zero.


    Modal dialogs are dialog panels which block interaction with the rest of the application until they are completed.  For example, while trying to open a file, the application is unable to interact in other way with the user until some file is selected and loaded in. In FOX, the only difference between normal dialogs and modal dialogs is how they are run:- modal dialogs are run by calling:

      FXApp::runModalFor(window)

      This function runs a nested or recursive invocation of the event loop, i.e. it re-enters an event loop and processes events for a while, and returns only when stopModal() or stop() is called. As long as runModalFor() is running, user-input events to all other windows, except for given window and the windows owned by it, are being blocked. No user-interaction with other windows is possible until runModalFor() returns, but other windows are allowed to process other events like redrawing and resizing.
      When it returns, it returns the value passed to the stopModal() function, or 0 if stop() is called to terminate the application.

      However, it is quite possible, and in fact common, that one modal dialog invokes another.  In that case, only the most recently invoked dialog can be interacted with.

      FXApp::runModalWhileShown(window)

      The function runModalWhileShown() runs until either stopModal() or stop() is called or the specified window becomes hidden. This is of interest when running popup menus or other temporary windows. If the window parameter is NULL, all input is blocked; otherwise the input to all windows except the given window (and all windows owned by the window) are blocked.

      FXApp::stopModal(window,code)

      Calling stopModal() causes the modal event loop with the matching window to terminate with code.  However, stopModal() also causes all modal event loops which are nested more deeply to terminate with code zero (0).

      FXApp::stopModal(code)

      Calling stopModal() causes the innermost modal event loop with the matching window to terminate with code.  This is the most common method to terminate model loops.

      FXApp::isModal(window)

      This function returns TRUE if a modal loop is in effect for the given window.

    Modal dialogs are always run with runModalFor(). Because it is so common to construct a dialog on the stack, run it modally, and then process the inputs thus obtained, there is a convenience member function FXDialogBox::execute() which calls create(), show(), and then runModalFor() in turn. The FXDialogBox also understands several messages, for example ID_ACCEPT, ID_CANCEL, and SEL_CLOSE which call stopModal() returning a code 1, 0, and 0 respectively.
    The return code of zero from FXDialogBox::execute() indicates that the dialog window was closed or cancelled.  An application should typically not perform any action when a dialog is closed.

Global Application Mutex

When programming with multiple threads of control, one single thread (the Main Thread) is responsible for the User Interface, while other threads are Worker Threads churning in the background.  Occasionally, the Worker Threads need to interact with the Main Thread.
This is accomplished by means of the global application mutex.

When the display is opened, the Main Thread acquires the global application Mutex. It continues to hold this Mutex while it is processing events, until the Main Thread is about to enter a blocking state. 

Just before entering the blocking state, the Main Thread releases the global application Mutex.  Worker Threads are then free to acquire the
global Mutex and then play around with data structures safely.  As soon as an event comes in, the Main Thread wakes up and immediately reacquires the global application Mutex.
Thus, basically every message or callback in the system is performed while the global Mutex is held by the Main Thread.  This ensures that no Worker Thread is simultaneously modifying some data structure when the Main Thread is also.

The Main Thread continues to hold the global Mutex until display is closed.

The global Mutex may be obtained by reference with the function:
    FXApp::mutex()

    This function returns a reference to the global Mutex.

Having the Mutex returned as a reference allows it to be passed directly into the FXMutexLock convenience class, which performs Mutex locking and unlocking by means of constructor and destructor.


GUI Updating

    The event loop ordinarily enters a blocking system call when no events are available.  However, if any windows have been marked as damaged, the system will peform repaint events that have been queued up to this point.
    When no more events call for attention, and all windows have been redrawn properly, there is still just a bit more to do before entering the blocking state, and that is the GUI-Update.

    The GUI-Update phase is entered just prior to blocking the user-interface.  Since there is nothing else the application would be doing (after all, it is about to block for new events!), FOX takes advantage of this quiet time to iterate through all widgets in the widget tree and issue a SEL_UPDATE message to that widget's target.
    The receiver of the SEL_UPDATE message typically inspects the state of the application, and decides whether the sending widget should be update to properly reflect that state.

    For example, a Save Button may be grayed out when the user has not yet made any modification to a document. You can also change the values of certain controls such as Sliders, Text Fields, Check Buttons, Color Wells, and so on.
    The result of this procedure is that a short time after processing a burst of events, the User Interface of your application automatically updates to reflect the state of the application.

    The application determines whether a GUI-Update pass is warranted based on the return value of messages it sends.  If messages are sent but aren't handled by a widget or by your application code, it doesn't need to perform an update pass.  On the other hand, if there is reason to believe a message has been handled, the application automatically calls refresh() to schedule a future GUI-Update pass.

    The GUI-Update pass is performed in a cyclical fashion, that is to say, each widget gets updated roughly equally often.

    In a few cases, it is nice to be able to forcibly schedule a GUI-Update pass; for example, just before entering a modal dialog; because the callback handler invoking the dialog does not return until the dialog is done, an explict call to refresh() may be needed to ensure that the controls in the dialog are properly updated when the dialog is displayed. In this case you can call refresh() explicitly from the application code.

      FXApp::refresh()

      This function reschedules another GUI update to be performed in the future.

    At other times, it may be necessary to ensure that the GUI-Update pass is performed immediately; this ensures that all the controls in the application have been updated to their current state.  Since this involves having a SEL_UPDATE sent from each widget, it is of course rather expensive.  Fortunately, it is not often necessary to do this:

      FXApp::forceRefresh()

      Calling this function will cause an immediate GUI update pass to be performed.  Unlike the normal GUI update, which takes place unobstrusively one and a time, prior to blocking, forceRefresh() will not return until all windows have been refreshed. It is therefore quite expensive, and should be used only when strictly necessary.

    The GUI update has no impact on the perceived speed of an application because between each pair of GUI updates performed, a check for events is performed.

Visuals

    An FXVisual is a description of the pixel organization on the display. For example, some high-quality graphics cards can do 24 bits per pixel; other graphics cards may be limited to 16, 15 bits per pixel, or even just 8 bits/pixel.  FOX programs can even work on 4 bit/pixel (VGA mode) and 1 bit/pixel (monochrome), although it wouldn't be as much fun!

    Besides depth (number of bits/pixel), there are also other characteristics which come into play describing the pixel organization, such as colormaps, and wether or not a colormap can be written or not, and the byte and bit organization.

    Colormaps are commonly used on 8-bit/pixel systems.  Most hardware only supports one hardware colormap, and this must be shared among all programs on the display.  Because legacy toolkits such as Motif do not deal with full colormaps very gracefully, FOX applications deliberately do not try to grab all 256 colors from the colormap, but only 125 colors.  Images and Icons are dithered to get the best possible rendering given the number of colors available.

    You can improve the look of your program quite easily, however, as the maximum number of colors which the default visual tries to allocate can be easily changed using a command line argyment; for example,  "myapp  -maxcolors 256" will start myapp in such a way as to attempt to acquire all 256 colors from the colormap.

    Because other programs may already be running, the desired gamut of colors may not be available.  If the exact color can not be obtained, FOX will try to find the closest color available and use that.

    Normally, the FXVisual a window uses is copied from its parent.  You can change this visual for each window, or you can call:

      FXApp::setDefaultVisual(visual)

      This function will change the default visual to be used for all toplevel windows; the child-windows will simply inherit the visual from their parent.

    Alternatively, the maximum number of colors can also be set via the registry, using the maxcolors key under [SETTINGS] any number less than or equal to 256 colors may be specified, FXVisual will determine the best gamut to pick from the allowable number of colors.

Wait Cursors

    Sometimes, an application needs to undertake a long task, such as e.g. loading a big file.  In such cases, it is good form to present the user with some feedback to indicate that the application may be temporarily unresponsive.  Common ways to do this are progress bars and changing the cursor shape to a stopwatch, or hourglass, or something like that.FXApp supports this by means of the following functions:

      FXApp::beginWaitCursor()

      This will change the cursor shape for all windows to the stopwatch cursor, or the cursor designated by setWaitCursor().  Calls to beginWaitCursor() and endWaitCursor() can be nested in a stack-like fashion, with only the first call to beginWaitCursor() and last call to endWaitCursor() actually changing the cursor shape.

      FXApp::endWaitCursor()

      A matching call to endWaitCursor() will restore the original cursor for each window.

      FXApp::setWaitCursor(cursor)

      This will change the cursor shape used in during a beginWaitCursor() endWaitCursor() pair.

      FXApp::getWaitCursor()

      This returns the current FXCursor being used as hourglass or stopwatch cursor.

    The beginWaitCursor() and endWaitCursor() calls can be nested pairwise, so that a functions which bracket a long calculation by means of a beginWaitCursor/endWaitCursor pair can call upon each other.

Drag Types

    Exchanging data via the Primary Selection, the Clipboard, or by means of Drag and Drop requires that all applications agree with the type of data being exchanged.
    This is done by registering a Drag Type. In most cases, the name being registered should be a mime-type, such as "text/plain" or "image/gif".

    Manipulating drag types is done with the following API's:

      FXApp::registerDragType(name)

      This will register a new drag type based on the mime type name.

      FXApp::getDragTypeName(dragtype)

      Obtain the name of a previously registered drag type.

The drag types must be mime types as defined in the XDND standard.



Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/registry.html0000664000175000017500000003744412130340076012645 00000000000000 Documentation: The FOX Registry
Documentation: The FOX Registry [Remove Frame]

    Many applications have a need to read settings and configuration parameters from configuration files.  For example, it is common for applications to remember which documents have been used recently with an application, or what color a user has changed his/her window background to.

    Historically, each application has implemented its configuration files in its own way, resulting in a plethora of file formats, each with their own syntax and semantics.  Moreover, many applications can only read, and not write these configuration files; they rely on the user to fire up an editor and edit them by hand.

    The FOX Registry class provides a simple method to keep track of configuration parameters for FOX-based applications.  Entries can be both read as well as written, and settings will persist across invocations because the system will write changed settings back to disk.

    Because the format is the same for all FOX applications, users will have to learn only one [very simple] syntax in case they want to edit these files by hand (although in most cases, registry files will probably be manipulated by FOX programs only).

Design Features of the FOX Registry

    A registry mechanism should allow applications from many vendors or organizations to coexist peacefully.  Also, certain settings or configuration parameters should be applied system wide, others  ``suite-wide'' i.e. for all applications produced by some organization.  Yet other settings apply only to one application. Tallying it all up, I've come up with the following list of requirements for a registry system:

    • System-wide Desktop settings.  Configuration parameters which apply to all users on a certain system, and apply to all applications.  For example, parameters specific to a certain FOX installation, such as the location of icon files, images, and other such parameters.
    • System-wide Vendor settings.  These settings are determined during installation of some vendor's application suite.  They apply to all applications which belong to the suite, and to all users on the system.
    • System-wide Application settings.  These parameters apply to a specific application, and to all users on the system.
    • Per-user Desktop settings.  Personal preferences that a specific user has changed from the system-wide settings, and which apply to all applications run by this user.
    • Per-user Vendor settings. Similarly, a user of some application-suite from a certain vendor may have changed a few things to suit his/her personal preferences.
    • Per-user Application settings.  These are specific configurations that a user may have changed while running an application.

    All settings can be ``shadowed'' or overridden.  The general rule is that more specific settings override more general ones.  FOX implements this by first loading system-wide settings, then per-user settings; within each category, Desktop settings are shadowed by Vendor settings, and those are overruled by Application settings.

    Registry settings are not shadowed when they've been changed, i.e. a setting which was changed by an application is not replaced by a settings entry loaded later.

    Finally, when settings are being written back to disk, they will automatically become per-application, per-user settings.  For instance, suppose the default system-wide background color is ``gray.''  If the user changes this, it will become a per-user default background color.  In other words, the system-wide settings are never written, except perhaps when the application is being installed.

    The FOX settings database is comprised tyically of a number of files which are placed in a certain directory structure.  The organization is as follows:

    <DIR>/Desktop The settings database for all FOX applications.  This contains things such as double-click speed, default application fonts, and so on.
    <DIR>/<VENDOR>/<VENDOR> This contains all settings for all applications produced by organization <VENDOR>. 
    <DIR>/<VENDOR>/<APP> This contains all settings for application <APP> produced by organization <VENDOR>.

    The same directory structure applies for both system-wide settings and per-user settings.  The system-wide settings are found in directories:

    /etc/foxrc
    /usr/lib/FOX/foxrc
    /usr/local/lib/FOX/foxrc
    
    Per-user settings are found in:
    $HOME/.foxrc
    

    Which is a hidden directory directly under the users regular HOME directory.

Format of a Registry File

    The format for a FOX registry file is very similar to that of the SAMBA configuration files.  It consists of a number of sections, and each section contains a number of registry entries.  Each entry is a key/value pair, where the key is the name of the particular entry, and the value is a human-readable string representing the value of that key. For example:

    # A section
    [SETTINGS]
    
    # An entry
    clickspeed = 400
    scrollspeed = 400
    
    # Strings may have to be quoted if they contain special characters
    tiger = "Tyger tyger burning bright\nIn the forest of the night"
    
    ! Comment may also start with a bang
    tippause = 500
    tiptime = 300
    

    The section names should consist of alphanumeric characters [A-Z,a-z,0-9], and may contain underscores ``_'' also.  Key names should consist of alphanumeric characters [A-Z,a-z,0-9], underscores, dash ``-'' or periods ``.''.  Value strings may consist of any non-blank character, except ``#'' or ``!'' which are used for comments.  To incorporate these and other non-printable characters, you may quote the string as shown above.  Special characters can be embedded into a quotable string using the regular C-style backslash mechanism, i.e. ``\n'' is replaced by a newline; control characters can be embedded using hex-notation: for instance, ``\FF'' represents the byte 0xff.

    Under the MS-Windows Implementation of FOX, you can use either the ASCII, human-readable implementation, or the binary version which uses the built-in System Registry.

Using the Registry

    The FOX FXApp object contains an embedded FXRegistry object, which is automatically read in when you start up using FXApp::init().  Likewise, this registry is also automatically written back out when you terminate the application using FXApp::exit().

    The application name and vendor name parameters passed in when you construct the FXApp object are directly used as the application name and vendor name for the registry system.

    To make use of the registry in your application's code, you can obtain a reference to the embedded registry object using FXApp::reg().  FXRegistry provides the following API:

      FXbool read()
       

      This function causes the system-wide registry database to be read first, followed by the per-user database.  In each category, it reads the Desktop, Vendor, and Application settings in order, overwriting unmodified settings as it goes.
      Note that upon startup, a FOX application automatically calls the registry's read() function already.  You will usually not call this function, unless perhaps to re-read the registry.


      FXbool write()

      If any settings have been changed, this will write out the changed values into the per-user, per-application files of the registry database.
      Note that a FOX application automatically calls the registry's write() function when the application terminates normally (i.e. by calling FXApp::exit()).  You will not call this function under normal conditions, except perhaps to force changed registry entries to disk, e.g. so that other instances of the same application will encounter the changed entries, even before the current one quits.


      const FXchar *readStringEntry(const FXchar *section,const FXchar *key,const FXchar *def)

      This function attempts to localize the entry key in the section of the registry database, and returns the value of this key if it is found; otherwise, it returns the specified def value.


      FXint readIntEntry(const FXchar *section,const FXchar *key,FXint def)

      Similar to the function above, only it assumes the entry's value is an integer number.


      FXint readUnsignedEntry(const FXchar *section,const FXchar *key,FXint def)

      Similar to the function above, only it assumes the entry's value is an unsigned integer number.


      FXdouble readRealEntry(const FXchar *section,const FXchar *key,FXdouble def)

      Assumes that the entry's value is a real number.


      FXColor readColorEntry(const FXchar *section,const FXchar *key,FXColor def)

      Assumes that the entry's value is a color, which may be specified by a color name, like "red", or in hex notation, as in "#ff0000".


      FXbool writeStringEntry(const FXchar *section,const FXchar *key,const FXchar *val)

      Sets or changes the value of key in the given section to the value val. If this key or section does not yet exist, it is created.


      FXbool writeIntEntry(const FXchar *section,const FXchar *key,FXint val)

      Similar, but assumes the key's value is an integer number.


      FXbool writeUnsignedEntry(const FXchar *section,const FXchar *key,FXint val)

      Similar, but assumes the key's value is an unsigned integer number.


      FXbool writeRealEntry(const FXchar *section,const FXchar *key,FXdouble val)

      Assumes the entry's value is a real number.


      FXbool writeColorEntry(const FXchar *section,const FXchar *key,FXColor val)

      Assumes the entry's value is a color; it is translated into a colorname, or as in hex notation if no name is found for the color.


      FXbool deleteEntry(const FXchar *section,const FXchar *key)

      Removes the entry from the database.  It will be removed from the per-user, per-application file, but not from the system-wide or per-user Desktop or Vendor files.


      FXbool existingEntry(const FXchar *section,const FXchar *key)

      Returns true if the given section and key exists.


      FXbool deleteSection(const FXchar *section)

      Removes the named section from the database. The section will be removed only from the per-user, per-application file.


      FXbool existingSection(const FXchar *section)

      Returns true if the given section exists.


      FXbool clear()

      Clears the entire database.


      void setModified(FXbool mdfy=TRUE)

      Mark the registry as having been modified or non-modified.  One would typically call this to prevent modified entries from being written.


      FXbool isModified()

      Returns TRUE if the database has been modified.


      void setAsciiMode(FXbool asciiMode)

      On MS-Windows, this switches the registry to ASCII based, human-readable format or, if asciiMode is FALSE, to the binary system.
       

The Standard Registry in FOX Application Object

    Note that the FOX FXApp object provides a registry already.  The standard application registry is defined in terms of the application name and vendor name that were passed into the FXApp's constructor.
    When an application is started, the standard registry is automatically loaded when FXApp::init() is called.  Likewise, modified registry settings are automatically written when FXApp::exit() is called.  You should take care that these functions are called when writing your own programs so that settings needed in your program are available when you expect them, and are properly written back to disk after the application exits
    Only changed settings are written back; if no changes have been made to any settings while running the application, no writing would take place at all.

    You can access the built-in registry object by the FXApp::reg() member function.  For example:

    FXColor canvasbackground = myapp->reg().readColorEntry("SETTINGS","background",FXRGB(255,255,255));
    

    To read a background color from the settings database, and default to white if no entry exists.

    When writing the registry, FOX first writes to a temp file, then renames the temp file to the regular registry file.  Since rename() is an atomic system call, either it works and the new registry is in place, or it doesn't and the old registry is still in place; at no time would a partially complete registry file be left behind; therefore, the registry mechanism should be quite safe even in the presence of multiple applications simultaneously trying to access the same registry.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/header.html0000644000175000017500000000175511637250333012226 00000000000000 fox-toolkit.org - Documentation
Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

fox-1.6.49/doc/download.html0000664000175000017500000001320612130340076012572 00000000000000 Download
Download [Remove Frame]

Access to the FTP Directory

    Some people have problems getting to ftp.fox-toolkit.org via FTP. This is due to FTP's funny way of setting up TWO connections, one for data and one for commands. It is a problem because the data connection comes in at a random (high) port number, and may therefore be blocked by the firewall. You can try "passive" mode FTP (typically "ftp -p") but if that doesn't work your best bet is to just try to access the directory via HTTP.

    Via FTP:  ftp://ftp.fox-toolkit.org/pub.

    Via HTTP: http://www.fox-toolkit.org/ftp.

Downloads

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/gpgkey.html0000664000175000017500000000545412130340076012257 00000000000000 Documentation: Keyboard Focus
Documentation: Keyboard Focus [Remove Frame]

    In case you want to contact me PRIVATELY, here's my GPG Key:
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v1.2.3 (GNU/Linux)
    
    mQGiBD2vfJcRBACQsfpoxj7Gjh+I4oATmEJfBcLt8o6rzZl3MzPr2wwEL+afGmIc
    RAK9LNzQ+0LQIVI6UoiChxjuO6gu2KNg9cLRGiXDZaobzMAxsC75w38KQOL8sJvy
    QWITizSTs2NOtGvisrsKyQv5mXa1J061P1u14vtDoZnXPwj2+qVBtwSDdwCgmJJN
    b76241OTrkWxyTSUytIyf1ED/2fq9BLbe0XpD2txK/JpKtCRuyrpWRTIaoGYb9qg
    l82gn7Z7MD2KhQh5v88rl36nA1vV3IeYWXxOGxNwe0SErG+Lc9RXweuIruo1TKGA
    en0Zhs8GKn5eCVOoxCBP7EQ9Wpln7LqVCPhtanss/cb2nSVQhMOTAMJsuzbUfjKo
    IFFWA/9Y6E+bhf9so44lh6WM/oZKK501JsROoRxTUbP/7xMbk95lgk3DO4PbljYK
    TjLD3Iqmk6i6r27KGwOg/VYJ4lOc1XGaO/T8WtWqikFV1WyCpyCV16t4harBc84Y
    YDn/sXY15OQ/ndbxAtFzzyD3tfErjdmQJUoMSYjh9TUoZutqQrQ8SmVyb2VuIHZh
    biBkZXIgWmlqcCAoRk9YIERldmVsb3BlcikgPGplcm9lbkBmb3gtdG9vbGtpdC5v
    cmc+iFkEExECABkFAj2vfJcECwcDAgMVAgMDFgIBAh4BAheAAAoJEJHVfDiFkJAb
    /2kAmwc3F+EZN2TJYYQbRPSiVaZxMOwbAKCGmeBs4zlKNZVNGy2PbcxZCKhLnYhG
    BBARAgAGBQI9s5LjAAoJEA9XtVuul0L/bvcAnAmj0ApNLpyVkjF83Q/2IHhIQblY
    AJ4vBaxGjpyaHtDmJG8dmbvfe2mDo7kCDQQ9r3yfEAgAtVQlwNSWqkdRvsB9bhKa
    JI/NaOt6JW3zdlf/IXXpjUGBOwSQEow/e1yHcCn/cqTqO44csz4fXnl++sBCBUHl
    QB51f3YUYJuCmzHBqhDXXsSCRReRtXV7euDaFJghESAHapR99Wh2C1qFgB54gmod
    HcY2RVmotZwLgno+HIiz/ejYBz8NBPv2HXaw68kZh63HM5LaAO3liYIQmb8CT9Q9
    kLIuv4pzLHNRn1E++jJTv8+PHUjjmggWnvY7h4cA+2SFYA856XlGqyYPihp79J+0
    FtrKVLzxZ+1z53rF79AvQCZtXBnfWQYYB84W0Bno1GR24qayhMsCq44G8YUVDdgS
    WwADBQf+JXl8lKO1N+Mg898uV4dNAkfFA/V84dp+BtO8v7VMXD/7Vwxixlre118n
    I1x3NmWCnk5pg2D+XBrsKdL15njnyBwIJ0EQ3ZIAfnIGZNgI+4Pm/NKIq7ueGjL5
    aPJXL+bFNxTfuQvh+5dt7jP8nObpZ77it+pThTt3sxMea/N0Z/y6f4wc41wyyRyU
    56n30WwB0wBiWK2z67r3p0Bh61zHA04WNnvw1lvI02o0CvhTP9YuSAhncEFyMDs5
    2r5jXrGd5E4RuxTjzAbpaKWUhtgti2up11lc9hlthluYDSzQQr70ptOagv2u+5d8
    HJ98EDEXY5KIX/zLjVN1iE241JXDTYhGBBgRAgAGBQI9r3yfAAoJEJHVfDiFkJAb
    lTUAnRojkProhc424xEhIc55AdX9OSXHAJ9mlnDttPplbWC8E8Aga0p4g/4jyw==
    =8wYw
    -----END PGP PUBLIC KEY BLOCK-----
    

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/menu.css0000664000175000017500000000371512130340076011557 00000000000000BODY { font-size:10pt; } A { color:#404040; font-size:10pt; font-family:verdana,sans-serif; text-decoration:none; } A:hover { color:#993300; font-size:10pt; font-family:verdana,sans-serif; text-decoration:none; } .DECORTHING { color:silver; background-color:gray; width:20px; height:100% } .SEPHOR { color:silver; background-color:#000000; height:1px; width:100%; }                .SEPVER { color:silver; background-color:#000000; width:1px; height:100% }                UL { list-style-type:square; } LI { white-space:pre; } #TOPTITLE { color: silver; background-color:black; font-family:verdana,sans-serif; font-size:10pt; font-variant:small-caps; font-weight:bolder; letter-spacing:4pt; text-align:center; }        #LOGO { color: silver; background-color: silver; font-family:verdana,sans-serif; font-size:10pt; font-variant:small-caps; font-weight:bolder; letter-spacing:4pt; text-align:right; } #MENU { color:black; background-color:#6495ED; font-family:verdana,sans-serif; font-size:10pt; font-weight:bolder; vertical-align:text-top; padding-left:5px; padding-top:20px; margin-top:0px; width:130px; height:100%; } .PAGEMENULINK { color:#993300; text-decoration:none; background-color:white; } .PAGEMENULINK:hover { color:#040404; text-decoration:underline; background-color:white; } #submenuitem { color:black; background-color:#B0C4DE; font-family:verdana,sans-serif; font-size:10pt; font-weight:normal; text-align:left; vertical-align:top; padding-left:2px; padding-top:2px; width:200px; }                #PAGETITLE { color:black; background-color:gray; font-family:verdana,sans-serif; font-size:10pt; font-variant:small-caps; font-weight:bolder; letter-spacing:4pt; text-align:left; padding-left:3pt; } .PAGE { color:black; background-color:white; font-family:times,serif; font-size:11pt; font-weight:normal; text-align:left; vertical-align:top; padding-left:10px; padding-top:10px; padding-right:10px; }        .NEWSSECTION { padding-left:30px; }        fox-1.6.49/doc/art/0000775000175000017500000000000012130343076010744 500000000000000fox-1.6.49/doc/art/nerd_inside.gif0000644000175000017500000000645411637250333013651 00000000000000GIF89aPJ÷ÿÿÿ½½½ÆÆÆÎÎÎÖÖÖÞÞÞçççïïï÷÷÷ïçç÷ïïÿ÷÷ÎÆÆÖÎÎÞÖÖçÞÞçÞÖÞÖÎÎÆ½ÿ÷ç÷ïÞïïç÷÷ïÿÿ÷ÎÎÆÖÖÎÞÞÖççÞÆÆ½÷÷çççÖïïÞÖÖÆï÷÷÷ÿÿ½ÆÆÞçï½ÆÎçï÷ï÷ÿÖÞçµ½ÆÞç÷½ÆÖçïÿÆÎÞÖÞïÎÖ絽έµÆµÆïœ­Ö”¥ÎŒœÆ½ÆÞœ­Þ”¥ÖÖÞ÷ÎÖïÆÎçµ½Ö­µÎ¥­Æ­½ï¥µçŒœÎœ­ç„”Æ”¥Þ{ŒÆsŒÞk„Ö½Æçœ¥Æ¥µïŒœÖ„”Δ¥ç{ŒÎc{Îk„Þc{ÖZsÎÎÖ÷ÆÎïµ½Þ­µÖ¥­Î½Æïœ¥ÎŒœÞ„”Ö{ŒÖs„ÎZsÖRkÎRkÖJcÎÆÎ÷µ½ç­µÞ¥­Ö”œÆŒœç„”Þ{ŒÞs„Ök{Îs„ÞJcÖBZÎBZÖ9RÎ9RÖµ½ï­µç¥­Þœ¥Ö”œÎŒ”Æœ¥Þk{ÖcsÎk{ÞcsÖZkÎZkÖRcέµï¥­ç”œÖŒ”Μ¥ç„ŒÆ{„ÆRcÖJZÎJZÖBRΔœÞŒ”Ö„ŒÎ”œçŒ”Þ„ŒÖŒ”ç{„΄ŒÞs{Îççïïï÷÷÷ÿÆÆÎÎÎÖÖÖÞÞÞç½½Æçç÷ïïÿÎÎÞÖÖçÞÞïÆÆÖµµÆ½½ÎççÿÞÞ÷ÖÖï½½ÖµµÎ­­ÆÖÖ÷ÎÎï½½ÞµµÖ­­Î¥¥ÆÎÎ÷ÆÆï,PJÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£ÁKVQ‘óc@(’CeJ§K7² èQ?‡Â rãFE@ñDæ˜(išÈ™â)fDrØâ94ŒÕ«X³Z¥ê& 4M*4%dOžZÓªMË3‡X„XØ„A»¶®]«nߤb„.ÖDoÞt½ú§pa¬ß$Z;E¯@*PünuóGO—!f’øˆ1jTŠc¨‚e¦Æ.kú„ œµñÛ$óü³fPŠ4h(ð`ƒïß hpa 8ù(”zµDbÞbá3xk˜5YJØpÀEÀÿpA58xÐA'XCô„¡"V‹ß®Hi¨ža§=|œÁÂ6ìäF|,Jd€Á¬°S'iTGY#¨l`ÁCTÁBXpV<¡+0¸@L§x1XWNˆRÁŠm0â\st`FuWu•†kéàÇ‹}¸2ãD$q Â#‰ˆ41ÞFTüÑUWKhB#’J"rH8Øbly!ËF;X9W¨lhÑ°è† ¨b†$ª)¦OMdtÊWª¡É© áAšÜ1——P\rËÉ÷ÆžhL9Q%.Î%ÈépH{\"†¥<æÇVy„Àà >8ÿñŤ$²–D–¨ñ"e¸Ùe”(Ä\`¬â‚šsía€£t±Z­"Ht#Ï…A¡m`Q$n¡ë´n°‘Ð ë´nÕgDÕJCXˆ„|k"oµÅˆüш•h,t€³(J"}‘@70d nÀ*x î]|Q‡“nØ!€n¼³p`‰|Üz2<-"Žü`©@–äÑ•ÀÈú¾a-8°†^ @%;t°IüÑ£è†àíP±T4E ã‘áÆ]°„ýœ(T Àz¸‘†˜üÐÁÔ@«|Üÿ|к‚a ÜxˆÎ\An’‰_À1‡ÚMp&L?r€s™ìtʔЊ]€ÊN´’û^F'š(Œ{a §n9æH籕0@ RÏ¥{B‹ÃEª³nÕVµ± V1¤X Q!`°ðæ6Ta}ØIÐ&Ó`§’ õl ‘9UiS 6èó6a̾ã qkƒ <\W¸í$"¨©ï—c@u5ƒzÀ€"*³«ˆõŸ“°àªÀ`È> ¨W.áýP‰—ØÄ’†Oœ9‹è"&6a $ ½]Öxòí!rà‡sí±“mƒWÌ%D³W*1®ZJP Ø¥ÀÃÅT!7àÉòœ†8¹K!—ÿK6*Fä†>mr1~XÄ•VýZU‰<Èæ2ˆtÀ[™1BR~ Tø bT+@ õ…AÌ…Ü’¨bì†xDI¢÷ âîñÀlˆàa¿‹D¨" D¸¹C^úœ÷N$}+Û—ª^À  YÙ @(T5€håAˆ:Dt…+¡Aí á"ÜØ£I¸,“ðÁ£s Èd ââ -ðÜÈ›·zÊ€¾•(¼ J»äx€XFär ÎVázŠTb(™xŽ;" ¤Q\t¥?Ð!ôé7Ð ®¹´†ÔÈ%Vq†¹Ä´6üE̪²Y‘¨ hÃÿ¡*Â,8‚<·Î@á¼Å€]͇2Ø@ˆ)(ø ¦Ãö0¿ìD<Pq00³bIr×~ÀhÐ@ XX € g|p’e}°%Ná(Ôt} 'Ya =ÁT!Ù²'n ($€bñ{À£Àk€±{w¡h ƒŽ. I€'«Ñ.;È/DQ0P  }ŽÁXÍRƒÊqk B‰‘…YhRàI@ P@…ËÂ*Ðû4 ¤1†€kð†] …P° gÅÈG†Ä*‘wˆÐë±py¨‡ñ«Òz­ç‰¨ˆ’8‰”X‰–x‰—;fox-1.6.49/doc/art/oll.gif0000644000175000017500000000010711637250333012141 00000000000000GIF87aÂUªb‰°…£Â¾Îßÿÿÿyš¼ßçïUª,º¼â©!)’ÇˆÆ‹ç ‚“;fox-1.6.49/doc/art/mouse.gif0000644000175000017500000000102711637250333012505 00000000000000GIF89aX³333ÿÿÿ’’’ÉÉÉñññ………\\\AAA­­­iiiNNNäääÖÖÖ»»»   www!ù,XÿÈI«½8ëÍ»ÿ`(†F!œ…1®¬¨ D Ïá(+-Oz@õ<ÝèàèÑβ4›?KÁ˜ R“Ò`ÆH‚ Á°<–Ž ±#‘1lk¸0H‹ÎìäÍ¡@t2]rfQbN„†! 2~€ƒOfyy 2'*‹l–•§ue©oq|V® 1-¸ ŒhF ^Á¹Å2 ol ¼Y2_Fe†@"E„»2È52#`”‰#[›à\ï±¤Ëæˆè×-ëF4ßú”ØËv莺ì$ðcä©¡<[nUw*ˆE öÍø÷j–håÄRĆHÄÂ`ÝN8`+ØoõFâ+h0D¦ˆ Ð Á>‚…óh¬(hWÆ¢A@ÄIJÕ ¤„0h ˜.g:(sf‚]EóÒhM-$XË)FTЍHÊ[“Œ´|ÂPgÕ½Cs™”ÄŽ5 ÒxÅöïß²Œ9„CøpB‚785ì¸ã¸.àIž;$ž± §ijΰDJçÀ¯A`í71¾#ë¦3–¬  É(-àöÔãÈ“+_ÎüB;fox-1.6.49/doc/art/widget.jpg0000644000175000017500000002114511637250333012656 00000000000000ÿØÿàJFIFHHÿþCreated with The GIMPÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ,"ÿÄÿÄN SU”Ñ!146Vrt’±²5Au‘•³ÓQa"#2Rq“´$3B¡Ácƒ7Cbs‚¢ðÿÄÿÄ)2Q3!1ARqÁð±áÿÚ ?þ÷<)h#LjÈPaµ\÷½nF¢qª©=¬¿H)»Cw‹mÌjçb‹åR¤´´ –ê!þÃП€óÚËô‚›´7xÏk/Ò nÐÝ圚‚qMA¸€FÏk/Ò nÐÝã=¬¿H)»Cw–rh}Ä4 >â=¬¿H)»CwŒö²ý ¦í ÞYÉ h!÷dÐ4ûˆlö²ý ¦í Þ3ÚËô‚›´7yg& ‡ÜA“@ÐCî ³ÚËô‚›´7xÏk/Ò nÐÝçËkàE!/NeòŽÊ`ÂT„Æ\ä|FµoÂjú•Kð$¡B—†Çµ±\Ö¢,G±·»ó[‘åýlœÑj"«û¥gµ—é7hnñžÖ_¤Ý¡»Ë94 >â š‚q žÖ_¤Ý¡»Æ{Y~Sv†ï,äÐ4ûˆ2h}Ä6{Y~Sv†ïíeúAMÚ¼³“@ÐCî É h!÷ÙíeúAMÚ¼gµ—é7hnòÎMA¸ƒ& ‡Ü@#gµ—é7hnñžÖ_¤Ý¡»Ë94 >â š‚qžÖ_¤Ý¡»Æ{Y~Sv†ï,äÐ4ûˆ2h}Ä6{Y~Sv†ïíeúAMÚ¼³“@ÐCî É h!÷ÙíeúAMÚ¼gµ—é7hnòÎMA¸ƒ& ‡Ü@#gµ—é7hnñžÖ_¤Ý¡»Ë94 >â š‚qžÖ_¤Ý¡»Æ{Y~Sv†ï,äÐ4ûˆ2h}Ä6{Y~Sv†ïíeúAMÚ¼³“@ÐCî É h!÷ÙíeúAMÚ¼gµ—é7hnòÎMA¸ƒ& ‡Ü@#gµ—é7hnñžÖ_¤Ý¡»Ë94 >â š‚qžÖ_¤Ý¡»Æ{Y~Sv†ï,äÐ4ûˆ2h}Ä6{Y~Sv†ïíeúAMÚ¼³“@ÐCî É h!÷ÙíeúAMÚ¼gµ—é7hnòÎMA¸ƒ& ‡Ü@#gµ—é7hnñžÖ_¤Ý¡»Ë94 >â š‚qžÖ_¤Ý¡»Æ{Y~Sv†ï,äÐ4ûˆ2h}Ä2[[.ªˆ–‚›´·yuQoE3ÖÖ^ lEmR 4T’‹r£S÷T»-É`õàkmÌjçb‹åRÌ·%ƒÔoÛs¹Ø¢ùT³-É`õਠý±ô4Ý+ó˜y[ʤíÄÏÔ)ñ±3PqX0Q×_­^EN%SÖØún•ùÌ<­å.vµbgéôø8鍨¬xHÛîˆ×/ ª')Ý/Z¼tþgôÌ´5Zu~‘/ØÈZ8s³MZ¼6ºW÷ÃUàN>ºŒ+e!hè´ŒóÆ}çýoÝpS‹b;‹×}÷q¥ß™¹’¡ÒiÑV,.JV"¥ÊøìbÝüQ Uš\ìݵ³påd²¬¢&&4kxo[×ð¼“Éb—/;)M…¡?—Í6ü9œJBýUSôS.K“ù`A¶ÜÆ®v(¾U,ËrX=Fø­·1«Š/•K2Ü–Q¾F¶ÜÆ®v(¾U,ËrX=Fø­·1«Š/•K2Ü–Q¾z€ŽsXÕs•UOÓ3ná2=‡+ð¢OJ1ìr^ŽjÇb*/ä‡)§‡ßA”ÀÓÃÍ9¨i»37 Ñ³š†›³3qé—*šÊ8–Ÿ)§‡ßA”ÀÓÃÍ9¨i»37 Ñ³š†›³3pË“YGõµÑ#ÌÈ@—‘–Y§e0b¹YQ¨Èrß„äãDRô ÈQ%á¾#™ îj*±Ïj«Wð[•PÎfœÔ4Ý™›†hÙÍCMÙ™¸æTÞéÏDÓÛÛû–Ÿ)§‡ßA”ÀÓÃÍ9¨i»37 Ñ³š†›³3qܹCYGÓå04ðûè2˜x}ô3£g5 7ffáš6sPÓvfnrk(âZ|¦ž}SO¾†c4l桦ìÌÜ3FÎjnÌÍÃ.MeKO”ÀÓÃï Ê`iá÷ÐÌfœÔ4Ý™›†hÙÍCMÙ™¸eɬ£‰iò˜x}ôL <>ú'Xk&ç+fi ª·ª¬”>ö?3Étb±CÜ2äÖQĵÙL <>ú ¦ž} ŽbÙ.ŒQö({†bÙ.ŒQö({†\šÊ8–»)§‡ßA”ÀÓÃï¡‘Ì[%ÑŠ>ÅpÌ[%ÑŠ>ÅpË“YG×e04ðûè2˜x}ô2l±RÑ̳t–¹8•²pÑ|\Ñ³š†›³3pË“YGÓå04ðûè2˜x}ô3£g5 7ffáš6sPÓvfnrk(âZ|¦ž}SO¾†c4l桦ìÌÜ3FÎjnÌÍÃ.MeKO”ÀÓÃï Ê`iá÷ÐÌfœÔ4Ý™›†hÙÍCMÙ™¸eɬ£‰iò˜x}ôL <>úŒÑ³š†›³3pÍ9¨i»37 ¹5”q->SO¾ƒ)§‡ßC1š6sPÓvfn£g5 7ffá—&²Ž%§Ê`iá÷Ðe04ðûèf3FÎjnÌÍÃ4l桦ìÌÜ2äÖQÄ´ùL <>ú ¦ž} ÆhÙÍCMÙ™¸fœÔ4Ý™›†\šÊ8–Ÿ)§‡ßA”ÀÓÃÍ9¨i»37 Ñ³š†›³3pË“YGÔ6<'»‘Xåüȧ¡ƒš¡Ò©vŠÎF§Ó¥ebºyÌsàBk[ˆŠ·-Þ®7„&-6Xé×ÓŠÄÐm·1«Š/•K2Ü–Q¾kmÌjçb‹åRÌ·%ƒÔo€­·1«Š/•K2Ü–Q¾kmÌjçb‹åRÌ·%ƒÔo€ rÛz_Ú2=†ŒÎ[oAËûFOç° -0À«œ³^ÑwÈŠk cÓ–kÚ.ùMaá^æ§mâ€AaÛs¹Ø¢ùT³-É`õàF¶ÜÆ®v(¾U,ËrX=FøÛs¹Ø¢ùT³-É`õàF¶ÜÆ®v(¾U,ËrX=Føêg-· åý£'óØhÌå¶ô¿´dþ{*Ó ±éË5í|ˆ¦°ÉÖ=9f½¢ï‘ÖîjvÞ(m·1«Š/•K2Ü–Q¾kmÌjçb‹åRÌ·%ƒÔo€­·1«Š/•K2Ü–Q¾kmÌjçb‹åS‰k[G‡<œÌä)h²ªØnH¯Fá*±®½8x¸nþG&b=Ò¦ŠªÛhA:èÞOú¨3®­äÿªƒr–WS핃9m½/í?žÃêκ·“þªûIh©õiU’’ŒØërB#¢1È­\)†¥Ü¿Ñÿt¡ÉéWi›4ÀÛ±éË5í|ˆ¦°ÈWªöv#¸›>ç/ò—Š}òVÒ9%gï)x8Ö#ñq"5ÛÓ‰Rþ2¿Rb*õkö:ªèÄÓh:èÞOú¨3®­äÿª„1G+9]O¶^6Û˜ÕÎÅÊ¥™nK¨ßkm=.zÏUé²s0æ"ĦÌE„är5ˆ—/á²›)nI¨ßìTUNè²5¶æ5s±Eò©BŸ!-/ Ñ¡BFĘÁ‰xð‚¿ÜˆO¶ÜÆ®v(¾U,ËrX=Før&cÙ˜­Új„¥e•g’§dÒmË•¶ pÕŸêK—…×ëâà>(¶û& Vg&¨—¨R_ ³/ŒŸùŽDj£Ñ.¹Ux½_™óVèÿ}}«²[ "cd#âž·GTÁU¹x8o»ñD<­›‘³¿fuÖʺ¥Žš~C–OÊËâáã_ŽŒÖ`²û°–õàKø/â¼—Ö Qm=” صÊd9I…rAŽù¸i"¢Ü¸.¾å¹xãï•›–ž–dÌœÄ)ˆöE‚ô{\Ÿ’§‚ÒöykYggjKN•­ÓãN"àâaÌ5\«ø' þH~ºÕÙÆN¬“ëô¦Í6&)`,ä4z>û°po¾ûø.ã¼åÝÃ<+‚­¥•cÕ´Ôf¹«r¢ÏÂEEï¡E‡"Â{bC{QÌ{Vôr/¢úÐ911îèd­E¥P‰!%Y‘˜›†ªŽƒ;\î;’þ½wq©i¨kYû*òKR¾ì—Üeüw]Þ®1wpÏ  ùÒ~MÕH6nζ5Òé1ˆËîÂVß}×ð^|Svž æ¶r¹L–s•ÈÔ7 Šª×+]ƾ§"¢þ ŠËJ¨#¥­³K*餴4•—kÒ¢å°ðꊨÕ\+¯TE[¿%=!Új Y“Ðët×ÊCz1ñÛ7 aµËÄŠëîE[ø…ÝÃ<*圩HSš®––j1ÑcÅk¨®á^$W5õ'â‡Ã-klÔäÌ9i[CI#°Y ì79ëø"#¯U-2°:à5cÓ–kÚ.ùMa“¬zrÍ{Eß")¬<+ÜÔí¼P, ÛncW;_*–e¹,£|ÖÛ˜ÕÎÅÊ¥™nK¨ß#[ncW;_*–e¹,£|ÖÛ˜ÕÎÅÊ¥™nK¨ß=@ å¶ô¿´dþ{ œ¶Þƒ—öŒŸÏ`%@Za€?“Wd–~fɲüsêñæØŒ^k¥–a®õ/ùÎjúâõ*j¡›´œ|S%eᢥíá„èëù/ùìüxºÛ2ÆÛ§Úl©ß¥"’¹.èáa_Œ¾þ<›uÜ^¾ã¢Øø” '9F©5#LDˆöÌÄ—ÂF#®j&_‚ÄFñ§qq³Úk‰ï”¨ð9ö} ÐaºÉÆ\j*_ˆjñU©†Ë;9héô†ä’sôùh±¡ÀLÁ|IŒCâ""\ÕV-ëußåªþfŽ5¬,…²ö‚úL8›2´ü&Äk›‚Ÿ¡ŒàTj'­o^Èú¥ldSjÐ+3‘*sUfbç&_ °ÕX‰sZƧQ·ª§ ªÞ-$Wëë¾Z¼{5Dž£Ñ¦,ìu„‘¥ò9ˆ27Àb#a¦3ý.ÂDüî_]äK31ZdíN­“””ûòrùçαDÊzà+x? Å–Y*üÄI)z­§lå:Jb Ä6äHØñ] Èæ£âa*q¢^¨—¯ä~ÉYKGM¨L¾JÕÂ…O=qe]Lk•$E{™†¯¿Ö©}ßÈz—¦Ö¿úû&ä$óò’Ü’ΦΪ¦-8W+ÃÅù¯¼[øaª €å…HRêæp`2$FCrþW5ʿȯ›¯ÉÕ1·dò±åñx?µŒt'_}üb®ºî/ˇºµ2ZµIš¦Î5]/3 a¿nTEõ¢ú•8Ð•Š½be:¡F¥Ó¨ØùZT¾2™ÑdÚÈhŠÇ5‹r5S‡òüï2ï ÓSìU_ c%+ï ±úyF/ŽÂNð¸o㻀¹N ÚHs’í©Ú„›—^PäÛ$Â]rc_zßù܉¯ð'¥„¨äIAÎfÂ-Ù&Oúõ…}øœmÿ±ê¾ëîà¼çÂQ1T ¨± Û8ö­ìVE§ÉÓbM'á/#65÷~ííý²Äܼße–¢+àÃ{Û÷ʱêÔUO×Ìq)¦m€µjÄÜg¶,½NR «å°.Fµ‰†þÒ%×\—]ë¼øiö=d~Ïf,£ªOŽèÐ&`¬ãá~•ñœõÂVß©‡øðÝê¼YÙ®&ß öú ¤áÙŦҥæ£ýòÅlª¹°›qø×*'¸ø-ºµ•—“­ÙùzT8õ™(.e±’+ˆªªÖ¶î5CSjh3•Ùz~ASm:jJq&¡ÆtºFKÑeØ*äýÿö>\Ú«ÎS ËÖ+ðçbÁ¨KÎ2+$R Í„ö¿¼jÞ?UüJ&¦¨ˆúfã¾j·G§T.‹9M§ÏÈM#Òü7C‹(rßûÌÀÿ"埒•mnÓ9²ÐQÌ©³R~øIeàü8UOXv^uÓC™V¬Y•‰-Àç+˜¸ËïãÁ†ÖÝw©8x ܆v©1ÃËæ›1ƒƒvÐa»‡ü»ïàã»Õxˆrª£èûÀž`ÕNY¯h»äE5†N±éË5í|ˆ¦°ð¯sS¶ñ@ °ƒm¹\ìQ|ªY–ä°zð#[ncW;_*–e¹,£|m¹\ìQ|ªY–ä°zð#[ncW;_*–e¹,£|õ3Váíe ]\·'ÞRIüÖb!¥2¿hÝ•ö¬‡÷P€®-0À+Okk¶anWTœ‰ù®OáMqŒ¯óŠÈûUßÚÇ6ez÷5{o/tmÌjçb‹åRÌ·%ƒÔoÛs¹Ø¢ùT³-É`õàkmÌjçb‹åRÌ·%ƒÔoÛs¹Ø¢ùT³-É`õਕû@æì¯µd?º„jŒ¯Ú7e}«!ýÔ +€ L0~¿Î+#íWkÙ˜Êÿ8¬µ]ý¬sfW¯sW¶ñ@"÷A¶ÜÆ®v(¾U,ËrX=Fø­·1«Š/•K2Ü–Q¾F¶ÜÆ®v(¾U,ËrX=Fø­·1«Š/•K2Ü–Q¾z€›u "Peš·Ü•)'p~S×þ 1œ¶Þƒ—öŒŸÏ`¦r~ʺû°*nwñÿ ?äØ:ǧ,×´]ò"šÂ½{š½·Šº ¶æ5s±Eò©f[’Áê7Àm¹\ìQ|ªY–ä°zð5¶æ5s±Eò©f[’Áê7Àm¹\ìQ|ªY–ä°zðÔÎ[oAËûFOç°Ñ™Ëmè9hÉüöT¦5cÓ–kÚ.ùMa“¬zrÍ{Eß")¬<+ÜÔí¼P, ÛncW;_*–e¹,£|ÖÛ˜ÕÎÅÊ¥™nK¨ß#[ncW;_*–e¹,£|ÖÛ˜ÕÎÅÊ¥™nK¨ß=@ å¶ô¿´dþ{ œ¶Þƒ—öŒŸÏ`%@Za€#V=9f½¢ï‘Ö:ǧ,×´]ò"šÃ½ÍNÛł ¶æ5s±Eò©f[’Áê7Àm¹\ìQ|ªY–ä°zð5¶æ5s±Eò©f[’Áê7Àm¹\ìQ|ªY–ä°zðÔÎ[oAËûFOç°Ñ™»n¨”( «r%BNõ_ýöTAÆ6‘¾ñ‡¤o¼³v&v1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæv1°ô÷Œl=#}âæI¬zrÍ{Eß")¬25xŒuvÍ#^Õ_¼À‹ÿB)®<+ÜÔí¼P½Ðm·1«Š/•K2Ü–Q¾kmÌjçb‹åRÌ·%ƒÔo€­·1«Š/•K2Ü–Q¾kmÌjçb‹åRÌ·%ƒÔo€ ŒÔ¤´ô»¥æåáG‚ë°¡Åb9«w p)쑚¶{QÓvVn«gµ7efâ¸FjÙíGMÙY¸f­žÔtÝ•›Šà U©¡HÓä LSéthWÇ…í‹OkïÃ{[zp¥×^Ze(iF£RߘNl›Š¿Š' ÞóÊØún•ùÌ=íEw6¬ÔÕ_&Êr|Õaàaa=­ã¹ný«ø½Dct½j¶U??§Y«gµ7efáš¶{QÓvVn"ö5iZ”ŒµzÌE¦ÁŽÙxQÛ8ÈéŒwìµQ©ÁyâËi^››©2™d];-#7Qñ›PcÎbðÜÕmüJ‹w'“Aš¶{QÓvVn«gµ7efãÖYhhrµYf9¦ªUZ©ü•¤ŒÕ³ÚŽ›²³pÍ[=¨é»+7À3VÏj:nÊÍÃ5lö£¦ì¬ÜWHÍ[=¨é»+7 Õ³ÚŽ›²³q\#5lö£¦ì¬Ü3VÏj:nÊÍÅpŒÕ³ÚŽ›²³pÍ[=¨é»+7À3VÏj:nÊÍÃ5lö£¦ì¬ÜWHÍ[=¨é»+7 Õ³ÚŽ›²³q\#5lö£¦ì¬Ü3VÏj:nÊÍÅpŒÕ³ÚŽ›²³pÍ[=¨é»+7À3VÏj:nÊÍÃ5lö£¦ì¬ÜWHÍ[=¨é»+7 Õ³ÚŽ›²³q\#5lö£¦ì¬Ü3VÏj:nÊÍÅpŒÕ³ÚŽ›²³pÍ[=¨é»+7À3VÏj:nÊÍÃ5lö£¦ì¬ÜWM–³ôi)†LJÒd`Fgìć.Ö¹¾®D)mÌjçb‹åRÌ·%ƒÔoÛs¹Ø¢ùT³-É`õàkmÌjçb‹åRÌ·%ƒÔoÛs¹Ø¢ùT³-É`õਠý±ô4Ý+ó˜NûPÿÃz¯ýŸœÃï¶okhðÎDUž•ã_úÌ4-TsQQoEN4#¥íWŠŸÌþ™i+#-R—ž›©Õêqe‡µ ¼ka»÷‘.Nùä)›=«i ÕíUf•õy«¥¤¢=!½Šë°•ÅEU[Ó‰þÚ ˜TÛC/ Õ©°á±0ZÆÓ\ˆÔü1¥ñêwÚÈy¥×Tÿ‡;ꌊÒëªÃõK€8‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸‡‘Z]uOøs¾¨È­.º§ü9ßT¸ÌÔèUúµ.jŸ1[’H30 êÊz£®T¹nýg¤†Ì\&2ûðZ‰yÐÿÙfox-1.6.49/doc/art/oul_grey.gif0000644000175000017500000000150011637250333013176 00000000000000GIF89a÷ÎÎÎÖÖÖÞÞÞççç÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,% ,@@@ X(pÀÁ… @„XàáD‰ȸÐâÄ€;fox-1.6.49/doc/art/sgitextedit.png0000644000175000017500000027034511637250333013744 00000000000000‰PNG  IHDRýþGNšPLTE# Q¦¤„2¬AED’‚tôÒ|D"gôª ˆFX‰eiI0j„‚„¤¦¤¯cÄŒÂÄ×ŘØèìf5r¬†„ZDv†d–ª„µÔÅÀdbd¤2#VaCŒä†„„DžÄ¬Œ“sšK0´“¹\*i²K´Å¤È†TštD’f3–K;v+bFãÔ­ÕÖÓpSŽ´…¼ŠS²žc¦h;—W3n¬t´:$iÅ²ŠŸtŸ5gxD«¦”‰I'‹±tÆåÎ’„uk´¶´È³¸¹”Ëäòô¼uΧ®Ì£t¹ÜÄËìӽ侔tFX,<‚Ç´§F(oïãÇ©„Ǹ„ÊíÕ’–T·8•U›t6”œe»J0{”d·T(”ïäׄ†ä˜N´Z;“uK¯|ÃÖîu=˜W2€”“”…E²x[0$€|dv¡|¦Ô´·»œÍ¸ŒÉ˜llY1•´‚íÔ­4R¶£i;il_ŸÍ»§T*ui4¥W=xÜÞÜ«ƒ¡LNLª‹¶Æ›¤ßÍÖ\¸])™ŠXZ‰e‰þü|‚„þüz<¤¦L²´üþÀÔìܲtĉÔzœ†¼Ä¤§ôöô›…¤4L79‚y2i¬lÁTnlǬÆöëÇrCtÌÎã‹}…Ä´Ô¶”¡¶¦æÍ®‘QL`LŠÑ¼ŒîîénklTŸl%ª‘{—µ›¹,c{KªíÜÈÛÌ®œžŒÖ½Á®‹›ln„LR|w3®”lŒ¼«Ã|T“üå¹¼lÎÔ®¼dEx”^„…liˆL †\˜Ÿm¦¬›¼¾¼ôÜ–]ŸT^šœ‹v=©j;ƒ¬}¯D zäâä<$Y<$€a%§DW„|V||Jtˆ>¼ÌÎÌ´ŒºŒ[²;+h‹}q̼¶¾|Ñ£|¸«ŒÉ: l¹‡M±îÚ±¼«ŒŒk‡ÄÎ*Qš|‚Ŭ§üþüµ–¼¬¡”c9WZÏtEXtSoftwaregif2png 2.0.1=^¾h IDATxœì} tUÕ™¿ëþYÓp øH²âŒ„Vy„ HŒ‚ÄhBfÊ•T”p’UÀu0ùGPGÈäâ°Èr-fJv:`*¡ØñU,™^¹\…vZ×±9Á–‚áЊ þ÷{{Ÿ}î ”{nsöÙgûîsöïü¾ïÛK΄LÈ„L¸Ã%é.@&dB&dBZBý2!2áâ ôË„LÈ„‹3dÐ/2!.ÎA¿LÀÁÊ„LÀ!Ý7¢¯!ƒ~™€ƒå$ ü„‡3á«ò“\È@ý2áâ ýÞ/Òhϼ¾/?Æ\¬è—¡Öu°êQÓðùv¢£™ðU ùù¶“ðøÅÕ<%úÕ;Cüx§°z‡ÔÕ_©«›dÁJØ*bù ÛL&|eB~§XþEËý†øC¾SX½õ¶“ÒW~ŠówòSW7É‚…¯M~æõ¿ûC¯€×‡ÀßÅŠ~þ<ÝSY½‰IýŸ_tl3I­€ÔÕM²`9˜æá~yÅg^_­—AÃ'wb/÷KqÓæ <…Õ»=µ¶©d6“ uu“,Xõ˜ûÅ|³þfB ôñwÑ¢i1öæu“Qü€y»Oï@,ÕÜ/?U=ß )ººI¬!v Žn~_ú]dBƒmŽf¦ô£ŸŸ~Q…ûÅ$‰¶¹ƒeÅÛZ"ct<µÜ¯~qN¦"PÜ#ðšJ©«›dßüÆvÀÉtxùJ½è~Òãlò¢[üÛ{„ûÅÓÎý,ë‘ô G=Û4x‹\‹{`9â‹)¥ÖèúÅò…§ .ì.Xؽ¶{aAww÷ڂh'§}¡Ýì´…tç|cmN÷Úœ‚”¤»…îîÓ .D§.\˜> ;ž>]pútÇé|S3ÛI­€gRW7É5|ä{Y» 3¡Ÿo½—õ_y;íÜaß#iB?V-q†x Û°ú‹£è/•ÛhŸ &"*3;ÈUI=÷[XP°ðtG‚(„9Y ,WÙ§O#¼ÊF ”ó…ÝÝÙ¡µÝ¡µ9(¬][<2m¯ ­EïÐéÓ—ttt\Ò²èè8½pÚî¸äôé|Éýúa¼J‰€ÔÕM²@úûåǨõ§ï&úgð9 ‹ªÅs¾|þøKß-H±/]èL/.˜úŽà-ð ¶­ˆ¥‰Ügžj»_<ß)XØqš*DµN[ˆW¡mSÝ¡‚P‚¥îlB9¡PNhí70­];²øò––ßì»ÿ7ûŠsr¬…£Fu,ìF§a^‡¸Ù%èM¹ß¢ù.D|-ERW7ɶûqî§?¶â¼Ñbd/Fxq¸«ò8à™eF£}8/ó݇or½ôøökÄO RGô´| )Àiõù2ìSÐ/Õ6@ûA£^DP=ðÁŸX@€;ƒ¨GN À|ö¤œû ZU@8Ùé‚îÓ§»16-Ì.ÈFÈ”‰ØX(§xQqKNÎorZrZŠ×ý©µuÒ Ï>»gÏžõë×ÿ2”ƒ4ÒÓÝ ³±bº°QµK,ÀýR) uu“,»Ÿ‘ûÅð_Wžf„‡<ñ;,.Lˆys?r}I]ÇÙ×|þî4r?,S`@¿ÔÛîÇîïŒXän¤Odzoâ_Èì"ü"œ?(¤Ócô… 0IqõR³ÜÚÓD)Åè´¶ƒ2³‚ìžEµµ9órrZfç´´\Þò›'‡m]ÿì®]Si‡ÑWz-ê^¸°¡Ó(ŒP¥.9Ý1êJÍœT H]Ý$ äæ1»_ƒöÜÞø›\hééýx$R2ó>#ó}®ßä´¸ýÅhŸUD÷$'Aµ#¬?=>_Œqûúá¸T— ŸÍïu^'âKòæäüÒ7á„1ðopäÏž÷÷Ë·‹‰VŠuSDÒbŒ … rrÖfç”ï3ç®+VV<;5lGƒQ;ZïÔ×;·8vô–[n Þ¹3¯+£¡µœN/ìFjG)VTGj¶Ô!v¿œ…TÀ . ív?ìóuû«Ø8_Hâ­@¼C @Í·œ(¿â»yØAvOÈã3á<im ¹_<Àø ½¤„ûåóÇŸß÷ñs<òˆŽ~}D?VAZ…œõEØM‘èçHSàó>qç6ˆoA"RßßÏÉîÕ½6»SNIOÇéWN/*é)É)¾|ݺ?m™Z¼¥ÞŽ>÷Üöúúúçn©¯G˜ôñèÑ£ \Ú9:¼sçàâî…£º»±ObaIÇ%— lZˆUÔ|ҕбãT@6ðJAè‚ H/÷³©âcË›X-ò‘Pø0|€E,#€¥F+Iû1»iä#HK5ª¤£Úý€…H@â~%%V@êê&Y ŠO ß}ºpmÒ4Âoö‹GÝfwŽ%Õ‚€ö ” =qV1‰1… Íl÷u›š*Ðõ¢ÔŽ^Àƒ@¦[°yâÆŒÚ¥í¿ÝÏ„}=ØOô£•Hlu®Î’ºãu—zNDUÉAQÑ&µ…kM©ç~=%Ý¡’µ »0•”„zJzzjk¯¼+þÅ®`uý-v4®®F˜„€)D¨´óŒJÓʧMûâ‹w焲³Kº»K––,\˜]2jTwv÷+ ¡Ý¯gÛ2/)ÁðwÁ¤ý$÷Ó.Ÿ¹_“Örác²‹”Œe8:„ÀG®ã"íéqß? ™í>oã@\ÊûhísöÇí~¡±[iá~Fô“|0õeÑì~1­™ M>ñ€HQ’3ƒ‘ˆ#ðçëëîÔÛýjs:h*@ÈTÛ]R[Üre|Àê®ÏG߀ÔÏ<ô>ŠhØÑ"_ðáéèïg?—û#…ÁàómàUEßÔ轊÷„þƒéOÄ ·ìÁ©vŒ:|…ý!•Õ;„ ß¾ÚZ„M¥ûKK”XT[Òsù˜1OpäÈ€w~!Ã6„HñIñ®ö×^{-ÿw¿ÿá·~ø³Æüë–œâý%Ù%¥Hµöþl¤ç†–î‡Èå¾Úœ»CD@ÉP¨¶§› 0eÀàÁç/ 횯C:9†€¥‡ç¬¥‰&Å­ ¹qบ$ÆN2À”Ö•#³t[‚Ýôû fî¿Ýψ}iD?Ö ¤Åäø…T@@yT‰fpJ}¾Ô,7¢.êíÝ?£ ý„ÊjèBPt‘¿)œ& ˜Ò>eÕ”ßÿ¡Ò·$Ñ7þ ¿~gNN¨8;»$»±»ÒÒ…¥˜£½RÊÌr´CáˆEXÀe‹J°€ÚÛ±L.‰€GV9wi÷ùØÛÈ­¿Àb ¡€/XZ{ÙWŽ Šø ˆhyZ—ˆ<¯AªÊ27Kø$á>K3Û ·wÃqÙ’æ1ÖƒwÈv?Çzx`ŸÏà§ÛýÔêuæEž†Ý¡µ’ÄVzäìÃXá9¥‹jïÞ?£KYm¨p|×ê.‚Mœ&Mšò-Cø!ûýlÚàœËC9¡ÒÒìÒQ3JKgd—Œ*=]ŠØä~ÃCw/Ztw)Ћ”ÕG`ן¯€Wú÷‹¹fydWTö“Ú¨z‹PÊÏØ8›(Áaby2á1a.Q³Õ Ël'Ú¦õ•ÏZ3·Nñ­uœûqUƒ´ûù9¿Ÿø¥ýX}pÁ6M³(¿°Ÿ’, G‰Xúûí õ”e—ì/Ýß[t`ªyŒ™ñ'¶^?xdñ7²C36aoâeÙ%¥¯„Jå/X@NÉ¢’’ý½ûÄš±€#Ÿ!ÿà¯Ids©«›dú|egÖl0÷‹À‡ ±äÆZáNàFFvÅ£ºq„ ˆó¬h@fƒ‰(4J“sf›Ö ˆæ6Η¥펵>ß7UY¼¿Ÿc=,êG|¤6(è—ßH&¾ÞȦ¿Þòd?B&Ŧ)ðšŠÛÈcÐ9ë@ÝãÛä;µÜ/N¼¡P¨6T¶¿$´S³f ~Ž<1…ƒÓcÞà4mðoŠsJK²K÷—öp* ½RÚ‹H$¡f»©a ( å”…ö—,Ú* q„\v%A?£Õ¥ý€û9Òî ÄU¾à~ °=ÉãÂ,ÂT`‡1€™cò$¦PÇ1ó¸ÙÏm4æ!ýD¾ŠÛ´Š%ºÉ=>Î7¦¹^§f?Tö05Û·/4ªhoiY]ïŒPoïÝè}IoiÎï7/„Ü 8p ¤ŒèÂšï¹ 8€ÜÝ;ª·4ý=^ê•9^ š‹7òµ±0j¡XŠ%Djæ`-‹ø¥Y°˜i9¢Ä_ÜAÖ\LõMEÀ“…÷÷kPŽÆØX€†bœoZì~æn¾ãúQ—ìøÒwC…eeµE¡Ú²ÂPóBÍpÂÔìn9ûÝï~‡ÁéªÁcæ5—!Ô«+šÑûJB'ÊzËBŒûaˆrÆ×b…ºlQYíþÚV­çSî7å°¡½oÊ^.zñS”}QiÑÝ\@êê&YàFoÛÈÆà8_yÈÕ›…c†X¸Ñ8F U1WŠˆ‡nÐk©/Êí˜+Z—¯ù|eZ|³ªW¦û¥üúÝÜǰ=yÜv-f;{¡jîç¼?ïA'Œwb»Q}:}rU׆Õ:.ýŽFÍ>¹cÌ¥ÍûGìŸQ4!Ó2„MóÐVÙ"èó}^ ʺ (CÌÞ@ S¦ÜûˆöU@/°¨—púÝo]X©-—l¯CÿšØmclZ„|Ù…c0Û‹™å7Æ÷x¾ëxî,½fV¬Æë¤•9Ï¿X·K;ù¬#6yåªÄ6Ú⬘H‰ë0ßù0K~€Xú}îï×ïЯ¯à'ÀMƒ8(º£RíóµG4hnžWV´¨ì@YÙìÂÂ+'apÂ.Ù{¯ïj8 ‰Ã’PO5Û·oYшuû‹ÊzëÊêÀ!%u^ˆÍñBûûaÍèHÙZ,`<ðÁ×û®oè¢îN, ¹¨lÑþP@ºGºòÉÍ`ÆÚÝš ×½–6ç.u[|×éiÄAÅ¢¬‹a/›r&à¤FxŠë¥§¸¯-Ùñw¬‡Õ/ÀOá~¶C^b•1¢Žü¦ÑdU<ò‹ß2ÚçÃ|~IÜJô£>ßáœ:€æ@oasaÙ•Íœ¨áï“ë5»û÷¿ÿýï~ÿ;Å!A©Ùà+¯tÚ£z1+›w ¨¬tFoÙþ^Æýˆ[å»D@ïˆÞ¢Þ²f„®\À ¯]”\&ðÐ~M@YoÚí~¤dÖó½xƒãôévëoè·y3D2ŽeŽÍ¿(@7ž‚'v$\Ê(˜KœRô£f¹æ²æ—ˈ^:´»Æ»˜fŠÓÕ™~÷-s@Šéíß_W6cFmYQÙ¢ÞÒÞ¥3 Ü_†¹ßR:Î×FŠ0ó«Å ïnFVÓ>/÷]?Ã+‚>OƒoãUÃëz [ÀoôK+ø)èW¯"–D.'H:€ìab¨àœÃ9ŸûZîGBt¬¹¹¡_oYá¼Â…Íql÷û £'c ~Š)Ÿüõð+‡×-š‡r(Eܬ)¥‹ö÷.Z4ú|›ÑÑf¢²be…³'uÑ>/DÀêÄÄêæÎ^Ô‹0 8°hQqÚ¹_ý<¿_~ßÍ#1Ú™rÜÌúXÑÉJζÓÐÏ¿õÌMÜObÆ9ò¡oÛ–»6ݲَÍè¡$†*ò±´©å~Ä,×\X×\‡˜ß¢—‘nYHÁ‰¨¾¼Á©²²’r¿1óêê­CZó+Eˆ›õ¾‚ß3JšùÜÎýÊšB¨‡Ô(,›Éåjl÷ÛðIt"ózqÖ¥û~Îxå€ÐævFè‡- ðkï(8‡}ƒ$`žÄ÷ÁQǣˀ™EšÉŲ-j]Ö'²žõʵåý:ÉlòéñùÀÏ?ìÓì~QQ'þlI ²ÃAQqAeÓC²d ×H±Ýp¿¢æEeEE3êš‹¸k¾°×wÊ$„~]:«$FLùäŽ9e·77w?À²E½£p‡—²ý#Ê Ï·¹ì!!àîÂ2"`ub—XÀêÄ®ºcxÝí5ß^„,Þ¯ h.K;÷£c=ú 4ÿB>¯˜…ÍÁi&Lpª£F*ÔÛôbØöªF8çªæ'ôKÇ8_úù‰}*÷ƒµÎÿ£¿t#èÐs8÷“èÓ( ÅGÑFmɪN)úQÅôCÄûêî.Báå"Äý8Q·¢f«»@W<K4lýdðœ}5oDsï•eu‹G”õ¾òJÙ¼æýu#ˆÝow>íPø!vÕE/s«©Mµ6¸c P‚ŒXŒŒ*kF/J;÷£‹Úä €ðx;ú]áˆxqiÅŽÍŸŠ<98¬ï¨'‹¦„íÝuTäzql«Ô"þâ‰GÁ*Õ®‹VíÚu%ÜÏÿq¾®>/ª¤h¾áH ~ yüšà=ì²Ù=dw«@B‡7™¬j^Ï#³ä­ëƒÏwqY]sá KEuE……euý¬fÔì±oUt\¢à´mçðñãëš›ËFÔ=´¸®lƲºº¢ÛG”Õ!jçÜoqa]aጢº¢ºu…ue…ñI ^»¨€Ç¾uw¥ øHx‘K  ¨··Ž H?÷£kºî›lk¢Ar\”Oµ¨v”´ ‰*{Žz²hê*ûwžŠZªÿÕÛ0ZÔ)Ã?5J\3^uð"‰kà`R¢$*˜–±VZ±ÏÍýø3Åê° Î±j‡¶(’r”ÁO$¯Ð|³H-÷£f¹Âºf¤–Ö!â‡È"‚Û0ú]†ÐoÀõˆ¢qœ) j¶÷¿šzÁ]ÝCã*:P‡e#&6‹þ~ü!è`!€e•–}.t­HÀÀOïxè!!  A¨æq¾¶Êý¤‹#¶)È)ÜWZíhtɱ9ÌÝÙ9à&^7ÙÞÿWnƒ¿)Ž: RxMÈ`Õ+5 ¯­žæ`ô³Žßýý,7ö­š²jŠ?EÀAõzÈûC†?[Þ±Ü zç€ó‚ðž¶„Y#³²ZúñKõÃç[W·¸®îeDÉê0¸4×5³vK¬þdF?ÚùnH?$¯G=D¨ÙÎá¯?ÔŒÎY¼¸¹yqóû('ô;~|3èïçÔ~Øüòˈbz) p»ŸÐ°™€C2ÿ{Œëˆ€:$  X<;íÜ+> ÷.|zÝØ…M ½£4No³Ž²Tù"E”·k‡Üg²Ó(äæüŠÒTö‚ÒÖÂ~éÍ* ôçm³†óòÂåNÛ ÊÙf‚ËNvéF”jj¬É¶„H›îgéØ7e íþB×|¹w‚®4Ìñð-J)å ¢ë!I¿ñ½‚6$ù‹Ú-nê‡Òùàó­+|¿ùâ—‘NI¾ê&­¦è7`õ½ý”pèQ8÷ _9±®ù¡æ‡&.~1¥æÅ³7OœØÜ ×õ¨k¿ø!Dü¤€®Õþ°W—ƒ€æºÅDÀûãÄB©«›dÝüLóUÚ“%Uö`t‡>a‹Swh×`Âsè-dƒSŽ5ÊÓÞaŽÌ.H´””hÑ!QÊá¥<ÿmzë£LE+øóó<ïmñÅ À!‡0õùb«1¬‚IÛÔE[3ì«Áì~~û|-÷ÉàþiÜ×7{@S|£7<ûØù˜âËØ½YyѲÓ#/g$è!ãƒÏ÷Êá‹› ë^Æì¬q´ºº¡«WS¯@?Âü#”O„#Ûv¾} "b·Ý¹øý8-ÞѼcñމï/~_r¿uF«»PV“Ì)³üù£”òIÕ øhñˆñ·M| 8Õ|J H]Ý$ l=_ÕîÇñ‰Ú:x£â L­r´ñJî'›&yPr{ 9ÌÀÚþh"fXL†—p·ñvë°ò€;O¢ÀùnS ¨|Aòü3¶UHƒ8§_(å°8•>J$÷£Áá6{vÊžÌí•ôSx þÂÍýXmÐ[À!”ŽÜ í‚ì†% z…H¬ÎÖs–Í;~eeñ‘bô£>ß·F 6ÕüáCuͯ¾Œ¾›ßF„©Ù‘. Nadz¡Ç¥~K GCà”;îš?¾õýSË&~x'âd;têÔ‹ÇÁõ|‰€ÅLR|ë~ÂPô#*ï£?ÿù£ïþÜKÀ²e¯Ÿúˆ X¤®n’Àý‚Jû¢´Þfž¹Ã(‚Q¥€]z»H^zG‰›‚ªŽ ϧ‘;‹ `šÕ8h ²F˸ŸháQ^@ôÕa1°FŸY6–99E,+à¶ÕA3u¨vRwP+ùt¸Òû²Íß|Üßr„t¤¨r‡@På¢ZxÚtp?ËÅû¦Ð/Š€D¿¨¸ñ™¥GÜŒÄÔGoG¦ÿÙýÏ›­c[tøs²èO Ÿ¸F>ø|•šˆTËÅ…³›ëê®ü°îCìŽXÉã~¾+øØ)4áÐ0ø†m“¶…sÇí¸õÔox뇧þøú­¯¿~çëw.;õúD8·ó©áïO,ä&Ö=ô!Ï Xí~ï>ú®§€ÑXÀwî¼õN.`"þu=0úIÈ÷@Ûè@*¿æ lÚŽ˜†€Fz­qv:›â›T*x†@±𵨱Ùã–1Cdž¾œ‚–Éa¸Œáʦ‘¶ÓÁÊäà¿`Ñ/›þ[ ,a€L¿¢ìß!Šbƒ“‚ú¹|ÛQÊg‹¿ÎËè†FüDs‹ƒøóô’A>˜Ÿ¯¥ð¾)~ó>4Í—Õk‡°}°ç$éôÌïQnøa¼°ƒQEnr˜æË¯õzÐc>ø|¯l>ûÃÂÙ³Ç#­ôïÊþîïþnÊO08M"Š©@Å^¼aôà_¼/¾mô–9·žZöî<õþ²ï¼þÇ[o]6nÜ)ôÙ×õÞe::»Õ)¹¤5@δ,%Œ/¨Dµt¶´ã‚< ð?,Y½âqÂ7–Žú|}\ÓOéŒwV¥A祎õž¶¨4•’ž/¶ðˆû”ßÄ¿)¤˜^Œ¬(Ϲ=ÈA|¾[¼ãýg/þðÃÅ…Íóþëo¾†Ñ ÄÝ ¢ž%öâà¾}à ƒ_üüÕ~qß´ðÉ¿ºîÔÉ÷ÞùñÄ;?üΩq<9kÜG˾þÑ88Öcâl/^¸ x ¨º XöÇ;ÿ ˜xò#$`æ²qýb~?n÷ JÝ]ÎÎè³_e†ZÌÛÕas[iUQ@Ïf¬“–0E¬Nž–”k¼´%2tí°×âfGÑ·@b3³k±{Þ„õ6ÓXnqõÍa•*ðœf9Õ¨#Ê"“G)lt0&%NU:ø /*Ìî<Ò8 îÚÜ àI¶]ìL¥âÛª™V(¹´ôôh¸Ÿ•fÞ‡ä~AÞˆ[cœ(èÙÀçÁÝaŽ f´Rõ IDAT}üá.'µûáíh–¤~ø|wÌÞ1ñΉ§î,lþð¡æžPIIñ¿brFÀé3…š5¼8áÒ ƒ§^²dÉ«÷Æï›ö`øékÞ›µìše³&N7kÙG§0ø«ª™ ç÷CèÇÔ5÷ô””¶X¤š€nâPÀ̉Uãf[vjÖGÍdÒ=Ç Y ŒyþÑz u°Ù#ß Ü¬FéP5"9Ü£@BéÐÇùG=%.â¶n†Z *i 7ø‰œ„Èù™¨]šœ ½uÌÈåD9óac\%ŒÅ·øƒ(ñB¡¢Úìàè¯ Ç"N TO_Ò0OiO¢Ì< ÔR8‚Òòê %ÇÔ˜<¬´Î¼¶“»Ÿ•nÞ‡ƒÚÛ™=Fȓ٢OpËÏuö@äÖ`B ðƒÑFTqÑFŠË–5R>Ž|ðùžj95qÇ©ï†æÕîï]Xº('ôS°z™ã™âbdßþŸÑ7 .ß„iÒ½ñÏ·Ý{ïUÓv½ý“k¾þÖÄ;O}´lÙ²q§NUÍšu²êé“U“!÷7O (-!þ~ ¶ý èÚ°•q?&`0ðɽ÷~2íèG?¹æÇãþj"ð0sÖ̪§Ÿ®ªêv¿ç~¶hõQGâÕw[ –%žƒT¹MJ"L1Æ5(…B ÍvDÆ6}¤òcT Ñ´ vð'©>ÄÜ& ,û%8\'Ζ>aRêÓ24¾$Ø•eI¸Ëž§¼`¥—Š\}IÆL9æ©V@7R „tж‹«µ^0|©¢@UC¿{Úýå~§Ÿ÷á ù|¥EAFÄõP-¬Üäʸðªá³³Dâ¬,™­>ßqß=5oÇøáµµ%=%=Ùk/íÉù#Ÿar†ÙÙ¶ë‘&úíÁ£ñÉ’ùó'¼:)¿÷ómW]ÕU“®¾í¯þëÖ÷f}yç¬?Nœ9󣓳–ÍZöô̪qUs—Áu=nŒ'Ö–„²/Åøú†¿IBÀN„¬Û–|öÁ„%÷RW§–ÝùÇ™³–œu+pJH]Ý$ ÀîÇ›Oa‰ hE-Jj¢1K»O¢Ü÷*gà7JF”뺄ËQw«¥X¸€Û“Áw¼9¬–Ã=Ü.m3'²Ã 6T`rh -Š«Ý¥úì†ñ'| žSÎåÜô$åO%ÉV!„;ºTf ¥Öþ|àªÿ3ûùh÷#!½¼WoFdO({ªºÃ/·2ÒÍ/î‡}¾ãN>cS(*é© …Šçå|ãï ÷Û°ºëz¤ˆ^‹ÏÿlÂVwum¸÷¾MW!èÛöù¤Þÿî½5óÎS·›‰iæ¸YU3gž¬šurîܪšã ÷Æ µ¡âb*à³ÕpŸÍGºˆ€mXÀ¦{ãã°€kï|ëÖqË0°r3€ÔÕM²|¾¢)QfìFÌ’Äýý‚gqþÇ]d6hÒ[‚w]æ>¡Pp cm¬­žV#ä]G¡H”Š ÎÈ  Q<‹ÑQÁ-”ZÜÓcÅäJ#û×ü9 ø“‹Ö©ž GôIìsGÁ0 Œ´u™(ù!ÍÊ-ÖÁÒfîö wVZÒE™î—~Þ‡ƒiŽb!Þ;q[ðºbIDí3¥\‘ µ÷ñ è£>ß['Λ8»ùõ¿+««+Y«O†jsŠ¿6 kí“·ú‰ ÞèZ‘)~ï}Ÿ|òI|R×ÿûÿøí_MXrOgpØ fœŒÔQ¤™Î:yrzÕñãUUsÃ9^€ïB¡žPmèÒ7q¯—IDÀDÀê LÀ}ŸS?ºŽ¸q¬ª*.e-ôîÇYÂñ6E8JåíaÛò2ã<ñs”~šÁ‘€æ+†Œ‹/‚,Äý.)™üD9’°•Úp‚üÞVÁE-l¶˜¯’b߃'œ ,‚'K#Žr c£dDRx2ýÿZh¼î:ükiœ…ØoŸoZú6»ƒ®ù*— ܫڛU|Ð× èpäã™ZZå]ìƒÏ÷;§vŒ›=¯°¶.4²¶'ÔÝS’“ÝrÛ›HóEàôÄï`Ê7iäûî»ï^<;Ë‘¿ÿ‹Kÿæ·¿]}¦³3úñèp^^ã–ªY³ªN~t²ªêøô¹›ª¦WAîwë[DÀ¼²P1PÒ]+¬Þ@ hÝ0i’"àùßþö³/˜€C¹'OªjúƒÝû|72¯³1EùeåÎÜÙ7È#E‹d~^…dÇ4v›ð,0/sÝPõØŒ/|Wj œù(ƒ…W†MR %÷¸PÎÒؘdJAîí ÔSÞþb ®ZÆž)$ôÓ(€%:Gj °’EQ+¶‚”ì#kÇ’‘¶è?ž>û|Ûûöyq?ðô—õðãëÒ /¤Ã¹77J¨àé‡Ï÷ësöþçe-e%…µ==µ-³ÿ¾³³íïÿbÊ„z]]ñû>ùbÒ½q‚KŽüíO÷ÝÿÓ¯ýè‰ÏÿºsÁèèè¼¼Cá`xýܹ˜ªææ¢×Éã“«fέBÔ,ÎÇù~ý?Ç!³Cj ±€œ–f)`° @60—þÍOþðÙ/wŽþøc„­yHÀ$àäñª¹Ó£¹Ç'Ï<^•þþ~6ä~òŠÑëzšö á R?Àÿx’$/Ü—*ò`ºD)åÁj«ÙÔSñ„A*\rFžpʶ3xÜ‘Ö8âµÄPñì5ÌWpZãX  ‰´^i¬Éôn¢¨P i¡((OÞAþO尦ʽìà4ß}¾÷ì3ÙýóV@‹G«WÔòBT¾ äàFšŽ>ßqwìh^_ûƒq;NýøÔð}…_N¬}µº~äå==µ99¡‚ž‚‚âµÅ(Ôæôôdßÿ“'îÝT]XYõTŒKyÓ¾8zôŽÎÑáð gv«Ã{þ­±¿¹Ç'W¯ªÊ=úûÙsÇí‡Ô"­X@ÐÓƒð ø€¶×Þÿ“Ï&éD¢\À4$`'Úúö™£ÕA! Š °ûËÜÎåå{”Ýgô­¿äzHdN"5W^F¢,†³\çyåäŽÒò*7Ó»¼¦ÜˆÀ è ¶š†ìžãƒÏ÷ØGCÇ]yêÔ˜·çì»üPtJKÎÈ‘9=‘ N‡Š»‘†Z[ü¯«ï=í\°k¼á(Ry¼cjxÛ¶£á¼`8>ó ¨gO?9kÖÐãsss›r•±5DÀŽTÀÖ–œŸìÎAЇൠ»x-p°k¼B@ ¸ã`0ïÆ«¹€*,`ìôÉýÃîXwvàÀííÛâÐN_í8¢î’Ãü¸íÚ&;qàÖö­íúQíTõ"Íp¼ÙÞ ›ó5È1]kçopJhHî)Ì(öÌO/TŸºR±ý­üŠº* ”a•ïv?úúÙ¶¤öŠÆ €†w ê€)O¥G}ðùÞ¼÷­‰Ã÷혽ïíáËíè“ßËY;²§§'„P©'§''§ø7^†X†¾ðT;Šð¨úÿvVßñÅ´¼0"yGw…ƒÕ;×Ïš{ÝܹÓÇÖ ˜ö÷£ ½÷ÔÄáW¾ÕråÛÏ_þí÷rZ€µ=Ùk‘€ÚžµµÅ—_6é 0uj” ‡GÝ6íŽ °ë¨p¼fîô&¤§û±5ÝäE”†2õúÊë­~©=EeT~Ô[ž¯ÝKj"Ç֤ûR½K]÷¯–XÍË •z5(BâS¶úÇt¾R(µê¶~²£&WrÑê VÙ¼èí~±4Î'7ÀµUoW—ÉB¤…/|¾3‡olÙ±wÜ5íÝ·¼:ú䘜‘/ÿÏÚ‘k‘~Z›“Ýò“£ÕQ„L ¢ˆ~E£ÕaôB›Õáê¼/¦mËC?H;ýñ‚¯Î¯8Ñ:½¢©ulSîaÈýN"ÇÛñŒ>¹1gä÷®ÄB9?[”ƒTê£ÕÕ@@˜ @qá¼òiˆý1½`ÁèWçÃ{‚ H]Ý$ |=_õ²¹‘j®/åâÓXMg€Žèº+áÒ}ë9Ò|oM]ÛP²UòÐbµ?¢œ àA;(¬‘ŽÍiâ_+ùhRôºQ[‰#M€† àO€b8&Án1¦ñ znš¸ßS”ü¡|–®ú|Õçšúø°ÁíI¶„ ŒU¢ëåÀh”ã|¯{ jÙGœîšüÖáúø÷Ö½¶±ed =¡âÐ7þ„€î>Æ„ ãzuRhB¿ýî+ ¼àóƒ›Zç›?6w쉦ÜVÑß‘ËÉ˱€½;Þ~úÔá["ë6¾t×H" $[@$ £)öuvNEðúExb €ç›Näžø`þØÖÜÃMܰ˜ººI÷S.xÒ)l\VØ® ¿jF¶+kC‹ued(‘mŒ·ŸŠÊíè‚r«”>ê•(Wîf˜ÑN•òÐ ü±•àȤz»“;°FaA‘”“Tìƒÿ…4q?Š~O‰=ƒÒÛÙQ+Ü0òA¡Þ5A^ ø¸Ã|Aû0ÎwåÉ™?ž5kòÌ“Çn}#ÝþËuë6nÜø›u99órzŠ/ü?Æ„ŒbF¾ Ù@íŽ"êì\ÐÙöüÁ}ûøòxîó›ŽçŽ=Î]²dM7*àä䙳j°€ú­ß[·qÐR‹|{WÌû"¼C Û9øA¤Z‡ƒïl;HÌ;ÿxÓñ±Ó?è>_Éýþ©Ï]Óò„aOâÃý/|å l ¨©)V¾v`:u>QÀ3=>ß§èç;õƒè·Ýø¤¦?Q@8‚>™ðqFÏË¢ð£tŽ{>HÒ‡q¾7·žüú¬šÉ³¦ÏœðÆž©ÏEo¹¥>Ý2¦å?GÖþ¬çòå†GÛ¾¸k»˜=ë$0oÑy/ÃØ÷öüÖÜÖ¦ÜÜãsŸ@ô®é†ÌœN<{Gý-Qô¶[‘€–ŸõŒ© ˆŽÆøº ‡§N\€|ž ÈÅ>{¢µŸp¿À:„~Î?ýcÃtIËÛ· úVúbÄÚŽczšŠåYržÌŒFlm¯,cbÌ¢X<%°,ÛYšæÄ3¼ØÊ^¢¨°¼LÈZÙ¾rTæ$µ‹Òn•ù©ÕÊF|ê©ÌY!+Bþ5µðžCGŒ¥œûùïó}J`ZüšÝO¾Ùè@›™ØÊ(ᢢ©#;lÙdíU:îM0á!&¼£•>ߊš•“-;Ö4¹qþm¿}‡úè³ïBúï®]òɃá(§§ÝˆõÞêpѲNŒ}»žÝÕ¹`ô=¼tß5oÍ?,·5wRL[[›"û\óÐ2fãl"à*EÊ_°àz  µuɰ±H¯>ÜTѸ™ãs¿|¬OáûCÜQ,k)á·ú“Å¿Ü/– &ÏqYZVú‡Ÿ—¥Å*¹ëé•üµ‚ÊÓ²Ày RýCZ±]ÿB•¡oÁ,\ÒRÁ¿¨WOãà.›ç€~—RîçàémÓ†~épþš×tëHX À=Ë‚äžÇ("ÒxG½·%+KÚ|}ðùþº±iå¿øúܹ¿žûøÓcç^÷ô„ù»êoù·1[^¸köÈÂü3gvtº~ÚyÕa;L‘)üßÿ¡éA¤‘^ºoÎÞN4¶VT\`iúá¦Ü¦±bŽ—pœ ¸nìØë®{g~^” 9ûgw}qæh4L„à \ "7Pû„€õ­M(÷V$`Xÿà~¸K#â~}¿£jmG$ãçÀI.Äy]XŠ®å~Љµ0‡ Þs>™{—oåÜÏÏq¾4`Ä»D±üùôõ|’‰)ÅE$‚BéÅ“9bL|-ÅÊge9sf4ôÁçûëcÇŽU¬¬º¹æØ±Èü®ýò¶¶7~±9úB^8ï^óä¼âûЩ:|Á6ü!lÚõß÷t.øö‚Îç+›3üš¦ãó+†åÎÏ[Ñ„¨YkEÓÜôùþúØÜc?Í|y-°½þY"à®»rŠ?ù>ÉѳÑç~¾å¯?¿kLÎýñmS£vôÌ´3_œypW¸sêÕgvuv.è<ƒ±oøœåÇ[s¯^¸u"}cs5«˜;÷D\×ãæM\ÀÕcWR»ˆ€_ýõ/žS|ÿ¤/¦VG«‘€mgp'ç©›ˆÊ»à*lOœ3çŠùR@ÍñÃc±€ééç~6÷ùþÓï=Ñϲävâ~ã~l^íç™ dÈã6L¡Û­æ› ˜NVÊ#Je8f«mxÆ… ^¹õA ›yÁ£ø8 ŠBO#ÊýY‘Ð3sò:…L*›Ÿ/A?ú…B‡¯²qÐf9#¬~r9#1¹?ü _Ÿ‹;ñ„ÎQ¼´`T.h™òþ~Øç{ìDͱÉs'ß|âXMÍÊšŠ•ÇjÞÛ4uûæÎÿùUõs÷übèœK[6lCéŸ1mÛÑð´õgv"hÚù¯úö}wøÞŽ·ž?a~îáa‡‡}Ú„ˆßÜécOÇÑâœû;1 ˜K4Õ4!¼vÓ!" ü+$`ø>, hïŠ#»ò¦mz–Àзï§D@Њ ÃNÔ?q"íܯ^ú|½¸ß%Öf€~HóEtO;⛹¯‹¢”™cPž±T$î{pìdùf ý8÷/àŸ¤$0*?åØî—Fî—Îà¶û‘@–é—“¥:èDäA0E¶˜6›¯’'f®)ž9YYb¼/>ßš¦é'櫹yrMͱ•+¯ž¿dØ=ÓÂÑÎ_-ؼyê’æÌ»Ry8X}ãH/ݵ AÓèOž?8bßOç\ó‡°#¶½r‡5 «6 ©¾MÙbJL>ÖTC pøžiSë©€W¯˜ƒØ6ùS‰€mûλw¯"e^‡‘B.—>“ººI¬!NŒ*÷^ègY‡Îþœ£ß%ýÞ9rV,†n|>e׋wÇ'~IÔt’¼ûô‚óC)ä€ÇÁ~ôJXÂò­ÄîçØ[E}É ÉÄ„‡AüÁ¶ ÜžÓ`÷K7ø©ëù‚ùql¶œ ›ç–Ñ>¾v …5¡ wÐOÙ¯´Š³Duã™íÖ5ПïÊªŠ•M+O4Ö4¾Ðô騦Mþ°¤m×´úíõÛŸÛ¼ýž·ßþâû' GƒÕvu5beáË4ÜûöÛ Eœ¬õpë’퇇U´6¨ˆìill\ߨí~+ŸXY¡ Øô pö¹{Þ¾kIG«m, MìÛ‹,Ÿ@¼šÛz˜ XßXqõúHcÚ¹_"»ß%„÷:{è¬ÅH E½A[0Í &ÆÑm¢±#Žs‹·Ki_ÊGUÞv“ÁŸíIy§-]+ »ñ;2%»_ñ}‘ÆÀË;[ì‚·±7Xø•/>!Œ¬-gO»ä~1?¹_Z¼¼jPúûIފ•Ÿøò~”ßQ3\ ‹’>²²5Í"‹ÝH˜û9|þ?|¾s×;Vq¬æÓcM+›*V^ÝxíK~þù¦ÎúÍ›ë«;·,3±¿¼CÑpçèÑ£ïÀ}ïö ~Í]o#èËÍý ÷ðü㈙å6 kú´¢©éñŠŠÇ›>e.Y:¿ßJ$ Fxœ hcÂá%HbyAÜ™ À:õÁïî½ 8‘›{œ Ë4V<^A¤ý¨Ï— ßiômƼ¿ò,¶/4_i÷ÃW»|ëR°@‚Š|ŶR –zHlò/¸ÁNù&äx©‹S~iÒÜ_b½H^*½ Ž¡¨žG=Ï0‰†ƒÖ˰Åâpn)¼¢(÷£v?1‘—à€ðÑDÍ—p¿´Ìñ’Öàšå€áUcÙò­¶#–rµå’©°SŒ\J{—²¢ ¿ÅAÛ—q¾77›<¹âا˜>>·©æñ޻潃ÃΜÙõ\}gç¦W—?¹wÎoîÿljç‚wþcߥ·ÿaø–?ðÀ|¶`¥4wXkŰ&¤ò>ÞÔÈä~ǘ€&"  ø-°iPÝyF0ë¾·†yã7&,A–¹ÃN„Z6öîgÖÜšï%Ö»gm>´™ÂŸE÷1ú&Üoj;ÒÄ$¹˜¸ü"ž!‹ÖìFKHU”ó”·¾ï¨ÙhàótÏ*Ób¤ÎêúG ŽzžÁÿœ–FüWwuÈ\$ÊÁqิûÑ/Ö…d}D|JûRÒÀ/öùýD5ñş劭|±VN÷¸  ¡òŠÍ²8K6|¾Ç›Ö7®ÿõÍÇ~}ìæ›Ý<ùë×¾wÛ×tð«î¸çžM›Ö/Y~Åsö¶_6zÚ«ÞŽxßÁ9W :èŸåûtþüŠ_|i=ŒH&Èwœã去ú׿®AŽ×bOlBÚˆ€?I\±€_ÿÆÐ_ækœ¿dØá«‘€F·€X~:í~rŽý,{ìe‘}ëû€ûaÍ—OG8œOŸn£ã-ž¼N%X.Ï+×s-÷š€ÏãKy'9ì*ˆgQ“dðÏi*Wæ@tË€sö™$¡¯öËEog¦ Æ-ÖCyÐþ~îg ÍZø(ÑÃØeV=e5VŒ|Q[íïóø²e,‰æk‹m?ÆùÎmjZYs …É“knž|sÍÓ·Ýöå„ëN¸¡ß’'ÞXþÀ]ËÇÌ).^N¡iø5O>ðÒG±Ú;¿fBîókæÐôic#z?‹yÙúÆ=ë»ßÜ$ æf,àzaïMxçà„™€åw]!Œx ¸â”ý”ÿñ±UPÀ§{ñ[¿ž H]Ý$ pœ/@¿K4ðã ðû¬·3õzl(&Ä[ºy«×,~$ޝö`V=qˆK¥çõ5ð™Û]“ŠÛ]BÅ,†ùacIÛᩦ£‰ÎPÿ\{»,‡6×-ƒMmÈ'N‡ee xÛýlp?Á-Ù"æly'A±×7nlj_ÔÜÒ}‰„YCú¥†½¨ÆÔîGbéH7ºçƒÏweEEÓôF¤³V45kzá¯üï|óàÁMžøÓC' túÓò?Ì)¾ôùûæì]¾ü+–W}0¡êä„ ós‡ž?ÉáȰ_<ÞTÓÔô)¢eèÓô8£f¬¿ßJ5S6DÞ¨€§|Û7¿ó#*`ÂÐ7Þ .-~þÒÛ^ƒ¼QõAUÕL$`ì°V"àð/*V"7^­H]Ý$ FîgYg=ÁOŒõÈZ“ ý)PÍw+íïÖmŽÿh IDATaª§.‚ýI»Ÿÿc=Ò”þ~ŽmKøv¹a+ð-/¢žÅ‚7`Žb¤Éýðù"ÊÖÔtìé¹7O~zeÍÜŠŠŠ ïýèG?ýÑo2ô‰ C—/ÿÉòåW<°üÉ9s.spε×~ùΗïÌŸ?ô‰¡ó?kÍÝҊ°Šg‡5VD®¾zýžÆÆÈ°a'”9^ŸEŠñ±™ˆû=½r:ÐT…üèG?AÞy ¸é¾W ûæÌsí—×"¿œÿÄÐ'€%­¹K°€ŠÆ«‡E*>½z=¢}@ÀÒÔÕM²À×õ°Ýï’wàG_l÷#šïRÙðÚ”f¸I|o:×ܦnm2e¯‡M eÒC K´©O©Î;˜ÿF[¢ƒ}ʆ˲ÁýæÂ”4¹¶';(úû]Üv?>Ç‹0ûuü“öY›«²68 Pm¼ ¦¸½ RíóEÜï…ŠÆ^ÀÜq´Š¦«PåNž;¹êäÐÞ9ùÎ;ï<=áÚwÞùòÚY_Þµ÷®+®º|hëPÜï—[Z·lÙòË¿ÝÒzâĉéÓ§Ÿàaú¿ýÛ‰H+œãå…&,`åúÆ$`åÕS'¨úR ¸öÚYWì½kïg™€ùIò_J]Ý$ d]Íç+™öùZ*øaî¤è×Fdo™mr—·Ó6 %$rýj[“èmÈC‰UÎߤ¤ôÎÏKBßÊqßæ|õÿ˜0ïc—‘q¾ÐîÔ´ÖÓ|ƒ5pÙßïâžÛYñ{qãN"Iðùã $&Â>UAÒ/3Š^ŽèQbŸ/¡fù) Àî—*iÖ|I¿Pópg!èPø}©ùb«‘'+isG_è[ R¹õ±P ì}Ïö»L÷ùòöÊ©r«}{ËÛÓ7Î7ÝAóz¸M}àÍW •³:;@ÿ…„PqèÙ‚{)ç~C0A£’‡~³2Éþ®B‹WÈàœÞÂQbM7 ´FMŠxFÂuÏ¡1(ëtû|µ9^8àYRé•à'çxYÃ(¢½©M¹-ñgøg·©yº‚6A›´áP’b)ÿ`“!å&ïsµ¿ã‘’g¼ H”M° Ö¬9ÝeK£˜ûA»ŸC‡äŸÆÃ0 ž¶DK暯±û±F«zÉ¡m>Ml@žU¤td&ŒJ8M¹æ›Â¿›xR( Ýýý´±–?ÅúÇÐÛý²@c\c¹gh¯øxC›úmªûmÚ6øxòâZmÚ†Lç¶nòØNÚÜåìÓIÊÙæ4—Ñ/íÚ W¨EúãZhŸd¬GÐÉp?†oBï…$OU~Õ!ƒRYÐ'|M‚.¦šûÙý"›˜Ý/u!ý>_mœ¯¥:;Èkª˜çr?,­¡*M£˜œµ­AÔ•‹±Ü“õY÷uCô&-7uRŠªDÉBiï¾!9­"ªM+—;Ýj÷£ã|EK røÓµ;Ü(Ñ ¯ÇEm÷Û¼¹a {¹7àKùjè2%•?®ÂêÝ®ÒÖñ÷´Í±ßÝøM¾.lH§Ï—ö÷Ûí@î÷søIÅ—÷vÞº´P[pê#õkƒJÁ‡SJK‰6à@¼Ñádž\ðb8cÜx™,x•ó\N÷>tY–œã…Û¥8û#ƒþ,[ªxöpÍŒÝïüæjÜ|SÒÛñ{;ýM-÷Ó,xl:4i…T¬˜ÐØ·Ïí…ß<—â+§¸2ô÷k³ŒÓ€Ž(¢»D}T³aç P…m½¨á­(šœ®Yš¸/* JŸðíÁ-½‹í®3»by–—Á¹á¸Ž¨En3:ŠAþì4Îñ’ö ®ë¡˜ IÖìÀø§Xûlý|¾Åm)ç›,ÄÏ_3¥>߆ôû|Õþ~–[ñÓ›ªýýHã³ØeoQa"2U–é½bŸg¿2ž€¨8.ò]³†§£ùSC– ÌxaP•x@ ‡ÌˆYœ’‡ ©µs¼Ê¤Ërç#·¡£ öep~?€ÌªE¼Àçáàq¾é™ã¥³Ï—û44þ¢ú15Ü ÆÑø 4 ¦¼·³âð7®ÆŸ»Ÿ’©¶yîóÒo÷ÓÆzX:øÁ©¥ÝO¡vm „µ”ZÃÙ;yœ ;Âã×p”l“ûZ,5Þ­I·A4P¢ücÐã/@¿"ù!qô‹|@ (úî׎ìÄ,)„ ˆQ º€ ”jž[,í^ƒÏ÷çü¨ÎKƒj÷ÜáÚ¨kVñù®/ý…>ß¶5nŸ/K*â%pg0?ݲ ^ðM …tTQQH4†¤ÌtšKóÝ´ÆXµ¬ £Ósж”60ʤÍñ¹—ÊÈŸÅåáÜ­ç¼è¹Tl‰_ˆ=<¢Ìd àΤS¸´0 ½·….èKOI=úé„,‰B_£O„|w–²#Ñ âhLíñSD„’y@ ˆ°OŒop•XÍ"vô3ú|-fï[õš†}nî§ù_5UMr@ …-[±âS-˜‡<Ï­š‚¹êÀÄÁÊ­zîéX ·@6ç<ÛW›éÛHÅëí~‚ö9´» Qêñ€ã²XoçÌ/6_Šƒ ‹æ Ï¡sØ à³P}­Ó”ôI\¤K™“ùýüá~õ6”3ïQæ†Ð†Ñ³7Kà!E’ €Æ(6EðÌö¶J.6 îç3„A\·æÐǶû÷ƒè—g1{ŸÎûôþ~²}¶pOmµ– n\ñô§MGX•1µi¤f§IÃM »¼uQ‹”R]¤³Í##å,Pp‘`“‰b ¬$¤Ûê/`‘Ìh:øÚ<œøq»ŸÝoÆù>â§0•ûñ>à[žœ,@4Œ¨œÑáoËææÔ¨Å'¸çøeÀ‡ÐÅÔÛýbþÅ:1ˆ#[qöK´SË¢ qH~ªô„¢s;G§mèüy ”ò,ªú²¸˜„D–IƒÜìwÜïûÀÞ÷ä÷õÀ¸ßÖ,3 ( ³à€\†! ¤Yü\3/Óòt#‘ 3\ìIEPŠ ÿ¤ ÏM»ÐUOgÜç¨ÿÍðéñBí~PÁUÖ3¢†¥³›û‹Ý/mèg;BÙeƒÈ]¿—ÆD):ü‹vØÒ—b~g'ˆ½è9s ^ÝMªÊ¾ŒõPœ ˜Zœ÷1ÓމCÒÀ‰ò½ã<ÇzP¿7ø5PÔ‹•¨^L#è'"ÁUww?ã~ß÷ä}šÝÏÝÛŒÐÆø›»Ù¯ýݸDÏà#;Ìèà>¢Çš˜/Ê&Oðö8¿Í,ÝÀWÍ™èQ:~»×¯¶M~ñ Wé&Ô_á»tؼKbEË,ªùú?Öã‘>n¥,(ܯäÜ9Ú,–ëÂxU#m3æG«×n÷˜D³²ÍöÃ뺘p|±Ø«0´ˆ`ƒ˜©ð!½_€yPuèRdóû‘#\æ~ ”yÄŽúcª5ç“J„ÌEýÃæÿk*ž&6N‹¹·’æ,»¼ÐÙ†¥WÓ°H}¾vZÆz<âÞH#÷“KßQ¿£ulzDŽ‚ ëðâ½|Ö0ºîoÐq‚|`!\ÕÈñivS[szÄ8x1¥W§@„;:âÀ,v¿5'…ûÑn„Ã"ÀÆ‚„'% ÕšhÇ¿´ÛýÖ©ýý^{Í‹÷1»Ÿ|¾:¡3¶Q Pkî.ÈHÌþ’S8˜¯‘œºËoú ˆ©ÿÉ»(¨©í¹ÿž< v?NF‚‚ûñQùpí`²¢%å~¾õxÄî˜T÷šnŒú!f'Ø£~ÌŒ~ð*¾Q¾ 9±™ZܖʇSgÉÕݲ¤ÿ$µš¯ãêLÇÐPu@4`%”CŸ%Å„ÝOàTP ÷‹ÐÂ, nÌíˆ1£ѽJ6<¯ô¯çÐ×óõÆ>Ýç«âY›¶c7?t¥3‚„ P’’{›o8M“nz¬‹ ‡FëXéÂxwr¹éý„¡Áºèæt„N€d¬Gºì~ì\èç ÔûûÑÚâë“S!{¬+3ç~éµü‰JekÙýFÚþø|m>Ò­ÁÕa%qL ¼S´ë`@PÚßÌíटa(F¿ãŠ\!”ù7b<–ùTb4†¥OûXƒÝÏ;P»ßuvS@0î& imê—o\(‘4NצÎ(¯Š…gÀomb¼‰„‚l”ÇAÒò'Y·É”˜e¬GP:aÖ— úRÍ—Ûý|÷ù>ÂANÿõÇûáòùR‚GúøqŸ† 8`‡Íúÿ„Äë™ã¨:g˜œñ÷vëšûÚßOà]„ÿÄŠ ÙìbŠËUö]nP{ùI‚Fæx‰Ôàh„é± ›£F@lîë½²—¦ýˆÃ|·ÒÛ99úáÕ̳Ö\vq„ÏÒ–ÿgç"]³ûI¦Çu3¹0íí¼u)nº¾r?àÚ`p'~tLiи­ŠuQ<<Ãù²ðÍ{¹D7ÄHuäàAf`µ³Ñ&+Z:¶ýý†xN.EG­ñƒ‘˜+ALeñ%5h8ÖCÒE-«˜@ ˜JDI4N»ÝŸèï—E^ôk)Ý¢Ÿ>„,ž8«O§S éY¼ KÝûKA™`qº(½~‚ü_ ?%Ëœ8éP„‰%jÒõ7³äQ™E–¹lÐîÇ;æ:œœ©qÐ?:Ç‹ÏÜx9Œ8g޽àÁ£¿ŸxVðA¿ø¥{ü™Bh}ŠÄ”:òpFQÜÛÙîGÇùŠd‘HÁ p6Ð EŽûeZªç«‚G<4òãF8EGA­Ç ô/÷‡þ~ç›”ûaæp„µ"tëñ®ž¼£òM•¨ Ø¦·WT¼‚Q‘ž¥ý€/"Ñ62F:$R†zí—¦vX‘ë•C¬wˆè!GŽ8,?fÏÇÄ«9¨Ááÿ˜&å©·¹(&£Þ}¦ü;õüÿÕó"ŠLð"²|œ¯´ðIò~‚ÂîGŒY¶¯c= üÉ›ÐÂË?íÛÅýØ:DôQaGåð6¦Ñ²-\Í•‚„ñI^¸Ù5Õ³›Òup?óZA»óû¼þÐRpŠ!ÞÇv³ØÝ0ýî|‰z0FddzwK GÒ=Ç ëÑê‡ÂÑ©©^pŠ(yÛàîñ6ˆRï‡zãEÕcr›/¢l“4\œÌ•£žU/N­]~ëmGIK§”…¥¨'/’TdÊ¥ðNþêá—ÆM• Êei`¹èzí߈†•ô–Ä¢EAè7‡vôÈ>âÅßÛiôR' óûiðg)à‡?~ŽóŠÎA¶ÔÁà+uÊ!ðÉ®Í6»Em™GJÑ/Î?PîGûû écà×›‡¨xH2u l;r_ :ˆ:l> ©AM#Ê>,gž¿Ã3–Ö¤AdÕS;ün=×p§ü™×‹á¿D)m¡µ8Ð`¿Ôì«ÒZäÜ/î÷3ui!À÷˜eý%ÙøK +üÀ?÷“üMܯë 㨻6ì@i>“Y]ýë‘ çÀX¾4 ûà#˜Ü7vKÈ]GMÎWè#`ZïUÀ› Åš_Qx"Lxâ¨B'•©gÈÒFù“xÆÈ„%ƒ,„û4S  T± Ê“H€d›²ùãG^_¹ŸÁ¡T^ }”ÿ¥¼(š×ƒ¿‚‚ÿñ=ö`á(ý"ʦN´%HòÛ<ƒ~ý4Èùý‚}å3²¡É¹}Àn 0Î^CDuÝq¿ˆöë°¼å[¿ÅùœQ6Ä9RTdy¨H¦—6êÊRüE›Ÿrvd=ð”Qí£ –+‚6Át…,P‚(ØPêK­cùWüx¨^=5v?Í¡kÎGØž€>²å+úmHŸ3Aù€À1¼‚y ‹;[—• o;Ãýúo >ßuù¼Ù‰ßüÁÇžl¶rß0¯¿€~oÈG¤1e ]ì@ä ê9)³ p86Â;YÉDnØòÎUAêi;¶È(Mn¨‡wˆŠ|ƒº,^CŠ4G´$åáÞàY"óéØ+j;búvqžŸv?ÐÍ…³=ÎþTLuA Ý¯aKò{ Û¡¿]ü[d ™P9°…½À± úõË ûû%¾röG"ÿð÷v¾Ä!±G9M=×å•tEî)ߣËTÎQNÛ£å'7ÀÉàÄòr³P¯}–Tñ|]÷¡=Jf.¨`y¡àSþßµ}öù2ð6> }2.õª/Ô|qØÎ¾o¢»7¹¼éÛq’íäuˆ”©·›|ð<2ƒ~ý4à›ŸLahÛÏxÊÊÛ¹3‘np"w ¶·Kï¢|“9p Lϳ¿À7 N‡9¶K!Š'sà@y>((©Ràö­0y»,ªLþùl…žSXêvî[m¨ %hÇ¥ –ýYy&¬¾¡Ôm»¬™\ýS¢’iØ:&ÝÊ^ Â·’÷fa÷‹ùØ<-ë›?ø¦P{\eI8Lui´™í¹6+ÔZƒ±Ç‘ê…#¢l‘ØSt:£ùöÛ@¹öù:Ï ¹É£—sO»kà÷"êc)TŸ£qÔƒ¾™cÀ°•`0pkš‚†Ñ%r¸…6Ú"Ë}¦·eèŠk ‰k‡ò¯d5ê´:ÎçjY¹ÿ*Üuý1ìÍNÖt³~ðMòŠ.†¼U«V8L¹êëšåÀVL¿€MÁÖÉÓ˜4ÏÒOýúi>_Äýn¢ZU¾ž¡ËTᡃ2á+,ÇèÀ`¿ûûqðCð'•_Dü,` ú‡~g7kÖQ¶©±|ËV#ÀÓvqLýúiã|ú¹[Í¿<ó½¢åíý*ÕJõË•J •îÍJ÷±DQžù¹Kåqš’»–ÐýG’Ë­4ªÔãÕRiØN §RÛLV -KËÙ®¼§p?ß×t³¾ áÏøÏÿLý½Ö¡ú¿ÜO`š yÐsë(.^qð‹pq¿ŒæÛ½ùÉ/ÏÜô¨»éýË3lÄNùÀ,Ò¤*u´pµH¨ÒôöÌFæ¤E)MŠ#å®R±ãå†S”r¥æ ßåjÆm=Måt•@ûn9®ŠÈ °D–swZÆÈ'Ö@ÆÜ/î—Ï÷afõÓ”_üký³…Aðyü|ä~²¿ŸÊy\Pá~b<;ÆûÁðŽpœ/€Ä úõÓæ÷Üϲøæ~äï¨h¾ Õ9„ó9çÜ31$8ŸsÎ5¸²¨ôÜ;7iž©=XõNû $K`úìóE7\Ðʯü¾ý(ô¡—Ïv?0!dtj¯gÐ (Ç|—ÿÌ#Ýš²x¿Ê ÷뿌óçî7da•û,‹r Äý˜æ;Ðd÷s«bçÒŒ]$ÌÅt Gû£AA4 ®ôØö<×ãŸ&xTz$òª³„5Zéñ•ÝÈÅì½öî»/ wŒ Ÿïã|yØÂŠ­%àO::ü1è³ùi÷ã]öñtL1RúW’©üàh® Å’nøWNm€çxáð—A¿~@?Æý(öU2þGí~6YÆHUîLÙ¥zhªõÓ@*]©Lù¹ d*I€óÀ¨ÊAîµmuÓ³n´3 è5à©àÈ“À!v¿—^bð‡í~6E?òøó‘û C0G¼¼Ââ‡t_ºçóX®ÄZ–ÕaÙ ðˆ¯#ÈW4[Š),Dß—,Ñs†ÌíÌFÃeЯŸ0·³Ô|÷íFÚýTÍi,^ÀTº¾7Zù‚M¿DV&<Á‘@ecЬCŸÞ’OTΖ,‹D÷ñŒ¾€`¢€4_Š~ÏPô£>_¬íÙÄôá#÷“ŒïE ‰æK÷|µû ï:²j ]Ñ’:zùÂ¾Ž¶P^Ïæ;âUØn”¬fN“dЯ¿9¿å~•ƒtÍ÷1j¼ ýý„®‰aï‚—Cè¹S6©HVÉ Ô¨ªµGë7Ð<,©îiMÅ¥"e;dÁ,hѺ®‡4ö÷ÓgQHa±S\™_áàöù­±œö|©¤Ü¿ˆÝ·/t—žÅ÷+Âý8øX,W°àO¥Ò|Íš†D ¯iDÊEJH ¹Räâ©¢“s &6“xL¬’*èäÅ5=ÿh¥8,ÿc©¤R=Tó%Ð÷ŒD?ÛI‡Ý÷oÆê­%ávy‘P˜âB¨Üó7Â÷¢xµò(^Ó—xAˆâKÖ6ç¼Ïá”OXûÄ7â~b•®ù:&Ÿ¯$se]€/ò¾ ¿ÙyoG¶ß ¦¸2¿ÂÁÝ߯’xJ9‚ îÇÆù2æg x9¤(—ñXZë#¨ù©o wÊÂÜê´§*ˆJŸgq`ÜfféYéx¤+ÝJB7ι L¤HŒÚàT%‹rWLr0bÈCôx)gc=b t`ß}¾Av+hÏ>ÑûOºBüëÁú+ðsAý :äc¡/erYÃB lú«,›΢¬ÁÌý‚›·ûnÚœâÊü vóîg‰€÷Ÿ/`W^÷ÍMP<‚¡„R§0íBö-Kîò86_i„>Y~‡ÎªÐÌXìï1zj⨆‚$c+]ßåîJÉ 0\®¦L¬“>Æ IDAT¨ó-­8€¾2¯ /pÍ7]>_b4fÜÿŠ!n~x|µ9^¤Ç—²6æìµë™ÉÏŠâÉïäa¾l=_q(+«š‚©ÉîgoF”̧°=ƒ~žMnIÑó¥ØG™â~ô “YxSð"p; a»ƒøïL]ÉS¸Zl¥Š.ÑbWò>ÍîGˆ)‡>ŽÈ8”ÕW5Î(ÊÎ\é¿§þ¥±®á®´ÓʉÝLÏcÜ/褭¿ŸEÝ€÷YÔ ²*õ…ðXÓ93ð]¢ž®ÓêØR;¶ÅÀ6[œV?è%Ó°·‰û]Xˆ³É;ƒ~ç÷sx¿A„¯ñvcç[©ŒìTB¥’þljE”aÑ‹†) å4E9T…¿J]3T6¶¸¡™'àð[nñéÐe€(“zë>ÈZ_¬ynAðß”ë¢\®§WžGæƒ(÷#˜G_ Ðî—–±¼ÇŸìüLpʪU«¦¤ºýØz¾|)AiÞ“¦>ÑÓOå~A‡[y¢ ç62ËÃE Üo»[öynÙtSDÃO–A?ï@úû­K<¿¹ŒåEogÜÝE"œû•Ê3ùfxJˆ¢¡t,ùA„‰¼¡’tÃÜO¤,X »Ô^OåÛx OJº[S¡,ѹâô„‚Uøô –ä’9 19ÅUŒ ßötÙýÜ/ÎûXHq!\óûaFäŠ,˜¶wZQû6«ëm‘é+s0r?]ç‡}6'{ç³yßÈ Ÿw€ýý†ØZ“Dûû¹Fºyq?Eó$( Õ49èIV8HjŸ• }1hÃæ# D’ïr…ûåi.™J ¹”zzŠôR|5$,7Ψ ³´f:(rMì®â˜òJ±F­—^zé5õ•Ž9^ðg¹Áuwö û´±ð$“SáÏ u‚' › =7ÊÞb¥RoîgCÈ:·-Eßµ!>*ˆ02ƒ~Þö÷»iÈ¿üKû¿à@¿Éà~¢ù)Ê%ô”S(kÐÀîW.èW%à حÙÔöMT)‘¡MfY¸Jzy§Fƒ. £LD+‘îíèfRCáHãrc ™x\iNs´êÉlöÛɇz¬ëáãX|Ï)¶¿<ÖÝe•oاó6<½Ÿ¶µ‚u²¿‹:ê—mùQî§ìúº¥+h`yÓY*ô+”þ~êZnùôÇÝ߯ è@ÌMkƒ˜c—“>ÒÕ™ü*¡×C|TX[•: ¹‰—,4k¹+.—A¼cŽ,Ôh/õÛ+}⨤:³Hä]"×fÂLq­lW ÒçëëXz×QØãc=ò(öMñ ûô9^°²²ä~¢g3ðö¥5ÐÖ¹`Pb¢\™î%°ûk°]{BÕUŽÉí ÷óp]DzËÊb_|½€ÝŽ|×NíLŽõàýZxG“Aƒ€+öxq){}˜UÂC¹Æz4³ÂIŒ¤¤Sïñ¢Ê‡žX Oµ/tÌ•VS×õ3•Èr®ÒÃ’šÁž*ó [V½ý˜Ï×öwM·‡^EVp“c=üå}8¸ÆùJ8S¹E ïF¾bWœ¦BMäóí«©OC9;¨Aáç ¿ÀÁ úyàóu†¸†É€G¶ûñ6džݵoº`Ãí´ÔÚè îîUÕ4ˆ4D2 ž4Õ«xàmî».¸«df;þë:æQJ ¨<x×3à\BN´œ<¹Ÿoëzà0…“<ÞÙÙìSí~]Ø´…9„¶4t±môÝÕÃþ?ðþÞB¿Ä‡§1q?àšÕ`Ͱ¥83 YÏÍýøŽMQ0ƒ~ÞÎñBúû!¨"WÌ‚áàaߌûÁþ~ygå]k$I²éCåU6+ Jº•NÃŽ¾Ø@7Q¸>å¬[E¬'*ϸŸ$$´÷jH‘*°¼\©g5:÷{áÝ4õ ÔoÅ? ð¾'ý+ÂýxÀCÇP¸‰n³ÍíâÅchxÒv5JèÔ>p? •-ôõsÓ!•ûÿÇÏá1„~»Ÿg >_Æý¤Ÿ2A‡"ã~ÁH7KÀË› ©¹ÚŸ©‰CEÔ#[Ÿ¬Ô,‚ ÔX#ë — d5Ñ¡×ò*¾+/] ­Ôþ¢ Ô '«'y•F'μÖpogz7’·ä~iðù>Lðï¥)«^Âøç?ïÃA›ã…i8lJ*¡þ*/¡9ŠnÛJ#b¬Á1Îr@ÐÏ•,¸ý¾€zt{¡x˜á~ÞÚýb±ÝÏ#˜¸Ÿµ2ª§Zç ¼ðÀ»i'E¡r¯Â¹Ù¨’_"*·*]ð¤!h"Ps—UŸÐÞéY095M‰JÐïFû¤ÝÏÿu=h`WèMþöWºi†+µ‹ øÑ!Pª’t& ÍÜvOIäãgè"ã=íÄ úy|óÇøXc #vœ/D?Ô¸¦Ó ä}fÂâEW ¨“Jd“WÑ‹|­‚…K¤¹#õâ{&N„T Þkx˜á ÿusáJˆnjÖzuÂÿθŸn÷ ú>Öƒ‡U ø-Û8Î×ýµ –²sŒ-+‰¼}¾}鿢 ÚYa+» {ÀØôK÷cc= ÌñÂFº±fø¦¤V‰àÁÔJûHnÜéAËÖóPÙ(œŽ;zy £Æ Epï{Q­rXÀ„ÿTWo Üõ(Ù -2Òóò°û¥‹ûá6ì3Œó…(P-ÀMðA!e*É!#´Žõ8ž+Œ´ƒ+d‚°ãFÄŒÝÏ;(ã|u7'6¿žåÌí¼jÕ“†FY™¤´ô1#%—JCœR8Óyf©TñÈ]ÄA*há ça1à^ЄDWl¹q0‰핳–ÀÚ®¨½éµûñ°êµ´`Ÿk~?ÔÑ/Gë̬j»Ž’Š€ ZJ˜¨¿B¨¨@,ÓÞtÂù¢8j…†š+hr”(ÃýÎ1°›?Ù8_G±ûy6ECÑ:‘KÓhMªa¥nxS05N9 ~Œ§»@HÛML7 ÙõgÊõžÜÓH™p[é>G5# îwôÝ)6¤m¬Gúƒknge¡"øÃ°+³:˜ƒôôãgd9QŽƒ ¹·Ý/*pŠm­X¹Ý üDGöØ.Â=y0JwE$`‡”F9WÌ Ÿw Üo7éæžóÏñB®7_ÓÍDsÀ\tzË7µ_cH¬~VšvŶ'kô”šhTñ ãt qá©á$w¿ÀDÅ2T¯R­nU=)pò_o»Ÿ÷¬Gºƒb÷ƒGzë;6äs‚*s (®‰Y"'ɸŸJÕÖQ ƒ»t/¨¤µ+`†ûõ1À± ýäô¦ŸÛÙÑ4ßA²ãIbø‘‹´i³+ðÍ«p ©©Åq# ›ÐÖ»” Ê㉆Vý ïÊÞ.ˆ¾ ¸ß f÷ëx ó‘óÊNžÙq¾y˜ƒyM7‡NpÊÖo“±A:é=\ö<ÐPš Í·/óûÙŠ…ÎrÞ öµBþWhWpµw…{ênÆîçÄ8_Ìý‚¸­”/n÷ãs¼>OÔŠ¢íÕ=#a2âE‚ìõiÙ&]@DÁEåד'ê2úVPL½V¼¸ÒP 5‚q¿`·ü 9Öƒ Ÿ¤&z‚˜ 9Ÿ’g>¥æñçu~?idn{›®ÝkK sè|ÏAÑÓ€ ¦$ÛÎH²˜9~Ëî/Fîgè¢ÇµY~AÆû8®XÁ½ýl‰†Ì®:îç ÜO &»Ÿ¹1x“ökÂÖª½W톿ånõÓÐIN…"b•‘p‚.]0ê¥+ÌWM ¡˜äU&(§! ÒÛø|‚þ~Á èó} |'KeŒ7 ßS/\иÓp¡õ2Ä1dž{ñC‘,öfIŒä1ªP¿(÷›¹uÐr#´®p0 9äwÇ7‡s=±G)ß êõ`Ž›åC†ûy2È=&çvvk¾û©àfYêúE^ˆÑò<˜ds±¡¯°kY`0‰VyÐS>xŒå Óê³+«ù¸ÀÙ5ç® Ýå7×äHM®•ÙîwA×õè÷ÔS”âa>×ã¨nü5@÷’¡ý ð\IÅu(’*•³jíeµ½wØ¯Ýø+Î~¢€ÏkóuYùæ ‚½Ï“é{ýÞ÷õ¸úäê Õ+ý›AëÊ^–à—â‚è§Pð犷«Q†ªá2oé‘oˆ€ÙàÌð†€/7¾n¡×ƒ'»…•íÛýt#]ƯÍ=ºÿš[#öq·oq‘Úþ¼6Dâ ýê‚s=ž,ôùŽy?ß\±¼ i5®Ù‹5eãAÄ^[xÉÐÓ€9ì—¨Ý7hqc[¸–&²1vm¦ªzî%ŽâÏ)V8ó&¼UÞ}à~f¸ó{ç~Ð?q• Üì _±Oà2„.®ˆ¾¿¾5ÞO­kzCÈw±Œön7Ñ¿qƒ·ùúÍLÿ2õî‘n‰ þêk¼0lÝt ¶m9=\ndå„¶ÆË!¢æz¸£q¼ŸlÕñ6ïšûi¹RK¦,ˆ9U³†&1 ùÇ;ˆ<á›â~¾4Pz?÷3“~a…¾Q¸ŸÀa9°ù[îº}oØOC¿ºÌ÷ñ6r¿ñ>_®‘ `bLJ[9yy{‚›œêZVVÿªY#™ š‡Ðò§ÂqÊÒ?ì™Ô*¶b·õt™ß2iÏ7|ë¸ï]6ĸÄÕ…è`ÝC'Ý÷›†ñ=íë¡æq_G¥ÏÃ1|38z1¾gêW¬p5Ñ€ó2 7cšù1‰îÍ\/·Fäc.£žç¿Ì+ËwZæ~ždÒ÷­‚·1 ó3+»Àbi¤Km­—†~u™¹ßÚÓ-´ûYfû|É}ˆÜ:(Õ¼lqn¼}Ó|`3v®‚Ho‹T k†Èý·òczÀà X9[žCÐ 9˜į˜¯V¶ qaû“Í‘ûŦ¿÷‹£§Õíûh÷Sã]òɯìö ŽwA¹¼*ÀíXèG›¹¼Z‹jÓÃE«Ò¸¾›Èîx9™û1>â!€¥‚ojÜ/ƒU j£ôk‘Î dÝYÞ$Ë·µûUEíé¦G;Çz#Ü￟¡i–ØUÜÓÍ©ŒCq «§g!»(c°nçáËÈK¿tötC¿|¾q·6ïí…^þË=IøhÏbë«džÞŽ"ë"^üS CLk;_ãÒÎ׉ûux—÷ƒVï[Ô\°Lع7àeèKÛóŽyˆŸA½LG˜éöb§‰?Ó ×xù¶chà2âYЛÅg³|—$÷ s=¦JŸo깟x®G&g_’é«ëc •÷lKŽ™-¦ïM¾D›]®igÉ!í4õG“õ) fÓ׺ahNÜO(]Ÿb }%´¯Û–‚·o8׳вpÏ—×ïG—s,ú‰Џö¢Ä>[|ÚÜZsØX!î‡+\iġZß/q½÷ï{Óç›U: Mz¸Lß4ÂeYú^¶Á„‰na¶Çÿ•'{0v.ÍóeÚç ÿKðhØž4ýÔcÜЯ.q¼p?[sp7sU›„û)Ö5„˜5^˜û‘‰kl^ÆÀ‘;ˆ ôÌòXSœè'{dzXç~Ó—£ÛQë@Úh~ÑMê`‚˜Öúc‡†~u‘y¾Sìõ°ô!x™2ú è Ÿjî—%%~G"\ëÆšõÀÈ7lÖÊÿ÷{‹îƒD;dˆ(ª¼²‹×Âý~«G¼Häò›ù$n9,ZÇí×ù„2&ú%7Œß%7slýòÌ‘¾rŒn†!öê‚•Ê~¾ãä~Xl¯‡°8F:‚>ZÉ€N¡£ÛÅþ¥(¢ßÏÒžnÜò‡gy²îˆ}·‡7鿜ÐëÂc³|—„Ö÷›âhçÿy¾žÿ‡ïG•Kq?pÎu-³ªHÈ(š.ÃFÂð×FN2Þô.‰áÕ‡±d×p?¤¸füL”Nªmh_vÑá6 f"iÁö9Ä,\í•ñs£±3»/Ž*ÛÙv5úûõçóÿ²ÆËIöõ8©Ø^[ÔúW,æÇ¼7+GO¹óDö÷È€ÙÓm”õH—Äñ‘œ`À_æ‚Ù¥¡_]÷ûë_ÿzþ‡å/iOËÍ›GX"À|¹_Uy$¬áÊ è—câ3`föÑg°;¨v çav?J"n½‚02pÅeÇì‡'2ÑõËG~š@[ ­ÙnÕ?H0Ÿn*jÜï„ûzœPì\‚-»‚3ÛÄu°àó$£]hª›^¿Ë¬Ñã~ã·¿}ûí·_òç·ßƯô_ÿ”Wc˜#K±ÌÎ_3¶>ߪćÿ6µû=úKþàß_ˆû½©·ûó:õ¬ ¢6¿D±"c›MË a’2N‘¨†Hߪ>_ˆ¡W‘§=A[[e‚knª£—^'…ÙŽ¹³ë“5ßÙÕØú˜„;ßÙI~Íí~Ÿú…v¿÷8×ã$ˆ~çÿy>ˆ¿üõŸçünä~^~§#Žèüü‹ß$úu?l6›æOþË_|XûsÈX~èºÆýª2|Áûz$yÿŸŒ"éM–÷tËu*˜•o‡o¥Ýo#]CF¹l7JU¨•/ À ²áû8zéám¥î5n@ïïð[á~(œý¯Åß$ë¼²OØÖkÈiµýЦ=‡…™Ã ö&¸ß˜çÆ’Q—7yW£ë¿+ô#îwûs¿w•ïò÷oè\ËãxRZ¾ÝùѤ]º¿¡>ßÌ럌ÿ%Ûç{Í£?jî—ú|ñ5¿ü®àIBRsŸtSšü^ý |ïOúUÖxáû‰ÃœÓx?Z§.ÏóÜoƒµPæ[m—(xZikÕº/­q½²®0¬<Ï7÷ùÚ váÀšT×Ý£ÆLÈÀž sˆ¹¾èGJGã§ccWãQí~×?–Üïcn÷Ík1Ï`(´ÓÛQtcñ~M†ð/ãÄ}Ò7eî§ú|‡!æ€ê­Œ±¾¨µ Ö\fèè­v0Ïœ«IYwÔjc= YÓúeS9ŽþÓHo{wKK·læ=œMòêRcš  ÷»ní~YÒˆ;¯C=Óç‹Pˆ#¢'‰8ÓÐï ïç;þêˈí~Ô´!Æš–P÷j-Pr\p«rÈÓ1Ø©Ws(Jöç8D嘗’‰fŠ»Ño”6)5v)©®7ëÍæ»’ aIG ªº–rtL3ݲDö÷O­Ï—¸Ÿ†/°„ &hY’@šýƤûú=P‘=Ýžüå¯ÿáÈoþ::í~bžšŠXÂYE Žß=ò Ï¦J-|³rn\®®¦@V½½ã5'µ`†.4Ñ)›WUDvôYÂdùþ¨Úý&i÷Û}\ÕÛýn&djÐôãp?ãÓ``XÙ^„‡Å8í~M†ä>ßïç{ôè¯ÿQÖÖ'¿aîG{º¥z÷ôb¸¸¸øÛE¤%1P¶46D»WùYTîéÅÅÓ‹Ò§¢¦kH4t”c¼¹rxnž ‚¬‡$÷ú’ÎÓ®\Ç+Âdùâž¾0ÞャñòKÛî×ùKpvSr¿qReÒ[tHãýx}¿¸Ú -ÐÐïÊ0÷›þâ¢ßÍýrš±å"üP!¢ås=N¹ÞÅKgãYϘe­lE×⬑» ‡ÚÃ=^{ÇUX55ôáZŽæÿá;lóû¼µû% £Á^ +[ÝLiCß\q±SÜÇ|œdb¯™á¸[Âhƒ£Öî÷peøŽÇûEî'+«¤_à~ÏT-û[‚¬e½=^âIJÜþÕzc–öäÌü½`> Ž5¨‹ì¯HQ+ÀxC áô\oRª&î!QžýŽÐׇ/®Ùò½nó|éæù&¬K[—‹U›·6ljo´e}ópC_ ØÐïJä~¹Ï7£Ío¿‰ûÝ`Ÿ¯e‡ð ë¥÷.–sXk¬l1ÝšE\ªšw>æ07•0 1†ë¶ VØe•ðº²ïõùrËß5xùȹßH6¥…ýÂVlÐÆeN;Ú¶ƒý%4K½$Œë[Åé)iè÷@…ÇûM‰ûQu£Ú4šv¿E¬(ÍY—Ñõµk^, gÛ ½>­«c»c÷±COe‹“õÔœØ+Øã»ÄmÿÅbcok¼ XôË&jÚ¨ˆ÷¯Ǽ›[8ã^Ž„€ÔT-†SZݨ_ã~\p¼Ÿµ|Wëhù¦»(}¾`ì)c‰¦ˆÞê$èÕBÐ!pd qœjPTÅ5ìFûLG•–:SæÊòˣ漗sqY&‡Ê¾‘û}Ìk¼äõýR÷D¸¼oQÚÁã§´ÁyÞòhäu\¤)W¼Å•ýÂ×#î=n}¾Vò€æ~ÉâíÙò±Ý¯¶gNÍ@­Ký¢MrT‚Q‹Ûð@»ë:ùüЍ­M¡½ÉB9÷Lc½~q((wεfW¸zFfîwmçù6î's=¦„{IÒÒöù7íl4\—¸ä/s*G©×cʽqKÖçûE¸_@¿Ò|{ò·Ï·R¹=sSM„3µ¾L×r¸Ü;îê’áe¹HçÞ.J–"ÖÊìíÔ­1ØE¿²[Ò:6ÌýÒÞ´¾_l÷»ýx¹ßë0ÞùBïîL÷f¦w9ÿ7Á%‚ßâ~€‚b ó8—ä1˜¾Ä ú=PIûùº}¾±êŒOŠñ~\³ÔÒ+nÝì©Êî|…øøÊ2TG½.ŒË âxßG° ´-TtøæAúè (8¼f;‘ëv¿ëÆý’„/Ô‡;þ”·¯Œ¶ïd sûß ±DÕÿÆðüû(£cÚÏ—F 6ô{ ûùþų|5÷à 5„ÅMó,/$6ÌœL­_´ &Wóå‰f~}R+ RG£zì¢[É0{OËELþ[¾ӆޡXœUþœ¨U4èšW¸rÛýNÐç;œL»Ÿiö‹DoL}À¡˜zB¦lɪ–>\èyêM´þ£GÙR¾i–´Ÿ¯´ûYQí~\ :Þ½ Û…ß P?vcë§FEsPœp˜ DÍ+LéO+ü…5^l"›"5TªèêðìÕe“ÍæÞyT"[4ŒëLWiMË>s¿lôs=ŽÍý†ƒr¿ïW›™]¼ÔßqC;–OÃO™ Ò$`!zhg28s¿Ø8e#¸õz<`áv¿'‘ûõdñÒúq´s¸8Þ/¬ï¹ÕÛ»O5íd=–½–Ù£cÁH´U›ÛûKìUX„áÓ;G¹"­…K½9v|íç iû¾×\¤/ÓªbŽk™é†ÜoœNÐç;ß™îÁ ßÝkÞÎ-7û qÔ33¾ˆ},c›þè<ÐöÝôèyúoC¿‡*ižoà~ôùF„ÑÎÔî'–eZBjþÔVU¨Q TK<$°UÙñ¸Aƒ2.½ÚÍðÝ- IDATõ. ¸üh K¯ÞÑbÐKMf6;F(½¬(À)I,*]ðÀ¾±›þr(n÷cúwþ'èóÒ}95üs=xìrD¾¼Qšõv3ñ".÷Sæo阮;Óð—†~Tì\;Ï7·û…µyÄK¿†]Ó–wóa÷¾²åYiäR„õeS]’޲×0X¾­Â!ÇŒwhoË¡„+/çûè]ôªÙÎE99!Šå’á~×'éóM¼o6|ïúÑ„5éºå†¼1 }ÎÇ,Q·úÉÎnˆ#EÖ¸ßC•r®Ç&®/ }¾éÆî‡“Wvþr(ÀÌ—r©Qq„ B&Ë…Sјvúb(YvCKpô·à.7%b‹1~Æsk1õ-ìºÈ#ǰJ¡nŸê¨G'£™ÓêéÓbòƒs=®ãl_îõ8ZŸoæ}©ÁäéÕÅp?¡~¬ø¤ŽûvyÌŸ2€'jß‹“<ÂÑMXFÈ4ô{ "í~‘ûé*Ô ÷Ãñ~¾Ô†ÛjØ[—ÁbUtTu;µÙÓÒÎÀ±z¡®Ý ™í6é‚å~Œ¹d ‡ø"ï`i8é2y;èµpˆPàÊž$…-_ÊCØÏwè†ÔVüöÔ-f?_¦~Äëpcr^¼9ãC£¥„7šõ÷{¨b×xÉõ‡«Ð“'Mw\Íóݰéû¥»§ÿ¬óØAÜ¥­OADô†8À0zˆ1PLö¿ÏìNjªÎ§=Gd»Íœ%?èÔ×:%ô“vm#s¿G½6éµv€qé§ _KœXì«!r¿kØÎ÷ø}¾ñ¾ð9m¯o9Ó­£ÝÉ;šºQP¼‘/(⧘¡Zô€úRú=TÑí~ã“'ó_:î÷ q1¶­™ƒzÞõ‡¶"’s3Vld‡È´1¤lÄ-Ž92 ÀQd_ ‚Ê\é{Íý™e"Þ2ýf7AmHóµJGgq ¹½hëΰܱ@žé „רÿì­#¸ˆRIŸÑïÇ<Óí4ó|™÷yìï¸ð û|™ÔñJ}„}¦£—½ñYé…{Ž!LÛ×ãË02Ï÷7¿yò›ø~~euS5޹ߧƒªgÒL¶^[|YÓ~æLóònæ›ì¡_g#´ç¨2N&gÓø–C %ñmÑ*í]>Ä]Š"ˆ p9m2>µÌY‹©n“5PfÍ*zˆUâÒ»É!±8ûßI»ß5Mö=ú<ßAŸjùf£¸ûð°àx¿ÿ­öþþOýÿôý±'ñL¾þ“¯iè÷ EÍó­ìé–Çû=Ã*Ü/HžB±¡±ÒŒh€®f}æq‚!küMæpF¼A05á…tFf£\ïêÖë”ø—éÙàÍ$p@‚)`FÉM”CúÉ „á0ê)̦0A|.4åÊŽ^ÓÞB‡º aU4img@Àëã÷ù†_þb/ðÛcÂp¿ów–ÿÜ牢~RÂÿKÜoA¦hù"!î÷[c\®…'‘e› ¨\DŽÈºxÛ¸um£¹ŸB- ¤ÍÞ5Y‚‘ù}›Úý&€óÛTFp?ðžÀäHÝ00“õ’¨Ù~_§Ì8R²¸Þ  ù²Äa­F*µl×÷;fŸoÙò7(qú› ß±ähYkòÂí~ È7é^TÍßš>ß5Z~ND©jƒ`ƒedki. ¿›Ì±2_Ì6*ë@¦FÓçKêqŠÌLAµœÌÀà6`,”‘^;$Ñëw‚&np ØåÎøÓRrAïg»Áké‹r¦ÛÑçù:-ÃP1†?¨|²ßK“@h¼wæûÓzF½£å:@Kî¬*aÑ%À'›™Sü¿£rTÙièѧ\, /€Ÿîó¥‹buÇÿ F°´Ñ9`J(¡Àk£W¯×Öªð6#.”©¬±«» )_1v6ÿƹ?þV:8Í<ߢå/¼¢Ä>Þ è†~M‚äý|Ïôª=êo’>_’<œ8p?µSj-ëé F˜ é‡Áf`ˆ\p3³ÐZXŽ,aEâ$<Íý0’’„Ut8@rÐK362tGéµñô²+Mõå±r,Úõl£fµ)°\»#Xãx¿kšç;}ž¯†¿ÔÞ§ñî(z4ôk$ÎóÝÅñ~8›°0Ímä>ßT¯R¯*÷SRYʘvp M\¶V÷xL.Ù¨¤­á{GÜO£ŠhRµ.í$ÞnÄêt‰ š\Õ¬T¿ñ¯"E›`yÉa8(Úýb¯Ç±çù*3wèîŒ)ØßQ௡_“ ©Ý/öùªM2d)ÿ¦^ª|ÃÀS«ºEµgЍªqQÛëÕZñh@¡É008£s¹äç/YHÙ˜åþ8«sH%›Å~N¬UŠ­ÄG%¥iI«Js ùÜOíìq~ î×ïK\ïí)Ø_C¿&AxžoÅò¨ãF¼¬³±Gð¢@­·©º ‘W½—ÖrŽÃiØ’†’ufE¢r˜ÍÈ7CåJÉ÷ŽÇ\@CÒËÚ¸uLGœÒ)Ê´™Ô¥Œe¢¸ßç'™çû›¾<Û÷ÃPÀßTiè×$ôù¶'y•¬Èb.ëµá3}éªpÇ  –zI¨uåž²wÔ6&ÒµB—Uâ0`Nù8$¤jS›s…~ת×ã˜ëû ÀûøÍRÀß&Á5ôkDÆûiäæ—G¼¨¹›õÅÓáéÅÅÅßjõÍZ`Ö_¿üAÏ{˜Vµ~åfÝ.žÀ:]ùòò±å|€Û˜ë*1š±Ñ.׃…µ|§4Ë—'ú^Ÿf?ßáØ^D?þ>´6 ýš‘v?ÕÖÇË•1þðW¸ºÈ7‹ªuªvzõß²­½õ¿F­Šo´º­r>ñôÒ«(§Éii~ZÌ)h]¿è³”s;6ìß"kù.§ø¨­ñrìµa|ßÀÏ¿¾LC¿&AÒ<ßïÏ4ë£î_ìõ€>ß1–÷º3ϲ(óÜ7£rÿ3`ŸE‡Òôö8š‹)ÞâKXnÓtÏ<åÌháÛ)2 Îóý¼˜ëqÄý|™ù1ö•ð׸_“ãˆîóuó €1½•JgL0vQ~Ô.bõÞ±IÅ[1žäpxdÏ pèø(¯/0Y¾Uþ6Ž|E§`ÑÍMÙSèw÷ù²„}=ŽÞîÖøƒ6?†?3¦¡_“cH|øoã<ßǾ¼É+\=Ö;uÌ;Çjnëö"HUM9‹o%¹3´hQ«*’/`ÒBtQêHWK^Åà…rÞ„´¸Ÿï5·û¥¹ÇÜÏw N…~3þ©¡0 ýšCh®Ç qo^»ò,Yĉûm*«¥qqæfé³ÚNýÂÅÞ;AléëåP]ó0n ÕÊkeª½ö¼LÜÌkät¶’3ÚùDûùy”Ÿ?‚¿l7ôkr ‘¹ãó×ß½þ.ü‘Äó7Ï’ lV¶ÇÊærº­W> LÔêþ‚ørx³cÕð]¤R½úr‚Ôi¥óš0ôÙ}‘èS a€º¾ˆ ¦ ô ëûMGïóMðgÑ/Ð<Òr ýš>ßǯ¿›ÒŽ~YÂáLùó»™~Èk;{µÜVÚºQ|™rv tC!†`ÂS²_»C¯¨ >VSÚƒ·j†÷ÑIÉ‚âp-‚tÑ3žú|iÈËç§ã~îïeì{;àP˜¬EC¿&Aâ߸ߌ~Ū~as^ßOÍóG²˜É^T,1¤w/-"D-¼+¬œž¥•룖žgÑ£“&~ãøqè^ÕÖu€¬w.•%V¼ ‚å+»úB»ß1û|ípâ}8é­õù69Š(î7s!l` S=6ÏŸñ®†q¿ÜAöõP?8•¢jöÍÃßÇ|z×Ð+ë{Xr¿œ WÄå#¦Ôliƒä Þôaa-ïƒðJ‚k•åý±ôv¦õùž`¼_gáo°“ÝZŸo“#‰ìç¹ßÀ/íà•µÚæWsÏ6Û½Ïûµu§¸cÒ§¼Ÿ¯±Š×}¯\â Ülá––oó} ÃQ0½Æ`í}IuÖÕæ8¡ßµ¢çÿxìµãóvÇ&î ¼O/{ÕÚýšG`?ßÌý¦€ñ/|~x<[¾¡ póüÔÎá.r«»OïpNÿrÇC ,ìôo½{Ño#+}{÷)¬ ã¥^¶VŒT_!=WØ·°«‹Qís,ì´ÌØÍ ;â\¥×ããý’ÅàÏá}­Ý¯ÉÑ$öù¦5^÷£õ›¿ã ç´/ŸZÙžÖ÷€~_!?Æ<ôØ`‡]ŠÀƒ‰^ƒŒú•êžß •ÉC‹Yð@‘SÒjÎE Y±‰u äYãeÔÖÅELЊ¿¯Çx쵿JÜïm~9½uy_ëómr,‘=Ýr»_0†fþ7 t™d…+¡`†aPôÆãX]; ä[$x‚wLøã~s±2 Ëá’u™b=EEÊzåäÇZÁÓMéTx¯’SG”囸_šåvýã)Ûý¤‹Cñ;æ"W ýš¡>ß)÷ù墦ye{^ã%Ò+Þ9£n\j±4Ì÷ž×‡/pQïâĤj:ï9¢-˜ a_=íM¨b©=ä<íPœÖØ‹ø{Óÿì”Â/šëqœæ{}¢y¾wéÅ”¸žÃÿÒšÜX‹†~M‚PŸo—Ûý.ǵ¶il÷K{ºÁhçØ±À‹Ç„ÿÉ6÷Pë1L„ÕÜ ò¦TÅWÔÿ5EËî‹Í9T—Z­s»¾ÄLŸ³:ZCŒ%Xe´‡:I2ä¹,Q+å¯ñršv?à~ïkܯɑ„ÇûM™ûE£7þÄe^6i¼_ÞÕ(rÓH¯öA‡öA¹b7~º†.ÖÔ– p¶Û,Qa i°ùÌlÛäë‹ÓÒ7úYؾÒÚÐ¥ÿØ”¾¡Ýú|O4Ï÷Ó;Úìñ¾‹cì~ÛЯIXãEÆûÖ×%üËí~cœëP“ÚÖxÓHqçÛÒ†g´ÛcZn™vlëó¾h…_@Ä!nA[À­yðž·››Ra¦/Ðʼ=/+D{ÉQñ<›Î´×ܾ¤ëÝ,ƒSR2–ð¦y˜Ýk­wcúöû]—ÜïTãýJØË¼/-ÌøÁµhè×$ÈüðïV«—™ûM7±§7Œõ. ô¦œë‘¹0)Ùµ7cítÛã¼´KoÚ7^è× 1”BÜÃ\m¯h`Þ½æú/°“ù·e»_¹%0o$°˜áÚøÁ£¨yi³˜³6®½ö¿.öÁü"#¶.é­¤û|?ÇõýŽ?Ï×ýö]<}þ¡µhè×$ˆìë1½™ÑoŒ°áï&v@Ÿï#¬S‘û}©¸_¬d©6¹ûBmzx\öG»ìæÎã íÉ»ïæÝÄ×Ê%µã•lªêÞVë¤Ð&ÿSS`P¹Ö¼×ù&ç¯$8l éé×Îr¨µæÆeç‚q^³%²Ð<ÏW<_Ÿ†û}U¶ô)Þ÷ôÔ¯¡_“(4×c⹉ý…ÏÚý&šð‹ÕK·ûõTÝò"ZF8‚½ô³}É×â¡_ëß`#o;×R]HPí~Ò- à¸_Ëå™ ò~l k„âŽLÂ~ƒu)l\eÅ®×f~°íÓÐÉÕš/a„!“rg¼ß©ú|e-¿’÷ûú5I’½#÷{Öx p[üœ=ÞjZ˜oû1Àô‚½â~ñw`Ë­€Œ‡³D¥ (B! ·¼pè…ûá4¼M7Å$…ìU™;ÆHz¥x/ÊîJC/$bµæ<×uÉóž þŽ#*Ni÷ûœÑï4ÜFø §à}Aú5 "{º…^nF¿Ÿ†  ÌõHí~T¹m»_®fšá% é£Í7ã•+Ì÷zbTFîAkÁA¢už ÷ÂÄܯÇ(}7âQ!x¯ÓL=¬qÎamëõÞÈÕÜÓÉ¡Â*Øì]¥6µ>ߣÏó ¦ïŒuyªÛ)x_†~M‚pŸoï7ÑâV‘ðÍg?„5^l»ß:Îóõú|©o#s+ä~|eC}¬ùûÕœ/ÄØ±É¿Ôl[ãÃ<_Óî×C¤¢õtlT‡$ÿê¨èȨ™À C[е/¼eWÝòn턺LŠñ~§™ëñ<ï·w_Š÷ýÏ#©ðUC¿&IÒžn°¾_ìáÍ;uÑàa7sªTy8±Œ÷c~eF±ˆ¡)ã["£Jmryd ù‹1 Åi†HƒZ] k|¿¦Ø_:}¾kúσiN‚u¦‘ÙEÒ±±2thƒm â…­y%¿+`m]7^=)ÛûŠVH{­h÷;Ñ~¾_}ÅD/-iztÞ¤¡_“ Üç;…>ß6³ü?›xFãýt»_žç¹ßư“ 5…A¿'Z{¦Æzæë&TñÕYÑÿ§΃B$ÛÉÀIXeÀ=Ç¢¹n­ßAyo‹+kO™^ѽȊVl÷Ë}¾ŸŸn®GB¿x‡ŽÚÞGÒЯI4Þ/s¿´‰Ûs½§Û³Is¿ušè–Wy©N§¨Õà%¼@6_68¥% Ý)<€x‡Áy¯:aoá”­áñYO-àr€H žuUùéM ú<´ÝÑr¿ë“õù& x÷4­äwtÞ¤¡_“ ™û½ í~Ïfyô äQüäµc»o¸ìT2ZÊ¥Ç/¿5ŒO¡z÷öZ®µÃ0˜i —¢¦Gp¾£^ÊÄAç5[¼ìø2iG_¤”†za&¶Øëð‡HaMK„ä“Ú W'èóÍ’Mß!¿#'ýUC¿&I`mç4±—ú=RßGÜÛ¨à~ öT”ëŒx :ºU•~‡¾ ªDjï¥q zí©*–r( X¾×ƒû9ö5ôk’„¹¬éG{öMfO7œºXé óÏVà%èÑ8©cÙƒ>«*·7¸Ë'õiókÍÍâ´¸=®k™_%ûšù©(Mÿ‘jñrý£²|i¼ßqû|‚4ôk$>a®ÇŸÿüçÿ ùCòç‹?˜=Ý.^JHÚg Ö¼º&s%2Ç2•ÈI¹±6&*ÐS,=à¢î¦P¢’j:ÖÝËêÆ9òÓ2ÑèȆ –xùütãý†4ôkÚýþkzâÉ_nh?ߊfáÁ3*Afë<{v›x(ºÔù¥.?>/su  ë‰Y¤®ý\ª[ÁU‡.((ëû1ñ»¶í~Çèó½üÐ ¼‹4ôkÚýþüäOŽüù/±'dâý|5Ë**ÞAXQ­²V¸?%?:©u¿&À2U”tÉ«›¦]°ÄàtQ-S_Å:Gc?Ò“¯í|uˆ§ÿûCk‘¥¡_“ Èýžüéòoÿõéõ¨Õs]ÿ´á…ÀÖï ëÌ'½Š¢rÕuÁKK‰5ÃT‚º ¾+sr[ý” ;^]«Où 0Ѩ!ŒÔëqý¹ ß1û|¿}ý|iè×$Hæ~¯÷sÐ/p¿.-ò\ÖJ–k­w¨BØOÍt5µ~qK¹.Ór­}y`z&Ú½ÌÕ÷ç–¸Ãþ6æì”ãý.¯®®h»ŒÿWá,œ^¥ŸpÂ÷erº¤KBú5 Rr¿áÈwD¿´ÜïçW_C‚jÓ–Œ¸ƒ<–ž^TœÔY°+œ l: Û쬢‘³¢ž½zî¼XâI@?î÷}¿Ç›ç/£_üÏØ'?ôO‡—Ùד†~M‚ _`»Ÿ‹~¼ÜÚ0=bãÔO¯"–dƲ¬j¶ÆjŸÒ]–aè‹Ii A 7Üö¸~8¥3àl8T3¡qkáòznzR-kÌÜ“Øî÷ã)¸ßUþÂß|¬.©+Ønè×$Èðd¤µ…û}¿h÷›ô¾î®>kíÜQNÀµ…–zEwªî7ޏ¾ß0èý<œ^Œö­@þ­³SÁJúhH+ü¥ý|]|D«V±Ñ³ótª-â»ÀÖ{ÞDVÊŸ"]q^Ûy¶yiÈó‘Æû¥‘.{ÐOôú5ùð’þïuŸ/¿Ôë1Åv¿>¯ïrww7Ø–õýÖy³#A6…{fj¿>kMÆå†¸s¬ `q¢˜µŽK…´_?†bO£%Їï ÈJ½¼Bn$N”²ÊÁ‘Çûq?GèÍýJ£Ÿîì¸Ò¾?¤4ôk$>ü;èó†Oø/÷ùvjO7ÁÞ*õj ÂôGµjƒ¸÷x•jÃK¯ÞÑm©ƒØ$ãm–F$ºsyýÄJpª»˜7ëe˜h¿6Eà„ƒ Këû}Ø>ß««+µÂðMí}ò#‡L( ýšI}¾Àý>Dúý;õz<~DuÑ/šÀ‰"Lx«¾•¸¼nÖÊímë™'g©¦óž#ƒò`@àPéIx/ÍÙ%ý½„«òsèïR$›Ôçû9ýw¼_MŽ5¶¹”†~M‚ £á~Žå[ìç›àoÈ(x7 ºÂ RÙÝ&¬ˆ # t¸oå_'F*Ëîst ¶tiïcö‚6õtAÐÉ»|o*Þ|*)YÀÁàÀùJ\fQãýN1Ï·”Ó_C¿&Q¤ÏW÷Sí~v¦Û°áïŽÇ¿¤Å’mÕ“+QøÎZ2|STüDNa«õ%Ã㡌«Æõ꺺>tdHÓ6ìfA‰2å-_3Ï÷ÇÓs¿†~MN,Üî7é¹€~±Ë7÷£º•»}ÿ(ðGô¶l‹ÇkÙÛ2oÖ籂zç·`Ê¡þ¤‚W0“”x«·Û$g­ mÒÁûÏå=è”Rf9BxM¸~WPCq¬ãý¡t×)£}¡S»ß5ýýýtûù>iè×$ˆËý†’ûÁú~=‘¿?þñDÿ¨…MmÎË»÷ÆÝÌq‹ß îä óF¤/lÙV€@*Šûq|ëÔdyO_Ú\]mã‹9ŠÇ® û\Ö˶DKúÖ:@-fì,ÇØÅyËÎ﮵é{²ý|‚4ôkÄëñ  ß¿Çõý&œëÉU¿?<ø9^Hœ0Cíf¾&r5ÈïQ^‚ž«uh™+‰ûý–¸Ûë‚€ËkÒ‚ Ý!QÁ À2¥ŠÓÒE¶íI½¥ÑãˆûTˆâ¯ïѯq¿&©Ð\i¬v©×ƒ¹ S¿Ø»š-ßh\ÆšiÒ&¢_š>vò&wÏ%\Ìþs6Í{~¥¶WúŠÌïÛb:žb¢ÌÿÄÄE3…£–È”£0ºÇ/äW »/tõòê _aûØkï½:£ñ~2è%¶ûM'ìó=¡4ôk¸_uÄKÞÏW¯rØŸ´úQ¯¯² ýؼ%ÛÈW6;«â3%#B»‚b1+¶•Å6¿Ô’¹À±ªè¦Ú2ɹ¯®îüîR 1:Eá^Ãý¦ËilܯÉÇ)±Ýïö,÷züÛ¿ýÛÿgþyÄËj÷ë³yx'ØÇ8#}=­1k„Q ¶ÞZœÉçîÒyv„±~ÐçË>”Þƒbýé*ê‰_Oç¡ ¬•:Ø~Ý*ÂiîÖç°= ©!…½;HÆM-Ýkùþxþ­Ï·ÉÇ-Ðçû_Oþüï.…Ö÷{óZÐ"ôñˆ?°1¼4Nñ&áŸ:‘0®§…)g€Ã©ðf£¶høÚ>_±|{dy¬ê $/ÌQí”2âÅ…e£_Ñ/™óÌ× :²£í7)c­EÈ?3÷»æIny¦[k÷kòq ÷ùNãŸÿâK—gº¡å{7 €}0¡¶ºÝ÷PÝšq¡eßo=ƒ4\þ•çù&cëœMª·gvQxêÖI9™p(k™ åâéåÓÄ}æ1cšApžïµX¾7­Ï·ÉÇ+ÃwÑðù^v/×ÒÅíÌ;@¿hÞÝÉ4·¸³ùb½ŒAL¶0¹È©Þ “]þ6ó?i ‹Ù]˜ ¥;¸ÒRUÎÍ×bÛ®qo9ìKgˆÃKx]ïómãýš|¼Bó|§±†µûÁ®Fy” aß…Wñc«”Ølb„ö<48Ç,Z\ÂIQÓ£~oy¼ËÒzó5“S …˜í>ÙÃΜËDZP>,Q[0ªdúÚ®FÓëùµ6Œ±é£¡_“O Ýorð/ºÍuDY¾›õ߆‹´vFy¾?låùãçoòžnÿý )Æ z üJŒY¬Ëµ/m¿¹–/¤Þ+Jg½nÖO³=îâðž•IEÃÂcãKûÛI«D^ß!ÇÐ×£-cªgáý|iÔß±Öv~ÒЯIà~_»ò,q@5×cà/¢ÿ}1V IDATŸ©lnmu§zÕjý>/Kl‘Tû[¤¤C_nÌû'cØÞqÛx1€Å,M}U)n¥ŒU˜’Ð Äv?èõèZ»_“Wû½~ý]ùyó,5üÉx?¡ÂûzeÜyP㘄°j°‰ƒa*JQ°Ïóeâ)É1ý”.ê¸!®2ød:)/&¾¬åúFõùþ(í~c°|[Ÿo“TòÚÎ/gz÷øõwaõ7nž?Ë»=6»™;uuo+VÁXç io%ŒÙx5¿:ȧ« ¸h6û³¤Î!+¹Ã¥þ åTl%=Î{ºüSîõhs=š|¬2<á>ßýÒ”^þK”oLí~ožÁœ*Mõñ{ªŽVqhÙŠ,ÍÃ=¼ÌGE×`®xµ>=Í{}UíòQ6$‡.ûÜ øF}ÿÜUßöù^ç^17}4ôkòñ Ìó-ß Á/~fî—`PÖ÷qÐPq·J uêºe>‹˜¤Bêhð0¨©“©›¾©§yÜmŠD<”_LO»ziiÀ,J§L”Ž6•òËí~a3ßk´|»ÜôÑЯÉÇ'°§[à~ö·<Ä9R¾.÷‹ëû•Öà>Y´pÕÑF»[¢„•zª¤PoÏjœÊMøàd¬5ZÇv]ë²,ª±·¹)OŠõý"úu±Ý¯õù6ù8%?ü©×ã»)‘ÐÔM´¤sžëñ\÷ùnÊJW5ɸÆ/¥>¿qÄÂJ_ ŠN)S¢þZë|û´ØUîX¬f…xŸ"­keÀC\LY—íõ\Ïy´sæ~­Ý¯ÉÇ(ùáÏÜ/áÞ'@å­ÜB¯­ïW1k˺ç0)§Ú–¹øé™°û¢^¾Ü;­t¾BóÜ­{Ë4e“6µª³”†™u²)ÄR–<3Ûi÷Ëï¡Ï÷ÔÜïè‰7ôk$=ü»<â%¶‚O‰rWojÌ}¾Ec©4_ÀTì²’"šÆµ"XÙ¸e¬fߺõ¯x)˜¨G}i½…‚ò•tXø58Ú»å§ãÐéEô»þÑŽ÷À\aøÝ±Soè×$Hxøw‘ûM™û%Ôò,·`ù⾺¦-¶6¹§·äB–zßó‘½¼ šJYɦ¦H"Úkø ¸„3{ÉТýöH ¸‘å+­©Ýïäs=†¡û]79ù†~M‚dî÷*[¾¡6DØ&ZÒù‘Ý×£bù‚óR/¦SÇ+¢Ó)€KÓ=ãv‡ÍÕ}oï޵]«h­ýØ¥\K¾ª”·ÊÁxúv¿™÷½ýÝ0üKC¿&'<ØõlŠÜ/¶ø¹×ƒ¶óÈožIƒVQåÊŠ·DŠ ~÷ˆRË+tRUhë®' [„é _•-‰ªÀöÒ5Oéúú uÞZ4uxŒÿÎÄš›žßç›ÚýÆSÍõ¼ïí €ÿrlÓ·¡_“ Üîçù&£w–ù+Op ÜÏîëѯ]øéÕE¬‡™j Ô&{¥p®úW¸¦AÎCïRɾz­·@£!Š C:Û¼õÞ%µê§o§JÓÙòý1vxÄe^®q®Ç©¸ñ¾ü÷kr ‘>ß)xIëYŒôïæ~ŸUÍĪevIY:(^e+²ÇŠëØ]8¹Ç@j¼´×§Ò×¾Z6¥X©R*=òÅê«f ‰"fËW ôùž¤ÝOxß¿4î×ä4ÂãýR»_ìëæz8Z·!+x˜z wE`¼Ïõ8á¾Èû÷kr"‘ý|S»_jïËS>Rs_Zô4÷z(Ö”D¯°äUF¾ Ëzõú—ø–ŸŽjP,âó¢(‰Õ"—ÃT*ÌEÇ…ØhíõŸUÅ~Æâ¦²¨¬í<ždÍû÷kr"Ék¼P»_žß 0µüÙñ~ní+àã`6c³x ŒqXN—XPĘ2i…ö+ꢞB¨ È.r|ú\sÏÒ€¼§¢ßw'Yã¥à}Cã~MN"q_Û3™é–†û‘Lè—Çû9ì®zV2U»ËpŽ-XAQ§Ì.Â>­ò©zľùº´=¹Â.whö/ ô¢vF/. Ðç~'˜ëayß;·ñ~MN!ªÏ÷»)í^™8˜ò¢¦4Ó푪aUãUcÅÎ4JÔöý>|Aèµ…£Ò t®:á‘OVŒS7h‘ÄÂÆž(Ë£‡zøß¸>LH_“,©Ý/õöþýs»ŸïñÖx)xß×Cü=RúIú5 bæz÷KÔ/md™VúËk;<еðÖÿ„]#’ àÕŒQx¶Ô?Tjrð^zY‚¸Ø Ml’ »?é%½\oÅ,fgO·kÚÓí¸}¾¡3 xßÅ×_ĤÂW ýš$Qûz|÷Ãf3ÿÍÿôÙlÞ<â/e][mù*Àáš[%ru£ÔâHš€ZÖ« VÕ r±æÁ‘]ƒ˦Xµ÷ªPb×vþ÷t;b»ßlæ"ï›?ß †GR¢¡_“(±Ñ{—¹_ÜÃ-~=üœŽãÚÎ7q®‡ Gs,;®Ãq±"TqU›É\Ã-ó: ½öÀUÉ)«f³ñÚq2K»xúê`)ú¡÷ØÔ&©Ûý~„ÕMƒå;Þ³Ýo¸÷%îw'€x-ú5 ‚ÜïY’GÏDÂñÌüºi²{º©ªº°¸½œÚ–¼úlà%²ã$â¦Vàîä¦P[_.üðã²UmJoJg UaÂp¹ð¡Ü|â©Ýéïéöä˜k¼÷¾&ð›¹ß }9Š" ýšI†ÏË3ZÌ>õvðNæiUû w3§jå—Y¾¥ÊRz ´_»=£o —pSY/ZyÚujéą̊Q,Îç¬òRnq¼z ,ýŽ'ižï¶Ýïès=ˆû1óû¹ß±Fþ5ôk$=ü¡ÏwʇÀGˆØÑŽ–~]î×Rçüšiå5yi‚™sɤiê¾U¯âÓÓ²QÕÒ®XÖ  Z0Kù¥t3á©\έ©ÏõÈs}÷>Ïw÷;ÎÈ¿†~M‚ð<߉ pO¸`â~z}?©q‹Vä!SÕå ÷r—qTq/aÀME;Š \=©óE¥šÇvk„·x“”hZºMöèUŸ/­nÚ¸_“[d¼Àr¿pƾlž×W9pk1ÚAÀ\¯-u\«½þZCuߦ2,ùßkV–˜WdŒN÷§êáݾE) ¡*™è÷¹í<ž`Ëý¾iܯÉÉ$ìç»KÜoó¢~¡‹È_æ~ož™*fë¯[q=©¨%*T&Ý¿‰Âˆ¹ÈÃz¥kØewt!$*tá¿%"åëÄ(~y¦§¹ã‘çùÜ/ŒÿkܯÉIdø‚÷óUÆ/šÁiÊÛóg.¶xpÓ§…©Wк²ÎW К KK–Ä’Ò -U=(KtãµlûÚaª/,‰o%}ëÌÇjO·‡Ãý†áíи_“ ­íœ¦xt`úÞÀ¾æ²¯G­FÛÚºÄÂö‰K±d öøuPœÕ=‚HU­RqÏ=œp f÷îŒç} Ûý>§±Î¢ÏwîæOã~MN$±Ýïel÷KËšv-j?‘á›öóõÇûQ sƺԫ¶Yj¯éfØÐfm§—ð{vs~*Y02ÇžïÚ›…ÕƒÒÞ‹Å~Þ¼0…[à~×Gdî7†e.NÀýfÞw÷¶q¿&§á~î&^ßEwp»ŸeN‚µ¥E Ññ,L§Ú*ZU«å±IXNZØ·“JïxG²÷ÞÎSÑ7NQŒ·e¿1éI îó½Ë—ÚýNÂýfÞ7ƒ_ã~MN(2×#÷ñvy—‘) q¿gûë>V½Z¯„+IUÅ_¯½—m)J„‡hªSQ|Õå~pÉ@Ôƒ@·_:Uí~× Ýïm¿·aÕƒÆýšœFòG¹ÝÖw™r×öù: Ô¹ìÊ«´K³/¬ã»0-AAÜ ÍF³(=Û²¯ûð#(Á°†yŽim ¡§q:(—°váTîꦧl÷Ëð7lܯÉI„öõ 6?îýPÜ÷óÝx5kY ûŽO6E}-¡ec*xYÿkiªpÚ„,Y¦MƒNö-jµ—¯º9:X¼|{%囿h:gîøO§å~ÉðáoÿG^幡_“ ²¯GXÝùñó7ô??óæñÿ›§{èñ~€iv†Vçå¬U&œéë¢q£RЉbì6˜ÔÚÈ&S.´ºà¨ÏôÂ7."©¨)×å,_åÅŠÏ¡=|Lí~vž/·ûíŽßçKð¸ßÛ´àiønè×äh"ûzLqg+ϨóÚýÞÅ õý{¦ë>;õÐ4 úy`Œ˜Öùj¯<©_bºeâî ÅY¡ËÒÝ(ŒdYßïó¿_ÿøÚý¾øcþ׸_“£J˜ë÷õˆÜïµjó›?ÏŸ1÷“ñ~¦rY\Y5CÓüšlª³cøöÆ+0*ë\ÁÔ2õÊØ{J/SÊ%æW/GÏöµîºTK£åëïévÒñ~™ÿ5î×䨂}¾Óó×<Ì%<FG?<×ãý¼Ú_âÖB5.ÈÙ¦7u¾¶ÀäªäÒ²M‰->³n¤®†°ý y`–¼ù“ñÏz´sø=ý/i¼Ÿð¿¡õù69ªHŸïŒxo^«nÞùïù?Щ´û™ZÖ;n>â,4j¹!è¦\Ù#Cc(ºœ—Zú}jƒK—zÎt9Ö^5–½VY.I?ý°×—çzŒ§›ç ^îþ¸ZŸo“£ ®ï¸ß˜»~ó€¿ÇyW¼¯GÁ\lí­WB>vm´jòX%p6Þ_õ4ÀѼEV¥0©ðéðý[)v&êÁÙ¥•N²ò#ãý®óä~cwBî÷Í a®Gâû59¶Àú~cj÷ëxeƒÐòŒF½Ðú~¦ÖU] oUãm)—ØŒsÝWÈâlo.z†®ƒÍî¹±KŒî¯ÒÂèQ9kŸŽ.µûb_!.ngúiøKã~MŽ-ÔçÁîÍëQuß<o&ï·X½ÊÚ¯ËÆ)1Å[Ô@Àå[6Ýú(ë"^ŸQ¹’ƒªšUà¯ËÁ¤xA3±™æù^úîÚýnOÆýbOG˜ë×ziܯÉqexÂ{ºEî×Mj¥¿ÙòÍ+=Çv?ƒŒ}1 £àž9» ËÚ]¶ÖíE˜e‹Óa{Öcá‘ÚÍŸK}“·<½Ž Ç#3+Yq>Ò{»ŸïçÂýºÐîw¢>ßo"üÝñ~¾m®G“#‹éó¦gƒH´|óò?˜ý|ý) •Ú^^, @߯ FZ¡§i”÷‚¡‹»ë›Ÿæ":zi¢Ôv—»‡ì å­ï7p?ß!ßü¹dš[ã~MŽ)<×#½73x6„io?~3 ³-ül2í~ûÖº[—à´68S‚Xuƒá?UsÏrÁÊR§%8/رfÅÞl~ì|ˆ-q:T³BhËh{ï’ÑT¹QÂÇ8Ï÷šû|»©;ÝÚÎ~ƒ‚¿†~MŽ&ÌýÊYî7ÍܯÃy¾U£=¸óœ€„‰f¦ûqeÁß³ ®bÊÕµ`‹FKÀàwM¦fX«„¡h "öf@¢Õ·Ê<£kâ~Ÿ'³WæzLS^âìTÜ/îß‹ØÐ¯ÉÑ$r¿[h÷›¹ßãÇŸÏÿÁò¹_ÞßÈÌóÍ¢ÇÚQ£Tyê©5hðØ^Y´wñËÌÍE?Z°hUò}Õ_Õü5ì1­ Ùë¹ÐÏ*™Ûý®µå›÷õ8E»_jõKØ¿÷krl‘ñ~i¦ÛÌýh?ËÀýž?K«ý™ÝÌ—+¦æG%Æø ¡ÜKht¨Ny¸HÇÞU ±t “s—MØŸ&ä”Ѳ“ãÇ‹?¬íœû=`žïíi¸_†½‹oˆ6î×䨢öóMÜ-ßÈý"ù‹í~†=åÓú6¼ËÒ;Xa›Ø:Wtð%ûS³/g¹¾¼`ãX;µ$™;Ãxtž œ/ûâàÖjWºòú~f¸ó‰çùä}sñÍ,ñ$`C¿&GYßo¹0ÞïÙ›`õ>~üæñ›!Ìó¥ŽöŽ÷ë x(PŸ –°¶^>–×Ç+RpmÖ 2*8´!š:_ôƒ¹®QWG‡<.yÞ#žOå¶qú|ÿ)X¾ãxªv?â}ß<ýæ›·ß$#8›Á\ú5 ’æù¾<‹÷üõ4>{L;™?¦v?µ¯GiøVÁ½—Óñ0s}”ôœ\LuoÑ ÝßeR¸@Ó£[À´ Ë&KåÙËo_–lø.æzäõýNÃý„÷]$î'ðwiè×$ˆ¬ï—W¸zöœv4z í~Åx?]ù4ZùUÕ“¥D­³±º‹Ð®5i1‚µCKí7¶2Ÿ‡à´¾¤È£á¡~#c©&ѽ›¨èv?îóÍk¼ìŽÊýÈÌEð;&ö5ôk’$Îõv¿q|öæY–Ìý2Ü<~V®oÔSÐh*þZጮ¶{èZŠí° lZm‰‡X˜5Š»ÑלåýTûmcÈK/„’2È(N‘û…m|?Ws=ŽÞçÚöä0€ßÿâf¿ãIC¿&AÒßú|»Øçû¼Ëûºq»_ílû|ûµ[?‰ŠØjëWü ‰ëÍá!U¦á@AÅ;úê5’ôözõ Àišò Ⱦ#kªí *^Íõ¸6ó|Úîgž¾€GǾ†~M’Ãg·Jãý¦Ç¯»éÑ›°ÄAû,ãý"ú=*«Øru-àÀ%i•jìØr¸‰™SgX³§-÷ÄCŸg¹¸¢õ-9«#Õ«½Ñ¶ò*A õâ²J”~j{º…¹ãí¹_ñûúÝK†&MþÏŸJ§S×®#JC¿{ÈðÝ“úç7«³…«ß=чÚ!}¾8Áßt¸|1Ý„¿/n¦›iþûâ‹ñ‹|þÅõg¾<Åkùÿ‹›àÉRcŠœN§ä4GÂI„ Á)F1Å91}‘ô‹a²v7I]ô9Iª{ð™|ÍQ“æ’(NgÓMNzV&C¼ÒL>¹„$þJù$­çˆr¹Ž)\Œ`ÌÑ„X³Ú71ç_paJ,cÎ| ž.êôæü|±:S÷r´w÷tìïÒÐï2<ùçÝ´ ÿãüýŽæïd>®ÆÊçŸÍñ?¯ÄoŒµòÃ}¦ø?Á¯ûÙâõQï ™¯ŽÆÒö¯z1Xϗ΋¯×R8­a-t-u¿,k!–?~–îרBYýÃÙY@?íºÅØ~nËß%å﯊ãûÆ|uÅWï'Ò†~÷86Jd·Ò'gqÞIJ+B›³ ·ð»Ûòi]¶Ñïö H¿Px:Èç½Ä‰ùþ‰yåJÈÔb‡eù 5—ŸÎŸÝòwÅ_ùû«âø°8¬[p¼¤ƒ|ï©' ýî!ÃOž¾ÝÙè^Mòàà å6üݦŒÄŸóù`»3õêÏoW ÈN¾Á¼;‘ØCˆñVÿ¹q•Žu}mhºXêZ¦y(B°“üvó- u/ÍÒí¶<²E@zÈÓ ŠÝ¦Û¼úù½¾‘®ÅõÝâ0rI® ™{¨§¥¡ß=dˆ&Âêìölw¶ŠŸü—.úêm>ºe¿·ù\ÇpÌÏ.hór>z•ÿéølõ=¸œéß[Ôö•9n9Ÿ/WòÿŠ}½Jg·©$^r‰HÚ¯T|¯¨ô’; ÅßRÂ)æ˜/ŽëVù}_ÝæPt´Ž;Ñã6û¥”ò/ç KâóhJ?ý?ù?å›îÅÙŽó&šašR&t´ƒ»x{F¹ n\Bê>æã÷°ÂŸA¿««Kq½—Ëè+û¼RH}do-þÚãûIC¿{H^#=ŽøvÙmuvëükÔ~1üq?R n¾·Õ“¯¿D»P¥Ruýž}½*|axÁ¡ÈÏKð—çøë&Öò>D Q~Q—Ý+Ô„µxÅ0”R.c5écYeÐùžž ÑÃCÌt%ä«VÞ ê\¾’4³_‡Í·Äb´ ;ö>FüEzFV*S´+þ¹üJòê ¯`%·»ú™Ö´+ ýî!4'²I“ÿƒ$Y4ï ý¿â´ [3ª˜)–«Ä>ø5ô» Ó“8'ò‰-÷@S'£ùLpÄžyë´©p$åòfF&'ìÃ䀂L*ïx`rD•«ãd‚“I’‡R†ª,'Ú€3IP̆ÖÕÃôXÔ^%…QI:’]N6ç¨ANGŒýš"¶.JS‰”r?ïgg+D»««„Tuô»Oƒ~Œ”èççIC¿{͉œìƒü=îڀÖ†bœöóîƒ4$gvÀGm¸Œv÷ÊÁìbÇ"üaƒ]üá(KCJj÷l¬ÄV;ÒÏÍ!C†êy¨¹Ž….óãéçåýììq Åš³Wüâÿ'äÝÆP?'šŸ) ýî!é…¤2tàìÀ/‰|à*M\9kOgeDÂÙû™éKýñ›Ü +×´¢Pà ^ðz|߯~÷‘áIj÷‹X³uËC¸–¼_¾è‘•-GAºZB[úC—}ã½È=Ù?[8>,×j€ü¼‹jeQ‰ø·;s^Á1Ä.÷Ó-~áÂÙûYå%áÓ'|¬{6°Aœ>q _Ý Ì_áÿ“÷dø6ô»¤-€^îgëÃm\&Ê<æù çùwvŠÏñ0lwÉ1]˜Ï‚ƒæÄ8Ò1îÿT„þ•4à,ktž2Iõu—ÿõà¼X"*´ is†Ïq•½ÍCã ÷J)øÏƒàBB©¼ÂP59âAä¬ô.þmw&F‹ òê–Æ¿Ýf­(ržN·+PÆæIžÜÊ`ÏüÜœ—‰ßJbåMÛ®8;x=g3õrœLê± ÒÓ9ßá<»Ã6<µï«ÝO¾3NeÄÁ- ¯4¥Þà¢Ëã úP¨Ï7š ñ©:ç9¾]Gy3ÔÑÁÏvÛô¾Mß«ƒ»’žðeB#q¦ÿ{J Êqí9æ4Þ’[1œ;Õ¾vÉÙ9_-0ÅO¥|¾ÎþÏ«‡èí;Cìä„ûÁmŠ3‘ÂS;Üòˆôm¼Ý»³Ðç{Ä}‚4ô»‡Ð[2¬†kjÁüŸ¸â6q«*[Fœm™sºÑlã÷ìÈr!láò»§ )Žóá9üm³ž;¥LJ3¹ c苤¬½¢ÜŽ}-áÊ É’Û¹¨šKŠ´ŽZmÝ(uÊ=Á‰§‘Ov ”V-Û•òH“kô1q^hb$€Ü8Rœ;T$?éÊ(ž†³ïß÷ûEIC¿{õŽUÚ÷Î2'¤'5c×6AŽð­øÊM5 ãà0ã™äƒÆ`Ûø“=ct.iC¢Ça†ÇÁéI e•H²x«TÂs6 ÙÔ{W0ˆx/‚2lñ˜ÑZÓ0K ·ÌUÊè¾³Q?¯ëL@¸ÅæÈj©8Äô†è¾'îwn¼îb«ôv»ù~ïÒË|üùí~÷”4ìÅÌïpÜÞ¯4ô»‡PïØ”Û{¤:|ŸÙ^µŒz»„v»|>ŠÆ5>LÕ.œÐ[ÏÚze,›Š¾Á£tË4âZ¹¼j§k˜­ƒP «yô¬RjÏâË&2“t{ÕØUZŸË9Ä€6h&t›}Œ<·Q™Æ€ü|˜p[`¢©5<.õÏl‹ƒTP[&x¬íz£¯€ûQžÂý~_í~¿(ièwáñ~£í<‹ès6MÔ-G„)=l;b~[iLÚÊù6’F‰aßÔ¡™Œè¢~l9½èûœâP(¨š#Ëš &pYÉdªÇ A‘UK¥ß.7çI­?·AUú»R§­É¶N ”7`[,Ý·úx«VçÙÉ5 ’ ŽÑËV$Ù¯w[]ù—. X¬û|wÔ¸n9y‹}¾ó$a¸Ýl÷ûEIC¿{íÞ•bj&¤ã·+õîQ[›P?~"¹Ë·]±1›ZF6ÃöVŒZéwÇDÍæÄ3TnUPÅ 31Üæ/ˆ-w7&Ç-Ò)Á<ªÜP5›Qƒº­Ž¡-‡S‹¡Q›ý'v¶åׇàki¦ž«È·+£¡X€ [¥ÎnUøAߎîøZA Á;µn±ØXõþ–|I¶É©(Rá~ùݘC«v¿€¸_²hN]»Ž( ýî!±…äUà~aèÀ-?š»øœíT»ßŽQ,[¥Øì‡¦´Ù ŒS6‚xF¶30ÆInÕ±‡uš rp ~”% {++PAU;™ªè»_;‰UpÓºåzŽAá4œ ®s …Â[Š˜{ v¢íÖm¤b[6•!²‹·r¨Šý¼(%µ®—•¸ž¯ öyQ©^—-ºpóKÜ2 ì!¶JÏ…Î.õʽ§ñ~¿(ièw>ßÂòòƒ'¦B½¢bùqgR—ø[€#âƒçP°âpAhï“Ú³cûLÕ;&Šx°%Ó(x»(e*ÅÛVÀƒ®›Z|.Άf~Ù@ÞWv.[ ¶2_Ü:¨­Ú:HéV®K/{ÛÚ‹«ÒTß2ÜîxŒ¢)®|u×£ñ¾AW4±=™#Ü/?¼h5÷“×jêó½mܯÉžH»_|º.Õ¸ù³i‚Á Œ%[éQPÍk+nÏSf­i&ÄðÐRG'[òS•ƒÄŪ54& rõ*,HU …ï ,ÍPž=I×LäVh•® ¥a†e¡Œ=æ‡ç+fá KIÂ*m|%C¦<¸[11„ðÊBõê–c3zì¶ÖQ¼%½ÕAøòVÙþ ä¶9Ji NÑ2ÙJ³Ë*?§íó=4ô»‡Ð[rtÙÉÙ÷>ÃÒŠ¶ÊÍzlªŠ–÷ IDATao—/Ö,÷y$`R x£DhêÅJ‡ÒÈÃÝJ<‘*–(Šd0š@Îs«ÕV!ÝJÕ¹SN–¹`;#»ì<\Ù*Y!1S¢1”m^è•Ø&bu®‘nË´Ù´6Zõ‰O¦p¬¡?(¥¤ÂpŠ:OWÙª<«\‘îØßk2ºÚ½z2Y÷x—ÒÓ¹£ñž1û±¹æŒZ³O]»Ž( ýî!j®Gz_ßò3¹Ã´½çÄxvÐ%èñ.•ÆÝÒ”®Ëë§£ÙÉÿvE3Ð PŽ¥!nkÎmï&æp«ÜMDc žÔ_‡ã­hàs„MMHûR3RQq¨€DØLüPPŽr:)Ðî|¥Ê‰Žä~KJÎD `Ì\¥¥ƒþÎÎ&¤ @ó\`¨éíÛ¸_“ƒ$®ñ²“5^t›;Ïó¥g}—IP~«Ãƒ| u…&'HÅØa]ÇŽÀB¡Û¢B ëVñ sHQx6-“;Ó%–¦äiWj“"È5ZR†ÍÛRI©×ƒb”[!Z[*ë‚~ŠèÃRUAEß&‡ ®ñB'Svz ©‡€º1mg/GNçñÏÄ¢ç|Ç—…ÌdÙ²û¶hÈKó]S/+g§¨…ªµEUD"4[­(sj“Ò9;·° mµÏ¹ h¶Å€tpYÙmE'hUD.˶üS+¬LLƒsÃÜÒð÷s@iž¿"¥PŠaÖÞ|c¤çy¾¥_Zã…_)ÛÜbÒú|›$Øç»ˆIæl|»2eRÏ:<†Ö ¬×*Š}Å)hî–§U°±åŲÐ?HcçÊtm/&À`19–ê¡ ºóϘBÙ$äÇ+ñ"ˆ¤)øŠ^#À›53Ý•Î-Ð?—Í _ñ–†¢§’ÓzIGçg*eúÆ-MÊ9 mŸö­¥›äæûèA9¿Õqξ¶”²ÞIøåÊn6É[FrnõNïVJçät%ZO!vZÛ3ÞM÷S“2…[NÒ]ä´¥ôD òM:¼T¡`åÛR]ÿ²¿0>uäF¡¢¾g“**Çù3b¹ËÆ¡aWëóm²W†ù! oÉù…©äûü»‹ß/Ãù÷á—.=c//éà{†ÇEœÅÙ÷g‡ŽÅFöŽ% 턱Zä\¨o­DMc›Î÷Ž''9Hã ¸¹\]϶ԕŸïãï}_’>}YøôξwóXhì¸8eò²e¢è©•ØžÅïÀýÎÚx¿&{dˆOK9É­I“_°L0ú5Y”aœe~…vc)è·€}OÒQŒúX’›Ìo飌® â:¸QøñškKžŠ«]vYtPÌñ²äbé.LêØõ9æ´Sút¥†“ñØUõŸF)…Ú­S¥´PtéÛ9†ý|ƒß†~Me~N¢‘€õ«ó ¤ +\Í&9™ÐCÂeŸOÏ—_—ëè†IO!ß÷z5Æ÷æ(;-]ÄK:¿EÑc¾är>i{å]^“M·¢“¹Ú=ìë1KC¿&‹’{ÇÎÔÔñ£5©'wâÊãÖø½Ô£F<µ— ç€<Þ_@#­Ü»Dú~Hõr,~ÑÕ }Øh&u£ë·<…³¸f¦]íbh ¦äÐú|›"ydÔY‡n_u4OòB±?Tîõãtƒõã݉Ý^Õråºñ®Ý 7>ݺI•2ÙTac7n­ø´?{µÊB(.öYÏ:ü)øˆ>k~5舷R5Dªnÿ#µ'Ûu\4A“îS›çÛä¾x2¿%_žég_ÊûåfJÿåÙÍ$O.¿íé±½™èy—ôª˜Æ•å j—"o¤þ§äLŽ(z é—CMòé0 . NÕ͘—‰r8†ËSÂÈœ¸R‰Uè¤O1Ž rªŠŠò’¾ ]·ì¡ÄÔýIJ3¹ÌÚv“ŠXùfµ§‘}w*Ìå4 œۛܨm2¬dWÅ㉠ZëÞ¸_“C$´`»Ÿáò°F vc>õ¨G“°È™ù˜‰ðs¼SÑP<“AÅImÚ1½•8ßPÉüÉÉÖ£Ìè3_¾¡z‰™ÀâÐÎÑa²%¦SÍ—b˜ø"eY'ŒFex!$XsÌG‚Мïc.;R@e¨ã¨8B"°ò PÑÊ·gùKé©(?õÆ %`ºW;Ýp:Ð&5#m›ëÑäáv? £yŸ:M‰ÔÓ.U2=‘7ü 뇞QàtÐÊÔ1caXÕšIÊ)à•2Ä:1R£['šM¹~aE¶1‰“Ñ †Ð¤’R’ R˜&’:GlbÃðåÅ4‡M”Xºìáw ¬I‚JÖ,Î+6H^ò¦Xœ…m ¥fAÕøâ—hbÎr¿™?£f:~ *J­Ý¯ÉA’ZH÷‹Ïè—w¾ÆËÁ}Žç¯4¤*º ÃŽÒÙ°6%§8öŠ_þ™ú‚ ò¬SÕÆ'*19q›(.·²÷“*’Bs#c‡±%²˜ë–P¹<¨*@å„”t¤ƒ±Þd’¾†â˜(A¥[G*²zPûEY€ Î+$£_XôÚÊD¹C¿Z×tSáå!eA9€ÆÑOö”\§óäM”òÍŸÏù°8>ÄGn÷ ù±ÒªHC¿{q?~t‡!˜97S|¦ðyÖ6ñ”árd¨ã‡?ÃD¨¼û'Hh0/!ÃÖÔ1‘0µF®•Pu’tbu’’˜\Ǧ‘uŒ3ŒÝè„ñn‚ê¢Âž ÆKD휚D+Ô NŠe¹ËútŠ¢à4š†6 ĵn’«X¬mN‡ S.š—âò7ÒOÕMzÀ’{xÈ$Éø•û Ãó·]wblèw‰k¼¼ «äf¹Ìœ-Â` ‚£z@¦‡öý+ ·Ëu,rÂËð7¥ë‰$&ð¦ Ñâ>WÇÐÐá«` O€hêÄ3TíÌf„²HmŒLa7‘•jÈ‚‹Àט\sfŒÌ N'¬±LkÆ®!¯ã¨‰¢¨7©êŒɹí˜[ Š0eìèðX/Îð)EG8¥ß‰šKñÚ()k謖"HJåw§˜(`„òBeå&Ù4…î©÷Õ$vÅe|÷æ÷ô3z*޹¶3_øœþúÝCÒÚλ3ª ósôS|šn¶–Äqn÷ WR»ßõ4M‰DRLÓ !`DU1mS•5»€Âz¦*Jf?#1ú$= N€ºìùPǰCäC1ÁÂ~ GI—Á³@Ê#ÿÊ(o%#½GÆIü"tr^° 9„Q¢‘€þ¦ð¬u; Ü+*(ˆß uþ©MÇÄï!!¤þÀOà$OêM|°RjG\Ûyx+àwqBö×Ðï¢Úý ï”*íny£pjì"Þdz䟨y¹™g¸™ƒ}#L˜bòKªÛÒÜÇ à/Õ´7Ù×c‡WLSv3Pမ„aHU˜Ì鎬0ŵ^‘4î8æ_x! 炞q.Ä+IN 4¹…>g)æ~ žEamÈê=A>dŒžù°¡r¢:¾¥@~wÈS›™ùÁ&¶R8GGl÷ž#üŽý5ô»‡¤·dà~éÉÉDÓ⸮€S›ÔëqæíÄýÃù!MOq|=g¶¯F1Yƒš7âÈ1½DÝ$O¯Z{RŒ.AéÀ¤{—+šÔhE%øÚ”±#1-ÝS¬Ù¦âDL[DA„rŽœÂ€C˜!‚ s™ ¨"ˆæœ€¶ºÎ3vcys ¶|”n¨Ç$ ù~r6¥Då>ÑÍI®Ð¦!·¸›„FË…ù嫤“ÐòÎ$¶X–8p=ºá÷F?ZP0ésÔy¾ÃEnû÷û…IÞùôLúüR®G %>®Ìò쀪.ð™*¼°;Â;LÇôùÊ#­9á8ª„•tËdU¦ŸºŸpŽIysò'ŽG£ =QÑh øÎîŠ *fƾ5¢ÜaáŽÌî8£…í8tg£‡W•‘‚*c9CI!Ør«P@Ð>½W5YU÷™•—{É–¸åÏq×xIßþ-€_C¿_’¤·dZÛ™Ÿþ g&ngÊ. ›G“ÐmʵF=¡ú©‡êžŸq +•|äaã8a¿¬&aŒªµu'XOj:ùG "ÜH9’SPàBˆ ¢Â' ØA$çP"†N2ÂJ¡¸´XR›`ºÀX‹Ú*pQE!LSSÑQE5a!wÈ`éd>€ëꙀQA”JI¶e<Âhª”žòÚÎGÛÏwxËìï®xù%‰ìëAµ_|ËB(ú•7xV;¿)¿ÓG¡—~emõ¼+Ö”€:oFS ÏZCt((˜›F P‡hS>Åu±p X7‹~LŒ`m¸p=*²nB†,>S!ÓûG2'œ¡Gò$u|Ãøo͈ÀÕQßâ~X‚¥êÃ\\•/–›†[ÏŸ,>yI„ G^ßo†ßøîÞÞÊömèwᵿ(䇿hº…¦–¼ªéÍÍÏ8…Á8ôs]Œì_WÜ…`AµàJ,éŽPYÁÂ:))¤‹ðMŽ@x”;s 8–üt¢cŽž4ƒë‚@Â>;š‰,7F0|Ôa’©¯0ƒ“‘’"Ì4ê ª`¡O¬±y9vå`GŽÞšê&«_¸##¸ä;p×iˆëŽÊ£8þÚÎaηüîNdü6ô»‡ÐÚÎÌðqË/jªIb"šHýÁ'_½ÌGÅ`ÆQW…0dPaÍQuFŽÑEŠO,Êt@9UEeŸEl™êÇ ‚àpl²­§͈itXT€EZù@ä%Œ¤¬Ñn–fg”(2ÌÌÍÓ¡º‹)-D€köNvPŽãÙ†[Ö®*ñŽÊr¤R„×+)WTápoµÆ T¥~݉Öynèwá5^VÛùs»ÝÑ×ÊügÇ]þ›oc_³—ù(¬¢Uºš½ÝÒaò“ãÒÕ_ë  H8ŽºÑ¥UŠl·¥tÔ÷üuž¿‚>té×9ö]Žm%¡sb¿¶Š™ÂÈ?»m‘5L>ÇNéôkÊ#ýír.¶*’Õø×W.ëtÎÑ*Ý* [ŽE!ãuñ•ÊdgÜ8Ûì)—.:rÚé?ˆŸòÊ“ù£ˆ°xË8Éé*ЖU w~ö:[¾OÂ(Ö#£Ð ÃÛSµü5ô»‡Ðx¿ñî—%¯O­@“&¯ùëîDûùÆù'§‚¿†~÷ìóUö‰/“s½êùCÊÞDÅ„=ÈûÏSÀþg¥ù~>(–wLŠûf>Ü}¿wÌð4{º…þNÒñÑÐï’ú|wgôôL‚湚ìÑd}¸àˆ-]‡nÜ2¨T‘‹–=í• 8*‹_œ¶¯³£ÕÞMSŸOòçÄ­²«ÕPêïI¬¸ þ­¸~ƽÐrSF­[Ù›¤¡ž¶ WÑëâ( -¾|î7CßÓù?t|5Ý$ ýî!¡…$öù.=ØïBm-¯=ÑŽƒŸŒT%íÇ¢à>u+µ½âßÑÙ_Cº½>Y *¨‚+£/MÀâÔ„ó2àß!7w5œv´ªçµ&Syâ§gÙS<œŸ’ûþúÝChmçC°O“±p:jÕËÝÁ>¯vb˜ dLúÕxquŠÙ cœ8¬Ö¬›T‚~NÀs©'_QÙ€ö×ÓÝÅiÔ—'•\é04êèrï½"ä&N Wüá#S”•ãCn%B¶-3å‰3ÔùWŽº§›Ô¥løž¤å¯¡ß=ötS–Šyv šPuPuMmгºÕ‰ÇgŒ˜´ªuXy&.¡j¤­g6BLŽ€@ûÌ”*hóz˜ì›(MÖñ¢g|àxœ‘¿M1Ù\[='6S „…dE?)œõbP‚Ì ÙÇIyEpꔣ ¶~$PÁòÊi¸ß OiØË‘Snèw/IëûÁ~¾ê!žð±Â·´'^Ë­E é*/þžk>–q”e € ÒÑëwãÝø§?ÍàD®“–#ÔN¬úéd¸»»K›yŽW¢pŠJ9˜±P[üÍ%ØM—ã0òf˜ú 0&ÜÑìß1í5@70«\bÎ8ÑžÁ¼$ö˜÷©ïdî-•T}õ|‡')T;ýµ7Ø1]ó¯ÃÆ"”ŸêÛ#¶û=ÿï‹çO/ÂoÃWþúýdx’û|áÍ9J5^/Æ×Poå!V{Q§3×™Åßô…§QOµG–N¡wûïçÏÌÉ?V. ™“â§ã‹»"üÍŸ‘™+$É—;ÇÃ]ø\"ᚊµ½¼Š0G.d÷'Xˆ £š¡š .€÷ e„W9Ó„74Óuêi}ñ"ìid’=Rî'Ù)C â¿è{¼ÄpU.:ÁJÄe €ü, ¼1çS+Ê}‘%É?ú”ÒÝUiÀâWažïÛýž_üwšâ{’~߆~÷µÆ‹²Aè:½xñ"̤¤Z€ï÷QX¡<¯„V±¦Eæ÷»´Õªze 2`)ýßgÌñ¨¨qEbXd¼›áï=Ìÿ‘ûÈÄÌz!œ©;&î_ÜõÒÓWT¿©sô7#oæÏ‹»¯ï^¤ÙÊS¸b,k;Ž*q‰20¿HÚg™_I4<¤£–6†‡ppk ¼N)¸ù²—Àü†ñ³iþ·t¨¸á*?§²]e£wXýa‰´T–”®-{CJ'ñNǤ@ÇçËÌ-‘ûɇ¿¶È£ 9¢ŽK½x£rÉ…H@Ìo‰.=k{Ä>_F¾§i£¹¯ÒrÃó„GP!JC¿{HÚýêû3`ø8†Çx†¾éînu7È˹à@ü’3G æØm°Çó„‹à‹¼£—øNÁw€¿›‰å(U€+7ׯ_ÿþ뻄~ãÝô'F»i¤Jü +}æPiªü@ì)0Øq&ãZ¢e„sŽ 8ßS%œµIÜï³ôÜÏ#DL¤fî·²¬¶ð/.Z^îYî)iaïµÊ\úJ™ŲT·J!܈%"ñA›°âµ˜Ž.`RlÒ¥Ç)1¶âkWaó¹Ÿð¾!OubïÇÓ‹øûüX°¡ß=$÷ŽùR&F‚•U¤T«»×ƒ^9X(’±ŽÂÆpÃêEøDð{A}±fè79n®!7—3øm÷›n¥0÷@MÃÿ׿ÿý￞Qúë€~wšúA¬òº îVÃj&€3_d·]…€–ü•µR`äf ¬ªtË–¸_¿ÏŸG.+Ø´„6˜Ëù«?lãgæ~J'ƒ RÂ(S^Gº£Ö’tÅ\t¼°õ( yÇÜém}ùFkNÇëOSZªˆö'É¿¼  ‹é]vĹbô&òGOgì» øÁ¥¡ß=„ÛýÔ\±ºÛwû…;‹»FègA%Úa/n~¨Uƒ°8ªë·ã*ÂÀ0Ýfã7E/,QIú ï"üÝ}=³§)v óS¼Tê€xwù+â~¿¾å*R á&2ã·ñ>F!³JtBßóq¿!~†¯…˜—›6Rc؈í~«?|–dp¼ÞÈo£\¶ñL< v 3ã‚€»§tæIÏ„zŽ¢;ƒ«Å8†2àÐê#…Y¥}­ä IDAT‰— O?u®ÇS?ù|Çþ aüßÅQÔhèw s=vg·g¦âÛ]Þ«ã´z‘ìÉÒ¶ÀýøáQvñ÷BGDþ üð »Pïü\ÆÁ/|_òN…ûeBË,¿Hð÷ûÏf¤}ƦCPÊɲË4h N~Ã,1‹‹iŽäd`PŸ€ÔÈ;`œh3bê9ˆÜo f{ìü ÀbØ cMº)r¿Õgñ}öh…茘Ÿ/B9âÁf~14†AG)/äš ”Â,±|s•‚¯˜ вC7ä~ù):ò\`÷³wˆÐ÷4“¿‹8æ«ãؾ ýî!¼¶sQWRÍœ¥Œ~­€ÓpÊOsËì8¼X ~Éö u‚ÊÃh6Y†éÅ8¦ù37u´›œ€¬Â>Ý%øûýg±íoÀÊ£X‚à!×úË›:Sžj;B‡æT€þ–Í¿Áxýl´;»)´À4æÿË{Ÿ%èÜ)%Ä]3÷Kèw÷Ùdó¬àŸÞ\P7#Q2ôvî&bÒz zhHËiÚW†ÆWìÎ4‚”Y—-0Æq’‘Ç(µfu_‹ |ÉNN™õþúÝCd_ý¬¥Ç;ÂÙŠ—ϹU¥DÈÄåZ–+Æ`ÁÏ¡NùiCq~n»ÕøB>ÀzøÍO¶ @T8}‘á/¢ßk8×IM6lŠvª‡_)‘þiô’G¨–šKYJ§ŸE¸ø¬³°'´j„]T²ÄýF‡ûQv…êdü!îZ.ƒñÛ… ¥­¨³põ| ‘ò­AIAa_§Nbàwá¦ì'÷º£mATFFV(…šÕµYÀ£ )þÙq¸pp‚y¾ÃOlöΰ÷4: ý¶÷Sµ j{‡Ü›}ð½-˜©Ä  _&E Ψή[?FE…¬9 $a|Í€Ü/Q4fušm «šÑoøU‚À!…aCÈ#G]_ÅeŒÌOF2"\âÛc4L‚ÜoÒÚæ¼Þ„¯Àýn3÷ ôOÊG¿Ìrx.ÃìGÎG¯ ؈åH™ÍN‚>2ÅNÒß|;¥¹ør)PP­?+¢s$ M8 é4k¼PËÉÓ4¯!õ†~÷ï§jKz/ßî·b&`¨ Ϲå~†:)Ìäª8ã\õüRçös0i]s¥ý:5ýOÉòu /®ñÌn×ËýÔaôŒÜ.\þ,“Ïà2âÀ))Lãàè;ôL–Ðk¡~”p¿HÿFÖ‘É& …"ÑÒ–*„ _f£ñ®nœBÕQg÷Æ2é‘y _¡'CîŽÜ6‚7ŽYPŽ/Ê«lJOÑ)Ö÷#ɽÀéøù‘mèwÁ}=ÌÓškƒ~ðôu_&=ÌT Á¯ N:° ÂœZjóî'L yàˆºÎßavo®Y„û³Jc‰É¨;=†K1§‘i”ÔD`¾† y À÷™†œ%£aFÐ0ööÆ6Cƒ:|Ä=ª,ÜoYgæ£Â‘¸˜Igí„w]Qm­¥ºÉ#G5 ³Ýܤ¸BJ:H|Òá…Ô©ñ^JîÒ;á4ëû‰dø‹4ð8ø×ÐïBí~Pãy˜VnóZ 0äén<îOí´ÚIeÇŸ ÃWÓ½ÑyŒ#jr‹_øŽÄ/ƒˆ?¥ë|š–7àé†I’äêƒ4Ð3¿Ûøùõ¯¶¿ºPS]÷3VËJ7r%¹26²LX‡‘#ÐLlû³‚·êWè“¯ŽŸ±ˆÚ‰¸Eú£î7&î çpç#çYMšyÁ¯§‘ÀÕצîó KKê§5ÈÆ”Úì@iB8É1v‘¨£õe:´þp! ;ùÿÙûr\ÉumËç=GFzç–w}MàÏáûBºgå(7gÕŽqœ4o ¯ŒaäÂæ0Qb³[RM4ŠP튢¤àÒâÞäVËU'åui&5æX) ±_vr=Ž_¡²3ÁJ’Ô§]ób,NŸ+ö wdÔ#E¿IýÁ©sòÔijw|/â\áñÈ6úŒÃ5rç»û]ü„OªEPaÚ0ТëP n²ÿ»cµ ÿù!ÎfRoGbN^SëywhÎÍë»–RE:¢øÔó#d tÌ”'ÔÓoY´µ$ïtÈäO„æºËŽ1qTž¨,¸;‚ÊÎ^á07 —Só5ΆM8Ù‚4c7&xÒnÒóØùϧO-§=Of|È£ìxG?%Ùæ"‰äLÄÒˆMäYÜ€' Rî†xX“ò•/§æŸîó}<Œý®‹ñ¢4Ù÷è;øè¼† È;?ÞšÃV]—«Ù‘iBªûÓ:wkš†×ØŒkOÀ°—c f&9U]I=Y€P¸t qÊ.ÒEȆHb‡Å%bÐ7úÀICªjéF¥¨³$&NäGºl¬¥q¼4N1[Ú/^VöçT)^Î=Âî÷ïù$ÿ^o÷%Œý®ÅxÁg<Õîp‰Ó·;µ•31±fLëc²X ‡­£pL^†ÅÝÑ1¥ ÛJ†¯sß6Q 5ͰxPQƒ|TËÏ»‰j-jÀH·‘wó#.RšAÀ…T¹ Ÿ£­³&’ÈŸXÖø•É»ÃîÒ nHS¢È„¢£¢”ß)„ƒèCéÌ^rIŸéȆ[Ødئ9Gµxh’ht‡3Éq ]°®Å_éàRé[8Õùx阑¨éVåˆP3õ1âCÅ(Å,é6Í[iŠØ_sÅpÀÄl;ö§plÿ¨ƒùæ•W¼ò«k¿Ôfì·yðþ~üöi+t:éŽAfE6KÚ¢“}—ÙoÜ>É­˜>njb̤ ¼é©‰ÌkAØmdŠ@áÓ<èIx:x—;¢|ð¡ çÒ¨)¡‡Ò6%‡ƒè³u§ôùÅ)GPP&œa“øsî g ´››³DcXó YÉ8©›c¸±ÕçÛL"¾|F:¯l·H(xÁ<©b0õ!µ°¥)ÿ HpÌ"D“ƒ¸©K¬Q¢NÜeZ¢<¦‰'´_üs°ž øÉ0ÉBÇ"­ÖZÁÇ–è95Š]PBXûóRM»M¬w™‹Yüa’7‘ç< ”åMFçí!J=á ëÊV!5äã–i79Çû+s Á«‹œÕxÚòÁ‡‚çÖ{,¿wühRB¹‚–S…ðóÊ™êœØÜ¡Æ">d)â0[Øž1$®qrÿžuéc©PÒ¿‰/q+óýøw`´Èjñk˜ü7.ÿñ¿ÓÜÿs9Išéø‚»ÂØï Ä»äÏßnÄ.i§ÜÌÍeê#Ã:Õg¨ÊI“%BÊMÈÜíÙS”/¼¯‡ß÷&¶yOM’MéçÜ $ÛM™õþäVêï ®„[¶ÛÞ¹yÅêÏ +r6ÿ¹¤Žù ÞQsBÖÖôB.ê>Ðô*Ôs` ›„eCÒ0™ãÀ~¿²Žäƒ“Av%ur‚®ÝÂ.—¢”T^)ßðü‹{—bt?dbÐiiçÔv­w²ÌŽvOwW¶)ÉTsÅÈ[Œå#)v¡×˜n%ì´È|áOû%QÇÈÔ&i¶dlÁ]aìw Æ o 9 T½²±Ä ´=Ù +@f’cö•Ä6ØnàŽÕU²˜…¯&˦ {hCR­Í÷~:±_r±€ÃÙGÛW6ýéH¾ñ®pÉuйsÚ˜1«U^ÖDV'YUOÒœ‚7GVq¡¤¢l8¦2`ŸBà)¬õÀSGl‚Q}£Màà@ÁqI«ZE€âšx¡§ƒ†ou›I1¹Òw”À}òœä†/«ÔD6ñš´üñ`Um•¢¼0uÅê3ã©[;«´”´ì[ÞDß)æXr0Þ<øÙ—‹´ÆXû _c¿—B÷ý[²ûÉÚ2|ÿI^ƒ®C2Dš•øýÜSï‘ J¨æÊvÄ*èE¤Ðµ/x7N¡×/TKlX²?: ¨œ,·Êö:©a V@« «-"mm§£g#B`+ÍvDT bbÔ,ƒ¨@pè-¨($£ìßvÉø—·a׫y›¯d!xœÝZ¼7±&­¬Üë()­TŸ.0M/ Yêz¯YŸ¤2/,n!GÙ «…;=“7¥{ó øï¯ýþýJã÷¼á ­Ú’« î c¿+ÀŸé\“þSnÿãì¯Ê„¿;ª‚­ñ_ž9‰˜€ò6BÕñbPŽ8”ƒdßšj™cK@äÃ(4Õ"(_êÉKJ……phEÎÄ0tŠ˜J&¶ô’€$ì ¬=¤.3¡ÝÛ3Ñ瘕¤·ð——•3?J=Ao¸ )ÿØþÄ„™Ì%‹zº¾ŽïŠeO?0)NT:4^’Ëtƒ)W b»_…ɸûâߪ› ÿª/¸3Œý®ëáøÿø+ú7“£0G®“¼…Y@tù)‘ì¿·m Ú WH/¬ê:¦I¹8`Z öÀëQ(ªFÇ^vû`ÕÒÑ$´"–W‹ý׸‰ O¥sèêLˆ}ü|hÿã)æOY!áÅE6dDêØx¦IlÒÍ N4ÝÄ`ÝèèMÆ‹pq[¾ Mq-Ø_‡cwñ< –ïöèTŽPøœo½þøÞÎîâÌ`ìwøs=¤"`T„ßôGÅö[VoR+êãìÆnÖPÕ ªŠç%ÐR‚ §Ρ-Ë’|­*-ç¬àQû±üñGT@ØÊË͉„éPýñcö,­<¹ì¨°â‹ê器©®PxòZ1¶ââ \fFV°¼vw¢S…´Ëï°þÁŽ|%Û©GUHÚSÅ*„ÿÝbã‚ΟÛùyägìw ²öûd$ƒǰà(˜$ž©7âEÜžÕ"^¹¢©˜Ú“•“1ß3묃þ)kçœ×Úö•Úc6Žm.KÔ!¤¾ð#)ɉChùU©íÅýï3ðÅH„ŽùøK8ÁWlvc4Íä_+Œï˜‘¹c§*_¹|}SßGÇKÊ•\./H>J®óÚ|©–^ÏŠñbì÷Z q¾ü΋•ÏS¥¤;0ÕW~Ë97vöWf7x¦òTåbÀ:)*$gš\Ù9qÀîcýãÑåXñ…E,9EŽ„àÕ [ 7bt`E6Œ×‘娘¸ÀgáF§Q*¿’×05§]ÊI0)#jq¯Dš ƒá¨‹3«µ\DFLìtÐJ­‰÷ Q&*4ž|•=5Wã[lgÃ0»Ÿ¨9’¥T£$Ýz¿Ðÿ›¸„-„:į‰ÂþúHr<*UK±-«;È'D p¼P¬²16ìC²CRmÃ(©ªý<Êœ,L<ÄË™ÓâÞ$©B8‚™(Fñ.K¬ìÓ¹’Oœ,n¹8¸WøPÏ>–/fO§Ãñƒ§ÿF:rv&±LŽþXô·àºV¼r¿³Å÷3LCÄ÷w^R&hÜ¡@+™ðÁüÍꊼ{ò¿R}ô-Ë3EN‘ÚÓŽ¬E*߬Ó8ƒsI…±ìˆ}K^J¢!ÈSruäð±=9^FÌ‹è4Š†È¢T‘qšö%£]A6)C¥}Ä©áý*ùùÃYyN©#gÚ€Ÿ,¦÷?ÁÈM›w̪ÈOýWØÝ)_!ƆJ² †T·ØÞ´Ÿa ²w b¼ m@ÍLÿ,Q¡4»°$¢þËõXHœAõÇåÞÑŸˆîäÿœÿååJd]à2Ú$[¢ø±Ánœ8 Ož14Ÿ¢ ƒÇÀÎfÖEÞ3‰ÊË/ÇD3íŒxè –!•8]Èsˆ=Áâ¹tt°ì®‚çöûdY¶éR{//:yã©ÏÛ²ó-$"ÛâdxçÙ")þœ{šÝï‰0ö»àómÎÍ9 ¯s 2?|þnç4ϦÏ!ýž"Éé׫÷)mŸ7=ÅÏrûÉËsŠ!AèüÌ÷Ç>§¼qüÁ}ÂnÓì‰íK_ã±ó!Ò¶r/8ÃÊ §(­ÅçÛÁ|ÀIç ŠË¦ÿN%†%ü\âOììBé±X”þ”Ÿþ†sK—Ÿ¯|ÝXÉÓ5Pçœ (Ndùw#Òãù/.Xs¦CŒ…;¨ÿH#7cK‹w*®+¯i?ÃÀXSg0|ô¦ý K>ߦë ÷ǯg`pëó¿ÚØÏ0 èïgìgxY8>ÓDö3íg˜G¸KžƒÝo‚ýºNO°¹ø›raW$NoLŒiX>,¹N#–ä-:‘˜öÏÕ_b¿b;oÆ~WúûÆYc„üz´²ôðé‰Ê:•œØ>bKZ¦¡õ墉| »€ÃhÎÚïlÚÏ0‡v¿qöËßœvÊoLÌä_}b2g).e2žØ°?¸žºWú¨ýœù| ó˜×~cä'¹µ>õ÷XâIöÓi&Ù$¨µ|w‰Üò­Û&i?³ûfµßÏ í7J~uѵ€ýêKÊÄ2ŸíWnkØ BðczÄŸwM×ökÄvÞ8Œý®À¬ö[À~œž&ì~*±\Ò•©Kí§r妯*‹öž…ÿ þ¦ý c=FHcœü$5I×lWóùªÄrI¯“Þ rú²$Kl-ß½Âõ->â|¾f÷3ÌÆùNø|¯€qáð}pxSÌgìï÷ŒØÎσ±ß˜Ó~×ÁØÏð@¤§ÿågëïgXˆ<Î÷·±Ÿáeá{GrÌçkXŠðL·æílã| ¯‹ÐßCrÁXóùæî’§é±Û…IÌGb»gÛÇ€hÃÏÁÆùâv¿%˜G·»rú»Èùª|){Ös§Øãâ\:î^œÉè°•j—Èú^Gà¼8¦æã׋}m–þ: óù–aÁ8ß>1Ý]æ(Hv`¹|¼»ßh‘®ðñîn3Z¨ê¼ì«x9ûUŽt"“Jq\CK+(GŠGl¸Uúó¡íÛ»_ù7k?{®‡a³c= VÍçûÞA•¾zd¿JWëù}Vtãl|ïEN j”Ê ®«jõÚa\V€Çé—i?ÃÌi¿Žú-6ߨ4¥!¡%ª‘Ul‹E8Ý}šØL¨ʽˆœ'ÊS=xE g£¤û ûõ:Ͱö³8 b]±ß±ËĘ}û‰…^’ŸÙý Ë0ã…†\ÔZI˜¦F;b‹®Øœr`«Ô÷¬‹!ØO—Cçîhþ(FØOàèŽf0ÊxÕܰ_ÿõ´QŸi?ÃBä»äöË’a’ýF}ˆW²ßøæ5ö#:Î~ãV='ž9ŠÅìwje¿þ²–ï’£XÄ~[ƒÙýŒý®Œõ8/Ó~=#•¦*¢¢Ì‡VÕT¥âØi¶)÷Õ P’öRö«ÎõìÇYûŒ³_¯§g“]Ê~¼Ì[%?/ÕŸó5,Cë±@ûa /ý¹S”B[ñ%uûÙûuõÍKN`Ká[çE2åmƱÊQ‚{aû1B–W§v¢lï2çòD=NYþò¿ÚØÏ0‰¹/ª~Õjù$ûÁVr‰Ì°§Œ5õ±¶v±yðCä_ÃxéçùÎUÂË*éc«ô¼ö»¨<ã‰K­~e†ã"õéðæó5ö»s>ß—Æöª©a xÙô5ígX† ÍØÏðÂp²ékñý ‹Ðùoç¦ù|Í/C€gÊ/û|]s6íg˜ÁKÛý †©ü¼õ÷3,Â=b¼ O…çÊÏì~†¥˜ëa0lRùÙXa÷xv¥4<ž+?ëñ# áúÏ·ÿ|‹_•Wóÿ¾Ñúïðž~}—_l»¼õ’L®éòÊWxçŸúæå;¾|„ó/ˆæmf½±ß^ •Ÿ7Ÿo÷Í5ÿÝ„/ÿ}RŸ Šß®*9½Â<¤ SßÒÒ¼ ¤õ léðUæáÊýÎ|&·Ã½@yÿ›•0Ïå.ÍËo:þ×|½ö›Zoì·ðÎÎf÷ ˆMÿ€SÃ`ê-ž…S¹hdÍò”cëçÒÍeZßþ4ºþTN_T„ ¢z i­i¿ÝÀ)ÇÇîÇz¤à%c8½jœ¬þg|PÔ†%\Jd¯Nxonzµ±ßN`±+ÚÏÇŽlñuÊßr>üžq:¼ÎyÝ çÏlë³HÏ·ã¯SÜîÄr:å}Ÿ0'HIKÏb;ùâ%=±ýÒØkS™¢ù³:R,ÝϘÇgóRŸ±ó_δߎ •Ÿõ÷ƒÀuM•r$yiš‘¨çd§LKð­·/·­S§Üb,5Qdyœz©Œ’ ùÒÚþÎ/ôi𬗟³‹ôzv¥4<õ/{~¦[ñšþ†"‡w{v­4<Òãkýý`C;?è¾Xåh~˜HsÎåô_Ef|Ó{u,­ƒã®âô°«ä^­8 (hN¥¦Mõ.‹ãfG÷/~t…ò¡Àµv¥4<æó­Úý>›0Þ¹ìœâ±‹¯vúpÅœ+Ö:–OçŠ9J_î§¾÷òU–ÆU·wM½4ežÏë½ÆÏÉð—ß³k¥áAp*Ðù|¿»¤ýVw=6†·pË3í·pê3íÐ}k¢íÇEú;¤zq É),H2ÓæDYÒÜ9N‰™´œ8±B®‰sƒ¥vynèýb8œ«7ÐýÏ®•†Á+õgv¿þÏIûB/·CªÞÃd0‹'8cÅ?+†d‡ô–’ý<Ì…M‡ß”ê Û ÒÀù˜6/ÊÛ!Neoä¼è”ëñ¹y‡Mì;esN ϹÚÇ…‡+C¹©dé•ÏE£ŠÌø pu®NÍç›Ùýö…zl#Dô IDATç]óÍôïùˆÄ}‡ák^aÅ4Ã×,ÎÀK„÷œA± ~Þãç$ÖœØ7â ×/B™ý©HðŽÉ÷oÿ“ ÎOÕ›ù|w§ÔŸó v¿·û!%™¨Þ¿çúó.RÆoF[ï‰h’3Ë»˜}GöK’2àÀ Òð%Q‡hRæŠ?§bŸ°Kƒ³1Ÿw–É»ÈIXÁ‹€J*NW\üfÚogP®ÌîGÚÏS%Z.ñM µáÓÅÐëP°u]$¤8ß±t@á+n–¾Ç­ay—ÖÅåóŒÂÝ;Ìe¶âäUcÚ÷k\ÍϵTâÊ-ÆŽìoyÎ|¾»‚SêÏ|¾ÐßOpA$¨pW"°CþÅM“Û¼˜§ì×åOÈSAÕÌü ó‡lóc\4Mg•z«Ñ˜$:èMÄÜA&{™ÀhÀ,n0?³öû4öÛ ¼T¦ý°¿Ÿs¬ªçv/*´¬÷2ÙE _ï1ÅÒï~5-â¶ÛA˜ý˜Ã<'Vs‹Æ,á]²—R“Ùa|àÛ(ujrŸ$õñf#O&àæ?ÅÁÀL4w8³ûíN©?óù2í}¤hÇÆ_ph$$Õœ•Sv™cº­bÄwÀ†®Ô…’PxE%O/Os £ªE¤µ“Ê ×é–5éI±æ$2„ìÀÅÑ0~~ãÓ©üÈÞÞR7'³ûí6η¦ýNäóÉ—¤ç)fé£/óŽÔÒE+x E¾ò„ºX<%Bº)AdÄ*u9Ai•³ótÈ߀w\ÿ.28©ýæµÒsÊ  þ†/˜Åƒ–ÎGaÚooÝ-Æ Äx‰ÚÍeYeB;pâ:píw&eØÄÎŽ~Yû–táA4ëÔ…Õ5+¼Sú=ÉuÉ쓜¸rËÛUQsg¼7|)»²ÑXl¶µ_9 6æ0oÐçk1^v/¨Ï|¾ßÆzdÔ&ûq•/ãœXí„&ÀáûÌ×W]JRk˜Z²'åy8UI‘ü™LÒhœåâÛ SC ß;ÛB ALxsœ27õ›éî½QçS%qhÚooÏó5ŸïðûIŸoî—rˆDÖ%Å–‡tp³ß{6ãZŸ6=ƒ§Wºƒa%e’Æ“°ºK æ]Ðæ5¾xç;.‰r5; ™®Òv<å|2¥Ð{ÊxXay•}§…¬Îkªkˆ2+þ D$³ƒÕŒ~2KÆ,… LN7š¡6_5H ýž¯Q´û¥kÿìJix d?çc¼8´û••}UbàìÃå“SèŒP¹ËÜPF=1'Ø83Ü3[ó`àvçFÒôIÌéƒFÿó;”Õ £ÁœNXØóÓæñ à¬¿³æpqq-ÆËÞàúÂç»óq¾™þ³Ýª;×^È,ïT­²N:•¤)æaû“lǦ*y¢•å–rZi9Ýò´GLÛ¤§ØþÌ¡ü)Je£ÒBYBÎÿ÷Lùòó%9ð£ t~¤LžVèU]z´oÈÏèïëÃsåg>ßÑëáƒ5HWpÏ)ÏÓåz]»fV{5_¦šÎ‰gä+‹+éGJíY2 Ìåõ^oWßÝXôîWž¯”¶Ø¾ÓTpù 0í·¨ÐöæóÍ1^ÞÚñ:<‹ËÅøÖ—U1s-Ùà9Î{¾–D.L–Ê1±ÑÙ‰²{Ò«ÑN¼:¡kÏS‰ Æ«k¸(æóÝ|/Û›öûѹÐô'í7¡òt:.J•¹o¬¶B­ç‹ÌyFX!ät-ÅëÕCF²dYO!áCŠ|:מ—E›?Ê\øpíÍç»#Hågv?èï÷ëÃ$ÎÑ•æè!|œÕß“R‚e™r€x|Êgœepÿ°;`s`Éy5%ÉaŽžý\À±è¯e»ÓZ½]y>íñˆ¤K—)ýð£Ì›’ö3»ß :;Û8ß<Ö#j¿\±òT`ñ“+Œo³°à5lX|D=BT“·‰sõäY§%$õ 5ìŽ3&Ãr+dLΊá)a®÷¡ìHUGØ/÷ÑA®lãø}»E‰”_$°#4œ×›çg®¡øq!¨SØ”ÆzùíN9>lœoŠñµ_Hù«õ©}õ&®ö¸zÜÂ5€ØõŠÐI-ç¹6i¡òòŽE–¨-=±oNÏ2a•wìI5)M‰Æ=TVœJ‰Ý=å*ÒÊO8W ÕÖ›O{„ã§3“›Æâ°ðÐÒ"¸õ›Ïc¡MÍîc¼·Ï7aýáâhPNQ>;ròC”x’5 ¡*Bâ˜q¦GÚåð Ó ½ÊÙ-k÷¡ u,ÿ\$â¾\bä%M[lc©g$‘ÖÈXž(ë+dø»ÎsGEÀcN…gå”œŽ—nýÏ®•†A*?o>ßî{¤ÿßH3ئ¥ ž›ŽŽ×F‡k$ñ„ù_õsß…T#×%t;ôç0,õМã+L¤ÙCÈ~,ÏP˜ai~Åu¤¨áW•m-‘6²¯H7­ õœ; .¾I\L|¿y©Tå±àÝ„ ‡w—TNÇÈ|¾ûBý™n»Ö~Ñç;h?¢°,° ^auCt!ê5%{WÃ!v¬îùfˆðß]óÍ>_iÆshÂr`1Æ9QÓZ2ÅE÷hb#¯ßgÆTzå)0U[W!I.öPù‹´#:hÀ7ú˜䙕zÖ~-K¾1 Ü‹§4ŽqŒ#³¦¸CdòbçÙrézE¬¼ÇM’êB§2«Ÿ8: î–û| »€SLûåþ~LL¤Ž¬òyQ©JBE#i”êbr‹Þ­§V*5×@Û$]xªÖÃ$çõ$vCK›Hi ~±…H|ÀÚ–ùˆ0 ¶v%½dÅKg‚X¯¢ÝRÚ|¾˜#|ézäÃü|—Žmœ@ÅЊ§Æ3êÃ|²’Ï÷§±ßN Ÿéfv?x¦Œõˆµ£ë>ºà1è:¤9Ða".Æ–]ªb¼¯Ž˜*Úì‹|{ÈìÇ[–¹NŸÃþܨö š±Ð’YO¦ýÁ®Y­?uX×–/{­‰i†šŠÄqÀ6R?r…‰Š7Ë`Æé´{$^VzsëáL#u­:¸7¡ö#fníZÊ •Ó˜ÏwgP¡íÍç›èÿçÓ+³ºë— A}t@4-Õ5Ï{áÅ–èÇ¿úáÕ!¹¼¹Žc/ç!£¸n¤å¥]Öwýõcõ$´Š‡‚ %˜;ÐwZÇT*25QIÔí!§ÓSc—É*ô1†qrìGô°ámX.÷FÖ£NtÊsTÚÏÑ!2Í‹<‡“µŸ=ÓmO±MûAlçÓh¹(îü1(¼È%ÃÛ1袘ûp>Æ…sQºúa« pN¬\ý1+¿ˆ@JIÙe¦bµ½;ºÌb¡Göûë¯t©à7k¿_±l ‹±êÉ0sDJ_iq:I'Þ|npŒüœC¡ÜѪ—ã ‰ZqÜ8µ±v1*Í‘õºàKÉ„`æïšöã R*Ó~;ƒSêÏì~h÷Ú´_€QEE2Ì’ð˜]âGhÞæÉTبëÿE¯_ÜÎÔòMɺĵaé¡ *(ú|‚‹¯àWj¿a=¨Î°ô„½hþRZ3¤UÉ8ÊŽ'ˆ˜&IR•b4WË; 2þãêís²MRN®wl56ÃùaPáÑeõÓƒtˆÀšm¸ögÓ~» peã|Qû±ú“…^`´ZÁi6V½îOhûc^'¢î9¦ Ãuö/f¯G¬„µ)‡<]hÑçë²öK¢~{^ì‡Ê™þ~ЄDæcl¡[·Jûá ®À´öCzJvEß‚Ý/ë@LÀ›Üœ·8W×CžLæo”w|­SeÄÉiµ|4ŸïÎà”ú³q¾<ÆKªZÑæÚ¼AïA#öM¤ÿÂj©0°`æÎáû—OÚ/H·DAûÈî×û¡)ëüiª¿‰ÅFí~î¯døóÐöyúaþ¯Ü&‡øƒ¹Œ‘ Ê=œc¬à€…8HéÇeXÎÈx§ÒÎFb1eWYÏØ•±:æ™M{XÄíTv’»¸Wëï·/x©þÌîÏó}Kõ$|sSÖ'Ó_žwÇlGëº6.O«c-ê:j½AË7’Ð_`£SÜþWlì¯cÔ}Ã÷Gb±vÂçë°Ą̊Œi?ªÒ`ÃsÉLí”Æ´ÌMàA&8x\8’sY‚1Y¦ÄÊLq0f„¯G:åæ>ܣЌÜ:è#Wå"ãÈ6÷÷û4í·8¥þÌçéÿó WÖ|òbzKÚ.;A2ëù®c«}›LÔC&´R#íu`ùë2Se¯Ç¯x~ 3YOž¢„Žv ᢺãÒ/^5tS(h[¶[ÊÕì~;ƒìîl>_n÷#¡#Â{Zr„µª’øíÅÀ~Ǥý ñ›ì~Rû¹ÄkQ¡ÉîWx=<óz@‚÷#”+ÛÃ’ªÝ/S¶$„Ì5Äš¾š¼4rwi?$.$X’zªodK[J? *ŒYHê’5È¡4ÀåJVR-RÞq;Ó~û‚Ôgã|…Ï×Q ?nmå„‹sìãØ4gAü ^ˆî_¼Ë z!2áùu¹"6Óã|½#âÁ÷{BíGE…zßtŒßÐÚO¾”aŒË¸ÄÇ­ôSYbÀ¶[S3Ó“ÚTl*v¥ÅR¦£½T+×~˜Êñy§ Ù3»ŸÅxÙäó|-Æ‹Ò~Äœÿ8ÂïÑA)¶{=—%Á'úûE»ß™|¾tr v¿©±¿€bAc>c=¢ök»4Î#i¿`EDó~bG6€¶ ª–q“xl—ÈrœåCtÊÉ…®Öv¸«L“JøI¶­çd`ÄäÌ'å­£CzÒÆzì ªákv¿ÂçËê«úR!3b}CÝ瓾KÍPÐ~žÙý’öó‰÷PûŒõèsiˆŠ=ŒçÈÚϳ…´IkfMš-€HñPdf_¬5Pw[ª.(ûtƒX7¯ò¸[BJOýýR——ðîŒã2²Ï·:Ö#Ûýre߯KÞÔ~]wü@Ÿï{'4—q4EB) YÞ2f&AÖjĦ' 0ޮ̴$nG-ïpWòæB»f7).! /v‘$c7X%¨•‹Æ¤ýÌî·'Èþ~æó%Ÿ¯Cí'›|Rì¾ÔÇ´Mëjc/ZÏí~ÕþóùVÆzxˆãÒR‘â,ïïçÙsßÂjÒ~ž8N¨"b;:ò–ô …";*½¤Þšæ'ÑÅ7´ÂÙ$í^ªL%.‰ÙÎZ˜¥°Ï`Ãw&ícŸ´Ÿ·þ~;‚“M_³ûuß¿¥q¾¤ý8÷i݄ңeÏÛ¢Æ ÿ,ê×R?Ç”d¢¤ÓDoçl÷CŠmqŸ¨ý  õ\›×¡RJ[2VàªH 2܉ÁFtˆxfDKˆÝ#;<e'®ñÇßGÌåˆRWˆKαœèqªõtª±`- cÏõØT€+çžëí~<ª o2&ÌN$DýÑ~!Ù!Ûý ^ò<×£vÍ”öc%ÉñS?¨õÈ4AO’ª#3;:Ù`gò,h. Ejxg)‹,I§IäG¤…óœôˆp!–ª‡.¨á–…åÏΛgbÚ;èT_;Ìxõ`Ï`ö‰´LOµ´Çše¨Ðö6Î7Óÿ›£ %ÔzH|n’aÕtý!?•møÄ‰á=ì$Ùýº¸þp:4ÿÕ¤ÙSz¦[Çô1j²ûå”áo1ïSxg=öÿ6|¥Ìq(Æ`!Ò€£À†1ýðe j01’ÄŽ}$ÿhKÖàbÐãŒpD³Æ:%% MšZs"Ý0ïTP*U>PЦ¨ýˆþàcøŠñýÌç ýýÒ3ÝpT™Åx§¬^253¦·ú£Ù`@H¡²7#W-¶Ò®È“(I24õ‘ãV?Ù<õ‚µ”p#MìÅ)`&7¤3¦#Yˆh‡êD¥ÒpÚø@÷/‡ÀµŽ¥i©Á›Çó%XÒ´Ì>È~ ÿX# „T~æóEŸ/J¬b¬ÅHb‡/0k”#¤R8c´Te«ð<Ö~Bþ”›¶õÈbðüŸ;v”(¶¨ \² âqñö¤6,[¤L¢9~L°–K+“Å4GÌïˆÇ“æ`°W¢k~ìÄœ‰ ¹x‡ø~ŒýòèÃW„|¤‘ù|é™n$˜"‰ÁZi É ª^X­=ØÊ˜:Äz‰©I8‘ q’äp9©‡7ò×mlખb°éÇ‹çx¿=^@"?NžŠH‘îZ±s^Œ¼+¾1ïé!žL"tÞ<ω˜`Å3ÄÏA>¸Œi?ÃW…T~æóñýZ÷Αdñ©-LBÏS›ŠÙ­ŽD™ŒÖH¡€¢¬¸UJ*¡ß4ÝæÚÛzÒ¸MMv˜œÙÒ¸8ÓÒŠî I æp ž¦y³ZKK1EDËÊ«¥+v¦08*Ý(¹Zl=–]œÁ}lHNöù¾k»ŸqàW…çÊÏÆùþ€þ~y¬‡ ¬&Lù`[d Ùbñ£°or' CUHÍ}R’qYÅÚˆy?\YRC5o£Ôž“3$Ÿ »‹¦³X`<#WqúfL–sÇ#`ª®…}‘æËIYp|Od»Á“ 6—*“ ŒöM nG¥Ž‹ÁåÇ„Ÿ5|¿2Th{Ó~Ý÷8Öó3UP0ôKÆ%¨b^v Ôm¼ÄqœÑŠ øðF#6Èø›šz$ix —œÉè‚ÚÕÀ߬ýÞ˜è!E|"ÆŠ9"L¡ô!Ý!¨Æ3{òš¢0Q?!]jb¢zK¢‰ˆ“µ(µg‡µ@æBŽ™ßPùŽ"Š?Ü—fR˜òh mÅA1æ$ù‡½‰ØýO$§Rl²\Œy•Ðc fÈ«õb¼±³±{ƒêìlÚû|Šx¥–œ À†´$eIµŸPU¤ IÝp6Ó>‹Q¤à$qx™X£ØázAN”•dR+^øtñº¬kÑÐ ¦˜§FA³%¢Aߊ¡ÚH¶Åaï@ÆÜtPƒÒðçsÆDuÊÕb¼ì N9>ÌîÇâûš¿O0?0ù·Xñw«A“'†qÈ)†¯÷8Êc˜Œƒ=”÷)/|køŒ€¸ ŒèHã@þ‹v›¶ÁAMÎ1,ñ`Ùä ó[ס8HØë!evÊ[œ©ØxXqI8W9_újààÏ<÷¿Å,ø,“¦<òäAwG.ÔP€ò8ØN)óÌÃ’shñO¸ö‡ßÆ~; mjã|óXÏèóõ§±A†¯†,Ö´ßÞ •Ÿ·q¾¤ýÆb+?¿î³ÁÅÙ|a4ˆr]åéÍî·3Ø3ÝÆžë‘ž®ÎÑH…y2…g—°Õr %ƒ‰Êøé1Ö´ßÎ =¾6Η´ŸsIû5î_ÃkCµ8¡q‡ÍÔØ­–‹³__\͂Ѵ߾`>ß1ŸoðöKä÷/·9%ŸdØŽ^Ùj¹û;ŸZçPûY¿Á©@æóÍýýÀî'UŒX…(RW©R«X¦ïÂK¬697Xõn…-W?-ïA'Ž]Iß©={Ó~;„|¦›óMc=N1¾ŸwçÈ~ÿòø¢Ê Œ—§?¾q¼¶!ö)W¿!ösšý⃠Ìî·7¨Ðö¦ýx|¿¤ýü¿¼°bt¬ú<'HãÄ•‡xyü›pâ+Ö.WŽ˜‡»»÷¾gJF“^ž®á_ß§‘n©»×#Jcx>dlg³ûñ±Ùî×ùýk”ýú·{GX&Ñ‹àäÊ'wq+’>º\_Õ~™’Ó³R »×CŠcx>œRæóÍ>_—}¾IûåÏ8û=œÿÆX†ŠS-%Ñj 4U®’…qí0b÷öKã|Ïf÷ÛT€+Ó~ßo™öë»øÎËÚòõbNR^‡MÜÚ46ÓQÞ“ý&Ê%ŠGŠyì‡ã|íy¾ûSêÏì~,¶ó™Ùý|ÕîG¬þaµ8áUkqŠé{–}i¹`·Onù’öóãeoðRýÙ8_6Ö£u¨ý¼Ö~Üà³f¿¥ìk]e «“>ª\¼wÝ÷LÉhRk¿?ØßÏì~{‚SêÏÆù’Ý/±_“C²Ä_ª¬» Ì>ßîGœ"š™j ­Pv«–‹‰Nlˆßsß3%£IÅ~}—ÿÇ;Ó~;‚ó‹ñv¿^ÆyöC¨á´WlÃ-×ÓÏ]¥åK Àçkc=öÙÝÙ|¾Âî·åz C4]¾ý:„T-×­{ãhXV]–Øßïhv¿}Á ê3í'Ÿç{þÊõà¡Jv ²yêfQl¬Ç® Ÿçk>ßÝ÷oÂîgØ •õØTÃׯùÒó|‡¦/‹ï·±/V®Ë0U.—Gº ºÿ§ÝóvÑð5íGã|Ãs=2ûÁ¹òÛªÎV®Ë0U.¦ýÌî·Èþ~f÷+ÇzLGÅ|&¬\—a&º©·/»ƒëÍç+æô8ß騘τ•ë2L•Ë´ß¡\™ö£±¥ö£^²=ëÉÑ«)˜Çµk¡V.Y’®¾¸†;–t¤\ýhÇ—çŽó Ÿ¯õ÷ÛTh{³ûqíw¾šýŠõ+ÀØï2ÌÅv6í·7Èø~6Ηì~¯#ÀB”PŒ>GC»VkÿÕË¥KQýîuñ¨< ŽN»S¹pœévÏ}_X.}gýýv ©ülœ/Ó~­¶û íì'èDØÒûc,VñMÑM) Ïlr­°ï‹Ë•we±÷ùH#³ûå±?çí~¨czd”~ ìÇÝ]¹xeŠúbíÊU²0ßç=ö}m¹R”ëï·3Håg>_öL·Âç«Zr=5ûuŠ[Ö Ž0¯®g¥¨Lsžæ†ú»±_GÄó3دß´ŸÙývÏ•Ÿi¿ñ™nË|¾Â´§««\ºk¬Z‹SL÷OÐ~°â¾Ì{m¹¬¿ß.¡BÛ›Ïw¹ÏWTÒ±¶Ýý+1b‘}­«Lûé¤â8V´û)߯=÷}y¹¸öûpi˜çwjØ0|/ÛÛ8_6ÖcÚç ì׋v/›¢ú¼’ü›öùòf¦šNåQÅcI >¿W¹Ø©é !~ß}_X.ØqˆíìÛ£i¿A*?oÚÅ÷+Ù¯ˆ ÷LÜ^®qvaЋ1ßqQ©î~Ϙ:_ý¼õ÷ÛTgg³ûÕ|¾Q1Ÿ‰ÛÊ5Ý"¿‰’=J IDATýÊr]Ôü_ý&£›¶¾uàò»óŽ […SŽóùfŸ/óí8ž}½n,×äV·0P­\—q-ö›:_¡§?h¿Ï-]dÊ¡MMûEŸoŒíì[Ð~†¯ì~¾söL·]A*?³û‰þ~Ùçû‚Ñ:Ÿ‰­–k 0ÒÍì~{Bý™n6ηêóuÛªÎV®K ž5§ŠQ,ÆË® =¾6ÎwÊçë7­ÓʵãÐ ì~6Öco0Ÿïìó|_2Zç3±Ír5î/Í~ÆùZ¿=A7µq¾“±onzg.°ø~—Ø/ÏnÔõ‹v?‹ñ²3Ègº™ö£çù’Ï×¢›^†­²Ÿ0û©ëãûp½£Ï×b¼ì*´½ù|™Ý¯ç{[tS6ÜëX3ºé:åÂqvb¤Û=÷=Q*'æýRAB³ûí 2¶³óç{[tÓî¾C÷׌núr­°ï‰RÕÙ/_#—´ŸÙýö§ÔŸi¿ïߌóöà´–øpŽýîWÁW‹nº ûUîìôÝkߥÑ~© ¦ýöàÊì~ÓÏt»-ºézìwßè¦÷c¿Ë£›®Ç~^Ì)öÃØÎÖßoOpJý™Ï—ÙýîÝôaÚo¶å+“–,‡õË+žÜò%í>_Ó~»—êÏ´_òù~6 |¾¢FµíFæî5£›®Z.^Ž;ï{¢T3ÚÏì~;„SêÏì~‰þûZl碛®Ê~wnºN¹Ø©é !~ß}O”jBû Ÿ¯õ÷Û lœï¨Ïw×ÑMoÁ­ÑM׿« ƒÚÏúûí ²»³·q¾l¬°EÅt[ª·•k½ff¥\«¶i—¡Sk½ÅvÞ!¼ >óùÒXòùNTš§âÆr­v4µrmìÔˆÏõ°gºí òy¾æóÚï|¾ƒt±z°0Ÿ¯=Óm7P _Ó~µþ~Ö¹ÕrmSçË|¾»„høšÏ—Æzö;H¯‡ßÍl³\ÓQDŸ‰©óec=öÙßÏÆù‚ö«ÇvÞR´Î­–« ]…ð½%5u¾Æx±gºí®/|¾;×~é¹^AûiöÛ˜é~›åšŽ"úLL/®ýì™n{ pev¿ÜßodœïmÑMÇÒ^‰ëûÕ­I–Õ(¢å~ŸÀ×##ð"¢ösÐÝëáE3<*´½ù|ïÛ¹X_Yy+¶Ê~㽊Ÿ+Q§Ø/?Ñrûg³ûí2¾Ÿù|¹Ýo:ÆKß"¨ ÎñmÕµ{ŽçZÝÆ–|ï±ÿ‘RÕF”ÑH7^}ætIï]2štòŠô,Æ‹i¿A*?óù²/í¤öö£êZVe5²·ëî:ÐwQ4ÚܪfÂñÊšýÑÉÉ•º•WÏW.‰ù|÷ùH#ç[ëqÏè¦ë³_É+ÕŸÕ0K¥V’âÞ±;O/çk>ßA*?çû£ûî ¿ßtŒ—«¢›®Ä~EÑNJÀ®äœµ0G¯xŠý&|E·—Œ&‹óeÚoð\ù™Ïw@÷-?Ï×·“‘í‹v¥à¹´ £ý¦æž©ýzÉì\•y’ÑdEûKG|¦Û§i¿Ý@…¶7Ÿo÷=ÛýÊþ~wˆnŠ“w¸tÛý˜½ÃîÇJ5m÷SìÓbâ ìç{½¦ýöÏ•Ÿi¿ñþ¿ä¹WE7¥Z~;.÷ù®L/©T5í'tp—À™a²JºFÉh²xJøï‡–¯ù|w©ül¬Çìö™éï·Ì–kM’Åhѧ”†cê|A?Ó~{‚êìlã|kýý(Zç¶Øo®\Oá›NKò|ö›8_±¿Ÿ³gºí N9>LûýýjÑ:·€Ùrm¨´[8uSç+ôörÛyg¡MÍîGÏt#ígøúãœÌî·;HåçÍçËúûYlç«°ÅØ~SåbÚïôÓ®úNP¦Û®µß·Ûžç»Õh[-×V£®òø~e¹\f?‹ñ²+H¯Ùý¨¿ŸOÏómÇvjÆV˵ը«œ•Ër¡ö;›Ýo?¨û|w=Î×åçùfNÙj´Î­–k«QW§ËE>_Ó~;‚njã|öûí'ØODëÜ@GŽÑ(¢¢7ó3J7Þ¯Nú{0fâû™ÏwwÏt3»_éó­Fë|n5Ž"* ´Yö{¦c;gíg1^öÚÞ|¾:¶óø¸UÙ£XŰ²•«úLQ1¼µ[ã#ðhè]QÄ^.Aq] R¾k¹°@\ûÙs=öÛÙ´ž¯sçqö›ˆg*Æô¯†QDË©G³_}±Ÿ_òùNÚýx•U-ß¾[Ÿü–ø|{hYjµµ.&}¾a:/€‚1QÇ£›R )`ïY.¼hÉî÷á]4ûܰà ÁÆùŽû|«ã|ÖŒõyæšr=MûݶsÝ ¾SÑM£ö‹Ïtk~šöÛ dwgóùv¿j´ÎY¬Ï3—–ëv?Š"ª5Öu¸û•åBD»ß†yÞ¶ëÀ ê³q¾Üç›ì~×á1ÓÍâûí ¢ák>ßrœï Dë´r-Àt4XÒ~gÓ~»ìïg>_òùBlçˆÖiåZ€&<¸ßZßY¿]ÂõæósÌîçÏ’ý^(Zç3±ÍrMGƒ5»ß¡\Ù8_ãeôiærÖ“0Þ¯ŽÊôŒÒm3ºéT”Záóý4í·¨Ðö¦ýºïßÄX騘Ûd¿‘™a›ÑM§£ÔšöÛ#d|?óù‚ö>_:]**&jƒqe½œ•ßq¸Ãôˆ²©è¦k•hA¹äà@9D°!•Ÿù|“Ýïü›=Ïw**¦®¼ŒUóøNCõf£ˆ–S+—ha¹Š‚•'/èž–…é(µ)ÆË‡3í·'ÈG™Ï7÷÷´_Åç;­S|zAÛïX¡g"IÌš%ZR®1Úsr³û”j2bðù¶G‹ï·3Håg>ßy¨_Ô~‡‰–ïûQ€Î²_µ\… |<ûÝ!ºéÊÚ±Ÿ7»ßÎà¹ò³q¾?˜Ï×·Ó^:û=k&ËU›Ú„öë+VÈzù®ýÌî·7¨Ðö6ηç;k÷ãÆ{¶¨ºäév¿5K´ \Šý`ZL¤ÒÜ™˜gµß þLûí ¾íÍîÇí~%û•>ߊG0ÕçRÞ³>_ÜsYÎuJ´¤\ýåÑMïSª í|¾ÁΛÇxûíRùyóù¦¦ÿÏéþ~³(+­nÕÝŽËË%w~ÿ%Ü=ºé]0 Ö‡‘n¦ývÕÙÙ´í ìGQ1·Å~•«lE®Æ~e¹în[¼ÓÑ`í™n»„SŽóùbŒ—6óŠŠ9†G°ß…å*R­Å~µrݱ » ì™n{„ mjã|ÁîǵŸáë#ú|}ç’ÙçÙ¥1<RùY¿â™nÛÖ¹ÕrmSçËç–¯i¿=Ážé6þ\2¾ß¶hf›åšŽ"úLLE]>_oýývéñµq¾Yû}ÖÆùú-EëÜj¹DZ%&™ŠºêstSoÏóÝÌç{Alç™î·Y®é(¢ÏÄÔùÊv?Ó~û‚njv?ßÏ·Å8_‹n:‹jÑY<¢œSq}Žpev¿=A>ÓÍÆùrŸ¯E7½Õ(¢³x6û¡öóï¦ýöÚÞÆùòçzœæGº¥Am0®¬W£Èrâuêö­ÑM×Au<-•‹¿+"ËRß½d4©®cß™Ïw±ÍîÇ|¾Ë£ô²6ç¾zóøÖè¦ë`<†2Ä´ª¨Ñh\÷,M×Ñõ­·çùîN©?óù¢Ï·xžïõÑMÈ~Lã1ÊSØéW³_ågq:u¾|ïa¬‡ù|wàÊ´ß”Ï÷úè¦k³ßåÑM×c¿É8zºŒ#ì·Jñ¦Îó5í·#8¥þÌç;þ<ß룛>^ûÕ¦6 ýúeì÷íg>ßýÁKõgã|ÙXûF7½?nnºÆ´Ÿ yH‹žk÷#íg>ßýÁ)õgÚ¯çËÎgj¤©–o_‹nzÜÝtÌø|{UIyXâ•ÙOµ|Íç»OØ8߉ø~ãÏt›ÅzìB¸5ºé:"Zßù#Š%£Éâ|™Ïw—ÝÍç+ì~EtS·)ö»¨\«6wÅ~*QDÇwþHö›8_æóÝ#¼ >Ó~y¬Ç'ñrŸè¦÷Ç­ÑM‰Ñ?°LSçË|¾»„|ž¯Ùý~tߨý²Ï×ðõqwŸïï4OÁK¯jøÚ8ßÝ7°ûm+>Óë`‹±ý¦ÊE>ßJlgpÖÐ÷,:ÑjàےϧH~*9W4íýÕ>ÏpìžÙƸ¢ákã|ƒö“ÏóÝj´Î­–k:Šè31U.îóý¬²_•µj Ù„š—]ªŽe8³'I° ¶¿V«³ξ÷©þ~f÷ØÏÉØÎM0‡ã{;jp«åšŽ"úLL• }¾5»ß8kUò ®‡øæHVs˜g¿é‚Ýý&²xAö“AÌç;°ßœðùn5ZçV˵ը«Óåb>ßáÖ/;' eÕñ`L váï«DP&¦"mÆrmÙ‚.ÇrVǧ÷PæÌ6W§¥l­÷¢ÈÀ¹ã”¿y¨W¦ý˜Ï×¹3c?­³vÛ{ðU"Êþ²Ò<ª€/Ô?w+ŸçÛñ^ØXÓ"Øõr®d=nŠã¼(ò[S6ò?U±èiŠÃE,gö3’3[¥$x,Cܬ< mo>_=Ö£­sì7ß«xT/¬[2š|ö“>ߎCé—NÔØvY°ŸNXSy‚ØJaVV;*w*s–»ç¨Ð{…Ãëüþñýlœo9Öc<^þ7²ó-ß;ýG[ £ˆòB=è99)¶ϘX—·dëo:±SÑMås=jì§}¬²_¥å«ª]È Jí§sf¤›à9ßÈ~í÷Rô'•Ÿi¿b¬Çû©¶Q/þ,ꟶ ¦£ˆöì¯ùdmLE_@»“:U²¨¬´Õdw,WΖù|Ï·k¿’ &©±ŸÜX­—‡]æ\M(÷r!ûŒ]ùfû«PþÖ!idv?ãå<¡ý¦Ùoý?ÁL½NMöÏf?^¨’芪êÒ=NìtŒîóÕwI»¦Q‹zVTI2¸\_É¢<^ÁH_®ýÜTË÷éì7].(Rþ•ÿï•KF“•¨«‹ØO×î{³_Q.åóíÄ©“ì×krô(X¢Â~Œ¾ØU¡­å» `Nc9wÅæå’JÎΑÑÛ¦ Z.·ß:ß%v?laŠ™'j?)\G?ä/:uU2ôŒÝ/YÉî‡ÚïY±/c?Ã=á{ØÞÆùŠçùž'´ŸW¬Z =¸"ªå"¾ãÅ+7ë–Œ&+QWeÛOQž:âŒòd÷*î$ôwpndœïº Æ¨áÑÊÏÛ8ßîû·©q¾›ùŸnµ\Ëž²>³t,ÙM41Õ1h?gÏõØTgg³û1Ÿo²ûu Ͼb€­–KDU-Ì É~e¹¨ýâXv2‚-]Â)LJù|‹ØÎ†ËP#åQ~~ ûMÝ, íw#]›ým2´©i¿ÒîgØ\öz`Œ—{³ŸÑß!•Ÿ7Ÿ¯îï÷šÑ:Ÿ‰­–k Lû~®ÂSÆ~ÛCý™n;çšþ?+Ït{¡hÏÅÑÛR¹¦£Á¢öËÏtã}‚yw¦^º¬;•¦G÷?L׺¯|¤†Å_ëï7°=×C±ß Eë|&ˆ•·T®Æqh‹nÔ~þ#]{jù"•QwqÖGtu—Cw‘ ÖÛ–‡jß0Ÿï¸Ý¯Ð~ûãZ¹.Át4ØãŵÌç+ØÍŽLˆ4ÕoÓ~„njã|åX³d¿J\86ûðõx¿:VÑX©UÀmÆ÷›ŽRµß±ðùÖØ/ûŒ¯f?Ãf ŸéfÚ/Ûý>îõ`§ë5د2YÌ­‡­²ßTïð1ŸoGV¾^ÞMˆÙŠ4߆MA…¶7»Œõp®Õv¿"*fþd-5A×¶¤»e¤–Æ¢(¢¼P$ ×*Òòr±}óR”#ïÕ|žˆ‰3|'»óù*Ê’v¿J˜åÖ«ÍeV›2ì2¶³óMÏt±ûU¢b Ã7§CÞÞ¡%]wG®™Œ&Àh%Ÿ¬V¤Ùru%óND9èeÁo+ÕdŒnã%h?ì- ,ä Ò~y®KïI5lN©?ç‹v??Ýòd?mí)WÜŽÉruj’вf‘fËUœ£êHa¿µú|iïsòX©Ä©Dóé „ pev?çëÛŠö«DëÜû•å‚"‚¡¢<’ýîÝô>ì7«'¶{ëïÇö~ö3lN©?óùFúÿ|}í׳j[ïxöíWìwKÚ/Žõ8‹/² [Guà°áà¥ú3íGýý|;Å~Ì„Ÿ*‘˜©4ðn÷ë9ÊR®V¤ùréÖù¤Ýïžä<¥ý²Ýû| {€SêÏ|¾ÌîWô÷+ž„Èj4-òSÊ›û`ηÊöJ­³u‹4_®‹#ŠJ%®Ÿ¿;”jÞçkñývç;þ<߉þ~ƒµ6ï†˵F‘"Öˆnz;¦£Á2í÷9ã…ntOY ì,}Ab¶ãÚîÊÛ»éÝy_3›/M}oL왺ëâ·ìîl1^xlgHìGQ1ݦØï¶r­Ç~e¹ÆÛ¯«2‚\ËúûÍÅ÷«hØ©½.Y4²¦$5¶WŽ²ß ûÅü™XVŒe«tšE¹ðEþö‚úÌç›í~ŸÍÛPu³Ïw¢Ò,ÆTsc¹Vc¿Z¹F‹ø<Á Çù.³ûqkÇ8«Sâ‹FÖT©˜[‘ýÆewùÅ|ûQ ÙE“Ïó5Ÿ/Å÷CŸ¯áëCÛý:¬Wc¼µ©“¡åªÊÖ$¨æ³9æ3bwäÙú÷¾(µ=c?HSÉ*GÖ(Å õª^®‘;-r.n³ö£4ªákÚ¯f÷Ûh´Î­–k«˜:_ÿõ®ã¥.-8“°–Ÿj[k¿b«š£ŠÏ¸Hd3;ï‹å£Do©¬:îÑ¢LGÎ\§V—›(¯8@}\Õ *¾æó>_‹nz¦£ˆ>SçËç–o-ÆK\ûML°_MŠ”Œ4¶ÉtÑÖÚ—¤¸úŽøD×é%|Bì¶Bjz§µ®§)iyä¸d?ç+úûYtÓ+Ðøà=…÷–lSç‹´_%ÆKõаy-ûIµÕWßýeìG§eŒýú‰âPQÅ[éR—{Ÿ<.JáúÂçkã|Áç«úûU„'a›åšŽ"úLL/¦ýÎ…Ï·zvï¢ýdqÖÕ~·ïk¹öÃé‘Ó‚úhÊSWç;97¡+ÇE \™ÝïGîó5Ý߯vIÎ@ÛŒn:ETã‘'mê:²q¾?ëv¿º9½«Ùý@ßðEzC¹EWhš2<¡K4BJwÛ—8ÀrG⋨¯Ø±¢8^8ÕzUIž¼`ꦎK^YÚÞ|¾ßïuÙ¯2YÌ­…jÑ­²-ˆ®þ„/§7æåm´‰A‡Ã¤ L ‘*z§+cÕ§‰{Ï´TìŒ%ׇ|ï}é«Ú\í N‚hÊÖsÆ ¡Õ¬v*¯…Üoq“’Ç¥ÒòÄ2¾Ÿù|'ŸëqCtÓ5pctÓ•0M€ý{võ9[©d4){aß#1^¿·]Œí—p{ÊÏ|¾?rœh÷»_tÓ5pctÓ•0Â~• ìDA×*T* MŠó~ Ÿ¯a4²q¾Ùî÷{$¾ßu®Ê~ŒWødÿ0ö‰¥RžÍ…k“Î8ûe»ß±sãeWÊÏÆùŠq¾S1^6Å~G7}¸ö#}vµpý†ÛD¬>Î÷lÚo/ð\ù™Ï÷Øýø|·Ä~G7}žöëõYRÊt=Ìj¿)»Ÿá+B…¶7Ÿo¾ÿϱs-¤J¤š›"¼7nŒnº¦µß”Ýo­aYh²f÷Ëã|Of÷Û |/Û›öcã|ç}¾ü—9{ùY«^ßÝt%Li?Øs'ŠÙ eºæ|¾Þ´ßÞ •ŸÙýx¿qŸï&°ÍrMG}&æúûEíw6Ÿï~ :;Û8_|¦Ó~­sC,³Õru Ï.aê|± {€SŽ盚þ¿Ãý3¸ ¶X™7[®­bê|Ùs=öÚÔì~¤ýZï,ºén@v¿“Ùýö©ü¼ù|)¾Ÿ±ß~`Úo¨?ÓmçÚOù| _ö<ß]Bz|mœ¯ˆïgõ`/(žéfØê>ßó1^hœ¯áëŸéæÍç»#ˆà¦Öß/ô÷sÉî‡ã| _f÷Û#ä3ÝÌî7°ß·ô<ßAú¹¦sž¿Ô쫼ºøø{ñ—¾°ú¹†=@…¶7Ÿ/{¦[`?~®šÎÆ-#›»õíÈOž¡Øòm?¼;Ø8ßý@Æv6í§}¾!Þ5¼œœ}•Wè·³ºÙÞG^Øäõ0í·+пÁâûE€Ý/ø|©V9û*ˆÅ¶—|¹Ú…5»ß¾àÙ?ÂÛ8ß|œ¯s§ùh¨¡!|~Mö;wý”Öö>ñª:¼°þh1^öÇþáeã|ãýÿó-Ô {]¨'¾A2|øPì§+­í½\d¿Lé:·ÛygðRý™ÝO=ÓÍ%Mð'x{³ö{¶ïB«_쵸¥µ©Oü³Çëêá¶Þ|¾»Cþ'à¿Â|¾Âçëƒ/0Ä áµ_ŒTót¥µ±—OÚÏç ›D½om¬ÇÎÀo†Î|¾?¤ÝïýÀB% "ª}=í}¾ÏW[[úd tùººö0\Øp²:g1^vläoóùÒ8ßàõø¤ëŽ ¾¢öó™ÃWVS¯ôŠ$è’Ýï˜ïòØÛ9Ú|ývÿ‡Ü°q¾‰þßR­ˆÁ§Qîv¿öu>.k¿ç+®­|ð{¸´á$%ûnkýýö- Lû¡Ï×3CŸÒ w€9º§sÚEüg>_þÊ$èúdˆôî,³ûí ªákv?ëíA.±ŸÁ,°E™ùeÛ¿.ú|Ÿ¯¸¶òa/—Ph¿³i¿ý€Q_ü6Ÿ¯ˆíìšssŸS3|:n·°àp _i&MÅd[›OEïTµßñ IÐÑUmÞ“Æ÷­i¿}Aö÷3Ÿ¯èï7°ß×€¨ø{þ ª3ä‚oßì~{¿)ÆÅîí~ø<ßhò«{eWÇ8„ûÃã·à<õ÷;™öÛ dÍèlœ¯|¦Û³/áa€gº5?Mûí"~Ý¡³q¾ÂîÇ•vÆùüÞ8¼“ŵ·Ç“¢av¿}Á÷ðwð©Ó§Ùýâý?óõµ*bøš°þ~»ƒÓaÎÌçËžéæœÓXê½§«˜cƒh>ß½Á—ìgÚÏågºÉZ’¦ÄÄö߬ŽÛ›¿ Y>_ëï·¸žÕ“sgc=êv?`6Á f³àuüÙ|³­7œº†ãewHÚ/Ý =j¿ó>ߤýDÓÈñ I1[}±â8à䤫œ¯µÙýö…¬ýâ?À´_ŒóÍ ßÖà Dñb»é”oÛ$ýàWëœÇ[Ößo_ˆÚ/]}o>ß6Î7œVcZ À8ïÙ5yâ•/,–ß^ùEg$ÙûÒT|¦›õ÷Û\Ÿêu”4æóýÁÆz„ ¡+ ð_ËèeQ…KCƒOð³þëÜüG#7‡3N½ö'œð_wøÓÿ^ý¯<9 …·÷ÁîçÌî·#ø°.Ýæóeã|©yë²m¨MòÅ_þró&vzÊøÞ¯…h¢¾OxYòu 8}dígv¿ÁÅÞÎmú/œÌîÇûûqñLèc¨+b@f;šøŽF ·ÁÝ‹ý¼šlº|m¬Ç΀>ßðv?çÛ€Ýå5#çQå%?Æ‹Æ~·#9èîð`RäéžvŽ÷Êúûí ñ¹ n¢Ï×Ù8ßÛ9Ñ–¶û9$Âô +ß!å1ú;Xº÷Ò~žýútÓ‡YÓ~ûú|}k>ßn÷ˬ×u]ø¸î#&‡Õ]þB Œ'ÒSš#xILûÝ.ÆÕÎÿ×[#þ#÷ _g¼‚f÷ÛbK":}s0Ÿ¯ëm|.<÷ðf»î;6uÛü ËôDXÞ£D Œ¸èl5êV¤õ/¼£xwÍ']f“p¡«CrWÿgªá1ð`GióÀq¾¹í:BÄêÑuÇÄvÝÇ1Ö¥a¶óqY†C‚cЇÃtܤûtù<%¨ýºz½Y\Y]Ÿ RU’K*Û‹E ’`¢ee¹HûqÛƒ?|×ÕdZu|{üè¸á– ‡ÎçN_¦ýöìï(°1»Ÿ|žo®éi¾CõêBã7˽(]—IñÚÅ]’‰C’”ê>±ZÝý–]Ö:‡Ý“ý.)Í}à³ÝÛ®‘ÊÚÜ=Ü€€Ðè—:iÆËÈ ·ÄQûÅ5ñÚ¿›öÛ @ûEœ³Ýï¼{í÷Ù¼±êjV¢>iy ¹¨9"ú´*ªÁÀ‡±6R g›$Sq ¡s²¶“k;Ò|]±qm‹”N¤ÌÙ‹Å*ÍÄ–j+¹ëJyW¡E¦ýÐåžú …L¸eÍ-µÝGˆàNGx IDATÙæÚ.ò(Ú³ø#JÌv¿¬Žpë_¡ô† ì~žõØy¿<ÖƒìwÇDp‘Ô|êx› O¹!œ*PžKS‘qý@¼!~:$’êÚ^,ïUª®d‘Vå·pñLµ›¾ïÕÞaí½‘í~ÌçÁ¼ñxÞé:óͪí¢=nZÜ@‹ãvÀîç,ÆËÎÀÆùÚXðùbI,—”^$À#Ü/’Ðû€&o »¬ÿºÔ˜"4šýrKx„ÕÏûi–ç1ؑ̊°rzjKµ+Ø¨× îÐ~dЃv­ƒ»ÎpÞ‡ÿ'_0Ÿ®‹‹Dòγ®KÙÕtp•¬¿ß¾@>_ç››þoŽºì×Ãý‰ ìÃt›lƒâø“õ¡ƒ6²CŸ¯h„IÈfý²ÊÓ©êöšêhGHiTXÙuõ$½\ô4ö»_¢?Ò~qôMì“”n@Y º,É;Ð…5í•ã¡°i¿}}¾¹Û§i¿ÜôKÜçr›×·Ùœ›¾™c]ƒæoìçþPªA¦zÕhöc D©«úŠÊBšÑ©êì×ijƒËÏ8¸ïô–y¡ZôlíÇy {¾róG¸4ñæãŽÁÚG­bŸÍµ" |’oß|¾;ClI¸\Ó-¾ß`÷ q>~ÃH7Œæ¥à1[Ê)$.K½›YG?H‚#ÝXƒ““4<+¢OÙýÊŸù5•ÅÊX¨Í'áGP+ïÚv¿l«a=,³m¢û“n@ù>ÔÁOwLìwìœ/0tCŸïÁ´ß^àcì Cø`ã|öû†Ú/õÊ­ª./ÀÞÎ0¢—œÊ_G Atäó%jMUÈ7åŒUâ­œ+·ìWY,´`§Õæ9EÓ(†­ðì½ÁÆz@ƒõ_’u‰é˜„x4ÊF-N–[ÖæÅ)a÷‹fŸJoØ : {žï ýX?1vÇð¶ÐÕƒþK“ÔÕ%§™ç[¥‹å ·Ö^Òî'×Ðõ8RWTäÑøêòpÚ1OùÔß/uk7»ß®àÃ-5¾ÚÞýòýÜÎí~.óe£w(ë°¡öcm\$G$IÜhFOûÍì~šÁ<ú7²7*_1ôëBçtpcµåcXxfg°Ùýv ? AÓ~l¬1Qpð³iàvÁj“ª˜绘è6L~Ñ~þ—ãªõÜÃ.ÐéæCB<ù@˜‚'½˜–Å–¯ŸïÁžë±ö‹/gc=ø8_¬'\. :ÞÊ¢Ç~°e°Âb¼ÜìïÇ®Ù3Åty¸×8qþ]¾’ì:Ñ],,9wè<1í·/òó ývîó•ÚOK¿44”5n=T2ŸIe öx1Ü´û‰h:`œ@y—ηô¸ƒç†Ôy#}¾f÷Û ×+k?ªF©Î°‘yŽúÄ øÀ:Æ„`Œ!g¯›^Iû…. ô¨£ðá”—žòº¿óoN•°Ç$`†õv6í·+8¥þ‚Ñßc=b¿¤ýZÏðÀ6/Ó~¸=øí~Ð*ƒÞÎϾÎ_Î9ß­¸©»×Oc¿ÀKõgÚ/÷÷ËÚÏçPpм¾Ï`äcd÷Ù>snBÔØkÉK8¡&°(‘Ø,¶\~Ï®•†Á)õgv?Öß,FÌÂÄœ!úoŽ7€±Þ¢}Êp3°k‘wâIJ“‹>à”²ÅkWOÕqx· ^6»ß~à…Ë´ß®Çzäþ~ž|¬cE œew >Ÿ·SZÐp3ˆ²DOÏ.Bö:9vU€ëÈD« Ó]Îì~{ƒWêÏúûÉØÎ­¨HÕªÃÛÄH~ÐF>VÔ‰ár¤Ó˜é‚Іßmh^°tÓ&Zç·MøÖ|¾û‚—^Ìî—úûý c= ÿŠ“¬× é×’/˜&ãàßæaÁ±WEð=†ÁÔö¾ê]·álöý¯»W‚<ø6ÎwgpJýY|?®ý"{ñVôç“yl%{ z€â/årXÅW¹/TŸçëù”YEZO)ð¸E*è| lk×j'à#=Ìîнäø~.=+6„ >º+ T<ë-.OOËT—£µ_éf5êV8þ4ó#¹°ÞHâE$©ÄëÄ—´ÉoÞ>ߌýv/ÔŸù|D‚ ÏtsFl¤ ø(óx:ÄŸÎócdsHõ°2>M'=\‚¬€ÉîgÕê`Œ 8nî8A¡sKDK <]Ê ÎRy§NÌå'0ÛeÚ ¼løšö =^Àç›+>ÍÜÓ“r\xdG ™~LËÓ磓ççzt[Nºu$ÙGÑME¯ó¨½áÁpÃácp\ŠÜÜ™}ùÓÁÓÌÑç;À.Ò^Àm~Þì~Òç›eE¤­D}>>»·KÂ".Wï…‡ˆå¸ÂÐÀ:ä§=ûr¿0”ö£þ”`|È¿ÃTyºeÃì1ý¸ô°_dLôãÇgº¥†²ù|÷Ùðµq¾iœoòùâhxx^"<4,µ„áy„ðx‰#>ÿ Tùy¾V¯®ÅvÆ–ÔÆõ‘å\¶Mø.ߪðɖǸ,¸Ï—È5ðÐeóùî Üæv¿}k¿xÿÿ|ƒq¡Ñç­A]`¸ô ì\Y¨Eì³çãè#+ó è h^ÛÏõ_:kÙ&a—šÀY¤'ëë1ÙmáÞåÈOÝ”dlç³i¿ÝÀ‹®Îf÷Sc=œÇV•ï†óàúftzzvP¾MdØÆ‰¤õ¸ð™n¬‡%5ƒÃ9Ï-_´Î‚/.û =sƃ7¸õi¤[kÚo(b;›Ï—óm“v8‚Æ;Æê•j]êä‚#¨´2>YÑwø˜Xgc=î€ÂîG㇉¤ÏÉò ,¾ëøî%k?Ÿµ_cÏtÛ ì¹ÏtË]#Žl`Šu'ÚšI<èD–¤:­¿ßFºý¢³ËbN´ÇÌ{ÉúêY[7‘`”íbPvø;t¹“¦ÅvÞdˆ+‹í,ÇùRýr`fÇz‡A’ó;È8O³è•´u3’ݯgÝýZOÝ÷ˆú¢ðò¤×S·MéôW³M-ߘ…ù|w…êó|w?ηùlÞã¼£O®1Œö$Ä `c¿›áeŸ/ïÐìÅ5н0AßåYqbž’lL#ÝØ8ß³i¿ý@*?ëïWÄvvЖe5#Øó¨Í|$V9ÑßÏp ’Ýï—gâ/EPw’ѕݯä]éˆ3\ûùð´QXbÚo_¨k¿½ÛýÎqœo®' X¨f0aíò< Q£i¿;"G¸B™ç_ÑßÏ%+Ÿˆ £‹´Ðí™H2¾Òšv^·#ŽìÈ“™Õð΂*œÛ_)|3:ƒÙX·”ÍÞ´ßî`1^&Æù:Ç »aÀ›KGfíÃ&(’÷Š6\ò&ù<ÈÃSÄ–pº³€ã¶Wv­è UG1¢B¼ãó|_7íë–ür8¥þÌç«Æzx¡ýHk¢I…b*6Ðo,û*¯|Bù@kêáÁ$HµœÞhš[qU£×cZû%bÀOTbvßB!à‹ÁÝÁ¢ÉRäTË\lU¦¡ãûü¨ÇxÙù8_èï'èŠx®¥‡F8â¹dís¬FÂV¦ýn‡§~|$Â]¶F€ÝŽq!ÏAÝ/E¯tÖMïcs>ß®ëpVLôc ¦ «l Örž¢ÅZÞs…gĸ ô/ ¯ÔŸi?ÛYö_‘£8dçæøj¡F‚³­í¹G.u…¶Ï… :N^ØêÕÔ&¯݉”A–C‚?Þ¦âû)ö“Ë'La”ýpW,Å%9O²ßDŽ»a?{¦Û„Ï—hÍ‘8‘W0^ÍR•¤ ‡ªÚ_ö¹ü·8›òôÂy¥»·üáõI‰â .JmUlgÖ@ì°½«ÔWWÈ'JÛSÑ\Ž™à‚z£Vp]±Kž¬Ì¹çQÉ{¼ð´è˳£>çv¿ðgøÌþ|ÐOeѲû\ø‰?lÑýðywh÷C‰$Ô^§Úž5¶Ðl%6ÏY¨æg©ÏºNÉ/Z$Ìu|‘ÌYµ(òxá{™ïWFý™n;×~áþïƒ]ýÑgĉï.¼ÓV„©ïiJàhŽ~\ú|9Úô¢éa*OÄ÷÷tªï‰ït©“ö+-c\_ijÒ,Ti:–¼‰Æ,Ÿ/¦+­RµwÎÚ±0<‡…×3_N©?³ûEúw‡×Á§¹[6¼Ü!~§¹³\7ÿr6½x:áËÎï%/¹¯pëç<–£*Õ vYÀ~9Wd«Ú®—²쥞÷há{E‚_^ª?ç›Æùrœš0ðæÂ÷9ÍœÙ4þ–3³‹ #˜<_a%]™ûæ8ˆÉsø®á/‘;údÚ¯ÂZSÒ«5SìGËÇÙ3éböëÅj™/)|m_N©?çûøíœ¾X=<7ooNp£¬žç†6Ég–—LR&¶i5-ÏÝY¾NMŽÔòž78¥…‘ÝÎyâ¿„•MŒßã\\z’ײev?²¡u`´›1U8Šg6F§ÕÖîTâí×÷¼È•¼' ¿öó²ákv¿Ý·0Ò£ù9Üþo“~óüù-õLSçð×ÂzáügþМM/ŸŸŸð©œãß }Âëçpⵊ¿ùÚ„µ'Ê'îcøÿÆ-~Æõñ“óe-Fjö²‰Tu:ÒX<µT}bUÏéE44ÏTTY™˜%â­m‘˜µÙuÞS…ç ùÅùO¹=ÌçÛù·„ßùóFóÃûÓ{˜üMKÊ··ÿ ß|Ü4O}ÂÌ'KfÓå´<÷ìT³Ó¯’Ô6ЋýŽäŸ<ù=ªüóx£lÉ^³ý. ûûyÓ~?tÃþðìZyne¿=Á)õ·{Ÿ¯a:—ºEž^¢–ýØàWšüú´ðüA¨÷÷Ûó8_Ã"À£ï,žáu!ºYŒÃBtÞ½ö3*¨÷÷Û³Ýϰq#Ú¯léYëÏ0 ÞðµØÎ†¥€áÐ Øo M¤©Û|"݉Î`(PïgÚÏ0xôÝFدº•±ŸaÜægv?ÃR„»ä©ù·ûç=e#dš‰Í§C·Ü£<ÉÞÀ½\d0DÔãûíyœ¯aº`Âî§g¥™NÛ*‡†Mn>–˜¥—äÊwc†@Cnó»Ÿi?ÃÀî7¦ýŠq¨ú·[å©6Á~˜3 Î^¢Á`Ïó5ö» ðø“Q»5P¯a¿êæ’ÒTrõ-ÀÆ{†**Ït3Ÿ¯asÚ/¡lºö ٯؼÒÖ)ý Ážçkìwæúû)".Øì»Ð¦<ÎQåæà%©$îÇÙÏì~† Hågã| Ë0«ý”³¶ç„Õ16“i&7g“zâš>äÙ\_M _u»Ÿó5Ì [H~nd¬Ç<Œû ¤ò³þ~†eXf÷36 óùû]…ó5®€/í~æó5Ìâ‚q¾Ã6aÚÏØï*dí÷iìgx]˜ÝÏØï,¶û™·Á°UÔµŸó5Ì [Hæ[¾²ßDrãQÃQéïgã| ³XKûûëaìwâ]òç”Ï—z !ª*Ý•YïçJi¸ 74Ü 6ÎרïÀs=&¢ôD}zH[1T­ 6±•­kcÖ wÅv6ö» ÉB27η¯0×h@žPŒYËä”Áp¼Ræó5,A÷}ú™nöCŽ«Æh‘Ú¯+ Ñ8ÏpgÔc;Û8_à ºoÓ>ß’ý8 VRK'‚_•Ë †{À)õgÚϰÉB2ù\^’…¨š¢1KÆÆb‹ w€xš¯Ùý K1?ηˆ:…!ª&¹‹Ú»ÅS:ت»UÞá”ú3Ÿ¯a ž8Î׸Ïpx©þLû–aÎçk0lN©?³û–`Îçk0l^6|mœ¯aºo3Ït36åö°q¾†EHwÉŸ¦ý ¯ ÙßÏ›Ýϰ ù.9Ñßú6«>ά#óȆküÓ †N©?óù– [Hæ{;÷²×J?ÛáÅœº†Áúûû]…eÏóåÓÆ~†­A t3Ÿ¯a!Ò]rÜîwûÕFºY<+Ãʨ÷÷³q¾†ÌÇxÑáø”Ý¯HÎÓöbœ‡ÑŸað†¯Åx1,Ä÷»‹ö+<$j€Û=ÿðÀâûû]…¹çz\h÷+µßXJƒánà6?‹ílXйçzÜn÷«§4î†z|?Ó~†Ì=×ãŸoov?ÃCÀm~f÷3,E÷ýÛBí'mz|bb»N< é¾yƒ!Ážçkìw:·ðy¾×“ç*;0êÏt3íg˜C¶ü^ý †µ`Ïó5ö» s>ßaìgx¤ò³q¾†eŸïÙhÊðª¨ÛýLûf0ÿ\ƒaëÊÏÆù–a¾¿_öìV{îYÃÖ°ÔµŸó5Ì zÇ>/yžouíèƒa}øÒîgÚÏ0‹Kúû- 7c?Ããav?c¿«Ð¹Æ—Å÷+àsy{X¥»?[„+ÃP±û™Ï×0‹¹çùŽE¸RO'Ñk#Ý ëôŸ±ßUˆv¿ß—Çxù.ÙO wG¥¿ŸÙý ³¸ ÆËhȾ…ìg0¬ƒúXçk˜Á|lg>¥›¸Æ~†-ÀÆùû]ƒÅ>_â±ßE.dì7ÒX6»Ÿa%Xlgc¿«|¾—õ÷ƒÎÏò ¿UßFé 6î¯ÔŸù| Kï’Ÿ«t3î3¬‹ílìwlœ¯áõá”ú3Ÿ¯a æ|¾Ãæ!žækã| KaÚÏðúpJý™ö3,ÁÜX:.2â­gñ»Kš%››ÑrÓðRý™Ýϰ ù.9Å~Ìí+W¹ ã›ßê@Ü)WµZ7¨¦–¸LcL¸98¥þÌçkX‚Ü+þ÷DlgÎÕ.Í“KÄ„kãD2A1•­+}¬G™±ªf¼ßqù#ìK‹ø’ E•ÍÒ2.–ÈSFV+s®Ð™j\wü±ÂE¢1jû¹¦Ñox d?oã| ËÐ}›õùޱŸà&gj³bŠ1ʈzS²ÞûûªÄàâ;ÕGT æ_R®a3pJýÙ8_Ã,ðùrN yÁ‚ªìWÆ ì%£hõ§T|&EršÜVÙ£¦ëh?c¿-¢ÞßÏì~†dïØÔH·Ù–¯æ¸ µ_×qjIøªÑbôš” íÍwß52³–ï‹C t3Ÿ¯a!Œõ‘l|¦&Õtâ öݧ—¥á®Èp²HÓËù,ß0M†-Àúûû]…¹ø~ý8û)JCYÇ—,a?žN[åD^”Dæ,¤'¦˜f¿³Õ}Jq¶Þ𵱆¥˜Õ~îÛšk¶#gÁˆjbcʹSõj•$±1=&Jí_µ9O¬É¯¤¶’ôº2‘áɨÇ÷³q¾†D ÉÄó|븈.I|µT®—bÉVÆxÛ·ùYŒÃR@lg‹r`xYX|?c¿«Ð¹Ø3jýè¦Ãjà6?‹ílXŠÜ+Þâû^ö<_c¿«° ÆË+Á t»Då™nf÷3Ìâ†ØÎL3Ö‘O.ánÝ¥´5Võo©9¥«Å_Å\Ç—ž¡Ù Æ»;ªdÕnåefe·Gí.¿³×wnóÂ5?»Õø%˜ÌÙžçkìw’…äªØÎ“µ£«þÛËú9ÏÈNǶ ¦K_”¸ì2(6ªô!„u¬_à…¸ûU¦/a¿©S¶p¿jÁ‚Ü*g{ Ï]‚霥ò³q¾†e¸Áç;Í~Uµt'öÛ„é<ÑómUÔ/‘¦Të³ßuù\Ä~W‚‚L%®^îÉm.c?€ÙýŒý®Böù^Â~¬ ñX»ߢ™Â–ð– ×<çNæÌj±^¥ª„.€Ø‘&eUæ‘#¾ „åVò$àVXÊ™’Ôô—Ót¬sœ"Î+j-•:QTäŽ~•Yœ³ñ2¥à×vÁÕ íçµÝÏ|¾†Y¤»äï ì~òŸ/¦Â~*æ/ùOïh‹®×›ç(¾S™Š”•º¦$jÜ%Ó\P²–ªŠ,ØIÐy•{—<,rGy-*«<™•“&h²ÌeâZ™+§|âJçlÚÏØï*\îóUæN60Ë·J3õ'¯¨Y]Š* õ®S[±½«Ä×±ß%œ8Q¼xÕ“ÀË\Ùûì )üص(Mœ‘ŠÌKö›(ó(cO—|öˆª9ûÒîg>_Ã,òˆÈK|¾ÔâþÒã,ÑIººœýê2‘¦Z»ËÄc•înìWa›Ùoª‰H)åNK†éŠ‹B•5óež8g“eŽ…;­§‘Suígã| 3¸öy¾c7Ë~SàJöcö¨‘42Ÿ ·t“î{±ßìI@†¬ï}DGMNÑ4û±Iyh"™~¢Ì“ì7]ÖÒNX; 9U±û™ö3ÌâòçùNPJ¥%…¼l¬Œ•êPþïÅæ¸†eÈ'êì'ÒT*`QJΣõm¼„#[±tt¶ôIèjús‚ýj{®¾4SVîêîPOo;Qæ©s&Nt¹‘ÖÆÅq•9›ÝÏØï*,ˆí\þ¯UË—þ™•úÅþ´¬q%rf¥ž¨œùÎiUµ>ö¹VN%V»e®ñÂV¶êÅ/îBž:Š¿ä®ð¤RŽEaÕß«ØOvìkÃ8¥þÌçkX‚Ë}¾]%¸“îF‹iº"˜Ò„Ò«²Ÿ1¡a^ª?çkX†l!¹0¾_uT‡êüOÔ§F.T¨R­+‡ pJý™ö3,AÒ~Ÿ—Åxá¿ÜtÇÙ¯H£¶µò©%F~†9xÙð5»Ÿa®ë!ÇYÞÀ~yóiö3f¡Üæó5,Âå1^³ñÉ5´ŸÁ0ÙßÏ›ö3,Cê•öc^i ¼–ýj|hv?Ã<œRf÷3,Áýý”—§òïÚOA¢ü 3¨÷÷³q¾†„þ~ú| ã>Èny¬‡i?îðù ÛB½¿ŸÙý 3°/†—‡èÌçkXˆñbìgxYx>Ót¦ý Ëp…Ï×`ØBk×ÃûЙÏ×° ¿ÂçkLiØk@çkXŠñâó?ªKÿ(÷ªìwîž­Lì³òÇÅ?g6÷yÐ~i¨‡i?Ãbtߢϗ´_”‚¤=¿n‚7í÷õ_ñNþ©®=$]m~Þ™ÝϰÜîþKº.Œ—<çÙ×{í÷|ubŸU?.ü9»îO¼ßeí-~Ži?çk˜A~®ÇÏ,öbŒ´_õ3\^ßv颷M§ï¦ý ‹ ì~xÿÌv?›/ôö.wÖ1õ÷Õ_x·‹=^¤ýÃì~†En ª¿_PáæÒß*šT^â*V‘ ¨û¬ñq}¾Õ%C¯wBú¥çùžMûf@ã|Û¦9B¨ ø3Ü=ÃäáÜü~†™óæ¿ó§£jb¯¯øò}BYÁ¿µédß,ëïgX²û}ˆŠbŸ¯ö^ê‚K÷œ3»Ÿahœoê* †Ÿßò7u®G áÕ‘â3mžKfëäõ0Ÿ¯a8ηïû_OŠIe0ܦý KÐ}KÏõˆ o­Ï¹£ßOï{cïUßt™ÕDž6»Ÿa ºáO´Ÿjè /Œ ýÞlœ¯aÝ[@óÉß[Ÿ~¿ƒ60|Y¨ÿ©ßÚ/ü­ý “ˆ£zOoŸéïƒ!>mo{oêÍþžåDœŠÿêŸ]»c¿+0´B¯øÐü=‹×AÍ¿Ö Á&F&ýÓYìÊ7(½ñ‰ ý†ÿµ±Ÿa8Ö£]­‘ò ˜s¯ÁŒ´ÿõ-uvNv?óùæÇù¾5žßV_›;¨7œJÇb|"~÷™còåòXŸ ¾ç3½4Çæ@å cÛºk‹¿ŽwxŽ>_çk˜ö÷sPR„Üòûì1¼ËßPͽc=am‚M„sµß’°aç‹ÇÚ´³9_ž'fɯëç<PîýŒôh± Kúû Êï³Á›¨óxGå/ “¿©š»t0±ŽØ‹¬áf_mÓ]ÖÕØõñ.tçE´õän®çú´“»ª‹![=E;Wìñ€/$N懜T) ²g¤ß/)8À"{¹Ð_sÕ')¯ºê‘ÖðšêÊÉRsîÄ¡­ð~“½ÓB'é΋oU÷‹ÈŸ^§YƒüŸ/ÞnQŸõЦJ:PßóqÖ4Yr%>G9ÅÌM<Ïg´³À  µ€íì¯vÈL’.*ÍçßGE/ˆ‚©<¨E'¬WQ‹…šS“7Ûµ÷Úµ[ÄrU¿ßTޤ˜ëTI^6oµŸÌ–uŽI ‹úÍÁ²UöËGv~‘g=àæÿÉý~z"$éËz÷^›,É Æd ³õ›µëú¹>c= ì0m-™*ÑD ñ4Ïø»ãˆ·ÒØSÝ3¢åº`ý~Ñz7ŠnI¯Ýº~¿›¡¥ãXúRÒÁ£·¬ó“y{_‚4|‹ú™óK£¹Ï/}Òï÷P¯ùÑ5mòî‚\ìPÿ§'„Üû³}Fí²³¼iVXM³M¦,¿:Žê½ˆ ›iÉʨ]ó}?óû\:æJ+5wÑ¥;sbkúèDªÊM)ù´¹¬–VºÆOæ|¼¤»]2/óüR 7Í{çwÒVúýàR-y‡ÃÖ CºI!ÝQ_؉©È³äG#ƒS™Ÿþôr—ÏöÖz©p>H•й©v‰ß'бóUAÝ yä­jäNw^ÌÏ:¦2w»sÕ“n“6¿ãd“s¥+Ÿõ//*eÔWâüâÄ5_¸ó~z.¸vSØÉô".îf¿I‚¢[è'ÆÖ®øš ƒWïýT ¼Z4b¾*Ä_Ç*‚(6ÏdMÅRPÚI¥]ZÑŽ‚ø¸RÕë³±nÈÎ$9O?úôœx¿©ªß\Ô¯–ru~\ó…û¨Ïùª«“ºZZU¡’ZR¡zâ{¢¾yÜ”¯ÊBëýB3GÏG§„ºtÛB4˜B¨kxÖ8-1»îl7ŠÁúý&©NšõÕR_õ{,ÖMévz¨[¿Æû‰à‹üZÔ"~ênóË×|S‹õƒOiúýÔ.¸#U›Oµ‰tA@~f¼ùusËŒrWï×\îtz¢@M¨ªDt¿çÌVcµž Žï΋ÁJÌòå2W÷BÜÓÑ«ß5%Âvñ¡¡ñ~Ϊ;k:Ì%)w'ùòXC?-ýèÏùÂ}Øý~&~Úcã,Fq;_Ÿ×$˜ùþñÚªóж<ÝåÎF¹M LPT.Ìç˳p}ÖãÑÿY€€×üº6ëê¼[¼×´›5¼ÊÇûªT¯lìåäY¸¹3*u¤@7ü±ïÝÕ8»øÉÌÏSiÉ?yäOM%Xøút¯†ýY„s¿ܦ\ CtCØž1üž!<+oÚ¹k·âØ®#¬Ù:]úxun3§¦N¿Üb.Ê5F›¹ÎÇà9ÙÚç=eµ—÷°?Å>^šûßs¼°¦ëìm¡–ñ¡[sŒ÷ƒ劉V=(ËØ8†(A{›»8Žg¯fôKÆuƒÍ—Ûž£ËG]¾Îk—ö…‹¼ m¬‹ùÿž8g{[C {-5‹y%b-ÿÄv¿ØÛ—öØíaytøI›x()·|y›ÓÁÛMñ~ð9sÆcú?ßqø{ó›’‡ýó/?ë´G7 gñ‰÷ãeZÂþ.Ã%ìouùn·üÊܺ–&Ö…üKË÷yè¾ -17ÍÔ_Y¶–|™Xì‡Ëûëž÷&?C$Ó{YSIÑMÝóKž|)Çzt–X®„%x?øœ9Žãx úF6ùuò~.xhgØË-}øšñvõ² 2}myËØ›q‰ËÂÁ¥x>7¿Ût.e³Ø´/‹ãòÝ„Õ ­euao´Ù=¸O™q8 ¿›ÃbôpqÞ½©Z‘nü¦å¥ÓÑY§>Oé õƒOYuóÀ¯à§Ï®oõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý OP?èÔúõ€>Aý Oþo¨ñè †•ÛIEND®B`‚fox-1.6.49/doc/art/freespeach.gif0000644000175000017500000000343711637250333013471 00000000000000GIF89aX ÄÿH”ÿÿÿÔÕp£É\†¡ LZW›+(‹ÉÑã“‘¼»Éà6k¡æéó1/°­³Ò„Ÿ}áàìÚäïðôøxuªÔÙé!ÿ ADOBE:IR1.0Þí!ÿ NETSCAPE2.0!ù,X ÿ #di– ®lë¾p,Ï‹Üx G‘ä9ÇlFx,T„# X<„ÕóÁrFUN(rz´)ƒ¸ âC˜*P ”呂°vÛËõ¿˜×s]f a=f7Ji,LqG}r*nnpQ——˜*^9†c‰.wQ•œ{T}w›*Z³Xx£7` ¦ˆ©h¬ººQO±{ZKÎ*µÏk¿ B¢@Ä …b¨‰ʺé+és¾-¿+éW—Ô À@><ÄÆ©®œHÐE°úö(DìG*#F¢@á>bÄ( p¢£ "$„IäG’%Lÿ†T9‚E‹ 8ÜH³¦Í›2€‰BM fE€ÃAr ‚º’´L£ä$M°tè™n8Ⱥã Â}bˆ9¥IÈ€Ïbã‘U•±¨7 Œ»ÁãŸ[äŒ9t ¶ê§¼:ËÐk"B9ÔN8f ­Û³9/E8ÁŸ–!ˆ:Áq€ˆøzÕ¶¡MÐ96#¦Œ#³™Å¤&P8@Ôõ µ8ÌüüW4„Å5˜ põm£Yß¹(m ¹dž;*î3¡ LÈ0¬çTi‰¢ Û­ºbvß ¿´®C÷¼ »~{¡˜``Š+46yK…'•ˆÇ—Ä)Òÿ]f9‡ Tºi„Ön4T`¤ð”V! Zn„¼ç˜mf,¨Ür—U‡Cg9€&oÂX´P]†¨çar7lF ƒâ÷`·–g>˜€„úõ”v8 ãr™Ò€„‡C—àR](–^Й^ŽvñÖj0æg‘6“•8Å)çœ^$ #9HÙ\8t4’GžäJƒždR2²é\LÃQ$Ñ£çHP‘E»IP FX!¤œÊ`)L ÊÕœæt*O;²¸#É;HÀá ;¢L@éaÝÁ• ¤ÖHr„:ÚˆÒ‚èt¡ê ¨¹Os}–bÌ(«tú‹3ØÐ‘Ë:è¼_4µ¹Ï)Æ}2é$qTBÀ® Œ.F ‰,sd€šâù—â ·rJ.º.±M¼x\k ñ^áÅV4…C ®`Å )1©6¡#S\h¡%lÓðÇ1,!ù,Xÿ Œd G‘”¥¼p,Ïtm߸ÈRÍá )+H])qè¥ Â‘d¬¾J ÂK1¨Û. Hê*IçÏ ¬Õ@b±pHÂ^ðX¬pÐég< jPmDpF_/.{y0\x1‚… M>lQ‹EdR|b0x%`‚*(…‡mZ¡6 rt •T¶Š~z­¯¯M…+m ·7Átv[Ǽ wÖÀ% ʯ……´SÑ5%¶£¨ zïfáãÌ ÎmÁêÿGÎ0ÈW­¦*¤‘¬€Bïž-œ8ãÒ2f‚¢P¨¢Š”#h:Ž™‹="ÿÌ£mÒ½®6;8¢’'ð7$Î? ºäúƒ$‚vuj…Lé ‚‹œ0 ÙíHOº\ =¹`8в囎Z(qåPV“ T‘,P©@P\Á²°É"ݼ/પçËòqjq¯\z2Ýê ç ]V…VVìÆ«;f»ÌTZo‚ŒiëOYôþ1öâ¨6;Z¶^~IaœC‹ù éjd«àÜ>IH Yâë‹x+?ÂX@Dß ,nr.JBŠE$g@}ˆ„^ŽoOÔd”}{ßåI8Yhj8±ò(F#èñ"aöÿ¨è57íÀP#Ëù&œi”s\%ØbÛ6©- JW ¼Q›Oôèäˆ&L7X 8SA!iùG‚vÌÌB^Í@ÁŒ“HpËI÷ÂKùBX!7PAáã7DžŒ È_4\æU)ApÍ\ËÙÕ˜Y=ùb!‘@…™SP8Þ+Ñ—Æ!J˜@S2P™M” d$ †‚R`”¼±K#”tN¯<@‹=$¨‡WHUf‰ÆF‰’[MGj6Žê‚V¢ ⽂ÀA§3¤Ý~j ªÄ…ì™/@d.ÁÐ’pH ü|gE!;fox-1.6.49/doc/art/foxstart.png0000644000175000017500000000512211637250333013246 00000000000000‰PNG  IHDRÉÿgytsBITÛáOà0PLTEâóÿe{’¤¶Ê333„™¬ÅÕå«««rrrÿÿÿ¹ÅÓÚãì|Š—”©¼SSSÊi? pHYs  ÒÝ~ütEXtCreation Time03/01/02y‡û´!tEXtSoftwareMacromedia Fireworks 4.0ê&'u jIDATxœíšOh[ÉÇutÓlXÐÂÂ[šÉX`!ë CA….ºîa1ø C ÑÁ 0E·ÄlKsm{‰¤è)¿—'É+ÚvñmãÒ‚eYá x³ÍAÛÚÅ*.¨Ä‡^ÜÒßÌ›yoÞÓsVÖ7“e¾`¿7ÿž~Ÿ™ßofÞH1øž(öª % ¢š4ˆjÒ ªIƒ¨& ¢š4ˆjÒ ªIƒ¨& ¢š4ˆjÒ ªIƒ¨& ¢š4ˆjÒ ªIƒ¨& ¢š4ˆjÒ ªIƒ¨& ¢š4ˆjÒ ªIƒ¨& ¢š4ˆjÒ ªIƒ¨& ¢š4ÈŒ²î¾@ݹäOH Ö‹pyUì?Ç]ùµ›÷7±.€èÍoK$f,\WÝ­‚—û!Ï<뢞6Uin‹ÙŸ¿¶ 65ù1šw—æÿWUÔ/XŸ_ûw˜‰?d…‘ÄôöO´’c¨ýKnø5:ðfÉ”ˆ³Ö–cÄNê/4ñ'Ñ{ùT(€ ai›öÆ£ä¾ß)öû¨¹×YAG¬Æ}’’Þ¸2ˆfˆ$ž´¶]¦8TÛâÜc®%<ä,š²A`Ï5×ñ·Ÿ·Ä!yÀ†äWNr7{+š ¤ÉAÇÃ-plÿƒ“°ýA²/ŒÜÜ’ B¢šš×ñM`¸6Ò4ïø}æ[tÀl~I²AvHÅ"|½Øt6$g$ñ@ž[²A2gzÎj±ã$ìmÁ·N#.…Ž$‚Ü'kºíXçxRLð˜ŠoÆ­x¾ÕCi~IÙ¥›“yä›_½š<‡ûÖt>;‹f•D ©P}_l±)wÈ’Ì·®/»$䔂ܧ qz¥ê¸C@µÅ†dðÈ”£Iˆíì{;Ä|;6Âö%o²$ ¢ØŽœP— Òr@š$ ™™W…šMîKLî~Üù%dW0¼3 Â7lvc\gÑLàÖÜ!KÃÕ@vˆûyîkÙ•h¸ÖÜÙ ß ékf·{ÂÀߥ„ºó,_ tÄðf3uÔàˆ »ç;øG¢y4ØO˜Ûq*þÚ1Ü£Xl¯ôû2ñ{ݦ!M6Q}HÍrwóÿŽdJ¤ßký‹Û»òk+gkK~šaÈÛBŠ?ªÙ þÄf~ÉûuÐæT…ßrFçÊH_CFÂÆlÈ2_Gø²ÀKO«2‹ì»äxûÚ‹h¿ÅšEú粪Iƒ¨& ¢š4ˆjÒ ªIƒ¨& ¢š4“¹~nÑz9â³/¤Ù@ÚKO ¨gð>.Ú÷v2¹Þ¤šK.‡TSÕ”—Ê-MרMbˆ-ÎÕÌ f² ñ"Þ—5×ÀêÁÇöhÚ䯷ð$1mfÌŒgárHiêLhq¾fi Hnø¨_cYøÇ`‡VÝ3¾éëîËZœ¯™Aúý2,ÂWo÷6ÌѼ;¡£rËÀn]€¯Þ  úþsàùàxaªŸý°Ñߟ=óGï æ =vkõ?AÒØÆôí °ocù1}˜Ó®G¯íð1Ÿd5^¶R°ðtœ®%Sæòq³í4Ps³£tŸöX>*ž§—ÒáJ‹WŽ×’Fit¼lÔzµ¼[ëvmŒ}n%Ö •ÂÑ^<ća»1ù0z­å%‚Ø™x¾5¬&{v ¡4†ô¯: ‚luÙ°RfZC–êÒ f6XŒvËݯ¡Ûë—ûe^ ;ÇŒ6Î@¼wݬò‡52øaô ýY¦¿Abm\ê™i°–py†}Oo¸–™ÂxÄ{ëˆå£NèÿÖLb%–#jã.” ^«u•6Æ'0‚oRvÆyØMÒ. ôŠ-¤X‰ø 6¾E\¬=43öâd²‚¦Ôˆóš)tŒz‚˜ÆóøQ¿çã”:ÂÄ'pâÖÊýx}…Drûzd'R"}Xüprœ"I®ð»YLœ ÄL­BûychëKõìd2Òbn{œ3ÐÕX>©ov ì,Æyn¬ýÞ!¬ñZÕ$ hcXh!×ȧû’.æ°Æïèþ)d!íÉôl­×·ÙA]«„á‹ñ8xç=oáXÄ¿>ÉDŸÌ“)•8 ÎßiHóÖmœ»GeÚ1¦JýÁÚ*ð‡3ŒDGA’Eh'ó$ìp=Ì£)U2a‘9¶z@rûeŒ€Ü{,5Â)ôÀÀÌ>Æ7ƒª§¡úŒ„o~‡±BÃä¼_…“Œû°8iG¯3Y83ÈA Ò³­e;k<Y™{Uœ‹Jh”ެš_%ƒý¿Â Ó#ó‰Õ,˜‰ö²q#c-YK¼õ-ü+åicáè”20*Ò‡ý#û€|½Z³¬‡³‚ qõ:C? ¹ä¢AòŸàVË ¹'ȉ#FòÍTÁÌ#,Ãðhk?M.ÚÅv‘µ¶è¨Œicœ—Ñþ"Gš®'“7ɽb i >ÙP]g»”/¼Íï·ÁÉÿÄa_7X&S¿Ì¹­=Òïlø¯ß-ùï#ÕbxþËVƒ™¶…/—|¦žìtAÖ§³ì¦^®ÿßâOÎ/jœóNséW]Õ¤AT“QMD5iÕ¤AT“QMD5iÕ¤AT“QMD5iÕ¤AT“QMD5iÕ¤AT“QMD5iÕ¤AT“QMD5iÕ¤ATÓ÷ä3¶Ÿx\¯IEND®B`‚fox-1.6.49/doc/art/ill.gif0000644000175000017500000000015011637250333012131 00000000000000GIF89aãÛäíþþþÍÙæúûý­ÁÖóöù~ž¾âéðýýþUª¯Ã×òõùiŽ´ÃÒáUªUª,„Iƒu’’ƒ9H–(‹È4K8% £Ʋ!;fox-1.6.49/doc/art/win32-project.png0000644000175000017500000001431511637250333014006 00000000000000‰PNG  IHDR1­é,-PLTE€ÿÿÿÀÀÀ€€ÿÿÿ€€€€ÿÿÿÿÿ€€€ÿ‡;RtEXtSoftwaregif2png 2.0.1=^¾h9IDATxœí;¯äÈuÇKã‚|U,6Þh°™öS0`к~d›(ó7XGN´ ¡‡³X ÍÝ`Q;=µ‚1Y8°¬‹…ER2­µèÏ`Ö9§|·I»»þ·§›M²IÖoª«N*²<©UŒÝª¤J2±ÿsÖ©MIæg÷IM%2!%2(2.Ò-$2¨=—­[@2êþË7±¯-®öú.ÝFæM"“ñŒ™Kd¬<2´@dTIF©ûòCžÆ8Ò…È”&,VŽŒþ»j2eNA2¸@d¾,Ë“Roôý*ö5Æ‘O¦’gÈÒ\5s×®Ú ƒ±¯1Ž¼í¥¬HÚ¦™/°vwþ|#Æ»wÏD[Ìüÿç¤D&¤D&¤D&¤D&¤D&¤D&¤D&¤:™Ýyh¿<™-;=¦v2™Ø•òA¢Ø•|òDƈÈÔzò¦ÔFF )b§½[ÑÈ”Šön92xÕ3Ûë‰ ÔÝ9=&™þPŠ1Œ$å²^#q79ˆËátvûhl? £®×7)%Ê?L¨Àä Zɸë]œ 7Ý~¦ËÓôŽbwçädà¬%!<2 È”9Gá…«‘at2‹í×Ëý EÉ”E«|Yµ²ôÁŠxd\¯'Ÿ¯4 0ªdÀ4ë BãH6 !#åg3¿4Ía÷7Ûdà;ü±(dŒNC0”Œ{}¦‰.52h„±92uVA&;Ùîv‘‘óŒ@ [½7Ù²CEÉl‰Kf5É08«#£³N¥>£7 &2Ú£U¾h2Jt3_t_šPªgY‰ŒÔíüžt‹5ÙÌêþ9ç¶öfV÷ÏY“sþbÉtmtø²?Ù ž_QÈÀÔY¾Üø12dLãß4ã¼®þxàáÛɰë&Q ֳļdèV˜)ú_ðº—KŸã"î,KÿÒ4^¤;sû¥Ž8|ƒÌ-nÌÌÿ‚r‰¡dÊúòÜî¬ !MÝ\@[ÅÔÉO<|'?ŠÌ"î,KF7iÑCD—nGô¤çð­d[CFŸHÿiÏœº\ÒÿQpz½ÚxŒáò”.nK¸³êd\ž™›Læ‘Ñ'†“‚¡ø¢k!2°Ò™×å,°ðÈè“16™ÃAIŸ O`žÁ3[2h•-h—/àΪ‘ÂÝ›àü³‘ÙäeKÛ‘ÿjC’ɯfµŸg”%3«;«rׯsàÈÌf…>Ý›JãJ“ 7'B`•Ò$…)MK¸³*uàú¬é´Ã·Ù¦nÕg4k˜É3Æ—`ð‹­O ¼„;Ë'Ó(73’¹W©±í¦%}‘ÚÚeý÷§ÿòÙnd›[ë:³( ™²ÉôÓ}ví¦|.µ’‰èAB2·óÿÌÉÌ«sö\-LæŒ÷î?‘ŒçŸª@¨uºU¶-¤ziZ„̋߾û•¢ÞX¡ÖM†Ù)0µñ…Ù3³ù,ðçïtŽyEdù­˜ëê‡6¥`mŒ:a”:ð‹ßj2_š<#m …‡ÐPeÝÆ6N¬¸d¦íÕIæs¸eߘ<ÃÐ9¥3ˆö6`3›X&+.™¹Ô’g &Éç"¼h<ãßôȈhíË8ýMO …¾Ey–Œ¶Œ­¨4-FFegp„ Æ]1XX Œ±Wd—öç92Sü*ìó‚x+U¨aEdÈ>3iž‘_·f’ÒM€ŒÞiHª‡ì3“批ê%sJdBŠDæ‹ãqâSN.)Ma¶$i«ŒalTÌi/™âõ |àÝr1änDòÉEýa×K¦R×ÔMŒœ6â}D…« +ɬ¼ë BÛrúOs`çÕs aã7zÕGFè<#•ï¹²K&ÌJ÷‚ØñÍî>–«æèa·¡ ÐÑ ðRU¢zÚK†±šíƒãJ(CÆ~õÏÜ'ªJÆ&@«É›g¦$£~!«£œ•#¯¢‚Î7týq¢d¤%ƒ/a팋ßè=j™ò–ý öïÇ÷Ös…“P²$xi°ç_ÇbÑÿŒ^ž®þ‹8QÕ{4{É;®#3²FâH1QžQâLJBy^ A‹v@ Ȩ,cäµÍgÅ¢ªõÈ»LQkWPÙ;iÈŒ°Àð˜¥`»éÇo…!£³¢ \ÚBF ãîCÿ äªÉ6×׋a¼'Ïìvâë§7»-åÕFÆãtŽP!ìHòèdÙC 'žÓ`»ékèæÿ h¢óÌ0NCÆ,®ƒÌcÕkgÇ?ƒ™Ï”cxgÖcÉ6Ø‘UR-h§=j?uçQΧÕm~ ï^˜L”N¤šiäWn§s Ùí¦>åÔŠ47Ú(™âÓO‹ØIïQ$2?ÿááAÄN{·"‘ùåÃÃÃËØiïV2·%˜‡{;ñŠBæN}w<þ𚶪“Y©Èãä™_–`~øÍKò¢JçjnO·¬­¾\2?Weaúâø’üxPûï"cý—OæÓ?=<|÷ÝŸ·md[¡šé¯ÆÕ¸ìÀÁhdŽÚ¢AOžq˜ÓX'#àž‘Î +ÔrC¢ùâø÷ÿ[¨ý–2 fÊ3S˜pŽ+tH,?p0 ™ÏÇÿ¾Ë Adpú(Œ°å§J;½.™ÌáxüöÛì½0äÓ3v†üðTš¨[añƒqfhÿâøpÿ·7TŸñÈ02+Y`Ì¢ãÔg~¢£^ôÑ |´â‘%š÷_;ñŠ6wýO™ä¹CæŒF˜.Læ´nMÌÒ´HµäÑJdBŠKÆx~_Õƒ#‘Ù‡&±ª\… ¹¡¤¢óKoØDçWÑ>))Õü=ùC‡Œør³ƒ˜+I#É¿ —Ÿ€'¨Xd(îCâSôh2ë©þE#CA‰Â}×ÌjrLD2ªBF¦Òß™&Ã`¥rãnÁwåØ •\µâÕEÜ„÷*šçj=Å& ä¹ )V»I¨¿ZyhQ2±KdZÉ”lŠD¦­RÔní68 ™âp¿=J™úêÈ_üÔk)ü«Ågâ·®²u&2»ÝrdvÏï_m-a<3‚ˆxd¬ËFúdÜå/@¦Ìܳ¡iÙ>¿¿/¶ÿø!úg„aR :•1DfÁ1ƒDf£ýz12mÑ€]:ɯ“Ñ#©%M6‚¸+)`˜à‚c A‹Ü͉NÿÉdîw”gtëÚ<ÇÔ™!‰É`Ü [pÌ ‘jém5Ñ3’yþª$£ÛÚÒ{FœáäKF2 Žl!“qš¿†µqXæä&Êq=§×åξF’¹yõRÊŒð%2f·6ê*Df‰1ƒmdr3§.YŒf$20Ïž^ƒsš”°Aæ†íÔgo| å soª’YnÌ`+˜w°¤ÁLÍX~Õ*dH‚é2Ø1ƒÉæF’‘ÛÃaûäSaïÚnä/ÙÉ\}㮄YXjÌ`ÓCžÁù;óÜNçY!k2Ê0ýÓX6[77;¡É¬Y†L®TŽd²ÌLá Å—±ÄpâÁm¹z\iRrÇԙɼ >“å4'Zà ²!SzêuhÙ£,0Œ´=›v“R}…¢¦áž^Œçjàä§a¹±“Þ£8þ™BŸ¹ˆœôÅ"³¹Ýb§½[‘Èì‹íœ¤Hdrÿû½ý¡6g|VÝS‚æ¹|2ûâïþ‹»:°ç¹²dÜ5ÒVÝûƒÌ’>½ÒÎÜüñéïE›çJ™¹WÖBfQŸž*îï1ÏÔÈHšð±îžÂ°€(d¬O|/CC#*4-d¾úDþNÛ™6ÏU‹{Š‚l¢fÑ‘ám©ôVžBæÿžeÈU#ÓtOE$³Õ[_6<å`~2—IÞûþåÏlÕpOE%SæiCF·YN>=íÐË9G׎>liÃ#{x{Ú§ø 'óìþY•Lef«†{j dŒ£!Ësß lf<3ö!#öù=´0” ûW¦öî®mû˜±ãW£Á(M9ÂsÅ0û°U©g‰éÈ|ü‰dúß(ÏÌ€ÑÎTÈdÆ1ÅMãÈÆ¦åè»zmõ¿‘ž«Õ”&׼欶`ã,08{ÍܵÈ?ŽÌ9¨NÞ½:pk¾nu9dnq-º°x€LÖŠëÂÉÌ¢Df0™ÃÍ®P;íÝŠ“göy¦´±—&š ®ÅL±²ŽI3"å™ÍØ $#•Y!«õ¸È€âÌ‚Ë2)¶*‘i±À™R–ŒnY3òÇà˜@…#TÄšÈLýpöݾ•Ì›góäK3q²™Jz]yfꇳó™÷J½ 2JÆ‚-¨hdø¤å(ï ód:Ú–gO~L†F®¸4MEfO‡ë&CÄ,C}NÖ/.³62NÞ·UÖô¢‘ñ5ë%3Å3Ç’YŸf#£kFA2ç &™Í]ù·Ëw›Ýæî2ùnWì{ÈŒ:b|2w›M~—ßÝ•ï'dž}YV¡ž¯†ÌíäÇyà Ïà@!„B–Æ–¦‘™E-d¤ömúd ìóNÅk00íZÈ€í&ÞgpdèÆµmß_1Óç2ê(WAÆœ|ÔQ®ŠÌª… ­Ïb'¾SQÈÏUìÄw*™ô¤ÎÏ•7.PÂSÑêQÂÔó$ÌWÛ%ÔìŠZÓóÆš9^[ƒ‹Dõë2]uqÉøãEmX C ëD®†ŒÐωsdô° ±ïßFh£±îtñdôH7fcf¬€ÑLøt47ŒPšaPwº\24úM`†–Œ°2 ‡š_](I–Œ¾ò†R4–¼2f\ ¾”ÿÍ–&7ŒÐEc]ýpWmmÔkô kÝ0B²À`…˜ºl2C! 1ªçjøe^ ã¹Z8­ã”ü3!Å«¢Ï¼Ž8Űâ‘i™hpUŠGfÌ­)†"’Yy¦‰E¦2B_‚ï¹jLh_éž-i…¨ísQd¶[áÈày®Ú ³ô>„ùÅÜŠD†IœSºÅsÕ’ìk"SÈ[aÉT=WW膔vÁHrÜèÇèÑ$>0ÿ 9°.ŽŒ|±ýƒ#Sñ\ Z¡}2^ iž©G s|BÚ¥‘QOÙÛ½hõ\ IoCF1ã‡>p`] ™o~÷ë:ºýé\44ÈÝñóŒ¼Ô¥gµ°ª¥ ^ÑSf´Àez¹G߬çJ¨ŠG&2™YÕRšdÉ!o÷\­‹L66ÔýD2jS²±dj1WÌFUÙÎ~hV-8k²#3¯ZȰ ç¹¢ig(Ä5²ÉudÔßýAß›êž+v†¢ªœcFQËûȼ}Û CœzV%#bå™É'‹ë™5Né,¢É´y®,Q%3¢>!™‰'‹ë›5j-26æJã0QU貂(=6wðYˆÌ\'Ý÷¥±ûŸ&C²~1Ïá'j7-ˆdÈúK!ô{¥¶>ÅáCž«Ó?§|2‚ÈàÛ$»+Ϭ\)ŠFm}’ß9~[4jë“þÌɰҬÍÚú‡?w2å´h©­Opø3'£ïDEKm}‚ß9 £hÔÖ'9ü¹“Q2¦¶>ÅáÏ›L„:ðʧÝtJdBJdBJdBJdBJdBJdBJdBJdBJdBJdBJdBJdBJdB"2ù\:w2·óÿÌÉÌ«D&‘Id™D¦M‰LH‰LH‰LH‰LH‰LH1ÈÜÍÊ)´Ÿÿu2±sÃ@E “d”È„”È„”È„”È„”È„”È„”Ȅ䑙oðÝYÊ#3ר»s•#“ÔP"R"R"R"R"R"R"Ò…‘ɆÔáúƒod~ydúÒŒdúãµ.EÙ¾{û&‘ (‘ )‘ )‘¡oŒ×欬“©M=gv½x2<¯ÏsZ#“åÕ¹>Í—ë Ãý5M2yõ¨« S-.-d2–ëY—áÅi}"ƒy†Ã¼¨øB]™ÞÒTšidÂØ•‘é±À¹Í-üÊìLç][ß›xå…ºx2XŸñ3MK}KÓ•Yà¦R8¤D&¤D&¤+&sèéË¿^2ÃüÀ#b!.EÃÈ ÚëÂÈL¨D&¤D&¤D&¤D&¤’Ìf’ ¿ËSï ìzõÿrö^|Tn¶IEND®B`‚fox-1.6.49/doc/art/win32-postbuild.png0000644000175000017500000001171611637250333014347 00000000000000‰PNG  IHDRAtÖuðPLTE€ÿÿÀÀÀ€€€€ÿÿÿÿÿC³ˆŽtEXtSoftwaregif2png 2.0.1=^¾hOIDATxœíËnã:† è€ûÞœÌ^ g2Û ÒûØk‰¹àôóëB‰”(S²‹–)óOâÈ´,SŸ‹%ªxS‡ª‹RêÕT]з%´õ—ôØz±„þu¬šW%”R%ŠO7lTB¡¾Èù¼ DÈ¢Ngoï“éŸé{Ö\Ýc„& þ!·Óùiø¡¶i$dA©$!Ô³â9ÛRu‚[èŽPÀ€¤ûs6˜nŸl}y…Ë•2*nƒÂKàù!~ )}çödÁXË!B´álèØ2LÅñ)!ãMO »|B Btáê ‘ê Ÿ ”ñÕ~䇎‘RÖ—<Е²Ñµ xøž@Àfï‹ÖSxê¾”ùõ¡^ Ù¹çëÔ½."8™Õ÷êmب÷e¡kب„Rª„Rz©QØ„*¡”*¡”*¡”*¡”*¡”*¡”P»u.Š mÚvÿ–åÌVeá=M(K&* ¡ugT¡…Vü½Ð8¾¾Ög!®å„>ò苳·ðŒ^–~™zS9Ô0¡¥FüÒ,<õ-­r}ÉRÀG}4B£ïï°!!ú÷ý`„ZΖ¦ÿ<j•Ûkxc«ÔpYB_à „ZüÖQÚ–óÅ„†Œ5ðŽÉ»˜Ÿ:­þ@3„8[zH5ø9mðiþ±îA¨qŸ8d‚²uêwi¼Ýý¬‡» \ÜVˆi!¡C‚†SÓðØ)øµ˜Ô ê¹<(!Õ´jÛ¶ãVtHk&„·BBô9 ›äˆÖ* ¤´-lð‚Rël.¦qb»ABΆÚq)£ì6@§Qôf:ŸÐÁà B˜¢â„zÂoÂjg)À‚–„lRÿ»Ž\<ã„Ú…„ð-pš _døÜÇ„Ü Þ´€¡Öúˆ\Ë\);ô¥, dÍG³2ø€„”º’änz-Ão»R3„ZG¨)eDh(ejA)s„>#~^lè§>4SB€ƒlÈ\Kè­)ðÔ-},ù!:¯±§¶™bOÍgÊïyjô¯ ùÔá@-ɸ§v~èkZÊMªUo†5CÒÆp±##Bxi>gZ¹õ Ùʲu!¬¡§@k=uÂFh®>”RºNý6ätå}YNB\Á®„„ôÅ´G#ÄÙúƒ{¶#Ô"hâ‰g^Nè}eŠÉ·µ¬$?HhC©€²ø9°ˆPú7+$”'ÔkA„¼ï•û{žrÙ šª­„æÄžç­PB\÷Ó9 q &¤ß>Ë"$ÝÐy‰Ð·Ýåoä½;‰îšPâ= I^jš9BßtYÿþýû÷çØ†ŽœëÃË[S!DßR˜yBm‘„:$ô?»mMH…¡èNC Ȭ p\Ö+ÆëŠ%Ô'öC!³€ºŽâf2z¥QŸÐ…R/ZÕ / éà"ÜûM\éuö?Oȯo+φ†(kGÁi!½ÂMbšoÿÅó"­ÐBCVµÑr„<¢ uy=u>B8!°!qV¯©G¼”E Å[H¥Sû/42`̾mÚ)! æ&¶Ö\Â$ á_§Àá®ÎS£ ©«šW—šm!=4œŽí±n3Ä„úƾºt„8Ìuj1QÅm(ÞB ­ªªá6NÖt½ Íé.÷e¬h|HX×ÛЦ„.Ň„U¨ ]Š KÞ†D›Å^Ü’ÆŒ¯õÕi9RQRÞ€Újšù°«F¹\ï¿~Ñh½ÃÏ:L=eam|(¡¨ ù£É›ñÖ”P¬Iÿ¢þþýñÁñÃÚOoBÞ7ðVć0<¤ …Wû /Ÿ÷rEm(3¡—ÿÕ?ùñçOÈ9¶âWjªôG³6 e8745âÓ CÕððrb޽8ê—›cê¯÷¿ûrùó‡gBƒ¥MãC=!E#¢¥4ç‡\»ªkhÅšýÈ[ü: xoWÙPóË{öcðBj0¢6d(>äÙn•ÑŒ õ£É›ÐÁ'¤\Çoî†e‚ËåÔ†¼9O¬ý‡r•²?äF“mÈ'Ôãi½ñà‹äïký3"ïZæ ÜšþC„%O-W;`CC)k£¥Ì#´®”1|üé_ËZÏQ«%õ¡{ôš³!òÔ4%ä.üÐH¢N½º>4¼‹ü´+f^E5á©ï(‘û²µuê…›h?lD~•š‰?@ô£ð{ûªñ¡”j|(¥µñ¡¾{¾»½ØÌe´>>¤û2'D¨Ð¶Žùø8¡ˆ I2¼Qóc#ñ!´“Ÿõ%”D˜(bCoÿyýwM|ˆz©a „L7˜ ý3ÿ . õ5ñ!¾q:¹wðüfÅlhk.ƒÙáøqñ ‰ø¢Rm(Š’(es6‹¤Á¬·O´`*®Ògð9댿´Ëù|ölÒéÄ»â+ö‘Äû'uÁ†&ñ!êäÙ%aO};¡9‚ó=!€â-Þôñ6¦ŸƒgÝqn°!¨ ?>”­Çù¬ …„ÎxòÙÝFì&rꔋݳO~̆F„à® jÀ"àŸÝÙ&žŸ`ÌéDeÒ ¡Óq DKéõõ6tG]öCgöC'<;ò '6ó ¡ÐKg&ä'œÀ†Nl[#Bðšû½Å†¶‰lèè ØÉ¥±õœàä‘PŸ0!töYûZ@(iCÛćF~ˆ.?fBˆH\KßnCÛć"6t&/;\ËŽTŒÎ䧨”?aLÈ]Éü¹Ñ†¶‰ 6Ä–ƒÆ|öëCøŒÜ0þcBÆO`O}bOíªBø`hÕã„§NÙ\ôGñ!qm_§¾Ê†¸>´Ñø²»Þ—œ³*U§Þh|Yi÷e|oÏý†Œ¦.Dbãƒvâ;2êÕ ÅZîc6$sd ­™ˆû áÔ10›†¡˜ ÉYBkæâ~Cë óì6ë?dh2-K¨Xšörý†4–21O=gCÍÀk¥À # <Ô¶Oд+Ëz¢÷„—; †º™@íƒïÔÓ÷iÞÝ%Ü0ÿP<õ ÍÙ뿞¶‹³Nó°QBÇ'ØŸiŸ¯Æx(J7ÑN@H»Óêøc4çnq|h¬xêš·!<½!WÊKp›£32LH3ìèéûVºƒ6ÔõóÔõ„üõŠ`™…•6{µÕ´H†ê¸` …oðÞ@½„ÙE§âCD=M@ˆœGGk¦wÒÞeÍÏ1œ®©06ÄS2’…ÐúPÁû†¹)á%lOalC^B¸^#4{Î2Æ#døÂc†÷žÐÉ%<èüC¡.â‡BCKÕ„: BÜÛÏš^ËÂõŠôl)ëF„Ø ©”õï£é&‡„T)›Æ‡‚Ê‚ˆR6Dõ!öCC}hpLÁzEZ‡žZ³§võ!G;[z7~ò®˜ŸZœ`Z0WNWÌ?t7Z-ñ™@+槆™N±ëW?IJSì}Y$>äwj?Uê½ý$>d¨²ÞÊc:´€VćèÚâÙ”Jµ!‰å)e³õ¡åÊI>$¦BmèŽ*܆6Œéå‡X±ëZ=¡ÂmhÃøÐŠÏ\±ëZ=r|è1´b~j“ë«*Ô†¢ñ!~®ÂjCÑø? *Õ†è/Œi +ê>$˜‡’ïËÂøÕ by(õÞ>bB°$ˆ`ÊöCa|¨·!Á¢_ª 3/eeÛP‚æNMQÕ†j|ˆõÈñ¡ÇP¥´œP¾0Hù6ôùíņòŠöbCùE;±!?P¤eó°òEÒwÒ{±¡!P$Mh/64h&FÛ š‰åa6„úøx&ª6‚SœïƆ,o ™$¡Ø=`o\ ™\öaCÝ[ç4«~ÈÙ‘“#û°¡LÝ•Ínl"iÙò° ʨØ®?óäa6„œ^räa76dÌÙ¼~fÉÃnlèÜφ¢%ó°+2-%iz”©5îdž`b¬„vdCÇšt$¢Ùˆ®­0ídž\)›v$â>!Wº§Øˆ- mhÒ‘H;HWæa/6F$4éH¤o"T¾ ‘šv$º­”íІF‰º=õþl(*}}5r76„;æ ´êh y8ÚB Ýc|ý{«„æôJ6T*¡{Œ/+ŸPæñeešÌ?$ØÓÜ©PBsóiñÁSÅ2ñù‡*¡‹óá¢8ÒÃËJ'4™H|àK±„æÆ—‰/+–P|þ!gC’¤Â MÆ—ÕR^ËÂñeè©¥‡—K(6¾LÏå6JÈ)_¦'ï—Pá„î Â ÕèG%”P¥TãC)­Ž‘5‰ÞÞJh~~jج„.ÍO ›•ÐL|î84.cÑi™µíA… ãCð‡ìk¡U·A¥ŠÆ‡4ÝÛ±µíA¥ŠÆ‡|BbÞ¨pBA|¨_DFlm{P±„bóS&^ÆHªÑ£TB÷›¨PBN÷˜¨lBwPá„jô£J¨Æ‡Rªñ¡”ÖÆ‡t†¶¡B MãCXÞt%4ª„­oOƒ:%9±Eá„üøq\øWËä¡TB‘õíiQûþWªZ©„&ñ¡~TYµ¡ùøÐˆÐ³û¡I|HÓ¢öƒ§ºš•J¨Æ‡H5>”R¥T£)UB)ÕøPJ5>”Ò-ñ!)JhA|HJ¥2Éø”Š%4‚¢*œP$>$u?æT*¡ùøômH©„æãCZ8…ŠÄ‡j)Kćª§®ñ¡@5>”R¥T£)UB)ÕøPJ5>”Òúñe,Ášu¡„fâC^±ÓRy(•‰Æ‡*¡ ¡É²eøîòÅî= '4Y¶Lþ¿TB‘ø‚a‰<ûP%4]ß§êÜìC•Pt}ûZÊ’ñ!ó§ê_U.¡"ÕøPJ5>”ÒC¬o_<¡ÜëÛ—Oˆ”/PT>¡ÜëÛ—O•s}ûâ å^ß¾|B¨œëÛO(÷úöåBå\ß¾xB¹×·/Ÿ*çúöÅʽ¾}ù„P9×·/žPîõíË'„ʹ¾}ñ„r¯o_>¡Ü*ŸPîõíË'Dʸ¾}ñ„r¯o_>!R°¾½§Û[Ë'4^ß^º›Lù„HÃúö•Ь ñúö‘ŽD7-›\>!R°¾ý¸‹C?[Ê5y(ŸÐx}ûHG"í ]“‡ò ‘†µÉ#‰t%dª¥,¶§·¾ý¸#Ñ Üï‡hvõöÆ™ï†îX ]èÙm}û—T©„\§˜cT"yP¬JhNTÈm¡„ÜÝWFB¯ô¯ÔRæº å$T´§î» ù…íT ™éø2ßr*¡Øø²J(5ÿp9Ÿ¬ÎËÑœá™!{©oŠ%äº 9BöïH¿‚„Z¥ ´¡Ñø2Kut¿°-Vʬ •Gh4ÿP^Bmá~º Y·|>EìÏžÝS‡ãËBä©+¡ñø²Z§N/«„Rñ¡Œ„"ñ¡÷ÃãèúEâC÷ÍÀeÅmô z„O!¡­¾­rmšJ(•J(•J(•Ç'ĵ“mô¶ñçÏË#¤6ÕÖŸ?¯PÕ¬*¡”*¡”*¡”*¡”*¡”*¡”*¡”vJ¨]R<¼¦"3Ýa¿„RçN„R‡ñî:ö¦öëòë/•P%”P%”R%”RH¨UÍ~ ѵ­—Ûõi5‡öд~ʈP{ø=)¡Á”Ð!|é©…Å(B¨U‡FÁ#lpz%ÔïN»)°4ú%=¡d)³îœØ(õ¤„žúÐ[Oó¤~èâÕ®eMðKzBTò(R¢Rö¤žzªZ§®„Rª„Rª„Rj¿}*¡eqê}?ö¦e„íµSB‚ª„Rª„Rª„Rª„R²„´—åÃ(yÁ«ú?&=Úâa±urIEND®B`‚fox-1.6.49/doc/art/progress.png0000644000175000017500000000037711637250333013247 00000000000000‰PNG  IHDR«†Î¢$PLTEøhph¸¼¸øüøô÷ÁtEXtSoftwaregif2png 2.0.1=^¾h‰IDATxœí•Á À0E=tÁJévÁýgª&äþ -ôã1<~ ÒU‘FGE픟ͱŒE Ïýc°ÆÊ“ŠSaŸT¬N,¦Ç ˜ëw¶ªE±:±¢\ÛÏv,+b`½­¦cC„«M•ùÒç} ¶`•9ö\h§QAYß¼¿M‹F’ðIEND®B`‚fox-1.6.49/doc/art/opengl_logo.png0000644000175000017500000000317111637250333013702 00000000000000‰PNG  IHDRD ë¯ZPLTEÿÿÿÿÿ÷ÿ÷÷÷ÿÿ÷÷ÿ÷÷÷÷÷ï÷ïïï÷÷ïïïïïçïçççï÷çïïççççÞÞÞçïÞÞÞÞÖÖÖÖÞÖÖÖÖÎÖÖÎÎÎÞçÎÎÎÎÆÆÆÖçÆÆÆÆ½½½Öç½ÖÞ½ÎÞ½ÆÖ½½½½µ½½µµµÎÞµµ½µµµµ­­­ÆÖ­­­­¥­¥½Ö¥½Î¥¥¥¥œ¥¥œœœ½Öœ½Îœ­½œœœœ”œœ”””µÎ””œ””””Œ””ŒŒŒµÎŒ­ÆŒ¥µŒŒ”ŒŒŒŒ„ŒŒ„„„­Æ„„Œ„„„„{„„{{{¥Æ{¥½{{„{{{{s{s¥½sœ½ss{sssk¥½kœ½kœµkŒœc”µcŒ¥cksckkZ”µZ”­ZŒ­ZŒ¥ZckRŒ­RŒ¥R„¥RckJŒ­J„¥J„œJZcB„¥B{œBZkBRZBJR9{œ9{”9s”1{œ1{”1s”1sŒ1kŒ1Jc1JZ1JR1BJ)s”)kŒ)k„)cŒ)c„)JZ)BR)9J)9B!kŒ!k„!c„!c{!Z{!Jc!JZ!9J!9Bc„Z{ZsBR1Bc„Z{ZsRk)1Z{ZsRsRkJc9R1B)1!1!)ZsRsRkJkJcBcBZBR9Z9R9J1J1B)B)9)1!1!)!![©FtEXtSoftwaregif2png 2.0.1=^¾hÿIDATxœÅUWG‘ÃêÉajj£˜m°4¥=PÚJ«¥¤ˆBŶPÓ6=»wmÍ®g)9mõ¨rj ¶ÚBÂÑ ¿ú'vH R}Ï÷úÝË›™Ý¹o&3³{› e úµz¨±TY€ ?€ÇRtøxòN•¦¿Ü»8Š”²œ·¤6Ž®k÷ÔÃkRUÂËÉ”v‡F/|dl¸Õ.Îe‚La¨-¸ˆ±„†óv¿<ÇY’ÉrÅ {Õšf]KFÕ·!Qw¼> =y¼]î¯ÂÞžøY;YúÓJ8D^³dM0Ï]Þ57ß]µc:ÛÁva’úMô{Ox}­iå•B‡a “¨ÌnY{ór 8”¬Q®½Oåô™¶·À. nA¢¸Ú£™¬KšhĤòZ@ü@u¶§êæA¨^ ,çH9"£oLîÏÐ~0p€›-Ú=7JFHBXUç:øçþÃ/Õˆ`,#„¢¸w[‡BØHw·ø<žZÿwF¤Ø#Å©NWÞæ¾,œ^ _ܲTÖKí@Îü6Jô— oòØ—êHNÎKD3ì§Üû‡vAè<” 1ú;u\þ°È1Ý ãì¨ï°§Ožð|m_7ƒAœZŽ…àÑQÊ‚Ñu¥]li‡•° vé9— ÆŠÔ«uÙR׸ðD­«ô°Í »¦îëÙq01’ÎÛÁä`yàèóˆÝKûM‘åùžVNý´Ä½a2C—œEµc|@ë­ú«1cÄW\]ŠRgã¿ÓéÌívßÿ;,[QzäÔ@X¢©#)r哞†Šç{}_(‚dŒ …Oš³¦93תÙõ, ¯FhtkÉ…¾öF·+ÛKåÞà_j¤ü?(®Ð(Ãì»õ•O½YáçâÆåqæª$㘦O-ÝË$ÆÞxš›ÃˆOß×u: ‡•E{Áæ9zBˆ¦­ú­[j/šç¶åM-7óL¹av±%ã*Ø¥ãS5}R\¿é^Žû°ùÓÝø¼­"ùð.I3(ñðöÄŒaŠ i n–Vã"ÚëDÕµ ë$m_Êâûµ•HŸ_ЛÆEB+6( ç?ˆÿx©èk5®ZWÆãËÐâi>qcTÏ‹ƒi'ÇÎëØgWFÓäãu?Ú4}°?ôÞäff[@ø³_nœnuífÌξ/Z},êûªÅÏyZXàEš÷}Ø-ÖÙO:Á×ÔÜÔÔÔ¼5~AC’$!E Q˶P°½©áŸÆZl¡Dø=S0Áª¦’p¨Á±1/¥ çI<éônß´B°NïÈ‚™W ZƒL'Ì…‘ö ûÙ6sq/ nÇë9Vå乿ä/ÿ—Q. žÐ-ˆIEND®B`‚fox-1.6.49/doc/art/fox.gif0000644000175000017500000000015011637250333012145 00000000000000GIF87aÂÿÿÿ‡‡‡,5ºÜþ0¾ €Œ®0D¥^ˆ`ŽŠ·*’Ö.ï •‹l¾¨ML— ‰RÁKQÂl: ;fox-1.6.49/doc/art/Makefile.am0000644000175000017500000000141311637250333012721 00000000000000## Process this file with automake to produce Makefile.in artdir = $(datadir)/doc/@PACKAGE@-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@/html/art ART_FILES = \ bigpenguin.png \ fifthplanet.jpg \ fox.gif \ foxlogo.png \ foxlogo.jpg \ foxlogo_small.jpg \ foxstart.png \ freespeach.gif \ ill.gif \ ilr.gif \ innernerd.gif \ iul.gif \ iur.gif \ layout.gif \ line.gif \ mouse.gif \ nerd_inside.gif \ oll.gif \ olr.gif \ opengl_logo.png \ oul.gif \ oul_grey.gif \ our.gif \ progress.png \ scribble.png \ sgitextedit.png \ slingerzbutton1.gif \ widget.jpg \ win32-libraries.png \ win32-linkoutput.png \ win32-postbuild.png \ win32-preprocessor.png \ win32-project.png \ win32-tooloptions.png \ wintextedit.png art_DATA = $(ART_FILES) EXTRA_DIST = $(art_DATA) fox-1.6.49/doc/art/win32-preprocessor.png0000644000175000017500000001444111637250333015066 00000000000000‰PNG  IHDRAtÖuðPLTEÿÿÀÀÀ€€€€ÿÿÿÿÿ56 £tEXtSoftwaregif2png 2.0.1=^¾h¥IDATxœíÉnä8@ 5ôÕwAžº]ð ¾¶yŸKÿÿ/Œ ‰)%©Åf”+¥RËË`ˆ EÅØdU„ø­š¬ÈçDèìéÚò2úÏ£I\¡”4B¾ñ‘öE#äËŸWû M°p…÷/gíweÞyË¿³|è«{ˆÐ‚ÿÀíýëÇðÑ„†nè€ÐJ$ üTBôÂR_S«z×S£{è¦ éejú÷¥`ùôæìs¨+ºqq+Ãæfíü›Hèý„vˆÞj€¸ü›ëÓfÒ$„/X‡†¨*êo½8÷ j‹KÈÓ¡‡%„.Cí!ôø­Œ®ö3;ô´2ÓòB?¨•Í®eš‡k©5ýÒØ"€õ#,µienÈHBC¾¹=â}j#«ÞÕ7W I>ÿ€¼Úm\æ‹ ±/¡”4B)yi^Ø„4B)i„RÒ¥¤JI#”’F(%W 4œ}«B„N½wÿúÌ Ä7ûOYBe¶¶Ož!´ràßЊÆ5åãce³MþßÏKd3ù„þÔ‘"´rª/+‡·F(ðÙ?ñ//Fh ÃêñYo­étO!Ìë„>ìÉ[BüjŽ f%ó¡ß{ÂÍèÃFç`-¡þÆÎ#$æû1„è°z» K¨ƒ­ £û]÷hŽ ÔÍ{!| 4À7‡Ñ;vKÈyzìg$;” 4&êõúQ ý7ý‡E² ¡™ø„è7 'U‰nèÄ0 ÖX»ÖË:‡>L ú ,OhjíÐBïzNhZ¤—š&e áºÅl[Ù´=üÔ%4ía€íMl§:„þBÝ‚þ†þ!:ý|5âÑÐÆÓè`ûM6N,i<Ðô›èŸe˜‚£¡¿|Bz{KHÛ!½³1ÜzyBbAŽO!<€v½ Ô÷Â#$ú©±é„ئCú0vhZ¬!éG}83BzQ.˜¾f¬°£CÒ\‡ê" ¡?D¨ ;Ä0D 4Gš™¿m„ôÅ3@Vÿ¢F}=W EZÙ\‡h?V'B/LH®eÜÊÌ×|B“úôd<!!vÒÇ´ $ü-Ùß\Ì uÚ©(¡…²­LÀ›¿’:¤RÝ<‡ ¡µÔhµ|BêÚKh ô‡À‚vdf­L3Xj}N®¥Öoº1ÜÒ͉ϱ¥ž6oŒ¥^±Cž,.‡¯ 5AB- Q‚PXÂ}jG‡Â²g\¶v-ƒK‹Ýý²Óéš:Cbê A,µ´ÕR›“ßCˆ°ô¨c­?”’tŸúXB¹!ê`7B…äƒh×!„vˆë/ŠÏ#$g´½²‘PRf¾q ¡BŽñ¹ ¡Ý÷ZÖ=ÿ;ú:”r(?¿¿° ¡:øŸŸP?tR~߈ó»R¼ç{-½Õ¡˜åy½)!êûméàl&DÇpcBýë[#4F}N—®7ÈkZ’œÓ¡™.ëŸÿþûïëè“Úçký†„ðÿçÔãý‹ÀT$¤ý§Ê:À.BH¡ÿM¯'Ò`„rjorúWšxñÎ ´Ò7òÒk„ä×ãíöŽiï}/‹ëОà,B…âLÞ šš×ç$V‡˜Ð6b!¡ïJä*Ôßç½Ò!¥”CÓE á¹çzn_´•¡ !­CBûYk¶²%¡™+¾!§ÿþÙ"Ô÷Aˆå6Bø•§S]Ç'$¸CXÀˆ,Rï!´CËùöø]¥È^Á;øJ"”ÿ„¨_ï’¬&f³%]ê-·+3!‰W\iŠú:ÅXÉðÀ–äóvˆ7ZOV AJ7!%b„´Ö ™¯Ä%ƒÐñõ‡^Qoø¤9t{q-ãœÞÊŠÊeóLQ†U%ôL+Ó}S¨RøÇ:!èaŠÛÂÿÜ °+ .ÚŸˆÞM‚Ul mÌÒVBÔòê™EácÐ\"g<”çµ½OíÕ:•û„¾-·õ×6®®%c\æÖ‚Ì…²ñ ™„N“Œ±½WH/rWB‘úCÔý*)B•*Ïî”|ÿêÛݯE¨èöŸ–|ÿÐq­ìz’[H¡¥.Ûž+¡€¨N‡ñ®„X¬h[õûŸCè¹9!ö~ü7,%¼"߄ЯGPþn„ØaTijV–xK¯˜!iÿÐuèn*—Ù`Ú?„Cÿï¢C=oÞ”ÉëÆÑ/¿D³™x…Ž’„æþ¡_Š:dbòÿ,2OgPç®ó!åû‡aB•tÈ#äòµùþ¡I‡”zLêëýñO_‡èP!Bps `Ü 0˜]Õ 3r†ò’Òþ!­@ïïü"O5uˆgJÕõ<; žN8¡!á„ew<ûbs b¤6—íB[Lû‡~=Ì„FëÒ;ˆÐÂ?T¸A’Ð2ÙÅBè‹«H¾è BÔÔ]› û‡Ž#ô]'tø<¦;éV†YB °×‘ÅÏ C™DC…é_òýCÒ”ø«Ih°y˜Ÿ“wà\9¸ÔIcìŒ6Ç¡ôùþ!)K×É"  C˜cR¡ˆdQ.H‡ÓÃT'ñDHˆ9!Ìò uÓ_,!½¸«O(æ:„!DH/½L+[ø‡#D–zKí¶2H€ê‰Á,)^ï5W¶ù‡ KH‡î@HÅýC…%¢CPlz¤P2 ûàêÓ]…²¦;-ëS i§/+H(b‡:¬‰K%s§rpW*°¬!Ï?ÔÛÊ …uˆA½Ü9¡ReÏ ù‡tQ Q¼tKرaBG_Ó2ýC}•Ò-«:le5 Pï&äù‡,¡’Œb:d-µVñÁ#ZjXv¾¥^ø‡¨•·Ô+}jŸÂi—úq«¨pßqe\f™è¸“k24þ¡âif7— 7Û7ÿJó¥äjþ¡šõ¸·Ëéõ©C1ùGUçΑõ ÞŸlÙ!$VÞMСKÔ°â4Û!&ä2Ýér¤B:TlãOÈ>}Æ©°¨¡Ëê*ÑK”ÐÂ?î!!¡ü,X%¬C¡ƒ+б w/p èÂJ'o^S¼¶$†]]øŸu완¼²C64¦/9óvP‡â„zÎH"B¨ÖRZM‡×D¨gÛÙ÷fU†P >5ßð4{$ù:4i±òδçºcîOææàjPu-ýCŽ©¢µc‚:ÔS²¨ë÷í !iÊü0!8 °Ì2E‚þ÷2 uyvHpÙ¡:­,¬C} d7rKcBLEóì%¿F’< Áì{y„t¶cœÐ2~ˆœ°h©Ëu³ƒ:$x7&ÄÁ]|¦=¾·ŠB„(—jGJvá8ßË%¤³®£„°?tRüP”@È#$ ˜Ý„†©õD ±œ?ôŠFcF¨gBÔ¸Ÿ7}&‰¾îFjÄ„dæož°ÔJP‡zNu,5µÝï‘¢Ϧ'CH¿fBØ’ôQœÐ9þ¡ùoT-f`M®C(9.«U^,y\Y„Îñ]c\Fî¡óç/»êØ^îó9RÖ!|-“f=í«Wö­í×KiºÛŠ&fè9ò> šI8ŠU0d½é`»Û˜ÉnÿÍ/D(|-[RBÔÝfBpÖØC0c7Åõ7è wª¤·ùqáÓvÿPqB¹:%„£SI=Jî#ZBÒ’>!sBÛýC º}?uNp&(ïŸ&´b‡8z! Þj®IÞ ^šÕ${î#*Ž™Í-ùÛØCÈõá#`ÜZ0 dåZæB:½_‰%HHE_B±ZRÞD(4\qdOS@ ´¢C^3C.Œ‡C\&J¯ð0mÉ–~U‡XÏžÕ!Eþ!6½£@uuh…±… BÒupÔ'´˜¿Ì'T¢•­õ‡ÜfÆh´-4­¬·êb†ô½=.éä×2¡fÛØDháÂ!dÏ„ÈR?O(¢CîÄSøL´¾Z9–º·c&ý! $”Ê-Œäô‡ð¿œoc ¡…¨Úèñª}êÜQ‡ñU#t̸Lnöså:ŽËꑳ½WÛó%fV:€ ‡å¨ÃŒ‚-Å;© ï%øãÒÞ\¶¸§]C7÷\dìèCÐhW çb©ÌÞP2uèÿ>-çQ4„°› h‘â‘;KBÆlöôü>9ùé[°±F­íYðýÆ r£|´È9WiIóa ‚÷BøÛ“üCÇ¢³4C­!ZûÅ«„¤!d¾¥$•ÚÆÎSO<÷‚×:"¿l!rZBlŸ(ÂøxŠ•ï-!\™1:wœ¶RÇå—E 9ƒQÓ]öæáë=‚AEïë›)~Ëßr a ¹ç¹Ý?DqCs Ÿ)sº ¤»e«„d!}… ’k„ìs¡Å´e¨õÊJBƒNó ò£h5ø¦«¹ëšÕŸÿ¡„:oÑ‚Ðì v­Ch6ü’U⇿ÎY«Ò‚:•øéÏ®õc%[ÙdΑ?”PÂRF{ºj‡V¯öúZÖyv­AûCž-ûCØÊ~¨¥HëS§Vh„R+4B©¡Ô PF¼IæZß”ÐÕ‘·Ö7%TP¡”4B)i„RÒ¥d"tj”ç äùhÈo/ÿ¬·µ(ƒê¾IEND®B`‚fox-1.6.49/doc/art/foxlogo_small.jpg0000775000175000017500000001411512130340076014235 00000000000000ÿØÿàJFIFHHÿÛCÿÛCÿÂÇ"ÿÄ  ÿÄÿÚ ®¶á¤œ“‘Nâ8$:ñãzA¾¾ž-ZY(ƒƒÛϾ¡öhSøF®«ê‡o¨yW¦>Íú1gDr.£u]p·b$±Ô£®ñDéà‹ß)œÓ22áÂþt§Ÿqœ´ú´ÈpÛ«›ÂCÒPœz¹ÑìŽ6p_M,½tG=Uðƒ,üy¨ÿm…=¦‰$!a’hÿÇ‚½8ÊJècdéD%_¶ðpÍ'$ÿÄ&56734ÿÚݵYeWäuˆŠê ž­ÿ¾ä2½.IþÊ\¶/ª„+%,«2 –ž]ž-^ÏÖËWWB„)ÒàȌƜ«Îb].0BCieRˆæ « †4Ðè„\ä`wH°*¥´þR«ÜJ¬TÛ‰¬ÐçÌú½øvòbÂÓf¦»®æ3¯ ÄŽÝÃÖàGëÕ€ÖF ðVUàë8L}Qbòtï­c¯Ä.I;! X›¼{ hȲl–výŒ,Ýñœù‹ª5Õn{„÷*|ëŸa¼$ÑÞA—Ïjü(áëŒÞ ?ôÛŠ²˜€©\"!ˆ‘&m°ëo5g3a •z݃Rñ_'NúÖܹÂLØÐíU5* œîo:³tsSÕ`ÅGCÍ7rá¾ÛO5¡Æc¦kã {.¹’´ÄV!ÆO¨Éy—Ïjü(á냻…k'Žêl8þUX]Nîù-Ñ;›u«>å›öo˺wü°ÑÜ»ŒNdXÆäïg3DÇ›×<ų í™r¼Õöž Z­‚òŸn8”ëMŒ~>Ï·úßiµIâEœÍ/ˆöK Løµ1Û†sn\YìøÇ$ÞH¤/ÿÄ1!"1A23QSq‘ #Ca¡ÁÿÚ?ýGÌœUéÁœÔèø3adpFTæ²)]AVûñ*œÜJoHßžn*¼QÙÈlQTE1ºö^¼,hô‰¾îû-ÏŒó.º*lµ˜“#‘%Ðè¨ûÿ´¥¸TŬæÒ?‚½¥ ÎŽ Í…°¿•:Þ÷üñbJ«E„ÈÆ‘_ÃE½Œœë|oÓn+E™:šK¥Žbþ`,·ÎH)¦ž[ùÕ8VGÀfU•¶çìMˆ2Ö,¦b8§&娲¿ýZ¥5*{¬˜63Þe¬=Ý‹cº¢¨]Vé}þ|{M†0kpCT„ ¤€’¬‰;¨‚ ÝÃöDý‰Õ8›^§Ï¥· æŠÍo€/—ú©ÅF»bÆ}xÓ!’“gƒdœÛ’j1Yˆä’™TW$»¦­` "^n®ªª’-¾Þ–ñKFZhËwÃWo‚Úkýykcn×ùv¶Ü=WŽ3—OqȺ1Æ: 2Ê…—ÖOñøãÆã;*›.Y8óuofAµÃdÖ[cëéõ ÍN#óq'ª‚¶ ¤y •¿›ÊVéµ¶õ›]§Ë p ¼âóN¯ .Z}¾.׿^=¥ÔX©×b>ÀDl9Ñn>½”¶æNüÿÄ4!12"#Aa3QRSð $Cqr±ñÿÚ?õž&¸ôÇ"¼VåTá»UÚíR©á†'-ÔJœµ8–⥠6rŠZ•@Iº´òÀþaU§œŠón!×´‡H4*؃÷î3íš2îð·pnýW5.;][©Ç”þ°òä³óÒÝ/5(·v¢ùB•8¥Í0t·É-Ú¢êû"½£ÍðŒœëHðŽéµP¢§¹Ãi5æØ{©ˆ3–à–Û—¨ÅmÅݬíUiØ×Óé@¤ªVS-ÕT~i@¥*€2ÇŠ‰ wcŒ=(j×XÜxðê®#fy$Lv¤€4È…–艺âÙ]ÞÓâ ­JÃÁW Uªy4È”ôQCùj•¨£ õ_=Ø_8¯¦ß4oÞ˜ŸOª·F¢Aœa!bÒã6†Óè-0+ âKdú<0ã°jp¦4ÒÙ×bÅ¢Hm¥¶«8m6¨ §H›K«QjSZ&Q¸b7‰Ä7@]¸ýe°*¯ %{1µM¤RÌ7Yƒ·\c¹÷^}½1Û_›ÁT‘oÃ…Ýc,Ô`A RÛv=2_.ò`b´{w·Y/k÷áêTê8e²hBbGu[l™ù¸’*[Û†ªYÐéÔÕyz#QiÌlêK£Fó¬óöæ <=xz^K“Lœëã? L­}¢q¨àQœTå¨l¾®x‹—gÓ!ÂWNko¨S¡ï2q"I‘§KŒÚúزûpý.<(2Zl$qêt!såXiÕ¾†­ÍÏÕ†ZU5ךiU Eº!š Óä½x¦,Hñ¦tî—­$S`&…Šƒ£mžýõú°uìÔÜJ0(o7ºdáfÝMÔu¯¾†–Ó²Uã$v£E‚ 9ÒN'œ]p»¾‘N^8®E¬M¤RV›7£EÞfå6†ø‘锉©Sh/§‡_qóœ/7Úý;¢Ñ:·6¯Òvô[w«ÏµÃžV\¨S*O¸BŽ”P¥±fÓÀõ#Χh*ž8òBâ¥'¹hÐ}-0a.ŸÕ°Yk¥9ôÉ_íÊÌ¢lË)òÜjÿ…`"6^*‰%߯è‘€A¦b´¥9éE/j•Õ}eŒ»YŠˆÜÇ#pƒÓä²L8VæVwO°12 LÁ¦ 1:’ŽßiºÂ7.ëËJºr\R(• úiÝ)Á NÒ§I˜ú¾æO"wvüxa#²" ´Î€K ……ÙÞÌT}öWí—ÞKà0Û%ÙvSM—°ÌERâ‡LŽ»qO}Tª?jfY'r ÇlQ¥F2B£:«ÚÜm|D€‰=xÉ.8ªê¼®];~nG$³«Ç®©ýÜ3 L¶#Bcl>n§u:áÛÒ[Šf˜ƒ²$j ÄÖ$vHZ†ü¦Ô“Ôëon!í"&ðÌxíé»@’f¾ÝD«ùñ/úŸ½î?íƒÊ­U[VèÛäÃo¨Œ~‘!È»o:¤¼TI„Òœµ«„÷Àû\[º ID³Ûþ“¼z¿D¸|ìWýÎížÅ[ò„ωw û¸˜ÓÑ>:6<ŽPr¿ÁÁÃ~Ïýá™4æ•ùÔw\Œ]Ç⺒A¡NÓ©¶Ñ"wèTN6Ã3 SY¤cq–7‚J4šm­·¬‰© -~üC~47˜¡Ó6‚î§Ü⃻ÎoÜzSÇÁl–î\GÉ”²#›9ZŽÏF/‘„–ü#®YU=Dùø]†¦µZuŸ«í’¯TÈIbܶÒœ9Ï»n’yÊtiáÉUÁ«èž§mÓ»}•ûcÆe÷’ø ŠØÄ!_*/׈nA”ˈ(›:«ò2Taô¨²d@v^IëÄz¦av鮌¤i§÷I÷]më-(-GEK•Öý[[¿Ê=wâÐ]hAG”‘"– ¾†¢ž EïÄÖ¦EuíiEÃж*D‚¤ˆ»2A\TQ+~kq‘™s4¨ŒXî 6î°aM.<ëºQÕˆˆß·ãÃê#ti×j›(¼Ñ£Ím¤_¥¶Z®ªA—Je‡@–ô°víGe¥º3Ó´Ú÷â—.¡&šûr*,2) Ù&bHBw$~#}['r®(ÑšxÛbAMqæÅl. "ñÓ¼å¿rõPÑjÔö„Qãí–”!…=œÓYrÞ›œœ1³6 ’šþM÷*ûP§ñÇÞôßðe¬Â5æ ‘v–)OcWãmÏMXO8ÊjnžI §:‰ìBz8Aaо—Y¸7EÒa:éÕUOÏ¿¿ò*Ÿî8’ó2WP£ÇPu½!×P[.%y(Ð’{ÚokéÜž¶äŸV7b¤8Î[Nã 9“ÒªŠ£©¹Èºn‰õ`ß ‹î"##•tÐx ‰P¹"zð¦ã4÷ –äfܲ"U檫7Šã¢#‘Ò/ómU ŽÖ¿¸ôý=¾<¹ñÃÐd1oQ2Ûââmº•9$¦Ó»–?ÿÄ#!1AQaq ð±áñÿÚ?!Ь†©h¬%b°/éê0Á´—è±Y1éIˆó³n€ˆ?lÕ@¦Ú%ë"@FVËr­m`$…É$ý¸D/ˆQr#ÈZÎíÈâ¨20¾Ö'à E^°T8à«ëµ9ñ92)Ó¬{S„aÁÖ6ÎQz"f(^eŽ$±"k/Á €c¬òmÆpgË ”6ê/¢ŒPZ­7†¡ÌP»‰ny¬0@V$|ñ#äØ19!Y¸S·#¬w$aDÖ›ú´±µŽ½oMLBQa/¿>Üg‘6ŠÏ!€Þ!ýCþ+6Œåøâ„x(XQ!†ë4¦×ZoB9!N…'U‘Ò†IÆçn«Üoé÷2w¤2$ŠØ9Þ\‘ìÈdéPEu‡• ¾“\TƯì¼2»Qµÿ,Æ¡¼÷æšË"-²Ÿ{C"2ü!AÞªö˜Y—Š~Ù|1#“‚ɹ?.!BØÀÄæ¼­ù’ÅUB"il (1“ÅKÆT6´DfoñÔù ¨ÿ¶4ÉØÒXÌà ¾çe¡ôZï¸Ëé’UœÜ¿*£ßÈé ÂIƒ¼O{¹acž õÑ/ªþ«û/ &ÔÐ1/×4ô$=R 7¶‡„2‰º=ä†OuŒC<&Ð2Ô„tŒ•ü :ž£š@Í–àêð£áÙq|1^Jý®N®-çpaœ}xk b”k@¹Œ²DHF2©›ü€UµLİ-²,0›¬uÅ•2ÿm$´±ªÅVÁM_nbz`äH²‹j³@Ìb†©?X£+®ÕW0m4Ôúœf£R˜0ç$ÊJ´6#N{ÙCÏËA÷2òÞôW,ñ¸øÄ¨-¨ %¤ÄŸu!žÔA4&9zÌjY9Uó•Ä"3‹ý£8ì$ת˳ÙÿÚ €)t? AžCÉH—õ¬õ4ïÿÄ!1A± aÿÚ?üè_)÷О½*œ½jYCûÑNHö`jB»âê¼—1ш’<É¥L„ÑÕeäŧ|êÒ $ç!eæÀb´V@µ¡:zÌ+"¦ 'ð CÍ ©Q€v?AÂ(Ø+Sú8ï‚}ò,³í FÈ4žÎ¾ ÄÒxŠ*ã _Œª„²$ÞJ¥ªQè §‰Z6 Á¾ñ>]nñìóæŠÀn7JR»BÄI€lÉ\`òƒ3&ðT'*x Ð6a£’/ÿÄ!1AQa ‘¡ÿÚ?ùþG§ H {ߣ”˜é²L¡‚ÃÔb!þÐÛN 5îŒÐ,|©Ãÿ³¾“¡åœEHâFoPtÄlwÁ¤t,ɨ&i ô)˜(Ø<ð¶¤,ɇ‚§á úx߆úFBó²$Ø–ò+LÔmC÷èôÄÐsx°á $@4f’í¼/Ù^—ߨúÓÖÃà ”ZL‚8BÖÜši7fö슸Ò©äe÷Ã]J*íw$›ëÿÄ!!1A Qa‘q±ÿÚ?~ŸSÞoË5b4j'ìMóá\•ÔàFq3>*äÐ ƒxFñâ˜]˜©L±qGØå-?A[›§´Q*@ÄKtâ­YCÚ êRã.šnBL´#ßÔSͲŸ_®®ßýD]Éø|£˜ Mf9„™Ó¥"a `¯ÔÈ“­‚¤œ ßm€,D®Ef:A”$bgøÌZ·AUʸBD=h0ƒºµ¬ µW• ‹ŠôVPr›œÝ*5½~©ÙF-4Êf…«xk&ߤ‘ÆS.Fào¤BÄ{/ØÌm©ƒàqi‰|aH‡,g`›Â Î"I~ÆŸØóž'©•Œ©Àœ µB2ý×j§“8Ä<]^ÔÖ"m¡Æ'e.Æ¥Ùi&ÀžÙy$wØ !<ùß9<Œ •|júâ·Dè!7hŠŽpÔÐø•’iè œЫ­ï“ûð—õ01A¦ 3ÿ‚—í¿%~˜TU n¼\ˆ,ÙµEB¨Xÿ•¶n—’luÔ?ãÎ4 Ð$Á nzI¸ #•ÛCæ¶ÀµÞú7ÌZ6ps­¿š~-]aTáÌwukøß–Fªjr)0îé4zbTÚ³ý.éäU­:5?†¢50|eÃ}f„Q/ÑI÷%‡ñ›é6™Ñ®áõ…÷ºSì3d†Éé&… G“Û­ÆÈ¶¦¦¨Ï”‚æÎ,YLnž¹'ÆTŸ?ó̶ΜJÚòJª1/u$vvøâËë]„Á¼]3ÞwÝ¢ë~Ì»nÅxèºEå 0À 0C”¼‚2Ç“{2uíaºˆ<¦=ø×{%MQŒAD˜Ìuy _!ß)ñnK}\“O$ÿ%ób¸ â ti…"ŠvÈÓ£v5P¥Ù<¥dþFµ5¥Š(g¦sç«]u ©wÓUbHSÆ$<]ÄT39 q>m޽WˆfeÆ%7UÄt3qAº,Þš’Úƒ—³e˜DÅÑD!&]ÒtŸiùxv{ k,FŒ0œ¸Â¤³:FÞ~¬ÁVë¶¢îŒ\ëÄC¨]g¸fÜU×/Ƙ߃$~?QĈ4æbÓqsˆw*0ƒê¦²®`Èü©#o‘B#1n& êÕ)W`f5›zÿƒß‡äDèÝÁ¢Y±ŒQ‹3‡ù˜óྠ1—©_=™ó3ž™˜ òºh&1Ë2dÉÔ&ζ[[ÌpAÖaLŸ‰4³0^‚R˜Ë„SÆè ©ß<]ÑL^Š„Ã g÷Å¥“e_âx숳m0§¨Ãä—‹–£æÓº˜‹Y;3~ͽv ÿ›ÄÝ1>*¾Un…lSíãv€Ñ¥f[ÌÜP·^,AnÌí‹Ê`æ0À 0À 0À 0À 0À 0À 0À 0À 0À 0 1k0À 030×ßüèºE—YÌÖÿ‰‰ÙM“‹a~mÝq/ñê¡ L];IEND®B`‚fox-1.6.49/doc/art/olr.gif0000644000175000017500000000010611637250333012146 00000000000000GIF87aÂUªb‰°…£Â¾Îßÿÿÿyš¼ßçïÿÿÿ,ºÜÑJ@0`!ÎàU4Â@ŒD;fox-1.6.49/doc/art/fifthplanet.jpg0000644000175000017500000000453011637250333013676 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ„X"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ôÅ“q# ö©Vnœò e‰³È8¡îUæn}¨k튜J׊G­s“^ Ù_º;Ô_k|dgÓ A¦›áÚ¹¥»bp[𲓱éÉ  ä¼|õÀ­kÒ x®j)Žâ´-óžI ¡\éKº¨Á0òÂç¥zÐÔTçãx5^FëÁ5<`‘‘Ò¤(¤à‘šÎÜÁô©#œã$ŸLU‡hO¥3í.¬ N”õ´P9Êã¹4ió~" .\eÉ¥2ó»ð  ‰8RôÇz–9ÉǩŠ“ÇÜÕ´‹%‹zâ€5ìY²¹9Åhù€ŠÉµ#p ´wg8—ø¢«;äEqà2õíÚ‚Ø~rMEÁËsÞ¤/é×=hžY$…LóÔô§lؘÊ`:ÓX0c‡ã=)7ì ÏÐê!¡ÿT‘0~ãZ¦z³u=©­"Füd“Ú€6>bÍ <Õ„x”|¿1÷¬$y×èkFÖaóŠÙµÃ¿>•x€W¥gÛ“à6Oz”ÎAÆAõ  L8Í]g^~j(€Gî*uð`Ý]L· ‘ÊQ äíMÜÒI}sR”’!Ü Q×>”Ñ Ù çÓ4ÓnXzV%¤÷“«|á¶Œ€ "ê:ŒZI»’ïy. Œp7`Ðú[s’Hü*&<¯'¯zç.µé¤’³3Ƒڳ€éƒ¿#žj¬:¾ «1Žà΂ܹv‡o–ÞžôÜÆŒô«Ñ²¯ëû@Á¤ý¦CÊżýq\ý·ˆu/ì«ÿ6t7h‚XX(áOjô1Ã7ž+†Oj-¼ná'X䣖 ÿZf•©jwýJ`ΙÁµAÇ­w‚qJ+Òn5)5…ºÔ<Øà“fß( Üzö¢€9e×í›÷Œ½QËâ;Ä»ã#žÕçÒuiþº>i£O¹“Ÿ0¯û«Ö€=1¼k§FŸ|žÜU_øLôæ€ÚÅÒ…`ØQÈç?…qVžšy˜I'ûÄâ»]3à n‹%ãy Œ~”£ªúšKsýŸ0C;‡#¯O®ÿkÁ-±´|…tç8ÈúãbÌ 2UBFj/µḏ³µØ|·#ŒzÒ!1=ÔÒDÀ Œücò§Kio#‘,YM„!ÆGå\ÄÖZ†žÛ¬ç‘"=‰ÜŸ…DuÍ^Ü~öäÞã@t¶ñÉv. âMžYÃuÇ¥6Ý%µ)¶âVDè…øþUÉÈ?ÖZ7ü©ñx¹ IæC \ü˜#¦?Æ€;n<‰f!Ý+n<÷¢¹øJ¬Él™0 “ÆzQ@­<7»’­_»[h–và0Hìþt“jD{û ¬nsÈÂÐö¹Ž¶Ö% êy4Åqs&ùäÝíŽEÞÈ¢´¢tEÆ?J¹n67…êk?Q´1’@Í_´šÔÌ¿iŒ˜só85’¡'€èÈSíÞ€5¦Ð…ÇÍÃ>zùZ².´_%ÊK‘°êÎ?L‹TšÃó[VÚÿ™Æå]Eq?:åäÒ$¤ªO£¦ŠëÙ4ËÁ†ˆÂÞ¨r?#Ef®“z£˜”Ÿv©ãÓ/ºùðq^Ò4àF?P(þÈ…³ºÒ"ÝäQé÷Ƀöi?jCÚäµ¼£þkÕ×Cµàý•Tû rèðþ­€ &/p‹Â²Ÿö”â1Ú70Ïq^·&‘ &ß,céTeðŤÀîŒgýÚòɤ #>•0 ìW©\xÂPv†CíX·¿“çØóI¢R{}ES*ñ±"»[ïj°!€¬‡ðΤ½b_¦á@‘_ºh«·ÔW‘lOÑþ´P"øÃãˆþóÛ¿ûÑŠ½ÇDG™ei'üÁ ¦ôárº?*ôÈ>>ëi;AÇû,EiAûAàÿ¤ørQþäŸã^F.÷œ'_î öÈ?h ð'ÒoâõÀ«ÇN@’[¨߇ÿ¯_?‰ãþçëFøOT ¦-~(x&ó„Ö R{H ÿJׇÄÞ»ÊÕì›ÛÎòiŽÙºÆüS ½©û©·éÅ}‚’XNwEsƒý×£—I´™pcB1_"Æ#˜¯.bÿrCZ–úî¹kƒmâ;ä#³1"€>–—Âö¤“Ïæ(¯Ÿmþ"xÖÓ5´œÒ¥É[ÐS¼ÓÇŠ(ë#c§vžŸhªÏ’p30dÔ¬l‘ZêѰ‘¤Þh¤íž·d+Ó0Üþ¤ØØ„»RnùT†q7o‡˜ˆôñï¬Yë{­uKZbC!ŸÑsÎ"ýþDÖ›¶éæFÜé—<ªwŸ^fò2€èwxéñè׸¹A 2)s{øˆ§å6wd©C¸ã,4Ì7?©6‰Ã5ÏÀ&í|Ñ^ïÊz¤Æ]Î.»fz‹”›”ªí&cùµfÛ©Ûù‰ÍõÞ’f;ÁâçLéÍÑäËÈÍ `éñÀ± sú€ÿÄ)342!@"1P#$ÿÚáî«=Õg¸¹œ3gW^f& 3Ý_!‚Í)aÇLü韄–„`Us"iX˜å9%1FÄã+µ\ ’k5ñ4£ú‘9”8`l éŸ3ó¦~Oë7°#&gEábÕŽ™ ´ÙÖ:!MmF‹WméÚ®ö•‡ÕDWNÇÈ­r+ª½¸°v-År³vª ²ÍáI/eÌ­W®#œ¥AQE³ü×¶62õxQk{û>÷ ~¢Xä$*ªÕ™°ZÏ­ÿ2vcÍL÷U;!‰°ß}߬Þ ÿ’¯‰¶«³.vµÁS6ȵ…Í‘Ô'ò9­¯Îscäf·¿³ïb…N~©Ê%ꪓÙ$b‹ÐÛÃΦ·¿³ïp§á×®(Í”³†³ëÌÊ~}ÿ]½…¸ïŠ­N+Ê?õОtók9«øÙLÉNºÇ ‘šÞþϽŠþuyzg(¦ªN>Sd<ÑŠ[o—*šÞþϽŸ†ûó1 UÈd Yõ¿æe? ¾ÿ®ÞÅ_/†Â¼µumÍyšbl´úé„"íž¡Ôê@WjÊ»ë:‘šÞþϽ”,ÄEŠBâ^·‘Z°(PÌŒ©¡i'­žuª |½bZÞýš‘`¾22ÕX¬4ü2ûФ¶çÏ­ÿ3)øe÷ýrP…¬øºŠ[?ÓYHÃ`½Xú«±ˆªºù±ò0k“3dð O\ÛŸÜà”ŒÅ댲æðç©~u/Ãk÷ð›/œ±pDFYpø»#ýÿÄ%!12@ "ABCQÿÚ?÷ÁµQê1Okf¹•#| L×ò®‘º5ÛØ×ò£Ô‘7ááìCï2‘àûf#''çÓ{1ÿØeàÄiz¬’´TÖÄ!F™.ݲPwhJdaNÇv/U“‰mááì^OÿÄ#!12@"AQ BÿÚ?ýÏyb-øZ†¨(ýKq^Î8-ÆKqRÔ8¥ÃênbÚ@zž‰ÞÞ‰ŸÉ IkÃênÀJU*ž£’Z ª#xÆJâ„]ÃênäÿÿÄ5r!123AQaq"’@BR‘±ðCP‚¡ #²áÿÚ?»{gë{gë‚Ñ èÂïö:¯y¾_îTŽ—olýBï3ª÷jO++v5‹–U,Ù‡A7/é›—ôʵ›Ô]UCI»úCu©›¿©•d4ºˆ¥»O:•î/ªÙ±À””PIé*lœÓÈ…» FRY¹LÜ¿¦n_Ó(ÊAëìö¹í.³6WÕ,Ý€ <åFÛlÃO1âLÛSÒ}ÖŒ§ºtˆZÐîö¡n,t¹f„é¬*Š À ^SB4ÏÅG0(ÄÒ–‰AÌLK·Àó”•;^ñžK:޳ nSì˜ùež[ìÿ8ª*K§kÞ2ƒv?¹kò‡°›¦Šô¥ah…éMÏk‘¾Ñ«E<'êzöLZ9‰‡áQñm7Y¿=—áhWÞáÕÎxíün\·>Yg–äËX[á¤ÃÉ«üFånF?M1òË<·ÙþqŒu¹:â¯é›­~PöYþqÜûE®FûDJÓ¤ß7Ò3-Q æ³é¢ë%îcžm ûÇBÂ~³Áoãrå¹òË<·&JJr¸u5…¹±[á7*ó2Ó¬|²Ï-öœ`{*tõ£ ¶±-~PöYþqÜûE®FûK,ׇ]¥šª‡„ÐŽO]ºÝ¢§-fTl !ñ—×)Äj071rÜùež[¼'9f58ZVÑÅ9,»Z€€ñŸô³Èâf2q7Úxi²ºãåŠØðÐr›ãéŠqâ©å,ÿ8Æîg„ÚŽ©ã.±®Zü¡ì.³üã¹ö‚§QÆ*Ž¿áZa<ÄÓjÓÈ¿8PÖ‡” FÑÌÜ1×G# Zy˜¹nª6*ì[½ôõ›`v¤ÔÝU$´>bQŸGKªŒTÍóMóAËSœ ¶„~õ¡Àåk13TÜmöeËûÿÄ)!1AQa¡±ð‘Áñ@q PÑáÿÚ?!›âZ­TðÏ™áŸ0!3!O=cí ÂÏÐîCMUÌTZ ²ŽÃ|ð§K]eþ]“¤÷f—‚ìŸbŸbœó²‡ ³np%Á·èb0"hð8¤Ð^ÐA©·œ"1¡q¶Ëø‡oÉ)DR`Œå…Ç«–XxÕ9W!SìSìSìSYåB¿Án‡ ½ðaßjó.²­§89|×e-"¿b(1)ÆÖbqXo²‡õ{ÅÁuM‰ª^/vtžì¶v”}!Hÿx¥ÞômH;Yiµf >{¢Í©u*qBâ Hæ‚—ðÆËnº¸ó…ódÁcO‰³<ždêøô¯tÀë(Áÿ–Ü‚:ÏŸ[U7¹Ô4²úLÈ"²‚ŸÇð[¦mˆÒÙËö£Ù· æ8h¾?0[ºx¦%^ŸqÜû è _8Þö²Üp0~'»ÃÉæN¡ß€*iÖÆ- ݼþ·ŸykLå-—‚— Â³ÊôžO2uüzWºj‰<…å/dfV®Ü:ÏŸt¯tðÛþG‚Ý-”1úzX‘Mæ=«â à|ð÷~¥z>ÄA<÷ô‹ˆ5*Vçþ8tžï'™:‡~ ©¨è¨´f*¸;Ýo‡ÄEŒö¨¤s}x)yÐ äó'PïÇ¥{¦ùcÙ+c{ *©©gϺWºxmÿ#Ánþ Þi¹Ž©l¹ËnÓ ŠóLOù.Û«nöÄ °ý±5Ño´ÁO!Ù'»ÃÉæN¡ß†˜â{ELöeBÃs‡‹ô€W wÎ4l­‰ì¹¦/‘sÒ ¥¥­Ùäó"±Z5\ó?ì<aù+Ý<6ó»6`æ‡ë¼ë>|mÒ½ÓÃoù™ý3×eßø+¹sÁ¸f‰µ')ÕbÆt6¨|EYŠpIdhˆ7¸Y:Ow‚$!JA Ž+CMÁªWrf¼(õj0Jº [äÁ²ˆ Ry¤óIB;hx&j­®0Q±¤€"æ“XV²ô²íá–‡‚j«k‹ý/IîÿcÿÚ S„S…%û-1‹È½ÒÀ·¦AAARO" ­Òrpý•¨üAAASσAðõÔ•U4ëðAAAsÏ<óÏ÷ß|÷ß}÷ß}ôAAAÿÄ!!1@ APaqðÿÚ?øØ'|É0ÝBd0ϸJ=UËR‡’{§=ªu…Œä//¼8ÜŒŸB& ù£ùú¼_›ÇíWÉ‹¾e»é¢šhë2¨Ô+b¦/ÿÄ1!@A ÿÚ?ýC>—`¥],xµ:,…¸( ënlaäÚMͧÍÍ“ Ó‚ª°/9Úx÷‚V\¹}ŒÀ@A¨Å§PÒAé‘+bµ|{úÿÄ)!1AQaqð‘¡±Á @ÑñPáÿÚ?«BPªØëzóBXY;=2„—cP^;T³·Ô À«„ Jä UlT¨(@Xº'¢320˜Cjt„`è©é­°#'ÒNkÍ>«Í>©Z át¬[Q–Œ"Nœ0#è+I¡GŽŽÚ Z&Poú(ÒÑ,bRN‡¤´ÁK®*Æ1=q^È ¬…8% B&#A’î1=Šƒ#€æ(6\n.a1† oz‡óOªóOªóOª±»¨Ö‘Qú°¢´>bqí_ã¿”$äà¢ÞŒ%2BHâÌâ@ߊšÈ¡:¹´Àܘw¨Jñ>ßúÑú¨”ŸÄqŠ7[š#IÔþUÔnóÌàæ èØpÀ6ô¢;•1é­ìˆ øj`©($†\”Ë2P Α¦KâÌäÐ ‚+g.¡ïÚ”  l­"_pOŠS°©ÐqŸVµ"¥¼Ê×½×ât~`ͼŒÆœÒù#‰ÉR¸!Þ¼v•ðûõ;æµô?^µü=[)K½ØÜoݦXÙ(+GòžFÖ9¢¯¡O޲4XmAšT7´»Í Û=É`|ÔK¹˜‡šÔ'×'ï]~÷_‰ÑÒ) ʵñõ\å£Ež“¾èïNR‚vJïNàÍl….pG=Ó>´¸©ãtãÛFžÓ¶ÂˆÒAŸj@1A âqw«'P¶É;W½ÖŒÈޤa_â*Ò&˜F ™—A¾k]NÜÒŸG¿Ï5 bÂg“³ãŠñÚWÃïÔgš×Ðýix€F'…£¿á<~ ›¹75L$´;Ü´ÄIÞ¯Ö¤™Äâó‰$ã¤Z áÉŒh" †3ŽºíK”ÊHÅ÷ _vHXx:˜Àõ½!ds!ù¬xåzÁf‹ˆù‚ûE%“âq}( ·,S)#Ü+ý_â¿Õþ(¤YˆÈ£  UËU¥P¥ÍYh‘"0*…HOJ²x&17i"°(æ 0ç¡’„«¦«J¨£š²ô?ïë?WÿÙfox-1.6.49/doc/art/bigpenguin.png0000644000175000017500000000134711637250333013530 00000000000000‰PNG  IHDR09‚#µ|0PLTE²ÀÜZRA G;&qng·µ°ÔÒÎù÷÷™w£w¢‹^³‹'îÇÒ˜¶ø;&tEXtSoftwaregif2png 2.0.1=^¾hPIDATxœu”?hQǯw¤Kå2ˆ“Éïbqph.þYëˆà …F+¹ˆ“5öÞV‚H¡ÅR(8œ¦D:Hó«¹Ì‚›.))q¤¨“oèÖ”ò|ïåÝår—>î½ï'¿¿ïwQ”pMÌ(cÓÇ“˜Mè—³z.,r:œâ àìi R‡D.i² p[‡«E+ ŒRÊ+ `ÄA¾p³•1Àœ…'ð8 ̹w»_Œ1æºçûTH”®×ð'Aú­Ãdõ=ÏoÒC#Ñ,ýÍñçú±–U31`=¬ÓŸÅXñ´À^u¿—‰2a8óóEBæâ÷®N®“J¼ñp‡8L'K0Z‰D®Ø éٰ葼R)sÕ±íW#Ã¥ÁEˆÍ®+:*\“žœ§#¡Ãƒ †Ѽ ŒMˆ)>ÓC°f˜°ç†àE$º: !šF·€Œ‚`ê ^BX»F @¢Ï£ ?Þ•ÚÎEÀ"Ó%˜ÂíaºË¿Y`ëRžýc®Þ ý Eܼ‚O—}¡oõ}ü&<Ù0a™¾Nûˆ¸ ÒÄ™¤n»U€/S¶Ë™jQнEYóÙ³4ø"w¡(ð7ûÂî(üå¡÷V^ÓMqd&ô? } .ðözÀv ,èrsĦB¥icÆ.½fsпkUJ¾ŽäßO—»j²:V·¨`Gúì³dOÄø¤îºî=©™P` γý·`¬îµÝÚ×+ƒÃ ×­UÃI¼Õéäå6Ýéˆú?ÑS\jÁ‰IEND®B`‚fox-1.6.49/doc/art/win32-libraries.png0000644000175000017500000001444111637250333014314 00000000000000‰PNG  IHDRAtÖuðPLTEÀÀÀ€€€€ÿÿÿÿÿV$itEXtSoftwaregif2png 2.0.1=^¾h¨IDATxœíkv£:³†Å^äëx÷Ê ’„œ{þc9ÔEw ,qqxÛ;Øñ¸THEIíE ñgºµ ï™ÐÑ_Ò¹õ6úßÇ­´nB9Ý„\±óÍ‹›«/r>ó‚ͰèŸ?Ö§?'ý›³ý•õW÷¡Á„ÿ‘Ûçϯá„ú®ïÐ Jd ¡~+!~aM?s­ú„s¥û€ „`Û4ÿû™pûüËÑçÐVP¹T-£êfüþ›IÀx"?Ä¿@Úþâö4ƒ™-‡Ñ eCšÐ„ÈT¦ü•ñ‹cÏ µlBŽ }BtáÒ„ÈiB¿ –ñÕÞóC‘Z¦kžEèÕ2ïZÒmj­EŸÓ‹Ь│‡yq÷Ë\ –yqÊé&”ÓÛ…Íè&”ÓM(§›PN7¡œnB9Ý„r:¡þè,Š zïþÑæÔ¢çôïêÝ(Bõ X®F„¾b/LhÁŠ¿‡aÃ[ñSz$ó–(]9¡¿môÅ„¢ß8—1]¼…·„’ÇyžÐC´PÇ„– ðÖ¥O+ýV‚Pú(©íå„ÒÕ`ƒÔ‰‡¹(ïû$DOß'#Ôs±$=ç ¡^ð'­æI/„~]™Ð—9CC¨ÇoÍRoaà7Ö“"åì«´j>½ÛÜ;Ž&ÄÅ’æÓ†P‡»éûoíÒìA¨ó[!ú-F¨Ç?í»ðšõ¤ÇØe BNMÂÏQÀcþ›ÆŠ„<¹„ø;Œ¥6„D×w¢ïû VБa[g¢3(9£ëšk{'à§€Cû„æM°UÕ(›}¸S8L-›w×)"†Ð|„÷7£wjú u!ø ø:øz5Pihï¢hÈ !°m„f'B€Íß |-½OKÃbB°;eDÆÁôÎèpDèí ‰€–O !*@‡GI)BBΕ Þb A1#~hÞ à'Ç#›â„hËüwì†-H ²EEhЄþ2¡.Fý*@Ÿ $ Zš7éÇ:BpñŒÂÂÂ7ªÍ×±¡a™P´–6ÄÇ16izS„DäZ¦j™þ3—Ðl>’=Є? A™B‚ðà# d¾sê:rT B¡2µLà/ÿdm¾R¨ž}ÏŽÐxjòZ.!ÀA64m%4„z´c‡äÕ2(3zj8'ÇSÃoÝkAm%à>!å©çá/ÚS/ø!GÁåð1‘£fHrš¸ÚQƒP\ñ†sŸ~Ë"œEú(¸Ó…k^ZÌáÃF§Mhn ‰¹-„í!ôÔh­§Ög¸…°z¯c©=”S¾M½¯ åÞ:!n`ß„*é‹hç!D~ˆ‹õg ǽZ}­¶!”àÖúwmËD„ZÜk‰nÝ÷ìÚP. ÜàPD¨ þgåj‡ÎêÏ…Yß+ç{~¶²›I×þ&”{žÇE qÛO¶$Äe¸0!ùx¿ Bßó¥ë;òVObÜJ|9BßtYÿþï¿ÿÞ}B@2r®¿‹ýÿ…øÇçQŸÄ/!TTÀ0’O„F$ôóëÙ„$pŠ%Ä€¦5Ž,!ŒâA(Ù—³ô¶Lhüùød?IJÐ8Rܬ!¼¡[F¨RžÉ{BsõúžeÙ‰²Žœ®FHÀM‰2B•Úûê(•lhB¯ãòÔOÆx/}EB`Câ¬Ö­žêµ,$äDâ+²ÚïÏÂÿ£?„{UžmHlº½š(uH¨÷ò4ê2Ç EÓ@q˜ÛÔÏS(,µEhØä`ßßIR©ŠµÔÇ9=BœÑ€÷ë ¥‚î)>ž3Þ„vP$>Dììô…ÎÜ×’«•#¤Ó@,óÍÚ#ú¡äÛPg§/Ô"¤[!7 äL„¾X!¾Ç!$á.&4ÉÖ·ë­ÖiÔ†( „ï—Ú#>µ!“ÑÀNöýð•Ç2=œ(!NYå©§æñ¡ˆ {Æœ.í©UÊ ÚÐS„T/9Ahm-‹Æ‡*+bCŽzëgBÃ!’÷ÔKñ¡ÊŠÙŇ3ƒ¹•m+Ji¹MUVΆ1¡ÙSÏ€Ö›õ¡^$Õý2Õ·£Äž‡˜ª6"—m( „Úzüª6‰ašÙê$³l©×ÙJn=VEB±ø„ä) ´*…*§-6´UVçiB±øÔšÚbC[Õ ‚æÄ‡ ¡šŒVÙP¥¼u”ï’mq|ˆkYuO½Ê†j”wW²]ªÜv\eCGiM|h]–bVÙÐQ:4>tq:&>t>->t>->t>.>t:•ć˜Xý0ÑEm(ÒÍéz¤.jC©øPBWµ¡0>„á!é1¾åòy—ë²6ć¸ãJQЊþèª6Ƈ4!A#¢k)u¯Ã¾'Ó÷}0T’Þö™¬(>dÙn­£Äý2ç&º}BBV|¨U-‹ßs½¡0ˆƒ°ä©ë5³S6¤î(BšŒÛ†BSHðèfº¯/hðù¾„öËJÚP¯oIóÈv¼ßÑð3@¯§Ø•ÒùCI?v#zž€€iˆ(!ÑØ‚Î264¸„º„ 5wFg‹ùµ¬³ ц8¶–²s? yj¬e4•I 9ÈS+JÔœÆ.'ª“Ƈ℠nÒìÀŨ<>¤Óó§jÝû«öË’ñ!©ë\%B—íÛ§âCÕ ]Õ†"ñ!´“Ÿ‰¹wÆyDÂDzrlTe}-²ãC”=$°ßZ1 $bCíã¢ê«KÃøw\©g?RQBÚ¹U¿¬¯¼ M".6¡*¾(fCÏﵞ2„ìøP„PZvY âC”ä)!öÔÏ— jCÒþmÃ)üÜ¿ ·±[sïÒ“”j†ÛàKO'>Ùñ¡fçQ’ö'tÞ›·‹lãÓBOzöÄ0Ÿ ¤w(T|hÏœüÀ†Ô¼¡±l¯FtcêOè ,JN[í ¸ `óÛ]Ò‚TsºªâÛîvJ!ý’xÕ´µÞ»0Âh¡SȨΠ~”!tL|èA#¸†ñ ¨Š0ò¸Žp»ÿa«ŽFw%Ùµênu%ÄãÏ/Ž'µ!!¥nt‘ñk“Ä·ƒíª b6²I¶$ÿ]Ic ¤ä׆ÐTHè˜øÐÃÌ9;ªz!BªèmWŸ÷7N;xwâq4ô}ØBûLJÐIsZªá¥NZŒª¸Û£yÒÚø»| ãkÙúZ}/>T]‰k4P${Xô²ˆ…Ü+{jéo'OÙ'=o‹ìJ‰g¸•ާ^"Äí¡ƒÆ—m½šfZ$Û,ËmjèÀ0¾l¡l¦weBA|ˆó†&I)DÕÆ]¶_É¢e5Èjwî¯Ú·Ä‡Ï‹Þ^Ô#±¡F3ÏnTy|ˆH"$ÛÚP×Ry|H5d]B×¾×á䩼!ìUÊjžúª÷:‚ø¯øÖ º¨ )™øP3Bµ¡uqºÇ—‘Î:ŸÎzZævr%->ôü éÛÉ•´">¤c~ÕÔ†„>ž¤…K˜©%ÎÔ“YØ,šã¶&>TP<Ö?©Åòo$Ô[ºå¯‰íaC!¡•É‹»òãC|‹ ‚”ͬD¨È†¶‚ôY½¢'-ðÙ jÌžVÚ¸N'/ú “½w¼Âø´’ꟊÚw^Aù3 æ!³¢§Z_—4£ ¨ wfÑOg1Á4¡ >4ñýE¨eŒ18¯Lù3„ÔjŒ¸¢²P„pÔŒðá¤B(‰ñ-*cCµµ!ï¼2å/$„dlȼ© õü„ÂøP›Z–²!ç¼–Ë_J¨w©q"B%µlòãC|‹ª¾§ÎÙ©eÉò/¢Š„.™TMQòÎ+(º¹M]c”ÃÙÆ—=}^Ì^ºÃúÔLæ› í ˆ Á’ÐϪ¯;>”ÓÊéåâCÕõrñ¡ê*ŒµátQŠÆ‡øgÅÈ(bCûŒù)ÕŠü¡6„b¹íGü”+56ˆ 9ñ!I+PúP5B—ÍšÂøÕÁù£•ô2ùC”zL„(—¹Z .oC“‰iªx]»ª MS">T½–]󠆿¤! Ìe®¥«Ú4¦£âCW ¤4Š#âCW"´K .mCZí ׷¡oüَЫØP»@Ñ«ØP»@Ñ‹Ø\ýU HÖ-Á‹Ø(ªüxu ¨6¡W±!o YÅ0ZĆ®06ÈW8Ь¡ˆ UÛwåmõ÷ïÃLT=Uœâüâ÷: ¦™Œ5Ь&¡‹ÞëpáÀ¦í 4«¥W±¡ñ1ÚÍÚú¡ó©À†x"‰z*ξQ/bCIkÂçel¨¡^Ć(pýÞ‚P,1‘‚æ,½ë,Ì6„œÞZŠØP*Ó!´Ç"Z%64M?ÓŸ÷„¢¹°q”æô£gC‘5 %lˆ¦ôPßL‹/àw\¿cô¸|Ákw´œ ¾Ô†¦Þ&T©ÕõCY8WV€…Ìâƒy^tÖ’GRœ~>>šŠÛ:aÌÆE_\B|.DG/pFÓE;Êlè㓉D4ÑÖSÜ)BýÚÐ@o«6^A¨Ô!¡0‘HªùÖ6Z´!UË`œB²– ×2 ±%¡ ‰DÒ&B‰k LQžº';RžºSoó‹c=5sÂùPHô¡¢6õ®—öˆJ[Œª–y‰DÏÕ²ˆ ¿MífÚ]ëlÈK$ŸôÔ×ï—)B >ušr{3òUúößøÁ„^ņFJ¿ÞHaI\†þ¢„ö_FO›P’—Á"tØŽ¨ŽŸŸ:$ôØ}ðÆ‚ã:lBÇ—Å5<Üj­œŸºb¦¹RŒPíü’g´r~jY}ðÔe Mñù‡nB‹óá¢8µ‡—]P0ÿPõ/—%4&Æ—U^vYBñù‡” Õl ]œP0¾ì®eîµÌ_†žºöð²Ë¢ö;¾L&öñœ.JHiÖø2üu ]œÐº8¡c¢7!G×îÛjx¸Õ:~ý²¡ ëâCdMUÝD„PÍÝ?¯µë—ÁËքΧòøÐMh1>$qq=Xg–Y•‹gþK¹ñ!ø+tÉJ«n_™P4>$©o?U[ÛþÊ„¢ñ!›P5otqBN|È]:ö·×²)6?5az™Õ_M(j£‹RrâCûR+²à„íJ½³²‰¥’Ï2„ìäÖ>±nG~açu¶è‡^.à&´@ÆvÀ²&½Û¢æûW+›à ï0ú¥ÏΛßÐ1ñ¡ÞZJ£§±-åâ[+›(“êºö€N AÖ½0„hÍ#ôr7‡òãC²Á½¡!!|B½eC½eCÖ‚@û ãC㎄ºA/h’$ÔwšüøÐÞ„ØS÷½Û"Ü•YptŒ@‡ÎËHíM(º¾= NE͉-6¶©qi­&4b*‹Mj€ ?dKB¹ÅYú’–ê©$>¤µ×Zihí—Å×·ßцN¦ÂøGè—G?¦ >$iQ{ã©+]Í®JèŽ9:[|h¿Q-%:eþÐŽ[²ÊŒ|¹³cîü¡¬îü¡œN™?„%êøð²æ»+µn|™l`Ne„ªOi\¬âñeAô£–®JhÊÆ‡j)EHÁ™(O ÕtY/Sñ!xªªRBGYÑŠñe“êÒ˪%H^Ëð0Ìé„„Æd|¨v7䪄Òñ!Y¹IBv5;/¡H|h—Z†y\4Ö^žÐS§âC»yê³èøõË.JHiGć®Dh]œÐ1Ñ |9*è<šr+š:ŸÎRsœ[ù j†Æƒ&f\1¾ŒU±e#ä’èõ–æö,ŽYÕ®¢«š¢ñ¡ a>'͈ÛcV5fÁ„ÔðÞ©‹…„‚eËð zùÕú ?„™f:ùÌ̸Ü ng@K6ä/[V¿‹·!&„™g>¡n—ê¡H|HÀ°Dž}h/B OhïkÚ² M:>UbÕ»ŠÕ²îLµÌíXËŒ§¦˜áœ<õ°G’y!/>4ñìCà©«EüÚÔ.…#ç9?[|HÉ0$ŒsR:&>t>->t>j¸¾=—ẄZ¯o}B¤v¢¡ýs—tøúö±8õîÉŠ Êä1jLÛ­o!T÷ÛôÅ,O¨õúö§%DOߥ64¶[ßþ¬„ȈÞJm¨ÝúöQBÒþL¡°7nc6… ߥ'I©ÉJ˜,'„j¹¾}žÍÄF6#ÛÇøÆôŸÐ“äáJˆV´âéÄôiAò žV án§1¦£¿QâFœì&Ø­x8 ‹NÃBÝ ?Ôn}û8!IGáéÄF>Ux²ìÈvÿÃVîJ­x(oÊ5êÅ?Ôn}û!1a´WO'6r¥r’§¢÷¶«ÉµÌF6 É–ä¿‹_ìŠ_»„`¬m± µ[ß>mCX×T½!5½·]}ÞßhM½å¼«2ëè?ú0‹P?WšU~¨Õúö ?$Íi©)ÅÔI µR¡·=úáqd¦Ñw¥ *)׆ִ‡f[¯œœ—!¤W DO ^±{eO-ýíä©#á¤çm‘]©#Q¶8âmO½âZÖPÛÔç¸Îw®´¡†ëÛW#”u­‘®o_φªê‹ÃCÅ6Ôl}û³×ŇÜõí-=g±€ßßTÇTÝOþÝ)Š[.Ý~ÃgôÞ’þ{å7mš•ñ!gåms¨i2yBªa­Ž¦ý‰:¸œì§)²Íiáb§ƒvgšyR½§ö²2>d­o!·¿YФ MIBk¯ez}ûH"ÑSË&G Q´FP·Òïê7jFÕý¤´mÄ^©1ÙÊH½`(¸KgÜ–Ø'±ë܆k™YßÞOqªiZTfÕv–n“úκ렻ŸºøµÎÑDŦŽ)ÃN¸Ä®¿ÄN­T5y=!}ûH"‘†T‘Ф q-³»¨’â/v÷Ó#$UñBskš»lC÷‚Ÿ"Äœ°ï¢lÈK$Ú…\IÈìB²:f6¡1nCÅí!EtT- ú›v-§ÙF5Ô'ä\Ë!áZßR6$=¹Àý‚§VGñú›¡2¿¢M9žzœxŠ$îÙ;µ 4³ ŒPÒå§–L_mCqÉi›ÕoSÅ(ïŽ9ŸüÒ*$„§q~B¡!¯©»,WÚ×Ê•å-Ñ9ÄÓõË mH%Å|DU¥$*ƒàl„ mhBÜAì]BºS×hýT’©os…6¤ ÚÐzzdÅü­G(ºû1ýÖ² ûöظz¼7%õÔ' DO™¾½N²+Ûç„$Ù!­"I3³Hn$x7ûœØÎ™°ÁÃ]l=q?•þN-C»æVq¦×ai+mȶœ}™5Ø4UCZRëXߥ¶²ä¾jF«4uS¥¾ï³"T#4¹ãËö&4šÞ–êðMX¼µ>j<ôZN¦ë3qó›îÖb‹Ÿ‰uËÔd ¹ó—ŸÏY?3–é~«F:?!!Õñ㻋ÔSN]Bª6‘5iZå ©´!EhþÿAŠ„pà¯ßsŪÅ5ƒ{a\ËTwKÝpfn“©–¦–iBäÖÖղŻÒP½ìñe3!Ô‡zÀëjµ &ë¢àWÉSÃù«¾©2+î€bLåmHþöß\CÇV{ê¥Ìþ¡¶„úL¿lÅy%µz™ìþ¡Ù-ÿ|˜*ö ¿5½–ÙªÑ\¿L†•?¾Ì"O½+¡cTÖšÔÝ’ÝÛÔÇ«0N=RfÞM(IH©!¡óƇVj¨³Æ‡îu4?ÒÙ-Üë8ªH†ÐÙç°:NŠÐQßQ\g$t>Ý„rº ådzk:¨6£¹oG³ˆË"Tküì6}ü´ ¡[IÝ„rº åtÊé&”ÓM(§›PN7¡œ^”P_Òþäú÷ãðº„rçN„r»±z¯¦þkùý·›ÐM(£›PN7¡œ\B8µ¬3/±OHÍÇÏRý5„`²twÎ]7ÿü/%ä  î~!·Eõ4?>nBq™øùAúU„²µlvçÄFˆ_J(ã©m=Ý/õC‹W{¸–u΃ôkQ{È6¢H{ˆjÙ/õÔ¡î6õM(§›PN7¡œúïL6ÅM¨,N]•ò» }êE UÔM(§›PN7¡œnB9Í„Íò¼€²¼[ÿøS*¼”x¯÷IEND®B`‚fox-1.6.49/doc/art/win32-linkoutput.png0000644000175000017500000001442211637250333014555 00000000000000‰PNG  IHDRAtÖuðPLTEÿÿÀÀÀ€€€€ÿÿÿÿÿ56 £tEXtSoftwaregif2png 2.0.1=^¾h–IDATxœíÑ–ƒ*¯€9îå#ü÷.{æ~ÖÌêtîÝípnþ÷…#I@PÑ Ø1ÓN[Û¢~ B¢½dV„ø—ÌÈ«'tôT¶ÜzBÿû¸$,¡˜\„\!ãÓ O.B®<Ñø|OP ?ðók}úGšWÎöw–§ººûMH¸·Ÿß?ÃGjª¦B=(%òW Ñ“üíkÕú×Wº‡ª`ŠÚ&û¿_ ÛûGŸC^Q•K×2¬nƒ‚¿ž„ú§ÐÑK·¿¹>õ`zÍABøDëÐÃ’UE>à%"£'ÇžAn± 9:ôá…ËB;d=þ@-£«ýÈ=<µÌÔ<‹Ðªe£k™âa[jB=5¶`ý Kmj™Ý2Ñ7W G¸MmdÁ|sêåõ ò9<¹úe®’áÉE(&¡˜Ü./lD.B1¹Åä"“‹PL.B1¹ŤBÍÑ0+DèбûÏ<§æ=§¯äb4!þ\.™=}OLhF‹_m»â-ÿ)}÷s ÝrBßyäI„¼¿8cøðfÞ  îg;¡O‘C*"4w·*|Zá·„Â{ m_N(\ Vˆ>±r¡‰ý~í„ðáU¡†«ÆGõéP#è“Vó¤€&@H(, 9ŠP¿ÉÜÒ©‹§‡¬úEú::ÔÎòÖ²‰Ñ~´Ý4!á¹–éZf¾æêÕ§& $áb%!uLBñÀmBhøÍÅ„PU¡¡ šÚ¡¡– xñOT‡ÔOªªgÓ!,5Z-—Â:$×j'„´"ƒ4ªeê˜ÁR«sr,µzUµ¾öª­|LH[ê¾0xa,õŒrdr9ü”h¨ šèÎà„üâo87á·,B“³ï ¹–Á¥eØý´ÑiêC¢o A{,µ”j©Í®!DÈÞë˜kÅ$Þ¦ÞW‡bo•GˆØ!&y’­Bh‡è°þ¡è¡ö8BÝȃÆ/É:2rðµ)„Ò}à‹ åkñî.íwvu(æPÎp H(þ­âÊ㇎ÊljY¿+Å{þäÒiê@s YžÏ“¢¶_J'™É ÕŸ÷‹P ôê/]wèÈ[=‰n+ñí½ð²þúïÿ{ëâÓª³Âû«oñþ3æÁOHù/!´è«¡ý_ÿ¼W!¨e\Ñ]­|@2ÅÁ%^¼#ÍDQ¹Uí¡î÷ñCvˆR'Õ¡(¡³êÐÔ?î!¡Âc„ìÿ±™¦ÓêÐÄ?DW©íÑYuhê2„ΈæßxÙÔZy‡ñ£Òx¢HÆåTÞ­®,òY:D³[yÄ;^6™:Z­$ä‡âl¨üqd‘(W-󎹞Ð4~ˆœ°h©ùšÙ2CWð fFc,ˆJìŸDH}¯!n¨„äjú·šú …ÒÖDBûÅíÂïkÏ»¯AI¾R5­žÁ/(Ï–¥ Ÿ-çÐø¡ aF!˜MŸ’µqˆ‘PYL*¶R‰´,„v€ª0wDk~yRž&É Ù„LIÄ£b!tTüÐdàJ®e† q©À‰ö„v¨H0´ÔÞª–Z`j O†l2DÀ–Vë,µ–÷ñ¡6¹2~–ÒüC¡ ƒt1%A„Ö¨ÐPжG–û‡Lx¾dëÞŸµ_ôÕ¦Î1:mß>äb'tVòø‡`Ò‚J~&úÞÅ1¸‰N«CSÿF è·2†œU‡<þ!ê¸bϾÃ8"BÚ8¿N Žp•´Ì?„\lB,¶È£CÛçÙé\;\%-óyqÔ2mï>5!¦’ù‡0ȳքÈRo>¯m.tBªJÛ?”-âü¤:¤eð퓟&BVi5%ÞÓJ*Í?”I‡j°›”Ŷ^ØuŠ:Æ?”ÉóʬC¢†:UCž_‡¤ÛìÔ¥g.>B)1Õ²Ä?$aÈ@t-—ȈҡjàPáC‘„ÿÔÀ7*¬C-,ÚУBÅü Œ†$Ÿ¸˜iu¡‰HÒš€šPNco¿`ÂKÛZËC6YY²ihaMKÎ#4'÷¸I½X«Cˆ‰W‡îØ£†‰ŠØl!ÖR­tè8Û‘ø%BÈñå©e¢$í•^€–&ªhBÖ¡ª­ò_Ó‚„Æþ!´Ô5¿¥öéð1„LúÓ!ÃgcÍõ8ˆPÔ?Ä&!Rí!œÐš¢j™¶Ô`€pÆFu!-ÇÌ/»ÏñÞ!´ƒ„íP!tŒè"äÈÉuèÿÐÙíï:!×?”‡ÓIuÈë¢ÿÌqÃ'Õ!¯(¡³êrüCNZ b#tv²ýCzV6pÉYuÈï"BB0 éÓ|éÛ·ÿqK/`ÉÁ?dtˆsý²`ßž¥Ûþ%_öËWèsAY`‡\ÿ{- é¡»›§û¶$i÷¸€Åþ! Å Dûèаґrtˆ5î2UÖ÷×íû†÷ÛWjÐU¹þ!w¥#ò(®"tûxÝäÞ_z½´­„´èªœ•Žšf¥éV„ž·×óŽ÷W-ÛQæìBbV ZÃgGBùÜ s:d­t´Ökoo¹ ½2šÓ!c©áå*KÝ·‡žß_†Ð“ËRO$Ÿ£(w›ZÊöC¶ýðÄ;³¥–Z‡ò9ŠõËšµ-lµÊ˪/Y¨C¶£ˆ™ÒIûe6ø78Џ§•Ÿ´o?ËQÄMè]th4ÑŒÑС۶ˆ }QßTÌ}!Ä4™hÆF( C7†Œ/[‹ùX¨C ßߟC¢jɘâ<¨C›öð4„ª l!!ÕÏ·&šq éÐy¡’¢M4ã’wѡ'ší`‡ÎCu¨£iœüò.:”aá2’7Ñ!åIÛrij'ó:”QÞD‡Ðq}ßrÐá“yN·-’·Ñ!)åÇ}ËQOæmtè×dCa½¨½•É7±†É¼ý>Y½‘=~Ð$³­m0½éZ6 $¢˜•æé tH ièÐ$È@Zy2~Úpfíﱩ˜DRF 4 $ÚF( C« 3¢ m+&ªe£@¢mµìMÆ:lu-õùÇ:4!%Mè47Äí½Á§szêp|d%…9¡iNJhùeøðy Â9+¡=æ—áØ„¶ H3ËñóË<„2îm…Ìz}òeÈTí!Tž,Ï?T³Ož:-!éÏ?tyòÁ¢8ÜÓËÎNh’ˆ}âËi …æ—±O/;-!þ!­Cœ ¤“šÌ/»j™{-sç—¥æž^vZBØrç—eŠŽ¡cj†„yf®be¿pßÊ, ç—EÈ‘*ø"§CÇ0®eÉRUðEN)ÍûAg3\Õbí*c¥2ƉVÀFQA¢FaÞúc„¾U>Fȧ¦&b‚8˜c† ac Äô[Çz?äîþ¡»ïjô ×Ö$ª¤äyDHåjÔoe<¾"ýC˜K¯!k] S<³^ÑRò)©5·ì„p§©e¥ ù‡tdB0Õ,µ!/¨–5æ­ý ÉP~êý"ABÿ,'k%w5ÏÚöo@Èõ©;¬ÐU3­º}fB^ÿP}{ɶ¶ý™ yýC6!6ktrBލ£ªÆ·¶ý© ùòS#&X,gmû3òù‡òÈI iÙ#ÿÈB SÃgRÄ$–RÀì©Bé³É·—rªè˜å1ÖÏ9BUø½‘\„ä:¡ƒüCÕtlc ¡¯þææ³û‡ê cCBι­ tW7G£xMýCÝÞ„<«&­!ôÝÞF•–‰û‡Ž!$Ð}†K+­#ô¼Ýo·Û—Jì‰Yâ¸y×·ÇÉ àLl¬e°ä”YMi-¡û××ýöúzAbÏ~B¶Hê .tcR¢YB°Î6B½Ü^òöRI[FBžõíqQ{sc[y;D¨Á³­„nwÄÃLÈ»¾ý¾:ÄE處Ðx}{û–Û©›Àqgºî¯»Ú#!HìÉj©'þ¡µ,5ÓÕ,Ò¦ÞÚbüP·þå{ò:Ü?Ô¨Î5!o;±'!-…ù‡ ì—í ''T˜÷cñ©µs„ÒJ9¡„©á3„K9•è)×?TЬ÷ýqB üCŒú‡þ<¡H=ä&´|ÈoI÷qõÇf±–¿Y„Âþ!înˆ‡Py’äâ6D''äñíPËÊ“ÿЖº<)Í?Tž”æ*OJó•'¥y?Ê“‹PLJó•'¥ù‡åpÆ9hË~3[]I˜_F¹®4ƒMÈ%ј-{MŸÈbÿUíØ•ôú‡v$$(v‡p2'©õ&LË+ƒÐdÙ2xP½|¶¾GÀ Q žî Ó7+=cºB“eËø»ø~"B*²¡‚yæ‡òø‡„š–HÙ‡ö"¤ñŒ í}M›×!iüCªªélÔ;òÕ²ª¤Z6öíXËK ³¦U @# ›C)–zä’”}HYj¶ùÒ3mêc2éø¤TÿÐÀD•EHËåB¹üC1Y@(ãúöt ç%”{}ûóBÉç(ò:hü9 Ï¡ÜëÛ{}.ž‰ºƒTQBˆé;ßúöB¼{X':Î/N(÷úöŇ×Rʸ¾}©„ô,…:”o}{/!§&«ê6í N·w¾w3EáC)õ}ýáå„@r®o'„™X¦žMÏöο1üMˆÖ†êd:¡ÜëÛ/Ñ!ºM}¿“í]hcè+š… ®!’s}{/!\ÑŠÒ‰™ÓRÁ'pP%„»ç˜vã5l„d7“¢pÅÃNX„:½~¶"T%Ø¡|ëÛû aFuN¬£Ð’e{¶?lÕQoQzÅÃZóî´õ„‘b‡ò­oï#$$x{M:±Žâ(µ©¨)ýh»N®5l$ªI“ÆïÂ¡Š¢ç.¡¾¹¸\‡ò­oÖ!Y›tb¸óNE?Ú®??Þh¥ÞrÞÕ‘uxfjúJ“d‡r­o°CõpZ:¥˜>i¡W*m÷~¸ëˆ©÷]3i—RÛ;:”Òʸ¾}àZ¦W K­¬,`AóJ–ºoGKíÙ¨Nºßæ)Jï £Å•#Þ¶Ô ×²ŒÂئŽÇ4Û™¨C×·g#5¹¡d\ßžO‡XåIî¡Å:”m}ûR uiþ!w}{K¶,. 4éo:=éy14ØàÌu÷Ñ1‰þ!gåíaÏa2qBµië½Í2ãŸÖ[ÐËÀïíºZ¿"„KýCÖúöG÷7Ó ICH.%”z-3ëÛ{‰6-›ì%„ÞÝÊIo´ÓýM<„·uÐ D¨ƒÂn¯:R—¤Ø®¡2sù[q-Ö·‡8lZz;Ôb¤ÕÏ©íìôFU‹QÏÂÑ;†ãÑ I#„|&cDÈ[|~k^öí¡­õyÏJÈk© „‘¾½ ²+ÛÏ„jt²+'<´ŠjÌÌRS#©ƒÑXè‚B³GBû‡:ºÐz¢n+~O/C›2Téu€[Ú ²5gBÃ@ Œ°vzx¨ÆÆ²Ŧs-­ñS³U÷Zk3î“઎’îü²½ uCçK÷h†Ö;ƒŸCŸJj~ãhmG]:ZMñåG ¹ù‡—ߟ^~{,ù«^±RŸ)!Ýñ£ÑEì)u.!Ý)ÃaÄÚèP’AZHH‡ iBýý7FBšæ;î¹BÕ¢š!¤]ËtïK879TË¡–BhÖÒjÙì¨ôx~YOä¡oê9[-ëUhêýPv-µ„ Ýa®Mÿ,5ÔF¡}ѵŠ–€RA1ØýO¶Ôs‘ ãüCy 5‘~GÀ@r‘è˜qþ¡Þ,ÿ>†*ö£^e½–ÙÂÑL/#a5ž_6BK½+¡cdY{È žìÞ¦>^ú©õü²‹PÌ?”‘P¹þ¡$B¥TÿÐÌXÇW{ˆ”Fhf¬ã¨CôdJè8Ñ„ŽúüR"¡òä"“‹PL,B ËÁòËgÒR{ŠE(Û„ÚErôþÃ2º$(¡˜\„brŠÉE(&¡˜\„brŠÉ›j–´ãKšuíûŠ;Šcõ:ÞMš™Åð”Ü.B¡ˆ\„brЉKRË:y‰Ç„t>~ýÑ?CH%KwsîŽòÏÿQB•½eJ¨u¿€ò§¹ÕÈCˆ2ñí¢í!óqü˜0™ÂiûŸ"­e½9G6BüQBKÝí©þ¨š½Ú«kYåÜPþ !lÙJäia-û£–z*W›ú"“‹PL.B1i^‘hŠ‹Ð2?õ‚¨”¿Mhѧޔ£\„brŠÉE(&¡˜ô„ò/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/art DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(artdir)" DATA = $(art_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOX_BYTEORDER = @FOX_BYTEORDER@ FOX_MAJOR_VERSION = @FOX_MAJOR_VERSION@ FOX_MINOR_VERSION = @FOX_MINOR_VERSION@ FOX_PATCH_LEVEL = @FOX_PATCH_LEVEL@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_BASE_LIBS = @X_BASE_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ artdir = $(datadir)/doc/@PACKAGE@-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@/html/art ART_FILES = \ bigpenguin.png \ fifthplanet.jpg \ fox.gif \ foxlogo.png \ foxlogo.jpg \ foxlogo_small.jpg \ foxstart.png \ freespeach.gif \ ill.gif \ ilr.gif \ innernerd.gif \ iul.gif \ iur.gif \ layout.gif \ line.gif \ mouse.gif \ nerd_inside.gif \ oll.gif \ olr.gif \ opengl_logo.png \ oul.gif \ oul_grey.gif \ our.gif \ progress.png \ scribble.png \ sgitextedit.png \ slingerzbutton1.gif \ widget.jpg \ win32-libraries.png \ win32-linkoutput.png \ win32-postbuild.png \ win32-preprocessor.png \ win32-project.png \ win32-tooloptions.png \ wintextedit.png art_DATA = $(ART_FILES) EXTRA_DIST = $(art_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/art/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/art/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-artDATA: $(art_DATA) @$(NORMAL_INSTALL) @list='$(art_DATA)'; test -n "$(artdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(artdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(artdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(artdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(artdir)" || exit $$?; \ done uninstall-artDATA: @$(NORMAL_UNINSTALL) @list='$(art_DATA)'; test -n "$(artdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(artdir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(artdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-artDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-artDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-artDATA install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-artDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: fox-1.6.49/doc/art/slingerzbutton1.gif0000644000175000017500000000433211637250333014531 00000000000000GIF89aX÷fdhfgehfjh ki mkmknlompnporqsqtrvtusvuwuxvwv xv#zx$zy'|{0€1‚‚1‚:‡†=‰ˆ>Љ@‹ŠAŒ‹CŒFŽI‘N”“M“’Q–•S––T—–V™˜U˜—Xš™Z››[œ›^ž^`Ÿž`žb Ÿc¡ g¤£g£¢f¢¡i¤£l¦¥n§¦p©¨o¨§rªªr©¨t«ªsª©u¬«w­¬x­¬y®­{¯®z®­}±°|°¯|¯®´³±°³²€²±‚³³„µ´ƒ´´ƒ´³‡··†¶µ‰¸·‹¹¸Š¸·Œ¹¸Ž»ºººº¹‘½¼’½¼‘¼»»º“¾½•¾¾—ÀÀ–¿¿œÃáÅŧÊʦÉÉ¥ÈȨÊʪË˯ÎβÐдÑÑ»ÖÖºÕÕÁÚÚ¿ØØ¾××ÅÜÜÄÛÛÊßßÉÞÞÈÝÝËààÎááÍààÑããÐââÔååÕææÖææÚééÙèèØççÜêêàííßììÞëëäïïãîîæððéòòèññêòòïööîõõíôôìóóóøøò÷÷ñööôøø÷úúöùùûýýùûûüýý(}{)~|-€~.2ƒ5…ƒ6†„6…ƒ9‡…:ˆ†?ŒŠB‹EFI‘J’L“‘M”’R—•V™—Wš˜d¡Ÿj¥£k¦¤n§¥p©§qª¨{°®„µ³Ž»¹”¾½—À¿™ÁÀ›ÃšÂÁÄßÅÄžÄãÈÇ¡ÆÅ¤ÈÇ£ÇÆ§ÊɨÊÉ«ÍÌ­ÎÍ«ÌË®ÎÍ­Í̱ÐϰÏεÓÒ²ÐÏ·ÔÓ¶ÓÒµÒѹÕÔ¸ÔÓ»ÖÕ¼ÖÕÀÚÙ¾Ø×½×ÖÂÛÚÀÙØÄÜÛÃÚÙÈÞÝÇÝÜÍâáËàßÌàßÑäãÏâáÓåäÒäãÕæåÛêéÙèçÞìëÝëêâîíèòñïöõíôóòø÷ÿÿÿþþþ,XÿH° Áƒ*\Èp¡»‡#JœH±¢%CÚ¢½‘£­ 4eË­°áPÅ“() LÉ2å;v€ÞüÒEÌkÍ¢©ù!•¡–@+® JÔÝ¥CwæÐafW°4uØÈÙ€EbsÞ%:t+Ëwƒæp›Ó Üœ2môø 4 €‘q×ÐPA#ÉkË®vOª–æ™´3ÃÔ´Áv ϲöä1§§™–[”ò¢Ä+Y¢#lÅ‚©1óåŒ.3jò$„š6ox¾ACFÅÌ¥Ê*Àžh霶3jâ°'7@N8ùƒ˜²fiÔœñÒâÍl‰”g/"hkrôÊ³Ç ƒ âæ(ÿËR+Y˜&œaQôbôÊ—ýÑf X17o¸Ñ)3A‡gÐ$#,Z<#ÆIØbÄí=ôž;·°T„M"8Îô¢Œ3qÐM/™ðà‡7¶„‚‹W8ÁKÖÜr‹ÁDÒàƒ"\TµãG8á¼ÑÆsèñ†'1”£H 8€F¹xáEwðÑÌ Ð1£láØ’–îPr!~˜Ó‡!‡ìŠ …$’#AðFÏCF…"H¸Û!8(Û#)p€i Âò‡;„Á¸#‚ŽVF#‰¨“G„œc*‚(Bƒ8‰ì‚ @!É <ÿjãDS@À ºs* Ä!¤  )øéNl±F¤’ÎÊK0U0‚;$M/VŠ@ º`2Àˆ,2Ny‘Ь2@ ¶lrª3tF ˆá (ÁlDȺÐK'âŽ@¯lAˆl!º ;°W謇ôÂD'¸ã¼L2ñCÍðE"ŽÒÇpÈ8À°#C°Í ôAÉ"„òˆØAÑš<ÔG LŠ{,¸S .[‰0ÅÇupÀ¤²B/Ñ4ûP6"âH!Ñ0Â6ã Qo$ !ó8I#£X@I§ªÔ´ƒM3ÿ Q'ä¡ UûÐ!#à‡×ªÀž Xº“Çxíظ “N$¡PÐF6â@Ä$“G ÒH$xb \CÓº“C ¼·;w Ð)},›"SüáCÏ’*PIµrÐaë#ØóGk‰ù }3nXsM°EP/ð0‡P±ŽÜÀ#(°èCŽ ä¡;D.(ÀbF+Àbñª£¶:€*†%D½°ØrQˆbH€wÈÆ2ÎP†[`€À€à"D  °!ú $Áß5 |ƒHÿE€Âp“@Gð’އTk¢;ŽJPd(H  gA XPä †Ý\'áàÆà0;\cg¸ƒÄÈ‘«‡<'y„IÜq ,=(/•ˆ„ 4‘m,à ]0BŽ@ 48# ÎPC2|qŒhLÃÄ`C0Œ‘( ©@±„× w¼Ã äP5£ =ÈA¬4ì¦×P†ˆ1\(ã åÈ 9| „ÁФl!€ƒ=Äa ¹Z‚¬à_pÆ1ˆBBËC.¢@ŒR&³=$¸€"üà†3pá/X)8A #ƒðp1¿ˆFàa¼øB]JùG¯”m¸D!ªá‹*èÀÐ@'P°„6 € ±‡5üblñ€¤u gˆ LÐOˆÂW°!B@nj£æ4Ül~P)º£×È…XP b[Àà %¬É9ÕieQ€%H$o‚+V`ŠØà nÄ€pªQ•ªd² J¤âàEZ1T¡€8DÔ@­¤ÕO ¬`KX†;fox-1.6.49/doc/art/innernerd.gif0000644000175000017500000000776411637250333013357 00000000000000GIF89a(÷ÿÿÿZZZcccsss{{{„„„ŒŒŒœœœ¥¥¥­­­µµµ½½½ÆÆÆÎÎÎÖÖÖÞÞÞçççïïï÷÷÷ïïç÷÷ïÿÿ÷çïçï÷ïÎÖÎÖÞֽƽ„Œ„s„{1B9!ÎÞÖ­½µ„”Œcsk!1)Þïç½ÎÆœ­¥ÎçޭƽŒ¥œ„œ”c{sBZR!91½ÖÎsŒ„ZskRkc¥Æ½„¥œc„{BcZ!½ÞÖœ½µRsk)JBœÆ½„­¥cŒ„Bkc1))!R„{B9„µ­Bsk1)s­¥cœ”B{sB„{9{s1kc91B9BŒ„1„{)sk!kckcZRJBRJ!{skcskZRcZçïïï÷÷ÆÎÎÎÖÖÖÞÞÞççµ½½¥­­­µµ½ÆÆŒ”””œœœ¥¥„ŒŒs{{kss{„„ÎÞÞÞïïckkÆÖÖ­½½µÆÆ½ÎÎRZZZccœ­­ŒœœBJJ„””½ÖÖ{ŒŒµÎÎs„„¥½½­ÆÆk{{199cssœµµŒ¥¥„œœZkk­ÎÎRccœ½½sŒŒ”µµŒ­­BRRc{{„¥¥œÆÆs””ŒµµRkk„­­c„„Jcc1BB{¥¥Œ½½sœœBZZ„µµ)99RsscŒŒs¥¥9RRJkkkœœ!11c””BccR{{1JJZŒŒcœœ)BBR„„BkkZ””1RRRŒŒ!99Bss)JJR””1ZZB{{!BBB„„1cc11!!BŒŒ9{{1kk!JJ1ss991{{))1„„BB!ZZ)ss!cc11JJ!kk!ss99!!BBkkJJ))RR11cckk99BBcc!!))1199BBJJRRZZcc,(ÿÉ H° Áƒ*\¨0€‡#BtÐ,Ü8†3jÜȱ£Ç CŠI²¤É“(–’ ±%€܈KI³¦Í›8sêÜÉç–R+Jt(ÉÀÍìÉ´©Ó§P£J­‰ä¡P—‘:Ñ2µ«×¯`Ê©©åÕ³ ¤)˶­Û·ps–µŠ€µ\ãêÝË·/ß-˜ŒF<;tµµ~+^̸ç#³tŠÁÛ¸²å˘5n¡T°çÝÀ]ÌLº´iÆŒ"w†˜À¶¼§cËž vË"ÈÇM»·ïß9mG¾êÑÀ“+_rK"‰„!¢éf‘¹õëØú1J|0€3ݪðÿÎN¾¼ï-Û¡«>c¤ºù÷ðCf8Ÿ\ýûôóÛ׿ÿþò‡Âpêç^|©B'ð-¨ pW,ÈKcÙüQqi´7‚mÇCæm1ÎC8ü¶.ÁØrèY{xs ‡Î –§8Áñ›8EG.„<$49ÕÀ|Á)ž?ÄKÉk㙡C {¬7q˜2Wêb“- ³ç’DãòUÓ/ª&Há|¤zØ`óÌûØ„#»zãÄ=оóÐÜ` Àq´ímâÄC†ÀZ|H‚Pú9Ém˜DE¢°Aܸ3"ñeÜ/±hrñp#Û@ƒP†´—)|ˆ8݈ ¼1¿Ž¨׸ ÞÀ6¯(F8¼¶'¥AŒÝø8|ð˜Â°ƒP±§‡ˆXÜL±‰F<$Uè7ºÑŠ<è UHFD2p†I|Cö‹åfYˉD ÞØ†ÓÀ0Žg¹Ãrã!^Ø‘-Pnxà G<'¼àɇ˜ÂÝÐÆ»"·ÿÎ<4¡.ЗÔS´¢–N³@ä €¬‹ zª¼A%<I€LaŠFpà!¥§ƒðoôá!“ è6è ®B~n5‘‘€!Þ92ñ'l׈Eà€H@€ÀöŠgÀ.Ð$'ÀŽo|+²È×C¦D5…#90Ë7¸!€–\ VðF]^9ppC A†#rŠ=µâx%7>Y[ˆJ ÇBA6Žo¬SàÀZAö €Ô²°Â7¶1Ã:aš+Ÿ Žoü²%f}H¾1#|A©á˜Ò:1SÔåÞÐáR›úTYˆƒmÔâ2…ÿu§;2µý2¶d\ÂHäC(°€(c~6S˜’ËÜ徊œ¶Geéj‡B¨`Ø Œq@`vã!a(„&ò°6¨ âHO úÐ4æR#PÃ#b‹ïàâ AyÏ{Änbo ¸/2¿AÎ^„mxHRûö} —l³¦Wyö®yÍ,€ø ÷ÀFR@XkWñæ! lÈ&4 áÝâ ãèë:ŽpU ÖÄÒ ‚%Ü5ºÓ}ˆq¸Îð½¥¶åëLdpL„Í«8@ÝVC"‹“ØÐ`’yƒ¥Üì†./ñ ¦v׬ ¸¯˜¹1 <#ÿUxˆ©¸Ò ÉhÄ.´¡U„4àF*†5·ùWÈ«,H½€ÙlB(²E{ƒ|aMp9à tò³¥ ‡<áð*.oúžÇ:‡¤'4²Í ¹….·Ñˆ[„¨ž'B ¨/rØoÒèÁ7†ñ;¬™µà¬7Ø BsK…¯¿VÒ-ËÕÎb‰c²«¹ö©,) ˪FÄ–PR›@NgcŽÃ3¼ñ ß±M¢àB¢o¶¬ë}ç} ˆŒ(Cµ1€‡T‚û@¿½ñož$KÜ`#D|ãÅ÷_äÇZ=%@P:Kcÿà«_AmpäúÂí®°Ê‹ÜÃV¶’ñ¦"(ý`„´úmö-8¶ÆZ4¡xîênxÀx{Ɣ̖e\qÛ‘À&¼íÍ„ct¸ºw¢#1ü"Ñl9l^ûzƒj_À :ëÛ\Ý]\ ›C¾Éð7sMY U0Hàò= u¿ûÀ ÜroìÂ*a€§ý¸±NÔeà!ˆÆ«þû6@`ÊsˆðÓBØ9¨}‡G¯§Ï.šïƒüªÁb„Üèª~¹Qptr/؇åa_çú.x᎖­[¤ð{ïEëMþ[€º—0@„ºÝ’Ô.‡-Ÿ}˜òÿ}ÛÑ¡Tv-˜ïPì0\zà—eè=j“Año.áhúÕ_;Pá }µ ð„0l£ ¨ ~`ˆv~o0e_Ð 3Çrñ2‡E Ù jl5‡Frµ )%à Z ºv?·/2ö4a¥ =š`Áç1¢¦ w fTËà0ÑS[×H!Ô€p[æpÏe_q~Ûà£QYÄ ¨ —¢F  Ü ^¸ Û ¡ÐÃðNS² Úp › lxßPÞpÛÀ ›P hH6bdh†h(#qð¾à'‘Ó ÛpÉ ‡ÃÿÀ‡[ð^»° ¯À |Ƈ¸¶ Œ4ˆ7H‹6…ã6–ˆ‰v¸‰-†ªMw¸ ¡@ |؉ðtâð…ܾ–‰V²#Šx±Àp×W‹ŠŠ¶U.0 µp lè›8Qà0.A ѧ>á |èâ"PÅ€vb9µ}!÷ ºôG¡1?•Õ VB2SrŽÝ #1öŽAÞ 2òZæ@ÎÞ ¾öŽäxD·ðh¯„OÜà ìè}¥KÝ`øJ/4%Þ€(hŽ2!ŽòXŽFð IQȱŽMf#ûøGŠŠ’GuBæø ðôd+rà°f»ÿämIŽŠ¥KøˆO5)¾.ƒ¨°#àLCe.á·‹Ü‚Õ!%XY•!'?£1V€•àPDøHXWV°I"òZ`É•5ò•X)–.6'Ç÷¬°!^yka‰L skU ?g¹wù’óZ3¡:4xÙ ]ò#)†©—£–eÙ•„™ªÃ–¾v–°q•X)?~"V •¾¦–T š›äŒâ‡Ht1eŽŽ¤”P3AH à³P~!"cƒxq)"1—¾…¾f qéÓ›Y¦›'!œ!"ÎIЩÌÙÀàhª)ð 2QU kpÂÙµѶÆ$%ñd,€à ’è9[ ö—HB1³€#a#ÒvNÉ PS’“R ¦Ñ ©é|÷éš á$`gh²„°Áh "q•‹‰¡¦±² SC;‚™¡ß Pnш&p”%Ê¡Z0 6½ ÙÙ° ‰á@ — Ñ1ž É€ ~nHº\Jª\Lš¤Mº¤N¥P:¥OZ¥Rj¥Tz¥ZʸÀ4ôù@ îI8´ àAH€¤°‰õ1£pú;fox-1.6.49/doc/art/iur.gif0000644000175000017500000000015111637250333012151 00000000000000GIF87aãÛäíþþþÍÙæúûý­ÁÖóöù~ž¾âéðýýþUª¯Ã×òõùiŽ´ÃÒáÿÿÿÿÿÿ,b’Ma”£˜ ²4h. fÈa¬`AÀ™@@;fox-1.6.49/doc/art/foxlogo.png0000644000175000017500000002541311637250333013056 00000000000000‰PNG  IHDRô2%r¾ÀgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœí}{tåy÷ïygfWK€‘ÖŽ/P;`liøF‚í‚eHh‚i$;iÚ$±{b÷k“´}ÐÓÚÓ¦ò9àP ß×[Ê…pò…¤mðš‹Mbã`IÛ`+`ve'– ÒîμÏ÷Ç;3;;7­d]l²¿³Ç^Íμ·™ù½ÏûÜ^zþùçqკ‰¨’3‰ˆ™½_‚?c&%‡Ä´<ýì0Õ  !*/6‚! ˜@ $ÀÌ`Ši ¸ô‡Ýx ƒµ`AÌl_;ʶ¯ªüîŒ/¼74äæRÙ˜T·/¾}FtY޹÷Zgôügª™@DÜ’øÞ©ïU\XSUñ¨ÞöɱòÒJoQ Ìà‘˜bc~ŠyçÏ2P¡—¹B/ñ/?_ –,ÀA ÔH <^mŽožªÝû©ð ácÛs)Ê…Û$_AAaÄ¢bŨz‰Ç­#U|à¡OtJâPçg‚ïFŒ„[ùKO¦ÞÆ Z¢QÒÊfˆÃeg‡Ê=œ#m•„b¦Àù`f $ JôV' &Iœ#Ä‚A‚% ÁBBÌ,IžõÛ®RKb&é‡\«ØœØrKºDi!*k I›ê¼°ERIj‹=i@ì.TíŽ<.á¹_ÁgŒˆXÊÐ6»ë¶ÀðFÜ—øÞUeö?”‘»â¬q6á𲫠QC©ª–ç$0$œ»ÎéåúbÉ "²ùƒ™ ¬±0I2A )ÁÅ%×_¶ÜZN9s¼ï·,I’$$C„¥T@çÄR0–€$XjR!È+çΞ~饥Á!íÀÁC M’` ’$¸œîã!À¤ºÉLöb€$ÉB M•v.=±k©±ÉB+= ’ $$t†ðÝÔPÕ–k\ 0ز{§Nc€…HaHîÍ`MBy½,H"&C‚$A0Tó‚Öx!L2$´ *¿ŠqA¹ßwß}ã^A:nkkSßãõÝêK.—Ëd2ÝÝÝ™L&ôL©Tª¹¹¹µµµµµ5XcPê~ߺuk6›jêæÍ›£~õŠü]]]ÝÝÝQgÞÿÀ?°ÌmXõÇ+Ò$–¡ü~.`KÔ<óÂÞ7Ž÷ÉpÉÌN—%KVZSçüå—$–´,œ7gæâæ9Þ÷’<¬rjožxûà¡×_ê>\¤Z“ !zô¿£×Å,yƒóKÓ×,n¹úæÌš^²üç‘Àžß¾Ù÷ÎC¯ž2‘%$9Ö†øZX&xè¯>÷çI9D( @阄IÉg^Øûzß)À`"­-ÁÓsÁ܆[V-×d‘`ºÇ%ô‚¨ý?Oü €Z&€ ®0ì#Äš,̨×ÖÞþ1Á¦€´àL`,˜D’ûzŽ8ôªâwI0ؼê ½$™µD5ßùÞò¨‚46׬ZvõÜ ¾Ñµ›n̪ýöŽŸ¨Jîç5t”‹ÉQ‡Kîñ ‚žžžÎÎN_B/Éf³ÙlVÙÞÞÞÞÞî%eïâÃGô­­­7nŒj@*•Ú´iSL UQ¹\®££#j•³yóf»jȆKj–-œžÀ8K8 `&pð•š7Ê4ïd&ÀLÁÅϱfå ‹›ìÆhêgçMwÞzfÖ¡±iÖÒ¦YÙ~óÎíܽïôÀIÆØd^WȽ¼>¹fåM‹ÓóRuÐÝDôî†æÙËšgßññeG~[xò§Ïí;)‘´HŒ(* H Å¥ ëjP§£¤ÂWcõëCµGNH‹œêXiN°¼¼¾féÂËTGÜQ4<ð](¦ÖÊ/<ª$Öd¡áão¿Ô®„Ê[kû{O¿òÊ+ ¤§˜z 0aà?ajÄ’IÀš?wƲE—%ÆÖ½‘@ÀpØŠ³Šó :Âã«™Qðé»}ÕutttvvŽ¡X5¬[·î3ŸùŒ·.ß…t:ÝÚÚ5‡uvvúæ 8 ï©vºZ{ïÉ©Tª­­Í$[N,5‡L'–ÍžžeŠd"òʆI~ím«×¬X  ç_ÀïTú_8zbøÄó–¥çevüÅî—ò¢0”¸N•il³'d~yËÝy[kCÍé"Vz$ÀpÐ4;±àK·í|ñ7Ïì~%77I(ÍCÄ• –IN-QcU¦=HY wVª~I{’TÒ†ûÚ¬q!Ég¿ú¥3ê —7UQfn?|ú’u)”^ާ^—Üö€ÜSe'Ÿ¸§NÕ(øÜõ[UL,ìç*Ê­bÅì¹\níÚµŠ1Õ91%„Ïf³ÿþïÿ~ÿý÷Øfþ›¿ù›˜Ü Æ;=xëUË‹¨Ë·lÙâùKºD6¦O‰§¢>" @¹(`%d~Æ%‰¯ÿ×>¶bAHs¨È\¦Åmé@˜Q‡?ÿÄõ_XGRœóo”B9)‡î]ÇÚZgÔ!è#6ž@øØ ¿²±-U—Ð9/`j|vw¬”a¿Â^DVÁQU€D¸JPA€5 ºwý§gx1ä ‹dñ­‡;O äYK(’¯^€ýõºz?¥q:÷§+þÁ«âü‡}›&Ç¿*XK&“Ù¸qc.—sOˆ÷u‰)<“Éüõ_ÿµ[Tbt/===pÖ.Á—sëÖ­QsL{{{ssså .;3D޾—(ì.§K‚±ÎŦ¯üÚÛfzdÃ’ÄÊþËÝs™H(5À–75|uÃúõšÆ&˜CÄöL€ …Ë댯nXÿѦélÍC-ø‡Ôi„â‘ð¡iøÚ†öÒótλþEÌì%ŠäœÀüW¾Ü™0Hv-¥v… +aýÂú;–5Í,ÉìN-àä ܶ=;X0ÉP¦l–¶‹”k$(Í•xô†A(†”(]óŒUqÁa²ç`ïkœËåî¿ÿþl6eÿ-º»»+‘ßÛÛÛÓétÔ¯[·nu[â{O”¥7ôåI¥RíííÞÆK a9*Ô¨OÔ뤎‡^b:_$Àpl†N«Ø…†:ãž¶›fÔÃ*¸ Lv9ϧHò›}¿ëÀ5s.º{Ýç5A¥±•o0“rèžÏÞqÍœ‹l“ƒ§“ªk&ÃtôÔnÔ€x›«DE‘ªÇÝm«Rõº†¢ žŒåæXÀåS²cû!– køÞÏ}zYSÊox ˜À»ƒøæ¶íÙA³r_”àû"I0‘¬àÁS¯Ðö0âCkzPª˜L6¹»Ïz.— µm_ÑV1ŒìÂËï1Jžá½»»[ ï>‘ËûA|ùË_ö*ë%3CXÂ0bôÇtͤÃãÞ“MÏUêO‹ .95.|¨^ÿêÆu®’ÝW2E  {{ûÙ{zoïéßô y×mƾ ¶^°`ÎE÷¬¿3)‡\W &À)•—Žb1ó_\ÿÉE³kJüD%~·y‡÷ ïëíÿåáþ½½YÕ€b€ßÕåP ü݆Ï5Ö'56 ¬ÜQ*ðz <äLïèí§xåɳ¼åÃ7,J¾ŸÉžäÝþÿr¦ƒ…‡Ù‰I Bç$&(ïØbØ“ã=bÙ5 ò 62près+IŒ:v¹ŠÉEEALA…CåH¥R¡Ç;::âU(ííí­­­Áz{zz:::BùW!“Éd2™ÖÖÖ ;¼«iinnnooÒžoݺõ¡‡ò]ÕÙÙ™ÍfCÍétzÍš5ðÌLB :rüäw¾¿GÈ¢€£õø­ƒ…€ipþóënê1Èì~ù9IÉÐk™È"ýÈ['¥sI€LSGqím·¦ê`”3¤wÂÈìé}¹ûõc'Þ±`8Ž“¦kþœÝñ§k®šS§ie$,kš~(}õ/»ßbáwžQ#£ÁÒ¹¸<}õÒ¦™‰°©E5à艳Ïîyé¥C‡%i:«%[Óë/^½jyëŠzÀ\©ñ3êp矮yì{O©Ö‚q¾Hë±PÞ÷:òË[>|wÛMzy¿Ô˜€G»^xíD¿)j,ÒHzŽL< e‰`h™ç÷v¿’ÔPTÏŒPF]ØÏ` æùsgܺ²%¸:`à;ÿeRÂ÷¼y¿›¢êä~ ’ܽ,–N§W¯^=޵îܹ3ÔeEUšN§·lÙ’J¥Bc…š››~øá]»vuttD9­wtt¤Óé Óº—ëÛÛÛ3™Lh Jx÷Î+¹\Îë$ƒòñ)·£ê<Òû ÙCG=w4j¬÷ׯókN éëß×óV5JÊt¢.]K1 ¡34%_“´ ˜K[®^Òl«Çl %„ ¼Ö÷þã;žÊ ‚iš$ᜓÔÀ‡;ðÚ·»–¦¯¾ë75Ö»Óƒ=ï ÜyÛMoœè:9h è’½bˆ¡±™ª×ï¼m•`v,àA<õô û»_-€˜fœ*"yò,u>½ç{^þ«õw,š]ã[y(~¿aQáôU/ö—d(•‚ÏÑðü€«ß ËÓ¾§mUÐ/ÖòÀã]Ïíë>fQ$aG"{ç­ÊÖÌ,‰@úëdzGÉŠ²+¤Æ&‹D«·1Ž;¬ìí>–§‹ã*Y”¨†¹žçˆTËø‚3qÚð x¥ß`æÖÖÖ‡z¨±±1>~uõêÕÛ¶m 9R:Ÿ+¿üå/{¯òþêÕÝ»b{h{bBŸ˜EJ(Y šÐ‰¤)ŒP,Ò‹¨)–_RµEQ[ š%‹”´Hs\î ±40ôi›X¥·S aû{OþÛÃß=yÆ,RmjŠ”´H—°`X0 H˜”ÌÓÅ{»=¸í?ß„Y>) 1ê±zå2¯aÓ… XkV,MÕÙ¤\r:L ;€{ø‰_õÆEEQ[¤dQè )t‹Œ"%‹H´‹N¿µí»û{OÊuV̬DŸ¾íf £ä"¼‰Sƒr³…€¥“™ªÓïm[•(–Ï:æñ®çö:b"i‘Ƙ~ÓzdÍʨ’B/F?uEª- Q$½ÜEI:Ð0y­SB²êyþc:÷1/}¯\(](™}ÄÚU Û¶m‹:³³³3TíãmÌš5k\ñÜ×»l6ûýï_}™*¼ñ·ñmJÞ D.w;Êm'm±­…t(¬[W.sˆUxK+¯÷ >ºý'Ãbš¥7“`G·‘`%! IeÙ+–² 8epëóSu SõQض9&˜ õµ®O=ìõ àÈ§ßØöDvÐ4‘9KF&•(@õB’” F¢€šG¶ÿôÕ¾aŸABé¯êѺêó˜ˆX…°ƒI…Çô!•¾€¥!ßX¯eÃç’1YµSEà‡ÿýò¾CG TËž[‰=éwÆ ÿô6 V:…Tq¡ îvŽ—ä{d»ºº¢Îô1ûˆ^4›7oŽ*Íed¯ Åטx ªü;v¨/QUlÚ´i"¤Å`‰®?L”‹ˆ Y¼yÅ¿±Î±=ö½'óT[$Ã+s‡E‚L5¹Â¾ß'¼«¶é@몥Ëk²&–ÌÕ+—ûü@ˆlõGÿõkÅìÎjCx]0½_$4‹Eª}|ÇSfɵÃÏV¯lѹ@ãâ·>.([å° &U§ÿ݆õ3êËdv)™}oÿ?÷RA$M Ï`z}Û' ¢ã÷vWqÞb2æj_+¶û¯ÐèÐ okk õ¢!¢L&ãÆ‘FÕØØØÞÞŽ°‰D ï===Q­ÊÎ<ÁÌÂp,d§`sdYåò¡C‚ æü+g]^î!ó‹fM4±xܧU¾0Ź’ aüb÷×úÞ·`—¨z*Xœ^¨±dHK¡ŽK]æ—´Ìó=R’!þA<óÂ~I.ÅmJ{ºbøHMJEzÿÀûj‚ñ ®h˜†ùsgxƒªO©¦Àu<C€ÁEƒ‡¾²aýÌ:¿ž]Éìûz³ÿ±ý©‚vCwëJ†¼;ˆ>)ìçÁú¯Š* bêêêC6à`èSL!•DŸÆ N‡æ öôÙ©¼?mÞ¼9¦y>£–7Àõ|x' ¼äÚ&WHtm Ê_þè[}jóæ …8\É$ –¤c'Þ^Ò« 6I(E< Ȩ\¾¿²È hr´ÆÄBûýÀ Ê¢SnsK-“ÄD&¸­j=±¬åê¿hÿ¸æ™gÔ\+ß ·>ôûßÓ-ª­|{©*ª*’tÆlJõ=»Q¢ñ9êd+øïܹÓw$ª;QŽ7^´´´´µµ…¾“Sø¢äµ-Í®ÚÅ:tðp¿5•ˆãu^Ê,ûæ[}gsáê¸þÚ4X †Ææâ–æ²þ;¶] |¥gìûÛ1Iˆ7ûÎÈ’ê_va×§›5–ζÑ!>!ïâ¤L˯¬þjݧŒò¬>d'aÆeõÆe—Ö»G|WÌ4å+*>H·‡)”Ú\Oĉ¶7V"JÇ{݃ޘÕP¨"‚M¦Ò¬ª2}Ûß½d!Uèè¨Jó”ð»A„åO¹^ö,£¶æ!€!*vÔ 3 œ9ú“P“Ñù¢ƒ©9yÒƒÀç?û™†ú!ónVúøÇ²Š*ÆŒq#÷^BLP F1oH%/Úª)ê×ÆÆÆxEÓ¾ŸZp{$;òGs¯Çƒ¸,*’´í–ç{za“€º„ˤÔQˆÊs?N­n½´„ {êB%mSJ›Æ:ܳîŽ$ilN™œ•G(˜Œ—d2ýI¢ô˜®X5Ǩã1!Kr¹\ÌfS )CxAíÈàf;‰ ÓVêjà¨ê-¦ü¦»êBªWÏ©Y{[«&‡}»JU£Šª_L,¹OÉ+ú’¨ÕΚ î‘÷úˆIŒ3µir0äèþQ£%Wîò¿½*þp}„ qJcëK@?Pò»?ÄÔ‘Ã}ÍRzù[W\µìÚ«|Éצ|~ªâ† Ìç^¹wãˆ{ã;ÜÕC¨f\éêêŠ"n¯Zéþûï÷f{?Oºi.©Ÿ¦¤U±?‰ef¨ vSÓ¥T!÷¸´¾.?hI„ðÜX#!|çU ,±ÚùµpT±cýgðüžÝwܶRóØWÉÙÛúî¶›Þ<~âÝ3¦šj„j‰Íçî{“[[[C•QQ •#èã­î[`—îO:åé»°§§§««+;…žm ñëC‡—6Í¢ÀF4§F”g'Á$Q)GML±€·4;ÜZ–i’ƒ¯ô²˜&AúÁWzø3 BÀ¼+çd» NÈÑÇ21X¦›f W§o±`àׇz\k-Ñd„¨ öm@$ƒ[ÝܾñÈö3¿¼è’Æ[V,0Êï‹$¯lüÜÿþçG$t1fW¢*ªˆÆxæsQwŒˆ1 ïªmýýýñ§EYtÝ®Ýwß}ñUxÿ Í',ÄTŠé>¶fÇ·î’úŸ¥n:wÆôK.ÝåÍ$iD ²Hµ —Õ_¬-o-±Ærz}a­•¤[dÓæy¡³&*ïâÁmOdÌaqѶëõ¾÷­ò¶` Óp÷gïJð ê¦¤UŒ?Æ3Ÿûˆ'Ä8¢ŒYxWóGÔåÞc< ÕÎוWšÍf;::â3ùMB·ÿdÐˇzü B¤ùùWÎ!°Ç¼¤Â ×—Æ-¶” ŒAóæÎÒAe¥Kà`ïi ºÅÄÌjë΃½o[&`þ•sÊT åA?ÿÊY¶Ç¼íchï)ÁçèA?&Hÿø wT•6&7€·už<+M2,Jäé¢Çvü$¶ó‰|dÑô¯X,,[ù>†•MUDaBò¹Çxe·TJ(6*D]ÞÒÒß$õ§—©½½N§ÓQ¹*3™LŒ.h’!IX0Nú;éy¯ÑØôæó u­qes{ˆ5¶tX×6Ïr´9e¶Óc'~k‘Î䎘8ýû÷ƒò¹–,¼ÜE1ú$0jëÑÅé…eqü¬öÄ‘ãNÎu|Š™QeòùÖ¶ï䆋””Ð$ÈÔ’¹Â“?{¶62I`í'–,˜›2P°DU9SÅøa)+GŒHÞ•ª:“ÉŒ¸qRbvÿhjjò•,pëÖ­¹\.”ý·lÙ“ˆ8*ð¸ÂµH~¯½á½I‰ÝÇ,Øò¡’ӕ侤iÖôK."˜®ã;’BRͨ]KMV¯\^¶K5ÙÚŽÛ‚½5±`ÐÁC¿qõ ®áZ à–UËĨ3H óòiÉ¥‹à5(=ÖwÒkÅ­\ñ®~¼k§ ²!ö·3Än-\§S 8}æ}Fi·<–°`üªûèÿ¼x¬Þ Ð{×Ý>£N°Ju9my”<É6)ЗÐu^ ˜ìÍ:¢r¯Ã³qRð§øÂ£öÀK¥RÍÍÍ~ßò?{zz¢.W›‡¸»yKÈf³“Âï#C’°Èøu÷«€-_»»^¨É¡uÅò„ ÙõÔ;>šÓX&hxÍÊ­±]ˆšššš››ƒvµuëÖ(ö?7#£!L˜îqb%^yý@ÓUËšgÚªj@3ëðO_[ŸÙÓûr÷ëÇN¼#IWJe)¸¸øÚE­7.ûðÜ:µù…—8 °€<ðäÏŸë?“g‘,Û"ιé¹AóÉŸ½ð¥¶UÁ¹Aj m7½ñÑÅϽ¸ÿ¥žß˜¬14‚-!åü9º¾åš[V,Ô €Û {÷ïë~õ¢$¶«U%{²µxFÉî^÷ñ¿Œ—µP[Y¯Ü÷h^Ô2v‹ @ Ë›ëÿ‘™-Òóâ¢onëü§¿owÓ82‡Ð€™uøÂú?Û¶ý¿,Ö•>Ç©¬T¯ðý]¹}_ˆ”§ uè*.8L¹±yóæžžž·³³Sù±¤ÓiÅÔñç»P3GèOñvT…-[¶D%*ؼyóÆ}ÇÕ™»víÊd2«W¯ž² Ì’ÐL2~øtfîëgÔÁkŠTŠaÛW›ZW4YÀ›}ÃgθbnÃô:è€o£ »p@E`ïéý‡^7EmTÜ„V„Ø×ýúÒô‚eM)ÅÑî‚IÉïpÍuW]Ñúh=}oè0½¾îÊÙIÃI­En§ˆÜ„-*øóÉŸî,R-C YÀ­:úq·· ^[h(ÉÈ«+†™”È äï|öÞö›UZ‚’I 0€¥M³n]µä¿w4‘iÁ§ÑÝ‹½wŠ«^òU”aÊfïÆÆÆ‡~X)²ã ±»»[ Ú1Y½Üï«W¯öJС/üÖ­[£ŠjnnnnnŽ¢‰æææöööP—y%¼Ÿ:u*¦#cû“À”9@x´®Â–̤Hž´ÜÖ™€ÉA•mûj¨Í©¹¡©á†¦†Yu¨‰`v”˜=ûèö§òt1HR°Ž$(A&%Ùþ“_îW "ß@)€Ôš†.jøè¢†…³“µ€QböÒê_89ˆ·mÏ ¼±Kþq<Ò#È×¥«BÞo”UÆ^è”ïê#ßXí¶™dìí>º·÷4ÿ”P“Ð]¿îš9—i(’pÒa%FÛÊ“€º¹¹ŠS¿'mç‚©¼y.¿Á%ÀÇêKkkë<zšû%ƱÀæÍ›ãëmoo vÍf³;vì­}l>áWd³EJfŠn{Bév½)ˆl²ÓI6$œï¡šËaöǶ?UIS#†û3ô¼¨}ì{OíïÍPyïŠðªsX¤§(X@Èà›Û¶gM“rÒwL¿ƒédÞdªýÎ÷žÌÀ (×Õì{÷ºO5Ö'½{6••^o¥˜òhÞ*&#»Wtš(~Ã~ÓÁ§³µµ5FëížoG1³q0¦É ŸÛ»ÏÅ~´P^DTIœ¡Ï£Ù"ýÝAþ×owž„F6ìùD=ûÞÞÓìø‰’ÙCÕ%IéIÚ.A ½HÉG¶ÿä—‡OÊ'˜ò>–»ëØpwpµÝêßÄ¿~»37`ZPSË8ør„õ=ÜÿD݆ҟÌå)ÒüW•eŽôÞç»1‰Œol{bØõ|w¯4 ¡wݾ:)‡È‰N`.©ÉC’Y©Õ—ìužòO(ïKd¿ª¸°0¹sìîEã‚ÆÆÆýèG1Œ9"R©Ô–-[b¼YÜï]]]½½½QåDE¢úà‹iòaÄí>Ê!Bñ—ïc…ªˆ+Z,Kh&%²Å-ÿòÈÿìy-œbG$tÅé&PÞÀc]Ï=¶ýÉÕ©LfŸ±˜„E‰¼¨}lû“×»ƒq ð{FyþgÏkÿø/dŠ&%G’Ù#Ç3ø)EÿAaB„Þ I¢0E‚‰¬°«¤­÷ª`AÌd‰DvÐ|´ë…BX®kJÝqûŸhlo”H$,hVX_$ÀДÁ¹2fQù8ÕÙ K©â|F‰>Böúh=*qî¹cÓ¦Mííí®µB(—Ç s‹n¿\ÇöÐ^¸~ñ®õ/¦§íííQ+€l6ÛÕÕõÉu÷¸µÇ”#!,yŽá^z¥¤ò$q\­%•~kÄw˜™%(1ÑùóŸÙspõÊåknœg8Ú¥?Èö‘@v™==;_Øk‘n‰Ú ž=þI`H&Ö Tûâ¡û^y´uÕ²Ö×5ÔÙ ð«­&¹Ì^v¾xtçîý§†¤6M²&Añ,LÔxV޲²H›m ×bÉB3)©bM}Šÿ`Á6¿KÀÑѳ:¡tº$““ûº\×Ò¼xÑeA…|ã•oôýþÀ¡WH3…]¯.¡ƒ Lð.°Êª®Êz1©s” óÁ¤ä°V÷ýŸîª„ܽˆ§­sGYù%†’ÒÖè’@ÿbûÊ"ÉÝ.f'Éû)’¤ED’K‚Ð| %ìÀ¤JÉ}4UÃŒÐ#… ¢c„2G¸ªrÄ•?Z”«K%3)ãmÕmþÂÆ(‚˜&Ó}*J7RáA/Æ×á§ÂAÛXM­‡”Ï$I–sPBE_ŽÑï+'æÌ2!ß8 `á<„AÙ3äȸREVÒ š ãhw<C¤¥¤üþüìêì”””TRTìî쌌TVTŒ64¼»¼LJLlnlÌÉËü¦¤œ&$üžœŒ*,¤FDüÚÜüîìüêì<:;´º¼ÌÞܬº¼ÔúúÌúüÌööÄúüÄöôÔööÜòô¼þüÄþüÄÞÝÌþüüÖÔ„FDÜÒÔäµ´Œ"´><¤NLœRT”RSü®¬ìÎÏäÖÔœ_^Œº¼Trt,RT,JK4Y[dŠ‹´Þß$NL$JL,FF,NRLnl„²´¼òôDntŒ²´¤ÎΔ¹¹tŽŒ4FD4RS¬ÒÔÌòôdlŒl’”ˆTR‰ÜâüTnlTjl|–œ„¤ ¼êìTvt\rt”²°¼æä”¾¼\z|¤ÚÜ´ÚÜljlôÞÜ”JL„.,,,þH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´g P©R¦N—6M*5*TªWŸNÕjukU¬^¯k5ëW®dÓ¢]{¶­Ù·aãv«Ö­Üºpé²Í‹÷î^¿võî+˜ï߀ùphà G†,¹2åË“3[ÖŒy³çΠ'SN@:rd¡?s^­ºuê׬a»ŽM{¶mÙ¸kç¾­»7ïß»ƒs^°˜á ˜*-Ð iÓM (%МÀóèÓ«_WžT»èÜ©þ;ÿ޽ûøêH8P/@€ußÏ—o|xïज़¯Ÿ?»üûÿéGßvâ7Ÿòw`€þ)˜ B¸Ÿ„ÚW ƒZ¡†ö×á‚^â†V ÐPTA@PPÁ‹8樣C,ºhìH`pAì¨ä’J@ ÐâŽlÀA|p#“\vÔq>.4À“TVBT —l¶™‹ 4$e˜9j Â$¬éæž|ÂT@Š §"•%˜p–}&ª¨I$@ÀŠSR) ‡.jé¥ý9¨˜@.Yžˆb*ê¨õ(g¤:Úi¨ž¤¶ê*§þ›*4&”©¦`h¨¨ ë®+° Ю*´l ¯Û%‹F‰j“VJ /´ m°*À«´/@+­°ÆvÛ$ ?Æšã§$àl èÊ0ƒ 4¬·ð*Ùh² ™Je#8;°è¢«·ïÀEih§JÚªï¯*ô[ƒ *Üà® W<”½ Í©¤àgA «B¶*ä2ŧ쓠’™ð­î†ì‚;ð`л*笲§Ò‰#Çx²*À ¹€²ÎH×dp¸K*l.± œôÔ3Í ©Ï/ÚI©¹GÝ5Õ`¯´4§´ÖétÌ eöÚ+a¬Æ÷}2CD³m÷H,çòþŽgßí÷M<+‹uQ{,ô߈û .¬ºpâ³d5Cnÿ|çÇ‘g.öâ²"œj¡k.úH•#·Žf†@£·NRÞbîã%ôàà WV€’÷ Дúà×ÿýý†áþúúCå~¦œKÈqÊ’8F8ÀA@Fƒš F¾A #¨ÀÇ<æÅ!I@" ÍÁ’ð„# ð¿Ž”î § ‹ŒÐ€#Øð†8Ì¡wÈÃúð‡þ@ ¢}X#P†@B ‡ÈÄ&:ñ‰PŒâQ48ŒÀNV²É“ %,¡‹_ô"Ç(Æ2†ñŒJ`B™ðÅ%°1_lBÍHF4ÒñŽvÌc÷ˆÇ1.a N8‚è…7á b|£Æ9:ò‘Œ¤$'IÉJZò’˜Ì$%娄@:ê#¿{÷<"¥#( ¨L¥*WÉÊV¦2 ¨„e,g Yºò–¸Ì¥.w©Ê((A G  'Øò˜½¬%/—ÉÌf:ó™Ðl¥,—p„`b¤y´&GŽcJeÂò›Þ '8ÇNZ’Sœè$§:ÓÉÎuº3ߌBœ 0$þ ¦ä©Ložóm§@Jд -g-•PÍ*^D{ y¡ ÐÍrÊò¢æÌh?ùùÏô£ ©99H“ S IÀ¨J=ÚQº£/Õ(Lg*ÓšÆô¦4Å©MmÉÐQ^S›àë(zJdêT§F½i?—šÔ¦¾ò©´d*T¥šÑ)г¤%€>ùiÑdF5§`Ý©XV²Žµ¬h­% JŸ$† a‘)W*ÒŽÒ••4ÍkFõÊÒ½úµ¯QHB=Ÿ’Ó˜_åJAÊØº6ö±ŽM(zJX+u ³j7ÓjÖŪôìDghíÚUp†¶–QXB= )­JaŸ-5þ­lÏJ[³Ú–³¸­-Z{ÊZ„2!pýH)O©[±z°Š­éqûÚÕÛ&7°ƒ5éa9úÜä67·ÎÍ.v·[\æR€•-È㚀ÍBv´Ì]jLgË×åν8½joµ¸U¨÷®‘=o~÷«ßÒN–­hB$Ê‘á^·»ìµn‚Û»^äVW¯ëD-IÃÛ‘“"–´þÕ.‚7¬á5§ßõ6"T¼Õ«Üeáûþ5Å㔯IòùZê*4Áæ0Œu\\÷þóÅ Ü•¿n0RU,ZC¸ÁõetKba®®Ø¿Hîo–·Üdä24®ÈxIœÅp“¸0Í1þƒ¼æ»v9¶]Þ¨ŒKBã}2YÁ9ÎóŽõLÛåò¶­A~«[7b`s×Í Å/žßkèûsÂÒ-fX1¼çJó˜ÏJNpˆ;2⃌Ù#g^ôc5ìd<ß™Ñq^ðœ_·U8»T˰沬YlÑ/Ú"FÈ5B€òÕÔ¹}r©™üdÑÂ7ÂÇ”²ÂLè鲸͗¶4¦w¼æMs¤Ó)±HB}å`ØÅÆî¶r7,ÛU²ÆÈ è³£Íîi÷Ë?¾uEv-"WøÈK.hgŸ:lTÃYØ/–ð”IReSï{ÖõG3JkoäÓÙ.3¨Oü`G+úÍÕm1”+ŽÜ×ÒÜÛn5Ãþ¡íî’Kûг´5 {Fp_›Ü%¶u®qçŽSÙÌæµ³ÝñvŸÜçïm8®l‹÷² õËEºt¥^üʧNõ«ç¹Ú‹œÁ“Vx·¾n&÷Ô¡¸þ$åíÛ§[Íü¦êгÞôŒû³¦òÎmr ×}ßKî'Ñ3bô zŸf߸Íßhpïþ9>¯.ê…ÿüî×79ÿld°ÄÞÆ÷º%;rûÒÝãÍÝø{áw‚O—íÞæºêÏ‹ø†ÌfF:2kâŠò|ðyî]|û³ƒUñô­qçQÝõÈÛÝø]¥üDå]o²g¤×æ%ü»e~lQßßn)Î#þØê÷ùàç1Ó‡^ÍœK¤ï˜•ýE¸½yÇw^ôtG¯ýãªÓ™ñR¥4ýµÎ.O}ÜÞôu $vÛcyϧy<çmÙÇ{Gr†÷lÛ'w’Vs¥~sÅ·T{÷S9§m€g{J6x¨'}—wÄ_öÇjèf},x.ˆrßç_ÊÇô˜Gh.÷€œ÷tÔgZù& Hz7×~í·zHhPR§d¸~²G{Ûx‹z#ˆu3ǃGEHEuX¥‚°Õsw‚8†·„³¥rFÆ|6è|BFqh„؆ùÇq‡§…LUzD8wqèƒ{ø‚Çg\ãFZMhè'·MþRˆ—SáÖƒ7ö~uxPÀgf"g‚ðoI˜„5r3¸¹v5xÃÕo–ˆ}oX}:Øxy¦7`ȇªè‡²8×§å^sO ærl¶2Lj‡7…ç$‡v¨R“jŒg…µØ{è‡YGZQ°VHƒlxƒ¼xŘqÿ—h¸—ŠrèN¬˜‡¸Œž—€û—‰ýwލLƒ(fO(qÁ~‡le‡˜Xu/uŒñX‰@Øh—H†X¾(€iÈr¤ã†ÚpXè{ŸÄ3Ž"Q„öèÙŒ?ç€ÙÇŽ·(bO¨~!øHsŠ‹ ؇©Žü¸MøpvþƒèèXßøƒ UMj(Ÿh¡h£‹®V‹$¨{I}ë…‡9w§U”f¨‘µÕzo×W_f~Qˆ³÷wZT^Ks¦xBÙvoxv¹Q\˜“Vô’¾Œ³Èn¤˜VIåz@6€jØ“QhIŽ?HZÈ€E©RH™´˜Ž\w†¹v?F•Á"9§U(d¼èfÙ8‚Û¨v»—…uX]xn_„5™k™Žøˆ‹eñ—Q™}QI‡‹ˆ½8šVØb ˜J9›)ùwùíHRÒ"éŽæ%†øŒ•|9–tÕ’‡–ޏ’„É9‡TXk8ifÓþ\løPøšËImi‹¥¨Šµ)L·y™Â¨ºéh5‰›)÷‘÷&œé„GÀ¶Åž¯YžÌ ‡=èœQg6V…AØ”¡ Ÿ¦ž¶¸ŠšHpø”Ù¨ˆÃˆ—BI:xžÂål‡™^ú7þuÐV°ô›a•†¥‹.Ä‹1*šjÙ–,X–V·‚ÇÙ‘aé”P‰Êx‡¯g–&WÖ£ÀML‘Þ“lç™”™™æ¤¡¤tz¿è¡<ª£âù™êWk)EJŒy0PT ;1)Prõk*¡ ›i¶¥¸œ—‚œù¡oº\ ªp ª¤Ëøu¬ƒþCð[¦“ Uj¢©’:©”*©jR'P`¾Ö—.Z’°²9ªòô—è)iÒ z x Ó'nDil_fШºS©¶Z©…Z%à°G9 à?@'P¬Æz¬Èš¬ÊJ?€À«G°•VÊ”’‰œr*˜ ¸Wštõ•£Rç­íÉŸi ã$ÀŠê¬êª®$Ð(Àà  Ñ¿zXZ°[ÀúÚ¯þú¯Ë¯ýªY€Wà‰hŽÖ)O ˰±ä°ñÔ°±Š%± n«°B¸lܧnÉœ;±²ëO$ OKž~JKÔTþ¯÷š¯+°;³þzXÐ^ {b€@D=C0´D[´F{´BKÀ(К¤i·°oæKJÀEIʰWeLÀS] [+a]”\ô…ŸµP)š»­gi£1êŸtEµs€vö°]Tª°u·²åKIàNPµiec{µÙj­ÉWMV0ïºH;´AÛ¸D«´`(9û˜½ö)ð¥¡%°¦c9ZJb0dPfp¥Šh`¶Jàº^„iÐE²ë—h@jd°lÐ]«NQàeP»¯Šh¦š) ¥UŠeÑhº¨«º¬+OdÔþÅÕ›¤iÚKV¦V¼«dлo‹Zq k@l ;º¡ºR_&™›¦Á¹!š‹°ô©C€+á¿Ð( x_£±s ¾ã«tPv`»µËQJ°½~KÁN°½i4±K »t »<PûJQpxàjðk¨…’ÀF£˜RÌ;¢‹¦y@t ¾j ìK5ŒfP05<J@tÐE ŒŸåÃ5¼À¬!,Oq@ìaЙqÊq —.ò¿øËZ=ˆ C݉k؈cßj°|ÐKà@oPµãÛ}©ÇN »~ÇÆ¨»€àK‚0þt@…`tàCœfjŒõTŸ×DLKð½áætd0i¼ˆðjÀj”t0zÊ]$Äj$Ä¢ŒZ G‰à·}üÇjàñÄŠ ‹ÐŒÀtТŒ˜Ò‡N¦IÂIa#SÌ*Ð+!5c‚zsJàƒðû¤F „àEãk¶IÀ»~»¾w\»PûMLNеj$ jàhæKi°‚€È<O‰…_©e§­EL)5ªF¹`L0 jðS¤J@ ‘Ñ(Ä<Ä.pÊC¬¤ÌTL Ä.¬F•@xÐËòd —€ jÄâk¶&9Ï¢…†Ë7¤ ,.þ2Âb-P7¦¡VºÂK d  ZI ÇŽ7|ÇdÀuL.ü°ãœFj¥ dÐuëK›N€Ð¯æ¤±$X[†%‘ ¿ZJKJÀ tÐ •¤}Èåí€jÕ²dU¼»© j—ĬYŒ³«ì²ÎTPp±ÄFSá³0@#–0@óh²Ê¶åÀB©®º’K«eœ«”b„n<”壃 êBÃPÃâá\À&mBóNŠ$ªÒ1@ñÌ‹ F¥cB9õ‹QEéÚòÒ9°lS±Äè\î¹–3̨»pÈŸ`èþp£4 ;$ä,´2tÓ…\øóOÌ$L-G©|N:禂TËoD°(ÏÌñ½›òìÌP£<Í!±>kA‡%ýNÊM±³8ZjÔxTsU]ý•U[Á-8ÓoQVbS ÀS ˆ¡æ\С³&Á[ÕÛ|ûþEyÒ‘§á€õå×Un¡PxchÕ³B§®,Q•“ž´ß¥ÇU³è“‰¾T¹rϽ0Ý ‚À ³Ù†¨Ðì} é«å–ûÒ‘ÿú¼³Wåž ôµ©³ÓŒlìø\cÍZÜnIÖ›Q¬½nì¬ZV`a¡ŰóÄH«a…Bu°A&SýÙà•U‡µò¹#ÕñÔýŽ•Í‹GUsÌh÷¨=¦–U¬ï~=ìƒÃ­Ögä!Ý7[€¾C³sàf7à¡Þ{éŽhâa]ò}ÅϺgÚ‹>ÐBß‚:;Ä×?xåÉW”þ¥ûVzÀÇÉÍåÎLÐb*°‹DFg©Âßäþ$g¼¯mÍk{ã_оg©Ý~?y_³–uÁÒðŽqãñ¸Áãå{ÇsIóʦ!8éBJ¥½¸ÍÎ{,žý–W·Êý „^kƒ¢õ…&cB<ðz¸C&>ÐçžùD†9Ýýd4‹ñT*^°RÃ/èÆ¥žîÈnBCžã‚V?­¡Q„ÉûžL*ˆÄŸTÆ‚õ² )#?½108LÓÞ(G@¶D…˜é "ƒ|î3.È ŸtÂù)/[RìãCØ@ñüð_éÓ#žô”A=þdqÁkâýÈÉLòm„'£Òt2ç'˜¡ È6Juì‰q ÉéÖÏÂþ6:Ñ•±ßH–ØNʺãîzWÊ:ʯu–CZ ¹ÌJB±›Q9$5ëè”'y2yÔŸìИÌ>¢ó|9¼¡B|UÄ q”¿¢&¢P)ÈW“uæÔ$ÁÌx-YV‘ŽMúe_9È2ö““:Œ ;ïGA_Es}H€EÙ·AqÀƒÔZå%WO~ò˘>\U8Å ·IÞP¡•ÄÛÑèÍ62Ñu× &Ñ*¡µi®¬c­ëuxØ”m¢%Rk)ÙJWÃF•®3ªYQÑB‡M^]OûºT}zó´Ã”ê*K ×lt±ŒcLñj×¶–´Ã\£eËLÌVô™ýA9øQ’ Ô¡Îkd›;X7¦$µz\­ 'ÝüÝ5¨<ì.RŸ«S!ê¶4Ggo79^öб¬]”q»3åÕhO¬1 {UòX<™"W)”ÇŽV •Xeð~¡ZRâ²r<çÝêö¨{Ù‡õ·ÓE0]›PÒQ”îó©Oó±þ /¶Bõ®ÉPXHé(–·MU§ß›a3×·”meuc ¿ÍR¨³ªý¬‘¥;Y˾՜Ï5ïM Wa‡V¼N•ìzت®Ó°Ï¹í^qkRþÔš …,‡ñªÞÙòoþqrüÆ)Sµ½*-KŒs£~ JûVúæ”õ¸ Îñdk`#1½Ëóo`×kU)cùÀ••£^]LaŒ-‰3é ÷œÎÏÕ’àí±ÿòLÆAÊ5ºãÅd‡Ñ©N²¦Ð”°×¼]FÙd v´ru=eªT:Â]Þt<“ÜhkÚØ„¥özÓëÐþ8ðÈ™_Et5ù ¿šS½Þ4­iÙ…iõmØÛ»µ¹ÑÊ`žŸñÆ+¹½EÝôŠï êë 7²UN÷© z¤qwÉÈóYr…À_§÷Þ“.W(Ýû¢‡ß7ͧÓkëþX¼aµ6;Åçss½ËŠ—sÊ%‹ôÇ[dª[}ÿêtŒ§ñÅ^6ÇŒòiûVò?åúsë¦ú¯™œ›Iw¼ÑûâyßÉ|Â…÷]Í5\úUó˜ûb~‰ÝÙŽwjËüÅg<ày½2鯆éõå}gðKMÀÆ[Õ+þsØŒºx€_ƽ5–5”‹8W;†c8êÃ`ë øûª.òŠ6û)J²=Á¿õY­ÆS¶ŽÛ¼Ú3¿ d?cšÂX»©y±Ýb7%Ú¾áÃ)rS# ¯¤’µ­Ó3üƒœ¹Ó¿©‚3f› T¾<<§i²fy2ô⣗º¿Iƒµ:Ë»kÉÀì{½qAPËþµ“Ó;4!cÒ½zrÀBÜÙ¸»Ú>—ó8+»:‹µY0ʃÁ9w;:[ûÀâQÀı> ¾ü,ê/U+39þ‰ÂD¸8òÁªÛ»Ä:²;Øy¿Ý;Áùs3C?WÓ$@;2*D­#¹äzCÓ2³V£3/³<;;C_+ ߣÐûÂëCLôÀ ôºWSÄá*ÄÄÙ@ùêGS¼+¤½ök8ǃ‰HôÂÂk3=:ü¾2l9t³E»òÄÉ»ÁT:ºª5h¬EÍsA»ÃÁ)Â:¼0¥ÓÆ ¾¤Å‚a½-[)„SGS<ÇG$8ç Å»é¨{E¡Hƃz3ïþ¾ÜFrã1ÿ;(2±Óó9”¸à:ÅoœšË{ŠiQ–z·•dj\ê”̾‘ê@šê¨¦ê«¶ê¬>¶ªÞj¬îj­æê°öj±ë˜H"d४?alê§vk- ¾ ¼uœk¹~Bº¾k»& ¸2…±£Ž Ë1¡&ìvƯD0Äþ®ÄfìÅvl…TlÈÖ¼³ÞƒÖ7n:«¾¶æl§Ƥ$EþªÌIMlBÎ퀋CØBš6"–aÍúÇÍöìÙ~ë…+ÊDÔk¼Æm[ÌíÞæíßÀ¡^Xœiµ.6 FîÂ(ÆEÉnn…{î‹îN ;êÆ¦®Yí½BKÀ†–½ÌëìÚ®íÔ¾íf$¾“îDŒGÓFîÛnCKë ;nfïðÖBkÛ9݆îÝ~¸G@ ðØsïÉ>A`Þ=¥æ¹Âvp›cHX‚´ôî4Ù;mhÌo•|F4뾎¹ø×{ÕìhÄoÚîl ¤‚*ò’©J±j;¹JYlB{«|Dp_æî{‚@²4ñïQä«ì.`úHañÿþ)@+EôþC*cŸÚâ®°ï¾À×r8DJ ‡‡ê¼ñ— \r©´îæK%5žVÌöY*Wó¿ï*œ3«œ¨¹$šê—<¦âK=NƒðöFEÁq|SeÖþo §óH;7¬Î6ª Ÿü~”.'¬kpºÆ=öî™ïÝ_¾àž¢1 Ûò-'½N—Ç?_n,«V Ä'ÿÅ[üíšÊFêD'a©»®ó`ÏpLê±üò«|Ɣӻö“qf·s¶&F4óðŒÖqÞªï9‡ôl×ô@¿=/¿9?y|uOsQ,íU'ñÇÓõÀÆWúñ,Oîx?­¾þûìWïÀ!Ϻà F¢7†Ó9TÄQJ7çÇR?œeTDa×v3'³EÚÙ:ò·zÈ:¬ÇnGíY䯥ÄÐù^4G—m…yf«ð*ô²c3òuz7üA.?Å%tòîp6ßó5<8ŸUDuy÷ù[—𺪠‡ ÷ø#oK£Ç‘ýh‹Þ€•¢¿<ÿñ¸¶u¢í5×y¡°ìD#ø~³š ù…Ÿë£²•“ƒuð:h…I8¢Gƒ4(‰Øˆ{Çdb^ Õˆ¼4 ƒ¾§ƒA`8hŽÄ’vèûQx„¹ŸAÙªJòY wÃñQ×hÞBø%û:Çü~Ú–þŒHq"F‰7f䨱#È=^´8$I‰•8¢óJI”(L˜Á#¤d 2N`FQâD @Œr:ùIfỈL”MBQ‰$:Ž˜$í©äj±XtþLÁþÈñbÊ’b½† Ö$Ú±i׆%‹ÖdňJŽ €ð.^‚êæ8 ¾‚óXØÐ¬Û¯"S..ë¸ñÉ’lQR†ë°g#2šªÊ”™Dš';‹Z”( 4:Å&!“ÆIÕNjÁ¼ìP‰":tZ!J:ù1â“¿? Yñp²m¡ÌE `0t ÷%À7:vÖ oëÝòÙðàÇ‹'¾¶2ò°Q’¨†-6 NÝ9UË/ªš‘ÑÚ—áçD3ŠDÅu[ƒ$âË!U¹E^b-§VzÝ9øVq*‡Qsve×W hH˜sb÷w&gÞqÀ©˜¢JÆExEáD†LŒô™nþ@‘¡<:QšNêDDµFãF¦Qgn4‘ñfŒ ¶ha…â5øÝwÉYYsÔ‰x×t‚)ôá˜ÕV%„V¢øæŠŠ•çæ„‘YÔSjhÂä7‘AGQJ$±ÄtIÔP«Ý¹D{ÿ1!Û3HMÅÿÝ‘Lzùb›¦a›"Iè)rÌÑ…fš†*B…‰™*^…•˜%z Îy«­ºëH]Æ’K ½]ÚWŽ‹e®¸*>Ý’…+*\SÂÎ t|2ÉʦFÚJ ‘Æ Ÿû”†n˜êöšQ‡=;r.$ñ 2H=ø¶+ÍKË­%ºã~áᇫ³ßt(8A…Í[ü@²¾Lþ÷ºH}tÀ8ŸK’²óôßQÅ}LKm\££SˆÕ÷…¯ÄÛ›{³ÌÂ¥ûéû½wšÜ\€1x^g2_ ¯ZÙ `Òƒ“ð`¦7ÝùJ%êrà—Šä¢©n\šý(0úÙÉzÌ ‰ˆç·U ÆUÿKÑ6å»Å±0qò»ßÞàw+°Pð+;ðrØ= æ-8*„ß5È;:ͬoÅ“—`êu¿­Iæ1àô?Æ™h~œêݤ¨ÇæEï‰L»aîîD)Qn"ZÏJ¨¿%Ày'Ò`èèáíwƒ"爸fÑ7]zÑ x%.OŒáºHþ‚v/þáþE‰l$ÜãœèÂÞqŒtZáãøÃÝÅÐ’J‹ i4.e²~9ãÎŽW±‘DÏÛ`5‰GXŒÊ$ºì†»ºIæf…$$sHrR…”‹»ö‡EÄLáÌh)K9ê1ƒRá%é8 Úò“]4¤Š„¹œ]VqˆmAå½Hض²‰±<ä$ãYI@ê²\Äü#.1ÉIzž÷̧ 󦫰ÑoH ¯)½q›Ó|¨7Í©ÏcÞO%â) ÌnÆÑšáü¨–Lu¿¥qk\¢·Ù8jÎR‹å %F÷iÅa~ò0Õ&iFÎêÉ G8©ÐyG.‘þp–ü&%噫NÔ‚¢Ì¦à L 2 À¬cû)FEd §bž*×ÉJ” ð•¿&DY SÒƒl…áE½xU;Fu¥35fÒ@Š–)ü”™°jBFzBHN®jM+é9ÅXž ªrÅ)Þ‹Ñ•úПsZjJ𳼩D~š_èI¥&užˆÓ¨L%¹K0šòs‹©d­·Q·nÕ7è„×Aé%Øÿ-t®­mé,%{KxFŽU­éüÀ‰ÜÚU§ÑèZ4 Öݶ ¨ÿ ଋXàÖ¶¿ ¦k)\Ë:œ ï(ÿÉ.è^VN ê2“HÝâ9O¶¬--i_KÕZQ”þYEêwñ9ÞRÚWµ7Äa$ó‡¼1…D›ežQSK[înWšäµgzéèØøýw®q‹-@Uºá¦bð½;l3ç;²j§n«‡½Ë@.ž—¹Ýe®[ëéB¼ºÖ¹ƒÕCn «ÎÆ*¾TÀùYÍüâ÷¦áµ±z_þòT¦Xoµ›Ñ÷ÉÄ‹k#U<¸²‚¯Ìf>3šÓ¬æ5³¹Ín~3œã,ç9Ó¹Îv¾s›+åÕ"<^%%Œu•Ù@,Á ƒJÂhmè% Ú'ˆnô¢!­hG3:Ñ•¦´¤/iK?:цæô§½iEO:Ô£®4©5êN‹šÔ Æ´©KýhUzÓ­þ¦õ­;-kZ»zÕ±®u®-ëS³úÓ»žu¦ º4@™Ÿ%QO¨oA Ö®¶µ³­íms»ÛÞþ6¸Ã-îq“[ÜØ.w·Ïîm«ûÛí^·»á-op¿{Þä>ÀœJ­²Ï~ @.hð|£à?8Á~ð‚¼á w8Ä9qƒ‰/⿸ÃÎð‹k<ã÷xÇ5nðW¼ä 9Æ7nqƒ£<ág9ÈI.ò•·\å5/¹Ëqns“ß<æOyÎWNpäÂÎ6“˜…f SPcéN:Ô£.õ¨SãÖ‡ðj4}ê^ÿ:ØÃ.ö±“½ìf?;ÚÓ®öµ³]ìMoþúÿˆ|v&4¡( z@‚<@uÿ;à/øÁ~C¹ ó‚ ¿! €áB„ øÉS¾ò–¿(8AX/ûÙÓ¾öÆã·Xým{‚h # Aìw/üáÿï(ŽWÒ…¯àøÅ>ô£Ÿ*¹·ÊÈÒ€R`Ø_¿ûÞÿ>uíäï~ù¿÷;øÓ¯þák~îœ~ οþùÓŸõÇ ùm¿ü棿þþÿ?å5X‘‰Ÿòùžó„ $ ® D¶€æ‚( V`tÜA8S÷E€ü„ ¼@ ´Àº€ þÀ€@@ Šà L ¶  MⵑõI_ïý^ð9` Ä€ÊÀ ¨ „ ä j ¨€.¼ ºàá UþÕžˆÀëõß ª€!  V¡~`v!¶_u=Ûðà !ê` Ø€ ܾ€ÂÀ tƒÎaýaà@D[ô=áöI!¼À& ª@D > †&¢ú àÜéôeßö•!aº€ìÀ.à ‚`ê*"(ÚžJGÒÞþ‘^!Bda@âC(Æ"ôQßAÐÝõi÷!` Ü…j¡ª¢,ãî-!Bàá#2*DÞÅj¡þ)À@ ä‚0Ncía-¾ñéa.âà]< ¶""5Žcê"ãób*ª3nâ.À 09Îãé1bõ}âîÅßÒ#?vŸ9j Ba2ö#AF-þÌ æ!.JbA6¤(:âA cñ=!ÿ9¤Eîž5þ 6Ÿ>2äE~¤é™£Df£ë‚$Jbž=Ö"DNd  À>¦¤LZÞ?–¢ì=€H ô@ xäLþdàäЈ¡íåCèÃ>\€PP6%áÕd š"lø¤SfåtÅ`a„€ ÀW€@XYšåX–åY¦e[²åZª%ZÂå\Ê¥[Æ÷å[ª¥ì¥8€x_òåXÖe^&^&a"æ]&&c.¦cÒåcÚ%dN¦dV¦a6&e^fdjff*fgb¦ezfh‚&gŽæfŠæYÒ¥0ÀF„L Àæ Ä&mΦmÖ&nÞ¦næ&oî¦oö&pNÜmÒ@pço§q&'r.§r6's>§sF'tN§tV'u^§uƦnÎfÑ ÆÒqÝÛ1x†'yާy–'zž§z¦'{ž'z¶'|®§|Æ'}Χ}Ö'~Þ§~æ'î§ö'€þ§€(×g×i%‚&¨‚.(ƒ6¨ƒ>(„F¨„N(…V¨…^(†fhS;fox-1.6.49/doc/art/ilr.gif0000644000175000017500000000015111637250333012140 00000000000000GIF87aãÛäíþþþÍÙæúûý­ÁÖóöù~ž¾âéðýýþUª¯Ã×òõùiŽ´ÃÒáÿÿÿÿÿÿ,0È•CÜPÈE‡q-J2!KØCq(k„‘ÜI;fox-1.6.49/doc/art/win32-tooloptions.png0000644000175000017500000000570111637250333014730 00000000000000‰PNG  IHDR¡?êaÂPLTE€ÿÿÀÀÀ€€€€ÿÿÿÿÿC³ˆŽtEXtSoftwaregif2png 2.0.1=^¾h BIDATxœíKoëºlj²å>›ó9Ƚg Á½ûÉZ@b­ ´@¿~9Фž´¬ÇÐæß>²¬ÉŸf8>QõƒI©?Ú‡Ò%:û¢n«‹%úçç#©IWžÆ¯äNôM•çͯÑWÛòíÜéõ Ñz„¨ýüºÂþÜx€¨Ò•F" ¦‹ˆW<x^{µÿà}µ«g6IàlÎëÈý"û²0øqma=Yk"¢•q¢Ï6 ‰ælÔU,ñ ¢÷°EDz]ë *à?Ž ðÊÆF×…÷#P&nÖÓÔ3(O¢ŸÔ›_Éý¹N±üJîDC=&Ñ!åÃTˆä«ÉW!’¯B´»RzáßçGôpLÑøµù©ë6/ìJ9.éò¾Aa/KDã׿Rf1±yaWÊqiDߘÀDÂL4‘ÒE’Nl^Ø•r\&0•p¶DT›T$]gOTq¥4ô ;b"¤¬ªA¾t…ÕµlÆ-Áñ¾¤tF H¶òiÇIhÍ©ÿѬã³'ˆ(³‹ñ;b". ?Ý•¯ò»ÃâÐö1¢ª_$‡ù´ã$ê˜H'G©DX¶'ÂMD±n$òçßO¤TUéJÕªG›vŽÅDʬ¡`JÅ»ð MgÙe‡Yi]õˆ¬E´f÷óDp&¦Ž…©ðË8Ñ;éQ"È]£g÷l¤ak\œXºwˆ×èBv S†´£ã”&"Ý·‘î’Öîlç$Hôîˆ."‘š²Ñ$‘Í[si""kÓE"8w‚ÈÙhŒ’®‘½ÚÎëc¢&Ò·iºÚ}¯«è”y"=m£9"º’ÎF¾JEDG¤Ö ŠãpÔ€HOõª" ‰ô¢×uõhÖFp?SCeñºAd€T02`Õb Å Â5 ¸è;®=¢È€÷#M‘ 3fëÑ@7=3Tã»ôØa=×-ƺn ⋼HDVÞê)hé~4øçºB$™ˆê}üGjyý 7Ø· Þ1‘œyIDS'6e§õ*DòUˆä«ÉW!’¯B$_O@¤wŒôcn¤Jõ×ýÛý¶|’DºæN¤UÉ%©ëòóXñæu×ô¢¾ÜÊ~DÐÓ¬h©Õæl@Taw6u^*=Þ¿í¾ÝIDõˆúÔh¹¹± ¹îDîÖíiô ·hÄF8İ'‘ïûÇÑ1–öooHTík£Q¢‘þí|ˆ´#¢Aƒ¼Žºœ‰hk$¼aõG"ˆ £ýÛ÷šßI”½úD• po­³x|å¯Ç'º|ì¤?»,wÎb@¤v’÷€³™}zå«€hß,v'â·‰â,ö'âúº'Q”Å35pPƒKeà½evLĉ6á’²¼?‹)"ZØ\Vç3šÝ4‘YŸÓ¢×ÑËev?‘‚Y,û…YLY'0átФ® º€RèÚÊ~/¿;‹i"ë~eî&¢ùG="¤iȯѵ [‘_œÅQÓtÙÜ_ »jX0‡ÓX3!‘ý\ÔËb‰hMýìF"CLÇ vk®àòýÜ.Ìl/"`PÛx]"Ô]µ¦ª&AêÄ‘ÁÜ–ˆ6•€g†]³{"nßíIg±;ÑH‹oß,DõN ˆöÍ¢O´ß”4Ÿñ¾Y<~_Pþ*DòõøD»ux ‰>Õ“®ì:ø{€ ‘|åBô~ùþ‹W_àg¯¿ø[8䌿š"Â_lʼnî7E(A—ËÿÍ?s~¤÷ëå‹UáÀî$QÈs* é÷_?ïT×—_‰‚ñéð×rcD‡¢÷ÿuë¯/߈úQÝú"ýb´ ª4ÍM:† ¯ß—ßïÝ¥}y Lä”Bä(ZUÁOFOÐÛå?þË«¯E*0R‘Rø¿ Q7Õó aøØ(ˆ nÑFµ'ÒõyU*¼”ÖD‘<‘sÀ¹X'ÉëHTú0ÖÑ›ýoö~„Ó¦pŽMà:12Ùb-!â@žË3‰ïG–è•Ý® ¦KÍG†0*JPÅS%A¿ºEôÈÀvÌËF)*Dòõ,Dr~¸¼B£DØ´×ä·tÐøÑ*Dòõ\D8‹¡O3<Ñn4´¹ÁiC¦7ÃÐ ©&ÜÐ¥ÃKp>‹Í¥Á·ÁÉ-v+Lq éö„æÖ¹sD†‹5:EÌ´nþÅ»©pá‰XXŠ#‚³ ¿-èˆÖLIš'j‰Nðêùz]j1NÃ1QÛ L?‘áÙ4=Ã(œSÃóÓ n„ýðbx ¬).°ÂÅDŠ&Óá\¡ ÍîD°T ó¡ëˆó°rµ·Ð.cÜ%¿F3ôðªÅ‡¿sQ3D b²Z|»|¨ÙÅFǶøb¢fs"ù×âs±Žm6Žu'´øØ#¥N•˜ïP[܆J¸D§«´øä«ÉW!’¯ç":¼ÅÇ™½Þ·7ødµøºçŒ°ytãC¬_WúèÆUY->ODm‹]ˆÈ—ÍQc|Í"Ô’p‰(À†`­ÝDçËšIŽm„ñaèL€¾–cú¢Ðx_çn–Oš×-Ýð&ÔBP€[Ó•"áz+.2<Ù3C–z"ÝÊY¯§iڳ˵^…H¾RÆøx0¯éz M°§´1>ü @¶™5H„#FñXž]Ã1`jDö§ŒñcyDcL7B"OI#b†F›`Þ)cÇ+™ˆ|0"2g|RIc|~,Qܨ9±äSJããÈÀî§`ªAž‘!O"ù*DòUˆä빈Z|†fÁ\èYÝÙ⣙J-¶øÜì ÝÙâkò#Zhñá¬Ó̼n¡Ågò«G -¾Üˆèc®Å׸٤bto‹ªÑ9mC=×3Cž*DòUˆäkö~´^2‰î¸ožyË}*¯+6¢b#ù*6’¯b#ùz.=Üs]¦*DòUˆä«ÉW!’¯B$_…H¾ ‘|"ùz¢:_=Þ_Ì_…H¾ ‘|"ù*DòUˆä«ÉW!’¯€(ç?'( :óÏÁo)Oô@*DòUˆä«ÉW!ÚIUʽs¹Ó·©å-••ˆ–’ ž‚ÎVõ=¿ÿRˆNW!šX¢Jé^^}"Š}Ü¡b‰t]Õº ·ôˆª:âÍ„(*ò¨ŽO ‰&ŠÝj„¨RµV°„Þž7Q @Ö’ô&‰&Zô:>ˆE©Lˆ"CÝYGgRf£7Ä:½Ib‰è~iä~D^—Id*÷g†¡ Ñùz@¢Ÿ…>úüˆÒún›8[iDIG !ÚP…H¾ ‘|Y¢Uî´óÓÿsõDÔ^©ŒIEND®B`‚fox-1.6.49/doc/art/our.gif0000644000175000017500000000150611637250333012164 00000000000000GIF89a÷œ1¥B¥J¥J!­R)­Z)­Z1µkJÆ„cÆŒkÖ¥ŒÖ¥”çÆµ÷ïçÿ÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,+0 ÀÁƒƒH`ðA„|˜p‡h@±¢‚Ž €p ;fox-1.6.49/doc/art/wintextedit.png0000644000175000017500000004433011637250333013750 00000000000000‰PNG  IHDR‰Mq~PLTE9­­­¥¥¥„ç¥{{{kkkcccÿÿÿΔ”{9999111ÞÞÞ9{!!!ÎÎÎ9ÆÆÆ99ÿÿÿ„„”””„„„„½ZZZRRR„„µÆÞÿÿÿÿÿBBB{„„„½½½ÿšvXVtEXtSoftwaregif2png 2.0.1=^¾h IDATxœíÝ ƒâ:š iÍ4•Û‘Ó³;µíª =]+ºÓ»üÿ?¸–dY’oøòzŸ<' 0`ˆ7å NÕ@¡Ô»¼ËƒÖ#ÛïBì{¨ k9€u5 ëÍCF­Õp ‹=«Gc·zsÛþ +ª 8ƒ¥žÕz˜®jG‡ã?¥*F‚ÎàAÓõzOÇTUÛ?Šx§LFn»8^ Ø/@oõ(€ƒïw°íß-b–|YpøåbÕ}¿'€éøïj7´KÀlðfh7 `2lØ5‘þx¯Ç‹Àµ¾Ü[ê@¯žêØN¨bàÍÖÐ÷°ßþËÀy< Ùú{8€7S¼vØí:ÀŽ[³X"€Ý@F€ÎcMývàÝ Û€Yà<žþI¶8«|ˆMl+0ë¼ßöƒ!l=$ [œÔb'´ý«¶ '·³Àû-Ål| +eú·q)˜­ÀNj>fSã¿Úôo{[ù,0€S˜ÙøhÐþ˜ÐÛ88 Gƒp mé6ƒl `´ú°«Dp«-o`8t8"4Dp‹üý»+UøçÕpøJ…Óƒu{ÃïÇ×(,€ëwöÛT®á'‚“›Ë7ÐðT6€¾†þ¬=uï ÿ¼»pò-”^ÁœY¸öÃ7¤NOÇ?äLPypªN³6gëìß >~IÓsé[g:Uó{üfŒnJñ ëhλ¯…°é…Ý‘ªú³ÑGâ´Ž¯´â^ôàD'SåXƒFÙ‹Ç— Ä› `÷M<4í³,6€ýGØüÿáûá$¾Ò#ßêÁdDùÆ/ölÍ—¸6¡K:êc¿Ô›¤²¿Š?¯ÇóSÓáÊýM“¥òøîA+X¹!Œ?<>®A|ÉcýêE;nŒnûÒÆY‹ÖüÅï‘´¾I£ê¸lñ¥ã7_àex³ÁÍç&²6€ÝR0\ vËÀ먓ïN2|ÀK²±dn5â¨`áZñØñÑÿ“ å€F€S&6‚¬68ÜòqŽN/'Û‹/û˜Nxùÿt©[îm8¬œ2±ÌTã¡ßÆE`=ºâyÖÎl‰C÷ª' ÈÒ•ßì»Àr·÷vÃÞ¨^ýB£Ãš.ê®v³N·) {ÀQ¬?YZ_qnàä›O¯Î:@¼ÒTÙpÝÓ“¨=ÍŠ^Âî%ýI(žªÚp_êô*Ñ4Ç‹®ž,{k¶ã5ø$È”O  J¼û½¼]¼klK ¿_ƒzù@B=0¾Ì¤Àì@@ ̇ÄäÀÌ@@Ì äÀÌ@@Ì äÀÌ@@Ì äÀÌ@@ÌL@¬ Žü3ÖÃ}7}Õðãù QÉÉàlf& àò‹;õ5}m582G{zO àìå@ž ñqOo2€Ýrm´¤;q%ûswÕ‰ëõ RUøÈLÀîcê½O33±ÐwKE/ûÄ•º·ÂÜjÀ(wÝ„ 2Ží1ü¿¿¡ `fF€sLÎl m [E§0¾ñ `Æ–¨&—WЧ.šD¾¢& J0kF€³o„-Œ.!€ÈÓ`XÀppx~à`;k‘·éE`ÖfnÇVà°$ì3==ô_ý„ ²ÅV`ããž…výuN3PÍlöH_rÁk¹P“oi˜;F€Àn0wC3C90v·¶ÝÁ²MÓZƒr`еo[Õm‰ª7=Ú ‡v¢¡ß¦ª[mÙhÞ­«öO­[85Ø-÷¶.ý%[îàÖ篱´õ««6uMS+=€÷Ø¥KàÖ^‚0ú3_ pjeð>ä¸3€¶òùÓÕ³ø ÀQÅðb£w»& lv,ÛÅ߯þ©í\5ùkƒŸ@ à¨Òhûw½ ;×6uÁ‹“[¨YN®à^Ú^«aÿÚnÜ ¦Û ìòWùíæo6‚çVnmÿn¶¥ÔåÒpc•ÛòåÏi#HS+:€W}ëw ¼ÌÞdònµ+`eóWõ£?Ó+6€í«ÿu×ôÜÀʰŠö~é@àÔ `<þ³WÝ@S@3/u2ú#€Àé•À~ü7à¶¶Ôí\œÊßóö ¢Ø^oºîö}îí  Ò¶€aÓ‡§Þ±øvìý°ç¸Ðû#ýÿô6ß”ãWCB©¼Þ®Õès ûXGLòW½cx0€mY~ÿÞõµçßNÒ7Ý>•4³X®€{žÂ¡D€~ŸC±í½;€UŽûü½a`»Ô}p¹íß¶ª¯¯/Umþm¾µ3§u €öÏæÛÍM®Ú@½3Â6œ·ƒØ(4€×ªºÚ]þ$8. Ëß;ÖÞnvÇìÝïÛ¿­#À¶€_;F€í ÜÙ? Èþn°ºÖWÕæ¯}w\k ø^ŰïßÁÃ8«›_\À.¯`Ö¿VÝ¿œjÇ[×~ÙAà67}×·n6U;G€•Ü¿Z¬v bÛ‡ÐþçVoº]í_Ÿ¶€ð½Ê ൠàeó^/ã;è6‚ô ù{ÇF¶~f_ìóDV›E27þÛ¶ÜÚ@}ÿºënFéjßÐÌíÍ7œ›Þö–º‡p±_¶°ú¿jkF€oVhCÿ¢*¿5xÓÜ~âÆù{ÃF]ÛQU½± mªÍÛ¿Û–[ÚrºàÆÅÑ{{›{ûXïöØ[nÙݯ®UmÆ`BÙ1!{ïÊPo( YòíÿÀ÷*4€×.€ñpßGAêžÒvè·n©j³qU×sd*[ú¿e½©œfØPßÍ·ÇG5~ØH®Üx‹nØÆxÓR°²åëþ²%€ïUhͰßóÏoß~ÐM´ß‹Ö:] ø† mÝjµJmØbêe¶Jt6po9Í:@SÀ¯‹ÿm]ë¸óN\Ô¦õxöQ„  áúÛÙ±Ÿ»Ý¶µ‡Wh¯ÝÐn;H¼ôžšßó5ÝüÎvb-ӱп C¹Ýå4[Mm·®Ê3Ÿ»‰þˆðRmÜ”Íë¿y¨7/;C^¹¼¨PÀÝ;Át#@ÀZ¥ù{ÇFtGìµÔÎþí/§ÙÐpWÓY"@¿‹©à¦‡¡ŽÕÖegÈ+8€Íd·nŽF€fKHœ¿k>Ü;ŽÛ]NSý#@óººWÖì³t<€¶}›ØÝöÐpS9!¯ØšÐ©Q·m6j7þ3Œ6‚Øüý\³ àþàÎr¶ºOaŸax,€F€ÛÊ ye°¹ú->—}ùëè7‚D£¿ëON#ÀÝ㸽å4ëÒµ#€›n<ŵoßÂh(õ7I à[À~ç¿ûÖýÿ¼ÚmþÕa#H[…Ÿû—üϲ°)€;Çq»ËÙ}¸¯õ†›š»mêðGbÈVÄ]v”⊠`WÀðQ¸wPk_@·Älú^4˜°_â¦îPí¾aÀƒ¸dß›ý| `Óïô|ð“pñ~€Ê~ 4ÅQ+5€fõßqßp2.vum¿$ßÁä”ÀL@@ÌÌ\Ur²ÞÞ­¨¿Œ÷óðŽV<’d•¡Ì§à6>“]·0„6YCÌÌlÝoÖæ£ ì¹Që—Ý€»¾ëÝšN_ñ@WìSù}»õkÍÍšøF03ó#À=-Û;n¬~éðuý=¸Ÿ5Çä›yÄû#òËÍѾgŸÓðkÍÍløF03+è´üAÞ½Âï¤ò¥êÓ!¹Ë„ö‹ƒ®¿f—ô£s÷-ú.-(ªpUå÷®£ù žIe‡t¿ª ·ý-ü“ínÕσG½Òªì,¿ ÌÌÂ:@Nº–l `zë*TjšE·8èG„³K‡*^FïK— [Õàÿ…G ?Yz–‹úŸ9ÓþÿëááYÃ-º'ûËœùõpTztª’Kðj03KAÔà×K=\¨ŒG€ãÓÅÛ¶¿ò6tvkˆ®ÜHHÛ_ÿ™„æ¨ÖñSxlÕQGÕßeÀM·è›æÁÇσj4ðJÅP ß~tVØâV`å—¯Ôþ¦ZdG?v¤û|t=œ½»áè'l Ÿ Y±|²†Ó…›'½ O4 x©‚¸©µ ;aûKv«‡ì–Ã/¿YVÙÁý<ôôÅc5¼‹hùá"p%À_›økÀn¬zè鬧}ïBg¬L˜žžà›ÖÜ­Zœ¬â+–IÐ¯ï ¿üºM¬\ `²8 ãԄ³;@÷hÝÒû¯UŒoÑ {«x¬zèécgø]J `-óµû¢—1w©¿È]þ˜ ¹¾nâ ÆS´bGè~MSµâ—*\y¸xùÆnGh¿8¬ýòOÝO˜~˜zXOdÇ"ð¡öϤÆm¸Å/7ìõOzi=D? Åð›@ÝuÐÅË_2¸hÕäuüÿ`‚ñÔä<ë£p›ýúE]{jÎéþrÙ‡ötá™DÏcå-ºíÝ÷ëwŒÄ9ÀfÀ&¾tgG·~eû#2lzõ£[m»á¯Î¦E÷¸ùvƒÛŸk´ïóÖ‚Í  îx›pitÑC:¹öÔ©–^>ÉÐì9&3~«ýËOá &#ÀfmãIΞŠâwì„üGCxm²C,‡Xæ¿(QÁô‹¨MrI¿ÝvE¶¢ÑâÛ·Ø®¸æŽr`f ‡f†r`f ‡fÆ ÀA0?6€ ÀQåõô'3¶ì¨23‰¹IŠï í¨d~— àô•6pÛÕ pRpùâ#×íÆˆÂ{A7Rn»zøÏk¤áHÏ% Wôë/ŠØ]$ƒ2  Õ„ƒÁ„³MÓ_”| wÈObxÅÑáCN»‹d@@F çüÈoæ°³ÇCH‘ÆÌ±Â²»– È €ÝeÃZ+8u0™p[=˜´ È €ÝeS#Àfgà pfp~`“žYÀé‹d@@Ft·ÎÖö«ûFÓI.Jƃ@@Fy–½dÀW= AA_õ(@@FñÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@Ìd”À:±ÿÜvÈ(:€u;0ºÖõOýsmÿÿyn £äÖÉœ¨ÌU«úúcþÜZ•=wÝ?¹ £ì†Å_]  )`ß¿¾€Ï@@FáTËÑÖ]mÿ¾Ûs¿ÿ¾\Lqd”À»s4€íòo_Àï›ëߟ?Ï* dÀ/‰šõÊ/_»þ]þ\ž´2 Hmõâ¶õ»^ïOÚBÅPdXÙêEcÀ¶~?___÷ NŒŠ¬Tj44ýûÇs H…ðâéƒ ±Û“ã1 é_;¼@à¼Ê` ñ¡:Þ¿.—ûå×ëf.dÀ¨xÉLÙº4lŠ×†Û‚ÝšÁãO`ˆ2Š êûPH_»?f Ø­¼~ÿýÛìMÓ*8€ÉJ¿ð¡tõ³kÍPW?×ëõïÿþÇ÷?'Vn“¥^ÀþòÍìö‚iof X›þ|ÛþµY<øè'@@FÉ kí°ùò—o VæìO(`[¿3 <øè'@@FÑüýÛЮ<À®€_¨*Õo !€ÀyÀ?ÂVà#‹À¾€æO;OMõ”úîÖ zèÓ £à7‚øËw}(D™Å]׿ª²¼}»-#Gù È(7€RR»ÁØ©]íˆOÛUŠ?·vhŽŠõœYKШ+÷Ãd“ðæ†x*ûõçúíŽ ¨ž2$€€ئŸ„Ûöiàϰ.ðf—ƒ=îYAÝ©JÔþòuLÍÍÚ¯µ/`ý´ü@@ ´'CÛæ‰ºF·šñØcŸDå°n³wm™Õv£Ù²m-`4\sχ@@F¹¬šªºêÛU™½ã…ØàÖšüM À™•@ÕæÉÐÿ |(ÄØ@;;Ç·b8¯rhâVÒ% é‚[èfçx˜çUv;£m w´ëíìÞŒE`àÌ ½ÆÈ¦;ˆöÜû7!€€ (q;ùdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@FÔÉÉ’…«¸¹÷àº+îbÈ(1€®KQæBµÀù+è‰s² £Äº0IðÁ¸çVvÍð_›îÿþ;í/™n­›njÝ—î‚x’Z¤‰QdûÖõ߆ö—ép• :žTwn¢ÇÓè¾@@F™lô(^~È]æs8ÅͽþÜ «Ñò`’8‘BØÅÎZàü«NÎ Ø/@àÌÊ`¸dføxûÈtÇÓ €Àù”@¿~.UØè1¸lÂru3@ÖçRlý’ê0xƒmÂsÅ —ÚëëA3Óiô“ÔlΤÀ¾Hü È €¯C“!€¯C“!€"€€ ˜!È €"€€Œ‚¨““é³GVÓ¹z`«@@FIìö€ž¼ŽDOa-È()€+vl>ÀW2Ê  yæál÷YàäÃý5Ö÷¬` ¹§"€€Œ¢8qt×Àþ£Ázx ëã?d”À¨zã³SnÙ’07CÃ@àì `3>`#Àø 2Pf›þ¬´¨£‹¦Ön¸䦸ÎnnüÆàt+p²²pQ@¶((€ó^±ó²$È € JU|ÍLxÕ‘BÅ0GA3D0CA3D0CA3D0CA3D0CA3D0CA3D0CA3D0CA3D0CA3D0CA3D0CA3D0CA3D0CAÍê£÷°èàÄÇ ƒº|J R÷ò$€€ h€úXÕ?–x'€ÀIÀvüfæÃ‘ƼD pn°¶%°àå2Xýg#H“*>€ueçávÖÏ''UzÛþÝÌ|¸UµÞ@ÀÉüÙ@ठ`]™üÙÚîK  àLÿtý„ý` £ì¶ý qÜ“À6€3ý«íä>þÈ(=€Zw!QU哲¹Yêbhn[›I¶°'µª'Vtí°éÞ­íŸÔçH@;Úk“WÛí)•ªk;úÓú!€€ŒÂhfAm2ÕÖª2Ùò6ÍÀväç¶)WÝ”kœ44£·[Àªò³ek/Ê-îÚ ]ô5ç*»8M“*<€7» ¸ÍV›¿>€ßÍ÷æÞMÝf“O›Öª[H“*<€Ý\¸ÙàíHgw$€Ài@U‡ùà€»'>G³+9€µòûAWf ø¦.õåR].zWçÈá°€Ó*9€JUueÚgWÞ¢à¾N ãçUpͶZS@§íßÅílÙÀþ€X¡8­‚èèògOÂlÙÀñ¡ûü@༊ Ùm¹²{ê¥ùÛÀË —>æ¬Ä“ˆ@@FÁljŸÀ° ÜÛ4K¢ôÑ»D-x È(9€}õÁ]WÂÞ4Ê/_î8½²ýÐoÇQM•=Œêšma?@à´J`vócÏ¡íСŒÀ4»j hô Ü5lÜQ¯42C.ûbehgçKúG!г Ü÷ÏbÖáÀú{n¾dÀ`÷?ßa×ÚÙIœÀäš»€ñ~€»n¿d@‰;xâú¾)A3D0CA3D0CA3D0CA3D¥P‡S=uÝ‘‰k¹97såþ‡ë&¿ dÀU¦B©g§ £@àôŠ  ŽO›àäØ0ú!N¯àÚåTíÎiÖž6á'Ú_O#œèäÚ£úÉwWï¯u0ŽQ\›>A>MºÏ¡¿(ýva8¾QrítòÑ=»|BA›‰–= ]«é.n 2y d”À¸~ìãÚM]{bT_ûÈ €Í €Í°]KŒ/™`?îLn¿dÀh‰4ZI·yàh¡v]çQvãÍ´îl“nNFnñ4ºS_[è/ö—FÓ<„2J à›n^‚2à+ÈöBàóÞïoˆ2`† ƒfˆ2`† £Ìšg>¸d|³=kîú î@dÀøSÝY™F{>‹oú@@F‰ÔÉI#Àô#"8»²Ø}LMÇGï[üÈ2½ð$È €é‘| x™žýFdÀ…nmXòYâøÈ €óܼ!7Z¹øÌþ@@”_–8âÕ"È(1€ÉÞ*z)€» (rÐçEQdãý•ã–êÑVàÍÔºÿ'æØ œ]™ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@Fñ¬;ï£jg£ÀdVÞD”À¶X•M—nÓu$_UÕÍÏ—2  «Ÿ¶µóÁÝw•¾]º?¯( d”@_¿Ú·º›»úU]"uìÐãž¿?ˆ(8€æÙ·OÞµÏÿìHpûT3Ö¥õ9s–2 `eWÜUîDÛº/›Xë[=ýçú”YKe°o`›½Ê í%Øvs¦€8³âØ7°[è.Ø6Gy"€É8ÐÐ · #˜6°r›/ö#Õý^ùóâ³—2Ê à¨€ÝpG³ú`ØæÞòß@ऊàŸVHá¾1[?¼h?!ÀJ+ó‡gUxÿh×@ýG  ö4‹À•² pVeФ¯  ÆéÏ@ऊàŸ?¡€B#À 8«¢èÇ~ýpçfÛh u÷ìw8«‚è–»‘ßÁÆ#Ào}ÿvîú·&€ÀyÀx?‰à÷ÍМiøç7ΫðÖBŒF€??QÍR0ΪðvûÁtgö~rc´ðÛÐÐ €ÀY•@¾ãL·@ %ÐÐ|äÏ¡ö\• èö…‰x¯^2 IDAT¸}nÔýìl«ôûNLÀaÿvÐ|èÍðOÀ¿ÿçUvÃPïßÜ}ï¿£ý.8¯¢ب.õñö#@Í'A€\”ÀFu ¬Ã^€;fFíÆ}S8«Âx8€vv@ 'Å0ºþí  ›ê2'EŸÀ½ùëÖÚÙ©&í™æÈ €î*jþ’ý÷M`#È €þJFjOìM"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È(/€îy?¼Ñãk¬¿–4È(0€Ñ×ø|¥ðaº ðùŠ ™?íG†îÒøçó¢kµS°7nšdÂ+'´ d”@íÏiê/×ý‰WŸ]ËçO§Öë&´ d@§°obønc“ˆ'àïQdÀþÄÍ…v?_0ÀxÂŒÓ*:€é%Ýâïøç F€ ήø&§Ñ‚±Ô"0ëó*6€a{otÚ„ïvlŽþ×[å Håpä®*Ïœ(dÀà)ý#€Ày@OtWå~šÏ˜*„À @@ÌdÀ @@Fñt³¡Ù³±¢Ÿ‰ãŸ,|'€2`ôu‡éêÇW9‚2`ôudŒú¯î³p[kå?X§“Ï”tŸþð?Ú8͇ ƒZMÓÒoÛ´£dú!`Ý]Î"€€ è¿&ÑZm1€ñU$@@ô_…} pVЕ`úCQAý×',@àÜ Õ àÒVàD±@@FñÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@ÌdÀ @@FÙT-‘{/BEPÕ¿k‘<©[ÿgñ2!QrU@©z}íÚsÏ@@HÉt”[þn©ßnrí©ýöý#€€‚¨L¶~›ö‘:0fë hÇ€í×çõBJ Q›šåà¶TÊöÐqϽDcÀ§Žÿ ¥äÖv#HÓÔµoàïß¼=wüG)%Ðd¯®Õ¥é–…ƒÃcÀ§öBJ`mF}&Í×WsQ‡ŸÙ?)9€»'Ì×—_ÿWï`<|bÿ ¤àvŸQnwh7ì’¸;^Ñðyý#€€’èì úw`ô¦†û>dÀ¦ßýå·Oßîv‹¾aÀç €€ Ø„*Ý•oïF¿ñãÉc@È €ö]ë#³"Úýå¹c@È €î*Œv~ò2 »ÊñFã¿g £ÜÖ=ÕPí `4©°å‰c@È(8€ý<è¸wèhRa+ÊÇ€QvM§l}ÿÔ{MÊßú©c@È(;€zÀßöìMª¿m¿GõÆ€Qv£ +`½kètRþ^~ªdd@Ó,_-s`˜½¹Lêé £ðÚyÐý+û‡kÃI=d”@7¢õvûî`bROEEP Û'µ d”@G$€B“Z…2Ê  àVÚ'nðDå0cA3D0CA3D0CA3D0CQxÝLH.±ÿ­¥Ç˜½êú©>B¥0úÚ_²%€O¹ê#A£“î, Aý‰™ÍÞêˆ;‰O p>°;Ñátó:Àô–:žVºnEá:A»“ çt2¹QçC»7;„触I"€ÝI´6Of8<%€ÀéÀîëÁE`Ö*=€V¶Ù»#4[À<@@ÌdÀ @@ÌdÀ @@Ìd@ûœ§¯%¸›Ê³@@FYþ/KA3D%ОÓÝç>üç@’cjÉ®É#€€Œ²h?“fO»/ýGÔôÄGyO‹2 `¶Å¦ ?;8œßi@@Fyýo"€ÝO‹2Ê `¿ü;8R_z˜3·Ï"€€Œ’¨'È:@ e0ìݦ›DÆ[7!õ% £°~È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ (ánþÜn·owîroâ?µôÝ@@з®M`ÛÀ{•P~ö@@”jg†•V—göB qí켃x¼w¹µ³´|ÆÌ%€€ غ¶3Á:^ÀËÅÌÑv–~_žÖ?!€¶ʪª}s"Vf¦Öu­n—gõB`@?ÔÎFýSêR×·‹Ééí»¹>gÎ@@FÙtkþêJ¹3ÊŸÙ¸6°-ß·a—•¾}ß¾¿Õ÷íöý¤KEЭû«Û¹ ì*@ÕV[—…ÛþµÕk5w@S@u7¼~ðS £ävã?­L¯ÊŒý°Ú´ðz7ùsûêvÙ·þ®ïöäY$€€Œ‚x­Ì³¯µ+`»¬+ÿG]7Íß?»ÌEëËíÚ.ý*sùS HåÐôïjû§Ûºåàk÷G«M#À6s·n+ÈE©KU׳¤yV £äöýÓîk(àuëP7ýVàº6ëuQ+ ÈsH@@FÁÔƒþŬ·õM÷{ÂÔ•ÝðÒýèû $€€Œ‚Ø>ñë”zÏðÖï X›¥éº¹øŸ@à´  ¾^«)×Í#@³õ·™>eH°ê·yŒþlÞ¯ípføŒ! d@=Û¿Í#@s0T==$€Ày@¹ ÙÚðÂÈFÁF¼0²Qp%G€¡€~øÌý` £àÊëžêG€*ðø3 €€Œ‚(7¬ûÙ©n7?t`GhàÄ  à°‘æ¨íWs\„o;´Ÿ„{Jÿ ¤à ]o¶€1™ç €€Œ‚øœà€Ì3 €€Œ‚¸8Ü4Kj7þ3¼ÔÕsãg@@FÁ\²mŽØÚÙ©ìF`»ð‰s•2Ê `£l»@7;Õ½®ªn+°94 qü @@FÁ”ã*mØ`ÕÕ“úG!P@´ Ö®êIý#€€(q)Ó?wú¤û#€€ ˜!È €"€€ ˜!È €"€€ ˜!È €"€€ ˜!È €zpº’Þu+A÷Poõº@@ô%Û<Ôî$ºäU ƒ†ŽÆt‹7 4óÑ~í¾øKú“ÁŇ@@t%ÓÍæv·ëC8º¤ÿÁàŠ‡@@ ôýZ%DmÀhv'W €À™@ê·5€Ý ­~i¸I;°»âaA£ö‹Á+DŒ/ ‡#@ Auòÿ¶6ƒ%\ÖY!€q7ä)å™ùØ×ã­Àš­ÀÀYÀÄSöåŸ(dÀØsöe&€ÀIÀ@fùtbºÒ$€€ ˜!È €"€€ ˜!È(,€îIûo¢ël]OMfõM6^d”ÀèklWÌ^wü«È €3—,ôàÕl+‡@ø+ó—@8–_ò¹Ž…Oo„Kü܇âFgý}m9ÌÂcæE«Þó&ðaÊ  ÕôâÊJÇ—Ì~W'gºÞùIêdêéw2lˆ()€þë oñA]\"GtIØ$“LÏÆ÷%‚rJ`Èݰxº_ /@àc”ÀpùÄo¶ZýÏ »Ò¸}`r­Åêgðð"ŸþnIì7‚øÿ£oÃBo·tÜ„K‡túãévÿÔ\”C™² ^ju7·µ~×Dcð3@¼ÔúªmêU<4Ѻ½àÁÀÌ@¼Ô†nÜoÍ”M´¶I\¾˜ˆ—Ê8€ÊüQËw@3CñR9ðÿUJÀÏÒЭó˜}a¼îÀ:¾(*9™àZµ>XQ«ïd%2Ñv:ùË_Êú(Üg\~?@ˆpžiU²­Rƒé+‰‰V>€ó+Íu `fœ}_@ˆØÀ]ƒµÑ;Yphò¹øÌ`f¦è— ¢S»xÕûX2Δ߲нÝü;ìh“)ž¨™Lm/šº_$˜™‰E`¿Ÿ*TÉÛÍ;Àä|p¢&mî¢zº€ÝïÌÌ`#HÀª» áη=àL³ ²ßê™…`ÿkD33±¬&ÂG!c>€ƒÝNÀª àxè~‹Ø œŸ©N½Ü»”þá å`äøFѪªꉽÅúþÀÜÌp¼BÀó'ßÀ‡'ú—…†þÀÜ èFìY·ù·Û \ߣÀV}Uÿöª’6ØvcØ ü³ Œõ¥þ2zJ¿Ø œ©M…£}8*ÏÂýå/¾€îìàýb+p®¶þá°Ü¨†LúGs³>€Žƒ¬g}Ûeê…þ±8? /µ>€Æ\¯ à٫Ý1R—úGsCñR«Xo«™áÚë':ìÌͧÿ#58™z¿ úÇVàüTÝîíÀK¼»Y’Æý#€¹ù¬¿‘÷"€™!€€˜™ª æã ‘ú¸§·ñßI°èÝ¿ÑÏõáOæ@Å"€Š5ÀháߟݷB ì0u¢Ý¨v>n8l6€ýðîœ;t@½9ùKxèÑÀ ¬âÚ¯Jmß/h2Q=|Øo)€¶uÝå¿ÛÀqÿú|ü°Û|k7pójÀ¨Ã¥aà­XûEß.€õ®"ûàÅ xèÑÀ 4ÿôJcÿý•~#Èöm MÒ¿‰s?ì¶À.‚~½ß®m MÔºdíŸ;s'€Þf9€U@·ø»g+°OÞpûGwî耽–h·„(¶Ú¹x¢À<`p×2p:tgâí ‡Ÿì´Àö« g÷1î_r(ñî’£OöšéYt4°áéFQ‡ÿšðVsüîü¨ûßÍŸ‹º9[èÊ7º@ïó €£þ™nºƒÀqÿØÀ;=`׿{Ô¿$€Îj!€?-õ÷û?”RÿPvá·u½Ý®ÀGX í_;4KÀêÒu½î àt%žì±@3à3kÿì¹6€ÿ¸ÿÝ~&xÏ:Àù! Às€]–Øžt#ÀvàçF€ûvƒ¹ŽˆÐo&€ÞèA»`{îjG€ûvƒ™ü(œfGhï5³èß…w#@³è{é6o+`4©´€|À›Í°_E§º`{M3¼n.`4©©þ@o3@³ Ä~u‹Ành ¸9€Ý¤&ŽC¼Ï°  ù8Hc÷¼›îºIEÛ~C Ežìðphú§º‘ŸÝfÿpªÀÛÌÐ4ËЯüs¶íM*þç@úÝEžì°@·åâÛì }W×¾€? M*ÙÆï-ò,`‡ùv›n»ãÁ˜ÀuýÛÀÑVàèc!"ÏvXXèø‹ùc èlÜ0Lj"Àû<ÜP©KRÀ­Ÿ™ØPÇžì2³pD|Õ Ž‰¿ù=åð3€6 >P, X@± €b@Å"€Š5Àx/½þÜö=÷’ÉDEßnšˆ™`øÚ‰.[KÏ%€ÞëAÓP  ŽrJ¼ßŽn2À†x·Ml¶v7¬ì—¡“Š|ÀÛl  9Ù¸¤ÿm÷hØà6pï:ÀÁpu€ÞîeAæÎ@ïòªÝ`ú…_à,^µ#t ;B8 >  X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€Š5ÀÚ{ᣀš `­= à3ͰַÊÿ¡€>ÒLãþQ@Ÿi:€u•ªl8ðf¨—\) €O0@·ìk‡~êz—‡oðæèÖýÕÕWõU+U'$€>ÂÒ°®ô—ùS5i €°0ìûg xeàÓÌ«º­Ÿ¶ýûªÔ• €O3?¬«Ð¿¯v!˜ €3?¬Íò¯výK— €ð`X1𱌿øXË#À/F€>×ÒVàPÀ¤Œ|†¥ý›~üÇ~€>Ðâ'Aš¾5ë|œÅÏ+÷S¥ª:. ðfŽýת+]Õ÷P@à#<: ²ÇC­ô×=øó4c?@»6ðþø #@@×¼K\@à#¬¦$€>ÂlMþL¯_@ƒø ÔÝrp§+ ñâÇO1Àn+p¸°+à‹<ÛÂ:Àa] €Oñp?Àøâ¶€ÀǘîYX󧆗¿âAÀ+4Å"€ŠE‹(P, X@±¢êä«N¯7øò7Ààã@ÅŠ×êÆ/ûêî?m»§uw©9ãn¯ é"€|-Ðw°?ý<:YJ¶ëQ›¾èÔý!~òv$€,ÈÚ¡6Œd,Ý:Úœ0Z8þ²´"€ƒ­ÀQøX3>  X@± €b@Å"€ŠEkøYàÆ¡c¿ gà“$œ< éð¡Ò`¿Ÿ3ðùÖ°?ËÃ>Ã``øxo _ȨÀ'u~8´ø£­Àš(P¬ñ~€z.€¬ðY&w„޾ ;B¶‡0 ò´ù£p$À§ €ŠE‹£Á(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠEk)€WÇžÿqÁð1‚öGi£2Wùù¶~Ô…øó=ûó[é›Ñ°ë_À;ð)fsöç·à­òý3¤€>Å\ÍÚþõ#À¾6€À‡˜‰™é_À¨f ð)¦[fû÷Ç0î_ÀÆøóü£š«õ¯i ø‡ø³´•»Žû×þøsì"7Õ¿ßÀG˜ àdÿì.Ñ~p¹›  ûÄGÚ¿«Ù%º[;ù›nÙÅîë2ìŸùPÈoàS̰-àϰ.€ôÀg˜ŽYÝSqÿlé€1@í©nûÇÍþøóT-À»K´ ýð1F€>€?n—h‹¢øG€ªkÞU©þ<|‚Ùšü™¾øñÀË,Ðmyñ〗™ &€>ÛÂ:@à³=ÜðÅ^f:p*xñ〗!pŠE‹(P, X@± €bÅÔáTO]wdݵàœf¸ÊêPÀ%ÔñÉc@Öf¨í©;§ýY{Ú„Ÿh1ä(]Öþ«Üé>‡þ¢ô[ú _ØGox½ÁF¨~ì €°-€Mø »án0a5Ÿ_ذÀgš`¿¸?;Ø Ú9â£pŠE‹(P, X@±ú†caÍîÙÒ_…c øœ5ø(0ä-,ëèë´ä@î&˜õ |&dE" #ÑFá'á¦>ûÛ@c>€M:$€>Íø€¨ãE`F€>ÒL›‡‹Àt@î’¡Óí î¿QÙ À‡˜`8ð_Ø ö…9$*€ŒñQ8Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(P, X@± €b@Å"€ŠE‹(–ª PJ@¡(P¬6€‡†µ~÷3=¹áµŸIL²¸I*Y9þ–™_©úÜ´ àîgø¡”°b’NR‰þ¢ ?Â×°|÷ƒX&@­Oþ‡T§žç½õàöÍ=ý“\|QÝÅ*½öU¥×^áç'~\;1#y.áy<é7̼‘ïŽ{SŸ¤œWLòÿüg믓Üÿ^˜¤ðˣ̨MòO~Òª~kèîÑ¢þ`Éß–èCœàÄ£˜5@÷62gÂUÍ8~¨}çÞÇý«\ÿ´VIÿÚ‹í•ýz½­ßzsýŽx¹˜üUvÆÇÏå¼'àäKul’Öÿü¿¬ûOIî~/ÌORøåiG€’õË>€×ZùóãÚõ¦~íiDÝ®þ’ûwOð!Ž8âÓ¼to¢KÀzâÙ™¿ÇoQ£‹›öé¶oH÷¯jÚ¹aßí×öëí×vˆgן\ÛÛÕñÕU;ôûjÿ$|AýØB»_1Iª¿Urîà$g^ªC“tþ¹»X"€ÛÞ «&)üò0Lÿ%¥“¿kÚ‘’‰Ÿ­àà•T·[_À6|w{Cцº»iÓ÷­Ôﮀ[8À¶7_@µZ+óK5œVºÛ­-ŸñŸý=Œ?¨r¿ê«ºµ—Þªç7_í$Í4Lÿî÷øú]AÝ|í `t«0§f¯ÿ†u¯¼Öéo˜J&«†?˜Ÿd{Çÿí¿þå_ÛÓÿõ_ÿåĆ¿Á’°Ÿ¤}©Òw¢š¼ÅCsük´‰tã”Ãpü^P;bµáåYÿHÃ0¡ ^ofCŽù¦ž`]wCÀÁ¢G@›=;.ÆTömùmø»ûUªº¯ãß'wÉT/—kÛ¿Ë¥ö³B©Ûè½Ó.ß´º×â´ýk߀f¦|_’‹¯º휚èßexAcûWÙþµ%VñO”jóøÕ,ðº^+³þp¡&ÊýßL ¿´þÌŽÞÒ{ØÎÖÿþ—Uÿëß¿ÿ[÷zÍ>ØÉG?š¤y©*õŒþÇ?YÿñSÓOyê¾¢u€£÷‚RÛ­z´«_žhªl4LÆ9¦da·N+÷“øçî»O^o®oîûQíèÏTp¸ÜPõ4 …ºš^Vá&ý(Àß]4¼¦/»« éŸyNIÛP‡]úåz³üR+5X‹Ýÿ†ËbæÚúz¿©&¬0wز+ö*j¹þ¹åßvT°ýÆp1€~›¹_ý´#ïûâoÒ–ÆKYãªøÄO{q’UWÀпã¼Ù¿‡ã—J(€ÿG·ð¯SÓÚÀ‰÷Bí#\|y¢©®  NW+V¶sªÚs¦s]ë?ù àµíßÍÐý~è–‡3V]}ÈÚßÂÊÐäO %¢I¸ ¹h.€ßÝ”¾Í]Ƭüv‘>¥aée"€¾iÛ+ÝÜëxùÊ.û¶Ë\*ÝŠ×\\þL£øØµ=·öoü¶hQ/ŸÀ4€QÿÚ;—ÛIDAT+E“1GÀùjÿk‡äóüóÛðÖöïçâ þ·³S æèÊö Dw^¤|ýLŽï3]¨MÒb ø7ß¿ô…VaJÑjîtv8|©ÂóUU2™å!çº`x¦ªJ¦=5ðŽG€Ã÷BÀh éÓžX9°úåñ³Lõîgd5ñò¸`¼+Ÿ ã¼tÜ“ë|ÆðÚ>úv¤úåÆì–Ýp¿±¤ý¼þ\í¬õ4ý»˜¾ë'~_¯ÀöÏwº9:Gö¿—ý+nŸá8€×[üÔÂÐ?­~úÇwï ˜<ª{Ó-Û1à%\Ü.D77;*IXùƬMÿôÕõ¯ŠR×ÔmÏÚšG½@³teú§ºñcÀþ×ÿQÿæ~Ãô8€q_+ÿBú»MF«IZº¥àþ»8)þ¦ÑÃT§›:~©Âó&œÜÁò÷;Àüïd+° _UrñC—ã÷B˜Wã¹7˜ Ó“|øòÄQMÜe2I7Œ/NG€ñ¸¯=ú>lx½Uv¨æè–»êôë·Ì¤[ hèwƒ™ àÔ˱:€nòí¯Î½]ðŽ†”a,è³¢Ñá8€íˆË†Ï ÄMI'l¦ Ø^ÔõŸ?a=`mn}«õÍ~w»vwŒ…ýÜ7+ºáf@3ý¯fпQÍÏ\ÿºo*ÕýI²”ÖijóÃÂoXúzEôÃíøwv.€kG¦€~FG³|ü ‡§S“½T“iI":¹Ù%ÚTóÿýjýwW¾z6€S÷13ôx/¨dBiž£·óðnxyâ©2=Àá¸-^Ç7^óÕîÓF€7;¬MݧZ&h—í|»Åô/X`5À*¼býËÜ¿vñoWèB•Ù^Ö<º‹ÂÿÕãV÷Ë}jh»jE‹À~ûo»x ¢í?æÂË·-`À~5 Rv‘çÖþM¡¢Gxèç¾rûúF€úÞ6ÐŒ—xiG¯¶íËaFƒÕbÇ¿ýÑ„“ß0»)ö7L ½¦7ÇÇüÛß¾ÿ]Eœ `ÿ·×ÌÂk¼`5x©pù‰Wê—yŸÿÓdÊ޼ýCœ›äÄ{¡’)¨©¿&'¹â剭NtóÐl‰Z÷a#@u­Í0,›97°ê–Í*g3êó3óçm¹÷ÛW.§ï¯lÿÜ“¦AVðÚ0Ù Ò¯ý¯´Ï_Åtû?wWþVÑÅf<\›ÍɃu€áK@ûŽë&·®±¡Nû7àÝõ¯¿p©ñoؽÿ¨_Ë®â×j"€Ó}jåúp&€ÕÄéB“—ê© (É̓N¼¢¦SPé\˜à×'`4‰á;`y8^hÎÇü° ýÛÊo6Ìß1v¸m7¸kW »Ð-ôúWË~cÁ*³äÛ«‡ ©èjôJ%‹Àæ•·KÀþïÔ]ìö€iërOhÖæMŽÝã1 ûü‡ºët3°Ýçÿjñm¼Ìe¸ŒYÆUý Õt?À*Ùí`ºøÒðǬlÍÒqV°ßÑÌmeœü ›MÜ›á$«¿ý‹é_U…¦¯x”…ñ„ç8|©¢2~|óÏ}}ÕÔ“] àÄ{¡û:~tã¹09ÉU/OÀ™wÀÖ _ø¡#À–¯‡­À~û?öî×õzõtcÁ«vÑÓý û 7‚Ät߆K&X©‹ÿ(HÔ¿*þhxÿ úþ)³ÄÚ°ûü‡J7WvÏó~¿^“ý`¦Ù)÷ýKüßL­ °ºŒ6ŽX…ë$“‹Û|ÔàÞïeÑýrD¿“ªJ¦Ûï§úá'–ÿ5~­þÖ?5¾é`ÃVÿôÓê¹`2™QP’&ÆëûÏÿýoÕÿøuºLòԪ䡎§o¾¢÷}4…ôi‡Ùºýåñ³LõîgdU%]5 Û~“µŸ8¬LÍBn¿à}ÀöÇum–¯.€Ê–P)¿JÐåï[Ûþ= `ú×Vü“…ªð{<ªÃÜ3œ `{ën7èxP–ìâí§öÿsì/îüw²g¤ý̧ºÚ½ƒ°ù k"ïÕhW¾z4PÊä‡MµÖîåÉŸŽ/_÷FXžäÿü↓ÿ»6[ƒÿ*1Émï…U“\õò¬º§U#Àn{Èpmà`éØÿŸ{ÝŠŠþ“ ÷ä»B÷»®ÜˆÞ¾¬&eÝ~06{÷¹þ…¿¨†[ÀÁ0fo+³þï>\iï§žŒ/«n”æï°îk××T²\ÛtË:öýþð]ß4ͽÛËs!½¶Ýáhq œìŽ3ùR™ä/ûÝ?×ÿôÏã ;'¹í½°j’«^ž-ôëMëÖÿÉOr0uí—ðüF}Ø+¡[§;Œ½æ`ÛŒ¨«ÉmÀ3âkúÝ «ÙwÙ=zÏ?¦ÔÒ/òø¢×0&0I9Ïœä_ÿÓù£IF€›Þ «&ùðåYýØ9Œ³p8¬án0U/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(htmldir)" DATA = $(html_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOX_BYTEORDER = @FOX_BYTEORDER@ FOX_MAJOR_VERSION = @FOX_MAJOR_VERSION@ FOX_MINOR_VERSION = @FOX_MINOR_VERSION@ FOX_PATCH_LEVEL = @FOX_PATCH_LEVEL@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_BASE_LIBS = @X_BASE_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = $(datadir)/doc/@PACKAGE@-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@/html includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = art screenshots # Human-written HTML files HTML_FILES = \ adie.html \ app.html \ calc.html \ consulting.html \ clipboard.html \ datatarget.html \ doc.html \ download.html \ doxygen.cfg \ draganddrop.html \ faq.html \ filefuncs.html \ filter.pl \ focus.html \ fonts.html \ footer.html \ foreword.html \ fox.html \ goals.html \ gpgkey.html \ guiupdate.html \ header.html \ home.html \ icons.html \ install.html \ introduction.html \ layout.html \ license.html \ menu.css \ menu.html \ messages.html \ news.html \ news1.html \ news2.html \ news3.html \ page.css \ pathfinder.html \ projects.html \ references.html \ registry.html \ rex.html \ screenshots.html \ serialization.html \ styles.css \ timers.html \ top.html \ widgets.html \ win32.html \ window.html \ xml.html # Complete documentation package html_DATA = $(HTML_FILES) EXTRA_DIST = $(html_DATA) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-htmlDATA: $(html_DATA) @$(NORMAL_INSTALL) @list='$(html_DATA)'; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done uninstall-htmlDATA: @$(NORMAL_UNINSTALL) @list='$(html_DATA)'; test -n "$(htmldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htmldir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(htmldir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-htmlDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-htmlDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-htmlDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am uninstall-htmlDATA docs: doxygen doxygen.cfg # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: fox-1.6.49/doc/styles.css0000664000175000017500000000400512130340076012127 00000000000000 BODY { } .DECORTHING { color:silver; background-color:gray; width:20px; height:100% } .SEPHOR { color:silver; background-color:#000000; height:1px; width:100%; }                .SEPVER { color:silver; background-color:#000000; width:1px; height:100% }                UL { list-style-type:square; } LI { white-space:pre; } #TOPTITLE { color: silver; background-color:black; font-family:verdana,sans-serif; font-size:10pt; font-variant:small-caps; font-weight:bolder; letter-spacing:4pt; text-align:center; }        #LOGO { color: silver; background-color: silver; font-family:verdana,sans-serif; font-size:10pt; font-variant:small-caps; font-weight:bolder; letter-spacing:4pt; text-align:right; } #MENU { color:black; background-color:#6495ED; font-family:verdana,sans-serif; font-size:10pt; font-weight:bolder; vertical-align:text-top; padding-left:5px; padding-top:20px; margin-top:0px; width:130px; height:100%; } .MENULINK { color:black; text-decoration:none; background-color:#6495ED; } .MENULINK:hover { color:silver; text-decoration:none; background-color:#6495ED; } .PAGEMENULINK { color:#6495ED; text-decoration:none; background-color:white; } .PAGEMENULINK:hover { color:#6495ED; text-decoration:underline; background-color:white; } #submenuitem { color:black; background-color:#B0C4DE; font-family:verdana,sans-serif; font-size:10pt; font-weight:normal; text-align:left; vertical-align:top; padding-left:2px; padding-top:2px; width:200px; }                #PAGETITLE { color:black; background-color:gray; font-family:verdana,sans-serif; font-size:10pt; font-variant:small-caps; font-weight:bolder; letter-spacing:4pt; text-align:left; padding-left:3pt; } .PAGE { color:black; background-color:white; font-family:times,serif; font-size:11pt; font-weight:normal; text-align:left; vertical-align:top; padding-left:10px; padding-top:10px; padding-right:10px; }        .NEWSSECTION { padding-left:30px; } DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }      fox-1.6.49/doc/guiupdate.html0000664000175000017500000004434212130340076012757 00000000000000 Documentation: Automatic GUI Updating
Documentation: Automatic GUI Updating [Remove Frame]

What is Automatic GUI Updating?

    Traditionally, Controls such as Buttons and Sliders have been used to provide notifications to the application code that a certain command is to be performed, or some value has changed.  For example, if one moves a Slider a little bit, a notification message informs the application that a new value is available; at the same time, the Slider's position will give a visual cue about the value being transmitted to the application code.

    But suppose one were to add a TextField to control the same variable.  If we type into the TextField, the new value will be transmitted to the application just fine, but since the slider was not moved, the visual position of the slider now no longer represents the value that the program is actually working with.

    Traditionally, GUI developers have solved this problem roughly like this:

    • When receiving a message from the Slider Control, the program accepts the new value, and then turns around and sets the new value in the TextField.

    • When receiving a message from the TextField, the program similarly accepts the new value from the TextField and now updates the Slider.

    The above pattern seems eminently reasonable.  Up till now, this was how it was done [although certain toolkits  didn't  make even this simple approach very easy!].

    However, now imagine a large program being implemented by several developers, and a graphical user interface that has hundreds, perhaps even thousands of Controls.   All these controls manipulate a bunch of data in the application program.
    We can see the problem with this approach: how is developer A supposed to know that the Dialog panel being designed by developer B is to reflect the new values for the variables being modified by developer A's code?  Clearly, this problem can grow  into a combinatorial nighmare.

    The GUI Updating facility implemented in FOX can largely eliminate this problem.  In a nutshell, the idea is that in FOX, the GUI Controls are bi-directional:

    • A Control can  notify  the application program to inform it that the Control has been given a new value by the user. One could call this a ``push.''

    • A Control can also interrogate the application about the current state of the application and its data structures, so that the Control may properly reflect this graphically.  This one could call a ``pull.''

    Why is this good?  Because it compartmentalizes large scale GUI design, and simplifies coding.   In the above example, developer B wouldn't even need to talk to developer A.  He would simply implement [for each Control in his Dialog panel]  not only the ``command'' messages which notify his routines about user inputs, but also the ``update'' messages by which the Controls ask for the values they should be displaying.

    Coding complexity is reduced because instead of N command messages each updating M Controls [for a total of N x M combinations], the developer would only have to implement N command messages and M update messages [just N + M combinations].  Complexity is also reduced because command handlers just perform their operation on the application data structures, and update handlers simply update the corresponding controls given the state in which they found these data structures.

    A common use of the GUI Updating mechanism is the disabling or ``graying-out'' of controls when they're not applicable under certain conditions.  For example, a Save File Button may be made unavailable when the application hasn't loaded a file yet.   Other common uses include hiding or showing of Controls in the GUI based on context or which ``mode'' an application is in.

GUI Updating Example

    An example of GUI Updating is given in the ScribbleApp program.  The ScribbleApp program allows lines to be drawn in some canvas.  To clear the canvas, the users invokes the Clear Button.  The Clear Button is to be available only when something has been scribbled; otherwise, it is to be grayed out or desensitized.  One can accomplish this in FOX as follows:

    // Construct the Clear Button
    
    new FXButton(buttonFrame,"&Clear",NULL,
                 app,ScribbleApp::ID_CLEAR,
                 FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
                 0,0,0,0,10,10,5,5);
    

    This constructs a new Button object, which will send a message ID_CLEAR to the application object (app). In the application object, we catch two message types from the Clear button:

    // Message Map for the Scribble App class
    
    FXDEFMAP(ScribbleApp) ScribbleAppMap[]={
      FXMAPFUNC(SEL_LEFTBUTTONPRESS,   ScribbleApp::ID_MOUSE,  ScribbleApp::onMouseDown),
      FXMAPFUNC(SEL_LEFTBUTTONRELEASE, ScribbleApp::ID_MOUSE,  ScribbleApp::onMouseUp),
      FXMAPFUNC(SEL_MOTION,            ScribbleApp::ID_MOUSE,  ScribbleApp::onMouseMove),
      FXMAPFUNC(SEL_COMMAND,           ScribbleApp::ID_CLEAR,  ScribbleApp::onCmdClear),
      FXMAPFUNC(SEL_UPDATE,            ScribbleApp::ID_CLEAR,  ScribbleApp::onUpdClear),
    };
    
    

    The SEL_COMMAND message indicates that the Clear button has been pressed; its action will be to clear the drawing canvas:

    // Handle the clear message
    
    long ScribbleApp::onCmdClear(FXObject*,FXSelector,void*){
      FXDC *dc=canvas->DC();
    
      // Erase the canvas
      dc->begin(canvas);
      dc->setForeground(FXRGB(255,255,255));
      dc->fillRectangle(0,0,canvas->getWidth(),canvas->getHeight());
      dc->end();
    
      dirty=0;
      return 1;
      }
    

    The SEL_UPDATE message is sent when the Clear Button updates itself.  The GUI-Update handler determines whether the Clear Button should be sensitized or not depending on whether any drawing has taken place in the canvas; this is kept track of through a flag variable dirty:

    // Handle the GUI Update from the Clear button
    long ScribbleApp::onUpdClear(FXObject* sender,FXSelector,void*){
      FXButton* button=(FXButton*)sender;
    
      // Button is available when canvas is dirty only
      dirty ? button->enable() : button->disable();
      return 1;
      }
    
    

    Note that in this case we know the origin of the message (the sender) to be of the type FXButton, so we can simply cast the sender object down to the appropriate type. In general however, we may not always know [the only thing we know is that the sender is of type FXObject].  In that a case, the GUI Update handler should send a message back to the sender. We can safely do this since all FOX objects are derived from FXObject, and FXObject's can be sent messages.  This leads to the following code:

    // Update sender
    long ScribbleApp::onUpdClear(FXObject* sender,FXSelector,void*){
      sender->handle(this,dirty ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL);
      return 1;
      }
    

    Many FOX Widgets understand the ID_ENABLE, and ID_DISABLE messages;  if however, a message is sent to a sender that doesn't, nothing bad will happen as no message handler will be associated with the message.

When is GUI Updating Performed?

    There are two sides to this question:- under what conditions can a Control be updated, and when is the updating actually done. With regard to the first part, a Control can be updated whenever it is not currently being manipulated by the user.  In other words, a Control is normally in a ``pull'' mode, in that it tries to interrogate the application to determine the value it needs to display graphically.  As soon as the user starts to manipulate the Control, it switches to a ``push'' mode, in which the Control becomes an input of new values to the application.

    As far as the second part of the question goes, the FOX library performs the GUI Updates when there isn't much else to do, that is to say, the system is about to block and wait for events from the user.  Furthermore, the GUI Updates are only performed when previous events have been dispatched and handled. This is why it is important to return 1 or 0 in your message handlers.:

    • If you return 1, the message is considered handled, and a GUI Update pass will be performed by FOX.
    • If you return 0, the message is considered unhandled, and since unhandled messages should not have changed the application's state, no GUI Update is performed.

    For increased efficiency, the system checks for new events between each GUI Update message, to prevent ``event-deafness'' for extended periods of time.  Even so, it is important to restrict your GUI Update message handlers to small routines, and to not perform any major computations in GUI Update message handlers.

Automatic Gray Out or Hide

    FOX also has the option to automatically gray out or hide certain Widgets.  Both options work very similar, and differ only visually.  When automatic grayout is in effect, the Widget will be automatically grayed out (disabled, or desensitized to user inputs), when one of the following is true:

    1. The Widget's target is NULL.
    2. The Widget's target does not handle the Widget's SEL_UPDATE message.

    Why is this useful?  If a Widget's target is an object that performs some sort of message delegation (for example, FXMDIClient and FXMDIChild do this), then the ability to handle a certain SEL_UPDATE message may depend on the delegate object that is in effect at the time the update message is sent.   If the particular delegate in effect does not handle the update message, there is no handler to make a Widget assume the correct state.

    With automatic gray out, however, the absence of a handler for the SEL_UPDATE message can be turned into an action to gray out the Widget instead.  This will keep the GUI consistent even in the absence of update message handlers.

    The automatic gray out technique is of particular significance when using MDI (Multiple Document Interface) widgets as both FXMDIClient and FXMDIChild perform message delegation.  Messages from the pulldown menus are typically sent to the FXMDIClient, and then subsequently forwarded by the FXMDIClient to the active FXMDIChild (Sometimes, there are no FXMDIChild windows, and the message can not be forwarded and then the message handler returns 0).

    As automatic gray out of Widgets will cause a gray out if no handler for the SEL_UPDATE message is found, it is imperative that the SEL_UPDATE must always be handled when the Widget should be sensitive.  The update message handler does not necessarily have to do anything, it just needs to return 1.

    To handle this common situation, FXWindow defines just such a message handler for you:  FXWindow::onUpdYes() will do nothing but show and sensitize the Widget that is the sender of the message, and return a 1.  You can simply append this to your message map as in:

      FXMAPFUNC(SEL_UPDATE,ID_MYMENU,FXWindow::onUpdYes)
    

    That will take care of it.  Of course if the update message should do something, you should write your own handler and make it return 1.

Delayed Repaint/Layout

    Procrastination is Good Thing [even though my parents always told me otherwise :-)].  The motto is the fastest thing you can do is nothing at all. Indeed, my lowly Pentium Classic can do ``nothing ''as fast as the fastest supercomputer!

    All this seems pretty obvious, but what does it mean for GUI systems?  It means we should try to avoid doing the two most expensive things that GUI systems have to do:

    1. Drawing onto the screen.  Drawing generates X protocol,  and causes context switching between client and display server, and is therefore very expensive.

    2. Layout of widgets.  Layout involves recursing up and down the Widget Tree, and computing a bunch of stuff such as sizes of List contents, etc.  In addition, layout also causes lots of stuff to be redrawn!

    So it is clear that these two are to be avoided at all cost.  Here's how FOX does this:

    1. Expose or repaint events are stacked up until the system has processed all user input events.  Moreover, exposed regions are compounded so that in most cases only one repaint is necessary.

    2. Layout is performed during the GUI Update phase; in other words, layout is delayed similarly to repainting so that only a single big layout remains to be done at the end [I believe FOX is unique in this; having scrutinized many systems, I have not found any that incorporate this feature; I think it is therefore safe to say that I invented this...].

    3. Size-caching is performed by certain [complex] Widgets to avoid potentially expensive size computations; for example, resizing a ScrollWindow does not necessarily change the size of the content.

    So how well does this all work?  It Really Rocks!  The delayed painting is important, as it prevents stacking up huge piles of expose events when for example dragging [solid-, or opaque-dragging] windows over FOX applications.  By NOT doing the unnecessary work, the system actually catches up more quickly, and never falls behind more than one repaint.

    The delayed layout is responsible for the extremely fast startup times of FOX applications.  As hundreds of Widgets are being added during construction of an application's GUI, recalculating layout after each addition really kills startup performance.
    Delayed layout benefits performance each time many GUI Widgets are added or removed, or if layout hints are changed with widespread effects.  It also makes opaque resizing [supported by a few X Window Managers] quite fast.

    Several advanced GUI systems have added special freeze/thaw semantics to temporarily suspend layout calculations.  In FOX, this feature is automatic, and application-wide in effect.

    As the delayed layout is performed as part of the GUI Update process, GUI Update message handlers should avoid making changes to Controls that could cause layout computation, as these changes will not be handled till the next GUI Update cycle.

    One more speed-feature related to use of Brian Paul's excellent Mesa graphics library.  With Mesa, double buffering is implemented using a software backbuffer.  Thus, after having drawn this back buffer,  an expose event can repaint the dirty area simply by blitting back this back buffer, instead of re-rendering OpenGL commands [which can be very expensive indeed!].

    Hence, FOX distinguishes between ``synthetic'' repaint events and ``non-synthetic'' ones.  Synthetic expose events are those that originate from within the application.  When receiving a synthetic expose event, the OpenGL will have to be regenerated; for non-synthetic expose events, the back buffer can be blitted back.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/pathfinder.html0000664000175000017500000001003112130340076013100 00000000000000 FOX-Toolkit
FOX Toolkit
 
PathFinder
 
     
  Home
News
Download
License
Goals & Approach
Documentation
FAQ
FXRex
Screenshots

Adie
PathFinder
FOX Calculator

Projects

FXPy
FXRuby
EiffelFox
Japanese Docs

 

Under Construction...
   
     
 
Copyright 1997-2005 Jeroen van der Zijp
fox-1.6.49/doc/serialization.html0000664000175000017500000004141312130340076013641 00000000000000 Documentation: Serialization of Data and Objects
Documentation: Serialization of Data and Objects [Remove Frame]

    Often, your application needs to save and load data in a machine-independent, binary format.  This data may be very simple, such as an array of numbers, or it may be a complex networks of objects arranged in some application-defined data structure.

    FOX offers some tools to make implementation of such basic save and load facilities in an application fairly straighforward: Serialization and Deserialization.   Serialization refers to the process of taking a network of objects and their member data, and turning it into a linear byte stream; deserialization of course refers to the opposite.  This process is also sometimes referred to as streaming, flattening, or more prosaically, pickling.

    The FXStream classes support streaming of objects and data in a type-safe and architecture-neutral manner;  this means that a) your data will be read in the way you wrote it out, and b) streaming works as efficient on little-endian machines as it does on big-endian ones:- there is no byte-order preference.

    The FXStream class are extremely flexible, in that you may subclass them ad libitum to implement esoteric applications ranging from compression to encryption, BSD sockets, UNIX pipes,  clipboard, drag & drop, and what have you.  Code you write to serialize your data may be reused to perform any of these functions simply by substituting the FXStream class upon which they operate.

    Once code for an object's serialization has been written, this streaming capability can be used for a variety of purposes:
     

    • Saving or loading from files, in a machine-independent manner.
    • Saving into memory buffers, or loading back from memory buffers.
    • Loading of resources compiled into the application using reswrap.
    • Exchanging objects and data between applications using Drag and Drop techniques.
    • Just counting the bytes, e.g. to determine buffer sizes.
    • Transfer objects and data over the network, e.g. via sockets, pipes, PVM, MPI, etc.

Philosophy in FOX Serialization

    The FOX Stream classes have been designed with a number of goals in mind:

    • Speed.  The serialization and deserialization should be very fast.  Thus, a minimal amount of computing overhead is required; also, I/O should be minimized.
    •  
    • Flexibility.  At some small expense in speed, all I/O eventually boils down to a few basic virtual I/O functions; thus, it is possible to derive subclasses and serialize data into byte streams with different destinations or sources:- not just files, but also memory buffers, sockets, or perhaps shared memory segments or mapped files.
    •  
    • Type Safety.  In order to make sure that the number of bytes saved exactly matches the number of bytes loaded, all stream insertion/extraction operators are defined for all basic machine types, and these types are guaranteed to be the same size on all FOX implementations.
    •  
    • Byte Swapping.  Since the types are known, the FOX Stream class is able to swap bytes upon stream deserialization.  The FOX Stream can swap bytes on saving, but also on loading.  Most often, however, swapping should be done only when loading, because:
    •  
      • It is faster to serialize in a machine-natural order, so that as long as one works on machines of the same architecture, no cost is incurred with swapping bytes at all.  Loading and saving on the same type of machine is expected to be a very, very common case.
      •  
      • By byte swapping on the receiving end, an in-situ swap can be performed, which will lead to much better caching, and eliminates the need to temporary buffers etc.
      •  
    • Predictability.  With the exception of serialization of FOX Objects, the FOX Stream class serializes exactly as many bytes as it is given by the application.  This has a number of interesting benefits:- for example, the FOX GIF Image loading routine works based on a FOX Stream, permitting it to read both from files as well as from memory data arrays; this makes handling of compiled-in or embedded resources (e.g. by using reswrap) very simple indeed.
    •  
    • Future expansion.  An escape tag is prepended for serialized FOX Objects.  This will in the [near] future allow deserialization of FOX Objects that are available in dynamic link libraries (DLL's). Currently, FOX can only deserialize objects that have been compiled into the application code.

So How Does It Work?

    From the application programmer's point of view, it works very simply:
    FXuint data[100],numdata;

    // Save my stuff to a stream
    void savemystuff(FXStream& stream){
    stream << numdata; // Save the number of data values
    stream.save(data,numdata); // Save the data
    }


    // Save stuff to a FILE stream
    FXFileStream stream;
    stream.open("datafile.dat",FXStreamSave);
    savemystuff(stream);
    stream.close();

    As you see, this is pretty simple. Note that the code fragment doing the actual serialization does not depend on the type of FXStream being used; I recommend simply passing in an FXStream&, so that the same code may be used to serialize to FXFileStreams, FXMemoryStreams or other stream classes as yet to be invented.

    From the stream's point of view, things are a bit more complicated. Saving basic types (FXchar, FXshort, etc) into an FXStream is done by tradional C++ insertion and extraction operators << and >>.
    Note that all operators take a reference, rather than a value. If we would save a value, regular C++ type promotions might be silenty invoked, and more bytes might be saved than expected;  by taking reference arguments, one has to first store a value into a variable of known type, then call the insertion operator.

    For arrays of basic types, the FXStream class supplies a few regular member functions called save() and load(), one for each basic type.  Note that FOX also supports a type FXlong; FXlong is always 64 bits, or 8 bytes. 

    For objects, things are a more complex. A network of objects can be saved into a stream, and should be restored upon a load. Of course, upon load not all objects will occupy the same address as where they were initially stored from, so pointer-values can not be simpy stored in the stream:- a translation is necessary.
    Also, objects may refer to each other, that is to say, the program's data structures may have circular references.
    Thus, care must be taken to ensure that each object will be saved only once.

    FOX currently implements the object save by means of a hash table to translate object pointers into reference numbers and vice versa. In a nutshell, here's how it works:

    To save an object-pointer to the stream:
    1. If the pointer is NULL, save the speciall null tag.

    2. Consult the hash table to see if the object pointer has been saved before.  If the object has been encountered previously, its data must already have been saved, and the reference tag found in the hash table is saved to the stream.

    3. If the object has never been encountered before, generate a new reference tag, and add the object pointer and the reference tag to the hash table. Subsequently, a class tag, an escape code [0 for now], and the object's class name is saved to the stream. Then the object's member data are saved by calling the object's overloaded save() member function.

    To load an object-pointer from the stream:

    1. Read the tag. If the tag was the null tag, the pointer was NULL, and a NULL is returned.

    2. If the tag was the reference tag, the object has already been loaded, and the hash table is consulted to return the object-pointer.

    3. If the tag was the class tag, the escape tag is read and [for now] discarded, and subsequently the classname is read. The FXMetaClass is localized from the class name, and a new object is constructed by means of its makeInstance() function. The a new reference number is generated and the reference number and the object-pointer are stored into the hash table. Then the object member data are loaded by calling the object's overloaded load() member function.

    In the current implementation, only those objects whose implementation has been compiled into the application can be [de-] serialized.

    Future versions of FOX will use the escape code information for additional methods to localize the FXMetaClass objects.  In particular, the thinking is that certain object-implementations may live in DLL's (Dynamic Link Libraries) and the escape code will help localize the DLL and pull it in to provide the object implementation.  It is clear that this will be a very powerful mechanism, enabling for example drag and drop of objects whose implementations are not a-priori known at the time the application is compiled.

    I added the escape code so as to not break people's streamed object files when this capability will be introduced.

Future FOX uses of Serialization

    Serialization is not only intended for features such as saving/restoring from files, and drag-and-drop of objects.  Future versions of FOX will also allow FOX GUI Widgets to be serialized or deserialized; in fact, it is with this in mind that the two-step [Construct/Create] sequence is so religiously carried out throughout the Library. Once FOX Widgets have been deserialized from either an external file or perhaps from a compiled-in [reswrapped] resource, a GUI can be created in one fell swoop with a single call to FXApp::create().

    A FOX GUI Builder will be a program that builds a nice-looking GUI, and then serializes it for incorporation into an application [using reswrap].  Using the escape-code mechanism, the FOX GUI builder will be able to build GUI's that contain Custom Controls or Widgets written by third parties.

Tips and Hints for Serialization: Byte Swapping

    Proper use of the serialization mechanism will allow serialized data to be read across different machines, with different byte orders.  In the scope of ``predictability,'' FOX's stream mechanism does NOT contain any tags or markers, nor does it contain things like byte order and such, with the exception of course being the saving of object-pointers.

    It does however try to help:

    FXbool FXStream::isBigEndian();

    returns TRUE if the stream is set to big-endian mode, i.e. items are loaded or saved in most-significant byte first order.  The default is determined by the host machine; architectures like x86 are least significant byte first, and architectures like MIPS are most significant byte first.
    Note that FXbool is defined as FXuchar, NOT as C++ bool.  [I've never been able to find a statement that says how big the standard type bool is, but I'm pretty sure a char is 1 byte!].

    Thus, the following chunk of code may be executed before saving any actual application data:

    FXbool endianness=FXStream::isBigEndian();
    stream << endianness;
    ....
    save the data
    ....

    Then upon loading:

    FXbool endianness;
    stream >> endianness;
    stream.setBigEndian(endianness);
    ....
    load the data
    ....

    In other words, the bytes are swapped on input, if and only if the byte order of the saving application differs from the loading one.

Tips and Hints for Serialization: Container Object

    Many applications have one so-called container object, which may not itself participate in serialization for one reason or another.  For example, the FOX FXApp object is normally created by the main startup routine of an application, and will probably never be serialized [although its member data may be].

    In order to accomodate references to such an object without saving it, the FXStream class allows you to specify a container object.  During serialization, when a pointer to the container object is encountered, only a reference tag is saved to the stream; likewise, on deserialization a reference to the container object is translated into the pointer passed in with the FXStream constructor.

Tips and Hints for Serialization: Use FX Types

    FOX defines a number of typedefs for the basic types, such as FXchar, FXshort, and so on.  The idea is that the size of these types is fixed, and the same on all implementations; there is an FXASSERT somewhere that will trip if this is not true.

    Writing applications that should work on heterogeneous mixes of hardware becomes simpler if variables you intend to serialize are defined in terms of these basic types; for loop variables and such ephemeral things, you may want to use the ``suggested'' system-specific types, as these may be faster.

    The type FXlong may NOT be natively supported on all platforms.  It represents a 64 bit integer type.  Usage of this type may be slower than the regular 32 bit integer types, unless you have a 64 bit computer like x86-64 or ALPHA.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/home.html0000664000175000017500000001622012130340076011712 00000000000000 Home
Welcome to FOX

What is FOX?

    FOX is a C++ based Toolkit for developing Graphical User Interfaces easily and effectively. It offers a wide, and growing, collection of Controls, and provides state of the art facilities such as drag and drop, selection, as well as OpenGL widgets for 3D graphical manipulation. FOX also implements icons, images, and user-convenience features such as status line help, and tooltips. Tooltips may even be used for 3D objects!

    Considerable importance has been placed on making FOX one of the fastest toolkits around, and to minimize memory use:- FOX uses a number of techniques to speed up drawing and spatial layout of the GUI. Memory is conserved by allowing programmers to create and destroy GUI elements on the fly.

    Even though FOX offers a large collection of Controls already, FOX leverages C++ to allow programmers to easily build additional Controls and GUI elements, simply by taking existing controls, and creating a derived class which simply adds or redefines the desired behavior.

    One of the prime design goals of FOX is the ease of programming; thus, most controls can be created using a single line of C++ code; most parameters have sensible default values, so that they may be omitted, and layout managers ensure that designers of GUI's do not have to worry about precise alignments.

    Another nice feature of FOX which significantly reduces the number of lines of code which have to be written is FOX's ability to have widgets connect to each other, and passing certain commands between them; for example, a menu entry Hide Toolbar can be directly connected to the Toolbar, and cause it to hide.

    Finally, FOX makes it easy to maintain the state of the GUI in an application by having the GUI elements automatically updating themselves by interrogating the application's state. This feature eliminates the large amount of effort that may go into sensitizing, graying out, checking/unchecking etc. depending on the application state.

FOX is Platform Independence!

    The list of platforms is growing! Currently, we have FOX running on a large number of operating systems, ranging from Linux, FreeBSD, SGI IRIX, HP-UX, IBM AIX, SUN Solaris, DEC/Compaq Tru64 UNIX, to MS-Window operating systems like Windows 9x, Windows NT, Windows ME and Windows 2000. Since most of the FOX implementation is completely oblivious to the underlying platform (in many cases it is not even including header files), applications work virtually identically on all these platforms.

    For example, here is the FOX textedit sample application running under Windows NT.  And here is the same application running on a Silicon Graphics Octane system.

Support & Mailing Lists

    We now have two mailing lists:

    Announce List

      The announce list is a low-traffic list on which new releases of various software based on FOX will be announced, including new releases of the library itself. Discussions on various topics however should preferably take place in the users list, to prevent swamping people's mailboxes. To subscribe, send a mail to foxgui-announce-request@lists.sourceforge.net with the word subscribe in the message body, or fill out a web-based subscription form.

    Users List

      The users list is intended for discussion on various FOX topics between developers and/or users of the FOX library or applications based on it. If you have questions, feel free to post your questions here, as many people [including myself] are only too happy to answer them. To subscribe, send a mail to foxgui-users-request@lists.sourceforge.net with the word subscribe in the message body, or fill out a web-based subscription form.

    We recommend at least subscribing to the announce list to stay abreast of new releases of the library and applications.

    The announce list is being archived by GeoCrawler, and the discussion list is there also. This facility was provided automatically be switching over to Source Forge. The old FOX mailing list has been archived at: Yahoo and at eScribe. This has been set up by Thomas Jordan.
    FOX project pages are provided at the FOX Source Forge web site.

Copyright © 1997-2005 Jeroen van der Zijp

fox-1.6.49/doc/projects.html0000664000175000017500000005165112130340076012622 00000000000000 Projects
Applications and Projects Using FOX [Remove Frame]

    Below follows a list of commercial applications and projects using the FOX toolkit, with links to the companies or organizations.

Commercial Applications using FOX

  • XTC is short for X-Windows Test Control and is the graphical user interface for the Intel(r) Modular Test Architecture for Linux(tm). XTC was designed for Intel board/system manufacturing and validation.

    XTC was developed by Daniel K. Osawa for Intel Corporation's Enterprise Products Group.

  • LinkCAD is a commercial format-conversion application for various CAD formats, written using FOX.
  • Royal Boskalis Westminster nv is an international service company active in the area of maritime infrastructure. Its core activities include the construction and maintenance of harbors and waterways, the creation of land in water, coastal defenses and  offshore services. Boskalis has operations in over 50 countries in five continents. The company has a large and varied fleet of some 300 vessels. Boskalis has a turnover of over one billion euro and employs over 3000 people.

    The fleet automation within Boskalis has been implemented on networked workstations running Linux/X11. All User interfaces (operator consoles, navigation displays, real-time data monitors, data processing and visualization) are FOX-based.

  • TMP Vision® and SLIM were designed to meet the demanding needs of engineers analyzing complex FEA models.
    For over 16 years, these tools and their predecessors have played an increasingly important role in the visualization, interpretation and documentation of finite element models.
    Today TMP Vision® and SLIM are a key part of the Lockheed Martin Aeronautics FEA analysis process and have been used in the support of many aircraft programs including the F-16, F-22, C-5 and Joint Strike Fighter. BAE Systems and Northrop Grumman are also using these tools as a part of the JSF program.
  • BRASMAP Sistemas has created software for Data Acquisition System for Power Generation called AQX.
    The application of the AQX - Data Acquisition System seeks to meet the needs of the Control Engineer in performing its duties, in field or laboratory. It is turned mainly to the application in the area of power generation control, offering a series of facilities for monitoring, recording and analyses of magnitudes associated to the equipment and control system.

    It allows to establish an efficient work cycle to perform tests and studies.

  • Lennox Antoine has written a Scene Graph Navigator. It features:

    • Supports over 20+ raster and vector formats.
    • Supports near infinite size rasters/heightmaps.
    • Spherical/Ortho/Perspective(first person) rendering styles built in.
    • Accuracy. Every thing is accurate. Approaching from outer space down to meter/feet range goes unnoticeable and seamlessly. Rasters are also draped onto terrain accurately (not stretched) no matter what size the terrain is.
    • Completely cross platform. From the GUI (thanks to FOX) to the scenegraph workings, it should work on any platform out there.
    • Advanced Raster Support. Rasters can be drawn on in realtime or re-used for other things.
    • Powerful WYSIWYG editing approach. Almost everything is editable in a nice user friendly way.
    • Procedural full detail buildings. No longer just a wall with a texture on it. Balconies, extremeties, windows, etc... are all rendered as well.

  • Arachno Ruby/Python/PHP IDE This is a complete IDE for the three languages, that is has special features for developing web based applications like automatic setup of an isolated webserver,application server environment. It has more then 100 dialog windows (most of them for editing HTML targets) and uses FOX via an Eiffel wrapper.
  • VORHour is a timecard/hour registration program developed and used by VORtech. It is written using FOX and is connected via ODBC to a local MySQL Database.
  • While at CFD Research Corp., the author worked on CFD-VIEW, a visualization and postprocessing package for Computational Fluid Dynamics results. The picture shows a streamline rake over a multi-zone, tetrahedral unstructured mesh of our favorite mascot, Tux.

    CFD Research Corp. offers a number of software packages for Computational Fluid Dynamics, Micro-Electro-Mechanical Systems [MEMS], Semi Conductor Processing, Bio-Medical applications, and other engineering applications.

  • The Side-by-Side Viewer is a tool developed by AcuSoft to allow easy exploration and examination of SEDRIS transmittals, as well as other formats, such as:

    • OpenFlight (FLT)
    • Performer Binary (PFB)
    • Compact Terrain Database (CTDB)
    • Digital Terrain Elevation Data (DTED)

    Side-by-Side also has the capability of displaying multiple databases simultaneously, simplifying the process of finding discrepancies amongst different formats of the same database.

    For more screenshots see: http://www.acusoft.com/products/sbs/gallery.html

  • CIMPLEST CAPE Workbench is a commercial application developed by Cimplest Inc. to support Computer Aided Production Engineering (CAPE).
    This application provides an easy to use graphical environment within which a production engineer can rapidly develop models of manufacturing systems. The following design and analysis activities are supported: materials requirements analysis, work load analysis, optimal resource capacity allocation, dynamic lead time analysis, production/part cost analysis, production scheduling, standard work design, facilities layout design, process similarity analysis (group technology). Add-on modules provide additional capabilities: the Performance Explorer module adds Design of Experiments (DOE) capabilities for parameter sensitivity analysis; the Performance Optimizer module adds Simulated Annealing (SA) based lead time and production cost optimization capabilities; the ODBC Data Access module provides the capability to create user defined scripts for accessing enterprise data sources; and the WebDAV module provides the capability to publish and share Cimplest models in a secure and distributed fashion.
    The upcoming Apache web server module mod_cimplest will enable Cimplest models developed within the workbench application to be updated with data feeds from shop floor monitoring systems and will target real time scheduling and supply chain integration efforts.


Other Projects using FOX

  • Open Space Openspace is powerful, flexible, and utterly configurable file manager. Some of the main features of Openspace are: support for two panel view and single panel view, graphically configurable,powerful file recognition system allows you to configure how files of different types are shown (with colors and icons), and what happens when you doubleclick them, option for automatic configutation after first run, extensibility, two types of plugins, Drag and Drop support compatible with KDE and GNOME applications, fast, thumbnails support, very fast and comfortable moving through directories, three icon-display modes: big icons, small icons and details.
    • Perpetual Diary This program is, as its name suggests, a diary that will be usable for years to come. It displays one month at a time and includes the day name as well as the date. You can add as many entries as you want to each day and you can select the colour of the text and background for each entry. A diary entry can be marked as an annual event, that is an event that occurs on the same date each year, so that you need only enter such things as birthdays or anniversaries once. You can print one month or a range of months.
    • The Image Debugger is a programmer's utility to make debugging of Win32 applications that use images and grid data easier. Examples of such applications include 3D games and visualization applications, as well as grid-based numerical PDE simulation codes. The Image Debugger could even conceivably be used to debug dense matrices.
    • FRED is an experimental event display based on the HepRep protocol and mainly inspired by WIRED; it is programmed in the Ruby language ad it uses a Ruby port of the fantastic FOX Toolkit library for GUI.
      FRED and CMT are being developed by Riccardo Giannitrapani and Marco Frailis at the Udine Department of Physics as a part of the NASA GLAST (Gamma Ray Large Area Space Telescope) experiment.
    • CLView an assembly file viewer.
      This is a graphical, interactive tool for inspecting the ACE format assembly files generated by CAP3 or phrap. Beasides the ACE files, the program also supports a custom cluster layout format for the overview of a possible multiple alignments generated just from pairwise alignments, where no detailed nucleotide level alignment is needed and provided. The "containment clustering" program (nrcl) mentioned in the TGI Clustering tools (TGICL) above can generate such a "cluster layout" file (*.lyt). Here is a precompiled linux version with the required dynamic FOX library included: clview_linux_i386.tar.gz The program was built using the FOX toolkit by Jeroen van der Zijp, a portable and feature-rich C++ framework for developing graphical user interfaces under Unix and Windows. In order to compile the source code of this viewer, you need to download the FOX library and the TGI C++ class library aims to be a stable, open source, and graphical audio file editor primarily for but not limited to the Linux operating system.
    • Computer Simulations in Physics comprises a number of physics simulation programs written by Maciej Matyka using the FOX Library for the user interface:

    • The Adie Text Editor is a nice little program for editing and viewing files; it comes standard with the FOX distribution.
    • The FOX Calculator is a fully desktop calculator and also a good example of FOX programming in general. The FOX Calculator is a scientific calculator with many handy features added for programmers.
    • Goggles is a GUI-frontend for the Ogle DVD player developed by Sander Jansen.
    • ReZound aims to be a stable, open source, and graphical audio file editor primarily for but not limited to the Linux operating system.
    • Octex, a 3D Paint Program by Thrown Clear Productions.
    • PSReg (Parallel Simultaneous Registration). Very interesting.
    • CASP is a tool to image analysis in comet assay. CASP has been developed to work with either color, or gray-scale images of fluorescence-stained comets saved in TIF format.

    • Martin Welch is working on a very nice Dialog Editor for FOX. Here is a screen shot of his GUI builder running under Windows 2000; and another screenshot of the program running under Linux.
    • This picture shows FOX being used in a PC board design application. It highlights the use of the FXTreeList widget (on the left), the FXShutter widget (on the right) and the OpenGL FXGLViewer widgets, as well as the Multiple Document Interface Widgets (center).
    • Another FOX application being developed by Davin S. Hills is a RedHat Package (RPM) viewer and manipulation program; download it from his site.
      Check out the May 2000 issue of Linux Journal sporting an article Cooking with Linux: Rapid Program-Delivery Morsels, RPM by Marcel Gagne which features his FOX-based RPM package builder!
    • Another ongoing project is FOX Pilot. FOX Pilot is a FOX-based Interactive GUI Builder and its being developed by celer@scrypt.net.
    • PathFinder is my own attempt at making a File Manager. It features file mime-type bindings, customizable file- and directory icons, directory bookmarking, drag and drop (compatible with KDE and GNOME), and wildcard matching to reduce the number of visible files. It is probably the fastest file manager you've ever seen.
    • Dustin Graves is developing a number of very nice FOX projects, among which another FOX-based calculator; you can find them on his web page.
    • A suite of FOX Desktop applets is being developed by Josua Groeger. The first applets being undertaken are Control Panels to set various desktop-wide resources for FOX-based applications.

    • EMSO a Computer Aided Process Engineering (CAPE) tool for dynamic and steady-state modeling, simulation and optimization of general processes. EMSO is a graphical environment where the user can model complex dynamic or steady-state processes by simply selecting and connecting model blocks.
      In addition, the user can develop new models using the EMSO modeling language or use those already made from the EMSO Model Library - EML.
      EML is an open source library of models written in the EMSO modeling language. The EMSO modeling language is an object-oriented language for modeling general dynamic or steady-state processes.

    FOX Language Bindings

    • FXPy is the Python language binding to FOX. It is being developed by Lyle Johnson, who is also responsible to a large degree for the Windows 95/98/NT port of FOX. FXPy is being regularly updated to incorporate the latest features in the FOX toolkit.

    • FXRuby is the Ruby language binding to FOX. This is also being developed by Lyle Johnson.

    • EiffelFox is an Eiffel Language binding for the FOX Library has been developed by Darren Hiebert, who is also responsible for the Exuberant CTags package.

    FOX Extensions

    • FXScintilla is a FOX implementation of the Scintilla source code editing component.
    • FXEX is an extension library for the FOX toolkit.
    • FXvt is a virtual terminal FOX widget derivated from the well known.
    • FXBasketListBox is an extended FXListBox that allows you to select several items from the ListBox.
    If you want your FOX based application to be featured here, or need to update the above information, please mail me and I'll update this page!

    Copyright © 1997-2005 Jeroen van der Zijp

    fox-1.6.49/doc/rex.html0000664000175000017500000007523212130340076011570 00000000000000 fox-toolkit.org - Documentation: Regular Expressions
    Documentation: Regular Expressions [Remove Frame]

    What are Regular Expressions?

      Regular Expressions are used to search strings for certain patterns. For example, in a text editor you might want to search for the pattern "widgets?". This pattern will match occurrances of the word "widget" or "widgets" in the text.
      Thus, a regular expression matching facility is a necessity for writing programs which perform text searches, syntax coloring, and so on.

    Anatomy of Regular Expressions

      A regular expression is comprised of one or more branches separated by a "|". Each branch is made up of a sequence of pieces, and each piece is an atom optionally followed by a repetition.

      Atoms are the simplest element in a regular expression. The simplest atoms are individual letters. For example, the letter "a" is an atom, and it matches a letter "a" in the subject string.
      Another kind of atom is the character class, which is simply a set of characters; for example, the atom "[abcdefg]" matches one of {a,b,c,d,e,f,g} in the subject string. Thus, "[abcdefg]" matches "a" or "g" but not "q".
      As a shorthand, you can identify a bunch of characters by a character range, as in "[a-z]" which is automatically translated into "[abcdefghijklmnopqrstuvwxyz]". You can see this is a lot shorter.

      You can also simply negate the set using "^"; thus "[^a]" matches any character, EXCEPT the "a". To include the "]" character itself it must be used as the first character after the "[". To include the "-" itself it must be the first character after the "[", the second character of the range, or the character just before the "]".

      You can embed control characters by the usual C conventions: \t for TAB, \n for NEWLINE, and so on. Or you can use the control-character notation, like \cH for ^H or BACKSPACE.
      Other characters may be entered by octal or hexadecimal notation: \0 for octal 0, and \xff for 0xff or decimal 255 (all 256 possible characters are legal in the subject string, FXRex does not treat any character specially, not even the end-of-string character).

      Repetitions may optionally follow an atom, making a piece. For example, "a*" matches "", "a", "aa", and so on. The "*" operator matches zero or more occurrences. There are also several other repetition operators. The "+" operator matches one or more occurrences, and the "?" matches zero or one occurrence.

      Finally, there is also a way to match a bounded number of occurrences. For example, "a{3}" matches "aaa", while "a{0,3}" matches "", "a", "aa", and "aaa", but not "aaaa".
      The general form of the bounded repetition is "a{n,m}" and this matches at least n but no more than m occurrences of the preceding atom. For convenience, we allow omission of the n or the m; thus, "a{,m}" becomes equivalent to "a{0,m}", and "a{n,}" becomes equivalent to "a{n,infinite}". The special form "a{n}" is equivalent to "a{n,n}".

      Repetitions may be greedy or lazy. Greedy repetitions are the default; greedy repetitions will try to match as many characters as possible, whereas lazy repetitions will try to match as few as possible. You can indicate a lazy repetition by appending a "?". So "a*?" is the lazy equivalent of "a*", "a??" the lazy equivalent of "a?", and "a{2,5}?" that of "a{2,5}".

      A sequence of pieces makes up one branch. Several branches may be separated by a "|", and these become alternatives. For example, the pattern "ac|dc" matches "ac", or "dc".

      Precedence rules are such that repetitions bind more strongly than sequencing, so that "ab*" matches a single "a" followed by zero or more "b"'s. Conversely, the "|" operator is the weakest, making the pattern "a|b*" match either a single "a", or a sequence of zero or more "b"'s. Explicit use of parentheses allows other precedences: "(a|b)*" is a sequence of zero or more characters, each either "a" or "b", i.e. the same as "[ab]*".

      FXRex, like PERL, offers a more convenient way to specify certain frequent character classes; they are also faster to use when matching. For example, "\s" matches any whitespace, "\S" matches anything other than whitespace. The "\d" matches any digit, and is equivalent to "[0-9]".
      Of course, "\D" is equivalent to "[^0-9]". The "\l" matches any letter like "[a-zA-Z]", and "\L" any non-letter. "\w" matches any word character and is equivalent to "[a-zA-Z_0-9]". See the table below for a full list.
      You can use these character set shortcuts inside a character class; for example, "[\dA-Fa-f]" is equivalent to "[0-9A-Fa-f]", which could actually also be done more compactly by "\h" (hexdigits).

      Assertions provide a way to match without consuming any characters. You are probably familiar with "^", which matches the begin of the line, and "$", which matches the end of the line. FXRex also provides a few additional assertions: "\<" matches word begin, i.e. a character position such that the previous character matches \W and the following character matches with \w. Likewise "\>" matches a word end. The "\b" and "\B" match word boundary and word interior, respectively. Note that the backspace character may be entered as \cH or \x8.

      The ultimate in assertions is the so-called positive or negative look-ahead. Lookahead effectively provides for arbitrarily complex positive or negative assertions. Unless you're familiar with PERL, you may not have seen certain features before. First, FXRex supports additional zero-width assertions [Zero width assertions are points in the recognition phase of a pattern where a match can pass or fail without consuming characters from the subject string].

      The "(?= ... )" and "(?! ... )" syntax is used for positive and negative look ahead, respectively. For example "fred(?!erick)" will match "fred" and "freddy", but not "frederick".

      Jeffrey Friedl wrote what is now the standard work on regular expressions, see Mastering Regular Expressions. This book is recommended for further background on Regular Expressions.

    Regular Expression Grammar

      FXRex accepts patterns with the following grammar:
       
      expression::=branch { "|" branch }*
      branch::={ piece }*
      piece::=atom [ rep ]
      rep::=( "*" | "+" | "?" | counts ) [ "?" ]
      counts::="{" digits ["," [ digits] ] "}"
      atom::="(" expression ")" | "[" [^] range "]" | characters
      range::=character | character "-" character
      characters::={ character }*
      digits::={ digit }*

      When parsing a pattern FXRex first performs a grammar check, and measures the resulting regex code. Subsequently it generates the pattern code. FXRex returns immediately when the syntax is found to be incorrect, and returns an appropriate error code.

    Matching Operators

      FXRex supports the following matching operators:
       

      Basics
      |Alternation.
      ( ... )Grouping sub pattern.
      (?i ... )Match sub pattern case insensitive.
      (?I ... )Match sub pattern case sensitive.
      (?n ... )Match sub pattern with newlines.
      (?N ... )Match sub pattern with no newlines.
      (?: ... )Non-capturing parentheses.
      [ ... ]Character class.
      [^ ... ]Negated character class.

      Greedy Repetitions
      *Match 0 or more.
      +Match 1 or more.
      ?Match 0 or 1.
      {}Match 0 or more.
      {n}Match n times.
      {,m}Match no more than m times.
      {n,}Match n or more.
      {n,m}Match at least n but no more than m times.

      Lazy Repetitions
      *?Match 0 or more.
      +?Match 1 or more.
      ??Match 0 or 1.
      {}?Match 0 or more times.
      {n}?Match n times.
      {,m}?Match no more than m times.
      {n,}?Match n or more.
      {n,m}?Match at least n but no more than m times.

      Special Characters
      \aAlarm, bell.
      \eEscape character.
      \tTab.
      \fForm feed.
      \nNewline.
      \rReturn.
      \vVertical tab.
      \cxControl character.
      \033Octal.
      \x1bHex.

      Character Types
      .Match any character.
      \wWord character [a-zA-Z_0-9].
      \WNon-word character.
      \lLetter [a-zA-Z].
      \LNon-letter.
      \sSpace.
      \SNon-space.
      \dDigit [0-9].
      \DNon-digit.
      \hHex digit [0-9a-fA-F].
      \HNon-hex digit.
      \uSingle uppercase character.
      \USingle lowercase character.
      \pPunctuation (not including '_').
      \PNon punctuation.

      Zero Width Assertions
      ^Match begin of line [if at begin of pattern].
      $Match end of line [if at end of pattern].
      \<Begin of word.
      \>End of word.
      \bWord boundary.
      \BWord interior.
      \AMatch only beginning of string.
      \ZMatch only and end of string.
      (?= ... )Positive lookahead.
      (?! ... )Negative lookahead.

      Other
      \1 ... \9Back reference.

    The FXRex Class

      The FXRex class is geared toward ultimate convenience:- simple things should be simple. When you're interested in syntax errors, you can obtain the error code returned by the parser. Otherwise, the compiled pattern will simply be set to the empty (fallback) pattern. The fallback pattern will always fail to match.

      FXRex contains the following member functions:


      FXRex()

      The default constructor initializes FXRex to the fallback or empty pattern.


      FXRex(const FXRex& orig)

      The copy constructor initializes FXRex to the a copy of the original pattern.


      FXRex(const FXchar* pattern,FXint mode=REX_NORMAL,FXRexError* error=NULL)

      Parse the given pattern by calling parse. If the parameter error is not NULL, the return code of the parse will be assigned to its contents; this code will be set to REGERR_OK if the parse succeeded, or some error code if it failed.


      FXRex(const FXString& pattern,FXint mode=REX_NORMAL,FXRexError* error=NULL)

      Same as above, only taking an FXString as argument.


      FXRex& operator=(const FXRex& orig)

      Assigns the compiled pattern of orig into this FXRex.


      FXbool empty()

      Returns TRUE if the pattern is empty, i.e. equal to the fallback pattern which matches nothing.


      FXRexError parse(const FXchar* pattern,FXint mode=REX_NORMAL)

      Parse the given pattern, returning REGERR_OK if successful, and an error code if a syntax error has been detected. The mode parameter is the bitwise OR of some flags which control various aspects of the regular expression code being generated:
      • REX_NORMAL. This is the default; the normal mode does not generate capturing parentheses; this corresponds to the most common use of regular expression matching.

      • REX_CAPTURE. This flag enables the use of capturing parentheses, and back-references.

      • REX_ICASE. Case insensitive matching is enabled. When backreferences are also enabled, through the REX_CAPTURE flag, they become insensitive to case as well, so that a pattern "(aa)bb\1" will match "aabbAA".
        The REX_ICASE mode can be changed using cloistered mode expressions of the form "(?i ... )", which enables case-insensitive mode only for the given subexpression, and "(?I ... )", which enables case-sensitive mode for the subexpression.

      • REX_NEWLINE. This will cause the any character type operations to also match newlines.
        The expressions "(?n ... )" and (?N ... )" can be used to change the REX_NEWLINE mode for a subexpression.

      • REX_VERBATIM. This flag turns off all the magic characters (including backslash escape sequences). The corresponding regular expression program therefore degenerates into a simple literal match. If REX_ICASE has also been passed, a literal case-insensitive match results.
        The REX_VERBATIM flag is useful to allow building regular expression programs even when no special matching is required.

      • REX_SYNTAX. When this flag is passed, the pattern is parsed normally, but no code is generated. This option is useful to test the regular expression pattern for syntactical correctness only.
      When parsing fails, or when REX_SYNTAX is passed, the regular expression object will be initialized to the fallback program; in other words, the regular expression will be empty. All matches attempted with the empty pattern will fail.


      FXRexError parse(const FXString& pattern,FXint mode=REX_NORMAL)

      Same as above, only taking an FXString as argument.


      FXbool match(const FXchar* string,FXint len,FXint* beg=NULL,FXint* end=NULL,FXint mode=REX_FORWARD,FXint npar=1,FXint fm=0,FXint to=2147483647)

      Match the given subject string of length len, and returns TRUE if the pattern matches. if beg and end are not NULL, (beg[0],end[0]) will contain the offsets relative to the begin of string where the match started/ended, and (beg[i],end[i]) will contain the offsets where sub-expression i started/ended, or (-1,-1) if the corresponding subexpression was not matched. The search is performed in the range [fm,to].

      The mode parameter is a bitwise OR of some flags which control how the string is to be matched by the pattern:

      • REX_FORWARD. This is the default. REX_FORWARD causes the matcher to scan the subject string starting from offset fm up to and including offset to.

      • REX_BACKWARD. Scan the subject string, moving backwards starting from to down to offset fm. An important special case is when fm and to are the same; in this case, only a single attempt is made at the indicated offset. Observe also that while the scan is performed between fm and to, the actual subject string matched may extend past this range!

      • REX_NOT_BOL. Normally, it is assumed that the start of the subject string is also the start of a line; however passing the flag REX_NOT_BOL suppresses this behavior. When passed, only positions immediately following a newline will match the "^" assertion.

      • REX_NOT_EOL. This suppresses the interpretation of the end of the subject string as the end of a line; when passed, only positions preceding a newline will match the "$" assertion.
        The flags REX_NOT_BOL and REX_NOT_EOL are useful when you need to match against a random chunk of text.

      • REX_NOT_EMPTY. Disallow empty strings from matching. When passed, an empty string is NOT considered a match; for example, if the pattern:

        a?b?

        is applied to a string not beginning with "a" or "b", it matches the empty string at the start of the subject. With the REX_NOT_EMPTY flag, this match is not valid, so FXRex searches further into the string for occurrences of "a" or "b". For example, when searching for pattern "a*" in "bbba", normally "" would be matched, as zero repetitions of "a" is normally possible. With REX_NOT_EMPTY, the single "a" will be matched instead.
        This is usually what people expect to happen.

      The parameter npar controls the length of the beg/end arrays. It should be set to at least 1. If the pattern has been compiled with REX_CAPTURE, any capturing sub-expressions at a level greater than npar will operate as if they were non-capturing subexpressions. Thus, backreferences greater than npar will fail.
      Hence it is important to pass a value for npar which is at least as large as the expected number of capturing subexpressions.

      The parameters fm and to furnish the matcher with the range of the text to be searched. Making fm and to equal will force the matcher to perform a single matching attemt at the given offset.


      FXbool match(const FXString& string,FXint* beg=NULL,FXint* end=NULL,FXint mode=REX_FORWARD,FXint npar=1,FXint fm=0,FXint to=2147483647)

      Same as above, only taking an FXString parameter.


      static const FXchar* getError(FXRexError error)

      Returns a pointer to a string containing a human-readable error message for the given error code.


      FXbool operator==(const FXRex& r1,const FXRex& r2)

      FXbool operator!=(const FXRex& r1,const FXRex& r2)

      Compares regular expression r1 and r2. error code.


      FXStream& operator<<(FXStream& store,const FXRex& s)

      FXStream& operator>>(FXStream& store,FXRex& s)

      Serialize and deserialize regular expression s to/from stream store.

    Using the FXRex class

      FXRex is most easy to use. The simplest usage is something like:


      // A letter or underscore followed by a letters, digits, or underscores
      FXRex identifier("[a-zA-Z_][a-zA-Z0-9_]*");
      FXString string;
        ...
      if(identifier.match(string)){ /* found it ... */ }

      The usage above is the simplest possible:- we just want to know if the pattern is contained in the string. If we need to execute a pattern only once, more crufty C++ implementor would probably write:


      if(FXRex("[a-zA-Z_][a-zA-Z0-9_]*").match(string)){ /* found it ... */ }

      Its so nice to be able to do that in 1 line of code, isn't it?
      Most of the time, we want to know more; not only whether there was a match or not, but also where in the string the pattern was found:


      // A letter or underscore followed by a letters, digits, or underscores
      FXRex identifier("[a-zA-Z_][a-zA-Z0-9_]*");
      FXString string;
      FXint beg,end;
        ...
      if(identifier.match(string,&beg,&end)){
        // Return the matching part
        return string.mid(beg,end-beg);
        }

      If we have enabled capturing parentheses, we can extract even more information; not only where the whole pattern matched, but also where each subpattern was found. The following code fragment which breaks up a floating point number into a sign,mantissa, and exponent using the pattern "(-|\+|)(\d*\.\d*)(E(-|\+|)\d+)?" illustrates the technique:


      // Pick apart a floating point number
      // Note that backslashes must be escaped in C++!
      FXRex number("(-|\\+|)(\\d*\\.\\d*)(E(-|\\+|)\\d+)?",REX_CAPTURE);
      FXString string,sign,mantissa,exponent;
      FXint beg[5],end[5];
        ...
      if(number.match(string,beg,end,REX_FORWARD,5)){
        // Get the sign
        sign=string.mid(beg[1],end[1]-beg[1]);
        // Get the mantissa
        mantissa=string.mid(beg[2],end[2]-beg[2]);
        // Get the exponent
        exponent=string.mid(beg[3],end[3]-beg[3]);
        }

      Note that we're passing npar=5 as the last argument because there are 5 pairs of values returned in the beg[] and end[] arrays: (beg[0],end[0]) contains the entire pattern, (beg[1],end[1]) the sign, (beg[2],end[2]) the mantissa, (beg[3],end[3]) the exponent, and (beg[4],end[4]) the sign of the exponent.
      If a particular sub-expression is not matched (for example, if there is no exponent), then the corresponding entry will contain (-1,-1).
      Because it needs to record where a sub-expression matches, its quite expensive to use capturing parentheses when we don't need to. Fortunately, there's a solution for this:


      // Pick apart a floating point number
      FXRex number("(-|\\+|)(\\d*\\.\\d*)(E(?:-|\\+|)\\d+)?",REX_CAPTURE);
      FXString string,sign,mantissa,exponent;
      FXint beg[4],end[4];
        ...
      if(number.match(string,beg,end,REX_FORWARD,4)){
        // Get the sign
        sign=string.mid(beg[1],end[1]-beg[1]);
        // Get the mantissa
        mantissa=string.mid(beg[2],end[2]-beg[2]);
        // Get the exponent
        exponent=string.mid(beg[3],end[3]-beg[3]);
        }

      The syntax "(?: ... )" makes the enclosed expression a non-capturing one. Note that this also means we can make do with one less entry in the beg and end arrays, as we're getting one fewer return value.

      If the npar parameter is too small, then any capturing parentheses level greater than npar will behave as a non-capturing parenthesis (however, if back references are also used, a back reference to a capturing parenthesis greater than npar will cause the match to fail!).

      The example below determines if there is a floating point number at offset pos in the string:


      // Does string starting at pos match a floating point number?
      FXRex number("(-|\\+|)(\\d*\\.\\d*)(E(-|\\+|)\\d+)?",REX_NORMAL);
      FXString string;
      FXint pos;
        ...
      if(number.match(string,NULL,NULL,REX_FORWARD,1,pos,pos)){
        ...
        // YES
        ...
        }

      Since both starting and ending offsets are the same, the matcher makes only a single attempt at matching the pattern at the offset pos; it does not scan the whole subject string.

    Copyright © 1997-2005 Jeroen van der Zijp

    fox-1.6.49/doc/icons.html0000664000175000017500000004270212130340076012101 00000000000000 Documentation: Icons and Images
    Documentation: Icons and Images [Remove Frame]

      Icons and Images are part an parcel of attractive, user-friendly Graphical User Interfaces these days.  Consequently, considerable effort has been expended in designing FOX to allow icon- and image-rich applications to be developed with the greatest ease.
      In FOX, Images and Icons are objects that represent picture data.  Images are simple pictures, whereas Icons are pictures with a shape mask that may be used to effectively mask out a certain area of the picture, and allow part the background to peek through as if the picture were transparent in some areas.
      Both Icons and Images may have Client side pixel data as well as an X Server side pixmap representation.  The typical application will construct the client-side pixel data by filling the Icon or Image with a picture, then create the server-side representation [after contact with the X Server has been established] by calling icon->create(), which creates an server side pixmap and uses a call to  icon->render() to fill the pixmap with the pixel data .

      Note that this is a two-step process which is very similar to that of constructing and creating regular FOX Widgets.  This is no accident.  The FOX philosophy is to construct [client-side] data structures such as Widgets and Icons and Images etc., then with all the information available, create their X Server side representation in one fell swoop by calling app->create().

      When you have given Buttons or Labels or other FOX Widgets icons, a call to that Widget's create() member function will also automatically call its icon create().  To allow icons to be shared by multiple Widgets, it is specifically allowed to call create() more than once on an icon or image.

      In many cases, after calling an icon's create() member function, there is no need to keep the client-side pixel data around; thus, FOX icons will in most cases release the memory taken up by the pixel data.  Should you want to repeatedly change the pixel data, however, FXIcon and FXImage have an option IMAGE_KEEP to allow you to hang on to the pixel data in the client.  After making changes to the pixel data, you can call icon->render() again to render it into the pixmap.

    Image Formats Supported

      Currently, FOX supports CUR, BMP, GIF, ICO, IFF, JPEG, PCX, PNG, PPM, RAS, RGB, TGA, TIFF, XBM, and XPM based icons and images.  The most preferred format is GIF, as it is about 10 times more compact than XPM, and about 2 times more compact than BMP.  This is of some concern, as applications may have lots of icons [some analysis of our own applications revealed than one application's executable had about 1MB worth of XPM icons; with GIF, this would have been less than a 100kB].

    Incorporating Icons and Images into an Application

      One crucial problem with icon-rich applications is where to keep all those icons; obviously, keeping icons in separate files allows end-users to substitute icons and perhaps change them with an Icon Editor program.  However, such a scenario also poses a maintainance problem:- software becomes extraordinarily dependent on specifics of a user installation, and end-users may actually break software by substituting corrupted icon files by accident, or perhaps other applications may overwrite them.  Another common problem is the need for end-users to set paths and environment variables.

      To eliminate these problems, the FOX approach is to embed all icons and images right into the application's executable.  This is done by simply by compiling the icons into the code in the form of C data statements, and then linking them in.

      XPM and XBM icons or images can be directly included into the source code, as these formats are basically just C++ data arrays already and there is consequently no reason to use reswrap. 
      XPM is particularly convenient as it allows you to build icons even without a graphical icon editor. Other image formats need to be transformed into a C++ data array with a small build-time utility called reswrap, which is provided in the FOX distribution.

      Reswrap allows you to generate the C/C++ data arrays automatically from the icons during the build process of your application; simply add a few rules into your Makefile, or, under VC++, use the reswrap program in a so-called Utility Project. For example, given as input a GIF file image such as below:


      Figure 1. Linux Penguin from file bigpenguin.gif.

       After processing this file, reswrap generates a C data statement such as:

      /* Generated by reswrap from file bigpenguin.gif */
      const unsigned char bigpenguin[]={
      0x47,0x49,0x46,0x38,0x37,0x61,0x30,0x00,0x39,0x00,0xf3,0x00,0x00,0xb2,0xc0,0xdc,
      ...............................................................................
      ...............................................................................
      0xf4,0xe0,0x63,0x90,0x7c,0x7d,0x40,0xc5,0x92,0x0c,0x34,0x39,0x41,0x04,0x00,0x3b
      };

      This can then be subsequently compiled into an object file, and linked in with the executable.  To make use of such an icon, FOX supports deserialization from a memory stream. The icon data above could be used as follows to create an Icon:

      FXIcon *tux_icon = new FXGIFIcon(application,bigpenguin);

      Wait! Is that all? Yes it is!  This one statement creates an icon object, then deserializes the icon data from the GIF stream to build the icon's internal pixel data.  A subsequent call:

      tux_icon->create();

      Will create an X pixmap, render the icon into it, and subsequently release the pixel data after it is no longer needed.  If you had created the icon with the IMAGE_KEEP option, the pixel data would have been kept around for subsequent manipulation by your application, and perhaps repeated rendering. To draw the icon in a window, simply:

      dc.drawIcon(tux_icon,x,y);

      will do the job.

    Bitmaps

      Bitmaps (XBM images) in FOX behave very much like images.  Except, unlike Images which are always 24 bits, and in color, Bitmaps are only one bit, or blank and white.  Typical uses for Bitmaps are the creation of patterns and stipples, or shape masks against which other primitives are clipped.
      In terms of constructing and using Bitmaps in FOX, it is completely analoguous:

      // Bitmap Data, in XBM Format
      
      #define gray_width 32
      #define gray_height 2
      static unsigned char gray_bits[] = {0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa};
      
      // Construct a bitmap object
      FXBitmap *grayBitmap=new FXBitmap(application, gray_bits, 0, gray_width, gray_height);
        

      In terms of using Bitmaps for subsequent tiling and stippling operations, remember that MS-Windows has certain size limits such patterns;  X-Windows has no such limit, but presumably smaller patterns are more efficient.  It is probably a good idea to keep so widths such as 8,16, or 32.

    Cursors

      Cursors can be constructed in FOX to change the shape of the mouse-cursor.  Constructing Cursors is very similar to constructing Bitmaps, except that Cursors comprise two bitmaps, a picture and a shape mask; also, Cursors have a so-called hot-spot, the point inside the cursor-glyph which is ``pointer to'' by the mouse.
      FOX currently also supports color cursors with an alpha component, i.e. partially transparent cursors.  This is limited to certain platforms; on platforms where color cursors are not supported, the color image is thresholded to a simple black/white image with the alpha channel mapping to fully transparent.  Designing your color cursors with contrasting colors ensures that they will look reasonable on such platforms.

      Besides defining your own ``custom'' cursors, FOX also allows you to simply create a ``stock'' cursor, i.e. a cursor whose shape has already been predefined by the system. To create a custom Cursor:

      // Picture bits, in XBM Format
      #define resize_width 32
      #define resize_height 32
      #define resize_x_hot 9
      #define resize_y_hot 9
      static unsigned char resize_bits[] = {
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
      ....
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

      // Shape bits, in XBM Format
      #define resize_mask_width 32
      #define resize_mask_height 32
      #define resize_mask_x_hot 9
      #define resize_mask_y_hot 9
      static unsigned char resize_mask_bits[] = {
      0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00,
      ....
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};


      // Resize corner
      resizeCursor=new FXCursor(application,resize_bits,resize_mask_bits,resize_width,resize_height,resize_x_hot,resize_y_hot);

      To create a stock Cursor:

      // Text Cursor
      IBeamCursor=new FXCursor(application,CURSOR_IBEAM);

      If you define your own Custom Cursors, make sure the size is exactly 32x32. MS-Windows does not support any other sizes.  Also, the shape and the picture will have to be the same size.

    If Icons Look Funny...

      Sometimes, your icons may look funny.  This is usually because FOX Icon routines determine the wrong value for the transparency color.  FOX can handle images with a true alpha-channel, or images with a special transparency color.  The latter is the more common approach, as many file formats do not support true alpha channels.
      Different image formats guess the transparency color in different ways. For GIF Images, FOX uses the following algorithm:

      • If a transparent color is found in the GIF file, that color is used.
      • If not, the background color is used.
      • If the option IMAGE_ALPHACOLOR is used when constructing the icon, the specified color is used.
      • Finally, if the option IMAGE_OPAQUE is used, the icon is forced to be non-transparent.


      For BMP images, there is no background or transparency color in the image file format; the algorithm is simpler:

      • The assumed transparency color is the same as the default GUI background color, which is FXRGB(192,192,192).
      • If the option IMAGE_ALPHACOLOR is used when constructing the icon, the specified color is used.
      • Finally, if the option IMAGE_OPAQUE is used, the icon is forced to be non-transparent.

      In most cases, you will create your icons simply as below:

      new FXGIFIcon(app,picture_data);

      In some cases, when you want to override the transparency color,construct your icons as:

      new FXGIFIcon(app,picture_data,FXRGB(192,192,192),IMAGE_ALPHACOLOR);

      To create an completely opaque icon:

      new FXGIFIcon(app,picture_data,0,IMAGE_OPQUE);

      For more information on graphics file formats and their idiosyncracies, see  the Graphics File Format Web Site.

    More on Reswrap

      The reswrap tool has a number of options to make it convenient to build C source and header files automatically from image files as a part of your regular project build process.  Reswrap is normally invoked as follows:

      reswrap [options] [-o[a] outfile]  files....

      Invoking reswrap with -o outfile will make reswrap write its output on the file outfile.  With -oa outfile, reswrap will append additional data at the end of outfile.
      Any number of input files may be specified.  Reswrap typically produces one data statement for each of the input files specified on the command line.

      Reswrap understands a few additional options:

      -h

      Will print out a summary of the supported options.
      -v
      Will print out the version number.
      -d
      Reswrap normally generates its output as hexadecimal numbers; the -d option will make reswrap generate decimal numbers.
      -x
      Forces reswrap to generate hexadecimal numbers [the default].
      -e
      Places the storage modifier extern in front of the data array, ensuring that the data array can be linked with other compilation units.
      -i
      Instead of a data array statement, reswrap will generate a declaration only.  For example,
      reswrap -i bigpenguin.gif
      will produce the output:
      /* Generated by reswrap from file bigpenguin.gif
      */
      extern const unsigned char bigpenguin[];

      Which you could include as a header file into whichever source file needs access to the data.

      -s

      This option suppresses comments inserted by reswrap to indicate the original file name from which the data statement was generated.
      -n name
      Instead of taking the filename less the extension, reswrap substitutes name for the name of the resource.
      -c cols
      Uses cols columns instead of the default 16 columns in the data statements generated by reswrap.
      -ppm
      Assumes the source file is a Portable Pixmap (ppm) file.  Reswrap will output a simple rgb array.
      Example of using reswrap in your Application's Makefile:

      OBJECTS = icons.o myapp.o
      ICONS = bigpenguin.gif applogo.gif
      icons.h: $(ICONS)
      reswrap -e -o icons.h $(ICONS)

      icons.cc: $(ICONS)
      reswrap -o icons.cc $(ICONS)

      myapp: $(OBJECTS)
      gcc -o myapp $(OBJECTS) -lFOX -lm -lSM -lICE -lXext -lX11

      myapp.o: myapp.cc icons.h

      This will cause make to generate two files, icons.h and icons.cc which contain the declarations and definitions respectively for all the reswrapped icons listed in the ICONS variable.

    Copyright © 1997-2005 Jeroen van der Zijp

    fox-1.6.49/doc/doc.html0000664000175000017500000001666112130340076011540 00000000000000 Home
    Documentation [Remove Frame]

    Foreword What FOX is, why it was written, and what are its main features.
    Introduction A quick introduction to programming with FOX, and an overview of the concepts used in FOX development.
    Targets and Messages How FOX notifies applications about the users actions, mouse clicks and state changes through messages sent to a target.
    Updating Control State FOX automatically updates the application's controls through the use of messages send during the GUI Update Phase. This section explains how to use this feature.
    Timers, Chores, Signals, and Inputs Timer, Chore, and Signal messages allow FOX applications to react to other events which are not generated by the end user. Internet sockets, pipes, and other synchronization objects can be watched by means of the Input callback messages, and provide ways for FOX programs to receive inputs from a variety of sources.
    The FXApp Class The application object is responsible for managing windows, events, and other common facilities.
    The FXWindow Class The basic FXWindow class, which is the basis of all FOX controls is explained in more detail.
    Layout Managers The FOX Layout Managers provide a convenient way of arranging your GUI Widgets without the need for explicit specification of coordinates and dimensions.
    Keyboard Focus How the keyboard focus is moved around from one widget to another, and what is the effect of this.
    Icons and Images Enrich your applications with icons. With FOX's built-in icon and image classes, this becomes very easy.
    Fonts The Font object provides easy and platform-independent methods for speciying fonts.
    Data Targets The FOX Data Targets allow you to directly connect variables in your application code to FOX GUI Controls. Using the declarative programming style made possible by the Data Targets, simple tasks such as entry and display of choices, numbers, and strings can be accomplished with a minimum amount of programming.
    Help and Tool Tips Status line help and Tooltips are a nice way of allowing users to learn about a program without consulting oracles to devine the meaning of an icon-button.
    The FOX Registry The FOX Registry database provides a facility to manage persistent settings for configuration information in your program.
    File Manipulations The FXFile namespace comprises a collection of very useful file manipulation functions that are aware of platform specific issues.
    Regular Expressions The FXRex class provides powerful regular expression matching functions.
    Drag and Drop Drag and drop are part and parcel of any modern GUI driven application. FOX provides a number of convenient hooks to allow you to move data between different Widgets, and even between different applications running on different hosts.
    Clipboard and Primary Selection The clipboard and the primary selection provide yet another way of moving data between applications.
    Using the OpenGL Viewer FOX provides a convenient way to start with 3D OpenGL programming. The GLCanvas widget provides a basic 3D drawing surface. The GLViewer widget provides a complete camera model and interactive manipulation capability, including 3D picking, dragging, and Tooltips.
    Serialization of Objects FOX provides serialization of both data and objects in a machine-independent, portable manner, by means of its built-in Stream classes.
    Writing Your Own Widgets FOX is designed to make it easy to build new widgets. As FOX is completely implemented in C++, you can use common C++ derivation to create new Widgets from existing ones.
    Class Index (FOX 1.0) Alphabetical list of classes in the FOX 1.0 STABLE version.
    Class Index (FOX 1.3) Alphabetical list of classes in the FOX 1.3 version.
    Windows Notes This section contains some notes for building FOX applications under Microsoft Windows.
    FAQ Frequently Asked Questions List
    References References to sources of various papers and articles relevant to FOX.
    HTML/XML Resources HTML/XML resources for possible future widgets

    Copyright © 1997-2005 Jeroen van der Zijp

    fox-1.6.49/doc/adie.html0000664000175000017500000011757312130340076011701 00000000000000 Adie
    Adie [Remove Frame]

    Screenshots

      mainwindow

    Where to get it?

      Adie can be downloaded from the download page either as a Linux or as Win32 Binary (both statically linked with FOX). The source code for Adie can be found in the FOX distribution. Adie is GPL Licensed.

    Introduction

      Adie is an extremely fast and convenient programming text editor written using the FOX Toolkit.
      Besides being a nice text editor, Adie is also an extremely convenient file viewer, supporting a plethora of methods to move from one file to the next.
      For each visited file, Adie remembers where in that file you were last looking, and which special places in that file have been bookmarked, so you can quickly return to frequently visited places.
      Project browsing is made easy by optionally displaying a File/Directory browser side by side with the text so files may be visited by means of a single click. Files may also be opened simply by highlighting a file name, compiler warning message, or #include directive and hitting a single button; Adie will search for the file in the same directory as an already loaded file, or in a number of predefined directories (like for example include directories).

    General Features

    • Preferences are configurable with convenient dialogs.
    • Text size only limited by available memory.
    • Persistent bookmarks may be set for each file.
    • Persistent scroll position is remembered for each visited file.
    • Wheel mouse scroll support.
    • Online help built in.
    • Now supports multiple toplevel edit windows.

    File Access Features

    • File Dialog supporting bookmarked directories.
    • Dropping a file into Adie opens the file.
    • Single-click access to file using File/Directory browser.
    • Visit recently edited files.
    • Jump to file and line number of highlighted compiler warnings or errors.
    • Customizable list of file patterns; show only source files, for example.
    • Open a file by highlighting a #include directive.
    • Customizable list of directories to search for header files.
    • Detect if file changed outside of editor to prevent accidental overwriting.

    Editing Features

    • Unlimited undo/redo capability.
    • Cut and paste to clipboard support.
    • X11 primary selection support using middle-mouse paste.
    • Drag-and-drop support for text move or copy.
    • Brace matching, statement block, and expression block selection.
    • Up to 10 persistent bookmarks may be set in each file.
    • Search and replace history is stored persistently.
    • Auto-indent feature.
    • Strip trailing spaces, strip carriage-returns for DOS files.
    • Automatically add newline after last line.
    • Indent or unindent selected text; clean indentation.
    • Search for highlighted text.
    • Goto line number, goto highlighted line number, goto matching brace, goto begin/end of block.
    • Fixed word wrap column, or continuous word wrap mode.
    • Mouse wheel or right-mouse scroll support.
    • Customizable word-delimiters to select words by double-clicks.
    • Insert files or extract highlighted text to file.

    Syntax Coloring Features.

    • Syntax coloring is programmable, using PERL-like regular expressions.
    • Patterns now read in from external file; standard set of patterns is provided for common programming languages.
    • Automatically determine syntax based on either file extensions or file contents.
    • Text styles including foreground, background, selection colors, as well as underlining and strike-throughs.
    • Text styles can be interactively modified from preferences dialog.
    • Color fallback mechanism to minimize style setup hassles.

    Starting a New Document.

      To start a new document, invoke the New menu, or press on the New button on the toolbar. If the current document has not yet been saved, you will be prompted to either save or abandon the current text.

    Opening and Saving Files the Old Fashioned Way.

      To open a file, you can invoke the Open menu, or press on the Open button on the toolbar. This will bring up the standard File Dialog, which allows you to select a file. To save a file, you can either invoke the Save or the Save As menu option. The former saves the file back to the same filename, while the latter prompts for an alternative filename.

      You can quickly navigate to the desired file by typing the first few letters of the filename and then pressing Enter (Return); use Backspace to move up one directory level. Control-H moves to your home directory, Control-W moves back to the current working directory.

      A nice convenience of the File Dialog is the ability to set bookmarks, so once bookmarked, you can quickly move back to a previously visited directory.

    Opening Files Using the File/Directory Browser.

      An alternative method to open files is the File/Directory Browser. You can display the File/Directory Browser by invoking the File Browser option under the View menu. To open a file using the File/Directory Browser, simply click on the file. If there are many files, you may want to limit the number of files displayed by specifying a file pattern in the Filter typein field. The pattern is can be any regular file wildcard expression such as "*.cpp". By default, the File/Directory Browser shows all files, i.e. the pattern is "*". You can switch patterns by means of the combo box under file File Browser; additional patterns for the combo box (and File Dialog) can be specified in the Preferences Dialog.

    Opening Recently Visited Files.

      The recent file menu shows files which have been recently visited. You can quickly get back to a file you've been editing simply by selecting one of these recent files.

    Opening Files by Drag and Drop.

      Using a file browser such as PathFinder or other Konqueror or other XDND compatible file browsers, you can simply drop a file into the text pane and have Adie read this file. Of course, the File/Directory browser supports drag and drop also, so you can also drag a file from the File/Directory browser into the Text Window.

    Opening a Selected Filename.

      Selecting any filename, possibly in another application, and invoking the "Open Selected" option causes Adie to open the selected file. When the selected filename is of the form:

      #include "filname.h"

      or:

      #include

      then Adie will search for this file in a sequence of include directories, otherwise it will search in the same directory as the currently loaded file. You can specify the list of include directories to search with the "Include Path" option. When the selected filename is of the form:

      filename.cpp:177

      then Adie will not only load the filename, but also jump to the given line number. If this file has already been loaded, Adie will simply jump to the given line number in the current file. This option is very useful when fixing compiler errors.

    Mouse Selection.

      You can move the cursor by simply clicking on the desired location with the left mouse button. To highlight some text, press the mouse and drag the mouse while holding the left button. To select text a word at a time, you can double-click and drag; to select text a line at a time, you can triple-click and drag. Performing a shift-click extends the selection from the last cursor location to the current one. When selecting words, words are considered to extend from the clicked position up to a blank or word-delimiting character. The latter may depend on the programming language, and so Adie offers a way to change the set of delimiter characters.

    Scrolling Text.

      Using the right mouse button, you can grab the text and scroll it. a right mouse drag is a very convenient way to scroll the text buffer by small amount as the scrolling is exactly proportional to the mouse movement. You can of course also use the scroll bars. Because scrolling becomes awkward when dealing with large amounts of text, you can do a fine scroll or vernier-scroll by holding the shift or control keys while moving the scroll bars.

      Adie can also take advantage of a wheel mouse; simply point the mouse inside the text area and use the wheel to scroll it up and down. Holding the Control-key while operating the wheel makes the scrolling go faster, by smoothly scrolling one page at a time. To scroll horizontally, simply point the mouse at the horizontal scroll bar. In fact, any scrollable control (including the File/Directory Browser), can be scrolled by simply pointing the cursor over it and using the mouse wheel. You can adjust the number of lines scrolled for each wheel notch by means of the Preferences dialog.

    The Clipboard.

      After selecting some text, you can cut or copy this text to the clipboard. A subsequent paste operation will then insert the contents of the clipboard at the current cursor location. If some text has been selected in another application, then you can paste this text by placing the cursor at the right spot in your text and invoking the paste command.

    The Primary Selection

      When text is selected anywhere (possibly in another application), Adie can paste this text into the current text buffer by means of the middle mouse button or by pressing the wheel-button if you have a wheel mouse. Note that while holding the button, the insertion point can be moved by moving the mouse:- Adie will only insert the text when you release the button.

    Text Drag and Drop.

      After selecting some text, you can drag this text to another location by pressing the middle mouse button; because Adie is fully drag and drop enabled, you can not only drag a selection from one place to another inside the text buffer, but also between different Adie applications, or even from Adie to another drag and drop enabled application or vice-versa. Within the same text window, the drag defaults to a text-movement. You can change this to a text copy by holding down the Control key while you're dragging. Between one text window and another, the drag defaults to a copy operation you can change this to a text movement by holding down the Shift key while dragging.

    Undo and Redo.

      Adie support unlimited (well, the limit is large...) undo and redo capability. Each time you insert, remove, or replace some text, Adie remembers what you did. If you make a mistake, you can undo the last command, and the one before that, and so on. Having invoked undo many times, it is sometimes desirable to invoke the redo command, i.e. to perform the original editing operation again. Thus, you can move backward or forward in time. However if, after undoing several commands, you decide edit the buffer in a different way, then you will no longer be able to redo the undone commands:- you have now taken a different path. When you first load a file, or just after you save it, Adie remembers that this version of the text was special; while subsequent editing commands can be undone individually, you can always quickly return to this special version of the text by means of the revert command.

    Search and Replace.

      Adie uses the standard Search Dialog for searching strings. The search dialog offersforward and backward searches (relative to the current cursor location), and three search modes:
      • Exact.
        In the Exact mode, a search looks for a verbatim occurrence of the search string in the text.

      • Ignore Case.
        In the Ignore Case mode, a search looks for a verbatim occurrence also, but while disregarding the uppercase/lowercase distinctions.

      • Expression.
        In the Expression mode, the the search performs a full regular expression match. The regular expression syntax being used is very similar to PERL and is as follows:

          ^ Match begin of line
          $ Match end of line
          . Match any character
          | Alternation
          ( ... ) Grouping sub pattern
          (?i ... ) Match sub pattern case insensitive
          (?I ... ) Match sub pattern case sensitive
          (?n ... ) Match sub pattern with newlines
          (?N ... ) Match sub pattern with no newlines
          (?: ... ) Non-capturing parentheses
          (?= ... ) Zero width positive lookahead
          (?! ... ) Zero width negative lookahead
          [] Character class


          * Match 0 or more [greedy]
          + Match 1 or more [greedy]
          ? Match 0 or 1 [greedy]
          {} Match 0 or more [greedy]
          {n} Match n times [greedy]
          {,m} Match no more than m times [greedy]
          {n,} Match n or more [greedy]
          {n,m} Match at least n but no more than m times [greedy]


          *? Match 0 or more [lazy]
          +? Match 1 or more [lazy]
          ?? Match 0 or 1 [lazy]
          {}? Match 0 or more times [lazy]
          {n}? Match n times [lazy]
          {,m}? Match no more than m times [lazy]
          {n,}? Match n or more [lazy]
          {n,m}? Match at least n but no more than m times [lazy]


          \a Alarm, bell
          \e Escape character
          \t Tab
          \f Form feed
          \n Newline
          \r Return
          \v Vertical tab
          \cx Control character
          \033 Octal
          \x1b Hex
          \w Word character [a-zA-Z_0-9]
          \W Non-word character
          \l Letter [a-zA-Z]
          \L Non-letter
          \s Space
          \S Non-space
          \d Digit [0-9]
          \D Non-digit
          \h Hex digit [0-9a-fA-F]
          \H Non-hex digit
          \b Word boundary
          \B Word interior
          \u Single uppercase character
          \U Single lowercase character
          \p Punctuation (not including '_')
          \P Non punctuation
          \< Begin of word
          \> End of word
          \A Match only beginning of string
          \Z Match only and end of string
          \1...\9 Back reference

    Keyboard Bindings.

      The following table lists the keyboard bindings:

      KeyAction
      Up Move cursor up.
      Shift+Up Move cursor up and extend selection.
      Down Move cursor down.
      Shift+Down Move cursor down and extend selection.
      Left Move cursor left.
      Shift+Left Move cursor left and extend selection.
      Right Move cursor right.
      Shift+Right Move cursor right and extend selection.
      Home Move cursor to begin of line.
      Shift+Home Move cursor to begin of line and extend selection.
      Ctl+Home Move cursor to top of text.
      End Move cursor to end of line.
      Ctl+End Move cursor to bottom of text.
      Shift+End Move cursor to end of line and extend selection.
      Page Up Move cursor up one page.
      Shift+Page Up Move cursor up one page and extend selection.
      Page Down Move cursor down one page.
      Shift+Page Down Move cursor down one page and extend selection.
      Insert Toggle between insert mode and overstrike mode.
      Delete Delete character after cursor, or text selection.
      Back Space Delete character before cursor, or text selection.
      Ctl+A Select all text.
      Ctl+X Cut selected text to clipboard.
      Ctl+C Copy selected text to clipboard.
      Ctl+V Paste text from clipboard.

    Changing Font.

      fonts


      You can change font by invoking the Font Selection Dialog from the Font menu. The Font Dialog displays four list boxes showing the font Family, Weight, Style, and Size of each font. You can narrow down the number of fonts displayed by selecting a specific character set, setwidth, pitch, and whether or not scalable fonts are to be listed only. The All Fonts checkbutton causes all fonts to be listed. Use this feature if you need to select old-style X11 bitmap fonts. The Preview window shows a sample of text in the selected font.

    Changing Preferences.

      Since there is no accounting for tastes, Adie can be extensively configured by means of the Preferences dialog. The Preferences dialog is comprised of a number of subpanes which allow you to change colors, editor modes, file patterns, and word delimiters.

    Changing Colors.

      colors


      The colors subpane allows you to change the colors used in the File/Directory browser, and the Text Window. You can simply drag colors from one color well to another, or you can double-click on a color well and bring up the Color Dialog. The Color Dialog offers a number of ways to create a new color, either by selecting one of the pre-defined color wells, by mixing a custom color in RGB, HSV, or CMYK color space, or by selecting a named color from a list.
      The active text line, i.e. the line containing the cursor, can be drawn using a special style when the Active background button is checked.
      If Line Numbers are displayed, the line numbers and line numbers background can also be modified.

    Changing Editor Settings.

      edit


      The editor subpane is used to change various modes of the editor:

      ModesExplanation
      Word Wrapping.This enables word wrapping mode for the Text Window; when word wrapping is turned on, text flowed to stay within the wrap margins.
      Auto Indent.This causes spaces or tabs to be inserted to match the previous line; this option is meant for programmers.
      Fixed Wrap Margin.When this feature is enabled, the text is flowed to stay within a fixed wrap column; when disabled, the Text Window is in continuous wrapping mode, and the text is flowed to fit the size of the Text Window. This option has no effect if the Word Wrapping option is off.
      Strip Carriage Returns.When this option is selected, MS-Windows/MS-DOS text files with lines ending in CRLF are transformed into LF only files upon read; this is mostly of interest when loading DOS files on a UNIX system; when Adie runs under MS-Windows, files are normally automatically translated back and forth.
      Strip Trailing Spaces. When selected, Adie will remove all white-space after the last printable character when reading a file.
      Append newline at end of file.If there is no newline at the end of the last line, automatically add it when writing the file; some compilers like this.
      Insert Tab Characters. When this option is selected, hard tab characters are inserted when entering the tab key. If the option is not selected then entering the tab key will insert the corresponding number of spaces into the text buffer.
      Warn if changed externally.If the file is changed by another program, pop a dialog to reload the file.
      Word delimiters.Change the set of characters which determine word boundaries for double-click and word-selections.
      Wrap Margin.This specifies the column at which paragraphs are to be wrapped; the wrap margin only has effect if the fixed wrap margin option is selected.
      Tab Columns.This specifies the tab spacing, in terms of spaces.
      Brace Match Time.When entering a brace, parenthesis, or bracket, the cursor temporarily jumps to the matching brace and pauses there for a bit before hopping back to the insert position. If the brace match time is set to 0, then this feature is disabled.
      Mouse Wheel Lines. This is the number of lines scrolled when the mouse wheel is rotated by one notch. When holding the control key while using the wheel, the text scrolls by one page at a time; when holding the alt key, it scrolls one pixel at a time.
      Line number columns. This is the number of columns shown for line numbers; if set to zero, no line numbers are displayed. .
      Save View of File.When this option is selected, the current view or scroll position is saved so that a subsequent visit to this file can immediately jump back to the same view. Disabling this option will cause all remembered views to be forgotten.
      Save Bookmarks. When selected, all currently set bookmarks will be saved for this file; a subsequent visit to this file will restore the bookmarks. Disabling this option will cause all remembered bookmarks to be forgotten.

    Changing File Patterns.

      This subpane allows you to enter a list of file patterns, one pattern on each line. These patterns are used in the File/Directory browser and the File Dialog. They are especially useful in the File/Directory browser as it allows you to cause the File/Directory browser to only show those file types you want to see (e.g. only source files). Each line of a pattern has the format:

      patternname (patternlist)

      Where patternname is the name of the pattern (e.g. "C Source") and the patternlist is a comma separated list of patterns (for example "*.h,*.c"). The patternname is optional. Some examples from my own setup of Adie (you can paste these from this help window if you want) are shown below:

        All Files (*)
        All Source (*.cpp,*.cxx,*.cc,*.C,*.c,*.hpp,*.hxx,*.hh,*.H,*.h,*.y,*.l)
        C++ Source Files (*.cpp,*.cxx,*.cc,*.c,*.C)
        C++ Header Files (*.h,*.hpp,*.hxx,*.hh,*.H)
        C Source Files (*.c)
        C Header Files (*.h)
        Python Files (*.py)
        Perl Files (*.pl)
        Ruby Files (*.rb)
        Lex (*.l)
        Yacc (*.y)
        Object (*.o)
        X Pixmap (*.xpm)
        X Bitmap (*.xbm)
        

      Some details on the allowable wild-card patterns:

      PatternExplanation
      ? Matches single character.
      * Matches zero or more characters.
      [abc] Matches a single character, which must be a, b, or c.
      [^abc] Matches a single character, which must be anything other than a, b, or c.
      [!abc] Ditto.
      [a-zA-Z] Matches single character, which must be one of a-z or A-Z.
      [^a-zA-Z] Matches single character, which must be anything other than a-z or A-Z.
      [!a-zA-Z] Ditto.
      pat1|pat2 Matches either pat1 or pat2.
      pat1,pat2 Ditto.
      (pat1|pat2) Matches either pat1 or pat2; patterns may be nested.
      (pat1,pat2) Ditto.

    Building The Syntax File.

      The syntax file is a file which contains the regular expressions used for coloring the contents of the text buffer during editing. When Adie is installed, the syntax file must be installed in some directory in the $PATH environment variable; usually, that is the same directory where the executable is installed, e.g. /usr/local/bin.

      The syntax file contains a number of Language-blocks; each language block contains a number of syntax rules. Each rule may also contain a subrule. The order of the rules inside a Language-block is important; during matching, the first rule is tried first, then the second, and so on. With subrules, its the same way.

      The formal syntax for the syntax file (sic!) is as follows:

      SYNTAXFILE      :       { LANGUAGEBLOCK }
                      ;
      
      LANGUAGEBLOCK   :       language STRING
                                      { DECLARATION }
                                      { RULE }
                              end
                      ;
      
      
      DECLARATION     :       filesmatch STRING
                      |       contentsmatch STRING
                      |       delimiters STRING
                      |       contextlines NUMBER
                      |       contextchars NUMBER
                      ;
      
      
      RULE            :       rule STRING
                                      { PATTERN }
                                      { RULE }
                              end
                      ;
      
      
      PATTERN         :       pattern STRING
                      |       openpattern  STRING
                      |       closepattern  STRING
                      |       stoppattern  STRING
                      ;
      
      
      STRING          :       "text"
                      ;
      
      NUMBER          :       digits
                      ;
      

      In a string, a quote (") can be embedded by prefixing with an backslash (\). Each statement must be on a single line. A hash (#) sign is used to introduce a comment, which extends to the end of the line.

      To determine which language block to use for coloring, Adie first examines the wildcards in the filesmatch string. If the filename loaded into the editor matches the list of wildcards, the language block will be used for syntax coloring.
      Some files don't have any file extensions. In that case, you can instead determine which language block to use by matching the first fragment of the file (typically 512 characters) to the contentsmatch regular expression.

      Note that the order of the language blocks is important; earlier language blocks will be tried first.

      The delimiters expression holds the list of characters used as delimiters when editing files of this syntax.

      When the editor matches patterns for syntax incremental syntax coloring, it needs a certain amount of context around the change being made to the text. Typically, the contextchars should be set to the length of the largest pattern to be matched. The contextlines should be set to the number of lines of context. If these statements are omitted, Adie assumes the context to be one line of text. This is good in most cases.

      Syntax rules are named patterns. The name of the rule is used to look up the corresponding colors in the FOX registry (so make sure the names are legal registry key names!). Thus, the colors can be easily configurable.

      Rules may be either simple rules or complex rules. Simple rules match a single regular expression pattern and have no subrules. Complex rules have a openpattern and a closepattern, and possibly a stoppattern. Complex rules may have any number of subrules.
      The matching process is recursive, depth-first. That means, when matching complex rules, first the open pattern is matched, then all of the subrules, followed by the close pattern and stop pattern [if specified]. This allows for easy to create subpatterns e.g. backslash-escape codes [see example].

      The patterns are specified using the perl-like regular expressions also used for search and replace, see above.

      As an example, here is a somewhat simplified version of the C++ language patterns:

      language "C++"
      
        # File patterns for this language mode
        filesmatch "*.C,*.cpp,*.cc,*.cxx,*.c++,*.H,*.hpp,*.hh,*.h++,*.h"
      
        # Word delimiters
        delimiters "~.,/\`'!@#$%^&*()-=+{}|[]\":;<>?"
      
        # C++ style comment
        rule "CPPComment"
          openpattern   "//"          # Start of C++ comment
          closepattern  "$"           # Goes to end of line
        end
      
        # C style comment
        rule "CComment"
          openpattern   "/\*"         # Note the '\' does not have to be escaped unless followed by "
          closepattern  "\*/"         # CComment pattern is potentially expensive as it can go till end of buffer!
        end
      
        # String
        rule "String"
          openpattern   "\""          # Opening quotes
          closepattern  "\""          # Closing quotes
          stoppattern   "$"           # Don't scan past end of line!
      
          rule "OctalEscape"          # Octal character can have more than 1 character;
            pattern     "\\d+"        # that's why this rule MUST come before "ControlEscape"!
          end
      
          rule "ControlEscape"        # Allow an escape; subrules are matched first
            pattern     "\\."         # so a escaped closing quote is not seen by the "String" rule
          end
        end
      
      
        # Char constant
        rule "Char"
          openpattern  "'"
          closepattern "'"
          rule "OctalEscape"
            pattern "\\d+"
          end
          rule "ControlEscape"
            pattern "\\."
          end
        end
      
        # Preprocessor
        rule "Preprocessor"
          openpattern  "^\s*#"
          closepattern "$"
          rule "PreprocessorContinuation"
            pattern "\\n"
          end
        end
      
        rule "Keyword"
          pattern     "\<(friend|typename|explicit|typeid|for|while|if|and_so_on)\>"
        end
      
        rule "Number"
          pattern     "\<((0[xX][0-9a-fA-F]+)|((\d+\.?\d*)|(\.\d+))([eE](\+|-)?\d+)?)\>"
        end
      
        rule "Type"
          pattern     "\<(unsigned|signed|int|char|short|long|float|double)\>"
        end
      
        rule "Operator"
          pattern     "(\+\+|\+=|\+|--|-=|->\*|->|-|==|=|&&)"
        end
      
      end
      

    Other Configuration Issues.

      Because Adie is an editor written to use the FOX Toolkit, there are various other items, common to all FOX Toolkit programs, which may be configured either by hand or using some other control panel. A few items of particular interest are list below:

        [SETTINGS]
        typingspeed=800
        clickspeed=400
        scrollspeed=80
        scrolldelay=600
        blinkspeed=500
        animspeed=10
        menupause=400
        tippause=800
        tiptime=3000
        dragdelta=6
        wheellines=1
        bordercolor=black
        basecolor=AntiqueWhite3
        hilitecolor=AntiqueWhite
        shadowcolor=AntiqueWhite4
        backcolor=AntiqueWhite1
        forecolor=black
        selforecolor=AntiqueWhite
        selbackcolor=#aea395
        tipforecolor=yellow
        tipbackcolor=black
        normalfont="[lucidatypewriter] 90 700 1 1 0 1"
        iconpath = /usr/share/icons:/home/jeroen/icons
        

      These settings can be either placed in $HOME/.foxrc (and thus affect all FOX programs), or in $HOME/.foxrc/FoxTest/Adie (only applying to Adie). File types may be bound to a command, mime-type, and icons using statements like the one below:

        [FILETYPES]
        cpp = "/usr/local/bin/textedit %s &;C++ Source File;c_src.xpm;mini/c_src.xpm"
        /home/jeroen = ";Home Directory;home.xpm;mini/home.xpm;application/x-folder"
        defaultfilebinding = "/usr/local/bin/textedit %s &;Document;document.xpm;mini/document.xpm"
        defaultexecbinding = ";Application;exec.xpm;mini/exec.xpm;application/x-executable-file"
        defaultdirbinding = ";Folder;folder.xpm;mini/folder.xpm;application/x-folder"
        
      This example shows how the extension ".cpp" is bound to the program "textedit" and is associated with two icons, a big icon "c_src.xpm" and a small icon "mini/c_src.xpm", which are to be found in the directories determined by 'iconpath", in this case, "/usr/share/icons" or "/home/jeroen/icons". It also binds two icons "home.xpm" and "mini/home.xpm" to the home directory "/home/jeroen". Finally, it assigns icons, commands, and mime-types to unbound documents, executables, and directories, overriding the built-in icons of the FOX Toolkit.

    Copyright © 1997-2005 Jeroen van der Zijp

    fox-1.6.49/doc/news1.html0000664000175000017500000036557512130340076012043 00000000000000 News
    News [Remove Frame]

    January 20, 2004 - New drop: DEVELOPMENT FOX 1.1.45

    Nice Anti-aliased fonts are here!

    • Rolled in Ivan Markov's Xft2 patch (Thanks Ivan!). Had to change stuff around a bit; if I broke it, don't blame Ivan please!).
      Xft2 requires freetype2 as well as fontconfig and Xft2 to be installed; it needs to be specifically enabled at this time by passing the option --with-xft=yes to configure. Saying yes means Xft2 will be enabled if the header files are present. If Xft2 is not in your version of XFree, then we can't turn it on!
      The initialization of the Xft2 library is at this time extraordinarily slow; (but as best as I can tell, its not my fault!). Still, this is something that needs tracking down some time.
    • Updated VC++, Borland C++ files based on feedbacks from the mailing list.
    • Fixed a few build issues, some important warnings (possible hazards on other systems) fixed.
    • Added alternative modal error, warning, question, and information dialog box routines; these will come in handy if there's no owner window.
    • Also added PLACEMENT_OWNER flag to the error (etc!) dialog box routines so it comes up centered on the owner window.

    January 18, 2004 - New drop: DEVELOPMENT FOX 1.1.44

    A number of small updated and gotcha's:

    • Added VC++ subproject for wizard demo program.
    • Fixed VC++ subprojects shutterbug and pathfinder were not building.
    • FXSplitter now enforces minimum size on children during layout. Previously it was only enforcing this during interactive partition resizing.
    • Changed the way cursor is erased in FXText and FXTextField. On laptops running Windows XP with ClearType enabled, the text was not looking good. Thanks to Bill Baxter for suggestions on how to fix this.
    • Fixed out-of memory write problem in FXObjectList.
    • Fixed some obscure semantics in FXString self assignment.
    • Fixed similar self-assignment issue in FXObjectList.
    • Rolled some old code into FXDCPrint.
    • Updated Borland C++ makefiles; added Borland C++ makefiles for shutterbug.
    • Added UNIX man-page for shutterbug.

    January 14, 2004 - New drop: DEVELOPMENT FOX 1.1.43

    Its been a while, but here it is:

    • Added alpha blended cursors on Windows and on X11 (XFree >= 4.3 is needed). On older UNIX systems, we now threshold the color cursors down to black and white. The internal, application-visible representation is RGBA, just like all the other images; you can easily create a cursor out of a small image in any file format. Thanks for Niall Douglas for some of the code.
    • FXCURCursor can now build cursor from any depth reswrapped ICO or CUR file; this is very handy because you can design your cursors using VC++ and they will still work even on X11.
    • Added line-weight and color options to ShutterBug. Added override redirect flag so it stays on current desktop under Linux. Also added ability to hide ShutterBug while taking a snapshot (thus, the entire screen is uncluttered even by ShutterBug itself), and added special full-screen size mode.
    • Possible race in runWhileEvents(), runModalWhileEvents() fixed.
    • FXObjectList NULL's out grown array. This is needed to prevent problems when deleting partially filled lists of objects.
    • Newly reimplemented XPM file reader can now handle up to 8 characters/pixel.
    • Tabbing into FXSpinner, FXRealSpinner makes focus land on text field only.
    • Added message ID's for getting/setting tool tip and help strings on some controls via messages. These can be used in GUI-Updates so that the tooltip, for example, may be changed as a result of updating the widget. Updating via messages is handy as we then don't need to know the type of widget being updated.
    • Added support in FXFont for additional encodings (X11). Now russion "microsoft-cp1251" is supported.
    • Added new parser in FXFont to parse human-readable string for font description; this new one should now be used for registry font settings. The old fxparsefontdesc() and fxunparsefontdesc() should be considered deprecated. Another benefit of the new method is that there is syntax to read the font-foundry; we can now tell adobe-courier and bitstream-courier apart, for example.
    • FXFontSelector panel has added support for additional encodings.
    • Changed API of fxsaveICO and FXloadICO slightly so they can be used for .CUR files also.
    • Patch from Brian Hook which adjusts FXPopup menus to stay on the currently active screen (if there are more than 1).
    • Fixed issue with window-stacking under Windows.
    • Fixed small booboo in FXScrollPane.

    January 13, 2004 - New drop: STABLE FOX 1.0.49

    New in this release:

    • Fixed issue with window-stacking under Windows.

    November 20, 2003 - New drop: DEVELOPMENT FOX 1.1.42

    New in this release:

    • Added new widget, FXScrollPane, which can be used for large scrolling popup menus.
    • Added new ARROW_AUTO capability to FXArrowButton; this is in support for the use of FXArrowButton inside FXScrollPane.
    • Added new widget, FXSpring, which can be used for fixed-proportion layout when used inside FXHorizontalFrame or FXVerticalFrame. FXSpring widgets can be given different lengths, and when piled side by side inside FXHorizontalFrame the different springs stretch or shrink proportional to their given lengths. Thus, you can subdivide areas into 60:40 splits for example. Thanks to Amanda Ross for this wonderful suggestion.
    • Added new example program ratio to show off the use of FXSpring for fixed-proportion layouts.
    • Greatly improved FXHeader control which now allows unlimited number of header items. Various justify options are now available for the text and icon in each item. The header items also support multi-line text. Prior to this release, header controls were scrolled as a whole; now, the items themselves are moved. This permits very wide (greater than 32,000 pixels) contents without necessitating the FXHeader control itself to be this wide (which is problematic because of the underlying window coordinate system limitations). This move has been made in anticipation of using the FXHeader control in FXTable.
    • Updated FXIconList and FXFoldingList for new header control functionality.
    • Added hand (DEF_HAND_CURSOR) cursor to FXApp.
    • Fixed subtle layout bug in FXPopup with uniform packing option.
    • Fixed potential buffer overrun bug in FXFileDict. Depending on your compiler's stack frame layout, it may also have prevented some icon bindings from showing up. The bug fix was also back-ported to the STABLE version FOX 1.0.48.
    • FXStatusLine now only shows help from controls in the parent window or sub- dialogs of the parent window containing the status line.
    • Fixed some minor bugs in FXRealSpinner.

    October 30, 2003 - New drop: DEVELOPMENT FOX 1.1.41

    New in this release:

    • Fixed clipboard and primary selection issues for FOX receiving clipboard data or primary selection data from GNOME applications; [clipboard and primary selection from KDE applications worked fine].
    • Fixed some compiler warnings for 64-bit Linux on AMD64.
    • Fixed FXASSERT in FXHash table; also, fixed bookkeeping issue in FXHash which caused table growing/shrinking to happen at the wrong times.

    October 23, 2003 - New drop: DEVELOPMENT FOX 1.1.40

    New in this release:

    • Added attach() API to FXWindow; this allows a foreign window to be swallowed into the FOX widget tree.
    • A new FLAG_OWNED is added to FXWindow to determine if the window handle is owned by FXWindow or whether it belongs to a foreign window; various API's have been fixed accordingly.
    • Added new class, FXHash, which maps pointers to pointers; its primary purpose is to map window handles to FOX widgets; on X11, we used XFindContext() for this in the past, and we used GetWindowLong() on Windows. Due to the introduction of attach() we can no longer use GetWindowLong() on Windows and since FXHash is much faster than XFindContext() we now use FXHash on both platforms.
    • Fixed bug in FXObjectList reported by Dimitris.

    October 20, 2003 - New drop: DEVELOPMENT FOX 1.1.39

    New in this release:

    • FXHeader has been vastly updated; each header item now supports customizable layout of icon and label: relative placement of icon and label, as well as justification inside the cell. Also, labels inside FXHeaderItem may now be multi-line.
    • Corrected some little bugs with FXTable; in the near future, FXTable will be overhauled, and will use the updated header control.
    • Fixed some minor warnings for AMD Athlon-64 compile of FOX.
    • Fixed some template instantiation issues in FXElement.h
    • FXScrollWindow now observes more layout options for its content window; first, LAYOUT_FIX_WIDTH and LAYOUT_FIX_HEIGHT are now observed at all times; the options LAYOUT_LEFT, LAYOUT_RIGHT, LAYOUT_CENTER_X, LAYOUT_TOP, LAYOUT_BOTTOM, LAYOUT_CENTER_Y, LAYOUT_FILL_X and LAYOUT_FILL_Y are observed if the content window is smaller than the visible viewport of the FXScrollWindow.
    • The member data content_w, content_h have been removed from FXScrollArea; these turned out to be unnecessary in all cases, since the information contained in them wasn't very useful.
    • Fixed some minor issues with sorting in FXFoldingList; added sortItems() API which sorts ALL items, not just items at root level.
    • Fixed small problem in FXFile owner() [UNIX only]. When compiled with --enable-threadsafe, it was returning a bogus value.
    • Fixed some minor issues in FXUndoList; first, killed some complaints reported by Borland C++; also, some minor problems accessing the redoName.
    • Did some minor speedup tricks, also killing some pointer underflow messages reporting by some debuggers (this was not a bug, as no data was referenced; however some debuggers flagged this).
    • Fixed issue with FXStream buffer pointers; some debuggers were flagging pointer overflow when FXMemoryStream called FXStream::open() with "unlimited" buffer [we use unlimited buffer for example in reswrapped icon reading where we know the reader to stop at the end of the icon data]. When the buffer size is set to ULONG_MAX, the end-pointer in FXStream is now set to the largest representable pointer value; note that this value will be compared but never referenced when used in FXMemoryStream.
    • FXMDIChild sets target and selector to NULL just after SEL_CLOSE was issued from the close() API to prevent any further events:- its target may have been deleted in the SEL_CLOSE callback. Similar logic applies to FXTopWindow's close() logic.
    • Fixed one memory buglet in glviewer test program.
    • Fixed small problem in FXApp peekEvent(); it now returns TRUE whenever getNextEvent can be called productively. Previously, peekEvent() returned FALSE even though timers were overdue or chores had been set.
    • Renamed FXApp API runWhileEvents() to runModalWhileEvents; added non-modal version runWhileEvents().
    • Added checking for maximum points in FXDCWindow polygon drawing functions under Windows.
    • Fixed bug in FXObjectList, forgot to multiply by sizeof(FXObject*).
    • Removed unused declaration from FXText.

    October 8, 2003 - New drop: DEVELOPMENT FOX 1.1.38

    New in this release:

    • Harmonized parameter-order of FXMEMDUP() with FXMALLOC() and co.
    • Added undo-grouping facility to FXUndoList. In a nutshell, you can often break down undo/redo capability into lots of little undo/redo activities, which must be performed as a unit. The new undo extension now allows for this using a FXCommandGroup. FXCommandGroup may be subclassed, although you typically only overload undoName() and redoName(). FXUndoList sports new API's begin() and end() to bracket a set of undo-commands which need to be executed in unison. These can be arbitrarily nested.
      Also new in the undo-system is that FXCommand now derives from FXObject, meaning that it can both send and receive messages. This is cool because it allows FXCommand subclasses to be directly interfaced to other objects, (including widgets!) via the normal message system. The undo merge got dropped because I'm not sure the mechanism implemented earlier is satisfactory at this point.
    • Added Shift-Delete binding for cut-to-clipboard in FXText and FXTextField.
    • Fixed memory leaks (mostly icons) in most sample programs.
    • Changed internal timer implementation on Windows to allow for programs running longer than 24.85 days; the old implemtation worked with 32 integers and counting in milliseconds caused a wrap-around in 24.85 days, causing possible problems in FOX long-running programs.
    • Blocked assignment and copy constructor in FXVisual.
    • Changed some more functions for basic types in FXElement.h
    • Fixed bug in FXObjectList and removed superfluous buffer clearing (it gets overwritten immediately).
    • Fixed minor bug in FXString.

    September 24, 2003 - New drop: DEVELOPMENT FOX 1.1.37

    New in this release:

    • A new subdirectory started for plotting and charting widgets (libCHART).
    • Fixed serious bug in FXTreeList, FXFolding list when deleting items; first, references were made to deleted items. Second, while in the callback the item was in an inconsistent state.
    • Text now has focus when A.d.i.e. starts up.
    • FXObjectList API's added:- can append, insert, remove multiple items now. Also has new, more efficient implementation.
    • FXDLL now uses LoadLibraryEx(dllname,NULL,LOAD_WITH_ALTERED_SEARCH_PATH) under WIN32; this finds sub-DLL's in the same path as the master DLL when loading DLL's which themselves load DLL's.
    • New API dupElms() added in FXElement.
    • Added texture drawing test mode in dctest sample application.
    • Updated VC++ for libCHART; DLL building still gives trouble, however...

    September 17, 2003 - New drop: DEVELOPMENT FOX 1.1.36

    In this release:

    • FXTreeList, FXFoldingList API's clearItems(), removeItem() and removeItems() now generate no spurious callbacks:- previously, multiple SEL_CHANGED callbacks were issued while deleting multiple items; now, only a single SEL_CHANGED callback will be generated, at the end of the removal. Also, when deleting items, no reference is being made anymore to deleted item's icons. This caused problems in some cases where FXTreeList's destructor was being called AFTER the icons of the items were already deleted.
    • FXTreeItem, FXFoldingItem had added API's, isParentOf() and isChildOf() to test parent/child relationship between items.
    • FXUndoList's FXCommand has new added API, merge(), which allows undo-record merging. Undo records may be merged if (a) merging is allowed, (b) the merge would not span the marked point of the undo-list, and (c) when the merge() function of FXCommand returns TRUE; otherwise, a separate undo record will be added. Also, FXUndoList maintains a flag which indicates whether a command is being executed. This may be examined during the execution of an FXCommand to determine if it is a user-initiated or undo-initiated action. Only in user-initiated actions do new undo records need to be added.
    • FXSpinner, FXRealSpinned have added get/set methods to specify the number of columns in the text field.
    • FXMDIChild's close window logic has been finalized; call FXMDIChild's close() member function to close the MDI child window. This will generate one final callback of type SEL_CLOSE to FXMDIChild's target, after which the FXMDIChild will self-destruct.
    • FXMDIClient's closeDocument() and closeAllDocuments() API's have been removed; instead, we now have more general API's forallWindows(), forallDocuments(), and forallDocWindows(). The API forallWindows() sends a message to all MDI child windows; forallDocuments() sends one message one window of a group of windows sharing the same document. Finally, forallDocWindows() sends a message to all windows of the given document. All these API's stop routing messages at the first unhandled message.
    • FXMDIChild now forwards messages first to its contentWindow(), then to its target (typically, the "document" in a multiple document interface).
    • Fixed FXICOIcon and FXICOImage to handle off-spec icons; according to the official documents, ".ico" icons should be 16x16, 24x24, 32x32, 48x48 or 64x64 pixels. FOX now handles arbitrary sizes.
    • Fixed bug in FXFileStream's position() API:- the file position was not being corrected for the bytes already buffered, causing file-position and stream position to get out of sync.
    • FXPopup can now take taskbar into account under MS-Windows when popping up.
    • FXProgressDialog forces repaint when label is being updated; frequently, not only the bar but also the label are being changed while operation is in progress. Updating the label previously required some explicit calls to repaint() and flush().
    • Buffer overrun testing added to FXXPMIcon/FXXPMImage input routines.
    • New function, fxsavePS(), added to allow saving of image data to postscript image file. Both color and grayscale images are supported, as are some paper placement options.
    • New syntax-coloring engine is being implemented in A.d.i.e. Editor; this work is still in progress, the patterns are currently hardwired for testing purposes, until a new GUI is in place. It is recommended people continue to use the stable version of A.d.i.e. in the FOX 1.0 release for editing tasks.

    August 25, 2003 - New drop: DEVELOPMENT FOX 1.1.35

    New in this release:

    • Added FXPPMImage and FXPPMIcon for Portable Pixmap format support.
    • FXColorWheel now supports mouse wheel for hue control.
    • Fixed bug in FXSeparator drawing when non-zero padding was passed.
    • Fixed introduced bug in FXGIFCursor.
    • Added SCROLLBAR_WHEELJUMP option to FXScrollBar; when SCROLLBAR_WHEELJUMP option is passed, moving the mouse wheel inside the FXScrollBar will jump scroll instead of performing smooth scrolling. The jump-scrolling mode is usefull when scrolling complicated contents which are difficult to redraw quickly.
    • When passing the option SCROLLERS_DONT_TRACK to FXScrollArea, the FXScrollArea will automatically enable the SCROLLBAR_WHEELJUMP option for the scroll bars.
    • When installing FOX 1.x.y, it will now install the header files into a directory <prefix>/include/fox-1.x, and install the library into <prefix>/lib/libFOX-1.x.a; this will make it easy for the new version and the old version of FOX to coexist on one system.
    • Updated Borland C++ and Digital Mars C++ Makefiles.

    August 19, 2003 - New drop: DEVELOPMENT FOX 1.1.34

    Improvements:

    • Fixed various list widgets so changing icons in items does not incur recalc() when icon stays the same.
    • Added Bill Baxter's FXRealSpinner class; replaced dial with up/down buttons (couldn't make this work nicely). Changed internal logic so as to work in a more user friendly way (keeps nice numbers, rolling mouse up and down returns to same value, and so on).
    • Now all "artwork" exists outside of the source code; however a pre-reswrapped icons.h and icons.cpp is distributed.
    • FXSpinner increments/decrements using mouse wheel.
    • FXUndoList maintains counter of number of undo/redo records; you can connect text fields to these counters for display in the GUI.
    • Moved fxmalloc() and co into FXObject.cpp from fxutils.cpp; dynamic loading of FOX into FXRuby on Mac OS-X needs this.
    • Added list of standard sizes to Shutterbug; makes it much easier to snapshot standard icon sizes directly from the screen.

    August 1, 2003 - New drop: DEVELOPMENT FOX 1.1.33

    More great improvements:

    • Added new image type support, XBM (X Bitmap). X bitmaps are often used for black and white icons or cursors, and these new image classes allow for convenient manipulation of these images.
    • Fixed bug in FXString and FXSettings; actually, there were two bugs: first, when strings contained quoted characters it was reading a bit past the last character. Next, the conversion of hex to a value was wrong due to a precedence problem.
    • Added extra parameter to FXImage::scale(). This is the quality of the rescaling. Current values may be 1 for the old algorithm and 0 for the new, very fast dumb-sampling algorithm. The sampling is ugly, but it sure is fast. We sure intend to have additional scaling algorithms.
    • FXText now follows similar GUI update blocking as FXTextField: when the focus is on it, it does not update.
    • Some additional icons has been made available as GIF files. They are now reswrapped in the process of building the library instead of being pasted in the source code; this makes it easier to replace icons work with other ones.

    July 22, 2003 - New drop: DEVELOPMENT FOX 1.1.32

    More great improvements:

    • New sample application, ShutterBug which is a simple screen snapshot utility; ShutterBug can lasso any arbitrary area on the screen and dump the image to any of the supported file formats.
    • FXImage no longer creates its own pixel array in restore(), unless there was no a-priori pixel array; in other words, it can read back pixels from the server-side representation straight into the pixel buffer passed on the constructor.
    • FXDirBox now uses FXFileDict, enabling it to display custom icons.
    • Updated FXDirSelector; now that FXDirList shows drive names properly under windows, the FXDriveBox is no longer needed. Also, FXDirList and FXDirBox share the FXFileDict in FXDirSelector.
    • The radio-behavior has been dropped from FXGroupBox; it is no longer desired, for several reasons: first, we have a much better mechanism to keep FXRadioButtons in sync using the GUI update mechanism or with FXDataTargets; second, physical layout has nothing to do with logical behavior, and FXGroupBox is now a purely decorative layout manager, and third, the radio-behaviour in FXGroupBox was causing problems when interfacing FXRadioButtons with other code due to the spurious extra messages due to the radio-behaviour enforcement.
    • Removed SEL_UNCHECK_OTHER and SEL_UNCHECK_RADIO message types; this is due to the removal of the old FXGroupBox behaviour.
    • FXTextField now understands control-arrow cursor movement; control-arrow moves the cursor by one whole word. To make this more useful, FXTextField also has new setDelimiters() and getDelimiters() API's with which the user can indicate the set of characters which are interpreted as word delimiters.
    • FXText's setDelimiters() and getDelimiters() API's have been changed to match those of FXTextField. This makes the class FXCharset obsolete.
    • Fixed problem in FXSlider; FXSlider was not drawing correctly when padding was non-zero; also, the slider had is now drawn in the GUI base color rather than back color; this allows the user to set the back color to a different value from base color.
    • Fixed FXTreeList's dotted line drawing under Windows: FILL_STIPPLED style does not work, but FILL_OPAQUESTIPPLED fortunately does.
    • New features added to reswrap:
      • Reswrap now understands a new option, -n namespace which causes it to generate a C++ namespace scope around the icon-definitions.
      • Another new option, -p prefix will place the string prefix in front of every symbol generated from the icon filename.
      • To force an alternate resource name, you can now use -r resourcename. If this option is not passed, the resource name is generated from the file name by dropping the extension and replacing the period (".") by an underscore.
    • FXImageView now offers options to control the placement of the image when the viewport is larger than the image; you can align it in various ways using options IMAGEVIEW_LEFT, IMAGEVIEW_RIGHT, and so on. The default alignment is now centered in X and Y, so you may have to force IMAGEVIEW_LEFT|IMAGEVIEW_TOP options to keep the current image placement.
    • FXGLVisual has gained an API, supported() for checking for OpenGL support. It is primarily useful for UNIX/X11 remote displays. The new API returns the lesser of the library's OpenGL version and the remote server's version. Programs should try to limit OpenGL calls to those not exceeding this support level.
    • Most icons are now generated by reswrap. Also, many icons have been updated to more modern-looking icons.
    • Fixed bug in FXGZStream; forgot to flush buffer at the end.
    • Fixed a number of bugs in FXBZStream; BZ2_bzRead() returned BZ_STREAM_END and not BZ_OK when at end of stream, causing tail end of file to be left unread.
    • In FXTopWindow, absence of DECOR_SHRINKABLE or DECOR_STRETCHABLE should now work under Windows. If a window has DECOR_STRETCHABLE but not DECOR_SHRINKABLE, then it can not be resized below its default size; likewise, if it has DECOR_SHRINKABLE but no DECOR_STRETCHABLE, it can not be resized larger than the default size.
    • The undocumented x86-only API fxgetticks() now calls the function QueryPerformanceCounter() under Windows; presumably, this is implemented in terms of the RDTSC instruction. The API fxgetticks(), if it exists, allows you to read back the CPU's time-stamp counter register, which increments every clock tick. It enables very fine-tuned time measurements.

    July 8, 2003 - New drop: DEVELOPMENT FOX 1.1.31

    Great improvements in this release:

    • The new FXStream class is finally here! This represents another one of the major milestones toward FOX 1.2!
      • Much faster than the old FXStream, especially on small items, where the difference is quite dramatic.
      • Now provides byte-swapping capability during writing as well as reading.
      • Provides buffered operation, permitting more easy subclassing.
      • User-specifyable buffer size allows more tuning of buffering to datasets of interest to user.
      • Now able to position pointer in stream from current- or end-position as well as start-position.
    • Updated FXFileStream. FXFileStream no longer works over buffered I/O but direct system calls (as FXStream already provides its own buffering!).
    • Updated FXGZStream which provides file I/O using GNU ZIP style compression.
    • Updated FXBZStream; this one uses BZIP2 style compression.
    • Fixed bug in vsscanf() for integer overflow handling (only affects systems which don't provide their own vsscanf()) [Thank you SGI MIPS Pro C++].
    • Fixed FXMDIXXXButton to properly observe frame style while being pressed.
    • Regressed FXRootWindow size determination to old method.
    • Fixed drawing of accelerator and underscore in FXMenuCommand, FXMenuCheck, and FXMenuRadio when drawn grayed out.
    • Increased buffer size for fxmessage(), fxerror(), fxwarning(), fxtrace(), and fxassert() because it was too small for some people. The new size is compile-time configurable, preprocessor constant MAXMESSAGESIZE, which defaults to 1024 if not passed explicitly.
    • Updated FXXXXIcon and FXXXXImage classes for changed argument order in new FXMemoryStream class.
    • Some minor tweaks in new fxsaveGIF() function.

    June 27, 2003 - New drop: DEVELOPMENT FOX 1.1.30

    New stuff for this release:

    • New widget, FXFoldingList has been added. FXFoldingList is a tree list with captions; each item may have a number of substrings (as FXIconList, separated by tabs). A header control determines the sizes of each column.
    • Fixed buglet on 64-bit machines:- FXID should be 64-bit on 64-bit machines.
    • Made moveContents() a protected API. There has been some confusion in the past with programs invoking moveContents() instead of setPosition(). The correct way is to call setPosition() to scroll. This will verify the input, then in its turn invoke moveContents() to adjust the insides of a FXScrollArea.
    • Changed FXColorWell's drop behavior. Previously, dragging a color over a FXColorWell caused the FXColorWell to emit SEL_CHANGED messages; if this leads to a drop, no subsequent SEL_COMMAND followed, causing programs which only trapped SEL_COMMAND to behave oddly; now the FXColorWell emits a SEL_COMMAND when the color is dropped, and the color does not change while dragging over it.
    • Fixed some minor issues in FXIconList. Icon didn't properly disappear when 2nd column was made very small.
    • Fixed minor type in FXMat3d.
    • Changed shape of arrow and reverse arrow cursor slightly under X11.
    • FXPopup, FXTopWindow, FXToolTip position-adjustment code now no longer assumes root window starts at 0,0. This means root window may now extend in all directions. This is in support of multi-head configurations.

    June 23, 2003 - New drop: DEVELOPMENT FOX 1.1.29

    Truely massive numbers of changes this time! Some long-standing wishes have finally been implemented:

    • New API's to FXImage: xshear() and yshear() perform a shear operation on the image (turning it into a parallelogram). The area outside the image is filled with an optional background color (the default being transparent).
    • FXImage now always has an alpha channel; this means its now much more convenient to use, as FXImage can now be treated as a rectangular array of FXColor. Treating each pixel as a single 32bit word is much faster; also, no runtime test is needed to test for alpha channel presence.
    • The image input and output routines have been upgraded to support alpha channel also:
      • BMP loader now supports 1,4,8,16,24, and 32bpp with alpha channel.
      • BMP writer saves to 24 or 32 bit depending on image opacity:- it saves as 24bpp whenever image is fully opaque.
      • BMP loader was incorrectly yielding darker colors when loading 16bpp BMP files; this has now been corrected.
      • ICO loader now supports WindowsXP-style 32bpp icons, which support an alpha channel.
      • ICO writer now saves 24bpp with one bit alpha, or 32bpp with true alpha channel.
      • PCX loader totally revamped; now supports 1, 4, 8, and 24bpp; it does not support 4 planes of 1bit due to lack of documentation on what this means.
      • TARGA image loader now supports 32, 24, 16, and 8bpp, as well as grey scale images.
      • TARGA loader was incorrectly loading darker colors in 16bpp mode; this was due to lack of rounding. This problem has now been corrected.
      • fxezquantize() bugs have been fixed, and has been speeded up.
      • GIF loader now returns proper alpha channel for alpha-color in the GIF.
      • GIF writer may now uses Lempel-Ziv Welch compression in the USA. However, since FOX is also used internationally, by default the compression is still disabled. If you compile FOX inside the USA, you may pass the -DUSA flag to enable GIF compression.
      • GIF writer now writes graphic control block when the image has transparent areas.
      • XPM loader now translates "None" color into proper alpha channel.
      • XPM writer now translates transparent pixel to "None" when saving to xpm file.
    • FXGLViewer's readPixels() API now yields rectangular array of FXColors; also, this array is right-side up in the sense that it may be directly passed to the image output routines.
    • Fixed a few remaining 64bit issues for RedHat/Itanium port of FOX.

    June 23, 2003 - New drop: STABLE FOX 1.0.42

    Fixes for 64-bit compiles:

    • Added FXival and FXuval definitions from the DEVELOPMENT version; these integer types are integers big enough to hold a pointer. When casting from int to void* or vice-versa, do so via FXival or FXuval to ensure numbers are properly sign-extended (or zero-extended) on 64-bit machines.

    June 6, 2003 - New drop: STABLE FOX 1.0.41

    New stuff in the stable release.

    • FXFileDict now has TIFF support when compiler flag ALL_IMAGE_FORMATS is passed.
    • Registry write problem fixed:- deleted registry keys were not being removed from MS-Windows Registry Database in some cases.
    • Fixed problem in FXSlider: onLeftButtonRelease handler was sending SEL_LEFTBUTTONPRESS message instead of SEL_LEFTBUTTONRELEASE.
    • Fixed small problem in FXWindow::create(). Was not passing in the right WS_CLIPSIBLINGS|WS_CLIPCHILDREN flags (but there were no consequences of this problem as flags we're being set back on in FXDCWindow).
    • Fixed bug in FXGLShape: material[1] was not set properly.
    • Fixed problem in FXSplitter: onLeftButtonRelease handler was sending SEL_LEFTBUTTONPRESS message instead of SEL_LEFTBUTTONRELEASE.
    • Fixed problem in FXTable: updateRange issued wrong error message.

    June 5, 2003 - New drop: DEVELOPMENT FOX 1.1.28

    New stuff in the development release.

    • Updated reswrap. The old, unused PPM mode has been dropped. New features have been added: it is now possible to reswrap text, for example to embed long text into the executable; reswrap automatically escapes control characters. You can use the ASCII mode for text; it is also possible to reswrap all input to the form "\xff" which is more appropriate for binary data; this mode yields slightly more compact text representation of the image than the normal hexadecimal mode. A new option can cause reswrap to keep the file extension in the symbol; this way it is instantly clear whether an image is a GIF or BMP, for example. The manual page of reswrap has been updated also.
    • Fixed little buglet which caused the GUI update to skip one widget in its cycle.
    • Split off common block of code in FXMetaClass into separate function to eliminate redundancy.
    • Fixed MDI child drag-rectangle painting problem; occasionally the drag-rectangle got clobbered and this caused fragments of the drag-rectangle to be left behind.
    • Fixed focus problem with MDI child. In case the content window of an MDI child was not focusable, the MDI child window didn't become active.
    • Also, somewhat related, the MDI child was only activated when it received a SEL_FOCUSIN message. This prevented the MDI child from becoming active when the window containing it didn't have the real keyboard focus from the window manager.
    • The FXMDIWindowButton now takes a pointer to the window menu (usually FXMDIMenu); previously, FXMDIChild forced its window menu to the FXMDIWindowButton in the menubar; this was an unnecessary complication as we can simply share the window menu between all instances of FXMDIWindowButton's. Note that the application is responsible for properly disposing of the window menu when it is destroyed.
    • Added setSplit() and getSpit() API's to FXSplitter; previously the sizes of the subpanels were set by directly changing the child window's size; this was kind of hard to explain.
    • Added ID_SETICONVALUE and ID_GETICONVALUE messages. Using these messages, callback functions can change or obtain the icon from the sending widget without having to know the type of widget which invoked the callback; thus, it works basically like ID_SETINTVALUE and ID_GETINTVALUE.
    • Replaced old vector classes with new ones. Besides now being able to access components by x, y, z instead of only indexing, they also sport a number of additional useful API's.
    • Added a 3x3 matrix class, which can be used for 3x3 homogeneous transformations or regular 3x3 matrix work.
    • Added a 2-vector class analoguous to the 3-vector and 4-vector classes; both single and double-precision versions are supplied.
    • Updated quaternion classes, also follows new nomenclature.
    • Fixed some minor bug in quaternion class member function.
    • Changed various math functions inside FOX to be able to take advantage of single precision transcendental functions which are now part of the C99 standard math library; added macros for when no C99 standard functions are available. The single precision functions are usually faster, possibly substantially faster for some architectures.
    • Fixed trouble with FXAccelTable; releasing, then adding back entries resulted in badly filled hash table. The new implementation will be less sensitive to this: first, it resizes sooner, i.e. the allowable load factor has been reduced; second, as entries are removed the table will now shrink, and in the process the previously occupied slots will now be marked as unused. Finally, as an entry is removed an attempt is made to determine if its the last element on a collision chain, and if so it will be flagged as an unused slot instead of a previously occupied slot.
    • Fixed problem under WIN32 with FXVisual returning wrong depth of the display; also, was confusing depth (significant bits/pixel) and packing (padding bytes which may be in the display buffer to have a nice power of two bytes/pixel).

    May 12, 2003 - New drop: DEVELOPMENT FOX 1.1.27

    New stuff in the development release.

    • Added support for opaque dragging and resizing of FXMDIChild windows; pass MDI_TRACKING flag if desired.
    • Fixed WIN32 registry write-back problem in FXRegistry: deleted sections were not being deleted from native WIN32 registry.
    • Fixed problem with fxloadGIF(): when loading back an image previously written by fxsaveGIF(), the number of bytes read in was one byte short. This causes FXStream to get out of sync when the image is followed by other data.
    • Fixed problem with fxsaveGIF() and fxsaveXPM(). Adjusted XPM input/output so that when loading from FXStream, as many bytes are being loaded as were saved (provided fxsaveXPM() is used to do the saving!).
    • Fixed FXShutter to tolerate a zero-value for animspeed; this will effectively disable animation of FXShutter closing and opening.
    • Fixed FXMDIChild to make animation proceed smoother; thanks to Thomas Friedrichsmeier for this patch.
    • Fixed problem with closing windows: SEL_CLOSE is now blocked when closing a window on the bottom of a modal window stack. Basically, close button now behaves similar to buttons inside the owner window: it beeps and nothing happens.

    May 2, 2003 - New drop: STABLE FOX 1.0.40

    Bugs fixed in the stable release.

    • Added support for thread-safe build (using POSIX thread-safe functions like readdir_r(), getpwuid_r(), and so on). Enabled by passing -DFOX_THREAD_SAFE=1 on the command line. Using the thread-safe library calls ensures that the GUI thread never interferes with the worker threads if the worker threads are making certain kinds of library calls (of course, you might want to ensure the worker threads also call the thread-safe API's so that they won't interfere with each other!).
    • Thread-safe library call support has gone through a few iterations, and at this time has been checked on IRIX, SUN, HP/UX (PA-RISC, IPF), DEC, and of course Linux. Do not use this feature in any previous version than 1.0.40!
    • Fixed problem with multple screens in FXVisual class.
    • Added select all (Ctrl-A) and delete file (DEL) accelerators to file selector.
    • Fixed a few minor issues w.r.t. checking for files, device special files, and directories; you can now pick device special files in the file selector.
    • Fixed minor issue in FXTreeList drawing boxes.
    • Could not search for filenames with spaces in FXTreeList.
    • Fixed issue with GLVisual and 32-bit hardware accelerated visuals.
    • Fixed problem in FXTextField when there is an obscene amount of text inside single line text field.

    April 29, 2003 - New drop: DEVELOPMENT FOX 1.1.26

    Stuff in this development snapshot.

    • Changed addTimeout() to replace the old timer, if it exists, with the new timeout value. This simplifies code as you can simply set the timer and if it was set already it now gets reset to the new interval.
    • Changed addChore() of course to do the same; it re-appends the chore at the end of the list, basically postponing it until after the outstanding chores have been performed.
    • Fixed forgotten header file include in FXApp for WIN32 build.
    • Replaced hard-coded "0" with DefaultScreen(display) in FXVisual; this caused problems on X11-based systems having more than 1 screens.
    • Removed private GetDC() and ReleaseDC() API's (WIN32 only).
    • Fixed FXDCWindow problems:- surface->id() shoule now be treated correctly everywhere based on type of surface.
    • Added support for thread-safe build (using POSIX thread-safe functions like readdir_r()). Enabled by passing -DFOX_THREAD_SAFE=1 on the command line. Using the thread-safe library calls ensures that the GUI thread never interferes with the worker threads if the worker threads are making certain kinds of library calls (of course, you might want to ensure the worker threads also call the thread-safe API's so that they won't interfere with each other!).
    • Replaced virtual getText() functions in FXListItem (and other list widgets) by non-virtuals which yield const FXString&, this eliminates a lot of string copying. Returning const FXString& is safe as FXListItem's API's are chiefly for FXList and its subclasses to use and not usually directly used by application programs.
    • Expunged deprecated fxgetusername(), fxgetgroupname(), and fxgetpermissions() API's from fxdefs.h. Use the safer equivalent functions from FXFile instead.
    • Removed deprecated setPatternList(const FXchar **ptrns) from FXFileDialog and FXFileSelector. The new function is easier to use and harder to abuse.
    • Fixed FXText widget:- get selection from clipboard returns value of len larger than actual text length; now we're just scanning till the end of string to determine the real length.

    April 10, 2003 - New drop: DEVELOPMENT FOX 1.1.25

    New in this release.

    • Changed the way timers are set or removed. The method addTimeout() is basically the same as before, except has a small change in argument-order (permitting default parameters more easily). An overloaded removeTimeout() removes timers by means of the same target and message combination as the corresponding addTimeout(). This new method is very convenient as it eliminates to a large degree the bookkeeping necessary to hang on to the FXTimer pointer.
    • Also, addTimeout() now has an optional pointer argument, which is passed back as the void* pointer in the callback. This way, information may be passed from the place where the timer is set to the place where the timer callback is called. Note that the pointer in the timer callback handler no longer refers to an FXEvent!
    • Similarly, changed the way chores are handled; the new overloaded removeChore() removes a chores by means of the same target and message as the matching addChore() was invoked with. Again, this simplifies coding in many cases.
    • Like the timers, addChore() also adds an optional pointer argument, which is passed to the chore callback handler when the chore is fired. Note that the pointer in the chore callback handler no longer refers to an FXEvent!
    • Updated all widgets which have timers and chores to use the new timer system; all such widgets are now simpler in implementation and actually take a bit less memory as well.
    • Implemented delayed layout update using chores. Previously, a change in layout was reconciled using a GUI-Update pass. The new system replaces this by a simple chore being set, and thus a layout change no longer incurs an iteration over the entire widget tree. This means layout changes are now substantially less CPU intensive (and faster too!).
    • Made layout() a public member function. I had to do this, because the new method to force an immediate layout is no longer performed via forceRefresh().
      If you need immediate layout, then you must now just call layout() directly! The member function forceRefresh() now only performs a GUI-Update pass on the subtree of the widget on which it is called!
    • The message handler onUpdate() no longer invokes layout(). This actually will speed the GUI-update pass up a little bit, as the new GUI-Update implementation will not call layout() anymore.
      If, as a result of a GUI-update, widgets change size (for example caption on a label is changed), then there will be no need for an additional GUI-update pass for the layout. The result again is substantially less CPU time wasted during idle processing, and a more responsive application.
    • Implemented delayed layout during window-resizing. When resizing dialogs, the system previously rearranged the widgets in the dialog immediately. As a result of this, an interactive (opaque) resize of a complex widget tree could start to fall behind the mouse movement.
      With the new system, it is no longer possible to fall behind, because now it delays arrangement of the widgets until it has caught up with the event-stream. This makes opaque resizing complex GUI's on slow machines much faster.
      Note that this delayed layout is implemented on X11 only; under WIN32, the new delayed layout method appears currently impossible).
    • Added some missing API's to FXWString.
    • Fixed a buglet in FXString::substitute(). The last occurence of a substring ending the string was not being substituted.
    • Fixed a few other bugs that had been reported.

    March 13, 2003 - New drop: DEVELOPMENT FOX 1.1.24

    Stuff in this development snapshot.

    • FXFileList now supports case insensitive as well as case sensitive sorting when sorting by names. It supports two new sort functions for this.
    • FXFileList also directly accepts a new message ID_SORT_CASE to toggle case-sensitive sorting. The default is now to sort case-insensitively.
    • The sort functions have been renamed with more human-readable names.
    • FXText and FXTextField now support a new ID_DELETE_ALL message. As the name indicates, it deletes all the text in the widget.
    • Some initial support for OpenWatcom C++ has been added. more to come in the future.
    • FXRuler is progressing. You can get an idea what it will look like now.
    • FXGLVisual now thinks a visual with RGBA is OK even if you asked for RGB. Some high-end video cards (ATI) support RGBA and no RGB. For those that do, RGB is preferred over RGBA if you asked for RGB.
    • FXFileDialog's right-mouse menu offers case-ignore as an option; so does PathFinder.

    February 25, 2003 - New drop: DEVELOPMENT FOX 1.1.23

    Of course, all bugs from the STABLE release are now also fixed in the DEVELOPMENT release. Other news:

    • FXDLL should now compile properly.
    • FXSettings keys and section names are now no longer allowed to be NULL or empty.
    • FXCheckButton gained a new option, CHECKBUTTON_PLUS, with which you can change the appearance from a check to a plus or minus box similar to FXTreeItem; the intended use of this feature is to connect FXCheckButton to a layout manager, whereby the layout manager can be collapsed or expanded via the ID_TOGGLE_SHOWN method; for this reason the plus-sign is shown when the state is FALSE, i.e. when the associated layout manager is collapsed.
    • FXTable has two new API's, getMinRowHeight() and getMinColumnwidth() which compute the minimum height or width of a row or column in the table based on the contents of the items; this substantially simplifies setting up a sensible initial table display.
    • FXTableItem's getHeight() and getWidth() now yield sensible values; your subclass of FXTableItem should overload them if the size computation needs to be different.
    There have been a few changes to the FXGLViewer:
    • Dropped the SURFACEPROJECTION and SURFACEPROJECTION display lists; the reasons were two-fold: first, display lists may be shared between FXGLViewers and it was never clear whose projection matrices were in the display lists; second, there is a better way to obtain the desired effect in the form of the OpenGL 1.1 Polygon Offset extension; since OpenGL 1.0 is ancient history now, the time seemed ripe to ditch the old method.
    • FXGLViewer now supports a gradient background; this is simply enabled by setting the top and bottom background color to different values; setting them to the same values will revert to the uniform background mode. You can connect an FXColorWell to the upper and lower gradient color and control the gradient easily from your GUI. The default gradient background is a blue-sky; most people would like this I hope.
    • The VIEWER_LOCKED feature has been removed; we found no one was ever using it and it was not so useful anyway.
    • We now try a little bit harder getting the OpenGL context into a known state before calling scene->draw(). This is partly because we need it for the gradient background drawing.
    • Support for shift-click and control-click selection, as well as shift-lasso and control-lasso is now being improved; the FXGLViewer can distinguish between them based on mouse movement: if the mouse moves, its a lasso otherwise its a click. While not entirely finished yet, the basic idea is to give FXGLViewer similar callbacks as the list widgets, and give the application more control over the interpretation of the mouse events.
    Other issues:
    • Slight problem in FXLabel and a few similar widgets fixed: FXString now remembers its length, and this should be used to find the end of the string.
    • Fixed almost all compiler warnings (Linux, GCC 3.2). ANY warnings still left in the code are intentional! Don't complain about them, they will be fixed when the time comes!!
    • Adie is still broken, sorry! Use the version in the STABLE RELEASE! It is still under development, but I'm kind of busy right now so its taking more time than I would have liked.
    • PathFinder gained some nice Preferences Panel; more is coming. The current version of PathFinder is not finished, but the functionality that's there is stable and solid.
    • The initial precision in the FOX calculator has been dropped to 15 digits; some people complained about roundoff errors (of course, double precision is only accurate down to about 16 digits so roundoff errors in the 16th digit are to be expected). I dropped the precision down to 15 because I don't like to explain this repeatedly!

    February 25, 2003 - New drop: STABLE FOX 1.0.34

    Over the course of the last week, a number of minor issues have surfaced which are now fixed.

    • FXFileDialog now sets both anchor and current file to the same when you suggest an initial filename when opening a file. Thus, a sunsequent shift-click in multiple select mode now indeed highlights all files between the suggested selection and the one you click on; a minor thing but an annoyance to some.
    • FXTextField could not easily tolerate contents exceeding a few thousand characters; this was the result of both X11 and WIN32 internally working within a 16-bit coordinate system; this caused trouble drawing and highlighting the text inside FXTextField. The fix to figure out which characters of the string have a remote possibility of falling inside the visible area, and then only drawing those. As a side-effect, the amount of data in the drawing protocol is now also substantially less in such cases resulting in faster drawing.
    • An accelerator Ctl-A has been added to FXFileDialog to select all files. Many people will find this convenient. Also, you can select all files from the righ-mouse popup menu.
    • The test in FXText in API extractStyle() and extractText() was a bit too strict; it is not necessary for the return buffer to be non-NULL if the amount of text to be extracted is zero-length.
    • A small typo has crept in FXRex in the match() API; a forward case-insensitive match would sometimes not work correctly.

    February 22, 2003 - New drop: STABLE FOX 1.0.33

    • Minor bug in FXFileDialog: when in multiple file selection mode, FXFileDialog::getFilename() was not returning a sensible value. This caused various kinds of mayhem in different places. The new implementation returns FXString::null when no files were selected, or returns the first selected file in multiple selection mode, or the value in the text box when in single selection mode.

    February 19, 2003 - New drop: STABLE FOX 1.0.32

    • Updated FXFileList; when no extension is bound, the file extension string becomes the extension of the file name. This permits sorting by extension even for files with no association.
    • Fixed bug in FXText; space-terminated last line could not be clicked by mouse.
    • Bug in FXRex fixed; incorrect behavior in forward match case-insensitive literal string.
    • Wrong callback message type in FX4Splitter.

    January 15, 2003 - New drop: DEVELOPMENT FOX 1.1.22

    • Updated FXDirList for unlimited path lengths. We found MAXPATHLEN to be exceeded in some case, just like FXFileList. Also, FXDirList now properly lists drives under Windows. Periodic scanning now happens non-recursively.
    • Renamed FXTreeList::sortItems() to FXTreeList::sortRootItems().
    • Added API's to move items around in FXTreeList.
    • Added API's to move items around in FXList and FXIconList.
    • Added API's to FXSpinner to set arrow colors.
    • Added new API's for loading DLL's or dynamic libraries:
      • fxdllOpen(). Opens a DLL with given name, returning a handle.
      • fxdllClose(). Closes DLL with the given handle.
      • fxdllSymbol(). Returns symbol in the DLL with the given handle.
    • This has only been coded for Linux and Windows. Other platforms will still need some work. Note that fxdllOpen() may be called multiple times on the same library name. We're counting on the underlying O.S. to reference count (Linux and Windows both do!).
    • Added API to FXApp to return drag window. This may be useful to determine which window is currently a drag source. Also added API to FXApp to see if FXApp was already initialized.
    • Added API to FXFile to return root of a path. On UNIX, this is only "/" but on Windows this may be something like "c:" or "\\".
    • Fixed FXString::vformat().
    • In a few days, fox-toolkit.org may go down for an unspecified amount of time as my DSL provider has gone under. Grab it while you can. Otherwise, visit the mirror site:
      • FTP: ftp://ftp.fox-toolkit.net/pub
      • HTTP: http://www.fox-toolkit.net/fox/fox.html

    January 9, 2003 - New drop: STABLE FOX 1.0.30

    • Minor bug fix:- fixed FXString::vformat(); vformat() uses vsnprintf() if available, vsprintf() otherwise. The former is buffer-overrun safe. Some systems have different symantics for vsnprintf(), and FOX now compensates for this.

    December 29, 2002 - ANNOUNCEMENT

      Due to my ISP (directvdsl) going belly-up, the FOX web-site may be temporarily unavailable sometimes. If this happens, point your browser to the mirror site:

      FTP: ftp://ftp.fox-toolkit.net/pub
      HTTP: http://www.fox-toolkit.net/fox/fox.html

    December 23, 2002 - New drop: STABLE FOX 1.0.29

    • Fixed drawing bug in FXTreeList. Drawing with TREELIST_SHOWS_BOXES but no
    • TREELIST_SHOWS_LINES was all messed up.

    December 5, 2002 - New drop: DEVELOPMENT FOX 1.1.21

    • Added new API's to FXString:
      • substitute() substitute one substring by another.
      • contains() count possibly overlapping occurences of a substring in the string.
      There are several overloads for these functions.
    • Clarified some documentation in FXApp, FXWindow.
    • Updated FXFileList to allow it to work with arbitrarily long file names, user names, group names, and directory names. Some people had paths longer than MAXPATHLEN and this caused problems.
    • Moved JUSTIFY_XXX options from FXLabel to FXFrame; various subclasses of FXFrame use these flags (but FXFrame itself does not, as it has no contents!).
    • Added support for JUSTIFY_XXX in FXImageFrame.
    • Added API FXFile::linkinfo(), which stats the link and not the file the link refers to.
    • Added flags TEXTFIELD_AUTOGRAY and TEXTFIELD_AUTOHIDE to FXTextField, enabling it to automatically gray (or hide) when its target does not respond to SEL_UPDATE messages. This is very useful when messages are routed around, e.g. via MDI widgets.
    • Added new widget, FXTriStateButton, which can assume three states (false, true, and maybe), where the maybe state is usually only reached programmatically or by means of SEL_UPDATE handlers. You can use this widget whenever your application calls for a toggle type button which may have indeterminate state.
    • Fixed small buglet in FXTextField; in rare cases, cursor position was outside of text.
    • Fixed bug in fxcpuid() implementation:- according to SYSV x86 ABI, EBX is used when compiling PIC for shared libraries; the initial implementation of fxcpuid() was usurping EBX for other uses. The x86/Linux-only API fxcpuid() returns some flags which detect various interesting features of your x86 CPU, such as SSE, SSE2, MMX, MMXEX, 3DNOW, 3DNOWEXT, and TSC presence.

    November 20, 2002 - New drop: STABLE FOX 1.0.28

    • A minor bug has been discovered in the BMP reader; sanity checking code erroneously rejected 4 bit/pixel RLE compressed bitmaps; apparently, these are pretty rare :-).
    • Fixed small buglet in FXOptionMenu:- GUI Update becomes disabled after manipulation of the option menu in some scenarios.
    • FXSettings had spelling error in warning message.
    • Small bug in FXFile::simplify(); simplify("c:\..\") became "c\" instead of "c:\".

    November 13, 2002 - New drop: DEVELOPMENT FOX 1.1.20

    • Added nifty API's to FXImage:
      • fill() fill image with a constant color.
      • hgradient() fill image with a horizontal gradient using two colors.
      • vgradient() fill image with a vertical gradient using two colors.
      • gradient() fill image with a bi-linear gradient using four different colors.
      • fade() fade an image to a given color by a certain factor.
      • blend() blend (transparent) image over a given color.
      Stay tuned for more image manipulation API's!
    • Added performance (LINUX/GCC/GAS/x86 only) API's:
      • FXlong fxgetticks() reads Pentium/Athlon time stamp counter register. This register increments one unit each single clock (for example on my Athlon 1600+ this means 1,400,000,000 ticks/second!). Very useful to settle heated arguments about whose code is faster :-)
      • FXuint fxcpuid() determines presence of "interesting" CPU features such as MMX, MMXEX, 3DNOW, 3DNOWEXT, SSE, SSE2, and presence of Time Stamp Counter register. You can use this function if:
        • You're using GCC/GAS/x86.
        • You want to whip up some cool inline MMX, 3DNOW, or SSE(2) code.
        If you're not using GCC and GAS, you'll have to do without!
    • Fixed small introduced bug in FXTextField:- when replacing selection, old cursor position was sometimes out of range.
    • Fixed small problem in FXFile. FXFile::absolute("c:\..\") was yielding "c\" instead of "c:\".
    • Added feature to FXHeader:- when clicking on split between captions, a SEL_CLICKED message is sent to the target.
    • Added feature to FXIconList. When receiving a SEL_CLICKED message from FXHeader, FXIconList recomputes the minimal required space for the caption, given the current list of items in it.
    • Made slight change to behaviour of FXTextField. When replacing selection by another string, only a single callback message now results.
    • Added getNumOptions() API to FXOptionMenu. FXOptionMenu also sends a SEL_COMMAND message now after completion of the interaction. Also fixed GUI updating of FXOptionMenu.

    October 30, 2002 - New drop: DEVELOPMENT FOX 1.1.19

    • Changed workings of FXMALLOC() and co. again; the initial theory, I have to admit, was flawed and impractical; the new workings however are far more practical:
      • FXMALLOC(ptr,type,no)
        Allocate no elements of type to the specified pointer. Return FALSE if size!=0 and allocation fails, TRUE otherwise. An allocation of a zero size block returns a NULL pointer.

      • FXCALLOC(ptr,type,no)
        Allocate no elements of type to the specified pointer, and clear this memory to zero. Return FALSE if size!=0 and allocation fails, TRUE otherwise. An allocation of a zero size block returns a NULL pointer.

      • FXRESIZE(ptr,type,no)
        Resize a previously allocated block of memory. Returns FALSE if size!=0 and reallocation fails, TRUE otherwise. If reallocation fails, pointer is left to point to old block; a reallocation to a zero size block has the effect of freeing it.

      • FXMEMDUP(ptr,type,src,no)
        Allocate and initialize memory from another block. Return FALSE if size!=0 and source!=NULL and allocation fails, TRUE otherwise. An allocation of a zero size block returns a NULL pointer.

      • FXFREE(ptr)
        Free a block of memory allocated with either FXMALLOC, FXCALLOC, FXRESIZE, or FXMEMDUP. It is OK to call free a NULL pointer.

    • Fixed harmless bug in FXTable.
    • Removed radio and check behavior from FXMenuCommand; this functionality is now assumed by FXMenuRadio and FXMenuCheck.

    October 26, 2002 - New drop: DEVELOPMENT FOX 1.1.18

    • Fixed argument test in FXText:- NULL text argument is allowed if size is zero.
    • Fixed drawing bug on MS-Windows in FXMenuRadio.
    • Fixed potential buffer overrun in FXFont.

    October 25, 2002 - New drop: DEVELOPMENT FOX 1.1.17

    • Changed FXMALLOC(), FXRESIZE(), FXCALLOC() macros very slightly; FXCALLOC() and FXMALLOC() new always return a NULL pointer and a FALSE return value when a zero size is passed; previously, this depended on the underlying malloc() implementation of the operating system, and operating systems varied in this behaviour. Also, FXRESIZE() returns a NULL pointer and FALSE return value when resizing to zero size; again, operating systems varied in this behaviour. With these changes, it works the same on all operating systems.
    • FXIconList, FXList, FXTreeList was trapping KEY_Delete; this prevented a KEY_Delete from being used as an accelerator.
    • FXTable was not compiling with Borland C++ builder. Fixed.
    • FXMetaClass destructor was not releasing hash table properly; moreover, was causing divide by zero in a few cases. The new implementation releases all memory and can't possibly divide by zero, because the modulo operator has been replaced by bit-wise and; this is possible because the hash table is always a power of two.
    • FXFile Dialog has accelerator for delete file.
    • All messages should now use the new FXSEL, FXSELTYPE, and FXSELID macros. Note FXSEL has the arguments reversed, and the argument order is now the same as the one used in FXMAPFUNC and FXMAPFUNCS; hopefully, this is easy to remember.

    October 8, 2002 - New drop: DEVELOPMENT FOX 1.1.16

    • Regressed API's to return FXString rather than const FXString&, for the following reasons:
      • Not consistent. Some API's *compute* their returned FXStrings, so you're always going to have some API's which can never return const FXString& anyway; but conversely ALL API's can return FXString no matter what, so if its consistency we want then the old way is the only way!
      • I don't want to encourage people hanging on to pointers into the private member data of classes; see previous mail on this topic; this reduces my ability to change internal representations of widgets.
      • Its not as painful (in terms of run time) as it looks:- many access functions are inlines, and the compiler can decide to eliminate a few copy constructors (if not automatically, then at least with some encouragement like the option "-felide-constructors" for GCC ).
      • Once all widgets store FXWString internally, you will really thank me for this:- because if we do it the old way, your software can remain unmodified (thanks to conversion operators between FXString and FXWString), but if we go the via the "const FXString& " route then all the software which tries to take advantage of your trick would have to be rewritten!
    • Added API's to FXTable to control item appearance:
      • setItemJustify() changes justification
      • setItemIconPosition() changes icon position relative to the text
      • setItemBorders() changes item's border style
      • setItemStipple() changes item's stippling
    • Added patch from Petri Hodju for FXToggleButton's TOGGLEBUTTON_KEEPSTATE implementation. When this flag is passed to FXToggleButton, the button stays pressed if the state is TRUE.
    • Removed __FXMETACLASSINITIALIZER__ from FXObject.h. FXMetaClass is now made into a proper class instead of a struct. At startup time, the FXMetaClass's constructor adds the class to the hash table of meta classes, and at termination time the FXMetaClass's destructor takes the class back out.
      This means if you build DLL's with FOX classes in them loading and unloading the DLL will properly add or remove the class names from the hash table.
      This will allow objects to be serialized/deserialized even if they're in a DLL! The only thing left to do is to use the escape code in FXStream to actually load the DLL and we have a proper Plug-In architecture.
    • Fixed fxmalloc(), fxcalloc(), and fxresize() so that they return NULL when the desired size is zero; straight malloc() will not do that on all systems.

    October 3, 2002 - New drop: STABLE FOX 1.0.26

    • Janusz Ganczarski found a very minor bug in the PCX loader code; some PCS images failed to load because of this.
    • Fixed bug in FXFile (MS-Windows) in recursive copy routine (see previous announcement).
    • Bug in FXToolbar getDockingSide().
    • Fixed some stuff in FXTable w.r.t. spanning cells.
    • Fixed some stuff related to file time in FXDirList; also, handle was not being closed at the right time, preventing timely directory refreshing; finally fixed sporadic crash.
    • Window coordinates and size not updated at the right time (MS-Windows) relative to the SEL_CONFIGURE message being issued.

    October 2, 2002 - New drop: DEVELOPMENT FOX 1.1.15

    • Changed internal representation of FXString; the end-of-string character ('\0') is no longer special and all possible bytes are now allowed.
    • Added new API's to FXString:
      • length(int) changes the length of the string buffer to the given size.
      • section() extracts num segments starting from start from a string delimited by delim.
      • simplify() simplifies white-space in string.
      • before() returns characters before n-th occurrence of ch, starting from begin.
      • rbefore() returns characters before n-th occurrence of ch, starting from end.
      • after() returns characters after n-th occurrence of ch, starting from begin.
      • rafter() returns characters after n-th occurrence of ch, starting from end.
      • find() searches for character, starting from begin.
      • rfind() searches for character, starting from end.
      • find() searches for n-th occurrence of character, starting from begin.
      • rfind() searches for n-th occurrence of character, starting from end.
      • find_first_of() searches for first character in a set, starting from begin.
      • find_last_of() searches for first character in a set, starting from end.
      • find_first_not_of() searches for first character NOT in a set, starting from begin.
      • find_last_not_of() searches for first character NOT in a set, starting from end.
      • escape() returns a string where all special characters are escaped.
      • unescape() returns a string where all escaped characters are turned back into special characters.
    • Some API's of FXString are now removed:
      • extract() is replaced by the much more flexible section().
      • findf() is replaced by find().
      • findb() is replaced by rfind().
      • size() no longer exists.
      • size(int) no longer exists.
      Note that these changes give FXString an API more consistent with the standard std::string class.
    • New API's to replace some old ones:
      • fxparseAccel() replaces the old fxparseaccel(). The new flavor takes an FXString parameter.
      • fxparseHotKey() replaces the old fxparsehotkey(). The new flavor takes an FXString parameter.
      • fxfindHotKey() replaces the old fxfindhotkeyoffset(). The new flavor takes an FXString parameter. Also, the new version correctly counts when && occurs in the string.
      • fxstripHotKey() replaces the old FXString::extract().
    • Added a new type FXwchar. This is a wide character for UNICODE.
    • Added a new class FXWString. This is currently under development, and should NOT be used at this time.
    • Added a new class FXTextCodec. FXTextCodec's subclasses will provide (state-less) conversions between UNICODE and other character sets.
    • Made further improvements to FXTable widget.
    • Changed many API's in FOX to return const FXString& instead of FXString. This will eliminate a copy constructor in many cases, and thus speed things up a lot.
    • Added option MBOX_SKIP_SKIPALL_CANCEL to FXMessageBox. Handy if the same dialog can appear for multiple errors.
    • Fixed core dump bug in PathFinder. Destructor was deleting uninitialized data.
    • Added help-tag to FXWindow. Each widget may now have a help tag, which is intended to be a URL for context-sensitive help for widgets and controls. Utilization of this info is currently up to the programmer.
    • Reformatted some web pages for Mozilla.
    • Updated some API's to FXArray and FXObjectList.
    • Added more error checking into PNG and JPEG loader; a bad image file should not cause an application error anymore, but a simple error code will be returned. Also, the FXImage will be set to empty when a bad file format did not read.
    • Fixed bug in FXFile (MS-Windows) in recursive copy routine.
    • FXImage, FXIcon, FXBitmap have been made a bit more forgiving when size is 0x0; it no longer terminates the application but creates a 1x1 image instead.
    • Changed API's loadPixels() and savePixels() of the various FXImage-derived types to return a boolean which indicates success or failure.
    • FXMenuCheck widget added which will draw a check box beside the caption.
    • FXWindow::destroy() and FXWindow::detach() will reset FXApp::focusWindow and FXApp::cursorWindow.
    • FXDirList bug fixes:- currentitem and anchoritem were left pointing to deleted items in some cases. Also, directory scanner caused some problems in some cases due to CreateFile() holding handle while FindFirstFile() was trying to open directory for scanning.
    • Sublte bug with SEL_CONFIGURE fixed:- on Windows v.s. Unix, the width and height of the widget were different while in the callback.
    • Added to FAQ.

    August 29, 2002 - New drop: DEVELOPMENT FOX 1.1.14

      Of course, all bugs found so far in the stable releases have been fixed in the development release.
    • Some API's renamed in FXList, FXIconList, FXHeader, FXComboBox and FXListBox:- retrieveItem() has been renamed to getItem(), and replaceItem() has been renamed to setItem(). Its much easier to remember this way.
    • FXTable button mode cells now get pressed (thanks to Alastair Growcott for the patch).
    • Added assign() API's to FXString. Makes it easier to fill FXString with some text.
    • Added FXMenuCheck, FXMenuRadio classes. These will subsume the FXMenuCommand for checked menus and radio menus; FXMenuCommand will just be a command.
    • FXMDIClient no longer derived from FXScrollWindow. This will entail fewer problems.
    • FXSeparator class added. It automatically flips based on width:height ratio.
    • Added tag string to FXWindow for on-line help tagging of widgets; help systems may use this to provide context sensitive help for controls or dialogs.

    August 29, 2002 - New drop: STABLE FOX 1.0.22

    • A slight tweak has been implemented in FXFileList's collating functions:- instead of just sorting based on type, size, etc. it now also sorts on the name if the type, size, etc. are the same. So if you sort based on e.g. file type, then within each file type, the list is now lexicographically sorted.
    • Minor bug with FXShutter widget fixed. This one shouldn't really have affected anyone.

    August 22, 2002 - New drop: STABLE FOX 1.0.21

    • Finally, hardware problems over here at fox-toolkit.org seem to have been resolved! Funny thing is, we're not even overclocking! But nevertheless an Athlon in Alabama in summer on a sunward-facing room has appeared to be a real challenge!
    • As of this week, there has been an addendum to the Lesser General Public Licensegoverning the distribution of FOX. The intent of the change is to make it more practical for applications to link statically against FOX; please refer to the license statement for the details.
    • Minor bug in FXGLViewer fixed related to image printing.
    • Minor buglet in FXTopWindow::setDecorations() fixed.
    • FXDriveBox, FXDirBox suffered from uninitialized memory reads:- thanks to valgrind, we found out about this and fixed it.
    • Fixed a few bugs in removeRows() and removeColumns() were inconsistent and did not properly deal with with spanning cells. Also setTableSize was fixed and now initializes cells to be empty, i.e. NULL.
    • FXList, FXIconList delete items in reversed order, i.e. starting with the last item. This makes maintaining your own parallel list much easier.
    • Fixed problem in FXSpinner.
    • Esoteric FXFileList bug fixed (Windows) certain programs (e.g. older version of ws_ftp) set bogus file time on files, this caused FOX to crash.

    July 25, 2002 - New drop: FOX 1.0.17

    • Fixed FXList, FXIconList, FXTable callback. When current item or current row/column is removed, SEL_CHANGED callback is generated.
    • Fixed FXPopup menu behavior under Windows.
    • Added preliminary support for Digital Mars C++ compiler.
    • FXFileList sort by modification date bug was fixed.

    July 16, 2002 - New drop: FOX 1.0.15

    • Some patches for Digital Mars C++.
    • Only update widgets of new color setting is different from old.
    • FXTabItem was using the wrong code to draw itself.
    • File time problem retro-ported from development version.

    July 1, 2002 - New drop: FOX 1.1.13

    • Patch from Janusz Ganczarski to add support for 16bpp BMP format files.
    • Another patch from Janusz to add support for 32 bit BMP format, as well as some bug fixes to the TARGA image format support.
    • Made FXMDIChild draw nicer, by adding interior sunken border.
    • Added API's to FXMDIClient for various window placement manipulations.
    • Fixed FXMDIClient no loner derives from FXScrollArea. This allows opaque dragging of FXMDIChild windows.
    • Adding a FXRuler widget. Ruler widget may be used to place tickmarks and numbers around another widget, for example drawing document; this one will still need lots of work.

    July 1, 2002 - New drop: FOX 1.0.14

    • BMP i/o support for 16, and 32 bit, in addition to already implemented 1, 4, 8, and 24 bit BMP images was added.
    • Potential infinite loop in FXImage::restore() was fixed.
    • In FXMatrix, getNumRows() and getNumColumns() should not depend on child's visibility.
    • FXTable: colors should default to normal back color.

    June 19, 2002 - New drop: FOX 1.1.12

    • Added FXWizard class, and new wizard demo application.
    • Added fxparsegeometry() function to parse string of the form: "[=][{xX}][{+-}{+-}]" Into a width, height, x, and y value.
    • Fixed FXProgressBar to be flicker-free when setProgress() is called repeatedly; this is done by directly drawing it in the setProgress() call.
    • Added a new widget, FXImageFrame, which may be used for simple rendering of images.
    • Split the Adie text editor into multiple top-level windows. This allows a single editor to open any number of documents at the same time. Adie is UNDER CONSTRUCTION right now and NOT FULLY FUNCTIONAL!!
    • Added setCancelled() API to FXProgressDialog.
    • Added maximize(), minimize(), restore() API's to FXTopWindow. Also added isMaximized(), and isMinimized() API's. The old iconify() and deiconify() has been superceeded by these new API's. The new API's are implemented in terms of the new Extended Window Manager Hints standard.
    • New API close() added to FXTopWindow added to close a top level window. The close() API will only close the window after consulting the FXTopWindow's target, if any, whether it is OK to do so. When there is no objection, the FXTopWindow will be deleted. When the last FXMainWindow is closed, the application will receive an ID_QUIT message.
    • Polarity of SEL_CLOSED message return value has changed; returning 0 means "no objection" i.e. proceed with the closing. Rationale:- when there is no target, or when the widget's target does not respond, closing the window should proceeed.
    • Added drawing a chord arc fill drawing method to FXDCWindow. This augments the pie sector method already present.
    • Added polygon region constructor to FXRegion.
    • Fixed some idiosyncracies in FXText. When typing to replace a selection with new text, two callbacks, instead of one, were being generated. This implied that a single action needed two undo's to undo it.
    • Also fixed was a little quirk that happened when a paste was being performed inside an existing selection. This is now blocked.
    • FXTopWindow's now appear where they're supposed to, at least on ICCCM compliant Window Managers; borders are discounted as far as placement of window is concerned.
    • A new API isOwnerOf() added to FXWindow which is used inside FXApp to determine whether events are passed to a window or not. The upshot is that modal dialogs can now create non-modal subwindows, and thus events are passed to all windows owned (and ownership is transitive!!) by the modal window, and blocked elsewhere.
    • Fixed various focus sublteties, and simplified focus assignment code. The subtleties are for example the assignment of the focus to a child window of a composite, when the focus were to move to the composite. This is useful for mega widgets which need to force the focus on a specific child window when they get the focus.
    • Added golden ratio constant in FOX Calculator.

    May 12, 2002 - New drop: FOX 1.1.9

    • New FXGradientBar widget is now ready for business! Allows for drag and drop of colors, various color blending features ranging from linear to quadratic, and furthermore horizonal or vertical orientation.
    • FXDict, FXMetaClass now deploy a faster, in-lined hashing function. This should translate into slightly faster application startup times.
    • Various API's to FXWindow turned into "const" members.
    • New API getTempDirectory() added to FXFile.
    • FXFileList worked oddly if weird file mod time was found.
    • Memory leaks fixed, thanks to valgrind.
    • Tentatively added FXGzStream and FXBzStream classes for gzip and bzip2 compressed I/O streaming support.
    • FXApp now remembers original display variable passed in. This can be used for later opening of display.

    April 5, 2002 - New drop: FOX 1.1.8

    • New widget, FXGradientBar, which is used to build color gradient ramps (e.g. for OpenGL texturing...).
    • Removed limitation of single FXMainWindow; this means the API FXApp::getMainWindow() has now disappeared. When the last FXMainWindow is closed, the application ID_QUIT is invoked, terminatin the application.
    • Behaviour of middle mouse paste in FXText was simplified; this makes a paste of a selection work properly, even if the paste occurs in or near the current selection!
    • Introduced name spaces. All FOX API's are now in the namespace "FX", thus the vast number of possible identifier clashes are now avoided; note that a great number of #define's have now been replaced by enum's.
    • Renamed FXApp::getRoot() to FXApp::getRootWindow() for consistency.
    • Renamed a number of widgets. Various widgets have over the course of time gotten names which did not adhered to the current nomenclature; this made them more difficult to memorize. These widgets have now been renamed for greater consistency:
      • FXTooltip becomes FXToolTip
      • FXToolbar becomes FXToolBar
      • FXScrollbar becomes FXScrollBar
      • FXMenubar becomes FXMenuBar
      • FXStatusbar becomes FXStatusBar
      • FXStatusline becomes FXStatusLine
      • FXToolbarShell becomes FXToolBarShell
      • FXToolbarGrip becomes FXToolBarGrip
      • FXProgressBar becomes FXProgressBar

    February 26, 2002 - New drop: FOX 1.0.0

    • Yes, I went to 1.0!!! Why not? The code has been *very* stable for a while, and its time we called it what it is:- the 1.0 release!
    • New API's to FXString. FXString::vscan() and FXString::scan() are API's to parse a string via sscanf-style format conventions. This is very useful in many cases, and obviates the need for some complex coding in the past.
    • New API's to FXRegistry (actually, FXSettings). FXSettings::readFormatEntry() and FXSettings::writeFormatEntry() perform sscanf- and sprintf-style access to registry database strings. As with FXString, this obviates the need for complex coding and is very compact and convenient.
    • Removed deprecated functions from fxdefs.h. The following functions have been removed: fxprefix(), fxsuffix(), fxexpand(), fxpathname(), fxdirpart(), fxfiletitle(), fxfilepart(), fxfileext(), fxexists(), fxisdir(), fxisfile(), fxbakname(), fxidentical(), fxsplit(), fxshortestpath(), fxupdir(), fxabspath(), fxistopdir(), fxgetcurrentdir(), fxmkdir(), fxgethomedir(), fxsearchpath(). These functions have been moved to the file: fxdeprecated.h and fxdeprecated.cpp. Should your application need them, simply include these two files into your project. Note, the functions above have better maintained, and easier-to-use equivalents in the FXFile namespace.
    • A new file, vsscanf.cpp, was added for those systems where vsscanf() and its ilk are not available. Under Linux, and other C99 standard compliant C Libraries, this file is not used.
    • Added some missing API's to FXListBox, FXComboBox, and FXTreeListBox; simplified internals of these widgets a bit.
    • Fixed some FXDirBox problems; removed reliance on deprecated API's.
    • Added a SELECTFILE_MULTIPLE_ALL to FXFileSelector (and FXFileDialog). This mode allows selection of a mix of files and directories. The mode SELECTFILE_MULTIPLE works as before, and selects only multiple, existing filename names (and no directories).
    • Fixed FXPopup focus navigation:- hidden menu items should not be focused upon.
    • Fixed little biddy problem in FXText and style settings.
    • Fixed text in FXReplaceDialog and FXSearchDialog; was not proper.
    • Fixed little problem in FXRex::substitute().
    • Fixed some minor configure issues. You can pass overrides for JPEGLIB, PNGLIB, TIFFLIB, ZLIB, and MATHLIB. This is useful if you want to force a different library than the one found in the usual places (for example if you loaded a newer version than your system came with, or want to force static linking, etc.). Also added a test to search for vsscanf() function in your C library.
    • Added quick-and-dirty, ad-hoc, "hack" to Adie for syntax coloring. It still piggy-backs on the timer. However, the dialogs to set up highlight styles, language recognition, and syntax patterns is essentially complete. You can now add and remove, and edit syntax patterns fairly reliably. I added a sample C++ and C syntax file you can drop into your .foxrc/Adie registry (or in any of the usual global registry places /usr/lib/foxrc/Adie, /usr/local/lib/foxrc/Adie, etc.) to kick-start some patterns to get you started. The stylizer can now also use patterns with back-references, or capturing parentheses; I will still figure some way to color captured parentheses some day as well.
    • WANTED: syntax patterns for various languages: PERL, RUBY, PYTHON, HTML, XML, Pascal, Eiffel, and whatever else you can think of. I will collect these patterns and distribute them in future versions of Adie.

    February 5, 2002 - New drop: FOX 0.99.193

    • Added new mode SWITCHER_HCOLLAPSE and SWITCHER_VCOLLAPSE to FXSwitcher; these will cause the FXSwitcher to collapse its default height or width to the currently active child's height or width, respectively.
    • Fixed bug in FXDriveBox. The option to report errors went away as FXDriveBox does not set the current drive anymore:- it just sends a message.
    • Fixed declaration in FXStringDict API: API's yield const strings.
    • Added support for SGI IRIS RGB Image input and output, as well as corresponding image and icon classes.
    • Completed editing of style-entries in Adie (language mode and pattern panels not complete yet). Minor style-coloring engine improvements.
    • Incorporated documentation man-page for Adie, PathFinder, and Calculator.
    • Fixed bug in FXText::changeStyle.
    • Added missing API's to FXListBox, FXTreeListBox, FXComboBox.
    • Fixed grooved border drawing.
    • Relaxed syntax of section and group name in FXSettings database [was too strict earlier for no good reason].
    • FXWindow issues SEL_MOTION events.
    • FXRex properly observes REX_NEWLINE for \D, \s, \W, and so on.

    January 8, 2002 - New drop: FOX 0.99.189

    • Optional style buffer was added. FXText takes roughly same amount of memory/text, unless style buffer is turned on in which case memory usage doubles to store the style information.
    • Style table support was added. You can specify up to 127 different styles, where a style is a combination of fg/bg colors for normal, selected, or highlighted display, i.e. 6 different colors.
    • New API's added to manipulate contents of the style buffer. First, normal API's like appendText() and so on now have an equivalent appendStyledText(). The style is a single value 0-127 indexing into style table, to which 128 may be added to achieve underlining. This makes it very easy to add colorful text....
    • Its still possible I will add flags to the style table for underlining instead of use a bit in the style buffer; I don't know yet...
    • changeStyle() changes the style w/o affecting the text.
    • Despite the style additions, drawing has actually been speeded up quite a bit, as some old crap has been removed:
      • drawing is split into painting the background and painting the text over it. This may alleviate some problems on SGI with XDrawImageString.
      • drawing no longer loops over virtual characters, it just rect-fills the tail-end of a line; this is of course much faster.
      • even better, drawing also accumulates runs of spaces and tabs into a single rect-fill; needless to say that is also much faster.
    • FXText now maintains a c&ursor column in terms of the indent offset from the row start, rather than byte offset. This means that while moving up/down in the buffer the preferred column is much better observed when tabs are around (it can't be perfect as we can not move the cursor in the middle of a tab!).
    • incremental movement of the selection/highlight is now much better optimized:- special cases for when the highlight overlaps (e.g. extended by being dragged), v.s. disjunctis now taken care off.
    • also minor buglet caused tail-end of line to be exposed when the last character was highlighted, this was fixed also.
    • FXText no longer sends SEL_REPLACED. instead, it sends SEL_DELETED followed by SEL_INSERTED. Obviously, this is better as it allows for inspection of the new buffer contents in SEL_INSERTED. [You need to be able to inspect the buffer after a change so you can update the style info......].

    December 31, 2001 - New drop: FOX 0.99.188

    • Made some minor API changes to FXRex::match. It can now scan not ony forward and backward in a smaller subrange of the entire string; it can also perform just a single match attempt when the subrange is empty. Scanning a subrange of the string is useful, as its not the same as just passing in a smaller string!
    • A new flag REX_VERBATIM was added to FXRex. This compiles a pattern with no interpretation of magic characters or escape codes. Useful to apply the FXRex machinery to literal strings. Note that case-insensitive flag may still be used!
    • Added REX_SYNTAX mode to FXRex also. This causes FXRex to perform only a syntax check; compiling the pattern takes roughly twice the time as just syntax checking it.
    • Added REX_NOT_EMPTY. This causes match to fail when matching empty string. Changed MATCH_FORWARD to REX_FORWARD for consistency. Added more documentation for FXRex as well.
    • Added regular expression search and replace capability to FXText; FXText::findText() API may still need some minor revision, however!
    • Found & fixed nasty little bug in FXFileDict. Was never noticed on UNIX systems by pure chance.
    • Dropped fxregex.h. It is obsoleted by FXRex. FXRex is a more powerful matcher, and is easier to use to as well. If you still need the old files, they're available as fxregex.h and fxregex.cpp should you need them; I recommend however to switch to FXRex so as to be able take advantage of PERL-compatible syntax.
    • FXList now allows arbitrary icon sizes to be mixed. This also means when using subclasses items, they don't have to be all the same size!
    • Added facility in FXScrollArea for subclasses to easily map the mouse wheel to horizontal scrolling instead of the default vertical scrolling (when wheeling inside the widget).
    • Fixed drawIconShaded for WIN32; the pattern offset must be adjusted when scrolling.
    • Added API drawFocusRectangle to FXDC. This is now used everywhere to draw a dotted
    • rectangle. Hopefully this fixes bad-looking focus rectangle under Windows. The drawFocusRectangle() API was removed from FXFrame as it is now part of FXDC.
    • Fixed a few warnings, and one uninitialized memory read in FXTable.
    • Completed FXSlider tickmark drawing. If tickmark delta set to 0 (zero), the ticks will be placed at each position in the logical range; otherwise, they're placed every delta units in the logical range.
    • Fixed FXFile::isExecutable() API (and similar ones like isOwnerExecutable()).
    • The POSIX function access() was not working as advertised under Windows.
    • FXMessageBox buttons rearranged in the order according to FOX style guidelines.
    • FXLabel::onHotKeyPress() was not moving the focus to the following widget if the widget was a composite, only if the sibling was a simple control. This caused label-mnemonics not to move the focus correctly when the next focusable control was in a composite.
    • FXReplaceDialog. Small accelerator conflict fixed.
    • Warnings in fxpcxio.cpp fixed.

    December 19, 2001 - New drop: FOX 0.99.187

    • The new class FXRex for regular expressions is now finished.
      FXRex is a more modern matching engine, adding back-references, lazy or greedy matches, counted repeats, PERL-compatible character classes, escape codes for control-codes, hexadecimal or octal character entry, zero-width assertions, positive or negative look ahead, non-capturing and capturing parentheses, "cloistered" modes, and more.
      FXRex is also thread-safe: not only are no global variables used, but also can one FXRex-variable be used by multiple threads.
      FXRex allows unlimited pattern sizes, can search forward and backward through a subject string, returns proper syntax error codes, allows for multi-line and case-insensitive matching.
      FXRex is 8-bit safe (including end-of-strinf character), so you can use it on binary data.
      You can enter control-characters, octal or hexadecimal characters in the pattern.
    • Added documentation to FXRex class.
    • More small additions to FXFileDialog.
    • FXText much improved brace matching technique. Also added highlight capability, i.e. a new text style. This also has its own colors. It is currently used for the new brace matching method.
    • Added support in Adie for the above. Note brace match time must now be set in milliseconds, not microseconds.
    • Added method to FXInputDialog to set text field width.
    • Bullet-proofed FXString::left(), FXString::right(), FXString::mid(), and FXString::trunc() against bad arguments.
    • Fixed bug in FXTable drawing loops; references were made outside the cell array.
    • Fixed potential bug in ICO loader.
    • Added argument to FXApp::init() to suppress opening display. You can open display later using FXApp::openDisplay(). This allows FOX GUI's to start in non-GUI mode.

    December 10, 2001 - New drop: FOX 0.99.182

    • FXFileDialog supports context popup menu, adds copy, move, delete capability.
    • FXFile::concatenate bug fixed.
    • FXImage::getChannels() API added.
    • FXImage::setPixel(), FXImage::getPixel() API's added.
    • Small fixes to FXTGAImage, etc.
    • FXFileDict.  Compile-time option to enable all available image formats; see INSTALL file.
    • FXGLCanvas swapbuffers bug fix for Windows 2000/NT (in) compatibility.
    • Other stuff that has been reported in the past couple of weeks.

    November 27, 2001 - New drop: FOX 0.99.181

    • Widgets like FXText, FXTextField, and so on which absorb the Return key now make the default button loose the fat border.
    • The Return key is now reported to the default widget as ordinary SEL_KEYPRESS or SEL_KEYRELEASE messages.
    • The ID_INSERT_CHAR message in FXText and FXTextField has been deleted; a new message ID_OVERST_STRING has been added to implement overstrike mode capability.
    • The overstrike mode in FXText is now more sophisticated about spaces and tabs.
    • Added API's to FXImage: setPixel() and getPixel() to access image buffer on pixel by pixel basis.
    • Corrected API's to FXGLSphere.
    • Made ctx member of FXGLCanvas and FXGLContext protected.
    • Added some screen shots.
    • Made data() public in FXSettings; this is needed to write iterations over all sections.

    November 22, 2001 - New drop: FOX 0.99.180

    • Janusz Ganczarski has donated support for the TARGA image file format; this brings FOX's image support up to the following list: BMP, GIF, XPM, PCX, JPG, PNG, ICO, TIFF, and TARGA.
    • Note to MS-Windows users: FOX supports not only BMP images and icons, but also ICO format. This means you can design icons directly with VC++ built-in icon editor.
    • FXJPEGImage, FXJPEGIcon renamed to FXJPGImage, FXJPGIcon [but a typedef should keep your app compiling].
    • FOX now properly handles default buttons. The default button is the one responding to the Return key in a dialog. You can designate any number of buttons to become the default button when the focus moves into it. One special button is called the initial default button; the initial default button is the button that will initially be the default button. It is also the button to which the default returns when the keyboard focus moves to another control.
      For this purpose, the meaning of the old BUTTON_DEFAULT flag has been changed to mean that the button MAY become the default button. A new flag BUTTON_INITIAL means the button is the INITIAL default button.
    • New API's are available to set initial default widgets:
      setInitial(enable)
      This makes the window the initial default window, i.e. the target for the Return key.
      isInitial()
      This determines if the widget is the initial default window.
      setDefault(enable)
      This sets the widget to the default widget if enable is TRUE; if enable is FALSE, it makes the widget normal again; if enable is MAYBE, the default returns to the initial default window.
      isDefault()
      This returns true if the window is the default, i.e. the window which will get the Return key even if the focus is on another control. Of course it will not get the Return key if the other control handles the Return key.
    • Only one window can be the initial default, and only one window can be the default.
    • FXGLObject now starts counting at message ID=10000, this means you can make your FXGLViewer subclass start counting from FXGLViewer::ID_LAST, just as you would with any other subclassed widget.
    • FXStatusline and FXProgressBar now automatically call repaint() and flush() so you won't have to. This is useful to update these widgets while performing a long callback routine [e.g. reading a file].
    • FXSectionDict has disappeared. Basically, its only use was in FXSettings; what has happened is that FXSettings now derives from FXDict directly, and takes over all of FXSectionDict's functionality.
    • Fixed focus navigation in FXTopWindow.
    • Focus navigation in FXMatrix was moving to incorrect widget.
    • FXText could read out-of-bounds when searching.
    • Note, I did not implement Daniel Gehriger's menu patch yet; still looking at that issue some more.

    November 13, 2001 - New drop: FOX 0.99.179

    • Integrated Daniel Gehriger's keyboard patches. The fxkeyval API has now been removed:- instead, a new member "text" was added to FXEvent which contains the translated keyboard symbol(s).
    • The header file organization has been changed to allow programs to include only those widgets which are needed.
    • A resource leak in OpenGL context has been removed (under Windows).
    • The style BUTTON_DEFAULT causes a button to have the focus first time around; buttons which have the focus are drawn with a FAT border and respond to the Enter key.
    • The flag MENU_DEFAULT, and the setDefault() and setOther() API's have been removed.
    • The new API FXWindow::isDefault() returns TRUE if the widget is in the focus chain.
    • Updated project files for VC++.
    • Added stub-icon/images to be shown when JPEG, PNG, or TIFF libraries are not available; the stub images allow programs which use FXJPEGImage, FXPNGImage, and FXTIFImage to work with reduced functionality when the necessary libraries are not available.

    October 19, 2001 - New drop: FOX 0.99.177

    • Some minor bugfixes. Visual Studio Project files were broken and now fixed.

    October 16, 2001 - New drop: FOX 0.99.176

    • Due to the amount of time elapsed since last drop, there have been a lot of new things; for starters, we have some new widgets:
      • FXColorBar. This widget controls the brightness of a certain color in the hue, saturation, value system of color specification.
      • FXColorWheel. This widget controls the hue and saturation of a color in the hue, saturation, value system of color specification.
      • FXPicker. FXPicker is used to select stuff anywhere on the screen. Basically, you click once to activate it, and move to a location you want to identify, then click again. FXPicker reports the identified location using SEL_COMMAND, and updates while moving with SEL_CHANGED.
    • Janusz Ganczarski donated support for Windows ICO format support; we have both an FXICOIcon and FXICOImage classes. This is an important contribution because now you can create your icons simply from within VC++ or so without any other conversion step (other than the usual reswrap).
    • A huge amount of improvement to FXTable has been performed; we have more to do, but here's what's been done that you can now start to play with:
      • Table items support multiple-line text.
      • Items can contain icons.
      • Items can have all the usual internal layout, i.e. left,right,top,bottom, icon and text relative to each other BEFORE, AFTER, ABOVE, BELOW.
      • Items can have button appearance.
      • Items can have borders (each side is individually selectable).
      • Icons may be owned by the item or shared.
      • Items may have many different hatch-pattern backgrounds.
    • For the table itself:
      • Rows and columns may be resized interactively.
      • Even/odd cells background coloring.
      • Leading/trailing fixed rows and/or columns.
      • Empty (NULL) cells are now possible; a new item will be automatically created when you fill it with text/icon.
      • Budding support for so-called spanning cells; that is to say, a single item may span multiple rows and/or columns.
    • Popup menus improved under Windows, thanks to Daniel Gehriger.
    • FXFile::listFiles now has many matching modes.
    • FXFile::simplify() was much improved now; it was not entirely working correctly in all cases.
    • FXColorSelector has been augmented with a hue/saturation dial, a value bar, and a color picker.
    • Off-by-one error fixed in FXDCWindow::drawArc under MS-Windows.
    • FXDCWindow::drawIcon() FXDCWindow::drawIconShader(), FXDCWindow::drawIconSunken() have been fixed to take into account the clipping rectangle of the FXDCWindow. This may in some cases result in slightly faster/more flicker-free drawing, and of course it now clips correctly!!
    • Added another ctor to FXMessageBox in case there's no owner widget.
    • FXWindow::hide did not ungrab under Windows.
    • Fixed compile bug for Borland C++.
    • Fixed GUI updating problem in FXListBox, FXComboBox, FXTreeListBox.
    • Fixed problems which occurred when FXIcon, FXImage, FXFont, FXCursor resources were being deleted AFTER closing the display; now the destroy() function for all resources becomes a NO-OP after the display is closed; everything is assumed to be already gone!
    • FXDCPrint::drawImage now implemented for PostScript.
    • Sublt layout bug fixed in FXTabBook:- calculated size was a bit too wide given the content size.
    • FXSpinner was sending wrong parameter in message.
    • Extremely subtle buglet in FXSlider fixed.
    • API added to FXGLCanvas to return GL context.
    • FXPacker focus movement had potential infinite loop in it due to typo.
    • FXProgressBar dial mode drawing improved.
    • Drag and drop enabling was in wrong place.
    • Keyboard handling slightly changed; FXComposite now dispatches to accel table first before trying focus child.
    • Calculator does keypad now...
    • Adie updates.

    August 30, 2001 - New drop: FOX 0.99.175

    • Many new features were added.
    • FXSearchDialog and FXReplaceDialog now maintain a history of previous searches.
    • TextEdit has been renamed to Adie (Advanced Interactive Editor). FXText serialization was added.
    • Additions were made to the XWindow API to grab the keyboard to a window.
    • A new repaint function was added, which forces painting of part of a window before returning.
    • FXFile and FXURL were turned into name spaces.
    • Popups were improved.
    • FXCalculator now has its own Web page.
    • Lots of bugfixes were made in FXArrowButton,FXScrollbar,FXMDIChild, FXTextField, FXStream, FXFrame, FXPacker, FXTopWindow/FXShell,and FXApp.

    July 19, 2001 - New drop: FOX 0.99.174

    • FOX has a dedicated web site.
    • CUPS Printing support has been added.
    • PCX, TIFF, JPEG, XPM Image I/O support has been added.
    • FXProgressBar has a dial mode.
    • New Standard dialogs:
      • FXProgressDialog.
      • Search and Replace dialogs.
      • Input dialog.
      • Directory Selection Dialog
    • Dockable toolbar support has been added.
    • Socket and signal callback message support have been added.
    • Listing files, drive letters, and network neighborhood (Windows) have been added, and there have been many bug fixes.

    Copyright © 1997-2005 Jeroen van der Zijp

    fox-1.6.49/doc/focus.html0000664000175000017500000002646612130340076012116 00000000000000 Documentation: Keyboard Focus
    Documentation: Keyboard Focus [Remove Frame]

      There are several ways we currently move the focus around:

      1. Move the focus to the widget you clicked on.
      2. Use Alt-L to move the focus to the control AFTER a label with name &Label.
      3. Using arrow keys. The arrow keys currently inspect the geometry of the GUI to determine the next control; I believe this works pretty well [each layout manager needs its own code for the arrow navigation as different layout managers obviously have different layout patterns].
      4. Using TAB or BACK TAB. Here we simply move to the next sibling, or if that sibling is a composite, to that composite's first child. At the toplevel widget we loop around so we visit all widgets eventually tabbing around.

      So how does it work?

        top
         |
         |
         v
        composite#1
         |       |
         |       v
      child#1   composite#2
                 |       |
                 |       |
             composite#3 |
                         v
                        child#2
        

      Each widget may have a focus child; keyboard events are delivered to the toplevel widget (top).

      The concept of "focus chain" is the delivery of keyboard events from the top down to a specific control [in the diagram above this could be:

      	top->composite#1->composite#2->child#2
      

      for example.

      setFocus() puts a widget into the focus chain. If the toplevel widget had the REAL focus from the window system [the window manager only assigns keyboard focus to a toplevel window], then setFocus() generates a SEL_FOCUSIN message; note that in the process of child->setFocus(), the whole chain is built up by upward recursion, and the child does not become switched into the focus chain until the parent is also.

      The recursion stops when we either reach the toplevel widget or we find a widget which was already in the focus chain. Of course widgets which leave the focus chain by means of killFocus(), which works very similarly.

      So if we had a focus chain:

      	top->composite#1->child#1
      

      and assign the focus to child#2, and if the toplevel widget had windowmanager's focus already, we will see events like:

      	child#1      SEL_FOCUSOUT
      	composite#2  SEL_FOCUSIN
      	child#2      SEL_FOCUSIN
      

      If we click on another toplevel window, we get:

      	child#2	     SEL_FOCUSOUT
      	composite#2  SEL_FOCUSOUT
      	composite#1  SEL_FOCUSOUT
      	top          SEL_FOCUSOUT
      

      These messages permit the application to provide visual cues as to where the focus is.

      If a widget has a focus child, then first an attempt is made to forward the keyboard event to that focus child. If the child handles the keyboard event then it returns 1 and we're done.

      If a child is itself a composite, it will in turn try its focus child.

      If the focus child of a composite did not handle the keyboard event then the composite will try to interpret the navigation keys (Tab/Backtab/Arrows). These are translated into SEL_FOCUS_NEXT, SEL_FOCUS_PREV, SEL_FOCUS_RIGHT, SEL_FOCUS_LEFT, SEL_FOCUS_DOWN, and SEL_FOCUS_UP messages, respectively.

      If a composite successfully interprets the navigation key, i.e. manages to find a successor widget to set the focus on, then it returns 1. Otherwise it returns 0 and the next composite higher up can have a shot at interpreting the navigation keys.

      I got the focus movement basically working (the mechanism); run groupbox and tab/backtab your way between all the buttons. Hitting space or return with focus on a button will now invoke it just as if you had used the mouse. Not all widgets properly cooperate with it yet. [Widgets which can accept the focus should return TRUE in their overload of canFocus() ].

      The dispatch of keyboard events is now implemented. Here's how it works:

      • Each widget has a focus, which indicates the current child that has the focus.
      • When a key is pressed/released, it first gets sent to the shell widget.
      • If the widget's focus variable has been set, it will first try to dispatch the event to the focused child.
      • If the focus widget is not set, or if the focus widget didn't handle the key event, this widget's accelerator table will be checked [accelerator tables have not yet been implemented, but essentially it's a hash table that maps a keycode + modifiers (ALT/SHIFT/CNTL) to a direct message to an object].
      • If the widget has an accelerator table, and the key/modifier combination is found, the key event will be dispatched to the object given in the table.
      • If the widget does not have an accelerator table, or if there's no matching accelerator, the widget will proceed with ``default keyboard processing.''
      • In default keyboard processing, the space and enter keys are reported to the focus widget as button activate messages; if there is no focus widget, or if the focus widget does not handle it, it returns FALSE.
      • Also in default keyboard processing, the tab, backtab, and arrow keys are translated into focus movement messages. and resent to the widget itself. By resending these to itself, different widgets can perform different things, based on these messages (e.g. non-composite widgets do not handle focus change messages).
      • When none of the above applies, the widgets keyboard message handler returns FALSE. At this point, its parent will have a crack at it.

      This mechanism looks very complicated, but it's needed:

      • A text widget inside some other widgets will certainly want to have a first crack at arrow keys, tabs, and its own accelerators.
      • A matrix layout widget will want to handle the arrow keys intelligently. A menubar widget will deal differently with arrow keys.
      • A shell widget, trying to move its focus forward, will cycle back to the first focusable child when it hits the end; repeated tabbing will get you back where you started.

      Functions setFocus() and killFocus() work properly now. There's a difference between a widget being in the focus chain (down from the shell) v.s. actually having the keyboard focus: when you move your cursor over a window (or click-to focus, depending on your window manager), all widgets in the chain are notified that they now have the REAL focus. Conversely, when you move your cursor out of a window, they are notified they no longer have the REAL focus.

      In a nutshell, when you add/remove items to/from List or TreeLists, when you add/remove children to/from Composites, flags will be set that indicate that a recalc() may be needed.

      When the idle processing starts, this will then happen. Thus, you can add 1000's of items w/o any noticable slowdown. (It seems to improve performance by 2-3 orders of magnitude; previously, adding elements caused a torrent of events.

      With the new system, recalc()'s are put off till the last minute. Unfortunately, this new mechanism can not stand alone. A similar mechanism is needed for repainting. In future, when you call update(), it will add a repaint rectangle or union the old repaint rectangle with the new one. Then it will repaint during idle processing. So it's a bit chaotic right now, but it should become VERY SPEEDY when it's all done.

      Also, I'm afraid the messagebox is broken right now. This is due to the class hierarchy changes, and the new layout of FXTopWindow. CWW had some nice suggestions for improvements, but those have not yet been implemented.

      layout() is now protected. recalc() will be also. I'm in the process of redesigning this mechanism.

      I got the focus movement basically working (the mechanism); run groupbox and tab/backtab your way between all the buttons.

      Hitting space or return with focus on a button will now invoke it just as if you had used the mouse.

      Not all widgets properly cooperate with it yes. [Widgets which can accept the focus should return TRUE in their overload of canFocus() ].

      The dispatch of keyboard events is now implemented. Here's how it works:

      • Each widget has a focus, which indicates the current child that has the focus.,/li.
      • When a key is pressed/released, it first gets sent to the shell widget.
      • Each widget looks if it's focus has been set; if so, it tried to dispatch the key event to the focus widget.
      • If the focus widget is not set, or if the focus widget didn't handle the key event, this widgets accelerator table will be checked [accelerator tables have not yet been implemented, but essentially it's a hash table that maps a keycode + modifiers (ALT/SHIFT/CTL...) to a direct message to an object].
      • If the widget has an accelerator table, and the key/modifier combination is found, the key event will be dispatched to the object given in the table.
      • If the widget does not have an accelerator table, or if there's no matching accelerator, the widget will proceed with ``default keyboard processing.''
      • In default keyboard processing, the space and enter keys are reported to the focus widget (if there is one), layout() is now protected. recalc() will be also. I'm in the process of redesigning this mechanism.

      In a nutshell, when you add/remove items to/from List or TreeLists, when you add/remove children to/from Composites, flags will be set that indicate that a recalc() may be needed.

      When the idle processing starts, this will then happen. Thus, you can add 1000's of items w/o any noticable slowdown. (It seems to improve performance by 2-3 orders of magnitude; previously, adding elements caused a torrent of events.

      With the new system, recalc()'s are put off till the last minute. Unfortunately, this new mechanism can not stand alone. A similar mechanism is needed for repainting. In future, when you call update(), it will add a repaint rectangle or union the old repaint rectangle with the new one. Then it will repaint during idle processing. So it's a bit chaotic right now, but it should become VERY SPEEDY when it's all done.

      Also, I'm afraid the messagebox is broken right now. This is due to the class hierarchy changes, and the new layout of FXTopWindow. CWW had some nice suggestions for improvements, but those have not yet been implemented.

    Copyright © 1997-2005 Jeroen van der Zijp

    fox-1.6.49/doc/layout.html0000664000175000017500000007262412130340076012311 00000000000000 Documentation: Layout Managers
    Documentation: Layout Managers [Remove Frame]

    Placing Widgets Automatically

      Making an attractive layout for a Dialog or Window  is an important consideration in design of a user interface.  Setting windows at specific x,y coordinates, and specifying explicit dimensions allow the GUI designer full control over  the placement of each Control.  However, this is very tedious and time-consuming.  Also, what if the labels on buttons change, or if the user wants to use a bigger font?

      For these reasons, the preferred method for placing GUI Controls on windows in FOX is through the use of so-called Layout Managers.  A Layout manager is a widget whose primary purpose is to arrange GUI Controls contained inside of it in a certain way. This even includes other Layout Managers! In fact, Layout Managers may be nested arbitrarily!

      Different layout managers arrange their children in different arrangements, for example, from left-to-right, top-to-bottom, in a grid, or even all on top of one another. Most layout managers also allow for explicit placement of their children, using hard-coded coordinates.

      The benefits of this approach vis-a-vis a precise and explicit placement is that:

      1. It takes the tedium out of placing GUI Controls; the application programmer does not concern him or herself with specific coordinates.
      2. GUI Controls are automatically arranged correctly, even if button labels are changed, or users choose bigger fonts.
      3. Layouts may be recalculated intelligently when a user resizes the window.
      4. It makes it easy to accomodate and place Controls which are created automatically under program control, for example in GUI's created from database tables.

      In FOX, you determine the arrangement of a GUI Control by selecting the appropriate Layout Managers, and a combination of Packing Styles passed to the Layout Manager, as well as a combination of Layout Hints passed to the GUI Control being arranged. Thus, virtually every conceivable arrangement can be achieved simply by nesting the appropriate layout managers in a certain way.

    Basic Layout Patterns

      FOX supports a number of general-purpose layout managers. The desired arrangement of GUI controls determines which layout manager is the most appropriate for the job; the following table lists the most commonly used layout managers and their layout arrangement:

      FXPacker The Packer layout widget places its GUI elements in its interior rectangle, placing each child against one of the four sides. As each child is placed, the size of the rectangle is reduced by the space taken up by the child.
      If a child is placed against the left or right, the interior rectangle's width is reduced; if the child is placed against the top or bottom, the height is reduced.
      Children may be of any type, including other layout managers.
      FXTopWindow The TopWindow operates like an FXPacker window. For simple dialogs and toplevel windows, no additional layout managers may be needed in many cases, as the TopWindow's layout characteristics may be sufficient.
      FXHorizontalFrame The HorizontalFrame layout manager packs its children horizontally from left to right (or right to left). 
      FXVerticalFrame The VerticalFrame layout manager packs its children vertically, from top to bottom or vice versa.  It behaves similar to the HorizontalFrame layout manager.
      FXMatrix The Matrix layout manager arranges its children in rows and columns. An FXMatrix widget can operate in both column-oriented as well as row-oriented mode.  Normally, the Matrix layout manager operates row-wise.  Based on the number of rows, the Matrix layout determines the width of each column and the height of each row, then arranges the children in the space allotted, observing the child's layout hints as much as possible. 
      FXSwitcher The Switcher layout manager places its children exactly on top of each other; it ignores most of the layout hints provided by each child.  You typically use a layout manager like the switcher to save screen real-estate, by placing for example several control panels on top of each other, and bringing the right one on top depending on the context.
      FXGroupBox The GroupBox is a layout manager that provides identical layout facilities as the Packer.  In addition, the GroupBox draws an attractive border around its contents, and provides an optional caption.
      FXSplitter The Splitter layout manager divides some area of the screen horizontally or vertically.  The divider bars can be repositioned by the user, so that depending on what the user is doing, he or she may give one or the other partition more screen space.
      FX4Splitter The Four-way splitter divides its contents into four subframes, like a four-paned window. The user can interactively adjust the dividers to change the division. Unlike the simple splitter, the subdivision of the four-way splitter is fractional, i.e. the subframes are resized proportionally if the entire four-way splitter is resized.
      FXSpring The spring is typically used inside a FXHorizontalFrame or FXVerticalFrame. As its name implies, it stretches and compresses like a spring of a certain length. Different springs of different lengths are typically placed side-by-side in a FXHorizontalFrame, allowing for a fixed-proportion arrangement, e.g. a 60:40 split.

    Layout Padding

      Apart from a certain arrangement of their children, Layout Managers also provide an amount of interior padding between the children, and between the children and the borders. The amount of padding may be zero, but it is typical to accept the default value, which is a few pixels; this usually looks better.

      The padding parameters are defined as below:

      Note that for most Layout Managers, the padding options are passed as the last 6 parameters of the constructor. Since default-values are given, there is often no need to supply explicit values for them.

    How Layout Works

      All widgets in FOX are organized into a widget hierarchy or widget-tree. Widgets are roughly classified as Composite widgets, and Simple widgets.  Composite widgets can have child widgets, whereas Simple widgets are the most basic type of widget.

      One widget is at the top of the widget hierarchy: the RootWindow widget.  This special widget represents the background screen on your display. Widgets below the RootWindow widgets are called Shell widgets.  Shell widgets are positioned and resized directly by the end-user, typically through resize handles and title-bars provided by a Window Manager.

      As a user resizes a Shell widget, layout needs to be performed to reposition each widget in that Shell so as to maintain the proper arrangement. Hence, we refer to the layout process as going top-down, i.e. proceeding from widgets higher up in the widget tree downward toward the leaves of the tree.

      Sometimes, however, widgets may want to change size of their own accord.  For example, an application changes the text on a Label widget, making it larger. Changing a widget's size demands that its immediate parent be notified, as widgets are arranged by their parents. Depending on the arrangement, the widget's parent may decide that it, too, may need to change size, and in its turn notify its parent. Thus process goes on all the way till some widget is encountered whose size is not affected by the change.  Thus, we refer to the recalculation process as going bottom-up.

      In the course of recursing upwards, all widgets are marked for later layout.  The upward traversal will typically be stopped because of one of the following reasons:

      1. The widget is a Shell widget.  Shell widgets are resized by the user only, so the size will not change, and layout will have to be performed as well as possible given the size of the Shell widget.
      2. The widget is a ScrollWindow widget.  A ScrollWindow does not have to grow or shrink when its child does:- it just adjusts the scrollbars to reflect the new child size, and layout the child properly.
      3. The widget is able to accomodate the child's new size.  For example, it may be that the child that changed was not the determining factor that caused the parent's size; in such a case, no further marking needs to take place.

      During idle processing,  all marked widgets will be laid out by the system, and their mark-flags will be reset.  Thus, during processing of a user-event, any number of things may be changed in the User Interface; still, only one pass will be performed to rearrange all widgets again.  This is one of the reasons for FOX's fast performance for large-scale graphical user interfaces.

    About Default Sizes

      All widgets may be requested to compute theirdefault size. Layout widgets will use this information to determine their own default size.  Mostly, layout managers will try and ensure that a child-widget will not be made smaller than its reported default size.  Note that the default size is normally the minimum size that is sensible for a widget, but that a widget may potentially become smaller than its default size!
      For most types of Controls, the default size is computed based on the content, such as a text label and icon, plus borders and perhaps some interior padding; most Controls have a border, which may be 0, 1, or 2 pixels wide, and an interior padding around the top, bottom, left, and right side.  The interior padding provides some spacing around the content for visual aesthetics.  For Layout Managers, the default size is computed based on the arrangement of the children, their default sizes, its own border, interior padding, and inter-child spacing.

    Layout Hints

      With layout hints, widgets can inform their parent layout manager of certain desired positioning and sizing requirements. Since they are just hints, these may not always be observed.  Generally, however, the layout widgets will try and do their best to observe the hints insofar as feasible.

      The absence of a specific hint usually indicates that a default value is to be chosen.  So in many cases, you do not need to fully specify any hints at all!  In complicated situations, however, you may have to specify many of these hints.  The  FOX toolkit has defined the hints in such a way that the most common situations require the fewest hint-flags; for example, normally, Layout Managers are filled from top to bottom, and left to right.  Thus, you wouldn't have to specify these hints if this is the case!

      We will subsequently describe the layout hints and their effect on the typical layout process; we have indicated the default option between parentheses; it is usually the case that the default options do not have to be specified explicitly.

      Layout Hint: Where: Effect:
      LAYOUT_SIDE_TOP  (default)
      LAYOUT_SIDE_BOTTOM
      LAYOUT_SIDE_LEFT
      LAYOUT_SIDE_RIGHT
      FXPacker, 
      FXGroupBox, 
      FXTopWindow, 
      only
      If you specify one of these four options, the child widget will be stuck to the top, bottom, left, or right, respectively in the layout manager cavity.  The cavity's size will be reduced by the amount lopped off by the packed widget.  LAYOUT_SIDE_TOP/LAYOUT_SIDE_BOTTOM will reduce the height of the cavity, and LAYOUT_SIDE_LEFT/LAYOUT_SIDE_RIGHT will reduce the width.
      For other composite widgets, these options may not have any effect
      LAYOUT_FILL_ROW
      LAYOUT_FILL_COLUMN
      FXMatrix
      only
      If LAYOUT_FILL_COLUMN is specified for all child widgets in a certain column in of a Matrix layout manager, the whole column can stretch if the Matrix itself is stretched horizontally.  Analoguously, if LAYOUT_FILL_ROW is specified for all child widgets in a certain row, the whole row is stretched if the Matrix layout manager is stretched vertically.
      LAYOUT_LEFT (default)
      LAYOUT_RIGHT
      all The widget will be placed on the left-side, or right side of the space remaining in the container.  When used for a child of FXPacker FXGroupBox, or FXTopWindow, the hint will be ignored unless either LAYOUT_SIDE_TOP or LAYOUT_SIDE_BOTTOM is specified.
      LAYOUT_TOP (default)
      LAYOUT_BOTTOM
      all The widget will be placed on the top-side or bottom-side of the space remaining in the container.  For a child of FXPacker etc., these options will only have effect if either LAYOUT_SIDE_RIGHT or LAYOUT_SIDE_LEFT is specified.
      LAYOUT_FIX_X
      LAYOUT_FIX_Y
      all Either none, one, or both of these hints may be specified.  The LAYOUT_FIX_X hint will cause the parent layout  manager to place this widget at the indicated X position, as passed on the optional arguments in the widgets constructor argument list. Likewise, a LAYOUT_FIX_Y hint will cause placement at the indicated Y position.  Note that the X and Y position is specified in the parent's coordinate system.
      LAYOUT_FIX_WIDTH
      LAYOUT_FIX_HEIGHT
      all These options will fix the widgets width (resp. height) to the value specified on the constructor.  You can change the widget's size using setWidth() and setHeight(), under program control; however, the layout manager will generally observe the specified dimensions of the widget without trying to modify it (unless other options override).
      LAYOUT_MIN_WIDTH (default)
      LAYOUT_MIN_HEIGHT (default)
      all Either none, one, or both of these hints may be specified. You will almost never specify these options, except perhaps for code legibility.  If LAYOUT_FIX_WIDTH or LAYOUT_FIX_HEIGHT are not specified, these options will cause the parent layout widget to use the default (or minimum) width and height, respectively.
      LAYOUT_CENTER_X
      LAYOUT_CENTER_Y
      all The widget will be centered in the x-direction (y-direction) in the parent.  Extra spacing will be added around the widget to place it at the center of the space available to it.  The widget's size will be its default size unless LAYOUT_FIX_WIDTH or LAYOUT_FIX_HEIGHT have been specified.
      LAYOUT_FILL_X
      LAYOUT_FILL_Y
      all Either none, one, or both of these hints may be specified.  LAYOUT_FILL_X will cause the parent layout manager to stretch or shrink the widget to accomodate the available space.  If more than one child with this option is placed side by side, the available space will be subdivided proportionally to their default size.
      LAYOUT_FILL_Y has the identical effect on the vertical direction.

    General Purpose Layout Managers

      All general-purpose layout widgets have interior padding, to offset their child-widgets by some amount from the left, right, top, and bottom edge of the layout manager's interior edges, as well as horizontal and vertical spacing, which is extra space placed between child-widgets to prevent them from being stuck too close together.
      As usual, sensible default values are automatically supplied in the optional arguments on the constructor argument list so that in many cases, you will not need to specify specific values yourself.< All layout managers support the so-called packing styles:

    Packing Styles

      The Layout managers support a number of packing styles which can influence the way their children are arranged.  These packing style flags override hints that child widgets may supply.  The following packing styles are available:

      Packing Style: Effect:
      PACK_UNIFORM_HEIGHT The PACK_UNIFORM_HEIGHT packing style causes the Layout Manager to compute the height of the tallest of its children, and then subsequently use this as the height for the remaining layout computations.  You can use this option to easily force different widgets to be the same height.
      PACK_UNIFORM_WIDTH Like PACK_UNIFORM_HEIGHT, PACK_UNIFORM_WIDTH forces each widget to be the same width.  The widget's own preferences such as LAYOUT_FIX_WIDTH are overridden.

    Matrix Layout Widget

      The Matrix layout widget positions its children in nice rows and columns.  Besides the common General Purpose Layout options, Matrix also supports the following layout styles:

      Matrix Style: Effect:
      MATRIX_BY_ROWS (default) The MATRIX_BY_ROWS is the default, and usually does not need to be specified. 
      MATRIX_BY_COLUMNS When MATRIX_BY_COLUMNS is specified, the number of columns of the matrix is fixed, and equal to the number specified on the constructor argument list;  the number of rows is determined by the total number of children. 
      Conversely, if MATRIX_BY_COLUMNS is not specified, the number of rows is fixed and the number of columns is determined by the number of children. 

      In either case, Matrix places children top to bottom, left to right (left to right, top to bottom for MATRIX_BY_COLUMNS),  and determines the height of each row and width of each column as follows:

      1. If a column contains children which all have set the property LAYOUT_FILL_COLUMN, the whole column will be considered stretchable.  The amount of stretch is proportionally disbursed between all stretchable columns.
      2. If a row contains children which all have set the property LAYOUT_FILL_ROW, the whole row is stretchable.
      3. If a column is not stretchable, the column's width will be determined by the widest child in the column (or the widest child of all of them if the Matrix has PACK_UNIFORM_WIDTH has been specified).
      4. If a row is not stretchable, the row's height is determined by its tallest child in the row (or tallest child of all children if PACK_UNIFORM_HEIGHT).

      The Matrix widget then arranges each child in its appropriate row/column.  Within the column, a child that is not stretched may be centered in the column, or placed against the left or right edge of the column; likewise, within the row, a child that is not stretched may be centered in the row, or placed against the top or bottom.  Between each pair of columns, the Matrix layout manager adds a small amount of horizontal spacing.  Between each pair of rows, it applies some vertical spacing.
      Around the top, bottom, left, and right, the Matrix provides the usual interior padding for visual aesthetics.

      The Matrix layout manager ignores hints for a specific X or Y position of each child.

    Packer Layout Widget

      The Packer layout widget places its children inside a cavity, packing them against one of the four sides, until the entire space is filled up.  Which side of the Packer a child is placed against is determined specifying one of the side hints:

      • LAYOUT_SIDE_TOP.  Forces placement of the child against the top side of the Packer.  This is the default, and may not have to be specified explicitly.
      • LAYOUT_SIDE_BOTTOM. Forces placement of the child against the bottom.
      • LAYOUT_SIDE_LEFT. Places the child against the left side of the Packer.
      • LAYOUT_SIDE_RIGHT. Places the child against the right side of the Packer.

      Each time a child is placed against one of the four sides on the inside of the packer, it  decreases the packer's interior by some amount.  If  the child is placed at the top or bottom, the height is decreased by the child's height; if placed against the left or right side, the width is reduced by the child's width.

      Even so, the Packer tries to observe as many layout hints as feasible.  Thus, for a child being packed on the left or right,  the hints LAYOUT_TOP and LAYOUT_BOTTOM are still observed and cause the widget to be placed against the top or bottom of the packer.  Likewise, the LAYOUT_FILL_Y and LAYOUT_CENTER_Y are also observed, and cause the child to stretch or center in the packer's cavity.

      Analaguous to the above, when a child is packed against the top or bottom, the Packer properly observes the LAYOUT_LEFT, LAYOUT_RIGHT, LAYOUT_FILL_X, and LAYOUT_CENTER_X hints.

      There is one special case:  When packing the last child, the Packer observes both LAYOUT_CENTER_X, LAYOUT_CENTER_Y, LAYOUT_FILL_X,  and LAYOUT_FILL_Y.  This will cause the Packer to completely fill the remaining space of the cavity with the last child widget.

      You can make use of this feature in a typical application by defining your Main Viewing area as the last widget to be placed.

    Layout Suggestions

      FOX allows you either perform automatic layout or explicitly control over widget placement by specifying positions and sizes. The automatic layout has the advantage of accomodating changes of fonts, or changes in text labels or icons without any effort. This is especially interesting because it makes it quite easy to build GUI's under program control (e.g. by reading a configuration file or database schema).

      However, it takes a bit more forethought to figure out how various widget- layouts are structured, i.e. how various layout managers and controls are to be arranged to achieve the desired effect. Some hints:

      1. Work areas like multi-line text or OpenGL windows should be flexible both horizontally and vertically. This allows the user to grow the work area if desired.
      2. Simple text fields, sliders, dials, and so on should be stretchable horizontally if possible:- sliders and dials are more accurate if bigger, and you can see more of the text. Of course for vertical sliders and dials, you would want to allow vertical stretching.
      3. Buttons need not be stretchable, there is no point. However, it is pleasing to keep proper proportions in the dialog. This means keeping certain buttons the same size using PACK_UNIFORM_WIDTH, and centering them under the dialog with LAYOUT_CENTER_X under the content, for example.
      4. Nice tabular layouts can be achieved quickly using the Matrix layout manager. Selected rows and columns may be allowed to stretch vertically and horizontally.
      5. Because sizes are figured from the inside-out, it is better to force a few selected widgets like scroll areas to be a certain size and let the system figure the size of the dialog, rather than try and set the size of the dialog and hope that the scroll areas wind up big enough.
      6. You can use a borderless Frame widget as a "spacer" if some extra space is needed.

      Try to design dialogs to be resizable, because it is almost always the case that text fields, sliders, and list widgets would be able to take advantage of a larger screen area.

    Copyright © 1997-2005 Jeroen van der Zijp

    fox-1.6.49/doc/menu.html0000664000175000017500000000672412130340076011736 00000000000000 fox-toolkit.org - menu page
     

    Home
    News
    Download
    Installation
    Documentation
    Mailing Lists
    FAQ
    License
    Goals & Approach
    FXRex
    Screenshots


    Adie
    PathFinder
    FOX Calculator


    Projects


    Mailing List
    List Archive
    Another Archive
    FOX Community
    Japanese Docs


    FXPy
    FXRuby
    EiffelFox


    Class Reference 1.2
    Class Reference 1.4
    Class Reference 1.6
    Class Reference DEV
    Transition 1.0->1.2


    GPG Key
    Consulting


    Copyright © 1997-2005
    Jeroen van der Zijp

    fox-1.6.49/fox.spec.in0000664000175000017500000001455412130340076011414 00000000000000%define name fox %define version @FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.@FOX_PATCH_LEVEL@ %define release 1 Summary: The FOX toolkit. Name: %{name} Version: %{version} Release: %{release} Copyright: LGPL Group: System Environment/Libraries Source: ftp://ftp.fox-toolkit.org/pub/%{name}-%{version}.tar.gz URL: http://www.fox-toolkit.org Packager: Joshua Weage BuildRoot: %{_tmppath}/%{name}-buildroot %description FOX is a C++-based library for graphical user interface development FOX supports modern GUI features, such as drag-and-drop, tooltips, tab books, tree lists, icons, multiple document interfaces (MDI), timers, idle processing, automatic GUI updating, as well as OpenGL/Mesa for 3D graphics. Subclassing of basic FOX widgets allows for easy extension beyond the built-in widgets by application writers. %package devel Summary: Development files and documentation for the FOX GUI toolkit. Group: Development/Libraries %description devel The fox-devel package contains the files necessary to develop applications using the FOX GUI toolkit: the header files, the reswrap resource compiler, manual pages, and HTML documentation. %package static Summary: A version of the FOX GUI toolkit for static linking. Group: Development/Libraries %description static The fox-static package contains the files necessary to link applications to the FOX GUI toolkit statically (rather than dynamically). Statically linked applications do not require the library to be installed on the system running the application. %package -n adie Summary: Adie Programmer's Text Editor Group: X11/Applications Version: 3.0.0 %description -n adie Adie is an extremely fast and convenient programming text editor written using the FOX Toolkit. %package -n calculator Summary: FOX-based Calculator Applet Group: X11/Applications Version: 2.0.0 %description -n calculator The FOX calculator is a simple desktop calculator geared towards the programmer. It supports not only a full complement of scientific functions, but also common operations that programmers need, such as bitwise operations, bitwise shifting, and base-2 logarithm and exponents, and numeric conversion between hexadecimal, octal, binary, and decimal. The FOX Calculator implements correct operator precedences, so expressions like 2+3*5 yield the correct result, which is 17, and not 25. Also featured is a constant memory, which permanently stores its value even if you exit the calculator and restart it later. %package -n pathfinder Summary: PathFinder File Browser Group: X11/Applications Version: 1.0.0 %description -n pathfinder PathFinder is a file browser application written using the FOX Toolkit. %package -n shutterbug Summary: Shutterbug Screenshot Utility Group: X11/Applications Version: 2.0.0 %description -n shutterbug Shutterbug is a FOX-based screenshot utility. %prep %setup -q %build CPPFLAGS="$RPM_OPT_FLAGS -frtti" CFLAGS="$RPM_OPT_FLAGS -frtti" \ %configure --enable-release --enable-threadsafe make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %makeinstall rm -f doc/Makefile.am doc/Makefile.in doc/Makefile rm -r doc/art/Makefile.am doc/art/Makefile.in doc/art/Makefile rm -f doc/screenshots/Makefile.am doc/screenshots/Makefile.in doc/screenshots/Makefile # remove docs as they are supplied by rpm rm -rf ${RPM_BUILD_ROOT}/%{_datadir}/doc/fox-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@ rm -rf ${RPM_BUILD_ROOT}/usr/fox %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %{_libdir}/libFOX-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.so %{_libdir}/libFOX-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.so.@LT_CURRENT@ %{_libdir}/libFOX-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.so.@LT_CURRENT@.@LT_AGE@.@LT_REVISION@ %{_libdir}/libCHART-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.so %{_libdir}/libCHART-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.so.@LT_CURRENT@ %{_libdir}/libCHART-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.so.@LT_CURRENT@.@LT_AGE@.@LT_REVISION@ %doc doc %doc ADDITIONS AUTHORS INSTALL LICENSE README TRACING index.html %files devel %defattr(-,root,root) %{_bindir}/reswrap %{_bindir}/fox-config %{_mandir}/man1/reswrap.1* %{_includedir}/fox-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@ %{_libdir}/libFOX-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.la %{_libdir}/libCHART-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.la %{_libdir}/pkgconfig/fox.pc %files static %defattr(-,root,root) %{_libdir}/libFOX-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.a %{_libdir}/libCHART-@FOX_MAJOR_VERSION@.@FOX_MINOR_VERSION@.a %files -n adie %defattr(-,root,root) %{_bindir}/adie %{_bindir}/Adie.stx %{_mandir}/man1/adie.1* %files -n calculator %defattr(-,root,root) %{_bindir}/calculator %{_mandir}/man1/calculator.1* %files -n pathfinder %defattr(-,root,root) %{_bindir}/PathFinder %{_mandir}/man1/PathFinder.1* %files -n shutterbug %defattr(-,root,root) %{_bindir}/shutterbug %{_mandir}/man1/shutterbug.1* %changelog * Fri Aug 20 2004 Joshua Weage - Updated to use built-in RPM macros where possible. - Sanity check RPM_BUILD_ROOT before deleting it. - Delete docs installed by make, in preference for those from rpm * Thu Dec 4 2003 Lyle Johnson - incorporated Yan-Fa Li's changes for compatibility with latest RPM tools. * Thu Sep 25 2003 Lyle Johnson - added files for the new chart library to the fox, fox-devel and fox-static packages. - added a Prefix tag to the header section so that this package is relocatable. - Spin off Adie, calculator, PathFinder and shutterbug into their own subpackages. - Removed the '--with-opengl=opengl' flag from the %build section (no longer needed). * Thu Aug 28 2003 Lyle Johnson - correct installed file names to reflect new naming scheme * Wed Aug 27 2002 Lyle Johnson - remove Makefile scraps from the doc subdirectories * Wed Aug 21 2002 Lyle Johnson - added the fox-devel and fox-static subpackages. * Tue Oct 10 2000 David Sugar 0.99.132-3 - rtti forced for rpm build specs that use -fno-rtti. * Fri Mar 24 2000 José Romildo Malaquias 0.99.122-1 - new version * Fri Mar 24 2000 José Romildo Malaquias 0.99.119-1 - new version * Sun Mar 05 2000 José Romildo Malaquias - some adaptations * Tue Nov 10 1998 René van Paassen - initial package fox-1.6.49/INSTALL0000664000175000017500000005142612130340076010367 00000000000000 The FOX GUI Library Installation ================================ Systems Which are Supported or Known to work: ============================================= o Linux (gcc, INTEL C++), x86, IA64 (Itanium), x86-64 (Opteron). o Windows XP, 2K, NT, Windows 9x, (VC++, Cygwin, MinGW, Borland C++, Digital Mars C++, OpenWatcom C++, ... ) o Digital Unix/COMPAQ Tru64 OSF1 3.2, 4.0x, 5.0x (gcc and DEC cxx). o SGI IRIX 5.3, 6.1, 6.2, 6.4, 6.5 (gcc and MIPS Pro C++) o SUN Solaris, SunOS (gcc, SUN WorkShop Compiler, SUN Forte C++) o HP-UX PA-RISC 9.x, 10.x and B.11.00, (gcc and aCC). o HP-UX B.11.22 Intel Itanium (IA64) using aCC. o AIX 4.2, 4.3 o FreeBSD o Sequent DYNIX/ptx 4.4.7 o IBM VisualAge C++ 3.5 (Windows) o Apple MAC OS-X. You will need an X-Server, either Apple's or XFree. Building Documentation. ======================= You will need the "doxygen" documentation extraction tool. You can get it from: http://www.stack.nl/~dimitri/doxygen/index.html Many current linux distributions already include this tool as an optional package. To generate documentation, unpack the FOX tarball and go to directory "doc." Then issue the command: make docs If doxygen is installed properly, it will churn for a while and then generate hyperlinked documentation from the header files' document comments. You will find this reference documentation in the "doc/ref" directory. For most UNIX systems. ====================== For most unix systems you can configure simply as: ./configure You can disable OpenGL support by configuring as: ./configure --with-opengl=no After configure runs its course, simply type ``make'' to build the library, and ``make install'' to install it. FOX should compile on most UNIX platforms; we have tested the following: SGI, IBM, HP, SUN, DEC, LINUX, all with gcc; however, FOX uses a fairly conservative subset of C++, and should be no problem to port to other, more primitive, C++ compilers. On some machines, the X11 header files are still K&R C, instead of ANSI-C. You might try define add "-fpermissive" to the CXXFLAGS environment variable prior to running configure (this is the flag for GCC; other compilers may have similar option for old K&R C). When programming against FOX, you should only have to include "fx.h", and for 3D programs, "fx3d.h". To use keyboard symbols, include "fxkeys.h" also. Specifically, to remain portable application programs should NOT include any X window header files. You may of course need other system headers ("stdio.h", "gl.h", etc). Enabling XFT Support. ===================== On Linux systems, you can turn on XFT anti-aliased font support. ./configure --with-xft=yes For portability reasons, the default of this settings is off. XCursor Support. ================ FOX supports Xcursor support where available. This is normally turned on, allowing full alpha-blended cursor support. However, you can disable if desired: ./configure --with-xcursor=no This will cause to revert to vanilla black/white cursor support only; note that your color cursors will still work: they will be thresholded to black and white depending on brightness. Building for Debug or Release. ============================== Normal builds [w/o any special arguments to configure] will include assert and trace statements into the library, but no debug symbols. This mode compiles the fastest and allows for tracing of the FOX library. This mode is the recommended way to develop FOX applications, as it allows for resource tracing and internal consistency checks. Building for debug will add debug symbols as needed by your debugger. It also includes assert and tracing into the library. This setting is recommended if you need to debug the FOX library itself. Full debug executables are build by configuring with: ./configure --enable-debug Release builds strip all debug information, asserts, and tracing, and generates optimized code. The resulting library is the smallest/fastest, and this is the recommended setting for production code. To build for release, use: ./configure --enable-release Building Shared or Non-Shared Libraries. ======================================== You can build FOX either as shared library, static library, or both. The default is both. To build static library only [this may be necessary on certain systems where shared library support is lacking]: ./configure --disable-shared to build shared library only: ./configure --disable-static Thread-safe support. ==================== It is highly recommended to build FOX with thread-safe API's wherever possible; this is accomplished using: ./configure --enable-threadsafe Enabling thread-safe will cause FOX to use the thread-safe equivalent API's for some common C library functions like getpwuid(), readdir() and so on. Image File Format Support. ========================== FOX needs external libraries for JPEG, TIFF, and PNG image format. On some systems, such as Linux, *BSD, these are likely already installed on your system. On Windows or older UNIX systems, they need to be compiled and installed first. See below on how to override default locations on UNIX systems. The JPEG support is provided by jpegsrc.v6b.tar.gz, the PNG support by libpng-1.2.5.tar.gz (or a newer version). The TIFF support is in tiff-v3.5.7.tar.gz (or later). All these files are available on ftp.fox-toolkit.org. After these libraries have been compiled and installed, compile FOX with HAVE_TIFF_H=1, HAVE_PNG_H=1, HAVE_JPEG_H=1. The TIFF library may also need the JPEG library (JPEG is one of the tags supported in the TIFF format), so compile the JPEG library first. TIFF also needs the GNU compression library zlib (available as zlib-1.1.4.tar.gz (or later) on ftp.fox-toolkit.org). Compression Library Support. ============================ Compressed FXStream support is enabled by installing zlib-1.1.4.tar.gz and bzip2-1.0.2.tar.gz (or later), then compiling FOX with HAVE_ZLIB_H=1 and HAVE_BZ2LIB_H=1, respectively. You do not need to install them on Linux, *BSD, but you probably do on Windows and older UNIX systems. Overriding Libraries. ===================== The default libraries determined by configurations are not always the ones you want to use; therefore, there is a mechanism to override the default choices of the configuration system. The override is done simply by setting environment variables prior to running configure; make sure config.cache is removed if you've ran configure before. Configure allows for the following overrides: Environment Variable Default value if not set ==================== ======================== LIBJPEG -ljpeg LIBPNG -lpng LIBTIFF -ltiff LIBZ -lz LIBBZ2 -lbz2 LIBGL -lopengl32 (win32) LIBGLU -lglu32 (win32) LIBGL -lGL (unix) LIBGLU -lGLU (unix) On SGI IRIX 6.x =============== On SGI Systems where MIPS Pro C++ compiler is used instead of GCC, you will need to set the environment variable CXX to: CC -n32 and then run: ./configure --x-libraries=/usr/lib32 or, you can also build FOX for the 64 bit model, and set CXX to: CC -64 and run configure with: ./configure --x-libraries=/usr/lib64 The first argument is only needed if you also have MESA on your system. FOX searches for the png library [for Portable Network Graphics, the successor of GIF], but the library it finds, even though it has the same name, is not the right one. You will need to disable this feature, or download the PNG library from http://www.graphicswiz.com/png/ and compile it, and pass the appropriate flags for your compiler to find the new version. If compiling without PNG, pass the flag: --disable-png; likewise, you can disable JPEG with the flag: --disable-jpeg. SGI Altix ========= Using Intel C++ compiler on IA64-based Altix system, drop optimization level to -O1: setenv CXX "icpc -O1" setenv CC "icc -O1" Full optimization with icc compiler appears to generate incorrect code. Using gcc 2.95.2 on IRIX 6.x (Thanks to Theo Venker) ==================================================== You won`t believe the solution: rename FXApp.cpp to FXApp.C and everything is fine. The manual page of g++ says that it accepts C++ suffixes .C, .cc, .cxx, .cpp, and .c++, and it does, but for .cpp and .c++ it compiles with -D__LANGUAGE_C -D_LANGUAGE_C -DLANGUAGE_C whereas the others suffixes use -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS. This is clearly a bug in g++. I decided to wait for the next g++ release, so I didn`t report this to the g++ maintainers. May be you will. The work-arround is: export CC="g++ -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS" and then run configure. Building 64-bit code on Linux for x86-64 (AMD Opteron, Athlon64) ================================================================ Linux for AMD Opteron supports execution of both 32 and 64 bit code on the same system; consequenly, two sets of libraries are installed. To configure properly, you will need to let ld search the right set of directories. Here's how: export LDFLAGS="-L/usr/lib64 -L/usr/X11R6/lib64 -L/lib64" ./configure No other issues are known at this time. On Alpha Processor based Workstations (COMPAQ/DEC OSF1) ======================================================= If you use DEC's "cxx" instead of GNU gcc, you will need to make sure the you add the flag option -D_XOPEN_SOURCE_EXTENDED to the compiler; this will allow usage of a wider set of POSIX functions; GCC seems to have this flag on by default, but the standard C++ compiler on OSF1 does not; thanks to thomas.goessler@avl.com for pointing this out. When compiling with gcc on Digital Unix, you may want to enable gradual underflow support for IEEE754 conformant floating point operations: export CXX="gcc -mieee" ./configure .... If this flag is NOT set, floating point operations which yield underflows will cause a floating point exception (SIGFPE). Many perfectly correct programs may generate underflows when working with small numbers (~1e-38 single precision, ~1e-308 double precision); working with these numbers may involve so-called denormalized floating point numbers, i.e. numbers where the mantissa can no longer be shifted to be within [0.5,1.0> range due to the exponent becoming 0. The ALPHA CPU does not include hardware do manipulate these numbers and will generate a trap when trying to manipulate these numbers; passing the "-mieee" flag will incorporate a software handler to ensure IEEE754 conformant floating arithmetic. Compiling FOX on the SUN ============================================ To use the SUN WorkShop Compiler compilers, simply configure FOX as follows: > cd fox > env CC=cc CXX=CC LD=CC ./configure Explanation: The SUN compilers require 'CC' to be used instead of 'ld' for creating the shared object library. This is to ensure that template instances will be included in the library. To build a static library 'CC -xar' should be used instead of 'ar' but there is no simple way to do this, due to limitations in 'libtool'. To get around this problem, the configure script invokes 'CC' with the argument '-instances=global', thus including template instances in the object file instead of using a template repository. This works fine and 'ar' can be used to build a static object library. Thanks to: Daniel Gehriger Compiling FOX using the HP/UX C++ Compiler ========================================== You may want to use GNU make instead of HP's make (/usr/bin/make). The default version of make doesn't seem to process the dependencies for PathFinder correctly and thus doesn't generate the reswrapped icon header files. Since PathFinder is built after the library and all the test programs, this isn't a huge problem -- it just means that the build will stop at that point with an error message. Configure the build by typing: env CC="cc +DA2.0W" CXX="aCC +DA2.0W +W740,749,863" ./configure The "+DA2.0W" flag tells it to compile as 64 bit. The "+W740,749,863" option suppresses a few warning messages that we believe are safe to ignore ;) Compiling FOX using the HP/UX Itanium^2 aCC C++ Compiler ======================================================== Assuming the aCC is installed in the recommended place: export CXX="aCC -fast -mt +DD64 -DHAVE_VSSCANF=1 -DHPOGL_SUPPRESS_FAST_API=1 -I/opt/aCC/include -I/opt/graphics/OpenGL/include -L/lib/hpux64 -L/usr/lib/hpux64 -L/opt/graphics/OpenGL/lib/hpux64" You may want to build the image support libraries also if you need them. Windows 95/98/ME/NT/XP Builds ============================= We currently build FOX on a regular basis using Microsoft Visual C++ 6.0. There is also support for Mingw32, the latest net release of Cygwin (v1.1) and Borland C++. We have heard of mixed success with building under Symantec's C++ 7.5 compiler. A few things to keep in mind: 1. If you want to include OpenGL support be sure to define the HAVE_OPENGL symbol on the compiler's command line, and to link your executables to the opengl32.lib and glu32.lib libraries. 2. The native Windows version of FOX relies on an undocumented API called _TrackMouseEvent() which is found in comctl32.dll. You should be sure to link your FOX applications with the comctl32.lib import library. Note that for this function is only available for comctl32.dll versions 4.70 or later; the latest version of this DLL can be downloaded from Microsoft's web site: http://www.microsoft.com/msdownload/ieplatform/ie/comctrlx86.asp If you are running Windows 98, Windows NT 4.0 SP3, or have installed Internet Explorer 4.0 or later, you *probably* already have the latest version of this DLL already. 3. The FOX registry mechanism uses the regular Windows registry under the hood; those functions are found in advapi32.lib which is not always a standard library. If you get some unresolved symbols at link time (esp. with names beginning with "Reg") try adding advapi32.lib to the list of libraries. 4. To build or use FOX as a DLL, the symbol FOXDLL must be defined; for building the core FOX library, FOXDLL_EXPORTS must also be defined. If FOXDLL_EXPORTS must NOT be not defined when you are just using FOX as a DLL. 5. It is recommended that extension DLL's are compiled with FOXDLL but that you define your own symbol to signify export; for example, the CHART library is build with CHARTDLL_EXPORTS; since the CHART library USES FOX, it must import the core FOX library, yet export its own functions. Building with Microsoft Visual C++ ================================== We now have a project workspace and project files set up for Win32 builds under Visual C++ 6.0. To use these, perform the following steps: 1. Download the latest fox.tar.gz from the web site; 2. Unzip & untar in your favorite place; 3. Start Visual C++ and open the fox/windows/vcpp/win32.dsw workspace; 4. Choose a project and build it. The project corresponding to the library itself is named "fox", and all of the other projects list it as a dependency. So if you choose, say, "glviewer" to build, it should first build the library and then build the glviewer test program. Building with Borland C++ Compilers =================================== The Borland makefiles are now tested semi-regularly against the free command-line compiler tools (compiler version 5.5) distributed by Borland/Inprise. We believe that they should also be usable for any recent Borland C++ compilers (e.g. Borland C++ Builder 3 or later). To build the FOX library, utility programs and example programs, change to the fox-0.99.xxx\windows\borland subdirectory and type "make". It should compile without a hitch, with the possible exception of building the OpenGL test programs in the "tests" subdirectory: + If you're using the free command-line compiler tools, you want to be sure that the %BCCDIR%\Lib\PSDK directory appears in the linker configuration file (%BCCDIR%\Bin\ilink32.cfg). If it isn't there, the linker won't know where to find the opengl32.lib and glu32.lib import libraries. + If you're using an older Borland compiler, you similarly want to be sure to have the updated OpenGL SDK for Win32 (including the OpenGL 1.2 header files and import libraries). If for some reason you don't have the correct header files and import libraries for OpenGL, and if OpenGL support isn't important for your project anyways, just modify the "Makefile.bc" in the fox-0.99.xxx\tests subdirectory so that it doesn't try to build the "glviewer.exe" or "gltest.exe" examples. Building FOX as a DLL ===================== The FOX library can also be built as a DLL for Windows; this is done by selecting the "foxdll" project and building it. Building this project causes the import libraries and DLLs to be placed in fox/lib. The filenames are foxdll.lib and foxdll.dll for the Release build, or foxdlld.lib and foxdlld.dll for the Debug build. To compile your own FOX applications so that they use the FOX DLL instead of the static FOX library, be sure to define the FOXDLL symbol in your compiler flags. Also note that the DLL must be in your search path for the program to run! Building FOX using OpenWatcom C++ ================================= The OpenWatcom C++ compiler can be downloaded free of charge from: http://www.openwatcom.org. To use the OpenWatcom "patch" with a fresh copy of FOX vx.y.zz, please make sure you've installed OpenWatcom C++ v1.0 and executed the SETVARS.BAT file found in the OpenWatcom installation directory. The Makefile.wc files rely on a Watcom environment variable, %WATCOM%, to determine the location of the COMCTL32.LIB file. Use the Makefile provided in windows/watcom/Makefile. Thanks to mikael@lyngvig.org for this port. Building FOX using MinGW ======================== Please see the standard FOX documentation file, "Developing Win32 GUI Applications Using FOX", available in this distribution as the file "doc/win32.html". Building FOX using Cygwin 1.1 ============================= FOX can also be built against the latest net release of Cygwin, available for download from here: http://sourceware.cygnus.com/cygwin/mirrors It absolutely will not compile with previous releases of Cygwin (i.e. Cygwin B20.1 or earlier), at least not without a lot of headaches. The win32api header files distributed with earlier versions of Cygwin were not up-to-date enough for FOX. It should compile out-of-the-box by typing: ./configure --disable-shared make Building FOX on QNX =================== For those interested in using FOX with QNX, before running configure for FOX on QNX it might be a good idea to run: automake --add-missing libtoolize -f Doing so will ensure that the configuration files needed to detect QNX are present.   Also, for now it is probably best to disable shared libraries when building FOX on QNX.  Programs linked with the FOX shared library will not run, but instead will segfault.  I plan on looking into a fix for this eventually.   Dustin Graves Building on MAC OS-X ==================== When building on Mac OS-X, the following might help: CXX="c++ -I/sw/include -L/sw/lib ./configure This might help; no guarantees, I can not test this myself.... For more information, see: http://freeride.rubyforge.org/wiki/wiki.pl?MacOSXInstall Image Formats in File Browser ============================= By default, all available image formats are supported in the File and Directory Browsers. Some of these image formats require external library support and consequently the size of your application executables may be reduced by limiting the supported formats to those supported in the core library; the image formats supported in the core library do not require external libraries and therefore supporting them does not incur any additional "code bloat". To support only the core image formats, pass the compiler flag: -DCORE_IMAGE_FORMATS=1 Another flag is the default icon search path, i.e. where the file browser will normally look to find and load icons bound to file extensions. The path below will cause the system to look in three different directories: -DDEFAULICONPATH="~/.foxicons:/usr/local/share/icons:/usr/share/icons" This would be a common setting for LINUX. Note that this is only the default; the actual search path can by set at any time by means of the FOX registry setting: [SETTINGS] iconpath="/home/extraicondir:/usr/share/icons" fox-1.6.49/depcomp0000755000175000017500000005064312025761077010724 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: fox-1.6.49/configure0000755000175000017500000232466312130340145011250 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for fox 1.6.49. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: jeroen@fox-toolkit.com about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='fox' PACKAGE_TARNAME='fox' PACKAGE_VERSION='1.6.49' PACKAGE_STRING='fox 1.6.49' PACKAGE_BUGREPORT='jeroen@fox-toolkit.com' PACKAGE_URL='' ac_unique_file="include/fx.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS GL_LIBS X_BASE_LIBS FOX_BYTEORDER X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS XMKMF CXXCPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL LN_S am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC LT_AGE LT_REVISION LT_CURRENT LT_RELEASE FOX_PATCH_LEVEL FOX_MINOR_VERSION FOX_MAJOR_VERSION am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock with_x enable_debug enable_release with_profiling enable_jpeg enable_png enable_tiff enable_zlib enable_bz2lib with_xft with_xshm with_shape with_xcursor with_xrender with_xrandr with_xfixes with_xinput with_xim with_opengl ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC CXXCPP XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures fox 1.6.49 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/fox] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of fox 1.6.49:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-debug compile for debugging --enable-release compile for release --disable-jpeg compile without JPEG image support --disable-png compile without PNG image support --disable-tiff compile without TIFF image support --disable-zlib compile without zlib support --disable-bz2lib compile without bz2lib support Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-x use the X Window System --with-profiling choices are yes, no, or gprof --with-xft enable Xft support --with-xshm compile with XShm support --with-shape enable XShape support --with-xcursor compile with Xcursor support --with-xrender compile with XRender support --with-xrandr compile with XRandR support --with-xfixes compile with XFixes support --with-xinput compile with XInput support --with-xim compile with XIM support --with-opengl choices are yes, no Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF fox configure 1.6.49 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------- ## ## Report this to jeroen@fox-toolkit.com ## ## ------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_check_func LINENO FUNC VAR # ------------------------------------ # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func # ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_compile # ac_fn_cxx_try_run LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_run # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------- ## ## Report this to jeroen@fox-toolkit.com ## ## ------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by fox $as_me 1.6.49, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='fox' VERSION='1.6.49' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Set version FOX_MAJOR_VERSION=1 FOX_MINOR_VERSION=6 FOX_PATCH_LEVEL=49 # Binaries compiled with this patchlevel of FOX will need at least # version MAJOR.MINOR.INTERFACE_VERSION to run. The assertion # FOX_INTERFACE_VERSION >= FOX_BINARY_VERSION must hold. # # Increment this when an API is added FOX_INTERFACE_VERSION=0 # Binaries compiled with at least MAJOR.MINOR.BINARY_VERSION are # compatible with this release of FOX. # # Set this to FOX_INTERFACE_VERSION's value if API changed or removed FOX_BINARY_VERSION=0 # Report what was found { $as_echo "$as_me:${as_lineno-$LINENO}: checking major version" >&5 $as_echo_n "checking major version... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOX_MAJOR_VERSION" >&5 $as_echo "$FOX_MAJOR_VERSION" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking minor version" >&5 $as_echo_n "checking minor version... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOX_MINOR_VERSION" >&5 $as_echo "$FOX_MINOR_VERSION" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking patch level" >&5 $as_echo_n "checking patch level... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOX_PATCH_LEVEL" >&5 $as_echo "$FOX_PATCH_LEVEL" >&6; } # Substitute variables in output files # CURRENT: Most recent interface library implements # REVISION: The implementation number of the CURRENT interface # AGE: The difference between the newest and oldest interfaces that this # library implements. The library implements all the interface numbers # in the range from number CURRENT - AGE to CURRENT. LT_RELEASE=$FOX_MAJOR_VERSION.$FOX_MINOR_VERSION LT_CURRENT=$FOX_INTERFACE_VERSION LT_REVISION=`expr $FOX_PATCH_LEVEL - $FOX_INTERFACE_VERSION` LT_AGE=`expr $FOX_INTERFACE_VERSION - $FOX_BINARY_VERSION` # Substitute variables in output files # Prevents setting flags. CXXFLAGS="" # More secret source DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h # Check using C++ ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: X_BASE_LIBS="-lX11 -lXext" LIBGLU="-lGLU" LIBGL="-lGL" # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_cxx_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt if test "$no_x" = yes; then X_BASE_LIBS="-lcomctl32 -lwsock32 -lwinspool -lmpr -lgdi32 -limm32" LIBGLU="-lglu32" LIBGL="-lopengl32" fi # Byte order { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) FOX_BYTEORDER=1;; #( no) FOX_BYTEORDER=0 ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac # Threads { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 $as_echo_n "checking for clock_gettime in -lrt... " >&6; } if ${ac_cv_lib_rt_clock_gettime+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_rt_clock_gettime=yes else ac_cv_lib_rt_clock_gettime=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 $as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBRT 1 _ACEOF LIBS="-lrt $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_exit in -lpthread" >&5 $as_echo_n "checking for pthread_exit in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_exit+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_exit (); int main () { return pthread_exit (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_exit=yes else ac_cv_lib_pthread_pthread_exit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_exit" >&5 $as_echo "$ac_cv_lib_pthread_pthread_exit" >&6; } if test "x$ac_cv_lib_pthread_pthread_exit" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPTHREAD 1 _ACEOF LIBS="-lpthread $LIBS" fi # Check for dynamic loader { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDLD 1 _ACEOF LIBS="-ldld $LIBS" fi # Check vsscanf for ac_func in vsscanf vsnprintf strtoll strtoull do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Add copious amounts of debugging with gcc if test "${GXX}" = "yes" ; then CXXFLAGS="${CXXFLAGS} -Wall -Wformat -Woverloaded-virtual -Wshadow" #LDFLAGS="-rdynamic ${LDFLAGS}" fi # Debugging turned on { $as_echo "$as_me:${as_lineno-$LINENO}: checking for debugging" >&5 $as_echo_n "checking for debugging... " >&6; } # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug" >&5 $as_echo "$enable_debug" >&6; } if test "x$enable_debug" = "xyes" ; then CXXFLAGS="${CXXFLAGS} -g -DDEBUG" fi # Building for release { $as_echo "$as_me:${as_lineno-$LINENO}: checking for release build" >&5 $as_echo_n "checking for release build... " >&6; } # Check whether --enable-release was given. if test "${enable_release+set}" = set; then : enableval=$enable_release; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_release" >&5 $as_echo "$enable_release" >&6; } if test "x$enable_release" = "xyes" ; then CXXFLAGS="${CXXFLAGS} -O2 -DNDEBUG" if test "${GXX}" = "yes" ; then CXXFLAGS="${CXXFLAGS} -Wuninitialized -ffast-math -fstrict-aliasing -finline-functions -fomit-frame-pointer -fexpensive-optimizations" LDFLAGS="-s ${LDFLAGS}" fi fi # Enable profiling { $as_echo "$as_me:${as_lineno-$LINENO}: checking for profiling" >&5 $as_echo_n "checking for profiling... " >&6; } # Check whether --with-profiling was given. if test "${with_profiling+set}" = set; then : withval=$with_profiling; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_profiling" >&5 $as_echo "$with_profiling" >&6; } if test "x$with_profiling" = "xyes" ; then CXXFLAGS="${CXXFLAGS} -p" elif test "x$with_profiling" = "xgprof" ; then CXXFLAGS="${CXXFLAGS} -pg" fi # Check for JPEG Image support # Check whether --enable-jpeg was given. if test "${enable_jpeg+set}" = set; then : enableval=$enable_jpeg; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_jpeg" >&5 $as_echo "$enable_jpeg" >&6; } if test "x$enable_jpeg" != "xno"; then ac_fn_cxx_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = xyes; then : CXXFLAGS="${CXXFLAGS} -DHAVE_JPEG_H=1"; LIBS="${LIBS} ${LIBJPEG:=-ljpeg}" fi fi # Check for PNG Image support; note zlib is needed for PNG # Check whether --enable-png was given. if test "${enable_png+set}" = set; then : enableval=$enable_png; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_png" >&5 $as_echo "$enable_png" >&6; } if test "x$enable_png" != "xno"; then for ac_header in png.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default" if test "x$ac_cv_header_png_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PNG_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_PNG_H=1"; LIBS="${LIBS} ${LIBPNG:=-lpng}" fi done fi # Check for TIFF Image support; note zlib is needed for TIFF # Check whether --enable-tiff was given. if test "${enable_tiff+set}" = set; then : enableval=$enable_tiff; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_tiff" >&5 $as_echo "$enable_tiff" >&6; } if test "x$enable_tiff" != "xno"; then for ac_header in tiff.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "tiff.h" "ac_cv_header_tiff_h" "$ac_includes_default" if test "x$ac_cv_header_tiff_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TIFF_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_TIFF_H=1"; LIBS="${LIBS} ${LIBTIFF:=-ltiff}" fi done fi # Check for libz compression library # Check whether --enable-zlib was given. if test "${enable_zlib+set}" = set; then : enableval=$enable_zlib; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_zlib" >&5 $as_echo "$enable_zlib" >&6; } if test "x$enable_zlib" != "xno"; then for ac_header in zlib.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ZLIB_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_ZLIB_H=1"; LIBS="${LIBS} ${LIBZ:=-lz}" fi done fi # Check for bzip2 compression library # Check whether --enable-bz2lib was given. if test "${enable_bz2lib+set}" = set; then : enableval=$enable_bz2lib; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_bz2lib" >&5 $as_echo "$enable_bz2lib" >&6; } if test "x$enable_bz2lib" != "xno"; then for ac_header in bzlib.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default" if test "x$ac_cv_header_bzlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BZLIB_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_BZ2LIB_H=1"; LIBS="${LIBS} ${LIBBZ2:=-lbz2}" fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft support" >&5 $as_echo_n "checking for Xft support... " >&6; } # Check whether --with-xft was given. if test "${with_xft+set}" = set; then : withval=$with_xft; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xft" >&5 $as_echo "$with_xft" >&6; } if test "x$with_xft" != "xno"; then XFTCFLAGS="-I/usr/include/freetype2" XFTLIBS="-lfreetype -lXft" saved_cppflags="${CXXFLAGS}" CXXFLAGS="${CXXFLAGS} -DHAVE_XFT_H=1 $XFTCFLAGS" X_BASE_LIBS="${X_BASE_LIBS} $XFTLIBS" fi # Check whether --with-xshm was given. if test "${with_xshm+set}" = set; then : withval=$with_xshm; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xshm" >&5 $as_echo "$with_xshm" >&6; } if test "x$with_xshm" != "xno"; then for ac_header in X11/extensions/XShm.h do : ac_fn_cxx_check_header_compile "$LINENO" "X11/extensions/XShm.h" "ac_cv_header_X11_extensions_XShm_h" "#include " if test "x$ac_cv_header_X11_extensions_XShm_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_EXTENSIONS_XSHM_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_XSHM_H=1" fi done fi # Check whether --with-shape was given. if test "${with_shape+set}" = set; then : withval=$with_shape; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_shape" >&5 $as_echo "$with_shape" >&6; } if test "x$with_shape" != "xno"; then for ac_header in X11/extensions/shape.h do : ac_fn_cxx_check_header_compile "$LINENO" "X11/extensions/shape.h" "ac_cv_header_X11_extensions_shape_h" "#include " if test "x$ac_cv_header_X11_extensions_shape_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_EXTENSIONS_SHAPE_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_XSHAPE_H=1" fi done fi # Check for Xcursor support # Check whether --with-xcursor was given. if test "${with_xcursor+set}" = set; then : withval=$with_xcursor; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xcursor" >&5 $as_echo "$with_xcursor" >&6; } if test "x$with_xcursor" != "xno"; then for ac_header in X11/Xcursor/Xcursor.h do : ac_fn_cxx_check_header_compile "$LINENO" "X11/Xcursor/Xcursor.h" "ac_cv_header_X11_Xcursor_Xcursor_h" "#include " if test "x$ac_cv_header_X11_Xcursor_Xcursor_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_XCURSOR_XCURSOR_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_XCURSOR_H=1"; X_BASE_LIBS="${X_BASE_LIBS} -lXcursor" fi done fi # Check for XRender support # Check whether --with-xrender was given. if test "${with_xrender+set}" = set; then : withval=$with_xrender; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xrender" >&5 $as_echo "$with_xrender" >&6; } if test "x$with_xrender" != "xno"; then for ac_header in X11/extensions/Xrender.h do : ac_fn_cxx_check_header_compile "$LINENO" "X11/extensions/Xrender.h" "ac_cv_header_X11_extensions_Xrender_h" "#include " if test "x$ac_cv_header_X11_extensions_Xrender_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_EXTENSIONS_XRENDER_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_XRENDER_H=1"; X_BASE_LIBS="${X_BASE_LIBS} -lXrender" fi done fi # Check for XRandR support # Check whether --with-xrandr was given. if test "${with_xrandr+set}" = set; then : withval=$with_xrandr; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xrandr" >&5 $as_echo "$with_xrandr" >&6; } if test "x$with_xrandr" != "xno"; then for ac_header in X11/extensions/Xrandr.h do : ac_fn_cxx_check_header_compile "$LINENO" "X11/extensions/Xrandr.h" "ac_cv_header_X11_extensions_Xrandr_h" "#include " if test "x$ac_cv_header_X11_extensions_Xrandr_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_EXTENSIONS_XRANDR_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_XRANDR_H=1"; X_BASE_LIBS="${X_BASE_LIBS} -lXrandr" fi done fi # Check for XFixes support # Check whether --with-xfixes was given. if test "${with_xfixes+set}" = set; then : withval=$with_xfixes; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xfixes" >&5 $as_echo "$with_xfixes" >&6; } if test "x$with_xfixes" != "xno"; then for ac_header in X11/extensions/Xfixes.h do : ac_fn_cxx_check_header_compile "$LINENO" "X11/extensions/Xfixes.h" "ac_cv_header_X11_extensions_Xfixes_h" "#include " if test "x$ac_cv_header_X11_extensions_Xfixes_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_EXTENSIONS_XFIXES_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_XFIXES_H=1"; X_BASE_LIBS="${X_BASE_LIBS} -lXfixes" fi done fi # Check for XInput support # Check whether --with-xinput was given. if test "${with_xinput+set}" = set; then : withval=$with_xinput; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xinput" >&5 $as_echo "$with_xinput" >&6; } if test "x$with_xinput" != "xno"; then for ac_header in X11/extensions/XInput.h do : ac_fn_cxx_check_header_compile "$LINENO" "X11/extensions/XInput.h" "ac_cv_header_X11_extensions_XInput_h" "#include " if test "x$ac_cv_header_X11_extensions_XInput_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_EXTENSIONS_XINPUT_H 1 _ACEOF CXXFLAGS="${CXXFLAGS} -DHAVE_XINPUT_H=1"; X_BASE_LIBS="${X_BASE_LIBS} -lXi" fi done fi # Check for Input Method support # Check whether --with-xim was given. if test "${with_xim+set}" = set; then : withval=$with_xim; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_xim" >&5 $as_echo "$with_xim" >&6; } ##if test "x$with_xim" = "xno"; then if test "x$with_xim" != "xyes"; then CXXFLAGS="${CXXFLAGS} -DNO_XIM" fi # Substitute variables in output files # Compile with 3D support { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL support" >&5 $as_echo_n "checking for OpenGL support... " >&6; } # Check whether --with-opengl was given. if test "${with_opengl+set}" = set; then : withval=$with_opengl; fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_opengl" >&5 $as_echo "$with_opengl" >&6; } if test "x$with_opengl" != "xno" ; then ac_fn_cxx_check_header_mongrel "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" "$ac_includes_default" if test "x$ac_cv_header_GL_glu_h" = xyes; then : CXXFLAGS="${CXXFLAGS} -DHAVE_GLU_H=1"; LIBS="${LIBS} ${LIBGLU}" fi ac_fn_cxx_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" if test "x$ac_cv_header_GL_gl_h" = xyes; then : CXXFLAGS="${CXXFLAGS} -DHAVE_GL_H=1"; LIBS="${LIBS} ${LIBGL}" fi GL_LIBS="${LIBGL} ${LIBGLU}" fi # Substitute variables in output files # Done. ac_config_files="$ac_config_files Makefile utils/Makefile include/Makefile include/fxver.h src/Makefile src/version.rc chart/Makefile doc/Makefile doc/art/Makefile doc/screenshots/Makefile tests/Makefile adie/Makefile shutterbug/Makefile pathfinder/Makefile calculator/Makefile windows/Makefile fox.spec fox-config fox.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by fox $as_me 1.6.49, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ fox config.status 1.6.49 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/fxver.h") CONFIG_FILES="$CONFIG_FILES include/fxver.h" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/version.rc") CONFIG_FILES="$CONFIG_FILES src/version.rc" ;; "chart/Makefile") CONFIG_FILES="$CONFIG_FILES chart/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/art/Makefile") CONFIG_FILES="$CONFIG_FILES doc/art/Makefile" ;; "doc/screenshots/Makefile") CONFIG_FILES="$CONFIG_FILES doc/screenshots/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "adie/Makefile") CONFIG_FILES="$CONFIG_FILES adie/Makefile" ;; "shutterbug/Makefile") CONFIG_FILES="$CONFIG_FILES shutterbug/Makefile" ;; "pathfinder/Makefile") CONFIG_FILES="$CONFIG_FILES pathfinder/Makefile" ;; "calculator/Makefile") CONFIG_FILES="$CONFIG_FILES calculator/Makefile" ;; "windows/Makefile") CONFIG_FILES="$CONFIG_FILES windows/Makefile" ;; "fox.spec") CONFIG_FILES="$CONFIG_FILES fox.spec" ;; "fox-config") CONFIG_FILES="$CONFIG_FILES fox-config" ;; "fox.pc") CONFIG_FILES="$CONFIG_FILES fox.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi fox-1.6.49/calculator/0000775000175000017500000000000012130343100011526 500000000000000fox-1.6.49/calculator/Makefile.dmc0000664000175000017500000000537412130340076013672 00000000000000############################################################################## # # # FOX: A Free C++ Class Library for X # # # ############################################################################## # Contributed by: Andre Fornacon # ############################################################################## # $Id: Makefile.dmc,v 1.12.2.1 2006/08/08 23:17:35 fox Exp $ # ############################################################################## # This library is free software; you can redistribute it and/or # # modify it under the terms of the GNU Library General Public # # License as published by the Free Software Foundation; either # # version 2 of the License, or (at your option) any later version. # # # # This library is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # # Library General Public License for more details. # # # # You should have received a copy of the GNU Library General Public # # License along with this library; if not, write to the Free # # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # ############################################################################## # Digital Mars C++ Compiler 8.x or later CXX = dmc CXXFLAGS = -mn -5 -a8 RM = del TOPDIR = .. DEFINES = -DNDEBUG -DFOX_BIGENDIAN=0 -DWIN32 -D_WINDOWS LD = link LDFLAGS = LIBS = advapi32.lib+shell32.lib+gdi32.lib+wsock32.lib GLLIBS = opengl32.lib glu32.lib INCDIRS = -I$(TOPDIR)\include FOXLIB = $(TOPDIR)\src\FOX-1.6.lib RESWRAP = $(TOPDIR)\utils\reswrap.exe PROGRAMS = calculator.exe OBJECTS = Calculator.obj main.obj icons.obj HelpWindow.obj Preferences.obj help.obj ICONS = colors.gif information.gif bigcalc.gif constmem.bmp question.gif tinycalc.gif .cpp.obj: $(CXX) -c $(INCDIRS) $(CXXFLAGS) $(DEFINES) $*.cpp all: $(PROGRAMS) calculator.exe: $(OBJECTS) $(FOXLIB) $(LD) $(LDFLAGS) $(OBJECTS) $(FOXLIB) $(LIBS) calculator.obj: icons.cpp icons.h: $(ICONS) $(RM) $@ $(RESWRAP) -i -oa $@ $(ICONS) icons.cpp: $(ICONS) $(RM) $@ echo ^#include "icons.h" > $@ $(RESWRAP) -oa $@ $(ICONS) clean: $(RM) *.obj *.exe *.tds *.map icons.cpp fox-1.6.49/calculator/Calculator.h0000664000175000017500000003017012130340076013722 00000000000000/******************************************************************************** * * * F O X D e s k t o p C a l c u l a t o r * * * ********************************************************************************* * Copyright (C) 2001,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: Calculator.h,v 1.27 2006/01/22 18:01:12 fox Exp $ * ********************************************************************************/ #ifndef CALCULATOR_H #define CALCULATOR_H /*******************************************************************************/ // Mini application object class Calculator : public FXMainWindow { FXDECLARE(Calculator) protected: enum{STACKLEN=32}; protected: FXTextField *display; // Number display FXFont *font; // Display font FXButton *digit[16]; // Digit buttons FXButton *memory[4]; // Memory buttons FXButton *clearbtn; // Clear entry button FXButton *clearallbtn; // Clear all button FXButton *inverse; // Inverse function FXButton *hyper2; // Hyper (for trig) button FXButton *functions[16]; // Function buttons FXButton *operators[14]; // Operator buttons FXButton *numbase[4]; // Numeric base FXButton *angmode[3]; // Angle mode (deg, rad, grad) FXIcon *bigicon; // Big application icon FXIcon *smallicon; // Small application icon FXIcon *cmem; // Label FXIcon *quest; // Question mark FXdouble numstack[STACKLEN]; // Evaluation stack FXint numsp; // Evaluation stack pointer FXuchar opstack[STACKLEN]; // Operator stack FXint opsp; // Operator stack pointer FXdouble recall; // Memory cell FXint limit; // Maximum displayed digits FXint digits; // Number of digits entered FXint base; // Number base FXint angles; // Angle mode FXint precision; // How many digits to show FXbool exponent; // Exponential notation mode FXbool beep; // Beep on error FXint parens; // Count of ( and ) FXuchar modifiers; // Invert, hyperbolic, entry modifiers static const char help[]; protected: Calculator(){} private: Calculator(const Calculator&); Calculator &operator=(const Calculator&); void setDisplayText(const FXString& txt); FXString getDisplayText() const; void setDisplayValue(FXdouble val); FXdouble getDisplayValue() const; FXdouble trigarg(FXdouble ang) const; FXdouble trigres(FXdouble res) const; FXdouble pushnum(FXdouble num); FXdouble setnum(FXdouble num); FXdouble popnum(); FXdouble getnum(); void dyop(FXuchar op); void clear(); void unary(FXuchar op); void dyadic(FXuchar op); void evaluate(); void lparen(); void rparen(); public: long onCmdAngle(FXObject*,FXSelector,void*); long onUpdAngle(FXObject*,FXSelector,void*); long onCmdBase(FXObject*,FXSelector,void*); long onUpdBase(FXObject*,FXSelector,void*); long onUpdDigit(FXObject*,FXSelector,void*); long onCmdDigit(FXObject*,FXSelector,void*); long onCmdPoint(FXObject*,FXSelector,void*); long onUpdPoint(FXObject*,FXSelector,void*); long onCmdExp(FXObject*,FXSelector,void*); long onUpdExp(FXObject*,FXSelector,void*); long onCmdDelete(FXObject*,FXSelector,void*); long onCmdClear(FXObject*,FXSelector,void*); long onCmdClearAll(FXObject*,FXSelector,void*); long onCmdInverse(FXObject*,FXSelector,void*); long onCmdHyper(FXObject*,FXSelector,void*); long onCmdMemRec(FXObject*,FXSelector,void*); long onCmdMemAdd(FXObject*,FXSelector,void*); long onCmdMemSub(FXObject*,FXSelector,void*); long onCmdMemClr(FXObject*,FXSelector,void*); long onCmdSin(FXObject*,FXSelector,void*); long onUpdSin(FXObject*,FXSelector,void*); long onCmdCos(FXObject*,FXSelector,void*); long onUpdCos(FXObject*,FXSelector,void*); long onCmdTan(FXObject*,FXSelector,void*); long onUpdTan(FXObject*,FXSelector,void*); long onCmdLog(FXObject*,FXSelector,void*); long onUpdLog(FXObject*,FXSelector,void*); long onCmdLn(FXObject*,FXSelector,void*); long onUpdLn(FXObject*,FXSelector,void*); long onCmdPi(FXObject*,FXSelector,void*); long onUpdPi(FXObject*,FXSelector,void*); long onCmdFac(FXObject*,FXSelector,void*); long onUpdFac(FXObject*,FXSelector,void*); long onCmdPer(FXObject*,FXSelector,void*); long onUpdPer(FXObject*,FXSelector,void*); long onCmdCom(FXObject*,FXSelector,void*); long onUpdCom(FXObject*,FXSelector,void*); long onCmdRecip(FXObject*,FXSelector,void*); long onUpdRecip(FXObject*,FXSelector,void*); long onCmdPlusMin(FXObject*,FXSelector,void*); long onCmdXToY(FXObject*,FXSelector,void*); long onUpdXToY(FXObject*,FXSelector,void*); long onCmdSqrt(FXObject*,FXSelector,void*); long onUpdSqrt(FXObject*,FXSelector,void*); long onCmdShl(FXObject*,FXSelector,void*); long onUpdShl(FXObject*,FXSelector,void*); long onCmdShr(FXObject*,FXSelector,void*); long onUpdShr(FXObject*,FXSelector,void*); long onCmd2Log(FXObject*,FXSelector,void*); long onUpd2Log(FXObject*,FXSelector,void*); long onCmdLPar(FXObject*,FXSelector,void*); long onCmdRPar(FXObject*,FXSelector,void*); long onCmdAnd(FXObject*,FXSelector,void*); long onCmdOr(FXObject*,FXSelector,void*); long onCmdXor(FXObject*,FXSelector,void*); long onCmdNot(FXObject*,FXSelector,void*); long onCmdMul(FXObject*,FXSelector,void*); long onCmdDiv(FXObject*,FXSelector,void*); long onCmdMod(FXObject*,FXSelector,void*); long onUpdMod(FXObject*,FXSelector,void*); long onCmdAdd(FXObject*,FXSelector,void*); long onCmdSub(FXObject*,FXSelector,void*); long onCmdEnter(FXObject*,FXSelector,void*); long onCmdPreferences(FXObject*,FXSelector,void*); long onUpdColor(FXObject*,FXSelector,void*); long onCmdColor(FXObject*,FXSelector,void*); long onCmdFont(FXObject*,FXSelector,void*); long onCmdExponent(FXObject*,FXSelector,void*); long onUpdExponent(FXObject*,FXSelector,void*); long onCmdPrecision(FXObject*,FXSelector,void*); long onUpdPrecision(FXObject*,FXSelector,void*); long onCmdBeep(FXObject*,FXSelector,void*); long onUpdBeep(FXObject*,FXSelector,void*); long onCmdQuestion(FXObject*,FXSelector,void*); public: enum { MOD_INV=1, // Modes MOD_HYP=2, MOD_ENT=4 }; enum { ANG_DEG, // Angle modes ANG_RAD, ANG_GRA }; enum { NUM_BIN=2, // Number bases NUM_OCT=8, NUM_DEC=10, NUM_HEX=16 }; enum { DY_OR, // Dyadics DY_XOR, DY_AND, DY_SUB, DY_ADD, DY_MOD, DY_IDIV, DY_DIV, DY_MUL, DY_XTOY, DY_XTOINVY, DY_PER, DY_COM, DY_LPAR, DY_RPAR }; enum { UN_NOT, // Unaries UN_NEG, UN_SHL, UN_SHR, UN_SAR, UN_RECIP, UN_FAC, UN_SQRT, UN_QUAD, UN_2LOG, UN_2TOX, UN_LOG, UN_10TOX, UN_LN, UN_EXP, UN_SIN, UN_ASIN, UN_SINH, UN_ASINH, UN_COS, UN_ACOS, UN_COSH, UN_ACOSH, UN_TAN, UN_ATAN, UN_TANH, UN_ATANH }; public: enum { ID_TEXT=FXMainWindow::ID_LAST, ID_PREFERENCES, ID_COLOR_DISPLAY, ID_COLOR_DISPLAYNUMBER, ID_COLOR_DIGITS, ID_COLOR_HEXDIGITS, ID_COLOR_OPERATORS, ID_COLOR_FUNCTIONS, ID_COLOR_MEMORY, ID_COLOR_BASE, ID_COLOR_ANGLES, ID_COLOR_INVERT, ID_COLOR_HYPER, ID_COLOR_CLEARALL, ID_COLOR_CLEAR, ID_EXPONENT_ALWAYS, ID_EXPONENT_NEVER, ID_PRECISION, ID_QUESTION, ID_BEEP, ID_FONT, ID_BASE, ID_BIN=ID_BASE+NUM_BIN, ID_OCT=ID_BASE+NUM_OCT, ID_DEC=ID_BASE+NUM_DEC, ID_HEX=ID_BASE+NUM_HEX, ID_MODE, ID_DEG=ID_MODE+ANG_DEG, ID_RAD=ID_MODE+ANG_RAD, ID_GRA=ID_MODE+ANG_GRA, ID_MEM_REC, ID_MEM_ADD, ID_MEM_SUB, ID_MEM_CLR, ID_PLUSMIN, ID_ENTER, ID_CLEAR, ID_CLEARALL, ID_DELETE, ID_INV, ID_HYP, ID_EXP, ID_PNT, ID_PI, ID_0, ID_1, ID_2, ID_3, ID_4, ID_5, ID_6, ID_7, ID_8, ID_9, ID_A, ID_B, ID_C, ID_D, ID_E, ID_F, ID_OR, ID_XOR, ID_AND, ID_SUB, ID_ADD, ID_MOD, ID_DIV, ID_MUL, ID_XTOY, ID_PER, ID_COM, ID_LPAR, ID_RPAR, ID_NOT, ID_SHL, ID_SHR, ID_RECIP, ID_FAC, ID_SQRT, ID_2LOG, ID_LOG, ID_LN, ID_SIN, ID_COS, ID_TAN, ID_LAST }; public: /// Construct calculator dialog Calculator(FXApp* a); // Close the window and save registry virtual FXbool close(FXbool notify=FALSE); /// Create virtual void create(); /// Set digit color void setDigitColor(FXColor clr); FXColor getDigitColor() const; /// Set digit color void setHexDigitColor(FXColor clr); FXColor getHexDigitColor() const; /// Set operator color void setOperatorColor(FXColor clr); FXColor getOperatorColor() const; /// Set function color void setFunctionColor(FXColor clr); FXColor getFunctionColor() const; /// Set memory color void setMemoryColor(FXColor clr); FXColor getMemoryColor() const; /// Set inverse color void setInverseColor(FXColor clr); FXColor getInverseColor() const; /// Set hyp color void setHyperColor(FXColor clr); FXColor getHyperColor() const; /// Set clear color void setClearColor(FXColor clr); FXColor getClearColor() const; /// Set clear all color void setClearAllColor(FXColor clr); FXColor getClearAllColor() const; /// Set display color void setDisplayColor(FXColor clr); FXColor getDisplayColor() const; /// Set display number color void setDisplayNumberColor(FXColor clr); FXColor getDisplayNumberColor() const; /// Set numeric base color void setBaseColor(FXColor clr); FXColor getBaseColor() const; /// Set numeric base color void setAngleColor(FXColor clr); FXColor getAngleColor() const; /// Set number base void setBase(FXint base); FXint getBase() const { return base; } /// Set angle mode void setAngles(FXint ang){ angles=ang; } FXint getAngles() const { return angles; } /// Set exponent mode void setExponentMode(FXbool expmode); FXbool getExponentMode() const { return exponent; } /// Set precision void setPrecision(FXint prec); FXint getPrecision() const { return precision; } /// Beep on error void setBeep(FXbool on){ beep=on; } FXbool getBeep() const { return beep; } /// Set display font void setDisplayFont(FXFont* font); FXFont* getDisplayFont() const; /// Clear the calculator void clearAll(); /// Read/write registry void readRegistry(); void writeRegistry(); /// Destroy calculator virtual ~Calculator(); }; #endif fox-1.6.49/calculator/information.gif0000644000175000017500000000144711637250333014506 00000000000000GIF87a ¥øÈÈÈÀÀÀ¨ÀÈÀ¸¨¨¤˜”8P`øøøððèàààØØØˆŒˆPPHxth8888`@h@XàèèÈÔØ˜¸È€ °¸ÌØ`¨H„ (t˜0h˜d\ˆ8hØØÈXXˆXˆHpÐȸ¸°˜P€¸°¨HpèèààØÈ  èàÐPx¸¨ˆ0X,PàÔÀ ˜èØÀèàÈ$@àÐ°èØ¸ą̀¸ xèи000àÈ ØÐÀ, þ@€pH,Hc@X:BÁpH&ˆ¬V›P, ë»-w‚°˜((» DÀ±~@"|dâÎÆiV n YjE ‡‰{e YEœ­ Y ·D›¬Y³Z R¶C[!!"#$ËY %&tØYÛ""Û'$£Y] %(é `¦AC‡ƒô¶‘"‰%P±‚B B>Xp-ÞAôÞ‹À‚U´X#Þe Vd.>@( ¥þÊ ^øÎcZ<Ø‘ŒV¨ø ´@F ¬ n ¡ÅÞM¦0ž¢1µÅÊ Bbh`ÒÒ, íˆCF¨®˜!@ 2´­§å„aMeH ×¬Ù5ú>ˆqY½oœH8‚Œ 4h˜ `Ö†|‡Ä€à¢uŠ>$$À¸qÀ 3Z˜†Œ£¯º0’hMœ„ñb Q ÄŠÝ5rèØAd²Œ;>HT÷³r,P8?Çô"=bÜV†{äÉiØ6Qbäè8pœ7£ÿÿÉõÇÀ|õ­]æé°Ÿö§ž €Gß §åC~:ààuVN0P@hàÝUdò Ÿ>l(†( P€ (PÂ}ž¨aŠ&A@3?P04^¨_ŠD¦£#Hš ¤’/¼°ƒ“;D¹4F®aå•X";fox-1.6.49/calculator/bigcalc.gif0000644000175000017500000000036311637250333013541 00000000000000GIF87aã°ÀؘŒˆøüøøüàˆ(à´0ÀÀÀÐüÈø,¨„I«½8H1¸ïà'† Qƒ¡®lá¾p¬š  8^¨Åáÿ@àì”2€;CÁl:›‡a'S¯?i‘ÅízW4›Q°ÓËä³!‘HÒŠÇòAN7Î×wC˜º{)]}€~zD_‡ˆ{jfŒin†vuq’•”…Sš~œƒ€˜[ˆ¢`'b‹Ž9f 7w”¯®A™‚¶0Z£»R¿ÀÁÂÃÄ1ÈÉÊ/;fox-1.6.49/calculator/help.cpp0000664000175000017500000001711412130340076013117 00000000000000/******************************************************************************** * * * O n - L i n e H e l p T e x t * * * ********************************************************************************* * Copyright (C) 2001,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: help.cpp,v 1.6 2006/01/22 18:01:13 fox Exp $ * ********************************************************************************/ #include "fx.h" #include "Calculator.h" // Help text const char Calculator::help[]= "\n\n" " The FOX Calculator\n" "\n\n" "Introduction.\n" "\n" "The FOX Calculator is a simple desktop calculator geared toward the programmer. " "It supports not only a full complement scientific functions, but also common " "operations that programmers need, such as bitwise operations, bitwise shifting, " "and base-2 logarithm and exponents, and numeric conversion between hexadecimal, " "octal, binary, and decimal.\n" "The FOX Calculator implements correct operator precedences, so expressions like " "2+3*5 yield the correct result, which is 17, and not 25.\n" "Also featured is a constant memory, which permanently stores its value even if " "you exit the calculator and restart it later.\n" "\n\n" "Configuration.\n" "\n" "Pressing on the calculator icon brings up the Calculator Preferences dialog. " "The Calculator Preferences dialog comprises three settings:\n\n" "\t\t- Settings for the calculator itself;\n" "\t\t- Color settings of the button groups;\n" "\t\t- Information about the calculator.\n" "\n" "In the Calculator settings panel, you can change font used for the " "display, by pressing the \"Set...\" button to bring up the standard Font Selection " "Dialog.\n" "You can change the way numbers are printed as well. Checking \"Always show exponent\" " "will cause the calculator display always to display the number in exponential notation. " "Checking \"Never show exponent\" will cause the calculator to render the number in simple " "dot notation.\n" "The precision can be set by means of the spin button; the default precision is set to 16.\n" "Finally, the calculator can be set to beep when errors occur.\n" "\n" "In the Color settings panel, you can change the colors of the various button groups.\n" "The buttons are grouped by function; the numbers are in one group, and the operators are " "in another, and so on.\n" "\n" "In the About panel, some information is presented about the calculator, like version " "number and author's contact.\n" "\n\n" "Entering Numbers.\n" "\n" "You can enter a number by clicking on the digit buttons, or simply hit the right " "digit on the keyboard. Numbers in exponential notation are entered by entering the " "mantissa first, then hitting the \"EXP\" button, and then entering the exponent. " "Up to 3 digits may be entered for the exponent; entering more than 3 will cause the " "digits to shift, i.e. the first digit entered will be dropped and replaced by the " "second, the second digit will be replaced by the third, and the third will be replaced " "by the new input.\n" "Changing the sign of the exponent is accomplished by hittin the \"+/-\" button.\n" "At any time, you can hit the Backspace key to delete the last digit entered.\n" "Two numbers, pi and e (euler's number) may be entered with a single button:\n" "\n" "\tpi\tEnters the number 3.1415926535897932384626433833\n" "\te\tEnters the number 2.7182818284590452353602874713 (hit the \"inv\" button first)\n" "\tphi\tEnters the golden ratio number 1.6180339887498948482045868343 (hit the \"hyp\" button first)\n" "\t1/phi\tEnters the inverse golden ratio number (hit the \"hyp\" and \"inv\" buttons)\n" "\n\n" "Operators.\n" "\n" "The operators in the FOX Calculator are the usual suspects:\n" "\n" "\t+\tAddition\n" "\t-\tSubstraction\n" "\t*\tMultiplication\n" "\t/\tFloating point division\n" "\n" "In addition, FOX Calculator also includes bitwise operators, such as:\n" "\n" "\tAND\tBit-wise logical and\n" "\tOR\tBit-wise logical or\n" "\tXOR\tBit-wise logical exclusive or\n" "\tNOT\tBit-wise logical not\n" "\tSHL\tBit-wise shift left\n" "\tSHR\tBit-wise shift right\n" "\tSAR\tBit-wise signed shift right (hit the \"inv\" button first)\n" "\n" "Also nice for programmers is the inclusion of integer operations:\n" "\n" "\tmod\tInteger modulo\n" "\tdiv\tInteger division (hit the \"inv\" button first)\n" "\n" "All the operators have certain precedence relations with each other, so that " "an expression is evaluated correctly.\n" "\n\n" "Trigonometric Functions.\n" "\n" "The Calculator incorporates the usual trigonometric functions:\n" "\n" "\tsin \tSine\n" "\tcos \tCosine\n" "\ttan \tTangent\n" "\tasin \tInverse sine or arc sine (hit the \"inv\" button first)\n" "\tacos \tInverse cosine\n" "\tatan \tInverse tangent\n" "\tsinh \tHyperbolic sine (hit the \"hyp\" button first)\n" "\tcosh \tHyperbolic cosine\n" "\ttanh \tHyperbolic tangent\n" "\tasinh \tInverse hyperbolic sine (hit the \"hyp\" and \"inv\"buttons first)\n" "\tacosh \tInverse hyperbolic cosine\n" "\tatanh \tInverse hyperbolic tangent\n" "\n" "For the first 6 functions, the angle mode determines whether the argument is " "specified in terms of degrees, radians, or grad. " "Note that the angle mode is preserved across invocations of the Calculator.\n" "\n\n" "Other Functions.\n" "\n" "Other functions supported by the calculator are the following:\n" "\n" "\tlog \tBase 10 logarithm\n" "\tln \tNatural logarithm\n" "\t2log \tBase 2 logarithm\n" "\tx! \tFactorial\n" "\tnPr \tPermutations\n" "\tnCr \tCombinations\n" "\tsqrt \tSquare root\n" "\tx^y \tX raised to the power y\n" "\t1/x \tReciprocal\n" "\t10^x \tBase 10 exponentiation (hit the \"inv\" button first)\n" "\te^x \tExponentiation\n" "\t2^x \tBase 2 exponentiation\n" "\tx^1/y \tX raised to the power 1/y\n" "\tx^2 \tX squared\n" "\n\n" "Limits.\n" "\n" "The calculator works in IEEE 746 double precision mode; for bit-wise operations, " "it uses 32 bit integers. Thus, the numeric limits are as follows: \n" "\n" "Smallest real number:\t2.2250738585072010e-308\n" "Largest real number: \t1.7976931348623158e+308\n" "Smallest integer number:\t0\n" "Largest integer number:\t4294967295\n" ; fox-1.6.49/calculator/icons.h0000664000175000017500000000107212130342655012750 00000000000000/* Generated by reswrap version 4.0.0 */ /* created by reswrap from file colors.gif */ extern const unsigned char colors[]; /* created by reswrap from file information.gif */ extern const unsigned char information[]; /* created by reswrap from file bigcalc.gif */ extern const unsigned char bigcalc[]; /* created by reswrap from file constmem.bmp */ extern const unsigned char constmem[]; /* created by reswrap from file question.gif */ extern const unsigned char question[]; /* created by reswrap from file tinycalc.gif */ extern const unsigned char tinycalc[]; fox-1.6.49/calculator/Makefile.wc0000664000175000017500000000566612130340076013544 00000000000000############################################################################## # # # FOX: A Free C++ Class Library for X # # # ############################################################################## # Copyright (C) 1997,2005 by Jeroen van der Zijp. All Rights Reserved. # ############################################################################## # $Id: Makefile.wc,v 1.9 2005/09/22 11:14:47 fox Exp $ # ############################################################################## # This library is free software; you can redistribute it and/or # # modify it under the terms of the GNU Library General Public # # License as published by the Free Software Foundation; either # # version 2 of the License, or (at your option) any later version. # # # # This library is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # # Library General Public License for more details. # # # # You should have received a copy of the GNU Library General Public # # License along with this library; if not, write to the Free # # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # ############################################################################## # For use with OpenWatcom C++ v1.0 or later CXX = wpp386 CXXFLAGS = /w3 /e1 /zq /5r /ei /xs /xr /fp5 /otexan /zp=4 RM = del TOPDIR = .. DEFINES = -DNDEBUG -DFOX_BIGENDIAN=0 -DWIN32 -D_WINDOWS LD = wcl386 LDFLAGS = -l=nt_win GLLIBS = opengl32.lib glu32.lib INCDIRS = -I$(TOPDIR)\include FOXLIB = $(TOPDIR)\src\FOX-1.6.lib $(%WATCOM)\lib386\nt\comctl32.lib RESWRAP = $(TOPDIR)\utils\reswrap.exe PROGRAMS = calculator.exe OBJECTS = OBJECTS += Calculator.obj OBJECTS += main.obj OBJECTS += icons.obj OBJECTS += HelpWindow.obj OBJECTS += Preferences.obj OBJECTS += help.obj ICONS = ICONS += bigcalc.gif ICONS += colors.gif ICONS += constmem.bmp ICONS += information.gif ICONS += question.gif ICONS += tinycalc.gif .cpp.obj: .AUTODEPEND $(CXX) $(INCDIRS) $(CXXFLAGS) $(DEFINES) $*.cpp all: $(PROGRAMS) Calculator.exe: $(OBJECTS) $(FOXLIB) $(LD) $(LDFLAGS) $(OBJECTS) $(FOXLIB) Calculator.obj: icons.h icons.cpp icons.h: $(ICONS) $(RESWRAP) -i -o icons.h $(ICONS) icons.cpp: $(ICONS) $(RESWRAP) -e -o icons.cpp $(ICONS) clean: .SYMBOLIC $(RM) *.obj $(RM) *.exe $(RM) *.err $(RM) icons.cpp $(RM) icons.h fox-1.6.49/calculator/main.cpp0000664000175000017500000000475112130340076013116 00000000000000/******************************************************************************** * * * F O X D e s k t o p C a l c u l a t o r * * * ********************************************************************************* * Copyright (C) 2001,2005 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: main.cpp,v 1.8 2005/01/16 16:06:06 fox Exp $ * ********************************************************************************/ #include "fx.h" #include "fxkeys.h" #include #include #include #include #ifndef WIN32 #include #endif #include #include "Calculator.h" // Start the whole thing int main(int argc,char *argv[]){ // Make application FXApp application("Calculator",FXString::null); // Open display application.init(argc,argv); // Main window Calculator* calculator=new Calculator(&application); // Handle interrupt to save stuff nicely application.addSignal(SIGINT,calculator,Calculator::ID_CLOSE); // Create app application.create(); // Run return application.run(); } fox-1.6.49/calculator/Makefile.am0000664000175000017500000000156112130340076013516 00000000000000## Process this file with automake to produce Makefile.in CXXFLAGS = @CXXFLAGS@ @X_CFLAGS@ INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include RESWRAP = $(top_builddir)/utils/reswrap SUFFIXES = .gif .bmp LDADD = $(top_builddir)/src/libFOX-1.6.la -lm bin_PROGRAMS = calculator man_MANS = calculator.1 ICONS = \ colors.gif \ information.gif \ bigcalc.gif \ constmem.bmp \ question.gif \ tinycalc.gif calculator_SOURCES = \ icons.h \ icons.cpp \ Calculator.h \ Calculator.cpp \ HelpWindow.h \ HelpWindow.cpp \ Preferences.h \ Preferences.cpp \ help.cpp \ main.cpp \ LICENSE \ $(ICONS) Calculator.cpp: icons.h icons.cpp icons.h: $(ICONS) $(RESWRAP) -i -o icons.h $^ icons.cpp: $(ICONS) $(RESWRAP) -e -o icons.cpp $^ CLEANFILES = icons.h icons.cpp EXTRA_DIST = $(man_MANS) \ Makefile.bc \ Makefile.wc \ Makefile.dmc fox-1.6.49/calculator/HelpWindow.h0000664000175000017500000000441612130340076013715 00000000000000/******************************************************************************** * * * H e l p W i n d o w * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: HelpWindow.h,v 1.6 2006/01/22 18:01:13 fox Exp $ * ********************************************************************************/ #ifndef HELPWINDOW_H #define HELPWINDOW_H //class FXText; /// Online help dialog box class HelpWindow : public FXDialogBox { FXDECLARE(HelpWindow) protected: FXText *helptext; // Help display private: HelpWindow(){} HelpWindow(const HelpWindow&); public: HelpWindow(FXWindow *owner,const FXString& title); void setHelp(const FXString& help); FXString getHelp() const; virtual ~HelpWindow(); }; #endif fox-1.6.49/calculator/calculator.10000664000175000017500000001253312130340076013676 00000000000000.TH CALCULATOR 1 "30 January 2002" .SH NAME calculator \- simple desktop calculator .SH SYNOPSIS \fBcalculator\fP .SH DESCRIPTION .LP The FOX Calculator is a simple desktop calculator geared toward the programmer. It supports not only a full complement scientific functions, but also common operations that programmers need, such as bitwise operations, bitwise shifting, and base-2 logarithm and exponents, and numeric conversion between hexadecimal, octal, binary, and decimal. The FOX Calculator implements correct operator precedences, so expressions like 2+3*5 yield the correct result, which is 17, and not 25. Also featured is a constant memory, which permanently stores its value even if you exit the calculator and restart it later. .SH CONFIGURATION Pressing on the calculator icon brings up the Calculator Preferences dialog. The Calculator Preferences dialog comprises three settings: - Settings for the calculator itself; .br - Color settings of the button groups; .br - Information about the calculator. In the Calculator settings panel, you can change font used for the display, by pressing the "Set..." button to bring up the standard Font Selection Dialog. You can change the way numbers are printed as well. Checking "Always show exponent" will cause the calculator display always to display the number in exponential notation. Checking "Never show exponent" will cause the calculator to render the number in simple dot notation. The precision can be set by means of the spin button; the default precision is set to 16. Finally, the calculator can be set to beep when errors occur. In the Color settings panel, you can change the colors of the various button groups. The buttons are grouped by function; the numbers are in one group, and the operators are in another, and so on. In the About panel, some information is presented about the calculator, like version number and author's contact. .SH ENTERING NUMBERS You can enter a number by clicking on the digit buttons, or simply hit the right digit on the keyboard. Numbers in exponential notation are entered by entering the mantissa first, then hitting the "EXP" button, and then entering the exponent. Up to 3 digits may be entered for the exponent; entering more than 3 will cause the digits to shift, i.e. the first digit entered will be dropped and replaced by the second, the second digit will be replaced by the third, and the third will be replaced by the new input. Changing the sign of the exponent is accomplished by hittin the \"+/-\" button. At any time, you can hit the Backspace key to delete the last digit entered. Two numbers, pi and e (euler's number) may be entered with a single button: .TP pi - Enters the number 3.1415926535897932384626433833 .TP e - Enters the number 2.7182818284590452353602874713 (hit the "inv" button first) .SH OPERATORS The operators in the FOX Calculator are the usual suspects: .TP .I + Addition .TP .I \- Substraction .TP .I * Multiplication .TP .I / Floating point division .P In addition, FOX Calculator also includes bitwise operators, such as: .TP .I AND Bit-wise logical and .TP .I OR Bit-wise logical or .TP .I XOR Bit-wise logical exclusive or .TP .I NOT Bit-wise logical not .TP .I SHL Bit-wise shift left .TP .I SHR Bit-wise shift right .TP .I SAR Bit-wise signed shift right (hit the "inv" button first) .P Also nice for programmers is the inclusion of integer operations: .TP .I mod Integer modulo .TP .I div Integer division (hit the \"inv\" button first) .P All the operators have certain precedence relations with each other, so that an expression is evaluated correctly. .SH TRIGONOMETRIC FUNCTIONS The Calculator incorporates the usual trigonometric functions: .TP .I sin Sine .TP .I cos Cosine .TP .I tan Tangent .TP .I asin Inverse sine or arc sine (hit the "inv" button first) .TP .I acos Inverse cosine .TP .I atan Inverse tangent .TP .I sinh Hyperbolic sine (hit the "hyp" button first) .TP .I cosh Hyperbolic cosine .TP .I tanh Hyperbolic tangent .TP .I asinh Inverse hyperbolic sine (hit the "hyp" and "inv"buttons first) .TP .I acosh Inverse hyperbolic cosine .TP .I atanh Inverse hyperbolic tangent .P For the first 6 functions, the angle mode determines whether the argument is specified in terms of degrees, radians, or grad. Note that the angle mode is preserved across invocations of the Calculator. .SH OTHER FUNCTIONS Other functions supported by the calculator are the following: .TP .I log Base 10 logarithm .TP .I ln Natural logarithm .TP .I 2log Base 2 logarithm .TP .I x! Factorial .TP .I nPr Permutations .TP .I nCr Combinations .TP .I sqrt Square root .TP .I x^y X raised to the power y .TP .I 1/x Reciprocal .TP .I 10^x Base 10 exponentiation (hit the "inv" button first) .TP .I e^x Exponentiation .TP .I 2^x Base 2 exponentiation .TP .I x^1/y X raised to the power 1/y .TP .I x^2 X squared .SH LIMITS The calculator works in IEEE 746 double precision mode; for bit-wise operations, it uses 32 bit integers. Thus, the numeric limits are as follows: .P Smallest real number: 2.2250738585072010e-308 .br Largest real number: 1.7976931348623158e+308 .br Smallest integer number: 0 .br Largest integer number: 4294967295 .SH AUTHOR This manpage was originally written by Bastian Kleineidam for the Debian distribution of the FOX Toolkit. The main author of FOX is Jeroen van der Zijp . For a list of contributors see /usr/share/doc/libfox0.99/AUTHORS. fox-1.6.49/calculator/Calculator.cpp0000664000175000017500000016702112130340076014263 00000000000000/******************************************************************************** * * * F O X D e s k t o p C a l c u l a t o r * * * ********************************************************************************* * Copyright (C) 2001,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: Calculator.cpp,v 1.58 2006/01/22 18:01:12 fox Exp $ * ********************************************************************************/ #include "fx.h" #include "fxkeys.h" #include #include #include #include #ifndef WIN32 #include #endif #include #include "icons.h" #include "Calculator.h" #include "Preferences.h" #include "HelpWindow.h" #define BINARY_LIMIT 32 // 32 bits #define OCTAL_LIMIT 11 // 11 digits #define DECIMAL_LIMIT 16 // +1.234567890123456E-308 #define HEXADECIMAL_LIMIT 8 // 8 hexadecimal digits #define GOLDEN 1.6180339887498948482045868343 // Golden ratio #define INVGOLDEN (1.0/GOLDEN) // Inverse golden ratio #define DEG2RAD(x) (((2.0*PI)/360.0)*(x)) // Degrees to radians #define GRA2RAD(x) ((PI/200.0)*(x)) // Grad to radians #define RAD2DEG(x) ((360.0/(2.0*PI))*(x)) // Radians to degrees #define RAD2GRA(x) ((200.0/PI)*(x)) // Radians to grad /* Notes: - On window enter, direct keyboard focus to numeric input buttons - When clicking on the display focus should stay on buttons - On resize I'd like x-y aspect to remain the same - Would be nice if font size more or less follows window size - History option in display to retrieve back earlier results (stored when pressing '=') - Add button to return largest prime smaller than x. - Add buttons for lcm/gcd. */ /*******************************************************************************/ // Map FXDEFMAP(Calculator) CalculatorMap[]={ FXMAPFUNCS(SEL_COMMAND,Calculator::ID_MODE,Calculator::ID_GRA,Calculator::onCmdAngle), FXMAPFUNCS(SEL_UPDATE,Calculator::ID_MODE,Calculator::ID_GRA,Calculator::onUpdAngle), FXMAPFUNCS(SEL_COMMAND,Calculator::ID_BASE,Calculator::ID_HEX,Calculator::onCmdBase), FXMAPFUNCS(SEL_UPDATE,Calculator::ID_BASE,Calculator::ID_HEX,Calculator::onUpdBase), FXMAPFUNCS(SEL_UPDATE,Calculator::ID_0,Calculator::ID_F,Calculator::onUpdDigit), FXMAPFUNCS(SEL_COMMAND,Calculator::ID_0,Calculator::ID_F,Calculator::onCmdDigit), FXMAPFUNCS(SEL_COMMAND,Calculator::ID_COLOR_DISPLAY,Calculator::ID_COLOR_CLEAR,Calculator::onCmdColor), FXMAPFUNCS(SEL_CHANGED,Calculator::ID_COLOR_DISPLAY,Calculator::ID_COLOR_CLEAR,Calculator::onCmdColor), FXMAPFUNCS(SEL_UPDATE,Calculator::ID_COLOR_DISPLAY,Calculator::ID_COLOR_CLEAR,Calculator::onUpdColor), FXMAPFUNC(SEL_COMMAND,Calculator::ID_EXPONENT_ALWAYS,Calculator::onCmdExponent), FXMAPFUNC(SEL_COMMAND,Calculator::ID_EXPONENT_NEVER,Calculator::onCmdExponent), FXMAPFUNC(SEL_UPDATE,Calculator::ID_EXPONENT_ALWAYS,Calculator::onUpdExponent), FXMAPFUNC(SEL_UPDATE,Calculator::ID_EXPONENT_NEVER,Calculator::onUpdExponent), FXMAPFUNC(SEL_COMMAND,Calculator::ID_PRECISION,Calculator::onCmdPrecision), FXMAPFUNC(SEL_UPDATE,Calculator::ID_PRECISION,Calculator::onUpdPrecision), FXMAPFUNC(SEL_COMMAND,Calculator::ID_QUESTION,Calculator::onCmdQuestion), FXMAPFUNC(SEL_COMMAND,Calculator::ID_BEEP,Calculator::onCmdBeep), FXMAPFUNC(SEL_UPDATE,Calculator::ID_BEEP,Calculator::onUpdBeep), FXMAPFUNC(SEL_COMMAND,Calculator::ID_FONT,Calculator::onCmdFont), FXMAPFUNC(SEL_COMMAND,Calculator::ID_PREFERENCES,Calculator::onCmdPreferences), FXMAPFUNC(SEL_COMMAND,Calculator::ID_CLEAR,Calculator::onCmdClear), FXMAPFUNC(SEL_COMMAND,Calculator::ID_CLEARALL,Calculator::onCmdClearAll), FXMAPFUNC(SEL_COMMAND,Calculator::ID_INV,Calculator::onCmdInverse), FXMAPFUNC(SEL_COMMAND,Calculator::ID_HYP,Calculator::onCmdHyper), FXMAPFUNC(SEL_COMMAND,Calculator::ID_MEM_REC,Calculator::onCmdMemRec), FXMAPFUNC(SEL_COMMAND,Calculator::ID_MEM_ADD,Calculator::onCmdMemAdd), FXMAPFUNC(SEL_COMMAND,Calculator::ID_MEM_SUB,Calculator::onCmdMemSub), FXMAPFUNC(SEL_COMMAND,Calculator::ID_MEM_CLR,Calculator::onCmdMemClr), FXMAPFUNC(SEL_COMMAND,Calculator::ID_PNT,Calculator::onCmdPoint), FXMAPFUNC(SEL_UPDATE,Calculator::ID_PNT,Calculator::onUpdPoint), FXMAPFUNC(SEL_COMMAND,Calculator::ID_EXP,Calculator::onCmdExp), FXMAPFUNC(SEL_UPDATE,Calculator::ID_EXP,Calculator::onUpdExp), FXMAPFUNC(SEL_COMMAND,Calculator::ID_DELETE,Calculator::onCmdDelete), FXMAPFUNC(SEL_COMMAND,Calculator::ID_SIN,Calculator::onCmdSin), FXMAPFUNC(SEL_UPDATE,Calculator::ID_SIN,Calculator::onUpdSin), FXMAPFUNC(SEL_COMMAND,Calculator::ID_COS,Calculator::onCmdCos), FXMAPFUNC(SEL_UPDATE,Calculator::ID_COS,Calculator::onUpdCos), FXMAPFUNC(SEL_COMMAND,Calculator::ID_TAN,Calculator::onCmdTan), FXMAPFUNC(SEL_UPDATE,Calculator::ID_TAN,Calculator::onUpdTan), FXMAPFUNC(SEL_COMMAND,Calculator::ID_LOG,Calculator::onCmdLog), FXMAPFUNC(SEL_UPDATE,Calculator::ID_LOG,Calculator::onUpdLog), FXMAPFUNC(SEL_COMMAND,Calculator::ID_LN,Calculator::onCmdLn), FXMAPFUNC(SEL_UPDATE,Calculator::ID_LN,Calculator::onUpdLn), FXMAPFUNC(SEL_COMMAND,Calculator::ID_PI,Calculator::onCmdPi), FXMAPFUNC(SEL_UPDATE,Calculator::ID_PI,Calculator::onUpdPi), FXMAPFUNC(SEL_COMMAND,Calculator::ID_FAC,Calculator::onCmdFac), FXMAPFUNC(SEL_UPDATE,Calculator::ID_FAC,Calculator::onUpdFac), FXMAPFUNC(SEL_COMMAND,Calculator::ID_PER,Calculator::onCmdPer), FXMAPFUNC(SEL_UPDATE,Calculator::ID_PER,Calculator::onUpdPer), FXMAPFUNC(SEL_COMMAND,Calculator::ID_COM,Calculator::onCmdCom), FXMAPFUNC(SEL_UPDATE,Calculator::ID_COM,Calculator::onUpdCom), FXMAPFUNC(SEL_COMMAND,Calculator::ID_RECIP,Calculator::onCmdRecip), FXMAPFUNC(SEL_UPDATE,Calculator::ID_RECIP,Calculator::onUpdRecip), FXMAPFUNC(SEL_COMMAND,Calculator::ID_PLUSMIN,Calculator::onCmdPlusMin), FXMAPFUNC(SEL_COMMAND,Calculator::ID_XTOY,Calculator::onCmdXToY), FXMAPFUNC(SEL_UPDATE,Calculator::ID_XTOY,Calculator::onUpdXToY), FXMAPFUNC(SEL_COMMAND,Calculator::ID_SQRT,Calculator::onCmdSqrt), FXMAPFUNC(SEL_UPDATE,Calculator::ID_SQRT,Calculator::onUpdSqrt), FXMAPFUNC(SEL_COMMAND,Calculator::ID_SHL,Calculator::onCmdShl), FXMAPFUNC(SEL_UPDATE,Calculator::ID_SHL,Calculator::onUpdShl), FXMAPFUNC(SEL_COMMAND,Calculator::ID_SHR,Calculator::onCmdShr), FXMAPFUNC(SEL_UPDATE,Calculator::ID_SHR,Calculator::onUpdShr), FXMAPFUNC(SEL_COMMAND,Calculator::ID_2LOG,Calculator::onCmd2Log), FXMAPFUNC(SEL_UPDATE,Calculator::ID_2LOG,Calculator::onUpd2Log), FXMAPFUNC(SEL_COMMAND,Calculator::ID_LPAR,Calculator::onCmdLPar), FXMAPFUNC(SEL_COMMAND,Calculator::ID_RPAR,Calculator::onCmdRPar), FXMAPFUNC(SEL_COMMAND,Calculator::ID_AND,Calculator::onCmdAnd), FXMAPFUNC(SEL_COMMAND,Calculator::ID_OR,Calculator::onCmdOr), FXMAPFUNC(SEL_COMMAND,Calculator::ID_XOR,Calculator::onCmdXor), FXMAPFUNC(SEL_COMMAND,Calculator::ID_NOT,Calculator::onCmdNot), FXMAPFUNC(SEL_COMMAND,Calculator::ID_MUL,Calculator::onCmdMul), FXMAPFUNC(SEL_COMMAND,Calculator::ID_DIV,Calculator::onCmdDiv), FXMAPFUNC(SEL_COMMAND,Calculator::ID_MOD,Calculator::onCmdMod), FXMAPFUNC(SEL_UPDATE,Calculator::ID_MOD,Calculator::onUpdMod), FXMAPFUNC(SEL_COMMAND,Calculator::ID_ADD,Calculator::onCmdAdd), FXMAPFUNC(SEL_COMMAND,Calculator::ID_SUB,Calculator::onCmdSub), FXMAPFUNC(SEL_COMMAND,Calculator::ID_ENTER,Calculator::onCmdEnter), }; // Implementation FXIMPLEMENT(Calculator,FXMainWindow,CalculatorMap,ARRAYNUMBER(CalculatorMap)) // Use a trick to get a nan #if FOX_BIGENDIAN static const FXuint nanny[2]={0x7fffffff,0xffffffff}; #else static const FXuint nanny[2]={0xffffffff,0x7fffffff}; #endif // Double precision nan static const FXdouble& dblnan=*((FXdouble*)nanny); // Operator priorities static const FXuchar priority[]={ 1, // DY_OR 1, // DY_XOR 1, // DY_AND 2, // DY_SUB 2, // DY_ADD 3, // DY_MOD 3, // DY_IDIV 3, // DY_DIV 3, // DY_MUL 4, // DY_XTOY 4, // DY_XTOINVY 5, // DY_PER 5, // DY_COM 8, // DY_LPAR 8, // DY_RPAR }; /*******************************************************************************/ // Construct calculator dialog Calculator::Calculator(FXApp* a):FXMainWindow(a,"FOX Calculator",NULL,NULL,DECOR_ALL, 0,0,0,0, 0,0){ // Default font used by default, duh! font=NULL; // Make some icons bigicon=new FXGIFIcon(getApp(),bigcalc); smallicon=new FXGIFIcon(getApp(),tinycalc); cmem=new FXBMPIcon(getApp(),constmem); quest=new FXGIFIcon(getApp(),question); // Application icons setIcon(bigicon); setMiniIcon(smallicon); // Interior FXVerticalFrame *vert=new FXVerticalFrame(this,LAYOUT_FILL_X,0,0,0,0, 8,8,8,4, 1,1); FXHorizontalFrame *displayframe=new FXHorizontalFrame(vert,LAYOUT_FILL_X,0,0,0,0, 0,0,0,0); new FXButton(displayframe,"FOX Calculator",bigicon,this,ID_PREFERENCES,ICON_BEFORE_TEXT|JUSTIFY_LEFT|LAYOUT_FILL_Y,0,0,0,0, 4,4,2,2); new FXButton(displayframe,FXString::null,quest,this,ID_QUESTION,ICON_BEFORE_TEXT|JUSTIFY_LEFT|LAYOUT_FILL_Y,0,0,0,0, 4,4,2,2); display=new FXTextField(displayframe,16,this,ID_TEXT,TEXTFIELD_READONLY|FRAME_SUNKEN|FRAME_THICK|JUSTIFY_RIGHT|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0,0,0,0, 4,4,1,1); new FXLabel(vert,FXString::null,cmem,LAYOUT_RIGHT,0,0,0,0, 0,0,0,0); FXHorizontalFrame *modeframe=new FXHorizontalFrame(this,LAYOUT_FILL_X,0,0,0,0, 8,8,0,4, 8,8); FXHorizontalFrame *baseframe=new FXHorizontalFrame(modeframe,FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH, 0,0,0,0, 0,0,0,0 ,0,0); numbase[0]=new FXButton(baseframe,"&Hex",NULL,this,ID_HEX,FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y); numbase[1]=new FXButton(baseframe,"D&ec",NULL,this,ID_DEC,FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y); numbase[2]=new FXButton(baseframe,"&Oct",NULL,this,ID_OCT,FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y); numbase[3]=new FXButton(baseframe,"&Bin",NULL,this,ID_BIN,FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y); FXHorizontalFrame *degframe=new FXHorizontalFrame(modeframe,FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH, 0,0,0,0, 0,0,0,0 ,0,0); angmode[0]=new FXButton(degframe,"&Deg",NULL,this,ID_DEG,FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 2,2,2,2); angmode[1]=new FXButton(degframe,"&Rad",NULL,this,ID_RAD,FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 2,2,2,2); angmode[2]=new FXButton(degframe,"&Gra",NULL,this,ID_GRA,FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 2,2,2,2); // Frame for button blocks FXHorizontalFrame *buttonframe=new FXHorizontalFrame(this,LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH, 0,0,0,0, 4,4,4,4, 0,0); // Functions block FXMatrix *funcblock=new FXMatrix(buttonframe,6,MATRIX_BY_ROWS|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH|PACK_UNIFORM_HEIGHT); inverse=new FXButton(funcblock,"inv",NULL,this,ID_INV,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[0]=new FXButton(funcblock,"+/-",NULL,this,ID_PLUSMIN,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[1]=new FXButton(funcblock,"1/x",NULL,this,ID_RECIP,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[2]=new FXButton(funcblock,"x^y",NULL,this,ID_XTOY,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[3]=new FXButton(funcblock,"sqrt",NULL,this,ID_SQRT,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[4]=new FXButton(funcblock,"2log",NULL,this,ID_2LOG,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[5]=new FXButton(funcblock,"pi",NULL,this,ID_PI,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[6]=new FXButton(funcblock,"SHL",NULL,this,ID_SHL,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[7]=new FXButton(funcblock,"SHR",NULL,this,ID_SHR,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[8]=new FXButton(funcblock,"x!",NULL,this,ID_FAC,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[9]=new FXButton(funcblock,"nPr",NULL,this,ID_PER,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[10]=new FXButton(funcblock,"nCr",NULL,this,ID_COM,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); hyper2=new FXButton(funcblock,"hyp",NULL,this,ID_HYP,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[11]=new FXButton(funcblock,"sin",NULL,this,ID_SIN,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[12]=new FXButton(funcblock,"cos",NULL,this,ID_COS,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[13]=new FXButton(funcblock,"tan",NULL,this,ID_TAN,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[14]=new FXButton(funcblock,"log",NULL,this,ID_LOG,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); functions[15]=new FXButton(funcblock,"ln",NULL,this,ID_LN,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); digit[10]=new FXButton(funcblock,"A",NULL,this,ID_A,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); digit[11]=new FXButton(funcblock,"B",NULL,this,ID_B,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); digit[12]=new FXButton(funcblock,"C",NULL,this,ID_C,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); digit[13]=new FXButton(funcblock,"D",NULL,this,ID_D,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); digit[14]=new FXButton(funcblock,"E",NULL,this,ID_E,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); digit[15]=new FXButton(funcblock,"F",NULL,this,ID_F,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 8,8,1,1); // Main block FXMatrix *mainblock=new FXMatrix(buttonframe,5,MATRIX_BY_ROWS|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH|PACK_UNIFORM_HEIGHT); memory[0]=new FXButton(mainblock,"MR",NULL,this,ID_MEM_REC,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[7]=new FXButton(mainblock,"7",NULL,this,ID_7,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[4]=new FXButton(mainblock,"4",NULL,this,ID_4,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[1]=new FXButton(mainblock,"1",NULL,this,ID_1,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[0]=new FXButton(mainblock,"0",NULL,this,ID_0,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); memory[1]=new FXButton(mainblock,"M+",NULL,this,ID_MEM_ADD,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[8]=new FXButton(mainblock,"8",NULL,this,ID_8,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[5]=new FXButton(mainblock,"5",NULL,this,ID_5,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[2]=new FXButton(mainblock,"2",NULL,this,ID_2,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[0]=new FXButton(mainblock,".",NULL,this,ID_PNT,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); memory[2]=new FXButton(mainblock,"M-",NULL,this,ID_MEM_SUB,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[9]=new FXButton(mainblock,"9",NULL,this,ID_9,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[6]=new FXButton(mainblock,"6",NULL,this,ID_6,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); digit[3]=new FXButton(mainblock,"3",NULL,this,ID_3,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[1]=new FXButton(mainblock,"EXP",NULL,this,ID_EXP,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); memory[3]=new FXButton(mainblock,"MC",NULL,this,ID_MEM_CLR,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[2]=new FXButton(mainblock,"(",NULL,this,ID_LPAR,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[3]=new FXButton(mainblock,"*",NULL,this,ID_MUL,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[4]=new FXButton(mainblock,"+",NULL,this,ID_ADD,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[5]=new FXButton(mainblock,"=",NULL,this,ID_ENTER,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); clearbtn=new FXButton(mainblock,"C",NULL,this,ID_CLEAR,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[6]=new FXButton(mainblock,")",NULL,this,ID_RPAR,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[7]=new FXButton(mainblock,"/",NULL,this,ID_DIV,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[8]=new FXButton(mainblock,"-",NULL,this,ID_SUB,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[9]=new FXButton(mainblock,"mod",NULL,this,ID_MOD,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); clearallbtn=new FXButton(mainblock,"AC",NULL,this,ID_CLEARALL,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[10]=new FXButton(mainblock,"AND",NULL,this,ID_AND,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[11]=new FXButton(mainblock,"OR",NULL,this,ID_OR,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[12]=new FXButton(mainblock,"XOR",NULL,this,ID_XOR,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); operators[13]=new FXButton(mainblock,"NOT",NULL,this,ID_NOT,BUTTON_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 1,1,2,2); // Hot keys for digits digit[0]->addHotKey(MKUINT(KEY_0,0)); digit[0]->addHotKey(MKUINT(KEY_KP_0,0)); digit[1]->addHotKey(MKUINT(KEY_1,0)); digit[1]->addHotKey(MKUINT(KEY_KP_1,0)); digit[2]->addHotKey(MKUINT(KEY_2,0)); digit[2]->addHotKey(MKUINT(KEY_KP_2,0)); digit[3]->addHotKey(MKUINT(KEY_3,0)); digit[3]->addHotKey(MKUINT(KEY_KP_3,0)); digit[4]->addHotKey(MKUINT(KEY_4,0)); digit[4]->addHotKey(MKUINT(KEY_KP_4,0)); digit[5]->addHotKey(MKUINT(KEY_5,0)); digit[5]->addHotKey(MKUINT(KEY_KP_5,0)); digit[6]->addHotKey(MKUINT(KEY_6,0)); digit[6]->addHotKey(MKUINT(KEY_KP_6,0)); digit[7]->addHotKey(MKUINT(KEY_7,0)); digit[7]->addHotKey(MKUINT(KEY_KP_7,0)); digit[8]->addHotKey(MKUINT(KEY_8,0)); digit[8]->addHotKey(MKUINT(KEY_KP_8,0)); digit[9]->addHotKey(MKUINT(KEY_9,0)); digit[9]->addHotKey(MKUINT(KEY_KP_9,0)); // Hot keys for hex digit[10]->addHotKey(MKUINT(KEY_a,0)); digit[11]->addHotKey(MKUINT(KEY_b,0)); digit[12]->addHotKey(MKUINT(KEY_c,0)); digit[13]->addHotKey(MKUINT(KEY_d,0)); digit[14]->addHotKey(MKUINT(KEY_e,0)); digit[15]->addHotKey(MKUINT(KEY_f,0)); // Hot keys for operators operators[0]->addHotKey(MKUINT(KEY_period,0)); operators[0]->addHotKey(MKUINT(KEY_KP_Decimal,0)); operators[1]->addHotKey(MKUINT(KEY_E,SHIFTMASK)); operators[2]->addHotKey(MKUINT(KEY_parenleft,SHIFTMASK)); operators[3]->addHotKey(MKUINT(KEY_asterisk,SHIFTMASK)); operators[3]->addHotKey(MKUINT(KEY_KP_Multiply,0)); operators[4]->addHotKey(MKUINT(KEY_plus,SHIFTMASK)); operators[4]->addHotKey(MKUINT(KEY_KP_Add,0)); operators[5]->addHotKey(MKUINT(KEY_equal,0)); operators[6]->addHotKey(MKUINT(KEY_parenright,SHIFTMASK)); operators[7]->addHotKey(MKUINT(KEY_slash,0)); operators[7]->addHotKey(MKUINT(KEY_KP_Divide,0)); operators[8]->addHotKey(MKUINT(KEY_minus,0)); operators[8]->addHotKey(MKUINT(KEY_KP_Subtract,0)); operators[9]->addHotKey(MKUINT(KEY_percent,SHIFTMASK)); operators[10]->addHotKey(MKUINT(KEY_ampersand,SHIFTMASK)); operators[11]->addHotKey(MKUINT(KEY_bar,SHIFTMASK)); operators[12]->addHotKey(MKUINT(KEY_asciicircum,SHIFTMASK)); operators[13]->addHotKey(MKUINT(KEY_asciitilde,SHIFTMASK)); // Shifting functions[6]->addHotKey(MKUINT(KEY_less,SHIFTMASK)); functions[7]->addHotKey(MKUINT(KEY_greater,SHIFTMASK)); functions[8]->addHotKey(MKUINT(KEY_exclam,SHIFTMASK)); inverse->addHotKey(MKUINT(KEY_i,0)); hyper2->addHotKey(MKUINT(KEY_h,0)); // Add accelerators getAccelTable()->addAccel(MKUINT(KEY_Q,0),this,FXSEL(SEL_COMMAND,ID_CLOSE)); getAccelTable()->addAccel(MKUINT(KEY_q,0),this,FXSEL(SEL_COMMAND,ID_CLOSE)); getAccelTable()->addAccel(MKUINT(KEY_q,CONTROLMASK),this,FXSEL(SEL_COMMAND,ID_CLOSE)); getAccelTable()->addAccel(MKUINT(KEY_Escape,0),this,FXSEL(SEL_COMMAND,ID_CLEAR)); getAccelTable()->addAccel(MKUINT(KEY_BackSpace,0),this,FXSEL(SEL_COMMAND,ID_DELETE)); getAccelTable()->addAccel(MKUINT(KEY_Delete,0),this,FXSEL(SEL_COMMAND,ID_DELETE)); getAccelTable()->addAccel(MKUINT(KEY_KP_Delete,0),this,FXSEL(SEL_COMMAND,ID_DELETE)); getAccelTable()->addAccel(MKUINT(KEY_Return,0),this,FXSEL(SEL_COMMAND,ID_ENTER)); getAccelTable()->addAccel(MKUINT(KEY_KP_Enter,0),this,FXSEL(SEL_COMMAND,ID_ENTER)); // Initialize stuff display->setText("0"); recall=0.0; numstack[0]=0.0; numsp=0; opsp=-1; limit=DECIMAL_LIMIT; digits=1; base=NUM_DEC; angles=ANG_RAD; precision=16; exponent=MAYBE; beep=TRUE; parens=0; modifiers=0; } // Create and show window void Calculator::create(){ readRegistry(); FXMainWindow::create(); show(); } // Destroy calculator dialog Calculator::~Calculator(){ delete font; delete bigicon; delete smallicon; delete cmem; delete quest; } /*******************************************************************************/ // Set digit color void Calculator::setDigitColor(FXColor clr){ FXColor hilite=makeHiliteColor(clr); FXColor shadow=makeShadowColor(clr); for(FXuint i=0; i<10; i++){ digit[i]->setBackColor(clr); digit[i]->setHiliteColor(hilite); digit[i]->setShadowColor(shadow); } } // Get digit color FXColor Calculator::getDigitColor() const { return digit[0]->getBackColor(); } // Set digit color void Calculator::setHexDigitColor(FXColor clr){ FXColor hilite=makeHiliteColor(clr); FXColor shadow=makeShadowColor(clr); for(FXuint i=10; i<16; i++){ digit[i]->setBackColor(clr); digit[i]->setHiliteColor(hilite); digit[i]->setShadowColor(shadow); } } // Get digit color FXColor Calculator::getHexDigitColor() const { return digit[10]->getBackColor(); } // Set operator color void Calculator::setOperatorColor(FXColor clr){ FXColor hilite=makeHiliteColor(clr); FXColor shadow=makeShadowColor(clr); for(FXuint i=0; i<14; i++){ operators[i]->setBackColor(clr); operators[i]->setHiliteColor(hilite); operators[i]->setShadowColor(shadow); } } // Get operator color FXColor Calculator::getOperatorColor() const { return operators[0]->getBackColor(); } // Set function color void Calculator::setFunctionColor(FXColor clr){ FXColor hilite=makeHiliteColor(clr); FXColor shadow=makeShadowColor(clr); for(FXuint i=0; i<16; i++){ functions[i]->setBackColor(clr); functions[i]->setHiliteColor(hilite); functions[i]->setShadowColor(shadow); } } // Get function color FXColor Calculator::getFunctionColor() const { return functions[0]->getBackColor(); } // Set memory color void Calculator::setMemoryColor(FXColor clr){ FXColor hilite=makeHiliteColor(clr); FXColor shadow=makeShadowColor(clr); for(FXuint i=0; i<4; i++){ memory[i]->setBackColor(clr); memory[i]->setHiliteColor(hilite); memory[i]->setShadowColor(shadow); } } // Get memory color FXColor Calculator::getMemoryColor() const { return memory[0]->getBackColor(); } // Set inverse color void Calculator::setInverseColor(FXColor clr){ inverse->setBackColor(clr); inverse->setHiliteColor(makeHiliteColor(clr)); inverse->setShadowColor(makeShadowColor(clr)); } // Get inverse color FXColor Calculator::getInverseColor() const { return inverse->getBackColor(); } // Set hyp color void Calculator::setHyperColor(FXColor clr){ hyper2->setBackColor(clr); hyper2->setHiliteColor(makeHiliteColor(clr)); hyper2->setShadowColor(makeShadowColor(clr)); } // Get hyp color FXColor Calculator::getHyperColor() const { return hyper2->getBackColor(); } // Set clear color void Calculator::setClearColor(FXColor clr){ clearbtn->setBackColor(clr); clearbtn->setHiliteColor(makeHiliteColor(clr)); clearbtn->setShadowColor(makeShadowColor(clr)); } // Get clear color FXColor Calculator::getClearColor() const { return clearbtn->getBackColor(); } // Set clear all color void Calculator::setClearAllColor(FXColor clr){ clearallbtn->setBackColor(clr); clearallbtn->setHiliteColor(makeHiliteColor(clr)); clearallbtn->setShadowColor(makeShadowColor(clr)); } // Get clear all color FXColor Calculator::getClearAllColor() const { return clearallbtn->getBackColor(); } // Set display color void Calculator::setDisplayColor(FXColor clr){ display->setBackColor(clr); display->setSelTextColor(clr); display->setHiliteColor(makeHiliteColor(clr)); display->setShadowColor(makeShadowColor(clr)); } // Get display color FXColor Calculator::getDisplayColor() const { return display->getBackColor(); } // Set display color void Calculator::setDisplayNumberColor(FXColor clr){ display->setTextColor(clr); display->setSelBackColor(clr); } // Get display color FXColor Calculator::getDisplayNumberColor() const { return display->getTextColor(); } // Set numeric base color void Calculator::setBaseColor(FXColor clr){ FXColor hilite=FXRGB(FXREDVAL(clr)+((255-FXREDVAL(clr))*3)/8, FXGREENVAL(clr)+((255-FXGREENVAL(clr))*3)/8, FXBLUEVAL(clr)+((255-FXBLUEVAL(clr))*3)/8); FXColor shadow=makeShadowColor(clr); for(FXuint i=0; i<4; i++){ numbase[i]->setBackColor(clr); numbase[i]->setHiliteColor(hilite); numbase[i]->setShadowColor(shadow); } } // Get numeric base color FXColor Calculator::getBaseColor() const { return numbase[0]->getBackColor(); } // Set angle mode color void Calculator::setAngleColor(FXColor clr){ FXColor hilite=FXRGB(FXREDVAL(clr)+((255-FXREDVAL(clr))*3)/8, FXGREENVAL(clr)+((255-FXGREENVAL(clr))*3)/8, FXBLUEVAL(clr)+((255-FXBLUEVAL(clr))*3)/8); FXColor shadow=makeShadowColor(clr); for(FXuint i=0; i<3; i++){ angmode[i]->setBackColor(clr); angmode[i]->setHiliteColor(hilite); angmode[i]->setShadowColor(shadow); } } // Get angle mode color FXColor Calculator::getAngleColor() const { return angmode[0]->getBackColor(); } // Set display font void Calculator::setDisplayFont(FXFont* font){ display->setFont(font); } // Return display font FXFont* Calculator::getDisplayFont() const { return display->getFont(); } // Read registry void Calculator::readRegistry(){ FXString fontspec; // Position FXint xx=getApp()->reg().readIntEntry("SETTINGS","x",50); FXint yy=getApp()->reg().readIntEntry("SETTINGS","y",50); FXint ww=getApp()->reg().readIntEntry("SETTINGS","w",0); FXint hh=getApp()->reg().readIntEntry("SETTINGS","h",0); // Read colors FXColor digitclr=getApp()->reg().readColorEntry("SETTINGS","digitcolor",FXRGB(94,209,204)); FXColor hexdigitclr=getApp()->reg().readColorEntry("SETTINGS","hexdigitcolor",FXRGB(151,189,206)); FXColor operatorclr=getApp()->reg().readColorEntry("SETTINGS","operatorcolor",FXRGB(255,222,163)); FXColor functionclr=getApp()->reg().readColorEntry("SETTINGS","functioncolor",FXRGB(158,213,188)); FXColor memoryclr=getApp()->reg().readColorEntry("SETTINGS","memorycolor",FXRGB(181,207,227)); FXColor inverseclr=getApp()->reg().readColorEntry("SETTINGS","inversecolor",FXRGB(224,222,69)); FXColor hyperclr=getApp()->reg().readColorEntry("SETTINGS","hypercolor",FXRGB(224,222,69)); FXColor clearclr=getApp()->reg().readColorEntry("SETTINGS","clearcolor",FXRGB(238,148,0)); FXColor clearallclr=getApp()->reg().readColorEntry("SETTINGS","clearallcolor",FXRGB(238,118,0)); FXColor displayclr=getApp()->reg().readColorEntry("SETTINGS","displaycolor",FXRGB(255,255,255)); FXColor numberclr=getApp()->reg().readColorEntry("SETTINGS","displaynumbercolor",FXRGB(0,0,0)); FXColor numbaseclr=getApp()->reg().readColorEntry("SETTINGS","numbasecolor",FXRGB(203,203,203)); FXColor angmodeclr=getApp()->reg().readColorEntry("SETTINGS","anglemodecolor",FXRGB(203,203,203)); // Number base FXint numbase=getApp()->reg().readIntEntry("SETTINGS","base",NUM_DEC); // Angle type FXint angmode=getApp()->reg().readIntEntry("SETTINGS","angles",ANG_RAD); // Exponent mode FXbool expmode=(FXExponent)getApp()->reg().readIntEntry("SETTINGS","exponent",MAYBE); // Precision FXint prec=getApp()->reg().readIntEntry("SETTINGS","precision",10); // Beep FXbool noise=getApp()->reg().readIntEntry("SETTINGS","beep",TRUE); // Memory cell recall=getApp()->reg().readRealEntry("SETTINGS","memory",0.0); // Font fontspec=getApp()->reg().readStringEntry("SETTINGS","displayfont",""); if(!fontspec.empty()){ font=new FXFont(getApp(),fontspec); setDisplayFont(font); } setDigitColor(digitclr); setHexDigitColor(hexdigitclr); setOperatorColor(operatorclr); setFunctionColor(functionclr); setMemoryColor(memoryclr); setInverseColor(inverseclr); setHyperColor(hyperclr); setClearColor(clearclr); setClearAllColor(clearallclr); setDisplayColor(displayclr); setDisplayNumberColor(numberclr); setBaseColor(numbaseclr); setAngleColor(angmodeclr); // Number base setBase(numbase); setAngles(angmode); setPrecision(prec); setExponentMode(expmode); setBeep(noise); setX(xx); setY(yy); setWidth(ww); setHeight(hh); } // Write registry void Calculator::writeRegistry(){ FXString fontspec; // Position getApp()->reg().writeIntEntry("SETTINGS","x",getX()); getApp()->reg().writeIntEntry("SETTINGS","y",getY()); getApp()->reg().writeIntEntry("SETTINGS","w",getWidth()); getApp()->reg().writeIntEntry("SETTINGS","h",getHeight()); // Write colors getApp()->reg().writeColorEntry("SETTINGS","digitcolor",getDigitColor()); getApp()->reg().writeColorEntry("SETTINGS","hexdigitcolor",getHexDigitColor()); getApp()->reg().writeColorEntry("SETTINGS","operatorcolor",getOperatorColor()); getApp()->reg().writeColorEntry("SETTINGS","functioncolor",getFunctionColor()); getApp()->reg().writeColorEntry("SETTINGS","memorycolor",getMemoryColor()); getApp()->reg().writeColorEntry("SETTINGS","inversecolor",getInverseColor()); getApp()->reg().writeColorEntry("SETTINGS","hypercolor",getHyperColor()); getApp()->reg().writeColorEntry("SETTINGS","clearcolor",getClearColor()); getApp()->reg().writeColorEntry("SETTINGS","clearallcolor",getClearAllColor()); getApp()->reg().writeColorEntry("SETTINGS","displaycolor",getDisplayColor()); getApp()->reg().writeColorEntry("SETTINGS","displaynumbercolor",getDisplayNumberColor()); getApp()->reg().writeColorEntry("SETTINGS","numbasecolor",getBaseColor()); getApp()->reg().writeColorEntry("SETTINGS","anglemodecolor",getAngleColor()); // Number base getApp()->reg().writeIntEntry("SETTINGS","base",getBase()); // Angle type getApp()->reg().writeIntEntry("SETTINGS","angles",getAngles()); // Exponent mode getApp()->reg().writeIntEntry("SETTINGS","exponent",getExponentMode()); // Precision getApp()->reg().writeIntEntry("SETTINGS","precision",getPrecision()); // Beep getApp()->reg().writeIntEntry("SETTINGS","beep",getBeep()); // Memory contents getApp()->reg().writeRealEntry("SETTINGS","memory",recall); // Font fontspec=getDisplayFont()->getFont(); getApp()->reg().writeStringEntry("SETTINGS","displayfont",fontspec.text()); } /*******************************************************************************/ // Get display text FXString Calculator::getDisplayText() const { return display->getText(); } // Display text void Calculator::setDisplayText(const FXString& txt){ display->setText(txt); } // Get displayed value FXdouble Calculator::getDisplayValue() const { FXdouble val; if(base==10) val=FXDoubleVal(getDisplayText()); else val=(FXdouble)FXUIntVal(getDisplayText(),base); return val; } // Redisplay new value void Calculator::setDisplayValue(FXdouble val){ FXint fp=fxieeedoubleclass(val); if(fp==-2 || fp==+2){ setDisplayText("ERROR"); if(beep) getApp()->beep(); } else if(fp==-1){ setDisplayText("-INF"); if(beep) getApp()->beep(); } else if(fp==+1){ setDisplayText("+INF"); if(beep) getApp()->beep(); } else if(base==10){ if(val==0.0) val=0.0; // Don't ever print out -0 instead of 0 setDisplayText(FXStringVal(val,precision,exponent)); } else{ setDisplayText(FXStringVal((FXuint)floor(val),base)); } } /*******************************************************************************/ // Push to number stack FXdouble Calculator::pushnum(FXdouble num){ FXASSERT(numsp0.0){ if(fxieeedoubleclass(result)>0) break; result=result*num; num=num-1.0; } return result; } return dblnan; } // Permutations // // n! // result = ------ // (n-r)! // static FXdouble permutations(FXdouble n,FXdouble r){ FXdouble num=floor(n); FXdouble den=floor(r); FXdouble result=1.0; if(0.0<=num && 0.0<=den && den<=num && num==n && den==r){ while(den>0.0){ if(fxieeedoubleclass(result)>0) break; result=result*num; num=num-1.0; den=den-1.0; } return result; } return dblnan; } // Combinations // // n! // result = ---------- // r! (n-r)! // static FXdouble combinations(FXdouble n,FXdouble r){ FXdouble num=floor(n); FXdouble den=floor(r); FXdouble res1=1.0; FXdouble res2=1.0; if(0.0<=num && 0.0<=den && den<=num && num==n && den==r){ while(den>0.0){ if(fxieeedoubleclass(res1)>0) break; res1=res1*num; res2=res2*den; num=num-1.0; den=den-1.0; } return res1/res2; } return dblnan; } // Reset calculator void Calculator::clearAll(){ setDisplayValue(0.0); numstack[0]=0.0; numsp=0; opsp=-1; parens=0; modifiers=0; } // Clear calculator void Calculator::clear(){ setDisplayValue(0.0); setnum(0.0); modifiers=0; } // Perform unary operator void Calculator::unary(FXuchar op){ FXdouble acc,val; FXASSERT(0<=numsp); val=getnum(); acc=0.0; switch(op){ case UN_NOT: acc=(FXdouble) (~((FXuint)floor(val))); break; case UN_NEG: acc=-val; break; case UN_SHL: acc=(FXdouble) (((FXuint)floor(val))<<1); break; case UN_SHR: acc=(FXdouble) (((FXuint)floor(val))>>1); break; case UN_SAR: acc=(FXdouble) ((((FXuint)floor(val))>>1) | (((FXuint)floor(val))&0x80000000)); break; case UN_RECIP: acc=1.0/val; break; case UN_FAC: acc=factorial(val); break; case UN_SQRT: acc=sqrt(val); break; case UN_QUAD: acc=val*val; break; case UN_2LOG: acc=log(val)/log(2.0); break; case UN_2TOX: acc=pow(2.0,val); break; case UN_LOG: acc=log10(val); break; case UN_10TOX: acc=pow(10.0,val); break; case UN_LN: acc=log(val); break; case UN_EXP: acc=exp(val); break; case UN_SIN: acc=sin(trigarg(val)); break; case UN_COS: acc=cos(trigarg(val)); break; case UN_TAN: acc=tan(trigarg(val)); break; case UN_ASIN: acc=trigres(asin(val)); break; case UN_ACOS: acc=trigres(acos(val)); break; case UN_ATAN: acc=trigres(atan(val)); break; case UN_SINH: acc=sinh(val); break; case UN_COSH: acc=cosh(val); break; case UN_TANH: acc=tanh(val); break; case UN_ASINH: acc=log(val+sqrt(val*val+1.0)); // Tired of #ifdef's:- just expand definitions (Abramowitz & Stegun, pp. 87) break; case UN_ACOSH: acc=log(val+sqrt(val*val-1.0)); // Same here break; case UN_ATANH: acc=0.5*log((1.0+val)/(1.0-val)); // And here default: break; } setnum(acc); setDisplayValue(acc); modifiers=0; } // Perform operator void Calculator::dyop(FXuchar op){ FXdouble acc,val; FXASSERT(0<=numsp); val=popnum(); FXASSERT(0<=numsp); acc=getnum(); switch(op){ case DY_OR: acc=(FXdouble) (((FXuint)floor(acc)) | ((FXuint)floor(val))); break; case DY_XOR: acc=(FXdouble) (((FXuint)floor(acc)) ^ ((FXuint)floor(val))); break; case DY_AND: acc=(FXdouble) (((FXuint)floor(acc)) & ((FXuint)floor(val))); break; case DY_SUB: acc=acc-val; break; case DY_ADD: acc=acc+val; break; case DY_MOD: // Theo Veenker suggested this new definition of "mod": val=fabs(val); // x = a div |b| ; with a round toward 0 acc=fmod(acc,val); // y = a mod |b| break; // a = x * |b| + y case DY_IDIV: modf(acc/val,&acc); break; case DY_DIV: acc=acc/val; break; case DY_MUL: acc=acc*val; break; case DY_XTOY: acc=pow(acc,val); break; case DY_XTOINVY: acc=pow(acc,1.0/val); break; case DY_PER: acc=permutations(acc,val); break; case DY_COM: acc=combinations(acc,val); default: break; } setnum(acc); setDisplayValue(acc); modifiers=0; } // Enter operator void Calculator::dyadic(FXuchar op){ if(opsp<0 || opstack[opsp]==DY_LPAR || priority[op]>priority[opstack[opsp]]){ pushnum(getnum()); opstack[++opsp]=op; } else{ dyop(opstack[opsp]); pushnum(getnum()); opstack[opsp]=op; } modifiers=0; } // Enter evaluate void Calculator::evaluate(){ register FXuchar op; while(0<=opsp){ op=opstack[opsp--]; if(op!=DY_LPAR) dyop(op); else parens--; } setDisplayValue(getnum()); modifiers=0; } // Left parentheses void Calculator::lparen(){ opstack[++opsp]=DY_LPAR; setnum(0.0); setDisplayValue(0.0); parens++; modifiers=0; } // Right parentheses void Calculator::rparen(){ register FXuchar op; while(0<=opsp){ op=opstack[opsp--]; if(op==DY_LPAR){ parens--; break; } dyop(op); } setDisplayValue(getnum()); modifiers=0; } /*******************************************************************************/ // Close the window and save registry FXbool Calculator::close(FXbool notify){ writeRegistry(); return FXMainWindow::close(notify); } // Change preferences long Calculator::onCmdPreferences(FXObject*,FXSelector,void*){ Preferences preferences(this); preferences.setX(getX()+80); preferences.setY(getY()+80); preferences.execute(PLACEMENT_DEFAULT); return 1; } // Change colors long Calculator::onCmdColor(FXObject*,FXSelector sel,void* ptr){ FXColor clr=(FXColor)(FXuval)ptr; switch(FXSELID(sel)){ case ID_COLOR_DISPLAY: setDisplayColor(clr); break; case ID_COLOR_DISPLAYNUMBER: setDisplayNumberColor(clr); break; case ID_COLOR_DIGITS: setDigitColor(clr); break; case ID_COLOR_HEXDIGITS: setHexDigitColor(clr); break; case ID_COLOR_OPERATORS: setOperatorColor(clr); break; case ID_COLOR_FUNCTIONS: setFunctionColor(clr); break; case ID_COLOR_MEMORY: setMemoryColor(clr); break; case ID_COLOR_BASE: setBaseColor(clr); break; case ID_COLOR_ANGLES: setAngleColor(clr); break; case ID_COLOR_INVERT: setInverseColor(clr); break; case ID_COLOR_HYPER: setHyperColor(clr); break; case ID_COLOR_CLEARALL: setClearAllColor(clr); break; case ID_COLOR_CLEAR: setClearColor(clr); break; } return 1; } // Update colors long Calculator::onUpdColor(FXObject* sender,FXSelector sel,void*){ FXColor clr; switch(FXSELID(sel)){ case ID_COLOR_DISPLAY: clr=getDisplayColor(); break; case ID_COLOR_DISPLAYNUMBER: clr=getDisplayNumberColor(); break; case ID_COLOR_DIGITS: clr=getDigitColor(); break; case ID_COLOR_HEXDIGITS: clr=getHexDigitColor(); break; case ID_COLOR_OPERATORS: clr=getOperatorColor(); break; case ID_COLOR_FUNCTIONS: clr=getFunctionColor(); break; case ID_COLOR_MEMORY: clr=getMemoryColor(); break; case ID_COLOR_BASE: clr=getBaseColor(); break; case ID_COLOR_ANGLES: clr=getAngleColor(); break; case ID_COLOR_INVERT: clr=getInverseColor(); break; case ID_COLOR_HYPER: clr=getHyperColor(); break; case ID_COLOR_CLEARALL: clr=getClearAllColor(); break; case ID_COLOR_CLEAR: clr=getClearColor(); break; } sender->handle(this,FXSEL(SEL_COMMAND,ID_SETINTVALUE),(void*)&clr); return 1; } // Change font long Calculator::onCmdFont(FXObject*,FXSelector,void*){ FXFontDialog fontdlg(this,"Change Display Font",DECOR_BORDER|DECOR_TITLE); FXFontDesc fontdesc; getDisplayFont()->getFontDesc(fontdesc); fontdlg.setFontSelection(fontdesc); if(fontdlg.execute()){ FXFont *oldfont=font; fontdlg.getFontSelection(fontdesc); font=new FXFont(getApp(),fontdesc); font->create(); setDisplayFont(font); delete oldfont; } return 1; } // Change exponential notation long Calculator::onCmdExponent(FXObject*,FXSelector sel,void* ptr){ if(FXSELID(sel)==ID_EXPONENT_ALWAYS && ptr) setExponentMode(TRUE); else if(FXSELID(sel)==ID_EXPONENT_NEVER && ptr) setExponentMode(FALSE); else setExponentMode(MAYBE); return 1; } // Update exponential notation long Calculator::onUpdExponent(FXObject* sender,FXSelector sel,void*){ if(FXSELID(sel)==ID_EXPONENT_ALWAYS && exponent==TRUE) sender->handle(this,FXSEL(SEL_COMMAND,ID_CHECK),NULL); else if(FXSELID(sel)==ID_EXPONENT_NEVER && exponent==FALSE) sender->handle(this,FXSEL(SEL_COMMAND,ID_CHECK),NULL); else sender->handle(this,FXSEL(SEL_COMMAND,ID_UNCHECK),NULL); return 1; } // Change precision long Calculator::onCmdPrecision(FXObject* sender,FXSelector,void*){ FXint prec=16; sender->handle(this,FXSEL(SEL_COMMAND,ID_GETINTVALUE),(void*)&prec); setPrecision(prec); return 1; } // Update precision long Calculator::onUpdPrecision(FXObject* sender,FXSelector,void*){ sender->handle(this,FXSEL(SEL_COMMAND,ID_SETINTVALUE),(void*)&precision); return 1; } // Change beep mode long Calculator::onCmdBeep(FXObject*,FXSelector,void*){ beep=!beep; return 1; } // Update beep mode long Calculator::onUpdBeep(FXObject* sender,FXSelector,void*){ sender->handle(this,beep ? FXSEL(SEL_COMMAND,ID_CHECK) : FXSEL(SEL_COMMAND,ID_UNCHECK), NULL); return 1; } // Popup help long Calculator::onCmdQuestion(FXObject*,FXSelector,void*){ HelpWindow helpwindow(this,"Calculator Help"); helpwindow.setHelp(help); helpwindow.setX(getX()+80); helpwindow.setY(getY()+80); helpwindow.execute(PLACEMENT_DEFAULT); return 1; } // Change angle mode long Calculator::onCmdAngle(FXObject*,FXSelector sel,void*){ angles=(FXSELID(sel)-ID_MODE); return 1; } // Update radio button for angle mode long Calculator::onUpdAngle(FXObject* sender,FXSelector sel,void*){ sender->handle(this,angles==(FXSELID(sel)-ID_MODE) ? FXSEL(SEL_COMMAND,ID_CHECK) : FXSEL(SEL_COMMAND,ID_UNCHECK), NULL); return 1; } // Change angle mode long Calculator::onCmdBase(FXObject*,FXSelector sel,void*){ setBase(FXSELID(sel)-ID_BASE); return 1; } // Update radio button for angle mode long Calculator::onUpdBase(FXObject* sender,FXSelector sel,void*){ sender->handle(this,base==(FXSELID(sel)-ID_BASE) ? FXSEL(SEL_COMMAND,ID_CHECK) : FXSEL(SEL_COMMAND,ID_UNCHECK), NULL); return 1; } // Update digits based on base long Calculator::onUpdDigit(FXObject* sender,FXSelector sel,void*){ sender->handle(this,(FXSELID(sel)-ID_0)=0){ pos++; // Skip 'E' if(text[pos]=='-' || text[pos]=='+') pos++; // Skip sign if(text[pos]=='0' || (text[pos] && text[pos+1] && text[pos+2])){ while(text[pos+1]){ text[pos]=text[pos+1]; pos++; } text[pos]=FXString::HEX[FXSELID(sel)-ID_0]; } else{ text.append(FXString::HEX[FXSELID(sel)-ID_0]); } } else if(digitshandle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Exponent long Calculator::onCmdExp(FXObject*,FXSelector,void*){ FXString text=getDisplayText(); if(!(modifiers&MOD_ENT)){ text="0"; digits=1; } if(base==10 && text.find('E')<0) text+="E+0"; setDisplayText(text); setnum(getDisplayValue()); modifiers|=MOD_ENT; return 1; } // Update exponent long Calculator::onUpdExp(FXObject* sender,FXSelector,void*){ sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Plus minus +/- long Calculator::onCmdPlusMin(FXObject*,FXSelector,void*){ FXString text=getDisplayText(); FXint pos; if(modifiers&MOD_ENT){ if((base==10) && (pos=text.find('E'))>=0){ if(text[pos+1]=='+') text[pos+1]='-'; else if(text[pos+1]=='-') text[pos+1]='+'; else text.insert(pos+1,'-'); } else{ if(text[0]=='-') text.erase(0); else if(text[0]=='+') text[0]='-'; else if(text!="0") text.prepend('-'); } setDisplayText(text); setnum(getDisplayValue()); } else{ unary(UN_NEG); } return 1; } // Delete last character long Calculator::onCmdDelete(FXObject*,FXSelector,void*){ FXString text=getDisplayText(); FXint len; if(modifiers&MOD_ENT){ len=text.length(); if(0=0){ len--; if(0handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Cosine button long Calculator::onCmdCos(FXObject*,FXSelector,void*){ unary(UN_COS+(modifiers&(MOD_INV|MOD_HYP))); return 1; } // Update cosine button long Calculator::onUpdCos(FXObject* sender,FXSelector,void*){ FXString label="cos"; if(modifiers&MOD_INV) label.prepend('a'); if(modifiers&MOD_HYP) label.append('h'); sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Tangent button long Calculator::onCmdTan(FXObject*,FXSelector,void*){ unary(UN_TAN+(modifiers&(MOD_INV|MOD_HYP))); return 1; } // Update tangent button long Calculator::onUpdTan(FXObject* sender,FXSelector,void*){ FXString label="tan"; if(modifiers&MOD_INV) label.prepend('a'); if(modifiers&MOD_HYP) label.append('h'); sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Log button long Calculator::onCmdLog(FXObject*,FXSelector,void*){ unary(UN_LOG+(modifiers&MOD_INV)); return 1; } // Update Log button long Calculator::onUpdLog(FXObject* sender,FXSelector,void*){ FXString label=(modifiers&MOD_INV)?"10^x":"log"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Ln button long Calculator::onCmdLn(FXObject*,FXSelector,void*){ unary(UN_LN+(modifiers&MOD_INV)); return 1; } // Update Ln button long Calculator::onUpdLn(FXObject* sender,FXSelector,void*){ FXString label=(modifiers&MOD_INV)?"e^x":"ln"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Update PI button long Calculator::onCmdPi(FXObject*,FXSelector,void*){ setnum((modifiers&MOD_HYP)?((modifiers&MOD_INV)?INVGOLDEN:GOLDEN):((modifiers&MOD_INV)?EULER:PI)); setDisplayValue(getnum()); modifiers=0; return 1; } // Update PI button long Calculator::onUpdPi(FXObject* sender,FXSelector,void*){ FXString label=(modifiers&MOD_HYP) ? (modifiers&MOD_INV) ? "1/phi" : "phi" : (modifiers&MOD_INV) ? "e" : "pi"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Factorial long Calculator::onCmdFac(FXObject*,FXSelector,void*){ unary(UN_FAC); return 1; } // Update factorial long Calculator::onUpdFac(FXObject* sender,FXSelector,void*){ sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Permutations long Calculator::onCmdPer(FXObject*,FXSelector,void*){ dyadic(DY_PER); return 1; } // Update permutations long Calculator::onUpdPer(FXObject* sender,FXSelector,void*){ sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Combinations long Calculator::onCmdCom(FXObject*,FXSelector,void*){ dyadic(DY_COM); return 1; } // Update combinations long Calculator::onUpdCom(FXObject* sender,FXSelector,void*){ sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Reciprocal long Calculator::onCmdRecip(FXObject*,FXSelector,void*){ unary(UN_RECIP); return 1; } // Update reciprocal long Calculator::onUpdRecip(FXObject* sender,FXSelector,void*){ sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // X ^ Y long Calculator::onCmdXToY(FXObject*,FXSelector,void*){ dyadic(DY_XTOY+(modifiers&MOD_INV)); return 1; } // Update X ^ Y long Calculator::onUpdXToY(FXObject* sender,FXSelector,void*){ FXString label=(modifiers&MOD_INV)?"x^1/y":"x^y"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Sqrt long Calculator::onCmdSqrt(FXObject*,FXSelector,void*){ unary(UN_SQRT+(modifiers&MOD_INV)); return 1; } // Update Sqrt long Calculator::onUpdSqrt(FXObject* sender,FXSelector,void*){ FXString label=(modifiers&MOD_INV)?"x^2":"sqrt"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Shift left long Calculator::onCmdShl(FXObject*,FXSelector,void*){ unary(UN_SHL); return 1; } // Update Shift left long Calculator::onUpdShl(FXObject* sender,FXSelector,void*){ FXString label="SHL"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); return 1; } // Shift right long Calculator::onCmdShr(FXObject*,FXSelector,void*){ unary(UN_SHR+(modifiers&MOD_INV)); return 1; } // Update Shift right long Calculator::onUpdShr(FXObject* sender,FXSelector,void*){ FXString label=(modifiers&MOD_INV)?"SAR":"SHR"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); return 1; } // Base 2 log long Calculator::onCmd2Log(FXObject*,FXSelector,void*){ unary(UN_2LOG+(modifiers&MOD_INV)); return 1; } // Update Base 2 log long Calculator::onUpd2Log(FXObject* sender,FXSelector,void*){ FXString label=(modifiers&MOD_INV)?"2^x":"2log"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Left parenth long Calculator::onCmdLPar(FXObject*,FXSelector,void*){ lparen(); return 1; } // Right parenth long Calculator::onCmdRPar(FXObject*,FXSelector,void*){ rparen(); return 1; } // Bitwise AND long Calculator::onCmdAnd(FXObject*,FXSelector,void*){ dyadic(DY_AND); return 1; } // Bitwise OR long Calculator::onCmdOr(FXObject*,FXSelector,void*){ dyadic(DY_OR); return 1; } // Bitwise XOR long Calculator::onCmdXor(FXObject*,FXSelector,void*){ dyadic(DY_XOR); return 1; } // Bitwise NOT long Calculator::onCmdNot(FXObject*,FXSelector,void*){ unary(UN_NOT); return 1; } // Multiply long Calculator::onCmdMul(FXObject*,FXSelector,void*){ dyadic(DY_MUL); return 1; } // Divide long Calculator::onCmdDiv(FXObject*,FXSelector,void*){ dyadic(DY_DIV); return 1; } // Modulo long Calculator::onCmdMod(FXObject*,FXSelector,void*){ dyadic(DY_MOD+(modifiers&MOD_INV)); return 1; } // Update mod long Calculator::onUpdMod(FXObject* sender,FXSelector,void*){ FXString label=(modifiers&MOD_INV)?"div":"mod"; sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&label); sender->handle(this,(base==10) ? FXSEL(SEL_COMMAND,ID_ENABLE) : FXSEL(SEL_COMMAND,ID_DISABLE),NULL); return 1; } // Add long Calculator::onCmdAdd(FXObject*,FXSelector,void*){ dyadic(DY_ADD); return 1; } // Sub long Calculator::onCmdSub(FXObject*,FXSelector,void*){ dyadic(DY_SUB); return 1; } // Enter long Calculator::onCmdEnter(FXObject*,FXSelector,void*){ evaluate(); return 1; } // Recall from memory long Calculator::onCmdMemRec(FXObject*,FXSelector,void*){ setnum(recall); setDisplayValue(recall); modifiers=0; return 1; } // Add to memory long Calculator::onCmdMemAdd(FXObject*,FXSelector,void*){ recall+=getnum(); modifiers=0; return 1; } // Substract from memory long Calculator::onCmdMemSub(FXObject*,FXSelector,void*){ recall-=getnum(); modifiers=0; return 1; } // Clear memory long Calculator::onCmdMemClr(FXObject*,FXSelector,void*){ recall=0.0; modifiers=0; return 1; } fox-1.6.49/calculator/Makefile.bc0000664000175000017500000000550312130340076013505 00000000000000############################################################################## # # # FOX: A Free C++ Class Library for X # # # ############################################################################## # Copyright (C) 1997,2005 by Jeroen van der Zijp. All Rights Reserved. # ############################################################################## # $Id: Makefile.bc,v 1.11 2005/09/22 11:14:47 fox Exp $ # ############################################################################## # This library is free software; you can redistribute it and/or # # modify it under the terms of the GNU Library General Public # # License as published by the Free Software Foundation; either # # version 2 of the License, or (at your option) any later version. # # # # This library is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # # Library General Public License for more details. # # # # You should have received a copy of the GNU Library General Public # # License along with this library; if not, write to the Free # # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # ############################################################################## # For use with Borland C++ Builder 3 or later CXX = bcc32 CXXFLAGS = -5 -O2 -w-par -w-csu -w-aus RM = del TOPDIR = .. DEFINES = -DNDEBUG -DFOX_BIGENDIAN=0 -DWIN32 -D_WINDOWS LD = bcc32 LDFLAGS = -laa GLLIBS = opengl32.lib glu32.lib INCDIRS = -I$(TOPDIR)\include FOXLIB = $(TOPDIR)\src\FOX-1.6.lib RESWRAP = $(TOPDIR)\utils\reswrap.exe PROGRAMS = calculator.exe OBJECTS = \ Calculator.obj \ main.obj \ icons.obj \ HelpWindow.obj \ Preferences.obj \ help.obj ICONS = \ bigcalc.gif \ colors.gif \ constmem.bmp \ information.gif \ question.gif \ tinycalc.gif .cpp.obj: $(CXX) -c $(INCDIRS) $(CXXFLAGS) $(DEFINES) $*.cpp all: $(PROGRAMS) Calculator.exe: $(OBJECTS) $(FOXLIB) $(LD) $(LDFLAGS) $(OBJECTS) $(FOXLIB) Calculator.obj: icons.h icons.cpp icons.h: $(ICONS) $(RESWRAP) -i -o icons.h $** icons.cpp: $(ICONS) $(RESWRAP) -e -o icons.cpp $** clean: $(RM) *.obj $(RM) *.exe $(RM) *.tds $(RM) icons.cpp $(RM) icons.h fox-1.6.49/calculator/tinycalc.gif0000644000175000017500000000016511637250333013763 00000000000000GIF87a€€øüøøüà´0àˆ(ÐüÈÀÀÀ,BºÜþ0² ¨­8,1:ùà7ta¬ì1–œwÌ´Kšh®ßøÀßïvÒy)a0p Ç @­Z«¥V+éz;fox-1.6.49/calculator/icons.cpp0000664000175000017500000007555412130342655013323 00000000000000/* Generated by reswrap version 4.0.0 */ /* created by reswrap from file colors.gif */ extern const unsigned char colors[]={ 0x47,0x49,0x46,0x38,0x37,0x61,0x20,0x00,0x20,0x00,0xf7,0x00,0x00,0xb2,0xc0,0xdc, 0x00,0x00,0x00,0x98,0x90,0x78,0xb0,0xa8,0x88,0xc8,0xbc,0x98,0xc8,0xc4,0xa0,0xd0, 0xc4,0xa0,0xc8,0xc0,0xa0,0xb8,0xb4,0x90,0x90,0x8c,0x70,0xd0,0xc8,0xa8,0xb8,0xac, 0x90,0xa8,0x9c,0x80,0xb8,0xb0,0x90,0x20,0x64,0x30,0x20,0x5c,0x30,0x18,0x44,0x20, 0x98,0x8c,0x78,0xb0,0xac,0x88,0x90,0x90,0x70,0xc8,0xbc,0xa0,0xd0,0xc4,0xa8,0x28, 0x78,0x38,0x50,0xb4,0x58,0x40,0x98,0x48,0x30,0x78,0x40,0x18,0x48,0x20,0xb0,0xa4, 0x88,0x98,0x94,0x78,0xa8,0x88,0x78,0xa8,0x84,0x78,0xb0,0xa8,0x90,0xb8,0xb0,0x98, 0xd8,0xcc,0xb0,0x70,0xc0,0x70,0x48,0xb0,0x58,0x50,0xb0,0x58,0xc0,0xbc,0x98,0xa0, 0x98,0x78,0xc8,0xc0,0xa8,0xd0,0xcc,0xb0,0x88,0x10,0x20,0xa8,0x14,0x28,0x70,0x0c, 0x20,0x98,0x98,0x80,0xc0,0xb8,0xa0,0x28,0x90,0x40,0x68,0xc0,0x68,0xa8,0xdc,0xa8, 0xa8,0xdc,0xa0,0xa0,0x98,0x80,0xd8,0xd0,0xb0,0xa0,0x14,0x28,0xc8,0x18,0x30,0xe0, 0x48,0x48,0x70,0x0c,0x18,0xb8,0xec,0xc8,0x28,0x78,0x40,0x18,0x7c,0x78,0x18,0x6c, 0x70,0x08,0x54,0x50,0x08,0x48,0x48,0x90,0x88,0x70,0xd8,0xd4,0xb8,0xd8,0xd0,0xb8, 0xd0,0x1c,0x38,0xf8,0x5c,0x60,0xf8,0x88,0x88,0xf8,0x44,0x48,0xc8,0x20,0x28,0xc0, 0xb4,0xa0,0xe0,0xf0,0xe8,0xff,0xff,0xff,0x70,0xc4,0x70,0x30,0x90,0x48,0x18,0x94, 0x98,0x18,0x90,0x90,0x18,0x94,0x90,0x10,0x6c,0x68,0x10,0x48,0x48,0xe0,0xd4,0xc0, 0xf8,0x8c,0x90,0xf8,0xb8,0xb8,0xf8,0xa4,0xa8,0xe0,0x3c,0x48,0xb0,0xe0,0xb0,0x28, 0x8c,0x40,0x80,0xc4,0x78,0x40,0xa8,0x50,0x90,0xb4,0x88,0x20,0xac,0xa8,0x78,0xd0, 0xc8,0x58,0xc8,0xc0,0xc0,0xb4,0x90,0xe0,0xd8,0xc0,0xc0,0x6c,0x68,0xf8,0xd4,0xd0, 0xf8,0xc4,0xc0,0xf0,0x74,0x78,0xc8,0xc4,0xb0,0x38,0x94,0x50,0x98,0xb4,0x88,0x98, 0xdc,0xd8,0xb8,0xe4,0xe0,0xb8,0xe4,0xe8,0xd0,0xc8,0xb0,0xd8,0xd8,0xc0,0xe0,0xb4, 0xa8,0xf8,0x9c,0xa0,0xf8,0x9c,0x98,0xf8,0x80,0x80,0xf8,0x5c,0x58,0xe0,0xd4,0xb8, 0x30,0xb4,0xb8,0xe0,0xf0,0xf0,0xa0,0xe0,0xd8,0x58,0xcc,0xc0,0x10,0x90,0x90,0xc0, 0xb8,0x98,0xe0,0xd8,0xc8,0xe0,0xdc,0xc8,0xe8,0xdc,0xc8,0xe8,0xb4,0xa8,0xd8,0xd4, 0xc0,0x28,0xb0,0xb0,0x80,0xd8,0xd0,0x40,0xc4,0xc8,0xe8,0xe0,0xc8,0xe8,0xe0,0xd0, 0xe0,0xe0,0xc8,0x28,0xac,0xb0,0xc8,0xc0,0x98,0xa0,0x9c,0x80,0xe8,0xe4,0xd0,0xf0, 0xe8,0xd8,0xe8,0xe4,0xd8,0xc8,0xc4,0xa8,0xb0,0xac,0x90,0xf0,0xec,0xe8,0x08,0x04, 0x08,0x00,0x04,0x00,0x08,0x08,0x08,0xf0,0xf0,0xe8,0xe0,0xe0,0xd0,0x00,0x50,0x80, 0x00,0x50,0x78,0x00,0x44,0x68,0x00,0x40,0x60,0x88,0x80,0x68,0x10,0x0c,0x10,0x00, 0x54,0x80,0x00,0x68,0x98,0x10,0x7c,0xb8,0xe8,0xe8,0xd8,0x30,0xa0,0xd8,0x48,0xb4, 0xe0,0x28,0xa0,0xd8,0x30,0x98,0xd0,0x00,0x64,0x98,0x10,0x7c,0xb0,0x78,0xcc,0xf0, 0x98,0xdc,0xf0,0x68,0xc4,0xe8,0x58,0xb4,0xe0,0x10,0x80,0xb8,0xc0,0xb0,0x98,0xe8, 0xec,0xe0,0xf0,0xec,0xe0,0x20,0x20,0x20,0xa8,0xe0,0xf0,0xe0,0xf0,0xf8,0xa0,0xe0, 0xf0,0x38,0xac,0xd8,0x08,0x7c,0xb8,0xf0,0xe4,0xd8,0x10,0x10,0x10,0x60,0xb8,0xd8, 0xa8,0xe8,0xf8,0x78,0xd0,0xf8,0x10,0x84,0xc0,0x20,0x1c,0x20,0x10,0x78,0xb0,0xd0, 0xcc,0xa8,0xf8,0xf4,0xf0,0xf0,0xe8,0xe0,0xf8,0xf0,0xe8,0xc0,0xb4,0x98,0x30,0x30, 0x30,0xd8,0xcc,0xa8,0x28,0x28,0x28,0xf8,0xf4,0xe8,0x50,0x54,0x50,0xf0,0xf4,0xe8, 0x18,0x18,0x18,0x50,0x4c,0x50,0x38,0x38,0x38,0x10,0x14,0x10,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x00, 0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x08,0xfe,0x00,0x01,0x08,0x1c,0x48,0xb0,0xa0, 0xc1,0x83,0x08,0x13,0x2a,0x5c,0x98,0x30,0x80,0xc3,0x87,0x10,0x19,0x22,0x74,0x28, 0x60,0x00,0x81,0x02,0x06,0x0a,0x1c,0x40,0x30,0x20,0x81,0x43,0x89,0x03,0x1d,0x0e, 0x30,0x70,0xc0,0x80,0x01,0x05,0x24,0x17,0xa8,0x3c,0x70,0x80,0xc1,0x47,0x86,0x01, 0x1a,0x9c,0x9c,0xa9,0x40,0xa3,0x83,0x07,0x10,0x22,0x48,0x60,0x69,0x60,0x42,0x80, 0x85,0x01,0x28,0x28,0x50,0x50,0x81,0xe8,0xd0,0x0a,0x16,0x2e,0x60,0xc8,0xa0,0x61, 0xc3,0x01,0x94,0x14,0x38,0xfc,0x9c,0xf8,0xb4,0x42,0x07,0x0f,0x1f,0x40,0x1c,0x08, 0x61,0x41,0xc4,0x08,0x12,0x18,0x9a,0x1e,0xd0,0x58,0x82,0x82,0x89,0xa9,0x05,0x03, 0x9c,0x50,0x80,0x22,0x85,0x8a,0x14,0x2b,0x58,0xb4,0x50,0xe0,0xe2,0x05,0x8c,0x18, 0x17,0x1c,0x34,0x60,0xd9,0x80,0x81,0x5f,0x19,0x68,0x43,0xa2,0x98,0x41,0xa3,0x86, 0x8d,0x1a,0x34,0x6e,0x80,0x40,0x81,0x21,0x06,0x8e,0x18,0x2f,0x72,0xec,0xd5,0xb1, 0x83,0x47,0x0f,0x1f,0x0d,0x02,0x03,0x08,0xa0,0xe0,0x07,0x90,0x20,0x42,0x86,0x10, 0x29,0x92,0xc2,0x08,0x0a,0x17,0x47,0x90,0xc4,0x48,0xa2,0xa4,0x82,0x8e,0x25,0x4c, 0x9a,0x38,0x79,0xb2,0xc0,0x25,0xc1,0x00,0x3f,0x7e,0x40,0xb1,0x11,0x45,0xca,0x14, 0x2a,0x34,0x5a,0x00,0xa9,0x62,0xe5,0x0a,0x16,0x25,0x59,0x14,0x34,0xd1,0xb2,0x85, 0x4b,0x13,0x1e,0x0b,0xba,0xa0,0x55,0xfb,0xc3,0x8b,0x97,0x2f,0x52,0xc0,0x84,0x11, 0xa3,0x62,0x0c,0x10,0x2f,0x59,0xc8,0xfe,0x28,0x29,0x13,0x62,0x06,0x13,0x33,0x67, 0xd0,0x68,0xd9,0x21,0xd3,0xf6,0xe6,0x34,0x5e,0xd4,0x78,0x59,0xc3,0xa6,0x8d,0x9b, 0x37,0x35,0xbe,0x5b,0xff,0x01,0x07,0x08,0x90,0x19,0x71,0x98,0x21,0xc7,0x1c,0x74, 0xd4,0x41,0x41,0x01,0x76,0x4c,0x15,0xc0,0x1d,0x5e,0xe0,0x81,0x47,0x1e,0x7a,0x7c, 0x61,0x43,0x10,0x77,0x38,0x98,0x87,0x75,0x7b,0x78,0x91,0x1b,0x13,0x7c,0xf4,0xe1, 0x07,0x13,0x25,0xa1,0xf4,0x53,0x00,0xd6,0x39,0xf8,0x07,0x1e,0x80,0x04,0x92,0x22, 0x20,0x78,0x9c,0x88,0xc7,0x7e,0x50,0xf8,0x57,0x47,0x1c,0x82,0x1c,0x30,0xc8,0x58, 0x06,0x10,0xe2,0x90,0x17,0x79,0xa0,0x08,0x48,0x21,0x85,0x18,0x52,0xc8,0x21,0x3f, 0x02,0xc2,0xe2,0x85,0x78,0xec,0x01,0x85,0x67,0x88,0xb4,0x90,0x48,0x22,0x03,0x94, 0x94,0x60,0x00,0x0e,0xa6,0x58,0x88,0x22,0x8b,0x30,0xd2,0x88,0x23,0x44,0x16,0xf2, 0x08,0x8b,0x2f,0x6a,0xf8,0x83,0x02,0x90,0x44,0x22,0xc9,0x24,0x94,0xec,0x34,0xa5, 0x8f,0x87,0x18,0xd0,0xc8,0x40,0x95,0x38,0x22,0x24,0x91,0x47,0x5a,0x07,0x84,0x25, 0x97,0x60,0x72,0x89,0x25,0x93,0x44,0xa9,0x80,0x43,0x56,0x16,0xa2,0x59,0x23,0x99, 0x08,0xe9,0x25,0x98,0x5e,0x5c,0xa2,0xc9,0x26,0x9c,0x74,0xe2,0x09,0x24,0x3b,0x15, 0x00,0xe8,0x21,0x41,0x6a,0xc6,0x88,0x22,0x85,0x0a,0xca,0x88,0x21,0x0e,0x7e,0x02, 0x4a,0x28,0xa2,0x8c,0x42,0xca,0x25,0xa5,0xb0,0xe4,0x10,0x91,0x99,0x64,0x62,0xa9, 0x29,0xa7,0xa8,0x2a,0x10,0x2a,0xae,0x87,0x78,0xf1,0x49,0x2a,0xaa,0xac,0xc2,0x8a, 0x27,0xad,0x94,0x60,0xc0,0x4f,0x8b,0x38,0xe2,0x4a,0x26,0xa7,0x04,0x16,0x80,0x01, 0x8e,0x04,0x4b,0xd0,0x2b,0x2f,0xc2,0x12,0x8b,0x2c,0xb3,0x90,0x52,0xd4,0xae,0x02, 0xd1,0x52,0x48,0xaa,0xc2,0x16,0x6b,0xec,0x40,0xaf,0xc4,0xfa,0xc3,0x27,0xb5,0xa4, 0xa1,0x80,0x2d,0x26,0x4d,0x55,0xc9,0x2d,0x99,0xe0,0x02,0xed,0x66,0xb7,0x38,0x92, 0x8b,0x66,0x00,0xa0,0xb2,0x1f,0x1c,0x21,0x84,0x30,0x94,0x2e,0x68,0xed,0x82,0x4b, 0xaa,0xbb,0x0e,0xab,0x2e,0xbb,0x00,0x30,0x52,0x08,0x7f,0x33,0xcc,0x60,0x0b,0x2f, 0xe7,0x0a,0xd4,0xcb,0x2d,0xa7,0x9c,0xe2,0x88,0x23,0xbe,0x38,0x92,0x2e,0xbf,0x00, 0xbc,0x02,0x48,0x6e,0xf1,0x2a,0x90,0x60,0x41,0xbf,0x00,0x73,0x8a,0x29,0xc5,0x16, 0x0b,0xb1,0x40,0xc1,0x00,0x12,0xf0,0x9f,0xfc,0x0a,0x93,0xee,0x29,0x8a,0x24,0xfc, 0xb1,0x40,0x11,0x25,0x84,0xca,0x30,0x08,0x5f,0x0b,0x12,0x43,0xbd,0x10,0xb3,0xf2, 0xcc,0x38,0x4b,0x14,0x10,0x00,0x3b }; /* created by reswrap from file information.gif */ extern const unsigned char information[]={ 0x47,0x49,0x46,0x38,0x37,0x61,0x20,0x00,0x20,0x00,0xa5,0x00,0x00,0xf8,0x00,0x00, 0xc8,0xc8,0xc8,0xc0,0xc0,0xc0,0xa8,0xc0,0xc8,0xc0,0xb8,0xa8,0xa8,0xa4,0x98,0x90, 0x94,0x90,0x38,0x50,0x60,0xf8,0xf8,0xf8,0xf0,0xf0,0xe8,0xe0,0xe0,0xe0,0xd8,0xd8, 0xd8,0x88,0x8c,0x88,0x50,0x50,0x48,0x78,0x74,0x68,0x38,0x38,0x38,0x08,0x38,0x60, 0x00,0x40,0x68,0x10,0x40,0x58,0xe0,0xe8,0xe8,0xc8,0xd4,0xd8,0x98,0xb8,0xc8,0x80, 0xa0,0xb0,0xb8,0xcc,0xd8,0x60,0x90,0xa8,0x48,0x84,0xa0,0x28,0x74,0x98,0x08,0x1c, 0x30,0x10,0x68,0x98,0x08,0x64,0x90,0x10,0x5c,0x88,0x00,0x38,0x68,0xd8,0xd8,0xc8, 0x08,0x58,0x90,0x08,0x58,0x88,0x10,0x58,0x88,0x18,0x48,0x70,0xd0,0xc8,0xb8,0xb8, 0xb0,0x98,0x08,0x50,0x80,0xb8,0xb0,0xa8,0x08,0x48,0x70,0xe8,0xe8,0xe0,0xe0,0xd8, 0xc8,0xa0,0xa0,0x90,0xe8,0xe0,0xd0,0x18,0x50,0x78,0xb8,0xa8,0x88,0x00,0x30,0x58, 0x00,0x00,0x08,0x00,0x2c,0x50,0xe0,0xd4,0xc0,0xa0,0x98,0x90,0xe8,0xd8,0xc0,0xe8, 0xe0,0xc8,0x00,0x24,0x40,0xe0,0xd0,0xb0,0xe8,0xd8,0xb8,0xe0,0xcc,0xa8,0xb8,0xa0, 0x78,0xe8,0xd0,0xb8,0x30,0x30,0x30,0xe0,0xc8,0xa0,0xd8,0xd0,0xc0,0x2c,0x00,0x00, 0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x06,0xfe,0x40,0x80,0x70,0x48,0x2c,0x1a,0x8f, 0x48,0x63,0x40,0x10,0x58,0x3a,0x03,0x03,0x42,0xc1,0x70,0x48,0x26,0x03,0x88,0xac, 0x56,0x9b,0x50,0x2c,0x0e,0x0c,0xeb,0x11,0xbb,0x2d,0x77,0x1b,0x82,0xb0,0x98,0x28, 0x28,0xbb,0x13,0x0d,0x44,0xc0,0xb1,0x7e,0x40,0x22,0x12,0x7c,0x64,0xe2,0xce,0xc6, 0x11,0x69,0x56,0x12,0x10,0x03,0x01,0x14,0x14,0x15,0x16,0x10,0x12,0x09,0x6e,0x0e, 0x0b,0x59,0x01,0x6a,0x45,0x07,0x11,0x02,0x0b,0x87,0x17,0x17,0x03,0x89,0x18,0x7b, 0x65,0x0e,0x02,0x0a,0x59,0x81,0x45,0x12,0x14,0x13,0x14,0x9c,0x16,0x19,0x19,0x1a, 0xad,0x1a,0x12,0x0a,0x8d,0x59,0x0e,0x0d,0xb7,0x07,0x0f,0x0f,0x1b,0x44,0x12,0x04, 0x13,0x9b,0xac,0x59,0x1c,0x1d,0x1c,0x1c,0x1a,0x1e,0x1f,0xb3,0x5a,0x20,0x14,0x52, 0x0e,0xb6,0x43,0x11,0x16,0x14,0x17,0x16,0x18,0x1a,0x5b,0x21,0x21,0x22,0x1e,0x23, 0x24,0x11,0xcb,0x59,0x0a,0x20,0x25,0x26,0x05,0x74,0x00,0x0f,0x12,0x15,0x17,0x15, 0xd8,0x1a,0x1c,0x59,0xdb,0x22,0x22,0xdb,0x27,0x24,0x03,0xa3,0x59,0x5d,0x0b,0x25, 0x28,0xe9,0x20,0x60,0x08,0xa6,0x41,0x43,0x87,0x83,0xf4,0xb6,0x8d,0x08,0x91,0x22, 0x05,0x89,0x00,0x13,0x1a,0x25,0x50,0xb1,0x82,0x42,0x09,0x16,0x42,0x3e,0x58,0x18, 0x70,0x2d,0xde,0x41,0x0f,0xf4,0x16,0xde,0x8b,0x00,0x81,0xc0,0x82,0x04,0x13,0x55, 0xb4,0x58,0x01,0x02,0x23,0x00,0x08,0x16,0xde,0x65,0x20,0x56,0x06,0x64,0x08,0x90, 0x2e,0x3e,0x40,0x28,0x20,0x0a,0xa5,0xfe,0xca,0x16,0x20,0x5e,0x08,0x11,0xf8,0xce, 0x63,0x07,0x0f,0x5a,0x3c,0xd8,0x14,0x91,0x02,0x02,0x8c,0x02,0x04,0x56,0xa8,0xf8, 0x09,0xb4,0x40,0x46,0x0c,0xac,0x0c,0x6e,0x0b,0xa1,0xc5,0xde,0x4d,0xa6,0x30,0x9e, 0xa2,0x00,0x31,0xb5,0xc5,0xca,0xa0,0x42,0x62,0x68,0x60,0x05,0xd2,0x1e,0xd2,0x2c, 0x0b,0xed,0x9d,0x88,0x00,0x43,0x46,0x01,0x14,0x14,0xa8,0xae,0x98,0x21,0x14,0x40, 0x0c,0x12,0x18,0x32,0xb4,0xad,0xa7,0xe5,0x84,0x61,0x17,0x4d,0x65,0x48,0xa0,0x81, 0xd7,0xac,0xd9,0x1a,0x35,0xfa,0x3e,0x88,0x71,0x00,0x59,0xbd,0x13,0x6f,0x11,0x9c, 0x48,0x81,0x38,0x82,0x8c,0x0d,0x34,0x68,0x98,0xa0,0x60,0xd6,0x86,0x8d,0x1a,0x7c, 0x87,0xc4,0x80,0xe0,0xa2,0x75,0x8a,0x3e,0x24,0x24,0xc0,0xb8,0x71,0xc0,0x00,0x0b, 0x02,0x33,0x5a,0x98,0x86,0x8c,0xa3,0xaf,0xba,0x18,0x30,0x1a,0x92,0x68,0x4d,0x9c, 0x84,0xf1,0x1b,0x1b,0x62,0x18,0xa0,0x51,0xa0,0xc4,0x8a,0xdd,0x35,0x72,0xe8,0xd8, 0x41,0x64,0xb2,0x8c,0x3b,0x1f,0x3e,0x48,0x18,0x54,0xf7,0xb3,0x72,0x1a,0x2c,0x50, 0x38,0x3f,0x1d,0x9d,0xc7,0xf4,0x22,0x3d,0x62,0xdc,0x90,0x11,0x56,0x86,0x7b,0xe4, 0xc9,0x69,0xd8,0x36,0x51,0x62,0x06,0xe4,0xe8,0x38,0x70,0x9c,0x37,0x12,0xa3,0xff, 0x8d,0xff,0xc9,0xf5,0xc7,0xc0,0x7c,0xf5,0xad,0x10,0x5d,0x0e,0xe6,0xe9,0xb0,0x9f, 0x11,0x01,0xf6,0xa7,0x9e,0x01,0x0c,0x80,0x47,0xdf,0x0c,0xa7,0xe5,0x90,0x43,0x7e, 0x3a,0xe0,0xe0,0x03,0x75,0x56,0x4e,0x30,0x50,0x40,0x68,0xe0,0xdd,0x55,0x1f,0x64, 0x16,0xf2,0xa0,0x9f,0x0e,0x3e,0x6c,0x28,0x86,0x01,0x28,0xa0,0x50,0x80,0x09,0x28, 0x10,0x50,0xc2,0x7d,0x08,0x9e,0xa8,0x61,0x8a,0x1c,0x26,0x41,0x40,0x33,0x3f,0x50, 0x30,0x03,0x08,0x34,0x5e,0xa8,0x5f,0x8a,0x44,0xa6,0xa3,0x23,0x01,0x48,0x9a,0xa0, 0xa4,0x92,0x2f,0xbc,0xb0,0x83,0x93,0x3b,0x44,0xb9,0x03,0x34,0x46,0xae,0x61,0xe5, 0x95,0x58,0x22,0x11,0x04,0x00,0x3b }; /* created by reswrap from file bigcalc.gif */ extern const unsigned char bigcalc[]={ 0x47,0x49,0x46,0x38,0x37,0x61,0x1f,0x00,0x15,0x00,0xe3,0x00,0x00,0xb0,0xc0,0xd8, 0x98,0x8c,0x88,0xf8,0xfc,0xf8,0xf8,0xfc,0x00,0xe0,0x88,0x28,0x00,0x00,0x00,0xe0, 0xb4,0x30,0xc0,0xc0,0xc0,0xd0,0xfc,0xc8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x00, 0x00,0x00,0x1f,0x00,0x15,0x00,0x00,0x04,0xa8,0x10,0x84,0x49,0xab,0xbd,0x38,0x48, 0x31,0xb8,0xef,0xe0,0x27,0x86,0x20,0x51,0x04,0x83,0xa1,0xae,0x6c,0xe1,0xbe,0x70, 0xac,0x9a,0x81,0xa0,0x0a,0x38,0x5e,0xa8,0xc5,0xe1,0xff,0x40,0xe0,0xec,0x94,0x32, 0x08,0x80,0x3b,0x43,0x01,0xc1,0x6c,0x3a,0x9b,0x87,0x61,0x8d,0x27,0x53,0x06,0xaf, 0x3f,0x69,0x91,0xc5,0xed,0x7a,0x57,0x34,0x9b,0x51,0xb0,0xd3,0x8d,0xcb,0xe4,0xb3, 0x21,0x91,0x48,0xd2,0x8a,0xc7,0xf2,0x41,0x4e,0x37,0xce,0xd7,0x77,0x43,0x98,0xba, 0x7b,0x29,0x5d,0x7f,0x7d,0x80,0x7e,0x7a,0x44,0x5f,0x87,0x88,0x7b,0x6a,0x66,0x8c, 0x69,0x8d,0x6e,0x86,0x76,0x75,0x71,0x92,0x95,0x94,0x85,0x53,0x81,0x9a,0x7e,0x9c, 0x83,0x80,0x98,0x5b,0x88,0xa2,0x60,0x27,0x62,0x8f,0x8b,0x8e,0x39,0x66,0xa0,0x37, 0x77,0x94,0xaf,0xae,0x41,0x90,0x99,0x9d,0x82,0xb6,0x81,0x30,0x5a,0xa3,0xbb,0x52, 0x01,0x04,0xbf,0xc0,0xc1,0xc2,0xc3,0xc4,0x05,0x00,0x31,0xc8,0xc9,0xca,0x2f,0x00, 0x11,0x00,0x3b }; /* created by reswrap from file constmem.bmp */ extern const unsigned char constmem[]={ 0x42,0x4d,0x36,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x55,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x00,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x0c,0x00,0x00,0x6d,0x0b,0x00,0x00,0x6d,0x0b,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf6,0xfa,0xf6, 0xb8,0xbb,0xb8,0xf3,0xf7,0xf3,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xd2,0xd6,0xd2, 0x41,0x43,0x41,0x8d,0x90,0x8d,0xf3,0xf7,0xf3,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xc1,0xc4,0xc1,0x8d,0x8f,0x8d,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xdc,0xdf,0xdc,0x65, 0x67,0x65,0x7e,0x80,0x7e,0x6d,0x6e,0x6d,0x4a,0x4b,0x4a,0xe7,0xea,0xe7,0xb8,0xbc, 0xb8,0x6b,0x6d,0x6b,0x5e,0x60,0x5e,0xa1,0xa3,0xa1,0xf8,0xfc,0xf8,0xd7,0xdb,0xd7, 0x6c,0x6d,0x6c,0xf8,0xfc,0xf8,0xe9,0xed,0xe9,0x3e,0x3f,0x3e,0xa4,0xa7,0xa4,0xe1, 0xe5,0xe1,0x53,0x54,0x53,0x7e,0x80,0x7e,0x8e,0x90,0x8e,0xf8,0xfc,0xf8,0x84,0x86, 0x84,0x70,0x72,0x70,0xd2,0xd6,0xd2,0x9f,0xa1,0x9f,0x5e,0x60,0x5e,0xad,0xb0,0xad, 0xae,0xb0,0xae,0x5f,0x61,0x5f,0xd7,0xda,0xd7,0x8e,0x90,0x8e,0xb6,0xb8,0xb6,0xf8, 0xfc,0xf8,0xa8,0xab,0xa8,0x60,0x62,0x60,0xc3,0xc6,0xc3,0xf8,0xfc,0xf8,0x3f,0x40, 0x3f,0x96,0x98,0x96,0xf2,0xf6,0xf2,0xf8,0xfc,0xf8,0xe7,0xeb,0xe7,0x85,0x88,0x85, 0x68,0x69,0x68,0xea,0xee,0xea,0xbf,0xc2,0xbf,0xc5,0xc8,0xc5,0xe5,0xe9,0xe5,0x94, 0x97,0x94,0x32,0x33,0x32,0xc2,0xc5,0xc2,0xec,0xf0,0xec,0x53,0x54,0x53,0x74,0x76, 0x74,0x9b,0x9d,0x9b,0xe5,0xe9,0xe5,0xc4,0xc7,0xc4,0x70,0x71,0x70,0xf8,0xfc,0xf8, 0xe1,0xe5,0xe1,0x67,0x69,0x67,0xf8,0xfc,0xf8,0xe4,0xe8,0xe4,0x3f,0x40,0x3f,0xa9, 0xac,0xa9,0xf8,0xfc,0xf8,0xa9,0xac,0xa9,0x6d,0x6f,0x6d,0x5c,0x5e,0x5c,0xb0,0xb3, 0xb0,0xf8,0xfc,0xf8,0xbe,0xc1,0xbe,0xb8,0xbb,0xb8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xc1,0xc4,0xc1,0x0e,0x0e,0x0e,0xdf,0xe3,0xdf,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xf6,0xfa,0xf6,0x2a,0x2b,0x2a,0xd6, 0xd9,0xd6,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xcb,0xce,0xcb,0xa4,0xa7,0xa4,0x3b,0x3c, 0x3b,0xc7,0xca,0xc7,0xf5,0xf9,0xf5,0x3d,0x3f,0x3d,0xa7,0xaa,0xa7,0xef,0xf3,0xef, 0x26,0x27,0x26,0xea,0xed,0xea,0xf3,0xf7,0xf3,0x28,0x29,0x28,0xbb,0xbe,0xbb,0xd0, 0xd4,0xd0,0xa9,0xab,0xa9,0xec,0xf0,0xec,0x18,0x19,0x18,0xdf,0xe3,0xdf,0x7c,0x7e, 0x7c,0x8a,0x8d,0x8a,0xb6,0xb9,0xb6,0x54,0x55,0x54,0xa5,0xa8,0xa5,0xdb,0xdf,0xdb, 0x60,0x62,0x60,0x65,0x66,0x65,0xc5,0xc8,0xc5,0xad,0xaf,0xad,0x5a,0x5c,0x5a,0xf8, 0xfc,0xf8,0xb7,0xba,0xb7,0x4f,0x51,0x4f,0xc0,0xc3,0xc0,0xf8,0xfc,0xf8,0x27,0x28, 0x27,0xd5,0xd9,0xd5,0xc0,0xc3,0xc0,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xd9,0xdc,0xd9, 0x81,0x83,0x81,0xf8,0xfc,0xf8,0x7c,0x7f,0x7c,0x32,0x33,0x32,0xf2,0xf6,0xf2,0xeb, 0xef,0xeb,0x12,0x12,0x12,0xf3,0xf7,0xf3,0xa8,0xaa,0xa8,0x46,0x47,0x46,0xf8,0xfc, 0xf8,0xe4,0xe8,0xe4,0xb0,0xb3,0xb0,0xed,0xf1,0xed,0x26,0x27,0x26,0xeb,0xef,0xeb, 0xf8,0xfc,0xf8,0x32,0x33,0x32,0xdf,0xe3,0xdf,0xf2,0xf6,0xf2,0x22,0x23,0x22,0xc5, 0xc8,0xc5,0xdc,0xe0,0xdc,0x20,0x21,0x20,0xe2,0xe5,0xe2,0xf0,0xf4,0xf0,0x2b,0x2c, 0x2b,0xbe,0xc1,0xbe,0xcc,0xd0,0xcc,0x36,0x37,0x36,0xf6,0xfa,0xf6,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xc1,0xc4,0xc1,0x37,0x38,0x37,0x95,0x98,0x95,0xf7,0xfb,0xf7,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xbf,0xc3,0xbf,0x41,0x43,0x41,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xef,0xf3,0xef,0x39,0x39, 0x39,0xb0,0xb3,0xb0,0xf8,0xfc,0xf8,0xa6,0xa9,0xa6,0x39,0x3a,0x39,0xf8,0xfc,0xf8, 0x4e,0x4f,0x4e,0xa2,0xa4,0xa2,0xf8,0xfc,0xf8,0x60,0x62,0x60,0x97,0x9a,0x97,0xf8, 0xfc,0xf8,0xf4,0xf8,0xf4,0x62,0x64,0x62,0x3a,0x3b,0x3a,0xf3,0xf7,0xf3,0xca,0xce, 0xca,0x4c,0x4d,0x4c,0xf8,0xfc,0xf8,0x8f,0x92,0x8f,0x59,0x5a,0x59,0xf8,0xfc,0xf8, 0x9a,0x9d,0x9a,0x1d,0x1d,0x1d,0xf2,0xf6,0xf2,0xe4,0xe8,0xe4,0x1a,0x1b,0x1a,0xe9, 0xed,0xe9,0xf0,0xf4,0xf0,0x15,0x16,0x15,0xea,0xee,0xea,0xf8,0xfc,0xf8,0x75,0x77, 0x75,0xa1,0xa3,0xa1,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf5,0xf9,0xf5, 0x6f,0x70,0x6f,0xf8,0xfc,0xf8,0x4d,0x4e,0x4d,0x9b,0x9e,0x9b,0x8b,0x8d,0x8b,0xf8, 0xfc,0xf8,0x36,0x37,0x36,0xc1,0xc4,0xc1,0xbe,0xc1,0xbe,0x12,0x12,0x12,0x8d,0x8f, 0x8d,0x9d,0x9f,0x9d,0xeb,0xef,0xeb,0xf8,0xfc,0xf8,0x49,0x4a,0x49,0xa7,0xaa,0xa7, 0xf8,0xfc,0xf8,0x64,0x66,0x64,0x6e,0x6f,0x6e,0xf8,0xfc,0xf8,0x6f,0x71,0x6f,0xa1, 0xa3,0xa1,0xf8,0xfc,0xf8,0x1e,0x1e,0x1e,0xcb,0xce,0xcb,0xf8,0xfc,0xf8,0x8c,0x8e, 0x8c,0x54,0x55,0x54,0xf8,0xfc,0xf8,0x15,0x15,0x15,0xd3,0xd7,0xd3,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xc1,0xc4,0xc1,0x4d,0x4f,0x4d,0xad,0xb0,0xad,0xc6,0xc9,0xc6,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xb7,0xba,0xb7,0x38,0x3a,0x38,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0x8f,0x92, 0x8f,0x59,0x5b,0x59,0xf8,0xfc,0xf8,0xe6,0xea,0xe6,0x12,0x13,0x12,0xf8,0xfc,0xf8, 0x8d,0x8f,0x8d,0x3c,0x3d,0x3c,0xe0,0xe3,0xe0,0xb7,0xba,0xb7,0x50,0x51,0x50,0xf8, 0xfc,0xf8,0x7c,0x7d,0x7c,0x4b,0x4c,0x4b,0xec,0xf0,0xec,0xf8,0xfc,0xf8,0xf3,0xf7, 0xf3,0x2d,0x2d,0x2d,0xee,0xf2,0xee,0xe8,0xec,0xe8,0x32,0x33,0x32,0xc5,0xc9,0xc5, 0xf2,0xf6,0xf2,0x26,0x26,0x26,0xc1,0xc4,0xc1,0xf8,0xfc,0xf8,0x32,0x33,0x32,0x80, 0x82,0x80,0xf6,0xfa,0xf6,0x5d,0x5e,0x5d,0xaa,0xad,0xaa,0xf8,0xfc,0xf8,0xb4,0xb7, 0xb4,0x61,0x63,0x61,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0x6d,0x6e,0x6d,0xf4,0xf8,0xf4,0x23,0x24,0x23,0xd7,0xda,0xd7,0xb3,0xb6,0xb3,0xc0, 0xc3,0xc0,0x75,0x77,0x75,0x8b,0x8e,0x8b,0xf1,0xf5,0xf1,0x2b,0x2b,0x2b,0xd4,0xd7, 0xd4,0xbe,0xc1,0xbe,0x32,0x32,0x32,0xe9,0xec,0xe9,0x88,0x8a,0x88,0x3f,0x40,0x3f, 0xe2,0xe5,0xe2,0xa3,0xa6,0xa3,0x1a,0x1b,0x1a,0xc4,0xc7,0xc4,0xae,0xb1,0xae,0x59, 0x5b,0x59,0xf8,0xfc,0xf8,0x74,0x77,0x74,0x74,0x76,0x74,0xf8,0xfc,0xf8,0xcb,0xcf, 0xcb,0x2d,0x2e,0x2d,0xf8,0xfc,0xf8,0x54,0x56,0x54,0x7d,0x7f,0x7d,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xa8,0xab,0xa8,0x75,0x77,0x75,0xf8,0xfc,0xf8,0x56,0x57,0x56,0xf6, 0xfa,0xf6,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xef,0xf3,0xef,0x0b,0x0c,0x0b,0xe0, 0xe3,0xe0,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf3,0xf7, 0xf3,0x5f,0x61,0x5f,0x74,0x75,0x74,0x7b,0x7d,0x7b,0x65,0x66,0x65,0xef,0xf3,0xef, 0x70,0x72,0x70,0x29,0x2a,0x29,0xa4,0xa7,0xa4,0x89,0x8c,0x89,0x25,0x26,0x25,0xf8, 0xfc,0xf8,0xa4,0xa6,0xa4,0x6a,0x6c,0x6a,0x64,0x65,0x64,0x83,0x86,0x83,0xd0,0xd3, 0xd0,0x2d,0x2d,0x2d,0x84,0x86,0x84,0xbc,0xbf,0xbc,0xe2,0xe6,0xe2,0x65,0x66,0x65, 0x82,0x84,0x82,0x3d,0x3e,0x3d,0x96,0x98,0x96,0xca,0xcd,0xca,0x3a,0x3b,0x3a,0x6e, 0x70,0x6e,0x9b,0x9e,0x9b,0x4e,0x50,0x4e,0x7f,0x82,0x7f,0xf8,0xfc,0xf8,0xa7,0xa9, 0xa7,0x24,0x25,0x24,0x92,0x95,0x92,0xdf,0xe2,0xdf,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0x9f,0xa2,0x9f,0xc1,0xc4,0xc1,0x13,0x13,0x13,0xf8,0xfc,0xf8,0xf6,0xfa,0xf6,0x85, 0x87,0x85,0xad,0xaf,0xad,0x54,0x55,0x54,0xf8,0xfc,0xf8,0xd0,0xd3,0xd0,0x51,0x53, 0x51,0x88,0x8a,0x88,0x2a,0x2b,0x2a,0xd6,0xda,0xd6,0x6d,0x6f,0x6d,0x2e,0x2e,0x2e, 0xa2,0xa5,0xa2,0x87,0x89,0x87,0x26,0x27,0x26,0x8b,0x8e,0x8b,0x7b,0x7c,0x7b,0x2e, 0x2f,0x2e,0xf8,0xfc,0xf8,0xea,0xed,0xea,0x55,0x56,0x55,0x7c,0x7e,0x7c,0x70,0x72, 0x70,0x7b,0x7d,0x7b,0xf0,0xf4,0xf0,0x63,0x65,0x63,0x41,0x42,0x41,0x5e,0x60,0x5e, 0x72,0x74,0x72,0x62,0x65,0x62,0x7f,0x81,0x7f,0xf8,0xfc,0xf8,0x41,0x43,0x41,0xcc, 0xcf,0xcc,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0x6f,0x70,0x6f,0x89, 0x8b,0x89,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xcc,0xcf,0xcc,0xee,0xf2, 0xee,0xf8,0xfc,0xf8,0xe7,0xeb,0xe7,0xe5,0xe8,0xe5,0xf8,0xfc,0xf8,0xf6,0xfa,0xf6, 0xe3,0xe7,0xe3,0xb8,0xbb,0xb8,0xf8,0xfc,0xf8,0xeb,0xef,0xeb,0xeb,0xee,0xeb,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xeb,0xef,0xeb,0xe3,0xe7,0xe3,0xf5,0xf9,0xf5,0xf0,0xf3, 0xf0,0x84,0x86,0x84,0x7a,0x7c,0x7a,0xec,0xef,0xec,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xe5,0xe8,0xe5,0xe3,0xe7,0xe3,0xf6,0xfa,0xf6,0xee,0xf2,0xee,0xd7,0xda,0xd7,0xcb, 0xcf,0xcb,0xf8,0xfc,0xf8,0xe4,0xe8,0xe4,0xf2,0xf6,0xf2,0xf8,0xfc,0xf8,0xe9,0xec, 0xe9,0x36,0x37,0x36,0xc8,0xcb,0xc8,0xf3,0xf6,0xf3,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xcd,0xd1,0xcd,0x51,0x52,0x51,0x47,0x48,0x47,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xea, 0xee,0xea,0x6e,0x70,0x6e,0x15,0x15,0x15,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf6,0xfa, 0xf6,0xe3,0xe7,0xe3,0xea,0xee,0xea,0xf5,0xf9,0xf5,0xe3,0xe7,0xe3,0xb8,0xbb,0xb8, 0xf8,0xfc,0xf8,0xeb,0xef,0xeb,0xeb,0xef,0xeb,0xf8,0xfc,0xf8,0xe5,0xe9,0xe5,0xeb, 0xef,0xeb,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xe5,0xe9,0xe5,0xe7,0xeb, 0xe7,0xf8,0xfc,0xf8,0xf4,0xf8,0xf4,0xd7,0xdb,0xd7,0xcb,0xce,0xcb,0xee,0xf2,0xee, 0xed,0xf0,0xed,0xee,0xf2,0xee,0xf2,0xf6,0xf2,0xf8,0xfc,0xf8,0xe9,0xec,0xe9,0xf2, 0xf6,0xf2,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf2,0xf6,0xf2,0x61, 0x63,0x61,0x6d,0x6f,0x6d,0xc5,0xc8,0xc5,0xc2,0xc5,0xc2,0x42,0x42,0x42,0xc5,0xc9, 0xc5,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf5,0xf9,0xf5,0xc1,0xc4,0xc1,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xe1,0xe5,0xe1,0xd5,0xd8,0xd5,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xd7,0xdb,0xd7,0x03,0x03,0x03,0x80,0x82,0x80,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xa4,0xa6,0xa4,0x0c,0x0c,0x0c,0xa4,0xa6,0xa4,0xef,0xf2,0xef,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf7, 0xfb,0xf7,0xdc,0xe0,0xdc,0xb1,0xb4,0xb1,0xb1,0xb4,0xb1,0xd1,0xd5,0xd1,0xf5,0xf9, 0xf5,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xc3,0xc6,0xc3,0xb1,0xb4,0xb1,0xd6,0xda,0xd6,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf7,0xfb,0xf7,0xbc,0xbf,0xbc,0xc4,0xc7,0xc4,0xf6,0xfa,0xf6,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc, 0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8, 0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8,0xfc,0xf8,0xf8, 0xfc,0xf8,0xf8,0xfc,0xf8,0x00 }; /* created by reswrap from file question.gif */ extern const unsigned char question[]={ 0x47,0x49,0x46,0x38,0x39,0x61,0x10,0x00,0x10,0x00,0xf4,0x00,0x00,0xb2,0xc0,0xdc, 0x00,0x00,0x00,0xa6,0xbf,0xa2,0xf0,0xf4,0xef,0xeb,0xf1,0xea,0xe1,0xe9,0xe0,0xcb, 0xda,0xc9,0xf3,0xf6,0xf3,0xd2,0xdf,0xd0,0xc3,0xd4,0xc1,0xac,0xc3,0xa8,0xbc,0xcf, 0xb8,0x2b,0x2b,0x2b,0xe6,0xed,0xe4,0x21,0x2e,0x1f,0x65,0x8b,0x5e,0x8c,0xad,0x86, 0x96,0xb4,0x91,0xb8,0xcc,0xb5,0x8d,0xad,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0xf9,0x04, 0x01,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x05, 0x46,0x20,0x20,0x8a,0x41,0x59,0x8e,0xe8,0x18,0x08,0x03,0x51,0x18,0x41,0xaa,0x1a, 0xc7,0x50,0xdc,0x48,0x9c,0x06,0xc9,0xa0,0x98,0x8b,0x82,0x82,0x21,0x0b,0x34,0x1c, 0xaa,0x9b,0x6e,0x87,0x0a,0x08,0x97,0x32,0xd2,0xed,0x01,0x2d,0xde,0x20,0xd5,0xdd, 0x35,0xdb,0x8c,0x14,0xb0,0xd1,0x66,0x21,0xc2,0xdd,0x99,0xc2,0x66,0xb4,0x58,0x52, 0x6e,0x4a,0x26,0xed,0x66,0x39,0x04,0x00,0x3b }; /* created by reswrap from file tinycalc.gif */ extern const unsigned char tinycalc[]={ 0x47,0x49,0x46,0x38,0x37,0x61,0x10,0x00,0x10,0x00,0xc2,0x00,0x00,0x00,0x80,0x80, 0xf8,0xfc,0xf8,0xf8,0xfc,0x00,0xe0,0xb4,0x30,0x00,0x00,0x00,0xe0,0x88,0x28,0xd0, 0xfc,0xc8,0xc0,0xc0,0xc0,0x2c,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x03, 0x42,0x08,0xba,0xdc,0xfe,0x30,0xb2,0x20,0xa8,0xad,0x38,0x2c,0x31,0x3a,0xf9,0xe0, 0x37,0x14,0x04,0x10,0x74,0x03,0x61,0xac,0xec,0x31,0x96,0x9c,0x77,0xcc,0xb4,0x4b, 0x9a,0x68,0xae,0xdf,0x1c,0x11,0xf8,0xc0,0xdf,0xef,0x76,0xd2,0x19,0x79,0x29,0x61, 0x30,0x70,0x20,0x10,0x8d,0xc7,0x12,0xa0,0x40,0xad,0x5a,0xab,0xa5,0x90,0x56,0x2b, 0xe9,0x7a,0x13,0x00,0x3b }; fox-1.6.49/calculator/colors.gif0000644000175000017500000000270711637250333013462 00000000000000GIF87a ÷²Àܘx°¨ˆÈ¼˜ÈÄ ÐÄ ÈÀ ¸´ŒpÐȨ¸¬¨œ€¸° d0 \0D ˜Œx°¬ˆpȼ ÐĨ(x8P´X@˜H0x@H °¤ˆ˜”x¨ˆx¨„x°¨¸°˜ØÌ°pÀpH°XP°XÀ¼˜ ˜xÈÀ¨Ð̰ˆ ¨(p ˜˜€À¸ (@hÀh¨Ü¨¨Ü  ˜€ØÐ° (È0àHHp ¸ìÈ(x@|xlpTPHHˆpØÔ¸ØÐ¸Ð8ø\`øˆˆøDHÈ (À´ àðèÿÿÿpÄp0H”˜”lhHHàÔÀøŒø¸¸ø¤¨àsetVisibleRows(50); helptext->setVisibleColumns(90); button->setFocus(); } // Set help text void HelpWindow::setHelp(const FXString& help){ helptext->setText(help); } // Obtain help text FXString HelpWindow::getHelp() const { return helptext->getText(); } // Clean up HelpWindow::~HelpWindow(){ helptext=(FXText*)-1; } fox-1.6.49/calculator/Preferences.cpp0000664000175000017500000002562312130340076014434 00000000000000/******************************************************************************** * * * P r e f e r e n c e s D i a l o g * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: Preferences.cpp,v 1.17 2006/01/22 18:01:13 fox Exp $ * ********************************************************************************/ #include "fx.h" #include "icons.h" #include "Preferences.h" #include "Calculator.h" /*******************************************************************************/ FXIMPLEMENT(Preferences,FXDialogBox,NULL,0) // Construct Preferences::Preferences(Calculator *owner): FXDialogBox(owner,"Calculator Preferences",DECOR_TITLE|DECOR_BORDER|DECOR_RESIZE,0,0,0,0, 10,10,10,10, 4,4){ setTitle(tr("Calculator Preferences")); // Icons palette=new FXGIFIcon(getApp(),colors); calculator=new FXGIFIcon(getApp(),bigcalc); info=new FXGIFIcon(getApp(),information,0,IMAGE_ALPHAGUESS); // Bottom part FXHorizontalFrame *closebox=new FXHorizontalFrame(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH); FXButton* close=new FXButton(closebox,tr("&Close"),NULL,this,FXDialogBox::ID_ACCEPT,BUTTON_INITIAL|BUTTON_DEFAULT|LAYOUT_RIGHT|FRAME_RAISED|FRAME_THICK,0,0,0,0, 20,20); new FXHorizontalSeparator(this,LAYOUT_SIDE_BOTTOM|SEPARATOR_RIDGE|LAYOUT_FILL_X); FXHorizontalFrame *horizontal=new FXHorizontalFrame(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|LAYOUT_FILL_Y,0,0,0,0, 0,0,0,0); FXVerticalFrame *buttons=new FXVerticalFrame(horizontal,LAYOUT_LEFT|LAYOUT_FILL_Y|FRAME_SUNKEN|PACK_UNIFORM_WIDTH|PACK_UNIFORM_HEIGHT,0,0,0,0, 0,0,0,0, 0,0); FXSwitcher *switcher=new FXSwitcher(horizontal,LAYOUT_FILL_X|LAYOUT_FILL_Y); // Pane 2 FXVerticalFrame* pane2=new FXVerticalFrame(switcher,LAYOUT_FILL_X|LAYOUT_FILL_Y); new FXLabel(pane2,tr("Calculator settings"),NULL,LAYOUT_LEFT); new FXHorizontalSeparator(pane2,SEPARATOR_LINE|LAYOUT_FILL_X); FXMatrix *matrix2=new FXMatrix(pane2,5,MATRIX_BY_ROWS|PACK_UNIFORM_HEIGHT|LAYOUT_FILL_X|LAYOUT_FILL_Y); new FXLabel(matrix2,tr("Display Font:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXLabel(matrix2,tr("Always show exponent:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXLabel(matrix2,tr("Never show exponent:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXLabel(matrix2,tr("Precision:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXLabel(matrix2,tr("Beep on error:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW); new FXButton(matrix2,tr("Set..."),NULL,owner,Calculator::ID_FONT,FRAME_RAISED|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW); new FXCheckButton(matrix2,FXString::null,owner,Calculator::ID_EXPONENT_ALWAYS,LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,0,0, 0,0,0,0); new FXCheckButton(matrix2,FXString::null,owner,Calculator::ID_EXPONENT_NEVER,LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,0,0, 0,0,0,0); FXSpinner* spinner=new FXSpinner(matrix2,2,owner,Calculator::ID_PRECISION,JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK|LAYOUT_CENTER_Y|LAYOUT_LEFT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW); spinner->setRange(1,30); new FXCheckButton(matrix2,FXString::null,owner,Calculator::ID_BEEP,LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,0,0, 0,0,0,0); // Button 2 new FXButton(buttons,tr("Calculator\tCalculator settings\tChange calculator settings."),calculator,switcher,FXSwitcher::ID_OPEN_FIRST,FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL_Y); // Pane 1 FXVerticalFrame* pane1=new FXVerticalFrame(switcher,LAYOUT_FILL_X|LAYOUT_FILL_Y); new FXLabel(pane1,tr("Color settings"),NULL,LAYOUT_LEFT); new FXHorizontalSeparator(pane1,SEPARATOR_LINE|LAYOUT_FILL_X); FXMatrix *matrix1=new FXMatrix(pane1,6,MATRIX_BY_COLUMNS|PACK_UNIFORM_HEIGHT|PACK_UNIFORM_WIDTH|LAYOUT_FILL_X|LAYOUT_FILL_Y); new FXLabel(matrix1,tr("Display:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_DISPLAY,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Display Number:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_DISPLAYNUMBER,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Digits:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_DIGITS,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Hex Digits:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_HEXDIGITS,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Operators:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_OPERATORS,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Functions:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_FUNCTIONS,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Memory:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_MEMORY,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Number Base:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_BASE,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Angle Mode:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_ANGLES,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Invert:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_INVERT,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Hyper:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_HYPER,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Clear All:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_CLEARALL,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); new FXLabel(matrix1,tr("Clear:"),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_X|LAYOUT_FILL_ROW); new FXColorWell(matrix1,FXRGB(0,0,0),owner,Calculator::ID_COLOR_CLEAR,COLORWELL_OPAQUEONLY|FRAME_SUNKEN|FRAME_THICK|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW,0,0,40,24); // Button 1 new FXButton(buttons,tr("Colors\tChange Colors\tChange text colors."),palette,switcher,FXSwitcher::ID_OPEN_SECOND,FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL_Y); // Pane 3 FXVerticalFrame* pane3=new FXVerticalFrame(switcher,LAYOUT_FILL_X|LAYOUT_FILL_Y); new FXLabel(pane3,tr("About FOX Calculator"),NULL,LAYOUT_LEFT); new FXHorizontalSeparator(pane3,SEPARATOR_LINE|LAYOUT_FILL_X); FXHorizontalFrame *sub3=new FXHorizontalFrame(pane3,LAYOUT_FILL_Y|LAYOUT_FILL_X); new FXLabel(sub3,FXString::null,calculator,LAYOUT_CENTER_Y,0,0,0,0,20,20,20,20); new FXLabel(sub3,FXStringFormat(tr("The FOX Calculator\n\nA Programmer's Desktop Calculator version 2.1.0.\nFOX library version %d.%d.%d.\nHome Page: http://www.fox-toolkit.org\nFTP Site: ftp://ftp.fox-toolkit.org\n\nCopyright (C) 2001,2005 Jeroen van der Zijp."),FOX_MAJOR,FOX_MINOR,FOX_LEVEL),NULL,JUSTIFY_LEFT|LAYOUT_CENTER_Y); // Button 3 new FXButton(buttons,tr("About\tAbout FOX Calculator\tAbout the FOX Calculator."),info,switcher,FXSwitcher::ID_OPEN_THIRD,FRAME_RAISED|ICON_ABOVE_TEXT|LAYOUT_FILL_Y); // Focus on close button close->setFocus(); } // Clean up Preferences::~Preferences(){ delete palette; delete calculator; palette=(FXIcon*)-1; calculator=(FXIcon*)-1; } fox-1.6.49/calculator/Makefile.in0000664000175000017500000005420312130340140013520 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = calculator$(EXEEXT) subdir = calculator DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = am_calculator_OBJECTS = icons.$(OBJEXT) Calculator.$(OBJEXT) \ HelpWindow.$(OBJEXT) Preferences.$(OBJEXT) help.$(OBJEXT) \ main.$(OBJEXT) $(am__objects_1) calculator_OBJECTS = $(am_calculator_OBJECTS) calculator_LDADD = $(LDADD) calculator_DEPENDENCIES = $(top_builddir)/src/libFOX-1.6.la DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(calculator_SOURCES) DIST_SOURCES = $(calculator_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ @X_CFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOX_BYTEORDER = @FOX_BYTEORDER@ FOX_MAJOR_VERSION = @FOX_MAJOR_VERSION@ FOX_MINOR_VERSION = @FOX_MINOR_VERSION@ FOX_PATCH_LEVEL = @FOX_PATCH_LEVEL@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_BASE_LIBS = @X_BASE_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include RESWRAP = $(top_builddir)/utils/reswrap SUFFIXES = .gif .bmp LDADD = $(top_builddir)/src/libFOX-1.6.la -lm man_MANS = calculator.1 ICONS = \ colors.gif \ information.gif \ bigcalc.gif \ constmem.bmp \ question.gif \ tinycalc.gif calculator_SOURCES = \ icons.h \ icons.cpp \ Calculator.h \ Calculator.cpp \ HelpWindow.h \ HelpWindow.cpp \ Preferences.h \ Preferences.cpp \ help.cpp \ main.cpp \ LICENSE \ $(ICONS) CLEANFILES = icons.h icons.cpp EXTRA_DIST = $(man_MANS) \ Makefile.bc \ Makefile.wc \ Makefile.dmc all: all-am .SUFFIXES: .SUFFIXES: .gif .bmp .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign calculator/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign calculator/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list calculator$(EXEEXT): $(calculator_OBJECTS) $(calculator_DEPENDENCIES) $(EXTRA_calculator_DEPENDENCIES) @rm -f calculator$(EXEEXT) $(CXXLINK) $(calculator_OBJECTS) $(calculator_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Calculator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HelpWindow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icons.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man1 Calculator.cpp: icons.h icons.cpp icons.h: $(ICONS) $(RESWRAP) -i -o icons.h $^ icons.cpp: $(ICONS) $(RESWRAP) -e -o icons.cpp $^ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: fox-1.6.49/calculator/constmem.bmp0000644000175000017500000000606611637250333014021 00000000000000BM6 6(U  m m øüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøöúö¸»¸ó÷óøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÒÖÒACAó÷óøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÁÄÁøüøøüøøüøøüøøüøøüøÜßÜege~€~mnmJKJçê縼¸kmk^`^¡£¡øüø×Û×lmløüøéíé>?>¤§¤áåáSTS~€~ŽŽøüø„†„prpÒÖÒŸ¡Ÿ^`^­°­®°®_a_×Ú×ŽŽ¶¸¶øüø¨«¨`b`ÃÆÃøüø?@?–˜–òöòøüøçëç…ˆ…hihêîê¿Â¿ÅÈÅåéå”—”232ÂÅÂìðìSTStvt››åéåÄÇÄpqpøüøáåágigøüøäèä?@?©¬©øüø©¬©mom\^\°³°øüø¾Á¾¸»¸øüøøüøøüøÁÄÁßãßøüøøüøøüøøüøöúö*+*ÖÙÖøüøøüøËÎˤ§¤;<;ÇÊÇõùõ=?=§ª§ïóï&'&êíêó÷ó()(»¾»ÐÔЩ«©ìðìßãß|~|ŠŠ¶¹¶TUT¥¨¥ÛßÛ`b`efeÅÈÅ­¯­Z\Zøüø·º·OQOÀÃÀøüø'('ÕÙÕÀÃÀøüøøüøÙÜÙƒøüø||232òöòëïëó÷󨪨FGFøüøäèä°³°íñí&'&ëïëøüø232ßãßòöò"#"ÅÈÅÜàÜ ! âåâðôð+,+¾Á¾ÌÐÌ676öúöøüøøüøÁÄÁ787•˜•÷û÷øüøøüøøüø¿Ã¿ACAøüøøüøøüøøüøïóï999°³°øüø¦©¦9:9øüøNON¢¤¢øüø`b`—š—øüøôøôbdb:;:ó÷óÊÎÊLMLøüø’YZYøüøššòöòäèäéíéðôðêîêøüøuwu¡£¡øüøøüøøüøõùõopoøüøMNM›ž›‹‹øüø676ÁÄÁ¾Á¾ŸëïëøüøIJI§ª§øüødfdnonøüøoqo¡£¡øüøËÎËøüøŒŽŒTUTøüøÓ×ÓøüøøüøÁÄÁMOM­°­ÆÉÆøüøøüøøüø·º·8:8øüøøüøøüøøüøøüø’Y[Yøüøæêæøüø<=<àãà·º·PQPøüø|}|KLKìðìøüøó÷ó---îòîèìè232ÅÉÅòöò&&&ÁÄÁøüø232€‚€öúö]^]ª­ªøüø´·´acaøüøøüøøüøøüømnmôøô#$#×Ú׳¶³ÀÃÀuwu‹Ž‹ñõñ+++Ô×Ô¾Á¾222éì鈊ˆ?@?âå⣦£ÄÇÄ®±®Y[YøüøtwttvtøüøËÏË-.-øüøTVT}}øüøøüø¨«¨uwuøüøVWVöúöøüøøüøïóï àãàøüøøüøøüøøüøó÷ó_a_tut{}{efeïóïprp)*)¤§¤‰Œ‰%&%øüø¤¦¤jljdedƒ†ƒÐÓÐ---„†„¼¿¼âæâefe‚„‚=>=–˜–ÊÍÊ:;:npn›ž›NPN‚øüø§©§$%$’•’ßâßøüøøüøŸ¢ŸÁÄÁøüøöúö…‡…­¯­TUTøüøÐÓÐQSQˆŠˆ*+*ÖÚÖmom...¢¥¢‡‰‡&'&‹Ž‹{|{./.øüøêíêUVU|~|prp{}{ðôðcecABA^`^rtrbebøüøACAÌÏÌøüøøüøøüøopo‰‹‰øüøøüøøüøÌÏÌîòîøüøçëçåèåøüøöúöãç㸻¸øüøëïëëîëøüøøüøëïëãçãõùõðóð„†„z|zìïìøüøøüøåèåãçãöúöîòî×Ú×ËÏËøüøäèäòöòøüøéìé676ÈËÈóöóøüøøüøÍÑÍQRQGHGøüøøüøêîênpnøüøøüøöúöãçãêîêõùõãç㸻¸øüøëïëëïëøüøåéåëïëøüøøüøøüøåéåçëçøüøôøô×Û×ËÎËîòîíðíîòîòöòøüøéìéòöòøüøøüøøüøòöòacamomÅÈÅÂÅÂBBBÅÉÅøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøõùõÁÄÁøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøáåáÕØÕøüøøüøøüø×Û×€‚€øüøøüøøüø¤¦¤ ¤¦¤ïòïøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüø÷û÷Üàܱ´±±´±ÑÕÑõùõøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøÃÆÃ±´±ÖÚÖøüøøüøøüø÷û÷¼¿¼ÄÇÄöúöøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøøüøfox-1.6.49/calculator/LICENSE0000664000175000017500000004312412130340076012470 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, 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 or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's 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 give any other recipients of the Program a copy of this License along with the Program. 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 Program or any portion of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, 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 Program, 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 Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) 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; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, 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 executable. However, as a special exception, the source code 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. If distribution of executable or 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 counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program 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. 5. 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 Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program 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 to this License. 7. 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 Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program 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 Program. 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. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program 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. 9. The Free Software Foundation may publish revised and/or new versions of the 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 Program 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 Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, 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 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. fox-1.6.49/Makefile.am0000664000175000017500000000144712130340076011370 00000000000000## Process this file with automake to produce Makefile.in # For non-gcc compilers, change the options to "no-dependencies" AUTOMAKE_OPTIONS = foreign dist-zip SUBDIRS = utils include src chart doc tests shutterbug adie pathfinder calculator windows EXTRA_DIST = ADDITIONS AUTHORS INSTALL LICENSE LICENSE_ADDENDUM TRACING README fox.lsm index.html aclocal.m4 bin_SCRIPTS = fox-config pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = fox.pc CLEANFILES = fox.tar.gz snapshot: dist-all cp $(distdir).tar.gz /net/linkyftp/pub/fox-snapshot.tar.gz cp $(distdir).zip /net/linkyftp/pub/fox-snapshot.zip web: distdir cd $(distdir)/doc && doxygen doxygen.cfg cp -r $(distdir)/doc/* /net/linky/mnt/html drop: dist-all cp $(distdir).tar.gz /net/webby/ftp/pub cp $(distdir).zip /net/webby/ftp/pub fox-1.6.49/TRACING0000664000175000017500000000576212130340076010352 00000000000000 About Tracing using FXTRACE =========================== The basic idea is similar to FXASSERT:- you will add lots FXTRACE commands, but you probably never want to remove them. Just like FXASSERT, FXTRACE commands can be left in the code, as they're automatically compiled out when the library is build for release mode, i.e. with -DNDEBUG on the command line of your compiler. If this isn't reason enough to forego old printf() statements for FXTRACE, I remind you that under MSWindows, no stdout/stderr is opened up for non-console applications, and one has to use the Debug API calls instead of printf() calls. Using FXTRACE is therefore pretty convenient, as the MSWindows implementation of FOX will automatically use those Debug API's if your program is not compiled as a console application, and will revert to stderr under console mode [and of course under UNIX]. You use FXTRACE with DOUBLE PARENTHESES, as in: FXTRACE((200,"%s::onFocusIn %08x\n",getClassName(),this)); This is done so the C preprocessor can expand: FXTRACE((200,"%s::onFocusIn %08x\n",getClassName(),this)) into: fxtrace (200,"%s::onFocusIn %08x\n",getClassName(),this) or, in case of -DNDEBUG or release builds: ((void)0) Which any self-respecting compiler completely ignores and generates no object code for. BTW, this is what everybody does for asserts also. The number `200' in the above example is the tracelevel at which the statement will produce actual outputs on your screen. Starting your FOX program with: -tracelevel 300 will cause all FXTRACE statements with levels 300 and up to be BLOCKED from producing any outputs. Since you don't want to see reams of outputs, the most frequently occuring types of events should be given the highest trace level. For now, tracelevels 0 through 99 are reserved for application use, with FOX itself using levels 100 and upwards. Note that as tracing is controlled by a simple global variable fxTraceLevel, your program can simply set a higher tracelevel at a point in its execution where things are starting to get a little bit hairy..... Tentative assignments of tracelevels in FOX: 100: Important, high-level info, such as ctors and dtors for Icons, Images, Bitmaps, Fonts, and Cursors. Since you may easily leak those resources if your program does not track these properly, setting tracelevel to 101 (or higher) will allow you to see easily what's being created and destroyed. 200: Infrequent events such as mapping/unmapping of windows, selection requests, and such stuff. 250: More frequent stuff such as DND events. 300: Button clicks. 350: Mouse movements. 400: GUI Updates, when GUI Updates are allowed. I have not been overzealous sticking to these conventions, but now that it's written down for me to re-read, there's a higher chance that I'll stick to it in the future. Further assignments will probably follow some day.... - Jeroen fox-1.6.49/src/0000775000175000017500000000000012130343076010200 500000000000000fox-1.6.49/src/FXUndoList.cpp0000664000175000017500000004362312130340076012630 00000000000000/******************************************************************************** * * * U n d o / R e d o - a b l e C o m m a n d * * * ********************************************************************************* * Copyright (C) 2000,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXUndoList.cpp,v 1.57 2006/01/22 17:58:50 fox Exp $ * ********************************************************************************/ #include "xincs.h" #include "fxver.h" #include "fxdefs.h" #include "FXHash.h" #include "FXThread.h" #include "FXStream.h" #include "FXString.h" #include "FXSize.h" #include "FXPoint.h" #include "FXRectangle.h" #include "FXRegistry.h" #include "FXAccelTable.h" #include "FXApp.h" #include "FXWindow.h" #include "FXUndoList.h" /* Notes: - When a command is undone, its moved to the redo list. - When a command is redone, its moved back to the undo list. - Whenever adding a new command, the redo list is deleted. - At any time, you can trim down the undo list down to a given maximum size or a given number of undo records. This should keep the memory overhead within sensible bounds. - To keep track of when we get back to an "unmodified" state, a mark can be set. The mark is basically a counter which is incremented with every undo record added, and decremented when undoing a command. When we get back to 0, we are back to the unmodified state. If, after setting the mark, we have called undo(), then the mark can be reached by calling redo(). If the marked position is in the redo-list, then adding a new undo record will cause the redo-list to be deleted, and the marked position will become unreachable. The marked state may also become unreachable when the undo list is trimmed. - You can call also kill the redo list without adding a new command to the undo list, although this may cause the marked position to become unreachable. - We measure the size of the undo-records in the undo-list; when the records are moved to the redo-list, they usually contain different information! - Because we may need to know during execution of a command whether this was due to undoing or directly issued by the user, we keep a flag "working" which is true during a undo or redo operation. - Command groups are collections of smaller undo/redo records which are executed as a unit, so that large operations may be broken up into smaller units. This allows written fewer, simpler undo/redo records for some basic operations where otherwise one would have to write many, complex undo/redo records. - Command groups may be arbitrarily nested. - FXCommand is now derived from FXObject; this means (1) FXCommands can send messages, and (2) can also receive messages. It is hoped that this can be used to interface FXCommand directly with targets via message exchange, i.e. obviate the need to write glue code. */ #define NOMARK 2147483647 // No mark is set using namespace FX; /*******************************************************************************/ namespace FX { // Object implementation FXIMPLEMENT_ABSTRACT(FXCommand,FXObject,NULL,0) // Default implementation of undo name is just "Undo" FXString FXCommand::undoName() const { return "Undo"; } // Default implementation of redo name is just "Redo" FXString FXCommand::redoName() const { return "Redo"; } // Allow merging is false by default bool FXCommand::canMerge() const { return false; } // Don't merge by default bool FXCommand::mergeWith(FXCommand*){ return false; } // Default returns size of undo record itself FXuint FXCommand::size() const { return sizeof(FXCommand); } /*******************************************************************************/ // Object implementation FXIMPLEMENT(FXCommandGroup,FXCommand,NULL,0) // Undoing a command group undoes each sub command void FXCommandGroup::undo(){ register FXCommand *command; while(undolist){ command=undolist; undolist=undolist->next; command->undo(); command->next=redolist; redolist=command; } } // Undoing a command group undoes each sub command void FXCommandGroup::redo(){ register FXCommand *command; while(redolist){ command=redolist; redolist=redolist->next; command->redo(); command->next=undolist; undolist=command; } } // Return the size of the information in the undo command group. FXuint FXCommandGroup::size() const { register FXuint result=sizeof(FXCommandGroup); register FXCommand *command; for(command=undolist; command; command=command->next){ result+=command->size(); } for(command=redolist; command; command=command->next){ result+=command->size(); } return result; } // Destrying the command group destroys the subcommands FXCommandGroup::~FXCommandGroup(){ register FXCommand *command; while(redolist){ command=redolist; redolist=redolist->next; delete command; } while(undolist){ command=undolist; undolist=undolist->next; delete command; } delete group; } /*******************************************************************************/ // Map FXDEFMAP(FXUndoList) FXUndoListMap[]={ FXMAPFUNC(SEL_COMMAND, FXUndoList::ID_CLEAR, FXUndoList::onCmdClear), FXMAPFUNC(SEL_UPDATE, FXUndoList::ID_CLEAR, FXUndoList::onUpdClear), FXMAPFUNC(SEL_COMMAND, FXUndoList::ID_REVERT, FXUndoList::onCmdRevert), FXMAPFUNC(SEL_UPDATE, FXUndoList::ID_REVERT, FXUndoList::onUpdRevert), FXMAPFUNC(SEL_COMMAND, FXUndoList::ID_UNDO, FXUndoList::onCmdUndo), FXMAPFUNC(SEL_UPDATE, FXUndoList::ID_UNDO, FXUndoList::onUpdUndo), FXMAPFUNC(SEL_COMMAND, FXUndoList::ID_REDO, FXUndoList::onCmdRedo), FXMAPFUNC(SEL_UPDATE, FXUndoList::ID_REDO, FXUndoList::onUpdRedo), FXMAPFUNC(SEL_COMMAND, FXUndoList::ID_UNDO_ALL, FXUndoList::onCmdUndoAll), FXMAPFUNC(SEL_UPDATE, FXUndoList::ID_UNDO_ALL, FXUndoList::onUpdUndo), FXMAPFUNC(SEL_COMMAND, FXUndoList::ID_REDO_ALL, FXUndoList::onCmdRedoAll), FXMAPFUNC(SEL_UPDATE, FXUndoList::ID_REDO_ALL, FXUndoList::onUpdRedo), FXMAPFUNC(SEL_UPDATE, FXUndoList::ID_UNDO_COUNT, FXUndoList::onUpdUndoCount), FXMAPFUNC(SEL_UPDATE, FXUndoList::ID_REDO_COUNT, FXUndoList::onUpdRedoCount), }; // Object implementation FXIMPLEMENT(FXUndoList,FXCommandGroup,FXUndoListMap,ARRAYNUMBER(FXUndoListMap)) // Make new empty undo list FXUndoList::FXUndoList(){ undocount=0; redocount=0; marker=NOMARK; space=0; working=false; } // Mark current state void FXUndoList::mark(){ marker=0; } // Unmark undo list void FXUndoList::unmark(){ marker=NOMARK; } // Check if marked bool FXUndoList::marked() const { return (group==NULL) && (marker==0); } // Cut the redo list; can no longer revert to marked // state if mark is inside the redo list. void FXUndoList::cut(){ register FXCommand *command; if(marker<0) marker=NOMARK; while(redolist){ command=redolist; redolist=redolist->next; delete command; } redolist=NULL; redocount=0; } // Add new command, executing if desired void FXUndoList::add(FXCommand* command,bool doit,bool merge){ register FXCommandGroup* g=this; register FXuint size=0; // Must pass a command if(!command){ fxerror("FXCommandGroup::add: NULL command argument.\n"); } // Adding undo while in the middle of doing something! if(working){ fxerror("FXCommandGroup::add: already working on undo or redo.\n"); } working=true; // Cut redo list cut(); // Execute command if(doit) command->redo(); // Hunt for end of group chain while(g->group){ g=g->group; } // Old size of previous record if(g->undolist) size=g->undolist->size(); // Try to merge commands when desired and possible if(merge && g->undolist && !marked() && command->canMerge() && g->undolist->mergeWith(command)){ // Account for merge if(this==g){ // Update space, which is the new size less the old size space+=g->undolist->size()-size; } // Delete incoming command that was merged delete command; } // Append new command to undo list else{ // Append incoming command command->next=g->undolist; g->undolist=command; // Account for one more undo step if(this==g){ // Update space, add the size of the new command space+=command->size(); // Update marker and undo counter if(marker!=NOMARK) marker++; undocount++; } } FXTRACE((100,"FXUndoList::add: space=%d undocount=%d marker=%d\n",space,undocount,marker)); working=false; } // Begin a new undo command group void FXUndoList::begin(FXCommandGroup *command){ register FXCommandGroup* g=this; // Must pass a command group if(!command){ fxerror("FXCommandGroup::begin: NULL command argument.\n"); } // Calling begin while in the middle of doing something! if(working){ fxerror("FXCommandGroup::begin: already working on undo or redo.\n"); } // Cut redo list cut(); // Hunt for end of group chain while(g->group){ g=g->group; } // Add to end g->group=command; } // End undo command group void FXUndoList::end(){ register FXCommandGroup *command; register FXCommandGroup *g=this; // Must have called begin if(!g->group){ fxerror("FXCommandGroup::end: no matching call to begin.\n"); } // Calling end while in the middle of doing something! if(working){ fxerror("FXCommandGroup::end: already working on undo or redo.\n"); } // Hunt for one above end of group chain while(g->group->group){ g=g->group; } // Unlink from group chain command=g->group; g->group=NULL; // Add to group if non-empty if(!command->empty()){ // Append new command to undo list command->next=g->undolist; g->undolist=command; // Update marker and undo count if(this==g){ // Update space of completed command group space+=command->size(); // Update marker and undo counter if(marker!=NOMARK) marker++; undocount++; } } // Or delete if empty else{ // Delete bottom group delete command; } } // Abort undo command group void FXUndoList::abort(){ register FXCommandGroup *g=this; // Must be called after begin if(!g->group){ fxerror("FXCommandGroup::abort: no matching call to begin.\n"); } // Calling abort while in the middle of doing something! if(working){ fxerror("FXCommandGroup::abort: already working on undo or redo.\n"); } // Hunt for one above end of group chain while(g->group->group){ g=g->group; } // Delete bottom group delete g->group; // New end of chain g->group=NULL; } // Undo last command void FXUndoList::undo(){ register FXCommand *command; if(group){ fxerror("FXCommandGroup::undo: cannot call undo inside begin-end block.\n"); } if(undolist){ working=true; command=undolist; // Remove from undolist BEFORE undo undolist=undolist->next; space-=command->size(); // Measure BEFORE undo! command->undo(); command->next=redolist; // Hang into redolist AFTER undo redolist=command; undocount--; redocount++; if(marker!=NOMARK) marker--; FXTRACE((100,"FXUndoList::undo: space=%d undocount=%d redocount=%d marker=%d\n",space,undocount,redocount,marker)); working=false; } } // Redo next command void FXUndoList::redo(){ register FXCommand *command; if(group){ fxerror("FXCommandGroup::redo: cannot call undo inside begin-end block.\n"); } if(redolist){ working=true; command=redolist; // Remove from redolist BEFORE redo redolist=redolist->next; command->redo(); space+=command->size(); // Measure AFTER redo! command->next=undolist; // Hang into undolist AFTER redo undolist=command; undocount++; redocount--; if(marker!=NOMARK) marker++; FXTRACE((100,"FXUndoList::redo: space=%d undocount=%d redocount=%d marker=%d\n",space,undocount,redocount,marker)); working=false; } } // Undo all commands void FXUndoList::undoAll(){ while(canUndo()) undo(); } // Redo all commands void FXUndoList::redoAll(){ while(canRedo()) redo(); } // Revert to marked void FXUndoList::revert(){ if(marker!=NOMARK){ while(marker>0) undo(); while(marker<0) redo(); } } // Can we undo more commands bool FXUndoList::canUndo() const { return undolist!=NULL; } // Can we redo more commands bool FXUndoList::canRedo() const { return redolist!=NULL; } // Can revert to marked bool FXUndoList::canRevert() const { return marker!=NOMARK && marker!=0; } // Return name of the first undo command available, if any FXString FXUndoList::undoName() const { if(undolist) return undolist->undoName(); return FXString::null; } // Return name of the first redo command available, if any FXString FXUndoList::redoName() const { if(redolist) return redolist->redoName(); return FXString::null; } // Clear list void FXUndoList::clear(){ register FXCommand *command; FXTRACE((100,"FXUndoList::clear: space=%d undocount=%d redocount=%d marker=%d\n",space,undocount,redocount,marker)); while(redolist){ command=redolist; redolist=redolist->next; delete command; } while(undolist){ command=undolist; undolist=undolist->next; delete command; } delete group; redolist=NULL; undolist=NULL; marker=NOMARK; undocount=0; redocount=0; group=NULL; space=0; } // Clear undo list long FXUndoList::onCmdClear(FXObject*,FXSelector,void*){ clear(); return 1; } // Update Clear undo list long FXUndoList::onUpdClear(FXObject* sender,FXSelector,void*){ sender->handle(this,(canUndo()||canRedo())?FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE):FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL); return 1; } // Revert to marked long FXUndoList::onCmdRevert(FXObject*,FXSelector,void*){ revert(); return 1; } // Update revert to marked long FXUndoList::onUpdRevert(FXObject* sender,FXSelector,void*){ sender->handle(this,canRevert()?FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE):FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL); return 1; } // Undo last command long FXUndoList::onCmdUndo(FXObject*,FXSelector,void*){ undo(); return 1; } // Undo all commands long FXUndoList::onCmdUndoAll(FXObject*,FXSelector,void*){ undoAll(); return 1; } // Update undo last command long FXUndoList::onUpdUndo(FXObject* sender,FXSelector,void*){ sender->handle(this,canUndo()?FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE):FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL); return 1; } // Redo last command long FXUndoList::onCmdRedo(FXObject*,FXSelector,void*){ redo(); return 1; } // Redo all commands long FXUndoList::onCmdRedoAll(FXObject*,FXSelector,void*){ redoAll(); return 1; } // Update redo last command long FXUndoList::onUpdRedo(FXObject* sender,FXSelector,void*){ sender->handle(this,canRedo()?FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE):FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL); return 1; } // Update undo count long FXUndoList::onUpdUndoCount(FXObject* sender,FXSelector,void*){ sender->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_SETINTVALUE),(void*)&undocount); return 1; } // Update redo count long FXUndoList::onUpdRedoCount(FXObject* sender,FXSelector,void*){ sender->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_SETINTVALUE),(void*)&redocount); return 1; } // Size of undo information FXuint FXUndoList::size() const { return space; } // Trim undo list down to at most nc records void FXUndoList::trimCount(FXint nc){ FXTRACE((100,"FXUndoList::trimCount: was: space=%d undocount=%d; marker=%d ",space,undocount,marker)); if(undocount>nc){ register FXCommand **pp=&undolist; register FXCommand *p=*pp; register FXint i=0; while(p && inext; p=*pp; i++; } while(*pp){ p=*pp; *pp=p->next; space-=p->size(); undocount--; delete p; } if(marker>undocount) marker=NOMARK; } FXTRACE((100,"now: space=%d undocount=%d; marker=%d\n",space,undocount,marker)); } // Trim undo list down to at most size sz void FXUndoList::trimSize(FXuint sz){ FXTRACE((100,"FXUndoList::trimSize: was: space=%d undocount=%d; marker=%d ",space,undocount,marker)); if(space>sz){ register FXCommand **pp=&undolist; register FXCommand *p=*pp; register FXuint s=0; while(p && (s=s+p->size())<=sz){ pp=&p->next; p=*pp; } while(*pp){ p=*pp; *pp=p->next; space-=p->size(); undocount--; delete p; } if(marker>undocount) marker=NOMARK; } FXTRACE((100,"now: space=%d undocount=%d; marker=%d\n",space,undocount,marker)); } } fox-1.6.49/src/FXDial.cpp0000664000175000017500000005217312130340076011740 00000000000000/******************************************************************************** * * * D i a l W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXDial.cpp,v 1.50.2.1 2007/09/22 04:28:37 fox Exp $ * ********************************************************************************/ #include "xincs.h" #include "fxver.h" #include "fxdefs.h" #include "fxkeys.h" #include "FXHash.h" #include "FXThread.h" #include "FXStream.h" #include "FXString.h" #include "FXSize.h" #include "FXPoint.h" #include "FXRectangle.h" #include "FXSettings.h" #include "FXRegistry.h" #include "FXApp.h" #include "FXDCWindow.h" #include "FXDial.h" /* Notes: - Contributed by: Guoqing Tian. - Position decoupled from angle. - Add some API's. - Properly handle cyclic/non cyclic stuff. - Callbacks should report position in the void* ptr. - Keep notchangle>=0, as % of negative numbers is implementation defined. - Not yet happy with keyboard/wheel mode valuator. - Visual cue for focus:- please no ugly border! */ #define DIALWIDTH 12 #define DIALDIAMETER 40 #define NUMSIDECOLORS 16 #define DIAL_MASK (DIAL_HORIZONTAL|DIAL_CYCLIC|DIAL_HAS_NOTCH) using namespace FX; /*******************************************************************************/ namespace FX { // Map FXDEFMAP(FXDial) FXDialMap[]={ FXMAPFUNC(SEL_PAINT,0,FXDial::onPaint), FXMAPFUNC(SEL_MOTION,0,FXDial::onMotion), FXMAPFUNC(SEL_MOUSEWHEEL,0,FXDial::onMouseWheel), FXMAPFUNC(SEL_LEFTBUTTONPRESS,0,FXDial::onLeftBtnPress), FXMAPFUNC(SEL_LEFTBUTTONRELEASE,0,FXDial::onLeftBtnRelease), FXMAPFUNC(SEL_KEYPRESS,0,FXDial::onKeyPress), FXMAPFUNC(SEL_KEYRELEASE,0,FXDial::onKeyRelease), FXMAPFUNC(SEL_UNGRABBED,0,FXDial::onUngrabbed), FXMAPFUNC(SEL_QUERY_TIP,0,FXDial::onQueryTip), FXMAPFUNC(SEL_QUERY_HELP,0,FXDial::onQueryHelp), FXMAPFUNC(SEL_COMMAND,FXDial::ID_SETVALUE,FXDial::onCmdSetValue), FXMAPFUNC(SEL_COMMAND,FXDial::ID_SETINTVALUE,FXDial::onCmdSetIntValue), FXMAPFUNC(SEL_COMMAND,FXDial::ID_SETREALVALUE,FXDial::onCmdSetRealValue), FXMAPFUNC(SEL_COMMAND,FXDial::ID_GETINTVALUE,FXDial::onCmdGetIntValue), FXMAPFUNC(SEL_COMMAND,FXDial::ID_GETREALVALUE,FXDial::onCmdGetRealValue), FXMAPFUNC(SEL_COMMAND,FXDial::ID_SETINTRANGE,FXDial::onCmdSetIntRange), FXMAPFUNC(SEL_COMMAND,FXDial::ID_GETINTRANGE,FXDial::onCmdGetIntRange), FXMAPFUNC(SEL_COMMAND,FXDial::ID_SETREALRANGE,FXDial::onCmdSetRealRange), FXMAPFUNC(SEL_COMMAND,FXDial::ID_GETREALRANGE,FXDial::onCmdGetRealRange), FXMAPFUNC(SEL_COMMAND,FXDial::ID_SETHELPSTRING,FXDial::onCmdSetHelp), FXMAPFUNC(SEL_COMMAND,FXDial::ID_GETHELPSTRING,FXDial::onCmdGetHelp), FXMAPFUNC(SEL_COMMAND,FXDial::ID_SETTIPSTRING,FXDial::onCmdSetTip), FXMAPFUNC(SEL_COMMAND,FXDial::ID_GETTIPSTRING,FXDial::onCmdGetTip), }; // Object implementation FXIMPLEMENT(FXDial,FXFrame,FXDialMap,ARRAYNUMBER(FXDialMap)) FXDial::FXDial(){ flags|=FLAG_ENABLED; range[0]=0; range[1]=0; notchangle=0; notchspacing=0; notchoffset=0; notchColor=0; dragpoint=0; dragpos=0; incr=0; pos=0; } // Make a window FXDial::FXDial(FXComposite* p,FXObject* tgt,FXSelector sel,FXuint opts,FXint x,FXint y,FXint w,FXint h,FXint pl,FXint pr,FXint pt,FXint pb): FXFrame(p,opts,x,y,w,h,pl,pr,pt,pb){ flags|=FLAG_ENABLED; target=tgt; message=sel; range[0]=0; range[1]=359; notchangle=0; notchspacing=90; notchoffset=0; notchColor=FXRGB(255,128,0); dragpoint=0; dragpos=0; incr=360; pos=0; } // Get minimum width FXint FXDial::getDefaultWidth(){ register FXint w=(options&DIAL_HORIZONTAL)?DIALDIAMETER:DIALWIDTH; return w+padleft+padright+(border<<1); } // Get minimum height FXint FXDial::getDefaultHeight(){ register FXint h=(options&DIAL_HORIZONTAL)?DIALWIDTH:DIALDIAMETER; return h+padtop+padbottom+(border<<1); } // Returns true because a dial can receive focus bool FXDial::canFocus() const { return true; } // Set help using a message long FXDial::onCmdSetHelp(FXObject*,FXSelector,void* ptr){ setHelpText(*((FXString*)ptr)); return 1; } // Get help using a message long FXDial::onCmdGetHelp(FXObject*,FXSelector,void* ptr){ *((FXString*)ptr)=getHelpText(); return 1; } // Set tip using a message long FXDial::onCmdSetTip(FXObject*,FXSelector,void* ptr){ setTipText(*((FXString*)ptr)); return 1; } // Get tip using a message long FXDial::onCmdGetTip(FXObject*,FXSelector,void* ptr){ *((FXString*)ptr)=getTipText(); return 1; } // We were asked about tip text long FXDial::onQueryTip(FXObject* sender,FXSelector sel,void* ptr){ if(FXWindow::onQueryTip(sender,sel,ptr)) return 1; if((flags&FLAG_TIP) && !tip.empty()){ sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&tip); return 1; } return 0; } // We were asked about status text long FXDial::onQueryHelp(FXObject* sender,FXSelector sel,void* ptr){ if(FXWindow::onQueryHelp(sender,sel,ptr)) return 1; if((flags&FLAG_HELP) && !help.empty()){ sender->handle(this,FXSEL(SEL_COMMAND,ID_SETSTRINGVALUE),(void*)&help); return 1; } return 0; } // Update value from a message long FXDial::onCmdSetValue(FXObject*,FXSelector,void* ptr){ setValue((FXint)(FXival)ptr); return 1; } // Update value from a message long FXDial::onCmdSetIntValue(FXObject*,FXSelector,void* ptr){ setValue(*((FXint*)ptr)); return 1; } // Update value from a message long FXDial::onCmdSetRealValue(FXObject*,FXSelector,void* ptr){ setValue((FXint)*((FXdouble*)ptr)); return 1; } // Obtain value from text field long FXDial::onCmdGetIntValue(FXObject*,FXSelector,void* ptr){ *((FXint*)ptr) = getValue(); return 1; } // Obtain value from text field long FXDial::onCmdGetRealValue(FXObject*,FXSelector,void* ptr){ *((FXdouble*)ptr) = (FXdouble)getValue(); return 1; } // Update range from a message long FXDial::onCmdSetIntRange(FXObject*,FXSelector,void* ptr){ setRange(((FXint*)ptr)[0],((FXint*)ptr)[1]); return 1; } // Get range with a message long FXDial::onCmdGetIntRange(FXObject*,FXSelector,void* ptr){ getRange(((FXint*)ptr)[0],((FXint*)ptr)[1]); return 1; } // Update range from a message long FXDial::onCmdSetRealRange(FXObject*,FXSelector,void* ptr){ setRange((FXint) ((FXdouble*)ptr)[0],(FXint) ((FXdouble*)ptr)[1]); return 1; } // Get range with a message long FXDial::onCmdGetRealRange(FXObject*,FXSelector,void* ptr){ ((FXdouble*)ptr)[0]=(FXdouble)range[0]; ((FXdouble*)ptr)[1]=(FXdouble)range[1]; return 1; } // Pressed LEFT button long FXDial::onLeftBtnPress(FXObject*,FXSelector,void* ptr){ FXEvent *event=(FXEvent*)ptr; flags&=~FLAG_TIP; handle(this,FXSEL(SEL_FOCUS_SELF,0),ptr); if(isEnabled()){ grab(); if(target && target->tryHandle(this,FXSEL(SEL_LEFTBUTTONPRESS,message),ptr)) return 1; if(options&DIAL_HORIZONTAL) dragpoint=event->win_x; else dragpoint=event->win_y; dragpos=pos; flags|=FLAG_PRESSED; flags&=~FLAG_UPDATE; return 1; } return 0; } // Released LEFT button long FXDial::onLeftBtnRelease(FXObject*,FXSelector,void* ptr){ FXuint changed=(flags&FLAG_CHANGED); if(isEnabled()){ ungrab(); flags|=FLAG_UPDATE; flags&=~FLAG_PRESSED; flags&=~FLAG_CHANGED; if(target && target->tryHandle(this,FXSEL(SEL_LEFTBUTTONRELEASE,message),ptr)) return 1; if(changed && target) target->tryHandle(this,FXSEL(SEL_COMMAND,message),(void*)(FXival)pos); return 1; } return 0; } // The widget lost the grab for some reason long FXDial::onUngrabbed(FXObject* sender,FXSelector sel,void* ptr){ FXFrame::onUngrabbed(sender,sel,ptr); flags&=~FLAG_PRESSED; flags&=~FLAG_CHANGED; flags|=FLAG_UPDATE; return 1; } // Moving long FXDial::onMotion(FXObject*,FXSelector,void* ptr){ FXEvent *event=(FXEvent*)ptr; FXint travel,size,delta,newpos,tmp; if(flags&FLAG_PRESSED){ if(options&DIAL_HORIZONTAL){ size=width-(border<<1); travel=event->win_x-dragpoint; } else{ size=height-(border<<1); travel=dragpoint-event->win_y; } if(size<100) size=100; if(travel){ delta=(incr*travel)/(2*size); if(options&DIAL_CYCLIC){ tmp=dragpos+delta-range[0]; while(tmp<0) tmp+=(range[1]-range[0]+1); newpos=range[0]+tmp%(range[1]-range[0]+1); } else{ if(dragpos+deltarange[1]) newpos=range[1]; else newpos=dragpos+delta; } if(pos!=newpos){ pos=newpos; FXASSERT(range[0]<=pos && pos<=range[1]); notchangle=(notchoffset+(3600*(pos-range[0]))/incr)%3600; update(border+padleft+1,border+padtop+1,width-(border<<1)-padleft-padright-2,height-(border<<1)-padtop-padbottom-2); flags|=FLAG_CHANGED; if(target) target->tryHandle(this,FXSEL(SEL_CHANGED,message),(void*)(FXival)pos); return 1; } } } return 0; } // Mouse wheel (Thanks to "Lyle Johnson" ) long FXDial::onMouseWheel(FXObject*,FXSelector,void* ptr){ FXEvent *event=(FXEvent*)ptr; FXint delta,newpos,tmp,mod; // Determine the change in dial units; this probably still needs // tweaking. The formula below adjusts the dial position by 1/36 // of a revolution for each "hop" of the mousewheel. delta=(event->code*incr)/4320; // Determine new dial position if(options&DIAL_CYCLIC){ mod=range[1]-range[0]+1; tmp=pos+delta-range[0]; while(tmp<0) tmp+=mod; newpos=range[0]+tmp%mod; // FIXME small problem if range[1]-range[0]+1 is UINT_MAX } else{ if(pos+deltarange[1]) newpos=range[1]; else newpos=pos+delta; } if(pos!=newpos){ pos=newpos; FXASSERT(range[0]<=pos && pos<=range[1]); notchangle=(notchoffset+(3600*(pos-range[0]))/incr)%3600; update(border+padleft+1,border+padtop+1,width-(border<<1)-padleft-padright-2,height-(border<<1)-padtop-padbottom-2); if(target) target->tryHandle(this,FXSEL(SEL_COMMAND,message),(void*)(FXival)pos); } return 1; } // Keyboard press long FXDial::onKeyPress(FXObject*,FXSelector,void* ptr){ FXEvent* event=(FXEvent*)ptr; if(isEnabled()){ if(target && target->tryHandle(this,FXSEL(SEL_KEYPRESS,message),ptr)) return 1; switch(event->code){ case KEY_Left: case KEY_KP_Left: if(options&DIAL_HORIZONTAL) goto dec; break; case KEY_Right: case KEY_KP_Right: if(options&DIAL_HORIZONTAL) goto inc; break; case KEY_Up: case KEY_KP_Up: if(!(options&DIAL_HORIZONTAL)) goto inc; break; case KEY_Down: case KEY_KP_Down: if(!(options&DIAL_HORIZONTAL)) goto dec; break; case KEY_plus: case KEY_KP_Add: inc: setValue(pos+1,TRUE); return 1; case KEY_minus: case KEY_KP_Subtract: dec: setValue(pos-1,TRUE); return 1; } } return 0; } // Keyboard release long FXDial::onKeyRelease(FXObject*,FXSelector,void* ptr){ FXEvent* event=(FXEvent*)ptr; if(isEnabled()){ if(target && target->tryHandle(this,FXSEL(SEL_KEYRELEASE,message),ptr)) return 1; switch(event->code){ case KEY_Left: case KEY_KP_Left: case KEY_Right: case KEY_KP_Right: if(options&DIAL_HORIZONTAL) return 1; break; case KEY_Up: case KEY_KP_Up: case KEY_Down: case KEY_KP_Down: if(!(options&DIAL_HORIZONTAL)) return 1; break; case KEY_plus: case KEY_KP_Add: case KEY_KP_Subtract: case KEY_minus: return 1; } } return 0; } // Handle repaint long FXDial::onPaint(FXObject*,FXSelector,void* ptr){ const FXdouble fac=0.5*PI/((FXdouble)(NUMSIDECOLORS-1)); FXEvent *event=(FXEvent*)ptr; FXint i,size,u,d,lu,ld,t,r,fm,to,off,ang; FXuint rmax,gmax,bmax,red,green,blue; FXint lt,rt,tp,bm; FXdouble mid,tmp; FXDCWindow dc(this,event); // Paint background dc.setForeground(backColor); dc.fillRectangle(0,0,width,height); off=(notchangle+3600)%notchspacing; fm=off/notchspacing; to=(off+1800-notchspacing+1)/notchspacing; // Rectangle of dial lt=border+padleft+1; rt=width-border-padright-2; tp=border+padtop+1; bm=height-border-padbottom-2; // Colors for sides rmax=(126*FXREDVAL(backColor))/100; gmax=(126*FXGREENVAL(backColor))/100; bmax=(126*FXBLUEVAL(backColor))/100; rmax=FXMIN(rmax,255); gmax=FXMIN(gmax,255); bmax=FXMIN(bmax,255); // Horizontal dial if(options&DIAL_HORIZONTAL){ size=rt-lt; r=size/2-1; mid=0.5*(lt+rt); for(i=fm; i<=to; i++){ ang=i*notchspacing+off; t=(FXint)(mid-r*cos(0.1*DTOR*ang)); if((options&DIAL_HAS_NOTCH) && (ang+3600)%3600==notchangle){ dc.setForeground(hiliteColor); dc.drawLine(t-1,tp,t-1,bm); dc.setForeground(notchColor); dc.drawLine(t,tp,t,bm); dc.drawLine(t+1,tp,t+1,bm); dc.setForeground(borderColor); dc.drawLine(t+2,tp,t+2,bm); } else{ if(ang<200){ dc.setForeground(shadowColor); dc.drawLine(t,tp,t,bm); dc.setForeground(borderColor); dc.drawLine(t+1,tp,t+1,bm); } else if(ang<300){ dc.setForeground(borderColor); dc.drawLine(t,tp,t,bm); } else if(ang<600){ dc.setForeground(hiliteColor); dc.drawLine(t,tp,t,bm); dc.setForeground(borderColor); dc.drawLine(t+1,tp,t+1,bm); } else if(ang<1200){ dc.setForeground(hiliteColor); dc.drawLine(t-1,tp,t-1,bm); dc.drawLine(t,tp,t,bm); dc.setForeground(borderColor); dc.drawLine(t+1,tp,t+1,bm); } else if(ang<1500){ dc.setForeground(hiliteColor); dc.drawLine(t,tp,t,bm); dc.setForeground(borderColor); dc.drawLine(t+1,tp,t+1,bm); } else if(ang<1600){ dc.setForeground(borderColor); dc.drawLine(t,tp,t,bm); } else{ dc.setForeground(shadowColor); dc.drawLine(t,tp,t,bm); dc.setForeground(borderColor); dc.drawLine(t-1,tp,t-1,bm); } } } dc.drawLine(lt,tp,lt,bm); dc.drawLine(rt,tp,rt,bm); lu=lt; ld=rt; for(i=0; ihi){ fxerror("%s::setRange: trying to set negative range.\n",getClassName()); } if(range[0]!=lo || range[1]!=hi){ range[0]=lo; range[1]=hi; setValue(pos,notify); } } // Set dial value void FXDial::setValue(FXint p,FXbool notify){ register FXint n; if(prange[1]) p=range[1]; n=(notchoffset+(3600*(p-range[0]))/incr)%3600; if(n!=notchangle){ notchangle=n; update(); } if(p!=pos){ pos=p; if(notify && target){target->tryHandle(this,FXSEL(SEL_COMMAND,message),(void*)(FXival)pos);} } } // Change increment, i.e. the amount of pos change per revolution void FXDial::setRevolutionIncrement(FXint i){ incr=FXMAX(1,i); notchangle=(notchoffset+(3600*(pos-range[0]))/incr)%3600; update(); } // Change notch spacing void FXDial::setNotchSpacing(FXint spacing){ if(spacing<1) spacing=1; if(spacing>3600) spacing=3600; while(3600%spacing) spacing--; // Should be a divisor of 3600 if(notchspacing!=spacing){ notchspacing=spacing; update(); } } // Change notch offset void FXDial::setNotchOffset(FXint offset){ if(offset>3600) offset=3600; if(offset<-3600) offset=-3600; offset=(offset+3600)%3600; if(offset!=notchoffset){ notchoffset=offset; notchangle=(notchoffset+(3600*(pos-range[0]))/incr)%3600; update(); } } // Get dial options FXuint FXDial::getDialStyle() const { return (options&DIAL_MASK); } // Set dial options void FXDial::setDialStyle(FXuint style){ FXuint opts=(options&~DIAL_MASK) | (style&DIAL_MASK); if(options!=opts){ options=opts; recalc(); } } // Save object to stream void FXDial::save(FXStream& store) const { FXFrame::save(store); store << range[0] << range[1]; store << notchColor; store << notchangle; store << notchspacing; store << notchoffset; store << incr; store << pos; store << help; store << tip; } // Load object from stream void FXDial::load(FXStream& store){ FXFrame::load(store); store >> range[0] >> range[1]; store >> notchColor; store >> notchangle; store >> notchspacing; store >> notchoffset; store >> incr; store >> pos; store >> help; store >> tip; } // Change the Center Notch color void FXDial::setNotchColor(FXColor clr){ if(clr!=notchColor){ notchColor=clr; update(); } } // Change help text void FXDial::setHelpText(const FXString& text){ help=text; } // Change tip text void FXDial::setTipText(const FXString& text){ tip=text; } } fox-1.6.49/src/fxrgbio.cpp0000664000175000017500000001712112130340076012263 00000000000000/******************************************************************************** * * * I R I S R G B I n p u t / O u t p u t * * * ********************************************************************************* * Copyright (C) 2002,2006 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: fxrgbio.cpp,v 1.28 2006/03/18 04:57:03 fox Exp $ * ********************************************************************************/ #include "xincs.h" #include "fxver.h" #include "fxdefs.h" #include "FXHash.h" #include "FXStream.h" /* Notes: - Need to implement RLE compression some time. - Bad data may core reader. */ using namespace FX; /*******************************************************************************/ namespace FX { extern FXAPI bool fxcheckRGB(FXStream& store); extern FXAPI bool fxloadRGB(FXStream& store,FXColor*& data,FXint& width,FXint& height); extern FXAPI bool fxsaveRGB(FXStream& store,const FXColor *data,FXint width,FXint height); // RLE decompress static void expandrow(FXuchar* optr,FXuchar *iptr){ // FIXME bad data could blow past array!! unsigned char pixel, count; while(1){ pixel=*iptr++; count=pixel&0x7f; if(count==0) return; if(pixel&0x80){ // Literal bytes while(count--){ *optr=*iptr++; optr+=4; } } else{ // Repeated bytes pixel=*iptr++; while(count--){ *optr=pixel; optr+=4; } } } } // Check if stream contains a RGB bool fxcheckRGB(FXStream& store){ FXuchar signature[2]; store.load(signature,2); store.position(-2,FXFromCurrent); return signature[0]==0x01 && signature[1]==0xDA; } // Load image from stream bool fxloadRGB(FXStream& store,FXColor*& data,FXint& width,FXint& height){ FXint i,j,c,tablen,sub,t,total; FXuchar temp[4096],*array,storage,bpc,swap; FXuint *starttab,*lengthtab; FXushort magic,dimension,nchannels,w,h; FXlong base,start; // Null out data=NULL; width=0; height=0; // Remember swap state swap=store.swapBytes(); store.setBigEndian(TRUE); // Where the image format starts base=store.position(); // Load header store >> magic; // MAGIC (2) store >> storage; // STORAGE (1) store >> bpc; // BPC (1) store >> dimension; // DIMENSION (2) store >> w; // XSIZE (2) store >> h; // YSIZE (2) store >> nchannels; // ZSIZE (2) FXTRACE((50,"fxloadRGB: magic=%d width=%d height=%d nchannels=%d dimension=%d storage=%d bpc=%d\n",magic,w,h,nchannels,dimension,storage,bpc)); // Check magic number and other parameters if(magic==474 && nchannels==3 && bpc==1 && w>0 && h>0){ // Make room for image if(FXMALLOC(&data,FXColor,w*h)){ // Clear memset(data,0xff,sizeof(FXColor)*w*h); // Skip stuff store.position(500,FXFromCurrent); // RLE compressed if(storage){ tablen=h*3; // Allocate line tables if(FXMALLOC(&starttab,FXuint,tablen*2)){ lengthtab=&starttab[tablen]; // Read line tables store.load(starttab,tablen); store.load(lengthtab,tablen); // Where the RLE chunks start start=store.position(); // Substract this amount to get offset from chunk start sub=start-base; total=0; // Fix up the line table & figure space for RLE chunks // Intelligent RGB writers (not ours ;-)) may re-use RLE // chunks for more than 1 line... for(i=0; itotal) total=t; } // Make room for the compressed lines if(FXMALLOC(&array,FXuchar,total)){ // Load all RLE chunks store.load(array,total); for(c=0; c<3; c++){ for(j=h-1; j>=0; j--){ expandrow(((FXuchar*)(data+j*w))+c,&array[starttab[h-1-j+c*h]]); } } // Free RLE chunks FXFREE(&array); } // Free line tables FXFREE(&starttab); } } // NON compressed else{ for(c=0; c<3; c++){ for(j=h-1; j>=0; j--){ store.load(temp,w); for(i=0; i=0; j--){ for(i=0; i