Ssl support for mail4me
"HAUKIOJA,RISTO (HP-Finland,ex1)" <[email protected]> Tue, 21 Jan 2003 08:42:36 +0100
| Newsgroups | gmane.comp.java.enhydra.mail4me |
|---|---|
| Message-ID | <[email protected]> |
This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C2C120.AA957130 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable Hi J=F6rg & others, I've attached a version of mail4me with midp 2.0 compliant ssl = functionality added. The files I've modified are=20 ConnectionImpl.java - including ssl as defined in midp 2.0 ImapClient.java - added a capability command to be used with IMAP SetupScreen.java MailMIDlet.java - added option to use ssl with receiving and/or sending mail, and port configuration to be used with pop3, imap and smtp. The ssl part seems to work pretty well on Sun's wireless toolkit 2.0 = beta 1 emulator. Once I've added the right certificate authority to the = emulator it manages to start the ssl session and continue with IMAP.=20 Importing the certificate authority first to java general keystore = using keytool (sun WTK)( http://mindprod.com/jglosskeytool.html ) And from there to Mekeystore ( http://java.sun.com/j2me/docs/html/docs/Running.html#Using_the_MEKeyTool= ) The imap session seems to start ok. I get to login to a server and the server authenticates ok.=20 Then I've run into some trouble with the IMAP functionality.. I've = tested the client against a couple of different IMAP servers using ssl. One = one server when I go SELECT INBOX, as executed in ImapClient, I seem to get = no response from the server, and that is as far as my session goes.. One another IMAP server, the SELECT INBOX command gets a reply and the session goes on for a couple of more steps, but when gets stuck when it should start downloading headers.. The behaviour is just the same, = client has sent a package, but then no reply from the server is received.=20 This might be something with the way ssl socket is configured, but = could also be in the IMAP routines.. Any ideas?=20 If anyone has the possibility to test out the ssl with a midp 2.0 = emulator, I would be very interested hearing how far you've got.. Thanks, Risto ------_=_NextPart_000_01C2C120.AA957130 Content-Type: application/octet-stream; name="ConnectionImpl.java" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="ConnectionImpl.java" /***********************************************************************= ******* * Mail4ME - Mail for the Java 2 Micro Edition * * A lightweight, J2ME- (and also J2SE-) compatible package for sending = and * receiving Internet mail messages using the SMTP and POP3 protocols. * * Copyright (c) 2000-2002 J=F6rg Pleumann <[email protected]> * * Mail4ME is part of the EnhydraME family of projects. See the = following web * sites for more information: * * -> http://mail4me.enhydra.org * -> http://me.enhydra.org * * Mail4ME is distributed under the Enhydra Public License (EPL), which = is * discussed in great detail here: * * -> http://www.enhydra.org/software/license/index.html * * Have fun! = ************************************************************************= ******/ package de.trantor.mail.http; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.microedition.io.*; import de.trantor.mail.Connection; /** * Provides a concrete descendent of the abstract "Connection" class = that * can be used in any J2ME environments. It relies only on HTTP, which = is * the only protocol that is mandatory in the Generic Connection = Framework. * The class implements the client side of a TCP-through-HTTP tunnel * (which sounds somewhat absurd at first sight, but makes sense in the * J2ME scenario). The server part is implemented by the servlet = contained * in the de.trantor.mail.proxy package. * * @see de.trantor.mail.Connection * @see javax.microedition.io.HttpConnection */ public class ConnectionImpl extends Connection { private String proxyHost; =20 private int proxyPort; =20 private String sessionKey; =20 private HttpConnection connection; =20 private InputStream input; =20 private OutputStream output; =20 //private int contentLength; =20 private void openHttp(String method, String url) throws IOException = { closeHttp(); =20 String host =3D "http://" + proxyHost + ":" + proxyPort + = "/mail4me"; connection =3D (HttpConnection)Connector.open(host + url, = Connector.READ_WRITE, true); connection.setRequestMethod(method); connection.setRequestProperty("Connection", "close"); } private void closeHttp() throws IOException { if (input !=3D null) { input.close(); input =3D null; } =20 if (output !=3D null) { output.close(); output =3D null; } =20 if (connection !=3D null) { connection.close(); connection =3D null; } } =20 public ConnectionImpl(String proxyHost, int proxyPort) { this.proxyHost =3D proxyHost; this.proxyPort =3D proxyPort; } =20 /** * Opens a connection with the given host on the given port. * * @see #close */ public void open(String host, int port, boolean ssl) throws = IOException { openHttp(HttpConnection.GET, "?command=3Dopen&host=3D" + host + = "&port=3D" + port + "&ssl=3D" + ssl); sessionKey =3D receive(); closeHttp(); } /** * Closes the connection. * * @see #open */ public void close() throws IOException { try { openHttp(HttpConnection.GET, "?command=3Dclose&session=3D" + = sessionKey); read(new byte[0], 0, 0); } catch (Exception ignored) { } =20 sessionKey =3D null; } =20 protected int read(byte[] buffer, int offset, int count) throws = IOException { if (input =3D=3D null) { if (connection =3D=3D null) { write(null, 0, 0); } =20 if (output !=3D null) { output.flush(); output.close(); output =3D null; } =20 input =3D connection.openInputStream(); =20 int response =3D connection.getResponseCode(); if (response !=3D HttpConnection.HTTP_OK) { String msg =3D connection.getResponseMessage(); if (msg =3D=3D null) { msg =3D "Error " + response + " during HTTP = session"; } =20 throw new IOException(msg); } } =20 int actual =3D input.read(buffer, offset, count); =20 if ((actual =3D=3D -1) && (connection.getLength() !=3D 0)) { closeHttp(); actual =3D 0; } =20 return actual; } =20 protected void write(byte[] buffer, int offset, int count) throws = IOException { if (output =3D=3D null) { if (input !=3D null) { input.close(); input =3D null; } =20 openHttp(HttpConnection.POST, "/" + sessionKey); output =3D connection.openOutputStream(); =20 //contentLength =3D 0; } =20 if (count !=3D 0) { output.write(buffer, offset, count); //contentLength =3D contentLength + count; } } =20 public boolean connected() { return (sessionKey !=3D null); } } ------_=_NextPart_000_01C2C120.AA957130 Content-Type: application/octet-stream; name="ImapClient.java" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="ImapClient.java" /***********************************************************************= ******* * Mail4ME - Mail for the Java 2 Micro Edition * * A lightweight, J2ME- (and also J2SE-) compatible package for sending = and * receiving Internet mail messages using the SMTP, POP3 and IMAP = protocols. * * Copyright (c) 2000-2002 J=F6rg Pleumann <[email protected]> * * Edited Dec 17th 2002 Risto Haukioja <[email protected]> * * Mail4ME is part of the EnhydraME family of projects. See the = following web * sites for more information: * * -> http://mail4me.enhydra.org * -> http://me.enhydra.org * * Mail4ME is distributed under the Enhydra Public License (EPL), which = is * discussed in great detail here: * * -> http://www.enhydra.org/software/license/index.html * * Have fun! = ************************************************************************= ******/ package de.trantor.mail; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; /** * Encapsulates the IMAP v4.1 protocol as specified in RFC 2060. This = class * provides a simple interface to a IMAP mailbox. After a session has = been * established using the open() method, the number of available = messages can be * queried by calling the getMessageCount() method, and arbitrary = messages or * their headers can be retrieved from the mailbox using getMessage() = or * getHeaders(), respectively. Deleting messages is possible using * removeMessage(). Each IMAP session should be terminated by a call to = the * close() method. * * @see MailException * @see SmtpClient * @see Message */ public class ImapClient extends InboxClient { /** * Counts the commands executed so far in this session. Every = command of an * IMAP session needs a unique ID that is prepended to the command = line. */ private int commandCount =3D 0; /** * Creates a new ImapClient instance. */ public ImapClient() { super(null); } /** * Creates a new ImapClient instance with a given Connection = instance. */ public ImapClient(Connection connection) { super(connection); } public void open(String host, int port, boolean ssl, String user, = String pass) throws IOException, MailException { /** * Terminate any open session first. */ if (connected()) close(); /** * Create a connection object matching the current environment = (J2ME or * J2SE) using the factory method of Connection, then open the = socket. */ connection.open(host, (port =3D=3D 0 ? 143 : port), ssl); /** * Swallow the initial 'hello' line from the server, then try = to * authenticate using the given username and password. If = something * goes wrong, close the whole session. */ try { execute("CAPABILITY", null, null); execute("LOGIN", user + " " + pass, null); execute("SELECT", "INBOX", null); } catch (MailException e) { connection.close(); throw e; } } public void close() throws IOException, MailException { if (connected()) { execute("CLOSE", null, null); execute("LOGOUT", null, null); } connection.close(); } /** * Handles a request/response pair. This is a convenience method = used * internally to handle sending a request to the IMAP server as = well as * receiving the response. If the response starts with a "-" sign, = and thus * denotes a protocol error, an exception is raised to reflect it. = Note that * the request is only sent if it doesn't equal null, while the = response is * always being waited for. * * @see #send * @see #receive * @see MailException */ private String execute(String command, String arguments, Message = message) throws IOException, MailException { String result =3D null; String tag =3D "A" + commandCount++ + " "; connection.send(tag + command + (arguments =3D=3D null ? "" : " = " + arguments)); String temp =3D connection.receive(); while (!temp.startsWith(tag)) { if (temp.indexOf(" " + command + " ") !=3D -1) { int p =3D temp.indexOf('('); int q =3D temp.indexOf(')', p + 1); if (p !=3D -1) { if (q > p) { result =3D temp.substring(p + 1, q); } else if (message !=3D null) { int left =3D temp.indexOf('{'); int right =3D temp.indexOf('}', left); receiveMessage(message, = Integer.parseInt(temp.substring(left + 1, right))); } } } temp =3D connection.receive(); } temp =3D temp.substring(tag.length()); if (temp.startsWith("BAD ") || temp.startsWith("NO ")) { throw new MailException(temp); } return result; } public int getMessageCount() throws IOException, MailException { String buffer =3D execute("STATUS", "INBOX (MESSAGES)", null); /** * The result of the "STAT" request should always be "+OK = <#msgs> <#bytes>", * so we simply fetch the number between the first and the = second space * (and keep our fingers crossed that every IMAP implementation = follows the * RFC). */ int space =3D buffer.indexOf(' '); return Integer.parseInt(buffer.substring(space + 1)); } /** * Receives a message. This method receives a whole message from = the server * and stores the header and body parts in the according vectors. = It is able * to undo any byte stuffing produced by the server. It also undoes = header * folding in a way, putting multiple header lines that belong to = one * field into a single line of the header vector. * <p> * The method assumes that either a "RETR" or a "TOP" command has = already * been issued, so that it can only be called from the getMessage() = and * getHeader() methods (whom it serves as an internal helper = method). * * @see #getMessage * @see #getHeaders */ private void receiveMessage(Message message, int size) throws = IOException, MailException { int count =3D 0; /** * First we read the header lines. The end of the header is = denoted by * an empty line. */ String buffer =3D connection.receive(); int octets =3D buffer.length() + 2; while (!(buffer.equals(""))) { /** * Undo header folding, that is, put logical header lines = that span * multiple physical ones into one vector entry. This eases = dealing * with header fields a lot. */ if (buffer.startsWith(" ") || buffer.startsWith("\t")) { message.setHeaderLine(count - 1, = message.getHeaderLine(count - 1) + "\r\n" + buffer); } else { message.addHeaderLine(buffer); count++; } buffer =3D connection.receive(); octets =3D octets + buffer.length() + 2; } /** * Next we read the body lines. The end of the body is denoted = by a line * consisting only of a dot (which is the usual end of = multiline respones). */ while (octets < size) { buffer =3D connection.receive(); octets =3D octets + buffer.length() + 2; message.addBodyLine(buffer); } } public Message getMessage(int index) throws IOException, = MailException { Message message =3D new Message(); execute("FETCH", (index + 1)+ " (RFC822)", message); return message; } public Message getHeaders(int index) throws IOException, = MailException { Message message =3D new Message(); execute("FETCH", (index + 1)+ " (RFC822.HEADER)", message); return message; } public void removeMessage(int index) throws IOException, = MailException { execute("STORE", (index + 1) + " +FLAGS.SILENT (\\DELETED)", = null); } public String getUniqueId(int index) throws IOException, = MailException { String buffer =3D execute("FETCH", (index + 1) + " (UID)", = null); // in Klammern? int space =3D buffer.indexOf(' '); return buffer.substring(space + 1); } public int getSize(int index) throws IOException, MailException { String buffer =3D execute("FETCH", (index + 1) + " = (RFC822.SIZE)", null); // in Klammern? int space =3D buffer.indexOf(' '); return Integer.parseInt(buffer.substring(space + 1)); } } ------_=_NextPart_000_01C2C120.AA957130 Content-Type: application/octet-stream; name="MailMIDlet.java" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="MailMIDlet.java" /***********************************************************************= ******* * Mail4ME - Mail for the Java 2 Micro Edition * * A lightweight, J2ME- (and also J2SE-) compatible package for sending = and * receiving Internet mail messages using the SMTP and POP3 protocols. * * Copyright (c) 2000-2002 J=F6rg Pleumann <[email protected]> * * * Modified Jan 20th, 2003 * Contributed port number setting by Risto Haukioja <[email protected]> * changed pop3Host, pop3User, etc. to mailHost, mailUser etc. * added options for using ssl with sending and receiving mail *=20 * * Mail4ME is part of the EnhydraME family of projects. See the = following web * sites for more information: * * -> http://mail4me.enhydra.org * -> http://me.enhydra.org * * Mail4ME is distributed under the Enhydra Public License (EPL), which = is * discussed in great detail here: * * -> http://www.enhydra.org/software/license/index.html * * Have fun! = ************************************************************************= ******/ package de.trantor.mail.demo.j2me; import java.io.IOException; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.util.Vector; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.rms.*; import de.trantor.mail.*; /** * Provides a small MIDlet for doing e-mail on an MIDP-enabled device, = like * a PDA or a cell phone. Currently not very well documented due to = lack of * time. */ public class MailMIDlet extends MIDlet implements CommandListener { private Display display =3D Display.getDisplay(this); private SetupScreen setupScreen =3D new SetupScreen(this); private InboxScreen inboxScreen =3D new InboxScreen(this); private ReadScreen readScreen =3D new ReadScreen(this); private WriteScreen writeScreen =3D new WriteScreen(this); private InfoScreen infoScreen; /* * The variables to define your email configurations * */ private String address =3D "[email protected]"; private String hostname =3D "localhost"; private String mailHost =3D "pop.yourisp.com"; private boolean sslIncoming =3D false; private String hostPort =3D "143"; private String mailUser =3D "username"; private String mailPass =3D "password"; private String smtpHost =3D "smtp.yourisp.com"; private boolean smtpAuth =3D false; private boolean sslSmtp =3D false; private String smtpPort =3D "25"; =20 private boolean httpProxy =3D false; private String httpHost =3D "localhost"; =20 private boolean debug =3D false; private boolean imap =3D false; private InboxClient mailClient; private Vector msgNumbers =3D new Vector(); public MailMIDlet() { try { loadSetupData(); } catch (Exception e) { e.printStackTrace(); } setupScreen.setAddress(address); setupScreen.setHostname(hostname); setupScreen.setMailHost(mailHost); setupScreen.setSslIncoming(sslIncoming); =20 setupScreen.setHostPort(hostPort); setupScreen.setMailUser(mailUser); setupScreen.setMailPass(mailPass); setupScreen.setSmtpHost(smtpHost); setupScreen.setSslSmtp(sslSmtp); setupScreen.setSmtpAuth(smtpAuth); setupScreen.setSmtpPort(smtpPort); setupScreen.setHttpProxy(httpProxy); setupScreen.setHttpHost(httpHost); setupScreen.setDebug(debug); setupScreen.setImap(imap); } public void commandAction(Command cmd, Displayable dsp) { if (debug) System.out.println("Command: " + cmd.getLabel()); try { if (cmd =3D=3D SetupScreen.OK) { address =3D setupScreen.getAddress(); hostname =3D setupScreen.getHostname(); mailHost =3D setupScreen.getMailHost(); =20 sslIncoming =3D setupScreen.getSslIncoming(); hostPort =3D setupScreen.getHostPort(); mailUser =3D setupScreen.getMailUser(); mailPass =3D setupScreen.getMailPass(); smtpHost =3D setupScreen.getSmtpHost(); sslSmtp =3D setupScreen.getSslSmtp(); smtpAuth =3D setupScreen.getSmtpAuth(); smtpPort =3D setupScreen.getSmtpPort(); httpProxy =3D setupScreen.getHttpProxy(); httpHost =3D setupScreen.getHttpHost(); debug =3D setupScreen.getDebug(); imap =3D setupScreen.getImap(); try { saveSetupData(); } catch (Exception e) { e.printStackTrace(); } if (imap) { if (httpProxy) { mailClient =3D new ImapClient(new = de.trantor.mail.http.ConnectionImpl(httpHost, 8080)); } else { mailClient =3D new ImapClient(); } } else { if (httpProxy) { mailClient =3D new Pop3Client(new = de.trantor.mail.http.ConnectionImpl(httpHost, 8080)); } else { mailClient =3D new Pop3Client(); } } mailClient.setDebug(debug); =20 mailClient.open(mailHost, (new = Integer(Integer.parseInt(hostPort))).intValue() , sslIncoming, = mailUser, mailPass); long t0 =3D System.currentTimeMillis(); getMessageList(); long t1 =3D System.currentTimeMillis(); if (debug) inboxScreen.setTitle("Time: " + (t1 - t0) + = " ms"); display.setCurrent(inboxScreen); } else if (cmd =3D=3D InboxScreen.READ) { int num =3D inboxScreen.getMessageIndex(); if (num =3D=3D -1) return; long t0 =3D System.currentTimeMillis(); Message message =3D = mailClient.getMessage(((Integer)msgNumbers.elementAt(num)).intValue()); long t1 =3D System.currentTimeMillis(); = readScreen.setSender(Message.getMachineAddress(message.getHeaderValue("F= rom", "No sender"))); readScreen.setDate(message.getHeaderValue("Date", "No = date")); readScreen.setSubject(message.getHeaderValue("Subject", = "No subject")); readScreen.clearBody(); MimeDecoder mime =3D new MimeDecoder(message); addPartToScreen(mime); if (debug) readScreen.setTitle("Time: " + (t1 - t0) + " = ms"); display.setCurrent(readScreen); } else if (cmd =3D=3D InboxScreen.WRITE) { writeScreen.clear(); display.setCurrent(writeScreen); } else if (cmd =3D=3D InboxScreen.DELETE) { int num =3D inboxScreen.getMessageIndex(); if (num =3D=3D -1) return; = mailClient.removeMessage(((Integer)msgNumbers.elementAt(num)).intValue()= ); inboxScreen.delete(inboxScreen.getMessageIndex()); msgNumbers.removeElementAt(num); display.setCurrent(inboxScreen); } else if (cmd =3D=3D InboxScreen.INFO) { infoScreen =3D new InfoScreen(this); display.setCurrent(infoScreen); } else if ((cmd =3D=3D SetupScreen.EXIT) || (cmd =3D=3D = InboxScreen.EXIT) ){ destroyApp(false); notifyDestroyed(); } else if (cmd =3D=3D InfoScreen.OK) { display.setCurrent(inboxScreen); infoScreen =3D null; } else if (cmd =3D=3D ReadScreen.OK) { display.setCurrent(inboxScreen); } else if (cmd =3D=3D WriteScreen.OK) { Message message =3D new Message(address, = writeScreen.getRecipient(), writeScreen.getSubject()); message.addBodyLine(writeScreen.getBody()); SmtpClient smtpClient =3D null; if (httpProxy) { smtpClient =3D new SmtpClient(new = de.trantor.mail.http.ConnectionImpl(httpHost, 8080), hostname); } else { smtpClient =3D new SmtpClient(hostname); } try { smtpClient.setDebug(debug); if (smtpAuth) { smtpClient.open(smtpHost, (new = Integer(Integer.parseInt(smtpPort))).intValue(), sslSmtp, mailUser, = mailPass); } else { smtpClient.open(smtpHost); } smtpClient.sendMessage(message); } finally { smtpClient.close(); } display.setCurrent(inboxScreen); } else if (cmd =3D=3D WriteScreen.CANCEL) { display.setCurrent(inboxScreen); } } catch (Exception error) { Alert alert =3D new Alert("Error"); alert.setString(error.getClass().getName() + ": " + = error.getMessage()); error.printStackTrace(); display.setCurrent(alert, setupScreen); } } protected void startApp() throws MIDletStateChangeException { display.setCurrent(setupScreen); } protected void destroyApp(boolean unconditional) { try { mailClient.close(); } catch (Exception error) { } } protected void pauseApp() { try { } catch (Exception error) { } } /** * Saves the setup data to RMS. */ private void saveSetupData() throws RecordStoreException, = IOException { try { RecordStore.deleteRecordStore("mail4me"); } catch (RecordStoreException e) { } RecordStore store =3D RecordStore.openRecordStore("mail4me", = true); try { ByteArrayOutputStream buffer =3D new = ByteArrayOutputStream(); DataOutputStream output =3D new DataOutputStream(buffer); output.writeUTF(address); output.writeUTF(hostname); output.writeUTF(mailHost); output.writeBoolean(sslIncoming); output.writeUTF(hostPort); output.writeUTF(mailUser); output.writeUTF(mailPass); output.writeUTF(smtpHost); output.writeBoolean(sslSmtp); output.writeBoolean(smtpAuth); output.writeUTF(smtpPort); output.writeBoolean(httpProxy); output.writeUTF(httpHost); output.writeBoolean(debug); output.writeBoolean(imap); store.addRecord(buffer.toByteArray(), 0, buffer.size()); } finally { store.closeRecordStore(); } } /** * Restore the setup data from RMS. */ private void loadSetupData() throws RecordStoreException, = IOException { try { RecordStore store =3D = RecordStore.openRecordStore("mail4me", false); try { ByteArrayInputStream buffer =3D new = ByteArrayInputStream(store.getRecord(1)); DataInputStream input =3D new DataInputStream(buffer); address =3D input.readUTF(); hostname =3D input.readUTF(); mailHost =3D input.readUTF(); sslIncoming =3D input.readBoolean(); hostPort =3D input.readUTF(); mailUser =3D input.readUTF(); mailPass =3D input.readUTF(); smtpHost =3D input.readUTF(); sslSmtp =3D input.readBoolean(); smtpAuth =3D input.readBoolean(); sslSmtp =3D input.readBoolean(); =20 httpProxy =3D input.readBoolean();; httpHost =3D input.readUTF(); debug =3D input.readBoolean(); imap =3D input.readBoolean(); } finally { store.closeRecordStore(); } } catch (Exception e) { } } private void getMessageList() throws MailException, IOException { Vector list =3D new Vector(); int count =3D mailClient.getMessageCount(); for (int i =3D 0; i < count; i++) { String uid =3D mailClient.getUniqueId(i); int size =3D mailClient.getSize(i); System.out.println("[INFO] Message " + i + " has ID \"" + = uid + "\" and is " + size + " bytes."); Message message =3D mailClient.getHeaders(i); list.addElement(message.getHeaderValue("Subject", "No = subject") + " (" + Message.getMachineAddress(message.getHeaderValue("From", = "No sender")) + ")"); msgNumbers.insertElementAt(new Integer(i), 0); } inboxScreen.setMessages(list); } private void addPartToScreen(MimeDecoder mime) { if (mime.getPartCount() =3D=3D 0) { if ("image/png".equals(mime.getType())) { byte[] bytes =3D mime.getBodyBytes(); readScreen.addImage(Image.createImage(bytes, 0, = bytes.length)); } else if ((mime.getType() =3D=3D null) || = ("text/plain".equals(mime.getType()))) { String s =3D ""; for (int i =3D 0; i < mime.getBodyLineCount(); i++) { s =3D s + "\n" + mime.getBodyLine(i); } readScreen.addBody(s); } else { readScreen.addBody("\n[Unable to display \"" + = mime.getType() + "\" part.]"); } } else { for (int p =3D 0; p < mime.getPartCount(); p++) { addPartToScreen(mime.getPart(p)); } } } } ------_=_NextPart_000_01C2C120.AA957130 Content-Type: application/octet-stream; name="SetupScreen.java" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="SetupScreen.java" /***********************************************************************= ******* * Mail4ME - Mail for the Java 2 Micro Edition * * A lightweight, J2ME- (and also J2SE-) compatible package for sending = and * receiving Internet mail messages using the SMTP and POP3 protocols. * * Copyright (c) 2000-2002 J=F6rg Pleumann <[email protected]> * * Modified January 20th, 2003 * Contributed port number setting by Risto Haukioja <[email protected]> * changed pop3Host, pop3User, etc. to mailHost, mailUser etc. * added methods for ssl environment variables for sending and = receiving mail * * * Mail4ME is part of the EnhydraME family of projects. See the = following web * sites for more information: * * -> http://mail4me.enhydra.org * -> http://me.enhydra.org * * Mail4ME is distributed under the Enhydra Public License (EPL), which = is * discussed in great detail here: * * -> http://www.enhydra.org/software/license/index.html * * Have fun! = ************************************************************************= ******/ package de.trantor.mail.demo.j2me; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; /** * Represents the setup-screen that is shown at startup. Currently * not very well documented due to lack of time. */ public class SetupScreen extends Form { private TextField address =3D new TextField("Address:", "", 128, = TextField.EMAILADDR); private TextField hostname =3D new TextField("Local host:", "", = 128, TextField.URL); String[] names =3D {"POP3", "IMAP"}; private ChoiceGroup services =3D new ChoiceGroup("Inbox type:", = Choice.EXCLUSIVE, names, null); private TextField mailHost =3D new TextField("Inbox host:", "", = 128, TextField.URL); String[] options =3D {"Off", "On"}; private ChoiceGroup sslIncoming =3D new ChoiceGroup("SSL for = incoming mail:", Choice.EXCLUSIVE, options, null); private TextField hostPort =3D new TextField("Host port:", "", 128, = TextField.NUMERIC); private TextField mailUser =3D new TextField("Username :", "", 128, = TextField.ANY); private TextField mailPass =3D new TextField("Password:", "", 128, = TextField.PASSWORD); private TextField smtpHost =3D new TextField("SMTP host:", "", 128, = TextField.URL); private ChoiceGroup sslSmtp =3D new ChoiceGroup("SSL for sending = mail:", Choice.EXCLUSIVE, options, null); private ChoiceGroup smtpAuth =3D new ChoiceGroup("SMTP auth:", = Choice.EXCLUSIVE, options, null); private TextField smtpPort =3D new TextField("SMTP port:", "", 128, = TextField.NUMERIC); private ChoiceGroup httpProxy =3D new ChoiceGroup("HTTP proxy:", = Choice.EXCLUSIVE, options, null); private TextField httpHost =3D new TextField("Proxy host:", "", = 128, TextField.URL); private ChoiceGroup debug =3D new ChoiceGroup("Debugging:", = Choice.EXCLUSIVE, options, null); public static Command OK =3D new Command("Ok", Command.SCREEN, 1); public static Command EXIT =3D new Command("Exit", Command.EXIT, = 2); //public static Command EXIT =3D new Command("Exit", Command.EXIT, = 99); public SetupScreen(MailMIDlet midlet) { super("Setup"); append(address); append(hostname); append(services); append(mailHost); append(sslIncoming); append(hostPort); append(mailUser); append(mailPass); append(smtpHost); append(sslSmtp); append(smtpAuth); append(smtpPort); append(httpProxy); append(httpHost); append(debug); addCommand(OK); addCommand(EXIT); setCommandListener(midlet); } public String getAddress() { return address.getString(); } public String getHostname() { return hostname.getString(); } =20 public boolean getImap() { return services.isSelected(1); } public String getMailHost() { return mailHost.getString(); } public boolean getSslIncoming() { return sslIncoming.isSelected(1); } =20 public String getHostPort(){ return hostPort.getString(); } =20 public String getMailUser() { return mailUser.getString(); } public String getMailPass() { return mailPass.getString(); } public boolean getDebug() { return debug.isSelected(1); } public String getSmtpHost() { return smtpHost.getString(); } public boolean getSslSmtp() { return sslSmtp.isSelected(1); } public boolean getSmtpAuth() { return smtpAuth.isSelected(1); } public String getSmtpPort(){ return smtpPort.getString(); } =20 public String getHttpHost() { return httpHost.getString(); } public boolean getHttpProxy() { return httpProxy.isSelected(1); } public void setAddress(String address) { this.address.setString(address); } public void setHostname(String hostname) { this.hostname.setString(hostname); } public void setImap(boolean value) { if (value) { services.setSelectedIndex(1, true); } } public void setMailHost(String mailHost) { this.mailHost.setString(mailHost); } public void setSslIncoming(boolean value) { if (value) { sslIncoming.setSelectedIndex(1, true); } } =20 public void setHostPort(String hostPort) { this.hostPort.setString(hostPort); } public void setMailUser(String mailUser) { this.mailUser.setString(mailUser); } public void setMailPass(String mailPass) { this.mailPass.setString(mailPass); } public void setSmtpHost(String smtpHost) { this.smtpHost.setString(smtpHost); } public void setSslSmtp(boolean value) { if (value) { sslSmtp.setSelectedIndex(1, true); } } public void setSmtpAuth(boolean value) { if (value) { smtpAuth.setSelectedIndex(1, true); } } =20 public void setSmtpPort(String smtpPort) { this.smtpPort.setString(smtpPort); } =20 public void setHttpHost(String httpHost) { this.httpHost.setString(httpHost); } public void setHttpProxy(boolean value) { if (value) { httpProxy.setSelectedIndex(1, true); } } public void setDebug(boolean value) { if (value) { debug.setSelectedIndex(1, true); } } } ------_=_NextPart_000_01C2C120.AA957130 Content-Type: application/octet-stream; name="Mail4ME.jad" Content-Disposition: attachment; filename="Mail4ME.jad" MIDlet-Version: 1.0 MIDlet-Vendor: ristoh MIDlet-Jar-URL: Mail4ME.jar MicroEdition-Configuration: CLDC-1.0 MIDlet-1: MailMIDlet, , de.trantor.mail.demo.j2me.MailMIDlet MicroEdition-Profile: MIDP-1.0 MIDlet-Jar-Size: 36637 MIDlet-Name: Mail4ME ------_=_NextPart_000_01C2C120.AA957130 Content-Type: application/octet-stream; name="Mail4ME.jar" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Mail4ME.jar" UEsDBBQACAAIAIi+NC4AAAAAAAAAAAAAAAAUAAQATUVUQS1JTkYvTUFOSUZFU1QuTUb+ygAAdY6x CoMwEIZ3wXfIA5hQS6es6iCY4uQemrO9YnJwub5/rYLt0vG++/j5nE84QxY9AWekZFVtTmXh8MbU BZQV6YbSjPcXe9mEZmgbvVt9u4Doq49glfO4XFx30AlSILaKMQs9Dlxbtan7WalKBTDCPgmxievD BIhknucI5uv9rP7NHJlmXD4lfTvugWXxBlBLBwi2NeqzjgAAAOAAAABQSwMEFAAIAAgAiL40LgAA AAAAAAAAAAAAACoAAABkZS90cmFudG9yL21haWwvZGVtby9qMm1lL01haWxNSURsZXQuY2xhc3OV Wgl8VNXV/587k7zJ8CAwECRIIKyGsIR930IIMpAAEhYDIk4yjzA4mQmTCRBwQwV3xboggiIoCYgL IJmgtGpbl27WtrbaVqtU21pb12pd6sJ3zntvJjMkRL7fT849575z7z337HfML7576mk4MEzF3PgL zXBTIc3MwBtUpNEsN5xULMRsjc53Q7OIORp53XBbxFyN5rnR0SJKXFQq43wXLZBxoYsukHGRgDIX LZZxiYuWyrjMRRfKWO6i5TKuEHCRgJUuuljGVQIuEeATUCGgUiO/G+fRDCEMN4PVGlW5aQ0FRNq1 Ai4VEBRQLSAkICygRsA6AREBtQKiAuoErBewQcDGDKqnTRptdmMqzXDRZTJe7qYr6ErBrnLTFro6 gxmvEe5rBWwVsE3AdQKuF3CDgBsF3CTgZgG3CLhVwG0Ctgu4XcAP5C53aHSnRne5sZTudmMJ7ZBb 3iPYDI12urGCdghgK91LGzTa5cYq2i3gPgH3y/QeN8v+gGy210X7RNwHXfSQm/ZTg9i2MYPNeEBs eVDU+LAsOeSiR1z0qBvb6TEBj4t1D7voiIuOCvqEi465qEnQmIBmjY67sZmelFOectMJapBdfyh+ 8CPBnpZdn5Ezn5VDfixzP9Hop25ssxzlOVHe8zL9vOzxgrjeixn89ZoM3p9BR7pGo5/Jhj8X8AsR 65eC/UqwlzT6tRt308sCfiNgg4A9An4r4HcCXpFtfq/RH1z0qht7mJFeoz+66U/0Zxe9Li7zhkz/ RdTypkj8iovectNJ+qtGb8v4jkZ/c+NR0f3f3Xic/iHgXQH/lOn3BPxLGP8t4H2NPpDxQzea6SON PnbjKfpEwH8EfConfCbgvwI+d9EXYpwvXfSVi/7noq9l9hsXfeui70RppxgosKEUsa6VcimHjE63 SlPpgmlunstgeyi3S3VwKd2lOsp8JwGZMt/Zpbq4lEforprqpqksTXUnaP5AbU3QV0/oV7LWt963 saA6UBkJG/5ANBAOFQQr/XWBglkWz2RCh1ojWldTVhkxjBDhvBK/URCN+ELRcKSg2hcIFviN6nDB 2lHVRkFZC6OsC4QqwhvPZp23hZHXuSOGzx9fNqidZYsSfHLahkggapzNactaGOW0QGh1+GxO8yb4 eJXm8/sjRm0twWOqsCDoC1UVlEUjgVAVf3atCddGQ75qg1HZZg6TosjaoDdUGa5mJgItt/kWhiNR m29JrRGx0YU+2d1VWx2tsVabaGFddA2fzhuVMWVPWhtkrIkyGglvrJd9o/FlaX6joo6PcwaqfbzA LXsXBQNGiL/ltLquaQnrs+imurZqfl11hRFpuWhdlNmWGpW8hDnSpwRCgeg0giNv8FI+pCjs5ztn lgRChrVwsa8iaMjicKUvuNQXCQhtTzqjawK17Su9lMlS76ygIeIQr8lKUnfxxkqjRlyWv3VktVb7 Qv7CSpkgzMs7s2sXWayTv9f5RczJci9HZbW/3WiJb8ms/toaudNZ7U1Q0RF8sbmCjOTFobpqJr1s 4mr2Ll8V3zi7lXpKrU+82lkdEB9rbcdSnp9lVLI1xEpu8ZK40Xu1Yi5LfGXeNCMSCbMTpvmChrhV 7plvUigc4u21UV8kWlgj7pWwSa2mzmHab9RGI+F686Mzb7kos2Mdx0DI2skX5OU1vrpaw+ToWOtb b5hZZJYv6iMMa+vwSHUth35lOOIv4ysYyV6QViszhAFnsU68t6Ju9WqJuD6WVwXCBTPro0ZhJOKr X1AXramLckQbvmphDZs0oWeCVURM4dJUD75CMMxZqeUKvVtv7Q0l75wWCJkbZ6dsnMrTqcqI2lYv CUhUO4PmkFYZrhObUoB9py7APuqsDWwyNJXNQcgpaiHbZXEiu+XmtesnYpu0ChaSY1KtmMm7MkJi 1LJwXaTSmB2QoM1sCcnhIrDOPKSpnro6V/XS8RZOEgaeVYnglSpHx1/xdrsrkoqDjnfwN7bu2ZQE HX/HP9rdOKkO6HgX/yR0q+eLStqeIQjH6XDOKjr+jfc5vQYlg0m+1vGBTGTWhGuGp/B9iPd1fISP 2RYjx4zW8Ymwudi3zT11/Mekazixb2An1PGp0J0lNlP3+Uz2+S8+1vG5bKZGjdXxhcx9KXNfCfY/ wb6Wr51Pz8o6vsMpnYYREbq2kSw11VtXfYh0lav66qqfgP4CBhCDgYINEnCegDwBg+VDvoAhQg4V bJhgwwUroL6aGqGrkWoUofvpxXCmHWEZdoaclKur0WqMpsbqapwar6sJarymJupqkmw4mXRdTZHp qQKmCZiuZuiqULCZAooEzBJQLB9mCzhfyDmCeQWbK9g8BjRAlNCzVZHjShjPhv1P/yiVk9N5KGSY lcRbXRMURy0RUKrjG3zbxo4LwzWjrR01NZ/QpUUL3lDUqDIiulqgFsoWF+hqkSrT1WK1RFdL1TKd RoqM6Ys5EC3dXMjuk1vN6bNcV8tFKSvURbpaKZq5WFauUpfoyqcqONZnR8JcLjLmh3NrjZBfTqlU fl0ZarWuqlRf5uBUwjGrMYefMV2tkVmtrK5iLV+PI1uWWoSuAnLYWpHm3HbShFziUp0m0ERNBXVV LXKFxJvCgtXIBdcJiAioJb3dcG3pqXS8h3/pKsqbUK64VZ0Ics4ZSp+u1ouhNzBgcTbqql7ITWph G7ZpqW7Cu1lAX9E/g8v4JupyEf4KEbR3+5WOs2Ox1EZNXamrq9QWTV2tq2vUeN5QLOcTEa61DLZV CjgfPqaac/E2XV0nah/y/6hlurpe3cCFvd2yROhxplokt7xRVzeJODeLOm9Rt+o0TvznNrVdV7eL dnu1V5l09QN1h2xzJ5vhDJVJPt+lq7vl5jsk6O6RA3aqe3W1S+3mFLnCO3/2gpW5ttVM976PHTZ3 ja821zsrtx/j/XI5K+QGanNZZblm9Rmuq/vFvVVuHteWwbraox7Q1V61T1cPqod0tV+V8TpuZ6uM gppQla4aJIU06uqAOqirh9Wtmjqkq0fUo7p6TD3OTh41NkYLuOcKcA0Eb+nW1WGR8YhIe1RMk+Ve sSQkHVlulCPFatBEOle/3BouocNX6uoJdaxdV24pi1xo27B0dcDP3wriLHnf10pKnTdCkjrHfN9u ZVGO7aI1nG5aHCie+9lo3gVJszmtIopB0ve2RE/pW1mf3IwkiNlt9tkp4k0efDavzMGtm5M2nwHS pSSVtcVrIuEN1nMis4YLjiij8tLFEV+lIX2vES2MP9Sy8lq/1GQzed7OSTzXhCpNvNg6MVWW/GiL M1tPrjiz9WyLU9bLTaiyxOPNbW1kPdrin6zHXJyyttTlgJaHXAebjD8BWfPWc05j1Gu+6Don3aqe fYbTgiMsDWVWoqFcaCkm3sr6amq4XBCGtqWRVlNWBZ/cnmvYLssCsmuU+CoM7uq75bXeSt4K0bCF Jzloknh8MdOKQXZFtWCe5WwJE3aoSjFVVYqpqk4zFb9Il7cssQ1WlWKwqhSDVaUYrCrZYFUpBqtK MVhVqsGqUgxW1WKwqrjBurehdq94Yp/WIdDSiJi+2qowJ73XzdYyUmt4BW3T2b3yBDNPcrGKl/qC dYapJpkP18gLYXJboi1vPdd2JHWprItEWBLpZUoDwaA87nl7ftyemze3HcfKOaNjWY8dcfvFgWjQ jugi6xQzZZz1C965qLhwFueIloeUlzumjVxIjKBRzdsVmlrzJou5wGyMJlvOUBp/j/cSpjM/ycUP 5/ArxIjYCp7Qhk7PJu54ry6mg1auCYSMRAwMOqug5cUZklfMttDKFlYraCaiePuXURk0fJGZYX+9 XOuMlxL9DTgbTXOHtGyRd3GxPExlZ841s4pLimWiY4ST+XojocV0P+tdBMq0PhS3WMEpTQMPxRd6 F/P3UDgaWF0/y/odwfBbEcc9U6DG8nozUuM3mnhWym7bfSVCLV104KezYPIzFmFku2F5xqIS8icu y9oI18qliwrnFxWXpOTsBbbkkiqKgmYm6pqSOs1JtmfmaVOWwPPNVGja2k6r3naiwvrF5uyjpt/3 t6zspZYpU+YyJZ+kzLRlmeVtdgatf6fJzkuUspQfXMxUZv7uu2TxbHYME50ZDrPvcTLrEA0nGlvJ fIPlN40MNq21Oesvb8VMr1fSX2fTQCnyZlheZjKmccjL4jReIGf2aJEn+Xca04nkx2tTmg6CJYRJ SjxF1m82UimWhALr6gyvv1XqSUSx2LgssMmwUrdXUmkbjIlU6k5kH/YPN9/VjqvTKoKd2UTgzECI i2E0Kf66t8HpjXdK9h2S+qnkH4SFS8JTfneyrykXWFxfY6Q2Kravphvr6nzB05uzuHTLrc0kEmda P0ud+YXmrTYjrQM/JjnP2dQgy8Bn9neTT7oS1pS9pn874WOxm6qw5bIyROckKn5tO4VYChB9yO9v bVWOlF9qXWb7WuqrQV+8gb/wa+VNnAMlP6sBPP4Vb5vjO/ibOf4d/zDHd/FPc+RHtDn+G++b4wf2 +KE9foSPzfETm/6PPX5qj5/Z439tvs/t8Qt7/kub/sqm/2fTX9vjN/jWHL/DKR4zQGT9p3hyNpz8 BVSa3wzKzz8O1QRH/gk4y3kirQnpjGuCu5qQwbhb8A5N0BnvKHinJmTmezo3oUu+x9OErvmebk3I ync0oXu+55wm9Mj3ZDehZ77n3Cb0yvfkNKG3fOwjIDff07cJ/QTtb64eIOhAAYN4//PKm5HXhMF8 Sn4jXCVDYhiaf4xFOoYuMQyz0a4xDLfRrBgKbLR7DCNstEcMI220ZwyjbLRXDKNttHcMY2w0N4ax NtonhnE22i+G8TbaP4YJNjoghok2OjCGSTY6KIbJR9hFdmEP9mEIHORgpTdgMMMyVvYI6BiFHhiN ARjD1FhMwVTMxDTMwXTMxwzmKkQ5z6xCEQzMwqUoRg1mow7nYzO8uApzsQ0luAml2I4L+KQlfNZS Pu1CNGIFjuIi/Agr8TNcjFd4lzdxCbugj92ogh2gktzwUxYMysVqGoIqGoc1VIgAlWAtOVnK7pZD UBqlM/UgnKSRC8SOAdPt94E0jgMGQ/g8E2d+yuCNTZ9yPQmNLwlnlWhmJ/ocxZQTmMrGnOaZHsMM NmMhDzHMjKFoyFHMaqDb80V7MRSLG1nobPElCz1fHMpC54hbWahXfMtC54qDWeg88TILLRFXs9BS 8TULnS++Z6ELxPcsdKF4oIVeIG5ooYvEGS20TFyyGYvZD+cPs/xw0E7TbfrzDdlZl5SfwNJycYsu fbY3Y1kzLmxCeSOmm9+asdykRrYsWNFqwUUmSyfzWzNWMsVfyy33uthGs05glYw9juOSZvhiqBBn F9e2fLryOPwzWVCDx/FplgEG8pARt8BqVn33tL5GDFWeNXEzBJjDIVwxrG1UQTbKpQ1osiaC03LU A3AekQ2dthSDc2Kofhar+PgYQpPS5ZvG83p2uifsqYlh3XFEYqi1p6KeOp6KYb1Nb/BsNOl6oWPY dAKby7PTm3HZpIz87IxmXG7JPUg+p8itdXemCn6FLbgugtMTLPiVDewWx5AZw1X2t0zz2w7+tqUB c1Mv1dZ9rhYWmy2Ga+zP1yariLy829YG5LCttkkWvK4J19sM15sMecxww364ebixgTOkI4ab8mO4 uZE68dQtDabN4vvlEy9vxGf85dYGjoCkk/AWT97WgBdOYLtI2sW60O3W8INm3DF/mIXfGcNdy2iS 0/Kwvidw92kOJrmyGTsmORvRWb5a9D2TnNlOy8d2StbbiaEm3dt2tH7Jjpbb4mj3NrIpnVb23JXt 5JjYne2M4b5GdJzkNrFs9zMpN8nim9zfwP6dPFk8/wT2lHseaMZeEcS2Nu+2L4YH2cqehxgwuT9u 8QY7+hzm4RyZjUc4q77Mme5VDHE0Oj5yfAE4vnB8JSP6O/s6B8SzMK3nrAhUoz/n03xEOPfWcr6N Yh7Wc/7cwDlyI4KoZ2wTruZcewsuwz24nHPgFXgMV+JJzr3PYQufdi2ft5VPvA6v40Yu/zdxhr2Z 0nAbdcUd1BN3clbdwVl1F2fV+yiKPbQRD9Bl2Etb8CA9jIfoOBroGTTSizhIL+EQ/Q6P0Ht4lD7E 44pwWHXBEdUXT6g8NKnRiKmJOK4q8aRahxNqI36orsTT6hY8q+7Ej9Vu/FTtw/OqGS+o5/Giegk/ V6/jl+pt/Ep9iJfUN3jZ4cZvHJn4raM7XnHk4PeOPPzBMQKvOcbjj45i/NlRgtcdq/GGI4I3HXV4 y3EZTjruxTuORrzrOIz3HM34l+MkPnC8h48dH+FTx2f4hDX8qZPwuTMTXzq74ytnX3zN2v7WOQLf OZfglLOcG+TVpMyqsg+dIZRVVQTrQDrXScE6UieuK6/ZlcbBuppKmdSZsS0YQ10YS2M9NZKHtetg Te02vzpZX1upG9eydNbaVSafxrqaTN3pHGSwVqZYK/heDSafg2+2g3pQNpzOgSiknnIaSzuOzqVe cEqFo2/Qm/3DwVVNoys0OsGyvppMmmXv9RQGtnsK2TWVHJdKFqaSDyMtQTpZUewYKd9fgjNBsrbY B1wtNH/azv828/y6lGXsGinkvtN2Sb0AO0gyyb6SQnZPJUekksWp5L1J92Hp0niqMXVKw908ebKt yffamvyi9ST7yRr2vNbM7IrJ0rBHppADTrekc3WqqZ2Uw62xkjYGk9gnWVfc6loJi3PN2iPSSJsd ndvsktLQgdJN/9YtXsu/qbfsxe1QH94xl/pajRFnEoLD3rE8hgONcJYeMddpvF+8V/RA3ED+GLAD 3BwjHaiTeUKutTYeQYz14wafnz3MLZ6szA4tG/L3aYovRZavdrAJuVz/eN/P8zAPppYbpcsEZSXd huyzlPw/W0sr9BxLJ3PHPQeP42G+QYnnoPM4Hik5gUc5dT9WegKPlw9txmGzLnGffmSY1aSbY5Y9 cnt+dJjVm5t0T3vsZY+97THX5utjj/3s+f42PcCmB9o0d99HhwyN4QkHg2MxNC3jbjPGpWqSU5Bs 5zNHTC2mwYVDnJEaOa+D/x02R0v/a9GT79mLc04OXGzJDLZfZxqAHjQQfek8DKY8jKTBmEj5nEOG wEtDcQENQzkNh48KuJMegXU0EvU0CltoNG6gMbidxmInjeccNolz/QQ8xmMzTTF1PYalAVOWrjMg 3j2Q9c/S0SA+j/i1cBvl8YmKH6DbKJ/PdJi2nsC2cCW68UPytLO68cdMm2t00owUNNvRf1LDoxoe t/0znfc7xLIr+bME27pHbOs+7DnosIzaXD6Ei/nxZjzJln1KLHtifj7X4B9Kq26NXe0xS8YfSYdu 0T3ssac99rLH3jZfrj32OY3ub/MNsOmB9jjodFuK94k9NdyF3Sz1btxvjsB+HEjEUwXrD1TE8TQb 3eh85JAXA2kuhtE8jOX6PJVKUUzzUUoLsIQWYiVdwK+jRaimMtTRYlxOS7jOLMUttAx30XK244Vc gZZjP12EA7SS6/eqJDsetO2o4X7bet3YC/LYNxRysJEK2DscOGhaOf6qmsxa351qsv0tJmvW8BQz HUh6dh20mV9rZcqRCVOGWRyNvz1pP6RLrKTz9FTHtEaz1SvnrvYZs18U7NlxaUnvtB9zu8WTP/H8 lBHp5mZ4nmOQlSZzzydeb/baFyalD7FXJnX3MzwvyuKUF8EMz8/ii38ujbU0mTncXnJ7/ItrHZTT a++pNdIbsoF/eSQRkaPkOUkVHI2VHIl+ZJGBPrSaI7EKK1hZBgVwD4XYGn4cphocp3WmReZYCrAt 4uJvo/gFLJF1gEZzmVacaxtojBRs9OE4HYv32RKDcSWN47k0fn0XWf2FaaXezJ9lmQXnkeTHQ8lU 3BA03jTEBJpopVruXJyS0dHEl/rVvdjheYmRX8fw8k5kM/abUnm/DHUMffo4fhvD7xpxq3x/AZme VxKMUz2/LxW79bPVPFRU+Qd5TLP6X7VUWioK5BWv7T31hrllDH9sRGHyI+pP1vP717L6z3FDMFMv x9RGfqQM4fT7Oj+/rlXUS4Tde+qjFiNMQyZfJsphVIeu3Er3oA1sgHpusjZhOm3GLG5vL+HxUroC 67lx20VbueXdxgGxFcfoBtMg08zk0pQoYU1mqyYJrhNNosms4Onc8E1hMygUYpRtmvtwDk0Vc5lm 2MhpbrDl/9L4YEoSPss2yGZNpYmBKk+j1yfx7krCH7C6AGwWpkeSiWNJXETTzGI4/f8AUEsHCGS/ nc0HGAAAnjEAAFBLAwQUAAgACACIvjQuAAAAAAAAAAAAAAAAIAAAAGRlL3RyYW50b3IvbWFpbC9D b25uZWN0aW9uLmNsYXNzjVbdWxTXGf+d3dmdYRkFFldTAriRBJeVQKKptqKEgtgQF6RgbcHaOuwO uGR3ZzM7q8HWmtokTRqbVpt+aNJqjM2m+XqiRjAxj+lN2zz2L+hVe9fcpZd92j61vzOzwIL0A5hz zvue97yfv/ccbv3rg5vw4368E+KQqkI1TA2TIUzhsIa0hmkNj2nIhJBFTg6WiryKx1XYKgohrEZK gyPnooYjUsdRKfWEhhnJPBbCKnwzhDi+JYfjUv+3q6j8hIYnQ/gOTkrOd0McntLwtJR5RsP3JPNZ yXxODt9X8byGUyG0SlU/wAsqfiglf6ThjIofCyh9I4ndAr4DvQKBlDlRnBIQ4wLBieLkpGmTmbSK OYfMAQEtbxXSTtrKcX9HOpd2ugX8sbb9Uo2VMgVqEumcOVTMTpj2PmMiQ044YSWNzH7DTku6zFSc w+mCQGMiZXY6tpFzLLsza6QznX1WLmcmpYUuSll5k5bWxRLTxhGjM2PkpjpHHTudm+oaGJdGQ/1P JM28lC5IPzNWgboDR+20w1mNHegdGHB9s00jtcBgGFVJz4yZct1ntNVTpjOQKzhGLsmjzbG2/+5Z VTJjFAo5I+sGeId3MlEZw5m07CzzRplIhcyCzzLCgpmjD5EVIpSOCxnWxIxjcg5mzNyUc5jMNL9p hmObSTN9hNrX0N0VfAjaZqGYcaQVx8qTNpJO0cjwZHoqZ9ky+LJfaatzYG+lX2KCHwGhFUxnl4cJ JeamXJta4Gg7kpkyBkKjVtFOmrvTsrg1i6nqkOp1bMU2HZvRKdCQTSdty0y5IOpgGSbTU0XbkJSK F3X8BD8VaEmZHeXcd8jcd0xvzpodi1oHsnlGoTy6ebB/ReHCisKj/Sp+puPnOKvjHF6iL/+5xAL1 KxSMRxa5I2yKdNas2Fy7vAa95Q66t9+2LTuasYwUudHkgpmoC6MocRLdqONl/IJw3BiN6fglzuu4 AAmBNh2vYL/M4V4dF/GqjhFc0vEAHtTxK7zGsh4Y7R/adVBFScfrUqgDnTq+AJZP9baiOn6NNwSg Ywse0tGHXTp6sG0+yqXlF6jrq/SQTZVS8aaOt+SJ2uVBSs96VVlb9cBIf9/+g9ElQnsnpqlp6bmZ gmNmvZ4bttnjtjMj0LpSD6wE65pFXp9MHw0zgUNuL973P5S4B6ijOmceXWz3pf3jeSz7x8jn3fZs /79c86rd5bVI2bP62ErWVQp4/mqO5R32TvV6ra7E2uRtzJuJd5XfKjqVjTpMcYeHTCPbVVHACjYN 5CWVYSmrCsWJQtnC2hhvv5UyWlGbfYe9uzIwkzYznLVRx0g+NmjklXv4mNwPIIAGiTCufBKE7ry5 TBNd7vxZd9YhZOdz/BypHvIJQayOz0HE6/Dkh9o1+C678p+XfL6koGYFO/nsdWB7WYPc6cIOQBHc 6SbnYfIUzq3k9Lj6FzmKBP4yDuG+7FQ/dpOqwhfxSNm7P3JP2h8J+69D+R30cGBPOJgooSqs7glr ifh1VM0i9BtUvzt4A6vGbmD12BxqwrWzqNvELxzm0D6L+lmskWSEwyzWzmHdR7SwDhv4q9OCjLQZ Ksc8NDzOnNqoQxFrcIRSxyh13I08Stlq+jeAR90M7MIernjbMdMJDDJnb5PfQqk6yJ918KmI84/r DQtrobopHMJeHmCYvjDLF6TIB/T5rsH2m92cP3MOzfH30HAW1Vdwd7hxFk3xK2j2B2axvoQz/q1K Cc9ElK2BEoJPBUQk0HQRkfZIYEtt6Dx0d7Hqwu1PPBUtVDGfm6jMTUSJUNE9Xjqk6nbJiSgpal8w Q51K6iIaysqYyUhAOUQDF8omlUNblYjS9MrtYxIwXhqHUM/xeUZ0iqk8jRqcYWpfZNjnCNSXCM6X CcOLBMirTOlFXpuvYQZv4mleZC/gMt7AFSbxGq5S9n1cd9Pe7WXHA5y7GnbTHsB7+BJT76Oly9T0 kPtv3ymMcqXwO4F9HANuUd5BiH4oKqrdKpyWEI4vox9AYJGWjG0IVjAkZ/sdnJE7ODN3cN6+g3N1 uan3l/my0Bj8voz9ZaQcZyYC3LkV3pDw7yzhfNx/DS0l+OMstI9fizKLe7ubfBewNj6L+0oIbFdu oHUsvHEOsY+azmH1dbS53BJ2zp/ZIssoKxwsIcYVC6wp1L4+PiY1HqIJKSbFb7pCwdLt02U8yTa7 gfiY3PRLqTls8mCVaDx7O+nhr7ECf+3l3vSAt+ldRtaCjaxFK5O7k1fHfEPaaOT4J1J/Zsx/YY0/ 4RX0KWrxV1bybzz1d577B0/+E+24ja0iiO1Cw05RhR4R4ktbjX5Rj2FxF8ZFMwyxHkkRxaRoRV5s JDo+xUnRjkvU/broxMfiQRdtj7gXwa0y2vz4Pb5SRttv8VVerT5aNzDmoq2dEuM4wEr1uqtBroaJ yK/hIFcSd3/gNaHB79VWFra2klhAIDHAa6GVChcZ4D1dSfUsFdZps3K7fwk1Pg8wD2+TS8kTS2RP Lt28VOnhx5VEJSi/jm+Ub+lupsTHORi/+xoaFt+OkOSKLgTEDjexaz2phTYOui8VY8Eh3vyerk6X 5nsmgfPWgqqgZIpdFc9PoKxGYy3mH7M2Oid/6gIfamP+2lX7xojlfVfRLH0Si4r4IgpMuMqT/wZQ SwcIXLz637sHAAAuDgAAUEsDBBQACAAIAIi+NC4AAAAAAAAAAAAAAAAeAAAAZGUvdHJhbnRvci9t YWlsL0VudmVsb3BlLmNsYXNzfVTfcxNVFP5ussnuxoXStCmUUkW0kCaUaNUqBQptaSUlbaEtQVr8 sUkucXGbrZtNAV9lfBOfdMZHZ3R44UEcW2Z0htFXX/RP8A9w/BPUc2826ZJufejee8/9zne/c87X /PbPT08RxQh4Ar24oKMHkyqmEhSTh2kNFxOYwaw4vK3hkjjkxfWchssaCmI7Lz4L4rOo4opYr6pY VrHCoK7zet2scob+QoXnPNeseY6bWzctOzffvDrDEK/zWoW7DMnCbXPTzNlmrZpb9lyrVqXbhMvL 1obFa169jWh4RFDkZSIT+WetmuVNMAym93xldbjIoEw7FdLSVbBqfKGxXuLuilmyuaB1yqZdNF1L nP2g4n1o0ZOHd3HO1Da57WwI6ZrZ8Jxblm0zsFU6es6sxe0KpfWshRXDLPrLE7BcbgH10s4+UeXe fKtlA+nh/2maXufest+3VHr3W6Je1axUXMogdHUH3Uu8IdIMAi+1Wr0HJyk36N0ArC+dD387ZtFr d6mkmbtlvuFZTq2u4hpDdzWQP+00BEk0LZmrzzCn0vlQnV0uX3c2eQCpEJJeTCw7DbfMZy0xvH2t IZ0SFAYGUDSQQh/DgU4HGejHYWKZdZ11FdcNvIMbBg7iEENkxTGwijUDN/EuHaenSexUuWzgPZw2 8D4+MGCi1CINCDVQxjkVQwyH9rLPM1mLpdskhiG9E5p0XfNeXnRxseEt3pqiXlXq7W7KrlHVB/ew CMN+6uclbtLMi6bdoMDxsJGGtThJmZO2HUgmC50Iyw41eYKcNGPz9d0+alYp/aHUrU94004+dlLa aTdaDlfnO6AOZ/iwtjMCdNqyZ5Y/mjc38CL9gPUC9OMUETagXUSMWK40flp10L8cjtB3EGB/ElKn 6BeZJ2CZ7BYimZ8RvfEEyhZiR77GvUw2Gd+GugUtm9S3kViIjikP0Z35EbGRlDK6jefuKyyljDz9 5t+/s0mDEOOx6Fj8IZIC0h9LxSUmzlLx/hiB/som9wmQGh3TWiA1pUmQxlJavypAj2UJz9N3Dkn6 5qHQTsdlKm6eylnAMVzBMK4ihyWM03oR11BAkU7XybRFWOTnj7GGO2TpT2l9QC5+gZhuNsvFUWoV 5E60icndMbxEbRoGx8sYovdPooTjOEFvFzCFNMViWMR5GYsT+yBhh6DCo8aKmIYK8XxOkRxiKnpU zDAVS4L8XGdgCWog4AfNsOAd6B1B/+KzvS4eIOpf0IEhg2xz2iSLyVJj1PbI99IUosdxGeSyP0YT 4PeHUQ9G/OQJQkcEWthEe9zOTshog3I2JUNfE9XucBynaGLi4RxeCRGidQq5HyrkVYz6yXO+EGme LBlHrNvYr1QedYj6kkbyVUBUsi0q2Rb1Gl6nO8FboJFHRa7gOzmwja7OIr8l83wn+Y42kW2+BN4g AzC5E8wRjNFeocib9PcWTvvaR/3CNV/zo47afwjUrrVrH8cZX+MFv3ZD5JPEA7+gu7N/vwYqNtoK DV9hUNdZ8mWTd9Ln1X3eZGfpv5OcPwLEeptYDyGekNnn/wNQSwcIqeQLxoUEAAB4CQAAUEsDBBQA CAAIAIi+NC4AAAAAAAAAAAAAAAAgAAAAZGUvdHJhbnRvci9tYWlsL0ltYXBDbGllbnQuY2xhc3Od V3twVGcV/9193t1sCCwkuJBAqG1ZdgOrqEhJoQ1hA6sJadmERyyVm81NWLrZDfugvFqg0lptkdYH FtBSoBqrVUHpgsUWbGur1VpnfExn1D+qf+gM4+iMdfyv+Dv33t08dsOMzmS/e+455zvnfOf8zrlf 3nz/xZdhx2L82ovbsMuD5bhfqN1eUns8pPZ6sQ/7VTwgnAdVHHDjoBdeHJLlIRWfkedhFQ+reMSN z4r2HhWPqvicis+L7DEVjwv3iCxf8OIonpDlSVm+KMuXvPgyviLmj8nrV2V5SpbjKk6oOOnFDHxN xddVPK3ilBcRPKPitDzPyHJWVJ8V6htufFOeh1SMqviWiudUfFvFd1Q8r+K7bnzPje8r8CUyw8Na eqA9U0jnFSgxBa7bk+lkfpUCe3DRRgWO9syArqCuM5nW1xeG+/Vsj9afIsffmUloqY1aNinvFtOR 357MKWjsHNAj+ayWzmeykWEtmYrEhrWR9lRST+dbFcwPVsjbM+m0nsgnM+lW8epNlN+rWRunTZ+Z EZ1arcHOHdouLZLS0kOReD6bTA+1xvoqeZUc45jbM7m8HKpCStlIJkuZPZdLMUV9ZBRyelb4Wo6H VXju+RUhdnGJ7k7oI1aU3vJLzo1zCpyJVCbHnW59t54o5EndXeUAVTgVjvRcThvSWxdVC91t1VeB R8sOFYaZf0bsHjb3KAhMaY5AyOq5QkoOnteGpLT68AhPK7+dfE3pg5Q5s8mh7XzWDel5a6uFJcJH 0NRfGByUZDlzI1qCHqdl9YSe3KV3lUJoqgRDKYaYUZlccq8u+TLNujKJvC6H8I55JESCsUU3OIoz mR7Qd5t71unagJ6lgdqsPpwZF4gjaPiroU5vOrmzoMeYtnoxXC2x1Iobgck2HtQbzxSyCb0jKW1Q Nwb3JbLZh9vR7sMKtPpwHj/wIY6VPqxB1I0f+tCBC9zf3nZX2+pYZ6xniw896GXQnd1rY+sVNEx2 v9pIqdikkRdQZEGafbiIS8xOPNoZbe/h5tj61d2bmd0b4pJ67Z3d8Sg30ll3LzcqbWLzRwrgw4u4 7MOPccmNl3x4GVdkycly1Yef4BU3XvXhNWHrGPThp3jdhzfQLzIByOq2Nc2EwfruZgn1sgTX09bT G1cw3QiuOdgVjcfb1kbji+jW48PPZJut1uvDz/GmD78Qy7/EWz78ClcUzJ6ivDxDR7SnfR0h3hzc 0NG+fOlS2pteopesi7atiW4gyxnv6d7Aowaawx2dbWvjS+Kxzuj6nubgPWuYtJ7oGuq4moO9MSGm lffHY31RMuZMPdEUzK0Qpvszu0vSmUYBk5lIrHtc5j3WiNMHjF7pq+KifdwQnF11vAlgXdoIByCt tFRRqQSviR5CWM1nTI6CWcGqIJ9bDfzl/Y6c4bW+mleG5bYanbWYLKfQaMjuwSm2s5+cwZjRV55c oT9n7WoQXrVAZ4zxYum8PiQDRx3Rsjk9JgXw5vJaNp/blMxvn8Ihs+9K6ekhUagtDwn55vE9N/Gd UVQ/ca02MDBe0aXvLGip3CSX3f07WFPDZQ03rM4M7DHV1XheS9zXpY1gAT//twFgN8jMgPSiIu3O dRXfVpLPBkVNSLkIJWR/AbbzfLXhDq7TeIUBDTixFHJ7udPaTnW0YbVhltPIMrWWu2yGqfBUpu6w TN1pmGow1S1TQnGM0ZjCMSbGaFQZhgNuyhKhIuzH4ebDEboAZ7jxBDwzcHQUjsamIlwhv1vhCdRN Ib/nMrxbLqIm4CjC56/lEnByKWKapVDnn25Qo6hb4RJjRfgDrivn6Xg+x+lG3ovsRtC3wsO1g4F1 UtKDIHoRozyOTVy34NP4FPqx1TjMOjPM8mES5MSMXCXwCSbeZlCfpCW7QXVR6jCo9aSc2My0dOMu uPA2ubvIqYHLjeVuHFUULvwjf04Fz+bGPnnOrZDYTYnCUCeL+JzByCvt382fi7FuoFyRT4tZBqQY q5xlgVmG+pB/ZindsyzCzKNU3ExeA48AbGNaNEynswBHezMGx4FogZWst43ac5pKXMsnRWGTL5gZ he2fRlaghJUVDqvI/nqWNrTlAmx9jm1EXBENRslZ7RVOiakEBoFAmL+WN6D6Z4+ioWRAtFvMHaX1 A+ZhAitco3gs4BqvGS5hylCcYzsFLeCaHixi7jI3iUX1bse2IhqXqfVuyqL1fD6LmQGX8OvVIppW OEaxZPHrCFF7n2zzkHig3iObvKHF1PRQ00vNS5h3EfPLoQRccobm49d3mtSCIm4Srv+D5J5ALamb RY7ay5ixJeC6iFuuBBznyvXYiHquBb7dj4XYzcrsRZL/OqSwH0fwAI7hQZzFQTyHQziHh3AVh/lF fhhv4RG8g0dxDY/jPeq/T8B48YQyD08qQf6HIfUcMctSAj+pjSb4SW0iZTOozWwZO+zc1WeAf6Hi YAMJ+JN4BfeQcjGKXjZUK1Fzlg10LymVEcxjq7WyGd/BTMbdylYRzLxL2ZoSiI2/iHOsJbz0XCkz m8IrZAru8eISIW1wFZ6qIkVge23qfe9NKWK6phQFpzY4sR81tpHZj/1Mn8yRxpD/Vv9CacDO8PRm wmlluFEAeBPB8/yk4fsUU/IM7ZwxStZs7rdK5oWfk0hKNoOlHDDm1cQu5L3MGsmvkeui7Ix9VQmc Dpm1C5zbljlHcW/AIQ1iQNLhDxqQDIebHANWGwlZxCLpo5DMZkepmcKjqA3La8umw3albLreaRjf JtZpcHYRi49ff3p0rDMmaBgGlmyqdzaevv7u2DDq4BkATgleRGtwGbPwEmbjVYQJ8Thvmn28MW7l NXGQt8QsZfvxGxzAbwn73xHiv8dJvp8m/CRzq8zTlyf9GQPYikENGZmz4RS2k7LT1zEjrw56PEKY txLsAt2DBPhsC54RY/7K/nAFJ17B2VrByVZwDlRwTlZwJiJrB+6zkDXMCAUZCy8jwnJ9qCvk/7BV ubmCrAb/UrNgLTL1W85NAtkf2JN/xC340ziQLSynaiGbrpXuVH5OJWm2SWEM/w9hfORGYcho+DPD +Mv/FUYaGSuMjQxDvtzzQv6PTnT/sXFXirFrjtfQ/iua8LdxV5x5Zc/zLM8T/Y1gp+VvP/3JraCl 4rjLxvx1tRitvqqlyWj1yWe/Ru9/x834hxFByLRXjqDFiqAJdQYybdRUjY63T4oqi5wV1QErqkhF VB+fMqoqA+hfdPpvuvvPuMAi5cAi5cD85cBqqgaWN+wW/gtQSwcIVm2EMH4JAABkEwAAUEsDBBQA CAAIAIi+NC4AAAAAAAAAAAAAAAAhAAAAZGUvdHJhbnRvci9tYWlsL0luYm94Q2xpZW50LmNsYXNz jVRbU9NQEP7ShKYNKSiIF64iXkoLVPCKRS4WHDtT4KHKA29peizBclKTlGH8Tb4wo+j44Kszzuij P8dxz2ktpQGGl7O73+7Z/Xb3JD//fvsOFdNYMxDHQwOP8DiOGJ4YdDwV5rw4nokjq2NBx3MFhu1y zuzAcbmC4UKZZQLP4oHrZfYsp5rJtbxZBV1lVqpXFCjbCqILDneCRQVjyfMuTW4p0HJumSnoLTic bdT3Ssx7bZWqhPQVXNuqblmeI+wmqAU7jq9gJJQ1z0vuQa7qMB4QF82tMWI8nyzsWvtWpmrxSqYY eA6vZC+CSF47rh8IFiEv+eo+80jULJ/IGGsHNquJhnwdizqWdCwryJ5SO7990epddtX1qV81Kax4 cw2sLBEacG+FBevM960Ky7l1Hkg8T1yOcVpYMj8ZGlTTm23EvmJWmXnURDcZb7jzvs7yVGRA3Dyl cZ2iis4HsQiKoHoJj+25+6xVUsBEOOazYLXxHLTktkQqLcQounXPZi8dsdBLbYubERVN9GBcx4qJ F8iZMNBtYgBjJm5hwkQG903MYkLB0DkvgNIek98s7dLoFPQfQ62F/UcdN5PfbENHQlOjo80/ePaj bowyz/3A4jY1OJoM7+DEdxMrBpb9bt2qaeP0JcYBRKCJvqVmIkEyQUgPekGNkfWW8AjJvtQXKOkf 0L8iUkilP0M9JFTFZeGjG8AinUuUY5mwFcKAq42b6McVQGqikoJV0ntImojoiOn0EwBZAzJe1NxC VGY0UmlVnZo+gnYo+Ylahsy5Qdw3ZY1UI7JVw8A1XKdsQrtBWkRqg6SpGCI9RnIYIxjVRMUxiuxE b2K8iUbpNmFk0XtozmOOpMgeS32CeoSujy1mUYlzycpsxDRYUc7buHMyJ2F3cS+EJU/BJqnHTiyN qRA2jZkQb3rCTd4rzT3GBe+hI0Q7R/qL6P5uW1u8NdK4fBii7dmzxqB3juFPeAykz8moB/8AUEsH CC2ZXejiAgAAHwYAAFBLAwQUAAgACACJvjQuAAAAAAAAAAAAAAAAIwAAAGRlL3RyYW50b3IvbWFp bC9NYWlsRXhjZXB0aW9uLmNsYXNzfVBNSwMxFJy3rru6VlsrehPxoPhBzQ+o9CJ6Wr1Uek+3YY3s JpJNxb/lSfDgD+iPEt9GUUQwgXnvTebNQBbvr29YwgD9jEs3RS/FJiE510b7EWH7KL+Xj1JU0pRi 7J025fB4Qogv7EwRurk26mZeT5W7ldOKmX5uC1lNpNPt/EXG/k43hL18poR30njrRC11Ja4ZLp8K 9eC1NUNCWqumkWXw+ZNLyMZ27gp1pUPSr+WzVt5BjGXC7r8xhK0f628W+4j4B9pDfNmHMeFpxHzE NTk5fQE9cxchZcwCe8C6Q6xwt/Opwiq/IHRr6ASv9bCz8QFQSwcIeaBERPIAAABrAQAAUEsDBBQA CAAIAIm+NC4AAAAAAAAAAAAAAAAdAAAAZGUvdHJhbnRvci9tYWlsL01lc3NhZ2UuY2xhc3OtWQt4 HNV1/u/s7M5qNXqttcKyJFu2bFlaSX6BBcjGxMgvyVrbRIodO03tsXYkrb3alfdhW05bTEswwYQ8 WtoSWsBALOK4saFhUSAkgTg0oYU0gSaEJJBAE5w2Tdsk0DzauOfcGc2OVmvXaetPe+fOueeee173 P/eOn/vNE5+DBx0iHEAfzmg4G4CCMyXYjEe4edSPv2bKpzU8FoAfZ/zI8fNxbiYDxPEZbp7w40l+ ftaPp/z4nB+f9+MLfjwdwDP4YgDn8CUefVbD3wRQiy+zxK9oeI6Jf8vN33HzfAD1eIF7X+Xe33Pv a9x8nZsXuXmJZ/4DN9/g5pvcvOzHt3jsFW6+zc13ePp3uXmVm9e4+V4A38frfrzBL//oxw/8+CFr 96Yf53nOj/z4Jz/+mXX9MTf/4sdP/PhXNvPfeMq/c/PTAH6GnwfwFt7W8B8BbMAZbn4RwC/xK17g 1xr+S8NvBLzxWMJMCwT79hkHjaXZTCy+dLs5mEmmVgkERkwjaqb6Y0dMAdEj4FsdS8QyawQ8La3b BdTuZJRGKvpIxpbs6F4zNWDsjZssLTloxLcbqRi/20Q1MxKjlWr7oubSTMpI0BpLRw1aL2Km08aw SQte22KpETcSw0v7M6lYYnjV5VCkMkOp5KhjiHtUQMkkBbR0du8+Mo1MITXKhs3MJmkeay8Qaulp LTbVG0tEzcPki/WHB82xTCyZmDZ5izFKk8ud9+1GPDuN0GNNryliWU8ruVRNSAmBdMZIZWzmknjy 0JRoEWPdiphMc5uL0YsZcc1l+bXoVE/UHCKvkj1r43GXjeSFxcWWf08xIb6Umc7GyfOzig6LfeTS 9PR41LT0XCTOcTkenBa/7mQ2kZFpSW4pM6JRt6jKWCJtpqZJr0yZo8mDppukUgKQ+PJ0QSiLWVlc M+9Ba0YpqXZDMjpuyS1Nu98qXWO20qWkbp6h3FLWRbBUzROqSETEGByhl7XRKHmWQqEZUz0xRr8D Fte6WHosbow7XP5YIjOQJI2le4vnuy9uJoYzI5am3UYimYjRVl5nZGjl1S0ulOg2iDNqpFa5aAOx UXNXMmEWTyX/oD1FoLqYIOLIkIAjSbayuphY2iejyURmhLcG2xM1xu2uOm6yXK8c5qw1xskrh0xz v+ypI8ksDftGY4ksW+JLm4PJRJQ6yaEhCpDlL0vT9XFz1ExkSGhLkdB3F89wyso0SSlJm2NGyiBo oyh0M+aZoxQQD1lIyh3IJnlxsYtUM61VLCyxxOSxxHq3E7CCCO80EtHkqEUm37QU9y8x9llw7nAU AHo/uWHQ3BBjPNZt3F3CjDpuxDsp6IWTdESwRcdWbBOAjgukPWoK174hOzRksns3EAR3NepCCEUX HpzScRj7dLwf+8lOe7mOnnVdjat1fAKnSNgS+lE9UQeSXY3kvn4Lornv45zratSEqguv8GlC04Vf lOj4IO6k0OR1WJtKGeMSObdmM1uHbqBdFU07aM2GvU8XAVE6ZZ1LcR2/i906JrBfx8PUCJ113ks0 USbKdURh6hhEnHv7uEcDFTiki0pRpYsgN7PwPqovZDTSyOg4QovhZmapFiFuanRxBY7rYjZOaaKW vbKbzF1G/3TcgUMCC3uNxAZzb8RIrR1LRYzx3myiNxtfmx3uN8e2Dma2JA+uMwcFZvdnE5FkYiBr 7jCjAyPZDalYv5Ehoi7miBCp0E4q3I7j5E9ynujSRR1rUS8aKPEaN0YG2uxnB4dnri7miUZWbbcm 5utigWjSxELSTiyalgRW3umiGYc0sVgXLWyUB8c1EMRccZFCPs3RW+2aGyCEWj+V89MKmsUhEdRn jI2ZvC3bL6uyWXkncSM5tTeCM4HFQuSeBJXYxKAsLa3F4Sc4E3JIcQZSc8iQ9Wv6VBculdj7eW1m xlHCto+0yCT7uLB3G2mGIPNA1oinL+IMggg1Lc9dOsHT+rzwmiLcsnBVWIXDxVphVQ4XRZOHma1D VrWjUunlMtDDuJXdm7Y9qNKTDlJV+WV6EhlzmDe4Z5ihUpeAdGirjZwV2bS5zhiPx4ZHMuwRWYZJ /7qW7kuEzDc4QhmfsTTpnr43x9MEm6TBYDaVIs1ZaCQWj/PpkUT3EkbmmfuSrHNNS2/xcqYlzMMU +sy0ORFD1ghjL9eQ/owxuD9ijGE+na77ADqpKwx6ske4R895BHoEj9T209u76R5CYIi54cchwk9C 2fk4PI9BDVPjDX8aatCXg/aInD9AbQ281A5BpZkV2I1qDKMBI3gXGFGlJGzHDnryKu+2VhFPET/P e+OSq7Q9iwgN+mmwJBjIobSNfjnoOZTtaJtEeZfqjFbQyCQqqQ1WUVOrci+YZ5/AgmK8Lo72Z1Hn sMwient+rMM9Vk30jvyYQw9JsTWTuGISs/Pj7CqPdNUachAISPOuypCrDlJoDuFa/D6uxx9gP24l nPsA7qT2JBWDU9R7Bh/B6/iodOlVlttsl3JvJ3ZJN7+B91BPkb3foZ6H5LXivdRTRStRe2nd/VA1 bNZQb/0R9fYZlJMzKM/MoAiuLLQWJ8w4rcSrzq+7B6V1FDvvCehPonZn3eOY83mOZV0OdV9A/VnH EeX0BO6l/LgPITwgDauxhDiGzcceyk4hVecxHQopwYaGnJ5BP5WUqaXfXkeh62SOAyVhWrhhEnPP Osnqk556zLVgibNgibXgNKGDFxU6r1Doly9bKJVde6+9Sdw+eq6kvG7cUt+pcpaGKHXnd3lrvc8i WOulAcq1BXfDF1JP36KKkCo9fOHbymnHnXOhUfsKZcZ3UIrvYhZexUK8hsX0fiVlw7tk7smFHMVW 0pa18mYlbdhtpIgXy2jbct740YEY0VSSVC0zyCvDcA2NlcJr5YLgHxEXw+ciWOkRLmRio/fZRq+y 80ULt3lyaDpd4Me3XH7UHHU1W10Oyf6ZgkQOCwsCIrz/o6C4Legm4lHpOStMcVi0pkG5H972s+GG HJrzORtkFlEDH511SkUtykS9XCBsTXUWmOU4dhZG5Yb0oUy60yOdGKSxMteGstyTQNJGxhaSx6Ea sEExYik1gVC71CjH9jaoe8h1rOmFHxNMLX4K9V2qp9M7gepaNeRtD3mtLdd/i1fQK3GcuPCjWjVv zRIKJB1P4RfLUC6Wo0qswBxxJZqo3yI6sVxcjavFNVhPzxvFKlcKDTiWDtiW+qmucEVRaF9vsCzF cjRhDAfIlqvQiBTRvA4IVeWtV9j6poL3q6cyit81/CfTNhWhCT6T2iE8Tmsypsy7KAi1075teaQg nJugix6ERB/miog0stES4xg5z97A3MtyOKUZ9RKQPAxDVsaH3C+CMP2QrdhSmWuQRc1bkOtip6tK ep0qedjZKrwFOX1nswFtLCGH1vBOeu5S9zzmlsdf4CCGyJxhV9rPdsyYLZVnVcYdn91t+6zV8dlD RXxmrSeXy3tPFn2RoeWy5L3D5L1xSpsjLg+2Oku3Oh5s/S08SDcNW83b7G3ecqn6Era0jBbR8lbS 8hhpeTsaxHEsFne4HNTiaNlyGeVG4PeoSlta/YxCwxt/Rx4zmukE0Tt1GuCTSrBt+iliAm3EsiDc cFGe9gn4eZd35I1YQPsL4l7CnfsId+5HhTiBJeLjWCFO0s78BLaL0y4c2uEYtMPBoR10rLBwaJsL h1aQ/CUFOHRjwfv2GTh1ExVEywFHp4clhyWFYeFQ1e1hpCpS/cUkheUzFJbP/h/CcdTJ5Y+S9Zx2 zRfVpj2vzgwY+Arp8hzp8jwWiRdcSdzs6NPsJHHzb5HENzswcC1x8uwKVoXgmJWJqtFCQHjFBQgV DiD8oQMIG+1TiBTTxqWALHWLsXDgTcL18y6/Vjh2VDg48EeX8N0MHMj7rrXQd2+R794m3/2SfPer /0ff3eIAwM12pi26jEwLF6in+KBTvoSUABYqpS6XLHLUW3QZqVbCH3lsdX5tu2ssXLk6h6Wrw5Vr 6njpZdfVKfehqp4aPUyU+hyWnw1Xtlg8rS6eIPOUhT2EW8tzWEFMCyymBZdiym+gMIUZSi00ZQ6q lDqyrAFtylysVOahR5mPbcoC7FKakFAWuQIyRjeLXeATUAzHZECqaDPfxmc/aXsTcS3kGNQLNrkn 303kuyV0NSniiCL6X44jZvAUcWihH4K+QkdcT454BzliLTmimxyxjhyxHpuUjdiqbMJOpQejyub/ vSM25buj+W6Av0bZjojZjmiaM4krI1PXwasI1VdaWk8BfKQ9f0iVKKgk4VXobq4ccOnXRHi9TaZm E+6Q+nnpiD8mMbyEvw9ayyofJHo5bZW6YGckePWWMOHKNZ1q2MsPb9jPD1+4UqOnGu3UwpWlTPGH K3V+loQry/gZsNXt8IW0EfnbY6kcvJaakM87iS5+W8VW+ELeEfmb4mFqSNVcPCH/1IzV/FYy7S1g v5Erukrpcm8QhF1X5Tkf79Spt+ZuYtGryiv3dOoh/R4Egtd3lU1AD76jqyykZzp1W9XaUr7gl+Vs 7rgtVL6MuVeoLc2nyhY6jkO5CR7lKHzK+1Gm3Ipq5RjqlNuwSPkAOpTbKW2O4zrlw8gp9+IJyrpz VNRfVB7Ey8pDeE2ZwBvKwzivfFLMVj4lw3Wn5X58CB/maFHvIwSmggrsbPyxVXJFCH8i71Rlohx3 yQNdNUHcn/KBGHWUSH9GPR9h0Nv4c+ppdPP6CR3MtlHRX4kf4mPUK6G756u4h3oB5OjqyIlQinNk 1V8QTac73mpZ6stk8h6mFV5EmYZnNJyzK7f1z67hr11q8DzKLzIoYZns0ouPS2j4S7rSW6kZIS3o 2IJHpy4xdugIvEtpS6yl8Gym/so1Hr7zvjekdno9nb4JNIT55nJD5QI654R8H4NGo3Sv8clrTMMD CFrjdfdf+BYNX3iJLstMYGDo0mop1VfejZJ27mghOrN2qiG14cSFB6euSNYi1bXekK895Ju6IlGQ fFNXJG8+Y7YT/kN5Gn7li5Ql59CofAlNyvNoVl5AWPkqZczXsEz5OjYqL6KX+ruVbyCufBMZ5WUc UV7BUeK9VfkePqR8H3cpr+NBep5RfiAzZ4iBC4/iPglE3LsfJ+RV6hQekFepRsqkB+VVqony65jM nDDpdJvMnA7y8kP4OGVOnG7oJ0mKRlzWlctLMxvlQc8nM+JpypZmvpBzEBUJXsugOa+SsK6QsH46 gf42FrL0FhJ2FxKOwO8iWFlydLomd7nm2Ne6kzNJJfx/GDbYDtungVC4sourRR3f1sVZq0AUXNeV n1Jp+DmdAN5CufILV/UPya8aXALKrRIgPcXnrnKu+fXWog87i75kI3zEWvS6elrUH+6bQGm4nktV dx/h1wpuVqoPoYU/bMgkntsmSdGpnG5Tp96X97XllZVnfE8JNE8pdI+OKk8Faj0hzPXMwfWeOmz2 zHXVh4itfLn8YMinOY3u3cec+rWYuKpkpZKHrlrZtY3a7H4p4f+lsi3cJK8PlBr2Tp3EusqFk1g/ 9UH1SWwg8sYcNk2ih0d6LZQ9Kw9rzgnWE6beJ3G6yO1XLfhA41ld9Pb7V5LrU/8NUEsHCIOlbuM8 EAAAEiMAAFBLAwQUAAgACACJvjQuAAAAAAAAAAAAAAAAIQAAAGRlL3RyYW50b3IvbWFpbC9NaW1l RGVjb2Rlci5jbGFzc41Xe3hbZRn/fclJTpKetWm7FNqmWzd2SRNKYZcK7bqxlg27tQzYKHQTaZqc thlpUtIT2CYXkaGA3HQ6GDdbNilIlU1pOlcYExTkIgqCiCIoXgD/4VHURx8eme/7ndM07bLhH/m+ 93vv33s7X1745NBh2FGLdzxoxvUefAk3eFCJnR4sxY1uWr7Mx6+ouMmFmz1QcYsLX1VxqwcFzF6A 23i5nQXvYPKdLnyN968zZhcv32At33RhN6u8w4XLXLiLwV0q7mbd1zN9D2PuUXGvB3NxH6Pvd2Ed Ux5w4Vu8D7kwzPuDvOxVsc+DGtyn4tsehNiTpXiIlxFeHmbcIwx9h/U9qmKUD99lx77Hy2O87Ofl AC/f5+UHKh53YYyvk3Fh3INGHGSpH7KyQyqeEHDEYwl9UKCkbWv4ynBd2ojF6zr0iJFMNRKxW++N JQREq4BdT0QFFGP7gJ7ljocTvXUbjVQs0UvcSiLcTzSXnogko4Qi+YFwyiDlzhWxRMxYKeAPtEX1 OiMVTpCBuv4wGWvXBwfDvXpjTQdpaElGSUNRG/l0Xrq/W09tCnfHpb1kJBzvCKdifLaQitEXI+VV x6qM9evn6OSEzpdQ+00LAuXHNS4wP49nOWpaW9k/J91HTxhkmu8jcFLg2KiZnIIcEwYHI673kwgd S7fkC5qIEVN3Mp2IhlPb6biVHO7VDY6AgC/QWpNPyBFLRPVtAl7ibE5GtzN3C+kgg/ZADSWrIIcg 4FmzLaIPGLFkgtzQLFLzdoPzrgRqtjSTWHeSDnNNY7FkHVNXp1Lh7RvSxkDaIMt6uL/RlD6fkmpZ U62jQDW7+imJIOZNsnxmB/JeixnOkzXE/q/JltEsOplMJnVR4FjpvArFgEBhVrgjHE+TtONKc3dG pWccghaOmYjQr0VgWR7tnxIXzrg9rlOn2ImfAr4xmU5F9LUxLlNvThROYz0a2vGkisMansIRDT+C ruESdGpowTkansYzJDPTA3KtWsOP8RMC3AJlM+nN6Z4ePaXhWTyn4acY0DAIQ8PzoAhokWTCoBqs 5d7V8AJe1HAlU1/CzzR8FnR3T386bsS4W+sEbLW1kx7kFLaGNnYvjG6B4inzraS6ly2342UNP8cv NKxjjeVZo1QQg+Rb7eRY0LCeGaBhDdZqOBdrBQJTCmV0W7m+KcQbepq5NQazBUztfsJUaOhBt4Zt uFpDlAP7CmIa4gy9CkpG5QlKlO/QoeGXeE3D6/gVL6TqDQ7mr1nBm/iNQMWUpxdSC5B0jm8nt8bj em84Xt3e2r6mOtIXToUjhp6qXsyJ+S2lbjHbeIv9267hd3hZxaXTkr2heysFW3YxldRJxxlXNDGs ETGY00vTR7cyGNtBjG5r/qw2jpkmpi1i9QwaPKYvjhl9zJSntzZTt4QHBuQX4NT/q/nMeiTlLiM5 WcEFRrIteZWeagkPcvvpV6TD8cEZFi2n2GJxtnHXZGdoII/xlpq8g1UJyEHsCUejlvxxTHVIz7LV RC7HEoY1K1Q5aDf0mOqoat2D6e5B6z5lgdb841khoJ9uSBOhl2Pq5ErgDLASmjCVNHCOH7G8GSAn HVelYgbnfqMRjlzeHh7APPqUNwP0obfx7CDIxj0l93Otndpb7uusfb21t0l+LwQV5Hm0bqDTBVCI AviC4xDBUAY2Oy8Z2MehHJBi59NaSK8r4FZivg2zcTuJAWWmIC7ERkBCm3ARqbVxT1nqLyMJhfYi U/3jcPir8ijeTUx3EXy3VBw0RbKKi3AxQUJCfFebhPi2doJpjJrG7G+SnAcQPcHQGBwhfwbOI1Ab lBHRvNMmRtCQRTnKHSWuDNz3YBZBHoL2YN4ECjrHoZUrGcbSkkFhg0KS/qrho8+VKwdRlIFXyhZn ULIHzzCu1Nt4ELMbnMFyp30J0cfgU+rVEdwbfBy+kjKpur/c6VOXHMRJRC85WcputqyVlLM1k1xh 2XQFJ1BJRP8Yqvz17hEsCPrc45hT7pLaSklz1QTmdjKyOoN5O93C5yYf3xrB/FxL86WlouCk+jGc slMVPrXceXj4aGQEZXSTBZJHC8qrjGGhv+pBeHNCB7VkUYNSrpQsYsZPDgXJqcXBqjEEOId2mcNb MJ/WETjwGOVlP0pwgIrhEE7GBFGeQD2epNo7TDk6RCXyPD6PF9FHM9egaXsdDdsbaSzuw7s4gveI 8j7N7w/wDv6KDwn+GB+JQvxDVOANEaBpukQI0SgUcbZwiHZRIC7AfrFFlIouMVvowifrZ4DevlQF k/VDEHeKkJBVPwSZ9VMkOrCZ+kMhT2uxhSAH+feR7B0HeXgAn8OlcNIfgL2EX0t9dwRnUlm3woWX qVK7COfG26RxC3VWCRwqlqqoFEIlVlAIZiDq4cxBmLgNM5k2zUTcCNd0KRUT3A+vwHMsnjamfXgC 2t9PQPs4vy3KQH581XHwgWNvKhrz4Nrz4C6YGQAbP0KsmXI2nXgEaNQHjkqzUvdnB4oTplNTE0rL DhINEUoXVRG/Eyxty4iHr+0hbQH6LY6OztC1WOrSTC5Ll+A3B3GxhhvkGAJClffCW5lVMwxtAjWd leMIPsWeMrKya8pd+9T8E2egWCxBhVie43Yo63bIcvtti1YMG0WH3anIQr30U4inhn59iFmX203c PF8XTSBEA+XUNnvTCA0Eau/a0EGcxrMtmEHd8NEPaeifPuVVGdU+PYzhEmswS6xFGe3zRKv0rtrU aHnnwhxsxeVkzwO/7BCb9NNP+yzYZRZD7GB57kHw88zyscNKgBxrz8FhH2WAPkCKzERumC6iCu2A W3TmZKTUcoSNFhDGDSqZpdJGPxKWjQzdh78pzZSigkq68hkzslNl1tHcDJY0yaPSlUWsnMDSzqBf 6aIv17KZMeqFJvrgE5djgYhjuUjkfMGasxlstjK4gKJlxmg5RadLTqDJrGrZXPqykECSppl5hzpZ uJCF5JtZ79fkRMSRrdEr8gqfMlP45rzCqbzCC2cK784j7OZ/IpZwr9UdvqC3KYPlKyptQ3CI/UE7 Rbx+KpolHDHxECX4YYroIygUo9MeGZvlG0alQkhne4GNFnKs5Nxy8x8cy+hrpI2rtN002uQno65g 2wgKOI8ZfKaN6v1MXs5S9iEQsmfQ4J0/hDkhiYpax6KQMnmubwtNOTufyh6C+lg8Tc4+Q837LMrF S5gjXsEq8SrWi9dzWqXdcr4Qq3AVQfTEpCuks62ymLiKuTtUZBtFtS61Pvfg4f8Q5g1Fqex24KYK 7+phFFZ4N++Fi+DoaIU3PIziCu+OvSggOOqt6CLc6cOYXeE9ay+zns44iX7Umi+QjvJ+isw39zfQ RL8a78pR76pR++gEGjsn3ywr6KFCj5WmkpXmi2Ucq57KBuc0+fV9hwLzewrMH1Al3sVC8UecIf6E FeLP6BJ/QUS8hx7xPvrEBznlcxN24AtWKy+laBRDMHqhua0wty5zi5hbj7n1mRsH6GorQLsoQNSg GLY3Ub+ftXIETvmUexCzeP41eKv3Hf2bv2oIzhFcJzEHcba3ZJtZIPKgbesK+h2TJyefnNapq14J +RSvd0cxjl6bwWqLz9sk9dUxzTVFc+bQSolmEXbalJGjA1PvqAYqEYh/wib+RQn/NzziP/CLj2my /BeX2GzQbXYYNgXX2xy40+bEPTYX7ie+IZtHRnGZvPCQVW4MmZPZhgesqaNiD66RU+cSegldS5Ai o91DFA8UWWohGcpZ007+aacF004Gf6vNEx/vnH4cmsYr6L3H4+OL/wNQSwcItI+RqQULAACxFQAA UEsDBBQACAAIAIm+NC4AAAAAAAAAAAAAAAAgAAAAZGUvdHJhbnRvci9tYWlsL1BvcDNDbGllbnQu Y2xhc3OVV+tzG1cV/60sa9fS+hE5VuJX4oaQ2rJlkbYQqNukieMSgWynkR9N0pKspbUtV5YUPVI3 pS3PNm15FMLLKYRQUgw0QAyp0jZAGaZTGGAGZuA/gBmGD3zgA8zwBfjdu5uVLCkBPJ57755z7nn8 zuPav/rXGz9FA0J41Ysw5sWy4MUwFpt4SnqxhEfEZ0rFshcq0hoyYs+K5ZSGnIq8EFrUUBB7USyn vXgUK2J5zItmnNHwuPj4sFieEMuTXjyFj6j4qBddQuXHBPHjGj4h9k9qeFrDM4J1Vnw/K07PaXhe w6eE1U9r+Ixw6bNieUHD5zR8XsM5FV9Q8UUFnnuS6WRhr4KG/oEZBe7RTMJU0BpNps2J4vKcmZsy 5lKk+KOZuJGaMXJJ8W0T3YXFZF5BTzRhhgs5I13I5MLLRjIVPpzJ3jmaSprpwoiC7f01/NFMOm3G C8lMekRY9cad73raKqRpM5M1KTXSH10yThvhlJFeCMcKuWR6YSRyrJZWS5FhLmbyBRFUDZe8bCZH nhIhJvl8iqdjJBbzZk7wjDwDVhj79ho3x7mMrcTNrO2p1/nIq/iSgsZ4KpPnTdVcMePFAk+76gQx UM8nNZ5ZXjbSCeYrZ+aLKfrXumAWxs183lgwRzPFdEFmkD575orz88JXTz5rxM3dNw53KGjJmXEz edq0ryno7h+ojcJiCqPLN+Q6byHlTrFUGGzZHQW9/ZHIrTQ3JtMJc0WBtmysiEoTNdR/yxtC/SHT SJg5yjbnzOVMRRhu3mVSfZSZTidPFc0IgeoQCutA2SjRYHSUjiXP2NcJnDeWKebi5v1JUdmt5Qoe Fkp0vAt7dHwZX9FxCLt1vBfvU7Gq426c1xHBBxQEqo0dkIkQN5mExunY2JE+HS/iqzq+hgukHN4f i/URrFvWEd17YDoypePruKjjG7ig4iUd38SEjkt4WSi/SJHY1H6KfAtxsazp+Da+o+K7Ol7BZQVb bgKrAgjJk6xnOvY9fJ+HJgWuZq+OH+CyjitY1/FDoUIZppGpycMygB/R9yNjUyKaI4jpmMWDpBwc i471iTgjB6Nij0ZiU9y7bj4aWH/VzEh6LrNyg9suAU1mwpHJCjia7FlhJmTFH6tjYrRimmypOydE uXiMLCcJtQz9T11oZZMFpBUyFkXB5v66JebOS70d9fTSsGq3oYK2aj69SpnphcIiD/FFI7e/YJXn KG/JnpmcJ7Siu1iwTfniXN6+FpAdV8eXTWVaJF0wF8Rk0LJGLm9GBMZ1fRTNkC8YuUJ+NilcqStE 4JuNRMJqyqicAR7zVNFI5asuTM4tMRnygo8XDmQSj1ni3fU6tAxzrGDEHxk3sriND1cY4qcZiugm rnfw6y64eAI8QeUalHWeXLiTq5c7sAeNbNK7IIpcSuHdeA93oWGPrWEvJV1Sw2AdDXupYZ/UELCk bA3ixPanDoXtP0IedSlZuPnaAvPBElyrULk1BK/CPdhzHlpbeg3unt4SGoWvntngdahHr0HzN5Xg 7XRzKcG3gaELRmOZsYbWuz1CXwktnZ4312l7G2ZwlJg0SJ93oYnrGHz4IDkx7MQU7sU0ZYTUg5jD MZh4SMZzyPLUiWce91BWkae9jNklT/dhP3WL0wFy3fI0ylMjjhOhg7TlwVVST5Pig0fFsIpHFYUL f0nvrKG5VCyJvauG02BxFLpazeLeTM9r9d8vM+HC+2VdcCpbmcDDdl0ErExsCvpbJbQWeCLLFmJ+ GdMJYnESLTDQgXhFvQRsdESEPlI6hCPDVWZdYvTbZl+iWgHX7sG34ZOZL6HNMrppfKgEv/sSAkMN JbS3hS5Cv47mo0PXsPnNoSuORwEiCeToQQGbiesuxhnGGelVn6Xcydlu5lnkbDN6EeXJJT3t5a4L nIctjMIC2eGbQDaOCdv3FUIhwNgZ9HcQq+hgW18JgXu59bhPlrBl7yB3lu/W19B52WkTC8AnCeDT BPAZbMWz0tWgpct2VaVTk9LVFgZ4WJbXVjr5AE8NVWjyPbE8cgW5Cy1vXUcXG6I76u8Zt8GcWMOJ kIVne0jiOXwRTSGyeidC/m0lbD8PPeRnBNtXsc1uKCbA67+NS8jqqfE1+EVSVtE0yH3HbMhRH/L3 lPCO1X9f2MAvGx+4mfFBMnbOltW8U6r5w2A5wTMsI/AJ1fgngI+veDsf8QBf6X5cZm1dZcu9yuZ6 DYt4g/8Y/ISlcAmP42c4i7fxAn6Bc/g1XsZveOO3WMfv8DppP8fvK1B/y0Zdw485AKaJuo9SM7JA 2nlHZKJBlsovyQnALcujy6mQ4RrKfTWU4zWUxRrKUg0lV0M5W0M5V0N5pYbyeg1lY1XzzxG7qteJ iGiaSM+LGHAm6y4WQLeo6ttFrXiZ69udGdvrSPU7Ujcm8zUMlBNplf4fuf6JwP+Z0/AvFV0acbo0 woG2T86TCOfvPrtLt3IPys5UBOtg+VgdynE7lBHqFVNZDXa7SghecXrQI5X/teKZUh3jqm18o9KH 6iltqKP0b/+H0ofxIVtpjJiIG90OlIPVUFY/tH/ng/CPCmPdjrHuusZOcGBbxs7YcyvoGBuqMjY+ 1Nanigk21CuoveUgW2Sq/okuxrpDcVX0UNCxH7Ttd6FNdo4LO9hZRs3kUvi8xm2fnrB9Cjk+hf6L TxuGqnRL8dCtZrrVWuFWyHEr5LjV7rjlq+tWQuo1/wNQSwcIdZWjRuYHAAC3EAAAUEsDBBQACAAI AIm+NC4AAAAAAAAAAAAAAAAgAAAAZGUvdHJhbnRvci9tYWlsL1NtdHBDbGllbnQuY2xhc3OdV2t0 VNUV/s687s3kAmFkkIEQ8Z0nQQIRAhSSSWICeQAJYLA+JpObZHAyEzMzEWhrURGftaVVW7QqtNZo a1tpdUCwgKVitQ9bq9J3a1fX6mqX/VvbP6XfvncyCZkJy9Vk5Tz22Wc/v73vyVv/PXYCTlThL16s xGe9qMMeL+7EXTrWFJBytwx75eweGfbJcK8w3Cer+zU84IWBPToelPkhGT6n42E5/LyOL2jYL8z3 6viizPtk+JIMj3ip81EZHpPhy17MwVc0HPCiBI/L7Sd0fFU2T3rxFJ7WcVA2h2TzNR1fl80zOr4h 87NCHPPiOTyv4Ztiwbdk84KOb4um78jwXR0vip7DOr4n8/d1HNFxVMMrGo4peMPxWMwMJyPxmEJx W59ZnRwJxZLxkeqhUCRaHcyerlIoiMbDoehgPJFU8LXtCI2GqqOh2EB1V3IkEhsgg2d1JBZJfkLB X5p7XLZVwRWM95kKs9oiMbMjNdRrjnSHeqOmiBPRW0MjEdlniK7kYCSRz6quoeRwMBoxY0kqvab0 QlZPY0d82KS/LtsXb9POsDks7AkNxxVW5bG+dXsubRrZw/ERClWtCs5EIsrVdhJTCXNEzkIJeqTo 3CU5VrdzyFpCx9zhaDxBTmepiC3IJMrssyiUqZk7zXAqSY6r8oU7X4K0cHxoKBSjCFeUKWDGRsxE KirmhvkXVChMmLG+djORCA3wuDg3tpkzy1VtaJwxMC2fwsJcIU2xUTPKHFhSdDOzU5g/PSfNi1hm S8YuuiGfd2oHgyZ+JbL4TCUpYyvDFh8RBh7oA2ay0exNDXCZyC5dpdvFFPdoKJqiHTPIVJ9KDtqi FVbkCfDHDvlgSFCu4LiB8XX1hZIhWTcwjb2pfoV5ObcaUv39ptjrTiRDgiVnVNDqNCVxin/ernhq JGw2R6RKZk1Uw2KRZGAtmmXYouFVAz/ACQOrsNrAGnzCwHXYYGArthnoxhbZnjRwPXoU5ua3gkY0 tbR1LjJwCq8Z+CFOEyP1W7pbFm1sq2/tIP02CFNLE5mY6wuCmu5v2tLabeBHWGfgdZw2cAZvGPgx 3jTwFn4iVq9jRKYDgZz/1MDNIFiN9vrWtkXNmzvb6xbRuZ/htIafG3hbfFF09Bci+Jd4h9HaHNzY vai70+L7Fd6kFY313fUG3sV7Bt7HWQ2/NvAb/FahaGoQxO3fGfi93FKLDQxJ5GKIK6yrbwg2NjVf 19K6fkNbe0fnxk2bu7q3bN12fc/2UG+4z+wfGIzsuDU6FIsP3zaSSKZGb9+5a/eSa5bWLFtee+2K lRXVBv6APxIJp/YY+BP+rGFQQ1LDKBWtIXkNh/nTN77zbO3s3UGIsywsUiRe3do5KeY5UoKTWn4h kd4aI85iYWKppLTswp+Ai/O2RikdT2h42AJo5cdqRlmM68n4eJXNKc1bQa6EJVcbMcNmZJRWFiRS vYnMHX9pa95LHpbMQHLQ6pXsxB6pwvqkFHprWTBvTxpvWJY3BQxLF9VKAVw8DafCbHK1h8KDbDn1 fX1spewvBmmbzXBk2M6SsNhGNUXNIZLIUponQsGyvC1t9mRpwXhKRHpF67gJC/JkbKL1SrNrsxti Nrjnt8SiqTT6btqWSrimhNcG2ipRG7xATl2JyG7aVpiMByXsIyOhXRL5MmmAYlLDrqSYJBS2Qb0r GQrf2h4axqV8/dQBcPCXLctasWtxNqCkN3Cs524t320Ozlq5qjgCddhibODotcgt8KAVQa7m2mxo RBNgrUScsoQ1Z4Q9Rh4n55LyI3BUvAHtKJxtlW/A43O1l1e8DHd55cvwiA6npWM+pQMb4EIbzWrH RejEPGzEQmyydC6ypWV1lliuKGsl2h34wOJy8LZTw0oNd2p8l4GCztsqNud15BIbG6hTPPGWVzid SqWhTfX5RhTgpkk+e7P6vYyH+NzKtUhZz/emyN5gy1Zv0xONZ4+Wp6EfYEzTKCh/Ce6K4sehFwXG 4CpemKZmdQSF2wKuM2gMuM9gbflxGD1HMMM3M41Z5PdwSqNImLJHs0kLuALuo/BNnI4x0uMMF+Xc HcOsOo+oT8Mf8Jw8TFNLcA/uo9F2+BejkGOC4y6e7MEVuIu0u+neXuzAveS9n9wPYj8ewiN42ApJ i+1gNiSPZkIiqzam0GGtOphIp7XayFOXtdrElRsPMIib0cXwSeqeorRCeKxcVSnFwU5YIIfmyCRz fs6J0z5RNDlX0D15aPfl0DjPoYe5rOcnmp/5DIhu5Cw+z7UTPbvcN9fKlh3sCYD7LN+JBDyOmXgC fjxpRdGwb2eiKJEoJMUvhqzMUcsnRqa+llr1Bui2ootfyCLXY9GfnSRczwh3yJskg89umuUmbUfF GRRawExjni0r0F7ZMYbLxjcZVFURTZWE1HwbVR2VaSzQDmGG0IqLqp4+906Vk6tal99VtOxpeDkt PwjjOOb0VB3BwpNVL2ZDYYMtTeuO0qtX6Pwxpvk4G9WrWMH1epwkRE7xRfIaBvmqEU+W2dZmwbYD 2y2wzWFMbrDqfy6T8kmunLwbYFpuYsA/sDg91OSwE2oBymWvs6ldkUNZn0O5Ge7JFAnrYC7p/Gzd jFsyIGmm9VIOM1mjJT0VriO4JI1FU7vNu5iB9yZ1m5lZb2cihN6cbsMXmy3fwa5v9c+z2R5wKdPE lF52FJdz5btiohc414yhsaI4jSuLKo/iqg5nrWsMZdmLV5Ozyu9amntxr0v5XVUnDp17f69DFVN4 6aFzx8p9ZXLGHfFfYQsL8n4aladQVecOEEMLDuCKgFvQUbT4IAIZTUWL01gsxyK/zi1wk908W00a 1Zb0JSJ9ooqaMZvjX3E5/o5S/AM1+JBl8k8m/kP0k3Yb/oWd+Igd7N/Yh/9gv3LgGeXk/+QenCbt bTUD76uZVpA3szAYsmyQz6IPJsN6JQ5TlvSvGv4OMM9O1GIJIqS5KHkrIXUraXezd/VbtP0sx6jV 0wRwSdZ4aearUyKoWJkBSglr+iU1CUxZQmQy+75Jp88J4VimHdkEG49npjKdD42h6RrFNVMahZqT p1EoeYxn7tdb7wbYX68FaSydglq1ALoqnoTagmxACzDM5s+nlfw3Y4tzvM5weXmrx1eTxrLx5uJb Lp8swdtyG7eCiTRqOzLndS5nrbvqRK3H7/H01Wp+d60+hkiVX6+ZjXN3FBXt5NJ1i73Rd+7hzm3v 9tQWBFyV/oIi3+6itXcsI+K22Xtjyt4zZZ/Z7NWdft2vPXPuMU5uv+cWd99B9Eyr+P/R5ruW7vIL 3ZjR4KKGFZM0fByZvhUiI8CqK5poszEsYKDL4FEVuEpVoVpVY6laglq1FKtVDf8nXI6gqkVE1WGX WoX71WocUGvwrFqL53n2omrAqyqIs6oZf1PX4SPVojTVqnxqgypRbapCdahVqpO7japLdVkQ2E0k MbnWtx7WapPVpj08T7AyHLSkBimM0sZqVY7bWa0uWnU13x3trJ9adTlltBObq9VCfIorjXYGrDrT WSbr8GmuClirK+wVfSvN0KT2+iktiILxpvyyhrQGQ/GHh89Pc6B80x10TSdK4TNWGdzxP1BLBwj8 /a6UdgoAAPAUAABQSwMEFAAIAAgAib40LgAAAAAAAAAAAAAAACkAAABkZS90cmFudG9yL21haWwv ajJtZS9Db25uZWN0aW9uSW1wbC5jbGFzc6VVW1cTVxT+DplkQjJIjETk5qUWGwKaaq21YG+gtqlc qiAo9DZMBhhIZtKZidDLe1/6A+oP6OLFl6qgtmt1+dSH/qiu7j0zJENIxLX6MGfvs88++/Kdvff8 8+8ffyGC8/gpgT5MxHExjv4EruOGjJsJRDHBy6dxfBZHgdnPebmVwCSmZEy3oxczSXyB28zdSWIW c8zdZYV5GQu8uZfEfSwmsYQvE/gKXyfwDb6VocpYFog5lrahuwLZyXX1gbqVLxuabelFwzUsM29Y +VnX1tXyhGWausayMYE2R3uFvq5VbX2fftQwK1VykfGusFKBBb5lOo9ZVddTOF5TmPEkdY1rhmm4 HwpEskPzAtKEVdQFOicNU5+ulpd1e05dLpEkPWlpamletQ3eB0LJXTMcgcHJop53bdV0LTtfVo1S fv1SWc/XIy2UKyXyJVkV3RTo9hPMl1RzlUEwzNWxwqLnfc1yXPZ14JzOKpZNZ6JAoTpOibhFgXjF tlxLs2ibuLGl6RX25sggFKNayXI4Rkq0KCBnl8YLhSG6HVuurqzoNoG9NM4Iraw4/EpRzaqaTDdt w9VrFyiqds1PRC96KJHbxKxVtTX9psEgHNuf5wWOXcGbGJRRVKBjhdBvzGfcC0HBKtbI5mg+T+mM 8tZQsI4NGSUFwygLnHu90lHQjwEZRC1UFJzGGRnfKbDhKHgDZ9mY29pYQ10pOIlTMqoKHmBTxpaC K5zM9wrew1UZPyj4AFQwZ1/j0QV6G7XqCgRdrWpnaq8nkGpEi95ZN4vOguESWpkm1cNvElMrVF30 RCPNFA6I/BeguurLFl5xGnetvRi6sgf1SONUc1CDNC2qs6vN671Fl+/r78HmOl6Th4Hs5M4KtT43 2VCLmdCiCvy5EDaaYqPhcSFwImS1YZBcaQn7ITm2qkpveu5LkvrUl84ElRLNjnsdevowN+FSC6PU 1SwZevVZV9U2ptQKztCU7wMgoY1bjLg27g6PUpd5lBqMaAyCm57Wc7TLExVEo7lnEL97am8FSsAI srQqvgKGkCMqqEVHSIsuC5vcRUn2ZOAh4um2bUTTkVGpR0pHdiE9xFTuT0TvP0OsR9qFnI7TMsxM Oy39u0jsIhmTnkN5iY4dHMnlnuLIC3QK7CAVbI7yJr2NucMtPcexl+jaQYZuZqRU1wscj4DNZMI2 M3s2OdWIl2oOCVpvoQNT6MY0/XhncJv+pyr9SX/BXfyKBfyGe3iMRQ+Oy37KARzMnccFD6InhObb BA1zF3GJ7HfQzXfoVMKPJJ0g2g5JRq+M64JvJEM7QYScRvcEvAV5bRBc9h5Z4F36aNz5L4GfibLB Ycbtbxz14esWyAmGlhL3hZmaMFNH4CRkWjVai0jRjyBD870fa2TcoBxLoSIYDrLmbLrIZYaj7vVA DJh6eBJP4SC8WdpJnC+FkBruH9jFiUcNtWZ5bnK+Wg3cJN7HKHyoxgJwk7hGXGSfKxr0gauFkKu0 56qnXtYJz4BD1P0f7gQ+wsdB/9wJ+qfDB16WtiFFHtWg9XPbDEHYEYIwQw6Se8gpPsOVgE+8iMf/ A1BLBwg/qloFlQQAABsKAABQSwMEFAAIAAgAib40LgAAAAAAAAAAAAAAACsAAABkZS90cmFudG9y L21haWwvZGVtby9qMm1lL0luYm94U2NyZWVuLmNsYXNznVXdUxtVFP8tWbKbsEIMQmshFSnQJAir 2FZpKC0fwa4m0JIIrfVr2b2lS7ObuNl00Of+FY4vPvHSF9qZ1NEZx2dnfPCv8U08Z5MiVCiMzHDP /Z177rm/85X9/e+ff0UEE3ikYjaO87geQwo34pjDPO8WeFnkJc/LEh98pOJmHAY+Zs0nCgp8r8jL chwruKXgNoNVXkqsCc/KCj5VsRZHP9ZV3FXxmYp7Kj5X8IWCLyXIq/m5RQnDhS3zkbmtu47lV4Xt BE7V0yuW3XD0harrmp6dk9C5vmqU8xKii/lCnjeysby0QiJ/xyjTseOam0LC0PG+DLYgT9EZx3OC WQmZdMEWeuCbXlD1ddd0Krot3Kq+NeUKvUiwaCxWRJDLrNEzC1Wb3PcUHE8sN9wN4ZfNjQppkoWq ZVbWTN9h3FbKwQOnLuHiK/wb3kZ1u2T5QnjMyXVsekrC2OkoSZDomb4wWL1iept6ftsSNY6Wzrrq IiiKep3iJRZ96ZZZIyBva8Iiz2FIqrtvkvyvBb3g0L9BMW/uezM8W2xLiKQzpFdnrEo7k6Qgh/FS teFbYsnhFCQOBDjJ3qlGoUrDRXyl4S0MKfhag4kNDW9jSMMwLxd4GeHFgi0hphtW1ZuseZsKhIb7 2NQwijEJvUdEruEBpjU42FLwUEMFLtH4164U+I5H9z1UNdTwjQYf09QxJzUf96kwbeZdV9DgVvSd QHArCqoFl9vw7le5FbcdKuHoqYouIXXswwWnTn7604WXyecMzvPIsRcXnXqtYn7basK4adv7IYym Tx4y9p2k1mljZiE84UuYOPnyC+PQyflXzyA1KKXADEQbXToi0MzJcyzXne+4CvaLKqTD7CRebmXq IrJwhRfMBTwNRubAcysbW2TEE2jWaoIzdfkINieR4XGIOl5d+PTClbTxPzwwcxq0ElG1AmG3J+3M UT0QhqmWAtN6WDRr1A+n+cmgGUvRTzIQRYyHj3YxnrtQDrflhbYcCWWcR42kDPopQ5rWDKE/6NsR ITmTTUrR5+jIPkWkCZlEZ0tEW0JpCZXFeBOxZPwndD2DtgO5uEu+dHyAq3iNfGXJ2yS6aNWh4D10 Ywp9uIxBfEiMpuk8RyezZH+dbtwgNI9xsh5q8cA79C1DuJskO4nOgXfJTwcC2qVIXkWHgpSCO5AU ejK3D0HmU3i/FZqUoFBl0i1nm+iW7Ws76MoONtHzuGNv8Ie9vyKzO5hIfY/+7HiqicRveP0ptCaS 6zvozUYO6XofR6QURf3Gj3t/7pLHVpBjlFogT4ldQg/JfvqiDuAWleM2sShTWAaKxIqDy7aY7Ae3 jEuUEokStIQrlIoOnCXMu0gYZpkKG0ckjIs+i0DyIBiA3AaMpg6h+UMofwhJVILpduE5tazrpOz0 PaFNRxhUNFTeC0lrLYM2aZXynmtfbpCW/4xf0H83eUaWn+PsM0RC9KbcGaLOEJ2T1RBFQzQgJ1pQ CeGgnIiFUN0N2TGBc0QB1MLd1CyDlOMsPchNc5N0EjUFE732D1BLBwgZXXF6eAQAAPUIAABQSwME FAAIAAgAib40LgAAAAAAAAAAAAAAACoAAABkZS90cmFudG9yL21haWwvZGVtby9qMm1lL0luZm9T Y3JlZW4uY2xhc3ONVQtTE1cU/i7E7LLGolvQFku7xQgbhN1I0baGUhWkJiRKxcbS97J7E5buI3Oz 6TT+K9uZ4JSZ/gB/VKfnboJiG9DM5Nw93z33nO887u6Lf/76G6NYhK/iuoaPsaTgExXLKm5ohN+U 0KcqPlPxuYpbKkoqVhR8oeEcVlV8qeE27kjlroo1Deu4J8XGGaS/DOTWVyruy7U8BgMVDZuoSlFT 8EDFQw3T2FLwtYJHDCMPNxlmqvvOb87vdui7Iuaen/hxZAeu1/HttTgMncgrMWRX/MhPVhkKZtXj diKcKImFHTp+YHs8jO39pZDbNVJr5fWAJ6VCnSGzFnucYbzqR/xBJ9zl4rGzGxCiV2PXCeqO8KU+ ADPJnt9mmD3FfzlqxNuu4DySlELfo0innzjGiEFdcYNBGqOmJKhtxx3h8g1fxh9/5d2SFSFGEskh j22GKycWaTsRftQsJzwkTnd2405yi6EkAy/X7hnrRMXoM9DqXLTpnHHdKlo3NNMtGEvFYnGRxJJR sbYC3qFqR5qM+DiHb0AM1bU4ShxXupxY2Y+5aN5uDewsj69qDGP345C3nCaXJjL75ZBbPNrresKx YtEkE7VC3I16jSwuyjTswImaA953O40GFzKkxTB1PD3LjaOG3+wIR2oKnuTwLXYkr+9ochYMBd/n 8AN+zOEn/CzhXyj/TaNBBczBwW4OM7iiwM3BAyENNBmMN42anMlfJZs9hvzbDALD9Ik+N2JBPZk0 q/9NOp3OuSH4cMus02pxyW3GPPmuyAEoFcoM54/56LbTsTjb5MmWiFtcJF2a12GE/g8xLLyVYb+D ZH7h1c6jTpT4IQ21RpFfKpPm8dMDmA5qsmc1Kq7opjejwnDZrJwSSU3iPkIjZw6lnj+xTut+uxU4 3f6d1xzPe9n5q6dU9+hNJNuht3ky0Ks+FTjigmHxzYePjFMnl4bUtlwu1On9a9AfoJslB5ieRug5 j6skZ0l7QfgIrU/ndXaAkflDjO7oGf3MAbI9KE/6uqqPvaZr+tnX9Nwhzu0c4B19/DnO93BB10k8 x7s9TExgMuzhkv4eIT28f3TsD0z1cHn+Wg8fPEs5zZGcgUoyjywxu0jILEzcRAEhFpDAQhc2IaC9 lDHtzKcfiqe4RhbUR/oQWYO85tD/iowfYnpH/zCTOcBHf2LqWVoKGSxLK6g0jJxKAsV/AVBLBwjJ d82UgAMAAMwGAABQSwMEFAAIAAgAib40LgAAAAAAAAAAAAAAACoAAABkZS90cmFudG9yL21haWwv ZGVtby9qMm1lL1JlYWRTY3JlZW4uY2xhc3ONVW1XG1UQfi6E7GZZBFMpFKRQCiWEl9RWrQKCBYqm TUAJBaG+LdkrXdjd4GbxtP3sn/CzH/q5VsM59hx/QH9QP1pnbjbAwQTgHO6dmcw883KfSV7/+/c/ aMYEfB2fGejFrIY5HZ/ruGuQfT6BHizoWOT7no4lvr9gvy9Zyhq4jwd85Ng7zx8s87Fi4Ct8rWOV lQIfaxoe6lg30IUNDd9o2BSIl6Vvy0BgOLdr/WI9yXhOMShJ2wmdkp9xi/aBkymEgePvZEPpTQvE bCuUAlr5YHtXFkOBppUHAoONoxdKnmf5NoXGZxzfCWcFRlM5W2bCwPLDUpDxLMfN2NIrZXZveTKT JzWfXXRlOD26TvkWSjbla885vlw+8LZlsGZtu2RJ5kpFy123Aof1yBgLHztlgRtn4K9Kyy4UAyl9 LslzbMp0dsSJigQSZRkWopl1plTbGdfyd6IpqZqT/zfzxGS4qGZnMERtfImiK61gvmQ/FWhOcbRw 6D9LAZZtV+0xl5oX0MmQ9awdEq+nGg9cuag6Wpyq98B5zoQ9U3Sj1zEKpYOgKJccHmj78bgmGUTA ZMtAXpbLFGliEONUzgW4Q+UsBSVvSgActWXiffSRkWcyZeIqK3o0FtL70WfiEb41MYBrGr4z8T1+ MPEjLBPbGDdRhG1C4icNOyYeg4c2wBG7fOxR0+cxkqm7x6W4AkMX4YtAX0PMpVJAHY7UIUR9isSt /X3JNQye9ZK8cqNEhaGGLotOed+1nlbZbxBBjpobPgO4tpOKrMTGSM855VD6zOyJ84NrzgqEyb0m nxCfY2XnmVRUprrjtqSt4b1MZdmt4/QsyEX+fGC55VPLtKJoMD261WDJshdaAfLqqhOdVbXohdAq 7uWtfVyjr9FeADE0MSdJamI6qrtf3QkmId066MFwnc4h0l6ihTyAR+mkOERT+hWaN5OxZMsh4n9B q6p6pCaqqhGpren0n9AqMDdYSNSEViX8gbYK3kmPVdD+QhUxTGcahjrjlL6T0g+R9TbGMUM/HPcw iWXcxEPcwhZZb5Dn5WppGEEKUNIoRdOSYIyiqg3cJR/2SnAxlK7jOJ2hPviYOr5zAi5xBJegSU0o uMm6cIl6cFMEN90A7moEl6kL11oPbpbg5hrA9UdwN/FBBBdGcN3pCt6N2TPP6RF6K0j+Kt72tvz+ 9g2jNyv0JDEBmKcsC2inu4sGfJylO8qioYPGfZvQvegzqkpDj1AINUngw6OGnkUV9IwlWyq49Bva 0sn3KujceE49jrFwuoYsdXIfl5DHFaycqKHnqNMefKQ69ZTcRL6cWaOfflDMsSzoLe9EdcxFdWic 9PLG6bGuEscKJ5JpR8k0fIJPCUSnl6yNdYSWgP/aX6FrM9kdix3iyku0vVA5GTQOodwEPT0nmvkP UEsHCCTV+uIhBAAA8AgAAFBLAwQUAAgACACJvjQuAAAAAAAAAAAAAAAAKwAAAGRlL3RyYW50b3Iv bWFpbC9kZW1vL2oybWUvU2V0dXBTY3JlZW4uY2xhc3OVV/17FFcVfidfO7ssIWwKpRRKAk3z1XQL lGIJbY2EJBuyJHRT2oSKTnYnycDuzrozSUNVWr9aUautWpTa1tpWqf2GkmBBsEpFi1q0feyjj4+/ 6E/+Dz4+nnPnzmYDdwPhh5xzz5zznve+596bcOF/p86iHG34SMejIWzFYwF8XcchHd8IUfybQbTj WzoeZ/vtAL6j4wkdT/LquwF8T8f3Q6jGU7w+rOMHbH+o44iOp9n9kY5n2D6r4zm2P9bxPNuf6Hih HBrAixd1vMT2pzp+xvaojpfZ/lzHK2xf1fEa29d1vMH2TR1vsT3GbI+z93YIJzDN3gx7J5n4L5jX O+ydYu90AL/UcSaEzTir41cBvBvArzUEjFQqbzqOhhv79hmTxlQ0YyXztpmyXMvORtPJ1IQVHTSn 3C7LTKfaNejjtuNmjYypoZINVdbuEaXRtJEdiybcvJUd40THzE9aSU64qTT0tnGbcrrz9kSOazKG le6hBkTMznEaVS9ynHQsm7QzhCv7D9h5V2bfS22kO2DwPnQn4+YkBlUmaCWDHRPuuHQ9gOC4S27e njrAuK5fVpkyRyaoVVn/Dg1r5+FuZzJGlkWp2H5/bFBD1VYra7l3aWhu6kuZUTdvZF07H2Vu0ZSZ saP7NmTMaJyW8Vhn2nTbm3dT7TY7RWIu6bOy5s6JzIiZHzRG0hSJ9NlJI73byFu8lsEKd9yiTTbO g58w3YlcIpk3zSxRq8pYKWrFQ7gqShpCY6bb4Z+Ka5qaVcNdRDk9hYMQoFUsY5DO5U3Nw97XeGGS 1bRKFI/QL/aG4Cd7g/RXcpa06vSGwR8ShcmGPExvuP4nb77+aha9pzDZsFzJmYecop0ua7p8ozyf iHL/zpz9O/7+K5qGuaZy0khP0Adt2EstEsO5VAxnjhjOHDGcYjF4VaSAU6yAM0cBZ44CzhwFnDkK 0CX1Bda3JtPy+NIUaROhhD2RT5pdFp+7mqJTdQsLQpsUoTAGYdM1ufLjQS2k2Fvo4eO634RxJ6jf InHS6/hmbwnjbg7VXCo6aTvQP7CRTCzeMRDGJ9FBb9bVvCuEH8uO2FN17oGcuYX7ngvjU9hWiMu+ ndy3vH90lG9+Nozt3GF5ItFXN2rn6yw5sTq+OpTdxQAhFrUuRzpTpJvrQzw5PhV1FOnhSJCn96Cd T1EgJlIS8cEBv2kvR5b5TRwzmyrqsUP0EOkGTZYifbMR2TUuBOwZ5AjPlEI7xd7EhP02/aKxmPQY NaDIALaF8R5+G8Yu3BPA+TB+h9+HkcA9YbyPC2H8AXvD+CP+FMYHsMO4iD9rqLvSW8jS7WeJ/8KP 4pRFJ67hql4qDatLYnfZ+Yx4Uy+7iJdHYjE+ur2K3Jjit9Se0o873ecxUzwAVUYuZ/LW1jbNk+6a mfbm2HxHstNycmnjgPeOh+j3bkGzhnmA/V8y4imi2yrXfZbjmll+JNquXOwnC5Agv4/ySoUsJ2Gm zaRrpvjtivHjHXRmv9ewLxNi2ZQ5Rbe+KSaeuGtVEgvx9YRrJPfHjRzq6Q+SrQBqUcYXnbwyvt3g f3R/xZouorCdMr5dxrtkvFvW9Ugbk7ZX2h0yr0/auIzvlOt+uR4Q6yCfdmETwtbR32CDuJd+7qak owhQJrR/t0S0kyhrOY3yoUhFpHIpHqk4iappBLyQLkIBEQq2VJ5BaKg8sigxVBEJJ6axmJKqhyJL KlpOYDHh1ExjqVcXKaqr9euu4bplVLfcq7uW65Z7dSu8uutEXaWoW+mFrhehchFa5YVWi1DkBhFb 48XqijrWe/hri/DXeaEbi0INXuFNRS0bvaymoqxmL6ulCL7Vy7q5KKuthfzADG65j52g7yz1nVrf WeE7K31nle+s8Z1631nnOw2+0+g7zb7T6jttwjmO6AxuJbOeDX3ccEwcivvo52E00M8OVKER16EJ N6OZjkwLHZRWpGg1Sf81OIQonsGteBPrcQ4b8DE24j+4Df/FJm0JbtfWYrO2CXdoPfTy7kKnNozt WhJdWhrd2gR6tIOIaY+hV3sCO7Qj6NNeQFx7FTu1E+jXzmBAO49d2kUktI8xqP0Tu7V/EbP7idVy 7zhiCMN8N8jbgwfosGr4NPZ6h5bY8BrQPa03vlXYWZWIDwuksJcjkTR8RlkfVNTvVdZ/Foas30jZ /C3Ik62YwW2vXQIwUgQQLACMKAnUKgiMKgkklQRWqAjsUxJIKQmsVBDIKgmYyvpVivq8sn5UWb9G UT+prB9TCtCmEuAhpQDjSgL1CgIHlQQsJYF1KgJfVhLYpwRoUAE8qgTYr9xBo2IHh5Q7SCvrWxX1 jyvrM8oNNKs28KRyA1nYEqCDssskQIAYbJp9oELiw1PU9/Dso1AAYe9O5AT/zynhgiq4IwT3dAm4 uyVcHo6EewDlIqv6+iMIi3tOe7ydMcsFZjVZ4FlU4DksxvNFuNUF3Gq4mCC8D6UOi1EWQLsmdJhU Eq9VEX+RiL9UgninJP5gSeIrlMSPEvGXidArCyY+pSS+UkX8dSL+Rgni3ZL4ASXcKhXcMYI7XgKu R8I9pIRbo4KbJriZEnAxCfd5JVy9Cu4dgjtVAq5Xwn2h5JTWKad0hqZ0ltR/d8FT+mLJTg3KTueo 03uEcH7BnQ4qJWpUSfQ+SXShhERxKdHDSrhWFdwHBHexBFy/hHukpA7NSh0+JB0+ov39dcE6fKlk pzZlp79Rp78Twj8W2EmnXy1fkZ3uQqXIvuE0Ng9FPlFBf7Lf8TaiYrWlJlApluuPCX6zndvJbsVq shq+KjT92v8BUEsHCJA32uUmCAAAEhYAAFBLAwQUAAgACACJvjQuAAAAAAAAAAAAAAAAKwAAAGRl L3RyYW50b3IvbWFpbC9kZW1vL2oybWUvV3JpdGVTY3JlZW4uY2xhc3ONVW1TE1cUfi4k2U2ygK6v taAURZMIbEVblRctBqipAZUgjP227N6Jl+4Ls1k6+q0/qfYFZ+pMf4A/qtNz7ibgjEHMh3te9j7n PPe5Zzcf/vvnXwxiGtsmZku4iNsG7pj4zsT3JcrfLeIC7pm4z3bOxDzbBd63yN6DEh7iB/aW2HvE kDovywZWTKyWcAY/mnhsoGHgJ4FiIj21p2SUClxr7rq/uq+dUHlJLH2VqjhyAs/fV86mfJ2uKhn4 8wJGZ39nV3oEyO3E/huBgadPBCaOB9fjMHQjhhbqS+v1lSY5CypS6QOBaqXpSydN3CiNEyd0VeD4 Moyd3dlQOmsUrjWWA5nOV7eoXT32pcBIU0VyfT/ckcmmuxNQxm7GnhtsuYniuJvMpa9UR+DGZ+pv JyqVLS+RMmJyofKplcD1L6MkkPcC6SYCgxWmZ7VlunGk5tlKVUviBG7UdlppoqI2YUq0q9UT0KDg kdbQXPCCriSlVryfeHJV8SlOfcRxhssJDOnU+JrsdNy2tDAOlv/kqyOem/GcABjStPAVLlHfLpc5 C19znGc6FIzikoU1rFsYw2UDTy08w3MLV3DZwgZaFjbxxMILTAmMn3TxPCG/cNMtngA38mQgMPlF 1yIwdmz11TgJBc5VPlWZb6PaJ/9pptHgvQV3b08yz4nK8VPcSGU4X23Qa3LslmXV2QvcN9n8lVzf PxRg8jOFe68HM7E7Mu3GTdVJZSRpvKZPBvc26yJFKpKdj/z2kX+hjyQsAL6hz8VFAHkM8FSQN8DT oO2otkUeA22vaFsA3TvhSDKKPsCgnUBUs8U7DNTeY/ClnbPzp/Fb7h0Kf8PIUqZODepUMUuVKDWO LFWu1f6CcQBrm51izylr5w8MHWCYzAibmwc49Vbzu0rrDMq01ojVBPG/iilco2/fFB7TV/Q5Pf0Z 38LFLbzCbYS4Q0+B8xljTOI6oL0bqNB5aHKoUnauDdpD7wtGmZedP8Bp5tVzyto5YmEjR+td0uge +fdJwTndycpqdDsJ3CRmWf1Z3Q8ws3Pbvx/WKuj84kd48xA/3Rdf7INf6ouf6Ysv98Gv9MGbcA71 WaSJ4d/Ye5x5aZ/N0WWf+xNDOjqfy+to5K1uykWH6W8IVGSYpB4lK+hauOGt/wFQSwcIg8Jtkl0D AADzBgAAUEsDBBQACAAIAIm+NC4AAAAAAAAAAAAAAAApAAAAZGUvdHJhbnRvci9tYWlsL2h0dHAv Q29ubmVjdGlvbkltcGwuY2xhc3ONVv1bHNUVfof9mGGZQLK4wWASN41uYCGubaNFEkwbioJCIEDR kH64LAOs7u6ss7MJwY9qjaZaa9Vq21Rtktb4USM2rSzG9LH9KenTv6V/Q5++586y7MJqfUjuPffc c899zznvPbP//u/nX8CH/bgWwrcxp2M+hAYsGEjL/GgjlY8ZyMicFU3OgC1zPoTH4egoyI7bhC0o GjhpYFLEU6JcDOE0lkR6IoQnsdSEp7AUwgFx/rSBnxp4xsCz4utncvVzsnVGzJ838IJozur4ucwv yvGXmvALvCzOfynDKwZ+ZeBVHa+F0IXX5aqzTfg13jDwpoHfNOG3+J0ce1HHWzre1tCYd+zF04N2 wdUQHn40eTKZyCRz84kJ10nn5g+uGYzZDg20IQ2hglUopO3cg9ZpLlJ2LmelXK41xNTxxUQ2nXJs azYt2kTaTgy6br6/YkeXgXQuX6S7iHcfTYZEwSutZJb7QbvoKoPtFYNRpalYGHbeyolfDfs6NqPe rOmc0uDvt2ctDS3D6Zx1tJidsZzJ5EzGkrjtVDIzlXTSsi4r/e5CuqDh9uFZK+E6yZxrO4lsMp1J LPDaxHo8Q9l8RjBnLXfBntXgKzoZnl5QGQ0NLKasvJjRVWMqYxcsD7WvQxAFD6VzafdeBloniCGF WQLV0FZvf1oZ5FVlfIUCb9WmmVx1iwY9PZ+zHWu2kmZ1toKHkP1MJrf1jhNHhoY6WdrgTHFuznI0 NJw4IlWYmytYrni0iznOhmMV8oyEzn3Zwjwtkim3mOS9gVNO2rUqrqYkVi9Bcj9jJa7QhF10UtZ9 aUlua23+7hCAJh7EMFOxMdAjCpSJEdnVJfu9iYSJd/AHE3fhbkbda+I76BHVeaJUVTqQtUxcwEUd fzQxij9puO3rkNNELw6aeBeXCLha/R6+Z+IQ+nS8b2ISwybuxWEdH+j4kAHePzDJmA6n7Gw2mZvt k5rFhAB9zFFMCkQhEGOJ+gTkn018V9x9hIsm7pEI2ipHVfFi5SdG64fwMD3XqZ+JR8CUXcawjo9N LOMTE3/BFRN/xUXeOuA4thPVcFN0tihJjA5OTo5Fy37XPMrDG63yOIJLOv5m4lOskB1joxOMSkvo KJlYxWc6pnV8rmHv13gQGto3WvVXdYpgMs8UkRrddXjduUnlMYCMvaVj6Ct2Ddf2NAy7Y7MdLW6t z4EyNJvM76n/0L6ks9V0ta18LOPW40Wr4I6Ue0GkXnh8HeF10zGHbHHc09U1WW+GjKReB9QQ/X+A JFnTX5Es3bFSVvok32JgLlMsLLDT1Xep0FT7bRF612BsW8v2pk7eMi+Bel3D675sBuw04Sr9CEmZ nOfWvi+NybVyNRAaeXzYys27C8rhA/z21D/rJa366FZBX5vLm6vgb/zOTLjJ1GMjSXbsrRtTiT38 Bh8AEOSnmo2IUoP0ITXfU16znaiZrUPN7BqcDUpsARyPcPUF/PwDZuKr0K6h4fgqfGF/CYH4pwhy CuuebJTQGA5RLqHpaLxsuJ/rbk8X9H8G85/YsoJmWjd3XUVLA0QKbw1vu4qwD1cUhn6O7UQNYvMT VzcxPUA8k0SUJKLvcyfuIcIA7gOUdD8j0pQ0SKmBp+7CECUfz4LWGn9vNEgLL0f1MWexP0QErdfR IlMJN8W1FbRSjniqSAnbRRURnNexTaaraNMgymbB61N44whxHIBOPM3E0spb23nbHt4XY4PfjzFi OcaIJhR+07u7jP8q/++ip1ZoOosGHikLB9eE9SA09sGjHCWI4wzCx7mFpbk53rWCYHznCoz1PIZV nn7AcQqN7NbNeFjdH/WOVfLXohiiKUk4IrkZJWYvVy+XGdATD+9YI0A7i9ol1b+Fw04pPYfArhL4 r2kVu+PxEm5dQVRIsxHPIwwjybBmeFeqqp49FTw9qnaako4pPCKNM3u+mlRMVur5DnVidWcVxj0e MaMe/wSU7++Gz1fCNx56H/5hqWH0irolhk7sLdfS414GO5GlPscdm/gcJFBQWLd795SxxlV+p+hF qtjGvU6vZhz2cndT/fzy0fRAa59wJZctC/tu4Bmh1w2E4pqAvM2j4XaPhrfXsNHjYUyDx1bK+zTc 7Y/4t+Ff51knperQ0BvYEbiB3WsJ6WQmIn4pVtzLSW/gGrqO7wisovsfgqFrJ8u3Xxw1XCCjlJs7 2NDeOEdUrKRPti5XaH+UlAVOkvanSK1FRPAE0/YkA3+KoT/NlD1Lkj/HB3GGdHoe03gBP8FZLOEl al7Bq/x7F6/hA7zOnxtvqvQO0hszUqHCMlk+rYq0jBNlKizjh5R89NuHH1Hy0yKOH5MyAXrczTtE JwUZoSYCP4ug45wmXhI1qyUE11as1O+pOVOz/xEClf0NZeQPnDL3/lN+H+NSoxs4XK+lhBNrRbhz Eyu9PH9TqhnZdQ5bxI2qxLfWO0yM7xc4BwHZjLcY1Ntk6nmGfIH7l5iK9/hSPqx6TeOVFI5XUjhe SeF4OYWSpG7O7TVh99esjtWsqt/fDN+v14rGOcuugI9eh+7nC/OtMyWoNi9XNb8tVc0vQkhNa0/F LL8f8TerOof1P1BLBwhAiZKeiAcAAO4OAABQSwECFAAUAAgACACIvjQutjXqs44AAADgAAAAFAAE AAAAAAAAAAAAAAAAAAAATUVUQS1JTkYvTUFOSUZFU1QuTUb+ygAAUEsBAhQAFAAIAAgAiL40LmS/ nc0HGAAAnjEAACoAAAAAAAAAAAAAAAAA1AAAAGRlL3RyYW50b3IvbWFpbC9kZW1vL2oybWUvTWFp bE1JRGxldC5jbGFzc1BLAQIUABQACAAIAIi+NC5cvPrfuwcAAC4OAAAgAAAAAAAAAAAAAAAAADMZ AABkZS90cmFudG9yL21haWwvQ29ubmVjdGlvbi5jbGFzc1BLAQIUABQACAAIAIi+NC6p5AvGhQQA AHgJAAAeAAAAAAAAAAAAAAAAADwhAABkZS90cmFudG9yL21haWwvRW52ZWxvcGUuY2xhc3NQSwEC FAAUAAgACACIvjQuVm2EMH4JAABkEwAAIAAAAAAAAAAAAAAAAAANJgAAZGUvdHJhbnRvci9tYWls L0ltYXBDbGllbnQuY2xhc3NQSwECFAAUAAgACACIvjQuLZld6OICAAAfBgAAIQAAAAAAAAAAAAAA AADZLwAAZGUvdHJhbnRvci9tYWlsL0luYm94Q2xpZW50LmNsYXNzUEsBAhQAFAAIAAgAib40Lnmg RETyAAAAawEAACMAAAAAAAAAAAAAAAAACjMAAGRlL3RyYW50b3IvbWFpbC9NYWlsRXhjZXB0aW9u LmNsYXNzUEsBAhQAFAAIAAgAib40LoOlbuM8EAAAEiMAAB0AAAAAAAAAAAAAAAAATTQAAGRlL3Ry YW50b3IvbWFpbC9NZXNzYWdlLmNsYXNzUEsBAhQAFAAIAAgAib40LrSPkakFCwAAsRUAACEAAAAA AAAAAAAAAAAA1EQAAGRlL3RyYW50b3IvbWFpbC9NaW1lRGVjb2Rlci5jbGFzc1BLAQIUABQACAAI AIm+NC51laNG5gcAALcQAAAgAAAAAAAAAAAAAAAAAChQAABkZS90cmFudG9yL21haWwvUG9wM0Ns aWVudC5jbGFzc1BLAQIUABQACAAIAIm+NC78/a6UdgoAAPAUAAAgAAAAAAAAAAAAAAAAAFxYAABk ZS90cmFudG9yL21haWwvU210cENsaWVudC5jbGFzc1BLAQIUABQACAAIAIm+NC4/qloFlQQAABsK AAApAAAAAAAAAAAAAAAAACBjAABkZS90cmFudG9yL21haWwvajJtZS9Db25uZWN0aW9uSW1wbC5j bGFzc1BLAQIUABQACAAIAIm+NC4ZXXF6eAQAAPUIAAArAAAAAAAAAAAAAAAAAAxoAABkZS90cmFu dG9yL21haWwvZGVtby9qMm1lL0luYm94U2NyZWVuLmNsYXNzUEsBAhQAFAAIAAgAib40Lsl3zZSA AwAAzAYAACoAAAAAAAAAAAAAAAAA3WwAAGRlL3RyYW50b3IvbWFpbC9kZW1vL2oybWUvSW5mb1Nj cmVlbi5jbGFzc1BLAQIUABQACAAIAIm+NC4k1friIQQAAPAIAAAqAAAAAAAAAAAAAAAAALVwAABk ZS90cmFudG9yL21haWwvZGVtby9qMm1lL1JlYWRTY3JlZW4uY2xhc3NQSwECFAAUAAgACACJvjQu kDfa5SYIAAASFgAAKwAAAAAAAAAAAAAAAAAudQAAZGUvdHJhbnRvci9tYWlsL2RlbW8vajJtZS9T ZXR1cFNjcmVlbi5jbGFzc1BLAQIUABQACAAIAIm+NC6Dwm2SXQMAAPMGAAArAAAAAAAAAAAAAAAA AK19AABkZS90cmFudG9yL21haWwvZGVtby9qMm1lL1dyaXRlU2NyZWVuLmNsYXNzUEsBAhQAFAAI AAgAib40LkCJkp6IBwAA7g4AACkAAAAAAAAAAAAAAAAAY4EAAGRlL3RyYW50b3IvbWFpbC9odHRw L0Nvbm5lY3Rpb25JbXBsLmNsYXNzUEsFBgAAAAASABIAxQUAAEKJAAAAAA== ------_=_NextPart_000_01C2C120.AA957130--