Seam SVN: r8180 - in branches/Seam_2_0: build and 1 other directory.
by seam-commits@lists.jboss.org
Author: jbalunas(a)redhat.com
Date: 2008-05-13 14:56:37 -0400 (Tue, 13 May 2008)
New Revision: 8180
Modified:
branches/Seam_2_0/build/default.build.properties
branches/Seam_2_0/changelog.txt
branches/Seam_2_0/readme.txt
Log:
Preparing to tag for 2.0.2.GA
Modified: branches/Seam_2_0/build/default.build.properties
===================================================================
--- branches/Seam_2_0/build/default.build.properties 2008-05-13 18:27:37 UTC (rev 8179)
+++ branches/Seam_2_0/build/default.build.properties 2008-05-13 18:56:37 UTC (rev 8180)
@@ -8,7 +8,7 @@
major.version 2
minor.version .0
patchlevel .2
-qualifier -SNAPSHOT
+qualifier .GA
#
# Other program locations
# -----------------------
Modified: branches/Seam_2_0/changelog.txt
===================================================================
--- branches/Seam_2_0/changelog.txt 2008-05-13 18:27:37 UTC (rev 8179)
+++ branches/Seam_2_0/changelog.txt 2008-05-13 18:56:37 UTC (rev 8180)
@@ -1,6 +1,34 @@
JBoss Seam Changelog
====================
+Release Notes - JBoss Seam - Version 2.0.2.GA
+
+** Bug
+ * [ JBSEAM-2936 ] Icefaces seam-gen build scripts need to be updated for mvel.jar changes
+ * [ JBSEAM-2942 ] StyleResource serves any file from the classpath
+ * [ JBSEAM-2943 ] seam-gen ear project on windows does not allow new CRUD entries
+ * [ JBSEAM-2946 ] Distribution jar file different than those build via source included with dist.
+ * [ JBSEAM-2950 ] dvdstore large checkout causes a IllegalStateException: process business key may not be null
+ * [ JBSEAM-2957 ] seambay example - all web services on test page return error code 404
+ * [ JBSEAM-2962 ] JPA example on tomcat 6.X without embedded throws NoClassDefFoundError: org/jboss/util/file/ArchiveBrowser$Filter
+ * [ JBSEAM-2963 ] Booking example on tomcat6 with JBoss Embedded throws NameNotFoundException
+ * [ JBSEAM-2970 ] In POJO mode, seam 2.0.2 performs a commit on the transaction even if the transaction si marked for rollback
+ * [ JBSEAM-2971 ] initial property value does not work if setter is missing (doesn't fall back to field)
+
+** Task
+ * [ JBSEAM-2482 ] Possible work around for Weblogic "varargs" EJB issue
+ * [ JBSEAM-2712 ] Document character encoding stuff
+ * [ JBSEAM-2931 ] Improve the exception thrown by an insecure order by clause
+ * [ JBSEAM-2945 ] seam-gen test readme.txt has out of date jars listed
+ * [ JBSEAM-2948 ] Update readme.txt testng commands to include testteport
+ * [ JBSEAM-2965 ] Glassfish JPA example readme.txt says that it does not work on glassfish - it did.
+ * [ JBSEAM-2966 ] Glassfish hibernate example readme.txt update
+ * [ JBSEAM-2967 ] Seam example's readme.txt updates
+
+** Patch
+ * [ JBSEAM-2592 ] Seam 2.0.1 GA patched to support BEA WebLogic Server 10.x with EJB3 support
+ * [ JBSEAM-2976 ] Typo in ScopeType: "psUEdo" instead of "psEUdo"
+
Release Notes - JBoss Seam - Version 2.0.2.CR2
** Feature Request
Modified: branches/Seam_2_0/readme.txt
===================================================================
--- branches/Seam_2_0/readme.txt 2008-05-13 18:27:37 UTC (rev 8179)
+++ branches/Seam_2_0/readme.txt 2008-05-13 18:56:37 UTC (rev 8180)
@@ -1,6 +1,6 @@
JBoss Seam - Contextual Component framework for Java EE 5
=========================================================
-version 2.0.2.CR2, April 2008
+version 2.0.2.GA, May 2008
This software is distributed under the terms of the FSF Lesser Gnu
Public License (see lgpl.txt).
16 years, 6 months
Seam SVN: r8179 - in trunk: examples/wicket/src/action/org/jboss/seam/example/wicket/action and 5 other directories.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-05-13 14:27:37 -0400 (Tue, 13 May 2008)
New Revision: 8179
Added:
trunk/src/wicket/org/jboss/seam/wicket/international/
trunk/src/wicket/org/jboss/seam/wicket/international/SeamStatusMessagesListener.java
trunk/src/wicket/org/jboss/seam/wicket/international/WicketStatusMessages.java
Modified:
trunk/examples/wicket/
trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/BookingListAction.java
trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/ChangePasswordAction.java
trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/HotelBookingAction.java
trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/RegisterAction.java
trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Book.java
trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Home.html
trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Main.html
trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Main.java
trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Register.java
trunk/src/main/org/jboss/seam/faces/FacesMessages.java
trunk/src/main/org/jboss/seam/international/StatusMessages.java
trunk/src/wicket/org/jboss/seam/wicket/SeamWebApplication.java
Log:
JBSEAM-2990
Property changes on: trunk/examples/wicket
___________________________________________________________________
Name: svn:ignore
+ exploded-archives
dist
Modified: trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/BookingListAction.java
===================================================================
--- trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/BookingListAction.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/BookingListAction.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -21,7 +21,7 @@
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.security.Restrict;
-import org.jboss.seam.faces.FacesMessages;
+import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.log.Log;
@Stateful
@@ -63,7 +63,7 @@
Booking cancelled = em.find(Booking.class, booking.getId());
if (cancelled!=null) em.remove( cancelled );
getBookings();
- FacesMessages.instance().add("Booking cancelled for confirmation number #{bookingList.booking.id}");
+ StatusMessages.instance().addToControl("body", "Booking cancelled for confirmation number #{bookingList.booking.id}");
}
// TODO replace this with @Out in Wicket
Modified: trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/ChangePasswordAction.java
===================================================================
--- trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/ChangePasswordAction.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/ChangePasswordAction.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -13,6 +13,7 @@
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.international.StatusMessages;
@Stateful
@Scope(EVENT)
@@ -26,14 +27,13 @@
@PersistenceContext
private EntityManager em;
- // TODO JBSEAM-2515
- //@In
- //private FacesMessages facesMessages;
+ @In(create=true)
+ private StatusMessages statusMessages;
public void changePassword()
{
user = em.merge(user);
- //facesMessages.add("Password updated");
+ statusMessages.add("Password updated");
}
@Remove
Modified: trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/HotelBookingAction.java
===================================================================
--- trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/HotelBookingAction.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/HotelBookingAction.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -18,6 +18,7 @@
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.core.Events;
+import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.log.Log;
@Stateful
@@ -39,9 +40,8 @@
@Out(required=false)
private Booking booking;
- // TODO JBSEAM-2515
- //@In
- //private FacesMessages facesMessages;
+ @In(create=true)
+ private StatusMessages statusMessages;
@In
private Events events;
@@ -74,12 +74,12 @@
calendar.add(Calendar.DAY_OF_MONTH, -1);
if ( booking.getCheckinDate().before( calendar.getTime() ) )
{
- //facesMessages.addToControl("checkinDate", "Check in date must be a future date");
+ statusMessages.addToControl("checkinDate", "Check in date must be a future date");
bookingValid=false;
}
else if ( !booking.getCheckinDate().before( booking.getCheckoutDate() ) )
{
- //facesMessages.addToControl("checkoutDate", "Check out date must be later than check in date");
+ statusMessages.addToControl("checkoutDate", "Check out date must be later than check in date");
bookingValid=false;
}
else
@@ -97,7 +97,7 @@
public void confirm()
{
em.persist(booking);
- //facesMessages.add("Thank you, #{user.name}, your confimation number for #{hotel.name} is #{booking.id}");
+ statusMessages.add("Thank you, #{user.name}, your confimation number for #{hotel.name} is #{booking.id}");
log.info("New booking: #{booking.id} for #{user.username}");
events.raiseTransactionSuccessEvent("bookingConfirmed");
}
Modified: trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/RegisterAction.java
===================================================================
--- trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/RegisterAction.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/action/org/jboss/seam/example/wicket/action/RegisterAction.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -13,6 +13,7 @@
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.international.StatusMessages;
@Stateful
@Scope(EVENT)
@@ -25,9 +26,8 @@
@PersistenceContext
private EntityManager em;
- //TODO JBSEAM-2515
- //@In
- //private FacesMessages facesMessages;
+ @In(create=true)
+ private StatusMessages statusMessages;
private String verify;
@@ -42,24 +42,24 @@
if (existing.size()==0)
{
em.persist(user);
- //facesMessages.add("Successfully registered as #{user.username}");
+ statusMessages.addToControl("login", "Successfully registered as #{user.username}");
registered = true;
}
else
{
- //facesMessages.addToControl("username", "Username #{user.username} already exists");
+ statusMessages.addToControl("username", "Username #{user.username} already exists");
}
}
else
{
- //facesMessages.addToControl("verify", "Re-enter your password");
+ statusMessages.addToControl("verify", "Re-enter your password");
verify=null;
}
}
public void invalid()
{
- //facesMessages.add("Please try again");
+ statusMessages.add("Please try again");
}
public boolean isRegistered()
Modified: trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Book.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Book.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Book.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -35,7 +35,6 @@
import org.apache.wicket.validation.ValidationError;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.security.Restrict;
-import org.jboss.seam.core.Conversation;
import org.jboss.seam.example.wicket.action.Booking;
import org.jboss.seam.example.wicket.action.HotelBooking;
@@ -134,10 +133,6 @@
{
setResponsePage(Confirm.class);
}
- else
- {
- error(new ValidationError().setMessage("Error"));
- }
}
@Override
@@ -153,6 +148,5 @@
protected void onBeforeRender()
{
super.onBeforeRender();
- System.out.println("cid " + Conversation.instance().getId());
}
}
Modified: trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Home.html
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Home.html 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Home.html 2008-05-13 18:27:37 UTC (rev 8179)
@@ -19,7 +19,6 @@
<div>
<label for="username">Login Name</label>
<input wicket:id="username" style="width: 175px;"/>
- <div class="errors"><h:message for="username"/></div>
</div>
<div>
<label for="password">Password</label>
Modified: trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Main.html
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Main.html 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Main.html 2008-05-13 18:27:37 UTC (rev 8179)
@@ -9,9 +9,9 @@
<!-- content -->
<div class="section">
+ <span class="errors" wicket:id="messages" />
+
<form wicket:id="searchCriteria">
-
- <span class="errors" wicket:id="messages" />
<h1>Search Hotels</h1>
Modified: trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Main.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Main.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Main.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -63,9 +63,9 @@
private HotelSearchForm hotelSearchForm;
private WebMarkupContainer hotels;
private Component noHotelsFound;
+ private Component messages;
-
public Main(final PageParameters parameters)
{
Template body = new Template("body");
@@ -73,6 +73,9 @@
hotelSearchForm = new HotelSearchForm("searchCriteria");
body.add(hotelSearchForm);
+ messages = new ComponentFeedbackPanel("messages", this).setOutputMarkupId(true);
+ add(messages);
+
/*
* Hotel Search results
*/
@@ -120,7 +123,8 @@
@Override
public boolean isVisible()
{
- return Identity.instance().isLoggedIn() && hotelSearch.getHotels().size() > 0;
+ return true;
+ //return Identity.instance().isLoggedIn() && hotelSearch.getHotels().size() > 0;
}
};
@@ -226,8 +230,6 @@
add(new TextField("searchString", new PropertyModel(hotelSearch, "searchString")));
List<Integer> pageSizes = Arrays.asList(new Integer[] { 5, 10, 20 });
add(new DropDownChoice("pageSize", new PropertyModel(this, "pageSize"), pageSizes));
- final Component messages = new ComponentFeedbackPanel("messages", this).setOutputMarkupId(true);
- add(messages);
add(new IndicatingAjaxButton("submit", this)
{
Modified: trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Register.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Register.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/examples/wicket/src/web/org/jboss/seam/example/wicket/Register.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -26,7 +26,9 @@
public Register()
{
- add(new RegisterForm("registration"));
+ Form registerForm = new RegisterForm("registration");
+ add(registerForm);
+ registerForm.add(new ComponentFeedbackPanel("messages", this));
}
public class RegisterForm extends Form
@@ -44,7 +46,6 @@
FormComponent verify = new PasswordTextField("verify").setRequired(true);
add(new FormInputBorder("passwordDecorate", "Password", password , new PropertyModel(user, "password")));
add(new FormInputBorder("verifyDecorate", "Verify Password", verify, new PropertyModel(register, "verify")));
- add(new ComponentFeedbackPanel("messages", this));
add(new EqualPasswordInputValidator(password, verify));
}
@@ -52,7 +53,10 @@
protected void onSubmit()
{
register.register();
- setResponsePage(Home.class);
+ if (register.isRegistered())
+ {
+ setResponsePage(Home.class);
+ }
}
}
Modified: trunk/src/main/org/jboss/seam/faces/FacesMessages.java
===================================================================
--- trunk/src/main/org/jboss/seam/faces/FacesMessages.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/src/main/org/jboss/seam/faces/FacesMessages.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -49,7 +49,8 @@
{
for ( StatusMessage statusMessage: entry.getValue() )
{
- FacesContext.getCurrentInstance().addMessage( entry.getKey(), toFacesMessage(statusMessage) );
+ String clientId = getClientId(entry.getKey());
+ FacesContext.getCurrentInstance().addMessage( clientId, toFacesMessage(statusMessage) );
}
}
clear();
@@ -128,11 +129,10 @@
}
}
- @Override
/**
* Calculate the JSF client ID from the provided widget ID
*/
- protected String getClientId(String id)
+ private String getClientId(String id)
{
FacesContext facesContext = FacesContext.getCurrentInstance();
return getClientId( facesContext.getViewRoot(), id, facesContext);
Modified: trunk/src/main/org/jboss/seam/international/StatusMessages.java
===================================================================
--- trunk/src/main/org/jboss/seam/international/StatusMessages.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/src/main/org/jboss/seam/international/StatusMessages.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -52,6 +52,16 @@
keyedMessages.clear();
}
+ public void clearKeyedMessages(String id)
+ {
+ keyedMessages.remove(id);
+ }
+
+ public void clearGlobalMessages()
+ {
+ messages.clear();
+ }
+
/**
* Add a status message, looking up the message in the resource bundle
* using the provided key. If the message is found, it is used, otherwise,
@@ -100,16 +110,15 @@
public void run()
{
StatusMessage message = new StatusMessage(severity, key, null, messageTemplate, null, params);
- String clientId = getClientId(id);
- if (keyedMessages.containsKey(clientId))
+ if (keyedMessages.containsKey(id))
{
- keyedMessages.get(clientId).add(message);
+ keyedMessages.get(id).add(message);
}
else
{
List<StatusMessage> list = new ArrayList<StatusMessage>();
list.add(message);
- keyedMessages.put(clientId, list);
+ keyedMessages.put(id, list);
}
}
@@ -117,8 +126,6 @@
);
}
-
- protected abstract String getClientId(String id);
/**
* Create a new status message, with the messageTemplate is as the message.
@@ -371,7 +378,7 @@
}
}
- private void doRunTasks()
+ protected void doRunTasks()
{
if (tasks!=null)
{
Modified: trunk/src/wicket/org/jboss/seam/wicket/SeamWebApplication.java
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/SeamWebApplication.java 2008-05-13 17:15:06 UTC (rev 8178)
+++ trunk/src/wicket/org/jboss/seam/wicket/SeamWebApplication.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -15,6 +15,7 @@
import org.apache.wicket.request.target.component.listener.IListenerInterfaceRequestTarget;
import org.jboss.seam.core.Conversation;
import org.jboss.seam.core.Manager;
+import org.jboss.seam.wicket.international.SeamStatusMessagesListener;
import org.jboss.seam.wicket.ioc.SeamInjectionListener;
/**
@@ -113,6 +114,7 @@
super.init();
inititializeSeamSecurity();
initializeSeamInjection();
+ initializeSeamStatusMessages();
}
/**
@@ -135,6 +137,14 @@
{
addComponentInstantiationListener(new SeamInjectionListener());
}
+
+ /**
+ * Add Seam status message transport support to youur app.
+ */
+ protected void initializeSeamStatusMessages()
+ {
+ addComponentOnBeforeRenderListener(new SeamStatusMessagesListener());
+ }
protected abstract Class getLoginPage();
Added: trunk/src/wicket/org/jboss/seam/wicket/international/SeamStatusMessagesListener.java
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/international/SeamStatusMessagesListener.java (rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/international/SeamStatusMessagesListener.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -0,0 +1,64 @@
+package org.jboss.seam.wicket.international;
+
+import java.util.List;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.application.IComponentOnBeforeRenderListener;
+import org.jboss.seam.international.StatusMessage;
+
+
+public class SeamStatusMessagesListener implements IComponentOnBeforeRenderListener
+{
+
+ public void onBeforeRender(Component component)
+ {
+
+ WicketStatusMessages wicketStatusMessages = WicketStatusMessages.instance();
+ wicketStatusMessages.onBeforeRender();
+
+ if (component instanceof Page)
+ {
+ // If the component is the page, then we also add global messages
+ List<StatusMessage> statusMessages = wicketStatusMessages.getGlobalMessages();
+ if (statusMessages != null)
+ {
+ for (StatusMessage statusMessage: statusMessages)
+ {
+ addFeedbackMessage(statusMessage, component);
+ }
+ }
+ wicketStatusMessages.clearGlobalMessages();
+ }
+
+ List<StatusMessage> statusMessages = wicketStatusMessages.getKeyedMessages(component.getId());
+ if (statusMessages != null)
+ {
+ for (StatusMessage statusMessage: statusMessages)
+ {
+ addFeedbackMessage(statusMessage, component);
+ }
+ wicketStatusMessages.clearKeyedMessages(component.getId());
+ }
+ }
+
+ private void addFeedbackMessage(StatusMessage statusMessage, Component component)
+ {
+ switch (statusMessage.getSeverity())
+ {
+ case ERROR:
+ component.error(statusMessage.getSummary());
+ break;
+ case FATAL:
+ component.fatal(statusMessage.getSummary());
+ break;
+ case INFO:
+ component.info(statusMessage.getSummary());
+ break;
+ case WARN:
+ component.warn(statusMessage.getSummary());
+ break;
+ }
+ }
+
+}
Property changes on: trunk/src/wicket/org/jboss/seam/wicket/international/SeamStatusMessagesListener.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/src/wicket/org/jboss/seam/wicket/international/WicketStatusMessages.java
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/international/WicketStatusMessages.java (rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/international/WicketStatusMessages.java 2008-05-13 18:27:37 UTC (rev 8179)
@@ -0,0 +1,48 @@
+package org.jboss.seam.wicket.international;
+
+import static org.jboss.seam.annotations.Install.FRAMEWORK;
+
+import java.util.List;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.international.StatusMessage;
+import org.jboss.seam.international.StatusMessages;
+
+(a)Scope(ScopeType.CONVERSATION)
+(a)Name(StatusMessages.COMPONENT_NAME)
+@Install(precedence=FRAMEWORK, classDependencies="org.apache.wicket.Application")
+@BypassInterceptors
+public class WicketStatusMessages extends StatusMessages
+{
+
+ public void onBeforeRender()
+ {
+ doRunTasks();
+ }
+
+ public List<StatusMessage> getKeyedMessages(String id)
+ {
+ return instance().getKeyedMessages().get(id);
+ }
+
+ public List<StatusMessage> getGlobalMessages()
+ {
+ return instance().getMessages();
+ }
+
+ public static WicketStatusMessages instance()
+ {
+ if ( !Contexts.isConversationContextActive() )
+ {
+ throw new IllegalStateException("No active conversation context");
+ }
+ return (WicketStatusMessages) Component.getInstance(StatusMessages.COMPONENT_NAME, ScopeType.CONVERSATION);
+ }
+
+}
Property changes on: trunk/src/wicket/org/jboss/seam/wicket/international/WicketStatusMessages.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
16 years, 6 months
Seam SVN: r8178 - branches/Seam_2_0/examples/jee5/booking/view.
by seam-commits@lists.jboss.org
Author: jbalunas(a)redhat.com
Date: 2008-05-13 13:15:06 -0400 (Tue, 13 May 2008)
New Revision: 8178
Modified:
branches/Seam_2_0/examples/jee5/booking/view/main.xhtml
Log:
JBSEAM-2592, JBSEAM-2964 - Helps a problem where entering values in the hotel search input box results in concurrent EJB call errors. This may not actually be concurrent calls but the errors state that.
Modified: branches/Seam_2_0/examples/jee5/booking/view/main.xhtml
===================================================================
--- branches/Seam_2_0/examples/jee5/booking/view/main.xhtml 2008-05-13 12:45:40 UTC (rev 8177)
+++ branches/Seam_2_0/examples/jee5/booking/view/main.xhtml 2008-05-13 17:15:06 UTC (rev 8178)
@@ -20,7 +20,9 @@
<h1>Search Hotels</h1>
<fieldset>
<h:inputText id="searchString" value="#{hotelSearch.searchString}" style="width: 165px;">
- <a:support event="onkeyup" actionListener="#{hotelSearch.find}" reRender="searchResults" />
+ <a:support event="onkeyup" actionListener="#{hotelSearch.find}" reRender="searchResults" eventsQueue="searchQueue">
+ <s:conversationId/>
+ </a:support>
</h:inputText>
 
<a:commandButton id="findHotels" value="Find Hotels" action="#{hotelSearch.find}" reRender="searchResults"/>
16 years, 6 months
Seam SVN: r8177 - in trunk/src/main: org/jboss/seam/faces and 1 other directories.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-05-13 08:45:40 -0400 (Tue, 13 May 2008)
New Revision: 8177
Added:
trunk/src/main/org/jboss/seam/faces/FacesMessages.java
trunk/src/main/org/jboss/seam/international/StatusMessage.java
trunk/src/main/org/jboss/seam/international/StatusMessages.java
Removed:
trunk/src/main/org/jboss/seam/faces/FacesMessages.java
Modified:
trunk/src/main/META-INF/components.xml
Log:
JBSEAM-2515
Modified: trunk/src/main/META-INF/components.xml
===================================================================
--- trunk/src/main/META-INF/components.xml 2008-05-13 12:44:38 UTC (rev 8176)
+++ trunk/src/main/META-INF/components.xml 2008-05-13 12:45:40 UTC (rev 8177)
@@ -20,5 +20,9 @@
<import>org.jboss.seam.captcha</import>
<factory name="org.jboss.seam.web.webSession" auto-create="true" scope="stateless" value="#{org.jboss.seam.web.session}" />
+
+ <factory name="facesMessages" auto-create="true" scope="stateless" value="#{org.jboss.seam.international.statusMessages}" />
+
+ <factory name="org.jboss.seam.faces.facesMessages" auto-create="true" scope="stateless" value="#{org.jboss.seam.international.statusMessages}" />
</components>
Deleted: trunk/src/main/org/jboss/seam/faces/FacesMessages.java
===================================================================
--- trunk/src/main/org/jboss/seam/faces/FacesMessages.java 2008-05-13 12:44:38 UTC (rev 8176)
+++ trunk/src/main/org/jboss/seam/faces/FacesMessages.java 2008-05-13 12:45:40 UTC (rev 8177)
@@ -1,445 +0,0 @@
-package org.jboss.seam.faces;
-
-import static org.jboss.seam.annotations.Install.BUILT_IN;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.application.FacesMessage.Severity;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-import org.hibernate.validator.InvalidValue;
-import org.jboss.seam.Component;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.Install;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.intercept.BypassInterceptors;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.core.Interpolator;
-import org.jboss.seam.core.SeamResourceBundle;
-import org.jboss.seam.util.Strings;
-
-/**
- * A Seam component that propagates FacesMessages across redirects
- * and interpolates EL expressions in the message string.
- *
- * @author Gavin King
- */
-(a)Scope(ScopeType.CONVERSATION)
-@Name("org.jboss.seam.faces.facesMessages")
-@Install(precedence=BUILT_IN, classDependencies="javax.faces.context.FacesContext")
-@BypassInterceptors
-public class FacesMessages implements Serializable
-{
- private static final long serialVersionUID = -5395975397632138270L;
- private transient List<Runnable> tasks;
-
- private List<Message> facesMessages = new ArrayList<Message>();
- private Map<String, List<Message>> keyedFacesMessages = new HashMap<String, List<Message>>();
-
- /**
- * Workaround for non-serializability of
- * JSF FacesMessage.Severity class.
- *
- * @author Gavin King
- *
- */
- class Message implements Serializable
- {
- private String summary;
- private String detail;
- private int severityOrdinal;
-
- Message(FacesMessage fm)
- {
- summary = fm.getSummary();
- detail = fm.getDetail();
- severityOrdinal = fm.getSeverity().getOrdinal();
- }
-
- FacesMessage toFacesMessage()
- {
- Severity severity = null;
- for (Object o : FacesMessage.VALUES)
- {
- severity = (Severity) o;
- if (severity.getOrdinal() == severityOrdinal)
- {
- break;
- }
- }
- return new FacesMessage(severity, summary, detail );
- }
- }
-
- public void beforeRenderResponse()
- {
- for (Message message: facesMessages)
- {
- FacesContext.getCurrentInstance().addMessage( null,message.toFacesMessage() );
- }
- for ( Map.Entry<String, List<Message>> entry: keyedFacesMessages.entrySet() )
- {
- for ( Message msg: entry.getValue() )
- {
- FacesContext.getCurrentInstance().addMessage( entry.getKey(), msg.toFacesMessage() );
- }
- }
- clear();
- }
-
- /**
- * Get all faces messages that have already been added
- * to the context.
- *
- * @return a list of messages
- */
- public List<FacesMessage> getCurrentMessages()
- {
- List<FacesMessage> result = new ArrayList<FacesMessage>();
- Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages();
- while ( iter.hasNext() )
- {
- result.add( iter.next() );
- }
- return result;
- }
-
- /**
- * Get all faces global messages that have already been added
- * to the context.
- *
- * @return a list of global messages
- */
- public List<FacesMessage> getCurrentGlobalMessages()
- {
- List<FacesMessage> result = new ArrayList<FacesMessage>();
- Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages(null);
- while ( iter.hasNext() )
- {
- result.add( iter.next() );
- }
- return result;
- }
-
- /**
- * Get all faces messages that have already been added
- * to the control.
- *
- * @return a list of messages
- */
- public List<FacesMessage> getCurrentMessagesForControl(String id)
- {
- String clientId = getClientId(id);
- List<FacesMessage> result = new ArrayList<FacesMessage>();
- Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages(clientId);
- while ( iter.hasNext() )
- {
- result.add( iter.next() );
- }
- return result;
- }
-
- private void runTasks()
- {
- if (tasks!=null)
- {
- for (Runnable task: tasks) task.run();
- tasks.clear();
- }
- }
-
- public static void afterPhase()
- {
- if ( Contexts.isConversationContextActive() )
- {
- FacesMessages instance = (FacesMessages) Component.getInstance(FacesMessages.class, ScopeType.CONVERSATION, false);
- if (instance!=null) instance.runTasks();
- }
- }
-
- public void clear()
- {
- facesMessages.clear();
- keyedFacesMessages.clear();
- }
-
- /**
- * Add a FacesMessage that will be used
- * the next time a page is rendered.
- */
- public void add(FacesMessage facesMessage)
- {
- if (facesMessage!=null)
- {
- facesMessages.add( new Message(facesMessage) );
- }
- }
-
- /**
- * Add a FacesMessage instance to a particular component id
- * @param id a JSF component id
- */
- public void addToControl(String id, FacesMessage facesMessage)
- {
- if (facesMessage!=null)
- {
- String clientId = getClientId(id);
- List<Message> list = keyedFacesMessages.get(clientId);
- if (list==null)
- {
- list = new ArrayList<Message>();
- keyedFacesMessages.put(clientId, list);
- }
- list.add( new Message(facesMessage) );
- }
- }
-
- /**
- * Add a templated FacesMessage that will be used
- * the next time a page is rendered.
- */
- public void add(String messageTemplate, Object... params)
- {
- addToTasks(FacesMessage.SEVERITY_INFO, null, messageTemplate, params);
- }
-
- /**
- * Add a templated FacesMessage that will be used
- * the next time a page is rendered.
- */
- public void add(Severity severity, String messageTemplate, Object... params)
- {
- addToTasks(severity, null, messageTemplate, params);
- }
-
- /**
- * Add a templated FacesMessage to a particular JSF control
- * @param id a JSF component id
- */
- public void addToControl(String id, String messageTemplate, Object... params)
- {
- addToControl(id, FacesMessage.SEVERITY_INFO, messageTemplate, params);
- }
-
- /**
- * Add a templated FacesMessage to a particular JSF control
- * @param id a JSF component id
- */
- public void addToControl(String id, Severity severity, String messageTemplate, Object... params)
- {
- addToTasks(id, severity, null, messageTemplate, params);
- }
-
- /**
- * Add a templated FacesMessage by looking for the message
- * template in the resource bundle.
- */
- public void addFromResourceBundle(String key, Object... params)
- {
- addFromResourceBundle(FacesMessage.SEVERITY_INFO, key, params);
- }
-
- /**
- * Add a templated FacesMessage by looking for the message
- * template in the resource bundle.
- */
- public void addFromResourceBundle(Severity severity, String key, Object... params)
- {
- addFromResourceBundleOrDefault(severity, key, key, params);
- }
-
- /**
- * Add a templated FacesMessage to a particular component id by looking
- * for the message template in the resource bundle. If it is missing, use
- * the given message template.
- */
- public void addFromResourceBundleOrDefault(String key, String defaultMessageTemplate, Object... params)
- {
- addFromResourceBundleOrDefault(FacesMessage.SEVERITY_INFO, key, defaultMessageTemplate, params);
- }
-
- /**
- * Add a templated FacesMessage to a particular component id by looking
- * for the message template in the resource bundle. If it is missing, use
- * the given message template.
- */
- public void addFromResourceBundleOrDefault(Severity severity, String key, String defaultMessageTemplate, Object... params)
- {
- addToTasks(severity, key, defaultMessageTemplate, params);
- }
-
- /**
- * Add a templated FacesMessage to a particular component id by looking
- * for the message template in the resource bundle.
- */
- public void addToControlFromResourceBundle(String id, String key, Object... params)
- {
- addToControlFromResourceBundle(id, FacesMessage.SEVERITY_INFO, key, params);
- }
-
- /**
- * Add a templated FacesMessage to a particular component id by looking
- * for the message template in the resource bundle.
- */
- public void addToControlFromResourceBundle(String id, Severity severity, String key, Object... params)
- {
- addToControlFromResourceBundleOrDefault(id, severity, key, key, params);
- }
-
- /**
- * Add a templated FacesMessage to a particular component id by looking
- * for the message template in the resource bundle. If it is missing, use
- * the given message template.
- */
- public void addToControlFromResourceBundleOrDefault(String id, String key, String defaultMessageTemplate, Object... params)
- {
- addToControlFromResourceBundleOrDefault(id, FacesMessage.SEVERITY_INFO, key, defaultMessageTemplate, params);
- }
-
- /**
- * Add a templated FacesMessage to a particular component id by looking
- * for the message template in the resource bundle. If it is missing, use
- * the given message template.
- */
- public void addToControlFromResourceBundleOrDefault(String id, Severity severity, String key, String defaultMessageTemplate, Object... params)
- {
- addToTasks(id, severity, key, defaultMessageTemplate, params);
- }
-
- private static String getBundleMessage(String key, String defaultMessageTemplate)
- {
- String messageTemplate = defaultMessageTemplate;
- if ( key!=null )
- {
- ResourceBundle resourceBundle = SeamResourceBundle.getBundle();
- if ( resourceBundle!=null )
- {
- try
- {
- String bundleMessage = resourceBundle.getString(key);
- if (bundleMessage!=null) messageTemplate = bundleMessage;
- }
- catch (MissingResourceException mre) {} //swallow
- }
- }
- return messageTemplate;
- }
-
- public void add(InvalidValue[] ivs)
- {
- for (InvalidValue iv: ivs)
- {
- add(iv);
- }
- }
-
- public void addToControls(InvalidValue[] ivs)
- {
- for (InvalidValue iv: ivs)
- {
- addToControl(iv);
- }
- }
-
- public void add(InvalidValue iv)
- {
- add( FacesMessage.SEVERITY_WARN, iv.getMessage() );
- }
-
- public void addToControl(InvalidValue iv)
- {
- addToControl( iv.getPropertyName(), iv );
- }
-
- public void addToControl(String id, InvalidValue iv)
- {
- addToControl( id, FacesMessage.SEVERITY_WARN, iv.getMessage() );
- }
-
- public static FacesMessage createFacesMessage(Severity severity, String messageTemplate, Object... params)
- {
- return new FacesMessage( severity, Interpolator.instance().interpolate(messageTemplate, params), null );
- }
-
- public static FacesMessage createFacesMessage(Severity severity, String key, String defaultMessageTemplate, Object... params)
- {
- String message = getBundleMessage(key, defaultMessageTemplate);
- if ( !Strings.isEmpty(message) )
- {
- return createFacesMessage( severity, message, params );
- }
- else
- {
- return null;
- }
- }
-
- private String getClientId(String id)
- {
- FacesContext facesContext = FacesContext.getCurrentInstance();
- return getClientId( facesContext.getViewRoot(), id, facesContext);
- }
-
- private static String getClientId(UIComponent component, String id, FacesContext facesContext)
- {
- String componentId = component.getId();
- if (componentId!=null && componentId.equals(id))
- {
- return component.getClientId(facesContext);
- }
- else
- {
- Iterator iter = component.getFacetsAndChildren();
- while ( iter.hasNext() )
- {
- UIComponent child = (UIComponent) iter.next();
- String clientId = getClientId(child, id, facesContext);
- if (clientId!=null) return clientId;
- }
- return null;
- }
- }
-
- private List<Runnable> getTasks()
- {
- if (tasks==null)
- {
- tasks = new ArrayList<Runnable>();
- }
- return tasks;
- }
-
- private void addToTasks(final Severity severity, final String key, final String messageTemplate, final Object... params)
- {
- getTasks().add( new Runnable() {
- public void run() { add( createFacesMessage(severity, key, messageTemplate, params) ); }
- } );
- }
-
- private void addToTasks(final String id, final Severity severity, final String key, final String messageTemplate, final Object... params)
- {
- getTasks().add( new Runnable() {
- public void run() { addToControl( id, createFacesMessage(severity, key, messageTemplate, params) ); }
- } );
- }
-
- public static FacesMessages instance()
- {
- if ( !Contexts.isConversationContextActive() )
- {
- throw new IllegalStateException("No active conversation context");
- }
- return (FacesMessages) Component.getInstance(FacesMessages.class, ScopeType.CONVERSATION);
- }
-
-}
Added: trunk/src/main/org/jboss/seam/faces/FacesMessages.java
===================================================================
--- trunk/src/main/org/jboss/seam/faces/FacesMessages.java (rev 0)
+++ trunk/src/main/org/jboss/seam/faces/FacesMessages.java 2008-05-13 12:45:40 UTC (rev 8177)
@@ -0,0 +1,354 @@
+package org.jboss.seam.faces;
+
+import static org.jboss.seam.annotations.Install.BUILT_IN;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.international.StatusMessage;
+import org.jboss.seam.international.StatusMessages;
+import org.jboss.seam.util.Strings;
+
+/**
+ * A Seam component that propagates FacesMessages across redirects
+ * and interpolates EL expressions in the message string.
+ *
+ * @author Gavin King
+ * @author Pete Muir
+ */
+(a)Scope(ScopeType.CONVERSATION)
+(a)Name(StatusMessages.COMPONENT_NAME)
+@Install(precedence=BUILT_IN, classDependencies="javax.faces.context.FacesContext")
+@BypassInterceptors
+public class FacesMessages extends StatusMessages
+{
+
+ /**
+ * Called by Seam to transfer messages from FacesMessages to JSF
+ */
+ public void beforeRenderResponse()
+ {
+ for (StatusMessage statusMessage: getMessages())
+ {
+ FacesContext.getCurrentInstance().addMessage( null, toFacesMessage(statusMessage) );
+ }
+ for ( Map.Entry<String, List<StatusMessage>> entry: getKeyedMessages().entrySet() )
+ {
+ for ( StatusMessage statusMessage: entry.getValue() )
+ {
+ FacesContext.getCurrentInstance().addMessage( entry.getKey(), toFacesMessage(statusMessage) );
+ }
+ }
+ clear();
+ }
+
+ /**
+ * Called by Seam to transfer any messages added in the phase just processed
+ * to the FacesMessages component.
+ *
+ * A task runner is used to allow the messages access to outjected values.
+ */
+ public static void afterPhase()
+ {
+ runTasks();
+ }
+
+ /**
+ * Convert a StatusMessage to a FacesMessage
+ */
+ private static FacesMessage toFacesMessage(StatusMessage statusMessage)
+ {
+ if (!Strings.isEmpty(statusMessage.getSummary()))
+ {
+ return new FacesMessage(toSeverity(statusMessage.getSeverity()), statusMessage.getSummary(), statusMessage.getDetail() );
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Convert a StatusMessage.Severity to a FacesMessage.Severity
+ */
+ private static javax.faces.application.FacesMessage.Severity toSeverity(org.jboss.seam.international.StatusMessage.Severity severity)
+ {
+ switch (severity)
+ {
+ case ERROR:
+ return FacesMessage.SEVERITY_ERROR;
+ case FATAL:
+ return FacesMessage.SEVERITY_FATAL;
+ case INFO:
+ return FacesMessage.SEVERITY_INFO;
+ case WARN:
+ return FacesMessage.SEVERITY_WARN;
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Convert a FacesMessage.Severity to a StatusMessage.Severity
+ */
+ private static org.jboss.seam.international.StatusMessage.Severity toSeverity(javax.faces.application.FacesMessage.Severity severity)
+ {
+ if (FacesMessage.SEVERITY_ERROR.equals(severity))
+ {
+ return org.jboss.seam.international.StatusMessage.Severity.ERROR;
+ }
+ else if (FacesMessage.SEVERITY_FATAL.equals(severity))
+ {
+ return org.jboss.seam.international.StatusMessage.Severity.FATAL;
+ }
+ else if (FacesMessage.SEVERITY_INFO.equals(severity))
+ {
+ return org.jboss.seam.international.StatusMessage.Severity.INFO;
+ }
+ else if (FacesMessage.SEVERITY_WARN.equals(severity))
+ {
+ return org.jboss.seam.international.StatusMessage.Severity.WARN;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ @Override
+ /**
+ * Calculate the JSF client ID from the provided widget ID
+ */
+ protected String getClientId(String id)
+ {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ return getClientId( facesContext.getViewRoot(), id, facesContext);
+ }
+
+ private static String getClientId(UIComponent component, String id, FacesContext facesContext)
+ {
+ String componentId = component.getId();
+ if (componentId!=null && componentId.equals(id))
+ {
+ return component.getClientId(facesContext);
+ }
+ else
+ {
+ Iterator iter = component.getFacetsAndChildren();
+ while ( iter.hasNext() )
+ {
+ UIComponent child = (UIComponent) iter.next();
+ String clientId = getClientId(child, id, facesContext);
+ if (clientId!=null) return clientId;
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Get all faces messages that have already been added
+ * to the context.
+ *
+ */
+ public List<FacesMessage> getCurrentMessages()
+ {
+ List<FacesMessage> result = new ArrayList<FacesMessage>();
+ Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages();
+ while ( iter.hasNext() )
+ {
+ result.add( iter.next() );
+ }
+ return result;
+ }
+
+ /**
+ * Get all faces global messages that have already been added
+ * to the context.
+ *
+ */
+ public List<FacesMessage> getCurrentGlobalMessages()
+ {
+ List<FacesMessage> result = new ArrayList<FacesMessage>();
+ Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages(null);
+ while ( iter.hasNext() )
+ {
+ result.add( iter.next() );
+ }
+ return result;
+ }
+
+ /**
+ * Get all faces messages that have already been added
+ * to the control.
+ *
+ */
+ public List<FacesMessage> getCurrentMessagesForControl(String id)
+ {
+ String clientId = getClientId(id);
+ List<FacesMessage> result = new ArrayList<FacesMessage>();
+ Iterator<FacesMessage> iter = FacesContext.getCurrentInstance().getMessages(clientId);
+ while ( iter.hasNext() )
+ {
+ result.add( iter.next() );
+ }
+ return result;
+ }
+
+ /**
+ * Utility method to create a FacesMessage from a Severity, messageTemplate
+ * and params.
+ *
+ * This method interpolates the parameters provided
+ */
+ public static FacesMessage createFacesMessage(javax.faces.application.FacesMessage.Severity severity, String messageTemplate, Object... params)
+ {
+ return toFacesMessage(new StatusMessage(toSeverity(severity), null, null, messageTemplate, null, params));
+ }
+
+ /**
+ * Utility method to create a FacesMessage from a Severity, key,
+ * defaultMessageTemplate and params.
+ *
+ * This method interpolates the parameters provided
+ */
+ public static FacesMessage createFacesMessage(javax.faces.application.FacesMessage.Severity severity, String key, String defaultMessageTemplate, Object... params)
+ {
+ return toFacesMessage(new StatusMessage(toSeverity(severity), key, null, defaultMessageTemplate, null, params));
+ }
+
+ /**
+ * Add a FacesMessage that will be used
+ * the next time a page is rendered.
+ *
+ * Deprecated, use {@link #add(StatusMessage)} instead
+ */
+ @Deprecated
+ public void add(FacesMessage facesMessage)
+ {
+ if (facesMessage!=null)
+ {
+ add(new StatusMessage(facesMessage.getSummary(), facesMessage.getDetail(), toSeverity(facesMessage.getSeverity())));
+ }
+ }
+
+ /**
+ * Create a new status message, with the messageTemplate is as the message.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ * Deprecated, use {@link #add(org.jboss.seam.international.StatusMessage.Severity, String, Object...)}
+ * instead
+ */
+ @Deprecated
+ public void add(javax.faces.application.FacesMessage.Severity severity, String messageTemplate, Object... params)
+ {
+ add(toSeverity(severity), messageTemplate, params);
+ }
+
+
+ /**
+ * Create a new status message, with the messageTemplate is as the message.
+ *
+ * A severity of INFO will be used, and you can specify paramters to be
+ * interpolated
+ *
+ * Deprecated, use {@link #addToControl(String, org.jboss.seam.international.StatusMessage.Severity, String, Object...)}
+ * instead
+ */
+ @Deprecated
+ public void addToControl(String id, javax.faces.application.FacesMessage.Severity severity, String messageTemplate, Object... params)
+ {
+ addToControl(id, toSeverity(severity), messageTemplate, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ * Deprecated, use {@link #addFromResourceBundle(org.jboss.seam.international.StatusMessage.Severity, String, Object...)}
+ * instead
+ */
+ @Deprecated
+ public void addFromResourceBundle(javax.faces.application.FacesMessage.Severity severity, String key, Object... params)
+ {
+ addFromResourceBundle(toSeverity(severity), key, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ * Deprecated, use {@link #addFromResourceBundleOrDefault(javax.faces.application.FacesMessage.Severity, String, String, Object...)}
+ * instead
+ */
+ @Deprecated
+ public void addFromResourceBundleOrDefault(javax.faces.application.FacesMessage.Severity severity, String key, String defaultMessageTemplate, Object... params)
+ {
+ addFromResourceBundle(toSeverity(severity), key, defaultMessageTemplate, params);
+ }
+
+ /**
+ * Create a new status message, looking up the message in the resource bundle
+ * using the provided key.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ * Deprecated, use {@link #addToControlFromResourceBundle(String, org.jboss.seam.international.StatusMessage.Severity, String, Object...)}
+ * instead
+ */
+ @Deprecated
+ public void addToControlFromResourceBundle(String id, javax.faces.application.FacesMessage.Severity severity, String key, Object... params)
+ {
+ addToControlFromResourceBundle(id, toSeverity(severity), key, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ * Deprecated, use {@link #addToControlFromResourceBundleOrDefault(String, org.jboss.seam.international.StatusMessage.Severity, String, String, Object...)}
+ * instead
+ */
+ @Deprecated
+ public void addToControlFromResourceBundleOrDefault(String id, javax.faces.application.FacesMessage.Severity severity, String key, String defaultMessageTemplate, Object... params)
+ {
+ addToControlFromResourceBundleOrDefault(id, toSeverity(severity), key, defaultMessageTemplate, params);
+ }
+
+ public static FacesMessages instance()
+ {
+ if ( !Contexts.isConversationContextActive() )
+ {
+ throw new IllegalStateException("No active conversation context");
+ }
+ return (FacesMessages) Component.getInstance(StatusMessages.COMPONENT_NAME, ScopeType.CONVERSATION);
+ }
+}
Property changes on: trunk/src/main/org/jboss/seam/faces/FacesMessages.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/src/main/org/jboss/seam/international/StatusMessage.java
===================================================================
--- trunk/src/main/org/jboss/seam/international/StatusMessage.java (rev 0)
+++ trunk/src/main/org/jboss/seam/international/StatusMessage.java 2008-05-13 12:45:40 UTC (rev 8177)
@@ -0,0 +1,115 @@
+package org.jboss.seam.international;
+
+import java.io.Serializable;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.jboss.seam.core.Interpolator;
+import org.jboss.seam.core.SeamResourceBundle;
+import org.jboss.seam.util.Strings;
+
+/**
+ * A status message which can be created in the business layer and displayed
+ * in the view layer
+ *
+ * @author Pete Muir
+ *
+ */
+public class StatusMessage implements Serializable
+{
+
+ /**
+ * The severity of the status message
+ *
+ */
+ public enum Severity
+ {
+ INFO,
+ WARN,
+ ERROR,
+ FATAL;
+ }
+
+ private String summary;
+ private String detail;
+ private Severity severity = Severity.INFO;
+
+ /**
+ * Create a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ */
+ public StatusMessage(Severity severity, String key, String detailKey, String defaultMessageTemplate, String defaultMessageDetailTemplate, Object... params)
+ {
+ String messageTemplate = getBundleMessage(key, defaultMessageTemplate);
+ String messageDetailTemplate = getBundleMessage(detailKey, defaultMessageDetailTemplate);
+ if ( !Strings.isEmpty(messageTemplate) )
+ {
+ this.severity = severity;
+ this.summary = Interpolator.instance().interpolate(messageTemplate, params);
+ if (!Strings.isEmpty(messageDetailTemplate))
+ {
+ this.detail = Interpolator.instance().interpolate(messageDetailTemplate, params);
+ }
+ }
+ }
+
+ public StatusMessage(String summary, String detail, Severity severity)
+ {
+ this.summary = summary;
+ this.detail = detail;
+ this.severity = severity;
+ }
+
+ /**
+ * Get the message
+ *
+ */
+ public String getSummary()
+ {
+ return summary;
+ }
+
+ /**
+ * Get the message severity
+ */
+ public Severity getSeverity()
+ {
+ return severity;
+ }
+
+ public String getDetail()
+ {
+ return detail;
+ }
+
+ public static String getBundleMessage(String key, String defaultMessageTemplate)
+ {
+ String messageTemplate = defaultMessageTemplate;
+ if ( key!=null )
+ {
+ ResourceBundle resourceBundle = SeamResourceBundle.getBundle();
+ if ( resourceBundle!=null )
+ {
+ try
+ {
+ String bundleMessage = resourceBundle.getString(key);
+ if (bundleMessage!=null)
+ {
+ messageTemplate = bundleMessage;
+ }
+ }
+ catch (MissingResourceException mre) {} //swallow
+ }
+ }
+ return messageTemplate;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "[" + severity + "] " + summary + " (" + detail +")";
+ }
+
+}
Property changes on: trunk/src/main/org/jboss/seam/international/StatusMessage.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/src/main/org/jboss/seam/international/StatusMessages.java
===================================================================
--- trunk/src/main/org/jboss/seam/international/StatusMessages.java (rev 0)
+++ trunk/src/main/org/jboss/seam/international/StatusMessages.java 2008-05-13 12:45:40 UTC (rev 8177)
@@ -0,0 +1,392 @@
+package org.jboss.seam.international;
+
+import static org.jboss.seam.international.StatusMessage.Severity.INFO;
+import static org.jboss.seam.international.StatusMessage.Severity.WARN;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.validator.InvalidValue;
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.international.StatusMessage.Severity;
+
+/**
+ * Abstract base class for providing status messages. View layers should provide
+ * a concrete implementation.
+ *
+ * @author Pete Muir
+ *
+ */
+public abstract class StatusMessages implements Serializable
+{
+ private static final long serialVersionUID = -5395975397632138270L;
+
+ public static final String COMPONENT_NAME = "org.jboss.seam.international.statusMessages";
+
+ private List<StatusMessage> messages = new ArrayList<StatusMessage>();
+ private Map<String, List<StatusMessage>> keyedMessages = new HashMap<String, List<StatusMessage>>();
+
+ private transient List<Runnable> tasks;
+
+ protected List<StatusMessage> getMessages()
+ {
+ return messages;
+ }
+
+ protected Map<String, List<StatusMessage>> getKeyedMessages()
+ {
+ return keyedMessages;
+ }
+
+ /**
+ * Clear all status messages
+ */
+ public void clear()
+ {
+ messages.clear();
+ keyedMessages.clear();
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ */
+ public void add(final Severity severity, final String key, final String messageTemplate, final Object... params)
+ {
+ add(new StatusMessage(severity, key, null, messageTemplate, null, params));
+ }
+
+ public void add(final StatusMessage statusMessage)
+ {
+ getTasks().add(
+ new Runnable()
+ {
+
+ public void run()
+ {
+ messages.add(statusMessage);
+ }
+
+ }
+ );
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ */
+ public void add(final String id, final Severity severity, final String key, final String messageTemplate, final Object... params)
+ {
+ getTasks().add(
+ new Runnable()
+ {
+
+ public void run()
+ {
+ StatusMessage message = new StatusMessage(severity, key, null, messageTemplate, null, params);
+ String clientId = getClientId(id);
+ if (keyedMessages.containsKey(clientId))
+ {
+ keyedMessages.get(clientId).add(message);
+ }
+ else
+ {
+ List<StatusMessage> list = new ArrayList<StatusMessage>();
+ list.add(message);
+ keyedMessages.put(clientId, list);
+ }
+ }
+
+ }
+ );
+
+ }
+
+ protected abstract String getClientId(String id);
+
+ /**
+ * Create a new status message, with the messageTemplate is as the message.
+ *
+ * A severity of INFO will be used, and you can specify paramters to be
+ * interpolated
+ */
+ public void add(String messageTemplate, Object... params)
+ {
+ add(INFO, null, messageTemplate, params);
+ }
+
+ /**
+ * Create a new status message, with the messageTemplate is as the message.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ */
+ public void add(Severity severity, String messageTemplate, Object... params)
+ {
+ add(severity, null, messageTemplate, params);
+ }
+
+ /**
+ * Create a new status message, with the messageTemplate is as the message.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * A severity of INFO will be used, and you can specify parameters to be
+ * interpolated
+ *
+ */
+ public void addToControl(String id, String messageTemplate, Object... params)
+ {
+ add(id, INFO, null, messageTemplate, params);
+ }
+
+ /**
+ * Create a new status message, with the messageTemplate is as the message.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ */
+ public void addToControl(String id, Severity severity, String messageTemplate, Object... params)
+ {
+ add(id, severity, null, messageTemplate, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ * A severity of INFO will be used, and you can specify parameters to be
+ * interpolated
+ */
+ public void addFromResourceBundle(String key, Object... params)
+ {
+ addFromResourceBundle(INFO, key, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ */
+ public void addFromResourceBundle(Severity severity, String key, Object... params)
+ {
+ addFromResourceBundleOrDefault(severity, key, key, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ * A severity of INFO will be used, and you can specify parameters to be
+ * interpolated
+ *
+ */
+ public void addFromResourceBundleOrDefault(String key, String defaultMessageTemplate, Object... params)
+ {
+ addFromResourceBundleOrDefault(INFO, key, defaultMessageTemplate, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ */
+ public void addFromResourceBundleOrDefault(Severity severity, String key, String defaultMessageTemplate, Object... params)
+ {
+ add(severity, key, defaultMessageTemplate, params);
+ }
+
+ /**
+ * Create a new status message, looking up the message in the resource bundle
+ * using the provided key.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * A severity of INFO will be used, and you can specify parameters to be
+ * interpolated
+ *
+ */
+ public void addToControlFromResourceBundle(String id, String key, Object... params)
+ {
+ addToControlFromResourceBundle(id, INFO, key, params);
+ }
+
+ /**
+ * Create a new status message, looking up the message in the resource bundle
+ * using the provided key.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ */
+ public void addToControlFromResourceBundle(String id, Severity severity, String key, Object... params)
+ {
+ addToControlFromResourceBundleOrDefault(id, severity, key, key, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * A severity of INFO will be used, and you can specify parameters to be
+ * interpolated
+ *
+ */
+ public void addToControlFromResourceBundleOrDefault(String id, String key, String defaultMessageTemplate, Object... params)
+ {
+ addToControlFromResourceBundleOrDefault(id, INFO, key, defaultMessageTemplate, params);
+ }
+
+ /**
+ * Add a status message, looking up the message in the resource bundle
+ * using the provided key. If the message is found, it is used, otherwise,
+ * the defaultMessageTemplate will be used.
+ *
+ * The message will be added to the widget specified by the ID. The algorithm
+ * used determine which widget the id refers to is determined by the view
+ * layer implementation in use.
+ *
+ * You can also specify the severity, and parameters to be interpolated
+ *
+ */
+ public void addToControlFromResourceBundleOrDefault(String id, Severity severity, String key, String defaultMessageTemplate, Object... params)
+ {
+ add(id, severity, key, defaultMessageTemplate, params);
+ }
+
+ /**
+ * Add an array of InvalidValues from Hibernate Validator. Each message will
+ * be added with a severity of WARN.
+ */
+ public void add(InvalidValue[] ivs)
+ {
+ for (InvalidValue iv: ivs)
+ {
+ add(iv);
+ }
+ }
+
+ /**
+ * Add an array of InvalidValues from Hibernate Validator. Each message will
+ * be added with a severity of WARN.
+ *
+ * The name of the property that was validated will be used as the widget ID
+ */
+ public void addToControls(InvalidValue[] ivs)
+ {
+ for (InvalidValue iv: ivs)
+ {
+ addToControl(iv);
+ }
+ }
+
+ /**
+ * Add an InvalidValue from Hibernate Validator. The message will
+ * be added with a severity of WARN.
+ */
+ public void add(InvalidValue iv)
+ {
+ add( WARN, iv.getMessage() );
+ }
+
+ /**
+ * Add an InvalidValue from Hibernate Validator. The message will
+ * be added with a severity of WARN.
+ *
+ * The name of the property that was validated will be used as the widget ID
+ */
+ public void addToControl(InvalidValue iv)
+ {
+ addToControl( iv.getPropertyName(), iv );
+ }
+
+ /**
+ * Add an InvalidValue from Hibernate Validator. The message will
+ * be added with a severity of WARN.
+ *
+ * You can also specify the id of the widget to add the message to
+ */
+ public void addToControl(String id, InvalidValue iv)
+ {
+ addToControl( id, WARN, iv.getMessage() );
+ }
+
+ private List<Runnable> getTasks()
+ {
+ if (tasks == null)
+ {
+ tasks = new ArrayList<Runnable>();
+ }
+ return tasks;
+ }
+
+ protected static void runTasks()
+ {
+ if ( Contexts.isConversationContextActive() )
+ {
+ StatusMessages statusMessages = instance();
+ if (statusMessages != null)
+ {
+ statusMessages.doRunTasks();
+ }
+ }
+ }
+
+ private void doRunTasks()
+ {
+ if (tasks!=null)
+ {
+ for (Runnable task: tasks) task.run();
+ tasks.clear();
+ }
+ }
+
+ public static StatusMessages instance()
+ {
+ if ( !Contexts.isConversationContextActive() )
+ {
+ throw new IllegalStateException("No active conversation context");
+ }
+ return (StatusMessages) Component.getInstance(COMPONENT_NAME, ScopeType.CONVERSATION);
+ }
+
+}
Property changes on: trunk/src/main/org/jboss/seam/international/StatusMessages.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
16 years, 6 months
Seam SVN: r8176 - trunk/build.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-05-13 08:44:38 -0400 (Tue, 13 May 2008)
New Revision: 8176
Modified:
trunk/build/root.pom.xml
Log:
Up to Richfaces 3.2.1.CR4
Modified: trunk/build/root.pom.xml
===================================================================
--- trunk/build/root.pom.xml 2008-05-13 03:32:23 UTC (rev 8175)
+++ trunk/build/root.pom.xml 2008-05-13 12:44:38 UTC (rev 8176)
@@ -38,7 +38,7 @@
<!-- Externalize some version numbers here -->
<properties>
- <version.richfaces>3.2.1.CR3</version.richfaces>
+ <version.richfaces>3.2.1.CR4</version.richfaces>
<version.wicket>1.3.3</version.wicket>
<version.drools>4.0.4</version.drools>
</properties>
@@ -1086,7 +1086,7 @@
<plugin>
<groupId>org.richfaces.cdk</groupId>
<artifactId>maven-cdk-plugin</artifactId>
- <version>3.2.1-SNAPSHOT</version>
+ <version>3.2.1.CR4</version>
</plugin>
<!-- Packaging -->
16 years, 6 months
Seam SVN: r8175 - in trunk/examples/seamspace: src/org/jboss/seam/example/seamspace and 1 other directory.
by seam-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2008-05-12 23:32:23 -0400 (Mon, 12 May 2008)
New Revision: 8175
Modified:
trunk/examples/seamspace/resources/import.sql
trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentAction.java
Log:
more example data, fixed permission check for images
Modified: trunk/examples/seamspace/resources/import.sql
===================================================================
--- trunk/examples/seamspace/resources/import.sql 2008-05-12 23:03:14 UTC (rev 8174)
+++ trunk/examples/seamspace/resources/import.sql 2008-05-13 03:32:23 UTC (rev 8175)
@@ -29,12 +29,15 @@
insert into MemberImage (imageid, member_id, contentType, caption, data) values (5, 1, 'image/png', 'My sailing trip in the Mediterranean', '89504E470D0A1A0A0000000D4948445200000190000001900803000000B761C6FE0000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C544517AD57F7F6C7B3C8AD153052535555F6F306AF9A84E6F1F9CDC8C2A38669ABDC85C9C3BBC5BDB4FBFBE9EDF5EB004E261D4372D9DBDCF9F577B2B2B2E9F4FE71CA70F8F386EAF5F974A1BEF8F368F9F532916942F9F359DBDDDE908E21ADA8692A62A7AFAB19D4D4D3E8F4FDC5D2A94584CA777A7B36B8650067322C2E2FAC947C29B35D68C885C1B6AADCE0E3E5EEF63378CDCCE78A265998D5E98CDDE2A284D08EA4D78098945BEBF5F6F8F545FAF6A59D9D9DF7F8F4F9F6B299B8B4E8F3FCCFCD4AEFF6E4FCF6999C7C5B8F663D5AC36EBEB3A5BBAC9C0A182A49BD674D4B2F2D69B4397CCED6DDA4CCC67AFBFCDE3275C9193A64EBD52B66643DECF5F1F0F295D2D1CDF4E753FAF6AA00301795714CF8F4953173C40DAA5498D67BFEFFD1CACA34EBEA9FE9C705F1F6DC4986C9009749EAF5FCD1DAA58BD2796699C2E1E9EEFAF49AC6E58979784!
8F4E747B6A491EBF193E4EE9135311DB8E084BCC6CEE3E5A1008640E2E57D99765302050692CA53E2EBF1F2DC0283AABA02A751A78D72DEE4E8F5F19BF8F4BDE5E666538CC7F4EC62F5EC77878886DBD483B3A08C9F8061A5BFB1CFCDC8F0EE9D5B91C5001D0EECDD41FDFDBEFFFFA4F8F6BF4E4D15D7D8D8E0E6EB8D643A493822A8A8A8F3F6D40F223BF8F39BFFFE9D936D47BEBC4FEFD31C24548FC0BD71EFD005295EA1224E85EACA1C1DB063D6D662F8F6D105A852C0E287F9F9AD9B795707111CF7EE89040B11EDE75B9B9A7D4D88C8F8F3A01F497CF1DF2100A24EC4C4ACF8F4B6F9F79DF0E146BBD2718F92941B1C1DFEFC8BF8F4AE45484A2F6EBCD8DEA482CE74979EA5BDAFA08EB1B716130CDDEC8F2221161DAF586B6F733070C08C62388C63398D633A9FA7AEE4ECF3666665E3ECF3E5EFF7E9E9E9D3DCA5D3D7DA3F7FCCC0CAD297734FA5AEB5B2BBC3B7A795B9A998ECEE6EEBF4713C563193C03FF4F150128A46DBE7F03B3D3C5B5B5BF8F9D2C2C116F8F8DEF8F7B7FEFDB1F0EFA070767B717171EFCD018960375B583972502D467A4447606F0E0D0CE2E4C28FBE4FFFF79900A650000000FFFFFFE9F5FF3479CFECAEA490000024714944415478DAEC9D0B6013D799EF85553C3212C4264316A238EB5A264E4C2C9B47480209536C614C0CC54E8A49FD20A!
5B00BD824BC4A6B5F072C521ED746214989AD14536D9C40124CED7A13DC94D26C58E04
2288BE5181C96F516BA7773B7EE867B976E766FB6C8AEF6CC9C33A3D7C81A492369247F5F82319291ADF39BFFFFFBCE77CE19547F825054A8600800080400012010000480400090B88FBFE403802889C6284800486C68F8450240A2CAE3CFF8F04B04804417C76338042600247640308D6F7D8BFD9F63024062C98353C7B7504C42FF7D8B63C2210120B1E2C1E1983469E1C2350B174E9AC42111230240A2C863D2C235E36E3DFBECB3B7C6AD5938C90F1100121D201C8F35E3E6DDC1316FDC1A4CC4278F009028F2B875C715B7D620DFC24400480C8078F3E088208DF8981600899240262D1C77C733C62D149308008996400ECDF30232EF10271100128B124B44204422DE9E0540A2E5584FFA007992F72C50482C52FAB33E409E5D23E25900242A0A993469CD3C1F20F30088E21432E93100122B20223904141243200B0FFA0039B81080C4B0CA12998788CD0C0148E48970F390496BBC257290EB66C13C24669E75C8338B3C796821CCD463E9595E44100FE865C50A0891C8C2430785F590831C0FE8F6C64A2284C89A63079F9C376FDE93070FAD59B85058A1FA13008981443091856BD61C3A7468CD1ABCAE0E2B86B194C863788B038949B0A6AE042208C924C46212EC3A518069FDD963B02F4B5144C4772E0290D822F1DEDBEBFB8500249A4460F7BBF290043AB1034062!
85C4CFD700909810F1FF25004461014000080400012010000480400010000201400008040081002000040280001008000240209401E41F860660741402E4A37FF9E8A3DF0D0F3F00A3A30C209F0E7F35CC46FDF760781401E4A161120FE5C1F82800C8A7C34280692901C8432E20605A0A00E22610645A5069C51C0827907A302DA500C102F90A4C4B294038813CF49520138995166D30C05846020816C8A71C90BF936C5AF4405A79662B03A3293F102C9091BF617FFBFB87249A16D35A54A7AF48CEA46038E506420442807CAF5E4AA565A05A9A4CBDBDBDD6140B10911B0811080132F26F814D8BA68CB9CD56C4A3D76E6DB640952C2F105E203C90BC80A665A8D134B2F2E0A2AF500BCD165981F002E1818C7C6FF49E164DA5DFA8E87585BD4EDB40C398CA06441088006474D3A2FB0579D8ED84880E88C8074410880BC8C028A6C59873EBECC4AC6C2936FC599DEE2A109109884B20231C867F603FF35B69D1032D4D7A220F7D8E26BD68D04E34D20FA32A0F109740DC80F8332D64572956CCC3D4AC6BA50C0DBA3A42440BB5962C40DC04E20E44BCD232D4F07665B735B550B4C3E1E8D7122285301F9105889B40DC8188565A8C79B1AD8F1BFDBE425D0DE3E0822244FA5232A18B123E107781780011312D26BD895457FAC6F201DA4162801031E518A34384661843A275!
35556202F104E25D69D15479A395D8D58D74C6E18A01DD20C674A3260AA596E16A9A46
A7D5A4F51B12118887403090EF913F78555A861A5D21E1D1A96B3038DCA3BFC8C669A44217F934421917D799FAACA6CEC546260181780864E477EC9F7EC3FFC9C3B418E32652ED5A532C2EBBC241B7E227ED292D111E249A6AC93191A23B398D4938209E02F106E256693199641C7A4DC92D94C33B18630EA71E53536B444DCBD06F49117A68FA64A321D180780AC41B88ABD2A2321BFBC828DC34330EDF6032B9DEAFBD421B49D3625A733BFB5C2D34DBE2C4690FA8C404E20384372D269D4FE775DEE9830F4AC7B51BFB1A8D911B23649B36BB7B0FAD2E71A63E2A3181F8022195D66F9271FEB0365A285A94074A234D1C337DE4F23A93467E8C5E7D0A6E17F4E598E94402E22D105F20A4D2FA1B3C10FA4D46CAE12F9069B197ADBDD118311E7C1A4355770BB6509B964A2420DE02C140FED11D0831AD37FE9D4B1F350687FFC8CBD563890C444A1F266C549DB9AD0C63E924124920203E0219F95B5F20786E32FC1F6C79651E8D878336A6B003666D4E8F44EDC3A427637D98523457916DE69DE7F05758E2BBF4A50DB40B888F4044818C70403EF97753630BE31835281D3746A6C51168C433469E474E26679B741AE790D64DF1DCF5A7078C9969793401E22B1071206F60D34A29A746E7E1A0CD8DDC9815A6C92E11838B471AB92CF2167379BD392D5ED23ADB81F3FC59999!
ADC4E7D5D510D8D84A21213883890914FB84AEBEE013A001007A3B5E12C22B78D50028F649E878329E71A687AAD214EC490AED16AD2F3DC9030E69BACA5988AFA078C16959840FC00C1A6F5D0878E80D190CCD9487283CC97568B2F0F87A32687ABEA3635C4058F7E5DA1C96A2A3C6F16AE1F839934A32AB4B9297A959840FC01C1A6755760208C568F6D445E7DF0ED2B53B2D12D8D313AEED166633C0019C0F366BB7E93D05BBA5A44F623D807F5F65E95984046BEC63EF6BF7C80E4E0E9E1F70313492BE4BEAB464E1B11DA68D626771E0EBAA50E7B96F2EB2C4383B693EC0BD11791250AA6BCD0EEB6954A2526107F40CCBFE1E8BDF2A154CF2A9271BA4665360AFAF02CBB5BB986665F72ABD27930C6F383C2C8DB08919A266BAF3B103181F803F2A791BB249A1695CB7D979C1AF9DAEDE5645385A75FE16FC691B269143E5B4753289BDBD063228CA6C2AD294780780B0403D937E21B1FBE22CDB40C163DFB1DEA5A64AA45E9AB5ABC83B857EF9ECF8967710619C1668DCC535ABB0977AA2BCE1B29CA988397F448F75AAF12130806F2A5089091EF4B34ADF466EE6AD6C8E3EB74838E78AF3E39DD775A9A779E7BA7FA5C256F4012A650F68AA6666EF4ADFAC6C545382F9A3669534C56ABAD39572526100CE4293120524DABBF49C6244237E456101E4D469136019D8EFB9!
9CD2DCACDEB0633D918D2D7A9336B30915E7B5F2FD93AD53260B668B516639E4A4C201
8C81BA240249A16C5D5A2F664399288A1E13CF15E9BF8AA98D0AC51F05CA47F3129491A2D7986014B739F7B2637150D3868030ADAA11213089E87880391685AB4851BC34E191A1A4CEB62B2FC5191EBAFCD6CCEC10B55E54A9508A3C14B6AECC2378DAE204DA15B6D6545D98F7F272A31818C6C1D058834D3A2D3B9EA5A1F7E12117655D83BB5FDFEBA369486AB2795DB626CCD213C480A642C8D7A5258D9ADEEED41959840460722CDB41A92B911CA65C2E641F674F7356B46E9A2E16ADEDEA9D04D934C399704AD39420AA4D2CE37DBACF63EABA9AEA965C0E106E4D3608148332D2A977549FBE23C9978B097D1285D4D4339B76BD2743E4FC919A430D39502997E63B956A7D3695A6ADCF3A24A4C2018C8157F40249916A3C5593DBCE93363DEA4B7629B6DA1029475B80B9FAEC4A62F93C9CD94AC37FB3D2E228381615BF11EEF43F5A95F20FB9891304C8B2EB7E1359170B2BAA175B18DD4268156C5180B37E33529712E42B7E292B7C2C204EC71A846FC03F1AB1029A685B23AEB59A670D644E8ABB9A43609C883EDC273592445819BE6F27436BCF0DFEA081108D767BFCB3F1029A645FA8B61B4B3E8015D05E19149056EF96BF411DE7E14725B94F47307B554A840BE16088804D362F064ADAE25E42B96D2D4917C2E8187C3D1CA2D1CDB73CC0A9308D3D248B6D7D63842!
05C2DDE6E4C1518048312DDCCE0AFD8AA5349DBDE40010454B782BE40AA8D0300AE381DB55EC06F45081E4FD5B20854831ADFE4D5CE1DB149A67D1799A427C48ABD922451F288C291CBFA8F54F508D84CB24293D5EFBA066C0112A10FAAEC040029B9601AFE37686E45974BF161B2F9A9F0F48E3E1A08A4C51DC7F42D5A469B46822A1B59807E851E6518487FE7C031D3290110940029B1659A60869AE465F25FD76F698B5441E0E4366275ECB8D7C5AA729A336B94E6FB2F6F559F5293ABFB7A612B691E99B5CEDAA0801096C5A0D4D9CE714062F11BA9F1CB2EEADD05DA5A50271D470859D8416331DD06946F7AA81349DD08A4245876DB19FD3308C516C9B4CA48004342D7EAE76A321E8FCA11BE4798CBA8DD827AD73DD810026C96E13D4B04E43494362F0DED636909EEB8603FF9803A3AE119A925B24F2F003E4412940029B564D721FDE6F4405AB8F0AB22F46D72F5D1FAC4976062CEC90D9E81A2B4C56E4349A7E09442873668BBB233179C6DC144F1C281AC58E43B0DBC283D447580A096C5A44227DC19D3834E4F13CEAB479C1F07038AE36F58EEE593455634926877DFA3A3581DB2C9425677030A79C1036500D2D45CD2E1CF63EF2A92D9316E121BA8D2C9240029A16D9E212D44A1ECAE783427D151C0F7E839EDF263C3D90993C28AC0C59530276220D2D29567B!
AFB5995BF8A229B36653277FB4D16E371526E7E6DEA8C39B070CBE7E95E367DB52E480
04342DA6A599ACE41982CEE77D859A20F5C16D85272BA27E78689A4D6E4613785744C30DDC6B4EAEA191796973049AF65E7D4A6E4B03C5346CE23A443EBBF4903EF4C1EB0301A143CF21124C8BC26D35D34DC92B7979646F9F15F170041DFD9BB8114B113FE038A0E1F70DE2BD05BD810E4232E5B859D03BD842B56A726CC242789FBE31377D801D68865BF7E9F3EAA1D25466287E15665297665ADC74BD50E24A1EBA86C97CB05013AC5FE1AC852F00D1B44E59F84D9BA6E646299D48833999203069339B5C38ECFA465D7A1EF621838E7BC40B481E7FAF24D7B189E80009685A86A04A5F3ACF42FA259D9A01472881D7AEED62550F939E827958EB36B5A4E1CF47DD5BC7B49ED7F3E9E6468A907AFA6C8D5AA370B5D03AAC1083C765A5C56F23A8FA4A1E20014DAB35995BA6A893D2F263F581DF489D960A89079FD66DBE3BAFE99A4DD8446CC9961A03D938349A4428E34D9B504FD5F1F230D5256B5ADD9A9D061DFBFEAC3A0FBFE2A5183C8FF08104322D4A43CEAD072E7D69943FB03E06B5A1F815DE10C47518AD39DE736734D924A73072D18C903D08895BB0FEB208D3A0C9D1BBDDDF93F7BAC5990D1E632CA2102A3305BF0D7D537AB03CC20712D0B4B0449099A63381F627BAFA25FDA1F2203BF47A2BBC765EA3E20D6F3CB7E5E2261F2F11F14E1BD350DE3488456175D!
565D6E6A2B47EAF21F6CD214C0BD9A66F3B6F0E9A870C40029996A11C973681EE4862A8C9E5FB25B95743E6C16F2BB57ADD4A80BFDF9D69530DCD4B89CB369D227BEB68AAE5461DC919D6C242219537A5E5F9CC280C9C427A5D4028321FB457F8BBD945A840BE2D114820D3EA2FC2535BFDCD9AD179F0FD92DC86D079381C0378E7B5CDA3BD4491E4646D4C3778661B6BB24FFE47A94CB8B38DB5595344EE26A2BF2176C163CBB2F39685A69EF8F63B488A215D56320009645AB499DC09A362B45B09F09662AFCBAD3184C1C36168C187139ADD2A6D86B87A6FA1DB62172937F4453578A189FF40B5EA843BDBE873322923DEC96D6B129D70FF8903622540981A726CC2AEBFD91AD2DB90034820D3129A3AFE6F588A2ECA4E3F37450B7E728825E276E933C664BE78CB739FB3E0257B5B53AECE3DCEE7D878BBEA3C6FA41C9425853BA629DE00A17576575267CC8B49E6D13719437B1BB20009645A4C1A5EE667BB857E7A7EE5783B387BFB783A3C1E0E3A0DCBC156D4CF570B643E51A7F558EC6A201BD2ED7D7D7D763BFE883EF015159AAE64F61BB89B8059D83B098A2768030704E710619BA56B0F6F6C8004EE696536937A365774718DDF9811E2FCDC672EC2ED1EB217927FD184D2E0846ED379C2A6F99B4D8985DD965CCE17B8DC49017F0EE9AAB2687393893F56640C918!
74C400237E2B5A42954D124321F618CBCA769A8F079381C57F1F9052BDE5F419B73B8A
B41BFD8BB5860BC8E6978FCBB02E8D291A44721A9336632F3B4DB169B43E5211790803D2D614DD694A2C9A3BD378C923B3556E8F2E4E0E13018F1A58FEF4843661CD61C5F57CFE34F2E7A87A95923B1D433901C42D564922352D666EDD5D0D3A04C40029A167D9527C25E7B06CF395B2EDEC06B5B5C6370C8128C659074CD11EEF4945EEF9DE72E2296E40A2BCA1B7DDC873E3BF7C1AA2FBCD12255AA44213945C99DAEBBE2847159A9FC0F6F5040029A168DA666E4609DEDA67BE94F535A3C21D4379965E2814CEB06373A834822E424803E57B49BCFB466B26702B4EE6596D6927655B2E518B456725A904FE7462A9C9F5C2E8548D8A7E59A6ED9CE37B8EF7CC546CEF656E4E2E1A0333BF14D9B1A48716B6FF45786D26E531086DFFA16CC77723F7B2E6A8CB1518884CDA5544B13F9E1075DDB1ED09CCDCA2FBC3BE48BFE9BDCACAF39CD8C27CE36AD9CAFEEB9A5D82D0D991A5BC254B96C0A91B2B99431F373E014BE83C44F1AED85164ACE612227AA6C1ABC6489B249847838C8AD18F006ADA6B0AF2AF9142265473C9D470A4D2BE9C6F3375EEE1D94BE4151E2A6B91C7C501E67F4CEF2480984FD37083AF10EC6CE264D6BD8DF464685483A7B48590A85A54DB6D590CC77AA6B0CF20E1355C4553F29F800FBF97E47E482326AB4A82CD0A4D530E157EDA328E4956081483A!
7B486E18C52DFE334652BA87DA891B757E808B2B6ECE9E926E882010B62E3004570A44C5B2249E3D6CBD296C8FE16FA566BAD12ABBA390338EBDA415EF8897905521924C8B31926EBC29E70639D1B9C91C810BD89CC24F0DD8BE6F2200095E21120F4CF35B90FBF4E4EE06E64864DC011DFF8FC80D5A18C7185588B4BB3C08447A659F10BA7B96B191ECFA696A7038C6AA42A4DDE5413836C16DB06D89D0F54BEE6AD76B8B2781C8AD1089B7A631F0E5159A21C83B2174FF269915E4A880632C0391766B1A83F906BFCE9E17B1848BE7867DE707C6341089F7D332D4E852F4567DA1AE26723304C65267EFED6B4E338C6D20126F024853468BD6621C88E068D103DAC6E69C885962DC00917AE7521ACD6E233B3FA029737A2B458F752092EF5C1A85A0E9F8C2111920926FB70C2115C85F840744AA69410405A43B64204A322D50089896021502A6A534858069294C21605A8A0302A6253B90FAB0808069C909E44319808069294C21605A4A53089896C21402A6A534858069C90B64386C20605A7201199109089896D2808069290C089896D2808069290D0898967C403E1C01D3520A907A7610FF62044C4B5140E451089896D21402A6A530858069294D21605A4A53089856D840BA6555089856D8405E9119089896C21402A6A530858069294D21605A4A53489C995647B50A47!
757547622A248E4C6B6747F5A545E7E66EDBB66DC284B9ABA62CB9D4B1338A40D07757
5D52B19741477535773D080AF9BEBC40E2C4B43AAA672C59BF7173654141C19D3B05952B365F9CB048153D22AA198B561DDF787CD5A2EC194BA6AC5FB59EBD1E1C91011217A6B5B37AC694B9172BEFB847E5EC7397A24644359B7CD72D332F6E59B162C596D97397A8764606481C9856876AD184CD0577BC63F3FAA811517DD3271EFDCF071FE472C85D0FFAC45DDFBECBDFFFDF7EC57F0CBB873CA6B5B3A34385BC16FD123EA8546126E09DD54B566DB923169BCF45CBB554C3518F57FE0F3F8A2AEE437547879FACC9E637B74117FECA25F47FF6A2731336CEDCB871E3CC99ECAF99C78F1FDF36F7DC9219A127E09DD5D9E72E16DC118F2D532E75242890ADDC20CEE43F6CDC86EA98EC19AA6AEF81440A98B168FDB68DC257CE74FB7B33676FAEF41EB38282CACA2DA12560B6AE42A97CB63F1C2856CCCDAEDE19BEAAD9CA4975A9DAFF4B451FC8F33EEFB560C54554552C61652028018DCFA255B32BEF041B955BCECD08EE5266ABCCEC2973376E5931FA2B175C3C975D8D824890AB4EDD85CB3DE7359371B9297A0E41CF5EB268CAAA6D1B8F4F98B244D5A15C207824375F9CE9A6828BA8C428B8134A047329A34143C5E584D9D2BE55C1966DEBA72C5A3243D5B173A70A1563C779E122151F473396735396CC20BC50B1B6045B2A7AFE389ACFAC3AB708B1387E91FF4E5B5!
665578B03D9EA134F3DF3CC339F70E6F2BFBF7CC62B1EF51F6F7DD36FFCCF3BD18C828DD26C6B67F5253468084610E00B566C9939E1DC92EC25AB2EFA3C55894AD46D88095237A2BC6D85C7736CD47A7CFDCC29A23FA54AFC1BBFC10279ABE04E7CC6EC298189A0F9DF946D17435221A2E2CFDE0A2AB7CC66638B04B3DDB23EFB925B8D484A1C3F40B67240EEC46B5C9CE2396FD8C97521DCABB56C3643C5F8822BD8327BA647A9C2FADBA80A895B2068DE30A3DA957C67642F9AB27ED5DC6DC785777E7173AD427FF2C45408AA1166A23909D20262B17EC2CC8B9B37AFA88D0F03F603E42916C89FDF89EBA8DC82CAB68B9B2B2BE32A15263090F80C00024020004868556901005152ACCE4ADA5E00409412B5593B3E58BB63DD2EA500F9726C0329387B61F752A7F3FA86A4D50024F671F8EC8503D79D6C2C4522A905209293EEAEED67D7AD5BB60CFD9AB3FDB05C2FBB6BDD8203D7973A492C3DB0604E419C002938BC6BF59C65EB969D6547E4ECB575D7D8A1B986FFE4FED0328F87D6797CD5B5EDAB771D1EED0D17D4BEBC7D99DBEB2102DC8BAE5B9795B463C3EEB5D3D7AE5D3B7DFADA0F0E5CD82E873656AF43AF3A5DC0C1C6F40D0BCED62A1C4841416DEDCBD7922E4C3DF0C1743222E897EB83F0D05AD10FEE7FFAE0C0D4054973C473672D029EB57FEA076B455F6FF!
A75CF71DB3127BC2CFEF29CAC053B36A077E4F1B2AC48A61FB810BDEC2E094801AB047
C69735767167B75A29FDCFB470F29965E9FBE7BC385A475CB38F5100921396425EDDF8F904F97FA4DAE874EE4F0EA6BFB91DCD01BF2F396AEEF9EBA3F6BCEEAD5BB0ABC3C62F5594EB873B66FF77E0ECB1B3D3F0785F0E4E139EBCEBE5C103C90020EC8A3E4DA599DB4E1034F15785D9D725011AE7D9714AE5FBF1E0CF3E953AF8544634ED205E47D01DE11BA6C90982F24F1B9AAA076D7CBDBB376ECE6D4BB76ED6EEEB95D8785967241EDE19757675D38809EDEBDFBC006F46CD6BA75490BA6EEFE60C385ACEDB54100614DFB5AD2DF7240761D3EBC6BD76A5491CB3CFC9189A5D3A7065FA5BE9C7561C307922F2FE45E3BF667711E91B57FC154F7714197D4860BFB93D013ACD69187B0A37F5D78120145E4D8EB6BE9F4DD3BF62FDB250DC876942AF72327DDAD6681FCFF0549E88F530F5C77C6495C3FB02369B5E49A0815695968508315FB75EC12D7455C02EB1C3F3F7D1417598A2C7041D6BA6BEBF8AAE72CEFD667AF7900493AC0F904320A0E48CFF5EBD36537A7C88A8435FB39A24B51B52FAFDEBE7D3B327C5CB25DE38A3499D26048170F02EB5DF0B0BFDC801424ED16BE1C0371C6612C4532D97F6D75AD570195B460C7D40D0776FB2DD214132E20672FAC75260010EC1C07584B600B4264E7FB59142C80B8D0BA8A13F03224E0DDEEA922AE81B859025B10C60909!
1E88B880CB5820A94E88E803117F386420D98FACFA1F2856AD5F520D831B7B20D58FCCFE7CE59E957FBDF2D4A91F4E9801A31B6320AAF53FD8B377D7932F1D3C79FAC4CFF69C3AF5AB4530BEB104923DFBF3CA835FA0F8FDEFC78D7BE9F4AEBDA74E4DE880118E1990877F3BEDE41713D17FC78EFD7EDC4B274F3FFBCB9FAD7C7ADBBB30C4F20129F3FFD7F24BABF23D1EE87864CFE463139F9888F471ECD8B883274F3E7BE204F2AD378F03115980A4060072B9FD6889A75FFDD33D5F3C3171E217CB97738675F2F4BC5F1EAEAC9CBCF2E9E3E05A5100927FA4ADB8DD5D22EFFE76DAF227903E96E7963F376EDC49C4E3446DE53DF7DC33F9D49B0FC320470548774FA9DB038FECB9C5F2F862E2DD5BFFEBB95B279F3C7DA2F627951FDF3379F29E37DF03D38A029092B6EEB2336E02F9A74A367F2C5FFE8BAFD5FF3AEBB5279161CD7B66EB5B93274F9BF6C23B8FC028473E8754A57617B7BB24F2C8E7E35A58812CFFC5FBEF3FF0FEE99FCE3BF193478787BFFC78DAB4699FBFF99E0A8639E2409C196DDD6A41223B374EDE37FC0002F2C573CF3DF7DA6B1C90A78687B72281DCF7F8CF218BC805443DCADF2BEDE96A9BE52AB17E34FF937D13977F810AAC836C8575A29205F2CCE4FBEEFBFCF37BFF301786396C203D8180E41F29EEEAE1EBAC87F79C1EB99DBE9C9DA2B33C!
9E3D71B8F2E34787BFFA2B16C8BDF7FEE15730CC9107E22C5177A7F249E491692F8D5C
F9C5F2637806727A1E9A81DCF3F137DF63793CFE9DEFBCF80D18E62800A92AAB2FAB229F4FD87370E2D0FCE52EC3425310B6C262790C7FF25D00120D20A5A9DD6D25C4B3E6FEF6E0C4079E5A8E79FC941308E28104F2F8E3DFF9EA7550485480E4B71777F19375342D9CA8ABFFAFE7C6DD6213C8096E8ABE9713C8BDF7BF3EFE6D00120D20CE9236C1B316ED99B7FC8BDF7D0D4DD14F9E3EF1CBC3BC612181DCFBFAD7C7BF0D493D7C20470303294DAD6FCBC01279F7B7F71C5B9E35FC3E3B4567FD0A0161F5C10AE48DF1E3BF0B656F5480E4CF2AEE4AC5127977DB9E71BF5FBE0F11998781201E9C617DBDFBEBE35F7C0726865101E2BC5CD6DD96C17DD6F1F00B278E8D7BEECBE1F77FFA23BEC29AF6F8E38FDF5F7FFFF8F16FBF07DB1DA20384950869F9CED8BBF7A5975E7BEDCAF0EFBEF9938F3F9E8C80DC77DF7DAFBECEF218FF5D682E460988F38CBA5B9D41EAAC177EF6D2AD9FFEDF3FFFF5F0D6E7DFFAC1DEBD3FFCC6FDAF0F6FFD57C4E30FDFC886518E1290D2764122EFFE70E5895BA7E7FDE8FF3DFFEBFAE1E14F3EA91FAEFF352B8FF12F8240E403D216E82F97A885966FF65FAFDC75FA74ED9D9F4CFEC15B8F3EFFFCFD7FF5EABDF7723CE63A60906500D22E0948694F57F11132397CF8D4CA9F1DAE744D41088F5FC17A611481388FB475975D269F3FFCEAA9B!
D3C8FC7391E2F028F6803612B5F5E22CE25EFFDFC853D7BB90A0B014138DE7E6702F0882E90FC23C5AE26BCF3DDB9AF3EFDEA0B2B577EFEC2BD3F7FF1C53FBCF3DE23B00528CA409044EA859E2F87E4BDA7DF44F1F6DBEF3CFDAB8777C2F0461D48697B5757991B918EEC29E7FEF8CFFFFCC73F4E59046E25279059128138CF947912713A33528F9EC987819519C8111648B1941728517775A9334A0504A5A9F55DEDA530B03103925F52D6D5DD7634E37269697E3EC252AA1EF6DCD408211B903649AF505A5256DC5DDC56967AB47D56C699D22A00125B85208D5C3EAA2EEEEAEEEA2A6E6B53F7B4AB59CB82241243204E6755497BAABAADADB80B6129EE1AEE6A6F3F821CCC2DF20150F42C0BABA4AA24E348FBD11E755B57777D7159575B598F7B1C3D5205431D16900C16485750AF84527A7EE999233DEAEEE29EB6EEFA2E8F689B051A091F487108AF978FE6EEEA23B35807738B2EB7060B44748194A8EBCB2E730EE68A59EAEE3200122320FCD9AA7CB7282DAB0720B10232ABB8EBA877BE282D0385C40CC8D1AEE259004409551601D2D3E55AB2720101CB0A134889CC404021B102520A401406C4EDD8888765C1543D4640D0D85F7602104501A9F29D9CA8A175122320556AB182AAB40404121E90CB2C90EE9026EAF5A9252555A007998154B140EA83E791A1EE2E3E5!
AA6EE2901224A00C2F2E8EA99D5D6DD55061B4F1400A43443DD85505C6EE77E83B18D3
5104E1FAC34F2D9AD41A9976170630CA4A40C61E0924769099B4A80484C81E49F492D263C109123EAEEB6A350EACA07C4C902190EE685108F6E75069FCAAB66B50DB7CD82FE55EC805CEE29EE6E3BE22250D5DED6AD86E2376640D8F39FEA23EE8AA84AEDF2BC7129445840D4EAB21EE9FF7E082A7887DB3C78B073F62ED8522A1F90E00A5EAEAAF2CAE125B0D5245640D80DF0C5A9DE33C12A58B7950BC8E50C69D14E368AA6AABBBBDB527BBCA3ADBE0D7F52A69616C5D2A26BD827CA1208C8702204005158140310854506005156A8131A48B7C4ECDA263159FBE67BF13822B19818E1A3A79ECF218953CEA946E236CEB4111C5D4712A9EC8D5B1E470579245457395E815C16E4312BC12686F1C9A3BD9BCFE689B6E81297402EABF9F223C1E411A7406609F248C055E2A800993F34F440FAC848FAEDA1A11FE3477443435774EE5F727B1F7A2C53CA8B5509F2684FC8E6621478A40FCD4F1FFA6864E4A3A1CF3E1A4AE71EBA727BE4CA15AF2FFB8D2420B3F8DE625B626EA2880E902B9C303E1ADAC70FF995A1F99FA1DFF65DB932B4EFF6D07C412177232D3DF1D9D0DD233F1EFA4C541E650447FDD1446DBF47C9B2D0188FA45F191ABAFD196F5943FB5820483399ECE02320482108C51357E68FEC43FAD927F64247047924EC3EBCE824F5CF1012F6F7BB1F60C170F1E3DB!
481068E4E70F21597C46149289380D3D803EBB7B48E3FB2AA5823C7A9C4E00127ADC8D28DC4619E3CA95277418483A92C77C944E3C806085B04F3F7665E88AEFCB6414F3F228710290B0E2235453A1EC91799BF3298480CD15ECD87B2B847D9CFDCA1FF3D5982B9C65A455529FEA74029028C77C528CB9A284974771891380443BB8BACB2352F94E626AA26FF58A8B997A09DF492CCE703A0188821AED63605B91F2815C4EC875A8F8052234DAC7C8AE3B8503113A895DB39C4E00A2A046FB9839FCA38A0779748F1579281B88D068578FA5B3718A0522741213731D2AEE808C81467B3C0119138DF6380232361AED7103243F75784C34DAE305C89869B4C70910BED15E5FE674021068B403108FE8A91F5B9D4485033933B61AED8A0792A0073EE21548C21EF8885320EDDD63B193A8582097C762A35DC14012FAC047FC0149F0031F710724D10F7CC41990C43FF0115F40C6EC3A9432818CE17528450219CBEB500A0432560E7CC40B9031BE0EA5382063E7C0475C00817528650181752845018175286501390AF2501210588752161058875214902A588752149059200F25018175286501817528450129857528450181752845018175A8608044F19F308075284501817528E500298675286501292B1EABE7A1940AA404D6A124038121002010000480400010000201400008!
0400012010000402800010080002402000080081002000040280400010000201400008
0400012010000480400010080002402000080081002000040280001088D8C77F0B3000C784193E7E8425740000000049454E44AE426082');
+insert into MemberImage (imageid, member_id, contentType, caption, data) values (6, 1, 'image/png', 'During my trip to the moon', '89504E470D0A1A0A0000000D4948445200000244000001B30803000000F941F8540000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C5445635A53317090B7C8B169B3CECEB0946B6B64A99A89DBFEFE92CCD3C8CFB78A9485B2D2CE43393599A795B7A696EAFEFD8779687A8474968977383938896F537B7B744E91AD756959CBFCFD99A58B8A8C86CCDACC746B6410344D75C9DBBBB9A78BB0B26EA9B5A8B8A88A947A9A9C96000000AAB59A6557488ED7E99389258E6A2F6B736495947A5A635286846A857B74B89C87D5E7D47A846B728D8BB9EAEB124C6FBAA58BABA870A995792F2314A79C95695035A5A58BBAFAFC4B839699E7F5A8DCE63782A5265472544A37A9ADA6958C85C9EDEC84BBC9AAE8EB4A52448E8848B79879364344689AAAB9EDFA988569A78C76A8ECFAA697442B657C24150D4A6F75C79B79776F2C36322874735AACA550A8896753A4BE062539967A63B3B99C7B634B6B735AACBCB2C9EEF8462D1BDAEEE9AB6D4F745A42B7AD9E8B9993394238AAF9FD0F405A646348D9F7F5B37!
6662728209B9A6AB7BDB235291F573E2807080BE7EFD8B8E1DE021727171713A59C68C7F7F49CB69E677675827312B6946894392B3E0A0A021215BA88683A9FC693533DA954414656677E7842475354B9F7EF8BA59992E1E0585238D9EFF8141009BB88742F3131C1BC7D644A40493D232731278CA58C175F81673926C074627B947F646A6E1D21196E0D0A495239957B734A4A530410081007057729185A552652524A5A5A525A524A4A4A42524A4210081163635B5A5A4A636352524A4A4242426B6B5A4A42426B635B4242395252425A52527373637B7B6B4A42394A4A4A73736C8484737B736C525A4A838C738C8C7B737B6C838C7B636B5B84847C525252929C83727B639494844A4A397B73636D63528C847C929C8C94948D8C84738C8C72A4AD929C9C8CA5A59D5A5A5AADA5937C7B629C948DA5A5949C9C83ADA59D9C9484636B525A5242414A425A4A4AA0AD9D6B6B52ADAD9C52423F424A39ADAD934D42314242313C39425A4A3D42424B515A524A424A525A42404A4B5C5A40515B5B524A526C5A5252525A846B5BA58C84424A314E4A2D5A525AB59C945C413C28292C6B846F000306000004020106010005B62849F000010F9A4944415478DAECBD0D585367BAF76B88243169208910925890001762A312F92A1F129208848A016CA0D21A1001052A4505D60E08D!
6BE68A716A8D416A11BD9DBC1A94E476BCB6EE7C096F4400213D868E4AB28123B2FE39
CEA6EFB9EB6A723BB9753633CF7B3024AADC897B64AD6BD9290AC242B61AD5FFEF7FF7E9E67ADB5A0F864C3C9936527AB4E8E07864F0DF73CC6A698FFCBE7270B6C4653C32CDF474C739B1AA6BFDA4F162F38895930CC62C12CE6B1B08CC5BD8FA79A7FEFF39385658631DBF71131B7B0AE756CAA97DDC62C27179CB4DCBA75FBD62DB825828859C4ED5BD88293E65B80D3EDBB648DC5BD8FA79A7FEFF393923BC398EDFB88985B4C77BD83FC801261B72D48B3B0F1CB58DCFB78AAF9BF787EB2CB0C63B6EF23626E31DDF57E0BBB7D1229D16DC8657788BBA352F73C9E6AFEBDCF4F4AEE4CD57296EF23628E596ABAEB1D305A805908888898134477D2D92FD58BC867443E9BC67AB7A633CBCF8DF54C63B6067BB2E53CAE46FA517FAFDFEAFF9EAA809AEA79AB129909880888E60A11A14404447383A86C4C896ECD1AA249FDD62C9733D5727FAB78D4DFEBB7FABF27FBDCA9B6F37D9488808880682E10119E8848678427222022AA330222DB55A2D97EE8A35A694F6A47EDAFF5BD1FD6E7FCD2CC5AB0592B11011101D15D88082522207A384A746BCEA5FDB44BC24754D23EAE4D038FCBF77E589FF30025222022209A0B44842722D219E189088888EA8C80E8C987687C64E3741B01A7DBC8F8A4AE245B8BB9AEB7F1C646022202A2B94144281101D11C212A9B5289A65BC2FF!
5AA5FC7C2BF19FF82686E92811011101D1D47B7B10E98C48678427222022AA3302A2F9AF44730D6233CD6FA86EDDC2B0299588808880E8C11059082522E2095022A2889EEF25FFAFA044C46699EF10119E8808C2131141546744CC0F259A6C64E3648D8C8F3B3404BCBF6E3C700F58022222A6095119A144443C2C25BA35ED21208F7B494F342DFCDA2BFC01C72722202262FA10119E888839A733C213114154670444BF39448FAAC59A58BD3602D1A36CB12656AFAD406421948888C7588988DAD7666AFC47A744C4CAB595203C111184272282A8CE88989F4A3459E3DD6C0F5E4E40650B2DD6044444CC0DA23242898878F84A34E521676778E818A2E4B781A120180111110F61501A91CE88985B3A233C1111447546C46301D19C06A511D01010CD7964230111D14E442811110F4B8966BFCB1051D21325FE9CF73B23202220223C111144754604519D11311F5BAC89416744CC24C64FDF494044C4DC2022948888DF4C8988DA96086B853F072522561F117720223C111184272282A8CE88B001259AAC31F1B73A39DE235B19C48F63768D8DD3D903968088880743643949281101D1A357A2A976219A2F434088A68B47787C22022222E67C7C22229D114178220222A23A23207A8295683268A6DBE8486C141B81E87E7BC0121011316388082522628E10954DAA44B3DD6588!
289989E31311101131F7E31311E98C08C2131141546744CC0325B2D5954140FF105BAC
09888898194416428908881E8112D96CA54A34493CBCF144044444CC793C1191CE88203C110111519D11103DC14A64EBD04CF7A0EFF36D30DE43696C3C49404440343788CA082522207A784A64EB25FD744FC935DF76957AA8E38908880888E63C9E884867443A9B753A233C110111519D11103D3E4A642B07B1B23CA2B015A8EEFDFFA635B291808880680A88CA082522207A744A34DF4BFB871DB652F2FFE2FF9BCE7E67044404445342447822229DCD399D119E888088A8CE08881E0B887E76D23C5B6B6C7CDCA07A5CB7C364DFEBBE675E242022209A214465841211103D2C25B2BD5D861E3544B32DF91FD7ED30E9F7BAEB8908880888E60211E189887436E7744678220222A23AFB5521321310DD07225BD903766A3CF098F4E963632FF9E5DB2C13A779D3683BDD8398D9D41EB0D363C83C89D41C1B8308BB8722F3F8FBEE84ED41642194E81E22A6E00C334F029F0D436443C7277A085EF9BEE96E2A88E6EBA1761EA8440444160CBFFCCCE34C6A790888084F747F2A102D63D0982760F2403345782202A27B9296F93E8C58088888EA6CFA4D411349C030CC8CAEE3809809882657A227ADF1EBA1C3043FA9935647841D439608C3AC8860656314C1A56162898FBF009B0AA2270DAAE99E2CF1CE6A9BCE1EB03603911979480B36A6C9000EE09372687D52D21EFF3D7BD!
E78737D198635E02C359499115508A193988580681AC727B215886E21443033E80BD0823514B9AE5729DD69713CAA35F21CA3190AFFA4F545D85D58B0FB1467B6AD44B67268DE49750811646E284308A524B94BA595D2CA980DE13C44D1412ADCC225BABC5C53B1E7701912A2320C6F9AC4660AD1935ADA3F10228C80C8DA0306D7B20648544549EE1A1EAF3C26465AE9E6E353A9C8E05179BC8080121EAF44A329C9C8733C98DE9E82240BF74A160222C213DDEDD0C035A5ECB07B7A4C1EAF2420401A534953B891858A18695C79785C390F89122FA384BA35CFD17189FFB765083A229D59A6757C225B81084A2F73C3B7EE8E5B217D6D8D8E2EA1F24A62623401E51B62683EB4CACAF0ED013171C81AA18B639E639EC7F765166BC946404428D19DAE556CBD7B1E350F85D54AE7F1F0D8E006C1150ADD1434ABCBCEA33A3A520F3A3AA67F0BE0DD338E8450A2072E6CBEC084FE859FF1831583BD0102EAEB0278BC684D745E74349577D0F1E0416A9EA6842AADF451ABDDD4E408B892B90A1023472ABCE420353A9A47AD380CE89D844ADF62699886083D70E33CB1EBF396059B5489E6314477FB592D68EBC315587A339DC78BA994F25029C6A30243071DE1018D46560144FB2B23C8E4EDEA5AB7701E353A00BC1135A0A41C5EA5D903B6E8E449CBB162CB7D4689D80E4498C!
D42648D2A4B31F094E29F410DAF546C007EF2A80C9A066C0F781F5E8054CAAB14EEAF5
4CBDCB86A1F3721301420944814D29872A9262083EAC8A3AD076B543C56EADBBC124DF710BDF3AECC6FB0981BD62BA8BC7037B7CAED31C8F7282ADC3579071DA954A9901740E3F1B69747A82412AE4A5849030D2A71E756565606C448A590F632788C378A50D3B5E517831EA759E23FF14346262A91AD4034F63FDC4D6A66AC4195C1E3B96D2793DD1442A99216C0A0490334198E3C8D349C4AA5F983B92E2FA7F14A948A0A09C33D83CA2BE79504944BA5B438AA4628ACD448304BD92423D66C0522DBF544F8B069D8FA45FE01E1E1113E3EFBD56A05A42B5A80465A428D3E7830402A14C6C5B82729F2A2039002F11C3318ABF748DC41ABF23232A4E5E50154AA86A6916A2A8ACC27F1C1D68427B20D887E59DCD72B636222D46E6454826550A534A5BB7B9D22407350A3A994C868EE12548E4161AF61444369EFA8F1174A03A0BEA7F24ACA35D18E8E2528DC5390165988EACC2621426DD4EEBCEDE44A3759ADDBFEFD310AA57FAE8AC1E3E545E781C15608B70B2571E0B1A3355485927130CF712BA287265132E059D0260F05B86F6A49745EC5E169EF9036AF95E8496D1C9B354455A8BCC730775E8C9B9B1B79FF7EB8D9409354D2A4197893A2A3234F08CF54564A69D238A8E779F83C28FF156E0A49A07B09147054EA120D9ACB8B3E68D5A2DB68A1B3DC53F6496D84BCEF!
C8465B8108B3406DDF5056914175538308EDDF2F73DBEEB3C18DB7A13C23E3206A91CEA3692A2B256E6E34052DA69256298DA109150171521997CB8D082FCF2841C96C2B5503E29477904A4D4F41CB3C6939697B10594EDAAE12416D5F86F9F3A81BC8FBF19091DD22D46472780932CE79D4839A0A6A798CBAB2D2CDCDC7C787ECE626E40AC94AB55AA6DE4F22F3787190D11CF3347979409B23EA6E032DC2E6B2CFFEBC56A279B8E7D0ADB174662E4B82D25E2DC311028822B832B5A43C20C391BA752B6811D8E94A3C7CDC222ADD7C20DD91D532592D5CB9422A2D29809A07669B17BD156C3654728E154516EC3636E3FDDB9EFC5D88A6A144F31622B0D5F2800D0A60688CA2F0082EB756488DD668A2B7C294E778D051535EE986308A409DB06E6435FE3A924C9811E7EF0F955C8E3B356F099ECF780152EA1E4BD9C9E91FF061FE40647B9E68623E4BA105B871C93EE4FD50E0FBD4927CB864AE240F8AF974DA5647D4550F0A535E190113A434B88018ED57EF27EFE7722519197BE4E0A9A3A5792554486860B86394BC926FB169B65A139E68BE40548CB967842334A4B4884AB5226683902C53297979D41206231AD99C83204501E5DB237088B643562393DD7CC811DBF7FB90B8D48A1406BC205AC3E3395A215228A88C19341711D5D93C8008FEBE91111721AC74134AA5!
3485BB821AAE546F77AB2C41E388C01431349A3C80233A20A6BCBCB292865C11643332
797F049924AB2509335C198E0721E345339064417946136AA839161B55A2F123A5CDB746B0C9D6051A39760B8DB04FD1C4842BC8D20C8682E1EEEE5E12CEA3C59473D568383EB89C83E89A478D2E0F8889E1D140AF7057444696683F69BFCC8DEB23714703D320EF8160FD0B6A72AC74A752BF379B310B86A13D8F66DAABFFB8ADEF99ED016BB62D88D0E02174C486326578F806B250410D704F5754087901E134F276B5309C91170D62E40835571E545FE5BCF298F270C5B82B22BBE118ED8702AD56E88843E44885BF5BA1CC8FA6F1A88C62042976FBD6D8718B6C02221B54A231882CAE6077144285507A50A14817BAD37895725265A05B0494F68ED179289541D5A509882929A18114F9E0C51998A2FDA84423D792642A79347AC956F4B27F81298FA790521DF7E0FB598314996D07A23B4A746BDE0D5198BC5235E3FB48BB53E336088534A13FCDBD42E14E738FCB95A8D4952405C810C39FA10134B652F3A20318313C296F3B9ECBE02223A3E66DB7FDB5649E3429DD712B4208B536E6215B2415F2A85B7F420365219961D385E8715DDF333A3ED1F871AC6D07220C4DDF46F3622A155C8550E9AE84502868815CA8BCC84289A3A33049131D8D6AFC684D098FC6E39594540A81A018DE06B58CBC5F564B5693DCE2A4012059C83B1DCCC3752B5A53A9282F71ECB01E4ECD6!
CB61D886CD113419459CA1419BCF0729022A952E8EE5EE14E53D02424F20619999CA47167680202F07D3E18B4689E541A2E2D5780B796284AE21424AE5A2653C771951A7F06D59AF40E1EC4F71059A2A0D168D4BCADF5681710ECD62DC213CD67883004D19BD492F20D31316089FCDD3542254DA1A409254232C94DAD91248129D2E45135349A3BAD84C78B914ACB0360D204442B144A2E92A20D52258DA1B1D67190F700A6BC835486B492468D76BC69B634DC31454475364F21421BB9A882C78BAB945696074895EE527F65BABB422121B981C8B8C5C8EDA85B1DB732A8527785349CCADB10210CE051F3CAA3515B7689A256BD5F161818C0D06834EEEE9A3CD4016B55A23C6A8092164D755C52044A64BE85596C4989EE1DD9385F87C5DEFD77C0B1B8669484C754D2A452AA342983214C07CD4912864B556A12ADBCBC041CF5C13C5E804A2954D02AC96E641A8DA7D10468D038B43819494692E44AA0188BA669DC79C85167ACA63A6AA8BC122A244250A43DE0DA9167986E43D163DAF8385DE87FD6626D3B10C1E6BD19571E5329A5C54879EEEE0733183486422989E3F122C8B5121AE80EEAC7888E1172B924B550AD1692C369C2385E9C42A9D484C7C9F6936A79923D542A2F20809147454320A3A9D1EE1A74DC07060DDEEADE8059EE1CE9C11620B2452502212A9306C!
45556D2620262A84A1A3054A16128419484113EB512292FBA04AA7B6A068DA65093C86
43597EBA650A8D4C270212853384F4D92C9B9AADC241E1AD988761A2A41AD93EE0A2ABC85A160005087D1616A6C0822EC97FB9DCDE7FDCDF07F07339BD797046C0788C2CB03A8420F0D23DD3D23434393AA5DC9115C7225B23F009146A8F62171C96AB0491299042AFC8808B5126E79322E2910A6002AB5C431BA445382EF771D4063D040BD0ED2183CC79B18B8A2DB9659E6B3C7FD90CD0F3C8EB5ED4064B1F86784C7F85456F2624AA8EE4A695C1C831A1327917073B93E64B7725E89A346E348959054DC4075848CBC41A1ACC48713A1FD60D5E47032A9965B2B51903468D47586263A03808B2E09F04F025F44D548A3A9E9E60633FA205B81C8063DD131C08816105EE95619C3939694D0DCDDA5D1013C294DA252D5926464B54F4C89660F83EA2E018A643237928F4CC253D036A8D53E649FFD24B7FDEA0DF0B25A355728D594E4510F6644474783C90657AD606404C4F1024AA85B8B30EBB837C213CD578840887EDA1A87462C6E8F51F0A2A50C8934A01C2092A9642452AD4CBDDD9D56EEEFEF2F11AAE0814C285128680AFF5C2E50847A5FDDDCB811001188519C50A94CCF70748C8ED644F30027478DB424461AAE29CFCB5B69BE7B5875A23A9BA725FEFA92B8988898CAF24A779EA6DC5D525E020C81BEB8A9F793646E95E56092780C254D55AB562B84B5342A4F23A4!
09795CAE2C02D29ADA4DED531B081891548AA424E541C6414794D3C0621FA40668D071F9A879156343F66DA4C4B7FCF2CC8BF3FCA0E8E8C0D4125E797844E5867245098F16CE50C4F134B4182E49C64D91C9B83E341E9556C1D0D014B5A0443E1212505252121313A78EA186D32ADD486AAE8F5B606E6E2D49952B57D0F268E91A6A09643428F6A3A90C45493843C363588F80649E1547BF56E3E1741B13277BDFCF8F9466B6398894E8000D956EE5340D0FEDDAEAA8E1C59168112A5475F970CBD158A224798A429E2B510BB98AC03D34854425510879C09AA65CAD06ABBD61831B29B0960C4F4894528D940A390D1D628DAAD15003A05ED3D4DF3E76CCB620B23525B2142978E1318A4A1A4D0AD987E70E085169493E32320D529492867667756444D348AE81242E894496E726A9481212494A43157D4C849ACCA5F9C4F1DC6460AF0325F214F91BD13428D0408C32F23232D01EFA0119EBF18345D80C446577C613CDF35D85EE84D99C22850A5F21DCAEA8CCA329A24BCAE3A84AB9303730422197D284E134AAE68DE88C74AE4422CFA549C9310A1299CBE506CA85D268C73C29DA09AD5622A4F17CD424AE4CCE2549E29429CA2425C3312F2FFA605E74465C4049794092F58823B3DA99F1D71ADA31DDA11E93BDEF3E4A643B10A1318D71E11B14A41250A2A46F153C5E7480!
3257C5CDCD252B2592CA720595F186E3C13792684A798A921AC755CA654892C81BA454
C857AA0D6E64894A45F2E1B9A1220D4A3AA94222952425B9531D3332A819E0ADC3E3F224E663B33E33DF930991AD79228B3C4EBA218EAC8AE095F094290A501F7992902454E572951205A4232A4379D0D15DA192BBE64A78BC40898C4C5291641B50CECA28E14262937185422ED46932C0484D26A5C4D1A454A92A9D473D58C2CB08E0D1683C255665B9EF1989084F345FDA89DE90C6456CE09214E11B4A02243CDA1BAE12A9324542524A54B480726A78002F0F24C55FAECC95C4D1144A92BCB6962B0BCC5528331C330254B53299504D835CC695916A1146DC5C6509A248A9E165646494C795BBBB952BB1061B83C8C6940833ABA41B22226412B29B90AC90F0DC8B248CDC148942C155A9DC2BD181ABF19379B80B1529346A124925240506926412B9926617E04853710365422582484626CBB8B5B56AC868E40D713C9E3B2320038CBA26C6C7A7525866B62D88A6DA03769EEDD4081025F9446CF091B8A94912B982A4A02914BC24451C35C65D88E7AF184D06359A5A92A1510AA57134FF4005B93690248F53E4E632A88E7190DC5432AE44418E90D592C950EF73D5B5240557A2A431949A9292F2983869B98F8FB00C7BEC207A548D8E3F3BA2BEAD4064461045B8C9B6AB6B6B5524B990A7A05179317131017134A54AA554D03478277E1ECF5F49536650E5B9812A3949161!
7475BCF70D4506924990F8811586D592D37904426079248B51B942A89B25258C20B280FA749B7BB299465E6D932F424425466734A64C692DC7C22C8B2ED64552D57C58D8BCB88A341CDAE904A632A5529AA24771E3ED8F52055F8FB0CF78C0CD472AD52A98442490094F0FE72921C8C36904322E5CADC6464B7FDB52492CF76B24245936ACA79313160B71464C9D8591B2D8412CD8F43A2FCA272354B140091DA2D8224534862A8253C1E189E180492849614A8F44787F9D89A9747DD53C49030244A9252AD22A9E44A39CD71AB23030C78AD3C4E4E8A50CB483EE1E4402ED707CCF506328D262947FB85F8D022A46AAE6AEC7C7A8F5389FFA88684CCC9133DB9FB9DA9146E6E5C32C927902C94C4C4854B2B855C89B0BC52280C94D2027393AC10513324B96FD01CDDE58124894CA692AB94CA68EAC1839214923A305C58EBE313E8C3A36E7053ABA1E42705AAB81BDCE2623644D0227C7C7CB8925CCC6C5B10D99A27B258028564AE4C48A2B9FA489471253CA1929BABE2D2E28434A1D247599454929197B73583172D91E72A3224508E496824D4E0A8546AA819194AB0436AA99BD04DA2564A783E24B52CB016AA341257B1410A00A13D6549F29493B31D08F284A6335BF3449693295C6E2D57C925D7F2488A125E8C5CA9520B15B9680757A544E8AA9296E4E595948467809!
F96705572B9FB06A92C57250B0C540919D152726E2049450629F321E592E27CD0A090F
D245220D8ECB80D4AAE1B146C6A796E917588B585F044F31522AC88240B54926BB9129E3C262380C615AAC85C52A052C8857BD2A2A498125E744080265CA2929395A44089520ECE3A90541B18A8849A5FC895C9B824A18F4CA1022BB5818CC6A7914188207CC824D4F82809742DB29EA5DAA620BA6F63E393B293DD8CDB894E16B926C964642E59A620F1623412B244A95083ACA825808D5425A1959404F0023407696FC84924AE4A459670E5B5203FB5F240459C942B91221523056EF75191C85C35B9965C5B2B2343AD5FEB0630A1C6276068E28188CD3F9B1EDBF53CD3EF35AD16EBF90A9105C35250A222A19DCAA4B4381A892B9328B8AEB55C19579D2BF44F42C365CB79D12519F2F52A552D643E486AB5204581009244A1CC25293608492AB53250469671C9B90AAE0ABD934B26BBE13DB5B9AE4500117672C241FB67757ACF2708A2325B53222445275DDF808C462693149552214D1EE84A2207E69224248942AEA2E5E6D2A4E5525E3983AA480170B82A1A570E653D2004E8098592405A1C097FB74C2691A9C95C256A357223C35D35F86FB96B0A30846196C91832CF6325BA35EDD2F3491F2A82762C4CC995CB555C28D068A0430A6E6E20302293915019267595332AC3A5E52552A9060AFBC05A2006F2197867B99CC4850A5FC255A80241987CA43E5C994AA670F3E1!
92C026B99190A2810EA5800E8125BA3D0943E6C7753DCFF47B4D6B3CD13C8508FFEE4545AE7228BEB80AB210D0909002734172241212E88C462E5704C4544AA53C7F852430571628E74AE464955C86280235E22A8442A02E50450E044F457223F9282424B4BF35974452A95C5D5D8BCA901061E30C596C03225BF3446847F9B2225757B95C225172E5F214B81718E8CA959054F0304092EB5F4953542A14312445A00A8DF75006E6CA49708117919412856BEE766E6EAD5C660587CB95A9A162833B81B9AE289761D8DD6466369B6D249D596C0D2254231515A5B8E6AA801BA023D01570021E482AA1524E93C8938495CACACA241F256433556DAE1CD428508E8448AECA552AC834A8E6B8A440197824994C4592C00BC018C9E490C952528A2CA88968FC98FDB603918D29113E7015695191EBD72A50230004CA2F1220016AA254D1E42A955C016E49C815A604CA6B417F242439E42F785D606E2E572A942A7303554A48864AD01F39BC55964B02D32477FDBAA8A8ACCCDADF814DCAD0FC84E851B758FFD6D0DDF3F977BE7F1912A3FF06870DC92A101C52A0442257285442B82B49E22A7C84204BB5AEAA40A8DBB88110E885A059342998245757F0D024254210C44A85440AA5B232AC0C6FAA7E50369BF5DE1FD3856CBAEB7BBACB9FD22B61B71F7D8BF56306D19DC76518A208!
8F5C444120298944E64A84AA37000B21AD522194A0EE0C840E173C532EF24DE07AB852
1A6AAB7685F9E0C7E568028072D743262BFA3942B60291E5B6CD29D1C49583C40802610424407125E10A95B972D7DC5C9250215182610A8444969B2B41B76882AC2691C6285D25A045C0111220B0421080505999D5524FA48450A2873464E1B76E127850898AD4A828654C8FE46FC8554A8504107A233737492897803942E8B822C981D20B40CBCD9527B9A31D4154B94895AC00E1355959113AC310769F3DCDE60AD14C77F999EEFA9EEEF21FA9123DF9109971838DE40817A494C06F254A896ABDAB6BE0FA5CB912104A427A0310C105E913E84E8AAB5C992449CA5D8F3C508AEB7A9891F253114A646508A1FB4232DF21B2654F64DDE4705B5656565C54545F74A8C8F50D55524A2E02C3D5F50DD023D51B24C0080915200433F1AB952014457049A9873C76D23A1816B31E07FD21434478A2C7D9138D1F55B1016B282B6B282AFAA9A80C4408F4251725B8DC22F03B127F10A294B17C97827B1FD448F96D6ECA49D42664CD62780EC3702AEF14F7B604912D2BD19D7E090C71646E28C35220B31581B8FC84AA36C85470C1B3560ABAF929C51A635E1CFD010D2A2B2A43AD8B160CED23641D133BAE73982D29D15447D49F2E3C4FDAA0AA89E37DF0C466C14E4262432041D48F2183EB0DE43A64C08B7EC293D7582009C21AAC761A0706BB3F277335D6B38562763FAAE9EFCC7!
8D7434DE388FAF31FA2F1C0B140EA52548683530CD77A2B5370DF7A05784EC28459E1316377DF6A9E66CC3F882C84124D382110BA051E90452AC353154CC577A4A7AC684C80ACB48DE363B69264C16C16A2699CEF6CBAA5FD93B6CBCB7D20B23EC4B313D224FC8295DD99C6C2629E53CC16A287D59432E5D08E19EF3A348DF39DD90A447736F0DD72CB3A4D08CBF4B3960D414478A2FBF44DE010FD62683D3646D46F05D1234D6798E5D8B1AA63C78E61C7F01FD0318CF044738268AC54C72C130AF6BBED0116F33C8308672624B3F0DD77C3DE0DFB67E153998989C0539585A8CE6669ACC74EA460C63D11FA83DD73D845F3A47DF34F2A44966389058559594E69786465A565855DCD0C49AC3A66999512CD7430D2E306D5548D6FD34E6777799978B5583B35F0B649EBE541E33D1E024433AD9E66BEBE104299FFCC72B206CE1050846EFF9919125235ADED8F4E40710B9B7264A3AD41649964BA6B999046992D4F3C44B72D58E2BB4E694E4EDB00A1EB634AF403122388770B33774E67FB579D9CD6186B9B53A22962BE28D1EDDBC742B25E0782529DAE5F671DE55CBC781E222AEA1CABFB2C8E5166C8C9696C7F6C8212DD9AF1AE228F5BC93FD5D08839438499AD2DD4F7EC0DFDA8209A69093EF308793DED1920A89BD51375BE4327FAFCB933678E1F3FDDD2713EAAA71BD!
25A58359ED2A6DCFED3D9EFCCF6209A2C9D59AF7314B2C707A26361A042593FB0DACE3
B9FF8F870483D44627D7D48FDCEA74E387709BAAFA76515868460D38188F044D3EE65474608B3DCBDCC92A2C7C6136582997EF78B8E2EFB4F819E90900234ED0C0909A94FAC4AFCB4852E605DCF7AAF20D132E6C16F4F43890888A6DCC663EDD816CB3DE75B783221B224663965257F72BEE550221074B820792C0A0A80A4AAAAAA979DCF6B9765BD075A841FFBFB8110114A34836D6C1DF16115A227DC585B8E153AA5FDF3BF04BF2FAE02112A48BEF63F8DABD6412C5F77E16FFF951C529C5855FCF9F9E6B065D588A2A9209A7C64E3E33ED86CAA95FCA0F143F72DDDA7BB91A778FF34309AD1F18AA63B186D4604552516BEEE94E572EA1056852374ED9555EB9E4708E1F1B76B3B8122ECE5F3DAB7DECB2C0899A2B1F141474A9BBF103D5EF11B405495959AEAF47A58EA68B2B9AABE20B91A21B47CDDF3BB76ED8ADF3586510150746C714EF3D5CCCC10CB541095D9A012D93A4496C2B7DFDE94B6312D81B3F35871C1B56BFFC5028476EDEA8569C50A9369452F9074E01AF86BCB5F054F55676616CF5E891EF75D81667A4AA5271DA287B7DE139D12C4ACB0B44D09C1C9D8CEE4EA1FE3972F7F7E37C8D00A6008C2B4A28D03147DB0B30AC3CE801265864CDD4E841110D90E44F8FB429C1212D2C2523705071FAE3A5CFD632F92213C565CDA05085D320149BD568AAAD616!
166666564DA7B1914867B691CE2CC7C045875465A66E4A0D7B3D75933838B9EAF0B555CB97EFDEBD0B4DC13846A64B2B4C5D2BDA566D3CF0727195E5D3B0C2B17C465467044478977D5AEA8E54A7EB694EA969614E9B12C494E4E264D6F2E52FBDF4D22E9CA34B9776C17409B4C8D4D57A61E3DF76565992B3AA0B0B0A2C447546408477B766A6ED4B081E4D4888774A4DCD826C9640A1BC5CFCC5BAE52FBDF3CEDE97760345CFEEDA7D09E2348BB28662EAF1BDB0F1952AACDE09F259C8B1D92AD16C47FFCFB571F0A10D369B6710CD6D7D5B42B25EDF111B1B4CE18C8E1EED3E5A882C9178F0A9E203CFBF0410BD04BE1A20DA7D69F7EE35673F5D11B4706950B0E9C28103871B8A59783E7BC08FD33AB2918068FE4364F95F7FF8C31FF689478383474D148E6F776658FC5E80A8FAE575CB81A2975E3AF0D4B5F867773D7BE9D94B0B9293D7F66E5EF4ACC9D4B30AA4A8AA3BAD302C33F18110590825B205882CFFEBDFFEEDDF765028A309A684510A27CA29332B3E412C1EBC7616AA7BA068F75BC9C9DFED7E76F7B3CFF6FEEDC2AA552B82D7F4B27A1A9B0E6CACAFEA762A0C2B0CB1E03D1FB357A2599FC2E811371110104D7BFD5942FEF06FAFED181DBD41E17038E08A125C0AD2C057DF18BC76E0D5E7215EDABD3639F97F763D8B22E8D94B97D65C5AD1A35D509C7C61!
E307F52EF16161CF649E7CD0D09469281101D1130FD1C9DF6DDBF63625C174434C19BD
C8898F0DBA9E898AB320873F6DC485E8A5775E494EBE8A20DA1DF40E50B49BB262554F63E235BF8DAF3C75363EAC9075BDA0F8E4E410119EC806D299A570DFB67D6253D4A838E8C62005208A6515225FED90FDC757714BF4CE4BEBAE25FF0DE9D09A67DFD90C25DA6E8088F39F2DAC8D07FE7C3A012A39D3BB99C916C213D9344459FB36BD106C8A0A164306BBC181E2DE25D30AD187AF82277A0971B4EEC0B3CF8EA5B335BB2FAD885FD5D373ED33F6818DDF2D48480B639958994F1513D5D9E304D1EC8682CC7E7D1F7B7D6F6C7054D4C51B60A56F50A238E2A0EBD55688BE7BF5FD82F7F18406F8BCF3CEB3EF0043A0469776ADEA8D672537AF3AB0F1955712D2B29CA24CCB32EB1FA444D31DD9F8B0776E9CEA7DD36D647BD2207A58D04C1FA6866D7BC5265314452C0E1AA4848E8E3A38B0C2362504538200A25777FE88430418BDF3CE3B9B712D5AF36C2FAB97B3ECA99EE6031B379E4870CA723A673A9AF91436C9FAC78F946626209ADF1015BC1D2B365D1C4510DDA084F67306B35961A909C1371C1C5E79F5D58D562502297A67D12210A33550E7AF580591BCB60394E8BB0F839D9E6175F798BECAAC9F6CFDDF269468DE43742CEB053105942834481C44A1845EECB9187AF69FF10990CEBE3C0E9EE8C7575FB226B477DEF99745EF4081F6ECEE15EB2EAC3A5BDFD87!
301205A66BA1E1FFCC3750A0BAC353685123DFA127FA6BBC24C770884AD4134A35D89D0ECC41DB162CAC5A87E1308D18D504A540F8BF36E75FC268A7870F0CF1B5F5DFEEAFFE04D45488A56BFF3CE97CFEEDABD6BC5850B170AAA5769591BFFF6EF67839D38C12E692653E153C593ACFFDBD3DFEF8C80E80982C87217224BD6DE58070AE762E82814672044A33DD7BBDF459E48EC40B906102DAF7EFF256B8506A6088468F7AE5DF1EB2E3C55FFE22ADF751BBF3BFC49F0F5A33D2E695194B48293F75FFF84279AFFE9EC58EABE20CA6854A897492C06862E727A583D2C2764AC1D2E26FF0D205A9EBC710CA267AD0CED8AEF4CAEFAAE8705966871D527092FFAF6A79DBD48611554119EC8E620C20FF9061039ED0B324599422F52828228FD51519CA33D478F1E45100D9A0EAF4510BD7A1899EBE75F7A16A6DD684CC8BAE4AAFF5AC55A7561E3DFAAAA1A139C9C7A96755FA498AE5611D599AD418425161424566196AAD7636F8C4651BC4C9420F0D7A351E78E721262C5B81245EDAC3F809A1B5F4DFE9F8D7889B6EB25B0D5EB5ED919F21D6BDD05B0D5FF5555D5CD714A635DE75CECA77C513C7B257A5831D34164B31E7436CF219ADEFAB1DC362786245717242686142650A238948B17219BC16DD451D6A6A0E0D4D44DA04451F555AF2CC7E3FDC3C96F1D58B76ED7BA757!
F7B2BB9E0A903F1EB20991DD818521CC28A77728A375DBC7871F03ABE4BF5FD4E9A874
DFBCC8B04444F164496AA90909077E19AC9FA8C1375F1A26930487C71F4A28973D429BE3A240B41E45B5F957CC04AD1C61F0B761EC6F7A3BEF6EF0756AD3BC0BAB0EEC0C66BF5C5D59C78A7673894F31729A13D21E649202294687E42841C754166E17B6100D1B2E465A320256210A4A8D1D1514E6A6A614856FC68F060777D62C18FCB5FB562F4EAC6F77F7CFFFD570EAC7B7ED7BA03170E1C38F0EA2B21F5215FC5A7A63905F7F75F0C5D339A3C9512DD7AE410CD74179F59EF126423104D59EA63F589998561EFA1E37D548F82A33671AC31EA4061555F4F4D080EED2E4EAC4FBCBAF1551480D1F85ED4EB2E20885E4D2B280809C9E2A4A6A506F75FECEF0F0D7ECA32F929CD2D0444F312A25B96AAC4CCABEF856586D417B844698F72CE218228A326B1E912BA1B4CF9A4AAB83EB1FE479CA2E51B972F3FB0FCC03A9020747D06742819E8BB1EEF04105180A150CA5A6C1288084F346FD3197E68D8A7AAABDF7B0FD2D23296EF39A8EE01220A25A1C7D4EF109C304A7101210AD99958BDD1AA4407408B802090A203AF3EF35D48417548419853AA53563CE5627F683F65F0872AC213D91E44F064436261E17BEF15D4EF2CFC2AAD87330A52142C0E4E65052FCDA6049B5EBC860E2B531052F0DD848CB6FCC0C6E5CF1C280C29C84C0E599B0610A525502E0243A1832EC54475!
F69B41F470C70FDD590F63D364F3C72648692199608C323333DFBD1E2C168B834763631362972E0D0A8EFAE1ADEA8282E4EA6AB86E1C7346F89F0361990599D59905D56159A9ACD4B484508A1765A87FB0BB78C64A34E78DF5B8C66FAD3CE6074E536F87FBBD677238CD401100F187CCF732C126C78AC5B1E25888A0A54B299C6559AFBC054F42648614AC058E36BEFACCC68DAF5C85C7685EE6DAAB6FB128B14EF1148A576868E8202B11C3BFC53DA74BBE65995C8908881E1544337BFD2F219A44E7268990AB89909A3201A390C4CC77F7C5526281A4BD2C966F7CCF57AFA4FDEDFD6A6B00325908A38D61D50556847E2C5C56FD146B61B6532A056CF51A8A03AB78023DD8048808257AE2219A220A380B1213513683B416F25E6AAC98122B7E41ECF4EEB2EBA9D7BFFB2ECD6919CE4C21885108724899609270710ACB0ABB5A984559BA301E4A7CD021CAA06F2276CB62C60B347420FD3B106193B713CDB9942620BAEF469EE9EB7FB11D660611563D1A7A1A284A0C4B0DFB2AA43A2C01B29938E885843497D4EE6E5F9765AF2080F040161BBC1018EACCE4EAABCBB27EACBE96159F9D1D9CBA29F862FFE060A8032B04CF5DF091B7EE4EB72C13CF774640F4644334D911ADB21242BB43AA1213C32E7CB5362433318425C603AC4E6A77E367AC1FAA7F744A031D424254806A!
3574531D56985CFDD4A727CEC65382E337C5069B42071D6E7CE91B62F543F8E9BAB009
4E9EF0448F3B4453A4B3497BF1C722F1BA7830EDBDCCC4FAC4C4A720A10145D783C4204541B1099CA3BEDD4F3FEDF283CBD9ACB0B0B01FAB51CAC32DF58F5959D505AF343EDD729D634A4848080EA6F4DF180C1D8C0FC1CFE1653DE976C31D3B7F9BF044F306A24922D129C88192F65E483154EC21EFA112ADFABAD8616110446C424FC2E851D675D68B2E2E2E4E9BE20F7CB731ECFDF7C360CA3AFBCAD9CF60665A302538383821C17471D081E2D0F394D700D3CBC8FE6671F1DD730C20AC4E124A34DF2112DF08BDC85A9B995990589DF9FA33998599993F382CBC1114B430489CC031994C1C0EABBBBB9B057FD0F9CE20AE3BC57338519C1F963939512814E0283E9E323838E8D073D52EDFC3237FD192254B46EC5F9EF0F9D8AFD6626D6B10E1B23F7E52AB095BDB7CE72B4CFC4296A9D2D21D966E8D2D6D7C235AAD0F1AFC01B7C81ADD469DAFC801E365788893D8011F46F46E415562E6EBEF6C0B2BAC2E6439048B831C162E0C02424CA6A8D1A82856EAD1A39FB1D2AEFFE0D2DDEDE2628AEA8AEA61A5F624380C0145E258CE2832D63D4FE530BD72040281D74064FEA2455EED1F3CF7EF8BEB171F4AFEF8576BB1B63588705CCCD8C4C766EB99AE277E156CDCA19AC7674C051136664A2C3F43EF96F58A59DB026F99D1A3DBB0EC5BA0440E3746473951BE0B4212130B9!
F494BCD4A4BDD948A207258B834884219A5503851A651D651DFA77B8E9E83E8F9ACFB5CD4C5F3BE2C8E499C0D108981B4040AAACEAE0E3073F45ECC818101E6798157A45D7EE4C0C0D2C8D0816142891E5967C79D8D8D8D2134F1F3EF7C0DCC7A6E59FC35D381E8D6D8A968C74F266AC5D28CDD53D95B3FDD8201448337FA4D09148EEFBB60880A7F4C08DEB7772F945C0E0BB3D1651032D6A8A9DF347AB12BCAD7DEBE4DD0E6DB73CED9D9D977D568D0A0387B803208B6488C2872603D75DE789E7E5EA0EF603BB7885A74CE5AB863DFF2D939C1AF369EC8E63C91151D6CAC55D9323EF3AEE8FCF26B3DA0549F30C2C37C37238E23649E701ABF9F254AE489826E50504F8738380BCAAFABD7539FD90B757B4250B6034C8011A89169F45C685B8FE99C73770F27AA87734EEBDBDC63027CC48303A162902231A2C88195DCA96B66777534B7346BF56D6D1DCEBAE66667B6FDD3CE9FFD6AE3896C0E228B15216C9C1E6CE2D61D4B6BE315CED8798CA703118EA1D571E1D1D060FED939D9C69689E1B70D56257208DAF7FAEBDB76BC7DBDB020D3695B6A2C545CA909384168727018ECF9E3C0273F704C94841EA0881305610AA5A01818A404413E0302E3C517FE48EFEA6AA36BB5DA8EDE0E6DB3B6AD4DDBDCECEBAC3DA7253CD10CABAC69BF6EA2D8DC0BD79D7466B166BDB1C63!
B34631AC67A027738340D0D3B0FBFDCAED37B8DA060E6D0D9A2F6F6F52F1FAEAF6F301
73BBDE0208EDDB1EDF5D7607AFBE85BD54E9BF6C68A01A378CAC26CC008C2E10A65C1F181536BE34170825D58204C1453FFC5D0C16107F1E0F0E08D3537408A00BBD8B4FFECE7F77799BAA2DAA2DAB4BEBD00D339F8BB0A1E119EE8114134263C65089306E486EF9EE6DA7C4F3FB87942239E79CA23EA8C7B2D4B19DC29AE5F29A247DA41D59DCF58B4C42E3F3D3D3F1F2A2706CC58B46451FE887E815350D08ED75FFBDDEF5E7F6DDB6BAFBF1094E6B4E9686C509018CAFBECECA50BB383C490CF82AFFFD16B411827780527FE0727532A07CAFD739C73AB4C1487C1E1A0A0C1204A6CC2A6D8D8F8AB9F80F46857F9365F68FEEC82AFB6A747CBE9BF7265D0144528D14C209AC6A9A97E7EC2CFFAF59F1F39B267CF9E2347BEFFE6DBF53FD597354002AA3FB4FEE543870F2D5E7FE69B95A7BE5DBCFE08DCFC153D65B64CE75459F09AE2C5DFEB04035E395E1E8C7C00C78369A48F40F99D6364324798152323034C26131E95E62F1A487D61DB364008387AFDF5F7DEDD248E4D75DA0752244E881A5CBA345B1C8B725B42FC75D30F692CD62BD79DBA9D56A1935367B9B058ACA77FE08014390065099BD66DDA1B14FB6EE673C79FD6360346CDBE179ADB383D08A4CF5E74995A89CC339E2C33BAFEF2F31EFCFC54CF5AC64E6C774711F0EF8459EFA2F613ECD62D3C7BDCED91B2!
BE1AF4011B3F53F098A740DEC3BA0073C3A137DFFCF64D002269E5F7CF1D2A831C82359495D5978DB99371C30C0EA5AC7EFDB7DFBCB9F8E56F4FF9A72F59B275F5D6D58E5BC76249FE4805D3037462F51274B3753583B104646335DC5FBD289DE9DFFEF2E18686E243EB17D7837A2105C3AD7803D22EF46576FEF59BE7DE5CB9529403D26307BA931F19999F3EC2CF11E8E9462FE6482424B3480FEF3E94D3BC8D0623BFC640EF76DAF61AE8D06BFFFAFA7BFFFCFB57FFF99F3FC4C63A6D128BC1E8704287973A04C727C4270427C4A776A765BDF5A7B52CF1A098825AA9831382839D96553B5186C13205C5EE5BFE7E1868586CDAB573AD97BA5AB5ADAB7A7BB42F7637BFF8E282652E4DBE532BD15CC6F14D0FB90741FB4B8827793B76ECE7E35CB0890F6053DC394A061ACD803AA2F1361A74B038CB04A76AFED9FF8B84A1ACFED0B72BF7087246D219F9E9768C743B3B0623DDA33472A434D2C323BD1464C02372C0F9CD43E03FB0FAC5DF9EAA18F148672C6230D075517E7A247A417A7ABA1D0267098301DBBEB4C65853C12C2D658ED8D9798070303DEC60C130D92D82DBC8740415BC7B11CCC94F079D498FCC61B3EBEA043940DFD6ADF09C9D9D5D29C80D484D0D288EF1BCD1E8C51F311A9923DE911E57987C03DFDBBBCFC83718F87C636BDAEF5E033FF4BB6DAFFDEF!
0FFEF41FFFF1D1C77FCF4A4DDD4B817C969030389C1D749DD5D6665AC131999A7C579C
EBF14DB8024E1BACF697830E4141F1D79D52570C82F3A6ECDD9BBA36F99F67AFBD92907656DBD9D8E4B9A2B9B1B7F9C5A6E6E69EDE1EDFEEEE6928D1A319233CDBEC63F9F9F597DD35E35DCBE88A59C68CE8DD6A695C34EE64286C7CB90D65C5F53FD51F5EBF929DC31C40F654A7CF89F448CFB7CBF7881C8984FCE02FA86056D4D5E5D4302B72E815C8C456B88F2017C2B05B041AC3647AE47BA457E47855E48036EC115478555454E4D4E5E4D4E4E4D0E16F056087901A61024574449107D0585A0A334B3D3CF2010D00267F04EE013B8B90C70163C38017D9E10402568BF23D3C803D0F58C6084A6190BDE803F05DF94888BC8C5E91DE23CC2E3EE063E47B42180C86D7B62115DAF6DAEFDE4EFBFBFFFEE8EF1F7DF4D1F534A7048028387E347B7858ECD2E2DC217AF9F0731D0228B29C7D3937065107C720EAE61804371DCFA238640F0607EFDD1456FD43FC82ABD79CD2BAAF7CB968F5A27EBF171B2FF43477BBBCD8FDB4CBD353B7133D76104D2645F79CE0F76E53EECFDB917F5624A17E096B941DFADE19FDD6198BD2D3472AD066AF1841CA9393E39543AFD3FBFBE780665480705480EFA8A0EB738C3063A474A402C8600AFC73EAD87AB6BF5EEF6FCC0185C8C9A903C8602939233975FABA9C3A3ABA5418012500082064D6308184D25220AF0678C06364A4D4C31B10C!
36B2C8F1C3E1332D4889119699D13895255E9C8487A297A5B29D3080B30D2730C46A391AEEFD0C32D0A3D9BDF37C2A723151AF1EE5A711D440821F4AFAFBFB683F5F73F7DF0D1471F74A7A5C58AC53782834DD9C3140A4B40EFF8F4A7FAE2D38273DA8F0F9F3051707C1041416B20AD715243AF640F8B29B17B9FC972E9661D7559F65656D8E9CBCB3EFC9B5FAF366A55F78517BB7DBB7D3953B713FDC6104D37B09FD53A66BC1EC2C6CA67F39DB693BB4D7F166B278419F98E86C5ED6C48439115E02B4065FC8106B8E6A094C1F6A45BC3009A031A528136B71137B0B0F9002F80445FA7A7C39D484002CCAC078A7498C0FE9482F0D4E9EA6A6A408DE8747E458D91CEACE04312025E6061B0903AA06104B6F888574D0DBFC6683430F97C2662CBC04482D537D26797EFCDAC310032DEDEE970D70E1609EFA3EBF5FC11782D9DC91CC2F9D1EBE906BA1124A8B51517217EDF8AB67D2FECDBF73B40E877AFBD0D97A31F9C39F3FF7DB0C0293516399F604EF6407FB06FFF80F3E19DC5C5C7DB04F6C555D7A20607B3AF380C43DD7F251BE48892901AEA00140589639F7FE683F5DF2E30253865A5157ED13BF4E595A8DE4B3DDDDA9E5E9396D533534FF418575DE3B6C6DAE76099A05B6366D932D68E8C4F636D7498F9F0CA0A109C5226A287EE0FF8E8EBE8483DE87575FE700FF!
0A9E1C3464FDF9CEE5D039BB50EE6D081083AFB261B9EAEF3835B03884BBA871D2CA3A
606128E07928A74B03ECCD21A5858FAEA251E004C4D5D8E01DEE9596744566664A406DE4C07A86A8C06C428A42084D0488DA1A6AF8FD9D757B3D92EBF0F3EDADB637329132CB2274C7CEF52A6671D1DD18716E4E5ED3140E77B19F9508D199803DECCF39E0092C1C0ECE3F3FBBCE9ABDE7EE18517162E44086D7B0D6E77B03EFA3FFFF11FEFC6C78A831C28148E29FBFCC504D6A5A1B60F8AAB76B6083A7C930F9FE00C0F662357845A8F408E2809ACD0EC2BC3C30E83E2BDFB9EF9DAF54DFB51D6F5AC67C2BE6A32F59B560C0E9A4C2B7A7AA04E9BA9277A6C4BF631056A80B20935E24269535C545F7FF8F05FFFFAE673DF1C7FF3CD438B0F1737E0BEA778677D3DDCD6EF3CF4D7957BD8E04340147200205013BA5E57C7063AC0C7D27179A9CB816D0B06D560F0F3AB6BBDD929DA52C7BE5967A0B78AD87E6CF8ED1BEAEA80146008F0296596320D08BB1C7E4D0D28C34DDDCD9B37457AD8E6FAD61A8F1A3A1DCAA51A500FD01BFE88C708BF860FE23462C0C3D393C9671A3CC744049E1AF1DE0CF6D993DDDA576380BB9BBD4BFB408F0C7D7D1ECC520FF83E7A4FE6109FEED9C534F61BBBE85D9E6CBA71C8E8A96F330EF5795FE11B2E19F9AC589CA1850B5F0057F4AFC818ED38FA7F2D7B3A750740142436C5870E0828C1ACFE5081F6C471FB53DA96E34FB72C687318440C!
2D057206B38122AB120D015141BBF73AFDC7FADFDB9F087B66DBBEACE4C6B6FEDE9EAE9E0B3DBE6D9C28D313AF44E35F0CC080DAFA94BF1DD81A287A2A724AC1D168505DFD2F8ED6589DCF1480EBF5AAF0C09D0DF8D3F448D4BA52A7BFE97C13B9687A0E921F5C68EA4068A06E861CD1AAF7D4EBD97E9DECBAD656766B5D9D675D2B1B404232846AA39A3AD018D8AE7DE09081A89BAD37E145401FBBCE50C31675D619D937753A3F581C88448DB1AE0D2A6F3A9006EFF50406EB602E2AA300A256484388263E0E151F4706E61B98A8D8F2F61ED9BC79B337BFB5D560B8D96AA0D7190D23DE7CE310DFD84FC7D359FF1073A08FD90FF96CB3376447E029F5858556868022E0E75F5F7B7BC76B09941BE2846060884289E70C787550C409FD836D1D2DF6CDC73FB3FFD4DEFED3DE6107B0DBD9701D862C3648E1A40E5D71C81E18BEE2F06550ECF3DBB23E5AE6F4CCF27D2FC5A6159EFB52DBDDB6EAC59E5E0EA767FA4A74C77B588F0988DDA9856EA3E3F6E1035930F4E05E736B6D9DC550EB0CF22098B56642FB0B8C0F1D86D9B7EF8E231E1F063E3E9AE2165E6F596F273A67D47862419EA6A17EFD9E3A0FBBAD1AD4F0B2D5310F8AE0687800931D637534CC43458EDD8080EDECDFA1DBA36777F80BFC3B9CD939023434C65F60E4D3D9A0296049EBF49D3A3D5BC7068DF1D3B5!
B2F5107E3A746DD5B7DED4C15C40A7B5CEEFE64DBF9B404E69A95D7A692970545A83DF
EB8344075A0599ADB50E04E4A627BCAC135EBEA513E0F383A407B7ADC61A76AB815903C4F8E96FFA1940D1F4008F1E505A013A042AC4F4C69327C895C766436BDF08628ADFAA038932E8FDB474BED1D34F5FE7E909D6876EE8A21B86F8FDFCAEB6566D1B7FF395BEBE7ECFA1CD4B0D5D6B86FAFAFC762C1C672808AE3B5EDBF1F66B3B768C2ECCBEB1571C94ED104C615D0C3D4FC721123C575FFFA9B3AFF38943878F473938801B420C655F41E92C3E75387B1841940D25BFF8F9E79F79E6D56DCFEF15BF109BF655E8250EEAAD6599FA2F5D99713B11760BDFFE7707909B317C036396DB6320603FAB8DEEEE19701B1B1FF772E7D66C85069651651DBF756BE2902D6C625F0376A7CBC0DAF0666E38F44D3BBBA36E249DB11AF839B87AC912CD6AD41603F8A05B08065CEC985E02F69EF623DFAC5C79447773CF1E1DDB5FA067B3F7EC71BE09F7D902410E14376C880E1D5BAFD3E944223F5DA7CE4F0F22045B17F0F2D389E075AD9E9D20565B44A2CB0050291E7676A83EB72B2DCD47F798A05190D13C3CEC989E3508085D5DAB5FEB4DD11636586558881FBAB4D281863A448B9EEDE97713118424C8CF4F0B90C09D2E20064002BFCC677A82530220D906CF21A6B7DD10BC09FF467A20CF13A843CB686D6DF36CD3EABB8C86B6D636BD96DDCCEE620EB56A5B5B7B7D53C7185!
A845314B470C71F76ECD891BD307BA93821280818E2F4849E17440D06B1B43D2D3BEB8B8B4FB5890EEDACDFC91946860881333C1C3A183A98CA42380D0F005588A27DFB963FBF6FEF0B41E2A017C2D6B29A7B7A383D3D26534FD4CC94684C1E6E8D3910B4F9C71199380C615CB76EDDDD3D69CCF6620DE3F7EF9719C74B6EAB03B65807E5343460584319189DB2C32FAFFF5EE40F3EA52E076FD2430D74A8E1CF0EFD65A096B8ADD1AB51DB0A94C11E2360546A6EB6AF3CB2F294CEB9BD5DB4678FE848FB1191E89408EEE87447D8CE3A1DC248D4A2D3353BEB9A44EDED2DEC665D53336CA836D81E7AADAE89DDDCC9EE14358A448823BA1E5298B1C60EC90EC0E361C7007B528A3EDD8E6960DFACC901F76DB7C803B406CC30386150136F6FF0469E48E5408A40CA1095A03C6C3600E0095B1DCD41490C80F0F4EEC39B07E9609F5159062E1BAE9E90EF9AD95AFA10BD8DDED5DFA5D7B6817346F840AA355CEAA2B7B5797679B66A9B3BB56D06FE15EFCD570CC0509B76CB36C4CE583243E1B070C7EB62C490C3686C90C30DF0421CAFF35126045154131467C59F081AEBC12AFA3A0CE3A96C78783014AE9454975004D4C0F040284ED1DE7DFB9E7F018DCF0EDA54BDCCB7A7A7BBBBA7078CD14CDB89EEB4F09B278C5FB8D32B3DDE1771A7B711EC6D0376679883B9A1FEF0E29!
7CFFCE59B373F3D545F8FBA91AAB0E2E29D8777D6973560D89DFE06785759F14EB814D
72F5E7FD33F074A5E4006B5B8ADCE735C0DBA03B667096C3B3B0FE0084A5EC692D58C743413CC503A2A8F214119E96C3039400FE043CF01E96177B091D000472D221DE2075802ACDAED1B1BED9B448DA7E0DAA2756E696ED23583147542FA6A12E93A454DCE28BF811AF13D22A1A462823346ED831EA5E81B947AD82D015A6F8A6E82C7418D371E1E505C79F78D6CE6D77802377E9E9E7E9E48CE00244F4FF80B73D8C86101A82867823C21A8901E81470795E233FBE8E8AE11396723DFA0071BA6032CDAFCB45A604E0B7F50FAD3032ADA5681A14BABEDD5B6761957B4B5B23DC116F5199B21796A5D362D4486685C89162ECC5EE8E020C60DB34382D8C1216870345E3C3808F300A6AEB63FD6D7FFA943DBFC69FDCEBF4739643B0C0F0E42FE1A1E1C46E9CCE5E2B0C3952BA1C3035EFDA8113B2876D35E6069F0469038ABDAA59BD5EDCB319958AC19B513FDBC17101F9477579E268CAD826B43D5E1337BE89191E98BF223E96C9DB3AE434FF78A4CCFCF8F444DB18B50B761A43107EFEE49472DFB9115397410873D3A11185AF851A7DB79E433D2D3972C418C2CB163E0690AF525ACC605C88E864F76E07B188BF019E9E963EDBF0323917C3D7C9ABE83CD86ECD40EE4B4889CDB9DD9CE227B917DBBA81D31D4A26BB717C1B76AB1D7B35B44F6A74E9F686AB1B76F693F2D12!
413283ECA6852DAE038874ED8D9D7E6C340F6AF03E28A1402170E95BA459520AD5189001CA5103528468F1BBC9F664E6334160608EDFCD2D9D6C112CAC59D404E8742088B4464FCF2E444DABD613D2186438C85250ED01417440C6D3C884CFE0A33E0B03BC92EFA93768B55D9E6DCD4DCD5DBD5A2D084FAFA81965314FCFB6B6152B7A9B2F683B45179A9BDBF86BFAFB86F86BBADA56345F48058416DE91A1A0A0312DCA4610C5C622573D181F1B84E68022F5467545357FD6E67B4A7BEEE9A6669303D2A1C8012F816020DB01ECB76F5BA8C3F095818141AFF3FD839008836283C49460C4D3DEC2B59F74B33EE3403E5B336D4F84DD4D69D8DDFD8E30D4B9545F5FB4F3101447652020C53B173FF7CDA93D02667E3EDAF0A893D923323D3D1FEEA0DE03668EA0AEC3D9794F873FDD989373DEAB228759E19503A5128E13DE309BCE586407851352967C3B44086CB1F474FC1E4811EA3902E50117843F0596A41412D78807D812B87AA03CD6CF370AD03603D9815445F712205703E4D89F5A692F6A0166742DED2B4FB58007A283DB766E11891AED1B452B1B1BDB45203C2853407D8E0C36522EAB28C1B636F251E30ED31B481D818F82A45677B3F32654F8C07B7E7E29D45175E802F51ADFD313DDE51BC059FB41E681D0C2029B7540265B8FDB6C2DB8754F1024B0D990D2C0E1!
406643694D0FC98C8F6A353ADFBB0F9449DF6AE86AEDED6DEBF5E46FF6FE120CF3509F
1601E4B902C447EBD7FDE205BF5EED0AA361CD97FCECCD57D618DADA0CDEACBDB81F1AB3D58B168A1DC6070E2DCDCE8EA5DCA09828A32EC141D6B6A07816ABA7A70DFCF1F56E566F0FEB52F6B9CF86B305FFF87A7DEEEF9D0786C5A9F01C64B881D001AF8BE7431D821C502AA40CA2D4F6C2A6EAAF5851DA9E4B83A64BD36F271ACB4F6598B9FED0FA6FDFFCEBFA6FBF3FE53FE0857749AF5E1D0DB4440E30732A505F12528548265DD09133E001E4541873E8022F345C2AC72B2792995327A8D3C31644BD035055E740C19B93539193C37487ACE551510A3E076953291AD4905E8A3A8C46F04E01BCF9BF26DDC3EA6851D440D08D9049BCA14462F2511B5FA447241F4ADE3AD872BA2D90CB4070569EB2B70782DAD1B0601DC84E8BB35E2FA03B3BEB409C5A80AC53E8898EF61698A11708A024BF89B44874538724AB53D7B4E5C52DA24E5480233AC01CF3E15BDC44855A1DDECF00D6D8D0D7C7044FC3ECEBEBF3F6E64322022A8C235041C1B3FA0E6D0750E40C483A3B37B39D3B9B2F347536FB75BED8D9D4D9D6DBCA070BC44405D96658699170CF0FCF6F50D7C3B2FAE0132F19FAD7782F5D9A3F34086A73E95217D463FD9EDA663FC871BD6D5DFD6BD618FAFB5BDB56685B9B9BFD7ABBBC97F605E355FD5D3FB41078191A5EBA742940340C96689042F13D0B657EF615078!
A433040D41BC5498DDF140F9754CA95A8BF3F1D75E2D43F7EFABD7CFD91610A8BA37D9A029E287420D4EB7C68B643361AE6889A001045A96B97B1BA5DBA57B1565995C872DB3C154320323F2DFEFDE7473C729C4790C644222206F2199103395E5E5E39CEFE02E0018A67301BEC3A41C71EBDBF80EE2F60B381132F26D0611C491F410DBD1546AF110F0FB02D9070F4F073DF73938D3A9B6A46507F01F0861A8B99D68E4B7ACEC848C5486429D3C88762A9EE3CEA71F446820305354C9BED001D0FB09F50151BF5237C787664C41B9281116D5B11945260886F6A5B4EE01CB5B4B4E85A4075103B0201000E40415A43AF71F60359D221E9D2894E746ED1F9758204F9F941650519AA73CB96A6CECE4ED00B4FBF4E3FBF2DA89263B7D60142AD7560592005415A82E23CBF0FB29DF766A66104BEAEF7223B3BEF11A6014A7A01BD0BF7E9CE4D106C7ADB1630439D9DAD9E5D862E7E9F01201AB1B3CB47DDAF9BE1D7019AB6798C46BE277F040833AC59C3BF04F05CEA85A2ABB5152C746BD71A3E14F56D60AC6119C093567BA18D0F49B20DF7D8BDDA7D13095AB874E94287ECA15030C608A258948E28DDAC844DC14183F1F10EE2F82853D4454E3C446A2A2B7E6828DBF75DCEB2EBCB76FEF71B5FBB0A6EB0584F2F380ACE7AE8FCD3DDACAE81CF58C1C11428F7878791B77E61D!
33F97817CF5B25E5C508C9A7E704B83EF6862BE85EFB08FEEE1F3A05A2A3EF4E6910E0
14A1FE06804E9E79D055E3902E73D2D2D475AF61CB1FFFE1FFFF8FE0804DC87D883B60A6C1CF8510330036864941E6F84015FC4A683E1A50B60BE570E1B5914E44F5A99CC1C36608338F360324BD373D8FABA3A0333078A21D4A007814A727C21809D1713EADE3E54021BFA809848EF7C6F3E6A1D36D051B6818AC868849AA5156A2A00C10FB06814B5AF043542AC803B6A6277E8D9F622761B1B89145C45F65B10452873417A6B63A3F2DE7A450515F22CB0C5759DADBD7E7A040B2E476CBC73A1D50F7D805FE7163F600B9E425F8A0F4294EFDD87CB26B06D1CF11EE9832A0CACB0D60FD884F7EB3D3BF185180CC0DCE6CDDE205C2881F199DE783B11C890AEB3137D165BD4D9894CB4166681745D80B7B5B5F6B6B5C2B3467E3FFCBB5D06AD5F9B5F132C132DADADB3D5CF93DFE5B7E5C395AF5C66DDA168294C0B97A2AD1E3A309C1D994D8915079938A32EA9ACD44D0BB359F10B299CD0C1A121CEAA54166B55EA2ACEF030C7E57A54BF89F554D1D76FB87E3FB8299E75B619EAB4A1A82F5CCE72863E780B0DCD1E86E5398094BD10B4A9F0AC4BD385AE350BCAEE0E071EAFAE8AFFFB9BDF2FFEFACCB71F9F79F3F3236C8117E4162FAF3D473EFFC73F8012FB539F7F7EEAD4A9CF4FC00DE48953F6ED47EC4F9D3AE2DCDE827EECC0066C71B0240236FCD4A1706ED28197D5!
B18D91235E48FCE9CC212FB86D439B4D64AFEBA08F806C807418AD198B49BF3982BAA5E9352823B1D950F5E80CDE4BE14502A311166C1C30E8DBAC5DA27D6071FB468C06E61092294F3ADBD3D8875A6A81A0E6E6E6A6266D7353637BE3E5532756B637B1057A9D962DC2EDBDAE19D0B26F477E1BBE192026626B011B6D2B5B0BC2824A70109F4E2B41080FB0277C3430476B00AB0C9B18F86A86D9F43E5498B7824EA18B688B9F27DEE4D3D64AA7038A4D5B44CDECE6CE2DF63A364201E1A3C3D394B613572ED8E2205E3597F890B560B1F071788B117FB39D77FE88014A392DEEEED96D4626A8207C5CAB1FC80CD827800A7D83CEF64EDD960F2FB361D6962D5B2EFFBF1F5E6E6F85BF2B2FEBC023AD6AED8E9D48110E51E4F095ECC8E1E0D8D81BC1949EB4E034A74D833D5F7CE5D2F859779BE912CB291ED7A2F8A1E1EEAFBAA3F297FA867DF07F3E3FF28F50CA1A71BC0BEB93539FB97C91B5CCE5E8DAB5DB76434E1B76C095081DA1E6EAD9A5D9FDBD0B1A265456A821B86CB1BDBF00C43E47D0D1B2A7658FB3F391EFFFF2F1FAC58B3FFEF8CC736FBEF9F9A913A75A103D630481DB0074F6B4A387DFAFFCFC9B13DF9C821F7EFBCA952B4FB483DB3805DB4A6FC47F97234CBE97D1789EEE6584D249A0A70F8D78C18CF34C7047A81F9C691CF160EAF523E08098205CA03A!
FCFC25F946648C51C50E994FD734A6476DF0DB35B4F14175601A02050223EC6904B48C
500F378A50DA68021D6A6A84E21D6D4CB0D2509F899A5A20A700386CBDAEFD94087C119E98C03537FB41CDECDC8A2AB94611980DD850B0B5FA0D46F8C17B1A60FB899A209BB576413AD3F9356FE9445E6BCB16A8DC9A51490EDB16F29F0824A9F302A8C796CB90FDE0A7831774409308040869D916F4D44A781F02D40F991EF0CFB8B6B582CB321A3C9100C2F7F1EB1ABA32D02FA01B9B9B4146E1BF3118BABAA054686B6D166D4172E4D9D9B4658B5F332213CC36D00DC266ECEB33D0D1F7F633300DBD9DDAB6E6A3D6CA3E1B67682940943D0020DD488845FB225E488B8D3FBBEC930F0A76D62F3E7EFC6CF3D1EEB4F855AB58608F8642CF7EF543547EE4AAEB3F64BEFBF9E7174D9C84F857B2D6FEE7E93F678684141486392504A1316BD90E41686FFE17825233BBFB7BDB56A17476B705A8F8D0D7A02BFF38F3F59BBFFFF6CCD71FFFFECCEFFFF2FD37C7CF7CF0F15FBF3DF3DCE747EC4F9CF8FC7BE0E508C0E30C750DFCB16F3902BFF09623C0CBF7F6F6B891D5E16AA43F6F041303B818BD20C3B0C1BB42DD0C7868E1D90E5C4CDA04B051917B1589E0E52374C877606CBC8C025029487BA01CC84BE85B75EDF03C6C45BD918E271AC8546C100ED46807EB1FD552B0383E1DEA205D2B5BE70782A265835140CD2B7A2D181F76472BFA46CEA041CE9083C033AF3CB545845!
29908B500A066C6469168E5CACB4DB074B61FEA2BD322705077875EDFE50D3665C84087EC34C4F4D41A3A75B035DB2F9FB88CA2BD0967044767CB1611D2A426F877C088C3ABDADB2FC382D9D6F40806CB48D7821184226C056A1202678DBA5BDBA000847FC54F878670B4EAFCBA6015C1976D76EEA2777509D07F00DC74192E19B2F9E8016ADC36F0C131F52D5A845A4AEC16E1E3D5F2172DF2EEF30643B5347F295FDBEB7961CBD1202442D9D69B6C2B44C390CDC4C1099CB369C11C56F7D35F24EFFCE9E346DFE6736D3D3DA8C1A9C7D4F8E9E1AB593F74E5479EBBBEAC3A59F0D9BBCB5CBABB596797659D5D901C92995958E8148BF7AD218A50EC2DACEEE5F4F60F2E186B3C4683BFFF02CEE6C85FCE7C7DE62F27FEF2970FDE3C73E62FC73F3EF3C173678E43EAB2EF40C81C69713E2FE8801A1D110433F09406654D0B3B6760C0E8E575DE4B00A508484D9B80DD26A00F0DA14C6510E8CF836CC0DAD175B4428E632325EAC0AB6878232AC6010FFD294412DBB9596FECEFF732D287041DCDCE7A58A51DB0825B8D743F3A20A2F7D381B56845BF427483CC2EA40FE46E91A674B2757047DBDAA16D866DB9F274631300D7D8B272A57D8BE8D4691192C7F6F653EDF0B71DF7488827677893CE4F4FEFA237FBB1113C6CA46190D9D84059131287D3A82940DFAC830ABD0D322!
ABD8D8E70D5B7465EF118D28376ADBCFC22E0D68A776B004E22486DA03E507EB1E9464
FB6BE0B7E0AF096BEFC45F991FC21E6101D996350AE2D8D971178ED8D7EF0615A50CDF6E666FBD35B742D8DA73F3C71AAC9BEB1117E964DCD2D4DCD901B4F9F3EB152B4F2C30F4F9F3871BA51BB791118C135F9DE4BED367FB979E9A245D99EAB5A575C5A02CEFE522B24CA179B56F47B4651126E201942ADD450DB03400303C343A360898239F17F3A1B7FD6C5FE83AF92772E3EEE9BBE343232FFFC3981E0BCD7B07D72F2D565D7A32207B4D7975DFD38EAB3C22F3E039ACF5ECD0ABB7A353324332BCC25013524395C19C6A528766DC1D397D0D8DA050D27AB8A0F2D5E7CE6C8A9239FFFE5A3AF3F3E73FC9BE31F2FFEF8CCC7C7CF1C07F303B58D33FD3C90E325706E71EE109C17003F4FA37CF6394A68E083442DCEA02D6836DC7716D1055AF8D745A266E74E7020CE5AF8FD821BD27780F3416E4700C5D9E6C82B91FCF35D74E3C0C880371370832C0729CBB9198A25580494C3CD4D50CCB4E8B46D8236D4E708C8B02FC35682F401B616C861FBE1CDBC9E569FE009CBF53440A9B705A9006C8FCB8D8D4D4DA22D4DF89E9AEC964E11A455A8CA809A16246AA82512EF5F85409D63F01DE97EA07A900F74008BA87D4B8B4EC407DD804700E7CA139745A2CBA099505CD18D7A8127D02F30EA0D7C2F3DF251788718581E3C33B5A286A12EF066E08CFC9A81544FD44AA483F4!
A66B4214FFDFFFCF872B3F3C0D5F72CBE9CB8DA2C6CB8D4DF02D5BB5B06C98874CC0871F9E380DB7C78F9F3E711A58FAE4C4E90F8FFFF9F89FFFFC67F80B143536F9F5F6AD59E1D906090C156E86DE15FD7D76AB572FEDEA5BE1071977453FD46ACE7E4F73509BA20364B2A5783ECB0663EDE57531212136E8C6A5DE8FCE5E485BF6E9CBC7937F2AF8D4198D02CF3FEFDCD121100CD81FEF5EF64377547AE43997B02F8ED33F5BFBC5D9CBF6BE67BFC8FAE1BBEA8290F7B2CEB282BF1C46FD2183D9A0430B9D42DEEAEDFDFF997ABF9836F2755BB0149D420A22B9406221DC9690362848178CD35C299710DE123FA03E52F2D03A326A2984ABCC743A524B39A1B5A596BAB51FE6E93EB4CE6476B21F2651F79D872A1B952B54CA50955439D8D801C738D818B0212647BDE94EB2738EB6CE4C4EA299BE7D5F66ADAF9CDEB700FFB7B1EBB76A7DEBFBEB6A77AD57D9C166DC35547DE7DFF51DF5AEA1EB94CC3B064141908077089588E765F3592FEB69CBFACE4E2088A0A3F1CF3D351FA2BB1C1A01887A62301B0E0F9F111C4D1E1681591EA6387940C2CFCA0F86EB504730F258903A144EA967C4C3714EE34559BB5ACC15D963990B411E938B84EB811930F6918153A7EA2225582101F78CC9A6FEFAB13D28861E7F1DB6146A05B29A6CB402270D1ABC04ED75F3F09800B844F78E!
A928BE27AA79C82BA26870751D226784EAC98AA6A33072F0DB549A239EC3E8F5AC6EAE
7A5077F9A29F574D683D5D8B16A6359D949687D406EFAC8C835F7A448AD364C2DCE1E9EBAC3902700B7AF471E667BDA04F477BB6BF374DF3005081A59BD39796746D29B534BDA4A5B5A72902C6744C6D29A9E849DDB455F091A92DF04E5CC5663B31D6C93BE36B87476FBE2CD5564773E333FEE8FEEEECEC4069A5E1D7D6E71A3C846722974E9FF9BBE3BFFC2234449B36303939D46C4EB02EF652B76E95CFDFF9FBBFE8A9F9C462E802B69B5F601D8BE12135A3BFF8BC1CBF70217772F8FCE266F6D5305459A5EFF3E1CF87BFFAEAEAB9731BDD97762727B777779F1F3F7EE6F4C4279FBF726BB5B1F8A8024F1DBAC6F0787ED723BFE0577FA2EB84091947CD866295A26F783157556DD3A617161383060C858A21CF520DCB0BA93857AD10180466C0F73D41909FAB8389B6218A06577BBC39881BAAA2D5500F8F7298915597D64F74F32A553395526EB547BC3AC7854DB1A82225F8069F7AB044455A1A5CDBDB3AF512BE316BFD4A83A5FE67103244C3F6D68F7BF5FADEB1DD1FEB393FEF421DF9920AEB7976786A13C801649C11C61BFCCE3A447D8E252039582D18A5F5D038CC100C518F3EE28E44810FFD31FC3A9CE23216DFC00DD3FA813E3D8DEBB0888FD33CA75E5F87323A38A02C3A88FE359DFEEBF74B51B3E0303346D7CF1A2FC008E6573B7B54B81A3D9D79DDEA01D!
7994E0F343C290A06B7E0B9237A3A155521FD7DD7B4011CE0068CA42F690ABC03AF6CE966C48C38965A0EB9F5151C1C39376FCE39057A1173EE9C8907CDB8E436F3CB75872C1C39FD0F00D135297495EDF9E4E6D0667CE2F4998EDE5E375BDDB873E7EF4FE811438D0D5DD8A6390B15614CB6D57B5F77BD25882A7DC3576F75665FBDB00B5EEEEDF9E1736FCE7D75EEF37756E4224034C9BCDAF10EBCD8A5EFC61AF1D1FD7D0556EA2EC8E8D1BFEFEC2CE3FC89261B34503160222F62D996EA642BC0851B2FC55431648617AA8400361D27A05FBDA0FAA122F64A11AA101F31E4E3B7E843E16C421DFA79E0A63007AAF1C13C6000E8D79E12CC0AF0D2F3EC196BCD9FF5FFEE474808D81408A435DA9B676C85D9FBF1C7C3975BFD83A57D22674D3A19EAF5B5DC8ABFE232F6C690DD6ACEC73F1E2C3D9BFAF1DA8FF5D2B3FA5E7FA95EC7CDA5522E07528339A1AAEEA19796EF5909979E6DE6FC1E3F0C4815710EB70D32F8D92C93EDF9F5D5633E2577A180C78EC0897318661A51A35153C70DF835A22312A0A4C2034F450B07D02A8FBF5FFA6B748E701F1C3C76B80637CAED01BF5974EB8A107AAB9BEC6C36B89F40D3738E63CDB90EA0B0565F75A2408B994E47CDF4E3B49ED695A862CA8F11711C1517745CB6CAAEEB64FD0ABBDF73AE872B60799CE128F557FCDC5A0E34D85!
8A98DAFEC9D9A3A3CDCCB95BB01A2E3B0634CC95FB8C02CFC76385CE9FDE4F4F1E393A
DEE58CBBE71EBEF4F2CDEF5BCE205015127E8201C1E2ADCFB7A3E65C707B673EF861310D6AF5E3D4C65B4F32F3EFFEEA7DB57FF7B5FD5ECAB06189A7C5E27D79D79DB50FC717F5FD979B223660CFED5CE0E39495547221E857381462B5FC9C5E12654FD58AE02A2849556D548D6B3F1632886B24CEB07F7ACB809670BEF63F359BCB3DEE94324F638236E6ED57574134A157AA4138B57C27AAA54B4A19530ED1BF004370BC605CA21F43F70E1D885DF1D81DBF1BBD99BBFC3CFCD23376F0ECC1E9E1A38757360EB90B9A3818159DCB03FC88287B53DD63D7436F23E8C20B88DBB747CC4A45B6C810AB18B01D87A9D51674A76FCAE63F52D086EC86B93048453CBA459A10A817756482F3D3E2808D5D04E8D700F44E17262F1A3067E8594F402F9098494360A92CD651887B9D2B5D24A6E25D7E9E409BB82898799232C4C6229C14841C77F1D09AD3EFBB1B4EAF6C8F20B6538FEA0EF361C0839771DF0320FE64CC3326CDA2E0BD483A3D77166AC4823EBB83052F885E283E48E5A1E3F050E60B380475AA6E5C217F51DB8FF805D32DD0705FD77B464179E0F6D134293439B9E7AF17F3F73EDEF762700A2D8C357BF7EFD1AE6E72E5074E1BF0C7D0B9302D9AB26BA4EDC4B862F6C57FAFEED5526EEBC7AD59548CCBF1E1E3ED705DFEC4ADF9BB7BDCF27F79E4F0E4D36591F79E6CC!
95BADF7FEAE6470A8848353CC60B550208E60BDAC6135B06084130FBA1881A89A89E0F7164AB5903D801787037B0079E725427E47B6E8E0073DD7009F4830BC5DC662E0CF0F9A1FC78110E7727051114B3BFDAB9C9A07267E72634F6B1EDED63CF3A3BBFE8FFDD91A08CECA323370F7FBCF0E3D0DE31289DFEFEBD1F4FFD6E7BEFC7BD29482888DE066CC45C1408C9E506A95B5DECF83989A038D6089C18982EC7982B88A6762CA7A7B496B3D251831EBC05005874BF8DA849EE040E206EAC9EB04FDBF438BDF4F3CF4FBFFFFEFB9F538FA797A653DFF3E7F5EBEBD7AF7F3FFDF3F7A99F33389BFEFEE769DC078030514B4E63CF606E154E196B7A56D69EADADF4ACCF8C17F28324DBD575C688E0BF433E450FD4B9429EF5017986201D868DAC7542C6EFFFF1B03F373EDEF057A0B20F0ECC023C310340013A0CA0052082F69E01C8D2D6816946BF0457691AA80B6E9A41A4993AC4F9CC9C35336EC2A2352C6B9D96ADFC0FA739C4EAF9B5810BCF373787802238CE9EDD3BD171FCF9FBDE72A815DFF8AEAB2BE9D1172A6E5F18A22A81B01E32529185F9B7A50B60A273E7B4785FD7EDABF389F9F9DBDF7D75F5F6575F9D3BFFC7F2EEF3BDC9C97ABDF59EC146D8B38FE11D7EF47B45DC74069D6D9E809568A4F84E75B960E8866DAB216822130708481614651BCBCB7AF2BE1E89!
7859D58B8C381E0E9888E786423062789AA5FAB90ACC58D175FD70BD1367C5551FBAB6
C70DF5AC86E9A60145A567DB378F7E74F3E6471FFDFEF7BFFF5F3EFAE8E8CD632C9F09121052FCE38DA8F9D567E0EB714A237F3C84231DF4B2126230C6A5C7B53A18CE154CEC69D71D77701B2CE98AEBB83D3024561EFC82F500E144F961F4EF1F17547848FAB4B634AD69DFA7E0F2645EFFF3D34C06F0997E3CFD33E50FB68374F4F1F7D3D8403607C00B10108D8EACFE78F3C7B57067E7CAEAB341C83BF85EAB2B2EB874D55F1DF4D71BE32B9D6B92CDE8DF92918603FDB94EB86DD064F009D68ED557D755868CE03A160A107958FB3967DD677068AF3F37385887951EEDA45D5A83DF35081BEC52593266EAFAEBE3B5DC60CD6FACACE4464B83B515DE97CFCE116936FFE089AE37E0CAD45672FB60B5EA58AC16AF41419F91C43DE143BF6CA8D9E9D9EF273A3A3A7A63113F5EBFF8F9B4D287D5056B64F377B1A6117846613BB9B130FCAEF9BBC3DCBBCFDF9C2F96DF5EE9EB2BF7BDBB7CF9CA70ACDAFD2E59AD3FDFAE37374BCD3AC455C72F674E9F19A8EE0D34220A8C98AD7AD9C85D9B927A87625A0FC063E016C386F12527116ABC647B804E0494E485E29B9562A5E8640195527DD387F8CE460C13571DE0C975231630066041488620958BAB15B051A973054EFEDEB1BD630387C7F686869E95C4717AB6D7DFD9BF0D0376E1D8F6B1ED1FAFFDEEC2E1EF2E6CD73B7B1C9!
81DB0FA881BA67D724C13D851A11574ADC0488A49D94108E12ECB3920C33C7D9D79FA34B394E6E9EBEBAF5FFF9C01A1FC0C56C16FE6FB9F334BA9D4745A876CC61FCEA314D105F3A00055ED03DA9DD05DCFF64EDD9CADAF3D3BB6B596634605BACB5F5971E6D6F323F9D571584F966EACAE743238C41C89144AAFC33F5B3F885AD04816798A0EEA1C14937EE0CCD1CD3B98A3D4B2E644871FAC8FAF1FACFBEB0773EEE0289C86D19575789DC052CF3AA3A42B80D2543F1CF8D2E8206135BAB6DF3FBAB6B6BFC6F47DAE54DF2F954A555AEC8633E3377002FA69FF598D99C8CCE54BEF277E392E79FB6D9833D0D0E66648CDBE073DD55B17ED62BC55B5135DEAF4D58D6E3F8717F2CB91F206AC68C42EBF3DFFB65CDC8C7D79FEEAED6A47074B64274EC30276B7E2EF63D6D0361014DF6C4DEE32F0BDDBC198755F7F7F4A5177847F969797B5E51D43B1C1333BD43DB46C201C3AF2469B9454F1D6C855F87FA158B8E265C3F162AE12F2E3A55CF3595C2244C55CCC713C27EBA8AA4BCB0633881F58B2584F11EE7B110B054BB6BA2A21C7D51EA7C797743AC3043CF0C9E4C608FE1DDC9391E2AA6758516D09E43D42F10205E33916A48C0A26F2E03A83F255CA1AD27A3E0F073DBD948677641E50BEC268C0C333A09CD743F9BC78EE10C550FE3E88B1E8E6F37E31D7595A659A2C2!
F814CE87A78EC3DF0D45721723A71ECAF768EE683A0F47850CBBA766C10D8814DCAAF7
49EFAB1FF59E918DBBC8E0DAEAFBB2B2BAB6B781AD4B9C435E9C0C14F339923615512DD7F5C181F61AA63705C5262E3E339389DE34C85487E8DC1AFFEADAD4378EC147FB3875BFDFDFB6BFBFBFD6B535BFD535B5B5BF89B1DB879F4E651DC7FF8F2E5CBC3DDA9D268AEEA023D0D1C6B33801390D4071EFAE597EDC9E7424584D1E466C80B572E0259FBADEEBE62B8F5BCF4F0950210F596AA6E8CD5D217CB06347497AE27FED8D78A37DEBD38FB69AC0338E9986C4D4C4CBC8BB572BD9612AE148B9570B1B9DBEAD83D73FCCCEE2FA74F7FD267D53405DAD8D09777740320521802DA9113CAEC65B86B460A08DAD1B49498B71DC38B188A925CDE5196776C105224E2661DE8405D336DF8A4B6691B9E9BC56D0E59087A0926A6886583B2CAC3AAE572E1A2F84A829B7CBEC86A1B778405AA06A90598B061EF6D5D4B2B38F34030AE6719D0A50644801DD5658375D2A6531ACED5900781C05A682A4B96FE8DE75D3FC7AC08131F8C19E53A8BF91168F622B43B6014354C3C230A298D4B866A15D4917597916D20D8E27ACF31EC3C37674955CFFE5AE75AFFD6213BC298AD5A5FCF37C021EB8DF575A6D75D786183BC75DD5FDB1AB8398B55AE3FEB078D7144D0D12337999538323B4057015799A7F8F8E38F7811371F999D650A77655D4AACD724E2756AF6C8D1DFB337E5E8CDD953!
FD529CF472EBD4ECECCD596C478EDC64D27F766A7F6CA63136C65F77AC36E68FF9B5DC682E571B2FCFCC0044D8CA94441DF5C9E793BF3CBF3634392964147A14E3972DB6E2BD656FB3526A8632E7F56462A3558DCC941B337D7FEE2EEB7FBF387D4BD7AF9EBF7874D67AF3369DE8BBD46A4DEC77BC6F4D745CAE96E2BDE7BB6C785CC55088DF4ACCBCC7F1DDDD33FFF087B7F105455F86D9525435EE014ECBBAF2E4FE7DEDFEFDFB8BC410374D7B222B96D2442A69CB0BCBC672524FDACAFDFBCBF0CF14AC09C4926EDA4AC48223AAC65CBA146EC5079442F1ED4A2EE4D0DB17328228910D6E07560FAB663EE6CB9A7806A34C26D8CE8103E23A5696AE8B85D7352C271F73C08205D013650EDEC4633D6AAAC552DE349C116FDD72188E02BB43EE3AD106480A62148080F488A697BE7F4C8B85A7C14B87CA36A1A2C58A599ECBF8A6031DB6EE3243D7B30A6DFCACCE1A4616A8D6FB59EDFC6C70B41334330E01B3B6D5BF86655D61D297651BB5C1B5A9C3FEFE43ACFC9153C718B55AE90486668F3DDBDB825F7908AF0076F9D43630B00724EE81608E0CBC64E20B502092668F02521F09C43EFAF8F7920BC3AD2F819781D9535BA75853C4DAFDFDFEADA9FEFEA95AED1F074761D746A75ECE5E9B7DF9727F7474947FB55A2DD7DA83E17A591FF51B4E63AC3AD6E0B797FF22F543!
939BD044DB17C044D7BDDE4B1DC73B5AD53E70C9A6A765166CFBF69BEE2AF3AEDDDD17
7BCB8BB76E656E6452AF36D29EF5F4F6D58C55C5AD13AD8ED6A58989CBBDF1DE8B5DF71E163CA0A808E358DF05DBED76E0F4F4953F67941D7DF93E8063ECE092BEFC64598369038E889EFBF84DED68A9142E68A9275A6A31757F41D71505A8C3492462DB11C7B66D708415C166E13AA0A06643D92CA8C7C986DC0810CA6093E7E1394223264FB08C665A839BAC33BB01BD5D2C1699CF652C0522CC733D4F331CFA8C066F661E29E2392A857C2817CE75B2E878C4B0DC62D1CDF92350C0238576FA1E94769077C12A0028B0045E9278A33B9E67C46865B37E8C5A87697329CD5881FF3432D233D8D9C3560A1065896D6061E632069F7D684EDDEA244406074BFD6B3EEB367A6AE24D5BFE541D8237573FAC539FAC6CEE7732F33BEE8E97288F3B4BA5B5C1D2DEDADE5669B0BE161F2CD561794647E5A5D6FA4F4184F76FCD1E21C9002E2F797D0B9703D6C21971F612060CDBFEFEFEDAE8FE543F9E3CBA363A3A3636569B7AB9BB35057BB65F1BF5C76AFE58A351C3ADFB53532FB7A6F67B4112CCE01F8763DFDC6620E879E7A3C548F5127475BD3B120A853647529987BAFEEAEA434389DA8CE558CAE2F52EA8C645DD9D36CD57F36F9C486FA9B70A5D74A9E31701D1BBDB9F76A9AC078D6F0E6DD6CF4C7C726677777772E2CCC9BE8C42ECC09EE9A09FD4FD9400E63EA74768C4D!
1B2BE93D429A655430B4C8941FC0041F8D39349204A2596A0A51C5B019CF067F0AA6E46882D5C0AAEEA643240513168E2FC6278ADE886729BF5BD0BA5709149B9A2308DAE89ADA23B05E4689A910F375D4832C0C7C2CB105F7B7B9D50D8230E16CB878BE45879382CF906832F0CB758E41B536412240936DA353E7EDC85D3EFE7C6053DF9F5F5E8DCF8CAC8DC38344A0F4B35982EE1EB8E7030423F60B6DAC9EE9CD59E3C1E39C7D2AFB515779C9A771CFED51C5EDE71FE8C7F67434EF7E045460E600BD7F34C818CFBE310FBEB6E238F733F4FD7A9C71F6758621092FD14ED1659666B56CE66C56C6DE136D62D499DDA29B6501F0DE074AA7FEA257EF6A70898FDF6D626219ED4C4B2D5B88D8DF23E08F28E4F7EF9BB33679ED3336B6E53135D980C9F58542EBFA735EBB6BD5078D34BDD48A99E92F8FAC6A231F2ADF7EDB79E27BF77BF55535AAE77E9D3AE901E2BB5DEF75E8CE3AFB73B56F9E1DCEDB3991DEF5B3CB939B4090E3A73A6E338A7835EAE29304AA01D2D757F91F80168404CB84E1A8275032D11000C29CA8926772DE04733925A9200813002AE70498F349F873D0A72886F5D913081021D655A86625AE5AC5BC995860E074A9DE1CDCDCE527DE859389C2BF684701800C43B821F6E29F98DE2069D45AD211A4C5D4B2DE05156C48D155D1EF4399F5ECC38567DC!
65DC571CF0E1A5CC572F9EBEB4E41222851C9659AE9749AA14450137D3733CA020E069
707078F71B98E418F74AEADADAEBB8492CB17A22B962FE4E7E0ECC1BD9F831BB532D83338CE92337865ACF8281C582333D125CA78270A672BFA7DF4F1E383B942F4600E785ADB3A8492D93AF523CB169F1115D252D639B846776F4D665071E40241030BB9B6F68F8363D284FF8F50D16B2BFF8807CCCA269C44CC1022C0CBE8CBD9975340CA146F017C1A6335E2A61F2C35B55FE3E5A9A92DD053C7C427A78FEF3EBFB03D3934F45C5CB3CD21E3C6F0C5F71DBB93A598723754EC0C698BFAB7A1BB891B2798BAEA0915BF0D85E4F7EEE289855AF5BB4F5F7FAB579BF57A33D6B7F1EE4A5F24D65BFEEA4D62510700C3CD49F8671227DA9DECA8372736B0FCD4CDA9FBCB46B0C1E5D76DA63BB2304086B2AC01555AEA4106187B90A2814B4237618593008F0D1FCE20CD002D768858D01674410EC84BA59F67AB5E0C56225EAA3F1F389C2CE5E0BE318E09B84C6752D3296EBA7887DAF423ED89DE965D4F84F558C69459CCC0F02900AD691A11BF54DAAC6FD573836BF541F18419B7BE3970886B79316573EBFE0A70D44385BD8A43BF33B7C27BF2FE60A9E4E73A6BEE7A4F8DBE117BDD59A18AD51CEC3F766AEB18644E092AD79D999B231A1D8820B00C80657D3937170536E6D6813EFA5B4B058007D05CCA5C5F1A594F3FFDFEF1E3EFBF7F3C7E0ACCF1BB6383837F22649E0149!
EB14DC2E7C78E08A9E570F19104EFC9F06E97F1143EDBFB551CAEB95C1B1F106434D6BB88D927E1640C27B840E2209BD1C1818207EA65A44D3689B8F06819B29A0A936465B363A48688D42685FA2DD829EA6206A1244386C37F5B7972EB5DE977ACB9A0D4FCDFBD7D4E2BFFE376D3E538650FE4F45FC1629298AE1BB77320BB5DAF0D5DBFA467C77B25EAA64CBEF621BE7FB7E18BE3A7C35A38187F0B2A5E62447607574343B5A1D1D7D096547318471C834D0458698B607B06C0F16B17575013EF7090C92534AE3232580B4B38CAB8B8B0F52193180DA7D9D5E1E30A6F35E5DEA8C98B90DC7C3B95C053EBE2977061157211B3E5C30F3480044303FD11E69402BEE4E2D12592C6432F5E45212100214EB4340D1C0CBFD129C11E0643437E6FA35A7414EF259AE351E1B5FC95106AD003125E6CDA083FCD55C8993334A6BF5BD7ABDDEBF778C333E9E810E7EDC9206AF1FE126AD1D9B2D8DD6043CFEBA65A6CD999539DAC639337D003AFAEBF7E9BF7E1F4D7FFF57D018984D7FFCF3CF3FCF4D7DFC1F7EFFF1EF06D7C7FFC79F8E7CFCFB8F8FC0027DF4F1D19B34465B832B4CC73E9E63DD59FF37209E6F668F9D128F0D7A9AD815778CB8AAAD897D65FEF6E000AEFED878BF0C0181413B724AFC3642666A96FEFEFE284968B4F60148A3104363BC97AA496E14C44D9D7E7FA983!
4E9990108BBC68D3FCEE4B70CEFC725937EEEADE88A6759DB8753DD165440D2F743772
F7DBA08C35A4EA96E2CC9CFBEA4A77772F40D20AC7BBBFDCD8B83A5CBEFDAAEFF6093DDC1CDA6EB69ACDFA6EC72588EE490E529F78071ED9018E8C65814DD789AE5B89AE13895B5D8B89BF641E103FCB5C7A70931722351981CD7942203C21169E00613A6D1C01418BC8EB424606234E404A528C544A4B6A0BA9D4023CBD1481A3A51E4DA7A6356010504D3D3154E6EE9E3C4AA5F03B3D2DCF98D6442159651F4476B83759AF9772955CC3CD8D0A05ED9756DC863BBE220882596BAC8B1C01C2D8E795CBB18AC70F97FCD5C11CB71EBF3307DDCB72E575520256BB7F903DED7FDAC75AED6F6D1DDB1FCC8D96D6C62875FECC1CC29CB53E36DA5F5BE56AAF71A802233D0756F4F1D2E3F52DC6D9D9920BF07C338B0B00C837DF1CC5757A58F4E1218D67E9649DC2C9373C39F5CDA96F82ABA27AA089A09CD756C4B9DFA2BFB746779E12692BD047B24159D7F74785690223360A8F9EF64B0477FF6E2097208478BDB43F5507C8DEB74844000E1044E78CE1C670B1FB1274721CAEBCC1D21F4DCB5C4F6432F79470B015C3AC2862BD6151BD7567FE6A5F335E89B79A7BBDE5779F7F75F5CDBB17F3E787AF9EC80E0D4D36E37180A8034CF4BEA363BFD97AFFC30B654728E741E244177F325D29DA2D486B914042323A5364AA6085D21B56863F8F9EE8FA93C0E29C6005F689CCE2E27!
55E7B0058F035A9CE715D5E7531B5C067E39569C4A6A7811DFE62A39D4C05E4231594C6F4D34C86416546A6BD9EE26A6E1FA45ADF7B1967521E86D11FAF81FAE1948C37009B5A0E42773C571B6F908E6AB5C11CC3D73E736BFE6AA9BE06BD54DACCD153CAE54AB081EC915E1F2F612967B7E0A9EFB787BA606B8CADAC8C8DAF5B737333E3BC340E5268AC37A0B1C6E75845BD0E04CD51107D7930789335A90374EDFBFBBF39C2E6A5A30178009B23474535AFFD69ABFF1BE8A123841051F50D2EC3893F4288EC5317F50F4A9E04607AD90F3F9E81A30FC0A18A2272E9DA0F1C055E3F3E3A40908CEEEF6EC19707AC4AA32FF7EAA3B9DA684B48B956ABD672B5AA5FE3B5C6A54A6F6F139ED9E6E485368880A7F00FBDADC9163C7C3D7F5785485153096D2799508736391F853F00519C78D2BFBE77BB2BBBB9198FB75AB1E1CF4F5E39775E7971F6D3F987F35D21725BA9D46C36773BE0DDEF764C407B6F3C54EE2F827C16353A66C4CE7D60E53E16931EBE386ABA78F6423230738B421C8BD74FDCC2CF89EB8BC00FFC42FC2CF27791A70010A0D4D5D505682E3E209B3D5A5CBCBFB3FC68F1C1FD27DAFD4562E46980A1A799A74091C0683A83DB253E3EE2ACC0FE6CC173DBDBAB3F5B835FEC8F414CF9A3A51C5C6B7F14C433068305CF96C4416F7A14E85819C4C2AFE4722BA57!
E58ADEDFEF0D65E8965CA4CE4AFB132A404E7ABB3EE4BA478B03EC8FAFC1EB6516011B
7D8C7D3BFB6B2DEA09B03FB5203A86AA3CC64AD49A707EF8B8AB959C7FD8747065EF6EF4B9F227002AB7344F0F30D63853056B37F5A835CFED31445D7D6A923125D84F325C387689EA8C8A0C9E0BEC31DDF920022C0B856630409A87949A534756A0BFF836122089FDED19618B1A9BDA997877BE01A20061E27E38C4C7BF86EC3E78EC1356640662C0B62E574B3092B7661FB372AFA62B3D27DB115BF147BAB85BE35AEFFFBCEB7A9C4B2913C6F3721993E6CA0183CEFE1D7F3E78673B8BA19DB78F1C72B27C144891B9F9E9D4F9CCD44706B094C54EF983C0D61DDD1BAD4BA78E9ADA5603517401F841140232C8353AEBAC822DCD395213A52E09404E8E63AA592AC3B98070C743D7102E7C0D122C19459D45320B34C17A50DB171FFFEA347F7979FC0F97BF0E8FE936598C0B4C662BE5414AE8DB6A4E9CCADE71DB510EADCDB3EBCB0B7DDBFF792551FF597FDA3B941EA6776E7B9331147EA2018DAE79E2ABB4EA3E136627E6DA5E10FF22B023819A3965B2BED879FEDED5110797370ADDD11095A97D84048EF8D511C7F0D8EF6A9B5D2DADEECA9B5F1F1B57E606890E9857E5213BB4E39E785290C2C2A288199B453A7EA709CC6D9CED1803D1CEF072EFE8455FE134D0F5B63C7FBB7BEE9EFFF3FD9400DA32483ABDA15BC83A27E70FA276934C3E5D1FDFEFD41416AB00DCABF!
0EE2D65BFB023E58B6FEB5A9FD41B85E80CC98E4C8188EB64CE6C7B06D8807FAE748FBAAF567A908C189F265F73F9CFEA563F38BED0B1724F94A140D6D6F862B177BE3B16A7558FBA258CCFFB77F56B584AD0EBF78DB04BEC47F1B9ADC7BFEFCF9EEB5FD2E80E85D7D6833660DBF3877E5CAC9FF387FF6D3B39F76BD86F5DBA9142B9DF152BC39C9B1A0A73F99A876F75EEE5A523422E281765F6C58EAC103FCE22FB59CA240EAFA608C009987E010983B70CDF513FFD396B925085ABCFE9A14F3681A7A48557546B8354A204A714247DB613C9C6937C8D5FC381DE99E95D2DEECCD8153877BDB37610E6EEE95F6F6364B72F0ADD4D825BCE237D61DA7E1BA31D79DA1F7556EB8808DA40C4943FBADFDFE3D5C6E588E3BE7C23FE75895BC3357D00F1CD79A9370A335A7CE39BCE8E65D778E9580CEF8E8B197DB7BA5354AABFD2DF1D1FA07C7576A5831A6A9FA99AFEADFC2AA8B82E95FABC365EF7F76EAF0479047FFDAC0A997AC6D0E3CBC7E3E0E826950A69C014B9C33245B7F90C990713170DC6181C704546B2B63126E5A191D9449424C9B703C1167340CE6A4D16D74104EC016EDE8FACC7A637C06479BB9F12510C2DC18B45AA3E15773EC64ACF9B1060EAFB988659BA6629A5FA69369F3CF7D974E77C437872E9086445D0B9086C2B14BCD8E78AE57C984BF880FFDDFBF!
1A7A97575494B74D7871A02A36374A4BD94033F14F5F9DBC5CEF2D0FBF48BEF8FCCAC9
93E75EBD3E7BF6ECC2FCAF8E960A89CDAB544AF58E8EDD339F7CF2D9E572DFBCA62CFFB4F84070446E218188CAE98241028032DC483B0F32F0F2BB322712276E25009C13346634448B8BD4305DD709A0C5B6B64941162D68BA1D89648BF1CDCD66335C8497860B439343CD7A3F73D020995C69BFBED75F2FB1ABAABE16A72FB542EBB44F0355C27A820D1A6EAD942BC57157C8B19C586EB389A7E2A16EA34C48391B4A3ACDBCECC19C63BA16CBDEDDBC9FC7794FCE1DF15CA6FFF30712BC36CD031CA9CCB7D003AB4974806BB5B725501938C559092FA936A0B9FB07E1B21D3D7A73EB4FE24105AD85CF6A92391D9406211836E10EA046C470FF14488BCE7A0D1020B9D406818C1A4D2CB9128B7F60E24DCECCCD58EBCE3ADF027680B8042B833E84FE4A2E685E0194383F06528C01AB5A3B1436539D9A6A4100F9557C724BB51C8781515F4A372BAE1F1B8FF13B37FC1833468EB571A9156FABE9212904914B20965E7EF14BAFF9F5AF8F7642FABC914C7821B56F83E1C8E7DB93E0A1434E78E8D8CDCD7FFDD5C9EEF2DBE1E13F0E7FFEEE3F7EFEC7AFE65F9D9F3FFBC64CE84E8645F5955CB8D8AAC3C93FFDC9277FF8ECE4ABA71A98A88BFC42CA01F7C03BEB3A0121035D031C41D2A4161F88E9229AC84929068D08994C80A10C2E40D968E28369BA6930B21CF1C3B97069338!
EBF5211FE7D28E657FC4AAE148EB30A7F9CFBCEC7EE2EAD4DD5F1B7B7B5B7961B77395A8A6532738E83E3CF775C4A65ECE38AEF86AAC558BD5471DD2C58A9EC580C8DEB0C429A4096C3ECBEBEC41689B47E60C1438F1A3356DA3C603B45C1B45868E4FAAB9040E2F3BB0001603637238DC97307D4486BFDC7A6A45A12EF6D643DE8393D26860A44317210FD320A45148D5AAC011A1C5D9BA20A9A7DC912EF35800AD8C0AB313440937240FAB30A16A73670ADE76CE0379D36CDA875904E1F303B333232C7DE0499CB668D14A438A420920B143D2AF1AF159A5D3A9BEE0C98185AC782DD32FFCC627D2BE264011756C73A969236ED03DBC2AD41B05E57F4E1DEC9E71F301458B3494EF5D8F47E6875D4DF57B57BFFF47FFD9AD2324AD7BC7ED71BFEB2122EB6B758ACBBBBFB72F79B7BF3AFBE7A313C7C6EF8CA952B9F9FFBEADCB9F94FAFBEB9FD02AE78F296E78518B4093727CF74C8F7827CF287E1D73F290F32F4ADA8981F6849D2905052A6EB2F1971D6F8D345350480256E2512013981AC08AD070F3399874F1734DBF3F9F5457E8C3D3E7148E2C3BDB89FAB846888FC982B0985ACE7441C29FDE13154C736C82331EF420F199664BDB0E8C65C9E8F586723340E59581F15CF0AE1F187F57008AFE0013F606E131CA42B56AC7EE89B82DEB45EC08AE095F0120E16CC591DF!
7F02A23A61F64F3FD1E1F8E196B1EE7E6AC198EE518079E1C77A57F656E84953CB8E68
EC3B12B1C10317373D1034E76686F732CC597628DDAE0B159BAEF532BE37358F5B92FBF8C324737EEF7976A2EE1697229012616DA33A69406B6A1FDCCB453AA3BBA9EE63B0C6A08EC8265447596815016EDB1D2834545A3B9155871BC286DB1355780081453061DC4D8034B66BD2CF765B019D81778591CC46946E1D25AEA87E717AE4945ECD005C1D2A42440C2A6DB5D2EBF7DFDE99DD4F594954ABC49DCC8E8A9C443F681C5F1530C4D3F1CDEF87CF88F897B8957DF1143F4CBBEFAEABF7F75FBF6D9AB6FBEFA2E9959D26E79C56278B3182E0DED4EF09BAA3F0188FEB7372925057FE901344FAA8BF649807302082119D1DD5A0CE887DE7710A05E66E6958569912C8389004B3C5EDF7D7E58CA550817E088E627E604E8898522D2AFE0A82E3F379884AA65DD0362E4C061053C131CA6A1AB5EDEF5F2345DAE035BE4F738606EC3749835310D434B26D37A524B7297E96CA95194B4B690CA18A61135F3AB7E34E2395EC11871B1A0EE489E79B0190F80E44A58858023B0785F16002136C7EEC372B9E3B5FAB1C1F59191FCF80AAB554D02A2676A7676CF1FB1A2D12F018203E97B768386F8C167A76E7EFCFBDF7F3450EFB1A0BD0CD38AB4973A0FE493D9C0472A3B114D9D6BCA0FA8E1778958D2A3B8CD345842C0F7AC8E30F71C72F32B12283AF5ACFF18B47B094716CD98B8!
9CF8B74E23FDA5825DB5312775D77F16BED1D32C9AE08EC34D0222EC1385C51454463F952BCD21E286566AFB792075B687D44C267196CDD0374E6846481F7E387FA3EBC5C3B3092B149EDC84350B7F7B22031376EE7CE2EC9D85E1E1E1CF373EE7770E7F75FEF6BDB39F26DE9CFF092A3775422D86605A4044ADF713C0D0277FF864E2B3CB571538EE8B0C112ED370D133833262AC87AAF8FE82B60CC03017A6A752CBC4916DDB5CC148D6F6188E6E4EC6F80D2133B65D2E97DDEEAC5BCE498D7C3507B79AB5E8A6A5460036A04AB554CFCD3A1EF64234CAAA0E82672634C2BC3F401355795C9A1EA799B1EC8CC9DE82211935EE23D30EE2E1BA9E0492F0072C6763D93E66670B86CADE2E5DAC69D15DAD6F43AC630546E6581052B0F26C3285A79627DBCCCDC16B1B87B698835201DB8DB387767D8485882CD576CDC29C5A889AE69C946C835A0253760063062A6A8C5B055D8BB2B6921D869AC9A911D4F00700C901FE1B40435B9BD6C47B02C39A409481275952B6A0F32FAAE233332666A9EA88C91AA6B942211D85BF1A3DB0A2107233B0852019266DF78E0E0C0C1CEE9546C7628D19FA6438A6F0AF80222E03F64C506A8D6304AF19B10AB69DEC83A7CE814224A1E3ED1AD9CDB071E7D3AB5FCD5FBD9D98BFB37337A5F53DBC7727F1DDC6C304D3B13F34E34321555F5848!
24CE77DDF97A3E39FCF995CFDFDCEEBAFDEAD5EDDB895F61DFDE9C4F2D27B4EBB7AE87
BC10BB654BBDF1898B9788A2CF2E5EBEA2DC077A52CBBA81B5B28DFBF7F5A0C491990F160FB5F3AEF7E9673114BDA327159B5BD6CEC62AB158AC52DFDD6BB5E26331270BA440B0C4C838000AACB40D536D381E1B660DC3B3596596F53C2BAAF0F0D10D0764A38E1846B45D1E20AD6E3248886D26CC8848CC3A95028283C8E482840D168025C588180A894963AE5FFA2D0D3DCA5E5C9655AA8EA303998E3762B380364F731AA2F8EC61B1ADA86C700E4EA051A2D11136E2B3508D7F732157B5582C8F15C672DA3AEB5A67C035308064A7E87454C53169B2E680EF40074AF3B9CED5BC5A907A462CA71DB5DD78BD99F3988736892783D99E026C6DC1EA91B15A3820F81959EB42B5EFB0A8BF6765DD9457D0D3EC14011E4DC7E42FE8C5B294002B903F8A01551461A915B9478AF641D1728429A66DEB5A9221656068B3295389AE5D1B6A6E868B6AE2EC3C88E85350911E5D5CE8EB3A9B78F32EDED7A5512B878BE1D088FEF47CE2EAF0ED7B9F9E1DBEF2F6FCEDDB70EA1367EF7D9A2160CF2F3C4C3CBAF56BE2578DE62FBC59A9B626E2172F7EF2D9679F5DBE7C59D15362CC1E504D4B06FDBE64281E521DD15B239A169286AE4458E40159170AE7B2AA1BDFACB8D962C5CFC673A5663C570107456C7C0A2BA99B7D2A750BC915679254257C58975D2946F476490976B096D25961C!
2749CCE966D564EAAD31AF31DD3016AA0DF17A8D9811EEE233DB9904A4A7236A94BFC8099144D2990DA1556A9908BB860D023AE839DCFD41BF1C1A31F8F29584CEAA7A3582C1EF86C4B1E71E7B01040DA2A2CED5A29E444D967C1EE20CB31F07877D555A9D9A7C53C913CBD1E974D445C3D5A79C27C7A2935CD5237A052631F46412D700C247E75AA1F23205E1E8538CD872CD901605E1A36CDC0939652C2CBBC5BB40D03682CBAC255D392AA3DC007BB17C0163184E7E210C575F818AA0DC867FDACA9877C853B2BD51D038A5807B27B1CDBF3E7930051C87B7DEF1E3CF54FEFCDDF79F4AFAA612732B6DD1D2F9E4FB08199FB5ED7C03BE7CF276E7C7DF54AF7AB7B894CF26157D7AB575DC93EACECF9370F53DA2D88E2134616988BC5AAAD56ABDA3DF187893F00470ACB1497B11A99FB5A0AB8E19A49D851815ECEE29FD1518F41BA87E29BF1782EC4E4BE88229A392B12CBB16A48576C0B07435A81BE534869B060CD6204FB30199421114C9AC2CF1A928E235208B80A2BCF441C094ED4313E4A4ABCBC699290F6B85DC39614124CCA0B7BD86D06AF28AC0FC16B4A6E2E09F02FA40452A9871AA0AC4A710119CB36C4CE59583052FEC82A1D34561ECDC166C0AEE556739D502230753D7ECF9C19951E4300415A13A26468595642805834A971407E0502040FD080039E7F205!
431D524515D6F23083036D8E916804437FC704FA8B81A0643B39C5CC043FBD93EB8A28
4961C64C423CB78151E3672C23CB82907130E278526CDD09768DEB50531F99110A4AA098AAE54E0E44F4EEE9E39F30B98E8F0F9D0E450E85BE3C4A789A5D737BEBEA3E3A32DA61246442FC7E2E68DD7DE50E856E6ABF3E7C136AF5ECDDFB8F7E9D5DBE7AF26AE26406AE75F75BD3EFFAEBBFBCAAB859F741D9E55E6442A02260AC5AABDAD5625465DF4D91F3E5392CC763C483D60125589E01DECB03CC4C61B02D1C43C2C7B28EB6443A11884730C6EA00F14A95987AD44A0273504689849DDCA462C1BBAD9B158838D8344D3930C16098B0098D30F6995C810411A9604C48729AC24A2992419B19640DB89D2820150A6360DD521056DB0A0FC970ABB41B1E3E9DC2BF4D2D8AF2EE852F476884109B2BF0A38898A01EF51A4A768DC020C5CC8F7C7657251500909BD5230A9796145802A0B0B47DA92F4716061A3542E85000A021316694BCF0200E6E5F9A8804058B54BF8E3A99C6BAC0A64E419D3C240F81F06294EE31374AB30E239525168797947A5B28B0A4FE905D15A9A3EA20630D5C526EA2CE192DD268C179414B341D634C4ACEBFA028E237C661E374637B4EFD064C7F15D60E8F9E1EE5013CBEE194FE7CF1F8E25CE5E2F868D1B3712B75277F5BE72C57B3D6F87F4C4F0E7C3E7CF3FECCA80883EFD74FEECBFBD7BF7E636DE6BE6356CC1F0958DCFBB9E66B4243C2FA6!
24429550C8074E7BABB1DE5ED1458AB6F8008A879587CBCB3A2C4E4485E989853C408870B175A94D0460C03CF4CEEC88A5E8B614A245F875D6937BCFB7EBF54928B97A299E8337E664FD622C42836604D28FB65AD71E667EE2CE7928B440248881B269C274F9231F3D811DE3110FE717CEB033A263514C62BA5D5B0B7C2583E2B5A414C7690B3C0689CB8740E643AA26458A753D2782FFF1A120331DF083C9D6102C9B35C2C835DC35435CAB76055B54E23B0784BA017B05374A5A800373A41109B280015F906CD8BF06E321674BD37FBB5D238768E90041BA200BAB9F9AD64D8E87B080324A6CE93610EB58E454839C0A99847B55F905DCFC10F849D1A37064545276DB2B15C762696989C23D99229D938B1934B3A4F7DAF04C23AB1437879A1D1DA73B38C661136604FFE0AE9E499C9F2CBE4E9C0815FFF561267163C1D3DFF67517F5F9D7DE7F4D9C3CF9E78D8DC84C396B2612DFBD3939F14947F77745991F840FD475EF55D7ABD70B0BCC7EE14749AAB16225DCDB1BAB562ABDA7CFFCC384A2DFD7F4E524E8C756011F308E9B851315B135D356140B6E73364BD800F97C975216029F5B8DB80CFCE010126366A61732A905F8E03AEB89E8C005F88199E3A20B176B86DF640083BB8B85FF945E72B394366A228D7183E77A8689C52F18DEAA67448318384142492D87630019!
DEF23095799849099AF092643EBE6CE003C01483B5028DC1A6528BC7BF155DC2D53414
913E62899666432B7BE197521CBE81C5912743D6E874A94C7A51D437E0452DDD2E78596AD7A80446ABED1698C1B958BEC7C1033F18B800C646A08035F1F95955853F36C0B531A6173D70135FF671D0A0452445036B6ED8104386D41DDBB633628BC0568825D14E42C2C94014AA16DF98616F4E3659B2110F0F6D16E1D26432D8A399C48BFAA6A5DDDAF1BE7CD7D7F5EBAD1DDD0615E99F5E0F1B89964CA11918B8194F0EB74659F5DAFD8665EF5ED1D0125FDF4B74DDEE8239637C30934924BC1EA0A752AD822D7EE8FDEC9309580AAF12AE30DC94651DBC144AD3A306361C582F37E2D84A605014B117D9AC83C7796C182718922C13826FB02436C6A4C863C1AC94F28BE4A176C2931D7672D85CE4941C3760338F68B175C14ED031A97BC5CEE26A311FDADC2C86A01852A9349082F7FD30C51F46391F123229D1D901CD2BE2EA6A0B0A085DB1C14AF4DC3CCF4D4A1113B4E78807EF9E2B94F757C3B96269AD54E2C8B103AE3B65B6F6FDD3A7A9BFA69700ADA5BF02618511F06DC1831F2E8E9F00465410169526897DD82092C712DD126D24D0C9401DF18AA016F750E299241F7A5A8536C4709FD4496901B389B0A6AA82C964BF022787042EA9B09920D594F80AE5813C43A16BCFC322693A5E84B42464CFFD419928C289457F86E7651D3BD40B28B5CA59E595A1DFC85CCD34B!
743FA0DC5EB3BF9EEE989444AB737DE6A5D9A17364E0C0D0C5CDBDE9DDC0BE74FCC271EBAAEE7BCFDAEBB98754280E0C2AB8517A9875D3067274E300F3FBF08C7BC37DE5B817BEE56CA5F5DF98CCD8BB452FAFD65769E81BF235624E25618328C57C1A31A5925F5130300FC007A28C2D60E1A3A8365F9AA03A04129B56EEEC6DD889D16FB42573E167201375BE1C384734061B62E56DB54E4A362C9E1638C78D01558B8B6771255E1EFAAA6F614BB9115234F01A0A70412E010E10F90338C03504BE3E8C4EBC36F61FA1ABB95415B1E993607257821279BE5248D62CECFB3D1DBF1D8F596CB757A0E4D8A295E1B633C96950F3121F2EC59C9073B45A1513C8BEF8522859E792071ACA821811D8795DF06E8A20D06182653C6548637EBCFC279B5AD838C68C82D3E1BDA1CBA70380421ED108B60B269780C7AC06999A5206812351CE6ABA3DA07AA0B2E40493D0E884F0CB9F19BEA0BF847D39EEA5917AE8B9D0E7C0E207709F21B2222498E33CD4CD74F7D2C4E3C33F5CB6E4747ABD77E984ABC1ABA10D2E6874F9E7CF70EF6AC6BC18E688FBC70B8E82DDA77C510A432A97BFFF44FF798D4BAFD2616A3AE81EEA9F6F5651612A9143044CA5F54A0897AABBD151F06AFFAC3FFFBE6A212010D2A3BF60E558702D503B28CB8D03AD9CA6655CFBC16719CA48B0E5222C020868126D!
09767478AB9906DC64A71DFADEC4DE6B26EBC957327372B0ED88B5C46055EC91521CC8
138BA6366DBC7620F88A369AA1BCA42EB86F25E282FDD42B233A5CE082EEF88FE94DCAF5B40B41F724DCBA1336B04C6017CAE46008C985FF4C3CD5CC4B4E1FAB98E937BBE773854DA2C95264BA5663D5ECCAAE246C170155487CDB4F4FED242150706FB25554395B622891E462D95B27E5A139F891298DEBAE8611EE4E976C78B198DAA2E19D30A5A290536128F48058EDC6329F384ADCB6434299E4A7D5050008119D82CD15AE02A959F0966B3A00B27699C8B446E9B965C8EA9AA59C6846CDD8D88536FCAB42BB8C1100926BD7D580E5093ED583C9A98B9C4C32CC7D2B57397273E39DD71FA4CC7E9C98EC98E78C84A25BAFCE262E2CDBB2B337D2F6EDDF9FA9FBAB2458FB5D5A16F53FFCC94FAAD5B8944E2E14644B4C3425FB51266D1C76EAB0FD29B4E37F504B4C2A2150B55AAB14AB558099569D6628A07C3B343977B9991456D018ADFC935EB4D37577F7E58774D9089B086C98016D65FC56215E3592392F500A958F870AFE4671DBFC93C59AC34B9572A7AA2A10048BFD92C864AC55065331E02BB152B4528F1700C4F0BC19A72348DC5D86D541A5A3944619AE4B3A49B79BFC7CFE58A231C9CE2C7C3ECD28EABC0122B1B0FEB3899BC76F4E8CD6B753FEBBA4426F38F1E241B63282E5B1E99ADA26658C0AB3DD6A5E7950A866217662B08C104EBCF031BB23B9D62B026!
95A2C60049915D24AE13F8EC81F1894ADB648AFE562AB88B6421CEE4F4F4924424D252D59B963B087691D701F6E8A2E1F38E5874F90AB0950586E855A787D21DD73D705DC1D23F9839D51B69F76B2AED1047DBB5D04D2D659A4B1A3E32D31F290006C081C0B33991065AC994CE5E5B79F759EFA54BACA6EFE8A877D4E3A142F2F5BCA1CEBFEA3B7965A3EBC68D5F6FDCE852E51BDF40458F1277E6F193B8936004B202C51C8E7740964FD681A1EE72CCD313DAC24F549F382A166D37DB1DE3560C95A1ADE37169EDD192CB5A6A9925FA7656AC10B8E8DA909FF5EBCF9F5738A641B1B2B61AF361C9D862167163B8096FD60EC5F72AAE1361F4943E980A86A57E52550702DD96948E082AB6810431C22034241143514EBA470EC0AEC6FF8572B18C0306D2286375F6D917742BEB00B62C0300E9C47C500C7372A118DF85CBC67CC919E949ABB49DC3551C0EE9A4C96839E892A9EE929B770CB649CA4F3A1DC46CC4F2D166A6D2623E96043F26A9496D478AE8931782CB74CEC54B3784950C2E7AF46F8E1A1334055DB4B221DD738C0E4978000FF63C9952ABAE167B82F64C430206F21F824272B18B7AB4FD5A5AE04A027942835410F48F19BF1599F9544F2E818A6C8B078B65264DD1D9D0605880B41452C03D7560E8AF5CBE340126EAD8DDFD057068B905E375A234747EB8EF64!
DFAB7B5FFF7AE34E9751F942BE3AF08B2FEEA6925C3FC3F8C91C7E180B77869B93DB87
BFEC6E4FEEEE76BC6FB5BAED4857467497BEB00073962D67BBBBB1282CC9AE84AB5585E2061A37128BE8CB8A57ACC045576D27FE1C0FC19A552ACDA1A1128C6391438AD8C71101FFC26FD3D8D421110A4E173493C9A5649ABA3AD956D514CC3468111805CB0E7604AFC3FF06FB443C978E38E74660059C9EA2EF167BBC02875DAAE3ABA567AC88EE7143AEBF1262829F7DF51536A8FA6E2C2816E0F5D83A19DEE28992D6FDD166CE61D281790D46A6C94F11CB18011AA8469E4EA73FC49DA3818BC5ABFA7410E6A457D803A31A344E0670310380F05151BE3325FA9B13C6AC87289874F082A09820356F50751B74E53DAB00739D574DA15B106E81E3A908360937C02606F8D40BE4E2A8413B0B2E26B4027F745A72810C8ED13193341004254C85CD6C87655078D0B959584AE2B801C372FFE313034096331319BE72B9B7B777E2978E5F3896A1A3A30A1F2DE1C787AF9C7C771E862B94995F0C7D288B0D4A417841D7DF0C87379B4D7ED9220034797A17722A16C9865E7765320B415825A59723D92CE44D1654E401263EEB7276989FBF2FD1C3E5642AA97057F0261ECC9162255709C121830D027181962206BCF062251B099C36C7C9C6628E6D7A10D8A030CF85DFC6610E5C5CB86516501AB1859ED85A1D723D8FDE1DFE7DD6630A37776D7BE8D9662957EC2C853B4B7B17066!
4DCD5D1C3C3FA6A6EAD34585A8D8F023A78FD08D8458A667842E0A4979E2EA5ED200DE0B8312BBDA4BD584AD3B261E7CAE32D4EA511D2D125705730C555D7C44289841588048550102423625A037E31F843A326F8A124C20DC493D6261F3A58ACF208AC5890FD63F25E8B4AAA580F1A9E28AC18F7095C3AB93170EF65685294A6079E85F05610BD3618230A3D3BFC2FCF2F0CF9B8ABC063D608AC99427754F543117E28463B60B397169EE2F0D5F8B9CB4CDA46E443D3D5B8F2EE5DF7E54B1DC7772189F05B31F485C4BF6D6CBC9BF92EA1A6EEC1406542E1FFB4F94560D036C948C5F0A631DF556E35879A439393CD78ABE378C7FBDE58B71B0B17333F25242AB7907A90D1FAFA224E99B1204FF520B2639C0A02D4EC286C5B5464A215A77D506DEB66B618B23E847CB2C53874AA971DDA7443110E0061CF3DB4B662C2DA70948CC3F1205624AB2A425234613C74247A830B6A30D6882F2D0718BB6665808D1595209C69B02BBFA718EBCDE56A1CF264393D79A949B4053569D20DC4C05376F1C33059D64CD6AFFAFE0C54109CB474C4873F592AD5622CF2ABB188205EAAEF3D3F2C85736E3EF72CD7E38A5B166530CF518DE81251F03830666C5E92A201014D54B26FED009029216C2D70B709A22571B32425037BF7B708E307AFDDC06721F57DC879146893F57664A91D0E207!
2253824D34DF8607D9A09643DAA10BB050F9AB1733337C280B5CA2ED00F7A88E10C666
FA420D696F01765B413298F577DB7CC7A2DCBC1B9EB66ED2B27BB7FE89DE8D89D048A705A31F537E75F6C94DF0D27BC2F9E7C6D780B52EB2ADB175F0C0DF11B71C39BC5BE8D583C28DA8FB79A1DAD6AF5872AD6BD184B253212A613EF916E79391B8B70A8279821ABD035A37616071F9EBE26792DC3CEDA3AC84991CC455269AB1B460FEDE0D370C60C6F84BFEFA89206648ED054600EB38C571BF23AC98770D1C9C3663BCA9C645084EDB5D851318F73AAA2C17C3956FC41E1E8EB798B86E1E080C3179DFC38EB199DB2EB06856C71B7BEBB57AFC2A2B9D97C9929799B08C39685C9AB96D8640B0115CBF1C16C17E1B3385B2BD4E371728D189D361C64591FB705B0F63F6FBF2D704A9278342D1202E22309B120F721498974FBF98F7FEB949B0E9C7F29270A52AEF27AE9C7BAF6B7FFF3216A14BC152D20B63629E259D3F0B1531F941223D1D8CF36871EAA129F632E8081795B663AB2F2CFCFE128B620654B0E6B65B129572E5E662BEC2FBB00D1EEE464CE565E9C1BDEB8924C589B43C6D75A26A1FCD6E511FE42DA64F9755143F5262B9A9BD86DCDDC0FD5DED6C4EEE91640A4DD4B4A20196BBE9C62FEA98FF595D023911040C4DE3276B302178091EDE1BD72A09E243B24464AC75A0290702425ECCE1753948712E562990F2DF55252B02602DAB014A60A99D3B0C4922974!
EFF98F55662338642D465B1AE3CC102875C32C38219FD94826B446C0C6D829A595526EB594731B25D61583C789143C9AB4046305D563071CE566838AC91ADC7C80AD08728A974A7BD706068EDEBC796DEF196747165D7C2CA9EB51473E64B45878A8B7C7A5E96D4FEA37A5AC058DBA848B0872F089110D38A41DCF6A8F24D4DB0BFF982F44042DD1C1E4E24F8BC449EBDA87446A3B8146C9C34077C07FED84DC0777F1C3BB11B0C9ED2999C30441A607FBCA1001682A491C79114639C03C8DF27ACCAFEF1DEED67DC706A6B2DC47C973DD97395FEFF8F3E3CF81A18E561FAB158737D25DDF8642A9B35AE6ECC3E226704316925AFE4D96634B67886069335EE96DBDE738B4DD8E6625A4DCD06D3B021F4B675C5555F17E8821CFA39E56826C23CCF8B201FD1306AEEC9D2447A429CB6C9FD6239EAD33852A94148001A792374EA6520B4C8A2DB0E490D18AA4184DA9FB81F571B211DB967C896D644B87718F7530DC0B06C5968C9781E62EA834339615CA7BB0671EDB7CD823D4E3E6DCF5DC2A563E4D5F63C6E22CE7191356CC94A823C98945C67C1DD140328CCF290BD793F1DD2C08CC713C972858D2825403B50F0F7A39CA21AA1F1303D3A9A73FA79E4E07E1C0252EE112FB2BB990421212B869E743983B0985E0EE450B0193B12035208CF6DDC1C5B628C22794E19770CB03!
E07D0835B573CC6DA79DCA4834D19288F820CAB9A4056F1980491B74E70DF138F1603D
2D054622111D9BC545D81BD91827E7B96C42F31B8DB2637D75E587F7AD782B3EDA6AB5E2CD7AB33CFCF9B9E1869D4A1442776F7529DA7CC286140A6F4A9FEC2451D40C2E041D15F15213727CF73845F96EDCB3E79349B09F92C12EC9BC0E627E36E7302A86E72986D4F3ECC8E0D81DD0D2A2145CA7EE2F2EA6349959C44E680E7751F8B9F5DF9898F9AF00570B1C9096840583039D4C0F2B7D9148399B7521C37331902C682FDB1373E3B990631B600B85AD53FEE83E244C95532CBDACA9AB2115C24A05B6BDA29FA56557594A0C0327E4C34233E84695BB0DC8B066645A2105A4C3D190D27825E354ED8264FA39815E4B2DB17E60418C4410A711EC4CCBB2A7F5E9C0F810572A8751EAED5BDA290D2328FF48B7DD354E8A2329498AFF6F3CD4DE92816B2D990953A5EEE5BB51A258F782E4DC41BF72CA8CAECD4C1CAB8D3837030828C24887DC90871D55CC554312B4C0D1C52A2789FF704E0EA5CF8134027036A5CFD2E128E8D7B3ACB9EE72C3ED9E8994673614BBAFAFCFF9F2CB2F0FE61A2BA3B53F5EBE58EDAD542AB952295EC9C59BD9E1E137A97A723EF1EDD0317D7E31F37AB818B4EB8B186AB2F72CCEFE334288DD1FF556C7690EDC031BEDB662CA1D2D99D66D32050E5537A24B4E49EA90EC88F284F60C38DAD11F4943A25C95A2C6657EEA9D0FD782B1320F326C706!
56FA20C1BE21411182DD576227A7229751EDE519F2AD3AE6C386DC07F2BEE73ED1D8694A95E80A9C63E87D10D1CBDB6EF378005CB88C0DD909C8A09539A053959594FDCF6248E3E8B05862AE700C5420E87B2B355A8419F3F5E6AE5A0A981216625EC20342455EBED12A36450A0112867313140C1F487F48378EE8119814803078E487CF16F7AE571E0794DB7E3025258C0509F4C0AD018B27C9C0E4016D4680495289A1684051531F6C199002B22A5100CC628021F87DF71E1789EE757C2153F1672C5A962C490418DC88C681D12CBB81361038CB39E5D77DC5AA973B4F46CBF55CA8DC75772D2585E8D81772233E5F24CB9CFEA2B4FBD9C9D1D981D3832F6AEBB6FE3644747BC63F217B8E9C54A68F8D5EDD7B1A5F91370AA8CF93B775E6DC4658CDAB6E028BED96E616CB25B4D30D4EA8035A4283FBEDB91EDCA6C60FF7EA9A459789E1E4EA7EEDC482C4E072387A09C53EC33A3E56585B5A6A7EE071B5BE9EF2FDF0F46CAB0F29AF5FA90DECB0BD2511DE178073DE84F84E8A1E2E6B434D2ACA4EF1533E2E6E2B92C135C1C9A678A0587E66DE65AAD6AD9F52D6B43677CDE513D97472783471EDC26CAC588450D24B063245F2EB93D312FC23E074A23503947D63673BEEF489C488C8A68345DD23432782429B9DA69065CD20103B16C5246DAB4150F250E64C7E2D354500CA!
7B535499AC2655A24B2290146D1447ABB5E77E9838009C2D80B12850BAA5E7EBB44C79
497A46A86B138067B288E298D03BD195CE0C701A4ACAC23552230544E23E6365CB8967B5340091B86FC6A2D3716DF9FAAB3ED6E7414D0A9D57225B8A0A5D15A994DD4393AA5E57275F728870270DBEF3B1979D77DF2F4190EB43ED3D10B4DF4E6F6AB37EED34462E1DCEDD7AF1389D71B4D316041775180A021AA6A9051A904713D4126028676773B5ACA0D1C9F1BF80033D6C697FF068BB39439716BFE44A63DBA4C5BBCBEC8610A8FB4271CA8D76E9196C6FCC5071A7BA271717A0150D2858B65DA07ABAED95B14345EDB70F461F3186DA46D8195CE429170CE2B8D8B17F368683C990FEFFA95F198A3A7232EC3CA7834BD3BCB5059710641AE18A22175E65EC0EB04941833800F1FAB942BFA31200AEE60C4F5989163CDB169188199737D07877E4A02E252FE0707913546D42AD1A8889FD4D274BBF6222DD7A7839CD663B84EA9BF71D06F7C2493F459942694958ED2196B27F9A6833419E92D19546E2AB6F09094EA9A7ABBAB40AA3A9901933D27139D652A18E3F5128E33980651183FB469CDA55BDC69603FB95510352C37DB7EC7802419DA502BED4F4DEDEE4DEDD7F7F7764BADA9D1D1AA5FAB8DF9B9D1C1D2D4EC918F0441B35BB3478FFEE3E5EAE5EAC9CB9C588E6DB7D55152365EBCD8A87EF7EAF5958B57FA1A39BB6B38DE24F188949659D7F54D99D7B0598AC7F1!
DBEA00F800A3E320A26AD7D31A0444C361C7ED8CCBE911E04AED44E2D6AD1399C5070A29E6512A680FBABEF8486B73508AC5D6F7F5E5DF20053C65389F08EA4855B4CC890732F92395027EB280894DFBC1BA549BB3AFB03B586CA43098E442ABBB4140408ED1A74BCC21A665B0271B604C62C1D03C8B6521A198415A2194588F3E6273682CC0E6B9125684E10A226A70B6A4622512625C142873D95492C5ED7EA5E299415CC6D4DB019A0FA9329A30A12112929626A53023ABB77B4FDAB809E2820C359A51D61549FA755AA72BC544EBB42E834403D75E0B8808EE8464B8A4C645C2F3164FA523C31494A88619EC00D666B2704E62D13A6BF782DA0E0900E13336665828E7401BFFD9E4BC017F4C66A0F5B7A65E1EBE047C464BFB2590D168A3E68EF91CE3305ADFAF033532971608E2581B9CF45EFEECB38B273F39137C7D4247AB59B295F8C46EF9695FAFF5AEB5BBFB51FDD59BEE49E9A0DE1EE2F487A140163581A1401C6DB6288A263898F1527757B556CDB546ABB1B18E3A8C696FD58DC5AABE93F815562D7547A1A1CAFC8503CB385E56DDE13810DCF6E00127F0616F3F9059331C92A64742215B5F4C2D7675A5025DCD6F20A2CF0E6652D84109474EE638720F713EB19755831A69D106C60792B1E899DAD284E7BA2127049B9C8B17E1F647E0F8CBF79FB0B7281B8A31!
526D4BA64931D35CABB4FEA1165909C24E5A32B5B0B4B420C511E9B4B6B49086025E10
FF7041AAE1D281044A89AFA34B8921F86729954E3D968A0D2D70C5C14892667F4C8FFC03EEDA3E5650BDC8E229CAA3D487749984B30B23150A1AC710B1833F4BF887617A2B289152706C04BC26090C253827882801F9AD16544311871EA649DAE528EA9919C71F73C74661AEF6A7765F9E027E5E72F4D0E868307B8F03AD3898080288D3894647FB5F1E69CF393E2243FA6A97FFD7CF3EFBC367A799C63F0D61D38C77468CCD7A2B7DE27C3AF3CFD30B6F0EEBB7CF0344F5FAF6A460A8D96C8A1CE26F1DF434B407D3061875FC02633691EC02F7B57A73FB031F0D5CEB18F5CBB06B769FF556CB74FD7ABDEB6BE5D12310D1931D2F1CBABBB3F3E4C923CE3FEB022DC95C19321210B4302D93679615E86C45F68811CA864224666359FBFF38D69A068DE9749571202F0B5650257AC018383D23EC37D6B2452286E58654697AB1A584356B2A5283CB9D9AF55485F3D53C975DBD0EBB72A4588012C2A2E2086C551B3F81829601925CE805A9E6162B62324B63B302F7435A4363438684712405FF58D39D428006786651C82260AADD210023F718ACD00ED704ED651F3A31D27FF3C8A23B1C01A97A613631483F143E4652B7DB9A5A7724642F89E980932403661981FAA72B47DFDE16FAB1AC0FA7118EFE000171C8CDFED43E48A7360A03864BC174CFB13122A9C5B98D2F830969535!
39CE638F561F0EC471F09923E3F0926FAECD2C4C48464CE265BE1B0D975E375D79DF93B274EFC7AE3C61D6D3AF155F7EE64BD295C144C74D896B6FCBD60C0C3E42EC475B3C5E74F749F7D5D1EAB56C7CA7D1B1B658822E5ADB9411D0CC658482E266E29DAA3D4BF500ADDFA0B677CFC0597E07B2D2E709875EA415730EA41E21A6C4E93CA232F1E97AF8FB139B358D3FF1FD666EF0425D34159BDF81F74DC785D9C408083C95656BF41424758CA5D74681765E69E127C979AE195365D8636F5D402F7AFAA06BB5D5E3198D6C78082388B32E18F185916578C752EAC54818B4868D9A12CC7F4699271D1821AD4C055A3210AEDFDEEDA850B43798AEF2521A6E90FD5861F10974AFD4C5692795CA9EF4574A7D2347D520E34DD1E504A474D7F08D5C53726B134702E2B1A0CE543922329E90EE24B0B184897A63B93A5EA96940211505650F10A27762E0210711CECA83BC6E9C2A36BD7C834044F302196B36283B1B1FBB072B8A597A387F7E993CDCAC43F8E5AFFF8E5B9CB173FBBF4FE121CACD6C4FBE67E0B5EB291CCCC43C118C5D0DDEBF712A95422F1C7F7CFEBCD665DA0235F6725A793937BC0D01EE43463DD1DC73B3A2E0DCF3F9DA97603D8FBA363DDE519AB0F5E51C4E4599F2ED5A51C3144397D028208EA4813FD93641B3545CF7D3A3ACCAEE9F17025A41AC15CFDF63!
0594E96E5523EC19A2EDF179F28A9B78D448A513D5D5A77D8CC1261811EF1C3224AC99
7E801C028D6A5BE5526D0AA4CED8392BC18FE5BC408FC753C2F39BDF0A13A3FD58EB02FCB7CDBB6A934581CAB4B27096F62C093AB8C4B4F25F8033C487448C28CC1C0D1D78B4B424F30742966D168F0A625774ECBA731D6C8BBA78371B651A9329B9E5E6A8729B5767D22EB8804C52971F0C52D1471644B4F4ADB5594DB9341348911A4E4523AE88136C5BA531B72760EE3A7B99A4B66A9F98DF27A0382677FB497D0196BCC7457C71ADDB56036632F7E00A4EAD85877ED626DB4778C7CB50520FD1F477ECFD1EA47872F5FFEA19B6D3DEF7B4B956ABC371ECF42777E9DD1BD5028BCA9DEBAD7F5FAC68D9F7A4145AD5253BC7AB2CF9E7CAB95FCECC2A783A4E697E35D7A37BCF070ACDAC01BA8F6D6CAD81AE5C88CBD015B1CB1A54005C2FA2FB7382D6F71F191F86627D884FF4033646A1A982024C35E8321C4C17874320159099AC7DEC14599C02FF5F1F717B4A05D91C7ABC6D105060391D4C312EE01B3E811232872D382A24FE90491E357A24E7A505C9FE2D12D90F929E827A3F6697B4DCBAC9EDBE1A4D2FF39DDB510144AA4161E4AD4616181B228788DE9C00B6BCF826C575A088252D3EDDA31B0959011EBD220A09D62B8D4AE666C4FF0977036E5D2E3763707EB132517965A0862527A3295CAFC94924B413974D07519E41C83B0343D30D646386E242802E2C9D28B28!
91645A1243ADD6009DC618EC193411CD5A832763631709245EE81EE3069855E5C2D8C5EAC58BB82840E368887FFCCF53FFF9E5D8F0F0B09D8D54ABD52C1CE510EB051DDB78F0694A33BE0D15C35F14F5CC032D92636CBAD96C7190E7E41E634393D78825426A77F7CCE933BB677EE99898E8BE32BC91E903881AE599998D485FDF4C19B23AD267DB1BB6FD564F27A3CAA3C545D8B013B7C49271D222C759E1200770531C54740B325AFC1999AB0F129019E9C10A720CE37D612E0DCC207CCE1D2D25C0D217914ACB576988C7AD8BDB953694806082E333D93ED7E8DD4811FF8792B5549B78DA9227D8926DA1D67E270437FF6932182DDA1E3E1A3C43ACD907E3242432CD5E20F5713BD6184028F573EA43F14ED036C65EB7E9608AA4C6826F4F15EF5E8B0A06255810547D486163BB72BEED9349F17832609E808102191DD4D107825BC473D9F59C06E7C34004B98DF572A3E1BB7ED567BD945B636048FE1A1C8E561EC3DA95819E2AE0D33B2AC8E96EC8F5E062B5BBBB7A11BF81AD6B34D6A19DC6AC87DA23CDB0CB596CA162CC0F5994FD0F13DA137DE7DB6290BC6FD6E1D673F4030DD7248CD8241C31E6D970E1F92E6F3EBD7B7AA2A375F9F28B5776F235E8A73CD3DDE8EBB336FAFA80A4B2AD0CB7EBE44C45300449B4D8DEEE2F06B33B1F08BD1811151E132C0B04B4CE55!
D3EF07C36053C16C4F4D0BA245CBF489920A65437A696929CD8CA80F1FDEABF98C97F9
312BF267A6266C8676207FE4BF4BFDBEC26F1DC9468C64D0C81094A327831644AE46206C02C5FC012C01072D4B245DD60958934203439A6359B290FC2D74DDC6D16F01208285DCD3CE940B5CD2ED7A0E498FF07B4482725A8D134AA550AC501CB87961B3C7613D34B31FACC87EFC214EF45B5C8960497E50DE8AC90487DD069474548A7B6AB191DE2A7B0D7EC757AE95DB3B6C95EA75060C7330628E0B48B9632E7004588DF9B4618046B59A1B6B9489A456AB0516EAC6ADD5DE1CE8A87AB1B7DA8BADD5EAAD8D556BC254DD0DACDC8EAE3DF1F8B5407E88BDA6F034CEBF52F4FFBA63848234476913D8E91822628EEF9E398E336C67AE1DDF9DC475E2697777027AE8E2C5936F12CA4697D55DEEEBEBAE9637824DE97BAB2495E1E44212DCA1FCCBE25F40438BFF821F39E95AA4A2D674D586EC5DDE51652CB58CD89743F6C1876F6E101ED7850C924117AF19C9BAB1AA5FDA83BAFBFD7F808B706DF6E6CDA3D78208EAC0FF4FD6FB85C6956769823F1AA22087D8224A9141D09A0B7E98A2033AFFDCDD7E58C676BDB9F5A025C1F5600699862C37186C0C09269D2CF861688A7DEA87A13099030D363899E5FEE3C68D3F3714FF6F8FBA2DEDCA118195ED8A4C3BD3AD32E5209D92C7D44C45A9D9ADACA73DDF777E37E4EA95336D5996645971E29CEF9CF39DEF7BFAF8F1D7D0C91!
B916F4F9502698393FC262F501A311F8F06800F10978541DDFC1A1B0FB42E0DD2F8742EE80B4C1F65F27051493B0F43B4F9124DA11D106D6B315BD13C482953EB33651AE683A202AD4B716068078EE0B3795E816469E5124958015BFD7D3E076090E07A5BA17C5D278CDA657036967052CDA9B580E87FCED92B187D41AC69E78B77F7772E538FB207AB29480B5E9E201D4D24984AFDD24462A6541A0B123A90AAE20AB89D4C5C4491C4905B724BF8EF8B35F9A39214B07E493EE2AB6ACB9F4B362AECEE56DC7E6534FA87ACEF04C5DAFC6F258BE2227E7FE3D1A3733FF8E10FBF91668CA54B00D037DFFCF04B8C16BFFCBDF4F5BFE7EAF5A76B6BF7AF1C5F484CD43A2839D58933950ECDC80F09A3A026EDD9319EB22867CD574747CDDFBE7A351CCA7F4D8AC8768D94AA61434D62703C1B622B8BDA453E7FD7F3F36C80D589A4935ED69FCDC6078FAFFF097C9ACEBCF5BF9F79EBCC3FFDF2CCC7675E5CBF7E6E5F5235E83D8FBF06556C7D46B67465BCDBEF4BFFCE0E2C4E5B860D0E26B97C64EC1E029A8F74EF0394B72828DAD4E86295886D1B4763070CACC013F0F51CCB28E363F374231672E483FD87A747D07A85B18DB923D9671E64DF3002DBADBCA3D249E4CE7BBCA2DCE4C8E074868433458E0B25C514DCF50D579E77B9885BCE2283A8441E5110B818716DDC9F10468!
F7736BE1ECB2B975B3D4CA5A5B917BC21C1D472104A5063772E4FA41FAACA2F075F4BB
7F4F5B3AF4AD26C3FFBFACB03292F13FCA18457FF802F93C901820C594A7E389B685F51CC76663B3379FE66930B5161EECDE3C2687D7DB6FFE8C96309996FBE7C7A0E75ECF7A864F09EFA215EFF81C0218DA18BF74F2E0C825ED52C0F0E4AEFBB932ADAFC8F8C402E235114D4FC1A94A27EFBEAF3F9DDF9DEABF97CEF7389A226720D14A83DF466F2AB2620F9BDCA9CAFE02CAA0DF4F70D46CB2309A183D9B83F193FFEF2273F3973E6CFBEFCC9D72FCEFCD33FFDECCFDEDD7FBCFFC5417FFC93F7BF1A5367B9EF82242D1840101F9E91F99D2A4847D87C7132507046865183A3BDB92499FF1F8AD69E9A43478D74642EF93812BB0D8F194DDE2DF2631E4AFCB09DDF662BAF9DFDC34DA26592AD952BAB1B5B5F239920C84E99F879DE7BAFCE39A3AEF4FF5EFE436360FCFCE057BE15314E18B4796045D3B9B5045BCCCB72CE822401E1DB20DF88FE787C3971BEEA4DA0453D46108197D0C21216175093FEC4A4979D966059C121E974EA4C9CC9A4E41EBCFB6CE2542F4B6A78DF7DDF1D1FAC6D7C21A969E29490B404FE4ACC4D2F27411098D6AE04D0C6CEC66CEDA0DFAF45FDBBF19E7F3776A47378F4E4F75F5EFFE10F7FF80334634C412C623F04F908C3A11FFCE0DFAFC11B668196CE496B5909276807557D994A2C2DCD72C9F1B291E0B95BA9DC8D7FB7371C7EBEB7B7D798!
3B235A33E4EBFC086E0C140ED1F148D723B5013B7EB8C1A22B77C7FD9E4038A9F04F5F7CF1A3C9177FFA78FFBFEE7FFBE2F1CEB7D7F77BEFEE1FFC3B69249F8DE5F9E6F47A6EA597401D2E1CF008D8E2E5B49FBD5390A66863777D17B620955965042D6D6B7FD4B48BBA53F0119D2EB8BAC4E30DF955DE3DF455B5D6D7BE3BB073224B0FDAF4F20E7F9B70DAD3A5862AF8E374CF7FC00E6C53AF87144E3105853AA4B7664BCA84AD6B52E2283EE16C9E138784879D4E9A83329FF200189822CA48AB03F540C7F213A95DBFE6F965DD7CE4E1C200958E432302EFA4E53897A709457D7AECAC5BD5563A95D45F75FA935635732E4B70B5A6F52AF352BF374D015992E947BD527DFBB0EAB8FB1B0793AA3B3B70BF72A783917C5B6F7860B582FFFA03C68CE4A0A736867E201D196EA8F334B4B656CA3A5B85D9385B2612C65236D736D620ED9895524475D57104E4A666BED790E0F9ED5EB3F13BD08AEEFA436F3E87BBD99E009F2136F773751AF26882D680F08261FC40DD4199902035B87DAC49B31ECC84716B7AEE7F7AB2BEF3A3515FBE8091A30242FEE676006122E98637031D3763AE5390A63383E123E417B0C54450CC95640038162A900E75F7A2E7D1018344CF224E136483C708E05C068032ADDDFD8D19073CF29EA3775485E6BB90B4398FF7FDF67C8C923421079FF227!
D407C24028F45B5859C4B4B401ED4AFEC510C8C1677F10D4950DA9DB150F438D00432F
E9B77677C62352E37A4ECA7D5FCBB4DCBEBCA5EE93175DC0E165D62BF4E469B77EE6FAD3755475C857815D27B54C1209F5A951D5246D9113213909A7C93DA72AE0AADA730F24CC8C7CBEB48749A5DE2E48D499E423F3519208629160DA0E1646B296EBD68BA15F3D987DD17BE954EE8E867F90525E18ED6E3CDBF897673F78061636EF8A103BFFAB34F5D8BAFECF3F7806B4BE56F5475B4577361B91AC34719C6AA924BF54ABCBEA7239ADA6CBA531E9D2EC01140DF7E67BF3B92FC9A82950089E2D1E0D38BCBD3DB4619D76A3CB0CC40AA3021E731EB292EA804638158CE356783C8698C24FBD02393473CBE48B98DDD4DA83060CC632FC3CFB265FD9285A3F3954F4956DD2D587A9110081D950D1A1A85A6A79366D36361BFC433F6715859D4118E86184DD23E35EBF60EF307B057F5B59238A8D5BE07E7ADB38F3964C29081863A0C8DA72CF6954A2CB3F6EE97D55DB4432E7341AA099FD614A2145D31A8D771E491B21D5090CB4DEAEC05BEC8D534EEEA11F476E48EAA1ED7750DDE1BE3CEA09580291D3491041A471F6DC998B7316D2DBF1A9D15E24BE36D7F862A1A4564D6C0C4E8DE01453AFD54D2D8AA2C3C97D0143FEE69D4BDEECC946E9389107A6B2571E428FAE72309364242FCF78E1F87B891C0B856C165ABB58F5BD56F182B4E7499022ED4883BF7426D924AD2E5!
30144124729FE3758E293922680889E0BD4A306376473180E371B219417407AD44175ECAF2CD0487B648B0D68239D7A0FCF337621DCB06B6FC2C18E2AB0819914300EEC1BBBAA718568F5247C869C33431BD2405C4AF30F7DFAECCE026F91C2D6D09D073E4D64F13746470D0E95AC2E1F24D6B04B4B2CBEC5BA240874D5BE1AE3049C6D72D0B48DB70475E3D713DD6D91658281A0E112C3108429A00777558762A4A999BC1B031A02D50022362D799C13DD37838F17F384497AB3180C07A9D70ED944F221AD5E860368D2F0DEC3293D42033FEAE0D680284392082534500B71BD27588B372E298E17CD4764024828219AD26A0B55A6E44E7A68C16BF5EC60230BC29B6134D918B78EA196B7BB5BF09B733CCF2BEEFAB3271244BFFF92AC211E5D63D7F62F92BD0ED6D626CBA95FC82E5C35A398071EF2A91D472207396932434BC82ED12DC13BF86E3C1FDA291143A8D9DC1CDA67EE501A35780BD33E4FF053AAAB6985B94C16B611D2939AC8CB878764F9F1313B7D94399CA43C3F596E6D729674B037ECE03D9103631FD6E92892C0A85DEB1D4A212EE62BF46229CF52BCD5DC41A78F1A5B0134F9F0B7AA98566087979C78235E3ADAD421A2B02E4EFC1AAEFE1290BEEBAAA089265B5AA35F4B55B82C8F12F472020411C39022B6F2AAD9460C3178B40BC43F1538DA9732E3B7C!
07872A4556C6508813E4F75533EB74C7E0F6D142841E112805BA7F77A5C97F20A31D5B
959E0D5E1902AF194A4FD3E29A22939E42D0E9EA06AF8513DD8AE4FB981AB2F53296452EEB249589B4EA5EC4CD69CE83F87E996998C526FE0C24BA87237FC4358A8C8CBA852D99DCDE0D5F103D430E6A167985F0A1A5A4AD20EE3D1D6D94EEA1BC7B4A698504F33C14682EEAB82C4AA2638AC3DAFA58E19F2256C0EE91E346C5AC31FCAE3EF214531ED18083E482CEDC9739FB3A2B06BA78FD41EDAE4D6C1A283D58819C2E91C76E3B1E6BC07B1C4ADAD975B85EAFBA9611FBCFA2A405AF0520FECDF18E6058EEF1EA093DFF31A0D9B81388FC01F35EC4A961495B4325B872000A79018E218129C71B602D919B00B490B93F768499FFD3EB818C9653A17C3FB60D283CFCAAF937A22FF832F06F20A95C7C145417AAA53520A1AD5F97C1A7F573CAA6485D668D492FC16F80F9C969F4FE755CC0C850B99C6BE1559D0E74560DDD7AD6CCB92AE82409726DBBCA0C1895F4AD226E4AE30356809C894E043E78718AAF34B22A892DA6670703D4DABE961307DFBED6AE9FEDA24DAAA0DA2403E7DB435D26BD7CABC33C7448C8194555C89A47FC1B6F6D9C6813BC9A0083C35C6D92D94E3776EFD620B6AC1522AA730FE953C27F008432263A43DABA6F072F598844222A3E1DED07B4544C40C812AE3F39196C78873229D1671E02805A76BB7D9EC956CA5B0239E285C6CAAA268FE826A83!
090CE7844A53C24851226F8FF3C242CCF800BAEDB255F208ACE5719E333ED0AB71084954A62D7823CC69ADA78B111D7A8703558A24280513D5B4D2D8129E63660FD2BA619ADE47DBD8EA7DAD53D1FFE5AD33DF7E3DFE4AE08884D1AFA72D9E2639FD035C6FF794C50D4D5C5629A223D20BE45F9F68061E443C46343E9CFE085AEA7C27544AD0F34D6C09693AD9F60200F23A251B88AE3021DDE65DBDFC5FAD6CECCFFA9342DAC3BD7100559D40FE4002A8150752BAB874A853E91A69090D9E695505A37C848D40AD78EDE4ED2BD3D29A1B464147CA113302CA19FE1FE973D6C6115E04EC8F04BA4B48B93D8997245B5FF76F145A377FB1953ACE2435530168075F1E1C6CCC0E66EE5AA6C9289B651247123973BCC0AF0E2969682B99C77D6CA709AFA172B1D96EA2CF6FD8E7FE2A0BE492C0FC6D146AC76457A63A0D649250CCC32A18367387334F01B42F512441B1E7AB1B1F1DB23C72070897432D9BF9DA82182B5408D4F0EC66F8740EC9E1361EE5D45EC8796FCE8AF0E0B0E0A6389CA2D4AC1435A75F39D87F7AFDAD8FDF3A73E6FAF56F7FB2712071F5175FF56884D0D223D3C403419C6F0293F5C194A507294AF293C1E1120EE2019570F182BA86BC007957A7D5DFD9194BBFDE835045DDCA4B72FA90E728F910DCF422C35C6E05562657274FE80083200A20F0E92502F5!
2D913BA0702AD6E81F1946296A1AA094A4A11A965A52E16A9DC393C9E4A474502D7EB7
58083E90E019CD0BBB95CA7F1CE90B79ED6FC691B44459864B2F9338EEFA7A25ECF4CCBD5F6CB9955E1508CB540F9E3882B9CC52BA90AACF41A37C714680F5501EBA57E5B0F98A658D91D324B00E2DE5BA21BDEBE8D1B973EB854653D71E0DA684D4E16385879C5C6C289985ED76070D74C4355460F7A4F65EA4B1899FB5BAD9E5095B2BC4CE10AEAFAAA4661F67DCBFE98AACCB0F52649513C0BB2A724B848F5AD8E5F4DCE7E643B118758BED0F2F5291C728B45F7090E80C590D7AA0B1E1405CDDD4A3ED6DA96C97D3CB2DF4CAF57A5DD2C0D82DE0DC1D9925C53D93BC3BF492805DFE5AB2D268DC4B54D231A853D4068FA6D4BB023C4724385A38D3833197D1EB005636BB6A931405F2653D4128B4E27A4825CBD40F1C879C6D4F1EBC7AB81D4435494D357FFB78DB3B945C05712B42704FD0500DF92EF5AD168A91C62C91CEFB231345CBEA415582481E9D65264DBD8445618E491C4035F211744A0AD81A4949CB2492DC11D52E539366D8D2C6CDE1E8F0F6ED62DFCD523338C461E177DE85283A0E2E2C3A2F3B5124452D4139B304907299252D1C76E078166EF2CD160C93C1131E15CBA1DAC3DA4716439C860A9483BAD60EF3F68548A91BD85CC564D2F05738B8E1D3CB4ABB7A89A13D18590D01AEC3CDCD21DE99D9C5D3A888F17FCC4FC1F8EA6A129300DACCA1B5D7D59!
C448CC688D1457E18E90D0F8588D3C08A6A20944CAE6FC3A1F203E303F3C6050AAEC9A30AE390BAA96FCBFF5284D0F46F6311872A2338F8726FBCFFAE2BF8095342E98E12434C8D4B1A42630708AB959FBF095801B5A1AE640F345F1C851192431A907C737974C2603B0C91CC785FD0956617458F5ACD871E753F24CFE1D31881F4695C03C5C691B4852FB1957C643413A52DB056ABD30413C7741A1D4FDD6AF57EC9DF8A9C8A23C50BF6F123EEF01F3D5AFF8FE02553DC7384B1030249106955D2502B1B4325A422F97F34B8746FE0ECBAD54842C60402ADE457F936069160ED886A8BF2FD0C9B47CD700FCCD83D06CEAADE68A3BF19DA8131A64598363207CF0154381B6EDAB56CBB03F1743A3392D046DB459DF7B0E10B69C2D846BA6AD3C8D1D7500C1B82C0866420EEE5840EBB85B5F5AE9137F0F9E2DE7A562B348A1D82250F831A5273FD539155B6E1BA018DE33F6A8C94F16CA8B1843F20C53E5051B8401EAB00A27DAA5D1CF7DC9E1715369E3CFDE5A38C98A8E58EDDFFFB729FA7615F8CF50057AF0C539EC8B5789BE8AB5B82A37097D423090364673B4CB75F08E699E1C308A6665257FB596A258505362E904E314C081066F2751D022B098E863E1A668F9A7DF4AC9CBD99C423583E2D41BE40D741B43CA95E294DCCD6AD09246A59B1E695F5471BEB8C1FB854238!
C988F3078E06D45DC1A41C04AF294B7E98FBEBB7DAB581D67D5E2220888A6D9A7D44C3
AC924C146030657082E88B73747293B2A379B7B9BF6F0034AA1E50EBD5DE1488DC7B3DBCD77217C8461AEC71C8410E3EFF8167ACB20A8107AF4B5E684C896A14EB1C338B2BF6562D944F012619F8610B9ECAB63DBAEAFC425C5555DECD4BA3A3B8F7389FE42364A61AD2DCF123C0AB179435D4C49877CF61BCD46A1B15C681203FCA450C1A811EF864BF7FA6A9C14624A14248551A23AC8F0A56BFD739DD252ADC9F85D88B7EDE37C79021FADAC0F69944445BF14EF701587E192F4FA69BD7E8C4C18684E24CF45329CE4212FF10C3922A605816F08CE57DC1E38DB9C2BE0E92E8FA164AB01A38AD725104A6304210749143958E9F652CC89268EB92C60783219A4553329A5FE566D3637334944957F28C4BBBC7A7DB40E38E4EE567EE432BAF014741C3B5EA9ECECEECEA025D9DBBA7D331498B42C86F265390EF118BC55169CC31102FBB69C1DA98D62138153C6215AF346590D163BC5223C818186F090D3E2B558060FBBD354227F33A788D85133A4FD5430B871DACD853A68F67DB75271488A880D032286CFF5E81D2706018682D69A6C1A79F943295D2DF57DD252EC9C654EECD305369B332BF9AC7FD4620A7CBB36F757049F7CA2A384B8403BF38077BCBC0AB3CD38E3C824905994CF74210C28DD378050834EAB51B992CBADCB5F3C7DF1EDA3038922BA5D538CA307E944!
9FE049EB998400A750025E705F1F2141F12F4A78AE829D0DF078E08C9D5E2109C270DBA7742A351BF005D7D9AC492E9267FC36FEF3F9F540D60AC324AA5960AF96625B0BAD945236E94DA41157CAD8C0544D7DD232175EBA9E070BC375B465BBEB1B8FE4BF5D8C2470572148BA40990D5780355AB7DD9D8DF57105A249855B676F466E2F9B0EF09C58A6817E4B6B1E47588B70218FB26F680C0C8AF551F9A8D9392A7718411D2D411D6625B5CD437E293661F00A6358A95F4D6220241AF0D7907D90933048E2CD51386CE8011B034A738E0F51361CBE6BF78E6C823D9904D2AEBAA5633204A0D4F5F341A22E5BE65CE6038551B104FFC50E4E0538C9C6AD7701F347D84990AFAFF720D1292332B017A9D2DB8F1CC32B0CAD69E8A40A59D6A3D6A1129D8C6A1F42BCB49538E39D31794F506596F0D9DEDE3EAC4F25845C325A6982889742ABDA82D7998E9C692215ABA18B8E8A20739BF850872B08FC05F5855FA67918C0178D5767D8BBED40D4232540C626C0A9F670578CDE0E1FD5ABCCEC7DB9E17980FC33E49D2EF7DCF164E760FCBEDBEF5D762713678A52560BFE7B20687CD9F2E449E67F22296D26656CFD11A2A84262DAFAAEBBEB56C0A371F4B65262A9621DF4909CE698A59DED847E493251475A32234F4E43197B342ABA00F01AF20FD61B8F0E5211E07519D3A1A6D4!
B1A146D18DA28D230CF8F202A48B05C45018DA8B6B9B8AF84EEDD3CCD4B6EB8EB0E96B
8B160311B1D56FDB01A4AECCB0ADDBF3DF58A5720E243F0C4F4C14F6E174DBE140892CA3025946162DF924EE77F5A6281C7494E16C19D09E76FEB16A2BE0822420E559BE6D7092C0AE5C9A705CBCA95E40AF9513C75660475F2E3B972F7FD57FFF8B31E83FE000D1D60D75882F46008B1EC0D6D99E53ED95324EF5089868B0CD6F1C1E045FBB48DF3C48E41179CFC7CE4EC0C8CC1D8F27805B4EFFA02F5F57B63BEE4F9C02C6E064B7B5B4C197CF2FED4114212161129A7F0D02B7A79284A47FAAD702F4FA0F03E337E256FC49A041C4648408A199ABC4D06C77948D67EE6EC143D720D928ABB0D397E7BA408296B9E5A5261B39D341E42D3381D7DC4946569C5E320A1A7073443F57FB1302C98E71B45C3501616080D6B07B05EFB470D97842140D9976E465D8E06BFA3B41444873F2D509528B8DD2B2EDE431E42448238690666F0F1909B9267FA3DDAD356C198B3974EC1A366E3CCFB5146D2C794D9C331F3B9E65FCE8A985BD890F70C236E2B4505E1B41CB943F122408B5BF04FB22032DB57FB9F7D5F8FDCB7030BEFCD70EC9AAE3777FF293673B5FECD088F50BBA807EB1F33E48D05FD12352AF791964788D52BBF58082D311DBC4BA97F022ADD55211C6C4D75880660DF900918EAA3DDE6246DC8225095722C6E8C4AB0E50EB7949804F1C4453DF19F7B29D0D08AB4CF0D!
75A3D4230349C6C02C608F61453A4E6A6678AB5D0A304DA4C65AD24525C8834CA53B33F9BEDBA6E4FF074A5C2516445624B9EB152F69CBF1F6CC99378D2738CF465C6714CA0272D4C455148631E49A739B75A87D6CD21ACED392BBA0195077FE8D1D2136F39A2112361B2CE9274FDD5C0589288FA74FF86CBECB03DE434801D59B3C3E0D36B1F8E0E622E5314370F9984B8870DF3F121E7D9D2E46F2299349B0BCF0A24E5447E5DA5752DCD5F756E0289D6BFBCFECB31F5300948FF48FD45A70381B1676876E522CD325C6252F567ECD3637EDCBF3C1EBFFBF8F1CEC1175F4DBEC2B1F241EFFD3104EDBE82E8353CA105C54EC6F2DE4F9FECF44782AA71DD2DFF8F7676C62076B03963D786FA23DF794892F6905020BC0CA126849AB4D3312750F045AB9B7F46F1AB6F07F5FA47DC662028B88CC55E5867DFF8A06C7CEECCC767AE9FF97863D493484A532A57B77801901DEC3FDB787CE6FAC6441EF92A863841D48C3ACF5F569BC16C7796FBBDEE221D65AEFC3E9B64EEEE38731D5321CEB67EB0E8FC2B1B157F708C8ECD49824EEABA41A48E46989B60D92141B4C0E364D71EF94BF98E943200EC907DFFDC1B16F52056D050B1182E9AF86D518D62431A0E876CD1D0BF373B2442365E331975F71ACD469784310EAE9904233E7A2B421933935509023DA050303C57F6BB51335!
C3563284ADA44414C525015B48D212A015292BFB9E07A2C06ED06E5A940B94879785A6
8D71210B21F507FFC41063A6C92AB7E58B93B0095F770D90F0332F9E91D69922EF7705D30DE799FE905CF73E7B22370158F4B2B51E5D11EF93E692BBB4CF674AB951590659254207D9D7021002325AEC674F1B26B693FE75DC30A2BE5AE0E590944819CE1EF71A122810118D4A3CF19C2D1E0C6AB8E4F4A09164710B1B681184DA534C66D51D2072D1496B7D4503458BE9B60305806BE5399CDD61147B40E9E610F2B58DACD0450CDDC7E56F052EC6289872A2AE9B9BB91BE9C626025CF89A0A337133C5E1160A4B35F79036E3B8CCD42A12E618736A4421D4096F17A1BC6D4C5D096370B91DACD8E226EF4F7218A58376CB3876B1218A1A2ED75F7BAFEC6A38D4AC1D8B505730358DAD88A6BD5CA891DDAE735BAAB2266994B0567F7971FBF75E69B47B311D58D133FB5AE1786FC5762D0A4E7AAEF0264FFC1D6CDF0947247741E7D0F160CF0A8B3F662140D4E72C54E7F53C13BC4C90B0F0A23D434813919A8AB33E976E4519CA630F105A1B055DAD9998D75D2085DA424ED416F825F971A011118E19147C019703749AF0E3C4A9C19BD5944526124F1F754228CAD92892EFC38193541805C961A922303D242888CEA447975366F7817DAB128144FA8A372FA7B7C9796520617133FC596755D7F6C209A1046301FDB9DB999B479900B422EAA8C60F18BE9D1EEC1645A936FA1FC!
057EAD9D653C1984644FC8D96FA49DD2DCDBE3B05193D0AAAC793A76D4976287D6E6B67869CCF047BB39E04051AA16DB3128D19022A65E3F5AA842AFF85DA8825351F8C60559D75FED437437E635A093CA9E4C972ACA37D2B61BB39AD8D87D0647821E97A8F2CD2D70BDDA1ACD767EFC4212FCF55F4A6A864DE92EFA1F291CD847405C3A7E27A12C5E7EEEA1D29DD0D2579DBC78D47B07A2ADFF08756CAA17A774E234756CC5C88B9E48B59AB88A611583D06F4CC77C1A1E2410D5B176879624010D90B5815324452E63A32B311097EACA1F21C30D0A4EF664B68E3D9C00A59AE53B255CFB4A494CE9CB80A841AB88CC3391AE520358C92808591CD138695DC90BF2C192364C10DDAAA5319F583040946CC459A280227AD8F59DAA64241CBA644C4215F045249C66A5D2B56936922072D26248EE81E440C9ED5DE9C8223CF11B7A98833951476387ABB372C86C543E22326A1E714ED4B17245CABB6843324487466D1D1235D4774F19198222B90708B485131CEFE7120C8A52A4DB02B14DBBB0467E5F2B6FE47ADFB364479F2C7D2EB7D5A533887BA8D4AD7484253A4D2D71D845767CFFC90B1C8FB02059D1E784946663938ED565901FEF99F7E43F2B0DC348D793A1074A478951AF540D1A9C9EC9CED3A72FAEBF78FAEE789C39CA566B5167749CFD35DAB724F5727B49A58605!
5CA0A2E61027070143DDB4464FE40193E6DE87260E76B475A389AB95EAF381936A1FF1
06C692D174861D099E25BD51D6227FC530D180D582088935BE7499CFB112E11783894C12C1E8868E3AB7A220850BA26420C53D5C95910782856B26CF0DA78099B6FCE98E24AA47F2349CDD9720AABA95385D06572F7139BA10F82351D0EE4032265AD1B970BCC81CB4B7C75216F20C4D5AB4A3B2C5464D2D5CAC5F36882C26E2DABE617B7FAC4004404382ABF8DDC36D9219B085024701D33035BFE39007DDD42A13294A88E74E9C8F993186EEEA7615E0C70F4CC181FE154DB0E45B12DB0586EA65D763E8D450E41649DCD11B781884418F848F2FCEA037374F4FCBB48DD383D76DAA4D53DB35B72C0B7461115F161C3D86E2F1B39D9EA1603D907362E5D77B68E67AAA15E973DB466FFA805F896F57ED8115E0132057505A2BC545D190018F219B90B1D83256148BFF30D8470482664099463AE52ED628512871C858D3E41778D6F5439998856A8BC125A9673BE25C19BE9F411045D122F8145BF45D898F755430A9672C6C82A0259955613A851226700866D3782F746CA5D2152CD9CDD99F5FBA0573187421181316DBCD62942319C923587B94B598E9C4E80F77B4DFD7B7EFF91C23623E2DC848E1B4C6109BF837B620F258CBF72FCB76F6DF1D7FF1E4F1D73B3F7971FD6767CE9CB9FEE35D3CB0508AA788AE1F933894F7F6738CA0BB3E27D19A4530FF2964153C677044A8E!
E47A32C516999003C57D3CA976085EC1F9F3C3DB75F71F850E280D22BAC9F7BECB6E09A6A682AFC1E54C91FF854CCF6E94BCF1C04CD0FFAC1A8F926DE099704211A68048C81442BDD331E0E1E863569DF2EAB5AAD9AFC6CB36A610889BCD58AEB645C5B1CE261249758B74855FF430E8E9DDD1F9F6BA986B2C10C203F73E46C29C5F81985A946FA36D5280573B9B3FD738F67603FEA2C3435A007C436EDC86FEB9A935252EEE41317668FCFEDBB3DCE19B0F9D795575095462D955CB4B1B1B10E70B4F16F36888C76DD5EB6BBB15319F946F0109AFB5DE2EB4AD677B2EAF1F1D55B26BD74E9FB14BD4DF4301C009508508D1BB49FEEA0CB8A788B9FEF3CF0024FF1F99E05446089A0FB2A76DAC4D35496B57C329BCC7CFB042AE03B74E6ADB7A01E7DFDCCCF5E7C7B46E0F05B1FBFF5E37D175B195E83191D36B3CA34888B48A2CD594180D23157627136836F03A6D3DCC443EA580F72F82879BCC0361C3147DB120D810E9AA16CE7388E5D9BD95131A2AB50481E40B23EA68578FC007EE7FFF023F94EF50AF08BA1158B3C4FF7A105FEF4F1FE4ED6F2C967FCEB14F27989FEC52AE3F9918FA2852D3F309060A6940BD73A332F1B32E89B8C04AA8E526EEA414F84AF7940BC13103B3DA0FD2DD6AADBCA47530F40A94121C86B60BAF6D0F5E10C9BECA4A4E5669C5D2327D591E3B!
80CA18939B5FA88C7EA98444138ABC52D1FAAA9FC7F488CFE3DFBB64C900E7210A2687
DC7CD5CD7A91C485C0936EA6C3939D131CBA0509D3993E39FFFFCE7974C6191661E8D0B17E1825A08F2D091EB6ED965A6B90A1F4546774777E3F99EB707AEACC4D0BC817546B3DDE03615031F3BBC56522A0F1AC1B46815461B4FFF1251F3D699337FF2F119C1B84FF7C7CE54AD86B0218EADC578DE7FF9BAE7D00B45DBFBEA7AF55F9D2A6AA20FF1AD90A7786134C361632F6BE9F6147CBF8F306601C74F9A07018258097ABA9D5247058FDB159A1EC47000462BF66F1EEDAF8F470F723718887BF6D7F7D72BD293F17C30E1A397C0EF083445DE0741AF0D3B55ECC346BD161AC1DEFAFEAC87D518D4B255A2280A0312A0D84A44EC8C01BEB6EBC029E1B624B60864C63AE5A81318D9AB2E01058C53D67E49437E602C33D3A0736F155295C6422EF2A51BEDC369A045577066367C7BA7F2FED516DB43C76EF7C12F02CB312A9E98D8A1BFD46C437E20905CA96299BBBE36438B3F595C2A7EBA14DCBC4CD32A79B0CBA074F5D2CFFFCB5553885DA7E345834EA8CAB01EB55F23BDA7471F6D3C65A2E1FF1B1D69D4EEDCB9C3A83A8216E81CCA691DC958E494B1076FA8AA63BE17EBAAE88E49E9DCE1B8335848B9598B2C1B49F5A394C72D816D407C82217A985B2D99791CDBC37A2ECD24B4E6460D0751F7688EA41B7555FA35EAD1CA41119FBF7CB0A1F993D4C3683BDAC6681A86!
A198F2865E1E440980B37ABEC007425EBCDCC46CD30AA3C3F735DC8694C9B6F7462F0E6B526C5C79A78B532232095B851E749125F18DFBD4FA47B315C03B8D920E7059424AC244022280DB75FF106329A840932BAB5F36878904555C18D306DCA8983232216924F61428A907CAD846A3DF9BED8CB3CC1D530B1EEF20E82988899452ABDA97716E2E5F2A4A594DB2D22725D791C747904E46AD108E16DD898B2C349A641367EB96A49DABFA437FA9DDBF7AB6B870785DB82511B4000A4EFD7633620F8D265F7E2CC240EFCE74DF717474830233E5A38E826DF46B0D5D87352D7D83DB7CBB7790CFD38D73FD8E9C818AA4E2E5A945450A51A9D933C54EC5B53AAA0681A41907FC459B9E40D06726F29591E6CFAD11B5971F9278BA7FA7108D8765606015F59382D31B8FFB7D2868C37F534A41C1A98CDD07F4768E572A793E4DECE35C1C36198D7EB4B3BBFB8FE358CD165866D0E0D42D91441EA4DEEE78D4E33E15654BB10C42092766C8100035F5C4CE66D2C4F29478A35848ED0440FEF42352D050FD12CAA5E9F9EC88DB4FAB68A90B328263F28578099470009452E399FACB7AA12D301FD74375434B431D6BFBB0AC323C13D18167E0D51415F99FD65249D20517BB7ABC480C952A6E7FB67180A2D69F0497C2AB3FFFA397AB6E357027F205C6263545D232A2C86AFBB4F52219!
A568111A1396EFDC61E034CBF916F64E59C0D0B079E36855E5DA399DD0B2EB552624DF
9306B94066601515B5EBB5F7627409616781FE6A240F20AD42E39C1ADDB586F6B65DEBF2129061E4E7467BC4ED507F4CAC40B49EBB7192A0875D7804510BEAFAA798DE51A44F7EA656D583D683DC04010114279E35C38BFB95DD1F8D609547372ABDD40D94514B561B0791B15E9140CF21C819B7819E25A0DFAA073A1FA2F4998061982DF31197762956C44238CE9993F65F3E2621288ED26D8208E6E8B427083EB291A423EFB43019492C6940E47E551C4FA3C4253C38D00072129E70E7374CBC89432C1D4611B615C7DF9F64183E636EBDB1414C0D97DEBE5B9224545D7E7AF5E73783A362B1F8FDF79F2EBB8DE7DF3FFF7E9196A64BACFCD3743B312169DD752F6A6019177122C8118AC13951B37C275FBF1E491875EE34BDB93F6C96F77290F4C68011E56FC431B0C4535BC331B43616810A4E81240396171515E72B8E0E1E88D4662CA62EBD8424A763AE27B55DCB38B36C5C0822D9A53C1164CC730D2FA7FC90FE474D48D5AC03DDB84E3E21478CF8563EB0A36D69A9DF2B8CE843853BFB84CAF89B1442536B5F2B8E4EF5864D55EBF302958134C6EEDCEABA31A1CBB4A54EEA7306B8193EF59C42237318B55B62782BDD909B0B3A5F6B127B0F5F1DCF847C381D187BE9410C84271B731DCA179CBFB2023319E78F7E8D5188404CB0DCC5AC801A917479C33908055124FAA!
A238CA380C01943124957AF9D40ABD5C140D11DEFCE0E50D81C672201F40953D056A328C87B043B454E6BDD49A956754730AD0FAAAD26974FF2E561AA230F7C6015C7DAA00003581FE52B7C2963124285BBF11E2ED0A86F1D7638232A968B4D550BD1E65EF98A4048BE925CED8935F8B364888D466957518EB10AFB345EC8B7ED1A0DC84AC6E6359FFB109D65B34F536EBFDEA97272C8ACB4725D08BDD4DD7FB2EE52C718869EBD043862846F137C6D6D6C7BB97B10376556FD557D9EE921049DD84DAABB516E8867B2F9B64EF50254F33C59491207F6A96E3904D6FAD1BA88FA347DAC9B157B24E14452703AA5E2F5E09ED9D3ED8F782D92E2462DB65C5D3CAB383CAC630280FC96300D59694AE62A9E4EFAA1018F5740A0C1481A0EA9E41B06FC38B5A588C808C0331025EDE73FFF3B29689843A37DCF60219E49045DBB6A8BD8A5A2D70C53AC3C0AE01BB99551E960B9EC490A922F214BBF03FB23F236175DF8E6C9B34A87CBE05C06A9B13CA22663482540EFACB4F7B05DB34B7B9D53E7449046C39637C83B3A05632F3AC01E2344025DB7AB96F72A73960BD6FBD8DA752DB9286FC3BA4C035D1B8F2A7587ACC3E0524264A081881D93AF5AC723775CC92A63DC978EECE64170504FBD778D469D9A747834E878C34BC1D7C8A853D6BC00DB60689C0338BF17D3C21633516D8!
EEA890E2931AC444486392720C87993F8AA7CDA9068FAC1F1175415A6F2354D938F58C
5300CB087D9026E62CE9AF16A41625F7A00142F6CE0CC6A36C17F2DCE3EF0360C0CBD3A27D98898BA679C16478958DF23037AE143B48174797A082664DDD4123D8C0BA243465774F5534139DF7F8A6E2E2B490A72A64B14310B7FFEEED63D9EFAC5606D8D30071867B3B5DAA164FA9124D24CAFC174EF40C1039621089C62196C80AA51D29A9D23014102A88F08B257ABB426D8B1F12893E0C7EB5CE8AB1096374F47950C4207FF6F3C9AFDE52F7F3CAB14E6BC86956F7233D0C1CEA033E8740651F85DA8845C2BE73037DEEA225F9BFAC04EB01B5A2D945FCDF32C70B5361ED11483C3A6345BFFE62FCF9CDB71A84DC22D967CB79C4A1FFB2E88DA1520F3A202D2A66E2306B859F71B8C89F8C1B8327A874BD9D13B316C81D58D5EFE9052FED0B0A50D69F680E6E6EF7949E19DDE68D47A4F9FF076F0205F4F5DCB93AF267669AB9EFCFAD75309A17A32FD756B02CF28358F702CC2066504164A404B120F11FB502A5FD8BB58F47960B7F18B37BA01236A0EF234B31DE0B229C056404A299267042981BA150540B4517C1007E561C4D9F571B1B8D070B97AF593EFBFFFBBABFFE7D5D3005A2E9D0CECB2D0C78170E1EE0833C7CC5D2B5D90A7AAFC486BE9C0DE74878BB6E502454AAE0F03904218404D9D15497756CEE746E56103ABD95077B1A1A0A4A2EAA5592ABEEE491BD2C1!
35F6BC4677FEDB4683C73FF979EB8277684DA89AF912DA238C0C3B61AEE761813A4FD8C237C8FF0DAB8FD7F05501A41B9324E2C705D0392449A4704C4D6293DBA2262A1E51E825232CF04D5C88C94E4D55F8D50F28A64F2D52BB420354825A8C359CF21EC45EAE4B0D1E8AAF426C5E4C5606501CDE41C923C97B7EC8433152C4041B1BF5D4C32163CF790716DC19D45EBF1A7FFDEDD36F5F7CFBE2C5F517D7BF7C0C3B48487C60ADDBD7E33010407C45E20229D211696C947250C287923EC81EE2E580F790771FDBD1366F97F01F86663E5853F8001E14E14605336F865BA003491E3BA7A6E62F0EFF55F3A521F5692ABDD9DAC17D832183275905AD33166A9288AAE79D42E1AE00EBC3001E0AA8F2032EBBDAA1853351D82876A43D2311ED8366F3F35F1DB1880D7325621B58927B8A79CB6F396758927542563B226B7F4FBD4140289BFB9B0DC151F02E52672250D07C3F2CAF8E8078D601A9086FD8C85523A0C4C6C3572FBF41E4E599BC1AE4329F8A681D4AB27044E054D2C0822BC84B3A6A03C903F756AE6B8F6DBFAFF67C5A279074945808B7A0D3D861D0F8A9D49680558A4B27358DA963DB4592D07BC0CD6CC1EB38906F99A49751841ADB08ACB8A04CB4F3A76738707DEBAD9F3DFEFAE99FFDD9CF5E5CFFF8CC336E4CF4A48825906C1FE48D18AF0144F327A3FC69ED!
D3EADCE96F03E0D7791C4EFB091EDAC23B180EC21254CA444AD25996F04C6AE0D708DB
703FBF0C78A4EA4BE00583EE32587C7FEBAC8D9E4FBEFFB47B229172DF754BEEFD83D2216E7FDABE53985314C129946607CB433C650BE9F4D8DB8A382592AF8573C2A8113549A897EF5BD8F60D50F551F98357CDA3A30F9AF861331290912E43C868ECBC31D506F51AACB5FCCD1A050C87A107DA1158471A6A561702AA31D0A98105044FFC716A8650C29FE98DBEFC7E53FF289786B54A486CEBA0C9C843D758BD2C8D6DD274F754184918D9D3B2803E633E133EB9CE14B973682D06E9827D9783AA566C555F29F71158EDE91810D77E2205D1A885A82F2DD3EA6FECC318EBAFA960D64AE8EAE7243DCA0C492C15B0911DC192EC8544D19F9C39F3B3173FF9D39F3CDDD8DFDF11CC9FA8C796D45B34D9E3110808ECC6D8DA2B7EE1298847A39220A0D03837728287F05A4DF718443CD2B5C1FA1B4F161D39E48751B8D8A7AAABFC5295CF9056C151C341626424665CA2A1D871EF63FB319300BA7F70BF74BF542AD5A2656D117A4C3DD05D71DCB5C9855A3A8AE712E65E510F78167AB503390D3DC69186BF1B79B139FAA06C69D637248A241BDD40A7CF4C74F406CB68F5A211D5C979B01DA41C5E8758209EEBD2E05E0DD1D6E1757FEE8035DC1C0E79F08A2CB527B587AF6FEEF1167F731EFB4DCBAAEEE64AD55200E75688950721C632B9C00A50B1169AC0041C4BF1CC0210094!
B2DCC8DF219939F9BDB797E4EEA56CF1A6346B347B3BEE3C8A30BD0E5A043B2C2420C567A1A01F01446E371466086BDBB03024A058A3154C1E55A02D4A2F792F7925F3B740A7AA7F5CFF21BF465ADDE4499FC00CF04927010D0AB37BBF242E233F99C1CC1454A08ED75B94CD9568722F6B89C7924DC91608F46C633AFED80F76B1150CA249318D978F26CE3DCB90D048B23A1B5ACDE2F61CFA1E14305A2B57F810C238268EA3C79E6BAE01415A056D6730ED6A617A4539B179C34250E89F40C9D173E8DC8B313679C62F8E60349431F1CE147B92C3FBF3962B441A11089F81B90DBE625CD32BC2582687A1E575AED9A9BDE7C4F23C7F221C366980B3920A886B042882BA3398FFE1B9BF483F047EBBB05DFCFFB3585DEAA0222AF75796598829BB3BBB3BE631F84783CEEA3BD292855B41E024B48967FA827A81214ECB3B49532569A3C3F8645188674B9F5FD956DA2CA5A51C6931F67E1AE0E60529A02EABEC590F59F22CB155A6893F0A0A20B7BEF231F669BB8727C8F47B02D6EB2ECCC51558A6C2AE549220F5C25BDE8DC3061B7073579C4046EFB51B6223219E51F4481240CB0A50D8C0DD9797A4667F99069609C898BED584649B30CE47A9E635F599EDCBF5F42F8DC9F414AEFA7FF82184204953E3C98A6076BF7DD783E97AEB752C926A535F7DAD47547F2BB34FD4E4D0!
AA80F1E5AE7A0E6C25EFCE078E2E8CE1D09A0A3E6AB0FD09D7D7084F2851FECF9898BA
4B8F13792A2F07B1429BD8AA5B6195E1986968C2F6F53C0035B592B1BC302A6050F51F52B5AF4797B214F00CA9D7013B7DA38DF564DEA5CAC9F5A46769C8D331F7840F8DD950F6F87CD9B3C6E908F866F19AE4DD1D9A0F4602300690560D09CAC8F210C9EC7367E607CEC59010E6B11FB4707B3C6EAD4F83406822A438BB7F5BE95474BA1BE10E476A192325A7C236EF2F58B88EB90BA6A3D68D9C587FE9C3E308C4DEEFA93D30133D1390644890D8748A0CDC3C176A0109EE0DA32DE546FDD5474EFEAF3B0399FC042732012A89C654E29936266A28517C9A31DD4CC62515B5E81E27556D2242429A8A42FF72FDE3F58D6AA55E28579C13D70B3D2C1DAE4B8DAAF8CEE8EB224DD0A536763D7490256B588F9877457ACC28A9DD0DC8DFFF69520A15F010E4920958FF4F0357F21711F6F3BEAE87FA85088A1D334446DD5A1E69AA685DB78DD9340F286EA0AAA7A357936E2590701FCA697EBCCC81BF6BC2157FB0D1D5A7365125BD56C9F334CDFBA6207507CB26CD2E8E1C3C0E9F7C60730BC14107BE6CC374F9F3E7EF7E9B383B1FB17BD7C087C7A084B569CAE1672148555BAAF1B8E4059199A2BEC1164A03C9084CD545D7BA85602C1A944693E860DA3D25450E1DE4BD4085D3EF13B6E0BE34E9047105B46DD24AD7B8CF12D2911452BD226921169904DC3871E888EF2D4A871!
F058B702279A495393DF87EB576C25E1040F4188AA064F55A8954B14919516C92BB574599D3A8E40A383FB9080750F2E1E1C082C826A9EA0A8DA21944B0B591FC96AEDE2B29639FD11F05156DCD2AB733D9AD07BC248BBB4A8D10EBBE6EEE7CD0F0444DF917E1EA09AE9E606664547B6EDCF5B7EB668C844E51B4845BF5280D4B1027D1A3878ABFC0AC1D6BC185A827FD3EA1E49DE196A3706553F6F681114E440E8439B4336E5EA734F6B542384EC6D0EA28D1DD3E091487A970F9E7EFB78FF60FC5F05C23E7E81B6E8CC75080DBD78FAF4C5B7FB9CC7E8824FFB2E2948A45046018CED8C555820B0503D233B1707F10D8BFBC4AC9849CC035C698014195898751A8D7632CE333335B2C63C3C6E996DDCD4075CE7C3BA46D78CD669C2B7212480B9261171C8F205E6632270B885CA4C0DAC60FBD0A3412AF3557C2AF167EF7BA93B890EC13DC8A0534E42E3E2301A2C30D38E8098A265A9EA4C46A54A86951995F833886297F0FFF1614DFEEE74E4A0BB97005B3B383F71DDFE688E9D32CA99C0228A02A096453A97611421471809A0579FFFEE7FFCEED507122DD2A49D5E0FD9E0C9E94665FD1136CBA85C78B9213F4020415EDAB41103F664D3DB83B8D1AA3DD3263E0C7F851C845BD7A162EC46987775363DD9CEAD7BEAC3DA08BDD55C1BA71F99135B4A734079F1DD17679E!
BEB8FEF88BC73FFBE6CBC7FB1BEFEE6F7C7DFDC5E3FDFFEBF153F9EFCB6F1F8F1355E1
D0E76FA2E67589F65E8AB995628A5502F4A79255CEEA787A929DD31375C1959B21E99E175145352FF954038F52125CB1F18AC55A154794EB330FC146B2A25691E6135D52D831A21249246151464642ED61DA2FE0FC5189C60A9D808972BF6B656607FE4A7606EF908EF71DB72A4925308751103D0CA8FE423598B4D6BE2249472A970B3688D39B4C1C891696B68D9FA683E0F03F5D08E7D07428549D9352E9E4D309EE3B2240BD2231119B7C0A0834542388F40E793D3252C27ED3FCCD50B1F5D1AF5E69EA59054E93CE8CE1EAB7A1C09832C2A87C83B9869908AA300A9EB5C029666AB275D7D4630BDA10F318222295B01932090D57FAC3F2DADCCF35F4BAF6C45095FCAD729A3EC678B623185A8FCE3CBD7EE6E9CE57E3FDC7FBFBEFFFC5C6FE573BFB1B5F6C483D93B4F47427D95655221DE4E590C72AF1DB4BAFC0E6340B96345FE5B7B3B9D6399093EE5F8C8D04B539F3F26CE4591DADDC4D28B5AA13AD96B71D175ABD9DA71B23F452F51C00F3322D4D029CB4FADBDBC79EA18DBB4F26A4844B5018BBB813C26028DA265F17EF628C34EE31928BD5E7C3AC08E9AC866156EA4C1CF04350BE0EF1DFB1211701DAFAA6582BDD9F4878B87D49367D28334A9B4674B4560ACCCBC3DA477E379666348DAF944E4AC7B56ABAF44392E206BEAE9F70ABE8075D36657AF1A32DBF011!
4C20A56301152D1D10D5C7A68140DFDBBBBEB3FDEBDBBC751A3F2F6B99755A5F9A15A3AD9AE9DC52CD4C4C47E1E94E9BBF1FC0DB123CD48908855733E8F57AFFC6C7BFE50A96AA05D5AE6A3E97A56A1D16E41288CE4A41CC59169EB5466889777C7E327DF3E8579C88BEB4FF79FFCBB194C9F1CB6FB7E5DCD1BD4F1C71981B8BC42442BCF2CCBABB7EE32417E651BD8156CAE0941F9F65316819E241A9F675891E6AA40AF6B6DA4DADF40A159DA479D14F213E7B40EB07FD37A6054FE3801BFDA8021E48C377C0E1E3979AE93E1444963E3BBE3119B7CCDA1FAA1DB0FE1EFB60D6A7FECBA1247C912A81A90C8E2A1C5220A8BC1B4AA5068765FC0336486051441AEBA74655A9DB86B07D894B9637772E5A454BDB04C71CA229F26A94A568E80AABDD5CD1840357FEA14C33835C3DF7CFEF9ABDF7CFEDF5E49259354C4291188453AB91EEE95FF883E4BD89CAF52870AAD1138373A76F8681113B5432C66F2ECE644151B2030EC4BFBB6871F5448F3AC521A0921FE288335168D3D410188C90AE8D2ADD8CF058B826065DCE129C30677A669AFC0BB093EECDB7E3D1C782952112F63635DDBEA4151A24326E2DB586FFD82DC5856338EFE26647DD2025630D4C74DFD5CE44DC9B79A8472DE253EDECA0FD9708CC2806A01B41DA5255A2CED79AF32EBA576569A701EA43D9AA4946D8!
93979C03AF568802E7F9B6C72E841E84A0CAF600B190C3A21C6D602D80FB715B54B4F3
A6925C79273962DF760E3D9869B5575F9AA71D4F9543AFEC9C94F21737E70FFFE7DE89DDF5FFBE9DADAC9DB88ACB5D2D41394E864AEB37CFBE04AAD27850DCF3E29F16500B945A733C026B458C4C1217CBEC8D46F4B413347C83EAFE6FF63F81B0EAC25293186B8CAD7B1757355CBCA0AA0315A94562A7C630B4294DDE12BA10E23C3A6BE39DC6C48AE82E68784D0DEDEDE5CBA482FCCDBFE954187B74715D9387671B92A4DC1088FFBBC1B2A78F12D19B1CBA0898D7D28E59B1F3E7C085A6C580F5AE32CF160DA41D310830B8C04DA193410875D948AA2E517DC513E3B53660AB16EA4C1436634170D9E9F9B89D0752175A88525C8218EF269C3A98C777E5A69DD47481E0D95BA019B64DE5FE80A2AB4B2EC544C9347291C08EC7818811094F5AA50F7930CCA2A0550846C17B12F345E587CA88A47ECEF3F321C75D7797D924CFF198BB7D481F87D964A354A251579D17365EC2F82E5879287AE947EFA57124788A49FAEFD5442E8C39393830F1D73B8AC3A5E8C23B46AE964F2F6852506DD9EBF34616AB60661883D7A085CA455ACDD864D70C4B3E5C8FC466AD507C3BFFDFCE8541C44278BF91D3503EACEEA1E04F257653B8E960454D6705140DDB1416513D269F7CE5F8679E65A29D4E29C44C21165CCDA79C47335F530148D89A16414E4B36B7D3B0F8F40A7302A16C3C90F!
047EEAF05B90F2B282BF29CB20AF6B707CEDF40A08A2D4E432216AAA40A818712DA496D62BB0130438BD8CEC7D9D7C2EB712FB14A29026262D405A84BB99D80A9E68D13316265395533EAF6F3FDDA69588241541F57D122423C92DBEB371E6DFEECF324CA2A2C8576A37E543D9BF2B490DFCA1304A1C34A0B8C492FF1FEF3FDBFF62BCF178A7A7A77D749949279923CF9BA5C2E92858440B66227F8131D1C9E4647972F1E25F217CF063EDBEC09F8352696996B5C30B11B9F2E9DB1F96AAC782BB0B2648CDF1609A76242952A4078DC2A98C10B5A8A2B0E19B1B92712403DD0137ED03A5A6598D99370A99D4AA2EAE1BF349507E938F6029A34BCBB34F3E0D6A3657AB8E610E8436997E58BCA4411B523216A36A2CFC62BD47C36223B02769861769F65843296A5D65D57AF94295E9827E2EE8A4FC6D18D7E113C53A0A02E2598D53FCFCE848CF8D122B5F14E631A381A4E2A5567C4945F1560B183F2EC85790530E9AB034D2435D320E1AA7A66A44B282825B1C142F421062AC7164A05E03263FA82E805CDF4A8216B4CDB0DB250D8A318340B497B276C890383B2FDE4200BDF8F2E9FEC1B36730FC9CE0F531E4DBFB6E5F706012D4FCE0D85BA6F27418805C2D5FC9734651E7F8647A72524DE36E35BB4F387DF14042A80A94940D6AC1F162510CF00C45875FFB7F963CCB3587!
5E3435036F10A22C423A83786811461A48EDB6BCB5615E1DFDE637AF5E0D8F3E6035E3
F6C3465293CE9EE8CE1ABF9BCF714734D4D9901551D330B232C5769818E6BB7B5DCACAAB37D8BCB1963125E99F4A0BBCB9A720681EE3F4721759879E9379934FFD330D9DB9C95DA982BC8204A11FEBC0476D1824272114E3403FA41BCFCD9C9C38DB4CE7D7A22AC6E7E95586CAA6879CF5680C04615EE594F996C616FA348CDF38753452F20297C4AAEADD8D61B42D712FCFFFC36D4129C140AAD376440E95C7BBB9952FA9766F9CA6131C1BC71FA860FA4AAD4149681E2743BE2ABAD74D6BF6CBEBD7CF5CFF561A892F0E2EF7BEEA5DEE7DF1EEC6E359CFE9F72FFB2DCD442C7DD0E2841A08468D86447DC144D1D64975293D59C9594EE0B4078C0D8B85AC74E016B76AC712709D0E6EED4B17D74AC71760C3EE2753130DAA12D2AC649DEF068301AE581902E4289215E4A13BD3CDC70D76F747CDF21B8988D54CC036176A7A5F2D7173A3ACB54BC745E522A0743EC10E3735829ACDCDEEDCEA30CED9BE873A66B4A4913D79086C14498C6104548020AD3FB4DBF55C4378E583AD4A68BED7B669D546059D160BD0ADF04F17175663D65619EAC86A7650FA342F693D2AC6923199D8C10FEDFB34317108C3F9D1BFDEE5E9D7D63D15380AC34067A4F603B675A82365EA38B2F743BECD6A2AD11CE4F46CBE7FCDB43213D6385708B60FE52BC56790CA45C158E5052933C418DC4039D!
356AB35E9B77A93899AEAD5CD6463DF4D7B7A415D83CA3404CAA5961DE2D8832EADCF236F21CF0FF7C4481B564AE9BD87694015D3C6FB07E6BB97D0A40E1645792E38EEFD8B272F6B299E3FFE32898A5529AC612088A8D3690F3A383E84B610B9618D7607D660463A7A5BB48ECA790C317458915624B55C26243CEA344F37ADCDD761D31F550AA302B7150A909899E8F943F6BDFC32D702C7162D1EED562AF1EAA10E7D869A4068296E784E3B4E226834E0E21888A0AB8AD81C92F2B828D24A43B1578887221921E540B126F0DA5EEE076DB470A4FDF527EBAE93B7EA7CF42C9682E49EF3E4CCC72FC629AE1B0721BDD2F4EC59B9A09155E1B7E63011C5C1EC5522EEE1E459BF3A3ED055091D1924B9F414B7E9BD1C4775030AA20EA248A74BA4B34A648C9CA534F6981971306802F4E54190E27C76A1FB599D5AE57D96E0B4815E45F25ABF474DA2546D37F0F11C567BDADA2300A1F1EEA44B27EB2EA7F7917B0A8E81E39D9361DA2879A8549D46036F2909BDB8E5658E64A9FBD36367D492C7C6384EB1388906834531FAAE43B5FBA2845213E12471843E1FB255460D849B47F6853927FC23DDABD30E9FD1D41EB6A166A4E27AB8E948E792239A6DCE9FBB7E065D4F0414807B79EBC8BA3874E5679C9D551AC4260DEFF48C3F50C534CBD68FB64D6FB6B333DBDF98F553E970F!
1E883B7D25095F5066E94A545320568E8637014237C600102A8D1F55653406611963F0
29F4168C9EBD1A6154BD4BB8DD0864D600AFDDD2C4E8DE538FB9C0493B6CC69AD2D73914D933E75817C12318D693923B717BF3142CA354723DD6F04F907473A4180441D10760A3A1DFE2C5A7422DD5E449815F9E42DA63595FB0DECB25F03CA120B90389DAC9241F705E40F7E397910A1190B17791C01620BC8DFEA44D5924069D79DA45877649283888AAA5509C96031888A778A7E26A9A9543BEF383D5F3EFFC4DC2A5607F2D168EDD1A17DC7C30D1D1635075093EEB4238345C76B0C895E0FD503D6B21BFF289086B9601144D0868DF0751B6F6A0F259620715D6C874DF8320A7A89779D392E64BD391816F24B1B328F826FF887F36E638E8D7C9C1FAE513D6CDEB50C59A01F3FDDBDFEF1F5734FF737C68ED9CEC77D41B76B70E307BCC357084820F420AD11DB361EB1757DA3B360BB4F920FC4A5AC4F8B18468E253C067ADE240F4A7F94B28CF12C4DD7BB9CEFE472B3D60434CC03683598366AC08E7CB5C954830F5188656D25234D67DB9AFF548DFA4D271B4EC76DF1331B1B2E500CD584E4617F8EC61EB61968E6C031CB0329B4ED6360773911951491A49E333B45FAB2E03F9F09335A0C20641EDD5904272730A15A3B38A99EC0B9FA2232D3F2649232D44CE64B9CF9E987A56BFF1D07FDBE93A5B54EF3C2641079C6F57145AD220E928D8AC5667B0085AA0EF88D46E2!
E6E8D5F035F291FC7474E3751E373607A1BB1A4A10F035C1C77BCC40C3062F4140B26E370856A038449D628887349AF2B7E037102B6EE064443E5CB38F5FC82AA3D8EA50633F3F8F5547BFA1868C46AFAE139E7FC9AF60F0C3290B1E1E9479947822FF3A50AAA3D6339844482E22C55A9FDB7A1915F9F631DD44EE28E064A6528134420F268890A4D146D0E4DAE7F95ACBB355471F7F0D2D0E9A739EFE2214A4C9A56484E9C92097AAD510930088C0041CE8DB027BD1A91B08B0EB23FD3B70B1911A2A201210475AB40411470C2764A4E8B9BEFDB94EB2229D47488D614565F1931E70C177A167429EBB9EF323AD7C79342846FE49E9FE8717C1FC909E0C43A3C949D5915F9683C5C0934FD06C978B5B9F94AE5C58F69C5E1CA42D73BCB5B538D91A140759DFE009222883E2662C6BCD816624CFFC6EEFD5EBE12BC9429FCBCFAFD19095B1F8385AC9ED85AF30CAF91C254CDAF2BDDFEEEDED79BFF57E8B72D69DCF55D83EA6CA87649B00B5251660BF67EC84593BE0AE37E73D6C77AEABF9389DDBF35834F5B153D0ED18390EA91FBB3BBB2E34BE0B5501CD80CDB15F71B47EF17DBACAC5C61E1946187066E8023D092E041519881C3DA9CD2C4AFFB236629E5DB9E2F312CFA4D9CEA31F9F7B3A93C409441D58F0A42DFF364B61C4485CFD601831DCC2D3DCA2718651835D4930!
5F307FD92DBB4EA6723A876779AD8C9E85961D3EFAF2C0030E7B8C217DB3A7AFA8A946
E0AD5800F8B749FA321030F2D434413EE8B9EE5CB9EC103413E9EA235894DBB56A75E292C8385956ABD3292C144BF72F4E3A5AFB062F5F6EDDFAECCAC54F5E62EA24DF996930D8EA04C7B7FCA893B604104832EA14CBC5A2A41FC80A0F78B52100D8DC9DCF7F0BEBCEA6AE5E8FDEE0121DE18AC8B2F78761BEE0079A1ABE0E8752FF1A7B2861AA63AD14A0AE17FB2A5C04B86C105173B0F731F897477D9ECBDE170AA3DD47E71EB92C50E0643249C5529E0AEECEC6971F7FFC384D92DEECC98F1FFB7CEF94033D80A7AEDD6A81A3095500DF426F2442A5B9E0DB0BC491E8725ED723F28D46C61B74067604A4F40FDFB27354F5C1E41AEAD11B85C75A2878F650C8A6244F2F2ABC20E40DC460F05D67C14CE1AF381EBAC8C813D16A0FC70CB44A451EAA1756A63A1B04FD870D3A782178E8D33C93E42F5AA1EC240B724DF2995107AB292A5EE449D82C50C1F84E8B4508B8C5A4351874A2256E5E1DF0AC975227276CCD3E2CD53AF28145F9C4C7573FFBE493932B9F1DA70507E262B541716B50DB2A4AA2925E4D00D0C2DB44224249E3E2ACCD254568E6F3CF250729B8C65C88EC585E77D8130F494A7F848FF2F7B120A91D16CB00CF542886866C9B53A4A3AD0E3D3E3C7B2A0BE9B30662C97876824850EEFB4DEAC57A5EAA420F316635F2C87794CD8A42E5A72377D7E56596042!
CF18FC021A4A380D36D8FF1DBD0AA4AE50C94870235D3825CE451A2281B8DFA4E622FF55577062AF996846D14066B59A32C95BD28B57BF9E0F4D1F77C3FEFD1E441C4298FBABDB35FF3F930D3D63ACAE3497391CD1F76281EF924AD628A23012EB0C65BE267812FF4D0080063106078C07D85C8D2AAAF2A2D3F1C71C2D2A7CE3F0B661D1B749C892B8E025833CFBD5AB75C73DC2C9BA027CBA6CC420717A59805A144897CECCB4FAE9EBF70F5B35B5B01CABCA4F20B83EF6E2D6A5BD2257AA9E3635084E9AA7CE779BB8818EA90ED2398E835605119AD19A323CC51349B79ACED87C3E69176FD2030364262A27663D86614C96BF2E8CEBD95CB260D1AA4515315BEB64A3A36694C2E1F87879C3AFB9C034841F5E91A9E52144D6A1E365CD2085B275064129E1A35D9CEA3A702826F4056C0D71424FF4BEF1F416AA06B896352247A4803B03AC1C25F5AF91608DAC8358ABA437B4CAE24779631CFE73DA146C7B67DD4A9F9BD1DF8791DB32340DD8CE1F30C6C17167159CBA483BFC59292733CC5CFCFD9C4365B7CC1DA6180B508C415B56AA55C9105114A9204BC23204B1E5740150C0A23FE3A90170137D86249144114D3A3CD8FB7E868EAE1A2437B3AFC8E85CD4F99781C79BEFCA119D596B0D19397C9B4541278B4565AD6F0FD8EA43A2DFEEEEA272FB7B6CEBE146CE9CB77E!
870711CDEF46A1DA074A438B4F8DF159BB46CE91019A1AC2188386A943C54661CB1A5E
719B5373C15213EEAE44A334D41C9AF9BE1EBB08139D26BC9325DBAD7850DA994B895ED72B30B3DEB95280DA5681A5D6B80A79B0B548F94DA7B46A98B3E41359CA77C158AD2B5531831C7D0A60F16B0568A841A220D6C48424E8E51509192104CF96098CCD3187EAC3C02F2F416C8D323FD28F0F3C98FAFD6F66072FB14CC54DB84905B2B2F67D6069C14A843B2D240745FEB0F14DC2CA0EFC2F7225F5F611054342C0E62CC21C4E2561246316A0FF5711691A72D78C4A62C18F8D102473F929EAABE0401120DC6450CA2C8EE1E1621B77C3A34E05643EAD682452B22C086FD22B1363E846328FCE5A6D9942765D5E1C05A70D1FDFB172F7EB8AC559366117FB777FEFC67C7D59BB76E7D5633541AC6E5C8CBE9E1161013BAD4050840AA3214046A24166EC2E3C5EC7D2E7906250A70280F235854317674258B37859426469642023A82F6832D6C70EE28966113C3E1419B0A8F342382483AEA51178CD906CD7EAD2BB59E26364E6DAF3418437B2464A1299ED6B903040EC021AB64BA11070234AA965C1334DAD894837121105B334DE4E556E7F0DE8DC9C520AB35C80538681C9D50B8CFD04E7863637FDD6D211F391BE75E7C73FD2F678F769CC464FBB38A23E8441248E23E3AF778E68CFA6EC549728C9C775D8C392F584DA96C936F3134A24D074C6144831593E40C2576678A!
9C1126C6174C23FFF06A3C733C0C7D6AB8456462B18C0EC91A5E18DA2E4D42891028022EB20B0F9FF3819C3A6981145A3B295247510D834604D1FD0F4F1049E9F24AB536F8EC4AEDF8D36B6F5F3B7CD9397BEFD6D6B1C047A4C49A7FB838B9B015C13C4BBEF60E0645A102A290D89AE988E50C83465C9DE197A3266A19B920C0D550D5F7F770B9315420A44A0F476576F0F415A20A68DB5E10F1BC1A06C26D9E81B07275C024924E8EB21F5D3FD77BF4797DDACD7DCB8C1595C9770276F3117112AD4A8FB62753EB728E1FF187E4F563A019A85A92152AC4A3866717776266B43BDBD8E565103651FA20DBA9A1A6AED0B7C36CD3DBDDDFD8CD609A924151A1C08C92F6B25C4F7B75C3A6BE0F51607B7FCC24BCD578C8CB83876F440E8B56A374D2D7227DAE2431141670E66CC7CC8348F19B13690FBFE0E44B8B932404412F12410270F398B45A5698275966B5F464923A168D9A8E08827C760D18D56ED7E2B40A37FBB50F0F4A57AEA4CBDAF2DAB50B2FAF5DF9F0FCD56BFFC74573EBE6ADB3B73EBB60A4E35A1A33358787930B0B748A66C15163B988215187CB0F8E8B8AA83BE6E8CE1FEE4858DC397A132E973B65DD54C04C0F1948FF90B4B323641AFC5E92CEB061BD87AC22BEAAA859BB7B3A4703C17869C541E6E92A1E82E1A67D07CF7ABB4ADB95AB67859CAF34C9E7D5!
144A0F905C57ABC1665E0215A113698963831FA2E16FD85B0DDB6EF97404D7E64A753B
05084B2CF4668F367A982879CA3035BEAEEA68F080A3E350D38A29983097B2314A300B2CEDC8B710D95330A4B1C92A47AD690C0AFD5C28CB0FECA891638330C7D6DBBA52D1317460278D88889A6427C91B5290E0281671DA23658A2987A3A78761943B67E6692AB04346EE5C594DC13E5A2CEC9B05923F97EA26C165967E352B5DBC7850C285C77259BB76EDFCCBEFCFFFF987E73F79FBCAD9DBF76EDDBA5A7C89AD190C83A3A8F6F6310600882000A2EFF29D69D1720E75D8285DD9E7F1DDBB71BEF7B01D18D8D5B4622C97FFF80EB6AD3FDA451B74A19E1F79E8DD29D7EF116F35AC2F5137F4E78DC6DC0FBBBC2443EF2F107A5430EA2C4C66A9EAAFA9B6150CD3A03E8348C30C1A5D3B0A99BDDC6DA82CA87E04C2091306B8E6F9B9591581A96F318912C4D456C3A4D07294422668BB9F1552CBDA08BD74FCC835762166D7BE16D4509D828F94A5C3DA07EEB47C0536FF583264A4570196F5E19FB686BE4E8F6DFAC01AD83EB85A71A8AC884D056F337430348896A97CFD18F6B0695F401E11D0473251A8F90EF34DC1C318070DD8D7F33D75E81DE5A36B465870ECA334B6E5732FAB84441369F297CBB72F5E395FBBF69F3EF9FEDA9F7FF869F1DEEDB3F76EDE2A5E3DEB551DA78A1032E6E4B0B3B07F2F045E428E18D9DECBAF8BE6427EF20C8BD851F9CEEFF67EFBF9907AC!
482856E28948609E351A8B69E792CC18C0A5E0C4375A2CA7566A4F59E03037BED1C4A779192BA315D11BB9016EEB21885E9A800F92208AE79FCB8DCAB5C5B3B5B091A91FD3F378445CC74BB40CE6CEC8386FA103762DEB11A883D36D441C9CFA9F9466F4D13EB0E9EE8ED101F463E8ACA3CA5726BE85B4D36364C709FA16C36EEFE144113666956C94597ADEE020329A44539C888BA54F12D9A85FA141298ADA1066E311E3F6FA819494389F5C83110D10CBA35942413A48EEB98E7988473DAA3EDD982996810EAC41C9FE5E5426D403CCE851849213352A4B11786BA3E4B41080D07CF252EA627693545553BA97DF81FFEB7F3E7AF5D3BFEE4FC950F6BB7EFDD3B7BFBA620EBB335A73AA557F9B47A72E142E84734A60AD19FA196019371E521C964D196F7D3E69EC048A78D378099A9EA2000690F06C3D2A8A96903DA338991D7EDD7AC647B5E83B60C44CC4D3D24A13C28981B5D9FAAF8DD79586C5A1B58045BA3837C130AE045E65225644B21522BAB483DF68A6AD608010A559F915A15A9405B033ED8E0798030D6450859E959FA60452A32CB5990C13585B4C21D16C795CE9672462CB001654CF7E2B6F8E830D33391A76D1611195463310202DEB44AF9AB59A25D62E59B13EB796D899379F8F876F7C67519258556934BBF66B83F7533A71A5703844B101AC77531687C1!
EE89A63C10819A85DDD20B403031C7D100FA54B8D461B965AE390F21604DB182100287
B77A2C3809631CBB45AADD6CE9FFFABFFF0F6B5F3D7AE9CFFE4D3E2D97BB7EF5DBAF572EBEC67D2E4D7CC34AD0A54ABBE7D7C61C0A75118920D12A9BD5487E62ED0277ADE35C6F666479C2CBE7E756A1503F26A0374C6A106107A7E64259D25498B2F11311CB6D5E79546210DA5A1A1F2A8DB50181E153B748FA1D21A9D88BB547D2D54A4BBE2F0511D3E6C0F867C13690BAF86439E6A944656DCBA81E88C88B33023C02657D7AE736A42F275BD0845FD82F2B05A65E58F353C390369D830DFD45E99032393D83BB4D06628DE519B11E60DBE19CD666E4AAB4DE85EE9515040F94BBB18434B24083EB29D8022EA286FD174F116E52B2FD5CFD775AF1640CE224C9C7DF3F15BDF3811B41D9CCCF899C931B1005B0E821611DD7B1148A1AAE802E9D7B8605B74907930348CB0450907C545945FA868AA93AF5850D6D6E2C2F3DA32F51B917469B597835BD7FEE66FAE5CBB52FBECECD94BF7EE5DBA7DEFB8DA41102DAB907394E03C3939FF59C85BEC01F81FD89DD9E8A14848C3630AE599FD9DB29D452382A448492F85BDD87CDE1DF256430DF542943BAD62962ED2E66E15D8AA51D471A27585A5271155D6B4ED576BCD8632026328AC2396469551C13A93A73A3C6AAC2CCD435BCB7C759EEEAECE60BBBA08EBCE7E7CEE5181468C2A87A5F60E7ED0E5B33468A83960A4C52B0A7D!
BA76859DB80FC12D85CFCC3B0C1DF973BC8B3DDDF0732111CA76904562F807696142EF0565F5AF3847F2D906A87FCE93A71BFEEAEC087F1E0E9416A2FED388A3CEE62294465E31BAAF07D5C638A327E79ECC1C892579DB089C8E50C74A88738EA4F37D8C2F1F3EDEC8F4D256BEF4C5A0A80B325DB0814892BA4FCE9D1B710D62628E1E6D2F19785BC72F8F9720AA2181155FDEBB54FCF3BFF9F7578A672FDDFACF1242B77F713B340B69D03E7B399D54ABD3EAA43A39393EF6A161DD64190BB59A46112A8EBA96C9036D9AD64F484D18F6F620EE2919A8D19DC7E9DD14DB7B7D07163364A4D702895E87AF69CDF99AFD1A4D101B3A0EECEAAFBC9F274CB666E824B9E6250733CA98AE21C5726EA0886C82077765C6D720AF0D1D5DC372921A5E4E4342DCC1AB34F6E60A8D7216231A3249AF46BAB5005D5C3BF456FB4AA41C0C6894DBC184C1860CA7C17644B91A5B49F66E6CA25FD461241EBCC0EACA46DC9181F1CA4FA169C4E90B6817CC9EE62490D0BA0D59B733DBDF83709B15B28D59CF497B30FF83A25B908C76CEBDF8E5C6283F62D1711304AB3A8BD00ECE4376F70BBB1B4430922425CD7E0AD7442C3D2C235FDE3B19650E3787D1EA7435D44F7BEBF8F8C2A786B36E7F30D8FAC52F6E5DBB58DABA74A91C1625886E76F08FBC75F6ECD54F9655C143E974F9F69597B5!
9A1ABEF269D716D0D51660248D15C2A759E69CA86C1BB17008A7C5BDE11E4A91649CD7
6D54AE21B88BF4D4FB5754B526961E04D1EDF66A36ADBD1B4F85DA3A3E6AAA309B8483DA352280B409B3794A4F07B07BCB3DD3D586065869B3D1B073518C46198E2B9C8D015419334AC61993A0BAA6B7AD824EC8091478385A5794192431B63908A5CC2945301C84560EC9B71A925DCB532C582E34B6662C51B613C75C53D76A901EA10B8D3D86F43D0B7F38CDB5D04CD728BAEC8898B30A2DE0A780C3F1C83BBD8254955C2B040BE2A2540E79AF8167C929811D0B4180453AED480288D965619C2C3D3D2FCB83E63B155E4037002AE460A06973EBD36A74A14625D1A038ADFD977B176ACFA5AFBF578C8A376FDF6B6315ECDDBA79F6EC27DFD7A6CB6975BA3C397FA1B63C84501ABEB10D65A930BAB50F824F8747E7C5706F48230FDC923558D88A5872B4DB8DA196B9A3BCD449C35FE49FDA76DF460B22A22C9F0E44010C22250140B318309EEF91CF8324BD696AE1A29670A77DEA4CCC49934754646DD075B0C8A3FD862263C2211AD374B10C94A8903FDEE4A840078FD8CF72D55BE071501C78E18A650892AA5685FC99B99A3DF1461B2933545E13256EBA739F9ADCAB8CE2DBFD2C26E1BD8CE411FBA845BC74D4CE9F8BB6C822E928DCCEA55FF8370FF4EFA74A8B974F0438630AF4CA24760C15ABE47D5A78D5533652622CBAA12204224362497E92CC205D7EA463C688738!
28EF4090320F045A465976C32C6F1D6F149F5F802A64F52285F965E6E15B72EDDBC79E9D24D89A1DB451CCA06C75BF76E9EBDFAF2BC994EAF4C4FDEFE5E82E8DA803E6CF25FD75F4466EAF0EC89071F80D8E0B9CFC9A80FD5F86C085259BB2CB1A4D00784D90E0FA8C33FDAE4E7A154D698696BC96CAEAE1635F1B46DA2F175D48C1D5897D85E35906176FD460C35ECB58E0AAF6B1163A6885635ADCB90E29472931E8D6123B2E949F543BC7603FC93CAC68F9F6C54D2B99FDF417336834FEF6B9EB0A21AA7948FAE52E6BA795C31B262351AC3568D6625AB9DAACAACE077D8A0C0EADE1EAC0576DB920476E81E588EA5658E502842377381979B3A47512E1312E111893A037202902A3D3D638A229D38D00F9DC7685E2B4BD9EC45387C247708FD9B67B19E51E771CE2598A0B401DDFABE7A52AD812A29FFC0CF8EABB73018FA83406A29661829A226B66FDD3B7BF6B3E3E57259AB4910BD0C6AD78E03985C63765E83BC5109A76DDE0043A20E5541E8ED61AD5F2D673F949E6B6FD86896EF14F35E4DDF019B90E25151024737FEC034F25F6725C227A58DA3CC763B77AA6EE864B0DD6EE6198B601B798B33CB951A6D6EC467CB59E8A9392C7ECDCDD36D358BA81AC8ECAA8AFE8AE4C395C5B48E94489935790640006CDB3D07A182BA9B84619E90ACD6397892B43F0A2D54A37!
5623E1CD63707C03E2D750612E8EA8CFA3DE3AD286776F06371586045EAF4061247848
14AD66187B9B0676EE4FE046491702D1DF07449878968BC7420A1CDA06E976158BA51E11A46F73BD2BE91051929DBC4334CDBA06EABB14BA464DCB078ED64727292EAF649DAF97B976EDEBA794F5E6EDA89D540E09604D1D5E3EAB47678EDED6B9FD4A687B5DA96A139C422082E1C1F0F06C7D1802B158FB7F99E69DAE320BA2C42D40A1D97C0EB3237A947B9563A848BF494A87854CC2B9920A522D0B1249E625BB34FD36BAC1E742D13F44B6BCA7790BBB626F7B2F25A145AAF079B7AF47BD66C7AAA871EDA4E0D12DD0D1D672ABC66A7BF69BB387925DFE25A019A866253D44B8E1D3673FBD9C892B8D4016DE580651D46FC600EDA1BA111D5FCBD79CAFB7DDC4F87B65BCE3B76E84EFB2B04AD43BFE89456ADA9C586C78A54B0EA3A25230033C3F9015925D4EC81DE5F1E12932594924FF4FDC0D9EE9047175A6E12DDA8511C23BDC596143420BD7A4582C40782CF448E48145AD9604FC5E42506AE9C48323251B829054D12D1BD2DECCB6EDF2CAE3624D14240D1D997D596B46727D76A124CB54F6F05CBA0767C2CE5AE56ABA90B1F8613814A93C37911FB0D1B4AA124A0E251D86D949541D45621EB372E3E70E8B1D79D9B212ACEF0B52EEDAD8F5E835E7C1628497229173B65493A115C82B342971325826A642A05DD61CE4352608D47A0613BB1D03B6DF91B9BB6E85073!
9F57B2BA6B43D6964F9E39BB15C7FA1171B814A094D94F80EF2BB719C6B382684CF7BE55F9B02F693CE7256CC3FEADEAC7E681F5075B49A5A3AA189E4AFD9160675386870735B2DCA45C2B5DE9047A1D6974DD45D2900ECB23BD58B335AC10F0040E9F3BD491A26533B49CAC00B24A4EFC0815E6631BD87302BD5D0A6A4C810B96B341473FDC630EB20BBBD5295FF1D3E59565B5EA381C7C05B725139DBD79F6F6ED8EC41F090498756F49647D56CD9CEADB57CE9F54A7D3DA85ADDA325D9AE07071E165F1E585E3C131A9018067D603361CBE71257454BEF307308A8A366F34DF5CCCA24B6B2386F61AD2C5E9A891178CF03D6772CA8150B3D8A67A3A5AB036D7F9B46FCCF1B33521EEE42DDC824E589E2498C8B796D604BA74366F587D492B7B95972CEBB0B732D9A3ED08162F9C2ACD0B71EE84E5B760B20C62916FED0DAC5136D55D102CB8E39EE37AC41E2AC65DCF26C446E4EBF3395AF5DE76B12AAD752B20979B4983EF12E4445AC5CFB659C21A9F91152E94D248713F464268479008A648FDF5EC6235F031D6C73BD3A31B9F2F0C1FAA96B4EE4C106E0BF937D4F8FECFB96C0D818C22EBDF1C8579B18E00C00718750FB63E9510C24BBAC4D0BA78FBF6ED4BB72E6C75500E3923C0926570EFD6D5B38BB47AE5E4DA3579D765ED65B716D4D2D2C66CED09CE66935AB4D8!
CE29B828673AFC812607935147C0C4DC344EFB79A971D2BDC99FDADBA1E6EBD3CE0CE1
D568B7ED412DFA3D72B7818721048AB7143BC04C1D651B35B582110C75DAB98D1A43643357B6524E910E2BF1CD2836F362E645A7DAFB2AC98F615498ABCC527DA66B9DD41BF65D1A5E0CE98511149F733918A83AA871A35E1115E42586660C4DB438DFF4980EF5B3B14B56E40B8B381ECE68366034112DB75453DA3F75B9C28452C541B88DC3213D5DED259365BB592B6624995353AC8167F1D940339BC49D641A9F3C249A78ACB095D2ABF574D2CB4F841620B38159C680C6CB20D7C05FD8992ABE6E0922294C5309A129EE179769ABB3553CAE5EA96DE9C70C16D2DA49B377F366F1EC9614AE6B9F4AE9ABD61683495A5B1A5375CF41CEF087B36A92061AAB789C3CE3B198F1FEB5B987B3F891338AA59A49A2B0FD5753426C78F4C678A8583E2AE62D5A532744EDF640F7F98A956C3A9286BD6B00531A21DB6F1D1E691459AE59DB068F6717F9F81FC18D5AA2F1087F67DCC4DB4B35CF3AD3E818B1B19A23F98591E3DB2C6795D91A764EA7A224F63A429AAD74347B74AE5F50CCDDD0A64E6332E4B536A158DB8ADA28B50CBEF63A700BECA94FC465806EF89DDD474FB282B19C6C4D57AABF06BD09EED5228FC7DA714B275688E5743CEB9113A7FE5EBAAF552CC54D1FE86B11C310AFD518914C661C2C45F9D41CDBF9C0230F4DBE1E3FC77F845EDADB452A2B88FB5B4932C5D!
A729A6A3672264EB576E5E4ED2B578A9DFF8FAAABE76D1CBBA26CD4B110220F04042C1750B550BDD30EA6509FC295C1CE81AB459C3F9172E1EDB240D2F0E3812BD224C159722D600ABB588DAB40C8040966A610B0B177A689A03F907BCEBD8F9E918D1919A2249BBCBA9FE79CABF3DB24AB250626E10FDF5F5E2ECECF5F1CB6DBF8CD5598052EDACCB3FDFE31B8FA40C04AE0ECCCF655BD0A660FD5C8F0A8AADF384AFB543DD48C44F0377979B7DB0D5F0042EAA77FF4B8566B2D781F32B525D12E257E85E21F1026CAF641C7AADE8672DF83B44BF6D42832F37B62A2D95ACFA7964EF28475B427D4955F7D94EB5D3CAFA414499A14E04B8D85BCC99B0185C6AB1D147E13A4F229D322F1C8CB54B73F64E3F37E34BF913CB1459053223405D79B6B15930CBC7E8489BAF2F5325D4704DF83C90666A1EB944414EEAF562040A6B003767C720F55B2C99B955C066AE36B299EDBB1C184712A74864138B26999D682097F1FDF83240FEEF27401138AE46B7B9C1FDE2D8EC79363BC087B424E8C48177E2B36745CFCF99DC4B2C75F4F7BC99E34EF96A8F7DFF005C2237B4F5CCFD1D6814F85084203427686127E369A894119679F9B9018C227C98EB89D7A8606A364D3210C4977C854B57118992BD70F2D919466645A919164D481EE082CD958DFAB75E418DA8695CEF8BB910150F97!
0E89BDC4CD07D8EE5D0A2F2EAB3035BDE142059396573786A7DBBD70A4BDB3A24BE299
F6D72FFD5F3FBC9B873EB69863752C7BC3B63F3BA21A49AD7DE48D9CE274D9E62026012C4CB03950355319C9EBDC5BC4F8BCD3D36AFAB06BB35BB55B8361B6528CC9E10E938BA405B4847812EB32E54603010544A8124BF5C586DA4371EEF6C6691EF7F419F39144F142942763A5F2CDE1CB767D3B39393C796491BD8D240CB9F5E3EC68F97A7617B7A797A09EC629AEC31E0ED8934C9DB7ED5FAC51B7247C259D59A980C853DEBFC13C81CA542172DA45D7821073492980995034CE8013E48B942C8875899B56C3BD66CDB94558BF9553A29B45724BF9E62426C105F420034570B62EC4ABB15A82058136C49AE3E461581DA9ADA30A1959A5B6E01AD3460221F19541B729548887BE615CC882C4725A31FE8407942D49E51FE0090FAA6098017EAAC48337052E619407BA3D4B24437B091BD83F285B4ABE8941D92A5DAAA049B94BC23874E3A17B2A9F938F342EC0DCA9D75E421D74A18204DAE6F7B6394984341C8710A60D95BD5B7CF80F008A085403D010F93B3FDBF381801591C493C8FA6B0A1631C1F8FC7F9C9D9D9597C127F8F4E8118110341DD9EFE1A9A74C3BEEA4349943EE00F96470171EC55DB012B5EA833137891E1EF349E9536FF1A3D1107FCD4B5FE1CDD38948C63401ED54667D3B159B567D75A0C47A71015D70D373BDF3CAABCD016557E6A7A0C0A586B6F08!
00A1DBDF2F9FDD3EBB5D4E52CBA2F83C9FDAF84EA4360758C1F95E12CEDADD28640C797553E5630E6352359B574DA0590F1A8545EAFB8C1EAA8D9F5462577B160D86FF725927B622BC596B72D26BC61B456B1A44D670514CB1F6533637EEF95489CF9F223205D8A582943B10B44EC3A2F3FC6B9823E027241E60726112200010399BA33803E86BAB801047228ADEBE7DBB8C96CFFF1899CC7E626D221E0EAD45F560925ACFCFFE763C919B58D0F4388FE7F2431C9F5F9DB6EA676A3A3C4CEE29DC40345E06EC46AA931F316939E1D81B7C7121DF2D14F53F97FE98813D2D8E61C83934A3D99428CFAA8B9936AC614124F07873D28987C523FC6820D8DC1F1292885FD749695BAC877C5C980608196AF44275F435D3D92D6F772A8BEE93254BC2757EABF37C57FACF99769F0D210936ED4EB3E42131C1243F8AD014683D510D50389EAF155159DAB62AA6D74AFB268B80D06E63A54120145F4D114DA2CDCDCB7F7CF5FC56EE4922745DD8BE239B6C9834ECDA53D5E09D1C7518B4A2DB1331BF6EDA042354FA45780B8C53597C71872E192019B3670923561E6A9A0C9E2149CF9634138306518780607DFA465D4FC5991A5B089232F77B22A55C1B7E737E368D4FA647F99E1E8FF19B9816159FF74A0CE188DEF10CE38C71B69911FA2EE1C02555BBA2E667B85224C805625A505A8F!
C8F71387D250450A64FCE286B6A32DAD0AC9EF48724001A4F612979D1B7748A5F559A5
C36790D588963541B394D66FAB2475F422487F288A55E6C9E0F73554B93E9969326354A96B1EEC7AEB4276A604D10D195FA9B37148977C714BAD442796DA23950ADD945D7C5D24F92AA99423C2141F58DE51D2AA04D3287A36F9B953045A47AD246EB8C6BAE99F7EBE361C6C460123A5AD719696D948DFD25F6C18E7E5015B474A750633EE03E1675CCB26DEF63883D48774C6EE775EDA084C21801082E8BE71FD0BA76684CB5CC34AEA1E6D1E093B8EC20D592065D71C6221D9822DE81ED377D57E48BFD9C78C63E2874EA4808FA5088311C58F61D430874222C6AE63E0C270AFF1CD66546CCC94AD52F28194E522CE26C8753F1E4DE8FDFBF7D60D1A927257FC75A788B42A7FC23BCE4C702F874C23F4D0811C69E1672A659AE1533C886DCCBC081F9D559593DA98D42AE7389449A0BC0CE8810EA31EE88ABAFBF25FA561CEE9B0D51AD7A5DFAA0E0953D84EF3AF3FDD243FD27D3BBF9AB5F47B4175445226493E8E46D8976C120C432068FB17A8FEB19FA97AD3F26128571CC36AA781595B273E2EDB8DDB6A6DC66612FD7EA405FD1FCB863D9E5127EF62498768B36D9A43136D965BD07A744D914D6B1DC41C890F5767E36AE476253505C06661EA93EBDC83A9CFFAFE77CB43967E68354383F8E6BE16332AB9C363FF4EC2EA613B8DA69B97DB68FB9F7FDF37CB28D07E961C0!
01A6C70F987AB792C414C6F72F75C6C4AECEAFCBB45921D529DC4C9C1D1FDB21627587322EAA1D5F242959430C9E42510F24C56DB990BFE37D4E530B6167FABB0A6E5AEFB3BB1D5AA30631E0A1BF1C435617E3EA852DE1D3FDDB44F0E419374D770DBD4406F627AB1B5CED050026160788767034C13BD956248D5873581C1B5B993C73FA61F07DCE528AB03B3B5206D56E18D8023A0A6BA2EAEA3C45D37AF96AF6F3637B711B1D6AA53A40331EEDB23165B19FB26CCD9351D59B81FEF3EA6AA589B529FA6F3C357DB85B60B125273B3128189BF7BA7A244A3A283AD6B5837855565E28D1A93C882A24484BD76F3A67903910DB1A1E5349A37E42815D1E6D5A4990091D47949E58E751E93BC54DE9A7F3C2574D01350DD3FBC75DF6CE610D20B323D1D5DD77D60FE7E00F32C986FFFB97CFD7A8B8D5A4130D9502D245025B54D932ED228E87EF8F6EA402B3AC4EA8FA4C48FD12B4272D52D3276AE16998E5CFB003C42C219D4D4A552039CA7282C6D0140ECFF020C00AB15754C0DAAF1110000000049454E44AE426082');
+
update Member set picture_id = 1 where memberid = 1;
update Member set picture_id = 2 where memberid = 2;
update Member set picture_id = 3 where memberid = 3;
update Member set picture_id = 4 where memberid = 4;
insert into AccountPermission (permissionId, recipient, target, action, discriminator) values (1, 'friends', 'MemberImage:5', 'view', 'role');
+insert into AccountPermission (permissionId, recipient, target, action, discriminator) values (2, 'user', 'MemberImage:6', 'view', 'role');
insert into MemberBlog (blogid, member_id, entrydate, title, text) values (1, 1, '2007-01-05', 'My first blog entry!', '*Lorem ipsum* dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.');
insert into MemberBlog (blogid, member_id, entrydate, title, text) values (2, 1, '2007-01-07', 'I love latin', 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?');
Modified: trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentAction.java
===================================================================
--- trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentAction.java 2008-05-12 23:03:14 UTC (rev 8174)
+++ trunk/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentAction.java 2008-05-13 03:32:23 UTC (rev 8175)
@@ -19,7 +19,7 @@
{
MemberImage img = entityManager.find(MemberImage.class, imageId);
- if (img == null || !Identity.instance().hasPermission("memberImage", "view", img))
+ if (img == null || !Identity.instance().hasPermission(img, "view"))
return null;
else
return img;
16 years, 6 months
Seam SVN: r8174 - trunk/src/main/org/jboss/seam/security/permission.
by seam-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2008-05-12 19:03:14 -0400 (Mon, 12 May 2008)
New Revision: 8174
Modified:
trunk/src/main/org/jboss/seam/security/permission/PersistentPermissionResolver.java
Log:
don't return if there are more permissions to check
Modified: trunk/src/main/org/jboss/seam/security/permission/PersistentPermissionResolver.java
===================================================================
--- trunk/src/main/org/jboss/seam/security/permission/PersistentPermissionResolver.java 2008-05-12 22:54:07 UTC (rev 8173)
+++ trunk/src/main/org/jboss/seam/security/permission/PersistentPermissionResolver.java 2008-05-12 23:03:14 UTC (rev 8174)
@@ -96,7 +96,7 @@
if (role.isConditional())
{
RuleBasedPermissionResolver resolver = RuleBasedPermissionResolver.instance();
- return resolver.checkConditionalRole(role.getName(), target, action);
+ if (resolver.checkConditionalRole(role.getName(), target, action)) return true;
}
else if (identity.hasRole(role.getName()))
{
16 years, 6 months
Seam SVN: r8173 - in trunk/src/main/org/jboss/seam/security: permission and 1 other directory.
by seam-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2008-05-12 18:54:07 -0400 (Mon, 12 May 2008)
New Revision: 8173
Modified:
trunk/src/main/org/jboss/seam/security/Role.java
trunk/src/main/org/jboss/seam/security/permission/PersistentPermissionResolver.java
Log:
fixed incorrect logic for collection filtering, Role constructor
Modified: trunk/src/main/org/jboss/seam/security/Role.java
===================================================================
--- trunk/src/main/org/jboss/seam/security/Role.java 2008-05-12 22:24:18 UTC (rev 8172)
+++ trunk/src/main/org/jboss/seam/security/Role.java 2008-05-12 22:54:07 UTC (rev 8173)
@@ -18,7 +18,7 @@
public Role(String name, boolean conditional)
{
this(name);
- this.conditional = true;
+ this.conditional = conditional;
}
public boolean isConditional()
Modified: trunk/src/main/org/jboss/seam/security/permission/PersistentPermissionResolver.java
===================================================================
--- trunk/src/main/org/jboss/seam/security/permission/PersistentPermissionResolver.java 2008-05-12 22:24:18 UTC (rev 8172)
+++ trunk/src/main/org/jboss/seam/security/permission/PersistentPermissionResolver.java 2008-05-12 22:54:07 UTC (rev 8173)
@@ -147,12 +147,12 @@
iter.remove();
break;
}
- else if (identity.hasRole(role.getName()))
- {
- iter.remove();
- break;
- }
}
+ else if (identity.hasRole(role.getName()))
+ {
+ iter.remove();
+ break;
+ }
}
}
}
16 years, 6 months
Seam SVN: r8172 - trunk/examples.
by seam-commits@lists.jboss.org
Author: norman.richards(a)jboss.com
Date: 2008-05-12 18:24:18 -0400 (Mon, 12 May 2008)
New Revision: 8172
Modified:
trunk/examples/build.xml
Log:
JBSEAM-2981
Modified: trunk/examples/build.xml
===================================================================
--- trunk/examples/build.xml 2008-05-12 20:59:49 UTC (rev 8171)
+++ trunk/examples/build.xml 2008-05-12 22:24:18 UTC (rev 8172)
@@ -476,6 +476,7 @@
<exclude name="jboss-seam-wicket.jar" />
<exclude name="interop/**/*" />
<exclude name="gen/**/*" />
+ <exclude name="src/**/*" />
</fileset>
<path path="${eejb.conf.dir}" />
<path refid="test.classpath.extras" />
16 years, 6 months
Seam SVN: r8171 - trunk/src/main/org/jboss/seam and 1 other directory.
by seam-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2008-05-12 16:59:49 -0400 (Mon, 12 May 2008)
New Revision: 8171
Modified:
branches/Seam_2_0/src/main/org/jboss/seam/Component.java
trunk/src/main/org/jboss/seam/Component.java
Log:
JBSEAM-2971, thanks to Dan Allen
Modified: branches/Seam_2_0/src/main/org/jboss/seam/Component.java
===================================================================
--- branches/Seam_2_0/src/main/org/jboss/seam/Component.java 2008-05-12 19:30:19 UTC (rev 8170)
+++ branches/Seam_2_0/src/main/org/jboss/seam/Component.java 2008-05-12 20:59:49 UTC (rev 8171)
@@ -464,7 +464,10 @@
}*/
String propertyName = key.substring( name.length()+1, key.length() );
- Method setterMethod = Reflections.getSetterMethod(getBeanClass(), propertyName);
+ Method setterMethod = null;
+ try {
+ setterMethod = Reflections.getSetterMethod(getBeanClass(), propertyName);
+ } catch (IllegalArgumentException e) {}
if (setterMethod!=null)
{
if ( !setterMethod.isAccessible() ) setterMethod.setAccessible(true);
Modified: trunk/src/main/org/jboss/seam/Component.java
===================================================================
--- trunk/src/main/org/jboss/seam/Component.java 2008-05-12 19:30:19 UTC (rev 8170)
+++ trunk/src/main/org/jboss/seam/Component.java 2008-05-12 20:59:49 UTC (rev 8171)
@@ -479,7 +479,10 @@
}*/
String propertyName = key.substring( name.length()+1, key.length() );
- Method setterMethod = Reflections.getSetterMethod(getBeanClass(), propertyName);
+ Method setterMethod = null;
+ try {
+ setterMethod = Reflections.getSetterMethod(getBeanClass(), propertyName);
+ } catch (IllegalArgumentException e) {}
if (setterMethod!=null)
{
if ( !setterMethod.isAccessible() ) setterMethod.setAccessible(true);
16 years, 6 months