From 2818b0384ce73e1f9bb52993b25ed85a86ff201a Mon Sep 17 00:00:00 2001
From: Marty Kraimer
-uri:ev4:nt/2014/pwd:NTScalarArray
+ev4:nt/NTScalarArray:1.0
string[] value
alarm_t alarm
int severity
@@ -302,7 +302,7 @@ A hard way to create an structure with an enumerated value field and a time stam
StructureConstPtr ntEnumHard =
fieldCreate->createFieldBuilder()->
- setId("uri:ev4:nt/2014/pwd/NTEnum")->
+ setId("ev4:nt/NTEnum:1.0")->
add("value", enum_t)->
addNestedStructure("timeStamp")->
setId("time_t")->
@@ -315,7 +315,7 @@ A hard way to create an structure with an enumerated value field and a time stam
It produces:
-uri:ev4:nt/2014/pwd/NTEnum
+ev4:nt/NTEnum:1.0
enum_t value
int index
string[] choices
@@ -332,7 +332,7 @@ fields: alarm and timeStamp:
It produces:
-uri:ev4:nt/2014/pwd:NTEnum
+ev4:nt/NTEnum
enum_t value
int index
string[] choices
@@ -372,7 +372,7 @@ union
int userTag
structure with value field being a union
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnion:1.0
union value
double doubleValue
int intValue
@@ -470,7 +470,7 @@ structure
This produces:
-uri:ev4:nt/2014/pwd:NTScalar
+ev4:nt/NTScalar:1.0
double value 100000
alarm_t alarm
int severity 0
@@ -503,7 +503,7 @@ from get 100000
This produces:
-uri:ev4:nt/2014/pwd:NTScalarArray
+ev4:nt/NTScalarArray:1.0
double[] value [0,1,2,3,4,5,6,7,8,9]
alarm_t alarm
int severity 0
@@ -524,7 +524,7 @@ via getData 0 1 2 3 4 5 6 7 8 9
This produces:
-uri:ev4:nt/2014/pwd:NTEnum
+ev4:nt/NTEnum:1.0
enum_t value
int index 0
string[] choices []
@@ -610,7 +610,7 @@ structure
This produces:
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnio:1.0
union value
time_t
long secondsPastEpoch 1000
@@ -625,7 +625,7 @@ uri:ev4:nt/2014/pwd:NTUnion
int nanoseconds 0
int userTag 0
0x60a2c8
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnio:1.0
union value
double 100000
alarm_t alarm
@@ -657,7 +657,7 @@ uri:ev4:nt/2014/pwd:NTUnion
This produces:
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnio:1.0
any value
time_t
long secondsPastEpoch 1000
@@ -672,7 +672,7 @@ uri:ev4:nt/2014/pwd:NTUnion
int nanoseconds 0
int userTag 0
0x60a2c8
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnio:1.0
any value
double 100000
alarm_t alarm
@@ -732,7 +732,7 @@ uri:ev4:nt/2014/pwd:NTUnion
This produces:
introspection
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnio:1.0
union value
double doubleValue
double[] doubleArrayValue
@@ -768,7 +768,7 @@ uri:ev4:nt/2014/pwd:NTUnion
int userTag
0x60a2c8
data
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnion:1.0
union value
(none)
alarm_t alarm
@@ -781,7 +781,7 @@ uri:ev4:nt/2014/pwd:NTUnion
int userTag 0
0x60a2c8
select valueDouble
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnion:1.0
union value
double 1.55
alarm_t alarm
@@ -795,7 +795,7 @@ uri:ev4:nt/2014/pwd:NTUnion
0x60a2c8
value = 1.55
select structValue
-uri:ev4:nt/2014/pwd:NTUnion
+ev4:nt/NTUnion:1.0
union value
structure
double doubleValue 1.65
diff --git a/src/factory/StandardField.cpp b/src/factory/StandardField.cpp
index 7a3711e..efc3086 100644
--- a/src/factory/StandardField.cpp
+++ b/src/factory/StandardField.cpp
@@ -503,28 +503,28 @@ StructureConstPtr StandardField::scalar(
ScalarType type,string const &properties)
{
ScalarConstPtr field = fieldCreate->createScalar(type); // scalar_t
- return createProperties("ev4:nt:NTScalar:1.0",field,properties);
+ return createProperties("ev4:nt/NTScalar:1.0",field,properties);
}
StructureConstPtr StandardField::regUnion(
UnionConstPtr const &field,
string const & properties)
{
- return createProperties("ev4:nt:NTUnion:1.0",field,properties);
+ return createProperties("ev4:nt/NTUnion:1.0",field,properties);
}
StructureConstPtr StandardField::variantUnion(
string const & properties)
{
UnionConstPtr field = fieldCreate->createVariantUnion();
- return createProperties("ev4:nt:NTUnion:1.0",field,properties);
+ return createProperties("ev4:nt/NTUnion:1.0",field,properties);
}
StructureConstPtr StandardField::scalarArray(
ScalarType elementType, string const &properties)
{
ScalarArrayConstPtr field = fieldCreate->createScalarArray(elementType); // scalar_t[]
- return createProperties("ev4:nt:NTScalarArray:1.0",field,properties);
+ return createProperties("ev4:nt/NTScalarArray:1.0",field,properties);
}
@@ -533,7 +533,7 @@ StructureConstPtr StandardField::structureArray(
{
StructureArrayConstPtr field = fieldCreate->createStructureArray(
structure);
- return createProperties("ev4:nt:NTStructureArray:1.0",field,properties);
+ return createProperties("ev4:nt/NTStructureArray:1.0",field,properties);
}
StructureConstPtr StandardField::unionArray(
@@ -541,7 +541,7 @@ StructureConstPtr StandardField::unionArray(
{
UnionArrayConstPtr field = fieldCreate->createUnionArray(
punion);
- return createProperties("ev4:nt:NTUnionArray:1.0",field,properties);
+ return createProperties("ev4:nt/NTUnionArray:1.0",field,properties);
}
StructureConstPtr StandardField::enumerated()
@@ -560,7 +560,7 @@ StructureConstPtr StandardField::enumerated()
StructureConstPtr StandardField::enumerated(string const &properties)
{
StructureConstPtr field = enumerated(); // enum_t
- return createProperties("ev4:nt:NTEnum:1.0",field,properties);
+ return createProperties("ev4:nt/NTEnum:1.0",field,properties);
}
StructureConstPtr StandardField::alarm()
diff --git a/src/pv/standardField.h b/src/pv/standardField.h
index a746234..f0dbf90 100644
--- a/src/pv/standardField.h
+++ b/src/pv/standardField.h
@@ -122,7 +122,7 @@ public:
*/
StructureConstPtr enumerated();
/** Create a structure that has an enumerated structure value field
- * The id for the structure is "ev4:nt:NTEnum:1.0".
+ * The id for the structure is "ev4:nt/NTEnum:1.0".
* @param properties A comma separated list of properties.
* This is some combination of "alarm,timeStamp,display,control,valueAlarm".
* @return The const shared pointer to the structure.
diff --git a/src/pv/standardPVField.h b/src/pv/standardPVField.h
index e267c17..5b35afe 100644
--- a/src/pv/standardPVField.h
+++ b/src/pv/standardPVField.h
@@ -84,7 +84,7 @@ public:
PVStructurePtr enumerated(StringArray const &choices);
/**
* Create a structure that has an enumerated structure value field.
- * The id for the structure is "ev4:nt:NTEnum:1.0".
+ * The id for the structure is "ev4:nt/NTEnum:1.0".
* @param choices This is a StringArray of choices.
* @param properties A comma separated list of properties.
* @return The const shared pointer to the structure.
From 6127763302b93d9afe6062654d6d4ed4a2b39256 Mon Sep 17 00:00:00 2001
From: Marty Kraimer
Date: Tue, 30 Sep 2014 16:59:37 -0400
Subject: [PATCH 03/15] Added tag 4.0.0 for changeset 1348c22b1258
---
.hgtags | 1 +
1 file changed, 1 insertion(+)
diff --git a/.hgtags b/.hgtags
index 1c3718d..145b55d 100644
--- a/.hgtags
+++ b/.hgtags
@@ -11,3 +11,4 @@ d70c5ad29163306f50979a95b5aebbe9a93cfe76 2.0-BETA
58092712d092ee521d1e1c8fa596a67f7d113ee9 3.0.2
40b681ffc5cd609320e3f8ffc8eb6aa3bfdfbf19 before_merge_changesAfter3_0_2
260f35b9c6cad113f242c83c89be9cdac802f610 3.1.0
+1348c22b125861ecb9da95b23f20314b167ee155 4.0.0
From 3e645f3c791327d168221dab0cf9f38f92533662 Mon Sep 17 00:00:00 2001
From: dhickin
Date: Fri, 3 Oct 2014 15:24:20 +0100
Subject: [PATCH 04/15] Corrected spelling in pvDataCPP.html.
---
documentation/pvDataCPP.html | 186 +++++++++++++++++------------------
1 file changed, 93 insertions(+), 93 deletions(-)
diff --git a/documentation/pvDataCPP.html b/documentation/pvDataCPP.html
index c872b15..fba8398 100644
--- a/documentation/pvDataCPP.html
+++ b/documentation/pvDataCPP.html
@@ -68,7 +68,7 @@ license.
EPICS Version 4 provides efficient
storage, access, and communication, of memory resident structured data.
-pvData is the storage compoment.
+pvData is the storage component.
pvDataCPP is the C++ implementation of pvData.
It is one part of the set of related products in the EPICS
V4 control system programming environment:
@@ -97,7 +97,7 @@ TODO.md describes things to do before the next release.
pvData is one of a set of related projects. It describes and implements
data that the other projects support. Thus it is not useful by itself but
understanding pvData is required in order to understand the other projects. The
-reader should also become familar with project pvAccess, which is
+reader should also become familiar with project pvAccess, which is
located via the same sourceforge site as this project.
The Java and C++ implementation of pvData implement the same data model but
@@ -107,7 +107,7 @@ differ in implementation because of the differences between Java and C++.
first two chapters:
- Introduction
- - A brief descripton of pvData.
+ - A brief description of pvData.
- PVData Meta Language
- A language used to describe data.
@@ -172,11 +172,11 @@ StandardPVFieldPtr standardPVField = getStandardPVField();
This creates instances of data objects.
standardField
- This provides support for introspection obects for standard fields,
+ This provides support for introspection objects for standard fields,
Standard fields are alarm, timeStamp, display, enumerated structure, and value alarm.
standardPVField
- This provides support for data obects for standard fields,
+ This provides support for data objects for standard fields,
@@ -245,7 +245,7 @@ structure
int nanoseconds
int userTag
-hardway
+hard way
structure
double value
time_t timeStamp
@@ -639,7 +639,7 @@ ev4:nt/NTUnio:1.0
0x60a2c8
-varient union example
+variant union example
PVStructurePtr pvStructure = pvDataCreate->createPVStructure(
standardField->variantUnion("alarm,timeStamp"));
@@ -821,10 +821,10 @@ value = 1.65
// ...
}}
-Memory Managemment
+Memory Management
Many pvDataCPP introspection and data objects are designed to be shared. They are
-made availiable via std::tr1::shared_ptr.
+made available via std::tr1::shared_ptr.
The following naming convention is used
in typedefs:
NOTES:
This provides C/C++ definitions for the pvData primitive types: boolean, -byte, short, int, long, ubyte,ushort, uint,u long,float, double, and string. +byte, short, int, long, ubyte, ushort, uint, ulong, float, double, and string. Because pvData is network data, the C++ implementation must implement the proper semantics for the primitive types.
@@ -938,7 +938,7 @@ typedef std::vector<std::string>::const_iterator StringArray_const_iterato in a future implementation they should be changes via "#ifdef" preprocessor statements.The primary purpose for pvData is to support network access to structured data. pvAccess transports top level pvStructures. In addition a pvAccess server holds a set of pvnames, where each name is a unique name in the local network. -This is also refered to as the channel name. +This is also referred to as the channel name.
-Given a pvname , it is possible to introspect the types of the associated data +
Given a pvname, it is possible to introspect the types of the associated data access to data. The reflection and data interfaces are separate because the data may not be available. For example when a pvAccess client connects to a pvname, the client library can obtain the reflection information without obtaining any @@ -1035,8 +1035,8 @@ std::ostream& operator<<(std::ostream& o, const ScalarType& sc structure introspection interface.
@@ -1519,13 +1519,13 @@ description of the methods.
These are typedefs for Array and Ptr for the various pvData class -definitions, i.e. typdefs for "std::vector" and "std::tr1::shared_ptr".
+definitions, i.e. typedefs for "std::vector" and "std::tr1::shared_ptr".
class PVField;
class PVScalar;
@@ -1830,7 +1830,7 @@ std::ostream& operator<<(std::ostream& o, const PVField& f);
name will be an empty string.
A PVUnion has a single subfield. The Union introspection interface determines the possible field types for the subfield. -If it is a varient union then any type is allowed and the +If it is a variant union then any type is allowed and the subfield name is normally any. -If it is not a varient union that the Union interface determines +If it is not a variant union that the Union interface determines the possible field types and names.
class PVUnion : public PVField
@@ -2069,7 +2069,7 @@ public:
PVScalarArray is the base class for scalar array data. PVValueArray is a -templete for the various scalar array data classes. There is a class for each +template for the various scalar array data classes. There is a class for each possible scalar type, i. e. PVBooleanArray, ..., PVStringArray.
class PVScalarArray : public PVArray {
@@ -2179,13 +2179,13 @@ public:
For example the following top level structure has a single value field. The value field has properties alarm, timeStamp, and display.
@@ -2882,7 +2882,7 @@ general purpose clients. characteristics for the value field.Two header files are provided for manipulating time stamps:
@@ -3015,7 +3015,7 @@ public:where
where
where
Note that directory testApp/misc has test code for all the classes in misc. @@ -3815,7 +3815,7 @@ public:
bool locked;-and improves efficency by checking the local variable before calling the +and improves efficiency by checking the local variable before calling the mutex methods. This is not thread safe if any methods are called by a thread other than the thread that created the Lock. @@ -4038,8 +4038,8 @@ public:
If a class privately extends this class then the compiler can not create any -of the following: default constructor, default copy constructror, or default -assignment contructor.
+of the following: default constructor, default copy constructor, or default +assignment constructor./* This is based on Item 6 of
* Effective C++, Third Edition, Scott Meyers
*/
@@ -4049,7 +4049,7 @@ assignment contructor.
NoDefaultMethods(){};
~NoDefaultMethods(){}
private:
- // do not implment
+ // do not implement
NoDefaultMethods(const NoDefaultMethods&);
NoDefaultMethods & operator=(const NoDefaultMethods &);
};
@@ -4058,7 +4058,7 @@ assignment contructor.
This provides a bounded queue. When the queue is full the user code is expected to keep using the current element until a new -free element becomes avalable.
+free element becomes available.template <typename T> class Queue @@ -4089,7 +4089,7 @@ public:
This is a helper class for serialization, which is required for sending and -receiving pvData over the nerwork.
+receiving pvData over the network.class SerializeHelper : public NoDefaultMethods {
public:
static void writeSize(int s, ByteBuffer* buffer,
@@ -4278,7 +4278,7 @@ public:
sharedVector.h
-shared_vector is a holder for a contigious piece of memory.
+shared_vector is a holder for a contiguous piece of memory.
Data is shared, but offset and length are not.
This allows one vector to have access to only a subset of a piece of memory.
@@ -4318,7 +4318,7 @@ shared_vector differs from std::vector as follows:
shared_vector has additional constructors from raw pointers and shared_ptr s.
The copy constructor and assignment operator allow implicit castings
from type 'shared_vector<T>' to 'shared_vector<const T>>'.
- To faciliate safe modification the methods unique() and make_unique() are provided
+ To facilitate safe modification the methods unique() and make_unique() are provided
The slice() method selects a sub-set of the shared_vector.
The low level accessors dataPtr(), dataOffset(), dataCount(), and dataTotal().
@@ -4400,7 +4400,7 @@ public:
where
shared_vector(size_t c);
@@ -4425,7 +4425,7 @@ shared_vector(size_t c);
is the sole owner of the data array.
Runnable must be implement by code that wants to be run via a thread. It has one virtual method: run. Run is the code that is run as a thread. When run -compeletes it can not be restarted. If code wants to delete a thread then it +completes it can not be restarted. If code wants to delete a thread then it MUST arrange that the run returns before the thread can be deleted. An exception is thrown if run remains active when delete is called.
@@ -4588,7 +4588,7 @@ exception is thrown if run remains active when delete is called.TimeFunction is a facility that measures the average number of seconds a function call requires. When timeCall is called, it calls function in a loop. It starts with a loop of one iteration. If the total elapsed time is less then -.1 seconds it increases the number of iterrations by a factor of 10. It keeps +.1 seconds it increases the number of iterations by a factor of 10. It keeps repeating until the elapsed time is greater than .1 seconds. It returns the average number of seconds per call.
class TimeFunctionRequester; @@ -4676,9 +4676,9 @@ public:
Timer has the methods:
NOTE:pvRequest.html must be updated since it is based on an earlier version of pvCopy that -had knowlege of PVRecord. The C++ version was implemented in pvDatabaseCPP +had knowledge of PVRecord. The C++ version was implemented in pvDatabaseCPP and the Java version on pvIOCJava. At present only the C++ version of the new API for pvCopy is implemented.
@@ -4776,13 +4776,13 @@ At present only the C++ version of the new API for pvCopy is implemented. Given an ascii string createRequest creates a PVStructure that provides a pvData representation of the information from the ascii string. It is this structure that can be passed to the channel create methods.This consists of two components:
NOTE: Should the method causeMonitor have arguments pvField and pvTop -be defined so that they can not be modfied. -This would be posssible if the following was defined: +be defined so that they can not be modified. +This would be possible if the following was defined:
typedef std::tr1::shared_ptr<const PVField> PVFieldConstPtr;
typedef std::tr1::shared_ptr<const PVStructure> PVStructureConstPtr;
@@ -5232,7 +5232,7 @@ virtual bool causeMonitor(
PVStructureConstPtr const &pvTop,
MonitorElementPtr const &monitorElement) = 0;
-But just adding these definitions is not sufficent.
+But just adding these definitions is not sufficient.
In addition all methods defined in pvDataCPP must be checked.
In particular many of the methods in Convert must have
their arguments modified.
@@ -5258,15 +5258,15 @@ structure powerSupply
structure power
double value
structure alarm
- struvture display
+ structure display
structure voltage
double value
structure alarm
- struvture display
+ structure display
structure current
double value
structure alarm
- struvture display
+ structure display
A pvAccess client wants to create a monitor on the powerSupply as follows: The client wants a top level structure that looks like: @@ -5282,7 +5282,7 @@ structure powerSupply double value In addition the client wants monitors to occur only when one of the monitored -fields changes value but not just because a put occured. +fields changes value but not just because a put occurred. Also if only the timeStamp changes value then that should not cause a monitor.
The example monitor plugin implements the semantics the
@@ -5291,7 +5291,7 @@ client wants. It can be attached to any field via the following options:
[plugin=onChange,raiseMonitor=value]
This plugin will trigger a monitor for the field only if the field changes
-value. In addition value equals false means do not raise a monotor
+value. In addition value equals false means do not raise a monitor
for changes to this field.
But if a change to another field does cause a monitor the change to this field
will be passed to the client.
From 3692f4fb3c6c5230d962204f2f0ee9aa71ffde7c Mon Sep 17 00:00:00 2001
From: dhickin The interface for an array of unions is: An enumerated structure is a structure with two sub-fields:
+ An enumerated structure is a structure with two subfields:
index, which is an int, and choices, which is an array of string.
The following examples create a structure which has a field names value, which
is an enumerated structure and additional fields.
@@ -2481,10 +2481,10 @@ PVDoublePtr pvDouble = getPVDataCreate()->createPVScalar<PVDouble>();
PVUnionArray
-template&ly;>
-class epicsShareClass PVValueArray&ly;PVUnionPtr> : public detail::PVVectorStorage&ly;PVUnionPtr,PVArray>
+template<>
+class epicsShareClass PVValueArray<PVUnionPtr> : public detail::PVVectorStorage<PVUnionPtr,PVArray>
{
- typedef detail::PVVectorStorage&ly;PVUnionPtr,PVArray> base_t;
+ typedef detail::PVVectorStorage<PVUnionPtr,PVArray> base_t;
public:
POINTER_DEFINITIONS(PVUnionArray);
typedef PVUnionPtr value_type;
@@ -2378,8 +2378,8 @@ public:
typedef const PVUnionArray& const_reference;
//TODO: full namespace can be removed along with local typedef 'shared_vector'
- typedef ::epics::pvData::shared_vector&ly;PVUnionPtr> svector;
- typedef ::epics::pvData::shared_vector&ly;const PVUnionPtr> const_svector;
+ typedef ::epics::pvData::shared_vector<PVUnionPtr> svector;
+ typedef ::epics::pvData::shared_vector<const PVUnionPtr> const_svector;
virtual ~PVValueArray() {}
virtual ArrayConstPtr getArray() const;
From e980823294a8c796b277236be457be810ff98fe2 Mon Sep 17 00:00:00 2001
From: dhickin
This produces:
-ev4:nt/NTUnio:1.0
+ev4:nt/NTUnion:1.0
any value
time_t
long secondsPastEpoch 1000
@@ -672,7 +672,7 @@ ev4:nt/NTUnio:1.0
int nanoseconds 0
int userTag 0
0x60a2c8
-ev4:nt/NTUnio:1.0
+ev4:nt/NTUnion:1.0
any value
double 100000
alarm_t alarm
@@ -732,7 +732,7 @@ ev4:nt/NTUnio:1.0
This produces:
introspection
-ev4:nt/NTUnio:1.0
+ev4:nt/NTUnion:1.0
union value
double doubleValue
double[] doubleArrayValue
From efbdb722e7eb31fde60374beeaff0663ed4c47e7 Mon Sep 17 00:00:00 2001
From: dhickin
enumerated structure
-
NOTE:pvRequest.html must be updated since it is based on an earlier version of pvCopy that -had knowlege of PVRecord. The C++ version was implemented in pvDatabaseCPP +had knowledge of PVRecord. The C++ version was implemented in pvDatabaseCPP and the Java version on pvIOCJava. At present only the C++ version of the new API for pvCopy is implemented.
@@ -65,13 +65,13 @@ At present only the C++ version of the new API for pvCopy is implemented. Given an ascii string createRequest creates a PVStructure that provides a pvData representation of the information from the ascii string. It is this structure that can be passed to the channel create methods.This consists of two components:
NOTE: Should the method causeMonitor have arguments pvField and pvTop -be defined so that they can not be modfied. -This would be posssible if the following was defined: +be defined so that they can not be modified. +This would be possible if the following was defined:
typedef std::tr1::shared_ptr<const PVField> PVFieldConstPtr;
typedef std::tr1::shared_ptr<const PVStructure> PVStructureConstPtr;
@@ -519,7 +519,7 @@ virtual bool causeMonitor(
PVStructureConstPtr const &pvTop,
MonitorElementPtr const &monitorElement) = 0;
-But just adding these definitions is not sufficent.
+But just adding these definitions is not sufficient.
In addition all methods defined in pvDataCPP must be checked.
In particular many of the methods in Convert must have
their arguments modified.
@@ -545,15 +545,15 @@ structure powerSupply
structure power
double value
structure alarm
- struvture display
+ structure display
structure voltage
double value
structure alarm
- struvture display
+ structure display
structure current
double value
structure alarm
- struvture display
+ structure display
A pvAccess client wants to create a monitor on the powerSupply as follows: The client wants a top level structure that looks like: @@ -578,7 +578,7 @@ client wants. It can be attached to any field via the following options: [plugin=onChange,raiseMonitor=value] This plugin will trigger a monitor for the field only if the field changes -value. In addition value equals false means do not raise a monotor +value. In addition value equals false means do not raise a monitor for changes to this field. But if a change to another field does cause a monitor the change to this field will be passed to the client. diff --git a/documentation/pvArray.html b/documentation/pvArray.html index 9f7c031..9de1fb7 100644 --- a/documentation/pvArray.html +++ b/documentation/pvArray.html @@ -68,7 +68,7 @@ license.
Since the last version of this document the following changes have -been made to the proposed interface definitionsi for PVValueArray:
+been made to the proposed interface definitions for PVValueArray:pvData (Process Variable Data) defines and implements an efficent way to store, access, and communicate memory resident data structures.This statement appears as the first sentence of pvDataJava.html. -A few sentances later the document makes clear that communication +A few sentences later the document makes clear that communication includes network communication. Thus pvData provides an interface for network accessible structured data. If the interfaces for C++ and Java are similar then @@ -160,7 +160,7 @@ PVScalar and extensions, PVArray and extensions. PVStructureArray is not discussed.
This is the base for all the PVXXX iterfaces. +
This is the base for all the PVXXX interfaces. It provides basic methods for allowing network transfer and for traversing structured data. The pvDataJava and pvDataCPP definitions are similar. @@ -306,7 +306,7 @@ methods:
The proposed version is like the pvDataCPP version except for dumpValue -and the stream interators.
+and the stream iterators.
interface PVScalar extends PVField {
@@ -1161,7 +1161,7 @@ typedef std::tr1::shared_ptr<PVStringArray> PVStringArrayPtr;
The comparison is always with std::vector. In addition it shows what is defined by by std::vector but not by shared_vector.
Someone who already understand the C++ STL can understand shared_vector -by just looking at the brief summarys. +by just looking at the brief summaries. For others the brief summary is followed by tutorial information.
Brief Summary
C c(); Default constructor; c is empty.
-C c(n); c is initialized with n elementis with the value value_type{};
+C c(n); c is initialized with n elements with the value value_type{};
offset is 0; size is n;
C c(n,e); Initialize c with n copies of e.
offset is 0; size is n;
@@ -1373,7 +1373,7 @@ shared_vector(size_t n, value_type e);
The first three constructors all create a new shared_vector
by also creating a new raw array,
The difference is the size of the array, i.e. how many elements it contains,
-and how the elements are initalized.
+and how the elements are initialized.
NOTE EXISTING: Why did emptyArray disply the above. +
NOTE EXISTING: Why did emptyArray display the above. Should it be "emptyArray {0} []"?
shared_vector supports both iterators and reverse iterators as defined by the STL. For both constant iterators are also defined. -A constant iterator does not allow an array elemnent to be modified.
+A constant iterator does not allow an array element to be modified.The following is an example of a constant iterator.
int32 sum = 0; @@ -1705,7 +1705,7 @@ produces:void make_unique() Make caller the only user of std::tr1::shared_ptr bool unique() Is the caller the only user of std::tr1::shared_ptr -void slice(offset,length) Change window offset andsize +void slice(offset,length) Change window offset and size // following should only be used for debugging const std::tr1::shared_ptr<E>& diff --git a/documentation/pvDataDiscussion.html b/documentation/pvDataDiscussion.html index 5f9b13b..d059dd7 100644 --- a/documentation/pvDataDiscussion.html +++ b/documentation/pvDataDiscussion.html @@ -70,11 +70,11 @@ license. more and more member functions. These member functions have nothing to do with the primary primary purpose for pvData: -This produces:pvData (Process Variable Data) defines and implements an efficent +pvData (Process Variable Data) defines and implements an efficient way to store, access, and communicate memory resident data structures.This statement appears as the first sentence of pvDataJava.html. -A few sentances later the document makes it clear that communication -includes efficent network communication. +A few sentences later the document makes it clear that communication +includes efficient network communication. Thus pvData provides an interface for network accessible structured data. The problem of adding member functions that have nothing to do with the primary purpose started with the Java API. @@ -82,7 +82,7 @@ It already had extra methods that solved problems that should have had a differe This document removes the extra methods so that when new problems arise in the future the solution will not involve adding new member functions to the introspection and data API. -The introspection and data API for pvData should only encapuslate methods that support the primary purpose +
The introspection and data API for pvData should only encapsulate methods that support the primary purpose stated above. The interfaces for C++ and Java should be similar so that someone who understands the interface in one of the languages @@ -308,7 +308,7 @@ public interface PVDataCreate { The existing Java implementation of toString displayed all elements. For large arrays this is not desirable. The new methods provide a way for the client to limit the number of elements. -The default might be set to something like display up to 10 elements with 5 fron the beginning and 5 from the end.
+The default might be set to something like display up to 10 elements with 5 from the beginning and 5 from the end.For C++ this can be a replacement for dumpValue.
PVBooleanArray, ..., PVStructureArray
The old get and put are replaced by two new and simpler methods: From 188b94ce19ec47de7907cf15b3545c745ec825c8 Mon Sep 17 00:00:00 2001 From: dhickin
Date: Sat, 4 Oct 2014 02:45:53 +0100 Subject: [PATCH 09/15] Corrected spelling of synchrotron in licence. --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 1f555ec..3f43ff2 100644 --- a/LICENSE +++ b/LICENSE @@ -2,7 +2,7 @@ Copyright (c) 2008 Martin R. Kraimer Copyright (c) 2006 The University of Chicago, as Operator of Argonne National Laboratory. -Copyright (c) 2006 Deutsches Elektronen-Synchroton, +Copyright (c) 2006 Deutsches Elektronen-Synchrotron, Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. Copyright (c) 2007 Control System Laboratory, (COSYLAB) Ljubljana Slovenia From b1d5f7d7e570160224ac8888a0eaf00be1752392 Mon Sep 17 00:00:00 2001 From: dhickin Date: Tue, 7 Oct 2014 15:32:26 +0100 Subject: [PATCH 10/15] Corrected NTUnio to NTUnion --- documentation/pvDataCPP.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/pvDataCPP.html b/documentation/pvDataCPP.html index f081a8d..d870733 100644 --- a/documentation/pvDataCPP.html +++ b/documentation/pvDataCPP.html @@ -610,7 +610,7 @@ structure -ev4:nt/NTUnio:1.0 +ev4:nt/NTUnion:1.0 union value time_t long secondsPastEpoch 1000 @@ -625,7 +625,7 @@ ev4:nt/NTUnio:1.0 int nanoseconds 0 int userTag 0 0x60a2c8 -ev4:nt/NTUnio:1.0 +ev4:nt/NTUnion:1.0 union value double 100000 alarm_t alarm From 943ea633a42cb44307bfee644c759b66d082d8aa Mon Sep 17 00:00:00 2001 From: Marty KraimerDate: Wed, 8 Oct 2014 14:48:30 -0400 Subject: [PATCH 11/15] more work on pvDataCPP.html; minor changes to examples --- documentation/examples.zip | Bin 102821 -> 9203 bytes documentation/pvDataCPP.html | 278 +++++++++++++++++++++++------------ 2 files changed, 182 insertions(+), 96 deletions(-) diff --git a/documentation/examples.zip b/documentation/examples.zip index 1f27dd599e79fd60f7e505a290db81cddc9bb217..dcefb77277909066077492d33a4cdcc683869287 100644 GIT binary patch delta 4171 zcmZWsXH-+&(#|0eAQY)e=v_d%fCQ8xA`k&7Q9z 0iryB8SABV7vW}5SlF62t+#pB*CVJ5Lm!idb2 zuj-{wd~ltAnr4aXZZc4*juJ^7+7MB-tgPnGk7ZQ&++JDlMi*aU=SUaeiEyM)IQCy( z#BdqCJNON0lGKpVkfF@v<>#r(@dFo@G7Y3$_Azuy5)2O>n4ekki!9$DVc}r|^>559 zNH93H8iszBzQ1nTP2r;j#?6tY7QuL=wB+yQs53w f(bCf-mKtWw9ve}Ibv|barBm$5RXRr6Y%Gu z2a#GS<-Wd8a|1P;u2!QvKV|uW<)9_a_QHze-O0%&-U&{L3ov^{xu@q8y5JpJ5hi<= z1@ynx*VoAX3E?I8r(1GzVaO&+8>Ql> mE?v=S>OOJLQ}uUxmMpmMgc6Om*qxHJTbem~raMyN66w&~m` zc1Ff^DY8GJkK^*= sd%`sfsh7aG%V<_%5RC z`yDr#wdSjrYB1Ulkl#m1_)I1C?(*<(i@ZYTtkb5 a13! zkZWIufneIpOeGCZPfw-ycOnYo_nD=yrE1fsQt}#Zt-?5<{hnK3y=?Jd)ucIgoAONQ z{YyeXTEsaoHAer$A#&H7 >4 BZ)!}8WcEWVZ)CQdL^ ziI$7j{k&5|WhEoSkVbU{Az)|jR)8|Nz*tm(T*wQ)$z!23$C4#ZTlrw3CZ`s)9j-P6 zxd7?R0Y-(|W$wTI5_tW?=oCV$1jvQuZ^B1_ 6W`XC}ZPVuN zYO&fu3w!zQ6<9-=R&V2!%(SfNR(oTh`|nW?AC9jGubdgD@vjpGHKt(!S*qC?J=XOP zZi#ys#^WhIed*4;vWrPezHXCWwcMaRtu*5c4=T8@K$WuDB}yX~oN2!-h}XKZv|_Gj zGd^g)LuXX&iMMcM{DxjCU=y%rVt7AR)Vv1r8GUhq+PSUtostqA*_eqV<$(Xe2mh$U zYIc?DdU@!iYVO_C#h@J&t~7J-YliKsWNcmiIIcUuIY8~pm=&gh?ALM6@`}q)ZI+4q z#Pd86Pj`OwzM pwFCJ${}Y^l=n{W9bw(3wIMAXcLd>k zoxY7ihl#%U789l?orKGXvbI#iI$UD(M@*i40W2|?sOnods86OF!)%-D;xSTOCw7PJ zTeh&f(X~P%`%cUnd%NA(bhwhD@xawoj;bx(2I^Wt##^4Ws+AG%0nhkRyZS};opUs7 zA&ra0`o{i=3nHAGMYD}QZ??Z_7WWV3_Z2-cM5+Jj+5uy#O#4Qt-!4vm*DSoDIH4mG zg7(o%ux0z!k<>CW8QZDW3%t?E;&i>csV5L))j#4YiK@^Y>lwZ+pjD~#qZj*#arje} z9F1grRrLNhT*B`wQK{N>7051SZvQUq2HXuLE*dh%hy|DgnXHobX2>esC23W3WrDwK z5Xt?^?;ne~ubQ2YNrTwdOGOp2FS4KuQWrFDk|)lR6jmu*!(7OEnLDJ!H+4*^6MA$E zA~g5|S5LbQ;lLl*p`kr#fseHvn~F(6AWOn=0B{L2cG7MpPVB$>$qyr @ zQUejs OeoG+*urId6r zmu_O6;_1yAlt`;A6dWtfSVq%Mc6B3EyST*q%H}sSz#w-=psO1pVq6%jtL;+bmMPru z=#%}lY1 2 zg$;R*elUk%ZZ{+xMJG9reWiOXdhpdQ;JL~yVD)Q6$g&jU7wT%9Nx2m=ZR5z9SxL*h zH<4p$mHMng4%aaR8iFgA7jaVizS|8vvd1}jKn|JV8FIf`tGI3)4++a2({NE!Ko4sP z-5h8FqO7Q|H;UM2^^|oOLT iHo@9wyVU%1hpL$szxo@; z*QFK6n}wL8(wTP^)GMBD^tH#E5dzvY13ikui7my9q>L_Wx4re9Y#VyN!qA=_iI^+m z%t}$(xuy9RSy SyXFQAv<-rK();*{F($%<^% zFYh%mZ4A&Hn^6|qfzQ_wf*d|QvM1%T>ys`G(vyl>pOPnQuFF$q+_LD0YwMcM95yQ@ z7#rsKsV>4r4tN{;6bt FFhcQsK(o!cZbs}e|x%5L0`C>EsM3QPNSmsYp9l`FAfxviV!QNq8$u@7DD{Qr% zpLn_Lr6ioDNO)hZ&JZ!rSm2$QtL3R1)WfMuQb?$(;EPN&X{1a|VF;~i8cysxpI7R7 z?tTONPCy&=E9daSsetn {hUBqGvD#03DO(}&b{E}9bX3q` z^N=*FhTG>L`or;qgIk{unvF0=`(J9NyuIgH=hcU+Rk;g`X-ginsg&qzzNGX*>mO78 zo%WedW_=1!4CSvI_tk%jKO_NxQW-!X8W1}O?PcNMWRG^0a6>ydoetae7|M3T`V;$~ z>+il}vLuuLqS2l+z8@-+ZIgXX+x9`8md!519Xyz`l2mSkT<7R8nud}NY*X;~QWDqo zIp5Ns@ZA={T$kj`G|7a=l_4gtcr~OOZnW8JwdzdmH|rd+O1x7p=6i7+!k&KfjTwph z{&~!=Mwg|12J9ij!s|z$f+9ie%n=r4 rl?=5cXiwo zx^QkPUPMTPUO?&?s5PFK@mXF~;m)uFFB|h~tkMhGj*Rs*I?#!wOh#LCt7b0Dv1CrN zg#4)x7+A{HO <8%Q}p%N-+n#d_T|;X%F5KoT#YoSY{vvHLxqG?66rU#Q_DIZ z$v+-pR_=>!>kg+{&Nw&^AQYZj#V-mm*t%$Dmu*DHR OFqKA)?lZATugYGqIQcw+U(%X>nBn1Fk$G~JP3Hs~_fSey$vTP&;GzB5*ml}DMz zN?{YA3z%4Hnsl+i_8m@mSeEPrndr6jJTR&s^!wA~-Gh#S*kM99n*7(r>y*E*MjmzO z7u-vo-c48g)2sNAAej;>xv+CMOjm%k^{9(NuJ}#6x7rP*k9u&v`Xa8pcVV4Nk8l(M zTsiB|@K7NBR1Xq9hXSIce>EThcnYwcVcbsvxibtK1+Z1SKLxx2f?hblPoe=Kltlo{ z_+H3)LPj{CLLx?f3J~_fflGwAFaSy*iv(Cns3{0Mk$@S{ODK&1&f}j!sR)^oC*kUp zXW{#ifHq0fe;m{^K;mrU*k=GM>n=6u|EuRrs*;^aRl;97-2WD;AP@}1@>g<$fD?Ng zq(nmqj|R9&|7zFMctX2Bz;N!LA<2v&LQWi@!1J#Wg%Jee`d6k7CQu?45Fq_KwVY|6@_1`4scl zVw(PsMH%WJT|KuB@vlvMBc$`cHnj{;N#OrJ>W2=-`9I Ex%+cQ7 z(Scb*9S#igZ|ZndILz1>_;?i !*;zZddog-( za~g57|7WuQ=o1g^pWborinrbW7H|8z=>CZU{!5g?S6g!nYdiD*-HO^jU+V6K00s_q z2nh!EFQJA!G{~TNsW7UjFfuBmA idd(R4NrS3#)jkARJmM$Of8(k8sS`5cFD#gF?*GyeaGw8$92Wi=g6W^( z{ofcPff0h4dwsQcvNLyOHnIK>l>Zs+zXymR^6%L^Djxqoarpl=?!TjJ_IL8O|GEWu zz&~Xz_wz$@xxv7a6T!e}{>N}@2R9c-S0{5*H-)d(4*vrCpN^{kJJ@A >%ot8 3fXL?#)5kDmB9H5)?r;ILqZ z5YRf~SP?MO3=?ia809jIOC50)_gHP!FGWu|CM}?H5Kx}}o4cjtw>(?cVgFT)*BL+L z_)5TyM@}27?j*=u{q-bj1O1QOB(r(OPZu_5??=pR#Dv}pbC0?KhpC9l{M8e*oAaWZ zZ_-@vDyJDC&nA6^5NBGF<|M3i2H`GLmVkPa(r>rsQd{b|{eAi2)Qt0o0!!BPIAxD{ zgPYVgbSd&>e&uZ*u-9GciQA|BJ)Pad<=~ bnH~4W$4!V_$OUf)XwN7*q9uQUEC0MHrn=6=drQo* z2#b(zx$5|>{0TZ_{PqIao~Bmn=&auo9C;EXmn6Y$Dsg T2_pt-lIR!)PBAEF3 zaTWK3 1h-3Mi&;)YI-UMSR(SRv0OHq zZg%5-qaL_?&_(RjHQoI=dSBS-rqW<_8Hq{4co)z4fiWOu@_9WOtck*&AUDx5`F1b5 z=I%whxwr26?OAw?n6BKnNj?Zgq^-BOZvgM{xxd*rvpkd}d|}{CfSW1Ng};M(z^IG6 zQG78w+H1#&5mZH8q4wtr7(l(~J|#pq2eP4 rRxSH)BB{h!)5+-C+Vb2BAp(<8iy`#a&T zNU8vysDl<-G6(eb%61O6GjP84d`cZd)jj8tcmFk<7;~8{1M&&LmC5-DQqc%hxOU`&plrt8;qCBWV#wgO^7syLPj}u6SYZ^1#V_pFywdoT>3;_`;2ceq@ZQ zxV2^Ys1`P35Bg?*@pTG=HPzU#zBG=GE1gJ?8Y}C(g& z@)7>1QU|;xWylEl`oJ?{?%1WpE!C>ZsrM@ )^fZ)IeBBRK!m0d z+IKEWxPGF L#TN#AeX0jFG-Z$S(m(0wP8vM4s(W)Q8s&Bk?bGL_$1V?FZxR`6p1SdC zhxYxODM#7?MWS$*ByLE236`L5trIekx;qTNj_HhCygOD+ADU0k{hj39$nN76Lohl{ zQuCmP+xnOqOG|g+#v+lj6VpCIOovtD=}- r&*o zG!bQzi}^7iyK4%Cx!fI$XZjZV1zS=L(lP3p*>m#&tvur*LeuC!`JcAEYg7~7nSEYr z|AM=wZ>aCG%M|AvHWOLcdJ<^N`LeWsIYV4;AXJ=mbbiOoUAk}NrI`=^#Jq%K@BK_G z=V~3_6+RuQZ^{r;r!@4S-W~qE% o5ho!G5+;mXntO_*>9-7{eBPFWLXWjgQFX+-x z-ZJ*(r|!?M#9ZYD2?nNlGj;((b%rADuFR!?iCbakBz8_F8d5&t<&puokcNysVoL3= zuS_AQx$k^u8o^QM&0R^1YORmF?0fVGL|mMW;!G@4ORt1WuRL|MZj8>R6>JxWHhGTh zU|y(p;KzBRJ+xZ9YjO}+H8Te{k4;1>EPon)wbeAic(jH&vcK8??EU-_z$$m``@o6= z%yCT|6`zrRA(9pJr)7t;*@B1(2r#fuT-&oyV4lE1E#7iVnxQBR41WbNQ3sHyN(L7X zr>ay_1X((RoLSm7hLw%%hj`+PUGUPd!F|llVdS0>f%=7$D`?iPRGFB{qy5p_vR}>9 zWv{+G;m6q;>M6<0mPLPGxu?QHwrc?1-1QrFh@4!>;O;FgSt0ucj63^gx|;Czk u;s(;A#=A^Un|=G!ival>cC>+FcH1}E&U1`?BkadH zF@yHau?-A}k6s#3Th|5Ene?XbBjM|f*wyC6vmjw9VAck{PWVoI)b)4=w+XChW^8QH zn&w{{>ORp-So$mAIPLMETmqPvX3PUVvT>UN^*UWh5Lr~4Yf!5cn`_YgT3r%+j1cQ; zUF8s2q?>&Z>vCOk&~1(W$#7mI;FYMC9T4YOmmmm3`pq}!HpMOsXx~VGYB;Zae-zY9 z1qh}N>LrFvE`H@J@rSMgZ g-|zmOpB|;blZlac@}amzx*{R6C^j46y=wfUv7Pe$qtPze!IjXQ;{A)^ zy(;{R5t<~r2H=}Cx?G{!w7Ul2yh{9w;k;7)qj4_b!Lvy>4Z*W%mVw%1`9OF3R{~1O zp=U2O(kyP=M~5C_nVX|gP(YYlQHMA{6;(62;a>r!`Kvx2q?!$mFDw5mc Aji^@cdL*dJcN}Jq5<>X?1U#^4{ zz(1te7s?NT5b%GRI868N`1x0@3vZ0RTGoLd28;rdAIAB&jDNKe*f-Rh?5W}a;=i_A zmYn$1kBE1O!_R+B0OGCk-z4b)#QlFwe8MP}?`+=yoJsPOj|dRbVeDU*PKaBY{SS^D zBe3Pczdmfj8^eFqw;U<954<;moPjTY749VMU(ZS~-o&Q~E0RgmzXc58Z@K?w#sSa# zCo@FOz+ZO(ltZ|`eiJa?$ZoQyIZyH}8&m@MB@Ajf?W9YB+8n*;3uB|Yaexs9^rws# zdxLZ&Z!3H40bJ6m)Tma{=s_x~Dtw**%*y)Qq?k5af0t%b{e}5@0lx5=GTZpkWKXsh zJ>q6NmVP}9%Z7N&n2HUlDE))lhA!P`&*`A11P=v@bSmGfkTtUER5NBhz8Bl{*i;D4 z_^C|aef$)e@{%2T?USjhXP{AaGaAdSFN&e6mV$C>xr((9^Oc<28%?u78|aGY2B~9N zOO%lq%XEwQ`*m?>v5nEIg~<>=LeTb+rb1~iDRSHI7LoAeBjQRLdwKR$Q)^YY{NN%S zi^GgZSG|T#f8ZrIP70ni438KR*z8_Tq^-}$2sVSJc8z7&+x3zh2cUKmG>-1u2Fp_5 zlHjZ$^Qe$oPU*Oe<88Wf<+U+_#$p6g^-Bs*+Q$n=paHpjWC9S@r}&my%Zlq1pG3bs z9&VDrJaL+>-?+K%DK(U|*p!YkV<@p`azmIkqPJ%oDs@*srf;(WRQX2nU`nffkt&z# zi3G$bO+Pu4>m{{wfb%zOXxWZ7T`y;j&Y^^J0uD-=_oCzIViJ8|wbC1^^(j~jZgZrj z$4UN$DBKq=##Phu4Gh0H+sdw`*EII9cU6&w;TI~>4yt!6s?U|G7Asu8Q3wTvIU!aF z>(w)5Lf18~zeu-ZQr34-oKx@_&Gswt^75^$|D1G7kq_iR29#^gAfL&d6K3xj7P_F& zwGO88M9_aJ( V$`v5aorlV6_+ zB86^sS|?^g*lP|iGBaDztvp}?R*?W)iVxB1wX-h2MzJl3W`g%uiMB3#=<~*7eNxX} zlD9$r%?7Y!ea$9DJM-aSMJBU6^!*F?6BK@{av=)?cOb95sldrdtyO;MWxc|*S8ztU zWtO(3tFJF|^COD-s3grX^AGaE@2L0r=lBssl+&fp)n_*F`o8{|t>g25RAOSLqj*K$ z&!QaE*L6Rl?#^aBwRd#OV0nKZ?Hc%A54hFTgP5}c#DfKeR#oxzpU2=gNAlOU_|vfW z{eWC<6L7Hv($-Q~5ekQglKf4Dn9=E@hc%}O)YR?;Ojh#hWQc(T$5HS{s@}UajN}N^ zYW7(%XOL*iwe2D>5iNvM1;R71ce{*)f*K(YFm~BL!xHBO&G^@zu$CG}kr~d(=WNZ4 zw24B3*A{RKjzEm=4c3ve!KL=O?Q-o};xvo10J69$d59F+BhDim&Eh&4%FKl${NTAS z`*7JH0->HlI#xoo(y&`e3M~m |;6G+f3_rf3H;by*mo<73zv*DwX23~q~~%wG=h z0XWoxHECzm?q#kJois1kR09Y%6^6UEcUuaINXEq}d`pqFPf0cJRV$RlSN2{@RN$~R z0k3GDrErxy*a=?(p>}bPexjF~)IxqpKt5gij9cSWI)(C8ZxMFDQBE3N`L4oE$nM@D zWMqCnWu=VuhIvC?k~H&4oZUT5LoflE0EU7e?J3D#LLUbY{AF9dPbR)*9j8(h3KHw$ z6gm=yq7)($^W@XHhJ)^*s94VAHAWKWQf47xqr}X0o;KUbG+@tLeSRryblY z1+hL5mU`^JaHdR Ho)Mnp(CY3d_hq?BT6g0?iBfgb2} zx U95Hu~^ zVm~^Ragt(FlJ2Q9I*!xzT!##P0Lo7d(K+Ui^!Ix1Xm1ky-rvd$hu3@+nfEF(=j58z zEbmm$yL8$UUJxY2+VgcW4uOGVqKtaWJ7mQ>ow05i{Wp|Jg!f3nqL9&Vww -7f^G9mI-S} z xV3vg8H4*j<+e}uxKaU1no-T>0|E1jkt5znGpiL?o{-=@lctP6*K<4JKi^* zQ1dP0q6zJ23npXBP(WQaO{7`rq;$iL WHstbD9_;1MlYSH+yqf5&OdBO|xX zB)C&LPRj`fb(=nqA}G&mg!VKTNxvG7vN4z9wUfaNi^-J57#3=?R5ldV?Cn)CFw$Sd z8ci|s&vHIl2-`tUxHmuR#xS-r4>G9`VpHcG4O#2~hALHkR|}8X1Xm3A4yB%!pa+ zcCWa?#WJ!+AZj*g*(>hX-~EE56U8cNV -ZgBd80D0X5+Z~A|J_j51 z_UL7==-a2WJA9?2E%|th{ik@*kb*p;EKFVsEWZni1=Z3D9+>*?>1*J>3gy{c&t!7L zRi}>QUsctfg%h2H=y=PRT5Y+t>Wm~B5Dz?sO?P(zm8Ro;X-O0_yKpmK&%n|Vjaob8 z-*RfPw4v;4lVbhz7^0Qul8!wSdX_(ACPR7!VEw$_h|BL$LL_WH5J>AXJ$&gI3foZp zJW{R&)%{Uos6%Kk#Gt(pt{`50p$L`EP4T023C@*d)O*7s`$GnTL&+L$no#A#<{DWZ zq2WV-X} #B(_MX=RMNV+HC)PLehE$W~N% z&w)cj%P0A%x05*hT-rW2?D6?Q?$8g&^M<-(yY7D78z}SZo?~X^9md90_rL9^!f&C0 zgB;@!I&KLgCw6!`95*(ZX`D7z>FL$8vE5lxgKlihy5E5!8ZjIw!}0wiL6 xI3h_oV%jy3Rro$e=PcKx0N~IFvG4ettzYA6qkC$?L<^9A@Q3n zTY V9u}R=;3-;W}<;7~3NL9IRc?PCJbptC_t| zpHens0u70{ky$+M=36@aeJ<6YSUnYGE;V{C74kSjBeS}cjptatgIDb;lFk(< -O4gzn?2j&psiE91J{oLQf+H x 6nIcRM#_i)6#LI6cXWfn4`HdGl5j{- _Oj_0EwxWh`7r8%TIH3WY^{31h_xc`8Y2hTP5fp&wymxCaR706=2Ne7gO*cC`$ zMnS7+k7(n-Rq{~c#r$<*)K*x#e48+<8o9=={sf<1trybPOh_aeMf_Voz5bk6Yn^+6 z|7j4o?)8(;vy= aswmgkE~Oy zKZRysG=j8AvyhT7`pBCeG)47lHW}&9y>~A@oDdd#=fxWOBrgWk5T>O<-O2u3rL$=! zs~s+~?S6>2$Rva1KAYG6yH@Vzw9aH<{RTNoRLd_nPWq%k)cLkNZE@(?kL!nQ57!Pe zpVA})-|1D8PO0;o9KtKE>uHZt4 W)4+@y9MJQd1 z9k#?p4=)vA^cCdjMRmHvP>D+-3#tONHP>0m^kKSkRP$8YwofDL)$l}Q@AGkOEU1oM z&o4RnJV(_))(otW9?5IRkouNZVSi=#@s*E|TJVNaj-BV1q=FSo*7`rxagPV5{v409 zDK<4;iS|>Z>PJhV9oP7`)=~rNBPvU$DWhhpRbPErX}$dZ5xzd~w1 oV4J#6(kf7uGHuBO2A3Z8v+sML^O zW<7I*aQwm*RqH^gn|>Zb_^Anm2McB^E^~`hNvqSZ)=A#Ev&B9obOm_FwW+LNg>%^u zDus>ToJwZ#ax)qVHaIwai@Pty+X@x&3IG$hb{$f>K80c4YQ95_;8cM_ j=NCNJcBN#iWlm)dd@rLisqFV-hZS=y~8t-wd+ z)=tU&k4|%Go oq+HS{`i5vcJ=4G>cECF&HQsuao)rZd*Uq=vjvT?$UH~bgecAIO)7FN$a%EI zc2cn&EO=I}F57cHD)S7iIULZf_H*JMCM^#P(DvQZzBT!UWp5!}79q)Xg>IVj{Xo}| zdmoP^TOu5#X%gp2LSyLQ@16A5jqvEWJkXd#l9th;seECP6d&&ub}eq)mA-VLB)mgf zyNE=T73&VWZ&0Ym70vGNgSqAuvnm~J6>p#9?S@?++>>_y%okU&)(F`DDSqWP!he({ zsd}&|BOlYalN2mkva_>MKh;MRkrY8!De@j5xgQNDA1I7ZtO^#4+WAz|BHVX@jFrk= zJHbT?Y1ES{uurgzFzO&_F|klBCAy!w4|maB<7~kNS Og-^M1Ti+_H=2l%cLHM!T3f+G Wop?Ik|HFx5OtKX5uBHZ|>)Tk8A6yZLj)6@SlMAM_#}=cMHCM`v$L z)ImfnX<#a@+&!5*hr%K}dz`~1;6@eZ)9#mHGqqO{d-P1oF^HkK{rW&TYR_K1HNX>w zq>kNKqC?_%Tb2U+*>{BF63$2C$>1>2UgBIf35|AKZLR6jrt}S4Vw&{T;FU}K%rI8~ zy mZDdL0C1Y>Ubp~kl#Gn9Z?fz@&@XO~#@v^`QTCw9Hnt7k~ @R@$E`&v~V#R*T{Lh&uk2aH`A9b z;Y37_YZSwjFHwXMJ`ZYOUg ;Zy2bv9jg?(d(VA^dtH;n?t(CVg zBDw*z!a?DA`BfWSDwp-UNMkVt0)IMS_NX%M&;`KU+bE?}Uec<#towxY`%Zmm@F`2Z zku+a9Sjd?QDd4RhO73wq?Mc-2I%Q3_h;A(VDYBx)!q@J6iLl;=@C7eV(4O4D>)?!` zi|lJfxOkUQ!1p`Q9~qrJ>wqEbetam We?C{7^WshJ#HF#Wlnnw&}5!}merdr|LzxTJf`(B4!N^)V%OlMmBFdyPS`Ba z*ox5asnK+9(uk7~m;a`*|9 wW3Z=kV(B;#3byrVrn#3d2a z-0w43gZI%;eI^+UM59pI FG1nT!m=5}F$jP%D zoqmf8g{86{GDaWKKiTkWVEM;4v1eoCyJgKtb=qse`_ZY6d?m+RAu9cb)@|T~l2E73 z#S7)u# Tg@Eu7x>?NTp+g! z#5E|Yu~7o3mF)=7BeACG1uiFF@XP~`m-kv2T+_r<$B+82>OI0ctmj?cV6X5F39hWs z)m1;=Q_+fhth!VZ)pITpEdW+X82LRT7XX#U0h*=e3rkDjQxNejZ0mQSPjg~?3FGMj z-jz^HmtSow@xM1t>|QzN8z;&1Oz@+RYLR{McLpQw^(%2M+hSe1w6XGn=Ec )6uGGAzh&2e`aF1 i0;!tNg;1Oj9Z9VmS>+H*FoA^#w)J$hG$y!a41J+@qx+U9)DXCyDc zu=;BHCj#To{vr3Ue16*OX?f@)j8x;Eo+1I){dzmBt_0|$BMb1`9T68Pn*n)etP~TC z%wg$vcK3fjSrWL_`%w@{4)>&%m)MlQ+`flNT_X4GN!F|hoymj>TxOY&`p9Q=L`$~e zhlgt>=6YEkEx9G6yN8iC?>ej)WQ#eo219bVP~mRGPQ`%^?e6a{4wL0zFgdE*BITaS zUB0Pm400(iGiLypvM4`}^bHPSuvIdRopatVY-;b3rb(j!NI1jU6^k!byraXB4TFC1 z+Z9>NPY=meWWwpKRL>#tb{_*Z=#(`FZ%rRjCq4}-J4hF|>My*2;;93x;t~G_#F6&K z %$f<6SaLk&&CV>1E)SL|-qnRhEip zx5ixJBq30(>zy5tHm}pB f@=qD?`Jl>HYTVMNrib1e5`jN5qm})Y!enhXyg*y;1wj-O{4E&kx#&8~v$H z?ARxPbtm*RD0dHHy6{KeO*hj`zmZ`R{5%s0Lq^P^u0dAiAK2yXf~=nvb;eEPryp`U z;rIi5nX$&Tl51r6Qox566_PF9ZS#9#NX9TL8~Xd6Qcsu(LQUEl&+vImPb^O_Ylyy~ z(^99A_M=)^h*aj5x7^rT^ voTN z50J-OZA}3UrxC}jt*%+sJ?Ck**NbcR`|v(MtV;Fr8nI@{sKeFeOwINcjRVn+DY*jI z*3=vo&pL0<06)fZU-8AhNW5J2*^^}UntNr*^!Yh^@>0lXKC#c#Dtok_nclZxKhg3z zL3A+Uml)R8*3ol1Qv K%RHh)W>bibNx+0$YMYoWsahJrJLSRH4e z0dz0=f&yMyU0aJ`Dzh#XR;{0E{apX~h{&;MHyhpx0KcqxCS=SgCIEj&?Q)EqxWMA> z%s)Fn*>Tm)G6NZjr|N)*%b`l%K;@v6`cPK3cA4pl?`ZI+{(ct}i*__+z#a_z)|s7G z&J~iDXYF_L6vG8JVbOvCS!U(&q~#^jT}*6>C6G!!NVqUMPup?bg~@4ItI%(e &@qA7NKi>JFrP>c^#h=?-0s z05h#$g9|ktjnwzwXy?Nwuz=;SXlhQ_c_#3|;V`$ d_g=xY$aw4=Gr4tbhZ^L+YM#TUtTiam=Z;_nGA2u}7?!^&hDF%KVQ&|R&y zBu5Yz8C~Crx%^X n+PJ kt#9 zA6fD(?x8^QZe0LqIeL_9y6 KRPjN!)` zBCc>7OIR~0|B)hQ$Tj2RGRVu;&K5%WWyY~ahOcm-W@smYc$_MnRv-pY@KAgH%E=>g z)L?gA%--@joj+Sr%QAk?`gYH*h9lC$EI!EEtumfaDZi3u$l&OfnA)2=6Ld_ !bM%?-3G;k;D4X$ioZ;F`@{Wtsg(`@+F;=Sl)|9||NY `kyQ%yIwKNb4I}z;KSFH=FAy)`Q0xOg2no|t?a%L+GXg(&0P}1E{ ~xJN=`KRR)b z+O2;?N7T`eUH-!Bx}ovQh&!Np^`(v!OmW~%k~EU%vVH>iElaPQcQQGrB^&)wg=qG# zk=2kpu0=oSLtZ;Jk3@EvVepB?8zACQ$R2Qyssnae$k$k6+Uy9SV%8*|_k~#(zI!I8 zA7;bGl~a8i5O$gT?s<@U)D3YRg?I7ZEB~P>ys!G~0`47(3_Zvqo6STzQH1oZ4J_3| z5j-_saq9tCIjZB!wv#U=xEbnjYeR6oQ5Ad|46FtHVZ|g>vQ+O~ooL)%6|(GWzNpz= zy=d58{a6cg1%|_1J4rDP-V^0BUhY!en!^c43mluJLn1r2$tD&L*}xj7s10^a3H$~n zIvS? 42G~ zhz1_%>pmV|Y(sW!;f;iuC+umja|;6R9w))io_I&PF>>Sv4&;@%M|zyo<^`3D$_ZK3 zv8I6Jb3x>5w>U{dY-b9M{3!v|vka9EbY6l?10;VuAsCVwrDK|PF_!yiHR5&d6ITe^ zplt#uOTeV$e!BVwMGA H@;Rfw%XJ7S6@Mn8g!E&ACc>P;q~RX{GzD_gK5 z!7EcRBf+axfD(FZ9os=W%|W(CISq)B34ETea~1#i$I~m4iMexD!0c9I=SK@OKBvo~ z)5B%nHbQs^4vHsAGnMjzrcEFr=$%pw4sV{ ?)1$%3`4nidy# zpY|q;q%4)eC7wX6m&yb&@aE*?(}+Teb*AW#xiOpX_g?sRTb@O*y1FOn06qtv(5fvQ z`>e6ZRcZ6*P=op24`XAhSIb =j{Ep+o zT(U 9G>(UE?8kqoTpL&I(ZM zq?*LG)0IZn?%m#9Xhp{@ 17Dt>d^EL$(6|y0j203X z9zKdHI&4i!q$Rw8%+lW%opM?vjc;DVH{b?-ejh8Jgrtm~DSvX8@mCf%c6>y`JxrPT z9cc;hF?xIZy;pS^%^Oi1Ge2kDMWYKo)PTqonI=XqWGR8cXBT~H_qP#lWa{+s^-g)E zlViEgDE1pO3;6d~>ogHPposgyZ=aFBGMm|N-D1;z=$RE*|8uGr_i!;kH-Y_zbF^9W z&g|~gzLBj^=S;nOSN6*&=ftQI;HW8XImZq_wuBEMnFH^ioja+Fz {|q=&J}IH}>7NU}s@1Ea-Y|aOV-8OCM?>t>P`D>w0 N2KL9R4V6*ft&=`Ae!%;< ztDH`UEQ9!jxjXzI2+c_HxLHp82~MKTSC}DV;L{_JWaRqz GCa zeIdUDRGStozykg5Sk3Bp)G2$*C)s#$8Q?!L)!m8d^d=ZQ)pd0=z14eXULdKEXyE4arX~(YCjuT6bd%|2U0#nSptg9d3Qy)X|90q_*i= z>+h&ArKkkYt$;@DD-Q2P1N~Z9x9j}F)EXGtVZ$j3C0WnN@?AeDr0L`k@Fv{Jy4`gy z4_EucQ>h5vxfUp>)`KhyoEyry@MqUwK2Cq*@gtXb$u9DL7?CFSd>+QU>c3FHG9ubh zB)EB5tkj?#29n4W?`Y?vg0$V<{riURx(K^Nz`;Fr;s+i&CWlux@@hSaRXR>|4FSV@ zRvrn$yMeNyquSmye!(Y@?KStxkI~&TqZkOoWQg@7viGMo+F_wYhz I* zIpT#kT|M}xddlQ*PrIQ5+hj)Xwp+i3UFY$MF xvR&uX=wd72w*U{}2JmEKZDWr-3sY)yOb{~1$%XOZ=-1cxh_1Ugnr1zQ z6mUeyN{c3w2rl{CP+TpUp*u7_z}D8HUeu%R;+Qph;=&P0;ns&`*Nlvt4k7V~;OJq2 z>*r%%$5t{s``kQx1kyaziS1o(gp9ph6$fq_yR|ms)k`H!XaB`bRQdgj3_vE^D#Sfz z6h5`6CxafdVYINDy*kNWUDR!aV`pRC_p7C#0geR)=J-cslhdEj-Qd@sZ#n?jC(iIo zf%TTjI_uh;FuDUJyOXdy(8n)ZevQQU;ZnLU^ZdQ~uh_HA-)4VRC(gawD5X}S%UPxU znt>3X9S=LHyjJ%ffphpIw+NshoxJ6n&S!D#TU(d#<`jpj=&s;D3x2Mhz~ Jp33D zNdl}2oIiH06(Y&B>Dk@-+&(x0%|{4qboFA5bd MlGsCZ zi-j-h)ielcgV0VSn9=B)CQ`=nKUzOUg2M~vFcF` x!YBDs?M2gq|Ez0p1vIZs&!7z;M{)DH2v;io%y?Tc#2b_mO4=AOOrc^S-8}p z!a*n1d9$5_Ttv9A#xEeKjGERZY4B#fRAl=2nBXmUUYMv@(PjCuKIxnReBy&TUdy-I zc#b>&t*Ys|w{xWe8>f*KZS(i9Xk}>+euNsFMwmcD+5iw~v>W*|l<`8mFqF!|Nl?o? z)d!|<>=c(naxhzx{Olt4ouYnCpl qX z&&(7G(~$h0e=E?R>mU*#h9P3eg|a#@^Cw|}ptpm}fJq_^0iwys^ew=8tXqdvXza^l zQBvAafLR2XAG?=rXLcNTcHO7h(NCROuHx$6AG2KyLL{~0c~x8TP%;kkf;l85KYyIu z=>$sP8Hi`RkT?LPDwTCm_z=noe70 -0qivfoz|>e**+fej?nN9+USYnNG{-s>s*cWLK;1}$g^quBhkOk5v zvQM_2Y4s5{TOgUZ^pOG;N%X_FS`aD PdT<*Yh#D6gTc2mh2L$ (>KW?^8z#EnX3<*`R@fUg(zS23n@dn~*mnR2 z7vByJ9Qld(Unf<8=$Bp`>_kGm%s2TZkBO1W$iH05ltw;XOZG@R`&2jMZ^y&Oh0OA` z> ow0)e7wcQ=TDDYb4#ZE?RQfc+2!reuOFbtN1u)Hqf|7z zH#vLbmD)l|4lIojrO}Sd+gvz}5KG`eDYMaYsjREv>x-`C>wcEdYPQb~n|XMakJV9l zdMEztX-IHLW0}v+QU8`iI%UuTMhui#{3XCndB9vid7!mNaq!V6JYg)OH}$-L3kkZ5 z+5J}58+Y@7H>gBtL%Jcv1Jnn+ehPBt!n=IHzZ7DdjOIy;xESWFV&mX3N&vDlfI =mIpx8}ig8C0qWt&*-r@~CBq&~l&;{|)67lqD&>vVM&E~=# zeQ6rq^<5MO(!e|Gv%7g&ftb!2<8^wZeZNAH_OTG(R?XqqQCq_A#ZDlYKLFt>jxG`J z6PC5S;r2B-x8s=blgRWq>P~%i1B%(J%DC-8WRge(mlQ7Gf0M0}0V{W+buzFfggHP& z$wO=)-IR3`Pbw(pf3e;6lSJNO!pxedKnr`Bn30q|cY`tOP A)rBeUi03 zb4M+uEoj7O ;2~h&EMtj3CcM8FTSJmO~iWaw4pXv6>li1{SQeR$0po~7Ru$hd6ID6j(*Zh?dd#2 zxJbBcD^ hTe<~RM{d#Duo6BDGo2O3)kq_`s-LJ3vStkK& zDd*cH_F-z-F|QsyJ`?|j4>q%NMap;a`Qco=$;F!g)L8$l=4WiSk*OlL{vBT=)L+&* zW7&qq^7fYysO-hIU+W}lmVC#dn{WXbea8mbM%tckCQdqpw1eb`JkkO3J*=?hBIm(E zO8dV#6Qh5(E|t&o@~Hth=9;bz7(Y6D{&k3E*trN-ca!T~-Y3F5*f8bIRYMGZh6TOn zdO&m~7OpHa-iirQ`H5+2ADDa1<9pphbzg#qB@nUU*w%#29tq?aOh`UrCTZ-waU^%n zW({#>lU~j7kdrgn+Hq#~bveO~IWl3OHvOnyp-jup(q9SJr&0vg%-A_g!mC1>$F1Bd ze=7bcmDKy%Ji=NuJ;kY%PE+(}Sc#80&%pS3bN*VgAAzq%2~X-JQLPL@90=l$WMy#} zg<7omaYSBvWn?*9uQE$3!4;)x+0>Y2)W(_WNXIy$!2IZal*$xaO2Tv}FWce4c{pgF zan|Wnz}$+e7C8in;MxpYr&My9IQyP7t>W3&&g4B6JGDuF8( >1c-K53r&gi|mTTBFjoS@p(pqqItGTEwvzIpW6 z6_pdXb%GzyZqMm;V;e!2dZJtJTd3lV$Kv*3#1)N>frQz{Tt_W8kW?%Y5)}1ftYTu% z0ms^roAv;Nt~E?lgttb2`xD4J3}L Fq)O`0!dw*~;nTz`Y25VPE_0x1u2Ex7HppN+oLp|x) z?xTKKdw+;W?IgC-_$2)`fvv=!4?V1_N`wHmZgsePN{1lwFC4tZGCmrgogp@OxN!{z z-XXsW)2lI>ty;@JxWyO5rH|P4q5z|%{kH(_y*j^GUUzZKQ>Wu+tDcvcI-)C6e`y)+ zv%u*NfPiAl2o3%4p;muF-9j^W(vj(wPukWv&h (5_=w(LSMn 8JQ!h?JD**IPubMd$hF|XO`cvk_hNKn5hWBOWC-^)Xctd7Xl!XpEWpv@DePt$ zpf)sKLM{UxMDU=7qM9;~$scB?_LWr5r1x36i5lMEvf>8?Qi ~MM?<)F<_Jh z{KS0tzOPonP`z6mm*VDou#9wt^mOyXxw7ILve~ntwQjoZFIZn#U$4rd-XLq=7RL!D zOOHU2Xq>$tF>(q4rL*Wy&T2nX(ZnhdfwR*ed7y1Rg<1aNQGcpzyr&?P6!{-Zi~brV zDDBPUsn)6*r}B<}#pIz ko&F@VuR>M$T)A?Sz!=^$OC?z?-UU3`T12kh?4b~_X~21F;M4)Yc{ zKyOpFnTzb2QhM_@6x;qkm=INLpDNHjHbf%?zv(X}*gPi}DxU$&8ZwOq@e7&8gG4}y ziEpMOJd3~Eex?XV%XPsP!g`sk*?b- zQOFdIPt&{ESA+jFc3}Q7gBKB>VM5vvy0tgmVSBYUUGROPKtK|{PdUhh?cL9O3h*tI znEEC@(ld34$tN%$LV(<+3l0P?qz> =hzL0iJ_-Edb#oKVyclVM2 ;%u8S!L zqA)DRl31yq1>dFW_*=Rd7BNYJ2p1CZr6TqK%`>w(^N~8&Ryl?RLsAxkSS*2}kJhJd zRF1TB+iBP#bSmEOZ{a|Q55j{gM0Du$7%)(UVIuL0jYdT#^NQVzeCc|X?+U%m^xlDt zVIuvCT`M6R`b-zVwEcZoZ0qY#@h@ON6T?LL6`NIDIO~~C81a(eDj&>0Wbv+13}Bdi ze$AH^#%aiWrprly7`z)}+;)4{Y?}CB@}9>m8nYz%-X`*=zuQE)^m$i(ims!3LnN0J z4tb_~7Tk_`AFPX^`soevLLvbA-Anx;zT~&?d`aPVlh5?q!tW})Ll3)e0$IS2&O5_~ zvHI@QJtZr}8zN9AX(adGWLV$zHzJl)Ua_6Ujg(%ojf306pXrR=OR4{FE}ZXv32ZaG zzltH+<$WkVMV`Vdc3!v-(F3}V@j=%;e~H1t3U+(hUl}=%gMF4X)@rnDlg7>Ex}5?0 zsFE^?ul#(=s-_>8pDB0>f^pCNU2iM*ls2IOtR+cQdRL6q*8sFt BE8HcCoax}wj8LBvCd}L7I#jJ-Ee$Ow<;gHeOYXCv`rPvv{2}q ziU@u2|8o1Qs1{AwAKS{)nR8ji8%u>rS5;{8Xewu%?Dn9-VkgLR1lBs6_i8G`DL-!x zSZ&pejglpmXyp*!X>ZocnIzP(8?(gp^`N~rEl bqzzCl^Ob+f^l zNH+g(7eSP=<*zzoznvP?oS)JnzS5yv0ogdJFt=7@CA?(R@^kl7ChFw*YMeJ1s4oS3 z6+@k-$S^LD)D92wFz CATrZvtUFhb4_{0Nnt*n)54rtF{`1$2$>~I;qT)d6HO8kDA+VRp~+--a$IJ(~j?M zoo`<{@ HCs*F S$(t(`g_G|JiYV*fpR&@SD3b&B$J$%?e%|RRj&Dg4byTjnueV7ChNn%0RMZD~%>8 zGNvVR>dIfV_`}XXhAGbtYrc!)q2Zs_=%%!z_+w~fRgjez8xFsr>VwG;fB<`c@|>Uv zBV$Va5R|g~h$UYYx^O?w)g0g+X8q-3fuPl6 i8iM`K$R>EmBL3oZJ0JCZ0Nnot>%}%iKh2(8j9rmr)zi>ZY!!&+AZ38?gd_zg% z%xMbud*x)6q%iH_Tgwu2HvzsyeUgTRTeMyuG$dphmOZrLrUPrDb}S)#e;l8=AV!WA z3v9SHFQX`i)qM0`4EVN@Shv-9$oQGs+)yA-UYU!M*=Iw~J;C%yAo9>eP@++yd2kAQ zSNYh+q<5Z#$;Q#pU^=V^8dQ`+Ydpkz!#b`%*s8@oEG&JIn;GG?y(nq>d&Rn>?CQ4E ziKlt+B__(zVY2U>b3b4Iz~rw XmIa>H1X zCk8VZ5pWP)WTxOZK%&Hb5MF^+=KxD|0lJ~#=eXW}3%lNA0`F10vrvp+)nSImx%K2Y zo1Gw=LzXaIgr_iB&0O_EU}f4Z_Z=D931I+Hfge}*n`><#Zc;&O?dru6d{>Gn2VW{J z-jJM~xr9ghJF%*;JaV_pU`7*aZ|kUwT+r}@8N9AK>v{rMAXD+KI`kf&oxPv@`09y3 zmtUWY4WU?iL_Gp>Z>%BC+9vRVo!$7}d4cBYN3&^Las)Jjb!|y8QS(u1JH*U-EA-w? z>T39LW>b&f|LERsvI_*Zkf>KRj2b$^5#0Z@mp$JTH6t_pr1ZD1Qh@$eF?qX%%DTA? zUh-POQK1=Vc-2y}kWll!c7F5}BkXcY`klRSCSQ{s^h(CKP?MQ+3qcI-#9BHGU@3@U zx=3I%3tw;G`I(?b$aTusoh^FbCf;TnTb9a}N_9-J;4}z7l~C8<__~m2(ABkpKPKjW zwfN})kE&SJgra7q C5LE5_G3Fe-;lAsU`L{lR^pBzfsaZB@ z?x_)2OwQB44@`6-?}w>iEE`g!SbC8r4nkY7^M{(U9u+s8MyqHiMG(3q7no-YK4~_u zDwTDRUW$23EFv4y;c8`lll(uHxllB&hSt$@ 5~lL++XrJ`fEb z6}qqD_nq(UNZYxGv+%yry?jzttskHZFhvXAU+~O0y{R+NGku)Vj9X!U?Wzlv6rL7X z4!`wTe{1qS+fv8XfAx}-%O3KmqGy4bGiR6ZMS~8dr#3CviR2&}C>Zz_jaVQI h2-xqd?A_Cr;4q9nI)5UTF-x(9Z0O)$%BzOwoNxl%nBJFSV3v5_x6%2jdAtT3;vU zlyTOby<4?uqME#w^k_x4d^s_;^1Q7B8b9bz^j@AfV;@Ds#lg98qkgQ=75C@~zKlm` z4DFN09|{Sh`=G)tko1c45GD#Da=$)$2pBj_cRO|HUn`N=`esRN@0{oh}Zbt$PtY zmo>=qAtl8+ubEJh&^<511)r$QF$Ub=R7s-h*)pj%Fgi9BwrE())%<|7MwpV=YY3RO z89yjaBd{lA|E-D96+)CpjQ%0*_q=GZy}N{yiI&ihs^356@i<#_A30jQ>`AzCXY_)a zEx+X *2NJKvN2sH)V7zOm0i2AIxaRhq27Y z*;z%zEU8|oo|6~Yq0|=n3IC$6lq @x7`3P||V&D6&9>JspNp@Ckqs zhd-_ozcUj27@`q=`a`ZTa@)SJ?!#@3Odu++wO?8R{9hEST{FVp6^*!{J%rXGn4}TV zR^3mthHoFuX|QrJjoc>WN4DZkW1lGLl9KvuB(!kj -+3GMXef)2cCDp;!W2
vXiv@E`E$b z$o7p KrK3%-_PQ$}nMJ};8*_H~48+V2o+7I2HVPS{7CnK%W4|s-d*(IVjOlrD9LOm?p zVYb%}#S5lz6ijrkr}yG#T%rB;uLtL|usXt1BC&;8D3}>bCmS)Tu(RJhjc09Qz7)Zd zN*b; j zW)UFz3H*!0j`0)kO@ (0-n>{2sqs zSDH}eOhfBupt7<=0$!=e1+EOiEXE()L-|dZn@#+}SHN@bYq1D3cP|D>BN{+~ T+4>2ipY5q9LEo{KRH97W?G*fi){AIOke zhf8izfXM2}jKkE!lx@e0%hhA@WW?N@{jTb1NqviIi2GBg$&tso3fbZh1dbgI&OtUK zouzXa{D0_0N$}qKCLFP!u`orJ7DzEg0Nc}&Xau5F_Bgk-K5t!*6U`h3OWuZ>5hrnY z%9ZKh&g`2E5vJ>!^LA=POAdREJfj@jdG7Uu5BcejB`Ii%h1W(L%5e9=oC`!M$$TJU z#p8MzoiL)Z>8%rGnd-MYRIt~XjL#1pWeRC)@n}0-FXOmD{8)`t)lF#eJengfKvlnZ zP*--yKoNJ9fFg-HbMgu|6;N8{`$v|_7xp+0GEzCz2LDvAve1;W%l^GptQcRoJaMk& z0j
{hCIWCq&I*VWzt}`Z?lKkSC+##8rliu=JrT@_$!CH znsARac~g#hiP-Os`bes1(qZ~0UwfK5E5C>~_V8cy;rvJVw<8r#($qvigGd7H#y7fm zgNE^Hd5rm2uO70)ehT&+ZHcndlkx|9MTaBmgmJwqHI1A>U2!5~gVEK}6%s49?`M*( zouSCKtrlf(pVEn?hp+~RdYu*@jQTC8)Bp9+`0O&4Z2Y;t+H8VhUN37Y6W}dfjZstI zh`;ifb+PdsJ1W_2M|ckbNOOda!O|oSO4g&eaQFW!Hrw{_VuY3UwN; f*Y?PoLY!C5ewIUn# z8C?!bXs%axV ~Tg_vWetMwvP@(}UBy^jSWZ z-#6KXbD6@iW2&;m)}qYctviBYMb}-7EiTaKQfJ>6mh{c8Vl|bI{StvYk!qr^4(LZD zvq*Oc;aHPNpnjMgDz(9re=cIV<7gXds1tNK{i4l=bNY4Po$V>tv&K5@>_TT)-@+aZ zL&F(CLyWS3JE0TMuv9`zO~6~pfoPtROcM6CJj%xaV@xAnpSJQP`!f%?PjF`C#e;E8 zaT1R+_s~Ic2+lus*%lVJe{{wmdzRIcyN%M@v&FzfQ+!o`7T+Fj3;V3ura)fQU+5$! zJ;o6{&Lg^3B3O?ms# r tH~rJV?Vws!=$0Q}
*JKW)1&r2Q!&PY=}&1pF`>`dsWX$f8NHu^wBMFP=!L!TgO4 zGn4U~z0{5A*;Dl4D836t(WuSKf7CU`OcL7_=6lnKIa9o07kxN$(HngzOS1mn!EgTF z!O!Zcp|tgw@}KbOKOxkAl*2nk{O`Qva1`r@aD7mv@mDffzv?`A0l=#HJp)_N%7e71 z1MVi*k9X=(UHQ|3oLE+SLrQZ9@)(1bMw=_lmabd{J2u>>!dWFb@d0}-N-RVk>w(JL zte^m8Cd5A8@1G6SkJ}A15Eo4Gf&e PXNqrG z0BSJqH{Y_J 47d?m zyTkg=tnj+6utFIDuqob VuY9%XUQ7TNs~6Xf3n^Rp-ji|R4}{*O}^(FW+aq0;k|z=xay;B zwS^bP{ATUQ3W4%gF4Ta}U*iN^3#RzJJVp^6ZD@3_8i>ivka%h;u?uNiZ!uJl5)j-g zDn%ucctYS1cs}-NSJ?T73(W71`ktq?sw3e0x>)^Y?zf&zNKh@I5oT$vYPj6bWh0oj zMoLiQ9%gz} S}#t(4qH8!e9&tRl1sv7jCEHUvr=YFF+8Q+97 wY6RO_5dDFY^OG~??2L=&W2vZsv&kVmM{B| z$;258OsqpkWdtbIz}bqDy*7 sgC)rehG3m}2Ix zu>b@F1>7ip&p%!>B0K HXdf$rXI3Ad4VYOJT)>SjL +;=r;x*v#4Uol{S&Z|O@`$@gvAssRBKy?&`w3pkBdHDrbA2Z}F8cg(kFv-=Ac^9= zLI0#NJbJE@Avp$v>V=jqx%nnVj7J}Jfdw`>m4i%Q1>1ygZj_Uq%K=0ZWgss=ut>p` zI9sxRJ%iWG4{A p^z2u8YoUAj08ah {i#O<7 zp*Vv;iH$e-V{7E&RdG_pc`H0%USIs|<9q-z<5|^V#l=aLY1GLLZVqy#P;lpkJ-_E9 zjbtEs1r=L_X4gkg1~r$4g4SltW5)tA2MdQ^sk{wK;l2*q`QL}F1G2f9@<8N_Y*^V1 zgZH@o^UiAf|0b|b@Y72s5e4Qx*-V)vljt&ELZofQF3Up`ZlcOvjWHd8c7nT%7yU2t z8Ilu&dA+6I11N*8l5LGMs(iqjv)v5%Tb_?vj~Sy_R7;w9_KR7_j8m{T-YoQi4j#jC zl?uTYi(~LT`R2YEK-R$oKEH&l2Y4_6>>p8oHId(B16dVjYaLABF!p}SN;bRq*{Pyz zBkN6ebuQ&gLvYKCr>O*3E2Cp`9Pdh#QA-Fme_N!ZV*;Suw~9A}y`Q>{SQPF5S41NKfGQ;*}d zpvWtZ1}YuDp5B|GaM1A}=?s}W7Um~H_=Vzip&@!hEr(4{^|C+kd&_q;=nk(yQ`A4W zBr1ON=eSe;*x`uQD_$ql79yvpjXtT6Vp4iir?!{_sspa64`POe77{ChBlFjMrqlRZ z&!&ABO^5e0%^LvVgdRwJFVvDG2e2K9_bF~JgL2xfqilY?k|eze85GtS7WyPvXk|a5 zT|SE#%Ffo6`aXaE>+G}k+;V)UieN0LwVb6O#!=71GbKYFP#Pk9nE7fndv7V~M0#Wy zI^FpTaCVUu#KDE}ZtygxPL&ne`~aDylCNY>_S!D{SqC@=-*&{->L1^sej`)A77e); z;Lj)~m7UMgvZ;>x3l5>~G!9+g0G{C5JENtg{*`GVSVO4Be0+Xs-TdqQjtUwq* }OxfE*~Ag zKz#b?kd}RNzuaH@yx{EcT*R7nml>Pwz!r+m`2gz>H;4~z?12MhR4i#xmBZMOjc}yu z7>l^BI%#mkVS5F9Ia~asxcDk;EH>=p>C6?M-jk4^OLO$vY*PNv((Fd~ifku9_!?+u z!IgeP-#u5e>yviFN^9q3J-zcnERtO-9qLq&RhJCPL^%gA&H-DL8j%Z?F+oJu zfLz5P&g#Q5ae!S4)a=vD0VwhV6V Vp9*0R_w#uMUaE^mYZ=Ox`)gzNR{1 zk*dSWqleQC_iMW8tcRPm>h6wzHv{@9Ksh4^$GGMkSm>ymnpRw_BuV4O;3FbE)?(i; z6s&}o6fLu<>W+wql&z=vk~Lu$ HApM$i60EWJ|9~0M4T1OjPPL;PpTXjx8 zA78rS7Z+NuP8_~3Cstz5sbqArD}&|}?C!M;7k?F& gHkR&)4^_9cizr71>%EJtKP@#HO ^wnmYtJySfu z8$77S=(bdLO!6Bds=I|`_|d}hX8GYyS^d40pKcX8s_mYs{yk^Uw;qsdIu5HCF1FkH zN3g6cBR+vtR+xdLr7R#n(2x)^+BbS!FeD^9+(qU!G}V+&KiGxRV c~+rE!YV z!X!1+^xvr93WQk2&B9;}4*M2^pP@( LV zlhfNTeWvC6XX}f=-n-?ewM_qMj>DeRmrD^65;$R%XPKP3LQzYf#E*R`FQn}K-i>{_ z%H!**&tp$W*R8HX{2fhos;l=s@@^~*Q(laTa8CYTd)?^!#18h@_Qk`t4XmBi))XC; z6_%%SW3xY^#ufttT}*E487#Y58AdN#E^OX3ZSNJ$_v|MAoB~e7!!pAy11lx%>B~f^ zjWl<(rQ<96TH{3Ag)+4iGi>?EziBU+rf!!rQESa115zTaySEu7sb6yF{X+}Mz9zX& z3>;~4PmDER7N pfiNz2bvTc)^=7Rx`ip26%* zLQZ)CclynYWOgSgcPHrlWiVXKcp;B*P=;qq@B8_|vG%fD^el0YdgI$+v3zw>T9c@K za F9|pXCX+E&;Ec-Jes&iL1Z6r{!voPIt?`t!tefon()siQef;p2M9` z5BJP2RHW7b^?dZW6ZI062FV=q`c^Fo(&ZY%>}5^rZhUw5KX_4>Hjs@r6axdx7211G zcmkO^dU3nSCfa*x_~iwHTNT}NvhpHvM7l+!Cll8uO-Qse@)CbUUbZf$@h|Hs|4HI& zn<$-3Kl3lCyWq`AU*M^(3?Ly4O1@Q%K7E#PXxi=t`WLEGYnu6(aGAhRrS|$GunOzR zla&gAT^fr8ElnKnTfEo%j6BZ$&$moI!M&mrm{r>!5jIJYn1?(MK+1UCuOx>pn|#Ln zru{p{khRbY-z@{C*JWhlYDf (}Gr-i<_1Kpu? zuS2t0Z@zI>qIAzd^I2~5konMK 46qw3E?AwbYbzIf(#W4rbB?yxUDkgHBFT4Ch(p4QdR_A?B+7_njuV` z)mE-FSRRjzIXpWTvMPD#xjh55bTUMTv`I?Wn}?2WwNrPsmFXC;0!#cAOp7o4EzIz0 z^U jm< zuZPAAvMpt_r}F9T^Pc>2aB|H@?c=-qQ5v0a`QT$hHguWp>skYwuWK3x>oOMg#L_NE z?qvub3E;Qgsxh!1wu#$(NBsB#vs%+$jPPo?_j1*X+s6>zXK?vfvVAJ@9(TZxxRx>8 z-w7i9QP_HL5!tjf_kRA&Yt85b+Y)e@8Q`;+D0H>uAS9ZK?!e{h`|+6-8Xq52MF{Z} zC7G%}v&y$$?8*F%axpP<#;SJ$s$unEpJ?SlC!5}0WV3dAo~TxjKM0~*?4BDlxc}*n zqS?*pk7Mz`-(_Bd+`6wt@;hR^yN+)+=B}<0pWWq460z(cust*LCk9@2&>TSS6(%BU z+svD(-w0jQ0@2|;H UUoIT}8IH3)gN;1k XH;(K zM}(s6fTF&SEll@lSw8~*_lWz%V29jxbC|W`Au3$31KoL5FkKGB6o5T--#$j-KOEAP z=|4~j@W5f77%`OX?{s{&M_9{Fa6t{pU4~FU<%eZQg2=yu3*EPxjMfC;YIW+pQ3A?* zTu7mbuOst`P@k?sPak3N^N3&rS)T)N9DlI|TA*}iPS@438M!QT;^fgY_PEhAGst-L z)DqMYA|<76vK$PA09f7L+|SZo=S*9WwAm`|k9_I>4rI!n3bIij818N1gii?veZ2gc z7SKaA|HUSRnLU`^Z9P&B(5vYEAph9B=@dp8zK9aZ1b&eKmF xnd4?(LynG4zEq~FMjx!zgMwK@m$*t`F<#P~lz>&rQB4UV;24~}K8 zk0jk${Q~VBFk}<`XEb1msS2?)&{+r12lBmbI+}XDe%#V}gZ|&8;MCBh)PWPEUM-}2 zMu +_)cB7PMntx8Uwc?p;vBO9+Xi`jDnej zT@^o`-+-WD*E}y~YsHvBRAi9G;E6lDZ5uM55)7BCfkMgC+X4KD_I2bo{FfVPHWFsZ z5%=!sMH_Vv !zRRa!oOk<(vbX0V=`R!KH`Zj4Zp?6Xr8MtJY~!Gn=X?B#aayJ) zN;JLC;nzl4FQkmEXv{D|)EC(#jqd8|bWPvud%Df0u}l}qk@G6ymFddlE z|FNNdQ5?E^;hrg_7?Ve0TsKIXntq!`CotCJXZ5gg6LUBD)UbI`+%3!nA=m>rs>y )76)4X4Ja!xn{L>{d4dMt>1PEA5Pzl(#-OuA;p?%gjwZN36DaO$K9sQVxy^W zQ1-S#6!W;c`lYL%C8K=uJ|6<#7T<8A?QyTY!=aT}u@+xrzDg6in{!m4NC^r;Qfz?y zp% fZ9!K4yG&LX>~Dah#__&*M!Jj?jL3T-3q z&y{rF?3^GhN#mvki9BS& W3H<%uy}0R`@XELBm6Gx#Dq%Adh$^;}O-|-?W1??2 zezC$}yS536-vjblmkHY9NB!2aqMQ8I(xUVI*7Bm`{7A4bRg!F|w=>A5xqDpd8;rlZ z$tKy*Y{!s!({6{8O{+ivk-QY}iJvgvR^4rTGI-EWm~G4Cww-B<@75=1fc*F}G(3N9 zCj#-UbTketNInUl?m2;sjibk;v7zhp5&2Df7x3@I6;L%7J#ni$y8hETwC)aU-`Pj) z1j^(*IWnERE#Cx6U~kogyHIwgJ1?#Bd~xKwiTzso_C!7~fdXM1_yYHgrhm>|2oTjw zw~l{h!{Y}Q63Pz{(>Gk!Wc>b7zKG7U9qeHaRH69f4R@1wXT2$qj(&}!_tp&TK@-ad z2f_sq0b3&%CX#sS`6=GVC)kT%tu6yqzn>_6=L- f2``SU+h*UQZn %%6Dl)i&Bx#p=xgH)eqDF{aws-tor(y+L;~%m*66xL%b(69@d~FK|x} zd_paYYSVA6agQD|*N|rB@R}jEjf-#S+xgT%4*`Ag-d}8u^MyEg%C2wJh@O|Z{ft$^ z$R)0WSjX58T$IAv%KKf$F&_7xkdw>VQ%uT7FjdPs^0K%g)k-tdU5A1B_5&_*g8)zl zR7`U;k_#l7e9x1%oc0V)@
ln5Q(@P zM7!lXf$8py)X5+6l2UWCm>_#khMy6V_Onhla+n^Q@{YOU!0B^f8%E1F?xfu=@>`?_ z_%PBb-FNpWM6N_=muruO-Cxgz)u)vs-AqQo0afruk+0oc33+c5#gCdm9-s&rHA0{3 zi@Ry32N@a_8TB%Vf9(kS(!D0!KDwDM(>XceL@OeG0)ND}-zi1n_B{_{ON2G+BJx!~ zU*;`4oOlEOX!RujLou+_B+spt#1P`z_E4C% !}J#~W>g^Pdk2uA0y&NF z6G6uk?J-Qk$3uSULfPT(UFu$|v;(&c7rk|%+%<8bzP*~yym>bNOFL>YS66)?E6lk# zquKY Ca~>Y 5Bk%c{m^m(Vt9V6Y= tMX<=@hC >+T0S zaN^o*IqaWvXJ=Q+eqx|Ve@>6GxWqU~LF4&Dc7!qvg3 _N5ha4K$w>>&ty5J>B6CiUkv_Xqokz&qW5O;DA>h =F9%w!eka@y& z H+ajxr%}>q_?*zWzF0w89a(Ll_V1drcXCyR9@DGH{V%CMjACb1GJB|cnA_b zrOhdgiN%oN7z7Qeb_jLbx$t5~49ir{x3)gbmK{SFN6XWU{e9_c$v5(V5zyhvFMEo8 zxSiXo8MOdo?yu5;A`a4@E#i)=sxf)0k!8&dN`a9paK9i+Y582nq20Y?AtIwp7CgJg zPaRzy-9*JKjt#HYhmi(a&Q){Ntcl%Dyl8#y>kD>&0EDPD>`;?{Y)CMPKC0|Ds*7!f zi`b+_7%M}i&dVNvlxv4~82?9ixNQYdTA#3A3di;Z{;A{mi0f%l_@&ppu~N3q?0SE) z7bs!fQZ#6(iS8_>T+W%pJr`mtP~YcF8JZoLxO_2cta 7wa z=*ZT~ZBfnz;hQ_HU`uVd@nmc0o7A}F{#x~jwANZI@#>2fwZp^n 3MX?pWB0hW>QE^nJ85 z{LMFfHKE)vd(*g_sIoCwWB)zO(}TMa +*=8dq7n?cF zB_re@+&`fAdWi@9**>RcL~kvZ*p64GVoo5^%{=s8b&V`H>OH#`$o=7dO|x4200`1= zt(Z@?WKIW&UJ@F<&0m-Vz9O&3LjoE~eprvs3Yeua6pn9tY4Kw2ijbHjG{}tvXlCK+ z#V%(W_&NkIpA`ATy2d@If%oLt@zf6*7GgT+^E$MkU-i~ZT^Qz=m&>wKT!arrg{46r zMLDcW3CiINTRh6=8qKAW_*Ee*0CwU?*UQ<6{?}G)^_9GCK5i~mJh9!w#)cYgE6eXE z+o0uPO0Oj2;ZN!;aZ;ycwJ%BzwmZsszQK#xwoc5-Nu`&WZzhwtr}PNWGbUI?F*yRh ze@{Ck?B=6wOS+CXE>3WmN+b0DRKsIanF?{aSpO5o$@T!m4LBNU)js1o0Q1~J2A$Gu zBTx3z3q4y(aV~oZ#JP?|E)2GX5!5s%CM-J`QMHl7Giw1>?wJ@n78HbFQFxV=t{_p% z``*#J`$JT`-EP>=x?o1+zF^&)&(yrrP&>B@G_?8sAz=(+t2kI4QB)0j!E`&NA7E *E9X{N2O$e*XcQ;RKUhxgbEr6_)TDP8Lew;|$qYOy zX->I$CGLHfIaGOQ(36)AN;}wM$}?aOS3wfAKNu`2H;FUrdBq$C*rAZTg1zY~zy#=c z-WqKKM+g)V7B!IXe?2@7__XHk>mb5e^_Si-zmk>ci{#Eil6 zvXQif3V@MCo{Mbe|9yv1yoofBR-f`x6r&V3k AVcMa`hW{te4E1Y1HZp$ZYYk*%L#WO2i@t)Xy$&bn^Yst69Dr)^>Nwb z=VT5lTr8q|k0Jsr9n%!W+aq>vA?X&}zguhE#bX7z%H>q8l<5+7f< EfNYX4nc}rDeeS! zf(Ho6 adSAi+FfaIT1toPg= zTc0N0{V5*r&f)Tx1^=t%G8|3!`Ri)>_y{HL79Dqx^`xL>1*vI8y1`izwe$GO?v^qh znB^}i&6XaIja9_;6YH6jbuM?VVO)B G^0))$3?)7d-oFF%K|%+bfNVM|SLvg?XhA1c1D zZb|KY+0@h|@HgZ0QgjQuh+OU{X+8n7$mJ33)sy|;J2E!?+?Sv@ktCj<_IWK9*>r`U z2to>KReB#+TPdQ^Nt^gCu2x@HZ>XFK`AY`3re$0Y1-V+JDn}wW;(LKfJ%ts!$ zY>iT)=}!lNaRHDM zVdFS3BVhFUx1RL?vzy_TlTL|3s8>6orOt$Fex2;c Ya8&j0G*&@=}G!Z=wkB#JY1=X2GmUIldM6 zovmT0qDbTEtF+qlU`}Gp|C@i;2m>Tnn?{x$uh1Bofnw1@bbR45=^1+CqZ|EE?^^uS z(1po1>^Gx!du`bzBli4`W&~}_$Ftg-7p9*It~GIEnhodWY(NI=4?lwA;mkoBwZ%vc zo)>n_V)|ncfqM{O{2OV3Oi3)6F_Z5XzP&HSG&^YkT=zZqY9U7!Pf%+@MMwy77-phT z_jtueAn5h>AH$GiIcRaYb7pBH`2)>iT;iWbkmLE4dV8Smmt=3Ho#N@#!y7>v)-o9$ zex2P3gY6yWwqy^Gp-n7Cn}_^tIp^usWoOOTqT?(`=NS;eI3rje@F)Gj+#huNVcJ@} zYOyui#8q3wb2jLrzIAG +7rADNG>vyo)|98~-BF>MU|$oar`r^e?G( z!VOauo_pJyGI2pmev< QMLFOT)%zk0z3A|Ag#Gn=rG2^|fs_X!#r-~UU0XAeIg zPhT%b2fzQ&WeL3bFTW~fsO^7MbIJ@xTzX%Sw(s&Hux2}&W<82+m5RzbF6&cf&&bWl z|4B AdPR*D*gZ}I=JDXceSl- zT+*C=FPfc#V4V0-4;c;U>?c+k;rBV!x~pc+qNz5bQRDm_7477Bz-+H1qaN=SB9E2+ zVz=_`h@N7jbyTRm?Z3o1oZ_wLZeAZ3Q@mSMyntMC732URQ0xkNQcvSbxJM|h#kG>D z^MhGJ`_>`s@|Sq^O5B;pk@V*|&Gl7UjGNe2Yi|2(E7f3iZ;e`Y2itS)E&k6>GFO#V zEMMZKHT>pP` u~`e X|SJtfiWBmDJ9Cjb$!14bQhyO-c_P Ilw zo>tFzx!KdFu{>jb@G4FQa7TPlyd}jT3hLqy`Y;g`)X0Ea9o~#jJ@P~N ^ps>oOExI`P7GRTP%c_==w#FSutVv z_QbOdzV(i7HSt`cHwfMF0`tW^z7-}`muz`cSOA7%BhmYc^rQ3wC*YkJ9^*Kf<<4hy zB s1qd^qe0<(ppJEo#I|Ct{b&dsq-Mb9EV7P!1~z)u@v?g$r7-O0#h$Ix6+ z)4zOZfs>%eRp%n~f-LZZ{#a%@Z8fv2jFeIz0;zGKlQ|&tft1hnNo!dkI?7pF8=I|* zIJJ%W@`PTYDJ+ez06_mgQpR1eCFA=`qM^ZY(Eq=O!1KQhg8!Qk9LYHQ89HX(7;ST8 zyiPGOQ{zGZ$~D7L-4l4!U0MUgk@B^kX{vlm+*J8f_lu9Vl51r^3R~Y Her$4tGX0195a0evvmHKYGX|uKbm4* wp!0mWUlfzoe=Ihd*Go8+9pQta7Xa#~8?}@BrMv zif{-ej1fH+H(PK$6oZ%=c7q}Re4PuO04qedYZ61AZM_#mo@LzuLtel(C0qv={w=%@ zBZ=B8G8`}*%dKFM{kI9(IbQu^j$~y-JtFK_UBP7_lDQy^!O93)t%97ZOCgx1@og6Q zrnCGDkL6}`A04JClR+R_^~2jRP`6?_A8~ANLD#Wnt4oy32+Px847z10D*RAF^;YQF z{W9i$DG(L>BEotr&!}`c&am;LsJQY6l}RhE58u&`i}s4B7>*Tdz8&>Of7fm8F8z4t%~8dnX?@FR%Yd`&lJiM1NlFs-Oi?-TV3RHZr{mA7(=^FTB z=Y==V?l=19-zDEg`MgojV@>cOH1s8WnjVp!T2;P<|5~8z>6d=#w#C2*T`QJ({CV># z%5?Si2?a4>uK9r%IDnx+CjM)@3)85MXLjI-ZkHWnxA!yB&tisrUACl{$)1wi>P>u! zp~&JP@SLQ3Z{7@zh-^^t+W9fFWiDC&GLesT(EK;%=N)kMBSX%nkgX;5=dp0-l*?=m z%(pe@7n$fH6XD-QZB^)AFg`9?&>ci 0P$Q=p&=bt-9W(Ts2jhXX z!aGx2!?q8|u W Fwu4%PTV?32yl8>7VKC?nIj_Ju?5#OlAA?>6ghF zGnHh#QWquJKa= Z)O&(&Z7Bu5x9R1qu6cAg+fRTRd-}bZ(n|abn!8n;(rY( zN|4uq=6n@jTi?$NT74 X1pa|;@V!^|u%Oso`$e35i}#FPnqxe} zyGZu?_+pX^KN>PK7j{ xL43(KnX`v58@kEP13pPr5 zVky>$+Iazv(_crfD&abT)aUL6@lo}joMbX4#Qz@BWurw^o>)5}ZcONJkYCS;outGZ ziAnFw>#3tBhAjBD`BRS^EI#ko4P+Cy853G$A+xxyK9M0sQi><9%Q<*qUOvATLJ~fi zHwnDHUbCYaZb>&a%)ri!XvFTJ;`r+KwN?K3PmvsuvMRwv(4Z!4m0iO+*mLAWq4hQ_ zfsN{IbN!1{WwY$fda!8;LBng9&G{-zV63;bIgYvDY~Q}8Ew699@DuxG(6F{~ X7OBOuQs_KeyuTm5dy2=`qyd!6<8a(o0pY2h*NNoD} zOXwyr*fkQsv+0t$6;D0rO$POgDR3B@Cqs_JFTY@!oqB$)WRX5Wd6)F-94DWc!MzOD zyzI*r*HXwbczz7^4LZ*Zp(Eqz@DF@mIJ#t}>?=QcRQFCSYmrq`;K!Ll@vA*pKiTrq zB|WPpqjE; {71>@? ztR7w1P?*UZrt~Z?S6Ihsv{&*ps`0Nvxm$Kr6T^{Z#W1~M4(p{pT}Hr*Ak{tZ_sBwa zRXEZ0rnWn}G>NXT7~{Q%$Pkuv+rW>QrvVf=0T-= 82Dzl~@uywxwAZF&ZZ&}y zuil~M&W6alzWJ)1=FCu>&$0ddo;Ue-r05^~Pa(bnbl#lA+)DOE8rq5$X3M{8S~8JG zpFdyI?cj&1&nqqug=P%cqQ)J5d3XO+Vlk&%>-W_XpIoH*=LQhv@A`}-8p7G!>(nzs z8^vd~EKBVeEIj@(w2~lmbfvz3(^85DqNPO#4_3=5T;o3FPo{N#{?d4$4pvno7)?~} z#ag)0j1KZ?8;ws3>8JK-kjgqYKH9J>RJIHkQDHrC-;5ly`8Q*(vI*t>lM)$(z?u+=Q)-OsTgw|&}v`@f+fU75! za7N%OSN2{+Pq$+j^oxfN^yOdY9cmn_s}!YQ_v{Ce4}@j5HYGgsS j(>*ns*@4Ti;-}ymak_&u^ZH^grsAiShcE}iNQYOq?V47A#P`tv!}Meo zxmM|rn(j9>wI{2#>+eW8v|Ql8r0(diOzOY4lxe z8<=s^lDF1Vlv| z1M;0|S#9Fp2=UgWO#`MPx;?bN<^OT^z9k2obdEd1?SCEl=SvPxaF>+(Q_}t5-}7{0 zxnFgjU!|4&!=dVscVv393FMcbJ>1}l_x@5neHG<$`#dWvlzMcS@>1!e(8dyWr^Af? z)0L0y&WC|>1Zu-=QGeWoMCBUQ3Vb?gqmHWV$|3_|wwzNQ6CDGE!)Nt#f4$D4XX&qU zOz7Y}ElG&_7>XY`hUgS aMn=nEk=M#|OqCd&&a_)=J^alnU 8>1mF zrM}cJ{w$L64veZ j+pMXA^ zPddv=xXX@}I3cfQzVmRG%3g)=76HZS##;Ghm&R!+)##x$Dh9T<;KOo9+A0s4vIZlE zLIv4+**T7wkU7Jd%%$3@D*nrBw#6Tv<$}|M&9&ghqgg`>9x 7bPlj6XXtTEqm%tuihiAt zpZ6hRjXw35nG3j21y>zt1X>AJ?Efp(J9U*{{Sun2N=SKbp=Ld8k7aT9Q(Y$3X-{mN z^y`EtSJ1;ezlQ`4uB2&KFcv*o$KKKR`OU=G=|t6;L>B*2Q?6mcsxOo-Nm9q!!>He% zb*@*QdKdde5ztC-Ed;Rl0LI*b<}8SN_;ufFADQ`h#dm;AK=EHjbP~Kk{Vrb&YswcN z1vR+zUS@?$5X|dztyN~7j*1y=mb6ZO7=zm{Q=H8$5%KchZ{g0seFi(nQqI8QLEF}! zb$K-_lT|BYIHoOFr)_d|dsD2fME7S-aQ$=f{MDnS=c1*>6#2!Ak*O^uH;Q?!;2E_J zRJb8Tuej)p mo}q+x6&>{}L7Xblg68UXvVl2QNu4A_Sw!FkVdNrTYqtslmN5v^H0b*qSd#gZ zqWcN?lVFUNMz780^;_w`h@gW_uFAtA2A3v=z;Qs`{g2S+IAqsUBNRzBF)F@z{+8$m ze_LC!L<-i{Au 4vqx=HD@ULdt{ z15>>-J%7s~xb9E-De6+Q6O@Z8@F2ZQHY1jIV!O{THa6^`{avI~j)}j-9x-7(8^2PL zb^!42&07?5xfv8xDvP9=<*wj-(M7Sh-%`4es}r2Y{F*4HefkC6tM3tYUkYwUm%4^n z-9^3m%{f0f+??`3c!Kg70pk6SX&j~{C~ij32sG& )!@RwQs_Q1#CLbDoN?2!!r`Pit4+Oo%v(3fS1%*thN>E;HcJ&M(P0QU$)V z(u&=QddJ@=l*5L;m+5Ho>`Y803~1+{Z(T-~?5`qHzdLY-GaS7SwBLX$CK?N*O1PU( z7Dnd Pr9|F8@TrPIXlaTVxGOTFg#DxRWQ|9%=;=hvT_ zjsAiPm5B@V2d%8L<6*AYwnV$<{N;j@ izsb|qK}O)oqCvg8{fY4CoC8XZ?cCOVjq3(E~SNq5+da=k&(?Zn3(|UtkX-m zjU7VC=w=Q~0p_qT=)MkTV}zzm2^zw-0er{|wZ4r6T9_jJ_;`4Rw jonPrJ$iWvxB62kr$4p%UDiBb+rW6TG4`S%jZTcqnh6)1UXr{s4sDP zW*PNen9ltK$1}cBl7~I-{(z@&I}!9oD=!X5ebY#z@HKC{L!Zs(HjXkNRjiX>Eu}jF zJfzDF-HoeL>$z2j6-3Xd!*ZepIl6`7l7^kS?+mj&yLAlgI eHUbwnpBjQbEe6h%HHta0+UTUFce!R|vZk^Qi4}`UvktX(M zw{I#F`pkyvKvZDP?tQ@YP(aafVr26iPo6&ZFdr6AWFiAC4Lo$A74M(gT{(LSh;<4= zgC?}aJnPaXkDG2d
9G@kT)8KGxnnE~?`T0x;VALuFwm-~~sE%u4}*6C9wc;lUQ4 z@erqhZF!DF{B?5&(@}=kdty D-37~Ji`i<~ETZ+iAhP|~fhx1(q#{{BOE56!Z2 %X;IksY{*CBS0yE$l|{1;w wroI5q;<_3$&c1<2jbBkl?G^%%OjL%$!K7ZYYUq`(+eEmG62s z17x3o`lz{45W$X4eHjyk7kJEJni3xC8A*iKoP&_|0`|3FWtb+bgu89)ACbB#pGNL` zZy#?WJ=pyW(QpO5`%=g@VI%qTw_tRBV6h(`)pCSvx<-Iv3P-^;1pUTXnAsnY|L z&t<{9<0n|I|Gbc6f3rXG-gPG*N#&`WiS3KzgeSa~X#TP%zr&)jdT^jhS|xl(Q7|Fw zOZ7f>b`;3#lUu)KjBbW;oIK6qi<47-8VkM-x6fO_Ea;|KiD*wsTq!PS$5|;>e%4Ye z6XMiuv;uAKyK|Q~xZ1k4a;549T+8ytW>?X~-uSoa1)!Sg=;Q2ix$Nuc+LHstDLR#9 zGw|j%U`&57-I~jALfm*wXQP_0Fu{H?F8370wSaCx_*ReyMrK)eE?zodg)svQ!q8*# zvc*!6@iKc>?Yn*_D!ILPZ}g0B--iy*v(47`+34#(Qv163pGN-KX|U9)$704cb24=5 z{Lz(e=ia>Xn`he;rVioX WdYycy7%-RC*^aRAnd4K(1J~fy?arS`&<(YI@ zqc*F|5-y5+mejFMS}QaisO-hyw% m8K`&XMQ z8S+n7siEHFL?Y~QDn^vQ>ph7na<<;unG3S-jW+!xQG}p9IA%)Zs^l}G!pI&gHefb$ zG25 e_o yu6Ll}$ zIn}u2SBaW;{rkxejYx%pdnD{>PK)Dmw6vY{4@uWVO^=ZJL5{lIaqnMzSoM%2k&0td zZ;wTcDbOBy1wVae^yHm@JEsM>yF<5EfA;3i?crl@-)P?MgYEqMw6X^s_BlxqYT{p{ zCVE{tZmzSVI+^cC3ZDU1Jy0_sL3GyeoU>qT**?eHv7wm>Z=`!A(@1Z2u102Im6|qK zRH-HW v^SmJJD69xTEe|+}YV6oGjQ&j$2-80mmT5<@ zy-Xbx^&WGPV{J{`uF8R^eu^J3zboMUK4JepI h7PDHaI~>5DBKWu@(~ z?~H9zXt{UWTWBvY)=9V{@zRt&W4^b3wqT-We(Fi3V5<;rhVFHhemuK#V6sp%w&P{) zd3 aEF2+7eqWXKzL*tk|nE^sCHfKJPcLB;=5%?=$4Imswm6?O3Q*vn7#&ZH( z${E6pFf63aU0qGhI84unJ1I13{6edAPb7EIt1fCsOJbtheG$oZ(FT0we(!(%Ze=`m zQ4+!YXf^vbj?YurIEFBdl%`72>-c$GzD??{u%!+6*=bXA$@>ja2wPbF_6SK!(VuJe zNTpdXC(~5^9H4khpuXMtULNyN&WJJ0CcP#yz>e~n6&?Q*={N7wymYS4&jj&*N2{2g zzcpi4n@^m83RL?1UB=vbWB4iL15E%+&XTxW*W~F2y9dc%iMgZxx~=QIsmQl)$?*uD zck56fvcn~41K+Gi--hKG^Wa!n)+bk&TXcIR4f1SGQttySqE*yx3E%97c3L>+gAwFy z8LY21DN`|{Q=D8L?*$HNHXJar_*XD19};U6sTK~siCZUNKiD)J3tLNG%^#A;UCh4G z9NMYX)RZxc96piV%3CSD4wrj9bL0rHCDWEkyjF1^p?g=|m$BnsS_&Rnk0O^me_<8T zasbW|etryeCh?Why)&F_;YoI4(XGGD8P&`jK=JH&5AECwo7|LmvabD%Q|qVh4KYp% zYRYg6;}bF1Art2GxEyc;rP%!CV(`nE`IbYbW4nN - {;yXjps@L4hTwtHamG;rcu|yI>PLJ> z{mWSoFfio|@t#raW%18$`Z@Nf=s1#VB0CdBeZNtG=JeOK;;+bC^t+YbpWEc`r5>zD ze>O+Er^4s8ASVAr!pLq&A3WgZCs#z<0hB><{!_evArq6X63}F6@aYah+H?O)aLXJ3 z_@^{IjgSU&ipu5OT7y=$dp-;dd^btiwIr#q$UA@ve6CtOTuOl~TYP9}8$V>?F+CyL z3V0gy;QvuyPTclepI1Q+HoOZ-qT496i6TFOOddj5HX9UR6X(L74u|-x6&24W+E(}= z-tZlRoO`EcODx(YYKo;?{1uUkx0=8#b6PDyOGy8*o&tw;zNGbtcl-Ga3svdeewJe= z-JPUBaHYJpkjKHC