0&&r.copyArrayPart(y,e.id*d,h*d,d)},updateTransform:function(e){c=!0,f=e},updateSize:function(e,n){u=e,s=n,c=!0},render:function(){n.useProgram(e),n.bindBuffer(n.ARRAY_BUFFER,t),n.bufferData(n.ARRAY_BUFFER,g,n.DYNAMIC_DRAW),c&&(c=!1,n.uniformMatrix4fv(i.transform,!1,f),n.uniform2f(i.screenSize,u,s)),n.vertexAttribPointer(i.vertexPos,2,n.FLOAT,!1,3*Float32Array.BYTES_PER_ELEMENT,0),n.vertexAttribPointer(i.color,4,n.UNSIGNED_BYTE,!0,3*Float32Array.BYTES_PER_ELEMENT,8),n.drawArrays(n.LINES,0,2*h),a=h-1},bringToFront:function(e){a>e.id&&r.swapArrayPart(m,e.id*d,a*d,d),a>0&&(a-=1)},getFrontLinkId:function(){return a}}}var o=e("./webgl.js");n.exports=r},{"./webgl.js":57}],64:[function(e,n,t){function r(){function e(){if((P+1)*w>=L.byteLength){var e=new ArrayBuffer(2*L.byteLength),n=new Float32Array(e),t=new Uint32Array(e);t.set(k),N=n,k=t,L=e}}function n(e){d=e,v=o(e),c=v.createProgram(E,b),d.useProgram(c),
+p=v.getLocations(c,["a_vertexPos","a_color","u_screenSize","u_transform"]),d.enableVertexAttribArray(p.vertexPos),d.enableVertexAttribArray(p.color),l=d.createBuffer()}function t(e,n){var t=e.id;N[t*x]=n.x,N[t*x+1]=-n.y,N[t*x+2]=e.size,k[t*x+3]=e.color}function r(e){y=!0,m=e}function i(e,n){h=e,g=n,y=!0}function a(e){P>0&&(P-=1),e.id0&&v.copyArrayPart(k,e.id*x,P*x,x)}function u(){e(),P+=1}function s(){}function f(){d.useProgram(c),d.bindBuffer(d.ARRAY_BUFFER,l),d.bufferData(d.ARRAY_BUFFER,L,d.DYNAMIC_DRAW),y&&(y=!1,d.uniformMatrix4fv(p.transform,!1,m),d.uniform2f(p.screenSize,h,g)),d.vertexAttribPointer(p.vertexPos,3,d.FLOAT,!1,x*Float32Array.BYTES_PER_ELEMENT,0),d.vertexAttribPointer(p.color,4,d.UNSIGNED_BYTE,!0,x*Float32Array.BYTES_PER_ELEMENT,12),d.drawArrays(d.POINTS,0,P)}var c,d,l,p,v,h,g,m,y,x=4,w=3*Float32Array.BYTES_PER_ELEMENT+Uint32Array.BYTES_PER_ELEMENT,b=["precision mediump float;","varying vec4 color;","void main(void) {"," gl_FragColor = color;","}"].join("\n"),E=["attribute vec3 a_vertexPos;","attribute vec4 a_color;","uniform vec2 u_screenSize;","uniform mat4 u_transform;","varying vec4 color;","void main(void) {"," gl_Position = u_transform * vec4(a_vertexPos.xy/u_screenSize, 0, 1);"," gl_PointSize = a_vertexPos.z * u_transform[0][0];"," color = a_color.abgr;","}"].join("\n"),L=new ArrayBuffer(16*w),N=new Float32Array(L),k=new Uint32Array(L),P=0;return{load:n,position:t,updateTransform:r,updateSize:i,removeNode:a,createNode:u,replaceProperties:s,render:f}}var o=e("./webgl.js");n.exports=r},{"./webgl.js":57}],65:[function(e,n,t){function r(e,n){return{size:"number"==typeof e?e:10,color:o(n)}}var o=e("./parseColor.js");n.exports=r},{"./parseColor.js":55}],66:[function(e,n,t){n.exports="0.10.1"},{}]},{},[1])(1)});
\ No newline at end of file
diff --git a/plugins/analysis/webinterface/plugin.go b/plugins/analysis/webinterface/plugin.go
index f217dde659..68d1a33d2a 100644
--- a/plugins/analysis/webinterface/plugin.go
+++ b/plugins/analysis/webinterface/plugin.go
@@ -7,10 +7,10 @@ import (
)
func Configure(plugin *node.Plugin) {
- httpserver.Configure(plugin)
+ httpserver.Configure()
recordedevents.Configure(plugin)
}
func Run(plugin *node.Plugin) {
- httpserver.Run(plugin)
+ httpserver.Run()
}
diff --git a/plugins/analysis/webinterface/recordedevents/recorded_events.go b/plugins/analysis/webinterface/recordedevents/recorded_events.go
index c31574b8cf..31dba5c72f 100644
--- a/plugins/analysis/webinterface/recordedevents/recorded_events.go
+++ b/plugins/analysis/webinterface/recordedevents/recorded_events.go
@@ -16,24 +16,26 @@ var lock sync.Mutex
func Configure(plugin *node.Plugin) {
server.Events.AddNode.Attach(events.NewClosure(func(nodeId string) {
- if _, exists := nodes[nodeId]; !exists {
- lock.Lock()
- defer lock.Unlock()
+ plugin.Node.Logger.Debugw("AddNode", "nodeID", nodeId)
+ lock.Lock()
+ defer lock.Unlock()
- if _, exists := nodes[nodeId]; !exists {
- nodes[nodeId] = false
- }
+ if _, exists := nodes[nodeId]; !exists {
+ nodes[nodeId] = false
}
}))
server.Events.RemoveNode.Attach(events.NewClosure(func(nodeId string) {
+ plugin.Node.Logger.Debugw("RemoveNode", "nodeID", nodeId)
lock.Lock()
defer lock.Unlock()
delete(nodes, nodeId)
+ //nodes[nodeId] = false
}))
server.Events.NodeOnline.Attach(events.NewClosure(func(nodeId string) {
+ plugin.Node.Logger.Debugw("NodeOnline", "nodeID", nodeId)
lock.Lock()
defer lock.Unlock()
@@ -41,6 +43,7 @@ func Configure(plugin *node.Plugin) {
}))
server.Events.NodeOffline.Attach(events.NewClosure(func(nodeId string) {
+ plugin.Node.Logger.Debugw("NodeOffline", "nodeID", nodeId)
lock.Lock()
defer lock.Unlock()
@@ -48,6 +51,7 @@ func Configure(plugin *node.Plugin) {
}))
server.Events.ConnectNodes.Attach(events.NewClosure(func(sourceId string, targetId string) {
+ plugin.Node.Logger.Debugw("ConnectNodes", "sourceID", sourceId, "targetId", targetId)
lock.Lock()
defer lock.Unlock()
@@ -61,6 +65,7 @@ func Configure(plugin *node.Plugin) {
}))
server.Events.DisconnectNodes.Attach(events.NewClosure(func(sourceId string, targetId string) {
+ plugin.Node.Logger.Debugw("DisconnectNodes", "sourceID", sourceId, "targetId", targetId)
lock.Lock()
defer lock.Unlock()
@@ -72,6 +77,9 @@ func Configure(plugin *node.Plugin) {
}
func Replay(handlers *types.EventHandlers) {
+ lock.Lock()
+ defer lock.Unlock()
+
for nodeId, online := range nodes {
handlers.AddNode(nodeId)
if online {
diff --git a/plugins/autopeering/autopeering.go b/plugins/autopeering/autopeering.go
new file mode 100644
index 0000000000..ca3b3de98c
--- /dev/null
+++ b/plugins/autopeering/autopeering.go
@@ -0,0 +1,176 @@
+package autopeering
+
+import (
+ "encoding/base64"
+ "errors"
+ "fmt"
+ "net"
+ "strings"
+
+ "github.com/iotaledger/goshimmer/packages/autopeering/discover"
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer"
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer/service"
+ "github.com/iotaledger/goshimmer/packages/autopeering/selection"
+ "github.com/iotaledger/goshimmer/packages/autopeering/server"
+ "github.com/iotaledger/goshimmer/packages/autopeering/transport"
+ "github.com/iotaledger/goshimmer/packages/netutil"
+ "github.com/iotaledger/goshimmer/packages/parameter"
+ "github.com/iotaledger/goshimmer/plugins/autopeering/local"
+ "github.com/iotaledger/goshimmer/plugins/cli"
+ "github.com/iotaledger/goshimmer/plugins/gossip"
+ "github.com/iotaledger/hive.go/logger"
+ "github.com/iotaledger/hive.go/node"
+)
+
+var (
+ // Discovery is the peer discovery protocol.
+ Discovery *discover.Protocol
+ // Selection is the peer selection protocol.
+ Selection *selection.Protocol
+
+ ErrParsingMasterNode = errors.New("can't parse master node")
+
+ log *logger.Logger
+)
+
+func configureAP() {
+ masterPeers, err := parseEntryNodes()
+ if err != nil {
+ log.Errorf("Invalid entry nodes; ignoring: %v", err)
+ }
+ log.Debugf("Master peers: %v", masterPeers)
+
+ Discovery = discover.New(local.GetInstance(), discover.Config{
+ Log: log.Named("disc"),
+ MasterPeers: masterPeers,
+ })
+
+ // enable peer selection only when gossip is enabled
+ if !node.IsSkipped(gossip.PLUGIN) {
+ Selection = selection.New(local.GetInstance(), Discovery, selection.Config{
+ Log: log.Named("sel"),
+ NeighborValidator: selection.ValidatorFunc(isValidNeighbor),
+ })
+ }
+}
+
+// isValidNeighbor checks whether a peer is a valid neighbor.
+func isValidNeighbor(p *peer.Peer) bool {
+ // gossip must be supported
+ gossipAddr := p.Services().Get(service.GossipKey)
+ if gossipAddr == nil {
+ return false
+ }
+ // the host for the gossip and peering service must be identical
+ gossipHost, _, err := net.SplitHostPort(gossipAddr.String())
+ if err != nil {
+ return false
+ }
+ peeringAddr := p.Services().Get(service.PeeringKey)
+ peeringHost, _, err := net.SplitHostPort(peeringAddr.String())
+ if err != nil {
+ return false
+ }
+ return gossipHost == peeringHost
+}
+
+func start(shutdownSignal <-chan struct{}) {
+ defer log.Info("Stopping " + name + " ... done")
+
+ lPeer := local.GetInstance()
+ // use the port of the peering service
+ peeringAddr := lPeer.Services().Get(service.PeeringKey)
+ _, peeringPort, err := net.SplitHostPort(peeringAddr.String())
+ if err != nil {
+ panic(err)
+ }
+ // resolve the bind address
+ address := net.JoinHostPort(parameter.NodeConfig.GetString(local.CFG_BIND), peeringPort)
+ localAddr, err := net.ResolveUDPAddr(peeringAddr.Network(), address)
+ if err != nil {
+ log.Fatalf("Error resolving %s: %v", local.CFG_BIND, err)
+ }
+
+ // check that discovery is working and the port is open
+ log.Info("Testing service ...")
+ checkConnection(localAddr, &lPeer.Peer)
+ log.Info("Testing service ... done")
+
+ conn, err := net.ListenUDP(peeringAddr.Network(), localAddr)
+ if err != nil {
+ log.Fatalf("Error listening: %v", err)
+ }
+ defer conn.Close()
+
+ // use the UDP connection for transport
+ trans := transport.Conn(conn, func(network, address string) (net.Addr, error) { return net.ResolveUDPAddr(network, address) })
+ defer trans.Close()
+
+ handlers := []server.Handler{Discovery}
+ if Selection != nil {
+ handlers = append(handlers, Selection)
+ }
+
+ // start a server doing discovery and peering
+ srv := server.Serve(lPeer, trans, log.Named("srv"), handlers...)
+ defer srv.Close()
+
+ // start the discovery on that connection
+ Discovery.Start(srv)
+ defer Discovery.Close()
+
+ if Selection != nil {
+ // start the peering on that connection
+ Selection.Start(srv)
+ defer Selection.Close()
+ }
+
+ log.Infof("%s started: ID=%s Address=%s/%s", name, lPeer.ID(), peeringAddr.String(), peeringAddr.Network())
+
+ <-shutdownSignal
+
+ log.Infof("Stopping %s ...", name)
+
+ count := lPeer.Database().PersistSeeds()
+ log.Infof("%d peers persisted as seeds", count)
+}
+
+func parseEntryNodes() (result []*peer.Peer, err error) {
+ for _, entryNodeDefinition := range parameter.NodeConfig.GetStringSlice(CFG_ENTRY_NODES) {
+ if entryNodeDefinition == "" {
+ continue
+ }
+
+ parts := strings.Split(entryNodeDefinition, "@")
+ if len(parts) != 2 {
+ return nil, fmt.Errorf("%w: master node parts must be 2, is %d", ErrParsingMasterNode, len(parts))
+ }
+ pubKey, err := base64.StdEncoding.DecodeString(parts[0])
+ if err != nil {
+ return nil, fmt.Errorf("%w: can't decode public key: %s", ErrParsingMasterNode, err)
+ }
+
+ services := service.New()
+ services.Update(service.PeeringKey, "udp", parts[1])
+
+ result = append(result, peer.NewPeer(pubKey, services))
+ }
+
+ return result, nil
+}
+
+func checkConnection(localAddr *net.UDPAddr, self *peer.Peer) {
+ peering := self.Services().Get(service.PeeringKey)
+ remoteAddr, err := net.ResolveUDPAddr(peering.Network(), peering.String())
+ if err != nil {
+ panic(err)
+ }
+
+ // do not check the address as a NAT may change them for local connections
+ err = netutil.CheckUDP(localAddr, remoteAddr, false, true)
+ if err != nil {
+ log.Errorf("Error testing service: %s", err)
+ log.Panicf("Please check that %s is publicly reachable at %s/%s",
+ cli.AppName, peering.String(), peering.Network())
+ }
+}
diff --git a/plugins/autopeering/instances/acceptedneighbors/distance.go b/plugins/autopeering/instances/acceptedneighbors/distance.go
deleted file mode 100644
index b2b8dae55a..0000000000
--- a/plugins/autopeering/instances/acceptedneighbors/distance.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package acceptedneighbors
-
-import (
- "hash/fnv"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/saltmanager"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-var DISTANCE = func(anchor *peer.Peer) func(p *peer.Peer) uint64 {
- return func(p *peer.Peer) uint64 {
- saltedIdentifier := make([]byte, len(anchor.GetIdentity().Identifier)+len(saltmanager.PRIVATE_SALT.GetBytes()))
- copy(saltedIdentifier[0:], anchor.GetIdentity().Identifier)
- copy(saltedIdentifier[len(anchor.GetIdentity().Identifier):], saltmanager.PRIVATE_SALT.GetBytes())
-
- return hash(saltedIdentifier) ^ hash(p.GetIdentity().Identifier)
- }
-}
-
-var OWN_DISTANCE func(p *peer.Peer) uint64
-
-func configureOwnDistance() {
- OWN_DISTANCE = DISTANCE(ownpeer.INSTANCE)
-}
-
-func hash(data []byte) uint64 {
- h := fnv.New64a()
- h.Write(data)
-
- return h.Sum64()
-}
diff --git a/plugins/autopeering/instances/acceptedneighbors/furthest_neighbor.go b/plugins/autopeering/instances/acceptedneighbors/furthest_neighbor.go
deleted file mode 100644
index b48e7ebf82..0000000000
--- a/plugins/autopeering/instances/acceptedneighbors/furthest_neighbor.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package acceptedneighbors
-
-import (
- "sync"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/hive.go/events"
-)
-
-var FURTHEST_NEIGHBOR *peer.Peer
-
-var FURTHEST_NEIGHBOR_DISTANCE = uint64(0)
-
-var FurthestNeighborLock sync.RWMutex
-
-func configureFurthestNeighbor() {
- INSTANCE.Events.Add.Attach(events.NewClosure(func(p *peer.Peer) {
- FurthestNeighborLock.Lock()
- defer FurthestNeighborLock.Unlock()
-
- updateFurthestNeighbor(p)
- }))
-
- INSTANCE.Events.Remove.Attach(events.NewClosure(func(p *peer.Peer) {
- FurthestNeighborLock.Lock()
- defer FurthestNeighborLock.Unlock()
-
- if p.GetIdentity().StringIdentifier == FURTHEST_NEIGHBOR.GetIdentity().StringIdentifier {
- FURTHEST_NEIGHBOR_DISTANCE = uint64(0)
- FURTHEST_NEIGHBOR = nil
-
- for _, furthestNeighborCandidate := range INSTANCE.Peers.GetMap() {
- updateFurthestNeighbor(furthestNeighborCandidate)
- }
- }
- }))
-}
-
-func updateFurthestNeighbor(p *peer.Peer) {
- distance := OWN_DISTANCE(p)
- if distance > FURTHEST_NEIGHBOR_DISTANCE {
- FURTHEST_NEIGHBOR = p
- FURTHEST_NEIGHBOR_DISTANCE = distance
- }
-}
diff --git a/plugins/autopeering/instances/acceptedneighbors/instance.go b/plugins/autopeering/instances/acceptedneighbors/instance.go
deleted file mode 100644
index 1990c8a3a0..0000000000
--- a/plugins/autopeering/instances/acceptedneighbors/instance.go
+++ /dev/null
@@ -1,5 +0,0 @@
-package acceptedneighbors
-
-import "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerregister"
-
-var INSTANCE = peerregister.New()
diff --git a/plugins/autopeering/instances/acceptedneighbors/plugin.go b/plugins/autopeering/instances/acceptedneighbors/plugin.go
deleted file mode 100644
index 46f3eb31f0..0000000000
--- a/plugins/autopeering/instances/acceptedneighbors/plugin.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package acceptedneighbors
-
-import "github.com/iotaledger/hive.go/node"
-
-func Configure(plugin *node.Plugin) {
- configureOwnDistance()
- configureFurthestNeighbor()
-}
diff --git a/plugins/autopeering/instances/chosenneighbors/candidates.go b/plugins/autopeering/instances/chosenneighbors/candidates.go
deleted file mode 100644
index a993e5adc6..0000000000
--- a/plugins/autopeering/instances/chosenneighbors/candidates.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package chosenneighbors
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/neighborhood"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerlist"
-)
-
-var CANDIDATES *peerlist.PeerList
-
-func configureCandidates() {
- CANDIDATES = peerlist.NewPeerList()
- updateNeighborCandidates()
-
- neighborhood.Events.Update.Attach(updateNeighborCandidates)
-}
-
-func updateNeighborCandidates() {
- CANDIDATES.Update(neighborhood.LIST_INSTANCE.Sort(DISTANCE(ownpeer.INSTANCE)).GetPeers())
-}
diff --git a/plugins/autopeering/instances/chosenneighbors/distance.go b/plugins/autopeering/instances/chosenneighbors/distance.go
deleted file mode 100644
index 384e29ca27..0000000000
--- a/plugins/autopeering/instances/chosenneighbors/distance.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package chosenneighbors
-
-import (
- "hash/fnv"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-var DISTANCE = func(anchor *peer.Peer) func(p *peer.Peer) uint64 {
- return func(p *peer.Peer) uint64 {
- saltedIdentifier := make([]byte, len(anchor.GetIdentity().Identifier)+len(anchor.GetSalt().GetBytes()))
- copy(saltedIdentifier[0:], anchor.GetIdentity().Identifier)
- copy(saltedIdentifier[len(anchor.GetIdentity().Identifier):], anchor.GetSalt().GetBytes())
-
- return hash(anchor.GetIdentity().Identifier) ^ hash(p.GetIdentity().Identifier)
- }
-}
-
-var OWN_DISTANCE func(p *peer.Peer) uint64
-
-func configureOwnDistance() {
- OWN_DISTANCE = DISTANCE(ownpeer.INSTANCE)
-}
-
-func hash(data []byte) uint64 {
- h := fnv.New64a()
- h.Write(data)
-
- return h.Sum64()
-}
diff --git a/plugins/autopeering/instances/chosenneighbors/furthest_neighbor.go b/plugins/autopeering/instances/chosenneighbors/furthest_neighbor.go
deleted file mode 100644
index c62eec99dd..0000000000
--- a/plugins/autopeering/instances/chosenneighbors/furthest_neighbor.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package chosenneighbors
-
-import (
- "sync"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/hive.go/events"
-)
-
-var FURTHEST_NEIGHBOR *peer.Peer
-
-var FURTHEST_NEIGHBOR_DISTANCE = uint64(0)
-
-var FurthestNeighborLock sync.RWMutex
-
-func configureFurthestNeighbor() {
- INSTANCE.Events.Add.Attach(events.NewClosure(func(p *peer.Peer) {
- FurthestNeighborLock.Lock()
- defer FurthestNeighborLock.Unlock()
-
- distance := OWN_DISTANCE(p)
- if distance > FURTHEST_NEIGHBOR_DISTANCE {
- FURTHEST_NEIGHBOR = p
- FURTHEST_NEIGHBOR_DISTANCE = distance
- }
- }))
-
- INSTANCE.Events.Remove.Attach(events.NewClosure(func(p *peer.Peer) {
- FurthestNeighborLock.Lock()
- defer FurthestNeighborLock.Unlock()
-
- if p == FURTHEST_NEIGHBOR {
- FURTHEST_NEIGHBOR_DISTANCE = uint64(0)
- FURTHEST_NEIGHBOR = nil
-
- for _, furthestNeighborCandidate := range INSTANCE.Peers.GetMap() {
- distance := OWN_DISTANCE(furthestNeighborCandidate)
- if distance > FURTHEST_NEIGHBOR_DISTANCE {
- FURTHEST_NEIGHBOR = furthestNeighborCandidate
- FURTHEST_NEIGHBOR_DISTANCE = distance
- }
- }
- }
- }))
-}
diff --git a/plugins/autopeering/instances/chosenneighbors/instance.go b/plugins/autopeering/instances/chosenneighbors/instance.go
deleted file mode 100644
index c7deb649fb..0000000000
--- a/plugins/autopeering/instances/chosenneighbors/instance.go
+++ /dev/null
@@ -1,5 +0,0 @@
-package chosenneighbors
-
-import "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerregister"
-
-var INSTANCE = peerregister.New()
diff --git a/plugins/autopeering/instances/chosenneighbors/plugin.go b/plugins/autopeering/instances/chosenneighbors/plugin.go
deleted file mode 100644
index 7a33d35f20..0000000000
--- a/plugins/autopeering/instances/chosenneighbors/plugin.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package chosenneighbors
-
-import (
- "github.com/iotaledger/hive.go/node"
-)
-
-func Configure(plugin *node.Plugin) {
- configureCandidates()
- configureOwnDistance()
- configureFurthestNeighbor()
-}
diff --git a/plugins/autopeering/instances/entrynodes/instance.go b/plugins/autopeering/instances/entrynodes/instance.go
deleted file mode 100644
index eae5b451ef..0000000000
--- a/plugins/autopeering/instances/entrynodes/instance.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package entrynodes
-
-import (
- "encoding/hex"
- "net"
- "strconv"
- "strings"
-
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/plugins/autopeering/parameters"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerlist"
- "github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
-)
-
-var INSTANCE *peerlist.PeerList
-
-func Configure(node *node.Plugin) {
- INSTANCE = parseEntryNodes()
-}
-
-func parseEntryNodes() *peerlist.PeerList {
- result := peerlist.NewPeerList()
-
- for _, entryNodeDefinition := range parameter.NodeConfig.GetStringSlice(parameters.CFG_ENTRY_NODES) {
- if entryNodeDefinition == "" {
- continue
- }
-
- entryNode := &peer.Peer{}
-
- identityBits := strings.Split(entryNodeDefinition, "@")
- if len(identityBits) != 2 {
- panic("error while parsing identity of entry node: " + entryNodeDefinition)
- }
- if decodedIdentifier, err := hex.DecodeString(identityBits[0]); err != nil {
- panic("error while parsing identity of entry node: " + entryNodeDefinition)
- } else {
- entryNode.SetIdentity(&identity.Identity{
- Identifier: decodedIdentifier,
- StringIdentifier: identityBits[0],
- })
- }
-
- addressBits := strings.Split(identityBits[1], ":")
- switch len(addressBits) {
- case 2:
- host := addressBits[0]
- port, err := strconv.Atoi(addressBits[1])
- if err != nil {
- panic("error while parsing port of entry in list of entry nodes")
- }
-
- ip := net.ParseIP(host)
- if ip == nil {
- panic("error while parsing ip of entry in list of entry nodes")
- }
-
- entryNode.SetAddress(ip)
- entryNode.SetPeeringPort(uint16(port))
- case 6:
- host := strings.Join(addressBits[:5], ":")
- port, err := strconv.Atoi(addressBits[5])
- if err != nil {
- panic("error while parsing port of entry in list of entry nodes")
- }
-
- ip := net.ParseIP(host)
- if ip == nil {
- panic("error while parsing ip of entry in list of entry nodes")
- }
-
- entryNode.SetAddress(ip)
- entryNode.SetPeeringPort(uint16(port))
- default:
- panic("invalid entry in list of trusted entry nodes: " + entryNodeDefinition)
- }
-
- result.AddPeer(entryNode)
- }
-
- return result
-}
diff --git a/plugins/autopeering/instances/knownpeers/instance.go b/plugins/autopeering/instances/knownpeers/instance.go
deleted file mode 100644
index 91c12c96d6..0000000000
--- a/plugins/autopeering/instances/knownpeers/instance.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package knownpeers
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/entrynodes"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerregister"
- "github.com/iotaledger/hive.go/node"
-)
-
-var INSTANCE *peerregister.PeerRegister
-
-func Configure(plugin *node.Plugin) {
- INSTANCE = initKnownPeers()
-}
-
-func initKnownPeers() *peerregister.PeerRegister {
- knownPeers := peerregister.New()
- for _, entryNode := range entrynodes.INSTANCE.GetPeers() {
- knownPeers.AddOrUpdate(entryNode)
- }
-
- return knownPeers
-}
diff --git a/plugins/autopeering/instances/neighborhood/events.go b/plugins/autopeering/instances/neighborhood/events.go
deleted file mode 100644
index b748822f60..0000000000
--- a/plugins/autopeering/instances/neighborhood/events.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package neighborhood
-
-import "reflect"
-
-var Events = moduleEvents{
- Update: &callbackEvent{make(map[uintptr]Callback)},
-}
-
-type moduleEvents struct {
- Update *callbackEvent
-}
-
-type callbackEvent struct {
- callbacks map[uintptr]Callback
-}
-
-func (this *callbackEvent) Attach(callback Callback) {
- this.callbacks[reflect.ValueOf(callback).Pointer()] = callback
-}
-
-func (this *callbackEvent) Detach(callback Callback) {
- delete(this.callbacks, reflect.ValueOf(callback).Pointer())
-}
-
-func (this *callbackEvent) Trigger() {
- for _, callback := range this.callbacks {
- callback()
- }
-}
-
-type Callback = func()
diff --git a/plugins/autopeering/instances/neighborhood/instance.go b/plugins/autopeering/instances/neighborhood/instance.go
deleted file mode 100644
index 7568b529b2..0000000000
--- a/plugins/autopeering/instances/neighborhood/instance.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package neighborhood
-
-import (
- "time"
-
- "github.com/iotaledger/goshimmer/packages/timeutil"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/outgoingrequest"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerlist"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerregister"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/request"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/node"
-)
-
-var INSTANCE *peerregister.PeerRegister
-
-var LIST_INSTANCE *peerlist.PeerList
-
-// Selects a fixed neighborhood from all known peers - this allows nodes to "stay in the same circles" that share their
-// view on the ledger an is a preparation for economic clustering
-var NEIGHBORHOOD_SELECTOR = func(this *peerregister.PeerRegister, req *request.Request) *peerregister.PeerRegister {
- filteredPeers := peerregister.New()
- for id, peer := range this.Peers.GetMap() {
- filteredPeers.Peers.Store(id, peer)
- }
-
- return filteredPeers
-}
-
-var lastUpdate = time.Now()
-
-func Configure(plugin *node.Plugin) {
- LIST_INSTANCE = peerlist.NewPeerList()
- updateNeighborHood()
-}
-
-func Run(plugin *node.Plugin) {
- daemon.BackgroundWorker("Neighborhood Updater", func() {
- timeutil.Ticker(updateNeighborHood, 1*time.Second)
- })
-}
-
-func updateNeighborHood() {
- if INSTANCE == nil || float64(INSTANCE.Peers.Len())*1.2 <= float64(knownpeers.INSTANCE.Peers.Len()) || lastUpdate.Before(time.Now().Add(-300*time.Second)) {
- INSTANCE = knownpeers.INSTANCE.Filter(NEIGHBORHOOD_SELECTOR, outgoingrequest.INSTANCE)
-
- LIST_INSTANCE.Update(INSTANCE.List())
-
- lastUpdate = time.Now()
-
- Events.Update.Trigger()
- }
-}
diff --git a/plugins/autopeering/instances/outgoingrequest/instance.go b/plugins/autopeering/instances/outgoingrequest/instance.go
deleted file mode 100644
index 238a608618..0000000000
--- a/plugins/autopeering/instances/outgoingrequest/instance.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package outgoingrequest
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/saltmanager"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/request"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-var INSTANCE *request.Request
-
-func Configure(plugin *node.Plugin) {
- INSTANCE = &request.Request{
- Issuer: ownpeer.INSTANCE,
- }
- INSTANCE.Sign()
-
- saltmanager.Events.UpdatePublicSalt.Attach(events.NewClosure(func(salt *salt.Salt) {
- INSTANCE.Sign()
- }))
-}
diff --git a/plugins/autopeering/instances/ownpeer/instance.go b/plugins/autopeering/instances/ownpeer/instance.go
deleted file mode 100644
index 7ee6bbd9d2..0000000000
--- a/plugins/autopeering/instances/ownpeer/instance.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package ownpeer
-
-import (
- "net"
-
- "github.com/iotaledger/goshimmer/packages/accountability"
- autopeering_params "github.com/iotaledger/goshimmer/plugins/autopeering/parameters"
- "github.com/iotaledger/goshimmer/plugins/autopeering/saltmanager"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/goshimmer/plugins/gossip"
- "github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
-)
-
-var INSTANCE *peer.Peer
-
-func Configure(plugin *node.Plugin) {
- INSTANCE = &peer.Peer{}
- INSTANCE.SetIdentity(accountability.OwnId())
- INSTANCE.SetPeeringPort(uint16(parameter.NodeConfig.GetInt(autopeering_params.CFG_PORT)))
- INSTANCE.SetGossipPort(uint16(parameter.NodeConfig.GetInt(gossip.GOSSIP_PORT)))
- INSTANCE.SetAddress(net.IPv4(0, 0, 0, 0))
- INSTANCE.SetSalt(saltmanager.PUBLIC_SALT)
-}
diff --git a/plugins/autopeering/instances/plugin.go b/plugins/autopeering/instances/plugin.go
deleted file mode 100644
index c1f02da20c..0000000000
--- a/plugins/autopeering/instances/plugin.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package instances
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/entrynodes"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/neighborhood"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/outgoingrequest"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/hive.go/node"
-)
-
-func Configure(plugin *node.Plugin) {
- ownpeer.Configure(plugin)
- entrynodes.Configure(plugin)
- knownpeers.Configure(plugin)
- neighborhood.Configure(plugin)
- outgoingrequest.Configure(plugin)
- chosenneighbors.Configure(plugin)
- acceptedneighbors.Configure(plugin)
-}
-
-func Run(plugin *node.Plugin) {
- neighborhood.Run(plugin)
-}
diff --git a/plugins/autopeering/local/local.go b/plugins/autopeering/local/local.go
new file mode 100644
index 0000000000..65c713311a
--- /dev/null
+++ b/plugins/autopeering/local/local.go
@@ -0,0 +1,89 @@
+package local
+
+import (
+ "crypto/ed25519"
+ "encoding/base64"
+ "net"
+ "strconv"
+ "strings"
+ "sync"
+
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer"
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer/service"
+ "github.com/iotaledger/goshimmer/packages/database"
+ "github.com/iotaledger/goshimmer/packages/netutil"
+ "github.com/iotaledger/goshimmer/packages/parameter"
+ "github.com/iotaledger/hive.go/logger"
+)
+
+var (
+ instance *peer.Local
+ once sync.Once
+)
+
+func configureLocal() *peer.Local {
+ log := logger.NewLogger("Local")
+
+ var externalIP net.IP
+ if str := parameter.NodeConfig.GetString(CFG_EXTERNAL); strings.ToLower(str) == "auto" {
+ log.Info("Querying external IP ...")
+ ip, err := netutil.GetPublicIP(false)
+ if err != nil {
+ log.Fatalf("Error querying external IP: %s", err)
+ }
+ log.Infof("External IP queried: address=%s", ip.String())
+ externalIP = ip
+ } else {
+ externalIP = net.ParseIP(str)
+ if externalIP == nil {
+ log.Fatalf("Invalid IP address (%s): %s", CFG_EXTERNAL, str)
+ }
+ }
+ if !externalIP.IsGlobalUnicast() {
+ log.Fatalf("IP is not a global unicast address: %s", externalIP.String())
+ }
+
+ peeringPort := strconv.Itoa(parameter.NodeConfig.GetInt(CFG_PORT))
+
+ // announce the peering service
+ services := service.New()
+ services.Update(service.PeeringKey, "udp", net.JoinHostPort(externalIP.String(), peeringPort))
+
+ // the private key seed of the current local can be returned the following way:
+ // key, _ := db.LocalPrivateKey()
+ // fmt.Println(base64.StdEncoding.EncodeToString(ed25519.PrivateKey(key).Seed()))
+
+ // set the private key from the seed provided in the config
+ var seed [][]byte
+ if str := parameter.NodeConfig.GetString(CFG_SEED); str != "" {
+ bytes, err := base64.StdEncoding.DecodeString(str)
+ if err != nil {
+ log.Fatalf("Invalid %s: %s", CFG_SEED, err)
+ }
+ if l := len(bytes); l != ed25519.SeedSize {
+ log.Fatalf("Invalid %s length: %d, need %d", CFG_SEED, l, ed25519.SeedSize)
+ }
+ seed = append(seed, bytes)
+ }
+ badgerDB, err := database.Get(database.DBPrefixAutoPeering, database.GetBadgerInstance())
+ if err != nil {
+ log.Fatalf("Error loading DB: %s", err)
+ }
+ peerDB, err := peer.NewDB(badgerDB)
+ if err != nil {
+ log.Fatalf("Error creating peer DB: %s", err)
+ }
+
+ local, err := peer.NewLocal(services, peerDB, seed...)
+ if err != nil {
+ log.Fatalf("Error creating local: %s", err)
+ }
+ log.Infof("Initialized local: %v", local)
+
+ return local
+}
+
+func GetInstance() *peer.Local {
+ once.Do(func() { instance = configureLocal() })
+ return instance
+}
diff --git a/plugins/autopeering/local/parameters.go b/plugins/autopeering/local/parameters.go
new file mode 100644
index 0000000000..9ffa15c81f
--- /dev/null
+++ b/plugins/autopeering/local/parameters.go
@@ -0,0 +1,19 @@
+package local
+
+import (
+ flag "github.com/spf13/pflag"
+)
+
+const (
+ CFG_BIND = "network.bindAddress"
+ CFG_EXTERNAL = "network.externalAddress"
+ CFG_PORT = "autopeering.port"
+ CFG_SEED = "autopeering.seed"
+)
+
+func init() {
+ flag.String(CFG_BIND, "0.0.0.0", "bind address for global services such as autopeering and gossip")
+ flag.String(CFG_EXTERNAL, "auto", "external IP address under which the node is reachable; or 'auto' to determine it automatically")
+ flag.Int(CFG_PORT, 14626, "UDP port for incoming peering requests")
+ flag.BytesBase64(CFG_SEED, nil, "private key seed used to derive the node identity; optional Base64 encoded 256-bit string")
+}
diff --git a/plugins/autopeering/parameters.go b/plugins/autopeering/parameters.go
new file mode 100644
index 0000000000..138b8d56e4
--- /dev/null
+++ b/plugins/autopeering/parameters.go
@@ -0,0 +1,13 @@
+package autopeering
+
+import (
+ flag "github.com/spf13/pflag"
+)
+
+const (
+ CFG_ENTRY_NODES = "autopeering.entryNodes"
+)
+
+func init() {
+ flag.StringSlice(CFG_ENTRY_NODES, []string{"V8LYtWWcPYYDTTXLeIEFjJEuWlsjDiI0+Pq/Cx9ai6g=@116.202.49.178:14626"}, "list of trusted entry nodes for auto peering")
+}
diff --git a/plugins/autopeering/parameters/parameters.go b/plugins/autopeering/parameters/parameters.go
deleted file mode 100644
index 9903d1db5d..0000000000
--- a/plugins/autopeering/parameters/parameters.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package parameters
-
-import (
- flag "github.com/spf13/pflag"
-)
-
-const (
- CFG_ADDRESS = "autopeering.address"
- CFG_ENTRY_NODES = "autopeering.entryNodes"
- CFG_PORT = "autopeering.port"
- CFG_ACCEPT_REQUESTS = "autopeering.acceptRequests"
- CFG_SEND_REQUESTS = "autopeering.sendRequests"
-)
-
-func init() {
- flag.String(CFG_ADDRESS, "0.0.0.0", "address to bind for incoming peering requests")
- flag.String(CFG_ENTRY_NODES, "7f7a876a4236091257e650da8dcf195fbe3cb625@159.69.158.51:14626", "list of trusted entry nodes for auto peering")
- flag.Int(CFG_PORT, 14626, "tcp port for incoming peering requests")
- flag.Bool(CFG_ACCEPT_REQUESTS, true, "accept incoming autopeering requests")
- flag.Bool(CFG_SEND_REQUESTS, true, "send autopeering requests")
-}
diff --git a/plugins/autopeering/peerstorage/peerstorage.go b/plugins/autopeering/peerstorage/peerstorage.go
deleted file mode 100644
index 3aa0b2a26b..0000000000
--- a/plugins/autopeering/peerstorage/peerstorage.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package peerstorage
-
-import (
- "bytes"
- "sync"
-
- "github.com/iotaledger/goshimmer/packages/database"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/logger"
- "github.com/iotaledger/hive.go/node"
-)
-
-const peerDbName string = "peers"
-
-var log = logger.NewLogger("Autopeering-Peerstorage")
-
-var peerDb database.Database
-var once sync.Once
-
-func initDb() {
- db, err := database.Get(peerDbName)
- if err != nil {
- panic(err)
- }
-
- peerDb = db
-}
-
-func getDb() database.Database {
- once.Do(initDb)
-
- return peerDb
-}
-
-func storePeer(p *peer.Peer) {
- err := getDb().Set(p.GetIdentity().Identifier, p.Marshal())
- if err != nil {
- panic(err)
- }
-}
-
-func removePeer(p *peer.Peer) {
- err := getDb().Delete(p.GetIdentity().Identifier)
- if err != nil {
- panic(err)
- }
-}
-
-func loadPeers(plugin *node.Plugin) {
- var count int
-
- err := getDb().ForEach(func(key []byte, value []byte) {
- peer, err := peer.Unmarshal(value)
- if err != nil {
- panic(err)
- }
- // the peers are stored by identifier in the db
- if !bytes.Equal(key, peer.GetIdentity().Identifier) {
- panic("Invalid item in '" + peerDbName + "' database")
- }
-
- knownpeers.INSTANCE.AddOrUpdate(peer)
- count++
- log.Debugf("Added stored peer: %s / %s", peer.GetAddress().String(), peer.GetIdentity().StringIdentifier)
- })
- if err != nil {
- panic(err)
- }
-
- log.Infof("Restored %d peers from database", count)
-}
-
-func Configure(plugin *node.Plugin) {
- // do not store the entry nodes by ignoring all peers currently contained in konwnpeers
- // add peers from db
- loadPeers(plugin)
-
- // subscribe to all known peers' events
- knownpeers.INSTANCE.Events.Add.Attach(events.NewClosure(func(p *peer.Peer) {
- storePeer(p)
- }))
- knownpeers.INSTANCE.Events.Update.Attach(events.NewClosure(func(p *peer.Peer) {
- storePeer(p)
- }))
- knownpeers.INSTANCE.Events.Remove.Attach(events.NewClosure(func(p *peer.Peer) {
- removePeer(p)
- }))
-}
diff --git a/plugins/autopeering/plugin.go b/plugins/autopeering/plugin.go
index 86b8a749da..4688b6b0d7 100644
--- a/plugins/autopeering/plugin.go
+++ b/plugins/autopeering/plugin.go
@@ -1,81 +1,66 @@
package autopeering
import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/peerstorage"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol"
- "github.com/iotaledger/goshimmer/plugins/autopeering/saltmanager"
- "github.com/iotaledger/goshimmer/plugins/autopeering/server"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/goshimmer/plugins/gossip"
+ "time"
+
+ "github.com/iotaledger/goshimmer/packages/autopeering/discover"
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer"
+ "github.com/iotaledger/goshimmer/packages/autopeering/selection"
+ "github.com/iotaledger/goshimmer/packages/gossip"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
"github.com/iotaledger/hive.go/daemon"
"github.com/iotaledger/hive.go/events"
"github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/node"
)
-var PLUGIN = node.NewPlugin("Auto Peering", node.Enabled, configure, run)
-var log = logger.NewLogger("Autopeering")
+const name = "Autopeering" // name of the plugin
-func configure(plugin *node.Plugin) {
- saltmanager.Configure(plugin)
- instances.Configure(plugin)
- server.Configure(plugin)
- protocol.Configure(plugin)
- peerstorage.Configure(plugin)
+var PLUGIN = node.NewPlugin(name, node.Enabled, configure, run)
- daemon.Events.Shutdown.Attach(events.NewClosure(func() {
- server.Shutdown(plugin)
- }))
+func configure(*node.Plugin) {
+ log = logger.NewLogger(name)
- configureLogging(plugin)
+ configureEvents()
+ configureAP()
}
-func run(plugin *node.Plugin) {
- instances.Run(plugin)
- server.Run(plugin)
- protocol.Run(plugin)
+func run(*node.Plugin) {
+ if err := daemon.BackgroundWorker(name, start, shutdown.ShutdownPriorityAutopeering); err != nil {
+ log.Errorf("Failed to start as daemon: %s", err)
+ }
}
-func configureLogging(plugin *node.Plugin) {
- gossip.Events.RemoveNeighbor.Attach(events.NewClosure(func(peer *gossip.Neighbor) {
- chosenneighbors.INSTANCE.Remove(peer.GetIdentity().StringIdentifier)
- acceptedneighbors.INSTANCE.Remove(peer.GetIdentity().StringIdentifier)
- }))
-
- acceptedneighbors.INSTANCE.Events.Add.Attach(events.NewClosure(func(p *peer.Peer) {
- log.Debugf("accepted neighbor added: %s / %s", p.GetAddress().String(), p.GetIdentity().StringIdentifier)
- gossip.AddNeighbor(gossip.NewNeighbor(p.GetIdentity(), p.GetAddress(), p.GetGossipPort()))
+func configureEvents() {
+ // notify the selection when a connection is closed or failed.
+ gossip.Events.ConnectionFailed.Attach(events.NewClosure(func(p *peer.Peer) {
+ Selection.RemoveNeighbor(p.ID())
}))
- acceptedneighbors.INSTANCE.Events.Remove.Attach(events.NewClosure(func(p *peer.Peer) {
- log.Debugf("accepted neighbor removed: %s / %s", p.GetAddress().String(), p.GetIdentity().StringIdentifier)
- gossip.RemoveNeighbor(p.GetIdentity().StringIdentifier)
+ gossip.Events.NeighborRemoved.Attach(events.NewClosure(func(p *peer.Peer) {
+ Selection.RemoveNeighbor(p.ID())
}))
- chosenneighbors.INSTANCE.Events.Add.Attach(events.NewClosure(func(p *peer.Peer) {
- log.Debugf("chosen neighbor added: %s / %s", p.GetAddress().String(), p.GetIdentity().StringIdentifier)
- gossip.AddNeighbor(gossip.NewNeighbor(p.GetIdentity(), p.GetAddress(), p.GetGossipPort()))
+ discover.Events.PeerDiscovered.Attach(events.NewClosure(func(ev *discover.DiscoveredEvent) {
+ log.Infof("Discovered: %s / %s", ev.Peer.Address(), ev.Peer.ID())
}))
- chosenneighbors.INSTANCE.Events.Remove.Attach(events.NewClosure(func(p *peer.Peer) {
- log.Debugf("chosen neighbor removed: %s / %s", p.GetAddress().String(), p.GetIdentity().StringIdentifier)
- gossip.RemoveNeighbor(p.GetIdentity().StringIdentifier)
+ discover.Events.PeerDeleted.Attach(events.NewClosure(func(ev *discover.DeletedEvent) {
+ log.Infof("Removed offline: %s / %s", ev.Peer.Address(), ev.Peer.ID())
}))
- knownpeers.INSTANCE.Events.Add.Attach(events.NewClosure(func(p *peer.Peer) {
- log.Infof("new peer discovered: %s / %s", p.GetAddress().String(), p.GetIdentity().StringIdentifier)
-
- if _, exists := gossip.GetNeighbor(p.GetIdentity().StringIdentifier); exists {
- gossip.AddNeighbor(gossip.NewNeighbor(p.GetIdentity(), p.GetAddress(), p.GetGossipPort()))
+ selection.Events.SaltUpdated.Attach(events.NewClosure(func(ev *selection.SaltUpdatedEvent) {
+ log.Infof("Salt updated; expires=%s", ev.Public.GetExpiration().Format(time.RFC822))
+ }))
+ selection.Events.OutgoingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) {
+ if ev.Status {
+ log.Infof("Peering chosen: %s / %s", ev.Peer.Address(), ev.Peer.ID())
}
}))
- knownpeers.INSTANCE.Events.Update.Attach(events.NewClosure(func(p *peer.Peer) {
- log.Infof("peer updated: %s / %s", p.GetAddress().String(), p.GetIdentity().StringIdentifier)
-
- if _, exists := gossip.GetNeighbor(p.GetIdentity().StringIdentifier); exists {
- gossip.AddNeighbor(gossip.NewNeighbor(p.GetIdentity(), p.GetAddress(), p.GetGossipPort()))
+ selection.Events.IncomingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) {
+ if ev.Status {
+ log.Infof("Peering accepted: %s / %s", ev.Peer.Address(), ev.Peer.ID())
}
}))
+ selection.Events.Dropped.Attach(events.NewClosure(func(ev *selection.DroppedEvent) {
+ log.Infof("Peering dropped: %s", ev.DroppedID)
+ }))
}
diff --git a/plugins/autopeering/protocol/accepted_neighbor_dropper.go b/plugins/autopeering/protocol/accepted_neighbor_dropper.go
deleted file mode 100644
index 056023f2d0..0000000000
--- a/plugins/autopeering/protocol/accepted_neighbor_dropper.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package protocol
-
-import (
- "time"
-
- "github.com/iotaledger/goshimmer/packages/timeutil"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/drop"
- "github.com/iotaledger/hive.go/node"
-)
-
-func createAcceptedNeighborDropper(plugin *node.Plugin) func() {
- return func() {
- timeutil.Ticker(func() {
- if acceptedneighbors.INSTANCE.Peers.Len() > constants.NEIGHBOR_COUNT/2 {
- defer acceptedneighbors.INSTANCE.Lock()()
- for acceptedneighbors.INSTANCE.Peers.Len() > constants.NEIGHBOR_COUNT/2 {
- acceptedneighbors.FurthestNeighborLock.RLock()
- furthestNeighbor := acceptedneighbors.FURTHEST_NEIGHBOR
- acceptedneighbors.FurthestNeighborLock.RUnlock()
-
- if furthestNeighbor != nil {
- dropMessage := &drop.Drop{Issuer: ownpeer.INSTANCE}
- dropMessage.Sign()
-
- acceptedneighbors.INSTANCE.Remove(furthestNeighbor.GetIdentity().StringIdentifier)
- go func() {
- if _, err := furthestNeighbor.Send(dropMessage.Marshal(), types.PROTOCOL_TYPE_UDP, false); err != nil {
- log.Debugf("error when sending drop message to %s", acceptedneighbors.FURTHEST_NEIGHBOR.String())
- }
- }()
- }
- }
- }
- }, 1*time.Second)
- }
-}
diff --git a/plugins/autopeering/protocol/chosen_neighbor_dropper.go b/plugins/autopeering/protocol/chosen_neighbor_dropper.go
deleted file mode 100644
index 4071d04efb..0000000000
--- a/plugins/autopeering/protocol/chosen_neighbor_dropper.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package protocol
-
-import (
- "time"
-
- "github.com/iotaledger/goshimmer/packages/timeutil"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/drop"
- "github.com/iotaledger/hive.go/node"
-)
-
-func createChosenNeighborDropper(plugin *node.Plugin) func() {
- return func() {
- timeutil.Ticker(func() {
- if chosenneighbors.INSTANCE.Peers.Len() > constants.NEIGHBOR_COUNT/2 {
- defer chosenneighbors.INSTANCE.Lock()()
- for chosenneighbors.INSTANCE.Peers.Len() > constants.NEIGHBOR_COUNT/2 {
- chosenneighbors.FurthestNeighborLock.RLock()
- furthestNeighbor := chosenneighbors.FURTHEST_NEIGHBOR
- chosenneighbors.FurthestNeighborLock.RUnlock()
-
- if furthestNeighbor != nil {
- dropMessage := &drop.Drop{Issuer: ownpeer.INSTANCE}
- dropMessage.Sign()
-
- chosenneighbors.INSTANCE.Remove(furthestNeighbor.GetIdentity().StringIdentifier)
- go func() {
- if _, err := furthestNeighbor.Send(dropMessage.Marshal(), types.PROTOCOL_TYPE_UDP, false); err != nil {
- log.Debugf("error when sending drop message to %s", chosenneighbors.FURTHEST_NEIGHBOR.String())
- }
- }()
- }
- }
- }
- }, 1*time.Second)
- }
-}
diff --git a/plugins/autopeering/protocol/constants/constants.go b/plugins/autopeering/protocol/constants/constants.go
deleted file mode 100644
index 10e60f30ca..0000000000
--- a/plugins/autopeering/protocol/constants/constants.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package constants
-
-import "time"
-
-const (
- NEIGHBOR_COUNT = 8
-
- FIND_NEIGHBOR_INTERVAL = 10 * time.Second
-
- // How often does the outgoing ping processor check if new pings should be sent.
- PING_PROCESS_INTERVAL = 1 * time.Second
-
- // The amount of times each neighbor should be contacted in this cycle.
- PING_CONTACT_COUNT_PER_CYCLE = 2
-
- // The length of a ping cycle (after this time we have sent randomized pings to all of our neighbors).
- PING_CYCLE_LENGTH = 900 * time.Second
-)
diff --git a/plugins/autopeering/protocol/error_handler.go b/plugins/autopeering/protocol/error_handler.go
deleted file mode 100644
index 71f22fcf88..0000000000
--- a/plugins/autopeering/protocol/error_handler.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package protocol
-
-import (
- "net"
-
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-func createErrorHandler(plugin *node.Plugin) *events.Closure {
- return events.NewClosure(func(ip net.IP, err error) {
- log.Debugf("error when communicating with %s: %s", ip.String(), err.Error())
- })
-}
diff --git a/plugins/autopeering/protocol/incoming_drop_processor.go b/plugins/autopeering/protocol/incoming_drop_processor.go
deleted file mode 100644
index 3ab80f3bb7..0000000000
--- a/plugins/autopeering/protocol/incoming_drop_processor.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package protocol
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/drop"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-func createIncomingDropProcessor(plugin *node.Plugin) *events.Closure {
- return events.NewClosure(func(drop *drop.Drop) {
- log.Debugf("received drop message from %s", drop.Issuer.String())
-
- chosenneighbors.INSTANCE.Remove(drop.Issuer.GetIdentity().StringIdentifier)
- acceptedneighbors.INSTANCE.Remove(drop.Issuer.GetIdentity().StringIdentifier)
- })
-}
diff --git a/plugins/autopeering/protocol/incoming_ping_processor.go b/plugins/autopeering/protocol/incoming_ping_processor.go
deleted file mode 100644
index ee52bf539e..0000000000
--- a/plugins/autopeering/protocol/incoming_ping_processor.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package protocol
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/ping"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-func createIncomingPingProcessor(plugin *node.Plugin) *events.Closure {
- return events.NewClosure(func(ping *ping.Ping) {
- log.Debugf("received ping from %s", ping.Issuer.String())
-
- knownpeers.INSTANCE.AddOrUpdate(ping.Issuer)
- for _, neighbor := range ping.Neighbors.GetPeers() {
- knownpeers.INSTANCE.AddOrUpdate(neighbor)
- }
- })
-}
diff --git a/plugins/autopeering/protocol/incoming_request_processor.go b/plugins/autopeering/protocol/incoming_request_processor.go
deleted file mode 100644
index 5a7fcd5e56..0000000000
--- a/plugins/autopeering/protocol/incoming_request_processor.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package protocol
-
-import (
- "math/rand"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/neighborhood"
- "github.com/iotaledger/goshimmer/plugins/autopeering/parameters"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerlist"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/request"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
-)
-
-func createIncomingRequestProcessor(plugin *node.Plugin) *events.Closure {
- return events.NewClosure(func(req *request.Request) {
- go processIncomingRequest(plugin, req)
- })
-}
-
-func processIncomingRequest(plugin *node.Plugin, req *request.Request) {
- log.Debugf("received peering request from %s", req.Issuer.String())
-
- knownpeers.INSTANCE.AddOrUpdate(req.Issuer)
-
- if parameter.NodeConfig.GetBool(parameters.CFG_ACCEPT_REQUESTS) && requestShouldBeAccepted(req) {
- defer acceptedneighbors.INSTANCE.Lock()()
-
- if requestShouldBeAccepted(req) {
- acceptedneighbors.INSTANCE.AddOrUpdate(req.Issuer)
-
- acceptRequest(plugin, req)
-
- return
- }
- }
-
- rejectRequest(plugin, req)
-}
-
-func requestShouldBeAccepted(req *request.Request) bool {
- return acceptedneighbors.INSTANCE.Peers.Len() < constants.NEIGHBOR_COUNT/2 ||
- acceptedneighbors.INSTANCE.Contains(req.Issuer.GetIdentity().StringIdentifier) ||
- acceptedneighbors.OWN_DISTANCE(req.Issuer) < acceptedneighbors.FURTHEST_NEIGHBOR_DISTANCE
-}
-
-func acceptRequest(plugin *node.Plugin, req *request.Request) {
- if err := req.Accept(generateProposedPeeringCandidates(req).GetPeers()); err != nil {
- log.Debugf("error when sending response to %s", req.Issuer.String())
- }
-
- log.Debugf("sent positive peering response to %s", req.Issuer.String())
-
- acceptedneighbors.INSTANCE.AddOrUpdate(req.Issuer)
-}
-
-func rejectRequest(plugin *node.Plugin, req *request.Request) {
- if err := req.Reject(generateProposedPeeringCandidates(req).GetPeers()); err != nil {
- log.Debugf("error when sending response to %s", req.Issuer.String())
- }
-
- log.Debugf("sent negative peering response to %s", req.Issuer.String())
-}
-
-func generateProposedPeeringCandidates(req *request.Request) *peerlist.PeerList {
- proposedPeers := neighborhood.LIST_INSTANCE.Filter(func(p *peer.Peer) bool {
- return p.GetIdentity().PublicKey != nil
- })
- rand.Shuffle(proposedPeers.Len(), func(i, j int) {
- proposedPeers.SwapPeers(i, j)
- })
-
- return proposedPeers
-}
diff --git a/plugins/autopeering/protocol/incoming_response_processor.go b/plugins/autopeering/protocol/incoming_response_processor.go
deleted file mode 100644
index 60b222c09f..0000000000
--- a/plugins/autopeering/protocol/incoming_response_processor.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package protocol
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/response"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-func createIncomingResponseProcessor(plugin *node.Plugin) *events.Closure {
- return events.NewClosure(func(peeringResponse *response.Response) {
- go processIncomingResponse(plugin, peeringResponse)
- })
-}
-
-func processIncomingResponse(plugin *node.Plugin, peeringResponse *response.Response) {
- log.Debugf("received peering response from %s", peeringResponse.Issuer.String())
-
- if conn := peeringResponse.Issuer.GetConn(); conn != nil {
- _ = conn.Close()
- }
-
- knownpeers.INSTANCE.AddOrUpdate(peeringResponse.Issuer)
- for _, peer := range peeringResponse.Peers {
- knownpeers.INSTANCE.AddOrUpdate(peer)
- }
-
- if peeringResponse.Type == response.TYPE_ACCEPT {
- defer chosenneighbors.INSTANCE.Lock()()
-
- chosenneighbors.INSTANCE.AddOrUpdate(peeringResponse.Issuer)
- }
-}
diff --git a/plugins/autopeering/protocol/outgoing_ping_processor.go b/plugins/autopeering/protocol/outgoing_ping_processor.go
deleted file mode 100644
index 1aa0dafcd6..0000000000
--- a/plugins/autopeering/protocol/outgoing_ping_processor.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package protocol
-
-import (
- "math/rand"
- "time"
-
- "github.com/iotaledger/goshimmer/packages/accountability"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/neighborhood"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types"
- "github.com/iotaledger/goshimmer/plugins/autopeering/saltmanager"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/ping"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-var lastPing time.Time
-
-func createOutgoingPingProcessor(plugin *node.Plugin) func() {
- return func() {
- log.Info("Starting Ping Processor ...")
- log.Info("Starting Ping Processor ... done")
-
- lastPing = time.Now().Add(-constants.PING_CYCLE_LENGTH)
-
- outgoingPing := &ping.Ping{
- Issuer: ownpeer.INSTANCE,
- }
- outgoingPing.Sign()
-
- saltmanager.Events.UpdatePublicSalt.Attach(events.NewClosure(func(salt *salt.Salt) {
- outgoingPing.Sign()
- }))
-
- pingPeers(plugin, outgoingPing)
-
- ticker := time.NewTicker(constants.PING_PROCESS_INTERVAL)
- ticker:
- for {
- select {
- case <-daemon.ShutdownSignal:
- log.Info("Stopping Ping Processor ...")
-
- break ticker
- case <-ticker.C:
- pingPeers(plugin, outgoingPing)
- }
- }
-
- log.Info("Stopping Ping Processor ... done")
- }
-}
-
-func pingPeers(plugin *node.Plugin, outgoingPing *ping.Ping) {
- if neighborhood.LIST_INSTANCE.Len() >= 1 {
- pingDelay := constants.PING_CYCLE_LENGTH / time.Duration(neighborhood.LIST_INSTANCE.Len())
-
- if lastPing.Add(pingDelay).Before(time.Now()) {
- chosenPeers := make(map[string]*peer.Peer)
-
- for i := 0; i < constants.PING_CONTACT_COUNT_PER_CYCLE; i++ {
- randomNeighborHoodPeer := neighborhood.LIST_INSTANCE.GetPeers()[rand.Intn(neighborhood.LIST_INSTANCE.Len())]
-
- if randomNeighborHoodPeer.GetIdentity().StringIdentifier != accountability.OwnId().StringIdentifier {
- chosenPeers[randomNeighborHoodPeer.GetIdentity().StringIdentifier] = randomNeighborHoodPeer
- }
- }
-
- for _, chosenPeer := range chosenPeers {
- go func(chosenPeer *peer.Peer) {
- if _, err := chosenPeer.Send(outgoingPing.Marshal(), types.PROTOCOL_TYPE_UDP, false); err != nil {
- log.Debugf("error when sending ping to %s: %s", chosenPeer.String(), err.Error())
- } else {
- log.Debugf("sent ping to %s", chosenPeer.String())
- }
- }(chosenPeer)
- }
-
- lastPing = time.Now()
- }
- }
-}
diff --git a/plugins/autopeering/protocol/outgoing_request_processor.go b/plugins/autopeering/protocol/outgoing_request_processor.go
deleted file mode 100644
index 8f6c3d7e15..0000000000
--- a/plugins/autopeering/protocol/outgoing_request_processor.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package protocol
-
-import (
- "time"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/outgoingrequest"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types"
- "github.com/iotaledger/goshimmer/plugins/autopeering/server/tcp"
-
- "github.com/iotaledger/goshimmer/packages/timeutil"
-
- "github.com/iotaledger/goshimmer/packages/accountability"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/node"
-)
-
-func createOutgoingRequestProcessor(plugin *node.Plugin) func() {
- return func() {
- log.Info("Starting Chosen Neighbor Processor ...")
- log.Info("Starting Chosen Neighbor Processor ... done")
-
- sendOutgoingRequests(plugin)
-
- ticker := time.NewTicker(constants.FIND_NEIGHBOR_INTERVAL)
- ticker:
- for {
- select {
- case <-daemon.ShutdownSignal:
- log.Info("Stopping Chosen Neighbor Processor ...")
-
- break ticker
- case <-ticker.C:
- sendOutgoingRequests(plugin)
- }
- }
-
- log.Info("Stopping Chosen Neighbor Processor ... done")
- }
-}
-
-func sendOutgoingRequests(plugin *node.Plugin) {
- for _, chosenNeighborCandidate := range chosenneighbors.CANDIDATES.GetPeers() {
- timeutil.Sleep(5 * time.Second)
-
- if candidateShouldBeContacted(chosenNeighborCandidate) {
- doneChan := make(chan int, 1)
-
- go func(doneChan chan int) {
- if dialed, err := chosenNeighborCandidate.Send(outgoingrequest.INSTANCE.Marshal(), types.PROTOCOL_TYPE_TCP, true); err != nil {
- log.Debug(err.Error())
- } else {
- log.Debugf("sent peering request to %s", chosenNeighborCandidate.String())
-
- if dialed {
- tcp.HandleConnection(chosenNeighborCandidate.GetConn())
- }
- }
-
- close(doneChan)
- }(doneChan)
-
- select {
- case <-daemon.ShutdownSignal:
- return
- case <-doneChan:
- continue
- }
- }
- }
-}
-
-func candidateShouldBeContacted(candidate *peer.Peer) bool {
- nodeId := candidate.GetIdentity().StringIdentifier
-
- chosenneighbors.FurthestNeighborLock.RLock()
- defer chosenneighbors.FurthestNeighborLock.RUnlock()
-
- return (!acceptedneighbors.INSTANCE.Contains(nodeId) && !chosenneighbors.INSTANCE.Contains(nodeId) &&
- accountability.OwnId().StringIdentifier != nodeId) && (chosenneighbors.INSTANCE.Peers.Len() < constants.NEIGHBOR_COUNT/2 ||
- chosenneighbors.OWN_DISTANCE(candidate) < chosenneighbors.FURTHEST_NEIGHBOR_DISTANCE)
-}
diff --git a/plugins/autopeering/protocol/plugin.go b/plugins/autopeering/protocol/plugin.go
deleted file mode 100644
index c026f2aa4a..0000000000
--- a/plugins/autopeering/protocol/plugin.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package protocol
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/parameters"
- "github.com/iotaledger/goshimmer/plugins/autopeering/server/tcp"
- "github.com/iotaledger/goshimmer/plugins/autopeering/server/udp"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/logger"
- "github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
-)
-
-var log = logger.NewLogger("Autopeering-Protocol")
-
-func Configure(plugin *node.Plugin) {
- errorHandler := createErrorHandler(plugin)
-
- udp.Events.ReceiveDrop.Attach(createIncomingDropProcessor(plugin))
- udp.Events.ReceivePing.Attach(createIncomingPingProcessor(plugin))
- udp.Events.Error.Attach(errorHandler)
-
- tcp.Events.ReceiveRequest.Attach(createIncomingRequestProcessor(plugin))
- tcp.Events.ReceiveResponse.Attach(createIncomingResponseProcessor(plugin))
- tcp.Events.Error.Attach(errorHandler)
-}
-
-func Run(plugin *node.Plugin) {
- daemon.BackgroundWorker("Autopeering Chosen Neighbor Dropper", createChosenNeighborDropper(plugin))
- daemon.BackgroundWorker("Autopeering Accepted Neighbor Dropper", createAcceptedNeighborDropper(plugin))
-
- if parameter.NodeConfig.GetBool(parameters.CFG_SEND_REQUESTS) {
- daemon.BackgroundWorker("Autopeering Outgoing Request Processor", createOutgoingRequestProcessor(plugin))
- }
-
- daemon.BackgroundWorker("Autopeering Outgoing Ping Processor", createOutgoingPingProcessor(plugin))
-}
diff --git a/plugins/autopeering/protocol/types/constants.go b/plugins/autopeering/protocol/types/constants.go
deleted file mode 100644
index a4dc301c99..0000000000
--- a/plugins/autopeering/protocol/types/constants.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package types
-
-const (
- PROTOCOL_TYPE_TCP = ProtocolType(0)
- PROTOCOL_TYPE_UDP = ProtocolType(1)
-
- ADDRESS_TYPE_IPV4 = AddressType(0)
- ADDRESS_TYPE_IPV6 = AddressType(1)
-)
diff --git a/plugins/autopeering/protocol/types/types.go b/plugins/autopeering/protocol/types/types.go
deleted file mode 100644
index 3b68f5dae3..0000000000
--- a/plugins/autopeering/protocol/types/types.go
+++ /dev/null
@@ -1,5 +0,0 @@
-package types
-
-type AddressType = byte
-
-type ProtocolType = byte
diff --git a/plugins/autopeering/saltmanager/constants.go b/plugins/autopeering/saltmanager/constants.go
deleted file mode 100644
index 4fe475f401..0000000000
--- a/plugins/autopeering/saltmanager/constants.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package saltmanager
-
-import "time"
-
-const (
- PUBLIC_SALT_LIFETIME = 1800 * time.Second
- PRIVATE_SALT_LIFETIME = 1800 * time.Second
-)
-
-var (
- PUBLIC_SALT_SETTINGS_KEY = []byte("PUBLIC_SALT")
- PRIVATE_SALT_SETTINGS_KEY = []byte("PRIVATE_SALT")
-)
diff --git a/plugins/autopeering/saltmanager/errors.go b/plugins/autopeering/saltmanager/errors.go
deleted file mode 100644
index 4436630107..0000000000
--- a/plugins/autopeering/saltmanager/errors.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package saltmanager
-
-import "github.com/pkg/errors"
-
-var (
- ErrPublicSaltExpired = errors.New("expired public salt in ping")
- ErrPublicSaltInvalidLifetime = errors.New("invalid public salt lifetime in ping")
-)
diff --git a/plugins/autopeering/saltmanager/events.go b/plugins/autopeering/saltmanager/events.go
deleted file mode 100644
index 5de771af08..0000000000
--- a/plugins/autopeering/saltmanager/events.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package saltmanager
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
- "github.com/iotaledger/hive.go/events"
-)
-
-var Events = struct {
- UpdatePublicSalt *events.Event
- UpdatePrivateSalt *events.Event
-}{
- UpdatePublicSalt: events.NewEvent(saltCaller),
- UpdatePrivateSalt: events.NewEvent(saltCaller),
-}
-
-func saltCaller(handler interface{}, params ...interface{}) {
- handler.(func(*salt.Salt))(params[0].(*salt.Salt))
-}
diff --git a/plugins/autopeering/saltmanager/saltmanager.go b/plugins/autopeering/saltmanager/saltmanager.go
deleted file mode 100644
index a8e47b7848..0000000000
--- a/plugins/autopeering/saltmanager/saltmanager.go
+++ /dev/null
@@ -1,88 +0,0 @@
-package saltmanager
-
-import (
- "time"
-
- "github.com/iotaledger/goshimmer/packages/database"
- "github.com/iotaledger/goshimmer/packages/settings"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/node"
-)
-
-var (
- PRIVATE_SALT *salt.Salt
- PUBLIC_SALT *salt.Salt
-)
-
-func Configure(plugin *node.Plugin) {
- PRIVATE_SALT = createSalt(PRIVATE_SALT_SETTINGS_KEY, PRIVATE_SALT_LIFETIME, Events.UpdatePrivateSalt.Trigger)
- PUBLIC_SALT = createSalt(PUBLIC_SALT_SETTINGS_KEY, PUBLIC_SALT_LIFETIME, Events.UpdatePublicSalt.Trigger)
-}
-
-func generateNewSalt(key []byte, lifetime time.Duration) *salt.Salt {
- newSalt := salt.New(lifetime)
-
- if err := settings.Set(key, newSalt.Marshal()); err != nil {
- panic(err)
- }
-
- return newSalt
-}
-
-func getSalt(key []byte, lifetime time.Duration) *salt.Salt {
- saltBytes, err := settings.Get(key)
- if err != nil {
- if err == database.ErrKeyNotFound {
- return generateNewSalt(key, lifetime)
- } else {
- panic(err)
- }
- }
-
- if resultingSalt, err := salt.Unmarshal(saltBytes); err != nil {
- panic(err)
- } else {
- return resultingSalt
- }
-}
-
-func updatePublicSalt(saltToUpdate *salt.Salt, settingsKey []byte, lifeSpan time.Duration, updateCallback func(params ...interface{})) {
- newSalt := salt.New(lifeSpan)
-
- saltToUpdate.SetBytes(newSalt.GetBytes())
- saltToUpdate.SetExpirationTime(newSalt.GetExpirationTime())
-
- if err := settings.Set(settingsKey, saltToUpdate.Marshal()); err != nil {
- panic(err)
- }
-
- updateCallback(saltToUpdate)
-
- scheduleUpdateForSalt(saltToUpdate, settingsKey, lifeSpan, updateCallback)
-}
-
-func scheduleUpdateForSalt(saltToUpdate *salt.Salt, settingsKey []byte, lifeSpan time.Duration, callback func(params ...interface{})) {
- now := time.Now()
-
- if saltToUpdate.GetExpirationTime().Before(now) {
- updatePublicSalt(saltToUpdate, settingsKey, lifeSpan, callback)
- } else {
- daemon.BackgroundWorker("Salt Updater", func() {
- select {
- case <-time.After(saltToUpdate.GetExpirationTime().Sub(now)):
- updatePublicSalt(saltToUpdate, settingsKey, lifeSpan, callback)
- case <-daemon.ShutdownSignal:
- return
- }
- })
- }
-}
-
-func createSalt(settingsKey []byte, lifeSpan time.Duration, updateCallback func(params ...interface{})) *salt.Salt {
- newSalt := getSalt(settingsKey, lifeSpan)
-
- scheduleUpdateForSalt(newSalt, settingsKey, lifeSpan, updateCallback)
-
- return newSalt
-}
diff --git a/plugins/autopeering/saltmanager/utils.go b/plugins/autopeering/saltmanager/utils.go
deleted file mode 100644
index cdbfca9581..0000000000
--- a/plugins/autopeering/saltmanager/utils.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package saltmanager
-
-import (
- "time"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
-)
-
-func CheckSalt(saltToCheck *salt.Salt) error {
- now := time.Now()
- if saltToCheck.GetExpirationTime().Before(now.Add(-1 * time.Minute)) {
- return ErrPublicSaltExpired
- }
- if saltToCheck.GetExpirationTime().After(now.Add(PUBLIC_SALT_LIFETIME + 1*time.Minute)) {
- return ErrPublicSaltInvalidLifetime
- }
-
- return nil
-}
diff --git a/plugins/autopeering/server/server.go b/plugins/autopeering/server/server.go
deleted file mode 100644
index d04941f25b..0000000000
--- a/plugins/autopeering/server/server.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package server
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/server/tcp"
- "github.com/iotaledger/goshimmer/plugins/autopeering/server/udp"
- "github.com/iotaledger/hive.go/node"
-)
-
-func Configure(plugin *node.Plugin) {
- udp.ConfigureServer(plugin)
- tcp.ConfigureServer(plugin)
-}
-
-func Run(plugin *node.Plugin) {
- udp.RunServer(plugin)
- tcp.RunServer(plugin)
-}
-
-func Shutdown(plugin *node.Plugin) {
- udp.ShutdownUDPServer(plugin)
- tcp.ShutdownServer(plugin)
-}
diff --git a/plugins/autopeering/server/tcp/constants.go b/plugins/autopeering/server/tcp/constants.go
deleted file mode 100644
index c108d820e1..0000000000
--- a/plugins/autopeering/server/tcp/constants.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package tcp
-
-import "time"
-
-const (
- IDLE_TIMEOUT = 5 * time.Second
-
- STATE_INITIAL = byte(0)
- STATE_REQUEST = byte(1)
- STATE_RESPONSE = byte(2)
- STATE_PING = byte(3)
-)
diff --git a/plugins/autopeering/server/tcp/events.go b/plugins/autopeering/server/tcp/events.go
deleted file mode 100644
index 3555257be9..0000000000
--- a/plugins/autopeering/server/tcp/events.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package tcp
-
-import (
- "net"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/ping"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/request"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/response"
- "github.com/iotaledger/hive.go/events"
-)
-
-var Events = struct {
- ReceivePing *events.Event
- ReceiveRequest *events.Event
- ReceiveResponse *events.Event
- Error *events.Event
-}{
- events.NewEvent(pingCaller),
- events.NewEvent(requestCaller),
- events.NewEvent(responseCaller),
- events.NewEvent(errorCaller),
-}
-
-func pingCaller(handler interface{}, params ...interface{}) {
- handler.(func(*ping.Ping))(params[0].(*ping.Ping))
-}
-func requestCaller(handler interface{}, params ...interface{}) {
- handler.(func(*request.Request))(params[0].(*request.Request))
-}
-func responseCaller(handler interface{}, params ...interface{}) {
- handler.(func(*response.Response))(params[0].(*response.Response))
-}
-func errorCaller(handler interface{}, params ...interface{}) {
- handler.(func(net.IP, error))(params[0].(net.IP), params[1].(error))
-}
diff --git a/plugins/autopeering/server/tcp/server.go b/plugins/autopeering/server/tcp/server.go
deleted file mode 100644
index 9ac9454e6a..0000000000
--- a/plugins/autopeering/server/tcp/server.go
+++ /dev/null
@@ -1,234 +0,0 @@
-package tcp
-
-import (
- "math"
- "net"
-
- "github.com/iotaledger/goshimmer/packages/network"
- "github.com/iotaledger/goshimmer/packages/network/tcp"
- "github.com/iotaledger/goshimmer/plugins/autopeering/parameters"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/ping"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/request"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/response"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/logger"
- "github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
- "github.com/pkg/errors"
-)
-
-var server = tcp.NewServer()
-var log = logger.NewLogger("Autopeering-TCPServer")
-
-func ConfigureServer(plugin *node.Plugin) {
- serverAddress := parameter.NodeConfig.GetString(parameters.CFG_ADDRESS)
- serverPort := parameter.NodeConfig.GetInt(parameters.CFG_PORT)
-
- server.Events.Connect.Attach(events.NewClosure(HandleConnection))
- server.Events.Error.Attach(events.NewClosure(func(err error) {
- log.Errorf("error in tcp server: %s", err.Error())
- }))
-
- server.Events.Start.Attach(events.NewClosure(func() {
- if serverAddress == "0.0.0.0" {
- log.Infof("Starting TCP Server (port %d) ... done", serverPort)
- } else {
- log.Infof("Starting TCP Server (%s:%d) ... done", serverAddress, serverPort)
- }
- }))
- server.Events.Shutdown.Attach(events.NewClosure(func() {
- log.Info("Stopping TCP Server ... done")
- }))
-}
-
-func RunServer(plugin *node.Plugin) {
- serverAddress := parameter.NodeConfig.GetString(parameters.CFG_ADDRESS)
- serverPort := parameter.NodeConfig.GetInt(parameters.CFG_PORT)
-
- daemon.BackgroundWorker("Autopeering TCP Server", func() {
- if serverAddress == "0.0.0.0" {
- log.Infof("Starting TCP Server (port %d) ...", serverPort)
- } else {
- log.Infof("Starting TCP Server (%s:%d) ...", serverAddress, serverPort)
- }
-
- server.Listen(parameter.NodeConfig.GetInt(parameters.CFG_PORT))
- })
-}
-
-func ShutdownServer(plugin *node.Plugin) {
- log.Info("Stopping TCP Server ...")
-
- server.Shutdown()
-}
-
-func HandleConnection(conn *network.ManagedConnection) {
- conn.SetTimeout(IDLE_TIMEOUT)
-
- var connectionState = STATE_INITIAL
- var receiveBuffer []byte
- var offset int
-
- conn.Events.ReceiveData.Attach(events.NewClosure(func(data []byte) {
- ProcessIncomingPacket(&connectionState, &receiveBuffer, conn, data, &offset)
- }))
-
- go conn.Read(make([]byte, int(math.Max(ping.MARSHALED_TOTAL_SIZE, math.Max(request.MARSHALED_TOTAL_SIZE, response.MARSHALED_TOTAL_SIZE)))))
-}
-
-func ProcessIncomingPacket(connectionState *byte, receiveBuffer *[]byte, conn *network.ManagedConnection, data []byte, offset *int) {
- if *connectionState == STATE_INITIAL {
- var err error
- if *connectionState, *receiveBuffer, err = parsePackageHeader(data); err != nil {
- Events.Error.Trigger(conn.RemoteAddr().(*net.TCPAddr).IP, err)
-
- conn.Close()
-
- return
- }
-
- *offset = 0
-
- switch *connectionState {
- case STATE_REQUEST:
- *receiveBuffer = make([]byte, request.MARSHALED_TOTAL_SIZE)
- case STATE_RESPONSE:
- *receiveBuffer = make([]byte, response.MARSHALED_TOTAL_SIZE)
- case STATE_PING:
- *receiveBuffer = make([]byte, ping.MARSHALED_TOTAL_SIZE)
- }
- }
-
- switch *connectionState {
- case STATE_REQUEST:
- processIncomingRequestPacket(connectionState, receiveBuffer, conn, data, offset)
- case STATE_RESPONSE:
- processIncomingResponsePacket(connectionState, receiveBuffer, conn, data, offset)
- case STATE_PING:
- processIncomingPingPacket(connectionState, receiveBuffer, conn, data, offset)
- }
-}
-
-func parsePackageHeader(data []byte) (byte, []byte, error) {
- var connectionState byte
- var receiveBuffer []byte
-
- switch data[0] {
- case request.MARSHALED_PACKET_HEADER:
- receiveBuffer = make([]byte, request.MARSHALED_TOTAL_SIZE)
-
- connectionState = STATE_REQUEST
- case response.MARHSALLED_PACKET_HEADER:
- receiveBuffer = make([]byte, response.MARSHALED_TOTAL_SIZE)
-
- connectionState = STATE_RESPONSE
- case ping.MARSHALED_PACKET_HEADER:
- receiveBuffer = make([]byte, ping.MARSHALED_TOTAL_SIZE)
-
- connectionState = STATE_PING
- default:
- return 0, nil, errors.New("invalid package header")
- }
-
- return connectionState, receiveBuffer, nil
-}
-
-func processIncomingRequestPacket(connectionState *byte, receiveBuffer *[]byte, conn *network.ManagedConnection, data []byte, offset *int) {
- remainingCapacity := int(math.Min(float64(request.MARSHALED_TOTAL_SIZE-*offset), float64(len(data))))
-
- copy((*receiveBuffer)[*offset:], data[:remainingCapacity])
-
- if *offset+len(data) < request.MARSHALED_TOTAL_SIZE {
- *offset += len(data)
- } else {
- if req, err := request.Unmarshal(*receiveBuffer); err != nil {
- Events.Error.Trigger(conn.RemoteAddr().(*net.TCPAddr).IP, err)
-
- conn.Close()
-
- return
- } else {
- req.Issuer.SetConn(conn)
- req.Issuer.SetAddress(conn.RemoteAddr().(*net.TCPAddr).IP)
-
- conn.Events.Close.Attach(events.NewClosure(func() {
- req.Issuer.SetConn(nil)
- }))
-
- Events.ReceiveRequest.Trigger(req)
- }
-
- *connectionState = STATE_INITIAL
-
- if *offset+len(data) > request.MARSHALED_TOTAL_SIZE {
- ProcessIncomingPacket(connectionState, receiveBuffer, conn, data[remainingCapacity:], offset)
- }
- }
-}
-
-func processIncomingResponsePacket(connectionState *byte, receiveBuffer *[]byte, conn *network.ManagedConnection, data []byte, offset *int) {
- remainingCapacity := int(math.Min(float64(response.MARSHALED_TOTAL_SIZE-*offset), float64(len(data))))
-
- copy((*receiveBuffer)[*offset:], data[:remainingCapacity])
-
- if *offset+len(data) < response.MARSHALED_TOTAL_SIZE {
- *offset += len(data)
- } else {
- if res, err := response.Unmarshal(*receiveBuffer); err != nil {
- Events.Error.Trigger(conn.RemoteAddr().(*net.TCPAddr).IP, err)
-
- conn.Close()
-
- return
- } else {
- res.Issuer.SetConn(conn)
- res.Issuer.SetAddress(conn.RemoteAddr().(*net.TCPAddr).IP)
-
- conn.Events.Close.Attach(events.NewClosure(func() {
- res.Issuer.SetConn(nil)
- }))
-
- Events.ReceiveResponse.Trigger(res)
- }
-
- *connectionState = STATE_INITIAL
-
- if *offset+len(data) > response.MARSHALED_TOTAL_SIZE {
- ProcessIncomingPacket(connectionState, receiveBuffer, conn, data[remainingCapacity:], offset)
- }
- }
-}
-
-func processIncomingPingPacket(connectionState *byte, receiveBuffer *[]byte, conn *network.ManagedConnection, data []byte, offset *int) {
- remainingCapacity := int(math.Min(float64(ping.MARSHALED_TOTAL_SIZE-*offset), float64(len(data))))
-
- copy((*receiveBuffer)[*offset:], data[:remainingCapacity])
-
- if *offset+len(data) < ping.MARSHALED_TOTAL_SIZE {
- *offset += len(data)
- } else {
- if ping, err := ping.Unmarshal(*receiveBuffer); err != nil {
- Events.Error.Trigger(conn.RemoteAddr().(*net.TCPAddr).IP, err)
-
- conn.Close()
-
- return
- } else {
- ping.Issuer.SetConn(conn)
- ping.Issuer.SetAddress(conn.RemoteAddr().(*net.TCPAddr).IP)
-
- conn.Events.Close.Attach(events.NewClosure(func() {
- ping.Issuer.SetConn(nil)
- }))
-
- Events.ReceivePing.Trigger(ping)
- }
-
- *connectionState = STATE_INITIAL
-
- if *offset+len(data) > ping.MARSHALED_TOTAL_SIZE {
- ProcessIncomingPacket(connectionState, receiveBuffer, conn, data[remainingCapacity:], offset)
- }
- }
-}
diff --git a/plugins/autopeering/server/udp/events.go b/plugins/autopeering/server/udp/events.go
deleted file mode 100644
index b7ca2e3301..0000000000
--- a/plugins/autopeering/server/udp/events.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package udp
-
-import (
- "net"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/drop"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/ping"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/request"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/response"
- "github.com/iotaledger/hive.go/events"
-)
-
-var Events = struct {
- ReceiveDrop *events.Event
- ReceivePing *events.Event
- ReceiveRequest *events.Event
- ReceiveResponse *events.Event
- Error *events.Event
-}{
- events.NewEvent(dropCaller),
- events.NewEvent(pingCaller),
- events.NewEvent(requestCaller),
- events.NewEvent(responseCaller),
- events.NewEvent(errorCaller),
-}
-
-func dropCaller(handler interface{}, params ...interface{}) {
- handler.(func(*drop.Drop))(params[0].(*drop.Drop))
-}
-func pingCaller(handler interface{}, params ...interface{}) {
- handler.(func(*ping.Ping))(params[0].(*ping.Ping))
-}
-func requestCaller(handler interface{}, params ...interface{}) {
- handler.(func(*request.Request))(params[0].(*request.Request))
-}
-func responseCaller(handler interface{}, params ...interface{}) {
- handler.(func(*response.Response))(params[0].(*response.Response))
-}
-func errorCaller(handler interface{}, params ...interface{}) {
- handler.(func(net.IP, error))(params[0].(net.IP), params[1].(error))
-}
diff --git a/plugins/autopeering/server/udp/server.go b/plugins/autopeering/server/udp/server.go
deleted file mode 100644
index b351d8ca3b..0000000000
--- a/plugins/autopeering/server/udp/server.go
+++ /dev/null
@@ -1,106 +0,0 @@
-package udp
-
-import (
- "math"
- "net"
-
- "github.com/iotaledger/goshimmer/packages/network/udp"
- "github.com/iotaledger/goshimmer/plugins/autopeering/parameters"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/drop"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/ping"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/request"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/response"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/logger"
- "github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
- "github.com/pkg/errors"
-)
-
-var udpServer = udp.NewServer(int(math.Max(float64(request.MARSHALED_TOTAL_SIZE), float64(response.MARSHALED_TOTAL_SIZE))))
-var log = logger.NewLogger("Autopeering-UDPServer")
-
-func ConfigureServer(plugin *node.Plugin) {
- serverAddress := parameter.NodeConfig.GetString(parameters.CFG_ADDRESS)
- serverPort := parameter.NodeConfig.GetInt(parameters.CFG_PORT)
-
- Events.Error.Attach(events.NewClosure(func(ip net.IP, err error) {
- log.Error(err.Error())
- }))
-
- udpServer.Events.ReceiveData.Attach(events.NewClosure(processReceivedData))
- udpServer.Events.Error.Attach(events.NewClosure(func(err error) {
- log.Errorf("error in udp server: %s", err.Error())
- }))
- udpServer.Events.Start.Attach(events.NewClosure(func() {
- if serverAddress == "0.0.0.0" {
- log.Infof("Starting UDP Server (port %d) ... done", serverPort)
- } else {
- log.Infof("Starting UDP Server (%s:%d) ... done", serverAddress, serverPort)
- }
- }))
- udpServer.Events.Shutdown.Attach(events.NewClosure(func() {
- log.Info("Stopping UDP Server ... done")
- }))
-}
-
-func RunServer(plugin *node.Plugin) {
- serverAddress := parameter.NodeConfig.GetString(parameters.CFG_ADDRESS)
- serverPort := parameter.NodeConfig.GetInt(parameters.CFG_PORT)
-
- daemon.BackgroundWorker("Autopeering UDP Server", func() {
- if serverAddress == "0.0.0.0" {
- log.Infof("Starting UDP Server (port %d) ...", serverPort)
- } else {
- log.Infof("Starting UDP Server (%s:%d) ...", serverAddress, serverPort)
- }
-
- udpServer.Listen(serverAddress, parameter.NodeConfig.GetInt(parameters.CFG_PORT))
- })
-}
-
-func ShutdownUDPServer(plugin *node.Plugin) {
- log.Info("Stopping UDP Server ...")
-
- udpServer.Shutdown()
-}
-
-func processReceivedData(addr *net.UDPAddr, data []byte) {
- switch data[0] {
- case request.MARSHALED_PACKET_HEADER:
- if peeringRequest, err := request.Unmarshal(data); err != nil {
- Events.Error.Trigger(addr.IP, err)
- } else {
- peeringRequest.Issuer.SetAddress(addr.IP)
-
- Events.ReceiveRequest.Trigger(peeringRequest)
- }
- case response.MARHSALLED_PACKET_HEADER:
- if peeringResponse, err := response.Unmarshal(data); err != nil {
- Events.Error.Trigger(addr.IP, err)
- } else {
- peeringResponse.Issuer.SetAddress(addr.IP)
-
- Events.ReceiveResponse.Trigger(peeringResponse)
- }
- case ping.MARSHALED_PACKET_HEADER:
- if ping, err := ping.Unmarshal(data); err != nil {
- Events.Error.Trigger(addr.IP, err)
- } else {
- ping.Issuer.SetAddress(addr.IP)
-
- Events.ReceivePing.Trigger(ping)
- }
- case drop.MARSHALED_PACKET_HEADER:
- if drop, err := drop.Unmarshal(data); err != nil {
- Events.Error.Trigger(addr.IP, err)
- } else {
- drop.Issuer.SetAddress(addr.IP)
-
- Events.ReceiveDrop.Trigger(drop)
- }
- default:
- Events.Error.Trigger(addr.IP, errors.New("invalid UDP peering packet from "+addr.IP.String()))
- }
-}
diff --git a/plugins/autopeering/types/drop/constants.go b/plugins/autopeering/types/drop/constants.go
deleted file mode 100644
index b12728d748..0000000000
--- a/plugins/autopeering/types/drop/constants.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package drop
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-const (
- MARSHALED_PACKET_HEADER = 0x05
-
- PACKET_HEADER_START = 0
- MARSHALED_ISSUER_START = PACKET_HEADER_END
- MARSHALED_SIGNATURE_START = MARSHALED_ISSUER_END
-
- PACKET_HEADER_END = PACKET_HEADER_START + PACKET_HEADER_SIZE
- MARSHALED_ISSUER_END = MARSHALED_ISSUER_START + MARSHALED_ISSUER_SIZE
- MARSHALED_SIGNATURE_END = MARSHALED_SIGNATURE_START + MARSHALED_SIGNATURE_SIZE
-
- PACKET_HEADER_SIZE = 1
- MARSHALED_ISSUER_SIZE = peer.MARSHALED_TOTAL_SIZE
- MARSHALED_SIGNATURE_SIZE = 65
-
- MARSHALED_TOTAL_SIZE = MARSHALED_SIGNATURE_END
-)
diff --git a/plugins/autopeering/types/drop/drop.go b/plugins/autopeering/types/drop/drop.go
deleted file mode 100644
index 99ebf8773c..0000000000
--- a/plugins/autopeering/types/drop/drop.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package drop
-
-import (
- "bytes"
-
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/plugins/autopeering/saltmanager"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-type Drop struct {
- Issuer *peer.Peer
- Signature [MARSHALED_SIGNATURE_SIZE]byte
-}
-
-func Unmarshal(data []byte) (*Drop, error) {
- if data[0] != MARSHALED_PACKET_HEADER || len(data) != MARSHALED_TOTAL_SIZE {
- return nil, ErrMalformedDropMessage
- }
-
- ping := &Drop{}
-
- if unmarshaledPeer, err := peer.Unmarshal(data[MARSHALED_ISSUER_START:MARSHALED_ISSUER_END]); err != nil {
- return nil, err
- } else {
- ping.Issuer = unmarshaledPeer
- }
- if err := saltmanager.CheckSalt(ping.Issuer.GetSalt()); err != nil {
- return nil, err
- }
-
- if issuer, err := identity.FromSignedData(data[:MARSHALED_SIGNATURE_START], data[MARSHALED_SIGNATURE_START:]); err != nil {
- return nil, err
- } else {
- if !bytes.Equal(issuer.Identifier, ping.Issuer.GetIdentity().Identifier) {
- return nil, ErrInvalidSignature
- }
- }
- copy(ping.Signature[:], data[MARSHALED_SIGNATURE_START:MARSHALED_SIGNATURE_END])
-
- return ping, nil
-}
-
-func (ping *Drop) Marshal() []byte {
- result := make([]byte, MARSHALED_TOTAL_SIZE)
-
- result[PACKET_HEADER_START] = MARSHALED_PACKET_HEADER
- copy(result[MARSHALED_ISSUER_START:MARSHALED_ISSUER_END], ping.Issuer.Marshal())
- copy(result[MARSHALED_SIGNATURE_START:MARSHALED_SIGNATURE_END], ping.Signature[:MARSHALED_SIGNATURE_SIZE])
-
- return result
-}
-
-func (this *Drop) Sign() {
- if signature, err := this.Issuer.GetIdentity().Sign(this.Marshal()[:MARSHALED_SIGNATURE_START]); err != nil {
- panic(err)
- } else {
- copy(this.Signature[:], signature)
- }
-}
diff --git a/plugins/autopeering/types/drop/errors.go b/plugins/autopeering/types/drop/errors.go
deleted file mode 100644
index d2878718dd..0000000000
--- a/plugins/autopeering/types/drop/errors.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package drop
-
-import "github.com/pkg/errors"
-
-var (
- ErrInvalidSignature = errors.New("invalid signature in drop message")
- ErrMalformedDropMessage = errors.New("malformed drop message")
-)
diff --git a/plugins/autopeering/types/peer/constants.go b/plugins/autopeering/types/peer/constants.go
deleted file mode 100644
index a29c567c24..0000000000
--- a/plugins/autopeering/types/peer/constants.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package peer
-
-import (
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
-)
-
-const (
- MARSHALED_PUBLIC_KEY_START = 0
- MARSHALED_ADDRESS_TYPE_START = MARSHALED_PUBLIC_KEY_END
- MARSHALED_ADDRESS_START = MARSHALED_ADDRESS_TYPE_END
- MARSHALED_PEERING_PORT_START = MARSHALED_ADDRESS_END
- MARSHALED_GOSSIP_PORT_START = MARSHALED_PEERING_PORT_END
- MARSHALED_SALT_START = MARSHALED_GOSSIP_PORT_END
-
- MARSHALED_PUBLIC_KEY_END = MARSHALED_PUBLIC_KEY_START + MARSHALED_PUBLIC_KEY_SIZE
- MARSHALED_ADDRESS_TYPE_END = MARSHALED_ADDRESS_TYPE_START + MARSHALED_ADDRESS_TYPE_SIZE
- MARSHALED_ADDRESS_END = MARSHALED_ADDRESS_START + MARSHALED_ADDRESS_SIZE
- MARSHALED_PEERING_PORT_END = MARSHALED_PEERING_PORT_START + MARSHALED_PEERING_PORT_SIZE
- MARSHALED_GOSSIP_PORT_END = MARSHALED_GOSSIP_PORT_START + MARSHALED_GOSSIP_PORT_SIZE
- MARSHALED_SALT_END = MARSHALED_SALT_START + MARSHALED_SALT_SIZE
-
- MARSHALED_PUBLIC_KEY_SIZE = identity.PUBLIC_KEY_BYTE_LENGTH
- MARSHALED_ADDRESS_TYPE_SIZE = 1
- MARSHALED_ADDRESS_SIZE = 16
- MARSHALED_PEERING_PORT_SIZE = 2
- MARSHALED_GOSSIP_PORT_SIZE = 2
- MARSHALED_SALT_SIZE = salt.SALT_MARSHALED_SIZE
-
- MARSHALED_TOTAL_SIZE = MARSHALED_SALT_END
-)
diff --git a/plugins/autopeering/types/peer/peer.go b/plugins/autopeering/types/peer/peer.go
deleted file mode 100644
index 1e3f51a868..0000000000
--- a/plugins/autopeering/types/peer/peer.go
+++ /dev/null
@@ -1,246 +0,0 @@
-package peer
-
-import (
- "encoding/binary"
- "net"
- "strconv"
- "sync"
- "time"
-
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/packages/network"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
- "github.com/iotaledger/hive.go/events"
- "github.com/pkg/errors"
-)
-
-type Peer struct {
- identity *identity.Identity
- identityMutex sync.RWMutex
- address net.IP
- addressMutex sync.RWMutex
- peeringPort uint16
- peeringPortMutex sync.RWMutex
- gossipPort uint16
- gossipPortMutex sync.RWMutex
- salt *salt.Salt
- saltMutex sync.RWMutex
- conn *network.ManagedConnection
- connectMutex sync.RWMutex
- firstSeen time.Time
- firstSeenMutex sync.RWMutex
- lastSeen time.Time
- lastSeenMutex sync.RWMutex
-}
-
-func (peer *Peer) GetIdentity() (result *identity.Identity) {
- peer.identityMutex.RLock()
- result = peer.identity
- peer.identityMutex.RUnlock()
-
- return
-}
-
-func (peer *Peer) SetIdentity(identity *identity.Identity) {
- peer.identityMutex.Lock()
- peer.identity = identity
- peer.identityMutex.Unlock()
-}
-
-func (peer *Peer) GetAddress() (result net.IP) {
- peer.addressMutex.RLock()
- result = peer.address
- peer.addressMutex.RUnlock()
-
- return
-}
-
-func (peer *Peer) SetAddress(address net.IP) {
- peer.addressMutex.Lock()
- peer.address = address
- peer.addressMutex.Unlock()
-}
-
-func (peer *Peer) GetPeeringPort() (result uint16) {
- peer.peeringPortMutex.RLock()
- result = peer.peeringPort
- peer.peeringPortMutex.RUnlock()
-
- return
-}
-
-func (peer *Peer) SetPeeringPort(port uint16) {
- peer.peeringPortMutex.Lock()
- peer.peeringPort = port
- peer.peeringPortMutex.Unlock()
-}
-
-func (peer *Peer) GetGossipPort() (result uint16) {
- peer.gossipPortMutex.RLock()
- result = peer.gossipPort
- peer.gossipPortMutex.RUnlock()
-
- return
-}
-
-func (peer *Peer) SetGossipPort(port uint16) {
- peer.gossipPortMutex.Lock()
- peer.gossipPort = port
- peer.gossipPortMutex.Unlock()
-}
-
-func (peer *Peer) GetSalt() (result *salt.Salt) {
- peer.saltMutex.RLock()
- result = peer.salt
- peer.saltMutex.RUnlock()
-
- return
-}
-
-func (peer *Peer) SetSalt(salt *salt.Salt) {
- peer.saltMutex.Lock()
- peer.salt = salt
- peer.saltMutex.Unlock()
-}
-
-func (peer *Peer) GetConn() (result *network.ManagedConnection) {
- peer.connectMutex.RLock()
- result = peer.conn
- peer.connectMutex.RUnlock()
-
- return
-}
-
-func (peer *Peer) SetConn(conn *network.ManagedConnection) {
- peer.connectMutex.Lock()
- peer.conn = conn
- peer.connectMutex.Unlock()
-}
-
-func Unmarshal(data []byte) (*Peer, error) {
- if len(data) < MARSHALED_TOTAL_SIZE {
- return nil, errors.New("size of marshaled peer is too small")
- }
-
- peer := &Peer{
- identity: identity.NewIdentity(data[MARSHALED_PUBLIC_KEY_START:MARSHALED_PUBLIC_KEY_END]),
- }
-
- switch data[MARSHALED_ADDRESS_TYPE_START] {
- case types.ADDRESS_TYPE_IPV4:
- peer.address = net.IP(data[MARSHALED_ADDRESS_START:MARSHALED_ADDRESS_END]).To4()
- case types.ADDRESS_TYPE_IPV6:
- peer.address = net.IP(data[MARSHALED_ADDRESS_START:MARSHALED_ADDRESS_END]).To16()
- }
-
- peer.peeringPort = binary.BigEndian.Uint16(data[MARSHALED_PEERING_PORT_START:MARSHALED_PEERING_PORT_END])
- peer.gossipPort = binary.BigEndian.Uint16(data[MARSHALED_GOSSIP_PORT_START:MARSHALED_GOSSIP_PORT_END])
-
- if unmarshaledSalt, err := salt.Unmarshal(data[MARSHALED_SALT_START:MARSHALED_SALT_END]); err != nil {
- return nil, err
- } else {
- peer.salt = unmarshaledSalt
- }
-
- return peer, nil
-}
-
-// sends data and
-func (peer *Peer) Send(data []byte, protocol types.ProtocolType, responseExpected bool) (bool, error) {
- conn, dialed, err := peer.Connect(protocol)
- if err != nil {
- return false, err
- }
-
- if _, err := conn.Write(data); err != nil {
- return false, err
- }
-
- if dialed && !responseExpected {
- conn.Close()
- }
-
- return dialed, nil
-}
-
-func (peer *Peer) ConnectTCP() (*network.ManagedConnection, bool, error) {
- peer.connectMutex.RLock()
-
- if peer.conn == nil {
- peer.connectMutex.RUnlock()
- peer.connectMutex.Lock()
- defer peer.connectMutex.Unlock()
-
- if peer.conn == nil {
- conn, err := net.Dial("tcp", peer.GetAddress().String()+":"+strconv.Itoa(int(peer.GetPeeringPort())))
- if err != nil {
- return nil, false, errors.New("error when connecting to " + peer.String() + ": " + err.Error())
- } else {
- peer.conn = network.NewManagedConnection(conn)
- peer.conn.Events.Close.Attach(events.NewClosure(func() {
- peer.SetConn(nil)
- }))
-
- return peer.conn, true, nil
- }
- }
- } else {
- peer.connectMutex.RUnlock()
- }
-
- return peer.conn, false, nil
-}
-
-func (peer *Peer) ConnectUDP() (*network.ManagedConnection, bool, error) {
- conn, err := net.Dial("udp", peer.GetAddress().String()+":"+strconv.Itoa(int(peer.GetPeeringPort())))
- if err != nil {
- return nil, false, errors.New("error when connecting to " + peer.GetAddress().String() + ": " + err.Error())
- }
-
- return network.NewManagedConnection(conn), true, nil
-}
-
-func (peer *Peer) Connect(protocol types.ProtocolType) (*network.ManagedConnection, bool, error) {
- switch protocol {
- case types.PROTOCOL_TYPE_TCP:
- return peer.ConnectTCP()
- case types.PROTOCOL_TYPE_UDP:
- return peer.ConnectUDP()
- default:
- return nil, false, errors.New("unsupported peering protocol in peer " + peer.GetAddress().String())
- }
-}
-
-func (peer *Peer) Marshal() []byte {
- result := make([]byte, MARSHALED_TOTAL_SIZE)
-
- copy(result[MARSHALED_PUBLIC_KEY_START:MARSHALED_PUBLIC_KEY_END],
- peer.GetIdentity().PublicKey[:MARSHALED_PUBLIC_KEY_SIZE])
-
- switch len(peer.GetAddress()) {
- case net.IPv4len:
- result[MARSHALED_ADDRESS_TYPE_START] = types.ADDRESS_TYPE_IPV4
- case net.IPv6len:
- result[MARSHALED_ADDRESS_TYPE_START] = types.ADDRESS_TYPE_IPV6
- default:
- panic("invalid address in peer")
- }
-
- copy(result[MARSHALED_ADDRESS_START:MARSHALED_ADDRESS_END], peer.GetAddress().To16())
-
- binary.BigEndian.PutUint16(result[MARSHALED_PEERING_PORT_START:MARSHALED_PEERING_PORT_END], peer.GetPeeringPort())
- binary.BigEndian.PutUint16(result[MARSHALED_GOSSIP_PORT_START:MARSHALED_GOSSIP_PORT_END], peer.GetGossipPort())
-
- copy(result[MARSHALED_SALT_START:MARSHALED_SALT_END], peer.GetSalt().Marshal())
-
- return result
-}
-
-func (peer *Peer) String() string {
- if peer.GetIdentity() != nil {
- return peer.GetAddress().String() + ":" + strconv.Itoa(int(peer.GetPeeringPort())) + " / " + peer.GetIdentity().StringIdentifier
- } else {
- return peer.GetAddress().String() + ":" + strconv.Itoa(int(peer.GetPeeringPort()))
- }
-}
diff --git a/plugins/autopeering/types/peer/peer_test.go b/plugins/autopeering/types/peer/peer_test.go
deleted file mode 100644
index be8838db94..0000000000
--- a/plugins/autopeering/types/peer/peer_test.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package peer
-
-import (
- "net"
- "testing"
- "time"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
-
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/magiconair/properties/assert"
-)
-
-func TestPeer_MarshalUnmarshal(t *testing.T) {
- peer := &Peer{
- address: net.IPv4(127, 0, 0, 1),
- identity: identity.GenerateRandomIdentity(),
- gossipPort: 123,
- peeringPort: 456,
- salt: salt.New(30 * time.Second),
- }
-
- restoredPeer, err := Unmarshal(peer.Marshal())
- if err != nil {
- t.Error(err)
- }
-
- assert.Equal(t, peer.GetAddress(), restoredPeer.GetAddress())
- assert.Equal(t, peer.GetIdentity().StringIdentifier, restoredPeer.GetIdentity().StringIdentifier)
- assert.Equal(t, peer.GetIdentity().PublicKey, restoredPeer.GetIdentity().PublicKey)
- assert.Equal(t, peer.GetGossipPort(), restoredPeer.GetGossipPort())
- assert.Equal(t, peer.GetPeeringPort(), restoredPeer.GetPeeringPort())
- assert.Equal(t, peer.GetSalt().GetBytes(), restoredPeer.GetSalt().GetBytes())
- // time.time cannot be compared with reflect.DeepEqual, so we cannot use assert.Equal here
- if !peer.GetSalt().GetExpirationTime().Equal(restoredPeer.GetSalt().GetExpirationTime()) {
- t.Errorf("got %v want %v", restoredPeer.GetSalt().GetExpirationTime(), peer.GetSalt().GetExpirationTime())
- }
-}
diff --git a/plugins/autopeering/types/peerlist/peer_list.go b/plugins/autopeering/types/peerlist/peer_list.go
deleted file mode 100644
index 557c14c86d..0000000000
--- a/plugins/autopeering/types/peerlist/peer_list.go
+++ /dev/null
@@ -1,94 +0,0 @@
-package peerlist
-
-import (
- "sort"
- "sync"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-type PeerList struct {
- sync.RWMutex
- internal []*peer.Peer
-}
-
-func NewPeerList(list ...[]*peer.Peer) *PeerList {
- if list != nil {
- return &PeerList{
- internal: list[0],
- }
- }
- return &PeerList{
- internal: make([]*peer.Peer, 0),
- }
-}
-
-func (pl *PeerList) Len() int {
- pl.RLock()
- defer pl.RUnlock()
- return len(pl.internal)
-}
-
-func (pl *PeerList) AddPeer(peer *peer.Peer) {
- pl.Lock()
- pl.internal = append(pl.internal, peer)
- pl.Unlock()
-}
-
-func (pl *PeerList) GetPeers() (result []*peer.Peer) {
- pl.RLock()
- result = pl.internal
- pl.RUnlock()
-
- return
-}
-
-func (pl *PeerList) Update(list []*peer.Peer) {
- pl.Lock()
- pl.internal = list
- pl.Unlock()
-
- return
-}
-
-func (pl *PeerList) SwapPeers(i, j int) {
- pl.Lock()
- pl.internal[i], pl.internal[j] = pl.internal[j], pl.internal[i]
- pl.Unlock()
-}
-
-func (pl *PeerList) Clone() *PeerList {
- list := make([]*peer.Peer, pl.Len())
- pl.RLock()
- copy(list, pl.internal)
- pl.RUnlock()
-
- return NewPeerList(list)
-}
-
-func (pl *PeerList) Filter(predicate func(p *peer.Peer) bool) *PeerList {
- peerList := make([]*peer.Peer, pl.Len())
-
- counter := 0
- pl.RLock()
- for _, peer := range pl.internal {
- if predicate(peer) {
- peerList[counter] = peer
- counter++
- }
- }
- pl.RUnlock()
-
- return NewPeerList(peerList[:counter])
-}
-
-// Sorts the PeerRegister by their distance to an anchor.
-func (pl *PeerList) Sort(distance func(p *peer.Peer) uint64) *PeerList {
- pl.Lock()
- defer pl.Unlock()
- sort.Slice(pl.internal, func(i, j int) bool {
- return distance(pl.internal[i]) < distance(pl.internal[j])
- })
-
- return pl
-}
diff --git a/plugins/autopeering/types/peerregister/events.go b/plugins/autopeering/types/peerregister/events.go
deleted file mode 100644
index 4f59169b93..0000000000
--- a/plugins/autopeering/types/peerregister/events.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package peerregister
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/hive.go/events"
-)
-
-type peerRegisterEvents struct {
- Add *events.Event
- Update *events.Event
- Remove *events.Event
-}
-
-func peerCaller(handler interface{}, params ...interface{}) {
- handler.(func(*peer.Peer))(params[0].(*peer.Peer))
-}
diff --git a/plugins/autopeering/types/peerregister/peerMap.go b/plugins/autopeering/types/peerregister/peerMap.go
deleted file mode 100644
index 2e1460bf85..0000000000
--- a/plugins/autopeering/types/peerregister/peerMap.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package peerregister
-
-import (
- "sync"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-// PeerMap is the mapping of peer identifier and their peer struct
-// It uses a mutex to handle concurrent access to its internal map
-type PeerMap struct {
- sync.RWMutex
- internal map[string]*peer.Peer
-}
-
-// NewPeerMap returns a new PeerMap
-func NewPeerMap() *PeerMap {
- return &PeerMap{
- internal: make(map[string]*peer.Peer),
- }
-}
-
-// Len returns the number of peers stored in a PeerMap
-func (pm *PeerMap) Len() int {
- pm.RLock()
- defer pm.RUnlock()
- return len(pm.internal)
-}
-
-// GetMap returns the content of the entire internal map
-func (pm *PeerMap) GetMap() map[string]*peer.Peer {
- newMap := make(map[string]*peer.Peer)
- pm.RLock()
- defer pm.RUnlock()
- for k, v := range pm.internal {
- newMap[k] = v
- }
- return newMap
-}
-
-// GetMap returns the content of the entire internal map
-func (pm *PeerMap) GetSlice() []*peer.Peer {
- newSlice := make([]*peer.Peer, pm.Len())
- pm.RLock()
- defer pm.RUnlock()
- i := 0
- for _, v := range pm.internal {
- newSlice[i] = v
- i++
- }
- return newSlice
-}
-
-// Load returns the peer for a given key.
-// It also return a bool to communicate the presence of the given
-// peer into the internal map
-func (pm *PeerMap) Load(key string) (value *peer.Peer, ok bool) {
- pm.RLock()
- defer pm.RUnlock()
- result, ok := pm.internal[key]
- return result, ok
-}
-
-// Delete removes the entire entry for a given key and return true if successful
-func (pm *PeerMap) Delete(key string) (deletedPeer *peer.Peer, ok bool) {
- deletedPeer, ok = pm.Load(key)
- if !ok {
- return nil, false
- }
- pm.Lock()
- defer pm.Unlock()
- delete(pm.internal, key)
- return deletedPeer, true
-}
-
-// Store adds a new peer to the PeerMap
-func (pm *PeerMap) Store(key string, value *peer.Peer) {
- pm.Lock()
- defer pm.Unlock()
- pm.internal[key] = value
-}
diff --git a/plugins/autopeering/types/peerregister/peer_register.go b/plugins/autopeering/types/peerregister/peer_register.go
deleted file mode 100644
index 6cd104ccfc..0000000000
--- a/plugins/autopeering/types/peerregister/peer_register.go
+++ /dev/null
@@ -1,87 +0,0 @@
-package peerregister
-
-import (
- "bytes"
- "sync"
-
- "github.com/iotaledger/goshimmer/packages/accountability"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/request"
- "github.com/iotaledger/hive.go/events"
-)
-
-type PeerRegister struct {
- Peers *PeerMap
- Events peerRegisterEvents
- lock sync.RWMutex
-}
-
-func New() *PeerRegister {
- return &PeerRegister{
- Peers: NewPeerMap(),
- Events: peerRegisterEvents{
- Add: events.NewEvent(peerCaller),
- Update: events.NewEvent(peerCaller),
- Remove: events.NewEvent(peerCaller),
- },
- }
-}
-
-// returns true if a new entry was added
-func (this *PeerRegister) AddOrUpdate(peer *peer.Peer) bool {
- if peer.GetIdentity() == nil || bytes.Equal(peer.GetIdentity().Identifier, accountability.OwnId().Identifier) {
- return false
- }
-
- if existingPeer, exists := this.Peers.Load(peer.GetIdentity().StringIdentifier); exists {
- existingPeer.SetAddress(peer.GetAddress())
- existingPeer.SetGossipPort(peer.GetGossipPort())
- existingPeer.SetPeeringPort(peer.GetPeeringPort())
- existingPeer.SetSalt(peer.GetSalt())
-
- // also update the public key if not yet present
- if existingPeer.GetIdentity().PublicKey == nil {
- existingPeer.SetIdentity(peer.GetIdentity())
- }
-
- this.Events.Update.Trigger(existingPeer)
-
- return false
- } else {
- this.Peers.Store(peer.GetIdentity().StringIdentifier, peer)
-
- this.Events.Add.Trigger(peer)
-
- return true
- }
-}
-
-// by calling defer peerRegister.Lock()() we can auto-lock AND unlock (note: two parentheses)
-func (this *PeerRegister) Lock() func() {
- this.lock.Lock()
-
- return this.lock.Unlock
-}
-
-func (this *PeerRegister) Remove(key string) {
- if peerEntry, exists := this.Peers.Delete(key); exists {
- this.Events.Remove.Trigger(peerEntry)
- }
-}
-
-func (this *PeerRegister) Contains(key string) bool {
- _, exists := this.Peers.Load(key)
- return exists
-}
-
-func (this *PeerRegister) Filter(filterFn func(this *PeerRegister, req *request.Request) *PeerRegister, req *request.Request) *PeerRegister {
- return filterFn(this, req)
-}
-
-// func (this *PeerRegister) List() *peerlist.PeerList {
-// return peerlist.NewPeerList(this.Peers.GetSlice())
-// }
-
-func (this *PeerRegister) List() []*peer.Peer {
- return this.Peers.GetSlice()
-}
diff --git a/plugins/autopeering/types/ping/constants.go b/plugins/autopeering/types/ping/constants.go
deleted file mode 100644
index 22b17d9d54..0000000000
--- a/plugins/autopeering/types/ping/constants.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package ping
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-const (
- MARSHALED_PACKET_HEADER = 0x04
-
- PACKET_HEADER_START = 0
- MARSHALED_ISSUER_START = PACKET_HEADER_END
- MARSHALED_PEERS_START = MARSHALED_ISSUER_END
- MARSHALED_SIGNATURE_START = MARSHALED_PEERS_END
-
- PACKET_HEADER_END = PACKET_HEADER_START + PACKET_HEADER_SIZE
- MARSHALED_ISSUER_END = MARSHALED_ISSUER_START + MARSHALED_ISSUER_SIZE
- MARSHALED_PEERS_END = MARSHALED_PEERS_START + MARSHALED_PEERS_SIZE
- MARSHALED_SIGNATURE_END = MARSHALED_SIGNATURE_START + MARSHALED_SIGNATURE_SIZE
-
- PACKET_HEADER_SIZE = 1
- MARSHALED_ISSUER_SIZE = peer.MARSHALED_TOTAL_SIZE
- MARSHALED_PEER_ENTRY_FLAG_SIZE = 1
- MARSHALED_PEER_ENTRY_SIZE = MARSHALED_PEER_ENTRY_FLAG_SIZE + peer.MARSHALED_TOTAL_SIZE
- MARSHALED_PEERS_SIZE = MARSHALED_PEER_ENTRY_SIZE * constants.NEIGHBOR_COUNT
- MARSHALED_SIGNATURE_SIZE = 65
-
- MARSHALED_TOTAL_SIZE = MARSHALED_SIGNATURE_END
-)
diff --git a/plugins/autopeering/types/ping/errors.go b/plugins/autopeering/types/ping/errors.go
deleted file mode 100644
index 51825205c4..0000000000
--- a/plugins/autopeering/types/ping/errors.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package ping
-
-import "github.com/pkg/errors"
-
-var (
- ErrInvalidSignature = errors.New("invalid signature in ping")
- ErrMalformedPing = errors.New("malformed ping")
-)
diff --git a/plugins/autopeering/types/ping/ping.go b/plugins/autopeering/types/ping/ping.go
deleted file mode 100644
index e8492c0824..0000000000
--- a/plugins/autopeering/types/ping/ping.go
+++ /dev/null
@@ -1,104 +0,0 @@
-package ping
-
-import (
- "bytes"
- "sync"
-
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/saltmanager"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peerlist"
-)
-
-type Ping struct {
- Issuer *peer.Peer
- Neighbors *peerlist.PeerList
- signature [MARSHALED_SIGNATURE_SIZE]byte
- signatureMutex sync.RWMutex
-}
-
-func (ping *Ping) GetSignature() (result []byte) {
- ping.signatureMutex.RLock()
- result = make([]byte, len(ping.signature))
- copy(result[:], ping.signature[:])
- ping.signatureMutex.RUnlock()
-
- return
-}
-
-func (ping *Ping) SetSignature(signature []byte) {
- ping.signatureMutex.Lock()
- copy(ping.signature[:], signature[:])
- ping.signatureMutex.Unlock()
-}
-
-func Unmarshal(data []byte) (*Ping, error) {
- if data[0] != MARSHALED_PACKET_HEADER || len(data) != MARSHALED_TOTAL_SIZE {
- return nil, ErrMalformedPing
- }
-
- ping := &Ping{
- Neighbors: peerlist.NewPeerList(),
- }
-
- if unmarshaledPeer, err := peer.Unmarshal(data[MARSHALED_ISSUER_START:MARSHALED_ISSUER_END]); err != nil {
- return nil, err
- } else {
- ping.Issuer = unmarshaledPeer
- }
- if err := saltmanager.CheckSalt(ping.Issuer.GetSalt()); err != nil {
- return nil, err
- }
-
- offset := MARSHALED_PEERS_START
- for i := 0; i < constants.NEIGHBOR_COUNT; i++ {
- if data[offset] == 1 {
- if unmarshaledPing, err := peer.Unmarshal(data[offset+1 : offset+MARSHALED_PEER_ENTRY_SIZE]); err != nil {
- return nil, err
- } else {
- ping.Neighbors.AddPeer(unmarshaledPing)
- }
- }
-
- offset += MARSHALED_PEER_ENTRY_SIZE
- }
-
- if issuer, err := identity.FromSignedData(data[:MARSHALED_SIGNATURE_START], data[MARSHALED_SIGNATURE_START:]); err != nil {
- return nil, err
- } else {
- if !bytes.Equal(issuer.Identifier, ping.Issuer.GetIdentity().Identifier) {
- return nil, ErrInvalidSignature
- }
- }
- ping.SetSignature(data[MARSHALED_SIGNATURE_START:MARSHALED_SIGNATURE_END])
-
- return ping, nil
-}
-
-func (ping *Ping) Marshal() []byte {
- result := make([]byte, MARSHALED_TOTAL_SIZE)
-
- result[PACKET_HEADER_START] = MARSHALED_PACKET_HEADER
- copy(result[MARSHALED_ISSUER_START:MARSHALED_ISSUER_END], ping.Issuer.Marshal())
- if ping.Neighbors != nil {
- for i, neighbor := range ping.Neighbors.GetPeers() {
- entryStartOffset := MARSHALED_PEERS_START + i*MARSHALED_PEER_ENTRY_SIZE
-
- result[entryStartOffset] = 1
-
- copy(result[entryStartOffset+1:entryStartOffset+MARSHALED_PEER_ENTRY_SIZE], neighbor.Marshal())
- }
- }
- copy(result[MARSHALED_SIGNATURE_START:MARSHALED_SIGNATURE_END], ping.GetSignature())
-
- return result
-}
-
-func (this *Ping) Sign() {
- if signature, err := this.Issuer.GetIdentity().Sign(this.Marshal()[:MARSHALED_SIGNATURE_START]); err != nil {
- panic(err)
- } else {
- this.SetSignature(signature)
- }
-}
diff --git a/plugins/autopeering/types/request/constants.go b/plugins/autopeering/types/request/constants.go
deleted file mode 100644
index c1e707153f..0000000000
--- a/plugins/autopeering/types/request/constants.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package request
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-const (
- PACKET_HEADER_SIZE = 1
- ISSUER_SIZE = peer.MARSHALED_TOTAL_SIZE
- SIGNATURE_SIZE = 65
-
- PACKET_HEADER_START = 0
- ISSUER_START = PACKET_HEADER_END
- SIGNATURE_START = ISSUER_END
-
- PACKET_HEADER_END = PACKET_HEADER_START + PACKET_HEADER_SIZE
- ISSUER_END = ISSUER_START + ISSUER_SIZE
- SIGNATURE_END = SIGNATURE_START + SIGNATURE_SIZE
-
- MARSHALED_TOTAL_SIZE = SIGNATURE_END
-
- MARSHALED_PACKET_HEADER = 0xBE
-)
diff --git a/plugins/autopeering/types/request/errors.go b/plugins/autopeering/types/request/errors.go
deleted file mode 100644
index 34831a9420..0000000000
--- a/plugins/autopeering/types/request/errors.go
+++ /dev/null
@@ -1,10 +0,0 @@
-package request
-
-import "github.com/pkg/errors"
-
-var (
- ErrPublicSaltExpired = errors.New("expired public salt in peering request")
- ErrPublicSaltInvalidLifetime = errors.New("invalid public salt lifetime")
- ErrInvalidSignature = errors.New("invalid signature in peering request")
- ErrMalformedPeeringRequest = errors.New("malformed peering request")
-)
diff --git a/plugins/autopeering/types/request/request.go b/plugins/autopeering/types/request/request.go
deleted file mode 100644
index 98d9f1d5fe..0000000000
--- a/plugins/autopeering/types/request/request.go
+++ /dev/null
@@ -1,116 +0,0 @@
-package request
-
-import (
- "bytes"
- "sync"
- "time"
-
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types"
- "github.com/iotaledger/goshimmer/plugins/autopeering/saltmanager"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/response"
-)
-
-type Request struct {
- Issuer *peer.Peer
- signature [SIGNATURE_SIZE]byte
- signatureMutex sync.RWMutex
-}
-
-func (r *Request) GetSignature() (result []byte) {
- r.signatureMutex.RLock()
- result = make([]byte, len(r.signature))
- copy(result[:], r.signature[:])
- r.signatureMutex.RUnlock()
-
- return
-}
-
-func (r *Request) SetSignature(signature []byte) {
- r.signatureMutex.Lock()
- copy(r.signature[:], signature[:])
- r.signatureMutex.Unlock()
-}
-
-func Unmarshal(data []byte) (*Request, error) {
- if data[0] != MARSHALED_PACKET_HEADER || len(data) != MARSHALED_TOTAL_SIZE {
- return nil, ErrMalformedPeeringRequest
- }
-
- peeringRequest := &Request{}
-
- if unmarshaledPeer, err := peer.Unmarshal(data[ISSUER_START:ISSUER_END]); err != nil {
- return nil, err
- } else {
- peeringRequest.Issuer = unmarshaledPeer
- }
-
- now := time.Now()
- if peeringRequest.Issuer.GetSalt().GetExpirationTime().Before(now.Add(-1 * time.Minute)) {
- return nil, ErrPublicSaltExpired
- }
- if peeringRequest.Issuer.GetSalt().GetExpirationTime().After(now.Add(saltmanager.PUBLIC_SALT_LIFETIME + 1*time.Minute)) {
- return nil, ErrPublicSaltInvalidLifetime
- }
-
- if issuer, err := identity.FromSignedData(data[:SIGNATURE_START], data[SIGNATURE_START:]); err != nil {
- return nil, err
- } else {
- if !bytes.Equal(issuer.Identifier, peeringRequest.Issuer.GetIdentity().Identifier) {
- return nil, ErrInvalidSignature
- }
- }
- peeringRequest.SetSignature(data[SIGNATURE_START:SIGNATURE_END])
-
- return peeringRequest, nil
-}
-
-func (this *Request) Accept(peers []*peer.Peer) error {
- peeringResponse := &response.Response{
- Type: response.TYPE_ACCEPT,
- Issuer: ownpeer.INSTANCE,
- Peers: peers,
- }
- peeringResponse.Sign()
-
- if _, err := this.Issuer.Send(peeringResponse.Marshal(), types.PROTOCOL_TYPE_TCP, false); err != nil {
- return err
- }
-
- return nil
-}
-
-func (this *Request) Reject(peers []*peer.Peer) error {
- peeringResponse := &response.Response{
- Type: response.TYPE_REJECT,
- Issuer: ownpeer.INSTANCE,
- Peers: peers,
- }
- peeringResponse.Sign()
-
- if _, err := this.Issuer.Send(peeringResponse.Marshal(), types.PROTOCOL_TYPE_TCP, false); err != nil {
- return err
- }
-
- return nil
-}
-
-func (this *Request) Sign() {
- if signature, err := this.Issuer.GetIdentity().Sign(this.Marshal()[:SIGNATURE_START]); err != nil {
- panic(err)
- } else {
- this.SetSignature(signature)
- }
-}
-
-func (this *Request) Marshal() []byte {
- result := make([]byte, MARSHALED_TOTAL_SIZE)
-
- result[PACKET_HEADER_START] = MARSHALED_PACKET_HEADER
- copy(result[ISSUER_START:ISSUER_END], this.Issuer.Marshal())
- copy(result[SIGNATURE_START:SIGNATURE_END], this.GetSignature()[:SIGNATURE_SIZE])
-
- return result
-}
diff --git a/plugins/autopeering/types/response/constants.go b/plugins/autopeering/types/response/constants.go
deleted file mode 100644
index 9ef796feee..0000000000
--- a/plugins/autopeering/types/response/constants.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package response
-
-import (
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-)
-
-const (
- TYPE_REJECT = Type(0)
- TYPE_ACCEPT = Type(1)
-
- MARSHALED_PEERS_AMOUNT = constants.NEIGHBOR_COUNT + constants.NEIGHBOR_COUNT*constants.NEIGHBOR_COUNT
- MARHSALLED_PACKET_HEADER = 0xBC
-
- MARSHALED_PACKET_HEADER_START = 0
- MARSHALED_TYPE_START = MARSHALED_PACKET_HEADER_END
- MARSHALED_ISSUER_START = MARSHALED_TYPE_END
- MARSHALED_PEERS_START = MARSHALED_ISSUER_END
- MARSHALED_SIGNATURE_START = MARSHALED_PEERS_END
-
- MARSHALED_PACKET_HEADER_END = MARSHALED_PACKET_HEADER_START + MARSHALED_PACKET_HEADER_SIZE
- MARSHALED_TYPE_END = MARSHALED_TYPE_START + MARSHALED_TYPE_SIZE
- MARSHALED_PEERS_END = MARSHALED_PEERS_START + MARSHALED_PEERS_SIZE
- MARSHALED_ISSUER_END = MARSHALED_ISSUER_START + MARSHALED_ISSUER_SIZE
- MARSHALED_SIGNATURE_END = MARSHALED_SIGNATURE_START + MARSHALED_SIGNATURE_SIZE
-
- MARSHALED_PACKET_HEADER_SIZE = 1
- MARSHALED_TYPE_SIZE = 1
- MARSHALED_ISSUER_SIZE = peer.MARSHALED_TOTAL_SIZE
- MARSHALED_PEER_FLAG_SIZE = 1
- MARSHALED_PEER_SIZE = MARSHALED_PEER_FLAG_SIZE + peer.MARSHALED_TOTAL_SIZE
- MARSHALED_PEERS_SIZE = MARSHALED_PEERS_AMOUNT * MARSHALED_PEER_SIZE
- MARSHALED_SIGNATURE_SIZE = 65
- MARSHALED_TOTAL_SIZE = MARSHALED_SIGNATURE_END
-)
diff --git a/plugins/autopeering/types/response/errors.go b/plugins/autopeering/types/response/errors.go
deleted file mode 100644
index 34d823a866..0000000000
--- a/plugins/autopeering/types/response/errors.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package response
-
-import "github.com/pkg/errors"
-
-var (
- ErrInvalidSignature = errors.New("invalid signature in peering request")
-)
diff --git a/plugins/autopeering/types/response/response.go b/plugins/autopeering/types/response/response.go
deleted file mode 100644
index 6a398c4f06..0000000000
--- a/plugins/autopeering/types/response/response.go
+++ /dev/null
@@ -1,110 +0,0 @@
-package response
-
-import (
- "bytes"
- "sync"
-
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
- "github.com/pkg/errors"
-)
-
-type Response struct {
- Type Type
- Issuer *peer.Peer
- Peers []*peer.Peer
- signature [MARSHALED_SIGNATURE_SIZE]byte
- signatureMutex sync.RWMutex
-}
-
-func (r *Response) GetSignature() (result []byte) {
- r.signatureMutex.RLock()
- result = make([]byte, len(r.signature))
- copy(result[:], r.signature[:])
- r.signatureMutex.RUnlock()
-
- return
-}
-
-func (r *Response) SetSignature(signature []byte) {
- r.signatureMutex.Lock()
- copy(r.signature[:], signature[:])
- r.signatureMutex.Unlock()
-}
-
-func Unmarshal(data []byte) (*Response, error) {
- if data[0] != MARHSALLED_PACKET_HEADER || len(data) < MARSHALED_TOTAL_SIZE {
- return nil, errors.New("malformed peering response")
- }
-
- peeringResponse := &Response{
- Type: data[MARSHALED_TYPE_START],
- Peers: make([]*peer.Peer, 0),
- }
-
- if unmarshaledPeer, err := peer.Unmarshal(data[MARSHALED_ISSUER_START:MARSHALED_ISSUER_END]); err != nil {
- return nil, err
- } else {
- peeringResponse.Issuer = unmarshaledPeer
- }
-
- for i := 0; i < MARSHALED_PEERS_AMOUNT; i++ {
- PEERING_RESPONSE_MARSHALED_PEER_START := MARSHALED_PEERS_START + (i * MARSHALED_PEER_SIZE)
- PEERING_RESPONSE_MARSHALED_PEER_END := PEERING_RESPONSE_MARSHALED_PEER_START + MARSHALED_PEER_SIZE
-
- if data[PEERING_RESPONSE_MARSHALED_PEER_START] == 1 {
- peer, err := peer.Unmarshal(data[PEERING_RESPONSE_MARSHALED_PEER_START+1 : PEERING_RESPONSE_MARSHALED_PEER_END])
- if err != nil {
- return nil, err
- }
-
- peeringResponse.Peers = append(peeringResponse.Peers, peer)
- }
- }
-
- if issuer, err := identity.FromSignedData(data[:MARSHALED_SIGNATURE_START], data[MARSHALED_SIGNATURE_START:]); err != nil {
- return nil, err
- } else {
- if !bytes.Equal(issuer.Identifier, peeringResponse.Issuer.GetIdentity().Identifier) {
- return nil, ErrInvalidSignature
- }
- }
- peeringResponse.SetSignature(data[MARSHALED_SIGNATURE_START:MARSHALED_SIGNATURE_END])
-
- return peeringResponse, nil
-}
-
-func (this *Response) Sign() *Response {
- dataToSign := this.Marshal()[:MARSHALED_SIGNATURE_START]
- if signature, err := this.Issuer.GetIdentity().Sign(dataToSign); err != nil {
- panic(err)
- } else {
- this.SetSignature(signature)
- }
-
- return this
-}
-
-func (this *Response) Marshal() []byte {
- result := make([]byte, MARSHALED_TOTAL_SIZE)
-
- result[MARSHALED_PACKET_HEADER_START] = MARHSALLED_PACKET_HEADER
- result[MARSHALED_TYPE_START] = this.Type
-
- copy(result[MARSHALED_ISSUER_START:MARSHALED_ISSUER_END], this.Issuer.Marshal())
-
- for i, peer := range this.Peers {
- if i < constants.NEIGHBOR_COUNT {
- PEERING_RESPONSE_MARSHALED_PEER_START := MARSHALED_PEERS_START + (i * MARSHALED_PEER_SIZE)
- PEERING_RESPONSE_MARSHALED_PEER_END := PEERING_RESPONSE_MARSHALED_PEER_START + MARSHALED_PEER_SIZE
-
- result[PEERING_RESPONSE_MARSHALED_PEER_START] = 1
- copy(result[PEERING_RESPONSE_MARSHALED_PEER_START+1:PEERING_RESPONSE_MARSHALED_PEER_END], peer.Marshal()[:MARSHALED_PEER_SIZE-1])
- }
- }
-
- copy(result[MARSHALED_SIGNATURE_START:MARSHALED_SIGNATURE_END], this.GetSignature()[:MARSHALED_SIGNATURE_SIZE])
-
- return result
-}
diff --git a/plugins/autopeering/types/response/response_test.go b/plugins/autopeering/types/response/response_test.go
deleted file mode 100644
index 1cfc178e93..0000000000
--- a/plugins/autopeering/types/response/response_test.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package response
-
-import (
- "net"
- "testing"
- "time"
-
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer"
-
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt"
-)
-
-func TestPeer_MarshalUnmarshal(t *testing.T) {
- issuer := &peer.Peer{}
- issuer.SetAddress(net.IPv4(127, 0, 0, 1))
- issuer.SetIdentity(identity.GenerateRandomIdentity())
- issuer.SetGossipPort(123)
- issuer.SetPeeringPort(456)
- issuer.SetSalt(salt.New(30 * time.Second))
-
- peers := make([]*peer.Peer, 3)
-
- peers[0] = &peer.Peer{}
- peers[0].SetAddress(net.IPv4(127, 0, 0, 1))
- peers[0].SetIdentity(identity.GenerateRandomIdentity())
- peers[0].SetGossipPort(124)
- peers[0].SetPeeringPort(457)
- peers[0].SetSalt(salt.New(30 * time.Second))
-
- peers[1] = &peer.Peer{}
- peers[1].SetAddress(net.IPv4(127, 0, 0, 1))
- peers[1].SetIdentity(identity.GenerateRandomIdentity())
- peers[1].SetGossipPort(125)
- peers[1].SetPeeringPort(458)
- peers[1].SetSalt(salt.New(30 * time.Second))
-
- peers[2] = &peer.Peer{}
- peers[2].SetAddress(net.IPv4(127, 0, 0, 1))
- peers[2].SetIdentity(identity.GenerateRandomIdentity())
- peers[2].SetGossipPort(126)
- peers[2].SetPeeringPort(459)
- peers[2].SetSalt(salt.New(30 * time.Second))
-
- response := &Response{
- Issuer: issuer,
- Type: TYPE_ACCEPT,
- Peers: peers,
- }
- response.Sign()
-
- _, err := Unmarshal(response.Marshal())
- if err != nil {
- t.Error(err)
- }
-}
diff --git a/plugins/autopeering/types/response/types.go b/plugins/autopeering/types/response/types.go
deleted file mode 100644
index 64e48e6c2d..0000000000
--- a/plugins/autopeering/types/response/types.go
+++ /dev/null
@@ -1,3 +0,0 @@
-package response
-
-type Type = byte
diff --git a/plugins/autopeering/types/salt/constants.go b/plugins/autopeering/types/salt/constants.go
deleted file mode 100644
index 399d6a7283..0000000000
--- a/plugins/autopeering/types/salt/constants.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package salt
-
-const (
- SALT_BYTES_SIZE = 20
- SALT_TIME_SIZE = 15
-
- SALT_BYTES_START = 0
- SALT_TIME_START = SALT_BYTES_END
-
- SALT_BYTES_END = SALT_BYTES_START + SALT_BYTES_SIZE
- SALT_TIME_END = SALT_TIME_START + SALT_TIME_SIZE
-
- SALT_MARSHALED_SIZE = SALT_TIME_END
-)
diff --git a/plugins/autopeering/types/salt/salt.go b/plugins/autopeering/types/salt/salt.go
deleted file mode 100644
index c52a14b7d8..0000000000
--- a/plugins/autopeering/types/salt/salt.go
+++ /dev/null
@@ -1,92 +0,0 @@
-package salt
-
-import (
- "crypto/rand"
- "sync"
- "time"
-
- "github.com/pkg/errors"
-)
-
-type Salt struct {
- bytes []byte
- bytesMutex sync.RWMutex
- expirationTime time.Time
- expirationTimeMutex sync.RWMutex
-}
-
-func (salt *Salt) GetBytes() (result []byte) {
- salt.bytesMutex.RLock()
- result = make([]byte, len(salt.bytes))
- copy(result[:], salt.bytes[:])
- salt.bytesMutex.RUnlock()
-
- return
-}
-
-func (salt *Salt) SetBytes(b []byte) {
- salt.bytesMutex.Lock()
- salt.bytes = make([]byte, len(b))
- copy(salt.bytes[:], b[:])
- salt.bytesMutex.Unlock()
-}
-
-func (salt *Salt) GetExpirationTime() (result time.Time) {
- salt.expirationTimeMutex.RLock()
- result = salt.expirationTime
- salt.expirationTimeMutex.RUnlock()
-
- return
-}
-
-func (salt *Salt) SetExpirationTime(t time.Time) {
- salt.expirationTimeMutex.Lock()
- salt.expirationTime = t
- salt.expirationTimeMutex.Unlock()
-}
-
-func New(lifetime time.Duration) *Salt {
- salt := &Salt{
- bytes: make([]byte, SALT_BYTES_SIZE),
- expirationTime: time.Now().Add(lifetime),
- }
-
- if _, err := rand.Read(salt.bytes); err != nil {
- panic(err)
- }
-
- return salt
-}
-
-func Unmarshal(marshaledSalt []byte) (*Salt, error) {
- if len(marshaledSalt) < SALT_MARSHALED_SIZE {
- return nil, errors.New("marshaled salt bytes not long enough")
- }
-
- salt := &Salt{
- bytes: make([]byte, SALT_BYTES_SIZE),
- }
- salt.SetBytes(marshaledSalt[SALT_BYTES_START:SALT_BYTES_END])
-
- var expTime time.Time
- if err := expTime.UnmarshalBinary(marshaledSalt[SALT_TIME_START:SALT_TIME_END]); err != nil {
- return nil, err
- }
- salt.SetExpirationTime(expTime)
-
- return salt, nil
-}
-
-func (this *Salt) Marshal() []byte {
- result := make([]byte, SALT_BYTES_SIZE+SALT_TIME_SIZE)
-
- copy(result[SALT_BYTES_START:SALT_BYTES_END], this.GetBytes())
- expTime := this.GetExpirationTime()
- if bytes, err := expTime.MarshalBinary(); err != nil {
- panic(err)
- } else {
- copy(result[SALT_TIME_START:SALT_TIME_END], bytes)
- }
-
- return result
-}
diff --git a/plugins/bundleprocessor/bundleprocessor.go b/plugins/bundleprocessor/bundleprocessor.go
index 32c7bcd21b..6085e2a97d 100644
--- a/plugins/bundleprocessor/bundleprocessor.go
+++ b/plugins/bundleprocessor/bundleprocessor.go
@@ -4,12 +4,11 @@ import (
"fmt"
"runtime"
- "github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/model/bundle"
"github.com/iotaledger/goshimmer/packages/model/transactionmetadata"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
- "github.com/iotaledger/goshimmer/packages/workerpool"
"github.com/iotaledger/goshimmer/plugins/tangle"
+ "github.com/iotaledger/hive.go/workerpool"
"github.com/iotaledger/iota.go/trinary"
)
@@ -23,12 +22,12 @@ var workerPool = workerpool.New(func(task workerpool.Task) {
var WORKER_COUNT = runtime.NumCPU()
-func ProcessSolidBundleHead(headTransaction *value_transaction.ValueTransaction) errors.IdentifiableError {
+func ProcessSolidBundleHead(headTransaction *value_transaction.ValueTransaction) error {
// only process the bundle if we didn't process it, yet
- _, err := tangle.GetBundle(headTransaction.GetHash(), func(headTransactionHash trinary.Trytes) (*bundle.Bundle, errors.IdentifiableError) {
+ _, err := tangle.GetBundle(headTransaction.GetHash(), func(headTransactionHash trinary.Trytes) (*bundle.Bundle, error) {
// abort if bundle syntax is wrong
if !headTransaction.IsHead() {
- return nil, ErrProcessBundleFailed.Derive(errors.New("invalid parameter"), "transaction needs to be head of bundle")
+ return nil, fmt.Errorf("%w: transaction needs to be the head of the bundle", ErrProcessBundleFailed)
}
// initialize event variables
@@ -43,17 +42,16 @@ func ProcessSolidBundleHead(headTransaction *value_transaction.ValueTransaction)
newBundle.SetTransactionHashes(mapTransactionsToTransactionHashes(bundleTransactions))
Events.InvalidBundle.Trigger(newBundle, bundleTransactions)
-
- return nil, ErrProcessBundleFailed.Derive(errors.New("invalid bundle found"), "missing bundle tail")
+ return nil, fmt.Errorf("%w: missing bundle tail", ErrProcessBundleFailed)
}
// update bundle transactions
bundleTransactions = append(bundleTransactions, currentTransaction)
// retrieve & update metadata
- currentTransactionMetadata, dbErr := tangle.GetTransactionMetadata(currentTransaction.GetHash(), transactionmetadata.New)
- if dbErr != nil {
- return nil, ErrProcessBundleFailed.Derive(dbErr, "failed to retrieve transaction metadata")
+ currentTransactionMetadata, err := tangle.GetTransactionMetadata(currentTransaction.GetHash(), transactionmetadata.New)
+ if err != nil {
+ return nil, fmt.Errorf("%w: failed to retrieve transaction metadata: %s", ErrProcessBundleFailed, err)
}
currentTransactionMetadata.SetBundleHeadHash(headTransactionHash)
@@ -79,10 +77,11 @@ func ProcessSolidBundleHead(headTransaction *value_transaction.ValueTransaction)
// try to iterate to next turn
if nextTransaction, err := tangle.GetTransaction(currentTransaction.GetTrunkTransactionHash()); err != nil {
- return nil, ErrProcessBundleFailed.Derive(err, "failed to retrieve trunk while processing bundle")
+ return nil, fmt.Errorf("%w: failed to retrieve trunk while processing bundle: %s", ErrProcessBundleFailed, err)
} else if nextTransaction == nil {
- fmt.Println(ErrProcessBundleFailed.Derive(errors.New("missing transaction "+currentTransaction.GetTrunkTransactionHash()), "failed to retrieve trunk while processing bundle"))
- return nil, ErrProcessBundleFailed.Derive(err, "failed to retrieve trunk while processing bundle")
+ err := fmt.Errorf("%w: failed to retrieve trunk while processing bundle: missing trunk transaction %s\n", ErrProcessBundleFailed, currentTransaction.GetTrunkTransactionHash())
+ fmt.Println(err)
+ return nil, err
} else {
currentTransaction = nextTransaction
}
diff --git a/plugins/bundleprocessor/bundleprocessor_test.go b/plugins/bundleprocessor/bundleprocessor_test.go
index 93ea4dcdcf..e7b90366bd 100644
--- a/plugins/bundleprocessor/bundleprocessor_test.go
+++ b/plugins/bundleprocessor/bundleprocessor_test.go
@@ -1,24 +1,37 @@
package bundleprocessor
import (
+ "io/ioutil"
"os"
"sync"
"testing"
"github.com/iotaledger/goshimmer/packages/client"
+ "github.com/iotaledger/goshimmer/packages/database"
"github.com/iotaledger/goshimmer/packages/model/bundle"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
+ "github.com/iotaledger/goshimmer/packages/parameter"
"github.com/iotaledger/goshimmer/plugins/tangle"
"github.com/iotaledger/goshimmer/plugins/tipselection"
"github.com/iotaledger/hive.go/events"
+ "github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
"github.com/iotaledger/iota.go/consts"
"github.com/magiconair/properties/assert"
+ "github.com/spf13/viper"
+ "github.com/stretchr/testify/require"
)
var seed = client.NewSeed("YFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCMSJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9Z", consts.SecurityLevelMedium)
+func init() {
+ err := parameter.LoadDefaultConfig(false)
+ if err != nil {
+ log.Fatalf("Failed to initialize config: %s", err)
+ }
+ logger.InitGlobalLogger(&viper.Viper{})
+}
+
func BenchmarkValidateSignatures(b *testing.B) {
bundleFactory := client.NewBundleFactory()
bundleFactory.AddInput(seed.GetAddress(0), -400)
@@ -44,11 +57,6 @@ func BenchmarkValidateSignatures(b *testing.B) {
wg.Wait()
}
-func TestMain(m *testing.M) {
- parameter.FetchConfig(false)
- os.Exit(m.Run())
-}
-
func TestValidateSignatures(t *testing.T) {
bundleFactory := client.NewBundleFactory()
bundleFactory.AddInput(seed.GetAddress(0), -400)
@@ -64,87 +72,72 @@ func TestValidateSignatures(t *testing.T) {
assert.Equal(t, successful, true, "validation failed")
}
-func TestProcessSolidBundleHead_Data(t *testing.T) {
- // show all error messages for tests
- // TODO: adjust logger package
+func TestProcessSolidBundleHead(t *testing.T) {
+ dir, err := ioutil.TempDir("", t.Name())
+ require.NoError(t, err)
+ defer os.Remove(dir)
+ // use the tempdir for the database
+ parameter.NodeConfig.Set(database.CFG_DIRECTORY, dir)
// start a test node
- node.Start(tangle.PLUGIN, PLUGIN)
+ node.Start(node.Plugins(tangle.PLUGIN, PLUGIN))
+ defer node.Shutdown()
- bundleFactory := client.NewBundleFactory()
- bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage")
- bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage")
+ t.Run("data", func(t *testing.T) {
+ bundleFactory := client.NewBundleFactory()
+ bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage")
+ bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage")
- generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip())
+ generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip())
+ for _, transaction := range generatedBundle.GetTransactions() {
+ tangle.StoreTransaction(transaction)
+ }
- for _, transaction := range generatedBundle.GetTransactions() {
- tangle.StoreTransaction(transaction)
- }
+ var wg sync.WaitGroup
+ testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) {
+ assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash")
+ assert.Equal(t, bundle.IsValueBundle(), false, "invalid value bundle status")
- var wg sync.WaitGroup
+ wg.Done()
+ })
+ Events.BundleSolid.Attach(testResults)
+ defer Events.BundleSolid.Detach(testResults)
- testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) {
- assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash")
- assert.Equal(t, bundle.IsValueBundle(), false, "invalid value bundle status")
+ wg.Add(1)
+ if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil {
+ t.Error(err)
+ }
- wg.Done()
+ wg.Wait()
})
- Events.BundleSolid.Attach(testResults)
- wg.Add(1)
+ t.Run("value", func(t *testing.T) {
+ bundleFactory := client.NewBundleFactory()
+ bundleFactory.AddInput(seed.GetAddress(0), -400)
+ bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage")
+ bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage")
- if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil {
- t.Error(err)
- }
+ generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip())
+ for _, transaction := range generatedBundle.GetTransactions() {
+ tangle.StoreTransaction(transaction)
+ }
- wg.Wait()
+ var wg sync.WaitGroup
+ testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) {
+ assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash")
+ assert.Equal(t, bundle.IsValueBundle(), true, "invalid value bundle status")
- Events.BundleSolid.Detach(testResults)
-
- // shutdown test node
- node.Shutdown()
-}
-
-func TestProcessSolidBundleHead_Value(t *testing.T) {
- // show all error messages for tests
- // TODO: adjust logger package
-
- // start a test node
- node.Start(tangle.PLUGIN, PLUGIN)
-
- bundleFactory := client.NewBundleFactory()
- bundleFactory.AddInput(seed.GetAddress(0), -400)
- bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage")
- bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage")
-
- generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip())
-
- for _, transaction := range generatedBundle.GetTransactions() {
- tangle.StoreTransaction(transaction)
- }
+ wg.Done()
+ })
- var wg sync.WaitGroup
+ wg.Add(1)
+ Events.BundleSolid.Attach(testResults)
+ defer Events.BundleSolid.Detach(testResults)
- testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) {
- assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash")
- assert.Equal(t, bundle.GetBundleEssenceHash(), generatedBundle.GetEssenceHash(), "invalid bundle essence hash")
- assert.Equal(t, bundle.IsValueBundle(), true, "invalid value bundle status")
+ if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil {
+ t.Error(err)
+ }
- wg.Done()
+ wg.Wait()
})
-
- Events.BundleSolid.Attach(testResults)
-
- wg.Add(1)
-
- if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil {
- t.Error(err)
- }
-
- wg.Wait()
-
- Events.BundleSolid.Detach(testResults)
-
- // shutdown test node
- node.Shutdown()
}
diff --git a/plugins/bundleprocessor/errors.go b/plugins/bundleprocessor/errors.go
index 214b585911..7b488de18a 100644
--- a/plugins/bundleprocessor/errors.go
+++ b/plugins/bundleprocessor/errors.go
@@ -1,7 +1,7 @@
package bundleprocessor
-import "github.com/iotaledger/goshimmer/packages/errors"
+import "errors"
var (
- ErrProcessBundleFailed = errors.Wrap(errors.New("bundle processing error"), "failed to process bundle")
+ ErrProcessBundleFailed = errors.New("failed to process bundle")
)
diff --git a/plugins/bundleprocessor/events.go b/plugins/bundleprocessor/events.go
index 7fcfb2d3e7..46eeaa5ca6 100644
--- a/plugins/bundleprocessor/events.go
+++ b/plugins/bundleprocessor/events.go
@@ -1,7 +1,6 @@
package bundleprocessor
import (
- "github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/model/bundle"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
"github.com/iotaledger/hive.go/events"
@@ -20,7 +19,7 @@ type pluginEvents struct {
}
func errorCaller(handler interface{}, params ...interface{}) {
- handler.(func(errors.IdentifiableError))(params[0].(errors.IdentifiableError))
+ handler.(func(error))(params[0].(error))
}
func bundleEventCaller(handler interface{}, params ...interface{}) {
diff --git a/plugins/bundleprocessor/plugin.go b/plugins/bundleprocessor/plugin.go
index 2344caa6c4..d8a6303dfe 100644
--- a/plugins/bundleprocessor/plugin.go
+++ b/plugins/bundleprocessor/plugin.go
@@ -1,8 +1,8 @@
package bundleprocessor
import (
- "github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
"github.com/iotaledger/goshimmer/plugins/tangle"
"github.com/iotaledger/hive.go/daemon"
"github.com/iotaledger/hive.go/events"
@@ -11,44 +11,42 @@ import (
)
var PLUGIN = node.NewPlugin("Bundle Processor", node.Enabled, configure, run)
-var log = logger.NewLogger("Bundle Processor")
+var log *logger.Logger
+
+func configure(*node.Plugin) {
+ log = logger.NewLogger("Bundle Processor")
-func configure(plugin *node.Plugin) {
tangle.Events.TransactionSolid.Attach(events.NewClosure(func(tx *value_transaction.ValueTransaction) {
if tx.IsHead() {
workerPool.Submit(tx)
}
}))
- Events.Error.Attach(events.NewClosure(func(err errors.IdentifiableError) {
- log.Error(err.Error())
- }))
-
- daemon.Events.Shutdown.Attach(events.NewClosure(func() {
- log.Info("Stopping Bundle Processor ...")
-
- workerPool.Stop()
-
- log.Info("Stopping Value Bundle Processor ...")
-
- valueBundleProcessorWorkerPool.Stop()
+ Events.Error.Attach(events.NewClosure(func(err error) {
+ log.Error(err)
}))
}
-func run(plugin *node.Plugin) {
+func run(*node.Plugin) {
log.Info("Starting Bundle Processor ...")
- daemon.BackgroundWorker("Bundle Processor", func() {
+ daemon.BackgroundWorker("Bundle Processor", func(shutdownSignal <-chan struct{}) {
log.Info("Starting Bundle Processor ... done")
- workerPool.Run()
+ workerPool.Start()
+ <-shutdownSignal
+ log.Info("Stopping Bundle Processor ...")
+ workerPool.StopAndWait()
log.Info("Stopping Bundle Processor ... done")
- })
+ }, shutdown.ShutdownPriorityBundleProcessor)
log.Info("Starting Value Bundle Processor ...")
- daemon.BackgroundWorker("Value Bundle Processor", func() {
+ daemon.BackgroundWorker("Value Bundle Processor", func(shutdownSignal <-chan struct{}) {
log.Info("Starting Value Bundle Processor ... done")
- valueBundleProcessorWorkerPool.Run()
+ valueBundleProcessorWorkerPool.Start()
+ <-shutdownSignal
+ log.Info("Stopping Value Bundle Processor ...")
+ valueBundleProcessorWorkerPool.StopAndWait()
log.Info("Stopping Value Bundle Processor ... done")
- })
+ }, shutdown.ShutdownPriorityBundleProcessor)
}
diff --git a/plugins/bundleprocessor/valuebundleprocessor.go b/plugins/bundleprocessor/valuebundleprocessor.go
index 271fdb0633..984c2b244b 100644
--- a/plugins/bundleprocessor/valuebundleprocessor.go
+++ b/plugins/bundleprocessor/valuebundleprocessor.go
@@ -1,11 +1,10 @@
package bundleprocessor
import (
- "github.com/iotaledger/goshimmer/packages/curl"
- "github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/model/bundle"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
- "github.com/iotaledger/goshimmer/packages/workerpool"
+ "github.com/iotaledger/hive.go/workerpool"
+ "github.com/iotaledger/iota.go/curl"
"github.com/iotaledger/iota.go/signing"
"github.com/iotaledger/iota.go/trinary"
)
@@ -18,7 +17,7 @@ var valueBundleProcessorWorkerPool = workerpool.New(func(task workerpool.Task) {
task.Return(nil)
}, workerpool.WorkerCount(WORKER_COUNT), workerpool.QueueSize(2*WORKER_COUNT))
-func ProcessSolidValueBundle(bundle *bundle.Bundle, bundleTransactions []*value_transaction.ValueTransaction) errors.IdentifiableError {
+func ProcessSolidValueBundle(bundle *bundle.Bundle, bundleTransactions []*value_transaction.ValueTransaction) error {
bundle.SetBundleEssenceHash(CalculateBundleHash(bundleTransactions))
Events.BundleSolid.Trigger(bundle, bundleTransactions)
@@ -38,12 +37,10 @@ func CalculateBundleHash(transactions []*value_transaction.ValueTransaction) tri
copy(concatenatedBundleEssences[value_transaction.BUNDLE_ESSENCE_SIZE*i:value_transaction.BUNDLE_ESSENCE_SIZE*(i+1)], bundleTransaction.GetBundleEssence(lastInputAddress != bundleTransaction.GetAddress()))
}
- var bundleHash = make(trinary.Trits, 243)
-
- hasher := curl.NewCurl(243, 81)
- hasher.Absorb(concatenatedBundleEssences, 0, len(concatenatedBundleEssences))
- hasher.Squeeze(bundleHash, 0, 243)
-
+ bundleHash, err := curl.HashTrits(concatenatedBundleEssences)
+ if err != nil {
+ panic(err)
+ }
return trinary.MustTritsToTrytes(bundleHash)
}
diff --git a/plugins/cli/cli.go b/plugins/cli/cli.go
index 7936457d70..bd36209325 100644
--- a/plugins/cli/cli.go
+++ b/plugins/cli/cli.go
@@ -32,7 +32,7 @@ func printUsage() {
fmt.Fprintf(
os.Stderr,
"\n"+
- "SHIMMER\n\n"+
+ "GoShimmer\n\n"+
" A lightweight modular IOTA node.\n\n"+
"Usage:\n\n"+
" %s [OPTIONS]\n\n"+
@@ -43,5 +43,5 @@ func printUsage() {
fmt.Fprintf(os.Stderr, "\nThe following plugins are enabled by default and can be disabled with -%s:\n %s\n", node.CFG_DISABLE_PLUGINS, getList(enabledPlugins))
fmt.Fprintf(os.Stderr, "The following plugins are disabled by default and can be enabled with -%s:\n %s\n", node.CFG_ENABLE_PLUGINS, getList(disabledPlugins))
- fmt.Fprintf(os.Stderr, "The enabled/disabled plugins can be overriden by altering %s/%s inside config.json\n\n", node.CFG_ENABLE_PLUGINS, node.CFG_DISABLE_PLUGINS)
+ fmt.Fprintf(os.Stderr, "The enabled/disabled plugins can be overridden by altering %s/%s inside config.json\n\n", node.CFG_ENABLE_PLUGINS, node.CFG_DISABLE_PLUGINS)
}
diff --git a/plugins/cli/plugin.go b/plugins/cli/plugin.go
index 51b86bcb26..0b1937b55e 100644
--- a/plugins/cli/plugin.go
+++ b/plugins/cli/plugin.go
@@ -2,17 +2,17 @@ package cli
import (
"fmt"
- "strings"
+ "github.com/iotaledger/goshimmer/packages/parameter"
"github.com/iotaledger/hive.go/events"
+ "github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
flag "github.com/spf13/pflag"
)
const (
// AppVersion version number
- AppVersion = "v0.0.1"
+ AppVersion = "v0.1.0"
// AppName app code name
AppName = "GoShimmer"
)
@@ -36,26 +36,37 @@ func init() {
func parseParameters() {
for _, pluginName := range parameter.NodeConfig.GetStringSlice(node.CFG_DISABLE_PLUGINS) {
- node.DisabledPlugins[strings.ToLower(pluginName)] = true
+ node.DisabledPlugins[node.GetPluginIdentifier(pluginName)] = true
}
for _, pluginName := range parameter.NodeConfig.GetStringSlice(node.CFG_ENABLE_PLUGINS) {
- node.EnabledPlugins[strings.ToLower(pluginName)] = true
+ node.EnabledPlugins[node.GetPluginIdentifier(pluginName)] = true
}
}
-func configure(ctx *node.Plugin) {
+func LoadConfig() {
+ if err := parameter.FetchConfig(false); err != nil {
+ panic(err)
+ }
+ parseParameters()
- fmt.Println(" _____ _ _ ________ ______ ___ ___________ ")
- fmt.Println(" / ___| | | |_ _| \\/ || \\/ || ___| ___ \\")
- fmt.Println(" \\ `--.| |_| | | | | . . || . . || |__ | |_/ /")
- fmt.Println(" `--. \\ _ | | | | |\\/| || |\\/| || __|| / ")
- fmt.Println(" /\\__/ / | | |_| |_| | | || | | || |___| |\\ \\ ")
- fmt.Printf(" \\____/\\_| |_/\\___/\\_| |_/\\_| |_/\\____/\\_| \\_| fullnode %s", AppVersion)
- fmt.Println()
+ if err := logger.InitGlobalLogger(parameter.NodeConfig); err != nil {
+ panic(err)
+ }
+}
- parameter.FetchConfig(false)
- parseParameters()
+func configure(ctx *node.Plugin) {
+ fmt.Printf(`
+ _____ ____ _____ _ _ _____ __ __ __ __ ______ _____
+ / ____|/ __ \ / ____| | | |_ _| \/ | \/ | ____| __ \
+ | | __| | | | (___ | |__| | | | | \ / | \ / | |__ | |__) |
+ | | |_ | | | |\___ \| __ | | | | |\/| | |\/| | __| | _ /
+ | |__| | |__| |____) | | | |_| |_| | | | | | | |____| | \ \
+ \_____|\____/|_____/|_| |_|_____|_| |_|_| |_|______|_| \_\
+ %s
+`, AppVersion)
+ fmt.Println()
+ ctx.Node.Logger.Infof("GoShimmer version %s ...", AppVersion)
ctx.Node.Logger.Info("Loading plugins ...")
}
diff --git a/plugins/dashboard/plugin.go b/plugins/dashboard/plugin.go
deleted file mode 100644
index 1601f24377..0000000000
--- a/plugins/dashboard/plugin.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package dashboard
-
-import (
- "net/http"
- "time"
-
- "github.com/iotaledger/goshimmer/plugins/metrics"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/logger"
- "github.com/iotaledger/hive.go/node"
- "golang.org/x/net/context"
-)
-
-var server *http.Server
-
-var router *http.ServeMux
-
-var PLUGIN = node.NewPlugin("Dashboard", node.Disabled, configure, run)
-var log = logger.NewLogger("Dashboard")
-
-func configure(plugin *node.Plugin) {
- router = http.NewServeMux()
- server = &http.Server{Addr: ":8081", Handler: router}
-
- router.HandleFunc("/dashboard", ServeHome)
- router.HandleFunc("/ws", ServeWs)
-
- // send the sampledTPS to client via websocket, use uint32 to save mem
- metrics.Events.ReceivedTPSUpdated.Attach(events.NewClosure(func(sampledTPS uint64) {
- TPSQ = append(TPSQ, uint32(sampledTPS))
- if len(TPSQ) > MAX_Q_SIZE {
- TPSQ = TPSQ[1:]
- }
- }))
-
- daemon.Events.Shutdown.Attach(events.NewClosure(func() {
- ctx, cancel := context.WithTimeout(context.Background(), 0*time.Second)
- defer cancel()
-
- _ = server.Shutdown(ctx)
- }))
-}
-
-func run(plugin *node.Plugin) {
- daemon.BackgroundWorker("Dashboard Updater", func() {
- go func() {
- if err := server.ListenAndServe(); err != nil {
- log.Error(err.Error())
- }
- }()
- })
-}
diff --git a/plugins/dashboard/tps.go b/plugins/dashboard/tps.go
deleted file mode 100644
index 5f02375d06..0000000000
--- a/plugins/dashboard/tps.go
+++ /dev/null
@@ -1,149 +0,0 @@
-package dashboard
-
-import (
- "encoding/binary"
- "fmt"
- "html/template"
- "math"
- "net/http"
- "strconv"
- "sync"
- "time"
-
- "github.com/gorilla/websocket"
- "github.com/iotaledger/goshimmer/packages/accountability"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/neighborhood"
- "github.com/iotaledger/goshimmer/plugins/metrics"
- "github.com/iotaledger/hive.go/events"
-)
-
-var (
- start = time.Now()
- homeTempl, templ_err = template.New("dashboard").Parse(tpsTemplate)
- upgrader = websocket.Upgrader{
- ReadBufferSize: 1024,
- WriteBufferSize: 1024,
- }
-)
-
-type Status struct {
- Id string `json:"Id"`
- Neighbor string `json:"Neighbor"`
- KnownPeer string `json:"KnownPeer"`
- Uptime string `json:"Uptime"`
-}
-
-func GetStatus() *Status {
- // Get Uptime
- duration := time.Since(start)
- padded := false
- uptime := fmt.Sprintf("Uptime: ")
- if int(duration.Seconds())/(60*60*24) > 0 {
- days := int(duration.Hours()) / 24
-
- numberLength := int(math.Log10(float64(days))) + 1
- padLength := 31 - numberLength
-
- uptime += fmt.Sprintf("%*v", padLength, "")
- uptime += fmt.Sprintf("%02dd ", days)
- }
-
- if int(duration.Seconds())/(60*60) > 0 {
- if !padded {
- uptime += fmt.Sprintf("%29v", "")
- padded = true
- }
- uptime += fmt.Sprintf("%02dh ", int(duration.Hours())%24)
- }
-
- if int(duration.Seconds())/60 > 0 {
- if !padded {
- uptime += fmt.Sprintf("%33v", "")
- padded = true
- }
- uptime += fmt.Sprintf("%02dm ", int(duration.Minutes())%60)
- }
-
- if !padded {
- uptime += fmt.Sprintf("%37v", "")
- }
- uptime += fmt.Sprintf("%02ds ", int(duration.Seconds())%60)
-
- return &Status{
- Id: accountability.OwnId().StringIdentifier,
- Neighbor: "Neighbors: " + strconv.Itoa(chosenneighbors.INSTANCE.Peers.Len()) + " chosen / " + strconv.Itoa(acceptedneighbors.INSTANCE.Peers.Len()) + " accepted / " + strconv.Itoa(chosenneighbors.INSTANCE.Peers.Len()+acceptedneighbors.INSTANCE.Peers.Len()) + " total",
- KnownPeer: "Known Peers: " + strconv.Itoa(knownpeers.INSTANCE.Peers.Len()) + " total / " + strconv.Itoa(neighborhood.INSTANCE.Peers.Len()) + " neighborhood",
- Uptime: uptime,
- }
-}
-
-// ServeWs websocket
-func ServeWs(w http.ResponseWriter, r *http.Request) {
- ws, err := upgrader.Upgrade(w, r, nil)
- if err != nil {
- return
- }
-
- var websocketWriteMutex sync.Mutex
-
- notifyWebsocketClient := events.NewClosure(func(sampledTPS uint64) {
- go func() {
- websocketWriteMutex.Lock()
- defer websocketWriteMutex.Unlock()
-
- p := make([]byte, 4)
- binary.LittleEndian.PutUint32(p, uint32(sampledTPS))
- if err := ws.WriteMessage(websocket.BinaryMessage, p); err != nil {
- return
- }
-
- // write node status message
- status := GetStatus()
- if err := ws.WriteJSON(status); err != nil {
- return
- }
- }()
- })
-
- metrics.Events.ReceivedTPSUpdated.Attach(notifyWebsocketClient)
-
- for {
- if _, _, err := ws.ReadMessage(); err != nil {
- break
- }
- }
-
- metrics.Events.ReceivedTPSUpdated.Detach(notifyWebsocketClient)
-}
-
-// ServeHome registration
-func ServeHome(w http.ResponseWriter, r *http.Request) {
- if r.URL.Path != "/dashboard" {
- http.Error(w, "Not found", http.StatusNotFound)
- return
- }
- if r.Method != "GET" {
- http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
- return
- }
- if templ_err != nil {
- panic("HTML template error")
- }
-
- _ = homeTempl.Execute(w, &struct {
- Host string
- Data []uint32
- }{
- r.Host,
- TPSQ,
- })
-}
-
-var TPSQ []uint32
-
-const (
- MAX_Q_SIZE int = 3600
-)
diff --git a/plugins/dashboard/tps_template.go b/plugins/dashboard/tps_template.go
deleted file mode 100644
index 00cc9aa801..0000000000
--- a/plugins/dashboard/tps_template.go
+++ /dev/null
@@ -1,346 +0,0 @@
-package dashboard
-
-var tpsTemplate = `
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-`
diff --git a/plugins/gossip-on-solidification/plugin.go b/plugins/gossip-on-solidification/plugin.go
deleted file mode 100644
index 42b09256ba..0000000000
--- a/plugins/gossip-on-solidification/plugin.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package gossip_on_solidification
-
-import (
- "github.com/iotaledger/goshimmer/packages/model/value_transaction"
- "github.com/iotaledger/goshimmer/plugins/gossip"
- "github.com/iotaledger/goshimmer/plugins/tangle"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-var PLUGIN = node.NewPlugin("Gossip On Solidification", node.Enabled, func(plugin *node.Plugin) {
- tangle.Events.TransactionSolid.Attach(events.NewClosure(func(tx *value_transaction.ValueTransaction) {
- gossip.SendTransaction(tx.MetaTransaction)
- }))
-})
diff --git a/plugins/gossip/errors.go b/plugins/gossip/errors.go
deleted file mode 100644
index 8da04cfa7c..0000000000
--- a/plugins/gossip/errors.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package gossip
-
-import "github.com/iotaledger/goshimmer/packages/errors"
-
-var (
- ErrConnectionFailed = errors.Wrap(errors.New("connection error"), "could not connect to neighbor")
- ErrInvalidAuthenticationMessage = errors.Wrap(errors.New("protocol error"), "invalid authentication message")
- ErrInvalidIdentity = errors.Wrap(errors.New("protocol error"), "invalid identity message")
- ErrInvalidStateTransition = errors.New("protocol error: invalid state transition message")
- ErrSendFailed = errors.Wrap(errors.New("protocol error"), "failed to send message")
- ErrInvalidSendParam = errors.New("invalid parameter passed to send")
-)
diff --git a/plugins/gossip/events.go b/plugins/gossip/events.go
deleted file mode 100644
index 4bcb484a1b..0000000000
--- a/plugins/gossip/events.go
+++ /dev/null
@@ -1,97 +0,0 @@
-package gossip
-
-import (
- "github.com/iotaledger/goshimmer/packages/errors"
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
- "github.com/iotaledger/goshimmer/packages/network"
- "github.com/iotaledger/hive.go/events"
-)
-
-var Events = pluginEvents{
- // neighbor events
- AddNeighbor: events.NewEvent(neighborCaller),
- UpdateNeighbor: events.NewEvent(neighborCaller),
- RemoveNeighbor: events.NewEvent(neighborCaller),
-
- // low level network events
- IncomingConnection: events.NewEvent(connectionCaller),
-
- // high level protocol events
- DropNeighbor: events.NewEvent(neighborCaller),
- SendTransaction: events.NewEvent(transactionCaller),
- SendTransactionRequest: events.NewEvent(transactionCaller), // TODO
- ReceiveTransaction: events.NewEvent(transactionCaller),
- ReceiveTransactionRequest: events.NewEvent(transactionCaller), // TODO
- ProtocolError: events.NewEvent(transactionCaller), // TODO
-
- // generic events
- Error: events.NewEvent(errorCaller),
-}
-
-type pluginEvents struct {
- // neighbor events
- AddNeighbor *events.Event
- UpdateNeighbor *events.Event
- RemoveNeighbor *events.Event
-
- // low level network events
- IncomingConnection *events.Event
-
- // high level protocol events
- DropNeighbor *events.Event
- SendTransaction *events.Event
- SendTransactionRequest *events.Event
- ReceiveTransaction *events.Event
- ReceiveTransactionRequest *events.Event
- ProtocolError *events.Event
-
- // generic events
- Error *events.Event
-}
-
-type protocolEvents struct {
- ReceiveVersion *events.Event
- ReceiveIdentification *events.Event
- ReceiveConnectionAccepted *events.Event
- ReceiveConnectionRejected *events.Event
- ReceiveDropConnection *events.Event
- ReceiveTransactionData *events.Event
- ReceiveRequestData *events.Event
- HandshakeCompleted *events.Event
- Error *events.Event
-}
-
-type neighborEvents struct {
- ProtocolConnectionEstablished *events.Event
-}
-
-func intCaller(handler interface{}, params ...interface{}) { handler.(func(int))(params[0].(int)) }
-
-func identityCaller(handler interface{}, params ...interface{}) {
- handler.(func(*identity.Identity))(params[0].(*identity.Identity))
-}
-
-func connectionCaller(handler interface{}, params ...interface{}) {
- handler.(func(*network.ManagedConnection))(params[0].(*network.ManagedConnection))
-}
-
-func protocolCaller(handler interface{}, params ...interface{}) {
- handler.(func(*protocol))(params[0].(*protocol))
-}
-
-func neighborCaller(handler interface{}, params ...interface{}) {
- handler.(func(*Neighbor))(params[0].(*Neighbor))
-}
-
-func errorCaller(handler interface{}, params ...interface{}) {
- handler.(func(errors.IdentifiableError))(params[0].(errors.IdentifiableError))
-}
-
-func dataCaller(handler interface{}, params ...interface{}) {
- handler.(func([]byte))(params[0].([]byte))
-}
-
-func transactionCaller(handler interface{}, params ...interface{}) {
- handler.(func(*meta_transaction.MetaTransaction))(params[0].(*meta_transaction.MetaTransaction))
-}
diff --git a/plugins/gossip/gossip.go b/plugins/gossip/gossip.go
new file mode 100644
index 0000000000..bdf1cca9d0
--- /dev/null
+++ b/plugins/gossip/gossip.go
@@ -0,0 +1,133 @@
+package gossip
+
+import (
+ "fmt"
+ "net"
+ "strconv"
+ "sync"
+
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer"
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer/service"
+ gp "github.com/iotaledger/goshimmer/packages/gossip"
+ "github.com/iotaledger/goshimmer/packages/gossip/server"
+ "github.com/iotaledger/goshimmer/packages/parameter"
+ "github.com/iotaledger/goshimmer/plugins/autopeering/local"
+ "github.com/iotaledger/goshimmer/plugins/cli"
+ "github.com/iotaledger/goshimmer/plugins/tangle"
+ "github.com/iotaledger/hive.go/logger"
+ "github.com/iotaledger/hive.go/typeutils"
+ "github.com/iotaledger/iota.go/trinary"
+)
+
+var (
+ log *logger.Logger
+ mgr *gp.Manager
+)
+
+func configureGossip() {
+ lPeer := local.GetInstance()
+
+ peeringAddr := lPeer.Services().Get(service.PeeringKey)
+ external, _, err := net.SplitHostPort(peeringAddr.String())
+ if err != nil {
+ panic(err)
+ }
+
+ // announce the gossip service
+ gossipPort := strconv.Itoa(parameter.NodeConfig.GetInt(GOSSIP_PORT))
+ err = lPeer.UpdateService(service.GossipKey, "tcp", net.JoinHostPort(external, gossipPort))
+ if err != nil {
+ log.Fatalf("could not update services: %s", err)
+ }
+
+ mgr = gp.NewManager(lPeer, getTransaction, log)
+}
+
+func start(shutdownSignal <-chan struct{}) {
+ defer log.Info("Stopping " + name + " ... done")
+
+ lPeer := local.GetInstance()
+ // use the port of the gossip service
+ gossipAddr := lPeer.Services().Get(service.GossipKey)
+ _, gossipPort, err := net.SplitHostPort(gossipAddr.String())
+ if err != nil {
+ panic(err)
+ }
+ // resolve the bind address
+ address := net.JoinHostPort(parameter.NodeConfig.GetString(local.CFG_BIND), gossipPort)
+ localAddr, err := net.ResolveTCPAddr(gossipAddr.Network(), address)
+ if err != nil {
+ log.Fatalf("Error resolving %s: %v", local.CFG_BIND, err)
+ }
+
+ listener, err := net.ListenTCP(gossipAddr.Network(), localAddr)
+ if err != nil {
+ log.Fatalf("Error listening: %v", err)
+ }
+ defer listener.Close()
+
+ srv := server.ServeTCP(lPeer, listener, log)
+ defer srv.Close()
+
+ //check that the server is working and the port is open
+ log.Info("Testing service ...")
+ checkConnection(srv, &lPeer.Peer)
+ log.Info("Testing service ... done")
+
+ mgr.Start(srv)
+ defer mgr.Close()
+
+ log.Infof("%s started: Address=%s/%s", name, gossipAddr.String(), gossipAddr.Network())
+
+ <-shutdownSignal
+ log.Info("Stopping " + name + " ...")
+}
+
+func checkConnection(srv *server.TCP, self *peer.Peer) {
+ var wg sync.WaitGroup
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ conn, err := srv.AcceptPeer(self)
+ if err != nil {
+ return
+ }
+ _ = conn.Close()
+ }()
+ conn, err := srv.DialPeer(self)
+ if err != nil {
+ log.Errorf("Error testing: %s", err)
+ addr := self.Services().Get(service.GossipKey)
+ log.Panicf("Please check that %s is publicly reachable at %s/%s",
+ cli.AppName, addr.String(), addr.Network())
+ }
+ _ = conn.Close()
+ wg.Wait()
+}
+
+func getTransaction(hash []byte) ([]byte, error) {
+ tx, err := tangle.GetTransaction(typeutils.BytesToString(hash))
+ log.Debugw("get tx from db",
+ "hash", hash,
+ "tx", tx,
+ "err", err,
+ )
+ if err != nil {
+ return nil, fmt.Errorf("could not get transaction: %w", err)
+ }
+ if tx == nil {
+ return nil, fmt.Errorf("transaction not found: hash=%s", hash)
+ }
+ return tx.GetBytes(), nil
+}
+
+func requestTransaction(hash trinary.Hash) {
+ mgr.RequestTransaction(typeutils.StringToBytes(hash))
+}
+
+func GetAllNeighbors() []*gp.Neighbor {
+ if mgr == nil {
+ return nil
+ }
+ return mgr.GetAllNeighbors()
+}
diff --git a/plugins/gossip/neighborMap.go b/plugins/gossip/neighborMap.go
deleted file mode 100644
index 9823c35501..0000000000
--- a/plugins/gossip/neighborMap.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package gossip
-
-import (
- "sync"
-)
-
-// NeighborMap is the mapping of neighbor identifier and their neighbor struct
-// It uses a mutex to handle concurrent access to its internal map
-type NeighborMap struct {
- sync.RWMutex
- internal map[string]*Neighbor
-}
-
-// NewPeerMap returns a new PeerMap
-func NewNeighborMap() *NeighborMap {
- return &NeighborMap{
- internal: make(map[string]*Neighbor),
- }
-}
-
-// Len returns the number of peers stored in a PeerMap
-func (nm *NeighborMap) Len() int {
- nm.RLock()
- defer nm.RUnlock()
- return len(nm.internal)
-}
-
-// GetMap returns the content of the entire internal map
-func (nm *NeighborMap) GetMap() map[string]*Neighbor {
- newMap := make(map[string]*Neighbor)
- nm.RLock()
- defer nm.RUnlock()
- for k, v := range nm.internal {
- newMap[k] = v
- }
- return newMap
-}
-
-// GetMap returns the content of the entire internal map
-func (nm *NeighborMap) GetSlice() []*Neighbor {
- newSlice := make([]*Neighbor, nm.Len())
- nm.RLock()
- defer nm.RUnlock()
- i := 0
- for _, v := range nm.internal {
- newSlice[i] = v
- i++
- }
- return newSlice
-}
-
-// Load returns the peer for a given key.
-// It also return a bool to communicate the presence of the given
-// peer into the internal map
-func (nm *NeighborMap) Load(key string) (value *Neighbor, ok bool) {
- nm.RLock()
- defer nm.RUnlock()
- result, ok := nm.internal[key]
- return result, ok
-}
-
-// Delete removes the entire entry for a given key and return true if successful
-func (nm *NeighborMap) Delete(key string) (deletedPeer *Neighbor, ok bool) {
- deletedPeer, ok = nm.Load(key)
- if !ok {
- return nil, false
- }
- nm.Lock()
- defer nm.Unlock()
- delete(nm.internal, key)
- return deletedPeer, true
-}
-
-// Store adds a new peer to the PeerMap
-func (nm *NeighborMap) Store(key string, value *Neighbor) {
- nm.Lock()
- defer nm.Unlock()
- nm.internal[key] = value
-}
diff --git a/plugins/gossip/neighbors.go b/plugins/gossip/neighbors.go
deleted file mode 100644
index d224dd04f4..0000000000
--- a/plugins/gossip/neighbors.go
+++ /dev/null
@@ -1,283 +0,0 @@
-package gossip
-
-import (
- "math"
- "net"
- "strconv"
- "sync"
- "time"
-
- "github.com/iotaledger/goshimmer/packages/accountability"
- "github.com/iotaledger/goshimmer/packages/errors"
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/packages/network"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-func configureNeighbors(plugin *node.Plugin) {
- Events.AddNeighbor.Attach(events.NewClosure(func(neighbor *Neighbor) {
- log.Infof("new neighbor added %s@%s:%d", neighbor.GetIdentity().StringIdentifier, neighbor.GetAddress().String(), neighbor.GetPort())
- }))
-
- Events.UpdateNeighbor.Attach(events.NewClosure(func(neighbor *Neighbor) {
- log.Infof("existing neighbor updated %s@%s:%d", neighbor.GetIdentity().StringIdentifier, neighbor.GetAddress().String(), neighbor.GetPort())
- }))
-
- Events.RemoveNeighbor.Attach(events.NewClosure(func(neighbor *Neighbor) {
- log.Infof("existing neighbor removed %s@%s:%d", neighbor.GetIdentity().StringIdentifier, neighbor.GetAddress().String(), neighbor.GetPort())
- }))
-}
-
-func runNeighbors(plugin *node.Plugin) {
- log.Info("Starting Neighbor Connection Manager ...")
-
- neighborLock.RLock()
- for _, neighbor := range neighbors.GetMap() {
- manageConnection(plugin, neighbor)
- }
- neighborLock.RUnlock()
-
- Events.AddNeighbor.Attach(events.NewClosure(func(neighbor *Neighbor) {
- manageConnection(plugin, neighbor)
- }))
-
- log.Info("Starting Neighbor Connection Manager ... done")
-}
-
-func manageConnection(plugin *node.Plugin, neighbor *Neighbor) {
- daemon.BackgroundWorker("Connection Manager ("+neighbor.GetIdentity().StringIdentifier+")", func() {
- failedConnectionAttempts := 0
-
- for _, exists := neighbors.Load(neighbor.GetIdentity().StringIdentifier); exists && failedConnectionAttempts < CONNECTION_MAX_ATTEMPTS; {
- protocol, dialed, err := neighbor.Connect()
- if err != nil {
- failedConnectionAttempts++
-
- log.Errorf("connection attempt [%d / %d] %s", failedConnectionAttempts, CONNECTION_MAX_ATTEMPTS, err.Error())
-
- if failedConnectionAttempts <= CONNECTION_MAX_ATTEMPTS {
- select {
- case <-daemon.ShutdownSignal:
- return
-
- case <-time.After(time.Duration(int(math.Pow(2, float64(failedConnectionAttempts-1)))) * CONNECTION_BASE_TIMEOUT):
- continue
- }
- }
- }
-
- failedConnectionAttempts = 0
-
- disconnectSignal := make(chan int, 1)
- protocol.Conn.Events.Close.Attach(events.NewClosure(func() {
- close(disconnectSignal)
- }))
-
- if dialed {
- go protocol.Init()
- }
-
- // wait for shutdown or
- select {
- case <-daemon.ShutdownSignal:
- return
-
- case <-disconnectSignal:
- continue
- }
- }
-
- RemoveNeighbor(neighbor.GetIdentity().StringIdentifier)
- })
-}
-
-type Neighbor struct {
- identity *identity.Identity
- identityMutex sync.RWMutex
- address net.IP
- addressMutex sync.RWMutex
- port uint16
- portMutex sync.RWMutex
- initiatedProtocol *protocol
- initiatedProtocolMutex sync.RWMutex
- acceptedProtocol *protocol
- Events neighborEvents
- acceptedProtocolMutex sync.RWMutex
-}
-
-func NewNeighbor(identity *identity.Identity, address net.IP, port uint16) *Neighbor {
- return &Neighbor{
- identity: identity,
- address: address,
- port: port,
- Events: neighborEvents{
- ProtocolConnectionEstablished: events.NewEvent(protocolCaller),
- },
- }
-}
-
-func (neighbor *Neighbor) GetIdentity() (result *identity.Identity) {
- neighbor.identityMutex.RLock()
- result = neighbor.identity
- neighbor.identityMutex.RUnlock()
-
- return result
-}
-
-func (neighbor *Neighbor) SetIdentity(identity *identity.Identity) {
- neighbor.identityMutex.Lock()
- neighbor.identity = identity
- neighbor.identityMutex.Unlock()
-}
-
-func (neighbor *Neighbor) GetAddress() (result net.IP) {
- neighbor.addressMutex.RLock()
- result = neighbor.address
- neighbor.addressMutex.RUnlock()
-
- return result
-}
-
-func (neighbor *Neighbor) SetAddress(address net.IP) {
- neighbor.addressMutex.Lock()
- neighbor.address = address
- neighbor.addressMutex.Unlock()
-}
-
-func (neighbor *Neighbor) GetPort() (result uint16) {
- neighbor.portMutex.RLock()
- result = neighbor.port
- neighbor.portMutex.RUnlock()
-
- return result
-}
-
-func (neighbor *Neighbor) SetPort(port uint16) {
- neighbor.portMutex.Lock()
- neighbor.port = port
- neighbor.portMutex.Unlock()
-}
-
-func (neighbor *Neighbor) GetInitiatedProtocol() (result *protocol) {
- neighbor.initiatedProtocolMutex.RLock()
- result = neighbor.initiatedProtocol
- neighbor.initiatedProtocolMutex.RUnlock()
-
- return result
-}
-
-func (neighbor *Neighbor) SetInitiatedProtocol(p *protocol) {
- neighbor.initiatedProtocolMutex.Lock()
- neighbor.initiatedProtocol = p
- neighbor.initiatedProtocolMutex.Unlock()
-}
-
-func (neighbor *Neighbor) GetAcceptedProtocol() (result *protocol) {
- neighbor.acceptedProtocolMutex.RLock()
- result = neighbor.acceptedProtocol
- neighbor.acceptedProtocolMutex.RUnlock()
-
- return result
-}
-
-func (neighbor *Neighbor) SetAcceptedProtocol(p *protocol) {
- neighbor.acceptedProtocolMutex.Lock()
- neighbor.acceptedProtocol = p
- neighbor.acceptedProtocolMutex.Unlock()
-}
-
-func UnmarshalPeer(data []byte) (*Neighbor, error) {
- return &Neighbor{}, nil
-}
-
-func (neighbor *Neighbor) Connect() (*protocol, bool, errors.IdentifiableError) {
- // return existing connections first
- if neighbor.GetInitiatedProtocol() != nil {
- return neighbor.GetInitiatedProtocol(), false, nil
- }
-
- // if we already have an accepted connection -> use it instead
- if neighbor.GetAcceptedProtocol() != nil {
- return neighbor.GetAcceptedProtocol(), false, nil
- }
-
- // otherwise try to dial
- conn, err := net.Dial("tcp", neighbor.GetAddress().String()+":"+strconv.Itoa(int(neighbor.GetPort())))
- if err != nil {
- return nil, false, ErrConnectionFailed.Derive(err, "error when connecting to neighbor "+
- neighbor.GetIdentity().StringIdentifier+"@"+neighbor.GetAddress().String()+":"+strconv.Itoa(int(neighbor.GetPort())))
- }
-
- neighbor.SetInitiatedProtocol(newProtocol(network.NewManagedConnection(conn)))
-
- neighbor.GetInitiatedProtocol().Conn.Events.Close.Attach(events.NewClosure(func() {
- neighbor.SetInitiatedProtocol(nil)
- }))
-
- // drop the "secondary" connection upon successful handshake
- neighbor.GetInitiatedProtocol().Events.HandshakeCompleted.Attach(events.NewClosure(func() {
- if accountability.OwnId().StringIdentifier <= neighbor.GetIdentity().StringIdentifier {
- var acceptedProtocolConn *network.ManagedConnection
- if neighbor.GetAcceptedProtocol() != nil {
- acceptedProtocolConn = neighbor.GetAcceptedProtocol().Conn
- }
-
- if acceptedProtocolConn != nil {
- _ = acceptedProtocolConn.Close()
- }
- }
-
- neighbor.Events.ProtocolConnectionEstablished.Trigger(neighbor.GetInitiatedProtocol())
- }))
-
- return neighbor.GetInitiatedProtocol(), true, nil
-}
-
-func (neighbor *Neighbor) Marshal() []byte {
- return nil
-}
-
-func (neighbor *Neighbor) Equals(other *Neighbor) bool {
- return neighbor.GetIdentity().StringIdentifier == other.GetIdentity().StringIdentifier &&
- neighbor.GetPort() == other.GetPort() && neighbor.GetAddress().String() == other.GetAddress().String()
-}
-
-func AddNeighbor(newNeighbor *Neighbor) {
- if neighbor, exists := neighbors.Load(newNeighbor.GetIdentity().StringIdentifier); !exists {
- neighbors.Store(newNeighbor.GetIdentity().StringIdentifier, newNeighbor)
- Events.AddNeighbor.Trigger(newNeighbor)
- } else {
- if !neighbor.Equals(newNeighbor) {
- neighbor.SetIdentity(newNeighbor.GetIdentity())
- neighbor.SetPort(newNeighbor.GetPort())
- neighbor.SetAddress(newNeighbor.GetAddress())
-
- Events.UpdateNeighbor.Trigger(neighbor)
- }
- }
-}
-
-func RemoveNeighbor(identifier string) {
- if neighbor, exists := neighbors.Delete(identifier); exists {
- Events.RemoveNeighbor.Trigger(neighbor)
- }
-}
-
-func GetNeighbor(identifier string) (*Neighbor, bool) {
- return neighbors.Load(identifier)
-}
-
-func GetNeighbors() map[string]*Neighbor {
- return neighbors.GetMap()
-}
-
-const (
- CONNECTION_MAX_ATTEMPTS = 5
- CONNECTION_BASE_TIMEOUT = 10 * time.Second
-)
-
-var neighbors = NewNeighborMap()
-
-var neighborLock sync.RWMutex
diff --git a/plugins/gossip/plugin.go b/plugins/gossip/plugin.go
index c3d7ffef9f..f6f5717ed0 100644
--- a/plugins/gossip/plugin.go
+++ b/plugins/gossip/plugin.go
@@ -1,21 +1,77 @@
package gossip
import (
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer"
+ "github.com/iotaledger/goshimmer/packages/autopeering/selection"
+ "github.com/iotaledger/goshimmer/packages/gossip"
+ "github.com/iotaledger/goshimmer/packages/model/value_transaction"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
+ "github.com/iotaledger/goshimmer/plugins/tangle"
+ "github.com/iotaledger/hive.go/daemon"
+ "github.com/iotaledger/hive.go/events"
"github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/node"
)
-var PLUGIN = node.NewPlugin("Gossip", node.Enabled, configure, run)
-var log = logger.NewLogger("Gossip")
+const name = "Gossip" // name of the plugin
-func configure(plugin *node.Plugin) {
- configureNeighbors(plugin)
- configureServer(plugin)
- configureSendQueue(plugin)
+var PLUGIN = node.NewPlugin(name, node.Enabled, configure, run)
+
+func configure(*node.Plugin) {
+ log = logger.NewLogger(name)
+
+ configureGossip()
+ configureEvents()
+}
+
+func run(*node.Plugin) {
+ if err := daemon.BackgroundWorker(name, start, shutdown.ShutdownPriorityGossip); err != nil {
+ log.Errorf("Failed to start as daemon: %s", err)
+ }
}
-func run(plugin *node.Plugin) {
- runNeighbors(plugin)
- runServer(plugin)
- runSendQueue(plugin)
+func configureEvents() {
+ selection.Events.Dropped.Attach(events.NewClosure(func(ev *selection.DroppedEvent) {
+ go func() {
+ if err := mgr.DropNeighbor(ev.DroppedID); err != nil {
+ log.Debugw("error dropping neighbor", "id", ev.DroppedID, "err", err)
+ }
+ }()
+ }))
+ selection.Events.IncomingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) {
+ if !ev.Status {
+ return // ignore rejected peering
+ }
+ go func() {
+ if err := mgr.AddInbound(ev.Peer); err != nil {
+ log.Debugw("error adding inbound", "id", ev.Peer.ID(), "err", err)
+ }
+ }()
+ }))
+ selection.Events.OutgoingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) {
+ if !ev.Status {
+ return // ignore rejected peering
+ }
+ go func() {
+ if err := mgr.AddOutbound(ev.Peer); err != nil {
+ log.Debugw("error adding outbound", "id", ev.Peer.ID(), "err", err)
+ }
+ }()
+ }))
+
+ gossip.Events.ConnectionFailed.Attach(events.NewClosure(func(p *peer.Peer) {
+ log.Infof("Connection to neighbor failed: %s / %s", gossip.GetAddress(p), p.ID())
+ }))
+ gossip.Events.NeighborAdded.Attach(events.NewClosure(func(n *gossip.Neighbor) {
+ log.Infof("Neighbor added: %s / %s", gossip.GetAddress(n.Peer), n.ID())
+ }))
+ gossip.Events.NeighborRemoved.Attach(events.NewClosure(func(p *peer.Peer) {
+ log.Infof("Neighbor removed: %s / %s", gossip.GetAddress(p), p.ID())
+ }))
+
+ // gossip transactions on solidification
+ tangle.Events.TransactionSolid.Attach(events.NewClosure(func(tx *value_transaction.ValueTransaction) {
+ mgr.SendTransaction(tx.GetBytes())
+ }))
+ tangle.SetRequester(tangle.RequesterFunc(requestTransaction))
}
diff --git a/plugins/gossip/protocol.go b/plugins/gossip/protocol.go
deleted file mode 100644
index 54c891714b..0000000000
--- a/plugins/gossip/protocol.go
+++ /dev/null
@@ -1,199 +0,0 @@
-package gossip
-
-import (
- "strconv"
- "sync"
-
- "github.com/iotaledger/goshimmer/packages/errors"
- "github.com/iotaledger/goshimmer/packages/network"
- "github.com/iotaledger/hive.go/events"
-)
-
-// region constants and variables //////////////////////////////////////////////////////////////////////////////////////
-
-var DEFAULT_PROTOCOL = protocolDefinition{
- version: VERSION_1,
- initializer: protocolV1,
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region protocol /////////////////////////////////////////////////////////////////////////////////////////////////////
-
-type protocol struct {
- Conn *network.ManagedConnection
- Neighbor *Neighbor
- Version byte
- sendHandshakeCompleted bool
- receiveHandshakeCompleted bool
- SendState protocolState
- ReceivingState protocolState
- Events protocolEvents
- sendMutex sync.Mutex
- handshakeMutex sync.Mutex
-}
-
-func newProtocol(conn *network.ManagedConnection) *protocol {
- protocol := &protocol{
- Conn: conn,
- Events: protocolEvents{
- ReceiveVersion: events.NewEvent(intCaller),
- ReceiveIdentification: events.NewEvent(identityCaller),
- ReceiveConnectionAccepted: events.NewEvent(events.CallbackCaller),
- ReceiveConnectionRejected: events.NewEvent(events.CallbackCaller),
- ReceiveTransactionData: events.NewEvent(dataCaller),
- HandshakeCompleted: events.NewEvent(events.CallbackCaller),
- Error: events.NewEvent(errorCaller),
- },
- sendHandshakeCompleted: false,
- receiveHandshakeCompleted: false,
- }
-
- protocol.SendState = &versionState{protocol: protocol}
- protocol.ReceivingState = &versionState{protocol: protocol}
-
- return protocol
-}
-
-func (protocol *protocol) Init() {
- // setup event handlers
- onReceiveData := events.NewClosure(protocol.Receive)
- onConnectionAccepted := events.NewClosure(func() {
- protocol.handshakeMutex.Lock()
- defer protocol.handshakeMutex.Unlock()
-
- protocol.receiveHandshakeCompleted = true
- if protocol.sendHandshakeCompleted {
- protocol.Events.HandshakeCompleted.Trigger()
- }
- })
- var onClose *events.Closure
- onClose = events.NewClosure(func() {
- protocol.Conn.Events.ReceiveData.Detach(onReceiveData)
- protocol.Conn.Events.Close.Detach(onClose)
- protocol.Events.ReceiveConnectionAccepted.Detach(onConnectionAccepted)
- })
-
- // region register event handlers
- protocol.Conn.Events.ReceiveData.Attach(onReceiveData)
- protocol.Conn.Events.Close.Attach(onClose)
- protocol.Events.ReceiveConnectionAccepted.Attach(onConnectionAccepted)
-
- // send protocol version
- if err := protocol.Send(DEFAULT_PROTOCOL.version); err != nil {
- return
- }
-
- // initialize default protocol
- if err := DEFAULT_PROTOCOL.initializer(protocol); err != nil {
- protocol.SendState = nil
-
- _ = protocol.Conn.Close()
-
- protocol.Events.Error.Trigger(err)
-
- return
- }
-
- // start reading from the connection
- _, _ = protocol.Conn.Read(make([]byte, 1000))
-}
-
-func (protocol *protocol) Receive(data []byte) {
- offset := 0
- length := len(data)
- for offset < length && protocol.ReceivingState != nil {
- if readBytes, err := protocol.ReceivingState.Receive(data, offset, length); err != nil {
- Events.Error.Trigger(err)
-
- _ = protocol.Conn.Close()
-
- return
- } else {
- offset += readBytes
- }
- }
-}
-
-func (protocol *protocol) Send(data interface{}) errors.IdentifiableError {
- protocol.sendMutex.Lock()
- defer protocol.sendMutex.Unlock()
-
- return protocol.send(data)
-}
-
-func (protocol *protocol) send(data interface{}) errors.IdentifiableError {
- if protocol.SendState != nil {
- if err := protocol.SendState.Send(data); err != nil {
- protocol.SendState = nil
-
- _ = protocol.Conn.Close()
-
- protocol.Events.Error.Trigger(err)
-
- return err
- }
- }
-
- return nil
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region versionState /////////////////////////////////////////////////////////////////////////////////////////////////
-
-type versionState struct {
- protocol *protocol
-}
-
-func (state *versionState) Receive(data []byte, offset int, length int) (int, errors.IdentifiableError) {
- switch data[offset] {
- case 1:
- protocol := state.protocol
-
- protocol.Version = 1
- protocol.Events.ReceiveVersion.Trigger(1)
-
- protocol.ReceivingState = newIndentificationStateV1(protocol)
-
- return 1, nil
-
- default:
- return 1, ErrInvalidStateTransition.Derive("invalid version state transition (" + strconv.Itoa(int(data[offset])) + ")")
- }
-}
-
-func (state *versionState) Send(param interface{}) errors.IdentifiableError {
- if version, ok := param.(byte); ok {
- switch version {
- case VERSION_1:
- protocol := state.protocol
-
- if _, err := protocol.Conn.Write([]byte{version}); err != nil {
- return ErrSendFailed.Derive(err, "failed to send version byte")
- }
-
- protocol.SendState = newIndentificationStateV1(protocol)
-
- return nil
- }
- }
-
- return ErrInvalidSendParam.Derive("passed in parameter is not a valid version byte")
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region types and interfaces /////////////////////////////////////////////////////////////////////////////////////////
-
-type protocolState interface {
- Send(param interface{}) errors.IdentifiableError
- Receive(data []byte, offset int, length int) (int, errors.IdentifiableError)
-}
-
-type protocolDefinition struct {
- version byte
- initializer func(*protocol) errors.IdentifiableError
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/gossip/protocol_v1.go b/plugins/gossip/protocol_v1.go
deleted file mode 100644
index ccd022a3b6..0000000000
--- a/plugins/gossip/protocol_v1.go
+++ /dev/null
@@ -1,398 +0,0 @@
-package gossip
-
-import (
- "bytes"
- "strconv"
-
- "github.com/iotaledger/goshimmer/packages/accountability"
- "github.com/iotaledger/goshimmer/packages/byteutils"
- "github.com/iotaledger/goshimmer/packages/errors"
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/iota.go/consts"
-)
-
-// region protocolV1 ///////////////////////////////////////////////////////////////////////////////////////////////////
-
-func protocolV1(protocol *protocol) errors.IdentifiableError {
- if err := protocol.Send(accountability.OwnId()); err != nil {
- return err
- }
-
- onReceiveIdentification := events.NewClosure(func(identity *identity.Identity) {
- if protocol.Neighbor == nil {
- if err := protocol.Send(CONNECTION_REJECT); err != nil {
- return
- }
- } else {
- if err := protocol.Send(CONNECTION_ACCEPT); err != nil {
- return
- }
-
- protocol.handshakeMutex.Lock()
- defer protocol.handshakeMutex.Unlock()
-
- protocol.sendHandshakeCompleted = true
- if protocol.receiveHandshakeCompleted {
- protocol.Events.HandshakeCompleted.Trigger()
- }
- }
- })
-
- protocol.Events.ReceiveIdentification.Attach(onReceiveIdentification)
-
- return nil
-}
-
-func sendTransactionV1(protocol *protocol, tx *meta_transaction.MetaTransaction) {
- if _, ok := protocol.SendState.(*dispatchStateV1); ok {
- protocol.sendMutex.Lock()
- defer protocol.sendMutex.Unlock()
-
- if err := protocol.send(DISPATCH_TRANSACTION); err != nil {
- return
- }
- if err := protocol.send(tx); err != nil {
- return
- }
- }
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region indentificationStateV1 ///////////////////////////////////////////////////////////////////////////////////////
-
-type indentificationStateV1 struct {
- protocol *protocol
- buffer []byte
- offset int
-}
-
-func newIndentificationStateV1(protocol *protocol) *indentificationStateV1 {
- return &indentificationStateV1{
- protocol: protocol,
- buffer: make([]byte, MARSHALED_IDENTITY_TOTAL_SIZE),
- offset: 0,
- }
-}
-
-func (state *indentificationStateV1) Receive(data []byte, offset int, length int) (int, errors.IdentifiableError) {
- bytesRead := byteutils.ReadAvailableBytesToBuffer(state.buffer, state.offset, data, offset, length)
-
- state.offset += bytesRead
- if state.offset == MARSHALED_IDENTITY_TOTAL_SIZE {
- if receivedIdentity, err := unmarshalIdentity(state.buffer); err != nil {
- return bytesRead, ErrInvalidAuthenticationMessage.Derive(err, "invalid authentication message")
- } else {
- protocol := state.protocol
-
- if neighbor, exists := neighbors.Load(receivedIdentity.StringIdentifier); exists {
- protocol.Neighbor = neighbor
- } else {
- protocol.Neighbor = nil
- }
-
- protocol.Events.ReceiveIdentification.Trigger(receivedIdentity)
-
- protocol.ReceivingState = newacceptanceStateV1(protocol)
- state.offset = 0
- }
- }
-
- return bytesRead, nil
-}
-
-func (state *indentificationStateV1) Send(param interface{}) errors.IdentifiableError {
- if id, ok := param.(*identity.Identity); ok {
- if signature, err := id.Sign(id.Identifier); err == nil {
- protocol := state.protocol
-
- if _, err := protocol.Conn.Write(id.Identifier); err != nil {
- return ErrSendFailed.Derive(err, "failed to send identifier")
- }
- if _, err := protocol.Conn.Write(signature); err != nil {
- return ErrSendFailed.Derive(err, "failed to send signature")
- }
-
- protocol.SendState = newacceptanceStateV1(protocol)
-
- return nil
- }
- }
-
- return ErrInvalidSendParam.Derive("passed in parameter is not a valid identity")
-}
-
-func unmarshalIdentity(data []byte) (*identity.Identity, error) {
- identifier := data[MARSHALED_IDENTITY_START:MARSHALED_IDENTITY_END]
-
- if restoredIdentity, err := identity.FromSignedData(identifier, data[MARSHALED_IDENTITY_SIGNATURE_START:MARSHALED_IDENTITY_SIGNATURE_END]); err != nil {
- return nil, err
- } else {
- if bytes.Equal(identifier, restoredIdentity.Identifier) {
- return restoredIdentity, nil
- } else {
- return nil, errors.New("signature does not match claimed identity")
- }
- }
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region acceptanceStateV1 ////////////////////////////////////////////////////////////////////////////////////////////
-
-type acceptanceStateV1 struct {
- protocol *protocol
-}
-
-func newacceptanceStateV1(protocol *protocol) *acceptanceStateV1 {
- return &acceptanceStateV1{protocol: protocol}
-}
-
-func (state *acceptanceStateV1) Receive(data []byte, offset int, length int) (int, errors.IdentifiableError) {
- protocol := state.protocol
-
- switch data[offset] {
- case 0:
- protocol.Events.ReceiveConnectionRejected.Trigger()
-
- _ = protocol.Conn.Close()
-
- protocol.ReceivingState = nil
-
- case 1:
- protocol.Events.ReceiveConnectionAccepted.Trigger()
-
- protocol.ReceivingState = newDispatchStateV1(protocol)
-
- default:
- return 1, ErrInvalidStateTransition.Derive("invalid acceptance state transition (" + strconv.Itoa(int(data[offset])) + ")")
- }
-
- return 1, nil
-}
-
-func (state *acceptanceStateV1) Send(param interface{}) errors.IdentifiableError {
- if responseType, ok := param.(byte); ok {
- switch responseType {
- case CONNECTION_REJECT:
- protocol := state.protocol
-
- if _, err := protocol.Conn.Write([]byte{CONNECTION_REJECT}); err != nil {
- return ErrSendFailed.Derive(err, "failed to send reject message")
- }
-
- _ = protocol.Conn.Close()
-
- protocol.SendState = nil
-
- return nil
-
- case CONNECTION_ACCEPT:
- protocol := state.protocol
-
- if _, err := protocol.Conn.Write([]byte{CONNECTION_ACCEPT}); err != nil {
- return ErrSendFailed.Derive(err, "failed to send accept message")
- }
-
- protocol.SendState = newDispatchStateV1(protocol)
-
- return nil
- }
- }
-
- return ErrInvalidSendParam.Derive("passed in parameter is not a valid acceptance byte")
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region dispatchStateV1 //////////////////////////////////////////////////////////////////////////////////////////////
-
-type dispatchStateV1 struct {
- protocol *protocol
-}
-
-func newDispatchStateV1(protocol *protocol) *dispatchStateV1 {
- return &dispatchStateV1{
- protocol: protocol,
- }
-}
-
-func (state *dispatchStateV1) Receive(data []byte, offset int, length int) (int, errors.IdentifiableError) {
- switch data[0] {
- case DISPATCH_DROP:
- protocol := state.protocol
-
- protocol.Events.ReceiveConnectionRejected.Trigger()
-
- _ = protocol.Conn.Close()
-
- protocol.ReceivingState = nil
-
- case DISPATCH_TRANSACTION:
- protocol := state.protocol
-
- protocol.ReceivingState = newTransactionStateV1(protocol)
-
- case DISPATCH_REQUEST:
- protocol := state.protocol
-
- protocol.ReceivingState = newRequestStateV1(protocol)
-
- default:
- return 1, ErrInvalidStateTransition.Derive("invalid dispatch state transition (" + strconv.Itoa(int(data[offset])) + ")")
- }
-
- return 1, nil
-}
-
-func (state *dispatchStateV1) Send(param interface{}) errors.IdentifiableError {
- if dispatchByte, ok := param.(byte); ok {
- switch dispatchByte {
- case DISPATCH_DROP:
- protocol := state.protocol
-
- if _, err := protocol.Conn.Write([]byte{DISPATCH_DROP}); err != nil {
- return ErrSendFailed.Derive(err, "failed to send drop message")
- }
-
- _ = protocol.Conn.Close()
-
- protocol.SendState = nil
-
- return nil
-
- case DISPATCH_TRANSACTION:
- protocol := state.protocol
-
- if _, err := protocol.Conn.Write([]byte{DISPATCH_TRANSACTION}); err != nil {
- return ErrSendFailed.Derive(err, "failed to send transaction dispatch byte")
- }
-
- protocol.SendState = newTransactionStateV1(protocol)
-
- return nil
-
- case DISPATCH_REQUEST:
- protocol := state.protocol
-
- if _, err := protocol.Conn.Write([]byte{DISPATCH_REQUEST}); err != nil {
- return ErrSendFailed.Derive(err, "failed to send request dispatch byte")
- }
-
- protocol.SendState = newTransactionStateV1(protocol)
-
- return nil
- }
- }
-
- return ErrInvalidSendParam.Derive("passed in parameter is not a valid dispatch byte")
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region transactionStateV1 ///////////////////////////////////////////////////////////////////////////////////////////
-
-type transactionStateV1 struct {
- protocol *protocol
- buffer []byte
- offset int
-}
-
-func newTransactionStateV1(protocol *protocol) *transactionStateV1 {
- return &transactionStateV1{
- protocol: protocol,
- buffer: make([]byte, meta_transaction.MARSHALED_TOTAL_SIZE/consts.NumberOfTritsInAByte),
- offset: 0,
- }
-}
-
-func (state *transactionStateV1) Receive(data []byte, offset int, length int) (int, errors.IdentifiableError) {
- bytesRead := byteutils.ReadAvailableBytesToBuffer(state.buffer, state.offset, data, offset, length)
-
- state.offset += bytesRead
- if state.offset == meta_transaction.MARSHALED_TOTAL_SIZE/consts.NumberOfTritsInAByte {
- protocol := state.protocol
-
- transactionData := make([]byte, meta_transaction.MARSHALED_TOTAL_SIZE/consts.NumberOfTritsInAByte)
- copy(transactionData, state.buffer)
-
- protocol.Events.ReceiveTransactionData.Trigger(transactionData)
-
- go ProcessReceivedTransactionData(transactionData)
-
- protocol.ReceivingState = newDispatchStateV1(protocol)
- state.offset = 0
- }
-
- return bytesRead, nil
-}
-
-func (state *transactionStateV1) Send(param interface{}) errors.IdentifiableError {
- if tx, ok := param.(*meta_transaction.MetaTransaction); ok {
- protocol := state.protocol
-
- if _, err := protocol.Conn.Write(tx.GetBytes()); err != nil {
- return ErrSendFailed.Derive(err, "failed to send transaction")
- }
-
- protocol.SendState = newDispatchStateV1(protocol)
-
- return nil
- }
-
- return ErrInvalidSendParam.Derive("passed in parameter is not a valid transaction")
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region requestStateV1 ///////////////////////////////////////////////////////////////////////////////////////////////
-
-type requestStateV1 struct {
- buffer []byte
- offset int
-}
-
-func newRequestStateV1(protocol *protocol) *requestStateV1 {
- return &requestStateV1{
- buffer: make([]byte, 1),
- offset: 0,
- }
-}
-
-func (state *requestStateV1) Receive(data []byte, offset int, length int) (int, errors.IdentifiableError) {
- return 0, nil
-}
-
-func (state *requestStateV1) Send(param interface{}) errors.IdentifiableError {
- return nil
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region constants and variables //////////////////////////////////////////////////////////////////////////////////////
-
-const (
- VERSION_1 = byte(1)
-
- CONNECTION_REJECT = byte(0)
- CONNECTION_ACCEPT = byte(1)
-
- DISPATCH_DROP = byte(0)
- DISPATCH_TRANSACTION = byte(1)
- DISPATCH_REQUEST = byte(2)
-
- MARSHALED_IDENTITY_START = 0
- MARSHALED_IDENTITY_SIGNATURE_START = MARSHALED_IDENTITY_END
-
- MARSHALED_IDENTITY_SIZE = 20
- MARSHALED_IDENTITY_SIGNATURE_SIZE = 65
-
- MARSHALED_IDENTITY_END = MARSHALED_IDENTITY_START + MARSHALED_IDENTITY_SIZE
- MARSHALED_IDENTITY_SIGNATURE_END = MARSHALED_IDENTITY_SIGNATURE_START + MARSHALED_IDENTITY_SIGNATURE_SIZE
-
- MARSHALED_IDENTITY_TOTAL_SIZE = MARSHALED_IDENTITY_SIGNATURE_END
-)
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/gossip/protocol_v1.png b/plugins/gossip/protocol_v1.png
deleted file mode 100644
index ce66775646..0000000000
Binary files a/plugins/gossip/protocol_v1.png and /dev/null differ
diff --git a/plugins/gossip/send_queue.go b/plugins/gossip/send_queue.go
deleted file mode 100644
index c855028951..0000000000
--- a/plugins/gossip/send_queue.go
+++ /dev/null
@@ -1,156 +0,0 @@
-package gossip
-
-import (
- "sync"
-
- "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
-)
-
-// region plugin module setup //////////////////////////////////////////////////////////////////////////////////////////
-
-func configureSendQueue(plugin *node.Plugin) {
- for _, neighbor := range neighbors.GetMap() {
- setupEventHandlers(neighbor)
- }
-
- Events.AddNeighbor.Attach(events.NewClosure(setupEventHandlers))
-
- daemon.Events.Shutdown.Attach(events.NewClosure(func() {
- log.Info("Stopping Send Queue Dispatcher ...")
- }))
-}
-
-func runSendQueue(plugin *node.Plugin) {
- log.Info("Starting Send Queue Dispatcher ...")
-
- daemon.BackgroundWorker("Gossip Send Queue Dispatcher", func() {
- log.Info("Starting Send Queue Dispatcher ... done")
-
- for {
- select {
- case <-daemon.ShutdownSignal:
- log.Info("Stopping Send Queue Dispatcher ... done")
-
- return
-
- case tx := <-sendQueue:
- connectedNeighborsMutex.RLock()
- for _, neighborQueue := range neighborQueues {
- select {
- case neighborQueue.queue <- tx:
- // log sth
-
- default:
- // log sth
- }
- }
- connectedNeighborsMutex.RUnlock()
- }
- }
- })
-
- connectedNeighborsMutex.Lock()
- for _, neighborQueue := range neighborQueues {
- startNeighborSendQueue(neighborQueue.protocol.Neighbor, neighborQueue)
- }
- connectedNeighborsMutex.Unlock()
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region public api ///////////////////////////////////////////////////////////////////////////////////////////////////
-
-func SendTransaction(transaction *meta_transaction.MetaTransaction) {
- sendQueue <- transaction
-}
-
-func (neighbor *Neighbor) SendTransaction(transaction *meta_transaction.MetaTransaction) {
- if queue, exists := neighborQueues[neighbor.GetIdentity().StringIdentifier]; exists {
- select {
- case queue.queue <- transaction:
- return
-
- default:
- return
- }
- }
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region utility methods //////////////////////////////////////////////////////////////////////////////////////////////
-
-func setupEventHandlers(neighbor *Neighbor) {
- neighbor.Events.ProtocolConnectionEstablished.Attach(events.NewClosure(func(protocol *protocol) {
- queue := &neighborQueue{
- protocol: protocol,
- queue: make(chan *meta_transaction.MetaTransaction, SEND_QUEUE_SIZE),
- disconnectChan: make(chan int, 1),
- }
-
- connectedNeighborsMutex.Lock()
- neighborQueues[neighbor.GetIdentity().StringIdentifier] = queue
- connectedNeighborsMutex.Unlock()
-
- protocol.Conn.Events.Close.Attach(events.NewClosure(func() {
- close(queue.disconnectChan)
-
- connectedNeighborsMutex.Lock()
- delete(neighborQueues, neighbor.GetIdentity().StringIdentifier)
- connectedNeighborsMutex.Unlock()
- }))
-
- if daemon.IsRunning() {
- startNeighborSendQueue(neighbor, queue)
- }
- }))
-}
-
-func startNeighborSendQueue(neighbor *Neighbor, neighborQueue *neighborQueue) {
- daemon.BackgroundWorker("Gossip Send Queue ("+neighbor.GetIdentity().StringIdentifier+")", func() {
- for {
- select {
- case <-daemon.ShutdownSignal:
- return
-
- case <-neighborQueue.disconnectChan:
- return
-
- case tx := <-neighborQueue.queue:
- switch neighborQueue.protocol.Version {
- case VERSION_1:
- sendTransactionV1(neighborQueue.protocol, tx)
- }
- }
- }
- })
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region types and interfaces /////////////////////////////////////////////////////////////////////////////////////////
-
-type neighborQueue struct {
- protocol *protocol
- queue chan *meta_transaction.MetaTransaction
- disconnectChan chan int
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region constants and variables //////////////////////////////////////////////////////////////////////////////////////
-
-var neighborQueues = make(map[string]*neighborQueue)
-
-var connectedNeighborsMutex sync.RWMutex
-
-var sendQueue = make(chan *meta_transaction.MetaTransaction, SEND_QUEUE_SIZE)
-
-const (
- SEND_QUEUE_SIZE = 500
-)
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/gossip/server.go b/plugins/gossip/server.go
deleted file mode 100644
index ec5e146dfa..0000000000
--- a/plugins/gossip/server.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package gossip
-
-import (
- "github.com/iotaledger/goshimmer/packages/accountability"
- "github.com/iotaledger/goshimmer/packages/errors"
- "github.com/iotaledger/goshimmer/packages/identity"
- "github.com/iotaledger/goshimmer/packages/network"
- "github.com/iotaledger/goshimmer/packages/network/tcp"
- "github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
-)
-
-var TCPServer = tcp.NewServer()
-
-func configureServer(plugin *node.Plugin) {
- TCPServer.Events.Connect.Attach(events.NewClosure(func(conn *network.ManagedConnection) {
- protocol := newProtocol(conn)
-
- // print protocol errors
- protocol.Events.Error.Attach(events.NewClosure(func(err errors.IdentifiableError) {
- log.Error(err.Error())
- }))
-
- // store protocol in neighbor if its a neighbor calling
- protocol.Events.ReceiveIdentification.Attach(events.NewClosure(func(identity *identity.Identity) {
- if protocol.Neighbor != nil {
-
- if protocol.Neighbor.GetAcceptedProtocol() == nil {
- protocol.Neighbor.SetAcceptedProtocol(protocol)
-
- protocol.Conn.Events.Close.Attach(events.NewClosure(func() {
- protocol.Neighbor.SetAcceptedProtocol(nil)
- }))
- }
- }
- }))
-
- // drop the "secondary" connection upon successful handshake
- protocol.Events.HandshakeCompleted.Attach(events.NewClosure(func() {
- if protocol.Neighbor.GetIdentity().StringIdentifier <= accountability.OwnId().StringIdentifier {
- var initiatedProtocolConn *network.ManagedConnection
- if protocol.Neighbor.GetInitiatedProtocol() != nil {
- initiatedProtocolConn = protocol.Neighbor.GetInitiatedProtocol().Conn
- }
-
- if initiatedProtocolConn != nil {
- _ = initiatedProtocolConn.Close()
- }
- }
-
- protocol.Neighbor.Events.ProtocolConnectionEstablished.Trigger(protocol)
- }))
-
- go protocol.Init()
- }))
-
- daemon.Events.Shutdown.Attach(events.NewClosure(func() {
- log.Info("Stopping TCP Server ...")
-
- TCPServer.Shutdown()
- }))
-}
-
-func runServer(plugin *node.Plugin) {
- gossipPort := parameter.NodeConfig.GetInt(GOSSIP_PORT)
- log.Infof("Starting TCP Server (port %d) ...", gossipPort)
-
- daemon.BackgroundWorker("Gossip TCP Server", func() {
- log.Infof("Starting TCP Server (port %d) ... done", gossipPort)
-
- TCPServer.Listen(gossipPort)
-
- log.Info("Stopping TCP Server ... done")
- })
-}
diff --git a/plugins/gossip/transaction_processor.go b/plugins/gossip/transaction_processor.go
deleted file mode 100644
index 742ac36929..0000000000
--- a/plugins/gossip/transaction_processor.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package gossip
-
-import (
- "github.com/iotaledger/goshimmer/packages/filter"
- "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
-)
-
-// region public api ///////////////////////////////////////////////////////////////////////////////////////////////////
-
-func ProcessReceivedTransactionData(transactionData []byte) {
- if transactionFilter.Add(transactionData) {
- Events.ReceiveTransaction.Trigger(meta_transaction.FromBytes(transactionData))
- }
-}
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// region constants and variables //////////////////////////////////////////////////////////////////////////////////////
-
-var transactionFilter = filter.NewByteArrayFilter(TRANSACTION_FILTER_SIZE)
-
-const (
- TRANSACTION_FILTER_SIZE = 500
-)
-
-// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/gossip/transaction_processor_test.go b/plugins/gossip/transaction_processor_test.go
deleted file mode 100644
index 082eba9d38..0000000000
--- a/plugins/gossip/transaction_processor_test.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package gossip
-
-import (
- "sync"
- "testing"
-
- "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
- "github.com/iotaledger/iota.go/consts"
-)
-
-func BenchmarkProcessSimilarTransactionsFiltered(b *testing.B) {
- byteArray := setupTransaction(meta_transaction.MARSHALED_TOTAL_SIZE / consts.NumberOfTritsInAByte)
-
- b.ResetTimer()
-
- for i := 0; i < b.N; i++ {
- ProcessReceivedTransactionData(byteArray)
- }
-}
-
-func BenchmarkProcessSimilarTransactionsUnfiltered(b *testing.B) {
- byteArray := setupTransaction(meta_transaction.MARSHALED_TOTAL_SIZE / consts.NumberOfTritsInAByte)
-
- b.ResetTimer()
-
- var wg sync.WaitGroup
-
- for i := 0; i < b.N; i++ {
- wg.Add(1)
-
- go func() {
- Events.ReceiveTransaction.Trigger(meta_transaction.FromBytes(byteArray))
-
- wg.Done()
- }()
- }
-
- wg.Wait()
-}
-
-func setupTransaction(byteArraySize int) []byte {
- byteArray := make([]byte, byteArraySize)
-
- for i := 0; i < len(byteArray); i++ {
- byteArray[i] = byte(i % 128)
- }
-
- return byteArray
-}
diff --git a/plugins/gracefulshutdown/plugin.go b/plugins/gracefulshutdown/plugin.go
index 15d5cbe646..2cc5237981 100644
--- a/plugins/gracefulshutdown/plugin.go
+++ b/plugins/gracefulshutdown/plugin.go
@@ -15,8 +15,10 @@ import (
// maximum amount of time to wait for background processes to terminate. After that the process is killed.
const WAIT_TO_KILL_TIME_IN_SECONDS = 10
-var log = logger.NewLogger("Graceful Shutdown")
+var log *logger.Logger
+
var PLUGIN = node.NewPlugin("Graceful Shutdown", node.Enabled, func(plugin *node.Plugin) {
+ log = logger.NewLogger("Graceful Shutdown")
gracefulStop := make(chan os.Signal)
signal.Notify(gracefulStop, syscall.SIGTERM)
@@ -25,7 +27,7 @@ var PLUGIN = node.NewPlugin("Graceful Shutdown", node.Enabled, func(plugin *node
go func() {
<-gracefulStop
- log.Warningf("Received shutdown request - waiting (max %d) to finish processing ...", WAIT_TO_KILL_TIME_IN_SECONDS)
+ log.Warnf("Received shutdown request - waiting (max %d) to finish processing ...", WAIT_TO_KILL_TIME_IN_SECONDS)
go func() {
start := time.Now()
@@ -38,7 +40,7 @@ var PLUGIN = node.NewPlugin("Graceful Shutdown", node.Enabled, func(plugin *node
if len(runningBackgroundWorkers) >= 1 {
processList = "(" + strings.Join(runningBackgroundWorkers, ", ") + ") "
}
- log.Warningf("Received shutdown request - waiting (max %d seconds) to finish processing %s...", WAIT_TO_KILL_TIME_IN_SECONDS-int(secondsSinceStart), processList)
+ log.Warnf("Received shutdown request - waiting (max %d seconds) to finish processing %s...", WAIT_TO_KILL_TIME_IN_SECONDS-int(secondsSinceStart), processList)
} else {
log.Error("Background processes did not terminate in time! Forcing shutdown ...")
os.Exit(1)
diff --git a/plugins/graph/README.md b/plugins/graph/README.md
new file mode 100644
index 0000000000..da7c4ca792
--- /dev/null
+++ b/plugins/graph/README.md
@@ -0,0 +1,9 @@
+# How to install this plugin
+- Run the following commands in this folder (or set `graph.socketioPath` and `graph.webrootPath` in your config if you want to use another path)
+
+```bash
+git clone https://github.com/glumb/IOTAtangle.git
+cd IOTAtangle && git reset --hard 07bba77a296a2d06277cdae56aa963abeeb5f66e
+cd ../
+git clone https://github.com/socketio/socket.io-client.git
+```
\ No newline at end of file
diff --git a/plugins/graph/graph.go b/plugins/graph/graph.go
new file mode 100644
index 0000000000..e0946cc3a2
--- /dev/null
+++ b/plugins/graph/graph.go
@@ -0,0 +1,144 @@
+package graph
+
+import (
+ "container/ring"
+ "fmt"
+ "strconv"
+ "strings"
+
+ socketio "github.com/googollee/go-socket.io"
+ "github.com/iotaledger/goshimmer/packages/model/value_transaction"
+ "github.com/iotaledger/goshimmer/packages/parameter"
+ "github.com/iotaledger/iota.go/consts"
+
+ "github.com/iotaledger/hive.go/syncutils"
+)
+
+const (
+ TX_BUFFER_SIZE = 1800
+)
+
+var (
+ txRingBuffer *ring.Ring // transactions
+ snRingBuffer *ring.Ring // confirmed transactions
+ msRingBuffer *ring.Ring // Milestones
+
+ broadcastLock = syncutils.Mutex{}
+ txRingBufferLock = syncutils.Mutex{}
+)
+
+type wsTransaction struct {
+ Hash string `json:"hash"`
+ Address string `json:"address"`
+ Value string `json:"value"`
+ Tag string `json:"tag"`
+ Timestamp string `json:"timestamp"`
+ CurrentIndex string `json:"current_index"`
+ LastIndex string `json:"last_index"`
+ Bundle string `json:"bundle_hash"`
+ TrunkTransaction string `json:"transaction_trunk"`
+ BranchTransaction string `json:"transaction_branch"`
+}
+
+type wsTransactionSn struct {
+ Hash string `json:"hash"`
+ Address string `json:"address"`
+ TrunkTransaction string `json:"transaction_trunk"`
+ BranchTransaction string `json:"transaction_branch"`
+ Bundle string `json:"bundle"`
+}
+
+type wsConfig struct {
+ NetworkName string `json:"networkName"`
+}
+
+func initRingBuffers() {
+ txRingBuffer = ring.New(TX_BUFFER_SIZE)
+ snRingBuffer = ring.New(TX_BUFFER_SIZE)
+ msRingBuffer = ring.New(20)
+}
+
+func onConnectHandler(s socketio.Conn) error {
+ infoMsg := "Graph client connection established"
+ if s != nil {
+ infoMsg = fmt.Sprintf("%s (ID: %v)", infoMsg, s.ID())
+ }
+ log.Info(infoMsg)
+ socketioServer.JoinRoom("broadcast", s)
+
+ config := &wsConfig{NetworkName: parameter.NodeConfig.GetString(CFG_NETWORK)}
+
+ var initTxs []*wsTransaction
+ txRingBuffer.Do(func(tx interface{}) {
+ if tx != nil {
+ initTxs = append(initTxs, tx.(*wsTransaction))
+ }
+ })
+
+ var initSns []*wsTransactionSn
+ snRingBuffer.Do(func(sn interface{}) {
+ if sn != nil {
+ initSns = append(initSns, sn.(*wsTransactionSn))
+ }
+ })
+
+ var initMs []string
+ msRingBuffer.Do(func(ms interface{}) {
+ if ms != nil {
+ initMs = append(initMs, ms.(string))
+ }
+ })
+
+ s.Emit("config", config)
+ s.Emit("inittx", initTxs)
+ s.Emit("initsn", initSns)
+ s.Emit("initms", initMs)
+ s.Emit("donation", "0")
+ s.Emit("donations", []int{})
+ s.Emit("donation-address", "-")
+
+ return nil
+}
+
+func onErrorHandler(conn socketio.Conn, e error) {
+ errorMsg := "Graph meet error"
+ if e != nil {
+ errorMsg = fmt.Sprintf("%s: %s", errorMsg, e.Error())
+ }
+ log.Error(errorMsg)
+}
+
+func onDisconnectHandler(s socketio.Conn, msg string) {
+ infoMsg := "Graph client connection closed"
+ if s != nil {
+ infoMsg = fmt.Sprintf("%s (ID: %v)", infoMsg, s.ID())
+ }
+ log.Info(fmt.Sprintf("%s: %s", infoMsg, msg))
+ socketioServer.LeaveAllRooms(s)
+}
+
+var emptyTag = strings.Repeat("9", consts.TagTrinarySize/3)
+
+func onNewTx(tx *value_transaction.ValueTransaction) {
+ wsTx := &wsTransaction{
+ Hash: tx.GetHash(),
+ Address: tx.GetAddress(),
+ Value: strconv.FormatInt(tx.GetValue(), 10),
+ Tag: emptyTag,
+ Timestamp: strconv.FormatInt(int64(tx.GetTimestamp()), 10),
+ CurrentIndex: "0",
+ LastIndex: "0",
+ Bundle: consts.NullHashTrytes,
+ TrunkTransaction: tx.GetTrunkTransactionHash(),
+ BranchTransaction: tx.GetBranchTransactionHash(),
+ }
+
+ txRingBufferLock.Lock()
+ txRingBuffer.Value = wsTx
+ txRingBuffer = txRingBuffer.Next()
+ txRingBufferLock.Unlock()
+
+ broadcastLock.Lock()
+ socketioServer.BroadcastToRoom("broadcast", "tx", wsTx)
+ broadcastLock.Unlock()
+}
diff --git a/plugins/graph/parameters.go b/plugins/graph/parameters.go
new file mode 100644
index 0000000000..7b49d680d2
--- /dev/null
+++ b/plugins/graph/parameters.go
@@ -0,0 +1,22 @@
+package graph
+
+import (
+ "github.com/iotaledger/goshimmer/plugins/cli"
+ flag "github.com/spf13/pflag"
+)
+
+const (
+ CFG_WEBROOT = "graph.webrootPath"
+ CFG_SOCKET_IO = "graph.socketioPath"
+ CFG_DOMAIN = "graph.domain"
+ CFG_BIND_ADDRESS = "graph.bindAddress"
+ CFG_NETWORK = "graph.networkName"
+)
+
+func init() {
+ flag.String(CFG_WEBROOT, "IOTAtangle/webroot", "Path to IOTA Tangle Visualiser webroot files")
+ flag.String(CFG_SOCKET_IO, "socket.io-client/dist/socket.io.js", "Path to socket.io.js")
+ flag.String(CFG_DOMAIN, "", "Set the domain on which IOTA Tangle Visualiser is served")
+ flag.String(CFG_BIND_ADDRESS, "127.0.0.1:8082", "the bind address for the IOTA Tangle Visualizer")
+ flag.String(CFG_NETWORK, cli.AppName, "Name of the network shown in IOTA Tangle Visualiser")
+}
diff --git a/plugins/graph/plugin.go b/plugins/graph/plugin.go
new file mode 100644
index 0000000000..af58616543
--- /dev/null
+++ b/plugins/graph/plugin.go
@@ -0,0 +1,143 @@
+package graph
+
+import (
+ "errors"
+ "net/http"
+ "time"
+
+ "github.com/iotaledger/goshimmer/packages/model/value_transaction"
+ "github.com/iotaledger/goshimmer/packages/parameter"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
+ "github.com/iotaledger/goshimmer/plugins/tangle"
+ "golang.org/x/net/context"
+
+ engineio "github.com/googollee/go-engine.io"
+ "github.com/googollee/go-engine.io/transport"
+ "github.com/googollee/go-engine.io/transport/polling"
+ "github.com/googollee/go-engine.io/transport/websocket"
+ socketio "github.com/googollee/go-socket.io"
+
+ "github.com/iotaledger/hive.go/daemon"
+ "github.com/iotaledger/hive.go/events"
+ "github.com/iotaledger/hive.go/logger"
+ "github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/workerpool"
+)
+
+var (
+ PLUGIN = node.NewPlugin("Graph", node.Disabled, configure, run)
+
+ log *logger.Logger
+
+ newTxWorkerCount = 1
+ newTxWorkerQueueSize = 10000
+ newTxWorkerPool *workerpool.WorkerPool
+
+ server *http.Server
+ router *http.ServeMux
+ socketioServer *socketio.Server
+)
+
+func downloadSocketIOHandler(w http.ResponseWriter, r *http.Request) {
+ http.ServeFile(w, r, parameter.NodeConfig.GetString(CFG_SOCKET_IO))
+}
+
+func configureSocketIOServer() error {
+ var err error
+
+ socketioServer, err = socketio.NewServer(&engineio.Options{
+ PingTimeout: time.Second * 20,
+ PingInterval: time.Second * 5,
+ Transports: []transport.Transport{
+ polling.Default,
+ websocket.Default,
+ },
+ })
+ if err != nil {
+ return err
+ }
+
+ socketioServer.OnConnect("/", onConnectHandler)
+ socketioServer.OnError("/", onErrorHandler)
+ socketioServer.OnDisconnect("/", onDisconnectHandler)
+
+ return nil
+}
+
+func configure(plugin *node.Plugin) {
+ log = logger.NewLogger("Graph")
+ initRingBuffers()
+
+ router = http.NewServeMux()
+
+ // socket.io and web server
+ server = &http.Server{
+ Addr: parameter.NodeConfig.GetString(CFG_BIND_ADDRESS),
+ Handler: router,
+ }
+
+ fs := http.FileServer(http.Dir(parameter.NodeConfig.GetString(CFG_WEBROOT)))
+
+ if err := configureSocketIOServer(); err != nil {
+ log.Panicf("Graph: %v", err.Error())
+ }
+
+ router.Handle("/", fs)
+ router.HandleFunc("/socket.io/socket.io.js", downloadSocketIOHandler)
+ router.Handle("/socket.io/", socketioServer)
+
+ newTxWorkerPool = workerpool.New(func(task workerpool.Task) {
+ onNewTx(task.Param(0).(*value_transaction.ValueTransaction))
+ task.Return(nil)
+ }, workerpool.WorkerCount(newTxWorkerCount), workerpool.QueueSize(newTxWorkerQueueSize))
+}
+
+func run(*node.Plugin) {
+
+ notifyNewTx := events.NewClosure(func(transaction *value_transaction.ValueTransaction) {
+ newTxWorkerPool.TrySubmit(transaction)
+ })
+
+ daemon.BackgroundWorker("Graph[NewTxWorker]", func(shutdownSignal <-chan struct{}) {
+ log.Info("Starting Graph[NewTxWorker] ... done")
+ tangle.Events.TransactionStored.Attach(notifyNewTx)
+ newTxWorkerPool.Start()
+ <-shutdownSignal
+ tangle.Events.TransactionStored.Detach(notifyNewTx)
+ newTxWorkerPool.Stop()
+ log.Info("Stopping Graph[NewTxWorker] ... done")
+ }, shutdown.ShutdownPriorityGraph)
+
+ daemon.BackgroundWorker("Graph Webserver", func(shutdownSignal <-chan struct{}) {
+ go socketioServer.Serve()
+
+ stopped := make(chan struct{})
+ go func() {
+ log.Infof("You can now access IOTA Tangle Visualiser using: http://%s", parameter.NodeConfig.GetString(CFG_BIND_ADDRESS))
+ if err := server.ListenAndServe(); err != nil {
+ if !errors.Is(err, http.ErrServerClosed) {
+ log.Errorf("Error serving: %s", err)
+ }
+ }
+ close(stopped)
+ }()
+
+ select {
+ case <-shutdownSignal:
+ case <-stopped:
+ }
+
+ log.Info("Stopping Graph Webserver ...")
+ ctx, cancel := context.WithTimeout(context.Background(), time.Second)
+ defer cancel()
+
+ if err := server.Shutdown(ctx); err != nil {
+ log.Errorf("Error stopping: %s", err)
+ }
+
+ if err := socketioServer.Close(); err != nil {
+ log.Errorf("Error closing Socket.IO server: %s", err)
+ }
+ log.Info("Stopping Graph Webserver ... done")
+ }, shutdown.ShutdownPriorityGraph)
+}
diff --git a/plugins/metrics/plugin.go b/plugins/metrics/plugin.go
index c483a42a9a..3624874e70 100644
--- a/plugins/metrics/plugin.go
+++ b/plugins/metrics/plugin.go
@@ -3,22 +3,24 @@ package metrics
import (
"time"
- "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
- "github.com/iotaledger/goshimmer/packages/timeutil"
- "github.com/iotaledger/goshimmer/plugins/gossip"
+ "github.com/iotaledger/goshimmer/packages/gossip"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
"github.com/iotaledger/hive.go/daemon"
"github.com/iotaledger/hive.go/events"
"github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/timeutil"
)
var PLUGIN = node.NewPlugin("Metrics", node.Enabled, configure, run)
func configure(plugin *node.Plugin) {
// increase received TPS counter whenever we receive a new transaction
- gossip.Events.ReceiveTransaction.Attach(events.NewClosure(func(_ *meta_transaction.MetaTransaction) { increaseReceivedTPSCounter() }))
+ gossip.Events.TransactionReceived.Attach(events.NewClosure(func(_ *gossip.TransactionReceivedEvent) { increaseReceivedTPSCounter() }))
}
func run(plugin *node.Plugin) {
// create a background worker that "measures" the TPS value every second
- daemon.BackgroundWorker("Metrics TPS Updater", func() { timeutil.Ticker(measureReceivedTPS, 1*time.Second) })
+ daemon.BackgroundWorker("Metrics TPS Updater", func(shutdownSignal <-chan struct{}) {
+ timeutil.Ticker(measureReceivedTPS, 1*time.Second, shutdownSignal)
+ }, shutdown.ShutdownPriorityMetrics)
}
diff --git a/plugins/spa/explorer_routes.go b/plugins/spa/explorer_routes.go
new file mode 100644
index 0000000000..7d324e149a
--- /dev/null
+++ b/plugins/spa/explorer_routes.go
@@ -0,0 +1,177 @@
+package spa
+
+import (
+ "net/http"
+ "sync"
+
+ "github.com/iotaledger/goshimmer/packages/model/transactionmetadata"
+ "github.com/iotaledger/goshimmer/packages/model/value_transaction"
+ "github.com/iotaledger/goshimmer/plugins/tangle"
+ "github.com/labstack/echo"
+ "github.com/pkg/errors"
+
+ "github.com/iotaledger/iota.go/consts"
+ "github.com/iotaledger/iota.go/guards"
+ . "github.com/iotaledger/iota.go/trinary"
+)
+
+type ExplorerTx struct {
+ Hash Hash `json:"hash"`
+ SignatureMessageFragment Trytes `json:"signature_message_fragment"`
+ Address Hash `json:"address"`
+ Value int64 `json:"value"`
+ Timestamp uint `json:"timestamp"`
+ Trunk Hash `json:"trunk"`
+ Branch Hash `json:"branch"`
+ Solid bool `json:"solid"`
+ MWM int `json:"mwm"`
+}
+
+func createExplorerTx(hash Hash, tx *value_transaction.ValueTransaction) (*ExplorerTx, error) {
+
+ txMetadata, err := tangle.GetTransactionMetadata(hash, transactionmetadata.New)
+ if err != nil {
+ return nil, err
+ }
+
+ t := &ExplorerTx{
+ Hash: tx.GetHash(),
+ SignatureMessageFragment: tx.GetSignatureMessageFragment(),
+ Address: tx.GetAddress(),
+ Timestamp: tx.GetTimestamp(),
+ Value: tx.GetValue(),
+ Trunk: tx.GetTrunkTransactionHash(),
+ Branch: tx.GetBranchTransactionHash(),
+ Solid: txMetadata.GetSolid(),
+ }
+
+ // compute mwm
+ trits := MustTrytesToTrits(hash)
+ var mwm int
+ for i := len(trits) - 1; i >= 0; i-- {
+ if trits[i] == 0 {
+ mwm++
+ continue
+ }
+ break
+ }
+ t.MWM = mwm
+ return t, nil
+}
+
+type ExplorerAdress struct {
+ Txs []*ExplorerTx `json:"txs"`
+}
+
+type SearchResult struct {
+ Tx *ExplorerTx `json:"tx"`
+ Address *ExplorerAdress `json:"address"`
+ Milestone *ExplorerTx `json:"milestone"`
+}
+
+func setupExplorerRoutes(routeGroup *echo.Group) {
+
+ routeGroup.GET("/tx/:hash", func(c echo.Context) error {
+ t, err := findTransaction(c.Param("hash"))
+ if err != nil {
+ return err
+ }
+ return c.JSON(http.StatusOK, t)
+ })
+
+ routeGroup.GET("/addr/:hash", func(c echo.Context) error {
+ addr, err := findAddress(c.Param("hash"))
+ if err != nil {
+ return err
+ }
+ return c.JSON(http.StatusOK, addr)
+ })
+
+ routeGroup.GET("/search/:search", func(c echo.Context) error {
+ search := c.Param("search")
+ result := &SearchResult{}
+
+ if len(search) < 81 {
+ return errors.Wrapf(ErrInvalidParameter, "search hash invalid: %s", search)
+ }
+
+ // auto. remove checksum
+ search = search[:81]
+
+ wg := sync.WaitGroup{}
+ wg.Add(2)
+ go func() {
+ defer wg.Done()
+ tx, err := findTransaction(search)
+ if err == nil {
+ result.Tx = tx
+ }
+ }()
+
+ go func() {
+ defer wg.Done()
+ addr, err := findAddress(search)
+ if err == nil {
+ result.Address = addr
+ }
+ }()
+ wg.Wait()
+
+ return c.JSON(http.StatusOK, result)
+ })
+}
+
+func findTransaction(hash Hash) (*ExplorerTx, error) {
+ if !guards.IsTrytesOfExactLength(hash, consts.HashTrytesSize) {
+ return nil, errors.Wrapf(ErrInvalidParameter, "hash invalid: %s", hash)
+ }
+
+ tx, err := tangle.GetTransaction(hash)
+ if err != nil {
+ return nil, err
+ }
+ if tx == nil {
+ return nil, errors.Wrapf(ErrNotFound, "tx hash: %s", hash)
+ }
+
+ t, err := createExplorerTx(hash, tx)
+ return t, err
+}
+
+func findAddress(hash Hash) (*ExplorerAdress, error) {
+ if len(hash) > 81 {
+ hash = hash[:81]
+ }
+ if !guards.IsTrytesOfExactLength(hash, consts.HashTrytesSize) {
+ return nil, errors.Wrapf(ErrInvalidParameter, "hash invalid: %s", hash)
+ }
+
+ txHashes, err := tangle.ReadTransactionHashesForAddressFromDatabase(hash)
+ if err != nil {
+ return nil, ErrInternalError
+ }
+
+ if len(txHashes) == 0 {
+ return nil, errors.Wrapf(ErrNotFound, "address %s not found", hash)
+ }
+
+ txs := make([]*ExplorerTx, 0, len(txHashes))
+ for i := 0; i < len(txHashes); i++ {
+ txHash := txHashes[i]
+
+ tx, err := tangle.GetTransaction(hash)
+ if err != nil {
+ continue
+ }
+ if tx == nil {
+ continue
+ }
+ expTx, err := createExplorerTx(txHash, tx)
+ if err != nil {
+ return nil, err
+ }
+ txs = append(txs, expTx)
+ }
+
+ return &ExplorerAdress{Txs: txs}, nil
+}
diff --git a/plugins/spa/frontend/.gitignore b/plugins/spa/frontend/.gitignore
new file mode 100644
index 0000000000..7c9c6dc25c
--- /dev/null
+++ b/plugins/spa/frontend/.gitignore
@@ -0,0 +1,7 @@
+.vscode
+.DS_STORE
+node_modules
+.module-cache
+*.log*
+build
+dist
\ No newline at end of file
diff --git a/plugins/spa/frontend/.prettierrc b/plugins/spa/frontend/.prettierrc
new file mode 100644
index 0000000000..f38b571207
--- /dev/null
+++ b/plugins/spa/frontend/.prettierrc
@@ -0,0 +1,8 @@
+{
+ "arrowParens": "always",
+ "semi": true,
+ "useTabs": false,
+ "tabWidth": 2,
+ "bracketSpacing": true,
+ "singleQuote": true
+}
diff --git a/plugins/spa/frontend/README.md b/plugins/spa/frontend/README.md
new file mode 100644
index 0000000000..029aea5032
--- /dev/null
+++ b/plugins/spa/frontend/README.md
@@ -0,0 +1,24 @@
+# GoShimmer SPA
+
+Programmed using modern web technologies.
+
+### SPA in dev mode
+
+1. Make sure to set `dashboard.dev` to true, to enable GoShimmer to serve assets
+ from the webpack-dev-server.
+2. Install all needed npm modules via `yarn install`.
+3. Run a webpack-dev-server instance by running `yarn start` within the `frontend` directory.
+4. Using default port config, you should now be able to access the dashboard under http://127.0.0.1:8081
+
+The SPA is hot-reload enabled.
+
+### Pack your changes
+
+We are using [packr2](https://github.com/gobuffalo/packr/tree/master/v2) to wrap all built frontend files into Go files.
+
+1. [Install `packr2`](https://github.com/gobuffalo/packr/tree/master/v2#binary-installation) if not already done.
+2. Build SPA by running `yarn build` within the `frontend` directory.
+3. Change to the `plugins/spa` directory.
+4. Run `packr2`.
+5. `plugins/spa/packrd` should have been modified.
+6. Done. Now you can build goShimmer and your SPA changes will be included within the binary.
diff --git a/plugins/spa/frontend/package.json b/plugins/spa/frontend/package.json
new file mode 100644
index 0000000000..1cd93d1f0a
--- /dev/null
+++ b/plugins/spa/frontend/package.json
@@ -0,0 +1,71 @@
+{
+ "name": "goshimmer-dashboard",
+ "version": "1.0.0",
+ "private": true,
+ "description": "GoShimmer Dashboard",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "start": "webpack-dev-server --mode development --hot --progress --colors --port 9090 --open",
+ "build": "webpack -p --progress --colors",
+ "prettier": "prettier --write \"src/**/*.{ts,tsx,css}\""
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "@babel/core": "^7.2.2",
+ "@types/classnames": "^2.2.7",
+ "@types/react": "^16.7.20",
+ "@types/react-dom": "^16.0.11",
+ "@types/react-router": "^4.4.3",
+ "@types/webpack": "^4.4.23",
+ "babel-loader": "^8.0.5",
+ "css-loader": "^2.1.0",
+ "file-loader": "^3.0.1",
+ "html-loader": "^1.0.0-alpha.0",
+ "html-webpack-plugin": "^3.2.0",
+ "mini-css-extract-plugin": "^0.5.0",
+ "mobx-react-devtools": "^6.0.3",
+ "postcss": "^7.0.13",
+ "postcss-browser-reporter": "^0.5.0",
+ "postcss-import": "^12.0.1",
+ "postcss-loader": "^3.0.0",
+ "postcss-preset-env": "^6.5.0",
+ "postcss-reporter": "^6.0.1",
+ "postcss-url": "^8.0.0",
+ "prettier": "^1.16.0",
+ "react-hot-loader": "^4.6.3",
+ "style-loader": "^0.23.1",
+ "ts-loader": "^5.3.3",
+ "tsx-control-statements": "2.17.1",
+ "typescript": "^3.2.4",
+ "url-loader": "^1.1.2",
+ "webpack": "^4.29.0",
+ "webpack-cleanup-plugin": "^0.5.1",
+ "webpack-cli": "^3.2.1",
+ "webpack-dev-server": "^3.1.14",
+ "webpack-hot-middleware": "^2.24.3"
+ },
+ "dependencies": {
+ "@types/glob": "^7.1.1",
+ "apexcharts": "^3.10.1",
+ "apexcharts-react": "^1.0.0",
+ "bootstrap": "^4.3.1",
+ "chart.js": "^2.9.3",
+ "chartjs-plugin-streaming": "^1.8.0",
+ "classnames": "^2.2.6",
+ "dateformat": "^3.0.3",
+ "favicons-webpack-plugin": "^2.1.0",
+ "mobx": "^5.15.0",
+ "mobx-react": "^5.4.3",
+ "mobx-react-router": "^4.0.5",
+ "prettysize": "^2.0.0",
+ "react": "^16.7.0",
+ "react-apexcharts": "^1.3.3",
+ "react-bootstrap": "^1.0.0-beta.16",
+ "react-chartjs-2": "^2.8.0",
+ "react-dom": "^16.7.0",
+ "react-router": "^4.3.1",
+ "react-router-bootstrap": "^0.25.0",
+ "react-router-dom": "^5.1.2"
+ }
+}
diff --git a/plugins/spa/frontend/src/app/App.tsx b/plugins/spa/frontend/src/app/App.tsx
new file mode 100644
index 0000000000..dbcc3aa613
--- /dev/null
+++ b/plugins/spa/frontend/src/app/App.tsx
@@ -0,0 +1,6 @@
+import * as React from 'react';
+import {hot} from 'react-hot-loader/root';
+import {Root} from 'app/components/Root';
+
+// render react DOM
+export const App = hot(({history}) => );
diff --git a/plugins/spa/frontend/src/app/components/Dashboard.tsx b/plugins/spa/frontend/src/app/components/Dashboard.tsx
new file mode 100644
index 0000000000..673575cc56
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/Dashboard.tsx
@@ -0,0 +1,55 @@
+import * as React from 'react';
+import Container from "react-bootstrap/Container";
+import Row from "react-bootstrap/Row";
+import Col from "react-bootstrap/Col";
+import Uptime from "app/components/Uptime";
+import Version from "app/components/Version";
+import TPSChart from "app/components/TPSChart";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import ListGroup from "react-bootstrap/ListGroup";
+import Card from "react-bootstrap/Card";
+import MemChart from "app/components/MemChart";
+
+interface Props {
+ nodeStore?: NodeStore;
+}
+
+@inject("nodeStore")
+@observer
+export class Dashboard extends React.Component {
+ render() {
+ return (
+
+ Dashboard
+
+
+
+
+ Node: {this.props.nodeStore.status.id}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/Explorer.tsx b/plugins/spa/frontend/src/app/components/Explorer.tsx
new file mode 100644
index 0000000000..1f9b8e7bb7
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/Explorer.tsx
@@ -0,0 +1,38 @@
+import * as React from 'react';
+import Container from "react-bootstrap/Container";
+import Row from "react-bootstrap/Row";
+import Col from "react-bootstrap/Col";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import {ExplorerSearchbar} from "app/components/ExplorerSearchbar";
+import {ExplorerLiveFeed} from "app/components/ExplorerLiveFeed";
+
+interface Props {
+ nodeStore?: NodeStore;
+}
+
+@inject("nodeStore")
+@observer
+export class Explorer extends React.Component {
+ render() {
+ return (
+
+ Tangle Explorer
+
+
+
+ Search for addresses or transactions by supplying
+ their corresponding hashes.
+
+
+
+
+
+
+
+ This explorer implementation is heavily inspired by thetangle.org .
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/Explorer404.tsx b/plugins/spa/frontend/src/app/components/Explorer404.tsx
new file mode 100644
index 0000000000..3e924cf7ba
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/Explorer404.tsx
@@ -0,0 +1,33 @@
+import * as React from 'react';
+import Container from "react-bootstrap/Container";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import ExplorerStore from "app/stores/ExplorerStore";
+
+interface Props {
+ nodeStore?: NodeStore;
+ explorerStore?: ExplorerStore;
+ match?: {
+ params: {
+ search: string,
+ }
+ }
+}
+
+@inject("nodeStore")
+@inject("explorerStore")
+@observer
+export class Explorer404 extends React.Component {
+
+ render() {
+ let {search} = this.props.match.params;
+ return (
+
+ Tangle Explorer 404
+
+ The search via '{search}' did not yield any results.
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/ExplorerAddressResult.tsx b/plugins/spa/frontend/src/app/components/ExplorerAddressResult.tsx
new file mode 100644
index 0000000000..6326704d4f
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/ExplorerAddressResult.tsx
@@ -0,0 +1,92 @@
+import * as React from 'react';
+import Container from "react-bootstrap/Container";
+import Row from "react-bootstrap/Row";
+import Col from "react-bootstrap/Col";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import ExplorerStore from "app/stores/ExplorerStore";
+import Spinner from "react-bootstrap/Spinner";
+import ListGroup from "react-bootstrap/ListGroup";
+import {Link} from 'react-router-dom';
+import * as dateformat from 'dateformat';
+import Alert from "react-bootstrap/Alert";
+
+interface Props {
+ nodeStore?: NodeStore;
+ explorerStore?: ExplorerStore;
+ match?: {
+ params: {
+ hash: string,
+ }
+ }
+}
+
+@inject("nodeStore")
+@inject("explorerStore")
+@observer
+export class ExplorerAddressQueryResult extends React.Component {
+
+ componentDidMount() {
+ this.props.explorerStore.resetSearch();
+ this.props.explorerStore.searchAddress(this.props.match.params.hash);
+ }
+
+ getSnapshotBeforeUpdate(prevProps: Props, prevState) {
+ if (prevProps.match.params.hash !== this.props.match.params.hash) {
+ this.props.explorerStore.searchAddress(this.props.match.params.hash);
+ }
+ return null;
+ }
+
+ render() {
+ let {hash} = this.props.match.params;
+ let {addr, query_loading} = this.props.explorerStore;
+ let txsEle = [];
+ if (addr) {
+ for (let i = 0; i < addr.txs.length; i++) {
+ let tx = addr.txs[i];
+ txsEle.push(
+
+
+ {dateformat(new Date(tx.timestamp * 1000), "dd.mm.yyyy HH:MM:ss")} {' '}
+ {tx.hash}
+
+
+ );
+ }
+ }
+ return (
+
+ Address {addr !== null && ({addr.txs.length} Transactions) }
+
+ {hash} {' '}
+
+ {
+ addr !== null ?
+
+ {
+ addr.txs !== null && addr.txs.length === 100 &&
+
+ Max. 100 transactions are shown.
+
+ }
+
+
+
+ {txsEle}
+
+
+
+
+ :
+
+
+ {query_loading && }
+
+
+ }
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/ExplorerLiveFeed.tsx b/plugins/spa/frontend/src/app/components/ExplorerLiveFeed.tsx
new file mode 100644
index 0000000000..5da8e96dff
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/ExplorerLiveFeed.tsx
@@ -0,0 +1,49 @@
+import * as React from 'react';
+import Row from "react-bootstrap/Row";
+import Col from "react-bootstrap/Col";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import Card from "react-bootstrap/Card";
+import ExplorerStore from "app/stores/ExplorerStore";
+import Table from "react-bootstrap/Table";
+
+interface Props {
+ nodeStore?: NodeStore;
+ explorerStore?: ExplorerStore;
+}
+
+@inject("nodeStore")
+@inject("explorerStore")
+@observer
+export class ExplorerLiveFeed extends React.Component {
+ render() {
+ let {txsLiveFeed} = this.props.explorerStore;
+ return (
+
+
+
+
+ Live Feed
+
+
+ Transactions
+
+
+
+ Hash
+ Value
+
+
+
+ {txsLiveFeed}
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/ExplorerSearchbar.tsx b/plugins/spa/frontend/src/app/components/ExplorerSearchbar.tsx
new file mode 100644
index 0000000000..85bf7aabab
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/ExplorerSearchbar.tsx
@@ -0,0 +1,52 @@
+import * as React from 'react';
+import {KeyboardEvent} from 'react';
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import FormControl from "react-bootstrap/FormControl";
+import ExplorerStore from "app/stores/ExplorerStore";
+import Row from "react-bootstrap/Row";
+import Col from "react-bootstrap/Col";
+import InputGroup from "react-bootstrap/InputGroup";
+
+interface Props {
+ nodeStore?: NodeStore;
+ explorerStore?: ExplorerStore;
+}
+
+@inject("nodeStore")
+@inject("explorerStore")
+@observer
+export class ExplorerSearchbar extends React.Component {
+
+ updateSearch = (e) => {
+ this.props.explorerStore.updateSearch(e.target.value);
+ };
+
+ executeSearch = (e: KeyboardEvent) => {
+ if (e.key !== 'Enter') return;
+ this.props.explorerStore.searchAny();
+ };
+
+ render() {
+ let {search, searching} = this.props.explorerStore;
+
+ return (
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/ExplorerTransactionQueryResult.tsx b/plugins/spa/frontend/src/app/components/ExplorerTransactionQueryResult.tsx
new file mode 100644
index 0000000000..fe54c2e061
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/ExplorerTransactionQueryResult.tsx
@@ -0,0 +1,128 @@
+import * as React from 'react';
+import Container from "react-bootstrap/Container";
+import Row from "react-bootstrap/Row";
+import Col from "react-bootstrap/Col";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import ExplorerStore from "app/stores/ExplorerStore";
+import Spinner from "react-bootstrap/Spinner";
+import ListGroup from "react-bootstrap/ListGroup";
+import Badge from "react-bootstrap/Badge";
+import * as dateformat from 'dateformat';
+import {Link} from 'react-router-dom';
+
+interface Props {
+ nodeStore?: NodeStore;
+ explorerStore?: ExplorerStore;
+ match?: {
+ params: {
+ hash: string,
+ }
+ }
+}
+
+@inject("nodeStore")
+@inject("explorerStore")
+@observer
+export class ExplorerTransactionQueryResult extends React.Component {
+
+ componentDidMount() {
+ this.props.explorerStore.resetSearch();
+ this.props.explorerStore.searchTx(this.props.match.params.hash);
+ }
+
+ getSnapshotBeforeUpdate(prevProps: Props, prevState) {
+ if (prevProps.match.params.hash !== this.props.match.params.hash) {
+ this.props.explorerStore.searchTx(this.props.match.params.hash);
+ }
+ return null;
+ }
+
+ render() {
+ let {hash} = this.props.match.params;
+ let {tx, query_loading} = this.props.explorerStore;
+ return (
+
+
+ Transaction
+
+
+ {hash} {' '}
+ {
+ tx &&
+
+
+
+
+ Time: {dateformat(new Date(tx.timestamp * 1000), "dd.mm.yyyy HH:MM:ss")}
+
+
+
+ }
+
+ {
+ tx &&
+
+
+
+
+ Value: {tx.value}i
+
+
+
+
+ Solid: {tx.solid ? 'Yes' : 'No'}
+
+
+
+
+
+
+
+ Trunk: {' '}
+
+ {tx.trunk}
+
+
+
+
+
+
+
+ Branch: {' '}
+
+ {tx.branch}
+
+
+
+
+
+
+
+
+
+ Address: {' '}
+
+ {tx.address}
+
+
+
+ Message:
+
+ {tx.signature_message_fragment}
+
+
+
+
+
+
+ }
+
+
+ {query_loading && }
+
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/MemChart.tsx b/plugins/spa/frontend/src/app/components/MemChart.tsx
new file mode 100644
index 0000000000..97e488978a
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/MemChart.tsx
@@ -0,0 +1,76 @@
+import * as React from 'react';
+import Card from "react-bootstrap/Card";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import {Line} from "react-chartjs-2";
+import {defaultChartOptions} from "app/misc/Chart";
+import * as prettysize from 'prettysize';
+
+interface Props {
+ nodeStore?: NodeStore;
+}
+
+const lineChartOptions = Object.assign({
+ scales: {
+ xAxes: [{
+ ticks: {
+ autoSkip: true,
+ maxTicksLimit: 8,
+ fontSize: 8,
+ minRotation: 0,
+ maxRotation: 0,
+ },
+ showXLabels: 10,
+ gridLines: {
+ display: false
+ }
+ }],
+ yAxes: [{
+ gridLines: {
+ display: false
+ },
+ ticks: {
+ callback: function (value, index, values) {
+ return prettysize(Math.abs(value));
+ },
+ maxTicksLimit: 3,
+ fontSize: 10,
+ },
+ }],
+ },
+ tooltips: {
+ callbacks: {
+ label: function (tooltipItem, data) {
+ let label = data.datasets[tooltipItem.datasetIndex].label;
+ return `${label} ${prettysize(Math.abs(tooltipItem.value))}`;
+ }
+ }
+ }
+}, defaultChartOptions);
+
+@inject("nodeStore")
+@observer
+export default class MemChart extends React.Component {
+ render() {
+ let mem = this.props.nodeStore.status.mem;
+ return (
+
+
+
+ Memory Usage{' '}
+ {prettysize(mem.heap_inuse + (mem.heap_idle - mem.heap_released) + mem.m_span_inuse + mem.m_cache_inuse+mem.stack_sys)}
+
+
+ GC Cycles: {mem.num_gc} (Last Cycle: {mem.last_pause_gc / 1000000}ms) - {' '}
+ Heap: {' '}
+ [Obj: {mem.heap_objects}, In-Use: {prettysize(mem.heap_inuse)},
+ Retained: {prettysize(mem.heap_idle - mem.heap_released)}]
+
+
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/NavExplorerSearchbar.tsx b/plugins/spa/frontend/src/app/components/NavExplorerSearchbar.tsx
new file mode 100644
index 0000000000..fb36a37d5d
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/NavExplorerSearchbar.tsx
@@ -0,0 +1,41 @@
+import * as React from 'react';
+import {KeyboardEvent} from 'react';
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import FormControl from "react-bootstrap/FormControl";
+import Form from "react-bootstrap/Form";
+import ExplorerStore from "app/stores/ExplorerStore";
+
+interface Props {
+ nodeStore?: NodeStore;
+ explorerStore?: ExplorerStore;
+}
+
+@inject("nodeStore")
+@inject("explorerStore")
+@observer
+export class NavExplorerSearchbar extends React.Component {
+
+ updateSearch = (e) => {
+ this.props.explorerStore.updateSearch(e.target.value);
+ };
+
+ executeSearch = (e: KeyboardEvent) => {
+ if (e.key !== 'Enter') return;
+ this.props.explorerStore.searchAny();
+ };
+
+ render() {
+ let {search, searching} = this.props.explorerStore;
+ return (
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/Neighbor.tsx b/plugins/spa/frontend/src/app/components/Neighbor.tsx
new file mode 100644
index 0000000000..6c280137f3
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/Neighbor.tsx
@@ -0,0 +1,115 @@
+import * as React from 'react';
+import Row from "react-bootstrap/Row";
+import Col from "react-bootstrap/Col";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import ListGroup from "react-bootstrap/ListGroup";
+import Card from "react-bootstrap/Card";
+import * as prettysize from 'prettysize';
+import Badge from "react-bootstrap/Badge";
+import {defaultChartOptions} from "app/misc/Chart";
+import {Line} from "react-chartjs-2";
+
+interface Props {
+ nodeStore?: NodeStore;
+ identity: string;
+}
+
+const lineChartOptions = Object.assign({
+ scales: {
+ xAxes: [{
+ ticks: {
+ autoSkip: true,
+ maxTicksLimit: 8,
+ fontSize: 8,
+ minRotation: 0,
+ maxRotation: 0,
+ },
+ showXLabels: 10,
+ gridLines: {
+ display: false
+ }
+ }],
+ yAxes: [{
+ gridLines: {
+ display: false
+ },
+ ticks: {
+ callback: function (value, index, values) {
+ return prettysize(Math.abs(value));
+ },
+ maxTicksLimit: 3,
+ fontSize: 10,
+ },
+ }],
+ },
+ tooltips: {
+ callbacks: {
+ label: function (tooltipItem, data) {
+ let label = data.datasets[tooltipItem.datasetIndex].label;
+ return `${label} ${prettysize(Math.abs(tooltipItem.value))}`;
+ }
+ }
+ }
+}, defaultChartOptions);
+
+@inject("nodeStore")
+@observer
+export class Neighbor extends React.Component {
+ render() {
+ let neighborMetrics = this.props.nodeStore.neighbor_metrics.get(this.props.identity);
+ let last = neighborMetrics.current;
+ return (
+
+
+
+
+
+
+ {last.id}
+
+
+
+
+
+
+ Origin:
+ {' '}
+ {last.connection_origin}
+
+
+
+
+
+
+ Address: {last.address}
+
+
+
+
+
+
+ Network (Tx/Rx)
+
+ {'Total: '}
+ {prettysize(last.bytes_written)}
+ {' / '}
+ {prettysize(last.bytes_read)}
+
+ {' '}
+
+ {'Current: '}
+ {prettysize(neighborMetrics.currentNetIO && neighborMetrics.currentNetIO.tx)}
+ {' / '}
+ {prettysize(neighborMetrics.currentNetIO && neighborMetrics.currentNetIO.rx)}
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/Neighbors.tsx b/plugins/spa/frontend/src/app/components/Neighbors.tsx
new file mode 100644
index 0000000000..1ae3a40e92
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/Neighbors.tsx
@@ -0,0 +1,29 @@
+import * as React from 'react';
+import Container from "react-bootstrap/Container";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import {Neighbor} from "app/components/Neighbor";
+
+interface Props {
+ nodeStore?: NodeStore;
+}
+
+@inject("nodeStore")
+@observer
+export class Neighbors extends React.Component {
+ render() {
+ let neighborsEle = [];
+ this.props.nodeStore.neighbor_metrics.forEach((v, k) => {
+ neighborsEle.push();
+ });
+ return (
+
+ Neighbors {neighborsEle.length > 0 && ({neighborsEle.length}) }
+
+ Currently connected neighbors.
+
+ {neighborsEle}
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/Root.tsx b/plugins/spa/frontend/src/app/components/Root.tsx
new file mode 100644
index 0000000000..f61f447b12
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/Root.tsx
@@ -0,0 +1,80 @@
+import * as React from 'react';
+import {inject, observer} from "mobx-react";
+import NodeStore from "app/stores/NodeStore";
+import Navbar from "react-bootstrap/Navbar";
+import Nav from "react-bootstrap/Nav";
+import {Dashboard} from "app/components/Dashboard";
+import Badge from "react-bootstrap/Badge";
+import {RouterStore} from 'mobx-react-router';
+import {Explorer} from "app/components/Explorer";
+import {NavExplorerSearchbar} from "app/components/NavExplorerSearchbar";
+import {Redirect, Route, Switch} from 'react-router-dom';
+import {LinkContainer} from 'react-router-bootstrap';
+import {ExplorerTransactionQueryResult} from "app/components/ExplorerTransactionQueryResult";
+import {ExplorerAddressQueryResult} from "app/components/ExplorerAddressResult";
+import {Explorer404} from "app/components/Explorer404";
+import {Neighbors} from "app/components/Neighbors";
+
+interface Props {
+ history: any;
+ routerStore?: RouterStore;
+ nodeStore?: NodeStore;
+}
+
+@inject("nodeStore")
+@inject("routerStore")
+@observer
+export class Root extends React.Component {
+ renderDevTool() {
+ if (process.env.NODE_ENV !== 'production') {
+ const DevTools = require('mobx-react-devtools').default;
+ return ;
+ }
+ }
+
+ componentDidMount(): void {
+ this.props.nodeStore.connect();
+ }
+
+ render() {
+ return (
+
+
+ GoShimmer
+
+
+ Dashboard
+
+
+ Neighbors
+
+
+
+ Tangle Explorer
+
+
+
+
+
+
+ {!this.props.nodeStore.websocketConnected &&
+ WS not connected!
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ {this.props.children}
+ {this.renderDevTool()}
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/TPSChart.tsx b/plugins/spa/frontend/src/app/components/TPSChart.tsx
new file mode 100644
index 0000000000..b19beb2345
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/TPSChart.tsx
@@ -0,0 +1,67 @@
+import * as React from 'react';
+import Card from "react-bootstrap/Card";
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+import {Line} from "react-chartjs-2";
+import {defaultChartOptions} from "app/misc/Chart";
+
+interface Props {
+ nodeStore?: NodeStore;
+}
+
+const lineChartOptions = Object.assign({
+ scales: {
+ xAxes: [{
+ ticks: {
+ autoSkip: true,
+ maxTicksLimit: 8,
+ fontSize: 8,
+ minRotation: 0,
+ maxRotation: 0,
+ },
+ gridLines: {
+ display: false
+ }
+ }],
+ yAxes: [{
+ gridLines: {
+ display: false
+ },
+ ticks: {
+ callback: function (value, index, values) {
+ return Math.abs(value);
+ },
+ fontSize: 10,
+ maxTicksLimit: 4,
+ beginAtZero: true,
+ },
+ }],
+ },
+ tooltips: {
+ callbacks: {
+ label: function (tooltipItem, data) {
+ let label = data.datasets[tooltipItem.datasetIndex].label;
+ return `${label} ${Math.abs(tooltipItem.value)}`;
+ }
+ }
+ }
+}, defaultChartOptions);
+
+@inject("nodeStore")
+@observer
+export default class TPSChart extends React.Component {
+ render() {
+ return (
+
+
+ Transactions Per Second
+
+ TPS: {this.props.nodeStore.last_tps_metric.tps}.
+
+
+
+
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/Uptime.tsx b/plugins/spa/frontend/src/app/components/Uptime.tsx
new file mode 100644
index 0000000000..cf4626773c
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/Uptime.tsx
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+
+interface Props {
+ nodeStore?: NodeStore;
+}
+
+@inject("nodeStore")
+@observer
+export default class Uptime extends React.Component {
+ render() {
+ return (
+
+ Uptime {this.props.nodeStore.uptime}
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/components/Version.tsx b/plugins/spa/frontend/src/app/components/Version.tsx
new file mode 100644
index 0000000000..8111e9b3b7
--- /dev/null
+++ b/plugins/spa/frontend/src/app/components/Version.tsx
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import NodeStore from "app/stores/NodeStore";
+import {inject, observer} from "mobx-react";
+
+interface Props {
+ nodeStore?: NodeStore;
+}
+
+@inject("nodeStore")
+@observer
+export default class Version extends React.Component {
+ render() {
+ return (
+
+ Version {this.props.nodeStore.status.version}
+
+ );
+ }
+}
diff --git a/plugins/spa/frontend/src/app/misc/Chart.ts b/plugins/spa/frontend/src/app/misc/Chart.ts
new file mode 100644
index 0000000000..6156e4c79a
--- /dev/null
+++ b/plugins/spa/frontend/src/app/misc/Chart.ts
@@ -0,0 +1,16 @@
+
+// includes chart options to increase performance, by disabling chart animations
+export var defaultChartOptions = {
+ elements: {
+ line: {
+ tension: 0
+ }
+ },
+ animation: {
+ duration: 0
+ },
+ hover: {
+ animationDuration: 0
+ },
+ responsiveAnimationDuration: 0
+};
\ No newline at end of file
diff --git a/plugins/spa/frontend/src/app/misc/WS.ts b/plugins/spa/frontend/src/app/misc/WS.ts
new file mode 100644
index 0000000000..e3f442bfea
--- /dev/null
+++ b/plugins/spa/frontend/src/app/misc/WS.ts
@@ -0,0 +1,44 @@
+export enum WSMsgType {
+ Status,
+ TPSMetrics,
+ Tx,
+ NeighborStats,
+}
+
+export interface WSMessage {
+ type: number;
+ data: any;
+}
+
+type DataHandler = (data: any) => void;
+
+let handlers = {};
+
+export function registerHandler(msgTypeID: number, handler: DataHandler) {
+ handlers[msgTypeID] = handler;
+}
+
+export function connectWebSocket(path: string, onOpen, onClose, onError) {
+ let loc = window.location;
+ let uri = 'ws:';
+
+ if (loc.protocol === 'https:') {
+ uri = 'wss:';
+ }
+ uri += '//' + loc.host + path;
+
+ let ws = new WebSocket(uri);
+
+ ws.onopen = onOpen;
+ ws.onclose = onClose;
+ ws.onerror = onError;
+
+ ws.onmessage = (e) => {
+ let msg: WSMessage = JSON.parse(e.data);
+ let handler = handlers[msg.type];
+ if (!handler) {
+ return;
+ }
+ handler(msg.data);
+ };
+}
\ No newline at end of file
diff --git a/plugins/spa/frontend/src/app/stores/ExplorerStore.tsx b/plugins/spa/frontend/src/app/stores/ExplorerStore.tsx
new file mode 100644
index 0000000000..4cc4149a1a
--- /dev/null
+++ b/plugins/spa/frontend/src/app/stores/ExplorerStore.tsx
@@ -0,0 +1,209 @@
+import {action, computed, observable} from 'mobx';
+import {registerHandler, WSMsgType} from "app/misc/WS";
+import * as React from "react";
+import {Link} from 'react-router-dom';
+import {RouterStore} from "mobx-react-router";
+
+export class Transaction {
+ hash: string;
+ signature_message_fragment: string;
+ address: string;
+ value: number;
+ timestamp: number;
+ trunk: string;
+ branch: string;
+ solid: boolean;
+}
+
+class AddressResult {
+ balance: number;
+ txs: Array;
+ spent: boolean;
+}
+
+class SearchResult {
+ tx: Transaction;
+ address: AddressResult;
+ milestone: Transaction;
+ bundles: Array>;
+}
+
+class Tx {
+ hash: string;
+ value: number;
+}
+
+const liveFeedSize = 10;
+
+enum QueryError {
+ NotFound
+}
+
+export class ExplorerStore {
+ // live feed
+ @observable latest_txs: Array = [];
+
+ // queries
+ @observable tx: Transaction = null;
+ @observable addr: AddressResult = null;
+
+ // loading
+ @observable query_loading: boolean = false;
+ @observable query_err: any = null;
+
+ // search
+ @observable search: string = "";
+ @observable search_result: SearchResult = null;
+ @observable searching: boolean = false;
+
+ routerStore: RouterStore;
+
+ constructor(routerStore: RouterStore) {
+ this.routerStore = routerStore;
+ registerHandler(WSMsgType.Tx, this.addLiveFeedTx);
+ }
+
+ searchAny = async () => {
+ this.updateSearching(true);
+ try {
+ let res = await fetch(`/api/search/${this.search}`);
+ let result: SearchResult = await res.json();
+ this.updateSearchResult(result);
+ } catch (err) {
+ this.updateQueryError(err);
+ }
+ };
+
+ @action
+ resetSearch = () => {
+ this.search_result = null;
+ this.searching = false;
+ };
+
+ @action
+ updateSearchResult = (result: SearchResult) => {
+ this.search_result = result;
+ this.searching = false;
+ let search = this.search;
+ this.search = '';
+ if (this.search_result.tx) {
+ this.routerStore.push(`/explorer/tx/${search}`);
+ return;
+ }
+ if (this.search_result.milestone) {
+ this.routerStore.push(`/explorer/tx/${this.search_result.milestone.hash}`);
+ return;
+ }
+ if (this.search_result.address) {
+ this.routerStore.push(`/explorer/addr/${search}`);
+ return;
+ }
+ this.routerStore.push(`/explorer/404/${search}`);
+ };
+
+ @action
+ updateSearch = (search: string) => {
+ this.search = search;
+ };
+
+ @action
+ updateSearching = (searching: boolean) => this.searching = searching;
+
+ searchTx = async (hash: string) => {
+ this.updateQueryLoading(true);
+ try {
+ let res = await fetch(`/api/tx/${hash}`);
+ if (res.status === 404) {
+ this.updateQueryError(QueryError.NotFound);
+ return;
+ }
+ let tx: Transaction = await res.json();
+ this.updateTx(tx);
+ } catch (err) {
+ this.updateQueryError(err);
+ }
+ };
+
+ searchAddress = async (hash: string) => {
+ this.updateQueryLoading(true);
+ try {
+ let res = await fetch(`/api/addr/${hash}`);
+ if (res.status === 404) {
+ this.updateQueryError(QueryError.NotFound);
+ return;
+ }
+ let addr: AddressResult = await res.json();
+ this.updateAddress(addr);
+ } catch (err) {
+ this.updateQueryError(err);
+ }
+ };
+
+ @action
+ reset = () => {
+ this.tx = null;
+ this.query_err = null;
+ };
+
+ @action
+ updateAddress = (addr: AddressResult) => {
+ addr.txs = addr.txs.sort((a, b) => {
+ return a.timestamp < b.timestamp ? 1 : -1;
+ });
+ this.addr = addr;
+ this.query_err = null;
+ this.query_loading = false;
+ };
+
+ @action
+ updateTx = (tx: Transaction) => {
+ this.tx = tx;
+ this.query_err = null;
+ this.query_loading = false;
+ };
+
+ @action
+ updateQueryLoading = (loading: boolean) => this.query_loading = loading;
+
+ @action
+ updateQueryError = (err: any) => {
+ this.query_err = err;
+ this.query_loading = false;
+ this.searching = false;
+ };
+
+ @action
+ addLiveFeedTx = (tx: Tx) => {
+ // prevent duplicates (should be fast with only size 10)
+ if (this.latest_txs.findIndex((t) => t.hash == tx.hash) === -1) {
+ if (this.latest_txs.length >= liveFeedSize) {
+ this.latest_txs.shift();
+ }
+ this.latest_txs.push(tx);
+ }
+ };
+
+ @computed
+ get txsLiveFeed() {
+ let feed = [];
+ for (let i = this.latest_txs.length - 1; i >= 0; i--) {
+ let tx = this.latest_txs[i];
+ feed.push(
+
+
+
+ {tx.hash.substr(0, 35)}
+
+
+
+ {tx.value}
+
+
+ );
+ }
+ return feed;
+ }
+
+}
+
+export default ExplorerStore;
\ No newline at end of file
diff --git a/plugins/spa/frontend/src/app/stores/NodeStore.ts b/plugins/spa/frontend/src/app/stores/NodeStore.ts
new file mode 100644
index 0000000000..461efb1424
--- /dev/null
+++ b/plugins/spa/frontend/src/app/stores/NodeStore.ts
@@ -0,0 +1,323 @@
+import {action, computed, observable, ObservableMap} from 'mobx';
+import * as dateformat from 'dateformat';
+import {connectWebSocket, registerHandler, WSMsgType} from "app/misc/WS";
+
+class TPSMetric {
+ tps: number;
+ ts: string;
+}
+
+class Status {
+ id: string;
+ version: string;
+ uptime: number;
+ mem: MemoryMetrics = new MemoryMetrics();
+}
+
+class MemoryMetrics {
+ sys: number;
+ heap_sys: number;
+ heap_inuse: number;
+ heap_idle: number;
+ heap_released: number;
+ heap_objects: number;
+ m_span_inuse: number;
+ m_cache_inuse: number;
+ stack_sys: number;
+ last_pause_gc: number;
+ num_gc: number;
+ ts: string;
+}
+
+class NetworkIO {
+ tx: number;
+ rx: number;
+ ts: string;
+}
+
+class NeighborMetrics {
+ @observable collected: Array = [];
+ @observable network_io: Array = [];
+
+ addMetric(metric: NeighborMetric) {
+ metric.ts = dateformat(Date.now(), "HH:MM:ss");
+ this.collected.push(metric);
+ if (this.collected.length > maxMetricsDataPoints) {
+ this.collected.shift();
+ }
+ let netIO = this.currentNetIO;
+ if (netIO) {
+ if (this.network_io.length > maxMetricsDataPoints) {
+ this.network_io.shift();
+ }
+ this.network_io.push(netIO);
+ }
+ }
+
+ get current() {
+ return this.collected[this.collected.length - 1];
+ }
+
+ get secondLast() {
+ let index = this.collected.length - 2;
+ if (index < 0) {
+ return
+ }
+ return this.collected[index];
+ }
+
+ get currentNetIO(): NetworkIO {
+ if (this.current && this.secondLast) {
+ return {
+ tx: this.current.bytes_written - this.secondLast.bytes_written,
+ rx: this.current.bytes_read - this.secondLast.bytes_read,
+ ts: dateformat(new Date(), "HH:MM:ss"),
+ };
+ }
+ return null;
+ }
+
+ @computed
+ get netIOSeries() {
+ let tx = Object.assign({}, chartSeriesOpts,
+ series("Tx", 'rgba(53, 180, 219,1)', 'rgba(53, 180, 219,0.4)')
+ );
+ let rx = Object.assign({}, chartSeriesOpts,
+ series("Rx", 'rgba(235, 134, 52)', 'rgba(235, 134, 52,0.4)')
+ );
+
+ let labels = [];
+ for (let i = 0; i < this.network_io.length; i++) {
+ let metric: NetworkIO = this.network_io[i];
+ labels.push(metric.ts);
+ tx.data.push(metric.tx);
+ rx.data.push(-metric.rx);
+ }
+
+ return {
+ labels: labels,
+ datasets: [tx, rx],
+ };
+ }
+}
+
+class NeighborMetric {
+ id: string;
+ address: string;
+ connection_origin: number;
+ bytes_read: number;
+ bytes_written: number;
+ ts: number;
+}
+
+const chartSeriesOpts = {
+ label: "Incoming", data: [],
+ fill: true,
+ lineTension: 0,
+ backgroundColor: 'rgba(58, 60, 171,0.4)',
+ borderWidth: 1,
+ borderColor: 'rgba(58, 60, 171,1)',
+ borderCapStyle: 'butt',
+ borderDash: [],
+ borderDashOffset: 0.0,
+ borderJoinStyle: 'miter',
+ pointBorderColor: 'rgba(58, 60, 171,1)',
+ pointBackgroundColor: '#fff',
+ pointBorderWidth: 1,
+ pointHoverBackgroundColor: 'rgba(58, 60, 171,1)',
+ pointHoverBorderColor: 'rgba(220,220,220,1)',
+ pointHoverBorderWidth: 2,
+ pointRadius: 0,
+ pointHitRadius: 20,
+ pointHoverRadius: 5,
+};
+
+function series(name: string, color: string, bgColor: string) {
+ return {
+ label: name, data: [],
+ backgroundColor: bgColor,
+ borderColor: color,
+ pointBorderColor: color,
+ pointHoverBackgroundColor: color,
+ pointHoverBorderColor: 'rgba(220,220,220,1)',
+ }
+}
+
+const statusWebSocketPath = "/ws";
+
+const maxMetricsDataPoints = 900;
+
+export class NodeStore {
+ @observable status: Status = new Status();
+ @observable websocketConnected: boolean = false;
+ @observable last_tps_metric: TPSMetric = new TPSMetric();
+ @observable collected_tps_metrics: Array = [];
+ @observable collected_mem_metrics: Array = [];
+ @observable neighbor_metrics = new ObservableMap();
+
+ constructor() {
+ registerHandler(WSMsgType.Status, this.updateStatus);
+ registerHandler(WSMsgType.TPSMetrics, this.updateLastTPSMetric);
+ registerHandler(WSMsgType.NeighborStats, this.updateNeighborMetrics);
+ }
+
+ connect() {
+ connectWebSocket(statusWebSocketPath,
+ () => this.updateWebSocketConnected(true),
+ () => this.updateWebSocketConnected(false),
+ () => this.updateWebSocketConnected(false))
+ }
+
+ @action
+ updateWebSocketConnected = (connected: boolean) => this.websocketConnected = connected;
+
+ @action
+ updateStatus = (status: Status) => {
+ status.mem.ts = dateformat(Date.now(), "HH:MM:ss");
+ if (this.collected_mem_metrics.length > maxMetricsDataPoints) {
+ this.collected_mem_metrics.shift();
+ }
+ this.collected_mem_metrics.push(status.mem);
+ this.status = status;
+ };
+
+ @action
+ updateNeighborMetrics = (neighborMetrics: Array) => {
+ let updated = [];
+ for (let i = 0; i < neighborMetrics.length; i++) {
+ let metric = neighborMetrics[i];
+ let neighbMetrics: NeighborMetrics = this.neighbor_metrics.get(metric.id);
+ if (!neighbMetrics) {
+ neighbMetrics = new NeighborMetrics();
+ }
+ neighbMetrics.addMetric(metric);
+ this.neighbor_metrics.set(metric.id, neighbMetrics);
+ updated.push(metric.id);
+ }
+ // remove duplicates
+ for (const k of this.neighbor_metrics.keys()) {
+ if (!updated.includes(k)) {
+ this.neighbor_metrics.delete(k);
+ }
+ }
+ };
+
+ @action
+ updateLastTPSMetric = (tps: number) => {
+ let tpsMetric = new TPSMetric();
+ tpsMetric.tps = tps;
+ tpsMetric.ts = dateformat(Date.now(), "HH:MM:ss");
+ this.last_tps_metric = tpsMetric;
+ if (this.collected_tps_metrics.length > maxMetricsDataPoints) {
+ this.collected_tps_metrics.shift();
+ }
+ this.collected_tps_metrics.push(tpsMetric);
+ };
+
+ @computed
+ get tpsSeries() {
+ let tps = Object.assign({}, chartSeriesOpts,
+ series("TPS", 'rgba(67, 196, 99,1)', 'rgba(67, 196, 99,0.4)')
+ );
+
+ let labels = [];
+ for (let i = 0; i < this.collected_tps_metrics.length; i++) {
+ let metric: TPSMetric = this.collected_tps_metrics[i];
+ labels.push(metric.ts);
+ tps.data.push(metric.tps);
+ }
+
+ return {
+ labels: labels,
+ datasets: [tps],
+ };
+ }
+
+ @computed
+ get neighborsSeries() {
+ return {};
+ }
+
+ @computed
+ get uptime() {
+ let day, hour, minute, seconds;
+ seconds = Math.floor(this.status.uptime / 1000);
+ minute = Math.floor(seconds / 60);
+ seconds = seconds % 60;
+ hour = Math.floor(minute / 60);
+ minute = minute % 60;
+ day = Math.floor(hour / 24);
+ hour = hour % 24;
+ let str = "";
+ if (day == 1) {
+ str += day + " Day, ";
+ }
+ if (day > 1) {
+ str += day + " Days, ";
+ }
+ if (hour >= 0) {
+ if (hour < 10) {
+ str += "0" + hour + ":";
+ } else {
+ str += hour + ":";
+ }
+ }
+ if (minute >= 0) {
+ if (minute < 10) {
+ str += "0" + minute + ":";
+ } else {
+ str += minute + ":";
+ }
+ }
+ if (seconds >= 0) {
+ if (seconds < 10) {
+ str += "0" + seconds;
+ } else {
+ str += seconds;
+ }
+ }
+
+ return str;
+ }
+
+ @computed
+ get memSeries() {
+ let heapAlloc = Object.assign({}, chartSeriesOpts,
+ series("Heap Alloc", 'rgba(168, 50, 76,1)', 'rgba(168, 50, 76,0.4)')
+ );
+ let heapInuse = Object.assign({}, chartSeriesOpts,
+ series("Heap In-Use", 'rgba(222, 49, 87,1)', 'rgba(222, 49, 87,0.4)')
+ );
+ let heapIdle = Object.assign({}, chartSeriesOpts,
+ series("Heap Idle", 'rgba(222, 49, 182,1)', 'rgba(222, 49, 182,0.4)')
+ );
+ let heapReleased = Object.assign({}, chartSeriesOpts,
+ series("Heap Released", 'rgba(250, 76, 252,1)', 'rgba(250, 76, 252,0.4)')
+ );
+ let stackAlloc = Object.assign({}, chartSeriesOpts,
+ series("Stack Alloc", 'rgba(54, 191, 173,1)', 'rgba(54, 191, 173,0.4)')
+ );
+ let sys = Object.assign({}, chartSeriesOpts,
+ series("Total Alloc", 'rgba(160, 50, 168,1)', 'rgba(160, 50, 168,0.4)')
+ );
+
+ let labels = [];
+ for (let i = 0; i < this.collected_mem_metrics.length; i++) {
+ let metric = this.collected_mem_metrics[i];
+ labels.push(metric.ts);
+ heapAlloc.data.push(metric.heap_sys);
+ heapInuse.data.push(metric.heap_inuse);
+ heapIdle.data.push(metric.heap_idle);
+ heapReleased.data.push(metric.heap_released);
+ stackAlloc.data.push(metric.stack_sys);
+ sys.data.push(metric.sys);
+ }
+
+ return {
+ labels: labels,
+ datasets: [sys, heapAlloc, heapInuse, heapIdle, heapReleased, stackAlloc],
+ };
+ }
+}
+
+export default NodeStore;
\ No newline at end of file
diff --git a/plugins/spa/frontend/src/app/stores/RouterStore.ts b/plugins/spa/frontend/src/app/stores/RouterStore.ts
new file mode 100644
index 0000000000..bb7bb3b353
--- /dev/null
+++ b/plugins/spa/frontend/src/app/stores/RouterStore.ts
@@ -0,0 +1,13 @@
+import {History} from 'history';
+import {RouterStore as BaseRouterStore, syncHistoryWithStore} from 'mobx-react-router';
+
+export class RouterStore extends BaseRouterStore {
+ constructor(history?: History) {
+ super();
+ if (history) {
+ this.history = syncHistoryWithStore(history, this);
+ }
+ }
+}
+
+export default RouterStore;
diff --git a/plugins/spa/frontend/src/assets/index.html b/plugins/spa/frontend/src/assets/index.html
new file mode 100644
index 0000000000..a47c9c6e08
--- /dev/null
+++ b/plugins/spa/frontend/src/assets/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+ GoShimmer Dashboard
+
+
+
+
+
+
diff --git a/plugins/spa/frontend/src/assets/main.css b/plugins/spa/frontend/src/assets/main.css
new file mode 100644
index 0000000000..b4d5b3006a
--- /dev/null
+++ b/plugins/spa/frontend/src/assets/main.css
@@ -0,0 +1,13 @@
+
+.prevNextButton {
+ text-decoration: none !important;
+ color: black;
+ padding-left: 5px;
+ padding-right: 5px;
+ vertical-align: center;
+ text-align: center;
+}
+
+.hidden {
+ visibility: hidden !important;
+}
\ No newline at end of file
diff --git a/plugins/spa/frontend/src/main.tsx b/plugins/spa/frontend/src/main.tsx
new file mode 100644
index 0000000000..dda4c23dcd
--- /dev/null
+++ b/plugins/spa/frontend/src/main.tsx
@@ -0,0 +1,33 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom';
+import {Provider} from 'mobx-react';
+import {createBrowserHistory} from 'history';
+import 'chartjs-plugin-streaming';
+import {App} from 'app/App';
+import {RouterStore, syncHistoryWithStore} from 'mobx-react-router';
+import {Router} from 'react-router-dom';
+import NodeStore from "app/stores/NodeStore";
+import ExplorerStore from "app/stores/ExplorerStore";
+
+// prepare MobX stores
+const routerStore = new RouterStore();
+const nodeStore = new NodeStore();
+const explorerStore = new ExplorerStore(routerStore);
+const stores = {
+ "routerStore": routerStore,
+ "nodeStore": nodeStore,
+ "explorerStore": explorerStore,
+};
+
+const browserHistory = createBrowserHistory();
+const history = syncHistoryWithStore(browserHistory, routerStore);
+
+// render react DOM
+ReactDOM.render(
+
+
+
+
+ ,
+ document.getElementById('root')
+);
diff --git a/plugins/spa/frontend/tsconfig.json b/plugins/spa/frontend/tsconfig.json
new file mode 100644
index 0000000000..5552b9bb23
--- /dev/null
+++ b/plugins/spa/frontend/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "sourceMap": true,
+ "target": "es6",
+ "jsx": "react",
+ "module": "es6",
+ "moduleResolution": "node",
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
+ "declaration": false,
+ "noImplicitAny": false,
+ "noImplicitReturns": false,
+ "noUnusedLocals": true,
+ "removeComments": true,
+ "strictNullChecks": false,
+ "outDir": "build",
+ "lib": ["es6", "es7", "dom"],
+ "baseUrl": "src",
+ "paths": {
+ "app/*": ["./app/*"]
+ }
+ },
+ "exclude": ["dist", "build", "node_modules"]
+}
diff --git a/plugins/spa/frontend/types/global.d.ts b/plugins/spa/frontend/types/global.d.ts
new file mode 100644
index 0000000000..f25ac1b839
--- /dev/null
+++ b/plugins/spa/frontend/types/global.d.ts
@@ -0,0 +1,7 @@
+/** Global definitions for developement **/
+
+// for style loader
+declare module '*.css' {
+ const styles: any;
+ export = styles;
+}
diff --git a/plugins/spa/frontend/webpack.config.js b/plugins/spa/frontend/webpack.config.js
new file mode 100644
index 0000000000..50810a4994
--- /dev/null
+++ b/plugins/spa/frontend/webpack.config.js
@@ -0,0 +1,157 @@
+let webpack = require('webpack');
+let path = require('path');
+
+const statements = require('tsx-control-statements').default;
+
+// variables
+let isProduction =
+ process.argv.indexOf('-p') >= 0 || process.env.NODE_ENV === 'production';
+let sourcePath = path.join(__dirname, './src');
+let outPath = path.join(__dirname, './build');
+
+// plugins
+let HtmlWebpackPlugin = require('html-webpack-plugin');
+let MiniCssExtractPlugin = require('mini-css-extract-plugin');
+let WebpackCleanupPlugin = require('webpack-cleanup-plugin');
+
+module.exports = {
+ context: sourcePath,
+ entry: {
+ app: './main.tsx'
+ },
+ output: {
+ path: outPath,
+ publicPath: isProduction ? "/app" : "http://127.0.0.1:9090/",
+ filename: isProduction ? '[contenthash].js' : '[hash].js',
+ chunkFilename: isProduction ? '[name].[contenthash].js' : '[name].[hash].js'
+ },
+ target: 'web',
+ resolve: {
+ extensions: ['.js', '.ts', '.tsx'],
+ // Fix webpack's default behavior to not load packages with jsnext:main module
+ // (jsnext:main directs not usually distributable es6 format, but es6 sources)
+ mainFields: ['module', 'browser', 'main'],
+ alias: {
+ app: path.resolve(__dirname, 'src/app/')
+ }
+ },
+ module: {
+ rules: [
+ // .ts, .tsx
+ {
+ test: /\.tsx?$/,
+ use: [
+ !isProduction && {
+ loader: 'babel-loader',
+ options: {plugins: ['react-hot-loader/babel']}
+ },
+ {
+ loader: 'ts-loader',
+ options: {
+ getCustomTransformers: () => ({ before: [statements()] })
+ }
+ }
+ ].filter(Boolean)
+ },
+ // css
+ {
+ test: /\.css$/,
+ use: [
+ isProduction ? MiniCssExtractPlugin.loader : 'style-loader',
+ {
+ loader: 'css-loader',
+ query: {
+ modules: true,
+ sourceMap: !isProduction,
+ importLoaders: 1,
+ localIdentName: isProduction
+ ? '[hash:base64:5]'
+ : '[local]__[hash:base64:5]'
+ }
+ },
+ {
+ loader: 'postcss-loader',
+ options: {
+ ident: 'postcss',
+ plugins: [
+ require('postcss-import')({addDependencyTo: webpack}),
+ require('postcss-url')(),
+ require('postcss-preset-env')({
+ /* use stage 2 features (defaults) */
+ stage: 2
+ }),
+ require('postcss-reporter')(),
+ require('postcss-browser-reporter')({
+ disabled: isProduction
+ })
+ ]
+ }
+ }
+ ]
+ },
+ // static assets
+ {test: /\.html$/, use: 'html-loader'},
+ {test: /\.(a?png|svg)$/, use: 'url-loader?limit=10000'},
+ {
+ test: /\.(jpe?g|gif|bmp|mp3|mp4|ogg|wav|eot|ttf|woff|woff2)$/,
+ use: 'file-loader'
+ }
+ ]
+ },
+ optimization: {
+ splitChunks: {
+ name: true,
+ cacheGroups: {
+ commons: {
+ chunks: 'initial',
+ minChunks: 2
+ },
+ vendors: {
+ test: /[\\/]node_modules[\\/]/,
+ chunks: 'all',
+ priority: -10,
+ filename: isProduction ? 'vendor.[contenthash].js' : 'vendor.[hash].js'
+ }
+ }
+ },
+ runtimeChunk: true
+ },
+ plugins: [
+ new webpack.EnvironmentPlugin({
+ NODE_ENV: 'development', // use 'development' unless process.env.NODE_ENV is defined
+ DEBUG: false
+ }),
+ new WebpackCleanupPlugin(),
+ new MiniCssExtractPlugin({
+ filename: isProduction ? '[contenthash].css' : '[hash].css',
+ disable: !isProduction
+ }),
+ new HtmlWebpackPlugin({
+ template: 'assets/index.html'
+ }),
+ ],
+ devServer: {
+ contentBase: sourcePath,
+ hot: true,
+ inline: true,
+ disableHostCheck: true,
+ historyApiFallback: {
+ disableDotRule: true
+ },
+ stats: 'minimal',
+ clientLogLevel: 'warning',
+ headers: {
+ "Access-Control-Allow-Origin": "*",
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
+ "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
+ }
+ },
+ // https://webpack.js.org/configuration/devtool/
+ devtool: isProduction ? 'hidden-source-map' : 'cheap-module-eval-source-map',
+ node: {
+ // workaround for webpack-dev-server issue
+ // https://github.com/webpack/webpack-dev-server/issues/60#issuecomment-103411179
+ fs: 'empty',
+ net: 'empty'
+ }
+};
diff --git a/plugins/spa/frontend/yarn.lock b/plugins/spa/frontend/yarn.lock
new file mode 100644
index 0000000000..35aa25516c
--- /dev/null
+++ b/plugins/spa/frontend/yarn.lock
@@ -0,0 +1,7764 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+ integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
+ dependencies:
+ "@babel/highlight" "^7.8.3"
+
+"@babel/core@^7.2.2":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941"
+ integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.8.3"
+ "@babel/helpers" "^7.8.3"
+ "@babel/parser" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.0"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03"
+ integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==
+ dependencies:
+ "@babel/types" "^7.8.3"
+ jsesc "^2.5.1"
+ lodash "^4.17.13"
+ source-map "^0.5.0"
+
+"@babel/helper-function-name@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca"
+ integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.8.3"
+ "@babel/template" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-get-function-arity@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
+ integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helper-split-export-declaration@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
+ integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
+"@babel/helpers@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85"
+ integrity sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==
+ dependencies:
+ "@babel/template" "^7.8.3"
+ "@babel/traverse" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/highlight@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797"
+ integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081"
+ integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==
+
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1"
+ integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
+"@babel/template@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8"
+ integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/parser" "^7.8.3"
+ "@babel/types" "^7.8.3"
+
+"@babel/traverse@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a"
+ integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@babel/generator" "^7.8.3"
+ "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-split-export-declaration" "^7.8.3"
+ "@babel/parser" "^7.8.3"
+ "@babel/types" "^7.8.3"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.13"
+
+"@babel/types@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
+ integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@csstools/convert-colors@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
+ integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
+
+"@jimp/bmp@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.9.3.tgz#98eafc81674ce750f428ac9380007f1a4e90255e"
+ integrity sha512-wXZYccgGQAsIK8DZX0wZE3gbSd2mL2+eheSJMts6I5hQjxhVRZd1Gwu425nUQGzfKCOgKYTW0nLv7/8OoOTTkw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ bmp-js "^0.1.0"
+ core-js "^3.4.1"
+
+"@jimp/core@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.9.3.tgz#bffbf955c046569bf4b682b575228e31bb41e445"
+ integrity sha512-kB9lvst1QhgYOC963SAuPgv+DdVfxTProphrSffAAoo5eLeQab/Ca3ZUeX1E/SnLSr+NGVnNCd8c9gyuKDiENg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ any-base "^1.1.0"
+ buffer "^5.2.0"
+ core-js "^3.4.1"
+ exif-parser "^0.1.12"
+ file-type "^9.0.0"
+ load-bmfont "^1.3.1"
+ mkdirp "0.5.1"
+ phin "^2.9.1"
+ pixelmatch "^4.0.2"
+ tinycolor2 "^1.4.1"
+
+"@jimp/custom@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.9.3.tgz#b49dfe1d6b24e62fd4101a7db77104024c8d97e8"
+ integrity sha512-2E7yabQMeqjcK8+ZFu3Ja5cWyrB0zv/pmzNSDg/BBPJ59HE0fj/qcERAz6VklcjHUYRUfmE5uODsb+4DE0o/YQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/core" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/gif@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.9.3.tgz#b2b1a519092f94a913a955f252996f9a968930db"
+ integrity sha512-DshKgMQ8lXorI/xTRyeRkZqZ3JqgnL2aGYAhx0SkAunyHgXji27chmrOGj/6KVDBucrDf/6mSexnSoUDnlWrfA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+ omggif "^1.0.9"
+
+"@jimp/jpeg@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.9.3.tgz#a759cb3bccf3cb163166873b9bdc0c949c5991b5"
+ integrity sha512-AJzcTJXfN9BHtpzAbICwR3+GoH0pSr6OYXbAS6yuKwz+xVn9UHrEjQb74CIzIRqrT/VWcIKg29cMQxgokzWY7w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+ jpeg-js "^0.3.4"
+
+"@jimp/plugin-blit@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.9.3.tgz#740346ac62ec0f7ae4458f5fd59c7582e630a8e8"
+ integrity sha512-+UxCsJ3XkRSdpigpTBJ9WkdwUc3OtBlhVZdU6OL6M9ldume5Gj3rTyWvMCqytOK1tZ/+7HmxoWe4IWX31hz9qA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-blur@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.9.3.tgz#9df505aaa63de138060264cf83ed4a98304bf105"
+ integrity sha512-RADcYjZ5vbk5ZrUiK7qv0G4xOpHtu19HWVVX9JTDbm4VByWTxPboVKlgiYLA6l+IxIXNtEqDclsADIM0s9FQhA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-color@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.9.3.tgz#4a5ad28f68901355878f5330186c260f4f87f944"
+ integrity sha512-gHDA5GVx4/R4fitEACKmWH7hNy0aU48MZWYRxmATvuqY39KidJ0fjwp+brQ3Ivgb35AgFVc2jQYc3U/JXv4RxQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+ tinycolor2 "^1.4.1"
+
+"@jimp/plugin-contain@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.9.3.tgz#d0da9892edea25549611c88e125bfcc59045c426"
+ integrity sha512-vdYAtp65LNDT/hMctow5o0a/SbD41/y7Z9AO7MGsfUIK92Woq90SNTWx7JplDl4HSZGrqaBONnfiEhRiYlDrdg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-cover@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.9.3.tgz#2fca63620fcf8145bdecf315cf461588b09d9488"
+ integrity sha512-yOwsvakgyS2/C4iZF1a1wg63QKfYvqb2d6k+rgY/0vaAe44JtEx+Gbg+7iOt4EaMm5BDlxRwmcA2Q8Pef8TvAQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-crop@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.9.3.tgz#9b19c11293714a99c03d4b517ab597a5f88823e8"
+ integrity sha512-kqMXSyY8hrfo0idr6qY2USOWPrNqpDWs+D6Vwa+kV6SGJhj3rMTIcptQDaamIETSxbjkE8rwUu3K4Q5UD69D7w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-displace@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.9.3.tgz#07645687b29ebc8a8491244410172795d511ba21"
+ integrity sha512-0AdwxYRWDmJ2wIRIj2RR3sRmNjMhcy5Kwt9Jbi/RRnzxkRScZAiyzkNZhBul23EM7ClfjrUrZufuUvRMHxZRDw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-dither@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.9.3.tgz#292b3ee617a5dcfe065d13b643055e910f8b6934"
+ integrity sha512-8OE+Xak9xepiCwSV+oAsb/gupTnttG3aDKxtpSZjwHebnr+k1VG8NgICbMSFATTVJqqZ18oj6LC+5726qHUJ9w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-flip@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.9.3.tgz#a755ffa1d860106067215987cbac213501d22b41"
+ integrity sha512-w+lzE1ZF/UOjB8qJdeIm+dLQtOK1obZwGYdCIbgxZxw4SfkkjAftJdY8o8RNOXhHDZqGu+cYQZbMKP1zcoNkyQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-gaussian@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.3.tgz#b10b5a5b4c37cb4edc3ed22a9b25294e68daf2f8"
+ integrity sha512-RPrWwzlZsbWC2opSgeyWt30JU9Uwg1+GwBnoNpEMLKeqm0Dv6snASASa4zVtviGWAIq//p3Jrap7g57hKqL0Cg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-invert@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.9.3.tgz#723a873133a1d62f9b93e023991f262c85917c78"
+ integrity sha512-0lRsh7IPkzyYqExrZDT50h38xdlB/+KrdiDcuxWwWyIlKauLMR0kInjwf8sPeb3elPLeETmze7uwPAxrIAtsGQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-mask@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.9.3.tgz#6329ec861269244ab10ab9b3f54b1624c4ce0bab"
+ integrity sha512-nZ0J62Hly9JtMZctlSDVgnTd8Fg2XGikzAYilSTCjzIRtbXL5Be/qSAZrMfLD3CZ8exTxdlEGRkEJI3RZKXYCw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-normalize@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.9.3.tgz#564155032d1b9dc567dbb7427a85606a25427c30"
+ integrity sha512-0IvgTt4R15QJnoCHvvqlK56zOtCsQV7Mkx757kdNah8uyPGjadTcFBuqCaOMK943X36IIv+o7Ix7yvNUJZt4aw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-print@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.9.3.tgz#b4470137312232de9b35eaf412cd753f999c58d8"
+ integrity sha512-pV6oX5Bhe9O/dbgrotz46Bv6u1M+/n9G0kRUunDjwzXrvON5raBFEJHQDPcTXiqPT25Gc9Ba4/Akfo/Zl6+wgQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+ load-bmfont "^1.4.0"
+
+"@jimp/plugin-resize@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.9.3.tgz#916abd57c4f9b426984354c77555ade1efda7a82"
+ integrity sha512-YzqVE8QoDIZpVuI52v+WejwEjEEiJfNFviQfprfm5af7uSSseZgDw1sJ0koqAu+liMSY+Ewp79v2SDrKoJKqtg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-rotate@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.9.3.tgz#aa0d674c08726c0ae3ebc7f2adbfca0a927b1d9f"
+ integrity sha512-kADY2pI3/yMyHbuyvKB4nqPoKf8DPQBU1b4zz2K7SxcwKh1krFf4Fa9mmhhDLoFwuNSy0SPb1JCMUO4BtFCFLA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugin-scale@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.9.3.tgz#427fed7642883c27601aae33c25413980b6a2c50"
+ integrity sha512-vZaiL5Qc+WrgGEfUe4Y0vG+qbT6pe2TW68/mu124E1tKVcZjHKZUeFN0Wr/hP2myN6nqTYj0/sord2OS/04JpA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+
+"@jimp/plugins@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.9.3.tgz#bdff9d49484469c4d74ef47c2708e75773ca22b9"
+ integrity sha512-KYCSgFGoZBNC0224X5yUnMHCZnCdUVrsu2Yo67o3XZfUgDjO81J+vdzZ0twpPQ6qLLVAP+nQ8hkRV/QzEUstMw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/plugin-blit" "^0.9.3"
+ "@jimp/plugin-blur" "^0.9.3"
+ "@jimp/plugin-color" "^0.9.3"
+ "@jimp/plugin-contain" "^0.9.3"
+ "@jimp/plugin-cover" "^0.9.3"
+ "@jimp/plugin-crop" "^0.9.3"
+ "@jimp/plugin-displace" "^0.9.3"
+ "@jimp/plugin-dither" "^0.9.3"
+ "@jimp/plugin-flip" "^0.9.3"
+ "@jimp/plugin-gaussian" "^0.9.3"
+ "@jimp/plugin-invert" "^0.9.3"
+ "@jimp/plugin-mask" "^0.9.3"
+ "@jimp/plugin-normalize" "^0.9.3"
+ "@jimp/plugin-print" "^0.9.3"
+ "@jimp/plugin-resize" "^0.9.3"
+ "@jimp/plugin-rotate" "^0.9.3"
+ "@jimp/plugin-scale" "^0.9.3"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
+"@jimp/png@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.9.3.tgz#5c1bbb89b32e2332891a13efdb423e87287a8321"
+ integrity sha512-LJXUemDTSbTGAGEp9hNQH0uTRSB8gYeE6FsfT3M00oZincu6/WzDzl0P8E95rMjNxZqAihdTyOP3+kcrbbqX+w==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/utils" "^0.9.3"
+ core-js "^3.4.1"
+ pngjs "^3.3.3"
+
+"@jimp/tiff@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.9.3.tgz#a4498c0616fb24034f5512b159b75b0aea389e9c"
+ integrity sha512-w9H6dT+GDHN//Srsv27JhRn7R2byzUahOGfFw7KpIn95jg0ogcxjKTo/RAGQC56sr4U092e4Npl7E85Lt934WQ==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+ utif "^2.0.1"
+
+"@jimp/types@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.9.3.tgz#75337245a1a8c7c84a414beca3cfeded338c0ef1"
+ integrity sha512-hUJKoT2IhnbO/trxNWzN19n8g+p7aKbM1R+71n4wMZnD41PzrVtz+sBBCdB+JCjBJs/i7fJt4d9z0i3Xe8m7Zw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/bmp" "^0.9.3"
+ "@jimp/gif" "^0.9.3"
+ "@jimp/jpeg" "^0.9.3"
+ "@jimp/png" "^0.9.3"
+ "@jimp/tiff" "^0.9.3"
+ core-js "^3.4.1"
+ timm "^1.6.1"
+
+"@jimp/utils@^0.9.3":
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.9.3.tgz#fd7af0d1138febbeacc841be4b802218444ce088"
+ integrity sha512-9D2Of6BcjYONtl77YfmU2y5aRMLe0/O2e2aQvfCxdNwD33jRdwNdN4i3m73dpiClNquApIjL4nYGhTixA4UstA==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ core-js "^3.4.1"
+
+"@posthtml/esm@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@posthtml/esm/-/esm-1.0.0.tgz#09bcb28a02438dcee22ad1970ca1d85a000ae0cf"
+ integrity sha512-dEVG+ITnvqKGa4v040tP+n8LOKOqr94qjLva7bE5pnfm2KHJwsKz69J4KMxgWLznbpBJzy8vQfCayEk3vLZnZQ==
+
+"@restart/context@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02"
+ integrity sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==
+
+"@restart/hooks@^0.3.11", "@restart/hooks@^0.3.12":
+ version "0.3.19"
+ resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.19.tgz#1b54b4a61dca6157f3bfcd4f348855187d67d51f"
+ integrity sha512-8bskLEkiDvuZztnfGN+vM56q2HQV8dyXS/Eb0nhXPx6fonii3hQLxfNVA2r5NTMbvEkwDo59bAau3idUXaGvww==
+
+"@types/anymatch@*":
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
+ integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
+
+"@types/classnames@^2.2.7":
+ version "2.2.9"
+ resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.9.tgz#d868b6febb02666330410fe7f58f3c4b8258be7b"
+ integrity sha512-MNl+rT5UmZeilaPxAVs6YaPC2m6aA8rofviZbhbxpPpl61uKodfdQVsBtgJGTqGizEf02oW3tsVe7FYB8kK14A==
+
+"@types/events@*":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
+ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
+
+"@types/favicons@5.5.0":
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/@types/favicons/-/favicons-5.5.0.tgz#c1cb3d2a14955eedf479f3cc51948630c56e3a64"
+ integrity sha512-s76OlRaBfqtGu2ZBobnZv2NETfqsQUVfKKlOkKNGo4ArBsqiblodKsnQ3j29hCCgmpQacEfLxealV96za+tzVQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/glob@^7.1.1":
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
+ integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
+ dependencies:
+ "@types/events" "*"
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/history@*":
+ version "4.7.4"
+ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.4.tgz#06cbceb0ace6a342a9aafcb655a688cf38f6150d"
+ integrity sha512-+o2igcuZA3xtOoFH56s+MCZVidwlJNcJID57DSCyawS2i910yG9vkwehCjJNZ6ImhCR5S9DbvIJKyYHcMyOfMw==
+
+"@types/minimatch@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
+"@types/node@*":
+ version "13.1.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.8.tgz#1d590429fe8187a02707720ecf38a6fe46ce294b"
+ integrity sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A==
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+
+"@types/q@^1.5.1":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
+ integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
+
+"@types/react-dom@^16.0.11":
+ version "16.9.4"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.4.tgz#0b58df09a60961dcb77f62d4f1832427513420df"
+ integrity sha512-fya9xteU/n90tda0s+FtN5Ym4tbgxpq/hb/Af24dvs6uYnYn+fspaxw5USlw0R8apDNwxsqumdRoCoKitckQqw==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-router@^4.4.3":
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-4.4.5.tgz#1166997dc7eef2917b5ebce890ebecb32ee5c1b3"
+ integrity sha512-12+VOu1+xiC8RPc9yrgHCyLI79VswjtuqeS2gPrMcywH6tkc8rGIUhs4LaL3AJPqo5d+RPnfRpNKiJ7MK2Qhcg==
+ dependencies:
+ "@types/history" "*"
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@^16.7.20", "@types/react@^16.8.23", "@types/react@^16.9.11":
+ version "16.9.17"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.17.tgz#58f0cc0e9ec2425d1441dd7b623421a867aa253e"
+ integrity sha512-UP27In4fp4sWF5JgyV6pwVPAQM83Fj76JOcg02X5BZcpSu5Wx+fP9RMqc2v0ssBoQIFvD5JdKY41gjJJKmw6Bg==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^2.2.0"
+
+"@types/source-list-map@*":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
+ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
+
+"@types/tapable@*":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02"
+ integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==
+
+"@types/uglify-js@*":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082"
+ integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==
+ dependencies:
+ source-map "^0.6.1"
+
+"@types/webpack-sources@*":
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.6.tgz#3d21dfc2ec0ad0c77758e79362426a9ba7d7cbcb"
+ integrity sha512-FtAWR7wR5ocJ9+nP137DV81tveD/ZgB1sadnJ/axUGM3BUVfRPx8oQNMtv3JNfTeHx3VP7cXiyfR/jmtEsVHsQ==
+ dependencies:
+ "@types/node" "*"
+ "@types/source-list-map" "*"
+ source-map "^0.6.1"
+
+"@types/webpack@^4.4.23":
+ version "4.41.2"
+ resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.2.tgz#c6faf0111de27afdffe1158dac559e447c273516"
+ integrity sha512-DNMQOfEvwzWRRyp6Wy9QVCgJ3gkelZsuBE2KUD318dg95s9DKGiT5CszmmV58hq8jk89I9NClre48AEy1MWAJA==
+ dependencies:
+ "@types/anymatch" "*"
+ "@types/node" "*"
+ "@types/tapable" "*"
+ "@types/uglify-js" "*"
+ "@types/webpack-sources" "*"
+ source-map "^0.6.0"
+
+"@webassemblyjs/ast@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+ integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+ integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+ integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+ integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+ integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+ integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+ integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+ integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+
+"@webassemblyjs/helper-wasm-section@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+ integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+
+"@webassemblyjs/ieee754@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+ integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+ integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+ integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+ integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/helper-wasm-section" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-opt" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+ integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+ integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+ integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+ integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-code-frame" "1.8.5"
+ "@webassemblyjs/helper-fsm" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+ integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn@^6.2.1:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784"
+ integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9"
+ integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+ integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+
+ansi-colors@^3.0.0:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+ integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-html@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+ integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+any-base@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
+ integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+apexcharts-react@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/apexcharts-react/-/apexcharts-react-1.0.0.tgz#258fb12dd2e7a5cb38d74b400e92f18f13e5df55"
+ integrity sha512-kJbLRJ9B0LmY17Lz4/NWZjAvdEQovcmZ3Gn14zCR5WJQyIBi8YLWAZenf4hEzU3xBfpcp1q8Kbu9c7H8ZQw7oQ==
+
+apexcharts@^3.10.1:
+ version "3.15.2"
+ resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.15.2.tgz#534253b15dcbd3c30f77bda749d1280b4a7ef7cf"
+ integrity sha512-8JXWy9+MQCG7cQ07G+yAjGHf/xQjxna1hpn+IpA3+PTFoo+VBur/J1bDEeFHI3OaPym44z9PYo/6J7PwJ1gBuA==
+ dependencies:
+ svg.draggable.js "^2.2.2"
+ svg.easing.js "^2.0.0"
+ svg.filter.js "^2.0.2"
+ svg.pathmorphing.js "^0.1.3"
+ svg.resize.js "^1.4.3"
+ svg.select.js "^2.1.2"
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-flatten@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+ integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@^2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+author-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450"
+ integrity sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=
+
+autoprefixer@^6.3.1:
+ version "6.7.7"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
+ integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=
+ dependencies:
+ browserslist "^1.7.6"
+ caniuse-db "^1.0.30000634"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^5.2.16"
+ postcss-value-parser "^3.2.3"
+
+autoprefixer@^9.6.1:
+ version "9.7.4"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378"
+ integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==
+ dependencies:
+ browserslist "^4.8.3"
+ caniuse-lite "^1.0.30001020"
+ chalk "^2.4.2"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^7.0.26"
+ postcss-value-parser "^4.0.2"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
+ integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
+
+babel-loader@^8.0.5:
+ version "8.0.6"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
+ integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ loader-utils "^1.0.2"
+ mkdirp "^0.5.1"
+ pify "^4.0.1"
+
+balanced-match@^0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+batch@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+ integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+ integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+bignumber.js@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8"
+ integrity sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bl@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88"
+ integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==
+ dependencies:
+ readable-stream "^3.0.1"
+
+bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bmp-js@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.1.tgz#5ad0147099d13a9f38aa7b99af1d6e78666ed37f"
+ integrity sha1-WtAUcJnROp84qnuZrx1ueGZu038=
+
+bmp-js@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.3.tgz#64113e9c7cf1202b376ed607bf30626ebe57b18a"
+ integrity sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=
+
+bmp-js@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233"
+ integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM=
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+body-parser@1.19.0:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ dependencies:
+ bytes "3.1.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
+
+bonjour@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+ integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
+ dependencies:
+ array-flatten "^2.1.0"
+ deep-equal "^1.0.1"
+ dns-equal "^1.0.0"
+ dns-txt "^2.0.2"
+ multicast-dns "^6.0.1"
+ multicast-dns-service-types "^1.1.0"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+bootstrap@^4.3.1:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.4.1.tgz#8582960eea0c5cd2bede84d8b0baf3789c3e8b01"
+ integrity sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==
+
+brace-expansion@^1.0.0, brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
+ version "1.7.7"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+ integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=
+ dependencies:
+ caniuse-db "^1.0.30000639"
+ electron-to-chromium "^1.2.7"
+
+browserslist@^4.6.4, browserslist@^4.8.3:
+ version "4.8.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.3.tgz#65802fcd77177c878e015f0e3189f2c4f627ba44"
+ integrity sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==
+ dependencies:
+ caniuse-lite "^1.0.30001017"
+ electron-to-chromium "^1.3.322"
+ node-releases "^1.1.44"
+
+buffer-alloc-unsafe@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+ integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+ integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+ dependencies:
+ buffer-alloc-unsafe "^1.1.0"
+ buffer-fill "^1.0.0"
+
+buffer-equal@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
+ integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=
+
+buffer-fill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+ integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-indexof@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+ integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
+
+buffer-json@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23"
+ integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+buffer@^5.2.0:
+ version "5.4.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115"
+ integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+bytes@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^12.0.2:
+ version "12.0.3"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390"
+ integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cache-loader@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e"
+ integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==
+ dependencies:
+ buffer-json "^2.0.0"
+ find-cache-dir "^3.0.0"
+ loader-utils "^1.2.3"
+ mkdirp "^0.5.1"
+ neo-async "^2.6.1"
+ schema-utils "^2.0.0"
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+camel-case@3.0.x:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.1.1"
+
+camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-api@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
+ integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=
+ dependencies:
+ browserslist "^1.3.6"
+ caniuse-db "^1.0.30000529"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
+ version "1.0.30001021"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001021.tgz#ee4ad516fb2530abd90d2b32e986b172808672e5"
+ integrity sha512-FNfovmJx9ssO2hpvdN7D9daRAZHZ80gDV2KQRC0+icpm7QjyWm6Ea2TUEAk0rpNrRQYMeRbVOVsWwq9CE7V2zw==
+
+caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001017, caniuse-lite@^1.0.30001020:
+ version "1.0.30001021"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz#e75ed1ef6dbadd580ac7e7720bb16f07b083f254"
+ integrity sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chart.js@^2.9.3:
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.3.tgz#ae3884114dafd381bc600f5b35a189138aac1ef7"
+ integrity sha512-+2jlOobSk52c1VU6fzkh3UwqHMdSlgH1xFv9FKMqHiNCpXsGPQa/+81AFa+i3jZ253Mq9aAycPwDjnn1XbRNNw==
+ dependencies:
+ chartjs-color "^2.1.0"
+ moment "^2.10.2"
+
+chartjs-color-string@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz#1df096621c0e70720a64f4135ea171d051402f71"
+ integrity sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==
+ dependencies:
+ color-name "^1.0.0"
+
+chartjs-color@^2.1.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.4.1.tgz#6118bba202fe1ea79dd7f7c0f9da93467296c3b0"
+ integrity sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==
+ dependencies:
+ chartjs-color-string "^0.6.0"
+ color-convert "^1.9.3"
+
+chartjs-plugin-streaming@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/chartjs-plugin-streaming/-/chartjs-plugin-streaming-1.8.0.tgz#3cafcf5e733dbbe0de3ac39df00c65075d83bc5c"
+ integrity sha512-r7kHyNvSAz12J+W5FBmI/K400z4MXqfNYhA5xaTKJ6PA3ZA6Vq+2d5/OCGyVZF/7UsUDWDRK5tHHYj8jqe+nOg==
+
+chokidar@^2.0.2, chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.1.1, chownr@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142"
+ integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+clap@^1.0.9:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
+ integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==
+ dependencies:
+ chalk "^1.1.3"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+classnames@^2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
+ integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+
+clean-css@4.2.x:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
+ integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
+ dependencies:
+ source-map "~0.6.0"
+
+cliui@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+ integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+clone-buffer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
+ integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg=
+
+clone-stats@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
+ integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=
+
+clone@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
+
+clone@^2.1.1, clone@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+ integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
+
+cloneable-readable@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec"
+ integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==
+ dependencies:
+ inherits "^2.0.1"
+ process-nextick-args "^2.0.0"
+ readable-stream "^2.3.5"
+
+coa@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+ integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+ dependencies:
+ "@types/q" "^1.5.1"
+ chalk "^2.4.1"
+ q "^1.1.2"
+
+coa@~1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
+ integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=
+ dependencies:
+ q "^1.1.2"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1, color-convert@^1.9.3:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+ integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=
+ dependencies:
+ color-name "^1.0.0"
+
+color-string@^1.5.2:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+ integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@^0.11.0:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+ integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=
+ dependencies:
+ clone "^1.0.2"
+ color-convert "^1.3.0"
+ color-string "^0.3.0"
+
+color@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
+ integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.2"
+
+colormin@^1.0.5:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
+ integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=
+ dependencies:
+ color "^0.11.0"
+ css-color-names "0.0.4"
+ has "^1.0.1"
+
+colors@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
+ integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
+
+colors@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+ integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2.17.x:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+ integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
+
+commander@^2.19.0, commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@~2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+ integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compressible@~2.0.16:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+connect-history-api-fallback@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+ integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+content-disposition@0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+ integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js@^3.4.1, core-js@^3.4.5:
+ version "3.6.4"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647"
+ integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.0.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@6.0.5, cross-spawn@^6.0.0:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+css-blank-pseudo@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5"
+ integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==
+ dependencies:
+ postcss "^7.0.5"
+
+css-color-names@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+ integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
+
+css-has-pseudo@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee"
+ integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^5.0.0-rc.4"
+
+css-loader@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea"
+ integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==
+ dependencies:
+ camelcase "^5.2.0"
+ icss-utils "^4.1.0"
+ loader-utils "^1.2.3"
+ normalize-path "^3.0.0"
+ postcss "^7.0.14"
+ postcss-modules-extract-imports "^2.0.0"
+ postcss-modules-local-by-default "^2.0.6"
+ postcss-modules-scope "^2.1.0"
+ postcss-modules-values "^2.0.0"
+ postcss-value-parser "^3.3.0"
+ schema-utils "^1.0.0"
+
+css-prefers-color-scheme@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4"
+ integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==
+ dependencies:
+ postcss "^7.0.5"
+
+css-select-base-adapter@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+ integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-select@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+ integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^3.2.1"
+ domutils "^1.7.0"
+ nth-check "^1.0.2"
+
+css-tree@1.0.0-alpha.37:
+ version "1.0.0-alpha.37"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+ integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+ dependencies:
+ mdn-data "2.0.4"
+ source-map "^0.6.1"
+
+css-what@2.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+ integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+css-what@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1"
+ integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==
+
+cssdb@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0"
+ integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==
+
+cssesc@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
+ integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano@^3.4.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
+ integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=
+ dependencies:
+ autoprefixer "^6.3.1"
+ decamelize "^1.1.2"
+ defined "^1.0.0"
+ has "^1.0.1"
+ object-assign "^4.0.1"
+ postcss "^5.0.14"
+ postcss-calc "^5.2.0"
+ postcss-colormin "^2.1.8"
+ postcss-convert-values "^2.3.4"
+ postcss-discard-comments "^2.0.4"
+ postcss-discard-duplicates "^2.0.1"
+ postcss-discard-empty "^2.0.1"
+ postcss-discard-overridden "^0.1.1"
+ postcss-discard-unused "^2.2.1"
+ postcss-filter-plugins "^2.0.0"
+ postcss-merge-idents "^2.1.5"
+ postcss-merge-longhand "^2.0.1"
+ postcss-merge-rules "^2.0.3"
+ postcss-minify-font-values "^1.0.2"
+ postcss-minify-gradients "^1.0.1"
+ postcss-minify-params "^1.0.4"
+ postcss-minify-selectors "^2.0.4"
+ postcss-normalize-charset "^1.1.0"
+ postcss-normalize-url "^3.0.7"
+ postcss-ordered-values "^2.1.0"
+ postcss-reduce-idents "^2.2.2"
+ postcss-reduce-initial "^1.0.0"
+ postcss-reduce-transforms "^1.0.3"
+ postcss-svgo "^2.1.1"
+ postcss-unique-selectors "^2.0.2"
+ postcss-value-parser "^3.2.3"
+ postcss-zindex "^2.0.1"
+
+csso@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d"
+ integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==
+ dependencies:
+ css-tree "1.0.0-alpha.37"
+
+csso@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
+ integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=
+ dependencies:
+ clap "^1.0.9"
+ source-map "^0.5.3"
+
+csstype@^2.2.0, csstype@^2.6.7:
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431"
+ integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA==
+
+cuint@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
+ integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=
+
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+dateformat@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
+ integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.0.0, debug@^3.1.1, debug@^3.2.5:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.1.0, debug@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+decompress-response@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
+ integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
+ dependencies:
+ mimic-response "^2.0.0"
+
+deep-equal@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+ integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+ dependencies:
+ is-arguments "^1.0.4"
+ is-date-object "^1.0.1"
+ is-regex "^1.0.4"
+ object-is "^1.0.1"
+ object-keys "^1.1.1"
+ regexp.prototype.flags "^1.2.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+default-gateway@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
+ integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
+ dependencies:
+ execa "^1.0.0"
+ ip-regex "^2.1.0"
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+defined@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+ integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+
+del@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+ integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ globby "^6.1.0"
+ is-path-cwd "^2.0.0"
+ is-path-in-cwd "^2.0.0"
+ p-map "^2.0.0"
+ pify "^4.0.1"
+ rimraf "^2.6.3"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+detect-libc@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-node@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
+ integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dns-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+ integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
+
+dns-packet@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
+ integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
+ dependencies:
+ ip "^1.1.0"
+ safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+ integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
+ dependencies:
+ buffer-indexof "^1.0.0"
+
+dom-converter@^0.2:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+ integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+ dependencies:
+ utila "~0.4"
+
+dom-helpers@^5.0.1, dom-helpers@^5.1.0, dom-helpers@^5.1.2:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821"
+ integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw==
+ dependencies:
+ "@babel/runtime" "^7.6.3"
+ csstype "^2.6.7"
+
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+dom-walk@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+ integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
+ integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+domutils@^1.5.1, domutils@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.322:
+ version "1.3.337"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.337.tgz#b2c093cdb66121a946d333b454adcdc5666ceaed"
+ integrity sha512-uJ+wLjslYQ/2rAusDg+6FlK8DLhHWTLCe7gkofBehTifW7KCkPVTn5rhKSCncWYNq34Iy/o4OfswuEkAO2RBaw==
+
+elliptic@^6.0.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+ integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+ integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ tapable "^1.0.0"
+
+enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+ integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+entities@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
+ integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
+ version "1.17.2"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.2.tgz#965b10af56597b631da15872c17a405e86c1fd46"
+ integrity sha512-YoKuru3Lyoy7yVTBSH2j7UxTqe/je3dWAruC0sHvZX1GNd5zX8SSLvQqEgO9b3Ex8IW+goFI9arEEsFIbulhOw==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.1.5"
+ is-regex "^1.0.5"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimleft "^2.1.1"
+ string.prototype.trimright "^2.1.1"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es6-promise@^3.0.2:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+ integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+esprima@^2.6.0:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+ integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.1.0, estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+eventemitter3@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
+ integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
+
+events@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
+ integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
+
+eventsource@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
+ integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
+ dependencies:
+ original "^1.0.0"
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exif-parser@^0.1.12, exif-parser@^0.1.9:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
+ integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-template@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+express@^4.17.1:
+ version "4.17.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+ integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+ dependencies:
+ accepts "~1.3.7"
+ array-flatten "1.1.1"
+ body-parser "1.19.0"
+ content-disposition "0.5.3"
+ content-type "~1.0.4"
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "~1.1.2"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.5"
+ qs "6.7.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.1.2"
+ send "0.17.1"
+ serve-static "1.14.1"
+ setprototypeof "1.1.1"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
+ integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+favicons-webpack-plugin@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/favicons-webpack-plugin/-/favicons-webpack-plugin-2.1.0.tgz#a95e88dc234cd8589e16018b3f9f3a518b305f86"
+ integrity sha512-tHASGU/7pDbjma8Z6c6tmLe4zTcglRPVuE57L+qBCLYu2ELKsXu9h66a8S8Rjb4aFHXvJgTY3voghYzrhEAV6Q==
+ dependencies:
+ "@types/favicons" "5.5.0"
+ cache-loader "^4.1.0"
+ camelcase "^5.3.1"
+ favicons "5.5.0"
+ find-cache-dir "^3.2.0"
+ find-root "^1.1.0"
+ loader-utils "^1.2.3"
+ parse-author "^2.0.0"
+
+favicons@5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/favicons/-/favicons-5.5.0.tgz#4badbecac81ddf2793b8149d0823d97c2077445b"
+ integrity sha512-xZ4B+fZDuq2y999iorrYq4KuBT3OIZHU+CVfjOWQbjOC1OiU0xbf6pp4Ju/yAfJn7W74RVrC3Cv0oqR5CLvviw==
+ dependencies:
+ clone "^2.1.2"
+ colors "^1.4.0"
+ core-js "^3.4.5"
+ image-size "^0.8.3"
+ jimp "^0.9.3"
+ jsontoxml "^1.0.1"
+ lodash.defaultsdeep "^4.6.1"
+ require-directory "^2.1.1"
+ sharp "^0.23.3"
+ through2 "^3.0.1"
+ tinycolor2 "^1.4.1"
+ to-ico "^1.1.5"
+ vinyl "^2.2.0"
+ xml2js "^0.4.22"
+
+faye-websocket@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+ integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+faye-websocket@~0.11.1:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
+ integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+figgy-pudding@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+ integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
+file-loader@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
+ integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^1.0.0"
+
+file-type@^3.1.0, file-type@^3.8.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
+ integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
+
+file-type@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18"
+ integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+finalhandler@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-cache-dir@^2.0.0, find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-cache-dir@^3.0.0, find-cache-dir@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.2.0.tgz#e7fe44c1abc1299f516146e563108fd1006c1874"
+ integrity sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^3.0.0"
+ pkg-dir "^4.1.0"
+
+find-root@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+findup-sync@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+flatten@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
+ integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+follow-redirects@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f"
+ integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==
+ dependencies:
+ debug "^3.0.0"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-minipass@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz#a6415edab02fae4b9e9230bc87ee2e4472003cd1"
+ integrity sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==
+ dependencies:
+ minipass "^3.0.0"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.2.7:
+ version "1.2.11"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3"
+ integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.1"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+ integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-stream@^2.0.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
+ integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=
+ dependencies:
+ object-assign "^4.0.1"
+ pinkie-promise "^2.0.0"
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+github-from-package@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+ integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob@^7.0.3, glob@^7.1.3, glob@^7.1.4:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+global@^4.3.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
+ integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
+ dependencies:
+ min-document "^2.19.0"
+ process "^0.11.10"
+
+global@~4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+ integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
+
+gud@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
+ integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
+
+handle-thing@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754"
+ integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.0:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+he@1.2.x:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+history@^4.7.2, history@^4.9.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
+ integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ loose-envify "^1.2.0"
+ resolve-pathname "^3.0.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+ value-equal "^1.0.1"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoist-non-react-statics@^2.5.0:
+ version "2.5.5"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
+ integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
+
+hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f"
+ integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==
+ dependencies:
+ react-is "^16.7.0"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+html-comment-regex@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
+ integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
+
+html-entities@^1.2.0, html-entities@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+ integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
+
+html-loader@^1.0.0-alpha.0:
+ version "1.0.0-alpha.0"
+ resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.0.0-alpha.0.tgz#3f4ae7b490a587619be6d1eaa8ce16683580c642"
+ integrity sha512-KcuaIRWTU0kFjOJCs32a3JsGNCWkeOak0/F/uvJNp3x/N4McXdqHpcK64cYTozK7QLPKKtUqb9h7wR9K9rYRkg==
+ dependencies:
+ "@posthtml/esm" "^1.0.0"
+ htmlnano "^0.1.6"
+ loader-utils "^1.1.0"
+ posthtml "^0.11.2"
+ schema-utils "^0.4.3"
+
+html-minifier@^3.2.3:
+ version "3.5.21"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
+ integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==
+ dependencies:
+ camel-case "3.0.x"
+ clean-css "4.2.x"
+ commander "2.17.x"
+ he "1.2.x"
+ param-case "2.1.x"
+ relateurl "0.2.x"
+ uglify-js "3.4.x"
+
+html-webpack-plugin@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b"
+ integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s=
+ dependencies:
+ html-minifier "^3.2.3"
+ loader-utils "^0.2.16"
+ lodash "^4.17.3"
+ pretty-error "^2.0.2"
+ tapable "^1.0.0"
+ toposort "^1.0.0"
+ util.promisify "1.0.0"
+
+htmlnano@^0.1.6:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-0.1.10.tgz#a0a548eb4c76ae2cf2423ec7a25c881734d3dea6"
+ integrity sha512-eTEUzz8VdWYp+w/KUdb99kwao4reR64epUySyZkQeepcyzPQ2n2EPWzibf6QDxmkGy10Kr+CKxYqI3izSbmhJQ==
+ dependencies:
+ cssnano "^3.4.0"
+ object-assign "^4.0.1"
+ posthtml "^0.11.3"
+ posthtml-render "^1.1.4"
+ svgo "^1.0.5"
+ terser "^3.8.1"
+
+htmlparser2@^3.3.0, htmlparser2@^3.9.2:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+ integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+ dependencies:
+ domelementtype "^1.3.1"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.1.1"
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+ integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
+
+http-errors@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+"http-parser-js@>=0.4.0 <0.4.11":
+ version "0.4.10"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
+ integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=
+
+http-proxy-middleware@0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
+ integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
+ dependencies:
+ http-proxy "^1.17.0"
+ is-glob "^4.0.0"
+ lodash "^4.17.11"
+ micromatch "^3.1.10"
+
+http-proxy@^1.17.0:
+ version "1.18.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a"
+ integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==
+ dependencies:
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
+
+icss-utils@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
+ integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
+ dependencies:
+ postcss "^7.0.14"
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+image-size@^0.5.0:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
+ integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
+
+image-size@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.8.3.tgz#f0b568857e034f29baffd37013587f2c0cad8b46"
+ integrity sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==
+ dependencies:
+ queue "6.0.1"
+
+import-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+ integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
+ dependencies:
+ import-from "^2.1.0"
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-from@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+ integrity sha1-M1238qev/VOqpHHUuAId7ja387E=
+ dependencies:
+ resolve-from "^3.0.0"
+
+import-local@2.0.0, import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+ integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+internal-ip@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
+ integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
+ dependencies:
+ default-gateway "^4.2.0"
+ ipaddr.js "^1.9.0"
+
+interpret@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
+invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+ integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
+ip-regex@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
+ integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=
+
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+
+ip@^1.1.0, ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
+ipaddr.js@1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
+ integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
+
+ipaddr.js@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+is-absolute-url@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+ integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
+
+is-absolute-url@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
+ integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arguments@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
+ integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4, is-callable@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+ integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-function@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
+ integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-path-cwd@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+ integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+ dependencies:
+ is-path-inside "^2.1.0"
+
+is-path-inside@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+ integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+ dependencies:
+ path-is-inside "^1.0.2"
+
+is-plain-obj@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-regex@^1.0.4, is-regex@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+ integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
+ dependencies:
+ has "^1.0.3"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-svg@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
+ integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=
+ dependencies:
+ html-comment-regex "^1.1.0"
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+jimp@^0.2.21:
+ version "0.2.28"
+ resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.2.28.tgz#dd529a937190f42957a7937d1acc3a7762996ea2"
+ integrity sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=
+ dependencies:
+ bignumber.js "^2.1.0"
+ bmp-js "0.0.3"
+ es6-promise "^3.0.2"
+ exif-parser "^0.1.9"
+ file-type "^3.1.0"
+ jpeg-js "^0.2.0"
+ load-bmfont "^1.2.3"
+ mime "^1.3.4"
+ mkdirp "0.5.1"
+ pixelmatch "^4.0.0"
+ pngjs "^3.0.0"
+ read-chunk "^1.0.1"
+ request "^2.65.0"
+ stream-to-buffer "^0.1.0"
+ tinycolor2 "^1.1.2"
+ url-regex "^3.0.0"
+
+jimp@^0.9.3:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.9.3.tgz#85e8e80eea65a7e6de806c6bb622ec6a7244e6f3"
+ integrity sha512-dIxvT1OMRkd3+B18XUhJ5WZ2Dw7Hp8mvjaTqfi945zZ7fga6LT22h3NLYDorHHAiy9z30KjfNnOgpBoxrdjDZg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ "@jimp/custom" "^0.9.3"
+ "@jimp/plugins" "^0.9.3"
+ "@jimp/types" "^0.9.3"
+ core-js "^3.4.1"
+ regenerator-runtime "^0.13.3"
+
+jpeg-js@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.1.2.tgz#135b992c0575c985cfa0f494a3227ed238583ece"
+ integrity sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4=
+
+jpeg-js@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.2.0.tgz#53e448ec9d263e683266467e9442d2c5a2ef5482"
+ integrity sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=
+
+jpeg-js@^0.3.4:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.6.tgz#c40382aac9506e7d1f2d856eb02f6c7b2a98b37c"
+ integrity sha512-MUj2XlMB8kpe+8DJUGH/3UJm4XpI8XEgZQ+CiHDeyrGoKPdW/8FJv6ku+3UiYm5Fz3CWaL+iXmD8Q4Ap6aC1Jw==
+
+js-base64@^2.1.9:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
+ integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@~3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+ integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^2.6.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json3@^3.3.2:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
+ integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
+ integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
+ dependencies:
+ minimist "^1.2.0"
+
+jsontoxml@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/jsontoxml/-/jsontoxml-1.0.1.tgz#07fff7f6bfbfa1097d779aec7f041b5046075e70"
+ integrity sha512-dtKGq0K8EWQBRqcAaePSgKR4Hyjfsz/LkurHSV3Cxk4H+h2fWDeaN2jzABz+ZmOJylgXS7FGeWmbZ6jgYUMdJQ==
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+keycode@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
+ integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=
+
+killable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+ integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+ dependencies:
+ invert-kv "^2.0.0"
+
+load-bmfont@^1.2.3, load-bmfont@^1.3.1, load-bmfont@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
+ integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==
+ dependencies:
+ buffer-equal "0.0.1"
+ mime "^1.3.4"
+ parse-bmfont-ascii "^1.0.3"
+ parse-bmfont-binary "^1.0.5"
+ parse-bmfont-xml "^1.1.4"
+ phin "^2.9.1"
+ xhr "^2.0.1"
+ xtend "^4.0.0"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+ integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^2.0.0"
+ json5 "^1.0.1"
+
+loader-utils@^0.2.16:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash._reinterpolate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+
+lodash.defaultsdeep@^4.6.1:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
+ integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.template@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+
+lodash.union@4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
+ integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.3, lodash@^4.17.4:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+log-symbols@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+ integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+ dependencies:
+ chalk "^2.0.1"
+
+loglevel@^1.6.6:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312"
+ integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+ integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+make-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801"
+ integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==
+ dependencies:
+ semver "^6.0.0"
+
+mamacro@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+ integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+
+map-age-cleaner@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+math-expression-evaluator@^1.2.14:
+ version "1.2.17"
+ resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
+ integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw=
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mdn-data@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+ integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+mem@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^2.0.0"
+ p-is-promise "^2.0.0"
+
+memory-fs@^0.4.0, memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.43.0, "mime-db@>= 1.43.0 < 2":
+ version "1.43.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
+ integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
+
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.26"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
+ integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
+ dependencies:
+ mime-db "1.43.0"
+
+mime@1.6.0, mime@^1.3.4:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.0.3, mime@^2.3.1, mime@^2.4.4:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
+ integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
+
+mimic-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46"
+ integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==
+
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
+ dependencies:
+ dom-walk "^0.1.0"
+
+mini-create-react-context@^0.3.0:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189"
+ integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==
+ dependencies:
+ "@babel/runtime" "^7.4.0"
+ gud "^1.0.0"
+ tiny-warning "^1.0.2"
+
+mini-css-extract-plugin@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
+ integrity sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+ webpack-sources "^1.1.0"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minipass@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5"
+ integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==
+ dependencies:
+ yallist "^4.0.0"
+
+minizlib@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3"
+ integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+mobx-react-devtools@^6.0.3:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/mobx-react-devtools/-/mobx-react-devtools-6.1.1.tgz#a462b944085cf11ff96fc937d12bf31dab4c8984"
+ integrity sha512-nc5IXLdEUFLn3wZal65KF3/JFEFd+mbH4KTz/IG5BOPyw7jo8z29w/8qm7+wiCyqVfUIgJ1gL4+HVKmcXIOgqA==
+
+mobx-react-router@^4.0.5:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/mobx-react-router/-/mobx-react-router-4.1.0.tgz#de014848207d8aa32f6a4e67ed861bd2cb6516e5"
+ integrity sha512-2knsbDqVorWLngZWbdO8tr7xcZXaLpVFsFlCaGaoyZ+EP9erVGRxnlWGqKyFObs3EH1JPLyTDOJ2LPTxb/lB6Q==
+
+mobx-react@^5.4.3:
+ version "5.4.4"
+ resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-5.4.4.tgz#b3de9c6eabcd0ed8a40036888cb0221ab9568b80"
+ integrity sha512-2mTzpyEjVB/RGk2i6KbcmP4HWcAUFox5ZRCrGvSyz49w20I4C4qql63grPpYrS9E9GKwgydBHQlA4y665LuRCQ==
+ dependencies:
+ hoist-non-react-statics "^3.0.0"
+ react-lifecycles-compat "^3.0.2"
+
+mobx@^5.15.0:
+ version "5.15.2"
+ resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.15.2.tgz#010a6abf49add64a3372966d17a01416e7e40655"
+ integrity sha512-eVmHGuSYd0ZU6x8gYMdgLEnCC9kfBJaf7/qJt+/yIxczVVUiVzHvTBjZH3xEa5FD5VJJSh1/Ba4SThE4ErEGjw==
+
+moment@^2.10.2:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+ integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+multicast-dns-service-types@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+ integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
+
+multicast-dns@^6.0.1:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+ integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
+ dependencies:
+ dns-packet "^1.3.1"
+ thunky "^1.0.2"
+
+nan@^2.12.1, nan@^2.14.0:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+napi-build-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508"
+ integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0, neo-async@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+no-case@^2.2.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+ integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
+ dependencies:
+ lower-case "^1.1.1"
+
+node-abi@^2.7.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.13.0.tgz#e2f2ec444d0aca3ea1b3874b6de41d1665828f63"
+ integrity sha512-9HrZGFVTR5SOu3PZAnAY2hLO36aW1wmA+FDsVkr85BTST32TLCA1H/AEcatVRAsWLyXS3bqUDYCAjq5/QGuSTA==
+ dependencies:
+ semver "^5.4.1"
+
+node-forge@0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
+ integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-releases@^1.1.44:
+ version "1.1.45"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.45.tgz#4cf7e9175d71b1317f15ffd68ce63bce1d53e9f2"
+ integrity sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==
+ dependencies:
+ semver "^6.3.0"
+
+noop-logger@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
+ integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+
+normalize-url@^1.4.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.1, npmlog@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@^1.0.2, nth-check@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
+object-is@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4"
+ integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
+ integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
+ integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+obuf@^1.0.0, obuf@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+ integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+omggif@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
+ integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+opn@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+ integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
+ dependencies:
+ is-wsl "^1.1.0"
+
+original@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
+ integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
+ dependencies:
+ url-parse "^1.4.3"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-locale@^3.0.0, os-locale@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
+ integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
+ dependencies:
+ execa "^1.0.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+ integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e"
+ integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-retry@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
+ integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==
+ dependencies:
+ retry "^0.12.0"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@^1.0.5, pako@~1.0.5:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
+ integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+param-case@2.1.x:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+ integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
+ dependencies:
+ no-case "^2.2.0"
+
+parse-asn1@^5.0.0:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+ integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-author@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f"
+ integrity sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=
+ dependencies:
+ author-regex "^1.0.0"
+
+parse-bmfont-ascii@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
+ integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=
+
+parse-bmfont-binary@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
+ integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=
+
+parse-bmfont-xml@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389"
+ integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==
+ dependencies:
+ xml-parse-from-string "^1.0.0"
+ xml2js "^0.4.5"
+
+parse-headers@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515"
+ integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parse-png@^1.0.0, parse-png@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-1.1.2.tgz#f5c2ad7c7993490986020a284c19aee459711ff2"
+ integrity sha1-9cKtfHmTSQmGAgooTBmu5FlxH/I=
+ dependencies:
+ pngjs "^3.2.0"
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-to-regexp@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
+ integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
+ dependencies:
+ isarray "0.0.1"
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+phin@^2.9.1:
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
+ integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
+
+pify@^2.0.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pixelmatch@^4.0.0, pixelmatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
+ integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
+ dependencies:
+ pngjs "^3.0.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pkg-dir@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pngjs@^3.0.0, pngjs@^3.2.0, pngjs@^3.3.3:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
+ integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
+
+popper.js@^1.15.0, popper.js@^1.16.0:
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3"
+ integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==
+
+portfinder@^1.0.25:
+ version "1.0.25"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
+ integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==
+ dependencies:
+ async "^2.6.2"
+ debug "^3.1.1"
+ mkdirp "^0.5.1"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-attribute-case-insensitive@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz#b2a721a0d279c2f9103a36331c88981526428cc7"
+ integrity sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-selector-parser "^5.0.0"
+
+postcss-browser-reporter@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/postcss-browser-reporter/-/postcss-browser-reporter-0.5.0.tgz#ae069dd086d57388d196e1dac39cb8d7626feb48"
+ integrity sha1-rgad0IbVc4jRluHaw5y412Jv60g=
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-calc@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
+ integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14=
+ dependencies:
+ postcss "^5.0.2"
+ postcss-message-helpers "^2.0.0"
+ reduce-css-calc "^1.2.6"
+
+postcss-color-functional-notation@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0"
+ integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-color-gray@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547"
+ integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==
+ dependencies:
+ "@csstools/convert-colors" "^1.4.0"
+ postcss "^7.0.5"
+ postcss-values-parser "^2.0.0"
+
+postcss-color-hex-alpha@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388"
+ integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==
+ dependencies:
+ postcss "^7.0.14"
+ postcss-values-parser "^2.0.1"
+
+postcss-color-mod-function@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d"
+ integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==
+ dependencies:
+ "@csstools/convert-colors" "^1.4.0"
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-color-rebeccapurple@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77"
+ integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-colormin@^2.1.8:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
+ integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=
+ dependencies:
+ colormin "^1.0.5"
+ postcss "^5.0.13"
+ postcss-value-parser "^3.2.3"
+
+postcss-convert-values@^2.3.4:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
+ integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=
+ dependencies:
+ postcss "^5.0.11"
+ postcss-value-parser "^3.1.2"
+
+postcss-custom-media@^7.0.8:
+ version "7.0.8"
+ resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c"
+ integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==
+ dependencies:
+ postcss "^7.0.14"
+
+postcss-custom-properties@^8.0.11:
+ version "8.0.11"
+ resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97"
+ integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==
+ dependencies:
+ postcss "^7.0.17"
+ postcss-values-parser "^2.0.1"
+
+postcss-custom-selectors@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba"
+ integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-selector-parser "^5.0.0-rc.3"
+
+postcss-dir-pseudo-class@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2"
+ integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-selector-parser "^5.0.0-rc.3"
+
+postcss-discard-comments@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
+ integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=
+ dependencies:
+ postcss "^5.0.14"
+
+postcss-discard-duplicates@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
+ integrity sha1-uavye4isGIFYpesSq8riAmO5GTI=
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-discard-empty@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
+ integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=
+ dependencies:
+ postcss "^5.0.14"
+
+postcss-discard-overridden@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
+ integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=
+ dependencies:
+ postcss "^5.0.16"
+
+postcss-discard-unused@^2.2.1:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
+ integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=
+ dependencies:
+ postcss "^5.0.14"
+ uniqs "^2.0.0"
+
+postcss-double-position-gradients@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e"
+ integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==
+ dependencies:
+ postcss "^7.0.5"
+ postcss-values-parser "^2.0.0"
+
+postcss-env-function@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7"
+ integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-filter-plugins@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec"
+ integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-focus-visible@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e"
+ integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-focus-within@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680"
+ integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-font-variant@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc"
+ integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-gap-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715"
+ integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-image-set-function@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288"
+ integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-import@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153"
+ integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==
+ dependencies:
+ postcss "^7.0.1"
+ postcss-value-parser "^3.2.3"
+ read-cache "^1.0.0"
+ resolve "^1.1.7"
+
+postcss-initial@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d"
+ integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==
+ dependencies:
+ lodash.template "^4.5.0"
+ postcss "^7.0.2"
+
+postcss-lab-function@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e"
+ integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==
+ dependencies:
+ "@csstools/convert-colors" "^1.4.0"
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-load-config@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003"
+ integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==
+ dependencies:
+ cosmiconfig "^5.0.0"
+ import-cwd "^2.0.0"
+
+postcss-loader@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d"
+ integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==
+ dependencies:
+ loader-utils "^1.1.0"
+ postcss "^7.0.0"
+ postcss-load-config "^2.0.0"
+ schema-utils "^1.0.0"
+
+postcss-logical@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5"
+ integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-media-minmax@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5"
+ integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-merge-idents@^2.1.5:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
+ integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.10"
+ postcss-value-parser "^3.1.1"
+
+postcss-merge-longhand@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
+ integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-merge-rules@^2.0.3:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
+ integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE=
+ dependencies:
+ browserslist "^1.5.2"
+ caniuse-api "^1.5.2"
+ postcss "^5.0.4"
+ postcss-selector-parser "^2.2.2"
+ vendors "^1.0.0"
+
+postcss-message-helpers@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
+ integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=
+
+postcss-minify-font-values@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
+ integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k=
+ dependencies:
+ object-assign "^4.0.1"
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.2"
+
+postcss-minify-gradients@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
+ integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=
+ dependencies:
+ postcss "^5.0.12"
+ postcss-value-parser "^3.3.0"
+
+postcss-minify-params@^1.0.4:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
+ integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=
+ dependencies:
+ alphanum-sort "^1.0.1"
+ postcss "^5.0.2"
+ postcss-value-parser "^3.0.2"
+ uniqs "^2.0.0"
+
+postcss-minify-selectors@^2.0.4:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
+ integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8=
+ dependencies:
+ alphanum-sort "^1.0.2"
+ has "^1.0.1"
+ postcss "^5.0.14"
+ postcss-selector-parser "^2.0.0"
+
+postcss-modules-extract-imports@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+ integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
+ dependencies:
+ postcss "^7.0.5"
+
+postcss-modules-local-by-default@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63"
+ integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+ postcss-value-parser "^3.3.1"
+
+postcss-modules-scope@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba"
+ integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+
+postcss-modules-values@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64"
+ integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^7.0.6"
+
+postcss-nesting@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052"
+ integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-normalize-charset@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
+ integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E=
+ dependencies:
+ postcss "^5.0.5"
+
+postcss-normalize-url@^3.0.7:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
+ integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI=
+ dependencies:
+ is-absolute-url "^2.0.0"
+ normalize-url "^1.4.0"
+ postcss "^5.0.14"
+ postcss-value-parser "^3.2.3"
+
+postcss-ordered-values@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
+ integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=
+ dependencies:
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.1"
+
+postcss-overflow-shorthand@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30"
+ integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-page-break@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf"
+ integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-place@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62"
+ integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-values-parser "^2.0.0"
+
+postcss-preset-env@^6.5.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5"
+ integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==
+ dependencies:
+ autoprefixer "^9.6.1"
+ browserslist "^4.6.4"
+ caniuse-lite "^1.0.30000981"
+ css-blank-pseudo "^0.1.4"
+ css-has-pseudo "^0.10.0"
+ css-prefers-color-scheme "^3.1.1"
+ cssdb "^4.4.0"
+ postcss "^7.0.17"
+ postcss-attribute-case-insensitive "^4.0.1"
+ postcss-color-functional-notation "^2.0.1"
+ postcss-color-gray "^5.0.0"
+ postcss-color-hex-alpha "^5.0.3"
+ postcss-color-mod-function "^3.0.3"
+ postcss-color-rebeccapurple "^4.0.1"
+ postcss-custom-media "^7.0.8"
+ postcss-custom-properties "^8.0.11"
+ postcss-custom-selectors "^5.1.2"
+ postcss-dir-pseudo-class "^5.0.0"
+ postcss-double-position-gradients "^1.0.0"
+ postcss-env-function "^2.0.2"
+ postcss-focus-visible "^4.0.0"
+ postcss-focus-within "^3.0.0"
+ postcss-font-variant "^4.0.0"
+ postcss-gap-properties "^2.0.0"
+ postcss-image-set-function "^3.0.1"
+ postcss-initial "^3.0.0"
+ postcss-lab-function "^2.0.1"
+ postcss-logical "^3.0.0"
+ postcss-media-minmax "^4.0.0"
+ postcss-nesting "^7.0.0"
+ postcss-overflow-shorthand "^2.0.0"
+ postcss-page-break "^2.0.0"
+ postcss-place "^4.0.1"
+ postcss-pseudo-class-any-link "^6.0.0"
+ postcss-replace-overflow-wrap "^3.0.0"
+ postcss-selector-matches "^4.0.0"
+ postcss-selector-not "^4.0.0"
+
+postcss-pseudo-class-any-link@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1"
+ integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==
+ dependencies:
+ postcss "^7.0.2"
+ postcss-selector-parser "^5.0.0-rc.3"
+
+postcss-reduce-idents@^2.2.2:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
+ integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=
+ dependencies:
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.2"
+
+postcss-reduce-initial@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
+ integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-reduce-transforms@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
+ integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.8"
+ postcss-value-parser "^3.0.1"
+
+postcss-replace-overflow-wrap@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c"
+ integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==
+ dependencies:
+ postcss "^7.0.2"
+
+postcss-reporter@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f"
+ integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==
+ dependencies:
+ chalk "^2.4.1"
+ lodash "^4.17.11"
+ log-symbols "^2.2.0"
+ postcss "^7.0.7"
+
+postcss-selector-matches@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff"
+ integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==
+ dependencies:
+ balanced-match "^1.0.0"
+ postcss "^7.0.2"
+
+postcss-selector-not@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0"
+ integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==
+ dependencies:
+ balanced-match "^1.0.0"
+ postcss "^7.0.2"
+
+postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+ integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=
+ dependencies:
+ flatten "^1.0.2"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
+ integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
+ dependencies:
+ cssesc "^2.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-selector-parser@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
+ integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
+ dependencies:
+ cssesc "^3.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-svgo@^2.1.1:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
+ integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=
+ dependencies:
+ is-svg "^2.0.0"
+ postcss "^5.0.14"
+ postcss-value-parser "^3.2.3"
+ svgo "^0.7.0"
+
+postcss-unique-selectors@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
+ integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=
+ dependencies:
+ alphanum-sort "^1.0.1"
+ postcss "^5.0.4"
+ uniqs "^2.0.0"
+
+postcss-url@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-8.0.0.tgz#7b10059bd12929cdbb1971c60f61a0e5af86b4ca"
+ integrity sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw==
+ dependencies:
+ mime "^2.3.1"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.0"
+ postcss "^7.0.2"
+ xxhashjs "^0.2.1"
+
+postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9"
+ integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==
+
+postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f"
+ integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==
+ dependencies:
+ flatten "^1.0.2"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-zindex@^2.0.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
+ integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.4"
+ uniqs "^2.0.0"
+
+postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16:
+ version "5.2.18"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
+ integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
+ dependencies:
+ chalk "^1.1.3"
+ js-base64 "^2.1.9"
+ source-map "^0.5.6"
+ supports-color "^3.2.3"
+
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.5, postcss@^7.0.6, postcss@^7.0.7:
+ version "7.0.26"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587"
+ integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+posthtml-parser@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.4.2.tgz#a132bbdf0cd4bc199d34f322f5c1599385d7c6c1"
+ integrity sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==
+ dependencies:
+ htmlparser2 "^3.9.2"
+
+posthtml-render@^1.1.4, posthtml-render@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-1.1.5.tgz#387934e85438a3de77085fbc7d264efb00bd0e0f"
+ integrity sha512-yvt54j0zCBHQVEFAuR+yHld8CZrCa/E1Z/OcFNCV1IEWTLVxT8O7nYnM4IIw1CD4r8kaRd3lc42+0lgCKgm87w==
+
+posthtml@^0.11.2, posthtml@^0.11.3:
+ version "0.11.6"
+ resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.11.6.tgz#e349d51af7929d0683b9d8c3abd8166beecc90a8"
+ integrity sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==
+ dependencies:
+ posthtml-parser "^0.4.1"
+ posthtml-render "^1.1.5"
+
+prebuild-install@^5.3.3:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e"
+ integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==
+ dependencies:
+ detect-libc "^1.0.3"
+ expand-template "^2.0.3"
+ github-from-package "0.0.0"
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ napi-build-utils "^1.0.1"
+ node-abi "^2.7.0"
+ noop-logger "^0.1.1"
+ npmlog "^4.0.1"
+ pump "^3.0.0"
+ rc "^1.2.7"
+ simple-get "^3.0.3"
+ tar-fs "^2.0.0"
+ tunnel-agent "^0.6.0"
+ which-pm-runs "^1.0.0"
+
+prepend-http@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+prettier@^1.16.0:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
+ integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
+
+pretty-error@^2.0.2:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+ integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
+ dependencies:
+ renderkid "^2.0.1"
+ utila "~0.4"
+
+prettysize@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/prettysize/-/prettysize-2.0.0.tgz#902c02480d865d9cc0813011c9feb4fa02ce6996"
+ integrity sha512-VVtxR7sOh0VsG8o06Ttq5TrI1aiZKmC+ClSn4eBPaNf4SHr5lzbYW+kYGX3HocBL/MfpVrRfFZ9V3vCbLaiplg==
+
+process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+ integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+prop-types-extra@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b"
+ integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==
+ dependencies:
+ react-is "^16.3.2"
+ warning "^4.0.0"
+
+prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+proxy-addr@~2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
+ integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.9.0"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+psl@^1.1.24:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c"
+ integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+query-string@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0, querystring@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+querystringify@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
+ integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
+
+queue@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.1.tgz#abd5a5b0376912f070a25729e0b6a7d565683791"
+ integrity sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==
+ dependencies:
+ inherits "~2.0.3"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-apexcharts@^1.3.3:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/react-apexcharts/-/react-apexcharts-1.3.6.tgz#6c06e5dacfddd0e0373ec8f614503e655c049122"
+ integrity sha512-ahpMOnuw1ZdD3/fkk9MYRLpqYQ66cZz72+he1R00HaT1VcSjfYc9editQDhE2jGRDuxubmaxVcO3z4FtAk5N0w==
+ dependencies:
+ prop-types "^15.5.7"
+
+react-bootstrap@^1.0.0-beta.16:
+ version "1.0.0-beta.16"
+ resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.0.0-beta.16.tgz#42da0314aee6754494e478687b8e6953de1aaf62"
+ integrity sha512-wjb+3CwviDWAaz4O3gQpd2XMDNqbOiqOOzpLm5aLPcp1wTsQsVRhyM+rTPmO3hYU8auA2eNpTYLz08/fAcMqDA==
+ dependencies:
+ "@babel/runtime" "^7.4.2"
+ "@restart/context" "^2.1.4"
+ "@restart/hooks" "^0.3.11"
+ "@types/react" "^16.8.23"
+ classnames "^2.2.6"
+ dom-helpers "^5.1.2"
+ invariant "^2.2.4"
+ keycode "^2.2.0"
+ popper.js "^1.16.0"
+ prop-types "^15.7.2"
+ prop-types-extra "^1.1.0"
+ react-overlays "^2.1.0"
+ react-transition-group "^4.0.0"
+ uncontrollable "^7.0.0"
+ warning "^4.0.3"
+
+react-chartjs-2@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-2.8.0.tgz#1c24de91fb3755f8c4302675de7d66fdda339759"
+ integrity sha512-BPpC+qfnh37DkcXvxRwA1rdD9rX/0AQrwru4VZTLofCCuZBwRsc7PbfxjilvoB6YlHhorwZu40YDWEQkoz7xfQ==
+ dependencies:
+ lodash "^4.17.4"
+ prop-types "^15.5.8"
+
+react-dom@^16.7.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11"
+ integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.18.0"
+
+react-hot-loader@^4.6.3:
+ version "4.12.18"
+ resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.18.tgz#a9029e34af2690d76208f9a35189d73c2dfea6a7"
+ integrity sha512-qYD0Qi9lIbg9jLyfmodfqvAQqCBsoPKxAhca8Nxvy2/2pO5Q9r2kM28jN0bbbSnhwK8dJ7FjsfVtXKOxMW+bqw==
+ dependencies:
+ fast-levenshtein "^2.0.6"
+ global "^4.3.0"
+ hoist-non-react-statics "^3.3.0"
+ loader-utils "^1.1.0"
+ prop-types "^15.6.1"
+ react-lifecycles-compat "^3.0.4"
+ shallowequal "^1.1.0"
+ source-map "^0.7.3"
+
+react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
+ integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
+
+react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
+react-overlays@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-2.1.0.tgz#3671cadab085a519c90a51b9b1402a70281e31d4"
+ integrity sha512-tHPGTZosbQSo82yb9x4YCsmJJtspKvAPL5kXVnyoB2Z5UoAU3VetIuh2VblfVT408us5nLJd9uDtwI3xWDHS6w==
+ dependencies:
+ "@babel/runtime" "^7.4.5"
+ "@restart/hooks" "^0.3.12"
+ dom-helpers "^5.1.0"
+ popper.js "^1.15.0"
+ prop-types "^15.7.2"
+ uncontrollable "^7.0.0"
+ warning "^4.0.3"
+
+react-router-bootstrap@^0.25.0:
+ version "0.25.0"
+ resolved "https://registry.yarnpkg.com/react-router-bootstrap/-/react-router-bootstrap-0.25.0.tgz#5d1a99b5b8a2016c011fc46019d2397e563ce0df"
+ integrity sha512-/22eqxjn6Zv5fvY2rZHn57SKmjmJfK7xzJ6/G1OgxAjLtKVfWgV5sn41W2yiqzbtV5eE4/i4LeDLBGYTqx7jbA==
+ dependencies:
+ prop-types "^15.5.10"
+
+react-router-dom@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18"
+ integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ history "^4.9.0"
+ loose-envify "^1.3.1"
+ prop-types "^15.6.2"
+ react-router "5.1.2"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+
+react-router@5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418"
+ integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ history "^4.9.0"
+ hoist-non-react-statics "^3.1.0"
+ loose-envify "^1.3.1"
+ mini-create-react-context "^0.3.0"
+ path-to-regexp "^1.7.0"
+ prop-types "^15.6.2"
+ react-is "^16.6.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+
+react-router@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e"
+ integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==
+ dependencies:
+ history "^4.7.2"
+ hoist-non-react-statics "^2.5.0"
+ invariant "^2.2.4"
+ loose-envify "^1.3.1"
+ path-to-regexp "^1.7.0"
+ prop-types "^15.6.1"
+ warning "^4.0.1"
+
+react-transition-group@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683"
+ integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
+react@^16.7.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83"
+ integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+
+read-cache@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+ integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=
+ dependencies:
+ pify "^2.3.0"
+
+read-chunk@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194"
+ integrity sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+"readable-stream@2 || 3", readable-stream@^3.0.1, readable-stream@^3.0.6, readable-stream@^3.1.1:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.5.0.tgz#465d70e6d1087f6162d079cd0b5db7fbebfd1606"
+ integrity sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+recursive-readdir-sync@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/recursive-readdir-sync/-/recursive-readdir-sync-1.0.6.tgz#1dbf6d32f3c5bb8d3cde97a6c588d547a9e13d56"
+ integrity sha1-Hb9tMvPFu4083pemxYjVR6nhPVY=
+
+reduce-css-calc@^1.2.6:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
+ integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=
+ dependencies:
+ balanced-match "^0.4.2"
+ math-expression-evaluator "^1.2.14"
+ reduce-function-call "^1.0.1"
+
+reduce-function-call@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f"
+ integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==
+ dependencies:
+ balanced-match "^1.0.0"
+
+regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+ integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
+ integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+relateurl@0.2.x:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+ integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+renderkid@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149"
+ integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
+ dependencies:
+ css-select "^1.1.0"
+ dom-converter "^0.2"
+ htmlparser2 "^3.3.0"
+ strip-ansi "^3.0.0"
+ utila "^0.4.0"
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+replace-ext@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+ integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
+
+request@^2.65.0:
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+resize-img@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/resize-img/-/resize-img-1.1.2.tgz#fad650faf3ef2c53ea63112bc272d95e9d92550e"
+ integrity sha1-+tZQ+vPvLFPqYxErwnLZXp2SVQ4=
+ dependencies:
+ bmp-js "0.0.1"
+ file-type "^3.8.0"
+ get-stream "^2.0.0"
+ jimp "^0.2.21"
+ jpeg-js "^0.1.1"
+ parse-png "^1.1.1"
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-pathname@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
+ integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.1.7, resolve@^1.3.2:
+ version "1.14.2"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2"
+ integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==
+ dependencies:
+ path-parse "^1.0.6"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+
+rimraf@^2.5.4, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@>=0.6.0, sax@~1.2.1, sax@~1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+scheduler@^0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4"
+ integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+schema-utils@^0.4.3:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
+ integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.0.0:
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.4.tgz#a27efbf6e4e78689d91872ee3ccfa57d7bdd0f53"
+ integrity sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==
+ dependencies:
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+ integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
+
+selfsigned@^1.10.7:
+ version "1.10.7"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
+ integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==
+ dependencies:
+ node-forge "0.9.0"
+
+semver@^5.0.1, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.0.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+send@0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
+serialize-javascript@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
+ integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==
+
+serve-index@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
+ dependencies:
+ accepts "~1.3.4"
+ batch "0.6.1"
+ debug "2.6.9"
+ escape-html "~1.0.3"
+ http-errors "~1.6.2"
+ mime-types "~2.1.17"
+ parseurl "~1.3.2"
+
+serve-static@1.14.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.1"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallowequal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+ integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+sharp@^0.23.3:
+ version "0.23.4"
+ resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.23.4.tgz#ca36067cb6ff7067fa6c77b01651cb9a890f8eb3"
+ integrity sha512-fJMagt6cT0UDy9XCsgyLi0eiwWWhQRxbwGmqQT6sY8Av4s0SVsT/deg8fobBQCTDU5iXRgz0rAeXoE2LBZ8g+Q==
+ dependencies:
+ color "^3.1.2"
+ detect-libc "^1.0.3"
+ nan "^2.14.0"
+ npmlog "^4.1.2"
+ prebuild-install "^5.3.3"
+ semver "^6.3.0"
+ simple-get "^3.1.0"
+ tar "^5.0.5"
+ tunnel-agent "^0.6.0"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-concat@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
+ integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
+
+simple-get@^3.0.3, simple-get@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
+ integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
+ dependencies:
+ decompress-response "^4.2.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+ dependencies:
+ is-arrayish "^0.3.1"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+sockjs-client@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5"
+ integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==
+ dependencies:
+ debug "^3.2.5"
+ eventsource "^1.0.7"
+ faye-websocket "~0.11.1"
+ inherits "^2.0.3"
+ json3 "^3.3.2"
+ url-parse "^1.4.3"
+
+sockjs@0.3.19:
+ version "0.3.19"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
+ integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==
+ dependencies:
+ faye-websocket "^0.10.0"
+ uuid "^3.0.1"
+
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@~0.5.10, source-map-support@~0.5.12:
+ version "0.5.16"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
+ integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+spdy-transport@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+ integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+ dependencies:
+ debug "^4.1.0"
+ detect-node "^2.0.4"
+ hpack.js "^2.1.6"
+ obuf "^1.1.2"
+ readable-stream "^3.0.6"
+ wbuf "^1.7.3"
+
+spdy@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2"
+ integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==
+ dependencies:
+ debug "^4.1.0"
+ handle-thing "^2.0.0"
+ http-deceiver "^1.2.7"
+ select-hose "^2.0.0"
+ spdy-transport "^3.0.0"
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+stable@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+ integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+stream-to-buffer@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz#26799d903ab2025c9bd550ac47171b00f8dd80a9"
+ integrity sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=
+ dependencies:
+ stream-to "~0.2.0"
+
+stream-to@~0.2.0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d"
+ integrity sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=
+
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+ integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string.prototype.trimleft@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74"
+ integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
+string.prototype.trimright@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9"
+ integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+style-loader@^0.23.1:
+ version "0.23.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+ integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+
+supports-color@6.1.0, supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+svg.draggable.js@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz#c514a2f1405efb6f0263e7958f5b68fce50603ba"
+ integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==
+ dependencies:
+ svg.js "^2.0.1"
+
+svg.easing.js@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/svg.easing.js/-/svg.easing.js-2.0.0.tgz#8aa9946b0a8e27857a5c40a10eba4091e5691f12"
+ integrity sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI=
+ dependencies:
+ svg.js ">=2.3.x"
+
+svg.filter.js@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/svg.filter.js/-/svg.filter.js-2.0.2.tgz#91008e151389dd9230779fcbe6e2c9a362d1c203"
+ integrity sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM=
+ dependencies:
+ svg.js "^2.2.5"
+
+svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.7.1.tgz#eb977ed4737001eab859949b4a398ee1bb79948d"
+ integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==
+
+svg.pathmorphing.js@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz#c25718a1cc7c36e852ecabc380e758ac09bb2b65"
+ integrity sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==
+ dependencies:
+ svg.js "^2.4.0"
+
+svg.resize.js@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/svg.resize.js/-/svg.resize.js-1.4.3.tgz#885abd248e0cd205b36b973c4b578b9a36f23332"
+ integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==
+ dependencies:
+ svg.js "^2.6.5"
+ svg.select.js "^2.1.2"
+
+svg.select.js@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-2.1.2.tgz#e41ce13b1acff43a7441f9f8be87a2319c87be73"
+ integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==
+ dependencies:
+ svg.js "^2.2.5"
+
+svgo@^0.7.0:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+ integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=
+ dependencies:
+ coa "~1.0.1"
+ colors "~1.1.2"
+ csso "~2.3.1"
+ js-yaml "~3.7.0"
+ mkdirp "~0.5.1"
+ sax "~1.2.1"
+ whet.extend "~0.9.9"
+
+svgo@^1.0.5:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+ integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+ dependencies:
+ chalk "^2.4.1"
+ coa "^2.0.2"
+ css-select "^2.0.0"
+ css-select-base-adapter "^0.1.1"
+ css-tree "1.0.0-alpha.37"
+ csso "^4.0.2"
+ js-yaml "^3.13.1"
+ mkdirp "~0.5.1"
+ object.values "^1.1.0"
+ sax "~1.2.4"
+ stable "^0.1.8"
+ unquote "~1.1.1"
+ util.promisify "~1.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tar-fs@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad"
+ integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp "^0.5.1"
+ pump "^3.0.0"
+ tar-stream "^2.0.0"
+
+tar-stream@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3"
+ integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
+ dependencies:
+ bl "^3.0.0"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-5.0.5.tgz#03fcdb7105bc8ea3ce6c86642b9c942495b04f93"
+ integrity sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==
+ dependencies:
+ chownr "^1.1.3"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.0"
+ mkdirp "^0.5.0"
+ yallist "^4.0.0"
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c"
+ integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^2.1.2"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^3.8.1:
+ version "3.17.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2"
+ integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==
+ dependencies:
+ commander "^2.19.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.10"
+
+terser@^4.1.2:
+ version "4.6.3"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87"
+ integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+through2@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through2@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a"
+ integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==
+ dependencies:
+ readable-stream "2 || 3"
+
+thunky@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+ integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+timm@^1.6.1:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.2.tgz#dfd8c6719f7ba1fcfc6295a32670a1c6d166c0bd"
+ integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw==
+
+tiny-invariant@^1.0.2:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73"
+ integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==
+
+tiny-warning@^1.0.0, tiny-warning@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tinycolor2@^1.1.2, tinycolor2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
+ integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-ico@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/to-ico/-/to-ico-1.1.5.tgz#1d32da5f2c90922edee6b686d610c54527b5a8d5"
+ integrity sha512-5kIh7m7bkIlqIESEZkL8gAMMzucXKfPe3hX2FoDY5HEAfD9OJU+Qh9b6Enp74w0qRcxVT5ejss66PHKqc3AVkg==
+ dependencies:
+ arrify "^1.0.1"
+ buffer-alloc "^1.1.0"
+ image-size "^0.5.0"
+ parse-png "^1.0.0"
+ resize-img "^1.1.0"
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+toposort@^1.0.0:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
+ integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
+
+tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+ts-loader@^5.3.3:
+ version "5.4.5"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-5.4.5.tgz#a0c1f034b017a9344cef0961bfd97cc192492b8b"
+ integrity sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==
+ dependencies:
+ chalk "^2.3.0"
+ enhanced-resolve "^4.0.0"
+ loader-utils "^1.0.2"
+ micromatch "^3.1.4"
+ semver "^5.0.1"
+
+tslib@^1.9.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+ integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+
+tsx-control-statements@2.17.1:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/tsx-control-statements/-/tsx-control-statements-2.17.1.tgz#1afc67e03c90d489537ed3a31ec0ad2116592e6b"
+ integrity sha512-KiacW90lksaaoRrh5A4P9CbnhU4Bxvb99IJ2QAsybe4kMv2lF9pbNCFRQI6IofLGMZIHQvw1jEei04fhiIcIxQ==
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-is@~1.6.17, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@^3.2.4:
+ version "3.7.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
+ integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==
+
+uglify-js@3.4.x:
+ version "3.4.10"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
+ integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==
+ dependencies:
+ commander "~2.19.0"
+ source-map "~0.6.1"
+
+uncontrollable@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.1.1.tgz#f67fed3ef93637126571809746323a9db815d556"
+ integrity sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q==
+ dependencies:
+ "@babel/runtime" "^7.6.3"
+ "@types/react" "^16.9.11"
+ invariant "^2.2.4"
+ react-lifecycles-compat "^3.0.4"
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+uniqs@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+ integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unquote@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+ integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+upper-case@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+ integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-loader@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
+ integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
+ dependencies:
+ loader-utils "^1.1.0"
+ mime "^2.0.3"
+ schema-utils "^1.0.0"
+
+url-parse@^1.4.3:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
+ integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
+url-regex@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724"
+ integrity sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=
+ dependencies:
+ ip-regex "^1.0.1"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+utif@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
+ integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==
+ dependencies:
+ pako "^1.0.5"
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util.promisify@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
+util.promisify@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+ integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.2"
+ has-symbols "^1.0.1"
+ object.getownpropertydescriptors "^2.1.0"
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+utila@^0.4.0, utila@~0.4:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+ integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^3.0.1, uuid@^3.3.2:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+v8-compile-cache@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
+ integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+
+value-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
+ integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+vendors@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0"
+ integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vinyl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86"
+ integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==
+ dependencies:
+ clone "^2.1.1"
+ clone-buffer "^1.0.0"
+ clone-stats "^1.0.0"
+ cloneable-readable "^1.0.0"
+ remove-trailing-separator "^1.0.1"
+ replace-ext "^1.0.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+warning@^4.0.0, warning@^4.0.1, warning@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
+watchpack@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+ dependencies:
+ chokidar "^2.0.2"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+ integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+webpack-cleanup-plugin@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/webpack-cleanup-plugin/-/webpack-cleanup-plugin-0.5.1.tgz#df2d706bd75364c06e65b051186316d674eb96af"
+ integrity sha1-3y1wa9dTZMBuZbBRGGMW1nTrlq8=
+ dependencies:
+ lodash.union "4.6.0"
+ minimatch "3.0.3"
+ recursive-readdir-sync "1.0.6"
+
+webpack-cli@^3.2.1:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13"
+ integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==
+ dependencies:
+ chalk "2.4.2"
+ cross-spawn "6.0.5"
+ enhanced-resolve "4.1.0"
+ findup-sync "3.0.0"
+ global-modules "2.0.0"
+ import-local "2.0.0"
+ interpret "1.2.0"
+ loader-utils "1.2.3"
+ supports-color "6.1.0"
+ v8-compile-cache "2.0.3"
+ yargs "13.2.4"
+
+webpack-dev-middleware@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3"
+ integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==
+ dependencies:
+ memory-fs "^0.4.1"
+ mime "^2.4.4"
+ mkdirp "^0.5.1"
+ range-parser "^1.2.1"
+ webpack-log "^2.0.0"
+
+webpack-dev-server@^3.1.14:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz#1ff3e5cccf8e0897aa3f5909c654e623f69b1c0e"
+ integrity sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA==
+ dependencies:
+ ansi-html "0.0.7"
+ bonjour "^3.5.0"
+ chokidar "^2.1.8"
+ compression "^1.7.4"
+ connect-history-api-fallback "^1.6.0"
+ debug "^4.1.1"
+ del "^4.1.1"
+ express "^4.17.1"
+ html-entities "^1.2.1"
+ http-proxy-middleware "0.19.1"
+ import-local "^2.0.0"
+ internal-ip "^4.3.0"
+ ip "^1.1.5"
+ is-absolute-url "^3.0.3"
+ killable "^1.0.1"
+ loglevel "^1.6.6"
+ opn "^5.5.0"
+ p-retry "^3.0.1"
+ portfinder "^1.0.25"
+ schema-utils "^1.0.0"
+ selfsigned "^1.10.7"
+ semver "^6.3.0"
+ serve-index "^1.9.1"
+ sockjs "0.3.19"
+ sockjs-client "1.4.0"
+ spdy "^4.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^6.1.0"
+ url "^0.11.0"
+ webpack-dev-middleware "^3.7.2"
+ webpack-log "^2.0.0"
+ ws "^6.2.1"
+ yargs "12.0.5"
+
+webpack-hot-middleware@^2.24.3:
+ version "2.25.0"
+ resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706"
+ integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==
+ dependencies:
+ ansi-html "0.0.7"
+ html-entities "^1.2.0"
+ querystring "^0.2.0"
+ strip-ansi "^3.0.0"
+
+webpack-log@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+ integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+ dependencies:
+ ansi-colors "^3.0.0"
+ uuid "^3.3.2"
+
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^4.29.0:
+ version "4.41.5"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c"
+ integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/wasm-edit" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ acorn "^6.2.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.1"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.6.0"
+ webpack-sources "^1.4.1"
+
+websocket-driver@>=0.5.1:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"
+ integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==
+ dependencies:
+ http-parser-js ">=0.4.0 <0.4.11"
+ safe-buffer ">=5.1.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+ integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
+
+whet.extend@~0.9.9:
+ version "0.9.9"
+ resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+ integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which-pm-runs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
+ integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
+
+which@^1.2.14, which@^1.2.9, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+ws@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+ integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+xhr@^2.0.1:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd"
+ integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==
+ dependencies:
+ global "~4.3.0"
+ is-function "^1.0.1"
+ parse-headers "^2.0.0"
+ xtend "^4.0.0"
+
+xml-parse-from-string@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
+ integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
+
+xml2js@^0.4.22, xml2js@^0.4.5:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
+ integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~11.0.0"
+
+xmlbuilder@~11.0.0:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
+ integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+xxhashjs@^0.2.1:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8"
+ integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==
+ dependencies:
+ cuint "^0.2.2"
+
+"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^11.1.1:
+ version "11.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
+ integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^13.1.0:
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+ integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@12.0.5:
+ version "12.0.5"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
+ integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^1.0.1"
+ os-locale "^3.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1 || ^4.0.0"
+ yargs-parser "^11.1.1"
+
+yargs@13.2.4:
+ version "13.2.4"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
+ integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ os-locale "^3.1.0"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.0"
diff --git a/plugins/spa/livefeed.go b/plugins/spa/livefeed.go
new file mode 100644
index 0000000000..159cb4cb8d
--- /dev/null
+++ b/plugins/spa/livefeed.go
@@ -0,0 +1,46 @@
+package spa
+
+import (
+ "time"
+
+ "github.com/iotaledger/goshimmer/packages/model/value_transaction"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
+ tangle_plugin "github.com/iotaledger/goshimmer/plugins/tangle"
+ "github.com/iotaledger/hive.go/daemon"
+ "github.com/iotaledger/hive.go/events"
+ "github.com/iotaledger/hive.go/workerpool"
+)
+
+var liveFeedWorkerCount = 1
+var liveFeedWorkerQueueSize = 50
+var liveFeedWorkerPool *workerpool.WorkerPool
+
+func configureLiveFeed() {
+ liveFeedWorkerPool = workerpool.New(func(task workerpool.Task) {
+ t := task.Param(0).(*value_transaction.ValueTransaction)
+ sendToAllWSClient(&msg{MsgTypeTx, &tx{t.GetHash(), t.GetValue()}})
+ task.Return(nil)
+ }, workerpool.WorkerCount(liveFeedWorkerCount), workerpool.QueueSize(liveFeedWorkerQueueSize))
+}
+
+func runLiveFeed() {
+ newTxRateLimiter := time.NewTicker(time.Second / 10)
+ notifyNewTx := events.NewClosure(func(tx *value_transaction.ValueTransaction) {
+ select {
+ case <-newTxRateLimiter.C:
+ liveFeedWorkerPool.TrySubmit(tx)
+ default:
+ }
+ })
+
+ daemon.BackgroundWorker("SPA[TxUpdater]", func(shutdownSignal <-chan struct{}) {
+ tangle_plugin.Events.TransactionStored.Attach(notifyNewTx)
+ liveFeedWorkerPool.Start()
+ <-shutdownSignal
+ log.Info("Stopping SPA[TxUpdater] ...")
+ tangle_plugin.Events.TransactionStored.Detach(notifyNewTx)
+ newTxRateLimiter.Stop()
+ liveFeedWorkerPool.Stop()
+ log.Info("Stopping SPA[TxUpdater] ... done")
+ }, shutdown.ShutdownPrioritySPA)
+}
diff --git a/plugins/spa/packrd/packed-packr.go b/plugins/spa/packrd/packed-packr.go
new file mode 100644
index 0000000000..d28480666f
--- /dev/null
+++ b/plugins/spa/packrd/packed-packr.go
@@ -0,0 +1,51 @@
+// +build !skippackr
+// Code generated by github.com/gobuffalo/packr/v2. DO NOT EDIT.
+
+// You can use the "packr2 clean" command to clean up this,
+// and any other packr generated files.
+package packrd
+
+import (
+ "github.com/gobuffalo/packr/v2"
+ "github.com/gobuffalo/packr/v2/file/resolver"
+)
+
+var _ = func() error {
+ const gk = "7bc6a78ed0582ba4ebe2564b02e009af"
+ g := packr.New(gk, "")
+ hgr, err := resolver.NewHexGzip(map[string]string{
+ "1208caf0c70cc9be3359333673e4d3cc": "1f8b08000000000000ff9c92cd8ed3301485f7790ae32d9a387f6d52e464c348a091aa5187220676d73fad5de2d8b2ef84e6ed51950124568895e5738ebec5a7cbdf282f71099a1874e390f15f8f0635648410c29d4620d2404c1a7bfa82a7bb8ebe566871d4c307ffc958e77424f7908cf01015676bb5ce463b7d27518f3d4db88c3a19ad911213f5a9a70631a4778c39b84a35e5c27b4c1821dc3ed23bf63b604d5ee7259329fdc97267a75ca644899d509fa3c5a5a7c940dd3577e7f3e3f254d8e7f7627f98eb671b1cd4cdfefeadfac8cad3a1ed1a76d9caafcc3e1c0f9f1f8dfc12dbebee61f64fd763b5fff6a33c5222a34fc9477bb6534f61f2d3e2fc4ba243c6d9aa870baf9621e3cacec4aa9e46ef910e9c293b0f194f32da80e426b7a7a8afc82e30c39a5292a2ec29831058d9756dab6b09e54e6e3b68e46957e5977403ade3e19f51b39e948f795d082865d1c96a5bb5a250452bfe970821e4dba2559b8d105d07555bb775a5cacd5f38f66a82ade7f3330000ffff868f5b7f56020000",
+ "4c8c7d94bb22d4aa7f09717c1f791290": "1f8b08000000000000ffccbd7f5bdbb8f238faffbe0ac7779b2311252440e9aea99acbf2a3a54ba05b68d936f8f09858106f1399b59502c5f9bcf6fb6824d9b2e350bae77c3ff7bbdd8758d26834fa3d331a8dd06dc4c3f8b673cb2e6f82d197b769cc6f684d5c960d7ddcb999a563341caef9647835e32311c51c312208c70fee2c654e2a926824dc2dd6617737712252cad1dafa1a9e932a382a22f043019ec756107e0d12479064cba43b01c20f0913b3843ba213dcdc4cee119f4d262448ae6753c6458ae7396c24cbd0c0cc89782a023e62f195b39d24c17d96b9c3f8f22f36122aecbb94d26388e8dc24b188c5fd0deb88f8442411bfee8c82c904310b7b6c61972434286b3673940ad18fe24c2d9c5fe32874ba945256a44f8a7497cfa6972c71299538e32b8759153a82b41f2d7db6acbd7603616397c11fc51dca01801f647f7292d0a1bf75152788d3ee167fc93a13c6afc578abd5e23851834d2036e43ee1186f698a9202d94821d3090b548c83f4f896bf4be21b96887b4d0b111635570a812401287222ee083c427288369b50341543eee785cb24d7d4ce0598bcb254e49f9800e0d7603263c7571a4e87a8305f98585d3a56338324797d6e8589228d2eeeccc40859a44f2bc38e52d6b9b8b982922e6eaee8039bde887bafd123333e4b59781a7f613cf586be0e1ff09b9990c1f82b4bae26f1add75e23a37190a487ec4a1c7f6589d72512b1026cf448c4bf0693281cc45c8c3d986c3a663f4ea60180cc52961ca8c840b01072a5b1fcb90992948572c4bc0b1201744c591285119b2a5cc9d568ed97b535097bcbd89730b81f44e93410a3b1d7e8cd31815a15d5bf91d58fae505ef528fd288b55434b50d93c84d344f5bae854ca27a5f5a73c7be718938036a2f42838928d1976ae99388da60c61dc6c8a8e69b097dd66b3213ad0cef06537901d71a6ea035195ba415cdeca7626d5a8105369d566133544c7b45e9615dfcd26c75bd195245a2d9ccd260a68d06ccae543744abd6b22edd1a1e75fb399af39a273195dbf89670926aa75f4248bd2fd24fec678b35989400c63dd9cc156d12d34989b05258f2b3af3427682eab7313a0a8ef2e9a67ba47f85a64860c2b0277fab0d421b5d22e60985e5db9aff693c65fdba48cfee7c33f985ae1b12e328956347e8e678f5ea559724b4bb95bce45b49ab85a32b94c04ad16c323dbec6514ac430f14942846980465757a3d19bc306764f83ce3496bb935e932296c20a68dae16b69712481eccb1409d962db03c8a848c45986d8422cad01242abbc900203af24a47ca05e9e24a474e74e484424045aab1a453548016d10a467c9b6a00f16d4a75842e3dfd70ba9393fce17487e6910a20beba4a99c1af02b48856303786dc9b2b2ac780a1371e0513668886002da2c9bde9c22e2eb61913b9c55b2d9ca2808a6142ef87dcf701cf30f169908f403697bd714d1bbda29b2e61b8aa4e6798c8dfce454839bb852d11e951dbb908fbe5e5c393635bc1eb398064910b082418268d1ea5f4bad944d77280079dd98d1cedc7d02a7a904abaac3d61b06ce3beccb29c35c9a9ab8c9502cd171bcdcb6e7f10887167c422b9936759d783f0d5248e93d2d67e58cce21623b2ad358e6e8352d16c46e97ec423c19090fb21a75fa01b7981e0d63087124942020a054d238e0c6740cc9cc42452a9c1659aa7b68bd4987681b150d33680698b78b3297b5752334cfc2c6bf066f3103a1c37283d4432562ef171ab65488f5b5141df9dac20f44ad049673737094bd35d7693b05120d3cf828447fc3a6d36dd190fd955c459e8360c5b368a791a4f58b3a93f3ab741c2cb21e45ad89c5b85ce73dc96ddca9fac3582e64b8c738590c53beb8db141834e58a07c13f0702257feba58c53ecb4db35812131251c921d0ee56fc32e7accdf4895b2d2829a1ae4b5cc513166c680e3e8cfd02632ad7cda445dd733e745b71cbf51db7e0d9875d1f272d9ab65c596b3b7a98fa2d9738ee5642934e3a89460c75497b0dcfd924654e42edd2b622c53a26787e8758cb3de7db2655a25dd8102436b58c47b8f3571c71e4ba5866735b484ec9bd248913dc494530fa22f785466f5e913c6025b0240f2c994c59dd53b24b1fe6c5ca71a23aef87fb46e622bb43e66719ba43fa9b36bad6b8385e36f7f73584c5b89ba81f65dedf9599f72bf430270c2b0ebec23ac7c03ccbc9848081eea34432d30f7372055f04924d0040b0a7da4506fa8961bdbd904d98604e026c785e14c392f99745354c997991aa28a00e72d5890e7bb2b9f235115660b9ac323c7f746ed3468fd4f51085d9736a1af30bbb4ffbd67789e150b22c37b28f28aa231746aee59e820752ccc35fa581b463af02b2cb0ee35b96ec04294378eb2f59fdbf86bce5a6aefc10be2d3bbeb164c754c93185ecd8ff0b06d95fc30a4edf532c618166dbaa0a4980b8c5be4182be411cab3e9164d8b2540253e4a854af7d55af2339bcad1de9a0b43350d76d158bbf64d6453b31ab92428ed82bdaedf3bedb723dd7f5dcb68b55969bf816f5ba44ed2cc11dea9200e37cc823dc496797a948500fb7147defe92a3a1f0eff7d3ef457ce7d9ca1f373dc47c337637f3a45698afbd920ce0683befc97edc6d9ee2efce9cb7f591886fdb09f85713fbb1dc6d9addfcfce867176e6f7b33fe27ef609fecb8abfd9a74fd9f535babebeeee37ef6fa357afdfab5fc62d95e1664dbd978dccfdebce9675fbef4b3e9b49fa5693f3b79e8915fe7d95df667f6ed5b3ffbfcb99f75f0ea3539ab25fcf0f4243b3ccd0e0ffbf25f3679e8918db904ff26e7e68752677c2c4452d912014db616464c022286b5f598a5711ca5c3c447723164cd26fa207b34c044c0b718767dbf26d7010aea975422863db94cacf912210724bc0e03cc64c5feed062240b8132761c483c952cc0ccfad25eeb7924a81157c5a1f09fa1609c24ad831f926c7b5fc936535935c72f1947540d643efd5fa256897701a98012b5ef22dd16ae10fc360287cbf2fff521df02080122a7fb146b37a3e1c9ea7e727fe2aee279d84dd4c821143abff3e1f66e7fecfabd7c475b167259c9fabb89c5530640ac36945d4752d76494b392d7a8c02c912f5e55f2de848194c060db2683e97fb916c0029fa79e5e631c22c70b5562bbfb597afe7c5884bac4d4c742631bf963995280ccc279b4b32cf3a932015073c647792a37f45bbcde65947b054026d6146595efb339260528227bc4d7b65f6fe67ba7a1eae92d7f2477efc2d3f1ed6e7abe477f8da98af923fe8eab0d5f6fbe7e1c3e67c957c56b0fd55f2a7fad221c68aa08e1210f5d0231221370189336105d21e916803486ead92a8486aad9298d1d5cf990c4b9c5e1fc8bc8e485a8a477d4f25e1be4c9c4814ddf6affe4397ac3ddf9c0fff15b4bf9dcfbadded6efb7cd67dbebf7f3eebbee8cac0ee0b19d8ff1502fbbb3b32b0bb0f81fdee0bf9b7a7027bfbfe430fb065c3f3597713327437f7f7cf574d023a4f57fae5449384e5ef7c352233565a684266d6f71993ebc43112b82fac4dd3d28a4909a6cf3d31b7d480ac34694768c608c37dc055c8afa4900b3dc9d6bd67d77b7737e88aa162b4b8e7e7ae9c2af6e441e7439cc91f1f67e74334fcf7b92f97547ceecb58586a5159bb2d277d318cb38c67599265c11c636ceb1e99cdb115250edbe7abe7e7fffe79a5d5ef209c0dcffd87b92f67f0f9f9cf4d57f195e372fb4d5999311330991777f76613313a643e2613258425d4a29ce3072e971b29c7c945b6ac9395c2f2980de50eee538b91bad165030d76439866e85cdc52f927cb1ee644c8beec5cdc42dadc6e8e8b7c0c682eb0d91ca1b1ecc86673ac7a92f0ce454038b159d27bbb15bfca407f7d73d35bdf7c5ec07c2db5f4b30d2ad70bf6acd7ed366837cbd8b38d6e97d2eefc23723fb9a44bbac496a564a3320afbca3d0b1254a8065ed25f7ffdf5d7beebb698e7b6dc16680e3fa22e19ba9f3eb964cdaf60b2b728854ad2606792d936643657a6bb76c227973c5f92f2c9259ba4d1b5537790fa22eebd8bc9be09f5300919d43262faf3934b3e93d72620839c91df8bf02797248cfc6145e431538672da4c924fba90a0719566067e90fb3e5da3949a61d50f9466f6f436de8dae23f149360bc39e1a8306533d9efaac79aefa4c90e580cb71d8eb02700d1a5aa31c9614b590fcfb6af3977eefd76ed75b63eb5831e7d78c5c323a60c8dd9f4d269fa0ad1b5d5cccd0417989caf1f38af299f7d121d39a25c2719dd6478a82a0fdf1be18486c2d865fd8520e86752ec2a17bcd84dbca75717df7c3e98ee491714bf84a43656974f23969a16936b56a1c18fca2c214943c72aee9c18d9bcd1e74f534e6622c33aefd0ae110b8014d4efa08399ce499c92db383c0697c37bbbdbedcea7689ae90d6ece32c535fb9c6d6390a8eb6cc228ac433c4696f0db7387ec6f349dfa248b413bcda5b23b276495f2d3a6bbf7a6bbf78ebbd76f2ecc5b3b5f9355bd0464792fd38be5a5048ebf84511d1308b5be2a5e26acde198c0d115f4bc5cad2965867aa1896cf7e6e42372072e19ba83012c44ee207697ae45ba4d5b3db514b90399a9bc0cb247186cc89e9e8ce344e4e33147f40f30d94876900b912e71076a21d3c15fd4823470c967fd35b0163228b732fd73b6d2a2f73dbb66777ad1d0f9be9bd1ce032be040123770fdc5f5a6a736d376af801d28e845785bcee28653d145be930b94dc39e50ea8d5ee5b5a89d48762026f8a382e9d40c141168ce63b46577787f1aedfd702e1b92f45c2ec3cc52d494a7f957c62d47d1bf05990dc5fecb3cb043e0641321a5f6cdf24d1e46210dc5fbc9d7176f17636b9bfd89e5dcf527171c26e049b5eb2e4e2782462f97b147f5511bb6c041f6e27bd994402b9172e26a7aa145982442e511bc412af442b714a6c12934462e72f96d35d5651159388c45a0f22dbcdd6864457a8a134ec5663c271c0422c1dfa5a9b2f458f415d422a874d2545494dbdb5ad562bc1111da3e11a5b27898f97e419263e2d269e9e3911f09d3515a8a7a8826379f65c8dd487c12757e97ebbd7a01405f4da3abe5a2493c418f70350ca79f5392a34d919fe61613f5cce8f64f8e16a17bbc789cd61c390b27644b3fe3299b0c075c36abdfaeff3b0f5f3aa925105c6821e2281b7407b2db14d90a0ac6e3154535f60ab10d3a1f6f188da52e52669765f22301c9a3fb647ba506d1758eb9231c2315b3c16efa3939cdfa8e54b1add2a63a2f12b99e51da31346f6e4df6222ffc5107ec843acb2e0ea631dc32cce0b75e3d02781fc13e55a54d8277b6ba04ae1660e0a1f136348529d705cce1860ff2ac92625fa81141ba5d2a4745219034d65bea2fcab442d6846af18684831097408343e56d5d6360038d2c91124db2b18ec4bd4926cdd7f23b715e9138d4c763776891bb96645a9ee8374015b1910f69dfa52822795f21886a40643311e77582159cba55e4dc4b490c47a5d29d2bda2dd3e4a8b7354d6dae8764bf9487e089976ae9930cc2b30ab700290c7308c3d1b55194d6ae9d359c1b14557c8a2c528b81e39712af4905b5c8a279ae2a25cf9a7f3e174c7b671e3d8aa8790f5f870ba53aa8a9055b123993e29fb0ee6829c7cdfb0b4f0dbe55d97be6889b6618cdbe8454bb604e992046b9276837b84db023f7bd14adabd02cf11b3f5241257446292d25eebc50a12ed1e6ea1172dde4e64c66dc5f71407f2e94bdaedc7f49ea18832099b7ae92bd002f4654cab47629ab621027b324686317990aba2179130b83fbe924de2c596d0b4bfc84fd06d7b2d95eb634cad836f5873352a84db51bb87575fe056ae588c5ff6fa098d5b070c05d4e069f7009317bf3aa820efa384c6ed6a2c29b2b67ad8b3309184c6983cdc32f6c54b08d42db0ea7350e9a9bce74800df2d4588392c81d66a27ad00afbe2890bcaf4a92eadc559017b8338af9281088e567b102e3f947e4de4a99e3f656c91cb7b14b5c4922a82bdc33997676a6d2ce645a94c6672a79072940e2deaa904922ee99e2fb55f273f8ce139f2bb6fd36970264d1b914709647cb5221fa4632e1b7b2985b404d64522d272e8689390bea921e366a31a84928851a37945508837b55bb30fc1149479b81a583885764a6f09f21aa13bfc27f88ab8286291cae4e56d5ddd391ba2b54fc0e82f6206e5874a98a60a55e55717baa6321d0ebe59d6c876df89e565e8579afb2fc6b2fff92355e26bf598d5e15fcc2a7e4ab1519c32765b573c118949954a90ac393a44183ed7179b01356c441dd84cab251950e5d22bb60d9d8cfc73b4890678cba27331e06f71783187e4e672c95bf672ce4eaeb743c4be0633f89e4cf49206689ec395b02fca610492c1285cc2e33ca3c324309f603c05e0ce28bd3d9c519bb381d5fec27172741bd48f8f11f8984a516b584c2527c45fa3bab4f9b467c214549862fca8261cfc772ef40095e923397edec55e27bf2e122690b689e2668de3e8ae34982268ce84784bf521125a9f13b19172bf97d59b0dabad5f27e98d21f24ed9f51f58f5ae13fadc36344fd508eff638d0952b99ce0bf8134f916fefe5c96295fff339952af18439fa4f2cf44fe9995c5cb1765e9d24c6421d9b185090bc22009eaa6a04a8a2a334bc5c6c6788da4ea2bc064a2be224c6679ea2c4f9d9954a034ce85cc34ff9ae45fb38a08aa6a946aa132050974a2431308cd746866099ca55d6d41949b2d17061777525a83b1026cb6eb27803e26614e9e48d66338d2efe31844fc310cf1a372eedfaca29a1fc7b32445f8596f2dcb7a6b05e0ef7a587f04896bf9316359a3a4af09201bb5227f1af19960102c1fcbfe519d3f17060b4c4bc9f3bf917cfd9b37fac0d39578158f389609e3b14ef89b41e41719f9e5cb778e47357159b6b6a1b9d0f174ba7836abcdd8dcd6dfccb2eec1ad0354a9d51a2ed0a4e97f84c8c4a56c14f3b084fccda334da157b84c237dfa1f07b6896d1f73b436e00c792f0b9ed92460f9872e830e28e153bae42bd75c5dd062ef9439f146f179f6f72767b9c7f7dc9bfe450c86530d9fd7940767b91221bebcffc5bd69919fc56d29b22094e50deb84496e093751d2165c42f5f16195923fb4a3e764b0cd77dbab60107765d2fc9cf630297b8db757979e7224adf4d2de63b4adf0de05251310514470d88c6b205c77598a0684904019e5cdfa7a18dae39a9868658427c6edabeb665f0145269823111c38d52ac8c5b5e8e6cc9ef95b4015a871f2d96ac41ecf3526cb09c9837ffe54a5b78fff72b69c4a4cf8cfca9cc00646d5335d998a00f7200f13048bc873498b2dde0de7387a77118dc3b81f09dc353977076274cfc344e92f8b694247921c5ad3a43133f09529de5134b054b6c74324de5191e06a9f09d725649c5de24659e7be8ce49d9cece7b383c3df1dcb1379d7a69ea6cbbe4f05405e1db730783d5dddd5565df7108e1c1c0d9258e89a94439795648928410a70e604e2c6b41cfd517bc9c3010cc25da8ad3739f85ae52e2c1d9c2b18a86bdc85386756b6058370944f4959d4653e63d5ccdc42c619e1b71e759ea929b20159efb2c7582ebd825a9e706ce15bb75f47ae9923495a514e1a984502bac4ba65348d40bae4bc69e1b70472d9ae331a48d55df87321b682ec210e22577e09201605387d8838142062a7297dccb2465a8737f0f293290ba73a220bc4f8c58ea74ef94c15549ef218c6fbd2e09e37b6f736e6e4fa6de19231653e27d28822afb37464a7bb9b73a0c6efcf34e7fda3feff457a33911823ecc0917256333601f73a560bf62285e98d25db8c46dbbd8b38e950291db9c82c1bc12c4c550f8e6ca618352d66ccaffcd95702c92fb87847e669d8be0f232211cadadbfc0c8edacba2d8149245082e723308c65f821bf9921915a37c0857d7c57581222c4698a04ee83e5a8172b30dcffcc28f7fef12d1e251a3b6e8bb55c87c7c2b98a673cec38bb51e8dcc733e72a4eae997044ec4ce2207422d1773126a686d6cd72919bac28e50eb56cfc189c36888ecc4299be9d29c490f9f804b98a7045c8f157962451c85c0257ead50d447d7ea72090dae28e822923b28a57d13596e48dc601bf664ec01d7617a522e2d78ede0c0d16bb9c5a2ce9389e4d4227e6937be79239b39485b2fece286101200c1cc922abacce0963ce58881b6f755515f057da19c5d3d5eb5914b274f5ff59d597a2d25555705be55b0594d338614ec4afe28e0b02996c8bce8522243f69d5edd4b90912c685221c17f162584ef271521359c25adc42469cca115ec69d1fdcf2053459861623e9d0c764315ac9780f3c98328f1155bc27e6ea5aee5622f9141569cd00e683f8b187de21b8962ad132bfd9849fce559cec05a3312ae986e590ebc84208ebe82e943b6ba4444699cfe0d7d772208e940fcb613259276272366b2ecafa54a31d4c522b719834729ba6cf70a8de8810c3301104054bf0c2e4090c5ae755bb3afb5eaf11ee69772b2aec591580a028a072451b463e367ac5b68bb1b970c865af2a8056cfc7b8cf2d2850476c8957dd2d7d112e1028b08e44b4ac27f1198213591dde6c727333958a66f31605844b66e11515ed1ebe4c58f0654bb4dbf3a8d59ae70d312fddc59a08fb2e916cb95c01d76cb6d728852bf0f96575b88bc3873dff6537cbe4efab5eafdff3f870cd7fd993316bfeab5b86f8b0eb13998cfb6b1e1fae6bf075ffd5da8614c628a532d46c22b954f3e1869f65eaeb79feb5e9e3feba27d354e60dffd5f35ffb1b9e845131cf21e6b9276155cca6ffead75f7fed6f7aed1e01ba2f0ce1bbe6944dd640028b576bea66d11aae804a86276d36db3d658a88047d51070257f12da05f349081a1a2640b31138687acd84330735fad2f3ceb166b28caf73fd4d9e6d0d7562317a11a79652353756d363f9b0d3a3cbe45c5212ceb5ccc52f6e174a73f5c3cef25266aa04d25457efe2ae0ea96ca53cd5082d6a0728811d6b9b855d784c1b142305cf34bc19edf6c2eb9eaa22a4b6063578d03762d17b7b8f3fab5b9832c3a67c5e71e8e688fc47483703a938be7ebd7044ae9fa649fa13b8130e9910d0ce79e725907a033d2c304a14085f6480f63398a83572fe4d098d04617ebb5d95e5b24fbd309e35b3817a8c6de03073fa3a6d088c4784bd3747d9dd3342b13724b66a0c033ee114427ec4bba4427c472b006af36738acc70e9b03e40b0564490e83018d41d6641622fa0d13c91554a5e1d30c4819a7ecd68a78dae463ba9490e837b0980527a2491e4d60bba325499a18395909965342dceb5310c87e236bb351363597dd326c9b0eb63826c9057f70cc538cbc06f8d152fabb8647ecb8a134edf3014936e89264d70cfa7bc32d2f5f0cce3d53036cacdf5d2b0153e98ceea6f0a3acf44c6cad998ab424bc9a5dcfd3550c9f7bcae67f0c17a0801b924764d60c30e3cb7039bbef2cfa2a53ddae8129d9d7695b51645c55c7fc3bc1d866dfb8c141318d11ac0781730b6169e898050d173e2db1436de509b850cb4bac8ca6fa2709b69df0d05998ae640a950ccfa50f0eb9d8bdb4e08f86f3b6183d2c8f471c5d709dc57067dfb48d0d57f9fa72b08f53d7579e961739ec1452bdc467def3c3c0fdbf24f76a63fd547a6ee54c10fc6a8efa1d3ccc1c8dc7daafc0e3bc43f0f5bb80fffd0f0bc75be704f2a3b4f573ecbf49f57c9d5235469a20a9a9e4652f9e747091a8b65b7bbc854d0a1b9fdd11e0cdabbbb2e59cd896ee70db8eaeb4b223910d4a702f0faf5ebd7ede1997f76d6decb414cd35720cae9aba4d1cb8bd82d15f0b03eb74b2f156d67fbf46930b0c9ef758b7c3ae53c7cf8659ed30164e4749e1525e58976dadadc2e2c27f1c57cd5f7c90d34e39b374ad7d13939393981e4f3d0cbff9c77cec316e03770a4168e54c116208a543b49c74ea76502f27f56f11286d4c090324825354fb1e2759c8e914d7101a37fb52f97d07384cedb7d395457a342f0bf17b5bb3db81221133a121d76c74628c55976957f4b4e60a2381e5813a23406773d7007762aaa9760a32b3495a2fbb0e72b0c13c98be28780aa68b9dbd046af417578cddf026e799e0b6101b6fca621cb0351a3a78819aefb86f79734dcd4d17053a1615dd210513419aef959e63a2e6edd687aaae5478f942fa11a8971c1f218a4a274c307b9a2311686900d1f3f962ba6ee67770e4e7d82168ab2cc75710bc5f04bbe88dc0cb0940d96e4afb2fbe5f2358879763a63d9190bb3d3f12cdb4fa2ec2410d9c98c63d23f4f711f69351b3e4fd1db8067fbec321b0449b67d936483e03e7b3be3d9dbd924db9e5d6727ec263b1e89ec28fe9aedb291cc22e724d998abcff3107bea472e6fea0bf7cf5349c987d3ecf5e0341beeed0cdef9c3935dff146768f8f99b2f7fd45ab131c7f8e7d562885e1743b472d32b37677c49377eedafb1f596f0045ce083bb5c3204ed7029e8c38753af4b5e0fe4dfbddd53afbdb6d1257b27a75e7bbddb253bbbe6036236bb64b06b3e64ccc65a97bcdb351f10f34bd7529f0dea671199d0afba9765e7581750d1f0dfd85f39c7d9f09c9f0bb809ead83754d1797a9eb6f042fcbf65fcca6ae53aab8cfb7955d929aba9a9d85e24a81c5d845339da4942e55027019d0c9ffb24a293e1a64f623a19be80e3f16b810426a7f9e525c431c9db3b91ed5d0483723092419fc4cda63edfce53629982895a331a5505be76a5c5b2ec5b512cc3522035529390cb43e128206784b20cc129c4223f42b83d11889ca2b0e29019c9750c5b92f7a133a25d5b55e98a24157a705d8a2103394f9898ee96d276e695e4d01a014d9ef5bac6790f4ada015eed75bb2b9bdd562029f8c52793e1aff24f4fb2d6c018be613627288952093fc2d3c112ac3dedd146b76e31282e120aed624f2e270d4a83cec1c9f1c52f9bdd1eb623dfefef5c4874f801da69e8ab42c02b1e6d74b7aa82b0ebb6f486616eb49159eeace92de025b9748673cf095936f4355b9fbbfa80c51a7878823845a9061e3114c9ee0397a552346936118a695a1ceea4d6b8cd553dafbacd26906ef947542334c62495d941af63e76df1dce1d4ac458bc08761e4f711efdb2dd1f32ce4dadd9eb1eab8901473a2fc27e4aefb1abc445039cf16a4943cfad1497b46d2efd626c546e678497b6bcd66a36b7445fa940e5879992e71203b852aa65f8fa38a4b4590708cf24b831407a5c5a1692ef1d41ed16d955c5af2bef08c1463f24b42fae520dc5fc901a3f4dda08f50a23f95ff19f152d6158916edad619264596fad41a9c832c9066022b027e6850f394323b1e8c62454c634c5360a6bb9522d037364dd9cb5362218eea0a2bbb2f439da595dfe95652948d41325b751202ef7c3c89b4d5799845da007cb2b67778ebd9a2b474a628ba8b0141d3709bb319789c80009dc970be7259ac085240fcd6414ac34c28b10c7fda53a1eb9c26991f6ca8c795d31c5e3d91e2ce52a6b5895aa8b3b98f501ed6e052f2d5c5b01cc6bc9247e551ea60a495609beb223cd77118b89908c8fc4340c7cc9ee084c6e94a383a8055e03cb1386442ddaebae2897928b6e300924a4a3386134229abd4bb22c7a9928df09b25785ac0562846799007d89c7fbb0722edee78581b095e6cdbca0edf3668b69b9b35899bed8d18b9d442f2c36425905c3b84130429553c162c56f369156e4177164f064c8a003e7386c3f89a73022f783c9e432187d410c9b3bda455d5a726f568d14c99a825681864814ab469da1fae2957d9888d88b25123b43a161554db1ad1b419733144adfa56ff212d10983fb2c13707b8e0830aa9189b06d12a12d682066328954c8af2591359b4ba89c437527351d8bbdc75a0f546f37c8b8b60c411785e516615d6917d57b34928d7c981bb7a3a08e6f36415ce2598612ca09cfd770142386cb9adce80a69a765d74c58ae938f82294b7396a6f019570325e7bf9ec6d62576e5150cd886b253e6e2ee7da397933d5777f381bcaee52c02dc28e7f44f161da036ba3256af0b13e36d34909113ca210765f2e78a0af9a37d9926445f1a83c5f050a0891cbcb6fa2bed0461887aea62435ae8ef0c2dd675b03bf1a823e71e9e2fed76fa092997d1ce4d127f8d42163a510a07c81177022761a3f89a47df58e8bcdfdf913c971327cec1c9b173052bad399485436a91ccb49b996032491d89de11b1f357aa461f26ceed381a8d4d01099b44c1e58439c12889d3d4092613e732896f5396a44ec043e72b4bd228e669c7398ab9297f55162e278fa6207582843961948ee259125cb310b2de4612197312368dbfca3a7127e0ceec66144f237eed4c83bfe24412c08294759c77f0eb24ec8a2592e2a71d07ff95b6251d0b07c1a4e267de9e81726d6859ea56d7311763b55f10c3efda6ec6e6a460794bf130dc3f09d9878a5684e54a221bd8b80b642171ac13f86970077e1a5910769e58cd69c4dbd3e06ed5adf15073b7c40ffe966d576979f1287906010f137df9c763de05820638ad544692bbbc32b2aaff9754e6d562652cd701a2e42b49f232701498fbbe8e408e54478cf0451aa2c2e5dc09a45d51020449686f2b79290a0f1d0916c3c42ff94c911143e6232e57740e1e682d178f929a134187c66bcfdfb320114c7e19f717fa7a9cba3aa54d368d5192abf62688c9772ad7722c7d6cb1a3dbca33bada0bb3ac4b122a3aba3c190ca8de1f6520a2ea0e93dc25f5652c191d53bd7776494ad5c629bf27d4ec9e3234a3660b95a19096f6d12ceb6a6372237bd69edde71b079cd79a4b022782089cbb3406f321edd365287c6b43c9fdfa4be15eddc53929f592dc918627b22f94a68d1779613fdf9fc4812840c04b701e0227c68d2e9e17fb9628aef4e4354d692b6cf5d8facaacb5c9365626f09dae6c4a69dff88e0eee53da8a5b2f56a2d2ad69da0a5aeb2b49abb7b6c2735011d08779ee1402848854e4b7772e6797979392afbd77629967d863eb6eef9ea8387d6ef756e0ba6b12cf7888dabd15863d2bc21676fe12cb8dd12def593331d2ee02e4f8735b6e717dbb0b3b7b9bc9f8b68b096f1da0fff91fc45637bb60d22c20cc9e6d769531f3fc2f81dccf2e713d1713f8fe0c7edbc062f8b34b526d48fc597f8389ae04f9fc7989b1af661a944a487c9bd23702a58c1457e076045dd54736eab067f5dad28dbfb157158a04685cb53e82e1ad5c3b4c39b6045cad1c42880f8df2a0ddf3416fd12af2efc8b13e74db6013ee93806e76579261cf6f1da264b856ac2292550afa5dcf6d4949311976fd7ee0b503ebfe7665e92b6cfa956308b92c7546939833b8608c06c087cd1093bc6b2e867892c3c19658d2e64540b61e68a4c0e13904f2b456b2e03782830d3a37386138db63f7c81e95bde72b6d7b045aaed5bfc5dca0c4abbde716867d91dbce371ad55dc32c402052c2730710a11ccfcfcbb42e6ef607a0323f6f67e72ddc477d0f9d872b78d8717c5091b7f0b9073fa8ef99aff38e0451877bef21b7cafc4ee61eb65b7e7fd86dff4a3afe0afea4509623077591677591bb1079ba98f0e6c9784f14a1c5183f1395e709b4e67a461951f2891951b0e4f467f4619a4a11d05e0c49e8a9a3fd940c200d16bab937810bfc3358dafa70e78879b34e691965d843213d30e22dc672c0ba6d39d8c361cfefb77b5e8fcce8c3bdd725a17788423939563819c3f73a7c4fe17b03be53f87eaee265604f20b93687c34d1fe3153e87f2de3fa1bc6f020a231c93810aac43e05605362010aac073088c55601302531578018154057e9181b9526a513a938d39f7169caccf9a4de45e25f1d48db833cb3257c4f0052a0f7a27d0ac235331895540c4980434b2e7406cbbb88de9b6403189309130bfb1ab386128c6fd947e10282231f610826f0983cbddd34e4b61625ca340027c619262efc106f2bac6b4b93b27d0fbb8334d6950c634eb0ce0e50c8523010efe58a0192630d09acd1162c4d59b213cb6932cead730b12c6bbf95966b23bdebddbe3061262e713b6e6e86858cdfbb7ed7e378c5da3d3f94f0e512b8c34d1b08e364adcd0a776b6b2b4818cf10b9d33cc2cc120c32a7c100fecf3a51ba7d2558023aad763b4fe3e59e688976eb112cf6930b1fc512bf84f9f5f3b24216f45fd00aad4432b22748904244705ba2e5a21b964471481cf530152e0b0db98057c80e79469581380a01eefc8039701086ed887f65896061fb264882698d4d7000fa8f842434c0e437ed2de14cc8595d55acf17e8b7bb211cc031f96738ddf44f9863ebcaa521ab031dd1348a8650e935487f400de2af9524409cd158b09499b4df034054e1c8df7a456bac231899b4d70c7e8eec27d882fc5376ec512202a4c7c60f365e5cd379230f0be4069076624ceb214e3f999e85c717a6c3d0440cef2c7886a1c6d9f09d0e1aaadf0ada01f05ea1137084317939f21d8ee11379d5d8a241809fba6feebd264a99f052d543363e4dcaf8c6b2d1fa5b977eb36e22d24dac9cb6e5ff9694449bb9247d26572614f4355605a164c3bc1186799e5fbfe6fcbc0d93a8d57afb4f56dd65c19347b853124d84683706933f0c6a5e73ce884ec2a984d84569e5bb63ba7c6aee4b34b2a601fc4a81672f8d9574fe7fd5e16e52701bf460b13f34089efa43c35ed1ba48e881db8b930668ec4310bae99b6f49f25f01c42c7f9b09819d997094cbeb4aa9c59d29076f99e15a3bd5314175545e50aa96edba2d73e97d63ac49e8996c0cfac55fccfaaa5afed576ad1a9146ef7d636d7d65efcd2fd853df7ca9ea22cfeb8c0cff823f88d3ba665f88b74482bb00a6ea4af2e19326294a53ee9969ebae37cc1e952796967fd7dedb64d42c044f4907885227a607c3029a5488449c2ad77af0ab45671c96271b4e4f789c4f40d4391d2c8774964999d6e2d384a8e179d5c11cb75695c360bd569e0132fae5a86cab55cf94ebebefece25e45bc6be7caaf1d3fcfaf577326a4d4939afe0c8bdbe9685ba06b15bc4d644bf7e2d0b722d6456c2628af6b7a39c0fcbcad91e7774ecebd78533a54fc623f47e054afbd9795d3889be2e3e65c1f9155e49751e504415cea355a58ab0a6ba7026adabad22c02d8d6e07d31eba9a2ae3f79d34ad594e9a343a55e5e53e6e96bb90fe88dc3fc0cbd31fb1a58e83262d74737fa8d6cc235ea88afde1929fd56dd43f6a9c50f77cbabe82945f5853d4ae4b86eeeeae728db5abfc4a09663c2a818a6fd7784b92a15f5541bbf99d6b9937ef89dd78994322d617daae7ae1f6649689ce456c5fa75c0a7ac878c4b8c8ef3eef4af2765d9faca95ad7942f866bead2ac52697c06bb0ca35a0938dc99558c4da38bb7648becea3691bfebb2557675bbe855227737a58300917b9432911ba679765d22581ed875c9df86f85d453e54a04e335498c65b1ec0a692b8e9d4f83cd08a58e5afd82865a7da61b10ef7342dd3bcd3647ee83420642ab34c5d9f6ca8568955ab0ccc4dd3460f1a269525a7a92959eb7aa1e45c0b9caa924db8a7dda4a579c9327f51722ab3a4ae4f9eab92534e26aaf013730756167e1527e823724f96f926f89fff31ce087256188159132e96ce9393a54be7b2eca5dc273018ba6545b7957ca2fde7d7acccbdeeca22fe126e99fbf9d2dc4fc87ee292cd65f9d9fa13f29fb8e4c552041b4f4170e2925f966278fe240c272ef975298acd252860e0175d42dc696a86bf15dbdb54e3ef44ce46b9484240855e9b900afe8d49caa9ead3add4a8475fd25fb752dea2ee898b4386524e02663181b37cb9d994cb8d6c74e4763b6e0bcecde30401ca25f8a6806fc6d52408cdf42be4ba7c0e7ed3ceefbec59c6d5f5e6a7727dfece8a360ca5c8569c4e965215515c45e952c08e6232e450ffa5690117057e03080969751adafc832b8a294d06d81d4c1003c4f9788e32ba43d124634c891e8f773146f87b3cc35d7ff5d12c31db8632486918ffbf2afc5d871ec417c891f5327bd28ceb2450733a640a48e31c89d0003bb39d4488a573572a43a7757d28f840ba3abab7ad330637a5451e3dabefb652a826661aa59703d5c7a1bc96d28a09b6c630525f6d144bb7a568189a06f90c0f86114a44c1dd079117d9d37e86a6f4d19816f01803ab02b41d8c9865928a358b741f46cf1220ae9f0da002b41e83dc586d8641b36049c10dae9eb9becb90d20874991de0ef0ea2f9b1b651038722cc36c76377ec981b40cea294756ed649e7b808bbc2f2852fdc978787cb578d75176552eea2146df20b0d82c2d175208ccb225dd2d63d55b0dd452e3f719f7fe14a67f59a9cf0455be36738faaa44b7ab8ddabed9d0ab02d6de821a203cfd65beb0b68f418780c49abb7904bb5f763992cc14653a16d9a116ebda860334e529f8e10d9c20b206df716f1c2c0d15f720c3e157dab5a5d354485ee3e4b5745448bcae1dafe2c906821bb7bbbdea6d9074b53548257fb40cf9125056cb20dc04f36d94625a7997f4b72f6d8bacad963ebb85d3c06aa618dfe4d3cee251d26875a4c4bb3836519d207a651fa418c10ee2f6a7bbc4a94da6804fdcdb86edd5aea04ec264e855ec3859aa157493ca5f5fe4b2be76570225832b6809d88d9ab6cff4ca0071183aa8648d41e9be78a205b7f8371673c9b063cfac6504394743bb58fc719528fe2dbbaf779d4e694c453757d97a90c22fe2fd70c6a047513f17fb366227eac5e222ed5ea9a893ad063f5288c5a4ce5760e215febcd20a72e785bd4ecc4ca2f5c710f5e6550270eb57cc8004e86d5d9ad31deabeece59d6e0561b369ba8bac423b5bd56d67e457d31f15e5987cc9ef5ad9ec631ba5bc30409fb7c5ad7439d66fdff5e919776454ac4c34e5922dd862daa216e19e37499b760bb2e24a203f594de9d285e946d345075f8077620aa541341e5129a64998bb02b45f7be46a04ea302c9299ae6d28786320e7263658cd0cbf36880c8cea4f0c82853cd93605adb5724796a6f25ff8dde92b45bfd85b81d24df1d7b2f296f36f94bfa9d7e2ed5fa38a99b71e5754bc241bce6c24d0bcaa812aada41ff3d5cba872c641f971c02dd588cfb24e0d7f477905ef4a9c6df56402e7cf40f88980677f4547d459c7e82af9b2049237ebd3f09aed39a72e02d67bd3ea9d24a1619c64bd2c2f9b872e9ac26f9a2a5bcf6ed0ac9cad04c5f917998f148789cdc24519c44e2de3b1a727f5e6caaca89ea12155bc7e46a8bfc13f4bf73c4c0f80e6b53349e3f59dc6a6158abf930f13bb26c1f312b50bc135359e16d5e185e482cedfbaa9dd4a8fcbf910107f6fb3f65be2b289ec0785772fc474c37fe3fc070e3ff06b38d9fc868b7e90ff2d84fe6b01566e0ae9fcc5beb3c92affe4fb86a73e84c7f168ab582075868ad55a29e30c3fc618de2c5c1fc55250606ae2a0daa0c9f46fb05b19636ccd7fc9cbe93f058a9f02849eae5656b5b988204498097d3018e053d967beed54e083d66f97f358635ccf2ff5ab2b829519b223cd7e44a5e74897a46dd5729ed8b86693d3839562fa7d3ea3d9cfa4523b77a1414aea730c2a9e897b6c79994793cab951caedb075c45e9ef57f0f4ea6f8813d12ff9c1189efab63f87e167dff51e03f8ec62ef583d8653bcd063550cf7357daa8910b61311f69634506bb3bb308556e4c02e672f6c8d3ebb44d6c6fdec62ec59f5fa4ead96d54973fbe94d650c2eed1a6d1d602404b4bae2685fc31751cb755656b13225605443ba4450d7ddd2c80e95e92608afb925a555f7bec13f1323d73301387dfb1c7306c83e6b8529a7eed06db1d6bf90ebff4b6e962fede777b5d9a61e12fa095ef03deae5efd30654b4fe3574b1ffaf3add256f252db7b6e1dc566046f6db93e3a365efcb1716737a649406c46c32d138aa53a38cc50c782d35ba8cbbd890e88661e8808fd45de523d550e90c5f0f4efdcfa687673cbaabc16f3d54541e96abb0b6ca9c3a6a1971f6c2dc062da9b06c63b3acabb5bae0c631e6c0de2da07a88e096aa1e4544d54d07af88aab70eea7bb7b00379d66e44d41d2d1da5026ac99203805e32c5a01eb2e0a6fc72affd28b4356014d9e6fcbb4e8ae615db06b3e19b0d36dffcc9a25c5fb8185b9e766f98eafcc8fda954e82ca6649b6f001f6980573351b4f84c6bf16b9b0f182923164d102a6b27f1eaba964f55d4fa0a82e7b6caec972a1382f418fa220ceed303ae5e205dec8c5bb6947d297a86eadfb486675f6c57e81b900caaf62c7ad40461885e48ea05860b7c76f3d3e2b3ae346311031ee864413f520454e1805787a5752362717c18fc07e5766230a6d8c2e8a9415f8f201f1e9295a001d73d457587fdc0eeddd086599e792b5994d87fb378d85ec9ac3888d8aaa043f502aa31cacc9defb23ef3ccdbcd7d57598be6b21e6254541f48c2583b69f42ab773f5f150a903f468945dc9da02ba117b22efc9d0e620ff492b21cd9e83aebefdc8da819fbd78649819daec61f01fd0963b6accc7fc635d5108d6fdc5c67ef622cb5e141d04edceea9bbab42bc3132a79db3c7b216bdb7e51960042e5c7e5851ec3c6226371c65a174450ad7a469d8fb6ebd3d4ebf9fa28cc7acdef7bfd203972aa7f53fa27d3ca8d996034ff4a69cc95e64272de34ff4ae9842bf89c2da7a38a45770810393bb5e47c34a2953dfa91d3d2470742dd33b60c178e8e415fa0ef4795f401da2d86ec83e032450cbfec6d2a472688add0cddc0d53c35a329a4d0166d04742eb77885d0baa878fbecbdde86a5f10896603655724cad62652cec35143684dd68532393de0ef92f83a6169dab78cbe593b52d9c0ed8f579f21cb507d8224e43139b426075ce0d7526a89d3520b67e4990698ebbe5e7a1a50b0d55d732200b36b6906d3d0a8267bb9797b84e9863542343264416b595276cebb57c40bede514b08a6f535c29334f208d1e317e5a9dda8793156166c77c23509c0f06f3dc9d36122ed033dd9576258b3b9a855e6c1ca4db93e89ab3f04d3c4b16a6d5f23b638851d65747439678e37549b571719be1679b5d4abb66adde3d395dc66e5bd95e959626c51c754b85e9e1fd9d3ccf4b79340987e571b2bc9af60cd5793f2c2e3f4fba5a5764a7fb427f9feee86f6342b3540e29bf593d37798e4ae703f579766265cf2858e87ce0d15796a4c1c4398da62c4725e76f4a3f29bbcad409462396a67152358dff9032e5e7c05c717749c071cefaa6caba5e7e3d8a02400c0e971c336c0419c0001f8f22901045fe4b955f3647c9bc5f462cbfaa8fac71f1a357f625e6d565c6a5393bb7c8b8e9ebbd7ab1b1662b31371fbc05bb9b39c6f9b4391947578285b29676b8da443ff07c402adaa94252b9282445d428e665a704721f4d732569414069f32b276965c9c31c14edc61e892046c13714ee5c04b65f2018b163f088a36ec3ca8fad45b4b43ad16e019408a3e64418bfd28edd6a72e75e566a128d39ee98d3bd3a7bb5e9c25923dc3b8fe858b2504cc02303067d30e43eb8612bae04dcd83ef32670de8ee4fe5eb87461946599eb1a5fdab9532953b056ef2b321378015e3b8eeb6e252f7b6b7092120c139f4296c4ce62e82ae8b9b0eae35ec6f18405dce670d144f98ee2541091d328a8badcedc978a0bed1238f422a1b6712a9e68a29eb4705b3ef750bce8b5b151604f1568c9fbd20897e645899e69a2a2baf592fc057563a0ca0c682a0a09247234ce7e3253685c5db489a6dd14043e6e75c948eea18b3c1addcde20c1fd44eb2908c75e322763c98bd8cf092d93e12fca60f08ac492948e883fdcdc981766fc7c04675983f7858796e0a3bcf07b39180c06d96090edee66611886abd7f56e9cb4232a6597bf042d864a5a161ccbb7a10206f268ebfae56c9a062894c2cf421738bc31cfddb7d12b0ec1dc8c4747d84f1e2d350e50c5d8a043ee17dd19e07e9067f182a2f99e85ab514e48908a7d7851a9d696a2a608f6aadb77d5234caee7cafcae5528c77d8e04f6acde7a96ae4670f83cae1ef4e69ee894fb15756a7b2c97912137162fdca74a4e1bba176e4b86f43aaa6eaae512c5a3971bec871bd163f09d349e252366264bbc98845b6ee6b6f2c7a94c2cd44eb30f4b2e6b44e695557573b46f8786f92991ef95e24b793a51aa066e96dd31dc112c1548e0beab868eebb9a908781848c6d1f56d948f155d2aaf5360b06a042f4c3dad5a005a2e00a296555025deb17f5c9965052e96525f37f5baf3a326ca362600dfbb0b46f97eb6cbaab7e7d4e58a855cb9f869179c3f382d57a6415d02bc9e5b4e3136077a8f943b70609eb14d7c4c78cef157b00e13dfbaac5a4d2a3f6fea5acae1140525cfc36e071cb4b4dc9f4bafa656497d1ca77a3df771c4185c31565b6d98f85986225a4b64cbcd969643ea50d92446554a0c15cd263c83e7aa776696b5a01ac56ce17d20b79ab5a6a56af336b8c9317d1c786e0d69f556edd27da93a90fb68a406af7b61e5777196fd650d6d4c58799215cfe296a61ac4606f294eb4004cf758b9632cd4cde68f945a5db2fe771aa2f2ccf0e2c2b3a4498ab48576b1a87f576d9c4a710b2df44472a0ade07ca6a67df69951f456cec08a632fc80b48aea2049eaeac6a712bad6d7256f29c9548a8cf739b135b39de281895a8f22ab9d911f2f713cbc1216b361bfa7dc2724abec77e6747cafd5bc2e5f6f70cf14a83618ff5f9902965b7eff1521d0611afd34fe5c8ca340da23ae40b3045610b49a5c2abdbf9f78a07f8ef1260b6f95a1220b144c493f7dd5286d2cefbf1d19db7942f9f5fe5e2f34db6faf27d65fb5d9276359b4caa49666f7eb1b8359b17e6137b875ec061efd17589b53b6afeec7ccd767a7edee92fd9ab7f08f7d2fdbabe806a937e0ffd20e24f405e7da0bd9e1f283787c511d4d4a52635276549614fe518a4705adaf6ebfa7329cf50cd5cdb638fe42e65aee98def301cd54a2f61394a0ff82fdf6b1767b1b5db9670c8cdf075ed7e9b77dec2ee564260efb40b98514d06fa1babf674ed06fbd4f21717dbffcdc6a9dfff17c9a96ba65a96a4a6266f171b6c295bf2e3845577caffc5d61b447c39898694ba96336935ed96d7e0e785562b17b7d8664f2347a9b0d277839a36726fe07a04030f94e5b79d47e320d916a8abd966f3b843754b3682feab5eafcffbeecdd4f5dc7703d7e37d3790dfdb03774e2201166fe4e13b8f792331ce5291f1304b42bc9abf03bea85564cf7adddca3680b9cfa1e2219d95ded7571df1563d7034fbf7d3715aea75ef37379e87aebea33095d4f42e1f91c9340dd67c88f5520587fa6a392d503c6c5f950240c12b08d2b239251df45a6807284a9bee577cfa939602f74f35f17547d670274b2d68b13b645418b262b41c56b99f6cba893c04563eea0d1c02b2f72accecfec35af7890b58c108def583034b3cf042eed4c1bbf74bb2b6cb5b7b1d9fdf5450133b06154e20a5b95c0d6633536cc12d92048c11fbf6c9e434ebf70a47c14dcaa6ff979a7a35d4c3ea9cfb18bc9a9fa0c5d4c76d5e7ad8bc989fa1cb8981cabcf3f5c4cdea9cf7bdbdfd9de1368ab5894829bdf21f3bda3e04851fc17a77bbc74894912bca3628b8837064c390dc1645b45a837e931395241788a1e937d0dad1d9d91031556afce63f29e5be634e48cd38734f5363648ea6d3c2753f967ecadad91d05bdb2403afd7b35eb9fa5672ff64ce5e4a4a6a24b2ac471a0d4e18493054f243ddd0fe68351f62afbab88dd8cb2eceb296e5dbebb7476d9b6baec1966e60aab33a492ffdc08d586db53498cd92a448548efd020bdaf8f6a35f1007afc5827ed1fe8bf933bad9254cfedd528eb0bea060b5b786494c8367b4b746529a900915c6936a9f7744bc1fddb110addb6f7775fadd967abbcb735d32a27a549f18537ee0c646c69efb5d7757596c5fd1d1cb6edf6dbb32d7987eacd0dca0326a840dc4b480806a56d36f2c0c761b55e0ccc273d572dfb92d14f5c7ada8e57e02fffa2d14f7c7adb8e50e7430ed4f5b69cbddd5c14996cdb22cecbba726a27fd39ab4dc373a38ebdfb46645eeb07fd30a5bee09046120bd2d7b3234b4bc7dec2e9baa924e9f93b75c0ec325869b303fcb27a9257badfbda16b2bd7ddf978792dd23566eedf2b47c6743a697638aeb283ad18a37c6673a1304cc95161d0b9ff9cd17039a97adec1320123e8d0dd05be5b0a456c9ff951732760f036c7e2be7bb19da3a47f054bbd4dcc8522e3874b1e5e5c4d007c1e5cb6ee6c699bae8a6ccffe437d6f7d7f25b4a725f4c9459607e4ca977c64b8e0426e6a69bbe80664c222a17db4cf4eafa96752f2e8fedada983fbbad22dc3c641657c14a5abcb6c665caebe6825c66347719bcca49afad877c474dadac68a4c069721a59b5ef926bcd105884db651bed6a5017ed9dce82a881e5b37288a7b85dee23505206545e05692bb1511e324be850b487b491227c8fdc0bff0f8963b331e09c76dc9cd5c0d13db490f3de42a522f8bf4961b203511ee74f80d4c804f3ab42b27e5a90e2873f05d9351cd8a131dfcc358d51feb884f303fde41e83bb72aaadb7c8925d34d5074b9ddc9cf7a6b2b6bcf7f5d639badf5def3f54db6b972581a05724301764192a1d9b385d58be46f78d5cc12125be38da4a5512eb7a785852f7a45bbcd660c7fd357b49b65d14b8881bfe94b1983a2165515bbe672e0a6b815cb8daf4b520a8ff89456b6e899dc68e5261ac14d1532c9d73570fe5f6caa937c61133281d32f48e804b5b2f1676b1b246ec17ebcb62137eb2fe892a3186392b66840e2365514057021f70b821624296cc81365151fcb6254efa764a217c2a458fe96f9343acb2d39df2e75d6a0162152332c86ace5a6ae8f8aee2cb5d15f30d04c68872b00d5166f20a41a601bbea11e47f059b9529153f225b7be4e115e7da1a8d6d5de879caae2070ab9f66cf1c4a5f9299c57cdad0e52757060ac54cec0f232b84c91ecd2f71c2592af97dc3b2651110653d5b8088f65382dc2a10c4f8af040866745f85e86431abca467bc93a6cd2678c90bfc2c0b5eca1888d031d14bda93e1a90b8133de994270ea92c8cfb258278f5d089cf1ce18826397c47e96a53a39742170c63b21044397a47e964d74f2c085c019ef0c203870c9c4cfb2994ebe97c943f7fede25b3dcb6221caef9549070b8eed3167bd525e170c3a79c7ce3f6e33a219e6bdb6566d96f3165ce64597b20588f08c79808db8b0c5703c6be0bfa1b573195205ca95381c243c0dbaa8700852b35993f21d70a2e7a2db6dc8997eee119c9d9413c16d18881d3e25170138960926297fcc63194adbd167c44ee9fda7ddb8c4777caa3db9d8ed1abba7e5fe4aef086faa77eb6bc7f1eb6e07587871e599fe3feaa7284f9a75bef51b27883aac7d6576cdff3f004ae76ac290bfa4ef643c9c7a8c7aaf4035dd45debac6d74ba2e11f44e90a073c5e98893007c2d2c30b3435f593c290557fecc1229de4bde15c8351e21942d52000e1cfe312a7054613071dbe74dbe20c1655c1edff6cd07c25ecbd459669b89111dcbdfd2edc7626dbd530f39686a1f31b1d12689b9042ce1a3148cba662430a33492ed683ca15f90a0136a6fd7f40c5252f5081d1d90a0fec8d1528ae54687ae8154a5d65ad3e7d5a97f0cabc8840087358f5245d8ae21f49dc85be211d39c727300a0a2aefe10f23b151b445ce50ed955c4d9a16acc58e4172774cc821b0f63fe59bc344299d006ff28a18171a11ed0c418754979fb1d0a88c00471981f7b48606821c6852e488095a150b681242ade71d505ca04b9ec15a152febecab998e095f2eb573221545c7492a1a28feab6e1532444a9b1173bead1e6b6ba8bcb9579127d631f782452fa8694352fefa51451bdb36fe4b0c2fdfa7beeb906c2b28b6d36d17b4e19dcaaa8203e1d272c1dc793654221e06e507ac6554be785893e4479087ea8206e0a7258b38960ffa5a2ddc3b24428b2ecd7b2de4526f89144822855175c343162d6cbf666bf7081e9f197ed5edf9d04a950de3bf8cbae0aee4a6989bfec29601d5aebbbfaf147197aa1422a63811326b4513ea8e5f7cde9e0f0f9c5fee0943eec6e9fee9d1e0cf62e0e8f77b60fbd05c7fd2e29435c9ceced1c1fed9e2c427a9205a9000feae1e0763bc0dac92e91393d57970b68f2d28a22207e6045296c677b7bbf7be09ebb3d3cf3cfce5c32383e3a7d931720db618ef01cdb3e45d1e61a865d8b5447b62bf77075c3db2dd47f493e435062de1d0dd234bae659668fdffcc938dadb122ff345d27e2b5c8f8d3c6d280a074089137187635d40e109a2fc5ca9aa0827f000b03ad71d267e7ebb88cdb15ea9a1aec54a3de79d500ec6c0adf3aa9bcc7fa439ec559252f3f6bc7e934aad960f731299b6fac2ee53c4b065271fd97e87388d86894f84f5aa3948722818725f59d516a6f3ffa016ea51ef9f56571a3f39ce4e7c739f44d763e1a01176d6babd17ce5b163a67814863def9c9710ea311e3290b9d190f59022cdbe0e0d4443b6870708a899332f693632e7afcc5c25b95ff3a12e3d965278a574793204d793065e94f2bab0d8bd4529b9ac77a2a7d5cb475808a61a56c38e0fdf9e5632b298fade80a154fc4a8d5134ecc8b9b6e34cab2e222338d30530ea892e25a1c5ceae844a9badc21079e79ff5ea18e6960730709de8a9b4d661eae9fe7b7eb72d75834ca9d62a572d02758bb1a48482ab10f533f4790e2793eb63b7fc51147aee3e239ebb0bb9b3811691fe58e286940f2681a60aff02d5567e015cccd4421431fab478e4de604cb45e3f1f9f0e8488ce7186f71b48609476b6bda9d7a4239eac21b401d8e12e520d9bcc4bb1373c1ee047a98e3ada8b313f374366509893aefd43bbc493126627b9751530c259d596a70601415325496f1a1f0b34cccbf5b9d04096cc32492d5873afe3c8d2fef6aebf94972fe1a6a7f12dfee047cc42613e0f84065569beb5658d90e7659127d851c2702fcefd7e4f86c6538be4c59f235b89cb04170530b7dcd6bc14f98a805ff6283bf67c168f1f695d1de330bf222984ce25ba079076edaa6f5d81fcf73c0d328643bf1f4662658588be16e0986f72c08d33d5e9f69fa58a6131124f56d312e65633cdc5ede1a8312ec3513dbe134e2512a929afb6b3acf1eafe4793d892f83c9f29e3f2a151271c19211bb11508dda0cbba29421554d1bf1eb629cd54fd95241094bbf4fdb7e290b5ce17fa4b92e6de847065962572098893899d503a636e0289e4a81a07ec21d5700970e35ce4a90ea59a5faca4f4ba5c322b62de2692dec89051ab2519c2c6bd11b1b29e3228996ccaafd12e09d603c2c267a6d8e0b3bc7d524bead5fd06ca8eb250bc6b70ad0d27abfe365c05d7639bb06bffc75d07f2d40df301e323eba3f4d587d96eb0a25aa0d58b234c3c0ce300eea1bf7cc06caa75c7dcf9640d347867f548194ccc461f4a59ecccb12ec6ff11dfb5ef79eb252964717d477a21656b25ff58b5619fee91bdd5d39e377aab0b30c1adaaa7e50f32559966d8d97cb322846a27ef55896676983bd595693655bf0a15d8494176aa1b66db4f1e38df9fb02683ddc87124efe1b1bc553a6a751fde819d5e5f8c0e3c7f25c95f3182663f9c8f9d91ecec9633c49284a90d3784945df97e066fc803f3259031b385dd2690725a09bfa11faa75d1111bf3da967ac6c54220946f575f8b902c6d3471ae66f1b78c625d62f4bba27b48904557bfd003cb251de8e597dc1bf4b2810389d95ffe67f3f9585d741344ae234be12ce4e9cdcc4e6f5c3edc9c401a0d4914c8c1c929d9f6aa4daed9b60346646b025ce47a5bd77d63a5d0749005727b978cbb98f67ce34b877782c9c59ca7e12e32875aea20973d89ddc1ba41427198b4924d745e73612632844a3e8389f3482f852041177026714dfdc3be0628519ea9c401891faf6f6b61300819d38b95e9d288074f5f06067efe864afbdd6e9fef4d3e99b831367e77877cf393871debd3ffe78b0bbb7eb1c1f39db47cecaf6897370b2e2fcb67d7270429cb383d337c71f4e9db3edf7efb78f4e0ff64e9ce3f7cecef1d1eec1e9c1f1d18973bcef6c1f7dfae9f783a35de2ec1d9cbed97befecfdf9eefdde09401e0cde1d1eeced12e7e068e7f0c3eec1d1eb1ce5e1c1e0e0745b6291180ce44f8f95747a707ab8479cfd83d323897ffff8bdb3edbcdb7e7f7ab0f3e170fbbdf3eec3fb77c7277be4a7c1defb9d37db47a7dbbf1d1e9c7e92888e8e8fda0747fbef0f8e5eef0df68e4e3b3ffd74c298dda1763f9a86bd8a1327bd61a3e82a1a15cf665ec75f1938a3706e58328d52992dfd29e0a13389a69180f1945a23c674e64fffd551edacacfea4ec45eb34b628305aa49489774627767c95650f1717a023bbb8f086fe3ce2a990432fbe7260b76c36cbd8582707a7626eebed646ac907b7c0a2a28f415c29dbb84fc590fb788e9567726d4bb7b002a0e8496a42c2698f580a1ba3cce12f932dde6ae53a9200a8b2143bdc7f9a96509040111e48c283428fb65c4b58523318bbe61a1dfcc9fdf4329e349b6ca8be3a91604920e2c4279ce646d0a22f14250c7b0f9cdd096f71b564cd267f45cd9ba1e0a6c5b8af7880a5d863b218de6af9248c39f31a6c3eb7de424e6d75c80f51aaae8e183301b695dfe3a2dc504d623af4b744720fbdb6651d17649968b79d575ddc6c365042a38eac1ec2b82369dcc2b1d6a229731c3c1f05da1979401f98dcf53d369f5f453c984cee1f24fea4d96c2490198ebda38e220b379b9a9808e7f0d1150ab0b24d0a3a802dd791c545c34c7e4077c828eb8c623e0a044a91ad41c4d698918866b23df4e0bb4a18fbc6d04cbf56461facd133ca3bb8d5da669d697c79f77a1685057557b231541dc6a8d1230c13f74fb7481fe75ae606c30b76584389d077dc161259e66ecb79fb3548a2800be72a88262c24ce38be655ff5ca056de444a9135f5ecd5238b6772ed928986917353229706e92389ca9d22f67d124ecb818cfcb750d2da3ea6931410a9f36d6f8068b94dc088536ba842d9974d0b237f63a62b5e445c565aabaffb9f8ce40d174f7a8e4298f6599812edc2169ba1a3d6dfea2ab795d5a6491f58a0fa5b4bae664992ec17ac0f8ab512e6a6075f09a2fa432f181f1d994259273f71a3d729b44427d7749fe90b30eabf9cfe7b68d7f69ba47e920befcd36db1e261849c3cb95c37baa4e684f1023cffa89ba343ee5b8bc9a50555567b339c6517bc74736060db5239d60e34086eac7b01cba04e98d56e87c56092c3fc8489c58721e059f0bc478a1eb3d67db5c4a588811be7bd6034b6de88287aa59c6997a5a324ba11718218e1b853f44fb3694a957caf6a1078e0c87ed6f9d6ae60b3c972ab9b7ef1a9bd94eb00c3564281e86ec1393065ca87e7e268efbb6e8b796a4dfa4455b5912b570527286b213129b9bccb4b63d0e2f959336c3ceeb688a7ffafdb1ae5be5879306534777efc8ec1a9b511f6946143a367927f6311bf36b2631eaf05c324353dab5f4988aeae3ecaf14dbbda3d69908a6df0bcc6c2dfeef3d8f896a5b95e077491f473e7e8f8f4e2f4fdf6ceef0747af8be391821ba80ab2760b28a22a0087512a186749aa6f522e4daf195756f783cfb439a923a59090971253802c23a706e287094ad84d9c88ba96d1993e32633bb9984d69ed4bb9be31844bab4c7485586dbf51fab97372ba7db8a757dfad7a300d445831746a2a29f0835c5eb58a30626951c6877717a7c717bbdba77bcd26129d283d4d8251c4af1b94fed9393a3eda6b367f634880ebcdbc694f847a388cd461d524c9b6d497103f80c54ff9c582c79dcdcba934276c8e30d9a5d7c8555ad3536b473dc98f6c73360b1cb4dd6092c770608f6ef2133576eb9cdafb5483d29b6673a45cc111ae825732c8314960bd38a60f51c8b888c4bd576b25c2604f23a9486623314b4a77fd2cb0375c3f5064ccc56ba1f4921ba51a381dc361cc6328490fcfe7e45d79590ba3d04966dc9904dfee9d8847220a26d13706d7a4f6caa0376a9972b4aa3d0698bfe8c39cec9498b43725af59fdbfbc9ddc42059caf21308579a8eecad6fe2dc835ab63eab7f52851c6c4fe9ca43698c00f15002ae6f626bf6dbbd9927c1478bd18bef3cd21371beee587db889177605da3a4c8097a74674c30b1cd12128c73f65e4973310a304973867eab912a96be885244cc6832d4cf1af85b33390fa09c9d84056a27557164d609f3fd1502ba4f4e83e49a093b66dbe2087379412c9117d2665353f6247941681e5a1879c116a18e4a63d0ea4df3de591e25c5a398a48ab995d331cd195c9d06f30cde5891204f125313b2a7db744213d9b15f651489d0c39c4c706eda2293a424fb209bd50b48a5c53d418a86f6625269682f218b0dedf139798302c2f0dc8cfcfd42fcc17dc4e98c24f5a68fe07e51b14445f5eaec4f3149b0d5d8fbd65dc235c97968392ccbd6ad10bc17b7e0007bd8f3b3cc4d612897a371966d58d973ee76dd2f4a3ea818f0ed08f58c5d95d1edffde09d42779908bb664c03d9da01831c4f4826c010c14c034b829e5fba2a295abd522da1257de97dea0cea3cfe4323146c23cc872841add9231b2be46626c50927ed2b196c57228d74268815cdb866cdd71b0e50fc3f2a106e224968b35dccb40b9d12070b78c7fb52e35271dc6c792a14fa8d0dbcb37fa10327623574aa8ae6e29bd49ec9a4168e26f92f8eede6b74ad75f943cd2b19dfbc1a0ff8aa3d1931e5e5b83c56115cbfa966fc48cfd00126bfd133b460d75d299079c7bc907ab2ec52fd1cf2a70e1a4d55efbb83c702ac1b445672dd60b292af5043f9cd7c4bcfd07b4c7e7ea49a7af3ee0b8fcdb1c583bc2e39e3ac765a7f312a1f005ea3073350d2d37fef1dc060f89b3e5cc67795cdbeaa8279b5d66cfe81dccbf82e7f7ee883f5929ee4713e31c4c86b24d75660a4881c5d1df6f72c984846159afe69a500686d39235e2e03cfc934b8791ad66970b394f6eb45bc2576e031bc29134bf17e59c4ab469857edf385a953a8b87a3e94a3054cc3567e9082b6dcc07af0fc26cc2b9c1b12c88d49624e0ccf712f943d974ad2a35bff2498c49473cb28ebab4031e40f3089e7246157dedb9c2dfc4d8de78f9afbf47e9e93df172cb0eb7cd5db55aad924ece4dc1755fdce262bbe637bcdd1aa515a9dc6e071f79185405426b4a8cc60813d065c5ca3b02275922d358d8b29f90768cd91bb7777c34682854ecc9913278eb88d8b6a3922768a23e18edb622db7e3ec46219c5d05a311b0fc921d7244722fa167295bc8e10469c135f7dd5cfd07bce2df754a9562b5f85df2b17f4b6e577bb1fe4cfe248cc98dab57bd45a39c12a88d0beee7919482a35932a1c1b0eb67d9c3bcd89c6c0305c81fa107c9d2c4308f523252867f1e53fc9294e118650c3da8f5c13bee14a2cc1c13bee8c2acf6f183bcfbd9f271f29846b2d994b3a73ab1bf8b558db50574a22fbc8779b1ef5ec3cb1c0978e7ad51fb4b7048248952e2a89f2c63fad775095ce86128c1f32dce741b51c14ac23cfbffd87bdbeeb66d6c7ff4fdf914146716038c6045ee4c3be74a4174d2246dddda49264ea7cda85a0e2d41161b09d480901d8fa5fbd9efc2c63349c94e677ad6fdaff57f91582441108f1bfbf1b7c72cd2b6d0a3e3094dc33b295165bccc4dfb139afa4bfdf8cdebf3f393af4fdf5f801c4d551df12d5d4c3ffd6242537d7387feb1dda27fd03b35a9cd66bdd21f533ff4fba7afbf85ba4f5f9b667dfdf6e5b31fa042f895eed0cfdb2dfa192ad4231d875182a40e8a71ca822d98b37d5a4c11b06c0594b289579b6a041d229e840a8a81d3439b47e1c80ecc3d180b5bb26f4bc6e337f0def70b863a7d4c389d32a41838ab4729f815c9a9f55d2605ed0f8b27f9b0b0bed32515e302c4ca73864a0cbbe219ebcd8a4a1108b03c7c5d6ef82c1705ab70a95620325ed24a223337bce866e529a68e289d38b4d3df8176a85d6f13ea86eaaf592968adc698440f8f03e9a264a86e2d78c67ae0fb10b94006f633160018051aa7aaf8177bda1f3e633ded31a893ecb1b55c3ced43c21c20d3e419eb357c5ab7db8eccb2d4b816eb26303e2fc594699f936abbd544de1bab581c64abe770a87bcb7a9cddbcb673083a1f73daf89935b3da3deef7d50b1b7ea9a6ea055b57cfcb0d97b44f584f6cf8c98c82410a7e3a58fcd6211aeae96f3e80c8230abddab336726aec9e3c581fc1cdd01ca87a235437ed0cb77fb320ad36e46871f3f08ac6a34644a4182439ed938236078a94b43f2c9f14c3526d0bf09eaf281f9713ec35d6598642fdf531c93b94965986b892cf2b4cf26e1793aab9ca9f0ac8b3d4f204ef6c2e6af0e28fe75b1d100595d66009a6d8e2e868e8da27c745dcbeb70c5584411bbc9a7d072fe6f022c41e0c8f6df7f203ddeb93135d1bde2946a5a65e6ddbcb82b0865a75a716f24a1d36244800b169d97c05bf1a86f318e608f783c05537de3224c77c42181eb6b5a36627705f9d055f553412346081c6dcea8de68abe04c4459535b1b6ed3be6e00a86690c4e8b39b462cf0e0b0cc141632362032ee0c1276b4f2823817d6d653fd628156407614e7bdf18cbdac4e3bbf6f1f62586fbb6683c836afaf618017c5dda407ca196e22da3c701e65a8d6ab638089b121a903cf2f4709c1418513f69ca4c3b7d22026b2bab83ba5d32ad7a89168d8b0e2622a06d918702656aeecdc23a63280f17d665ad1f7d92eb85f92f0bd050d0bbb560d77e898002905d3fab9f3d83537dfac70f61ae079631286531bf3d5fdf0e3ac704bcf6df152b3610443b139ecc06b7acdb253abef699bd77c1dc905d305af46c61520416615841176ab53057409d94a989dd4e7273e8ca7cfab1073a7d259ecc4b71c5a4124ae6052faa4592735372946272c128ebc5ad215e27a58737cbd459556dd66bc1aa2af22fada8eaf40d43acd73a624096eacf60c0b49547311bfab11f7d3893ed3092035f3e0e0ce12c303710414fd560c12ae2540654e7063872cbc30426f27d84c0f4a3951498673131b8691203572e3047b3c00a415bf8a036de88f6a147928674b4ad1c77f9e0b40d3b66c35d230042d1293aad114c1fa34168139c54d670ed8ae510a1ae66dfdd2ab20c15f4b5d562e9cd55d210945a98ec6e763c4bafe2e4a434c214298df28916a4ec2df2ea47ae0da46ca68792768e49a995ad9423196a4376754383f6c1b35d7666e169c9b54ca6a8c72ed7a9ba028b23b5ee272323a5eb281424f100f1a058607f00918fe39d357e7acdfd8c411ff591df22ddbb0da78df7bab41845578861258387d5d673c740791815c55e2203e6a633ebb057ec06be8f18c69a6bfef1d5f3ef9ebdfaf6e50b7c67fc012a268362bbf86bb57aea003995316c13c14da24bb39d4a037d7667f46770a16a1ca41a270164e5bf6b6fbc9dd68c39f540d8cca11a6d5bd43926e84eda556451fa6114bc978571b8d0ab2ac8194e181e859f6819e1d6fe06b03e7abcfd4febd01199f411269519962cdbd8018907211c1e3f20a45ccef44fb9c371e3aeda521526c1c7ad1b82cd441d2ec360106ad5ba989cb6959a5b1cbbda4b46b46b07469059c6d043a63f9818d76dbd3776982cf77cfa702e7b2d36d75eb8df97a09b8e0d043a34a79b4ed2b892fd48689f90ff70fc65eb242acb37a25815b2b866937d8d70d9e97744eed03b4cde317a85ea543925ef19262fd87e272433f187b9f7d097484b0566eb3424a583ce48f7f8303dd457494bd2bfc171299040a1548b9cae51de2e56f9ba98d1f40f70a80514c30acc90ccd676ca0579061d7dbbe1bce057e74c4a2682fbc619c6b8c29005826d4a52f080e75749b9d6e24929121b2b3948ae984cdd16f5620abc19388a59dda2d5d806e73200644a9b25a1d2adba369b5cafe7237d37d54571441115a3073f2050dd447b9e3bb5ee766b1598a350db3bf027bd393ea6e5da38fb4af6495a3af8cf4d219863de68a7c31a3775d18f8cad9f2d8b6b0665dcd5211f349080c3d5df7988b3545de0bac7632a5606fec75ca7da7665ed539feb5fe57da8dafde4feafcb5eb341b563b4bee941c27a7e3b5db264c6a4b611998024c37327e6a4d0fb6c602f678140d3d71c57c1bf56f2eb76eb78bd58256a327bb9953f42d65d9014ccb20f5004d41acfb8b5de201cc6a4fcffc04b305ec7a3036e7f8307ed967dcd0c36b15ffb78e0474b93c09b5cf06797e546fe6843f5940c8a3001ffca80fe1bd9000655f3499d632da91a146d1a33d960bb30ee4f4cdb367c4c43b4ccd6b5b44e416df5ef7d5ec57529c0e609d2f41edf2d1c7665746891f4dd8225ba5052cedd719440df9247d1a27e94145522c5ad3ac2649968c62d2964c596736f08559c239f0505729e5c782be885ae9a38e8421da1e7bf6c9dae4629de73ce1a01d877cf8b96faf4818cbcd693adfda8de69d018080ce91cd7fd4ce37db567c28c7441f73057b4ce5ef1b679ee6322a8dc6e61a6e10fc7db6d27145458e80c64d7b26154301171d3c3da9bc28a4b1f15f1337dd2a23ee87609c3922ef51eaaf325c151ef517cee3159b891b295d4a72db064dc5f36f45f6c3370d4fb7374d4cec9d5b6d1a652f3d8380a1c31de6ed186059ea566224c3c59ed906b15877c0659a2d632c9cdcb2e8db144a8b6e00a6dc137e0f762bb95d69c082a4c86da8548ee65aac28b52f90ef46d25de01cb9ad3a27118b613ca287aa8e697fd00e1eb731db9bdf015ac021fd4a18531f65b8431f66f0b63e0627e0eb258c487a7e405c3e435a3e3d4c6a3a510b8ee189394a4b19d32f578296f6bfc70eae3f2eda310df21c0276879b366854849dabe2d531daaafdae91420e984bc618d3d60c157bfd40bdf95a6773be2d991168b4c40f64235668b9c6707cd5e1b56c95eae5b04cbcac9a9e6a91d03ffc0517fffc8ca6a4df56ca75f7fa2ad38f67e3c7baea2708edd87af00dd2752587f97f3d9322cb36ff25dcdfb97404da66e5b08ae88fdccf3c0d3de3d6c5f19be6f7b35efe4258bdcfd7ff5be01e986ebc8bc998f09bc29f8acbc19e93f03a7ef142331682baef88a91fa6ff05287613d676a1abe83863f6b3996d5e7835c40176a399d18471290fd9ff6b3ac639f68eca52acb90aaf75889cfb507b51b7607742845eac879c3b0bde52b79ce46b5d746a8b52d5d7a5cffa2df532082ef7946ef768db6e241fb479adfa0a6e5035431b04a959bf8c0f98e6db773a4f842c1925cb064b559ca62bd64249915f339138ccbc474bb52dcdb5979f933d892ae592f39cb3fb2a4da08a66f1755b22cf31978d42d6f93924fc1af6e53b1e483037f4277495195cb5cb2000e6b9048b161c90e7f48f10e93634c4cc37728f0a57d1538a33c0b2c2bdf783bb27ecd1b4b75ace3d131a5f43573889012837d6b2c2754fd8787adb69b4ec3cd24f07d671607c04b4bf96c067933dae496a72d22cf5e19a7a56ce0daf2b6e5d31aa1577d1ddcf46b326696fdc4a24853b8bc33fec5ed2a3c68dc3eed1ef090adf45987a9331c7c4cc95b775e12ee76fd23256429e1a54fe9d1912f82effea9f6b60f36dff7351382ce5a2051d5bc0ef901fd24047f35060af1baaab3ed9e7a9fb7682410c68487de6c2f589671cb672a76645f4fe8380c1bfe7b6c9adcef19615cb2e408497db682053756a0ea6516eb544d6922237def5836f4a7ddee8432c2ea030014ab31287dd2543b218c01e67880da57a69f7545ae616192c893eb6be622f7a725afcaa5da335726641f86864d94e8ca42b9d598c721307fb6614a3ecd9329eceba4e00310756df91443ffac1a97d29fb597a35d49e3c9b01328d88df7423147d6c3e8293d667fc6a15d8feb6d90a29ccf9255ce6f935529184ef1d03e49bbdeeb4c600344fa8b4cb169573d6c32cbe2eb76d58c53794123bbc75a417225d5a0724b55bfb12fa43376b9b9ba6262f80b7ffca75fb8198168307fe1bff0f7e5068e06c62513a00e581455722958fe31599705970efbc0f3ee8d19b964f0a69aae59a286259c025580973789a2b5aa5821bd46a1f70bff7e53c9645e2a020dda03f07680aa4007512dcacd720615548c01b8c942b5e55a96e5121cb9d5edb560d3a262cbdbe46691cb645d30753acd550d22999633a61aa1bae17aa8bfff0b7f673f3917f94a7f520dc7b22cd5a604c57e5125b94c962caf64f2ff7e75f4dfbafc11bca02aeaa9714cbb88c5c401c23f5ac41d9f216dfca7c92f8f1f5f91f431a448c3dd54d5f40efae75703b401da1ccc402ed8407f96dbf5c575057f7afc0b4f92244931326011dfef3527396f9d5a64bb650f1b4e02da97403147b21ef05ef213b72fa9b115b0804fa63cb61f04ccaf7890bdcade7c98f1ebb015eab32c4945f5a2a8d6651558c62e8aea7cba60b3cd32bea976d947732885f78dd4b2d7b0f4592611a33ad19fafcbe3f67ee385b0c92e836bd48df0e077f29526695a4bf24f5617ba7b61057b84edf023b528f98d03b70b5f0eb2f3d881879b5eb75b1f7eab1ef65d8d2722503386cb34a82e2c1f3aa539dbfb4b802e2bd4ebfea406a70a086e6fd13aeecb38e4fb040e6bfde622e91b9c15abb1b3317078b86f3ded5b7afe6b59e6945d39031ef9dece49ada636e1fb6d0007adefed71ac700acb9028e0c61de3f0a11588879dea8d32dd047c59989f977caa7634137014251b3ecd37570b69b0e7c04d4a1d1137799540053cb9bc4df2c4cae64aa6b16c0c68b24bceb8248eb1581495622b867bddd8469691b9c90577e043c8a00a71ffa1ba46de56c7662499179f0c0e513977e7566efd1f97e50d4ef1c07e080a224e1838d81fd054b4c3bc586e53430ee0fa4ccff4026a31a9d9a565a94948271bab7abbd5fbd7ad42b0c1344d77a60ab147536f5ad3bb2cf84c57e4b404e3f713ad8b650fd550ba736e1c4d455d1b09cc48bcaae3f3529d877f94de9b854582ed1fc370987b26c80858a4d67910140ebd67655f868712f2dbdd53be5a2f8ba9e2248f0d8ff06dab1f9bdaf7be23ff8c65bda7fded565d355472dbedb70cfd108aa43fd8375bd477fd5651d0150029d0ca804ffb437c77dcef53daedca2c43f10e70d399cc4a56f147329996fc9a892b232254001da5fe4896e473c94472dcef271ae20dcebae48d282ff3cbe5ad623205d3485f53b0151bc653efde6be6fc110749da65e3fe045c36f4a8f6310e9cf083db443b2b7397d0e249ae935a8cc5243c0c118892adba4e98acbf81bada6b88bf67c172fb47205e7ecb86e1c406b9ce510b14a9d4d04d81a8fa73b8745be85aaf5adf4e9213354abc3c2ad76a94eac068551a2de7a07626153b1a87f648d9967cda8b65e67fe3e8a6cb19e43ff06fb74f488c1b5647250970c476262c3782003044e5eec1b590e0e5168813685b1ee4e5c73b17a4c5758ac076b037efe87a6860daf1d3d4c343782c9de33a204b137ae5daa4c12142c7e0e2ddce508c46ae27d510d3beb650ce2c6bcbce345223631da19e6cb8fa651ddf9fa68461487cffa0bae4484738e0c19ecf37211160b50d3a5a732d2592b83dcc542bb8355c5dd0604978e0988a435a99cbc863f28ab500748cd8e040d75b478b0db4646519c2209c32581fed69b034c84714c01184024a1754617ba97a07c72cc3a1c6af323dabc12ecdb04de8a36ec87afcec339d9a400b94da25d8892a22cb3a6af12ef35bac93a17dcf9088c092bd510a9578a73da5e04423b245a034cca3ded71b35ada4a09de3e19eca8bed161560bf8da862a11581219fc38336e007b423185f84ef98a2af76d307021ce121e383f04ec81e88a77b37184ca518213b6b96e8819be3808f3e6fd75bd77dc3c1b8fa547f1bb0287aa56b282669b09a98dc0dee2195318603bef31f530c539d0ced34515eb667a28d98928d8c3038dc9a1a05bf074cafae518b3a2d309d4862cae1dd60194480cc64036a4c038b99350f0117a4a4dc2ef6587d422a2a242a41a70c6b658404751724a7323c1f8340a97ccfa1e0638683400c2589e281c464493b3cda5a5c778a6cd456e098ccd5525fa8c5bda2bce91c1abb8472e748ea9c43c9da6ea332da46f3ed7639ba4078b0d86ed1427d64832e6097f8cef2d6ddea46fa424bffd0b8ce3a92951d76eadaecc1ba6705a70cadf150d2f976db59a18270b5eb2155c03ccb786f5e0876b25ab159914bb6bccdb20a15648d892a0eee7bdbadbd936568ae987a1f471deed6756db7fa884759838d5948d49225409709421b0fbd16a60aa8bfb890f578bb16c22f466f804dc083375c13c2d64262c049495937f5ee0d2e8fdab89c8cd47f60032bf040fdb62edf685c4c707056398b6f3e6693113077838624a72a1832130f0bb6adc2dab6b4ddc0e4a454e5421e6825c300d8d87a07f1ccfb2cf010d7df66372739dda75e8080672bac5b6d93508374c08e4f2a670569b3e10fad6b953a86eb66d22c43a84d016711bf427fd356f100ebe0c146c556877ec912452f00ce785e06765da12b4a727eebd4138a6dff0e8cf4cf55cbc088f72b43b8cd349d65287864add31698fb9935dc3a45b2da6d16c3cd784c191c08a9511f3a7d407348ddda1f2c95a00856094074e81ceb029c5d33014f8f83a7164c4097c99737f96da50ad9fba6a8436244a9d1091a5fc979299247f1f27aa4b53fddf4114998859679049f7f449247fa1b8f12f5a26df4a314c4b89a97c9b215048102095a463808cb9d1b2dae2336f73b98747830b6a52e7dc8dba45306e52b5dfe90eb49a7222de1d09d836f055f1071fb63cf958e084ae659a677489e65b1c0f9d3b3b7af4e5e7d3b48202f523267b9dc0806ce083dbd926f8ae53279f5fa5d22d8b4bc6622998b72a5d5685572b3603cf9d0bed53fa84dc0b87a32eba5a045dbe747d3c93129b2ec1f0c20132d615acb7b70e5d92850280d588892c86c1cb31cb3c9b09e3e71bb45828ec5c48247dd87c90c5ac0828a9e60b3cd3414f365209f4139d0f6911c0f8b2c6b172055a142315b516e012c501e00bdfbc3bb711cdd4a24e88f009be9a03e19269f2061a04626cb5da41f2632cbae6d1d390ea3ff6fe541a0b5ed1685706adf0ffe1ecccd75bd59a4d091e28ad30264077a8a640cecb9a425aa30d9d0a503f6dc68604f7f4bd736a31b23024eef9d1b496678a875fb738a789641e0011ff1f16c3298aaf7468c0d04468cccc814504ae7fba646159987d09ffb52056cb2ccb41d8279971efab3d0dce3f270aa00f7501b01dcb05ec502eea5446fb8d110b8329732088a26821a04420deeebbdbb9cdd2fcb9a182d4ffb59864464f4a3a80e93309e10d91e2702ce413cd08f2a56d06859213d0f06b8b14b897108657016f7ee635bef3e06dc486bcfda6417ef22e13beb017476d0402483d0ba0047fd707dea5ddd998f100d064a9a5349fb9ebdbe9156945eb1aacaaf184dbf397dfdd3c5f367af9ebf3c3d7df92248a9f049ee0371ba0944a3f750eab8d3a66f9923c8f2698ecb2a3976f86be02230cd392fa5624a36159b45586a06594fd2a67a64be2c6f9ea62d09149cf2018425df1c52d06ef75492520961b29b26478add29668324ed1670a944dc9438159c2000e96b42d0979a7711e5aaa858840fe9a85c30c04bbb22f8d0d660300bf67dfcb660cb599276f36e979440594cf6e992b0263a9450ab1610f6bdfcfb6f7e12b6fb677e73864cb20db9ddb6b0feb22717cca54a91407c460c49a3a518a08a9a01ed095695cb6bff0cc3ab68493678a8ab413322f08e534196c82abdfc79b2ec4d21b7dedeceeac771e62d8388fc4ea2ca060195862cda4f10d968a2f14a77ed5a2b51f11d289738f890dec860f0b4691863b20c68e63bd82d6dec81e986a209fa572857be907176ea628e2e23b4d577105b24e84b75e90ca71d80647508613610c9ea213b0de83e5d4457a398833a9881f048065ab043fece3e543d1eea3682e2360adcf7f2bc2606b754c847b142cce75cd42df6a1ee6ab95accc938662378232c2f75f9a03dafe59ed4e59d63358ca12463b13fc301d7a53a6cfc7ea2174ed55be41592384ea6c2a93958ec8a3e0fb584e7b167e79b90263730508fcdaca886072fbd8c8eb2e6ec076f45fdff353e02b533a262227ccf471dbdc6b2acd94d0b08dc8121d86e5fc0d5df746c14f42bf8d6f3b063fb4e93ce3126bfc67dfbee617dfbb5deb767e1f75e6b9062d5832b267f60b715c203d860a3e0f0651ad613e3c1e9fe4717ba2a388551ebba933b6ca187bde773b335d0c05a35810be0584e543d970f290bb13260d86f6bb99eb3b0ed804a8e1a8dfce6331b39964435f3a1ed54c54d4b277b9a6a32fc3e689c55759396a13e910188e9172d0bcd6056e3628ef46e763904de4f000fd22c72ddd4613e12bd1b5148a6556ca2051d1c585f2bb2bcb4c28e4b740f638321ea13ea702178a7e681763cf754fda249d56d4a7ebff075268c5c54ec84ab7a8ffb189305924f699fa4af4a99e48956780063ec741ba90da08d73ac59b03dd93dc630ab946b9f20685400bb252329aa54e24d8161cc4b5280322f962602bf774f6df5b8c37ed4194a6df7c3e1723ef18df18a9ffc6f0c198bdd29bc237e4c41f5a6d1078fa19197661d9bcbd3f852af72edcfe1fde0eb4bfa5f7ee4cc07718db0c989fb905eb676ffa827b5da7e94755bd303cee140b3604f62239668903757aa81b51d9dc6f61dd0729b12bb9b006f85c6d04da09cf14f0d68bda4773aae1f62fc2bb07e7d5a97429ee5ebea59a5ab80db824d37a2622faf99b8958b825f0d3ac78165e9ebc650246a1ffbaa15b766b72d096ca9df87da2073aea79765b96479c81dc1828bdb2a7798c8ed1649fa77a99dc4fd43ea0daed1fd5147df6be94db370ad4eb06229def52c5f7b2f8dc80fbec39b356759e7b9f4ac8c0e466ea48d93d1630bbf85037e025c0223a7e95cb2e8ad772cf88c121320f053430a6ae07189b3ec99d4b8b720eac7fdb33114592662fe4b83422b3251ccd1853a89b6db58f926b195f0be860441643cd13625b9ffb03503a72494dc52cd228422d5b1be7dc819636e974f2ac04f05b38aa292cef0b2d3644d35ad3de59ec494d273166c11cf8cf25ecbb2b75a77d3238bdbe3a3d2dbd42812df2de118b2ddc35ab0d1896dc2c1b9a7968dd1bc84d56c769aaadfd3c9b37cfd999d9c859d3ccbd7f7358fe4f86e06fb3927510b67d0d1a9adee6ef7909aa6e37c4283e540a63badf76babe514c936b4f81cdfcd4d35e37ce26a9a3bdae85d0ce5e7a4ef54077898b6d308229de361934ab1b13d778e8e27402e586f5dae2d7c86a0df2aae4e07b3d7e4c85ad88d86ba3918e5239c2fac34d12a46299f621256c747268a67f073eff47580550b8df198e206435e0389f707de05b325e60aca1cdb324a281bf72758dffea2769b40129de0a4ff67bb4f8c5526fcab0e9b6b0dfb757ec83b4cd66dc26d2e4ddbad6c41d297a37f9874097f9316cef52e14b4ff5653275856c81fef3da93d2234fe727b6ca99af142f16891933eb20a9520fdea4fdfbd7c75f1eee4ece5eb1fdfa57aa9388700e7c3edee68bd09716dc036618777aff869c1ac2391a6cf8acfb0a8586c3e57c341c0d41d0130487c07b83a485a2f628489c8b2e992e5c27651609223edb4e0b66780d9fa8fe868bf7659e59a0ac22067030cb8200582245512933bd3d741ae0e8a28f6a144aa017accbc5a1654491e83d7e8bc78a8b1fe39d2d78edf07a99c58a0316e7aa16db78d05c0daf24601fd929cde2df2aaa65351c738a5f4fd769b06309ca9c97c4c297d63951e7d436ba0b5ce02a0e666c42ddbabc37a6b4e419ff71d9090c34f1141794d742be64884bcc73b7bda0b03d011a9bfb445d2b691e4bbb0edc103e69ca2da59dd4ec7bc819c284a3a7d480ba8c4166bdf69555af977a14f5e3ad2359437fc07765b0d5acc04bafc47765b3d93e5aa8926f996cd97eae43555a83d0898c88ccb979f24e31020de56f11ca52f6e79be2aa64176944493a42a50f1cf45f92fc6539d7fc0b3d89cc7996cdf88f213e482e1915bbf4ea9436508cb2b5af15603b4cb529b58c26b6752f2d5e411944b5c5cc7c10637e8d8674537562489c9aae18ac4028b93c4c3a3639df4845b3991111dbce9bd03a3563894757ba20bba44f5a68d27d8c0f2db1c15c3fc49916568813a485231ce278a83dd6e650fb06cd313fb7ab2305100d62fc4f6a804e63e29850fa7b5998e88c4c3bcdbf57c4f08fbcec393abda332fbac200f7ad71ab657696b5d9a9bda1d10de37bbfdb1c6d1a73a4bd8ae2cf9b3c93ce620e3384041556af8683d98221353335340309ac2ba7774dea67875e514050570e525d151040a7c004e1e5141e203c68d076395a80bba94972a7f884a6de74bb2daa57f92b459617bc968651df1ccbc900f407716d5e7f825b127705cafda0e5467b5cc54de79834db9e650b487ce41aafc867e3a80a9bafb55583f8b5a0959afe3e9cda79e55e0289ab1e40e4a6bc25d0563b9006d541dff7c7dbdaec23a4241af763ce11d759c5726a008d2a52d0f7a4a41569f71950afefcda7de74d9d55115e54e7f7b191068f7bd994e7c561902bd2490f4d0b2dd5a3ed410fb431b73f45321175abeee933e618035bf71060f2d54cef9a180650b2a79c3d9cc0615ebf678fc20688e31e14a0b3bfb032f6fb85e5e36de3797e5caa605de6ef74d87410b32a62bd7b4503324d51561dd74dceb4d52ef39ca7e1fd4f07dd5560fafd7cfd4d3be51a547cf1bdf79308ef4fdc06975d64a8b4b10565e8796d6736900a6f5124a8956c1f6493e9bb15980325d592aab9f807362f4d86473d29cd36c309ed89fba681d96ba169b18d0a77dc1ce792b7fd56c4203f2b1b56eade968e8aad976cb9ef48dec14485a5a9e06ba34495e6f6452ce13a18e270852b34e15cdc6a83dccc094a97e3c95fefce261fea42309116c43f1841d4917b8e69c0e347656bcc725e9136e8c1dad05189147f591d6d00ced0362c4006657736d5fef1993497256ce8a7931d5e0092e147800317db0b079be4cacdf3b4047e43c646961502168581ff8b35e6aa2b16b2de8d23a0e61dce346363de3fcb728aaa181dc87456465dbf6d9f201a82346fb03f6341f319a0fd8933e04a49ee572d15be59f509fe45da628186d53208cf22336d08a5939ea0f82b7f4cf029459470c3752aa6fea69018ad6b40007362f8b779e347b999b84018595e4364309f9aa7d59c269d183d23b4eb5ced774870f78dd2418a8ee83940281238916d183b57922d9aa3ae1b2d404d54c9365290db50a3f6b407e75861398e373cb427252b640f557a8ac8336b47db97da50c036c9a27c7ec2f669c9008570a36353a97a6251a33222784e3b6755599e6b2aef743088fd566597572f7a6259fe6eae06ba9ab2bb19292a35e0623f47c512c673fc23edfb3213afe90cf3200b7b409174841f3ed568cf62e348b9d69179a4f47e0a133f90e16feb04eb47d7e87dc277628f0de8ee8a9fecff761cf6619707be6c5dbc7ae88e8dcb347cde7f674873059707ae70efc365e1802c0de4f02171a9d5217cebc76c9a5edb837b558d31fb86910d0c8b544a805bb14f5f18e18209d41dd975a9f71e3f713afa66f329fb2c613401a8af2fbf3bddfd59c852ef4fad5be62eaa92aa53f581b087fac2ace837e31144d15bd39578fbe0895f462126c5bd531a3e36ee44b8d75dde3494daf9d370fe0ba8ebba548e00cd6fa541df1a4767f9fa9d7cef8be6a94c41e8eedbf6bd5a8ad04def830afad03104a789d5b5b97eb7b16a43b3d6d0fa31a8e8e491f93633cee4f76a45a14f3b608cc687ddbc21bde28febb8f497fcf2828215954ac19d115ee10efd86d8a9b538885318ca42a85dcb371eb15c99e2a6c6d26512d9a08ee270090422f3e7ba53b2303d00c3b124f8f8e5dd20d3d0f80ac06fad52bb6afc16a2c8bb9718a654f6a94c53bc2ee110e6a797cccdb6336c1c336cc05c3df3f9392add680a526580e58379a49856e25085254630d76535449a9c501882baed4d35a2bbb29ee256f964cd182e9824d3f26fa7e322f44257b569c80f7d5278a29ab74c48dd17e1878e9e4f216a271940cdc92b93d5a8081561e449027c291b18a211ef1c162cc609005473ce439f99eb44bdc1ca74d26a0c661027fe9b2502149b9e71425c921b9569e654835804ac2f7b03148e768373e51464471fd392caa9dc08c453344129d62bca892652eae985013c993b4ebaa1c36b72d237d329613bcdbed86e354b3672949d52ebc4d493a2f9690302635a6e694a4660ba424fdb52c784a5225cd9cb89bab7c0dc8d5b38de245cc8fb7c5d542555b690e25adca95fa636176e0e76939cd97ccdc98b487662cf83846e88e37d49eed6249d8be5dedb6f2984d5ca2c91051c370c02b4ed63ccec00483f86cb62a7851490d099392390fe393430ee8023c5fd71cb1f1fb0906c5d52d27d79cdeedc8d53d1aac5084d3dcd04943c60a5a7696afdb7551613e21cd878f577c42af0d4f7e614d3ef43c4c1d64fc554d56060f9caee7eb5d7e35a1e9194c7dd3b9ff2c5f3757332ce655be4e6c74b72a96accbe5ed5c51080d60c892e94600e4f0a5286f2a267ac973203497f9255b1eb9d2904a49b0a35fabc7acfaeaf12a5ff77eadacb47d31cb656e5d964c2717797596afe39b2b26aec2340221fbae5e68d361f90f8035afae96a8bf15439b755add0a7054b5ae3538846ddbc1e268dc289cf4a0752fef8d4ec0bc4cde927022d3ee0d62b89b8e52d239b64364eaac18d89d3199cb1ae0853b906c51e3330921511ea1a205ed3fce4d121374d73f4da503e580f0ca01a0d57c64a9f520cd67b33da9f224d14155bb9a7b098cb8a4a2913a906b55e985aedb643d24126be9ea229fcdfc3d18c5ba1e550dc28129162ee35f07d5bb94eab76b5d31ed8f6302c2b1b2e3e7e44241f9e8408d3e79a05fab7aed982844f3492df29971f967ecb9213d59688882d28ede77b0305e7229d4b102a25afcb930b5a40b9a3145c2e544b8972e05d85aec58c4a3dffceee18516ec1a0e66bba03d12b7d65d57bcd76b0dba07f936152b504fb6295b926dea25eea630a762742015a4574144531632287af6faa4de2b22fc58e6759c3eb7bef7f6d0e917ddfc63f2cf668a12e1e80ef1ac10e131c90172c3cd98394a23ad833ce17b16525f49157bd7dfceb995b58d669354ec19b97898f62707ab917ebd25470d7d1d6a6e369d7f64d02cda9a3de67732fca851dc0bbabadfd923e88de6035a72af54edf08b4ad8243c8c4985ca4cf88ba537df7074c7d9a75609f78953d61ad436ed93cec7b2db9d60322b391b748e77833bfdabbfdbed6aed336120ffe9062ac2ec1ae7360234cb82c1e9068f8589541178e2da6b88dade568fd18ad3f7c4705a1a71b014786f821a17eb12f7ddf0d16d3b9c88c86524a7a5d734ba20f64207b1fb5bd61fb84285d9b85f40d8fbb83f2133ba1c1f4f8636db3399918dc6390ba2cef99ea8f322cbccc7c0809dfba8738359944751e7dcb2942eea3cea363073fb0e66336c973a100d31ca8c0eae41dc6ed5ee3e55dbf7100eaa0472c6091bf309444dc55ee11046d12acf98931cc118aab5d39f909c72358651d54211258c0767aa2e48cfe95cd93ae0e8ac33146ab7028fbfa5d12ca6cbbcaa5865c47abe60a290fac959be06335f589f419b6f6d3069e932c09a0d5ca85f6b33149b0f1f4cbbfa806f7252a0bf6ddfa0c3da9ccc58e3fc9184d7bc9f4a1f620731587639e77a39fb5b562f909b847e01bed02ecc32d6be68f32c335582fc25fca23539cb44b468a559b4d22d5adc4c466954d4f72cde96539813416f11a70cdb84e53002bcbe1e391eed377a55e0c634ee4ff47ae378bbbd546b3d0cace32e7ad14ff7159389baab27fa51dae510e9340ce9aa7dada7d50a6ddf07f00511e8d976b86def05c770cc3a4a2fc6b975b6070e23c8da9e56c5bf584aeeda51ee3ee37454f5ec22e8bc7edd4966876b50c36f5e7fffbab1f295cc4fef768d55ed389cfb577485724fa097b450c465430b455cf8b8e101b51c2d07376889277463d7bdc477ccae7b7960ddcb70ddcbb675cf5c164bb3eeadf8d5cc24d772bc1929bd2da9ede1dc737a6c1f927e2ea03661052613dd5d9276f7f0077be37a6e90c43a136c104e6bf22e9024c5dd34d9d551a30f7abeec733279b88fcd0e617259536081cee68a6372064aa88fff5925d4399391122a543addf2093de3a4a6a27129c12ff29a0eea90e6e99cc956cdd339937b344f15935ef374cee47f48f3543119689e9afe5f2cf2ff624480018b79647dc8f2d1ae83fa9d4482dfe3e4d5c4d0058aff9f7602ff4e3c73450bd745c32057a4fa5f6490ff3307e1017fb5df7a08e6b3d901251a724a08b0ee7837a256adda7eed60a0564b9c0e3610e3f15d53ed051d8278fa166720505fb5f94758a544bb96ee500b9d1e275481ed8246ffde0a48a76b6a5742fe9b3ac87bd58cadde26ff8e92f0a0e2fedea50c213a0d8d0dab138cbd0a863e91fb340b2d3a0747300f691d0cb884339977e931110d1dc9588ec584f0b1984c1ea22139a417b2adba4fe773604887f7aa5b6a27c66fd40b45b3f4190aa287895ca7f7eb0b1a823f92fa80457b44ea408e8170692d4e7ffcedaf1e96c415db738f24fe3b33a10f63f7cf996c67f71f9439bac9aed738ef1ae33d46b79fa56a0b7684e2a94f6b3c3570a31f39263707b9e928b84333d30e57418b2fb9b862d2264bb38e950d4eba0e146373a33943ae0e56e0c6889bb63297224af1cddafa1b29b26b29c345210f9849744748e46f1a584d449c040f0b0d91e1d158bc69509dd8a8a89f632d3613edcab1ddf2168dbf3bd7623f0e6dbf110fb6dfc4ae9907ec37be2dee1c14f71a7244dd9013bb5cee1e6a68b6e0d03fb0dbca665d0a6ef925c7a90ce6c499a16dee79e39eda6999425bd21a81c4418b3391c6f8c34d1683fa626ae021355d656381b36d13d80607ebaf6964ce0f78a06fb7c2ce4ec0b5355c8272bf9472bf94b440e36d622dc3e18defd60b1a06a5c0445a31610fbf2e08232d3bf53d1fb3c9768be02f3d98cea1bf279d83346e888a18802f433db58b2da0f1abc0c973870145d4f410fc9c6c4b9fcd6685a3078d39b6a9f3db6738c891104e612daebf3eac328e9b31483bec2679c110c7982046292d012099411605454ceec3e01524c778bbed1c77282d7ae1b86699b96963e29448b20f7c57b64dda3b3369ef5a266d0ffaf5831273bc30eb7cff54ba12b5b9944d75f4aabc66f500a37098439940eedd7140bacb833b4ec63b4e7f390de9b5b8f5d86191f8d1244b24a74289c69a7ca996a82bb5249cef41784a36858ea0462778903afdb4ca8bfa7d474ab3ac808f768ef1cee428084668cc26269cc4c94fa6d76d0748108c90c76e1b91c0583630d3625e6db96457f952677fae1ddab1f3a85dbd16b82c29e790c757fdbcc9ab243709a4212be2e66a017a33f7a164bac80bde4b7eac58f2c800f5b24770d6b37c96c83299b1e93217ccbeb6863872a8332924245d2ba6aa1baefe423eaa92f28633917e4ed0e07f946b6da771adcccf43847f37b701a3b48f2b50e77224f5b6afc67cef6accb34cbb5e74fa787770f9375c207ea84988c64a316caba5e17a399eb41a32ac03e66fb6670c8bf1f124601edf3387d5bdc4ffbb668c287fe327be5f619ea60d8df909b6477dc4d105c7910d437fef91cdc6ef27c35b80464592a2a60d378a4d7e6d4019baa9d3c7c37b8d22e67180537303865fe32879a3e3df1dd0896a925a8802589ef7bc06b707c9a5c8bbd6db7eb45e042c2b0b4370b65b04e8ffde5bf6bc266ae97aeb0eb837a103eeeb6053773ada0357577b6efc7043b85c1f2fda4049620e1a4e1f811144a457be5bdc594028c865b91a3aa4c970ea1c30a545aa6880c7c851e0f634409001ca7b1449bcddf2c8ad0da03bf4b7851e2d88fc83aeca2c0350dd2c6363392111ccb31ca9ba4338de466d030705fdc283f11a685ed72b874fda9e4b4e1586d10e47c1a1244488922f63f2cd5443d29780095ff0aba42a5701cc48802dfc923bccfd41b3a123363018d8063473e0579706c780aaa02d21a871d49810cad87ccbc2164795033ce5e00d8cb386f85713f2dced84a64ec3afd8efea015035727174dc045e54bcb2433b72c29b495275fc58527afc987b5045b9ddea1f3c56f17602b4c50ee536d4d580640ca3c9d569633c86637c6581c162ecea8a3e3766190da75475a8bbc30375b38955ab74705a3ad6d5266fd9d5cb4feb89c9d263efeaf19ba4261c2d4dbb92d234ed6a843657ec1584c4bb625dd9a15d39eaf20eedf2419faa8be3c75d3d5203f5b75ec18b5cb2fab7bfd6e87741adcdf7b45ec9b76fc3b570300b0c955024cb8c0a0af6e1ebb91d294a69db038ee3ef9ce5cda161527d17f06045b7bb93f419a4f4e2ea2fb7301dae3868cd2629a5541b479611250cc15eee9be80d95e18944669037ce5dabda371d4a6759d669a3179b2cdb845aa14d6bface99ce87e24acd709645305f054f64f3966feaae9823c04cf18d17100f2fd4261b16b4d86ec79a439f5294d31c40944270cee1f4e868a8649b7c3c9d8460a585be863d973b50a142ffe298e8a145536a636e71c7c787fbe644dfe83024c7d309e1ea3f71740c9bde77c665b09cd3d0ff4762b2b0880bc51c4de9dcc62dc65e42e66e87d2e99eef2fe85c7db9f38a234e164a26560d5aa8062dda1ae4024001fe51751efe76fa4d38ca6751984c0d57fcccd3d7bdf8de1f03e2bbaf4c901ee8557cc43c90fd0a01e1bf8992aa8c6bcae3093de1613aa2939a9a45adbc8010b825fd464b036d8ff4170ec0555cfe9c7cd9f55e0d5015e44dd16f5a8cb55e72324f6ecb8d4818bf2e44c921bf8acd7f5d6dd68a8577ef08538f7999246b1df0372b6ff895c86790281bbefd975ef24d2912c8e595bcca21e5f5333e136531239009ba9831916cd6ea2d758c7f7ffebc14ac97e26183d5bab8387bfdf5cf172f5efefdddebd7a7e717df9ebefefad9e9c577af5fff70719165071ff70aae2a3b2b2f3fa1bb6a7d3bf89911f6498abc1adc5d3109a9c05e2901eb57be237f54633778bfc3bb202f26477ffd2b261c7da5f80052574da59b8a25362b1cefcd9024e9346d0b96b96060a7d445f2d622a76191cbd6223f780f778ebe52b212477dc853d9e328c7a4a41c7df1251efed7e33ffd29f91fb56378c512d5af2348e7965c7fd9fb4bef2fff95fc498779f656e56cb364bd5fabff4afea4ee3e2fd7b7a2b85ac8044d71f245fff8cbe4ac982ed832f9895512b86ad63365df2d8a2aa9ca8d98b2645ace20ddb9f9e42c516b56fbce9c9dbcb3b793b909ff540f5415a727cf5fbe3a7f99cc8b20457a59ca645608a648f46da28e98e043523068c0e3ff72dba9f27b0f556d8944ec81daf073abedd3519bcdc3c257b68118b0d693c87e2e12c3dcb19d65ace38e70476346b66d03f7411ca5aa583a59a483a2744a120754e0dded9a194a60ec7d6a2527b9f6fb4df22ac95dd2a334ce0214e30bf487fc893d8c86bcdbf549e6f864287a5eed48c38bedb6734c44a416a59d3e49815351a72de091390d29edf4f13e3f1422d451a48497306f500d0b20cb3691c78ad49e00da9e1010dc69fd4580081dedd7ce1a23323fecb812a581c70393d920f8eedc0b904d7f34e9d1c5db67f07cb36622619fd6825515e42fdd543261855c30915c328040d7688b7e4a876c2fdc3da4d5f66375172cce81359a4729e9eb6e3a3b101d57b5a32fc8f58416f6935504c13d6a05e66edd50bd8b0b68e2c5c53e386f866b3b63158964abf6266cb7adcac0e07b5412d87351e7d6117e6a1bab2b431210668e8955e41e702998ebb76cce04e3533be140e716391cbd978c7167ac5704f5489dc64c201c95d00959d3209fa21235039cd38bb8bf48d23b0d795e0dee763b220d007a85fd4f1d8a4caee9453d394afb869124bdb860d5191c25a9dd3b6a4b188ddf011a69e8e0bc14a017f597288503abc7964cb124291e7cd53feeff599d782da554bbf3a529f4953a0f5b0acd457e15d4f557755ab614d3c7f9c5aa9c3153f2bf49d5fe5551aa834be862c77f21cb7dc5ae15bb636afb7fc8a6b5d8b4e4927d32ad3bee2b29a9a5545eddf269d0b8e36332dd579df15a8d4bcfdbc7a61437b9985d08363725bf208bf6e1d9546b75969b627f26abd6622bb62a4d912fc9bab5c832ffd7ad29f25598c39b3d40e5661484bd3ffe513fad25004ec4c0a2b8530600b6e6fe0c44e264aaff14fa4fa5ff9416c286b9d4bebe12759cdb8f99ba36fab5b9feb36cbe6d4f9bdd0e4ae4c18d2037690d1280523add69d0ddd7737a4164ef999af2b372c6e88cc8de7337af706baa6fa995f3bce4953aade8c6df7b63d61e5d12d97ba9f7121544f6bed113fe96cde95c5d9abd410b227b6fccbaa695ba80ad4573227be7b033e0b32591bda2fa7bbe2c66a6567570b5984e5a01c35b7482db2da35489d8eacf54ffa9f49f52ff5978eadbb62620d1909d214ae97abb8dae57b5eb65ed7a53bb9ee31df4d18f7ecb79a575ee66da66fa85da04ddda9bd114b5d4656ad9ecc217dcfced7f61a95fb093db320507472deab4d075858b63ef77e7a6ac5d39fb4b16baa45b56fb4b56a6a45e73fbcbe5ba5cb020f7972d01b303ddd26b9c65b73d7f5439f3fc6149ff96a46643a75081b9185e9b3d4aaefd0e25d7b5fda96f8453efefd8b925d7766792eb605faa0b33b6e4daed49f51346875c07fb915cb7ec46b81936adbe36edad5af31a8b0feef92686eb435ffa66fa59d617b6a9e15c015770157317f88e59f6835e2b31f892de4d17c572669aa2fa5319a6d45ed72ee1b1991c3583fabaa8d6cbfc16647cedeaf2a256026e89e29acd2033f937a25ce9e40aedcfdc7babe253c1e1d75a946bd700a91bb6236726a96fa74f4ce22d5dd4e4f0566d57bc9b70bfe09e439ad11785bc85ca3ed2bbddf0e3f82a581e137a6737ae4e46a504ee070c41d8da1d4cc5296de5ebc84dbb378caaa8229fda1fea53be22efeff3a421ef682b7f4f5e34ac22d048ef1c1aa5976a608f6b33abf3ca7b87b8b67477287d9165ead5dc5ac40a7aa39e7e82c4d68585a3fc8438c63848b6f4712c1d899c6cb797a4a21fc73cbeb5a4fde1f2894bc9d4ed2e2d7c75315e827daf83cec69bc9762bb24cc08f2acb2af851665939de4c5c42f0f78843fa5a717b778a24d99059901776e7ecccd2ff20aff7b896e2bba5f55b3030d601ccbd7d5f49d5e3bb8fec7690963c35b0dd879d9fe3ba6c3e6c520f41a5322814a0a501583e57e2a87f1cc0a5ed763ba2dbc356856c6b51edfbadc9a27c6015c4f4ec26b866977fa36a7257e01c460c423a0e32b9d791f114f7ee308d974fbf1a2d8fbe1af43199d1af86b327cbe1acdbc59bf1ece8ab103a6fe6ac9b7a7123d1db70837886eb7971c0d2903e7992f392dfaeca4df5f4694a2ac50de5c418eac6f9441bf81cd2804e8fa61e8c5275910e02b5f130f0a636b2e6bb054bd26ed94d930f69b7eaa61f92a24a56b9f8a873691bc531e8ea3e4032e40f24b9dcc8a490550213a2ca7f48bba29b7ee8793762f569ef52acf1b30c8efad80defc4eeb58d8eb7b28be5b2e033b049823fa4f3392daab7a63571997e9435efa55faa55e088da70c24f01342d1d444a346d4b1c594ea9157fd46b0f29db6e517aee2ee538fd9fff098210d3492b8f6b65de28659d51e4ef9024aa714e0b18d89c2309fe4d083ae0d7ebc35717cbb29708161064f793e56979c3c4f3bc620847c9f580fad5e4aaf4991ebc928a5e51d5a0cf869782e51fb519d2f898340aeafb61c9b37cdd2c7696af4d192b4b352c1d3f729d189ecd40bf0d0c4192da9525cdb25ac29600025ca225b654b949de5e1a5f67cf2c9bcccc6c4f82c1145cbb87f5127a25d932825db14febd4936ab45494828dd2a414c9aff975aecf43b5936a73d14d3fa483b46deb9e709d4814bce4ecee2de7a0aa56d71b755d6dd6eb65c1c0b5ce6d6037621f20eed58f37b8f47d48bbb36e5adfcc384e63f2fc21abf1c1d4f3cbd1f2e84b4d3dbf8ca8e797bf997ab669e37073109d3b633080d372b52e39e3d28e58b2c8aba430c3fdc6304e092f25f816f5526b8b515bd46c0dacc7a119cba0f395998688a11f22b540c98cf655ff2d03a186a1982324a8ac11d12599e951eea66398af491a9253bcff8bcd49fd15758e5dbbc9f398fe12fd546d4ffbdb3a8ea9cbfe9e17fb7a4cbea3ba8c7d056e3ea33a7fd72bc5cd7adb6920b2bdd21ed0af226447569bd7ba11d4bcabaf90cb53905e5cfc31b07c39d2c0489aa0d4c18f3f2329f6fad367dd2e91da895d350268c809fd06a56bc5819d01cf9f62f2d6dd62b317ea902d8cfaddf5eaa728f3d0f86402ff6db7773bc0769113f84f5dfbbc6ccb72fab1a2e6ef76db27a2b7627251ced44df36bbb1d4fc2bc6dffaa5b6eb43b6873e3e5c1c6134fbf1889a32f06603afc62583c11c302328816316c7431194add9a6e1718527d26042b49a7742fa94b49a841b33029bd6fa5aee1e888e87cb270a5983fd3a3f67036e6c13735ffe67afc63448142c6d78d41a3f322e83c87c457c3fc0977f993822ee793e1bf40ee37dfff17196b0e9a48b7cf44d49ebfd767404ffd7f700e82c4afc3f249ee12bf5ab35c45f37139197237a296d7aef0937e96f9fbc0a857f664bc2fd641f5427bfe6cb79de5f8edc49e9ee03638a35f83a96c395a0616c081a15320c2ecb7afcdc201fcda86c0d994870529e98f48c96976a94d5141ef76e42d307d535490f48ac9560b7909c95255892a2e91bb5005b0c2b82f384799827ead97af6dcb9ef69b320560c1ea4f8596b2d4b7d10f4b0a997f61dcbfa7778a2a9dcb52b06af0dd6ee8ec55f9127daf89d71f21fac32b36f684e07f5f4748aefbec9f95979f9213708128c520b92d3709b8d88bdb825f29ce2097329f2e920fe1d73e2490d72e380dadbffe2cb929e422f9a09d2a3e24a814c907e36c2f3ee0e4bbd7cf1d0674b566d3627eabd13382da55e5eade8dc8d76b360bbe6262017ac909004e6bdfffe272c9a288820fe6c5e7f6bd0f29de350cb35158cc8e14951a093710ce4275c8dc199b7ec3845cdfc6591a523d1c4769d7640635ca96ed56dac8a4d01100dcc99beed93ff28fbcbc514708cf3224ba343d52837d9476b9cd8eef39ad406e1581fbfdd2c6020c0f90c23c268505ed0f8b27dcd29e1ae53146554935e00e418c2e14f90b2924d314d251c71c638c7b955adf7505b2ec99d93b315c0a653be214197324d436992161f5115aa9d5d000d863557111368a407b8fe8108a7585fdcf7afa3981b30c41e2215f662c2676900dba8459b23dbf55e1e836c17be62986e3db5167d58402f37a1aeea666ba133a2d64591c60a57a0ca157db2de23dc1e606d3de8ca7759840b9b1eb1bbd2cd669ef77134cc40ee53db73f7c1ada70715241ce5101596e7bf51d4565ab5346c12a54903f2a3ae656df3fc3ec764ef912785aec0956776e2c09c7e155e4cc623875f0272b1c1183d97091474505f8f1f9755e2cd556ed2467f94796541bc19202e888b1be02b03c388bbf71e6d82104da49c5e781e7559840d96eab613bebe977497fe29cd869789784ca28bd5ebfd5476aa0d808c912ed1c13c4e9054427369ef509f74b4dd2f18468279d46e206deed6239e6e146e66e2d32fa4f2403459d9fa86f21dd9034a1f1472936b924ff46450fd8e8ed3685bf29f987627e8bea47be2a375c4276ed9f55e31953ff4bf89f33dae6dafc13cb3f9ee5eb919a5ef3db720c42277d7e4d72a6eaaf3e16ebb77afb635230fdc96f4a312df89546cc4f3129599b6f416eadd96fd9dcda78507813d7fd1a76187b4bb2f72b734857663becf303b559220ff813c5719a07fc880cade361c6ed25337ba6eccd0b3e7bf1faec55396338c8086e3a193f472c501cb7e8e7e0b77701635e19021f1cca2ce34cfd33b1b30c13c17a6c55487407d92e3d81d67fdf152b36603d2d77e9c97bc96747f19d73990b496429f325947f914bd6e3e50dc2ad051d7f306084973308b6d6494ecd7a09126532e76e35d73f7ddae8c8731d148436e881b2d0ab87563a98463f92b11f3b8f5ca9212b74ec5b1d26d70ad337441ed4da30010288cbe5aac5fd4edb0293049475db6d47756aac2e2644eabf419084ed69e07cc662d71f88228264badbedf16346e9f163396020c0c90e0d148e0bd6024f0fbe4bcc913aef211bc8bc35c0b02535e36633d9131eb89e6f34dc7da4bef9198cf88d4540fd1ad176113b1148f42ef2e5b2bc01f39c8e57ac30ea1c930a8768616cd7acf9259f85f502fe89397c6666954b4ca4a3d6bb20b637e6f26cdcb9f919f17aa87eabe5dd06e0ea769b3e71ebfe696ac3de2f40917162b20d5a16cac0c5b53fec5d88b2948a1a9cbc305ffb4db5ccd8e5e66a4f15df14974cb4be0f4fdccb163e9ce41a10de5e167069228298d625e94859b5808cc250f4c0955c2d93d469720a92fec12b724a921af6095253d4d4829d6596a12578a3364f0cd973c3fd53b15cc2a7349f5ebf0b110b1d4ae5f81fd662c768a70fab5275087ad3c7448e7336d96e033e2c86949b327d88d9a81ea24e4da73271351d63c2b26c038ba6ac74fcb60744daf460b803c60d3cd6c77f9b500db56cc68372c2830d0b2b79c5948c1974cf1ce7354c6be82c637621ebfac67f9b38904273ed5ba89119ff315143fdb31ba22533c482b943c5c7d1d74f9519aba4286fd380f8eb9e29facf7678b7f34f5e14b3b37abb7fce3283ba8ee3927accf716d5f9ccdd70d64b47d49465594b7225ad6b9c2811b6626c657096f344b0233d5490207d9ee4263222907eab448ae2ea8a0925662f8c3fbc0e7b4f9016b18faa62c670b22a67ccc9d92bc7eebaba2a10f2f5f7d82c29f9f23629f99425412d3d93bca5a7bec0746460676a841f908908c3a1d0bb66a142f31be3c3a78eaa0b6f7421e905b02fdf954b60dc30c90f14cd65b97225fd978a1a06493ed96e1de9208ef06be907b210982f14d72c492171a4796f778021fb2d902845b089da91e2c67cd2d4c9c08342910333c0633e210c8f6ca738617880c22b1292cabe92d11a1ff6d814315905e00eef4ce959a2a6235e53d4d2b2953a835c72ff4be625a8bcd229c2526074ea96551742ccb65b24c1f13fda218f401b65d54583e4c70a3683b94e646984bc0444dd4aed88195b0b3605cd5355a815fc975e5f63487cf81f5d5875ab14ec382589fef5458a93ff7195babdfc7c9957d587a414567bd5f622b2efa169f41ec61f1c5245394f3eb8fad1b859cb04d7bffa48adc8d10f56a1bd592e09c3e802c0a4062d2e0b66d276431b0c6ef9afbac4582741b5017edf50f76d2a963cb2051e819e2f20419a562d05cb67b760f97aa487ea912336d083b0864b36572b06eeab6fd8375248d3e15ceb29cd7b6f3682b9817960cb37b044e21603e18c6beb25ef16ac6289bc29937cba28d8b5fe5daed7655548965c95f9b282e837b3aa4dceb90de09594574c2e40ce2c013222f0872c9973b030675d3decd96c26d1dc4cba3c5869c1d058ce13efbd059029a0b908833762696e9fc86acf5427e07b0d4f4d29846e19788cb429ca456c58d45e3218ef4019d3d243beddf2506bc51b5a2b55a0a8607e60e1c7ec0f7806ba280e8e0d6b50928a6ce80543a8a265a42c0c5c733c788bd1be636214920b2471647a7299dab0572b82e83a43f25eb5a2d3ccf8f8bfe0408c547fa06993b1a68d94918a8dc7bcbec6a922652f5487eb48687749ca9ef3cf83ec41e6b7aa3970eb53550797a4f23ce139da108ec966a773813556a5d9c96b08074bb4653b200165b0db8cd5764a83a9de6ef9b013ced2386db0622949db38cbf0b6e3c55a93fb497cd789b92eb0b1911583ec849a3a624c58af95631bedb9dfa174b5e7519d1ec111d35a529d0449ce03bb477299579121031c572ab0565cb2457e5d94028e0dff86a2442b88b25c1af4a38df76611acda2c65d54bce72be01c4a362b5d6fb5951c30fd5f31f3fd4e818676c066c23e386667a66b497e2c19e5eef1d8e1d9a2a020ea7cdcfb0a10d9f038ac835435392c29e48b1b90236d22c98159d5a6269cd77561069eeb545a04a202bbc235ad0be6540139a7e3aac076ec18271c22933f1bd44504b8448ae58591125b9cf23bf26bd316c383aaa27497d62bb6ad811daebf51e3fd58ae66459f22b266c5c349bb993519dac867d31062ec6a7cb12e6a261e24a6ddaf81f10c728c7fbe97709e41b20a46f59445c52dbcc14eabaaee7100faca934b543065e4d234bff06febe69415b60c6584e5aa35cd9b8988cf678259159094b7303c960f53760d19b33d144fa56f98a25b258a9a1fb9076391eb49c3bf506741ed280e443dacd6b6e511502f2d1e21cc56bce51f65b1fd4ded1ab289084ae589cb63854dfec731847f56304f60b1e3a170a7d9349782d0a6fbc64cee3d53d6f9a161ede92c804019fe7230e9062bb40f71234e0ccc810d6ff830786330bb607dd19fafb16a716ee5b98da8b583b74cef375b528e537cbfc4a91954365f457ae98b437be06c6d3a4cee52480e60a1ac1c34688ddee9605a7eb9df198bf66c42ed1c135db912bd6bbb8500b44b0aa7a610490a2e43fe582171c5a7a797f91b37b8bc0b6fdc84c9883fa7aa74f147b02cefc7370fb3f65fb3822e6eccfc3066b84040db9234f5ed54b609a55e371b723370ce2acf55a24e2b7334c79efb9e944afe4861533d657db3bec9cbaaf987c1e4476ecb1eeaa06daaeddec35caaa76ded4b41624f4af60bbdd6e62bbb16f4f345dcc6da83d6b9c1cce9710c4b2d81e6053197d62017e4a6c2168166911857e7636ca81926c00a8bb9c7b39dc08c84a449b6a358097d0805cc15d40c7d22573cd8de8c286f350f4590d597e954bc0edc8974b47ac534c3aac67d7afd135c0909a058c9d870184d2e34f0c0152de984f3a94b2319fdcd3af3751676c8ea8037dd2b0ecff5ea77c94740bf7ee29fc8dd79ab03d1d456062d539dedc7b9f5860e3ffc8c64c1d5c0706315543b53b65b14410bb079153c3f13cdf5b267090df91368ec947d2c00ade6e3bd2096aaefb0d49e179ceb5eed0e5b7d120125ecfa8f5406d47f3dee3a73d5a7e1f65f77b4d1f3c20cbea60079253bb27ef57e8835832e2346dde4d07adaffff8eafcd9372f2f9ae57556a3bd8f53fc20fbc29415d7a090ac46a2d6aaf0e167342e7c0d30ab5adb1855fe90a61a892aaf35f2479b7ef9a1cdb36216cadb1be64cfa2630956b1b6c8752e17e397e96c582353382759b2fc0fe9538da7b1c209cc259d1ca6be074a8778a0b43a8f2394b96ec2a9fde26cb62cea6b7d325ab921bb5638c7ca6511a209b54a0a5d7929ada715e4278f6e6a4eafdc27fe1e080ae18e8ca84e95c6e64922fab12bce9f2826bea372f97cbf246d5d368c120ed223b9aa3f4179e2469970fd214bbdbc2de16d1eddcdecee176aa9aa38ea1fcb2bc666117bd8a58e314cf7ac929cb054f56a014bc2c375263f7dc687a972c9860835ff842ca753578fc787ed95bb1c7c0f01d01aec1911b8823f799a345597eac52504c7dd6042b22dd4206e8152307f623bd647bf6c53e1ab52fe8a0d7d476b4125938b32c89ddbbecea8b0794b546ccd2f68da4f93d84ad34ea8e80140f5bb7383d63c604dbd6f061dbcd76a0767a1faf3f3a5460c08755c4b14a8000daa1538687dfa0d498195f73ab5432c8fbbd0307591004e0f0d0b4f94d966af13ae7315399e855ebdb8755a3eeb5d4d2b27ecade8657e0e47371a9e306f42056ce43c9e326318cee8431779faba29b251383bd35ecea814bad60720771d246c11b830a1d2c6b35b7ef1905483518ae76543523869acbdd8ebc6356ee7a0b562c2606827913edd7b7afca197bcbae8a4a8adb01dff388e967e03fe2e6bdaa59aedbc6c0b89ced81cdb3c65ba83752dc54d6cfd0297eacbba9cb0898e2e1cfdb2dfa9976fa78b71b3e14954e3b15bc63e43d5312527d4745f87216f7ed0b8dfbf667c07d437f01d4b71e4705269586835bc27585c98672f42526333a4e3f2d53922eaf5292ae662949ab554ad24f553a2153baec859686ba6f9c3142f52eab3782cd8b4f449dbfc009aa39251565bdbc2253eab46dd5289d15d7e9a022167a12e5bd1c2346c6a9ad2425a9ab2225695ea5134c2c7a14daa8e29ca4d3729962b2a2e30959d3b173629cedcf9f6c145f743e6610f46740f6d5a5e12c728f4beb1d067dd6c16a9df3a1f49d29b6db82709af7caf9bc82b43579af14332634c0b1a4b951e5a9c154ecfc283d4abb6c90a646b723b36ca5e32e3a1ac7394dbb8b6e39d07fbaaab4b45c8fc8b2b52e9bc237525340d8023c2800edb12538e8c35746a4dc6ecd2717982c1b3ac5a9b7a1e718ddedc89cdc09361f48e2a66450f6f25adc59e1fcbb57648d8db168388d7592cfcb654a642fa7d3e652f6f80e1c7df1e7ffc6e83e38c5dfb2dc11477f3dc684a32ffe1bab750fcb7faafefc1593b9fafb855a671c7d71ac16d66f58f9dacf806c3413aaa8f18c4ca31db1a2ac779d8b22e792accd1b2527177aa3dc52d60337971fd82db9a6ac57f2e7cb62fa915c1dda2cfaab2949ed376b1bc87ccf942cb9de5324b55f4a496abe934ef0d0b9cfcdcc465b16953cba12e5667d5448b632fae94b5bacea6d2af63c5f2e2ff3e947dcf0e4de78afc0b5802f1a8c0d6400b959af92e5fa8d91cb81420fafb3ec1a42f3c97843ae274e346faed7792f8f572c2cd61db92277b67bc6f3162d7a9718dd92abde42b039267935b8d86ed17aa46f8cd23c1da4971b294b9e0e8048616286657019ae7e84d194705264991bf94d960583bfca320e1b6f45d6faa71977bb3156b1bdeece4cd0408bae50e7a0734c6c8d10a5b28a37d36951c96fd59c9ca829811959d315b978c8aa2545444b19b9d3dffc41a33c9cb3a522803bb5858a60e9ce69e157fb02520fe975bca2456f518ae25f4af65892352dd45abef074726d88fe9adc46ebb820e368a1066bdaaf595fb33d0b5cec44b452e7e14a55b2225d8d80aaae46611d83e0424d911ef41642b86761dd923bb5726a0ba22273b2c8b2394cfb8270fb93db29bf3834e5be455ad54e2ef64c764a2e7a6ac2e97aa808e9c5efc713fc06e2c7cb6f37523251d9637fd676ecc7e4f02013e02ab404cbaf953686409437e9014a316b9dce39b9ab6fed056c6d5e1e5d99afdb399cd5e6d0b50f36a89a90d9ef37211c1dff599f567fe99bd3aaaf06e1dfe6cfec2e9e3578b5d9282d5657e960f6705e2d386af6706db9981da95a0fccd4b465a6eafb6db480fd550d16a450bc829ea1458de3c8c5ec64759592c581ddb73366e90559dbc64ed577d3c597292617b57b5fa5d81331a03bba4b97e5ec36c5e4fadf9b0f35079757b04724fb24c9425d03b7078c83fa08700dceca6df8866b3f691766a75d1ce61922b2ab187f6d6d49f5d7e0c74c31064e3d6e67f4b26d46534cce227ee08cadcad82b49cff69d2afd1dcb674c7c6d1a33b8eca6470bb895eed4897f79cf79df73c8632654f36cd742bfaff7b105f1422ac8259965597a7975947667649a653012476977aa08ba190f45d41537b21a353f74ab9da8d678a039dfe1757311a6e4bab602d5f002d9b8ee9dacaee88a5cf7de1572c95a969654f75372e784d9c17a87c975ef7c7329f7bc529947d15b17f0d6d7e5ec96de92ebde69c13fb6bcba2cf8c7e8b5344fe1c577ec936c6b1dac9bb0fc5a97d7b3dcf286996b0c7876a56c2d33870750e66475f5fa9a8965deb6ed8ad5d551a99f82ee2aa7d7ff0112fcf808f5f0e32b93f30208f2069e2eadd8303c88d53eb740ecd336e44136ee4f7ab2fc71bd76682e0872b7baacfe1541ad7ee5327e6d07f65a40c632211232f04498871427481574b71b48c0840f5629a902a17634450c0f0a3883dcb492b92fb1342466a984a5d8d76c4537fbe89f53021654464790f4d4704965ed0c5a8ee6f09d9094c9fd6ca3a651ab68a554840541110f386c38a9d38815de9185dedda6a21a0bbfa8f1e71559dda7b00982b461a20e6073fb277132fc10419e9108ae7a7770818addbdf90afc3ef12dcd03d8d0c70075d59b2e72f14ca27e60e82c1aa0234450de3d26396536a64d3cc9871cf29177e93166da5c2a2643a6137fecb4daa4767636b2a369c31f111aa9b45a2f0b89d2c7290618949242944eed6ea5caaa7ea8b5a67e49b5b7abed168c85e6d9a8a462209c091e95261d4949cb00e58374ca38842f7d0c884feeae81ec2bc7f6ced1f164c869da534337db6ed39efb057fb5d688d32014704afb644e4b9747e629ed0fe74747baea052dc7f3c950d7b71815a824733c30b52e4648df20d36e170fa659e6ae8f8eb423ef06bb9c2d530c0ae4453197485580879d8d695639ee4fb65bf5bf1a1cf5176fb74169e7d7579af0e0c79eb7e359963e4e3b94ae7ad5e6b292021d1de32c43ab2e55c5c82aa0575584f46ed2178ddc2f84070d40d628c711b3c825ae46866c62bd30d5958ef73c98dc2a0e5e7091a235b8389dfc4fcf0cf51979d44d76cdc46d44fb4488b20ed9f6819ab44159cb162863673f81243d39ad904fad2774804e0ea63c06496807a15f89f99d575571c5d1dd0e363b6eb4316ae1584c5c2377766876208d1cff35a008b3031461c406e9e3b41b675a3850da2e91e328fdcebc1dd027bc09d1a7313e9a03b9a963d86519e04ba68f477f483deaa46d86cbb064fc887da3dc93b06d8bbdfd616ec7fbec447d7214776d15b961e47201966a251e542c17d30538ae2ef26aa1dd56157909f6d528d5389928efd27494c20af4a3c907e928ed724c4496a57f50458529fa0755540445c520fd03a891f35a6a03c29d97e8b019203442450b521e8376124ed39408f55f4ea51be7f40fa9c1f7ccc10b41dad1cd3191feaa4f726c11378297478eae401585cee86d5f2a6a551418933b3ba80349f4900ecc488dd274c0891adb8119107547ec00dccb3a260ebc93b04bfeecf4e2aa9cad5ed1567701693b0b3385233d4df6d28f3abca26faad9ebda0b3cf0b75352c0f48ff404ea8b5a15ea969ad3aefea95ed7b75212269af4dc9dee9cfebceea6099b0e7a3063d372c67e7c7b12742b0c99d6a94d43fcba1fdf9e80b10c5c6eed057af4c6bc9ca48fbabeaaeea33499861eeafa7bb39e4e1a0489823eb2e56d32cd2106e7f236c9b943da5b3331655c1e313e2d6705bfea3d529bca6f0c5428b2473926f9c87f73a4cf217fa3368eaeef65704172df7d35b2ae90bf1fdcdd6ea355a0ceb7626faa0d5f9052192c24bbf7e1b6fea96ec29caa5bea87baa1baa8ae3fb2db2c5b22a6279348e3af196610b02e930eb7537a73d99d4e84b25acbb65833466508dbcb0cefa5abd281b67c5e88d53b91f30a40eede958390e1d77ee6e6b8edd8d40c45ab2fce481fd703d6a435c5a8e5053112a850675d8e3a7df81fa802d65c14dcdc917cbd667c766ac0801bc0c59c76fac3082d89abc18d8c5b3e68c801756afb9988308d39c09b50697d38519be4a7c830e0d5119d1bda362c324f5bde8f35e1997800cf040813fda178c286a2dbc5005ae4515dc46428db2da1edf8bb5a51bd3b2c369cdd9b82ec7d5062d65ae24550a23d19da3a28316f4f97169460ad25565602bfa69d5663ff4dc167e5cd76dbd13f7ab3720a23d7bc5343520a5cfd8de73b322f98cda04e90c0411f69df78ebacac8b2e8a4a96e2566fd6edf66e578762b90b93809cc1727539826007deed30b9b65990b42ecee22448c269fc1d92537474ac8e31699ff0fcbab8ca65297a9b8a896757aa6bfea835c9f8922f7a29704c406a1a4fffd2eb2ba9aafef8acbc2c962c39cfe7b92874814e54e0f942942bd6f6e427685c95bc59949ca58a5b8b3b9265a9da7ae0ca9516f5e12405ede87eeeefa4ffd63b51cc20df8f92eb18a968a9a117deb2b960d5822ca93b40ab2cabc89496bd2b267fac9878ae673a37a65b3735d3d1d5604ace68a9c8f2a9deb21ffde3b3d1578333724a59ef32af189c4a0b3443fe12e3411a28066e22b6ea6e47b826f8043827a0f7b9edeab2d42104a4080ea76e6e8e906e0e0787651f4f01d47e8e0a728a3159a3828828c5e6a760cbe772d113399f952b845d0662f4e7afb065b5be201fb5e4f59ede8608eaef54eb43a6e984304c4eacc064c525f2be57a385e8c4f7e6c418c883c6bd50f5b65134bf432c8f036be1e022782e8ad7e7a94e1ab6ddbe4137f6240df7f039c277ead125c20638fa35c8e8f6f91b63ea7e8dd57df20e19dcc8f7bd96f3113192be79fd262517248ad491a377e84e7776a00bd84118b01d6e81dc0f4689d35f0381e723bb555cb64b02dd7740c481c0e30b41d63d5b28a7fc480c1577fe9a76fae43b948328a40f0755e025d5e3407ea5e397aa96891f87e7c1649c765751a0d277ea19ef5d95564e7f468393f7957a0a04ea5997329c65ea371b59ca9acf662faf19977689a0745dae755021798149e1c844b3a05af63a082025e7180fd4fa789665b666ed9afab0ca5bcbd6ea87ae7d63a18d4ee89dc9eee1567bfb0cbf24fa90f94eb0f9e03951346ed0341c09aac5b24f08f69179190fdbd79920e99b1fcfbf8b171a33710b660d3d574c4c417536c5929a681f48448c01adca515b0441320581028372a78d1e129325ae5120f0a6a0d243a756c1c2f3cd86154836f457271d57dd633cdc18de4a3ffe956e48b82da03f6ed4c4ce307bed2dd88192d3e8d4ff13c3f9f6e59bd367cf5ffe7b236adaf3b9836a4d03123f6860b5945d6519fa755c4da819ce60285d5fee1f4dff693da257e5e03b72557e9d4f3f866ceb77e8e8189e1a1c83f8997a74b92cc3579a4c8de360e8fb9e134c82740ddf6cb7e8153ac6e41b480eda64fbbec932a4761f79a51a8389448ad7d6b9405a48e8fb5e2c1f049f82cf041f800a757d2ef2ec0476fb477aa788c065ceaf067720943225f6b624b04c3b2d1ab2cee3b43b5544916829f8e1ef46fa32255154cbbc5a446d988695ce76a45962169708f4b1a7a1762ad2e058250c9893d8c0ebb7c2e498374eee6cdb9de470a5693ab0dd53dc86ec1e47dc09c377fb16e9296afb1ceea67f48bbe179f4fe3379ea3a47cd297a0893f94d21d8bcfc9462c5fbe494b77290856711f3d1d5200753a45a5390a72b30cd95a31466301d9464790f1b49a6f4e3b89a900b3aedf9f9269774daf3333e0c640c3b5d970890f4ac051e46668e185902abc87e0baf273f93d7535f78a1b6f1b9565ab8efbcf678c64ac8414a04be405c432b2ae11a7f42216a774ecfc06ce3bf023efc2fc0809413c46889ff1d4d8cb50ca85acf29a52bc52f995bbaeda47650bcc02f3e83472cfe933ce2f3de32afe489599a2b24713b9b582fc7f0614ef145935344b96117dfc024bda417e80d1ebee950fa32cb3ea197ba8a5f61769ed3f10afd8a033ef23b8d06fd79bce28338c0d78e017c284ff77a2f4b270fb374bf862c5d73669c76e19f1b266eb5cb652950aaf630382ffae42e60c6bc62f29994a2b8dc4886d20564628569db43f030e140f32ed0b2ab5512fbb84a0e6c905103993ff7b343dc7297c57e5e6885b8dea0cbae463fbd411836e9dd79a8586ca1e6b0c9d84eed65bdd6ea6b3268a062b79ebb2328574c64a19948a91657718081e496e57987f07ddce26f1e26c7693d78a4cc30651952e3a4289a1f86a27508bc51e5f9389f50790faba7fafd7f59b998950bcfb2281d3c6840560547fa47fe4927f068a8249acc841900067a9bb6835fdbc6208bf74b2e45c1aa981718a78fd309f003ae1c6c819827e8033720039dd326f49ff96ab024b3f8b89ed68feb4b755c5fdae3fab2c7746b2c859b358eed4b7fb05c365534f3cfd31f6d348d5dd077a8227d5278db29b9a0456f95af5b35d8c17e6cb14ece111e809a63bb9d1b04df6bba8ab4b776edbc43977a5f7519e9937aef5533841f93b19c0c677b056e7504f0789fb3d174dfa12d087c7620777830452edbdda53b632e0e9f3117e3c5c454b120a67d838bf0e0b9be4f97304730f18e8cedef1a904ebe9f86d9313c263c5841862ee3a1d5803c95236ef3394a62ef1e4922f0803bc3ca74bfd06fc7cc75d851b3fb45fd07f7d6d1ccfa646619f24bc174794245d8e056d11a5b7a7bd5426faf0ed0db2ba0b7d39c7f5bb6903db7701db3f094f6b34c3ea9afe23692ddd09b5aca4d6611cd6e25bb2edcae41773d55bd7c68d0625f0b471c09ec1cf40ca405826437a25cfe7fecbd7b77db36b628fefff91436cf542524882229cb766823ba69d24e333769729a747266548e172dc1161b0ad480901fb5783ffb6f610320418a72dcce7d9dfb6bd76a2ce2b9b1b1b1b101ecc7eb85f1b6a4143d932fb42dcb342941f96cd931ef7ccdb43af8c155926674e13cd1d672e67c732f68e160e7f3370e76deca7ffe2cfff928ff792ffff9f61b273eab6ddb9a8d4224b8ce60f69a6a7322ce04c93d9617eb642eb791dccb19c509c93da0f462bb0d702a4b6c56ef5876af9f3e49b2ddd62a64858e3fcb3be2cff259164348990dd9542254a0c58d059e1360dfebfcd60dfcf00867e88c3e27f35ecf7517447372978ee692b17f97ded1058477a94fbf9eef40e873b3c8c35ecf5d9045ad0f1322840bb218b870e4770e1c34d8a0b2d86edd8238be63a7bb6cca677e6c4119c9effaa49af67a6e417ed8ac2e29f7d6092fe877599e08b7907d7c694699c7a5b8a8df14bf5166bb3fe61b4179e7fbe2dc7a81fc3e29968f14bdb28abe01e5ea8e423756a11f929bbde5de9a774d50cd7c56e921bfa5ab9cdf3f0205f712ab0bb5b4f714bcb40afe48172997b4d95dd4460374bea7dca25d6e1f90d42af801dc5b3f5adcc6ed078845baa7e0b555f0e242b559b998eaacb1b46a5c4bce9608b832d9533cb58aaf12315f3e52f617abeca6a0dfab2ba53d853f370bbfd17bca9ed259b3f4fb8427ab624fd955b32c20e56db21f87cc2a7f9b8ac7689e7b79591d5a981b1c292d7bbf65e8144c10ce88cbdc6760958b94b9d3589b3b9d203cdfeff3b58a7683ffd5887e0a6617bc47ee0f5cc51152010e90b903ac0d5e12a474b4d705aa03563535d629c262c7276e87c7cb7c47419d7b143fe82ec1d37d750759f986ebf0a856a2128bd295cd594eac24c2aefe6be0f4f2bf124e97a44b31759f96138a688957dd55760f321546e6c8d50e9bf533916c66dd696152e20b92370c31ce6a03b15ecfbd206b05f83db9d867a2963246f98ff40ab450f52537051d7e6394de36239e39a68e831d53a3615c0e16c522e1d754e085a99d698dca143f187b6b7b4c82df3f244a2f5f6bc9884a0571d7a45c94b4b6cc803cbad86e214e85a78cbb21b8be7351d0ec0a42fa6cb7bb183c3c74a9b7a222f9eff2fc48bd2413fad75cf04cff04fdf7ff4eefe1da73bb753ba0e12eb8dcaf7d53707a45d687300962bb657897349dc4c10b54ab2fed9d9fcaff084eeae33e9bde470c8c0af561084c3c450e2685d58c5eed4c5cd598831d5dd3c18ec81d5ccf696d96d7b5a096decb9c159b15e56da7e2f2d854bdaa2cec5715390cb3f03859b94bb7c0b43e9e357e6f089f32af3edaba1c5e39eedb5474851f96f2e4bbc18602dbce230569f573e6a6d3ea05491f42917aee342386399bdeab887bdbed3cbaafb049e61db398e07b6d358caff7acd0cbbd2bf4521e32c9b5c2d15b72b98702668e3cb60ce71bcee5c4c54d3a70d6c93575343128fbfe9796d19565ee65bc1844295089fafa20ee338aaf1ad6a96b228f32c95c80d9695abc50de2eee498d4bfc16b46fa4508d3fc34fd9cc1b4583b7360ddeedd0606334c6abc54bdb114c0d59cb8215a092b4aa6172b093558292a3857cf94355fd5f4fd7c0202c9d2c49db6f3043e07dddd242c67f239b5e6f533d5f8edc9937e84fc93f0ea33f3d942e9afd1c6f473fff1ca3d135767efef94f8183f047f2b7697579f70b7259dd1a28bc477fc3808f688dd5c8a3b725528e065e91c343f7627ae17ec40c451f11fe405e4d9fa67a2a9aaaa72abe207d3ca0e0e3cab02542da62e8c041a57b850b145de177e4d5b4b5a43fe38712cf51f419bf6faef626c944af7abd4419f458067c1f30cc7af40e8b3c4a4b7c57cdf6f5212197d3f7664ddf46efeb357ddbb1a66ff07b1306e1ff26b70b57d9265dfccf72b9008d3dcddd82f63408a132ff75a70b2918f4abeea3a5e571a1e941c87489dbbe18a0e693fd303caac39cda67ecc76ea6e4bc76097126f6f9545f9150146943b3f2493757a6efb1a21f757a32a7241fb5e8289c3408e930c00b92efc00a1afb678fea5dcfbfa8dd6d1fb7bb35c4975fd4ff5ed5b6d10ebd4b055d38f88a38525003c9172ff50778d25165207dbdefdc222c6fd7c40e182033d4f9429d44e532ecf50e55e8820d044c980a0f3a8b04dc6326bc8eb7afbe3f88446c0af5942fbc944dd3a99b90396ee55fa12821cb2821c2db28df83efd8b777a9d86e85673e653f53675305468de6c6bd367928a099282931f718bd13c69f92766a5b761c7cf679b6ec2649b9f3f67a56ef4aad01ba9d9aeee7a5e5118311eb705587a5dd09e8611fb8e0d0b401c7830a31ae71dd6e630b95983dee31d2086ac6892fc420abe337db9ee601817a20968f793955ec9090ab5e4ffe5982c6c7158aecb4edd6156485ca0ea8032c9a505aa14a76063c4fd89c663f58d3e642e56b2a3ea62b9a6fecab5f4b81c5f8c757000b55b40ec62b0823bc76fee630b8dab4a20ac1753df7e40ac142fe90145685d18410a30aed53f32312083fc8f211c59aeeb1ce61a504d9c6c2eeed79c74b81f60a2b1e4185a626d8daea00b43ae29f20845c29a79f6bcaaf72be8275e242d8b346f25d2a5ca6dfeb2db435969b099560d1042164de8ea060e8dd5a0e25cc980d42dbfabc22b9e6b429a427c4f6413f6d38a4afb90d385e30c10a0c69808252324dcd14a5aac9b343d1eb1df2ed76a35a2b922bfaa13d8065d960b14cc3942b6643174a1f27b25deeeb3c97e2c404f9eb6af9ead1966157930d302f67f5dbd9b76ce1529cb76afe4ec87162a42d841a9373978a0e56a1c2e3356646ae0bde81ef33b90b6ca62dac48faa28fa164d5045934aaaa7d1e8b0e7ce815daacdbd9c3fcb11ecc6c6a8c44fb017d5a3310f5b3bd5a6d3e65963644b0b5ca98709f769a6e4a073adcddc2a03b1bd8d6ead2313c0a2a1abc4398f9a8629f68bedc2ab89f1e0efdea30b20358558983dd9fab4cf83af65fea7289b07da36e208d800cda2e59eeae941d07c99d18609528aa1c16f47a8716d9268bc5b7f5dbeb19951ca341d7cd029a0f7665b9741768c3dd45af5754eb6777eeb140287ab4800f73b67b3f7b53c7c9696ce3ca41af25a934236dd413acc37a4851a5728995342cb5c1578cf1611523cbed6be2a50c57bf6d21ad4e6d6c2e75b2e2d4f5376dd6a28dc27a5fb76a37105fa7e7edde6b66bb9346178da4468715436a27d14597eff22adad5ee8977b1e36a4bb92764c09d8d893edc873722bc54be29dca7b70925b39c550553d945e78d7b25fb5fb8e8a15cdb0132c802afed303e255eb70e8a298b0e036c4fb7fc6e4cb44cd09bf161a0e5a4431f83dc74e8633d05d105ae27a8fea00bf55b16363faa023009d18584eaa71fdebefbe9878fdfbe223e5e7bdffee76bf933903f7ff8f8ed8faf7ff83309cdc7b7afc8589791e94767c2a364bd7b88acee1dfc537972dc512b2868762597b2f9d7530b859830342a15a7846fb7c976fb9d69deb138a8835c646934a44d288c98d470946215675f38f95681fd0ee88e9feec3da57f98fdfbe78f9718ffbecce70648f57f1e64b3afffceae5b7e841c5ea7e6271d7768a60e2d950502aa1e0961ee1a65fe371c7cd913ab8d6110d938ecb8014e7b8c0197153325a3c04f8a8dcaed49ffb7b771adddfa3e9d69d7dbf7c5b7c1431fa39986e676fb2fcc3df3ffd106f9dd93f9cb8ef6cbf9efde3ebb8fff5e81ae764f4f3a53b8d66efdfbefcf6453cfbf0ea7dfc71eb4ea3f7c93cbd4ae75b105793946d5f522678926dbf4d0a4139dbbe1059c2443a4707ee34fa2012b648f862fb2ab9cfd2eba5d8bee7f42649b3945da303b919c836fffcf6e3f6a78f2f91ec6f38887f5e3c1c95688a7ebe1c5de3828c66ff180e7e5ebc18fe3d1e5db7508339500028b6b62e23b75bf34e264f73f0fa32fa7931f2042d847a8b118462aa0f4208bb94d0ed96d1db835789a0c8f25bf10aecaf5d4a4ca64b11c269f143f283fca59e99242f6985915bd4010d13e20aa30c9379aba4f85ccc44bcdd8aed567f1a0e54796bf3f1113a737efaf8327294daaef3e7b71fd56f805de87247082418acb289719b72e823f3ecc82050c94f1f5faaa0240e5e113a5b0e9c57103dd345786dbeefe1f3427dbecd995842c2bd4af86e93657fa30987b41b95f67dbee105245ceb5a29db08aa922e55d2073acfd94225bd35a5b22c2dacf4cf844dfd881a19fcd79cd177e09fdc45f80d91e228be2573f9e78e3c2ca2155e2ca28dbb4278b15844999706a7cc5ba82bc062b68e657247fae024c6abe86210e0d52adab8178300e1d56a650aaee48855d18b586674e60c8230c6f7f7919ece7b336121c2f7f7f7f7d13d5e46375f05e1761b8478b98c36aef942f8fbe8067fffbd4c42f86d748ddfbe8d36ee35c24574898b22dab8970867d1c67d8bc708bf913f403536dfb085fb7614f8086111dd9c07e1540326050705971f473b69418cc5bef26147f9718c3fee297ed4517c12e38ffbca1f77943f89f1df233e9594ea446cea0049bad505a8073a316e8eb6db99e3c4483954b31c1e3a0ec279e47e7eee4f9da1133903070d366ee0fb7d40d35596e75c612cb92cdccf6874eca381f5fdd5b15c54f8433473c4129e7a1cecb085831dbe70e2d9eaabc07f3e9efa912b7ff943f9ef21097cd497bf62fc297a837f886ecbfae5c280d6d2da37b73307293bb89bdecd685cd9bf05d8f2fa04a7b45a52d9d43ef128a9b0820511db6d7866ea9d8b334441f18dd6c1c8aa3616d6bd58c5ade4aa328b17f69b6b2a60759b0f2886d09990478b57ca9d60953c341ff72e1a1ca3af4e0663735d5375215a5d00f362556bcc6e8d75b7c695fe7b7bf50f5957aa8214988fea5bfd44435ef3db21930470744a27064fc1c0a29304b57c8e19334603dd99e5394c79133c4158349c8e352ef3c1c2c891bf9ca8be046bc44531d2561de66c6a7e44ed60f8534745ca8f1eca4a25de38b1d3c4748a87016afa2e2bf576421ef47e12398bc5e260b55a1d2c1607923f1d7cff7df4f66d54140e2e96398769899cd56831babf77f08a2ed2cd4aa7c94a182a3938cbd975956ca55f6db24ca54b968b0f9ab9d0839cbcc859466fdf1e7cfc68baa813a3a28074d9433bf5e0ef0e4e8b5c75209b1cae56c3c5021255d97a34ba9c4aaecb7efdf16b532687423f89795d4eeeaf9d65bffefbd70ea677eb94d34279a9fd2ee7ab44e1131f689c36107af077a7c48ae99107b3e94433e7c38639586ea70e763e6ea8839d4f107ee1e372e360e73b9e3ad8f990485ef461c316c9bd2aac7e7cdcd042fdfa4417ccfcfeb8dc70fdf33b9eaa1f1f12b1e1f2678cebdd2a9a397f4964bfdfd14bd96cc21decbc5873f82d6bfd0560fbcb2693e99b6bd90e5d3bd879076fe13fe4370e765ed1b92c93b04dc2ef555b5cff7c9bf0f95235996676a354b57aaf9add00a7fd40d782c2f534b49fab5f3fe43726f1159dab9f31ae368d68e6240e76244cc94afe90ffbc70b0f35efe7d2b7fbc75e212d75ed8bab4bbb2523ff9608605a648a9e218b19ba3f2c9b144acb73ef54ed7fd8af6bb5e7f7d74c6dc13db996a6e1977eb05ed0c2c03ef968b60cbdcbbe65345cddc762eeb771992717649764227d2d987fbd5659e79227fcfd3552ad21b1522a77a4aa88f979a5161b1dd5670371c59d60f14a61b7e562bdd5bc2f47ffb6f567707ab4d210e7485e4605da5c32581e718ef5b6ead2247847e618d94d63792c72e9756d64086cd3b050cced2af9f0a23e2d926eb59e3c5ac159a95d3c5666e071d67d8a8d1e30561784e16b3dccd508cafc86296c52d9fc50b0cb9388bc19ea94008af8890e5d67b22a5e9daa9b729e88ff40ad57301a6e47636dc8d2257c04bc2cc8f71411229205a2e8c28de10ee695589fa915327900c1f66bddea6d7cb95bf4070333acba634cab1ddd39e382f95e2e8e36aa3e2793015c3208285169c25e7c2a88f0e83960229ebf5582bc810b5f54671a1e3c3b018c5a57b85e798ce56b13ce1ac2506eec97a16548a282ddf8d4becba1bf250a25916930bbc99ad62728f375264c31495f0e46ecb6eff3b237a2ffe0f07f49effbf12cf7bf3c530dc8b2f96987fb1c4a3da10d9d375858223b55df8b05d78cc4d40cdc37d064a1e1e7373d0f20095f90d61ee89d292f798bb515141c25005b1f2983bb7887759ef10b5d3c7bc69caa5fd195254e2fcaa69acdee9d0d072480f318ac1b28d8a8ed0dfb4c4859d01973a544e55876f42ab5997ca4906878437e05b3a6d6fc5b6d66e1dd888e394381717aaa48ad837d4b7c3436770e522170d9c8b0b07e7ddca24958aa8adc0aeb810bc27d5be208dde3a5da542504e96465b5d39a596a789858be019dbccf1ae3605ac5b3bdcf9cee3888103ec896769ac9686ee14d312f3478295da434cafec6721801174a215b4067da45d06f4bde1d799eba684232985e5244153b9a9a4db6d304a09094679941e9214b68f1c4d19f123977579f91453a11c5407fec9f8e428380dc758b6e4b22df191e68b7a789201baba77ccb46d6c8a7339e8bdbafe5d6afb98b56279e71d41b35d97191c175ee22959c60a9e8df54b9cf5da273a28c79a31f138e568cd1ff5060247d3bfca9f525aa55eceda3a31c03afc43e2bafe967af96541f90d5d7c938a02f51852ee4acc3b70479bb2554d91e2518a7c1a399903b50d87da11ec14f36839ad673b120d9addab44a457ed2c8d3551d4099ec40674a591a4c6436de27d125cd4866b772ded55f7790cb4abab166cb259330ffbe8b56e60da6ef09a0a1729e0f6d1bcdb1879f50eba73e940677e1c4931b17e6f55ab5fa16f7799545a9df3e642e1bb0b0573841faaf8fd39363ad351569678adadb92ed4a9e85e6e5f4708dfc066758ff03571e5fe05a119c708e14bd8ce4e117e0b252ebf106de5f63779a5edd67d7cf745bdc5975ff439fbe68b7e6b7fb46d0a3b4b7cb24a74dbe1d9f6806967890f56895f3a4bd80688dd76a67fb54a649d25beb10d1e3b4bfcc52ad16daff827ab44de59e257a32ddaa5e2b1aa2ff2444351986251bac6d014e1377b3547f5c66778366baa8fb6597565cf2f2a07be26a9c4ccbbd08a5e74410e03f9bda66c91b26b63b26994480bb06bade41897791ba60cec89d53024344f5976175366f1fb8617a88e8ea58886302b9b8a11a0ae2439de46d01ff35c80ed6787b18a322a70460edef00cfeaec1ac347a28715a7c0ba6063afc41f92faa8eda28346784d6607674f9ea59e92a5e3e5d8dd3cc82eec17cba7b94578cb6f88e86c3674bc3e13173426daaa036eba635a22a684ca39a23549cbbb22d818795687722dd8ec2b5377bdc2042bbd34646a94d1ed35d93c7dbff0a66a499b778c48c94ff3633d2dd997ef3fb8d483b307ab71fa39512f72312e5ceeafed796a2d11984dc86e2984eb339a5c4fd1394ba1b8da8fc56cb2ab1d534a64f5fc455432abfddbc4aed027defb42bf5a4dd29ab26e86fb640bca245915cab282eb74b2acf54b551de76cbce1e611b8f189aa5576e6d6bb6d6b666f890831daabd627714e52c1b4b0f5cc0ec87e00e3fe8b96ddc01c82591d1a4a0441e794a6c66c9f6b3c3d10337633fd451224c357889b49b506da8a9e8ee49f25cdd5a24caca31d247f250e257b633c00f8d2bdb967e3a84e068450d7b2811d69bd594462d147f9cd1d82050fed69a86371253f96a9d66d4722bf6ea3ca047bd1e542202bf1a0c248771a5808d1fd69c0a711f1dfaa575b5f6ce2614cdaf17c0ac815c440ea6d6eb0d04fca995f87b3dfe3ba9669764f4c9af36bbcd498b80704192290728225e59116f6a8e3a47ae98eed8a9b3e90779b4f49468600250b917fac69559b1783ed8168b550d29b9d4869853b770374aff14454fa354f420ab7493677571da188527727456a55cc9b3710bec0d060fcde053b994bb8cea42e4e0744a53e57b4995dfda54f94b67c03a497aee0ee2c476bb136e4c1507b14b94151fc770624fc4125ea994216e5ad349d2eb29cfb1dafcb6a8b3f25e2f071bb18282fe3184a8af72b35e2fd3889f597beaee8b8789a676c87a3d07a24f35b84d7ae556ec476842eb9a03c719088fb2c5406850e58f0a304edecf58bcddbaf20f78d14baf5c6e2d4c6e16664266314ec903a7d7f46e1dddb8c8a538c102e1cff4be88924a99e35bbd52654d92e26fe54a4d4b97e107ca16e07e1bac640b5c41116d4a299a48fa976d83236fd928ce48e2d13b3a977c406222dbe1b70b92cdfc18cf495685e6c4578412421696a7a2c3aba9ac11a9496646b256ce585534c0a93372a24525615f19a93bdf9d98a6c3423a139e5c5b3199cf588c6989f003b84853cb0968f6e5bf286bfc3e41aabea6f93d0c4da007d1cdd024f7545bbc9174b75b518bc8bcca6e30dd69676a6452e5cc4c7fb17995ce419150ea4cf52b9ce11702d7c711239af312028ce8279482e4f5154d06f1248d1b870dc935ce0c769a8ca140bd1e18f6d68129d54d16c28f1f42d409232971a2e09e165df1948a69e126282aa26cbadb5c8613146da61b590208777f038ac850a7985b11daf7bf296ee00bdb7f5b83c330f2bdb52543b0b33ac297f143c6d054b43724610787ababe83776e39610d9dbf70f16ccbb6e5a6854ed2414355ef4beb39489acc5d022642bdecf6b173dc02afdf1ffce3356c216197dbf29ba2e0b0e44e52b46fbb1fee9c3f78e24065def4725513ca5aa71a468d55656131d52faebbacc3752cadd53e4371d926a68f6da02560fa3acf2be6ebbe1505105e1454fdfa1e2dc76bdf15046e959ae1da81281f38a69edb1e29d3e42c672250c6a5a2e51244a37c1b6c84311c2b9b7e119f9c1adfbfab2758e7ec9b65ccee3464c69c78904b05933ca060e1eca88030bac3872d3a7fdc889f25ac2bcaedc12e8ae1ce56b40c5a7afdc7ac4082fc8c31e1fdb1a5ddfbb6cf083727edded40f5452df2017e0a8494c354759caf08bd722d6aa56b42c6d779f49d8b8c574ff5d3f8f1945fda77a6555311b176c869a503e196fbb7c6371de2a9b97f58b46e74923d1c584eeaa7ffb7367fcce19572bf0060f757192a99f767da7e37699fbbd55b11eff564f5b4f86b92a50b032f45e88111a54555edf1b002e5c15c7d5df17c75c6493efdc5ad2373b567d288074a1ecc4b540919658910e66a4bb6cda398256a24b829c270edefe54bbbf0aff581d4f2e8e73a0397daf7e9722c706b3870908319e9d047f16e79b25ed345d58b721c662f6981674e4729cbfdce6fa407b36becde8bec36b483702e5927047bd726b535dbb75f120466dea716d084e2b7fa691f76e99f403b615318d5841abf7fad57d44feee7ea76b2dee9bf6915a89e13aa127fa9560e140092a874c3a5046baee2eb2a7fb2f5d4a7bfb8dfb8c89261515437f425afa80d17baff7bbd03694da912759c432b0dc74a063dac3de776baf7cdd2c5c10b0d02682062a56e98b3ecfe60ad04e54a362bf041a5d78d0f720eb0784e438d0aee8f4457d4ce7f551c6bb05e2e996ae3bb3ec63d62ff37099432513839467bdc0f9b959b3434c4b8949599f1b3bcdbc3bf8dfa87ff76d03f78b94cb8f07e290e6e42ef993796494b21d645341adddede82282f7e29bc9c5fcb2c778e0e423f785657932b056259e4bc90257e54d77e0b403c3f104b7af0f6f5c78337e99cb282fedb417ff46f5dc368912b255447687977cbdef37c4db9b8776b25d569e51a30a2fa6aef219167f44b793e9a85473e0e8f4e713899c4386122fde786de2e5321b3263e0ec7131c0632eb9f9b249af9b29c2efbcf4db24a78ca68340bc213951184314e7edd70d3b0297c49d36b489b60f83ff4637c9916ff040864a1f01407cf8e637c99497962e6631ffbf0c5e64bba48b255ce16baa884c8976d02fcb2a4ea22dbd09b34cfa88866c1f8141f8d7118ca16797ecba259703cc147213e0a637cb9e1d9fd6d9ecb06c31007a74738184f623c4f1654a8569f4d703039c5c1b11f6398574e3785355048cee7799600a2021f07fe048f6572ce934c412a0b9faa247695e5b794abc603dfc7c1d1331c8e4f546691669ff5e0e44c48e4cc79ba2a722621f471e86300e43e618d295824fc738d8560fc4c259972c1f8599d789d670bcab81cb41af0110e029dc5937b89a06758ff6f922955edf830193aadabe8e765f239950d3fc3c1e91807fe894a5f25d79489444ec8331bc23c4b6fa86eff7422cbe3235d25e709bbd654111c551de77cbe4c25ec93319664e91fa9744e17a6755db200628966e1788c83898f8330d41934d15d0647631c9c9ee2e068acb3e43c2a4c9e84f838a821851c85a0a3137cf20c9f3433e84e86d8f07f6ef2b4805909fd631cfa3aa7a2cea35349b4807e4ad7eb9499d9977471a2528bcff7666a8367819eef74a5e7ca9f60fdbf4ea53ba9f9e2da10dc58b67ba4dab84a39bde4a95c64c1c9291e1fe1f1518caf3249b6d5ba97f425d9821fe3ab9cd34268c449a2193f533536f3659126aab45e82d749ca8acb9ce79a6cd5ff31be5ee685308d4b0a37fc4612a5ee2f804565516918c8f537c1e330c67ad49249a8ff6592a1cef0146acaef7b9a65f9ad1cd918568944a6c68d5d7799337abfa0b7169392435de6a29e0b40a45cbd295ba409033a0bfd097e16e267a14abdcea3d9c904e85a96bb9127128d3cdda25e17d00b4c821fe32cb9815382a450951c4eace4cb4c9ec434339073309179b7cc906e28e7319423cee82a67f3657a7505e46e264d4e3e58266b662351111ccb8e74bae150477e8d1195017c23841e348781f46a520c7aa11ff97f60da5413140601d6ff57e97ac11de1702c17dc519dd159c19a80d31007cfc63abd5ad532e758af6a95532deb71882549072706aa6a0d05b0671c6b4c4356bdae8340b2c9631c4cc6cd4cda9d2928cd0c6e8fe5ae85c30a981a439a0a4218f08a1abeedab4f0db19a2faca0629469d42a728971c53ead35b64a789e3345d0c0f394f5596337f643681610a1b2adbd52d2874aac78eae9313e9da8495039eb0d5f67b2a5a3131c04210e836726ab46b79c8593673808c6555ecd4683506e0330eb55ee9aa7ecba5ab772a4c1e4c8e45a6cf34482ff4cf17895a938a7e2f5cf9ee1503268d96bba6035a58712e5125c99c1843c0aadb4c8a1d6864c2fc43dcf0b4bea0843898f7c3e4f8a9459c2c869106396dc24bfe4365794e2c2c91872eef5ae2b974f9e2de0a264164ec64ac091d307bb5ccd7a4cca82279772924e70701462297834f6bc63201295a4b8ce64828f9fa9443561c01a615a8e62bc4e326ab3cdf1290e6125f83a4f2fc14988c349808349a8d22d84072713acea9daa3c0bdfa15c0041a836a675b24eee93db65ba36b2989c8c718cd734992fd79bab2bc3cd250627329d6f14df0cc6637c2c4bd60bfc999c6799946de444c9593d963b4610e3757ebba8c4a513b9c28e144e2bca04f207e4737a49e7f3a4caf1430ce31ccbac85593c7e8c795edc1b6950edfe4a02e0f97da257f4b162fc401445b25864d454183f939320d741cd8a340395b350246c611a0f8f8e70707c84a53c5b2f97a363d83b4f4f20b158d22c336c7ea2305fa49431292c1dfbf834c492f317697623b70a892bfd7f8c77d99a24227bf1f9c7f8995eea0d46172a8025176ef0383b9dd5fc4b6f4d3b0b1744db185b9cf0043641b5610ad84502f8525b9ea072c3b1b61b79ac131948cec74abc098e632cf2552272d5f9b367f82488b145a4c7478a0afcd3181b490af614d8454f637cbba489d00b1ed6e933996649347a4f83b462957fb60f2412d96de6ed9ba46a091d19765de27d77d5ae200ffacc163d942516e60487ea9f65f3f0afcea40f6515bc861fa44c1eeadb873a0ec10f6762c6e3985486e1f519f1815f5f460ff365c218cd8a688cb3e452fe70f8f5a553e2659175e62e8b0c726ff6e4dec8dcdbee9697b7b2e5f9eafeb3957d5465cb0ca7c477f7bf76d6bebbffd529e557676e96c8b6b3f9b23b77be9470d13b2b3730b9336749ef9cb8c49fe9fd6dce17dd6574a62c97b0220d8ebb8ba93c532a9c3c522c9c40b9e5fcba0be699b3744017dbb986d6d692617596e3c1b12c05ff5eaabe610d77762c739cb8ace92795f40391b7933609a548bd28ba8e69c9916567698c762f91566951a4ecfac0143d58eb66a20367902a5d00d751703cbd990355a1a33159df53b9fa16e99010483410ec366e1a4dd842357c30cf374c1407abb4504fd1aa797559dd680c0c46ab1ecf8cdfb046113b5195d377aa9eba2bab102b4be01aa9e6fd392fd1a31534f24cf1a24465e2f1eb4b6f5964bbcadfe03d95cefc7824f95342e82c503f534267a1fa99932a762387605bb8205510479d929162989bebaf02dea304f1230e0eb4057193618a465994e8ef70e0a6432e5352a2e2ab0b723470f93041a30c6157d45d1efb7d81c7c73e42e7be2c3720f20333e2e683028d423c1338f0fdbe5be8288eec9c78936936728b418ea26ce486c362982304a5985c251a1d37dde89003c2798d94a2464a56236553a3009c4a21bc209b6105b54e9b77bccfba9b2145a3e3d162e04d4adb83c6629a9094f8919b92c568830599bbb91ce8dc2d10e664ee6608e78490cd34217cc8a242ff0e46e38118f22893dfbd9e9b9070341eb0a1403839f7a7c9800451f23c90394312208467e363bf9f003e52f8775363e5f6b2cb4069e6c798011e805c4273f93cab48cba548160a2472fa151a04ae7e32cc11eac34d959c2d4e82a15d38b9ab0a2777aa30aaa0924cbf6bb2ea49e2f52425d5241920a1433718b2a14d58c190e160c871304c10422337180ab4ddfa8a4e64713e145dc9c96eb2a820d51bc00eb09cb09972056059f36b6fda38c70509467ec56d33b55ba757eece869d2113730e8cde17c44d09c539d9e02ac45c3af3e3612e2723d4ae7d546a205383766a285343998ace16e70528c32c704232e328e000145ef4b8e4183b550e66b442c1ddfdaf7b4808a687d533c5bb67ca3b0ac2a3be2b8878eef947fed1645ac1eb8a81e74f266814c83f38f48e50244641e83d0bd1c01b4f4e8efb2e236cb71edbadc7aa7ac1a93f9114c977ebf1dd7a5cd7d314e1854178dc1703ef2498847dd9cf4918f6b9c9f5836763991b04cf20f7d9c49ff4794dda59d2b5e02a4caa57202167931321a72f25a25e7f077c44e4924ae59f53eff4742c19231b916713cf3f3a41cf3ddf3f3d9d1cd7236238188d5174e29d9c9ef4d920381e05c1319e05c1b1c140ab02b72b705d010d83633c910364438e70082b7ae8a624dd6d20b51b484d030a03cb22db21a94e463c3ef60d2396e3d58c38f07db9a4409b4b2fab594a2453c9708ad3f84c90b09f0d5d46b273b927f4dd6050a0281b14c3ac5f209c10fd2e502dbd0df1cf36e7e3b3cd60805c4ef241301af787ee6618a8fd870f06984b5eca87439c92e33e3f0fa66220c96e28509f4721a4b068dce7e7e1540c54ba1b8ec6438efac791c0c96c13038ce999bdc2242a3af7249bfbc2e07935789c1086537b33f6fca07e60eb1397f74988ce4930e55138e438e993547ea551384cab9d53a99784fd64e4a6830445619f8d5c3e600861f8330a25dfd61376d33d616a9a8efdbd805a7ea504faea58d2f1b0918673c00aef4bce2c658cfaab0f1286f5ed06c314a1b3026215c22025e3470ff3a4a0077ea44981e30ce7f119240626b1c0bc4a0c4d628e39ce74e2b84e2c30d789472631c3799538a93bca71119706417b252dd89bfc18842b8da3bcc651618b14f64472e286c314f573cc48da2ff04cedddae5aeaaed0d9054cb488c2c68ec54724d48bedf6f24b8b0ddc63560b6e5383b9a8c19c93cd6061503f07b962332273bc1891b994538ee58a13f67c1ff73384b07f48dca02710f85e0c24db48c866c0fbaecb48305ca0e106c963af795a040c1f477a4653c2704e125c90cdd925a7c96733ab29016ded764618a564a333123b63ac336453ccce38d24d6dda1913ddb9cc48f4a63883f52bcff4fd1cfe2d00c3524e796c7948f4ed5b1f7436560ccdeac10d6a8932c0427e27689020847773d9a3b9bcce0548efee7f7d8c166a703b49b5e23064e83d3b3e7dd64f0681777a3239eda703cf3f0a245638915be6493f190cbdd03f929cdff32727fd1c0b49b2632f3cf28f656ee04dc627613f1d0cbda367a7c7fd1c76ad7130f64fa7b0edf6abad4448f9d23b4243991cc136dc976220db5b8375d490471ebeb706efa8c1b19a0e4b7aac96aa8f05c281413aeb2cc1ac12bcb3048712d5d4744b057bc5f003a6c4005e8b0112c98f8801c2de9445530cd0f87c82dc508b0142b2ec500904bf458e5043ce923d62a3458d674251e2c4f70792f32583e018411b9813365492a4ef6b67da16dc63644eb06ae0e3eafcaac01ad71ba625bea491cb861ac811008d05c9abec3c72452b9b93a2ca2e2297b7b267a2afa703b3be9aadbe99ad0a0959cb72d83ee7e8338e3edfd4fac6f230a73c788a84856e82391a85234879ffba79689e31754c28fec985cbfb7c90f41384d5e9259b2fbbc9aed97da575a49881ec3cecebce64fb5c7dcc73707da5bf0a7914ac655e75fdf52402c72909e0eec9e8f64c6b2d9f208eaaa3bc3c7e86b111065d4d00ca2b6c3a9af8089963d7d8d73737637f60fb8ee5f21c82cecfc3ad95c8746260270a48aca8262484a4bd9e9b0f88c4716ea4808e511a79cfc2825bc95452d4974346369ac2c9d3f0544f0b98be3090e8c4f9e934388ec4f3f0e8741a8e83c81a842b86a768141e9df4c3233408c761141c0fc6c7fdf638fb133468a43293dac65d7f0290ab61eddb05bf0a2a895d6cb727f24fe544eff9c4d0aa37417826881805be37e94bd94e60116b1d734fee6d83fff13f5c59a19a8619c8167d06a55df1fc79d00beccfb0fa8c0d94e16417ccf4caa5cf49380e0dc481df77e950260c4e4d5702c0296d9f070774482403b5a41e3a1a1fa39102df4a7619a15fc99c2a937d75ac7ed5b730f4ae0379aeeb869349cfc23b85c8ede7e7c1311a74640690798a06bb59618c10aa9ca6bac171cb4fa271f9e7c37f8e36e8004f7fc6a6632080d2e9ddbeb96e36af3c178f66c9f0ca1f3e8b1f8ecb6df57b5c8ef4e5afa106732ed37ab192ff8f25b1ccfcb836db618479c53a4b85eb3808fc0176fa181e5821129d2a261d84b67f0d1ac0c1714545fcf9f3e0b8079713cf9f9ff6f4c34d8fd75333bffe1d3751f621ad71c9851364dfaf366ecb645e41d2fa5e5590e29cf8531f2e4dd9545d97165f1dc3379f8603371932342aa2a3019ccb47c5e0088b113956377eaef88a04ea5450e82bd3f3609a8fdc6058a0c8af4fe49d63ace540568bad9c04a087a937234e983c67877dd16791fc178e72e81cee1e89cb86dea4cfe1f28c238467c0c624201cfe4daa13e66f0140f49905c201af3bfb624ff3ebc784f5f1bec3ac6160c66c1364438ead7fe32a509ed13bcc89f82ae81fe382e45f053823c1b03047288b37e4a83ac2a6333f26014e67414c0a9ccec298f8ad938f2c91a9124147895095f01b258ad659c82a91a91241eb50244b14aa84df2c614e6a36a8ba48565d1e1220814a82667d597a901871b92f6b353e43f959cdcfbe1b918a12c4c04c4b1fee6431af69813df7e1b029466c970698d547c771bd8bda540f036fd2173bdd00e1cbaedcb0cf50c49e136f2253030d811beac5f028247b6edff78ed6b0adaa45b86ec23a9fd5e7fe2faea86068ad293614bf734dc10be49e5be299ba229a4cc66adf83deedcfd0faac8545d9e2ded624d9401d6cb86ef5195a9fd0da354fee1f054d0e4341b2e7a36e46d24cf5f3a6ab45b9f0655dabce6d67d74a1db65974e7c1c3de155b65db42bb4d1292f7d4fd774a151d2285192ebcb2b942cb17024409f1fba486ca1274c0ccc44a98ba00071006723a81d8d1680cf308379025b2cc6e7887d766dbbae2a1c482d8ee8799e40e467ed1f6031cec07e84ccc9238260f8b54c5348986015e279c32a143791a61a274652333aaae8cc58cc69ea923178c6efc0c193012c25590862accbf866596c472eb4f0d3805f1cf8af3fcac180cd4a83292ce8a18ab979eb3614008d9547df57a6efd4124f0d5d720c01b4fc14e12ccbd0d8308fb6e86aa271dcb457fd25036a9f0c86c27a22e43b65d6d5a076150a2d40cd0a0bac4549ed9989d14cf286c8075ca9998e5d56f548368254b7c25a09a92d7ede4314e11345557af8c9ee639bba1bc487346384e4b26890c33b952e1df1bf9efad4c918b0b33efeefe57cce4ea91ffce97329bde61669eba30d34719fd239cc85fcbf935560e95296640c2fa34f9509e3549adc3332b450ff98cc69230bb5ff0656ec7933f039fcd3a75eff3bfaadc7afe87aa2a4d7bc068067dac3d4e73f5d4f45056e6f8c66737ce49f2089526b3223e33410e67999918502cca6292ba191635e9b1d2a5e8ace5147c175595198e98b1f84c0e6dc6e20eee651bb255468696fb8cb611115c570b1d58ab36b3041713ca9d516da65939457045c331bb15f2ad5e03ac8badc8456edf44c0a2afc406c3549c9a729d941dc8b52d6c6aa6d607f8c6e1086b8c783cb9fd02561ad656622a22f75fc209a6e079e8f783ae43924b400b92e3ec0fdba13f6c87feb01dfac376e80fdba13f6c87feb01dfac376e80fdba13f6c87feb01dfac376e80fdba1df603bb4210fd754fc787d99440b7c4dc5f745964473acd2a2dd03e2c2f2f6267a3d5105d41dab1834df175947adf9976add5e4657f2c78b6cbd4cbed4ed54ccc671e4aa6651f575557f69ff197849ef7480b24e0b2951fbe014bdde18bce0a993ed544474368eb1f3efcee05ebd96c2df40ff0d633470c573e2f77ae23c98dedbfa00e164d21708458e834accaf2f1f85e03cd86e654fbd9efcf73c982e211feca45c6700379a0e3e70d4b5a6fe15c6030739d078a25b5f4a1e35a74c74f6965eb93b3d99ab8e957240a26e2cdaf7b9fafe14614e5a0fc47556425a0fc4559639ebabb1b081f395849febbfc9c0f94a8e42036e46b2c2cb22fb6d385b6b9c2d8bac03675fd54883fe964566fa5ae3e5eda3f3d3f2205b47739b8de3a9fc270a107696b75d7365f7eb0c5c9bd4824370da260b0849276a3a8d8158c753f4cd8c5a6b060caccca5eac2681f5461a6f4ad032301b884d3efe7fff87777960caf5e0cbf532fe7f8a8447f1aa510a8de51f6050f097139e192ca67e35ab53925fe597a6eaebfcf52f02994c6f543389fa5f140fe030fe2093cb05b3451954b06892c51d1c748fe53d2aca007b2ffbdb01e978dcfb04453005ddd422684cfc2182bc0f197813521a5fb290efbe920445f82fa8930cbd538fdd9fdb9e8bbb3c1309efebc18a09f8b3efe62823b8deab4d9cf8b9fbd18d2d1f4676b984f99854110a333a692becbf244261ec54f03b7eaf8ab068c4f49fed70660b34e6f32e937a087213d754ceecfb703345266858ee0092bd48db243145137dec2fc58190d0a92cd646e6c14bdcac780bd70e51f758ab1d4ffd876eb13c2a6172e93f21c8a022c3722c2b0285ba190eda55acf86644a6de271a7d1825ea36927e2bba7e34bb33142ca4bb436f4b5902a2452cdabf0454dfd42220efb60488775baa911420e6c02ad9cb19da3a2f933340d22859db82c5ba19ef720e5f6f2ff972859fe8e3d482ee7470506d86c60a3a9fa59d9fd9816f689007a43db27067465873bd9ae505bf7761ba0262cebdfb3ef1659d798ed8db763d4172d77ddbb5ad5e04c93591e84eff72aa775bd621f18b6711e4e1d5f6ef10254fe6e6cc3faeb83941d64e86696cdaee3985c8300d66922470f52a61e68f3ab83cba9f281da4c53b166c0cd1e390cb0f9da506d886f4482659159bf6feadfb7751930a0af78244e40220f5410e85deff974ea0ab2f1f4194249e03a3c10445c2b5cb0f897e29929288f189d059745d62c787b29cbd50187aa82b7aac59d7735daebd572962b08451edf6e6bc9cbe374b1173eab58d6a80457628c16c55e88adc2378daa30091dd56edad56e1bd5e06cd7dde3ad0dac5c20debcd7b3bfee13a6dcc4dad5c0f90116082114317a7b2011ab1e75cbb3cbfae98e3c68ffaa1da1446b128383c7be1205151fd6c99c6abcd60f80cae9c3176b014a9bb56e9e52eba655ebf609100232ed5a40fb5faca69069d7e3d797f008fa08da36b4f0f8f52560e12965974506637f5ad91b18f14e59cb83b42a6a385400b147616d4f29e8796937e3339d1aa308d2154e9e02842ca78ea44f07832a23ed76d7ea8cf65b9a5916595733c9ce75427b7fd18b538f419577dbab07921df0b0aca21571da794a33f55e2a8d0bbd047c089fa42e5f9e5c29804a702bf5e43a21d45976575111795cfa1518749cfbd3f1b13fa0911e53a33158820aea22111bae7c1c3f050ca8a940af98e6d32b86ad2e6f9e58f5c6f459b1cda755bcb5f09ccc3fffb68a0a58a52bf36430552578a07a4a1dc568d44c984794a7d75343d3b7814faf16d618f90db5c68af676efdbaa8a1bafca755b4cb1fb9eccaa59e5b66be29dd58b1ad7627b1a4b7e436b7beed5ac061b259ed466c70d978d2793ebb636847d6d3d36da3afb69adedde87d98ddd76cdc3f2b67b943bf759564b3aefa9f3f9c3667549f9a39b81ac5e6d08333f3e3f0f8eb7f240707e7eba95a78112679b55caf22215f75d8ea3775ac382cc62e34adbdc0430a3bfc6099d31e583023c6cf373e2f9e367e1e954fb79881e7306a1b5dab40f087980516e20e4d9527b821000f33c67822785e8b8140770eb31b908a298d909d581e4399b2a0f1868a43c5aa048ff1de9f41267f486765dde5711912518f63dfc7372e20553e7c58b174e249e93236f223f9cc8714a501479ea74b9e1b3677d38c44d4e4ffa70860b82a3bed2e10de8f83c084ff586b24b4b87d0a6ec0ee284d2eb46e4317b76673116c43f13e7e333a13477c19bc2b005d44cd436715d2705bd636a805a7bba85b17aa155cdc9232938e1e853bce728a1db96e3f9ad4d0f9fd6b4de5fe96f693c00b88327c04d7f5ff3c3a735af36f82f357d7bf934c8d5514a370d1bde6f6bfbb1d96cb47dcde97d314f32fac5158105f1c66a2d7893676a2d7841d06f586a7651a5362d343dce339a709b61768e0618ecbe66b5d02b86a25f917cbe4efeb9f99fd3ecc06a96e7e24914831971815752f4d5f8d8af67c28f09d3222d8bd817886895de758626a476a85031f52691c00909fb7c18e0548102c0bb68c8cc2f9c13d74dfa2921c3609a446e3248d1c80d06493f456810a051880b12588678b2157e7de9e67df5932e5c3428fa4cfdc23a190e0b3a43ff3659f248a073d44fa461b101ecf34105625f99dd9458e47ff9f0ee877da7380994944db39ced9229065f09f4f6e012737b522010a23e8b353cfe71c477ddfdc109049e899c99bab95131196287c06dcd4359ddad29ed618ad03499a531a91ebf505455552201d415ba5434cf599167d4a3ca21df86d1bb359d0bba3898e759ce0f94b82e79b8a54c5de24b5b79599ef1cdb599c3e9c2c10e4c81831d897047dfa239cb0d75b0539f561cec54671e475faf751502181c7de7a60b540717e8449f451c7317e7c80383831d7d0470b0a3847a53d8899b43582577d5081a2a0300f8f858a9c206beb9046ca648b01a290a08fd592537bbbc368b6d8f8d804d33602a005670b554c541e7bd8a41c7510c561f331edb371642d174afe7322f315f08b3d60c76c052ad72f00a6143a357b69a769cab2fc020ce48004f03d6ddaa8f3503238450941171669ea12aebe604c2d156afb5668808677248fa2baeead5b77e332b045fac90d7217b26daa2c12ace507c964974941d8da6b2bc1fc7c6fb5b6a2c901e6d7b3363b16e540eb704ff9df09358be472c373115e3cca6ba609421d4c09696d7827dbdf3cea6b5bd02d6b021647ed9ef861c55ec6721d94f8a16872a0871325bc4a4903516b12b6b562bffd0df211bb8dfeb0e3537f32b4aacc349abbba38af65d8a22d761c0972c5b0f78587ec4464220d4deb12866d55d530b467dee6e4059c79eb1285bcef32ec47c26e2089c3ccc440cf047aefc4976764d0ac16f140c4e158fa78ef4739bb2457edbebb9ea87f752725872a9ae95dfe2cfe412bf210f2ccfd7f67652e24dba88dcb7c4c7bb1bd1dbc1a044382d7ed864d93bfe93ecb3eb0a4259a4d012ebc09ced28d28da89dbd5e33882735cfbc87beb66ad226453596db9b9051639955cf0d727dab40953e3e41bd9e53ef6355cef018490855ebfb86a1a8b4dad3546168e78b50c9c6bf4b592abaee9f76c9906eb78d8724b57da25ecfb4e256f759eff82b6da0fdb84e0c9d8a88ea3a2fc46b08f6d959d57a6c7be335bb70df5833339567b248127f89e5282f9b7750d8c43f962833c9d60801339553101db68961814a4c93f9b2d512e66ad180fb32c9e76d48507ae5a6953618e648299aa4c3e02c794efcb36438443a8a3dc37496c438418aa5ab82fe59729e8225577729dd9d8e894611523a076edeb0a0a308358dc3769acc67491c63f92f2a712281fff69f9b242bba045ce5aa0d941ee8767b28b65b5abb36aeb6af3697061522c3a5cff9d960c0c09b33dc7e804f49c99c6dcad2cb2edd4953ee9edf78169c6e82d36a4106d5fe951c1292d6a0d40cbb259eaaf5fe6677711f50f0eaf14685ec43673bf8b664938712b316da718759de609020316360edabdb75a9faaeaf44cacada175fac28bf6e9c951a5407f20d18bcd2f8cc822d41bd9ef599a2e91b0f5a92a8c21c45b25e05408aaa8e5e5fed2c156308496329a8b73ae2cd8e92aaa3d7572ec7098a765cc852b4ddba8dee1379ae804add7d5bbe01df58f1d5a7229a89186f4856e9d70061d81364100974c8890b3a360f255230f2edf68da707ae6768033324253192c9a5663527d4fa2a882fcf6b69cb4ad5ac31304f1d0c0ac45db09f5603a9edb7b1c64e375734b3246b3de8a9af407c7d554a267427285be830c55e5214e935db6e3b7686baad59dc694d89035475d2463c4c909cec52f699b225e5a928f61cae31eb0ed9260f52826fe622e710b6cdfaee3a4076472b9552be55d8dc239a864865c77ac0ad27686bcfc3cc4a97c74f8e99a7b028e9490f0d5349c82ad9b56a8012877771516cd6945f5c341b2ef1c582ae399d27a2f19657ad514b5bd39c2a6f13ce5c3af83a3a70be1eb0c1d7ce415a1cd4ad7807ef2188dec1a6a0b2048712ac1034597c8dca12df9237676f60265feacd8da84ff953d2ab0a97bd23da6924b545485d5ccb0350b4c46f2a71b4da62497bcfb50ab5b76d53b69d0ea2d21d79c8524613def9be2837d982be66ffb1493a1f47695f1779b7117bca0c29b8cc42a6a9fd255d3a22de049d07536fd2a77d1a0dbd49df1d9a068641d5c6cbcd653adf038f05d1be622e1d9200c9a283c0026b7ff1265c7d1a49c0642ba16aa51edd7f6c12de2918d27e13b67d05876e0d5d9f5a637ea4ce2e800679358c7d7b0efe6393b2c7a06cc0d95dd486b285c7fd5576c1dcc1650b9f1f52d6f914abdd99cef3c2a57d577b1c1c85085580efab59b920ecaa07f0efa90908ad7ad555fbd4a6cb6fefd679579f4ab0f6ebc7a3102b4f728105f0beca01540e223d64557d18f87d6a03fda5ae4d2b8d49e88207e6236cf7351cd21a472f53debdfa9e93604aa3a15bbb950c86d446915c657b2adb750c71d903dc53af1e4f3d3fcd9ea376ba213634b0662e4b0ad15afddae59f77e2079353acc4e6e06c1f5ed976eb32e28d11e6e7c1d4e524c082b0d1118ae41fb7728b89b47b4e4982c188233ce4bbf34002846a67992e555ec3ab2646cca69bff73a037205724f938d483063ffbdd908784e879b7c03f9afc66f8e97930fd5dd8ef0fbd49b433faa755f5261616be696b6434c67f66b165d71503b92686a29efa27d5ae38b569612050835f3fb115b3ce1430c1c0157d127893708214547d6fd2e4e53b8564c7356bff26dfb0f91ee67ee799114221b998ad51efad48cf8351e89d4ca627dee4385442043d0f1b69800e6f02691226ef6422cbe814bb54e88556b167e39349d4c83d6e649f1e8d4f2636561f81d29b48eeab066910e1867d0abcaa3df610c4808137294bfc37f240afaee85c14d15d79762b4ba6ecfa5b9544ee40a2fb488c03de57e4e32838f5f10712f63fe277e4e328c4efc9c7d111fe56a68cc6f817f200af8a0d30a93717771ea4ff284f5ae064ccbb4d176289a9b7a4e9f552d220dcd2d2c58fcd9b305cf98f87637caaa8c9726a99e26414623e0a112e8818e438236c90e30d11033eccf182b04132cccfa8b7ca6fe8c7dc153843b838dff47ad9f962ea522fe173b7c019cef1f0231ebe4358256d54d23becd7290b9c631f57450a4878873f221415e71bd998eea4c06ca71dab5aa6aa0dde21147541e1377bf0a18756998fb2cc3ccb0bfa3e114b577e552364daf2857a1c8eb60a85a8c40b9edcbecf9be2948d61c0ad3c8a6339d83971d3edd647fd57f0c4d1ebede8528b5ecfad2e26bffff8f6cdeb55726de2f9ab27bb9c885a1b1ea1edb651fe65c26e92c2ae905bd733457243616460a7932582c2ad03a69e7a0d76e7f2b71c14f4eb0a3c148ab046a1fca9686b14629d8a4d12526f11123f85c839757570306372b1ddb273e223f4a0bd6852ef925ea74c63da8a23a02645628f611f7f68cd89e5ecd2113c4dd875469da89a283ea838fb1cf5194e6a21547e233c1f906f31f5e481ea7f41f1bda04aa2f951ad4627da10367417c49b04c77d563937875606ef517f833352f7a352345286054e8699a4a3e1473caf57161f6438191690f10ecfebe4022703288fe783baf430c3c9004a0fdee1f9a04df76dc09d48ce648a1e740cad0ffff1e3c7e022ec33ac57031f6e7032dce0b00fffeb06caf980bcb7872f9cc81eabc4a03d52040d9a8954434536f2618c8d14189e9da246f6c878e63c2f0a00a5860ed2fe45d82a482a42dc8156c36643538884ff6feb5812f37bfc7f609432eb7fca28ed461749b1b417be6262cd855af59534172e2aa97795661930c242f0fc33755159e28bb40056fe9abde034e9be70a4dedd73e165f44a0c033a3ceef5a877772e3c2e79e0c0a4dc3f971c7a5d95b83f17de652e44be8222259e67e9baa30f8b3fdbdcd16c3ad02d86a6b1ee725825aaf68790ab1640ba76518937aca333d955c5a84bacd0b6f7ce9c7985a0eb355dbc491985308dcad673952e1619955b4ca28aa6c415dedd80797768149e55d391623e65de7d24bc7b6b9264aaf0ee23e6ddabcdd549ae04bc9d91a4d73be4dbad4e3884043ead6a0aef0ecb5a5195c2bc3b2c5b3f6ba4542d1f304f5056a4399b4accfe9a52fe72c315e14c85d2b2cc3398fbf79cdea4f9a6f8cfa899fe03bd13ff89f795fe5b47e9bfc1a877da8858777f9da5ffb6a7f4df30ebc4018cb8c42fc92f67b74a3e24bfa8bff81676f51f6b9110f64ed2a4099bea7ef12cf9515f35ff62df33832cfb3d79b828e89e37cb5b7da32e966931a3f1766b7e9187526efa6579f6bd27abbbce75965f2699838d1c00efda91b28ed456715e801cacb3bfcb9929f2efc7c7c78df4ef92559add47ced7dfd3ec868a749e1cfc4037f46b7c50a7c88f173c4db2aff14191b06258509e5e359af990fe4aa3206c2489fb8c460ecbf94ac2aa73e4aaf81e84a028f0425c2cf35b99544487bef6e1f9827c8f7f20b7ed0be1efc883c8adda5d2a10aee30c68e58dff1faeea7bebfebc18b8d3e867efe7c5004d91bbbedbd2d5f62bb0d0579217db6e0da08410561b621f045ed817c69b392503360b63cc66e358393377d6774e54bd0341ca574e4421624de590b64f4b2cf2f7c962d174e2d0880373569181f5c43475051950c9a5b65b1f33f91b3899fce2f24b3132f999c84fc9dea4c81c09c20827324de63d887c1d090c55238655a58863593c4ab0124a2331e018e4d4281930c9e1956d70ceba14bb5f788a0831233fb8d4bbd23480c173ab4d150873f270a5a8cc945444d72cabd210b0573dc5b75ebe96bd169e3df3ae6ca52e55b7521741f2fc53489264b80032ac60945f2d206512c2b7aa4fb6c932ac2c4823c7b15e7f545a87f1eb21dd6ee5a4591a212ef564efa82b43a1024d6547912c28bb9feabf03e7c001671b2ef5144053f3a3ca526d0f9cf5dd813330ed81df545e624e8b3cbb693f7536f40870410e5538ce8440082cf3b6989ca7e67db23650cd099d2531b28d5645a76a43deebb939c95d2185f4c3401f716479d6ebdd562fab3952e5662c6e97ab8f5ebcd73b2c7a3d977bf364bea4c96546a1685e96f83579b8b84ae622e7727e3b161399c5c6150cdc9052a57825487026ceb9d2abff4a10e2838ede7a532c25ccfa171d096485a623c4f5b71cf57a3a9bcb8245ce85edf8d8167886a24448fbc46625cef2eb40df93c3cfe653aa5a4926d735b78d6fdefd39f0bfc50d4f1fa27ee425a40ef014f898a1298b4459e21fc9ebb35bd50d79adfe023ffd446ef1afe46ff827f212ff957c87bf213fe2bf28974a227bb148d6a2e385d67436ed1ae683a59cccec5024033164252ea8f8046cc41eab209209d23bf1224bafbb4ccb9c39655aa2a1531a39c0acd49723f99463924a7cf73edbb4d547ac0900b6f65dcedf08bebf5059c24545648fa5f152d8398ac78720ab3d06dbe029b0956589f31bca79baa01fe99d78954a79b669dd68e9cb9c399900a94fae4a2e32f8b9ddba9ccc5c70510c371c8abb20ef9a0af3800e6fabaeb330cd3b92b4adfcf73ccd792aee1b456249fe75193b0f0beca4ab75ce45c2842345d735a7378d11100e76a92049ef1b5aedc360a7fa99cd815c1d6abca31c6e8e7a3fc0333fc6e02843ca569ff4ed23f9157fd2f5c94ff893d982c85ff12729582cc937f893c74546fe02abeb4f8d1de19379e307350363b89ab254a44996fe4af728219c55f5fe6429003c5cc83fda8c1ed78d446d858565ba5850460e8312afd39b5c749b70d496c8173729bddd6e5dfd8b54bd3f94987a17ab7c41332467f0429eb941fb482e5e9eb022dd335d5a5143e8da108a40d5c689fc29fba9d4d99573293a7593edd6adb241cce540baa2ee19e147b732735588aff0b2150ec1dae2961d5bdc86b0594e96a09cb6a346942b35a23c261b84dd027cf2a3438840ee5cc82596cffc58e9f97556a5b26a81b0bb30dbe306999dd2cd88cc06fdbdda5705594073ee9c7c763384943277afe75e91cfeec67ca30780e9ca5ba577ee1c7364599da23379f649d98696958eda27afd29ccc50af677d6e906e2b1bb89b6186fabcaeaec65d96fa5e5152318a5cd1412c0ce16aaa40701260c39167225dbfcfdbc4626d1f40b68a54bc3b7cdff8be2f4bbc4c8abf36cd962b06f90924aad525e56ea3153dbe8e2c79ca43f84f462be753a595030bf8cfe44ff89fe4cfd5a8c007b91203e71bcec16896ae231fb3cd4afe2aa2631f2b5611390ee6cac33094cfd90b96aec088e23dcfaf392d8a9d8c97f96a2d19978abc81f07f27ff3ceb0e79f04f8b153889a9afca3a58eedf7bec64cabd51141a4dc2405f6bfdc7471b04257e015b62734faff208959dbe681f4f2ba8a38785b1d10fe8b8429fad3ce2600b6b9f3c96e76b6ca14ba594fa8cf81fa46ebb88a4c047ffb9a1859eb764b1a8f0fd9824ac0da6aa86949c684684850794fd315d51f22a11d463f9ad2b29de8c8530e057d434c1aec921381b943c27efe039f92c8975f3b5b501282b431611e82caf24d28090aa11ed5f468fb21adc773c59c19dd45cce61d63568c3a03f7957295b80c694db1a36ae6559cb83610d6789d0d930d0db6eab2e84a89b5357e0006ecc6b4404b0d777c0bb6777521af3849a41f67a6ef59b7cb2870ead289532a5d76f0d40ddd5a94a400b544de2abf49a16c2452542a8c456d2ce669a2c6e24325dbd775b43d50125fc2f4d866ea1d3c2d7bc76b5494ffb044caa103b82b89424b334466a22c06edab02073bed141176be21cd29a66d1885694da67681048b9a8e668f51326977cfc53a5e50768974c0dcf20e08d68657670393c53e51a1d3c276ceaeeab69d6b5a9291aa483134357290e108a0683b42cf1df49258d79fa9c8bff93cc1cb9601cecacf3b5831d88b523ff427d073b3afc8e13d7ee28296dd8547a1780e15f8ab3f4aa8ecdc2bc2c2d046594173821dca832ca93182c86a4d7e306ca44523faf0864bb75ffb323ec0bbcdb29a17526e212215cc9b006025482172ed1b6f06989919068498d82da62e322114941857ed5fc286548580a327d27f1a259fadd5ab35447ced9351c3ee1ead0c1ce65ce1794bf4cd67063522734b25f253019f5c7bbabab828a2ae92f79ca9af5e194e5c40a92a783d1f8526d481a48f5858e13774accb6bd14709d8adb3335c3446039f3ecf3877992d1421ee3bd64b1d070a9ef0ba5ec2b4f4b6fa9485ce4c984126fd68b4450e0b1bbfba46a9dc2fb816e7c8fa975d52c368e0d3403101e586817c6c0f59a8a576af65c0462b6591daa98895b44bdbb177769f1fa15bcbfa89f0729c8e187dc24c03ea67f132b35913f6931f3632f5d205c35795f3779df6ef2de6af2be6af2be6ef2de6a129c2beb613c2a7f78923e3c4daec5ac466a0c4d48943d5ebfee07d05b37a0608039f92ee7aff7fb4d52ed28ecce685ce20ba3a40c955feff54956538ac682aa0aa4f2e4aa7776d5bad7472ad643d202710b5c576e864d407e636bf608a0354e5bf3a88aaaa5e11efa081c30089edfef169273dbeb51ead69fc6ba6fce6922a8444407a9586b6797f755c7de5e8fd1db03ea3e28661b594bcb3041b5746bc228777adee700a0c55b2d47e2b253f15b3ac517f027a225c81215ebe9b6786f718c0ece00b06db73330b0810f907329f1b120554c3f7a2ece0603aa4c8313787f52b03686ef5274c60c9249f5abb32c746e8fe0055bfc48db6708db7fcb4e57ad05000c406fb914fbc65d82a7884bf7e20a4c31d0d9e526cd16eff84f76ee23580483aa164be51a79aefa4166b11c3fcc9c12015c6691adfe2dc5a9a4d7d347b0b4f8f60ede532f330a9653ae200c4be10e55dbfeb496006aa9c31c0422b7fb3047b1632a39f8619eb3abf47ac393cb8c46873ea66cb3a2fa2bd03ec01eaab62329809408ef1153d406e9e44ce2c21988dae8bbe94c74606cc8a5f843a454b3e72c0b16474f01b1353b4f0cdc0633655dadd5b7e59f3c9a8002d52e7e7123766197b1e68c81ff7616ebb641ea420827650907099005802e12f993d3e29ecd6b49a1c41766c8bb77763a8b7cd2afbe0f259e597b8cd9c99bdb1d081e2aa6438352e3bd9656cec58a8ac4d136bcb235fdfb93b1fb32663992db6836bd2bbcd40331e7a20b7899594810dead45a1af7fead508a6baba397d9adf7381d8f2c050f33229f054bc6b8fb5239327eaba61601a0669bd5ef5b3594429223e41faa275ffac8eadca897a3ea37547d54fd01b70d1193f676783014762c6639da6840c788dec7ab5da61e415776d386669cc04b7dcaad2a946e0853e1bbdea12ec5d0e168a914b09bc0c77d469555060c086f050628a103e547e2eaed22cebf54c6c4cf8dc6e5de1b52476223c4b62475894f85108f79b05eb0b1b5c905c6fa119c90d42f086c8d36701afe10f255e90a25a44542fc959de211f58bc452d2fa83e972d771e8df0157928f192e88bc202eb5251dedc3c1abb7baeb7f6657e4379244acb7279deb65c4ec85c9b2d4f1d28ef0c92bd0c38a9187094e0ab591293bfbbb3cd2c8d7126ff59ccd238c6cb8a1d5e3591ff65cc9b9d112c30157a418c682d7fd07392b2bfb9d34ae09aaebaa227fa9c85175057cdd89c6c76a788b545a9eef9b9229af5b6266729276765266703b3a005ac6aa2d82313a54f81255e9387eaed393ae425449f20b07af0a7ea35fb4a59ede6c4c705b93233999f176783418e96b38c5ccdf2182685cf32391f598ce7b32c8ef10a0bbcb60cf2551b2dcbdfabdaf2d76e346d357a052dee36ae27635d3fa32b89a5c5bb758f579cd25fa9bb44082fa520bfca6fe8f79200779996d9b5cc6b11a6de9fd65add0a4a0397a9ef379a997093bca7655b1eec38f551af2136c7702da60466f0026071808454d0a5e41338eb965d021b3a6b83441e5a6c2b4ada8c0c5b6c4ce6d65fd8ba84a872e0abc43bcdc0b479b0b0bf697520ba935377a711146bb50990356d58ece62d08c56e12346b71e6ae2661103b4d7e32caeceda44635ab3de03a929cf4aaeb9afbee4db8da036975ebda244bd8ce2f8a6a413fd2746d6960aefe77bac1057980a59e9b7820b9a1a1e429bb6b2e4f1e581dad5cde58ca49bd94cd59ab9831c267348e490a1c7fc6e4d18bc567799b3a8b124ed69678f9d4bba39d9320ac1858549538538510e1e76c4a1bc72c8ed990a3883f671aff292b28179590cb301f32b0e1b7935b3b8991f094432501bb9cbe6b6f9f0d5d3a90cda993c7fb4db1dc1d673bc2f359175cdd63d73586143c01eb4e9ace7fba8e9ca0ce63ca7f58a657bb171ced432a447cafeb0032a38e3bdd7d875b51a90e348645717bf46006ad7af949dd74efc0d66ac3df6903de4705ddf340ca281114734a2abbbffa263d69dca4eb07b317ec3aa34056942dd4474284b74eef68f636e1d729c3294946c2cb3782f21f9345ba01af66de1d2e88f0eecfda0add099fbb529068d660c314f3418ab0f052c64cf2f364eaaad6adc4461b56fa30912d404b877e65e3248bc98cca9c1ab3616d5abd63f6a475c72b9ca4b4e9dbc4810e95df25c51e417fe88c4fb51ea362b2615fd8dc53ab7eff254f197180f13b526ab72aec2f7e496f6806fa3c579b2c7b99f279468b5e6fef4b2861d54c29572620259824d06837d33ae014c3a433d97c5524b53f48a346afd702c36a7a40386d42391ca25d857e39295a611baee9eb796d83667f63fd167b969c37ba8073636dcaa08f72fb7b6c519ddd43abfba7745756d897a73783cadfddbfc1e497d054adc41d0cb5c9b90274e735dfc8e8d143c2e7d18ec06434823d5b29bd213439ff7e7575e534a4a5105b4b22323a80a579e7cfa9a599a1d4a19c84cf1d9cb237c925cd7e8468ae7be4475be9e8f050f47a95da241d4a6613a2f32a45781c5035d0528d465c085b5bbb97e6e948f7a3de0ecd56c795c40968fe8ee72b304870197eb88b28be8f44a9efac601a52c2bd45aa143170de583db8b01767719e9fa142ae1aa0dab3e47971869261fd2df313c897406424794ef25e2f392705de90f439699045af979e13665397393064bddea6ac3c5ee16b2a5ec2c4b46c371b920760418a3dd45e14b4a650c94765ae05c180dabda3517856690851efaeb64b12a8cff07d44bdfbda3649a695005bd35c6717a833db25c3fbd77dd7ada11adad022dbb81e692f0b402f8d2518a2a19563afb3103daeffd481ae06b6f603a6716781316c748d46e1a091f0db31d97927565d10a9c3d85cdc619beab1bdbd317b7b9b7ae371e4e3843cc843f51d06d3256c011835599435b2a8f2b1d920ce21c73ec2961411715ca3286aac1a83c5c8e27c164f8e2ced09e6cd533edfacaefe3ff6fe85bb8de34a1485ff0a892f07d325149a80f258e73458c2274b71ec19c9f6584a1407c1e56a0205a2ad46355c5da00013f8ef77d5def5ec6e50b4e373efdcb3265916d1f57eeedaefcd25170b7e2539010a4059f332646d211e2e5a44a13200d3e50714561ebe032610a47f26f3c6dba562235f00e779baa7797aa0797400c39a340fde8066a57081f3001b6bbe012a7e03d868c2aff3c623c689327680937393682ce5ff90fcf45f665276f054846853bf5f70b04fcf75096fe47722b4e6ec43d306a9e4acf3959b3cf2566ab42c7b30167559fa07da7c374b1ebd88bf8f9e4c9769d52eb2deed4e29fb88beceeb75369bd3a6ba4536a20d758bacb729f4d34a17f9f60b30ea03605e679723aa5726bb1cb95777d7f1ea825dea3918a1f119e414ea470d21837ed402a851e9a3b2cdc55ff26d4d6bcc2bcaa5e4c27030092dbd51d18e958e2508882d5db2e1982e74bdb2aab6fa823aeae5a15825261d2f191e60471feab30b3ef73ea496aafe5af14d020ada97f58ccf71c869fdb1d8f6fb2af8220f35abcd0039b1e19b6aef399910ba6095b5e1eef78dd4ae9e8de60483745a3052c03c5ee55be6d82e664b8fc75d23851669cdc19e496f69bf1f7d3ab68dfef075f597edc51f0456f3a83ca6d25d2bc956050ac2d670a7c777e3924c79a445825e901cd9855fbaed104a467ca7e3b181311611c84804034d11d813029b723c26853565b6769c74c980f1326e6ebc607e83a962c331636c39ed3809593d5b827903f600ce9987e37effb23a1e4dad56af99b514f066bae6f468a47ec938992cf4ee8580a87018362d428803ecd236c8599c03398ede5cf127e1bdf96d8d782fb90e91dd4221287d0cdd07adaaec012b65bfa75ecb2aeb2de081e8b5a0da8247706c1103b931751debdf1ee3cefe409b5cc56cec00d3ba0330c1607a4fc5d2edaa88881a10400d0c3c3530d4c84a481f08bf52036196cf50072121c26921fe1efcfee157102876a30e6736ea17a0e3111288685f37cadcc090fd42b8a6c239ff020cb76304746b0c61b99d1d8f58e64d4cb463cd1c0eeadf17c954eacf25309cc0494b51095a30bb90219ba9f9de44b74b5938e0e5abc7a3bbedb1ef0388c54a80b11142391543b91dea151a80b9e449ccbf09de3b98460c3f458083b624acba6d3734e7622711541a1b999c0046b3f92c28d9f2381a9f8f698b0e6c8200b5bc61be4c0b276de260b85cd84a57cf81ccd90f0b603def0785555fde1422d10782a7b779cd5d947e8df907c92483b6bc339db0f2de551661659f2c194f0fc302a441874141e803183d2baaaa6d269b26d17910e1f8c09bc69010c643641cfdea67dc97bde79d3e85198ff79875d9b96189771f8bed962f21f28413f84f139eae2b59fc5c099597539cd30b9eee418be8a05157b48da4c636127898bad0354f0f41219c5e8ff654b5ed1142c54ccdd9e5880a928953102feb83373eafc934916c505be3f35cff76c6e785fef2c6e795fe74c6e792e5ac603a0d8dcfb3121b91d7a3e928932fc454d36e322b6d7b3964e42fd4546539bdcd4ad7740139055429689995a6970ad22ba851059b76d760be1aab024573fb5383834b702f2efbfd9cf4fb7094ed0214fd7e228f47f58215d053bfafae5981e3d4573c3f1e85ce53d5b6df173a0b47fa28bb4c5a07126da6d9267e26dda7390e99dbb9f0f5f498fa6dc783e87a3b83aeb7406703b2b6cf28ac1068c0446e5450b5c33b52a139837b208c43340bfb81cacb1ef699a977c8b0f8a74cd075264fc815f00506795ada42833c55bae0304fcb619e4a5d6198a76a98a7b760c38b9a32d0052826405b13fe18bca4980bcee064baa7323d50997ea2325d13fd833196a79ffa7d99aee1e71a14991f7336d36ac54a056863200173c054f574ed279a635520547bfc9e8b6ab9ec6127064d84f895cd2073e7f85d080986fad13f831e9982773c78e82968b99d63b03e825469c02fc8f48e278272501427197c38cb408f1bb5f5ab9b6380faa76e14aab30a5afb90cfa2475e6bb663f00967e01d8725223d0c04be2157cf415f4a63fd3e892a06748763e8fe225624be91e6817ce6d1bef430340f57665fbc30776f73ff551c0cc88db79c3d9ce847ce2a4edf70b6e3f413676b4ef79cddf2c95b9ebe940bf691d3b73cd5b4277b033f6155d927f8ed3de3ec91e3fc83a66002afe5f47d9ba4f1e8c6ebf6ab091c36f97e5d607c29c0d76a952f3ebeaa764201e2061c404dd4d1927d68b8d728c8f431f5319ede18d2106d8321685ad34e2f70ee5851b7f86a96cf876a960fc7734222ef19775cbd2f161feb84345b9298fb9d1ef09795d4a5929cd08ae52f46d3ae4ee4501092555430694f4a754a8cc501b55327d9703c89ac61a30548242b9f8954afff5d250fdf61e4d7fc8e037cbccda54f21592259f1aca2391b13fab058efc4c74c5e5514acc6b21cf9ab593d9457cf4fee85bbcd658f3ea02adbc3a65af2ac576a58d13b51348dc81ec066249b3de08b6487d2a31572a72e47f44e164b74fcf380897f710997a3d3694e0f5113e8d4bd779a77da995af520fdbecaeca13df52cfd9f349a7996fe2ff788bee34c70f78a36ada4c263fe2fd9289927bd65b3148d0bbfddf9efd15e7b3210666dff455c6c53882f72f9060ee019dba726009c081eb9ea6f3829108187029a44f64e04ef64435f1e1301f3961ab9d41032b611498855f8a33f703848178086f4a88a0f26ede1494a67fbabc35c9f84b4b94c56e1364e279d0d7b78d2d96eb88e41b33eb9a3d58eebd56ebb73ef6c0f1d99ad7e44c364c72f601a6e7847d7d179f09d46c91dd36a1cacae865b47cfb5ddc8f10ae09d2eafba54b0d0021bf5ac7625f765bed75fa0d534d2d0d1a9fe809ab5221d662072a6e65451af866e325a2af23e2a1970afbd0655815f5e53b462f2314d69fde04c787a83671d2b073653b935e002cf1a8773850e41a150d5d19aa052abefc89473d6d1d65eac1ed55eac3ab4172dc5513508d290f0a82272d68c0ef0c4ac48e10da0f06f2643e54d48aa676a1e6ace16a856aec0b5949d47dc35506c1a23bf8936f02fbcda70250f4691a2025733c57d05fa56dd45cf3a6b845d2fbca268c5f2d68d037df33baebec86b0e4f39882aaab4a8bf72a47942e84e5785437b3ce6e1915db23c5de4e56257e68a7f914b681b1aaa93dceca9a292d045a3206c7babe08e4a322902b6002b6901582113d33a5bc24f5aa47b564e3161cdf365b64851b78216e9819553fb99f922b43018276483f734eb7a06f154564e3121c36c341d7ca7817e47ec1e7fc59b6f000a89f43dcbd5625d88bbbf15601da5af9dd1dc0352166fa0b369d5fdf0256c91d15cacd96c6e7c7b8d26eaba822886fa4cd1e472cc182b0ce7be76c6db029b21c7a3e3eb15810d85cd76721c9b60ad832f19e304208e45c06a63d66151d473f6937ea91c9ee86b364d869b5496af0b1c2def07692a02bb748f16c2ace5d45acc0cc79acab647f2318aa8b953d2ae30aab476a92c36745aa55db800f145575348a0d1c0ecd6710810afb5f2fc4c189f32509f72b1d4295c2cf1db930399b34c7549faba8219ab38417cbeae5bd7fd02d0c8a3506878bd601dc6b309a12bb6680281355bc60aeb74c3164f3beb5b5d103c2ee272ad677cee6024bd61227ef10f6cd1ba1af7cd0d4284ecce878cdea2907c3acab6fab97ec146fdfe5637fc828da6f00333e86dbbce36d53bd15d2fdf0f5ded420cb18db76c13c44e3b0477ee10b096ef09464f1b4de4f5db7e3fc9d96626e7c4df37b0a3ca0dc6c9d87dbf9f147e74c9aeb56e0656fad52366063b98c1ce8cbbdfdf99b94ce10766d004a6703deaf78bebd1f1e8e75bbc18e9b7ea6ec00aef22b0628bf649bfd30f445277660d6e091956dee9e14d20f529c9f54dbf9f94ec86d6ec163abd5c1d8fb77a30ab6935bcc9aac10da10f009b4baa017d565100ef3535f0bc1e949a56a3671e92b32f616f55f27d4f838d08f59d9eb92b8e0ea705580b6be2fac5689acff8703c374e341977fe4c86639d35b05925eba24f9d7f3064d4a243c9629898ef7a0a0ac543a3659cd5c382a043029dd9ef27352b06c5b0d250ab1826c530a0b06b42ae9e3f2b2d89eb56bc1e56907115711990fa6dd0ca063649741c4825c95e73f3cb06688ec079c269d76d24a809a1db02b3ae9df8f8acb0bf2014bb1bf67b9ec816423ebe1a116a2be6290cd5c1513c11c3faea399e8a6aa07f9a9351a147d4fa9caa5708f2d41990d73453448b826e7714ce5eb330f6924e46657d6c27109a83629068e09d9149719d4f060317674345771badb067c59c4c305442a5178a1c8fee2bdf93e351cc0a6774e93af5aebdb15bf23453b87071a88abd9f45b66967db72c6c39e9c2668b6748e369626b38bee73b2a1f874b2f73c691ed84611d2a0855d157fb8e202a493ccc56a1de46f5761d22629b17ef358b78a41cde0c163781bc227302e40a802c7671d3a14dff1b6e720a7b275bbbbbd2d7993a15517204139c7d132ec28bab5ec5727a72996596f3fccf7453d1cf5ceb1b1827a28bed3b50ebe9663efd6d983f59f54670faa505d0e3a7abd9321bb3a31c8d0782eb29d43c2ec78ecf5409473b618daff9a47d501e9412fbb487a039eee81001cf428b8233e045f3295831ee99d1ca7edcf9fe3b40173f937f104d46549e792a37a4d7d139b84ea16facbaa5ec40e8668cf2a18f4e667191dde316683d1611c1388c00b01bcc6aac1c61054524e4ee45f6163446691d5638c89fa318644f979f607dd3578261607a34bc7bf583031ad42cce8355f149bbc4cd23f92ac6aa34cada83fbbe92efb26ff862abad448b898d60df23cabdbadeca078c09ea9022e4cad7f5b47af658bf3b27c1acfa57c94e7529eb5182d23ae8a578c2abdd24fa87255867a2ef60866a55777317a5a623ad2a958bffe586cb3c228b5e06bb970efe68ad07db6a0876c750a79299f33d2755c1378ccfce3f5cb6d6ddb22da70e5d4d9958b5568ccbcadaecf89b67d117cabdf9e4e235b99b474bb09bc9881696d503b1810d40cec687d2d54f569d6c2c18a58c1c70e9a59e5b281080d517eadd9be35bbcf9bae6d5a4021b73715be6bf6cb909b4856505af37bd9697e9f775bdcbb87a5659e6eb1fb10f7d238546dd7ec3b9ecc0aa7e1954aea7c0cd844d9723460b4ac307f4e4b0dbcc073ea8f1d08c42bee82d07dc5d9f367af387dc9d92b7ef5dca111cb6a77b7163b157b3dc59ffc7b0817965d8ea84940575b97e313edc63a4a7ec7c5d286603e1732822dab052cba719d64df8cdeaeece116037a5eb1c2f3236a6638b5e8b321adb97aa9942c6e778a27bd4599d7758ff2b4580e7a431c458f50eb869418661b15e00039620059567c2259ae4f851effba2897c9b94196458f10f2a4a2f536173d20e30f256f5d6a184a23513f39f54ccdfb7df9580feff95e7d532d7952039fc09e416399f0d5fbb76fec5e640fb86ad9c31d175ce68abfc1ef2eb8082fbc43d4b1a2f7e4ea36c3244d5d914dbe4d1af80052e7bce9bc6ea4f737b7e16e4a8ecf3618c44b470e2abe5799a04e03252b5a70365058d4b9015873ba8a2eddbe4fcb251719be1c01d6688ec34ccec9f198dbdfc63739459766f27422249bcd4f275a895765111ded86b89e29832f5401611af84d49aa98d3763ccee6a4e94b25c959d55c3a41882523fbfd24b7bf9d17f5660a9954d6a711399de862a7aa9d0a24c97f1cf95778f892d3c80626fb8affa6b8bc91a5586c9c4ad6cb2e7a835f8abd7b398c20d3443067844166a3f980c94c0c98a4c263eedf7c0e737f2917a1674be3f2e9b7c0e403a3b27f0daf9f030bbc10776d0f9dde0795866da389b8e6de4b018ab28ada1c22c3c14d04e9f70703ef9de97169271e69fd2a6b708cafb27364f452f21c644a1689dab1315db2315db0115db1115db322c0e8376c8d907dcbcab4791eafc6a3d1f138a2373a2f3c8af4c00a602be825f880a1740ac389d76fc1cdf55766c0f7cc6393ffe32b4eef58723f60f72fd82b3e1d7ec5b3fbebe12b3efd8a672332b8a1b73e56dd3da16f7da4ba7b423ffabc3b42dff8bc3b423fb1fb6b36eaf7ef5eb0d1f178f7827dc5e95ea7bde490f8929bd4c14b4e7fd0194393333459af20eb3dbb678c0d5fd9b4e9709c391eda2dbd7db6a51fe9c7675b425fb31fa2ccb7f4edb32d7d43dfe8cc77ecd374ec4d0fa38adfb27d9817d69bec58f26ef89e5c3da74b967c3b7cad7f2dd830793780c4151b26df0e74eac9f0b969eef9e212b85d926c34a8741448f11899a58b52892a48913cd61c917c1f9c79909827466f77882abac3a816b9da51a18b184d4ed0f76d1659d22ab4d5f39ad66e2935097af59c8e34ae1018e8f9925103cfb65812b12fc3e0898b0cabd8bc35c1b36b2e9fb98a788adf57207c391ec7ba4dd426fa3b5b3cab62071326e707b66ae4ac53a55bd0d7d232cd4d93b488a6dd1c6038fc67cdbb856655ee86d1a27b5d8ac7da3ce8653a73648a06a300cfc52fd777405004c88403459a1cb0a0484fdb61b4b464092a460fac52f4d573bad389aada0e9c3634dc86ca93a48bf063d5d4ab5833d1ef5b6fe806599e8e326e1ee0e928937e6b5e85302d593921cfb3a46a58f27ec535a80c9b86c7099a0b8d48b767ca8467e42620713585e47d6f73fa107b7295b11b5745914a6eeb7edf3c4af5de9ca57a6f227c2cf49f70135a60d37d560e727b1fe821dbb9af1f42c3e9a5b7965e349097756496bd8dccb737064f31c4d24b9cbda3999295510851346fa881108b541c1c0b61d23e00c76372084c7ad908ac2ffc31ca6483a53653c3f1dc2a9238b3e083b7550e9b1b1ce2c3122991c460e0ac4d7c74863b1c388e1a4e48d1b55dc4f0cbc90337acd7593ea7885473723c0a73f68fc7440e98570126e0805406638ceec339aba9c053b99e92c3595e8cfafd4bdbebf42b6e7c1e6057578a6423f4ad1d3d2ae7111ce7ee6f1449d021c4220f88c78690bc494216ab64d9c6b714d18b9548b66c79f236183d55978c79fd021014cb8046b2b1967138660d46133f2ede1c490e4e6d6931d5cf4fe879b37afc91cea92224036d220b478d9f844bc6aaf096026723d6abdab144e3824dfc95bc4876ac7eb19bd6d98e4ccb6ce7c8d5ddffe778755dbcb91fff25dedc8fbf8a37d7acd5c59b4335a7e6c3fe9b900f891a78416b80960bcf8a50cdeebb2c211c36f1a33189e8749d38379124e998d09199d6597cea313da6169273aecfc0bf98639479c5b52fda7ae4706f7b34df1775d63bfc72f15b4be0e655cf9b22b7a7aba29f68b729576ca805ad9e42c95df7941ed75f8f56e7176bb27fc9d93b4fa5fff2e004fb5f1f9cc0c6353811fa750707f5fb0e112cfda0133b4d6abd8dc8cf71ac967e9ffba0b0c5e2232063c0e896fc9ecb9ad39c05ea7c9b424c5536a2459498ef75a2e59219bd8e6991e5a06b26a779560426857f6d9a145e3da739837181eac7cf3c513460ba55dbacd04887b12d051725d6beb44014c404dec58fa0abbf35ad6a3bec32312830c40406600ebd80ca00f60196aeba7d1f04987f2600b037ed402f1f0f6154666abd76649763faab8c3e9e26126f8ac0cd91fea2c5786a84b631d649ade836b134f9bf40841bda5bec6e8bc5d74271b9ad4a4062df564b5d6c5594e5990838adf71745d02d0e58e4670d8b84630f5fe230db0ccd0b1d31f32b2ff2ee7a916da94e5e5cf3118e0a87636a397a6815b4a30bfc430465ec08437714a17c5e86356c61473e98642bc27f82ad424baeee1e3a273f0357f1b5a5aa1d0d0d9273e7a75ca637f682b1af7952a6f68bd6ee678d0c1ef9146b02f9146b825d18c1b9b411fe03dde7127d98d8f424faf635082dd29bdaf466fad5499da60a85f7f2c32afd859273f9192fba85eec45063d6e4a36aa2e6b2c1ffa8acbd072cdcaedfd713b55dfaf9da6ae803e915d206e80a2939db976edb93874f60afc4dc5e7f66ea58ec5a62a6a72277ccf08be892954e7762a1e781e780aef46fb3ec6be61cda5bf47ef3385d02262ab24b31b5a565b19c2e8d96c50eb4f9a6aba69645c02f8305fc21596269af64b108942c56a192c5a6a564b1eb56b2d867921eb21c1518ea4881413a05869cd8cbbeb112df00286c3a1526369e21d532ca7f94c4d99c2571361119675d7e7dcd93da9e3fba9eaeedef6c4468adb8c61ef58dcf2e2fd7fdfe3a0d9202b0bc091cc03c3d80423b3aaf01422d57e9aa01b134708b1d7055e755025a43b0b15802ad00a730edbc8069d827bc4f30ef1e8cd0caae11960900112d3c20aac2b562dff36426a3d513d15761bfe6bae6a22cb6ec6f3c81f6f507fd2b4f94bb65caddb198134e08ad02de0b1efb5f6b4f70b0377a44d76c342956494ba51f49cb9a0de0c67eafd137bcae9c209b6089c62195547c19d3726861e09c8e233fea7a074c9132d2b0c7482579932b332bac9011d142a6c1a9defb7ebf7061dd185ba410a738a9da83ccbd06fef568ba1eb0ea781c652bfceb2d68ae47d30e80b41ed424eb485f0d6a627c935e74647bfe7707843feb123edc9ea2c9c90bf4272c98ad237679690ae8d7df532ebb86fb98b6d0045cff2a722a5689bf16600050a6aba2545c26499bdabf74d6721a189ef499ec6d2a51a90a37a94abbf14cf201dc8b0bfe6a27eff95b53232983181468e553366d7a042bc1879a0ded1d3594347ca9959413c76ca21f52c1f7aa9551f95b2c2c830eb6e83bd3d4df9974cd82b3b5ae423f84850e8d42dff0bdd2ade8fe5b2de8cc1f6ce60135615a1a427a8a69c35d2279f2327de089a0355837be18f5fb1f78528271843b42e831aa7bf2bb7339146578d488f4ce2ddf0f675bf88182848f5a811f21945f97ce4cc30e74f0e840716d9b5d40ea6706880bdf55b33db073719a5a6131bb23279990772ab8a885fe027e03c5702bce90d8db1d5b0c5c6f9c8fc164af1c3c156d430674a483aea5c0f41049f0e928cb51e6ca8dcb1c20c04d09f8981ae3ca2cc7ef81a5e835c56e0aaa6a0b2da96a3b44c2df10f0261fbfa6d67e134290e89481cd3ae96d882354d12ec3089806212ed68c9c55c69022ff3f531ff4eb7f89e7fcf5afe239376b3dae0fea4b3b5fee98032eddfefd31cb060dfca5ded71e7d40a348c372d10de4e51bc3780176a6e17f2e8b7a5be607d04c0cd8a2202a2b73995d8e4e88591be5b7a802f0e3b207f08ff452fd83cb0af8a7f4e9fa90a35328981ca67fb4deb8ff5b21f2bf1522ff5b21f27fbf42e45925c85807f2b7d0686c9c06a7a2380085466b48e435107ff77f8406e253052b41a4e9b4583e3dd074b3dee32a89d6ff45def47392473cabbc1194d4c3e8e371444b961b7bfd9acde6e80703de14f85c1a1e15baccb2ae3cf02d4b8012af7642c1cddd092b8e0ca2ad23702d5a90550d06a49ca939d318469ede2caacd76a7388c2a5184ee749ea4f580c949a878d000cecb990a14eff2c778674b6030129a37188f4bef68269add591b521e0474f7b8a9f4f1db9d23d44224c2e8ee09442085d5d3131a0f2413d5ad9797a32e9eead639932da5d169d4ced578347ad62e948db1cd586b2faa3954b1d61e98bdc57c09eba6210a66c19aad446a70dc79be09a7c31fa9f22b75e05afe7eceabc1e5c629db8e45ea4dc0b7dda3ff41ba60657a30bf57ac0a0314ac59a0dd5642b72600cc97b2da601dc7d3f0be72e806a40770d9f4b1dbb2cd2089f4e4ccd5334e235a5a6dbfa0abc3bfa2f286f8667956f7edf028867f388be11fceeabe1d1aba6f4b7ac81691c6da28d26613d39b6c1d051069eb20aeb24d104aa42b7ffb192db81d55008a005b0f55cc3aa0ddf9907efe487604496eaa99a9a69a99d2689351f20a5012e554ccc4607022848adf8cc4a379dbebe3ff8b9a45f9bf42e4e5bf86c6cb9fa45614be598f70ed63458b05baa8408be2d0df426062ac29192323b1d19b3d0eca9d618bd3808358bdd66a4fd950bdce768f3bdb3d19dbeea986eddebff364d6902478765a2e1726de950bb27425e6b4d02f67a01fb42d788f7e4817652578f232b57675c4abcd408987d6eb343288e25f38fb86d39f3a1c8fda0664be04d5a350b3e13c811caaff6030178897d203d0d173621eef94f93ffe6595853368ec2f51628871d7cf2838fc129586ffd655f82fa0abf05f898cf895ba11883e059a1180a6ffc62a0af5d35513caaadab2cbd1afd352f8754a0affcfe822d8fd8924be9dbe2dc38d314e0f51766054271d96a8688027fe02b71071b0658b4b2cc12184419ab33ab52e220e2ee530e17647abc75d353cea24d32285a04b9047ba044be2dd22d8cb5876e8127cd6f9c2ff1ea710f691f98927b9d325d84d77a12e41a7e388a72b0bb48854ab2b202cc11af827fac5aa00bc4315407a55809f78a2bc2a80085401a453058032a12a806888eadcf597bf5e041c82b00012c6a6516d596ffd64592fb2411a52a540f65bb1ea97c97e511859b58591d5d365b6158590799d62db66dee725b77512c96ed15e8c169f935846d50e142ccaa8b328eb94eeea2a46befb782f287674c55badff1f29dcfae95f126efdf4ab845bcd5a8f0bb77e7a4cb8e5d0f57a912b085df844175d81bef1b8479f6e311068203f520ff5fc7f03175d2eef112f5ac679d6631603667532a7b49d5dfa8069ff09e74f66ef38453f67d99f39b52455f60da7b1bdc1971ca41cd9179c3ae161f63b4eb705cffec229d04dd97f706afbfc829f3c0cfc078f18fb3c15b92aeef9348a3b91c17df99e979067110ba8e8d5e0ffce3b8237d09a96c62fde23ea4e136b645d78fd0c09e11824b1411b2a9608508102301c446da8206a43523331cbe7240803793caaa40e06c855689430736e1560e011d8e6a989bc926820a5d203e9f705bac805af5e54f856956a3ae5fc66b7b9e532fdeedb775fbffffa6f7fbef9fa9b2fbffee6ebf73fd0e2d14e8b5572298ec776dfd6ab2248cf822029c0e59789a21599d4d710417fc6e7346735c96ac658deef176ed07ad4851fb5501e480ec7102bccba24eeed7b848a56eaa1e750800061f53eb9a751c41399ee0958708869142745a607e28c38f0c1ad7f92ca076dcea3907e050467f6c3962a4692ffc1218cdb44a41a0030fc733cf6f6bd090e4ba8041309442929f4e2d57ca1a6701824c960fb24bd1c5388f1e137a8b062cde4b3c7375d55f2cff9621dbffda114755640344ce3ce43f5fb972a8a5e5ae13e29385c15c81661fc8a01d8d400a368f09bfc49368b806e9f1f3b5efe68d95098c42175e69c500996aa2e54ea9858102895957e7aa750dd94cbd94d39fcaa5d696ec88b116843b664c9b8c4215d81348b3ef7d43c2dbd6e71a639560f6e201a1a13a334d15d05466a664a4e54bf37bcfe2d56c409dc710982d5a13939d1fde35dd09ccde6b46097e3c7a11b86744af435edf773b7fbfe8498e05804d6fa728450cf8fa5dfbf2cc0edf36c4e687ea24d67fdbf72583fd8ce0fbfc9b04e275a78efaffed1ab54b4971fd24f6b2e5b03724fe2b6d2e0549d48f098d4aaf16ed6955421000828f9a9c820b6e59467c2935168d68961cbe0e7d490c143e30a3bb36586b64434823278789a040c9f893955333137b014d3a44e93f3a08d9dea8ce554ed21ecd226df7f87513f270578e12f7e0605bb99d04b321f324cd23ba0ff3211863d747a6d46558eda6a03538d821585e9000750b3302d21934a23fca13b12d43554d516b579562acc342a8c6046072ae01a570c0b185b3ba7ac482b243cc232a8c76715214fc52a9156ce0988f0b054405d354238022b1fd56d70cf6c31556d7b2e9423a112e3721e8f39fc581377803e314979ba66398dd6d154c84c79bf774b153b990a76cbbf97f621920cd51c47a0a138322a8d23ab92383af9f0739d8f999cf1b95f25a5f10c31e373e3d7c09ee9844f67f1baccb359bc02e1e95bb44f9ff345602218a01b15de74a392544c3f01a0107f5bed8955733167ed7854e927171903846674a99230fe065584d09d025fe00501f5edcb11dd39f5a6a4d6e0459f90d5ae2c3f60ab3b844885d782eff717282e14e4782cfdd456dd5363223571746909316d774ca587c7661a4f948653989a23cf82314ef1f8dba08df67c8725447898cd39b7311cf5b2e19ddbf90bb41b5466256965628a987687e6ceed982d4c323ba8d2755e0e4c35d334c69174cd63c448bd45b61bd7da102f7c69fb231395ee59a9b162b66bc7ee2cf343b553d9830d55fcd07dd6d17ed64b7ed68a6e147b30c175ebece144f3e5f28baa19db83eb1de035c495845ff0ca28bfb44c8587e5724c556a2950e67f1e8f7823947d01ec8fe37144557a53e6072e6be67e1d8f2dc274f6f073366aa959a3927087150f5ac3e3981da24925df54f7bc3d4d63b38dc5a7b65a1cb0048803d1efdbdc7a0bf8a2007cd179dc68e104d6e382d4f840cfad157868c6c5e9d11e2e466f0ee208630653b1d1a40282b02292e5b36aae81645e7ffb497c27ab2d97ea904870cd30937326e0916b8b3f70101a11b640d19ba5e3d93176555e3b5755f63192f6e60293513fc978a49918e6f67ad41d6158cf2971f9203854b084477a7f4e10818e4c0c22f460f5346eab7d26e9b6aa33e94e55c013c86433c0092ea9c3274e5e43f48431626b9554cac52526f4123c58b9541ba658d396360d621243c1c227da67cee96eeaf65e8ae5fb6a9b016f6f912bb0fbd30dbe14cb2f8c49bbcd2a08754cdb0c9b74df3d42efb954c5222f7d5b928413cf7d3ba793bda58496ac4e6d55ba6375f80c2c195ae8a72bc9f9cf3c79f0c031533478d033e142a0e734bfcf8b32bf2dad6a29bdffa2dabfcdf7e6f3eaf995e563d035e69846aaabe7274217ac50c9837fb033fd79d214e8a7aca0ebaca27b6382400f6841a033279767b44c037552dea13aaa91416200771ebe1fb95e200fb2fa7d953626a6d27062d41ef4a8195d2d9ae42929ed3eec085d12ba50494917e6d70e7ec1bb6912bb88e62e6446240ea50e3011311f02b6eb4dd3f4e780492a4f3c3d0c9848cc59e5e91ebecc191789c3dd44e24eee295910ba5209bea37874cdd875f545fa892e74ab8b748dc5e2a38c4583d81806ef5ae06eea0769016f1a3e4a983cd0ad9ad70972078b747da24633a80ee418817a9047fc6eabfda45089884272506171221cf21abcd19f4e74ab58b256cd537f730392a19b1b0cf562dec2ac77f5ec9fe2e2d9c5eb6fdf5e18b1cd85e462c96521ee2e965c71180d94592bb5adb3abab657e5f2c3fe565bd4e45bee157586a28aa251f16a2d6f7106b5cfd53fcff3ff2c34ae61b5e6330c31feb21363f745a7b170fff14ff542b596d2e1e2eaa6dbe28d421bb18a5ffeb7f4d2e4e3a4b5561c618527586f1a2ed9bdc54a25095c406bd79c3f99e47e96834ae27a6b9cea5a88b9fcfafc45da1d6bbdb74516dae36b95cfc78b5a8eba1a93bfc69c765c16bb3106eac9a32b223a567d2877cbfcdc5f26c76bd9685f888f3742cf08bfcb6aeca9de2139dbc2c240e38bb2895842438a717a309aee9d6fec4836a3ecc21355fd53d97abb2fa945d187573ec10a8f121bf07e59b0b5109ecf2bea88bdba2845d0acaff3cc467ed62389e3437ae63d2172f2e96c5fda37343cbac8bf108feb7dd43a221461ba99d737e640c66659f3c86e7a3d1ff88ba7709e77aee9d08e9f7d72a3557f0785c2b7aa3d8ace7cea55161ea7de2b71f0bf5d226bf83e4393d28f6a0aadd628d2e727a9b6a57f365f549f428246baccfa4ea9f26958ba549dc6d8dc20b9728c9c764f8ed72747b51d326bdd5b849df6ddbad973c7785ab9d72e91a87f7a981ace23ea2783f785b11d056901a2115e926578b7572f57f25ff5c0e48f2cf54ff996ef7bfbbf212ec2972e813391bcf89099708fcd63bc52e2f5bb2f5cbf144c983799a0cdc5cf25521b8c33d1f4eb4b7cdebbad0537eb8e3514041ce2e479ad6f8548865f529cd97cb3febbbf1a6a815175c263dde73d1d617307a4e1e2c4dcd4f09e9f71f4ce3d9e528588f5b4764f276ab1acfbc0be5336f83d288fb7fa6c247c760a2b9a53c50d58e53a37448515a94e5c723cc609f3955203115f8961c7c9a9c4a480b38fa6f0241c439bba96571ef850f2a05ebae6ff20d671cc2e028dfdaa73364374f7f67ee33506ff6833d9c103b0440ce6507fafe4625bd2e5000329273990656f5f4a13c5b0661490fb8c28169d71b709f223bd25494269a095227dc485ef380e8200f22ad17b22acb379a281ff33f519bf0bedac2b76c16907181936151479426f69310ca13e27847b71a09e961e51ecdd3db422c758a5d0d426f55225b25748a590b42d5294964d857b14adcfe38675e3e9e725e089517e265bde50bf5bd06849a2adde61a767d532d39cdf5a94b1765c18542a4763451c94795f4b0d11e157abdfbfda8d075ae6109dadaf6fbadf2a71330b341604483c1560cfcb3076a362048491779592641b08d9ce5c7239af11c8fc0c9a61f52c97fdaf11a00fa971a27c25a083502cc8f3c40d7d210fa39ad346aa7ffeb24101e3dfbe8824da33ddfc96a7f88ce7fef1c5ed403f365f7a96fa25e2272b2e1916e548ca81a38250db75e728d34b0cb4b6e1cdb7e07bba5d1577db33540d2e02c690ec0ddbc53c4a9ef3a229a84f06760a2fa7d05da893e4d532d888d7ec15795e4494955ba2a64ade036115aba337e8ad8ee7b15d2297e691f4e601a64863159f2922b7ee1123aa99c8eda6e2f26a2df4fce2ca803e57a41839e5c65122d2642fb47d79350783cc3f509bf4c1316f2c063f983620fcba2d6c4e2ab77efbe163f1a84f2724c6fb8d0c9cbacb713f8522e7b97d645111ee87ebf2bcfbe00ba857a27f99b2a5ff265d61493838e5747df7e65efb8fabeaa60ecd3e82b2199ede4175f17f0888b2a4a79215053a8d610364ec128fabdab6717af400dedc71a50fcde404d107c9db50f06ad6232910d7366bd383dda537caf3409d16b3e0fe7ac8115d1e7207e234ea744a5ebaa5653e5160203496f95066bf9e2a75d21f9ab4a80d96dbc42bd5a69c2cfbb9be253ee6773e7b408bf387cbd4c38c9b867a773c667a339a1e00bd2c2559d6a3e90156b7c45de716506107f25bde74b8f09080fa235449a1a5710e1c9d107bb7b936bd405c5a312ac3522ea20cf6966014edf8353109e8b4214aac8cbecc1e0f8921ad71014faf0d6f62235bfa829292cdf102b08e4d16822dd1565eed7f1d8bb2dabc5c79e0d9e9a6be447ffc549150cd063374a87741510aa1dd93f0508b44c03d2342049b14a7a08d5d1341d8745ec0f66aa5f25de4024f70feef1f81cbdd1183d151c875dc8e6402c8b1f38741a6f170471422a79c9f3bae3e8f96b8dbbad7740b91df08c109b929a2d99ccec28ecb2cccfab6a4826667c3ef99016f537bbb2fc56fe5583a74492a905a0fe287092a9f88e72f3ba39a7e1b09000d71b32618559333167fc0458dd27233b4086b203e7763627104744b8fa19617bb83e165bb9644c591d1d118236118336c0cc144d728dbbec0b1073b8dfba0499a13b859bde40cd59f81a89a4eb8a1dd48c83e3a9f9f1883facde65a71e99bdd41f350ea9a891f3534e4e46c5829cc0e1d1273d4e0176bb1d44ccaf5c982411d15b4cfc223c9ca2894ff27eff2d2e556e46b4570056271f1c0dc66e15a0736e78ec2d82fef78afda052fb3a4e7f50d9c35978eb550bce414ccabba0235262a7137d1dc6bd3537a2f83952733c0fee75deb9fb481e1e3b9158f3919d210fa7137dafbca6a893df6dcbdd5d21eaecc14ae6de29f670635367738a31e6be5e66232af99d6e599ef39d6fab4d6673cb8ce66714b520eebe72122e4e346e1828fb617ba6ebc1e04477e237ecdd022fdfbd93aea948aed6359245c9f36869a3de3571d2ae0231f8cff9093735cdbb0d61045e96e7dd8a9be2272a2a55acce2801059aa088b8f17a218badaa648d1ef1cad09f93f17887d1525649cf36e9908ea46649c192dcf8c3c32190999a13746837e36ecd0548d5086ea6b30a27143c305923878256c42ac239fda4cbd18906e3ec7c8c7e67668f78a25d738327aab4583213d7c02e3f712c8ca0e989554705fd3d8d76c07d0719aa31fa7123eff7bdc333d7f983a3bfe32db4d2365f72363f73068b5502974004a7d0cfb358d29c1533359f5cea8399f7fbc9e508f54b939c79a34fbcc7b63bf0444385572c34424cccce383513c9723d05104ec06b182c0d931496315a442a4ff4a610f77959b4acdbccdbe977e374a2df2af6b0a844ade46e015bf970a2a1a8df5e65b0ad0383cee621468b92a089199f3345cd59c69674925d0941e0de4083af7cb52ed8de6aba29d4e664dad5bd655aba7e5edb199debc40eb4a3830fe986cb3b9e3c9ce8eca531246b4e6e4e34543622f5733deac7ff339df5fb49c7ba9957aa99431521f0d4a055edfbea0d2a788473340817c771d7319d1ceb66d89be3d262fd0c77b1ac443d50d0b0792614c30618145f547b5481077ed077aaed3fffcf3a4d2a70dff0bd2a5f2ef3ade2b2fdf079a3044b385f8e28dafd210f156d278c926968d790df7399dff11e0d5457472d73b69ebcbbcd931185ffa7ff93f428583c7c5939abd6dbaa5c9ad477db7c5188bbec397ebecde55d218ca0fe4fbea269f9ffb75aad4c45f4e860f4bf6eabe5c1b7a4bf5a95746254675555e0d5a2312a4cf68de1378eeb7db5cdfe14548c3ac0e4a88b8395b8ff89eefdcf452e9dd661f61c3fdf695ce98f745149ef8be24f74b32b55f11ffce06d736c67864c83018007fec85e3adc00121b4b8f686089720bcca8f7608f628cc81bc629018a6d42c01b1f26c8e8c497341b21956a35a62d89a869f089f19c3615d6875a5618431648c29f59fe62d4ef1b67b2d71ad40b269d7359e7cb559c68be525c4623c6497c512d0f71ca1be3740392feb5d8f7010f20110308a7a989af9876e3781fc9540c98b5cec9e037a4536174db718fba87d250328f0744e2389da8d26f555fc2fd17b17d58e37ab6ccba4e6660eff95e3506d740c02c608a2e98d99368b921a5bd255fc215b169abe80baa44059ccadc8f8a3d18d0d362ced953e7512a6f743ea23958f93c1abec99abb688ca3582555bf5fe987048d9889d514ae5203351d19492672c0ea744f73fde7400783e264cee9c33e9357053d64f95571ead6d66f7a6d038f6de981d667ed791e53bb81c64a50bdd17328fbfdb235078df8b62c7a96ec43ba349e7ebee0ea13e7c2d8962bba2393e53546d5d62859494ea7629518fecf82e51d2b52b005cc64911efc52e885a84ea74092f82ad66657c07ab6c166159936a51a1a957336c28a64dcaa1512ca3dabfc2be5b190a4cd3b3c1ef9452170aad5eae21de4138dfd3aa3a37f8a1e79311c4f3950420a13b2a08b970137de62a0f6023a00cf53fbd3c37f9eda9f748f2f044ff1073dd86ffc41a52a33ae9f71aae9e0d74e7382a7d177e391e3f19da437f6f3cb7c539487ec3b95f82298469dd4dfa7115f111fc5a81e5ab447d520c9d4b21371bfdd18e1758b9b2a7e6eb604bafde1438ea5cd571315e0699c406fdc7738e546e2993937f093b8e6f959fb226e7e5152d7046f02e4c514c7b58ab0219313cd3d428d4c8130ad8597f0b491426f7c42b848cdd433abd444981a75cfaf5350c62d549cd6b9522142652be05ac5389acdb3abd5c4d86cbe4b09502e9ebadf31f2a58962ffd97a445b0e55a9d5091b593fb43a3540dc78dac6e61a681c4fa3ef08a7e3676dbe79e4daca03ab6f2228db5ba04a0d44c8e4e97e60b9eccf33a398d8cc197a409661b2fdf47d7c19c05c0dd667730a601865765f2bf697cff00411af40df1b2f4d90b81bc739c1cf32afd5cb852aee399bcd81087ddfb4a06ebaa5b0b6f7e03ed1e2bb207f0e50de0eb7133467026f565766c144eaf1cfae12a14967c55ea9a4d2eb2189ceb15f79f45510a4dfbff0586c1bfbfab2b1327e4ea9c77ead2a3e7872714332ad47ed8628a72eadd7a5dd346a8dc77ee31a366bc627188e219bcdc1321c78a7b04cd96c7e9abc52496146096b9106d839ea1c08aa07440885a2d00495887c4705301f5ac6963cded96828b796332702f682775cbd7418e92f5a5e87c83eb6ba066bfdfc790c1617546903a4b8eb3469726b753637672a0d90e6ee031b5818eb2357e8851344e7d82f197de5a4cb94e14c0857ba34714ae88a2dfca55beb0f1b6a6811dcee15a15b9d90c365a637fa37f8213cb0078316ad1b68d1daa045277acf1ef63a9b1e74e289deb1071464ae8d28cb8839d746e677a2b7580300fcdfa11afcfce1a471e4ada51b1e36a901dd0c6987b76c36a71ff5caddb21fd56ce55834733c650bbaa58bf406344e2dee8b74ca9bd8cc62db2435dee0b14c24db82a1850938e8220fd2cafea8ed8fd2fed8d91f4bfb23672ef217b86a32b1628e4769fc2081bf26b402079f5a91b5b2f1aa052a030daab326818b6c6098c7aec4806ec044ef272c21f4c1d2f253700d0c1f5f56122a2615ad49d6eb51431717d3e27c1924d677d35e6fb03b5f0aa8ea6ca94b2dcf974275df2af64958d37d26ad971c7da2dcc7e144c86465bcebf4fbc91bf6e611573b17b664c2e90de845d1555a28be795749656ab72c755550db9605e6af69c180da3731a87d8b676715c026cf4db00793eb83097b4a08fd78a68623f3bb6a6980b9c117102380c15397bca1373add3f3698e91f2d57c2e705a90e8a629683c5361f811c662234b3397b769beee9263db0dbf4403769c83b63abe8936e8215a9d95bfbede65bb38f74033c14a471d91b7ac7baf535ccc558a83d95ecf933e5c937e4282898280409907cb95bf0333bcc0716ca1b583040f754b5ff84b5b11230424764520ddcdb002f4f5c34489a206f42198cc5980095fed530293b5bc4a1db4b330397b070956c12b0379eeda8fe334deae1983c531155928d304fb54911ccaa9e2de1cf34a9b07648dc418972aa9ab8b9c978b6c0fca4c4aa31c68fde483128567849f2c0bb3515e986e7f54e828652c28d4dd260e5354845baaa84621fe00f3204921d55e94d8bf66b1297ee969ac9d335a15dad2d75dd26f9dca0cd83b6824d37f2b460d389ee64c5544c244c9783e7d9c83651c440c3892b0cfeb5767d7183678529885981e90e041ceb9ad0428fbf4df3b508cb605298a57b320f763e802be5b8245693e97442f46a43e83d8bc5626150873d04e93880cf004fbcd5f6eb3b67f1dc20e1764c58e462c98465b72c5835d0f84b39a8cdb1f0e4d06e9a0fada64c161050bb7e3f497cd6d57332303f5f48fc0bb24af37b68f208cdaf47903122042d1a1963cb6931608bac18326b140689ca60318345667f5e3da7c11896539431e0307513c1b8752f43b620595866c856cd3203b6d2cf7696d343569c4ec986ded1431748a4a172bbc1ed4a0727e92e0099ce7a6cc9ec70e9c2fd9cd4e9e1dace68ba60b00c599d1e5e9426716873fbfd64e11685981b9fecd0866d674cb4af9ed3b54e54d576b0b356e157cf27c14a2da689605d9a2ed76c75a2b233ebc5ea44b2b3d5dcbe9fadceca78efc10e33ef2c6b8fcea0f6a7d9fe3667f98569ed448bce266c2fc3a08961dcc4f5e844ab33d3594f71179cbb332a923add9369b2644690954342bf9f449b5a25757a20846432c8c613468b476bc06e6e02cac8715111eddf989b3ab53fb2a5a50836e6e64eed8f6c6101c71df1980c6a4b79dcde7981b22db2838506b62176b04041e31df706efb807bc03b5e6ee0ca9b1b17a857756a7d260267f37e80a121a80b33802684379bfbf320e56fd2f8b856d085d6030b357baf2596a3dc64d30e5bee09f02ef94d040a8ef4625999810995592a7fb31cdd3c3583f593eedb94e7b1ea7fd5ea7fd1e89dca8d1cf87b3642200ce1ade46b078e161f1cac3e23540f70d40f7ad5351bc61162280429dbfd82b52b3cde046c3450be616d3246789646b32dc69a28856ac1eec68c9eae18e64266fb02503973b84dcc1ce4438d43d048d4996e46c3d580e76d8603ed8910088fa12dbe1721896c174b3067ff7190eeeebc12715db101840851aad9834b821034cd4ab7a60c5448f55322f53196792ee9f6739ddff3e2be8619c55f4f03cabe9e1f75979c243f4be25c76d6c93c509c18bafc1278b55525b61d29f35f2016208700c874f1850b73cddb36f54a21c5e04bb47c0ede75ee1552afdefa4b3d81779cdf54163bd4db15c827beb16969ab318e3d418890dcb1416469e6817ba229f88cd156c342920a05d41b013401aab5931a765bad7532694a78781bc7a8e3f981ce4b418806a17681a1f06ac03131ee6c46c488b0577260a2ca0e2116ebe6211ea4cd7cce0900658596a64dbc40de90d1bd103db4ebf09bc2d64237adfbdb92135a4c843b00e8adee3220c6e70f60bb70c8bc1ea446fd97db0dfe69884c7617d76d7cf22999fc59add31bc258d83118bc23ab06bfd52dcb06dbf6faef22563b7d300b2aca78babe78371b600dcba6623ba631b7b496a5017acd1bf88649b598d21241bc4a64e2e6cb24f0a479adbb159a6a81e57c94674a9e1804414ddb9e928af9793c1a004b1f7168fce5bfd4a25070ddcc3f9770a204ccfdff3854aee0189fab2926f944cded205ec255de81f08fe5189690ce1915dac3316c73ab3799f6fd18fad1d4beddca8eed3fd77e5ae4eded231a18ba1396e63fd133fa3853cdd25d5ac9c93935b502466eec849df0177041c31a5579aa787a14601f5ed6cb270db81da2d1da3697e0f2e2bab20f034701908b1ccfd6911c01118ad63301a557f0c8e36a46bf1f1684a05cf02ce27d179391b39b7a801c82866f99cd6e7406783a0b720d24bcbdae45fe38ab78e51785055e3a0fa231d792236a6a6caa2227a970d50ad0015a90115292d25072eea0dc2b7642a4269262285a096dfe56a9de8cdd954f71a8baa064b5afb67bfe8f751efd0e27960cbe191ae6a500ea182487fdae54b99ab6201eeb8318fd614fe1d2c49480c160e92a1a2ece7baa0f560375c9eef64b0a3662080b278c2f4f3c33775ba5ac6766ddf8de15ba4ebb3a3c7c977b74fcd6a8b74515635777ba14f4ed27043fd62d4efdb53939c0b23dcc2b8558071ebfb3fba64a0b009448645d30d9f43c58209e50413923dec33058c67951e4e36945b7e5b27aeadeb74341a93e9287329703c434edff1d8c12684c4f8b3c936d469118370124bbf8c5668bf8f2654757ecf21161beabbbc2cb7eb9ce5d4ed92bfb560a8024eec258236c73545bdd4ea9e4b592c8121e71459f40d8f555b886f1bb9cfd06c900aace366a2e11b9b64ec50f25a55f2f3fd715b3201e5da752e96251a947409c1da4253cf500c85d5d1174436f17e263066f361cba7c2cac3d86c9e25fe4b04d2191bfdeba582417d59c9b7d512ccc0524d5bea0b2253c9efb9acc194d6b46193124268a2d8e5873497323ffcf9a75d5ed6be2b1a0d946028efc6444cc944dad3713c4a43c09af2913c8c450ebdbd77a0cb1128e9636412b0bf3f11fabd623f2afa41b1afd5e4835792e6b266dfa325d3cf6d6d67af4df6579504be55bd72f9fc8c35fc031469bef510ff6c95f4c0413c6ccff1d83bb80fc37eb47e15677c1e45059ff1f9f1087fd0172cbc8935bc891594d6af61c17e564985c669413fd3de2257fcae92879ef3254f68fe8229df4bbf0f1f68d37022f452619bd0d8f1888df6fbf85783a420db69dc9b443afb160e55a4579f148456739235cb568691f221bdc16573ab753a0566ea7ffbcdf6c03cc9b0a0608e0276923dd4b7c7f58265feab4a725a900c73820cdb7d7e669eb026841630d94727f545647b6faffaa326001b6bbd1968eb53c5fea69cc10a7d39b3f63668af4815c4b934d16a5c9e4d5094a768638c66095fe5f7fcebd73500e4db5d512ebf957ff56612986e14337d0c1c6593ea20d72be424c1a4ffbde9d3a4936988e646f23459560f92a981180c4e9fd645c9930fe9aa104b94c1729a9317ccbb4a93be9bdf058a431637d237cea31a81dae55f627d5137a0d019b13e267a48333e9f8a999a0fe54ccd339d3ad469a7b6ff4e1fb1ed448dfba859e84b287015d45b94c5e2634f6371d6d391fd80b2736aa24e5402c27c749a51443613ce9fc5eb9d44c7607f188d7c8067acdff636a2ab4a5e6f2b61fcf3045f2f5b4dda68773f29d6299d8c6d7dd03e5aa705613c7f525e0f977acba6b3dcc949870b4a9680ef9c87132ab01b27f5912999d3c10fd4f1e1c5b4f606cef00052fd7d69de2cbc522e1f7aa5fc942862bc21bc56696c858ad3ce19fa64015b575a6834d4f9d9acf00b90b989d047ff43ba2b9680592ed49e690ac33806c831a6ccaab8638a0aebbe965ad37b565011dab2b3625a5d15b8dbc25f79174449a437b7bbd58a4bbefc1ebc68b0cb31bed6e0b47536a7c67318133e984dc92513f427703802dacef54c0f7ace04ed762725684faf79db9594c36a0c4cd2a5200a4e841545d98ceb175df6fbf934111188f1480021993e4855c9532e652593de977951f2e585aa2ed0a7043ac9cb2e16b9f8377561f6eb62811b7601def9d49a5fdc15f75c5c148a6f7ae444bb150c3d1a6f0fdb3b95a2fd68c2690ff1e7af45a1c0a2437255881c155ab83f46e992df170bfe5db1e7256c1c40df42a05532025d5bd45fc87e9f1b7f2c80f770588ef75555be2fb609a1d138004737c3e01d96b6ee6dc583964201907a982b4b6b556d3b6afca7aeb1e0a5830e51251cde23714583785ecade8e9c896e4f482af6d300c7baf022f911859fabb2aa6402b6f96ff37db1d96d801e4b2401c5c8eee2f9b4b8cab3b0127aff845a9a104b0cb575c958012eb821fb92b14ae3a732767bc00a6a0979275c601595c621852933e86df73d97684b616a7c54f45d6f1f914beecc470c4558585ab03a4dfcf62bea9c3dcdeab9be2895f89ea3fb7bff3b519ab255a9de67a065cd6d7a585a702fd2471e8393266c3a10893324afdd768df920a263bc0699cf8963a90122db743ba1110430542e96ecdf952b65432ea1572b1228091c9ed40a96b201985c2b6096a50b09a860504272a21d08d2235a9a5e69389ab3319436b0f3233fd489209f51fb99a9b906d5fc44e8c3894c4cc0c45a9f44e6dc0f27361957072da637f9b64bd3ecc1da2f73bac4a8538e68a0cb76c0aa13507cb6f9c3af68de06b55a36a35a9d08106ed8b67e339128b10dd8d890cb8e28b9b4a80d1eae3197a065ef75f9e4ce846cbb9f0dc3df174ca6c592569aa6924853a9143a2593dfe924db3ab964ec77faf0b8fe102004b6b83e87e6b362ce2e4746b34a433088937c51a003a059813415d3700582401573e21e6e496b400838b08a8c275dc6bdb79a9205244960ac9d54e8eda934566c939a09fee9a24c1e8a65566098b1ca99b04bba509abcd69de043a9cf9998d5f0cad7a71a29a0f7c5e2636d236c429c7fbbfac8d6c1e0a7e135cc69e338f3e3d118b96b94fa040e9ef04c696402cc926363697c5c1a17ef95c34bba232b5a7e0a5c338191f22d12881c74085f9887e10bf96060d5cff3199fd38a8996f124a1352b0c852c429a0b18f74d92b90620b2e4b592d5a1d14e67eb84625d56d32a05be222bf0eff138a2159a95314eab003123e18781e086562251c1d487774e487880fe93cfb05bb0f4f3616f895acbead3853e367f06a4eadf7aff36c092837feb5d14f585a8d4458e98d50598d5fd1b995411d208474e50ef3e211afac905de00bcc173a5cea05b8e508e36348a390f30beb1b022d43e4ead533c627cf0d431860a6f553498c4b0043ba9dccfc7280643e67ebf5701b48fcc0713cefc5bcb6999ff7cc81c4b63369e9f08fd025cc4bf5369e03242a780270bffe04b8b77e2fde811f2203dd10e6834c66437020a999ebb4f26981dea9bcb78a543ed73351810d95c6915ad74d4855fcd893da6e682ebb3e1bc725924433f03adc4d42e56bfdf055fd031acd95ddd2a7663065843475d9b08a6218141108dd615f068bbac545a5209b5b0ffa292decf3ddabb2996fb1ef4d920afa6510af8c70cf7dccd88f2bc46b328fc818781a7facf2993c6372204c2a3e1ea9db9298de3e1c812acd4d3efd5c6e17b88aee8238ed205f8695ca8511ed2865efbb3dab77d55dcb8c0191a71f75f49d04a64796b137dd49084e0c50c2a74387cc160267acd21a85507dd0370ce6d5a3bdfae83bbc0f69064b15bcec63ac24a99a5b435fc8db3d141f071413142d7f5b1c172a144d47dc2c9a4d91b8cb7d9d9a931ee737e9cda0f98600f1baef2cc46c3e3a7e661e998a4e996ce04382952e12dbfb134387d6ce4610b0076f5713e33eac9af069713ebf5a0053aa8d4685d70dfc0f9a2fd426f89bac149c7a6dbc5c01bdd23164d08471f158789dbd2f48333974804925fafaacd56e340147dc480f5908678d673807e36ff237910bbcd3bc5b77526afc67f4afff4a7268cd038888116adf50cdd8c639994af567ca1ea99320973a4c0775272a174473467f24aa5b6db0907295822929cd09c4a72a2957054e077b2ba93bcae333d21fb1116b093cc8a1399fca746ec028601adc029374a0230ee4f42689134673eb28eba4fc43bd03e3545ab9d6fae341c8d0eb71a04fcd08de13d90b9b05a8d845e5ab2fe9a8d8e474bd05fb311e9f7cfbdb8af65fea9a777d24000fd6a3ab8c646fab17422178df3a63f5fb311186fc1174c5d06812f4c8c7e9dee5e2e4e82661eab2bd31b1072e22ba7a7d47ecbfc804f27eae71f2da7056526ba4f1b967586fb8162456d866d428d268a1801fca3c842b4119308e18ab24ed407330da3989e390d7194a227ce83f7fb97e7e6a28f05fa8ae89c521866de220880c1f7680f002e6009e1243a22b29ef596d239f3e47264940dda8f985f8b2ec0d6f19ab54f736215141e8f216b1771389e88176c34190e05719274fbbca99998d3cfbd71d1f90c6a7742377cccb87dcc90443280124c0933f59407cef489cf1b0fcf25dc31f5f8e3e66bebe3195cc073cfb239d9fa31363f33150dfaf157d9b41e0dda01d1ce81b66aa006b641ca8d124097efb55c813e409d62fc5e6c9347b5eba75407518ba91dc5a91d9d9a8dfdfde5bee8f403671b9bd960b8f3a735186a389c71b0ea9a56d6bab9edb7f1424ea5ed50408863eaafff53d660696fc1f9410777eadcd989c0d78ccf272abdd197e0784ccc2f70e1683121489921345b3ad36d713c26ed5c86d131308252aef26c3677a19221d1df0bfcc63038f87bafb7edebd7266646f801f02f539e9361314f4205cc3a0628af9a0e3e63bc7a64d83be749d3c79f223e18b8405b27da2cf26444da1e93dbaa2a791e9c1295e2aa4c2fedafecb273e34cae5e01c1a5a6e840c9f61cf07781fe5015d7a294863dd6e6329d9b49b1ec5c408d8a8202923e11a0f18347633e91c0dc0c4122f69538d7fdbeb01fc9a37c392bdd345add460081fb2b1e279ace30d4609422dd894886d6106e09425fab34760b9c80c4957881ab119d2ed41e7e860055d09ee9bce7e6de968a9ea8aabec86bfea73f7cbd89fc8b35a4e4383255e989fcf5fb37813b082716f311306920e93b43f33b3d0ca01f3ea8e4e1c6f07229fef8da8c5327c0f546461abd71acfa206c242a779c00d6fb357dcc2345693c25d70cc43a41499e8236c457a004d7e556e2e4597b4e6510fa0b580c923cbc56ed304110639c508c9b89fce42eb969d2189091a29213ed6e340896426d0c0c26c8898627ec49ab3151fd7ee21cbbfa7427a96af22f5fabcef0469c0ad4fe713c0b500c41c7498f59e58869afe6aa97f5b0d51e5c3a343a776edf72884d9a9344323ecbe7673076d90c4fef81c2ac1af4fc787af3449249cf14063f40dd2df28e98f741a3bd9bdea01af44c8da87d62546ccca17a4ce06c0ef363a43d2cb5c57b555b470202db36f97820cbb152a440c353832301823991de806acf5434f233796c2645989b41db826139cdf2e6305c28d4a98da092e424939a84b1ec0f710708a293f39a629e99e21926a07594b6748990d9a2d114423b96677c6e79a8fa25caaf818a0df82281c1784dd8487ff4497ab05e0dd6fd168f6abfe6a8fd9a475c1b991a252c6009c00299043ae3294610a3b683b986182e54dca51d4cbf6f34be5c8a6ecc286701b31b7f3ab743cd764161ddcdd97314d2262c48c272764297609a99c77531ef4c1b795c7f446887baafd3f60d947d6963a34c19d0cb0d1f4bf68081b9fe43b19f02dddbff54208489254fbdf7eba2bed870b5ae9656f0546cb6b88b7c995df042adb9bc10d5458e3e8a2f16b9b8b8e517ab6a27961795bcc8c5452116862775a151ef3b3cda179ff2fa622babfb62c997692f505cfc07681486c8172a9d9d7e52a99798b09f949e97de5278f93e18b9e05b2eef38fb9ba21f50c089df7fd5df4613ee1f9126dcaa929b5cd5d97f2abacd65cdf50f4cd3bff2e552ff5916ab95fe0b50e55bf8c9c5127fdca0a653670806bdf8ff504e5d9e355c3a748c8713dc9ebf2bf6700322ae7fa813e58299816ad2257b000dea4e62cdbbdfe464cab35e6fc04f145500ced06096bff5e2f753317b3e1f8ad9789ee97f8662369a4f9c4183242fc6fd3ebf642cd0e6019e9e647c18a559a8f9212dabbbf12809da20b460bd9e35b8e0a458254e4fc8151310f227f8148ecb3127e47acc877fb03cdb56171aa2d7e1102b120e2e27939ac53d6e0a91d4f4f98850084aadf1b93fefb795e042157999d4c82e3552dbe1f859dc5ad9d15a19b7f665b1e7cba4346cd782f546ce0f7171a2657597cb42ad37c5e25c18922b68795b7d4ac60dd52b9c3c279e0136424df4512f1b63ac9ee7f8e78ff84767abe35181d77ebba8d3e69c49d6eb9d4e27aa0473078a0afc0858ba548ab6f3f2dca5bd44d4a243d3bf853161d0245074482c4bcb699c151a43cb876302c65c775c816ed69795d4e59382a02f0bb89b90830e2db858c217e01f0922067a49f2a9dbb06a58d37258910c56659ab41b1f936145ae9e674935ece8793826e4ea394daa012baed554664349aeebe1980fff743c562fca81fee582445c541ec6d54d45f9d87098aee89a6ee896ded083db277acf66737aa7ffb9b50c56b44f38001209f1ec9898e5c6df352df16393ff58c9a9c2bf99d2eb5949cad15670c7ca143decd22593b3dd1cfe391e1f80527938d1bb05b05c16ac04c32d54d6a32bb666232a445293e351e93fd03dfed2032bd88856cc919105d8151664c3ea5931d715375851ff4956a0eb1fb8f8a14b249196e99d5e8b0da1eb015b980bf4b9d235a16bb698dc1baf5984dee1af35a1b7f86b71f53c0c701a684fa176df3d182d8cac8edf9df9c4a883d92d7e3a2d8a983f7adebfa2c0b0610bc0b1705dae9eebd399bf5096eb3b9a88eb1c3c413bd2055c85cb9998cf27d2067619d11cc30b26921e08ddb27be7fbd81e6e43ee0136784f08bd61778f96b923843e4020c3ec6d3222542313d9dbe4a0afdda742d3dfd9db644be8bab85be3c70d097c9496b155019a7c2d3ed61ab4148b8f6f73f9f18d7131ef2bed224eb9af8ca6efd344b10f0e43be81d7f9cb0a90762a821c5519e3b484a726d4bec696fd691d58ad6d1276be8c35fddc73dcd9e5c3ca7bda95027c21391fbb3cf82074659de3ba6260b8cbdd4f5304e8475f06cc72b9ff4da81f3f160b6e1f0f3ec889d087057896fd1092e05579cf9319b68ed6b33cf8eda2ae04ce7a21674e42c3994540d7c17a71841ef6b57980af4c51842d1c618cb52c9bda2a3a91642a382eaba62f4a0bd0cef84577c1e01205ced1897187a8b169e342dc1164be97f53928cba448847ea077fe899122d16b649c4906bf96ceed3c945df0a24c14a8c6278a2539934341ae42a4e04a010e524eeaebd1842c07038b90a06d6539583e53286f0c74aa4b3a2293e27a372906035231aec164c118aba7496526cb0a7aa6319219705121e8773632a8404b5d2cc1cb116da8815aa87639a677b258be01bfaf61f94547289031e951678a9d8d8d5b0ce0375f8ee0eb5bf1ca8a476d12c003fdd10008e311fd99cbea4dd09efdee0a43f2fc8fa4e70a60a7aff37a9dcde61da9dfe2e42cecfe8b9be1e5d8b85eb6756f5b754e14560fdd5cfa1519a3574b34afcf7a3d6a604ef6a0aa6df6076a62ddff41a34f8509ce71578897ea1f5c56bafaa610df57ca18f6d04dbe775f7f1cd14da1292f5dcc363ba2c6f8532706fb92ef54f5ee63b10d7f7fe7eac018ddec2d4d9d71917a3a02b1b49ae2257e38995bfce0c2356c44e0f6d92e2e3ade1cd13b1ffaa4c56a7d8030f540c29969bce12ba5df50bd4661fafb6aab93251a560719dfeb149d65d633cc438f2cf006538b369e15dec226a0e417b6f29ca23cdae882b25e27ffdf182d2546c4f155258b9f2ba134b63ce526fa499dd978211a2fe281a5d389b65479e3d877a11e6198133044a2f184e5298892e65d6a91e7e3a9813f58f786ea71d125dba575ae6975f01b59ac9232ea2721b4d4c00a3d3070fcf8ca585fc0978458663e7e209c03bbbdb8fb6e4747272a205e32748e7cab328d3e6ef0aa153f739fb4c971ade11eb3112dd3b21277bcc6ddc5a105a9e0c7255fac396b2701c7ab4c6f2ce0fb5af14da3ef2809d7e21d57af8b0d17b5d1c72ed3ba9582da70ad642ffc7e536c0a85894baeb8dc14a299ee44dd419af112b02bcaa5219668c54a54f93409c0974b2e139d8e0e037c66458e47fddfa5751445fa7db3e480b557184f6e44736692ed432c012d95a4325602e8b3d7149ac9b9811d97e3937b88ddce56b466cbebca9375256829de738957f77d855726a9a7312e6d259026cc9d7d92af14ede0a3e70326898d1b378b88f4b98ffd7b4a2aba245905072f5495b46bfb2a2f17bb325770552d6486fcc5d91c58e6f3158d77f042c1d7cafc458fdfe60357ea7df55ae69fd8ce62c0fd7eb24b2d6c3f1e7bfa27b87c4ceb6a27179c4ccbf4c6e62715c92a5af7fbc9f9058e3b22c4ddb7c20e28bce885d037ef44fd3a7d46ba184113ebb360229ad0320146325f29103ba2fbc70c1255b58534841054b24bf01812d0f60c9c1c58da1e6c336f4c4790528311e70d9e0ba686dc04357a3a600d8a7bb8da71f39f0ea4a36abecdfa5c6b9170b1b576c6a88d3b400ca8ea4ab111e5b89836eeb25e541f8ad9816ab01cdf42715c67c603b5e3e0bd8622fe9d0e3fe1750e13f0496623b3dcbf78a5dab59a8bef21e1d357ded7f1ad7580db2872d52feba751a539680f7b9f3e685f2768cdb71305e6ea683ed6e9b5a88c0056ad0598d37004f15ca2de299f930c5c236b20f1d44aa6fc9c1c8fe6278ab34dc08ec547038f5e0188aa2325c8cf2d4e6775bf4e5d50ef71c3481ca0d17c8469fa9f6064c7d35d0dd01dc6a4b13a3b3e6a94404c24915f39aff3b59b87a9f38579fad275560f96ee73ad3b801ff81006d05f326f66bab388035db2ba83a7bb60bb3420803482bfd2499e0a02e6dd659dde14b5d51fd218cbce07b45fbc60abe37179cdc6c7e3650b1737a8ba6d8e2db2041c17a02ae51b875026041c89f3da7a77121a0e2277cb7a30f609483f52e9f905b507c09678309e820955833fbd48340e85d5a6beecd5329357c9723806ef3c39838fc4154cff988d4146527b783d2c4552a68e3827c39d05bac39dcef154aab3baae7f922a51cfd4403c1384aed9875455aff99de4bcf6520a1499d4f6974e4a9a2b30f813b9caa91e5247e9e2aad259439f25ae2a4274878eadb1a0aef88aae7566737fd6f606fdeae37dbe76f3067d59a8a7df972f0be5ebaf8a33363fa0766250256b1dee38c72334b446dfda32b04cce9934d7a46032d84188f4e1b61a051bc13da065e85cdc9bbe82dfeef81e68ea6d37552d6c21ab412901934b915464b013494108dd4d31cb600c619e737916e111b9c7538db3d9255b80d9c2428fbb71db20b40c309821ae4c99d70aa2cae01d847832e6ecd11b96fee1d912598d21dff3c0727bf4617ad8e93d0351627cace81d1cfaeff365918b3a69e4127a6b9879559ddc11fad65c9b42e8af8feced33e3287a70fb2cd95a6890dc4fb7e6a266234206c9fd7494dd90895b1c77d4c3557257e9e3e060a2cbd04f74df21c91a9121a272f4076650b90ea95387a46c382693fb69f28695d3db672b33f2b7cf5676b06f9f252b3b099b48e827564edf3e4b6c989de1dae664b7cfd6ae119f9abc612beb049d7e626be733bf8135babb9fbc19eec9331b9ecc62aec33da12332f87d1399f4d53e0d7fe8a8f60356f3c2d8f72c4f915d361d6576bf0e839b893dddf176d8d0cd58ee3d8971db95f7cddfc469d72eeb74e2467b089d7cea53bd0b51724b77081778cdb044605b834f6910f186eb0ac0d823071734c0e07debee79b2eda96a1b7c19eff95605c80cf62c8961aa810a7e385ebf25d106d3b814a1d1303a2abdafb67199b08a8c373f3e14cd72614543bbb46b9a208aade5b0efcc131f015bd6bf012180fd0c526901f3e471c758b4a8bfb451c53fa780ecc28f03cf1396078d1642ccbf582542ffb022e76ff26fc0a74a4f4030daf3515431582de9f72f8bfacb42148ab75b016d8d0ef62774eb24343cdd9370fcd160c189ecc93a680fea1c1ead732081ee78276be35c8c333ce3202a37e83d3fe73ae3c2c4778650738f911b090127069d1c164e8e47d313cd1fc1ed1342cf88baf84c18013e533331f7e677347e511fd58275a55c7570bf12f25315ab356404df1322d000466e200d9f19ca5bacd3202de0bbaa08a326540f1a84a8ed931aec5144a44e13c5065d87007482c499bcf19c84b8b9a2605bea6083fed684ac8db82618ef6e48b7c269ce38a10f9b4264926ef27d96a3e257065a5f9938193b322f1d3aa3f31fccdd9b2e5cb853af52d452edcd7a03f37bd0a317fa838be5a037ef65dd830408104549b35c810059c025f7e9f0fd652521bfa3bcdeeb7313b167c35041367e45c821a6928dafdc828b61a2a6a36c4ce8d85fddebd1f1c85f88e1782a766599d9a9d901bce68b629397097f2607899acaabe71acb3ad176912ec5371c51c40a4473d3a1f52d1b701107fc192699685d6003846dbb15eaf27e376c3644aec27626e7c7321d0f55a63084676e12cf41fce6263a9b475dd38602774d35ae56f41c6d0a614de237f93e1a5e20949c8e327e3deaf7d5f568aa32fe42ff7c319a724dbe38f6f2f920921dec145ab1705dc07dcb26df03380146d9f1585df933f40e6c0206635a42b95085e009e6a5bce91f83cf94d17a725e8d54e0ba32e1249bcd81536186b764e56c34a70b56ce76c331f863d9bda849877e4fec4a7ea4e7391b59cd05af1e20341c194de4b51b9b1c0c48cef84ccea9648c55d324b7527d09ad0c06c533317782fcdc08f2134e4bbabbaa09059509b0b03e1752cb89f7ba178d07deeee5f5731f671f47af012c556c3c51f01029fdd8eb951cf2991a8ee7978c095fc58b5338a13b96284f895cc9c803d28583093b0d0b50ca34a2354b72f621dde8cc9b55be501a9fe049191ab456d7f5a41a0cf4409282e5b36a4e5eec6cb3c5a4abfd5352524e47b42674f7628412243c25bbe1d81d10d00b91b49ca9b9fe6730f602a29ced5e8ca7c962b82457c96e3826c6e20e6b344dda73321d65cb614e97c416597415b24b9f2d06b9d949ab3d86d56c2275f7e1295c4baa2222170a34e85ce13d923b825711f758ba744dfaeaf4dc5b1d47c47bc178dad032009538964ff3e8d11f141068432737584945368a2050936ff74cbca89ec9697525b2fa4a66f533795d3d13d3fa4a64d5953c51cf0839c3950ce4f8761eceed23322a20ee1048d12e19cbed71becc03e754677cef583b38f070d032700435687041d0762e951a0b4dc6ac21e0f128d24333d122db9776912ec780ea6eb63bc5ff120aa89f16ce375421a5f7881bdeb17bb33cb7ecdef1a2deb2db80e5f491dd7ab6d21bf6366d68ced04fecbeb17574cfee23c122fd81ed6db0cbe4cd749c8d087dcf4a91bc25f43578fa616f53af3334cd45f2d68776a0233a22d9887ecbde5d3da7dfb10fe94d5e167702757bffdce5c6f8bbe48e72fa8e9c60232db5f551e3927f4eee2d0148ff6ff6debebb6d1bdd17fd2a36efde3c8005d192d3b4339411ad346967721a379d26b33bd95a3adab00859ac29500342b6554bdffd2e3c782148518e3b7bf65d77ad397f24164100c43b9ed7df5351f7bbff896ca8ea7f2073fa1d027d18ee7d80b055366f1af069be1e605de760d3bd264b2869b3f73f908aaade07b2a190adf72908d9e7cb5b1eb6a4f667ff1329a01519d405dc74ef035938e90f90acdfd9702a9864d48a871690dd64e97fd0d747ef0329a8c9d7fb04acc5485c7e067e42d287893018dc42201b8e1bc7b1b87cf0610490a094de250d139f38beb6734f297d3f462b7a9534ecb4c83a48316685b320a536c2028b846de72b63a1b4db0d708a56b4b50e041962b236a9731300841cd8a161f8e8f5e1c7da065dfa23a4b62364b414e88eb8b8cabb9d20ef41269f53bd9a185961723f2e694133baa0795ad10d9dd325cdc95b6b02a11e866949d4769856443d5ca40551db8b74431e866946b6c3744e1e2ed205d95ea44b62e4c22b6b4cb70e6dcf6687a667db7d60d0ffd69cf5c6588e7e266f6dcf80eea38abcad8f89f7de62e50b7a9bfa903007c3922efc71b0a24b7bbbace9b23e0a667465a56d644b17ed13e08e2e9a27c00d9d0bb4c2e49aae9c5c865ce92360196832c82ded8717d8a27d7bf938dc6e4bafc728a70bb789affad7a4a4b73680a60fecd9d8bcb684de93573d9bdd445809f3bbadba1e2346177677a2d978905e61f8c8cc7fc4148618740bb3e16cbe9ecde76a3751baac7bf55dfb229114097a37e1536cadf5f5e6c4bb1daae8e240e62bfc2ae5b867a3219bb5a289af02607c7f2de5f8c61af9df5833dd50789e51a5bf3076b6e7e9906c756f2b6283779aeea3dbf1304d5ee27e86cf3629ba1d0ff4d3d906a72887bc6808afce2f30b161d05ddc51229dd2e6d646fe9660ebac77067f507671cf898f84949601bed07b8be1a16f9a67e018d7cb08609cdc0ddf61eb06228e0db5114d49d6ba50e654b4ee227178172da86a998919dc87a6e518a0af1d5ed8e011553b452cda4e1192ea4907005223f365b4b2079e8c6316c7a870b15b8a2002922445235612339668efc1b4a15a9a62f533aa8223d1d5541f3ab43a38318ded52180ac99bf142e536305295a88721a912b51dba6a6dea05a45e605734300a6e5600e55bc5a134142e7c701f5204f15df4bccfcd7cd7ce327372475b53b8080fd0fe505f2a377086f85374a40ecc6c96348308d270df6e717f7b7e415636cd08efef70efeefc82ace98cdee014aded4b4d1ad8fc339b64ad996c81255dd19be64ccedb33a93b6016c0a03d097ed496641d8cd78accc281daefed6e7aca040264ba2da3adc6363ab8332c206ee6658c6e2b349e218670fb4642b846b89434ab7976c36c3ee60b545294d36ca2a6183c15c8c6adfa8dc1a22a98e2284f1e489e6c75221c373a45fa0b6363bc9a4ae7d3b409628d9576483747c2ad6d82706d79fd1b8417cea1caa4dba3b7f67612603259d5a25ce3c3b3a9a3a84551af9a882919900293a247cbe06836014b83cc15641b6deac5eee7b3150df440f4aba747048a664945a05e36006d8d39366005525386cf700fd13474a7838cc4a4e8f4c991b54fce468f90eff5f9054493f504c69c0ecc826c291798a57a7bdc2b1ff366886d4785f737fdc2fe4cb90924dd2bf4df1a767741fd559f8d185d8c6ddd3663ead4aeba26bd938d03e7bac76bf5e09c2ec6fde4a57103fde95d5affdc2bb76055b06019c9c1f9df2cd639b641abcc3af31195d59145a9c2054c8c3b0faddcf256f59ab184bd714b806bcb0068b8f57388dd6718fdc0ba208e8d08c15fc3c88b4eeb105e618ad57900fc9681de7b1628bb350a8b63fb23f90d5c00a8aaef74fdce3fc0fbda3dacd964714aa98c63e372062004d0b4f1e4f1b7541ec482e375e73af050080f7ada8597b2278fbfa5e258ad66383acb4dd3c991923aa5bb88d1325c31355fe6e2c676f908e85e4d1eb5ac407c5c1663a1f4053439bd9c1497a801ff62aa40a7009d6031d341e021c632146e247996ca50b091e419de63bcdfe3d14ad43eee66b0682349a7806dc45ad09520b34357e3ada06be1fd0aba8c380f599e7a546aef0f8449803eef34755482ac3cd77fd9033112cada417ae4f946064a05e15d2919c6afe8208e514979c05ee6ad6cb9cb56e96ce0830b4c36ece9157b300f957943c5a49c9a742a26d5b461fed92d166cf44f79e13f54ebd435ee33a1ade3c060c408d838b53b78ca4db82fa488e80dbbf44d5da080b5f8ad060f79127c72e6d452a04a7b97215ccbc3c61d9aaf164615607132c53413951e0cc3844f9f345d3f38996aed16b746a1ebc6aaf55519b010508136779b21849ae6e8a7ed1413e5c239ac1b2e9efbc9ea233002842833335047ffccc40daf55997e51d60ab6a68eacad6aed88171e1806cf04806bce0412d07c4d257947a87aa4851d6935c5642640cb8d242d3bfca052ae89b35ab52f77bb5acd1fc779f523fb11296bfd5836172e3f401340124243d2fef0946aea90f91dc5311ee7a922ae42f0c63458fe1d3a45a4fa6538e2f8bc0c87b739824f6942cdc2686a346be547b762d32af1267c4a78afb135cd779b9ad9c30f07ee9e81fe114a79fd704b7b8938b61acea0934d8d89b7e404fdf8c0a1ed072addfe103f4f616968aefd1e933b411f0f83988cb622995952b2a277024efa1b7dc68312fafaf0b4bf6a9cf6c7ed5dac798d218702eb96718fa78ddddba8c26c60e530358d9514d88dea71ea70cf3b726098c5902f2024b957a7d608d0557e03c66739e803eb67f68047e27210c7f2723086673a48c52b9da0ff3345e800ef0d8c4a6030b0ca45b09f54526d6e6e78a5787605b75798933d1cc9c91e46cd1ac7e67bf03b3d52b9beee374501f7445824cc939ac4d0ec2e17a4990707972434d2f61f7e777f9c3d343e1e1409f3a426313007d31779330fc68499cb199af6ca54a74f225b2524f786b62390d61f62e3f5eebe6ecde41e7a3dd298f6dd0eb2f5fbd83ba50261728c2e69912030988aaf012d409af1a8f5e5fe421df3d00bdd5eebe7a28171e38e9873817bc314f9d8c78625f70d034a48ee76c3a17166e7812f3cd12729af25cb9dbd71d661603a96fcf4e1e3bb4feffee3bbd9bb1fbf7ff7e3bb4f9fddc6f2e17959f166a9375895de882f9234871b0d2ee67064a1038f6e9c52514ffe051198e8d50c6b1a6c786040c95af2795e19ec35ff9bb8714f0fae1fcd603df0eca39b987a8ef01e506b0c19d5410d39c1099d4cc18cdbcf6d41abdd6e08b214d7f4fe10442abaa973930c3aa0ba814b6a3b426d37f4d199cff98f9b1542abfe129f6fce0b7c06fcfdfa72c8fbc3afe2f85aa00cc39fb9532e4e9664351d39d8015843abf37563f12ccfd718bfdac4310a3f929faded2730a976bb6b8116786c07dce212fda28f78b8847e2ad89c57688d718a9a791698ac836fafcf043e175e195d37e06cedacb77c1bcfd6e0db786a7bf54bc28a5559a95f9665c15176be26ebf3217f61e0a8324c4ea1dbed7cf3301fa37370b540ac2ff1b9e6f55d660bb49693e0e6cdb12d396e24a6752b73df111b431b7ae73a62d29849b35eb4d097b14c33231ad3eb664687a319a042ce9caf6d501cc9deec6c8dcdb0b933a1ae6c8ec72c9d6352ee61078f9cb5f2e10e44c692f6014c301e107367dc2fb0fd99911d00d13a46ac8e3e4db83153b38b94275cd8850b96cbfe5d2eea77ece177f9658dec9e7a5d9973a5729bcc7224ba0d0d3da57fef28c301268dabbfebdb8e84ff82736bcd4006c690d26e466636e3d35c82d243d96430e2b88e4c80649f72bb020f49fc2119e2f30bc27a86690c3906a99fb9c8cc13d34f01b7c0fa525363b70d6accc07d584c8a23881006296ebfafa1bade77591905e29c8a7683964d8489e5e6035ba938f6bf855e2af3dbb16590d3282236699afc5ae6024549d4b297d4d7ef444ef53d359153e8573a9912c16fd2c9748f894edd23454a530fcf005c80822936481e050788ab30dab741cfca003d2ba7bc61af29276c8a2d7791c30adfedfc137bc0bb9de14627cc214aef76a898b029d5ffed7603b2d10f1bfb50269217002df953990b558d21eb703048a172cd4840bd9783b12ed2a3909c16eeb7de457e4eee3b6cd144d831637c9683c73e6b754c4ca4ef186b748cd98e298b391574ac93b233a54927e165ea3214ec83a057bf577413586f13cdf6b9e55652d6c5a0928ab2e498b80cfca672bf2e36f4710fde89b5391cf4841e23644c67dceb1fbffbd3ebe6eb20769bb5231a9d1671cc6165715cd010bda802952fb4c5591d8d5c4e41cb89cf023bc3b0dda418bf1788910d4c7a7aaf7feb5f0ebe79d3041b939a76282b179d92eba58fcd6cd553088fc49cf7122cde1bb3088fc4dc0ed204e764f686f00e0266fec165a05e4c63f8930e6c85cdececa1919d3d4076f6900e094bbad93084bf4085c28279cab0ac452f1b25c25703801ce8d4651c52e7d6fdb1aec46a031a405cf8098237686f471377bb80f7f697ed17a56e07314abc9e07b5106d3a45664f4a8d8e5a247b894ab7697abf2da17016d26d61cb71a147a35bff98a8e3f789733ca9f10fcb75b0be6d3f0b7a2b460fa1a8e3b311757cea80c97c2b9cf92b6078928fbfffaeae8143c30bfb431bd72e70e88963fe8a0ec63c557030fff40fc8d46b95b0399c2b5afac3b970d24330ae6e1ed0d981b4b06ef23c98f66ccc03a54299e459ca03a5824ed8974f1fd7e5d3c73594feb104a6fd682523a32dacdcadd188d1b9c0f5c9bdf1863dc65259d1a223fc5bd16d333a07c165d321647e8b1f17f47430ba969cddeef305f28dd8ed16d6de813eee4747da00195674d2dd12dca2ca7cdd0175669b01f0c1441dd265800b75b43f3036beaee564a56936fd874ea6d802f7204937136e8e22dc04f1b11d5843c991a0e551aa4c348817d1245e02aa4c38024b18026bb7436b4d7cad2d69b6061acb94dfefed95ba6c5ea9a098b638c903778298cbd3a25102e9834765f3962d8d080cdb355923cfc2f52a0c88a74135fde7ad285c471a7872a0ff8706b7350490c36cba83611046db06b513bd0320731ca3c61eedaacabec3d80d7970ce996f8de18f0d85d3a645cc27c7f0c767a9bfd8aecc7d6d1c3e9972861c384abafc3765cb86eefe2090b24c7540719b5460c361fcda524ae35809e3a95bea9ec621317f8829fdd649acb1957cbaf93a965593f9bd21060180ae77680b0d0718935066ec05db5facae3f6c14ad65aed4f769fcc5e6f786381d0e9a4db033e75af26a300e934d1e2348be1c365f7db1cd386de41fe22f6b6d3b459ca76da522c8387391ba4580419ce926ff3962483a99929c7e726cdbf1ae98fa31f63822e11b109f57a1f41944cf616d25c6237de8e76327f76b56ed376d53e217be6bd42780eb00e9568e494ee559eb6d7af09dbc5d79deaed1603014545c0e0e1711c0cd639c0e4759f9587f7a38a0b4d79306439c14b4d7139a8e1aa6057628e54ee6d7fcda5981cf8bfdfd322f381297e56ea7376819c7f2b232edd8d879610f24af9d90cc873798302fc97ba6b04ed053f10f4ae988886316b21f5f12da790a1aae8f06709293d53d5310678194fe3fe477bec414982efd37180230def93e9715f4f788ff736bf172dcd4d1da780a8d15ac303e6b3e3fd3ca414fb7a0832f1a3558591d5216c3a5d907149e729af2f974e03b5e835e77991182eee4dc8359809d4320d7d447456dfb604d9345cb18a23e76fb901f9fa3615f7c89a16d184a397b32c4694f1d70b1f89532371638c32261be88fbaac5d986adeaa946a3f5aeec609bc5f354fea1dcf990df0d633d88383634bbbe140769636934d86724faad169ea9265bbec7e43b413f8ad14f210ffb9de1617fede061df1c0df540fe1c22b45b3872f25ad01059da843be24d506a1f5537224cdc14fc1f03a4fe32b67300763dcfe57c5330402f753c77b52c8d3ddfb76c7e9bc9126096afedef1096fae2e54be2fe0d926f5ee2c867b326b09fd38b76d2dfd28b6398cc56024fd6652e1c6071d87b8f2f3f0c609dbb63cf0442811f83b5c59b462caa4671aaa1f77f6d80d71fddc7bd8b33951c743700d9ffde6b0f08ab9b6642917008c6f168a115fae2fc02e015544f9c5fec537ea9b3bc0a3398d7fbf4314463503d11e0cabf0b8760601057867fb03151acad6dca2f877f18b4fc79ea2a7eee54788864db93265c431d62a7c16aa97650375e1be7aa099b12913c901293b247a5b1f80e33d8b775337ef132fe3fda7e5c7c63fa21926d9faa64797e9122feeae21b7d355dfe71001699f65550cf6fede84046e261c2030d400cf4d7867cfe79b0a41d20a49d48a301c4d28fc14d810167e9e10dcc4823a050882ab53d7cef114dfb61ddd8e4cf24bbcfc58d3e3d425d454701e22052cf2fba11419fb0b00701d713e2277954f4e4e4f56de5452d6a60243781540eb9fb1cbb9847aa2d0ec8bd26c054da086dc85cdcfc5ecb0a0a293cb21a2dbcdb9587daac8089cf49ada6d734684e8c52606f423f82d12aa547c7643c4885650b659ded607cc6835412fe8f2a0242caa996d4076be2fc47d190ede3dfa798be7aae52592ffbfaf4764bc6ccb941846f4110d502250f45c50328295f558d3cea0dc5494d0d281bdd69acd228dae3e7d2d35d72fce791d34731115ddb473cbc5bc28eb87be6186a5377dc97ae31d10cd863910e884ced9e262a1d90ebb473dfef49491ff723f09331be14ccf952f06456576b20922653207dacbb6ce744064a57450723759901c204e8e034f9a76bfcc912374835cfa8de4b13ba6aae1e484159e8acb9a18df19aa829094271a10d1e3fdea7bf84a84ca82295759bc264993a21e259b14f1fefd3aa113169e31c0d9769b1efe8f8444da9a1fae6a61bb07a5e9b48e4982c1a78a273fcef2fbe1e9025fd5ea00591c90311c93d1990e11f0698ac5cea96886449fe382017df0cf0686998d0cb3c29e218e549416d0a299382ce31596abef4559e48782d293c933291fae5ca9756f05ad1952fad4c0653fa1a5e5fd3952d7d0d31a4928aab9f79b6999b63a53125faaec77bc38f1af6aee2cadc4230958ee034f0dd752d4722b7c1a5c1346970ee513644520b0dc0f636917d69e76380c37c129392f655a2ce3d748748945e33fda0f4751f49b7d4657827fada4cc16b3c62f4379017e4fa6fae6bff4da05257f89b401526b2fb060dafe73e62bd1caedb666ad9d3773ad675b446ccba0f9a110b5ea447506c6a9dbf85d3edb3c60c9594f79a291515ad14bd9bec90b06048fab259d788759120a8841ef698855d609d7448d52b4c2655ae7be147ccb95bef986352064747207e865e7c3d38ef3a57700fd550dbbbdde31e9b850e15ef76030c7bcfb1b2e2723016bd175f0f52819d4fdad9c5f98baf0706e02a37687fdfcb72653af40536d911bb21984d1314d0fa7d342e592317ec1b5962cd6474c60618dbcc1c9f8914715be8cc84a76f9c9dc71d4e9ac713b7c68c3fbd3bbf7041aa1ed27a1be033652e3c3bf1649bd63bcebfb413be3f6c47a783c5a1b2bc71ec73e255d747a700a900d2aba3d38da56344399db05ec7da8b3844df3944fe52978338869593aa57fae7abc158a5fa80ebf0c63f84db01d7297d81e55406463a7903c4384f6a569e14f45781aac03fbbac7f63b2316f8da7aef5d8058d63de453fc4f1e10875fbc0068509d3ac883098464f4f8a682dd74041a04fcf239eb0a3c00fb4e98e7cc4cbd35b7f76138bde0bad7a4507a3aadfc73618292870c7ecfc221d00c570b0f22a92f70a4d6664f44dd3c3b77ac2c777143a9d6647e880ea900e18859eadef045a60f28bbefd3b088c6aaac9949f0d4914123afa05291bf1ed423756a4efc47af62dd7e3b0b40395adbe8341a108924cf98579962d4390899862721465cd2e31cd8839d111796ae648a1475f394887fe502ff3372ea69fd9043a15905acbddaec2715cc4f10638c1dcada5bc011150903c0010d8e8b70de887c6b3a6121a0039d8960ee01f5437604ede001f28719e3039479e75af997422c8805cb86b071b976bd6b528079a97cc1d8c014b1ef40d5b5b40677438ca2eab516610f30ecb67a6bc053e70e5f779322fca8adb96e63566441eba4123494aa0d0c0a42d3848cc801ba0583be22c18e182b0c6f86ff47363c41bcfe8cf024d42440d4d7dd60f93e914bbfa83396817b23803e561d24097e7fae83d7e5a707d5af07e1f7f79fde7ad730ebc615369d542a6f8c19d665072ebc5c1dc944abf3aa45b1daeb39f4a248043d8623fa0088f58c353fd8bc0155d4807b533561716ccc1f135387a7e0b4d0fffaae9efe7e0213c79d67b0c808efd126002e4bf1313c085983d38f57252e047d0fb17bb9d70b36943747f6109b4cdee27c51413911cc8c1c1714235d8c9dcb193e1bd219286b4dcbefb99cf15eab3f38bbe68cb8dff46fab25f2655fe1bef7afd99b0dec559472953a4ebdd678c1b4daa42bc849c0c48df5ab6aac3e56770368c83e21e93ff10f4b518fd35d48bfc87e190bfd57cf92ce36bc9e74cf18cfcef2ecdc7bf75684ffee4658857ef7e9c7d7cfdfd77b3773f7efaee4fdffdbcdbf5ff38187c33fce31f2f5e7ef5cd57833ffe7148fe5ee77efdb756ee83cc3f08fab8ca8b22aff8bc1459fa382f57ab52a4a7035281ee005c9eaa74c85f68b6ac3b0f7f617369fe61958b8de20799bee65f059996e5461e6479f1357f69f35c7cb52719db1e64f9c3d75ff93c2f067b72cff96d9d69683f35f8ea0f3ed7577bb22a855a1e5475f1f5c51ff8d7ae7b177bf2f70d938acb83eabef9c31fbef219bfda932d671d6d1fbefc8a7fb3df93bf08fae1fa573e57c92ddf56e80711582ffe679307e07d554bdfffd694beb7bccbf49e5b3945bc8d38948b40780f72fa2f16071dbf0b5814fa0928d9e6addb620a77e93a93ce01103235022b80169497b41a0131c2289f2049cb5ef5ead510f787d3dd0e8ca072836c7bea20351f0b6b1db5ccd37c0fe4fb444d2f052ea9ec0d0d6d0061d9d9444d5f091c1463b64c45657fe8626ceb17b97ea12bddef6deb4148509480343ad6bf523ef18dbf98a680685b36f22cf330cf50e7194e4945cb899af673c083a5d51809f88dcf2b20ac513991faad9ce2b3c247ee9fc8696f538fb5902167ca9319cbd81aeec0c61db5e2c031c175237507763b69d57f9aa074f1025cb5b54b33038c09864a8c49689e86773b54d2030fe87c2ccc475049729cfa076b58754a6939ee952962bb5dfdb1535f1a2acd91eafa5650176ea8aca41d820eb181f26203fdf5911ba4c6b8480a6378a8a5a8a3371a532e39962912c6e206eeb65e3ddc463ef2618124b13930263268246bef091bc9ea2fa2e919f41711400d8cd865d51f1a3f218b53f58398fc454cd8149c39f8ba1ae7e66ffa7741f2c49c23715c2b2390e82b7c8ecab31cee2b8c2fa9746302158dea87aa3f9cd62dcee5a1b7cf640a826c52d56ac7daefa732913a278caa899c4ea92479236a27eb08d6a989862a8ec5f8096ce9705557b457fab15693c1d41c4e0470a0d4a4b694b12feca8562376498b11d3a5599621468644628c72aa87c062a4a8496ef1bbe9e9a01621e96dafe74ae03407bd652943f375bd467356b4a0938d90a41d7ab76d9954976dd823b5a3e97e01d368c5011450ffa08f7b0825e0078c0a7e7ff23795cc20bca64a6c72a549f75a85f3ad40912e7e62e3763bcb0002a9f621b24fe60c8930392ca56f94c8dd2d90dfde2dddb9d983cbcd1eeadcec21d2db1f06ef5d40567f0fada8883bb72a845bc369c6ad0bd5e889d025eefa0cece13908f8b9fedbfac253700ebfd78f210c63e7bc17aa7aa5674174bb39cdcc9dbb11b9daeda28c6d23b2a07f176449ff24c84aefcbb5fe6f460185b68948e351a605ddd670a0025cbf6666874a892ab29df0290e73a3963305b0f0ed1a8e59e563b8b75b35389b7038de0d6583d8447395faabeb099fea0e18ac3ed6c6eacb2934d3a0c1acbc91a42e3551539a1beb06a864662d0135bbb5dba1155d39afb49966c0f4f6ae334fa6a359ed19bba041e4b81944ff08e2ca2dc96c32ab0f19ac1be28baea878353caa5b7cdcc3017a2c8280ee219b48ca276a3added109bc8293d1db83354d6d751be472b9c54a554e83f054e57fe2769b47d75d8f6d564d568fbc28ce8df04ca30deed16646912b834094bb2a00b4ae9dfc5b8b7f1c7ee5bbdc944798f3099e354175a524aff0479b8c8da397ac37449aaa671fe822c31a99a46f98bded0a4ce14bb2e3800182433bdec2bc556eb8a3eea9593ae885b4ce9dac0bd56e96cffa4d5735b6edc84dc92814f716979db027ead38d95019b68164ba5973239930a175d89acd73b5454c0f6765232493250571a192f9f546570eb3bea1916e7b44295d04619517711c555ce6bcd24fcbf106b6481a99ce418ef1c68a598e69af40d4e0cf8ea6a3b4ed8a3e67ccf9c12482f9f8abc895ad856ce8ff062990c78b30993d02c5708a494623cd22e91615715c257955fec2f96dc6b6644e1559e8d59d2f90268ee6b497fb05332791cd1a114d17b55e666338d0c0a839c9f2c50209a248815f0df9cbb30d564b59de9fa85e74c2447612f584fe25f9892acb9385eefb9a4975729fabe5896bfc49b938897a9b5e7412f50a4b02cc47ec52680a20b714c08614182fccee62b50db411de9acb28d2f46a72adc9b96ab7f379c9628fcc213ec7f6da8a689d338e37f599c0e846b30339dd4c36c1ded3eb5022a9b75ea9779a9e4048e0d224e416c079d3067046025c6bf02bcae2585cd23c8e33d3b05aed054b9c32024b9ce64426333d99b4b00b00553ea8c2984954f8c560f686d9197a6fb7169b37ea21a50516fe4b005697bf0aa957814779bf6fe8d6bf88493e253f884939f5246a403bc39c332249895f51d51f3afab40c6853316ed49d0ea67a0e322feaeeea02a8856740d1e95710dc3408f212c791e6bef524db016a9cdd8e47554d9abc372422a0daddd19d2f9021cdd5d4f53120b3956eadf906b66843ba69e6a03bdcd2f90245c6203332368ba7eeaa70802a8f7a4ba78aaccb2a1dec897914f038dc1bf391103f7732d527979a8e6abb41deb61b4415e5400cab38ae2e855f56952109fc22b3be7459bb7c41b309eb0d3587904d581ff8db6cc2a635f05219d0588565522cc048d12bf1f905a69456bbddc621ddeb4e55d029768ef2fe10d78cc30606b43e990d59a1fbbc84593798176d9488c61226151d90c29b649f300f94a1eafd9b539066009d1a11cd7190685d561126151d8201b40d6d3dece7296ae61dbabcfd1c9f5f683ebbf13a60565c9d45b3ce324565ff48a10b5708ac22ac6d6a05b6a90531916dd2e139aa7ac35e010a08bbdc4806a624a5be69ada4564f758db592eb63286bec9cdf83c4086a4f7f13312a025d01e04534986f1093c0cd16c7fcb2a54c18bbe7099fa65104600b1d2661a3c0cad4d2941506b18568f1f415d6578c2acb42e56bc34f8c1d3b818444420f4b2b034e0f841ce5b84c3b8a35f914e0b0741fb131ee36c9dfdb517bd20aa51ebe66902b5070031fd0628940900405f50933d5ac303cf909241b5a4e0a7d08e8b388cca9d5bc9085de889b38cef41a80ec644999eb1b2772b7438bf126d523b7a28bf1dc22fdcf1340fa276b201b56b585e0aa11b69ccceb37f3c69b3af4d17abc464b8330b1fc9261e433a371e903d945e0729e35cdf18710535676a048e000231bde1cd66eff589c3d7bc8683edcc29fd93d66b72bb75bf4c054e20026d286e113f84c2566f33e1b5d9382682b0c6ba982735680a4cac53c6b9c96166113d82927e282dc523aaed64bed643b4e667384907cbe9b530d69e4dd9c40fec22ffdb977e4234ab38f3067263cd6b35d5a1a337514cee1dc0d7d1f02216a8ea135ab7a32891571b466d51333b3b9e44c7118914638ab2f0539f4787c60a5a51e1aba2eee745df230f4560b77044c9b7c1c73306daa239bb03afeb4f4e6801560b19092fedbf3dc2f9c81d37d2ace58af3ccbc932156779af3c63fbfaa66845976d236c844303ddab4b3a9eea39e1389c08b77d24322a2702c8dde96ea76942af95029f89ae13810cf4dda7c8844f890a6f3fc230585d34db9c7bb754e74e7a3011c6a7a04cee7d20f3f332597658a739c2a3eaf749f56a30d654dc1e934a76c09a9290af4c1d9d480cef911a0e9338395ffaa86f9f154f1f8dd82e3d1d123d28fa2f905efa4763e87442cdd8e9274b59a751308851b390fe8ef761f2a11b4f87c4b0c3a9e175adfcf7d1d2dfe9e970bfdf8f4a1968372b69dc64257d9c33c56f4ab94db782984ea60f8204e823e94f8248bd118af7e6f55f85e96b29f76423415e0037701a5d5d5d9dbc25279f3f7ffe4c4e96e96a9556d5098b48a8ac8c6c7af2f1e347fdae956cb283361292f433281ea3e5eb08d48be62b915123464511595d21a4eb4f475e2b184dfe32fdcb49dfa6820e3082dffb9113d626e51d9732cf38ead0caf0f1e32ccfd26855aeb85011b112d10eb7848ddc1398fa34f0cd1047116c551c1fa489b1a200c98d5315c66e06b133054d09d18bff3f589167b0eeadb71f72c7b4695e670b4e74794f4be13d6159d6c8486433ab66de7562fd913dd10ce4938580c3e4101f13ef89153d1c2b61fa54cb2c28a562ac0269070abf9e2a2fca108d468128ec893e1b5159b38cbd3c82528d32fb7dfab8c7e47532d3d761648ee7883cae8b0d445a7f5ce445c165fab896e59add1827c7fd7e6f7cbe33b32558374563bcc2809232d268493b60d4f5b91ac7e250e0ab701c4b475624b3f9322f32c9058445cbbd2c3708a8908fbb4d592ff338669a389bdde5fcde287af7761dc119c764d7c5c013f7525f0f6395587c0d090f5b78081905e749376edaeeb9564cc474df71773d9a5a614570fd09b24dbd769027db54ee1bfe8ff3b60e8df264b62a335e40603c3d307ad41b283f39709da7a70cec4a6ee094b641504e3577989b31d1bfeac0a8f9029d0e82a4a894f94d2e2213b8d558191525532827c301265eb72ab1e5c3cd1d263507ee68bda81f9d529a4f06d3388e7aee3720b0ab9e6e0d929a59ddede4e560b793afa8d06b6054dde76abe44397e9cb38abb5b2bf5070e932a1ac12b55ae7d3a17994dfd8dcbd227bb6ec01bfb90c283a9c8fcd685531fa0d55e26a98f6759eb3417816103e2092f9219a8a38c8dfb3123e663227dab9cf4b57483527559666edc76cbacccb48e5b0b0bd5f0356dab75031b535a3bec8eb7b9480dc28fa4e57193ec01d8d0010665613128ed68524a37bb1d0ca7fe397ea21246823263950a9c9649cb8e1c314c828069de6a15ec44e70f54424ca5f996ca644bacb1b669786031c702cb7a4c32a7f6717b3983b8ca1d136427a6de6c92b6261c7623cc42ee79a81a35b06939902f50dd5f367690e706535457f82d2cf3b17481801ac9a91bd2ae929fcaf5584214a03aa14624b76960359f874fa94c428c7c38349a49c8b36fc6b9b38e12923c041c629e6cebe0c6d686c20e42ee2d641e5230676ec5481a1bcb18b24d9541a6c89de50c8c9a9e9a7aef2d0fcf427dccdb099828b30fbcd4d404c71d9d0e4df4933e1c7d41fc13631974da31610c2a42d288331b67a44ceecc7d15e4f5527d4625b466ef0f0edff695ecb828237bdb453e722eb841c240d40b496170698ddcf5146192c98998228e83c159cba62efa9427d56dbeae33cc64a7049398d85a71cc8cc09a3b6358b08d78008165b2d59cde7094831e35c7bf247326ee58e52c63395193bc3f9cea3f53dcb88b842e0efbd240cf79635a10f0260fc4fe802f30d0010c46fd7ed737400520cc87bcfed584e586afcc1f48657f6d496119d3bf4b853cb404bc7ce897e402f79a89db7e452e70bb0d1c6cc68d085c7fdd74c4b6c13e9c0e70703d6c834126b9f57b6ec736f6e259b2a632a9d64cfc89ad2ba77a9f4cc91d1d901b3a308af4a61d3b18baad20c278af57e28c0ab4a16a52d0f2df5796e221059198cce95aa20d260bfd37c3240f70f296713c87903eab1e5ad2b237c498cce37831467774e6217c6ee8d6fcce304eefe2f8268ed17a8ce6715ce759c4719009c11a83b8cde406933b7a430775b7301e35dff386e13b0f0c5e997d420687f74ed247cdac18e234226ca1b8b4e463f5d796ad4b07923de2c7cd10c012c953bba470424163915482459239dd0962145928ff90a69518bb9a711c337b63c4310b599d2b9ee82b0c0ed9477b84a4fc900a9698e85ea67369f55904488094135ea46c8f8948fecd0c03cd49e1efb2768b514e8b899c4258601849ba94a8209254e019614f12ba90804f95acd87acd255de947bc27d77c514a1761ab7adb8ebfd61161d142ee3c11a1cbc560b441fb8b5aeb275e51bddd04468a161331751dc471acdc690b7a504d3626bcc07699ebdbaac92694006caebb0292fe16f5bbdbb5e551c6c0bb8ce32a8ef35a63e38f9e7991af5f4bced086589e463f61b29568033d67a42232991565b9c6c417db88ba20c678bf273792fe92480570883fabe2b515ce5f4b1749e64a1e9859d73cc0ad6cdae9269bca8071c3668963cdb918308b576aacd2fa717fc0e715fc868bac81cb528b8734354d20c0ac8f304c169bc2cae14e07c4128ae9e990dc83300a6cad4bf1a6684a6b037d8edb1926a0572bd2fd41d4798147ccc23850cba2b8e7f1a93c0ced645e593ecd5a6f692eb8147f2eefb8b40089e23d6777dc3c582388473744e95703625d60d3e180dc70c125b3e13fbbc2d5b54e92862387195c4b2a0aaf9572bf9ad3168405f41ba715d3ae89b5209c82478491c874595d1d92e381a5f9bc7455f10795aa897088dc2616a83f65d3831d42ec789e761c4cb6160c92b4376cad4b8373cf1bb686ea88f309f26fc063a8e929d478675d82748eff5de6c2bfd30f7595669adc3be374163834d5ed801eacfd00a72ca91fea08cfcc075d25e1d24c6dfff67b134f0a02979a097dd3055614da6565e51ccc0413237bf9aee0fa09459b2232be9a8d2533b2ae5a5cbd56460acb51342f585545842779d68bfae6bb1126463395879a29d5eb6124294bf43927b237fafc43c75a50e411c6f85959351912619c547ab8da0b83e69ad06eaf1648844515c7f2a98f7ce20feac732e3a82e8103ccc072a3b8fcf3a7abf74ecef45ed23f3d691ecbf1e32f2e83553419176133727fced5b7e503e060d8a09f4b7d1cf0ec9de22b5aa39f66e5e6662936eaaacc383d1dba8bcf5214d7f2c08ef60023a1b697098b226ccc478c071e370fc62b94827d099337b9a8a820aedcc710bb08593082560a503d87194d05df6ef222ab034526d7ad67287c90098a7e6f0212250bfb17b27e1f3e84bdcac5c7fc37be27c10b3d521dddd0c9cfc3646ac7b0ee44692af8426f071be8963a1ca4141d017052e51ab21b769aba5cb8c6767aef6a0cb09e824750fb8709861587143b0cf4111a910e88a93c1decedc81c8cc4c1344162f0f865a455738dc0fd2242c81d9534af2d32b1d4ca9470ac0923e317adb804484071182c35905bba9782847ec1788f012fa9760fb3761fa21163c76c3f134b5bd8916877d9ad39fd701488e7c048ddf41d42d858da05842fc681ff983b64498dcf82f50d6a1f0d05f51309d4690be53d5fa0cd1815876bb1700b4e8e87837480539fc924d419821589ad591633de96b90ff46dba9d515e3bed56743298425c6916ba571a6c7df625e7ca60121a8ee5ca1d5cb7c6e0a457020c4843490c755b4df1080d8c74369b64b5a1514f82c7a2dd12af6ccf35a331efd1b2e7df90a01452af0610f3734a0798004acfa3ee4c3a20aa5ca70362769174bba8dc93e637a9ac2bde43607d93b347e7fb204476fd713d5ff3b2d8ac841bd02959f934332395317aaf0bcde8806ce960f4cf1f4900a8d8f6cadec5d9e2956bbc66a77b74160cd9d2f073336f9cbec5ae51fa8737749e69067fab877bf1acd1d443a63fd5f9013b833dbadebb73d726d5d078aec97b0bffd7c8460fb2d181ddfb769b871beb50c3087c878b9f5b036519ae64b70b22a677e66807087fde31e25841e0421aeca0662bb9a18a8cf00944f4a663062d215c43708898d1da34b6b089aed970e8cec89cde48a43427682fb4fa2ab1fb08e2e7e9536d49af64c3955b76c4b45f1d3dfad6740547df68119c20f3fa3732a709268b23c7c922c010485e9245034460491681b4069ef4a1b6b287dac8048483ddb1c6647b70fa92bbd0ac52e247abf25109b09f56f16315343e24b3dd26a3038d0defcb96ce06f17e7064e0f30bcd841f1ef119bd193f3ea43696fe1d2ac8067c1eb6360c7fbd35f560a4837d5ae7aedfb9dc77a8241594b7b98961fa9d1e5e1f0c3ec40e32d36c5ce57daaa17faf69f0e92f1d47ca99fe2de9a27104a9f008222b3aebadcf2f7a4b7245b3e481dcd22cd98ee69ace844946072bf1660c415daf7aabba31af6ce75b99e318417d3d7a4d325838bd9ef90e6d8cad7937c53885aa6f7bd7afccd0d5f5f9b3d114bfea350f72574578d1b80f4213683817fe7b86ada0f3e4015de1d16983a037f7f22932909233bcdbcd2ee900e3c78545481819f4ca2b8964007c92871c29500be19e80ccfe91306c37d41bb6ae2b7ac3d6be1ac746bb8c01ba86cf1f30cdf9011fed0a6aeeb92ea29f7c66cf58e3c6f62e5bbb1b0a0709a6f50dd090c6236a34b0d1340ce0eca229fa30cbb5a23303baf2f12f3f7fba38bf20859e9e9f8a4d8538999d5f60b2a14a2fd99117ace983de60b32d880cb97b2360979eb577a1496ae886392cc3ef4bf91eaca167982832d38793352b7723f064e6d1a281c8f29edc1285c97622a7863b69947b6f5ed8cd04bf354b727b0c9e87aecf2f481e8e41cf588df5d86851c33f08d8d500f747841580c5315a34d404e1ec5e908553e940a185d3a8b82fe59a9a80170ed604dbbe113805b2e4a147833320351b7d0ffedcfa7cb363f29ce36d6f4d1afd49f65a1d97dc7b2c37fe0a64200b15c7fc92e686038c63a59355b98e63a5530d9d60818df3f68d23e860242ebd4b60af27b0a91949ca2602f401f603d21c59d29d6dea1595fe3bf0abe7800bbdde333c9c27621a3a7ebb582adfdd71d161374302ab7747aa301aadca4dc537401871087d348ee6453ebf8d52f3080a65c8a4271754c3e61c9389957ec631fc06e1a76de7de0118d8ba4e7529f36ae4ca8230d7e5575424ed09433c7920102cdfd6026a6915c7be74f0d3b8b86a6652401049a2708a7cb3e25881863a94cf001a7433c1e73fa8ad9913b79ea9e6baeae1b04d84a78e76e1fd3e00c7b86fc022087e7ff25ea2c7b9d2f73f8068d98038ca2968f678b452890f4b803881f8492b95b02cfbb67c00f320cf235361224c5acd9695f89199a53cd3f78e537e27f26e63aba6d479a4e2d836b925c6fa72596bfc6eaa19a3da735ad516bce63526628cba7ae9972e5538b5edc0a93e98562a91b044fd1064bce04a7311b64ecb2bb4b7478849611b075749b099c0a08d7c765a94d181ba4301184eaded181a147a100f47d76591b5141c8126a0a51601597a1439bdc7057fe184959ffe79c2cad6cc7dfebf02c8670a203f770b203fff5f01643d128702c8cf4d01e4677928b0fb1c0aec3e770becc8a151bd0b356d9ab80724e116ebe5ededc788d3203481a16ff0d8fcb5d7753ac4674738dd007131144c11e54472f62f336e0d66ab73a2bc0ccffd60636e62ed5b795ddaaee1b04828e6f87c5ccc71882fee8517a3a6088437c41dfc8ba28d1694dc3110b92711e342cc4a52d0eafc22e0ad367400f8e1aa5c43847f90592ca85bd4206783edd080de3c007c7a1e24dd0112dde1c66474de43cbfe1c03ad9cf50a22a97e4c11b3f251308b73c33b9ef78a74d92f202f5af4335d4ed2453f231bea80865157c17ef2324d5e825dba87c9ab61f118c90318bccdef83c11b993897668137e372ac6c104a88233920333a18cd2e5735cd3ac30110dc6a329b9201596bf27ddda39531880a33809f2640fd056c4b48e4bc3d20723efd73881cb878bf2dcaf9ad25743e4a7d0e7c90f44e929f247d90e43b4bfa40d680f2f9f46cca074a6ac2e7edef267ca0286c9dbaa547691fc8f23cd2e7ed33499ffaab78bff708a2bfca935c9c7c3482032ee907493e4a4730fe040f50907e27c90ffa382ad65c56f417129c1035045b8358181d71d7e06367ddfd4e28c4c1b6bb3f04081b672919fd7b649018e5f970303853c99a492e40a1abf9269c4a4d6104e06d8121a2b11ee5711c895270cd6ff000790c85c688b51add1e0cff91f37b38b93403f293ffa639b5f2e486ab3726a846662c20049ec829044c3f7855c2ab0d55a8c224a30a1598cc8f87d0759e2fbb5d36f688239b3147151184e1744eb231470529e101a7a673fb5f92fb2597bc15cdb0b1c1398e63f815400219851bf6f6205601a7b0451b9b04fec94612d80cf1aaa0566104fa1c7021c59efc922c7291816d033dfca27d336e139641236c16703bd91f50a022b0421ef354f8352ce9003473f6cc9297cc98d02d90f23c979e0c496a4476b73afb43d7ee1ff983fae56030f587db006d02c207d1fe10074d10bde1485ed68d70c17919c0fd81683e34f7ddbbcffe24f95d5e6eaadff5698fac1036a03f1cc9577430920ef4faa94fbbd846f4d05fc4c69c0ffc2f38c6711c84c6d615b0625556eabbbf6f58d1062c68869761d715e27d852f455dec976559b417ad597901be420df525faea52ef68d153af348902b11d3b5a7ec213c9b3cd9c23d4e9a7633aa6f098a75eb105a73826c7c2ec405f57b9f8677c2d17adaf1d1c03f0b54adfe8d6c7f5468c3b3eec5feab9e8f2561d508a38ed711f94182258f15783f130352bdebbe37676ec0c39f785e11f06d8e4b7d8e547f20fff30387778d63aff2c33aeca3f156cde2ad434d7e738442d1982d02c5c04670a9f2b7d888fb03aa3c30111bd9e5f17b0946fb889f1f0bd2c5720aaed5c582a79e8f304ec01936d9f275be7560cf6dae24cf4e459ed5dcc14131748921a9e26bfec272f1d64771ca3bc476b046ff20896d9690e7eae4ccc796ab6997bfc96ab7bce0534af1d7bb631a90de371d7e6d076dcb5fe02db6d98b30a3c273a27e6df2f281d8c0769f2122605545deddc217fcf93f946ea6bef2dbfcbe7c625e367a6f292302a7c948893100545f5193e93f85cf618acde35a81936f2ae0b24c61e4be0273056292739551031ce2608e79edc1c883c79e8b3d640e4c9b6cfcc40749bde97c9433f6f152a936d3fb78536b43a87d02424a385fd35a7f20c6da8d9341b3c1ea460cf2ecf506613339d987983c7b53dbed3c78754b7727e06df65c90326db54b71152a0a9784f047f50366b6fd1ce6a526c56583edffdf4f1ddfb0f3f3ab2c13eee7643de1f7ed51cecab5294aa149c7ec16c1aa233216eecd19be69eb5c7209893a7ceed4fd3908afd900ec8ea07cded031a567618ce69ee40854e91a4d944e90fe8f230b9b0ef0555af06e36ca2fac369ea0cdcd5e5bc3fd4893d9b88e3f894358a1a5b0b97f6d097eed74826a67110ed7a31462ecfd6e7d9e2f3453ad89f9a00ecbed2b14c563f50573c3d65bb1d3b782ddc6b13de489fb82e099f5ae3004875f560536e90c21f9fb9e7df9f5fec8301039c5485cd681146cd20101934a4d9acdd0e35af5eff65622396d835621bc24c6bc0cd6af5c3b9cf5cc29bfa191575d4eebcb963f45eb9a47fdced50455f9cd7fbac00d1d80f343fabce7c3df0bd3248c1169c315c211dab03dc8dda6ba363691011c7a7e134c631da50e4d743dfbd7bc0e72ffc385ae365e3146837ecdf685d68f364cecf3ee7b6bf39d37dc684b596a86946c7023dd60c4d6d064de8753741e70a3edfb39f87935f1f25a07138427c89b12696ea28cc7c3298a6dc0c65fb4d13e55967d15f7067db17be7249078755e83ff6cdc02540abf339ff71b33a4efb199fde5f92a2bc190e34754024e5adb8e42e88931acbcb61f2723c4ce5e58bf1452a2fbf19bf4c8783545ed221a4d20b48a62f211db7228e83b504fffb8657eab5c857df4bb6e234da684a3b173cab59d6fb5c64e57d8314e308ef53931ed601ba60a868b7b36feff9f56dae7e7e32cfaafcede90ce517ca5747de771005b648c5d5a77cc5cb0df0e0fcc5f9d786d2bbe1ea675e8086caf9c41e0d96cf13e3decc0a508eec761c8ccf1593375c3f25959c5b736f13e888ab6f35d5908b9b3745ce8502dd3706d719556ee64b5e8daa38762ec7af0663246805fe7590fd6f44868f9f21a83d0b5e32ffc646ae0fb8985f6acf859c4456dcd83736499a1af8625655ae75ceeccb394d9c5cb827bf98d70a5f01d9b43492cd7e0952cf7ed1cf0094d364e997892ad7fd4d7f5e07eb6a304c48f882f87c71965b2817758ca6d364876c5420dd37f0f9f22c77f02fc72b70f4f79b52544ab25c18c39e2e5254af9d68c51efad0a80814b9dce68ff0413d5673f45445a675be2653c254359bb362be2998e236bcc591e30b291a4c0a88d11a32a857fde1589c79599522c3013e1f0e066933093ed990181d52619407422c0fa613c7d1a404f8b7938f4b9695f73f97a59a82e161a2ca8f20394318e232a96459560a1365c7ea8a3de4abcdea70c05d7cd4960c8b83c1d0a9aaa53ec10cf8e874411a9154f43bc612a9d6ee21027f299fd91004c09cba564cc0ec1b329be1b1acd96649186e76bb637dfcce7e9b1a5a1db73a8967f41c54b45feeb8c33feaeab9f9d8f3bb6e341d9dcca3e7db20cfb8f93851d3b44bd27928b4e4e07b6f402564b9e6526d5d60017357aa5cb08f7376447873947ba46ab70beed5d3e6bd1ac7f64aca5ac5763b70801f9e521a72a8609905b78f3591cd9d667454abd6ce04715ab4fc0c3c0bd4830122400202345bb723937fb773cf5064b743cdf794f5a2f543441ab9680e89e614345a7e79fcac0134e0a8c7759993a807d2b02026ed516619492a0dd447c614980e33c52c128b4c6e98bc6637fc4d59147cae0e12c015c3c4b233187bc8d540bb2b984c89c94e416b6c7e8d5a3ee5744016b41103a2a4835179b91895bd9e66008d0c1e6da8989453cdce69ee2c0cc98be7f497a6f1ba8126261beb64df10616f8c8eca409f7a70e1eab21855bd1e365e9b28a39b4935c5bb5d5d2ec3bb1d3af6a5cc9a682ebdb39b0959bf7ce57a660453a66b4be89a55a6b0493e29a7d3510e0cf89ca3015962072231078961fdc1e368ae5405a12cf2dd0e9914ca1bed65ce9c5638d0074cf25706f430c74402550df2810f0b50a1036e49c7c9387c5aa6dfd4183872fe9582cbc70b9c210494fe2404e8a3b75de2491e7aa1bf81ddfa27c9327dbe4288824e9f684c6e8f4933e7a5a8ca82275cca52a208b227bf5627a254270b4db89c4698707b4882a995f1207c5ed37e624a712976bb279a3de6a9ed31e238a998da48a6384a5eea4d296fb940c91027f2e6daddd8fb3dc2e407e511162bfa37a59f3d794e7fd08fcc3d7ee4521f7df42f3ab5f6b5ade85fb84eb18eb16ffc0b2a20dd43d0bdd64f96d2a67fd20fce9f805e41ce774271c960382883a6146c5b6e544557f0b42e985a947245dfda4700e7a21fe1c99cf86ba17fc311ea9afb015e033226e5f0fa9381a1a5bfa8405d68d65b21db1e2dadea12c96ff24a7109dffbb45d73a40827bc86da83e5f751e28f3259b2eac3bd70b714fa55e238ae1beeab421fe5e45739c5a3a08f4108136b69fd46d21f7c3ca127ee29642faa374b2615fd41c11cbb07fddb182d52af424d9c8ed98c932a38751ad5c62bd36c37ac753ff4bb9fe0e7b7ac82177692bdf9d71eda60eec43f5bed6c30f2f6b2f4f31d7cc22e0068366011c2b0c377aec4c1ec4da26f998c48f4ede6fabae01189de5a4fd68844ba7844a29fca82c9d792b388443fb30cb27f9cc3f68aa6cdc3e60735e153da893327f8fdc90f9ab00e5a001a7224e0d67bd473921a4fc1d70a0d70a2caf7e53d976f58c511ee711b4663a8170b082bdfc83d0ad4d54a6e6b5e6288f773a6f469881ff5a6c57bd2bebea34dc54f2a25f3b9328614920a74a1e939815e60925381bec220c416065f53a00126053c579ab11408a2ca16096014df3399fdcc176da591a3a0aeab9f245fe40f40d4dc319933617c80d6067a4b93afacaa7e642b0ee631ac228b5a313a1f1bafea744e96d4c52a4918469c4c22577544225b7144225d2df050b6d28844ac8aa698ac5cf98d2e2f4874cdb29b00415677a7e9d0bd20b684d4251e255fa46a4f96e4d1579e9608a38cac4815c7ab5ed4371fcfcd43d4cb61ca301e65cea2e84790c87c0b5f26993beff4aeafe8a32e9d9e0ef744258c665f98b8c6f21349a68974161174883e79bdb794813433c96026a599e93fb666fac5456baa5f7ca3e75a276c34fb2fd0c5c50b0ce4924073ec6725615595df88a68026d0838dd4a50f05e47df19d4e5950ffcee1e3437b4f727122b0fd40ad7b6f1e954e25ae0f4cc427724ac5444e3df9c20324c055b8341ff7cd0f71ac3caf2cf12b3ad8ed9ef5656ebeac3f0afae95acb1b204b793b8653d4b89615b6a135c07068bbe6df599a80094d0de80f9cb013586f27ac3a61271e8634c0ad9ad5b5f3a0ba9ff9824b2ee6ae4eb5ccab9325abc4ff5227d79c8b13776d543c3be99f549b3597083772e8eff3ccef9153cdf618f6bebe4b34cfef5b55a78e791ac442dcfa2676e58d638b70adba47e3a36eda097f584b5e5530919b4a9df05c2db93cb9e660227352ca607808105351cf7d018f783d8d6ec95a90688835e05f92c73930b41b00efb751d338e162b3e2925d1706ba45e6cafc1e1067cd649f01fd228e91fd46059ca7a9fac362dc990a6393f264368356cc665459d0265a87c3d2242c1777711cad65996dcc10929b065118d80fe1c7b5b194f63630336b391d4439ab97aa3509ff603c0e3a886d1b41e09d5dba26aeba3eb65a1834af15484e89c5c1b347a94b2d1ba9954baea84c4ae152a1092316c70cdcf25b35238e09072caedcbc6e7ec2be2ee3b86cbcae9aefab38ae9e78bf2722917c419b67aca56f28d7af1bc361e7890877ea6c35a587497876cccbd5ba145ca8b77976556e42b5be0d5527b9c8b804f20be1fdd1c2c6362f2c9d2f0c08394c48227926d97d032b3ee39592e5d6566d82811c7e720449c65ebeb315d5b2dc14d91bd79676439a90ea6675088a946d1151e07583c164a176d3a969c31c50ddc09da2f4a6c2002e6684210e5f9537bb783ad06f4a30b873d28f0a9e8c7579984b9c3a5fa046f2698630cabd67093e7c296be486e0ad91c99bf00692894a53e37ab9ea1ba29683410546b70a325197831478b783978c70370ac726fe97bc28fe2a569d0ba739bdcd0a0edad529cacd9862c7e38faab132edb73b006b3a28fcc88aafcafc37ee3e511d5f9c8084119a731f8e5b9dbb89eedf1c3cba448f7bc2c9a38f44c63d3e903e2bddef63360127a6bca1d08caab96277fc8d15f8d9d24833e2ad1959f2f9ad7b7f30988286e7f329a5eec486df0ebdab1e8b8aab1ff8f62759dee51997fa0af451cd5e573ff06d6008f80a8487228e591c9f4a2773391d8e2038e4779aa969f4931b577d90c39c0e80d5cce3b8297cf85f13c9d95cf5e134fbb5ea5f4c4f7e6152e4e2263dd1359ed8369e08ce334d7f6c44fef70d3fb9e5dbe4e4dbed892560c9895af213132c2d3a595bfae8a414273cac24af4e3615cf9293d785e2d2788d155b72b22d37272bb6d505f5309cb093e8706c224300e9ca4fd492a913338fad46fd2fdc9aae1bae5a734a0f49e41a52cd9de8717c98660d9761debef4be0194d83a450f9719edf6aa319bdbe5693c01ebe8c2681c2cda8e05a1f482a843401e5d8248e129557a57341a1ddc0add8d25e1b11f02469820accdf3a1b1c7dd01d1184bfc0882bac3317696e29a5df3420118f72b60aa8f1721caf34147070e98a370ea46b6be60cf2369aac9e9022e862777341e3d739d50d63aa93ca3927f61b6eca920e05a339ab6ed5a2f607bd89a0e39d1ae83c236e24f621f3b0e10225d51cdd928f74b3393e6c18ee50a293231112f6ade070e57cd93398248afa8513db4160f6085842dab1375f9a747cb1cfa4fe72125eecae1910d9beb3a2080bad7b5a76378e099e50805389d816bc8a9bfc135f1125c9636c4ece11ec0232fe690bb1dd0080d8180fb8604f062e7c320bb7a077e2745c25069c5490c90f9d2cabb9f08e2e213e4fbd6d60ea98703d2a2f34e1c99e1b1cc0cb048764bbba97cfeb2e75d93659bd4a665cc643d394faad6a2090f2ba3272ccf6ab4bcb6a0273252c58818198f218c17ce1f5059342041f22c951eab13b235d82618d83dd2f57b1a198f6e9a177ab7e135dc9c7b7203bdd09caf8bb45a262c2905ffb000f1f1041e61d889fea9eb9ae224076b995cf28c1cf04ba9cb470e78a5ae57d5c13b07819430ab96b1988e69d89626f3561776cb2fc8ebd6a14e6252b2ed8705aa5f6362687b787d5d960581f5dc1685015abf9ec75ab53081a0bd3890ba5ae9c13b71c78a3c3b812576a2ab3bf9afa8a773f7a2ff3aa936eb7591f3ec44953a59f4a2ff4a22bcb7731ef4faf0f0f5ddd413d714e53d09126b75e87bd3b528f382673bd4c3970e80eac560e0c6e374e807f371dfd598d63adb3725840dd1801d232f21205e3660c2769b20bd3e7237de77b0b34fedc5e33bed86d427b8d9b0b0e5c24bafb600689c7020a569241d8c9f918fb7f61ff917198575cecd00b4cf1f8386f4cf1b85e3128effff0c46910b331a1de7f1bfcab6b866f25f7b472cbddbf3b76e28fe45474282f2f25f7904d65e95fbaf3c0ad746d7fdaf3c0495d5df778e81a6289d69c61ed78a1222d037dffc8fa8d29140df0c3111e8e50bb0c41668f8b551b3bec464f11c153bc90135d3abd9178e235d526e907b57c0fd907543d53e032447881608e0927965c96472079c2ccb0580a4dd80b49d651f44b125d7463f7f55ebe7afc7512ed61b15a5d7e4f62905bd6e524422dda0884479d652d1dba6c02fdb908844be1911895c23bc3effbdfb1c4405785342468cb28461c716bccb0081d8659ceb766d48b428e5aa6fb34498dc6194d3c73d9e6c7a51bffee4949e0272bcb7df8b16790128610b33f4f72374efcbc13b5be4be06d47d18a1079307de3d40dea8b79cd22511f4617fd4f6e0aa697bb027b796b35f10e051891b8ff446b3a5abddee3d699a25ac8920b3388ef2aa6fc7736b9e723bbece3861d1344ef8be942b6b98159145f23de7d9359bdfd24dc2c03061f1cc6d3030a427ebd037f8ae6d2afe335fe0c064387cf5dd62a13942d430767126b994ef3199f029262ad0f0e7f547d8915a5d2c8266bd1ebbdb560f0788f9e9ceb9e090d39f5653bc7fd2ee22df771d196e78be7e81473ce10feb521ef3a0b5901cc7ebf8ea6b73d45cbcbc3087cdc5cb17fab89110cbccd8ee7d623736a845e7e71a301394f2b1dfda7cec4df9ffea2cc8a651ea137fdc14c5344acb382e4f723fc41c8ff5c0a77a225a2dc78f5f6c80c1b9b0160635c046c7103c75f20e603012087d579a23b882e7128f60051f7e3c3f76d086965cf9a1e028cbefa2f64e55e69a12c17eac40b8579fbe56edd435b78d8ef9751d843eeb921fc5314fca7bc1e55b6b16bfdb3903f97db00d60550706f3cedd6a6f36ea399abceeffe7149fdf58f9f6f9ff5955fdf3ba1565f0cd4e3196e4eb82cd213061ffdf8651cb944d37c567c949d45f55fdc8583a54f4fcff20e4d1817606166807d69418fd6df779f79fbb17191eef564cc9fc01c1ef3597d59acf557ec777d52dbfd7f9f018ffdb79de9ae6dae8278a08a351644309b6c2eed61e15c628fec06ba0440ae3d0c4a9b9597197038232ddeeae6b6445a8b77c5bd910bc2d31bcac6dabe57494ef761060747c7a38fca7e894ef76a755a2780510177b24f158f4688924ee45e949d4cb7bd1284a598fca5e84e0119f44a9ebae01daf116a8ba18280d591c23d1a391d7d4eaaa98ae0a1357765e559ff883ead16814f5c4efdcafcf343abcf883a5905efc3e0aa96d84586fc3cad0339ba708970343c29168d013824482dd5d33d9bf964c64910df34babdd0e6d92a5e48b71c4a2d40687396e6c98b58f918d9546b7aef59c882317f78fd08c6fa115c61380ace882acf5907d85c94c0ff11093ad1eba3f607207b67c98dce819186072add35f6272451fad1c72121990c34fe53a22f6b7c1cf8ba65640e9b2bc07bf29fb00a07bd1740f8db8a5082d8104ba4be6531acdcba260eb8a476439b94bb23a45ef4548bbee486341c9936a59de4764a949c0c75ca4a74388385e6e14c84bc144e283f84e281769dda53c9890eb6cbde64c9a98eb16dd2f8d9cf3dd4d80f9071bb53b26d72432d1e2a31e9f0ca6892affba5e7758ec4e89a457135e63d9f6bca39d9ded999e6d4524609e0f07f87886a1c9b0df93fbe3d23c6f7149029b4a17a64f829ac86204bae8b362c47a3d2c276c1a18617a370e7095d07c9025823899688668aa29ec3953fa88d8edc096cc818aea61a74d3384ca386d25e1d8223ca5d120da1315166c7a1bd55027cd922357a5985265627fcd655914cd8903b8b056fd3c7b66d30ce8b02ffb901fbae67da95d46657bb09e90201c1be72b3bc3d770eae0e6e7da23f1c5a6ee6d6d6bb35e38f69e809e0dafadfdc23a0ecd21ba2c80021db72b38ee4a4438ed4ade137174a28e78004ea20a32473d75b8c554bdc5602c8dc1de7121036919a5a9a4342704189dd9dfb9b8016b33fbc833b2314f0fb92299ffa9b3cd6948ce2df4938da2d8b253576412d9fa2212d51faa1f78667e3fe4caff3019c2abc755af2f20ebb5b5ac8797f8a483f566a1126d9b6ea04db5e6d28c0104bb782a87ee72aeaf90a732f18c54fa1a3996478fe246df2f4f648060044fdc9277096fde932ccbbe13d9fbbc525c70996e130616fa119339ebf387351319cfa27499c8b2e0e365920b17d1d05c102b52cf49ba267e4ed2193153915e133f27e9d51e936ede009a5a94e298f3c09e88b6dfc09c2cec36a957d2ed444d49645ccac1d2b1b9dbe3d8be73fc03517b5434f51bf74d55e47b58000ff49e7cd617fe37987c7a26d1e457741e5250e501b1e49726a9e9a6da12246f504bb9a7963c1d60c46ecd69fe0c5d12d566a55727e0ea74f01b87e51e9a83ae8903431503e7096b01ef49d9f549c3ca1d905cf99e08ec08ae4f5d04d71bd71118e8b7f413f9a829aaaf31f9f0dfa34e37e11c40702b137cd210adcb5a08b71847d71ba54a11a50b90f65913857a537f89b00da6d0d8f001adab4f23a8e829aa57953737059796ee9d750be53e270c83c5da96ce92527c8232e48ecefcb4901b57f2a3aebf31ddab385e218ec9368eb70826c2de53b6d7261c335a1b032897da35c9cbf6a65cbb1977561d37c41c1d6618d2ec90fa26a77771ec895110a391cd6ed7b1a280e40f77bde845fd7c5e8ac8aea70f5debc90c4e443eb44d0a748bd2c8bc3e11ec2ebf0157cbc8d0d93fd10fe43bbdc38798fcfaac8517ba4371f2e866228ddc04457b2348f1eb33a3c24e183800396faea5ce7343561016ef81671011ac52f9fc76abb98e60496fc18fc02ee93b2af442bea917f2dd58afaa28bdd3cc48bd34aea8a817cd2d3c7ce4059f2bf21e22b99a99f8e012ef1bab5e3457bda9b4e13176adef5a68784422d3ece3db03b685bf57483d56faa769802ed06a93de40470e42bb711e9a1ba75346791bc7b7960eb7fe06b54492bc8fe3eb38be42a743904ede92f7e49a5c4d0323b37bb803e318c6f894d29b3846268d46c172b290fc34ef45f6028d4607b2922c8ed127fa0984d919b6275fd8832bbe2abb24ac8f6ec00e83989d5ca1d36bbc276eb6d29cf83579bdd79dca6d978e9efffade700631c4faeebcdd771c04df75647ce8ca78d3e90378dfbecb672427591c7f228b38ce6154166419c7d1f54d3fea2dc93a8eedcaea47bd3559c5b15970fda8b7d2d3b5c5e640f8b5b5e74dffd3d301b1cb358d0ac3a7b65718f80dfeda759e44e4d704840274457e4dcce0d39fc8af89bbb8e85b9dce1fbc5c3ed35df5e73ba85f1e3d816125197b234afdf59f20e941025d5c0c301168808f887c5e5ad7c36fc0f310bd1c607de8a097df60b2faef8b80fc89b43157ebbc3e913663a00bd20d59fc0377a9911739aeab31bce602ede78aaf3a6faa79fba65a3c250e22e0493e5a1dccff3b5dffc880a1af4004f4f26b2b02bac0e48e3e6679c5ae0b9e8160a44a679a7ebef94786d4556446b441c42c255f806f2fbfe342fdc0b740c3f8437c69467df5d400bbda5b63ad6bd6e7b1adb779087f79f48b5cdc768efe3661edf15f9147fdb57463f56fee9be95c8fdb92f881cc896b43ba684d564504c9e3b8ee8d232c6f0e26eebd6e5adbacf0ce1a73dd90ab67aa8657350de8ee79060273ddf27ab0f69ab75beb59d8d66b7f66d7fe8cdcd1753dd93774ed6ffe6bba06a0757245d7c9af9b4ae58b2db9a5ebc41c1ee43d5d076be15e3fb9bdf6a0bfe79a423e37267f4d26e6a2edf4f05e180f6ffbb9c85fa4c7b7a1fb8c5e0f778d857007a5fd9dd749bceafb9abced7eb748985f629fc628a79fea81bab5f1f76f77bb5b9cbe8d63b4a26f933993d99f39cbb8fcd666ec2454db0b9055e9d6aebc7a021f5aebeb3d41826a56737237a5a7b7444cf45da43b38a5fac978a5df4ce9e9e94a67aa1f6fec238ced945edb4733c639cfa229bd0246887cc6e41ed6ecd5c19a8dc855ebfeb2730451839c73fb5502f88b6b7295e8454eafe122b93aaee5bcf86a68d59c5f3935e7572f8c66efe22ba3db43175fbd0c623214b5b6ac3f24823adde620e50d9457303c2f3893088f7a3d7529461e9569a2aceb47c5159293c1d44860f7fb227405d365a92445c39abee08a53d648bce18ae68d9425ab68d948a9b8a215a955a4c5132332f8fab8f2d889806b54f591e8f747385f2089f8444c756794874f173570fc131f7c81938fdbd57559049f95c7f3bf18622bbf269159d8117e5ec98baf5f1eef9aebd66c9631c566331fb909293c1693438dded825a5d19255cb689a8a64c5d64ff4f49b41f7e78deffa41e887dd4ea21a84df08db14e5bd28723cea20029caae139a7b43f3c1f8ca3fe204ad5735564015e03ec93da4aca9e41804df55cd3a4a0b6ee7acc37fe47d4772fbeb6b4dcd01273c3e7ebefcc91d722ddc0d2895d43880520223c79b10ac98b752010991952637b406a980fb4ae1057f9510ac389479c49d25dcde25d63b4245b207d702ddbe8b858ae8f9b3169c677741dc7680b5cda6ea75b54e495d2dcdbb54db32fa97e1761b235ee547d79dd8736f76ff5b547efc836c9337a6d01fbaccfc4bb0cdd41111079588ba84a9fff8d7c99c97765cf51e1e01aeec6d7f515aed9f7546018b58852bab5dc26dafa49a257e345da1ffa0f56308ee672c1565918122b0d21d03a8ed78863623fad6fd3385ea13bc231b989e31bf81508873ab8c3599ba6dbb6a53fb707d4f5551cbbc511a85d1b975c4042ef7f9785d4efdb3f7f6ce0b01863b02c6136d053e803c42a7861fdcf3e6dd77cfffc9d56913c8c4b624840d141d583916176b893aaf62edaae79f414d39eb7a725eb66752ab28963b0b5b32669472dd8dc7b2b6037fe5473d29e3863116a8ce1fe2767ee9f8196e491d540120c769df39075ed940ac3dc1991703d774f0a856b2adb7fb0b6da6c8bc1ea599e6afe018936c252b5ce85e032c21828cdeaf81a58768a59d66d31cb8acc4816c7332377025e4a1f97166a89ccbbc0963eda463c0b55a96970c513a3e537c0a64f5bfbc94e6bbf67ac9e411b8169d0a664ad7d8fbe00fe1f1bcc56e62b642ca736b4fcc73636d3db7a1372ee19dc943ff0eddbf25e9079f7d60e38719f57cfffa2c3ce736e587f41e7ee061ea1cd6e5720850192712de18e7221ee30d98c7952a972ad372833f2480481c020328c5f3ec8548ce318cdcded377737a415fe1393c3b600060eebe303cdebdba83f24737b13f94e4de9a99e8f2f9d51767dcec9a3bb3916c48f46ea2ff4f61d169d98e9bbe5db38461dfd5f80dd1626993bd936adb5cc16fcb5982f4bbb9c37ffc08afbde1608588feb5c64c6dabde3a54e2793a951b8bb40eeb06cbd51a58141e9364cecc07be2e3d084df83ec52b54fb951666cba6d02ecc0964f09984fba96bfde464452bdf0461df68b76811119c712ec565d5ca309276a8af71d746bd54d3f9365687fb0272bc8f825394d014734abc8badea1ab71b429a2740534ab2766b79e18d674ee1de5b0eec14abfdeb9d7dd3b37148d798908897405edcdec75f4a531d1ce36732e71178cca29df63723ac493e1b4760028bd61f7e93030d42f0fa9dffbee770b3cba8f637447ef02a2976ce97dd07941efdb542a295a69f25dd652afd44d33f3f5b9cde39d3eb8f58803c3e4d19d8b3c4391a23e0b11349a1cd0dbd354940af973154724472af9fb86cbad998152be2e0a2430d6dbd257d6cc81a2c4d19d009be5a0e9180066f48794d2f2a085152d7bdecca77a0561d8c58d5ac631aaa8deb19703f8297d700b4ce4a49aeec9a7d68ef3d6d86816c706608ebc8fe3f706547e3f0a87b3cb4e3f5fa087da96fed68fa9b5c939dae98ed1f4e330023be74539df5408ef7d9df474e8100edfd20d52e4c16ff2ea50aedea1f8f9b4278719b38e8c8f7aafa47781042ee4f7b698b4d6632a76bb25692dc8b4d8ed96fbae4faedb84f0b5be5fdcad7270bd8eaafb5ccd9708b81f8e09dc2bf871ce2a1ebd96b2bc07a3ccb47efeeb3a4a15fd8cfa433cba969cdd8eea77c66633c80c470164f7b92df59c9ac1ddabee3bec938518a9b84ae4f5778e27e7980433362057804daa2fd2b7c40ceb1e5b2d98bed956cfbad94ed1f1e826bbdda98361f746f1ed94e604984bf2aba1be254f87a4a4a7c39192db47b3b31e6fb83a59b3aacaeff8ffcbdebf3eb7715c09c3f8f7fd2b46fd8b69201c81a42ccbf6c8307e4a68c776cc64df959f4de58190799a982631e2a087990b6548e096ee727c89edc437adfdc456a490122559376b2dcb945cf520f9a02f14b8ae7a09c4552cd4f397bc754ef7dc800144d9f2c6c9f203307d3de7744ff7e9d33d7dce892979e4b78ccec32b566c5e8ea5db79cc99dfe9445676a961607704b79532c463c0d75cd5cdaaa1eb95aa3dc7fa14db329a8d9b77ed5e76033bebe654c6191a2293b66d311a5b779da1a12d766086ddc901c1687aaf4c673ddf61b069d9b9c546fb5219d8c0e83a1489eebb2b2ce384a6ea7ac9f454060de131bd39072de90938790b86684f1f78aaa59a054773b3f3a9b96844264528889b944f6f6d216c99e6ec647d48e62acd8624027be9534c9650a924c6482126144f8394b853593f4c9d9f57cb48323005ca855508c60d6206be6c22f97f2a3c9f0c25777498f96860c968cb984af331d737098128698d55c8e4dd431f8d1e92675f9c7801832e81f96772539a43244912d52da3300a55dc35ccc24814c58496c37c56f586394c1f23c3d4eeaa09d260726481bd95d16866af58963d80a7eb41bb68563533d9f9f96ec58ed815bc7221131e50659c3c53cd841ce4c4091af71d79dba15e2744b5f3b8a09a91b394aa4bb28531f68836a6f2b8cf1b33fb43bb5e1f45511ddd11a734d4cb6635c81e55a50e9ca39aaa7daf135f2fa7ebcc9db00ddf62c020d18af50cac1cd4e4ccc97b39dcb62413a56697180b6686671e79640ca50a13bfaa6fcb66bb74e3e21a4311be02d30e04dc9d4127a7a07282d3931eca42a5d979554d116f77a65c31c60bc5f3992cf2579ee7f53a67fb9460f79121b152249b8931bd1ee5b0d09439cf8b20f091e0fc9edf97061acbed6393b3b43cf3cfb6559b322dab5ecfb09cc1661d56eeb2b839afb2dc2cf52a6ebe5852a36318ac1044f2c55256aee839b14685ba354c25964df106d181b865d9515849526ec6b09c353f3f0098b971402600ea69697e4c183aecff0d6e546e219f48fb3ea23064a5e892317ac5c0adea753929bd7a5dcece7a7d0bcd78e81431c3b3056f4bde1b1ae25bf25c734228b0920cd27c7c642c9bc1cf522a99a0b3833e2ef57be7d252a9dc91eeec5642ccc4065abd9eb8113f88ae6d8f3e26bf55eed82ebf55eed821bf55ee784c7eabdcf1f87fa76f958f3f2a7be489e0ebed589f4f7c91509561d902ecc4357abf6aa444586b8a7da21b1a624f6d1d1b1a620f8de5f3a34343ecc9fc13a3a38f8d3df1c4b647b73fb67df48927067ef9dc2ea87f0c954a47f6e4ea7b8a998256fc55714fa9f4c37aa6481e2e6533052d53d8b2672c5bfcd59e3da5fa9e3db9ec0f0b7bc6b27b4a23aa9d1ff9d59e7d3ffcc148dfaf9ae2c36c6855762c50dc480ecd2d99a0695b6081232e7e8e959148f8093fce309c5f2c9badd73376a01358af6f31a3b028e80d0db19802af3778de3d3e880dc45e83242ffea594a22396c83f189628917cdee97dc97de4fd38071efc3d395139bde7e37e6403ebe9d8500b76d8a1c0e565ad7ccc9ad884c9f14684c25e2a3334c8a5d865dcd7183b1540ea5598c26dbeb51a1434d89cc2f89ce9d81c042f65ca76b0d0946f590a9a6155aacc75e934532837146a18284a504ba9306b76cab7947dc224ab9b23c29bd001210e17630d28a9467e7467264eaa17eada8e3ce48e4ca71d5afb456378b8841baf1cc713c6e7b8fc04a0fcab695bf282b130ca6ee5a61c5a65ee8bf63fdbb3f931d59adfd0cc14e97d8daf4739b02cc50d1f8756d8f3e83325328e3e687c3eb22d3e302b118fcaa1109737632965bb3a6bf6f340e6664c71eae165e763753c7b8671f7453b1055e26c30ccfc1736fdf44bb3f92969004118e387a44c9164f6ec01fe40549229eed933922b650bc83eb43d7bb4cc9e3dfb86b318ce64f0b1674fae0e4c65cf9e4cb6941dceeed993cd16ea03b333c5e11f164ad9423db367cf0fb35952caedb54d9e21759255c934490a84890b23aa03d28c991f55edfca8eae609518dbcd419b7ccaae931a75e272364a77487c5f334c75e6265e03272352ae739ac3f53795e1c2be1c57094a86142b9c3f94031d2562bb0265686cb816ae254d61dce4f15c74ad1f8aee659d12ea9b3795edc5652f53c2f3e52526b795edc5e52e7f2bcf868499dcef3e28e923a99e7c5c74a3b5d10fb854f29378be40be95b7cb7de929f0d58637568a8ba259f9f5567f26498e4f3f9e97a9dfc1003ea0b7952e84ada8714d4eb86fa52be56afcfed94480ec08cd1f47add1c1e5667c595e559dc4e84dda5ed9346fba8a5bda03a6c96514f9b5167a9e399d4d22654ea7acc31dd196dcb96497556786ed25e2af89997b2da6481e47e483452fc1519b632fbb2c3a4345c20f3d9f9c06a88fd248b9def61f7fa93aee764ec2c5ab88f3ac3994fd5e167bc6c1bec7ffccb7371c5fc91e29e91c2ffaf946018115f7f880c0b633b3fb60d16b8ab915ea2c67664936a7af3d998970ab7fb7a52a48c1a7ae3923aa9a1e4438787b3bde6208ab4840e3768293eb5c8af32058d0c436e4ef6e430c9fe80a86558d37a37989e4a236a4c18ec2e887a07e6552b9fa1c243ddacc33caf56b0b5b0a7c27bd0aa9f1fdde947a4fa81331323cf8a7e296e61203c9230e42451a7f26ed1408e2bacf7a2cc37858b90910b464cf68091932345f8e7377262946577966dee99dc67f369ee321e7efaa559bc57a19087870596e18789e2d9ca2453e461d9c3d979143ba6b262e533726270a6fadfe80f90db9e222aaacaa40fe13233e798a1fcaf87879fdffdf39fc9cb09e6542d33951d26ff8be0e1357e9d0e7dd225db1cb46ce7fd1332c914569df56a0f67e783d75ac98feeac3c19e0da598177644e65ca792b3355ac94b2ea165ef44b42222aa7bb62897052cbeac15b857da9480dc6dcc3e49e7d510efa62388f9d512904af5633225e9b1d2ecf0b4b4248b2910b9845219ab753f179fbe066ad6665a6eeaf73be49c7908787cbc30f9387b123821e081aad40da7c684a673eed9378cce2c848a6981bfe6121ffab2dda0f0ecc67b24590c347f6ec296547a655b267cf0fc6e21e73fc7e30f25bb41fec1981c534ad9ad1e5a37486d5dcbca7b2a844b9fb8cc565783234c70a8468c424f3bd477b4ec6cb0a7ff1f53a57bd7cb1940d3d13515865b96046429ac5b3e92df93ccf093f19c8b74677ba112772034ee4e759d12da5da3af1b3f670decaf83179720ae20187512b7982ecd48ff152b2d3132b8a9f557dc930868632956159766ab8324cb23f2459d51ece57f27e38ab0b7ec0c80a53687904ca158816540b92202d8a91f97921075819de258164d5d9bc2d8589add58095e4f3f96a684d0eb63df9cc6c212836aa4605353b3b2c7057e199ff016046aacd02f901d1e8d0d02cbeaf4c218f65ea3fc812d5c824561b326cabe50ccfa28418bed54ad7a164cacb55e51b55139ea004dc42fae50dd7f69d32cbe1a4ca8cecc9c06eb3901d994676cab3a11fabfce84ee7c9d091a9333c9cf5e2b28a138829a8521b492942233a1054b68c0592ca96b1505441f5904056190b4515343e10aead4660ef46f5b21aecea0add727a4469b194b6d84b91a59281651cabc8b6c770c4df02be4427927061d8446f4562edb11e1d880228e2f32c260685fb6d2e76a6fadfec3d513a10b34686e67bcca98c577442c3d4100e360c727f0049f903a6e6a8d8cf32533b301fde786150093fabd0a0ae4ad528ccb32acd59f92da351da7c68eca19a672acf95f39eca735d9f2dd0c4bf8def2bf476d673bae8a51d2d3af3c24952a253d25c4d8a6dfed09078c6cd920d0df5c3d85b36f8024bc479351974181a1d6b93a0da965141aed77bf43236249cb84203b2eae343911528985bdb21b757021d1aea3a404fde0077ba36b9e26a354cd59c9371fa91eea8449ea3f71ce64a2f64f359751b12d42d58b2900550e1ca8ee78c8ca352357ed1261c4b5e691eaffc205d2a8d646307fa88a73908eafa5c9076b01c7c03483b759e8f4c8f0457e884e7779eb3075df5b9a7eb3d0f5feb2cac823cc3736e7e2c3b9f29262d3478e17100eb9ddbb16f05996df7bac007afcf0b3ee950797b2f611e2db9c319ddc99ff442258c605976f25e9197763ab9e81de7e3917a1d38702eee570e6636c141404caea0afe45ce0830e6facf59b0c0ec828f8cd31b90f4bfa6d3e309f349428ec913969f6c858f6805964a5bc536425f428146fc5962df1a86a76b5614b3241cd444d32eb7533e6c6163d2a9ac9269a792e97729079e798e38a90e197598cc0f8975847bec57a9dcf6755134d99851ef512f8101d52934c2f2462920567a54145359129bfc549ef6aa3f95e0cfd19ac89cdc30b49a6fcac9fa1793793491c79c6beb6c88989afd1940e47766ee9616e0fd0dba434fa9b959674549e27965d9637844d919671f234db8fad03b171b6161ff249278ac9b11f395b8cc6bc64884ee25539bdafca0c5e55e0e2ab62ba9eedd4b0afa56161dfad74b1203b28268411c165e4b507dc29f42d1fec246255a6ed043f8dca4edbc2e89328f4231a77bb982c077999a8e833e23661bfd2323bac800d0c4382f1a3c5ae6493e2919e42d3d2a5cdb49d9285a4c7c22945029293d158c1f9703887b62af34ccdf07cf1c00cab694417ee7b5e0847dc5c976d36792f25189279363f5fca0a2790916b4f8e573ced0c083e2a9bcf64b3b1ccd8702e9a397bd265ce1c8cb5127a048dbbf854938b73dc19686c04a6ac83282dcf675537e3c411f734ae68e6846bf352c0d8a799175bfdc6995b76cc59cf760603caaa4efc78dd89ad557e972ceca1dc501820038a1ee75d8defee9a5867cc67359035f25c65f3bd5766605d0e6623939fbc12af33d7d51a9c2de87a09afe56478a4db9d61e18b479394fe24f4cf646c9e869f08e457aee005b32c8823d19b8f7f23e9fae4745ffe8cc54173dcab71211ed10e4053e28b2dcfee4c31bb96faf685748ca7dd792730c437a86486677353a6e53127d511e2bd8618575936c6abf16b91eaa4bb9893c30a8d2367633e98d12e6ef492767274a82906795c698b67a2525101d5995759cee7d18b755436bf530a93ff62fb1e73767bb6c35235332c90536459b7c6cbcf8a51f70bd3abf4af6400f9a5f8a79fbc93e1991df754f2f8a7911ffe93d82f6c152eb1ff2953ce2abb4d6e384cd96d3b15dffda7ff3f8831dc65cac4732ffed30f47125b86d437a8d2fc3d04e2f0b253ac44e087f139f7e9f0ed7519f30d0f9f59ba649070eead94859c30c9a46368659fe95542efcbd1e6afdbee368bdfc989f5b5e7d4504a4960497e0717aecde45125a193657184cc8a8f96f2c46044258f927c3ebdf37e46abcccdb06c71b414018de6f081795588e863a3289c7b45a29361812a37e5d8d51fcb03d30ccf96f21ccfd146c7b63db2fdd11d8f3dfe04d93210ab97edeb78d413a2b33cb4205d1ffe9d481a87e61a6c6aba62ee9db1aadc9efdb5e37a041df97950315d3c07c93c0fb3544daf1ff516329e44dfc3347562a445f7ae021ae7e733d942a24e9781d4e86ba2ab5a791864aa9f1fdbe9f7b24bfc62121437d0d77b78612fe4957e299ba5818b7703b60556d128e579d128e14070b20770664647a6e5fce8cef2932196f2f070d60c00b8c57249c0801080c167f449cdeaf9a42dbf8ca2a7bf60081f48589c07d123983a72da441732950a75e5d709c6957082c4bfc7a5d48f5f7dbc27043798c8f97cec2668702211bb1bcad451ec332c69d6eb5b787668a8b7068f4151bbabc3948d965d753418229e98cde1365f743848d9c942c902624f0105e6e7b77431069e4f591023720a515033a371caf3e63c1292563bdead857844b363233d6fc320174a4daa9f2f965423bf654c2de7b78ec52fe6660f184343d6d05006732d39de0a7ede0ad6643fab4125d50fbfd25632d9c459b1fcf8166845b899a9ec4e23bf6534c6a5fc50bad829668b95f791aa9dc3c3e527bd9d596b68c82a964b39c7e799ec4e4418d59ab7c4560769ecd27471f2f97cbc1382f79fb877cbc48881b276bdbe0536e669759c0424b51b04be115806d2068b131f2cbd43c5890f151828785b28ecc4aa142641fa9ff279e04f123d0be6bda8dc6c267b609ee6387bc97bb18f8bfbf07b7437abda3a86bdd09dfcd458363aeb19dbc97b599c5856f8d6b1b871655edae98b9d256014f467d5b12df9f0add5eb46bdee662ad979b51af7a2e3f31eff9c533e9726e1a22d2db63d3bafd29c677a16cb9349c7dee73287a8342783f2a898cfc12a4873d4999ec313f9dc1c73d028302151c415856c9e9f85b246686e15e378b71f035353f81437e8136544d22ecb0a525d4c6655d3c3c0acc366194fc295693fe7e5242c2b04d1bbb6164b40286c2bbbed27f7b0d859c72e33d70d0a2ba660b2ae3f0b3c1e39ac4a73e57d468a7de411827915c3743686048bf641e157a93b9372437a34e54bc496e4697be28a9b581960b764b10ca153443d50b5b9577135f23ce53e754ca63fc3261d119aa0d4f1f45db38e69e913ccd49ff7b9c9f4e77dcb64fa2e7fda773ddfd577b3598f552799a3ff7cc6b3e1f9337b4e248c331703a138a293ac2af0edaed88e8748019f3e21f0045800076000e000164002b404a07d8ccd18b4e66a64b7cd0d3a0de4e273dce42e3c7f61331118b7b9c11c08fdab5383c76eea613c159e246db7cd01224003480004aa43ddd46a1326874afa0454d17f61ebe3b6feaf8ebe9b265bcf1cd33059f59fa9e3326d64ae5ae7d5115335dd7f9ed07a87eac8af78f50723e16dccf9b07abfaf55ecc9b16d055e207355a2917f9d201a2f100ee19f4d9079d5b2f9f438f5d833b653a59e76e0851735f2ecb35ab54ad4175edc2dc39aeb12f5058d8c8f8f4c4c8cfcf297bffc25515f80b832313131a10409c91425008319866118aad29b3dafc2b8e30675b4032eadb2715ad348f15ff1ad2976b5a4bcf0225181f98a8c89c6a70e4ba4ff82b119015e2906e9167565f99fc0a477947886a8507c8152b7a424eb01014f5b2ed3c80b645e7598859ee6613dd20e4cf9a811446cdb511e72893a4b5d4f230fb9ca34b3186c285c8d3ccc95594a1dc5653330bc5ca2baae461e326209552c5535b9ef7b44ad56311ba21e236a05337ddf216aa582393e6c330d4c86b1a91a06261b9411754280a26897746242408218236a0df3f652ea10b556c32c8cccab06adfd7c6a0226dccf1dc3e4d492c36e8f71604cdd369f713d5637587644b54576ca1054d870662c9fcfb37afd71f1604fe5b78d1688eb31a2c1ee2a3b8f73403b60d8fbb431d5b06bdaf6f9f9ec7c8667c6d276c2fdf993dc728d69a47d8aa8db34d2fe23511fd148fb3451b76ba47d86a88f6aa4fd27a2eed0487b81a88f69a4bd48d4c735d23e4bd42734d23e47d4518db43f26b06f3b00703432465480a4916d10384d34f20804ce108d6c87c09f88461e85c002d1c80e082c128d3c0681b344238f43e01cd1c81310f89868e89220f54baf708934aa618715c6b46df8dca6b187c646479fca3f8217cc47479fcc8f8d161e0952c7c60adbb547e7559a3fe06a45d23add3edc3eaab48fb58f2badf3adc5f6f1f62bad734425514469bfdc5a6c5d6c5d82f46294b104cf78c9a5f62bede3a4a4c290689d875a988fb118e464bca456bbc9b8d43edc7ea57d58901146bac908324232c284381997da875b8bad85f66112c643d8c97849ad741372adb5d8fa5c902183dd4488e49004198d132092165b4b241e3fd7152ba94617f2f62bed97dbc7600c6020440c684592442a227194a7dbafb416b1ee438684d37eb5b5188f93923ad1ddda4fdb275a57a0151848201449412b31924018d685982c1b8f91925aeb46f7b9a4510492e8302940879124bacf7170c916ca02610b25e4d2bc6a0ebc1f21157bb25299d6c97859d5cad3222b15211c7a488169e5a2fea955e430dd4a59d58a5d6437464ce113cdcee3ab39de5a6cbf82bdd13ed43a8bdd26a3c75a8bad2bad6bd0a8d390d37ea57d54a6c36b095ee6f178e4a88cb44eb76eb6aeb53e13d5afb5ceb696dac70008e6b58fb496da2fcb68fb78fbe5f6a128f752fb95d635192df58a654e2496d90979c98e093dadc5f6d1d66978413a06ffd43a8f741e17d1f3eda3ad4598d5ad53ba2c7aa5751607be4cf804de61eb9a885c681f83612f22d89641b25180378633812f812bc413e2e80f1f85a8d6451d21eaad2b7aeb13bd75416f5d4b2d8dabd9d32fd1b2a76d19bd4fe966e4ff1e7c6302febeb184932ae074c977adebf5f6b1917ee21d691f435b2f1b94eb48eb3ad1a04eba1c05af4eb2a6d6e7ede3ad4b8a7c99c8d0ba85abd6cdd62598a183cbc605aebe052309ac75ba7dac75ad3fc84824bb07c88d086738c22ec5e433e062adcb98e06a6686b8240b32990c552150854018aa40a00281306440c08040189a80c00404c2500d02350804a17915b6a2f8d2539546a30bb8ed53ed3fb64fb7cfb4ffd45e682fb6cfb6cfb53fee732557e1f21438acdd7a6d645a252ae2b35d6f4a0cf5c118f7187da07bddd05500de7a2d29d1ed40896e6cdb3713e97a79db56637f6cd7d9ba8072c7a1f62b3afcb50f010fd603beacb74e8b94f6515df064e02228c6600032406681722fb796f43817d6e33c588f73603dc17ffbee4dbf5fa47d4f18ffa2c4db87f12f7e3bc67fba7511171509151712848330b0fe035f08bedd3677c3bbdc24773edafecd3db9b3e0cdfd4b7631d2f48269bcb97fc90d81dc086f8609d38f339368272277ccf1cd485523f12d81dc34c7770d158d4432bbdc3ac7857a432381a82e77d091fc3da1914032969be84854ae01dcf671802a77d11045297889c439e2e8b7d9e3a630c4997d31861889ab7a5c588df39d40500df84e24a2ea9180dabaaab76eb63e05cef3696ba97dbc0fdf91e9975a1744b03f3bfc3e113688192efd0d98e1d277c10cff2ba4e04de6b7c9fcbe09f3fba6e26074c23786077cdbf07cef113cdedb8ea77b8fe2e1de0e3cdb7b0c8ff61ec793bd27f0606f14cff51ef4c99bb379f2b679f2f60f7ef296ead13eaee71c3f79e3e2e4cd29b25291f73b79a3834edeccbfd393b7ad562d12c6cc8404647e5ff6609b876f9b876fdfefc3371a1ebed1e0f08d86876f34387ca3e1e11b0d0edf6878f84683c3371a1ebed1e0f08d86876ff4fe0edffe118ecfaa7473b7b8b95bdcdc2d6eee16ff0e768bdf8efbfd1ddd0749e3d4eeb7e3d4011fec66897a24fe3ed80f1edf4f123785eeef2ff7fede08dc9b8bc4dfdd22f18ffabd5c1c90ee7860f2bec7373f976fae1aff48abc6263bff0764e70ffc0af85693974d14f065e8f130f4d868941805b76964abc80e02db4683d0a361e8118d6c6d2cf3726319f71061786c743416db81c5ff7c0537115b7d5ef6a144187c240aee80e09fafc8c2b148ca96207ef1a946f91c75f42936e7504baf52c7d3e9acc32058d3cd9acfe1cfd2e9dcaf7dd7d35dc6bd1a9d74747b463cb98d0f83cdd0c901fa3535ca0105c007f01238c046d0001740023880d58785fe88eea78e8eff0a73bc3b275d536f9cb873d2f9cb47774ef2c93b2715fad25f3ea2d53f5f4926eb3f6e2c57e3b922aeffe50f227f10ebfc11ddafff68ffd37ae3c4ae970454fdc7bb5e4208a27e7fbef8a3fdfa8fb022d6d37fbc0b6a61a507cf1d731313b9ff021d99497fbab1cc159752af9b17ba749256ba72a4dacbf49d93d69d935ca9dc3939e5dd391968c0446523f6673496f99d93bc4773668635160782d808bb7bc8555c9b3b34a64873e7e4dcdc9d931632bc49d3e188467129376b774e46aa3441bc8aa514e3cec95f9bbfc604c1f8a2848a280184856c4f440c91031d18b23c11991039b416b23b08d644aa69858cceb47af73ad3ac7ce764ddbd73b272e7a45307784663797f5d0cf5be7ba0915f65ba8a667f30723fea5ddb0b0431134d6c922401187dac4002e0442302fcbd9580b66604c3aa0317adc34f30c13a260293eba31f248df44666ed8643de274db5b087c64677466a445e9197ea75af885fdfb7caf053f9b1d1d102705fee5b56294599e8b16fb692844abd5ec244a34a03c30955823e4ebd02593dd6bcbafa6ef38bd5779bb79a97899648583d42345209cb36af352f373f6d7e16968d274059364c14329c71f2c30c557a5c0d301c6a5e6fde5c3dd2bcd5fcb479598f47575f4d44017b3cf7c8c0c2300f7a1aa027c87f3511ed69dcc0c230917adaac275afc6a22dad31f030be36c8458f37af3d6ea6b7af3d3e6add57775cc7f0bf2615636979bd7570fadbeb17a5c8f8200298c342faffe41ccd5e6b5e6ede6a7124984edf6ea1fc87c9197e2dcdf79686c349f1f1b1a82c0e896fcd8588116474b1a449fca6f13e94fe6b70f0d65b0c49363a3f5ba23ee8d6c1bcd166871aca4d1e2b65276be7b9d9f64d13a7f406e39c9eaa1d5c3ab47c2c6bea137bf58fdedeae1e665a0115eeae5e6cde665ecfb9bd0c737570f362f637290b47a1893fe80b5574facbebe7ab0793502f66ef3cb20f21fd08db2201491a0307a1382006af5d5d513504ea0fb62f55d486e5e6e7e895d8624dd6a5e47586f24d64dd7a3dca096cd594fab5e93ad12c334d6a29ef6c8d6c806bc966ccf6bf1f6bc26db13e5452d9209296dea6951d49ecb5029dea2f9a4cc14b449b645b6246c41487948b3a436a4535218d215d212d2902e67856305ba5cf6e917abbfd5b101b12441cee5d53fac1e6ede465a6e2257c020728c13cdcbabc7032abe5c7d63f5308e88e3c84d568f34af346f431bfbbed604016fdc27013076fa1180e32a20a079394180e94a996b644f5129149ba7578facfea1a4143205adb92cb849f38bd523abbfad0317926fe94b485efd6db6a014f6949402482723f3ddb224b04a68c42d201adec2ea417879c781347c29e96707284cde67dd07253e2acd6bb91411b2792da7de4b8e8c954917269ba780bbc20b55a08393e264f33df162e15d86d9919cd83cbd7a42bcf3445d94167b6d20149ba7038951969e8f84cb5871e9a4140d5318b496c90a0fa5ca28fa1a551e118f47c563871641579223a30b19ba2e55c644b56de2b1bd4fed57bb099ddf9068dbfc1207fd67493571643bcbab4750bcc5290f9cf08bd5d79a3757df55ba5670cdc3555cadc00ffe128b222e929e9a58087161f4d470c1c3c5cfeb11519bb79ab7574facbe5a4712050378b58e8bec1b759c9c304d0f362f0f1257538adfbfc81a501248ad718202d15520020122866a23e2ebeabb7568d6b5e6e5544155f5a2f1251ddf4e481fb6867c8e8f8fcbd03ef9fc05d102fa1f1a1bdd02f280083c52afa3f89acf8f6d8b828f1440f8c5b6c0f35d31f2c8780465986c050a49977f5c85cd3f3081b7470c998e1d37acbe81e31c3af586be7ab479bd7975f56098d05c8600ac54977140df687e8169cdcff5d5df366f4195df36bf8082b0625f5b3d12ac66d7810b36af3797011ce4df6ede8445214ab8d5bc1dcfff14e74298d0ffe402093e284995044af206912689928448f4126d9fd30d9c9f9f464bdded2801e0c35277552e74220a6b002e86b8d05d5f3ddcbcbafa0a74dfea2b50f84b48c2e0eaa1d5575297badef5e9ba58656ec33a83d82416894142951037b45a5d8dad5687ef67b58a2d56f1b5eabe4e3a061f740c589ade86be583da434aff62c4ca77151ba9ec88a9fc806e9b1c5ea77d87bb058c533bfd9ea135b767ea7346f343f6b2e376f802402f210bce1600191a8d2171fb990f5077563f58d2e401b5c89560f35bf8061145b89702ec350be119c2da31477b379bbf905fc2756a2e68df0d8a53bb98a8bcf0d14b5602807a72fb1c41b7802836cfb5078fe22a250412c69d7833d1fd4fd1466138916b6e675b9b049c832096a870b9de8a5f05c26967863232b05b0923a5051078a614dbb016be38d3a34a4cf2987b46dffd0d8a82a0e34c2130da172809cfd7af32ad1d0f17210bf4534fed4d8e8d0107f72dba8581da093503fc11385ae427c5b184776a83d96475fa28f47c596213904f0ddad16d5d86af13f29dfe7d7d80cb56cfd19b6cf7782c804754cd7c4e0ae7da6635a223c71e7037cfe4f7fdf9d0fb80c5a41a5ffe18952bbef7ce0513ee93b3e46efbc3de37b77de0ee33fb3f7c572c7991bc5fa2f13ff130d48ed03c28022a004a800f48017712226003fc084d44fa963ea3ff3ee7cc0ef7cc0f517a9433daaef72e824d57759b46aba547fdeaf527db739693ae62066fe53ea2020000210a03ed485aafd19f74fa9fe334f7f1170eabb2cfd795fdf6d7e9b8d45f2ab1df2dea2675aaca48c2b4597f2529c75f7cb568ad69d0f9c3b1f94523eec6db44e3a9fff91a904c5925c7eb7c97bb3e25cdeb079223fe2f63ff5b9df9315afeaddf9a07ae703ce92003678803d73e76d7ee7ed80b35265f2ce07ca43ae320969ae465ccaa7a962d0aaf813ac5458823295870ce4a15534fcadcc308b71c143650ae4573422a80af22b510ae41b1a81ce0e728d200e79131a815912e44d0471c8ab216d41564d461f32be8b4f769dc545fc0cd7593c8b1fda3a8be7f0235b6771093fe47516cfe3a7b5cee205fc4ad759bc889ff53a8b9fe087b6cee225bcaed7595c90f7f500a2b8b00730c58d3d802aaeec015c71670f208b4b7b005bdcda03e8e2da1ec017f7f60083b8b80738d26fee4dc62f5c74163eec2cdcee2c9ced2c1eea2c7e84e1cb9dc5837a67e17c67f14467e14267f1754c8a652f7ca977163e09cabede59f877bdb3f046676149965df8b2b370158b2c9ed001c3e2a1cec2d93074156b42cef1cec27b9d851b58ed231d432702301f61f8130c5fe82c5cd63b0bc73a0bef0479af86a9673b0b177bcb9e422a6e7465f467b4f18e881a3fb09d035a28dbd6dda4ee3644d42728eec3c3b16b2f60a90b822801ff5524324afaa4b3701251bc877d1d655c40e216bb928e74163e0f5ec25267e14c1782ffc04aef04af369e01c44765072d1a21e911c5dd8446f4f525ab9b9a8888fe0bcfbd30a7a33db2415469abd62ea5a255ab0aa083f1f1915cc044b2e6ba899cfbbc81a22a29d0d3b7212945d3d72a1caa1f762f54c1e4bc8d750f42474038756fa276ad5458f14c5795d84757912fb601eafd2c5238122ec30c89cea224a1908673e41de05330e7de5182d9f70efe9fc537792adc05f4c9ad02903744f54f707c8b51fe51b82de849afc4aabc1f80026619ee147ad28d589505012ddc3ac4522692c4dcee2cdc08f710b1945aacd885cec207301b834d4494b2f13b899dc5c5cee2d9cee2b9cee25267f17c67f14267f16267f193cee2a5cee2c23d6e273ec0ab883d477e389b6f7716ced47154cb0156871e83c9ba84ff97eb019b8cf265b59110e0b3b6ef68a95eb7c650b71afda18d665512d625b067191a624fe5b7d7eba40b6590f9e4a39897404fe466676c9bb6a1cbc1db0b31a41a7b726c1412a2e606278add24680cf6623dd8b518b40776913326142d0bdd85ceb2505ee82c0bed85ceb2505fe82c0bfd85ceb25060e82c0b0d86ceb25061e82c0b1d86ce72a0c40010a550b41ca831005429142d078a0c00590a45cb812a03409742d172a0cc0018a450b4dc4f9d61d28e0b45b73eeadcbed6597eb573eb5dfc7fab73eb2806deeedc5ad67bb20f776efda673eb6ae7d68228945a62a173ebd3ceadf7fb9578b773eb0f00a34ff6e9ceedb7fbe5bdd5b97d15811f1e00fc2d2cf1fb0125fed8b9fdbbceed2b50b42f2268c8a703601cdb60f6610c5f1d4c72bc74a27f0748719b6feeefe7cdc5245b28f851e7d6c758ea37416f4297ebc9bc04aeaebcf76374bd85d13ff6163addb9fd59487c6ff63bd8d97f0c1af26957b678930b30a8b0495dd90b9ddb673ab76e866fabb3fcea40a9b8a7a9ddcdebdba49466a4909e42ee464914c2f3f790c0fe2277b7a0fdcdc5eb7b0ad5fd4469e803d15f7fc48e39da23568bc686c3fcd6ef7b6e35f64cfa77904b1c96606fbf87bd2326d4fba51ed9fbd6a1b04f7b05ef41a0dfefdc7a339c4adf4438bf751ade554c328777f97680eab490cf6f9d0e5829501809e350f6cd60741cef2cbf2e24f144f2fb5d1c2892c893c584447eeb78c085febd736b39608ef1da8170de5352c8e7c11beaa917c8e9b10242544f593cc24a81d41e2b230477e891e59ee281f48eb9f723ba2f9fea2cffb1b37cbab37ca6b3fca7cef2426779b1b37cb6b37caeb37c2fc5a2ef54748701f6ef4177bedfb9b55cc7857359aeb1907ab0736ba1ded3ef9f766e1dad076bd872307d205aef05fa4d24fc1e205da27e1a4149813f8db86f22f6f75212c8ff695d156e0452090cb603a9b46969b81ed8eea0f76e6a744f4021c3a92f457c29eafd3475a0aa9139a24ee2bfa191fd2474d41b3a99f58a2c57ae5067979719cd960a4c4b260c0b7788c27fda58763ec3b21a9bcf1cc0236a9ffb1ee3f258b96aee17d3db60736c7f056f55aa2ce50a64cc8435f909e373ccd17ffc70651f9b7398a34f30dfd95fd19f9e7498a54f50a64fb0fd1536c7b8fe13db670ed39fb65d4fffc93ec6a76dcbd69f85a4715fff2973f6fbfd65db9f302e70007c008ea09f9e630015400244002661f57326e25bfa0b3e0f889c604ef9e10a73f45f52db479a98a3efa686eda46b2004de43222800026a23faddd418e03dc4d75f80e2b286fe937dddee4336aeb35029b252b5aaec928bbe886aae8b2969cb7e912a73e6fe52caf2df93a3c48027e4800125d3058267cdfde69c62d06e31e017147adda6fb2b89ccc48720dafd01689c951f8eca777ffd99a52ef3c2dc8dacd974eb24e33c79b3ebe1fd36aed33e57389b64bea1b86cdae606e3dc6e7c1e2ed7ccb470ce5435e23bca5c3887e4452fa8ce629e3f306c60b29c58e1ad2fdf5170d20537be7c4799b46cba1f57c0383790b71842d6c262eeb1bca79e28b08cf7d0d86856f3607acb1b0e63891b0edb13d7ec9e88dd5d92287b2e2f0d13650e73e6e7efed6c8436aed4e798b7316f2305421b578846e698f7001d8cf4d109c823dbdd297b90cb5b62ae1b5edf7286f3922a97cdf8dca0e2c33dabd71f118fedf15c46341932e545b06a08c92b90bdcce054b881a144c3280bbcc2c8e2d514cc418554c4b2ba169412702a5d6829575cea499cf63444c2a295b4c642e1f48652a4dda55ed044c3480160504e34f80fd04c4ca4b56c2f7359b95fcb301390895080af564b81346dc3c0ea030933a18f64a9f9de55cb8dad5a7bd11f963e25bc61851a7aa6a557e95e7dafcf4d7daf6f993a454758ba2bdc605154d1b3e1c9d10d167574839531d07fe9da4b790e30e5004d0ed040686f0ed0c09f95033439409203f839009e03c0b914a0c9c5215ad93833f6326b2fd567ed2038a3fb9eedd019dd754c1820fa9f5f67de9ce3d1197d96c1bfeb4fda5efa1a2469e7ccc801c41c80ca01a01c42c901841c00c8f55ff138d3676dddf774d7814afa2cd35dff9b6ae9f5b9b8d67d732dd7bbc4e506df5debc94e5fcc609cbb8adfa3a0e77b0e8d276ffcfe59704dcc2f2945f9ca20e8c72e983d9228245e6377991dc932f04abb8bdce39e9a1fdc49f3832b69d1b2bbd7fff3ebcc091af88d2ed80568661dfb2fa7ac2e64dd6d108558d012767f2d11b5cd9ef66c4420d84f63c2c02c747570af6e56380243960f3280977ead1bf861b8b24bb617aeecc896fce02ef73d56d33db96819250f1939f25ddd0b2bc78c181d88eb884ca3240cec9121776c2cea7452b047731a18570df9a36de974da460609fcd161ba5df67c780afee830dd4037810e4bccfb4017c6608ac064304522339822f0190f0b8c98604ec313f1e213511b0f0be4065342fcc6c301050653624428a974445a29e3457bbc54c8ec71b3c3c00e46bad486a699e0e1c8ba656fe4929d91d32932712f079d103271f77e98b861fa55c6a7996e9896e57357374c589af0c9ca0e83c05edb87c71ce38648705d3ae9b1415cdc98cee98695d30d2fa71be59c6eeccde90650e70ee0dec6b46e58bae1e9465937f6eac69c6ea4dfaffb16cc3bf574b268b0e0029b65c9d49423cbb0186c4c2ce6962473b79295d41e9eafdc1b808525951e28694b438a620c9df34d852a643833b6259f47ce58b17dc7cd640bc4622ed1884549769848a5996035498164b06ae3e3fb04d5475d47b0c48d830ad680b4f6554ce73e884a5b350250cc0a98f52c755deadd07d88d3075e361fa6bbf7131c6d9a768c0d67dee8afd5ddcbba3885671b786e276d2b5a34bc4068f2a15dba1e116af623bcc0d3779268ddc3b9a903e21c061507a7764aeede209a8cf15ca6be19127e5357703be1d9d3aaf7bf5c6d93aedab16239d120bf1d89162738170a23d12a649e119760d8db324d09dde47b6e0f11ef90506eaf50ccf134ab22a1be60ff86221b198c1b8deb8c96d479ffccb49b69f71ddf02719d767e6fefc81c738488ece5cf46465dd756619d7f7374efde564e3a20e7f7b19d72dd3f5ec596ae8b38eed9a9c9513cc8a232a4484780009a2d0fffcfa1c009f43b802aa8009100158028e932f8efcca62c688a98efc0aa061002062c0f027f10990319001f07549fb0f4480d36c9857ae87ed0a426526b25d67169f481286902c0c59a68bcf59c71e314b2acd8ffc2a835d59c7aeaccbaeac6357d66557a6a10a42016575ecdcbaecdcbaecdc7ad0b9f5a073eb16331017a2023c88a52e9b3b570640028c000220a07676c48cbbce8f1d0e3c358627ca4343635bf2fff66f193632369af0928f434a75c4c8a67db6f5d1a6b85e770a64b6712a90dd88168fd16ab0d774bbead0e10c9015ecf76be17e9f64353a4cbaab2776ffc136de91413fd8b4db7eefee3f890d8bd582f202970017a24aecf82b7237ecc820a0c240882ab6eb4fa2c262b5a0bc4025c085a88cae7e3418eef539abf69e0824811b08d9e08d8b0230c477068a790998d53f7fe0362e96a1c92214029f98e8d749b26054e72f97645789687880d085cbb1678806ff218e5aad0f0ec79e8116584cbe048b79b594e38472ec38c14b088b5cc6fe854db397341acfeb4a425628d2c2f96b318353318b69d764c627a772521bfe24a7e1d4c627a7f731c55d6796d39e898e4f4ec309efa74c7d11106c2ad6b8dee67c5306119792350745ca89448a0bf892498993903f7f60317dd6e610685cd41b373de6346ee9aef79793e21cc49b733c36a3cf364ec1c3b5ef7d0ea2cfda0047773da80e3575d7bed7d9c7e00aff85e71c29c71caa25eae404903ea71e9cb9ca5cf7a1c7fec645cfa1f1f4fb3ff59853c47b322598aefd7d582c100fe7528f45e640a08097ea27c06c8f1708de76a2c4a33142c4284864ef8865e3e808e0270e47e6604685fd707f8723017ce0f196ed6fac37b070e3dce03e0920a6774c57eb05c45b691077f442ecea89fb3f56018aa4fc6d83d06dab55f8c15f057ef067c00ffe26e0077f35f8d534fb011c9c3c20c76ee5b9d86172f3e6576fad1e444dd1133a9aaf38f8d55bab87f4e697ab47565fd685a99440aff93fcf7ff5deeac1d5c3cde5e6757df5c8eae1afded2fff3fcea110100159dbf7aab794b5ffd6df34bd441feea5af3a68ed6495e46cb0357fb9f340b42240983d027110bedea7494fdd4aaafaebeba7a70f510aa98a3e2f4ea118070181eab87a38457570f63c71c8c927edbbc2583cd9b5fbdf79fe751293801e5758c5e0fa22f7ff516aa881f16090395ad912e4987c48e18252e095bc21ca06a7d15a148180104595f5f7db9abee7deaef6d9d98d81af172710401afa2f9c5eab1e60df985b5b87aa4f9f9576fad1efbeabde6ad92325edcda5cfeeabdd597bf7aaf2439fefd574c352ff2cdc1f451f3fea87979f50da8f3c28b4a11157d8fa1d6fcc1e6f55242e9fbbc3015d1a760c467bf7a578c910110e51dafff5c6ade583ddcbcbe7a4872b4be906585e6fb38196f7df5dea00a1b6074e99f3b4722503f183173ec255646211355b76f116d44747b320f6639daf2c2de41f3c6c1176ab43af446f30b985342e7fb4b98cf5b61ee28ff791eed2fdc1473303cd4e84eae06b5622ade295adf78d2210b46ad88d4bf6349460451ccd0500f5c46272248725085272151422d2c243a253c1391d17beb808b019a580264da7777821ef328459eb339dde7e83faeec63538eede813749fe3e15518d3b2f4096aea13ac02d5f59fd8ced414e39c4ee9bbf6b99e3ec10c537fb666386c4a7f91962bfb9861e8ff52a1d353b5015f169fb339220344f24e0ca200f00017c002540489e0fab0f3f19a6128bb7d4bc7c00b96cf45483640849953ae3047449ea3be08c83b33020035f66de0e20c4007822798a3039c0ddd9c81eed32798fedcb7bb38f35d9942deb8b1cf67996198fb145aed16aa7f39653bb5447afc824b901ebb1063d84c892727eecf98fb9857a15361818d886a55b6afeb424c8d2b8d4f851dcf5ab95233cc69859996490deac76fc39854ea40fbdc37a2035311ab6884ee8b6ec360d8d08861ee73b86dc44e4a651c2fa2c54e4a4d714e3a69edab19468d875c61caaa7166181b382c9d62469d9abc4ea7eaa655af19469d1975363dd0260421a16dcba7b68d16bcfcf65171dfe051f9dc219f8fcb27da0acab302996206d1083539d1d853a34343192f5f244425748aa8c4b4884a6a8611feb3e4df54cf3f9b4e06ef158760a9c84a59950d7b0fecb4b69bed1974f0650a7703b72998bc4dc182db142cb84dc106dfa6004c31a3c7880110007c002e8d1ecf01b43e0ccf6ddce0069dd6ab141f9ee9b8f0b4393e3c5b44a71c060fab71c331faf04e4915c003600009a00008a88e75fb7336b77143af52dd33759beb9ead4f3950e101da9cbbd73141cf3941d1c895928705c5192b37d8de83a918745ac1624996662a55db99663c9927f8d46ce34f72cf196646bccd54a61b7f7294448e14d8e4c7fda21be56e84b7d9d52467734d8371646c538d3fc93361e6c43e040509558d302fed539007b9158d30ae786695850c0e2282c5310e1d1371383acd90bd31ae541b7fe2306703268751a85643748d3f39219f83f0df6ee3db7da92e3a7f3f50d58a84999c2913e27e9a8a3127880a37b35860b78717e78202322a5cc132932b2fd2699959c57009baacc88609c41851831097de5ca1ce84cda917d612b112f427d6c3b8ac29c25cba6685bacfd38a1356c548097a1b6b425456c42027a5f0cab557a0455e2a8e96347c8e957a4e858d987558f2bce08bcf48be38d138e3ecd777215f0441ed79e08bcf035fdc25f8e2ee902ffe5cf2c59f057c719cedbf075f7c9ef21ca0ca457872bd6872802407f073003c0780efe782c26e9b738f4eeb3012e9b43e6e32ee62dcf4bc7d76b9a28fdb9c3307d39e719809cfddb40af18172a19dd327ec9c3e6ee6f40933a78fdb39fd1927a7efa6032e28ecb6f5095b1f37f509531fb7f5679cef442cfc960cb5fb82d900365a61bec714bf2a76b9ffa3e2746d3c638c55b2d564d96e9131991b31d769e67acce9ae1d63b116f3f67b8c87b7a8e2e5faf157332e39ced94ef0911da6db2ca58eb25b70541eb2d82841dea68244c13b38092e5661414f9633342fb85fe50517abbc0775a36a933ffed7f0c7ad4055c4221b67805ffc57f1c8c6994d26b9c9243799e42693fc9e33c97265538efc462c7283dc6e93376ef2c6ef076f14c78d45b2feeefa85f5c3eb4beb27d617d68fac9f232a597f65fdc2fad1f5cbeb4792c9bf595f5c3fb27e76fdbdf525889e58bfb8fe0e963ab7feba48facdfa4578bcbb7e7efdf0fa65115c5a7f7d7d61fdc4fa5951e7d2fa6fd717d6df5cbfbcfe7b51e7cdf50b08e6f7eb17d67fb37e79fd282294183e593f8e5997e2c987d73f597fb9b7f45beb6711583cb9a47268e389f5c5f557d7cfae9f58bfbcfedafa02943eb87e69fd3722084d3cbc7e79fdb7d83e4c3ababeb4fe6a143cb2be8824bfb2beb0fe9a68c9c1f5a5f5e398b524a29fac1f5e3fbb7e70fdac40dc7b7439d7efe296173128dec559789273040dd103f2f580783d20590f08d60312f580b86f71be37f21d3bf95dffcdfaf1fafa6fd65fe9efe81772efcbd52fc0249aa897ceb8d67f83636261fdd5f5a5ee33441cedafae2fc033f5d348f2e41006380eafb7d72ff49c1daebfb2be88055e5b5f5a7f79fd6cf8c977636788ebafad5f583fb27e1167ce89f5b331862587e059180201e75a7f73fd2ca61fc6d10e63e093f563eb17803cc1c48c8794ee4278e088fd01a3f8f741e96a327529b02a8ba4bc854d86f12e4b577a7396023bb3d0c7eb2faf2fac1f0c4a1bf1d437817ef11506c675546a2248094ad43431630fe21497a56ac9d425618b7683e63bbe893fdf542fbd8f7d2bc7f4dd0c835921c3f8995d35398e8ca72d8dac9c5cb9b2726be5cbbbc7562edc3db4f2f9ca97770feb2b0b2bd757aede3dd49dfc2144ee1e0da26fdd3d78f7d0caa5952f62f941f0e4ca97775f5fb9958c7e11d57c7de51a40bf7be4ee5191747ae5fadd83778fae5c5c5946d4b2e4472b37ef1ebdfbdb78d2ff5ef9b2bbd4db2bd7576e26135304b99f306ea6b4fb0a36e2cbbbc792ed8e257f0891bb4783a868f7e72b5fc4f257de14c19358f7569023a25f44358f61bb5f97ed3e16b5fbba245e9614edfe4d3c09dadd554ab43b9198d2ee741b2aac4084410d92cf7bb559664f29ded0d0c8b8749de2c52c6e8caa5ecee4067be9e75319b4c54db2d96c012f04eadd5d5b64394cca644b5abc447cd86da44c97f29a785ff20dc93722df8488bd12f67dd8ebb2bf651fcb3e95fd28fbaecfa7b5957fbf7b0c5ff195959b2b9f60d9bbc76070de3db472455f39039d7df7e8ca67faca9995eb778fca69f199bef2310c427c9f18813174e5ee117847778f01a0d32b1756aeae5c5db902af7fd02e405020310b8c9f4b6c00f8facab2840f30afac5cedbf4300480807a1200c8480f5b17672c8dc6b3d7c6a6cacc00b64657965996864e5c3950f89c60be4ee4111ff78e54332df77e15d41cb3c19364c4836e7d92fd8fb98f363eab24cb6385aea59c98b00adb4275758f9b0b027571831d30d8968713322da60232283a48d10509f2b11323f5aff9fb6e212c0cae9954f569657aec33b570ecc770b01c0f404734a64c6372b417a240aac2caedc58b97ef7b012cfdae805dde8f22b8c3605b9d6972b9f090e049402030c3638124197050dacfad9caadf4ca9f7555eeb94e1b0a4a296a5daa23d4e3f4a8378baca4d2bc3734e4054a73f2c02193e179276bc2fe9a9781533d23e1d5eba4684fee65652f4c2ac108fb39a6e5661ddbb381b9e53c7b37f2b25c995a568667b343431927efe4e8ecac55cb78d9acea840b3239304f54fad0d8b67c7eac4090557f463411f8fcee6158a7d385abbb4756ae273fd1ca95e2160a53b80e5c5bb9a2ac7c2af9c9f5bb87eebeb6f2855c02ae84dbc2fe05aa1a59b9b8720b80c8d4bbaf85df74c3821750b05a595eb9b47245b9fb5b1891e1b75d8c5ebf2baebcc9222bcb82b585df796502169b0850de3d0ce99f8860f8dd572661d15aace8dd1348fb2d5c8c830fc161e2e72b57eefd4578e5b3c48675e5b3efec2e34e35b77ffa4e7b8aa169c57d5f409ea942be181554d7fdee74c7fdeb76a290756e59e03ab7b5d08791e9d844c0a2721b34e800110007c000e60012440eb6b188a1bb4a64fd8f878d1672e3c7fc10c2e422f567c0703cf38263c7653cf770c5a1b7cdb8d034080069000065487ba032fbb4dd8fa8bbefe0ba6bf58493994fa7e5e6b7bd136684de97560fda25db51dc7dea7f47ab09617db7abc55ff128f97e2e0625bb817a8eb059cf37ebc549b5d37dbe8b430f5449529b64f7159d9e6465c0f58c6ab5042dadf49dcfe604213987205b86d4c11d87784223055607444773f6a420f982a3878a39b1f389471f653a5c66874ef03221b510576bd3a37ea8e51f72af7f472b4336188e9dffe2d833e8f46c646b305e255020746c4f502df45841b425fd82b10c7201a947a70169b523809f53739c9df9293fced04c24d6eb2c94d1e343789dbb7d9e426df2b6e024c60ebc4c4d6f1f19817b371b5c773994c4ae52769053619ca7f7b86f2a0b8c7f4e426f7d8dcd56cb28dff266ce33b9443ccde6be19b9ce41f80936c32924d46f25fcb48ac4d46f28fc848fedb89249b9ce3bbdcb9f0fd9b6ce27b7aeeb1798aba2974fc5d091d768fa6bf1da8fadba8eb6f0b5d7f88ecb551dbdf16c6c175fa978bc04fec40e3dfb185c6bf6307f6c16da9f1df656575e31aff7fb9b851957fc3ac52fee7dfd8bae5730329877fe6cc38ccb0f53f5fa77fb968d8ba30ab6dd8ba4b27a9976ee02fb0aa6d56011642424002088080da032c6b9bbae5eb55aa571954d1e798ee7e0bd1a3fb2475bcb8952a0613669c1207aa293969a248d1a268efa94fd9deab4674b6b427e7edc95547ccbeb79766f1ce70e4972a798369037789e5dda9d99c97abe68846fe39f7626e2287f7a76890b64ba4f5b1bc621b26fdcb45652feb668813b633dd9d13e787417ac40f9f359913af11e386b3d435b94703861894d808439cb55d2fc61229f70087bc4e2c4c12d87bbb6c14404235b0329be4879055d148c576ecb8a56a483634e221bb95bc10227b85ed159bc3b88ff1428a806a30110190648510d97b6f564813b750e803b3c324adb430ce12be558455fe5ac2b7cab41df85689ccf29b5dbe5538828ad8cc24b0995ac466a66dc165ca92cb98e55eabd08c0b1bd0534cd880ae52079f74d291f11a3ef7fa5c3e2d913f2d8c48bb4cd87bb6cb1e3eb93d276c4a9be5d0c633e3ccb1ebc255825daf5267bf5d473709f52aadd97564be7564be75f48d60d781f59ae8f9a02e3d23d4b93d27530cb32c438cb33db902408647953af0a0938e88d5e0b1d7e7e26161deb40d0f97cdc2c32e7bf0e0f61c3c0cb3bc2757c88e98bdab49dc090f36463a994086bcdf0ebd4cd4ba56126c8c1e3526ee6842a6848de9bb94c4869713bbcb3bb275626262abbcbbeb640b3c71c7361199ff86b67dbfabf736d804ef77f352bf9d755ec3ae9a7c1a5761e6a2fc000fb371ce29db1673f5bd3e9b63ae3e6732070ab88d5393d418bc0edbd51c80933c0060c1d467390092430883dc5cd8c1626cea7b7d7dce840adfb59f8b62b0b0c69d5dbcd0372fcd6d51ff721b745251b16b0a552c9aea6ec1251ad998878a2a6d5ca19cde17a87b78a8d818a041fe296accd930411bf64e410d7bc34037b2dab3f8f6a742cb2c724c61a3670a58dd13be296442cc3b45f78adfdf3f058dfc53342ec61c54342ed27e1e2a58e4a1a271255af921b2814dd0ffb99958faffcfcd07ac32b9b9f6ffddadfd5b0d7b73f9df5cfeff5197fffb3af5bb5f1120fd247040c94d3160530cd8140336c580efa118e06f9e026c8a01ff1dc580898991f1f14d3160530cd81403e262c0288a013b1eb87139572b926ae33a6791fb668c9b814b4095a0692999eb9112746f910d871efed5280cb955ad481acb15e9d11fc03596675c691dba049d8fe6df82dc28ec494b7658d9f33987ba9ecf0d85b2691ac0810428581160643919344c69ec0e61cc36ceb0b9b022c6a45dbb19df57e85ec8c2500cfc8cefc7acdb414c950143dab543d094ba1ed4099e585744220b7732330c7abd16eeb695826760e94e73ee69fb8e7989cfcdc2f2dd1c0b4ccb37ce84b6e5d117b5bed717d6e5fb9a97efb62fefb9f734304fb9c0184397860b11c53e3c7be9ee913532db58ae507c453a73abd415418f99ae298233b655950538b3f6caa0c398c1748bfae2ed0e58fbfe597f5a7f51ffa9fe33fd5ff417fa2f72fd8b7d2f3deebfd838c3a9dafdadf659bb5a656af777dae2f38d33ce74d5e42c66d329fa5cfbb4690575625f6a9f6656578d8d30ea8770ba39d4f56257573c3a4d5d13f8b5d7df43bc17b0d960f27e8fccd0f5ccc3b81eaeef78d4714c8beab6e7527882c4f6924d753a6b3a226e526f3fd5d90c3539d5fdfd1e16a393fe7ecfa7bae960d4771c93ea743f75a0ea24e3864ffb4f44dff1728030d8d8cd9ae8713d0748728002367b7e0e80e700740e20431abb1f4b94e634e506a33a753d66b10ae3220812a90ced9f8144dbf560c9c580e9508bea16757c3e49073b8e34a7733a852d289297d3ede99c6e5b39dd720648a3e6b44e2d1d36a1fb757b5ab72ddd4a7722f12d0c5376df1a817871c6166264d161bca48c1769dcd5584a6e3f7762038a5a01eaade3c2bf7bbcbc4469a5a6871002ffec495cf132e90c659afa0e308122f3284f78229b342bb4272b61632ec888780af5f6dba5ae1cc958a8ef380cc8eaaabc41f632491dc70f988be1338b46774050ea5326a9b7df9fe91606a38b203e94480a833eca82b663c83c290b4282705631ed739123991424a02858312d3ac93c2672a54018240a99d00972a55008090fc269c5b7ba1c72604c235f5f21ea368d7c7d95a88f68e4eb6b44ddae91af3f25eaa31af9fa3a517768e4ebff20ea631af9fa33a23eae91af6f10f5098d7cfd39514735f2f565d8a3e40f001c8d8c11152069641b04ae118d3c02814f8946b643e03ad1c8a310f80fa2911d10f88c68e43108dc201a791c029f138d3c0181cb4423a364be87f14ec55596fffa7e6bb17dbcfdf2d7afb54fe8ed43ed975b5744f0586bb175a5754d6ffd51a61dd5dbc7da27f4bfbedf7eb9b5d03e2e0358b8b5d87eb9b5a4b7aeb56fb7965a8bed63adb3ad2b7a6bf1afe75a4b18040c51faa5d6b520d29f377f9f088b78f9d7affdf5dcff3df85aebd3f6f1d6594070a9fd7214b9d63e11cffcebf1f60924364868df6e1f6f5d48d4bfd03ed6fa1c02326510a7ffdb20c7f5e2ebd7f4d625bd754dffeb71bd7d5b6f5dd05b9ffe5d3848ebba48d83edc3adb3eaab4165b5795d68df689d6957aeb6cebf3d6a578525fcba4232965c5691edbc8fd42b455da4b01d1482fdc3e0b0c0ecf2bed97a1dcb5d662ebf3568f39d3f6a1d695d6a5d6624a81f88dc3646eb4e8b42e7dfd5a2a866e0770eddb5fbfd6fab4d40d69232b50eb52eb4af262b600862bd05f8fb78f435f9c87f90fb3582c42515c311ec27508a683d2bad43efcf56bedc3504c2e46f1a44a504cd218ae4a51821114c146878b53109d90d9c07700a25c9d82682d86a07d345c9e6474c386498b5f5fdefaf5e7a59169359352901759693e9bfd76764cf7187da07bddd063164fefb1beb68f25d6d7f6b1f802bbe35bd94895df5eb86d5954a9cdb8a63243f1dfb6aa4c814d6ce38c32679a90e4fbaea9b8cc849d77e30c576668c560332ee54a0d038d3391cf48053fc4140560a21228c1894ab00e06000104040e08cd99a6ccf37d0c78c5c74aaa577c1cfe9e2895a2132227c35447a5aa294e88ec3c213ba501402aecfe119748eb7d8a592055dff76895727140c44d4eb4204d2479a6f0954ddc44bd5871598cca72d5047893fbbe27a062300457ad12cdcea717a164e7a4c3e88c28598903f402ac5e8cb44a45c24ae626c1187130b38d33e61cf4ad16042528c390a07a4b409918bc8938bc19df9fa1f86a34197603e2262624c4de329e9724b1160739e7dba2ec9c6f87c06a35092c9e0b60e665453b9ffeede7c9b1d182538079acc174d3d87c86a96676982864d8ee39a29a3263129a47ab5573c6f7f50ab344a04aa965ba98e4573c4cf26c7fc686c00c731b674469938b10b330c7add5b08e65cf5001c57128a6ecb57dcb9ff1fdfec218d2200890d8056a8157209518011de24244128b40d1cf53a2cfb9cf3d8aa039c590679a2e3c67983b63ce99e6cc8c8d3e13216d96397b45298bfa1818e837d197fe0f6798eed9fa2cd3ad010e1bee593a5da2c9c5249a5cb59aeb7792658b2dab4793df61ba9255a53863d9b0d3ccf58838838b5a1a19cf0518610f2bca2b414232a5bb72b4ebed5b285d2af11a67384c505e9285931249c5b7ab8c73da9d1b9726c28c481261a6c5121063fbdf39d3acca63b56212f0c60fd81a675caf7126e1b1d1f384cb4607440e47adc20ffe2af0833f037ef037013ff8abc1afa639df9f83b5a95e7daab8e7543c6d6e5c0c0eb7efc773eabd0fb6bbf5a8cc019e53fb1d66233f30e8b4efe8d5c6294e45d06bdc7265a23923b32b8d6b326dca695c9c9ede2bcb5aac364d1d0c0f660d1c31206c008b0011168018cc251aa7a09a0e6cb1710dddaab2bfa191885c9a1255da546dbcdecf956ae375f4a56aa6fa52edeb47b5f1ba32bdb7712add93aadbb8d8b8ec7a7e29f4c3baf139ea77bb530558949bd2a3eaa9f0035b4257c994fe544df9bdd2f39d2e9faaa6f4a96a72c56b5cac9a9157d5c6c52a956e554df4ab0a7523cfaa90372141c3b06c5c86fcd0bd2aa698d2bfaae9794ae354ccc3eaa9bfa587d51e06e12419c49cc91c7daa716ece8180601173e27a0ccc5f1326b06959ccd3a9ddf822e411e2728c2d2fc7c8bb318d73e5c1776310614ea0cb85c872495cb918a6c495aac6b9f2fd1cbda34666b9c25023d3443d4a53af32a7ec30c3d4f732df30037d4c538751690c94250c3379038439390092031839a83fe8fe474c25732f4bd1c8fcdb9fa06cd842c42e7fafed3bc6ff3d78b2e29b4ae3e36e5632ceaad4e4898c381b09d293ca8e4a3c39e1699e393c9ebf11ee6150eec6f887692935253ce3feb5cfac5ffbcc950adfac5b039c05771ed8202570c8ae30df89fc32632cbcf6b0d78ef18fbd42435c5e7bb0e3dee76d33baf610f99ea77c235ae0cca9a76a7fab5e64775e6e3bc7c3cd8d5003cfb302610ede2209adca071b2b7cfe3ff2393e3e2e43463f108c64c5fe689f2cf98b94920e1325e7bf3345f22927698e7393b5fde3b0b61e15f44dd6f60fcfdad80678db60d6f59db1b007c6af2a9bfcea1f925ff51cfd6cf2ab4d7ef5b7e3570f5823662fe581468ce3e5743a1b728d5021c69f0e1462664296c1dc1e8598f0c8c8f1eef7c8a8979fd692cc94b37dd4315da1f92182554a052264a9d46480ac06d86af204cc7785f647f71998199c819903cfc01e9cea473f46ea726672bd6a536e3071500ecf7d36e518f06c3ecd1c0c4e398c19bacb99cd071e839939bd6ae774cfcce9fbe069e7f42927a7bbf620afef261a2d33f55fd8fa8bc2b371baf2c4b7e2a120f17df73cb4b2d766866257bb7967d5a60e4fa4c77961901eb1cebdbeeb31478967c883b0c6a7534ee38bf02268587723fcd3664ef224ccaae1193531b932cbc4dd723be1b6384aa86ac4647814d6b8d9755b4b7830c66c9bc5382744d091316619cc8c9f8131715f0b61da30c162bc13a21cd92764ef355974fc051180ba11b366ac6ea4f3d1683649fe56af3f2e1eeca9fcb6d102713d607706fb0e4d954dc7b69745f234e58d53a64354f20ca393158712954c344e3978a77d9739e9b0c6294e54f223462d8f9ad05b64a271cef42a8c562b4425cf356e9a1651c90b8d9b9cba581daa28cf34ae552b14218f336a3a8c1a9578e26e0a2100fd33dbb2a8394d4a092624499384055449a22441012ddd64044448dc129b4415e2e9c39c8a64bc714e19b7ab154ecd69a805f1177c412c8427a0c73c19f971e31c35a81d64522716512abb6cd16510d94dbd0a7538297531af2219b7ab40ba2f3b1f0806b01222514965978d8df0629581854155ac292a423d890d2b611d52fa1e5c614a6359cf716efa0a9dee6659bbaa8d530e2d57125909c38bd3dd5ceb39ce1be7146a4ea78b7c2eb39532353d568a2a6fc8f462926935ae296ec5148cabdcb8396b51c5b5cdb2193fc10fe2558df0c635b30aa323645ab11490f8a8e928942be58a659bd321f3ea4e363462c1ab951c0cc3131aa9362ec64eee2f22d39ab44c1ca59265c9e8bd399651e7b45eed6784b147243388c61e1a1bcde7b71508a74423d5efd2b4e2b411e757bbaaca33d486ed23857d27d9c5959f30ea3820eb42e644e363c125b8f21373d262229d2b3f6e9c35bd30e66d6dfc6eba5a316d37883fe7972bd411b1171a9f73ea7ac85f3073b78fbc4f44c71b1f073c4c64868c0c333f9fac58b45c317ad819904d54f213b49449023a81489cee67918d2159c0ce7c6c1d500293d8b704bbf918332533435c1be066a6d1b88acc0c418e9b56c0cacc6ae363c9c8ccb2498d2039c6c3cc0a0d3898e902ff321dced238986908d802ae002980093002422ffb6a5c8df8d7c7d011d047bba0879ea5df6ff6b58b6f354c7fba12b19d180bdb8a5dcb908b99fdd898d9c3c70066e3ec3d1859859a46a514abbf11564639ec0763fc6cb202a04c9bf3601f3bc9e834e58a61dad33412c482285e9ab739358d980c86719c55929f25b8186600fb828113313011431676c18eed5c214679c8c88c0a2ce4315686097fefcc2c6e99fe25ca991968f59b3d6afda6adbfe437aec0bf65c5d4fa031bb1bee7dfa78dd897a22d6fcc088499433cf01f5981f0728020dcf4dedf3159a4b61e69ada3d2bac35cfd251b75d61977be99ca7ae39c930320c131d94655d61be7f4976c3c28fbef62b9ee25a6a4ea5d374eb944238d531b57566f9cba2f480375d50700a21b5355b7b9d7b7652950fa29aadb5d7aea1b246c03dc3685e18ca25ddfd0c5bdcf49b6403819163aed6498cd874aed66a4d3fe6d55da2b0f5aa79dc754daf9dfd6b0cd3d34dabd8a6d184c1ec1528e3249222d52634f148ae252939dcda01d750f654736139ce126f4d8bda82ec6aa52911deaced94e5075ce76628aeb981154834855aaae432dc374835a06ca4d86216a6146504b644d04545640560be984981d53650fb2434a312e75da25a56e8c54db8d69b28bbc18b52e90dbadcc3e40657ddaae6eb5a8c7932e1798830e1798a34f50c7d5774d0a6f0b66e00b819afa2e58f7f4dd62d9d37f0e8b9e74b4e0e8e36c3f3c07ba59c801865c083f17079f03e839009e03c839009c03a8f7b3dced323deae8bbed2a75f4099b4f5b1675f41ff9c61c3c1ce662ae3fe36021fef01c1d78a16f97e9e500580e60e5004e0ea0e4000464f0018bdd2e53df5dd5276cfd47befe2340aaef4e3f35bdf752b74b584629ced1fd1eeab7c2a2271235d78da5dfef11670fe02e4f95455aae305a52c66d55deddedae11bfe31bbbe2db55ac8fd06eeeef96d59fa116a33de7a3c5e79847154fae1145b55b52ff29b57a4e489fa19ed55561633779e3de1d0c9863f75690f7be815a7c8639dfe4a60d610eb98feb35fdbee8a47ec0e9d66d73a867d65d7b865a9659376c3e4b1d5aadbb94ef652361d9676ddfe9225f2219db06cbecd05086e547b32a0168045d40b027b71798c686c7b6694482971920220a3432e1a9b16d5151402cd32161ce360d6574236a72db0b02bb2634e6029c10dd5188506aec493cf6453c9aa8f26db5793be717519db773fe2ceaf376ce9f4385decef925d4e8ed9c3f8f2abd9df31750a7b773fe222af576ce7f825abd9df39750adb7737e41eaf50244a1d80b3085662f4015aabd0057e8f60264a1dc0bb085762f4017eabd005fe8f70206a1e00b38d2357ca7e3a6153a4b1f76966e7796ce76cebfde59bad4397fa8b374bcb374b973fea0de593adf397fa2b37401f32e77e57d82f52e63debfeb9da5373a4b4bb2e0d2979da5ab58e4fc091d309c3fdc593a2b42873a4b57b1e6cb7a67e9adced27b9da51b58ed231d4212c64788f8130c5fe82c5d1665df09f2a2d4b39da5ebbd654f210937ba32fa2f66bdbd904b697dee5eadce0d6e734eb638d7ddd25c77f37251cb7289e6dccfea89345dc7aad705d588f7fcabd88a28e993ced2617c0fd7e2a91790ec4524294a7d0f53c5508852ff03e3ef04fd10cf806644040c5a9e4372232a13c425684a90d24d4184b8ff821ef5864422c14bc012243cee796f5f2e8f4123df0bc6d0899eb53db5c87d1eac85cb712ab0f4d3b64175d257739ce81f762fe8d0c350fd6ae7fc89b49337b56b29c71777a2b7566c65876900991f882922d678f57e7475c49c8c2df438b34e74963e172071c3d7593a86531306091658bad639ff6ab8f50b78c53b38da4ee10e10e7f63b02fc97c138fe28dc0ef6a4576255de0998dc3be106319968c40a2f0433e446b8674c264e2489f95ce205fae556b227bd16ab723de0579f853bcc44e2c6d5903be7173be7cf76ce9feb9c5fea9c3fdf397fa173fe62e7fc279df3973ae717eea19ffc0095917b841be41db73b4b67eac8e997907d5cae239b95ac47446ee30bfef01b483c218a5eb1278e26947de28404f24f7e6c34594992f34de5a088260d7548939440da63852421522a4a20d76270e61f9455bc6ea1a312f740bc7672ede3b577d6de5c3babaf9d597b6bed6c10f9c3dad9b53fe96b6fae9d593bbb7672ed43487973eda4be7672ed9db58f83c087107873ed9db5dfadbdb3766aed7d7dedd4da99b5f7d7fe00a044cee2dafb6bef88e8c7189079bf5f5b10c1feb28024ee5a40dab52eb2aedd93a86b0141d70262ae05645c0b48b8d647bd6dedecda9b6be7d6de59fb485f3b27a09f03d86be7207876edadb5936b7f84e07b6b7f0852cf4581b7d69606adb16b6f020548c6ef042dd7f4b5b7e10f1b7cae0f59b862aebda9afbda5affd4e5ffbbdbef6b6bef68ebe76ee41eab415d7de2af5ae7b89d4f48f4aa9452c8d8c8f040850b3b547d555e9a993b6fd1df8a56aed6d7cf7ff5b597bebffbd5d4a2e966b7f587b6fed6c3227fec569edadb5736b7f5c7bbb7bffbbf6e6dad2da1f60444575630be6ffc7de9f3fc7711c89e2f8bf32ee58c9c097e010a00edb63d108edd25e4b166c3d53fbfc0304571430ad99c6cc74e3db07b8a0872f7090002491a60e523c4508124604081e202e82200146ec00119f1f7ba4800850bff4bccfda2ff659fb3f7c22b3aafa9ec121eab04311c074556656665675759d59595803ce3dfa502cb13e3afbe81d1004552611e4b9930ef4d1bb8f3e7e74eed1fbbefdab47571e4d40cd138ba58fae62759e4cb00af9e8dca3eb6ec7e9071552d2a3f71f5d7b74d6ed23318ab86c4a629a617f18d3b21f647b464874fdd1c547171f7d28a5e47d520221c0e338749a2cefd84fd661024457034c2e62fc43e93874a68fce438e1f4d61f759870d270b30f260c0ac0fb3f51164abafaf7eb63ef2650b77c59a9f7ebaa5f94780e6d9043629378c02221d1dbeebb3d2a34f8bfc2db130ab0117138fce3efaf4d1596c3b2f3efab0e8bec978f8b947d7a1c6400335597cf4ae3ff8313435b56fd33bf0c7069f26b5a473368dffb42b3738cfb54a31fa891ece53932f00a8ad3ff615c58f7dd537a80e92ff14c985e63fc606314e77897f18938fdefdfa8b0625be6850e28b0625be6850e28b0625be6850e28b0625be6850e28b0625be685072170d4aeea241c95d3428b98b062577d1a0e42e1a94dc458392bb685072170d4aeea241a9d6a241d6ef74c299b8e24c4c3a130bcec48c53ea27cec4b433f100223ed02d67621523a79d894bc49938e94c5cc7c88c531a75266619c9280166a54167629285069c89594c39cad29c77269630d90481d0c4436762025202e8863331c3a8ce617c0c197128d32f40f829265ff243ebac096026935ee692db652a59274b499e9ba4978b6458f524d73ae9a9baabf93e2fff87f8bbcab2bce494de46ad3cd02d676210cb75d60fbd817a5ef383ce236806b3e24117117a8ee73a8000ed3de97527fb42574fc580669e42013dc2e23da97566fa6e3970099c3767cc59c263c7337da839579c52cc04df87d9f3bcdec763bbe9bc4b5a63163f31ec4c4467f113e79c89d91dcddf7d94fe39fbc4757ccf97a10a9546f63267872f70c49918f44fdb81eb3dc692cdd9e12d0f38139713002ff527c46bbfeb4c7ce24ddde1d58ea0a683ce049fba4f9c7126cea114d073d299f0cddb03c0ac8ff8027218732656bd49bb0b049dd23e62f67d4e7a33760fd216540054077125cf3d5804dee74bb220da17df74dd0fdcc574bd74cd294d3aa529a774dd294d3ba51b4ee9a653bae5946e3ba5ef74ba0e5fffaa333151c4b73780f5f85e11ca109a02560f668af871af3a13b7f6325d172262a6eb3e99de743d283b76c62ed4d9f374ddd5494cd7fd9a88e97a481131637785a77c7c9ed8743dbce5cf36fcf543301c757d94a9c24799e76c4cdf77885b7b310f1b945d122e178bcfb0c7b37eac2c1c92a595883f32b355ea96d32abf599d4a298cba07bb3cbf6411c92241ac609e3c25a8c25ecb9858aa260c6a72995a0622d4e7be2c9a596ad6ca2845dd0deafa3f4ba76318a4a92ae1e137ea734416cd59b76cc85db5728648b4abc390df0b598453464b2b6aad3242249411a73a1e3131c8fa7c82fc89b70992a174cb6ba7d56e4a7ae57c375d3b2d136d7dd5eace5162eab4171046afd209cfbcd283511d1f392daff56ac728d1ad6e159086a9f5d034258669a56555cb50d2a36b86a276050f5e1a2655d334afa9b2104ed56e219c32e13487c20101c2e199577a30aae3830b07d954756573d10a174c03772b1d0f0e0c0da53b8952932832090293202d09a29220280962922003604612d82781f76ec673aa9cee86bc911e4d0473c432359de688a12b506dc9da69d9ecd54d9a233d32fc1a56a756df21b82aa793c03109ac405925895c92c021090cea9841a832e9d1886512438744a4472646bce3b6af61f2f76df9f787afcf4858e1e19161993af583c3566e62433fab18c934ed6b6864cd62a23925ecdfac8e443b7f651064bcf0eb4c3c132062af314cf37c90065e6998a4058d001207d9e359f678ce9f8ead0eb134c78f07cea1ad9d967591c13833beda190c65a147d7d6c7f32161e13c302259e444de5d4e586a25929f9d0c348f51dfaa560f14b558d2eaf12e5d916a9b83602b2d4c4244632c2c43586369494feade84af770f7d2f35cae3ba4a7b12d9f294f9c6fabb6a2227a7d3b29a308ec97aba3cae26ba8cf203b3bca89be5c55c79514df494a75453ce218956e8a4a6167083ea0d09d4b015a01c1910783d4eb168b64a6a792a5b1e57fb1285f2b8a1a57b64bd4b4ac541e5a8fb52baaf019834b64ac1d431a9dcc1802467fa2496ae554a88048cb4313272a0f529b3f15ccb733af4b5f02c8f7753973a1bc3b7066d3a9eb34a7b8058a53d3ed2740cdb38c2b6789ed9f21ca766215f82b618ceb5c9fb6a94c6542f6670aad72d37dfb883c6d37137a89274dcef11578c911be456494a49ed85f272deec48488dfba476699fd9ee35431dcc52b87d7f4ed33ba4e820c50a79362c8f73d786102894c7f52ec5324879bc4757f28a01906ecb20dde5655561cf3c3cf1a0f7313ce97dccefeeb03c17f277d8b5537f872019c5a2481488d2d811f663c15b7cba6a6c0cb95f38e15f38810f9ce0e74d89ffe326fccb26fcbbae371ae8a506f27399314ec802d2d71e0af4922cc9f114a42742bb8b1e1ffa69e8f30f1f4e7a5781f03e9c81c2b040a71fc034b17e22debd7b5a2ea6adda8bda9225a129795796ea2f9a0d2d8d49537b453b2aebff420db961a72edc7fd47ce8d021b555c2c9cee15f4a29176001e0df6a0c460ad457b5fdde51b5bc4a7bc2b878c3fb849eeca2f93c76dc4d3f6a6ef4f7faa69c09f1a96dc01fe4d3d2b8b3def62923019f6e2ff5d674a0af55a17f559b0af00f3f59f8879f34fcc34f1bfcc34f1ffcf7a5d4ef8f2fc46cdf7e5a8899fa6ccc6c2c7d31b8b1b8b1ba31fe45ffc634f96268a3b4f1f08b7e17b0318f8187101cdf5806d8c60d0edf58d898de588188601388dee0d12f4e6e7cb2b1b4b1b2f1107fa7c9c6ca46696379e3e14669637ee3e38d121334b3b1b4713b0c5cdc58da58088226364a61ba9ab3ab60fe42b973f3e6cb992f5f815c05f214ca514c7e627213c94b4c4eea4cd636662017908387a8b94f6fd07981a9b8c81e37848ea8db3250ce8024d0617ee363907c7b237ea939256ddcde98fea27f631c9e04cbf73666fdeec6f8c6c71b530258fae2841f746f63290a9cd998de58dcf8c40f5afa62f08bfe8d8f37c637a608878f6f4cd56bda376e830a5c137c7c71826cdc630fc8f2272e57e0f8710d6ed8d87f4d5e4fca375262632a1963f8be31956cdaeebca98f26be01c6eabbf2c5c92ffac31342a8f51bb31b93e18d7af63a376ed79e29064e6701eb8dc9c4c6f58df18d79ceadfe31aa8df18dc52f0636c6376e89e94f3c8f1db6ce1b33f0156f2cf9d6dc37c6371e6c8c6fdcc749d1c6fcc674e28b132075633a81b95ec05abc002077c13d8a28a4a42ffa37963696374aee32bb07c8a624a6afbbaa2ea2e994041972d7d059a42d2561eea63756dc05730fd09792361eb236d65d1e7701911e7fe3938de98dbbf8a25637c68b3cbbab1b4b1b0f11f0c58078890c2f224b2c6bb5af7af963c33649b7dbf40eae0c07f514a6ed6175c5127150b49492c2c2b73f3c56e4cffd0dd0d414bfe8df98d8f10106f74882ef2882c068ee1c802d3ccafba4fd20010d1bf68318efc0439de30b7b9c0c87bb6f251d3c1365515dc153511868a3ba6c9217d1db539b8c2797e027af9017b9aba723eef8ff77dcd5d36fc5f0fff0b6eece5fa62ac802312044880009e4c58c09cc812db0046e357a953645cd642c72445615951c91f3d4a0e4f7b4d322bfa105c5202f5b056a9223b4d38c5f86e3bab461626400a92131248584b51bfdb60c39a2922379f2fb4ef29b0279b9408e747e9ddb0e76e33da0bdc7ca59f9f84b0e6a92453eff1e9a518a8642d54cd1d074b958a0795ad8c36612f071778a909fb73fd4e23bfda2b3132dc5a28492f6b44fd4d2d2cae4c1c7fe5c2b1707919fb5321129ce3dbe1ffb35d59584a22a095e34c1beec9f6543cb85517eab341fca77244b2e505d511321a43f5d9ee62d3f7e67befff234e4c7bd8faa9904f0e27e133a659df6d0445a3615efba411e2ba424432ec8aae2f35dc56259c074c3c89df738184e03344b75cf67158bb401bcd3ca53d5ed6f78ac0f3026cd5a9ee717167b622d967fdfcdab044fb534371f3ad4d2522c42f047875a8e0716e3d426bd89b2c53825b843a74716e4d46291b64aaa96cbe96ccdb3bcaca62d5d4a319855706185e85a1c28d5aaec6b604cfc89bd448d29659f88466f19525ba542f9a65a5ec65d311eb4a2bb794149824ef7a501496aabb2cfc7cf8b58d1cdba20c75cdecae5a051c74b0052feb8c8830f24852f2582e93b7afc4f510ca127b14ccc0e1f4a4535d99d0029655f034b02f94f9717335e4638479742300dafecb1421c572dbc532045dd18960e8694e82ea2a789a07165b989dcf4fed275050588fdb2c24b83bc9295c7757459a0c7ec4406df864bc9cb3e0c56a4c6e81ea4620497f7cacbfce6120c04af2e29dfc45536f6c8976f92f278a6bc1cbec084afe895e7bec615265c125bcf43299e53caf2dc2e2e32e1c1f2aaae9467ba054229cff4ba179abca1140aa60897170d11ce536b57179a800c640d1c9113b0a8e3cdd1226de57152beaa933685fc4a21bf2a2f92577670f3d193d9e163178b6cb3cfe723aa71b5c9cd9a579b8ce3d526d62eaf36b999c8943fad73b309354cea5d6d92dc79b728bf612a7ea78e6ff4e91817979cc4afaa05daafbf9f1536c57fdf7e465655aaa0db9e4e1d02dc6d0f0cd16552a0998ca2918c6265548de4ad4c5ef1fbee119eaecdb0a76b653b47d71939fc5567400a8800fec01cd8b2057aa5d6027d5a83d1471725794b95d3e51bcc3f0f0664bd4bcb6330a368bd18e89555598780413ba9b99d9b1ee089ea15641d78407248b913ef3c32c928315eacbf975787fc2e935112349f97238eaab50255c3a880cb2f17e3f35d28ebfe24bbdbea168b30799a30ba34dd70bf65976168222bb5e73546aa454877b6611d5d1d6838f0c7f6e6fd3feb48eef396135a251377171555623704ba0e6e9e32126f501c38d37c97a52adcdb8a12f29aadd47370a370ff363ff63bb7815907776d9351345dd5dc113446159f771bd9efde46f1bcdb04dcdba8ca77e9de26da04051dedffd00a7d6f5ba16fc76bfe0fadd00fadd0b7de0a75fbef26facfa5febf5e1925ffb97c0a1f4b6fc2e32f972f33e0598c9dbcc970432c368db17b1f62ecf4007f704610425eb59b9f16a03b083fcfc0cfb3f0f31cfc3c0f3f3f819f9fc2cfcfe0a7a5197f314dcbc1305faf35faebf9d25f2f5ff9ebf912f9eb95511efa3f03d3023633ef622779e8bf46dee5a1bf5c1963a17aad12670d4c811d30021690b876abb4d344bbbe82080649e20a2288ffe5de7cdb5faf8c1e864c78660c3e68b0910a239929837b9ed52f219f8f91908f8106cfb686900de974bab1d665f87f393dfa97374f17e1b17aaa8ed5042340d3899dde72cf584b299136be19fecffb6ffdf57c29dc06fff5c29f03d0605bea3f9f00efbca1f1056c5559b8556affeb87a5ffeabfd38145fbca6b126fb8037e1141c6a42b23da5efbce3778ac5f903d197f39395a4b46b0fddda6f1f9ebf9d20ef764d2715784786ea6a076c46dbbd4da2a8477e2b6e6f0a6a035ffebb999ff73ed3dd18a63b090925afe323a2cda6e0c66a129b938f85f1fbc2f1a6e114b0306ea296bb531d896925afedfa1456841788b2d627dc0fbdebc68af21f8841adade27bf29d4f36436850cdfa650cf8e3685d89e8e6668e4f772a7457e23e3a6905cb08ed22c6abaf36d21b91392436248b8ab6da19ebfaf6d2159ed56d44cd150fad8ce906aca6a514dd3bcb587bd21c6ccb73bd457737b08e4880d2214b7e70d222ed4dd22ea0bec11a19c141711dfb61e568028d163a94a4e8bdf2a6aeb94d56eaa6676bf5b44f334715451334abd0da39cdc23ab999cacef76d7e828e62fa1a899e0d691a26672a0aecb185b2d831e954d7a5431eaec2199969ac9d07ca2f65e92a088df534a63617a0e5f7914f7958e06f6958e06f69502db4a4f725729dce4e57c63cb3ff9edbcaa4317aa43ef5487ae5487ce61e0a3ead005521d3a5f1d3a5b1d7a177f3f12b84b0c7759107ecce2ef5487aeb28421920bd5a17116bf802cae444197fca077aa43ef2194813eae0e7d483074b63a54c2f85964edaa05893e14b80fa3b82b088d49f43e462e467181764c18fbc515d2789d421a0f15d2784c21f9a95876c7a3e5341e2da7f1d8721aaf5f4ee375ca69bc56398dd729a7f13a06776e697925e4958757125eeebd7c7bd9f572e9e5cccb84a7b2a7637c4f19aaec1745b17d541d7a87f1fba83a3489c2dec5dff34ca1718c5c8ec57d88a15bb1b85bd5a14f301283bb2aaac43bc89f95ea39860b93d7a88701fdddf71acdc2789d2c8cd7c9c2789d2c8cd7c9c278340b4147f08ac10703071aaa4337300b57aa43ef143119ab5cec3dbed778e0787894e2e6dbcbae973f2f379eee9ea69e5eb5c7338c3de7cd1973ae9c25e7c7996d3bd6c1a3f92ff2c18ef00cf0e21e463b2ea31ac31c8e8fefe1b1443fc5421d6766dfd5a10faa436703d6e5983fde708588bcfe1c3fc44f30f3f0de6298f16dafe8dbe44b5011c66e02af2eb8a49c7247838118cb3c56c158d5bf50c408abcf106195e61d377e03d584d6b5d15bd9f29d6caf0e5df8a7034d12cbbbd49892f789305fedfaba0af0775444c0b9ead0d9783d1a18f5d946a60d34fc09b7f0a4c6d4017f566ae4c423604c6eb8dd4a809518881af0657c2432c2de27eb992e5787ce26fc9974075541602125f973ef0eac82c02c50058ac51d6145e069a0e545e60eb77c9036c0f38274c75c3e481fd78897833bfa0a006b4fcb9b8b2dfb19519195c2feb0356575e86cddcb519a995164ca338ee442f1947fb128bf70a8a5b9f9e9a7e5a70e361f3ad4ccec7f20d42a7189d23e39c5d29d7d72e345eeaca83925edaf8c563e909a5adcd04137f48c1b7ad60d3de7869e67a1b7d1851187fdd40dfdccc5b634bbc1835ef0192ff8ac177cce53e8790ffa130ffa532ff8b3669f08171cf56394cbf966ff9f5db6673efba43268cf54fa893df3d965fba13d63af107bc59ea90c55fa2b6fdb774965e0f38b95a1ca0740f2c09eb11f54dee6c1ca5065a0f2b6fd80802cfbbe3d6f2f10600624f65df2d965a0b4973fbb6ddfb317ec6502e2ecbb280182957e7ba6326acf107bd15eb0ef5706edd5cf2e5706005f7b0181a9cc95e58a7215b97a5c35ae1457882bc355e0e2b9e01a8b0c885cae0cd80bf68a7da7f201b1e721273e00068380cf2f56fafd49ee8428ecc5cfee807ec483d55ba0603a70c95c1e97c279738e9c5fed5ede5e443e8c0bfc300e909ea55ef9cef6a5767e3196fdee67b7edb9ca07f64a02eac967efdb3395c1f0bcdd3e57e9af0cda0b9f7d124be49f8387f15e9f6f5fb2172aa3f6428485aff7fe7cb232682f43b127ec19fb2156b495cadb9f7d22369ec26977784ea1f20156dd15f89e7cf37bfbce6777f0935cc1893d549d4abfbde2e909b5750892b9fd511058108912f6037bc95ea90c5506dd4ec90fcaba845e0edc4ec90f4a7b1ce12b5f71fb24116df30866ec7b6e97c4227d1e72b1f2b67ddfed8e7874dbf5e1fd0d50504568f5b6bd93cb6c973b8a45b31d3a1416f8057435add058aa563edf117333d7d7eb4d5a5252756c1c7b90ead8c7d87f54c73ec1dea33a36817d4775ac843d4775ec53ec37aa63d7b0d7a88e4d629f511d9b42d777d5b18fb8eb3be0c85cdf014fe6fa0eb832d777c097b9be03ceccf51df066aeef803b737d07fc99eb3b90c05cdf818c78d77739df0940a97af542f56a7ff5eaa5ead54582a1fb001a7baf7af57c756c94207ea97af57d86bf501d1ba85e1d63916b183a2f3057ef56afbe83e9df7799f523a7feead5b718680c997de4e2df44fc9b2c7e06135f66912bc8ef24e28731dccf10ef21e8fdead507b57b957f985c79dd57f5eac7d5ab8bd5abef62aa33487e9120af772021c4df254875022383487e8954af7e801abc8721c05c425dc7307c1615bc5b1d3bcdf2715fe4ee12c6c74e02f9d8e97a9d1ad30c5401f120c593c499c2a3ce8cf56b30f85a176e7f03f73f8696e67d457eaf7ab5bf081501e227f0e59cac79204b0a11ee6a3b3224544a45b8d598625f7d87538d0d61951aa88e8d24f0f378b33a76a27af544b86f16b5e8e3ead860f56a7f0d5a7f171da5f04dccf9273a8655fcb2f8fade8c611b5e7dc7446731f519cce347d5b1d3c8003edc8e38b93bebbde1831bebaf5e3de3f5dc2e5becb751ec9bbc8100f91750fefbe25b7f5f7cb54bdeb4320655e08dd64af5eac51086cf3203c06c80dccb9a37d70c00d30172ef2d7b93ce00b02d403e501d1bf4669f3cda17201916add762756cd89b8686e0b507002c5b7c18e0b35061f0a7d2d28e7d0456c7c6ab631f57c73ea98e4d54c74ad5b14fab63d7aa6393d5b1a9ead847dfa68fc0276457e373bc3bc71defce71c7bb73dcf1ee1c77bc3bc71defce71c7bb73dcf1ee1c77bc3bc71defceb98e77e75cc7bb73aee3dd39d7f1ee9ceb7877ce75bc3be73ade9d731defceb98e77e75cc7bb73b51cefe6fcf7ba39b3579cd9496776c1999d71661f126776da991b76666f3873a711e4216e39b3ab1001c42567ee347166cf38b3d705e143677696416f0187b9730478cf0d027b045f71e6069066d899fb8038b3c3ceec79677609d38f319225947d5d80869dd9415005851267f6a4337bcec3cd0d3a73e7fc68cc4624d138aab61442d4f1d28b25122e88ef2cfff1d90ee4369cc9dd78f89dbd89b99a44dd16580e8522bc806ff911b7b010cf3bb3737ee80d4c7ecd0f3a8fa09910df458c9ff3552e1701197ae882eabafaf5291dd635a0a2a75940a1b01e9ef83a3e7f5166401a17c58570099c373c76e8fc37ecf277ef8e7eb775ef5bcba9efec0816d9a7cedc40c4b52f94cb2abceeb9e11d39f8e5af71128b76d24de577f60be53e2cbe8c6167f6f65efcfd829c41677602ea8acfe5efec3d14cf7233ccbcfe3279b3b3f8c10c24c47bbfebcc7ec2abf2dc80e7fd977f45e74483318e55c5252b00c3f7dcf24a880cdfc2dfbb9e57e0303c1b49781e2363a8a7700f1c00a623493e6585eb3909f6206d11e2095114aef2c25b700caa2f927c4134763eb7c17ee02edc06cf5d73e6269db92967eeba3337edccdd70e66e3a73b79cb9dbcedc77ea36181aa155280ed18817f16b1ec6f6ed217ed2a7f177b888aff21ac66f63a27bac8a17a1c640b15d71e686f7e25738a2438c83e11a4a79ce866b2817eb75d8a7ef9e1d0f4795161e886ba92abc11d7d254b825f66b978a13b4fddd99bc61993bb7dd2296e4527e73f714e534df70abe5abcb67c941f879067e9e859fe7e0e779f8f909fcfc147e7e063f2dcdf88b695a20511d5beb27c7d71b1c7cf5e183af2e9dfdeac307e4abcb6779e8bf2f8ad057a31778e86fd7a778e8ff2e8d0abae18f58a85e47ce59035360078c800524aedd13ef34d12e7bdc589f717f3b7982fb81839c7806d70178a8f78de271822c88f22151c2883a242a1f0bf7b8d4c0fb45c576f65f5d98f8db5b17829dfcdf06e7216dcc6241a06fffea83f9af3eba12eacdbfbad6ffb7c12b5f7df220e126d8610ffedf974ff83aeeaf3e3a819df5dfae8f24be9a1f15dd31060b29a9e56f8b2744d78ac16c4afaef7357125fbd7de5ffceb8736e114b03f2c2df3e71fb492cd23696e46f6fdf101d2106fbb04a25fe76f284e8e620b87d23f3d5870f8a5f5d3e5bfcea93073b7574b38d513568193ea90fe0cb673938e6a6de7dd2579f3c8835c50e75755f5d98f8eaa313c5af2e4cfcf7e513b557bd187e578b5d8cb3941269bfee2c7b8b2df16fb115fe2db6c0bfc5d6f7b7d8f2fe165bdddf628bfb5b6c6d7f8b2ded6f8995fd2db1b0bf25d6f5b7c4b2fe9658d5df128bfa5b624d7f4b2ce96f8915fd2db1a0bfc5d7f39bf443edd2e3a9cd6b5bc35ba35bc35f9e4a6cdede1add1afdf2dcd649a949da9cdf1add9cdcbcb6791d229f6e5edb9cddbcb67907180c7f796a730ed271cc97a73866f3e6d6e8e6ec97e7be3cb57947e0af03bfad9380108c263100645b2740e2d60924dc9cdfbcf3e529d4e4cb535f9edb1a129af831011db7867cda439ac75388e988765f3e1fa87aa0d3d17d5dc597a7b646fe77ffa9ada1cd791600c5214098d82878eecb3f47808f87b746a1402288add52fffbc35bc79238a18c127cb2209a3ebf53d518dc3aa06758c2a17d56a2fea609f06c4b7c9e61c793c4cb656c9d608d99cff7b5c6cdffcf4cb3fb352c20c1737277979406dfbf2546def67a184bbbade0bdaa0902029258538d698fa6e7eca5fd1e69d2f8713f0556c5e7f7c61ebe4977fdebc139e0a8764d4a4f6af8ac7d1789365a8705085befc732cb3f0127b1ccd4e3adbad13a878c0b81d3bdbc7c32cf7c39bb7138f8737ef6c0d89eacb3e0dd60bfb3089a7d2d81dbb1489cd5bd00ab9f47cf21b8266fd2982b97067be6170da9fe6f1b92f871f5f7067bd22da16e07b12decbe3dbee2cd703f405349edbbcf678c19dd2f2e8ce27b35be35b1f6f7db235b155dafa74ebdad6e4d6d4d676abda5eeacd5307324d5293f42467b51e651330df3c2505d6be9fc7c94ccbc1af6fc835f2d96d6ec835622f71432e0c3de3629f7543cfb95834e41a710db910f65337f433861d12865c183cd8eca679c6833eeb419ff3147ade8332432e26c00bfeacd927c24d17b32edee79ba855ced82bf6ac3d53e9af9c229513f6823d5be9b767ecfb9553cc1caabf3248d048a51f4dad18d4be47eca5ca9fed158843001133f6ac3d87a65d83dcaaa832583963df41def6aabdec8faed8ab5e64de5eb097ed1916ad3dfb63ca7235c3ea6da71857892bc215e0a26b19727d805630a3f682fdc0be632f11fb2c1a728d7e3e0580cf6e137b12cdb47c1493a8940ff06e98e283ca101a72d9173c685d53ae0f982917cae612b91cce9df3e41ceb98727d807c5872f8611c203d4ffd7763caf5d96d6eca156bc8753360c855df8caba611d748e574e574224a1230e2fa7c2a64c465af08232e66caf4d9ed8eb09c1d4e1ced25f8aea3d65c0fd0c072c8b5e6b297b835d7c82eacb92051c27e001a7e3e15b0e6f240599750e81fb0e5f25972316e752cb918410d4b2e86dcb325d788bd548476b108ed1d8486be4f365de1fbc1bccb40fe5448b54bb29a49b429aa659a521344645d443b9ab21c7fc4d454d545b35847531ab0b29a384c331c57c07047531b62126d9aa59a2e8ac53a9afa18f2654dd65d1c463a8effdcbdd98bb6ab1dedcd1d297cb674049c2836fe4979a3413e8463889754c8554b73639362fc96feb6416e6c643c7ed4f273a07aa159c49b59bc450012cfbe70487efa69f985433f1198665630e621782b4217b5a1992ddd1e68694e998dc719adfc6ce39fded0f4869fe37bfb79a37ce0903f892c2ecc80f081432df2338d11a778f9cec86166719699b4952764fd1879b1532f4fe7f3a44d96fda799ad8c6598f53ddc1edbfe307312a525499b7e2c099292424c12c424414c128524414012b82781f36eeec13aa2a96a5ace90b6f2948281c3e569d5e8ca32d8b4691ed5bab2e4b0a6aa3287fe4a9715781ea10506a9d7311dd192c03a096c21349d2487b524f9959e2447689dbbb08e68900c524122725823bfd2c991f8bbb776761b56a2fd454bd63b822ef33ce0deeec6f2d2d7bb224b50d5f2296b9909ab106df7fdc7852d597769c23d94807b7dd3bf96a78daeace94bb31bc738ee6d51c2e9cd2b327253dd7ba20af1ce71385d88ec782d5f08719384063969589d86a9373437c949a891fffebb37f0caa4c6c6568926a47d724aa2aacf25ceeeb9f42abac5184188f33252929ce881623e22e7a0b6ab6ed7e801f83d5600642d3000f99d56486972c274ca147ddc6159ce400f678a5e0dbf3413fa3553f464d8b87e7fdc06e6fddb34cef2b8b37cc7591e7196079ce59bcef24582a125445c7596670986169ce58b18b9df8ff1eb0c73d5595e7496cf627cc64f3fef2c7f805c58aae501e7fe6967b9845403cef27d67f92cc154f3287b5a50812e179de5d32c7e0e59945c5933cef228261920cef279417ccd599ead63e5f28f98439f5d0b64691669e799c851968a208665fc04925c642296181913368d245cd325140bf9bf8e198897e996ebb7279219a62c9f07514cc80960c7584e334e5060d7bf474b89f8d6a0546afa4f0b6fd1436580fa89c5f11614c7fd379de5d9a20f31807565a4f6ae469476573b1cb5749052719c6b18d9c0d77117d35d84cfeafe9bc8ec1aabe611b31b8ffa26064685f448026155230a16bd04b53bf7af301da3897cc63a9e946bac62d651ce6fc113968559e76c6a32d8c9f40eb3bbe02c0f04162b9de52b58024cc371287934ec59be04adcbfd5194751e5f0b52dd1fc2b6e91a7e89174543b0e0d9f8c4a00a29a9251102714b9e0030cbe8de12d2ae39f70751a711cf88271e9b662979917b263c1ea40d292033670184f5ca33da09c3fb18bfcba89630d061d1dadd6a03cb87737fb43162ec1bfbe1706a182f7c9d05442879763fe6da79c202ebabcafa1c0fcb06be0174d5b7769ef0a7c10317d9bb0840d74e436a7619b381afa597e6a99aa6843d358307d64eb2171302afcff10035f0d5a41559a5047e35031f902ecd111cb43e870f48d196920a6be7554b23f0900d4504d6f802340753451080b62c6419f8f20ab20958d9048c6c2234167c3cf6e64c6f52daa036c2a45467a1968e143e0f76c45e8a887701b093c0bf68698699e6c1668f90869697fd5e395c220595509a34363135f88d01816b5a8c7d6a433350b5377734698d29b3d5d8d7006ab4d206852ba980da8d29add5d82780b144073b62a6a966dcfdd1d48217d14b0daa2b1ac969bd1ae9646f7b55d14846ce58ebab50813a157d7d55ce2b1ac92b728f6610ddcaf474af4faf9d5634081b6be7bb3562f45024a13d395d415446b734e455fb166950c1e02a18a00235b80e8ae16ae02a60a00254c837154388570c26dfe0f20185e215a386238cc3eddae18ed686d7dbdbfff87afbeb1d1dffbfd73b8aaf1b8dfba08b6d2de26f14c9121d085f484d2dc802a80fca83dea032284bf44c0fd133a81da846327aba86ab14f7b5c8b902c54fea36e95174374c555317615397d74e2b229693cd5e4537dd44b29a7323ebe3f2fab888d57e0f42a662783215c393a9187e99f0aa7c3221912b5331fc326b16bfe75b31ea70e4889c23af2a3a795135c96bba4c7e239be4555925eb1fc9ebe3751604c8abe445f21af90d7915689ff4300e865dfbdbdaf6fb1d4c26da0bc90e6e5094684f273b7c564f111cbfff2cd1de4bf3c90ebf01540c295b270826c8079510364d314ae46be2223ceb914675881fadad7fa4c0170bd3ffe0c0ecf77da6d61dbb24111c5afd4f9aa37a64e0f4aa4ed7ce775bc6daed8eddd94bf568c18ba7e5f5717ef374b0270e740c520e9a382321fa5d434ae90cb83e97f0f5c1520a815450ca86741c864a8ab80d4011776c2ae2060045dc00a0881b0094ed97a4b56e653b7b4ca089f142f1f54eee78630fd9e0e38db5f70b62e4e18d400293651c6eac4f9b320e37d6a74d48c241e2194ab28734d99484f72b5083e0736da0c002943f42e4bba417e31a3ea21928106f981326dd052d0e6fde57e5f5714a7840910b2c08bd9f800513ed29555f4acad0342519687c0bf030301c24da09557414e5ad9db59a38286a79fa690834ff08bd2cb61fec48c9edcf74a46291cd806c098eb1d82d4a5e6d4e48fbd406b39d7634c94d7a6360941520f51345063abdc14b6a7ad706606081b750b36081ea26de54b3368d975053a5db20ddebd32a7fe6e18977509b86b8ae06d2693953c3007729af18fc0a6a3dd4c76d73618d82c25012bb7f5adc5653f7f669a377ed7d93d530e89f59483375163075797d9c05bba08c5c4a39c783866cb050dd95f85ef22af91d798dfc0b7935478ed4e9697740f8b5164cc4327be042ea76a8b41d62ed3c702f7510d51475eb1c25f175b0357b350d8a2cd163e5738619d3b9ad4d9b31c8a07f4e3f36d4df25a258d1f1d1ccda40b7b53ebe362056ca83b43bea04d7deeff277838a5e30627a417f0f98a6ebabfe7e2d8590b58142c2ed07585fa7371552149a70bd299ba2d0d0ea4de9148566516f6a4b5168bef4a6be1485c646ffee96ad79977654d3d3460a7ab676deb5494d3c40dd902275341552ed52b79ca6dc2bbed4043155cbb028050a2011480e75036cb3953130a82fb9411916d00c81107c80dc743ad52ea5a92a35c12f158f0e28c776a9d02d1b721788c100754390b4af2fd52e6534283ca989056411a052c7f1a62e4dd7e52ef35f755a285053e9a2f97fa101bb2dff611b9c8d9ad85cffe2d041dc597db6d584b9a50953e42653a7aa91a76620bd6f37da4c6259b7eb1dfe09ae9ecccb6ac6ccb6aaad946d08b774a4588b6f26e3f56b909b68e3f1a8d951410e36f016bf84cc62779099ec9a1052a0dda4db5249b79527b417b75a795b4e75d694539db7e454e70d39ad7ff15812e4244148128424c33292202109cc93c039095c77b3cdaacae96e39df4d498f26823962999a4e73c4d015a85564edb46cf6ea26cd911e197e0dab5333ebb6e9aa9c4e02c724b04a02a324724902872430a8b3c5aacaa4472396490c1d12911e9918f10ead77b6c1fa042e23dbe61ab23acd397c5146c20ab7e246b765ead40fdffded205647a29dbf3308325e780821f14c8088bdc730cdf3411a78a76192965470df151fcff9d3f10d5571d188d7d7745b6ba76591bfdad75db74bed3dbab63e9e97bdccc8ae164d02ab653a12ed6e0dcdd11a14506fe390b25b08b578f32a5e93738f1c8b9345c9797c3bdabd57d6b1b35bba8fd1e0c4b15be63da6a4ca392dafe4b484e82ca01b34936e7bd85408c682d16c30168cc2548232f7d57e304c0078c3dfd616c0c0f81d9a770b97407d9827d0d13e218fd705c5d74cff46cb2afbcdb5015326bfb694fd265533966e915735cb5c9fde6fcafb75aa6614f22a95d50cdd7f34bb3600ffe4d754a7a645c9ab4a8fa22be4d7eba7d58ca6c03ff9b5accbfb4d4b57f6e7d64fe7d606481bcd02cb3f64155d01266b03fb552b17043029bfa639252bd3da4d3d680b7a827ea013ea814a0815503c8a04fefb55f6d029f28e61fc7b3923ff7bea40436baafdc774ffb1d7ade696e616f87df630fc3effcf1dfb5edfdfdaf8a796a6678e1f50843658b27b4b0a19d97bcadd4a3e08e9bd7eecf76b0326edb1481b5565f2dafab42e2be40fb22ac3f3b5b501c594c9ab54a78a2e935f03a92e2bf53ab0d72869a3c087fc41c6f4e4550a096bf75a3b4af10deee0b62b1ddb59a67a24f17d95923065454e146896aab429a1843b2ddaa3f5687eb07fd2a184671b8a4a559a55124afc4189a3599aa305cbb4d40c15343b692c9584ae995a42095d03902858ecfa29534e64d7decf692a4dc0f00ca16c47918371132b2b270ab22a9b8adff1bfcc6fa00216d47f07158fa5311d86d8b62004db1833aad302f5ee9fe2d13e449ad4f2bbfcff3edd3f55f03b46ad5c4033e0217452bae45ad4bb80b04dfd927d9fc12e90ca05b4d05d6281fb401cb1a87f58194493f159c60c4dd9ed550fb062affaf1ccaede05d4b1ac47b58396f57ebb7a573dae5cc0a6fea1dfa6de5ed8c6a67ec55e4082fbf60cb11fdaab3ec08abd642f137b16f28436cd10ad0ce0d183797b865446ec85ca209627e47a19d22ff0205a24dfb1572b83765da72a4c1c97cc6571199c3fe7ca39d6b1a65f9189fd50431ecc2d2aa4c7d4a432b0f74b7e7765475fdf8cbe8e15fd59f422bb501948d8b3f66ac482fe93ca20144908c95739ecf700c8addc5d029ff9fc7b5892fdf64c2288def9009d0fc143a36cfb827d97f91bb567d0f9f0a03d13516447e3ee10a725a838114e3bbbf64f82ba5419b0efdb0bbe06959f989917c350ac77cbf6aa7ddf5eae0c054cf2eda5584b7d9b396bf3fcabda33314e576de6a3ad3262cf54063cfb7c8c4282744ac2afcb67988f51c0b521f705105a19f62cf35d10f0ee4b49f69cbd0aeab044c240df032eedc44c1f1a9622082e82ce457bd65e2a429b5484acd430d8f7ccc19b547cb836decdae1b70e02ba520ae8af88a945271cf5f7de1603302b198d077b8c98866217ed08d63e398fa09bb61e8a71ed90300bb0cbeb15b660a79bf4de6fc15677ed2591870e6179cf91967fe2171e6a79d856167fe86b3701a4041dc2d677ed55978e0cc5f4234fc1267fe8c337f9d93cf3f741656907061c499bfcdf0579c854167615984e6679d8551e2ccbfefcc9f77e69730e51df797206858b01488f941d4e90171e6df73e6cf2174cc5978db854ea29e1ed538e832bfe482ead86d8a5248c6e43ee9e53a19ce6a7227194df29c26e333960c6728e9e52519c8c66e96899cf9aba0f3fc6d2cba55677e9ebd2fe2cc4f20c38b183fe7cccf85d0979c85b7403ac41742b81b581baea17e010423bfcda111dc308881f81ccabe1da258448661445d8b50377bf8aa83595a580d67c3a7fac2fda8ba83315a7a6ad53113452db87c2e938b0a08e1ec81e50ebda924f6b30a19f6aae283efd19f998f437dbf662e610dd3cbf911c49f66bf115b4b5e45e69c859db938f3b383cf26c6c519d4d6797cd35791f0ea5e5c9c4598380ba7fdbecee07b1e7016eeb3af949944ce9f7416569cf9eb09514f6fe1ef5d51e52e3a0bab9e1d24ffc8cf89da781fbe6160550056efb15625219830865eebe75948d624c846f87c8234aec44168ed5cc3c99a04e9209f4f916681b5359e256518de1691beeaa2da3c892eb02f48bf80bdc75d86e2f6957e60d456195ada55f8c644ab5b14a005d40c2a4bd1997fd3ed93e25f7211c58c62fe077c557704b90d16a3720e287b703c16e182dec09e7e5afec5a1678b45697b3dc5d583f5d5f5f918db91c5f5b3ad71aaa5b82976a43c5dc762dbab2b5c8cd557371527fec91d72e4637b95fb04325c5f3e66ab543959396dcfe3ef4af0746aaa360e2f30600e820cc3e719a8c16c95c24ca2091b59ca02772d54288439f8ee3148f963fed4599e3a9b8dc81fb667ec39948c217bc9bee7a5130e91d2e970bacfa7ecf9cfa72afd9012c2b824e04bd9c653b6b5c5e47886a56321bf9e7d3c555f5f24978bf6927d1f738821575ad4b3526494eaf7a76b7f58396dcfe1f5227395d395d3fc9070a59fd8257bb5f26ea5df9eaf0cd973784cd8c3bd5f1942f702b3b1d8b350129f4f013686efc735d39d47ae008de58a93ae38cc87f68c7dcf7e108b3b571988d5e29d3afa036ed69eb15712f64acde2f1882a276b96541d0f7882d141117846049e1581e744e07911f88908fc54047e26022dcd6ec8e5dd72b0b61eb586b7f6879533f60328ee19ccdf0cb1af54ced8736231e972e5247e18b38019fbec76a5bf72da9e25f6bb98f101767dd0bbc0c3beb3cd128e5f1297c2f973ce9c2be7576709e7c3ca19e4835c900772c0f498fa5bb145b557ed95cadb38de83af3871d86f8c1a41c62d51d7a58cf4df9fddfa7cb2f8d92dbb54e7727240efeaf0103095522c5dfcf8f4f3497be5f329d1e245969caee01229fb0e46a36b4e17a0c2544efa0c4abda1eae793e82a61cecf39e0aac15eb1e7005519f87ccaf5d0b01b5f0cf3ecd629dbef8417bd80ac7c3e052352137715c52152531c1c35c56951539c1235c5d95073db4513b77378326ef7bcbe26a6b1ffba1ee34bdc637c897b8c2f718ff125ee31bec43dc697b8c7f812f7185fe21ee34bdc637cc9f5185f723dc6975c8ff125d7637cc9f5185f723dc6975c8ff125d7637cc9f5185f723dc69784c7f8804d63c0378324fd5c79a3c16c8c0e62e821c99938e74cac3a13f79c527fc29958724a23081a74263e957edea9cb34e70d53e8211c4fd7a12a70a6679c89730967e29633f1d09998c4dfb12061c16317a0724a2301c26c90e3046abb1424c97abce2f0e9208b4f51d042842aed71a941d216c9dd3da1fa6a90b02d903b4115ca5a5f90dd823331e3944e3b137783547d1e2f8f04781d97f3508177fb5a1131b8b3971b43eb7fc5cec46ae4fd858aa2f68b8eb2ce4658f3d719661af3c663d8a523ecbcf71ae618fff66398b6c565df7dc1a79d89db3bad0c9c362ca02f22c0f7d643ac6bd40dc654f80da19eb3b1a7d2079426396ab05cd0fd8bb6135790c3245684050ccf38a57ee24c4c23e8068a99714a0321f42d1139ed4c5c229885eb9c16f23c8b24a51102124a83cec4240b0d3813b34e69943813ef3a13e7b1069e7626c608be00c6600c050f82ec891946784e20de76a193185940c4bd508a715461c90fadb362eb2b82644cbe93e1cc26c3b94df2bc26bdcc2603b94df2ec2663b2990ce730199fb964385fbb5ac2053d1744555f65a5b484426ef941b7b0bcce3b13737ee80dccc8353fe83c826630b31e7411a1e744c1f811bc25e0a0baebb142574fc580669e42013dc2e23da975165ddd72e012386fce98b384c74ed75a450eafb0b62ab2e61ac5ef75ed35ca699b35d870821a6bb113c3cec495c812ecc49bd0548a666c47abb0bc578a399dce3fa7f34ea91ff1bb5d794506d7b836a511df3974f8b406c587bae094fa6188ab0bfb715dd88febc27e5c17f6e3bab01fd7b9fdf88eaf4e285d734a934e69ca295d774ad34ee98653bae9946e39a5db4ee93bbd3a013ea35578d7bc21eb2f62e3c3deca1c8b7f8a5fcc75b75d2f8a7ef0367e6e1eed5eee4d882810736f425023efba848866b11725d45076cf9726443516972684f4144b9a5135c512662dd5527152beb1bb0d0a46c4599822bc8529a48d769117d178bd4d56c8cb964a5eb6f25421bfcb68465d3f618ab1bd9f30102324f8f993df659039b00596c0ad86c9cd8b599a262f19aaa29223729e1a94fc9e765ae437595a500cf2b255a0d4244768a7196f21ce7579318b4c8005a487e4901612d6ee195ecc92970c72244f7edf497e53202f17c891ce1d58f3257d8b27c94221b9376bbe1e2b67e53b12825d2d8bbe0059e4fbefa119a568ca6a8666a9ae147b6493aa996281e669610f1f337073bf4e97abf751b6b81f251324761e50de9ebec79696562615beb5e75a7d4201f0b3562128c565d4f263a62b09455512bcb082ddda2f0d2d17c6040f53b928af63fb8d9c2f505d511321ac3f615eeea1869f60271d5b1af211346deca36a2681cc70f7b053ee9475da431306a5a6bb4bc822859464c80545554ccfac91c5b280e9a605771b0fc3698062798aed3916690378a795a7aabb09c7637d803169d6527d168d10fbe6ec4b8cfd85be1f5ab01f5ab01f5ab01f5ab0bfcf16cc0c365f2ad5c9af74aa9336aa1fb3dcb6abbbdb226b1f596ab7455eb1f2dd1679f1e851c5302c724436f138b8457e679a163c591ba65be4b0b2f63686b669c4740ac27823d68d6240088800f6c098b7626b6fd768c65ecaef5ffb94a6d3e42573ff6baadcad6220afc82625afecffa5de9959bb4609a382860d421f29050635f61f513acd7aed1bf026afa932792daf905fea9d04d810e0408e28759ab8b54f29794d25afe5c92f75480349c811e5db3a75f1357c81bf94cf5b85c41b4a7e7f47f07bfed7b56b344d8318ff67e922bcaff9a5fcfe4e45d6e9dab544001bf89a9504bc8c749a76f878ece4937ee37ff75f0c1db7c85bf829bf612a66c290739a389b865fb2880b7760d4ff2d5bfc9085a1c8a08efb39f3b889dff4dab8a5ab7856997fd56be33a5565133fec7f8706d4fdacff3d6be9fcab56a9fb491baaf25d1eb3f03697aa0303b8b9541d18c4cda5eac0106e2e55074ee0e65275e0246e2e5507867173a93a30829b4bd58151dc5caa0ebc899b4bd5817ebeb9041cd9e612f0649b4bc0956d2e015fb6b9049cd9e612f0669b4bc09d6d2e017fb6b90412d8e612c888bf8e383002abf68f54fbcf56fb97f1f7c36aff74b5ff72b5ff16a9f67f50edbf237e6f2045007db1daff4eb57f9954fbaf55fbcf55fb1fb8e03b04b9ae30c62c3253edbf52edbf59edbf5ded3fc1a05731cd208238a793d5fe7e94f40ea3aaf65fa8f6df20d5fe71a1858b66ac38faac887f184af75eb5ff16caf7a0b55b57b72c78e60399ac9fc3b8bc79f90967c0d398ab58a39946e16785f2f7b0b0cea258502084bbe296949f7c9a54fbcfa366ef21e8fd6aff18be8d2582ba3c40a5ae62fede411d9798faaeb60f18df93282dfe148a5b7e9e725c1bae4144a42783d4e18b9dc213e3fa6df61c3bee38aafd9798aa49189525dab17aad56fb6f74f87b11849e15b5ff03cc2dd4bcf834011f5941b4d7cb08967792d5fefe281fdff2ae5bf7abfd4bd5fe816aff6cb5ffae5bd2ae094330fd4eba22f63e31d55b98b1bb89a78c84cb45745148b6225aa9b07c9604d78525f1c1ddc35fa04fe20771560858c28fe352b57fd9ede02269ee22b6c0bfbe9398ee227ead6759d4ed0023f06c20d159cc1cb4966ebf1804a603e497d9eb757b491fa42d4078c5ed2e31dc1716ba2ad4e1dd6700b8f385f0eac0407560b03a30541d38511d38591d18ae0e8c540746ab036f5607fabfcd85f06fe8b8a4da59d70f88e1fa015148b7a5c24f5ee16e9d842710997b029185271059276979bba5888027909a62629c8118bbd92234ca4b6a9a664881e2c35474039e9a8a0f5363d13774191ef9f2929ea6752f5930ca4ba07092984a92686a92985a92bca127216d1d072046798914283115a2a9c4d4c81b3a24f8e6fc3dedcc07487b2e9f8c39629da84954eb90759a661248161cf62b8982a667643588f38fe05d84ef907522532ee9890086b7c16f68baae64dc4b0f5c929d34b35a68066f2869bc772025a99aac0a574dba7fc8cf018594249b261be89bc171bf09f86c4a92d584a91464b78583888e4d9bac42e1b8cd599a6600d1868842b9a4ca69ef8435466536f40789e592ee365f10fecedd3ffddd5a96451a3d396c2c3229ac4f6ada88d43010391967203231ea1a4af80d4420e5284b731e0da05c1b1190e7b79fb885616ef771b28ea5c8cd28b9df9cc2436c632932b9231b91707e93dbe636c9b39b0c673319ce583290a7a05dc8ee8c42869d8911b406b811350ab9e1370ab988c2cfa3b237a276217e1068c2cc9e6ed4b20bb911b50bb9b113bb10ae6ed2533319562fe9a9950ca8930cab91f4c4d7e98e9c8961218ecb1a1422047fc1199ff1acb6efa95e44bdde16961a37b0728c08f3111f92199178f8dd9b8fd49254d37c243ec13f9489c4c4c3a2afb2ac3a139345611af8a63331c02a806b1c31e04c7cf8b50c22261ec6994204e4074c21827ad4338500d5f6b459f14c6b503f719c2ba415809f6f8d532a64f8808aa4823c77677174133ff15967e261f42e0d48c2647fea94de66c39cf6a6c8f519bc21ba8234112ba4f3dcee32cc60174648abfee39ebcb75a65ed313bee09ec475cd3dc73c266f313ef88a76b830bbf9f20c1383bdf1936ac068231ef4c67189ef525b92058a189ae7b7c330c4fa7c296d293de614d0fd296aa6507ed1ed30cc3fb7c496e78b6ceee314d3ff08959bfb0c1977fbea49bc273a28cd3a5244c979235a64b21df89ea21cf972ef3f228b830ff8bdb78d2d50fb51ff86337550f284d07fef886dc89cf02a5ba5904b55aff0901b44767085961806e4b6d57921dad2296f7c5a895c1a721f7e053cb99f854b55e7ca6e5ae034a47133d74e08f0d6c82aa14f90c552932d138792c1664a5d86db5abf90ea5c866a8965174e7a8453e472d8a396a9179ab94f56237555f4fb60253781474131eb44787076388002b030f43ee818796432a55eb85475aee7a3dd9da7840890e35f391f9b52226d80a41f5c5dc578e4eb12da3fe24bbabfe24db57c93c0fed72eb81fd6d6d6dfbf96de77a63abda2e273159436347ca0c448e075cafd1a863341ae766ed1b7a518d75fcaba1c89a6fd193b8e337e91f66a6741cdeb4052006e8100479a3d0631a5f7660eb0e69852d381cd56416486b30b98450afae74c3f31835e5ed561f8e696cf121ad24c9512d49d25a92f4ea4972acdefd8ec73452a024ad90a31a496ba45727c7f67cb963ed9587fd6d6dfbbff985e25e284e9a49688570cfca571ab41a17376a918b1b338a61caba2f89af17a56f64e4bcd6e35dc3a8c5dc195973a5a157d6836b0d19392f8bd5065956133d94ea0943ee823aa0fa561c04a09092ca53e529e63cd90aad39b07b10398165e96e3f88e1b4c084571d54ecf0385ba8953ecf6e9489ed13f86e4abd95078c6cbbf4d0609872312d6f7bd52f3a46664e7de46251fec521185d19a62ca5a4b42c3db965ce1f3acdbfef4e737f67d43ff50ffde60ffde63f5cbff9ed6cb0fed06ffed06fee6d7b50fdeeb607a317bed4ec6f6b592a1b166b4eca25b6fdd7576ff78f5adbeefe592af20246c005584072485b67f3cf8244c4ecabbdf9f76d6cf37dcd5dbe97f82e9f96cbd17023f2126ef4696a041ddcebf3703e3b3fb1dd1744f206e557e5255dce944bf0a579db7e1ee91e77fea8d8f9cbe972425c6412d8f863db7e4a8d6d3fb6e9a74477fd28dff553220d09e5db7e0adbf7a3c17d3feaeefb29dfd37dbf29beef37c5f7fda6f8bedf14dff79be2fb7e537cdf6f8aeffb4df17dbf29beef37e5eefb4db9fb7e53eebedf94bbef37e5eefb4db9fb7e53eebedf94bbef37e5eefb4db9fb7e53b5f6fd7ae87ec5dfa03993579cc9496772c1999c71a6fa893339ed4c3e80880f74cb995c45d025e24c9e7426af3b53a71139ea4cce32fc28014e5383cee4240b0d3893b3986c94a539ef4c2e399313843d9ca91967f2863339c390e71034e88250211fc9a7904ac4ebece3fd9d67c6b78537f90e7001b55759aa2567ea6d54ce03dd422ee751370f7a03d5bde6072d3853fda2145c76930f8070ea0e2a1cc54d4e62a24b7e5cdd5d3cd4d85334a09fa796a78d4f09d42020b8cec6dd3727a7def16f28822bced448f4e0b70fb3e723df3e1edb1df676496b6cba400d8c6eba40ce63ae2ee77519eab6ffb4b66fa7c597d0bfc73279dd997ce84c5e86b453237bf1b109f97888d5ef927faf25c898edb54c9ec397f76102dfdc394c37e34c8e797b2d617801528d3893e712f8c97870bec512006619317e090967f202833b93befd151738c5ae13f7d37f8a0afbf6573c485b90f29633790febe42432175b2c7e38f0ef0ba65ac26f6fd6db627121bbd8a99dbae64c4d3a5353ced475676ada99bae14cdd74a66e3953b79da9ef74a7165a97556772a288d95a70a6469cc999229421bcf2eb503250983345f1d5ae3a93b7f6b2472b04c56cd0fa247bbbb3110d6277677d4aedf970baab993893eed7471c488faa23f665fd2aa47cdc9ef4ee9b61f6751d93d74f90bc65f6c1a4e498dc45724715b94b0168817693ae63b20e0092577ae06128b2de83d8a3fa31d9c0500f5d5f4e1f53645d557224af18a6d643d324a35b005c3f115e7444a9aa4241aa9cd1406e1745b126400bb49b32b15d14a476512614702073fd3284fc32a92b94a25455092c69fcbce6d5ed2f3cf7f4d3f0fc45cbd34fffafffd5201f68696e7caaa5f947875a82f78b626932a75dec7af6b06f27cf5528e597aef36b03fb24715daecf39a8e7a3941fbb11d7f15f947e1e761ceaf2438a3e41ea7316ea71cb68e9638a0aec58c8e5e77325eaf263247d2eb1eb0cb42d4eb66c286b27bb64140fe18b5d7dae1fd0be68823cc55ce5a92935469d7cf6f8760f6b2c4a4af0e9e9ad5283b4cfbf1eb94f2a4afbcc00a0514a1d60bdeaae9630c5dcd7ec836a8813f2dc51455479a87750eba0c26155831a0675abc6d84e5564a88c79bc9e0fc3747d50ce91a3a6a6cb39b27e59d7d250a98f52dd9473a447593b094f43dbf682bef43160498e9ac00438901e13d2d51e4dfd364d5e55c91f4cb27e4927ff728cbc6a9223da139c977f53e7ec0e1f53d62f27b4f038e765cbd4353f78f717f0fd2121decfda45cee9e7fce20e97444eb07715c03fe36381ef3094fe791f1edfa5870f7a3f94daffe02e1e46efe0fb43d7314da7dd2293bbbbc4c4d3e0986c1c5b1f5c3b592bb7cfc4d16e972d9770bbfc71cabe483e777db3de5346c2940bece0624ec9e7a87f31838abb65a9b85b96c2e8ad25c1fb1a77714265a78b45d38563330a03315dcbe1c08b7e772b1091063174f25856748dfc4aee95750cb551bd7c4d232f76e20164aa68e4654bcdc26f3eab9117339a616ae4888c878f35f23bcbb4e0c90f1f6be4b07c0c03db3950e865678f3b7590e13a507831a3b1a3c7163f7a2c1fabd1081ed60a8a8ad4194b4dd3fd6fc88a4ec96bb25ebe2622ffc3a2bae94514d58d1c91ffdd0b97c73b695aabd72e1ed60a2007b80353e0052c3069eda6f1b0460efec775f2cc7f5c27cffec775f2dc7f5c27cfffc77548f4cd6f81b4a7e50ed6126228d07ec6e0e25bd2da84351c1268dd72a2fc91116e545f2c50355bfe2488f22f6bba08af95fa9d6aca854400117f57285e9ce3b554c5e2f38178abd45ebe94379582269a0ac1332530348cd9592b22fbd744b3e571712d92811552337caba1025048495681ad7f6ac1e550c066014b13d9c01d739a4e0d9c315a85445af18e3ea71580b73186e5eb86b7142a1bb2817340ab90a0aae64efba8aa19dfa74be67accfd9dfa0f2dd10f2d51b081615fe18edb233ff90fad52ed56a947b3ba3423f18fd6383d91bb3dd86c5b3f04736df6fa1af06ab65f1c3ad88c1bc52dcdcd6ceade7ce85073e3d34f37006d5a4e488d4df23e7ddf9f0c6cf6bb2c352db39263bbe5aca0345d6605734cc9cbac24f2168c1721eb5455a4e3ed6a4764d6aa6bbea65161162db26bbc23e3fdf28accb68e31aa10c55215992816c483dbc79040eb323516523585c398718baec8b59b48855b7fe11df39efd17139704699efd979904297bbb713e6d151455e95a1b22503820ebffb9ac908222eb5d96ae906e4d21bd8a2aeb0a31ca1f173ad786ccb5a1ba0da55520af582a36ed6d8a4c5ed614f23f15951c297f5ca8d3505ae4158bb451d2a6909735f23f15a0dff3b597dfcebd97f49892c847b6930be58f15550e20026e5f229bc88aac7b7c0207460dd36d8bf2bbd833ee910d530e4eb4cab7d484a517d686b049ea2a7f6ccabd30dfe25f0ebf6f40b298f509db3136a1e9d1129a0ea9f8fd03929638c67c3b99d0ca6889bca5029a5f46000c2873e4643e31ff4d351a8d26ca9b0c095d81a9ad666bf07e4bff75979521bc7b3121ed6bd00fed939be821683acc56297049e60c095ef543c2d709f9b1437589b100830a11ff3d40247045905fd19a64d8a6b1cb3889b893530456ed59d6d4b10b392ba7883d6faf54cee0c35eb0efb1e68f5dc759395319265e906926220b36dfaf609772127e37e70cb1efdb0b95416c3303e6a14fb5341f3ad4f2f4d31068fed1a1969656dadedc9182e82f0e1d64f0170e3d0b6d3750bcd0d25c2ceaa2916f6ca5ed2d1d29da7eb0a3f138bc56f550fb813f56ced82bf62c9a82b25b8431c82e7f6141bc4dd885b6dbf72a673a5874a9f2677bc50bde17f4b3f61c63086f8913e04dc32cb862af56ceb020de387c40e9888c9b75cbeb19fec4375524a62b5e9a74c6bda2d99eb1ef43e1f30b9aa1f466f825ae2efc0c61ba8a00227c97348bdab85219ac9cb1ef207fa6b11745ad45845dd03cc3a281a6d330a99aa6794d9503fa9e0aea7b2a72a1f4820bb5ef096d4f096d4fc55c29ede97a2aa8eb29bfaea782ba9ef2eb1a5cb70d9572d25538c9754d725593db9569d25530c9354bba2a25b93ec96d0a2d2ade2daae476a5b46bf9c7bd2efa4f7e55ec59bc2078195e0f67798add14edbbfdba726ac7f75fe3ddca73c47e5839531904326c102a039521fb4eec1dd8e2953c1145a015adad08b6b19e2295e0b84331f850e0c0ebed89d676fb3d7bb623d1dad09ac2babb5a19b5ef57862a7f2eb2eb944156e5cf953719e834706b6c4db4bede9168851ef6c0f1c8cd50b39501c8cd4ae0526ebcd29b55f77ad779ef2eaddfe8588d181dab51a3633560a07de08f0dde57dd5e395539d3516480d793ad45ff372e901cd40a78af91126184ba2d004fc30022016b718bacb60b0a8c2005d67d3ff83ee7e96bdd441c750c341e424b0e645afa5a13c118418874db1681e20096d4d7d8083c820226df3eebf61fcaf3499467d04edf5fa0672aa73a42c588a040c9f9cacb45b657ced8f7bc5262705e362c122a91703930a240d619c897610608e41140f58f2188eae1af0a3c3fed95c1a4f7bae3f271aa7226d9e17fc9c90ef75dfadf9afb86fcefc32d7b50f0c9cc9112f65c32669e64cf259bb6992c7924f133267bdc5ee003ca95ca99a6843d1bb9b9ed3ce4bc320815c3c37b9325fb3dec2f02d8e86ea1dcf827e58d0639098d7243a3580062b146be4e7430bc2e64bf67bba654ed9c374a0c037fbefd2e9dfd5e22d8edd80bf642840f266a49f13d4a7c3c5b87c5927d2f9ec5332ced73a9d0b65e8405fc8659f02dcaef5f017addb8bdba87c2f38d02dede43c10507113185b6939938afab0bf6dde074dc5eb167ecbbf60c4c148d9404e325184ad9ab38625ab6578377d046ee03e4d3406f5a2ea67dded4dc9bd279b373f6e989e979c89e0bdb94117ba98833cf7e7ba6c8bed2220ecdf84757fb92c7037f6c88a16ffc276ead2137eed0a64aa821bc5d086d8439151322e1f8d315b3fd02e6fe06fb5e11f25fac9c893daf127307a2b82f371d7f07e27efb1eb7bb0981e7ec558e38ca53fe2140503913776be293357b6f97366f6c0d6f8d6eded97a4b6a92b606b6deda9cdcbce3014e6e5edbbcf378586a9236af6dad0274eb04837f8a049b37b646b78645e0c4e6b5cdf1ad7720faf1e3db9b735b2b109cdb7a6b6b756b65eb24b066b8eb5b2b5ba33c0af25ddce3b736e778a4a34905fd3e7e3ccc52cd211906af3dbe037a6d8d6264f3cee6e4e63d08deda3ab9f5d6e61c53e724c21e8f6c0d3f1e01769189ba91f626ea666042697ab32a3534e057034378f55b3d0ab7792ad67c26f4856e2e6c4e6ede2c6ece6f5edb3a79a0e66dab0cbfabfb5619672925d2c6f7de9bd71e9f08f7d79b738ffb37af3dbebff556fc72e7e6b5c7504b86135b235b039bd7b7de4ac04fb8577f7c7df3dad689ad91ad91c82ae8e3db9bb3ac76ba2cc49aa8c7698796cb5bab5ba39be3be7618b4c316f8f1f0d6f0e6ed04d4e8c7d7b7861fbfe56ed3f8418594b435f2f87a62ebe4d6307c017cab4644b31cfdf83a7c2f8fafbbdb351e202d48ce40a16c8dc017c6b76efca0364fd0084247dd8d1c01dabc86bb3948b63907c5e76ee9f0e88e6d8c374f1dc834494dd26ecc859b20c9e6a96ff0f09ee13f43adadbdbbf62eeda619b9501e57558b642cadb797f288da6de5d64e8b5897a5adbfadf14841910dc34d24532f62589a925645ac53d35dde6ba7a98f5d46cb67329a2952e5cae39d0581ebb6b4de3c8fd4dec941e5bb516554153444c550215404e573c12891094201b54e076aa64a3b65aaf42aa4d7d20ca33cae672829d0f5b7d7df963b592c438d1ceda5d95cce22694bd3a961529374ca54efa6696a927c79bcb797ea695af73200108532903b32456ec80879d4393f487a498164489a7492579e9c79223696879389f6ce64606b3b024fb49b4a9c9fd0a6447dd2f82650335539612a115fa159d3c40375f18da080fbf67c72a6c7c7d7da69bde9b4628a064e10ecb079cbc8747d5576c799f0ae14536c4317349a4e8bf38269ff451f1ea49092b49c49710f281bba26206b5276721029d28a5228586e03c7a2ecae00c4b37ae9b66d18ed55d87d014c04fb66bc6384e3b8edd4c7d1dd349b537ca791338af91d9e248c344d8aff18dee2c7cee21de76ebf73f78cb378dfb9fb1e7116e79dbb179dc5458c07104b22f296b378d3b97b96388b2791fcadffdd7f1a11979cc515e7ee5b8cf61d67719925fcd8b9fb01caf1222b2c72d259bce2dcfdd0b93be4e30a9177186304bd83ecde123a01fbb3cee22581fed08fb8e3dcbd826ac724ba0d19e3cc03b83a47fbb080bc4209948297ff5d673890492f3f810c0434ae75606ff14df67a90f60cb25d9c73ee9e15711038e6dc3d815467c50be5b84516f2c5bd577942bc93792ce4f750b3b77c6200740925ddf7f100c445a41d0ae1ea9ee213d9f032c055f7b40ceb1750c2135ce708dfe29b40068c097b951e3fce8cb3d9a37d13c5b372bc07a0e2a81e7601d044c328fbf061d6056093cd1a71def8fb204d09975318956817951b2a9798d97bb26a9cce83a2bc0ded71bbb3782de0da1f5ff4458006b10127fe1cee3b9fb7f816d6f54b1d41ac38a707d59abdff2bf88a965d37fd9c78873e11e1ddf29ae7bb9575f192b3782d21bec9fbecb4dee24daca7acc2de4ff0a490bbf710c45dee87e99e6207cef1fb6592de13f89bec83613d492d02649005fc3c6b0058bfe246119f06c06d9e7e91fbd8772148d2c6459cc10f6099752e2e0449fa5212befc21cc739f3f0af86dbb9884bfea6ce3f6420a1047a7736ee1231db62d45f1d6df0ac32e269dbbfd108467b2f6e44f5048ccd78614c370a733c35fb4b4b4aaad1ec7542cb31423e11aba54c17c495fd70f96551ee7ae3b2050a0badc45688f5ebe992785f27837e92e2fabf0938f75df519edbde8392df4b96f0da11e15ccf51568de367bf6879fa69f985e72207cd9a28b363516a1c35f30e7c158bb455ea298feb30542b2fab6929e5462d354d0b0a5f6d32428994d8336ac8a131a5ec93c2e9c347d6cacb26955254842d7628adbc6c6a56f4005b5022a3eb735330819ca72b3070aa2daba5f1501be541108701579aef785b501a92f531faf24d950963fc5c59e95081a6e5f5512925a5d747b5822049d7e09f56152055cb3719ebf4faa8c7b82dc4b8201b0aed829c63c0e5ded656abac904ef652f4f2d2c2982ba72f2447d772129e727125f4f5d590a06bb93e4ecb79eb5aaea048d1237b46aed6ca99ea3f0627a7e5b5553c049796f35a8e58a6a66b396298ba9ca6647ddcecd54d2d477a140a8f1d1c7f93498f462c931826a4263d0a31e2adb17114b23df9d7d908dbc6214d7d573475e68e695536a2e7de8ed16e53a75fefe05b6f82bd112b70bccbdd1b71c98267b6c2a7c57a13f8fe824cbc2d955e2d215e6c80e2391f03f6c26b1c32eb6567cb04ffc0d1b8deb5d3b2570a7b3b1907b3d47c79796765c18857ea9788e0185b2ea1ccd761f87c9461a820767d76ae4797d37c664f6b1f97a33048a24d6df0cf4ec5d1eff8445cd896b349af7fe0dadfa0e9ad922ae768b73826980a4463bb41baef10fa1e6b354527a8b907b515297590e190b50b14dd62564ac92f3c17c0ca01ac38f01dd379ca2a5b44c1d3d1b2aa09e3fe9863df9e82c143e25a503d7e53a3b8c1b140fdda71a37717a948291fc20f8fe97741574b178a5aba167798dcd392910259403f4b57101cd2ccd2650e7675b2741712d333ebadecd61915f5510a89b42ac7f4cf9e469884d12369402bd171cbbd1ae81506c676e14c83826cc85d42078cc8311d79480d9148d007df2000a9870dbe418409a4f7fe10dcebc1638602a8af96c8cb506598be108e191484b4e529187140d5bc8c550d310135f3323bef8f7817242031c389a8ff70bf033e3688470f7cdde881af1b5df07513dabbbd0fbe6dbca006afe8724f4f7427fdee737b77e03eb7fee909e86cf2dd3814c2909c23cc17808143a1b5d3b2c95c01c83b740420a793c02c096c92c025894c92c021090cea38fd64e3225323860e89488f5c6b18b5838366dfcc68a969e7c3258ae3a5cef080a9db32752500dfc380a923d1cede97d69168e7bc22e3a18e443bbcc508c9f3411278a7119ab0614a78a8e48e133a6b0d86badd3cee6d38d4a3cbddebe32ae670dbbcfa89b7c97380742f79170c946819ec641cb4765a3e163f1232237632a6309031855d8c298c614c6e05f3b547424fe85672e3ff1f3c914b7572249bb37493b451dd20afea4a3e4fda6837f91fb26e64359dfc46d3752547fed532b226399235a9a9e9e435197e7f5b9e56e17938db0df1fac7708f64737856eb555d11fc81373006b6c0121902b71a2be8bf4c1c56e43cf965e2d7e569b53c4d7e9968a3bac902e5693d67e918fea5da6dcae497895775b980812359d352cbd3754f93293201aeec3859795a27bf54bbc9abba0cbad5394e467e8d87c9402e79951cc9eea0150c2dcfbd7ab8d876b8f6425b1b2ea325bbb2547fd16c68de917953cbc156e9d5c3524a6a3b2c1dff9e5e837e4433136a793adceafe5636cad37a10e3dfe274115e3376b85b4e04c07e7a3991a3798bfa38eee4db57cbd34143ba42793ad143f5f2342e60a71583f2ebce69e8fa738a4bd46a77799a8dc52185ffa42dc51568c46bc88eef6cb2489aa3d20a26740fdb62ac4df0b568b7b7a189913e8ec2ad4fbe99d9ab98f277ef15f5a8a6a78dd49f0c23d52ea63452933bcd6972a7431d4d8554bbd42da7a97b341062aaccfd52030150089c387f2b66331d4d5937bd41456a2d0311c4029a2110820f109b4ea7da715cdf04bf543c3aa080dbf948bb490caa9bc4f8b8034ab95dcab0b5c426169045804a1dc79bba345d97bbcc7fd569a1404da58be6ff85064c64fc9ee8d8a0b8bdb92325e36136f98543cfb69aed2d1d29b3fd60c7f12653a7aa91a76620bd6f566b26b1a0dbf58e9ffb58eac9bcac66cc6cabcacecae11938763cd14cc6ebd72037d1c6e351a7b0865e77846d0607d8cc017560704df9e09a8ac13515836bbafbc1b55fc6931e5953b6cc48fd43eb5edda438b606a8b5f3b1b5656a31636b6bfbb1b565fac7d6f16ec2fe3ec6d6d44858e146deb04c9dfac1bb1f755aee68134256ec60d3e283cc30c5f3410a789f61926d86969618525ad15175b7b5765a1699abed3fa21d06a8dafa785e767322bb4a3409a496e948b48b9a99a33508a0bec621655e00b518f3aa5d936f8f1c8b9345a9797c3bdabd77d5b1b775466140a4ca392dafe4b484e81a70b49d745b401877fb63c16836180b46d329d6d2c318dd076e4b89761ec6ec3e445f8ab5e7163365f730dfdd703ea65b0d1e2d979a828085306089f7b5950bec84a6bd92f01ffe16f0157bc107b71744071ca00d1034058fc5b31ed927a53260cf0425acda731ccae8b32c379c4a20dce092e8ae1943108801a47183bce766e712ec85ca30538c4718ad175d125d393f2eb424d879d1856074e61fb173dfdfd5a7fbd7d02a17a0342b43f64ca59f9d46be53e9e7d1f0e9ed25fb3e835d20950b50c9d8e37eccb9ed875051ec07f61dc6088f99d9ab220a1562d68f9fc757e4026a0f1398bafcdcf49d1a87b6e3d5e307a61f068f4bdbb3492e7e374309711eb972d19e091c500680bd4cf0cb58c5b388b167a4d9a1447b19d22ef0203f981c3d1f1d3e468ca2925c6c92cb4a7231492e23c9592739df3a03116088dc9095385bcc600b98fcef7554229a8aca40a232141e9b40c6d849a00072f7231448ddee55008c728ee1810ac3b947d5c384cf470887c441f530e936e316a06503179e2a307281ef02deb09bf1baa317dfb1b985404e312a5804e856ed39a00c7e18cbf64c7d7af7aba943b9e02bc0ede407beb66da5f34f717bd9e22bf549dfc3a8c8be6bcff8c645ec70b2181a61a9e1e93d7b29727acf5e7ab22325d1c946074bfeae353a62f2bacacad0f767dc14e9f20c5f6ff7cf59a5d0a9a47b8f5255262fa9e9bcd64b55ca433fcecb6a2e6be52dd2463ba901e05cf6a80cffa6425e52b379da49c96fb25a9e27cf7401b84f5315f252a1274bf394bcc269331afc29b53bb27fce0219c84071200b44007bf252a60bf8025360485ecac4efb9a4a457144353cd3734f26f05432b745a792ba791576443e954f20a064c839a6f581854657c64f354b5c8bf15325d4aa79cafeba2f015c520ff56e824af189d9094bc62fc7fecbde9731bc7b528fefdfd15c3f925f04cd88400522be8099eac2592234abaa29c3c3f9a77aa896902230e66e0594841045892174976ec388b9738f68ba3d88924df58242d2ba1e458fe80dc57f5eaea0399df17d2fa42bb62bfbaffc5affa74f76c1840942267f9dd54a130bd9e3ebd9d737a397d4cfd8857a3997bb39323a6fe84a71f99d28ff8fa114f3f52d39fc84e7d6f0602562ef67216228c6cec7d80edcb10508ffd4b1e9fcd458ee27a50b3b06457bb9ee6fa6ee0612f1593d8c4ac765b78f21dcb91121189d7bc8865366ac432d972b17a1faf74d9d5f8426b8ed83e9901dc04552175f34c70660edb58b29c7a05db24dcd3acf308fe76e099e04c106e67b26c01ec675a66e2d94052c7cc6fd0280bdbd5e8e54052c73c60ac249b7693bbc7b8712811000f08da4d3c83c30d4db36eb280ae1bae6426f0886db648dda4ffb6efe1fa14aee316990abc6026d8b6953df36259e67040057847590670e0d9539623a87249e67063986cd9ca842843589160858486238aa1e188588134b6d50a4b85c4055855144a096b12f7a0ae09dafaf569adccf6374a1ab38777aacb1e9ef9171fc6a70ce29ddab201da98ca5be777498b78663f8b789ddfddd3225ee777c2249e993289d7f99ddb47a7adf33b6614cf8c1bc5fbdd836bb751aa3634363624541bfa93c7b8b9bb5ef63413692ccbe21012c74316848739ef7d3674d8c0d52eeb79cc785e17ddac767eed76592d3adef975a8c590d07638cc8227bc07b48c37ddf99d2b7dd3933c129ac7ebfcbaea8a27e5899b5277a301f5125cf409df3b8c8c6dbacc441e58c84b9ac80b6de4f53491770f0b79fe0358c853480bf7b0b1c9b69dc8378b85d184b9cd8505f690eab662412dcb442e158138c9985df4612ef9ebb4bde9cd25cfb381c81c14d4660c576aa6be17de50d5c7083cfe4cff2c6cb2e7a54d7d9c9f4fe8c7e07882bf2e8df5fd607d13dfeb6de9295a062d41808fbd2ddda030f9dbd2bd8c6f3e1ed4718362471d3ef60370d836e101b6a3efb56ab86e7aa67ef85450c71822ea8e67f623398f372cfd711ffbfae300cac73605a31f3e55d71faf3bd9c800cd797c587f7c447f7cbbfef80e7dafa51f3ea53f5e7cf86f48ff956c8058c4913cdc259fcd10af968ae0f461ce9c3125f3146e86cf367b18fb69a2730adbddcfa8b2ac96d9741a66f49e6a947d8bcab553181bb84904c1f19d19124a6a3573d6941ae153aae2185528461978c69cc152dd39c5556a7900577bf230962c93c5524a53c73484eb3c79e64cc073525a53c710c0b59dea73e48c29d559f418b38271c6148a4ef5394c4b65b194ded44dcc4a7d684fb3c64c6c2e72139b8bdcc4e62237b1b9c84d6c2e72139b8bdcc4e62237b1b9c84d6c2e72139b8ba189cdc5d0c4e6626862733134b1b9189ad85c0c4d6c2e8626361743139b8ba189cdc5d0c4e6622f139b3e8e2bf65e7b7bf3dad5cd6b3736af2d6d5efb54dfbcf6fee6b54fe9ffe2cb1014455cdbbc769b7a68c4cf37175fd637afbd124bf8210bbab6b97841a750179fa180218c793edc5cbca86f5e3bbf79edb5cd6b2b90ed1d16fff3cdc5f302d23be0be06eef75971fae6b5e769261e7d01f088e2ae0092e91cef40357e9e8ae8a3c0fb5fb821626ac2d77e01401721d332e458de5c3c274a7d0dc23f0260b40eef81ff4d11f74e662256ab1b10778383cf4af73e14f41e6badeee81be05f04001ff542e80694751de2ae435c76ba9f43676747f755404e37d0b9ee56b81eefcc74b5d3f5ecae58189aac4984741fcd65c08e63c451e005f27238601af797bc53715f5644fbf350d497896e5ebb20c6036dec343385417f1b9ae962d6764797bdd06b5760de2ca720c67592d940a6095fdebcf69e243a6f89cda007b1254aeb40a942dc902805768e558de9255ffb09cccc7312f4f3a79bd73e94c4d060757c878f571813916dd17e69ea49b85720f61afcbfc3aa13d91c4dc7268633535d8e81bab679edddcd6b9f4aa2419704386192b4770aa30ba9dba21061a234ac4d0285b12e146ec348676085b9d2283c55836632fb0de68ab58430604a29f3bb82c89e8b20dc730d0340dfdb5c3c772fa5e930e1fdd8485dbcbcb9786573f1eae6e2fb9b8bffb6b9f8dbcdc50f3617af6d2e2e6e2efe4d6da472d2758db5630b28cc4568b6e5cdc58b2d70dd666caf055dfbaee044afb179d1dabcf6433127df173d7fae25ba9266dcca2eda70599652c8c825f2e84e084ee0244c994a71dc20703b0466e008b1bb21360357b076cacabf1603d88dcf036cdaa5417003b1c39195d754e5f88e5da26ea1ddd8ccbad1d85c2e6e3bf6a15967ed923ee32f5e6d2ebdbdb9746573e9c6e6d2d2e6d2a7fae6d2bf6d2e7dbab9f4dbcde59721288ab8b6b9749b7a68c4cf59d02b9b4bef8b849f6e2e7db8b9fc32245cbea053c0cbcf50d810f6f6e6f239487051df5c3abfb9f4c6e6d20ae47c6773f99c0e9ef302d83be07e862201c5e99b4bcf6f2ebd26e27e108f60a827d25e025c565240fac89dd004f974d5f35ba8727eabb5cd27aa984fd728cf6b924fa07f3f770fa098df40d61b1ce9a56758a13f807a2442af41cbbcb1b9743d15f15b40fc722af40d085d82ff44c4ef20e8b5d85889c7d12a25f0e92bd6890a444827108d904b209446222ab88f8cb6749e17c24be0b039600e927eb668fc3d6df2fdc10dbddfd3bc7b2f218d8ebc0b74f02c774b68b4a12ec0c83bb725098df7db1568d12bdde219ed8ff71e440aa333e20771112c1a3a9f6e2ebd474708086234f8c51081cda54fc394bfdf5c7a1786d3879bcbe722098ccfadd7441e164b65afa59f6c2ebd26892a5d83ffdf434142ea4a4785c06bb1ec6fc0387c2712ae4488486cc4122fc1f07d9b8573792a1628b28c25d0a3f87f18c9502244246ec612af40d137688bd1caaef0c9154a4fd90944bdee2d432ddd489c146d2edd90bb240e0ef1bdb0ff5a9b4b2fc0045edc5c7aa605ed7919221721e14dd197346e05821601cb10c2330f62b3bd0b8d0ce3ed31bc2226dc1bbf4c2bee3d507e608beedd780bd3ee716c8569f73ec80a1befbd102c6595f5358a16dda66783d0e063003a664164ef31d01f0f3acbf4dfb2027d6f35f0fc40d87b0cb8bdc740d87b0c84bdc73e4f603e4c7b8f81b0f7a89f24ae87f5ef828947fdbba6ed637d9c78f41f4f6123fb767eb739478f4280ec909b66ee6bd09165d3bf1be8df35690e7d1cff95f60bfe922df76335d396cc5ad79efbde299c0a8fdf6f0823222e74c8714d8f983352222e9ec923756c6369c6f18399c9188cad7023b39632116d99c114662f589a76e007d214b6029b71181ec2b7d9b9cf3470cc14602076d91d177b2cae267c7c8bdd725cc7665146e8e53becd3818579dc58e8e5fbebbe698bb866e8ddca23628ae7b76ca3e51a2dbff6179debf9b5f060cff3c3933ddb904b23cce91a7289a67a78c77c7cc7bf509287d69e5dfd838c8aa16b98ba7e485d23a16b7b18bb2374ed0c5dbb42d7eed0b527821c2b6438728e44054609460a519151e88ec8b93372ee8a9cbb23e79e586985d09d7144508d5fc70ead9a244c696519d24a1a88e2e6a1fa99d04a18d08a99cf4a18cfea73f51a50e3687184383afd50e148f0c279b1bcc81e5479ed95d55b6b17e1eaeef2ea0d1d6c4d445eb89018f35e58bdbd76369efc53eafcd3ef63417ffa3d6dfbb5175797f428b41f315f7b65ede2ea322d997ed6ceb1cf0516f8297c184c0aef937e869b2824800350000640d0fff47b967bf91f80d4affe6cf50f6b67ffdfc5d5df4b601a107434ba0cadbcb3bab47a7df5f69fae77258a595b797575a50fa488e84fd0e0893f5d5f5d5a7b0e2ec8af48305e41f525b380fe79afaf3dbbfafbd5a5b58b34a02bff962eec2eaf2eadbdb8fad1ea4acaf4c6a7743c024381817b0106d847ac8c4f5657d65e016642e3248afc9fde5a5df9d35bab4be1ba241958e349058ae142240a30441268c870e521bc63a2b03fd0ce08171ac2db8c17f071b896e0deae1d479830cb2d76eff94fd75bac94169d41acb71f40986730bb0578514828bcf32a655c9a8bca7f50c99c2351623702c3a2a97f675994ccef04c64a2b898c5bb0104229448b32911e4c39e2c4fe04996cb5fc09ca8b99034c159729e7b003cb9acc60b80fe982b45f8b6f12ae5cda5c39b7b9f2eee6ca879b2bcf6dae5cd2c1bf0211bf84d05f6cae2c6faebcb9b9f2b3cd9b2fe9107103fc618e9b6721f42a04fd6a73e54d1d72bd0741bf8c83beb4b9f2d1e6caeb50c09bf1e40c87739b2b3f8c277f1f925fd85cf9b7147e0ca15fc521bc06407f1d4fc870b8b2b97211e09c8b27ff99007239ccd1672371e5527e73e5b93c2d3cbfb9f28b3c6f061e08f5cf6faefc8a86ff42a4a4751581e744e0fb713810f59a08f98508f91984dccf16e1ca07508937a09aafd13a424f5d14757c83b62e047d004117a0c21f6eaebccb5a696573e567617bfd1b24797f73e5e79b2baf6eaedcd0a10957781f5128b4beefb3fc9b375feabbf7f77560f64008b1fd414087b6f145faf7016b760e9f7eafb03e7ad80a50f7c3b7a13297d9484ee84241286d35caf3a0e56e6cdebc28f5cfdb7da2b4726ef3e6456888372139870313e3420b1af9d7bc2bbaa2fb3c1bdc37df7dd992e98fa15cba57593df65145ebc1efc6e6cd1712add5b5b54a87c4bb749451b817ee9529268c00766f6ede7c81f64177ead86e2c279bbf17b56594a82f82f1cd5a51a1495eac68859be7680e5afee50c085b117d009b1b9b2be712924f66096c5bf726259f508d73a22b2ec38c7f53ccfe1bd1966e4654bd2417a55410dfc44d04d658ba1769c55921379f8136bc10eddf66c71a2c276fb268f7360a198314b4bd5ea57d02c32fdab54d873719bcb7002db13dcbbc0f894d5b438d38a73e6013d7d18f9329977ec7b0eb39e1765bd3d10f0536fc5b4d87dd7f852db126a94fb9443f36e307f47bd499e221fb4d8fb97af3bc0336a1c5c576dc9ab4145a46b4e306b760a728b89e1a4b76b5eae847029b7814944f3f6693b83381453cfd503047a688a73f46836cd80a9bc2c63d94946c0a8ebde764529ce668f6febb6e474cfd48000f3a99faa1407fccec4a7e5f2bb1b1b16dfbb7a56dc9a06e3332a8e7528cc527136412ae2327412da8e9d85509bb782e6138e0b160067b925d4d13229ac9c392177881ed1892cd6fadc6a80f4d31836bb8e1d809b301509c430bb3f10c7631a6c059dead500e0f4b96e34c497635b968c21ca0653630bbf20ada4392071bb14eec723df7d74bb2e9d114fc2dd3c4fd7a0728018b775c0a307c6c897a0c1147db2b9ceacc3326e2a682396c87f39bfb9a22d6c78e1dce6bf0dc870e4e96c8ff90f7cfe406aed6f439fcc5d937f54a0d3e73e4946e39e3fa2c8d398567f571a752d32b35c7add6f443819ffdd43c7f91207a4c3ebd89686b63d8afe5a72dc77115f2cd2219d9562c1454e4a6c2d99622c2b0e7884c4d96c5c6a3fded422ea798839a3f614f0ecab3d8b76ab28a5c11acc8f280a6996559924bb2ac0efa13eee4a05cc7876415e1de89f0a48a642a589865680db964b615a28a17805df10270f498af39284b56d0e87e449746f86144ecdd5a1ae19246f7f3b134e2143ed5fda02b8b70bbdf4ea511fb0f8f67bc714a9b23a2f33e716977522012ebdf7808efeb4422722ae1a76320ee87f1100fa06323ee8771922c04c64c3ce850e0eb5d98d5f1a1ccc00cbcc32856817e7a5ea2dab1ea8a6a8aea85d512d509ab11435fa09d403703cdada1d76be96539a7ea87fd53f894be1f8fd34fc399a59f6aedb06fd5a8cb72aaf09d0a9ee611361d397d38dc438509ecefa140fcfbd404d98f0f9dc2a7d2e23b74a845c6bb18e3912371111c921d0abe38fb665abc86845be07819672e82eef9da507140d348deb40d72fad8b422d31655cb7edeb3cc0a510a6868441d942d322e97ba53badd29e7f0bf74a7a434a52b25bc63ed0fca52e3f0d3729bb1e1bf1c5368a8ade24aec2de23a4553fa40687db94d458346300e749a0a05369504a09b80425331c0a6cc9f0551da4c79bf4d79fe1ca736a780e5db94d58b201718bd4df93b0ba29850f66effcddf512c96e4474cbb62c2011777ed0e5dbb0a5160e41c2ec98fb068e1182e08d78ed03552921fe9fcc1ae74d8315ae886d3a9d0b71392ff71190ece1e09ec4ac00eceb8732472eea4ce3f2ef3c4314fc61957fc51c163153ca3fffb2f82290c4fd1fafa512a63d1f5c41f973dfd103e63bad8d64f927a3d38a3effde33b81e73b9e7ea06975fe60e90766ccbafe5decfd71b9aeef75b1f5c7e599decce358054341b036386a7a6ccd82cf50e0009942a52029440aaec7a2e5383e835d1dfe7de2d1b582f5c765bd7301bbfffe0eae4f61fd3871fffd1d529f22fabea08ee10f52f6a3eac7f119fdb84f57381680a240684e7d9fdf476bef38cda48f639a453f4ecbd3f7f9ff0064792aa876fe604b91965c449b9bd8fde3723a8a6f6a5489452a64a69f8e9ed1f983ddb51952259dcbc47e60dd3ccfb15d1c5bae747e6757082c53a64c7706772e4b1eb6cd66f47e82f0d62185c4f4f1c2458af0d6582c45275ca2308fc162681b850b14e6196331b819ae4da8b3c9429b7f5cb6c2650978da5996c8edf01923610723b4402ebe4e68923cb22c1eda1437a7157885408d6ed58bb90e64cb4d5f2ca022bb38ce280cb93d4e341eda91466f2320f35e69429e3589ed614ff24825b00d4f46f223a99049da8f1364508ed2c43dec1dbd476ca9def9001ea585fcdcc79ecba3c9c1cfb372377b1bef115beadc86773278c9dccb5ec2a3c9c1cfb372f7243258d6336610cb093ef63c1e4d4cbd3c1f734ea2318e2bf1224c89c79fcb03dc88476c8e2638275193e5a18c9167c12e7f308f26c32e2f833a26dba2a7dd329eb027270a93253f74c1b738d9bdaa396375e96feb07c9ac8bab568d12e8ce657defacdb590ce02ed7773a7f80cb5c26d6bf1378959acf6e8bcd62573f627abed3e8bce77bfa518705fd4f5201c716ef8bcdba8932d8cbe4c4a79029480aae072718efdcb2b061ea473ab76cd2b96c5238fe19531feb5c722b816beaffa3d6b945137ccfec5cb5894b938c772ef981db971750b00013f0a2c000104081fcbd19c278e716cdc91e27bfa4ff8f9afe3d28720b3c211fe309f97a3d7f8ff7d9260c6c59d89bcc7aa82d112709d0313e3161999352bfd45d0713c6538f382de3a947f036b3e72983f188c35e4df79d23ce1c71e1edc3adbc9cce4d11d2fc2579ff23c7c0eaa0f108065faf87809cd33553eafc32cdbf0c52effc32111ebfbb26c263a69a89e94670624ccbebfcc1958825b8168d214198704b4f58780d9798b1adb653f86f69c9e021bdfce09fa9c748c717375ef8e2c62bf4f7d1d217377ef5c58d57f52f3e5afee2c66bc2ff9afec58d1f82e7b52f6efc5ca7e969fcab90f1d530f257f0fba9ce3e0032e17f5938ded5bfb8f13ab8defae2c6db3a7c7efac58db701ca2b009b01fee8932f6ebc43e3001d1d40fef48b1b97ba13fe1e225e8c87f6265dff152a1c5158c8fb26fc33b4dfd405f6afc4fd6ff26689822836afa6fc97bab3fc302bf4a39bb404f0f6a3d37f9fc8011ff8fb42edaf798f6dcb6b10d144bfffe2c6f3d2171f7d9426e422fe932f3e5a4ac6c7097a18115174c8f8733eea6fbc2d259264e6dd0a31a788d2ee60e8de7853124dfd4a8cc027c30479fc21f4cd27e1f2241958a7a97e28c8ca4fbff8e856b852e90aafd1b46c583df7c5474be1b245908337a358c8074b9930265ccb38b194afc0a2860d4e07e8c2abe1da06803042f50250b05760ad237ae63a1f6a62c903a9a2709a3cbea8d8095ca838fcd0d8d090857d3bc68b4cdbc64d579f72ffe33ddc74ffe33dbd8eddff78cffb8ff77473ca355dbd8e9bcd39bd3967c3bfd59c3ba3ff9f77e7fefd92affffba5391fdb53a6abcff8fff1de1c85a0db73732cc8983b45bfbd59c25fb1dc8832630fd7b1a7e3a64dff3d133e332efccfb1a03aff7ebef2721367ef62f01a3c1c6040f9fe32507f97940a7bc64c4dea7a1a0d7b3358ea3adc65a4a59a264ad8f3b0ed4bd56c4a54dd3a1d323045c6939ad88e111ee1a3b3a06ece84a48679b8b6c4e72b2f274e6ac10f2f14fd9fb7a257247d8aeaff79cbb4817860dad6826cd03a00b9c04d67ce0dc984d96c9a2e3b9fc55e952e80c5d391d4677f8d4420a80e55e21460e3c5f5cb1be7effe60fdf2fab2be71eeee8feefe607d79fdf2c673fac6f3346cfd7d7dfd37eb97376eaf2fdffd110fdd78515fffcdc60b1b2fdebdb0713e723e0729effe60fdd6dd0bebd769c6eb777fb4717efdfdbbafad5fd978617d595fffcdddf31bcfc60236ce6f5ca41888f8c5bb3fda7856787b938f7f14a423dab3f1e2ddd7369e5dffe8ee6b1be7d7afdc7d8de6ba18f75ebffbdac68bb180cfce4345a2808ddba914ebbfbd7b71e379ea08c3fa112c8a01940a65017c80097000466f0a759f79ffa2971ec1bff1e2c60b1bcf6dbc303604fdf8e2c6f98d173efb60ffd0c6b3772f523727565b4abbfe5237215b7f49babfbc5dabfb8d17effe687d79e3858de7a58d67effee8b3f3775f6bd1c6f9ecf6ddd7d6975b9f9da7ddbbfefec60b1be7a5f52b772fac2fd371c7c393d1343f2072beb5f1ecddd73e3bff0037d233d0114f3b445889901ec885b7d67b6027b2332463d7d6e337dbfbec5db09dd662a1f02d32e8875b708fee2c14ca99f897dc47f7d0b858054aeea3c5e248a1dcb30a34c1709400fcbb0be90cb13a954475b219d9fa95bb173f5ba483415abfbe7e79fd37775f5b7f3fcdd658e8ddd73293f0bd1128f2395a898d67375e105b24e90c11f75b7fffeef98df3a2f0aead1618aecfad2fd23a6c3cd31be016cf0b620d121d1ac49a9572c98df3b49d68cf4840239fddb848e964c8389381f592cc08a2b4f13c857bf7028432561a0faa850923dc43ce1a0f322288303b43262bbc63112498cc21b715de660401e67dc875b9f7de7a8a2161687182d11aa22373e336edfe4c25093a658509865e6717f1338b41392272eccecd1c4ff6fd44a2a858393ce608ef666df9a1a0f597b655918ce4fb79f307d12ceb2f65a9503ea4e30f4e2a10e64442ae53626397fdb2bcf6fcea87ab2b6056e093d525b99408587b562ec9b5306dc2144eeab97f6e7f4671b54182b036ef79250a3d61a0484f1a2d487869c931efdab37d13c39e651a793de15d4978bb2ad63731ec8426ebabc73c2b314faa1d7a2683b9054a8e9facbda4af7eb4fac9daebfcb3cadf7e58fdc3daeb6be7d65e593b4f53449ed7131e9a9aceb2b5b36bafafded2d7ceaede5ebd452b000e886f4fd89371f1c1fd66b1a069c55c8e3a0a0394b780dd20ea05b344d4f1a8b63d975320c5a3c542ab05ae6f6bc305b50cf685f0c4f0a4da8e5f0b0cc772978d103aa1566fcb834a1174876ba697af3981eb296a595e5d66f7f3646e85a44b9e9e8984e9793e7fe4b5736bafaf5d58fd64ed157df5e3b51f82e9a0ebabb7f5d5e5d51ba0fcfa7b16776bf5c3b5d7d79e010f33e5b2fa21f35c80841f7210ab2bab9fb2f07310ce3cab1f32686be798f777abb7573fe4d0689eb57350f0a7ab4b309a57af836124da87af24c435cfc7b6812dc72621e6bcdb19ee2bab37e398f338813bf386d873afc05f00821af03851071e17d58207887a4479e33589ea01f1f19ab4530abf50175e0b5e8310ef10e310578e65881fc72cc427c424c4205bd64fd27e76e574de76eaa60dbc5718405a7b7df563da51a18d191a40e7844e118406b8cd2689c028698289e1f6e91767df5c7b8576faeacada7918213dac30e14a25f0ba31f8e17d624049513f0c7ea8c7adfe2430a812dbec2afff574f9b7e8508d977f8b5362de022b89f257af8301ab240eafc75b61253142384719604609ec7cd42ffc125711ed52f315c7ae605fc9882ea0a2aa9648d99ed8a63c3531b1fa93d50f57df5d7b76f2a949552a53116c5bde279eaff86a598e5a5c2e6d7b6aa2ac944bc2ee1c6de7b5375accb6136d283aa569905a96ca4f4d7681124d2797e4082579728270933da538aaed0c8b5b1fd166fe448771cc0d64d181fc2953b2efa3ff7d9f791fd6e51d69ed6c3e63476aed6cfe5e4f84c6d364c9f4b6224fac5e5a7b899164c6d224590dc579887f8352066e5c8bd68a8be510f713a6b1cf6242091fa2de156238cfb3755b5cdcce16b7829530a62501e8b7e303272a265fc1960500d56cbb5a3d60d0ba6742d9a2cdf994f5a76f7a1250e83fac3dcbec3fc1f30830c15fa213584a8a43e9b3dc9429267eb01bca1fb238e14dc81cb238eee5b285cc4f7d530b75985717d65e6f01b9ff8422d1624cb005248477664f4dc06dffaa642457bfc16727d9929df3ed6559e0012ad9c3653942473c9ec45973498e17b41535edd59b2dda805b5d7f8cf10585115f7ff4596aacdee42b91e432851699b9f678a84fa94fc8ebbfdd38bf71717df9ee4b329237cead2f471ed8ecfbecbc8c64bed9f7125dd4d1f0df4082f5df6ec0ca90399e83b524845ffe6c71fd3a5d54caf4b3f1fcfa95f565167e75fdfd8d8bdc0b1b7d61dce2fa75ee994436c5eb3224bdcc92debefb12733cbf71feb3454063fdcafae267b759e9cfafdf5c5fa63942efdd733292ef9edb38b7fefedd73f264f7466deccaa99f106cfc48d6b053a4de4e106ffbaf7a38b0fe52e6f1406a3aaedf58bfb2fe416bfda3f5cb1bcff756bf65f1f7a566cb20cb2591b7c786ceafd67f2bad5fd9b8b8f14cf746ce6757379ecb888c9f3b2463a3fd9acf16d797d63fa27d29c108fd50ea4ec9f76ea2a4e1ae4d22e916f76cd6afacdf5c5f8c51e08d67d6afd081e795e4cfce6f9c5f5f94d6afdf7de9b3ab1be73fbb18dfa50983ea2579fd32f54a74d46edc8cefcf80b71626f86cf1b3db348c8e5abe371306fd84edcdb084eb8bb19d19e6198b15b37e9942e0fb32c2db8c725f5fbf1cdb97e1debfd576c643bafe139cf9e70349c9d390d5c5d803494bfaeaabb1079296f4d54bb1079296f4d5cb890792967478a8e7663ce0f5b5672982faea1511d6d7002d94ce4be5a5f152386c0e91c3eb231c2fd2c5d2ab6bcf0214800110203fe4fe9b1cd5261e63050ad3f771a41faf3d0bcf0b7d123ed143e99004d66713dab9ab1f70bbbfd75797ba92c4892497f456b201c65e53fa39083a4bbdd37192b9faeeda33b4d4d54f04c9ec5fc49644d8c5d55b54e294bee949ab2b6b1756579855726ecff4c7ab2b6b6725ba30050c69a2dbab1f8bed313a939f5b7b76edacb002cec96b32b00eeffc009c8f5697a0b85ba98793a2c05a98b8ffd34902223440486a85772c4a707bf566f47812789a51e4cdd595d8e349dcfbb5bdd1139c49df3c7912dbb3e202b5c5d468f6365c02dafffae16660d33f4bdf3b5b0d3c5f1f27b68fa75cfdd80c7c8e3a4dfad94f66f0549f5b264fc6ef4c37dc6ed0142ed7f96f52683dc8d59378c6ab617b0aebfb03ee1827dcb1afe6b8dc791c37b9ebf1a08ef57170f723444fe2198008d0001285417343e6de74e7498a893e4e681efd382d8f66f807a0358f05d5c0963c87a9b34813064e109803ae8f99c5d058549cb0cc04b699ce1e9193ef924a0d6745732a72ec11bf8a43a59a2c585ba11b4fe2a74d9bd203b35283b72e19c178cc74251b10f8a62739966132ab7b9e639b4d1ce9d9706fa867f3b4f9745ccf8679859e8d13d7b371627a363341a466036eae65e3445a364e4ccbc68c29d998d6d737cd67cdb8e277ad73c9ae4a459d3b8685634438b60bc70ee1d8291cbb8463b770ec118e62217485b08bc3bda9c0c95aa1a89fac1586e9df08fddb4eff76d0bf9df46f17fddb4dfff6e8276bc502fda3393281f6d29baed43efff8b264d73ebff581affbb5cf3fbe2ad5b0c95d53983bfcffbdc45df61f9fad73a7d7b91488849fdf7ab7d98f64ec3baa9f1cd64f8ee827b7eb2777e82777ea2777f5a6135b4e9dac556ac9e6e156a5d65b8961dbbf566adfd866decf764871b86c97650fcb25797c2fa82e546a7249de77486e3f14c235415b7732837ec522fa6c2366a4b25859bca8a4f5d07b9b13455bb5277aa8f3515db27153b23ab72ae9d5e9d16ae7974da98ecd546c9c40fac1e7b72edb92fff9c76fc593c51e2ba6253c1de05464060cf7f38f7f1a87b1c56529141d5b95faeeff5efafce3b72a400d673bbf34a5aad9f95533a488dc572fc9f5cf3f7ed3971ab5ceadc8fc28f7d5446cd5fcfce3ff15d244ee3344ac4d5b28248cdc37266219ad884c38736f33ccfdc767eb219d04cfdfcb1b29693a7b7aa8e191c070e20a690b9d4b9de5ceadcea505b7f3897e70a17375caeddc5ae85ca2de05d0ef5aa8e99d738d05b7f381052134e2f1ceadce72e7ea82fe78e796b5d0f944ef9cebdc5aa8766e79fe823edeb9da58f03b57eb530b9dabaedef9e942c5ef5ce79e1f2f74aecf76aed617a6a877617fe76aa57375a14e7d7dd4d8004d7de160e7ea14c34a5fe89c6bb8497ce063d198ceadaabe40d1d0173a3fadf8fa42e7c79debb3acb4fba0cee30b14acd1b9446b38d6b9be009ece270bfac9ceadced5058ffbbedfb96a2cd0f6f08c05c0e7e442ad73cbf5160c86dd41b7f3018f195fe85cf23bb75c16d557396e81d569ac739d7ea0447d8116a52f9cac756e31b0b49a7df5e4163ab700758a3264a7c8e907dd852e6db9fb377cfa577c8bf7e442e73aeb08a973a94b979ac6d63bd7175cb7737d612e9922a19576a94b8fbaf3bf163a573d9f0ece34fc980c7864a173c9f3850c18a6d80a71eb7cb0d0594e1e7a742e2d543bd781b4752e490bd39dab73d2824767020c312f92fb1620b0b3bc4003eb2c79bdf3416779a173cbef5c8d6e192fd0c0ce2d3aed3c207cb42ecb528d42bce586a4afb6d0b94e4726503f0a8c0dc3d0fe320c520fa81f2b8a96edd72223cc34ffb2bf50f38002d2349d4f3a573b9762a6983f5980006f0b17a3fc5a4bbce1fe8ff6807b9ab836e36475fcf35b37ef9c73e15f3f70e7ac4bee9cb5c89db3fae7b75620f4ac8def9cd50fdf395b9d222cc9943965eac7ee9c9d09ee9c35027d6ff5f35b37eb0e0da90677ced9fab1393247f4cf3f7ee9ced9397ce7ac4bf33f46ee9cb3823be758700300dfe9b355c7d1028c2cc0c56638300444f1ac7051342d392a9795d9a7c0887aeebd73d60480e7f4bda7682d0fdf39eb0106d5c0a6104e7dfef1cb77ceb9bc02cc37f5f9c72f53cc7c93e271e7ec14be73ae0e99fcbe8b625e58ba2400ecc2ff541a6c6fa2c980e97b4f01209a1b40300890fd9e8be65aa95e97f672e1935b4d02fffdd2cc10500fa2c9e37b18abb873d636ef9c956c334d31a1032d9c888953cacf3f7e095af0ace43b77ced98fd07e99942644f2887eeea563598a87f706634117c7c06c857edae69de4039cd2cce71fbf7c8a76206861b0ae3e15dc392761dcc477ce4986c95fa8e07e6ed7229e7206db8c76c603b9858b397ce7dc0cf64d96a8160fe1962e68f9501596c44804718b178e17dc39cbe2c7422fb778f1f9c72f1b7452b3e8663ca4afdd8bb090a7bc2e493285c1d744e5ced4927a207f5e39fbd5db17f53fdf7a093e2b2fd0cf976fbdc5025f05dff31fb0b86799efdfc077f37f81efe573fcc3015117c0ea4dc48a34dd30fd1ba17fdbe9df0efab793feeda27fbbe9df1efa572cc03fe4290ea7e146b4eaab9fbdf3d5dbef7cf5c6af75e6faf3ca59e1baf55218f602777df9d65b61ecab22ecf90ffad1a72f7f7c8542fff2c7572868fab9f512f3bd403f142204be0abe1eb08038513014060500b9df7a4b877ca94cf7ad4e41a9525c9de2cb9b1f8d7df5f6c5fd5fbdf1eb98e2442c746fedff3e73b35efff2e279419e5209280d8827b24441dbf6b3d5705731564668725d9c5144af43e32f2fbcf4d59b575a5fbd71f5cf2b2fb6febcf2e2972f5f6cfd79e503f6f901fd7cf5e6cfffbcf2e203684e30d842b78115217caca4502f8215152685121fae1a044746683e706c42ad078e4fa8e4c09a205272e00896046ed9bce4cf1fbff8e57b5727936ce4ab9ffd301ec8a5e53faffc005e634e728aaf7e7645a48d49d67f5e79314c9b6407f7121ebf7ae3d7adafdebed8faf2c7571ed21d7a3a0447c5659758f0db17fb5daafff2c757322fb4f4daebf8f2fcf31133fbf205669bf9cb0bbffcbf977f120afee086e7a0bfbc78fe3f7ff24e28e80b2f3c01fde5d22b5fbdf1bb50b8175e78e4f9cbf7ae86623db8e161e73fafbc4f6b23c479e185679cbfbcf95128c453f7d7262a9fa90dd566fec944ee9f89fce7d9650afd3fcf2e53d0f473eb25e67b817e2844087c157cff184c24b929d09bbaff97651e1f44de8429987bb0957b1a85f92743e9c550fef3ecf2df94a1fce7d9e5fb6328cf5fce6028376ff766283ffa5982a1506fc850de7c26c150de7ca62f43f9f2ec0fe20c4578b319cac3e21efedc3fb9c73fb9c73fb9c73fb9477a5b8bb38fb41ab5e01f522603496ff60b0e92b145f54f16f2f7cb42d890b495eddb5584355b19debe5345263876a9c801c76e1579e0d8a3228b3a761462562082e8c401946d74ddc03ed675cd267392ab107514823df30cd17cf8b4837cc3757cc76f3648be6211ec6a18c5c30c62119f686622b04a7ccd4984d4b0a77989108ff89a85489e9c6e38aeef6941b2c2ea7c14954934089bda6480520e7f40f3dbbd5b6c64376bb19d3bd4d12cb0eabc39ad0c6085a8fc29dc8122d7b38046e197ef279ca953a4e24b0779be4999111711fe1d621317fb8edb2bc15eaf69577a451e779dd34d08cca888120684ba9332cb4733341bc49996fc5c8efef2c7205cd334e6c8e5fc589ded764cab09d9caceae9126e00b3c635de63be3be6bdad5de6d68079635a01175de779ba2a36c562051db154ce90251e7dbb1683228cbb198366f6cb94f770eefdcc367c0ae613e03768d64f72c3c1bec200f592c7ba0157336323492b7885df56ba8a2f9dc396a4e2bc68056c9e506942097ab7cdb488d8669cda2239b8e08735a99cee598d717c9a4694df321654d1b2aa2ba3650400d6d386797617a719e333aedb88a45873fb436624e1f11757470b0f6a831ca10d53532519b444dcd9fa84dd2f21c9506cf6a41d9519a484735e423822cb5e4283a6aa21aa275b5003556d080a6cd42a7ccaa15c7f64d3b20a3756da0383ae5123cd336a7958618f73e52924380069b4a03f96a2ea7e8943bb75a9ea22302ad69a961951bf946e0515adf5655753e06be4d2c8f48e6b4a20f685a33971bf0004d9e3d919283b2382d51086d14eef65554ef371276ef622361640f1d086cc4472316399a4949cfb139fbb8eb3488eb3791a7993401780e7b07eca04e5c3c65116469aed2ad038fdd6a5027b6efb515552dbb59175a28ddc8e51c3ecc914cbf84c82aad7457603b364cad7e139dc46a39c287fbeeddb4967e2e37e0e76dc720279b0d4afc683573b92e8240723992cb0d905852823ccda1b80a1434cd2cbbf9c782e969220628b234c52b7b79d34b04abad164ee09e2224c32a259fd9b464dbbf2ae552a135511cda33f994f12df51bdb7a4c5651675103a1973ca0f81aa52d547edb5328ec2aeed933bc63fbaeed853d7b8a2518a4b21dd4a7882b6b9adb6ac95eb33ee558f280e6e672b6b882a7e672e4db43c55c8e7cb3a869855c8e3cda8f690cef1654664f8153993d4595b5b599373ddaa2c65ed7c5744c3965ac386ac98dd5cbeb03bac087edceddbd1892209e8ca0e6725811248b8e2bca96faa0de9bcf45cc936483b927df0d03ed1492762ea7d8136492f2e55c2e224294494ba62db1c9a9d8aaaab6fb357b9137fbf63dbd48ba3a4f69281b5a05646a0ae5d39482aa829487cd663f6a8eaa44231358f127ecc1c1497532b45795cbd974f813b118e8831397b876ee610361a4c805ae91e1426f24c5a241216a999430049627c864c9541c982bdd05263606383563bb03827e293e92759d78638e11584446f3b3d80a4869a0d05611a4a512b116a363a2a988169232c1fb7c0d862f25b8b65618b51f25a3f6e0a0ea4fd89351e2097b321220ddfe00ed08a0ab1546dd47c9a83b38a8da136e1ca03b39ca5ef1a7bd14daa6c94f3bee015ca9294a864ca16938bc2a93c78d86d5e4e30bd92aef6c3ae6b0e6abedb6aa22cc998a5240a668145571d5f6287f4287f6dd084c6bc5d5b09acbb9f9a855cb6e693e5c5bc40976d8c0f7e8b998bca58c8c8c64c8f289e47eac6c2a34f8f923a63db3cfb17d6cdac4d5b8e0c046231f15d8f3ccaadd6ac51b4bf48caf1547fd47d3bd33ea0f0e0a821c75863f392ab2b97496da6a9a89a61828a3fa367229d525b46769f7aaede87627d6648155c48cc68122e7728234a722f2a6cf64e77206b512dca09d799d3497eb531cc9571cdbf3dda0e23baea66961f8807047152d0bdc4a618130db0b74ae078a49975681622b7b54b6b62aee492fad2294487c389168389176f4f88e11c95a0aa5909e8fed0a48f2aaead75c674ea272236533075cd77115791fb66dc79768074858aa58d8f324ec4938a4c972ec699f4a049dc4c09d20d3c4257645c0a4ec5baa61cf7ec497a608b125d3367d135ba6470c6948f28206711535910244194316eba201ba8ae1b2c7406c3112f54a145a2625bfcd64e9eeae1c185048be4e7cfc5dd26cb5481e5b3e77557cd7e24eaf664ed360b58d6a5a7aa2242643f47a161ff5c81d3598b8e2abe1a0c7dd54cce4540cd37e2f8c3a8fe25167705035279c3815732246a2b95a850126303b3885226882064e8a77534c5555919baf61dbb0c83ecbaccc745961f4351784530fd99a9fafd44ccb70898db0e6e71d1bb250f9de666944101571120194fe62101954344004cd3aee925962fbc4c8e5e09997fc54e0fb8e9dcb0d4c536e344ff20d96623f4bafa8a3cc54a440890ad35c3f18a468df411695af4dcf77dce6a853b642f5614f2d596c65004f67541417d92189e85a6a648d945c8e9175cdcf9e0be374604ae474c3259e47bbb91e78be444cbf465c698a804c22396e6c7220894e1e79509440197738f70559adb804d365075d4847cb88f9181129718e4b1009d70ea581229a734d9fb90ba8e2d8d36635e0718536e5cdb99cc2cbf0887f5c803e365dce0c85b629512a0258e83ae56c20e3a0386976896dc4c73d1b454463a39c6df244e389f714484c79cba96068163f5fa7ab6fe4e73d1ffb66854e2772da47d1f8a3844ff1c3bef7f3bea3a240f3f3e434aef8c8d06856caca60358d2bbe394bf651ea7414d7099aa62339f4d5c214e37ed322a80e99a9aba1f979d3db0b7148cf5816d8da7c3bc9ac88ea8756e75cf5db5aa1d5da12f7228c7b815c4259981a4e65dac613326f2819c9a2956424432bc9484eb4928c64d14a3292790bc948f61d19c9d03c9003f83c92534d4333c7dcb166814cec2b9a449e545153b3f9083de492690500dbd588eb79e5f906f66b36ae9392d72e792a9ad51c31fff3fb38a279c7b69a8a19563a4ac1601fb00825718a953fe1043e4100b3142d2f352e7b699ae695e5c06602aa2197b0e2a96ad9cb473820688252805813940c245aabd4bda3151b9394e0b151696a03034aa3dc5030b2d512ce42da72ec10e759e42af36da4a3f9b0654b13d3689613c8681c9ae50ab357953fe598b6224bb29af75db3aea8085abe649601521dd5d4521dd55c325d6a224e604b244ec5db549457dbc86f2b667e9f536f3836b17d75b40685529ae569f37c4895bc106faf861b4499a75432164a9b256f7a27c8d381e91203f121d5274534207a276aabf11ca29963e959e72268f3eee0c490ef8e0efb348a21ac3fe2a58ab64b229951c129c7b190efc4cbb1c9b169da90ca44acfd60f0a334369389aab2f19782cd07632a341a305d65a4e66d77023664ba1a2636a3bb23c5c44e35481bd5228eed343c6d5eb4d040915767a028aa3050ecc28d9311b91d5b0e2a0564e5e74cbf0613da55955a9fe385914291efa915465445e9d256044bd2b0e1175be7e0fb5ee2742d5563743ea42f7e79be5df291abd9d15ca23279a285e84a3c8f2dcb993b882d6b0a576690a785db0f4e2e47e5143b6f985ec3c24d98fd4154845526794aaca870194b52b29011e196d0d3045f682c2db11e5370d4978e3b875de304996eb506bc72568462a8592b1aba2ea0a4496da3f93846010adba0e4a2780b94cc766c69abb8b068e9bba8bd4777851b1f7c24b06d8fedb0e991b7d95208164616f83d2a0ed84a71444586662b3b5454d1ac3c8e5755c9ea67929ff28ebb64da3c8d4c8dc08113f2341223d3015def7ba812f55750960d73562e05689a0b6d0ace63954adbb28046d9a779a68bbf7a728cd38bcc06cd6c23d9b41b813f54759da021ab88629fe48615c433b834c33c25b77e1b4dc7198da3a88a876c64e672f6a03c240f9a7496b455354235a099e3650de14683d886aca25aef340d97f044f5de899838321f32a092ec35b02db7d5d14a7c606bf2619ae93b505154c99f24a77dad8e2af913d8309daccdc2eeb6a8c3f8cc682486909c6c2a2a9c9464978297db88a8aada4695fcbe1aa9cc4c39a7bfbe122bbc8458a17ba1b1b56954c91f676daa51c1176b95af6542eca0f3e101264234fee96ca038348801a756538e6b10e0faa1c7229e87a63592af39b3c445353191ea1ac9cf62d7c4b68f1a1a5d2b780dc7f69874dd67e6c4a70c2f5a46b2283874d262652443a1d17ce305822c2c8a63926b7cdcda4886b5920c02aaa22a266aa27a2ed78459534735e1ac218f3943440ce68fd0a9c4031852d32c88a1a6a2aa96316c58f9c96193921b67119be42a1caa35585f4d691474ac72e274382d8b377239654a9b826a34b2080a90b17879536d540d17c9555a2c1d99c63d4666d6d1b0ae572d670a5b7a609b4f0744370d5d97b3f6a9a32db6097b5253e87fab5550078bed7b9e13f79e22c3203fcc8354c86546c6b4d8ca58f8535e884e3035ea8fb1bf8102aa12b13911a68020d79c25c6b88f7d72d075eab043d0232ecc57374f9b36b822a64ae51286581b99dabccd4b65db423c295b5502eed8b2881bba202cdc1e621ed36f0230479bffc637d8b860b5ae37b04bb650e16cdc3c58088bfd2d2b4638ddbce98d91baa310b5ec94bc099217e54eb65ab8ed4db8f98321299a4c62c5f612ee13292675045ae6590532447895f8b145380544797a6624db95f54296998ade4fbc8a6b367cc70d19264d11db3a097964b4099031f49918875cb601c5276fb8fd6443705d981bae29b63a8a73393ca069f55c8e66c5c8556127d3d10c1a5bc9e5144773c45e5f05ceb9c2dd0a4fb3145f450dcd526c15e95a61547fd411fbf283833a2ba8a939133a1cf60f28e64473b2d5727339171c8d5cae010e2f97f3269a932acb31ab4d2b366aaaa3bedb9c0f141f35d16cfc9e453b3c5dcf3ae9f4f335c7cf3c1efc3ae443859286828a6c65c788ca04c5e24e2a29029f9cde229f340de09021bb0cc0b32ff07c3ab921683ac141293f34bdef61cb3480259ade617b167c0df08dc3da16e94cd06c4682a65ee6b2454947b35d0cd3044e1871cd240e2936cacb07172f1ddcac6c219aa2aa28c5cb071ee1a4530509154d69553ab67cd7b10e1b428835692014cb7711950ac52f40320b1de239865845d4523c9589e469c7ad0f8198245264f0a9669a49ce2226fd22d328d9add6144a4ac0d3c8a40c5c36bd215ed33af399a2e68d5c4e6e389e497b7788ed2dc85c521e9d4ecaaa071db70e92e26126e64da7d6c669498f5fbfa144e001e4aed4400a120309442cbf6e1d8c919e4c01aaef50e0106877d7fb747743ab7777b74d03bbbbdbecea6e0b4f112bd5dd76a2bb798a2cb18445a53bbd263a9d57a034dd6a35523d1fd07531ebc67a8f6e3c02c0a1971a5a1de90f38eba7bb3b0be6b66d993681b96c981e95f00cd48ccdffd9c4fcaf6a243f4d88013b065389be1e03b1bb691134a391bc6ffa164147a8abd920684e23796824749a661287344f520f60844e3262b23f222627436272128ddf3f31611593912caad593a8880a7509f26c3719aa42bfcd06fdf0be8eef61b32a8434e99826b3fbbcb2a669475aad27474ded5862f84da7875f3f3a23b343a5e3bd877e34ecd181442a2ad7c4f7a304b79a0f33506a741c31644ac7da6d154d1c47c7903da9a2531a3b4e9acbe5068a031a7c4fa37d192b835a7ae48f234e6562ed508e484ee908e2d490f547a989c2fe28cd2241e44b03a790e8bc928eb057da4fe749cf05af91c7f9e3ae336b1ac415973c0eb47b2f23d80ee4586a464e21131dcbe54407c9834728313607e5213ea2d4363add6a7543a521075d5ca51eb6f4de874ee572dd091b681ec65469a68de654a4345bad59352b6190c7bc219b65998dd6922c58025df9a88c72e83d28878cf4feb41fb12a95068a51430f14c36e01a7e89781226258cb721be979602e5a0de979a04f5a6394896394f1dbcac80eb1867ce0657c102714209f8483bcc668453da21535bec355438dadaed3e3f357400e77bcc2adae041fe03b5da3ecb2e97d4eb469985cd393f73980f5ac015c4f4fb8866035c9b16c027741011b26d5ee61c2b6b446d92abd8ac6a8c4b9ab4805ceddaa8a661ea8071d2ba8dbd07d9e7bccb69a19c2a59009ea7d3b0b0051420c607a0b058dad50c61e5dca993aef52268bd928c8e564cf1d72a058931203c71a4aa4e77d58d36a94a79be5ee3e1acbe3642f61af249847d44b7a281cd4daa8aeaaa52d4a17e9de4ec3a1fd3dd3dddf4c96403329b2c09a1a0e49a0ad4b034526161ed166d0dc5fbe1d87bdf8f1815796bd3ab62cb9e4c1065d3df089d17f6b3ab5278d64c893b5379de85dd8dfcd92d882f4049aee39819091cbc914d0102b53886b73ddad7b921607ed765a9b434fdea3dd7a9281aed50311c825982ac7e3c9241ee32c123dc92974937dd1939c4e37d917b03ca93d89f6f34388f107e9652e3c769f3f00cbc03edf81c51e9a8ebadf2843e7c825a3ff9a2014e0e29d1f02ee7938111f00997d3fdd534e4f1f4b50323087f99a8c15cacf29425180f5c178f75890d1786a9285bcb68dc6f3279c3981f07e389680f1ea3a73b28ac6f34096b529349edfc7e897369bc7d44719b7d644e379d6cdda4934cefbf5081a67e712a7610b747c2bbb11ecaa36bf9fcb6ee76e876d88bcad38ecc25e0176e5f3b662b1ed87e1dd6cfb6164a78aa6f9d0a9d17c05ba38836d8906fdec56910e1b9b700343d9b14345b39aa2b8da7c5b9dd0f353939aecd59c3919b9137a1e473e2a36045b1a88d18073e39282239ad514432a93e94faae14e9b6201dbe0e7a06af2322d4fd204602a72f28e7dc0f6899bcb854e85501e3be1446331e81a737a9ea0f850e7030e1bc601db38627a3eb1895b6ae4711b39689e032e196d35ad65122f217e89c34d826f233fbe4dee2974846183c8c8466ed7c58ed90932c987329713520397097f75e2047e69a450407527b0fd631ccb81220a6c1172da6427ec8d06c12e8cf5b4d441b188091cb6b2870a1a74888da9e888360fdcae3493c7fca240d67d081acb0efee7b6385ad8e2938e140e0339893164750d1bb1cee3e91374a85f57cbec8ea09cd5df8c7e8b04a9fea9588e4764e4a86135dd36b2549451049c52a27919bb261eaa9986416cb924fb6e40e436923b6fc8fd7245c586324e1bd9994c6d1f45e9318eee5cec6ece1134971a24acdb580ebea7c498a0adecd8a9a293da3c9de1b027ef629b6d6495a61054fa482caf842de2fa721bede739a00300281adf5267c70fa909daafc25588906d399a9da770619b352a9d12b384906a4724a5a1d9e1a9a0aed9798e105c2d334caf6e7a9e396511baf0c947958bb6264dc6919267ed40eee40881deab93e87c50b404ec6988626524478552ba3625caadd3725d24b31655d158824526c89cae0c14118173f7192d63e8c0823939a01dba14149d355bae0a55a814d9994653a891cbf1433dd464ce38fe947a3673b9ee524f534ac866c21862e3cb6aaba8164ebed97277a6d9249a29ca54e0e793a88a285973da2a9a514b4e79062eb6d1ea1f138d5403b65cdb2eaba3c792b362bf390bf7938cbddea1edc0e7e3b17ba149d2dc1f18b569cf08e8d3001d9a6fc832ed99c42d8427f3b84dc58043041ba65dcdca536351896cc7daea9678ff7fdbf6ad6f49ffdd322bc4f6887482e08a2fcd1677e68bc3f9c27f93be25b934844e762360eaac75d3ce9ff2fe9bf42d1abbcf69345db35af325a5a24a0771854c39ce0c920edb95bc846d43327d4fc2d3d3a665629f78799eed64cdf424cf09dc0a912a8e4124d393380a8614d8067125bf46a4b1c32745b034ed04149c4d2328882387f71d383a7e409a362dc28325d7717cc9305d52f11db72939d3921f2bc87709a1086c13872fbb76aafd752db882c3b4e32253c3e5c8abc8ac59f82d3d592ded2c140b23c8c94cd5705c1f5b3cd14ee465269ae69b453cd92e64652663dda6d71d83f094bb51905daaebd0b67159b2e27664f44a065b0c1cda1e54c94cc60f9a39b0029aceae04a3c6ba4ba679ca6154cbae47e03568bff26423a338dedce954ba657a3e5f98d733e1d549dde1b076a04666120b9f69f2243bb38b9b0e6c03d34ea0bd853293b08b0bd05ed909bc8ad320e11ec2bd0797d0db89cea39b495524b9e6fb0dafb46d1bc03fe5e51db7bacd702ade36e2ba8e3b64103a835cd846299b3667109a3c4890ad1547ed6e3d26d0511bd4e41c76abdec4244d6a53184f9c381cd20f25aebf166af08f99b6396d1283d3094040fa7fe44132288f4ab3a667827ec0a02c4d3b6c064f079625d589e7e12a911c57a2948786db8e3d5417c00c322b117bd6741d9b9608992123c0f7808e60c3009e862da946acc674604973d8b54dbbeae5e5363bca9d37bd314adf8951eada7ba3c227b19f0e48400e3a6e853cd1a06bb878ba30fe04bb2e0a571e32138c13bf3bb28daa895b0553e12171a843a011041e3e97349f795d32ed6955e60e002d57b35badd94815698c1610fa66fe72c853b1fbfd54a2c6153fec796dbe8da692ef4c406db56eb593b4d212c9545a22421545a851310d94a6b27b87ca1fcce0c8e5530dcc7582908f648185ac26b19b8e3a3371109f0536d6f102b21ccb4f418fc5345a62c588edaf58ac4de6a4b1d12309f5b819e42a47e2e8a9e848def48e072e49b5f100d3469cd3e62b81eb527e0d22073a9d0e78b2eb2e465a1fffa4363f439a429a1928205df788255cc0fae09e49387ef6272e2c234c3bdc81e31dbada0f2c6b347c88c257291d025591481d990eab5c4ef1984b45b19819d2846b1cb23c081e15f9ea93fc1e14a88c0c9c4ca1af8022099e7027351f1449285256974ed9d03045aaa8699aa5e25018d7ec51f14a42f1512b229a015740836d8ac2a8f1a8356a0c0eaac184115740330687274763c082b639ad80ea615c588b5ac0d25231e12616455fd4c28aa9c344d7834cb6da23887695033de5c13d20af8491eeccd105ffe93ceffa988ae378cc7669c6f3045cc50b901665699a6602413ca66d7b6adbe0b62a3aae4dc454900ff0473dd8cd9de342299edfd4399e6f380d2514aa31657881e56b0461daa16cc9a2f9882db9351be190e8b8e00e6c5f2b84fac3f32c3bab38cb5cf241202dd9e2f25ac94590ad548855fc14ad3811a5c3e02431047800c381b9051aa19761522c7c5bd431973bce74ea484ccd735fca8a10d39626e542297dd30971156a2fd4b11b8d29ef0c689a97cbc9538e63116c83b7d5e2af2e88513d501c0df5b1355fb528198001cc5f7cf2f88b4ffc36157bb689bfcb5082d4f0e2077bd6890f8792782d2a1c00dcf8b7c94c753b90b14dc7b6a5861af598d25459d334bb2ce7e5c1438a8f0a6ac9561160686905646b517cc91e944b32824995373d36b97c558de65b613478347c0726107ad286660f1ea28462229844813a6a0d6a44f190016d193e7022da234b0bb66c4003968c0c494a31343d97f327f4c956cb9f90fffb7f17a2943ca9960da09f2843fe32006d5f33385d5211457f00e8994d4efb8aaae60dc726a32a4357f3f270f886786d10ad1ed420243e31d52e8ff33817682012ac6ea488c2878a18419fa4a9dd32cf2acd997e4d9a214d4f9a970739c9a75ec557b98215926475506ecb2517c972ece4bbad1024cb3086a3517d28be41d89f7270de4c4b2b77abd3cecb9a5c92b5828ce412750ccb427143fe863ca8c8f2205123a3b7135a69725b1529593ae81364b2adaa6d054a524b7ef81a9232b23386f95ef188066860316d4331b7912f26f6e0602ccbd1a4068ea01a086b3192314ab47bc34c0d71a2960f2a04b9c8ceac1269ab6a297c29431987676c94b4a0d48b15b0bb30941ff8c00f28dad39c2710ae74ca3903c933479bf6351e5406a05ead1668d9ce90266823d3fe93e51274093471d82dc790fc8ddc363a7ae89f0d4ad49c0ec65af1a0e00b82ce999a2c8f464f93981a056df7008b281d3d8a7ced80e2231380a8e894e2c70a381c6ad7ce094e17238769e17064b8180d72020ced84362f54304bf375dce87a7330844604a523fca6e544a86cce3b9412079a07b96dc41fced812385acdbd504d0011c2e195e59c2c63b0d08c19cf23b19d26a1aee43b30f0320cdc242bc0af94f41a94c86f23c7b69270cc6965800ed1543b17b78fc4dbb9cdd5214f90e9ee455452366da368b7690a512137f2cf703042e531f3dc22d252cbe504a7440a89ddaaae20bd82ad4a605150356c5789f198e97b251fe91c95ef715df2847f9806f8359760631f932c90b849c1d8c23ec7f6823af7b5d5f09e45ac6803e9423e216d44f2228b4660c0f04de78c9e8e404c8b2be1b4592d7ca6d9377503e9a01e4f90eef9d80fbcd25011e95c7ee20d5e277527b32d23307521698a4bf2315d4060a57ebb8d62475cd95d735851e3e76010c7b2f5eb50918ba589321d989e2695fe79589228cbe17a83327373961c0245e15e461f79f674729e0a40ed275341958d93c46a3ef0c811dc74027f0be8c51346488ef5ea0e918da91288e427881154887b8faaf054f11a640fb428c334d8c70cbcf49e455752b6aaa689c5ddb49247a7066c149602340ebb8b638e414a161ae79b6fa51a4aecaa97f6a3f869633fb2992435c33b7721a2aafcf122d00ee78c4e8503b819d284db03940fd2c516637af1d5e87cfc71bed44214595ab882bac7a294f15eba68e24f70c6177520cf66c4802e02db818ed6b446e69ad6606b5a6332a6883b614ce672215641992e464b34946941187d96bc46af25afa1ce8ba5ae11e94a54b4c268e55163b4024bde4a7cc95be95af2de5b3ae9b15ab542567110c3767b06d3da9f9f326d8371caf01950c907d81aa15c8a5f2e1443691ccd12d7331dbb24f3230819e9faf8817d270e9cd40f1f3d79e0c4d1bd47c6f5fdc7f4a3c74eea4f8c1fd08f9dd09f3cf684fefdc3478ee88f1dd00f1e3e71607f699eedb6b0b1b0dff41ad8afd4885b9a43f188c768e83e7869a4342f769af9b64b3cdd31b63a4787bd71a74e4e004927eede8a6fdad552c812078a6dc47498413bf8fb5aa82c7ca28dce68dfcfe54eb45adf8f29d29c11a3abd53af330ce68860ca7feffcf739a025392d9255eeb1dd91e7b37caf9e76ef9fdee965349d04dd06647191edec52933db03445662373b5080f67ae1921ffad21213dd9a2093c8d6bcf03119f6c4eb8032547cd4565345edd9095c80c65768738164eae7c969dfc515ffc02c6dc67416c638126fd7d0bc9a0feff2c0ab4b7017416c63f1e36713de564381e6a39a069c643a4dab6b5de8ed41355ad6446d5233f98993996fd4b0478c13a46a7abe0b8f7f8012de28d372a388618a545dada70bc06a2e6728f5093c8902545347b13650e07b1f793705afac184a7728e443349f5ac27c136900a7d1de8d5c048f22a65f48e33cb936412653798a8502b42b8dd27c54874fac3527ecc9bc015adec4ae98c46b33f6323189a6b5f936aad1bf7a629c34a245243293ef06b3a575ec5c81520cc647c3d9834698269ecf5f00b35110d3c6833d7dc766d813b5dd66676c0345d464637696baabcc3da5cdf3a409c6a46b0305d4d4483b86f45816d271b80d8ece54a49fcab8f60c8b3fc23e736cf73c847b3abd2f41ebdd6ac9813d633b73f61034b43c4a84d47212bb55e26b738aada6f80147cd43160aa033c73846708c11218574369bf47447efd9cd67b7a13547134dd66a29b3b44daa9aa1b6db8a8b7c2e3b214205a5246ac01cc3fa3d199e04f1a76553a58e14a295a5d856f54b5d5b2ce96dc5b242607b227c05ce5711514b3c5461beae4c13247c27ce574b1304f99311a627454f74154ec26733697c89e472be78a091b03ede9fead571be988e6ccfe67583cb18e2f29e87ec78f061fe3421908b9ebba8ecc54f3fdcac1e2079d3a364045781148cfb4ea3410c45853741617051e206af4732a1d0cfe5c4981bcdc24aec8d772326624cef3815c0687a5f51e1e9c0e87c2bef128b600f161051db1e4b3c5d0e3b61fbb52795fd94b220a2ed47fb397048457b625c45fbd3d46b07e308b33c9c68d5c46c266cb21fd7e64dfb14e15ce2b815544dfb986b1037bdd3916620c542515547bd7e4488a82850d436ea2ac07b8c696e77c9b7c8a6c4187693d9636a7454a4c9bfaf86f37fc267bac956779a56cb9af02707348d9dca504f570d8691afaaa3344a7369d18576dbcee528ceedd4e94e74d3d1a30bbea38e41a0605b8dcd46be3336a3d88c17bb89485b7329baa4943246212e4096e2be7db8e1072e0903f73bc1147fdb2b2b2c9d7ccca1ab7467ceee0ec94c3ae6cc668464267da291f687c914571b70433547b5d5a201e1854d4dd314c249b6da6a71e543f690bbec118b6ff7539f4f4efbd82518fc30e6075c76502391d0c406d1068a70be9868653a6d32cfccedb478365244ecc62844c6dedba3bd784a73f3f7bf4c1a3d951e8772f6ba49a68d732a9f1d993ab056517fa8b1455706d858ac965a9231f6b54fdbf6af4afe5beac4534f3db56d721b3ab4c5eb5b7bb5435bb8be75343355eafad6c1cc445dd7b70e6726cbbabe7522bbd4f4f5adeff74a96bcbe75263359fafad613bd52f1ce8c61582ca2ef655739e3b2d763d9b54e5df6428ff74dc66f7bd1b4c305f48dccb489fb5edfc94c92b8ef75e8def7bd3293c4ef7b652688dff77afa81ee7b7d37f55c3d272b5d976bd8f66dc63928d19ecee5c8c4d393ad16499f83f2d91316f62f8947c1bba85106fed1e147fc6a2b150dd8ab6f61d6f4033eb15313ce44083f9a3ec82d0ec9621792592a928e8af0e36ccab1d01361a898122cfcb0088f762d79cc63618c18782cfcf17438958c603ddc7d44aa0a9cd3e7ea670410becd1d9e0cf042be9f8e17870b3cfe7b252136b2d381705b4cf3930decf3069665946a7a45960734cd2fcbd15b340aec24a872291626abacc46f08034fffa27086c6c2bf53a20c492bc2f1213f7428937cfccc418d72862f2b2507d4ff8c0461591e359cf9506420791f5779a38db0cb08dbd96727fbec629f62817df794f8eb4b7217f7140b28dd2053411536e4e07497f9c761df08995a543f9b898d6e2ea7d8dabf282e0b5691ab99c8d46419e1b2a9c992827d491ec4793aac68d386679bfb902cab837289465aa64d8ec2250c686076162a4b0adbfd34a4a9a6240fda344e45b6263f654b9244e5417950715b2df909b6da93d541b3ed0f6a3622d0f5b429db7335d3224a6c6b14d8f9ffa0724874b3241c9373a66d3873ad56b8a9cc02f2865381f55fef98e4b5781511c2dac7e75f9ba416392e11ab1ced083c6e9dfdca342169396577812f347d6d4689c99fea2821713fdf83477e7c2981a1549f946dfa1367d4259b681364b2e4138d44694dc2b6a47c12bed94c90afd920e9dad4c78700d8c36117d988561825d13d153238a8ba44f141e12982ec90a49dacc421b647a2eb53f1f72c911b4b6451dca02b03a239041954fa431502cb0591689a2612775ff83d0c4dd36c3abf2900446ba8b6e19e21660af535a26dfbd789d2dea1ffa9e3a1334f0585c2bec210fdecdf09ffbbc173103c07c1337cf0e05341616417241bd9b51ffe0f0e3d15140fd298e14261df107cf6d37f48365cdc4d63f615c073f0c0c1a7829142a138f454b07f17cd73700fc41cdcbf8f7af61f04cfc183fb27ff5e117b6a285f18da438b7e6c172da6c0cadc09c58c1c8462b61726bff58d6da84eee79ddb241b4f936d24962dbab49e2fb347ca70a572aa4e17b8fb11b619e36cc2e398db0cf76fa615773b1efbbe654e00309d2dc8c40af812b44c32ca61e78fe135ef8489866a3f022b0781c4cdc078683165e8a876dd337cf90274e1ce1170467a112a176916460bb4a5c27f0ace638f10fdb36710f9d1c3b22712a0c47a8c203caa7c490cc30951734e02d79607bb67fc060cfb97f9fed3b87d1879a06dbd90c23e0651561155492d56c4326b364824cc2ad5b68ec021a2822f6cc2b1a2882aed2c484cc9a7c5f0dbb1e61ef8553ff5085074ca61540a91b42c5030270219887f88d034f07e62c3c2fe03786087826277ba0c778fa44617274962ef405a63e2a02a613c5c924b2f0ce44ac9d64241b2eae56b9db6b10cbe2ef76c870ff4cee5572b26186a1b8bcef1c71e688bb0f7b9494244bc681ef9c20b3c405ed3172da27ae8dad13849dbf840a96d01895c0e318d1de23ee2cd96b356af8be9049142fb3878603cb1aafb884d812f69a7645a2381da4a581ebb8859b127fadc113438e7e892b8915bb701c372b74417fd8e60e69da71eb479def71356d8969444a96e33424db616ff94a7614ef34882d51d9ca3b0c3ad9924bb071ccb69a92cb1b42725963191208fb86e4115cb788e749a64feae3b000b8dff13b72ef6eaab02906ef1b58bed9805e60cf0e20be05418c2d76c4081a28a4a78b5ce15b2148369c39db72f056a16dcf987c72c5b13c19c9ae33e745cf998296e9d680eecc02ea3a73e3a0a82a7b3e76fd2d82da718fc605665a25dab689a7864a93ca041e3a33a96eabc6943748fc46d5447132ef3b4f341a02564c3303128a3d32b174605b65e22a70f21a6fe2ee6ef76ddf98358070f59434d32acb31596526268ef093af8c1dc832902410e847c53e2d2ec3cdf53c7b14930acac3b1bd674576c0d8ef4461b2d5928f09373314c77c451a7354b855556db594f4a945fc70206e6a29153ba0693633aa6233413d341b996c59b109190aa2bc01b9d5219eab309a6c7e1e0c6b015e5879c04eb3e7926c601f0fd18515dbf88b0f1eb64fac14d00e55cde598a6354d49d454e70c14e18e26ab9e1a22644e2b6e54a958adc52a93d75b2c968461a051be6a12596963b3b01d627898de517c54f1f9926e673ab8d52a7edb6f87c881a88ab9f50e7ee3ce656b783a1a328c470d0cd4f906b94e10515badd0dfa0fe5c4ea9116120b0acc33c1c2894940677d119a7b61530312824dc325dffd49d59b257c8380ad86af1881f0b4170db542de1b4c05326133821ed4c6a21e4910131a67339592ed925c5d7705296426e3a04a42bd41f3bc5d6a8e0a6600e5e65121ccee5060aec9abc5ca20823b79cacc8d1713853b3332a68c3935de15c3e42e2674aa076c48db0d1f1683b06204bc75fb4199d1ca6747686cf79f12bf5ecd970d037888a9a234cbd4207c9e2a48b2b33c46db594544886792540b21cf2a612974d907dafd76695e45152641bc8a7ab72591e0c8f47320858ece6949d69aecca6e5f688f1882f88232403fb071ef1530608526602093c9a91b44384aac4efbe152be1e8a567b58d3c92baff0b954366ec3968a2b6db2aea536ecc32929d8f3c6d15cd5789df759751a87540e1a9d8108336f27ca7013d6bdad578f674af03a764f66325da2bed36256af1a17a5a6c0f0c90b4c1e71430e8513fa284c2528da886c27a7f34b2fca6b87c90913c1f6565f69845499ec69647e412610a197057d855d99850c0001403495434508861fb24891f8af9026ca8e3c45f4849ae6cc40b06f1c58f089b8d7b3834ae086097ed12c9eb732ea6e202dcb7cc738b701c703b86d9c904669c51e6e34552ba920c412e7f8a31ac48397445497961a3b63646c4f549d66c65fe2dd92a4a61aacd27512db98807b0ea33952dd7b12c6294929446dc6d88c80d849453a89612a8c40499fdbc2558bce24759d45c0ea49c481ef6418c8b0ee479560e820fb131a2f8629cb81c9b88f3da6a64ef5673cb0ad070ca3280a842b6568b3b68ea5c4ee13e0dd852298c037f3a3ad20cf282a9ba09b4daa5ad43e832947ad4f81df86e8ec3c9aa3aea779da6f198f271a82edb45b3d55277c2f8a091d55c2e9e015a279e405591187ebc9d8566507a48415d9341dac0403a55ac7f8e91d82da49ef569b5ee5583d0b671d8970361fb0e689a9bcbf1f61d80c68edd0086222283787c58f02e18f5813c66cf5936e3ec56cb8f0f8cb0b37d3a85e2586a7e1bf6e6155b63e7236ce4d8f018881c4b1db65c3a2423c9407f8282a0443b2a28ae08763c6cfcd880f7733992876bbcff1f77ffdedcb6cdf50ba05fc5e27438c40eac4a766ea6826ad25cda3449736f93783c1e58846dc434a882901dc7d2773f83853b4539e9f3bc7b9ff79c7f24100041dcb1b02ebff5d831888dd323cb203612284baf69822869e2777aab4cb3c72ba45b8c88cf94271db62ba1c5b5778c653d0c6b62a1503d644938416470d3e6ae8a2c359409165bea163130376a5544defacc987925693dc891612a4bae2f9a346be63aa5d59557b18b3d4a4613fa4038763305d7c0d94fd92db14f0f34710c39ade7e058dd9492f5b5f093a690c481dbd220ec98000320448b248e5000a8902edef6fd3b97ac4f48bd4b5d9b3a64d92d7d50206c0d684ddd595c7768ee3eb555d01ba617f0e9d836940c1a6485f934edfdb4733a0ccead218fe5ea80cdac8e412b97c31eee51bd23eb5d96e8a0c16ed5cfc5ec2a1c45d6658e00488ef5be73df4fc7ef2c81f888ffbd437cc04782dd9bb597e89cfa383906ddb4bc8e8eaf4e6b768cfad49a6e99718e3bfe85b8abfd9ab6eb2e42130597fb95206a656b05d7c32c43ab4d1482e9179832d1703c4c1a9b1ec1eb474e645c6866a0d0c41c73dbb5df6545389be2f7234b7db7d3f46c33c29e6ce0cabe670f8ae5367fa63730f6555966f6c46cff9b475c930e66ae46b3369c122be0440bb57dca40099fd6fc04b4b7b78f68cb80eb48253de233c095dd7291dbe0ac776b46e7eec559cde7db73aa4e4d482e6ab6356bea466e73a1989c3735f0d6fbe2b68f79ad986c6d9ad52fb14f4614cdc5c956d59c7341e39a31a157e6f6119d9d9d48d0ee3fe675bdddcce98cab2bf3001539ae9ba6da86026dd8e76984da3ea6e7bcb6e1967f6321b44dab2f8b56d90825999a9dba87abda66b4aafae6e1d274c7497d353fddd6879e0d369233a14c7b4f1bc9bf3542d1ba27f18249c567b4de825cdbb4bad8fe6ac38de4275c6c7fdde2e7f484455d5333a598dc6e75a3f4a3ae021727b6c5e7549e31b9cd44e582e7dc07817bb9d55c3009e3ea9c37841875ca676782b5edd69c72a1b6c11bd3d69c8aa665dbe3ad790363695486db2d5f271862a1b6c0176654557dd5b3f582a01b8856497ec6f416b038390dd548a3435d5a259b33b65dd1f694ea2d258e688e8f5ba65c8c6ec48ccee3c72f0d17eef99c2bddd073ee5f886aa41f2f79a54eb70059978ad969234db862b3c6888bcc736821589fa49d19a2420b1682cf9a8a6d1ff18afb07a98f08fda4daedb9eed5f3ad8b6d5acf4fe911537cb675b17d4ac589fecac536af587322e9fc14e2cfa93a65e7d44c9d0bb05fd9666015b8a56714cca32b13f4d3287ebadaba6c64e5a7d0a5e43083ce9b8a6d7d3daf455b7eadb938dbfa6a17fc0fc815bc3289d15c3861f888a17e21542a88812f9574a61654b12dfb2467b2a9dd53146c4f9b4b1b04e07717befa21d9c7bfa92348dbca9f7fbebcbc1c5eee82fdce786f6fefe7af0619cf8b06be9ed7a5dea3320cc19a8a131b047ede4651c17f59978f2f5fe8fadcff5938ce615427458f9e898a0148b56cdaf6158cfa0f4a2dc6df13095db02174c2ef921dbbd7321f939902ecb09e42ccf7fa72a42bddca99ce695ea0867d6610931f9a87ffbafa232f7479cac8c63a9daaf33ac3cf7a73ec8c46a39fdb8b932cc868dec6a2172773d1599c9ce4a65220b35ecc37e486517e49d529fcbc7c91750531373624a28afe4e6f3656f56eb9bcb9004d714cdf02f3f9a6a61050b9d7c3c5f88978e58148d4f4e6e24b83a9f08de10facc78555826c6359a92fdf3d9ccff31cfe86ec2b9b7d102d3d662f9a19ad9fda128204c16349dc98bfc74d8273108bd0aa64ab2eac2be8d8fbb5f7e1edb30121cf1868685b4a3f035d7c4d9fd908a226fea6537c63e41b5b2efb35a30cb62942d1bbd983f6e2e497ec96a5645f1d17282097a05bd9839f211d2bf28d0d8fb96c15dc3f27c903721c1e782ce23463d536519decc6aba9c91ea7a11538797253ebaf70ff89b4fea3a28c86b900f2b5a63636cf7741d6269a8abd0ff23660461526fa2f47b9267430516156ffca3a9ee5ddf4deef6c020744757785fdec6f7674c655768b1d90ecd286954e78d97c33b1e73aa0b0d170ff83916b2af83990024c54e5afacc81eba880c87f01370f3eaf31a5d58de88cd6f3c7359e2f78060dbfcce3b9046a308bed855ea7d80dfc5d103546b857f02eda1df52eda17f1c37fd27bda3bac18007e072fd11471b4413850581e8607e22901eeb3ed90924ffc6928289d8570701f6e3639e17bf3172e3aab00e9da2ae06fb352ebc62626185067fb0613c58e101f764f0237473361890f08892ceed5624bc9f0c50f4648ea3e78cfcc38a2cae6c86f09b4e2c8f26c8e74e5a6b27c247139f7c2e43982992d1a346ea4b9c9883568bf9b7b4f656b53045cf00dd648b9dcf1567d516133379355710aaf42fd80ed70dad585551456df09c29ea1fcd1d634e172d037d16f8d154e65c36275213c3922a663fd43276069a2cecccdc17685deb67508caeb6143f67063d71eba2a917e7eeb54b0a046b4cf28579ac544460614180cdc186b4060523c590dde92cdf1529e2c3b03f33a22655733d1a90623cdab99b178a303434e4f57b7a6264d6ee1584990f7b3d5aa7a2bc6b0410f4642a3afaef42d9b536de35f2537a1268c27376def06fd6db690cd516540780e1175a04c0359d173dc38138b9d7961a56ec1414df58d5af462d5dbda013075df08ca618dfbf1f734ba9cb3f28580f3f34aaa395c0054d0c602be9d7bbbc20f8845745d6753026076ce5389a82302c899a4c8240d50e60289d2203526720a4685a119b87c7aa1f8524d40d2aba16444e668d505c2cd80a4a5af1e3c26256e8574dc8d85cebf267e69c9b40913c664b4a555084e1bb3c96b9987835e1840f5b7e547371b2eaeb6cd84fade49210e9ea2808c592f0405318abf9c118d7be3ab5a90e2814a0eb960c46d8bde6db54439d4ca224140b9f5893da574c8f5e6b5a5bbbc6f717cf75299b8ae7fafb1b8befb67e0fa19569be1f3db04dec5a158f4c2fed0e4073879edc34a14450fe7656c546dda254205d4e4c5102a0039b98b6de714b7ab9bceb827e794d40b2642686fdb7a34514f64c5433623a2b58ea99690a7bd240b90e99383802f3fa72e942a46b2d1376af957fdb7fd406e0dbaeab93850fab43e146e156e15ae9d9b35064ff005796013fb3ffc7f6ff5411ab0a8ecf43700eef1c2a4d2e2d5a563597620b428bf9966a16b3d3191533569b306cec3a604e0abaf83aabf9ec6cab3aaa4dc07299ec3bf609cab4e1c57cab92f44417a4ff4d39956ce65bb3e6dcf161746af468329db12b28e88c5d811ab00e2ce65ba0c902ac1d704cb4052e10b66c0566cdfc6a6bb6d0675aabd896a9a33d88ac41db39138b2d90fa6d5949607432e12b458c0aebd651bd90b6ea8a9950cde805339dd55c306943fa6ba6ad10e9c20bb575d228df3fa037b955376d27aaff5cbc505d9b81eba3ba999db1ea95281956cdfc05bb6035f8f45618587cefae5ac5ce9fd6f4a42d777796020b00b70242a794d1ddf2c4c05175efc1d06aab1ea7db9e95765ec508a2be3f6c46df2b59395bcfed7bcae676fd9595c7eb99a33eb4d9434f66e5a93e0f358556a8a18d7f56a1f8fdb5ceb6a5f4747979de5b5ad447472a86365cb3b4d3d749dfb9a019593072a1fc0516472c7d776429b290854228cf1ba5ff2d404177ec9644e2186cf6654421d5122ca4e409532852090ca2225d70a22be8a89642d9dd36394515110a9c667b733d3fc988c574e0c3855e8e47353b940bf13757a7af256f245757051bce6d3041296c7591fa26ee141a760d39146fe696b0492e91f1c7cd5d1388b1f8086884a25c30f94c1c37c6d66c15bf95924767aa833210727615905e0bddafd19ac2ebe3829331efed7e18df18bdc288971add2138eddbc1d829588e226d3ee504ef5077dd656e96c68a78aab067bb3e0226a3070b6f9de4cc9a166a7f7430e96ffa75a04a1732ee743d33b9feae3df2fff3ae71fd324dda5c2ed41084538597d3562acfcf545181aa67e5e01c6de2cc24ce2071d6493c3689c79078ec124f95673bbe50089f278f912a9a7280b1a17a4efc96ce265cabe5123a7a84a395d0ce4e59b5a803d66194f66723cf69ed1609be5489c2e6279894e1fa53041edf57bd7d30208ea23145d75f5501e38959403332b85361e085834f967aecc5c144264d0315b94ed3f46ed7c8221a89af7a24304b06e0ab1e8028eed8c41d435cd4dd696f2b848d8ac23ca96121c95cd70e7dbf7286c61a8502bcb15b217421a3b890097a094bcca9e386943c9f87491754e854605a1ac56dd852f5b6deca99e5602c9786338086b3465a936e2e4e3eb48ec501b8bd6c532ac2e6b2e8f86553369c534dc0ea9dac8c94431e4365aae67addc633cfef0cdc85d3f35d8ce675a4cae6378d42912705c3e0536a1e501136e150edab03505b117da82f9f7aa3b11ed83e289824bb8fc68902e82bb71f1b29fc0fd531866963c343334eba7c2cc8fec1444d90f0083f8a3c86e3cf40757b159ad103b5bd3d41ef5421f6d50176162c55e6d69322a3890a2a37ead6ad90f96871643c7f27f035af7d97b33c17b04da7ade9a271c195bf776cba39ff9f8ec8131891bee1586f806e733a0006a027d27282d2de170cbf8a37db472a385489cebadf55ec672568834474afd789321880bcedd4d2592c46b572868bd17104d6d3ced389d7257fa649be633a63684d759cea21701a4553fde63e3d207a832933f3a50cec1e8cb5a401b992a5cb27f45b9e21a2b3f0f6b1830485839355c4a9e404b0509b325d8f2ac184c331158c16ccf4912a7fb74dedc37b223631525351890a1abc091f78dd3475c79f43273171ee603a1200d8b02bd07b6ed8d2574c9dc37f2b820a8f984f5bdcce478be2d8652aeddcdb4368c2861573e355203c1efdd25beb3cefd6b7ebaee19999e6218bbeffb2e109830756913f15660ea88a3c552b5a3c8cac79f1f5dc8c851dc6580ddecccaeef05a9d753beda2b938312a4a6979d36e44814a87f71699cdc713004a899ec9608cf0a6c9f64821a3c71fcd93b80d3756b5f3de742d664365cd75fc57d83e8d6a641441062374c3e4850acf0da6d85a67c76863e411c0c18608bd28c2a4596b2456376c04701618b851048bd9da084dd63694f54da7676f3258091bdbb869b0dcaaeed9d1d3f814a06db542f8a10a8db18efa4d25a0a2269c40f3f598834059869df05a9fc8e62d730ab6b6081848636702c5f373f64ed1f3791f86341bfae4e5f231559a1eba2cd00aafed7250166fdfcb45eb1e57ba49ecab62a24ad8d511f51cfbb88aad5afaa10e575619fc94b793688113d9f1dac48157a682ae27c72276d0143d902429f1ec24b08806041446a3e90634b56b9db401fcccd0b12b1d7868ed12de2ae2fba108124dc0973387704de72dabde7317316fd9a26a1c40b230185b7f27c5cc6a3e3f6aa8ac1e53457b462e4b3280787cca86e95b16302489d413f15bf2a50bce2e4b6b1ea428af5d7d3e28f22de492aca68a55efc35c5dc522eb584a343c63578f9aca59ba65b3532af5b3a9e4c8a1b0b96894e7e35d77bd23e35d5432a2f078646f1e108577771e10b65c1a01cf949523982abf2a72fda49d95d9937646e72cc3efe674c68ea82cb3ad0cbf60c7aacc1e4ad95cea60863fccede3877986dff29353970ce10c3f6e2e858d01e43afc98d565f6186ef819fe9b8b327bf52ec32f9958940e09483f64f8e17cde76a2decd6453d76566fe5f34b3b30cbf6cbebd965cc03df439bb2ab30f82574c280001ce56f80f45aeef97d9af747666b590f6caec3d3dcaf078a7cc1ed58cca0c8f77cb0cfc3267787cb7ccdee9cb5386c7f7ccf7655367787cbfcc1ed63a76afcc5ed345cb32bc332ab34774de9a9aecdc0b9db6bb03ddb5bbabf39e30dd39bbb74dd874c3ee1dfdc52ac3bb77cbecf7e65cbf732fe9d9ddfb51cfeeeea5dd7a7b9474eaed3b65f64cb4e043f5f6ddd0bf63ddc6a7631dd82db3a73b3a70bbcc9eeeeac09d327b7a5b07ee96d9d33b3a70afcc9eded581fb65f6f49e0eec95d9d3fbbaab4665f6744f07c6bac0910e41d1baec1d5df658177efb7699fdb93837fd31d6b58a876a67e77699bd648a662bfc9322d70f6b5566b456cfd955866d4797d94cc91a6274ce323b678ac2230c4a99c1c55647448a01bf454b65ed4cf7a2c513a65e36959e17463179ba1e5530540e0605233f01d84d9e0f06e08f27a820040a7eeb37e5e57dcf93757dc6d63c8a184f33b68abfaa7d783ed097ef337605a860c9b44d64a296d0cc9c48c01ab4eafbb5617332027b059ada395c1aad9be1b16cce1fd91d41b72cb3c28550c07299817c212af20f5b39fdd201c03245f52ab36c85eb6666e8292b7f81e1320f6e70cc93195a13b6c3585aaca139a3f674d6a5b963b53b1ce53f0abb2dad6fbfeee911e88972b4c2b6091b5efb6e37f83ed0655d9ef2c4edcdf72bf0afbfb142f88d2223fc59ff7c04391713fa5789786ab58005f2d1f6363c7cb2e3507326d4c7f8c1a6cce909fb18829ffef371eb1b1f8303ea68261d6edd20c7a75b2f9d94640173313d6523e3aa8835356543e58ff724235ae1f3e602821fbbeb2ef32946dbcd7fdac75b6ef81bbf51bcd1c7aded67fc514d8d0047e74f86cee6d856e5a82c3e02b37414d5e4d3c69a7cda50934fb6269f7d4d3e879a7cc24cdc5c934fa6267ad2404d56080b4194f053c78b7cccf08022b9091a156a3b43f4745e484f468b13bdf869fd3a8de7b59b6a3a68a794bad49717538cf9d87b4f90eb0b013fa7f2ca914232a95c4515053da563ef6c08d364e61bc96c1b93f7efe32823efac92b88d13f986c9df33c75708372226ef6250857f438eb6699b59ade8c7be6dc5a43802d4e6cb2e4f19ab1f4749db6c18c5e98d0ab27eda58e4a7a4c84f71919f7a8a4c32f4a4fb2f7e76b46ead2838c5b1edad05d9df3772556cff46802d05d7a90cfb8089051c64ecfe6d9c71dd6fff4d5c1069eb949840b4e9f32b48d07f2666a17484fe856727d1cfb00e3e8abee744fc80f513c0996da211e95b042aa0de7cbcd16f332946e9d1a5357388d67f106344ced8fd439c01aac0eedfc65dd09a57106b4310ef4e16ac4386fc73f1e62c8284d726e852167313fdc1d5c2ab4164d884a392ac62844bf1ef807a4186ddbf8d034ad8fd9bb89aea01307f26265698d049e6f9513cfc911a45c811d5caab5684545fb3a0b097617878641f4c2a332867f61fe28c5e1f004499808935ba11d80720365210c9b0794a6aee94465c629819418bc4a5c57323d618ccb07d4c6aae67939d54191e87390837153b0bcdadc5a77de56e1a3e81a04f311a0b26e98509fb34d03f3049af2e7c79e1b8b1330100c5a3b406262d045f2d5492620a3449a1443b6eb64cfb14951a293ff8e45072ac2c119243e92ddc35f4e8d9c0d88cc1c9094082b9c0d88f8cad0784a35ac00e9761f70f71a09caaf70bf3bf7380f79f331cf45b61cc75ec9b3836a84c43dae738cdce841dbb21da4533a3e23584e278ab041b92dfbb08c895eac6ea71b4116e2e412eab329be11032f14e8556a784b04dab6c7c15e2a4040040fb0f71eb6a2858c7bd76cbdcc6415ec04fc3f6cfc718755d1bcf0c03264e751abc3ec74b1fe173b985a6c371eff628c36088ecad9fd506b61b18844cbcd50e06883f17dc717b8979c3874cbc511636a06c2664e28df2306c333604f14199584f4a7eeefcad43ea478623ad693fdd32a7698c4368e7e0002f04b95ee10a7e67828c2633f1a0f6f2be99979d1f0b528bfd9938c0a7821c8bfdd1013e87c0f800cf21b073800f05c91a91dd2ace758614e3edd6b9b0a85f6384f09520d71bc49ae5b5152c9687023b816479286e65aeff3535119ce894fba7e2c0b265ad62413917abc942ec9f8b0372257025741672654c1f2e04b90e2e79ca85d0a4dc93e4f59e4b8847bf2818a984bef44f9dd0c4bdb5b3c289cfa5721d9fcdc890e07deb7428d680ece89cf983bae4c700a8f217e823c56fb87c5570f6600ef19291e72a5600334a6bb12e1b231f921c869ed1dfda317a0270495bff9c278aac929ba384222db6a83ae16c889e17f3359db75e95b898822b1951a2ab6d1729dae9e5516e54c383e36e5d2bcf3d47df0c449a7b6ea03b65f2f1f8a82f434ca8443837a2675b2e23342e6ceb393380dd6fecff675632f2361e9cad8f3aaa49aa600faf92916fc9389ad3a864a44db203996bbbd577b8a1d04a46fe56ffa9b660ac8c9874484ca7253151afc44a8c37eb399a392d5c93821b90878eefb5f54581ed80175d825376c00dc46ab5c22782449a481f5a267fad1bc0eef2fa484749968e4a1f7e29c805009e259b053e036d8ba0a796580d244a19608d61fcc65cb32108ae54235b239415b16a99246001b04b089146319bc84dba7e416f7e22bd2988f4eaf513497607b618637eb0b124ebc8cef4f09d41a41899e7772db6c87ab5b120b52c24b28a390225282c217bac8d0506152e655f1c5817a6ef55d1d196032f5f91829d57f2e224c909fe4ed754efbcebbdd1a47e307335a8dd99b620b3fdfa60b2c8f3624116a9c33c0019e498e206b44e5af2a968f102a1d5aba2b59ed22e0540ce78c5396b50f949140ab31452eb93f74369f7f89702d044606d8f2c1cff7b11b9f754781c2bf06e8d4b491e6fc8e0cd68c9ab6e8e9598b221ad2a6894138b160a4b3c18a17253525cf5f7beea155b2e6b5620ebe8e895c094546c5231dd0d4a5e5db7ac90d8bad93de682d6f5d575513142d17279cc8a584be8b12ff548142702271537293122590a717a263a4a1967c22a62d064b21086e9daa4200ad38e0a0c8d96299198116ad47319b94e74c9d9ba2eb94a14c9050e059512fb195eee1faca087c056e285c082303c634815c23a87330867d733df970b83826f537d7702e63d369de923d325e25c8f256d345151336d4c77799211f6bdfb603ccaf333e17546226db5d837f1252852475a9979be3d7e70a822df9508f4bfa3b1c50be58a350d3753eab52b7762b515e514f4f1052abb455a9d72b95e20eaa1bb3a4eb72c0564cf8d4a9123a3dde974761ce46d4449d8bc33c83bebc91bd12e36ef31e43deec99b9c72d67b7350b5776cdd5380602c283e52c529c8a00abd924237c2d1e6caec39b39d883e2e1c9f47a59edf506a8471eb3a79b92cec7060bf22412135d1ff13a997c6f7ca3a440bd669705c20af51a50a89127b3703c8182606277a859e4c9cbe7ed7da4de82678c2584eccfb898abd79856ed6b2df35e0cdf4644a6f54aa4f0aa70626af904e69d81616ed573855487de2d8fc838f5d3dfb8299cb13435c6c39c3612f955c2e8b42dd6c4f8c523c5c86334b016408ab3e4f4a20bbc4c647ca174104bbecf357f437a3672fe97c6affcb97741e691f3c8ac89d2f401d45ee5782b76e50f214ec72eb1d53f80bc0c5c269a93f1fd41ee36d6500a6d7e02ba58b4961095f38683d0f67304a0c5ed60d764c76cb4d1d8c10361186ddac9f853e0d0b13e19f4cfea4e884ca350ce712c635cfddd99fd6c5f1652dbab661199a07c36a2cd3737c1b3c08c5bb5d9e5bea6265aae59cb53e149119bf67223d6a16429583113e02d4a367e7f484bd5aa8967523dfe9fb7827ee6f90f740dcd7a735fb1a057f93cd626e9f5fc94a9f3e3e6ad6d48bf3f065f3d8eae0b12de4d89470e9c2afc19eed82b9e777a7928b33f7f4273ba171aaf14a3918e113c9ab879251177e6b4ab4c127a28a9edecda9881f0183c03e3f821aa64fd1db26222ec0c6b8328e1ba1fe3602b1c108d75cb047353d9fbb87df7d92056682a06b4423e7a7d4748fa247eff83768e725af9a4b88fc06a837106a9a73f81cafeb57a12480038b9e5bd5cc9347d99cb1c70e662a8d32405321eea5c7920a716b65b969b1c27f0ae2e1267076de6618302670f62a8bae414ffd5a4eecc3d472e981e4c33eb45c661662252bc572e990350751869181df7eb806c8a017c743b1cf0ea64596dd5268a8243f2f50a96e65f3af59a4e86ac9736f25022e46c1a5e755ad53fac0548507493560fa6e4566dbdb19c2943c1585c06a5f1c608926d971dd50d07fb6707fb3b67d0a51c8a1988782314525db170784ae5616b8fa8c5db5c543b101f3e94fd1130f0899ea9651e87aa88a11ea30ddd8b05d1c198708c518e187625f1d10e8ae15f220426f05a1c5f539130baed8390cf235b54bec88b66687907659eb3f767ec460a59c422c3f3f813f315fc0143a6357274cd895002bfa9c29286d4e2585e96c5ca3c0fc977406792ee113b166dbdf220663e1c7c55b5d716f3518a01c0df972135865d7907af71e6638cb5044996c7e3946c3f4e89169817747d603fbbae7bb8de5e679767808d8415c6cced5adfaddb1b5a4b71582e99be76bee0d6d4af7ed1d687544af7d0b9d6cce9d6892678ea85af345a886bcedf22ba9108d4503fc7aeecfc7181cd1332001bd70b6f6bcddcad95adc42f2b5b8e3469e53b5162de8b9e733f2b6e5e2641b900abdcf8a71d7bdc428ea890f2206e0d1840dd94bcc9496cbf1b863b75476707fd14491f37d7530e977420d9ea67f1705389a66380616fe4b240abbbf3a42d1d350050310e13e202947164e5dc002ac764000f4bdd2ab932400c5cb251b1e35d595f50d1fa1069be850af3f8c9671238b09d8c624284b29549207c3f12fff14f73096040a9b384f72d2600518a69787523270aeec968c71936c7762f6008c677ff15a70d7fabd52627bc6a96db69a302256acb41c32f30d3914ecab7a678004d0b52449847397b8d2f1c1306d2589854d869acb7815fd268a70b430eb2e102bf2ab28d044c5361d6ca857f5b3a7929ebbde9fa06b3d34d65be3fa52b39eadfe362ac54ead6e782ad97170e62fac43e481b00c3cf878c148e77de49d187a74978804ff27e65eeaf1756e32e2708a3ee5af28795e044f1af0042e7263cdb69651393b4da214ab93e7854c9fe7b46d2f1b598548d4f111adc907706800393a6ec08c5efb736bb1fa4674fc327e16bde6fed6697569c9f7b9e74f5b4fd596a7ef2ae17693811a7abf5bab75fbad8f22c6ad4bfd5c2f979981bd764fa2319e3ebc8fecf569e14fbf0045de97f82f0e24679cfcbd1c1b330ccd89069dce64dfa5b365ea3d3f67cd424d43d00142abde576635a3d2bd143fd8d7c2700ae97727535136015f2ff16277ac79b7c3005b2172256896cf6a7df79250b82e6f2ed9056f16addb2f821de668c2cc0e733f392802945c4515053dde9f80505c2eb39f063e34cd8843b0067a376094a9ed6d6039643fff64094c75ebd6aaa72e6ba028549297549d0e251555731e83ededde757e987610e692648787e08219cc3004ad9d75cd4fd92d2a711332004ff1772aaa9ac9d6a4b621f591e3999817c3e0d43276ecc725884083fa7264bf1d9b034f84e95045c47e2b0f964ba15ff528df1e4fc7a34a98a9ef4842dd552e64016dcc7903a3e9acf1eda009532f7f684e6cb6b0510a7d0c0b949c0a7df0530b19797cd227b72e77b964ba0968b9f4a6cb46b06283e3dd10f6410f19e58aaea4a50cee38c02d83e0c362049fc833ec24a500777763cefa4c268ed91ae86037758eadeb9a53fb7f2e3bbbe75c1a9fb1e71e0aea5c4eac351916e45462e96d8d3125d63505175bc7727a2caddb94e3e464c79c50472c0517b332cf35e94f08a1fbec001ccdc2771a22b79935541e4fd403d2e88c725b99ac7c5b1d80cdf2c4578f503be7191e3f50d3f1b6a795a0c98732d6dfd48bd5e9285e6d4cb990647f0f8f77f1ce3dbcbb73804f24f998e7d9a300d9d3c1d3c347b6237536771abfb4563aee39cf8b2319187e7136d3f697e633efd957d5293fcf0747129f417a313891cbe591ccf3fb0ff4ef78fc0b399208bf90a44ffb7f7707e14b49ae8fd8712319600895df57d4c81af16b78210b5a1b69c226fd8d2c053b321a884e47d163197985c283158e5e7822aa1fabe1a3e49db49269da867a0267b00bccb4018729a84144084649bd0d23e9dfd6dcaa2b6da83ba4fe68ed6fc491fa7efd8dced1bf6e805355dad00293fca34db0888affaa0d2bfc55267ea33fc95e12d0ead1988d637b3c20e442faabb1721619a8a38263f7999d9d3d388a9c355e479fa75753c670a9ddbdb4c70f6210c9469b7697ba03f33e634c88f4ee121928863d4b6f1f8fa11774e89d4c14a22ee58fa931e9d3fb442256767bae3bc78c888b934b39ecce7fef98befb2228d2745f7922aa8d2f587db8b577cc84f2373aeeae7020bf792ca730fae08faae76b1dfb9c3cdfd9d9033ea01dd79eb7a059febce1d3e24ce67976d6804ba1a13162caf3e2b15c2ef980f4bd3ce5a41bff445479fe58e67941893e7351599cca709c16c79248b4f144d5233d420873722823ed18ee110aa61ce606a1a593a951f25e16c6718f4b43f88b2a38c2947054524310148cbc94d3144f7af3648031b51df35e3a179bd1b270a2b81d583b604c65a89f422fd9117e21ed2be14c283d508d827a2242c80b99e75fa5a59b3aebc890692b23535e03c27eece8986eb5cd1d6c7022f3dc6e17d382c15068a2e85412472ac1aac20c957d0a7d56dbaa4f812f28fa0d0a35b46627cb25d0b736640d53c0b197cd90e72e83f505363ba5fa8c7f60424e4bc25b36ea4803ed089deb12fa08019765b556db0d231acd7365e7b919023330378c039a16852257f1dcbc94c388027152693313999e880aa1d22a3138b1f1d498cf801c8196fb14ab83d50abf92e41a7890e56084e1c4b2ff8a9f4338730fdb50e9ccf0b7290746f779238c30cc5cb00d0bdbf0237418fc5e003b1bf81ac0ce66b5f9fb0aac70f7958584e84bc6cecac12832497d2dff53864bc46b990e06afe4bee18e1c9429730436fb27ba1740c9fb070f6cab109e9cd21077f3d16cb1240158d200451a40cae8845eccb70c132528a227c773e89a2f321521154c53e061923c91435380531832eef933a7de4ec1ff1620ef6003ceffc8aed2dfbb179987300aaf1264943fdd3deb2b2be0ce15900023e416e9370ff7dd18d8d4f4feb394e078ab6f4d8ff46efe48c2513d3b8593b6c81ae12cc65c1bfe9648d7f691d33008b211573b7b0ac00530b637cbf33f65f1bb44089caa7dd161cc30a07b215c31f4caebde0405ae86150f0dc0a2d52caa1275232f32f00363c5e3000c50e87641d7e2e291240a0da9fa5edb909938f674d50544ec78dfc2ee7cb11cb160266b1efc39ed7adf7440c4628f070b74963bb96368a65fa3ccc13ff072d937cce6557ddb7a26c913e15ed0c7e7a0f706b75cee3de8bfda99bbdd1f12ff9452654f243ee42d6c87d0a1ef16f3792315abca673f48af1135ad743d2d34055cb4c36643376d3661007493393886b0bdc1f33c03b18e777c8ecca5fca9f40e3b5fcb82c21c7c2651437e3509d70df96018052df92681162be2ea243e99f9cd3e99e99aa7545b953c2f1af297512d6ae0a1312a276ed4bec8a281fe99b479de160c53ac108e2764c1084d9d9421bd2d07a7ad791e7981747eb25fb38262178fa9f5d8b65ae1df24b906aa1f8cb1caeb2e9098de655ffaf4ac7b4bee9a5281fad8c10ac303586add50a4b5e4fac122adbad80df57c1de5582bb6cf3cab53f40df57d1de5f83745aff03fe99af9ed7b2b03536415cca2e6db651e97ada37043427775f2d818004607bffbc5ee4e4e0d5a5dc7765d2416e9cbe5a0c9f3014fc474fcb8a0440ecd3205254859424c2a699c52ef7b8fb3cbe5925aa6a411f3b855de4c8b8628c71c2d94d1e95eab94379947d31a3609386ef2bc50fa2d6ec0732de35205c6a5b2dae18505194565634ed826665fbb56adf55fdae9c86c084ae09afc2687615ae3857f86f9862b3b1419ec26f1300c8cf79e78f006c6f96a4b842d389e81a6e878baebc2ed73067b07b37ea49b292d2b5934fa0a6495594c8c42b8a8491b5126356e2cc50a1449752bb34695b5c3c463b84e0781505cc8a49085277b5d21d69e53ba4228969d4218ae88c2454b1a94e715b2524f462adc9011566441da899a583048d4dcbae5401e31256c422754a75084944d998c1e34db6a82163a7e8170b3bdede2d57633418c004227562e5e67803373618618fe22ff0eeefaee0ab405ac169156e5c2126750f3055e90fd03d8a1cdd87aa70b0d69a38297cb069c3c4cd0c22802b708b7baf0d608985b5d4a95e7d55a29556f29d6bca142b8d2a558b74215194daa070bc7a0ae6edd42af55b1d8af6238ccdae56d03cc66a5fbe5b52a5ac81a60366580442684fc21a7c51f9646ddaf0f50094f78bfc6f24093c620caec1591591522de4e7da873bd75b4ab95cd8eccb218ffcc0819ffac7722063e7cd580a8157e23892d27c077a5aa51910835104acf4d3078a7d78bbeab9862415a9dd0b3abb6e25355aa202b48ac26051e50e3080b3a6d7b1c0c5e92dbaf26c01b5918750c11ab63e83bf71b69701b1516fb20a019e8a6eceb8703accc3f0a2579e5115db18f860fbf998f3f1effd2cfc7c78c926b435bfdd8b5cc78fc4daf6526ee3b1cd380edefdc0d98db597a2f5b777970e34d0d2bcb0612f65fda7f4a93fb0ea7a9c75e7fb0a969e88f720f9c5078cd1a55aaf4bcf38073d4cd1045974b450784fc2a0a812ca7285c160cab9c8b4210a5cfe27f4c2e726d5c5189619a133351c5914f44b52a41bd7676da4800262e0429445aab3cef44a467b243493e61d65b33000aa26128149be02ba3af2286f1238641824f8ba10f9b58ff42f4b4c292e6f96759488a7d87e841c1ddab33a3b6a1580054a9bf3b5b4adfdb8a1045dd0d1a19095943131a8bd11fbb7d60de2169d2910f0a3f535976281da35747c9802374cdca6b4e1e09c3893c1fbaf9ef85c70d194d9a075e84d8d805ce41999cee3707085d733d3d034778305ae9c2c12d4e9f3d2eefde9c3a4e21f41d87a3480985af29a1680a8912ae578a72cb04ad9be7ea144aecb25af3156164057a718d52c3cec848b6c7c6d61bc7fa05a4eff49c1670f589b45ac2322ff971f1d119026eb631764c6e535422085f4d5e0fb9d0dbb33196ac17275c800e7791bd3588e04c46495beff8f9bc6671cc134fa4c5b1860b95bc09958f63229163141d6f5e089f9199c42fc842e24b5249dc53dbf657e0a314d76b552b2f04eead5df98fc46b152c7f9278ad8e6543717f35cb777285b035953077644af60f704dc976b4a92e68c1d0f5e8979a021e967300d4d2fd9a1e60f367ad1fe9f676c4d7a8ec6e5cd35bb75c3eff3e0e2519d6d58c92eb153ea6e4dac69733bac2a7d1f360bcc2e794cc68a416906cf8862d39b4d314768d89d153733655d45a14c64a0bfcb890792e871d9d9497d631d807714edb33661c3a5aecc7f8cab1f1c5976baf4ddcfe74bd825d845ae77f006cbd4fbd533f99e745c1e24aa27f553bddb93f5c29c211e661d00e69a4a661ee7216c733bc023d1b0df415bcb3a0c5294578418b631a255edc947842233b9c63eaa6c4809019ed2a52dfbd8fd0a4d205608570a50b4cd45a8f686a0ed61963e6f475e246e040e07aba10a403710f05251d6f12ac074e92b59c05f09f0605a4b33555f0d17dfca6d00470f6c14235631ebc6c0134adc0d7ab04b0fb258d8dbc438b1cdb5793d86ae3683379928ef67239a37a1185bec69d2e3df529609b17fcb8dcdcbd8335176377f7109a8869a1881d99738af0e6d5b25655a270326b7c455169e3fd1cd0357a416fb2a8bf4c52bb8e43f0d724d9985df9c44fe9bba7cda2ae3e715657f87dfa4df6cf82b5ea35e542e1c74992682ef1bb2446cf1cd3cdae8e60568b5f25b99e9d9fb38a53c57c435ed3ef620b3c49b2741ca17c49125f34973ee551fae5aa0e1ffd1df6e68794786c92f774fa9ec6c8d52bfca7a5c99fdaff6770fabfa5e4312d10fe9b9231bbfdcb5b3a7d4c7b10af759eedb73492c97ca38517f1bea38533617f451d31b0b767ecd55f8798fb26e64988b96762be8498bb26e65188b9e325865dfdb59dc47ee1035d775bbdb5b7e7ca79454dc97bf75dcc6b1773cfc53c7131775dcc171773c7c53ca23f589fbf68e7be0d15c42f4c74245fa01d032997f3d225444af7dded9f10f2279d167f52b2cf0ef4d85ed2e215c5bf5184ca3fa9b384c6bfd348f79e16b1d9ec53eac0ed9fd2899b1c5ff57756bfd1580cf39b7d6ff08c7a4dca3f29ba7e460394bf911e99edf04f3af98b167b7b89db2b632f10cc209883601044edb38349d55c0b228ac1c8a348381f5dab15426e1207eb043304be3679aebbe24fafda776b8ca01f5f51fc130513532bcf82d9bf32b693ff50b21b26f6f3ee708c47f776efdd1edfdf196f17e35b45113db35beae7f108fd5c889fc97884962384fe8f083df68606cfdae03ec4c1b937f31625e667ca209f2b848dd64e942f98ceee8b037d7dd8170784ed8bc87f06b4e273448a411fe18f763019b738fbbc23ec14bc40d78a13c689cd1be938f31ed2edd0d26efa9cff4cb1181eda2f1a871bdd88d8a935e5e1a0fceccfb0c942178470a7fccdc5701e8cf7629d5d57cdc427aa258b9e7c9d73c34879cfcfd903857ae3036f1c7cd5f4be097cfcde779177813928be5b0cb217aa0d65ad221f47a1e58d6df9474a183683e6b51e9cfbdc98e583fc2275b638a66fc1cf044b3ef90b3002ff6ec0e3449abb2b6d6e79b0c4e386833a181b177e23c0a0e6c7c5ba11429efb45b36be0630add02ac48884758916b3bfe25c3cd51cbe405ab7ee50ac03574ac99d68e67c863cfbb1fbbf4e8ee48d3a38c13853fd2a463c875dafa7284e316970a4b772f35a8b02b0b02a2fb1c2c0888e741b174a6c242ac79c2f45af0b0655f1fd196199058663e6a9527edfd2c7d36b5b21cbe6ec6be7878e10978750e19e3e7a4c46ec69ef868fa551b9a31f4e1a441761699a7b865c659be8dff5fd5c2198fcfebee2461d840efb5ccb82e291556f4a41ce139bdaa1b5a39b71f8628354f7ed242a8ffabc7f6ab6e5647dd334d3a314922aa2ce2673b2d719a275ab7a79dedbccf77747477304a946f166cc1ac90cb03b100ca459283e829def5d46dd64c4f59c9b32b74ea75b77ea4f06e313a8fe856a0ec1654f18222a71946418552743348e41167e87229a146c7bc9058f93765d4c55e4441e3612bec1bf89817e642e463e8a6f139ef8c4f542f57a142103750d3ef765139e746a56eb8be94a662d8b3f088e8c9aae7595fbc9b6ffdef44ed9a6f9c77090f03ec9840a1366a977501df19a20e54c821f7327c8e1b4fff1bb4b26b879865f4e4d6a465856eb55dc068ca8ce8a7d145a1d268166fed962c38ca27dbb7477bf7f2286679f7f6c46277f98554f01ec1dc8d9f720441cc6ad029a6e89db206deb4633f459c1d1e2b30d883c7e3a2158ad8ee47d12e6de5f22d19e19aa8649b5e10ee68aadad25415a93bc4c2a47a40a76ecb30ea3435e6648170fba00280b44acff8595d54b81ea69b26c20b020336c2355e04581cfdc1a1db3b0d81e23b98eceee07a1836d044d7530dc30130b58db1d9e224529745fc1c1757e334274208d7c47c7165c4b7e600719d95cef66e87cdd63b6c167598eea18af8fa37a038be40baf366d07933dd79ff577a293dfda69dd624bdd689f4bd97c6f7f562f7cda437a346ab782314de67adeea1a9eadb548c1277a7c5a1c0a87b612eaa30e309c7c934270dee1d4952e1e3ba6835059c0e206971677b258b8881cadd7d5138bbc39ec28387ebb8e59d8eb0bb6adffb38e9b0be1e421b5ab5b137113ee145b266b0f085f42d229852e19d74a8a3777f644aa597cd93efdceadca44f9c765f877843a158bf65a06bb0ce37ee02758cf7c6fa7cd49730bd154bb47206c2a68a863770c4c997e15bb0663574feafc17b1d7ec94921d8e5961c82e1926042a1a164c76da0fecf78107fbaf35b1fe49a1c206b44d35495860f80c115763ae784bfea75281b049a66a43b6d8dc360bf0a1c1f96936bdebe6c16e04f6e1ddf189c19b161ca057eca8f984479ae54c190fed40a33f18ffef63ba6cc452095f61aebe89e42ec207d6e0b4dc51d717f404c0a4a66bc90e4630b307314618a903b31fde55c68ba2d1a778481b2a508b3ba6058225fb3b76c5ed319fbbf5a3b454fc818d3ffa2964f1b39b3a8dd1d359d9baa284c15655a45a9ab28741505d61f312a63f484ecd86a299812be5aca564bda6a8944e9fe32a22d0c6975031595c8c20c0bde2f097f99e98d2f0cdd560e220da3e5327e1af2f6f54232b308ddcbcb6531f82c41dcbc5cea10c53c3667feca5371c8608c299951cc1d0a8691304dfa6de7b6b8679ef029272d2f382a0b4a0e69a1d0f49c96917c86138bfa37d081a4f416a1298840292a671461037ca70a8179cff276c703f4649e7b5ebe8d99da7febcfc66e0092bce038ea7da2b0ea9b3684e1ff566c49ffadd832a2d23f45db20732dc27d4884c6da4d80fa6a5dbf6533c62f187042f3fc86449809fd057ef8f3ddc3a74f0e6f2cf77b794cf1b6de86edf5820f7b769a42b95cb8c3397bcfbb6af8b1888e82c9460b18b410db3d1c30859385bce4d6f9663a8f6f9cc1d465753399f7cee4900d262d479eec2cf8da8953c0dd83638129980ef6d7ba6f480a5df713a61e33c92f6cbea7b23937ecee3c2fec99c9f521f82fcaddda5cea72d9939d823296a0f3f6b4514605c3ddea7bc807da3b47e01ccdf3defceb1997cb4211ba79f2f7bd93e77db1456f07dc58c71b120b84d580b89a6d9cdad48d060e04fb7f35393634c257f031af6ce5d3bbce6d43ca3ce6e4a194f46ac85bf80f67d73b1ee92d0406b9d04b08f50e571f709a859c1a1e82129ac505491ec760cbabe8c91af3790f39746c1156f9aa57107ffb1e76d63e9464d9ad2e6b4445683c921dc7d58fa63ea4c0dff0d02004bd65c7c61a52479645a112f7c04612230db9aa08212f39f05b4c0cb95ef90b199b56e01c744bedd38352ff10b642f15728568044e7a089a21eecb82cbf7fdba2e3f96eec64d81b817ee1ba7dddab207808668d038f04d5e9ff31cef6cd705a85e8838c90754d66878063757ed1d4ce81ad4bae4eb7ced855bb759ddd4ab58b875f1a2e8a0c6f65e856b6ca4a6570f4821d27ef785f76f390395a24be54b9db8e9c5a2832773f4ab9120295375dccb058bffa475cabfbabd8ffb3034f1fb044c731be7bc90920926b1292c8616bc18d7af16d64b8b931206f5ed2b92b464d909fb967ecca205f1ac804ac50e91e014b012b4d1fa9eec7a21940d78c409fd496bb052590912684cceb56f019c90d0b7bf47a1368f38ec4c638d95cab221421342d74db21177a20a6858a3a74070b54ca723d2e12feb631789e6750445f80cb7ff47e4230d5815848a5fd6ab9f4f636602efd7badc9fde179533120f84d76a23b06163d2d8c496c141fa113f57ec66c3a6ac88c251060c9c346773567d3a290a64c43b140c9c7c4efb858862f495d0349bed4857917035e827b139b318a6bbeb19c480e7543c7dc761db35caa4dd8dd06fe298e4933838aa76e35dca321771a059dfef0473a3d825edb3fd83402b3c0beee69d1bd64a81fc55fd5f4d9bf1bece3e8505c4791eb038fb31b84996559764bb9afa7df88ad3b62a1af9b4b01767ff8d34f26d9b2e61f3ad806a1678932b3c46e103db344c4b3c4dc831016a126c230ccff2c7dbd1fd6c5864aeb03eb31077dbfe785375531bd1c5eb1b0f67163ed49d40ff775da25f25d1f4ca155060da2affffbc0fb129f4b9a40339afc666fc8b25ba0b7ddd7f711d4592411d9d0f75bb02a815430cb9410f2746ae7a519043f9341d050865dc3b427e9f4a8b82acd677b5c408fa7feab42e3c27a809e37bd2d36f4f6792cfee8eb55d9d3ab1ea20cc6d9f809824ac184cab25bbab4de6e95be5b832709b9b15b7dd14e6ea88f4051c2bffb9a8c3b5c618665b7c329362f940b93aeeb96f6771537e3a66f618aec10481802e98760d6d71312d33006aaabd71f247c05c50d6e711d604f8ddd1eb682931969f09c3464840f83247940c82ccfe70fbc65dcfcd62d743d33e7ed2ff3697148667866f8d4e5219979ba40977f454e0b8a67b8dd9f1fe03a761971e505e9b33c2f66e4d0f95262793ef387f0557c082b5d14c20de1c5156ef03c12442cc855597992e20a57e40acfc8a1eec43921deaacf4f6453d222aacfccf2b43b0d7514c78c1c17d435c3d8a9f362b6568b59548b19aec8ccab7e2d40423523123ebde93387e4bc98618ae7f1a7989fcc877177cc8686da772d3884a9342fe1df74d3e15a050fa30a1ee24a777ba07c66fd30e68e102b28666885108e642a87ba57708d174e08f9bc30c3dc7373abbaf7a93b23144d89a2269521ef6bb4a6f17d678c901798ce889db073d2e243d29211be3211175680557898c8799e0f2e865523d8e4f0d6ad2803ba9edb397c382daec81ccfed1cbe22f3640e9fc01c9ee30b830a8017f1343ef1d3789ee7c59c5c45d378eea7f149771acf116e092f4e708b0ffdf8cca6153929fd02222778464ef09c5ce9696cda104fe039c2555493b99dc01b5aeb66d8054ce4d016e3298b17176b55b988aa728167e4c24f950ae6f21ce6f21c7dff8be7c51c537cd8f96a98d61771f7cc3bd3fa02a6f5617961a6f5bfad2b94f863d3ba72db66c4de9798ebfdd2ec9537b1eef29cfb13c28f3bd7750667659cf0ce7961f808d58d85eae1ad90b3695b3fbfacb178653e841744ba69bfb026ddf684afe0e91e216401346aa86bb9e85c1e4c12bad6ad5fb84e4518ee120b1c5e9c761b54f2f57bc602f3e47ec088f4567cf001b75c143ce005f19f5c459fd277934775d1fda2a3fd6a0ced8f893f46e04a536b62d51464f260de43acd6719535b90e96febea4da9fa76dc1fc996efb7e610739dcc70d58b9e9f7053cdd763e01f37ca3233f6f83e863d2cce9d50672a75166c46467c424e61b2f37ddc190f160a41c8555213581ced31e0be5c41db4ea23ef780f79e7213438c9b25bdc7129659edf751d362d36346a7dac4d0b7486df6fa828c2308686b8e29eac9afba5ae939e472987494a95e740e67284bdb637cff3c1c22d52966833597d23739631cb01c3e150dbc16c58f1765e53b05b5c2ed950c07fe6c56759e0b199161a69f7134e5ef3623042f88b098d117ec4c9f50affce8376f923bec20f3bcf7fa6cf91fb176ec19bf49a7bc4bb27f0bddbc1c22a62d73cb3dcbe8a167f726bfcf490630681df397ec4d1c459917bf86e77d171a61fa6a3c6e312b04e8285b9073851d02fed9cced887b7cfcabfcde980b3aceb4f5191bf59a14821c87d50bf5311ec73a950528ca59e85610c0388d16aa12bedea1e5fc9df726b7da79317ba8df0f7278f01be20cf535efcc9bde997f514f69417bf87482ca09a56991e4d94d1ab2b3a7d973854fc06853ff48558b8a3a44686dbfe211ae118b7ee2fee90d6ad155cc4fdbb768eda0c3c8c37fc4fc400b1524784c7a13bb062d6395b85022a3a80ff05b87483f61870d61cded4788f78849a4896ea3e0d72a1a164178cd6608e6cc0d607a4b87b3b8ff8723d258b045f1c5ddb80db1114f031216aa2b75e2e16c0f987beb58a7e9ed90a75747461acd0ae6c71cba50bc53863708f523ed3ca97e12b6103314fb5fffef66baaf6ec75df4b86e14c2bad26cc1f5d4d98c7bc9d53353b6512ff749396cc6f9c8cf03fd65ae1b9fd7f63ff3fdbff8ff69f59f544a5ef8bc23e48fd401bb05677b0420d89d0fedba670a6405e04b0338ee779dd78f1815843150978f3a3897810bc578a072c7656cb8f0b8b06025020bd382081b3dac4ea13f0e1df38e1ba23946bfd801036ed08c58c78ff8fb0206d75dff0e9bba67cd56005ca431461daa0ebaab936fdd234b7c8f8fbe5b2867ce6ba5f3f72e28622fa5654bc35bfa20d9ac47dae2772f4c2e306178cfcc3514799e1335fd7a2530d4e9579858e88c47ab2c15e0de279a0579f1ba30b338f1854fd33276fa0016e5aad4f973591d06884228ba9c07fd553276dd1bffbd0fabc8c38aeba70631977dd331ac18c021e41e21a5262bb8760fe324979c41ff9f433d73565e547fd6f540819fe18d98c9f3689c11f6b106b48a1df6990e9da306f8ae7bac5686a3bddf0f79c69939f8a6be2b6911560aeb5d396d7d165080d7fce23d564d301cff910027127d86c561732ea0dbb6ff89ed0dde0fa0046ce689eda4e8b7be5bc497cb0f4c854a7aa60a88ce6cabc099253dda958efb350d7c48aa2db3963e4208968abde32bdb9b2ea2dab1633d0cb193d681a271a1440b8e9cd333a1579e398c9bcb12cba89f707352084a26bdef8fb2df2fa21e9295b35d79cb082630a1e9f1a813025d4744f626a49fd32792e0b8e3be5a0e5d2598a755240cf368c129ccdbac520e78ab471114e7bc2bdbccfb13c709e53f73b85eb24690bb47891f1c700708f449f71647f3b2dc205c08a58adf6ab242d3ca2d2e96f011a4d64b4e379bd60d645ac39e582485c91c158f7a8e11b2dd635be7fe3d3a25a2e8b8a0c46b8262da065e3d92faac9f3e3ba508d51f49ed5c54cdf873b5af25c17494f9874b3446fe836cada5d151c2fdc4022dc023cdaa267341779be80464c74757c4dfebba1ad13fd6ada3fa09b4632ccf18388e3172d2dbd6b4e362e4b83c6c90ab45ecbb852fa5e06a012b03ec9b5aea01956f7f56017d65993e57983d7da53b215f21527ef9bc84bf93f405cafb59345cdbb6a22ded0bc29ce9b1882a35993693272ade849c9b071ef5b2a5cb156c9e6aa14b862f3b6943d1691a29916a2314d8d8dcd50ac2b6095cc9933672a14114d94014d93c7901f9cecc069a1dc066bd304eebc8262c9fb49d3158999f16d96e0953d1dc18b2672761e2ec316c33d96031fad157b0ac592b597ec7e683d44856df539376f36fa9458bb9170a2b754e8f38885503785c43a61defa8b01147cd114232c300731c94d4de3297c487208e9beba33be8bc77b3b3815dd9ea5f98e36e57bf1fd43cd2c1e0c505e9161be911da115b2d0ff21a3278d58923f215057c83acf0955b96c1237865fd316e839d0e9a07d16065c59c4f88378267d6a625b32186e45d65ef16a57e990a6c2c620c95330a80acbfdf1019acafdd141d9b525d435d3358995399bd84175b173e797a6e94a17764763af04d6354c2784fcc3bd672a99e71262f41543d39323ccd6ac947fe35d0b54d87ccc11500a1c9f1796d80fc7458788743b0607fba3c6e9ed44eca742386243218478635475b0430a3760a1c25ff561239820e5426e8b5879d7edd4a8acf344659dafb592928f6d4131f0c23acde5ff595b3db500a443a0d35a6409451efccbd79624f0465de0f60272d508b7363f5ce6a138c2f106cb0bfb1169fc15cb4e86609b5f3875b0ce19849003d258743298c3a522b258604308f294569098479402a9f4595fe185dbaf82a3c81568fd53cbfb7bdc906bc9a853e02e5b8e17ad87e029db061e5d223cd943c63c3c3b9f83d7f10b661cc2d9e817f4aa59a824e74b76ded8a01b43f7746c4366244df8313b5a9c8079bdcfe658142ec331939255719ef7920ae39aa26c9b157e7773e3bea68de351e35ef637ae6b50e2b6174b498a292819cda82af6d981d953f14953dcc6bb77f18b9878d06b0a0bb45aebab5ed0565704ecfabe2fd3ac667b8c88a8ad9e5d129bcd7dc34eb78ac7a6db54b3a3f5953f20bae18542a5c2b253726c8aa40c6d26ff13da8cf59066ea7ba4995c27cddc7ceb91ddb1c0e8642bdc735299fe31df3eecced1cbce1cfd95afcfd1be01030a184b22f647079812b13ff680732f9b22c6d08981abd85795a499b27e8af6d828dc7358ea5d06b07e1c304e9c5dacc03738865981b05c7556d6ba3ef16103320341946e85242ab462ff6b93fa2b972068f81f680c731e7ec0ad31544015df6d913840588063989bf7864f9bf786b3ffb9bde1e8bfdf1b8e7e786ff8bf483addb8ada0645f99376b6bd0b7e5746dd1454beeea7f6ac95d35c5861577f6ff332beecaf2a1d6d7dba7ffa5ebedb565953eb1ff5f9a042fe75142e5bfaa8b3bd87363f0084d44a259903d7ef2e2c9fb278f336c7517e388d82a2ed6128d55e3dde58ec5480205db00162030eba8e5b3442d3f4d0df785df9bd4275a24cfbd53c6105b9dc55628321ec470d8c64543e405c5a7ae7b6cb1330eb46292be188cacbec1dd72ed73997520c44405a085603db59bd4e1fbe58e77cb1bbc163e6cac48f84be366f193c6b800761242b011b19d66ef588a085988c483335a2e7d260fc81481758c473b7712b08e1d33d9e09a53bc6e084393474df1bad19bac7e843929bd813b88f72cf8d30f95abcb881afa67e344a301d1cb9bb7e7f99d1e27bfb1ef5fe347dfbe064507a9baeb423620e475130451baabbe34de1d11d0145fe04669d1f3959b68fcb8f015582eb35346abcc6cead951535dd9f0e0a330dad0b1d8142173ff7bd24cd404d9058b95e9ba7880f4474c1d400a6ca73d0ca797f414eb76615316497e8d039235a6fa3d8426deab45e2d81bff1be7dbd68b76e469fbdacc81d457b8d768f1eeb77fca8cbc3afb69e04353082d97ce237754c2caee76164bec49435e3753f84c50c6893f68042feb62c5674d01357c1d6f9e707f7bdb7464b0af2e0593f8ef7477fd16b1cdac90da0950d8f40b58c9c0668b252a9f70187ac8043111d666136b5e0bb0acd347af973d4876ecb6b2461743f5411bc944b98e11defbc3df4d6260b324636c6b0aa24e276a2f0b9548105370a9a8809c6cdf19df5b93413e00dca735c9a43e165bf81a8d65c67fad8b705d8d1de750c49b768f726ab35cbeae8b062d97fe86d424f08ec13b39983d52c9a2ac22c93a2d0a16dbd2181d6d43281ab5246e35cea0fb318b1412ec4833e841402db8838db50569f0afa69d8d6da7d70c6a1cae34a60f38e06535e93e800be157b1082d4053517e96a8a05882972c098688502934b51dcd51d91d7063d0d57853a01b5a11692f74c6283dcf183841e8ec5eebb5b2e08763ddceb8863f45f33506616d5237167aaefb99112c2ffcd032fb3930c748adbe9664bc733f2afaa766dd23d5212d44c754db7b9525735ae8aa62b7c8c47fb4c8c4fff716d96f4dc786039aebda3e184d5ed242d94318f0adf871e11beb15683ca241e8f222e2b95ad9fd7a44d4193b087f755682f8bd0d997d6b309ac4ba3ff106107d1bb75df5a24963adfadb89e12e36cec21e2fac15da46fbfd859f488be982b4bc58a07261867bd137259ce2afd868048f677dfe82aa5edbf866936dfc64d66b1ddffc00ca42ef6b1bf32f97453b00062af401caf34f7a4cf426b540d8409de9161faf09ba75371b7bf363c8714ad41a9cde80905363a6aef02996b8d1035d778b42d856412fdd7ab90cd8ebcb65cda7455f771afc023d792a3d917aca2c5a52f3e5f2d2e46ab1c4c760ea80a6c5bfe9dccdd0034d3ff440ef30f715d917db0f387063cd6e482cfa4dff9b5ed37f959afea3f23b2dd9fc2aeeac4f22d744c835c26ed14aece6518dfdc2250b2c49fbdfd44192c1d8ee67dfd93e7c4d94d3594f4c72a76df9863a9bc9564fb5b0bdac3983efec37e8dfee2eb8e8db3d8a9bf61bf4ef7616f4bf6763595fb5f89884c9e0489ecec682d63694b5bdc96f28fafde3ff6843e929b3a8ba1b4a8d8ffffd86e220e9bedf9d0e26e507b61457686f7421a19e3fbeb384d236a7da427f60838930f8d225fa6fa66df7f59d3b77d32daaaf13fdc797cb166ea8c9bacff33a8984615e2e6fa8e6e0bbd5fccf3fa41bf4031be771dfc679dcd938abffffeb19d8ce1d3dfe4f4a7b072af79fce35c55e2126d651d9bad6b9f1d992e703cfcba1797e06e6fd7830f6a4344713991c226f9be0b7c94abe9bde25ddbb6f037bc5aacdd81b7d24e54baf0e81d2866b85b99aa52c034d63737fb1308910d9ea6b66692f1fadc9d315171aa4a1a8d5235f52e8d7e74dbffb1de51898566e333da1c5087763d7228c56bf752b54fa609edbd7ddf1aa47c098a8a4c655c652e24d833f37f86383594bae3b8c2c2c99925706763e32a2506d225dc594b82b3d51092f1637e4835756c6adbd1015b26f0ea1e5d226ece40d0a4a092cdc4cd70099e4b468c960d4b9e6ddbde3d482488032595b1dc17669786ca567cbe5c04478a103d5b9de9ff2f6a9cf52344b3206eb940f1c8ff326dc59e142e8d921a1d83c7fd8140ae11632b4510a2e38c064806a0c1e75e01b141e11dd1ba6730d1b3342de4bda3375661df05bda2767f816cc5cd804791e05072bfa14c2a610ba422da66b60120af38057b3b60258eb170ec7c2f164280996776bafd84bad792930f3c00753a4ffdd19f46b70331dbc88215729dbbd3ce95e6150775209c1c61e0633e07fd3bf082a68827a742c880a695d77b713d4ba8f09dc92b6dbdd545790eafdb7ab74135552f88ea7b8df0bc7e8a60111987a639a74cf8b4647acef6ac90089153f0ebdfe1fcc653f1571c2f5707311fd2f9eec223947dd77fecd10446be2c65e36a3938e4b8486d55ab0d52e0fabcf4d0a51cee83056e71391b7979e42ba914421ccb91fa6447b53b6299560a883ce7a7566634dd7c2875cf3f6573a3bbba4b26ac18b893ebfb93809ca34a5c48af2ba14f017babb1c41c4cba662258d7d6af0555934c3a85ca27033f4255b9b17a30ba7c93e5d0a113610ca27231ba5bf40284ed48563d62a4dcfc1eee147019ece9bec812b595dac3e039dbc205980e6f02b64746822842419e772b993f2ffeede4eec5ccc72b2a72a8b4f55569a95e46cfcc2d2f0e68e46d0d5bfdfe6394c3a812689a5a27da593e48bb0a6862c353564d8ef1f89a921f00abc8bf5d8d890f51a1b326f6cc882b1612820f247c4ba86867e22479bc14ae664aceb618e74d9dd89fa16ac69b2958f53ef5757c2accba0cb85ebf2d825895e7a1e660e301e03849b2755c046d578fc406099eb3a417863538aa605f51f88456380fceb5f898e0e61cc48da421384b0e5f104b52ff5ebeb56906b8bd9d67bbfe81a46271d004bbab171419a471d5408a1bece34de7a09c594b095a9f7c86ed437555d35274c9d329995aead4121c36aeaf7bdeb8da77b463b6cdd1d829eb71d347d73c14efc3775fc5c39dcf7ae118e31e725120c6ea4bf3c749c7125185b9364f1db17a2f5d7858fd90d4833b141b019604d27f9e14de9a53599098a480bafa9e2d590a3451bad3290bef981eda1cad6bf82a2a29369bc713c9a565fb052f4d508e3b05d536b317bbc5dbfa7bcaa98c84a503ad0fb74b0b48de7798c1319c3230ad2018514c1ff8d3969f44d356d49ea10bbaee9bc6555568a6e0de4862d442435901b360c3955def78f2938a9920927f52a65dae19169721bfbad4c901e0e69618df9f3fc8a16c86b70f8e17097f3dba3bdbb39282e759dd5a8e5dddb98c5486dbb253f2edef202e10b5a9833f2ee6de36b273ae6d6a05bef44480d1bbe32b11a4d361b800be0f0e1f1ae4b59e8830161a875e7c33fd686f15ea7a89074dba54013a35746def179a857aaa6b4d5199a459bd8c603ce50c970db2ce48c950ab78acececacf8542abd59b86a43a8661ae77280561b6f53bc482072f97775d10b1219deb350cba4745a4c2166882db0e7438889addc62352f240c0d45d270fa2d33d210e442f71203c712062e2c0a933f9f495e8d2062e255e41ab15fe9cf69403bfec52bb4684ca8f8b261861022858ccf072a01f1d240c7b09b050201917f385caca867c62c50237084b13923ae7fe41bc673473e093950d79e2f33ed990d778cbd779c16b4783ed0cb1a650fa55ebcaa99bd02dc9231a970d79e4bffb68fdbb6ebef672381bf1a8e6b3b35e846819528bc5b011331d267fe9cb50238b768b8badbf0d3630b6b44903800772784adb5797428f0693eaaa68519e377d91663236fbed0132583d5735cbc0d0467fa1d65f5898e445f7f51ab853cb65210cf0f47e7d40b2cc4cf9aca2e284c966d1d657ef987a260493bfbf7ff9221b10d2e679e6c87df7dc2ee673c9da16587a423da938309efea652186cea24d7efc09ce38de8a4d3856a9e36b3456b238ad3f5264fd97259e8b141a0f70c4048c6e36e6b2fbf13dfb7d221d9c9fdf6404fea85bd893753dd257666e0dedeae8c19af25332ac7bd5ba06e3feb62cdbe637a1b0d7a7a7ab9acf2bcea8bef1b015f58857adec9f3c57e7d3020a4daaf0fd68750c75a51a74ef1dda5e914db4d484fb7eae6812660c65d916a5a0d0f0f4fd579edba6b4116d34527cef692317bae8cb17032345976ab42a80c1307ca5f10a2bb760dc2bcca73073135887426fa4b2dff67665fef642b7cc33e8882e31661b65cda5a9b6eed998615422bb1d60776cee80b32270c77f47db85ee02d9c69f8e3fa568dae85a1aa4d1ea376d2f6a996fccde8d93ba6a6f6bf7cc754e078cfda5489ca9ca9d84a33666791bfc9c0612924f95c88e09742e4f91bab0f67084583041848f831f17ab56f0a8f8b24afae678d689b9a0d1990370a05abb896294d2b378b5437dea26dad1217dfc76d2c7e90ec38be0da004af320255d6df77e6b6de91f5a5c13237aba5635c1b903c527a5b45c4e2c8a35d99ff3be5795bece0114eee725b634dfbeddcb91b0b0a82a3e0a020dbd1985b634229635c1fb992d9205e2bba30e24661612a22e50581e094eb7a97e92b8ea855d49addd2129c569bddd27fa6a5f7cace3d34bdbcdddd4d86f2bced711991aa37c6b2fea91876ccec91c7f020464b1d10370ca49481e963c899aa4b675a3ef12192d8bc0fc043292dd02abcae0c07430e0d26000eafd202195cbd08fe415aa7e901bcc437d0ce9e9eb9f9b8cef3c775a16f5d374caddb7e8a25cc89ae328488f4bb23ee4070320b9df4172df6ee3d10d3bd7ba5c05d631446a443d900ad6ddb69b15048b83e359635a28896f2656d5038bd32b6ed1b0604a55ecac9ca38d61b5a9fc31a91cef454e9409c1b459f94f887356ee5e1ddd5a43678f851bd25173d9bc40a60dee3757dc7d43e8eba5d9eb8218fa6c161b2650536b667fc09036119b851bd9eaaba504e262a61d3d8b88ece656a2f63a3ba4e06533e46b71651a4f0966887701a05c08d3632e8bc43bc9dc36e08de76c10889c3703bca18ceae63b76151edc015483057f1e60111245b67bb1921b472fb76ec14068b3563204906e3c9fa3677bb54a4237036caa937ef73638456e3bbb98837fce22f5680e39258129393edf13d3461a5b22c4a3699443e197fe08278d516ee01397f87010c34dc148d64ef076e8b933be1b27b3704c7f75dd85464276e1d7257ddadd8dcdfde83cdb09b2e8ff26dbe38af0cc043f20163f110eea0ae852b376da8e93aa3c37c07fc43fb7b3e04c16cdf5e69c141972faca4313cab68151533032fa5e9098f45d44e5a22f07d02ee97140ab6593c82a6d4ef3369cfcfa2c62d2af97a9c23399284d64b21e414ac688a3af94cc1491d7d0975dfaec1cb588d127646eb08b7a226b5f552f7b669c0f33e4c69e43513b8bba22e97058fafaba8549d3257316384268c11ea1823341d5f0ad057eb8c11ba01a291f6ce7beae73d5d87689c509fbea2dda9ee52a01a9e31122073fc51edb995185c171a850f5389418bae5bc2ddf664a45293a4826d9761ad3721c73191a48d954f934d88fa0d688b75b6204d66a45b10f55bd0165bb5c449e7572d19005ce01d03ffece63f375f32f53593193c4fe38a083c238bc9444ff4795bd478862b4feacfcc70e5f96d7880f59b0eea0ccf5c2e2fc99b015af2fa80ce7a0774e60774160674e1c560339f6135eb8ea84b813ab811a5d3a22652372eea69bd98eab090e2553494ecbcb96066622f505977221068658598a8d86815843e8e20e4dc4290715d7a06d209ca83909fbb97c34af1df029a12fcf475bff323c5806e493f2792f78e0ff7e3c37b3891b7cd66e89290d9098a16f4ad7977c05c36a8d8fa123cfaf19bd6edf8c6751bdf5fbb7125649abfeffad3c38f5224f54e0946da87ea0949a59c307ba3f2a677b1ad0320d5ac116a6eb0aca46abf91074462cb2535464c99a4156f3283987d35f7664d12b08ef3fc3133bcc26fc2f8b555e49b85caa66434a10fb8034ea5b7c88e3fe8f6e901aef5dfadf1c124e25c4d9f8942e833e3661ed0076673a5ac9bbf6cf499fe6f71ad2964274e4919c0ef4cadfb39af0fd7131d8357136c8797529f3b0655677849db978b5af179ad09b88d69643090c3739fd11c7e8c48c3a840d32ffa9b491e86076354aa01495ef5dc3fe94c0201d5a0e7fd34031e8c50d997c905a7fb076596e96fa2d52abe0edd2d632ce2b0cf744f941d8426b1ff2cbdb1c1a7d78ca112821600b9a33b9555920461af0d93c1187f524557c5325d5c3bf1ea1a83644b5837cc645dcb4913d665a169661c9409deb6e46fb8413ba692d7f0109320a93182391e6b996239edf56eaa77d8ab9aa161cb94e3e04d79fc5464169f3dc3996804cb70c6cfe78d5454a84c1369369998d4b248bfebf6838276ef96f6cb794ebb1c44ff4534a5ae78a31864abebbff95444d5a328089eeefa6e60bd032ea7595676e537ee240e7a3181ddb4a618d3ab581aa3805f434f98a3c5a1f7c7ca303c9573fd07da334e7d46fcb7ea33e23f579f79d9bdca8ff7caf5b87be6dcd9b1e7d1cef85ff1bb5e267c80ce99e15998d7ebd77caf02174e3077c502917d0c0921d8e556d522ac7a7ca52877da7daa23c81bd08a177af28267b6420c69555986d4291385c41201e70634adcf36f29d5fd2f9d4fe972fe93cf09d5f78daba10e02fdde9292a7a4276b1f0bedcaf2ddb324291938ec3ec513a8233f58873f5ad5d2e8b6fa046fda1251261cbeb5ee10811e4f2c67a78d8407053ba49537fd2cf61f68898aeb6a151eb483bb66e58160e082ed96b3a7824bc57b6c813fb8d4754cd4e41f3b1af737a049732a8a6ffd54eff6a61dabc63aad857a7bc3d40e55fad9905a7bcf59d19fc3f1871814e5caf46e14402d73ee91dc8ecdd5e3f156596add00a61018dffdae24f2d7949d5e970c6788ddfb79b51ef1f77d30ce2c2bb968cf02bcba07a6dff9fe8c82ffae7918df9bd25e3d1bddd7bb7c7f77776f1c3e4e94f9be7a97ee199a660f52935c27fdbf86f10f5c13efd65ff7f85d83fecd34f2dd91be1dfecd33ffaf5e7f6e14d1b83e77f6ec36c180d4871fb7efeae45535f9df176a1cfc79fc7a3e50895a301216fdae99bb67c135539c91326f9c798a96e7400e1e0376a804ef32a34dc4efb6fb400bd2afdc6ed3c80bbeced81ea4dc85ffae08e55f72ac67775eddd1b4fdad8bb0462e4392d181e2dc5501919cfcb76b9bcc376f1ce9d114a5410a5f322b257b26868e21d78ef7e690b1cdf19e1f16894eccf7b767fdebbeb72f9efc4b9ee948cecdcc8c1dbddb98b12df7b03425eb579ae4fa9276d9e6f6fb3182595d5ded3c19dd1837f1c0f209900fe5000a59e948b6f7dea3ade268c45683f2059e97e864992e7304466c2f0ba60a82ca4fe0358cc776d9effa429abd2c715b775d6e572efbe91deeded19a404b7fe7f6ba7bfb50e8eb4d80718ac035416312ee96f2de0923284964bf18b4279fe5b0bf0a450efe888b34df97fabdced776ecfe189150b8d4033a808d364af85f9d7f1c36cbc8ecb5027a7e1fc64bd3abd2944c5e2d25e6307db961b5e867ba06991a9be3417624a64970fba923e6b67d2d23c2f5eb5c4048e41cca4efec5fda3c7f5617143f6911c26f7548218469a4a55fc7b40a080b742d59057a9e61eb226aaacaa730eac4ca195e1b3902683f4e0bf7fa6b2e4eccdbe8170f1ff45c3497c2e67fc12e588da6aa6431fe3f4c632bd35baf0862fec0eb7462b4b3873caf256f245757646f2f8a05b2e90f5af08428b244b8ed02e80eac276afcd6c4231845f2f24ec14eb6d35fcd516fed46d1b72580f8ea2f75760449f6f6cab1f159bce362ee94928c7e218524e3d1ff29a2b342a1ed4e8c4468bab757eedc19fd42e474ef7e79c705ef957b77c2cdcc1236ebf50454e54d0d030111fd8548afb43620e4779ae75f6921d06ae37baaaf432456a4d3fa9ef12a7fa585c4348dc5d7f6d429d73b441f9f2bd49d096a15ed6734ececff1feedefdbb691c7d18ff7dff8a2487e38f345143d242a14e45be0c941d7629748019960df964dd58694c1d3b6bc9a59926fffbf7e8d1c5f225a1cceefbfef09ec3a1b12cc9ba3c7a6e7a2e928213a3f96a7d52202ff70613856b1d4e1dc0c558432b522c2ab0430aba5f0db475f8445188f31861229752929e0448cf6613c7e0ae60f6e7821b9efe031f7ee01b3a381e165722618cf07008d60f4bf953610b7bb799ebbb4d89ef2284251b95918fdc5a42046400c8420f50d0179c98efbfd67fd5dcdd6b9f0b6e72a805801292882f58f829cdaee512a8ae1ddc5a54a980424232fa955bb62eabe802ab24fb91a4ab4a2cf361770e4f93d1a15fbeb3056d8519ba5c529469acf201e227861aafc0396ec450741da300635282c75fb8e70dfaa728a0ef79f771bf0fa0a5a2e8bde6e652aa8a070df688369be89984926a059a98d5d61bb7d51085220561d8f3a2b6157b1deb7b658950ef30338e0a861753e15329cbd04de5dc04e6a33700cba54beeffd61abee69e074b009052a1129b4d2057e51ecb625625b0ab12fca95529e1d836a5cff9a886479f738537fccafe8f32daf7eb68f7178e0f240fda7f86323940808b830c835d551f1394545b24f820c0a7b2f6e0b0ff2c1b0d0efbfea3a7f2d7a3a77d7fd0879ff28f3f3851154e0efbfe113b7a968d8ed891ffe8084ae51f7f7072dcffe93347d943f9abf87002f07b9ac9b5f82e20643b01018c514a2b26cf81464c6f39be8be82f5c7bc4bf05a94091a6fe86f72e73be3e8f9297b93af0e71cab150cecdb972c0ed6e79c6412dce5ba1da0ca5245f800c9da65b902637c4a8351df0fbad94164266ae0f547265c9af12e41e10403fe5468b0424a8a9b9256852c6d9b13c3457bb92ea02286e72a31383b30a8fcbe9a835109fe20d1112ed11135a29334109dcc253a8bfb119dc4253a5999e82496e8084d748425b88e187551bd783d3c1e4816ee3fa03fc2921e5843f5d11d1b97c6ae69a5591515ad57fb6f80ad8c8ed70b384f4e1c2b71cde13878bd278f1e1c12d9e1d33fd3616c45b2d25258cba0c6b9f7ad60563a2e72c10f0696d12d1fa5830111996b2a7aa1ccd0137ac12b163dc9d05aeed9bbf192178eb1d9035d1c08492f8a484ac6313dd01e3a25fa6e9d6cca98ea8f0865152a266b0ecb571946f3ab1c5c4a2ffb7e20bb704d6ade71cac805073f301b1f02548ae48c5351d63d3de7f497ef289c1c2798b8f067190e95699b392fb3145901f1825b9728bbc606e37ce57420bfae863464beb1e92359519904f482934845ff15f48c93a0e426de7ff4940425f3b1a06639e6e8291b326037ea2ec58225c6fb24221c02660c3cc76198c4851962ae6cf7e136232e929a8634de99d434c4c6d69f86ce5d462155cd9cc6ead2242f122acc9ca017a8ad4af605d368730cac994e9d3fa77193729f523a57151646db3a5c809235c5a4d4822ed46dff5cbf1d5a4d5eacd5781218e2b227b5bb7112619c3c1d00220dd4259a634153f8b3062a2ee993625d96741639245d41f37009f50ec922420159e26d35cc434d59d7625b93fd89043a2ace8a26bd55945cbd08660b77515623547a058b732d8152af125981aa2985003685562aa22b504aa59083beb136694770ad11c81583c50c94b2684a6f5d7a9c40ecb061aaee3ba6648ab7a5d57dd43f3926714df164e71a539366bc9c082ec6c3882a82847e4581b285df6c3acf5ba0c26ecd8adcd0dd4e8b1beeb9059db4accb3f695de6a295a42d0396addf5eb7be05bcc5576c16cd2316f6be245f92e761d80a5aa71f7420785b9bf67abd67c5b75a8be86ac1b25694b4c482b544c6584ba4ad5596de44216b05ad380d24a7de8a92309a0522cd5a69d65ac5c18c2dd2386499acad2f2b7b9dee3fe5ea6e1fb79552097de5f41092e97114a9008f708e35928f1d247fe4cbb37f9f7526cb08c5e40d473149e11aa264263590fdc0aeae257a58af18b9a171d9d8439e9ee3479ef33109330da869bdf3e2c79ac9dd34e2b49be6fb1873c5b2d9b47fe7008b37580a86f79ff6b7dab4b77be06d7bc1e9344617dc31c916941577ad9ab3b59446326bdaeebbe0c18c7ecfe1ca5ea63642d0e865ea3bcaef99e12f4e25f77f78ca3c0ffdc229c38ea5303b7d6edf3d9754f32da7aee9f01cf85ef6ec9504a157bc146e58f29077ae86f6820ff105a72b35cdc29ba05ecff3da9f2527d0547de5b0dab7dc8d5c4b1839e38edf6dd906bae2ef6dac1e3c0f09b9f20c63f292977c4988a3ce841a77179c3243dd8424c6954c65057906b4df7ff4d4bbe02563584bcd05c924d58e28921de1d2e0860d9654879ac7392e19713c3609ee4b465453e32d82f7325a04d2803a8625e5005f90cfcb44a48baae1c0aa053ac2833521b6fc8d71b8f5bc572912c65faac6e449e18036246e37113dcb99cfd52f77f0ff4c51a202a4815ba68e216d4256d7c2485b438dc8580997bd62e5e760bc58271653a6c3ce3d3e8d0a53b290461533b419cdcc2ee6e3289bd088e4603b16126e086c46f3c2eb769e054bd6f1955fade2c6d4035b5eb2b0e3df26a823117ca7627625717faaab067918a52a66464efbc3fc9499fcdcc3bcdbc5b70962629c4faa865be04da6be002e5ed54f44cb2bfd8168195c9941c651725d6944760d729e664b5537639c095b97e797cb48546b874c0451cc5503915e5dc5ac362465a3f691a18c84aaaf28b909e2083e4d7e4bd08c74d2e4c52248ae58a7d14e2d2b5ba2d13bc714cd6fb7436bf6b5fda1ee0b1bb95fee39b88a53718889e28149831b2997e42fa6e1984f48c5b2cf78635aca168fb29e1c8d76afd429fa723a2e1a9278827de3b25934f4bc6acb4ea75b6f2c0b27d86f70c03407340607cc19e1852975c5cdfc1b431926ef60a920274ae352aa5a6f196a36392c39a3eff2fd2ea2c43adedd59c9bb9bd39c4425869e4b1ca9d10eb7be9ec0754b143ea39c84f26853b86d2f2c95333feba5df1296bd4c67f9528a971215be62b07bef199a61ac4b461d3ecba215d892ce46088534d74e6b67caa60675c2e8a683712f32069eb473aada3c3bfdf250ffea909c862583e7d04dcc82fd1a7884bd888ff2dad766e42ee2be7cb9c53e6a788f8959773962cf43339a93e2b48c66f6276df7fdb0c7a33fe4b467f083aa678cb15febfaed0714931984e8cd31e0cc8484803323f26b8a42c89be2184c853aa6794696f48f04c9bd486864016df6e39835840c57f7c0ae19ed0f3307bb6616bb661312e261a597060c5bffd43db16ce862d97a2f354c1b96316dbd4523b66d189ec5b821dc1ed1cffa5709bd8580dee6bb90a339a31026222cbbe5d9d31cee47cc89839875cc88a41633e2470655c2d87a722f7e6c7236320a4db69f24c2cb2412d7643ea6332d4787644a3350b8e612dd4fa5743fad62cf5cb31c6b3a1de7aee5773e7a9da01559efb7fcce47dade754dd7a375d9df1f7bde6f4c77e1128fbc4e3cd623542c8c8ae8df917fd7d8f37e377d5409c75abfeb74baeb7bf9f7e7dff1efcfabd125f22687ff1ceb39af81dccc496e22b0ae3def5a0e28276bb22c7c0a67351a14020d0a55c0e09d3428041a143682b4764b5026749e17f63813cf85c8a2cb5c30d481622099e70ce95ab811fc514643ece05007e08d517c68be0346f11929d509c128de0cc73570f7bc7aeda46602bf33784a637894b044405144ff992088586c68a591257731e2db4ab6907df6f3c76583766576df240cfc23457d229cd48a8a298f8afb945aec8ac89a547f6f0455318554e2e980d83042bc2a3290ac2625702d1aa088f2c2381c3caef5fa611f712a6405f43d16036b72fa91dd8287148ab022a3bc4436a3b227f7a0ee14a0a34445b5c0fe4d7193efaab1e4ccad2ca8128d8a199cf16ceefd91d5d856fc1e1cfd2daca25f44c445b55c9b984456c82cb43c50af6cf46e1d42e4c911ae521c8f50e9996624735318aa043f6e0537785fb5b6928033376322c624f2bc3657d131dd50bf851d78bb6921f6a9ad6b4af7519f165abc23ecc3bdb97c3e82bf9b8d2c7f04d1cbe8abe2a6f79d6cf13a46ef3839e3604df68e93571c638c098a361b5e4bc0f4a874feb4d1e653bfc1bda4e196062e62ca92ff89750b2b1bebef53600c4e1c18d5ab886ab08a0b2302de14efdbb60cc1bb4d2b6c95829e63ce510494c020a7be5ec84203a1fb2cb93a97026f5622981510f87b84128c95caab125595980fdbbc199c86d5bc19a222a15403fa27c601b0805468558d25804b91284bf5494433c8b1529a091fe24422ab8c72ecde591cd68f01c9eaa10bb2c60b28b5078ecd261eedb0cdec936a6a789a18034ff38586b007d5e4dabab0e6e897d52332607fc750c2a6d2faf0c24a811dad6e5f1b70588d2553197b5841c8e56994208524708356cca86982808ce50fffae3c52bf6aad4b9430a9333b273df79164269b30f7935ef1b0c5a598e326667d81b836872a1291823237f681753235f4bacd7129d6ccef110ab5a156ed0c81cb9a430df69e9fac767ed419ec3b07490a489e672274daa2f334649ed70e1dd8359158518552b8874b8da14a378ce90a609c4f01c2cfa24a6068cf1b9c66558c6ce66b11478d1c378672a5d9c1000f23375af508598a590bb42be960b1a26a32785444e9b451d06948d45b1aba61f4d554f05ddfae9d3b2d542d02aba1eee37e1f03cf245f12074bd38ca8426a4740dc052e2d3d29c71225919b1342816444f968e0459b437fe04512220b0ec6a13bf7f51d7b7cac0302e1ad0e4905bedb171c6e75cff86633289cbfcbbba268029798ce7a8017d6ed60da5e0952fb8cabac01a03569c455a64aa8a21e99c3d81c459e6f5d873613e7d649c36baf3558f946ce5c31b9581f2c4d5c2a70c14bbc57616d52a654e66be5d25d59a6ab9d9602e494bac66470eadec6347f6ab4fb437e753ad58f61bcad84454782c61cc937b89e19c6a387fd474f88bbbe685f8a6c65f853b1f2708f195c2559b6b7d8bf0b4e59f9c2f1a2b8277379c7c76a539cd04025bbb64ad068d3ffb322334305f646c2bd70bc713a035719ddc1ef013a39215755d7c6ea58aef47d6598de9dc7089727f4376eccb6f799c919db28d7a00a02b6355b53b92171aaa1af7fcc2a0bcc6dadad5155ac7c02099aff0bee076497ddae320b0be83a460936c32fbb7cd08064a74df6c0235db754d85471976f08edfbd073bd9702e0cb1d49ea548ca6b0f8b578c03102ee3b351da3cb02651465b2aeb19044179cbe731c0e25767098f991e1de4ba9ee939da9ee039a94f0901fd0c4af141a8467b3d56a73c3a3c3dacdf3df13fa2dd1f79f7f4d941bc9bf13c415c7a37545519a7c1041263a51d2e258dd62de7159e2f35eb90a6149e8169e25e1560937fa423aa72896ff7845a7e079b1d51045ecdb66f32d4ac2f49b0a61687a9395dc6735de1c84249af7b220b9622fd23c11f82ea6792f48668b34835b5475796a8adecde79c0932a3796f9ece720e5572f3a4de822565111386cceccfc270222e07d352d7047db2a00703b294ffad689f4c699fac292737aab2b031818c41ecd570ad149f7d151c550ad36bfbb5cd062de8bc1b62226bcd54adbca1d692cebb392647d42df73c34efea67d0f9e89b8442f0bba26bf70267886fe89aace9d5d0095db486b8456a9a60087843e192afdb5d5115cf7541e798dca88b9a6e774a950675294bdd0fb9d9d4b5e07c43d19ade6027e2ce764dafb6313d906ccc62b381bf4b2d3d28a85b00982d3513ab76611bcb25d415fa50a15faa30fc35a177b0c12c3c8bd9d2e7c482e97b09397ebc25df12da1e904f9c06c33005abcacbd88d5e5820ea4f557be2a3a33ec6c36f31fac409c3b28f4fdc39bbdb321df9c4f1d0fd8c62c818898b0c039fb83682bd943d15d1e5a3391a1c7b97a003ffe4c68bea7430191c3ef52e55b373d9ac6438a23b3e57efafe9398447d5a5d7cd064fd7a36b1516d5bf2ea10ebc355aee41ff08bea9cd476e38fac4e5fc4be686476585ea8e4ae452963b963672994aba9dc3477ea5d1a07ff8b852e769539deff5fdc8ff4e85a7fe15479c84f413273126538e42bcad6ff3ff195889e6e89afe9a907340d3e4925ef71c582631bdee95a1999cb729bdf4249c5c96716d1116b3c52066a536186fa3b6d86cda2a1dba32ad819223501b1a8c025cb8f2374d0a253174e4c69ef33b3a420c9754438c6cc4188e12ecb7dbc224a637a3ba4879a4707cbb2de17b6705506ae12daaccaa17ea1ffa96975c622b25c79ef7ef045dcaa19f2bcbbf4c90c250f49ac63d9684f2f5353db7f7ce2ed9bb1ca1cb0aa9a3e7e4b244e85484826594a06b72a9ee4d0cb6c53ebaa6e89c56c6bcd98405fd3bbf0ffd43d7f4ba420249482f5d2b0afd4dc28bf198298798c4d4ce1b263de2be538d25a1acd4beeeb15bc192d0f3f8b3d8f350486312534e40bc0be983045d128ec94cfd8a31093d6fe679484a9cd70e1dde6cae1d2a0cc6d612648a62456be1450a3fe52b4b93c1b0da3470683394abfa72d3d0393dd7771200fa0843981fd825a4be484cff985c6beb85e7710cb539c2843f8b47e8ba1784a1eae05c56534b80d40888fd20f6d1b9ecfeace11d29f5010aee733a9e002dbda69743b97bc521196249daae1d627dae6281db3027d7246673e15ff7f82c4be3f80d9b0b22d2952df898aeb62a1e7c03e6be544b26cf3ffc00b4d11f5e9e9e1b7382cb6e174b901f5f4eb08908ed7c8a5ef7e4e7e55294de7d4c57f4ba27d2d5f6571d9a5692cdf6df13c94e1a79c2900a52a5729734ab51b837350a7774ecbd51efbe95c998263ad7f4922049e1f0f7e26d0f8ec9d12139afc47f83b822f4bc6c05fcc83b77d40d05fefe866feb69c491e383fd999e57226a9fab88dadf2aa1e17e0d907a432a6ff0f0b621e12efaecd453aad8dbfb44e456394f3fd2f3a624fb1f3def26427df291dc562c3665a397954605dbf0522743747d3aceb5d1a5de15fd588a5bc94da56a5002b3150d15b630c0978497ee1055a0be0fa55d333be479a5cdf3bc7f2666a5cf2b2bed791fcc81283325a548e54d41ccd4b7ceabb93ae5a8ded1f3465eeb9d7a7d41dfedf445b95055cee885eb89a25f9e79de6781ce2a81e00627fe7f106f4a3290874fe5f93ad7d400e4a3aff2a095e3e57f55437b415d3ed31cc14fe5f8a4e7f445e54aff9cbed836e0a5afa3afe81cfb5f2d8e38dffe5f63a34cb09ee781722c8c9484e0e02b39fb9f39b6717b1879c0a928c280003a73f097287f93949ed4c73e71e53e05cc4663140ccf433a6050c56f5c8c2432f93b1ffd9b77bb3e32016318f6e167c3ea7e8c3def63ec66292299f187fcc32ca08a55c4e86fdc062c726376a840324ae4420f02ed4ee6d8c65f564de92d2667654c0eb7d18f8f3d39c5459dbd06f3f5c783438fe1cde667bed9a09fe196e1e7009d3c29459ed78303e75310f7246dad6f78114a4d8e309aa313292e3fe06670274f4e1ff0d1c913ff0137f35531997e0f1023d7b1eb1779adbbd0d0f737ae5573edc15075f637705936b19d76ab048f06d86409fbc0815a6b6d0c73fc4d1dfd8d9bbd52524dad4d347a47b95ea5eb6063f1fa5d4a78f894f44982c992a33e397e0441e8addbad133a6fd73103b7dc44abdf34bcb31ab8336a83cc7ce0541000a076bf58d837b18940b5807cdd54c57fa339470911ee09285c454d1424f79de7298fdb227e5b118ca308e7035f831076f60c1bf56cdde754b7d44bf92646896a5af8ff176fb57f6a9985683891c9fe80719b4da3e9d33dbd85328c611913c2e8370e7f728e8444878dcb98c8654ceacb58849070fc578b95bd8dcb396099e3a9676e8e3c2feb852c66822181090415629e77c6e1f257051552b1febf42308c4a740c70e07fcf4f1ff7fb23f0483ee3d87f2db1818a1e046269bfad3168251484e78953c866548f04b1c7f73dd16ae11daaf406cdbb46a4d881b9cf2577ec6a044613e0a958174d04fa4acafe07472a460c613ad66015e04501e7b7bc92f8a7884d5c4fb39994d2c70495acbd4a355fe28bda94069bcd22b097079f52daee5b43b6ecb4c85222df0c4ae9488efcbf43f2f7d769d5af3a9aa34fe075f3481b25799ef60f0f7aeaa2dbb9b1bacf8db232ef1aee74443a0f6a39375e4748b8b66995e8b515eba14cd52edb492933c861234f584fdd8d9df85728a3a544de95ab2bcfcb9ed164244c543e1fd5ed170aa010d42663c5239b8353e5ba69307c683068ca9a97f5194d48536265d87a1ba3c27c7b58b10d70ef0683da62781e0aaaf9a983223327d6d7e3ee7cdb997b0f66c8899dfb1620d01831c8df852b1bab272c77bddbf412a81c47ee7d6825278aa817b837a298b07a22ec55800499172788a490ef1f9380e6a9ba701424230cb2ff973b1c909a6f7c50a44c68f428356bea7956a513f41e3c506fb5c50ab86fab8800d340120b7d23d4ee0fe19c68ab58b9804d2981215d035781808b2448aac424c8500940d51552d644e514c2699800f7bc6bb9401901f63dd0726746df44254bd28004bdb2ccfb2aba641915e4a36a0e815b04fdb7b3c6ed3ec4c0377934e43af4c91fb682da006b12646fb08def23e49d2865c9fa2f034b81c861a70e5452b4a99c74cef19dfda96f5425cd9bce449a0d051508f272658ce7b1a0c244e12d45f1edbbdd792ac0a716cb48d1f7c0ed076f31d9db47d1eeb0d20e6fb728c06400c061e6a078c8c0541cda905fb688a86348218d066c5165551a60c6a2d60b49124703bf5f103bd5088c04ec3190ec928d693a18ea40d20f6cd123835b0e610a8cfe1a407e2a12594e5ad0070edcb04a92a7812fe85ff7bd97157edb57e1912fe8ef4e053902859f182659517b4780a1fe310948a7538423d5506c33eb5a74576502c8039d9e9f54601d22ba06feaf102e0fcb11e8a97eb7c7bffe588f404215e7606c34b34aceb25acae3431586c8e65f682038a3a0e7068a266b852644dd335ba20194553b30ad25f40458f234c421bc9625822f174c8556dd48727796d224433b390ef7c2955ca45490807e95dc16268136eefd0a9403ec4515add0e6a7c36488133717f3912b0b6e06fdc347a55c4d80fffe30bb92680ecd62be0accd82cd18a6533f2a0e73d4f95e3f4ae7d8f7667c380497093da276309f947025030e23a57b80d0f032fa29a35f8e01893bfa52ab0d34e2e725427fdbbf847618c6ef5baf01231c0441885a0c382b8cb903424cfb6fc5b25dff577584f58d2a678016c64b6fcac0409bebb97867c1944f3dde3f9db8f1dcf273669b86a571d6a65048581febe66051cd466d0f7997fe73068bda90e0b509f09af256401b63da28166d50dbde6363b970ebc6e147111fd7b866212e151dfef6f1a63b6f7a6b3209ee571209872c40b7f8e041fed2887ce7c57b2560a733b614a9d53e0796d47d6ba73f18b0de361151606d5c516483d0f99101f5460236bc6431346202e19613b02618eef388df5b21b654848f392a5b5e92f542a91d0866700315fca09612fbde42cbb5153f7228cef0626fc92e72114d6e2e74374a0988418d742999c26309daad17d21f68434768c9f3daf6af00e1d540b650751649749825bded4ae5a48ad2e24a4a14a51a97682d341bf98a30a25e3244f95b8cc2c6cb1de1c9b581d342e34509cc68eb783ba5781dc0edc312972a5aa983a06977776eb6d1c10d9a16ae464fb8a29df6ef5210ccae76e0701b019fc03834332e5f4e21e3e5c7465049c8c6628a03c4201890a9f221744704de0d98dc92cf68c801d3343a98c82fcae674654355529d23c93d17bea9e7e36a8a8a127b7c193ef23d1efe0ceff444c30021bc86a23c468bb4f404ec33ea4de31cb7dab189a001b0908e4998afcc38a5915db6a25e8ddd6e420707c54b23979a98da7acbeeb435c249d86fc0e72c48cc0cf6bb6a689fa692dfc2105041032f8695016d4b1129eea482e26fc725757cd48964649c86ea53caffa993baf4a9949852a2b39a1404959be8522d743a354c771ec51e5729899fa5d705f7a30ae4b807c2e39f2c982aa8abc58956a4849e8bfa6c190a565d0291490ef9c0d310c0bfbe6ee53511784a6c2dc0744a555968a54071e6bb35ec455f60ca37e765a9f55549dc57d6799514a460825548e4b02079112e7355b13a663d395b69795656c05044cab671c0861a5e4acc55ab072365beca3a40a0d4969c392da66247517b2a46a0f8f497328fe467374524b4150356937bd99f6550fe25a7ae28a4b6a2d4d71c9f9a89c3b08e2ee971cb49246072dd1eca055e5aacb0e5a62a78396701db48815488a8c4a24d1279aa9bf2a96924ad9ee26e5f96a0159627a93b60e728b6494355d81320c700eee288e6f652df600c39c3e36d6c9e5e474ad570663be884d160649ef021211a1b1ea6f3ea74f49b0a14f5c71feb5292d650b7eafbb434c9e8bc1214988204f3741e534bc270af4e147058622a2e3d9fd5ceeeb08fa923d41cb9f49e948a9e71d3dfdaddcd389edc9ede06fcd1d186d845cd8aae69239d9ebcdba3a9a49f8f6275fb253e5487d7ff89c9e948b7e97d52a794f1fc8b247e5b2bfcab26392952db22b44eea8afc52b3662be19abab3b41422e046f5c0766d45559ddf72d7243b8bda82164b5be4f08231911b2dbaa77a9e3bcf28bbd6973db1eebfba1ef367f5e6d0e337a64d9120bcaa3e2a73f9e6814ddd8bbab8abd2b89af7e355ba909d5663a862147cb955a46e8d467bd72c1d65dbbb776f896b7d0e4bc1c304f2596723e6d5890224aa8cb18980139ad775efb95de163e376a3cb578c6ee47b48c640767a2d5a95a2683a26690ea4e38a562d7d9a6e0311c17135be8dc765a5ea3ee1a63ab971d600a766557b9ebb9e3dce1bfaaf002f53e6c7cc426171e081190785ef24c457fa40e0cbcfe6ed7a4319fc0303915bb1c7d0426287b26369b3ef85859a79d5a2d716f6720717f67a0626eeff5dcc4b3ba1550317677cd85eb4d565b63bd8c483ca3c97fc37f4a3c6b6ab06bb9ba034ce44c1a7bdb93dd41b817e89f2adb5d0d6a0fda9ac4a4956a585f9745fdc3c1bde6dedb38e146eaa29dd3cba8c7750cdc6144ff01816809c7430617baf84e80124a0894d0a4e9e209abfc580393efbee666d7d7f63e314d76c6b68ddd10b4065d0c8d8f8dd6b74773340d90d23448b1bfd4a662077aae19c273965d319588fd45b9d77d716187d5390c54da828abd4b4e131b25731a400ca9845e06282139891dcd554263a53349e82ca88807c2cc76240a34e98b5a9c4f82049d4528221ce37a0648b6757cefed0568a698d84ce9906daec30cabd0d402131623c94692a8009adf4c0a292510199d9cd6b4b9fe989699a99bb9dad05c262a6cd5a4b5f8deef1ae20b4b0f56bb31b7f4ba3009f53cb058cad64ebe34fb5c3a053feb0fe80f11f882ab3fd32f8a167fabd8f74809d2d062adda870832000de6a2830492b73822d62098a834534f54d6a9d191dfc7c3cc491614389c4446d89867139a1581f1951f9fe39f52b8f1be90bf87d3a69ca509befb25d1765a5b8cc9fa1e95b610e48839fe2b3eab38242aaa3b8df4e97a9fa68266c5823d284bd24ca103e6d8f29f549e07d50ae869a960b3e9b4e0401f2cd33c1107ab344ac481d1a5b53ab6f2ef2aa6573196bf3a1292b9e037884b8efb85619486451cda9446e5c9ed305e0b8cc0150c033765a8b280fc2d46291e2aae05725ffc11234152c24850b8a8ef184cc99649992b6c3648d0366a2341d9a8ba4355071fe3250f984e59c0a84d10ce92b6456f1170273e5a1888e0000693a5a9e8608c495b606b14383414087a1de272faffc4ba92cbf30167a64fc4e84e1f08bfdddf9a08785b958abdb6cc4df26a60ae28f6ac715cac318f916b19eb2e7971090cad0a10f977e57c1f9d06d915ac26d7ce20ae818779353e9a8cdc0765eaa1be7067e439ff2db9662a6db5c5bf9d4e372356bc60a42c3588aa48e05a1afebdc40e1cde6f9c87ee380ff53825427f102351bb42ee4bfaacd7c92c8cba0bdefe2d2ef461dabca602a78ac3a8e106d583a5435a9922f09694bacc1338dcb48ee19aba2ce89abe5e60705f585acde11fb1d1fac29f92d13460d8c4f1d7902c3702382191a89a5b14e9c0cda0fe1e20e0996c2e559dc894680ab3dd92746f37909a50f5f5efa0db6d68cfef310ce84535058bc9c258b2e887b19a71a431092b47618ce6e80343da6428e925c192914e168451da51bc0e2067b55e3ac34a4255bee6c2714b7286ceb3aa94f4fe9db36cad7cf3d2ec791c23f5d1b1fc08ed74fff6e1dddb9ed24245f335ea74ba0277ff673206b5821ec3e47fe4b8fa43719a18372dd1ed5aba3c1613d07ca92b864c92baa50a8892664bc3f3ce32948191443ba8c0fe8904fd5b8872fc81c18545c9b1c40943f99c21b62370aa5a1b246c744808f8c8ca011f05690f003e184d63c2abbb5330e83a38c1233775d1ef013a794a9813a84335a9e7330a6c3e23123317794262db139510d73d13c59dda5fad57c05ff9d0e464660dcc039cfb4fb1b2aace2446917c86fa2ac2e43c46f23ce5ac82294aa99e0e7f2033131c985f63f2cf98fc23a677cab3f122cd4410fb7f8fc93c4ac297efce25e0f995a3a3b55bd51822831229356f596159569771c0cbdf62b39dd6581a475625a0a74f7155a2383c7e4ade819eb077cdd65c59515b1581b1fe61341012636b74e7b0cfc410d9ea29bf179aff6b6ce3bd90765f627aa246fe5fe86e00ddd94b4fd5ef87fc52648cbd4e446a391ebf7e04f4d792e6af153bbad914a4a05124ad18853d2d8d557dae3d20190c144890bde0792e9a20a90d0c6ea5db47c512b4dbac89a9f33c54614fcc52e9f56a0f4a14aab1137d122df192e44af2697d77994ba7a2ee28f4f7b817ac56f11a992443863d70fbb884a4f1dad792fb694ce671ce171fd6c9ccaf71a73bfd7b064f8b903f4d89dd54d8a1123273101964b7d3186c3afd70f6e2fdd9c7e9ebb71fcfdebf7dfee6c3f4e5bbe9db771fa7bf7d389bbe7b3ffdfceeb7e9a7d76fde4c7f3e9bbe7afdfeeca57f77762367e58ff38c84199965e4a21725f298c18b8b38bf8a12fef3faad247373f255942c4f3f2246ce249312301231f22e21efc8794ceeb448e6b707dbc9763bfc674cd1af31bd939807c0ede7f52f2917afe53a2633e6c719b9cc933006f4e2f7c90dcbb8e4eb3a83e3dee0b0d7efe8c3c6b28b60761d5c31391abfa3a49d305d76b6b8b7a3efaaa16c274f42368f12161658683a7d7ff6fcc5c7e9cbb3df3fbe7bf7e6c3f4af6fdefdfcfccdf49777effe3e9d96bdb604dd5f1bd29cf522fe32e2124442102178be5aa599e0eaa8e9fefac3c2374be8359742eac7b8c4d0c84aa297262fd2e53212d08304769045356c1e3fa2daf0de38833906f88523e4764b5e7eb7efdfd4e996dd979ababf110433ff352677e90dcbb22864bfa4e9f5076bcc4d4cb16bc0c784c91ba5b4df992e9707288fb5dfb12ad3b37819f1151cb0ec3d9bfb5f7bea5eb9fa0ec899bbe33faf61222584545620292ac11aa9c42e106de8ed9ff1e89f901e1f704c6d1cfc552a079e31be284fb5b9304d855d295da3b45057cccc5d4d4f2336e54a98d33ba33ffa47bc2522a72cf7bc7fc49b0dcb8770fd26c18f8adc18716f3622df922aedeae49cb5247f39131da759820e8f1ee3ef54ffcbc39f7e6afd7f713483d4602afdd84dbf3778daebffa5f553cbcc3393c24c98433fbd6594f4bef2bfb47e92355ea4ab75165d2d440bcd70eb55306397697a4d5aaf9359af1524612b12bc15cce7511c496cdbd3cd3e2e22de52890b5ab33464ad88b7f428c2963cec1964213b7ffdd114b7e6692ebb83f464b28b37af5f9cbdfd70d69a47313359cba474df0aa30c38f1752b9db784f321499ae5001e02570db7ba29012b39cda2281c6323bf0bd2994e193f4fe512744c1680767f8b49134252b13b5cc73e1bfefb9c711e5c81d960c26223f80384986c2cb4915b8db141378c8ac2c42a49bf213c8c51bb2f99531d0aa9c8ec05848a33f1515d5ca190f43161db2d99d19781903ca16c5eee8fd6a96951f760b62559090999f18d9ccf64440ec7473165a4f275496c2a8c724e9d3a20ce91c81dc42c664166dee7784bd2fa10db832dd884da89ccd36cc65e65c192bd0f444932d0c15e55b42eb555bd15cba400051467610ae5acc9d23c1563242b53e68e6c58a64e76c76769c2d358cbf953db527e2a7e9e444b5081c040870df0a2ab67ecdf39e3a25cdff374df3dc8d9813a70962eb3f41b67592b4c194ffe47b434f16a3576d16b9d07d7acc5f38cb5c42210ad759a437ebf56d05aa5f17a1ec5b13c522aaf9fee9af75a0b2156dc7ff8707ed95bb2878a909bfabc8349c34ca63f36dca605fa3f34da6d930dc3bcd1e76a2e4f01feee7999abc3b22d2284ace9e2be874d573c586f218ac70d6d0f88f69abba40703724e1f936bda1f369c825615333ca3d7f25cb8d04fee714818beeb3f639bcde0f0f1291b55b6addca825826bc661037824a21b898145eb92896f8c25ad3e60fec1e163d292cda2e4aa056972a424c74da249b1081259a7355f7189fe9354b4f24403020b3bd83fa7fd5336824045f3384d333460470f19f61f2b59f90ddc5794512bf946dff464078743f577d04b93a5aad28c61aff02ef47a4d59f71cd8bd2b856847df7aab940bfd451d1f0d393b85ab38b8a1013116deb25d15ab5e51466e361bd9679f3434aea2d104df5dd26549f262a83a11bcc520ab96b0eb0a5d62002cd7ddbb7225abf4504c45271278c86c1043a596727606250703fcf0109380b27106caaa362a54b69ed73f7d0937713a00608b0d653d2a081b27131a908466ce483e3b0c5b11b18b5136ee4f0cff57d4fee844911df727851203e20cdbf9acd2950a1d99a8725997267a566a467d397e9b76e934189a8b95c39f50d61de0830149291b4713c269d41d9098b2312f7f30f5bcfeb397282509c6b63056853149f108c1c441d29dd0846494635f95a544760d654e2e11671d6d3749751dddeeb63619b968ce4afeb2e2bb9e66e27512b2db0351fc76e282d06404f63be181e845e15645e3194fc83bf9df051d903385a6bed223f2421e865fe47fcf697b50d80fbf45ac087d29e867f4ce7a2f88a11b85a2b8bec51f65a56215840a6706d7a0d4666090958833ee9a573cb9451f2473a13eeac0d82b2d5bca8112393ed2fec58902ff197dc0f817790e33f4da09fa5419bce705e81571c676c0dc8fbc568754ad88e7a98f450863b952cac933a35f87264ad65b94607206df764201a1363aabccea5982371be679ed14613c34b7756776f14aae087745b9d9a9b3de4a9b1a816d86b65be0b5ef9cd2040f931a6e6cbacf8a47ce6762ff8caa35f4bc8fe8032672660aefc9c7a19aa3e3ea708695a181893da0fc53dca50ed55287ce522798e4128b6a58cdad7ac542640610e96cc87bb9eb15ab4fe3427530d0b1d8cd75fee1e37ec543cec9685df6f81ab047c38a31c06376a468f927ca5dfaff7ab964a19486acb5d7c0a5cebf7196fd1ca7b36b3066d6350edd1a6f25cf1adb7747eebbd7615cf4fbd87df326fd665f3c725f6479f229120bfbb2cca6d7d66ae6e48b3d2a45cf7a5c0943c5e8d1562199afc3af94b9da31810a5dd8579a6c4bfc49c26ecbd7437a0c5f778c411dcba3aac32cfdea7c5d9435f17bbe6e64de1706965d7a4b5273d66aec42133b995a938ed4087d692f6471b01ec6b4293366ff341ef16eec7392d6dfa7c61271647ff9129ed5b94aa9fc4d62ca0b1bbcbb28f42fba5d62cea59f90d2b9f719b1a7c98f49c5083ca571372516b5fa07832d899ff1117268068dc92d7a4798751b55679ec1af7758a2bc5184b0ff5c6252797ee3038eb1a4784e1f29206986c92f9bcd8bcd0659b48b25bbe46e8e920f1ab606dfb132922b35fb9605abc6460a74be9a15ab5cc337818e56308b45c45df572099c4adf2e544017eed237b0f15fcb70b848f338fc1cb138ac9b07d4a04f1230ad8d06ea6108bfa220052d492a498e696297cdf392128995cf156a50250f9b4d8a7069d45adebc08a244d04fa5add3b9c6cf6ed92c971db8b3aa6d7ca9d35590f3e676d5957e05b621ae916d7d9981f2b8ed2eb2741ed91c1e758dd95f1efed4fe4beba7d66c1164e22b3f58817afd808b8c054b29dcdc0c7a5a616664ce24b88a6e7b579158e497bd287db8aba96c8366b875d81f9cb49e5f478be83a6dfd3de781ec40be7ccf6216ec548afda5f5d3c3bf142abf32e62eeb05e57eb26a6ec38e46961d3c623d8bb689907c8dd853d98695f085b5535db078c532ee4a3455dd7d45bf61ae24f728474c44dcde3776791d8917fbaa2cd33ff6be4ff7b7e6cdaf1b54c80d6a2030d14152fc51b1c895a0ac14c2b24a56bf596ab3de5cd58213f3faa511ab9ce553413fcad520509755ea280d095809a961910c6f877fa2cd967091aef68dbbc8d451ee7c2820d5b1db9fc044c5be6ad526b9958268012d298de4c6df049c70298bcc82987d60d94d3463929441d46359f6224db8c8f2994833d491c4af83878d6f697dc3547daadd3369276341acbab02e05a635af023dc3a35a9d319b985cb043c5b5dead828c972ea9ad2b46ddffc8f36a65c9885101ad7cd68af455443a6f89cd06c11b49087b11ff3d88a310c9c30abae87773a4ef31b685a8155a088b7a117f9bc7f1bbec37790491c02513017370558e51e5e640aa864fa6d23408839560d96693831d7ea95140b31eac4046221a6c36ca40251024a54253a2260338cf43290d508a3141756667b349dda5780befb1e745fc55944482a1146f3628a5b5c58c46891a0d4a49847dfb5044594b47ddd44741a3aa3eda6c6a8341298de4eadd7748ee2753bc458c4020c0f7d1d5426542959d55eca3b351e6a3a497a57912caf344bbc5a22bb2fc6e8e32a26b605cf2f09c9537cb6c8e0174d8312041f6952244bc672991194ea4412b7ba9303c4ac66242b2b198609dea62dc0123d59f83d9f5150ce6451aa75987e8e2340b59d650f4290ac5c214bd0fc228e7f629552681e6f9032425d60fbf4495dabfa4372cdbf175f5ae3e04a7bc340e28b7dd5fd63abd2c75a59e3e5c47ab150bedb3e970d13cae457d488bfa6816a5812c9c3967f68759a54971d8172e5ab6db9da884b81689bf7e394c3c0f01c10203929b204689c5d1d5cab572d3c681b8e58e0f4b48ece8661d3cac764d39137604a8c66e575ab76bc4473b84a6849398e406aa4948592f0ac9427510e68a43ed60b2d42552e4ea60b2528f42c41d4ca6ea0198cb0e266bf59826efcdf7c90d65bd65704bae9c6bb30314f1b7c15bb4c2a34577e9aff070ed796b946392f7c24004f01f6782379894cdc842993cd31c42a6a99ae74c0468814908eaafdbe7b7117ffd72b3518f6bf5a854647406bd938c1a2b4132556ab580f687c16926593cc906cbd57e9566205da1802cf0e9cdb0db0df030a541f7d0c88bfda16a9aee6f4aaf545b4e83839498d9839fad4a2210dc227e7048fa12c1f6f84af2a628251c937993591dbe9bd589ace74962f53ccb82359a8dd9047b9efce3f6b6c598443d267b53cb1007972ce6a4d475d18bec9355db1b01dd62fb64dc9f781eb2998d52324bf344f87c8bb7b241ec797a5bd5d74c8726b742dc83fa72f395f335ba5b658c4bf8061be7767f2bf13f26b5b3a4dc9bd46a26926cc8a34ce4b152fafa8616c956257abf9303f2c79ddb0e817c1b591a5f48647691b19b28cdf93f2ae56fd9adf8476742346442cb0911691a8b6865fa0932262b6dc9d4f6bfded1ffe786fe3f97fa5f97fa5f9bfe3f77260ea3b22e19a743400f156c2e139bcddd96a4f2f106d262dc6d813b9c2ed390c5f2112057e9eb85abafef7633a36811700f5105b558026e348e270734c1246d7a9daab0542835b56a4ca1acc595ae1f715dcbd131dedc075d599c39af21ad4519692d1572bba1794faf29b9a237bd693013d10d2397ee9dbe64127f49b3e88f3411418cf008e2e67e9344862474857d785e30c98990844e2114d54fe8f220ec2d5810e28773e2f276b36bc944dcb08c33e0490e327b062bd88ea09a8013d4b19c90b3a13428b09c7ab4584e6e6b4a55b79bcd784238ed9398a6668ff9693cec76395ea374cc2724d1f8100fed482432b60fba82fc95a9037de57957eacc370c4fbee94d750bc080982cdbce783d4f3daecdf0d7e88624765b3260d397c1ad8455d02d8c07136091e9e5c142be8a92e2555fbf82160773a2b6805ec229bfa2b14945722779cb2888a33f985f57042d223e747d0d8aca5a53c51c3515d1b2137815d96d069f99ef328858bb9e29b07520188ea7425c4421c1e66112975518baa2d99f19ce08b9d41bc2923688af90e53de835cbe44894ac52e5b1dd42c022d887e254615272e68029362c2ef6ef556d4b2ef3280e3fcac3b567a1f4c441ad6ce457a1dd14dadfdf2ccdcdbb232a3edb302a250daa587f4aa413fafc2f83af6946d21a96e2652c955798371252d1bb948c3027732a7a61c4953b5694266441854e9e43963493c782ace4dfe0964c69d06309586192b50330b029079cdcd0f5414aaee878ddcdc97a6283b8ea6f69e71952fe20edc451c282ac43cc77697b40e0c3f460c0068f097c9cc24ffb7ddaee9366cb30463acb28e990bb2b261acc906fb644d2c1a897a4e96a8bf77412dceeece4aac717d15c205ce92ca1f7ded442092357b878086e352ebad1e86a4decfa85d5a59b176bb6d04bb6d4cbb572d66a4a0c62a3e33bb961fe0d59a5dcef6f897a5cc3e3603b21c996cc23710fd877273a8fc47e84267e009119d80e23be8a83b52cb03fab2414d0de2a089523fb5cd023629f41a2878205587d9e0799fc1678868459f0ad417b06935469fc834c14c71b6650c681c99e39d818f033710b87b542f7ef20851453a99c44baf2fb04cc347dd683bfe43215225dfa896606b6be6ad187caac27d2956e9068f64137603df5633b4c7bb3385a3dcf988e81e6ee969cbcb92971b72bede549d14adf5cdda3e196848c8b2c5dbb50e3acdc22e295c5d3c1b6be4bd276120e156f4c211f4c165020f7b52a24f90d0a338947c1b34f36e622584200b9cc724b633119b349a17229ebe902c8b6479d199458adb198c0ef319b9080cac60abfa0048f42753195605fffcab4e022652a4c82ed160fe5b4ae222e5806bad38feb1543854e945c91bb954ebae777d45e77888b117c8b4c15caf0c1bdb643b4b28afb775b02275e694533bf3d204a1f287fe549047f4147227fe883f7cad68878fa89b1eb3058cba76594fc269b7496511c479ccdd224ec941b71ffce79e97716fe72e973defbf0e1432be8904ab12c5a46492e982a92cf8b34cffccee27987c8af76cecfcf5b2f3be41b63d77e278e3b64992662a1ca3f7ffefcb943fe9d07996099df19ff3af9b575a04bd72cc8fc0efcde6e895952b51e92dadf05b9483f5c472b39316594ec776459870095f5ef34369572a3dc2a9507b4d0969fd34bad2d2fc4a86b54409db269563886ab4b1c571c1d7200acb4605825671d70f15c8912014d7a53e739ed4d2ff3f99c652c7cafbc62db7dc9e1eee07252f7a4cb4f35b41f943b855b0165ace18e8466a434121a90b417a89b99e46ac4ccef34d17705454193de45dd0ecb934441684bb5031bba33fc8c3f38ee1d1fff84582fc9971f045bf103eb97211ff156b2867efa5d150fe080b42ef7f4b4c01cb3ac27b220d1592d07c071264698f33c13d20dc99546114d0b6c05eb739ee69c81938f94547b4cfed21e0728c2786baff178ef2a4e2f83b88ef5a8336bf6880003e7f7c9dcd876fa477da2d9387fc08e88d588299706e0b825000b1197ae41de80b941c77ea7432e2139ddebc425f68edab01891f31ba409a08f00e7526656d74310afdbcefe8d4460a57802d6cbfd1274ed2c0ee48a16f94309c3435159437a27a1d8ef40bfcbf48675088089cf4802cdfd84dcfa59ef96acfdacb7de6e87492f08c3d208906a1da6df920ec9e466eea891af3ae08a17cc05cbca8b22f09d897f4eaf41f3c399f8679a2e253b22ffea97ef4d3912528e7072ff352eb0267cb09c70b3664d43203dcdedf35b06375bb340a0440ab58ce3e6e353d00790d59418d229176c36c88648e53d49237ab360f533fb236219e889386d0fb44f9f5e85dad8cb3975344810897786974aefa0ef082b7abfd2add995e7a1cca397d59b8cfac5480f809908f557391c663b65c904fb3b45c9a4244ad615d7a5f9b87734b5e3d9b307916474c08e1e22ab654d481f6f36477dacd45e01172fb3e05bd2cd369b3e891c8955d2800aa80f8353d06ab1028f4a5e595302ab77531c98ec41825e09bda45234b61fa541377b168d023f02052704175000a911dfcb32ff5becace82d1928b1354e96bc2009a8cb7f16cc6a85f7d4ccaa05e3423193b818d6dc0b4b1e2d44b616ae004900ec31cd14971c28ce9866eaaf3cc9eb7bf5beded5bb48a5542b59e94073cd34d33f30392fd867a6b878e76034af21be3b77f9676866971d76f97b47c9a85d0a84e784b2ae2247a111639a0b57fba0e5c86a75187c8d4bdf01ff623f561fee56e740c05039f2ef20e1dd95141e263f844f24598599a9301a5bf2cde1ca6ea942d2fa8fd24f3ba6ec5a1faabf24b12c04750a922b761edc7a5efb5b4500285e8e9d46135c6c68e3fba1780651e1685264052959c9ef1b4894ec194894ec1f48e5fd509cd607a27fdcf6fe48d3e52b3d2a4e2bcf40fe6f7bab2071abb88fba46a955a196dc116f02d8e2868b71fefd8b7112d36f554a92f60c0b45b8fd8949de5853f257b29afc8b4948e39fd0e181c0c380d6b5f55a3a3f487ab7f8a17d52623c184d2aec7190f4d6f05e3f82bc8e4944c5e960f4196524c4fe47f8438aa1d288e8d1d0bc1bfc84e2830857d77ad7421619006b4b18dc6309a3fac2647a6102bd305d043612601ef12acd2ea25b1623810f1a4a211e819e8978d61f7d460989e484e51f39a30ab3d460f1c97a0ffe5047759a66d1559404f13b357aff6ebb252a4da46e0e944a75494a919abeedc3207b6c3144affad131eb45e14452dfca0bb8b7cf46282976312bb8170b84895e0df71dacaa8f2cb6b6958b12a8a2981e1d688a14b2417f0b8664597d15a534a599d5802460a2a61fb3ed9658bce8f0f781141a355418e5037a83c99b2d4ad0d121265212c25bb2df595907c341874727b840b001c27705968be453a446fd29c8121b1836200d7692f8ce36641a6300aa003499b629cd8cb977c24ce887ce8b208ea3e4aa7591a5ab8feb15e3ad9b208ec240a419d7cec7f1da78b4597fb6d6e51aac37ffb5cad2d581a4a4fc5fad950a8cd06bfdc659d15f6fb660b36bfb88704ba42db93fb28365aff59e05616b9966ac1508b038b54e8e396707d0f8a0f84ac7c464e13d1590e875721364519088d6ef511a6bc31beedc5f8a4209cdb62a36fcbff328632165da68ec2ec8b260ed337299a6b1afc2354899090ca27c46d4353b5897675172257fac9797503548643b68ff6eee0b62233b1227ecb2cf88a1bf5029494366bb85923461c55f6822085f04f097dd0633e10b525e463f2235a8f0038795b435694292edbdfdec3b3a7a878ed971f1fcc387e9c75f5e7f688cdcd1a9776ba1baff58f2f5093a1cf4252a4fd0e193479293973f9e62021efd27c7e0ee8d0e1f496a23eb1e4a92227f3cc264463b63b5462da5129c74c89ceadb87426953becd1e36db0f93842cc892ac8c0733a4925e538993c90d9d8eec97c0dc62d2f1b9ac7045d74d6f04269714dd50e79556144d3a94de8c66fe0da67446ce29bada51e96a34f3afa0d235bda1f46a18cdd1b5e7e588a9843bedbcb06f6c0f8653daee934bda1e6c55bdf6a5b9125b6d366805e739c364bad98488e151509ab20f098ac98d2d50fe8c032fd19ccf1b7ae9797383333b53703058b1703aed60f28d9edb97a2f25276f466b3f9a6bab9a56f8c2927c23e239fe9b791b0cfc674b23ce225ba259f61602b6c1cfddaed6bcf43a56a696942b802ce1283372043a5b3860bf0e9948e2726a9c71f8cf61b0e8481dc4700b8b0db0e94294b9946e82a47bfd3df2309cd20d89689358492d3bed2845b1b8f83c148283f4e3f300b9c900126070776a8103168ef60fffc985ac9697fa4745ebe182793f160f2a73e65b2cda0f2d7187e7630f8131d3ab275a9bf80664aef65f2c09cf647a8db2d962a51bebd6346c404633f1907724a3af8fabe813c6a1c4815820016f700512318eedc0961f22917132aba167a42f7fc82dbde7c42329a60c7ffe77b5804bcde4365e100c71f3f5228fef8f8877614dc3a5dd13433715d93529d76b0d9189b99d3c1c989c17da9bbdfcec674bb895a3f3027a97c14b63142a995e5921e672a6487d385d3c19ef91ff69f6822f7d8acc0634de3fa2792c63dfcdf2f06fdf7ba23c7aeffcbe4c143125323a9148886e4350a2785ac9e483f00f3416634af903c32a7efd9d5d9ed0a75feb7d30d152699e15ec656713063e8e1f8cb97ff7dd0fba93b4278fc6572b7dd4c1e5e91ce972f0fbc8e53abdce9c6b2ffb8f7d3088de8972f5f10deb4e66926a7a20a265876f460d0fb69d4c1ddce83ce7e0cd146ed0831bcd90492cc49514012abb9cf714f302e500a56377bc0ed18c235579727a2417545521a142bc66936caece3c7e04aebf9f722cec890438ea5fc34e613f09b03bf74dd5c0dabdd77c252a96890a989736b0e76e679488c944fbb6f0c17c67c025798a4e99cd4b81c33fcfd28382922ec36afa286d6c7125a51461f8effb737e93e78d863b76c8602cf0b20b0a1f9db7b7d36bd78ffeee3bbcda6d3c178d4f9007c2fe2d90c4f07bd4e37f33b9dfd5bde8e3c2f6a4592f7de738e8ef0b8339dced28c1d7ce553be08326030264edfd97d10992c2f39223043dfd858ec236e878f9faa93fcc81ce4bd3441e17f52462c778b802f7c452596c14afe42d16613602337c0abedde519c687c726c98e6e3814628c7879a693e3e72c4c5b880d883810e732e67ddf76de08779aa093318cc233cec76c56962c35ec88519aa493181b2717f42b2f16082b75bd79001dad2ac6c1501804c8352e11513342a952c024ed3520967827247806d7052b447fec9bd487336ca740093bbed7f46a115cdb36ae1d2671c2307fb8d032a4603bf4fc43ebcf5a4096fdd477069641e2076ae25a8c5a03ad3699c86015f4c25204eada3e2740a4181cd49480ce1b33c27c323e17881fddf9b88418fa322c0891c8733b0fd83f92166a3ba735d77c3477d7f4092319b503715bd18ed5953fffb7ce5d3fdccb93a9784e13dace02ef8fa0e286be7bc61cd6b6fb371dcc1369b8ed264e887cb348d59004e6d72e6b0c3d329dc89ead8e8741f1adf3ddf92842027dcc89cfec9bebecfa6eee8ab8014db19188dc8751feee10ebbba0ea501c0cd77c0e0f85823f527561332705078fa0328bc2c8b184cae522b862162e0d7963a47330843ea3e4b8619cc4fcaf83972b071fa1f480c6aadf61c1adcb458ffb950b29b1bb05911e4e2664d8bdbed26a7d910477324101b27132265cc2240aa0dcdf783fc072c2c12dfe767253c3cd680d13fd6d47ed0d7d4fe8951913d7982490e9cacdd3a8db04948f3516e7c68f731b73ac1464e66646ee390243ab4bc11545e0622f83d62df2610669ef52ed782bd81a56a53e13c6d36eadd3bb0a635efd453a1b96294f5948114e4eb553f87a50f82aae5677831e9f84654d8f7e1f60cc90320c508a27e088c71b9d79f152e9b74fceaec58b54c79beda6fb722d465a42b2a1d82bebca8c494fe990af8eb79ac6702b3814900fc2c77a084b4eac7155beff44ba9e8763ae5a6e7816c27e1664179f9d50726f4ab251d7810f37cb1d9a0058d316180a6da5a9de079ed653990f08ace352696cd5656a748a918661b7a48e616fb0d95de34558e5d0bc8a4af01c9861b29c8189956060954464194cd46141a618552fd5318a1bc76dc2ad242efb728114f01707e544428e15aed5c07cb63e7d11c3e3fc377c9b8db15133ace089b80a1db0fd1e41ffca0fd1c6bfa54693d9e9cfc59b60c1002c48d357e66032f916846ee6148738323e5b6b52595c43683493b2e60c920d9190d87b383032d5bcc693e9ee9e079f1680e516d0bde6e8e0bfdf65643b6038c0bcf538f859bff4282a502f4767fc80bc2ac7e8262d38c6445e361b73b3b0d8746e3cfc66a3c13b2a6623c9fa83c4237109c321e45684da6644e049112bf1fa129599339c4c6e7d88dff4729bd194d29a5ebcd26855a720139f66f30be5bd2b64ef3b955eaeb8e1368a143e91c62842d3dafad2f22ae28736331904b9519c53c0fafdaf4d2f34abd4851ba5e243cafdd94dce0caf3ae2ac61f0db52e3defd2ad75893d0f2dc1be4daf3d77ceb6fd2d3059ee83cba77d4ddf9e1e6aa17a07cbee30758c4490d0634faf03dd6bb384ee548f20d68455174b363ff2331491a441d1746f16c268efdde08a9a8760e3a09b4ca818275650dcabf6787a641608b40eb513bcd267f7353f4bf225cb82cb9891d4d4bb62c239df0ac572c2693a6ad20c69c6673cf111d33dc8cdcc40ebe65cf6171c8c558141ae10bcf50367bdf97f8d012301ed93888e276615b50e58f262438152e0c7c0cd35e87627b450dc46f7bb0652b5c77bb53f4f0d273618684eccdc550e8cda6570a419b1015c56fe396c6be48d48e1d776e279c0c4cce0673bf43cd88db97d6ccf3c0fee2a1734d96cc2cd66b6d9ccc9922e4619b20ba85808ec8f27644597aed000a80fb46fb82d51446eb6748a379b85e7a18eaadca174bad9cc6481728e52051d951e483ee0cd662e5f2b064ebf2e7832a7e09ded006f361c4dc90ae3cd66a974f5537b1cab98e3de10641ce2015cd810676379e49cbc66d99e9d3ed26abea393ef60a200b440cd97b7d93d051027aef7f74774fc5441ded18984bcbbed301ddbafbf8ad3401c1dea1be809adbe3a7ed4f4eab56191eae583e31d2f9a3f52705b4d2f5ec4c172c5c25def9bbf25df381f6bf789f3d259ed52a3a68e4ad243e98d95004aa58578532d669522cdf097975bef62a518f8f3528991294a85c68ca15468c482522170f5e5122d27940a3fb1e05a7fbb3d6832092a003a02800e2cd6c09ed76ea76309cb55d4f81d79bc81544032a80620afd990a95b330079898f84934a529088069ed794885d3909175525118c3c2fb2a384a0cc2019cf18e7e560e145ca01689229eb1fe727eae4228a3b2af77c116e72b301df9acb0832ba3a3f4dfd523a125ca28d5873b9e0bd868e0fb1f227df497f4e0c2370d2cc08dc4bc32ab954b99dd841613a5fcc7862c94122c981a5ffd812f90457b84ac8962a14da2e906b5d0fd97c61b557f109e2b2cbe716b22f6de262b5eb97ee7ab349f63288278f3172b274697f65fc1fdc25d9c2c4857894e046a02f06f2a47c3d7e78f254731527278aab38eaf7155721a9406eee8d439aa34c3205390a243390a3483200394a3159d21c714ca47c833287401568ad4d57a01dc9e07f073da201969438705a01ee300d02bcd944cecb8b2c5d469ca90a608498c6370c41e030a71aa02ad3472a69bef3d222285381c3c5efaa012880cd49ea365f948a51095a8cda2ba3c9284709f63b1d7525a2155a990eac1b6a954ac31aa970c7b36a0518a97a37afbeb3aba1de2faaef6119d4bb65f59d5d85c27e1c3bd87ab5873b1860041a0fd231a3efec81e41d4df5d8ff44cb0f4cfc89567abef76ed93fdc27ca39371110a23c93bc2f11e46e9626f3e82a07b1c86ff709b342927c52f96d12f22d8b842edb62b807a6fbb42947205e36d28f4ca315d229c73ee8149a1c74b7259d0eb993fbbb933e04fb96429bd41cf5b54ef868606e8077cabb0d78aa50e8a428c1a3cc0f484ec54820ecdf5923d1181278458893434cf21a2edb8516952382a12781e4caa366c57a701a39e25c20c5b98ca42491888c59396e2fbfdedf6952441212941407256d1d89f09d40016120ec9308ecc2abd616e52f696c7d34e86394dd7bbf0cfbbee736d20087e729c0ddabdf38ea9f60f4c3c4aa81396bdc264df8850429f03fe24e3422abb98b693a6623ee77bb81d2df41067d0834456212e96c050532db4704077bacfcea601b38d913121bdf73a8589bc4b2360caa5a9e262a22c8a5548c22ff604038b5710486488cd28303bfdb4d4f23c9f70eda9406888fd309a83e878541e4bea91c0d0e0d8498b379786ccfa6a2e787dfd17035e51f1d99cb55368afc3afb3b4ab549efb83f216c3c98605f7279fe772e3d8f064766b486fd18ec1c9ca2c081a32d1b1466aa9e27c6fdc9f870328a10fcea4f08fc954369608d120ac93e3393aa7eaf019db6123f3eda73cca3c22c50ef325894d07634ace58b6d73800a47c5354c2d5ce73419a700d1b1e7e57246f978306953cac6f9b83f99f86d24ff82bea4504e439a18093b5c771352a47ac2722966948dc38964d3c603b76f8064ab349e795e1b85ad4ad73639c442dfe85aa5f492466846e624041df4a2aa835e8e02342733724422b2c0fed2e9d35ca1ec33e4381c1cef475b6e7a1375cd5644a64bec7a46a0ead4496486f2371d472425194af164bb4362285d8d5b183d3627ea489da8e313a3773317a083278a457eb44375e3209414645d8e041ec528878085654855e01494cc89edda4ab10f8c3f2278ef67909bfe683f200f76da18986a01ad98a465ea62adfaf96094f87b09d50048cec3f1fff6c65f2693eee6cb188d7c7430fa1276d1c8ffd2fb1276f1086fd0b8f33f138ce4bb51fbcb211effef972f93cd972f3dfcd3087f39c45f261b34a2d062f365fc65828b9f9b07183fbc22117df8e50bfaf2058f1e5e01bda889f32059ea093c3a86c4beb34590bd4843f65ca03eb60264a723195e636b1a94683544fac077ba66360a6cbd88741e0c3ad84f361b1dcc6c8bdd654ef7add24e0d9f31be616517373d8dc7fd3ea4505737a689b19a23ea1a0e5c7d670bb64b1caed87db87e5dc65fb5214ab3146955ae76f77ac6be163a59af44111fd72ba63db7ce6e576c2658d80a2c05ed98ac090effaa866363999040f2816ede870cfb60f61741f604393988b6bd08380a2cc58de0322e50fda794953b183af6a7b305a311dcc805448a831149b7d5f709fb86821e382d6d361926c9563fd18cdc8fef3a1c7c47816b0e5ba7e337e86b9bcc308e0e0fcbcaff276084d1687211533ee2d62877b7cd0568c660d7ab71bd8d8d440ba26645ce3d670057995d25d5a6ce8b78149b7b7229f36a233759513317fd0ee4c2183c14941e0c1ef6479d837ec7bfdf35f57def6a94fa3dc3e6b62650ea776b3963afdbf6a1b04323e51c7e9f3b54278381ee92a8c8973f6e090c1d8892ea6b2f363fd9791f74a4e8d2f1534596765323d9a159d05c2e684891d00e38e61a9dcc687b30ec76737b513da73112e37ca209fe8cdad1cb4ee72653da9051369e5b1a3bdb6cbaddbc4dc3d1cc6fb751d8b075401043ec79299a93102ed40a5bfc1f5300efbbd33c3a34372c8727fad2f7442dddae952a69a847ea3e12fbc10ffbae34a8a5d52a88c2c7894dfe1411dff78d4cdba97ec7c3f28773f2daa42465aecce015814c38dea8c8e2146c369dd3d3204993f532cdf9b3671d12d374b3c90a3e391967138b79468e1fb0f18a6d75ba51b7d3fa57a71b773bff6a7d0bb4e7ef8acda279c48085fd57a7cbbb9d7ff53a2a5fc3b000734b660c80871a61e4cf8e47f9c1b1dfc764468f87b3d37c38eb7671389e1d1c4f8a66e35971735e4e7e3f96b3e52422f1c404f90931d639b1849398be3d70c891e3ed5baad39734c7213576b5bfb38da257ec176df789e841d4bc3751725da4fe2ff987e88d0f388fae9272029682c51e0cc56975e986a2db35daf5627d44a1c9cfe45624f83b97058a62242483d08fe36ca240606bcf3209284709ea63755c07705c65c9e1e121763818ee620088af6e5762c47c9bfb9b39aed7b1657adaa89c090437b3342f8244021b788707ad591c70de0a7889c1297acf8bde99d3dd7b3667194b66a64fc899bd082031ef256349cbc414e62c6c1db478be6219c2a51af2fb2cb46abdb6d86c6ab1d677b06a23e68bad12121b6163c761b62bab2f8d0426b9b6496e4ed16537b08c219bf94b61f363ed60253fc84568b1db55c63887840839172d168905cb5a970c10692bcd9c8d2080153a5dcbcd0c9d407a06e867190b0443e5eb1bd0db5a5dbe4679aca4bc1db84a5b5251f36e2572f43c73c5c399b8305dbf9b8f1a4b616d7c09b15a914c05de02de26eec15161f41a726c05063be8199d29df7e088702e52443c6f16495a52b4eee94d7bec4e4784bc416155dbc4897ab346189c0c302c7a33e897adf22b1789fe6826518857837f153bec93a3540534ea7ea8539dded4fb6c761ecfba9f507c7bdc1a14a15a61252abf9ffbf935aff47a9b6c6f90d5a3e659ee579ea6f6f9e6624a0d9a87884a0a5331b72ae83fde3fea07f44a2c65a12108258573a96c27943a579165c397d3d0161a65e4d6d316423d0359f92b8f9ab905a8e65aadae01118a43756bb894253ad7f42c2c66ab33411ec568f6ed027b3c65a015f27336770830199efea4e87b82cd75e34af4d9a7d0bb2709ab1b9ae794896cdcb93f395842b5ded88acf6569bc611d7733aec936963dd255ba6babbc764dd58250efe58eb2ac7e4a6790a791206727f0d200c9e90abc69a19e3ab34b13b32784a2e9be7304b57669e2705e53fd7d6054da6199aaeb8a1881ea8b7437d1d2bf4756ce09be4ab3ac2a22e9ff9fac215fea4ea4facfe70bf74a1da62361f6ad1976445cc37edcdafbea3853f6bf567aafee4f5be0a5d0ed4889c8282dbb876d89f73305aa7f3ad0a22f76e4ecf89e83d97907a9e868cce8844f3061ca168ae8a24c0bf48132e691d0427d76517fac8d09c889e262f3420a2f74ac1e97b36a70bf9a88f344d89e8bd09fe5843b0f373b64ce99488de05a0051ac99ffaacd29888de0738e230102e1f35acd22511260fdb5911afa6e9dea296f7cd4d37e696324aa5c821ffccd59f58fde1eacf52fd59152c551338416847b3abcadabaf43cad3ce795e7b0f2bca83cdf549eaf2acf97905333e2c59e364883d720406b6098a906956dbf3685a58d6fe84bf7126edd06162a7637c8550303320d3bb777954b930e545f0ec8edfeee42d735f0b8bb66aa6a02b0eeaeb556b5009277d79aaa5a1acc77d78b743d730676d78c554de780ecaecb755d737a76d75c6eb793091efeff010000ffffcc7913791f9d0b00",
+ "4feedaf218fc10fac8dfae6f9b5bd778": "1f8b08000000000000ff5cce310ec2300c85e13d52ee600ed06e2ce9c601b8439a98d622d891315511eadd19c840bbfeef0d9f777d555caeb8dae565260c1fef00000c57eb3226d168241c8085114ef4a8a216d986df2d49110d309698ee2dd59833f1d415bc5980735d0f5d699a77c3826a9462e962a189032464431dfe1cc761f3cebb7ea69cb181177ad24885ec1da0f59d75fb060000ffffdbb04808e9000000",
+ "58d76b98bc14dfa006e30ee9fe378ddb": "1f8b08000000000000ffec3de976dbb6d2afc2e0eb75c91b88d6ea852a9393ad4d7a933837769ab63e3a0e448e25c614a902902d45e1bb7f071890a224ca4b62b7f7877f249e05180083c160300429fb224ac2f4c2bd80fe980567bf8a3419fb15b4af5f8f7b8e3b9e88a17d7c5cefd179b3b5eb9d4e92404669620395943bf373c62de6cf89bbcd4e89b7bb4735e47e1605c289b7bb8f502dfc42bcbd7a81e862057e7641bcbd46812033c7e319f1f69a0582cc1c1f31e2edb50a0499392e14b35d20c8cc7199106faf5320c834380e02bbaefabd831096d1481f88b7b78b10921119106f6f0f2124233222dede3e4248462421de7e1d214d36484abcfd0642484684136fbf8910921151500b21246b2460c4db6f2384644414d44108c9889c136f7f072124233223defe2e4248d648a864ef218464448078fbfb08d598245ea35e2f305d6e4108860a6b1498611b020a4551e78ade44d094d218c40a6c2168188825b5c35f14d62e30c3ce096ca2b04e8119764e50aa6bd4770accb073c2a0afb0dd0233ec9c1081c2f60accb00b82eef67e8119764e48be10afd1a81718b20d2155600341c3404c83a815510b75b1568199923961a2b1768119b621180c65a9296ca056ccfc194ce9af81fa30ca43ec5469aeb18ba061201629700f41c3404c77761f41c3408c13afd1ac238853d26c1418965c109435359b0566d8866030943553600b41c3d0d840b7d046d030100b15d841d030105333d9dc41d030104b47b59829ffd268ee9609a610d2940e9b7b081a86c686ca7e9afb081a06624a87ad3a82c830985255ab81a06120a6da683511340cc46635365258abc00c5b132235e4561b41c3404c831d040d0331652aad1d04713a5abb05664a1a82c174e1cf4aebad3d040d0331b5ec5bfb081a86c6ce548d761d416418ec4c810d040d033135d2761341c3404ccd50bb85a06120a68cb2dd46d03010530a6d7710340cc49459b57710340c8dc5ca59b47711340cc4741b7b081a06624a95ed7d040d0331a5924e1d416420365216d36920681888298be93411340cc494ae3a2d040d033165d39d3682868198d255a783a06120a68cafb383a06120a6c15d046b23a5a0ce5e8199928660302cacc6dfd947d0301053227670c4a63e6289d2f14e0341c3404c2966a789a06120a686b9d342b0d6d7c5da05664a1a82c1b0b0d2c24e0741c3d0d898d522cddb2930c346826e6f1741c3404c0d76670fc19adae11b3bfb05664a1a82c17461aeac67b78e20320ca62c74b781a061684ca835bddb44d0301053a3df6d2168188829ebd96d2368188829ebd9ed20681888a961eeee20681888fda5c05d040d033135628c1605af0533ae25ec977053da900c8615148821a430166430b550307c1466a118ec428138ea0bc3d098544e05c346699c8ac19472306494463939a6660ee34599ef8e061d28700741c3404cb9458c13a5f189068b6b63cddb2b30c33604cddc37b06121aaf48751a334ca31d817a5490c1ce517a3c51c550e118347f9a5d8aa306ccc09a6424e33a8ae3319d4025da15d60868d04651d18554e8c75184cf7750741c3404cc53c18594ebe14ddd92be1a6b421194c573857468a91e2b93152c4a6b5b180898a859a1874e6045dc8d0669add40d03034f665a8c7d8c4505363869d1386670a6b159861e70479a1b0768119763bebe6c7284bd8808728e92736385d0e72c2138bdbd2c98a428a338f4eed07dc4d6d46c129aac085f582f394dbe4194b92545aa751125aa3349cc460fd481ec243f22371ba72c8d30b4bba411a824fde1c3cfff0fac5c9db83a3939f0f3ebc7d4ea8cc4cbbec187a9970cf6026fce2a8e7cc0df7a0ff1902a9b93673322a5c0e228dcfc14f28b8301da75c0a5f50e146a1df6ced66b4d56aaf1d19c9448025248f0249badc5543ede23192db75870a9fdbcd8e43139fdbbb0e8d7d6e373a0e4d7d9bdbcdd68e43b9dd6cee3b0e0d7c6eb79b0e8dd4df9643c7aa62dda1a1aad170e8d0e7f69ed38d415a133f889910164c2524a1b098fb2c1d8dd3041239e79084c01783646ec081497811c308126933f767ce060aa4c9248e29f93096d1082c42e53012ee98a763e12669088732e5e04e34d7c9b2eec45f1e3965386d82263ee383891229dc1892811cd2d84f7e6a3d969e6ac2f77df698f946db03900717c93b9e8e81cbd97310018fc632e5b652a6c7bad1a94d525d94f8be9c8d213db5dec3690c81dcda227917d6786e0841ca990427f65749457fbb100bb04e536eab8ea73e98eed61addf4915fefa6b59a630b1f8ed39eb3b565c7bead4621ecd8f192470a506262c7d380e37cfd1a17169e3c6a6d6dc55b5b6694219c4609e4a334f5689cd9c758c04edcbe639342cfc4a1891bf4e8046d67e44ff444f76f73a27f032ed4f2db30d342323911ee39965233debf9ff1bb9ff13ecef8ccefd3815ae94d879efadc6eb51dfad99f034ea6f0e6719480379790a8d9f1ea594659128d98528d370f271ca17a4687e939706f5e709f97781cc4384d44740e4faad82fee27fcfb27bc1ba48990d679ae0d26443448ecb908580cc29b4f9f4c4178c773190567c29bb3894c0fcfa2b1f7a04e476c7aa4a8afa35124bd3d7a9a26f230fa02de1e1d45c9fb549a995205175846073c0a5f4789921e46621cb399f7a091653d3a336d5517a0a60b018be33e0bced6b63633f0374c0e5dd6577b7bb6e85363b5bf6dda8741943c917f024fbd07f52ceb6554a6692ca371a91565cbac0ff1526b795b9f7e984b3764920990e21872f05512c2b4e7ea7a99f5c37cd123f79cc51370b24f599665f433ee8fd3ef709b0397a1bfac60b84fd370b6997b14c9188cb33de22c114c8f4f58ef805b8710a449489cb59a448c581c93bcdebb436f93878e999027722c4e46a0c20d578e05256e85c85397d1f910a2c1507a9d3a554af42a25cab138041e81a0e95877d53bcf1c47f9fea9ffe22acf3545cf75e84fe981f25c75879ea8bf7b0e3dbb7724b7e6482efe46472286e9c5efafd52a136a7ddfb15f39b14b9ec5c9567add2abb9a3bf425e55e186fb2e24ede5fc79da882e05f16598d60d4bd5ba7f30646299f591f041b00a1c422f4c40677086c7c122513010f0b2c8ca166600e313001a1f310dcd18918b3c4145668c0822114b8902c383b1133e15ce5c67e79663d9b05ca4c2d42c14d26a39341408965bf6642220b39daa78dd944c0c920d86ec00e2523e158350bfb4f5e021b7b39a21c1256d33dc7a52f28a1d6aba4f6416891cb237614f33d481625102eb3ab544049ef7bdce908462beef4c2b8d3f7fed955eef43dbad323ffbd36bab7dfb1878d37991319b6f2197acec4b09f325eb525856ac0baf9b76c041e19f56b2d92ad151b5e62b5b761ce6fd310366e866651456175f72b1bd8d8e10335e073c62396488f9cc61331ac18ef81cbdc571246d53290ec38156be34edb9d15ed3a958d7fef641ee6f26f5df251d1f32cebbebd0f19eefeb0f9167dcc3375c06c39f4b5fadb71e83b9fdbcd660777bb3797381e1d91f049a014eaccc5640cdc765db7981f07d7ea641c320987c07830f4c17f342fad60988ee39403cfd34b8b9236b892f101c83ca64761308560b2248dbc482470e2fb3eb86730dbdada285ee84a4f9299ed645979ab9e23c7038a40940c3c99f99b046ddab757732cb7bd42de5daffe6b556c1cb30086691c02f7c89330e42044cd4ab9251747116bc8c49050a23c4e4d4740e47a6543bd90fa10f667c4237d26a2a0c6c2304d1a84ead9f280a6c9b3214b06e0add9004d93ffc0ecc3d85b9f501a4682f563083d9939c615bcb9770577ea0a96184b769efb8937e8279e6bbfb0837ee1c935a3e0b99c8ad7d139fc0c107a70f335f53f127ca821586a0cdf171fcda7c26b34d77964b8432a5205158d3ddf18ccc921b0906c62f28d9cbc0e79a956784528bf28f19b5adba46af327b29f8633530ef2e823cbba4fee57ef3fbc7a9fe0827d75c7278823960c62b05e982edcc139828cf3b670b350536231dcae40acec57c2eacf2c31198fe359940c2c3984885b41ca31e71d2a9adad140b895f6fc0683d135fa930df495b4dd30528a464d58d1688ca57462c58a843504761ec5332b4ac438e210aabe9275998cd0f990c3a94786528e85b7bd2d8720b59edd940f4846c932c1d10940b5ec5edd2fbbbb8f9f5fe1bef845ed8bad3a2eb397f7f1f2b5f7f62fca2144897e96f5a04e99f048189d6f8a6895097944c25492cb82cba5c0d7380a39040bfd93ebba8b10b5e48bac11af8951ad494a11e825716aa617d9cbfb45f60fef6d2f71053e552b70dfa13ffbdceeec3bf407f5b7edd0bf147dc7a1fff5b9ddd8c705faf1d2056aa0e751f8269d24d276362f3e0e02a4597b0ebd62111d4ded52891193c1d01d33ce46c255db90930d401e266c2c86a97c0aa729870fdaa8cb196c0bd62b3ef0fdcbe45eb9b8afea97ded096d7bea2af44f2e57a742ea79ea47f4d80cf4ee294a9add6e337770ed78a3916fb7d55e09ac70b80f9628b50b9b575d3433be99bd0b96ad31fb364435cfd6c2997174783a154fbf55134d249ccbfec042eace76a861bd0fab77465340221d968ec501286ee68e4ce66b399f5f2a5f7e68d2704c16cde37f4ff7ba3ae834b18a53c249e0d747e1637204aa2cac8eabb1b3a4ce328c48684021f933f40108fbc4dc99d643cafee5759bada9f6a7d0eec4c4f379f2467f9038bd5faff755f47c9199dcbd4fbb49daf896d39ddfe612e5da96a669f326ac09b6792bfb5cf4f394b82e13775baafab62af11be9b24f4754dc5e4b26e361675a2d0a331470b1c8e412a06730d95be0121d800bc8a18ff32ef523a524857448384c9098793114a3b3935ebfe9632fd7cddb7fca0442c2e16917eca43e0243367fb8ff7f1cf3f1cff7cc4f8e7833e813430c0f9e51f0970cc52fbdf8c72aed5b96f09759457b849b043857fdc53062d1d6573784ba0de859fa42ba7f952e9c2c387788380fb9a7e0cbdaec07755373b9f3398795c8fa422bd5876252ba107bf3af428c2a71b6c06a62b9f328a907619df11ea9929b4105706b1eeaecaf118b15580b0502a255639b3ea90aa24e65ac0e814ad3dbe2aeeca0baa36b7b61af5ba6f10d381f5ee7e580a112f184fa2442775deb0a96b35eaf5e57c16e36089617a9154ddf1ba8d1d75fdd1b350b3e6fdfd1bcb2ff71bcb3fbcb1fc827bc9afd77dca93278436facaef3ae62da796ad76bd7dd9718f1c0dc1c20e59e711b37e246a41ff6885516825a9b46611c4a1c59299c5414c62294ccef4d77babfb87adee570c677ebb9f885bbb2ffa9ffbfba2fff07dd1dfbff3be6802d160d84fb9b9e72d945d9723d92884444672e650e9831b4c388744fe6f3f4e5ff7f59de29c1b85779430580d6ff4f3060c8cafba64470e78348812cf2411dd204d12d01673926ace775ff3bb49674a598d525ee20eb456ba95f016e445cacf2cfb68bafd7eea546cbf3ae1398ee25879908ac4672a598c576ea5db9f491027173c92121275bcd85e627060ca08aa4e1c57b4f20cad3fbfda6b16c35b90af0eb6b69671574e172d5f51944f2bb45bbe07dc32f780d56a95af0e56aefdfe275bdc87f8ddffedaac78abfa3dff8e3fa7ee3b897aff7eb7990d394bf60c1d0d69b8bff680ed587cbdfcda992e62ec6e399e364ebaab84e10f7d67442e0456fbd1b3eaa5f7d8883e20077f9992d9ffb786699e509a1958f5c857854bfb7fac77d6c71f70fc6ff400bfef34a0b7e0ee747691adbcebc9e5d919b5a98b3995edbc9aebab7a21f272fb9c0204df4ed7f5ee10703b5a0613a6649e8917840687f90bb9655574397bd6abb5a9afb94b324ccdf81480f87d168547933265a75d4bca6e2b10aa93feb8ccbb37c143af542b6c3e2f6fe7a8dc86598a559bbe8bfde8f6ae9c522ba5a7ab1c8af2f3d3f085c2d7ced8651451b4aebcfd2386663014b2afd3c11323a9dd5940140226b905429ebe5865cbc127b045393ea7950699617d017697006f259ee7ed69ddbf253c19025033d70f2f1509f4c0bc7f5a0fa51d6537750ed679fbaa1325d1648b52f8e991c2e59052dd696f7b6c27d57d65ecc7aa9f61fd7ad5d4e067a78757821e5e38da5e867326b727eb9b19c76bdbded616aa02ce8d79b0a2a577e555939585f9ace52123d184671c82141da8a3b543bd59ff73bd5df978ee0e944ae2423fe74cc111ac0e8d24edd612a1ddb9e0f2321533ef32073fc47ab93ff272df331a5218172f0b9bddb712853c08ed37db0985f670ec7e01eea9798fc7acf270812aac847ef0edf60e0e6377a3e59a0863df59b8a3c453477c14a82f05b3d9f2c5148664bf8fad596e0cf55e7d43e2d14bcf86a4b629ec70838869e2f33d5ff18eeadf1fbad91a6cb6ad4dfbdf9a6f18e403275e2704c0756e95a7ad6c5f82b80798650042b9710b5f319c1487f6c670c9929372e6a84953582348ef546e51ff7d0812578403c8952ffb897b130441bd5a6ed4ae1ff653f6712dc24bdb01d4a4acf9696e5e14104d6c8e6bc3002f3ac6fc111c3e854da68c8123328e5b35b576e6dd92b3d5c9356621971ab83c27e49473fc2b44c038bc073b94fc7959daf357abab2d0affebf66422ee77dd6ca37d56a7860c34f75c7a96e077ae5eee8f1aef60959669c8ba61feb5b5aa512cb67f2da4af1652ee59575d5b17d4345c5a252788b678f651bc8b4a3d043291d9f0bedac2430333a043a015b7b3cc2077d66775ad46aecd5a9d56cecd3865349aebb6d7d80941be5bd2fe4355b1d6a355a6d6a759a4e15b190c6d5d93b7f94cbfc7a97fd546d6c5d963fd415fe4a8963d6eb723430e14ae1504c361694a943658952132e9fe6cf523181293c4ef354a5770c54f6b22c8bc13e66e0a67d01fc9cf563a029d82404356a4fb913429f70ce664e8f86a08212992a2a25857d117a9e46a15577e837cb5a8c724d988aa02612c2755138414e99a11f2229ae20f4b857d54c6e36e63a8dd9bb87e09b1c2f799504e9284a06045335c73d7a6af2487194c051fe291dda67c1d980a793247c96c629f78c2ded516ba74eadc66e03279fe233cb8f5128875ec3609b6a348af2cfd8f850ce62f0487f22654e55a732d5a30576707a2a40aaee68d2af6994987aa348aa00749c46897c7a65ab586c7548ff777a7aba24221f8626bd4ccf81afd5d92c1ecbaf75a5d9acd3fc5f55596cb389f4f72c8c26c2ab9b52514e68d64bf50cad530a5626b0fc58c0cc361493bc3a9d7c69aae4ba1ee5254a9037197096a10d8ec0dfafd7cd5edcafdc4ff1f575bd0947807bcffa71d27fd040d6ca975f74b50056b6cc520151ecd20bee08466bdcd53ca116ccc03d2896fd1b362ebfa3f011fa872b7d04ffd1a6eec3d2eb0d3862d0d9c7118c6e102394fbbe3930582ab5b4ab5717c1c04375c51433730259b9db792c9d07e4aaff187994f601eed7bbfca73cbcecf2dcf3331f8e798f161b40c5731de646a1d3155fbfdaa8fd101c2adc4538c59ceaa97285a94c85da2d4c3a370a9d4c75ca9c63acf4d4aaaead3f7ae838d28d92209e84206c70be7ead2e1b420c2aaa769614a336fbe26452520bda6657ba722c94055c3dcfabd62d2f31ec4ba6bf5c6ac3f4978b98f82ea309d8323f8aad1bac63f88b43d84625e445978e5f97d892931589cdf983f5c316860ee6970ce234d04f5d69e2930be191ae79438cf8be2f70630cd2786bcbd67ce1a933ed439f6c6f9387c21da6423e041d30c77a7e8a656c274e3776d3241d43e24baac0204e05f85cc3c079ca7da6617309b534d3bf1e1ebc75c78c0bb0318051d1918063e9aa3dbad7e55b5bdcc640c6c9329b6c5f08426dc7f88b4d0ec57e5077ae53aa71cd5218c0175fbaba3ac87c779807803bbbd46aecef506bbf1c6496a98b1873cd1b5c69c36537b1b9f031ef758be5bd1a2b32b5c8562343598e0c7b9989b24d6eaf5082a9836cfcca67ae1a34c02ef3f583eed33855a7f5858334df04dd6e404b4d78a910dbdea93b94fdcbdfa953596670cde09a014b62b79b6d87ca7ff9cd3626267c42f22376c3f7616bcb160f7d7848ace76c462de25078d458220a4d958ffc3a92e54f8dfa6352270fe543e2114fffef505ef079cee79acf91cf0a3ecbf9cc630e155a3dc5777dae349e97c0c6d693384e83dc5a1a3b7bd4ead4a9b5bb53b2a132f5ea738a968a9f382ace26cd26b5dafbd4dadb2d892d53170796cbc586f1bad0c65eb34aaa22e762d9e562df9b4f2a1532cc60ad66674974999c8b161b451f4a169c2debb7d356abb1a102d456f9245826e78293cd8b3e952c5e9db83a4e919aabf2cc95c8b9e0b8bcfc53bfde4d5797ff7a04d34df3e51fac2eff52e1e3b4d78d71b1076bcb3fc0cf578999583e30064b5fc0e2159c300687b275c6e24b586289b9f8f2174d9619b335ff1397fc4f428d37a1e29a27d4089c1eed2f9df584498ddee06cfa344d6360c99aa8f520f5466283f5cead042fdf7482ee579fc6cbdbc0adca2dd9d78de49a63faaae0d580714d265e68beb6bc4dbbf9edc83dacb6a66f92b512d0dd8ed0a598f2969328cbed154151fe46d21db4b11279dc614b1896dc6103451890679cf4879bc1ef031ddc3f2db98da725a77fefd312fab96adaf23ec385cdbf7eb5b9ff8ea7a34880e3d876515ad0c4991739a9d806672ef96c1ed8cc4d602af505d580c960a838893a3b2f7eff202d97d6bf657069f1a0f84d852eb8619ac0e3c5cd53cf96be81a9b4a2444896044a115c99175c58bcd46770e6a04ebc8ee3b87208891dd3d4c902db663e73d9781ccf9412f4efe439380a4715ceb49dbf80f5c7976f53f9733a4942fd0033474866bf80af5fed17e6792366c1ce97b36060d2603193a0f6cfe9222725a73e5e0c55080b435e42975ebb2ab26348055e2e898ffc7d42cae8095eff5f2b5616567c02c357a7cbcfa04f3ec609e77f0a95fe3b4fe7953f481125037586edaa19c6d302be7f700a6a7e3f6db371b48dad6cff302fb5997d5267002c0bee679126b6d35d93fe5e0f414d63612fa532ff55aac09fd05036945f4028bdd8a78735bfb652b2f52f94600f16df29591603eb32ca4fea90debd728e5c397d8c5d5f3ca7c79873ed25e4ec93e3550818453108a996cb35e55c22c2bcda56d98eb98f7b752bf96bc6859ccb0ab7eb6d53b662065675bf92b22cccb0c8cd2e6663697a8ea6aac4cd6c5c5bd86b5c814b662e2bcc5c2b16b24f8edab8daf5b67e430ec3f9dc33ebe6aa2df8c5c2c3e0d35e6e9a9015abe3686af31bad89a51745ef580f66eaff1e4de4efbede4c1dda45949cc3921b5ef6b04bc65652e01c5ce5c8f5ffae48b9b4f536eb3f82c51ba73f953e7cf1b8e1d51a4ec9d1c3667fbeeaf997fa80765cf4fb5bc594a7b4583acb3560adbcd6e4a2f945a370d99655e1625918e69f4d34e3a9357cf31af4629b744fa324d4afa4d8d27f24b563f27d74504e7ef1a154dca4cbfd46dde4cb4bbca52479896e6e64e49ea7e4a67cc8b3e1d38a4e9b4cebe2f38fe5ebea797644ae8da88832a58a3265ad56bc0abd5cf058f6ba1beeadebaf1d5efe42b4dcf4a5c41bbcd2ec8a495f486ed769ab53fd4dc4bc119ebf1954bc020d5936583b619f6e3ab99fafe418721d2c8e83d710a623af79b6264e4e6f458c5ab23712b448ca2c0b5a5a223792589ca3ab0402bf59f70e258f92c19ab0fcf2e82d686c2970b815d5157e644d9a493d5c5765a508f17b45adc78ab729f13665dd96de6ea74f6627bd1d6147eb6bfc9be494f7c45b94a877cdef95b7b4f9ac092b323f9bc495196b999f558f59ec69e5dccf14fc7330f78e0e413f59e5e0be5fec97f400fc7969fff40e81163792f5f97c0674e9c5684d9c827d084e464f8a7bc8b1cb1cdba1670581832b6649f012af1d7f8ce4505777ec13a087e074f30be66b5b65e232baf614e400aa6eb4c3e25af319ac6fa900c52f038469a0335cee00a4613f9dbd0a6dc2d354ea77ede9f171abd5a60ddaecf57a4ef7ff030000ffffd6efbaa1b57f0000",
+ "7d6ef35a8ff4842bbe533a57cc8101c1": "1f8b08000000000000ffacfd5b771b37d2280cff172d5fda93d84ee69979ae36455116135154482ab667af6ff502bb41125637d001d022e9efcfbf0b7500d0943c663bfb421480c6f950a813aafeff174fd23a65f4c5ffbe7f7de14c674be92efef7ff5eece5ba15e5e3fffef4d34ffff8c74fda54b2684cd5d5d2fd64a528fd4f4a57f2f08f2feee2f57fcbdb98466a4fffbe9bfbffacc55ad63fd94e7bd5c89f76b26ea5753f49d7fc240f5eeacafd9d2accfa8b2cfd47e577a6f3f7d6b4d27a25ddad314e7eb7deb216ce69d14877e6c86196deac8df1ce5bd1420f563bd9c87b6b9e5425ed1973b73efc54ab3504fe81a967157a93afd099e55eeaeed8d4df2dd75ad3bef1c7f66fcdcbad72fe83355d3bf5b2f97b35fc50e985d9ffd804095b4d9bed0f97fd6ec1ca346ff22d5c8a46d6eaeb8f2d6769a5f032ecff4b776fe5467d7fb1fecb69527a27adf2671e1f2b9da99fe49b56f85d384550c569e2776b79127527dfc8bf3a51430559fcbb6577ca79638f508ec23f348bd7c63663a3bd3c7c1f9e79a58f6f947e125609ed7faa94f32769ff90eefb1bbeb5d2fba3535fe5a033664de7a57d53998666bb9ff88320417ba1f419d0eba5d24b59cbd28b752dcf9d41acc55ba19df2cae837db70c8713b1bbd51e79ebd176b58c544001dff0ffa946afc6e2db5a984dbfd545863bedf2465566e64ad3877df86853f6fbf54c2cb8db18df070dfa4e80fadf29d785a0b7bee6c76ba34da5b53d7615f40059d57f5f76ffa170aee8c793cb3cbb5dac8f258d6d2bd294dd30affadf47fc81feaca99e891d2ea0dc265bcb4df94386d082bceafe8d989ffe6d767b0e06fdc25e35d8005d575a7cb417b7e2bfd9df0eae90cb46b276cd843381f638a0defefa5a8b6e7de9ad0e617f7e6dd4f7f0ba9e18bc29e8145fd1f2b9d17d6c30ec6fbb573726c9a46792fab85dcfc60159327a9fd58d4f55a94df3f1a11cc4cceba527939d7c2c90fd2afc4f7a1716c610ec8f8ad7afc315ca6524f01911907acfcee1cd4e11493327b2ded47a5ab3350bf17cb5e99b23b8ba8392dbd3bb63ba9851fdee75872e98f67a0f4a7c59583eb2940f6e188a7fb3e143c2db3957e6c9ab6f3b23aafc3dfbe4c2eadd0dfc796bf41c3d4a23d0b43fdf64df6b7ab5899edf66f4dc08f16fd6182ea4e3cdd2a7dee6dfaacecd9b023106e6351eebe3f395c423867ca6900cbf3ef43452eb43c36eb33e03067d7703b8de1921b72abcd447b25bc38bb8837bfcb1f234302f9380c617db6467fa7f8681dc2a5ff3b5bec5acaeaac6be94552a255fa47c9106fd5762beda5357b27ed426eea1fa4ff97622347badc99eff7e31438fed5497b447ac8d851fda328c24cda2de007df07cf2f32a4c4faffd12ef8c1fe5f1b5bca87b6fa91ebb014fac1c9abf96c70495155801805e023cfd945a71558d99827f9f7eaa8a1e0e06289ee9c9c7d25125d90162f5079e761b6f4e9a775a7ea4ae99fb6b5599f811a9e163b930b996394d38158e84c7c9ff977827e0ea97bd025f5288fdf3f90b133b7526ffdeeecce2877cea5116b3ff3eadb0bab95def2ffefe64f6cad35c2d11f65260e6324b6c2efde78f3c6caad3cb4674b219829ce44309093cf92bf5b118a10de08e7d4569fd9786b4d299d3b7b9a4864529b52d4f227f17d1ce7a4c0e016ec9beaebf0328fdfbf329f95a9bfbf6d9f9569be8f4d3d2be37ea08cff3e283e293374d2d6e7486f7a05be7f0a4f0a7c1f113b293074d06b33b4c0d0edb8fe3ee0ec1728872e7639b885ef6337270586eef36ae818aaa17ba9926fce60e73e2b537eff5a3a293374aee4f7afa69302facdf2c3f032a21b5e66f0d692facd763dbc8c1aba9aa1cc0fcc9b1e0ab2e4d0e37e06b3fcb4c09b6a78236fbac1ed0cddfc72e87ed90cdd2c1b35b4c0d089da0c05be1b3b7ccf873243a1c4662880dc0eedd5f6fbb4d14981a1e7696b9a37b5188c366c87eeab33a88e930243f7d56ee836d90d1ec3f18d188a9ba8a12ba886c204351426283f7cab7f19ba73bf0cbd411f87b6f0f87d96db4981a16bf738f4543c0e056d8f43b7e0e35090530fbdc8eba163a887eebf7ae8d638433076526028ec6886eea566289c6d86eea56628386b86028ec6bd69866ea766e8620f6e410fddb07ae8eed043d74ed76f0653bd7ae87ab7e28d1a5c66e848daa1cbd7fa3783695f3b1482d8a150d00dbd54cf60c99d14180a41dc5008e286ae9dfb6b6881a10be7ec9bf26807f76b28dc7143e1bf1bcaa43b4376795260e8fef08329313f940d76062ffda440fda61d5e667089a1bbca7f1dbaa3fcd7a1989afffa43544cb77d530e2e33f4a0774327ac1bcadfe8befec8e09f8682b8c39bd6c96e309fe338b4c0d7ddf055f9ba7bb31bba305f776ffcf7214bd4bdf00374cfe4f76175946c0dd63bdc58293f9c27c04c1a1a4b7814737601d0460735dd0112c091dd8232d9802297dd6673863429090da76749ab62fdab632babf3d48dfbdac967e9f4a56e2dbd5525288a092bd60364c48df0e54efe7879d25a3c3b7f299cbf1767dc2de949cc1b79f05680b45d9ca1e281a248354ce9f445d9feadd28fe7abea27a1f5e5f7173bea71b0a6f2c6d8bdb067e9a8bea44332d56df7379eeeacce5af36d579d39a93ba39c7fa38d26c1b0f3c2ab92f48fbff1f11fe59773d56f76c6bfa98da8a4fde92cc5ff6f2a16ef64f90853f7f7aab815eb330430ffb58a1f2efde38b1e4affbd9eaf7e54e569b957fe0c1ee0b7dafdb182e20c71df8b4a82b571f2b2f3fe8c3bf245fdae5a9eab6fff53f98542ff68ada93abc989b3308f3f458255601cf930656e3ca9d0c217be6414ff943b33136b4597e2cd0d6dd56e937ce5b291aa5b70830bef575c01df2d34694ded8e347e577ab9d357ba5b7cb9d3a836795d511ee844598d97b6bda70b3bba52ced80cb2f53c8ba92f26c45aba266f5de712dcfd04c7956ec4ad672800a6e2c37e4628f856ec4d9f8572ab41cd0920b98f0b0998022036701ca0c9901283064f45060c8c871ff9cf9e82753a85e88fd80672505ea67ad4c400acf3865090b9d09f728bfcf1b8bb8a0b1f2373748d57b2bfd9fa2ee86e0b7ed0f9c9c1be1ced724dc09b71b567d283170378622433663c83f642f86fc43b622cfebc06180d6e54002a51d0c8bb8cc9009e0324326612907beba705460549d7f4ab8cc90c18840422ecd1982ab44970d6c0228f4cbe310b8f2a0b4ffd7206238accaca0c2be2a41f5a04c682cacce74fc056fa515dff3e40479989e5a1c56035efbb0120692b3d2a2c0f6ce45ad5e728f05219e7bbf5b08916ccda183c6d2bd59ca115d5bf2807f383c280ae457d86b4a6dfd0702e0f147cd0e20cf309f13595a9e4833f43612d6f62d03c2b776f8d3701d93dbf57808c0c6ac63c493bb2e7838deda047b145c027fe54f27cceeabd358d1ab0e6436e888f523c0e7852016b3602bdf861684e25374a4b32c773fe9ec207e8a3edd6caadf0673cc0ea1de41f2807e3fbb162137106c7202f706dec7c7f3e5b9b8a0c9cbbcb1f2e35783c532fadf07218709a217f7720408352430e28141884c9679d1bba6db78388b240c3accc593ce78875c8c6a8af722cdaf67c72860a9d9bdd0f25afe0161c5a08cee90000b4136e3aecc8dc0c2ab1136ec84aa84a6aafcedf19ed5000184630186ae685cee2e3bc28cb00fb2cb909904016054c02f8c1673fca7d51720152aa61e28b932761bd6fcac13e1a2451512ee3442af70247f0fff7fa024cc15dfcefffbdc0b217af2fe4a135d6871676c63cb2cd8d8bd717ce349252c357d1b6f531fc671cefe2f50589ce4248b79dbf787dc171c4ed2f5e5fb48ce05cbcbee01378f1faa214750d15c48cca3d68bc542b88dd75cd5a5a085e091f8ad3bf46b4d08df06da343868bd7175686fed4f02231b4dab9f06f27dc7cafc3ce09252e5e5fac7b89613bc10c78a943a360976bbe09dd834df2b01a8736c0a450a81da4c86166407617b3dd86f4b9c5dc9d2f2f5e5f6ca5bf17d629bdbdaec53674adb9787d51b4a16ed9b4d06ca73b27ab957994dac5e894e631a06c9bdaec43233b61ddaddcf8f913cc87eeea9ab329fd246a55cd8c866153f49a7bdc3969a798263ccdab09d323ac935598cf7b816bdf48ab2a25432feda67cf7af77ef60cbc9c74a1c67ca81d0128aff192a0b6349c10d0d116be51a95bb337bcea2dc9db80ba52a9c9c405ca4fe7ec476c2f738b55db619d66a7b633adc0bd7d67c953ace3d8deee2f50536b0e9c2b75081df29da126178a007908c2786f2a63d8ec11617eccc50d69a06776c8b9b0187399a41e1b8518bb0df8ab09205e4f05f1bcc881ba0309b8d9390316e980e5e8a4fc3a6db5ae942f35829f483fa8099e65c5ab998c5acbf84fdbb76d7b531b805e86ccc04ac7b29550d0b819fbd9942393eaad7c68e8db4a53230712128ab78be60d7e3dc2aade0888109292b511d000f9b38bee540d81a95d17e6cf493b4a1a146e978faaed46683bd0dd9d46603c04b5858061706eabab60db370255b2b4b1120d4477cbd8beba29d8159abe87b086f9475bc6baa54ee46e8aa865108bbc5df50c7a30c9bc9d5aa0cf9bf18e8dec45a981d60026326d7af2d8fcaa56a5ae8460099383da4b771f1fa220b36d26e256e243a0412a60617b5dca9ba8ab1db0841608945ad8483cd28aaea412b3f0a09b0f955f8ee76c6fa9d00d8549bbdb463e1108ede66311d4e7badbeca50039776f907dcbafc194075dccd315345603225309069ad3256d1b1a19ede63da317d0ec1afd29a6b0590dd0bbb95fe9601f2c6d8522ed556e3d6889b2f94702b2ed402c06bc40176c9da791be1af07a49260251cacebe7e998951727a540863c59540424e10b4c29fe6f455501cc31b6521a404099aec44da7cb781104e43bb610cfaa3cb44227082ce83e64006a655b0bd8950d001bd3799ce4463ccaeb5ef7137ca48b8fcade1abd0d29d900704ef2e490209c07b4240c4f3acfbd78cb81771c78cf815f38f0cf98d99b94cd9b98e1576ff23cefb3f02f5938e679d081c4869985f8b2178b400fbf856ddf4ffa686c0533b09507de868b10e1f5832ff16a5e508cd574d28d2ce1d3b5b15c7021b79343cb354c5c295ac9ad4207db305f6d9884368cb20dc373bc63a82b5033d7282ab8d07a69c51e3f040846bcd26b6b9af8396ca44a1cdd547f96226cfa23fe53ee568a96d3f88e5dedcd95da2a4fe99086105fa17d211cef52728eb0b93e4002c03dd9122475d2bf7a8b996147221651e176c3fe306a71800c11d3309cdfc16ac5583f99d70193fa31989f7085cdef5637cb627a575ccf17b3d10a60f04674b5476839e37a5d5b03547ce12bf76107d701ae39d70faddd110c0f57775d970443430539242dfa3d2bc2919af5930024f7d39cf4b33873c7f98623b802f113f67af67c727a5f38b1440b64fd96caa6bd957a219ff86eb857b2947cf863a4510759c598c3a929fa6b50bcb04a9cd63b4279c6fe1744c008368593128639835b1e477fddd5356d40d78b45ec9a0a23e2b495fe6135ee17ea27001210ce56040e155c1895094763b3af622d570074613942d970d6423947486dc26d9174a0faad74575c242f4ed963c44af731d5123b1322e904a74f77f280b7b9da784275a123704723c6530a9ffae46680af708c37f73e2b9a32f26af4729f269ec67943f58e52d6b517d3b91f2f7ec42e3f3b7f005da8553a83c56927f04c7d3c4d6d943e4dc3f5a2f63f9e8ced24f9a523f6f1f9b4d1393b6da951bae543d6d2f96a313d1eace274768b17d7a07861b152cefe59eb55f08d6f33a5fb5f76f1c6df99ce3ac6154bc123e93c828570a5cd129d5730cd970059697405f833a37e8572f70ddc43f7b3bc08e06a0e7fdfe2bf7043a295a588e5220424d26d2d9c4c68b1a8a5aef0948b46e271d5f2e053884e58c06230318428319499d4d0e9dbd5127ec34ff8c31ffabdedc1e439a2743c5c2b6b10a5d05db8e97c67255ca7802b0195d68491ee007e07e0320b93703c66f43257862861c44de5b568548d187344a8e3bcd446543162ea142ec47a6de3c47de8cfa6645acde11d2d3063fc8ef4728c525545a42f913289df37c64e04e0a4c8137a7df185661ec816635caaabdcc9f2719e581205b3277270191319d2f6127a6717e8bc48fb06e8cc7ca3b2b3a1977431c8432b4b2f330641c08b56e681089ffd9f44bb6aec56e7647e97643771ba6cb6e94ede4a6e286b967bb227c845a3f3b269132ccbe6e2c3878bd7171f037dd96708f199c5da69e36eb7c00479e992e13b6aaa3701b92ad269806e1ee385388b277a7b12474696aca6ce3070580ba7ca2ceebf26dcd884e122abc680b437ec1ad7de49ff9b331984e4359a2ee761f302e15a9b3d53e339cde1559345bec6a063be9f3cc8fec223477094914c9df6b60b37a2cc70e125908266edf04a75803584d99f85dfc915fc2ec3ef18c26308cf203c83f03d84ef219c9a5f5c8f89d905780e36538923060240c51082510c239cc4b095aeab7d647ec5cd83db04f3e02706a97096d2868e4382466ae5853dc604dd3531bc6b106e965d9db389a6cb79f1af7ffe1c80f0e27a5cd060dca36a5b205f70e6231dee8d2708881d8a1f76cc600378cfe08d603747afd5e1a305f66b6b65802711a0631cb913b26963fa5aba441bbbd258b9329712d699cedc3224f2c797b746040e70ba602b86be5f27c2fcb4505cb1b85c38bdb58ab15424f242b2adcefc5517e149c633be2380f99871b027c4d515705144ae37e245c6ef80db919281c5d1aaf2f1f218d9930ed90e920670d559417c802a05c3610819ffea84f5320f32068a079a000e2174d9d099437423dc952c5503900ad6eeba360207cd4d4766ef49f982aa2d22d157d08554acbbf5ba96bd5a90e5b3301dccbba5ff914deac2ce111e78739d2fe3ce76c82dc27cbda52d779d7eec3308a48d21e2c2e125531b0dae43526e53c99a38939c01412bc1b39a80375d0eb12071adbf1a9df3681f80dd8f503383ac2734529a088b648bda6c16d0d135626948c2036f5eb94bb9c1a3d01aa702868207c85da9cd465aa94b649db72880d9e0d29362415541ac52563213a995569930e31e6e305155cb6e0df64fb182aac259559195eed277586062e9ee7786086ee6f1820d59c01af6b7394f8caef908d27b719cb25ae0293515d008957a52154a6142d041b5b0144b2fac9f6fe8a2ee7cd94f206e0bdca03d8ede567a9c1944a638d30d986fe4b3b2022e25ae7fc831023664bc936938749c18cff92646599893f8cb396fa5560810b16b572f700d18786174c9400bf6c9cc65f9729006e005813134746f9cef5dcd915d898c01bc1f6036339c3cf12e1d4304bf837f61ef5fc91ae644ea0a4ab9de6ad04c554926180f6d6b9c8fa2b43d7ab35a769b8d021aa66b84565f254961ee00b3f206ffd3c61c45195c82ce97d2efa544566959774e3d21231a19c428cf81f00a8fd692f840a182998b4973cbc788e3e90cf6c578cc0bff0a972b70dae7209de988c798be33bfdd1bbebfbc89578d373463de4c97f338498f52b609ba68d762eeaf08a49463ccb2053f4870546906bdf96d39bfc33e45c8a38cee6f61661e1092c9a9916901fb2bad2083a594123a089d206819e2090185a91e555f3aa0a08a7227f4b62ff6821aff83c3f1f47f27dca8067e70403732e07a05c81a00d9981aa66284a44d081253a18a98ecd572b5dca90d4a3b8b93381c10e678c27f450cf28d92758570003742ad1cb1e4a64d5b23a79e929959401f90e05b1a8b6d009b07469f68dce219731e4fc2438bb0c81b08311bb2cff62f922842b96ba6528b13f23550adf1233ac4c302dc62d167d7e6bccec901813df0d772922e25103a51644ca8a2cfae2a4ef9557d460fb7516cbaba3e65b7943b61479e76f81ee75fc08c09bcd677a3b5ebdf5db07a62edc628fa0cb5adccaccf835e992b427fc4a31c3996b80168839f591fad116e9985d3b616ee86382bc2518dc2f171122eb62adc1f092b13c0557489fb8efbcaefac743b53432320e352bef3b08aa3adc131c1d832c000f1cf012584f46b75809d06b83cff27d9dab1a100ac0406770d8770ff476ac7050849030a103982e3d6b83bb9eda12d69b371ef5cd2e660678c2cc48e8c03dfb4319cd701c82096b514ccc45e79ce15cf573e7770101b900634c7485edcac66b7bf16d740115e8d5693d57436296ee7e3d1edb384623919cfefae96cf3fcc38ede2f54548a67f59018842b68f93c9ef2cc108a7055fbc854d4e6e1f611b101eeb19d528fe9b43472091cbba4321249ee3df51508d7a2b80b392f718c711dca576bb423d1b703190d0aed0e79d6cd879594416537c6cb4eb1a28c36e1e517be492959ceef9c2a13a631c6fa28cfdb0c4c7c5084ba37a33e00a45011bb028423988c7d9298ac8da423dfa300c50bf044cb0c29ba228ac144044c078439b24d42f0ad7d2b7c9ec7ef5b9182d16a3cf804e4809780526cf2f7f9b8c577801dcc9839f56916d193a8e02a3f5e143879a2d02804b239d135b565801ebe14cc8878b8111f227f308aba68d41dcfcbe164ac72b7f7b3a1da2aa6e54554956503299ce54cb175b4fcd18f0aeb0500269acbd559e8248bb76fc85b5639c17ba9466736f65a54897a2acc5d7af497beb563d4a22649db44fa182a8d5e526cb7fce80e0f73b3cae18830f284e5c3275948d96766ceaab7b4643d36b8967e957d29556b59e54350280519be3efa0d011e18d37f7369c7ff5147afe2aacd8c5eb8b9137c4ab9600511eb4c111b134dd5d4aa5b7384c14f263d0b2aa0ab3136be1fca82ca573b2ba3c1247dd792a6979a74cafa455583d27ddcd57c56a311aff3ebdfb007be35296a691799b2749ec88c1117621f1ec72361e44af6c4acc4b5bd91aebb3a630610c5858c4f52f4913c1c4d50e33bb1add4e50fb45ea4aea5249c7437ab82f56f382402238632a71154248ce4c85e3be9bc03c6d2195f04beeefd2e3151036b6d8a2fa25f549eaea322a97d10a122d8b91d3f94a2a3fcf67235307a29a509109307bd26cc56dd595beb3707b5652b6f040187a00081cb03709125ca96ad1e95bf1f538d5ca2b60e45b176154c842dbed4a9606e0557feba70d0d8fca003ee8c97ff98ca3e7f390b5da3b1a25e556f13b1ff6d07a013475dea1477974908a0108b2f22e380c42389b3711cb472a39a68c32255049b559e93bab7b03885392354603aa8f931c9255594ed0349d368dac94f0b24652129c2dc8aa37c97f75a27c74017e8df2966045f52ecc05e8b785ebe104c0417789999265d5324a148873c3d55e1b9be59329d8663c4120f9ffeba4b9b462dc505a40187bd6c9787388aa4aa97459907b06e8cc53ba97d1f75356479b14db649bf29daccc015897eebf97cecbd021c993d44b5dcf13f9ea4829787758b9c9ebb172b384039a279abae209db4acf4b01dcdbd8479342b1856bc0c95010b736076414186b65e9ebe38393d5c8e5cda4ae716bf052f174d95cdc20cfefccd3f19e8e366c98842df5b6e456faab93e549fce9344eda9a472d1a55be30e7a735cf23bed95380b572136121a28feff01f287349bf33156d6a129257bdd54ed04654153bcca3cd59264c337ad23b5d51fe826dbec5f573808ce2075e81b1e8b63b3f3994b2a58bbc149d4394e5f937b7335dcdfd818dcb5774406ee7cbe5f4f2f673c1f75d6be5d3286c64b8ec165220cede4f018623657ed081fa7c24ee0f85398359a7cd473c55773a9a4ab9b026a08c7a19481f41bb33d636015ede491f3011192a57a797f4cafc9cb50557513668a8f6341190d7e9068acf4ca5368a54604756c284c008770c8e10c170c8a1c39543ee926c816b997a8b373bc22550fa1c45a54be808f422f95e0d483602de79366d9d5e87a9b992ad1b9b0eb06ddbe969458bb0a21151342f8988da5d56dd731c4dfd8c980e9c81c63c316a6173500bb1b5824ec4d906e4590adbef6bda1122f2dc2d286989675b8b845e382930202d0f7994701fae086ba473280fb2ecb28fcacdccfa10a3ae3440fe85a9222132607c318384371385d4552a1332300bc9caa7de26e99f8eb4b2cf569b0f80365e6d8ecbf6187b3eada2e6413648d60007db2eca68380d2fd67c7a182879aa9daae4388190c275c84a2b48ef7f27dc8346045856580ac844d23007706492e004be25aabd9270c1c4432bb3fb1e049f77095378b81bdf8cee3e4cae90e4cdbec0db2e2f6d804e38be923ba2383d768ddec8ec84cb717a9cd13c25968cfa5678696e431e9bb597e81be4e4c93e4ac5256e13cd915fcd3c86a268444b6f38227c81d8a2d35ae9ed92395b846b2f73e4dacabf3a65655c68e2188f6aa4dc223d3013c775461428cd34019cad91ce00fa090d019266db40b1bdb07ab4369d8f507a812c01ba6b784c2d29ef09b7ec1c9cee045c2b6e14b6297ca593c0a545e78dedf87c3ca084cdc12c32e13b33eb4fa8bd033cef17c8d12c9de7c6e5b39a27bab6b701905bd13b3a44f7b8ec5a5d3c9f794b41fed4c33d12caf44249ae74dc673234a67cc46122f212c37b70501cfb0a07a346199306d78f1f7a1c17e54c1d1654d4351ee62290554ccff00d80a9695a49648b7cf9d83ad769a53b4d22d437d5a09176adc0a20ad013b293d7c69e320e6ca7f3f508543ad2ba17af2f2e1793d1ef90a8250988b4bf92edca4a38d5f8afa27bb23ab94c76aaae18f1a32f472a994dbfd1e91117f3bc6eb2a3ffc2722a77a55c6b1c8b419664288ca2708312dd8a29b4efe01ac1ac280dcbca65d310990b11f59aeaded55161eb34368cf08d4a270c8612c0d5a595e2f1de287ceba47b3b1b08f703697f9732dbc5dc337bb24051c02beaba77b4809b48112b1ba14ecf99cab7bc937ef1424b6be1641e7770d7554687dcc0ccbc561299fb5a34922eda3ee21ce93d209bb10d2895671376fb0bdfe5d9851f83c818040c32a63d29b9cf66285b4b248b6bd2772630d0696635c5a7519c1d7a8637631c6d9fd8cab606645e935a0710ef2b9331231056ca03dcf884886c3648aa800980941247623bbd3cc25b9b801e2552992eb71b631ee9692aee30661cad33269a43a661c894834f66946680a70f26a44844bb44e19d697bfc921e1342cb7d8f316365d521595496bd0f6d4e7cc9e21d68cb3043e65d0c102fc50115981597f4a94dbce000bf56e619e4501e1474b732322ce903e63f49ccb221375623d71d10b5ebdaecc7611deb5af4cea4fbd617d28a8cd5c060be4846b6fc013fa6eb8f8c81e0c82894d2ac74a67e92b1164059653b456ee875576f145d1a01707c016d519414a10ac10edf8a42476320557f0cc70ec8564a885b8c11f630ddf30cda86cd56354a2be7a3742c16caf8f4312d626404998b441322bad723137b11a2a60b750adb9f7183b632f1dcbde5977a0d9c3be57ce47a677283ec46cc9965c0de604621edc54023c5a918afe1a0cdedb5b2097190fd2ed1243cfb96dacc594b5e967e7c2c6b9222857b65265a3722d53a04d865679d9c3c497b64518437bf2d518a545b29aae352d253bedf96f112b034186f465545f177f4ff3dfdff85feff0a92cf364114544c06a6ddedfc035e5bda45e01a288d113c3bdde3366b33214b484adbaaa01c1e1116dc4e299e2e4ccb24660fb5195524d8a0a945c886f2a27b6b0ec79515ad8ba84cbe027b4d1b23401702930bb9a959d2249fa4f69340f8385a8f7b6207aa938dabfaa40c8259163701eefc9228c3f12348ee62180e889d58f314bef67ae04eb3983d3e163ce1b63d3b8888247c547ec7dcb85a38ffbb367b1debd272ff2731144f083dd230404a3efc8fbc073801550af1072df7b15ea2ecf376a65ec25b28148a9f0ca9ae62b8229d2a5c3dae1c0703754cb537b18b4812426d4b468ab2b471c029d13579fcc09b8a2e076437b1a24ad802a48681141c5cc89b4e97fc6aee5432f86cde0b014a013dd6e74cd84799213ca4cc5164fb90ed41ac0420a13be190650a4faa2985401abe0ad94f28b81374bb1738b7915a1555e4b4d1a71ba87512eb38c447b18d7844133f04984b608e6043746836609e0d258ef3dfe6700dbfc7dfe2ed2973378eb860e9132928c3849a3e69ed7aa511d03d9b579268d34dc9103e40f43e979b0f7c7a864ef7ef09588e6ad9b82db8d8a8aa5464f960d27caf65cea57da98593fe829581949b6be09ee4df623f4cdde78087cb7c2b6a94bdd2c17f59b6f06cae843eaee86200726add6d996df657f8bca467ff6b0e44350a380d7b4b664532ab0763445ad6f47f271ceb8e2d919c2d8ad9fcf2537135f973359fdf2e8b0fb7f3cbd16d71339fff0e9c26a5435767289e064334a038e58fad34501efa10e8de3129138c7bbca9d5b1958c58f52d8ee1154fc6adc6a11656efb927f9021a79e758f14c91a06007e6a887c475001f8d23c573158e675a0c456b9c53eb5a665d5fb0287011856c3c0ae19cb47eb5532e4936ab4c25a5698cfee2666c9d068895a92b92319b028d4d6ca0bab0da61755fbd8a731a3b3672475d92787a6c34c1e794e0e5c1678a2f9492e9bf4c6a499a45d7d157408858b1a5f47b6b360af1c27b63511b0b1fe751336424856a62f51c97772da07b279d83a493eec5b4ac83caa52e82a65feaa47259370171e08e2a17bbcacfe3a9d9a290cf263eace164345e15cbd568351d2f339316a13360933b097c688065ff635419c2ad18309d3a3e074d322ffe0e292024008a2c2061bc7b5ef8c4a51a75509a11766ef9f7bbf9c7bbbceba2c6498000106964b962f5f97e9265b481a2b2398e158d188133853b625390b253518289a6973e45cdaf00ff8ca68730a0d795a7ac6b513e1263290abbf30c5849a65c0555a4f804f0b846f9fc39c04b56ae10c9675e12c881e2be24d61fb34ca16d5aa7da9422bb23aebbba6691774d161850e9176daf88d2a34a4519ba20ab71d60e82909662a1b6c8984dc92ae9589c4a5ab3c124cd051011a0a16eaaa131eb43164cc36fad2c9593796ff2041d2b99c0f34318f62caa80bd28f79d6ffa33ec7bb13043ef686edec54d35b72fc86e1d0c3a93045549514acb7d9c13d79f9c9e3eca8c8f0228a7a0218bab00fef992df4a9ff280a037466b533ea664500cb5a2655a4ad43348476d8f3f61819b0365ca447a2d71efc3c0dff3e19cc52ac33c9c24232ed0eba5b16aab74d624705ab20caca291251528d4c63e839031dec2013be981a5303b4b6fd0729893a4576f0e4a56532ac1c005056d9c9a663d94ce52b756acb1c66b9d1fa1d80756daccca14f9213fb95de1255fa86f918f2a63ad69b9e72e0ac2e1449d3a0d40b2464c8a0ae7adbd8050a4115c3280860e70c781fdc973a6f136226c8372c5b1e613c0f8047ee9a9ded142003a9761272000700fba09c410b145aee49337a67613006998f6e094de22145c00cc460c702fac9615c88298b985739ed99cca3b7879bc33955c80480ce80432231baf82054a122dbdadc4b69004819bb7547a8b441726c215906ee4783e0b56ff70d2f7943f374a5757f359e8c6ab7791bd9e8f49a2c23310ecb15f24ba2d8a578d59636e1499e6292c9e0545712a014204970f0b357a5815ceacbf8cf0df25330fe8ff25914e712b219f1c5844207d7d1799cc4f72c11769b85c682c49ee2033c50d9b0d356cb35412f144da5cd6181f26697a85c73d6029da4bab459d1d8ca29fad0ad4c00b25aed53a523930948f8a840688ee47a6a6b1a58c343554911f241e2c40d1d3ea680fe7c957aa9abd90161b483a2cf02911f3f2e0994bed585b593cca67ec40e0e2dd983aeed14090e6f1a237c3456ed311415b422c3375081290c4d3ec4e288192c9067a2ccf673c9f2bb81a808c02e87fab36b23c96b504fc25c2da4fd050d67400ecef18f9b45267b54f19dc60206f8c2b0028c52416d061380dbd85e22571324ef2c9be28a57a920cf15a2b9f5ecc17972be488f4577fe32db568ddcef8eb1a591f2f7f255a9362f8242dd65e14dfb6a307dc23592a121313e3a034ed31026fa3eb23c36dc738e13283e25c3b49e5e153aa3ecef22b7c46453b239bfb8de97415e7952a8d89f9649e7ec32152eac3dd72743d295e5ca997be9dacd24b59b2f3b41fb58a1a6ac4712db3997729d89afab8410b75a46a1efe319c78f11291708b8022419c14d7e30870f1abc99fd3f1a4584eff3359c2c4d60870122db776f1b5453806af84cb1700d65a00f2b6b6518c1a92f839395f3b8065bfa22f4a638db7caa11bbb294a8d2228274535b48bca6f1ee0f221eeb31ed70a0e146aa1708c58ca57f1ed89f3a6bd27a50d04f5a3b583375c77e2895add21de163b03c494555f8df6a2fe33360f063e74202fad21b10ff697457d5ce485bc386d29ce3b24eb4c8021d89f05488fb4f9d0797ace8517375602cff923394b92c2ea322dd358d86adac0237ef5b4f4c75a562377f32b3e6efea8fc6e9cf19ef22cffa4c297a64a060f428193cac362830804b52cd7bcce6b2a276c95bdf611b6ba91a292f6a49694053bbb521e5f03746b4f41eac8add2616d57981b2b03be8841e461da6ce74fd29280f9e6d8a2b8030d38963b86e0affab43f24e51bf9d2f5b0e100f371c691434cc2c02a1d07e661f1db29e5466b676ad214127e47c63b91973ee7e7a62b2b541d10c75a38b48ac1566b37d634c982edcae0bb43303bdb60b8e99c9fe80a2335da0a820ddb229205772f6351f2090181600a771db588aaea568a2aeb448bb65c9db7aa3df9046997c2491ace4eb82c065f4f87444af854a714b62483c8bb9e991a468449789152424e669463718ec1135eaa386cfe4a3e2ca601d42ea68c2f31b3c08d6c9c0a6c7365857640a8cc84165b56a16f5a1f1f8c6198880b8c94a8e4950ac373eeadf40f2e6017f031f281db56eaaaa7d5366298560afde0e4d57c063a1b65d7c467f827955083f8ed46855bf2c897fd0ea3714897d6ec9db43731b91351f3292562d329aec593dab2d50b27ed682b49a4242b7723dc6edc13a9250804b8e8426eac74d1b06a8a52a6fed4a4f44799245079789d76d356faabf92cdf09fde117a8dcf52a6308e13c200cb6425728dc7961a5f1a6b8376dd2fc9a046c4c4bd3b97bd302523b210227668ee1342d3cf0bbb04bf0f1dc239ddeace768e3314678030bf40644f939151edf822c8c6a24bae3f6749c377857b18093c575c0490b33970b3eab0a4693ad224a104f5395bbac0d2911b79ddbf1fc84cb943b184e04f59b2cc172aeadb94491c6d610c9091c4503699de610f6189262304c6938cb63536197c3b95fa36d0ea9c3e1ee9d748a68e31832e510ea06c39d257d40ae3c5af3a517bfd8fbec2b4dac70bb744068c786feaca26a2c078b7ebf315798c7ad36967b89fdaf2816a6325b4b51d7e183cb0de50215035e1fe0baf9ab93f6b8947564ef483ff2deaa355d2f1d387ce33100c0a21acb5a342d1be2bb24cda8ae6d5304473c938db1c76763a69d3789aa1ccf12fa1979879c44438f529152e80f0665194d861b203e34258b48510ee8d4571236bb1655f5f0052eac9c23d354484234477a17804f66e9717ab4f04ce071015e1342d701f1ed5dfb6116e377bae457f9d98d26f47aa909495eee54003963c254466c97867248168a682d2d0609fcc25e4a98acecbf700e87140dd0832f5a648b12e9286ac2834b6f6b0c81409d7942f8a842560ccd1099297b0452de7d20a3521244efc413215e88f75b25c67851a3e4228b6106b8e772dcf25b298070e63250621cc843340b04f92899613d455d289d874349b09ccc870dea8d76058dd2e33c21fac8007d317c6a8de74ca01c913667231e1152e2a44e3e4d57a0653fb95b4d16f8c0168298f869bac2b48426a433114065e7083d20d3ca404612234ae3e6c3af31b34268090c9cb99e1cd0e200c5a888e3cce1b865ee330ab6c6836a08cb3c5b8ca03eda5dbfe4362a3693b83fb68a9dcd5885a87cbe31b6e1ee70144be178485d2aab33644e1a464e6ce432713d0c8e8db4eab8620a615d46a749267ea3df29f71ef361db18e0fc212c2b7e22d19fa950f41740c9a4bb33fe46a0e907d3f979fe3c21dca63dcc0e0abe628e2ab086982a4bdd037a32337590184860fb2b31ba1eee66f3873bdc611b2b65d4660f1112f85b63d25d3f9e001b06e5a3dfd401f064342c0b8e6b056a2ec2c17237a1ca4745069542ea92d47a42388ce60677051961b98b3621a35d9616f4442a5071536fff450640986b5fe18706ac99467bd80e931a30690a464d6f6ea893fcd983ed88f0177efe138e691445ae769d7515dba5bccadd34a42f15b3bac97eca3605f7523e921d3182b8c49a441586a4e6b6438e466b01c617fdb7ffcf190260c987094c7ad1f32e35928b1a5d7aa803ea9d5ceaa45282747b01fa77787f843c3d566cd45176fdec89b87ade5bfe8e1cd7be0077979e7418328397dea85ca2da46b40639ee2517ac22f02a13d5a3a809d5095ebd28aee72b207621904599acbf27ac7a87df79d44647a61abfc5e7ce00187c073c15c60008f4e26304526ecaee75d45c199fbe215d18835ecf9006158d230202af2cc4a5622391b10cbd638ea1d1891d1fa94bb83b4941b349f2cd5aa239267869cf583e6b33f13d679a56d5328512b2e93dca81d0145fa64ac5638066c95111b401777e6aed5574d4409516e98133075ff1851d13a2039d9422b5e3e392878b7e97a1613c71f4e629a0d76465007d54f58789fd938de1b54d5be9557a3ef0b0b88d4b9ab4a84962c78b45a41ece05a36640e3e39745f49a81f15b265f307a49044e761fbcca28da3c39bd4c165575f9629e7727d16f54f52eabab979c11c6cbbdc2b596999e4eae11448697e2449c4a6911d8c4d72a7cbb7d7c2ecced5c86387539a7a17339a7a773f29e0f4fe724b4cc3b72d369d0251165498410fb3e8f364a618d6b63e3cb704db69f5cd224fd5d1ef7c6562e7e0719d9764df04bcb1aa9ae350676ae86dfa7f0bb875ccd312ce7e1f815f3855f645f011c7bc4fa41e7cfa9b7ffa4c0bb5f4368576ee9158a44793630252a053e31f0df1aff556ab32953afab04a9c7b571d2f9df633bfdf42b15e58c530dca0747e497736ae8b607adf3b0977cc08a1cb948c27f3b05a4f3c5eb8b274cd80313065e4c86850a5772287a083f5fe159be17a042723f0d25ff426f1728ba842b56699a055e20e054d6a4bdcc89990555c481b597c49941a3173b6b1a30b9066fabf1910cbca09797d74b6298ccc882ead68a76c716555d7ce60be492aaab0ff4191ed5c179fb224a92827018dfcd3dd2c61fc7cd04ec1a6ea7ec6c6fa7a1cd30b4cc6609eeb0c287a630d817438d6db1e73408c13c24cf557133b366e762bb26c3ea37ae16310d7770fa82fb96e3b06bc13d75bb13c80376b85de38cefe4e1ca74647a64bb8ee9828a84da93ad4c69c3f49cc653869dabf370f6619faaa68dcdc8dc4e1eb87f8e4cb2e9ae419193896a6188af451565a4026ab5dd794d8a243b15f06f089747416fe596c425b0db35abdeef5c9d824f31b88f19c231e770187e5630869d8417d29a761cbef05823d2e1844f16ea52e489d5e9a8938dd886b903dbc964d8073e63ab914f51778dd2c691fd50989800ad9847828c7ed82eef30c35bfc0731f9845b95722ee81057c23ef2f401e9472c0748909a72c8acff78e0b2084e37f7192ddb5a79e41504b57ea4cf5af157871c14131fbc861923ed4896b8f36aef25f56a0f3e3adea1d0903cc888039bec8a3b81f940a520cbe261761c0a4a510c112db805e8e2bf386e69078f71e0c26167805d5dcf2df87b8c6e176d921842c288787259ba447f05b5312de98be3db1136d1227e0e3f208f469dc4a790f0048f9930a180a705a0a187fefd1cb9f9c3f4e9865f1f4008752c1da7c1234af40d61cba4a7e9d8e40a5f83301be33007e9965f76d69a6d26b99716a8c322fa9be367e6ca742e4d5ac156d1455df759047f9ece1aa7bd3471f0bad2d13365349c176e77fd4707846388cc3b9fc5a6fa343eeed6aa4c79f32864ee278021cc5ecd31ca5567097f7448e3c5dc294ab9f384a5026a9a326731c8db8b4f0ead4959b31864edc5c7cae6c34b311c5d1e9fd4c2798586bfe1e2e5fa637a6ae2248918f554208b41ee5efcd27464cd8b32e771ccce29bc5964e8cf16b328bd9dc4655f8cae8afbc9a2b89a7cb8787d71357fb8bc9d14804bdc8c6eaf31f4c7c368b19a2c30b2fa382f5637d3c5d512e3e4251611fb1dae1dc09e0512377b55a11b01862a166f60fa6c45a5605bd772839a68a05a4779d7c6e38399c63c21da2f60b6cb806f117942445465c59e751c00ce21f43f44fbc0c9794269ac9676c12d5bd8cb4e00320bc2a99aa0a415fb6983cabd5682420c382ed82a4d6d874303dd5afeb158bd85f783a40ee2bc35603db1500eba35d5230b0f885beaa4c06859ab769482c056ccd23698e6bc8c6e1b20748b9bb95115d74770067af855493bee2ccd19f115a01bf704483e9da4dfc9833f4de3bc9f5fc8fb398744423f81303e4cd8222dafd05b7c3f452eb9c8101901ff68fa5dbf94046e728efdb4254a13f214e231b3e729a5e50def33b733fb5bb2bd10606591b998e19e27bad99b5e616fee059bbf2fd0078241321f787f57a9aa4dead806b36cb8eb9b7c1c755efd26ebbb373812cbc6f6db8e1482c0520f50df74a9f1590342148dca62cbb5d9befd993210d9773bfff0f6e709bace9476be81ef3cee46d09984289cdd0821e26a5226eb4968b7f0f5a8122d0b634ad82f4efa8f74c2038909e6bad19c32fc3fdcd7f1745f1b7bebf9a521172af2887992d6aa4aaee4c15f658e0a58e13b3d1190d61f33b36f9c94391f75327f740dc6a14e6aa5237d9a1ceda5f6e50438d105bff5000d5df0d4f1048cdf824c2c14ec46022d2cf5c4dd04a1d9b8521c586834ac4ef9961fd3b6a66623f0a6f6aabd37b1869d88cc49d8d58981c0bbe37da24b971e8c59e9ae092164198eb46a5866c3c6d7b3d4b1695ab27a02f50bfe0064640a9f94ff66319797736495045f8488aa1a6535d6e2eb3165264205f2c65cd796b80b201dc90b6f94ae58bc9995e20230e1576acb0d3f453df9034f12628cac6cca92f0512fd5f96e7d81f6eb031e8baec785032d1164dd5a72c1e5647c4d4ad1fe53af90d84f29faf9d233f822cb9b520379bc64d762a262be1121e73309740dbb97a667ad98e8b81435185d9a5004bfcfd1e6de6174500e14a40f2344fd8f31e54829548feb55443dd84a0fbdbc26bb1150392a5c335a0adfe1634882cef69352ae6779d89e4f7ad58b6492b7e69809d3bd48c32b184b294ed6a99f1995c8d2c4515a9ae991ae16d434b69c707a6073cced439ecc3c69b8a6d9d0a83bea32fb5ee426480a80fc556897d6220e1061753444992aa890a901efc1f07629486a7ef5adcd957d7ff631d0145bc0d7f886467dc248bf99277eff53218398a6943a5c760ed137795a338e8d0aa4731bd0bc1b038694b1fbaf98f0e10410196519b614ef77902f14e8e0e5b35160f2f3a15cf60a17d81f9ab95eab858bfbbc970eb5a451eaaea163a0bb86fd6d682723fd87b8094b20420e62755304159820bca447f914e3f7fd187d886ff611d3790128ad460f11db2c19228e084393bae260ab0eb29e09bb25c6e1b6963106cce88837a3d204c7c2d6bb646dd3a7262e05630401ffe1990de1dfd0f7faa6abeb40421144b2627f1d53b03a97f64f2188bcbe156b592f48dfab319d939f78f6b3ee710638f09f38f09971f0053913c82ed7adc42981f7a38ca7d3c4acd1a30c7c77c49e0f6d50735be9c7203de7723b516f78524338cfc908bfd4de4ace64437743cb63480edf952dbb26b9760ab4453c08406070accf290184ae460a814eac68392b265ca146568a44ea0893c2f2445d10d15e02490143cbd783da206ce3cf19e9977f40831e2d672fb2c7198840e3190928777612c0a3a7157bcd00010c2c65dc0fd2c1768f401385c6c7f012cb4940fd694c3505e3884e26e7dd092d02b375e0cdb2533eae140c806781c7ccf4166cbbcfb0d13e2da2f1c6cf1c6c23fd00bb8e56bcd7ee3b94fa48eb55f42c762950130ceeded0b1e35bda3f619c7b186ec01ac3b0deb1ce6d1f6e35e2f011ffdd846e57dbb4eacbe8fd2f2b9712c3c47ea2ff9fd97497236c9fcf01cf439e66899bc0d2aa35b9ee5850fa06df5f846943e843e42b9f959c5aecf1bd4e96ee7d92965e2b3f165e6e8d3daeac40669b2583667ea72293772dec2a8b3a0f0f2f4833b303bba700f21cbd4addb2b3ad95c207af81bc0819ae8d5d29f229882eb8955e8a80f512f9575277ee89278ff32e6c2f0e1eea4836021c5b5531918afeec3e64296b61f39709b6c004c0a1e88a6d94be1436aaeb36e270d91f70c1931228380a1611792a8e1ca23b03202b0be1125645a7f483348dc477904f2ef9f2bd144ec21cc186bec91f5b3cc5c98d3a0997c202ea72cf5fd48b790008c43c3bb2d7c9fa5805be798f6f9219010de920b50c0892024c2b5cc171e9d9dd415cdb65be21381e557fd3da47e3317071f2680ba9ab3872c2afd513658566e2d2201b81abb10c26707364fbba9687671bdbe59d4257feb8fc783ef2703c2bbf2495c9576fa3cf4012a1015549330eac63e081d0d38e0a500f3c9907de10470ee4db915d3ac6fd94b6937b610e935bc993befe0a024ce8666441428c9890e8d309c83db9602106c5b9c55a6ea5ae32567820e0f8c6e82be8e24b8031d9d8a4f707f2e049710ea0d8cd6a761b6bcdf43b6e593a5de6d81566a3d6cace9bcef78e3dcd38650813fcc27456a6dbee349bf65a28bd8d987116568e304fdade04f113f08f5c2660617ce2c0e708623ec5d067e4a8bad869beae3e721d05f52426c0f6ffc481cf883c7ec27fcc28144abb9fb3f0bff3c8bbfff919e1d627fcf7197bfd09ff7d26fa551cfa971af289d361dac6f1d36c600757e4f92a02124ee88f23a2069133c1140bc0974f31f4b9a74c75828e01be193bf8bcf2b0cccb445f8a03da9f8ee0f1f214bc9f7e3a3925ffcc4ef43b32d89273960122930a61c018fa33e855f948a3f474b531368245bca140d62342f098977a814ef9390cecefc8762ef846c02b0351c671c63766315394dff3c4c2d7cff435b3ffe7887a22c8bd08b31b01681e715d738fea0e5d7327b77c80b21c705f80c9effeb6e1cba13ce967095a073129c04fc418d6aa9c46169d329a4ce4b816d0d1ce3ec999d1c693f3d894ca26c61002f032be670283af7c7a07c7c87f8dce17431722e00101c4c8ff475ad35facd025cb7bc1d35bb5228604532e450ae15245841768519aa03e5f02ee26a6541aa509e779760cf9263d8cf9a63ec610a118cb9cf24423c0a01fc3a48fb4d9750bdc9d44642608998f5bbd4002fd4f3f8f15559aca3ec5779f27654dbb524403e65c0fcc3fdf7af97c631fb895b0fb9e53979a35a61013c07963538001792057c95f6af6530b3bcdc9d2732e704e26ac74314571964cd36826bd05d162a374a693743f5f4e57d33f27c5f4ee7a7a375d7d863dd9ab2d5b0eace4dad811c22d22b289e869418da9f5efd84ae1270e7c6614854e067024a097d13e66407e4939097701f5221f0e137b6868eff298cde37e27c999a5f597c77833a129a5b5d2b2422fda8d3824290eeef42bd520a579c4cb4ecb3dc3472df7375955a9e4da64d5006e10e51580286485905382c29310ba3696fbed32142c658001fa4b73603f34ec804579fecf1fc13d26350c4a8ffca173d2a60ec274e3f888337c6990961647f606d6982789a99891a61a2309fe8a27a16ab1ae23df2626c4316311eec9de8a96c3b5dcf891ae56499e3bd2d525cb739f12d10bccd2db5e3dfc95e3d9bdc8392ecd6196b09e1d464fbae5883500115a79dc067859a08ee82cdf25f068c5ed24dcdfa3bbe96cb49acec150d862554cfe9cdcad9617af2f2050ac3edfc3c37c6fba7217a53d21426671214c2ab306363643428a5606dc36528c8de9620c5f0e63b89622ff845bd74a513d3859112496f9c3c1b486ae6b412a848e601dc21f5155cf1e1e660999da79845a1c23d34aea099889c80bc21a17d2a9af793501cb606b2eadd0153ea374e4cf6abc5c16f78bc9f5f453cc40a9cbe97f26c56c7e375dcd17807bd8f8d48905140118dfa2c2004656c4295d422cf673119b2bb397458d50101981176556c94225452201ca5a814d08c2edc01e0a9bbf8d38231b9e9164da1a71ea7b567684a74eb768b96d1f48d26b6333db354e5a1f9d49c3f308264870419ecd67a79fd58239b95c5b0b70a45d54a6412e175a6a182f97680185f03419cd241552bbceca5b23502732dc5b641f27b3a813c6e25c86c2034bcc45a315e3e5120e29cad64ab01497548eb751ea70799c56f151357dc5a94d240b4479de49f49ad0a208887a2b471f6325a1d898a5d8a4ae9fb718e6acf75e136c7b397631dedbeffc50b7ff4017a8fd1647158ddfd1ec43b0a36b00a0718ae64110814cabcce14a2c098b9da5820269ddf3c2e74038926a53b91f086815b0f1a5b44f2828c87cdbb8ac4da09e490289f443cfce282465da0e2cceebe7e2d42c23bd6d3b49655b641446f9e5cadcf2757c82c3fd2b2a1e44b3dd69ef02b7225702818465cb4e28218a1772bc76621916fb40028b28d6a63aa6f22196670d71ceb901f31679e398924a631c9b47e094ca708d98c2751ed32d945d48a5b0392e025182f84d577bf5bb3c26f9563a0bd004120b01c2b0fd8e8c0de198c9c718bbd8c0d33f4fc28e508c6c7c60a4c719e421406405064931016ae1ac10e95512ed826c38007962326348f44afe495ae49fc0ed96a3d2883026912ba3bee4f73fd271bea507d9f3408a9682947b50ca16c8337f27f7eca28558994c9fd26c4549382f1407fc89e648c15b262afd3c4b88599234a61f2ff26d163fb2f2096fdf58dff394e2e573f1ac1a6ea348fbf23a292e3d4b2abeb5e5f38afb1bda84c3804ad3c89a0b5ba4b75901ae817fff4f34fbb04946bc6d982866cd965f108f753edaed003ebd8f7ce87cd786386d3d531d79cb7338ee48de82d49d6cc76ea58ffb52e51a074fb93e02bb51e04d53443b49a003c51a0171d8cc4ea0cd15650716f97210f8dc3b66eed93903887f7a24b6c4bcbf3636b20abd6c96e8733ff2745d6a1b99ce4030c16c33730df647987b060db8ae790a687526b0d488c36d26df6da40868051905dae4ea6d61c17a232739d94833228b9cbe91ae52f5702e4f27109fdd6ec03e28fc42f8b841ad48642e0247b29201b9561ab73cc30b2bf6e330d7b99215568c20b737b1e393a4c3fbd0d47ba0803fc1ef67aa9377a3cdeeac0027025c2166da46d5354d0d0acd61b7f90c8842e7e0b410b903b39bd378b5012665a82a7c9a6f566cef89a0c7b5b16362af91b69bc7ddf429ca8e17497136ee73e8507e44ffea4465e1d5655427dd09474b084855a616c9af4890b0624c2921806ee421f1da58620e64f01e3d0b05cc256dcf137ce0dfac70cf3808da8a7735bdd0b4db94880848b26b2ff7892842ac17b18f1bf124a757ee546b27aa56811746a67b935e92384415a99d70e8cc90c632ed4bc0c877c2bb5b7a0a528370fe1d5f6a20f9d337a44913698bab2eb3f5ef5aa389744b91d10b59c7ac80cde81963c33c0dc5badb6ca495554e88c0c58948a1575a44118e0ca823c86e18d35e2b5d456538a4e5a885b02356a4aa8ce61f541d977f260eaae9a29a674a8928bb967b3afe462fb8dea888c6b42cc93d290aaa69297aec4771fd0125229dcd2a9380299799a17b860293b54ad85020064ed5ee847b8835f776ccb8c724d472df4f20a5b4be765ccac26d028d9bb15e71181141262e5652b8ebdd86d9eab28e65814ed27ae54ee41ea74a9ac95d30a89965d69b9d075fcf24c38b0ca50034b22e150007e3194e9cf713963b72f692142baba607350868bc08494e133f11b332e921a68c45c32a8924c963d15ea77bfbda9b00acfff90babfe7b032a56f05c199507737bb2b93b1b38d0e92d33b919c915c49e2f1040bc9e2c5190dd41d42e9549e7baa7cfe59381fd8ddacec8310aec5f8e009bf9223a83c814acf17df69afd9e5959086cc5915e64a422595414285bc1260f432273c96bb3bd222f3521395ef4b5d992ba84ee9a09e9a52331ef4d3faebb26db55662bacf2bb4695f181f3f39b40f405cbac34c16f1519010a376ed296061906e0484b3262147a1c1058c72a8979229c62e765c5e4cc5e55b8663bb5dd6108f020179fb724350e64f17ec1e7b64a23995ca6276c10bd453ebfb06b116eae9a7c2f01332829a1cc844d5a048863b0bcfee423d3e1d0e1085be3f3854c3111c645f7d726234921ef8a2620cb6f74d212822db132d7ec0107cf312a5644fa17c6cee6a52182d6603cee89308cb91e679a515fa535390ec971ee19c72f73f5b5e78951f8eae24430fa1cb766a3f422bd106ac4218f29b254283a6f96a868c6c18480417db129be30b937c91e22e4274625c590194091455c2288463e453c760563f52eea62b8a88c91e8fb6863a3890208279ab6567a9b6ca2bb5c59a9a8f3735004043e2430c5551bbd950e9b8e5a9b98065408597f28587f89c92bac36125bd0b9a5f457aae939f1eac581fc3acd844503e0bd550d2ac1443cbe970aa57b29c4bb0877339f94751e41ae449e5290358215eeec38b9ba6b9298adb4cc6bc0898c2d8da3ae812a1fb3ad547e231ddaff56216293288403912f8309051dbd2b54f32ef23d1a72253be1b98e52a6a2440fbfa35655719ac0eca2f291a6a1f7f4fe1bd3d439180febdd1023e9e52a7adb8e775da6bcd2075d61bca71faf94d81acd17072f21d49bcd63a15cc22ce2298a70df5cc517d00950103ce43d4d51e5e2b104c01c2b22ec2b8fe30d91a7d055d12ba4b4e457f1618009ac2887ca4d154beb17a25282dea7a570695c3652d78366756ffef02e220084914514916513cf9230061eca5d67d2462bf63d358a1cb2f2f38c6b63799355f12e07af3c10c93eb7f49f986dd1ecedd376067746bc42c441b98c27513e3a38e2b81556791cce0573454325535da992597ab37e8aee9a9314f7a85a4882db50308b1c4384d69df42d209d4f52a78478d853123e2ee40d6af1991861211f4ee026aae7c6b940a6d86d86bd785006f6a00decc1fa87074320757645e21cc519ab690ea3d0e4a0dc8da837311e5a898a8cbd18442e7b7d2a72fc2932903396909787a4faa4dc0c2e5234bc451816100661e4f128e56f02443f0e9923882972de4a3ab19f7ab1cfbd58ce69efa7f612d2e9db897ad37b041ab61f3e4afe1a96fc2bf7a3276139355b00aa8af0a56085605e9aa4b29b1c0d1ea2ae3bc0ec38db8026b22e3944c6a9b6fc296bbff177b1717ccfbfc6f78678bee1aa095526c40e3479b68406512890688073bb6ebb054491a240b6f7d2c521a1a9a78793e845c63768fbe439b15791832e6ab4564687545a557e6067c1a9c7e8a3891ffd1d64b54c8d1065d7236b2be105cfa356a5c4b140087aafbb669959b7b8cba2164df0d80633aa52de81f58f8220dc3d9b3c1575639cffb833687a0262d1f604939b39d6ee460ecd8b38d221e6758fef030251875bc98bf291de0e69566d9ba37f2bc91e0b6d54365239db60a634ad58b62590891175a7ef261f46a74a41d066b4ef11771bf4e784105b3febf43ba417eee416ba945b9ba06ef428bce915a86b9331127d6758b10d8d86dc83931a1824265c1bcbbebb94264753e28001b444e6d456ab8d2a452438e8abae269041ea6ad9cb13600f11abbdd58201476297f1f16b30659891c0785823ec4bf3f5eef97c95dfb262f2ea6da616f8cbb3597d9f149e591f3340af4b513e56689e6f4dc128afa43801b8cfcf933ea5c3cbf544d81791ed8856879cfcc2fbda5856e013d597ce3dd3a13b41e3e48165441ab6fddcd22283b9beb8336c4071800611cc8c567acb1a760cbb379df5805371cf38213ecd2a92c224637c0842939afffd891e6046dcb0ea5d250ff1fd566ceb2986022e25c9f524b2b3fc47e577f73d5d4d77fa2aac1636b4734fae31732314aa73b142ba784e521751b1bb974c3a56fdc488b4d672e367e689891750c5cae2deb4590c0d6e6409813aa65603028edd0a20deb4f4dc84db094ba8f4f69ab1a6ea995a277bc64eaa9ff070242d42d484a59b322d63a6b8fc6cab82165ea6e6086e7c7aa5b3265262cff0041b0f890b07a62c50e75c69997185b8483ae5ef7b8f967ae7f8d7e70020c09bd9f4ae98dead261f260b8a812f9a2c69f4e92476922184167f8e6e97c8d86a227bd681bdda29a8a939f6e0b5e51b7dcb5778666500811c599870e8a4d1e3bf06ad3281c0c2a07da5c70e55c557aa91cea33173113994450a0227c9e690e4412b1f0047174ad3c31da5432aea5bb3b418fa86d697e0ae0c1b283617f96a54ce117e1f510e00241e5d99654c4dd28bb80636a6236bb63c00b43838220fdf3e6f2b3ed5706c22e041abbf10ec47c7fdbd1221c29424919de334b8702a40f1888c2e6ae59f2330506987033c9d3e1c01d94728f2a988396759226a57c2baadb8bb89434948d93c2690e80d1bc1e14b9a4c3c00213d9308006b33e686dec418321957e9d941e421f799b7e9e2ccc9746ab1c71fe0339894cf7b9fe5011833ecc70e634ca8a6f3facbe976c8deee111ccd2ea1ebf9623682e354c069106c2576a38813df920b23a43e5bb268064f20853d460f09d7681888a6fc327d2ec1f8c0317d1b93e67f9607b6750fd44a84c0108c4f01904283ae6785d9703e58670e10493932b9fd14592464fc803d7a2a7765c55e24c10cbf58eeec93fc99030018a4fe19ffbd05057d1a66c335f113de90a9829fb7941ad71dd5d88a38a191a5173665e469bd8adf136f3064b88a360fa29e1880346d4cfb12c6ca578f3924d233dd309d43243ae9e7c46ca502f1e42d29e3d6e9c5719424a1a2cb4d52da2ee08d90e49761fc7e81a4df19a73231747bb1c4ab8c49e9a959e47b1162b4539e35c8e36b7bc7de1de375f9d4d323e81a1df361f4264a32a05c1c3d593a352fa424bdeb302711dda7d9881f219a9576e49f97b432d2bb296604b3b3123aefcacba6875326fd5c01ac80e51f8bd53bdab0b826a8e51e28fb0c6e301a739ca9aa4a0cc238af239a4c52918f8624e232e261b993d4c8485723efc90421a430fe821b3bbe21cc8cf5e0d24f7562f1467debb06fdfb11ace270e7c26460a3f54e32e005304ec1ce7dd80221169f2c912325ccb33714866048e756432a10a746636098ece54a797ba0e153fc17373667f29a626263eecf686d4879bd4601b9f4566edb00976b2a1b4652d6ad63e4e8d520ab9cdee7ca0ffc94a41ca94bb91d80937a64221987f52c9466f89c237662bd4bec7d1de285ddd85fd460f4f000f5899253bcf02d64d342383c7223e5fd115db51e3e2b275aa6673b5d11a6de4ee82f5879ef5098ee428f5a7f4ac2a4bfd1c53f11a7bfeb60a4f9c703d76ecc991be7aaef9b1cb1887c0bbe33e35708662773719ad53fd0c57c25b604a41d841780386edd617af2f26f7cbe9edfc8ef1f2a80e0fb1e4c304a2a30df7bedd89dfd12007fcf7a2fb1d6c1f77c2ca6a26b65af9ae8ad5b84095ad84deb28d1c5963b9e6f7980505b1ae36adbce2c74c9bf45e692fd78fca2fbe618caa315fbff5c97cb38cfbd617f9e4338b670c149c2d33f342997505becc30650ccf16281d9f9fb8f89ae1530c7d3e3db599664e4a8ca0b6480f35e3d581a0223fede53ed61f4b96bbdc1619ab8dda52c64717f91e8308c16841ced3774a6f93c41aa2895a4ffc844d4f7a1913298e8f013e842391592a67f8855fef0133d5ccdb4da66973d588d14bc6d0928efdb4f7caed44019f2994a41983d743ca710ff14b762e107a7513bb814f9a5266c4f2401643251e4985a8dc8429ba1468f8a3457cac40d7f2e12c98cef75c7bdfcdaf26c5e4ee4fd61fcb8dc7238b761efd209daabf18cdba379c035f70b0229a95c43027f5274e27ed3c8a6979f0c4e2046b79815000fb47e44968272ab3cf121ad918f555728a23f39d043032552474c792e2e02a1cb0bc7058c03ad5eff2c85e31d213d57e22d319238746ae40f1bead73352c74ccfc515856187dde9567293cea9733c07582a65a14bac3882e0820841e75e47c43dc503a30001ed0a1f8893bad50f42abd9f05cf04bfbe902f547caf2467f99f17b2fcc21fff8d32e4cdfb1732fd0a9b307ae379fb96f2fef242de7f5ebcbeb83979fc8ea5de53a9977a1abab6a017b798fb57cafdcf1772ff0beccdd459eeffa1dc2f0d318cec921ffa62761eecbf5ec80ed63597f1c1307a3be711ff3b73ae66716de06d183ea17253cdf6d5db3ac05d7ea6242af2a3c6b9df65e1302fd7525684a1740ed56d33a405bd34b093cd401e893dbaaf4350b0325121c61d1b8e518ebd96f623b8734487989c76957c63da07a2f09a0c76eec0c12b48268e357b6a8e89e93da2ac567cd05d7eea016b769daccc24738c11f3c6575819ee583a475cdb3bf1b416f6d22253bf08389d689d8cafd566a3c587e9dd92d0bddea76da67e92dbd54323f89037e935ebc8c2c8efbfec23316740566e4d5d3fab3acb0b479ce2e81ecb5bb5dd4acbeef1f87561ca43c41b5000e31d60bc194bc69ff8dfb22895026b6d0c2d71a6b2917102ef3e7c9089fefae0d3ca6cb7e4322706f10be0bfaa7c849d9a7d0d1763cd0e6eb0a1794a22d7d0a907d822abc1ea93fef0a2e66d1386bd141b19fdfaa1afe64e3ff7e65c448f76a9feccebf197ce79b539c64f643f06149dc6b5ec275c4932751a533e489f476f84cba34bf87acbd1f8a876cc7a995be9a33b15156e1966d581293fb0077f279ed27478b18ebe1cc513de4a88916553acf312dbdc1c60fe0c1367695a65977dc94e0f7bf649972d6c21703b4ee1387bc851cc04e72bab9e94a8c923aa470f5d46ff2e8f57f8e6d99b6bcd3e6c3623fc77c93ad70bb971ecf1762137a6ec1ce6f5629d8614a6379183813e4345687e0eeb9283ce9ec34e7c4a297a7971e871eaa049ee0df988d4cf1ab0ebcc072199925e327c83f196328f837a30fbc711ad473b9fe4a124a90d178561e4aa942979b518dd2da7f81cfde1fe7ebe408774b24135b293535f0af27a8623232d7d26272ae55ae1cb1dc709e49c5672abf4634e30c39e3b4d2c9ea7bec717a95e825734780f9cb842c5b3ac7bb96e45f9789f9ce9b7e42e35bbc3ae2458e9550ed5d36f1558575f2b4fcef2d0d628bdf66e44db3bb91c8f079713f0dc72ec86ec5eb7d9a99d518c51acd03039db0dbd8b7e77a72ef49010d410bd0f97f93dcb665d680a2fd7bdb09a349c6cb4eab409e49f5b19f230ec04b9390933b1320bf6b2e5cda3d46e6572784f490bb945f1f6fd6875532c261f269fee136be54ad6aa51c430c8c2e49d13d4ded0bd7e83fe4981d476e13273c437226d6d2b5b093c73dcf182d68b1000ac8f5df5632ce219e877f761318d78d33dbb438b9f88c8189b0ab5a4f1c38b85e18c6f094bf86d097c04f4258c905c00372cae104afe811d90cf068cdb455766d964139b27c6b1ee2ca1283e4e2eef47e3df8bc9a7d5647137ba2d66f3ab87db4951fc0c40bb3155c72fe59d8723398b4945411bbfb07846b222008f753f17bd8264ef20fc129c9c8c582deac21ae38b99591f0a140a7e71ef8a268f624c34150680bc6ddbfa78254b638597d5555e6f6824fae75b92ff032df7d1bfe1519745f8219f62616a391bbb4b20bf6ce4672c3ae926cb43b9ff31edba75687c0ddcaae4a62c263fcfc48d59b1cfdd041e9b44f12e5b8ba603b3a224b499ba09e819d165db124e7992eca543975dd2010db5b1a619d30ea5e4f7c0f825dc1f49c10727e38dee8ecdda907dc37227ab6574e31a930050a5443ab498b1977492d1763aab0a29c83fc8af5665d1371cbbda8a0cca5a0afdd0860b7315b5f195e6628db08fc841ecf4496b3a155923768a40ec096db6246f6f6061a1ae738fe76d801b3d27ad9432d7656ee562ad344b27f6e84ca852c8e584273504ed714a67a28ddc1e0cb7756741dbb489111743a4a32be563258eee5e5827d947a4eb361b85a293b0d6818e0c641e98aafb57f8092b1fe8c47721f26bf8098b1e68d9b73f8758a038ff0db1f00952c20f58be63edac3091a02202bd218128eac9095d891a6d8681155cb5559ec2ef20e25ea867d6a5670b146419af331bffc267aa32bab60297affd9980fbb7e6df3a4e5eccbd043f92000353dace58dfff501bbd9da5eaf16058df4f6aad29a5738b6c60b1ce3bd328b23d931aff20b5ca92003d35518a5bbc90a978b1b652d45257c262965e2c1bd195492c46772f3286a3bbee087d7b92762dea931985d270d11854f9eca79aced387b01927b0e1432c6c965f7e86fb9f896ba936b20e54e056d6a3b6ad554012626bd15bcd52e92d198b73ad2cf9a6eeef972c131744875fd127a3b5b2f41fac681a010698c6c8590c1910cbcdab9cd917d62a0db603f08b49c0f6075e0e4ddf9de974e2d48618b81ad415d2c3e8d88c7c2c629e91a35cb467c05b70ef6da2281f19df43a54946f62086981e046f923958c4f158c3d0037eb6e97499314796d2f710c0a521043e228c32e0a7a12b689331624ac226c3bcc6ef62d8a1b33a61230bdaf85dfe4c4d908b6dbf63988d88f0c86e3b7e188ab7db3db91257bd6fce77eb6b51c3da6dac949303db80d2a6e2a7aee1032223c0eada6c48f01f8301897d5064be20341f0a56ec7f2f243d68543008b53e785553f024a73a8da689b0651cb6709e9c2a79c3aef2c97b3ea15df499ecdca08ebea8eb8062afe83164fc965e3d02832440c59067bc93e5a3b4effefb6764db91fb5c0844b62b34f42ea6236674054a195be9a72e3ec5753b01b31ca669e49cda46decfa33c5e26df14a3edd6ca2d751979e7e0ab12ddf6d7b5d95f672f6b4ee253dd769e71ed14198179db5ed23ddeb5bd34e29a2d4405d21718fc1a44deb182542c5e2cde2aa417f0c94216ac25bf60a617eacccc994d66f362b91aada6e365dae1d1dcb25725324267e8327807501718a6a14bd061e03a20c33e321d94c3c217e8743b31066251d6fdd9f926e004f92740c9d92043e2a386351eb3d70ae07130e316abde09c79572bf381e32f25a847032f05b770d40284bfcdcf09526bfe9903540180bdb700a495c57e21a73c78b8da812ebb217b9168094823fdacbce7b048d3b83b239e3e4a9d9e1b0ac20d9aad1eda9d1501679048d72ac1f44fc3afa2628f7957a82a6ab91bb09b8d08d1484bc09112a0d90059736baf5961a90d16b63cbf46c9112c99b33931794bac45d22914994b4db613dc34421d8edac04a67c4e1e066af2b78bd717bf0321e5d0557f51a0fb46a011f68875cec366bf787df1071ed0b8c71617af2f1e22210b700aa44417af2ffe84d37df1fae253666e2ed41f7a9277a2f8963776769b105fd86471f2351d6817d65a2e32b7d2c4d72a9c171e385585950ef92be1282410d13989cefe303c6d5a7821f1448c254cbd92eb2eba93e91c991bc8cbd1d1ec9c0405637cdeee68c099c7fb65e75aa95dd228437560e00d17cbc978315981166ba09597c5d5bcb89baf8a87e5a4982f8acff387e2e3f4f6b6b89c14d7d30570b770454932464c2b683cff701952933590d4853cd39c567aeac2058ee62fa40df09a4c14c29bfb68040078757cadb43be164b5009369369afe73702ca22d359bdb045460c735fc3c0a40ba81b002a66c3864a09e1c7efe025bbde819185843898c8bea7aa0cc7c0037b5f0501a4e16f82762365e4e67c5c46966d843b97b525254462fbda197dccadd07aacd9111974b304921a25d3f980c144acf2d5b0b39f9e02e8f34e42b323bec2531652702005238a1e1e726fc4cc3cf6fe1e77701b013386cc0de0ea730fcdc879f3f04dc4cc0de87db279cc3f0f3114e1c8e3eec5a5e568c2df9606f54943e05201f11e6cfa1e47fc20f9810000fe26b78c3127e24786b0e3fbbf0a3c2cf97f0f3089ec6c34f137ef41a103074882e5bef2e8d0944b543a6131a16a4e67b717695db74ce3fb85c8ae544a059beb257fc50b70f3fe06fec29fcfc05aea6c34fbb3e31690f322d70351dd02f6af8b88e4f535656105ec31e9cc94e0b7c209b7321fbd7350bcd617f8cf2d73d31b5408eb5e5334f561a5386cb756e3319cc7a82b24ff8b90e3f1fd691019fc47cd39078137e7e5b47ee3d1a70616e484cf91d3a1680a9359dab8f60655d47a3fdb7e1f32cfcdcada36925365574a8957e24c1c43c7cbe0f3f7f849f45f85942e1e5a80506e641960fda890d70aaea8cded0bc9cc8b35459f3ab35d1d92c2808abc2d3fe103efeb9ce154810c38a51e5a57da664f2dc9b2096fa186afa147e3e879fff849f5738bd616b83b35470320b4e696be013e2e50ad01d39d2e0ed9e942aaa65f411bd3b56969011c0b2022e404f2543f44bf8792cc1077f281f7e80060271711b7efe021b1e5036fcf8f0d3c113a8f0f3b564054f59cd9195dd829524a25000062f8fcecbe6ba1640218fca64061778a49721611c7e26e1e7ba444e1fa8e617b6d3c06f495e216948b941d829fad9fc104adec08bb4f0f35bf8f9bd579b2b7732904bf9edcadfee8c6d449d35741b8ace4aa6aa034a1c30a30797edf8bbf0795e66f2987889dd97f8c0c0c24b24603cfc01acd812f40cc2260b3f0f256b1d6d10b044bb46f716660f750ba5ef6ca43f3e96c99e22a0959f4ad6cf617b9e7f96fc48cae0f9457f8b511fa2c55b23d6b34336011a4677313f33505513f083a625c960e7b05b9fa12320ffad88f3d33ad9e5a2ffffa0b35fd5ae8db015a908bdc2fe7aa1d0f230b3256415afcc7585781cf168cbc4ae2dc39709ec4678e789a25e52087e085de4e74e24a8bc0274f9233c9f9949dd2179e46019c8d6f0cc7cbdb74ac34e4092f5ed3fc3cfff849f7f859f7f5fbcbe7817a2ef035ef7fe7df809f8f2fb5fc34fc8fc1ebe86ccef43e65fc2875fa016e49d00f3e4ed5b6038829acb5b6c031bc156a099b7c0a17c0bca276fdf41d97750f617280b15bf7bf70b788602bc1f845c6819897dcc6d493e3c23511083845d857ee741adef0bcc3168bd879f06001dba78b452ea4f3104e6e2c5165499c37f788908b48923767a5a709f2d7e43afd03e65617062420ed19d430e9c47dd4e15ce5f4a54b5ff44ff4321bfc70d4bb083204cc08b54834c8c96dd11a2b6095c977f01330a76d52a695322169f12804be5706ea4aca306698a7deec55809f53f1ca0e7001ec414f02e032a0b3fc7f0f315560ac01ddca6e1e7aa8a27ae4af2e42866ce40d1a44a060bf2f4eb2a87600f4e5a5012577a9b65fa1032dd849fdfe0e24d13426009504ce2c6dcc2e336501a093f736021849f3fa0c700c04268197e0e217a0450d6bbfea67cfd31dd83dc05b0c635ef7ceea40ed296e409314b6275d6b5395cd7c83fc310d3d46b7398db4a6951730a52e9d13118c4607b62f90d16de53101f1402a32744976ca23c44f8e133451973de5a55d1239a105c405d1442693b4596add0598ceefd101d3327214552498c67852981ca6f8c4e4e7dc06c438d10d9d8ff8fba3f6b4adfe9fe46e1f7f2d47d66aa101191e7acbb13628c111011b16ad75588c83cc80caf7ed75a9fd549837e87dfef7fddfbdefb24904ecfc3ea35afc5405c8c74de333726f31d251d2dfff138170728934935b565fb9ccce71fd92b2194eedb723e6603192bcace52e6a993264e4a08e399885300249dd76357b449c37d61c4871eaf0c797ab3cd505cbac2d53b5b7b4fdf81b94cfbb80bfae0297396367d79a307db637678fff0f500ccc746064e119e4f4a22f42e623ded0c48758157a6ba72fd5e96187c0cad89a044b910675215512f9943c767b09eb29c85debe1835ef39410fb34e300cde40e8c0b2033a458ceaf7d8fb14010966e6320b886932a6c37aac2b48879947d1834a1f738b05f244f4b8a747dce3ebd0b1505948b895a9759f280a265982dd634e52cad949e8f1488f2a3d6acc24a0471d043a1d7fc6f5a6b8ce179dd54af8fe6bbe799bf4f58511177abcd2a34d8f377ab0355787b55e3f59f55950834cb5e5e39391dd541dc0a67f52529f1e037a8c3ee13488c7cb795ccd9df1a70df86895fff8e5e1342e43701addc17e9d7ea6da59e93699731a3dbe38b0e3674af1d0c099a9428f2d3d76f4d867399c194f13022121ba83f932d3896af432a3167c4b6dac58c34972f2ffcc9b197bb677487cda42e9784ed3c1d03a4d43a3a7693adb4ba71f140d4bd3c3d0c3a74700261d33d819b79d7526891027cdd9b4b31af710bb2d63cbfe2277f253de0a551fd2e38e1e113dee7fd3247b533caf24a6020ff448e8f1f8e95ea5c07e1d32a17af2190a02ed618ff1a6dac937095d5eeb40ee523ff938e3adf3749296e99adb4bdbfa996d9ce48ba6d3dec7b0b3ee3977fb33e568d2e3e524efc37ce7e46a9dd6f33171ab78a58f6d7abc7db28d26ed3416ded3e383396b0c3f996a641f57f418314c664b0e76cecb3ac76c56c2da0a1cfa9d79790cf6d89d2f22a90e271fc17e3104822044c3b69f06d070f5574f33ed98c7d14fe5131258f84029c7be086a2c9ecb95a5208c28f9f405ed08b27592e55b22674d99a894257d39a9e524cbb744c5c61c2e63332512179dc364cef40f5d56690943dffccc07b255ec0828a9428f901e77f488e8714f8f981e0ff448e8f1488f2acb3f991ea5479d1e4ff478a647931e2ff468d1e3951eed3eb8d24b364fe27d4129ff8b45028c92b1134bb6d666591f9b82b1e91107fc60c2821e6376f93670ae2a8748e8f485c73563d12a4744a2c7d7c0e16358c55f22843b138b862d07ee1660e108bba5a0d962e9223df6f438b083497a287ae801c33b9a3d7adcd123a2c73d3d623603a647428fc7819590dacd50a5941a3dead6db95f0a03f328eba65039c6548e5219d7e6f99e5e657fbed69c0f41bad0de3490338a5a00978a1ff2d7abcd2a34d8f377afc2ff6023664a51bb138c84e1073f7b3696229c1676fb9ccec3e372b47ebf4044e8973f321eb2ff076a7051e328ec36c10bb36234a1b0f1925655b42f6b3446bca99e9f1c55d1b32fb89e9396a69c8b6eb8ca96695667dbfa3d47b7ac4f4d86374ebe54180c1813bf5031ba7b39d0f3f9e07c39523643d526635846cbcd31def3ad09610fe03fd6420491204add254ca0c599396b6063d1e61456e75acab43c66c3aa289501bf20dcc6c08b619a3b51c7ebf9c1ab3ce6235988bc564bacb5eb8367ad4e9f14a8f363ddee8f1bf868ee07abe7695783b23963eac12316d72ac9c687bd0d72e3d3ee8d1a3c7273dfaf418d06338b208e08c45351f4636f2e8e483d5b4e8d3634c9f26f49872f3f4d8d3e3408f233d143d343d7c7a04f4a8d023a4c71d3d227adc8f84d134dfac135a9d98121ee891d0e3911ed59185c3b45e29d3a9364a6d5ab191249d72d6864cea2381f6753c9bef6692cfdeb43686eeb79bc97e702e4c9b24a8579dda7ea247831ecff468d2e3851e2df46c365c0d7a1fadf972ecbc7e6b8cba0bf1db47dae357aaa03d624ec1ea900c535ff1c94ad2fcdea473e0b737cec6aad42c09a713257a2f1f6c0dc0ad8f53c99ec063963d0cc7760acf7bc0718e2d59edbf5b6cb3f7114c2432afa0a8d647db88db7238b4ab4c65c05a1f39fe7c44f02a856d74495709f1c9fa94eb7c7c38f98031fb0c27bbd42d5696a7c6034aabf03d30661937a5d1a3c2c08465f30cb738c83007f3a6c70b8bf74ec0c9fc7dd55b6e5381ef62ec00ab2c22fe179b4db256232b217115ecf08c1ebb6eaa4c3feb4ce8dc522203a6311412dc5056074a53f4d0e849eaad040a061d4a35d922d6e64b442970305082f88dcdfb7ad9eb45b3f5dc0513525f2add56d60023c37d7f51ed3b4b6e0539026365b31a340e2c3048a5ae9fc3d94765f8de5beac3dd7ce51a9abe6fd88321d8764b91ded63add71a76f055ec3958f78671f999dd98a6b835ec37c3a1daef95d66f124ad994e9575927e379f8fedf56ad35273d3deda8aba330b0d2b2048c171f75c700d948846e90e4f1f6c2fcfbfac38d8dbe7b287704552ff0f291810bb24e36f59a73202c136e2f3261f3371be5a75faac9630eb9d2c171b6933abe3094359f496ecbe07ab010ae79bed3acdf895fce67982a76801d131d649fab69a670e131667844bda89ddb2b3f849d842806138dbf4827dafbb39473e161da2d27ffa625df79953109c7eaf2de79fc38975e76a0768c7061f00e6e7814fe7c75f7c99ffaac4ea171f1aeb65af331dcefa69f81816fd612db0b8045a97d66644fc08447e9690ee8ef57cf15339facd827cb0b8280b3220ce82e040537cab382eadec2b3873e8a97c4adf333b6a2be0161b0cea90df5977cefab3745e791cdd49afb38c32376092c149e139f9a1aa95c4cc45ae596f7752cb74beed4cec1db05e83dfb4616edb7c96cddb7ffa50d0772229d17826d603cf62d923b89ec567e182ae013bdf4e76d0564c04817766feffd4eb4cdca598a67eccd2b9b63d9a0eed2dcfde55a7bdcca9be0578d3cede6a588aef02762273e24600aeded08107377008e10ec9dc1a11a73b49747aecbaa65c9b699ad551dc67d71fe2d086a398bc81672c3f1269daf9c0be04ac6b306acf0964c34af0cb0e4be0381a92780a3871fd249e9f5c775192846c7630763e0ac2c86694851193a4b37f480d81e853ad3373a324ec1cf7a94a62f34ab9f4ef7096554125e033563e49b5566f80774f67e6bed267c71f6f675f83831ca689a8de0f675a66bd9df3b638eb2ce37284e70bb7fe3fd68b48962b5d1835cb1815ce11976cdf0bb22a55aa6adbe875113aab375dac0f8e56c4c97b6bb81e3c49cc566eb805cb378b56ae0643a0805259bfb76e20e9b435e65e1e9c5845cc4f830234fece90c49a2b6e31f73f6b69f31149dff401fa0ffc02bb4231063f3194b7ffa3955a2e452fdbfe7d1fc9e7f5c0c957658a89f3e1ef70d5e84c7b4e8e16ac3e6d2ee7f57dd49ceddcafee6b67b59a77e138165ce521046fea290cfea39e9e549bc3e742e792b99f7ce253bda8652f5a11826120e8ffdcccba56859c3ea5264b50e6af9e3b0a18aeaa3bdca9535b7977beecddaf04f8516a63d985103c0afe537baa3e5759f76b0537f3ab8155d1a7ffa9863ebd40419ffe41ab9efe35ecbe483a0b696225eaf8eae3c3794391e670b6beb55070da593ccfedcbaab7765ed878c88e1b6f2f70e14bb0e3b0eea51aeaf49272c6dfad663ce2b10a7c9fbf8f2c56387f1f65baede3e1426679fe3e4a15fddf4736713d907f621c9ad548e720351963e999c4ab1cf70e2bb133109b3279e34c694096d57af36ec78a850cdd1a97bd956b56c0ae35c51185840d9c0d7a4bf11038948dce0606a97d40aad52f0385b392157cb42d3b6ba6dfd6a9d6ff3394773e973d42a0bb564f9c8d1ead76e27a2e61bad063990a3b59dbde12edaf1d5710b423c465d887fca5fc599c97cee2e47db19c4f87abde491a6d20f77dd7eb8c93b3723c86d42ca2eb7ee2893fd1e16785fff384289b954eb7bb6193edf46300976df4b7325fe280818cd2dfbe9e7cc2fbe7723eb53a2b3cfb9038f63add81ec0e2a9b39d976de1cfd43587824c2b4e113b7ee0ed263cdd961e06598169756a64eaed9dcb836d8a69ad4d453f09f9a7a7a8ed4c37f2a0f2a14adfd6fd50c3aab68961d858c8b6b2ce05b32e99546dc0e581f9bb002b66e9c8b6f91f76ced513e4368970e6b98d55c7107f109989fae274c0971c29c6f94f54e3a3a60875102d39c693e9b51fb2ac6eb291b8cc6d1e87cf6c4e2a0b2994c9ca4530bf92bd6933d1e985e9bc2d847de87ab54dffaff82cb4d3624fbffffff56151506ca0b94aa1aafae5493fed6bdc41b6a7357d05e5b85d3c04fbf8793c06b29d5f33a2a98692f522a325ea06e42453f85f0de6b28d5305ea4cc835755aa5aa1a29dd04b944abc58a9c4782dd55818c9478d192f54e69d732bafa3d4501b7a99fade542b9537fc56355e53a9a62d172b153f78a10a1701a7245453e391523e287b5f538bcfca0b95baf2bd395714fca6a2a12ef89c54a59ada35ead38886af863ccc179aa3f095b3d4b9b127caf241cdecb437d49c2554aa1ffc456be116dd6ef0c43e534d6fee0434a9dab1ef8db9a6a7dfd534434d2daa89d742c5063d8b94ea72c20b3f134a7da1d498d733a247c84b1ff12a4511d5d4a4ff26afb94c147043f79cd5979450a94879910af65a3a96ce4c48595a5c34e45ecc9065a29d218cb5d753aa37d05c7737cd1cceb002014fca5d56c927779a37db2397a1d5368fdce916e70e29dd7cc4f43fa069411e153c7a916a8fa8f5a72872f27b5d653e7840c12735daea6b7e1968afa9c2cfae9bb593668df88470cf82d06ba8f0f53e1b3b37deda733dd58396ad9d6ef0adddc6212d70f117d9549d1e49e0256aa34741764afa9a3e474b1aca5d473637f5c3788932155ffe476aa18d6794b9e3e6c654bf996843db6aaca91ff4d2765f9a4a4d39db4c1bafeb96697daf20c64bcffd427b3f7b8bdd97be765b6ab855347ea82252f5cfcf74245ffa9dc7dfe3d9196880899073264a7d60fc432d55196516194452f599cee6cdec358f5175b73c537193f7d1350ec623b78f8a9a256ee7e8d3f4b5a99d07e5c52aa87df1f2740d43b22576cb8af2d2266d2b73d40f5c19f7b9450070a03b9c32d05e5d9947ecb0e4c5eb29f3c860362128abcce323bfdcd169378f7c849257aaf2910f75f24cd3681e1956244f0414cd0383a0e48116af1367ffdb74c81b05ea6a2dc2040407dad2a6c2bdeb1088323d9aa5bde6f393bc517f763c7165dde6a44f5aecce44d3cef70fb4146aa29ff85383767d83e660a6f73c47d5834f2d7fe963fa4a8b56a4a9898ad8f473eac95d6da19d156bd14093250083fb25c4aa73577aafd45f59d609678a6af46c7ed14eab335ca9e138bcd16652051cac7ab6f62ae21d1816b4bb2354d8cc366e38312f747df9b505ed085f25bcca0183ab27dab1cfe729042968bb4c091e46ef5ea4ee54b6f9a21226e3d6a7d3f98a6dc6f31de40c3648a0828fca391c9e6277ce7cda3f4b2da096b6ead067a806187cf439ed8a7f129cfd912fb9a936ce6d26987d2f50d127fe856aee33348d789b4df59a615cb20a7832a6d46230f033b003581e1967197082c21dff24f47dc8c732a7e301d7d6bec52842ba08cd44e3f688a4853bf936d62ac81388734a44345b131ca430e601dfcb8748056f9393cc3132f3e10913cefc201f28f3ec247382ccbc77c22a677e940f94797192f9dd6b5166de81e11bc3fc8e7c68a860a447be9bbb4aa75bce4758a715a9d6e443a2828fe549d5753a8b13fdcc991bb4288d27f950a73db53ec9dd40475e3877933bf22c1fb823db93dc4b5a6e33d173dcbf0b3eb8d8757dbd31b8b1cb277d6fa281572ed0e2065ee443438513fd4e2f433de1dddc0062c097f1b79d3bf7ddacf58a17a970606822fc877e90ee7fff913b57bd47ee05e50e177a853dc5b805df83f11680e10ef72bedbb367d64281e6e75b643f946356f7c6db4eef840e0c619e909308c575e6eaea360efa744a9f71d100d06f8aa73a39db790afc576958efede0fb91ac606cde3f01795c6531a4b1450d2926e9b4819a5d23e9b995e00e06e2a0c5e67d40933d37d2d79421515302e9ed7a6a03e2956d8bbcfeebe5a44ff377c19ed3556e09d0e58b8c7e1ed9e5501b8402b1854d05d3c699d008c96b8bbe38001dd1d7527ef7427e1ba5e05c4310e436b66469a6791e06d4228ecfd4ae3be6070b4d140612a349103838b99377ca34a3be48352a2d70cedeb9a73bc69461b378c963479770a0032d96011dadc1d8628d5518537de9827b93aa9d0a95c9a2fd01fef826a52f607277be3247bc96c2a7630c11beff3e36f4074acccdb578586d9432db30a9ffe39de163ce899912c4f72e34bc644a9fa0dce45d566a7fde01ff8e83cc9ba077c960215ce748660c74c5ff5f97caf4d0918c36de8dd6865a69ac98f77be656eb4a2335dbfa3aa477e282f3417de4e2b7509a4125712ea06761b172b0ec4ef873402028774eb51c7b63ca6aad752d18b17aabb3eefc4a2ce03c719df31e87f9cdcd9d7296e979811955005390d6cdc3338de15ba3c4d14f0ed8b734dd92a93f07cfe19436722c2c219157b46055b1a8aaf86980deafd0a64d9488feeb8084eda9030c56062329a624ae7db7f9621d1c28ca4d558993b698f2a5cebe11d67c2baf162cfeeec67154ef195b083a2c161479f85fca5fb99c0fc029760e2f62b58e8311637c7bb28bea5fe041f3559706e10e8f43e7470910bbc9400a3ae78a512bc30f8a7af551e2b23030dbe23ca95a7f3151d70e3e180c14b3265ba2f990484026e758ff0a79a17a955101d28e33ac022d18760a64fc914c179436562ec0ad9a1bfda15adac4450d60cb93a01d37323eda5f4ec83fd10814822489da129799a7a23631122fa8aa777e57b2ba6a28f77bf21a3575a28f26bee5cc70830a24a79abcccd9e0ffec000ff9153cb6bbaa15927748da679cb48599dd123f35004457ccd3f9d3d038d85069ed4d8a02d94684ae28e13dbc8baf4d15ab4f12d7168de0660c7d49c0fd58d6fab8a94c9e99fb20061938a19002d7596c6b4fa6963d9c726231be9c748455b0c9671d3fa06632d60ac57fcd3ddca5817fed90c44442b7d9b8184b0c1d3f665103cc5e9486215ce80d67266a1bdfbb8034abc607c833133c6284101fabc6da2327d5ffb23bdae383053ddf205bd30e5d0dd985f54f4dadfea3a03a505b6cf9cc0a739790b6a4c098c848fc53832580719dfe55df82ed4990d7d341520a8ad29ffc4db0024a3cb76a13d1d8e74ca37985780bb8f79b44d860fd919c0d5897bfae810c26d1e6bcc2c8f2570eb3aa30f9d7bf94f991898218161488767f718641840cf1201271caf80268a57a7ce60a669ff03e39b33615da23186fb0ad6aa82425c1da393863b6a14a3ca15b5e21961242e5a639fad7942ea739eb9873d8fbf8593d25930acd8ebaf0038250fa237a25d1014352aeb031d196b6ce9054d769c078dc639c2d76cc23a34b1a313a0c608724218a829806e6ebdf01e2510da75d1d1c6919ba85ffa190401262eabc17863c17710924f4cc40d4af0a07adcebe62cf2aa2a28d07ef75b1bc68e9b3c03571807207c88bbc82c4c1ed5def85c2f1f9c12926e25897625df99ddc1bdd7a2ed776f2943d05ae11a4785990a53ed6d1e08c073d777dabb31444398747d82095e36f49214be5f0455079f6bf064949cc9a832e0e8f05e7a670ca026777f4b199cb011eeb27e4884c240df315a2d3b8827a411e1dec0973b7c09510b4f4f4b9932ced007f762884b65119fdd742da5dafd380339608a7b890a67cc8e32ea1e95f3c4b6a8de22ea951b7b1c32627fc75856f0eb462eeebd580d4ddee15c7716589a47b948aa2903b3af09c9aaadb9d38d2bced629f04f1d39a6119dec8179c2b48fb87bcd6194be46aaa0cb7ce15d6b056618cdccb501d9473d7d9ae901b550dfeb2f9e827a91cb576f221ec007cd31804a9c8f32940c50fc8b272659de0b4a060816087a66b6e626c2cc81ebb5bda7d482dedcdb57da7c3fe409d626cb13a98f2e2d60b78b1e22ed7d6d76f7c0aedaca3cacf16913f31af06c533d65bd3dfd204851571690e17706be873acfcdbe5ff14f2303e0857bef0c1d75c6b9d0573c94660e38c995c9faa99293d186cf2019b957710e4b761d6539823dc4075c63ebd218cfd0711cf1b751e0ac6ec81b21528f0bd081b41f681b36bcae6a9471226beeaec9e0ae8adeec708227ce78cb9dbcd6c59829685cb497a08ca7f7ccb62f315ed9a4b688f28d94af0e5c6aa5bf18552690680a7a00fe0d3fb06d577a85db78cd1b606f4093e29cdd326fbdfe0168c2e4b0c91970ec4e6a9e185b7340d3481d6c65007c238c0582872380a021adb1f352ffe54be7975fda7801f9d0d7ee5bf3972f3dba45ec4be27e69b95fbeb2eaa6dabbd42a99e1adededee55f06600f69dcb9ec8c90500e597c3039918a63fea33ced1986117ee0025414af246c7dd32013406bb668c06f956e971d62e5d98d1d117ca9069f93d1a2b04429713940222d7ba8d6d9ba18a267a6a9c9e50012a97a749550dd94e775e43dd810c8b3604ebeb4f94fbe956e7a999fa403771560972722ed0b2dec630e7834632b4f74a2afb8a1c7ee5e84e5848a1a045d9b3aaa2114800161631dbdc8c744674076b83d60e4c267b7515e6a4af985d5a8f77673d26405643a008e05783f139bd4fafbac68717a9a72f419ef8c6aac9c218a50c0bd59e97003abb7be63bcb7dc808262ea7af187818174cd07f301993025d44610134940ba52e005a4a514a349bbcee33ea50053733c9450ca6b8b796117521bb72e60c2ea791da9d80ac80d0e4de764dd81b34a62bde27235f96ff821722ceddd937415ecc5118aa8d018a0b4f06f923e4a7ca120638d4af2f6e7aa797e897b43e669e451992df4905c78bf9fbaa75cdf3541f31f9b130e0a657c13377cad3cf1088d328ca0671e90b4f1c9449cb38c4264f464bc8b3087b354ce5dbf69be4aeab14bf00c75ade632bf873df0395339300f8640fec0a9647d2fd41d80770e308b860b4bd67d8fa4597b048d303c0c9d8e277d80bdc4922dcc2b52948e55c2f6d419cb650b0c7d041728a95ac7ed5206ceca88fdf8a578517d2445a5d993cc0bc9ba9fe37991a96ab825d2639a3bc018fa9c3d3e9c52a5a8251dfc70413fcd9eb29af07a3d7cd07be6c748c14a2b4f9d66bdd038a812bd4e59e3357a4f5880f5da4d799a671d23b486f9ca40733732515d92136bca63ab264e4d2bcaab432c0e05ce29ce5198fbe606895ae441637d24ba02c18570f12b2e4fa917502c67affc860e8aa620f7ea282727091a01d4688beb533e276cadcceada91ee36f5512156e6c25cc43fa56c9802b19f954c9d0afce71308e8fd8b855d59b987bb7de39e464dc5f33004691f59a16287b13c06af76ca2e2351dd861105d52f151a0f8447570aebc36c8a9648fd3c673dc06c736b96460b075f0bbdc5daa67d24995438ceaf34e4fca7c7c1250e3c91217aa06fbd161d9539e9b7b7c2c11e219a88b7bc0a9b48248c5c29bbae621c5db543e9372f4716f47c73b42196a078671d1ec0e1b9e0ed8144905b0a9992bc9077705661153696109933fe4bd5d5da7cd644398e9cbc0b6d456aa0b7ae492ceb979a5413d43aebdd153ee6bab8c8eddf0945ef1561ce8121277dc5c9f81c427d861d1811008931730f5b74308d141da32d2bf9dcf678641561bd490f3a9a9c26265ff6f9a88d4972fd334e7956eb34c2b69c9f6a0a52b6256868cd9364678bb8e335aac3a639922a19847dd5ed1b939e8275cfcb4fa475d0b398d20ce5e3fa914dc5e6ade82be62751c68e980fbc2cc84674a7d67d837d61fee4d627167406e068c2d7bab2f743178616ef7f1d161056f1e59cfe07b9a9555b758ba2b525c3ab0e65eb87867e8c2184c035c7a50082a60aae4cb847faa1bae049a4b5c61f86981706fa06f23e7e63abb5c12a1cc85c490cba51fe36e885598d790c9f640ab65175f037c914cbcbd312ef53d0f182cac1984245b43f47bce4ca52b55dcabdfeb9afd54d71768b0ad53579c3707703201e26315add3fba70ef0151dddfba7fe06d1413b05aa75e7fe19b9f70fae068861f2bcfdd6264349abb789e8a92ca827c10ce8be73a9fcb2e445c293b2e4d928eb967351f1e26430d285f420d026092de738a9e68313301dab70925e155c5522b534ceaafa861216c08c02acad9723a107681c57f7dcd33cb8eb37f796e010faa1c1fa1304bc7731d43d08261c135ac343d2625428f89c24589039ce528195977a5b5adb44b0f8abaad05b7d03c5a790c84c6f57516a5731565bb1b9b8e32f57da1bfb4a8d7d3ffdb2ad88d092d98a20b5f808a83a8f318f76de4102540183c114baccc4e1b466736d650cf1ec81b7dffcc1eba8f891754a164e128b5bcc424bdad743a6b461f67a89d4d583bd7639efbe7a7eb879332b685e5de2aa1ef04f33dd11c90bf36db49c76a9724c951134b2c931af15340a204abb62e547b3f667275d1ceaed49c90db65cee5bc9083a45d19e014b8fb6c42bcbc17a5eacfccf1d743600b6ebcb47470bc67672aaefd177a93b01afc5ff54bf2e2abd1c8387b8b6456315be730f187709da54cddb5f7721c831cf398cfe65eb890adfb8c5bf2d1a94ffb2c15fcc54ac6e8cd02d09d858d8aef9c01105f38609706d0c2a190e1340dbf720fa1a218b4f98ca65b0616a9e083f557d08583f62040d775f1d124146f03fc0f0a7ba2b0f2b800d41041e192aef00e18b44c88496454519aaac6c5a5110307406b1a323300f326c45342ddb79dfa23a94b6e5e9cffbd2d6df601940bec0ceb86470bef07952442a356450d92908be788e791e18716c6cf9a824b77c603fbf619c22393613ad7e4037bd86aa8bb0e79249dc4b5da05d30d7797ded631d8a48380227bd61b9dc43c6a96f02d88626eba5f04040ea7187823ba2f8f690d6f0fc86bc15fc3b2c11134b99f844fe526ab064681f4f6adf0051aa483cf81320ea73e1768929e3f8c2fc047f6265b6a2c0d12a9f643c0337315dbb3bced8cefd21e3e4e78cdf9aae322bf44e6136daa1a84d87a9824c2bc89206904fb44d96f496fb0ea7edf498811dff808f517c00d307325f4a8c94399a21e7698d4ef240864b89110b927e44f7dc96c668697252cbc1b78944741881e2e30477126dbe2264698c1542f4d52e45a02063ab80c0ea30c10c85a7895c53b324abcc94f504aff3c4ca60596eebd48ebeb48a3fd5beb7b57f25a2dfc2c5734e71116a177e281e4e70a74ff984b5c1c50ff7d046dcd943923d8b505abb61a83bc37d7fa44f6d3a382fd14b7add5695c5e78301041c558b84b3bc2ef12c6326febbe6ccc21498366f8c23e014ac6b6d3ef2b000b83240f8e8e885cb5f36f9b783cbe9a3a3e47f0dc267ed3bf74213d7026da4efc316a68e1183912da473b95fabb1d4bc960ad606726e70fb37a19d23f3f17d38d0919d33588e464f99b5c994a1fac888385766ebd6b016f507885d3ad43da57a472241c3fd0fb3f5cbea699ac323ee2046f24497adcfa0b7af318b0944bb71a64e0289b7c2ba8361c19a700b22222a1db9ed08b506d18bd5ba800e30af6df7cef2c582891fd83c56652f00760bedda641ca42da8c663d695096f8f08b633acf8fc2c326a0b15a07e4b735181a80837c6a36ddbecf52f47da63e5efd78869591a52f00e76e19a7ae77f425edf049947e8a199435a6fcae06db7b781705b234a9b9fe667dd43d4d133a7d963da3c6e76f392660c09ad32cadc41a520814ac123ef42a6bda3993385ad05b6e06598cd1a8bce02def1aa41f35379e62dde79c74c1c4317ad7097be6c40eae41e44d39255c4816f4cc19f09d31b341572750701cf63cd8e3ba825b20ad0740f953f821a747374e7b4cdfaba3db7030be9002f497b7bf7634723650aa679d6c22f73f3b0929f1a8f54b0b58be67e321f50bce55d14d67831f8802530ebd9a70b13123698e2a36d2140dda68b80282d77fe7f38737bc3476aa83fdd2c550be1b2f9017a98cbb8fcaa7ee0563b42e879819adf977d47f0e3089cc41e0a9073f000a61220ac07a5e2d422ce7ee6ffc3072f5283fb92d9fe8663c2ff58a755fd21534b45cb732eb959e24c75789f7bb18af6e76c73238ac47d8d3cac8fec30329237c0fb8c9191388c8c9cb68c8c3f650d72fa42cb6c662c082be5739811036cbf0d3467973c57c241580697389879500e8fd6d04185dcbeec01668bafccd25cdf7b6742146eafaa829296e98ced6a9cb386463fb186a6112ed8ea8f6ca67fc8b28abcae52ddb55bd7c8ff972c2bb6e16b6cddba8a69bfb2e10722dcc96bf5e3a72e5d25760f25409eaccc31dd4376c774a8e92e448f7653898685d99e6e2a56fcb0291d6c97a8fc1b7ed9dfa4247f669dd52deb2c3c619d552db7ca2db93d619dd5454b75c925970ed3adf9ade4de2dd97fc2b252b97060daee968f53cddc945ff69bddbe804ad615d4fed660ac815f76fdc88d146048fa13bf6cc43cabd73edf980ac06e004b2a265d83e77ccd3b6197b179e650b3026734f2fb8fdf0e6b040685c8987ed3f3b29f9d53a2752741762ec7a287145db3cc67a7bd2b5fa92b3f9732d9eac74a9fe1ee8df66e594f7310d86fc9281806c29bdb68056b49fbad08003de60c7370e73a5bee1fb873e53f72e76e8588f161c474c29f1bd6bc1ef873f76a54cb92d450635f4ae2b8c6fa8f6c25680a7a82d4692d63d0050bbd6c78e7e49825d2cce897743126ee897fd60d006021cba4fe31d5ecf0dcbeaa0cb14a8253ffc4ad93fecef5e2a4e4aaca7bacfcbd64de776744f56627e536d8ddb96fe5ceb97c8dbfe7f2a1a1bece41909ff1aecca3c3aaabffb11e19ea17ed285648fe07ec42996046af4f1968305dfc6b7ee1c9608222d877e64f4cbfd3ae0723f3775cbf5ff7fa64eae23ff6fae7f6ffd8ed1f07fbaf7bfd37dcd1d3b2961ffbbfa9a3bfda50b1faaa88fe2f63b46aa3d777cc8fdbea0d03c56bbd454251efeec0c2dbd3ef9716edbdc35dc6b183c2c6ff8865a7e221804aa69aebaf75a69c1c81abf53b8e5ef02b8e1efe462af8fc2780eb0ab7d7b1f633a032253d864e54bef633403223032dab7aa1f633e831053d47570a0dceb1e3b63f0b02e6c1dd3b34c0b143aae5225e36c0b493bcc209dc49dee349aaad217f92ca35d4d940e41e86334dd10067dcf91393ff5f611ada15309fff159ea1d99a7fc011bcb1b720f34eeefe8e25b8b44cbb5b7b5d966b596d66604a78bdb0f766cef91c94b57ceed7bd2fc603b8f1fcdddf710cf3b6f161ddbbd47418b978e1eeaf3886665091e2e3bacb702c3ac557c0da8ec9f7e2f1402c221e71c059d3a06e794d8c618a8edc8d1e4032b36715a5e6104a743b60ba1a9a3c3dd1153c5112139ab474a2a2bebe83428476da6a2cd0f2aa2eac9044f5f53ec87821bd59e4a0ba65eda2d70dafa78e66a28bb1f74bdad4ea7a4d7e47c052a60d1fd889d9fea6b2503de6348d2f72f507e675d8d627aa5ad07b299efc342789d5acd8309fa5be6e5a457d222620416a0c2aee8c3089e7e7a5d63af82b4eadf97f572b111cfefac1fd74c81a1c99d25f0d239b00da368b875ff47fff97fdff9bea0826fdb2e38d9129f15605b4a5cc1feae43dfa80ac24655184678a7c91aa9f28f225ab0838df3afa7dda29f3e16f527ec9cbf8cb0f41f681a6f0159a43ad94526c8818abf9a73cc156ef5c354221b40a17fad90bd5f585b68a84bfd5dd10850bd6a06778b46310dec075010d0e3383a547f942b33ae08566d72cea15e5e1ac847d4f046b53b8fbdea76f0a8659ab659cf0eaa1c6fbfe08ce2508d61b40eb62132c0cd1b9bdaab17e7fa949ed6df5895ac9df8c724ad52c733c94af9c3ed155310b7d2b8e3f84c2dd431d0a63fbba4f5901bf6ee18879bce6912465d8a860a33297f5a8d906268f1e5c9ef42080f147caa0da3c40079981763ea71bbf2b81cc333378fef3087ead7a43e427467083b5c87d1bc15af721f718bc9c7fca6370a33e2b8e0efbe63783dbc9e018cc8cfaa6f1bb123b78cc012af257250e321d93bf988effc682ee31e6dd6fc77cb2a07b8ce097253674cd075b93bbfb7f64d1ca18c0eddf2f5a1903f86589ef8bf6a712071af295ded2600e9a59e5472d9abc4c0ba916a621246a124451c733cab01383d1958173a78916cdf1be56e645fe4ff19f6ffd1e7bdae1e4b993bcd29cde00cff23a6f5e4bb1d7538bbcd971bd7b7dcbcc09223b4c0d162b5e233345ec64a93dfecb79a9d69a013a77a3d5c5a5a92d1fbcb62a1dcd97f67aeaf66896facdababfdd1b039d2e168467a9c781b4d497de3352969608cd751b3a359715fd65a84277536fd88b139ccf316841b0ffd61078339ead8c3ba890f2d651e36cd2cbd0ca35fafa9ccc305b490390fccfc63aaff6118229df2e49cfc7d496f2bf33091861bca3c4cef6dfae6601e66b025e1abfde99148b64e9d8d620ed4ef725fcfc525d70390d840994763f1d9dbbe7e14c570aee0a5c615c0d28ef9a63df6fff079eb7b5d353337ac4cb431259d5a43d1fa86c2720b973a93c8f48922c85477612603eae84b33e13814db1e2b7880e6f4adde826d780bb5fe754dec36d8ea074490387e8a840253f5590d769594f4cad67866cd4696b09083d344b80630d1e61544211cceb0cf8ce008f57eea4677cf2d96f4813b30d5151946c2b637910a60d651b32d872a1161254accf5884505f1b42e28bab5b4fdd27414173a62243f88e6b0692fb3e0ac7dc3c8dc03ec8b9754367c59416cbb4e2b8c547cd430e8eab187a1b0094f23f9fab9ab91a0644e5c8dd0d50e12dfbb322a5e9a7e359b8110c01b32be6e1900796badd8431181bcf26cb2ef0e33c2b82019af4f7947f756ccbd622d655f611aaa2b4636ab39aad3b0678f919e3ab3679e7cc175365a9927efaaaaa227e0c717d52c9b4afa753a54792dfce644a9adde6244bb06fb07e4e967bdd1015eeaf927fbbdabcc67a9e656eb7e535d9fddc719cfa820154bf81f3906e98d2fb6336f95d2123dd56295f25accf2ce5e21fd42c061abcf53bb3cc0480579f3c3a7eeb1853532ca2ccd0e7231e63d3f420c526776ce8317abe71a0c5a7b33e86f5cbc787575a559a4f5a1de9df9829e84155364ee34f83a0b26fe155306bd0533183ee735fb46533de6dd0471ce5e4c74e67cd63a0b8645411e9d84483e18dd7b2d55cde97e0367e6586311bfbbccd1a7d7557ef574e5d904fb131a7138efbcf1ed79df123c4ca8ddfb6803cf30002113dc246363df689f8f1b206c077507d8b8dfc291e66f069a48bcff61b11a4f789deb6398297a46859fbc87b71577fdcb35d1dd17ef3b810a5ea1eb9688e920575855fb985db0aef4159fe389b6ce7532b79c5468014b8429f379f73ac7bf6c08eca3f7b7f0ca526c0154d2b1d5ace1c6c0c25760ecd5612cd787c561526ef1e45dc002c14b0806951e09e179b945310045f6f5e296b2de7666bacf30321edda74a362c7a3ceabe985e87502612038859cb9da509cc1c0b77996c9da7418579303708388978ef88496476c29cc93018e7c565f841e371aa1807af0bebf4eaf01eab1429d5f0d3295bb0af897b3e29f7b916ff4025882eaae9bdba65f3ed4e99fdd608bcbbe08ef5462d478b0a3aedf07a1331311ccc1fbc501df48b57555b1d0db8e915dfa323d3f21c77863158027c7623ae62b1e36d31df19be2421535aeccc5a23952d59173bb3e51b6267947cf7f1797c52682b8576a2f3df667c75bd330bcabeda991bde38cb9d29b268c6479de6efeaa4f1c03dd49b7ccb111631df993edb88b1afcfd9ce30737dba33c3304d9deccc8cf28c77e6c036a5339e83d1ce8c28d35dedb423064df64f3ab2948eac6446d63223feffa45082cf2db7cc40ca0cd953ebceb0cf98af9d79e09377b29ee396f0334b04204a3bc35e3d6f76e6961b28ec4cd9277c568656c41cdfee8c7974ab99b658f20d67611f6566444085248f12d7e725e62d96788f512207d6856d8370848b9db82ccdb61e814405279b0f9916dc178fbd317acd004f38b41e3dad2af5c3e495af67c5bee938c56409f743fadad7af197e37d48b67e0597c66a00f1602928df52ace2e9c21a41a7973e4b3c4e829bc3445c27780b7bf57cf30fe12115d327e610b2b86a2977a494d05d2d48ea94ec0b8017bcc89d95f4172d166af5a3ca8e8c8b9aa97cf74272886ce00e5853bd1d68720bf11329e8bff91d755c128e0dc9075e4eef8f305bec7eccb02ccb6c46ba9eec0679832d4b967ccbba82bf01138687868155b6b06d2a52310a79ba339b0847da14751f6b97c04b5792898371afa057c4b585b76d09958c366114a37a7fa842c588ad20fe18049739a18ff0dda5f8366d645f3f0c5a0ec0bee0c71b3c740623985871a30d930326bd42b3484fc4d1efbf021c74a5df07818409779d1cc06b6bea68509d5eadaeccc015a7d378c988ab531ede0055f5685009a92d59bd0a9325518324b99d0e6b5fb5db4862265f8128a076093e3d6bae16b9d9dd50533c65eefc0464f06ae1ac71518c5fb08a22a8c71f4438e2d7b429545d9a125b012eca0a043c6fa6c41c9fc30454c254679678a26454cd1b868766607fd8d75c29e6ffc9f66043e6619ffad2f22bafb2658346ceca0c09dacc032a2799926b26f2e9a22f9723645a10a58b5b686024c2605cfe025d85a72b81b47ec8ae00da3b3895cf5853e49623720f06ec1fea5a3b5866091751bc38fccdf8f98e243d9718e3ca36c2e4dd92c4ff564faec9759f158cc270e1c5c7dd6b6af273987cf22886612c588c548f90e18ebcdddaf0f55a8ccde977d80637a630805b9bd31bd2127c7ac4c6ab61adbaa7ad52448d1819bd8e39dd752b9f0a8a711018b9566b66be4c3f99bb2053aca886fe6364bf71a60afa1c5e525e8b0af4b3335733a96cb4b33a3db797369ccf2d96df5c8a841eb8b49fe39fc53ea6d9aa5abccc2cf9dcecd4543e4e6ecebcc1717105031efc2191f5f8b61564d5b99bc2938fbb770c95a595797a6c71b34be8ea9adbd2e3c9f64ba3fc9744399ea6b3d687b3fd84300300d4481559c42844bc648bb8c641dcdb76f617a23b0f43c3e80e03fbeb23755708bcee5b42f7faa65f5ab9e84d63ee251e138d98ae31fb28a23b0c54935c53c5b00dfe40dc4a6eb932ba198378ff8faf5dbaf107a16cebf527b3779f322c9374dc886d8eeb0e4acdee88a17667865d8cd64da4a89ab4dc42f2f5fa716d6f535918eaa7dac67aaf80c11d6c1ae0d3c60fdec16cb3f3bd77dd8670d83ee2c7113af5a5e4345133e1b9f600857898e31b5936cd72d269bc18bb589372d71cd093e2c970b0b7e6207de52a6e60eb98c21df5eb12bf66862877c7107568ac756f799a7146a6325d65ccb87b3549aa4215f1cb320df3a395c0bc7b3fe853f81d9edd72be08e37bd4f4d5ffbdabb653b2c61afedb40a5ec4cb8251e61592985eca2b198936206b704e35c13f27c7f83c474f4c57cb92c87eb97acabce395f74517ca2526ef16eca6357391860ade4faab55fdb4a75d2564adaa9b6a9a2b76f0311b8bd61f7e427492b27899ba4b1bc3b3e3d3a74cdf32b6167ecbc69a09d84b993d0b0dcead7d4394a9da0d7b323cd6ea8b066afa795a6ed9f61badded0b24752ea27bfd4617d79de39dbd9d3d2b33f8586e94b0119fc1d2b8811925181d43dd61d49577438b3743b72d29a10a0708f071040bcd3370fc5a51fbe8646bed8dd5980e8e12cd22cafaa722d836aedf1c9770f81216df206de066766f9c6fffe659572fe118ddcb839762a5ff26a7579cd2793c2b412804bf5c68907f0fe71958501e3e7959e8885bea4aa0bcb6f2551e53353156ac1daee1eb009a1ba270606cec94fdfdb7b142b775fba7b11e30d6e31fc71ae4f4a68e0d907d002f64583fabc394ccf9e02e9cc115ce07178903f7abd78c99f9117034829f0bfc7636a20b30d55a67c388669a6b5b54ce6aab4cf4edab27545432d34534c7dd8fc7908663eff370c50f1a21c53ecfd8a5cebd78751588de7a5a73a062716977070876f9c01e35980c65297fcf8d615086ca3294e52ff9a5014d3326e1ca8f9ef5b6cba7842f6d53539e3037997d88d48039d32bfd6a395f8ef04a345accbdb1eaf5e601ea5b4c01fdd7fec66aa89f33b031d625ebdd2452c7e0420fc124631b98e6a9434e0b444c3ea09f5da07250933ec297dc9421c346973378523247735b015b706efde412fa9cb95c74de1ba2c514b9efb1ba35455ecfc8b760c6d440683608570b3608d671150c75a96e375e21f8b87ce2d4b1060b5d52af6c6ac1491de86b24cf75d1491ee91b247fe9d249ee5b9bbb9c26e78345780177f5d4c3e799ce76d22730b083669b3d555f55612cb285ea214c2a79b38cf41e69876abad126fa88b4cb2a4e43acc2055ce28afbf3057cd6ef60657e9565830cecc22732ba649ec0ed0db28ba0b37e15d971d5def6c14ae7ef71de6758b91be6aa2e215f2ea1a95b5687870ea8faf697452e742906c760d2fe059a411bc920fe8473e80df5e1cb3c1ede980d3a6b6490a4cfff3b0ba8c35097c37be520aff19485376f8b5741ac62b5d5ccb63f584092ba9b658524ae953dd62866c1027ab5a083cf64300bc4829a157f07d877e2afb5060be09a0551e6a84b30c7bc4508104a7bf7aacadf6861178bb51efb6e4809c96ee582a080eaebbd335af5ed6fac82bdbf709951f10e869f03c7ccf42bf54c4730ca6408f23fc24883825f36270bb7141ca5aa8289f9326710b5ef8b35e9b09d82de50e872eb1e1780b00cb1ff94e06db4c7f7d2ebf70c7306c87b428f22557e75d799e979e0b669f746beb57e0ac56a16fe40c34bdea91d18aed4e13db03a271cdfcfe909601bd7eaa041c1521f1053088e31ab39baafcd5a4f991ce4485c5109e2922522bcc198ba33a964775404b408fa939b8a38c78d84800db681eb1d17a45e1f6440f921f3bd58d070c8581fa2ebccd6379f9710d01d41f10871035bb995e37c33b6c7d1abaa68195cf03c3631eceafec9d1eb80a46fc9fafdf55b3ef265bd7f07ef95d58cbb27139e83d9b8759ade050f4926140b5e7ae65edd3c9f551d5ac7a1edfdbb575766104cbbd835af596ab83657e2e637006464d56fa3f29d5f2ffcddc9a781cf1aac2374f11ace9fcd994348289413208c54b0156db43c7cc8f6df80129e35f943bdf1c4cf9d365e3210a7de7059d6b735337fe1ec2725bae2bf9bd7db377612656473823bbbf299125ff97df65d0b1dea85393b112c3b327bbdd359d11c150dd5c5caefe166f95ea6a3549391fbb5299caac26d6d8cb68d714e63384a235698bc80a7b4c81a12d0150ab0e65e9037855a567ebdf60955ba59fbafe0a21fe1751ec736d977bccc29faa103cf0169ccc6b723a75477fcd317697b9e8b56afdf89005345e74d752a4eadaf4cbe23525875fc4c90ede300705978b789b40883064d738d5b8188f13345ef829a552d89957a6671d673eab833b86741070bcb8aba1a02ca2fdb5ecaab85f9453a15ec2775b5f6af7d81db57ecde201f1cc4747e2154da2dc3ac6eb9e1d555c97f81009291b9baba9fe8cd4b46134e63a11357c06dd76d07b905bcb29170b8f24fc4526840159e4159b480b79c7ad671d83202b8b536dc9be6026a0e35b8e3a6657a290494f9561f18377e1d00e9645cf4e528a114aec5868408ddb5664ff384bb0cc429d09ac179cde9a28a617f67bb0daef7651bde2509c4864583c83a8d052bc6b060301a8ab358cc1d4b65cc513b71353f4e443df112b12ac4493fa5ad2bf0df3f36bc20566d86194940c610ecc4a872977f2ebaa9b38b03e75dea423bbb22428e2b10bef0ec9ec281bce5905495d99b4be376cc3b0d2595a848fcadc30fc949acade0bc35b957ca9afbc6920df329b135a0a6cc9717b34758383f11fae9f2991d50c20941ab1cb8dcb24ba2298281918f03a639e3bad3367b1632793ded00d41f0c2eda029faafa1551b7f17b886d9e7bc75c5cf32dd75ebe7b5d5ad31d423a32d761e29f65dabfdb508455151cfdeec947f62258f7255a039d7b8939053515f673b406f0e7d81806f1f63a1cc064a9175d00116c850354c159866a8e9a0d0e0ebad48685151bf9981ab8158208b5a10a72804ffde5afcf9e84ad63bd93b7d3dde82eba2b4a5c68a0d83f6e61b710f43e371a0113f86c6de908ee6b0010971a5e91458229c628d0bfea6b2845a4b45d447435eda637e62ec6f7c3aa053991324cc62d32ba7bac9551e314696ca878a22fda29cc8a9449fe54229948789864de63fb999d2eb7bd44cdb4a5efcf864c97d22d2e132f525fb5b23e3c89189457ea45fc0c3278f93c71e81cefe16d05a13cc6a222c2685416f6538cc6e7600cc00d69cc7b4f0f9f53684df74111a10f08575f07fb9fe6da1dc02b63bcd02cc271be924815f00dcb936f16a6f14387198642d9690372608bc00f633ec9d509b32f0251765b7315c1948d1393997c83c1c21ae2bb394748ae2f78c3055f785be26df501462c6b24f3942e4351a30c7f9a9870604e26e6c67f9bbe6145668c68c1ff1ba2250703fdbb9dcca0e3fedb7608554997f5fc0d17ed826a0d3f81c3d7a7ecc8f6f974af242a7c661efaa5a80dac25f8cbcf4177e979cdac6776363c0ba23dcdc53450ab574fc441734d68f544b331d26b8155006ea1f4c9421c8990c23a41d41d4204991d193ec1777ae3d18b54715899f04ed9e82fb1c160b03c63c772d515b8c74c994ef96e2d9875cff9a4e69854152f03da947b41a13e5c57ae34970b8e85fa98d169d12060f6f8fcc3cb8232a7fe5ae9df7858e9b0464137df0327cc4f4f92f8011e89cb79f6e5604a5a5c9af3ad19bd5d33fd19945259674040117442501537daf47fcf411b1a97dcc7adb8580ef240024600b457ccb10a8a0e66606a5fd0882a9ce4bc46ce12a263f21658569ef8cec3e91601b620083b9af74de59523f0ad2b037dc9d118ee07e0e45e7f7869981c76915ce46311f5dfe858b4d6cc107d63ba705ac1e6ba6490d739befdb4b76069f0b7719ff7f5820fc1b53d00979a191fa6a8bdf10bad259d4bd643358f3f024866190529485149c373c46056b73c5e0418304876d5f23a2a1ce919aea0799a7653135ddb6b30be58546a3ebd55a88c82f51de36050af61b44cb58b6fa7c1de09d3af62216284d16c29d501b32929bf2366065eeba58e3056e9c95456b0d6232258e3cf31a8e3c9ffb93e3445db7aca3da94e5881249af61cbdd111a77198de88f6e9dd468412638962cd96777d0d1dbffaf013775992864381da386b69cb79a332556510eae440082e6b8efa2a8f68cd43d44c9d78962e39b862d66eeacaf9683b33e931163784fc6cd87513c14843682df4cc363421f810aeb3d8ef7d667e47d494c8d9acac8b194975840bb05177523fc778f454df882f5dc81ec5493a5f957cb6c75aaeca4b70b5258ae85e449d071857d2c00606ecc4d651be5db63c89b56cd62607a64ec152b395d4566662e0bba45e907257402d0b22f2baceaa29f882b44bce9d58f4b2d73218cdd5f7427fef9a4ecfca623c2bdf562f38904c2c1d61995e926f1bf7db86ebec956d7b2ff0b9c86edf16901eb177efbc7906363ad2193a1a5b5db718314ed95977c4e1535881f40a5131c493c135af5f73c0cca54bc6a85f80cf066326b686bae4bbe1cfc7087b14d83b24fee47dc98d022c4239e6adf46d5bf2a1518d91b32d615b00a7342a18b3167d63969aff4277524537bd8cb9cbec5b16d4b64a1f67c5687125c02abc419d7c3303ffa6e759fb91b894de881bdd0880698c5e591c6a8a81e58ef76c7839c3fe0b5e46b460c08b5f688f1a567c7fe229eb59ae66b8d762597d01c61b3b3de13c9c33badfbe5b761bedb2e313f4c403a55e6feba835548a4d15827b910a0cc5e951a882f71122353060696e080b0c3ed760728cbb5e53858e68a8cddcea2cd20ded25169e86c2ea85826eb3d4f1ce230787cae0d62a48a0e09b4eca698cb85a561f902fb44b3831918a2f9844ace364562f45eb1907ee5786eb8cdc4076b5c620775dafadcc87e48f54fcea55d53d220037844f636d6fcc8b44818b9967c32cd557669e02af6b606785567bb1bd65191eb707729923ce54562c29cd6cfedf800a7be2b12c7a5f8a596fc47193d91c39f4522b6149197e33ebfd83496b4a9f3704168cb4d0e57c5aabb7ef82513481dc961fbc44d5e16c37bab2e6c863cdca790dc64d393fd0f1125ac11cdf4ae807fe81b44e98cfab16629b00c367d2d038c74fae2213711cb02630465c5aa54feb0510b6829600855eff170b8cfbae4f29597cb3f6e1416a03c209ea88d02b9be1be9ebe5bec2e28f145c3c1b6d51bd34bac4a6d3a08f09d95edec5185622f9bf0a57048843101b85ded2368adf8141c21351ef32fae5f482b935997032dc04f4a3244c624a0c437611473171b0b0438c9b851c2452782bda9547bcc40b20d697e7503ac84afa2a8ce415743bcaca0677dfbc14cb18518674b6a19755d7218c98959c2b997f520bd0852f1ca88391581ba3c69753ed05edddab5884fc335d51542497bce3baa680ebe7bb6d70cd18315a44dc39e757415a9affb89758fc84e2dea4a55b71f0edad59608ea1c41c152163640775de5a2813f7123a5f7bc8e9ade0b7fe54ba2f25cf92afe10bd9e15413cd7fe2f3f10f6f85dba9e61b4637a438494ccd01b56a6365ab10fbca84c97c8b6a2e688b731fb64013f54ca09866ffc372203fde806f626333e66e6758ae8f32cc53e429b5474216e3fbdae32af5b847116758e8b4f42f85ed74884a64dd2efb3bbb6a73dd7d578823b665b73a84c0d98af1a33dad798f02a56d9b366603336aa3c63f94f36b41265f8faf815cc34389819bc232ef901db088a8eef30a4619229bdaccdc8dc34b391418a0e35863edc1bc1df47724540a5b4e798e937fb60ea4fa1e7e78b3d62e90fd9f2c09ac18a4bb3bd20db30cd568456abc48ffe65b61c3cd5e4d0e8812f9e5b61d432afabb40f6843deec836b336d215cf74c0ca278aa1a4777aa06ff76aa2258e436f6af291c8aa6a29a0153b1e8ebe99739c4e12a8ba27ece31411d9b5fd781f98f56bfce81a98f2e3e7f9903b31e0d5f7eca118bcef6db5a8b8a8cddae7d9d8575256cb2c1d7b29804d02d11ab2b33f399099e378d0582e25c82c35f26287369f69ae5337973a185b093efb90ed55a0a767460af4d00f38372ef8cac6ba9a86cc9bab100079193b28766eb8b32869b1b96d4988f32c8e02110ce4b09d63ef0e15ee0fcabc4c6ebfbf04c3013116101f37a45d0cbecedeb8ee5a5cdfd63f6167eb2e3b537f0f9383fa406e1ecc93a42299891b9ae7b5627a12230660caa6562a88d35a23037e01a2c9ae2db9208fff0a859382e1c9123221832affe13880243b20861f5a91511a071f4777325ee228bf07a89b010c905cd5938d2d7d4d904bc10467b20458a590d201291549ea15332c6a45597c0d9250856fed531c74eeca55e9f8145bb14db7bb823a1bf9754990db1b7395fa430556b9195f242d57cf1aaea09c68734eb8499409b3029c1c50df85471898d76b87859df200724ea8d1d2cedf74d1874cb2bbabe4583c22c4203c0f9af98f142681993f8652747f822dbe0aa872dc3085d5320ebef2b0e163e175e0987738e89850250abd0917b2f4531119d32befd8038832a65e5af16a135cfb0b066cc65ae4760090e3f09f41544fbc586f567bd69e1506c7ca50ebec845c7a10a8a21e4e2498ebb0b838ae4f623c30a79cfc56b035a64cbee1e1f2fa953fe23984f12350411b4e63a33de37efe8fc9d44535cf4083bc7b5bf6162ab03cb82f80abeabbfe0296ff9e138d2d8406e8f83d2828d00d4a9c5520d5196590473d47b687edd3cb9df3a7449e7f51e5eee39aa5afc0c8da70b51d457b870583bf008e365a370ce1a125305712423090cc774df05f8c4c3268c4472d0052b70e3898476e3e53f2b4bbb770809ce8518fd94511696c5369289208fa0b86ca2e08e53864ebd5b2e3ff2316762816c1149e820c5b806ea13c24f1695bd99325adb2b896de417e8fa5c0f2ce20df6658f88d3edcb67e6b0eb13a53ebc44dd744473f3966fead64e0cc702845f3179f6a9a35aaca7d541725b5ddee540d63075dcda0346b147c44014a67748bbe4b5df6ac9120c133ecf1311a2b07edd50c3c826b84ec047c6db4dc211a77c5ced0dc12b838b4ff7700e25c2bcd7640bf7ba44227c7d9006a3037e89840eef8e4e62240449e5f37735832142634e26667f52bc72ff37059b2a7836745a68056f2a4700ce1996a6be411c1e2e77f30ec936bbb6661edc137bbf33d5919f3119ea630effc951e997fa46b8567be62535974438066bed16685e70fcf0b7329dd945f8b91075b19116ef041b4df7d76c24bcef91b681ad0e5a6dc2a3f563c1574717e184a6f74485a60e44d801497befffd067f679173c4c80d289848f55b762d942433ff3bf27d9a8df8d81b07b794fc3320bec49b816a9c3af20d2554a5e8645e31aab42baea44da20480935e38198909f84ca089ea193097f813f870609d5ebbbd7265291b3d69cac270da97050f39a69ace30b398db91fba94ff6d97a437120163ebffdca9a5a65e6df493f4e824fb49739b587c9bf6197cec741ee2932bf86533457e75c2c10269c375508a32ef753be6ab5cd8f8bc3ce75ffa889d645d527fb3a9132ec9a601c1591a9729cfe54cf51a81608b10a28eb3922a2efb88a1c70a0bfefd94bbd105986e4377ba0abc2c66ff2e1309b93065f746f72059d7a26606dfb1096268ffdcdb886577ac51dc00a463b2e697e682e2d9fad0c0a95c8b5b8c3f18198e02895f2d86771718d6b6e5a56ef1377c7174470dafc5b3505577aa00c6f117420fb73d89ad32d6ca7ce6b065faf0150704fd3a668f9e9afdbca978188ba6786a8e679ecaf4a95879bdae78ff3032f1f485b17f024d250d82fb9f14bff914605455d50164a71bced0f6da08d18b94fab714e673f5101937cd4329d1c02ca1a90ab5f884b00af198df854fc7a8983a3d6c494cd062ea1fbf0b36729cfb4d3ce37f10e1f81f873efea72191ebe72191af4fe23c30ee9a49839a5606f41bfff1a3cadfc7790897e6d455bd8478f8733489c29997fad14f8191bffcfcafc248b454544a83257c8faff163348d18729a99c4c2f87db4e5e36d85d09cc36d0533bad067c13813d59a9df6eee7e821df03839c7bdd3c0f9ffdb79e325387904e3c846021d1f99867740fd7a3d5f990ef7575a5176209fd35a4bd6ef2662909aba1f6c64685ef2398a79d389edc5e54e8d2d85d54ac33ccdf45bb3e5e54e8c2395c54ce9cd3ad0098446659653d3b1675b70131972d7ca9cbace4cdc00d489bede8109ad8aaee75545448e7b72db0289fce6f1b9eb4a3523abf8952f56770c71be991ab7f4289e8c69518fc21b62aed243fb5e7263038696627a35bd6bfdb1b82244693b4ef62a4136dd3be8b194f94ff277be3f60757a6f9414820e2761002e504c3adb796d96ec95939a6b3fd7fbcc7b921f7783ae21e5f9888d94439a3560cf67adbd3aef77df62d5934ea6404e791fba97bd6cb6e476e9eba0a6766dffcab9beba7f2d59fcb5bafbe326f3d7b34ce03f7d74f1b813b13009ca5ceda1a6a150cf4f76624fab15343ced610fd5d0d36e47f5603e2c5ff7d0dcd5474676b18fdc31a5ad6ec29ad61f20f6b685b87f9690db35fd7900cf4a4f52b8ca08bdd139ddcff75c6985b4f0071c3ecf6900f35ef24ac74927ee0705b45bd04d9274cd830c5a7e1e0e586b17ad8429a39904198af5699851e4a1451a8cbd61763ed405ca87a6ea721e1099b69281077c3c8ee809f558ef91f824e8d6fe0445134d77ed397bc196306f8eca9eaa643f3e21286737d9473d8d70adc9668e63b4750dcb408296d39bf6edc27f9d416ef2a9790582f9975592d075e53ad2aa20134879c7caee1a2ee98b99a5c565e377012c623651e16eb485ff1559d4c6a5e438d36fa91eaf9d2f39a20e4a10ab7629b0a07ab37d0cdc8b1ccf90361c492823519800266014e61ae107bbcce6c2b33114e5509d4747fc2f17c7a45362c51c92538bd75afa582a2193143a5d1677e7a3bc78ce71694c8eb03287fb5faa2ac341861eb2c4e8897ab2676c783532618416954625389c7b53ecf4b53642be28a7e2c712d98ff5a4781e4c04ca6f68797a8c35aaf2bd0534916447badd7fa31e32341540b4d6ed66a58adf55aafb0fb93257571bbc064f746221684db9c2a8b12cd3173926944cd7fddc9621c4b6747acf208ecb30bbd835855d4506accc9b2a4926456cf5ce8f3625556575063149bf3046ea1eb11af39ac71779f2a3a7454b034704e024e438f0e4d38d3a9fa407d08420e62e466019bf9b62f275c541810e6119cc2c6b2f3eb125576d827f71e41d2df659698640907cd8b2ceebaec384b5c4db3ca4d6a4ae61f6765dde49fb34a102d53cc7c9257bf670dacf2a5c4314b94d9fb59ddebdf1510ad3593f779f2d6988f93bc61c909fad75c2007b4d01b5382008799de1a382848e8b816df7837f6f59ef71feb63457d3129a92bd5cdf141f53f2e8293a58f95e9326c7b6189dab5de07ced64444a52a8bd6e1583292cdd91d0dacbc9d08d583683dc16c02b623d0f6b9b79362fc3e0e143301dab6fcd7bd5598b3b052d843b400495abea98c3f7dfd65f9faf2def20508d04b906e79f3522db1b4ee7ce0d45d57c6dfb5feb6eed38ab6be5351f59f54d4904e0e79c7107518c34cb729b802d73fa99c4d42fff99fd74fdd96fa0948741c3d32b452705b499479c8c6f3f2ef8693563d0ace26081c9fea1e1747cc883a2406e673c87741214cbc585d857d0dd3e704fa20755ba463774c31ccd321bd0e6fcd7b06df0a21cbc5aec271c8b16443a7030d9ac1e04f1d18dc11c4e8dfb91d08d4e06e4d25fa77370cd097fe59bdea4fd52eb9daafb36a97a8f60bd526259f2dbc4eab1129cb9748a98ae313659c6fe1dcfbafaff6ae2a0d0990e486b8ac86fa120c8227b62f4097bb3359d60db7d22c0cce19e60b61a14f4774e90703040e5c43638419209d19981653283b01c1aeda8aeda5fcced44c81b082aba1de5bf835e2b1eea58fbda9683e393a85d1526a1a11bd6bc4a8bc31676102949fe2e34043c18fb50055fb82b77722c9037dc57bbe07db41d6d98c10ec1e5142a74060aae52120efca58c67e53a9e635c34398bb06db60793ab086d753d3a11e992b0c684888536e80f18ce1709bed61aab620cecafc857e7ad774dc2e067a014f02c984d7ae28e53b73773e3eff774cc79215a9120eba97c0d7e1fc7f381d9b41361dec406626c3e9eb3b5c50ee7480a8f972a6633ad013998e6dcb8bd47e1872f1b9de56329fc5114b775b791f91f9ceafb6e04d6eb31dfd04cf7b8245f361989e8e290d63df7430bfc2482c99c7300b2b528e5d7364c6a089920591a4c5b55ddbc930c5fe3273bd3177abb3c6c2c1b054d6a50e773d509333700d9ff4836c3555e70a55b60a4302d5d1924fa1ff71a89ce16cace61eaced8d7d3410ba8aaec56c4c3d0f8afa3441b50f12d91520e5c038487dc63cd8eae8ce6babf95a4f820b19ee96e8e7810c77aa730377b8ebff170ef77478b7d02cdfa7c33b2fd356bb951ea4c3fda25a162b2d7b6d2da0109229319085b5d3c8a418be6a1f65e8bc61a194509d83da58bcc08388886b9b79c90aa1199c7ac77034dd5ebe88ac8566e9de736d4ac4b7251d477abfc07b3d87496399835fd03748ee2a9ced441926d23b457b402169bd828871c966494d99d00bb835ba4dbf25ac84cf0e28e7bcc2ed93ba24bf2818ac4fea9276aed36fb1ba59ea6305dac5c981ba9b5fda3b29377137d502510d5807cb578f7fb7b582fff2d6229ac9dd262da29a0e4840fc72d971e6e30fe78956eb00babe0569ee4034557fb5453baabfd4fbd06ec92bed7555f10b93b5d3a3a93b59054067bb84e2c9dd99d0ef8be240ac485d7fe9a22fab724d97fb511a3ae8c94943c57fd090ec0c075644eaf0a54bb6a12deb066f5f1cb08b15e5bb66f332cb286d9ea994d9f185d422eea434f9da82661688a5c973a6c192c13b1826bb1724ef8463d293e436922f917c433be5e876ad24cc282ff5d3c297435d1d5ed6c676744d747839bda360cd9e375075f4c25403e9851513d9f79d58b45cd33e5f3cbfc145a3719807b03da9a7e41ccc6e6ea1f4ccba082fc8926c252206dde5e33ba033e01d6e3f524b18d53a50d1b86c58c82a6a6c07568703ed5c76c27f2e1cfa33b886ef86029ce55ed12511cc5831f0bad1bbf8f08cf2271aea59303efcd21ce574a12160734d7456d832ed05028cc2c3c0c2867a9c6373b6d713a8807f415b4f24671fe7dfda2a9a416fe9f9f788c0ec64fbee587b1deb13ca112a139232767003a26a263db9e6f93c9b8fff8f51d569847733fb6fd2d22164fbff96826ec825f7dfa69b5b679dfa6f52cb9132a3ff2a8d5c576676ce3af83365acea7fa2887db64bb8f6fb2714b1cf21fbaffdc77f4c0abb2d066a103c7ab11ab272f63f227d4fab5972355740e2ff87b4eeea3d3db1905f65d702521956ef5f1f33a3de23aa8c867c509f32c9eb888157b0824f2d04a10c86acbbd718a58a7df44dd4fcbedeb1c8ac8e114ce1e06026fe10f0067f20c117c383cd6b2e1887203d08cb5bb8ddcaffdc2d73377f0713f223eb9d791e037cc29b033a695ec0e79e385d354fd310a5e1c1e10b41c0d8234b03c186824d8356ea95832b35f248bb44daf08115c70b68faea832eb1ebd65e5f33044de67497945fcf39e70304dd88577e864fddbe1e758a6553c27266a51546087dda4ec5a1fec61a27000e3039b17769a4d4e7058c6e1ee5824630ea647a828e2dd983ba387480c02c3a596530aa64a96d52ccae521898772013092528ced02835355edfa86010c0ff6d6b80db97634d3677538218c15a97d1bbaaf4e772683df07655807b64f46d969aaced1b12c62d58255b264a0c9364caa11dba8b6ea6d87eeff691dd4387f3e8877e5f68a586867ebea67a121c6421364ccc4e74b60be3d2d902f02e44c810f922bcbdaa0a8a120714de3738badd4dd7224be6b12c0568d9dbf4cedfacc072143a239c0b9c9d6a65726695995862dd615dc8f2b69c349010f939f72d8aa46281b45f7c31374fdfe87f1d6bdb5041d1871fdd063c6143a80224407a2ca2a50d70954681b2dfbd7b3badc20b7d4dd8d8ed584f7c8e9da2926bca5d68d12406380593913389a969dad5d06aa626eab235f26183904cc6b4358a33570075edbbbb782ffe34122645f9ef9751d7335d3437b29237b45fb66d97932117119370495ebb54b397a84d7b6bec79cc31c3aae89696fde78072859dbcb45b1376c574d9b447fe0eac9a5be37554d962cf29005b006a57853a6304e06d007c4684791c7bef5dd284d944f48a79dfb1d385eab693de74e66d827c5fc8f7e435d5e165a94584938cd81eb7934013eaaa0532e0d56ba9ed343c213a586b32dd290db5998605cdb16454327b2000dd106a086e6724f8df61247068e16a5c9aa366c1b05132ce0d812ff3b07dcc38fbe661ffe8b2ca76352742c75e4f7efab8a599bc785a88527cf2ecb555f189fb75ad4be0e7eeffa663e902ecde5910b77f77911c58077991ba7a3afa60dc0dd8ab6bb30fd26854f11a6a568596c94e2f3f333a01fef49e45c37007550430d08efa047d4cc50e195a99f0f10f957a1f54d3e3dc90aeda72919a560be10a6bb96e51a1ee41a307374d907f2dafad8ef9caf90ab727f1cf1859531df295a3914a73ece968a8e1d225c9d1b939ce2a258d4b6afb99dd5211d4fdaadb93e5fac23db065240bea1d322f03d1e53f2d76c5d271d0b40331e5aac3ea8ec6b79b5572be74061ed486fa16d7ee05e10e4bdbb79d5eceb49739ea9356789aadb2b1972a0a6d382afc49f7b64fffa27b73a77bdb06cdfc9383cb6c18254e3592dd0d2dba3355447f6ee71eddc51942d2b9605748f11c56fa339e8ea7822f0760e87b3d557e72d679fff2435d763fdf3e6d8d9ce9256b1e77fa2d8006b0c4d9e84475c6b08929d1be2b1683a338df3a7e669cceb81f9c2327328539f1808b0cd53b369415eb20e8622c6a0ea6feee0057091b21de3290c65123ccdacf74c8074cf6b1add92816efcc62cbaf856790645c863ccc91d96ee0710e061347548b9bcc0293282df54bb168e6d8a8dd4203f6bd5c8c4ec953747884a74468b91270b8ffdc71c421d5d9cfb40b54c6216b5b6a3175c0f68964dfc05030861107878f2b069f32e3ec9972500c201e30fba7cc5cfe5f4df815abebb604d0ce6bd65d8a8a640dbec15eeb6b25e73b2d4ce454c0dd6d73fff8c3b076e2c53b51d7d741ce87abcda4edb5d4f11ae3b9d19389ce983aff6840d549a661f05c026f81ee53b8b1e1b68ff11bee275895c96628feb419bead75e8886983ad71b709e2e93357ee2b7e3d60c1fbfaf8e38a1bd7c2650ebfd732d3eee4c347555382ca842a580295c9d649d0f19b4250d2b2370a44862c1e1e7116d91ec24a1dd83bbb6acfc4a2056e4396dd1f98b15c71a1af7ffad4809a2e3cf6cc4267410a6391044943057703c4b201e49b97a8e9c332b8c2fa4ff822a84aeccd09fbbca877c1ae4558d264c12d35e6a00507b016bdae415d3402fe812c536429d538cba56441e22464d021146531601c1acae74758432665df6baafdd83cc241dc5e34512eb1923deb4b0cde3602e5ab35bc9e886794ae755114206e4efcf1cfcee3cfdbd7e187b2ef089e13a26afc0f814bc0e44edc9044698ccd7ee0355570bfd3d245164687d9b6bd62652633300578c26351e65433aa32d2f6087660a13b445e3830e96ee16265f94144c1c028698172b2b371f3e996e64dc308cc275069a38a16f1029c188240631b6fbde6287aad357c313f5ece64907929733342909bad5ec32c7d0bdd283665553d31caabafc42194673578991f37f165c9a896b956e6bde4543b65377f7047319aff8aa372d4caed0895605573d424ceed95cba08443925e36699ba159f8962173e4c95d0e8c20d13713ed60d176d8bb2e8c36e8ba1ed3147d0d4c49030e251c396922355ce9158db5c1918a9f225b4187e388bfff5419b389b27cb266c1cb8d2c97fd74c91ea31ad062edb2f08be9ad706114516b7d9372997674a2b67d23e8079c3d254abd97a52e7616fcf0e67647d4efda76a65595481b8e8ea73638096f6f19718d80d4e2ca7a257a92cb3b7c2af191e894ee247fc4d81c9d31e4342a773ab11cfa3efc3c4bb51b27cc0b6bbc4bb7584ea7e3bcf489ec3fe6c0a5b9d00346d24d8195426357d016bee0f4d7bfcbe5547507130576fa7e347bc7e192eaeec57c99350dbc48cd733a675663917bd1ca8f7219556ca2d1589f143f01f693e774764384cffed6dceff35f5ce8917f8b6d77305e5dadcbb6f1ba52d5dcd0d1b9501dc7ddccaaac27e6000af8daf7da6a765270324e0b9ef9a99996f5c816ccf11a6ec0bc2ce90b80ef5c05a9f02b9126dff85e43950307039e8d4f38c1091844b7415aff2d1529b84516a7456eb4c43aba0af6be14ba609ca021d6c54d6fec2b35f5bf3e68d315115833c9bde07e8529a037f5959afb378829110869c65a6caab16f23cfd0576aec5f7074cb422004fa8e89f9c6a42f6d5d876a34324721bf8a617a6fa5e4ae58572229bb50221b53870da6c3774bf4ca51746ec050059f79d6300a04d4efba5e4fed8666a96523f471a9e6ed0c5c856a99d3399d31cc96dcb3b63832da8cb5d76367081c525ba69852bbeca79cb9984088081d2784e64ec1aaa63506d85a3669b37f7c416f71ca5741978311076f135659e648498f502787438e3ddc9d8a1354c42b68dec089e9842515c90a01961191118966ebcfee9d0eaabedeba9bd5ac35424974bf1ab65498369a5cdd59d3c8a060f643ed4c808216ebf1fb340cb51ae6f4c0d1b16f8af644b578e73515cd3dc3e2159802d5015095fa70669568ad2aad11847f822f8deb1776db7b84f76a1e757b1742ca2a7766458a55b38aab43dcc3d53204def13ded1a31249e5b0c62f1ad172147a809552d9ae1426df00c9867c9521ff1af7982dfde3e0b1bdf0736ea452858307358a58c3840c3cefb79dc5ec39a39442529d397fb9c8686606203a49c079f6457d166a0a5400488aee22b0c326d1181956fa45dafa18225668c3659cb89993c86ff8eeef687c9a1334a38c488a96c73b7ffd79314ab70a691df572359eb0dff06cfa2e912a8e0f5dfb71089954495dd78d7e025c26e27a0f822da5d5b0aa89df1ed10aeaeec20bbbbd79f16932092ed5415f71ecdf3a3654247623f1efec56aa6713e3f7fb798d4069c4d4fe7fa871683999faeebffcddc7b35b7ae235da03f48ac524ef53d01204553144dd3b22ccb6f7252ce59bffe167a3518647bef7366e6debaf330679b024110041a1d56af9ebb2f284fb67eb2bae23aba7b04e26b493e39ff80748245980228cc5178ca645ecc81099ca2c8486478127079452546ea6cf2419af6719ac1240cd7f0d22dfce441229cebff9c4677679bc81e4454feb03e4535ef3e42a344a90086dd9d818f678ff2622e3969670e65af29170c8f5a73c9946c1382784d08e1ca55aeaac88ae897b084dab027dc975f9e20427ec0a0fe9914325b21ab6e4c5a7ad149e02e5e091e52ad667ecced1fbaf4c524ef8e15d39d44f50f6b20aa39f731e5e4c7dcefe65a7c5772ee58629aae7a00fb1ca66926cf4e02413db22c66fec631283ec89818eb436697738fca446df33e3a6860f472e2608dd85af2cf885b28b9bad75ad4ba89871e64998eb9a8f1859d03d2b84b0863853e58fe33bd802ef412e2bd182610e2089580b152d41773feb77eed78afd067c895e4b41a4f6f3569ba4d69de8a005dcd0606ba915794ce3e27e5ed84376ea7d792191aaa5582350a967164dc742157c498baa935cdb949e82c6c78c9a01ccb13b5867b74785d9fc948adcfb1eddec1b5836288a0d43e03f1632574ec0447745a27b2dbdba87810a2bec35a77ef3c33a806d96d3ef19738cf706390dc4affe09e257eb980d49b62c3de9729da34922686e8196e2db5557bf29df98d2fe6d5af216050e6bb72447ef05ed157d511356529fe24acaec8cdee9a12422a9a6a25e23c362b07416df79ebd3da110bebee23910dbd1846303f04e8cdfcd5f7a764195ed4c022d6f8aca8419deb1d8334d2b6d1acc940062332d4bf48f7b7c337c5e3dfc20e9b05d6d4dc3bf0c418d55e6312b6d2fecc6ee5611924e44f3a13510f9115eb6228fa9972dfffeb2b5396b68759e5c7d41dbef4d1c29fcc66b9bdfd8fc3c3784aeffe0edf64ef6ed7e79a6daaa9b415cf43bd6466e51711e68f3d51a8866b3c5ef480fe91fe9e089408e808544fe03b740fbc3270fa54366a337e79535874b042c3af921b48e629804b74430eadcf63e28ebb5f6e4737c70d5d12af9fdba63fee20418b5967c6dd331d440a4b86c7175d7315e104f0467790e7f55aa087b37a0777f16789b009bbe17277d07cf28e9408ea13e0f8d1f3c91472a16353538b8f4f59888ffd489211601efbc03087ff3ccdae511996c427be7c5e55f7da1aeada39b7eaf997ea33f75bef389fea8f9d7ce03e1345b559a8e7e32e77af5edb93adc2aaeae2282f96f43472d5ae613fdf6703577f8a7a4efdbd163e6cb323b4aaadd51b4aba6027b57889716fe7df8fe19887996715ab4545969216d870a6c0b6fc83d45a6a795e9e9666eb33d31a7b9e9c923e35b6fc76f93f6edd6aa32b77aa2516f2d257b0fa3bcde69e5728b63425b1846c88e58279b6821851255e88afd0667ff4fa82c75858cba853c3e985d1508e72c0947a242ee6315e82e9cce1aeef659607d0af765fc90e96f2681cae2164322c5f3843395e58ee9058cbe08943765a677b191e9ee6ba55659a1125934a6b4f67115af59926b03adfd1fbfe626a022e51d54e4f717345ef7659a7dcf43ea3d17010b092a74b497c58ee9086c2453072cf499078882cc3c6156698d6d14148e08bd70deb55839c9bb491a54b8221f607f0d5e19de0e85e7942de23384802f1ef154cf0ac469d72adb88834607ade556b7ad94269967899ebeb1b26ded250abb47277dcb7497bec5c0bc9201f862b66bed25b8cda369dfea8af5bcc5bafa394a0e3aa6616f807d14c54ccda9335920c7c1e0a32694a5a38a2a7b41f4e72ba8e7faffee41da3251e9163d6481d73f53475fdf1c7daa48a51a287c704f07d4fb0ce5b1e98fde31fcf6720aacacc10686265ec8d93c724cd71593796bad26e4cf8a967d6b208e337304eea3c471f5ce234e3d738aa7cd16c062cc7f985ac5b444062482a643f63e98619818e7421fddbb596b6e172128e6faa59b3c9e863c46d0ddff3c9ec582bd39cb9f06d4cc0c88db7eae7f1c90fe7524456dd65adb65b6679ead77b11e9911911e3f0418014a42fe9f2909ab05221e3803b62f10c8c56e464978b8edbd97d74ac2835112260f2427eea70fe6cf4f2ee3a0f6922f2e1e8c424046f092a7fac1d094930637c7d5cd42b24c03bfc571fdbb154feac3fb5a77f0f2abfa003f16b8f9887f4d956f74097ee2829e457847a34d647ef9a33e013a201428fd7ee4331407fac4d4657d82276025d7dd3feb1321699ccd7fd2f9d174ce733e93db3f77be2118c5a0fed7ce03e1cc4de7f8ca9f4b827c6e7fd452be4d48564bf9f64a999fbf0d4a5dddf3eda3ff851253fda31273fb95630d823278f2acc674ff891a73f349b33ded9d5f7b0a4d4f0bd3d3cdf7cbf6b4ccf6f44d21ca4c52f6d6a632b77a6291731285a8a9a5cab6ee3c021b45816186a9194d410b8c8dd614e6ebaca6b0a083fdf480b7593ea53485e28da6308a74174e670c46e61a890ff7a5dccd74b84a690a3516297a0b3b4bb97d30fdecc876261245355699fec541661e70a83975056e9428ffacc73bafe14d6b72eb26a431ffcb379d445641bfe91403693ce801bb2fd5ec9b5e526fda3012915ef52cf70fa6a392d423a5fda0b62af30051919927acaacedc2ee055c77dfdf2f98a63d43ff7bbfaf7bf78d55904f56fcea5751ea0fed5bbbfaa7f3973243c42fd63ed7216b1fa47922151fff00051909927cc2aced8bee055ab7a7cfb83c3ea1f01205c14229dd00ee6ba592041dd79247f469ca56d796275709a1c598eaae4e31b7367178632854053939a82e2f8c2e33a05fa0a0a1e00331da60a86f185409caece586d9fb0cb31234a4bcf2931ee8a138877cf720ed263f27ec201c9519fa5039f34a3ba5d8a3619b8667b45c75d5dc22907375c7c000e4950538b7b74d307c96eacc0fcf4370531c2bc3c2350b241241ca4bfa2679d88727c175174a4b54729820a646cbf3ae5c8dfc81162e214a892731555828147ec4de709126521b35c4e9f473a537a4bf03d350095dfbdb34d9710d946351449315546a87a4e40a1aab6d800afde8700d97161212e14432c875585ea43540661223799269480afaa0abd0c9175bbca3459e853c0d92a03e8e889e19a39b928ccdb5d03bb413e6453bcc911aa05410d90b9b64e9c175cc1ffeb9758d8cceeb541fac6fb525b62ee92554f5f08d47778b7c298086c45c6dafbfe9d89b7434325098c31c5136736f0afdd03a5cea22ee21bf601d5ad25b386f5d6114e0797aaf4b28fd781678c6c2a30f848c673b42daec564f84f27b293ba14e0d27dea52884b0fa94b112e3da62e31bae32975a9874bcfa94b7d5c7a3197fa486cea927dd89fce24efa5ec9b5ea1eb65530e50d12b38c3b4241fa0b784f3bd86c287235430d2bab92aa23a99f88499d8d79d17e51ad756e96b7b5cdbbd18934adf1be05eee30d2d796802e2d3e70ad47f7a2dd2e30f70645b9052d198a24a21a907adbd1c5a1962e6f7b9a203af9dbe7b6f1bea976d34ffe7d09937fdbc93f216df4777fb4923a8b3359477c029cfb269a00a1d46b0254304e856bc2538fecad7264997a56fe0f218893b3053dca060538b78b44383853a6fe2625c787160ff8843083644a003a2e0850e32e41b35dfab07c1121eb500fcfbfc9929adc7070bc138994275caf0421aa45cfdd13789ef131833af763aad0116928d5ba129fab20d384cacca922034d3f771f995fc90fee35250a11ae241c43ddc50364a727d451f14fc832ee8ed23fb9580aae502f77e69f11527f2e5aae75fceb8283bbf181101c25157deeb48133d41b29b8bfa0a60539d5551b7e1b8f7808541b2970869ffbca8570805bc1997a7a31c4acc22d8e650c11ede100d2ea95cd754ba2f98a277c29ad017d5ac2f712eec18ef1632f56c212c1c94af187465012a76099d6ba7f8d23077dfa88fada857eeac6b7ac6d8a10f7ab995b726f745cf57eb9057522eb995b1a6fecf5eeff7493c30603c64e7481d877b482ba9dd47bf88459a4a3c32be10429bfddfe7e784beeeedfdc7d96e7378c0c3edd869fb1a7d45e82b2c243d59d5ef3edf6fe2bf6fe01ae99de71236f5ba04fef425bb677fd4afdee0997e93ca8dc99e86d49b4a3dec4c9253d73ef8a95c9ba5d53bad4de4ef9c278f78df586acecedb13cac39b44565e4cecf8f4972448ed6c0446e9f12193d244fcc8b98c69f86022f253a7da2eb22b54fd55c35dfcc370fa82069b615b6ea5ce5e30a90541cf6926d455bd6992b9423f5379e961b23099ea068fd64aebe53f93734aa2a7435eaa71b516502355715d0b1e7b9d122d328cf8d726834b531f44da611e5b8abb902eac86f7a38f867efe9464d4f9f2d73d5c0987277dc5327dd287747b024b9d65354eabd1c56ac12df5b9ea83f3d828a08286ee85aa67e75058adb7b91955b4e9d62cdcdf244eda9ae2e0b7661b5adaeb83eb1b25e9ca474379393f57b7fcc4c78796ac6fd1159c4fa81fa1b9ee17ea2ca0dfef95be200713f728264e58d102794b3a004aa347d16df92b5e49d99b9b52f5a1f5071d3fc08036bc0606c31a1e3e6d9d49c08454b4c4016704dafba08a7843ea8976a893c88a39f5a70bd0aada421697baa0ed522210c00ec3eccb550afdb8ae9219313b70b83d832ac8a999f22e1130fb82d5017e16674c7942621821386524f967e8fe0a12f192e057e00bfad15b3595065d7ad6dbc30dccccc9e9985ad9ded87d6ec43a6959fb4eac6adfcdb56de4fad82efad1cd3ea1d4314e17c9828e3f4e20f397294a2ce92da836f12a0136670a37f8fc84143e7d9e9fe68e792947dd20a04fc0a2cfdb6a460c65737317b6bfa2aefb6a544de1a5fe5458ee8547c75c68232db16889a08c552e2ab4cd2f9a58fc7f822c1cfa38fcced9018e3adeeb47c9f086a9fb357691f79f713996c111501c69d5a47aa9d91a100b3ead5402bb82c41651a9465a69127ee3f96fac316eebf0a3c135b6d0c6b41c1a780e75d69032107b90be1824876b8bab71cd11eab66f06d1bab352a4b7da657bb5a1bad2cbd01d55a42b47fa6cf9913c4d252850f581974dea2bc28fd73fe68942955548bc73f37f2849ada687420817e54138861b2ad8664bf891e25f3c4c567a9d2ce9c33a75ce1bf35d227d0a788d7f7524d59675c429d5c0de37d54cd1e499f495a511345db7ed641334754e6a6d6efda69e6c8fa64ef0bd5dbe1336789acc506a7af92bf7f35c0216fc0a93b18bf5a1c52a73c8554fd5c3de749d98e66e9c9a322a66e5dae016c68bede28c0aa281318e9334fe28a0c073227d407f339e318e56b995393ae390f744836a2f890dc76ac404c83947a13c137a1adff495094a6e1597fa766874f5330f3bd925016991386ecd5f409161ba84cd50308b96e50ebcc6db369ea14438ef7740d93d47cc9ecf406071b0759f1018b7749122e1140b8da24277dd203fa1ddfebb7eea4de9a69acf718ea0585b62d4f4c3a73656efaccc8b21164d1f23efb58202ba7775657945d06562e283b8572f9fcebea9fdb73c29b620970963c35501f21b1bfb0a36f32e1dcb52ded85cf32b2c4c1a9ecc146ea1fe0701a75b0c7d70bf21215d58296711ff1f2802910c01b4e54aa75594435ebdcef2daa68015fc08f2de017eb0f7e6d70056b78e3f1f787a00b2631f8d6c2a9cb3a07dd76e0aa47c5dafefe196a7f5c8e81924dd51cf2a9c7ad9af429c3a45842e50eb538630b15793a540a41d5d9498a6879bf0aed3f75f7a18bbb5b7fbafb80bb976fb78fe632a09037bfdd3d8347657d7bf7ec0177cf1fff74f70a3e9af9eddd04b2574b558b7eb83b531547af7653c3896178745acc4085f230474625b9478203aafd4f3829edc8c5ffe986101589a15acc647ecb296abe613e5aa9b33c6de9d19fe515c8252e083b0ff2745b9027cfa997a3f8ab1263ec886e1e08ce11a1f2c4a008d76d7071b5accd4bfeb9805c1d50d58edcba6c3004b7dad2b74d246565a82b1c7ad172c75a4a612bd3d7b72d08878a93be5adf64f59f1aab505b703be2ba73951b56810808f53e5eb01f7ad712e2d09a51b94d75bc439f20b120077af0b57db56e2a84d0ff4538317efaa92fbca284c30a65843ac0aac5d5a0e6d7bbd03a49b1b8de6d25d76bf2bf97164aeac61cf9b0afa7e2cd655a2635126267392325ae5f8563dc8a845356b9e0bfeada9f80eea6ace73dc84b4452277b690211d7baf7baa49ac2a5ba3720e5d819cb3a10b698ee930489866a4a26640a2887645eb053fc0680d992a481ebbb8ea8ee83a915628a144dbeb09dfa7a656a5b6d54b09b12009ea0a04d8ffa35ddf15efddb9ef565eab974b5eba6e7dcc0f2c4f96a7bba679c27d301a66840db2ff9cbd4d3f7a7030aeed857c5b58849389e48e1544d59e5ac51f2f82da786bc69094f29477090fb075ccee3f5d5f2c4622a8ffc214aa1158ae93bdf08ed3642f68da975418ec0cfdb641bab2f26ef57d5e444174a583bd152564d89b2cc0d898b60796c4a8ee2d488d9469c64fd13ad617d07872f44870fa86e279b4cf47a6ae13af78d8c82a0d4b5ba22ffc639d41794ac4b27bd20893a34ac1b935ff262aca1c8bd5d6df31eb3953eee8fd334f1cf963efda0fa9a483c54351e1145d2612a9b6acef7ef7cfdcb49aeee79bde29d0fa8fa76827c69ca23f34717426b208eef9c4b5fcf4c7ff38fd33f92e2909aff4bd71a88ea1b7754fa713aaaff643a46525452f3517ad1aa4e3cee325e67b6d72fde9cb5ee19e188833e389a2c235390e6d914b85371a4f10c97eb06874b7f8e5b3f7754b486d290eda9acd0730663147ad93f68d56189f0e3e70c77f4f6cf56572b14604ceb128ba718e2b508caacd60a0febc2f98f74452a37a1de28bd547c02e9bf7ce0649487e44f11e5f54a73c758bf6221af0f56c412609a6aea0b55a0e3eee6fe60129116f891eef3a716f7e8316ed717ea3169e7098fe930d3d776d3d612317b118cb4f25d1ea74976f6642bf93b3dbad2b83596637cb882d659d7ef4c5454f8719934ffc9329949b17a4f2d13cffa4ced5118b9c16a4fe1ff3cb822360aa472c4e47b91e735938e9d48215461953cdc3b0066c8fba480208c2ae430d7fa56a1f3b5ddf34edb4b6b270d11c50e7543fbf4883a3da221cb784451ce60bcf44f7a73bb7611d79f4bfce46bfc2be105cef19f2e2f287ca20fd2f804ff8ce8979feb1b03d32166dc82ff72e611a21e4fbd6c12e52f70f8177b56c255bd8372b3a29ddf65a8ed1ef6a0897b28ae64bb43ae0269cffa53a3285ef2f76b6ccb0b8f9802ffcddf7d54b23b94d55a6d59f2d2417622b6724abf34876f610f7b51efea0fc5a9a50ba9b7b83278831de10da842a85848ab20b5eec2600dbde6f99f11fd73082fa8ee8c0b6aaaa74cdb00278edb5e1ef410d679efe2ac0ed2f2ad99adeeb60ee73f7ae29372533e60ebf6f3c85409470799e01ec0a5ab621497c72b2a0d031c03ab3a4bf870090f085a0ee1d538adb10e175b8fbc318ef198120c0195630ad0a59faf4c66a74cb79f427c3219dc0e0651544492645ecd7893cd3909b6c02eec2205037d9606334a8473c3fd019af8c28169e0587df1d594d6425935a904481476346da221afb0ed0b00b027c5099f8ba6b635d79053541bcbf1d87fee2fb5f46c7536982b8a923e91401dae0f31109a206fa4b3b15decd7bf274a9ed0457fbf4fb10d4fd50239961bbc7cff4ce4a4eaedc00f2c73e5ab2b250f132ea42eff3c53081261a61cf1faa4a764249510ffa7ffe7eaafd1174a5843e180f7d933af26dcf91e653538384cfc36eea3e5899648a287e4e5e994fff9f22972d16ebc2aa8efb178148340f153c752664ca525db316564d76e0d7d4a5f88574e2c5d913a42db5f9525ced7337b481a94e8452787d724dad100797823623e013f849727ab28d26364044c096f15d111d32f1f52e61e383cf2b282f3e2ae95796081547be73135cc549a1cf57d45843aa438c3cbc97cc403774053e093491a51df9e03ee186e193f6aa4d742c06aaef971cfe16fcb17ee48820221a4405759e5b00dfa283dd726c49b1c1f4d863415302751e1d3de6c9de897161772347028a5f5801611b1386bad089dd59de5e9ddf620ac99235c0454518b4e11180c5482602fd5c24abdd18b0d5dab2b865b4343ea685139a58514cd3ccb8de50dce36021fa2102f1384d4c9efd15b60e19227692605c6b2964df57fd9ffc1908dc93b513ab35b072d39a924a85a702746077656cd790f2d8e0415577332f01daebf48f1d0ed910b236be1ba8b92ce08684a25eb3fe9b8d01f58dbc724ad7bf8cdb44c494e5e0690f41c5b72e894f99ce1376f4c06aa332273cbb47416b448d5dac6cf2e294a5db096792bfef4565f442f56281ef888d81fbf1f1133b924fb9ff72b93bc6383e73bc966df90c3dcdb76b3bb5d5fc34fee962088d55437177a05fb89e5aa970f5242207cfdf594382125b10017a47766dfcc09f2c0e7ee9c02493ea70990cc99b2b01d7feedc1c1103e18e19c282d5df5d8f194b46162f3d8c55b197128cf58b64bdc0d98c53a759bf7e88e51f83733cae8c814fc734a7a310fd2ba1ee2ea8f263f585a3058fed5d09dde51fc929eb1fc8bbee6c496f8a36642b9b5a2e7af51dc1637a207d0845c51d3024060d08aaf048d3e673b1f81303f838c9dd252211e66c5b47fff85dd514d1bd2a64232a1fee08d6427d2d2457141994c91951965bd20e793e323321c202dafaf161ab480b43e247f503f253585cfb4e4425c068585c3923e0621a2ff469e1346af2dea9f18e18935bcba11a3b2264e75db73ec0f7d2535923677cc80c37faa82096189c59803dd12712dd3a1f73067bd9fdf65e54f77e6ec751396fd3b79803d974551be8f1a40ae9b9a0ae2001df497649cbcc8cf0a6c77f70bcaab29aa01d96835b46623ddcea61fe18eb693ee97ee4aca11b080da440f0f08e3cbdf109e39b9ccc38e38dc145460180343aa7ea90d64aaeba81de554c5409894e65f79d672b10b6605094633a7da194f0a46d0f9ea69695d05b52aa9a9dc4878f6b3e89b5c2be21ade1e3c3aab5847794c79b81ebc78d142a7fd02af7cb48a745127b05b1df1ec5a052c8458fd1a46e9bc346a6d15d95e958d6fe8ff2842a319c63bf4a17dff68c53b47b4a6a6e011a0d6cc34219922087fc68fa9609a4dbfb14bedb253b147ebcc7b8a9489740ce067800d7581f61e304413a4767cc3473a2e3b9671a91060545f61945669c2b0b48e4a121f11b5f698b9eb6aada828279c6135aa936600ba34a9f7abba9576548d0d433eb047adaaff0a3878270cae401eb16f0f605995fb321b9e1e7d1eba1d40de1108ad4c0216dc0162300ac82fd99573b32fa065073c078013f2a10b975eaa95b23c9b9a3b66338a39d1141e7023e23c8441c1ca769afe23c4ce9922ba4fd9ca61c1d38d33f9c29a4ef85cbd4aaf8fb8702414445a7636ab3745bdfda681dcfaf6654a4af54ba221c69ef2c35bc78dfd085fc068ae6846646bda2f1e048f01daff862b92224cbec5ee421cd2717325dc54e32e0e248649e401c827123af8e8076cc2e286f7f91f0484557d80e952e951d56c3f4c35a56a065e7998aca072b4ee62723c7017d7397cd295ea69251dd6ecc4d52d7daa26ad75cf3579f6bd77ab30b3eca96b501faed3dcfc6cb056f7ddda5be5fbc0311eff1c9668ff714530c439602f15a0582b6b0c3abb29388d20abe108cdf6965dfe777410d2d603d14996c4f0247243b1d088d4421567556db1d87736dcb709caa57064f170e92f233e82d545316f98c2b31491f02594759e6eb95033b27c0d3e1918a9f3a177bbc23a6b2ce571b0706d51020479a43545b024899519825650d4543121f7a550a52f0fcfd057b2d7731851901c69e33a58bd69b4b52a8ce3275a140e926e7b764655d28c237e0751fe9e97ec9f43fbbc6a98b54157ecbdded8ed2aae9fef7a90b15cadc29ffa1ffb079d3ffea6ae6a01f1796028fd3911464bf282f502ae25b3657439ddfd70a8cb27c5128a94778a015af6bd76426f45f38a78a27b3cf058543030cefbf6467bb4f5981367efb008d51ea8dd66c84425e6da6e65bbde2ee213831f6103dce010c81efe6940df437023b54114ddc0564d65a2ef99e126a6d3af75c7f901e82c4a25733c4aed897d55169c3594ce4f24406c854aee81f4ebb9c9d3105f058624d7249810b253e3d8d48ee979556436a6a2b2bec6452380d48d901fc300fb95c834953c79e0c1af8ef456a4b161a69958a3e891dc2730579b581d3d4179bb2403f9ef063451649273963a303dccbb54354bc9b5d829585e2de6be0c4a8e83e89df1835e42712cb2468c125468f6a70df4d0477c442b2dfd8c632d1fd7fbea44d5d25d48b7ec9b736d6d3f98aafa45281299b0d6c570cdf4e57bd0c5fda706c5fd3add95f768197b7578c7ff3447f2d4fa4f0dfb701d2b8ee533732589479032b0564ab9453f7076b59baeafb9ff9feeaf5fbfddf1f4c4ab12f064759c1b585da4393b066e4253a9026719247beaa25485ea2a64705b11c6c931cf423959c8e2bd584be15e47666add03909c71f626dc39a8dae4cd5dc90104efaaefc09546d39ee250f3738b9865e267b99a82e2d0aa04256ef196aaf8f249b941190c18985d4da4840ce699f68743ce18c79e5219e4ca902eae574ccdeb094e60ea63af085c7c94571d3e55d4a135821a317a9ee40e84ee831753562fbaf46c1b497c4bb465af110889c10c73bdcfb1e741efdd6af47f01037a102a28f1909389417f78a58356189ddc279f62924ca04554e12c37d31e32a9dc121527460fcc56a0b54a1319df3dd25732e1a0706f66599a0955d945feb365b307e5bd916c6a53727564fef88ec8a09692bb68324872a8dd559ca0b39ad9c55cc7676a6e651157586a6f0fd4db8c8d21cc4a91cf873767cd744eef9ca614eb11fb70edb93b67d171c95b0e1897e34ccb520c613cb93acc0a130efa54dcf2bfba07798df10f9dfec5a76811cf35745c86f27b13fd98a8ccd4fefd8b27ac263c51eaed61536528dd2c40c6f58620751b96ae03206700d8de19f631853b083bd33882c97629b1e692a14d8228b46d06e20007c3ca5b7f722ed252ad16a26d884f7024743f1f7b041831db4b46ab5f6a6280b9c7682843e36f752eb7aaac69975dca0d73fc82b18fa68c26a7aa174092ef420d2778b832ca704c11cd4ac34abea7e73361f5f40b15229c9a0f827aa3aa8a6b274c7c4d784a899cae7acd0aad066661e7a38e437f25ca2749ead1c9524ae54c975fc814fd8db97643a343fd482226e5a2fe247077a9a9b0570f485baaa0dc13abd654a0ddfc8fd51269ed642da3af2c754966ba4706de49a8b3da15e411ccdd770f6e2126ed5b2b57cdb59d754608aef73e314b303641de2da7c768c69680ece176f826a9643da49f7408f1e7946609e5d4af42a0ff8f2fd2dbb10163b7663e9fd9887d61b0820cb3828f57e69a5ef3c732092b6a59bbf4873580b078cbeb83daf164cc70294558b6fcf636778b5e26f0f9eaa1ddf79c9dc59643ac9d3e1b73b9b12cefd997c49bee20c7ae851c6590abd97e4a82ca1cad958adb18c88f99f7d23c01f300103c5eae9ac02a94454a185f98e236e80ed8667796b3711e19fb445d51b14e00355dc7ac0f7c45f62d02c25bb998ef50b022ecd23a9d55f5b849f4bd02116724a8ed268d666060732e1dfe1bd6a6b2df2eae48b148021ffc6eb813ebd28717111bd64a335824dce3d89a6353e86972b22b99ab6ed639eaefa9cef87bd34517aef4f155364ea718d29a2ce0934ea7e52c081379353e2845173392bb07bc615616aee0b326f243fccdc48a8b044bbba073bb4dc0261abfed26bd8f1c10a8b23acb4cc10f4bee6ee83bd6aea7bbe5ecae7ac1f6ca305eb44c285e743144323284970fca9036b146404cc5b47097daef36dd7b13ae9214ea460ab3e1cf8f320041cd41df8416ac0559e3866074525b8f09f57e4b3b6d0c57fb365c9497492c64ba8f2aae8fe87dbf7b6abb25d6ffdfbad7cdb4b5d155bff7e5bdff65254d33b448b02b1735e0b00526ff94bb610b139b1dca70d3566576c89bf244caa1ece32178e606f053bb58755ee42c12641aada553d968afd92b2b70e101bd544a88888c4be7a1a247f88897cd5070291034d254615bd69f9dffea095ddb61c91e34539321e147d884b9528c7457ca4f084c25a1fe74adaf7dd8577f452e629d0d6741e53bae66ccbc39a9d89bd94f393a3ddb40aabfc84c385df6ebc4999ed4ed54db65a058ce63ba26170a62d861e903ad63be01b7e3297d85f06dafd6703a548c90e81d3cf875fc6170aa7ee34dd64d22695d450f67f1bcabf99331071b5fe369cab1326a3a99cfedf1a0d296def777f1fcd05f013f662c2da01346ed0a0c50caec5693c383a8b65a96246d5fbfba83c2eea225ea71b360a486829d8b0c854039ed7b3d323005ad5653b75b366490ca1b9517538bfcff609758391260f0ca977867ad6c7094bd98d6a6e1b440dba688019c12922351178fe8d82e51df289c26399c170b78991fc0b5a9f0fa6e9ce12a97ae4ec544f44291850d0f31eded708d50b1e0962b377d871d1c0e1011729392b9c3c0dab2279ce8bd578ce4549f145610a82b0751ee6b042dec7159985a1ba2859e9554a2935f02d964d9c8c7a2dca589c2607c35c7e3b196e06abcaf258fde1607afee560ca71a572e02ef8d0e8fc7268e498181366119f0d9d5fce06d398ea9a38c8dca2d7f2f4a850508bd8ed42bcabf37239c668f485fd049bcfc38246b87dac286dc711564e0931b14d65a011d5c210f86326457bea1dab19cb7d022fc1465601a2c0ce9a47b090c8518709e94f3945b381895fc9261d686151cbab95f29073b19244987fb64589754ef2aab1ee09015b400589aa4aeb9eec2c05fd1d64a0c7644b01570be8d74199eee7819cae30feaa4a9112efa876185a6f9b845250cc191c100b76daf5143b0632e38053a14b27f715105f1f66602bdf8aff127eed4c3bb68b2a4a5b381d14766801e42ec85b71a8b06a34857bc2b186c2cfdb0b4ed1e9c6050e82a7648d5e15cf95de3b4f44a9fd9060a767b25ebdd933ce952b0384423ccd6a104dd87aa85e505030e1e7b594b0768ed88a858afca5df90f13a0ba329a04bd8b826f2e10aaf8e7aff1409f6e770a4065831ea85331bb1571897f07438b34d8f4e7aa9366a6d4f7076fbe70be25da7d4df8110119fedfe91ff66cd9b747b68a3efb636bbeba444892e4a96e8662e28e9fb4daa4bf4c0f122fa4f8e7c81a81c6a7d0aaf68a77fad918308080d6b28c263e6d709e179f8d789146e39f333743efe391253b9b72d256612cc8c1b34a2c471a70ca73a714763783d8339f7e32e426dd2a67e24dbc833aa649c6566a261e967df9db5d5e3e1c9efd482883738ef0f36a380b5a0805159b34db782461f510e560cf2a29533472c35364c87420c47746d78365e0897e215310902907afdb24b48db2f7a421cece8c7e56d1006d73fbe5971d44a3160ceb692d8cbb7f62ff8f174677d0a9f5299ee5258c71db4521cc665c5a5e5a886f798772402d3c87e5923d4ea2df8bff52aab36804759099803759fddeaab655092eccf3dc0217d62fb345f65809296fb931adb50c5225be7a438e337044107059fa293af65eea0e01182985ca145cf5c0a8483b2ee2b2d83bc3b22576820f83b2495ed2d84147cd277eac1065f8977517f8f4ce049cfad4bb5905b6277f76b2fae0897928500d9e7af386c7b7fb863c80e2aa6530b494c85422c559376e120e71321f431b5d456aaeea6808470fa7d36e166aa43b855e26a9bce56a19cd06091625f0765985aab3c6f7657b86dc8f15587df9ede34478ebfbc9ca28f4d872083797bd931f7cde45b8a4b6c2371e40c587918abd45007b7abcecdab6e66ae62b7cad0ece87a1d0279c791315a8bbd6695556d5fa8b97340d254ff14076c915684ab17a0008b788342878be37ac2f1ca5f96235aa2027e299003f194bba4d2b5443efd1dc486523a1c52ec8e6aea675725ea6c9c80643cd719e557d5cf47512ae59d3f7e6b43814a5ab6454404ef66ecc6a5afcce031a03dc22d08eb16afd9c10d48efd82ae8a9b48fbaa4123c30f258628f9793b934933e7c48a677f0907c069557e45e59a9653b114dded63e704683c3244e7af3d5be52df41cde5b42eff2a1b9c96e50b7b2e0f681bc099d61b5302a37acd9dc9c7d63e8115e9dc8ea3fdaf07424a847b92dbea618415d2837616b0d64a5c6c82a49977f538d87be042e0026fe6985ff5771fdb3370559935b6a281a9a5accbcceaf48557946b7e738623becf0908a790ef1a16506d50bfe53bde9269ad027ac4fb79cc653117032defdb17529a3e9996873dc20d79f3e6fe1abd1f1872a9383446525d11699f8df2c2f16cee3099c7f62f733996057af4a0651eede9f30d2eec5dead30f853ada80736b39194fa7a30f02de865b577ffeadf3b5f310449f2a0406fa46fab942bdaef56ed93870c3ac407ef1498143872b6c07374790dacaf4228df3336c2cee718dbd9ed5ccf9d4d1eb4bdd9d90c7fa794d1f3dc2bb54655af2c4aff49a9cb4ce9a314f6d5699639c29a07d633a318139845d27c11814e95309a70e48265861c00d9d94972804595f4ada6bb3f656f4e8bb8a88c5f3b495e3dec98ecaf42236dc14e2a00bfab68d5c288e8178b1d5cef71d88a2c63cfd98be481874c2e4d8c9d38bec214535e4b3dcdfdca19b06733cfd2a53727eac1287c6b7d3568b1741caa1236e175aaa893bb693d48dd1dded5299ca3f2f077395d781abd5ed0c5665680d84bf473078626c19727f83cf012221399511cd19ac79b79ec8a008b874de1e5e972049135e348c8efefd2e116e01bf6518e61ee177533bab214145a445206ee4eff1739f07fc375c9752f8776f83a3a087b1932775e0a6db3555b2a09780228f71121f9ae90e9d320e2d44259c3b02c50235b9bd87a5724f0849f25c3cd3a6a087f6eff496c84ce10fc3d862181caed0b2eaf395bf5053814e7ca9ed7725e840afc474eeead947169b807c53d64e8af609ca07f9f6fdbc5adafaa3b7d32a895f560bdbea8b5143ea81e4ebf28ec42482282ff0ff69555d3d8f98b49f8012ee5a26d0da9904474dd7eaea55f2947c23975f5d4b40e2305ec54d7b4255e5fe1ea76acd16ce13b83b4d673da2b96eef91d93f97152c613dcd91508fd87c857b83aca342b0bce769df44a054aecb2b037616881a5715113a97e5d6a589041a6208e2dac827856f0a677b14593de1be02d39f7a5602adddb335c4e6dcf59c2c3ae5cddb545cb086833484cc3f48087d106078656cdb60d606905aaf975141c6ba25713600eb5a4fadfd5a23dd19d7b5f790dc68e4db8a8ac618f9b6eea42eb2290f9aacb8d34dfab131a56a720bda32c0196ac7484d0bc9c275f0caadf895b907a8e2ea2897b7aab943be44b2677e98880d94f7a43dee58aad484301766a96c5c20041624e8569965710b5aa0091330bebbb785b210acb0d9fa73ca3383c0789ac3848bc19e38612a945bcf99af1f272a968acc7231d037a384e1cbbc9532f2bbec076ab690c10597209dec60320a9b4dc683a2a8c485a47097c0a33d2a4efe24563c3bfbbb24c239953b9c036558eb08e4bd95f03ac115c813baf87581e38c96be8097a60a2f58b0873b36e269e98e39f4b8851373e468293157e876d17ab142319daa36e88638a50239500e17ff9b913e2542bd75f57b1d6a802e8ee980b697aa4696c37b3a6dcba17c746d24acf5a613882ddce31018b2a5bfcbe1bf6b3c209835f9e9b998fd89803e28e4023f16e1cb2a0d99772836d7830b712269894c64599ae571e4c0c121c70aaf5e48d58a41a00db80e12c922ae1456a3289053e6f7c4dfa25bafb08242009197ca45669f50bb838392422b0776a3542f1c4627dce51a8a1ebb5cfbe6c74acd409bc6daee575f28503f38c0656129512b49fa70cb9254751e5703f33fa0e213fe9535ec643c979c641506087b8fb3605c610b4ab3152bb5a7734f8d55cef82df2350e9da9b8bce108db1ec7db88cc21a3b1e7e58c9365e7e4c9518f33f36b57a8fb3d153eecd1a946f1441f14fa705716c3e42dd591f30bfb2ba07bd6fa566f2f1382b078ba1a177c10fac2bdcc0c8bb02913e4aaaa2bc66a9738d85f2e641a37e0e61d64e67b30a5993a3ab7135aca71757272a97bb17e213cfe9eeb74ef6a2d9be987b1a35dbd99019f3873d12e81ba7a09a3eb6d55e74fb14e4df45c6626761c6626bd8219213fa17a3e993f7c3d8141f6252af758a57dca6f20059dab3a1f61ef3a47066c176aa81954acc5af11e903eedbc29fe519bc1e27b133a1077bbf8f3cf25d1d102a85fadc49079b7c2a0b7e8d8a4a9b8020bd84f8a2640325b6e022d0d3d141b4f18fab2eb330d4d7ee421a67af5c8061336970e0afc8f7ae68b93b73b5bb111db905bb69fa061612ceb93e7eae6d85c219cbd2e6664e1244f554dd20aa7d538c86d7262f0fcb174ef1fbe4ae786afaa6caa939e806c7433c86487fcc6f6338b017b7a620f9faf18731b75e29e6f0b4204fcad2bd484b89953b5754975439b37b7c4094f52d48e64c986941b7915307bb2727adbe18e653e915ef30479772cf1ba27294df2d525554535e6a8d9234c6b09aca187a548e7d147a3395ff9c5ef15b3ac6bf4fbb18f1d149bb755cf977b918434c739ddf2c574e7bf3ce32cf6f51a9cbb8cc50707cc0b04cb689591164e214581ac0e1b7e4b9d1aad89001cf4b59670f5ca39e9d9ba6b98e34c381c93220acdf1ee132709a47c70d03a55724f88d5028717935956aa48ae6675ecd350691d44f3c70bc7185a89d545921b819ed9185f038468e518581062bb896c7d54caa0d9d7ca663beb369f3ad10e7caeeb072df15ea0effbedcb14ec7d0552a04a1c6aa6aa2767da19e5a29cded28ab1b8e8a206816350148078c6a4b304d5a150d93e85244d7853bf807d5b881165aa2e8f3a11ca3667ba2d12689516d0b6828ef790eaae7e2249581687c112bb6c851fd07a7fc87ec145a5e9c9d7267fd909d42511235b7e149ff0ff353ae717ecab7d412f4bf54064bf19f26b0aca4388fe4fd8840d73b39274e2ea72867d0739379cae42f2dd57f9fbf845043fc806c02d356fdf7094c370f484e5cb5371b07db5775b6a043b2264a88853a67b3cde8fff8903810d2589d49df384bf6d9d71e28bec717978d8cc4eb55281bfdf35c4e96675f74c74e113535f4391f08f5b2033ee37d0f90cf33178cc6721f7d00a736537497d3fc6f33a7d47f9c398595778d57de0f594f14325da796eeb7a5ed34d58fdb66687d8aeb47519d683d5ee496d6e34b5da6672712ea03b3b36b5086a5ead4a96080b81e33929b15bf039c5c43bcd632b002d1454dbe3c0af06c07290d859123870207f1c79f9c6e19a70984b90fa471d16acb5310e7a5f691596d9b91c2e2e91b3cb777cdc3749cd8df46c5fee339e311f65579fb4c6f436291535fb708f1bc2caad95d9ab67de686c788985d645ad61346ffad0152d4e22e39b400c5e76d604e2db30d1677428d5b465bba39e2c8cb60eee0c784c755daf436923ddc936475a69486668696ea30125e59ae89f783cea410eccc0834c4ef3a19296357f545b4870580e48b1b0b602c4b64e0abc1b59128429935498ad0d946525b6ce1a43f515d02044e796acf6bfe52e4ab507339614f15cd8e9ac6f6a63178404d4dfe2bb0b5dd790d8a348b62e39b7542d4d06dfac0e7ac0c5b8d54623d7b44a384f7aed2daa2c27e778217585637393e1867cf420ae77106f47495d764ad66f04a6503ae4de91d836329399b07c24559f89242e0b219640297d35a7699a38bfebcf66d2d185200e56d1bfff49e905c647a154d415570b7261209901facaa321dd90cf6a885c0914dbcbb7abd96bf2b6fafcddccf5bea3252b1e67f95d58c8ea1eecf36e240151837c27ccabe1011b933dcadbcdc1ca5bf9a596a8e080182ded1ba06a30a45c610a51cd5683d0dd6e49b3105a536f0d84444fa0688174ab69ce0c2da426f0360ce9f03755041188178810dd88793b797e4bb7d3ddf25865ea3f3cdea9d912bfef17cf7dde6bd78e46aa81208604865339c2981a5326fa2cda72915c95ccb9d9d99a4c5084c7117fd8986537b9ddd08695bb0feb32dc888c3f896c414ccdf26d7de9a8266fd2d01521a924d68376e5646ca24642acedf4cc2dba1fc6011167fb40801b03d07e4c62a044dc9c5f48f6db60421b00b7abafdba8d542c7c51624356429fd5821464417a9a2065cafcff8cfeff42ff1f19aa3305c4525f74bd290be79a795747785f7596eab55a6c2d7a5369dc619bb24c228c5e516e79b35dd2169877966613a6ac3c2fb6f20e2067d63bdb1bcb239f508b463c8af0cb6859b3a664f587807372ce435e34658250f1ce72c9d7574d887ed25e82a25cf3f5028f9b9275fcab2c1a2151491d74de51d67988a5727c5c3ac2dbcb32b7d77b71080e186f2db7dcfbae09a5959c1dde52ed8d6ad284b64c22c21fab235f3f717bda24fe5c9d8d3fede6fad58c9e67817cc07e5516f9faa89cb2c6fda61c9b59afc924b4e3cd5509f9a7ccff80201a8595037268eb097bd12b5409610d8443de5f02222a720a3a5d6a429c8cfa8a2f9c360e304ea9f18c5f9c9317462cbeca4403076e47b8f05063a265f9c27f23367094def14cbd66cf14980c114c2a221113b9cc7bc0c7421f3e820efff1ae15c7673ac9704c90bdffbeee1164c5593c273d6cc9ad1c79493feab5c323d898095657d94e776debb3602f510129b9c8ee0ed54c7e1949e17e74b26f44ec2ba9fe8092f708f5f1b5540b32ec4870b588cddebe825ac21ab58543d4c9a0a1be4496275ef587dc288e15803f03258af37aaa03c4a246dd0434c09a3742cb92d3e7e354e331b675b8236fa802e874aa809cfedc5f63d245aa1706be2131d83295fe0e2eeb4f46d5149569b0eab09058c750b04f51904c084305060675d2e5060d2062b9ca87b1577a008a4ff9a3f18fc69ab8c09eab8614e5dcabd62fbf2ea4f09a88631508d1f9594d3f74ac320fad3d5831dd13e91bcdeca0c8d073b692f80fc54e8e1f885c1f9f62f4105ff4842238da1eb0d2fe988c18e7055048fd67e2405bb3063fa84486770696857fa16f1131d503e99d9da56decd15ecc4d99efe05b53a683bef32c9b71b3484b2aa5cfd093ee9550ac760ad51952bd43f374f5b106c4248dc16a30fb43157ed1149b25e315d8973a9c61da9b40f1ed255fcfbe6f0bf3ca5311cf6b480e49988c5f14787df9e43f122ba42e71ada3c7eabcf85a0eef2431c1bb7b0955ba3fbbb7fa5a8e536dff785a89dad785fba75b267feba79b420f815367384d836858f18026f2a5adc0800d72060982a6b78fdcafb11af05f249a388d93f0d6ce91934d180d36e414d0933152a86c8e5a03028df757afbfbfff23157b7ed52a1830574d19dd2e53f1ce404e2c02ca2469da00f2f32275285fe5c4e16b0a120d77340f03c28cc209618bfc0e4260d6c05cf1b1cb6fdf64c8b97551da6448a73db0734515dd062f85ab9b7262e5c23802564cd15c46e0d548524501960920b15d86ae6ba317ca6f7eac8c8b576f8981b0450e4b36688eb19508aaf7d5b8bd1a572a60acca84a06722ccb3990b830d22ce3f13b454e5d5892f38d63b0184f06ffd59cfdb542ec80528e42e8914e49520e2d6e1f7a0570dc4ebb1d5b29410431faa5f93e4d4f084c6c43407ab61cde4175cafdbecae78fe1bb61023a7717b1955bcbf7d965228442d6c90fa2d7692ebcdc0aa1069e5b8bff0532537634dda5ad942ecec136395aae929d35d9e09403e841b86b14605e6464a2218dd3ae3387996b132dec971b0049460dcc84209f4fa314002fae52857e0fa5002262ec12fec6b3ee3ddc8504a1df2322e6ba5d6f2c84d4fd9cb67d343de68bcf443519aaeff124e71d3e194bf8566fe4588e43f8a7514f2a4660c814a2bf21b94f2093c6c2dcb7cb592cffa7eaa7cbd96e9a39eff2de851b9230bac78277628f7b59caa1b673c5969f313f740fd3a4f8f99c6a56962d16d653335e24fa1eecb3fbe012aa00f6a1167e0cef92ccd29f82c4b0481701ffb9927554049ff9e3236f399eefd3154cdf88e5af60e7d208ef9517aa2fb608e71e740855309fdc479991ef2586edbb1dfd348c32d33dfdc7e0772a5988f71c044d8c7d4471b49d1a3528b2173bddd7165fdc948b14fbd492ab67b55930f9a8959f60b9d460a0b8ec80e48ce1aa6fa859d7ebf274b090f6f56bbd3c26c7977675e30bb4ee8e633575c3b7c65dd504bf07c54389c1dfe619d65676319af4aac6ca783d47076d5385f9b52e2df25171e3b8193a9a832ef744ecf445055634a966ddfcc4863aa8c65d78562ea0a050799b70ad38e9c5776d927a24475ce59d1323c238775bcd37bc6ae4b9a45ba6fb7cb66add08934eec4ccd91e55b9e8593b5788937b3572dc13ea7a17df7b8f7bb54d1e117737c9e4861462a4ce2ae30e59d9c2bddac422146d3889138534f41eea9751507d307a34c19875ea709bcd38b332ce8077ea5c2791aa062d5b9c8e10effc69e2655bc7dbb28059ba2fe6bf0ba9b7624aea0c8573bfc62e1ab5331eb9d589fcc9af375f6d34bbdda0de9672e6bce696fd0af0fb458874ae69dd1b22cd06932b17c05a742669acda0d200a5f90881c3f2b115345dec37446d937312667ab18d817df399ba5761b1d7a7492ad41d2dd900c0fa593c4269d3ed862ea821db1cf384f942190f7a8d1a4cd2ac284bda45372cca1a68a183f643f28f7e46fc021b65709e9113e5e30ef65efa8b23558014e736fcf5a70dfbb423ddc365ed8565c91556b59d1182c5740446133d5bdf42af209e7a3c7dfd0e6a6636fbb371aacf0eb788946a43567a7ac7636a648a172076b16da1edaf6522dd91b4492ac03f3e7044e817d2f7562a8b24492ad5e81de33fe5905b204d49e96125ff75648fc213504075af39cccec22eb7227d4c4aef4d0932754d541d6cc9d49dd77cfa9540452ba36f06c982614d9294f53c61852613c664059c8e6d49863b789326a6e8f66cc943aa68476e1cea6ca7ad71a7df1e9dbb438cc2bcb3ea2e313fb1ef529d67824c67698ed0658bb9ca5b3025633ce057c80c6237ef9c063e0ad5c705c532e35ee7c5fb7ad5034e4ba051c6d1b11ad47cb156e8796ee759795674aa87b6b287aa0cbd587bafee2652c11bde491ec5de961bce526437231b7944bbd6028458a890bdc2e71d8559fe0c16b2a0cdba440aef3129fd37702b4da9c5871e414fb0513b535c90bacb6eab095090db09310e8d926c7dfe35332c73461d738a56a40c64efcc066eb4f1de9a3a2d68204edeb49201f742b33b80a409fefe3b932a197aef0afd8acbb3143c0eb883f07d5bbef3ccf7ba6549f67da3aff68768bdcca10264fed4c3baa12a56e4806e3178e390687c2ed706e799a40706148a391ec1a202368c35912739e003a1a37e604af95d84a43e9f16c6639912876180b1d26bc6ed779ccc7061a30cad01e51f84015e508fb680cd117a75cc3f97c00d87efc3dbf3cd5d5a1c25d5dd25d054f546e84c750bdb971921983c9af5c77d8d0d7a6d4411fd17e78c7df0d95428bd91cf69114774db540a0e33de7a526e4f2e37b35d014d3e517af313c94301a582a58568373277e8d88232424731e0a9c273fa7ae4da2bcf8367fea68260856aec986d7e30b1ef512ef091110209add6623046ebbd527e40e07e40a5a80e7d8a38c55322191ffb6eb684d836b06a0bac04c1e51989d29bfe6c834a9ab151369309b1eff3c413ac4d48d1b6bb17c987281ebbee553495d125ba81259439673b143a590ac6f44c9f5363b193de178a7674a1058e6b0bf400ac499e126d9bf3bc3afbe3e9702440dc5102031b74a79509fc87cf12b1d525550b3d5af75ac40784b76a6c25f8cd9abd739c99a741c83f545443b58518ed46b139de4c0858f2a19fea96d9d2469200af5bb847732263e65784d03a49ea04c2aa2066b4edcfb6d045b59a0a439658be4a631980b2833f2d149aebf402f9c6b75503de3c0e94e5b66e45de156e56f43d72a067b2b76e0f9c7b41139cc538298ee36c9a06d21c8dd2523b768afe599765a78695b8158da84216ac8e9c0face20772146862a496172550a9ca34abcfcb408979903a64aaaeb4383bc8a1e0e8aadf367111ad3b472e6c74c16e1150b72d85ad967886ee367daba12c190f20eac9e1c4948672cf3073c6741ebd6bbc7e1f5f4e3e1755ccb44949f00e87f993dfc3c2af25b16d575c5f77c8a4deb8d16caa1c22b447773f56f144b26b2dff8a9656780bec2ec859e50f7bc17f05727bd33940d0330d5f5819499fe11196f081febc691505745e5c8517b812ac575c9e93060846700d4e31ff7fb41ede4ea0972454bc6a91aab3239e8ef1150fc4ef411bbc7a87632ea6f7ce6db9913d0dc93eb585db1535f67dde35e1514a2ced8073b35555dbeae9f7d5047c718089ce887004275a1be951f739a3805a8f0b2badbc0f9385c4e550aee112c9eac4054d5c9de80586fdd42be5b31f84d38a9a542ba62e6331ed5fa9a021ecca0bbe8c5e57cace1b7c100fc460baef52dae02a5ba810b970bd226e946549a17396188bf9d9ebe89a225a5a88a6103f09c37f2c90700bda07621d6382443cf21cfc41fc48ddaa7c48dd321f7fb984b00bb423d4fc9a6702a4f7adddd2734c6633a9a51c8a34ab100a7463444344ad4080057ea00f5b9af7d2864156adcab2305ee9d0ff3b0cec95e8d116239aa3962d258321a9dc73c5cf0c315021bfea9c549fc933b184d9caacc952b96728a5d0e15eab5c65c1ea03bbd6dbde6d64a706e5892303981a6e88cc893e08f311f9b9ef52e866096983e0223016530044720f2fb39f36d738f098542367ebe6de714a1002c99fde8fcbda76db627a485fdd053153d713b6894d36fcd1483dbf2b4f60eccf89373a0e21c50a87e1edf4674d8f145fd5ece827edcf09de7fbb47244c5d7aeaa40173fc1fd660d4444aaf883b7ede20312115de79cfa4bbcef2166bd0dd14bb9472eb5ca3f731c7b0af714951c1fe97fbb1f7a18f61337de5059a0cebe6fac33f594781a50817424afe9516cc99c07f240bc5f41f07970e2b0ec5182c8b8a8d535f59077cdbdbe08b850086900bd7a98a4df6f98fb66cbe5676da4e35668f79724eaf747933655f4284826475ee3f2aacddf18b49a1759c4762898729785363457c0bda255c0391cd0686b728e7e666d8ade540ce734a812a2055df6ea5ae5b95bd062c89bdf1aa1b593da027e6cf6b3ceed2579b0545dee10ad074c59bd263e928d16769007be5571847aba3c26e88c578a29174826af1501a60701c2c054116680bccd912cc2433456b51d8b56721744564fac7692b02b9e104b394330a8a1b53d1717bd0281137c30b2874244c4ac82a7d1d58e5148945d609a1807c094ef8d22a3f3a5dbb0ee60da74a98d135fa43691507a76e9ea490951508b0e96839553c2393bdb144c414c64a183786b1e53ce6806e265100fc823a36a27e24158a170e6b20a27795d369a905c104383c92387eb841509e7b98959c9cb1c3743f9ffc1ecd1aa49217268f69a37cd465074c512cd16493347a8b2e2cb8780e341ccc2b078b4264a8f6a4cb78bab9c703f6bdcb07a64ec1d463545b3b23c90575e993f391dac9071be5428d8d558c7deea8b04bdb02b9ca322621045f4716223ef81ec8033068afc15628cec3e9719fe40bf5f60bb0c1eb8039b6445d4321a14ce00e6d805ea00e0cae994795be0b584bb6c23c7244cfa73781df272eba4f90b970462fa32656eb4d8d287a8c7eeac2a45a186b1a722aef103cd807c15c4cab898b2df8bc6bb90c43b1fb22b578bda334df630d1317b37d4f11be8430b49d01d35f76af45f71e483ea172fc9027c44e9a282ac594533ccd25b8e5e22c2fc38282a8842aa5c6f6d758753b249cec7e842eec3c19a260e94a021d359bc5a091ba77d44f4b2f76c31f5a7278235d885c63c0d28c9b094a0c15818c1bac083ea08f905931383538923776f37c800126742216cd4b4f3c3b0e0759c3ba4a6326a21e7e38657260e4833f212b68226692a6174bde9674f2475f7498e9d317c8ea06ffee373a94883182e204df517dec8b9dcf60c9d0483b4965035c392f1d396b8f8fd4d8907d476d8d3b8e2120f05e8415cc0617a0263e28ceba7ad298015ac06376d32551e8457a7110639f4d59d4f28f6f9c506dc0f0b9b9c0a625086ae77d51d0fa1328e48f77c18a0aed53b83574330fd9a0c92fe916db612fb3d4137a91e4a60428002eb1e18d41acd61595282a1cbd1f3bd0d2d41e47f5efae69e11a9d66e5ea56a4ac0a944cc9175f8666703eba6a604390bb9a6c49a9288bab341fc21093b47710714edbc2e393cb5547fad28517fb122a260d5cf5a6941e3a1af095bb067ea33dcf5ada4a43f7b4e8110319add4e9ffec66fc52daaadd8d1bedf3a0382093dd609c7b2d93a6247147f04e07eaaf660280376ed23bfdcfbb242d1f2ccc5e21df982a07aeabf32ec6800f0bd41f15f901363eba807cb1185adb3018211375db7ce5ce5abecb4d586498d4162d33404a640ae0c154167db2f11cd280524874b4cd9652e230eb75a9233e3794f53bfda3a05b65e586c37559e147bdefe13e6d190d77e6a9699aad58bd5f76fb35cc72c730b30d133ebe012beebbf4deab92889c46127310643a7882df141f3fc6e654059ccb1b729caa36d13e4674264346ffcc8f0d0a7a3ae7c91498db875510207b1936c26df3ca827164539929567ea714c3220ac7331c60a666d69cf773261fb58ed620bd9004981062ece3846bc6324c944c6a43bb4a9c4499607c896b15225fa0a44af9556bdc9470614e456e657297fb97ae6ea3d3969956c03f3f1f25cda658585d45b8f559ce36aea851ab3c1f336d4aa0da6b6204fc356f723c8c4b95ea2ea81e16abd0b562885ea836d9076858404d43914e04d452a2c35e88f918412ccd658d7f931ec39673221013591e7b90256e732e7828f40b07593786e5cf3305dc5599f29ce5b826e1b9c574c78862f46bab9ddde2d65fa39f8597933420006a3b73fbcc64088f71d79927b64f379f33316d4153c9fa515ef553cb88c423c2bda3a77f1d940338960c55c4275aeb593d89ae116860377ccbad3dbff7cecc0cfadd72a33f42b1dde558c7ccd8942ff74e8f5767289b11502fe24524051adc3cb5119711fb41b5e1eafeb4d08d0e89ec09174e5abf537bdb08f9255c20974c10800836ca3af0a3bc1e027d15fe07eadeadc26c7b5cbab1c543990f02aca63cc65e788997a218b78d09ceb35ba90942434958217624453d61ddfff619a870811aabc4d027a427ca3828c9df717e6a2218c3ae63b98e0bfde985cb8e111933b95ab05bff073ea85b7dc38a787a9ae2a8759f9840151a573371038d81a03cbd0dc3a1f5f56cc60493446532ee50c3dfeaec4143ba8eee13ee7e8ba8b20301dcfefa46bf5e9332eb9e2499766fdc9320c5bee38c5affb096f7c0865e093dcc6068cba7c341977c2a3b522467249e2b5d7c2d14e1a61af718fbf9a287ce014490a756b6fb8bc1c20e15abfbc37639712258286862a481acfc83d79136b8886cde5e1950a832071e8350e6e8fc15193798463d49e604fc09793dcc38fb0960566b83f69b1a4c432b418f7aa4c47f849ac105c9bcb5507f2997994af646d4fe1fe5d3e9a3bdeb58945d81a8f83241578467bf03f6527754bf2947d5b540b29a20f5792d77b73303b0631a0988ebee0675e904e77d16b7a0cbb71c5e355957c7df0cde4fafb97f4805b18297ec4e53ee5054cf5adf7c9e93eeef42e2f2bd4e9416e5333db4d2b0d832d4249e166624afde975b29d28e45925ccca11399de85bbc1570136a7541df987129c675c4e6d2851da656a6a63148d483024eee700d7effd1955d70e9aa88f13d5e1160b31d028dd37166c46c06acefb1b2899ac7e152893b1717a728a956c6e73d004bd23fc220426ea24765af926a168e50afa763bca29da7d26b3c5f6e4c4d7c42579f67338b5b03bf08e242b424873900f6adabe42697f32f56f4e3fb75f6c35bd277f914ce30f51db41a919e748f4a14fe6d92fd7ce64b05006b9abb3ca11ea12a52a29f3682267094f7a7206a7b99146532b71ed5f0a2ad038e976115696ea4e3dd19bc4132c5467d3253d2ca256fedc665c70b33aec459cc4e6ffd4fd3ab9e72373388e9e5c819dc1ec2c7527ba6592d20fcbc90452c5acc9fb7000f773819583d7d925cd95b5c46aba7752b5d0299f9c169e3387b5932b592aaffa4f566c3d1cb3d94f0178ca0488d414fd4e05a13795ae8dd3824e85c55e3cebcbc3914d6340548a552af3fbf2410059808e1a71f856d43c9b3213386028c3ab573e6b5cc24fcab5e0af02d345dca3fb247e77f3247b9473dfd7b7918fe34453562997adcade5ed1ccca87db405aae6ed3f9d04c62c09e440f9c97c501d85ff603e7eee30999a5038e57f38359b39a5dfee657ef0b7e5838418ff32669c507614e19552479ca57df83e916778753ca08a7c38c7fda591ef6e02284a6f7031919372e6250679703cdc7c04c0a55838eda0fb057bfc97f7a07a86b368031fa577e42362db36934638c3d214999e361be27ac2aa50da305cf7ab06a1e0ed9fb8eedcfa14bf0e1556e5df5d4a4dba32294576e3b3a4f4c02be07d99fb23e10066b7b8643f9eb961f78ae3ec457f63e241f50ad98ddf6738d122d1a59e4312738f8017706988e0e4e2d37099455f1fc317f8557b574e6a2471113bc81d60a3d4d23e11e65a79673e1f78056e1dad57bd6c1cf35718d71645785a266b5fdf866a422fbb835e256bd5d65fd17b316e44e1ed08ead16fe2a37cddf80d73301fba14d5fbc863db982556c2d707e8b64b5e6226e1a8f6ad502cd42b6cb73ec63f8f1726d282754f4cd517ef7456a363a17e0105cf784612986fbaddcde6c3add8df75a6cc14ca6515deed16fda971a81bfff09dc3efdff9fe7ffe9df973ad9846e00cc4a49efe904feb05c494979fa56790a85b6e27d0792acd983ba40cbd692a7333157bed5de13cdf4edf075ba037cd6e27ee97663753a6c692171ecd185e3459baa170f732a552789c7977e54a5d289411bfa16ef5e3db3b3fbebd5109d0e4fe97174d64f8cfe34ff5e1b65382d65fa7536fa332b4fc0d421470ca20da785629e0df1b05f7607d2cd4fe356d7de4094fc06c1d4580620f3f1a21658f6cdd34bdc7e3d42e75f4d95090c7d75f86e2ad1d583d550c162e737e205b3d87ac6552bafff6a4bba3aa7460f69c6f9ee48a636f6e5f39cff308cfdbc0ce12c042cf0ea677565f8c9e39d0b3d8b2d60876099520b4c07b4b6624c5e6178676c1a8f36b9a93a008f782cf67e6328128b9848e0a450b50ea68f264bd0bf558dde0d4d8dc654f049719c00de17f0558633f8f7a085149afe51efb2836daca71db56205e0ec8b17bdd3e25a2a0479181c91331c14ce9872be5577098b837a26b1fe32733b299146a239b704c5e658d9d2618b349b89da2f9e28970a9138eb32ee34e86c2f998c67f7d0af5e8c19a468ce6d5f245de784c1bf4f1fad349fc765a7c6f9e92e42b7f1b3f0e19c37990f9e5032ba10105e7383e3cc9445267d87fc0a5e0888c3e343fb19deaf32f1eb9736784bef16347332037e8d81bf5b136c7fd942b7a3291e91708abc8413b70255f7a11bf4ea6b5377d3603f7847adb42caf81b9a40b5e029c70cf08c13d8eca53a66c132c243de9934f73ae2702c6c35feb1cae883ca9b5ea5704b782306f48e49dcf48beb7459bbca9a153c45dc6a144fe6ef71c6ea8688f81cf355ea9216a2ba2a6404454b9e80316a6e408344e932181e0d1cb9fd261fd40cc5d3531408554549f6a0be41c64963c309cbf4b7a1f7a1b1a5aa2899c4107619a2f18f79215b95e31ef31b6ca8111c40c178cba5ab689468c56b8290d36224f794f7dbbfa2922451fa7e0af1b925afde6003115e3f4b43a5acaae41e5ba148b65a40fd8d6658c1399232479c5cf8dac59fa799b638f50eb78447cc7777a21c62aabb89c7bdfe889798c02b19acf75805132e78f7c3ac87c2992b3d8fee43e2a28fca7ff9e2a67edb1fc6305b24334d9eebcdaf5f9e0ae1f97a0ca82b35ee61c6b77f9cf10566bcfc1fcd3805b6a3eaef338edec3d3df675c5f8203be2a476c854c676915bf34fbd3ab1f55703bfdf5ff6afad3039a9801e10009ff30146d59ab900890a04ef1d6d821ebe90fa32963345b3af58817416b23e951152388893935612f703c18233651c949049b737a50578553f253d4364a9f653f9e13ee912b2ae8c54139229c5cb6e5fa1b7a00ad2314362b26f7f0cb4eca7b171177be5aab03da1d69d2026e5372d8c54479337956d2f4d1f049a76e51ee595346d7944e8ba25b45b98339398bdb2c8859da502732e886f02f6224d7f03df0d977208c29939903cb4c66f66b8e02395952090598f076ff8f382b3652385b3bc54ea195a55384a11e818d054d4594a7d9eeed06daaaba3a4cca921eee3655a64fbf3da5731a041b6b608cd4638211ce974e7e07022ecae76393439d6fdbe430f549a338434ddb397d2eadb1c38a1f94512aa1f2106797bed2c2d8493afc7bcd15d3488e089963a02c144a03675193f33c0a3b85125364502e0709d461458a2aa0147d203929c9874ba5c769539994a5891c81cc8ffd914fa4912c5501499fb6e98cba41ae0c2840d24f2069e514f1caaba7542364e044848853ac0d94c83d7d327577cbc09c56a898caab0df5ececc76c4cd030fc02ed97ee9edc62e1ecd164f7abba5c81e211d6cb7b223dab2bcea91a01d24d3b2641dd47c2ed20bd5bcb94d6fdc44f7e11d1b8af67762ff92a0dcf79ad62b0bf15f8a4703de3fe39a2cee0ff621b0a97cadc4f67460eb8cea50d85bd3f26742d44d6f8112185d2bbde50a24c6fe7ac8851cb212e25255c8a23dec1a89d9307ae730d92586cad9b2035daa9af7aeeb2414000d10784d9306f90b94029ac7e0ea673b6ea057ddda5be39a0bddd2ae93c4c3042bbe3e2c300d69600c3ee3720f26c31d77d5fa8ce82a49fb8024560ed24901eb6d87340b3b2825e462bf51e83750d1005074cfd33f61c03a1116e9c546d8f0b2da2f7e2cad4f50c6265fd9162d00bf5e31f8ef0ce0ed6f08aebf1e815b894cd54a9f82956607191f2307ab438bb39635313a5dd531e7f169067de0532d0e8d049fca844909960937a350fa4b85ee3935ee40cc9f7c0d04b0fa77819b197574a0a8a0a301597723d4a25faace08afdaf475b470128ee669e41826646aede0ec8b09e907fedd6174af12f536b6cb2635a9c29439c545c24086ca4dd0d9c7465a2f00da9eae0fde79e74f3970a31268a1d6cfbcc9c381dca0a0f5ec816e6a00fcda236417f9cc50e27d3d22b7a7a25a54acb2f16c92c72722b0281913e62972aeeded71f208497f5fb3d1ebeb8f3b2592ac0e22103bed29fa8895e39efd7f4fa74986726b981d4ee3372e3298cff529a1330a08b55fa85a07d285abdda67fad61922f94df069dde75e491cc23c9b6aa5cc29cbd51703eba9aff5575ce1c9161b566e46b6507aaf3030a044ea18d78037b2b1f19c08ebda33c9e2f29641b9646699a21ddb2d831549e10b172d2ee8eb084501b40c9c76240b212b020321766abc6128ff6863921edff5506cfe83aa7eec94099c3a6506a39258162b392395e39322f64c49ce94239fa60b42aba7fafb240ca193e4260eafbb0ccdc34b91e3ff7da140ce5441762f4efbe19869312a67e49021438d881e94e036d3769ada2120f8a31ef8b1855938618c57a63180df1a8b8e9967f5e7f11225b50144ee9528b67ba78f64b24618855ddd7da742185d19d1babbb178b582a6467dea7f0725b940ff1956774c8700ca8036443432d7ac9cadcf74fd0e770735a716c118520629b55ca5318f3ce846cbf288cb57bf3a5499e129642944df7f6ebeff8c8d3fc8f30992d8faa69c7af5fb122860094ce484c63dd8a25f4ce501d75adc0958a5d25dceb082b10aa01657b3abe0f1b755b04149bc6576157ca517013759df2e02aeddb8e645c0a32c8789269f5d048f93a7cc7b8ca4e15f8026d9b114f80ad9e591bf5902aeb0c772813530802bafbcd0635011e9223fba40ae2a876e7af9d452202c53fab3ba0c59cb111a704874eaf9fc1f8faf30737c3942b5b64ea200a80e9126e5f15368643afd26c2c31b893cd4697bda2f108e3b2c4c25a811a6af780fbaac7dfad95a214fead6ef4cb203f5ec2e55dc497947d2e21305cbcf32fee1b800ca59a60f1a5774eefefafc115728d59f33bcda7f3b97de891be08d4a763e218d5edc4cc4e58dc6b80432f10d2f86a60ff170c670137ae5bb6fd3113fcb39cad4cd629399163557d977151155e6f1be66abbf3c2379653d5c3a3a9d260df6e5b2547f3d9b0e2a73366d3c7c3350d1c0328e0beb5d1648ef020dde1503fab9a21e54e2e71a51ecaec0c012b13ee38975a975926312aa11d63e4eb555a9b5571cb885ca7db2715616d979b5e182c02b7d76ae4badb5a26e36a556072912ac456d4bad6eee15bfd8b4c4b7a516151ea04b6d3c64ad9f77dd6401feadd4b0c8f7aa9c244b5c25bc26a970c4750b5ca0de6d93520bba6aed2cbf1de97595d6f4a242890b4f515aed12d1eef15372a23f4e58ea7275a572925bc17eb34a528cd214065573952323425b2410e8246fe8ffcecf00216d5ad6f79294d316ce149a79727951fd74c5290034885fbe855ada73762ceab325d149ccd5d593e12c521f6b78214a57d0d6cf299ea1dec0b5b6d9c4670671cc6db983cb292618131e83fbc79cb0905a7cbe3e9ce37a4a1766f5a64c7ed29029bf55502a727845318ef807f256e3ed42ab2b2e6dd25b8e6d51c0c5861c1fd4af4505ebf67f515470b3ba79c2e660d40ddabbd0a39bfc88f2d3ed237a14e4e300d7ba1f43dfce6a8544842bd82b3676ea16b5a65bf4f37348df4f9effbdb61b471f7fabed560b6f5ee0b7a2034362ed794d58256e99c5c6f65fcabe61e904da82bab3e22201e73eb0308e500f39543209af99d517ce23e2f194a7a522a74931fb33cd9b3acbd29ecd0357a827858a0d5a44ce1fac9f0bc7e586d977afec5911b6fac2d982d722bfceac637f8eaa7b77a6ea5e3286481f168bfdcd8268c47dea094542114947ae93f4218c4dca9586b5a00e8c20bd2ef90f50ef5d9670b2d989937b249b3fcd061ba0356484934fd321942f8a6f833de2d352cc2094a672c68a6b1ef0e40a7cb803102bd26bddf03ae7f62ad5a56e80226268d99d1ee8abf8258534112cfed5c668ad3d8c44f7a71bba4765421d499b2eab769c26e909e76c3f67e7b976301a6ce2e7e9d3a0eb0ebfb79e88e956a5c515bb4e30d95333d9b596de636b3b6e09a7ef10c9295fd907ebf74c95ed2cceb1992f500c86941cb06e41092047704cf3b883968aaa9e668d057196c7152a6977647ffbbc9f64997fbca392d4f3849ec979eec4f17a877f1681117a2b2c65faef3bf337c54ed1d454c568606dd1f78097bb5ba03c3ca72ef14ef686fdb0dba34a9cfe0aaee32eba56736a1c09e2fe7044997751baf726de0b4cfb3908d2e192574d81b28554554d6139beedb6a95cfe3e2cfd975a68fd0f8aa0fe512e21f43d5ba0020c89a90fd20ac200f5f6b5ae9a7f48dcea4d38be26b44cde97f4c9c3ca8335d4f63cfca3d45c8497072b100e57fcccc572558f3a4f0569c427efad3e671c1e54120eae1519bf42254a400281bac45d2af6eee6c9a5eb23d5c02b7202062fa6ad629678d67633ebd5251ab716481bc69294cb0b6701b4e3f1454235252fcecd56319eaf6c1471fcb7373eb0b3959f7cda4003bb9264729a72752b31274765a8d66943fd304055c486aa9242c1b9151568173c77f5b6eebfd1268471b40015ccb26db612f12c62158455b067063b640a351016eb123af378173fdc15e2bdad0f1464f07a2c0ae3298dcf2addd7090813ce21c6ed26c0b7dc66742b56abe82ff5c1f7d30e398d813ddd9362109698fd25ffed744c3d919e4506ea9a66defdfa36c18b635c3287f4209e6078897ae44b54674cf005a47f75aef5a875c4489c4f8a36f9e5a41443338065a792b881507b6976df81aef78a8f4871d3bbcf2907ff72ef2117fea6562ea5a3fbc2bf3725bccc013d4595defbdc1b6923cbc8ca14e71d21d3a4c975ae539ad331738098759c63794ef6de18b3d28c7e9895e619b3923bff7f322b930592bae9afa756ea178aa6bc23dfb94c7b41ed65610fd509048057dabe0ea14bdc7bdec3d90974fe3281474ce0d8a75536f39bea8e5541aa7e5ce652d8b11aca45f0f6ccef0e7e2e11d6024e972188a993b877d3aaa77b95d640b47e573d8bea9ae957b547b76037ea3ff78063a26f224b67de8a9711ac49ddec48648af1409062c2e42f6b006bca0b957eda17b0a4831facb76b16300d153fca91f00bb6f6160c56c4fa460d8a9c323eb3adae70c6723462dbb12f1c38cacc415d58ea6f188de5f40e2df460f36f2971e56c53e4b00871ebd1deef37ff307cbf43c36e7c839b3445149ffd7106a4f2d3bc44c54b2a5cab3e5251e880f1042f3791e912926593a92c1201bacadf86b01930966d989a002672383bbfb7c291e2096769bf983a4dbfe971a0efb463016c165be5edcf1d37f7ca7c66a7957c92130e1072b0dc8db7fff0a364a15637a80ae61ef9f97b388842deaed39f97288de37260be2bd4d84db7a1b499c596c3867df34596abec869ae6336ae5be95d9fd9c199518be82fc61a470b8c4c4ec4c56f266cf4ee732bb67cd6d2eb4d40902b37ab253f815fbff0f536dc50e1d4367f6cbc4960ecabc4488ea4b574401a3f987910f512c544764c7069703b02acd23f4990deb206baa66e2ecd522328789e89508fd117046c4df3b9f3ed24febe8a7ae976a01263348a125a2b928d4651c8337b2e16504f4c50250a69a4d5a613d598bfa4d8a6dfa4ff50efe05a410e51885ee09f5701e65975bcc124ef9d8ded7b594f2b59786103604e59bc89f2516453641e9411e0cba60905246de64f68ab3846fd648ad793fed2868ad10269e0614a69b04990e768f74e2a8fc38c38d34b28598d90637ca65037e7cb8e85aabd6ffc3de9b3527ae2cedc23f0845304ff15d5595842ccb32c618637c873106c43c0fbffe8bca274b03c6bdbaf7eefd9efd9e38eb62b5119290aab2b2727c1ee185dee82e7ed1dc28b2e8e25c3630a1bf4dc30ad01fa88d3237374d1c5bc0ffec500c673483d27be4b6c2ceebfac9bc75102517991e75cc52b2a51a10347e78eb2eec89126083f52073654bf121e9b1e51ea249a8cbcb7756490e1c53dc55bd874fb72c464f382484fed2339b86ba5fa1766b09629c9587ee36f8951824af8a06ff863188032a0227db20f54ea24d46b31a4bbeb0e09065bd97df8dea16c1cdd06aa3bc7c2739aac12e118758baf87bad84d8ab2ddbf51c2c8daf6a89fb62e3e656e9445a51bb30533d5eada2a2fe206add466b31fdd589fed7d4ff1be8ff05d1b783e8e426981e990ab2117ec52535d312b75754b929c3b07776232c9459e3e66263f5985e301423f54ea84b0a4afc7eb7f483c15ddd74e1b78194aa333e32e40632eea1b486c225c1f43d02507c1005a6e1553b0a3ce5a43552424c5461a05547c83d3f038bbbf3a9f98a7eeac025957bbc586742850723150292a2ab95ce4abb87c7576fff69b9e2f42ab88542dbb13b39a362e80c13d7c4f1f9c19cd4447f81fe8b0dd5f7b5f27a17784253c0c7fac0c902882a15e2a18af2a50e98dc28a913f3f9fb4285dfe2ea0232cbd58b37998de654cd1254503bf236e6b4ef748b3e1002e810dddd3175079a71c577c87111f879c431f740a86712e2e70d31a93cc5129f5fb3f86f2981c891b7c9002569b48b107f4028ebec1f2db7115997f07674bf45f4e57a0b09d036dbb4a3b7e271472c688007c512f3c61e99775b8bf0669544e30c933f1fccd78ce703b4b4bce40c5174a709b2f3d856178c24c7543745acdd88d845eb2243b2c2b59b30810cfbe99607da3c1177656215b40efc2dbf7d6b33c1efa001930984f8e4a6d6d3cf7158b7c7169007b0295aa9f9dcad5f15410e39a239f557f957dcb72578b7fdd58637629f1bbff3773c72e6f156cb64f9f61eafb4938b4f549ecde9df4ecce3009cb460d4a6ab8b8f511b5f209c22d03bf9e58213c1e738a144923c9e8d24b379b20f8883aa5c3edf36d52c57e37de0e645d338fbc78145feb4070515b25881507979f84af8f7eab9c4c1973ab5bfaa57c06007640e10940cb173458ece98eeabde10016a4dcbd26c5e6dd122fbe3d1ab10ca87306f96dba230e8b24a36e01e2413be16b0923bf9e4d74e28ebe0a6a8e5d2c3ba9d706d897ee813383e0f3f08397572561223d816eafdb7862db9bf9b9182e805cf14aa3006bf03438de5ed5a7c89fe0185175bc4957f158aa1d6262594b369fdf810cb1c27f478c1b06e98b5e3e54743186863259a4b572f405f0cf463bf8935ca6e802c3f038c54ed199330a098d55896c829098e6dee8d2be28d68797df040078be1b71f573b596136b7de866787c9eca3f38f13995c500bb945f5e80f111e77c1a54a4da60f7c43d7412412e7a33204ce14304b0a923ac1df3baf7f47715de416cb0fd1fde0f24ca9fb31954aba79c9055ad12fef8f09767b23df054635c30f032fb79f3ffc385f26f15560407a5cd19d3eb02135f680ca41059da2b76f46ed312b70d1e75a7f53b2f2e40876cb3b06038984c811eab170b80a7b5667b636bb47735bf1732f09e5bc37f3e057167a3f4ead2ffc99ba9acbe351c569e37c7a44d96a0545fccfc92b6d1a74b59e256a08167344e9c9cceb437b725517d7a81c93798bce169f8a05797bb7f1b8137ee35e2d85b097d867ce86a0796a272796477627b74c35797391d5a5b975bc34e792e95d9597f9f8e3390f7ea1d26eceaddbf8c5e451e8fa6af24a8ff19667a018c85536dbf13cd9d8ad1a7c385701955cbef20b9d5673b5e99f57d9fbe89aa914a21f563927b8ce5fadcd5b2516eacf4b2c1c536271bdf8e777c6d604ca902d7676d236ed1407e4473c1fd26bbfd84368e5786dbebd61638b09de1872b599a5ad523d5550e98752a2035b579bbb241ec803f6218a9b30f6d11152d5c766342ecbab486f0662d8e31bfa3b1ae91901093b35aa326b4eb0dffbe31c37a9ba91251508310c996fd642efaebe50e040537879892adb7866d631751e37b214bdfff08b922970eb45510dc54d600c72e1472fe70bf515935565519904b814f8d57ead921e99baabd7e74e1696d190b89fd1558961292687a52b447744783efe9afde6bae272992e43db717f4091e9fe7273827c194bb49ac51af42d2e9b018040670fe78977a4f11b5eaf0d08f3341ac70450823bf8fa6d5399864b7248e0b9611969890b954cb87b7875c181492992a799015e2155c9f6a2bfe0e0c50997b8676562f0c2e3aac70c660971d81902a0ade9263aa876f61848abede27db4eee8a1b9048b6728d4e3e616f10b80d8136d1a3360ec1e90b3ca34ac2b8cdd3cfabc903aa5b74cc0ec62a0dc6cdfba85b37b4405aa1de3ec9e48612781760f0dab2dbc8daa79a9f99b1e13148a272626e43ae9afc4ceb794ef56532ca437cab185bb78276218860984055321e05367267bd15e787fa04719cc504c073e96b95c51b359737677d5e5c9c04d66375a2190c95b5c09a56fe53752cecef82ed1804e1d35066e2548de778ed42ea39cb3c8cd58242688c5d0a05501f91cd492b210b22c4c12b2c055ed6880bb7a46b2869d8d640ecc769680815f19e4ec0b557217824ad94994c5fad6d916a260179fcd49862248efb21c494dbd52b24df79723b63078513d42f32f3ce3f75056557ca6420c55eddff47dd60765f8afa2ee9de7b431b44c98f66584f7f4df8f709010c954bfb1f0d18a1be857d62b1d50f1ff8e02402bb7c1f22edbf1b2571fc6105a3b915fe011963e6d3de3df47c5aea24dfbefac58305c5c41630f855fbd5eb14b3fd6b89520d1da325a241dd2ae5eafaf2231459e364b0f65b7572451de97dde72db189edcaeef30cb8b92306a6da97dd893c772d576cca6e5ecee00e2d11a72fba586aaf89e5478303c41050f8a25ae718c40caaed5ca251db2cba3efa5fce885ab64304185b6b1389d8a09434cf3fc6db313042bd828b02c9e9caac23e252a87205b8e58b5ac93da42fcd30ec36644d3d94562a261eb89ce3e22254269d24b78ab60ea0e06d655a5a8a8a76dd8dd763cd8d6b920a5f49e91a4f69151f6c3e3c69c37227d640e765453dea6f753b55d40d807133e351fa412d6cd8bc09feb1ecfdef1881fb0f945c2dfc6f14629e68cee43ef5839dd1495d1b876cc3dc13714896937f1603002757f6e8a8feb7ece9cece0ef1b473ee219d320601b4f57293f2c15a082585b051f7488eb6ed5851acc64cdb3596d7aa02e5a17f4955f8d79a624558a24ec8715cf25f833744d21286f04645e16ab661e1a722195aa7b2306721aff781cc5c1a693048e2a61863bed362e78c19e835ba24a674ce72f43073152c43a77f14635594ce12a71f8deeb7a26bdd84784c4e9209cbf6cd66b8394666b25e840eeeabff7eb59aa2f95cb8728a7eac0277678972f21b25d5b946daaafa5e8eae7e518e5e9704b4367ea504d1fcb52e3f918301fe5a4e7285c6f64eef5455fbd88b722b6a270fbd1f722bd3ff81dccaad244a060e6f0be9ae8f1dca4052798d0ce735c67b66e3dfc1d608a9cd26996009b40afae7dccae23ab752be995bf9175b2c3ca1c6ce91e3862107f5f62eed0739cafa6f037ab645206648b894ff538181090706ca7fc94c5b80cde2b71c34b6d338fc542520e96ef6e5df56eda82f04ef50eba212d6dad795b556aca5acb5e37f937f45d61a287fa3d949fac7156c5d3da29537dd0c0880fe9695fcb7b7d29be39dc3fed85d9cd44d3717ea80b0260d8fcc74fadf6433b7b53dc9b4ab914555b84bcecaef5854ac9182f1902caafb3fb1a89c993cdea5c56018c72aabbd44aa94c59bd7aaf38ea6ebeb20f31ef5ac1b756ac7e9a5ce6fa7976ec4629389385fb8afa8e1d77f03bfc917a918ea6eca5a92aa5c8ff3ef291dd6095cd37286b5cb85f96383d44f9a74a74c8686184c459025c24367fc3763cdc9f7e300f3a242c9836dc5f6cfab9f5340aef01849758c8cd15b2697d6b8a9a4a056487152303d9d7f3d2968b226bb7362d6e2bc20e7386f4d1a37649f577f352fb83b47a3db7db49ae259dc128d789a4752a8774ef65da5e78a354ecffd6a6e6ea5e7982bbc7cab2c0123e0505ec01675f93b2bdb143eacb86ac7e40bf40ff8c229abeb0df8468019d57dbf1b503ec81a58b6176fdf4f59bee885ce76778e71126ec59ca9bf169d5673220322de3a1b1cb07dcab92c4012942a6c53e354e89d82cd8c4dbd0466a4399d8af6447b7a1705dfabdf83eff3fbd4d8c4590be372ececf8b59cb12c8cd383994a4b708bc8d58471c72fc0eb6ec6f07bf0e24ec0ad4d8f27cf32d92eaaaafe715893390bbaef445e8ea48deb3773161b9ba425d3b6989fef3a63113aff3468c908cfb69388f0a422b2138ac88ea5373111d9d56f4664375c2714054e3da13e71ef60f94c3cfa4588c075d03102e23456d905fd01552269a9aa098c8ef6ece5efddf3e7d0a51b852eaf35f48f7e9cf70f7e5ca191bacf1ffa711b75482ba39f5cee3c5c6eedfd90cb7dfdfc29ff991addec543d92fedfb5af4cbacb360eae68e98129dba5537ce7ae10dd1240099b874feb66dae7904efb6099be6095ae1ec9a3db3e46fee925ed9feeef28396a5322578c6c7dc3b11d7ba419790022542b4bb58b2da0eb1191674ba82249f95b1e1ee89a7b0269a4727d0a982b53eaa695740425f6b958279b92f9202b8f5b0e6a6d6e7a5705baf6ebacebd72b1e79f220a9029cbaf6b9c5bef0483bc9e5514c50e091918713026fc753a2ae2ebf46c9979dacabe3b6b5247700e7999d31530824ee975b27f232864c802b135069e06560a817f3c9215163c9385df974a7768ab38011c8cf06a7ebc8c534883774f35c7f5722f9b4175ad1f902a135ef5b8558937ee8f1f72ac4be5b1368fad2f346e917b593b3f3ed2210b67818762851c9dc161ed99d0d6e93bd59d3e2fc58d3226ed6b4387f68157d7f8fc3bf52e2729a3a7a5114a6ce9f97b804c29fa95c3b2d49b7ea3437dc96820434a32c94768ce150e6804d095c58a0abae7f01ace24c25bfad32b050bde56342ac565c3ebf52313a36b6a113b1a83a1f74720ded53ddea4efd24a13ee9bd863015a0a9f2cd39d8e3661fd69f176bce5cbc741a339debb01ee3876d0a7723bfadca6951269b255190d239a360ded13a6c47aef5874886d54cc1710d8084ace73c6042b68df2c2fa756618c352eb5facc4bcd1e2ad65f2740f99cccf71760ea8e48f99c7d885da797fd43fd0d64b24597576abd28964bf53ffc514a14f835af416ee6297525a2b40f9cd9979026d59f99f2a9cca8d94cfcfdcb7c46a99b9df8105540960ced02015468c8c581c91155995a9232e03952e9417a3e734627f7f174a2bdd06c6b103d3e735ffa28fa71143e22d5689b61cd389c290a2d145eb1e6de579446dd70d2b1027dfdb7f68abb122cb4074db3866a4467bc5bd1755b4bf68712450d75a3f2dbce7b24c2236ace925364e9d2f9b53b7915ecef9dcdd51ae50f756268b4e8dd5960c8973eecebbdcdd905b3593698aea6605e61e7dd63bd9c5fe9508105cccaf671f9b1eed3f0332d1d54915c8909aca3a4d453577e7d0ae58c9dd6564865eac9abb3bc8e28e8f6e8983df13e5dcddce393bd66d4667d4c4d0bb071c262d4b0c80e86e1c2d5d531bd941d0d674778ed513a5dc5dd65e9dd291a70a86778861aef821d9434bc8213a395a1908db5166218745993a62e430541e58187068f96cada55e0e9bd6af64728928c0562d18daa4c06ad788a57d532c0b1fe9ab2a73f54d2e770fa12c916016a476717ce1cc1a7bbc702c77b575225c32465bf189b060fcb4696498e2b049898d363b1cb4314e91dbfe2e74379465404ff2f077f42476e94989afeda1189b1a0c9447ed598c5f5cbb11b6727672bd67f896cdfec7cd4e8dd59c856bd2b712085a3b4268f00920ed5e6c0d2d1dbedcac49a379076acb5ca866d2826d57df29d8f2794a5b81eb4d5c0ced0af515dac99dbe8ff01e3dd986b3dedb942dd0ab86e9d68b7405f361c9481d1de1be8d9da4a9de9c45cc5db48e8bff926965a667e227c0118ac7abcaf3d99a6ca8f5daf17f55ec8d481fd13b698fdb7dde7ea625777e4ea25a218cb3a2a0c852ee9cd33ad5bcd81762c82594945eea2e4d07dbd613cdbafd91be77ca453de5597513b889bb706e39a92397738d8b6babe49b975afc35f8d5f2ca44ac9c52c818d975cadda8327272ef8f6de46f71d978228b97d4422e5e2db86f6671f351af01ef17c62ff5998d190fe1af0b3425e058a2136b6c22f5713033c7e3b94d4404b98c1cf4e9fe8a2270ea851159cc9d80d90ba32bea01bc555d914116c647be9d32427e84ecd22e706d44883ccaf888ccd00487ddc518a3351f7f3bcde4438a986be492fc23c239cd292e70c3cdf7220baeada21d09491dabafb7aa35358aab5016b1d299a09e84d8a4ef6afbdf4fdf8d3e1279a305c8538965cbe15429612b0150bfbae48f014c8ec5b7ccd10170f0e9fcdd750985735fa0f2905993524fcbe602b10c40d9cf25c62f02ce5cd3b6e512c648838ce1974d98469d6cb335b1926b7c53c3375379e8a0b0705390bc74b9315fdb1063f61f184513209c1cbb4ca2a4ba1f26348d5a6283ce69d03a97ad4465a1683117124c3124f6eb761920f8363f314e31697f4e72a0351e02e9a2f8c004762cee83d673c598c16bb66bc1afb66a5054ba4a66c4a0aecc1b398012a1308488811dc92a15255966722fc3c145dd652af7026b7d7cfef6ad1e03c2af7e811d43de337b5e65345c307a54f6cb8ae878fd794fcba7bd79856f39f9b42216367da2272692832323586673c5add139694d941053358589be403b6df1dd8a29ab15b13f082fd94feb0be70560fc7379b1e9e7d80b99a8226ca9a04b54ea90be3d49700b0a05746aec78af51c5f4ba43ab390d090a4f47044f5345d42762df06516e4fdc4de40ad51e1fa0be55a218d30637d6e61988949650cb99aef968083cdc7804d9e1ef32273f9dc62ee1c28dd251dc200db67ed12dd3bf8a0a5fd30fe308d5dc8241e2a015b61acb13f9cdfd0c29dd36333898fe8d6585aeedf3359b74dfd51259d699937cbfa97e8b367c0dfdf077da8eb81388469b39f9da5250b0bfeb5aa6e3592d24ea4430078f86d878c6e591244f74996343a1f6abc9a1641410b604f9d136eadba33d68ff9a0f3539c45201c902f2029d29d3abcfeef19144be3b7b4904210551beb394cc2509862bd4737cae792d870130dea24775d9681c47fd420e53b41edfad6fdc7e2e654f1b3e49a1b21900deaa49a15ad96d7a6691189dcad0be92694f3b77f597df7dc9ac0202c2dcb5923cf34b37299f0b85029af462fb8ae55529f3ce0403625ed7130e7011a6c0b7edb3a38dd76d1148d323c8a213efd6c24ca5d7e94c2684443fe12f1f78e5cc7b564c65a80d8d57734f4fa8a7153943c0da16de863465b791d83e08cd9b09a8cfc81275f2d8225c147dd4e8251d42dcb729d0f74aee0c8320b72d57f88c4e7fa658bd7b3aa9abebf5ebe54093431b20d3c5e5316f5445a5a88395f6c4479a6a4017d06f001984903ad1514315b20f36de9cfea65b7c44c96e10abd1098188ee0e6b970e383c2435709b0fb2148c626fb1af2df5974c5db292ec1aecef09002f1fea387b61277e9082c478f35efe8cc7841d3940fb1c3d5201af3c489f418d09e524b93ca1299f68e4ef61db4d25507bf0a71b614409bf78e2e65e03ecce9c4fe644ad646c368db4e68ecb6b70c3471bc113909726c6db8d2ea4bb8636ee3a222075fa732ef528eb874d9cb7887f1d50563949460211f2b600e94a88488ccac3a845038afaecf7f2d69718a1066e3c8c7e7f285c165006b7d5a2e9bf6721735e0923d32c9f00d680a3053e5ae4a3d867307539a8becf068020e85710bfd17bd23bd61e84a08adb54f823bd7a369a43d78066c37ca9e35f675927e6827ea1933a3ca7c30a05c35e8e02591db2d0d08af94a8ae881d8232712d3882f1457d5f3171eedf4c8b5654fac9ef051013e397a402a08c182c61a3564958e701ac24aa0a0f2e8363f0a2842a0239d84ab8ea168dcf3209a133ce12858650a748d440befde21228373696e7c217a2e8b0e65dbf9bb2a7fe7598e08a888f24e1cf9bb22579f91a5fb9e4bdfcda7e2ed67fe0d3d77341fb6d066a07e420acb3b775647288fc2d5842197d220e67915f0830aacd558bb39f4166d732d21de4c3813a14f4ba83b63875b81703f2d251ca4560e1b0e17dc253b27166c1ad4484b13719fd6e80d8122963633bf52aba0f3fa99bc7406acaffb18c9249f5429a9f1b745aab570474d820f7368a520cbef5a2150b21617fc45af5e236b2da85252c3a9e01357377c7ffb4ba42583055236b04c2e5471fd94637a2117483a8ea8df8923e1f3dcd8485c3132f4c995a7e4d2a67271ef78646be184862eb0cd3b990651b3e5187cf28292efa052e0aa882af80f4e1220db26618ee481b35f51fbf64a16e15197f9f29ab9bcfe3b978712553e4cd635e2916679746948c16fddccba3ffa7783f864975dcd0a37992ec65c031c33d3b4edf846bd73c8cddf9750c6cf71a6327df58068fa412f9e927c6323502bedd7235aa60b0a3abcae9f511d1248dc3bd3583a0fc4513278f74c4db6caca48e13c092ac8a849da47498d6ed40a4c16a4c81ed6cd28b870ff41e16b810ac9d9c8d010f8d6da569b9af7f5ff99ff28964023c931b405a57eba5f5653bc38738aa9da4b68f3b77a489bc9d2a6675bf1fe43b60f923e9d1d60e76692d238fab9dcc728bc64587849ad9df99e6bc4f6ce7203b1a2b6130a05569b1445d8acb95189a39b8703c7e090619912b94ddda5df0a21d34b130aae23849e79e754bcaf17e5bb1e9ba5c4c15302168b491cd64a784c9fae1032b8709aa2e25b31d923824d256eb08ad1caa75c5c332e21d8c39bad8af8e0b8eba3bf4443cbacc4681a7cbc7b70a84664ef984f7dce8885361fdb50fdeb10015acab0af299a84b05077e720ebae9ff55b9684737567f2c8bb4538807e81fed5ee0f71c491c3d7a753faf46e3dd89b8ad8c0c81e041bce54d23fbdc38506af5bb870d61b8be92e714e9f06efa21eb42e86991f60968acce259e27e233d1e3d8a0fbd79885536cb1ccc4be71db3ecf2f08540725bc80450db1e0c57a9aa6147a84f1b53ed09f73d44e8cd63ee794a7fb88f2ff15332407dc7fcdf35ec3f6ce47c913c976879938fa37689650d90076b6b0b772741f194bddce23a2f90c731c0148e732aaa9cd838cb8c8c62ac6f97125e1042ae9eca13f98d7cc417ee67093e548f9742237a7a97e3350ebe18135b8d4765dc77623467995fe4b0dbce0f12f4028b438add1728a667599c00fda81187249cc9984aa0faabf425437dae2f9c03595eee056b2c33e327cce20f774a1a38a04df74154d0af3895b3c403c5c9d5b3c1cbe3cb9c0dc8a4b8eb981ea5c3a3a09e66648aba1864bea2cbdce619fc5041226219e4c7ca8aa8ee3da3b36202a335c069880df4050b67a472b8080c74884c924434628138b6692cac8a2d5cae543be95f6c89332182ef257189de6d649eccc91e13b7e56874d6b28c2e028fea2d14c2a8130684ce4bee85a6082f237c7a11f35a134adafcdd12ee46eb8de7a324d6b1d68ab8961cfda236ef5d448407687798212ba79d5a83454367d387800ab576617279113201ea721c1aafa564f7a585dd63c249831dec1e27a4c880b365ffc57c0d3e3228eb15003f9dc5d3ed53190a559f7a427184937dbd7d2a20e5e9d43a9925ce0501eeefa7ae814414987625e78489f8e54d17fca8ab1f1e3571ea0c4c2bcee6f31f0720e467dcbddf3e7589c2197d6a198691f3c3a8220b8fa182d9ed645bfff8fe2bec87ce62ffc358255eab8a65e5e47f3a7720d4ea0bcf8a1651a7f8c3b8926a0bb8c0aabde11b2e106c6080de09171bd2875823916022b6c0b396e77f0b4c434c27dbb88e72f62c8fc8a862f8d80cae73509f4ee3d7a30fb06cf1f7f235fefb5c4f9c94edc5f7cdf344d27a483c2e9e5f440f48f68ebe785348dc6917247e3af1b49ba7ab9be66857e617dbb14862f361fe738ce810029897f1f0cd67f128fb44a641820785b0e51a5d860e76aa4ca6b6cfc394daf1eb8594916d1df320769bf1d0f35dce79c3c272e1b7633acf5cf445719a94cd56218f607396e708f84fad521eb6f12ce42946d75585599717d419ab76c33ccd66abc6c731b70b5672197ea710bb9153c74f8e0ab837287b9d157b699382628c27bad521c7031d9846ce4816a1fbccc4525a8382d3ee1835b0147f7451ad7ce6f9ba30a6600ed15b378f90bbb7dccba4b4aff63229ef26ba0ed1d10f9d3de27e65953a3ce69553e4e933c7b99bc5653932873770d4dcdd67ea709123fe3cdad302b2bd341e27331e54119197917c51c2e94ab4f61416725958e605e6a094ab2fcc3d84a3b52c182610fa897cf227ae6fb9fdc410439ed6e92b8bbfba72fd449bdd90256e5b60e78028347f9ee5c8bd71d33370a961ec5852f70540272287faabe7183d63e631b8479642a4b27f791d848b45fd9cbc2efbabeb8ce899e5902bb07aa4eeb2fc2fae5c5220c1e5f55248be61f8abebb47037c547b19da7a4eb48beeea9b3e9cb3ec01871a64b54c72e0aeae78c2d212211bf7e1f437f1e6933632437760dbfb8973ef9dcf2019f02aba33f3de253d31aea4f4ff8d4a2e8ec413ee3639b3fbee06307bd44aff8c414ec6ff8443d1407f98e4f7df28de5073e0df0fb9ff834c4755ff834924cb43fe6879d5028f3c0ccce7b39057af1419ab7995385ac3ac8051f589a032b3eb09678c50d7fa622747560309cbddc4b3cc2813f1ff9f3893f53958a3ac80b7fcee9eb37f2a0adbabdf450715a9557a6a22bdca212918d293a93bcf6bcdb5fd80d90211dcb487152bc92a5c511ea2341a098fa337102db42446ea2ac9c245f8c0275d79f5acc57f5cc0bc011ea2dfb1621783d8e7ac967ba98808c23d4e3c58daffe88af1e1553778dfedc15133fb12f72acd215dd2792e22468529f632da19ee2179f11ca3bc64f9d26eefa7e73047cfc922b02eee0814c4ce42ce5edab93041bff56ee86d8ef87da3854555920513ecaf0cc46d6595a5b295496e2dba240ad01895a4d35532bfe8dfa31e9d5a9933cced945db15e305ba3778265b32e736ea3e8ea8acf12393f81ff45a005c01b12572526a7a5e5c0ee7dfe3e4a8c75278016e56c7ef0f4ba0b85d29e263db4a2e0d7f44ecd849fd32454b97e4e6783394e21c607e3601e6b0944bea55738a14fef184125586ed03a3430d2034992f0cf099d4594024a877d8845d88168d749f02c439f28b03548457ed332f085224fd207106ad58e7645fa08693f1a56314b9d60bae61310cbbe15c9e27e3d1278a82a3367a49fc7862101e91e52dc12880b6ec9471b49b39a64a1fb37cb8963e5cc761aa952f7aa8448111d13fd1c49de5d18864f1680ae53ce178738ce1703fe7aff38c6253d89bee5ee2671c5a81a1f06f1ea9cdc37d8b7657ff498f9573afb595c34d4f44d6c0218dcb01a1be09ed74ce4e8639a4332a2bb6a55d71941445df4831a211eb2fe9e2013c05a5b5c7f8c4913e5fa8070e2be95feb4de1e5b314966976b857d035ada0899f8b38ad33a0add0ca0499370ff0f0ad1c4940707ea2d30da7f5b68c2a42fa99b71d21c10fd2a732b735b3f2580185b39550f685936e7ac7493efb60ff0c45b479493da2f63ea35ec17a976bc2228fc43d76ad8ef05f4a341565f962b9222345bca40b58c44cad9d0898f536b4409a558a0576e6d8ac868960dac189e3a99c932aa9245b4a0e0e211afa2e25a8e863890f3ac6dcc59fa42a9ce833164d13f4000ec5245c7078f0e5ae107e957faf52326975d2dddae3ed585de17d51c6ec01c2850c3638c0426895a14006638396e967fd800b5941d153f50e7508b45690bde61a6b2a354725223d2b19426225cb5f890bb9fd4edb02216780f405d995346dada23d37f9399f73c7626865a4105bd5e0dded489b22f3a606c2dd416e2c5f384ff41729a9f6ae447b189dd7021a260381ff387d62b09a734918fdebafdc58f9cda1fc3ae34ed42d49306565b4899f3bd001cf142db46f9daaca8ace3aca9758b2c015ba48e065754fa067de379852bb2984572f25bb6f4765baeac56a091719e0b5bc10a1bd473536594981b6a9cc31efbacd243c0113b68a0fa27820f81f91959ced9f4ae1833ae36db3e254c67a25717f1cd9ca8dbd5f510f3340ace8d6ead36a0bb7a17f6bce2f47c23457c95d91eb8be1a915b819ea9f56d4aa911660669da155ed9018f7ea918c05420c2728e36c6bbd4e9905160e174d565e869434f8c15ab6e95e11beb683efb0ad905df1690520a0a2160726091d50f344f2ab20fe6a1a7fd5d2ca3ce64a3db3297624a6c611526ba385226802c415f12ad9c472e13e297f8a17ea11f46a8f979e596845f5aec7f1289f50049910a346245e0ed66a34f3640033a42c8a6230c3252a2f38b0866d1a4cda754925454cd52315ec611f83948dd4441212c0f01945d15c2ffe00838ae1cf55727246314cf5c58d1502274d193d6a79623540170ca2b11667f62f469234c4440d2cc3c81b78f86d3defd50077ee0aff235e7773f508d16c2644f3f4a7a219297b8e1655cbffaced73e5b826c013f19f34d68972017c6502dc9e50271776883fe530b5d6f775fec51aa904b72e6f2d9702467f4c9913f5128ff4ce48665f886134d09829a36f974ab8bb4694d7a5c008ece768796b55b1b26d6a36b367a36f6a1624a42edf81ea52cacb48cc44b344f77569413460706658ea532be26373fc96a39c60f3ec6461b0538ed25901ae7e0a6fb085be45d1d3d393de13a6988c6e88bbb847ccd830b1eb0384275f64eb956231cfd12e31d4afb63ba96f2fc3fc285aecdad31557fd5aa6a0fba49a18c1cd6b7a8f98d9b54ef25ccaac8be4918e760b1247a8f5e5f0c3fd1ea80f23f0ceafb06cde92d775c4449e1c0ed939f0f77a5fb10a99707940c20e3a5091824fd6ecbdbf45447ea8c5c8176a2693075cf141bcc4e4bd44e5c65bce956b35dd34b288f449b8a47e0c587bde91cb72d841ae2e309e45e0c0a0270d6e0bb7b67450a4cb36ab275453efdbc15412de48ff42a4bc6ef6ea191d2e2acee128d2bc1d045048cc8e60f1ede825e5a034a04dcfd09921dbdada3e9002c37df6141131cd04cd11f86b06e36dfcd9630f7a65bb7810acf10305f806b881fec4e7b984f3d910dc13d8478bbfcd7f1b12fca2c2110a95c395ea3b8025a0cc5f234e02d3afb6607de46d8a71c878e171588fa1a5eeceb99b762c1c0db6dfdc7fd78a2d9ed8713afd68c97a5589bc40736f5b2d6dea797a8fd5bf4fa5607a3fbff76cbd3a1a101cf4f9562bd07073073d3f7ab7758bb27041169508bb8a76e2c654fe16ca43744c4b297f3a523348ab3a51b1833141737c16eea49be5dfdb03bbb2b9a2bc68c04518954b42ca30f86d6ae77c26f09aa7784381877bbda1dc18f65c19784dbfda39560dce9df9252e32bdda36f2b2cfb30eef8eccfea054e125a835e5a50047345748488e6895a75897ab07cb17c10c2e6c0daf1914932bc4dd24a48c97c9dafebe929c9d34346e6135fdf69558217b66a06b955f6ca7cef5a090d83549ecc677660d459be9827f6f5e354d39d17c9cf0da491ecc3d0ef5c715ec3cc484c9ada208609c394e81e57828b031b6c7641871aa33cfcb71477333c4829d39c9730e6586c3acd06238250cbd910cb99a30ee450616368f27237fe4a0584ddc830c8385024807e570388a11eeb850fd014545256365f19eb0d84593a5e52067bee6700ad79af6cb38adbb872cb496a086bb9b99874d17f1f0dd4aa86a28277cef6fbf084c815e812b9970e3b113b96a8ec0a803c8b489a75b3928f9d7bf3d9563fad137201837510043768a3064ab1cf0c2199105a9425388e70bf570babb71525bef3579840111ec834dd646b848bdadf136fc7859d6af5314c5560935050195b5931af75d110bf08cdcd3f530cc50f55874ae000d56e8a18c2e2b01f6f7a436574fcfa50684f373f5555f88c10c1d59fd29bd86cbae313da27126c09a4d4174e7b358c63c9fab90dc066a32237fda5c346ba0284c09f55e5cc614b92881cdd19a705e387d480dbcfd33e26b63593fa49a69734de17c65d6f21bee827e9ee39ac603e1f1cf6c3eaa7a564fc7cdf7b2a3c4d59e6871e7ca1911bf25a66400d311be00d6d8064850140358a24c69d580718d4f871cb6ef3da6bd73f9a46fcf9fe653aad5ae2b54f5ee98a357ef6f1ad00e7a4f5f379861d96801e73eeae375d1ce6803dad64c9223c6433a6ffd6aa5028bd3924a389bf054ec3fd8f25dd2a73fefee5927b9bbeb2d23bdb1b7a9b7f7511cb0034da9c9a32077a098682e6155cc659665129c75dd6a35b953ed6b5cea455bd58a3dad65d36c4d8170aa77eb3ce33411be0ed77a49e03904d3215762a108cc5de08b8cd416eacc16151ab6ce84161d8df356aee48e3ef6d7381ac55b7732cc47f21ac72cbbdacd4fec0b5d901f47e3becb030e8afbeb4714b0515f63c66ac26711148b58d9a586d64265b94560bdbd436a327db908b2b459788ca9bdcff34821949f2d7234398f9554218e62416c9e5e1f225b8a4fe180b3534db8be198ac9b7699ed418b1a476116646897728d2844d2a1b2e07249f6b493df6ee2266e6171d3da97ae954aa2afa4cd87694a75a0717356de841eebd50a72a4a1067885d071b1ea6358997fb45d196016d195d2d085e9542110bfbc55262693b565fcb6953dc7365f48e96fb80c1bde8ddcf2c1d9d065ac1e843bbc581092d11aa2cebbca19d6b26998740e123aa2b83d8f0e610a1e2625db35d74e24060b388c540eba73b9b25ecccf5cc946bfa862da14f2658c888173e5573e9c3a428fa71fc299f672f1f4c07258840cf9ae8376dd89144eb2bf5ef3a84a14709a5ee1b47f33ce13e99e08cc3ed0d25f872a10c6b5c52e04604cf13acc861e22b3543606549d0142ae168763729bd4ab9af1685889f04cbb6e960d1d64f5ec25eec42c848d3bdc56738c4d7a7cff45f628b93c23d7dea01c956bf65a2c632a9ea1aa034cfe0bc6e163db03e9f449ba457e6f7c439c37e626e510ddaf12d43ebdf5c5dbf1fad0ac8661eab5efbb27e96e90aa01f0018d5d63e4a55f2b2dd71ac7628fcb2dc9300001d602549e3501e8ef6624f082aab750e0a5d4928d77f5768b8e2da9abe10bd1999d0aae8cc2b9c1aa32f8b142ddac81277e256f9a70742e5658dab2aeb7c702e859395193a5a433e9c686b2a948b65a50b4bf042eb855eae1502eb17651c833ac76baa18af002d1b7583d134bfd9d85ea5c0426ba72a2b0e3c711325c58a9ebe6e033c999f40ba31b3fd656db5b60b4e1b538ced892602894b6c7f03ac4c808651116003ce292d70fdf63dc1417e7d832a9524794f2630cd4154cb376a6244c803622417c82961364e5486d1cc7da47ef2448546ade907e69ec2424799cf330d21432653c7ad3a38a80b1fa2dc0f2817cac472d513cc3754b275f606ec10906d9d23d51ba9998d62ee6c9dfd11c29d6aadc3f4590a981668397a3bbd9372d223377c85800f12724678906d2ea1ce51f1239c3202d97750c24759225708b7c61387bdce18711ce2de52887b26370f700d68bb4551fa8b0999d1092b9cb04e9fe06873c5dcd27d891554ab9c8192e7beaa6d11561f72efad6afadb7dd1a8f828a41bd4eb303e32002f08b200d16c452f904f389b8d6bf534cac4778914d4185734938be2983123477d1b19589b4cbf65c60eed8bf42d91e7e291fcf81a5fa84b340e463ea36dccdcad083de6be536896d25484171b10b72ebdc92395027eebdbd5273817495f0674dc7fb74c1faec745ec67988b5b79b9b322c2660f2c37ed90cc3f40038273a7288ff0b7265cf4087375c6064ec1d646e0094d21532a6d60eb98a1cc22307538ff02dedac638da4d217a45d2f5eabd841dbf57a6cf1349b5f76329e6283b6e87dca8d715eaa5442ce98d0583da8e0c14603d5e404de1521f8e727273de996ba69c080dcadc85d15c0097e86902a2de5e48ffbaafc0ee8e7e653e326d05d5f8573ada003ad30f380d2b10b6a0268de1238c45d2b49f7afcdd6776711de1bdc44edee0c01677e90c42d9f259196cb60452dbbec22d4f0726a4d007b46a5df7525799c3f50227850742d5ef3288b2f74ffc5bda7944bef7923802e43a3c45fe37cea41e229a3d7afeaaa2f4c85e9613475067aec523383c42e50c4244c3824a5999606cb0505eeabb1abea3d0b5c388cb4852f4e1b13417a84e588d882ae122afe4ebf06e99ac95a7751361f5bb27201e35e750c77d3482ee58cdec584c06f035d501e6b85666de9d88efcecd6e75e4729a3d7acbb97ae74f5b291c907f9451e4d74466b1a02d4a8f514e512dd3055ebc165214c90d78d52073bd44a68009279b68ed1dd10c77f2755880a52caa69f3591ef50c2a4f9cbef901f546e1d89f7f60a746f4349d19995bedbcded25b59b4fba0e5acbdeca3a5675c233d969753b6d04c711fd1b5a8952a8f5912618fb489ed81d9c886d54c426d3459f7689bd6352104bd75ae256f39cc136834115974eafe544efd42b346d3b4959befc7a9ac62f16e75f480cc46ccb75e662020823920db928b2f582d65fb299b8022a2ce461e3332b60ad42b1b05e147d417e0866af9f19329d011ea6983ed7b8c8cf0db312379070f84f75ef8241d36a717ff402942a3c7260bc542dd955cb211b8a4b33eabb7cf5ad71419487b52f919b66ebb64d70659ed003c7875e8b66a4125633df307e1bd7167b7f6fe5b548ae089d61b2c817e9143d9ec063733d4d6ea195c0a1b83b9619eb691cd253f54e677e0502890aa3b40f2e7041410643a54c07ab1f707b6e5f3bf38752429084b0d78dafef19f287b969d3057408ddef019e5ca9166c9b1074552d625dff440b6a07b88302f732491eee76964df327247b6894ba8dd3fc3913a77e4d18c5026d3cacf134b4004fa4df53bbf1be683333db6f37929254273d7f8a43588fa51f6539372aeb1a3115254315838e7455ae79e6b26b84d3db30f2bf5cb33a856f2fa8c84de560b55efde7aad235af0d4429ed73f5cdd14bd22a486d063da2b9431072f5c7201178cbae9980e29e693e28624aba084cbb8938b2401e984da215a14937df0b9f51a3597e8893ca87a5af02b4fc27dcd90d8065e2e64855b670f9f90da60f52fe4844203e22cc9a66e5769aaef1154e814d0fc0dffd449bdd8944e6c968d8f88725cfab24f9ae76d0b0e2a35c515c30dd790c9593ef5b0354fb86f9c311a96771c5b9a50716e71990ade1e3d1150ad3139321f08bf50b6becf71792554c88c15f0a311a71c16b5b9c5e8e451a5c392b2b6a5444bf4a1cc63b4b485c388f5ec9b760db08777443d40bf3ea2546218c3ef0f33239b56107620dcaa4b7d81fa1464f4ea045f2f8212f4d89c8cfe161cfc1a1e6d2191399ba3ae7c98ad914b32c8f072cfd692312fd103b9c0b0423f3ec1968a1875dd463e87509e1158cc60dd9391f7cc31842c9dd6a9e12b9b7d0daa8d74e270718d433c4dd110a7472b5d7b4a011be7ab48d63b62b3faf8fac82bb0444033add5d84ee65a678ed5a31f698a2f31e780f788eedda29f6ecd4c007589a351007525c7959b0154862558729946b5162d66ec4f498d6fe2a695bcb4fac2cbaa25d5f08ce58ba5c44452333adacc9b1b22641a6c3921ef9269c99f2e98be8045a379006a276a9787273a77b0a7c46073ec93a909208d61e8d22e3ac2773b5cb7c77787e83a4f38972669decb3da43e47ffce65e8c0aa9a38913bea53664fddc5625d37c1bd0c540c8901ecb0760685cc46c6fa1952bb0368b39acc425997113527e3702dc9663e226ab395a76e1c819c96f4ddb3ed53437f9cc83c67697363eefa9f80cbcb647d3933d859b6505bd9b23c9169afd4fe59ff5e2bbcc4a705c2fde0db5116732b85fb383bc70760da53d471e0e94774423b5f4ee99ad1a3b8ff2a2c5237a1ea0d5cb3956221b38a8c37b196b30b17b798315a3ac69cd366b9fa4cdb075a0c8b720da6d7ebc3a80043a7497f817f9bcb9549fc37c5bd58ad9247415503688ff31dbcdc622625cadb2aaa031541844c253cb11270b0f2b4a4818d3c47fa5325a2a9368700dae82921f58d8cccce41db4e9e3eb62199c1984aabbf10ebee0178af17eaef9c329781eabb7fd209a67ccc37124940f69caebb1082c5cb26bd0beca9509ce23e550e635e38bb4dff3c9d1c748b634b32d8385ae956108ce3e8aad5d69a9b4205ed1996acb65b384296f1ada87ba744db0b71fd603efcf5295dd9e50a75c26eb2e4e5a617e47311e5046b667cec0a077c7506202183db7156454c6d3abc92e678099e0a6c07efc4450ad65cdfd3999e1417f4d0bd765fbf712bd8bf895bddaa8a1ca364f8d44fdeb0c55592fce623698d94b8274688b96c0016f21e65d3947d82481f6a6907fdd8e39a82ec59dd54afdafa6e0ab5708416b886b9be8680579b4051bd1943ff31d8c4b841117e952d254f7e78806271e2f4c0e51f1e0a49c9eea40157124248327b545c0c12e855b418444e7893aae2091b843c50b194b346ec7680c89e4b8b98c2699649beba0ae5880b0ac799d803219a0ef3a03c48ad0c1948eac3bc284ec436ac3e767cf63ca3ac0a21e25007995af06d971913d458f191358ea899226f55501e98ea8dc53893fe691469aa8f5926fdd3a4c3cada56038e6ef51e693da58d602a62682d2975f14cb1f98e6b796264bf3bd07c6d8a4da1fd78663f613a9b898317fb0183eac7076ba6ca39e5c27ec5c1f503fb05fac3c3927d07bd54ee363e00ef48d591b1cd060b1785b00e6bf613a172829669de13e6c675ba7b4406acb3934be05125f3cd299b6683e1e914996c96f5f20865144da216ca3ab939a7ea5da13e2708959c8cae87ce9d13579d0ae58272535352a0656532ca21ea37f8e5fa514e99c1069249e5ec42fec226a2e0518125ea921686e0b8d40bc709e94ef6c1185753797d2792fa1ad77db9c2ffa0d84a032f96f99e2cee0ad11bdd812f2f7d96d113b915576be89f7e18df994b18fa0c2f7777a9f2231564bacb67aa2630f678910387c30fb164cd5ec453ef4f1287e91497f48fed556ba910fd19b9f26e1563772696ba912c8278aa9b0251cb212bd6adb7be9dab47a1d048d5a0784215efb834ac536958254949b028b6cf61c8668db2b06a6723bd46814cadb43315ae67c69268e33cd1a92341103c267f6daa84582a80bc5853573807ecc335320abdfb2c2d92aad2166f4d698bb70dc57f44e97f77c1f9023b4e58501ec0e04ab2b745b845f4bcaf5b284d13780db0a3bb18239c247c0a09785cc595abc657c063d63a665be510c00e2f8eed493c0b32d1172a0367be9d5b3015322d81512359635485cbde3e2e22861d6a8f984667913d7dd2b27ff20f0a4d31479fe59172e313b2967a39fcdbd79f3b44590e3432cfe018750a131b443c099f52bf12f8a28d7fafe6d8c6f3ea5c6557f2c1ca49a118246ca7ca2c1bd389ad55b941ce6d69873e116f279856b581fd464c12aa8c0fc4d53b9214a4fe2a21cc16aa3a5ea0931bd303a8858402594bea5999e3bc932af3799989ad6553e5e51d9f5691c2e1947e7c5a696cd3e32f2450d34b92aee2db655595cf1b85b63557d1ed4ad437e0a09760169d551bdbd45cb39088ee6ed1a9cb77bb442f31096dfd38e66e5ba9f7129756f041921aa8d1a8d591704717ef09789642cb0072fe28161f497867fd107d0e137263fbab2a125d7609699d8ce2897b36d376962426fa41847e6be711f537d4d8a9eead424328b2e9e857db42898c8fbff7b679286ecaafc5cc733cb3f5e8051ca1dce85b45a52debc40b717a12d752f9b8cadad6d113236a077e5e1b81bb37cfad55e84e1a396381206a3c2a54ce8f53532b4ad45d1cb48d7cf2d72c9fe2480aba489e47246d33335123236df1a21853a0453d5beb3be1dd8777c999e7660087fd952a8b68384addce59a8ab2330c85555c244a202190532fb8e48b83e876c6c519568faae6c29f5304501cb8c019db3d994df3565823cb608f554cd1b799b7a08da272a9b70c888a0bd7929c5d6beb076efe98d2711fa63d5505151aa561ff0e35398cdb3a484ead34b96a59e3b3de24bc971dba2bdad4b136f2f496aa7d6fee29dfeb9934327ce540116d8c8269f0849e93bd2a7359abd3a78cbe08953abf3cb61681e2905b7f808b845ade9dc4f2076a0b7b3de40f9242888648364031507ea22272e19e43919529b765e4e5d6b24457e2db9b319213c2a40095df629e3d05cc1a85147a8ac9a17220204c4567d5158cbb29af98c1b796c71b52ad0ab6d2bb02a529daa5a4acfb6f03d1fbe115917be898b26fe17087542f3123d40c020f164655ec8fe0a662810444f2b734e75f3f49d9ff308235b2e4855f4ce387af110325cd2d14e11470f2862f99a03cc1948a1ef362b82803957d545cd986b444f614dee27517d8a40610660f39ac2d93907ce75e943733961d6346d65ee14269fecf72213c458ae384b6dd29ca460e49afe629ba82dcb6d55946277b860610c9ca2d684fe6d7c9e521d8a6b12438fa01eee9a1b3c3a1f753dfd5a1f3bf20372288aa3ccb27e7945e0f25404c98d8117fab7b3275aa43110870b344a2bf20489f68a3a5c6678a4f6196e59e742b0947a6be267c533768e0fda6f9f3150dce1212ee6c83df0b83785f8207db944f120a00a116ed34fff8c5c0c2cf84548714dea0c795923b7824a697f87b16f332c16da082ed707f52f5011c38cc0f35e600fd53115ad132773288775e4d40d5d433b1de27bafe194938ff366fa2a6dafa6ae5a1001947bb06ba8ca0956213146bf2c7116bd0f7af825504d09fa1658a5832d42d75ab4dac857182a5325d4c9f6d92ed28edaf91dc08e9e10ddf072dd5a37413eab9b07a74473c45d0f45aa237567ce16efef2d1e11c909288a648da4aacb8f15b74e32278e79b967cbb36a77eae16b3233d3a01ffe15caf7fbf265bff387f54bf76daf4810fc25c13d7f7241228eadef7162fde642cf60a1ef70eef65e0ff2d78cfb8f4b94fcf3cb43ba6b1144c47b26c966a5f05a43aead7bc02df6fc73d8b84f3878c47db3ffa41edae8f8348aa26306c4625a6afac23978392f9a60a698a1ea3d43174d8f3da02830ee5974392aa28581a2d76e83d204a02d0e4a2ed9708f657cacb87ab7f2ee01868d184cded56b1b6de30a01700a2b700894a6708648df968c5fce394108959ec6fac658e4ae50f70f91443ed7d09fd889e1923a7556474ba2e2730e6a05d0318f2c852648a1dbe8faa293226e4104fd9adacb7ca0ba64b2ce5e66ed58d0a129e698fa0e7241a6f49ea8b251c92bba715d470094e8d91211852d62d45dda6337f7e4bd0db28f565f6c940f489869137897be502f8d24440f97d2ced53b3a0deabc764652a80faba542f57626fd804a2c40c6420e0c2531bc1fbd2e7a1ea8b7df05d7d8eb9347f2b08d177c591db780e5b5fac279017657efcc3ce5973668e6311add2da7cd7764ab95658fc7880ebe1259338ea1ce78221db0dfb357738783870aa3a7d04e00d7f92473486a4e54bc65d69529faa725716fc51d00580224f3fcec62603545efa2dde357c1ad49a9253010de0ed0a3b643120f2cb82f6376f7a3602bd1246cb40af52848199421ba995874fb91e466d5619b94dcad1924d45c1423c97484baaf2de40f82d6bb2d526d44bc3732fe820c65378fe6b64ebe69f545a8dadfc50aa26a0562a43ed1e17a6942967a429d24a4a8d3c2da20d8d7a636b2aaea4b9b582d2f613dd57f92322e4335da37e47539a125ab4218f3a297c59804191235aa44a1e02aa6291837513cce16144a973f210ffb8409555420a4e9012a3ba8bde36ef397684a6a5177dbb55d454a72209c5963bae3626d880757b66aa5b089414b8295fd7db724b6a4fa3a39dd25bc1a99d01f8b97ebd95dbe60e191b2ec6bf3d8dd383676c527ab2f667288995b3e1998aca974aca65573d558be71db096dfa64c2aefe92097b7367a386b5ff9059db81de75c2c60fb66d2f62d1ffdde1bfb650f89daa6c9cc1e8e1dbf3c1568d76193576eaeffa691ee62629f284a5d1d18ef51e91e3939ea085eca6975620e6d2b35a7a76f65c1aa49f1a1ad6e0ed0442854a25beb5bf7dcb0c23e94b2947e5b1c2c4405cd44fa6cfd5e2fbad792f913cfa0bda5ffd397580bee2d75031ed2fc94c7f87218e326b7ffd105b4ecd1d8e6d711e1ae2ba28c6f5272e7e9c6b01fe33a2e4732b265c1bfc45df368533bbfb41bc5adac241e47540ae3835df9d621aed0753ce96cdf20dfac2a963b721b481fb58388d290dfc32016556623385f68419208f9aa3718c401384ee4d99be5ca994a4edf37ead50d8f469e5b212e5d666f838f7d222731aec555cc8d2a12a085fa8839b90ab311e2687b6451ad42c79633d41dd413622ed7e955706f961155a197e5daf8cba1cf0ca6819308a9a7c8642819f42159fb08bdb48a268697f4d4b3b3a43cb8a2b126953763e0009d731e69a106fc9abb80f486fb0365f37c7751043804b7d70b3874350c03e3713888fe49d0c527ddefc3ef1d10354c9efc7177dfef64503a4fff5455fc98b86914af087f1292889b871ce08a8f47452983a69291162b732b62adb6f268bd4b20a52894f6baa0cae2e36c536da92a842ce8a30d2a8c6d9dd65a435b49f2672d7b41cd56c95f43bd88f6355c6cb344f244ead791d8d5880cd44f6da9d9f8c168aef7ac8486b2a959fa15c18a4c27e0297c454565e2c577538537cdeb04d7ac27a6b4d61168271caa39a2f6e2079458914682ba1f8b3b2c0a05d0096f68b0ecc1ab2294918c4464e48f8608474ab5c5a5c215838153a5c3871c00d4a1e943fdd0075be0b59a0a55a4a28a9b10dc53a2c41b0ca8ed6132b8e09510421c8da7816e86c8c247c034e7a9fdfa19bc9040b2e4d36636064231d14e4b8bc03155f5d54aa0607f0ce84a4d89a34269e101f74ce961bb87a4403a84e6a7c48a9d365d2308aede7a6700e0e4673624c2234458675c909b96f9a6f49b6bc1fe9b0832aef7fda97d9127a454bcb8c00cfbc07f230b936a7b77a26f31b561e8f656ff11cf76b2ef4e878da3e5d2840aa93780f43723e50ed910542cacf941586ac42fb242a838931677798b76240e7a910c505edf2143db16076b83b486baeaca35202708213fa79748803d4aa46ff3fc0e968670d5c934b950ed45c03dc904e1e69e16096486c231d5786fbe895b8d4890a758457fcb4a2a6a1358d9077e668439919e3d165ee6149b81b0aee02d0a2f069fe5633670e9de1d799cb90e9fafcc5548298c69cb0bfd7ee83a3f57bd9fe02854516603c9ed25bea27f5fbbf902fba3474b69e70a817792abde9544fc94cc2c4e9aea6313d9f70cf1c290f98c86da14a5c9cc9e7615ff38fe9f39c8baae0bcce8eef379a62918ce9b32aca3d0ef4f884560681b16e96282555d69c804edaaebe5b9710545fbcc3cd7b3a0bb9e67bd2e202245ceb44844c4e28cf0bb8633b8a72bd6e09a90cb5879d0d43412f0960c5cd73f4e7022ac1162c108fa0bdb4a7686e157daf4cf78157c1574db87322795a1ba022fb454263bd50d5e639d11d97a350c80bedf02bfb91771487083a3c6163df685a8c83a2c418bc3f5ee1ea991ab16409cb5006b13d3ac135cd4798800b1bfcebfa79f0956aa07f1a953d3801e56574822bd4cb8d133672b4b4891d8facb197e79f4ff1409f087c3cdac39d38060c20be4eb6672807dc993da5f649227c11a16484284fa86761fe144df4f2fac65a724ed010d18d3cbd0bd0006c50d3d45e3236e36e8c68ac7e32b2801bde92cc4201ac889d9cf1765b6fe35ebe10bd5a1bd69b2f9c9d2d2c571d986f94046ffc16d776e3b5eae0b14615b0fea4d5d626491bbd4cb12b8ef41c4ed5ceb6029195b4b8db055e26554cb7ab980514188286b693b1d1092404e979eb1635a7a9dd7084837e578f738888772d4dd14853286796fc868c61f5092a352a51ea1aca3deda582c6af0649c45e506642e4e217f7e992e21fe1290c5b7208c5e56ca981dd1f9b4ee88914e2f180620446747e34ae9b8a68616a18128c7e16f21692bc5d1d75f0f37481defd7054f8fa54f39992b3f8b70b201f8cb41daeec64610ad3048ef6d12e223c8ea5b82ad208d1308c27f4584cbe9719a726f33b835f53786383fc6db5549e813de7130ebc9be6641447124c2c147236133f4f3fc33858d10a73b2096c9fa9b4b961feb7eee2d7b31116b9f06b597d0f9f49efd0a48884cd6662b0129ae2be01b889359a33cd77e8af2bd1a06f6cfed2cf728dff12a2b645575c7e48d3be273591656c119c51a8aad4d33296db984834dc62e3b82454c4de5de2b745c7fc9c791d6ccc74955ea46b121b87c1b448b8e754c7ac5052056814b641a29f3663b459461a5ff4712be12f26b6f1c260dcfb98c79c5c3931a45d77f1cca60ac9347973dd3a183e6b4fdae05c31f4427b8520faf299a2e51c91d8e0e0fa995279202068527538c5a3dd03d4dbd6c0ec0742bc0914ffd06653a1431b80fb3637d98404acb389b00d39c26547450113f1824a9d27ee012139c246b54bde659b4d4923d58c3ec59dcd841436a49708ea34eecd1d573455b078384972d0e7384cfbfa526b114611d1451c000e3f9774d0e06ac38feb2269d8020d382318ebfd8cfd6e57a827525f3d64c6dac50ac3e707c2a128ded71abd620db496c2806fd7b9fdfc882eb683c4e5b0aca36f492d1c0180972c171f14af7ecc174df2051f107608e5967f94f6b8f62efda3e7112fe1e28f3f7ac68f5e50015884e323504d66dc148882019d643fa12e297d3fe41966ea010442a6f24b9b15a2a36d4cf55ef7d8096b09af5da72a483b2f6b39de6aa26c668d46ff0d958b4799146ef2479c8dcdc720da0830d76552de13a2a9b7e2c95e26be8384c6a7b78473725257b78172b94a2e162c86b24caea084ec267f06df4184e3d303e1ac9cd4d54dab25dcfbc59c54dc6b0d3d923955a7c9140b3336ed91a7bf58cbb1673e62203de19609c1c9e16f78902a40414146531fec4450f78c41f6a43f005ba43f224e2af5c2052f6d44cec4b0fc9c1af8494338637b46b5544bf96a35c5587a338a13f95ba610de3137381510ad64851498e31e127772a041c62a35afb19fe50b35536620cd6f835e337941c7b0195cb498340e4e5a4c12dfb64510267eacab25312d52bef042dc9d0db4ca33763ebd991b2bca307d632b9e2ea88bac1ff2d63c59c05c9bf167bda9e87b1f96cc27bb847177e2cf67de01cc677d3eb5e82fa3ad5e7f8cb77acef1886e1d879659c61bc8c2269a6751360fb096da7d0c9ec085c2be987087c705ae8de58a921c27c2a7b981d51165bb01e5a898e1b4296c601dd1f6ad1a7a006deacae88205145f5a2d71b677cab596526c708f8a9c9159d529836329b3e352b2fcc81061b8ccb1f6ba1dd909830d1a39041366c1c0d1e2e3919dd4ecb3b9b7deae0b746f270457ec1b2e55dc1172926b7c86825aca0d6ed5dad03a2fc79cf8de9ba967f284785bebb772dfe82c521a73f55618d9d65054d19c7194f5956dc5a8de99554482efc01e3f51eb91ba3ba2e5b993658982720bd872ec0a2f04467d86b15d0c87c39c5a01d433557ef34d985626e9a0ae49ba005555f5b846a669f8b9daa15ead73b99223c210fc6ca0e02b8a57ac195ae07f044dcebdc83aa3f3265920ce1f6c3d450e51fb70498cd2fcce6a89b2bf52562910c70738ba15c41a274c733c4672cd50d54f56287e0f5732fa4c045144467f4099f5940b50993dae7d01adcb98c3471526cd9c036dbf75a06c77413f281569d347f514a309adf8c7d67c41d18f9cfb2c16db8ab89fdd2713366833b9b4a1dc5c9c25456668532057392676775f2a2801df527322617685779627363679fd6b5bb0e7734a3d074125ebb30826c0cea2d9cc3ff049b915760c8aaccd08f984ec8c91b6a96988b332070c1a376fbed42bad405f86eadb9754104a5fe6bf5fd933dfddbe50edeee7b9f8e949470f84186e52afb4b68b4a6f1755b5a57b2decf2b7b7d1ffafc7bf5a533bb545f7487b4cd13bf5923b7399739ec21dcdc2a3d517aa0a11da2b9436d0b23ea3c8ed643bd043655c900b28a09fc515237e67c4dfe6ea033b491fe85d1c30afe2cadaa3de98f3b870c2116fc34464b072559d138dd933a7e0cf18921ddf8c894256c7f8eb2ec3a8ed1ab11f37540945956fe1d15ba85783493a46bd56b08520fa3b42b5546f5b46c347079b3f6a50b2a4f0809fdf305176ae6bb58597d746b523eeba158ecd57f53ea8169222da62220fe844937bfe7ea7a2a08aed21eadf41fcbc997417f12833059ac4eff6bf4b68eeb49e670cab4950e473046e4a7378a0e32dfea54198dfc7f6ef9e7c07971bf99ad826c804771817fa000beb64821eda5c2d91ee68977d70b8e3636bb6c6debe0674f260439f5556ae3736db158c843792354e0616919929200e7120ce5ab78e872dc08718865a59ac1c689eb9826f447980bd2ca35d682c19103a00abd784947c5e8d1e6e2d888e583b79bb92a1cae99c9ce9fbab3a572f769024293ec6b773431e6262db7db213a77d590163940b0f1db84380fcd105c850861d76b7b4913fa7aeb28630a7aaaf32f17b6887c1794037c0549625a3fe90256153104215d4bc1db79176102c081b603eae624ab419f1b42006f8fba61508ffa9f4c13e8d27da502a73b9ee241c4004ae8b89f9f036726fb213642e64317073d85cddf2cca6326564702a88338d4cb5128899a366919e9dbac734cbbf877b80a4f22b837b4c718f5e02f0a44ef187560928b404173b93f54fda1d8e9ff128429cb3fa8b8554232ab0ee143b5653ec25db55a50e0697e932beb4c91daa5aa297cd834a99d1ea71b298c4f99ca351062892fc598af3769109446c626f2ec8d1efb875ea3b52afcce33000c21d1fee32ad0e771d53a0cf59a5e8f05784b07f67f9a2b193f321020a8ba15e9ab0d35eb9c07df30845b4219fbf1a34adaea804676e595ea80fc4d2a35dc29c47f43995606bd36802de62267b14a33e7128b2b021491c3fea9b8e1e4be8cc54bbeb9b46e7d14d478f67fbcbf2845745afea88e32c8e9898e626c6ee236c65561cad2bc5b193057044b5a8678305b964b090bb6c05aaf7c556cfd7ca23ad3f5832e37fdd8376d2efe3c14fec6e9fbfabd112f593f5c3680174841a3bb5975b2bb141b139e7e64a0408324507c443dce803c0eae6c84b09d10ea662907620d557b4e7243c5e13c7a60e1e2abc7e4055ce60cd5597d47f76813bcd69cc2d204588c84d3d023546fb1dce0315b9aa467d95d8bf44bb42ed074da1877a8668083dfe1e50deefa9457c84f1c2da9b1ede17aaaa0abc54e0f754671cd8a3400bbeeaa1031d2f5ddc6297027761749f83ac6147ee90f5f05a7fb8566d3be218ddcb8748b9b585ff99efde7ca1a6d8bb4559a510d2cc6580889a412df438f0fd9785a4f3df2324476548e3d54596ff2d2119ef31ff950a5b337f2e2781d91dbe7273d6f9b886ca48fbabd7a424acec4accf360267f257dbd83ff72f2930fda127ba72c2b778962d6bed514591bdee007e2ce9ec8d8f72610a08fd386e35a9e28d977432b101745a233ccdba0d0f23840cc7b3979d46f341428bde8a07e7e2aeb30cab59dd5a49293079fde5cdddde1044cb60b15490e5257040f043096f801606219963b4fb89f5d2b1047f9a2684ce8e146b25e49d45566e0da75ebfc247920701dc89d76c63679ded38a8c1fe38dfc6d53af43c0b07aac2612262325d9a85f457953366cd19cafa20ab2e7b8e67f29c3069b03bf99898998f5a692882c670ef7cbe276b33fbaddf7948c27dc8d3d6fa01c524b146e4e06be7a9fe0d382800b3ed78d384284c6f0194e9b47a779cc6927dadb8615157318be4a583f28b6f142eec846afac7e2a945e53d49cfc099cc899decb22a13a11df7739395549005ea30da37908bfab727590053c4111e53ef962144357d59b4f40c3c4679fef61323b46693719252e63c83f1b709e4e8b9b1a620ef1e854b7d78f16985ea009413c712609c57c5399a5fe7df5f6cb18c03c8e01d4c1f5d0b26ef8fece41ce1e2d572c3aee62f02b07b92be69daadc9206552f25f89bff929fbb6447674c9b4773f2ac9dc04bb2328b29772b32aa765433dbd478fcb1a7ab660decab47d05d0f5192a340e04185f85bf9ae17f5027b6ebf8b636f044ec3302809c4596e6d9aa236d6277242f8a8d5dff7515de1320b0ca29bff151e2529c4838c3d0666d5b27c11844c721f0dc44349ee362606ee08bf284d6dc89ef08d9f48e00634e65d52728c3d8a3e9e76468f8cf3c66065817ee8b778afacd22474cfa448dff06ec385133f3e0337f9f38ee589cf233fcba020e704dffc5997e8411b8ce49490613e160ae8157f3930dfd7db90b370d06045d1efe105b2413e0f2ae32faad43563e987ec6396bbff6bbd5e8e94011316a9882eb9848cf4fca17ee9f06e6f5c3e4d5cfee5fdc77cdd507e4ec895ed845a74ce6c08d45abf945dd2502cb67aff8cc4362ed50f795726b755cda4a904d75e7319af481c537ba798087db0b3ebfc477d60e7bb0f7c6a76adbe3836cff233c6d39811a8f737d7364fe7e69a25f945c919fb3fe9b12ee0a32e65144ca0ba33b4afe4b1151618e4bf2554a8368010b25c11bc118d1ce11f712abbe5c0b2ef6809dae1ccedfd0ffb6e13099fa8c4604a27760fdc541a05327c51badbd86074badcfd814bdd142228a3e2960b67b91e90dda5d9dff3a9b994255d1852e926e49a5f8ba0745c4ac734a6724f26dd54b63844a784f785624a4a2e9ebc4d9a14f2cab6e1dcf593e588a317caad4be48dc46ecb0946940417e4f7f57f8c144d57bb356b9af11e2db4f66af9839f5c5713ee46d9c3515ea2c8f00b208e5db429d41faf75e04236ada658caa78487e4bd5307efc8bd3f9021586cfc8927fcefcced1fbac27f36b76a9798554f0433959850f5716e1855e6450894e9592ab3613e82159c98a81e4599b5bea6027031957c09a338ef1cc432e0bba7c75f0fca52be24c67feb7ce63a572e68f5da05adc005cd5fbba0b9ffe7825ebba0ac29b5e4e6399556c0bfbd64d5c2618d954375dede3b10fda0e22b5e7415683d5cd12c260a0097725c2467e4e3a63302b690116ae1e3acdac964d55028c6ce43554b2999e9611b0676db1a463e053045f2f00ce62ac206a174b02a23efb6950b5cba6cdf4cd4a10339ca9eadec1d78ceff34e9d6b2fe86c53ec5c6d83a8d900dce13c1960ad5bf980b3a1ee4bf9ddd5ac18869cd514e1bd039544de002c87876880bd20f766e05e57bc4140f0f07fa550f7bfa01a59a0a4d3ba8c61ceedee9b7ebb00043e08bbcd6f0716b9748924636ea4282dd0ab33c9de9f5ec66efd035d8cfeb113a2b764af6b695cc26d09be410e0e88d8078029fbd75e20ef443177a43ff2f033ceaab79403742e8ec19be8e87dc9c347791b53f7efca4d3831f74facf76f983b6cb837847d2165195f9dce764cbf92f13bdd1d424b51c32f469dadce22931d234be696e41de5be3096b35c1214e47a8a7d124e674532f39d0cea7b208f9c67f61164179753d15766fdd4fcc34a5abd4491620cf834523358ba75099ba5a67a5e628c0e96d58c62bb48baa833c920cf5ca6c152f036c835f37ce16dd1cc129d6ed1aec97d5210ee01361defefe7adebfda56538c125be1f5c4eb695910ec52bb400d767be7a34e2b62e6fc1f0ed68f899f4d3d30d2ab19d823d37f9c40e7d3ae509e5a85eafbdb3feadf6e26ed809cfddd0e58a82b3b60aec80e18ab2b3b60a4eed6da56e432ace1023c251f29a5909211d6068acbe573a0dfe8c732169d9e50102d51921b7b440d161719d91c04b9d913f7c39b86c77de6dad8f0c45a2e54494bd0ec9b71407549e5ef56812fe6921b336b45c98d7365f9a207c25b6b09b7090c07f1b7e03266525425d44ae5c64adfa89ba5ca18c7012e044501debf100418318fc77864cc04dac6a9e3c26fc4b85f9b957efb27dbda4a7d8f0063bc5d31989112ead900567cc7f06220af7e51cd4e3067192b484b4106c872c13c6ffc8488e1aa856e57aabad9a382fbdda00caa88672a0f3bb499a37f156a933b7cd4d7475b427d61c914f9688160abd41b4213653e5a2a488361a418d1af53e5ef2a0569f5850307a92dd0d2e308ff90a0caa610051e3dc93e8dd289fc8176e5cee888c61e507d2000668269ac6449477d50eda6e04a5094c2f9a18c5d232ed4d68b3f43f3608b15c2ccde065d2715587634fe850577bf9d4099d4025aae7a5e4ed973c940e2e108378ba05776975f74b434a50cd4492e428edceb81da334c5578b44d41b53aa809de104d7f417695ec67f084539615884d1b5c16682f431f9adeff4fe4d5054555a2461bc746051e7d779f3837103677330408bcd2f39e5609ef914e3ce2d7b418b6a82be7def3686831f9e881da9d284fd39d534ed13d4981b596b5dfac7d598a2171d7dfe6eea5ec038b0062d68e0f35f23f544ae9d306da30c4bc2328e889cc1eb11f31f3ee894d4d30efee304e31f3ae2f44678c4a16aa6b6e3154d35ad619f56545f41d2b4570c9bd17ab49edb13d218660394171d920841d3d189f08a075259745b6b2ba291ca9ed3d7495c71a24546b42566bcf16786e3c85facc63d84ff55b48c9de4c169e2c479c882ce22cd121387eb4ba62299f11517b8ce7ce8ee74e5dcd1d680efeaf9abbe9d5dc8537e66ec211003d320306559b61eac2fff8d455be4fdd4c4fdd10333727e50076d5829c61b3f272337489d228ac51dcfd949f7172053dc93847ef9ef487b3b3e73b6eae4751fa227db38bb9d924713300560d196821dacbaeeeed8e1bcb9d49ff5239387ada4ce9b52bdc870b93daa22b6224854399ba2fb4c00289eaf8a87deeaf3874decf3f22a990808c59761361680e569283e3afbb0948baee0e07b7a983708518a76e2c3770ca812ac00583098c160344b77256dc49b407428d7fa0624fe7b3022f37eed9c97d999ba8aa5c0730094041424e14e5c15470267a26f43db72f2f717b6233a73f384fc47a98270b3528b904e62c6ac4cf7cc7470b2f04894ed649288b7cea8b7eb1877a6878fb3a6499b9e220e13e9ee5f4c865ae91fd2d820ac54fba55dca4f642cba78e4f197c97c5a751c7ea88bdac02657624436aebfd10c9077d2ce9f7ee69e7edc1a9020033f02d4fd8f773e26511737922cae99782fec7a18d0829ec20db8a16965fa536db2e6743d6e885696eec844c20fb4860b10ae01c5ecf4aa45c8343435bfb8ca6315248b9ee490c2aa06eeaf7016ece1de29d119ce0604c715135960b40b1cc990e75014ee8b7235b8e1b8a9004eb16502e66ef499982039200aae8a0d14604da98320caec08534ef3d927546dcc046aeffaa1148d9cc0163e25d94ef1e7b181b84993a1bfcdbd29f5b04da469e7c77f40ed5c08bdae89133c37ae686f45cf961fc498d1b15ac8e2a3c408e094c612650be0204eba17df8fad52ac8054c78e408f578c6eb686d0a05b703505ca6f7e39375b5b732469d74a73062636d041d6f3e876b948f2aed7a06a2fba69d2d6ff21e491b115832e21b09a308b6c83e8d483738655966512d01ff8802dbee7b522aaba8401fd35a9acb9d3ac26399b3daa3a6ed6a52edc135240f29b83463bd17ca7333d67c432dd2131926b286b44f03f4a6337b4b68be8b320929fae1157de713aae249aedfac04688c89e64580dd1b840ef77287abf66f745d391976bcb090a8680c5416970d4eb8eaf866f550e383ca0f1c052ed746ced91bcee370ee4dcfcb074a018a38b6e6fe5cd4880dcb384a7c066a65c0c0db0ca1e197cb14dcf93cc304e855717aed0dfc26e1016dc3732c5b7f0146e3d76879a63787f4f24caa7c828c36f0d5033d69b4605bd8fccd76d006049771f4fac2b9f809b3a0f1fbabf818afe20556f1e4c8feeffa1e82b92b47aba04dc24df9e87eceb9b99a79579e32d0b5431abb095fa47b72acb670664c7c3508296dc8b024f50c17be300184d67a80f66b8de03b0c88cb0de545dc4c88505cd91e816f7342301b8f0f89e0daee84281d8226da7bb2272bb28e065bcc3cb6fd327b78c72c73ae9cb2a0ac768e4c1e4ce1a5a2a236a664bf1647c0af0cd5fdd98e6c0d6f77b17fdb54dd344a648476cbfd5bfd5adce1cae76c103a44afd9eaa8b80b014bdf17ea71ed1aac8ca55acbf596baeb11981a328b2a75129e1c18119718ec165af4c8075c82fa70851812cf55dd5e556442e152bd1da4b7847aa8dec8437180af8db0fa5782df7c3f928919d26b87805a9047bc5b68696cdf91eeac91e65b4b0e0b5ecaff9eea04075db0d94baba3fdca597ba380ce79c6db0005f6f2a475cbee8fb121cf003a5cf4a00b7aa4744e74f08fb1fb5637f10681d4f933a05fac1306c239fd847bdeff636cc87fc4d12b1985cb75263c016de186ce99815baa83045e6a85721c9dfac0ea8b9564bcd5ccc094462e658038595e7e11230059d988b271c55975aa9889b40638f321f2e47574cc50a108163fc4ed9d8cffb33c9db95b02dd9c550932462b104ec36a5ac7867aa417beb31c25e062ee0a80e9b202652f9475f444ab8990cf347a5d46252072cc37aecae8183448fd67a541b15ff680cb89f00576806e88181ca8992e096a26e71e19be6f6ee9378e254f6f4dc433a60e1414f1a64704a5f44f34063beaf776f6725f41b9de8ae37eeb2aa46f63e28094c3d8cbbc360e375264f113c1b4c0c8bebef64b777cf69eeaccd43d616e34b879f88142bcf27275e533c2e5dcd5726739c21b4b976084677cbb63558293fac407ce557dede98eb27c853b22e4f656d1ade71326955242bdcf0161493ff3ca90f1c13e7e6cf579a0606256be905b59c1293da2d799aa22efc7ddd9273134a02b76aac0bc179c5d6a52d6a3d2e80344ce1f691d73f094351067efe18036eb5c9b3802a9be8e0c9bd687e56a151a8839931392a1db2643a25bbf68577fdf24fac34d539c73d88e2e1d43d4d3d532b160baaaca91d62ce8ebaa2c0ddba36d0df50e0193f9d48989404449d6d023c3f8ee6d8b4be31c2e862bffffecbd5977f238d32efc83602de6697d47926c1ce338841042c25946e679e6d77f4b75956c994072773ffd3e7bef77751ff41d6c49d658aaf12a3254be4fce9251d1f58aad98c562b473fc39ce8f16d284bb0b699e1bed026f8a476235bb9484f085e86bf7599f9d85a2f1bf12dc89f7fcf273a98fb42782991cf037ecf137498354e09cedb90e27abd7135692139eb0d4dea12499f78869f04d2e4405df314667ee4597b1f3b6414456a7324f2a4dca5a30ed92bee851cc1904106419c1f7a8e83e32448727c41a36d71ef12025692a2df06f6b4e193bd4171a39e0bbad3dc99dee4012726391a6977028e66c6f04f092e6a3b9063f2085aeb77068ebbd58624fcfba74eb1153e4f7da3c8baf11094544b83ecdc1428b380d0047bef9b1794573041ee1c67e35f8f652c2ddc91aaf909ef0a534cea53b4e4d4a0e7df9239212ce0e9a2b724bb28aa17d0e60b29235b6e0cd0f0ef283b30b729628b67b9093030a2c0f0efc992848db7d3aa46452c1151192ef7bb64d21419e5005a7c2df332918898e14f5015e343fd39fe2d85c49b06c2d6b9292bd0242bcf047c4e9b747942cc97d5cb2167e757638406fa32c512f1b1e11a78aeb54ac5cbc9a2b36f4fa1d12141c91765ca97fd0a7410d648bf93a389c901b17b604e75820f39fb772e8a27825cb5e7b46a28b3a4906323bf2a4eb49184882446b3dc3cda12b945323eebf3902044d98adc2b036a1031114e4f912e4ab18c00c775758c56c9da419f1a5eff5e2ef5592df2b56691eba8b44736e4d42c26a16bbecbfc1a871611f89dbe8ac9f14546fcd7d37fae4e42f0dd17cf25d842b455141cd3648096166553038063d5a33705d8d46ea3e0ed9ec363a24f7c2b04ae77f02ba7db6aaee17d2dc65884b6ebf4d92d39baab24bd1891d0bccfc5f9ad6a7788c70af69d680af19f6d93e7aa066dc9de4be379db3e96413431b99bd745339052a7cfb6d4adfe2cfc10928fa9ce644f5413b9d2481b6e77eecf69fb5d3144b59927326349eb9fbba0279113631d344d7a4ba2f58bff5270740d99fc8c244d92f3ed34de1b321b2f96a11801920503779cd39f82b58c8ba03485ce3a399bac9da018605bf3154065a32aa4ef75711de49cd355c90c6ac2a35d5415ea6e0d2dbb323f6549ed05b0831effd2ddd143d51e83bc9de6b6e73d385de77edd9067257a8c73d82420e317fb49105f4a4bdcc121ec0dbaaacbecd9431479c64ff2d36b7db1f7f171e439c0f9323327b69097f9c1d6961338e6626933357ca73ce69f88bc3060c90c7e71dd021e7f2fc7e5ed634cd772b4e052c74ab487b3a785c1c9d6f05290dc8eac28b4f213e2bdc4fb337795000397fae11c4a1aa9f021024abd0ab10ef35622c1e6bf2cafbb42f5e27087f69ae3e2ceb0eadf2c70f9c1689d7932ee987c6dd2fc1c926ec1cd39c87f77d9318999ac93d2e826e9548dc4b4d5f836a275350e940ac64bd050995af622c2b9a33fd42045c77a0b450f3cc589035c0673f33247406a9139fe174d15d688e583dcf999fd6ada9e7311b46340ba09ed72c472f08acfb398b4cb0dd3a65c87986a2b347af48a6ee3e93b9e119a12a6fa4e87f8626e481be451760f71e2f00d174976e0b372472f076ea80338b44df6712eb8065bc9587591c3198730ce6bc9eb9bb2cc201da63d267b50868c663fc0ebeda1040b6645ce20161c00723c6af2158ce5f3e394b7e924a17f9c86d981e4fc9cfcdcf490ac3dab41fd34a6cdb68b9a669e430804ca90f5920320d4002e42740634e7de1aec745f395ee8862e35e53af06cf95c91c7a90456c45f20762e77f9760443f4dc4c76d9c68c735ee8deafec518fed51d7494155a72f55885d6fea586dfbde21868ef25fc7e1e4e80ba3ca2902df5309ee0fd04bf9fa7134cd56c42e11b50d99751e805fa216c4ab695ba84f30b3c69c62d531bf3c03898acce1fdc21a3d6612c61022c7240968b28458f138c6661a27ca821e2730e87be96a045af0c8cde5ab75a1e104ef1c14d411bd324bddb3bf21f4d76ec25face98c2ee4acdfc74ec9db32c38692ffdae3e592f9f612f6a37427875170c1c890a61da4b57a532b6b676bf40fe1b1411500434d34ca9745fd14fcaa2a8443a45a9a7755fea07955622d47de834c86149596fe174a30e08d13e10c8b3775f82cb4e6bb960d1ef2e1d88e640eee9bd12bb42c2e10869c6f5344f8039fa4e407704f349f85aafc22559a9352242a6042cbb7016b9696caa54cecfb4d0d4546f1736fe76d3dbc8a5e85393eb1e35cde071e198ffdde4a0b0df920bd93ba1d73e236dff4a6e0a8e51e5b6c82db92bc4482e31f3cdc582ae624e733d614b3b85522d5c6ebf39a17fd53db0af0e01458aee110d23d20c6a29fcdd1d59635cc1383c779194a45f11edbf239ff60a40bbcb48340ebe74c2400b7d29420e23c813bdb96940cad5274f7f1e56906e9eaf11827386f314258ab7de7da63b5a3ed0d28aedbea368123fe67b87c5d9366528f4a384b3c6316a1f7919a98984d728910232597c1c73e4df5fe7e7bef0e1395cc075e297b2acd06c2309845ac92c11711f41a7015f5fa40c7d3b01c73df3917cd516ea2d8786fc71987cd715ea6d02a2e07792afde857a4b713f7658c464bdc1143f0e675d7915eaadc46de2d9d93b6846fdd24df29dbec8de5805e01f420c9c1a41a7978f9cf9377383b1a4d8691a2077bd233ac93183b90543280f6ed3c617f0690d9f3748ff43f2c30ae703764e03e6f2d31ab8cae10886e5ee987d44c0a36656480520fb80c00b17578b71160c35532368c7396a9c7c6bb764a90dd7fcf14ace89ca7f8c015b16aece9af6896f9ae53130356765e7ee6a3117ae6d6aa5f2f85cf18db67f660c27ba95176dce8d1c43ca0a2bc4ebaa3ba03487fd59d40e4a0ee408e0e2e1923bdfb00af8fa8e11d62c93cd267ce4827a8233889de2f77dacc294db9af12a94ec327b32bc855b2e9359a24c99c19f307e3f83d7743cd9f58121aa7dc3e9965f69c0071c144adecc9919c3e3295a011194aac9296d99b47922c8d5aebc5207c009875fff713bd0ac0ee47fdc10e676f49f3704930fa75383c3728edd17356b7144aaeae60a1b2b2c80eae5017df71a85ca0435d874c2d200b6cdfc9a0d997a977a153278451964e25d1508d1dc2e4ce00de1fd992535d77e40a9712898e9068e98a4faf72fbc60046bb5abaf973c884b797e75bb8bb9b52be2bf44dc3791d8fcd66f9571fb0d6b134fd93d5ec0ccd1e418451194d6705d7da2b1d3e5cce92a74219f38a8f6ea86f84e6ceb25f9f7237940683b96b2a3eea60186af25e68af1288a4c0e56d8e6c11d2084c9cb10a43685b4facdcc865894b7bba8b7e063ef408c39d40060d6aca18947ee7ea40d406617d15fe393635169173c647e69fcd2f4af49d131373b190fc957fc1310064135008f8c844d29fdcb3bb845e0937d62172134bf9421bee4ddbc2ba598cd356b175094691db273ca443353cc11f7605c4453a3b9035f03a6275ecd99626edfb15608e5a8f11781232fde6b17bfb8c21753f8624097d7e7a6a0389bf91e1e12ef073c51258781963e2986a94d7be8936681b28978e0b67c8401dea5390f2680cc9b71361d97cdecf121d99ff412744cb498b4ef494e2dc1441ffed341ea36dd16fe57ba296ec8b4f950a38d0dbd0e7983d39f2dc6f5075d6fd68e4e143cf0a2ff471b5505e917e17924433dbc470f3a901a28f97d00fbf4c6b57235ec297cf331dd121e3149decc6527595a2f17ea90bc4a62d37b73997e17256f20d7f0b4626e0e4ea192b387e725497e1dfa4108207a924999a94eac9ad1a276f4f7d2aed0b12abc7eabd0b29ee36f520d6999f328d34734f4493f52f83197e6975f908524996e42fb67c1f718a9f8eaff548e4bb739455bd74ac9c4e96edd85ebe181668e7e6df2fab72a2ebe109bdc3995a1e0bcf07136bdd8ddcef8710e6e7c3c508cf28d0cd116253e7bf6228ef59d9e97baa36718a276aec6a252558ac1dd2ddce43f041da94fdd9d70dc81d0de4c171d5595251c83e592b531472b91449373dae933b41cc59845de482283eb02560a7f6da08b5445720c64199e4f9fab232eb33804039a8db51c41425896903b887d42290871856748784da8099ce0b1196302f86b3047cd0d3349d91d8a941514692d215e6bc896f558ceb1fbb1bee200f3b703910bb7f837189540246e93bdeac291504c59b0df148def71d49d200ec4291e8dece50831251284b0bdc72c0233e73233851ea2c8111d9383fe527dd7d996c809e7f5000fa1c0a4bc136bfe3487c8f2e5c721702b02025aaa958700cc235bd90f7d5689c300c07e7f0328044dde13b8bcef872a7616e214f4ad393612234c90278d98d14dd09c50f20775bf06a7f4b940866e90e0f127586d3281bfaef06afc896b32d36773df770737531999113d21bab522e7b7a77fdd431d099e0b6c01df66390d8cfef0493dc06f9cbf60fc4ede5708e1e2cb82bd795ed36b32026c20617cac293adf5dc8e180bd7da65288f62da82addedafd0aec0397902a5e3f8c53c7357d285cdf56435e90af538478b1de8d182c844fc246ea327a2a3697a3800c239126077015f730784247815b6cbcfa44ca709a39bad3de30e8f4dc7e374e3339a1f5571628fb4bcc91cff47b113c615cd17f19f74b5fce4a536f1ec800ad7e0997d03175f91459fd39a9f32f23ce73d5debcd7568422874d34e95f1f50664bc570f54745f92e9407c1e65aa4ca77b2e91bc187c0aab10c2327957ab829b6146ac9f35ce55e4eb73c0cee8ecf12f3d76399363ecf4b600ba4ab33f88bdc2dee10b5b40bbcd22feedd0003e778c573e27ff1a95f3727d95f6d2a11a39b72093144dec02cfca24c965df846d19f6f0fd0b799c1c65e69874c218b031785b05c2a14bfc43ddd4370625c291f2391f249ca4b272a0f75c6ba43245bbf0ed2de20188a100937afaa553d83ddd2161f38c700be1b6df2b062008853753b377d09c3e5220a037c314a3174c803cb20550bf02527b6cb17849fa9fa891ec43b5f232e017b085a895341de5496aa548ee536f66a06c34216e59bd6db8b4164bca92e105d44ccdb8d9794aa5f7524fd8829f2cf1444d14c92282f0b43497a6c420e924d31a2ff0e9492af969b206879c016d2adbfab216641c5113e71eebd3b41e9e9c5bcc52103d54193573d253959edfa8be443e90fe0bda3be0e4e718e839cbfa4f5a512b0dafc7f0002f1338e47c0cd99167c337e19240e0dc819c56386d625b88d759858115b83827aa592d2c8fd35c3f990955cb4555ca00e38de4eec0ad75391d5d7344a1d28f63157fa588788a4e958245544e96308c569536b07ac88f383a7448fc06d8aafc8c9d08e2cbb975806f68b398d5324bde27f42b57df4bf51bea5869a5d29f62c407a428cb6085defbb6cd9e1e6de151ba83aaff3d9d9551d2d27420dc8953237d177bf24d49826457bed946c6b87573bdc67e8322cbd0c914c06236c6a0e7128b3771c93833d69280daa9541e61059ceb7c02eb5ab84020303c2dd441ade9c8dc130ff9b9809729fad261e7c12392de978081d7ae6c351b3fa76cb762a2221fb3b967ccb35d9339d33f7d6180495eacbdfd227257cbb3930f7ada3ee8c7dec6e1d41595b69932c2462712a416c06b33c7d3185b27a0219d21a4c0cea8a0a2cd4b6be2fa45ea675d6c60fdef2eb2f25b13a1501b893d23ba53a86aa9ad9618b85f4b3fed8aa9eb0d491f33734585549453b7b3a4947b23648bba3bcda39c1efa3af48c4a560fcb3d115417eb08825ef477df9d488e6a7b27904e9aaf2a6c2b27eca13548e452ee183c898cb807f7e0a6bba25fd7dba0be90380414a8e1bde59273dcca1c192e309b9c283d3bbec8b835ce0abc838ec9d31d5cd64772c9492e134666b88c7c8f06ec08efed402e1419f59856a2ef503e5e20ccb4f733c86d4b3947a43bdc97b390c729bea453029647733a038cc596fca6dd129d41bf621f9cf1daf2819dac2dc0c7312d24d075be7074da7da45859549cab47e7a0b696e0fb762a6386a625764378d722f8408ea8a5e6f81dda0bdd951dccd24c863c92b64823b791278acf6a4edfd3efc2bd7b02d21c3f2cc7fe621f83eab7afbd8be08d3eb680c7e7e7041b9447be957c4ee94b9d0dbb4e97e8988e1589390325c64843dcdaf42e9caa156ecf25f1df9f60c33bcb4f80f12c0aec475770381f704bd46ef496abde1429fec35b2087796bf266f9996e623f53763f1b0e00f26c0ebefd1ce07c14f5cd6fa7643ff3161649fd347d31bb6d3e247f80dac54eee7cddc9ad7fd6c9d99be5db798a7c3bffb49370453c599dec0a7f87841e2d24c6d40d4300f627854bada8876bad67d6e4cd9893458a0df49f61836ad546b1b3cc57ba290e37af14a6b2bff12fc5e3b6c5eee6247703c7d20a1d618178e1107c93d16d7b736b5a301e2227c2c03edc90f3b798ca2c7935e76f1e4e74a8738e3ed4793ad45e9d60aed066de046f4c93075b7d3bd8adfc0290301eb1171524fa60081587fff6d363571d828f74f54b2fa80f73f29d7145dee0fa86e5c96797ad8ea6f51f719f5a29840bcc8009f38562811e8016d23bb03c3029d91274d70b480992083537b026c38d8102aeb344500e52fcee4eaf473c000f9aa42abd01b096106e188e8f9c5888305572720697ec698dd3da53aeed19022fc2790d12fe54df5fee421e38c5e671884886c715174c2130b63b33bef3fc95be9559aaf0841064eb8b5da11eccb7b26cfe274ab86b9885115e8f2bc49d19119e457040e7370a7ef16334d49a04f008e459f5cd0828b5d3ea91950711bfc99158fa20deadeb462655b7fd3b68c53c02e36e91b62314e26da729e398d162b6c8f19885a03a23cfa3a2241fd69cfccd277e5b70cc9cbb1f3b3ebdfb824396d6fb43e1828f2fcfcb2eaba2c2732982952ca1070967f2434470a64bf807cc18c74dff7e115e4e1ebdcb576dda8ed6a72c0487387aada0f68056be189fdf41ce653552b94acc19ddce274e22d2df54c14e510bc9b86566688640d0ee552b39daa2b13efba4625987325770be9737590b67cefc910c05a73362ae37f0588ae044a2cec625af24175e49b3e774578c1903223eb1c3bbf8ee3f0667181027da7bffab3020e6671810b30b1810471cb9f753403e29f24847ee3547e7c09dfd0603e1fea7301034dd4918889c5ebdfe8fab970d6210bc1c6b0777872b5c5a206e16744c3fabf009eae6f460431662e12ddf1e23677881063e96e084ae1080554400229fe8217b259cedd214f49f2d3d9f16b917e9a6f00e4e11dfbe1c363371ce0263c2e9107b6776f691297fbc563efb88feff3845bebe0337dbfe89be98b6fa23c4b90f8aceb7e71d9e9ff38194a2817ca742a1f0ea5bbae04fb4c8595ee4825ee410ab0910b566ae6f853bd6962ca433f084fedd12eaeb08b78f174e091e642861e80881dc881dfcc802ddbc2a39ae31deb6abb778db5e8952760b9af17128bb96d872a8b22f54e5264f6c500bc802ad2200b73e8d172ce70d828f4f9be546c623102d68902a32eecaec2eea4a17a05de3370b356300e5f281d33a2c19271fd39c5b31286576199ba0c672c1a1aa534c24a31c774e07c9c6169ffcb11fa2163b42ddaea046bcf085405f2fdb153c22490090a3b2dd32d5e90af7beb0528c26d814afecc3081697ace8fd59e4d038362e82783202b8c65acf6c3ba749c203c5893c6eda31ca685333f66403795e5b8ff59f1ed947746913557d9258d62582c19113de1fb097573f2b6131228345e2a1812e3ff463fdeb6bf6c48614cd733429a5e6addfd79dbeefa643d17a1b30842637dc426df5b12757582f381045efcbb5cc536a65f132a321f7a6c4548e81c4412474e5bcc3b9d517ad5e3c47a4878fb0bb7d56faf7e5027f04fac13b29278b57f000f0fc65c51536e4597f7664f21562f753383276a46ee6f723a3720e9d96631cd8bff8059e63cb892a4a03659d267590383e13c89fcde13246b908acdf40c1503bd5df7204ac26efac21a83294cfce98d3d8e7e075827f7d36cbbd0f6474554207cf3ea384d096b9198e215b0c3b766dcf3c0626816ea4235446ed886e78b724c89107ad507544f594e0912d8818e2faf4af1dfeae50f77e54cb17ee637128af9f714e120eb424026ef89c0156ad46ca1977a78006355cc57806186cad9b7623c773cedb1c30dae7eb82b222b813398675937be33dcfb2d0eed2517f8a8c68c658f5c44eb0ae38ca9975d23b396414c8ece2b4263d0b49b8a34f4bd7842c7a5a1a5c41fdc9f2e8967ea98c1251af1f527b30fe19121dd9b133cbdefe3976f14e41ffd1ccd3b96b171e91f7bef808ae01977fa6811c7c8003a12331937df2639a23e927a7ea1a23e4b3bdaa10ce7d0135ca9cd1648b53b4540c214c5596d0c5b7c983b4860a70b1da21ad286c192eb12f0ee9fbbc0c705e9b439ce1c7c2c0d28073c872bb0c9764a0ff90742e8634218c2a15dd4c50f1f9952a078e1b05abcb2e2965babd33b0736ee580968a66d5331938fcfe840f9a274430c08fd6100845e1887f17f2d03be41136d3aa92bbbdda39c88945d77c8bc002de1ff96f0fa456e59cd8fed7213806a6d2d34efcc8c026b21f629310a3104842c2d5f39c80b4ebe44af3bae0710cd8cd92f49fde420d0e9279174fb408acc9dfd32eff784d87e2f3cbfaa0680dc80d584de491c28cbce044c03b29f9be1c904dfd7d85cf100957e30e2d06e52050b73110882bd4c391584bd11574ac118844b6db571f3913d8a1b499c2997bcde41c08ed8cf533653be069c846948d8aa0b54490a9b151d42c3b67955802e6315cf1bfe4c95b85d45b8373590cd4a856320b8eb74352b2785d5302342441f6d7c4bc75f21c498ff44a241ceeda6913f5ebb210fe8ebbb98ee3ac5f3f203dd46beccc7650c3bb0888d87dc474add08360deb79c0786d853610e93141c07081b44daec21fbb2f15bbf45ca933c8214d60ff0531e22afcd5dbaa9658a500ce5ed998cb10b6319631fc632067ca57f9431a68a2026370a7255913d480ebac5f0718f893ed548acea25a52a0ae84124f6a24c7a9a5e7cffea53fed305bc55d60dfc1d5a6703df902e6b60d8a0b325689497355e7636649f5215c519d75bd553c2fe931f2938e5ec52179eab8973f67c89e56e66e994770eb8974de27ee3ab4d42a96897590fbe23c01a77e766b71cdb145d555c84aeca89426f8dfecf681548d174db676fd749d1ea905a5c0b423b206e794d93f3b2790564da89a8503b459aed978c66f19b24a837fc0d2c209692d43720f2ec94dd3ef409cf69a3f67db68e86c24364d5f3356d8c09c21ac3a3e60e7e38b92ddb7ac1d1a5807708c7ebed0d7f0de6a3b619208f085bc73d07efd225b7c080006bbdfb44206510a5d97fe396ce3f90ee08ff400154aed891a166cfd165a75eba2baa12a766c88926540cedf727f9ee0c41e8b0332d70b7f66cb87a4440009139249cede0583e7280958d06bc9db1df695ef1fdd5d4772c2d913a3c5a3bb15d28739236a2f573c940c205156fbd98dd2849debfb57bbb8d5a0accf21a083c95bee607fd128651ad322d45b65880f8e6c19f621df798166260bb028eb0203f138ea71c2b0e48a559eb0ab5f78c50ea176e300e3f1d88f6e319315bf72d5b57313cd3779532ff07f45d4b49e76822ff298d977b7087650759e0c83b6022e3456f32d1abc207a85b6072976e6b36805fa632ec7048f54b13230bfe54ffc5aadfef338a05803d085298ee65ef916361867d15417f70d6e41d4ad4a9448151618a19ac78495f19555949a8a79005e0b54217485ee5743ba7d89ebe6e44733097a69fa5372b8a3b5fe2fd741e9fbb9eb0030280e45f7601256c4708fb9ca1f1b62461d356e49ca9130756663942b55315a21dea8d391d0773e343abe2c2016b4e4a9108a16f2439452a41be55dc1e84783eeda000509f800228373ea387c7ef87f4d3a201e2253ef65d512f483ac145d7194e21939fda665dc5e78192d11d1cc684ac666919c2299c1d46e3a8975de14dd41276dd6fd1d463cead7d2a27667b21b398ed3d873ce708c66985495b72fa13204e4ead399b39bc46e09f4a948d5d2d94254c9c0c2495bd482387bf4622c8eb846c28e79f5bc27501cd84bc4693a9ed4e99626264c17e9152e855b80577174f7f6f6c273dcd38d65972a20521d84b5242754e84a25a53b9f5f7f415fd07fb0eb0d666c449b944c8fa515000f59c3bc140b103e8c1b44c10251f134ad0e7575bba72630457e921fd7a1850084eb74fbf9e2bc4ed51ee16320f97c9fbf96dd1824b1c3f5ed263d7d2861f3e2c6d78b42d11534b82c1c2d9b7ad7c1b5b8286fb2c0d3433e1f7a6b470393261e4d98451e9fd6ec2b88b19d4d3ddaf0c6a1f0cea8c19d4721942c549b7183e1d11069a4b1183faf60f32a8b686681bf3a7130a74f087ec28742042e63c0e59a173915f8d715adbe29372da3ec2016cfc19ddc5c4974d13ec28dbb4e0a84f99f4d48a5146b5845203a61f4265424d513f85f82c208f25a9e6060e03517572f42f679f19f2191999cf0511f7abd9b6b3c7057221520585a4652d8e56b9c224c7db6834b19b2153dcc2650e9b74fcaa7ed8b123e58edc699ea3e44c229caf11cc3f47e6224a7ead76539b839e8f01fbb9226f1f8abbf5eb5b5a8f05317a4b66f472afbc27c9bb14180815645fe5cc8077a012847f8458a3ce0e01fefc2b67ccdabe70736e7fc9fab6b610dd53d1f048985b73bde08f503fa0e01dc90edda04c93294bbd4499f692f4f7f1de9cc93f52f8378dc27fed471b348790b33e3791802aa404e3afa0682bdec1a44873e9c00645c20d787fa61d4a20bcc2ad10d6c5bb00441da6cfcddeb16d7bf0967645eb03223755f03677f067c67c00b2994974d7e05813947d701f535852d0b4279d748b32b1ea22f34e5ca61e97a9d0263085faa42d08e00b35cab14364d66ab3962513e340590e901c2f7088d245b9034ece0c316ca6ab062b3bbe82b73bf275bd8f9e41eb71d6524fc9cfb5d265a9362b7d91f8e220bfce5050a7db8b3ee7c79413ed7fff90f97318d441bdca47b68624d0e740a8390cc49442662e13dcf0948eb2ad111ec52dd050cbb771993ea4d2a03232e211e88e96bbee7035c4f11ea72ca7fcc8bb94b22f8af55a17d9bdbc3262dd14658a8be7a58af4a995d26f2c7db604261d3c4d3c292d039de00bb5a897e0da1f148f0a2bc3ed564b3c29555028bf92495c3e7d8008c932ec2cee801194e2d7a170bfd2ad745faa1aab62f21c1e9866ec0bb56369bc6b9e7cee64ae62fad712b7f7b04c1dd9c2305a4a0bca9251eae6d8cfed01dc6f4d2136c765d93c50415c4e1bd0892b95f6ff3ffc27d4dd5e8edce89b2ca275a77d7242ec686ea0c2d23fe22c58b84e31728966cdb729e680f47620b1b293736367350a10a35b8e6379ed882c05a8a4bebcf08a52057168439ab3c3e0cd88a496f70b751082d5bef066f1d39b26b8bcf3372bbb4e94708d6d569f911497ac54f9d66dfa5fa027e1acd71e07921fbef58d13cb68b9ebfac4c56fb838deec2ecf8e67e20fbfb5e65fea8179b3f871a46daceff91bb28570eee0e480563f2d6adc5a62de66dfde580bf44e74e67bbf4b3f752e9e85b839cf8014ff5ae77c1d5e00f363de986e1f1233172f113a777d89ae6f92b339359b71f1d371f8e174595367825fe94bb92baffcbff02ab14cb96f1d3473b4fb36e3a6131b7b5e13ad7d9f08f366f3d39bb80789d372f8b6b26640bb6f2b6b8d277e9358d8d3e5450295b9be83ae2f5f7c5812dbe40a5dc049be5407c7e88c9a99d62697478a45bddeda1f1f7e6b15aecf754c833d0670f000e4f8b728faf5be5d2418019dc94b53eafd7647fd9d55bd5e6729c9a47461bed53ffca53fa667d6ae3f3ffbd634fc30433fdc1f7fefd5f50e5eba5b207a5dba2c7da3c8bfb289ae1fe53386c150e21914e0f34bfdced8cb94b8df56df67cf22c57f36b189e5280122727aa95a0d09319697e8742d592fd166e5429ba69795442f1377c9dfdc82d78fef1faf7dcc755da7469796debb4aab415d2ff18a30635ca26dde196d4bf4e01afb729d1a61767ea8f4c3abbf43242e117fb0a5d7af85eb6faef7e0d279429df301998d05ef8de6854338f87b3cf3d9c63237d3f7ce59ab776940bec1f378b9406e7ee430cfbe637af0a37cf2d76edadf38d9bfb611b040d7b9b4eb737db672e6cde427e1e0fa48afcfdbf51efc89c4777e1d5c7ff3c71bdba2169709998738d94c83b4e25539ca30f6125488a4a21a2af819e4246027a8532e1c55753becfbd584076dac51a836664e3fc7ae5b7058200c87d60886b46d9f340148d2bf9151bffc1a5ca69b45d2279874b407560214eb2030d522eb0148f1d4290189a225d29ef0397a2dc50e75877eac73807da526f77d5680e93961e75fbd079441815105a9e212f5cb25ac366e2e97f0e2128dcb25382da22e71fbad444b0f3588dbb8bbdc461897b8bf5ca2199778b85ca2159778fc5682760e75860173f483a7cbc55e841aa84efce0f972b1ae6652ba716bbd1f5a7b89fbf676b958bcab43a136ead5e8f885fab85c214605d2c352eff12a7c5daed011884b37a9a33264346bf709514b712a0ea8fd0abc57f35f91e963c2a06daf42bca38a680d32a4192cc8585959eae1efaa14a2af8abdb427bc114204c8207856f574a1ea5c09b1e6aa9c9ec9aee509d19c66a07c9e65a080ebe3d847efc7e43da2664edcba3e94f463ad84d873f3279ce4319aefd62f3592839da17df3ad07e46d7df3ad4e5f0af555bfd05fb591a33ec02bc6d0767c16b78981b50c44945093375adc396570563967f05bcdb6219d5c734935fd9c831e82a2d06986cde32672ea0cfd130129b982e2ec1ec49cd4effe14265746e4f3857a63e01e7fb992676f2ad06afae59473fe86a1937a6433a583e033d6b65785adcb3b9cd8b7650c53698de3e5b03cfbe995d25540b3b61864209cc0237382983d7f0c8a3a01159e33a8a02b54b8a6d884f0400dab811c03ae700ec3b98f0f8800edab4616ceda1b0a3941f1688c003ff0b348961dcc09e4faa10607d5704c576bb2c61aa8955500380639ddb8379339b840f983db78a208b0aa31e71caba170918e002800fafabb1bd3051e6ce07b3a661c2c57749e692fe0bbcd74201e9e2737d674dc631e38913665f344e442db9a4c4fb85fd53994fdd437eb9d2f3c32b936d61dfdf74aae913097379a1f6fb486e53d4c585e805236ff2f91638b12056cc1214368fe339bef847c353ebbfafeb2a366b24c6bd3dc3e256afdb8697372d8e718173dda0140fe60ea6a4dc980e1cf3ed311aa659133a2fae228c9f0b091087521bbcfcd89cc2f7e211a09834ffaf34edc35f59c8505a389a4723b72b2526f4bc64302aae9690d78c93d82ff80a21f8ec858e13e66015b1652c0ab7a3410c326828b16c5d9ad5188e0b7d44072a9e8288920cbe52993dff3005c4938a798ba8b15f2d1073ce14e28b59039976663bb0c5008c6f44398f5f485be89e830123ca7a25dd6a0b9e2bff3e4caeed7f79ca808bb318877e3adb51b67bcc7acbda61e2e6c33f5706187853d7345df2ae79cc4fa11fea932cd9087247b012537d466696fb33d083b6d2f5ff8e86a3b1d883ac780f9e92464ebdcbdb4b54da3fc78bd8a5b6d8aa0a08a29bbd3c07da509ba63f3a5be170ee4327f27960fffd899ec8ea2e45ec4eb34403f67943fd2795ce14b23fbb60081e5c98a6867f4430f291494974df8cb8f34a327fb0fe950dc30b2ef143ea1fe0c311d405611a6a8a71ba8c303d15f7d241a4a14743bbcf77cf1be500c92cc53d80573aea7f0397653f5395be38ea3b55c7ee599570c4f44789c0f513ab0afbd5c9c0c968a2bde0b720813fc91987aaf6231726f7aaaba5f08f7b77c558dc0b125f72bc80d1c3751639f9f14eee68e264fde44bea73db1916bb9a34faf65bb4aee971b79973be249f774439022270584f832765795080e1941835ef4a70fc12873f30f17f5c5528ee4947d12ea4c2368725ca498a05b6f2ff53a04ec024a39c31ed83f86903329ed1253852e2f8b2ef9c553e2eb29e9592bdc8ccbdfff4c45fea1d31188863ead8d37f3093eff5a4a36e71b1425644f271f5237a345b15f86aee053828b9b92e4a36337b5d829bba9ad0154bfd29447deadf5823a9cbef58a6911b734f27f68a825420201ba214fdf063bfb23ef55837bc9bf70d37a8f9a0862827e2d1e88e07046e35af1f23d58cb473e20e1c3f93afbf7d892357820fbcba3135f072346301f9eac87bc02b368ad87b2976e8a6731223060c6a29867f9474bb8b7077ad310c23cf23d52dc14fcefe7c08b360a50c12364606ab8b572d24a34ea7a426f7bf6b2e8f692e76afc6b7b81f0c8a74311196e9247bbdf2336911ee8fe369ee73881f6876655c7fe127ba8fcf4a99668579c028ea5cf5767b44e5eb44e9ebfffce3ac2074fc00de45e0c41ad8bbb732e70c7cbb43d9dbfc98169a5ccd1f69b26c46122f777a8eede9893e9dc6f809a4497c19492bb3467c8b2ad67a63d93cb9a13b33d1302dabf7d98121a96e3cd66f1aea98b9833acdc116306ac7dfd8b28c45dfc2e98c8f98983b7ce34f79acfb365fb88a9624f1ef327a900fb03da01c1e6e09cf112b9fb74c476d1a6d6457de17a0c42ab1f51e246b1ab613098d878b8ea8e445f42de12488512e0fe7159cd106d192afec6cc9b6b1c60f014693a4c753fc20675293690c1d1dc81d21ff3ee0b7cf470d351d4df1d9d57ef099e3d148fe93d38d63653f136732c7250e2dd63ed22f5f0d737907ae32894490ef2d694e3670fd5846c3b7f48b3f6be436ad65b51b94bfbc211e5bba8a99077563401c4fb1e085d0d5e5b1e7b6dd930aafa4fff005bc0e1c09e7081a8937fd51d10750036c7ed2040b7e9c4e2de04c19861bc0703e16c1c7b4bd2727914da94931c97d8c2266cc413ec5b135ce1892d278ea9debf079eddfdb759aeb018575e9c5fb1ec4877aadae8ebd5c0f4cc5d4973f99acb98e56baba49a498478e10c0c6fe2235958002d4af6e72a2eb18ac5b9a0c0e957fa3bc669a8152c86ff7894c9a251cb7dd2eb7ba4a2ae0ba4ab09e8a81d91f7e49eba49fa8758177862361e905ac2db43d1fd75a92c07f5790066f34637574bd2aef1863751d3d70aee31879ed5f4b5a2760fb9f59f3f0fa86e6a3a10fe484e19241a9bc98937938a3693ef234e4b1069118719a4954970bec1d4c3dfd95b9ca7b2903cb1e38d3447f6858eecbda8bd9d117111e4695bb81f592c58b0e2ac336bfa37a8d3c00bf1b1bc19c82c81743b42506c563d3ed4331cc3604d298c5ca2afc18d7dd261bef184f7ae4ff8496e668eb9c8c33ba398811ef4369ec8c09ac843065a986c0e33baace36aa5618ca5c87fd06f305a4a80f52b4831c78551fd76e762f282da19e7fb012d5790397f0e0c65a4310e14e1068c1022e6b357aa2fd433ae055aee3b87af084f04f7a7a98ac923e0caeb0f7c99655debc0a3b7ac4cf08520454f23a70f9b6aa4cad226b29ae5ccf1f11e424d11ec283ae6fe71558f4b96e9c036e91a099e360317c7b7a577b6d9eeb7e62fe1f52184f8401af3e6203d2700c578c82be6f315ad7967559371e50d7c70fd0249a9de11b57cc0a37b8b9cfca3da6bfef780bd7c5e3d0517e0f3daf98f8b95cf7a3ecfc98bb573dea58eefb99101f7f897dac9393baf4cfdf64ab608453a21fa2429d98ca4801f50b17805690485267df02e3e2261a40c11fe8413d48ce7ccec447bf7c052dc3e75fe66c0e4a67f3a7f53e37c49d541f24d7b72260142219249688e4051db31d59913147840acd99b2627cc677dd3a3782b37ae957d8f6a790d4d3972d76a4dad3b71fcc0b54211cc2225488b85a668ea9a16ef9edbab0be4e356a4701e2dd98aa9c705018bdf7c93b2e87916c462214569c59c7b28c42d93853909f60d128b584684eca2166a07e52dc9a78d14092594125d408a9adbc5bd85aa90a6f596a12ba9d9020110f0476e099b17a99758d60bc8b75691f8d03a1390586c871617d6fc80422b425671ba3767027bd49225b593357aa57e6be94c5e8f5a8a85768af9f07f6e27f4a3add96329dc4f6a307bf67509260061149a27f21ff4f65c457a08338c6b55d7abc81b01d0b83569c6c1fdbe5673c26e55a1be85cc096ffdc4fbaf8effcafaff2d59bf7d9dadf3fccd11dc480f0938e9dbb762c472732a96b55a3d14bd6fade3356b6a5ae63c4c7829808914a53773bf86dcce82dabdf7c7f1ca127a84dbc35230a7921ca69950061201f11ed49c4b8b4865d60c6232aa5d9e2e4fb4c958f420163cc77d6e95661948e0839c4d078328ef10566b99fd5681a153be5530fceffb79858fefc5c399d2fbecfe60f6745328d0b7b3eddd11c15d62592f9e2fdf1f1113d5809939b18eea61c32a8b75c67ab8e21fcbf8e17b8fe66ac4e1f05a566eb04837aec1c4bf013be0d1a7913171095231ad39c8364066d4d931e292030573a9ee58bd317942d82fafd889d90bec7d43433de1f6e6fabef3bef6e07e5b9deb7b3af0a7b8f266cc45f4a7f638f9e132ce81d7d1e36c08d46acd22d924b889ed1213c660d4c3f2b4cc4483185123370d56e35608d42358d71cee1d89da1c70c92fb7fc52939460222bb6edec05217d7a38088c32007955ce1f5ae3cca30450558449de2f71d6547a5802b35cacc78f204092423818780c4b18e5471cb345d5b225fb9caf894c3b13626248d8f9e096d81e81ac93bb3867722e4219f110433d86aeaa490840875a225be588134a869c5bfa20cddd88f7dbac3c2f105dc32871bc370542724368503ec4a701c1eba99b718d533ef9c2ab233de1c0d699b4ce27dbe3a8f97ec9395f93e65bfa4cd9e28f4a565647f8c739c99aafb195aa86d5ccfcc7abe953aa536a819270b06303ac66b8acd5401a5e81483ae5188a4dbcc4813a9149e315e19bf709168f237909c3941524e4f91057b2e7dfa450cd251994f3758c8b9dada3d909fcc9e01471108053ebc5877c9438154320bdb44655de661e194c3c64de144ffabd47e9e77c4e3bd6a48d72e7473502a14c317d3c839bb412f57b2bd0b6050aed1bdf00baa33dce9e412b05203a228b6f93b8dd60c3c2852b1aa4fb7be0efbc2ad3ae5ac8580308a9247e57b8f62e14c14eb19e01e8956fe713e4668c71d264a00e906a0f66521273a600a184119884314aae6e49740a05a18ff6745b017046ab44d18206296466d528df5b937825f6c9652500fb43c4841441665119bdc0479089705675acc2716e525fa89d9a56591b1fbb38847aafccec23d78967a250b2afc3d4a366a28190b291bb277bffad7a6993f5ed138021287590574bf90c4770bd90ab4ac8e0869dba20c0d009bb12026b0811bd3570d8cd4c8fc8458a9ce54a6ac82b4c0a76c02c268e00b3d188906f212d49607f72cc69ec8a528b5eb407c49932306ddb343c5e5bc6e9ac713a3dbd9b88ba98fcc77a5dbc4d438b34bdf9109851f4e66597b57c0027b4a580a19f1d929a66e45821e9641ee94d98e1d3e413504abccc9d4a0e904c79c6e5d384611101a3375c17d6074e304ec8aa26a34b10251879d23d0f1e37f616798fa7f2239ac82626f25e9c4eff9c8159bd15808c77e66377dde3ce8b1ce25446f61125dffb26787d77914ad4e345e94ce078004fbd23d0f53fd4946d490a923bbba7b93713f0ca2d888f2a12858d7f9e69950004a5290d5717754b458cac68fcf3b2f4dbfda01f397e696e2c4e08a5c99b5793912f9d27f4ce6c12b7c1497a3de10230f7915a20448f953c2961ea2bb1a8450d087f4e3f5c2d512de5c7c1b64375e3b57fb60ed1df31396566913d4f35f6a3e8be7d794837c5a33ad013c75bc6de4ea4450e6d53a3fb641e195a1796eff4a5fb413b780a654730b35266872b1591d250c01b90ce722a367482e237b88750bfed01259b935306530acee9e59335217f5d83efbe0d989f3e506e331f4a79f5b08c94b7e103a1f91d46113fa0eef7b0fd06ace29d7da6138e40de1b8dad3f3f1f1b7feccad8a815ff231edbbbbdd8ec04b7dd7f5b6cfe4c767efe66b666d7a675f2ecbbb6e91ad5d5cd9946745bb5b4a0c2fed3131edf4e653a0c0d61c3aa24eccd1f8c0d79b2acc8a4ebfeeab37a8431dae9e163661e17f3d71f947f98f8bc41e26ede1209e2d816588a8e32e637e2cb1fbf27e04cbd71cca19ad8264a9f12b7625562e9c7db2f9deb2dffd6c8c5f2177a76dec4f79efe51cf7ee8c9f539b8329c9650ea2f8c049d0a3630556e972c87111611f093026c28f74973749fba930bb9ab9abbc91a0ab109210a2c56cedf2a40d641b6347f9e73221deb545d3b3bdedb8e4920259bad8b648140331704bb4939f2d54c5aa494098631ff687ac1d4c4d0902939d3c1c0b78d492d1389093ca871dc285db99793c65915a339774bfb75342b5225d4fde5f46c180d6b18983ea0bae52413c4b42bda7a40f7c6cd24961e7d44baf3d5b0bf8d59df2525b27d12b160160b72b3f30a76ad409f78e2e1a7e7b47392b56827ee9b5ce4518e69798ca7a5fd07d3e22617d9f9b6c82ab1c83b4bc4b04b5258cda3d554641f7834ab1d086fa5cc1282d16cc77d7db4fabae0fb703e3bef6b6d11d92f1d51fd768f8db847ec4ebe2163ec03639159dbd29c39da97db2aeeb1c5e74ff7d8f0db3d36b2ef31dd082dc69ccdf17d44ec7cc523fc64081d337faeadf20d99f50fffec6128bc491dac05b3c69fd0b5e80f7d5dfc90ad200863f7c25f1eb6849773b1bd80951e0ce43779c6963b6dfae89b4ce97ff63014decc356a18fe1ac4e386fdc85229ac5835a32ec945b1726721cf5a3d271df600d2518468dcc046826899fa4fb11b78e76cb2edcb3fd98bdd59230f71275ad767d137fdf15667f5af985f7310c200e03b51c3848c5bec3be7b31e086fa42653cd4dd4bb872e787163d0e094d10229b967ee3f211563bf220719e610c8e4a548e7e2f8d63efcfe271f4fc6acd233d077564065632876958e31f6745f66f236dd1581fe720368beac1ff284fb80b0b512a74be674ecfb220922035901765658866abd591b52b956ecd7c08e83a0d50125cc53159582cc05d7bce66084788fb412de4416fb2ee0405da19e97ca2079fa4f11e45c1010ebf8c06a23c48c9206d11775ecb1103e7c049c474db92bb9e5d095919b6e6989d3173718ee9c1dd8cbb8ea6a148aa806320573c4cb60fc6df4fa31c55cb91903b41f72044f6732fa834980de6a0549790938b02ebab118b908f9c8229d4973897f434d195c220f3359c0b3609c41d63ca4bac76f421343955383546deb1b330f2aa74cd12dc0f7da85062599e1d1efb248527324a8da00b91f9b77882cd0bb8864d12083150f99b9817a5c6f57c2b653033c41265124bf0cf20a5c17b5c2bead9fd85ffa7e0b06d60e3c00471afe6200ef2447853630559b50089c306fc1109d79819a222ad9e292ee01b933c2a7b386d40471d3210c060f9aa71dc91c7d2f28f480e6cd797dac220739e10f6ff9df8d6b7f3f2e2a5a147c17e6b0a419954505ee8929d8a4a4e74de1086ed8cb8f5cc2799bbd91d873a0dbf4507f3123f5085b9304ef175213f588637a2183448fd4d72fe4ecd4234de74b9b9452c8374f09a87ad483972efd4da9345e2873468ff47c2fafe42845b68197773de61e99f65e3ef5acf548adfd42e073aac719e609f054f540855fc674847a30abbc50bac8b23bd20b3c973eca508617a79671be5396ad3391b3b9952e7bb876e017c937559101573d7dae73a3cb41ad28f41247c3d660da6bf6a13f7a817eb79b23bcdf55fd5a70ac69278a8dbdd2ce4977d89dd5a1bed4eb38abe34cbc316e65b4bd2d3735438e5fc02e79c27d7bba4473b75506402c65fe06cd05b999b0620e9bacf310515f4f7894eae4d1106642df7cb84fb745f0488afa2e39cd759387d6171ec7506bd232764357cf4f48da472797ec3fcc8bee44d6d6761e742c2ca3939bf35c6478c41bdc32385dbc0e5dbd6f4a6ac579b94e38599c7ba68a8a58ab027d519d8cc5a09508936a4c6e2c3ccb36804218d592012de91eeaa4f0a30218e8fbf48bf066b8a5b764ff6e1fe89878538f88187d6d0d4ca2e7e55384ef0bb5d48296399cd33fcdd5db1fdd965be46adec141349b3026c2aaacdff9c26734d5ed1b72d184a2e12329eee10d7215cf4fe786884bc122362f9a11d4a3ffdc4b3263bf6430b33935cd38e7f3af6f015f4cdc1aadc250ea1b32ce2a7665159a6615e015f99f2c40497e9a390f44ebd91ae9ccfbe391f69da2f4f4505ba3b1e6ddfc1296750cef8ccf8cfec7fd82b6fa9df252fe84d6f22fa4e6bf909aff426a8a7f213513c3fd1752f35f48cd7f2135adf9fe1752f35f48cdeb13fb2fa4e675aeeb5f48cd7f2135ff85d414ff426a5e9f6b6b46ffcf426a863bc919e2281305b2c173be2a95f8bb299637a49deecbc5d2892008fc259c179a009e9b2c6d45f312de0330c8059394134565eaa9dedc54e434e5a49be2685adea03a724f6db965d8cd668996b7899617672de76e4a7299b2b3f0aa745b14f195b13ca129b81b66f92b0fdffbcfef54c8862c5fb8c8d1d9bc8fbae40bf59135fe1b7101d245340f28f016156809e729ed89897fabd9abbd7f833426c8183822e58c4b3bcca154dba2bba6e5baa3c4819cab6d2087507c040bd83bfa126138e6310d0071096403e8dc9bdea9af9f1f04c27d432fd8b816c110a8b7fd98b334f76dbd165031265f91ac9df107f23876d31d316df0e81e224d259f9ed86e25c247d31511269d52540559e1bbb131c005696a3f5a0583d801fecaef4da3e47448b94c5ba1a7d2efa21f50dfb6f239ee5bcec6c4fca56f0b28f0483bf8d98b3bc8eef51900c99e3ba2a7c6b1dd92b119899b39ec93d171bf141f8c397ad6fdb5b43b62cba69eb64d2e86fa6919ef4afa61fc26d3a1d80525551cbb50d271d62abd57fbb7bc9a98b1e6e5d5bcff613569b2babda8ba59cdfb1f562fb2e647bf67b715e725b19a1d91327dab204a615b4f7b840afc226ede1743325a3ecde95fe520c1a5e4c7cfe56aec113195b6e78027dc559caad28e96b27f9ffb1b74845aa90a3c6be99b9ec9144ceeff7031e13c5a669566e1ca1dd5d32db10e6fa0a77d067da24ce874b85f6738e399a24de942b1086748bd95829dce10b08ff8f8dea615d01b437f3c6197ea33b65513f35aca72279d82e61e29c8bb796aa543f1709fce4ad17e48c194dc450ff589c97062a6b4122ebdf68423f8a18908f485e208b9e8faf10f8df4b93e9d23bf463036b508edab22cd63467c09f2e42fd0865f4d7820d369b06f58bff4ddeb6ed47682359f4c706296f689699628f4a60de066d1058e5ada7876c07d20dd11deccb587999894997c4b1f9598caa3e6193d329cd5859922ae1162e0c29e0f4fa8db7f68fc48e34eb4b2b1f0d206e8a5111f4b9a8d81f35766e3d23c1c9cabf350926fe9625d146556327cb02f44fb9f5b60f698703312fe6547caaed5dde06e20739e4dbdedae8dd447baea89a142d746ff61d712569d21d1eb827cb47b639a0e845b527fb9bb1bc2a95e736f110edd27d1bb176f9dfbab8e3a694f780b7de93882e316c2148c3c3976c6d7fda21054ffee3f9b893db651b8f2ecc79126ad4d70a7379e9e81868b0469fa7fb704557433e5dab3899be8fd8dbe2082fbaa1dc900d2a4eafaa1273c02f2e694e3862dbc44ef940f78d5c4fc3a8fe9a227dca778fa29b726a205b7bcb5475327b160be0862e7a886ea732050a5e8d8fb34294b56a42996fbd69a552cf3578b4d46709d3ee26e0176538c04a52f8560847e21b9ebc170eb7f3e43d90b33f4f4db0c15fe1f9aa1bec35344e7c76231fddd0f5cc3d2700dbdfc2062b50dd710445cc30ec8fd3f73a5d66f552332d26ca79929788731a94d87c2622f7d33c52d71a356fddfd93faf970e45fdad94717ee714855efa93fc93b20a51c2f0cfb19864e38fd7995002823699dd2d8eef0f27b7fc1f4eee77a6512d9ca699dcb1642f3b9a6e069d9bc1252c20486de66b9b35e71ae204d8a88033418623329d7b3b70624b8e1f7b89f91dbf4466f0b0c8ceb9d3ef2e88002e6dad1917bc30e5e4aad1e4e6e16c407c75708005fc48ed7db2c41a31568514f5bc05a03ef58120df57846bbdec10fe4d5c6d13c13c7eca244f6d6b096fc07e6dccddbf0af1391d00f27946ffbaf515d4b37db9a743e66fe46188fd78643717121a4ffc70fe88d128a1decaf3c8d1e59c09ed7957dfa8bff526b8c0ecc67abb75dd1ca7a04b8af48703ada87a9a730e0e84b4bc402dd22a51465a97528be8516587707ca05646f0ab1276bd2aea55a89e5aa93fad37857839a123ae16d7ea79c275d1ef455fef28b75ea2abffab0fefa0e602c3718f4bea485fad80f0fdc605823180bb5581d7e9fc0b2da19c014b4aa64e6649f9d6d76a440ec833695e4ca5967e76aaf4171a1be13c8f550631d2a6eb4181b2caaa9dc185fa93c6766beed9e929d9b339f7acf2177ab6d850634355225ef8c33c27b41fddaff3b6f4a627bcda9939f538f4384eefecc83ba725c9ca5bbc5c4da9f60bbc568a9ca7a6ab1912bd03d8ef1967ca7d3bf0f9e80ad5a0f7238e5e4d0d99a2d080666efa45b815b9365963a2f28b1fcb6fbf955ffd587effadfce6c7f2475c59211217ebf2bbf3f2348954deabc9315cb53bba3c1110f2818be94953939240b80bd9bf392b384a16ec2fb860d53b2b3849161c5e2c483a1dc07eb4178f71798504cd080e6509af79dcd2cebd396d21168f177c696c3945b9a6477056a2b22de116a45d3810ee57d5836f7557335eb472c97e4e49ea433fe382840ab1bfda4f0e7c6602ec5736973bd416ee441de559bb935fdbedf3400757064aed8ac8d3bec3d87903d24dbf90cef7e19df061efeda11ea93977212b83b313a7cfca8c23bbe57dba29bc87fc90b72425fdc7bb0f6a066d6ee1afdb354efac28353bb3b5143b08de8db68e45aeed1bfd61d8f7867b7d9af3c52dffc5ab59f71e21e0f48880a3e28be87d0896e04c3447244838a10094c408d80d2f8d70f4df10ade7eb39175c7ffdec9e5907dfd295e65685c39ffa8ee9c7cf9c42b9604dfddfc61ddb5fdddcd5ffbee7264f779f497ea6e65bc1500f5faa73b613bb476c26e787d27344dee75ae3a536b0a786040980d3a3cb9f8d9ef75b71ccb80cf8ef84cfc59ddbdbdf10f3f6dfcb3bade4c69be3049a81096fab246144d6ef08d6087c2cda97cfdac1a7299bcec51adf4bd9a3e23e6bab32883a69e8ec2c6ee0af54c2fa0e87ec9d2f36eedaf345672dcf43bb2b733e128a0b1bcd2cfdf337fa5b18ce39f0db3c20c2586391a7ebba574638b2bc30cce8659632e13c39cfc95c64a4e78d63364c57a49a167b364637c87059b2b3d23edb5cdb800bce285c28f45ab94acf6e3a4792767aaceee9e0c900b46979a615ad2b2c3aa3c3b4c552410b57de15554df373349f1b77538fb0ffc1fbe329143bc269ff9c58c21577fd69ac19b9ff3fb2d51a7394150bc51a3c1743ce706175036874bfc4b08515dd65d68b9d630ea9c7381d564cdb49d74c11db05ca31fdab1a7e1992dc3faedeb79676ecb6099b9330b63a8b919e3cbc3b19b7e15aa47b3ca76ce867e0252e5d3fdd4a46089bad53965fe7439b18dd53dfda737501615bab1bcd469bafaf2c4df9f8f5dd6dc78a4686e52118fdc367ca1de745bb82e87d2d25ffbc23b2865d84f978091fdd30f2bce7658c05c3dc6d3f6cb035fef2b5fa81245407f647d0caa2bd41d6d8b020f233bd6c4defb60b2dd15ee3d21c14380b7b6da75747fdafbe75a59daf0e34bc78d8b78147ce0082e9310854e24187fe9f90885f7501e5b17d2ceb3c2113933d8196d01c9f168e2ea429c312ad8740490a1667293baf0fd0dbebfe0ef57c7d6a576b0ec47ffa5efa7c6d6893879b19ae5bff4fdfec4e2d8721e336cffbdef0f27d6fc17ecf9e740c7b3eb60fc07dfeffff4fd05bebfe1ef8f27d6fe2bd9fbefbff3fde9c43d17821a3f108c89446e1252c889c76cc5b94e3496670fdc0a4ea56939d12d12a466ac7f10fc7ff296bea77eceed79aad9f304a9b25549322d9050dd0342192f8a5514c984cba1456939d5446d529896a5fdb9ccfff8e7d6f62e54d6269c35ae1f023591532032d9e80b53320e77291e0e9b64d6b0deb291e29b7ce50a9591bbcc6f07a6f9b09f58d2273820ce1a48c616ce484cea58f53829d3e5f559c3997e1e4e6981015d455f7547ea1027cc13feb26bfe56bd0501f6dcb6cb94fdc82d0f684d3ae0bb9ac477b925097d75ebc4ad649ed326b94a907ab63c7c32cf11a3e4a79e138f8c0347ce39ce592fef12b2a82bdc3730c8135253de0e01e623b27a4e7b5d3c7e515a24d79cc9104a73e0e1377388dd5614caffc6855f4916d1e340020e53f82dddd23b8262a53fb8ecbb3a42e6694f13657b7ae423e0100c6417dbad2fa319dae41906ac184d55dbe446d950e8b3b77056beb996d53dab89a089d3636c0aef2d9352e662270803cf5f20f86f4eee7437f79521a38b11a41cfcc8de2a5544641618f0084a948f147dbd5d439ce7a8aebfb0b0534c136e6b6b4951ba4655bc9923fa75e8c0f50f3e44ad3282769bab09e987ebe9b914ce5bb1cc208830a74ae6a048b748d1f127b98495a05941de9216da0be79cb3d7d39cfd5c0af1d8a72c2cea09190092e5dd2f821c6d2d175c2d2b85c8cb0991bba0c4618ffa00fa8f98944805dac92edcc8487090a586a5d6672dbd68eb7db0b1b354e3d5ab10ef9a054d24c1b65eb52fbe22a5c42b72fec686025af7486f90ee086fa5865ea2a7f90576b4eee94e56ec9e26fc3107899e9ebd527ff355dc53db0798b8796f27cf7a5a5cb07ad9d04e9f0c3e8ca7503a5e50e97d2c591549dba730fe26e88c17b0dc0f166eec1e305279f63edce26d8e038e0fd8c8e19af678b30814e6e664a1e59bd64e17ba35fa532e0339503d11690e36dc8361fcb229fca706c1e92694e89dedd41a2d70299b3b526750c4a8ef63346325a634868d12958b5370e4a795094b5b7405a90f8483d7f86975a2b7817a1b7142585704bdb427ead1156799c25c12699f686ad50d84bd5643375a8fedecc189185ef76b9e98acf68ecd1bb6976b7518af424bcb98e5b169d45a05fdf6550b452d21aaf2487b26179945ce964abfa4780b3783cd7558c83f5afc8abcb8ba22f8714f781b954af47943a3a75c2a2225e1f95a886d38909e3d2842a3ae0e20dba09ddba808cbaec164f167fbf7d7211c5169b170c13d24bb4e48b01fb4f846930fae47b48c9dde4e5690b02ceb4ebc17546411778558cbf35648179c716813119fc021f24083fa6b23c5e6176d23515fed9901c170ed19f12f4c542054c5b93281c930f822254cf633d6ed46efc95745bd914f47e7860479a64ecd149f8205e91a5e877460781f64b88cfe6820fc051b1e346938246f97226ceea0ea604518514115d898ceba94539cd7c5856de2754733f488ade8fa273edf29c8071d222e3764897ddc914b037c3d9b87897b353e3eef41833a48b29509b2f5a5bfd414dec39e4fbb19cd7c06d8111acd911534c0166fce08df54b131a60cffaace629ae0c9b14a1c59fab29bba91f5c535555ab90195b99d919558b492cfdd99cc117a88ff309fda2f447b86c42f23b6499c0d8dc49d2fdd9fa6f0de89a7782e1340819e36ddb9fc58f1a6f784475aa0a10c0f4f69578c647d49fe249f245c055fec6b9156c27f3b94f8767c15cdbb23fd50c1ae677856558fb4304d910e45e771df83aa573343392023ec8c41ab2dda0f997a24e7b45375963cf411a890822d242f97aecb7f6bbe07a526ca9c4d177e65600a4573c04967156f9b041746180ebaad2c2dca4672ada06050ed4d88ca9e14be0b99cfc5055af06e795939a346a4b468efebb1116148ff07925fd1a179cfa952fd7a877cd13a392a6ecc89db3a22f0108dad25f9880ce57c454e55dd19fe6deb1dd82eb879e34e4e0f99a368964f0690fe85425035f9ab00e8712fcbf8e3b342853a1ba73876d36b49d2916ea4c48d14c165378748895ec1c4e7e1d4e6117f8cb894ddd28d178825cdb038e424f8dc8afeaa2fba35b7b073e261b388083fec703b510c53a637420e0e9a47999e4ae3a1e93d70a492ee0a9b4bc00d67d760ff77e41ffb5a9079cb6c080d6927c3649c53c9b50158c86e3a15ce16ceb823902a284787df672ec40cb4bc74f91af484230a38a1611effb64b7423a8e73c35a828cb44c0adfb961cec99d47291c6f1249d68902218f38896705b6ad7f88e10e91689d87e2295e525d494c59fb7c7011a7bcc506bb08422784d2305902d46aa47cc513d0b5c938c6db326b3957ae0e1dffd0ce8f273d7368c81c33e197bcffc0ac44b49a516b1d1132beb2bc65b2023fd125eafe3a585af468a76973de449a82035ba08d10d3d17fa74a5307e2f8341c4c406292f026b50dc3cb4f4d4400c63a3dff91430a0cbf804b27d23a6a8818483de80a6563dcc134f47d85a0d5d568b57831504b7e10abf47f45bc1472d58a26e8be4ad173f9e8a1253b5a696523d934aa569268107e53f9a2bbdf530583a314edfd18f2310f200048c367fd124f2b4bc13060c3d94e7edb32066416f1bddc27ce12436d51252ad164643023dba85c8b4e7fc619e508f15001f9fedb1e590bfbde7fbb862b0c73cc2e43a7e98f5711d6cbaec1a5a9a1c5d906a22b3f7a888f6832934316500e352c7c9bd95e6b2b91a46a502e13105a4163c98e20e24693d1c074e7c9bcd98ab1d23a755eb8039c923ac877d0299af98d4f85fa225ea63c9b4b7c0e3cbd180dd0f06c78ba630850dd6fe4a3ced534a3a55538cfb392a8336f6016f8a93100e683bba39390bac6f8ba6f98699833905d8b56a5245227b7bf37d6c1ee5342396963bfd3f3ba831eee31b1e9127d4f38c3f585b3368599de24c15f7f2c71106e2b5264795d827a13d195e5837a2b72eebef9abb1dee0a10a6b0ccbc3c36597d23fbc849d0e1594a1e1d76b045f8a9c0d8963c3570533e2d5dce0eaf0ff9fa8c269737d2722f11464aa98bf1101752863ad911461fab6ee72778f642e6a4bc226e456e96dfa59a04e1727768b00cf5559b332cb60a205dbdf3db02073bd8b078781bb79e258833a7c7e7f5c2b1f6850a0ac8fcd7e2637c76760baa78c03eceb006734a6a561f473ab15efe086775a6258dcec3b2a6e2f3b9c26ee1bd8bb8dea6a172e6c89c6d025aabd400d6e74504b2fa2a3a3b67b474cd63d2916f659419088654eecb140aca6f9f20f7ef11105d6280af0ee7bff0d34aa893535cc58a7a122e5db673ba943a86c40de8a1c16c6b461fab5b20c9bf359145cbe2d63ec73f154166064d731fca80bea48b03c93fba7a47ea9305988a23364e77b751fae279d7bc3f5160d1dc3382fa640dd61d92513821afc3999cae1915ad2bd4d788832cb765e253df8f1489fb42f3f808b7e24e6d05b5931ebf6eb744bfd54996f1e0b5c2056824557aa82a988ad71c56a6dde77d4a0cae9b9334f81b6ca6160bf0cdec32d160374f74c73b283cc6576eec4eaca8135a1ef6627e24b3658911b8a9cd35b8c2ce80f4ab1959c8237c71894ebc3231d3f350ccf386d0f2599f480cc17f2821c66a40a4a193fe1441490de9c727619876671cfdd657e44d0ef35d6b435ecb9d0c39aabaec2712ed4b5c77cd3ef8ad300fb176878d9a593b9664bdbda32eae9016ac1f7cabe88bcec4a13404a235548448329723f4428b09ed059263b4c62a7d84ca1a2f7d2d7534594390623c4c25d49b8ab77a616ebb4c21cf57711e9b6edba5b9ed7c062a46c57ae5b9c52656e6964f5e4ba41360c1de4456e76e2cafd6e696bc1a58f0ec645b8a4c489cbbee89420485f5d854f0262a657722637722ea6bd4e381ec2f5ca35417edc1c272e76b71b2a7b8dfd1a7bc9a1c2e6c2970848a873fe8bef9bf4be9c4795ebe7f848632b6d96e68a02e0f251ad082d461d18066d180da66c2be0f28fee242cd13c35afcf561f10a3116c595d1c55fdca9a53dc6d5af638c467a906b7ba49b3f59baf365dca86d62bcbbbf37de6849777f30ea78ec39a56ff3e8581d16d6b1827456934758d64c02c44c0a022c3f06b82990cc47aa1cc413794a4c24173799120799abad0c5435b0b4480beb54527c77f3ac439b9a9368a3948afc76bc83cadbe32bd8e3a3a451009780ad92db2d5bca5b1213362cff05c2aba9a2bd574af610cfdb23a39ed8c9b3660db852b0a1ec1505555e5844a8620fb713b5a848ba71eddf1e7b327fdb1ebf0dc3d75ca07e8214e2a78b1d0cf4655627d3adaada5358b3a7d01791319bfcac5cc56d99d49ff445934b2beaad374a4af3994b3b256a4257aaa41cfb38119de82fad7963b9fa02f1f63814f55bbb17bae6091752cd4f9d30a7ca0ca6a286764f46514f88378178aeb98046761867706c2cac748e0ff1629309fdca6aefc9ad41c5791f5d276ac513ea5ec4ad67c185475ff484fb90e31f59e8e8300199457c00f52699f1808fcca551a1da9afc9a6b0ce6b074af6eb0c85fce3aeefadf01fbd45563f7517f7593f8f2e2449e0235379f52163d9c2d0d3dfc5f359db4d32e4ea74d1f2c0af91767d26cce825b4c29d22c8ff93ec57ce6fee3f9a4bc6b1fd13120abebb7490dfedb933a53c528138c6a0184ff7f70c3fa4214e8bb7533ca4babf9cf7c2bca41a4b7eaa15e4ea9982aaf96092cf07855a1b0aaf94ce528bfac1fb3abfc82beec65e47e6051e5cdd2b5fc23cfdb6cd5fc2445bed63077dbaba9e3c02293bb6b64925a0f6a7ef26aab8b7804f0e71a48d3784b138bc4070ba4eb42c86ecdb789f61f55a7939371b2038bb93b2ced301b6c52c8ccad1461dc5168b67f22558ab75147fb4e38d9b7137b26980382b8bdb6c5c28de4b712ad48d648734a1ccbcfdcdd99bc30269afcdeae1018cf70ae10120a8f552064e9d31468eb3b4d0bc67d49362e62c39696de24665f157224d5a4998baa84e14aff6860cedc575d64a692d305b0a4c68975d9d05a05c2afa93c1e1166a05a689912a0699e788103cbeb9a0247fa90289999f16bf01b9825b841f534a4f3f43e0acd0ca9991c87fc015788db09e58ce94de9596716e5a2555f73fafb75113f9ac825fd58a2ea8a7e68a93c38c935fd78492b117c9d329666314b897bd5172c6433408ef973846474d25104356c4470d9476e0e2fdd16ef35a5e233b963cfbc12bccf3c32c57a1cdedf8480cdf936d216f496128a34defe299384d1820285dd1760c668c79da1f44327c55a71cee29e278dac7acea3a9700243babf1dc289ad88e7ad1d971fe2dfd6869eab852ca3407bc115ab28d0ded173372787342abfcc31db9c3ede5b23b8f1094a0c00519839a3ad599ab21f224f31dd2f0c4750e009291f4148a79c1a293349d6219d45d349d4e97387a1d5bb5c0363ae64acb0f87e0616d46fdfb8e5c5b56b986fcc42809496c368946a240b3c323325ec336d0235f79cc8ec4f06212e8fe27caecefae462cac843ba1bcff9e08fe7dcd08b822c95e4afb3815d4dce556ee94a8dcbdf10c81865aaa4a6faf0a846e66c02cd9e22d7d60f337ffd192cf5a5e86df274f9c23fc86e6c1719cdd08935e841734c77406b91a8ce89922be87b06eec4611fd1796df65ecde26991fe5535d255ea65a6ec2b7abf92a3b3cb3672a4c3c8461e03be70efd229299cb71952f6344dea9ed1c949bf0ab557fab578aca6740361817c0405d21ef9db99fea91a3b8cc6df03a8bac3e7d3eb2537d9b68f294c91a3f6f3866b1db9d68c708318942bf586cb8540aede30f0f7b441e1f006ef56a9665ce055a88abbe125cb52c3012922fdd58615cc2491886e0c8294d1d74528c805fdc055f333bdfaaebffa20e692f2766e96c9cd944b2c16bbc6c1c7e00964a5c647c5eca5742814071877af6f2dbfe027141e6b4a08dc84c274c0a42f7393d0646c4d197d509c77fa410bafee47fc95e28c1dfe86ff4f7dc5acc885397c17edc606fbbf992236d7b9a734547ba4897c23e726223a9d1c73d7d6472868858ec5fb8e3017d54ee5d15ca7c0c5ad7e5f2a8e56ce77849fe27ba9c0032ce25f1cd9771cd81caa66d130c735bbe7c4d5b4c8bbab5de216f3fcdbb55a84cf7d9b98549571ccf1fa1b9d83e28f3b5570fe994ef1a0b55ce09e13596b51353da1bf8894937effe3c48b3cc8b36e6585f001ecbd8d347be48c0afbcb0dd33296b086dc8db46198a33fe179180ad729674141a92a5cc60848b20107804b1bc9ec689503aee6a5dd6395395c39f6971686388dc5ecf2d9ba34ff546176a5c23fff852b94adf97d0a5bff574ee1af15cebff097e7fc6a85b33d2ffe9d9aa882176f1f75ffefa6f9dfb069ce3a7e65a6c031465cf51566e2c238bf3113dfc6e909bf14311355665c6b868ccd54ba2b3ab7b6fa18578ebe0c3cf614661845237c722c0425eaa93fe8cb23cb815fdfca50a691fa49df30dedb1a65386f9f71ec0f484f7d53d745a6727bb90ce9906e28436ef805f75bf68b650f97f15c415d34c1836f2c3a185bd528cc925726942a180ca919a32e890083c220c829e27b4928b7daeba85e20d4c9cdf174cfe72add12deadad764447176c18c8d20278b796d34a8945a4255c033aa31424e5f1c861df83c817a5331b41b49f8f1c3dba15841d7ad6d01c84416eed1abfe035a988d8019414022f0869688fd8aed3efb39b783fd227ab93e2d8bd686712bbd981d43ce14e9450d32fa7387029852494cef9b6b62b8fea51592ac25fd76d354d9e8e5e0a397ff792ac496b3ca4b16dc983452ddccd3c793011ae6446e5f5ad763de1d6e4f7a3e644c3d615868941b8995f2bd85f6869a9d70c653d72d22d11f472dcc3fc5ca5df85bab9b5c7bfad9367f95eeef07b5f4f8fa55023e7de2e7534a54ef89d35a51e130b711c39ec5d72e227fb91a36baa93ba4b94cc47250bfc241b95cc8dec01aafbe4143eddff950909c47b413278ff50925f597725616b78ad5471c08e4835dc812ab09d9165e4967fcdd72945d4d6786dc073976d41e6609f5099ace92fa71d84de39b64177b623bf2a46ac5c03053ead84ff512e39b1f77bc5f0db53db7370080ce3d701fa19aed6201d73023a14dd454946bf3d8eb60d0694c636cc389885367f0751d988d9545095eb15fc880c4e846706e7a0a94c2f1da1665219b53269152cdb945dd447c92e8796f7622ad1972b825d7607728950a5a184a5fdb524d39f622b6b8c2b438995da2bd3339a1238a235b3e4f86e72af165ea17dd60422437f37f798f1f43ec2b70eb65d56ba7485f862bd6aa4d327dbff7d5ed3024a6a5c1739f8d6b753afa6a8fbc8b57c03c44211a880f9cbbcc2d266d2cc3484997dcefe9d45644a13ed76beaaeb188bab0de39781d2c0cef352088ef772a0f5debaa737ea5bba291efd3c62b95e332bd744b55024420664d2f87951201a0c3013c9aab660000d4a5834d1c5a4d5dd6ca3e034728e5d40b8d32f57729463d70c5277875913ed4be114a715731de8afcffdf5d73d53872187bd05d1fbbbfc02980039f8fddde657509a97a061be2f2328b2b5a32049f530dfc21db14659e0d55d3e0b8fce0d7f98e0a854afbf453339248bf7e74f695f74df524327bef0766565d9d9f665850d48d4efbdb0a75b3a233748e53a84bff0e70cbac9d6b18cd01f04e23cea9daf760e62fc080f1add3ef8895ac5322e5c52d67d3ea5a752a89c43f0e72f356432c8c0d1b7b52cd35e7f9d245b28730bd4cbcf7b0aac99cb4c1e43b91134396418bf2b331ef2fc39d14215e85a5da2b79f0f74ca0f4e8943fa03a11e0a40286c511c3aa1520c017b1f8c8afa4da17eafc7be96c3a21353237851b40a18460576b4bd0ff6a3805411e5bdbaf0560f58d55c82266245f717eda9fc97fd2bb2882d14bfd834c0e334ec5f6986e65733c52ff4d7d970a67a7b009605ba43d37ad34f2b215e6f0de7e389f787d2c272351e2f316ba712ebcf814250066a38598d957f42f86b14af821402ce6376034646ef77a61239144d06a0ac6195d91caf47a0b815ead43b4130381fdcab3d724a370f4737dd15beca1379ebcdf374f4b38ab6c753e604228c7bc9a8734f70edcf9714fad812aecaec003d3d247804b195795cb5af9b75142016089549b4843831f5515d3adf5b222759ff4633c9fe7183e8009ab49ec3cbd0855adc7dced1ebce7d9ed3d093f5cd62504b9bd82eeefa033d4b7581a4d28838d94e39aa89cd86c6e1a74639c73d18bf83c1b7b026365a85b501c53f8d2450395b83bab1d2aa91e4ecd58b376a9210b87ac96765d7d4f24587d8ef7b6a3a30e6c97b0a117bdb996ea25a9e4c615efc988cb801ee024435aaf87282c8e353f4e6636aa9e50ee5d7482fe83dac0b88009a814806d32d5375327a4f5ceb9e3c225ab5bbe0a2cb1a9ee7b2b83558b05b520b5e4dd27e7bd96c13e1ca5b8a3ff4089cbb3e9627e0bb845cd7769b38c27a3c8070f1a2a7c8cf2031d3e71d5ca017c476bfae6fe8b023a9bca609c81a9475019df652b821025fa4d26d624ad5e31e5c27c927ea91cf6a674e245d3d412222439bbad7ad3c731a6ccdee16244b97d88f384f130a0c457e9b26ed8682c226b4dfcf94c11f5277231697a910692f014238e5e05f1c980936d668c04e43f3a9e5d0bfaa7008e9380f8bed244f1cfee3bae2c4ec8162e62084d73ef2e628381bb429009e3e359766e5dd9552b1017b87fe782b3f1de3672ee13041cfdc5e796b7b9172f9e3d40e003ee1a97fa4c8e8a314f79a8c42c18cc999c982fc7162c8b8f7f06d0202cd455c1c705ce91f184e36319c1cc5380cd5637e4a71b40799c79ec8acd83209b61b4e42fe10f6be6616d673c25ef928200e7f4964fa4300093d0fae56b305ce738ec39f8cd56acafbab4212a5dbcb0f6004a4a814b5938501f3660349e1c8737d697a0559e2e7658606268f829af9d2ab503995878ace9faf8d377f23ed8bcf930cb4bcf29cc5e8b4b8806dac47d5878f7077b05651ddad14aa9e3bd0b17e5b1ff4442adf2ea09987e7053fb007149e77f0c6d069d6f3b7d34dd19713976ef24e9c494acd10fad171ed472007b94a9cde402d641670a11d0ab821ef6e3592f49d4e8c503575182871c0421c0d7dd857f0005ab12ef3c8212488915f1e787bac0eacc83b00e3f594bb101453916370ca513355640c6b8d721c79a7f434cf73d448b3462149ee7df9e0c690a51bfed2fec0f0619ef0be94058f48d4190c0d027d02cd9b358214e052bc7c43b351f78586f9a5c9682e39bc8816eb22c586a60e0b55428d32b34f9e50b715e0c7541bf1c9b179e58cdd0d75db87be2f85a062dd6e53a8671fb7611037ae9e470cc035871a0abdf40848f6ff67efbfba5377966e71f803c11804112fbb5b42966559068c31bec3d80644cee1d3bfa36b56230963aff5db67ef67bfe77f9e9be58562ab43758559b37cadaabb64e979423cd7e857f03c3fa8188398be8f3442f7c38fcfa7de469ae0b1819ae62bec35e19243f616bc6b215e83645ce58d0a693d2ec74ebe22167c7351c70aae8235ad9969429562ce2cfdaf3db2cbe073b9ca90cbbf51110c4eac1bcaef5a602199097b5b0bec1318ee457018ad3dd77b67e3398722227ef692711d3c5626105ddb894a64541e651ef6a05fc820a3724286a6fb7e82546a47cf97d38170280113847c8110afd3f905df29aa5abef7b4446ef93543619377122f3b4b73bcbee38c36ea68ffa3f0a60765906b66bba2f15141773200485feb812e46f4f5fc7b1e97c835764719ecdcd97e992ca07ef1418fdcebfe494ffec713aae555716e5aa3617ddd94e28dfabd3e54a9ef1fc311e31602e845883fde91e6376d667b5cfdda851eb34041c86807537b7c007461a45287178b4b7ab45a3a87d7d40b33e88b0e4fa2760524029d06fc99d9b6f01af383fa3648aea8a9b7e1c2d63b2d0cc81f66b37396392deebf90bff09b28c87f911f5499a56b168e0f19e089a17c5ef9c6c9d3255f47acf20003e8ce7de8b1473cf848f2487d0184b1bf4f9d5c2e74877911656ba54b0d60abed1ccfecc5b0bf3d95d2bc99b0e587cbf4f303e1559d0a7cd5cdfa195b4b1e765767ee69a167b1124c2be6734ac3e77ccd308c3d76aa15b8a3487697b6ccbfeb0bf5b4b9038acfa14cb736502beae5c8596fae50ad424d1a83da69cd72d8c109a8a7d652995fa170a732e177e8ace5ba88d74e8ec8849ea19a4e6759641fd1c4d4fd5655bbf4984d5798c8e94da0f35cb77f7f060fa812cabaf90c8a3fac5155633a8f591bdba0f778e7aa2313386b9a4bf22d795f45b8e406adb443b12c4bce651b7c2958cc1ee209f55263f74df653a816bb3690dcdb9946362a0a8f51d7aa978b8f931b9b867002ab69827a70f2624eaa3736e27dd17c4e780d2398da455213baba2dfa99ecc89812b185b72d26b701fb0eb0d37e74668ae7b3deb6bb9423dd12b4123bd6dda5ae929a4a3cbdb32cd3eedfcbd5981db1a7ad354b4ee0c1ef704f1081b533226f8adecae0f109669ef916f7635fbce13540b3ba51f167af818a50756e56646f7391648fbbd83917454a2f869e16ac77c94bfc4c41fff5a7d2835658c4c797e8b04b19045b3ea75bd014ea6388b5b8393bd99314de934a828ea1a1737ce788516b6e90c5da3990be4f8bdaf470cf281ef7749f1d67f0e9ce46e303e15295e557fd3c4fa8bbc244268648748f27ce8785a1ae9f5497076670311dec096f2995e1cfe9122e5c3772ff90d472a882cd9751b6660fd98ef01ee70fe6976e10afb293cd6afcd262956e04979e7ef6d2668f92b9493ffb9d9f537cc8cea4683e0a8897aefe22ea12e7b178d64ba81158f4db6f982fe4d1d76adbc354d208040f3c02e1836f78e7895fe00145ed485beb5a8872ed3055c95eb0cb285f7b35d39da99cc7f3cf655a0e33a530f8ce5a4e76a096c1e4079509cd26a22f207fac9a4abcaf4b673b5a01f5d612c64a7779c25b21ff468d78cd88a659327a497585e82fd8c4374b6863d9c6d3a6ca0d3cfd8152d247ac57031d7d38f236401a85a5a0a7772ec40c10609d6d8ea5b7124215390fbc484a41cfbac384ac39376fbd33b25ddfeac6773896cd62e18192bc99e4e5870634924f7112efcda1fb2f9397e40dc9a0cb64b72206de06da96a6d2b68d0d427c9dd28afb0d9654b3d60413ee0939ef8304c967cc2acafbf4d05edb1753402ce4999d8f99854c9891c5095384e06c50dcea2f636a309fce3d6415677f7853b4a7c78bc2d7bf3bfaeaf914aaf60c7f3bf3211a9c27c60314277f2d507dc03b73cdf2fe6ab1bb6b69ce5537cad804de5e5630797b534ab1e7f076a1094a8005c4c3d2cef685fbc4bff4677485f7c1c12b9056938b001bcaf01e21f0693e6d30a2e4ac3eed09f728a7693bb108613b9175ebb2430655352c39ecd8d7cb791987d97cd18c2499e5e22011ab23135c50fc416407fa9fbefe6746bf71ee53b46d154f286dc54de2cbf91fd71e25622371b309e74d5fcdd0719687cf175168c75bdf2b745a771de1e081aa42a957dcea1e02ddb8bb237e9d028a369ff91cb454d45b75f3547fa3b32f1340e32c0fe544e2440b4107d3d5f989bcbccc258330ae03a2e59d1e20dbb7e86ae59ff2c4fcf0b2d72f6af8d335c9d700aa8c7a257666d186a11de4c96cfdd273f3deafd213bc662d0fd6500e65e0ca7211f37333a4724c14e78be0c9f07d444b1ef8879e1604a8ec42457569c63be674d320109ae433ebc2afe3189e61e1464497ee80d92a9245d8647e88b73cf18f2e8578e2b7f8788b39dd24418413fa2d462c5fde32a7c9e71dedda5c5e1756e18e67f52fa85a5ca66c0421b62cc403d32422d3bd7d5500e57cf588994f8aea3a7de75e950e769c79957483ef0be907e4b1f6bb5ada15e24874f752e7e7c83760fc45478bb5602fc3ef579eafae0c71658791485d53b1a8c0d76d0a941d36d8f2ef43c1c9aea40846cabdbec5fae196136e71f52d178f4f994f560a2ca43c117cc425f0eeeb7c7e3cd093b455c116b890f5f3e538d597d3a7bda9d20a1ddb0e5d268e515e955ce4b63fad9269e2cff22479b8b64f84d81045de4ca61b099d1a91b3df35a115baae593d193f3b10f7cd880e7b9d3c6101bca53c1ced048eeb78b42f69c0ca3b74532d58e429578d5b30fd37b480f48ed31186c6f94854a82fb5bd7d51b2de88fdb86025b5febbbbe2e34db981849086bf7ed672c3873010fdf3e8120657399901caac7b662c1645810c69f9befb5d97b7c0e8e8afbb3febf296da94811dda96a1a3277f7be2e98b8a9684073929c20db3a4ebdc915dc1b7f9d0fa1bfcffb678798550eb9c6486a7e05c0566ef2196058c5599cb33c2f9d2a9a3c08e6f5ec4233a554601376b67696a1d70aea5d99bf5b72f10b45e2bf3b44d11abe28898deb208dc3718022a47fb5a452f8427393dc44a8823f261591691347cf14e56d8375bc73e93a13de89de18de18133da8e23e8d1c9df5c19c7dfab7c9e4906d760e0297b14c24c1e0e85f3785982b987cb71bd046b6b8e93b18fb3398720dd543079e64474b97fb233facb0f4f8ffa1b5c717cb201ec3f3c3d0c1fb3aed83fbd16496351cf564abd12edf98a4b83310468460543bd9c9c323d96f105e498960f325d0975241f1f27bdaa8f062c2f47a8b7fd3ae1edc9cc2fae6ca1cefd6c20bc8f1374bd6f6a543c61264028910ed99de287b732fc85b49b49e47f2e395b5c5d08f5cb36617044787c350a992b9c48e6dc9b1fb4b42fe221529bd51f3ee9e25267d759cefd918af889e4a542fb821a5cb7fe682c939180a16e5c9322a18f6288c1e9ace149d90ebf8f55d784b7ac01c7b7f4a26322a8704c8ca62a9211bc6274404f1cd45e11c18aa9afa6e498f58e32d25a44f1b13564962d9e7acdb236bbfdcb4ccd877a0f08efe392708d02894af5787aa6a9bd63ce606d451865c0cb2a611f25e065ce83d9738dce531b6abba0f18c7ddf59c91d79e31a6bb927e3cb7dd052722094ad07a7b17ccc7ee3414bb3114684a36c8165502016d71208d864d8422a7bf4ee1b548da108e66a7248f03992706a613f558ff9a25e7576800f771eb5123e8412e08bc69b851de5b1c48e380a1fb9af4358846524c1c039e54c656692d09a878dacabf5f5981013793aa1954faa14ea0dd64e97f1b4dbc4de7194456c05618d54b576bd4c74a12379812d1862ccabed612a874020b4471578793279d820d42c77c9a45d24f855ab116f084d68fefa3a4f7805c9acbb5486567fc4f23ff011e490b8f7e28de9ba4d13bdbfbb4f11bee9cf1f3baee8fb3a1f0946e6edc970327bc2f58ad4de86d89045f87d63f7d8f0364df8a4987324dbd8227d9e374a55891d7025f5743760192d66f082a7e67a4fdbb03bb69c6c4d0a5193840ba594786769cf516da6290c144e4512b7bef0ad1d776239d92211aded55428310fe8a50851d0ea3fac2a5d20de20b0f10c1e1430fc2984c83afe38739166a99c83fb53e8fe95ec79a093273a94ddda3cc915b246895e6925ace9550e694dad9de0d009ace7a22f4f695dba1b215edb64f1ffba7d4263c81586ab27d4836a37a4502fee048d7badb3c15b6886406cf6a1790829b1fc051469628e3833b25682217197418c3379163dd024acc4c8e4a4c095f70e2a738135ac56359c09b370145ba9792c10aedac2bbce7d39803c64aa8f715c8c711657ea258ab68a7548ab737f232b3a90b0b580fedc9e61b5d4341cc7d97d6004f144bfc3c577ef1e6ae6da6d93e40a7f9b42a4ceb71c0233b9cea4f4ca1b8e62f775bb866d4d999a16ecd9c127dc31978a59af0ae2f98f396d02f4f2658e20af536c2b034871139621fcfc475efc2283b8f31ad6a11667589d96b060935cfe454aff0a0cbc4395897b9e09a5a8f7a46845ac5e0cc160c622924bb61844c834f327d29a6064bc231996f63e971d70447f7c61c8ee4d778f10f666b050ac19f66e42aa0553794d18d1979bc9e91bb20bba019398d67a4fbdb8c3ca160697486c365c6dbdf1f666828bc8f0a7381936207bd60a89586e028a96207d01a97e46ce7eb0837669487a0ce5713d432bef52fce6d678d0a19b69837bf4d714fa827f6605ecdc47d9e5efeb4c1d5bd2d7ebf19fd680d23f3b174e280790cdf6c6ac394da7cbec664bac27e2bdce4b9d5f6b12794ffeba7582afd2989b8bc72ffee3bf0ed47bccd92ffc2e7b9a249b8dc7b369b2917a175be4bac153191fc1de1f8c0f6598f58d024a4d561e224e9a6eab40114e4e425a5219e80f16e5660bb56c9bc6d660646a9ea0a35b77383c4517744d03b43f7f6918dc983321436ee54ffe062da02893f7bcf7e6ac3780f087c93edd3e6ea1dea06631a6e6d24c70a6ea9319730b55e8de48216e250a2a86e2773971d08a72ea30fd3fe4f133a3dca17f6cbce2b1c51aad82483f612deca251f5f5428096a2e01851aa1f46130ac928b7929cd01be5f4c64ee789925429949d2a664938d6432f685cdbf69120e728946ec68ef638f4617685e55f70a7789e688c1e874e3251d1e71a6535fd9fcfb2ef512fd08bdc17e5a57efb8e377e86fd3ef28df7a47979fb9e528a079c73cd1311329c4605f8a9fee896074973fdbc4404ba91b269ab8a5b1b938258cef411b08ce59e62883f1ce9c2d590e87e7ea03adc91ce5eee3dab1e078fbea6df5c647fb80131a6ca9bd8da9e24974b309ea2c23f046534802750527d8571fb20ac58bee459de7e1f57c2c0224bb2db153efa254ce0750205de16eed1167a9fd85081b1620c2b6d55f45588d92a86c6101379212626a823d2f40df4e25562d7e8a7085eee9af0b5c7aa262d9a9d5135105ada0202b759574917a4279f5dbdaf92f6e375f2fb8094756ca501f8cbe4cfe34b594872ac7fd70198e3b5fe6306d9aef57f71a9f5506190380277598a95bf07dae68bded696cda0fa712bc6100232bbec213e15e2559610b88ad14ddac61a5e7524fe56a621f828d57aa02328f53aa2cb92ef1aae8b0820b574333a2510da7aa527552f10f4eba6c966b9892c8e4da4a0ed69b369f797ea53bd63824db79342da46862d94e147e2d979c9b1ebf5a5ebf2858cbfc41c59ed6ea0f57975ad9b6beb8421c378cd5c8253baa2a0b3fdc6bc669c3b05c5c3f5597ebf913b9dfa362a223282018e454a69aa86b9fbbba91c6c38afbaf2bbcb91a5b1cbab338029f461871499a592b4b0570720e8059648a0bac9e9733e303406fd6ffa28fdef5e12144c29f5f9ba958bb62d293fe164c259b47442d6087ef7170f7a84de92f84738f387678d4db0f238d0676f2549e4e8dd41230382fcf79e6703caa16e8bb369c3dbda5bfde9bc9b0bcce5dbe4dc463eea677893e78df9026444ba50bfe29e78c2615e9b2c11dbefb469b8bdc662621f9c35b2f8fd3ef33c134c72092fb2e70869e70728dfdaf0faca18bf819e5d4e0710da003a9257debfa9c2b1ceb1bc54a2e918b1d8a9a7ca0f1df9035d62df0f833fd8d577d4c7855a7a8e2502437d95c66500dcf2582a4d7112a04df2da82d5e254f7e5b644947d0155c2a6ca6e6323af307e7b9cc6b47385f757e25dfd9fbc32d6de1be8d40a2380eb37db155cffa4446e6be7f0285f85137ad0cc86d758b6d660338456a167f1234f5cd3bef80ee99e0b371f27229ad023d9308c9a86ead9e7791bc0f91eaf845faeef8597aaef0fa1a87d98150051585e652141020b2b4e5e59aa114de237fec8f2b4224569570cd2adb322d577aaef6ad6f5f26fc65b2853d188debdab70d2303c42dda2e3e4775b8cbd49873bc33733d6cfe03951bc9fd4041f0778d9e21f4e2020c5948b6b9b7bdfa024fa8a933ff579b3b94f7e347ad416ee4a8f0cba472235463b9dbedec1bf3c0fda8cffec31f4c734415ec75feff7cf8315d3bfb6f03bf7696fcf86b5182ee9a371e5087e23b10b3e25d7e3c470f592ea4abee370f6cca14687438fd55848b83caf685daaac93d36f150a8f75e8c7e2d4a532778d8e03c0b62671dc00c488168d76a9c67106d209ca7bc17eff49c8c41f79309eb17ca8c0438520ed887b6dc3cf24b287f5a4af1f27280af4d37ba7bc67327b3d8f842f826853b0f69c39ec131d3c61778c22f3b89c44f68e1c9aa646fb71be6a2610ec224cda7ac87443fe131f3d99ef686cec1279b66223fccb54299c64e30b39a759e6119c295abbd032a4592c01b4911eeba8429ddad0c70b4aabbd08dd489a2a67d7cd413c0dad00ce0ef21bde01594f6b649d87759a039948b187295ec35577d028a9dfc40ce4bf202d42ffad8242ef05e00a9a60bc6e0c368333b1b5f0772b0c886bf60a86d6afdfe217d88db20585cfd3d794caf340775cc9b948225c6f44d4ee1e2d3745b572684f0a6f2c648a91794b7efc3e94d3d647a0b829d146c85fcc7012a04b9143a1c9865df8732a838ac4b7151569cdc1dffe521bd66c6c9d077f5292171a4f6c7b44499e3ef35554ecddce4096faa540243a3cfae6f7e26e3260eb106a2c70dcc052e36c0803b803f4778497d25d062931367afd60da3de895ac1726e5dd1c015be70cb77cbbb74de00e9af7737470679da83ad19999e109fe18d06f738a29bb341553c9320b343cb066e621ed177c58dd293e83264ebdb43e65f0dd9840cec4f1ab2b92adc1e32ff6ac8c6e6264f786b354d87d2fa1ec259ef82f7b7203741b87ec8c1c608994853c9fbdbb7ae028674a2a0f941eb24fbaa483d4cf40e4bbb0e0e4312f366d3497fad7a7cbbf139ea717c006b78dc756a2401953163ce059117c9593140f561ca11b3015f2635ebbd41bb6342287d2140979049ef1dbade7838e0f01bc2f3e31e386011e97e6a131ae8414c79fb03959273a1525a14a1b10276e3ee0937a9e672c984b2ab22aa5dc1a5e152ed2b2792007a6b1d8466afba847063c5ef477d73fa6fd1fbd832fa45a5b0fe87550a35daff63650d1c5ece03f2536f775b783daaae7097f6ff577bf1a29871d70850416b63aa2fd4e349fe6cebb96b594fb0e6f685d72885107a6b9aaf9dfd7df653385579225c3a04e695e2e61c150effaa081e584a29a11eaa8f26fb543de7ef598247f7d0176af7b1e6f746ff9dd299f7d523efc121b48e44120ec70f1cf81f784768c67441601a8f643d44283210fe33764cfadacf2ddc054945721b2b92a1709e0e8d94906d7beb53cc18450919cf59473c47b28ed446135acc9759ec4371a43439d5b290cc1c0c19453f0e9382792439ffb00b5084bbd0e24c7dc043380203fcb8439ea27a89d262b6922bdf7da39699813fad28e7e062197a4869a3e6cded1ea7c352d72d2994d443750977d1c906545dd2a55ab80460ca5007bd015baf95d20ce7f9d2c59cfd887817bb63e3a5dd5ce1103d45cf8b3c69492ed58d6e08eec82e48173a8b805c84800faf2dbd1d386b651eb106082e1c6e01552afaa45344d437edcdbd3968a6dcdaa6af47c182b05a82fc3f208e1b6ebb00ca73ae81390d29425a855ada0b046a7bc3262a3e07c273468444b91b239c5dcff0de95c173b29ea84872aa9da51859c9edc4bd6c273b0be9e6c835712b0637415f72922fd94fe11eed2367ff1e2c32959e8e56fc5b0b0624a9bb3554486ce3dee76c4fb8967de67b4f9682677cce4aaec5b44f92d74f13b781ad67d92814d34e1844f58658513319e2ea27dafeeab6554c3b744ee997a0ca7d1fa2ee242342b9141ce3e8f9be696afd6a0b5aa2b76c5fb8737bbe8ce5775fb8f7338a62f7b8af5d21dc35b14c3e15e9cfc796fbc8904d62943a46c7ca7396cef6e4c0955b3cf10a22a694e3dfce5f7554339ce0a6a4e7a62ac82dd90419d29d96b24602e220a7c1ed79ae8d18f3266d603a55a0f63b4dfd55cf54277c212fcdd3fad8829687182bbc81f05b4b7bfe4fbedf9daa1397a0840cdc2319ee8a8e919756382377635df9e8b123b5dbfb5acce116cca5d8bbdd87b4eb40dd1b9f90de7406c26b0c9bd87490a671d974c65dcca1e8d6b633910514cb3f81769898c0d938bb65de2b32ef4332ef4560cc7be261f34ad6b575af659e5166d3a6fcc4ce76c454eeedf95fec7af5fbd8223873ba9723546bd332803ef55668f08eb56b6007dcc2c2d9d0cff78263f643e7dda4b83a42bd9e55bc4f8e2e5b60203ed98d8fac9fa13cfadff6b67dbcb73585f354f1628f04b8632a49970482b4bff566f8af3a4bf2dcef78853177e8ca806d9e2be38f7a5ff4a676626488a2a1eae643f2f51091b7fac08810e7d64b906d8b2f02caa05c2dcf923f7fd8d5343955be35974a831c7e98275df1b9b5477fe93af88867ca7efeb7d69427bcd685cce392f8b22fa7430357a6f6ba9178af08e6eea513ebaae2fead41fd2fb597d8f4ce68efd1bed16b05adb47b05198167164c07146b4356dcf9e698bd1885ea4753b70661d88fd156f47d659289dd136907ee994cc50f429e980651f3d41b97e8f0ae3ef109a1abab4f7cda4d6f2b630b70297cf62efb9a539707cecbd5ebd9ef966b148cfdc8d71de092a1b7b1549e538acb6711041284fa53536759fa6d179d1227d55299fdd3ecd0b4c8c558720915dea1a7a00d643511f22b183ee8ed3a77d9aebfdbc0d009227ad55681b994db3c454cd3d43ee191e86d493adca87d120aff6c23a63996d62dd1df67c93f7b22d386369f98bda9492da9804f68cc10d2add6fcdb1182e313a208ea97ed44d41398132f07a7ce901883bc087f26facf505209cb0fefdebcd413ea23c32a811dbf05227e2a67a486f9809b5c5c769b334d91373cda9fbcdf3c8b593eaa25d38a3756ca29745957d52a4d83bdcc0f19d658b36ff9506eddd714ce5e9672a98f586341821369828fc8556fb5647fe5e3bab484cba4fba3facd96fc7c1f9ae0d753fb8107e623f536459fcddebf9d7585fb08be9036c98d4c8b444d1d5858fc7aa8b748644d1f41308f0c81e523fcca349fbe485c42949c914195efa678f13c21da38e3e7f1c766ba41124b3874d27f76b2ae98cd8d663264a407d46710936239de28c30ef95bfcab8d6770a0365947e118e92bd95d5bc4734b92287b4c0e2d73d66eb993292be2650a4ac2006ef650087f4cd4839ecdd7452592f98d31c87169507c21c24a620293715a39e3f944b1ee07782aed201de1448c15f976fb9ca30df294bf713b294c4de15665c4d48963a238c45a7a88a8a96fc4083996ee6cd4c82abdca2993a357a74af0cc5bd5299c930cb5dbff3b186a99819703d47eb9a91bd92cac63f7188afbc19334640313d62ca68fca29337f76072638d51683e894b984dbb7a7b007839f42bf54649bd937cea12d05427a77f7bbdb6d2982c7929f62d12f35b53790e745864255512fb09eb76f3e64314f7ed072aefb3d2fa7c036e7231a86266dcb9e911d6f093c6709234485a21e471016ad71f260950fd600f9ec0057139e50148eeca6b1fc887705a70cf307cc120d8a8eb74779cc0726620bab6d1af2f5287dd8d29ab43aab3ced3294d9e132e88908c1494285d371fa70a19d6d8af35d5d01c6f70767da5d4c7533372190b10bf361e4d2463ea49fef7d8381555f114e6403b1b963d56ee7229710d50e534682151b09bdef0e30e131b0f39f47176afa5d5b45fecd9dac3b89b02c1813da5f89ed792bb7a40234c7cfa67789b5b76d86c017aa0ee0687bf86cba92b0526dd3df5a6ca9ea0238dd7155a604323f3e8b2007c3e09d6d22fab6788effbf3576483c077ca15e22f6e52606d913ea650f924d17649beaaecc7cfc15d0eadf178689d71c99393ef5681196d1ee704a2aae3ab242987e9508f8f3c22af1d0abbd9cbd245e2d9ac7d4638437c1dfb04e517c5595dbaf4bd374279c53cf135e85f9ed8fc45fb49273b981141e906c565b09a1d4b4797fd326421dea7ab382bf41f5acbfd7994ac60dfd2996522aabd82a0d4cdf33503d981a263dfc0df64bdef1f0378868793b05353ec5175039dd17ecf02f30f31397ebb333520183f9a7b6aeaa6a57e248c35f96d4c0b4fb171bab0a97f701b1a5ee978b9b3a37c595d45cae4fe9d72f815f0acc6c3a308a76898089bb6062cf33a60777c5fc33fdf21a3f8d98d3ea096f4d4fb80f4b766474857a82711ede5ae8081203b570531da0f843e5e0fce87d20360380ad9695e4b34508566f7d29256ed75512e7113fa4febb0b8344fc43c288f8ea24b69a260443a07581e4164482706553d95e994805acab043facf35bb3b3a16e7426716f2371eb0f9f8cd76ae1eb4eb5ea7885693e1f6243cabe6325ffea933bfa935b5efcc9da8431b6c777d336e5dc606d3b6d7590dbc0d9cbc273ca6376fdc8cbc52499b69decb5d1ec0a9738071559c6f0b7b24948c5fba732ede5f8119ae0dc1a543c8e8db3f232e9d25958bf7d9eaa4b3361d92aaadebcfbd6f786c29dab5ddefe8ffa5302e13fec40004f76ca6b0da492c4c9a01e91b61aa274ced30478b5114dd3d618c09c16908667baaf5d23f7724000b7af3a8e65c81147b9856a24733838f49890072a0779cbda638f24141128b3594d2fe98fc855dfa9de6999b597b52edcbd110e93bb376f47ecceed01cdccb933e189ff56c1860f54bf075280a0468ee5c7474e98efd5579c04b0a232a64b894a01cd13521a5d825e63e303a58e0fb2998a0de6d92d27e09738b9fe784f19fe25dd264b92f75ad4649d8043e184728a96c0989699f0adc87fcf63405a99dfefab8c1cf260c279fab30f6def3061bf354ef0c59b84b6430f1beeb8f173b266556db037be25cc73e462bd25e6e9a4ce4ae61838cf3cde47bf59a2b96bd4e912df1bc23bd6e28312b80bbfb5676f9ff8d1c8650a561f9c9158a557abaae4066fe32ff6f2ceafad1f73ebad196ced235496b57d2832691af5b90be7e79cae1edc1fea8e96282bf90cd503443500b4055ab15694f63cb8cf86e2d543c26562bc2925ae0c7761b8e4fc94099067cddd9a3293d45aee996f7b648a25ac69c1fb23b905a95758e2b821650668dde652dfc56dd06a3f31dfe99e6f0002597d2cfbc9d44be8a007d2fd9a396e57d61539e728c756ca663072e42c1789f043d1331e55f769f96098e7d4d3e57aa1e877aeac2e9afe63f913a482da762a460982cd4b5cdd17de5ce6ae1f1255f82103e13fefce3f9834b3bbd8a4c9f83150f4d190c3d09ae42cbe50d41a530895000afc9244d14e16aa17abc599dab5a2a9438f929e904a7e419efd1fe9c986d7fffdd4ffac12f4664399202fbbb07e41da04f907bdc41fb7b46039f4ef3e0f41a0b39355ceea9815d2fcde13386abc68e368136b6b574aacd223f49c87b5b5c4fedfcc4fd84d8488e119db46556e10c8f30f0fe8724738af74a48706b9a5471eacf588d289472a8f2a1a5db207e1fbe83ca19bc78a905f27ad87373ebe5d359250b4868ae28d072954d478f87659cb8ce04609b153d99a14aada788faf8b886ec52d9aa62da969a239dcd8df5e307701f14cbdc10c7276a68458a86c490af7d8b0ee63da8f118aeb22d7aece502f43b74a7cc9b67fa490bd0ad2e93e3e45be1edb9407e63d1e865ae2dd07c7a1b681bde0346c64bbc279b1a25b521b3c32c7d1cf52f271a940a2f460c8882660632da0180844a05b2b517c67a43a711a2bb4e96eb9cca2e2185788b9c0d40df4a498bf9e4d3103459aa7e838640c0b16aa3b7b626288c5dde575ae70f67609efed2c8059b030bf768ff41160a026c95ae0aa389d15831b6e5c18e2c2052e5c7b006b4d1175616683aa346f9c53e9a0f69982466a7e396e0570d829ad3d1f4c24958dd6a6365af5823e73ae6c9d8fd7c65c30b0e252df5a9ced5a5cda5a0aec25bb4ab8085c336f0a0c96802707f5527318e8466ea520e957c74782aaf0924c5c5bc09374b6c854394b43476b52db6b9899860cca5fb528a8a3d25f186e02745036d0eaffb48bf1eb5116ee4e222b2d352fc8054c190bcedc1e425275aa5afe07afab2743ef485469bfddaccef0ddf3dcb8e6e3df207c8356aaa95c808b65f49658deeaadca788609278b6ae3457dece1f5ec6ff03774f4d1a564fefb2524c4a94733e88ccecd93f03dca362605deb278d362421ce4f22d31798c37b1f444ee09bbb64117ac3973cbdcb4bd75535ae97422678b657d9a801a962b469cc17f1ff4817f664c468ebf7685af6dae89794b2d15ead557a9f1de8623925c79ffdb5db45d87b0885dddb9557bcf3ae4f919520561bf7e11fd475789b6f5f0e3e354cedef2235628bfd52e03837e7946794901f63047b81d65a91df4b8c50e169c05e3bf3fc24aea15e1aea7fb02d11ed14cbb70155935dec3496767adc5051fcfc3ddba4d32783b860c2e1628695abdd6e80bbaf32fbcf94b6f468db70291f53a0705e22755550b005ad6b86eb4e39a665bdae48ed202b1d789feb4cf93068083a509526709e5433a477df2ad5a1304b6fa2aa26024b92c45db9ae826049478f15699508082fc0062a460544c4b58d46378eefded91804e3959a6cbde26e3863e7f50d331ddfdc5ee20bab0a92fdcb16f1fef123e4324e88250381f66b78f40bed1990db5a6f54a9deb8aa13cc287509be8ad246ca938e3948e5799f2f83022087bff38d10dea14a4bee1b2cd94e9b307e703583738cd142d6b97138fd0eaccf611ee9a2320431319414d7b264b47bdf07d97be8928bd5b4f2b87766baade285ec72874f33041f02f2cd3802116339279b006dd67aa7682d2df13aec7bb306fc08d3bead01bb3aa727f35ec85ef46d7c3dd08554ffad7f9bfbf71261e6d634fedc7e89a15c21ec1e92b569345105165a6c708bb7fb053cc403a4a38816b1550489280699d1fe9cc99846a90ffd29bd0fb7901a33103a5a1f8a5f7f5574b0ba6f7e636a7dbdb0f2b23da0bd5d7fe8bc59a279acf954f127a272e258a513eeeed94a0a41c8223e3f616a82615c2ba31d2e304a112d4b16f0625da5ede966a0ab50a84b7ea42785bf628af1e63e2047933263b5418b4e0712d7eea0d602d5159a33b050f429a95436d252872d2e2e181c5839f100f67784f9a07b6b8335f0495c457b7517c6e501d2638afd4d62ec1ddf339c26ec1faa8da33cbc78fc2664b93fcd95febc6b6637d124afa5ae65125ed20b7f0328f2493698d5139142594bd08be9d00152708d8e6633b0e0213b714de231ff084081ecdf59ed6b0b7a4269de449dd7e8979fe0988c18051ba7ff5be036eb99c8edffebd25f53b46b9a7c5afbb04715271023128590c1ab9383372f1856a41a2648ef0f7ee4ff219f089e6f3453c7bc2792acd893cad73d8ebb6dcb94b12a1e15cf2640eaa195399c013ce5cd6806acec8022d5f3b278b58cf83fad78d9983cd203872fd8b75cb4c205fa8ad5a2172b4912b80a9ab58ad4105f194de888c08eeea2182a7bd7acd897bbb8620301dd4779adfb8d359a7861fb16d846a29de18aef1ccd490566a7c812fd4c85912dab2bd68663d3193efd950bc0b5ed921b36dc6928b20ce4e5da290a92d6a58f2e1e8ebdb75a476804de8488c55a170c225916445b20256829a342869f64ca1ea6d53abc99e5053bbce5e901afd751ec9b167bb5bdacfa8a08708c613663888e2bd5cf863faa10a6ac95ae6898272ced3791cff7685f74c8256bf272e636abd257e9c2227f10b4cf56814cbbb109c2e95a59d14a7f3b438bdf25b5651f6638834fa317912cf72b44bfa2ba7ad2d3d6aa6acdbce4fe2c5f3bd13d1b73c08c0d6da242ec993a9beec585a1bafe6c7a483fd173812cc317e6e9d098aa80389e44401121796309ee642f64242753df076f7fd6ebb5267eb863f8c3d656349fc191f7dfd90e7684ec1933be8dac5990d7f0e9d63e8c450aef09fa00c6d22284d3990f508a83f23af4e6b874240f6e56e4f38fce4d33a092bb0e83dee56cecaecab23080aaa2686b97aaa84033c8b411d95c2f0d9278240b8658570adca06e22ed8a7a6f301dc58b5096635dd56a449e32e9952094ee8a51cb1db2fe9391c08f5957bbc50f9e59fee4f446a9497f5facd09715425b8727ef2973b5b35a3a178f0cf24ddfc6e6d449ade8094bc873353dcfb7995dcb4426df84d58e3c3f6bc07866307beb1bd82530a80c6bbe431b28d1ce3ce1c15e5a563d597964400f6b1a77ebc3111923aa949aaa02aa0cb358f43d58860445c2a4e922ef80c7e9920cf5c8e39b33c1dad276849e55328fafbb9cc32a966e596461678c26bed722a0575501e29247fafd5d4f4f13bf62db957be25b596a07ffecef58f84cab40749bd5f9454af457c0a13c0af185c3902460645a5823912cefcd98cf7fd76b62b9ca5e23de14a71152ef8e160df63726646296509642817dfc4be4bb9306a0352362e0059a12169438d350733d447919a2001caf8b688423514de2b7877f82beae02a9ec65f118860ae662765b81cbb71858834e9e7027b7f891985d395c7aa571ed84cc5509eaeabb77cb06ae99666d892613ddef09dae20d97a655c70e5c16c2e15b1334f111708f31b077e9b774c7b7473a70cbbac60cacb6fc8f77174cc81f18618923eef5377ade11b8d12170d84da3ae6c06903c2a6957c4bdd5755ec8e3d272e5c48a1a60d7364b635fcc45b99ba776ef2e9e6dbf84a3dcdcb8e3932d9a2b16bbe33cfad454c7e9ab86a209c9cad0ff8c27f3820cd6226cbf0e650185055e582b29b7b70935c159199aad5f28760c2ad5847e76f631d6da11e4b73dbc4e3d54b1d7a8997ed0be761b6903fc537523786c91b07c27bcc14641ce150c9e809f3833b10f67acf6a2d1325678f35167a447b60d6e80e5df9b9c7df0b51618e2bf955f634ad0645768a92f78e8bdf54f7bfdf630ca121581f7deb4b7f8ec535deb0ba3e491eef6b0ce4ce70b51b9f72df7030933c8882aa4b8b417f6d11141af810c361bff6bf8570bcf5f7100e459bfd823cfe1cc2a17f76322e4b338bcff52e156b7a22b037ea668ce0ca7fee3c64888ecc0e39e112fe730f52dc9dca224b1ce65f5fbc60c78fd958c3ed020836c57cb3ee2e44418efbcb69e36f0d451825fdfc372e891d317fe5e7c778b491fd131cfc0b2be559c2bfd6de0346fddd7b9f93bb1037dfb822c415e59f4206b0dacdb7e7d41a1a91e18637c1abd8d94d8c53352ebd75c61be18c75def78089b11ed7cc63837499958e72df50616ccf558d11967c2e00acba60a6fb2325fbfa1553c1328384813bc3fbbd82106cb2b76fcf7992503cc2a3a998cc4f0d56adc4639caa7324677c9007b77d09f41b728ba3c5f451d4e5084684fae916c87fac22992ff1867d8fdd62f7083d851f3dbb4f463fbe36a65e9473097e7cfcf3d847ef871007a2bc3cf59afa5d1da1e69c70cd5a5d73b7b0a1c69669ca772c78b39b458b32fca69230e6cd15cd06e8c1db116b7c9602b3728d50ce01b3fe5510e58cead898110f0e10590e28df50ed13f0207567e041ae70ef8d43eaa4855bf0b472e3a554f71348e111f3a20f0f891e541f6ba6d634c340c3a34632439aef379ed61c1655c58f795ab7ff0e9e563a7c06987e0f3523d8edb45ae17e99df317debe901dbed964dad6294e66a3d47f1449850fc759e6a82181cae9e508ad244ace6097aca0c845a37cc3718e2d5929f7e40e5f2806a625af585da3be63b771c788878c26036c4bf2b537d437056919de4f14e8b15eb368ff76d02f822228ce99067fe67f1c8d51ec2ab2a2d095a7c5597c85e6a97a6ff48c3ec0a37e764caff94609b4e3ebf7e27d61e4a820cbe999e704b219762df47e487610ed1dbea71ed05d55b202467250ccce6158e1602908005228c28baf7342da1bf4f4463f4308622c02ce5a259236d41bdc21f714d51cea964672266b064011c6bedb9de019c87add6e7bc87cd8175c2c2733699094c502b11ced9bf8ec446f506426001dfec13bc1d286448c686dec59cbd9cbe2435465392a69e2818ebbc8c5b8685d3f982424434e485e09652e93c0d935cab7530e5512d1c6fb94b020d4430fed0b6def37aca3b39973c8a7cbc843086472e7ec114b6ecf256ef6c8c7573a3a4eea6463222d9d7665f19c7983dea0c5bec1140f537b492449fa61002b2c1f413be1a2a36b36044fcb24452f08d36c91b9006d4a326279b9bfb533c44cb5a7b3607e7267fb5bf9b92bce8adebe9afa799b099ab9b27db42d5d581e0fe897a128853a23119c9e0b2354a1454ed15a7b2ad73e46e7be186b49dd41b367554f58918e3aeaff685cf29ef3518d3fe69aab738e75dc5f6c37c21e31fbafbe249b07ebb4c02e19978f7d580a2480223dc0c30609e43206fd5cd26f5731e9491e2e3e6f223b555203d7302ff67988b80c18758e47a27e11910472e7b07456b04f3bcb9e124e4ca136ad83e42ca523f3aebb894f9a396c77ada4f28814a3d161ab468ea6bae54848151911c234f3db78eeb7dd07e7680ddb3e714abe2828e47f288b4e3e5096272dc497d7e6ab2edbbc08e9b50687c585f95cfeb9e728f767d83405a794ef58aeeb444791e4f12357aca5b48ac0d4a002d810db2e68dd4922da2e07dc4ba420673aa9bcbd17e3237b57d9bf00719fe783742586e99489462966cd1e4b8593296d5415960e161a47f584b53e7f668ee091ce4cce5ae9b083fbc8f39f56b9bd4af4558db70b0f897b35e5d6d8192cd3f64bbc26fd51e0da980abed9d738fc6b1f44a04e316e1753ef39efef5f5febb95ab7eb072b129f5b7180de69ddd21c0dd63fabacbc43f7000251ad2c258aa32b0baa44486bb566afaecc00d726ea66c5b8e9df323ba542fe8d9bb06e45416da4875d7d8177b20e12e8c1a44d6404a2961269c91ac014edbaf933fdc7daa91933c788d91cf1b597df80e52dc7fb7700978ed14b4414c6a367c7ca800e56fe5616effa9b6ea95f9bb90c2b30fcd382da2dc84f79b9c8890138850518c647a4ccc5ac4d856439a8943b946203f27abcfd964bd84da1b1b467303459cd053bc7bcec47685db32140d57d676df5b0171cb44478be4127c3fcacfbf50ecc66d8c26126ec66d6da74ce594b1b1632818ac87a8f70a9606e1099ed5d57f29a9f325f15f0b5190b44d5de383cdc42a526f336417b5f77bd68e7636a7c35f324d8f0a25678732e21d713c854a2d77a4810e0a04b3718b1fb4baad8f8492e7ed698a780764720d252d3ae290532348fc33383eb86e913f2c82b1a7f84a06aa3c6a35ddbe279fcb80789b060732af887a540ccebe39e652f0c885faa3ce3631b5aaa33cf950d6189462d80b577da4ad9c808f59f269c353b8e0d3f900dbecd5dd9b3ea6039fde5eddbde2d3203be89703d32ee1237581321de8737ad47455b7912b35a8e2da3c7d641f9fd73bd12ffe58dc21068a7aa881fb3eeb1454fd8cefd37fd2f7edd04924b1ce0d94fb1ae428583e94dcabfbcba59e709890dba8ae90f93b8056107b6aa3122f4c1128e3c45b727668eba74a484c36799e249f72483d85665833483c05c01ca7c78fe4c52ebc3d3f85d3f257c3bf68ccd6e9c78f815be6987ecc66f817adb11c92871dc86e7c1a058cce48bfbd7dc213a2f77975dc926fb78ebbd846fcf5f28626bb8358d92f7e4961b0d409c2c83f2f10b298d450ff3d036ceac5d5c5696f7c1911a28d25012b3ec4827d45b5800ce508f9a5bb4f72bbef255ce5bd3afc0a672226689e680feb5864a8848fe6febe109f33f2072d1d5ac27d76471c29e1a18d9863a740e669f094bc6d41b7ad9d290d58b022f2c9c115c7267334604a5510daed206f871a0ddefc111eb1c12346a5d4234a8c77e2178c832c8785d5d9def2bbdfe1d95abf27af5c87e6a974f20cc6a01360e8e055dfba5bdc32eb336883c212892f5223c5cf59242f59262e71468a89f8ce50129b15a63dc97f6a61ed8c640125180ead64c3d2cd5cbd53af1e7165f193dc2d2b09f8124b6bb56e1863fcd4bad557274e15be7a111efd91658653e7e8588b7f790633fcd0389cc74f571335012fcfc984db19fb883f9fa7dccef39b6ee77fc79ebc3af1965660bdb55453a88f9fa184c22e945eb3248a2db35c0c3030a766482a30e40f5804f996592086b021a7903a73b547aaa9a4a525baf3f4f1912cdd42ca9bc24d5b3002649ad86e1463b3c9cf03195b4ce025f0156ee693d1dae89da463c917a2cb2a2c34036cf39e50f3fb253484b29d7c6559c50cc4a3413cdd9465d3770cac3f5d7ee0cb5923e9ec982eaeda866942a89fe16b36e936da41aaf95a895dcb0519ea9f69c87eba0ab623dcd6786bc746f3bfcd4dcda4f0ec6168aea67cfcc8399327409e3a8584f0507359e79a4b9b3ae3d6df63c1a1e6721e90fa4d0eb737a4e7d2ff5f6a4426fb493fbe2c99201f5689ffafeec8b8a90298bcbda79a4f1b092a29a40b88700eb3276433f266a64028bc08a13270dc372bf0b07a3582d1bd823ca213cfbfa1148e25eba0f00b66353bdb15764850ba33855ed450f204c30c771e20b3a1dbc6405704379a88d563e4c2d35db6ad0dec658dfdc7bc219adf789de8f39705938c9dfd14aea5d62478bc92b69ddc87e14b3a67d9f52cf25fdc890c97b53115d91811f185e0ce754dd83d6333b38e18bc6543f12a6af3542c6e888d99abc58244ec844b4c2548eb623ef2bb93ab91d4ceed14b597f324fdbac3324fc0ae160f55b95d628115a0e633fe474ba6e6fb8268e4dd56296327f32c4653e6738672cc9e98e9225dcd7c4f1b94b212be2262790cea8b4b83a8813530e47c2e59b3342d206c1fb5c099ea4bbdd622639baafc6da6d7009ac2f5ce8b1bbe0f11d441d1522459d69bb2e9c414ad7d52841a5bfb6c38851ca11ea103341825e3304ac625ca3b7fd507dcdbe36de8dbbe76c341127bc17ed8e7c0c0e35d542d638e4e799fd352aa2e4ff4cb168c6bbbe5465123b851548b002eaf0e01b4bb21f0d9eaad060f50bf8a7db4f2a4350a7232f9942fed13613fac5e24a2fef89d7fb77f330976907f4b6cdcea293fa7bf40b775eb8f7a8dbc2e21303b130c5277fb6802100fd8af77e4295adb0740ba9382be2d9cbe9e7447894824e4e840a8575c3b488b5d6f2b0b445371274e18fafef914477e6652ef0a5526dbe0525583c28ddfae505f97271030c83daa8bd320681d4e4eac9444412280573591a6a43c546f268097fa36f5f143fc0ed4abde3088e377cbff609dc59dc957ddffab81bacdd513fe71a02eff907ec0ed40dd408447271f72e30044a184897ac26b5423e5858497f3315d7d4b9d5958ec3602ec5ae54c39b96f6e23bd4e7dba60d5001c6434e7a4976983966779816ae1981bb82c686d937ef79d64bf3b6d9dd39445bac830d8b01035524db8163315929a83fd88ddfb243d3c11ae1bb5e1a54a7597e844c8073fe366ce1a6c021466bfbf40cbb1aef0caf6097e36138ce21c56a595ec5b00a6a6508f933bfcdf17eed3b6fd4fc14c5de1be5a8f3fc197bad7f0a5e3ccf953c67720fca55cdedf66a37a30ebd68b64cd89af3198cae40785c26b21afef0fa9e12d3c5409f5b1bdbb9d1bee4f2fdc1ac49a39025f7d1db065c2152ded49e9526ab66ba231e1b190aef81766db22d8cbf6f72bcf5757b6f5902ee5ac8d90e51abab281b15586b0f1b7ac4227716caa2e67631b18f63dce27f83d3772cd54185407a53345ac269ca1fce9d9306b90e3141150109bc7692967fb8200b3d40871da4ea6ca50586a8a9acb3d8115c54e229e1ec931b6acf6764aaac542ae90313161c28539ba7327ab8df40dcb31df301b276e3827129b0a2ff4ff2590a99d352354497d577b3943428a5f467d96ce1e21d180384bbc3dc7ede06fef71394aec58fb870b0b87f04e4f783b32a606288453dd32cc0794aa1d28becd19338f4d8172f6c690161d4e989c803c2a01371e9186e54f61c03b43a4ba3ccddaa06f4090d65950d6897a5e60a92ef9eac302ec677b9726ff9aaf2ecd090e0bfec91a61c8c2dc344152cccc8037b921bbef086070a6f00de64342e2c6cc879e502f16d30126390f75c3b61cb74ab01d6a811015b0d1a6780e9d975f180e2f57bb2f906560ddf2c166a81e8a9091217809d55325a718f142e75b5a9fd35d54cfebb12fdb2dceab3542c208c0820c29764950890d9557d26f755ececeff21eb45edf8f7e0cfcbb543292636f8b06a153a3691f5f07bf0676e57b8aeea421611fc21861da72acffe6dd8e3d9376684224508c19f711c02eac7719f4460e844ff6d8ac056a9e051e5522263275123836801f5fda6ec1afddfe02308d46e39462d28493db92e8ce30789aa1ba99fc3e433f35caba32fd4dbb685311808d5ea40c48fa5705f8bfecd30517845dcf074970e0cddc63e56508415dc3f3e25d6be4d4011b8bc4b9a864d4800a49e26c08c40b2b3976a2e97e05c6b57605e9bb2fc6fccedd61d31d7da7848c5327bafd03ae6809287955983bef4cc6c78938aee90933cea75b195e28c9a52c5deefa40a73850434b7d4fb9554c1cdc90aa9f60bb925fd49cc25786bc21da3d1ed111905626f4e64660d94a1cc719bf501f215f36f7d675b7855598117b00488f19cbf9c9aa422b986e77cddb8c1e6e01c6509212c9f6a97f4f4ff9d08fc3c3e983bda65b8ca264f5c809aa2e04e4e013351d55a87675bf9ab103bb518594e5ca2e427baa42bcfe889c98aa8746ed233ea124f96271e3c6cef0bda5f8e5ca1805b1b4e098f63c9028ce8c5905687a7d6eb1ba6df5f3610b97ca649ae9ee16de1bd559cbf4207b73d96ccc49ef67c77c8d87fb1607e010bc3a0ba72839290ff4c40d1c8f1f7bb47652d4b4c2dc9c0639aefeaadc2ef7e4f4ca4b7132dd31e880e7ca8a453e2543b4b63ebfd0e3d76e636a38767f0fc1b8cf004a2ea2542b86a85307f3352298cf001056ecb8eb5fa15231c319bc4d04091f6bc604ae3e483dcb533458ed4bf13254c1bbcd660f0e8144ad8bd89123e32b35c1a41abff5f3b39ff0c8debecd5708ca99cc672aa91e4f2167f0d169e3cfc9bbcc27b9abaed12e7bfc06113e6eee96891e603033aacfe6592171c1257fd0aa9db7cbeda27278f5a3d7d8343f744b89656c3d88594fb39003e99b6fff155a0e4f6e691e1a4b5c2009f30b8b4c792d3c8fe75431a024d3f18e1ef056389aa4e393905cbf877786aad622afb2f6fc2533b5bade03f880d6d27617e411a6577f790ded14a159876c739bf7f4e20f1b25dc08bc3550580233310f3f4b6d2a795daabf669f89d35a72cced8dd9179331054a1ea18c2c887bb9fd395561ba0cd5072b2377ad7af5f36a6fca04c19c9cf791ad1b0956ec47883a90ef3aa57fd4a6cbf6dde7eb1c7b639d3262c4d9ceca770f68d3299056e6b5cb81050e98ebfbdea31217c6fc9349163e067bd03f4091830331450ed8d3816acbfe8fe689343f47bcee1aa474ed63d39349cb0386c603241bb49635b5c0a8d794bdee3f67682b280e4814f4ee07b512316e801533dac901e5a9f35488caa094d225b2093bfcbb2a9f8911d2ba1ecea5acf18e7f5470a951d94ab769db41c4ed2575749fa0d077d14ec2577923fc37bae3d2933703c5723c6acb68518c90a677caf917c3f93fa23e9c033691a88d487fba2a43a03f6a1cab8e128f5c955e6d62d8cec04a88eb8ffd45e8e27b00fef2e906327075ed84e830fb9c29f923103eb9c8af33c73b75ed2484ae888061cf4d7678b384b5bd8197eafeb4bf4cee50977a456b346364f5b9f16af05b0ecb0ee71f1e88f90681bd6482f7818c9f2c7cd9975baa79985608b63822d2fc5e71f76627596e0ae09616772b0f77dc9a0e26f8a7607c970ed3c6e1b62de7b652c1d7f827ac1f8e474dd881442811334bd02615ec983e00a77a92da6176f88939d2d1972ef580a5cf40dbe11461e5629889293972c60e1ae5fe9d579ad6c3757c473b75619d4deea93a9f48eddbe3379237b6a21e78fd9a6704032ec47b97f592b9d0c5973e2a476a3fc5508daaaa672f68a2e03c75867f6a6b7bbb3040156ba86d8f5bdca42fc4f0c617e74166f002c3fdebabc2ea97805ed8f6de1bc9e4da2ccc1a660e641a2fac6a0c0fe57e4e1abb55d41c8bf72b9709cbeb06a2e3c8190b374b0395701241e8311bbd7ac7b740a3fb076b96e98be8e4a5e7ba8e0e015396ff93aeb804b149361ad875b0f5435f39f1aa88fd20b1cc9fcd0319170a8a534f4c2845e3bc1dd3d383e5c9e61cef1834493be518dece85bff2fde311572cc8f60ceec24a539f867900dc1b0f3a97089b21a054e1f8a876772f59ccae539083a01caeea318b74fc414cebe5135e559d94ce1fe0203c7eeef3fcc311f164f83d95583cc99997cfdf1c3e6970f8ba7c9f8ea39b5cb73de6f7f585784fbc6e22195f4dff4c8127d1254f7eeafa5e5e6172f0313fa5d894b2695e1482a314daaafe5f93243d5fdcd193a93e4f02ec8367120741ac305d5517eac02a677b8bb96d7223c525b2d098beb5702017214a91325e20b30d87c1439319886017a0e5762e7a1099357a8c8a6176ce8e6aff8c2408889c47208615d342b972125185ce25295b349f68386e33dcf94df1211266a028f234635485ea1eaca01cd10c890e22b89750c3339846bae5dba4c07c2d45d2e6d0b77e90cef13bd39a12abbef7f2430f0ca3262eefe2b393295d756fe98b9deebf7594f8491acf8ff0f24304e9ad0cb73a77f352e3abe7ac23f8e8bae9ed20ff807098cb5f7ab5b91e3d4af3222694c8c6c9e65d708d8da03efe49ff80cb838b8ca49eb2151ff7fce1ee74fa11e173bfb92c4f6aa4cb68cf3b2bd8fc370bb7bb8c35de1bcaacb43df1af1d5e5446023239128e609ffabda8d9f1227c5a93829cefd2afb971afd41b2aa3fc5615753f9bfa971ff9b1af7bfa971ff9b1af75f4d8d53fb446adcdfe5c085c2ad5ee5c0cd827f2db3ed3b7f4b6878c82ed3b56e2598569831a5880a87998c5ef74104f31745ba76d26a7e8f261eff6752c9027b267f064418d44b998a8204db97ac2782b33c2c6edc73fce51ef72c4ba6b8d01f0281222033f2e9b9c0052ad9d9caa587afe215c091a6631e80a23747a40aa53daca25999403f20cf8f3a1174b05de5124ab591bcf86ab79231157c6e384e9e3b72b0259930168ee074338c28e3318909e76e0dfb2dc344cbc81899204aebbcceb737b69f4a9a9eebdbce43fb1afc70915ddb306bdf064540c6e487516f79d4244247bab331219d074b82b8abb31ce2c5e1089877bf58c76d05d47ca1bbdd175adf56fd8661fd1fcfb95105fbeff31dc29c5c74129cc87a7d453066febdd986804d74ac4532612b03c2999b093f41f192b490ceeaf185b36d20ade776024f055b1d688a50c70bd5657fc8d629b27563121517f2f8967c3c8dcc16faef0a4bd8bb3cbbee9a4ffd53460f55f0c7af0991f43a6b678daebe9965f37933cb86a38b75fb2aab865385be65d10c847b5651f3df99d3729340a48a98e93f4869d98351137925907bea630e772fa6f9552a80b39427a61dde4e62d5a1a9452258783b7b3e3e5c80491ad26821b7102efe24a2c8db598258a98b4c845472ca14534b6bdf880c592fd96fb427aaea9cf0c8feb2951482cd394507d451b23ceb22cb74fbf8ed459c05c312b2b99e322e39033cd6000c97a954953317abfb43e3466e09c9c4ffa11c16d53a445044caa41bbaadd5d37f2da545ddadebc91c1675b77e843de608f50e1b940b115448240c72442eade6eaf40e8dc0be95bc8412590b49e3abf60eb25f8ebf5e3b6f21bff0743bef650ff6a73346253cf15f4e70c9d933ac33931f72e8198851f74279b7a4f1fecbc41040ed74239a6fc4c258400ed7dfa7856c9549fb3815be81187c217a8b22d4867c972c3435b9d39fe203b6fef61f03adab02330e8de50ed208cc3839c94906ff5358f6020df1e7fcc411fc3fb86cac6f2e1b2bfd803f786ce6df3c36fb56eafe9f80ecc1d699b4e3e138424af1785cf346e5b9044ba19406f88e1d9425472ffc51a774c8d1e3adb9bcd3ed19d4fd85a223148a5db586ee557856955909926c51a9fde9e59fb246b95c67b2c8014d2212905bd660af346113488950f5b71482e981265d544e3a7f4440717bf5c172b03dd75a8ef79159a6e09bbafd80a476ea27bc6b87dd6c301e5075173b1a5cdf0036aa53d7d8139ef0e6184baa7a2cc6b24ef1d448661a4063839e959749a45038c93c92e3dfca92950b6e54bd1cdf6e78dcb46afe54aaaa04dc1de801fdff877318c3da8118c806c27f43f6c1075a526d7d33dbd4f21f82409d8216a6b7ccb9dddcbe050e8d2d39c044bf2144ff6f808506af87fbffaad5195c599d8fff19f82927e5008c785980a4204672090fe7157e68214732db1623b993a3ce7f16e3099d477d0c1117fc7b6ca732d8ce3e3ad711ce3b42707f0bf66c0a57fc8f803d43027bde09d80306c8e93aff3d20e737dbe40067d7df83348fed5f6615b3290d25d7050f4e0ba96d3471926b4cb470c64ebeb4ae3d7758d7fe23f32bb3b2f7d68c11e644632f0121891403122f14af5b8003328c0ea24f185843aeec80e40203c5e46b61fb880e54d43d4552ddba3294a093f7e42cfecaa3fbfe04ad4c1b046769c094ff8bb13418cbd907a7140290f53bc6d22d38b33f0229bb977addd334c7fb0f08cacaf077d83e73b0ff7314a44f28c8bb6b14642de46cc2e53f44419aae32371a14a475be01df147ef531db266709d5ef705b99bc730df3f2fe00f3ba1bc97987800bb091d405a170bc23e042b40570c16c88f0678de47f0dbde589176f07e0781ab530a390dc5efeeb58aeaffdff7f21b3e8c3f901c7bf846725ef59f23d22381df4c4f19ebea3b40c4a088a751aac25dc1a2ce59b909ae32f58a1f4d3aafc3416f4df81354da1f60d6bf713d08731cc49d8d7ef4d1bfd82f6493f0c9e879f5bd6165ed49805ff0f802c4ecf903ddbe2bf0ab2385c3de19fb344b7d30ff807208bd5d7d5adb74116397b92b2314da0aefa2f558588169cd2d715eabe7e9437b3aa9def59d5f33fdfd711de9bfad7438a9415ca679956ed0f6518da2258da5627fbc724ebd2cbc52a6e45368ce24004efa6da3e71ef29ad2ad551a99b5af35043de5ef54eff6aadf0c02a858e5e36c8ce46b3ebc0d71dc82ff6b8a23774111d7d3d61793ed3133bf4819432f4e4669be2eb20a77a2339c833c4ce816b47ccd934cb58762cff3dae7bea2c00127060cd035ee702c7e58c0861fa00d5ac8463e5fbac2b3c71828ed1d9bc1b886fea2dcd3300379b2167786eb13f84652269549445a43c569d3bd60eefcda05cef0c223ec8b3d7be4c02c92ecb22a007096cfd5009172e503f77cb064995d5bbbd7b393960f9f072dc5eb108cbff06573d629f04c9d77bccaeab755d1345ace0b60ae81c9a55ba53e5d498b976388ad42ed305eab15287fa55f4e142cf0d59b9c9e9aeea6157ab1cb8dfcedc6f44278b6e13de08951d753f7f91ff36df897bd9350b81cad7a92ae76d6dbe48594010b36df16815f1b7bd2fa31c9de2d229ed2abbacd05aef7938c83aa2db8222d141467e216e1bc973d4dca6f15dda71eefda09ae15aab19785dd6d0513eb3ae98c8b93e3792e2f9c72fe08fcea04b06b983fccb0f7285d8db59a52d58fd80219f3a337ea54625f95424a7c426d75d2035fb73c48e635027a86a8439b70283c68783b66b69363fb20b648c62308335aeb9a717f67187b397744b7fb46f5cba3414defb8c6e6aa24fc9877592c4f162be78cc9500e19d400a867fac33f104e1a5f3e96ba6dfae7198f1835ec2e51a219296097a04b05086d62ac990946166c829d77f65ca0262e8240418999a2b1ce527946f3ea1ce7766f86f2ef1843a54e11c715df80b568297fcb782793401bc0605f472fc0e3e3733e77ce115ecb8333b7b2e2dc592ce9dc161c5f4c9076800dd83774b4a3a5b55e60846e9841ca9b2c14ec219dbd4eb0540790fb78ea587412c5bc92bd5d43ec337dd9cd34269ee2c92eae0debf5ae2a257f3bead2e9783d6e1f09efc18eee8c50800874031fe7a0d55eb4c0abff73a61622448483154d302d960f0dc0d47a074400756a18257e0b632eef60580be01f051549fdeadca35950486d9da2c751382ac2af78d9f24872bdef49094e433baeb050edfac12ce5626806289824385c4e0c50a67115edd1f064d4d55e9c1744c5b77ccd36f923152b17bebafa48943dc4bb6b82523f52e3c1ce839d800af6bf9ccd133020478a25d90453830c2d28316f44fda6a2727ff5c3fbcfb547e8d516650f2afa7aef5375357fdc5d4f5ff4b5337a8bad950dc7b6bec79345d49fdf228988c4242cd1323ff19a756668a139a898795c2418a39b939a5e7a92bdaad2c9724136dbedd4c9d3304e0061bc237a940823c4fb443a29bf545f7a8aa9fb136594f3ecb01ea3d3c902ff4f2fdf6cb02b32b3d14bee8ed5511e17f1ed5db12e97f7c5899ae30efdcdcc78fa62429c6baab37a36ed9b65837a42fc90c9d5b5fb2feab2f99aa3357d187323c32754d1d31960401fc125bf9478d66c239a5b5c665cd7afaec8673348e3b95589e6eeb6f17ba4f7a10fc2e44e3147c1d4b7197109e9ed226ce54ec9079079d86d0abb8351dabb89b38dbeabfda4d33eea64a23a9e955e564fcdfea265ff88ff31da276cc76c7a81387098c4e7b7e6c81432e272a87aa46ec3743c9c3e10749586bd688bf7db6910c63be00499d022ac83687e456f6e67807398e459f1d73e1863820b576a06fdc72864aa9a1eff4210ae0ea56e85c20ca960c27ae321b132498479eaab9ccf0e93d9f3ef2698544597a133fc2c59777a1dcbaa4b5a9bd6416a3fd182bfc00d7b37ba4dfea63c7bff7c96c1c7d73474cec299b81739a1a9f9c3d4ddeffee08a40ef89808e2609106cb31fe7e740038904b70774694542b82d5cdab7318388f2b6d777239aa3a3c4542c510cfea82e5bb7b0480bc992fc80bf4dc81424ae50e1a2fb9127bd8f037ac960893ff5ec4ef3ebea6336c66bba263e9a73c799cad542064d84b91597b2760b5dcd7e0a8ddd5e2cb02e1448a7188748080e2fcbbbca6e86b3f02df96572962c7aa42167ba5a22244b79d69fde93dbe70ca122bc11b96e3dc94794211ef47e5f882be961450680a28bd1844b7bb9d4ffb43c006bb2394085edb79ec385dbdf3f85444f9e6fd7c3a18f3fdd19813c08b7cff118c7fedf9edfbf974b3c697d747a85e651ff8c09997e0f4f6fd7c3accf0e5397a5e40c4a577a2643ea2c001da82a431697d9fd7468154556781aa1d65be6908d4d8e0f9c64db4db77845370664421db9f635e450bda21fd156d2d62b0c4618bb2f290eb712f8ac8d1a38b89d79164a4fa98272f165e6688da278dd4b4aa2086997c2145ee6ebd70224758460b9408eece37f88c3c65e99bad7fd8fcb6341c0ba28034b1995409a5834910b412b41fb3270e82c18381a6ff1b70c97d5719da478f64c69d9861c274e6958479813843418eeb1cd9059f5cb87d4a8d3de2b49df586ce062b2c95eeba463b4159e176b7a525a1abbbcdf696f4c50ad6f765ac9ff193fd826e8e092f37d86180a5abc722c7a05a95578503f6121b5ab167a0cad40a79ce443d5214d3ae12dc9189e74daec6fa78c3eb349e43838d8e3fb99d5cfd85790be9562cdeda141a09e647627e68e4293fd4795e8c29067c8784f3304201f8360b1c4c19559033eccde18891f5b55662ee284b9a59f3949c8034773c3d419022784b34fbda54b2e04deca0f03fbaa1ab5bda16eec7e4c865253ce13e1458829548c4a9162e9d1e61b42f680bf0185945b9714d70c4bb5892adcbfb3d229ea0add35d23a5a7089865f7fec698d24a72ff30a67791aca17d03abc8389029c9aab5cc4115f1865c387c74c6424630bdc447cbf4d745fb7cd05cfdd3c177fe6ef03da19ecdcea7c7ab27d48bd98786968240674ca4ee6d6d98014a8012f1974200049c5747db5c3cb150317e7a75f3b99816b060b52e8fe58db21bc5d4f4cb353684a4f7c6a0c80c40fea85ec6cc7b38e3f2954cf3e899e3d84fd55aa63754d16463e75b5bf1e1aa2ca3ab27cd2880efb4e6a90b45080649f5ba0244fcf240e6a1f4cc71dec997d2bcd97c4a3e5137442d25030c2e5f942e2b924fadbabd1a2e6eeb0de66ed35abc4cd5e5f6aa591380805fb8f7479cf12e00354a4d4a1c75bf260c14ff5efafb2b9187d88ce318e79691f6eae122edd593327024d56226da409cc887b31d850bb5268361330a476a31e4da3b4adbf1bc1974b2ae68be2c2a4eecd5d9c2971a5651b2642a2b4c6f9a21a1a55e726379f9cd4e36efab0c60a49f59629ae612bf0da07baeccd15306459dce1ce2d1bf09e44e65f6cdd1154c89f67a14ff363530aad21c5dac004c58023440bff5b31982910e6bd559fd2608cbe22da649280083ebe74fb0b4a60ca63820eb3dd82f54f653f867b9807bcb7c7d30324293f6abe654ae381e84401777e62992d86f91a40329d43455134c4f5ef56cb09f34c8c21b83c296723beb34e15f23e40dde5d3d2238b2df2047a1e430eb894e599e3ee31665e6ea32bcfac6dc53d61501f8010549e711f10edc897c9e2d5bea3d1a4452873bdaec1da2bfc2d189e3c725b286de2f1bad6b8b1b32554d25c249213f3d98926f483d33a37b33b290b43bb6c1579489303039b8029b436e956ea52f7a47b92926266f016c1d10f2347feb6459f914de7d88030df98831638588e3578c11ce94ec0b18eda858e79b3e6693f9ee9b0a4dd7ce104e9941a1a5a5dad22e32acfd1c71f402f527ea2dcc6b7ee7c49c6f5770be4aead35c8170cb7aa224ddbc140982e441d61139f9a04fcca8b894a2cd4d79f3631a3a73a4f1b09f77d86207a877084e9fd39516a4bb730ccbb38d79f9cb6ea89676de62781d7667da07a9722d1edcabf3520006fb349797345d2da9b05b0a9fa4e243815533ee136fb3b3494dd4ab5acf32b3879e3676f693680409fad69c1e79cb392a526b68b2af9670b874f522179d2f24f19c99bfec440e1dd16777c590e9acda8653da5ef370ed6e5fd8d1a6234bc5e070fb9ae6a544d492c77673fbc2ae708e0926697269f6783e504485bec7101068b141b9e72c47822d5fb1c315557968a192e553fa357da1ceca0378eeeae11bdcba95d18a3488de9077b175e2d99ec884affaed8ac8ed27b15c0ab5116300974b4e69d2dabcda4a17d39b53c38f1b3d9415799413d28adbe72a5e303ec80b78bc20772374c296864bbdedc6481de2dfef95562203a0d8427f08704b762821e005ab8e3e02c0c9f589b25222fb702284efe70b5aa6d5e8bab468d9f5aa80238500b354f60d6a4675cf9e2a57eb1b394eb5182dd8b956e6342544c9dc0dfd557728fe225c43174aa98eea95f51fb788bdbf79a6c3cf27bd97af9f6939efe48e3c65edba95b4106fabc88a423bfefe702b8a8e41699e4f3fdb33aaae76b8b78d7dad699df4d6e2bc6c767086b077816d0f3597a535ef17252e8f06af48dfe8a11392d72a27a7167ba82d99ed0be765ca1b049b42c3c483b58d8f3911562c991d885abb4ce8063120f93d8846a0ba9f8c38886151e7b86b7b5584bcc29cfd9c52dfb179e1e6a4394d5962622ce7f1794f3847f5dbedf5a7ad82e43da4c8e97f31d60f70845533ce4524eb2e87043896e52d3fcaba8669c7c8df8b6d4dc12b9b8257c9537af0f044f5aa67bdd39a719114ad50eaad6dc13c71e0b103529a74507df230e5934d7d125056bd585ff8bf1db1797a5658e6e7366ce6492b36e082218444bd95ece8a33ac0f8bcbcc768b96c6b9ce578e1a45a696c3368ddce5956d8d6c56bc62ce872c9f73865b5032e7acc499004da49e718c3701a4978435286c01714e5df8ca2a93a15911ef9a38de00a6fae0e110f09d2ef366c3fd69b8849114b47133a03d6ef6daf6844cbc4e575430a6751992fecea29640153ecc1a320c29d9b68ae704db7ea86b54549466a45c5b5a26d385405ead2d2266c44ed6f927664bf430bd48229db14f733993d58529c37e1e39c40bdf41994feb7db866759c4009d2414c038f9252c2b95c05071ea4b8faa8cd11b7a86cca743305d85c2bd7da13e588fec5d6a8df17fe9b60edd46d776e95a7e6eef3d460cf4d9c1d8b668251b90f51a819226c7d43bc33b109d0c92d72ed516c3d6c99153830b4d1c3808bc92e474a24e076fe0ea809f6bac73523183e547d611199be85027d21b93d243e940dd4b2ab642773a287ca070708d8a629d65098332394ac3d822bc4bf5fe29a9231eb3f7dc971038d1a3e6bed74f1c145c1bfa4c5ca857430407fd9493eac8d9ec3e23144a4ebaf7a2a416ef309e31d9d2d289bbb7b746bc3200e768507f40486701107b66655ebcde49730141cc461443d8e3a9142bfbdcde7ad4dc3c6ab8968c4adbde7c54018f42f5d96a81519818883087d0a60bd4db09a5a4f60994421d21028215aa477d5bc0a126f5b41ac2117e627bd8a7b4c819b2bb0b04087c4466c50402d3d3979ce51b5d40ac66e2b1769fba201025c97b020a5ba1eaa8d91260c2ac572ac57c140a6704b4c2268f80e47a0ceb7981822a21a10df5a9bc9380204d2447958325d25718355ed0f36ce44ee4da94bfa0bd5b4d656d015cf69a307cb586d800cc47598b0ed7b163102600d19e1e83a59dc1f90e6283dafa2970fc6f27a3222b9284e11f03d5da79ccbac2f29ba11614257fca5077da513aed6c46af313ef6121f73f6c03c875b4affeed50250f00096704c1c74e61205599738b879044eaa913c78e083a8dbeb03bed0d59b04125dbd6c577c04594f7cbec34be9673be24b1f184ace85d53ae948ea436309a33674b31d11c920eb8b05caf872d91a12562d7e555ba8d6b6a8275f00effb0e95dd7abd8b04e9a0c0b4756462de23075ebbdac622b6e8de20bed84b5dbc8b2f76aa4a37bea24e526ff973f7634ed4fd3397f46e85cc78ef946f5cc60eae24069551dff672b3b4f95baa0352bd9305003cfde2997cc45b3b6246940c82009c17e35eb865ca6ac434e045c22e891e00b4b0542d9999c1224ade37adb3fa50e405dec83645736ed7013ef9fea440e4dcba9ce1514875c5a4a6c5e2dc13e81889153997e43ad26432f851a58a35fe1398d14e08ce74a8ee7677bf50595f3823b9827ff75e24de61aa6ad82cff964c5b72804f8a466faf0ee7d803ff7244cfbb232e758897b5f7533d3c3545c87d7190872a3b42ec44d09afbe3f7f5a9967615ac0445f04d343f3118b4f591e9b20f22b9ca38d98a1487602dd7608b756639472bed0f2382c0788d3ce48fd16e6698225ceab19ce724b8224fe5ab3d627f970d44f32c4d238065e8e678fe0cf3b6b6078e9209defd711e90ec3a816dcf8fed4a91728266cda39cd0e6f439cd23091b5960348f6b27fbb7797c4ecfd6483678ae79c6406c928ab255107c6439f63943881ed1d17a8b672958af4d3fdb17fe2b75c09809b6d7f9e41071831243d4d17b319970d762f353385f71f38f36e5bb8a3cf12dc686c66f4fbc31d0ce481632a455dead6a7f337e258cdff5c6bcbfcbf685bb96f1b3fb7ad256cfe9e13aaeb5403b86edddcad6c3b56a1de5861d045b7a85f39e3921f623121d0e0ade668f1465ca00e91124772319427b920c4f51a2b9948aabd0651d11ae256d9825680aafeb02b9e66a48f57e1f2ff5f785537bc5e07c6caef0b4028ce84f390d6d7c6ec4f9e11e2b8d73784bc205618bc34984e8f3947db6fa37e54f6e375a413d2a20576772b731f807974ae213dc1b874006b0482cd745bc5c47a81dc580a1b1625a4172fb47ca1ce4bc7532a23040945b8fda1e26241c7189cbbd77cda538570726afce33132639477bfad62afb5c6b7979932871f2a49b595090bdd327baa89ed7af1caba59c4db4a1688f65011de7178708df58dc9123f0901c2a124ad52ecc06c23bca8a9d6450dcb3f7901cbaea8504eaf38c3a80cdd2f064f0501b2009b72841b086bae5afe71446fa5ab12f1b4749e125998dc439bf42a5e79c91acae93d7e9c34d6483086fcd04c2873071e36ecffc1c682afdee0284d046353a2f574fcef45505f10cfd226d42abf5ff8fb837eb4e9c57be873f10acc53c5d4a42188726342184903b32618c3160667ffa77a976c9d884eee739e7bcfff5bbe934b62ccb1a6bd8b56b0937c22ae6040407533c1863d35fcb7ac48c6d479d72f4af2cb70a83fd1a736238fc3e61b4bfd89437382f7968c72450c394f351bbbd3b32c2b569902fc569c9b667cc46653ab3eecbab7fa9c49c9708a6564f31a70a2be2f7ef789912af97753c19d4d90048bfd577f04575202b777ffe41a1663077c221d1cf195d6ee849fec9158dd31591f3662834197c3d792015e044fde949bba694d9d0a8d380f587b4333b728823f1adc8f8442bce9787229de8dd16771173355729c8c9f5797f37eff325a54428d2eb7cacb91addaf9235e72ced206070f82b5d4fd6194584e869fed5c2afc052acc6e08b2a17da20861a08756e53975e05cab98c6f3ee6cb1c767ffc18fb46a2b6be3c19855c093169ddacb372914c3766349ca7432ebd248fb9768ad574cb598c7869d0e426f72f496ae23a8d8ef2ea4fa9a331e3869f9a671a33cc28a5644248e0bf9b79e70a45899ef3d7a4871c38c22e85611c23cdb42c3257c89962da3f4a4b5e379c3079b05a5a92d8023da28fb28a4706739cf5350467f44f127cd6d654c067e61a0e87616999c09d997df5c8f9375680a5b4179c47c54e80cd0eca5a6826c8304a9ac493ac99fc9a09fd8d5fc4e7e19464e5ca4409282a46d4839acb2a3367e269b2489c615787f7861c73cf1ed8db1ef2ca1c3dc4dac252246779bc7f2cf53d7d6129bbc213ced4e4885f8ffcfc700eadd44b7e9183ac2794a736ec02b08cc394dc1b690431ba2bf2c6446d9fe4aafd1319662e92110103045159ab377ff8a00ef96f5a6242ba10b4a2ab6ffb8b80ad1be69a5d82b9f51ae7e69f55a6725871ea482ffac398c0219e6e8553d7d11ff7487aa0d33c99ae583d856a59a7593c9741fd5afb44fcf6d472c5085f0ed21fb2f6427ab92b667b55f2a4153fc84470779c4bffe5386bd3565774c6473bca638c84f2e53240b83f2132ff3c56ca5347b3efb9bf98fee8ab969a0a2c240ec56b4d9abea6cdb242f095a23c43f51e9f308727848b9e44b261090d9690aae8bac35b4c9561d225c05ed146b36ca3af1233f88c6f440647f40970fbcbfdd747bcf388f3387dac4f188038ca0fc4f66bafa82b26159c8e09af9ed9d70a725ed496d567f4b6b616eafccc9c5fe3e4c7c8938d6d621e9d896120132ea20fa143b924d493eefa50b57f423eca2b3e877b62f872b51f7ee59520034a82d3e0ff6ad17f496da60f29435304a4b27b8cd8f750341bad227af75e0936aec10936c591efa576e11d65e0572f08522ba11edd6066c4434477dfedf5fd01f5cf097ced3efb25b87e73c54e7e2a068f0e3ace54fc980a64fbdf9a77a593899933c07fb9d74a4a5cfa1c43ede97299e50b550e81ceb4d9936788af49a38f9bf63570f91ca95413295c4979b2554c7fe7f031fa48853a9bfa2ded1a3f366a55c8a2b197ab2adc72a628112e0e42ee3353742ca6efe6f50990a1cc01321bc69fb428f214baa776036c554dc8f3d32da7f9dd23126638cc6bd129c8057e7e6cf845eb1251754c832defb9014b2530c04e37d4448755a73f24c1b2780097622fc54e1aeda4bd97db469ba072cd26207311da3463c7c9745fa5b1f965fa6128d44348b66cfd5dc73700de7a20e4efa0d5849d7bf30be708995f0bf88832ca4f8ac4444a318cbeaa437d1aec9b88db5dd73a4987b84946f5bc163dcc02b39a9e2e2d389a612ed9a6a33e1a3566e4c3dffe0aaef259c827ce6a2b936d15211faec7dcdfe506a3b8f7ed64a68c12d6ec1213f9e47c9d9f0a076644b89a484883fb9a625803988fc67320356c56ec2d858d4e2032ad91e46bc2495d49be1cddfc26c0ca9cb6d869de116559339d1b4b512b763253d5ae3f805d06c5b863bf51b877d6a24696eb59de15ed2e484182a893ac43a09d12f990b387f416f83b30bf1da1de0aec4666f44fb14a0346d2f0b3b9d7132e8962cf82645ea887b91a7344dd70ee55d85fd32c233d5c8d88ef9ca85d0dd9db5de924db9623d43bf0ac61358d5b99f34225d1ffa932d7e0026291662cdc50d6d283283ea8e44616fceb0c30fbd9cd0c78ee510c9cbece3923bf8c85fa14a939e6bed2689386e31c25bbc31cd1fbdc6008304fb65e87f300414465968a13fe2e011f0fdb155ef9a7528764e03db1f08821caa9922cd9ad0147491392ccb059cc76f085b0eefaa8545a8c29d5ad3d8ca60d267ef22ed3ab4677af038135bcbdbf07a1d030a6eed215bd2e77d2c270856ad7a56ceddcd0c22453b76d6fc557f0e5395072855ac331f811f669a3de2ff4edf7f64c9fba42179c6abd9dfebc1a776a1d9f599205ea2cd5f9d9869ed901d144fdeb0f7d09d9a2b397a45beab9ca961b98d7f484536aabf4c8b6b6e81dd9cc682b1c3a5c7c80f199709b23e474c06c6a4648df6c1338d86cfa4d82112b4fd91b27c85893f33c5bf004405641da1b60fa1f01c199145b53bcad6ac83a084366588116445a73f343d12bc9724c77579285207059aa86bce018f90af8bacbf2cf87d0be51bcef0a4ccd71f2e379fd0c47a616eab902f38319a4a7534290a21e9b296774cebd265a2f8dadb56d89dc16df2cd50d002898b167e33319120df755a614493a03f27e27d4c56c901c90fb6e0c9953bd26c6bd01fce61fd7843457ab9fb9912d368515cfd43ab2ce85cc7f53ed1cdb6ff32279bd6eb42d107412e712be00af0ee67c0ace53dc98e613e6bf129ff4cb614cd78fec3e0761a73aca55b97d0dc33d80992524060e6b2567251ce1912d0cf24d421bf5b9830b64c6217a4c8c1516da96705b9710077e4280e4ec5cbf72713b9813305db04190c94966103d43b6649f9a841e7f62e8538d61c67cb9cb792e9884467d7732a5f86a7737b6358bde862bae10910de58a76858ad5790c3570c5d6a66b728ca170393ef9403617fd7419d3042a65bad6d9cbfa16ca47e5f646738b23a4763b18b9383518c01accf6c88062f91460b9189ef137c9c2722037f23426a6f98f32a832f38e181360efc9b567af034e58fd8bc9b1d918b322cea8696341e2e359e5729058d08629053e76227954e9aba6745fb8df28ac9fe6af57952120d0cf2c7e4b8836b47ba408f3cee0c091e61c78be4b355d85b231c7febe43b68aa93fd75845f33d931f5e8d984510d7c525c6a097287a23906d5e7e67be712ad1f277ceb23cb73ae044a86f84b95a89a2065a8b2299d2f55e32b8b2703b7ccb0894b3de3a732392ab48d382f53337d459ae23009c83ec8d406e23cc843075636433cab9bb485b90cec0ec224984fb1101cefe158e2b46ad1af5d3bb95931d103627749b5aa8eeb2974ff2f8bd5dffbbb22b5c0b8ddc52357042bad78745bf5ed6a9175974e28a44484b010d9412163284df5e046a20af6e01760edf74ac21cb697d25519a6c5de0a891fe9603680b5fb4bfbfdb5041b6f090bd473d93c7bd7720730f2c29eaf78accf26e8a6febc8f9bea00a81775ffd0e8fe9abe629574c9e57e36b6717c0f97e4ab10838eeb991ea58d1db55cdcfeed3e6c0bd82bf1f21fd55013c686e8e2f17ece51340a8b7dc3d4eccbeaf63e7ff741896b43447a058758e20597eb3d814a6341d9fd69219f6e9555f850912de7be066744f149dac7ed35b3ece05c47bcd91ff65213766c07aec235ed320c2a5c611bbd8e85075b8c2417f963686936130ce1e5dfa1b1dbd44c739e840e7e93a0ba6f99f64a83dd14756ad1590c3b3066cfffd26f5d6b86206e7197ba8aaf052f58b60ffa93649958a64a9d949a1153e40b0c30e068e0a417dda572dbca0579b43262e368c6aedfec275d06c8c72752c7fbfa418a533a0f3df48d84f023a862027440436ccc916c83ad7af33a4814f5875d40b983cdd5695e5ebbed0af4da20e5c2abc6f89237aa6526ab4b765182e50bd50cf74983892f4e31adbe6184436d31a03c971113ea169832f36e1a0c2f1a1ac2093cce229a507dbc8da9a230bd0d5d312fd563e49a846e2a2493275f21fc2a99843c95c834830dd985faa224f5604f3d95089ef9ff6b0fd470c1f7e21f2ef869e477c2e84d9e244d5fcc529d1be9e9045804a9ba502147a48768cb3ac428cdb676b18d1c5986b78a62574d6eb3564b62d0a11a2da8965078d0081c1f468843c55930b4b5078cc563de14fac643ea6a07791e43b71f68112cbbd0ca2e4ef69e86d847e2d658bcfe86223d3f4923e44683ab9dca77b858c2e5dfa4c84124d63d313aa24add00d23f9f48c53b82047dc3cf8daa70564a66bc8a67da0966dc8dcfa58bc28fda57ea71cd93badec13811dfe56e6530bba6807ba907d60c9978328fdb5355d65211cd54cc9e0a44ab24b5d03cd74eaf39cb3ef9c73dc3bfd761a120911d8d257228bc1515ae9beb8e3eb3b894ecb59c67df6254d2b9eed1fc4ef2589f5911f190d9ec6a41fa8506139c00b373d4b34cdea08ecb798963c096658a80bcd397f1ed9c30f7d0642ae819b9932758deb3fb093b14fcacd4408f2f6ab8705d8528f384cdd031faafb01c20bb55014e4f2b2a54d5afdbdf80e51f0a74f58ddce9f770bd3edfe37f66d1acb938c8a9d147f4911f05012f45d6ca5358a9570d81fb7c3f13765416e660e2c8bb50e55e23b9808f5ba3f432a2d9fe1aa5db23ba751bd0a8fa4947b3586f9d53b367b556f633d0013a1c0cd153391aca5945eb00dad09b797531810c29fe37aa6851d8762eecc5bb42f59513b02f604dd6e5a6a74eeb047ab96b2dc6d706961ffdf84770b07aa0ac9665642dd45526e268dbb75eb9a5a30ec25ef88de1b3135004f51c6129e5538b8bf8edf1f74aea892b224367f2a577941b960f9f772813940fb159553a9346a66101f784ad4b3d2fd9c2c76625cc677b5f8bb56a0420f8c00ef167435d7b90a80e036b15a31fb3939bf54328273f8a6a7fefb7500eddbd4599689f4699a77c417916ebc0bdeb4ad3988a92881fc6b8c529e920521d98996f5336186504fad06eb8a8e50bf73f607d3b49a9e02e2648447107af951832c5bc5843936d03745b0ddbb55027dcc30d7d5b9b30d3ae99a1afc920586640c29a07f5efeb11622e8bfa9056c6c41a63d390c46e96fedd1fbce0ef3785c6ab123a16506cf793633c17d7293b803e8402f7f9f00f317fa13367f4e805e4b2f0bc89e6aaa8343cf8fe5bf1e707d960bfab22fb8aec68b1780159b77179dd75e33bb5680e2ece98aee17dfa86d93d50b145fbdd070eeef16d7adff788dbef2d2abfd7de9f10a0dffa1d873be277a1575f452494d82bacadbac264de9d6e02a838a134f97b20eebf69e13432841d032018a6f254e47fcddd1d12288b20365d61315c6ff626fedbdac160cd5614f8b537d809b9ed9cc873944a3e3fa75c7af2d346c1a450e125b433470b6e4a9d16f05ccd281cda8d98a08b0f3b2065913e957df60ce1a32ee6b43b2f09e65e115dbbb8d0caf4309a822c16a55246db4f01c7f3f3cfaab7cc9f4c17cb94681bdfa730e140ec7f9842726003ac22c5ba01cf7c4144bbc427cb975947875ce49bfda0630d957f76097e1a0e4e4d5fdfc50f458c16c31d0a2e2b7134e844072d0757f09025573d0684fa6c043709fd9ef26dde7b86154d21cc6f669c8ccecf51dc0adf12abb796c302c433b3cf518894d7d7281ba7063533c3ef4cc5ea9fe53d92e02c991b4ffa7b2ad2aaac826cd63ddacbfcddbb84e30dcf5db2c24a57bd0201d247c2ba9d38a1c4904a4c2741ef1741e613a8f309d6d994751a38363c479518655d0a8f82cb68e62be5e070dd9a4c18c32eb3decc4eacc8e659b296efb0ea337b684af0da0bdab77232612dc93ce7e74f610c94a06af64a7c3fcffd891ff3b6e83276716e3746a0ca0d8c8031a302be17a8baeeb88a6d0e3853cec4324998489f83065387ec8d9934f5072e600b5e8e5ef1f8fecfee191321c456beafcd915f236f9eb7335cd09ae07ec7a4e3f39f9fb93e7633b159d646eceac53f1b3c0cc736566f1af13786580b42cd632e4d8a810bebb2196b8c3f49db583dee295e25276d893be040e46f066e0e42980f2bbc2fed36af21c71491cb1f72d4df5bd8dac728ed97a4027ca13acc95ced31fa031d5f8d5158d5ebc3e4e6cb59963b0a6fa45734649963e5fe26df800b7c1ae7ec118d8a73bca4eb100bcef7c582da07de47a2f2469731f1e6b2f487da9a04f8f98affa9b6a9e835b4c704098b152080014ef9cb058a91971109cf0a3959fbe53aa90cb31a3652a77841f6623f533c6873f17a00f0f5124d77ca1769538da48aef6dedf3067291fbcc80328f81123e668a7bb6f625a34a432ebe8821f89cd3c59d92adbd81b4a81c9d3a9709e3551d60f4982cfa6eddde6fd8fb17c4f7aeea64fcfe0a60baed2d3d0d7d3664635a3197f1b59772ec6bcf69ce0d41b43a6759e11bb91c3a93f43d279474f6b7265dc4dc20e2de2b58c24a22c2e690de05f3b07a2b58557d8ae8d591dce1688526eecb88d3532c8849477d373870844c86c735637399a31283a5ded7402e6ce506ffe985dfd7453887c361b05c205c15209860c1db29fe42241f345af080555bcce80cf1ba5f60ce1c7b1db1adad5607847b84885a143a80eef8059d9e79930abbd5ec11cb7366ec353a14ac88c3cf48b764d50bf8719ee67d9f0024aa215728b1942197e0d93408a822559065c8a073596972139ada1c227bc4ec7d1df9f2a1a941b138c22b3dc4a0f5e72d9dff12ba222b074482d54f6c6aa4bd4a5528aad4de7092484d98247ab6e5db9ab6097ad5517bd14d5db6d8aea639430ba588252cab295845c1ada4815305191cae37a88705eed34b6d6f5f6a3a89996be90dd7d53cc96c9f356b766a837d25be2d08687aeb74bd4c1e760bd036afb475d56bc8a3679e714a184698beadff59dbf899c29c3d1501523cd7361936c82663c6222c06976964a71ee84efac11034aee403a8ca23638d222c2a77b1c5a6c5e0d003e5c715931ac737f0a8179b9aad5825be726ad20898d37293d17c2b9bcc563b58bf997da926f77f7f216fc1769aad9b1a06bc0d5f5836351b2c83fbefb34be6b80168aa3a4856cc44882961b69cb88d037763e711f2e52de442d9be678afef631fb9a166212104f93ab309f6d2dabf52f8aa91d617862206fb4bb5bc8eadf4cff52907f28876e3c1048de4324d0173196fdc3101e5921b22b34871e144b59e03ead37294ba86ae9c6fd3ee55d62b8329dd7db43eaf3c960d86db3f7998473de7997b4f3ba816c44365f962316cf83d5195184e7261dd6fdf9a7198c50ede86cd80cba082aabc19ae9060bf68d41d89d84d4939a5d601c6a9e580e6149b4aea21598439d10ac16bfeb7be8f525981d8b9ff9b15008fdfb8a71edf26976b44016d832be439ac6fd232e97312c238e3123552f0999de72981f5f441cdf4222a90af254362416f64aeeb1517ce5e8454bb557f9bef0147181bd9214a6bab503b23c6c11fdd0abc684859898217d2def298eeb850bf5b38560497aad21615d7211a8754a145a923e13e53115791fe250fa11ca0c6f8b5d1d7de6bfeec81c8daf75f8e6ba31dc6bbd656c7eeb5f01c579b4e1677fbd90af4efd3ab300518f710eae2981877ef783ec7533a51f93afd44211f2e0b59de9951d29a70a8198af258ab57c49df7484a65df395420aaef70e99072bd9070ff4a0a3e05766fd37eb5374c4f6d75caee38e99c72b59e1f49b079ac09d1ac5b056463c8f41ae7446440c85d14cdd353e172cd60fe86ec5dc815a7c0ae6961ece51f330da329c29265d69c8870c0b41ca932b78cdea5f19d968d535f3bb22ab24e052caef6765ffab9f3d5ef92cfd2d0e32350666ae63428dcc9453d9c23da665ef3ba064e42953a79c452a56c9a363d187896d0142b316c588dc90bdc44f8933b3a64e1c9e5240c92ce1cbf929312af804ed7add127fbbea32df2cedc8f105f8d13c08cccda836311d40288052a56c294d21be664b72de7efdadae7b0b4d57e405096ceed64d19abd38b6c74bb2ecd82aaa822eac0b952411d9fa9f6ddbed96eb5eb3ab4870d8be3565ef7b15bf5890e78afcbe9ea6bff7bf5b40f6b5848b8b7e21f3d5f8e39febf0f80ae7396d8526b7cec362877c55b151be3283f10ce2fa4fb735bd722463c4f8a5c2732338df08231b3b327f4f30eef741a99e74399543014ce2f3e390affd53b5c0e99601d7e90c38a1e7a3ead80300564ca71bac8161bb59a48b33abafd0ddd49415c28f0cd1cdfbcfd6dfaf63238ca95c61e14c26cde3f5042349d9367b67c2e06f999d0c744e94dd9e5d6925256fb5204562a60b53273bac5b2d060b1be89db99732e96766b602d737566e501e6cc1f5a66cede2fd8fbac65ae0fa0e85fb17f13164d5592761e6e3955df920b04c49fe4541265ef840c9b230ea54a14dd826dc2850b44b600345d5d90a75cc6220c43b17e2a5256c009f6dddec16b23dfebd16b27172858a4a1338687c296e2a9be73f8fbb425cf303351c104dc0874fe9aa8ea406ba25fe0c0e439583359bb357b3160cabd1227cc299e3525e4af46fc217bf69b1c5a1db6677592d7d0b813678d6eb52ba8c9ad3299122757fb28d097ba39da763f5ac48c545171f57ee9568e791f72fc740e3422ea0ccbcc8f0790081b6d7288c85f65f0e4f75acb6caa2e470016e87473e77028b89e755c8336795980262623840d64653c0b2ef8833817511dcef69b91c2e6da1ed776b886d4e07d3a196601ed2f2a94276c347daa75d6b297eb381d87d95d5ebdb3af2d755a0e848639fd2b2ded7463806b7a6b8e33da5ff83cd542139ce9b548e79eee1eeb08e84166d0de0afa616f4fe8b99735e6ad4f5da57fe1bde8b01e4c7dea658b32414126975de1bcd4aa3f2a26560ae28350edf94efe2f6f188ab97ccd3be21d025a191f737ea75762a07b4b4e62b4c7b1f505afd23ccabcd8e34aab20aa9d904887ea5efe501dfa72880ffa9a93e2aece0826bf57ade98dc65ba62a580c9bc8d1a0c90afc8716694a420e815ed3b89a7a16df99d13a3ae97ef2297259298260f9dfb70fa4472117c9db27cd28d0aa090abce3039407ee062ea27ef12f2ae3fcbef2302f809d414e2fb3e4ae3fe60599fae5cdd3bffcefd48f6552d0154ed476ae5b5f8d8007ee9e4087aed98a2cec52bb55f8d4bef6acfc93a5bed3902b10280e8f00961c1e4ce7bcfab83a5ae02f5bb79c30d528f248bd6207996353a8107dc0ec0c83f09ec8c27abb0c62c54921560662465bd0aba8623769c07ee92e90862501cf0064b924848d2ec9063ec5bd4420ce66c16a1ced61a65d3ea4caaba3b2e57355261e18091dcad05a6b39abfd622e01a3460f7d55f015e50ff3d240ee61fc75d765bc940580fa47fecb3c743eff1b1b8f7dd77c6e6166bccd3acdeffc925c6ca5e68fd84332598d3b965a12478675cab7c857d30f579cd70643312e61ebd47574a903964ee1dadf3167d25e9f585ca0d3525786c95d879321e0fca3f37a23316d48433572af2bd43ba3519367ac55a0fac16643e2030b55b97b8dda457ac09b894ad0ed2f9713db8ce1af61d3caac029fc8c0e7ec557713b17e47ed3a9d155f0d9c2ef56f1c44c8f7fc51c090e63ef253a17c64bd9cfa987bd56fc2b5c7658e6f87ebdb69946106d822cddc429e97ecf3fe34b36523eb4e3e6b491cb181b8d5cecce144b3dab457a8e23f5f2ebaa416319b6761af5c7060ecb19c9d154cffdc3f70fa937bd381ca03c7f5053844322be6a74e722654f4313b29eccd9619357723eba41d17e573661182a56c8194bfdfa276ceaed915e2893c696fa416a70a25e755fa070b268f729123974af879a2b4a97aa361c4fde3ae52253bb17394c7dadda53dffc47e505a650c763904de2c00f92e3a24f7317e9b86bc49b5d4a48b0f34c53e2bdc47d5abed935638f0e3347b48367374dcbc436f1c62c6f41a41fb0ff4c68c5d1fd186fa249af0804c0ac8ded02b8060cd932b0f5bf591a7f16261a9431a39066955738c8f58703f80937a5aa302ba916c41b6bf9a0b1e4bfff037132dc9ea1579dea63ed0a631aeecd8898bb4e164b01d0835648fcebd1cc6fcc5ba80e8a8edd66e6457fc3bc56c4c5f322b604133dea9c9e8fea85fe604c957a1dc602372ab3530572e613209f69883559c3a1310c57ea51609751a16c987d1241daf73e623a85ee45c0fd45f0d5616b665d042ef184bba27da08d5921150c1ee05bcd393d7ffb60541d202fbb9077ed711dc31aa2637fcb23f7cef924fd9700f647e9ddf4ebdef25fb8570b3ed70d38da189ef88646f29746f9b85b9e4f8b47ac4d79ea5ac80c08fce5eaeb2bef11bc33dc1d93c95bccbf90e0ff716ef0e3921b60e76cfe825b3c12df734459ee7ee352a2bbe7762d5205a2d3051e632a055d7f1e41a48d0d1191f7ca260c8b780af2ef1971d82cee6ff52a83a40ea2949ff297fef145f7f12f4e7b570fe57321757775441e99eccd5629b3d275b77761453a637d22fdd5d8c5b7abb0aa577f957fe175bef3681bd477cc588f62b2974a80bffa180c583b569fc7702d6e5c4f200e1a5b497ede6e4ae6df98abeb85730a7ea9503a6f463f6516c1e386823752edfedbda3e2deb32bdbee33887571f614f31725bb8cdd9c20cf95680fe29d3437ffb79a7c83e3b8b2928675195d0ae9de51bfad2a7f6394dab0cb276b8a521144b6d10ac81a3233684f46087c75cb217dd043857fd7573092c4ec6159f3cb3ce010c9d8fd8a4c9eaaebd5980ca045f0d5f106bad4012cd1d276b135bc9c6d7227aed349d75cb0bca6943000f6222644b50f0c1af8eb4cef5d75e7a8288415fec2595469785e6d407ef57f6970f2a626fe8ef87de795fa770db70f0e19b572a7276c29a2c04a0c30ff4367a70730557945eeffd46a9064dfb6357b159f1edd76f5e87fed6a7e0b0f6520ffd8b5cce43dbd37498fca4ea5dccacc6efd50e06a9af4362deafdeb7205fc73237dd8c0dc1c0558b98f8bde35d91382d33873d17f6811d59f8059983abee7d8424f73825efdbed29dc0b77b039ce5d0140a54512f90eab6b8160df243a19fca745e1111c9131f5ace8de3f9113d95763c3bc2ed964f8c6eafa693fbaf5948e4068e6d408d7099d581ef380505f3e35a060c27232b08ac1ee6c9224cf02cf31352287d193a22a4f3f475481904204a5f2669c09efe3ae8cedb1994fd0abca4930b79846bb2c172ea81c65b3d1c79776bd6c0d3495fe9043260b47e3107ea91bf9d198eaf8ea3fcbdf3fef0694eea579f23b75d661946906a013c633d9e1ccec1285e4e4df9bc9cabbc3eeed9a19ca34c265baef3472b80b34f8a5d72949466724ff4d267b94063b88973c9d4b9d1ee4e1b7545052c681643959f89f1e3f6922240aa80b327823c7720f745476cf9732d1c7e0761737c895370f88522374f4b8a1c075fa1e28ff34526bfd99d6744bd9910af1be0dc758e5813d5af3adacc387830b2bc475606e28bd1d5e564a64f6e2df3456974ca5ac401d54cc0578c40ff5f8a60e56f334d2be1605fd7cd4cb5c398e85e7bef3e25519aecf06de3f08174be65a6f0c8b6c17cd35c0ab7a0d25f99feea2d9131694fb656d8cfeaa05b98f0f1315cfa14f6d5923142a4eb3185112e587f8b2d589fe44aed3d90599591fab8567b305dfa685d4bf501c0848e502f0d0c45f1c1ec7eba40a433835fbb05e793af91d2eec9ba438a5305679f2c6b04a6819dbdeac0f3cc91d4b4ef0540a782c0a52a7d284a456247554ff05571912c1b8f6376ab8dbaa5614748c3a65d8d5269dc629069f5960cc3079bc3b03ce063ca411e3af114c1975f2609fcc942fc1493662a370451da1a4ea4fe9a368ef6731333601083c96950625ca0efe407624004680fbd15e4fb418029faca8da1df0ec2a59c17bc202d49ef160e29e8fb05d9dc8ff2c49edb0af8459297850e4e2a6edc604e080eb19035b4aebf21fa2af141dfe60337bd0411597e2c74a14d3524e01ddb30f3154353f1eae6ba875ea75422cb9b7ba88a3aaa4f61292a69429fe220aebfc95b3cfcd3d33de19cf52d1f1363586fca83a1e952e51c4f7d160940fc2406c8a8e85474f1f1df5466ba7928dc407171a21e12c3f08f53a92f2615ccde1c65bce6d91bfd3f9fbda44d70fec4a0a5928f711953b5975bd430a8c0cac7534613608966b9eedecec6659333cd31db4c5f71740a2d13aa4fbfdc3e94e34453f65be79c8b8006667990d98139327e67b34304ff7a47c8e84da7e8fedb1e3f48eef239d849669b629a776f8be36516315139b252e8a32c361811f077fa2b15a9c50e91560ee0ea571eaabe70124ac4191217d6d8750c6202f55946a8f90733277b5b4884f33a6964151a1647e876b679625ce51c4ef601a6dd1b2fc859af8eca3e608ecf9d14ea71cf170eb8e03c1e2d35fb096712601e627280a83b3913b9fb46355e33c54a5b739c3a08645e1f98c89a171f84ad61d192e052d4f21ac170d50b47f581ffb9c3249d57a84e194728616ce0f452a016eb7940678c8a149dfab88b608e3a215062c5b0527add98082b8060a8d11b1db045d42f0a4d2d7c3059549fe0d54321de09d5b3225de49d50fdcc524f304ef101d1cfba4b06163cdf5860abb7697712b24f5d5dd07a1d56504297170e0cc135be50a70ba26f7f5751e0a591f92dfae90a5ce13d7cb3dff8274159ddbd52f5ad3632895efb6d947361741061b668919fe11fddaead53809efa3a218455cfc15c5e99cceabfaeec65bbb16525eb19156c5350d78756e7541e0515c9e5806419f3e34de5ab52883a6583b2a91040934b1de9c3bcc8bce1e0df6b8b00f2fd618e7515640aa94fcacce23ccd39cfbee5d19dfbe8b970498fe58810326aaf97298fed4d559c0ba30e9989054ffd4c52584593d4bca6d4a83db6cbacccc27f7840a6bf11e76c7185db5e8d6802e3c66035b250ba1151d63d218cd572604d0a0c1c35bfc708b656beb2579bcc7e97662ee32cb1ba217d98ec93759f43b2454ffe7183610a71de5922e9018e9110789a7df50db1a5f5b6b32b101074b2a7c00dcdc83066421d3789494c8c902bf4eb26bfc259cda140129f7b3665c180942bdc055dcc18417284d25225e49f1836d3b788d55c372456bd834c6abd39d3bfc7e43b0f24470d793e671aff4da4134b6c3acecabde2d1de42084f8d550aa4f6c6c3ef6c01d8a28baffcca5d3b55109e6a67b983ec5d43dccd080d67286a4fa88ae282718c2d3bcb90aa36d26a3446925d246117912c41ee728a2b69477cfccefe306785e62196f315e6e4cb07f2637e98adcb93872a90fc94e16d5ce1da0a33ea97dccc148a6503e2439212aecc7c3bc9c6e12b8f52bd7056382c2e96fab9e730c37520a3df28488b8be6c0fb82bb3355d42c8da3d9b8dccf1cc819a75b9a20235ff2901c1eccfed46558447d901f8b5f1dcb5cb46576a2fc4e8b89277741fbca770116ae87d4025ec9e7fc407852d4e16d9ded39bae9d464dff00729b41024ca2776b755d3767a1ebae16e47b1203a520deecd66956011aac5bf6dc92611a4e9cf88afe70817440a92f35ae08bf39acc7f08a71bf4ef376c26b44f1b8ef3746c4a4bf7ac1f695be4cc1c63746b69c9a40611a1b13c29b02b42f0eee727c2f9458f7990a4e672c09ec763ac414f87279a73e72a4e3a49b0bb70030e4bfc933e8e2f57ef55c84b231e495a70ea2d8755fa55814b2995ec8b898d691dcdc8e6de137d5f83127fd28a3ae918202ad982c906915f3bcea560e62f3ec83b93d2546b6fc1f453f8a72a0e1c6bceaf0447db87cfc4ecabb34d3ce853c53a7690c2c7b5db84599b4b669c39b20d6b874cf04ba2aa772b2afacca71233f076c25b0cc2eb54496e3ef3a9ac1afbcc9ec3856a926bb2292072efa93a9062d3539b6c19ca1362ab1053f311813a7ede9df0318693a6fa4a9aedb687035a31c79e0b0f0cc9e95e19b3926b1efbc8b83be430c2b3da75efcfec91ad614b5e3ca7205bd00786462f180bf55a48fd26219bb1975b4a89e2ec6554638b4c8dbc135d9f7fd7070917ce73dc009dd70ad1e2b948e7e74af422f96ed9762709417c0078eb785f84bc61e6f750a8eff99ea14a1e5358eee6d734ed816294e597cf77e707b3007545b22ec86a4319a7ec47b44b098e073cfbd16ab299be09b97976269b89f2e509da2c5d30875dd10aafd56b75b42d1899e67832bdecc6dacac537ef0ed3efdef1bb0bf6dd9c5b6f16db775ff8ddf11fde1da6df1de3dd91ae37f5952e7b76e4670f5c97f9ed42a21c1cd5e5a27e8e43a9f2eff6991d27ab68c0025fef2783b297e126210e514f363de43970a02275139e4e87d3ba2771b09cccb55726eb9dde23297205fd498a09b59ef26ed30fb2e86b0b0ca2b93112ead536008cc8518ba6d2db72752d35a0dc8f49ba973dc8fb91f6a5bea48d375657e862b00719f812d3ecc3b1a7819832f3ee87d08df63e3547cd1b06d7379cd36f68fe7c43c86f58f11b74c2e83ae637cc44af94bcc1ccf38150af0d40b5fae7834a98cc5fb61599644eb74b42f9725be019f325d46f7d5527daf60bdcf7da398318081a6cf022d2f26efe9a7677096ff657d0623ea3df10a68a1ce49f9e71a496b161685a53305640959c454ca0b382ccb0a34cf43a6ab758a165b3408cfc86b90f5c3d371823df6a1b41a5a17fd95266d78f99b8d7dc9d18251220cf929dfc5a28d0efef901ed0cc73e20275f72fd4982a8c242cf7d618f8d94232815175c5cea933e773db8d9272ae50cfa52adb0068a894277d46071fd177fd394834584656df079826fa55d7ca947da19eaeb9a1e6d84066e73eac323d4e76b3ec533b201d22decb745e3be67621c75e814f26ca755fc086e0827ead758682595dc1c174e639c82d7f3ee3cceedd34f869b5e25cc36d228e82136eb0471cc49e82b2fad4b7ce0641c9fd6281d2e0f43a159e2fa756db68c44f2d3e36e20e8bfb7de1be67f7ee1c019b99548b6cdb53a6b63caa458948149d888d9ab510e1ab92e46bda96acc6a0dfca73366b8d487d5e4aaf4c1894482d174efe42fe04b0121257eb86736d0087d6ed7e65f6c5154c020b66d42d603f9f4408022815390300e99836b186d9657ec0dbd6f449a34d55dfa0db08fa03941b2deb0002540e9ebd311e335592b5afce142335ecc7bb4752278eb81d27a6e632e7b7a8d460deb5de17ab1fcc2983df982ced4fee85b90a622e9dfe8d7e75cd8e90b870ea201b5fc97de0e028f873b35ca14bf63655d8b34c286ff6359ba204b31f7681a1910d6c345f4bae71b5e79f20c781165b3fdb3aeb94ebf5a9f1fbfa4b4c5a486d58ab303b76a6b098f8430afe7eb92ebee69eadef9b579230f793548fa8231d5e271983f47c23abb0fd77a121110158a193fce81fced9efcd17a57042653f18ad98c10ef209b9678fd5effa64375525b5c5bcfc0a0258a38bd74f9809b70221a3fc9977c4e0c949b1db916a56cf9ceecfd66c6353a1c91fb3776c61cbe0f47d0513499819ce34c58f98d48c48a262d5301dd87fa83f5e13e5d44a4cd2bd70089df36b0f0b5d6fdeec2456cd0fe17cee3a572da854d2891ea4988089574f3bb32817f239ef88cf1e2810589b7f15e0f000db35f9d717e4f71cfbc476ffb2bce004da57f8637bc20de409f6abd99192f6bbef4d362e8fc08047a9aff58106bda6eccd1f72b6d1886a32af440f3627675184f5b650e01471ac8aa0c79d3da7833d588ee33a5b1bea325f963689568f77a6ec3ef27567e3f9fbb6a2a236ecd437db85708a21bccf3e25f3767c7566f76e5de6bf84a3cef5acba7dc891d176d6eafdb86cbab45401cb65bb5ecc48c62788178cf3aa7c624f077552cdcc18f7bd81fdf452a7d1746df452d2913083bbaf6caa28d6d94be608c793b5c7fbc3f22534627212e3cef0bc80965aa72853e2df24438a2ec84285ed405580451fad61a88c468915139d1dc3ce756289014d33e5cb6611b8e5026707cc1dc8c6f6bd82a73ab8e0f29268a49ccf886419e78cbd6e105dcc4e317adb7a4e8aa89024cad45aee0b7d50988c7fb4b32ca5706bf2c4b9b82b6078aa9531fb05d67f04b17313619d6e232310e8c486963285a9f7f8ebced6b15ca5949c98a8fc9c06e7ca5f2ee8ccffcdb40bf47b26f4afca203b14e74e9a049b6909eded91cf217b8b3ac97e1b555a21c22b3ba02da288e02da408ab64bff20de36e19214fbb1c3c1d7ece7ceef87d75d2f7bb6e4d1c657f5ce60b2986b1bcd4af39029c6f3318273ab137ed4a7a1e769e8e94604cafa4595cd81f001eea41136edf2eeec7df1e6d70fd85dc3effc3f2be62e21fc3f6b24dbe7f7328512e5a3a959d40e62ae939f2f280168dbf8c10348c2597072d4c9083b88bed77417464ed5ea54807486f5b22fe94afca89f3599738c3212922e5b39d5d46bce4837a40b15b07ea9b4a3bdbe7bfb973062bc934c5a41ccdcd83eea65d3e674eeb8a3969b427e7dfa92adef96b665f64e1daa56a70bcf6e1a4ae274b7451290bdb8de3e1e1ff8f630412db8ab6eb956cddd93609065202c3ca24e7b32bd74318c280df61f663e66da773a11476cc834167815091417a13e951dca72bc4bc8d1de1e2fdd3f1c4d8b539d4280e9aa5e19c2ffef0ec9759116cb5f5b6988df566b699ada3b49e72a100c06e51b26650bbba4d48f66bfa1eb66ad9a8e522ba644a3f988cc608c10a9154ccf2338113e5de164bee59007216b2769108212a355374a265ecec832a1df29c39dce558a7c2c5ba3309d6d885edbbcee6db0671aea9521b9ceb1fbb13dfd89f387ce1c41ea033ff4d4a4427a083da4834daafff8208c4962c30dcc27e639e7585b36f6b36d4ac2c415581ba56ed5597efb80811602cb803de581a4fb749a7f28427d9d8cc99a1d0fb369f34f3df4609eac2df85a46f5ddbdf82bb9b0a52ba7fd2fa7ac2e1f9406bf969fe1b66ee64e27cd2665100c8c659d102687783465afa9c1869ed49e442463936893d5459c33aa798d9927a5ec194faa0c877e6166c3ed0263037a7857ee18b5bce1ce408d1bb7a8d386bad5ba6118edba7cd1f66f50cd04da19a03da9e545e19a5d4156db1e6786efe083e68d4efcaf907a41edf2b06feca8125807f872ba065ea73e00e69cf6f100784dab45737a516751cc21e3062eb97fc44f4c9c6d0151b046dac1aa0f28be864729eb9c3330d1859747f45fe9b3738a1e4cad75cf97e07562439ffbadf698424e44eeb8bfe51799d6becc8bcc3d83f5774680f1dd94626079c233a7cc0e965fa801bdbe5ffb753ae53c129e7b4e781a52708d61dd34b9ea43bee833da46ec5dbcac8ce20473c6c548364a1e1a3554642300c99fbaee81fe56127f30769d43de65ab014828e7b5c3919b5a402d608330f1d92d67ac7f7db8ffed5c547abd1cf6f767fffed9b55491d564ede158f4ee43b100c6ebf5ec5ea40af1c6cdef33df15be4e85c1da6fbc2157d0a31eb085bb49f158287e0d9d13519d309d47f3a9d74be29c9a13f2163205112ae1922ee3b24d2905e34dca80ed6131db53b26e4a58da14a3bd2b8b2244227524df181bece8a265d96079c954c9fe6f532950edba45a51ff9a59e588f6af32d5f97b147ba64d835e7dddc92f94506e234a650eeb5cd79f59b24f054c95d1af9d4f00c8690362cca8b2e4c817aade696417c11bcb1ad32f6b48b7adeb8b61415d7669982d3c7ffde535305db98d58ff93b40489cb9a39d4dbea42d0e719edbc39850d2dd3aab410956a1684a8e056888a1f69ec381b4da6a29428c539e4927a862db59a3bd7f1dd67c677456eb876cf231e3635c48a52ef5ead73fddc79ad9358a9d57318c8ffedb3e69cf9d52708907e6a7efebb2f19b4d461eea4332f6e28584cb125e5506370263cbc10076a3b70e2ac9e4d736b6a7bead88a69b6a386dadd1a5abf80259c27556844730a55acb2599ed241565fd375eeff56272006bbbfd7d86a2f9f09365de634978c9dae43c3b298e91a33a3c0e83b3a108a2c7953a5cf64637d9b0258bc36c8f26673b486d576ba192b923e1d4a3ae63cad8f3a93bef46f5ddd7aa56db851d47ffdac5afb3c49858b85ccb941137142d31035a8e18df244ec28aa041ab561f3002f510beb947e337d161a2f5c0f00d1814e15787ca9600b5e51a639577cd1087df6ca70073c881f8f3cfdc623c3393f42b04bd590d61e6f1afbd808f98723d4e3c9d357885799f1a73da1debce7fc35f165fb5a2655bc52e420943b56d4b36c008147d4d4ae703b74643d5d5eec4937119ae4e23654841285f00d4196d7b863cec699267aff81a2aa621ce1a2f7f31093d58629ea7412da2fe769d74fb3fbb486097f8270e18981722a12e594a6840bef57933281090fbcb2bdb00d032e2764c3cff1f97cf72340a7f351a214f3b5cefaf2232960cd7752de6b312c1edbd4026f693ea0bf51eb85935ed4a08db5591a03e06693fcc173ca09a55eea1c90d228feb959aa812f4acd3482ad656773bf52266cdf5ef1f4ec8af45950021dfbb3fff3a19e708fb269e18913a19e285cc4aba5edb19d1b27c912e6e50c18a5ef4184e56bc00f383a58fe0f36cdd45c3a2636cd5b6f8413ca750cef38bfbbd93003a8ba0db88f6fb03c87266b8555d87d46bf81b2db5d116ea49958ef1863db6859f20b2c0a8e12393441fe7ed730a7fd3fc3c57ac2a9c866f936514d8ba79ae963a257679eee60eda43293d8dbc34d91f28efbed45e0402899080544899785163d5b8d8c6dac63902ca2f1d8a87c46b6fa03cad1b468f242f0e993942791bc420cb2f66df5520e8008e170216b08b91cc8401c4aef9d7c06cdaabcc19431c02b99597578f8a7cb1cdb1d9b89e157d564a3c8caace9ad7295c7a7c9ca1277503adfc9d4f4f1b278cf1962db588ef415735e58b233e6826c25a34da478e73a81e0a2019f9839ede9bcbccc20f20e08f5d0323a7fefdb362d0d5b9b09f5e99dafed7fb185725533c0ce43d8bfff46ead84a95b19ffcbe45050a7189d2ea0c227929ea1b3b72abf16fba567d6eeaedfc44b8fae6fa8b5fcc60065ab46c18e21ba315cd5f102c6c6f8591621ff6e1476f0d851bab5c51a7f77876ef72a07d7f3541e7d3111f71ea608f4191ac82bd794837345a41c4e608c891709089a917d5ee708d34e1e5ca26c94cef3084a767fce578fe91b7c931c9e8c6a758a262d1c70f57eff4eb304056028ebb25e34693f89ddd8068c19f9701070843324ceab1046d4675cdd4457b4b52e1498a41452fbd94d6558078c56ea5ea6dee2990018c790079bd6b083b6b124cbc76f80708d9873510d58a6c66245d8cdff147306dca67d2139a1be6c1f23ae69843275706280e9189bd58d6210d74991163bc6318e306e4b5dfeb2d1f582af59cdac803d34ddbf2a9fbae700255f4fee02b49ec40f83acd99df1667a6b78f9a99cf59c9d83424902e75a5eedafbd68b5387795c94429a4a53fba5bb5ff9a9d0b1dcff4a1d866e02a6b38f139a6e53a5c530aeee3280e6616e810400e670a63c930446e8438e749fd8caf7ef06e4bb42d101a3271e829f11a20e478876ff3142348e11c802717c8ee5f8c5cb925bbd83e81f2a8108d7c481576253b9f9cda1dd4e8000d2fdf17e00e92694d6f6a7df6cfa1e7bd1fe9e577e448e22486f56ec2270d4ccf79ea7f759d3f68ee5a86a84a0815aa4539f21fa49e086993405b082e9350b2a1c8b448d1972638cb64dcbfeb5862543dfd3176201a2034e1fcd57552c6be016b8ecc87afc1a430ca1dfe408e5cdc7d284da5aefb7a1b751b647b8c72771e02045508e1995d64d8bbcdd343345a78c19365dc671726ed8f6a7e90ea7d4474678d835f4b5acda282ef6b3727e70c846f954e54ed8de231deb1f2274eda3e94f9a0aa7a0d2b3283dabf0807ef397660a8d9eabbebeca5e533336ecbaa18071b144d6cffa5aee392089a306139047e01999423de7eb0ee533a658768facac53ff047e6e9985b68ab1c039e988ca4656e47c87362c91be84285c47a104c333a79331973e635e67c52296062dced159daf0c572111f4ba9bc566b7994362cd706e72c103839ddac291a676bb6eebeaf774b4ccf3a79a146cfc887f468feffbbb1022ebd4ea6e3f15365d3a153b4bc3165c7bfa210b6872dd909c78f151fc69d32d5357cdefb1d28a1f47bf27b904a948da02bdfc6a0f584fb7c41e0d574801d2431b71664a1f8d76f9954d78ed9a562e48e578c2f5060d2ef8beee425ef8af1d3c44ab33d4f2aeba41abc16ce29e0c9fe89bd8314a0c140771b0541817316629947ca27474cbc7675950a082d62724f4a73f6e7d144d3018e931871c1c30bfef62bdbab89d22d83d3ab9f4fd249fdf9bf4ea0c3559afea1ba46ca7d74ecb24e47f487d54e81bb2ffa20cb95013ceac325fe4e7f167385cb6e39c4244620d119c392151ef4cdab5db3d2d7a86e4691808cbc33253ec9e86bb6d976d2220e0ee0b80054b40db803cc3ccb7e9ebd25b2dd66d431d89e523c680770a78e8f7f697393e2fa54a868d35f486f99ee813ab0409342a65fca3e206e6d27fb4cf653e0c058fb54680ec9930ec43692854102eb9134d846869c2bf68cd3f89bd9102cefbcdb5764479f057f79f50eaf9e266ff6da0fa93787e0ec1e5ee8afe329dc344be8336572e95d8581df7726b4b2f21149f323b211cdecd8d639f0c33172febdd8118cc8a544124840ab87670a9986890a84c6e995161a9c78afe2f6ff45faff4bc08c7064af1a2f90da23bdb454a5b3e639d103bf57be2f7a8fa50d8df278514c2f74b591972d33279ca86fe098542582531331428367161123a886a4a57792a0291bef1ff23b294e7a8ff0e775817dde67980d06358e033f35da8956d3776bd4ee47017ea9d18ec9abd79fb0d32c3a08d3cbe14366479e013ce61c275f0a13cd41edd57cc3ecd578711ffc62622ed704a05181f2d84208568a7ef13b3f15ea937305f673206d2c7fe7c7c2f5e828734997d21db4b68d41a226abfe29933da8c8846eac6b0cce2406f42f3b75f5bcbfec69e894a8b66e5a48bbdd96914bc4800294d8fd6fe1094c3ba3f634d2da622f8ac0d537dcb80cf02636c40b11b07d1a81e3632799566f1a935cf919a8fc402c2556c385ae6de553722489a5b4a9cb56ec423f7e614089e5cf27b3aa1ba1f32d752bc34efb0d5ac003ce7e386ed09499722ccca0897e98427b19e0b0e048fd197e997f1f3ce788ea47f6d0c07457df27be6e5a829403084d4efeeb90f3ad57dbfc60b3b8f2c291cd7d48813fbf450ef96b874d071fb0a5d5e6e4e87c57be4de438013a2cb95fdf90d165089ed451eaff463157e7b665d6b2247707a8fcb33a75c9283ad207f96a07a5ba59645c31e56bfe002b8af9e55abd34d874acfd5cb8277834692b0934c7b8cc16f83bf22b0053c842267a540bfdd6c01ebca5093569c11b386c2e3b089b426040ea6a223af6385ec94d8ff700e3dd6ff89d3f337baa9a3a7148dc199dd9377539427f972fc88d5b870d6321f7c4e22886bbad836057bfc17a0a36b11d3c90d323b01fbd12d221785fd435738cd1a904f6be18cf0e160dce88e93538c39811e59fdf6cece0ff50f5e505359f096230a200f029c5ab98bb66169b3d6375a043e56dcb1f73e6eb6b5c7fb7d763bebe04fac9ec0c034e41cf5ac470bfb2e0e124c6beba65120b6e93b742ef2373707dcb2976f91d7eeaee59064bd634b0ce8681bdeb0897e2e53d4d06ce932c33f74b48c78a2ac8799cb12e9e30792026b68a4c9d47422b18213a228745d93b9774aa33d52b2ae634241bc79e6b1a8c382e3f362cf0dfab2cd4fb8154596c299a72e46f1d80550fcc468161ec711202c7d4e50abd975cb9b3e17801fab1a31f45f5ad28fbd67beac3f551ee780fc20a6831b82270d3c743fc600d16a25fa636a90652908df1b5857f7cac4a8f8dcfc8ae44c9e806ddbc0d43fbf617900c17009f0e5ba99d116d34e38acc772cf78355813e71f8dbece221e6d604db7eeda25354145004ea1740381a1776c35c34133b69e144edeba9b196858b4eb97e8a88fbee2f0744d762aaecd54039305c94cc83ee3bec8996feb3d46010615d810614b9b137aa8ac7c6c163a6dcae0e30f61e6f1a9a6223a18f2aa02fec39a434e6e8a161e3293f148fe416193d53ab174d76037b98c7a3450c6a3f38c48f95ac5a56bce8bbad04694e8f34ae7299abc49c9b446cf5afd916d689d2b2d60606ad7953fcccf6b0988b5fe803d5b9dd2345f072533cac224f0ae7961e36a945aad446f87af1a6f8861bd3e0e2f5ba32625fdc365fd045b2c3416e98f9c8e6101e0273fcacc0833841f05e804e1b2e639a1f130e41677a0831d89e88b5c30d1c589b6a1cfe16a293115de2ee78568db32381a9b7a39e775aa99842916417168376be2f3a2f11d7b045cee2fe995a3c5e3dddab718bb1a409dbf360d4a000bc896518728572f756c226497510934da6fd5e063fd684ce2dda7c02961c68cb4031d12fa2d847658b055864eaa0181ac0e0421bae2e1871b35d91006e0f7678e787ef935df8d7e54cc973be3951d6a8b2e5032354880400bc809eda6a086f4764d5ecedc83e3a5832c92b242ec5e199ae70dc023260f086bb440e987e40f4955d5f2e726c5b8e79022186750a52a2e381b9262b69a5ec028d722119ebb8e1dc1b466c1bde887143a10aed22ac68a6ef266f4472be629b4eb4c2a722fc73bd62ce008aafea529e3cd1c0078c72f83b213da3bd5fa535ca127381d026ea9c5581536be1ebb4f0f1954464f55e5d921b55d498ac6a3f82a23783c10074c64304f20f4d43290923605a68835bcc6807979db6b50bd7475bdc0be8617a31155291e2ae1f30ad31cb96ea9934bdfe9c42939e97a015ed35385a332207b5fa048ee03f68f344e88ac4011c920d76f3fcbd21d38c65fd617bafaac8dd3b4d290232c5805c1a69f5e5bc629fa116ce53d9c7da27f0d3eee1fac47ecbd2c9520af5bb3c43292dd46bf7cadd733a588329f2f67f5ee37715a31068e03fe099414606faef4ad2ff1975e0806098a31d89f7205c67ab2e2193298960ca3a0d1c73fcd57709a05bbf16beec2738cff36f18081ce1bc4751620a574ff1130c0f5aa85f6c177345ef65fe914a6206b7ac29f2defc423d9a321a7195e6bfdc8beae96c6b373d773cab6b371aad31f9b1fe060a5f93b2334f7d9db26fd0ef8d05c66a89b4c8131c51b0012a4f9d10944a73fe37fcd9f9be580f9f69ceaec09c744600f6cc2b69ebaad10579891c3b0ec3efe3bb756693a9813fdb236e8acef04cb1369ad4739b91f82c112bdc1dc674d7118b8d93a40eded3ddbe781896e8aeab971b27c9f2ab4a747b207e0d2b74bbe7ac360e4b21ae18b664bcc1c1698ebf67401e0a588eeb8d931f8afebbbaf1be7b65ec061180274b8409f51bb4a9a93d472a3d67a02ff510ee9fb0899d6fe175d0881a14a3dea20c6a581f95f7966522509d06fc3b615a72c52c72ea81b2c0b199998aa7eed58dcd89c112678d9705e12c4bfaead03bd3274ebc76b59cb2d3828c770cebe66109663a6cff955d1ada6b55f6e10959bf0639028a76cfb2e265dd6145c4344c702e26deba6d4c30ce3d45569889e37376efc5c2acad75bb645eeeb5450df53917cfac6fa71bf3efe527752b99c63e03d0dcaf3ea9e7e8da77c8d9c93cf01dc5b5ac640604c712f64f0a867f64ae014dd3fc76b93a423d365b08b12a711bb69c6b9cb02e115fac7ec347d113eab5c629683c70ae83d1a2c1059bf445bc2037b2c597739e4ae5da3eca025f9f2f147b28bdc5f5ca32d9ce1aca5e5f2c6cc53d2282e6cbcb45d20ac797015f5d2d1431f27543beb05e8032bebbe10bdb0509654e9769299cdd82b651d5ddf38583ade3c8174e68d9a87be60b173ce2761b9ccc9d7ba6b850bc62fbc2a9c856f66e194d117359a0452bc6c2349ec38f482c3073c07aeaa8e7359db06d91782454b7b1bd0371f84a0d96358bde875215549de590d2b6736597a863ba586629ae890f634fd6a14a0df2ae282ba3c8ec95a83164c4ce9b98168dfb86c52396085b9971d2156bbd8ad40a268751153eec2aba5bec243933c3e986b698b96c618df6e60723fef429dae017008b9c66171630b6ab4cfd03a41020b6aac86817cbd63eb182a9072002fbcc3d624aeadfe8a62b56d0c88f393cbd91e70b274b78a7be42ec0d583f58c8223a716d11bc464d2ebe36d5e5421c6f8390192b39e48a52d038a2ef75eca418e467c2e972b4e4dc57f9a6997a1ec3cf16beca9fcc059f2f2c7d95af4ba1bb8105a8f9a44f7543febd26ee4fd5ddf0ef2de5bd75ba11ffdef98a4ea40a1a36aa4be8b6bc5f79f4734e43b0913e03e60b40aa6ee51a8ab673f0a17756e003021743cdc9110c50778f7b757f886b8b6b2bbe84b3577b3fb3cf9c6903765ff9c1936f1694eb9eedc75196a8fe6bfc9c39cbb4db64f3ae29d6796303f275d78ed85353f1d59d7d5bf4bd26a13f7d65b9a4976f880a3eb0533ce6072f74367a7231c7a9c26f72ca147df5d92c648b13ce4479727e53bc4a84289fb9026b17022646dbbcc58cb6b6d386a51b5bdd92a4c8295fff4e6af379876c63ceda6a8a04b51e730c1a69084e2cdb57a0e0b1f1d7237651d1d730a063648ed85e412db74e866028a8ffb5926a49a781fdc1d6210ad8f66a7b4b63c03bb40dd5fc65118b180bfd18802b9b09be188348076772645e10fa4b0222f2a8999131c52b093b9819a72cf520c741d379eb2427ed9596e8197a04464d8c6aa90834d7e3e47acec29e8a3462be3dd73dc4d0034019f0d595a712a93090215f5d7bf6f42052c885b4d2fd84329efcbd9b9b259d0e82d85037bbfbf676eb58617f621a16fdbd9a5c2981e8996a228cd6a6bd4b069d992bc6814f4ba1202f2d6d45f189f9c8e3dfdfb02827c5695aa1a161fb74d3d0f3dfab5996330d3ddb865eb664f29ac6d966ee65f5dacc549e39a627c5669cb0939a6176811e19560956c6b441f610db24865fdbbc1ce7e1b03bcb3afb9915cc6db7fa8de006defd79d7abbcfe3775095b0541975215aa58238273b194961c7622544dd6febede77156d8b134a8e56bc2eb4eb9163e3b426494a012470ebf44a8411d1235b09b6d48e2f2b74c3792c8746e1eaf6f9770fbf45df43c7ba398823a3f55262fa6f60451a95609d1a7b0eb147e95ce4e4cb9282b7270488fbfbd75c2ada1627f816f6af563bb775329d52f8fb44bb94339d52d872a7cc23c706b34f188c3970e7d753487c71d4ae4d3cc1fcd913fe3dc1efdf151d2dff19723714ea7d8d1d6db2c15fab748412a922c564bfe4c3e835ed4f8ee509c7df478bad61cdb94cb69fbd42a87381efe5e614e97c9475ce00d64262ea78ceb2f092cf9ac632911fccfc5b50b43ee29cbfaa4814491ba86dd4f22dff2554a1c3bbf861c99b1dd5dfdb487282b5053cba3e3f745992e4ad264c3317505c8b0a5473ce01dd50c762f62334601e2af371cb977d5ab4aea7cb6b986f63bf93b2dbb1538775b0b1d5be201900a2559f13a4b7050735edd0dd0d67dbe4cc7d436f4aefbea40f263161f4da64033a9da9fd9def0bb7a621b806a97be66f215b2361c5285976bb8a0f9886190d91654b382fc8e045c98954d0be90af6474eec120bc95572f05799d297c40056d18e556b2664dac8c36d9ee7912f37773a70be28cd32e2eee9b3c5f9b8855f0a32b6c419dd51bfdb8ac2133c7fc774aff56e1afb91d3f12c17988272441696bfcfd590fa03ee8495e633033f76b37cf2c16dc7edae5c38ee619becd006d96c0d6ccbc308dbed822167856a7b0e446fbc8333499c71406bd9191ccec51fedff7a87239b347f9768f5a46cca83d11ea25f87b1dd5726281142ac09edd50abc8c95ff98549bcf2b3e2d50afbee78c349318d6c3d64ba86922c7c5dcd07cada0c9c5ff0bd85edeb1251af7e095897e639b35fbdd8fd2a46a2bd5ef1dc068d6e0e5bc742c665188db6178d4d14daec5789afcfb71441b2b1a89b33d411da846642bd93d10628d04056f8a13ad1c42a4fa2dbbe78c3a1fd67212919d627a8f2ba883c18e25bb312e5f38e2ccb2fd37489668317daa503f0d09ea931b6e62873031d93faa2fb3b37f5708bb2238dea7f7db873d447361770f9b454daf725a8c6ed767b652cf100d22a13a26c6a530614981367b7943f36d48534bdd3c310905b7742c455aa26eb9c7194b6974948a410aa2297703e2e25091993129d2b0d596406144f5e17b16af165109b366401a02c8ad4e8c7153e74736047b45808ec50bac2be6e7adb475ed9b0057709156641df1ac94d905e7cea9bbefd6b833ac7db16f6a17daad41761a5f0ce16ef4fbb1616fceec070259c9205be7de0db5bbaad8fc8dff981b63da19f2a1e29db0db55ce0e47b44af56d84cd784683fede272e974c53416741d39be90248d99e05bd939d0d8e83b0715b6fd09f63c5b7485cdede3911a4b9e229741f014c4f70e5cdeacc4bd527d4dc3b06aaff9ab7a7ba6cf21075e90a8b729252a79949fcac81bb47bf742bd3a91d3aa0b25ee83286dd43b718e7c10a8e42bf6c03f685b4ee891af23f5910af4e20cc81f2e9fd9c874428f52b1a150c77615b0fc2f42c6ab4f72e37fd10b3e627ee682673ece7866d39e23e203a3f851ba69c773527824b4af8b78c10704a2a4d51470a19a98735f60ec49aa325db0575156333c87c93943987e9c331f178091ecb830d74996cd7a8be905727ed2251d5bdeea92a56ced55d4fe0522a6afcadf6adfa1f60fd4de17aad5c92be13c5eb1c1331f08bcd1dc4bc28c9d406d757a1988214f775a23faa8ec64e6ddb3767732b3d4b5eca48b1e1608686dd782ac1e8d7e4e6603b9552c8f59a23f839b38197e23b9d56ca17a404658ad2ae036e8deb52ab0e5e448d3b59fe117670bfcd0a7e4486210672f17c889a3425dc998189a5f76ad8ecc32df67fa3ff775fd7615cabbc6896c8b9ccc2d7eb59783d853ca5e6e51be95e15e2f16eac6e2d208b29a87b5b89847c7423d5acfc0ed377bdbaca397b343f2449ff9771eeb0bb56fc7f71becdfaf8ec77c1adc54e7e5e00a6897ee753d0cdd77aae385f211de545720bf9a3ab72b3ffbcdf47278bf3a9e6d5f9b9bea5a74fab8b5f6a59072c86dfe2ec335cbfa4adfbe2119ceada9858dfa4ba23a43845ef75bc3cce3a703893c47fafe2f73e9c9c3b672919c63ca113a96b9662715254c242ffb9b86505a6e3792e7ce952c0e218cfa88d3791f62b7d8d15f1be1e11f0863408ee10b3ccfef0b32dc8b8b14e633d6b2362752ea69c89829a3d03b423574aa0697402beee2c08cab04c5e4469afe984b4e73bb92678f0c08df5bd8fd4715daf2f8c3c21eb6c1357dc7c792e58c0a2553d3c41d2e56b2d4cbd470a47075c5c14ec787bb551c89e6bb1701e373a05fce53d8b6d6001a5e5f26d03fe5c2a82d86512113ccfa7a4b73ea8acf84388b2d43b03a79c8b6009af12df75a0aa1d60b8812ca491283d4e147e875e363c610dff46d1ea1003ad2386d37d22dc53fe74bf23238da3fde09e02fcfd31e9d3ff8996a899f298b2616c31264d24154608b34c052f4abffb43da934ff0201026f0c2473388612a1160ec90185afffea2152e5217b537c2007f6acc0d9e902765e71307faf884c8a5b5982093fe32218a49c7824eb4c61b1b33e4b1574adb7f2eaef5cb2c9bf93582e06c20955954c09fda7ca26158b799c5f633185bbc02a67387d2f642c2ec5587e45a69e77f74810e9618ea052af0b1cf3a302535cd839db5a25d1362a50970a32f11d6bed3f96f2149100f7dfd247f531690fc51dfb8842ecb391e006ee739e82f4f644d68be19e6c0deaa94966f38e88d188514bfe6803c1f6f1fa4772618324a97fa67922086081c02152df7e2ddba91fe6f51618a77e9fa77ccb1583dfa7a24a51c9b4132619e1ee99ece47c416bb60bda20a797c85a87a744ee475b9378cb21685b1f0a24f6d37cef1f0b2a75915ce562602fe656cc15d1134e41de76fc9250e5c39af4476ccc6e4469b3f5a82617a536df2a3ca5ee0c6a72e975f88e974b3fd4afc9faa59db675fb8d7662eb56eec625fa9c3df9ef0776e3275b93dac81cc5e1767ad18ee2c8466b76fc6e760ef295af8e1c7a44a96bb3a6931c28e8a68523bb67b50d11a2d46308c75ed36632bcc6ba0dcb0caa20ef95caf7c4631faf1f742f7e87e93e0a8cc8bb803573d6e077d48f292dca3c73d6a5b54cd3b19cc8ec35200fede3c81c333da13be588fc0dea71c7611330a93ba2fb88227d35c76cf85890f6f9f8cdd7abf2522002f8bdba1c326f5229ec2fc0470c173f3021f6820ef42f8f79894d3d43a13c744ccc781dd3328ba4102e374fd027287f2f53228179caf33acca36259760a7c657da02f7442ca4977152394ebd106daee51672b173be633ed2f9dde9eecf9eeae43397bf303f130a24bae2a6e3a898beb28f7612a9411f1dffdbcf54ba84806edfbb7e9baa20536e82c37a9d471702603823a7419e7904074eab0078e4ea6edbf03592195a4cd0e0875e380507b595ec143b1c7884f6c6fcb26c2be670d566a9a2b4ed44be0cf40e10167d9be1caef8ac4843f1f438fc6af17dc5dac6910468e122cf83145155f613320482fa3e81e0df8fd714cbf7fec7f10a88867adb1f3288852ee2811270c222923bb52b133a612ebd505e434af5c29a4f11c6583a3b085e5c305816e6e4198eaac606e0d13afe9295813185a56b3e0ab19446f4d0746c1d2349a8efb5acad186885bf1f0d07042764b6603829a3723bdd3d50b1800a5aa86715b62ad318f70c2eab064c4d77c1b3df16a34a35234ea29e89ab321ded128aeabf47a4eacff96bd23a57b47f7b04245455c9e0d328033ebd6ce5db1c6cc813a6894a7a44dbce7384aaa80607ab7e73a644477404c0cda53d22d38bb2cef62bee5a4c7f463d9788f0c2457a0960dffd4b1a02d7d9c8398948befc855897cdc5495144b30e45af6c773d3210a66134ce27e4f664a1330811394229dfc867ba57712ce8db2159d1413240063e64867631ff41ae6affcf9bbd18a045966b8e60ab895ceccee51c309cafdf886ae06e0cb22b0cfe86c3d9f4478f21cd239b79450ccefbcc2177582431262e08ca7a99b9051ed0f65b133996c72d3e9d51090157263b6806cfdec549d357fe5ce7da6bd3d45e60b03811a279ccc8b8c07eb3c6b3ec5ebffef8c7269f76f273db357db2904f7f9c2ffadceef172d688146489a9d73adf5108aaf8542e6d8bdcec587efbc099f96fc0f998b7b3da19899fabe7eb6f8de8bede9968430586482ce520d96b44afc0fbd07a411f3b2e77533709a3d8395eee46053438bc854989eb506cd10dee06ae8e359b6e9127a9d1a96def56e5f998f8abe87e959c6132997175b85006a70d896651a7925ae04e8824adfb5fb7af7284fad5b5055dd10fa539bb124f11add4319d8ae1916207a7d953d189e505fb4c7f53485bcb1f5e239a32ee49ee760e229ecf70fef5f79900fecfacedfc44b2c35946f04ff48f770a2796742aaccf9246eca9e79190379c9c760e3b2578a71f2f20684f8f8ea5b1d142c5aa84f805b70930f10c4925521a1619219fac3ca7a27609aa947b2aa49fb87137d693271c22d6fa1c052d238a7d28c09bd5ef1881a9eeee8261ae61ceb97cf6f5f92c74abfc7b8f72ee81feaa401d3317fefcc0bd1738a2bf57a77d16beedb8f1310b612e1b9da9f31c3fd0f8078412577da0bad5ebf68b64a123c5cfea6182c629b5f343d2c193941d6ff08d252cae2ea57eeac5bb3bb0d325a3a72bff01975f89f43f77cd49bf9b6f2972c8be5049faa041ccbc60bd14b5b10ae5b2aaf363f1def128edcc6c91d06d96996871606ed76480fb6585fb8af3569b3dfe05ff2373c32263b8092e57c3cd52ba2bccc3d9f992964888609930e50f84f60284a2f7f3df0d1e870dddf5c88200da7b770bc7dbbcccf080147e31947b8db8db2be5221313651daf35e429ff011429e35c9e728a3d8203901b15516f9333c4506b360c658db76f841802305d93649ecab84f55c0ce3d6b0d019854bd62957d04ebeb2e47093cfdcef55c201d70d3ae6289f76a2e0c317ec8848c67e492437ec11d66d6b4c51bc219818c053aaa77f2408d1a5b2f399d51d635b2efacd1a9737ccf14293ee1fdf2a1448c977305980bfd64de5a8fd968687630c74b01669cc182891daa6666e424598d4a122ef3777f0f5fc289f33fcef8cc582768cf21815698d7a014a650a062b4a257a840227300edf61f630b3f466f956dce038f592d4b4f08a8c7b34715c3f9deab227fcbf9c9bc925237bdaf48627df943e3c0e118a81c6d8200389bda5da1be116cdaab9e55f6e554bb186ff1f29202b34437ddf05fd8c6c2140e56f4b7a0c9a6e88c770f9df6a776958938e5da6971987145aef16e5f62937848bf3be64eabde765a85c89d864846a0ceeacc9d5646a7c5e6b3f477156fbc6dd0a50de81177d483adb127d4b7878e2adf7654fc4423bcc30b63458ff63be9c63e62c584297cb118eca8a39c372ffea1b4e448f6135f05da9254ebaebac23c19ce777103ef22bb4d49ef304357c0cacca84023e11e159eb56cab731bd4c107e0d023feff09a8b5b4d706b67e0af977bc58cbfc8751bd8b5d6c40bc7a97f67a05633de338e2d51aa4df3b0ef9e0db2bc909ccd66bf0bad1a2d3713b86e23e0d9eef6d032d245b75a0ef34b1654f838dca14f6983520643f0ec57eecdbc59c4eb72cd696a04e454a651a75d6364c65680e02af69b6e86e200f40084d19d5518067d865a438298aa6e723e6d65d93357cb06f6f8ffcd1e3cc86d3acf3c980440d35b5edd2b97c60c6799c9e214ff5027c093992c2f41ebbdd4d191f20d7394d52e7285b1ce39bc9327ac0f462a3aafa17ffdf40b8e6ec93e94c94de77ea473bf5ff3a48c84e801755285a738064faeaf7064c67887b4a421585e92cb2f07785c7b2e67a89511258491b9646eafef5b27e6fd054ed3f95973a83a7cebb62eaeee3ac0c35c732e987ac8c3310c9c119b8806f6652c6d00e424e018a715fb25060fe7dabe8e3fadfa13aeb759c9d8d3a07715bf3154cd33f0feb0b73a88005731a3b0079c6e14fb8d31fcfeb157bdb5df83c8a506e246f7c1cebec73361cc9fb687264dfc00c0bd2a3d8f52913a8fe017f132a2445a1137e21dff2aef8e4f3734b8ca9aa7be42422a75cfbe701297a24a6a848967036cfe0964002e65723e150d0ff7b9dc8295f6e2b4b9d41d7ca829f950d93ca46d7ca2a9ce4b3da6a5f4f2731aaa3323a295cda94fa353e90b9de698e4342a0e78f850ed4063b4552d98561007faa6cffb33202ea0d85539071fc5f7ae8744d2133555bac78ba678f1025e0b1739ea399e5cba1fc573bccc0e166750325da42fecbec7544f2c47bf1dec94f85aeb44bc484d016744a0ce6cc541d417f033750bff190fe557b30b37c2f194016485e6dd37dd149d1f430c981a5e201818a5ad03dd56d6135bb73b8791fd07c6842ef6764b9f8dd98e00837ff120266b25e027c1378ccc501cb76ba0879a27445d6029e26d73724646feda412365b3a0d6599ae325bf0f23139ee55f72df5ffe2022801faf5521da7fc5d0d120739c9c88e8113d8415b0558088883113e83c2123ec879a0afd6f77d7cb5be0b17e98292dd6b3167a8f234af33f4d946b360dc1ebc39e3dd83b9f56d1390f5dc10cc59c82e9a9cbb76cb4534c3af238ebfdb34cacf2b0cd28de66397ca0f711e72c77fa53584207518ee38046c9144a8fab791a8f6c22eb4716d466f7485534062df687e4757e660ab7e7c507f5b933ba2436a8b023e7c000354bf4299209530b7fb42bda33787354e1759ad9bc5a39f57a0110fc997fbc6a159ee21a4bce20f4748996ebd48d17b534a00aa3c19e15deeb60c5f79f88138647efc542198e5ef734525bfa7663280c3bcb7a2df2a92311452f752e18e0ab9c4ba425e71a7224b5ca41c9a67b438802f6c1952d8c1fb06b3c3adaf988126e45744e8d9108229e5b4ec99b3a9b4e51517e2813d1fbb5b7e20e207766407718eb2c47363cec4caef817fff954b243577034ee3bba2142ae6a4c547fd78e50a89efdc90c7644959979d92e448763747c1f3eaa1c0c3500ccd3a75298fa4bbc3c49fe4157227392eeb7e2e643b770ef3014971ddb7d585558d57a841b42ee7d2dfaa7b739de7762231d9b9af820ee96e1f0d3f2d3b391bc9bd9004429618c37dc9aac561728299ed671930799e48364815ea004ded5da01ddd3e5be68c4881b2b190da921e043a8c33b26b0e16c4971628617a97fbcdc151df5bdc694ea0ff3ff6be6b3975a6dbf681a08a9c2ebb5b42c832c618638cef1c1142e42478fa533dc76c058cbdd6f7ed7f9f7376d5be595e28b43af78c632cb83ac5ebd581ccd19f5ca9cec25e9d33e276f3486adaf38127a1595773787d7ce9336eb35958a5e1555d84bcf396596e581aeaa662562b4fcc32698f847eabbe2e27e1a2171f32ea2b3de1c6a277d70cd4053b4423239d3a5ada68cfa4093ecaa6c7da2fe0be0f625249db656ba0413e9c23b2afcb9948dd0d3ab3cb996cc30362a77a3b32edb5cfeac89be1e576cfe2aad9836726a13ebcc8fa37bfd74bda819d05467c774d18fa9b8d977c1c9f05ddb76f624b20679628a0f6175bb0033a4ec7a7c5766d7b3d2e149376a09379609d196f0c2dda285445722fb8fb0906910327bd2a15a07c197289063f71c9d8860c9cb892136883eeb28c993785ff61b05828008c9b4995ab5ac8f9221da280385af7b4c16b8b2d6f615bfddbdec83530d32260187bc72615f786f103c727a17d6c2971e3f69091c2802ff2efb112ed9a9a6181bb931a4205e99c466616e32672b93b0f363b028bf5ea203f20ecc78914ced78a87c8948322906cbf23ba783b8a8741efc7afa277a705be0ba2920b658ee58f6fd3f70ce8b04b1d6f02ebc9ab5f4cf2ae46c23ea7c4a65181e236fd788d75dd3da472c204bd7ba312b772718b6d099bd8e8e347e0310a4b6b374dca134fad6fd06d2712c5554b55a93f972647f91bc25cb1c6f6888dd473a86231a22aa7e07db65299ce0d55a663fdbbf20ae95affe3c03810c639de9f42ddd57138bf17961973d839132e4d5bb12a43bb2c93b1e02da075a09e0bafa94d7c700cb9f59cbe72205c3b5550b58c4a58bc78ec1cd2b09d5502dacc5f23987ef1b6c3d7de78f5bd93bffb79b3ca54ba7ca55442402c6512d34fd71f0bac2d6ebcfbab8c0db594890e475fd0e13f9ae3c81a42733c30ea660b80167471c1ce395c7402ab56bb2e209a1d6ccf7236b31bfa4cae63f6ab32c910cf669732bb09d2afce6092f861e7311b56bdc44765c0659bad8e93f53ec33aa3229badce2ce53d087063e427c1212411cb73453afc9cdbad978f696c97f4cced82dc7bb6b52757675b1dc811d9bd3b1d1d582e6865dedde0b9de5dfde8e45fc57db7712487e55df5e8e8eda57bb39866a9b384cb8ede4471822fe25b725c0ec64a6f05330f25c781d2279d2c27ba3efb9b79d26363f1368d24414e2f3a7f6de593843931dc4de3b7ec028d95b7048bffd1e42b3669c7edd194e91e788e116bb0183075ec910801870d0200a5c5705fe39d0d15519d439df9ecf429c0af1597983cb5e2774aa69156d2a64cfede5c620ff24bdf1f7ca578732554bbced9f045fee4eeca27eb4b6824852b9f7c17815cc8a4097f531ea88fbdb0617f2bee536ce54e56c3b6415bd3f32a9a5b0c9b49248bdbec6931053e75d634c7f85a7c8db38dcb1ff98912eaa382cd1784fba7852134ef13fd3e20ca4eac96e8df3d327c903e948371e27347faa147a899e300168502f287d27e52315ec4f786c2dbd8cd066644658ba5b0c4d8f4cf6ee67215ec48111a7c82e6f35a221fdf5b99ed840c6e8560886e4dce362c532336322c3a3176d54e4d76595811caa76fd1eab917e7db4c87ce9b1904a12d6576a8972d1d61e3da2abdd4628bea411e9860607f60f280830378160e4f5c6f39806ccbd7b75bc71c57ea19076e89935d1705de807bc259e8d3d815e2a14cda496709a2aff106b160e713419ef5771d624b43d147d461b4cae96175ad0291d889078a1bb33b4c4c71590465509922f65cbb4d8e82eeded0494e1da1888c25d6e0ce6866aeb6f86a25440c730e0762ef54e2a9665e3b4ff1401d3955bd2221d93b815c753222927277a4625a1e90e1546f4dc877ea65ef52e0412d423c7135224ce20ffd70c76bd0556750a7ab9d47fcee3266843e6e5d21dea66bce9ca55e7efd360424b932a8147051831ad65311891d0c0147acae8e3f4a93902d582e3d128f1f78ea95eb5f0ba2b0890d12518d262a01e193efdb3e36b2fbfc5a8ace5945147be0cc6d903d761636d81f5ddb847e9720cb5e464e30196563c29c90fa50b9395825a2b4e92974aa78ad00aa3c9293937521aa02492a713b80cdcca012983561c2bdd71c58904903f9aa83497db42961b5efeb2066dd30b5787103f71fe010f4863695c2bee7bdac1a00e76c266b2980222d8eafa44f6927ee2d7f2fb7823a57e0e9a6e7aede9476a518df0b5ca905655a3059e395c33113e2b69ea6c155c5700b8a857c1281ee51525698a1a00b98f0a2cadc0a3c0b22cc0293dcd9c084eb57484fb00e72bf486ff06bf9483461de09116c1359a0e06931ca6d39d5fb40d90eaaa056ec3a31893abcefffcd34f05a2a2eaf82e8ae959c1d19d98a75511c2e622a17051874d6b427ba1bd03c9c3af981b00bb2459000a1dc9f88cbbea80e70fb3dc17cb49725b0656e43cadcf3ed134c7f973bee0140bf7dc3a3436419e273bf61d98d72806ddfaa4e19e82aef092b904d0a7ee99619abddec6eb50e99388b0898ecb6de38d03c9471653c8ac3a5194b187a4ec7f464f18dc9074da2c01a217934c7b4fc69e6989e40efc2a959ab93fc294b42b84c31d2076a8d60d49a38db2d883d592689e11a274944f1f562625d44e8573157038618420158e3c2ab92d5dad958352b3d559dbc21c455ee063b7fff2e41bbb51e3694d03195cdc8c98f752fb76833553335db3b9c44a147d7da58c84750533b17d126cd28a7664921ebe725bdbc2095f6f28e681f244d66bb290d924fdc645738076b326bff90a250ded85ac878da925ba4d231144e8b03674a0e45b9f35c0586c1678fd12f1df22f50f66348d3bf37c3c81a6ca7402e4393d5354d491c93764d96371c80f9fc4de488d476934a72440212e750ae91c1f84440276d7224b78b0727b3299eb6d8c90f5b6e1d6ca04d9a963b6b7b7412b665e6427137ebf4c661339ca8d5cbc089aa2e24160fbb3002c6061365b0d8cc142dc3db366420cbe1e18c79b6e59d521fee9e5035b3490c773f3ca80f798230ccb10044d31acf9239461ed65971404f6e75ed6957d80b659e36d285964e7038cd8fd4ff45d9c27e13c8e9123bfd2e249cd89caad0215f8a6f34d7524f51df5278d33f5fbcb99af29b8d76f6cdc9862cfc76410697efe8afb942bd98247453d36d98dc1f083593d76af3c981e1cfe74c3bd5dd4fa5a1097628cf171df372251f9eef79e9979752b8be2c5cf6996eb96e85494936a3b39c26f7a915d77a266e452533b6eaeea7d2f44bd48acac564b84803ccbeeea55fff146ea03a7434ea9dcf7b2aa53a043693e4e5ae502f53c07076a28b4f9a8fc433ccd615bbecff74693c0fbd40a6dfd59acdc537930770c1b6e3160074a6c22034fafdbef0eef6641c48d2ab5c0af7ec88904cb1bfe427cd60ab1d2dd8663b87656d2521934d642b959ff42ede295af9d945146d87b1c0a224d7e5fee14c52e24442fce8ee7748c7db440928fcfd4195f094b5446ae2e988a72845cfd6c53ef66b27fdc6a0db3c9152a63e765c25c1c7b82b9c16411ea90e636a999a30371af686cf25f1bc372408c76c03f64c2e7cda896b21c2729b39caa473be7273c99a75403bb25d92e5967d21e496a6ff601fedfa92cde2a306cfa3ea9ae0473fc8265294404fbed12a882532ade1490da187bad3ddc9e8e8649628ef261f9c8f9a5e7efa72790727dc81c779bf9108c725b4f861c3ecca909da60cb97adc101cde67949a1d23610776c8d9e469913de8067484ee252358e3a807d9c1a7cb423eac1848ffa17fbf4ab2c6a5513c809991643b98c93b3d1d1bb20425aa57dcf344a1147932e47edee2c97b303a52da7784d3a69b3b72b24681ba4b4546cdaeeff84663c737ca1c46c8394f7a3f572d49b6f41e0252fd881e0de41629203dd0a0b4767c99335c8626a5a31c284ef6054d8616b36018d9e01827a1cb3bc0930028968ff77c4fbc8fd61e64ec16590744bf7960a9beb625196c65275c1c73744d9794e22f041f14a274fa1927eef41ab7101e32fc0c396e4ced56b7a2a4cafaaffd55b9fdd616bd718046ac849be5db8bd638c2d9d966889e51e34fbd7e0a121bdcc02405a5a9fbcaf07e0d1942f6b3704b99ca6ad6f9f195ea0e148972859a7c4fb723873ea5a9808bedac30f3868de887d63bc63271502794dafaad1705e06726bab2b6fd9c1daf2af6aa611d4ecff1199fe99e422441214a45abbf15fb888f0534bbecbbcc50ebb28aeb6c59071e6f9350952e8b2bee03c6e285c12f40513704d16da41f710255d47f2de700f578d80424f32b4818cdfc61128b5985645b33ee64e5b34c9f679eb19fb353af49eaa873808326ee7c7e6752c16538d310537456acc7b5b2cf4ef9d943e6d9156712191cf169c9494642cbe953f43c752f31c5d3f6082901beec7c12d75c2cb461dda14c1de5ab261056e3e299dbb34e91743d53fd08893deea408a3626adeb994ccd3163fd6130b5af4266c25f269c8ec8d8231a1da99cae5962cc7efb4d79e6440ea84ddc229e14c362a5f96c2edf89bac7c62e64d094e66b24e9072c19bb69150cc5cadedf0dc9e14197b0167d0a0d0a08091970953c9fa4d72cfde1994ea8947128cefa505b80f23bf443dfac6b1971277ec58e4cdbecb22ec87b99b7d179290fbb19f7f0382156e2b0bb6fd688208a65b132dc554de8c297f9e110a5743d667499039b924fc0ce74037c831cf8a23ec956a2eb2ea9756c7006512b1abab48213f8e6f957b1971c1755784dd7523d886141bc718782083eda19e2b60cbcaf6ccf31c281ce92e7185f336db3a7f632a0bd85496b2bf5106c526311a0c84dd92b922a2bfcec8921a4e9934f338a6b8ae43967f336df48ad34863c7cfd9da3701f811b468da3e181b5a6c76a3705215486eeb6c0bf35b891285d417b7d598dca26a5c194fb81b399f727c8d969f367215c98424a76e27a4281506f2cd32b29c9bfaf1930c71529fa0a90f1b7094f560c0ebc375d1ddf909236dd73d20ea848c77779d39b38faeb7bc4af6ba8fedb780620836c8672eca3d22fc21060cfcbb989755b82518ec8960f8b1881fe458190abb77064fd7cb6c4a96c5a30aa7c01d9a81d2c8db45368cd55b7e33385a06054e05f6142826f4584fa81b265df0c4e03e3f16f74b49b9d9c297738c66af928395bf8c0ad36f87fbf2ad7e97379cbfb7db80313e3de10a8e16e3a7bbed65e420cb17d930d617678379c50da52395a5e90213fb7546579fee48a9648ae16e2125cee9eb2b6485f62a70ca7b9b51be47645c57a9082f72ff0e1206d7fe11a1e0dd1c510c8d7d445f7b07427badc82dcc8fc808eb76b15359e96bdcc56b7e51cf0f0f05384238c5a29d1f08f76c95f01d1711eade64687e192bc6426e2b8819da2105d74bff36bae5d79c6394d7395b6bce0f117ac794ab6badd0b46ed7e89ac2bb3355355f3ba8e63e5b7aea25db97c55eba7e7cefa8f56b8f690aa7385b5f030480f4d683f4fa40ec40667d589d5968ff0f1ab110c964e1e4bb8964c655e07bdcbd5dc27757e6a68f64e30babc404a1f6e6ae1759499d5cf662ced0b59fc64bd948190b4bd7fc937d3782e21233ffeee05bee527ef357b9983d6eaec702d84fcd897eceea6fe08a458cf3854f40ede49ad4b251095e96f28b163dd40763128da39c9d5ede01321bc1905203c7e489fe0cf401dc233e15477484a19b312249739d28e4334aca0e38afdf0837d5059e382eacfc5e0adb0e4a34973f2625066dd33d5ce1650435036bebd55cbc887ade28fd404f88b2f44b0e48017977ed35a9d50378bc94da3b7ac498f9f4f02d3beea2e083dcd352e8e5687d58f78f57caf4aa0cf8b6a164be482e7db483027387ab2d8761be7c3f90ec9a9cf9685ac48f55bba9fbee5996e1ab360cb1d3b77c4c109b33c9c6071feac41e7fc70d6cec6e8931e638b3ec9eccb96ab3fd7b2be2a58039790028374fcdbfb4e15d8ab3cd3bbd839ce3522ec5d9600f37d6649ed486e24a38ca61995c4e5bfd50ccce215fd3def1e5a501cfd4e3b27c7d5f971f3a99f261d716bd6c73b8fc93e3c796bef55ae58b52b837c3ac814aefa5253a006ef23dd119ac48ed72da0c0ba00c6293d6b76e6ec8fae68e97e051eb6bddb42199d87bb42a73de6e26feee6e251ba4d774672a6d1fece9715eccdb896daf03dbde484b8cbaa939446052a4e3bb700f4a6bf01c9142fb53e194014db41f033fedc982323112eedbec68fdee10a73015a676cced1cd809d83090258dfbcd81e90937b2d72debd2fd4a16be7c4f58408453ea14b4b5606f5940e9572799c588b30e0a4fcead26b9afac85c5aeae3539b4de8553b00b579d671429cd605cf0938977a3eb66bd6462609e838fcc09ec7fe42f9c14094503fe4277776096d4dffd85bea2b0b4dffc853de1056a762441fa9d78b74349c2c6eb01b27b5901eb33ef72acb898cbc62c6562540d3903782009fd8c4bf390ef8a897590f33023d3fba758a677fe42a6efe7df85c702fdf23e4fc9850162b27bf5b385f42984a8be665632a05bc8ba0c9f3d332f93c8e29458dd2930cb72647df3e69daf1fd0bcecde21253181736f8f3c6c16931027feb0529f7f715aaba72a32582e32926688460c39bcf9f2ecaec35c771901469b182786ee0818d2d8c5b7748cfc9b302e47782b3bf7fa5f38d4f144858f993990475efd65a60c9b5d9aa7e555f903849e33c9ca52563638206deb3339b83f994dc42087cc2820dcde81148446ef020f04b01191f47135861169f5f344a29fe3d4b01d7199a99d0a4bf635b58d78a954492ea3c4bafd92ef02384db8e9660d84183539e344bfd4420f904e41010e364c221e075bffb17d823ce0369fcd81d1426d613db116fabdd144d8ee43377d67dd3490474c56aae6fb2f4aea5ed691c6fe4911bdf6207f5535b569edba6ccaf9bd731dc2011b88dbaae42e8e64b104f74f4887900ae5ec945c70c023e886727105368bb5941ea78ea44f92ae5077a4bc5cc7c443fa640bc2fc96d6f620e7a7bfab6a9299a84dd4c8f6f5bb366347ff116da6af4f7bdcfe59277485e33b4dbad6db8da07f8ecc2fa3359e65f65aa2177685b793462a6209f3487c0506ed54b1d924c6e37b5f55539863f07c6177ad4208dd20ee3c1119cf8c0387f1e0acee441624ad4955e466f7f762e9f4cc27f26ef74f7cc993a33eb23d206c7aabbf5c65ffa95d44af6f688f4cf9f39f9ab8faf06aff7f362d5ddfb974b2a707f42e79df4b0faea785984bb13d3ba889eaad5f4e0fb187cc47f1c18fe806aac798f582cfa1d2d9f94345f493efa257538b8b29f99b7ef25d1121d45e55f8d69cdfb490efea86292586a1e76684bc8e2e4bd1f7290777973d7eb5e2b1b2c31213349d1cadb13877e24f41467fe02c764b973e8932b6e8b5dc20cd9fdddbdfc6f97bc79c0e176fc203fe6d902bea0f3118f4d673fa218fdad813e2f9a216bb6f511f2fdf3c960d2be5759c527eb5e8d63a991a90e865fd3073ffb630541faa5f6865d7cfb396c8c6973aedb31ed7f70eb52cdb29dfc389fe59c3e2bab8c286ccfd9c0d6cf916e90352e2e76cb5d5e3bfeecf85a4b8bdad2442de243c47cfe857a1da97ab9324afcbd59e7d28d90dd291680b79b9b8cc1ef14f3aab27ecc0ca16d490af7957ccd4429ebd5f2350fe4c0caeb56dadb3a408663f85fd31833849ac9deac0a112c2bbba063da1168a634cae2eb5aeb07df65d66c343220e0f395d848754e04e41f63f85f0dddd3676714088fdd0c48fe10b2ca294ab15477408ef2fa7c689fddc7e44e40ba5f6162ae1402b703f3fdeda39baef566a0d17c4542e8a69ff7699ddcb0802b9ba58d75451079ee717d23f3b109e0ae7df3edda498c30058f8ef7ea69a45fe6c53fe38d566f459bb61d57659d7f3b18a8c39c40d5899d22f0bf084bd81d7f087ca3661ed3f48eb4a2d7367f6bdff5c7a804b586063769e917852f879f900d7738a80ca3ee1ab50b7aaeb4d7506f9aeb04249f828f09abf134e3279f22c7b4bf390a1cee99f9d020fc05165eb8f488479adfd6ba769dd6207b816a1d5d09ac5ed829796d4cf3efd7f88821c46a68fa98e465fd9b98e2025e181cfca3920a6a075d1da32b5d6be411eeadc9bca19709d2712c90373b922bf825be2d881ffa6500191c4d23cffbf0813f084fdb89e03ce291db63012eec36c6267c2071accb4d62c01a7a5c5c28db1502252c06ec8edfe4fbe7fc263727dabde68ffdf31663a913d6dfcc8b2f0dd1e88361a7be02afa4fd9033d3158a975d44ed3100445274544703a3bbf6c220d9a4e0ee167b767f22ef508781aee7edcdde4b56d02379d856ae4e4ef99493958382ee32c6670521176dbacd4fe9be00ac8bd4f1372c37644bad4c95eb151d7dfab947cad0255432f0ef6d536567c6b7b2d6f50746b847938244d234eb1df1f0d3a10bb008bcff9817002a70466181362b1408c4477c91c835cafe99e59db683f53a14ca737e91b2b7e2f25a068dd62bdb64d711e6318b967dabe9ce85a7293c919112eab96897993839ef2b6e87de47be2562c10ca32884984263236bbbbc2fe985e684b08930166fe9cc36076948b8869952eeb5a128eee1e9f0372757fbceb8d38e0612abef1b81dd71c6dfc43368c701986ec5bcb4286279bcf55cab0cf06e839823a68e8ab107ccdf33c13297a4489ef324e719a6d53c3ca7c0e4d1113699aa2db3a91c2f3ed19c038617408a50d4b7b0186fb09cde556c670cf65c686fb222c3945b9e01bbb9bfc56ea36f19d317746ec676af6c177358decb45dbf052403e2f17bcc253fd46374668bff58d84f4790a9eb779e55f2cc6ecdb8353329d47df9d5e069a9e72a2f7a2705dd0844f363cc52ab9ef637b49c292fa4218d53c1beab329d0ac5bd3b0bc97c7527299cafb8345b38a14cfdb243593a3a3f0418f5851328705a53ee8cfdd24eda1dbda2a58e709e0a4b6660d377eb753b658a17794f784f74a359a2e9bd9525ac2d1ead130c16174cb7f60a9b3d0e68266edd7110c6f6cc66f2f29653e322e01b0c2abf6d37391add9a5c93236190db53a292bdd3bbc8543ec46b434ce4a2c901412bb6603304fdaac4f05416122ba98e73586e879b2a628dd655fc5e94380a849c3e86632960601c2eb20758c61ca868bdf3d2cade7584fd3445ce563ffd01f2a2e003a5ab1fe8a208f5962eda112ea8a0a67efa61757f5a5ae9efd3cb8ed8b7df409b566082af555326fc6924ce529a9738d1447c82e8a46529d81469837bcef7844348e9e8e26d00da141f79d35e15d9bc73b616561e29421ac1381b389d621298738ba1e0814f3930389555666b456c33ed34ec2383d5ae5f05c800fb181a48f4cf421d6d6000f52ac8aab80ec05e5153c0abc4501aab0676505da6feee04f8a00346bd745e105b048c9d2a39f39dbb4b681d2ec47442e66597c3f1392365a6363c3919e8691814190258efb64f1b17bb5c32200b894456ea2d7dc01c774cd9b78ec34c5428a7885f0607170f5f571ff6d9b7bdf4db8e28da67c31485580ec5fd4ca99e4ce3119d210c9eea3825b974db6897d8b2d712d32c1b3de45bf5ad73c1bdb9ca18109c386c364b440a32ea0fe6a4cf5282120db0fa622e78c3905abcc30e55db27d28c49ce5859069968cb64df8d653b25f1ade7993a101ca461b1ddf31badf80d72e31a8375a66633e6dca3556019fecee501572b25e78a6be07b0969ee4fe6add55b7568cf0af2d2d32bdcc38541e63a647e6bc91ead0b87e85b8939f02efca076204bec3c67f70ad316a47584a1393728746d4070eb1baca42b7e05474f03c5b939c2fdd12b61fb2acc387666243ff7236c7b5d9e8d4ce2be6af36eaecbac21ddfa9b2407224f55a2941ef61ae85dbe7ecaba0bd644c2d96b1293babb512bf6177cf300f4ba4805e1cc9e6b86feded1ca8f84779617ee841ed129f52f0642c09becd6562417079716597eeb6294cc5b2b0a08731233de4f813d04db9849963823f97a5e4150c8031651a59cd0a38e84e3dbfb8afda70878fb710eebdd54fae5df62d51de16cd81850f425f00139b7f00216a0c9aef7a840bf5dfd6d9e3e33264e6e0079ccf0cbb2132ad665e6250bc93001c236420f14e25b1b7e608cc11852279f893663688bbed6ad233579fba36add37aab509d9a9f16ef10f55ebd31c8e03ddd01b3a454392132c2f2853ec0f13d6da4fecf7d6e2545abc3a9ed1de76be2f1af707da02abcc3551855d7ae4463cb7a675b69511fcfcf3db76cb36d54556963698690784f821ce1c7dfb2adc9555dd31229a5ede2b59994033a4b88725e1e93a47048f749b2ef9b6189d148f5418c101b5eae6c86c3e2800b9a13c27bcd48d5cf7f226dcc0d9481fd6a5ee8125d1182810277c6f332178f048eeb18d77a725a3b7c661427efb2423de019638d4c7c587bc2d26ed9d2aa3835f43fe50d5bd3a3381c5c293f27b5071113d3c2ed59dd851efab0998ea263262de9039576e2a2b78c1397267d48bf18912b6770ca3316fbb7b407470fb17ed5b3460de1eb28cd30b08646ad1bea526cddb5379f8c4c70872568c2b00d5a8d9980661db61e8dd58f06254c30f043ef19035c1073f04cc981857b807d1601e876efd0178229b226f48453e3e18a07a4e34cdee1b151da0488751f0dc7d85172dc58cf6ce4fe0c7a931a07999286b8b76a7d1cd0ced549e21a3786891c386a00a9d319f2d0c71775d22f5eabd410fab852ab770629e1117766a02c67dc4d104ae503575c43d5f66750cc045be57e0c676aac8fe1d34fc7805080a0409ec32276a06d74b38002acbb910efc00c466e357b09be8b7e2304df2ae3e47deae54634b765acbb4f5e7feecc4fbfa02a72cf6fd4f8816299b8677d89d6f53739644637917cf379d8b4418dbbdfb4e30b048389bffc82aac81cbf11f1035b9f4b3ea1e4d6459d9105a042c5490774814ac65f7e2155e7033fb026493a29797751e7a00e0c2bc59b1b5d20903efce51752750ef9810919badd8d3413e5c81325e22d80d722081f27645499de6eac415e899b7ea1e2e447a27b3ba9c2b69a1a7ffac715fd864cc16ed0e5bd7c49ca52cc1676385c0874884fd9cab7cce8864f10cbf8ad7d35195b4abf39f9fc0973961bae5ab871e2b19c36634993217985575bd9570bd7c3abe5a8f6167bc7567e65468fd9840d49dab19a8c1dd5695b6562f4c6f53a05bc7e393bf7ba748d28c0f3c2b9faad908ab0179d669dbb0d47edeb0c28ef2035d94b0058bdd271a056b8ba96401e795dc25085ab47b9c1d53542ddd4eef8b35caf36f225a558eccbdc6085ba90ae7444e96d3330178f3aa88a62dddc156ad1369f9c8224fcd336cf70a9e44aa564ecb07d9be27c861f0f3d43ff42c58324ea968e17be5cccb451e5989e12fd393c651319651aaeceea082516319e87ecdd9a848b77008aa273f66e4922faf3b5c5d7afaa41efc77b1cfaa5ccdb7668af0e3fe9735a1a9b623e22fb1864e2a64d60338aacf32fda5d7f86f70770a8d1fba69e5934d219e14139a15dec254b3b38b7630251e11ee730000153cd4884ddb73d851a0e0a94f0783b803f69ce2c7957a48ca1ded4186faa5b2bb372eb0a75579f5990115ce1e87fec0d8c205b76682761c5f411041b07355427c649b571d03825abbe91f9a614228739545ab6e314c44b73bafd08bb89a10802fb636906e99a0d09fa451728a1d31ac3761552034a66ff43361e2e1b03a360d68975e64b4f85df8413d038fe4c2988971e4c2ad813a4cfa7cba545bf486bcfa9e8959e12f50b272426ae29c7da60e42992c7fd1a1decc372850c1cef1874310c0379d9af5a278ee3c723933ae266b6af591d734ddfec04b250a5848b935a13ac9b0aac168b18854e66679ea6debb31efb927b55db7f343e12eac411aae738376f7a0276ba9550f1033d29f2a8e21d2e6761b64aee3ba4d13a2294bb44c9cc8d6fa62ca0778400f31d3fa6e2aff0dcd766e0d6cd193d4f5e488f89b854235bcdb340d77f05fa7e17645b7bdde3b1916d19e5b6166a423d2708fd463f78caffc471cec162929df42e7d9e8fbc9b44a0c57ab56728af4ca890cc04be6e9194d0a768976bef1b6c956f209821d764c6ac2d96faf8513689d6c26541c6f9dccf3419d04af5e117bf86b69a7c77c2217ba83df5cc6584ea98d03b1bb3f70d04c60a2442197b0ca91553dd40bb7399b85acdeea50d0a732e4a6e11b6a27cb10f3d7f2ac324e858a5a06ac1815585d9c2d25cfbc43f1021fb8495bc090f5b4386f329d0ee909556937215bfca8d46e09facf2ea915739d0213da8e31a17f502dc318983905f46c73821e75980f09cc35badcaf2a64cc856c366347188dd16eb088d38494a47fdc45f831dc36595ec8b3eaa96a8aaf0415364c7fd32ef74dde8691d141f11db60d610206bc234fa0cfca03cdb712eb236538afbf21aeaf9c15a6520c70bd263443db675f25d23afe8d0ea67cb581f53206da46a045e2d3d8a835d64962605fd0b1ff5d37744f4d46b389de32ae0c33ad2fd4637a9ec4ab45a2578f85eddbc60f5024ccf0f25d7bb2531cf912512ccf5b9551c4571485a67c79607212d835a1fc3bd52fd8cb098c0f29430bc22f603fef13e0a656b0e41b7ff9696a56c61951440677e27377d05b6beb2eb0c1675e859ed35ba3beef1c3ede6fc0adb2b288ac68491bddad28f0be79b9ca4fd84347f3001bcf026d8acc2af84b43c9465599130ba12d4719ddc41b93dea80ef5784e2adf9e41ce1aef31bcf1d37adbd3d332c47d9ac111a7fcc0d9fcaaeb459926354a68790723bd08acbc12af5a067a140d048f7f438137ac2547925155281b173c27209832afff4413b43c725745d2c867aaa2be7105cdf9b1308a2dc1146f95650c52a24901649d3306c26dce21901d6041cf81e0725060d097c9927f7fc642201d614f855522f8f585f22df240cfb77c107d3749d1e40a11b05652115326197296d9573e6d0129e32fd93368574db6c37337ffab754c15e45f18c64e14bf93aa882182997ffe5211a7669857dcdc1c2c336cecfa819ca87c2ba658ce9f95883f84d5fcbe39c2f8b174f33de145ea58c4972a383647957bccbf729c3035a035f620cc34fa89964a8011c0ccab8b69f8615eff69bed589d2420c09a10b5afd7ba985c0847994cc450a54e80ad5b2bfcdc5ea9522ce2d2314333909cd5416933de154da15e48ab9863df5072bfe6f079d0a2c485c5736b89f8e7e23ed5f833df408e50a87ca88c9318a876f56d62fe8f99ccbf723035183b92798f560c78b624fd2af2ac903fba4e3b988242ce3092e57138f379d67f15ca4b9e7dca6e7de58f4eee6b3df798b7e1240edc7f2d4fa1910d08679c38b0333fa427c18de15c70d1069d96f127949e7217787d3eb01c7d4014736c23f0e74f187ec6e31aa8f61fe653efb89a41cd854b047f3eb370217a7651b71e272adfc9111c8507844f66f63d688c7cc707ad42976e179c58bef8f9c1ef6427230ecdf9de76eea3c270bf004818f14c13a126e436e2017fff5116f479629a3be27cfb07a59a0a27dc36c77d5945e8889ef8cb0b6073044732ff3efc23ecb73c4b119946fa9da87c7f8147119597d72800779235775466c5de16f0d88658074990105c844eca883daa08a4b8ee84915a7ef0772d74f9732e7c7d2e5cca5702b92c18be2361c49e054beacb1207fc97da4a5b9c38c8238ced22c792cb9eeade13e6a70284b48b4f9ee42362107bec3dd17ca57f80a8336b2ce3b801a4c22213e994260d8e890914c962344a831f74036424db56499a0afc45c728c2082de9c86dc433f7a6fc136d6cb6d2d8a120348b32a29dcf677b83dddc53ee1a914f619b72986edcb9f38318af2cb74e2005fcc16eaa13125c317e593dc35299942f4b486feb0203d47f4893c6476f51d37fd8e2bec8755fa9df9dfbd13fa0eee28a20cb9f68ef7ed9d4de24fbb996eaebdd3bd7ca7b04d7da7b9bdf64e2ffd8e23ec87ddd1494c37ebe31fdfd1dff10b6d70e328a11e72b9f6df7c278852759b44d7be3310ee4d8e62e4457f93438ccd12c6a066d9419e244d778a21ea6db0f538e9dc7a6c78e427942f080e6b217560011070ec5cc5466a1e8a4fe60decb71ee9632bd23f3d4ee0894d70074ad471a0740cd8d0df5bfd7db9e11b953b3964cbdd50fbb76d2e780d0c4398b47bec033eb3bfe69c60bf0a37a2a3255084823691db2a4705c204e89169c32387f80da8fdd836e9559048e456e96ffb11072f517efb50a5bc3207f8d75a714ab113c8698eead6e5e07687ac100868cb2bfa96233aa211b2c985c6d2bac50901bb103f4ebc88ed3887f220734c4707511f989da8a67d9380b2d6313bc8b0187f39d734243a7126b453a8f0a84b1088cfb9e56c50eb0a75ab4b75b9279c05a23f7bd467ce4aa670606b50aa1bdc67f530fdd5f64a16b8e64deeb1bc237a6fc9fb80a1c5bc2c34b9afba62f8306d91f08d58ebd438538a4c89196b8b2be8aae52a1bc92a18e4ee869c3d2227d7cccbc84ff88a5c155d911d3d47889aaa62c17461c76c017aa87f6483fb9f3fc1177c6526c71f3e629fe50e7eef1e432879b939406d03f4a6379db255f58022fbfe27dd9f189676f4033de76af992cb8315c8077df3302295cb9b0047b21f72e1337e09548736db824b3c3b67bcd34439fdb4b3c1d652cf0193b501675b6f3737867ec2be2e705e1ac325e6aa0ad253013166c3c93e6d22e495af22d96401c26758cac98264ba4036d05d833ab6a9a179a05196843d2ba111f55bfaf2eb4bbe2b9eb788a47ede1648a77c8a6a3c90f8dbd3bf5de13e1be68e048885561a0d5a11eacd33a933eaa58c5af4a311ed482d78f27b14c9a436f2ca6d573884310f1e05da0bbc9b23d64a952ba8db46fe426e0374a71e31b0394fcc9c78b57afd6deddb173de1060c368e80ed29f622a63e3023054fa66b4a677f4db44efb6bf4360e6f0def993f8e5b09b685351a16cf0a4cfced1cb17735b2f42b04aebd53af1059a572a9ba37473e4882b116879e0f245f0d62d4bd2a02684b759ca30d706a675e72ce8adeeaa2e92754a7c840702bdedc6036f1e6e0ee234003e556723825abf83bac1008c91beb633d96c0ba075ac44e90860e3c614e12371e8973c05119967209d49b0d9940788840767d2d43b6c5f4049ed53280ed76d0b951dcb9457ea5c7630bfc634b0ec90247fc0da5fdb0df75b061df67d504f4e9d9803da01b92cdb85fe688147c6a10cec0123425e3bc897f83879c3eed081787b5691e1faefa489a74781b2817198f68032eb65e7860ba4bf00c527aade3b6b873c912d3e9d4c338f74b3df89bd87ba3eed6dc5535469258115063f857408d36b8cf2d813da6bf7dc8c78821cc60f2565fe363266991723118d40934f2f519072dbba2fba8ff879cf0c74a019c2c55d20a031531dafc8e1bbe667e5f6e8e372d38b108e2b801c5bef5b09d77ee8be5f6f5fd7145609a833901eaf4cf3cd5270c42a3ef398d10d262b3c61f28303119139df2691327d1e9779ac4fcbd8009ae3ec39e01327a8a951eb47ccc95a60f3fe9892b30010adf045cc7c8719c12f95a6087c09feeb39dd19dac69be92fbebc527ab83e1f7e9e973a967fc0bd85ce889b55cab591100d3875f7b529c5540d62f67a3bf30b3dc7911c118c47f9b85c20a15f86539f76e17c1d0399982cbe1f64886b938a96e5e42525d50b293544a67a7aa650401e842ee617cb9a01663e0aa4bb6db16832c42576ed13c1a24bf3ccc2f7550550e5ede98a0f473eccd17ee66c4022e310cc1b1de3f2d90bed38af4aef04a58784fa2ca98a844c3b14186b057984a549fe2113e853a58cbe695e7588e477fbd0a1558a7ca95c7582c378f7503cb24ee462e109d171c79da6823f0047091957a3b3f1276a472c76c2ee3a98e4da750ffce313916dd966a6e53615288dc7669f6745ca1bf58961b829a175f6b24bc0d0a864f2187e8394a03c66547d81f4c4ff64702232ac5d959917519653f8c014f7fe2fdaeb28b6f890ae8717d5aa845316bb5bb1e9b3fe394efec74506f466cba9c670b6cff3d761c18056af38ee485ae50355940bd9a88bcbaab815fbc5b4486ec1dac2afad0d49fa11fe46a7b0e905fa5fbed710a17e0eba6c8f5a260177bc518a4db0b102b620c871368b42a383fe7e104d61aa485bd1071dd5e79c167292cbaee1a5f1ced0a1406017a518e308dbfa7c5d3d9d5a40404ea1b30a4ab7508a1792c59bc8ff314420a76714bd0d51844b55eb1be7d464fce1d72ba9cfd88026762c8d312a7cc60b2789c67ec8ab6301849fca647fd8cc7b274e13ca13c464fba4a17ae2a6a89f936de3c67faafc416f33e6314f3ac0c0b10142638a57cd9c0d0c70dc901894b974a07f0c57dcf8c9ba1994412c484446a758339c5acde3beccbb91db2ed640e1886eff9be707dd9ba2858f7f98b297d5120d2ec27903665922fa870cfb076a2758df2b5240c3c69e83b453e439ce909275273a82ba34501cc9cfcfb75c1349b795b54dee1d359cb430381828443e75638c7c8c05955e8106e3feefd38f34fddb726b1caeb3cd104f697f2fb92f91b967efba09a94dc67dd1ef813296efeaeb05f705b7807f8dbc976f476a0e3d86d2c10c6b32451c07d06e79dbed77c9bcb7da5ad0fe23134bb90a9f0f6d86287ecc4ca5e56057b8550c1ab83836e8547af51767e199cd46e4dc360066765f1d81fa7d98da17852b1bdca13e2353cc184a138c2678b44d8f8f9323fbfe2e77db22e392bc55e6ecec5012639a3a8c50258c0e14fd331895e11a530f5993ac09ea54bd0fbaa2e0103dc5fd501e4b0bb5a02d58c537deddfc0c6d04dc8573dc84b78ad6c9786498893436f3895f88d7d5119a950bd1c78373f9acc02a577827005036493b60a75a70f8581a13c790a5e686aeab6ba4fdbbdca001c8cdc0a1f8e66394c69053d3f8617c71f4cfedd2cbe13078625217f8cd3f1c896c06fc7dff2cc1460f86ba08616b25ee4c98ac9c36aea42961bf4fb75956939390a3842526b24cd33de2ef1e78a45e32ddc2048a520f7887d30494683826f23122807c9fe73c55f5e2edbf957b146be4d20d5bd5ebaefba439fa3325017a87b9fc94ab8a5fe0cb8141528f0e1b496245913dff0f39612d09d233e34f2277a27db3c54687b9a4958ab7a21b4e60b5d978ecfbe1b50373c08237dfea59946f97286667debd825eb5c55d273069b2aabac1556c0e1b51a3081f77545bc60d7683f1c4d3b89e7190335a88028ac4c66cf01b3cdb942f9f6e2c04139fa81a765ad0d0f0a5764d7d0b2a7daa91cab9c0d527ed4c33e5141c72f79473cb88b3a4db6ce09455cea60db39ab40432146e75a5b2f809afac3c36788ce4374063debb4d4110f2f72103a2b0497e1852c3ccf905c4b16b96917063c60c1300d05a9ed268e71af8438a9fd2ede694537d02f3907a48fadb826275323fe1bbe610480c5ce1321d6f7f0b3bb46f4e730e822543c805217d31151064b4fef0837e4381683f00de3ad7b69218d053fb7a200938adcde5c29c0b99d937ebbbfef4f29095e0c4cdc4325bc328b9d0f94be6013204a175bc964c5e618af293e3ae273c8214b229f433f9c39ae7077eabff7cc29481862b3a7ff9c05e6c58f02b3aebec5b20988e2461b92e3d41d3c93bd7a8d4906b0a256060a2dee71c87b5bf94674cd82b7e5f8c8a13dfe1bc01cf1c43d9a4db9594402cf6dbcd275bfed11af3998fae4545fa8eae0daca3f9f331ff42e3ec523dc18c2c7b3540bb609e4d8213a477e716a03497218d0a9ce5a8b4336a9ebde8644a3d840776839976127bfd9ee5c611f809b4a658adeb2eca4cc63ea71cbc6e880afcfca54c8b05049efa762b0babad273249f0d662c92ebae2fb0158e2eb98ff0ec71e153860990d7eaabe7f6725853e0ea2acb022fa02a562c1b83fa474c9ebf198dae508d582499949084b10170c6600a7aaaa88fb842fdefdb0a51173c3fc2a16f21e3b4547512cf00e2bf2e86c5b4e5d08e8522a78e2f5fd85d7f50e180b4e39ae14806893296e84dc556273b358093e1f36cd2d11d369701561fd57e2caca35a912ddf0eeced322d3a153e994b89990eb32719ce3b55e098541ce6b43336e57d6a75f3960e67329d7347240b745740602fc2588c1d0b07e13ddde77dfb786b7a134420b6eb0fd3bb4977c5277799f348ce646f686f6493dd5924e92c0e0c16a1bfb0592156954adeb5fff50e756212a72a7641daa35ca1ee798f9a2314ab1700612692736880dd688f3cf42d399cba6fa426b7ced99b6b572bca77d736d0bf519f544d4d6811f6ca881aeab202e7a2ab9bccc75e1f5cb9691a66ea5421a9c81165324a3cce6bb4aa7272816cd3c7351973b77237c87b096ddf816add6bc249089c8e32027083f69adb506939c63e2dd49ee7462ec763b9c77265e6a5d8bde009b702df5d956a987befae1518b03824d788fa6323e4070f57a66fcdaaf0b9a0477c205afd5bac73e6bd0a201ff70e613bfdb63eed0d0083ed96996860456168edfbd92ece41520f1142b2f3b698c9a77c4f7cb941c87ecd6bac70aa22a7883aef171f534e7f1a66ae4d171ee39eb05baaa6853f6bc9c0f01005790f54f0304f09e6c4eefcb93831d87ee53903c55ed8688ee835c14e77edcdeff677aa568db8e852f55aee65ba629dfa42176903f0f29f7ea0cf6052679ba64cae98f834442f1a275633ef084a1d00eff9ad5466183d56bc2fa92a85468bcf15cf1ad61afb95e22f036f6f2cd6c77e206d74c4e468c35b543ba78fa71ee33cea53e655382515faf2779c05a2c2072f44ac5136e0b7bb349dfa385e7bc562cad26a0c78ca97f3158edf7331ad5b1acd6627d750a4fa11422229845577f6b9c2e1750ff1e57464eb7a94b9ac9f7658ef3edb359ce57d9070fc8204e108afa1c8decd44f5b141f1d846f5724ce9d71ae3d8cc02d6ed2407560fc6f977a16e39debf82c3b457c481395ef17000fda25fc6263418e73f85bd80eefb74a0dd1cd882b6b507f7cedf96f440613e7420f60eb64a2335b69a905061bfed3106642f5c53c0830fe72c1ceb96b76a90b8db5f379c945dbceded8a7a87b4fb80c4506f0d72b50ceb698f0bbb25d44162ddbde3cb378fe709b1162d65bd4967f35992727febd5e86bde30d724e0ca2f3a13de0ba8707fde68c3e85983b36733c1ea84cb4bbd7140e677e3c404f964d32712d5114df219d1af3e96e846126493d50a799e5cf4760ef3a75b806f72266798c46c1c7ea74edb208d672a5b74b10fe58d4537f36bf64575b29af4ccb86619cd5b9d250ca69fe70af5f5d789f3f32b0ff957a1be564c345022161cf558046cc1603993f94fe13ce11ca2093e06d66fc3e4e3c0364e43ed2032967060261b6980656835204d1b49276e038edb1842ac4101e3834460d914ae80819527e92df64791e0d209916341a465e8902a907bbb0d9a95e4c7d6bb2b2335d4d76da04f02a186222bba0f47df32883bb489b5dab118acdc194d5ccb2bcd31a1672d4ce8d59695d395ee94b655a9134ef14c6e9b1c4ea9ff6935d865ded3b38478b9229ac40e51472d69754d039e340011eb073e5cb1d512e6efdacd0f84d3b2fc9dbc84cc24e90d73cc6cba11325e4bec97cf7b62f89cef8b87f7c204a1ccd350821b3408f97c3b156d843ae3a59b3eeae8dafb2685a08e170b95def7a20381780246e71116414099f696043ff2a06a33dd1dfd419300316fe9c1e22758757ae285bf30b6f57e31a336e96e7785db92f3c23f80aa2d16ec04aab6e7372cb3795f87aa55a16280dae4c39c64147bc06be48c552b2df83bedd9d6b98ee5a9dc73e79799d1f65a04adef5e5275d15b34a8faf4d900b87601fcbd9655e0789c795df763a78d69e5cc9369454669c08a785aa8f5f5b4ba1bd0d7ba0afbad1844233a1b37c41ad8adc9652be5a02d2003ef806634c925697915f0920dd3dc6e5dfdd48c3aa8ed3548d4b53f73339ceb57e3d42b6a4dfa93c90a5cb7647e283a6f1bc22d768a127c74622a8b8c4410de904d7b4616a7e1e2466f5a61bb899cc5d6260b19517e43cd99dae8bdc0f74d6e7591efaf9163f159e01c0664e20d6bb0e15e07acb41b29ceb005fc556e1952c9541e48f49ac823fdfda49f6a651518da631df1733b7e6e8fe7a27ede15fd9d75ea27fd1fb64cff53a2ca0453b9da42563a4647f42a14acd60dd57e9199827b99c2930dca59733de79bfe28241d1b9ce1db8f8f7ba7240f88fa19ecf1f713378dc5a8cee749cd77283adeaa8350f6332cb3d45932a0b5a4da227367a3b2122449bbd3323c8a5c6d1224c742bceee0ddac39392457d390d08ecd49a71e3450a4758d82ba73050990680ab40a05e23246c2e0ef7b9c4ce2d64f9c1804f1afc1b77d1c0614c578e3ee397b284381ad3ee6c4fbee40ae877b97ffeb09af20c988b8788e39a61bd2c0b40e9eaa35095bf8400c3e363969ce08fba1d89206da553d1d1aed54c07b3d1588bea800068f5c3db33122686ca1ee9b7e8c5ea3be8216e5db83196c5be7a8f677a11efb0c31e20a3b909ba24ca6fac447e26ede16c3273f6827559bf8ed140a028840f39ed80f5fca380a460d42c71d4fbb09b6b5bb5bb108ad847a39aeb0e24a64997ef28168dc6fd2f4500f8d1e8dfffa9e24b1f50df5d1a2431056a532fa62dba05eef1c552cf3bc05dc672729d4531070a6c4440af506200d3d531ff8bf03a11e3e92ac04df8349a62fd46d4326d70f0cf93012ea7efb90f45c30c0337de1dc971bed54a84f4757a2ccc1a1212c9f471afd8a559e02e1353f10f66dabc5233112ea01a94b74dc390fa5177c9424ec74946a77a787e8168923e209c1138caccb51ae07c571a84d76aeb7f82fc25cf53baf7a41e8db847ccdf733cfbbc27e64e606e4e4e438729bc332bac2a929db74a418a4455a92aa913d97e330c006ac801cd14410884e4dce3e4c5f8801bb2c2639c6a3aa3ba940d653255b0e0dbd7079c7e18745b7a6e57ce7a08a5f26d1420cbed96c0183902e755706c047f91932009ada8b204d77c9ceebecd4f11d83a54b85cb7e43094fdd35c572121aaf2526d02696c890e01a2b3a121fe979e5aee9356f48316b25b2600c827e7e28ec9291fa3c5854a3f754bb2af214c8645a3c982a2440af97ddd487aa9c2a6414a8edc249dab1012e1c0b4ae94a7bc27ed1b3e066ba07fec4030c5a035e6b35599ecb243ba6be9249ba103207f35de17d24d95458a1ad954abe1eb241800f2dc8bb2cb7ce16a4e07fc1ccd7e71cbfde3e24f1e3eb4472c105e868e56881d1784d1d610d57e489ec9f2f204c778430a156d210db03246f4e0eda77e8ad7e019e6156d07b851c88c7b4fadc92ec44b7637826c6cde98547c3f21f3fe1d21a1d9a8202c0eb3ad5222d9f61be2bac921e572f94b39d4a20bc03f23782c457b853b8224701fef6f4ef81be7b2e326257311d3167ae12df3202f9dc7529fdc4a6143f61fb80d03ecd39549d5103eb536cb9549d5aa4d22de415def469290c5a7e07112914ea8747be9253a20177c040bf7347df7f650f41976f01eca5245f2e9f3b196effc03cd725a01b4a4e420ed1a804e3a47b4604626f52b462ddd3760f3483db0204a3fd390319465fc6eaa636928dda0d843f77eb073dfb7a819ee137af2b10963c2e7746a971b58cc0cfceeba4283ac4ccf2886856ca6a108f0c60634e6504e3bfd273025a0f2f67f781fc5425582707871eada029b3c8e98fee648b81519730408e2a4b9912774ef845babad7d207d1cd84768b97220aa5e30d07fc0bcc14945a2dcd37cfd8784f94fcf5414d1c0109690037b2d19ff464deeff511e19e15fad6a1d3abafbfe408fbc1ecea8a539afafa78a36bddf85a37bed68baf0dd2efde26c771eadd1e1b456d7d122b08ea794794ed47ea9be98999231770d6d34edf8601a377dc60e50537187832b0d58973da27bc743155ab9013bb01a5b1e5b41e208f4d3828e83c6363062dfadb832c01c1b0027b69fa431454c2d1f0dfc331769cfabcfd1b5c1915a8fa817719849d9a4df2c38c61624e59d08ae00ed33aa0eed88ec815199c05e96f19d8ad34068f0fc5a93b69710e0276ccd09a7300a5b1f7ff54c035101f57efab53a870038e45d0d3164851d4a33ee1b4ef5400ced774b200d0fcdb601345cf8b2989a88fb4cb23091eebea2c0fde45f1010029c6f4420efd38970c3d1c51927bc3ca31526d99e82e08db133926f2c8e750796381c7e506e04e1144801c3283bd08f6f8de0a619da134bbdc0413d33bf3037e951f30dbdbe98ef41206bbc9a2ea08af7801f1e6083bb4a222efc83b6c04ba550e90b844af4153a2a79a450a0a3cca1dad888a0d1cfb1ca5186187745db8cd6ec4195804fdb29b99c7a99db22637f73fcdf5d4336fbf4f534f4f53470877c556e4269c8f2f66ba4ea5de109f889683b74afd724f57bc44742a6227f7a02c984d49ceafca1abb2bd634eb0715082e7c5f2157fb7143b9aaea898bab9ae216a6b8f9d4016656838b9bdfd04c3e7371fafebb6e6489fca262655e5c4e1d82f693012c74039c37e6fa6d8bcb2b522cbf6fa25d07f36a7c7d2285f3a2aff785382912b3a8d65353cbb7e29ae7cf84a6fb4495bcccf5da84435a60bfa55f0e4181bb7588507122da92e069ec5d4ae7d3a53aa26d6de11c79adb3fdb54c55b3dbad723c80ea2cf12de1ccaa1c83ee69619a9263bd529c81b6556256a239b895250ea1e2e423045fbd37f0b541817d73933a2cf348bd3910284b5be018b3062bce5a99820b6fbec4dc2a22071951670d2ac1f9421e32a916bc1536488a711e749b61f97ca4a3ae4ec6ab8ae462fa8d1224f07940fb0ec556eea0ba997398e7ec5b7c26b95a444e0ef12defb14b72e5f86929c021fa45b4765d225c4018dc2b2754cf546337455e78f5806fe12033afea2ef17433939275c5aad86b5e5b102019e27dc68bf1725132284e4feb1f14500cf9a44c97953e909c4ebac99e506ff13b63e158a700711f67fced1e9e485fc218e730c6a312d5492d12fd0f11a9a2bbbea7206e16e80218096a7578ebeaf8db57c9bf5d2a88192b8200e452d329425260540a4996b1c9efeb4d8a1062e8d6475e21d0d7127e8391a0181966528cd3e384732e314611fee2e20651590df91dff68128097cfa7faa8839c9d214a2320e88073bc866444d3aa5e8b6b4df3a1891f74d1150e82e28e12c1092bb99c74929aac0853f9fd83cef452899db10c5933e33c3f3b79bec6cd6152f3f4ad88013315376a1af077f4f3dcbd6eec7e5695df5bd6e496151003eae6b851856952909bef8b67f21574048f9bf79e54e883540714f79a5c260bee174656b8bb3507c273e8f42acb9c79aca786adc48a4ed5a8447a561c5ace8f2feccaac51190d49eb8a76c84df86307196a1a03ebc5e391999bc2c9e1afe929a7dc82997909c12ae9317393931adf190a658ffcfc5e8069ec4dd89f3de3237c0775b3bb658163ea43d7b6882f75c5ebc6841bed784739c110ec961806bacc7f9316dcf98a07bbbfc63b5a33ee09f5b5053f52af8210a8791d41044dd8dcc975fe78f95fd82ae3ff7acf1434649626409c6c553ba4a441e31b2c223db4c6cf669d82ce469529c0d13b520bac5bf4d28a7ac7badd408cedd738f7b1daa0fdb5e76b8d4c75fc1dbb383f38601f9de99193773440ca0d2e51bace28002eedcba942c7c65e9e27b4217cd52734bc554987c041ad3820b2480adf7d155df91a25f3c8fdd806f40e36ba4712b77a982c153e0e66f4845ac89bd4cd1adfa4d832f5b846ec769f5c486f6772797445b38063f3e14a79f6a39dba972ace138f6f3314f7e79d7985109d5e32be1f9d6f13c0136310d7fdb13c7ba5cc74b8c47b337041e13bd08242b8d9dd266d84ce2d5c3f67d608f509be9007c057b95ad7bc399ee3fc404a02e374a15ad9b0ec69f9633d312963301bac0112e746646dedbce54ef02e4677f93f24b0a9952ac25c325ead39bd80c07dd5ca207c0e111fad7793cafa9b0aa467a9abfb8c3ac489649d73caf35d613d4212b70454920bd3d8a10a054ee62a36c5f200acc988f6c72fa48a22653fd7d1b56da8b0c6e21e59f86a3056ef98a7ff22d14ef94aeb1f5ea2ebc456990d7acce14516c9e82e95b03d9d1b401357b877a8bcd7dc409d6c4176fb6a22bfb91fad993613d08ae8a9463a19eb7b4fd1274d4f998274ef768517981b2c0e89de09958f85521e06a7ea77e0472f54d3063831b2d30607a218d377b77544773dc4929827dc82ccd53334a75109c20cec54b0697e9f686c675ad6b33bbc4f4d692fd41126d3d1817c4fddf2477ea2840a642b608d85033417742039c82bf3023ea6cad08107e759fb32b89a4f35b2679a74c626e0072a33445294838e161c6f5b1b166dd67a4d7a0bd96861361e517b8f07f648691fe24c712b4f6b448130b3cce289e8bfe0d79fa295831d17bcdd107adc87cf03b8c3b946e170608329d10488ddb7cb23e5b80616ebe6439f73e39beff1b145f071938c4083b0e7c18251fa4cdf4dc949b351f5e93f3b7667c6b0f184b06144bdf1b75a30946f96bac6dd9ac4021153c910f74397cde7ef94b37464d9986f868185e49ddc9993661a7c876099260e33d6ad012c3e8693d487205e80203e61ad8941232dae9c9ed72114e51df13b29619ed43703e725c2cfef5e81f528f1034c63a64af57806bf250dfb6660ec7deabefc0167812dd4f3796a252fe46aec517085f35099c9c46d506342fd2d11821af6b4028280fa39fc1d1dfaf9570ad7c2d35ee87752a8fdea893d087ba6cc6d6c54ca87e03462df00e04e4e54195fcee38b7ddde34506bb6f30ffb209052c5129e01f33a99007db3cbda345e2dc6c57dc2a4fa8c7a91fffb01f7d663fa46e6cceacc4155c08d881e288f1e3ba936288d8bce41388ef19adac51e87d3b9406644bc6a136ac323ab73ef208a9e268c5669c501511f1359125e047f4eb0b6ccb0d9600ebac72d46756feddb015f45a8c1f3cab1ae3db998261e8d415834915d4a4ccddce31725bfcf5eaf7341fa23b3c0ba4e30968480fb407dbe71408ff2c40caff89292ac8fbe60547d464deb4c03d53228cbf516bc3c9f40b495ee14056f85073b267daa69f2a476d54b542fd320898347db695f94fa1beea211c3605b6d4cfc1aae6cb89c4c82cf885e516507f3b59838f3a82c1a6bbdea22abe6c0108f9c037ca4b492ccf7249cec3d702d73d47a8d66a214f6d4ade8cf80bc71d53c3d5c8233bacc132597dcf0ff49e3f75e9841fc4ed1a10ed2c458f787793593b35935ae37826d9ee6acf71142625f48312a437ec909b19c66e0f98a25da15a725f953f4f3faf840cfa888354b6212171be5207fbe4ffe9869f388046c20e5478bc121ab824056cf01d1a805e879da2a1e6c8311b716dbd7d88e0a44d2b5b6b64b7310fd6e5cd81502d75a43dcbcc1c31635c8638e17e5db7691c1beae2468e4227d417d2ba0776e613fa98d0bb8e7fffed9dbe702b98c5013b704ed4517309a7eaa40586c4029c0aaf7ec936f829b69fe0a750fe12f9e3ec956c325456e9a49fb5ac22d13a8c2952d37a0929bcef6eeb77701ae41d71f3bca36d7370b7f73bc04bf5c4e3e3812e8eef8e7e07f14b8ee82da43fa629b624f6c80f7fad92f00050be0d7104ed670cf54eed28f9e958a5a27cccf7c4410a43267af2f5beec74ce4ca34974a2f061c6a4a24423caa0cb864cb4e863abd2179d37fe88339f2a629bee2c00b6e32ca764ea571d263375d653955f4b6177367ca15853043ad329417573ca353a903b15fe5dad519c93d3a9f18579407a4a67c188becb8018b03a2bfebd0ef4b96f7736fcfb181073b81b99e729c6d17e5e8252f175fd44046ba5112b2bc511cc7ae7d1af84acf6ade9c3d90b996fefb2215057f9594f96017c554f4cac53c6e3d098f5cb7d617f6c32e152693a57271e01b890e83067929d2a1eafc52f138404bf3d3594ab440a1298f166525856f1cc38fa209b810f6561e8597de62d07f7f6ca4ffab3cf02ca4be1138707ec0e46c078cae5240be647ddbbee4abe72f4ef1b34edf70b18671efd04c619f6b9b15fcb86d8992313990f27ec43efec4c4fc82e99bf316af2b941666cc8ccce1cb2c082fa9350465bf6049f1936289f40bd15e1d803dbe5b804073e02451a6e3e618829c2fd46ef913d1c1eaf224fbd5476c550b81b65b22e629a1ea295fe9882fd641c9449997c33f8ddf51a865090832ae6bbffd23d1acad2131d70c527c2a7390349c3f0630a7715647b740a57e2370a96138491716bcd592c64c0d5072583386709caedaf88d37b2f11b69be88b718307e312fa7a766214521fc2eea8c932f086b2719d8ddca20aa3020ffabea6e2add32ec8059c86c315833e6322aab7103486bc1c294011d0718f84a4a73a887aed63ae6617eac2f82c5b9fb49666646d1b1a7dcdf6d538fdee3c7ddbd672ff38fd76b270477a25e2f8bc8591dcd167f4cce45b01abbbce3dd05a3bf99eb003c927ee7b5e51008f1ec7e6840f24e8abcea4ce2b584f69381da13b80f93e40e84502d3ddfba730dd7ad6910081387dba38ae2c481f5f2001654b079f352a96aee8421f49e0a6e733158889626e50f8d8a8e5ab38caa227ec022dc5bb1d311888d134a4b5cfa9e88559274eecf29686ce9b54ed122f5ac8f0c3e99d19aa8150a5761561b09f010cc623a372e171b552752899a9eff4d9252edcd43f2ed2dfdc853541c5067ed8c10c507aab001c37424699d5c116eaf6366594c1ce485134cee3e47cf959ceb4175dd3bc74cb46c2892c6e5aeb93a302806d837c59d718944790f94d033772c214910b9e3af33a6ff3b479b22ab0e29bcbbad9ed1336c0d74da6c4839ca3444a765121261e01b6d807b933cbf99fcea6e619b36976bc329b9efed96cea0ae76ceff66ceb2366770cda5c326023228ad98b306a7120428b264d60e738769a9bb9cbb4bfa4b8475f8310daef9266820a25982e42bebc0ed9a06c5deb2d3a0ff94e63d24983d5e49a1ce07e8ed82f578c38c4db541f35770af21fcf45a2e750f787b6998d5de13eadcf4983d9b4fcd7ad5b402fd12bae476c7254b3506e784ab16494fb4cb650b5905959a7f969fa7f2c5af6c2482f575e8d77ee6f6ff2f6306997ac5c01fae0f189d0a52a050e081f0945e8ca53da2a4a32f0910f60f2308e7b0a4499587a6f2dc9d6f4da6d37b20ab7e8e011c751b95035fefd295b1e60c0c9bdc2d63655904bd89e3ee978f97cc9bfea7d9ed1dfde19a8e073020bc0913ebd533398113ecfdcfdd44f2a94cdf2d5a5ae16122c98a5f470e92a95af9d388623a3c538941007c493a1c9f0dc39a515dc8a0672e1c64d90ce7f96b8cd7344057848c761d9b8cb62314b95984bea6c3111c3372239c66018af5f60db83fc757801191726e4e73311300476111df56f4512f72cf77799d3746d4ecc1d47f3d34172e574550b59a8e2b037243670735d72d82cb7bc3b9c397033a609c30d3fbef183d060e21190113eea7cdf424395e3e66505abbaf501e308e7bce0199588b7fd1a66ad77acd3b47c8b630811fdb13d664e54c6a54d220b8bd82da9368a8c730831ec5bf165316e255b2c437d7a0b0b81ee1991cedec81369209603e55551fec643abcc1e05c4d619956b5ee1490f88aba7bc815edb585195496e98369b35ab6d469c8069c963983a9b3eb588ae7e6a9f7df1202b30815f7e6066aa44bbec3b563ce1735a8db932df721f767487add543ad608bad04eb3b2f03e1815bd09b04b6ee9a00a7477d457df95ab82ef1ec5478f76f4e68e14ee7ac8d319fd1af07b06ac069d3afa35fc6e12939783dc485a895aa6114dc3dfef60ef4573d23b89a91f77b0bfa6b7f6de1bd19ee381086d16d32bb865792753dce4a2d66ed44005863094ffdefb29516a6164fe9b1fcbe1bf5f546d2c0cb996ae9b2f7f45bf9ec395e8193e79e27ca45db84fb3773741497d4d79271944bc932270495e0abe2b5c01b74967ad7d41d224d6485fef5ca884c9558367cedc79fd727ee29cccca09a75e4780ad3d242f4bd63f4efbf99fabd544b9d1a508b8a6c0a5fb02c5b425c87ad4f988243c01b037035f0d6008f6448cbc7dd000cba5ba7f079b0d9d1c62b162aaf8427c226f7055359d237b73441c6d385e23446466a697874a894e1bb1a1fd6ba875e8920f445b056116fd7c5f0e2ed1d256d8d823b72f8590b43db54c1b4dbcf2e9e5f106ac5608a736fec2f60492b58d12517d9faf2d5c0859523c7fb6d6b0eeec9866da8f29a45ecae93cb36d6e06c2a721bf53e4464437685dffc0305dbe9b2d91b4a347d0def28572d6ef6b142eec36fd46cdbcbb6949b10e0e6d8870a7302c128581ca00314d5a182a94e0987494dce58d5832283f29c19d1f5442128c8ee0b0c07e6704afbd6708160cdee81731b9be504192d52ab3adb3f58a366b652bd3e9d060379b1e731a4e08461c0615bc5022a51a30c98f18e2240fa6b8ae2c5293b40b78ca271fe5338b576c8245ed51a9c8c200f1c86e48410a32855410a05a870001ad3798738e8095e5e7cd4298fb36386ea5423a176f4fc2f8a7403db4fb1798e44d9be39950945e7dd60fa39a9856847728d13c428260eeb24bdf549662ab0c6a9d00bb38f6ff714db51b18a9880f18d32607eba218943159b201007e38bbd80987e7386c459cf0c3a283e19e27284ac1816a4fb07de657e9a083439d54e41c86cf1de56c59914ca15efcd864f6bf7121f87e44443b07e8fe26e0255cbf16a7dcc0f84fd7186a7f43bb59e111733ebcd84551eb17e7acc5ec4fef1245831ca3688035f7bb7b4115276684b999772440837b56fa7117006a70c359f1ed3a443ed8a6c41f0ea4010c351a2cfa5eb67abdd92e6b8489f979e703f5a2c9940c69900e9622d37748c5e1372a65274036bbdce22e1703d5f10470abc0020bd9e20b150e493f57c6ea46da10eb8d9e7945ae4a5ce64d231810b115f2e43d95c4c713975aee9491d5e5c268bbc53b12824b68eb1f2f8eb2c75ab4e34e3e8b424c0a688ea3ad19cb25dc908e58072d25ddfe55dd1be59a2b1d83f9cd2bc43ee44bdbad2d5e6a77a850a94851ccf97451548b70d7e6ec2119a2d7ece34247d9d4863f9fd90deb719bc9a9574b64f8f5b33bd44bd33c7647745ff6132e56c614a1add2491d38ebb25e0ce8e286506e567d519e2ca8c9c37cfccae60e700ddbc862b227bd501c3d3ab3e231e610146880e1328ac114a16c0d6eacd3614315ed2db92ed21a56c28c46340a024de53be0722acb880267d553de67ba2d72e423b7b2f99416e1874dc05004a6d1f937a427fecda0d722ae913655aae4aed29e64b7c46bbe40b03611f640b0a1a7f52f44b33b87e8b0004736b7028d84bf6dbceaad4c70d694ad28dd307ff968673224d358f988ba18a6ac98577a1ee769b76aa57445f8fed6f5f8c9067caefdbab4c815a19a63dd4f932159ac2453302d8a9bd90e91b446413387f6c624f7491f13ea0913ec988113d4e5515c3b30877c3be6336ad01f1416b7207b96b32c26626984b3d9ffb2485ad0f6d84d954159b715de13cac8136f9bae2aca51cb3e12cc1ecb02e20595bad400bf68a3d79871ed24f510af60a3ef92565e79030cb3164ee16a42a26b8b2568e832b0737f532a256c81c683f9d54e28faea1d11cb873e2f49133e7c1a463517a7a13e76a76acef5de70a37548b5783a12006bb9cc93fff73d1aa0216a641ba81f697f95c0502b361c798375939c49111c7991de7e4652a282cdca9f7573dce23ddf339e0664de0997620af36d23ec80d3153aa272e1ffc17513252433d4992860c84fb752ac8a4cf0da553a162e513a2af39b4a14c0fa82fb48493265fc1a1be69e73de185b27e441cb08f739ea3d0ec832cfb3fe4894f9e92709dad9304782d68d71ae92f3e4fbe9228b0f0c10438a9c76a3b891a5b4c629383bacb4d63ac8c1e3912dd08c6bbfe12a0c5e978085590ff91780857781bd97aa6d976a438c58fd5ee7fa31cf81bff2acac189a31c4e638a7268bd709443f3054770e3e57fa31cfef3510ed51778750e8ac31cf69c9fb503f40e48e2df368ac5d7b5820fbf4509b423c20754cf8d71c687ef7e566ff3b6b879f60f7f2729d5d163170e72044b1ce41537b913487f9378f707a2fb7424cfb935e6ac8018bc60066dd82b6e819f56da26bf09cc39b48c1f461d940902be34b8e3a812dd598d7ec35cff1572f0c794e240ed9acd36b9ab4e2032f125cdc0ca6e42908a2ceeaaeb3e22409f7e36015f3732cf92bbfee16cf114fc37aea761e279aa8ec9f35498aa94e789103a9164dd2510b1ac6b694038555d3d37fb423cf8271bc796eea3074140a6723ab77f773d5d673e578fd0a22e268bfd41e23e26d2375f4edf05bce770827395d4a807f6608e98bce987c155919a613c5f276c94f1092f5bed6403b050038687a27c34373bfaaa2081c28bd30bb02ca59431513d2252f29c32a5aa27e846b5d48ea15e383521b521395f958b6497056cedccbc1bc1a1e1ed23fb37167695b0b01ba70c83410f56a42139be9c44566a1b55773c2a833356c0000a730cf1ad4255ac264f90484aa1feeaab0cc4edd1e1855f71b5d8ccb25899265d287de4e37bf52d89895bb903ae3313100e964c44b842a135abba70d2f5e943700126358c6547583360d418b4e1c321f3f0e8bc4e12e85d03791eca1247f9eb4a0c85d8039b5d6b6467abd062fbe7056dbd61a52f72e43f2c2e725160432d93d02357f4d9d8c9fe86841e8b8e3178b2db9561fd35ee3cb3c95509781a2e354be078c4ec74494ffb9ea9ca59e0b4fd19c55d85ca242d1acbd08a75dd46c8223d4d5d982a8a3061d764a9c1a68790a8d8ef56ebab85e02d6c47943ee1946488007432d2bd0b17d1de65a0ecd625afb0debc964ef6e593aecfe1fe3c5804aab6f8fc4d39cab172b4a8fd8d7294c344d4c72cc96fadabca51ee196274819eee2e713ebc6ea88e0ea93647e59629ff0791fb75f8a30780597c0ca0de0da043a9c7ca447fafa23e89005106658c78be9fd2a52a13125c9faa13fb276d6a8eae1b33f342acf294f77a3fb14b92db056d2adbd5c49dd1f8519bfabd6855926b0cd02b4f41ee147b219173c8ec7346a1aa37d9e87ca150cde960b65b6acd352d947ed062b93e547a09014023ff085ed41c14aa8dbcda4ebb2269863c99b22ff4a99a62852ad5927731b7fc140b4263e5e4bba2a41ee77550d83106d680d4a7403630defd5d3f7d750be6a80a2110f4f5c59e2f973eebd1851604a0a2167da2f0f63e3f12cb71c8108f1c4d8156fb6082e94e41ccce16047d6f7c93ef8a67a63efea2bb4fb4394d64c040a01c6f3ad60234f9941a508547ad3a33d6f784bd931380724fa481ba227b363eec95cf30d36f4f64c33a582a1ffb061dfa60ef2171d3cf650368521503013010624ed39a22a68601f60c4e83df33e72f668c4a258cac60d4eacdb95766390b1c500dd8eb5f17ece9989690d173038d9b521166f2c036b163d066b317185415b2a3bbf8f8f9db533ed1398b71f9045bbd4542cae8096deb21aed1450f3ce3e2008169b0cc6fa015f49a39a94f641bf859ee1a3653441c3cb4824e4c1aa69e39d37c4452de3bb95939ec6640136e4b879b3adb163e4b2e98779251b692c1e6c755aa2f3deb088772115aaf0f07b67b4f3ee06ca2a81cc80e637621d0eec35eaaf8bc39adc832f979589197aa0b37520e41402bb4700bc2c3d10ef6afde9e921a6c86266d7ce4d963d5ffcaf7c49da85532319df51c62ea602ff7db48565bfa4ccbe5b791c6ba076ccea0b2766246bcae701ff704d76b3f98528fb4658c0f153b55df35e5c06ad59c3e02d1b107c16a79c6f862961630a7baf31dde6414797aca1536b27f06fcd465094217319315d0493c950162ba95fc783f07faa19d4af6945d3395ca6a525d2a8ca1b4b9c9ff08828ddc461781c3830afa32c788dda615871bceb425bbef0d9b2708c641bfe73ce69958c07e32280fc5925136e395fcd9c674a38cf786c5dbb761205f161470c5c895fdae9ff94adad702d9a1dbc45f60c29a8b75fc7daf2c3bdc5097e3042b1c6cc80f20baafb1ec20ef981a55c6bd4f177ea61866c47d6a70059b25e8ba9cb0d4f9d696c0feb92dbab2565cbb3e19c4e356b5afb78963aeb5e4651ac22ebe7fd3906edc90081c0223c84c0fec4bd23d56e8d12c3fbed3c67cbe23497f0520cc6557cfd892aac3f5356c06cac89e62505919c714996a807a75e0b9c106f57784ec60ac5ee045a207ed922c70d5ea015b372809920bad361cec8449e4ef30e242ebaf54e370902cba419da920684a8f6b0de0185cbb6ab7ac7ac88a3bd603dafa994f503e196506072b322256706c7a91e1a3e809e19510124484e8ce0da59cb5d535b2cb8840775672c9e98ec705a108d8cf25e8b3c3da2e5595a9fd7b5d766c18bcfbb12a5daac97736c9bb6c35f4c142d5f0296b647838c3c815bc81b852ff514cfbbea3ee06e46cc54dee0b6f37a07d4d72dc0aa1f9f50096673dd192f6f46454c3824775cc91ebfe0dac1209ad2fa27f002f65460898dfbcb3b7169c0ac0fde268e535b84039eb0abb21d7a4510f4fcdd4dbc7976f2f03a38b67d59cc66dd8322f57039397a1df3eafcc7cd45f31d58b61b1a8eee460a6a6b6a156c11b465ad5cd721cffdf2aace4c544b6f1b4e92ad1f56fb0bcf9a2fe71bbd423695bc936f57042aac5f0e8a577a92234c557950a6e53384690e6ec2300dbcd61798c0bf45705d60c37b688d51ad5f8b932fe8e2b4d7e8e23b8cbd238ce0ca6ce1140515bec7e5ba9cc2f47d807a7868af5831a066dd6fa3fecbdd976eb3aaf25fc40d61872df8cff8aa4645951b41cc7719cac3ba7b3dccbbdeca7ff073141497692d5ecda754e559d6f5fec154b54079220084c4c2075a88cabd66477873545c4d9958d32fb20119a2bd0492a914de28243c5a6fc495f786f143568bee45213ec5778ad56d4e0e70ea88bc17125097878e4483baacb20d71d7aacc535f4bee10c9a2055d45f4e7881e57fe7f81770009e2c5797d8dcb4c9ffb6cc2581e81f5cc3aaba2fb38fd7840139091f2cb123ec665d5e337ccb17c38d6228d56036cee9d588310a9329877426984bd0af47380b17b2c4452ff60d651da5d6aed838ec1abc8d7653bd548bdd7c89ab668214a33d21d1462db07aaf301016b249bfbda8cd60adc1e267f672c796b122316c01efd20b5cb801626ecdeea13d7896873bf648ede13d78755010fb70e4f940ffaac7d60981fe02fe1d265797295457c67e6d37effcaaaf0bb8776fbae5f426a021fa5346457cd1d7e692065f52e74b1ae6125fa843fbd84222f9e1d7cf3f012752814e996c2fdee6aba7f30560b5f4ebdb8b77a14a87b67be267c32586a5869dfa6eee84939e08971205239644adde79982cc16b5d5bc2baafd271505d51669a6fae88f98a195fd1e02bead75704871cbd60a3a0d2b8e08391f5d5d75346899e0af1d9bb1052ae8bc83681a972250aaa3494bfda482cd75bbe7013b50f32427d3ce1d38b8cf9569b7ff422d5ababbf789150f82565b4c38a6196f33a168559dd81911752809ee98166888e71899da5361a42daf90ffc291c90de1ec52e47d9aca84aceb803ad12989942fdffa2443d025744ae583778a7d830da9ab6dbb69b5137ac41ec1ce70818a2237e8c313fc232a1e15e66650e3be96d2d0c5b2b14411b0a81139c6a6b6de8bb300c835cc5421812930d40b153aa37e912badd11477cdf7b887bb4d6ba919aca19e88ec3358a001d6496c538c65af57a58673826bfb9ee6477c84c9650a8b97362199ef9d404152fb1ec7f7919255bf165c3c3dacbbf4a98b3fccb7895f7878b860d580d0bcce0d12e7fd8ab38e6789799487c2122dab288b5bcbcd1f90173e8ea46e707a0b151c8436fcabcb947cc65ef4818de5cbcb1daa809db1d283377cf8fef0915c35f8244e3ab2f55a5abebe86d9e7be41c905a4710c2f5159496c8ff78ee91597775b2bef6b2472eddbbdc3d8164bce723dabeca9e22fa77e96544d51e82be33b0d79f106c699f12508a7ea8487d31ba08ad6d4644f0a9f3b38b52716b698442f46610c68594bac2afa90d5880780b363a3e64dd8bf2a9461cab6587626d8e9b93002a91768d31e92f15e1c1fbed2f7aac2b54a2904ddcce5d96ebd08d6ae39b968b4e7ec959c011c775062fcfad98d651f73905edfc041a068a7fbeb85cfd0a2b07b1fcdbdc1be29de1e1b8c9ded6c6c7f07bdee6d4966934a0a27abfe855a3332846f127eaa22bfc83fc1b2511fc332511087576f6f406c6a77a31f3886a6646e2191410bebed405c29f6166a79735fa6652a8c4b9d61fe5a3c3367199039c57775b4d10fe71af9f564faf3c5d5dc91a66ccf5a2cd857a26ba9b36956d7effac1bba7abbc55f366ec83f547ee6cb0e9fbeac7a74789754fce597b59ceb2f6ba6571efff4cb42e11fda2d5e81095bc5be17a63d786ea1da53f7d830450fbba6a0819fa0344cbf3966b375d54969d6fc237c3d432bad4c36e47b91176ee38adf5f2b2e4f915b864fa5f7f2851b79a604e52accfc3eab587df505f1575f800931f6fef8a9b92fb8b8f6abafa5fa7be60dcb9ce9045a2b20c4bbd3859bf322ed114d1fc600eb7311842de3b96e31fcfb54384195b15f1a5698b3bec5a5b558999171b22732e7bd24e2ec58fa07babf52d50dbfb32f686ba16ed3f46e5254d7bfe97bdd1f9cc7a3f7abdce857bf2959c80bcf974a367d2f5f78b142a5b213516aa81159814f352a05ab3a00f811f1b6fa105620bca06e2ae79494b59742bd9c4b8c0858b7adba14ea6e839a8addedba6d15f5811d1fd8afdbb45fbc3bf081e3ba4d1595eed01f08e370bd227e0cea55c488200cc0531208bfa1c6f0610fb62f79c375cce47d31019f15d4b93f06b37c1db110bd2725bd503214b429459d3acb98b1072bfceb2f0b08fb2d503fc8a7fa7f152c4aef07c63e1eabb4137677929d90b8b57b24b26ff5139e24e4025636e9d056b69c21a5a67fdaab7451f4c0ca40e6b23e57dde4ce112f4a2cb90075df8695ef9ef0a427730d7fa45b2c79565f84a09669209013ef88e06bb8029e7830463fb778c6e871103b05887cb4f975e3b1146ae98c118178dffdbaf14c0ab5712635267f3bfcbaf5420ab573209fde1aa08991dd443a5e0131ded1b485cd3a7b075e2966613b0d4ebd59f165ad2640ff4dbe2c824f23e4cb4614545ce6eaf14536d58075b8a043bf54bd7064d49113d1dfef3fbf8607609d18b420c22e0898612691d3e4244560b7e7f4a137ce111191fea171f188228233a9a32effca1e707e292ca7dba08818578fd28f284b5176a6de991d29cd2a4ae63121ed34574b08fb7613164d0b9b791b87336e0685aacacf31143249beba98e2fb1329825d7af1b876111cb181b31ada03ac851bc036f4b2d016363e75c0c9b93c1e262fe60a5fb867999c113134c96cc2dfdb9c1791d808429f58a2709693ff96ab23a7670211ec3c7e0ec773d9897b935b0c5a709df69bf8b75722209a4f85773a7e8c08e898e6bed8c1eeea56a6ae35d2d3b7cc91441c2e9eb559e83e962888e7de4fe8dd07b3c4d0be21e842d01130040bbf86f0daf3f4abc033f67d01da709a79950380e793b49e53303dbdc02b8d8d81673d6b9b7ace997c503f1d83934c7b6b264d47219f92fcda3be717cd50429528df0f6e93d1748c8d4887df4262e401dbdc3dcfe1dc69a29c561831917ae9211793688238765c246f54accc3d1789647e56f8b3a77954f43f96dc5677de85e0dee71cf19d55a43512fe59562e3cde9d3ec356be92caab10ef33ac9f4be717ed8085454befec2272c3189174feade43c3f6f8df4c66b48cf38e2a3db9cf4560814569b2c3d734fcc2d589b0ba00fa35d2e6ad51d33ac7856d55fad1ee6d034fc5b8ce67398a4b23cc9c325c4b367700d458e38eb775c8e251f6e50fe8dbb74eb3cd9cb47993979cf25c6c950b05e7f691a97186db85220bb9d4551827f7602e93c9d91a7534478bc5b98b82465ca1b520d92d182faf5a38c7cff1b03f214fe0662e9475c2c10cc8a48fa63ad4a25c03fa007d04aab75772e91486d5430123f66f4aeea2cf9c6660d8009b0c0d983349fb46446ff7d0b7bc709621dcfece8343769f0d6724c0503875c12c11c2dbc680be0ac9aee75e3ecbdf44ed1969f2fccdecdea09df96558e2c10eb2847162680080e993b65884c363815911d09e6269c7ea67beea88bdc9642e8b0b8cc451b2a27649d4de0670f4fb8f03dae12c0aa0463357ab73ce1dc8c813366a3df174a44efb4e2e24418019c0c9fca11a9f24182624f61b9e442c157720758eb7ac28d9df4784bb1b0080b524159d6dc3302f0e4a9587efb0c7807f2770c3896e8bd4d19c768b0b2b40f7aa2f4c539a4e115088ee3312b76d880a1d1ad53fd84f6920d4c0a5c544c6d05fcfb7ade92d713a5ab3f7b3df31ca63e2d625448e3488bd90d7abf8a320daf95add62d1e85c244232dcd61d03acd0425d89d26da0f389963b0ddd2647e3e006b1c94b0c70a595a7e13fab8df6a50a621634017f880abdb7b8c848846d99718b270164bd83822d285faf67e2ab58a8bd29af5929eb66d7cdd6b83cba347232b10ee562d9a97cf2def3a04cb80fefdeb8fa20a18350cdb0a8e4153788dd833fb6b95b0dcb9327f110db9f340cc3cfdce6f0de76577baf6f42ee4630f22117e0fcf8e3d1404e27b7bf182339508214bdb5cf70dcb1d9804efaf3e1113f377df593b913990e04bc7a84cff5c3a201e41dc6e3d3291ee027dd217ea467c6e2206e33d5608c3a172980304be26422eb5744e70e878b51858ac26150ebd354facd2bd3fc0834069d5ee0da56187e977717291b17b3bb945852175962b7a04afbc130dbe8801634d2a04c5fe8c5a8359f8bf1aabe4f713f901d9af6f3bd0210c708c9aedf4fc50f873a91b78c2bb370fb5c9a0ed93ab236098c461469579ef29d42d505c77bcea60872623b8457a65d4a6bce0a77f15de4136e046d477f1c5e3e60a7ae18018b9b78eb10ad06efe6ebed60363f830638747a1934369a1fe823b3735484788def3f67904ecc0bb50314d2025ec8b6f0b9b6b406ca239b3b1eb418ef583fe2416e2a27d7376d6e4d775456dcef0d5fa1c208df99cf5eb138e37f9f8819c68aa264f095f51981bf310212eb5546b732efe999289aa96a46c547df42879a75240304aad377cc1f488dce1751d3164592d9933c81719ccc007509205f39003f8798602d8d4fd8e8f8f17986a1554656fc9327f4b6d80381dd75b6f3ee270e92e7f9be21d8e9eefa8b142db231f3dc1ca28fa800651184f8ce5644136dbbb5d94f03a34bb38315b20856933e7f2c52f38be4005dec18104e09724b2b25318712f00b487faad67903f86c386fc7c8bd8bd78f8a851946cf51eea50de2b865b63e6940f7ad8f636ce866ae350babae81d2ac41ffebe7aa33090acc6edbc007a7eba6713bd655d6fa0fd8a4a1b95d8b334d5afc00ba35fa2d6e18960f227efd10a45e26d258cc86441b4b78fb0214f13089482bbcf11a08763c951188ad3f61373744caab57fdee6d1d9dd3d2543f513957ca0d932c2d54c67c880edb03a56badd2e6db75a484cbd7821739f3c889c13f7f67a01eb6cb3b81c8cbd1673f25abee8d79cc2c2c3e9adb9e36e71890aef55f526a89f388b229fd89ba607d39446673f72aa03fc3e2eccc6b5f4ac15fe5cb57e7c1e238aa2a58a12388516acd00b9716ae12d6b3fe5f0f7fb950098b19ed41eecfe6b127fc81fa0cf61c36d778d1ceed22d1a9e6829dcd597c548f28f73ad33a1381d0ec46452e5fbf5ce2360ea8fc5e3d40492733903b90c32d9ab0288e8b4b10833510a1ad8aa4a31bc78f935b6b111d4c0f2633f91eccea4bbe3b00b91a43fdac8d6305565daabba46d9d1cd1f3eb95d4612dc268436ceeb43d1b9cc1a43c876909360abf0a3a84216a9304451ff93f14231aec6e20821b2ddd8f15a37d4b30e282e299b2e47e2e99a5f8845b9c7d6b4064c740b65570f47084f37781a219479a423f1989956e2c5449cd4190dad3efdd947baeda0e6ade219747e50a1ee462d2866afb50645a8267ada8274c8047a4b559df86b143a059e01f86ba2d150e6aa8166a57a292cc0d85f4c87b77df0409a23ec901052ed0d09bac00fa9cae90f445693c75b8d486c66b484fad1393be37f5166c37c75517361239675755c64e575d6b24623922c34d6eab0818589e58c9aed5b59a5295e487b5a5bd4c049fbfcd35aeb50164c211830c1a01ecef6627afedbf08548b3379896216803f994a448d18cdc69ce793de11b532baa9c589ac92ae3237a57a01001d6ec19fd72b4de8776f065a91ee7c09ea08be47b744c9ebc4ad2cba333ae91ea0740b88c09c642346293e14b84192557dc192be7cc30d179c85f131e47cec1532476a70e5e94b66f2e7b7af3e868e40c9a857ce6beb6eb0fcf29dfd839bcd4f3471974815e3722163d9fa0903e8278c40ad1fec9f7a255bc9025b0ce8697828880373ad841bc16b49a679591e803e2c45d9c70745936e965e7eecd317587547883113691599d083ac18ac866b18b354b7563425dfe70ed9f9ee1cb8dfead9a4b6980417c265882232b4898341800307a6f33ef71df7f88e992bc4ca25a5f50e0fa87d469a216762143074ca8f39c84604baa6218dc85501c9f7f4e35c05566b056ff9a031c186ca72d33eb4801ca2b2188110ef551e58d322e76e1d24eccce541e60fbcd741b1ca1f8a97adcd6015d6697fdf9bbe63a3020f4d132aac51211ba10c03bd87fdb8b6126a4ebd4243087ead4154e0ba3d3081c91450779506273e9d0f208f58112ec0e58cb688818e331e06bb23b782576d22ed23100c44aab4974bfd6a1b2956880d8793a49dd9dd8308f5885a6cbfe08b87701884336aea4e65849cdf57f6d485715bafbab12c62ccaf648cbce7e75582dcdd48757062ca2726e90905053fe713b384469e9aaa0214c14c4ef1b4e749cda170c15c35a01bd690e84cda4869e917762e1b7e9b98d664f2e2a8923bc3cff4821a5f504d2f985f5eb0c0cfadc18b36f882face65f7f2327f41c39d91e0c4c2ecc26a5c40f9ab0b7ce19ddd29d725b633a0fd00c47e2a9625f0cf87c5b1e1c6f084374f0feb8e585071ef06403f1f65eacd6af7c1ea8aa42790af3f5898a18391559025396696d7e9a103d53d3658028a36aa65530139bde958efc2bbbbb9683d193b66933ba49c562a80cd978c4b98dea772dbea0aef85022de78da132ea1039c76d890fe807bc0aff2ee1df657ee0ddc50367632707892e48388e5b5886d84910d5f3cf77df667add75982fa07b4a08cdf770064d4cb7458cd86fa0ec1a14997dad34277aa9a9dc221636a8c145d8add6154eec288ad2dfc1afd6dd52691815c92952b54d887f4d706415494efde6c3ab8468d291200df8db466e989daf48d42da672b86bb8d2e231b93d863b6eb63d610da7a30373f1fa44fcafec1dcdae9e1fc97cebd7dfa008df3877226b65d6c2de2ac6cb1ed84fbea7ca859c9073dd380248b27f626d78a678924964481bfbdb0a83f6b97feb9b0e4fb516312db8b0a97153bb8a2e6c6eb81a18314123ddae1755d8da6870824e834a8f6dd411318d74b0146c6284d1cbcc50a8969af3c0d4634f2b8ebb1f17cd8b874e2e5e58968d326c7d0cae4a849e2be3dfb0428bbe3ba531bec00a774f39236dfd7fc7df2094d424d0abf7705eeaa13a782ac0da4e9f5a3d744c306948c6a7b6156c16929942789888641637406c8f1f9209b391bbb22b0614b0b9175149e6e539918dc8cbaca0dad058cceaa0b8dcdbc0464e555af433ff9be225d50c443b00a490c7dc246f614d693fef2732428879bcede809ecba15f2a1790fd7f2681e727e9fbd6ca07029380e7c66515fd302fc42db5590aa52b68eda2828d1935c6e2f05b8aab47928a0fbde696ba54af0b72ee49c4b6372ed2d6d3ab920e5f767070ae0f4c9585c833cf7487b4b7643fad86111f9cd92ef73869450b66c1671513f2cf8e390f012c58d325b33ff85568d762dee5c3ac6b63f4410cb95ddbe10d1fad8b9d4ba5aea097ff1d674f16e931dd0c64d4cc864d15df4e17879f8eeec55a957afe68d21f6f405ea878e09cb0f53a88b0d6a95feb4a16799fb2280972c21b12f2eb9e96f43c4fe640e1eb71ddd3beaa951f532b1c59c425884edd65dd419225e37e8a9ac6fb1a4366c8f164f413874a75eb81c5ac74307dba8611aad6d7039d81665c0b90f5b6c0b07bba2bc183f8f564f781b396525c0c22b6c3a1c5bb42fa69d8b54e3c04c3b16f2a3a584eb4715caf76d9b47981e8850b78ff661546f568f0436669f4b33efabc6142e0a366d6cb250c57526cf3c148c580f489678df6091cb3a975c8da613265bdcba074a40baa58bd944afc496e9f98b99b592c2b79d78fbed80cbd5911c6e2b8ca739743205b220ea892554ed961dddfb32633c1a70db755bcdeb1edf911671a94c302ecce04e732c58fd188663b05ac2e5687e3f1820bbb7730a7864cf9ec0385ef13eb9b2cdb50d36433d735bb239cc1d0cb311bbc668ea566da4deaba47c79db3d2858bb2df069f21df4d15078b1bc383c05976a95713e93983b2386c26407475f84532e0c39ccb4ee02bcb6fde580129af12dcbbd9e98beff90d7e3319ec29664f758e6a7342e9e32126e45fd526374abb9c74fd7f2174d439060b82db7545417edf4efa19e67c7e2a5c2597f9eb9f0420d1a17c3517dc0d0dd632af40e5504fb24a772f4f7e084e91d565cfa2386add32df3b6a9926853437d14d195830997579956f53ae6ce658c2eed260599aeef3da17e9e1138cfab86a3142e6d6e9fce48cc2cc3806982d2e5fd4c0e1c312a2726ac110815b5d9a2624647c44dbca5dccdda796181b90295915a2811412bf852ed90a1412be28f06385af99729c84abf1eb46d8b5f81f05faeada7fd81ab230e45b853c64ce7f59bd9af6a581886f31a5c07b327fa277ec8e97a354f55cc6f3403594fa54fad93128f0a2e0e91bee1aa82983995276518438d69a2af86c59a89ac4f5c6af94c80663565b3bcc8874be42157918c51f0bfc905785be4d2f5a632730d2e7ba6922692bf962a81d20c36acf5d725d05b8ecb2acd8954f74e2eef33a692a0c024df4c43ea0c7b0c55b1c6dae23fe93738f79e2d258a3d3c219c6e5c6b28dcfb09e859df8d9f985ea665e733dd4915badb22b1193d7162e1fbb2ca2b8012ea2c6b3617d9d0fb88620dbc3198f8fa48c346b122fa315d4206ab3dd189b59cf5c161ba3d3a7f6ed1fc69c86dab9d3fbe33c7f7adb45cb83e7ec0f1965ccdddec29add845d99cc224f7ecb8c2c574d68536a3be70ef3982e772bde77ac33ecc87ae504b595cbad9c155152e793cc56e235b645fc83de548e45473692770cd6ba1bece11fe465c73b058ca0caa473b96b00c2efee76999e1011484ad6403c6b773d14e7192550e71031ef44cb23ac9c5927d80babbce5eb3cca986d40f10ca54d6d79dbc08978b8edee7466a812a5b46afbc83abd4681702977e55be7a20dc9fb525a7750d85fab138a6fc8a66bc92e7693d469087c6f1922d108a98352ba65333f37a2c45f8414f18e9b9d332741bbef0eec815506a5d39b2163b72647d34101ec87c57b35d0796cd2641008469f8e6aef52c6e1377c1884f8634139f422f666868947cd6164cdc52af31552ca12fdc976c76d79bf008eef7fc8ecbfc86c9ac6f6c0391e77f0eda6a62891dcd103189d0fdf512bb1a789ada67973d3fb4109fa97c4c43c5471e70632922a927e05a82012b9ccc8918bb8fedc4ce25acde278136ae05ba658146ad2b81ae8d40935f0b748d0b0312e807c3d2bf9027d73f1ad7194ffcafcb739597e7183b8dee94795c6c120803cdc2c28ee46967f21c88480624ce8f9c345b4abfdad8b929823a837cd883f29ed9dc0014dbe7c41b83aa32136f9de279eec701265a26dea3116fe50bf1be92036a298511325b78211edd8b0cc23e284dda9f24cd5ede194bfafc6f4b7a5d6de7240d9366c9725ea99c98637525e5a1f03be5a9be22967d9236b0ac6189f6303c788fdf0dde65e16af05679f0eeae076fd948b7f5ebc15bfe62f09ebf1fbc5b8874d08048dffe35919e3e8bb47760911ef3224d48a4919313e95703d75d30c92944b954d7a23c5c8b72bc87284bd7a22c1851ce4fbf14650117be93289974e1b5f1852c6dc8b258370424ffb22ceb5fc8b2c2b2ace66559bb96e54a2bd57712e6f942a922d43da6baa75ee5d3b8ac5c0b73c5c26c5d0b73b16761ee7e2dcc05eed825614e21cc707afa2ccc03179f65616efe6d614e6a9f8569b330c74e4e98917325cc6711c92ec972fa852c57dfc9d2be96e59165392f5cc9726f6459fab52cf75fc972f3bd2cb99acae0fc6fcb72fd852c970eebcdbc2ce36b59d26aff95309fa13021ccda6785695f2b4c16e6ee5a986523ccd6af8559c6853d1226130d77cf5f0833618dc9c26cfcdbc23c7d21cc030bf3981766722dcc9188648f6439bf90e5081a13b26c7c92e5e15a96e3036bcc6b5916f69c063d3f7f21cb73a63171619f64c9d8e95ee30b593234acc8b29c1efe6d8df9852c2b2ccb6a5e96b56b59be8a8817f2e5852c89342db437ca1a5a05a5e248d6a435698b9ecf149c68b03c7c8b24a2528913e9d702cb159e5b9e796435b4974879bb8616d9338ea511943fd8bc1288087cd4dd02651606f6071d64a6a0e04c7ea0e04475d91fe7b49bbf861bd9b0e70647a452064995c25c1fdb2392de5b8074074d502bb27679b6f970e1e2f030022a2718575dbcf5061ff367702653f040557e0f67e21a11a26774b1e0aa13f41797f4a7765ec39f684138af14fc186a1139c21a8880283a3be24014024380a08066a6c858acd6079a2a20602038d3c8f40e57f37785683909e4bda23eec0a05e81bcdb68779d1801954bae3da1629c3026e09cada783d98db0eb83c65c5dc75e216669e150a557388d486f12e57d72740d410a4233cb2d01373534ac15bc96cbf556adbf4d1636f4c9b7a7fee6573ad76723f03bef4345b6e788f40611f38e38d87adcd483057a8db591dd53de8d7e301059d88354884f774acf4760d10db6078f74bc0fc0ea9f7f4202449aea4f0e66d142e3e341907f6aa05ba67145dd7e29aadeadeea5a47a5e64a58a1b8a7cdf749d676c09ea303f6671e4f132944f74029813ef9b53a8206c9402ba57b6ee6171870b003edfb0b0d43ca51f174134fbd8112705be7bed64b4c867467fe55085c2655061843e07ba97b6da8a71072b2abd933f517d9f0499b77e81deaa0633b228b3738d4283fac46d047b5a79c8d1f3fac85b2c652094449f778af578b018e33559271114c1ffaae3784189b484e6f28504c847dff05e4043eb76024eb9381beb52d6bec3e0004c0dc5b4de562c61cc42ea6a7622704a7645881e89ecd910dda7292e689d3d45e4be4ba9fc9a583244e7acd077acd957ecd944193309d0f04687d874ffc91bc7b6f3ddd8fcead9ec813793321ab40cc24c5e366b27186ef1586b4ad780b30b0314c1ec758e0de23bda85bafcadfc89d7725af2dbf08607c40a3012736510634e65b75a9ce72aaacb212de98fc412ab7accd0a2ab73c20ece6354d0a6cdaecb894f0b3d2e296cec71dbc679e9e8f91d3bcc94dc1530e817900f9b5bb9f122c6b28aca17ead1fbcbd9f21e9ee394938c582baf594b42d57b5fb08409f712e36eed4cc71534cda88b4c6b16bf51d5591abd8a5aa8c255cc34c74a724475fe64f6fc937b75cb6adaedbe16cdfed09e8206ba8c2172b4d3cd43a5c39568e707a4701242a0deddc919a5d10085c4539776f37e9015b1d33dd8d3ed3d874ac5715b6e478dbd12f39382016d5e3c6f598793b7aea9e69f7986cd16abaaa209f2c5f5424e994771bc1921000098e152e50dd00b58c669cdd8e0250fa39478cef97cd16c4f508af71c184235ca3e5c8e46ac2aedc2a2b50f760242eca0a93839fda4cb0a0eff090eb4011961786dbbab2c8b576baa3ddadfe681cd72d8f2775fd285f78b6375d712a0ba354c600c726001c21cc57ea31069c8a1b606aaf8118edcf11db8a242069f07e3f0acb73de089db94677e19b06a4a4faa73da3e192184f9db62d5fbddb525bf44a88e733cd4d6f23d7c7b43884186ccc8f40882ebf86e58bf6411531e75f0f98db40af2e531dd49eab22685e52c96f23173850e29ddd6915d18bd57e475eecf6bcc565dbc86a4cfb3610de4e45a7cb3edc7330879eb96b49cbb7b69e7b9025b967a2043ad338feda3afc1667bebcffca966b714c777f94796beb71dcfdb52d6500e125b7e87f690a19127a2cb54b68fe2e6e1bae5077079a0a7c6999e63afc9129117ca3b9601a2ceeadbef036aa0a8fe7f3b49019004f96af3e9e667a9fe1bc0f2ddf1a3beac71327692a6d20a31a500f9f6bd815d44ea6547782cbe38ca518f09eae0a4afa99642c81feb1a2af1c90c40c6b7ea05f746410b838f07c7dc0e4e6031319b28bef1d78f52a4a5f51ecabb44c0337eaa16a54be2bd49b6386a5fab8cd820fa7930351f5857a5a77ad99141f6da0b63620b1df76533603e5c70728c215fdebc0bcd8611651a6c5a1c5a0d77d0b59a525db33d06477eaee1740076e790e2dbb3933a135e66438a0aff531518fe936b45af8558cfbf09ccd510e1a4563efafae09c52bd1b3a2eeee60d3245f352a12148816cebbcbe87ded32b50dd694c5daad54551ec3cfec4868898f3dc28386946aa46e623d3149e7be50b65b0132372873165183ef5ba7ab9b9218af2b521ce8b1bd312cc90c778ca4a33d4af3cca8e8ad8a7730ed565dc48f89476040c15837715749274d111db491858725b81121e761cabcb0934adb6457077ade4c79cd9855da19cfc6e086896a899dbe8b0564d54e6ff02edc1d605ee9fdf767ec6b4cb34585e883c409f46fe1ae4bab8763ceaf2a7910f50f40a87ffbca61fe95d795769a003fb8b3b2fa86ffec8d6314659f34db06119d9b27b055cf148005b30940fff25e7fd641b6cacc2073f1590f7ffe592d89cf8ad583eec9f7026e38b08994636f9c2006a4c1fc3351a9630dc4cca1891639e254e4acf3b16b90090a41d53dd213ce1420cca393aa3b0aa194656df2f9841e535f1d1f8ab0d48e4e0c0c19bbd4d528f2345369877b7a682227418bd209ff4aab285b69c124b2b863dcc85bea128262c42ec5c0e91eb6789fd71d0afd1964c35296b99e3aed9d9f9ff432c4645023ca6d787e849b09a62e6d4d9ea9b6662289a1a38ff17447547dece3a00ddbf30fb49ac3887e3ef2bf0919d32a91450ca1261ed31aa0845ab2cafb2fb6c658a0d56660568db42ef120e7b55849e1563a3b567dba272652a81fb51d8f748c5daee4c69ea6cb11bb95351e00ac334667f248a89d53b639ff812e09bfb8649b30d8b8846b6a4ed5e63224748dffc535c784302aef0088a89253c02544a484025157579c1214a4e787c4570f515f5c52e687547049cbc9a1501e51d5e10197b96cd350965a4bad143ee88847d032fcd1403e38d2d5d2055a0bb8d924cf5fb7d5348451c85c22e5a05658a24f742ff590d8542ae7b988df3f6b3696644066d4d3d986f5c1e7efcf7cbe0c5ad507403c39327e2cb9bc9348bf6c633b607b01a22bb39ff645a6fca0221ad369fbda68c2b0eceb7148b9dfb0aa98fbfcfd5c249fcc8c0663497292d6aa0c5a8e26ed53835d47372eb51f2c25ca6d646444094037b8f90fd240c051593daba75a9da735bcc840a584d1e95b0b37663a52cc94e114a8bf89070b1765d9afeddee9efdc8223e1351ccaaeffca94450e8d954b6a5c41f6e0a7982f190c129adc932691fa4fddac47c6995d66fa43095553c507b2274b759975426fdd6c43edcc5bed34ff2cac5fece69536d00c6aeac2045e50059047cafcf2ee8ee8f1f7d866eb7742ae042df59f4f7b9b8d4a9a0edfcb7cfe0f7615ace0aefa670d8efade0e4493c136a624e397ca98c93bfec4e19b96c2ad29b293060932678fc89cb57fd7db999bb707721df204bb1befabce9f49e1f23ea6c40980e40f2e167908f84c48a3365cdaa9813361bd48deec29575ca8f0e1321d76a7728e2c1ae8e1f23ebb1d9b5a8929bb52dde5a2b3bdda0e00593921b09ade08774537d213f66646a9e56fd313d99b6dde2e85f0b976f580b807e22a927fbbc12a6ea0c314a6ad5e88ea545c53bdd989fa62f3e509319ca010e8b3f5ae979152917fe95778c26036e8aa92b27f98e1cb1c5c5e49ce902d373a98d1fb4ea40c18b6a3c4d6b6cc4e85d814cdf628e7a7fb67ab421ae30df9744c98e68e34637e9047fcb1418e747206d032d81ec6f2b0cde45153b316d79f1e09f77e8a771b6ed94627e2085593e679f3233b2b6728875592351c190c70fc518fd68ae4bab44bbecd824becedc9c0e8956e71b878abe7c959ae519ea4cf1903135938bab87b02a2dae7531f27ce7d3d111b6622164c0aa383d79cd1f55b98be1379a84b0c369e722b12472241f6325129d794da38473c7b5831ef503ebab829bdf37394f0f13a8e3750086d3835c72709b7371924e6c42c714193a25ab8f74c6216df58d986272d7538c0a80be04000dbc02037bb1907428e72f3bfb5146e1c3227d6c5441fa4fe8ad3c9ac45a99bbd22db3cd7a89e5699ec1032847a54d370aaca65f21bade41dfa2f40627820dc277aeb5c7aef4c5262de20b0fac27f699d8800fa2c671336661647da0facc875ff5649683227ea28b3d3013c4a1e1bffa4065f4ba7341aa4eec84347839f526fc074c21e06b891e06e5373240e2c224668d16ea0c7483fb3d6dcde43b843c3f44aaa67784bf474524f852c7233497fa51fcf736530e17f03faa29cc5522ab99f17d6a95958f5f476e6d8ae749b14dd513f1049e5eb4037c819a99599fae2ba6afeba46e90b0f13d1f25fb2136ccdec4615ce46ff0b454771506ce89950468c5a48611da2042d3d92760ffd3a97294da9dbfc2a450b3198e122ea6de600e5f14aa74dc8806844dc1ff522d34290ee6b38cfd07dcd82ca3c3c5acff4c092a01eaa8949cbb53c5176624ca5eed968d4bedeb99ca051bb293da7faa0efeaf64d46978a505aa00b92a3216a907370d9def388d42bd99b65ac70b091bcc39ede28e375725dab6b153aaae63e55793ca02f4937eb5de9670be4eddf32408a7f6167a42aeffcfbc0f245e878d7fed6967cbe3625ff577d9c440d78d6fad9fdb1c7ece92dc7d8a04311f4acb1546f4fc855c67099744dfabe7aaca1e4a4610423a6a9f66e96eb9852f73bc3b0f14b5a13da550f3730ced63738d8fab2b3b6e0216aa06dfd86000960fe3fe0d89eaf2f62ad184e01fa08260dc60c24a0e6fe6b3776de970d1698e7ac233b7fd19199e60251027767ce826839ecf5e6f0b7bdb9b0dfc1f5c55ab4c5dd8204876a2d7fae9ae4f56de9f3368eb5d23085c77b15a749e2ecb55ed2a1b1934d22e9edd92fd98eecdeeaa9b97cda8e392d867226ce39ab89590517b2d1428e2fa797929f6626052f231b5ac02319c9e4c2a22a277c39c677892b956b93eae11b9384589db0434a64b1fec9226929f8493f9962cf5f985b63ee8fdd861b6f371275c78e0ba42db58c35d24c5c5c0383ce36c70b8931b9667f6572c135f7cc4715da26db0bcdb295794b27b360321e9e81e9889cce79156e74f39551d34d372fe51343a0b07d7932735d5524835318e8e29a337dca7dbbe3054ab57b786f1a5aaf155ae4952dd76638e8fe4049c0238216894c8e64ba3c70e231a82788f7955922c3b94773a790cd9d51ba16dbaa56cfcf8175373759165b139576857a2a5daccb7ad0af670c5e482b9c3ecfcf64e98cf88d7b1d2b2d4c36018a287f3c8601bae6f7a4be18a1a2e34aae38a6343fbbf9055e378185b83d5d35d06b66159d1b6e31d0b293403a32c935e5f4ec1e9705ecfd8fe48a715f4ed0edfec6e8f690b279304dfdddb86d8d4449b17e2f8e73b92ac9c231e4462775bfc2c3fd38e1355bcb6f85a1edd70ed941dfeaea85e3ec7c6063648c7dcbe033188d31cb8e9498603f3d70f8dd817e2557497630dfb5b1b5a52746132611d31f51c2fe087ea9a7629c7b34bab757229881474c5b8ee04cb023991dca6f21afbe57426899b69c06d5736080219218237633c9d28cd181b08f39fb31cc065468052268c835aafe0dce15936fc95cf774dc6c8acce919d779ae708121ffe2da2aacd322e1095409d5d5d2b39335169c2d39755549ba17a7eb1deced2950e796e4b29a6175c46051ed581e20382cdf29f3b299be58c9a95c828688ae7964bc4a955a748972c5a5408a8320194cabfe9a16689423563fc95cbd252995b113f6762cba0d08ffe8dcc4636095de02d08dbc274e9cd22f39958f962f3cbf48fbcf0e2fe1bef01cbd18b87339c72acf1f37d16bbdbeee96becdf3174414d661309127bc5b423a0d6a958ed1a2ee463de66eb132f2b99de6f2b75334d24426f29013e81da38a300483ad97c389ad4853764b60b7d55ddd17ea23c3900e5ad88abca0e102c08dbbb8c7639aec6b22854683a034b442187140bc007439344259c9833cd7b28ebba7777b07cee805bbd23c1f955c9c39c5f9acaed21d5d108e80a27670181af9a91d4d3c4c89c7fd10b028fabe83d67e6f24b4d723d7601c02c234952daa85abdeb588c3539f7d3efa9cb3a424487f41acb70e0d1e36ce96b1673c9d1428d6cddb1f56d115037f5d360b24e332beb14c37b04ab658e5fb318cc8153de6adf1a50dba9ab3a30ed8c0a0dc64cb32663dfda79628d3e35cb925692bf85cbbd8784ce52facd3ab353efb1fdb02eeb253c5aba2fec386e99e99348f1016542d707c36aa3b45b2b2eb65941d49e479c7dfa33bc47d2ad272a9bc0d183428c2110a512591c7127956438c9d9534710f130701a0d51c65fe9005dd4a35e492ef39ae224ab25ee2d18a020963d90148c834639297357e0e5d6e758378c06167566a6d814cc93301eab2c7a3f972dcbe01efdf2bdb42fd8492093d9b52333f2a2c37fd095da1eecdcbcf6cd0c8ee583edb1dbb315da11235bf7cc72a48b039de5cdd19a36b94ba7537510730b42fddba77f4dee388c043822a0b18af13467e2fc2f51539a13f4ce53030bed1d9ae701b39308d5e2cffa1b3178537d44369fe698bd17c8210c6527853e7cc85d393ae351215e55d6e333d51561ee6f1d2f9b066ae08fcca0f8b2351e19bfd94e5502fb14276b72d89dc13e600a46cfdc169e7592311fcb473765789c0f25ccbfa4bbf419d090ffe76d71f7fa9276a70845c22eae7deb7f338439af7851be78242dbf6ffba07a0f690a12abbd6420a2f768e008ff75b06f24c726cb2ae3837ddd4d5a436f2c487eda66b8dc45cc26b26cf4f26817b4684985a9bab0febe488c03fd660f140fac56fc346bff60e7c457a3ae60220bb062fab0d09996fc0577595b1305e7c1904fc873e9eaf7b1b8492bf2148bd721f700a8857f1562d970a21948aaef5950b810ae485286362d6614440cb5f4468fe963eb53e6764f99203898b563bbf7ab6182e133378bec75e5b55f136841ffa3143c246af15e53d4a341c0e5290e9de2cb0fa9d9fdba0ba05aa6555d65b92ce9db550bab91056914aa8a7e6feeb99d42f13a9f578eba87b2462604c9160354336ab0c1a82c473fe76d445cedfcf79dfb8640e8abc05d74eab05c7cd134e8b3db6387fc586f6ff7ede9bedb9ed9ce896af00b2563c2b2b7b03aaa56ebccdd6ed40a817eada014733c302e9373792e03c98e08d4886b49ea39a5258a5422e1e8d0bd506737f58f7ac9914fe0d2d1c6dde2e79962ff6c4c8fad33f224df2b5c18b997e05c2c29877ba8637b031d0b3fa7aad33470da633ff2521ec67ef4c8028d5ae9998a4dd068d063992d35594692f3ce171fabe097bffc544285c842a0be7d4c374905d00d34b7597edf55088374e2eac5028fa7e058e2596a4fa81bd7ac5b3426deeab625d5b795eecd8d03db1d98f8f847ab4ba5641a98dfb141f191b8d3a049ced3b9981b3c79e32774f277f16c970847eaaebd57225958bfc1cbf9920d1000917151b28eedcbcd9e648f4186e3540828a3a3b5f25a478c2294b4a43110b45f56b7e7c403655ee0ac5b8b92e2f2c8809bd585da1f7a5849ecf6a871b9653bb8202a775fcdba3733f1b7cb4ca47dd5c561db02c671a9a4f15b2ac809c74cbd4ecb6943f56d4f258cbf6fa0c20be79d580760a7ada9977a274932985e41d8050e2b5d956a8fe543169933512ee5db3984357d7bedd5310b8fad59fd9ac55f5a3dea6322efe45b25a5a3f2651ec23fabc7fe0f8e9f334c0f1807de44cdd70c0640df6753082236cf84f7553b674bd0a3f6eeb67a8f62b118542063dd65429cb120538f5473ae220eb5513a7d53397b0bd67263231fb8df32c7529aa9a2c22806d761e9ef0124949516de440709a88fe848f1dbbd9eabc016bd05456075938f153514fef8dc0d90dc9b058f22e0d3f4811325475ccbe51cadc420128c386d8d7bb8529724396b476046390bdf5e7d819f43150038cf2ce411d25babc5fac3b96ebed5543da71dbf23a07b592eb83a463f74730afe12e9d83eaad6cb456d65a7576aa21231483eff186be57ae3b9c58e15881b7577305b57c937f9b5e25c03026fa401b7c58bd024ca1d08e10081c53a1124e1d2480cf539464b8bf2e1c787928d5f392c187b11ec71e4567dbfe9e46b318c58ca9ded3beb4573f70920d3be84d4621a6e973aeb5299a79505c2c3324ea1defa90974ed3b9c4ca51330b85afba29c5928c45d4cde3c25f6e091e48dd0e170d13691859a9bdf092d93ec7c20eab2a472d979f03e718db0b98daafa6383238c4c8f93ff192e049cfba6139a7ae0a909958b65e7efb36bf5f4c0bbcf6ed967280027bf010708e7d26b3266eb75ec5d27709dabbf896e6fd2e876fd9c8b6eb7f8ba5525f3ab0fa771164d2f29731d05f7c7c74e1a95727fe859975ab5ecc9d7132ecb47100b795eeab756b13a2ebdcb33c912b482f055160e7f80348a9d0259032d3593f905dae52af927ea2ef786ea371273290cdc019a79a68c4f4c1dae7e02f1ffcc69afa43e3bf51327f2dfb1430c6948a17099917f94367f160a1e47066a2c4c8d426adc138a08c1880247dd9e31945273817161230fbd3f8d305e6611209fa5868ba5a45077afc607b97437232b1447294ac87e0a8e343ad4ad6d88e906c20bc800772b9eb0b66daba7dc9b19136653c51ca93019b4c8c80fa160445869768bf58a6f00f703db5b354a50c7618ee139691a565052cb034065111720286ed2843353a7be0fc74689a991cb1bc91510d1828bc0b92de0b43665ddbb55195aa1d8203bae28d76c1e160de5319250fb707a70e5311a694d2c393fc9175d946564f65300a4812dc00605b5ba4083f74ac474f6b1c7d101d3f8f6ea91079e438e04b5ea6d64a195e90f31911baad0a56279c4a568435ab7dece2a5343234e9ba895e96c984afb183b2c852242c443ea895107e3a0c1b79a82482e28a3a3d7754aaadb48fb3d7d52973911bca5ac71f65f616d3a81eb490d7954dd60e096f09103fd919ef0a276e5db0b7392f6955e9dac503c50afd4e52cf845a7b0abb51e6572bde81e1711c14cd646f6aae4e2c6c1381d29c5abb7a9a337ceaa712172f5d8e00ff9f65223b25edbf2554008893bfa9cb164217cfd3d2e71be391cc8ffe597c7e4c2a69dc7ea172d03d539a8c984c4b39725e07d50b37b2d319d460da4aa9641beb996251431ec576ce6c48828168dc4c99f3098d88de0090f85a2f7209147c00c1efe5db50d6b9652c54150f542f8f126d54924938c2e3e2297224c98a37ab206299fd615b6dc8337dc5fb3478f27bec739ab1bd5c0fbf69a0da02128c96370b7a754b9b5b41b845c9f2afe9e6101bcce8f532697a4895ac746a56f6e4f0ccde586633487bad7b3db69c4598219d068d40d8b5730822288f872a6f240af43cb178fbcb531f74fb077eb2fc7328b7f04ab861eb8fe50dffb67dcd0737ea38e724da91b6bb5905bca168955452d9f604b1372f790e51df8ad2227f282a810fab088445894b038c803812efc695da51591c940d34bce421de4491b0e73f5d1a732db05d09f76f72f9627666a866d99b3ad389f070ab6b4947963b358b134276406dfda72d6b81a5f1665827b62cece88bddcd157aa442e88cf5f89fd0ba239373fce48abef55cb9c13491e442632edad1b4caeba01d5636fdb201e57b1963bdaf8b9a4295c7f8f6d20ea4fb33bc20a45689b80b27371dc6f991a787451add441426d9a53ced9e1e3845c72a328e148ad12c2ddc7f0051c6254b969c37749ef061e70de07c45b2c03cef2202f3f874b0eeeb69ed5b7de5524195101efa3872a89be1e826007a85114ccb9d183e9467fb0aa02f88b750b3573a63b508fe947e89e5594dad7a59270ee2bc09b45ec4ed6b240dde4db7dab27ba1bb59964b13e31589494e559af6a29a7322ee5cfd0031caa694489854b19c04f5c6e10e5bd7aaaa0a7baab0e7c31236d3e2099bd5b6d744c7156f7b1c60dc713326306111731d5bf0d8346a27611d26b6609aabcd412c60618bbf3a0ea495a4446fddc21d41a68d9a1a0f381ecaeeeecc50a8417c964f4f5fd8294b0f7cfee477e292f32192bfafbb342b24ba9c54061e7989c54c2af37d858b4be8636f8a2282bb2d5c8e2c10896f71745e6bfc9782fc802419167361196c50e03a7ba42f8f06e0e0ac4174f488d075befab4411dc1074422ce409f7182564c788e1b184429167a409c42eae1aa0d86ee139dd30b9b63c36d91c3d947ef15e35ae3cb9ed20dc9c480a01fafe897ca9376934dd7f1b2f3c4b898e32e2f0ba94092e77179883b5d680d6ab3acaa9e4ca1b74e696843563260c2edbbd02c4ed35268a1226ea48f931c8c6d383f47e05601ce290f7028e9e8ae4dddabec991a8b4e7926b1a11035c794d0fec7e77a05fcac154fa71d2cebdf7ff253095fd06f6881eeb7998ca049c12154e68e4d30c53d9d308573674607a2dc354aa34c8d5193095f4ac81a91c89e9429d117c4d4f334c456f585de19ee5a67931649ad73015f5757f0ed3034bb95b7b17dd35532539cf8d3730afbca2ca28d786a10dcb33b9030675bebeb146464d13bffbadb5473c2e2a72b9aaeed7c337a43a2929c242fde482d71e07eeb0f709f8b7275af2c5a2428ccae1deb539a266e870e67256bb0479784b399eb2c764e108f561e4d2137b19cb524e8a2f29fe8374fb86470ab6ddac42095da61e2d2e34c3b88fcf73b0c731aedcb41bd0b4c3df43fe5bd998a831acc9c905c42414de41aecaf482afcb24e5e9d05a6c81c3a37976d8272e88508847bcba98c998309aa25f6b83c43691d05067c9644913807f47a90037f2e5425f97aff4f56ffbf0c9e857ad6f7db191c4d2bc96cf6bbcf17053eea018e403bd83eb6fcbeca41f89b27aab5d0ceb320debba542f53993f5393a89139464aff308213b447c1710ff0a909199b5e8baef250e6c02bd2dad53dc361592db27f539990f799fcdbea463ffdfdb095f000d2b1f67e2f8d58845f235da51eadb52f3c2fe30a439a00798ba1727eff36ea20e1ae20bfaefad86cbdcfcfc1f6a8dbf461fcb2f50e1f74175f1fac2979ddada85ab10334c9560affc30a8523f62b06516e3dc45d5ca1deb46da627ea4e3d263960d80feae4a33c154df60db1fdfca6369ea98a47758f0a3c8eb9f5808b8abc523b3585ebf3a2741d19121d03055be5277620829db42f0646817ea9a98c5ab9c3bd05b638084d1f641c7bb993cda663f5c4d6fbc010aed1dd83cd4166d1d42eb3694d648349cba6a0e9e766a0cfd979b66a557340badeb8652a2ad193e76a7af15a931617c8d167bb5c3780974af2b81c61025b8a2030036d9a173da1c412f51760b805a2ff42a3fe147165f48b770353ff1d9567f10fb4f1bc1505da6583319debc11384fe14f1587685ba2f9ba08e27d4ddde009377332f7319f6f633cf547af508931729d60b6115ff3e5722ce1ddf9207075cf0f8d6da1ce8593c950a36df1798d9dec6bf74f06d4f4085fe81fef1cb543e252036a71b51c67eb007ba07ff3c666e362e9013fb88a2ac68d1853b5ef40fa4ca5cfdcade4713eb72fbcc6ce82786345b5de1cca5457176b24dc06adf6577bd3fb5698c3ce1c9fde922fb8c1730b6754b5e7ae869058b7010d7725f36c6f8ed45cdece0cf097e0ca7b9831f333e38cf0e7a1fdb9583684f137dd5b805e70011bdaa9f0c64f14de9330efdc0a07a9c97bdcc32be9fdf19afbf2f447f7687ecc445d9706f8542bcd05e11c902a873c5c988001abcdc5c9fb6251bf0a633c95681b87792f6610378218714b471cf720ace4bf3257ab43c1e0dcba1ee1d0a7cbf153eb270ed809c99b25ef27220f66e2ea7c3b1f2552fb2b2234e4a24a47efae971ce2b7c46a1f61b68e0c0d05b519ae2e8d16272c957226d7cf097e8f0de04ce10bfb2a034853754714f47675ce0529e1f7a2b309518bcdff49f7787c32b493ea67e11a229ca06480aa6b8571385ac062dc47683b8c5ae90a1093a367f70c0d554700811ff5dcf3b68e409e1ed5a4c1b4416404cabf742b6b0b15e21b636931526303a92311150d24e07d3e3fc64191c935fe3c2b0751257b7756bf584b743ee76be9aef383d6faaf9aa7b52996f7c260aa9148d0454a9677f649bfee32db46357887ecf34d65fb26f76b063d78326ae431dada9168abf71b338f914ca9cd67b4f840491b8c5b7acd8f343ba2f020f4237ea5b5c34db7ddb56f55c7006252024c94a728e1344e80ac84d294b5f5b396ee4b4cc9cfdd59763b033995b01ea8a1d03f461aea92d4a027a448b274be9def485f2c7b45b7604a3067a7b0a990509593f61cc96a3658a703fc009c9390e64ce22c526dc9f3bc6c7e0be1dce2cbfb3b622d47d839564029f58b878d35d1b119c46644574cbc82819502a540b3b37fd0e01e31f7cd41cf59b1c4e3823e1f7a77e1bda7b05fc325b6289540fd9ad93b8fdfdad674a8895d256a59e47b032a655d4cdb302e1b53c96a12f840974b5684cbc92f42188ba9f1384babffab6f3af5e608d6f4bcb3903749eef79fb3ef7d45e7d68badea3327c6d31468d75a031ba8cf6080bf75620dcb91cdfe42682372123206882eb7499ab623c5fb733e7f2425ebf26d91dbcbb3d9e79bea0925e3f27ba36a06c81f00e7e42701178577f24700b0ea2ae19057ae02f295d351c9f49af8c8849269667c752a24a11cd36c2a78308dd1eae48c235f7a5670d44d5ddab4a457f49cd4de4c98516eb9b5c7468315bfdb5162bbbc32dafc75a9abe70374e61f49762fcaaaf7f21c41e746120bc6527297e9a325a58f5b267f5c4c6d9c8cb0647077bea23f9a0074f200865845aad9443f9b1ab3655f875f0c6f4447f8900480161dad19d9572a4e29a3039a1c0a3a95ed4138304aafe74cea572f9159a972ea59638a28c4d9957c1fc02f6a683a37d2c52116f0bb5bef50ccfaac8998c4d10de3c1b457e741b78f0d6c0066abcc630b7e7188e86484d6085f7a6883d3e8db1fb9ea9288183070754890eb0e53378c8b43a95bb6edf9481fd866f4f4f3f5754ca12158daa0d2eafac2f88e4740e3fd1841859d5db82794c3de1756af0dffffb4a5d3dd4eb88d2d4abe0702a41094e65b6a35cd054ebef619f518b541dab9a5c60c1261a9dde0e864336467de1ee948d2d79b04141c7aab628dd1f22d5ba5af34530cee82e4bdcb29fbbf52851e7926ef2c33f110bfa8d30cf62ddd9c9af1f3de1a9799939e3f5044e6f1588f6595e3ce5f27c2882a5fafa5420ba0c6cc0bef4993670a32963c8d31d4aa037a06b762826358ecf31855519b21834e0567b868d3a9354e7eb67304711ad4e0134dafd232ebfbc4f681c85f99b697117a74c40a0bf6f5165b4ca50f8adf69288ef1d774926b11eafbea861080ef64d2663c54ca152a9c016e995bce2305c9b3ebd947432a0cb0a8fe89e51283744f93731c43479e7e0e8acc42e24ec09421bdb469e6e3d322eef827f34e7bc076e66a61871ef168e94b831967653df7b7e4389c5e2240b307ee90d502492f62ad035fd16345f50b2a1bf361f90f448b836afd667ecdfb24577d3fa646fad79ebbd6c75325b73aa8e5e7e0e10e095771b547652fd982da4a1b857f7668b41a2c865fde7aa913959aaa89335f00df22d40e61a92f90d89113e7cec7f34cb04c47cb77182f279bcc8e124f1de9c6cafa4f306478cf8a2df3c5254ccbb993c196de576a2b1bc16c97ec58e82959389c49663aeffdef82099c06b2d463c4e820376343e24c78f15fd4ad7ea890044afdd352db7edf0726cea117ca4d919567ea61e0ce421cff343d55df2f01a77a6b20099609905c360cf9e6b336ee36dda3c828ef20b5918f4d70a63f8bdc5ce9b03afc336d078031eb97cd5deab280464c43affcc68e1213a928c621a6a1367a7475b9fd7cdfd314789cec494ccc09c3976000e3ae4e21f2b021879f0077b8c85cd73d0e50e89c1dc262dca64dd70bd4dec4eae092a29aa06bb14ebf4afea4c6764037bf8f162386e078f5657fc108502d63538ec770558cfe4f385afaa0f47aac81dd18fa574af399edf9dbd20b3c815decd3cbbb6e8e821bf7104bfe74a56783774a27fbd44b2536283d5d55f2df8380b68b9e7d9ac85d602366a0c0bbdf082248959c3e37b60f9716b5dd3cc176aae0e9d8bd067053d6eee42b1ed6a9cc63e4568629fa7472b1041e4a6f7afedbdec5d3600273f91cdf734399283bf2805c8d6294f4d95d414450c3f3d5cb7370d9f9998d2ddacd9be1d0ab7e1b087fefa4a1057eae66bcfe04f7b07a75a3502aee704c635e56628117750b46dd587c82728065cf1a8975e5dab76a008a8d1acc0dc25fa3968ab4c868b390f3806193073fcdc02bfc8055df6c7ac6048f740e17b15a15474134f0d4a85ce85e738ddacb6c56c7c297bb7b9f790446b2e32f239eeb87306f0de0bf7b0f3b24e3d6c24973cf5295e9c7bfd2a072b58188baca4adbf90395af36e2a251e94ee9a076705fbb480c11529a602d785b8636fd19299eb7649307fd5f26182d0cec7bf6fe3fe876dae0f2b7d58c0404a70958e6896cb67ecd6cbe4636f5014894756a36cc25a7dda380da99f8c41eeee00cd9ad9579f3479b052a667c6990b7ab5eb598697ab733078c2398c9483cee4f529d1b3ee9e08df5e3fa6ed7de19dbd7d993f797948bda5fe542e0efc30817f1a49eaf75cb61bca5262dbfe61a994821a842ca4711360d73928d02c9060691f35b00b2695c24d75983b5546877102bc9188e58bc0862ae716bd35fe5d53e690deba8c8412e272801668807a3b64cfd7904ad0abd3bf9d7b7a74d561a09be5897e0c7e89d6da944d9f4342f5c060b5d8ae99573f2de2332e6c1255e5e5a64370b20b825923acf5e11c39c2e6f0f0e09275bc77cdaf11477ebb7c68e38276ca350c716b14b9010c7ac7e0664fef8a9982ccccc629d60c6c4187953d346a99fef51b88d4ad108a29ca06cc89de181c9415f20d3fd3873ec3e886a1bbe2fab784a5856966cfa5cd8a806b256cf7f491cf5382c3e74a2588ee98f54d049f50b78ce81dbd5e28c4c09caf516aac78af42a5d06fadc2ccefd2cec3f6bf983bf04aa17e2d107d34abcfd15a52e3f7e6126d2b3b2f155bafcc454dce10c57087d2c1bdd38abd57643bc263b967a8656be5c18f976ee807919f975fb34ce3a02ff8ff5a7ef19ce0a263d2221bc992a4977bd55d60de6e59035469813805357816e2d59ce7dfcfad32e6f3b1462f8cd87afeaea82273a6b35b7eeab1d1b97ceab4f2e5a8c97d478a49230b92789582c6d618559e5838032403ea61b2741e6c9a677a633d148ae19705425bdf59be98cab1b22f07dba16f86992b26b2e460e4f7e2ba1e121f11ef52ca70e10f0a3ff51bbd9306b77fea41b2923836cef98dd077d65a8989ac796d3d1fb39a6e332ab5bc9403bcc85ade2e29996923470b22c559cb3b6b2836b22e89c57b2d6f1a441fb891f7a8d6bc96b733c2516fe4daa95d2d8397222455d0422da76c9a0f29b3424ff6753acff52fa0e719fbbb033156c2eb66134ef1e11e41db8b5f9f47832ff6b2f6d0e012e4b3a5637cf2eec71c359e039bfd68f448240a0ec63e12e0969c61d5dc623a4cd7b826d7ce179e2d0f4d00c3f75e8ad21b8cf7f97b4dd5f5bd2a5c3e3ad7ced73b2773af099cd3b4960f5a75103bcac9f6f22e0598ec2d60cb9772d985133146b17c3dfa7e960e97d75085022f92ad185f53881d38c386427d54ae1ad7f5e2e245d28e2fc45550b95fc182b31fe331255c56505dc988e3e0e57ef5ea35996f3b55e2e273a7fc1cfeed355617cd0f7c6bf381e61bf877b7145f34b7b9b9f944fbf29307958be6150527ce5616115d1d41f7ebbf4f0e11309c9d15153968aabbe346ab85965ac99880584d75874c3caa228f123a222054e6ed9253736812af6b1d1e5e0d2c15fb226a705417dad49e3a47e7b0e155982b9d01aa302c13bb0b318d79946f90b519e965fae45482055d1a390f962f264eddd1cbd2c0d451a317acc2fcd852beb54fd91537c9cecbaa8cb433fca5cadc07f5b6a12e514f308f7bc2bdab2f79f184c613ddd6988b9170de6fee8933f2a6fb0da32a4e92cb46d4b10066d7a27a7a73eca487b581d0a432ac414c72ec4f7fc0ae34f5a1618304f0654e02fd88f8860d67d448eb2e2fb7329c886dae2425b534e639991f9bdc76cc4de9be4376aa104ff41433d2874dd33515ebb5f9ea55a0870b58c4aa1228fd39a71a2ec8e3ee6e5c6c509645372d7c68f6eb2b34ddf39536956b5207a7b9304548c09b122df552ebc57202eaaa93dce1cade18f36245eca53359d383782a612cae4da26bafd2b706e2bd21cb28dfb62f6a93eaa5879ce00da89028ccdaf5b75bce7a486c74631d9dbba0b72fb9ba7795107577c1e6acf52ceea87a874211523fb45c31978f00f02709f6fb39bfd9ee937d19c97cad966bebb20efcd08989061a315a8f11668cf2bfc896ed6db7869ceca2bad51ab0cfb543c36faace1cac989c2481de8f6a421e056c767a11b2b5bbf37eda6a4b6197c4a7a7ec51c5072b4b71dfceb66325fb7a029cd9290f304470d823036f210ba0733c97ae0b6e896e61cb1bab065bea73aefa54c44ad32d4db8321e3d8b4ece64f45a4cc8af041e3d0e032edad640b825b5c4adfa7b74f2e8cce3e3b0d7864c1861b306d6a4fe048de86a2a16df4fdbf6842ac9023182f90f09dfa40a5e91d71fc446bba3d1efcdd4d1e041ccd66fbbe7dd0d8a1da55032aabcb041c981af5a531fc9acbd96fca67bf66b17fbaa142a07fcd6ffa7ff7355c8deac05bdcb514e4f32dfabca96ad23a740b34b2cb7ab547355e449201bdcb75c05c8ee103f35bbe70e260b99b3cf0d17624fa84e66b6ad0eac754f8ef038c8763e63a852566a417d30bb2f010e95b6d314c586b0e660408ef7144e7a3280d01040f8429283f0e94d00e3175cf2743882b702a1656a5dccc8197456367fd9f69db3b34e51c76011389b5c3f26b8cfe8e4184cee09d589ed4fde70fe785fafea2b9c0639698ddfaa8efdcf686377d2506b40ce23ddcfefa2f3f4f3f28d8afc46079b6634b9060647aa9e50831ee4fa8ea1bdd302773b11237c7c43e766b97a5250e0b696c6d9fc9f56283a825280f6f290e43aabe96713b3b8e294c68c4501ec2bde879ee78ebb1cfb79851377721d85eda43f3b79e4a499d63ae6cd42ceae5c9529b9e1de34f67b9861622563be31dfaacf8e5f0a60ea1113ecb4aabc41afec6892bb02602e472ce10a25fd4729f0e4537dd8459ff4b01de6f570fd36450d9454a6bf6b6d2b10ed0766af5b02eb724317164258a909f91d8c2f66cce9b694e9db90e005f2ea4892aaf1e2ae8055828cb06eefb994ee0a1e8f41bc6798586b273357155e0a30d4fcb79cd89772b03bf9c043eac82ed99dfcdb31f2ad77b63b64872aa43f7b8bdc713d46f708675c360fe7981e5bc7f2ad577568dfd352ba025294f875efc592b3585b951c7c7360796200ef4f7f129123f9361b7cbb1a8fc485122e58b6fbfb5ae7aad5c1b45a2bb195dcec88d13d6c353b0c97d6922d36e92bd6322ee815db4d43fc43bd132bb09d94b2a105697b17ffb42fae8e5c5a2e56853674230eab9f9f6e87a4661763b8d8343dc0e33203a3876baab27593355ec7dc584fadd4a989e250742170e7b8d0bdf9fa1a4ed065eecc501cd4521b9c8ab2de7b781f87f9583ef8239ef547b8624bdfe6226edc3dc424cc5b7ec282820a2e0187dd9e7e27e788bb4c65e9dcb64642bd0a6b245c5125b6352d067d9b846fb38d7969d353782aa9fed0d115f4f52e25d4d59a4eaa62efeb4dc7b8c4dd279a3dda5a75e7597d7725c80a1939b4d5c42e8278dfef10e2c7e2a55e26262b10b71f9df76cea25141cadc9261e45f77f6ba155389d5242eb8f0989d5bf672fb46fd002f431375a5d30d92848cd060550cd0d1924db366fe53d652b490363211cf3749c52291ef538e14db232b5feaa68f80ec9a80f4ed60884524dfe1a1ef26f55fccb24c5085c9deb6d2b14de549d902a8e0d51ebcba7bb91ac435bbc531a7a2acea5cbc5a67d86c9e8a945e0d73df7bb7b30134baf6f0b2a03eea1e664c00d69461d31a3b2cb30a38a6793f38951f496bf8f4bf771870f18827dce08d603cbe68195cd9fad19a9717efed4e1b4403e115fe5dd7e7d014f9e594babcbb1d3500a7ea65db14d65ed59df8c89742de0e06880e8c90787bcdbe9f2ae9e5cd8e21958fe798a3b9c682f57930fec386b82fd02e8d25d0b148cd861ccb06fb472d51c3bb9958b4482f20efe5c5e9c704d015f2c1b9fb0a29f77226aae10da0de669e44004f95d8717a9052654184d5db3aa0bbf8ad74c65322318f50d508193567e5289896cda5cb81c9385a2be4b1933d350698e3de962814c2d6487ef262a93af3f454d42eaae452ae69e705b72823d57af7c7090213ad04b428553570a86678412886cac533d7e9047654969abb9e6a244ba6723e42af5ce8159c6d45c9ec04c3c5973cf79c25fca29b79c4da947821201dcd40b77f3bee5d0aec12611aa9de4e3253c8c0e7ef0b105f3f757708b373e7c6c39f09347c45ba4cee61eb3b5c729c3253aa21ae64c931d073b124cf680b5c769a6155c503217acd61ea3ee6a74c46d9933fb21bc6bc48ab5409e80810fba0d5537c9c9eb9cf3705eef80a5255bc56fd335dc8be58cc357dbb567badb94110b845a2a4e9febed791ea5400066fd655044fdc27c30373d998bd29d94e55b13a9a25be4920d9713ae6f429e41b84a362b14a84b13796d19dd604e35db4234dba1197caae1dd21cf67e6083173bae9899d5be4dce3aa2344d52939d935eec9e1629b4d02189eb373b173c41061fb3cc94e555413c50289afd99699abb74643f20532234f2ae097b69e586e22ab2a532e47544e81d76632cc60effe32a3537616605836287d776a4821030e2547aaf4c1755795502f05640fea25f3d64927ed0fc6f38d84bac17cb05e85bae5c9b69242fd608775590af7e927de520975c7f6e2440af5c87fbfd39fd4e25da8a7cb167458ef6d9ff8ef40b81f3d94125574947712ea819ff82cd41df6fe84295737c79bec0d77039c7816ea663fc0f167a16e5bac43fb42dd80003fd07fdf465e761cdb181cb7b9fd50a89bb197dd67ce0f1e0875b3e0e70e85fbf040bd7e246e1295c87998cda224cf4a273248e513fd5dcefd3d9669120757f2d1eb7bcb1d87f8722554e7165de0520ff818600de728eb848230fe043d51bc398671954b08e979c22bd36ac224e444dae3f2d6f3f67fcf5f01bdaa79dc9359d60c29d2bffd57fa389432b50f1d2bad0b4d1c9f3f7842980c8d5ffcf6d945c0eb0927dde67e7fd9c8acbfaae48d810e208e82875d899d0fe49fa722a0a68e9129c39a31bf32879e5ab65bc11f5d95af39a3e2f6a99bbb8ada1ba40cb37c7d7a9eb25d2777cd085470ecadcfd541cb5fa84aaefbc7d7f0ffd4d99dffd183f29fa56a6e9d2910108a6a7839f0377a9a73b99b941ff3bec32a7f224380b3ecd6e0bb58a374f8b002d3fb63051872c86ca5bd06dd5c78d546d6ce173ef91d3b18235b9ab74a3499560a636037c92595eb6db25b915b1ccba0e95ad7476dade76c4e61e8a3ec6b4f28a1958fd07b0a819fd95fd9fffa97ff1b082f5827ce6fd63f93e6a557289825639795af23c436bfca1db255eea88438aadc2ad74a5739b8fc73ab5cac8ee70e930f81c025a974fec595a6a8579a21c672f8ab7534e46c387779b97e5210384432ff3ae4fd3cad9f3f2c93e144db5a38cb22ff6a55eb5b4749cb10fdbdc7df3452f7e96ad7a7b5eceab861e97bfbe5bad6cfd6b53dc3a6b558dfec0db91383c2263bf8b1015ecf5f8ffdac658b5b36f32d6b0c16aa26b97b36b8653ddfd2c08aeaf996356e59cdb7ac70cb72be65855b962fee59e47b16732d4bdcb2685a86449632e35c2b8a2ea88b4553774fd2c3fc610e27dd8a523b9992be0cd4d9a052e9a0840d4fb7006ba9bb91f55156e171136408d5abfba70ac5c901678b7cf7d2b7771f777eb54887a2d2f9d345faedca9635bc91b132b6ecc915e2e466b66cd2665b1627325bb6d136b6ec3f9ce58866e46679edbf62965fdb939733ef8b19f60f665eefcb99a7156e6a500e7306652f67500e7306653767500e73066598332807398332cc1994839c4119e60cca67e13e2cdbbfb6f96cf5ef0da7a32bc431379c0e6638e144369c6affabc3e9bf67d1f8cf70facd700aff6238fd776d21dcffd8f4ffb1e9ff07d9f4dd4f36fd27c5fd1f9bfe3f36fdff1b36bd31a323f5df6ba4b7bcff5855ffb1aafe075955ffa58e59cfdde0fb7e356deaae10f5dcb4a999698313d9b4997aff574e9bff7356bbff1153b4e0fdbfeb540a44adfd6fad57bd4f4e255eaf469f9c4a66bd1a7c9e783b9e78ef9fe75d83e7dde8f3bc5b7e37efc634ef7e62de61ec309f901e2234ef3c3def3a4051e87977c3703b3def6eb91e919e778f3f2d4316fde3df9c0bc495f4882a46fa05eff9997da17e602e787a6c773ecf05a205ef602e20d088b980f6980b388eb9e0e931d2c15c4000d26e67c7c7b9e3f39bec38e682afe7c23d962b8a0bb45929bb465305e4533afddd72559c70f541e883f4a3befb33edc58b3fd36fbef8d3335ae1e2cfafefeb1badfcf966bf7af0f59f7de129a6b2f91592a0e00a51c84d9456fbb74882b52bc4dacd4f94f63f4412fcef5da1be89e6cf72d1fc592e6e5f90593c7ff4e9f02fc2f9c36cd118e6168d493e9cff9c5b3546df84f387b95563905b3506df84f3fbb955a3975b35fab955a32fdc0776af14e5af56e9057223f2888da5fabbf5da35fe0091aedf77e410c8ff26cab5bef03e961d833238aa6f51069e29cb25ccdd792dd24bb58be2877e8c11b1e22acf54ea28c3273079ace82f23f0542e28a5b69d188e59f00ec5aefee4a3c459e7a0ec26aa69615cd1ff7ac29babdfe217fe7415eb9e01c2ab4f392169ce39ecec1f8adf2d536ced7626c1a2a5de1604627bbed1bdf64c049f67409ebbab7776ed0ce0fa72814bba8ff571e55e9ff66ab205fa552b10b16c8fa9d6c84ad66544fc424b59510b7a239fd6562aa11b6e0acc914f593665fa474d09310a17d35f9e413928fcb9cffe9c49d16f4a92c0521e64b5932a8d48162b5c3dc4bf707a52b780427cc1403fbad7b295350ff3cdd37efde6b7e1b009f3b7cb2edeca9adffabd7e557a82875851f79e107b6ff523fd984da759ecc0e45a7b42acbd5691bf34146ea5c39ab8e80851cc69e256aa89b5566bf57073b4cadd3c71d39be35c7a736df6b805b89fad8212eedbee89f5379474ded251bfd0df91fb4fd4f54466fafa98d3d785af37e2ef996133d6068c9b1d768c1f56fd48b598fbe4e68e6ad19cef49a9adee4038191853e1977f31a9aa569a4f7fd2b02c85b794db5fee2e06d94231c82d147a11ba61277a91d48fba59eee0815aa07ac0ed14746bfe049c5837733e3fe3f3733e4f16002f16133e17e5cff1823136d7953b9fb61a05aa8ae83eb4b60cf43bfd72e5c06ee362e598fe1b2b47ffea77a8578ec1c5cab1c8e1d3fa66e52015fa0a60af65c8848101fe7a2f1f7ebdd3077956eb355d2372ca26fb6d96a380f3bfc2fc6f66cc3107ced9dfcaf62e1f64ee13120d4f4f289f8fa2a8c16f169de48fe3f17f002e5db58558e5c0a5cbdf834b4f8e10a7fcdea9f44fc1a55faa946ea65206994a79fed2025cfcceb537d0ad1f2ffea406af99f99703790ea994f7df69115609f5dfea8e4f9734735ae43b7373f0b5b939cb9b9ba39cb9d9ffc6dc0cbf3137c36fcccdde37e8d1bcb939caa3479bdfa34729d60573e77953e818c34d6de416bf5e7785d438e3faca394330375968898ef83225d2cb42a11eccbdb279496a61aef2ad2871e06dcdd76ffef20c88d17dae8fad9632d7cc7de0d7ec0a2ff9ed146eb9ffe2146efa4234fd1c3efc86a7f0c41162929bc29b740a17941005959bc2d1bf3a857f6b1594f35681cae670537d3987dfb3399c075fafe5d7a0ecd36f7771b96935fa9369f5fecdb41a7d33ad46dff8fe46dff8fe9e73d36af007189ad6ffe1ee79f72173cfdfff17b8e7c527f7fce769526c0b51ccad7467b3d2613dcb41cffe288d62af84d87fe5267c25fef299ca4d939df3e5341965d3441bbbbf767614734bdde4eb6932c8a6c9585eac6a5fb83ac67f93b990f78fbf7f334786dff8c787dff8c7bf4b5cc87b3afadf2c3d837fd53fded5d3a4f92fb9c3e966eb10c6b4d6731f65b090d155a01d494696277c5ae93a34541f8e230270a426b04b49352fd4506ce591feedc1101fa4278e12e67697a946f98c2b94979d70ef04951949467f6da5875756f9effc3d3d6db57785f7811218dfebafca1f47abffa3bf8cfe5adf08b1bec9f4571cb0fec2894c7f9d03a3bfc66d21c6ed9cfe9a7aa9fe5a3942ac9c73de8a37fa0ba772fa2b71bfd45ffd4c7f3dff4e7d6d73eaabfe3796fa31b7c83f6787abbf555fbdaf4de7de1f386af3eaeb35a7be9eff7ff6beac496ddde9fb034115fb56ef95240be36108210cc3903b4208fbbef3e9df5277cb16d80633332727e7ff2417136c495ee456abd75f1becab1db2c57742b6f8d695a1f6bfc0be9468f65ef6d576b9d4c9645f434084a296a4c9bfd66ecba7f1af6bab42ebee31591d3e957f01503b64ceb213df07d87d6b6b025fe35a0b5a50daf7842f080d7b09f0e254ffc1d38eaa8012b0816eb68b10b52851cd73f502437e9bd3a959df882de0e7b1a9d8600c576f89d7a8ae096d568d9af3150069cb27ba43502f56c34eac3a711087c7663f326296926abebaeb92442879f5f847dedf94d4f9e717cfec8cc63cca24d4bf5a4c66a1229c3a82b2141bb117abfcbdec21e0812343ec1b6ab16f065cae6e3039cd36f382b1a2a91d25ac28dad1bb330eda1e1fed05f2d18da12ec50c46ba0996030786d36bc5037358077e35ea062bed044b828730a757cfe3a507b23d6ecf95f8cd3cd68ec74f3734666d8e219ebaa2b6bdb665b6355f3d4b580b233107c02240176b03ae70331d23fcda58c563b40e29ec9289b2d98196a03c0285fe12690464833680398a66e431cd3d86c9af796df29338c11379e4c9c69d5c5c69e4e25a13ee72014598554cc4b6cf779d56c34799571a0be10cd7d2c7ba7455940514896c96daae1d0763dc1b50964b1b64abaca126e38bea6e330bd080df608c00eda5110fcc2e4e7b6faa3eabe6d2537e6555c5071b705a627d1d696ddc78f8e4bf7133ea8db53b33fcc6c0077a8c7030efdcb716f5be7512abf57dabaca6aefae414db4157bdee4c8f10d439f2ab5fcff9e75cb58957ad8d790446be2a33b63218f95233f2a2c558d160e4d3f22605d5dcb1ccb498f2dcb1725fa15f41b10883b3673e1ecd106ccb36387bff8168068381eb9f9756eb7db0d59acccd870b0b359ddc059ddc3c6ecb5e802d7b71e3e1ee9ad46f3d51faf1273a45b0aebb2a02c675102ea35ac02fb8ad35274097e2e588a8cbcd03fc2f5ec654dc6944ed09ac7bd58ca1e7fe6548ed036a1f0ea46b507ec16dae19cb615b89c682c105b7b96691da8663e9b5a1fad0cce70045eac7366fe9fda2636e1735265e0f77c2ef32ce271aa00513cf8b14b99fd1a164ba9fb7f6127db3f15585b143c5705b6f1ded999e71267f6e7fdc5bd1502f49ccbd158d5d4d59edbd96ec4f5ad13325ab6d7615cf40b6de55c8c82798f8b2d147e0bb526d5872502df38d3e3aa8f53fdd577ca29de7fdee6814f8315fd3d26a20d211e26fd430ac4f0ee584df18bbbd3d76c68d657c3d767f7bece2d67d8fb7c7ae7cf755d27596069f6f0dcec90d8f28cc360c61b61b22cbb62304708599355b2166cd768859f3028f651524037afe6e443b7372501e0a6b61be4dcb24873854f4dc950eb5b5e9d6098874710043afd257d3f906776200a1af3a42157ebc61534dee17bc5f7302b0694b5eb4efc4fc46f67a91d56f7d24ce18e4a596015e6ab995e405f4b2f782fe9c38944cce7278bba01e4d66ef9f2cbcd6e1c945012c622e547d895526bfc7755162c42dab7b3fb1daf2773ae13079a62abc581335409a065c3744b6cda0548dc68c7b52b51bbeb0e8838b92cfc8560a94af34bda3a5a536ece9cca5d153bcce41c96e4d16f872c30445c3e9e0b2bd28b6b5a2a261f63ce917d306b15a56674671b54d4aaf2cbcf3d664ea915bf7d6ed3fead68dc1d3e56413e89118bff3ae1a3469eedeb516e1aedaef33ffc8bbb6cc776d467dd7c6fbdfb58e8e72b974efda60b53ddf8d1fc18281df3f6de3b7457572455c2ad92f4632c382c7776af3e70258eb89c7371613679e48558cc1837485a0e986605a10533e4aebd2ff633c35e7793211cd2cc666a6d8b1343c831f0dabc390f1f7e80d27cec4d7a4d45618f96d5bf685d8f5bc10bbbe9722e006d0dd56222621827860b3e5c6e9f94f2e824e8e427abaaa45f02387a816817a4f347de33d63921182021b8141814984667c9aa2d25025a5e399940e87948e27523aaaa4743c93d2e190d2f1444a4795948e67523a1c845d154f891cb693e2f14c8a8753a4f1256a27e5e399940f6740cf57a07652405eb402720205e4fc900232ac7ea20232509b8091d790907783d81692b18599d7b0f6f21af22016180b78fef911301be1ade0bc1101b3b002e36237d7193fd2f84d91b159cec4ab347edfc9f566add4b3fa8ebf3c9b62150cf63b48e4aaee1bc6ced460ac117cde1e96d3e42ee98465447443000e4d475b2744a00ecb88684770b4b54c81ba77294fdfa7d1796474c2bb34da889fca8c9d0c11766f5392daca626c15e0876851ba8ea9db9675925a8c33160b526dbb7e124d5daab6f26e929a41b35192d4d2c1496a237e15cb4de4d8f772d40c667eb89ba2d6f252d4da468a9ada5d28470d69e85e8e5acdc8516b1a396a2d2347ad1b92a3d63472d4da468e9ada6a5d3a9b09267d81ca3613bf9440e54c50678adbacf7235e67bf1aa044d520699641a3a5beda57a55cd9ac3ee1ea600af89af5221c94f020a926e36b4ac0c1467deeaf5b4b9161a38946e01a7b85a0c40ef8eedee0da6f68adc1a7ae52e643cdcdddad1be7ae1a6a4c942ce3e4559fa0c33a7b3a5bd372dc617d8b3da4292e3f333e7253666c63acbcf5fd10675c9301e9a1bf293ed210ef56f7fd7d2664edc270eccd42e223ef3bfc4262277a2198b5a68da467b0f4d683361293a5770d96deb88a9d7879b7dd73f808e02ce0ae4f7561e3c4b5e3ded0d7d7f0359dc49c3cf8e0cbd635b128254ff1c035bf7b167089babab80d943516454b6b49548d172258a7c21806acbf0f5160ee30b72b6bbb7e46b1344781c5b6077103d7a39aba50931a25f7e2c2d1951b638d8d037d5cf5e758be3a6527443afb7eb74ede622c6faccef19f62040e4ee78eb27eb3c1494f20c461a142c5a95f9ffc983e2b23b3fb609c1f08267f36a3421b2c4240a7f3234c44da9a666b5ac48b242621adcd365ac82b6a5b52db6287cef939e1eccca87d4eed336a5f63c091b3ca508213b54f76988c94d955debfc21f3132fe5de11f5be105ff0af7e3a2fc5de17f57f8df15fe7785bf7f853f6651fdbbc2ff4fadf00b47212cdab65a005d1792120eab2e7ea577aeeff6833f3d26ac81070bf38a9dea6ef7fae5653bccaeaeb6ef46afc76a4d44e1d032e4650ae887482483a6cf66fe90bca346b61f42f36adccaf6ae53dd79b97c0f9a57158d1001685e61b1fe2d4f5fed3da2aef6826bac8cc26aac84f9f4cd74be5e48ac7f27c4a76f9a20db5759b21163fd1fc692f406dc8387dc47062ab96150d96c2b54ee092279569561dac0ea78f2dc65d43c369a4bce17cfee7cc0e0dd01df8e1d8f7aaa9bb16261f2c0e1326fd8c876b8c4374f607cdec214d7175b4b57d666f69256e1a886d30248c029ec3f183a140a087dfa8974057dbb43c430180d1d2a7e5a36da9f8e66fb8ab3fa9267d215333d262870fcf332e3c7b5f8e7974fcabc06aef3245c6c2ca8d41f4cb683c5ba1d2535aceaf40a4ace19f2d2f30753817cbbe9645fc15a598a7b17f615bf556b101cc5fe40ea3e39e906801709e1d7e89b14d751825fbc899fd7513eb408b3db6147ab7354973b58dfb0165bf38c15f86643072a9d4f31c23cc567c0091bb927232c24ab840267cfe30d56b03a4b45bc49cb3e291e71b6aa25901b371654c14e89b35907194347b018dd73bcc69256c6a207c0d59aab02f1a411cb8963edd8b2cb25eaf927f7e312143795359339abc823fa292f650f28cc7fcfa9d30a499036396a3b2441da8c92ea85e10eb44d50901a132ff7648be3a7010f36e387326307bf4fe79665396d3196365944eef75a961f834f33334966c16b70f15035b410a17610e62c3477ea6e04cb7223c4b2dc8a8067d131e96a771bcf628e333b7361c8aa060cd9d3080a7feeb9071f0360535d886585d9ff322741b34a717888f31f740c72989de1b3c66dc2de47366dff1709fb431bcc5fc2fe4bd8ff59c2ee3f9444fd97b0ff08c26eb2a955cf6ef8ff2ad5fe9533fe17a9f62f3bfedcc2127f09fb2f61ffd709fb4fe0d8bae8d85f62c6e919ff4fcb167f55bdff45aafd64161c21ee335f662c6f5076ee63719f03c1d8c0c407d8fe03590106d04bd620ed83f03c763dd76357332cf9dfd5bd4ff0cda668c9af6d5684c96333660f0110436678aafc5ecf82ce8b5b6bcf02f9ececa598bfde0c4a1d052fbb7763769a31a9ed101f5f3364d58595eba98758a49b2131a9f5b055d77e3817ff919854b5700f18cf32e21434b137fc6cebf2c732636fff693231ad5056ecec99c997d9ddf2edf17499b1b4b10c537a192a0adcabb960f6170fc1bbaace48f4e40d5c9f9fcdc48f3cf4ede0103952d42f7f2e300ca1bf06df219d7e1a7375de66f55fda6be7cf1014171982b1f2458660b2fcd10cc19dc5d8ce6425c77f196ae460f096bcc15b16c141e55ed67e57c31efb9106cc7219b260f99106d47c2d42a0062e0607410df4189b84400d5c8c2d597ea80163ec35d4c0d5583fd44052c93021500317835377a00642dc6883b0b8844e08cffa67b1064ec0b31e4cdf8bec45fbe378d6571fcff20bc57f04cfea02dbf9813c6b823c6beaf2ac19f2ac39f1ac03f2aca3e6593458f3ac91e6596397674d34cf9afe6b3cebaea47f780cf8ee2fcffacbb3fef2acbf3ceb2fcffacbb3fe0ff2ac8fe73a60f600e58683b541e9e85bb8cb651a435042028d86c4ed2ea444444963a819c90ff4478c856fa891cbd002e46adf50b1e4c6c916d21aeba8492ff91fc5056e026e3bf65d0f186c17602aa3a4553830cfa21e29ab22e0949c5aeadb48c6daf455ee2466a4ee27570eb8cf0636c73a73aae52a35634eb571073c3e529b9e893bb0f7b031b004ae6905a3540cb7cdac7b116406ab2b55f5ebb5aa8a85580476e8c34f47e3c47cbd8d8ad9f550317b9e11c92b0ea37b20ee4774b063fc49a090314c7378d9639a43738769102f0548bb604d4abf78a1f48be686da979846d1a4148c174ac168aea87d4ded9486f14269180848897ca64929182f9482d19ce9b1191a4bcf4629184d4ac1f8f191148c4fcdc08f95198b195458ba0fddeacb0fda48c6362144f9af14a24d1afbfc405cecf31e0693da51924bcaba59f0e0722e031182f63809715d0c8cc47eb3aa6df253cad7763f50be36ac2a42dfd8297b219912ed0f65f66f1fb5a2fee69222ea51f5eddee27f4649918364ece02f9cdea3067fe174f49084e126619b5952a4ac97a16f6b58fe8e7ad0e43139f070970988dddd8b829685f7243b759964f15e70b2d324c415320a59c6bbf7ba203bc62a6e4728cd14169dff9b4a33b5741f8b90e4af2b9bd494a2272e739dd63c6272d4dd5227c1574f3ebfd3915363a5470d0c2714d6f57a3b1af6855cf9a493a4904199c6019ab68b3f226559c8606c5ddbe0e2a7c3e4121ea4594a3e8c408ab9424a645ebe06208fd6b5e80a0b7a83f50b3cec7db302421b337ddaf045028aa2fadbd5787a0c4caaa12ea826d4fc0f43d781e5d3804e61d7a145ae16f43f7f1de0836dd07ac2ae035d3ae05fff8ce7714035b118b4da500a63c3114cb6319a704c54824b8f275c7f67561be141bb580076d04b106c671135ca4e098f41917bdacbc1c081c22e432c1c4357068a6335b8753d23ee437bc6d3366369dbb05fe992d83bc9d8ced88c32de6624195b999bd1b6fc79289c11f69ed9c322a0b15ba5af0bfa0549800b63ebd8844880a66478bf2c56273057f6bf0e41f91e89711cb90e4a0415271402213cd8242b19cb9ad45b78af46f3a9017f21615461206361bac8e11121a61322c4f4426ab0f62218ed3a21011dbd90808eeb026dbf03642c0261edca8ced0cc2da6ac2422b8d51ddf786ee6c31b6316de4fb7fd646fec941d4ab904ce05e205cc0fd00be5630e185216b5c28c1dd10c4d24e0862693b2480af15026f778158dabf57014057bc77ae65851220f7af8c12517d7c6187d91901853bc3b5c79aaf323e8404065dae0a970ba9a71f3aaaceecb975af4cd53eb205ea7e90ebdf45f47f77110deed6d1d0ab483edd5918379748e8927bdf1a69b28235e6a7c5278579ff5d017f57c07f6c0544da25a68f424565d1e6b2d11eb08c61743997b36874397192db735eabccc9d8e1ae163bb2191b195aecb0f2ce288cc104d4e91d4f991117f2cc0f68c25af0f34528c6161a6c56ffb5e6c1cbf76031763097eff99f2d95f5a9cbd7c510bf85273ee27700c5a3d4b79f7d56d440d8faed862820a62fa467aedf906aa0c2a806aae839b0e2e200c0c2a1082f627343919992bcb7ae1251759801bfa7c4fca0f802f8142db45e512c80e1f5af231e0d7c50a84f8ef4456efceeda51e4f84a61557532f03ef8a7c1da7b3b1f581cf2b56d863e50dc00002bb2bef1943dd62e94d5a27901bb2c13711321ddffa7ce5a194b3df9377af22b7c751fdc7a736e1d6f82f31b70851f00e73717d3247831996b2c7d179dbfeea1f3770c74fe8189cedf35d0f95b063a7fd740e7574bd885e787ad54e3f3570d7cfe8681cf5f35f0f91b063e7fd3c0e7ef5ee0f3731333c82bae6bd4c1185dec466a49786950849fa4b7a8312d25a0f832ed6d5273b66abccac6f2146d29f5a3ae248c8ec36f4058a31072c37a66e80efcc163a369c059775a7d70316934c0abc5b47517d3e566a317133c410bb3842e163b2cad3e6bef7fcf5afa675361a3d8684db75ffe111badba4870409b59a4b0656c4daa5360b6533724c7d0dc9bea213986e6ded43723dad4623adfa954fd8ed5f419d8a0118c6bd745598eefa8297cab14d87f2bd1a7a564c0e0005412e3a166a6cc0504a01a63afe34fafc6fae34f8db1d7f1a75763fdf1a7c6d8c0f8533d3613107fbae2903219187f7a71e3fd9df853881300ca13b08924e1e65ba43f679c2727b356996aa3bc5062ff2bc863a077cdf9fe18208bf61f1445c36a28fd7b01ace37f05ac9b5691e2ba99000c6eb52f110b6a337134d1b475f0ead21ff6a923d471d4d687dcdd0a44ee565b9d17b7ba7e7c54e36a94ded1c5d63fecde8b75eebd5887c9d47b60c203a251db14ec94726d50e8f0aa198e5ce2b65896dde3b6c3701bd4ea37dba0140969760bb2c04d69c164b779a3a2730d8a42bdfa3dbc3a22cfa8cc0842f6cec00a6ffb20c46f28b5d5c050788a5e7da2e8d52a45af3e53f4aa0f3c9ca2579f297ad50720bed220e0d4fe4f83889fa07a9b4fce08b361f9cc5254b15811ff03ae8fa05fda64e5307bce6fcb2a3693af87320ac145cec4afb48d9f4b3d3daca0dab11bb7a1e4729d55403e793974d55d184a2eea1210b1f6e3d885e8720c46439909bbb81dc57745e9d4914147d155f7bb38856800d5ebb13fd43e7addb1c1ac37f5786fc7ee23e1705263a57b97ffaa68f1e2b87d75dc6092c55bac64cf78b6f1ce20ce6ff17f3c8853be08e376ff7c10e7d3dd20ce1b85054f92b1d3451067880cdbf29b067512555f312e363399ead1ad34b802ee6930d52345225cd92e406d21e30584ccdcb45ee40deb85125903ac172d8f67762eeac1befa39e9ecaee9a2115c58b06d582eda86e5a21d5257b065182e5a2175055b86dda26dd82dda86dda265d82dda4c7e8b184c39429b801bf058f08753d6d5b2297e52f4649d55cf7c5543225979ecade7636fa9dbecad1195bd35fdecedf2948d88257ef6f6d337d6cfde5a61ecad14c0de6a57eceb9addf98fa5e289f6afc2f36d5bd1b012d1561445bb4d4ac69286bc750e97b7744cd24e30b6132623b0a244d4058477bf2f266964e8aebb4bb4d39088baae37607659093b38a2cea83cd10d0ec53650e5638f3801cdd4c36e482476cd50dc5a86e2563314374587c36f8a70ded43dfaaef144a815299fdc2c34b9e483676fbc17b1cd5ae388e327cf7ebb8f1a3f0d19dff2c6b7e1fe8e777f2f788ab5e6a1f7a78541c61ff050a8e9c30e6bee66e7c91faed6641ff9e21b955a92b7ea95a017eb2298bf241e0be697bac8cba57472718c61b6847fd4574f6da402b8ad444b72c9e32db62ccff8c9fa73b3537eb76013253ba528192b1aecab50be5b55ca679cbb951d3e118c4d82249b9e5fb23907f3b3aec7cf067795c3e475c0afdf16d7f29853eba2b6c59bffecec2e6f6a06f3a65e086f6a85f0a647b344da2146a5d69551e93f26d83cacb77d44b06945156c1a9fabb7dd136cae3821169af6049b1b66fbca8376c034f40b4852c15421e091afb043604683da50c416cd00496e24a954594329ed5f54779b596dd88e608c80f5d408769ca73da7852828160e0aaa3de557a6006d2723eed037135fe8c6c327ff8d9b516fdc54376edeba3170ac9ee25111ee5b8b7a5f2db2eafb56594d5df5c929b683ae7add991e21a873e457bf9ef3cfb96a13af5a1bf355fe6e388f507cb0867ae2c2666c612fbe784ea14a315941a63350828c5d4a52b4508dc9ad0efc89598cc52e12ed43772b94cbcd8c807fd995d47fc0116a403bea9f9ebf454de0fe666526c817b83eb90b3ab9b938f97cf3170d597066cff9e2c6c385948df25d29f089d28f3fd1895f179eba9120813660422200e306eedf4d4ad379a1349d26a5e9bc509a4e93d2745e284da749693a2f94a6d3a4349d174ad3c10a4ab8a7372945e7855274509cc07dbd49e9392f949e836db8b7372935e7c74752734ace83517d459d4939503c51168ca0be23009e36934319b2a1f8b31e6345840319c218f1eadf5434176ee040d6996ba8282a90a7964bc98a5f66404e8630edf54451e841b68ee40060573dc271e94411c24c1ab7187057124c45b8fee58863a4eb6bc5f61cf9fa7ac4fe8fb87e13834d4426f2f5f58873a4ebd7c86a788c7c7d1a41c95e201fbe015596d06b39ea28da7a8dbba0346d2d26b32eac89491184ee4e6ae8787c0a006aeca13c6ceeee63b877f970607a84785c376242b529e856b4f70d2ce4a8aa53f0ded3f3f69e01bf01f34d99fdcddf8985ec300122c77704449e9115a2c6e44f38cd2ecfdae72058e441481a9dde88eac8a6aa53dc8fd2348f8e7adcc3b71be3a6e1e392df6eed32062448f5ff7642e8347242e8fd7c0b5370ccda8c654dc1311549700ccf1cc54dce589a632f7334c6198b9956dab5bb34b1c9589a73ebe356da83b13463c191dbdd4b778df47e5aaee7e68b2bdbc937797db6a8cede747b8798614363b9eb91ecb09eada36ad83a1a21f172ad1074f03658d7805f2dc42d241294e32fcc97fb6bf3a50d55e5ebae1d01d5f67bee55d0a43accfe357711a1924151b09e437def39d4b5cc73db375ea74d10cdbde0731775a6a54ad79a5bd34e7827ba23bdcae69191353e12f417bee0f282b1bce9162959ff56aab659166026ae406e3e29c2e01103148db5017f528d023d7bcf6f5ba322151ef0ac4f70fccdb33ed1719d6c23bfb408676cb49b10ecac89e1e9593d04ba636c94fd30ecac307baa89bad308e13161417aad08f6d40e932ff3f2ed45b47d34142f3d411bfdf254412ee5b21d10429544249fe9984279ab291cba883d8c3173c78ce7dabd167d549a66547d84142ef58d735702b913cbc3dcd68700592218188e586bf0747909c293917b0da4a2e676796d701b3c99da42539b218ddb4d12916ed72254caa9050a8260c327ad45bb7cb2e93d8077f94525cae5b14681a24b99735fa8e77f21075e484084eb931e4c1942a2747df3aba9ac10dea57ef4063cba7a1c0d42a35d10257ef596feaeae4275050984256ac8eda89f9002c0c4f07af6ef3c61cb775b2d400fc5d513fabbba2af735689156e1676e2d1c10fe45e9ced3857d3c1d723c565fee4607676f2dd2e2aeda57666c61c27fdedfea6665c66665339cddfeccadee119363048759145492d17b111247fcf3f421d06c89ebff1774a163647f4d04890b951c8f0c13ff7a8db14fce4d1d19e97433236f6ec483935341b5b96176263311640aa1b05c23fdca351a8767b5b216a610ff42ed53cd4b09548e6a91e3cbd528a70b1c2635089a4d59bb27cd5b22e082764270419b21b28d09c6d38990cb7eed2b0e4a408856effffc89551dffd2f15f3afef3e93802433e08c60ec28819b688904f82b193f008b9606942466235083921ee83827f626460c723e48941c83b3330b06b0606860c3828cacf6c2bd706645f38d908949057a0aab77720c25695725a0b46840d8ef351175f58d7261e6759818fb6ff02b4bf530b4ebcc57beaf26d66ff1ac9c00b4dcc0b655ade58d6443502af6b5e69263dc1a81e98f1752befc250d482d22a2e73319c403350dacf066a9e3856331674d558cf35633d578df55c0bb1ebd543ec7a35633dd78cf55c37d673f522ce71583ef1cddbbf67968a09c662a6596af8af6d2e6166a9fc07cc526dbf59aa1dd52cd576cd521bc32c75fe14b354f3ca0ce53f0e374ba54392c54db3d4e121404fc269f0b8a15e239330c314340459a620512368db6b47d8f66ee58f7e9e692ac242124c3c2f52e45f59d98cad3cff8adaeb2a4b9459e21b451dae5fa6c6e4f1beeb457dcac5513b6fc00f635e7c5ad617475c2dc3e99390b1ae2b4dc99fdbb73fb662b2af74ab34e03d691e205c87f68bfb35354c614e87bfb03437c539314757addc5e42728ba112148929cbef5aba0338a52777b376d4bbb0e2e51573fcf28a044023331850d030ba7ebdeca9055d0b0ac7384ffa092ee4c856047f52232421bb16123b5b0b4158bff627b96026c59bd84066ecbdfa2b9dab13e89cf9e585e437082ea8ea95c7d181fafab88aab546c25e5af4b26bf7b175bdef5e6141ec5ec4a8ec8f8a5486a0546115b4d556569fcae7a3f1defa7f07ebe783fdbdecf2fdecfa7c00e94a1a6becc57ef67c3fbb9317a144460971fde4fa343d7fbf9453bd16cb61ddf8d8c7f07d870d2622c69eaa1993f420f0d8154994570de9860c313f100a44a68e1934e8862d88e80b0d08a5032a111a218b622807dd926d8572b56c4ca3f896245cd691b8fcb059ea006350b3381a7ad9c50a7614d9965d5eca9b8b752338faed4fff345551a94760b5b5741aaeff0e4cbc715d332342429fe616431363217e7d84dbf5d4079eab3194ea5d36fb1c9589b7b37ec770161bf4b1df6fb995862f7abd08f00b5ed42718e9a5c098a73438bcfa8385f64fe2e4270cb4c03d5ca385f7c24fbb76164ff8e4ce0b24e087059eb03e9bf8d10d8b2b691fedb7161cb4e60c2f714f13a13afc9973f347fc63ef351e5769eebd48e9ae7fa371f4eeffad7b5fc727ad74f4bc6d246a27f223cc3e096187023c3e0007b93c16a721f57443697e9bd416240c793023a81e970065eef7d25a4152c025c80aa41d06910606f980c1056fcac195271c00455ebfc5712e26c2f216e203ecf9e139a10778d5ae20332f950a6ff430971cd3b9175d7c775ca593222ed8250fcafbe2d243cdf579ca69fe9944553bf616ffcd77d00c1dc2324247c7769c7f09c003dd3091036221f060fd0f0584ec3632e2d8fe534ae81c36f709cbac771ea06c7a93d68bcae7fc0785d33f88d99a45f379d51a32010c7cf32f20714b1ba6ef2c32bdd701220140024b58821379d37896ab0f3665c0959f6e979c55bf7f5338557e104910f712d9d770312fdef2940f22575260553a8d37d94d7fd7fda9a77424631c4276367f833e0cca9aeae4bdafb581498a95e90894025f99f03b23822b28929c67801f0e8713f9bc1f17f4415cac9cd2a942da5d59b91dfa9f754a16c69575e80cfd10c88dd719fe0e40b888d62d50dca1c09f73bf4429cedfd1090da3079aa13e26c6fbfaf0c650479eadf284439b8536d3213395be5af153550009a94199b18fad4d8be9b13f78746f3845851cdbab3930875670fbfcd8a1a563efad3aca887ffac15f5d33070bbb4e32919ea0a73b60f98b3de49c2901763f32461b42b9e76d5b3afd813cc6316474444898525a0de2f1f83d7caf2fdc05112da58cd8045c05013d8ba9a53ac268ae9007348e6accd80897f418e2a997c8bbb056e9beaf845b78827b3c5852377486754d34d7e2e09f874466707df55bda19add153e6a671dabe88b89b3ba9868ef00fccaaaab7e3fa78a455a1b61f473865c8db621545dddc16d73905ae41e8557a6a94a60d439145095980451c7bbb873e5d0fe4137ff8a67d5902aab4680b468f82a41ad355ee43550456831fe567c26199b99f2d7bcac0dd63e363877f1227d6c3015267e5d19ac7b9ec17a148c1fd9f72cd669c3623d09c68fec33f18238656ad25f9fbcb3fe3218b38b70477933dcd187f290bc0a7ccc72e6ec79515c32d673191274d33c0bd0f9987ae7c456c0769a8915aa25c76f9aba994d812aeb2f5ac2905364cbab2fb82e34b0f8aafc9691904007b738f134dc62fdce5b286e8ab700434b5bdd22267f4eeb01929f916e790d2f6cd6efbc86163625c06b5861332dea1a52d88c3fb98613be749977ccc4472ff432dc589dfb4c50c6bc642c6fa09ae55c5433683050cd6c37135f30b631c3bcf65ef6e14230b6308db62957ea98c1ca0df40ffd33da4e3ea2b63382023bef8fac6c6b1bdb9d5afb337f395a9f96733fbeaa192cf3ccc2649e664828482742298e6684d8aa7a589dda703ba3aea1d260f12a4b59fd885505496f58662cec08be105b07747f856f85f9df718094877c1d3c9bf6ce66bdb32befecc63bbb0bec3bf3ce2e386b0292427357024635e1472a361e2818cdddd42c904d563198e9dab9587185939aae583fc9fb1bab2794ffcc93728a303231dcc31b67d877b1287efd2a50c6286f52f3449033ca3eb398796d84c8acefe0616a7b8c6bcf1a35e750207c04bc262c9dd28c052a626372796b3a41b070e8e229235751d1477a69ce036b5dbe56d83c3a10a00f532feaf4a0abb97fb2971cc0dade7f1b672c7d0509de8fee355112d64510e1b2a283f96216933fb73fa2c40d96a8721266e599b7b2dd5ba5cb8ca5cbe6ad0ab6be552f62d8201a340cc6bffe2cc66f9696d91805efb3222c0affc6886003bc0990d20db4c01b67578f141977b9f752823094e4db1bdad5f4320375c299643a077382211633ce46722be62ff1a08c402ce0289ece7b9c8aeb8cc05d0a859423b55f67051ea87d4fedd759811b6adf52fb7556e0214b8215b5076405f6a278a61a513c53a9478d51be4da546fee795ed4940166a9e23c1d8084cc9daf98c03aecf17c4fbfae7396379ee9d3f52ffebf3e7775e1fbde7def939f5bf385f63d52350727389b2ce086b73d4e731974a6d2867a3334364bdf4eb72e3a99a119aea58b34baf51fd7472d6fc42158d3ed4ce8005be095f66c7a7b1eb15e46dbf29eeed822564c5b411e33657c30ef85e728dbb637640f55753be1d092d1eeaca645808bf5aadc077f9bbc9d13b9bb19d91cd170178e796df01e32d4c3861d7018a4dc70bdfe80718b2e111dd19ecb56888e2abe074e95d48baf4ca908e2f4ad8ddb5080649c7254ecae6d6a4dc82c15506e073643398b522df8a211885ab8b2dd685490d11577c423c34433c6c46ed63f4423927e281296a9f50fb94da93d4eef2606a1f52fbe19a07ebf1691a9fbde2c11bac4b73dc56de9d59bd8e8c6543ac7283db4e1728838a24aa8b97f0a11cb4cc79d555db4ca4b80e57f3ea308e381373ae43d7e0bc0bfd03d8805c87b25d180ac75c47b579251a75e0dc928b684d570fe76bd2d695024feedd9955270b9a0da0b8bd05aa9b20a06b09dbfa45ea036ca04482a261e9832f6976aa52b28e9246cba594854fd60c431b3e12da30da625bf0b78d06c969c27020cfe0b13096de19db4a51b3571332900e8615dffd15db13f416c827d378d096642b335fbfcaaa73799edd8d3f4500079f5ba34bce0b8fad9564a87dcf07449b7303527d5162a98fdbf7eadabe6780428499f72214b7ed5f148a96be64e53f0688b66702d1b6bec66bec650633f30b346ca6240ac1402bd67f8bf037adcfc801f76c910db580de05290b464ec294cdef91c233b030c4926b70d9195624f71a34ca6cf67a84869b45f66b3468dcd9f4f5882000dae475a72024da93ef4a0190b407a3539bc923ff0832c632b2a87bd71ad888171dc68a8e610dd4c1e2983ee62dd665f989a2c8413ef016ae3a9ef361ba023bea044f4cf928edf25175e2c8a7275adb28dd186b7beaae6d1448032abc74fd11a099e05a4f8fc4961f8ca51c0b5eca0723dedbb0cff782e108ee97a9ee05d77a9a85457b778c68ef8e11eddd36a2bddb46b47723a44875c788f6ee8414a96e9945aadbc146ea1b64f999f800d73ea2edfd04235f09b1f3a7bac68371833a8136e9d93da08b4b2b433f3816661080b27adff1e3e3f8d9c7378962046cf07630e0e5240ce8a219127b530bf1c4d742c0e81a21b1cc66c66f37628262987f75cd3778d4db7a6a2a69bed7198db83ac0073ba46182b9c3d4c2d1d7f2ccb110d4381566af2a387157347efd608badf47e3862284819dde48b1be16b1fefda514abfa5baf57565c04278bdd58364ec606abc6723d24e30963645c1b17c3461e0b30be8743f3563a01b2163c04495ed1b8bac1712e0d60b4193698754d0090b7033506507d67b63f2eb064ec2897b81f5628c0a3a3609a508128282ed9511955f957e65fffa84a8faebe3fed57117f16b97f281f2a0378bc85cba4d40291885a14d4a37be7d82e999852b6cbf7ae917dcd8adc802008f5d3060fa426843866804fa61f4217a1f2889c84374f1f444f4213a75e681bb180fe6066f431fe73542c995d83363b1678f6b956aa10ef250aef57978bd9fe43859f01b6ccc0766ff5bb188fa8192504841c4fb0e9760c1e47f004e3ec8bdfef11c89c6758e438d65ca0f3ae8ffc7732321cdb5b98277ec272efd025b88576e9c603f9a534064df95243162388be960f081b6d58b2fc4aadb06f6064db106803f7463d7790f8ed99a8738eb78ee12dd94e0be51a0361b17344635c9d650f08fd24d25ee1bd542a85c039ad71da59b12fe51379ef0c67bddb8d7803387a87dd30899cc3e553d1173ff6cea899efaef7ae31bdc18f5be37d49f67e8bfd78d2f078cda780c63946e9a3f782f3b67260d9431dc4ee981432531dac72865ca0e65c60e4135c00765c60665a3f858f89ef90f97caec7b5be4e4aea4ef4313bb592ab31b28e9b73d5b90190816b46b35d4d502ec42a71c687d95f1013d2da303b983d0126aefd03d551952fb80da4b68f7b48be85eaa24c85313db637b82da63d4ae3d39456a2f507b9eda0bd49ed7e3b3341edd53951cb567e17ff9adb0a87c56e6cb3f97491cfb4464b8d04ce2963f93383284dc7516f2076b865feb38d7a534fd99c614e578afb4e6f2e9136d06ef400cff0f14c7287ea03e7d40718cde9f8042785d1ca3f3000ae126243368121207707844ec1ff0305b49eb7fa23ac67d9ce8bf8be8ef22fabb883e0c521d2cd4de5a45e835357d9be53f383fd387b31950bce2b15c0523dab569d04fff41a750332455a1150203db885005adf521f4f36164efe6ff091c86484074184aeead9fb3560a671663b380f5d3f23b718f6e6c401a105b8de53374e37eb0c95b3eb2f4f1d80033cc27191c1b30316203364614c0800767efe5ef4607a8915a0d042555c7074cbcf8007305611c808e0f684740836b1af1014d233ea06ec407d48df88096111fd066f2db9f0c11750ff36d5cfec434ba5008d4a2c558314a166b9bf2fc0d6adfbe3764e193bc0446eda3f43d5fe765b18e4508fd9bd131c920fabf9b2c71cbdfd90df177b64240529b11fc9ddd90a08266480a67c4d2ae7ff8fef127e20d860601ed24633bc31197b9113e70232a2829184b9a46c5a11b3e90e58c65cd2536b4a22db18f59194fff01b3d9e913eb7cfe2366b34f06e0ab3f68360300bec6ddb22b9de0e487ce23e121f56076d90991b6db11c050c2b86533845b86296b518a2e241ecdd9ca222cc986c7f31663792b93ae186141d934a5ee907e96f35ae5b84c31585eda81de9ed8841b7908842dccfa4627ef4f9389a363e195568a69ceee6288c59365c6927e29182d18fb1a88595fe26ec5e3aa3a236167690ca0d640150b17fcc07c3eb6e3a931fc9023b5a0e4991f70a92ef8d96c78da4283cd1abf12e90a08ca60b7f861d15b03a2d9941ba1bcd9b2e29d426f72b33293479e48c1e01e0cfe39485728126508d34d91be984c33865372cef3daa8049fc9342afdcb02ce63d5c84c01df146442d03902a37fc31060bbc6825d44916fba21f24d33443f6e870096756fc473dd038117267cd106b360e077daf83de094f602398654cf5596e4a763bdff71ece0ab8f1df84db37fd9c15f76f0971d7c2a3bf888b61e6ecafd3ce5fc7da6dc47ea105fd625d81944383374f10b1d5dbc5317ef87a0ce74434cb961c2e5a3b4f979aaf89f6ecafdddaab8f4a9e2b46b496fd7daa87dd6008d5a6bd0286cf0d64faaacd7cfc962ec64ae9f94b77e10a8e06c024ab9d821d064628758bf25703fb822a6e94a334ecfde8bf5df0941a66d8560363d8a53d989a09a7d2e32ed271b1aaa9ea161f701434323aaa1e1da58f02f1a1a6a3e43420443433d427cce30326a3f31bc342679cf787c663336b3112398f2682af4f5679c6a1b668cd629626752de6d7d79aae034d775f53644c0547feae6710db0fce058639baa67955344fb58c440ae0e4e8fdf527afc6b3c1076aa9134f32adc9c01c2779a10e6fa3041d0aa903ad102f89dcb448ccb4c89a6beaf714942a6f25d520f18075f12cb1575d54dcf512f79fd94ee80623b78405bdda103d828d106900ce0944484f04fa072d4b7067c3b763c12af6e40099123c82b78dbc291c3e02bc7508319f1336014f4955e0273a51a77186238e2475fa39802f76a8e2d431ffa197c353914c1577ac1069b757e8db395bbd1313734179f6372fceffaf59baa7740ce7244f88195bae6f5c959d0c951d0c9099cf410474dc08177d56ecf06211f0462249caec04ed311aabc3782d3580d29f7b3334542f76e2306e63a3bc4ac9c119019f2b837ea33ebb85cbbf95311c264ca8c8dca66988cfdef1a020e8fc0185d007c841802060184be437c1693dc5911cf2dbfea73989571007c8d1367f25b64fa6d18f4db0eb12074422c08515c00ad103cf45b759783e00422a21445d6d2ee8743feaf51e8ccc0314cfe4729340caaf90f21d10678ec4793a86970802a8fdc3a1c95ce610d67f31d957b8739a072559ce18fb846be031881ba5701b96e82e25599385b831f38bcc1e40b0d8453df2b00268a46b6968b5cdb747fd5dc5ff5c05fb515df7e8fdbcc2ef108c0a508566a04186be83aac486ec2c6849602f4e1c0cc7f036047b04c7517b0e342a61a042f2843d4dadd35fdb6834dbf66218b6b2c3ad37f7b8d436706dc5e63d0413c17ad906bfc3973955c63cfc13569a568dcb9e9e90edb4e4465dbf5e88be679c2372854fd9c019063e7497dfc8efaf3ed0cd8bbc2cb93276dcbce708d4e5965635e1e0c65dc66239ee743c0321ef28c408849872a57a885b0464cc701a702f120538e4190ab69e0c00db28b0d87047304def4b0a207decfddc5d95a91c33b0df99e7b00cb62c89388440a4aaf0185598b7b509825eaa1ae352f79dd2fc031dda22021c79abfd4cccb7983277c0d3ab2334c053bc7bc3f6de440fe06d335561d5626f7bde31708c8376089b1568e0b4b5c63d20513114cbe16e812c87e8c4b94a47b096c332fb12d9be8c88b63704788e15b7e09bd8146479e58263c32b2a90028ab400ef6a04fcd9e731dfa5a63b6ebc283a32957172017dea1a2faba2ebc7c59ed71b95c900472975f8e424a1916237acba4c13d2dcffcb8b0c8fce8d6407196b843ecbf80c8b15353df5b9a1087d482c28854e295648a890f39c099373c612548a3ccdf45447ab4638cb3d69eaf0c30c9c96f7fab74d4878ddc310f6f755bba6bdf2f4e70bd8f258788a93adf0663aa9a90500fed658d1b7b59cdbf9795361517752e14f8a24e36f08bd27863f1180446601cd9f571cd5fb875c64d10361fe4c3fe9d900fd5f0b298b5286531ab816531ef2274571fb442af8f84b608bb73c32de358778b3cd6dc3f4db7a1e51e36f09764134cc502e684ddbd4bd4dd3f353c6757678377d7859ca80f2edee65f701398c1e1902fbf40d7051cfeccb5fea1028fad5b64dca0925372fd9eba8e3526d5abcbb7db418d4622fc890702e63f54eea411c17366a61035436222c26a6487858087a98b0f78ce7419c5a18858a4d11b70bbee62956d23e3374730decd9e189b3d798adcb4aac18ec0e26d801db9b212c22099b6702fc76d26189b998eddb3f56811e687a08c06862564f75e4b88a1b81dee2a6e2115088d0d0fadc7f720d97a21296e3d833e7b067d7643e8b37b9521f91be2229c087485154b0c10686d20c0807c8fae72aec90d45eb945937d72bee2d181b9874b5bd85ff11cde4165ced3b98e56e0c96bbb98bfc6760fc750391ff36ef2dfad40fe1829d102aab854486d5437c107583ca9a2195bb5bd16a3e190243130aeae8b2d96a0bb8ac9b7d0934d624a0315654444ca06389cb5d2b5272f50c7eb77440869c23d9b6f4f74a59d6c97a8f4012945e2f83ecc92919c51dae3de192c90cbfe3ef8e5e6ee9d2efad65b8c6a2af6e39e2338a6902c2533ad9f1ca33eccca5d153bccebfdc7445cbbda0a24ef10eb38fd7f2e5e0c933cf7474191b5d58a7f0ce5b133dc8ad7bebf61f75ebc6e0e972b229fad18d0478f4ae3a7a72eedeb511e1ae1a9868f9912fdc31bf70e4776dbcff5deb9a73b8776db2da9eefc68f48e768511951d5f68dc5d8c6b438ef3d8bf363f69a00c925b88a405848678470e3108b734437fe2444cb0f6cbe7572f1484fc3d51f147970dbd3bfbbfdc8812510de33e6f4eeb880ff0114c9c7c5c2c8e84eef291efdd8ee55bfdcbddab4082717db574b75fde6005fb12098e80d2e2faef0715bdad6f1068e0261439920e3e2d0abad96fb7842b5a4d4cc847493503dcb9e5e6f3fba0a249258978994b87a5208f20a79521d3b36bff9a49ac3a76e3f2975937b71c183595b03d6d9c7eb1035f7e9f594ed1f79fa1a420912d67ad8d3eb9d627ffbe9a99b5cfa9e9e8c05f63ae0e9fd13d031c3e61aaae3971062f1dfbece440edf051f35e4655a414f49cf6f6fef3d659b2a1f2da391b4ff43b6346e66e8533e4230cd208269a16061a722bd4cf77d2fa33971e1f6cb6885e978fb65286556aec3be4c6d6d2dd277abb685a20285033ff85cdfb704115f7da3ccc7a34beefa76422493c0f842131f087ecbb7eb2a15ef2870b4796477bfe1b4585d14381a71b3c2d1ed1a1a9e2fc7ff20f9a093c5c79f2e1ba1b246d32b91d4f24a24c5b0a4f8cb1e4b8a37773b3c2e6095c62695387fa112e7cd0db52f93580982ca9cbf5099f3e68adad7d44ea5ce5fa8d4797341ed736aa772e72f54eebc39d3e333349e9e8f4a9e3727f0bffc91d9bdbf52dd38b2cb2082450a9168bd759b28df0d02f355212b448a508950f73cb5aee8b4d2d02ae569d83f97f866b5cd0a4d2a7187c9234fcd79046b48ddb38620e8af7a4999e0fba77f1e5bace799c3cc4236fd407bd87d64ba4670bc4c18b05858365a58a6643b24882cac10c635d4c1fbadaec747b3d1a255636cd1260d6c2f13508d71f02f5663bcbad1df6a8c7f5635c62b71e5262adb7fab1ae3e3d910810684d5ef2ec688a517074631c6e42717636cfe778b3136fecd628cf347316cfeb2efbfec1bd977c2f2b1ef16095147f199ecdba76d6effcfb0ef40adf2b7b36f64d031fe977dff77d97794589a0a63b38a114be3dcd530113ec13404bd172ffaf3631e568692970d56f2662108e42680b4092c5d7c24ee61642290afc2d2859a21e9425120a47b2108e4bd104dafef953c9ca9859d7879342401c2134d7cf7c6d531141a6c33fbd7e4e95dc0071d3fce7d2b2a9e41dfc5b94f82c48038f77bd8085ff06af5b864f2890635d8d35bdc66f5372f62b5652ec06a840598fb9701db1716630b736f5cff5e949f109012b5577c5ded2afef4a4835a89d37dc5e72eee5cee93d23b6b79116f127f8e1e41e2ed87e4275d2cc37684acbdce3f81c41b1e80e460ac811a3ea36dc466d5b10759f53402b96fcf9927b3a93fb0aab0c0d69739b9087434f417e61e4341c3259f356e53f8f933eb626fca8c6d0c0a5fdfa770744b18149e885456ebb783ae85d811fbc1250a8ac198a913f1ce92badd1043622fc490d80dc946ed845428e885846ff61e2c7091107f3678d59f5787e006e42236183a94ed2e9a32634533fd3be1a57f63f50233c6d9858dde70c636973ad387b7850862d82345a74f8f8860ad3054c27ec81251829fbb4600b65d2f927e88b5bd1b825ed50b8971ee9bccbf1b25fab4cee4924f3a91c2f67f3fe095e3015e1d7c32e5c3c5ac651050d4356275fbce71436722c97789a0ad0741be6dc630730ee5cd23d7826bc7adffed135ce50fba90c3ec2dbf0780b5fe4cb89350217326199b19a9effb7054fa77eec9514b5dbe37b23d1fcc5e3af7d84bd7a7f945f3e475c224cb6e84d0f6660460c94e043c0873071ef1902241684dc8d2421d89df50393200992e72c5b2fb95233f542dff3a75b1f3deca9185c8dadfafab75a9ede6e3fbc0cae1a2f12d048a1b109527208fa3192afc3b50bd063c3820781002f11abbabe44548327914e2b515220b8741bc9a2bb11396cab40b871ffe809257f52979d52b25cf7f0c3e113b7357e9db3fead54f8ee819d4e7598169d4563ca7b2347e57bd9f8ef753783f5fbc9f6defe717efe7536007b2cbd79878826c7cfa6d9cce19a71bdecf8dd1a52002bbfc08bc5ed7fbf90565f93ab3d9767c57963f49c64e0610edf17e14cf2d20da3faf269f695285dfd2f86d195a2ee5342cee6abcedf09a7ca5aa7f8f0d0b976945a80cd20c491fbb4ea22523eaea03053d3f82f0da88ba8f5e97a1f96005e67b08afd7ed0d8df0ea19582741900036b37fb90c8fb562450cc94b14c17ed8c6e3728127a84111ca4ce0692b27d46960472e624cbcc1eca9b897d17ffc4ce74928a21496d4f416f63a3cac766431363257fad458e982b1a2b99f2fe58dfdfc93c26a8da57f3096fec2286a6b804ff82200475cdd141320dfde91b50fce845e70292293cf98353ecd624407e37cfe11bb41278234d10c81bcee84386e1af761332fa489fa4588dede3af1cddbe7c009be43d27ce71e7480456f5066ee913da81318dfbdbaa7f05d161318f80bf85dfbe2b377054dba08163a0b2d2c6c6a7dfd0876577347ea86047086d95dbb61019cadbb952ee4db3dc6f870b1bf18caae7de260250f513bc9750e31a096f9825ab6b083374eb0e24b14db52529332e2dfd4c00d5f0f1d325041fc11a2f0b4d4d92a635509aa54c5158e1b28eaecb05b6d1bd2ad8e3e92d51aa1c4d66b4b0bdfe2d701c7aa476aa94deec5818fa1f61725cea8fd16be42177eb711a519a458b5fbd03cce8025be309c177767c281f04195282ecfd6342dbda1b3b4bc3b3891527de41ae8f16596a6a9d7a9a309fe4ba84fd73de3bce146de38bc06a188e7d730255dc56d74466cf5022ee7f73635d88a6ff9702eef69cb931a63939a1157f445dbc42b8c252b864ddc09b562610892c1d472062836b499a0d865cdd4b0e9681abf7e332876cfe35d358fa3f9ce8631b4791956d689a79e219391d6307857ea09f55fe32d5e675f59ecbb7ad0193c638627b0c3c8d2b661b1e798da5cddfec4c9b09906c4af33d1c0613beb7ad8f0d38701ecd3e6a79670b3b2b2ac2b014fc28bee78065e74fe3ff7a22359c9bc79624408e2b7599de33aa3d754916e217d5f67f2de44fb6e7d2eda7729504e97feed48061923c8bcd0f02c0dbe9f6e71ed8b9f6e5de98b9f6e88e0c5cfe0eb3a9a0df82f76ebc6d73f9bcc16b9fba605c435f25862eebe69e15675d93fcfb4300989d64a1b227ffb114f613bd8537821d47dc4801886946f9a191a37aadc643e889c57357f19187abaca804dd2c51b8b13c49feb746c3089c9e5ce123fdbc2b54eda8675d253d6e7432c7d3203e1a97cf4947575760922cb8163abb50fd2d99bcc49ddd5d9e781e0618e9f1714adf7a4f327e694800b987d10130071e1243f28d9ff0c989835385f24a9b1ad489f66ae0319f2de50c834ee81fcea8e737185589f7eb620b2fb6a54fff78cd2404fe38746697fdad03faa4ec519110025856ee311069fb7698aeb075a306ab0063fce8d7d6dd563f9ead45166a40fe2db2f21be23d4e8565af3ef608761551c9286bda57b0724b14de9964a0595399e2a3f1ae2a951a76a1801eda14ed5f0d3da53317ff5f1e65e207a58cf63ccfd47a2680d90babac7982985f8895288ab9442fc4c29c40ea5103f510a719552889f2985d8a114e2274a21ae520af133a5103b9442fc4429c4554a217ea614628752889f2885b83ad3e333349e9e8f5288ab9442fcf29114e2426455fcbe871131a87db9183d6a3056841dc5c3886da6a3dfb54862d3d1ccd8b8bd22d0b8f1d102a7c12a522fd0e8d37bc4e663fa1dea8670d0328483464875f2ba211cf40ce1a016e25d34508041c8d0c2818166af44dd3b917635568a1c69f77645396d8a7f4b89bb3123d860a021fe76caf99cd2b8fd7b94639a11ef92cee8ff0ce9dc3336378c6d58a4d46de51325806183221d91c08624057a1bc66691b0a049e77bf950ce72e246be1752ce557a5743a777193ce722bd2bc9bdfcae91f0f2bb0e82c957da8557d63b3d7f76cd4b53a0dc06863f479c22c8a49bf900a730c22c0b7488116609ae9d7936935f598803d061764adc77f229a937054e978efafd15dc905dd01210c9ca59f3b80e93956a9ef06548cf6878c7a06df4af8e6bbe7672099e29b9cfc8949b1966fb09f7d9e7af39783ec86cafa8569d05da6b33f18d3e9e62127b8a1ee83351d150b71d17ead656bf2b3a2355a9743a03559dd769a7ea3c2e435b2de10a2e4354e91265effcc0383f7df2cecfe8be2d667f736df6f97f0627bd11050cbd1908861e31dcf4c328d14a6d90657a34a959b6a2958c7dfa970bb16860d02de0987c037d51c89b755a96ba4ecbc2add3327f779d96872ab818655b0edecf09674d2adb32ff43cbb624c5fa09be1fda41577c9b0087558ae062da4c543c4282cb1d40fd19f30c15d05c00718df885ffdf595b8775a4f22dea572b7e2a3376ba708a2a82eec5473663239bc575cd95b3f6ebe32e5537b07560ff1a0b789d3c3f02dddaea4b10e69a5384536896c4ab272dc692977539cd06669e6f2a7a44481ff771ec69191fdf61ec4ba986e1240d9c487521b97ec6aec0806cc6ec09bc6fdd0eebe330392ccf15276b4ab8d27303e27677fc082b96ca95ee85da0a447c23183b88cd93d194121091ad24960987abcad5b7789d7d1bf31f74d70edbf1a1f834e8d208e2a059fce57099a816200f668f157ad29eda2433c70a9c4ebba73beaf4994e9fdcd36d753a4579eb49f322097ed4e9ecf7d044efe56e83dfeeacafbde08c2d786e866ece34084d672bc2254650ca565d02c3b28d4b34983d95c96fb744dc90baa3938fd44d69fe0335c07c7553ecc0ba29bed0957fae6eca75364340dd94d167c90341b9470fd65279b44c4ac9f9789994c6fd32298d3b6552bc81f5c0d17fcba43c5a26c54864346c7923c3f7b2e1ef4cd36a46a893d20aa993d2895056b311126ed5bce17bf91fab93f28eb8e39dc5d82e0835eb8f740eeeaee38e039c832681ceeec61d9b06c08519f4d5fc43dc83f7726da39b71be5fd1cf358ecf0de7320210d40d22d1f413b3188b99f4332c474912fb57b253a2d1cfce387f3f6e7d62d0cfea7f9b7e2230a095cdd8ca888f5e56eec20efb02b66e45a13ea64484e29936ef6cae8d0b81f0f881aa2e708b2a9363ed5f237c537b2852bf3e5a57cac4e218282a4f1a31b5c96525ee06ac0654103e85417498063a3353eb6418e866fef38f6770b5430ce5ed9098eb476151c332b8ae57c8a746d5ce23270bde77c8e46dc6f2c66acabd6735814860aea6721410ef2c672c6baea6a1151d58437c904b9b21409b60585e9349efde0b16300b030b3079743f440c8d8213130615d0ba72d5fc877308a3230347d83e427316fc05dba3c8af1bc1d8c6a4ef9c4bdf6930bb9ae1bd1f4f528f808131e081fa958913d37f67364b3b180503d963100a4637429dbf4711a78393634f1c5edc4b536f7d66a1bf08b93007b05f1a9e6d4b9b770563276198772d175b05741f13fc404491423ead7e64c7a3ab8959d68f1bdb7cdbdce64306ec142166b624f82c3e90cb5877dd9413a0be1f649aaa6b8fa5ad3d9a013d61c7f01c9a761487e62da3c6830ecdea9543b37ae5b0bc7f2c01488b1c9a176bbae92de9a6b7763bde8af69d7517743dc816d8f2db028feff40d3ae1763f278adbd009340ea6fd7ca8e6f1a19ac187aac6fe5a37f6d7bac1861a21a1108d9050887a4821c8464821c8c6850e248353a122e788fee535efe1350fe38f04f29a0b6e321757dce67e9ef43db6f400f8c85ff6f397fd44633f2d96297f5e52ef5fe6f297b9fc4ee66254cd6f05968bf69dfdcb5cfe6de632e0e2090bde39d9a58d6444b507c4926fa00874973a2b0a056b4dcf3db1c5136df7c4fcde89e61e63b33039ba502ca33115dcbe674cf55863e0c3204924a6dae07d5ad32d743f8bd40c26b97ac8a061768e9924d5d9441d3b731e5bc3cbd4967327de62acb5da83bda391cc941191af6a364f70a50ce6108e90e3cec5d82ce0f9d456b90aaeaacb2b8f56c87f46f0edc496cb8be63c021e6f20d3486e79698e99e4b8248a73276ec77ba235e609a3e1e92b84f6ace04ef55807ecc668bc49c0326fc139d64ae07fc0939a317de0a8cf3a16f45d37903bafbfa2a3be62a150313e8ac36662cf7fba777f85bb2ff8caf692ec29e7a609393758ee5b711ae7056e91a4d4fa3580a6b6d7e90a6511d7588e77e22bceb2fc3909c9e719eea85d26cd7beaa10bfc7b3cc9599ee7b93a4cf102e0c124f9c052af3152af91b0008d0d6e943bc0ec168151b0d7129454651bcee8cdd52be486c85818cc7076a8284d2ecbdb9130267e96b1d43409511eabf7b39d3c5cb9d2292580ea9ac74abcc56c475d6ac5d563eab1df617626fc50255b9badc30519ae0d4116382161960e25cca75704a148360b1151678820ac4f14698917b77763eaf9de7fe91e5526dfd0db00eb75cb71d277874ae052ebb82796576b6f50def3e5c223b38205efb2e259580df50370a57ab20804834bb4b38278adf6110b9c8c018cc03941dd8f3107f3ee88bfec4147fa7e80be9d14be726dad041131e5b8ae5867bec4f305b503ca2d4c9d139b41d6611716741f785e17f17d0161746f695ab3f1b597232c24bf8de1424bdab8075ab43fa86b6e0a88c370d5a7d8f06265eac519f629818154a736e6b122038479ac6bdeef2ca02294f84ebd7091ff4ac19b2e109d620662427b0c05286a09b5ec9e18a6a3d5907dad849e6058c9c737a32d0fdfa77e6cc5abccfeb6eae3fe9e006e0efb6b0a1f0d3e4abb4073bbeae3a54e093cbfa5b98517906b9c87e249358a32f277fc9018a8b2c58334fcd7c2193de2a5ea8527fd40eabf214cecd2c25427d64ee21078a1d69986acfb26011d95f0225316c660e6800dfd4863798e03a757b209da4a94e34d26cb8975c59b6d2561607475164ee31b54616db44a0be809ceb8e6065fbb25098d5675832ccd263278d87a7f010fee828cd9c18b548d97c8d50c729f27556791c0c59bc5fa36d5212ddec55ceda9720c2ff165b8319fb9c324304c2bbfd6f77398788b703f985f083c1dbc1a17acb3aa5a4065367c45ce52674c0e2c643b43cb3b7750f32d5e8e02397f42e24a196d606e706b048690e243789cbe66fcf69e8fe04c6fbd40d14628b6b7e63868c427b474a77327de677681a731947ac777d8b08742160b3e170738d1837d62c0b14aaebae271013b212eb08d3820039aa018701c215bb19157624196ee310533d83a2390c91036f9ea09d33ed56eb0b526790a77cc242a17ad6d666fc5d636787d6ca136d9111773b5894eb8b1f1895f972cd326969915e325242f7780a937264b7887ce74a91edecec919fc605da0d281c0ed48b5d276e4e8b4cbfa8c86ce61446d5f5ec18fca804304770f9d2873ea35a21bf01ccabdd5d8512a1dabb99caa860ddf8bd5d481e0ed11c7283946afda533bef543df58cff1a40773986f7f0a642dddb89cf84580adaf7688798a96ff86b6f74462960c4490829c10adb222b9ac4e0ebf596394526f6541d9559099e78063bdbab7aaa5f1d352ffd03676a6aa7908cfc4d8db59968c101ecdb0b9e47d1b3398ce1b71c97c18b2850aef194282afbe91d972492fc9a8f51d8192075cd3c9acfdcdb156dda3767f841f08b3765bccb66fc88f9cb7d0b3b945d5ec3161c04baa53c5e4c705a91807aa2141f937286b2912944a7f1944b8531bee785e5b5f8b722016c0efb15961e7f811919f11d46ea36f7f87fad24817a92b817e4384a0a053ec4ed1a8537f77e3d53dac39b65e9662933911fc8b8e5497ed5784f342e161711894051a4bac2d5bcc4f46e58e0cbacedeabc3da20c87d93652ed78054bbba9063699f85a00fa653ff240e32ccdd72360bcf5043288c191c71bead57e0df17bafb276a010d4d0efbae14b3e5c7973fb9dc8fa74441299651539d6a0244c0585ccccc0bd84f8969aabf6cad36a81b1a193014ec714ffafcdb3b08e9ea6073573124c20af9303ec6f137ec4f268781191e0aac15bb31b7cf8da1caf555537ae3359f0945cd553fd4d61867c6b027761cdb35a886a1e963c21b4fc0321239ab14d7972e95ccc8418e2d4f4ddb9daf3edd2b998be11df1ba2ee57127589052c40aa20f9c999d304829a2a2a90a6564e133d66f07f1a02395d4c2cf1a099c5c62eddbc992cc76bf1bcfaa63207b90bf5c9116002fb9923612fe834ae8c582121c41d265f50c76bccf64a356f7c8bb795144dfa3b73f24b54273359603c2d54f21a69e410ddd4d20173d5210b7201c6e880f5846813bfafbaa0189707b4848647e0f88d025d340fa3ed04ee66a3a31254c457ef21c60718d728e42e1e6280339ab0e111923978848647b9f8080d8b3e85fa78e5dc09b116b227e8dd2cd1258b30da262931b774595f57a9696f2c9dc325323c8166d300abcae404624706be086486bf14b0df535c28c10c16024a52872dca586a19b519aba164dbde59c43014c5af5ed54396d330a29151c28bf30c47f68b16e09953c45be4f9b400b1b4cd414149e643ccc57206620f42e2538e27515a2cba2f23b7026083b2fc0c4de524f471987c4e615f67701420750c8f84bc2618933bb0dbb0e67ea95eb5c8f7e542d9e0d70cc59c785311e0560c856534e2bd8136ad0c062434b2692a3d0906bb1c16d76fac0a15a8913de098f92f11cdcc39ac08e1026d71f5c18e7b962db2e5bab4b2de4267c7230067c84daa4129185e0b297c81cba3b0c46e0394aabd2bce6c609ec911f4eb9d97dc95f1e0a27d4fb8da10dda44670dc981026c71458977b8d7a0a93aa3ab84ea151cebfaea6d09a053c14f6561ac36b2e2c908b969cd16d9b6eddcced0a2faba4961e6df34d6dc9a87b7bd089aeb85ac1154f7c8d33ea4c721cedd2058c7057e71df525a8a8f87e4fe97a0380559da8652ba70dd2429a5a9a9063648aad2198ba763ca6746f672c801df4c6ea6cd9d22cd459f309f4d332b5c3640997fe94c6e75295ab57401b6214ea74f600cdd15ceca0cb80978017b7108bac0f313089ef8a192e389e43a90022771cfcaaf195607288360c60eb69be87b7ada586c865803c92436236eef04313c8219eb7181ba0f6334d0afa06ea33a2ecb112f0411088b0c8e93a5f53f0bf33ada3e671b2e2ae8c7fe2e316151e69ea1557cb634d9002f08b5af105be61098f62d896c0a3414b89f4437942b8a1015fa3f10ad65c4fe75db63231000d5e8223a3998e4997113bb91cf2f61290b07c5bbde285ce7bcc042e82b94a6eb9b11447e5a0bde3926d47d939323243103969f4dd5cef1c67b8721fb5a9263e226b4ce8d36d0ff888b32ccaaca502da3dbfc1036c8a6e652226e6592cf9ba40d25b4272d7882f3270c55a76c6d1570393053259e9093f1688c6bd69163b2ecb98e67340e6d22e021bec94c037b8276cbad60e025b3bfb6ff1066b8336ffcdd9a33e725c2051c6d6eacb88310f38df509c463d84bde649789832b2d794da0fec672492f40b3875803ec71c77a35af605e2acaaf80d91b47e29d940e2a0ac0d352fbe2051c302eaaf51a2a3775bf3f38ec4a9243c5a779ab4e20df57673f8c0d5551ecfafa11ea898f2e28c5e1b9ea1bb57f46aef7906128644398d89430d75ac5e6dae5e490ef5b0c67885e97733f59ffd3a3908fcbc53f8cc735104c4a918249e8e6d60023352d57197e8a93f49e485bf601d6641c64684979dc105be21179848c61612f425545e9a89338241a13d6d134336997e3594d06152e8387f2617318e1b9d3a3867d15e499ca9551841638736cb166d9635d0427b60c9cbd246314ea236a0a434f008cec9004727fa7964a6f4a2f8b0b909726fd566b37ae267593d462b3f83a5d5c7c55e14679e460b5f2f93afc0532c321e901b79c7d06ed51cc3d2912f833cbc427398c7a534000946fc9c9cf031c8023bf9126f3067cc534f4afcef60465afd5c060f39d91a5267b5e484489ed1bc77fa19ef31f1e38ccad5c18ab7989cf22524645bad6c0e7b9dcf4aba10df4f342a970301ef7b7e47c402eca93e7a55d7feb5a55cb815aef5faba2810107276241e5b42a35bb1457173c301bc4867f28c1bf873bca5d4a2119eee25b07b0c90bad6988ddb58e33d5778cf1802c8f6961b7ccf6c4dbdf59ae7401c2f2084e64464d05f531d79fb8a939f91c47e298828d1464d36c24fb6d1145f5dd8b05a725e06f9847f0f95504849da4b75d45b6dc959846664bab2b397782d7511ec9297f35a6c0045c34f7c4ade44a3243944526b4017250ab631c91f035b8d844b1d320d8b02fcca0d544de4bcb6a8e03740617f023b3d6d9b5f874bbd19aa95349a20a4c978629170a0b61e394820e3cfcf50a75917706ef273d8359bc3161a4640de22f8b4d3a27cd177740291a8b759920d6ebf912ee653cadac32526129eaa005ae3d7f19452ec314d718f42c1720fad0b14796d7ae4b67a64c944a6ac28b546828df8aa2814f555a52fe7135ec9f4091f6ba38222023459b691575687eaa262c8c7c8521a23da27c747b5a8e48fcd007866ef90406264b80d21625f7db4436bee18fe9709e46a69c2f3d333529c0b088ed8926771feea11670c7d1e6a6e0a56f1bbcbf8d0e2d34e7dc51da30aac95da8b60b76f4fb405533565d6945a0d99d2c78a5a9d99f2798a537fa69ad44563592ca6b8940191a10f9e93b535ae03b9c1247e7906d24267703d56566cbf36e6c5949a894c7926e28265cb2981b268bd302d03e0779a966d615c46d1573071e4a3165c6c80d3d8d9d2d49c0a28c4201ed8720966961a9a1fbd5e9909ae3dc5f781a396b698d441331dd6712a622d5848c5a20cedd765622918c0396011d7342ad96ee70db0ba12cfa14db19ebdba29b667f86e85d5374e3b19d03e171b523a928bcbebab7d58fd7f9e419efe562471b9cfa6e5808716055e0b7cf7d5c8c6e602fa039ce2f4721667231bb748455eb3ef176d05508f1bb3bdefd5d4b29fcde1c972e52ca2b78d3232e8d619bedd03244663b770823ae4f83c0626c2f62253f6df5f24782c2388012eaeee813dd6628302663d9f0e9ae50ccf0f51339e6582dac72299c3afb049f84902d365d18ad89b4fca6e5c45862f692ac027925cb8ee40643c0d6da753db2131f0169373be3ee36e3ac378038cb7d815086365be06ab7aa758b0d08e967a9aa241f170a1df55598ca740432cf199abf315395919b1ae6273be43b6b3474fde8c23bccc0aed5c033ea6f625b09fea5cbdaf9de0174e8ae2ca89dbf13c176331e625345886181bd0de55fb865efa3cbe536bbf2c1bb8221930a4a108f69a864f3ee3aee15c24f818d85f67835e86ad220e31e6e81dcae2c91c603b2d79ec5cc64d62bec72d78b12f2b4127857afd0e368b3d5acf0fc03ec5d12a8ce8a6e869ac6624221dc21084d55ef3116811459ec5cecde1186c728d0199b70be7326c4cd04f2ecbdb465c63900ef81e7d8e98578d3be2e2887e8433fe5f57c2076958f579ce33c180ff17e7adbe24325ca438505d7a46bbe79bafb9cd58fb5c43ab8da2a93df860c934bdc3c7a1a75224bf042fa195fd09df10e6e547151621fc7efb02664d16afb22d87280b39105bd805cb399e9e3868eecaa0b9cbd104299b11ed098ea2a6affb727c2459dfd94dc90da1c4a3dc0ce615e3ca708baa4d11f596ecea59325ca5d0ff997470b33ea352588f01be5135f14b3197ef1b98aace09fb9e1da4a5057cdc5606cfeec1242e7ecdf0331c8032bf6be9a3a6e587b398ae699d751465ec5021462c5914cdead4d805e45145e7164b9219bba3288e9227fb906b0950c316ca4596db0922250ba28446a32ac6933dbb02c1372d0fb86ebcf60cdf464d8012764fa41dc3f5d5c926b39772b5b769a5c18340dce216eb402cf4b91d67622f34fbe8681061d501c434f56d5af86dfa3f4e33323b277121a80579e683249edd8e3154fd342e63d920f4d0ab35f4ad8da697e1c9368abec2d3e6e728264e56da555bd52049d3551915382ab48ef3b42e67862e248a789e2ac1a1f69cc535d6aec69bec570f7d4863bcdbdcfa9cbb75f4ddbaeedd40b26faa2f2596e8ff6ca3fd0f4e7d89d7c18e6bfd8a9f2c56756a9a63b3da721e4af219718be4e7df82887b97455f60895862715f564a1dba93db093a1b03839e76bc7487e80ca80e0e651092f8f4809b5409a5ff6a3101bae88f4242042cb3159a685b5b88cfa86e9ee08e3becdb2da083aa9a5f5878f1259555095d481d37af1f0ebbeea78015d6c2244ab977d2559380c7680100d38e754ce123c14259119cf3e2051701ba7bda38ad0bc4e2c2c5dd5c2f7119252f1a537854cbef31f8658e72d80275b2c5145c2f9da57b56bdc00acff6d6ee592509ce30c0a4394fe9ebb79848349359cba38844c9ba263f25bc15c8f00dd287560cd65898eb2d5b257e5165f6575423565e31f29f40478bb94011626b3c522da584a7a724ea84bf2631d0f95fdcbe8ca40e2455b00cae9179edc7f4985a931b8ac41778a8641676fcd7dc46bdacfd4c26e72a842dc78b5c6cc5af7887d9e4ccc9a0b31162a35f1128a9ee41e463b5b51505c915f2684dcfe7f9c531fadfabf198104f395c36ab3d1104ed4fb52927ebb57a58753033528d511f83ad906c4592899f173f8d0e54bb5aaa1527e2490e3630a9248feb23570e04da6ec3c74abce95a19f269d0319fe98cd1a098d873b6bdd13fbcd183ccc555dd9fdb8c718b5d8618abcd9acf0b64cb20b78ec9fb2099f86ec8af896439f055abc14fbde8e0056d66cf51d45c11ebcfeccb1e9e8c934243c02685eed31c36be9e800dd9e5390eea26a5b79c6a20d47d1d5a7d644db8e98ed5a21af22aaa8ede2b4c8c09f87eeb0d6cb6e218cd5b985208d11483b6c9a92b8e3c07fe880ddff6d1148901fa058ecec3031f9f70c0e8843b68826b7329354c4e888138154bba47e94042dd81ee7140697dc2b7f48544bcc536a240529d7a9d35d41567cd11dad6575aa477ffb3992881501be3e4c7b2505c8d0b26f7080dfb44fbb8706bc9d4f062257c807e16c46eb914d2080dda71c0004ca097c9bdb38d9f47ddd329a11cb64753717df2866d8b1c5c2ec3cf20318a720179263a99aac52abc2cee1b1b7e9aaa9db4061b1c05379002943d7b8205f881c99e9ea6f38973197d22a53425e87b4ec9031ac9b7b6974b6163e689763a2a3e0317ac1ec112fe0b757ebc546f7c808eadec01e610eb02b47278b61dc3b3543ca197a0d3c5cbd3253c8de61b30343a6934ea77d12e7ae2074d8019182a336a46a59ce184f577336a4e1dc841b3c3b20fa8e59e157156912b1e061459b7955fa7482d8dc5068b5bc01ca4560e45475176403c668b29ff9a463d8e70284be122c812bf761a9d35d5332a8a2728d0f59aa805c92545406464237e24a9e270282bdadff271ae1c24b22488511ff00daa47001016bf36a876774aa8b7578b195206d3c07dda67bafee940c24c09ef1c4db2d74e7691b929d913222f838831b5117ac249c7c5bba833397592f838583abe9d2ac043338ca94677d809cf75ce05f5220e3c96c52044b9dc1d900de87c5042aa7c46a1668782d880437dc224893afa45813feded505d423182f9da131b8e9616132413cfe98c0e76b599d2da2513afa99f21fac514c26d4924535f06c233946896ee60a4f98933bb60e34e334d915a3002063ac17da03f4f95e35d88b4879de8fca6c5e934afc71b22c7df06687b20c29c2eee1166886cfc300daef0742b47fdb307149be767fbb6ac6a524587c963f9cf20831bb2e3f682088a279032309cab9d8147134b1e48074d25fb8df001fb5bf313ff8c37c4d7b7037ee60e3e48f8b7a3c8b0cf612a18b35ca2d3c5839234c4cf33f66faf5125593de1650a68ea8fce6a46df71d7a1cbc734ab390693d10e7d598dd21b5ee60db4a6ec994258d678d724b072f1233147e7dd0af296aaeb1e685369747d34b64becbd5962ef352a38ed31ee72231b9f2486fa6b778836eaea0862f5c4946f717aafb921f3ec6fdf2710267bc10d978f71434289d58e298f2576dcd44f4f736b50fd2102ecae3339fe321a90a2a11a5eb64581e1952be003e228b6486eed5d861c1557eb61c23d0dd05d0f3d268f6a390867a7c8c3a2c568b94bd15252973cf2415187062b5d0050d80bdc55689e8745b44d373c0e39e683b50e83ac32f902f332c4296b0f68ea8e60be11734e4b1d030c5e72104dc6d268fc64e8cac2cf2a86d67168e880f981a5a559f596810b792a271046d587a9637157844693de5e14cac642dfa6392d7425ef2b82f70c7e69fc7ca00abc15e665371e46bce6727a93a832f9c5309fa4d07c92fc8a930a41174372b109b5c6a74b9cc924e4d108cc55cbaccb974a638e1f9a86cf6e8f60e6011bd02e43119b4af6dfa2d3b936db8242de5a1295c43be0e342171cdcf00d6f070aebb386f762b56d8a3ce31bc7eb9b5b97cd49174c94ecc54cd0e3a9774049b2591a826edf56b3e8e8cb1f4f1246e74fd29d12988ab13c26c11e569b17c92aa195db33df2d158793cf48b947cd54c1244dfcb475866db364352fb7cd36135fd404b80a90627a14f1205e0b43cb53efd483ba8adc7283af1477d8c97a9921bb69413a7603cd7518e05177cf54e28d7843ace59bf0f87bee2e7f7fc86e95ac0731b701505707230faaa357ec8b96fbcf37e05e71af3a93733bc880db83f26290f3b5a20feab28fa5c13ed2694e8baccae477f2e13a843683cb28f335e22a8a412d375a4503b25dde14f69617fbfc29c8705c553aec1962bbbf2cd6486cc3b447822ff146bc2fc6fc6d943676f6c27bbf7c1e5769734f5bd5ee889b35c6bd1ce9ec81ce8ef39f2ba9b910b95a58b353e5d1eb8ded21c7f7b55b1f3fd0c648dcaab828bbdcaa6de1cf89129025087b201eb42e64ae31df14a93cb29ae4f10679d1c47229a3ea9aa2e756224b21b50d269e8a737e610c4c963c994e7c5313e330695d58bd2f4ddb4b719c733fb1845fafceecaf799cf0d6386df22ca294d634ad78d65810cf9aa5cb3ea395cd06a2aaf80a153e459fc57059c600a000f2faf9385f79c4d963a884310a61491151268f10a1f7639cbc43651d1713aec5ec61b813a87bd309745b710b5ccbeaaa0370b522e2a57db430406ba9bf4f9b896ff18698f2b711c567e372ee7aab990419f45d9abe9983a69bcb6734c591cb67cce38e17ef33fb358d5e84fa78e1867a8a35a787a8e7b7526f346afa6b6a572c6c3176b5e86b7b85adc87eabc7a57eb6e932941fa56ef2a305f1a36be5611fa2231243ca114d648f656c182f1fb03bb868eda9fb1b92c9add0ad08f988c114d5f8548a522f0b2a3ec62efcbc14b3468abeca237cefea5653585dc9bc9b34c5c3010798f31e728064aaac97fd8cbf42d65975392fbb517168a8079638a3a215497432565d1a103ff004b0a3d6b4ab59a3f88585b2ab8ed71315bff54e62d8a564e2e70ac370aa5fbd5e4046d5dc94a0b5241376bc1e1f09b1146f2375fb78de663d06f3daa3cc56477b0b3b6e7819eba8e3b6870192284b8f40cf7709f4f43dba4c745c84534d078d323265e531b61c11859192722730a96e6159b3091a5431769e4fc1ac2ac6fc08f3564b17d1ac4ff161700c01c4678e199070bfe3d39538e36e2f0ef14260ffa5abed6550e258ecec90f0f6dc5f8562d9a5ce6f74bfe6098aaaa141bc95c262df8d15d42d12943482eebb04a20d4d5f7131b834bf4b7a6eb08c351e973d42f7be5e1b67da8d0427e75a12177cbb9495f12e7396e51805a09480b4739ab4b3b82fa9777b4acdf1c1c18b96f5b8a6f869611a83a2d667bd120efc75831faa5a3016d113e612cec55bd57df89fd9ad2bb6b356698999109b12c4611d39458861635ef5ac8ef909c355503f49855321e5a85211229fe581bcc02da48dea01fdbbe36610cd626648207136b0342fd45a956be97d3c12755c76074493bb221abda13499f8927d31bea22b9924f8a869c8290974f3362e09b38e41b6622d74a8acf809999e71ac0375d169ab3d9a50ab3b760449f9398f0eed4e497f3108392a92887c4e639023861bf1139d4e00c96c39d639e5931d7dcc26dbf01aec694b74019197aeb8b03c4f602963e1862099f81ed3077d265f2f3c9a65ad17ca279252c0ba6f7ef7c9990c1e85122cf8237ef9c986c7ddf890014f1fa9571a90c1b7560e397d7b43ae892d6450e47812cfd7696318c1965a55ef8dbeffb53ebf5a94b1e250494bf54d6c3843b5e682e675310b4f272cbcc10a95d3169e7d559f2bc327b4df1ef5d50f8b32b6a01fe7accf9f405311099ec045d64dd5b16173a0024885a230e97543ceb9eba89e2ecab75a3d0492204a667df521ce4ffb9869a01a954837682a2a1aacc826ac18ef96b62d4787e9b58e451bc33db290f083e24e3d97ae40bc710ceb03e1c75c6f4dfb89c7604729e905c21486f8b6634ad8dda7282608426a577b71bdd9974810c9973032a25032e4c33c1dcc50b8ec0fe7542c7dc29998da837925ae8bb3d7e65bcf82d205a2b42612d6247e33f1b25c6288766c6101acd57253760158ab4014982a5b5bbec0953066c3dc4bea1e1f9d1742c2a47605548f163948762ad7e336fbb2e018965cc7e96cb0c65ae8f5a33e0c990f29931d127204d99d7bfb4cd9459413393ec160d5da549f86fa85faec3c4371a2101d39a3b3e75959235233f6c314767412714e7125f5695c1392c3e48f22046fd608794c0dce190f3ae33aba14669b2ea008ce6152c6ebff8ffed9626b21dc4a06815aa44b54239ee67806c3bd763f617bc2dcc8d1944aeba3d3522e218744ee7e5eb4ea80881aa497a90e290cd8f07544443ee85840955966822f39e16e287b0e3da172510fec8945c1a0e71a7dad72deba77cd39c417c8353dc48d9ee702764148995baf7e9ce173a29c72eb3997185f23b3c13d8dbb1f318bc5beeeb2e34c2c616777069872228f98d0e6bb9a6618b5242a36f6b458b9dd31eca6f80661ad184f13d6da2726e1a4f12934b9e562b6416f0294c32f207c66b1f2a45c6ec1488b5849714c29850b60910d7c690c44c0e904ae26f71d2345b2be7a8391e337bc549bb1f6a158a1672e95304b6bd7c17bc0ce8bd55da6745d35806e3baa3036aa6090113a22246c18317417b4d0d45aa7d421c70d34ea02f60e56c1a3035a0e6ae233235a973613f31e82d0349146c1df2df1ee237c8175cb481263b502ba4724e58efd7fe6deac3b6de4f91f7e41f81c84c47a29842cc0f1388ec7719cbb4ce2b02f628757ff1c557daabb5a124e66be33cfff779318a9d56b75ed4bb3c6ecfa856327e33a3faea79c2da881a1c62b0e7a68a6036a7e62fa93ac3822acf9895d7b3a445b9a2a3f5edcd80dfedfcc29789db2ed2ede1093feec4f7a7205b366e05dcd5bd1829330c3113e31c327ffc376ac1eff60800cf9c7bdd40525f1f37ec24f169c778876e4ee80b9cb5c6f719e019eb722b54974e2ec3825b3ab57238e56cc66d7a8f0bc64bbd0e710d07371fba491da5d1fe710ec914ef0abea7fcb083f0d8016d8b81937d016ce2924b754df76783b6d7004e591bd69e203e7558a476cac8cc715b3c119984be7c720a65aafac6949f42dcdae46cb8b59e621f18a65327ed3d16f2a78333d0c8ae1769cc48bbf6a5054123bffacce5dfba352236cc251cff4f913e506b9c31ef362761f8bd04b530695e37410e41995a4b3c89ef8bcd9b53f2c9cec78dba98bcae76c54d2ae3c553ff30875846431cd41ebeca96939c5ad68de524b7f17d9199c3820336611e88ef344c4151c7d67cf80c17d573ed30fa10854d8efadcd0fb1aa3a833ee656f96cd1aa0762586de9f40e0f7626d40abe97f18eb9c678726247c2e5daf81c863cd271dab5476687010f717aa3a5d699574b3a8d6e1e83b7f1a883e011ef3bf31614759c4c193a266aa78e0fce8caafadd8e7458ec2a161f6b701124453e5751ba93e5d7b0c0ac514689896c3dad41dceb49c9669a4f675d4541b265fbc8c3700068f91fb9281373d5719befa89cf7817d1401285bde210437c4950a97171ef2a6783145be9351e3a986effd9e854a2037e03393f7015be05fd85f1413432ac2d1085488af9f3d798bfb77fb1ceecffe9b772d524debdcc769cfb7d81eff9eefdd8403d5e2cd9426da26b7fc53af0146abcd1ec3f3bf98e9e36f165526d132fa821feff834c01982b5ddae11c93f71aef382c34ed96364b98d2d72a719bac3ee812565bce6400f741cbb23ece7b178c746adbfd87d9303bd6817ecaecffee22d2164e28ec42405c3b5073678b3c38fbc3a8f49cf6ac017fb965d139f54fb6cc7cd9a1fd1e30178226b15fb9cd0e38c7797fc911a88a1cee786b7eacd397bd61168ff14f4aec302e5b860c859d369ddb148f7915fbf9296649031781fcd517058f6994df8f18da9054d93b900119ad7249c676f36b3c88cc9a8defe95ce7467929000ad74b7fe2552073157987e8b1f3dee882c6ff64c39af0b6b4a63b41cbfd8af234b1c56d8af0dfea75e228331cfb47387ee1133e23dbe280214dabeec9f0f4ba62fac615f7573dcf2fe6b1eb11ef809a313ef2b378d24567ec14ed7f105781093fe3965c5971cd79eb3bf304e993579d40a50fe1a6db72012a7a9d91ee83e71a6e317cd88f1f43c45652711d699b1412d34389f192a96a0818b1daf547e67546f1be96eee0d7367f64fd0bc343bb5980c3075a14d8bd63fb9df3bbd70ff8583b8c921bed91dcd9da5d7bab2761eebc291da955ae9a6c6b2a90bbaebdfd945ccdda60c4b0b4742fc53dfc20eae669e3ba5ef58d2407de918c2db923324ad38a1e192f771c458d466ebe002c56073288a90c13b8d2a53ce1770722158e30d0a101eb9801e15c8522f4f9614c74d54b1df1a704025a92a8b3c2543ed9de08c1bd499e7c2fbcc9cf118ab216fa624197b5a0fedd8112ef67d98b4236f4fd7e0a12658d8e1b8c65d835968664fde8199cec0a04f1e5421f0c61030a531b888403d83c29fc2e8f285b115938da4518a92158f0a0c0382d2f9e05c4d9014a126e13f9a52f87469c745c4d244a72dfc3fc244ba8c1c29e9d4177db877723aece9bff779908c57119436dc0d29b378580096eca4bd4bf41e0f55e9f0c59dd699f9c2714df0130984e2197e7f70a5d38071e7d6e7e92e85bf20f23998c5947c21e9e0f18a5337619f2d7c586a000e9e9324087fc7ff109b7babbfdc72a4386745052561de20e8ebc39ebf80761bd8cb9f429e0283ef315063c418b3b519c5a2f3682bdeed801f9d3fca2736e3800cc331d4f9ff6957ee408aff37f85f48d9a563e634c80461b0800770478c345e9590c092721b18dd089006aea68d9e458979fc772fb956d6f47db4661a57c1a408aa2e0d0656164391949e9e3c96dc3cb36dc20c992a0c7c28b805d0c93e84e1b8db041f9cbb280cbb9f55efcfa0208f064f3d9d5efed61cd26e9e9563c13e3c746bb983b17ca51cd1845463dfb6813d92019295df2392e4e9d08aedd6ebb112518e31883c98243742c2b2af379a25b4709892c0388feaa5b0ccec60f6792f874d5e1841a4636438c9daecc63d3b84463166d3de85113ac2c340e9ef0cf6a9d6007a047564f8790e5208833ee57afb0e2e673aea1b53e65300219c02b62e9f6f5ec35e9d84eda750f36fd98e2925a20f5c27c2d022e8936265db9d12b58936a3eeecc0badae50148e9c0ead5357ea7878104c085f10949f768ab7a86eb7d8c2cf0b7e74cd9762c764e9a7c1d77073a5ece8c17d777dca8b1031998f478a3b287ad492f87b3651d01c4e615b4036b9f09f7c48fede14dfdf8cae77ba8ac530e8c3c6085c7c340bc5bb30db6c77351bd9eda45de439393e6162cd92472e8c93ea5ed2366f86997aa6bc307773e0cacdaae76d0b49f26013496dda7ac996d41405651db36adf4ae7cdc9c7333db82142002a1b4b35747de072c2b07cec8fe6120ca673a4706a7e5a85b94faa0c538067d7cd138e4a80c755807b43bbaecacefced5a979411f0d3bcee4da87814517d5ab9ffb419f9a559d8f2b8781ddd3f1f19a2c8b55d50376862e34a4aeea2c14f1f11c07f6eb150e26e006d93be2948f03ab619e977cd00efae61d49571e43df0944fa8ccb373de0c21f38a147ed040bda8e07a8b23347bcbd7054f21a46b1c90285b6084dd77aefd08d07a61bdf4bd121115d60424dd102a50bdd7c343c1309ce504c596e48ebb244ac16be0b4a2dc89e0b520e459b9f8aaa29eabc229cbb8c812f63a545ddb3da44c4e289dbfd91d3ea917aec3bb8f5a7317805f066dba15dd2f2a3bcb90bc34770671947794fa1f82e8779fe62b5861d46af22459635c9384f22b4acf02cd7d8a63f982be777d0d8aef8e10efa2c027a226d4fe82bfd919d371dd4d38a1ff12ead59cd699b99f3e4f7c1db3baadd337f8561d3f49a627795588285d11b1c38737f7ccb691f6a2c68a8295a352edd0fa5e4bda2d65d7d76e613886ac660f4c9d7bf231fe0f8db2bf0bf0c4f8dbf582e80f2630144d0f098116ffa8ab4af8f833c3f93423770e95a066b3a4524ca4318fec9cdda980be6f6c428ceefb077d8060c630a92f69c5d107fd6bf59f4c270d1a3b546287807f4708e2826f0d8c5cb27aef615de47b0224333ec47627f26de3788591c4e3230ddf2f9d67ee8fda0764d9ec876cc46b8138c44c196e7bd98f1f3e50cac2353544edff038c1adebac795aed757493588784af01e742f56b50cd49218527b14fdf5817056f12a9477706df89bd7f9e577afd9f31114ff8d6338a9b2ef9cbd94f05c1b4095c2f86f530f8d3ea92b97e0c4d0b7b65d629c804fc7e625523c2f87b7baba520551d4fb7ceec7e729830e53ddc2b3609db651e4c3f39d3a63317c33e5141e6f292f101e7606631e5d1bca3722fa8a5836bddf9aad3155de36ab7cdfe29a67374095917bffc23f1005ed70edd68d215e6d49e62a1114564872157c462a126b03628dd96df24c84c5aeb3eddd1c547bb2deb61611d1db6a779f8aad6844d041282368001732efc44ae3049e097bebd7fd47cc7ba3aae9a63d13c2c7b8443b9e84c72c2b73b5edc1908700dedb89f58b5b9ec47ea274014ac775afb8979ce76f51d8862be17133bae405219ccab1f0b7b03a177fd9112ef312a6d331796744ad9363268347871e3d3a020cc49efa4a405408eb8b885690f9f1c3c9d3a4f01352fb506ef583bed5af23d53f687e6f4d6fe982cbbf64764ffb446b2647e2a51cbc03cc5d535623981caabd95e6afb603119fb47c7976ff0acca10508557de6254f191e501f305449a038831779d2a092878e52520c9f08451f574a6ecb37ba16eb15d1edb31ca9f1ab453db2696896f015c16a7426febd3c02a5b8e3898d3ffba63cd4bbf74827c70a733e39c263b2c278d33556c3d7062f8369ed207a7e5adfd71d63fd40107f9e99a23c09cc1140b2b09a9477892fa89f12126d7a4a99f48ec78053df9a71bc1a16197ee8c39e1a483952fe0c24084eafbf19ca317acbe1cb19c3ddf14e81442151aac686e827af4cab6bcdd658215e65f5659abb94fb6f53ea9552f13dec5e54783a91f7a4a992adb64779fef64e7e448884989c3cec8c51062c9e0a7cbb9b05f26f1a5abe57e98eb679c8e8fcbd1c5acb95d436ddc55f32015221034b7e2f0e41e7335b91e0d9de4054f3eb13dec937e217d47eb1f8c2d7159aa65d0b77e2d2aebe1eec0162bce032acda1a4e72e38130e67a38ae70a9a47fa6628f89f9e0776efc31cc58a14119d9dc53370cc051262c0f7c2bc6089e53228d91f839460ef572410921b190e9e20979c07e08ec753e0b2c9a0e4ba828683cdecb080bee487dea9ec0bbb67ee9af84a9d07f91591710d8fd3b3f8bd6ef064d56127ab668795a4d396d23e6fb1e33bde61ce2fb48924858f3a13461e7c23c6672de5498bd09cdde3f86ca56b22187f5672c034e1011f981160229ec303c6b236dbf66dab0d3ad8a2c352a470b723421035206568fc23320d2b463464b5f78a7b6ead8adcb330cee3e3e02a91648b6e9d39e5fb660f7c3b9bb8ce56947b62d6f8034b001c97c33cfc173e6730fa16e4c9d2fc36fa92637a5d123053d7e90cbc79d90fe453e771c0bc5e47f380d9c7fbaa6d708d2b2776fba1d01f71a57db9322eeb966462c37d1855d9d59315a649edec6057ec80babafe59b9105e5aca65c8da6331648a0b7868f60b24d27e616fa29d260ca9b0d226c6bbe3d9142782df27fd0ded23fd0d601a88c709ff05f1f79da7af0871bf83d61368828f3af5c85933ed6e3cf04aaf61f8178e3834b4fe8186cee658ed74ad200952f88db2730cccf6aface7cbbd78c13c4a8d35c57e86f91d8620479d3a9e0d57e0620e2d23a939a3dacfbcf9cae3434c38e544b2e841e5c049f00922c881bbdecd180c4f5094b9b819a06e026528f139e4c67ed9ec8661d37cb929535b3c84d19cedab29f046764e9d26a085d7095ae686276cb9e0785245dbe3cb5527fd3d9a0a35ca3755110a47349d5e69aadcf4cf683abfd254f9fe7b68bafc75af3e9aae7fddb48ea69b2b4dd50e34d17477a529b023b99aa0e9e1d7cbaaa0e9e9d7731d71bda2e472a529a52266dfc7099ad6ae34353a85191a06bf6a7881bf69f952aebd8513f695b726b66181590056d7f37e2eb6018682d59caf5be3620d068e2f8c728722cbdd91a3089691386fd27783e03230bf33c425bfb31979e2397517c697cf6cf1e2d749eb3228679c5d04e362168b31cef09ebd40b7b84d727e3798fe2ec97fa997480ce7459177b6e1b099d23e34b6cbe4572dbf21f7c2dd7d59cb483d7ce3e4a566a2a7cb203f53c719506e377fad58bc5ef9634c3583880dba6662b6f2898f5bd0bf8dee92334fc6ae53f209db9a26e2531a3e632bb39d37f290b443ad3ae0f268f9d33639cafe660bb367ef08a6a43dac2596d8d42eca2484a9c13c7782dded2ce63ae320c655d02c64594822c602f3e85c0a8a73c32bc64ae65107912e942bace242dfffcb40985dc9f2a0fce61c378a47f17c043916d1fdc276de2ad812785c8d3cb6aeefc4adb891946e6c6ba13c483bac0c069fe3b7c19ecdc4598335d001d4d9e23519da09d720f28be8cfeec7f831a9b008d342d0c8793db871d5c42d8c3cab201354f6708c59193f7da67da222d50ea7d982a132a5ef658617f87dbafc213ca13c56a6b5bcae8509ca76b661d3cfcc1b58762bed5e2e89b1bba7a8cd385953f0c7333f9b22e63f7b4a36d33bbaca9e776b0f3c2afd13922b2958bd82e43ae138e3649af61427af50e0ca53bac7e5fe8a127f0efb93a8b42e908bfc336b19d9bd37597bf63199e9cf167008563a5d2b0dd6e73c9116fe4f3dd15ff2f4c92ce359d7ee30d9ca5cb345ecf0433edb606c56bde13b7ad3cfc930d252be5cbbbf59bf30457441cfee74ac37f95ef93ee3665bf8e0779c3e027e3b186be709d2346777c6ab8b57f00d707c28b2b695352f669cf66fe2124d9af972fdf1fa7b12c5e7241dcddf80af9210f5ff139aaf88b8e64f40d99d30c15cef1e707f1786c9001a49e3e9de9af695c103e6b49bf6e7306c7fe6f1a67e492c5445c3b05182c50756bdf212e2753e482f2e5524127405a8b66a54150cd03585ae43fd676c23f832493e2338e305020d98a41c8d3264035fbfe59f4c4ccd186b84632170b072667cd1a8398183b396bd166ad84c92c8b073ab9958186b1901373a7dbdd90fc2703f58feb074ae3db05ec027f63c6fb2aa296e6995d38a434ecd165a71cc8a5977d6feccff60e3c0e84a429657eb67c50c850d8979e5340ee1dbf1a530ad821ecd996c434f7681c92e0b93edb9044fcf786612d7be5af7919279fca3ed59f40dbf9d8d19757ef0a0f49045481e99a592f4e3bf7e2ac73fc2f0f887f7c7bf7ff4f9b55dbeaab37d4146124a28f1fa1faccb0e45419affd279e50710574efc436144ffd150c69ded3f823d90e654fc8c95971ae3cd4b4d71ac8ae19a517d8c64c712c81126d59ab436f5a10b5a2937fa28ffd7abd4a80e15ef89694635aa30fce46390a0568ec0cd5e008b37499f1b0729130726c6f53caab81727ddcae73c7b5f610bc85dc05a33760b72f4eb34452516e4ac2dceeffcfbc7f0e392ddfb4b82c5643932c50752fef556b7bff541b69c763f4f989a10c3d81bd92a923a5d7560c205db40b07bc333df194c9d2c4821f55d8d24ee6815f6645c90a3e6325ae2b01c288495c8b0d35ba8066f196a455b467183cb3feb350a3f491aef9dbb9da8ab18540f65b23949aab950129f7d2974d57d7c7f33b0dcbffb016c84e3282f65b92f0788c98edd393e6c7af97516a216944a987ad33c1bc1fca7315dcb57891e7b0cc364845bd3a9319735f2f9f79c7fbfe5df57f07b8af7c2532d37264e2693bc6735dbcd407678a2be9587d9057f9cddb6b1b816866181c5118f6681640a9806b73756d55d59dcb2a0b5b8b578088ea9d89c6d55fc67773527aaa0fed3e4ae7aa8bdd98b88ef70c3397ea2b5701c69800f56d5bec3c701b9a4557181e2f8984afffa520661f80d4bcdd6fe65aec5d86c0a0fd0bb0faa9cdc8b6f9b88b439a92c6748afb19e2d580c347a720d73f91d9c5006f6068ca71588057e410981fdef58bcf120967adc761f2ec6cf94f27420971ce48472cf01489f91da355e7390ed44e0d0d741a30b5fb8e0a5f4e6677c74ef403efaafcbe2240560cdfc9f914bfa112e5d88ed43199af0dc9d9e106c087be3bac2f807c932c4a64ae29d88426650de93182445bc4dd3eea4c4ecb0837a869f6d191f6c58a962454a8c87e3deb104d4deb98e59fcd58482b15b771df6c2e41a3de1dbf4d8559891eb961e297f0a79e326592734a6894859215a9e95803e57801ba940aa1683dcaab817f9c050c4abb518c34dbbbf9ad9e4c89edc63f6781e7dcdc064c19241133e9176a201740fa3a572285fe3a873b32389de479047d6c3c681a1e8f4938e5b208b26bcef655f649869e72bf79b3d4638f8833c197569a27353781cdce5b93f286beffae7b51b4427df82d40a25299dc6bcb7fea8b56ff5850be6d040fa036b5c426618a851888e3ec035959d06bfb549ac160c974d57b653d035bbf89f31c8c5bf66f244177b3dfe696e79cfa4fa688f3ceb6ed5e5dc5fe1c3bc12939c45b0f9d0bad00ed00e3d344f03cbfaedaadab54f6cacd862aa36165d5e15cbdaba3a59864cccb88ec0003ade7acf79b85eabe839a05259e201dde77f678bcb40fd84e91e2bca167d0139f2b84bf6e9955ffb278da4656530fd51978842f09126a9c514ac5e85b6929e611a6d515c67984c9817f1ab66764102797cb5c9b20a2fb6011e2b18ffab7a43a9fad7d7509d48d6cf7326a8fee5b0e53481c8281ca62cc7540051e3401f52db2f19c9393ad94db591146b77a7a99d59a6d9776899999f653ee95e54cd863d938de72e7153f06b4fd695d836119b43c2a7f660df9800cc3d0741977fe306ae771caac865ca5ec330e88a738461206e9e848de00d22238dded169a0d962d98a1c3383ef58b1f0fe977e90383b9edd0dfa98c0452e0c50870343d94de0116a0255e6c945b51975c368f91531a57403826b5eaeeef49f8db7191e608b0c29e512eb05b0b8134808f65dbdef267c041fc825206e31bef648b1a672671ba3be5c50ccdab20a80100b5e4004b69723b00f3697822cff7479637621fd0e7bd736b10e2578e419c649ef7db649c5b390271697d266665dd6aa7d0dc318a8fe4859993914bf52ed97400f1f1a1b16112a00eef1ccfcf36ad615ce2e2072c31b31739679d4c8f9542fdfe42a14a14701ccacf10e9590cb3ac2bb23339eb31134f71a133589e6d6101231fa6469577a8838622a09c3c7f5880b06d0959d0f208c2745d3dd9efa5bf724cca1c191254f9d0a7b16b32a879f39791eac469d3282be529793de2a60264526bd1ad1fa9e374828918e3886359b6042b1c171184dd9bcbd0d603ec81f586ce467dac3af8ed7ce222027bc9779a0b255294590d5cf8be2c47e0b5676f3858314d9ac5655fa152bda9a14657c7f0bc9ae709e7d1d8a02f9091d46d6cf8071241c800e4f1aade3613a6226f830e6b94bba08fb96e267c6c26365ff726cfec0755bdb8ef8367196d4c76c7716c464cfbbbb916283847e9df0ffd4ca814fc58dc374fa7adfacd54d2cad2cdd6f3e1124ed396530c15b27c276a1c97e3ce05c6f0f9900bf1ae875a0c9716cd621d9bf1f0e00989e6e78de7162acd3941f9b97c69653fdacb8e40ce89e91f17bfd0a1f65222bc17b3ecae760201e50c43e9d4a1c2d49de7ebe29e534bd583193979ee23397b038d0d68d8a98c5d0d53aa2ba82e017bcafa708bcf07332910ad1990ee44097f56c221182d0d2d0dce867d4150f5564c2726de3fef32e6c86e7d92cae7951db363cccd0b27eaba22bf87c5eb0b0bb6b66efa32f5a1cd22c8f6661055dfbd5c4dc804118057c0e1eb070e3ea2ebfcff96d210e692ec53833ed3805c2402d833224dcbb4c9b4b92c18de76585ac53a1444271ae101b792cca3975db1c7a94491989d845cf2b5e482bb8a27e6907b0e831d91c1441d7f8b5746acaa520747910c375fc55fd74e34da330f4a6d1f97d4b50612ec819b4a2fa60d1651121fa2165d3eadfb3bf5953841f87a11fffc22cf5fe646070fe875319f195bdd785465eac8cf53b86c87f7136c7280cf7517e36572ca2ff8ab56ef9dd9b7237b35ddffa300777fc215967aceb2d01f2c8603950a87b491cc2789680d3efff27f37da920e72687643ddd54ba54eb2f2126afd90da3ce17a51898d61d5b5662cc19f7263716bbe1f2d30749f0779346948dc51aa3b2458f58453543a7f37ac1f382dae28a4f229bac6d824fc6329f6cda1549f9c5a667207b79138751c067b1a86b0f1766f6eacafd06de42697d8065de939f098829a59ba90f729c5f6c5375a69301be38f3174603b7abe7d8c687307c66ccd7202d626508363647d645b5c2620829b31e59955ed71690631d59b9ea363fa84f7142b55bd964c665a7fdadf83749b5aee776fdd62a7c0fe898e5bb65d7a4bff836926457dc5f0d595a2eecd81d9fb9c2e0abfcaee37723f71e0e86fcf098fb68c405a35fab0bfb3e1375a71cad3c9af2415fea0506281f28e4ca7ed9e0a8d61e26874aac76042dbcfac0baaf9dc6083b39d2e53b9262e1c78e6bb9c66766099f6bbc13cf451a138b5ce263b31af5ab7ab5240c6754c4beeab2eb0be6a7e6f0aee3db5bf968fb9eaba4788e3c221e8806aee9ed93bccd06f7c7ca938b7d43e1e84647c4426602eb4c5fbde184410c8e43f59c6f1e03d5077e4e288e9fdfdb73324716d5ee157e593794dbd10c3fe60d85740a0f097b617f5bf5a2a97d1086af2c1a7f022f52775bb3f03fe3089c69210227d26134c4fbdc4d266a989e339d6252183ec7ce97057c1147bcc3a7837b03b3a65ca9541c7d4f2711f31775d934d2ac4e63681f16539e682c7e5085370933595364d0e2a893718dd724dd32fb739811753a0e193266a25649ac53033f02843008700f7d8d77792300153c1da813b77f84e1f60f09f9bab90ba3f59611ea08b4bed6b8c2bab9ca0d753c7e4325b7ad21c949dde3b0b786a799f0ece90b972909a396e7985312d40ae208860da40dd600d41b640899756b08261538c2286e57f532a754b59ed502a944c55bd87820fa00ab96be04ca4736c59716bbad17daf7bbdda093dcd26a4e6c88cafa1a9023d66318fed05292cfab4abbb269b69391b5c6b61a05c7f5ac85cdc76666bfe138c2a4b64eececbd863d57e5ec7b5f0cb0bf0fe33177d4f460456dd2b76457fb947dd8db51d986d7b01c440c24642f6451d95e411a790cc32f108dd5ac06a28f2dcc073cd81c31183d7b5ada0d05b84301e7ca684eddc3828e028a199fab5758108145c27a14e994dff4c574a062f1294554d5fab5bf9a45fe90bce9e2bcf3963d855910b550243ece289ee96b7c30d9325c0340f77dc53f6713c373e31bbe6576ffa01d7c15ab21cede84e1ce8c3d6a17fe7f6c931a261e738d03993e7db06dba1f4053756eea8bbdaf2696b31c7b05e769dee5e9836c3c8565aaec58a4dce28d71f3f36f37dddcdaf924150b2fa1f17ee26c46e3dc2ddd8da68abb445e4cee2797de594dc04205e927360e38925e55e79fdecc227df83823e3804fd1b48ef37f1d2efd7c588b24c740c9fa24bf08a0a17c7d51e3e72f172853c941a95d6190fcd6024b123f9b7e9052ecbd0566cd4e5cf1ce80ca831896002ae709f3720749d1475aa461397851f7f87071e85bf5c57a54e2cd4fd717a3b4584eac35d8e057e53aedb1ced2b0e84e9aacb69e373927d78d1b0ceb604357d799a33de613211e4290d8617d31c853d8d1041e57c89024bfd75caddda5b1f693672e312d0ad749a44fd5888be8b239504ecca44d6e9653f2ec373955780a49d8f02b45e9f5dcb2feb35ed6f3bef33cdf2e746783bea306bb21e864eaf2af72d2cff3b6d76345d4b98c5324714a9593e1140f6769bfd0abf71886de6326dd1b0d4f2ae58b46fd301cf537f65dd462e17d8b16e3d63b7e7f06d135374c68a6683d6bb12388fe3d3179156ea71c6374e7b759bd7199dd5a894418bb75ab24aac2aa0fe47eb2cae0d81cd8cd320451874fbf923de7fd362f268f6bbe8d0dcee6c49284571b3cabcd1857a53550695a55ccf68d8aeafe933edd957cfa1a46d51f4ab0d95dd9f9d8ea0d6c88269c0ee15479e19277ad0ec1df93982e5ab0f737df51452863c26bb6c79f6051c0b7d9a4eec2f0db02fbbd6c8a5ed4a61959b424b236e3db632eb590845107c975d0d5a95560dce5d5054b1fedf2a9f9abdb6e8eda88c21a9cf0c5e184959f233386f756a6c3f30cf1de8319223ff94f82d0eae82a98d01a57246b1f04c94e5a0cf2d905794001089af32a81a75b0daba8f7d91843e156f0ee584e0956664a0d07c32da625287e449acd762f83d24d2f40973238dbf690855348888809d2c56468f477df1af90e0c33cedc60ab95dfbed06deffa53097668e2b34eeefecff17bd112f3f752beb8dc5a9d3c63d4cb6df9d1a6330b7b49184e2816a0d395c325b97f0a115ffe2f9e9114b134deca51072e98722df2f72d7be863ec6c5f14dfbee2aad9747f0de2aab414a9ac752da25768ac06b26217890a7e4dbdef664f0ecddc71b1a5f3310ce75dc1ad7bccffa08e96a4b41fe6865a646defdaff7064fab47a858d267481412fe7bef550f3ce285087e43a5d981eedec38a68c74d2084b7caf0d9c6c968536bcd5cb196ff57e0ee9195de61e2bebe8b4ad298e5d594620c62d6d0072aecf174878e6bc1be0188fabe4c6eb86a1d73d213be9792579f532a413b5180241efda030b4bc29a184818e1edb82da2b785140d4019809968ae153eaae96cfa4d8576354c2b76269dba9dc1f45f4826b3d8208213edf138e306b23d9bb64cd244792c38a4428ed92742a90849847870e1ff4e4da5303b83ca201de1092d75130f4de06384b48c3534f1855ce1f00f2fcee3b5f3d8500cbb21fed47243d8903bbb0d676c43c0099eee2ad3f7d7ef063c0c4dcf8fa44cca4850fac51996a831118c57961c76b382d6b2c214e585bbabd2c58baacccceda11fd9303c3469db6bb70eff0d523b86eb73bae14ce1414a66eda77a4b6079d7d606846d9b93738c9017122f8ff0181627ca11d4e863a8eb795a00cf435b213f3da942b4b6b57c9b107c42c36c8f1e586a764497a7760ea90fac81f98cbc2f925a08f720430c6f61f8d6f880abda38d2a10b391ab524f860c8b71df2ab7d2e79c8264285e4c507e703fb7c4989b2a21d9f9627b7d6dd16bb39e7766e86396543e3a8d5737e9ba1f1a21d845d6663fde5c664864becb912a4b50b3ed8f8080e46f437efbc9ce76e6e949ef46976f045472d7bcc6e87b8c757fa622f4483b8eb68d6c89f7362b3c9c16928744eb7f64192e862b37e010db50f60e05b8dfc71ffcb6020c554b0b2567b7015006a1fc068373f38bb20474ea7125007d1981d6cdae8ae83fff309d732e03373b8cb87ac9958f2fcc3801152a12eac9516ebaaea0cd72b9c2688bece18ed6c39174c1f41d6ed06afa286c708b21e9dd8d217b41986c0ebe1a37d1369ecaa042be7ee14a5ea62494e9b615fe8041d372a4c66c1129a530c854118ea22690716b0c15a404498e3eb9951300dc27044e8a3d1c78769d3d43c201d09a40dbf1181df0a1a917932b3e9c4e4f164c18c1a23fac83079b4fa83240daa9301e5995f24015b8985495877de11ea0923235ebec914ebd4c9574d5cbce8bd90769b3331603eedcca6bb5cf199041ca4c255c3c5cdae64ece7ba4acea3cfc4295aab3f116dc50ca1b4bb8e520384b44dcdc8aa8e56bd825a0d5937e37d6760e5911ab653af9f4a0ff59cc7878ece71c1740713387574a048da517af80d36ff8c871f9c2399b4b8fc523ab9bd49c2fefcc36ecb2fe0cc8232bd5c2365061f5cf2fb45e599d1be275063c4b4164a4237dd1bd4badc2ab4de9e726f1df81866bf91a16bc698122f161d947ac19417bc7524400e76d8ba0ccac5089cfd1e378c4fbd319657a7bf31adcab427796ad13c7b8254013c3179e1758016a53a254f94ce74d02a5c119fd1db2b4b28141820e78e62351e6439d6faf86c937c50fe4983305affd8d170bde38fde7544145dd849760c90719a3694ce2987e4c6a75b07177660151394c9df37f24b3b1cf2a770ebe089ed419eefa4a579c2064a4e3e1dd76756f08ce6d5c4baf4571fad22b50e270365e4cbeed6c8497565723345faa989b5af768a2c6d8759da5385e738e158c2d4604a46b9bb5b61aba3ce6b306742347fb5ee507d2d571916118e94d40c8c7c8ded414e566206d5f3a3c6f2c0c4538e5c5cf1bbf5a355c98c94c704539205a991a7fd0a371ec15b1a74e295469abdca2fd2fc7cc935a1b12a0c55f38513c63a87fa75ab583cd4b068eef00efb0bbea68a74712c9a4c3ff2cea2cd8ef9e967e639c4db7349127374e065d5e7e0bc721b9e014ac6ed1bbfc8caaa679991c8ba2e30d0574b3e9f5506b6aec5a6a2f51733559213b8158d830e838edf111702f89f2d8a03a4b3c8027205ba5835295c968aa27a5b99d343185dbe29356dad72c5ffc0af10d1a8109d3970baaaa042073422c8fd4b2fa35e2158e73777593b65fbb061efe09d1985b87ec02ff89db82e00a170db510b55432a8e078f61f62293116280dd512a730e2bbb9794764e03d5c340843034e00017f527eda7539b0969775235a909ca0a50ff2f96564b26ac472a1566fe5c7c2b3c3651705a21440de66f96a15bbc69c4a00e31ff54d9055477165e8a3b95881f53eb2fdba2fd57a1e7c2b6bdfb6734fef9fb8dcbfee4d9bff327cf9efee453a23fd5cee680e6f059aac284cf472ee9ae61c5e41ae2af1be361feaee4e89da35bac8f87b8cad987ee93d6988caa920b101d9fc694baeb5eee6122d91adbe3a1551764d7fb719dddb08f9b0f8ca34f7ce5cffb92abefdfdaf54add57cbdb49354dc31aa3d4671dd7ac551948bbfb620dcec47a3ce13bed8866ee9b930b8034f99f24178087716a8c32d817737162e1a4b963281c73d8d80005ae639d6b51f202ab11ee6ad0bf6e3e1b5446b4cd04fb1c960cbbd4baf9551377f3f8d632083ddb60b25116d84bab6f7f6ccde132b4cc7b36e8bce150014e59ac27ec8ffa2e3626f55e4515700b9c1e7e731fe4b7e929eb015204732d02d19857d4faf98b89fdd3918949b359cce348ff5996f88d1b747a45809e4d86fac0cc9f2dbf5bfabce9ab242d91fdf370bafd1b07df3ede3ac73b3ea976beee6a1c5bf27fa914d8c27345a22d2fb85b1e4c5cb509a38974c331da1b14aff22743ce6a88f7d23eb6ec676332b480a3b397da71ebe8852e8074556100e048b4bf98fa8e651abccf6f7ddbe95c3ecb1d33378daa6feb892a0437990c9515291bf6c5ceb8f5eb1937f58c1be8793429ce788a77dbe28c9757668ca68f1b3de19933e10c5058d1fed98c6281509b50d6bb584398018ba6175bb08a743adba814229d3f15d36992dc01b3748bf3594d87d6ba856625c420032d8bcbea5dcbe7ea40de73f915884baf8baf2e062d9a67b7db1419d773ad2b2985a3f1a8bb5df54b596bb8cc9d4a963939dc5ac1687db855d88b73c25b9e71254dc1a21d9c92d2d3a1894c494e5ecf76ba79b7d3d4ed74e374da964e590f3154af2ad3a1f5c38fb40f4fee6c55f243c3d5ab1786a2a8677428d6cfe0ea33da5ffac73e2b1bc346b6d8675667907b96eb8f56f31c469d37f590f6c4ecf6f5817f772118441c43af3e2b9b74597f65f32bebef77e757b636475cf8c5a194cd87ae8df538b83a761980943dc3b8d1fce72f36ac6c60c21436e3f7d545972da46c8cff3fda956d74d9dacadafdeea6968dfb0ed04463b5f92d840cb8db0aa480a200f9c75023bd0fb56854687bed79591f7f7361ce33180bf0dffb00537620d7e6593627ec537ebbae60870cf87390f3bba8a5ec59c9e4714e855b6f3fcf581b6866411bf27fc626f01056f019d3c3e30c3261646b4425260e25510e9ccad9c20968e176b667fa478919aad9aecd2ad22d72e064acabf1c8a96b954ce74f6dd5adfc49e020199e953a936a044e38cc9b7da751ddf301b154d9df7f50db3b781a657f7f54ab23c3e0faabf91b335872d2d83ddbb2be09e464638fe7b43b2f19dc100186b8b39af1aead67c400a650d1b567438b0a96cfaa107dbeb4625c9e4674b51f987ecd3ba41754feccca05d27a72da0f44463e2d9530c15fe612a5928a0806c583ae1f6f83534dbbd60181e99541bea1bdc1e414b11487427d69edf036eda7fdcb755ccd4fb3ac1da51385a16735195e9fbbedc6f57cfd9d67e4f04d1c7f549d75b7d3c230d651b6ec730ad49fb2c070743ece7663a96a24147c9f0f08cf9938bb4d4a04be932734f08b932288c3b0dbf2d3da4194ac17bfb63be77ed2408fab628f45bfdf9b424528bb53ae7371fe1927498412c939d76c121d9135098b5748a8fbe3ccd6f843b7d5d69e206271bc001ead8d1bb76f401982380a69c4373d399ce0cc764a6edadd303afd408e623cb7feae1e7ff001b8774255980c668e3a3deddc3c2f680211b13c673e7fb37702e7f89fbc67285ba5e0003c6759b73667acbefae21e8a386bb575c50df57cc2752007d34027bedb23826a327472a867039c606c39cf596b7271d2774890903cd5fe3318897a91e1d4402689a18c90ad8164cc4f36c1686c5d9759f1bf8695a6f7de6e6051f01edb6c59a959cc56ac1692dbde603e2cb804e28cdc91777b6517c126a498e3a6ed7a945e6628e78b2c3f7045b50e23a7110c7408e2ca3ea47b815c3252d7df3aad7636036b2a993ce457555fb1797cc3656f1ece3f725a5c94b9f5d9df3c6980f3aa6aab0b485fc094fd80d06f9c91c49b49ccdb19da3e898e3aa3089d941b9d3191aed4b90ccb947c09a32aab5b579224d238dc74b81e60b0d32eab67dcaacb7c786314e05c5a8f3dcbf0be86f7c5d06371a458ce8716462d002f6c5646ea67d2b776b4f15417cf717d1cf1ddd1178ffaf7bf231536b6119f34ae7ee2c6ebafb6e2b5b0dcf6646cb30b00b0f71bdde81ca441d95679c82f736b88f840fcd464be2d5425aa23914e9853e4495292064a45e4cb7e2472d01eb8a24605e57a2a7dab7e6e3397d1289be40447c9ace36b7117a7d39c5bcd208cc62fec56876f3bf98ee39ca39024123ecd87e51e42e90157bec9673b46feb8d9dc7537074fb798cb05961788816d7662d7eb0b6e3b07761190b4b236bf1658424326aefbb7cb93fac5752c4bf76edf2b5f055d58f3cd017b94e272ad41b9848d440aef8667a26e1ec0bcbeb279898149c106e257731f24221a3a1f80a32456c0733df9d9894139ef1b55610b063621b6accdc73af298de3cb4e7dc9f669b90d49fe5f10164868a7d35d8e4d7c4bb5629b2c9fed9ef75d003ed19330f3509a78be16b4f63ece1a47daf4899c434315a288be0105ff64b539cb55c388573b6b775c3218aa8117c423e3c6d06424810342d4cd5520b996a6333b87ae38b931d848d2e57967a0daf5fc5072952e044c7654fc5e58f45300e093935cb852f070a55598814feed2c97ff6566f877fad8a20fc6435fcd31ff461f861f824cd890b869ba8e23523def223631742e4e69e62d9c547877ab3bf8e32bda76c51bf12ebbe7760ae0e71f24d77f7e12cf701a2d1f9da736deff9dd19939102fdb7a37f8d347aaecc02f879facbfd9ac009c09ca0c5f45e7d6445a9fbd770734afbcb31e418991b41fc3f08b54d8dd5a0e93d22598eb26459e00e8bb54a380e2fee6627c25825b98aaf4d8577674f29cd9d8707495c54142c7cf18af35c5c4c8df40c77e2ba5941ed1c6259be40a6d1da1f7689d5603b00232b9cdb1ef7c202cbe1622e8451dac413ee13927d6f8eaf9bf24cacf37776174422a4549fabc50a2d6c273018b05f3c19c89d45f4ec68abb30fce6af496a4be983c66d6dad73fb79fc52a7847a4a97acc7933c4cf09da13f75767ee2a35f5429b6919aa624edbfacd96927647dcba66bbdf7f635467df3454190949e360d844310c1d893c2734d7004971b9594a37ee41c092b74bbaea246a1b2b0931d2b1ab3d27a8641968b32eaa6dc574fdcf174adcd530fb95c689a3917e69d83461371d0b929897acef3fb9cef2dfba4f0e6117a62119db7080023dd47e23cb2193e727582a8e6d2ca4215a9d6de11396c1f6595886c6237e377265956e63b877efa4850e70a3bee424e3f50ac884e51808255c848aac6ecd282c578fea11ca5733f9e245c34b2951c2249d61a4b66a5d762eb7bc83c49c40758e8e335439885a72f42709ccf54bfea33357079bf6fd96de43f4792f93f3f7bd5dc8cdda9c5f67925eddaf103565d72c4873f4bf4ccd49f8fe017dd3fd59660ea51eda73377b5226792d7cf472dd1f89eeb1b66aceb46126df695fea9b5ba2601df2005293d60fff2824fa5c05f129a72bd53e7e6677f2e008419867a0bc3b75b0734d7b83ff483e7e405ec0c550b4c9aa7a8c399da9b2bfeaa63a69d38fa1126fff3ae53eb74762647a545777a5645f77229caec8e29face8226ff1da89b7ae6d19b086c0a4e8e8e0e1ba2b3eb73c90b41b4e4c0ee16d0b9f0d3561b094c5828761343d3c3de9f530e0f5bb1043b19f1fe350ec564a575ecd6faacde1d748604a1412408a2802bbd9eb243c77c05e7ba5dcff2035efdd6a07c7dc0d9513e85d1860fbf82c1ab814d27158dea0385ce496bd988edbd581f7af6c77e35d0e29de105d505bc2c6f6d136f796b1b1dd2a16d764c87f61aae17b76a8c67fbf776a27adeb11f167f32fa625fb4d7604b076134ff53dda4c35a816431a362f6bb2d5bb21ada2b89c417a39e8d89156dde39700abee7f35067bb2c613bdc5f12ea7c853a8f75e4a473bea804ee86caad9b6e4a1fa31fc1cd96b4cc6a5694bd127dfd62b2774e926ae96b7286c30c90072ee8e4dcb3ce23d3ad1bad844ea239ab68242bc2c9dd7f8312a04ebfb72e47dc35caa073fd37efa232ce05175d8b6e6223cf1cb38535e6e8a7fa6f78695debc5060eea5273e03bce6bb0137a55fb9e56fa8f58a354ebcdc17a2914735c2aa732893dcec72283313b539a4cafdb3943b04724e4f8940f90979a54f663538790446c369848610f9916ab141337733d07899da9846febabba46012ffc48de62446b4e3dc1553411ce300b7efc29e4b20883309c45ae39917dd502d4d259041c27b404b47af39e8585cbbc674fbf67de1b9e6c36e3fbdcc0a18002da2b9ecfdc6a9f9a40a08b0ef86ea2a35601668f5ddee4751764c7038dc1d824590dad71e275a649578ee746f255921b3972fcd25dd71dc2832898fa0891fa9cb8f759fb0de0fc70d436d7d16accf69f658abbcc3b3eff7963f85f6c8f5bbadd5a8e0a73874d02d583e979e3ac81d5bc221772ecde4c13fb768745ad4e276675616cbc40652b6b1c651e7ce4b338ab6c256cf240bfde8841ea326274eaad196dd7d643e58c3e4a8772d3dde8f30e666e1923694e3989ce7c079af7160e5b1ee804c79cdd88de85f7058855f2feaf89ee57bbc15a737059f76f61388a76a3c47a04d6e8168842729282214b4b6c8ff6182650f34a45bd09aaed74f603eb613987de814bd918b1c9fae91be747edd86d8c1bbff790e468f5d004cf98aaa176cc453a54c8761129fbf9a91adb1f8c65f164933af7f02197622b27abe59e99bac2c8f6970e9d0c41129a0b2ec11d49053624e2cb022e9b7dfb15679d6314f8a1b00a571e2ba24c907c8556abc7cc2fb49fac1ac729b67f5af731c98c8a117bfa7046497734e95464f2b6ee05a35104977474f92be4ac897369f0daeba1c501ac81580f15b32ab4cc02f0615948d06013e510f8cfd9e5c607d807e9b0c009d7d3a1aeb1ce6a2c1c99ba20a5d8d64cc94c59d25d4b3dce17e1d26e47c39bfb306e0dc897eb767577f310c68d61483f86f4833b7dc88d245e000faab4fe6378eb65301b4f218a3d3a959f0a0b73a924777e5a306aab2f98ac8eb73dab8d6827d689b722fe477e370c7d648dc7b562d0110f2d7ac43e1f14a17e60661915122fc5a46788b64e953cd892ad7f7092520f341b24c566406c3b9d3877446e9ab3f685d17de722c62e9b1998dc257f342e8e34e7716e5cf68797dcb8a389f260aaa64ec10bc25269d73a5c4c91fd310f785afb6566eb26c435bbc1e1608e41adb43b1ae99ee1602870c755b184322a002005e2820ff1c027c2e98e7f3a773165e0e8e034469b217b6264331b6f60f5d3f93137c8e5601e66ff141ee65b1a6b803c646ab5e1e54d373acc63504c8053da9d64c5a10d3babbc43b56d897c42d9cb60ac986f86c5531d2aa948390b963a6a91dae2bb8eb64eac0ba5abf81c6c7817675d6695c65d705b0b4c62ee393049fcf6132ccbb4a6454d6747c9ae73b6b8a36880ff642f910e2b384573bf7cb1583ec9b3f660ce8c4f0b45279acc158954b3e17d90a47f2615af8afb5e395243f62192d226a74b89c1e74e2c23339bec568d46c1dac8d9b241d99d296b65aab7762077506b372631069fcf2fc5c092ca673bcc167bbafc45bb7d4df98cf2b02ea082f47f61f18e71e2e582ac8c1b450c4f68c20ccc296594369a705fe309333a934972f33d8cd65f54e7357c99316659d77c73fa0a1707a41abbdfcb57035b02dca0d4500175a3c95a38099d64e3c4cef11d37147afd5789af2e080e7490fcbea51d7585517b81232d87f6cf52d4c1ca9a6c4a3b667e1b1d3325321def7b99a0bcf3ba568370aec896522fbbd23ed36e18b5ded0275762317d9e7b617876fbf42a03ed097728ed9313fda3cf76370cdbb64faf17869eed9342f62b46e3158d9fb597e0f65dfed435bb9d05675461d5808aa332504cab110d18194afc6065a058dc6b7eafef6b2eeaec6a7dd8d22cbe5b65cbd44957b0e7e9cc78730e152de509a364d0cbd6ba7dc5b547cd9552c0c35f34d5151be4377ffd7def6a7ae0e11a5f40d1ac854aefb555ea0ca406f5f624f70c40461aaead55ca88fae79cfb20b6254da74e7336b3e79b1b80a37c3df8e0cc85dcd88fa68d96b70ed4a03e87640fb7a38321a43c1a5be5500b1ee40c25d274d6cfad73d60da3f9879b87b0b7babfe0e9ead457ac0ae855c03abac996d9980edae477ec927b2e5363d9588a4967f8385b25a2099ec3f0139f4c5558978aa4d42da77fdef38da96b9f4d25ebb479e4213b7f70f8f1247b1c5d7e5eb0f92ed0e468d369d645a06f2c497301ddbea55019ab247b6f3fc8ee4b1b6ea0eb0962a3d1ad8774b8f29b1dc698f636e976f7f7c4acbcb636ef2206c02311291cf06eabcdcbc20f6aa34e9b330a7c23cdf8f6ce28d89fffb0bb67fd59aa1bc780449bf0d4ac313db9b7a46db3b506d847c13cc9f8d5db0ec99ba3668135096f3bc4fbbd9a3cee869eee359c4ab5174097b7e1ff5f7338d3ca42dbcd10a1a89615ebd939a62a57ed69ab747d053bb55d442e7ae1cea4531f9d204a9da00c6195e66315a109ed234bec12aa50d6fec19100e5cbc904922df13e93d83ca47d9ea85ac103e715f373688f5366c2d338bab4be5ae99b4665811a0aae2a4a401168bcb7edff10b0b873b7ed3e8ca77f9ec593c79efdbd2d24b4071dabf2cddcb3618a998e31be707ca5eedaa8a8cd37a5ad12072a9dc09d402e1c2aa522ac62f33f5bfc1f4a1b0a50de2a737a27bdb584705c5386abd525b1b66b6dadf5b7cac2341e290bd56560ad4dde6a683f0f96aa747fd0eeda66fb59a2cc5dcbc48ebf9c2853f32255a6b375076f927cdec8f1ee7fd3059afc0d5008ca5635b6366ade28bbb8067cd4f80b3ca5dad5f5a16fa17e7449cab82af6a4215e861180e1a9dabd306cbb3c151b1aaae24f51b476b7e99a053de01a8e1f8957c8247584f102d36a75ba6e0719d83517ca1f07ba2da9f12dd9a19066f259293116bb61a9f4a8f8be0d9a6c919373070d3635d9e2e58effe7584f109e3fbd6723340f04e0313609fdf8f6b02b182d91a5d4dc09e59a947d25fc69e75549b67f288bc803d30661d1b3ef3e6a446bac2aecb21decb4586f2ad1c7f51a5ba0bd40581aa3155a63d2337c1a3b4fd3b68dad20160f7ec7bbc86ca101b0baa7c309b2d620f3afcef613d8396d630b5b6d7894978016af07d957cf3ba23d487338e773fa247ee3731eeab9be1beafdbbb510211b857ef821e3f48eb3872b7897a90da53f6dc215966ef1914aeac3627db504266ccd7be75bb341a438c18ff1fedaf78955715fe9aa578d6728f696b26fec49d5cedbb46f9500cc7e2ff15449c56f615cfb7e3308a3c99fcb6d365eaff574dc2b9dede6078d9fb217f0a47bb3a7e02c764c6d7dfffb9203a8c708b46a8cffcf301d8d5d85cb6404348ae2dc93510e8d9a1dda8b0d5a1d60d6527aaa2cbb563cf27812ed4662032ef9ce8d03e5567ac48f6a4352a527f62a1c107f913695e242f2caec2117ce2ffdc27a88eda12ca0f0113c5c4c7602ca3bfa60266c93fc2ced2ab27eb1806d33b1b77cd7d45a3efe57c29b22cb734c003f172c4a3450382b6d57dc9898089c5c624d477624bcf647925c47fc8cdb3e6c8fa466c609cab2660ddeb6e958a92e31ec27a6416bc717cf54d3dbfc1076ea2d8c4e3fabfb4429484c668c74dbb79fecd427e1db952fb65ba56939fc70a3dfdd6fb8942e2d76afbf3afdfaab09219be35615306bf01ddbc3c7fec7af2f55accaae0c54f936ce6584343098204ceb00048e9abb00d564bba11cd3bca6f5e320e6f1b6c6e2d723fadf2fd929e0200e121bfe3d3df03caaaf164f913697cc4da77b017fa93476e298f0dd49021f95a88836fe94955ad5362acb9d90160fd1a3e73ac7aa5477c4683c57682818c6a0271d9100d189b4e7013631bf92f3862fe61c75ffc5daf2983153a449fd24da85112aa35f3879eab3ba0a576b5e3d84e19d2977954df778b109191f51bc4e1e59d92111bb2630b2c9d5c4db9dc2178e999c87ce0c113b5c5f3921ebc59b04f7085927887f3b8166651774c4d7e2ab0b35830cb72194ee22b15aee007c02e39a3b00cfb82603bc84d1eecf8cb28c9ebff213d23062b117f08713e8924e0136b7a32479d00c8819d274ccac5a92721e6d54385bed99622c816f167e378fe63262e9ef991c2c651cc2aa4c20bd8f370f61547d938a065b1e603186b6981d9905502367d839ce60f7f5a6286e950e7ae479d7b946e3f88bbe04e901433259b9e7eb45ecd11f50d8af6684db5f5b679e08f63882021aea15feb079b619f4ef016ee3ee963f9993f833ebc2e9a43c997f06b603e83b870660b3ee70385231ea4575b287d6e680ffb948948a1095cb70025ec28c46523b03ffcf50b4d17e283338e2432177f9fa102a9f65d6d4e6ee204e12dd1ef802ecbfcaaf5817facce0308031735f3e3f7c921f1cad15ab9e4d80d4ca43f984febb57a8787e079c45c62ef2134b89f44fbb7275241e789b1299dd77e70b302138240c7cf94a0bde7f545870b6b3fef249ce078036f2410dffb56c7481b74afdcae8c01d878f34fa7735b80fe41ab48a835ba8f119666b5fe95e7034b3d4b2d9a07055f06a793eefbbedac965de468f7f3cc77ebc4498ae96fceb3261d1d101880f5120938da42a909dc90f72b62fa9f953f37e73b9990bc912c26ac623dac48b1c9459a50b9674e16839405c22de46a787e04075617d551a6a4811a81f8dd2066eb35b8880c9d589da5b249b1ba2e81a8c5d454f806f30ebee591fd7bd5f3f6d039601a9c1d67c6e480434ba445514439e3556d9fd7a8c2d491584f9ca20d573c7412d7607ce3560903fa5cbe6a07ee25770dfcb779d4efe6aa0e962d0e4202bc01c79c4586ceb7e0a7096742541681a326b7c5115e0e2c56bee5107d8628e498656f669a0c0cdc5c0c30e2aa19891f1442f8b747a4986567376dec7cb6ec87487419ed9df434e36c2496e9dbdf530e4d6ec37072eb2887d271b90ac6f953341eb54f4a33b33c14bc8db101525467c4b310e74137528caf357c53f7701c3a387eb9ed73dfb8d9258b36684536758925c8a6b7e6cdbc30cf4478fd9916fe01e90903a213e76e8b31e1f83250a88b76ceebb0ab6bad837ae175e625c7283f309fc3b3ae4ed47b7fbbac2b8ffe1523cc205ed775cfcd16b3e32d0885d96f0a28f84087b15c729ad3e6be4f1c5aa5dba39363867e8701b675c9be4cf2259eeeeb929e3993c64e787aaca3da1b473eb19685a94e355079692a22040730ea97aafd569f805e3228c1ce1d943de1aedd513a3ff14d1ceda0131ff31853764feb98ca358330aa71828d66f5d60275e5c872db847578f3b7dfd743547a08cc0c7abf944a68f39a2abdf9a1096eafce7ec2e21b0c8a3525004426f60d823e6a33e501a0f30a80479a81999ee37f91e5f63e6ac2fd65c7a77f1ae3db3cb682dcd56a827c5c1465301cf6056c0ed40b1cbf4933b97454ed646d3b1bbdd8e7051b9b9eac9159b6348369575abdafeef95e1b597c40a0f122caed71a0ca09f12a171e579a1875eb3c7a15a03c42f45f15e87674b036afbb5c3e26a63f054b966a955d92e4c64d467b934bad64c3128d5f80cad301373acc4e01df9d18a489cb3d9a74a7d1e667be5f63f939239b58be3b63665a4c25cc877573375e3f0cbd7e260d8af3c5a85b41a33333b953d6b3fdb9650fd3b71697a2da23bc9e43ea627179a52c183f30f706e388e61d9c35d6bc9ab42beff977537e4f8f3cffd9b18709ee7a56486ea0b6002bf8ab4e0d62e3704330b0e114847143585602ea2313e1e911e6ad06db0c2bfeadeaa4971702c26ccfc75c4371897e3b4e8ce8e8a80d9ffc697e9069a3e7fc1e376cd585413633b3161983ed601e0b7e9300e442bfac7a2a167716dc6a387d32f526d7c76bc414d859722e1fbf5857a44d45dd55b932f4a633e2ee20fa19b73f6269a79a4a4dc6c39b761486ed48a6c02088d888f1f0c68bc2d0e358e9468db0e3078d31ee8cbe8a1c15dc7aea8262c495e0ccfaa8152aa0ec388c7be048a8d9645fc2f0d5fb71538fc2b06e260603f651a6b46b3a0625c2f4bcf1355a293cbeb37f5a6e9d901ac5fe466b2630b3162a5de180eb883166253c3d8b951bfc1999334fbfd7dc43f3cbf15aee93a6cfc10e191851528040654d9ea6858af1f7fe8a3f880c9867e7d0c43c627eca9da2042260a3563a87818df674e18551f9ae1b9c35055ed538fe36ed42e6992e106b97f6b4837530a1033b2a3ff2391d77a7eb6459c83e230b318bf1ad292313c9e1982d789214a2febc3d27c76a88f372b67395cf562b2e34953095f271eaa812407b30bfc1f14a0a3a6cc456721e98481c25fb1e87377e14863ed28ef00d5e0b0e026a687af12f8f8c7a8dab0c05642f8fe6c8df008868fdbdf36349e230b5a9e3ee9745689a22dc154c3bb6c20595d9917d1caac02b47831702b4f3afde825e6ee1830c829dd6b705b88dc68c56a4eeb6b8edda0c8329eff6a693afafdb662cb7c38b7d470ce870b8c5f373475cf3e13d8ae77e27313e8b2427e379b393a87aef1d3cad74929b4994c12e0a195440c52a121e008d54c5c99c18b6bb3e3b062d2bf96ac03e2f6c8d1769c59de70ecff715779e80bd4700c4d34f8068220a67c9997b4db80b93ea967ba96cf8d544555a1defecbb44f42ae092b2b6550a798e0e8c51273be5343456152362c5e99829943e8c7efb61e17313a35eddb8d0fe2001e05b701c9773310cc1aae9b387de6958f6382e7b18fdf6c3f87727badf49bc9e620f68df3f21ba092bc04a9edbb8be1d979f2022c0aab5cb6b01857087f32fa53d56d063b514f7104114ed1f7fd126412060c171751e42543712d31a03a4f81ffed48ceec146b0ecb93b0fed093fcfcecad2fe92dbd14fb67f668db06132883a5c38d38f71b2751a24aabe412e318cec1f9696284135ce794becce2a34ca523ae4a0c4e8f7e62225d647ce9e696ce287132bc2d15f3347a1a2724f9b80cf04ac8f882c0f1918e94c68ec8adb52f23fb59cb506373a869790e976e84411643390e3e7e381db6fd042eaa00c82572d78850c64e790efd87065f0dd3b1701083176af61b8a5059fd813de383dc6d0add72245ec9ad4f45eb17dab0d6fcd0e9e7d0a256a17ae638d4cb667254bef2a04704b495c8a9a7c3ce147f460799523789f3aedc3d3a1e6a4dc72935fd8d023034753151352392b6378b5716bb1c1a8797b0555db43b58e47a58e9c51c0e00ce5fae537858bfd896f17570b8967c8c12149c02675b2e04eba536849b207a4d23a28b12ebde05e5f0a4c95ac5996eb832b5a7175dcfbf165583a9f9251b6e8fde0aecd509d5e0e21b84165c60844780b46a0e36508cf21e9b477e539bb5de83cbadbf640b5513becbe78c01927bfea811338df67924b6947b109be86b2d1ebde3c86518b5dd224d3e8c5d99c11b66c8aa70bfcb64a932d4c4273b4803bc88452c4ec99ad1f2394cfbb702e9b1adafa1709afac6107fc0b7ce532c9b78166d967dfe05acd4e707c4f5b97823d627661f4bf947e06f6121803d382dab66e617f70228707190c6391cb8bc63e94da482980cf75f6c2a9d5a15a6bf6d812de442e8417834b196589495005a72aa82385dbaec86a5740cee504cc899c94cb897f42f00f4320bb7720dbce65686b747c5598fbd0666c5e53e9f0a1b286c199d9e99971ef8e0e7f29dc3cf6b44f79368b89c731dc530f060f6fa8eb0b294f6f2444bc2b9665fafdf60618c08cff723af29b0799e726c9e32df174e10d6113f977a61a2dbf29cd4de015c3d9c9a680fb11e0ecea1e7ea3fd4ae23309c5ec55b9b5f1964b74d38ff61f3610685181af596ebbaa5e4908845ef932b73ff3dcceccbda12275f2f4d47180aa57f24954fb831d1fd1c1b8f60b4ae3205e9aa924bd2e649e822c3ba90dd9a5655a5569bcd9675f1b9adde6afd3ae01ec981c0325eab0960e4adba377712eec0c6c8087a4ad65553c12a124bf392ad7af2aed1cad3b52d47e22fe7657e6c8f6fe9a5b06cfee40ae776ebd9babe8043b77e5bf59417f92de5a92c72a35606536b4bbb1844764068dd9c3d7b2afdb00882a1a237c401ee75ac3d544e01bb035e56b96ad9ef8a95fc116b669421a974dafdab1de590f6149c36ba7957214ddb236540cdceba22355b1a5d8f9ac231479aeca9f739b35162ae9f9cd8b9a7ba90aefe543d64c62e9cbdfbc561572e4dff4ccc54a58b1a33ea8a062bbdcd45e09845d3c82194e7289a4050b4c655d2bcf381ab30363ac94be340b51082f0e2addb8a1880bd6217e95f87470697e87ac44ed6e0b47f38375df2d1b0f1d5b874931c1999ee13edf2068620fadbf1a60f2eabc535a1b923ddf5a8786206a88c62c9bdb0f9b814e4d6d14fdeed4124a3c64e4aed127ee3ab165b9c5efd3cc3f3b232b65922e7536a43c2aac1598484cdffb6741374b75a592046eb8a6fbbc2b8af922a40dc2f06d042a2b3517d8de3eb34e6231ca296c7e18aa4c69d391cd793156068af58f1c4b5e83731eff97fa7cfb444c5c7db64074ee74159e5bc20170c5832ec77c96ecee165f1002fc20bfb2397bb855351c1ac6dc06827137921b1d82b20be670484421884d241b6d2638c3685c2da935d000c892f30efe27c76060390ca62e98d316947587df293673937b3f85f91e7b2e8f1f9866238f4deee5341069dfde8f20e140b041187e9408b0bb307cc2dea0878cdeab94d71d7f903bc511dcc7c6f85fce7133656cb06b2ab664fd599d23066242e3f309c3ee9d9d29190cf84c2763768f9a8e7be637691dfde89f9f5ab4fcf96f1cdbd193e457273cd99b2d3b14da2cddc3b32feeca8ecffdaefc0079366d78c788ffe40c076f118fc8aea88d617a669d1826eaac9da9fd4225e46e4175d206e692ab07df58411787066f9a092006245f8046649216b64e22447a36512a6d13ec19e0a577336e86c719c1a6722be4191c9d90db0ba2d9298f1dcd32a086c98667153aaf5431c9541d42fd2e6187ede497b986f2e1cab4582b7edbfd469d437652282d23531714b0ee1852fe1e66a0e9cddc2e2c30eedc4ede8352ab63029dbcd4fe8996a5a9135491b3198aefa85a4dd2c6a85df78c3624d71e7dcb764649524f46ab4f058be0f441e196314b733356e139f6e536ed5e74622f24e65e3b084fdd44b0c24023c53a870b2a04cd918de49caaa0b405ceac71851827191f2395a61ec2f08bbec24cac7792eba667c03aa34aeda805a625a7958c0b4a46b9090d16a63883d1b85b94a4be13b8d376d5acde86fd0f0fb85dcd195fe32a5da4a8ca8a705f17263cadbab6faf4666743321ff4eace95882e58da9db4e03ad5505ae7fbe34ec82f6b1d7725b5069c34c65987b69eda6073802a0aa9bb3a90e13c89759dd32cd3eea989b4fbbc861f52dfc4079a09168ebb043b497132bfbb2602bf1ab825a403e2b0d7eff07258b2109cb2fda98d7b261c36f7968c4610917ddc7cf6405d54fab2247280fc3fb907a6b602215fa474fb8f376656e90b3622cf0ec799a7777d430e4bde907a05e81aebda4a0e6eda90e8f0b6469cda9ed3d6ffb840886b02d05b1527d7d8eaa3da1053b7cd2c7ccdea9cef90980f2cc0c17c9d578f705f497de1ae1c594a58a382594cfddf92b76276004c4cf215dabb7557e2271cd79a6d74b9dc82f4cdab6018aa119e74005152ee82fd0a4da6aa29654b79618499fdcaf04073cf6913b7dd0a28462d30ce6d241f011c1bf079f348132902cdb1850a0ef9c526cabfc1f82d62d93376ff7938d55c6e23ad913aaf4dbccffc058ae1c637ad34b15bb26049285936f844c5b5099e4417d654cd6005cbb9759cbb878a5468b792ceaeeb6406ded6487d7e8c9a882b157f26c07fb60eed8ca6a8188efb08458594bc136ccf3c1968c4a21a7125d641183e2d71aad94372fbc8fd66bd3a1e9e51624128594b2803bc486a4efed9a3b96e974a24d0fc6b27ae0d444248d3d68babc165369ef9f824cbfdcc873c7a05fc1555cfad8c7905599b3feac11123403ed0ec097b8ad4d6ae48802fa1f21af76e665118cea22a848eec09fb7a7452e743495457e59acdeb2ae3a82644ea9d29d82c382c74677c1f46554ec43b42acdcfa9d556bd51d36530e2a009bd184cb4530729cf1566b1e708dbd113012ede439e0bb3a5b29c78f69abf476bd5ebd562683cf8455da8b967bc1c09f2d7ee77e3d4ea73da73349852057c8e348af15f81dcc40c48eda90ed5603475b2239ab72ae8a885e9662c3257bf596c1314149abbbae26ceb6f8b5e8a69e7151bdd1a85fc20f9ed5a009173278679837c0a2dcedac778659bc6854a1b6d944e2d2cb2fe610732b9b08704f9e8ef3b72a5e78a954f6bee04240f92a534147ebb56dcfd05b4bf33da0a9bcb06356d52cea642eef408257839162c74f7277e4e0d45c3593ba17e3e4d838a2ff57c70c8e14997c7137466bd986319abaa232a99c385eed10b0e1eff6e6318c761cabe405c00525044e95ccb22e0334265fe38939db3aeea5983ae3509756c05793c0a68f2186e08b5bc616ef5ff36975d168710067c3551806051b26ab69906e81bf39b7fabfe76e3840b906a38794f2dd5a8dfb90739db2a8655287640abf5331d6e2b1fe9d759e56d8aa7a60a7c527a9715ca76d1d4873a43f485c5705f071591fe4d78c7a715e0d09d00165b966d6d472d90d60a1c31d4b384e56fd1a736ac1bdcfd2bb9a6662245f89b6333b9a7385b519761fdcd327af9f5579b50c153a1187d1985d458ea0b827bf608857a9dec53383faed04dd9b42590a683cb85019021023e5afc2013ec020a88cecc6fa556edd008e81f823dd85d1face99ecc557d612cde96affeab9aa104dfd21d050f833d19e901268ae33627b288ad9e838b967e58bcdefa965361d277f7f476912a5636fa2cda294e564a23fd2b45f6a08d8a402461db372ea14b87c83667a9be9209fbf2d1bb3e59a1d1576506110be387467dfd68e85bccf4d8e81e8f099354d1d3bf5ae75ab8438b7c516c94476cb6e61d6a3a69af5b4a99c816c52de3c723d129dd988b6c903bcd47c65e6789041e9d161292e200363927f754613ca529a1f9192647f16d042c74bd26adff3bed6e164e342a1d7206b6ab37b481d26916cae8f9b470d686ced8b767ced6ab0f34144427fc6d01e039892b0b7fd46177ecd76d53df2272046dfa39d3a442ab237d2337b95c4dfda84ff2cbe53ec868700de5c35cad83596144a94aa541bf761f8225935e4ac2e55470e6f7284f6dde5c29942a5ba7acb9398ea3b5bd8c5c96fc7ba8907ff876ecf2e14f05c63adfbeec7efcf1f0125a8fbbd8682bbc9d8ef35d81b0b5f5c28b2ef8f08105e9868ace0b255c6212490f7f34b65c14bee749bb15dd54bcc1c289e62c18dd79f789c4f66702308b6826ee9d6b6a152f907737b5a7db4fbba602b0e5223fc13b8b853d956bcb3298f0f6f8999e81498798677aa69b86e519ae5a8f6b61931564a47ec2fb6edee027ee20b62f817818deeef3a3255881e4f9bee35d063cc55be41319431ee465d546a9f2b37a88e4505d717257d678b6bddfe6b1709693a77c75e1160346333fd52c2d15a5a2228c0c1d93d6711c1864fc69d4cac93903b9e812a33812abf49835dec51dd2d98e7e0f60dc8c0150f56fd2d72838219ea2020d79237dafde09d2b26d31e8dcbaf9872f81574e12e10dc3eb56bf2fc509b1ada1a81e8e01f6edb0adfaffd21950afae973ed8524b80cf25b2980d6b83a961cec63e980fb72ded3e54e164c9fd7f7d7b188528dd0c7805787315181030c1808742fc220fda38bcb054991bee923d2d5f0d15dbbff2bb03bb7bbbf00bb356c5d6cf881f40b12f330a9b19bc81ac75e824204d71f6163989e22a14ad9dc00ccef513dc365fa083ae6332c9ddfbef74b646f4e60b284960f25763d1628935a3b1f12ad8f61fdf917c8924da94b17a6665f4a810ad2fcc6ef5dedae9e148eb59194c24cd47843269f0c447a939f5c744752b6d5599cd9de19407cd124f49d71ae83cf7e760d6b75dcb261f7966b3ff2243995a970049804bc96a93b24aef5f7e5a0f645dd75b07ee7950b6a1ba886c0dd236fe711795c7e143bd0be5095b6456b7e74825301fb1aeca2deffb6b8172c4e6f7a0a4bd474c91f1f99b1484e338bf18eddd3835dfdb25b320d7dbeaea586f706a31c7ca3422801cc1572609f52047a81c688f7d5e4c1a23c169255c1eee0d5fe5d41ceb33610c745a27517ca8dcb6bdcda2fd86faf829a1970e1c24122f1d202c151e4af8e166bce9473608df002d9da4e15a7a23a6d001ec9abeda66f4a2e0c5a1bdeb1310c4c75c020af0822cf0659c51ed585212f98c7dc1dd12e0147ac882532b259479b9ffe5e49b00c83fb0d279a148107cc8fcfae02b28ff054426989746e77d774075285b9379f79d5388fb4314029f3bef3fc88ff1fcca40d99598ef8a8ddb360cf0a385e74f5548128ed84562aad3703ca3ba7cb4e043fe478fd312e1632a608313447711f86df25371f36a7faa1007a57360733abe6366787cd91e7959d3a2d591edd73fefbf0535f376cc37b8b64a5f2bc2be0daf1f942d46045c64d1a0f750fee9a773fec9416b0f01cb9e0df18d3f79fec493537d8b8251f262a4bc804b2c744693959b3ece4f98c34bab8a8ef6c651d196a0fdb81b3979d7be7f17e4b48ad4e17e5122de1c4e143645dbedee46b292b9d80cd0d781f86af920f8fb40aacd14a2403c57b780b282b65cf84e43053997aa1e39d595fe1fbdd9f39d567747a9389f5fcb70ecf095f6cbe3145ccb04ad4e00a23eb62448ec59f875957ef227d0da8fa7dd459c575ad72f4ceb66fcf7dc4e97918c530377511e61f009afb8a520abdfe8bb8f5d2e029afbd5e096ee5995dd64cc17177ecc1cf608ab3c8b5758ade47af0c4da68726f8ce4523fe7dfcda9ee31e6c7f8943264b9e6143e00a802fcb96e775fcdfc27c1c1c2b27a8b4aa87bf8f5bb33df8ed933e4a2246587f262ea25dbde60fa604d3fe2764c8f4d07afe35a6fd5bc0cd3ad08d2c79b28adec1bad2436e072cde8dc63f57405b42bbcb30effc4fde2a68b58078a5f71d02bd7288f7bfda58c1bb6bdc90ff05ef3e48227e085de0a5c58167b3519a2238ec8becfb43cb174aa1d9331c7f228cf54ed2397bbc7f478e2b81173e7fd78a0cfb6f0c821dc1963ce4625c30193073a36305247060f2b528dc98a2c21192a87dc23ec84798e023c48cf983ed7706ea932bb77cfac2298cff34608e02fe307aadd8261a8074abdd2169150e48a32627f86bb46fa5d99de415152d2c54704840ecb7c9706a0c2fd86148e4d8d9dc68720c6aab294b1e00b415bda354c6b03875f159ca2b35430d444c38e9ef07eddd9b49b5db1f06e3bf38c21c5e68e34db6d4ec3a1caa853d24f38ff8a0884600a6e5dc2a372357b574820a33ddd8a3bf0fc387cafeca92ee8c81b70e7df9e1e49cd6a6e70079ddebea7994eaf24e500e37afa8cbd575cc1e6f30d763e9b6a74a1a5c816732d9dd499e432194ea391f37694f57af807ad2557bd4d1401e3e7ec9c1fddc1a93c9b00edf80fd34a7799f8ff9c56ccc21cb27e12da78ee63d9c745b6d1c5cbba72a1b421d6f3d2c6318274b2e851808b17bfebc7b55b1fe7b106cdc30097e1d0fecd5c702fc66b3ca10b3ccea08409d0350c51b250f14e5a7bc5236dc347fcaa2ff89966f267fff1505b99a26e3e84dc1282087b83cf4ffd1660fb2c9df96af816241f2dd9a6aedf11e7b34fda77b94a0526a617b52516eb794a25058c5d3287e970c26543a8a6fd15c6bd8565038758a175775405e3e5f66d060c20540b48cd9813d42ae4839e7fe60fd431d1070baae0acc6f9db8c87b098884f9450c0d39870b71e820ccc9c94dbe5d9093648b58f4efd96dcb86ae3f160f8a451f1fe784ea7619c5673af9d13ed88c9529a63956f8645ce1641ead29bb78b5f5cb69ee6545bf9ce75e72f8ce89c7d82c94363d14d6d34a181f8bb21c3b70901be9819d5a56f0bb5a07dab02069d75264ba9c732b938e6d957bdec6f3059eb7c6a41f64e11156f4a9ad42f12449227647adf0b6a79cb0293f8f62b2c932b694e94af6df0faa1be39c956ddd2c9624a213ce3dbc89a6fcc7c184cb585420396e3c0e63a97ae48771bfadc39d98e8df5803de6a44a90866dd1a2f9db62c5bfa12bf654bc6d82acecd825d3f046e8644f978838fb7f8bdc3ef3d7eabba4e277491021ada4749a8766b93e84a9ace151ad58f928d8d1a7d130fde912425c69e599726f2664290295b3707756465fc153054d976c193de43b77bc1b467f83fbb0694bea2c190fede8edc4915db065f4ba6f0feba27958da28053779c2b08aa0954a21de5c2e6543073c9bf8a253479280c1f219402e0d26ce8ca4c64989ad0278b629df4e62403d85a2f1dde3c845e6f3c68c18d895c196bbded809e077d7826b38723bb5e4d518abb647ecf00fc27e303105028d37794e091d5b3f7f0d700d7c767174df6930f1a03d5bf25a1a34964937648721b79b8fe8317ec10a6dc7726c42dfb58394b197e51c96f23097773d3c68c9b5270a58b909aaef94d8e599e928d601ab633a9a3c6807c257e52eb79df799e6f57e25565ed0f7566e15b4179769366c031621dbc6f82323582ec0832f44bb81190091a95ec24a371b5c1899fd236877498b8bb33fcbef4a0c473e382d08ff65a45ef4f03952d6bb58baf348b4abb759ee6b23de71b706ee19433d632915e15dc63590edfc3445eab177d291fae954610e413874e267053ef3e3ba4d4e15ffba2fa379f4b7d3355a620b17e63139b8a2c579860f7c41845f2a1d67f37c9c38c36bf1a6f61dbdda1d51ebfc7e86952579916e7759d5eca44b364fb8dfcef1d70062c2322513c7b47222da7f45b62a9bddf4f8ae28eaa5b6802b73efed69452a4a4079cadf0ff386588ec5980f3017032fb3a267e75b2042b9321707609d02d880a4eef3e3bfd36abe4ca9074d4e6667cf492b3e6b7904c7d3a663892e8e933524dcb57c8f9b1628fbf4ddd0d01f778d9bbbaca7db3da239b84d117c5178817a68e444c895f69bab8b3eb1dbc24b073f2bca9ef67f28bfb79672672cd0b9a8e91b9bf317b38b6eb6c6f1e770bdb97fdfef19f4ef837118aad293c1837b0c20c6c1d105c7cb36ab0e5e9d69296857f6b9d897793a1719c9e70124e46f8889a31eb122cb9d9c342b4676e844fb486130dc827ed495ed26c9b6957f9cf647d539e59ae77f641f6a9cd5ccde369ccf53e25cd325507cf357a93df024865f4d17440a1dfe78219e7c59184ccfebd85e1d7da073d9ad75df31dc18eb6e6385968136473b71bdea1dd86814bf6b9854b9fed03e5ea505b7e2fdbac6e87ecb85c45d94c778fe319b063612fece9456b9668da3c8364d92812e605ca9e5a4426c9eee3309a73d99545031251a3909d71d2c075990c1dfe4f6a6d5bfe6fa3589c5c24fe7d18b66986a72e421216134934b0e139b32874ae6b244da1cc6be46182fa7332cca50fc827903961a247e0fb06aa9f6fef0cb87132640d18d2788e488975aa542652a45e5cbb1dde5762be448d217ee01290749c33f7769a6bfeeac5061710319ed0b09dc443b198b1d72f0cc95260fbab15bf258b9c4c281f7f366a70d28a2a6c2647767c7fb8c026a65373905c8585a69321aa3ab4b8e0f9a3aaf9bddba8923b5c1eeba3338b5aaa4b0948aa94636471da144611040f67d37c09432ea432bd3d54dcb5cb2cd90365a4743b9b99b635eefbf6d64158113551a7ddd58f15bbe57e7ac7dc4574f8292d0d58217214489a1ca1a0e30240dfddd8da2aeea7305c5d4b6914307c5e2a528eddf483443746e30babb9a4d2ea20e1ca917b786ed1b5ff80d43a99907c1786afbfcc7234470e0068a4666d9edfa9e19807166de6002e0d37924ebe62443441a61ebf281a052a3db8af15387396be160c1bbf58f3c8ebffcb17844279d66e9a03c92b597132f415ae456cef401e3720e706e1abe7303a7c5699776b452c5b61a664f221ebb121b16c19ed1fa852bf56c69361241674e466c29cdc86cc818737966337289bf26dff65558d7524d4a51f3da06566720658f08167f2b06d0c951ea6e6abf46d230ed94ea68cc29f50964ccfb6d3b039419eead88546430901ab86e49c34da1366f05b8dabc1cf47e2f236f71202958d9b427f211ad3b4c34ccf5ac0a9cea1c41790e03a48762d1d167009d3db71216579a76700fa29e4603d5c31ff45d171094386dd5e887a2f63b357dd764f7e967790d8184e505e649d45c2214f0f2556357e06bc341ee64748248b1f82fc2a0d49c0fc7b01e6a3296f16a7ed12161ce156ed299f75e5a7395df4f660741519f5eda8e471aa8e773d45f68be6efcd6586b974d6431e6060ea4829751133006c0fa203570a1fef92dc242ebe6e22fc83536ec7de876c455cabf1aba0900a63bad99c4dabec13b266c66e8b92d63ba0152143e9a28ffc86af61f855d5720c8467010186c5e665b61efebd3d2ee924018f0e9d63b3e04cdf6ee4358555978d24c4de048354fcbe52f87eac1a459b17cedd800e96cd3c8b9a181635a1985b0664adb1a4969cac974ef31115fd989f4ebbc56f46b9da4dea6b79959dc18e80a18e80a4717293cba1bbd19315e70ce0eabbf94fe6020917b01e91c12fca41f633e6405a706cc3cedd06a5e51901154d1bbf8468c41983c5aa4f6c02103e19e1c4d806c28a0de1b02f752756f96660735f0fb822aad3a72cd2ccf9b94769a03892dd070804790c62245cfa6b0f244adb7c2a4a6c4e18f93a17b29820293b6d555de5af6dad868a9b68ae9449eade4adb87ba92a345f99142f901f333c511345802d881e86f27484d7ee7e681ee68218f3dd958b0156c467ecbcb01caf6dc85e1d70b7ba46cc7ae6012d02cbfef7130c1891fc3dadab36e7f5a2a8346f0c126aef338ad5f4d53826bb4c2b001d4a560952a42ea10c13192fc3b73d237a7dd4e4d71b6930659f77f060856ae20974fb5eaa47481ad7adf9d35d91b40b8cdefff6097497bac025463f20de9e5940f902ec4db78caca89cab49b5bb6b85cac949060e4eb5dff661046d39fe24322ddec784ff2df5418e712bdfed3d435c3d450609cf95b91136d8635261d3385442588835b7844614e26131bc4ad8c554aa96a9042dc2d37d1674318d6311c6f97cc5d23c5e59a6e093baf8d23a11b6d644858831732299f2aec4537e7beee1628d0be4461f88a0a126650a4fcf2df563537a1d5e885bc6fd99cd5d65ad97397638a514d6fc63fa1fed81c198ba74758095839b3818dcca4d3e1dfc72ea41b54ad38b3147ee15f1e2b6a6afccb476932fe5567eb4a03d6c72e279344ed8b6d97b3406e61e8dc7671884b3c596df9833527d44bb6a92a0bea97aecf4793759bd549f51af3def319af50bad8a45d9d14ae712826856b1289aa45d6f797c5dcefb01a2416994c39f297444443c163f11e19186d88e1efc7534d8e51c0a45eefeb647d9dc3e02a7761fab6dc0501c00196a6ecfbaafbbda28a6d42ae512b431bbdd98f6afd3de2a8f90130cf4cc8a2f5cf2b942c4c4647a460c82632ce979735f3113dfd9a10534ad8627ce7cc67a233f339267d105b2fb59a9258e55644cef1d12dcda8e3ba057997dedf10dfa0558bf70605ec20c2a57f53845bb973ee08093e0eac8be9948bdad6e922fd083595b07c588664ba235627d6bbe09e44249c1dd9067a146f8a35dfa33d809f5d1e02068cba3890d12797abac9468f544e05e39fc1283380267bbf2286abd662036fa5a99a0c008894d0bd4b6591215fbce90426a9b29787c4ef0154f9acce84d9bb1f9fd1d3e094f87e3a09491b31ebca2a27cdcfb3dd55f741875778d3e7b11a944a974875e102cb6dd0c6d81e45ab3a064383754e99593abcfa5b60b27f9c44de21877574d7c9df5be46ef0b04f4673d6e2598e37fdba3d3953d5aa9a196f053ca366aeb6c54f854b64dc056ac41f1b5b791578a92eb8272afa06481cadd7f869247cd3cda4cfe35945c44f75660fb1b28f9aaa0122d7ffeff28a9980c83056c7f456c1928642f7e3ccb35cac21a15e5849d6eeed63f896d05d2f4c4bfe7df404f1e6fe0fd291dfe1a2f850bc2b7e3c168aaf0d2e9ff315e2abf6e7f0b2bf94c111e6a7f1721a51a216dfe01428a1aa3eeff0d94d4dcaa08e7a65f5e8953e9253a5761aa39d577db7a93124d0548ac467dced648ded82a3bcd9dd42697c004c9e126c93edfcd3a61d255c522994a798d3d72601d542e7c5b9d40d25dcdbf382f258fd6dca6d7cafad8e5fae03c5ad19ab34ed7d7d0a78ee23cd643f857d1c7567bb7b9a5efced0573e8661104b3e0f2da1b178ffbc43f2e3ea4731a94082f699a9e9ec95d97e4e087cd1756a09d30e0b2c3da8c93d84e18a58a856a4d85c98ef5a435bc5ab0a9030bea659bb03c78dbefe72ac240307f1adb9cfd8a0dd27d61bfec1fbc9ffd13fcd66de46dbc0d87e53e95e82a652b86810d5f50e9ba3b8ecbc224a24791786ebaee43142fe4cec6cfdccd6abb43b5edf167ba8a0da2842fb7e51f385207bdc354e2c490737b03aa5519fda585715cf5bb8ae726db376d425da65a042edc4f859bb0545b8d46efffe94e2e294a0946d41a9db2a280fb06d9ead764ed735d7cadc06c756a2af48fea1eb822efdcf0eb76a23a20657079a615af396020ba6d395a935e32a6fb7b6af2eecc0595bb3699957556955402f9788d0acb38a5b6b16f5048751b3893ca12df4e3bb54f7e707ac2764cd4de04279d01c3af7c145ca2edc0a2434d7a4e7e23cb77f2c3ee925de2bf2922affdb1169915a5dd9faec9eae1d870eb8b59cbbc2ea541ab6261c6bfb3a9762d24eed1a3321581bbbddae5164ad053b86623673894211edbbd48eac64b8383a7875662af4b6e27576cacd789f30b83fe4538faafc8c7eee5e75b09bedb52a1bd959cbf63f86adb835bcb90f9bf1f68eb8f0d6ff47dd9b75a7cd356b803f08afc58c60f595b4c132260e217e1dc7b9cbe0484c9298875fdf6b573db5078133bcdf774e9fce453042d29e6baea706d521b7761ff2d77bfecac6da09aa61f52f07ffd2059cc433499db496d8a49517af33425d979fad25d38452a63f1902eb235dfee0bd872ee99defd7106617d51155263205357e398b4a22418170a5e3aea47d0c2ed0a84d7832d94925acb929d4cd4199f21f975c909e07e534c5dbaaabc8bd99491392cbd6c12f834663aeee6ca77d5e8d8c8f7058ff46d70ca42243b876e98e7ab4837d5acac400401576f35df1fba855b16cd639b880a78585dd618beb8bb662892168c899d25f8a7757a67ce9a2d53cc18da1a77c1286eba18922973a73753fe252ca003480acc8e44de0154d1dd5660f3eb667f30351285a2684db7a735ef974330cd596e523943588f7bf5e96815bb0cd1064315ddbe37d82117e0fa3bc11221db75e8d966558c9b873d5ec4ef764e858ee2a9105aedf5640afcf7756fe5e03bc625389f46037fda39458dee0a5257843f67320799a0324b1364832cb72d20347002b2883042ff0bde307c73ffa41fe330eedafc770ed0bcdd63d929c044183ab6137e4a8c1ebcdff01d3b89eabf20a0cc3704779769fe07096da0d387c8fb34de4de6c4a1508c4c67c4eca4f2d3ac30540f82d2e99d753fda879924c73ad490319495986b607313b67a4e48712d0f24b3e1b5ed97d27c6628f0d24ba03903d90dd2d887e33c85188eb1a0bd4e4bf5f9e38546be4c5408e38ffc5ce37a2531d1997ad1d5c7788a46f20e3649fdfff6e8a281634b8b3b4dba0fca2b556f2d6fce9ab92a554ff45f737aec37f8a079ac15baaa2c4ffb7905dc411efced05d70b4856bc696f1a5293d3a701068c573c782401741d6bfeab5606de99e49d11229048094ad298cc4a54200ec902fd41e34a306f375863a00327795d655462107e50fd21bfecb8c626ab043feef318a3d97da688151b4ff60e5e855de82590e812a251ccf3845bbf50327ae6081e8479acc8fd7978ae71bf32400aeecb33b0d1df9d3c40a90d35b88cbb58b2e198a371cc92b45753cd16794647ecd91ab53d04608d19873f10409e4c31bec527cd73294edcc83d8963cb605c048dadf386022770c1040ec30802f5f6942338384460ca912b95539aac105c606ffbfe980f2f0e741746e5475c4713a471b8e5f0806bf3b9bc44d58a76c01fb01d100950895296a5f792c2816b18756c15f3b2710bff75278ed83fb73c011acbbf1cd5c51c936bebcc794bc477589fd5132efe8b4b3485945aa25ca014a6da13207e668def8d01996a4f26606473aa3bc4864e3114a80ac47e31d1348bc96970ca07d055025e57c330bab301069823414295a99e3e61942b6574e5c6c6c713ae1f0efa052c8793574868e2a1b73d6366b9c7f3ca8f2423d76050215956e50a73f81d7be59f7f6fd9617f23096492db5ceb4e7bc12dec62f9b23f5d63f438833e181211b77ced08c558e9ca8888ae42dfc66ec543109f3680b608af77e0592d97bb99c97be5fbb8d5faaea3ff0b6cdf8a6138561a7d4c8ee1dde56ada80ba62771bbd932fecdcd318299dce3ae858881b576bb5b4bdf2e5b0bd400e507cd86c08eeb0190ef3a6140f88772175c42597eddd9e30a36c3895663e7ff091d6b0329a58b985c31acae9a6c969ee5f0699c9183361d98fb8986031ce92a093c7040461a5d92c2ef920035ae06d1ff24f97b0ac3699f2a9da9eca79ee5feea87a6702542a8b7dbe2bb6c1943f1bc923ee7f70ea90be7ea7f89d49d1bc3f2c1a678050019aeb26b7b4eea4b565aea82ce39a578fe94b2b52f08ed2565c348174cd95a2cf2fe57281bc891d33a2cfb5258edfcc7940d4472f151d6ec6dca761863417119a8b2abf7379b28546ba900b57e2f979992d9ef28ca040c3b0c62f9de6d6a0e4dccb485460e42558353f9696712cdd3efd0b6543ef2a845890e9a5d2da59acdcda461f9371f840eb5f788d34320286cb16b54c603688a2dce145c93ed2e7bc2f287c014feeb979385c1a3e06af1f30d125e07f0a19c9b5f937053331b775f25e1c7b1bb2a2230fdff68ee0c4331507227980c83dfa8b803a38849867a67f1fb274bbafd2fd4e38323b4013b42189dc18ed0f71d418a64f938b50ed4ab03a6d23e18c260469b23d6f3baa62f006c520206bcf584fa7bd994fdf0026f228ee80122599d8513abdcc948ddec1404f45e925105a606cdfe6298354a0779e0ba71f56b4f005b32797b30b474919375dd3acc6dc2ec2579576f3c49f762302be41976919fe1abd0ce4dee8bdd1c446ae800c88e42fd6e599e679fbdbef1ce4266642fb8885bb8f4a9d2ae0f50949cd179ce077789e5c71e165e7f67bfa05c3921faf40ccb917cafa0c4a1ff3efc4a2ae7b00680398b6a44fd0b34df54c5ebcd301ce7df722ec4fac0b3a1ffff70fee6e8ec5a8c314774358d24f45e2d949b16d1bd16e63f0cc38a62ce279ed792d535d8b0242715cf3aecbed902b9b6402cafa0da1c17d63cb0232e347b2f88c1cee1741205be53c56aac3d9910f55fb77a978ccab63c470dee7a8a4b8cf86e63b6704fbf31b87827a3f42e4d83c967f8289502374b8a5620eccbd116c58777cb7be81841ea801ce7b2e17941e905b739cfcdd385219e41539b7456a4e4956e4d2fdc11e6ca8004800743d81485a5c561d84650816459e2c147e96107c845b47ae7ccf10292a9433022617f25373259a93f8466dd1f0c86fbf4d6929437b21871f442e68325d81db1744f3791b1ef0ebcccfad8f74a070c2e9bba19115cc04b055f6fc6617ff5ad8a34cd06b2170ac7023d7042b24c911295fd14a41c04474de71cf423af2a0124ada6408ac299298de691ad903929260be533abd58a4f5d2100970efcc34b79d22aa0a59e1bcfc6ddf9ae9c528578bd2358abfa8248bc4f5ee1de292b4e4f498b98cff371693341e6248acffab287426f271528282ea59ea55e0f4cf54c10e751b61cfe76274dc2f0a9d83b6b2ee7f2cfb7d163183ec9b6017f82ae041766658552151faf6fad36a3e63559c4916269f07e2f69722a34c3fb58c0133730206e717c7c304549f29847bd8a0fcc04f1a5320562305e871db9e90e25f2547fdd97129ddfda751827675faa82a2e937df2538016b749d8fcbf1934d9981a57afb5dd55faf6e4eb44b1ef34f5ee57af163c98cab30ec123f0e06ff4dda644eeb75e2616dc80ef1889173c41b114cebff2c4d0b73da3fedf8af69dae52495481a92c9a68e6028d0bc87debfda873ef5635cde7554c696bbb693ae0b9b607cfede54bd17ceb9847a70ecbab23ee437b845ead0e72faf96dd660bb7dc2218f279ea425e9c80a020efc483ee6532dde2d3cc99e3cd8cc58d77e8c26d5916b9066fbb2d29c0caf7167bc5e1d7a0de173f6a09b03565a7813438ad38a5840e1cf1bd85856787d23d6710f9da023e26ee2981d489ac53e1cd13a0e037fa372deebcd64444398d6ca367d678a74f5edba275cd8b3baf0f429397c59ded4b56003da6b8f37a254ef26e72677ac7292084132a3534df1277251948aac3439e4dd11590f843ce76fe85d41b828287d95b21fd2edb5d0be301039f1e3da2cbbe7eb2546d23bc766064e7a7305c4541415b99a5c7d0fce95602b516181f58c948b556c6061786fa2bce46876cfa64cdc417c5e11b009326c08d37e4d06c44bd6635500d39b0f3cf82728977e00cca4b968d5fdcef883b5317d5b1240708aa637005d5717a81ea88d00fa882f4a35369c95107a6d7b11da5746c07d88ed26a07d88e42909d375f8beb94c7a6257047f775978392bb0349ba3099abd02145f518902f6a6279a0a3cf691ed806fb03ef5ffcb414b137b37b68a437cd8ab6ec2738dd7d5dfb49d8a09d3da6655ce0ff875f01fd341d32760627b330fe539dd16e4660042085ee9c4190a230e77be16c5cf7fa85ef701cf1d778352fdcc64bcc10e94cde27df598874b6b15126c162051daa042d2551ee26df79c4f57f49f98da466349f81e84aa79f2e3a6d6674b6b199a8a890430546204a60e21a339adcddc5e49a937c5d80e119f35e2552c40c9558af4b151e2c165e70eade5f4edcd4a96df907d3a6891b4a0779af31490ec455704afde7a9c654cd1764ec3cfa0289aa22b2b37d2da462ea47d0588a514919a4d65d2e13cadf3ef9164016463832e71bdd21d9e2cb258213f8f3014fecce02aeb6ed62c78cdd507f2fa4c7768016ab4415795dbbd12554837dcfc237ea9179817c4f8bbee85550ffbed4bd62c178e2ab89440dc04031893698a57ebeaac73c20eec397629d740f21bf426f3da25cda8972764fdfdfd054cb5dfb23bdcd6e1cc1f3f50c8cdd0eb4f6eebd43b15ad6063bea316c653e03a676cf3358dba176baf7a6bc0a87b9b7bb5e2c7bf7dec6fad37f22323934e273d99c2575becfd6ba5126ac1e56b021ac9ffd465d11cd9f1a8fd2bdbcf5bce9f47e5beef4653555708897bdd599dfe006dc69d1adb30fe54995f69b984a6f3ce58b7566573c2e79a7a9aaff10aa1907e12658ca59efbedcf3cbf4a4e69159719df3aa2a709a1f4e24f63e20cade5de896a399501ad06d9305ba89970e4311ea7770614da0121909cb7480c94e3dda31837da8d2ef3b08a04302a6b868fe851cf17a659b9779071d1ac13e92f48337fbf3e48a54e6609f9a3e9a7a29c98dee1124f56d85b40d36eaa4d1fac3653fe7919b7df387f3f25643a3726e196592e63c73d79e9f71fad3f6ec8ec5026f1b3231c75659f8a7df08b33526ca4d36801c201beda1950318b7c5eefb3838eba3f46ef6a3225e0d823ce85e78c2ae448b7ac250d505b7b08f01eb607f678faee4d7e98b6eae5192ddd249ededb9e7a7c0242f9bd79d833bff8594238c178ac18eba50b6e241a46fbac5a842ff3123d157578835feecf038d39c43d4af48f3c6e2f283d60eed357ef8a2bcf31e8f6de176a14822c3dbb75c8ca14299962a7d4ca68ea960f66b13415c0eb235483408d3014de2051225d5042f6e009fc55137c5b384dd9462801232146fa32da4cd52d5854703c8350ac397f9674747d06317b9ae12a0a6fa0c951339d5463ab5ca86decf6bf83d8b8b3c61c30b05aeb286024fcdeb6f4ef2a1f7f35fbcb95ed85cedb85638d357ad93538d9e793c3165683937b79d7bcf237b2b4e73b951c2e146a3150c279d5f9f280c477e7e7b38447390b08177cf0bd6452516a58618831a1b8432ae1c532bb884d7f91fddbb06c23e3bc4c69ad11cfed635dca31c54fbdcb5e07fdf65cdbd6db7f84086802527550b08d3b113b997a9e7ab6b857cf4e9a8be3a99da53167e4bf511f1cc4842e0f66745efcf7f70eabf4bce9c3ff3d8a84f13c4d0cc0028a84544e07f2d55182e15beb09b0f5fbe13fa837e5f83ebaac4bdc3500646b3f5c16dd81a4d1c643176a8ee9c8a5137369dbcef1fdde192f79c89fe8b2916808c47327496aa5f1c22a3276702eb0038b1bf2a7326edf38e8307bc10e72af1fc8ebf24e193f1dec60e86965363a4119965b2029bb32a086bb3bfadbffccd82199ec6d354750d2bf64d62511a00c8d6b9b5d2bfda8e2a7e7a0dd9bbc97b87f2699faf77ce5bc9ce9df3cb0aac96b7d882c50654b2f5cc5347926488308fab8df892db35627b03abed47c0ee60f116f844adc837371a7a401349405816ad575e434f4a6532efcb5f34e09c208cdb1ca137ce8dd982787ace9044f1f9cc94a719cbd18a11ca7265dcf0d4fcaa8718fd5ac9a25ebd996843ceec0d622e40344ab91d5c2768588122df832a31ed3a92d9e20dc61e334e230cd1fa5b636b5f330ce333272e2f45cf6042ce8a7ec821161b986129456a8340d8de6f528676902f0b9e35581d2065b2f9ced16c6c17895fa0c65a1b971d4f570395d69a5d0b49f1801a4c7633d79cca0ecd4159ea1405ea40219124ea0e9c724ebcd81c333159a1746c7be7102d24074dd7e406793669d40fb335ddbd610f8254b1dbf7de080c9a2357cd91f55d9eefc1f2bb84c1185d603bda60671c7b9e6d5bc47101331d856ac1f2e661ce3bfd7c692800917aa3cc9c5540f45faba6537387fe3bf79c7a0bcec331825dbed8249c67292f673c0586c6fbc5161ba5d8770826f048b52874300ec31f7de7006849f3390cbf9f8fb7480f91b0d255939246bfaf519a5222c605ce245f5f8f280f96c82bbf73a5a346effe26576198ab3aa6b23cf23ff8ab2461e9bf12bf4cc9385405a383ef00fe5fef5dda1093be9139524102a11af51e9def1155de45d59ec05e5b1c8069e4305a586270d0f8e90f4edf3d856e045d6bdab4ca5bec6579c1e26b52af195c7b5f0cccf7af46a725c9762a452a85258ff0acb4516093c25c2ebfc22e3d93c2ce6849bf6f645f027416f6e941e32472a3aaef5966c7a16a5f99690e75e949087663e9027fb7f90c3cfdcd49327f6197e91e6706cdc1f283ef617822dafc5332fe300e364eafaeac9fec548ed7ab044e14d91150a09867b27f1bfc23bfdc67e984fab53b1b404ab775330433dd3eb12b61b20acb303c1999fa4bc4a355e18e2de65e20712883d1fd6c724f73aae8382a9d3c79d1969763ca8bf5c3e752a013896a9f6f6f36517897123b7d91fc960b8b450be5caa494af102701fe5856e129acfa7e73f108742b52c98c5f93a9b728f8308c9f5acb7b3d8371d0734351cbd475b5f4465afeb98bcbd5f2461e86aac9999c5dbc21adbc15c20a7ba144b31bd018228d62d576fd4962aff7ca1109f688a4a9f29d756bb737a818e2f4f0d235a575e38a21677f09ec89638971514cf2fccec0cfc8b6a61b715e559ca932a255824999551c81e58a38e119addebc380cd519b049e09e8b8a6bd6b727e662113ca41e130162c8b0f4d32ce25ba04ad65fac9c332545fe8cb85332c9ae18b8533c3912b0c2e85fd3e8c20237f2c0b36652e26870b1412b91bd37f34e7980ecb6cdb0fcac6194d905403853d02fa821546333ff2baa031e5b438ffa38b7f839d2eae236e8663cabd607fd3746bfbc00fe35424b70991e82f1cefa3b7c87b66b0d04a444f42746c1e70ba3e04402d3a4736f1a61cd325e5c945152e4cc17f919e06e1c18c36755ed7fdad91003e9ca816f1173ac187d0df6d2c07fe00f4db52322f4ba53f26244a47da53ed73d679e20d7b159fc342c190020b0a4cfceba936db4e318a3044a63757026710d44237dd1c8f7cd75b9e60fe29b60519137a1b4ff936838f23debc4d612bd4d1d3da167eb108d1ca221b6135848ba367c228d5ce778ac45188184eb6d50c0bbc3b54026443eb3e5ad79256d60ee72b7d3bff8993446f0f85dfd16b5a5faa60ffa7796a18979dc2b1152e2309c08589ef4626d6ab6930be0ebc47b1d448351c9bc376c3407ecdae35c14461c3e4685371fddddbd66f8610de5ae10ab780240a1f8324f3831e77fd83d0900a9caf2d63461c38886a1ca92488251cd96a0f0256c0909e2e4f0a25264a78417bd5e6c70f3988d2e62f070816e28f9229cf08a6b914588b6e8bc728ccfab7cbb28199bb831a49d57b77b12aa61e2895eafdc143add50d93b1636e0dabc9047bce3f7d5d8f969af7d96c85489a3fbc42c61e84189392c14b1d8484b2bd589bf16d196381359bda811ced68c1fbb4fd7ceea3492c36ad6dc70b4f6e9b6c4bc24a4d2dc3355f676212e0051495959cdf2f88d97bcb140f66633a98ef26408d5ace96b6d34250643ce50c215cf39447014fbb235cd0636871a09b2b5ef96ee6d1083bd071ece999f6bbcd8a947f1b355aa2c63582349fdb4904084a1b9c9392bb32ba178fa16a2eb6681f5cb88747fbf7658ea28bad6be7a58d622b3220c4f5a9c220c6fef4855486b744de4538855f2986ec53d36eeeb2e0724771f97bc924cc354666a4e14de62ec664313df31944cfb658bcd5159ebce10534dda5f182b556abee20d206cfa32e95628dd16502daa972328bd6ea8ec83dda33db3c32cbdc136eb9c1ce2b72f45baa2ebd3fbcb1d2f675f9ec7da9f17976b6f9ab03836502c458fcffd74170a44bcd2bd0001567fd3a621cefae12103fe5ed96f88d7edacaeee37090a39a128a4b4785a4417bee23989ce9f97aed48ce7be1e8e4c29d6c0f220d60822200127b209dd362e47c91d550507192d11375954fe23dbe1bfb12296be5eaa3606f7c73c2d6a89e5117e3cb6e04f3451fe92a3b0bc4a69d7cd8fd06e054c9448168b2526819595dc0a8d2e8b04922971745f3677ed3bb68f09c11154075266b37366f2d714530db9c81083a4ffc6766e4061635916a6af1e5b564e707304556e0726cc1c7ed723649a849d0f0816156c44f995e175c62d6799606b072f0c386667bc7c7656d3c21af53caf2a40b2e22692d89c94ed81317f534ab3085340df6f1f791e70a8e1f71251b701bbf622f5efd252a3dc932cf89ebd7fcf0606cb33ca368abd4aa4c6c28bfb8abd908404c5d37bfe0497fcf10738daeb94caaa664974791fd169b84aa060575904a8659c7391218bc9bdae3f677b588ef6f7c0561a87e1a76dc5237a672240df1bd0758a64e81e093cfab8addc5b8ac1dc161446df619c1d0bb49817ac05742b835fbdd5bdfdbb56c8f4dbfff019f96ee69de66c7cc5cb009e8d611b7aa06fac6f2ee16dc59a213726bcebea2d1f76c769888b30bbb657d8105f128eadace3a4d6020e20250ec63dcf1069db080cf7f45e1c7b5f55efdb4d1cf6a7dfeb732f6bd421b5a572babc624e715848a5a5b8ac0d785ffa4001873f79ca022fa8d211a7e7aee1c370fb527a8568b7266008130aa1e02b195f3f0934039221b9ca782beaa4bcb7d76de4edb495059f6791506f30f9b976ec1b73f363fdd8bfd6f05c359d1cb67ae4c58e0b493f2fc8d0de8d165d7e73ef13cb0d7a8f77990ee68d810dd894c60eb002cf3bcca34f28d1c9c0f8a7a1bf5945472b171c6df89b6e5f38d6f8c2e266cc23814a63a6d9c4ee3326c66be9312cd7b4ed453d5e6572f3d4ba54925a6cb7498bac0c4fe52c116c75317d3c4a2c180bd0a597bc9d3ba31649f4cbec99a772f6ccdc11af174e78ff7f9e3f231637e7cdfffdfc991d18ddbe7221d2e8af3b5cbefef3e395bf7eeb29444d961512b48e6f99f48d0dde4c984828348fa59b8c9053f52b31345ca4c573e086a694ef20310011941984f1dd33d34852a49e6d47c16f567b082181a356cf66ae6f466c844798430a56a6717903d5e4876361dfe47c4bd696059b88d2b9d97b51108be99d13071110d888ca389923d9c1ac57b9f0aa981c4f54a738f76c82c5c4183af515b19c367a436b095e346fedf272f7771e540647376ca8ea63dadf3dd2c53557d9a2135ea94b954983d6c59375c6f8e68e6f6c608ab1d09ca92d1fa696c079ff27e3f38c0c206982bfdffa2c8033ce8c0bee8c151c21700ab0271f578cd94cdbb3083c1f4f57c2539e2ce8b631695c04b8f22eed9273a51823182376fb068d7c2ec9cc01243177e671eb2eb6712badbdb877cceece7616b95fa5f0572f25a10905509b0c597fea5c59aa6b51d708ad5973f8d9bc2b35dd64016b4e65ef4de7de72896ae64a332420ea3f55f0e566187654f725a172a981aabfd8ca3223aa3ba3ff97c217473666c65b717056103273c60f80a75f0d8a36f1b8196dea553fe7081d26eb43fbe7b9615d4683067fe16736fddd21b25a24683e97ef2dffe9dc60a68f8f4461d5cec7e6d96938a90dcb0787ae3bf5775eaede803fe3ab572dc92a5f659fc7c8b035c6ed9a92c2717b66d0cf5722c3f3e0d66104663f35de3b3b0cfb4cdfde7cefddad7a5c89f7c0c24ab57e697f7d312f1db3d63a7319636b7a0babc3d8d4c122dbdc99172947a16de7258330bcdd9f68878cacc758ca743d9be8a938ec57696d0849e8a4a60cbece7c6586024c9655416c97523c27b86d4f342232e77d81e0302deed9ff43c7c6b0aaeae1be648628dc3ef95c3abcd60aeca3233ff2c07fe75f3e881368a412cb06a671597569010f8146b3291834fc0cc2925396e2a820659bebad2d78ed93865f68d5d9b2f45fa5ea0822e1d59d9b762e7cae898d5af926293b7982794d1c40d1d70ba7f426c05468097f4f3374bb60bfcecd201c242a6f6a8a764bc19483256ddd5b626caf498178cd8445935d934b6aede9f3f6ac277ad01aac9ab495c687e0968db4c1ad7b5b539f2f4d3d09058a1a43b8419638493da1a5e89dfc82a2177b87a2b33ff71061d8cc9c4661f84dea6fe179019b6cd31648225bc39f426cb0120baec8380c642146a13ab3c4b4bc98e2f8ff0268852bc1e15495a0494af6e1b643cbf080d195e03713cded34b465b8d97836b381669c91debbeb1a330cc9982ba8a230ace673c97cdd631ccb0f577e881db7b5233c1a4c9dbd3f09fe0f06901caf16632e5c19d0283caf0b062af17133c7722196756be01d87618de4bfac2ff34ae2758be4e4e1b9c56fde01de654b70a677d5c79b6118cfffe9329998ec8e52a212a619e2e8c325f6e71e97ab9f483ca4303bb5e6227d07d4423a26a3ebeac52919898d632cbf1f799f720d864674c2b375bedc8ebc88a3849192370a3f4b4a5e32a260f1d776e246b9779211891d53d5766f6ff7c95f3263d7f9c623102e070d4b7d3ee3255dbc76c790773d5caea01348adaae2729232195b73a6478dd972d12b292f46d277266d87b990f9f44360e5c5b6c3d2a4ec50c724636e26629d5e0c848ec6e540fc5e358f901a970c4042272be5a2df010487a59b2104774769469d5b6aca06321f9dbf39fad47d942e70b8fe934b80075e3a92fb3d96a8a86ed9da6f03eb7fb16e7a72005b8ae9f7eb04b921ea49309417932cdcf62a10629a55f61a78bbd6362c132bae21ce06a2a98698f0d6b6a103ce02da1ac0034789f82add2a0451d5d6cad21d9ad7f31a1187a77ba69f104a64d7548999aa056b81fa2a59635287c350b4c3bba99cfc816ed4d98edfa77868c10f7d82f3ae4e62c3d77de5d63f84c6b4803dbf294aa4c56c8cb9adf7c5669599c8a77d670c1fbedd0cc371425dbd6d7266cd2b9ba08efdb2e4c2f833cd28e9b21892a5dc971393c8780f1acd683a7182be15980fce4e6452df901037b3f9cef00768613646fdd90f7b3da0f1895efb05ae6e84a6af69491e4116ac8048a905d81d737ceed183151d1c8ecbd9461548e055c838b31c33731010084e499b9122f5e1a8073bee8c5052830dea3d800bad208074a32b438e73ccc436f12eaf129fc43ab95cac0defa06811d76a79ccfd802d78444b5218bc96dc7ac1a7a7546899702870fa469557e0fd8dd1e5d6d53bd9651fdaffdc0cc271ae85bb0f55fa7bf7f44610a196c83e6c35c31b773f49cc34f6f340c63bb08eb0d8b1dd7d08f470265b3dea7ee3dbd58952fbd7f06614f66baf3dcf38524b4737ab2854dbd73a1ad38c6da3f960c406d7e69a4bb4d34ced0afac29bf3db1eaeba1df1ef8f2bfddba43a24337ff86cada3f97b4b20d84283d80a3186681e6bfce74ced964347e415e7a45bab569ea9a313f3d5b593429be0d59cfbcf12e4d35d0ccd991f85e1d71a72ae4c4b0f064e64685399582677697ea933c7a3939481293ead194625a932655972c79ad768285ca2f4786b8d7c80d4f7d57cece9014e1a740ed7830da8967f2e4e11a5131a202e7fb9c35af4bbe56e1474b00fa448645113b38c932342d1266a63dae74e74f05faed083b1edeb15020375e53dbd40c9b390c57fbd3ceae8ad4f421358e78d9d835e1587fb92a0a07fa13dfbdeaa8d096f68a9e9e488eb8e3c81e7f47f3b5addf719371244b031eebae420ac441953d1897d47a16418e6857c14181c6a19b52f84496ba773bf3b928cd96deef73fb9bf028b6275efc42c844e8f59546121d4090e55ffe20448551dbdc087d3f513f04ffbddcd207cccb103883055efadbe3cb05bb12a91877327dab6b7462964aed4b7a3ffdb64f63a466b5e54b621169140fae5bb3b520f4ed1f9e4ac3aaf24570bfd616207760420d8edd77900695ffc909de69db5b233ba1ff37b7ec31744e8d636776c439a68497575ef52fe81d5d9505b8da7c10347981faf324b1c075e0f557dfd9b056180976b0bf20ba311498feff29372793424692d3c69f2e0691622ff5d489866716f46a14a59585c81f4ad7fa713329ce13a3a264e248feb7ba3dcbdbe61f62c9b8b58d0409ff4a8dd38cecf557d169ff9e5b7b0fafc6bc1ef0853daf2e5aae0a7acdc67441aab3cc1e3b14cacdcf79928c473d791fb44389b9e1cb9efa924f755c176766b5fee63d624725fde1b7a725f0634e879eecb7d8cf8f839d0637d9ebf83c034464a130030f3ab729f827ce7b337281325c57afeb924f619d998924bf2b7eb0cffbd0c28771e768e097f798ebc93e19a06bdaddbe6b4ca648a7d3e7587e5da77dcb514bbbd79d3bad9771f9b845f52dd8f97c32047c37a418661f8d808863656106779f6078d8ec4a5a6dbff92e9957a39ddfdaa07b4235e36f7d77ba0ceecb5da8daf2c72df5b0a9a5099653bef760a440af7c859386578373e11fb5ae49a28f42d0678750aaa77e450b7b1bf61dcf32417d38e5377b3f9a324cd82e339e11f12e0692253fd18c292e9adc115d7479bcff0a051acd1ba4a3bea75c7b0250fa5d8a384a1b618f9aafce394e5a1757e35ac7129d84f9e332071aa9437d9556511a47cb741824cfa053ebd8c5d6003b5507ef00ce5ae83d3d241629420d9c979d34d4c026cbf0ce91ef4ccb7f4e966107e5d3d793eb801364e2ceeb781fded9afb4db5d98e885aa27b6fffe91e5b724ac2e8a7e59935dbc6ad0d9c5cac6c417ec607f0b7c6bca307fd83b49aefc7483abcae3af070651c14dff086b8b953d5df7892ebc06af320436961447eb27f6ddb87098c98eea06046d89a39f56d04207b53e10cb46d85bf0b10b21d6900e8481f34c3f54b77200fdb81bca3eb0e8c8d6c78eafc2796011a0501903c3703ee1f02c94b93b21c5d08d62488c2b8953b766c58b81103879255dd3b8b1ec52b27e57e5eec214516c0922398dc54e673c151e7a6ea5187e3998aca90b78aa66b15d4a64936b149e71ba548249a6e181ca41b2db624997290d17c541a68c655b25061b0d11c96426482fcbef484546c647595c89d5afc3c2cb833410b7701ad2693da8f7873bb72cb1e4ebc25ffe8dd6e1802a075f1f46e414c93ccb539ad63a6f60b5eb44df7ce5667920dd69a0d9d9863f239e1172f45cdcb546ac003d12cdf69652e724ba1dd65edd61e7e66e93520ff2ec02985b812a3ad021b7ec534e3880968f48636048f839901eb59e3f8626a6d2c81c2080ba1f7779884c56dbc3a5953402657d3aea3dc2a95dc6159b37c2347281d510f73ee44b004f0f4708c5d3c832ad9da2839628f64531e19808b1c30258b15dfda592af693e238fee16b47a660f58e0394666747af97189605e3111defacfc80737538c3725575185f55322e10e12ce5a8445d5abc63e2e4a2f0ac3ffa9b4bdfb0959ca78675ff19790e950cdd54cddd671627c8ea0c2322ff7e8677d0800f825f57327d5d9d7f4a35cec3bb303cbcabd439f2a24738746974d6aa6212756e2becfe7ad47d4ea3b59e8f246adcad419e0f70661e91db2741e8a88f7a49fa88878c0d8dbb4cec72082c1271fe6486e6d114e505db540132fcb6427de935b2105ce0bca11c8432d2a5540a76b7d4e9c4430d1058768218d1643ed6633cb655fdce4993b008eeebfa9d19c45712415061922b1c1e9bb7527992d6308b2ed950e3406e5035e3d822050306992bea4c4082af9653a143ff6ed60ea98d98fac5acd112ff6623ee80a0bac3f9da9f2159e8571c61dc29ea886ca8db28d8473668920eb17153fe21d0e4554f01db701ae112e95ca29675b8a22f60d15164bcdb42041ebeb30b1373b0ad5fd6a9304617fd658f2f3b74605f755cda9e98ef3e75c49703ee3e5625dbc07ea7b7b87dd9d75d00835af5de59f4bafb402575c14f490ec03cb3f076c0ec1f65f609710a25e9ec4367be325c4d390a7b8dbaaafee3eac8d81672753dbdb04a4c25c402a32ca35ce424446c483cc9061c4d6382c7250cdb404c505851e7de31662cd16431e54d211e9502cbae47f1c245fa54c6497aee23fa53e4f400727b49fa8050899bba23aeeba0bf7c36501df811b2eb13cebbe655498795820a25a8242c71bd09c7c4ae3609a6e4acce07ae35914652f986ad26f368b989fc59195ccb0c9bdc5c4f7d10afe020bcc8fa12ace333631d77cb58c76fa96574901111ee54897f0ec397bc88e09cad4a9112f8c3eb53e420a36889fc2edfadaa11cc2f709a2b2b7ec914b2fb0cfcbedbb5006c14daed77f9002c92233ea5ba07c0e9ba004b5d002c95d5eb8a4de71fb8696956705d3af865a56cb90d2221abf37b67a1a9d8e4c049ca021504754e5254230262d9b4e57f37c5430ca31191b39c14a6ea3f5b27986f4b48b0f4653a8dcdfc89ecc3e789ed271f1b264458d350199564fec1b0a46509439dcf6cdf1d6c21eaa6f7469f181810cc0aedac00512927f8fd7b3583153840960fbd11658ff31f5648151330bde0b163c5b3915939f72f4a24919857e24d958bfc30f1e5dbbfa4bc88656f394a76e8834c4783810f37a8d7d1e5aa9305eeea979b20ab10ee6588aecb6e5ceb906eeaea73e6e21b63fafd83941d70f9a05ee5dfdd43930a28e073c66b34679bd74a126329380c8fae9014b93860b3964a4650821e1fd45d46154db63f5918471e5e3591780a562a9a87e8ef5b214717eedde7ffaed780d95da670197676b04201661738a4c8fbd6f77c47b5f450045a4de20e1d3e377085880a9ac3ea66c357609ac07d92b25dcb59555fcf11dee701bad23801f0e59936ca8fe3e25bef6065022fdaf56e6f5ce0cf830b3e5b61653e69c4de84e95932caed7116394795123c1145d0831bbc8b1dd5f37614ea14fbcbd86af98f9e90057ae6cf51696f397f3d943097a1896c96eae62954d94f015bae6cef1d74e5610ad1df60a7c0025245bd830e6a05cc1d288c1a47103caf9c6a5646cdf7d30c50e17e997af80320a44dc7300e8306c0078a9667949cb141685be57b777362f84f7b60500b3e65bd82e81b2ce18eaf4f3892897f8c6185c2465e1d50256512868fdd167b0d487fdc451932ecb0cf37ad81c13aa031b5381c0b3b31c3e5156fafeddc03664033999bb0927380defa599ea370e3379f33e612b7b620d072d1454d45f4f4096baeccb9c0216df0147a4f854bb6f5c0d4bad0f9aadfe557aa05eda55e4e4dd594600736c953eccca6deccc2f5da67433488196ef97215cc30017e5c1d0c744dd4e131f4c40c68976c66a99b62f6747e1001356f931eb48866ceb924bd0471200bc01531d3e8ff0147cd6b86fba8fd34021a420c655f9c04bfe4b0e2427756b1c46277cc62773e8b5de32e50ee379b242da7e130c0df76f22dfe7bf52d86638875ef97affefd6b74777ffb1acadd6ffccd13ba2df823e37d1b61324c06b00002e99ff9bf9a666893a19925708a8dc1f60a1fc7e6133cff9effdad2cdd8f9abf69dad83283c5f72f2f38c79bea4adbb60be73071161ff6801fc9362f8f7bda724bf0660f3093d426d93a8345b1856d6f98f668b4a2e786bb6428e5d7a30d2724c917e46f015a885858b94e69bd62b28d138cb1cf3395b8b12b9646d0a59a3ef62df3b8e09246443244b33270f1b31dd08d0ad23f73eafe116468ec8f8059c835744f23e37182159dd32323ac58514ac94a41bef758c748e978928b4842d99e36a378eb7ac02f0ae29c077d69b52e75c59a87c130b3b722703a067d2d4df1511a025966e4e8b5b6f139cc697f72cebdcbce4aa4f79c0326d8b8995a2aa0d5592a21ac01d689348a4d53e68c66defe45d15a344026b439cda419d823873214651d4071fb9fd237b9459303d1560f206b6ad013e7204f2c7fed14fbf256226353998960f355fd6dd2a9c936f513784317b1d30a81b8b9c99278e131e7d4cd3fbd2e8f1f82625c08cef8295f1c6f3d215dcfed5994547882c0a58fd50a1630bf9a553f570eeeae0f7ab1ab29c2154d6e7d006969e0dc3357bfcde10c0de3e98997e0bd1717305e463e66ccd923163076386145895ec58d834120bf753c2809b46a10a5e43db43c74af4cb0ee2beb70c34f996b757d9b6e19a35865a4b6528c67bc7b51587e143cd07d29042be62b29881dae7f0cef56a6ec2967888a615f689ea634be460eb971210530fe02081aee7e1c6bd2dc86b7ad24340c7ec48947cd4e514da610167a218a66434cdaeaba9bf6104e4d88073d442d887843fd4bc947060a04c23c7912168cbd87bccadcd8e430edc7e7e191c2c2080763ba36232d0f4443d345e67d97d300a3700d014b94bbb89647ef5112b22b10be100b7a644934f91a9876a73e236918be0def5eb59252dad3ea8e2c7cd24ecef5e05f064fd0347577749cd5ed7c0425e013579b1f0d06b164cc98e4d24dcfdf06e9687374057ceae3ecc6743caf8af2ce0c3a43db3f9f6b1e7cc962d81b2fd5c65b8b91eb0e55faf73696e5b03f0ec1b13c330e37d8c288666d4d60f36a2dd5db73e309ec06634a37df3937eeb0e35476c46d53bbe95ebbc8cf9467297ea7bf8941c1ca3c0ecc84e870e72e602fe1cac1bac854ad25c0fd7a747989011385863ca694e82218bf1858d7bf21bfbf880c37a4646463337a154dcfa7c2dd0e86d63fb89e8f21f98d49d43d99c7a31498cb1b28e2ecfe66ba8161485c9f2c05a15556b25c0792d4d4a25e2b2b3e2098475619e132c100429510937b059a4d9bd515ab48cd68ec8a8d18a7e56381b1291344d6b87f50a57032898912beb530f72e9cd8a7600f99984e167280806552db9bf918467760ab5ef679f2f963e36353b33cbfe731a7f1a09f98691a5d12442b1bb80921300b96b7b0bd46466238bb4f4b32dd104f6a395cefabe148e24df99233c4810b5c1bb732769cf81a5bedefede0f949eccabb141241a1c919e6b680ac921a029f385834323046ce9dcb9e42ad0b326d0698066b94219e8cbdc5f9e58b080dd9c59c2b96b4a900d5c60c751a8663f051172973bf0f1820a585b3930f775a9ebe9f63a40af5b27c73326657c6dbf160d98141b924f5ceee41a77887f5cf898f4b629e0b473d41828f57b0d2f984451958770c4a993a8adf2689a986389611244201c00bd69f5f86468de787b40e5b61100923c2e532fdf1953ee88ab872eef5bde886d5c6de16ad17665925d95bdab1905e24b9d72623a9f42c32e2690464769db55f912b7a6b140587918ec9529376a95d0bd10b4586fc649187e946d7f00f66dc141a3300ffe700ea900a42faa16ef7489e35f92132abd378ebfecac72d9feb7c8cbd0116f1a4bce7de37a1ac0a5ef2c41001020b5020439d132ea5c3baab7dd9cf46b24e3bb26d5a64676cd91149868b1b6bf97b55c8a4592a90187e90daf8dc99dabf882fceb018ae8eea01d0cbc9ad772a65832c7c65db223bfc0a8b5ba4a96d3524de672f9f4261bcf49a3fc0784475e79a45bbe6f61ed10dcd592a8e6bec9e177fa693d45c5ca45e9d06b277ecbe57d29e8535650cf26bbb4dbce15a21e4e084636bb777b2baf9397687e4b68ec3b75ed36a9b2cc8352e94f8115177eb17d437634e58e2999040f31bea71ccd4dd4a90ddce39b8a64019e480fddd69d2f7c850ef857acffd281df2d2ea0787f09ab56ca9da1d875013659920e382e04277b0439e01e858810160c5733e4435687501eb327b4ddf8b2ef7b2d6b657e9093df92e8d5c87256600bc725908b391f9f939ab55d10364d898661982a5067ec4fcd6f560497d06bb9b717ecd65bb88e40592e5929db7bd367b33145167028cc8d8f98ea8549b6da444b0128d476cabb9077c8d93f545f9ca50802c0301c452ed6dc8b7ba7260ce1ca946ac48c35e5cd7ece96fe0bcba564eacebb5fc0420672b1c2c5c8bd9ecb83d7da0b9fa53989e5298f4baebbcd3f22ccf7d9089adfdab82d014a72c1f90a534ce26ee853cc915338076b61d75bbaf0cb223aa6d2fc83e4dd53477eca5b25fc28277c7f3867846ab69c002653b4ba23614237e33055d9f86618262a7f6f75b654159a7b276a8ab076ca1500565c337d23bf0ce8363b8edc041c4d3572f9fbe1cc1bbf42302df6516ec0c92c2b35b03b11d1ebd2e0ce91c59d883b6c4add56af42140e7932b5924e217308ebdafb293fe42048d9d2c904de14069ca9aefe7baa58afbc3de6bf0634e05c46384391c520993cc5c983b0767279cc01965c1e49900a19baa0aa4aaffa4552d0688fa0673ce2a6943ca4e7cb1e4beed7bf042e891d240f9b3e6de976802135904177a654664519e7fd95f4b261113a70bf447dda546d4e079254edc394116a96d111ab79794fa93f67e481e29dfa0d1cd92c6fc03b55f65a9cbd6466e7a996e9a940dd78f9fa47bf8d53227d124c1b079987a623b1898fa3301cf271853045100a0d0b200f260263ded4418a128d79d563ad605d2a2fc824b02de8a1fc06c83b790f5a29a4c779f4c64d2f127327773a55794c490e26a6e1cd305c28b2a9cfd5e63e41b88b1b7a395a1ed9e3e196084d1141bd6938386ea89689a011c768ccebef246c7bb129c8d378c850cba211c4b44e2945ac87c326d4d056206f5aef6d7e499707b621963cebc3e68d182f34b3a90eb096f519b4b616fb9bb28ccc6aaf9d1d6b710bc425cd937bbb57666ed123c4ac8a524d09e3d884128d701a5ad0bf6a9d97000103f3935e43d57b6da3ce07727f96b0f86627575fc84f4ecdad35ba26852ada4b510986d699330fb8b8cffaec246fb1d9e2839dfecda16fa4a8c162deb77b76ba72be2c1d208f4d83c385e84b8660ab2e76d379e9d46aa93e38a4d12fd336e7f0bfd1b1c273b9fd69e775ee30935c2444367c1488519ccfb9dbe233cb3ff1146f9df21ab5eff6efd547ef35d9918752b569526fddbac05e6f624b262b56ed7aad215b61f5e1d82098518f866663396031ed9c730b8dd4c3f1aec4e589617f1af7a0eb8244a03454856e095485d9d54ae13cb26c32cbfa9ecb18ebb89df1e58205f87983d8cce8d8467d6428591c4bcfb27ca73bf046b20c18c24af7e5a9d7a5dd7f2fa369a69cbf9fe45c2065bd1c78e3ebf59c0c1bf4e5c6cb0133cad88ef9f331e7372407bebbcac8be69e6dc2fae664359846a70c7f988d063d50d458a6f7fd273bba06f9fa934b96ccbc2a9d446b6215882f38603691a2004acfd64390cb5d2d9dcdb6375c7a6022319f49a0854104db5ccc657284ddb3e211a9d1f18ca836c7b99af86c48f20ae2e56dcb1f07a8f6e864eed08a979b4f2a005d9b92b99a0e6588210b0df7a90ec699b73d0d51e92142508850f2b06378b832d4f4b25bb33fe0b0a24baddcf69561fecdb8f50d0921ccac0eeaee4dfac362ea29d61103be3735377dc0b0188899b4b13dab985ba24e07112764efaeb6db0022c97f10e74f7c0fd3bbbb3ab27c1a831257fc20682fd2f9e38cc25bd62e88db9ba83866bdf68f23fec1b467ede3289786c24f6efb9de8a3affbcd2ccc04971fb835ee9255ce2f6ed8a96f48384a8ac3e923d60ffed864302202a22aa9f7f7576b0b199b7deff6f1e933984710423ecea702983cc2c331870c056a648e7da22bd18ac3341a9ebdd960c8af32885087860bbbc01121ea0a4ca6bd8becf182fa0b2a73318f77c05e651f4ca9828f9a0efc4f3f4cb22c62143286a76217d4819c24d10959a2151a3c6548e48785abf754e4965ca3aa27e6064729b92d9887c869c911d44e96c64ae7359f0ea54efcad67db7df9912e98eeb8869d403d782d366ae2062cd0ab7a6351d7216a33af0f9f400532fd4e1c4345c13f467f8063eee511838c5225418c77d1a55216a9c5d44f46564d7843a9eb275fcb881af152d4d5396a0d335ef00e61a393068211a9e51cbbec74eea431d0a00e891bc8b573c7c2d0a0643ae2e0153b2b87325cb472d59eafb161dd7fa3eefe8ab2afd9982007698a6d70a3ee4b31660d141cc0bd881d1e391993112edc0e31623eb710fcdb4b922f4d5d7c84d0163510cbbdf582eacb36b76235d40e038b2c1172eaea85f4473d171176383ba4a9269b202266470427a195cbff23b760be4c1e68bc3e1503b22c7492d20804d3b3ce5226b77335ec19437d6b2c32b30c354b758bc98b3432deff08c0710c84f89721f5e755831e8e1e71de55c3fedbf3be35db16299448a2b660039ac8b5c9a5e165d69b7bb1d8a16bcb735bcf59085f054506340101e8533ea85d17be3d1f457b7724e9474f0c976506bb18c503c7aeb6ea74f6e8b638bec65a88ff460e6114e50c06adfea2acd2a22de4e1c64d88651b4a7acf0d7e9b1c1639b43c66ef38fa994b7a9726dd582abba0c676d51e67443aa4a2ee8bd3225111086be427efe2a36df275ad15e5d94e412fa53652ab56303e110a372cfbb969f777b962a2a0d06b95d6388e56e6f72856a5711878ee1be699b8f4fddc1f3ec7458b86db8f60b38337ca01129e65afbe7171260ce12486a8b9c8c0fdf4a025f8d6b36c575e6af22f23ddd0824d75dad884a621cf3b266cb131dd81a7dbf9ddfc99688c3f0bd2bf10dc3f0f514c437252c99d12500bca96d67feeb75aed7b6d3dd69b1852616bb4e656fcbd971a9e5ea1eb6df264a2d1bb9a3c18363c0cdf838bf038373e44f1e502cc8b4b51afcbb35e80c019fea038377c4ed77ec2eaeb391a42e3bfff2364d833a0437126b51198c0bcdb176ad79cff750ed5fb10871707bb352040546ba1b5276d0b5d5e9de1ad7390e75b818436c020dc25c41d9bb329bacec54cbaf34335623a306ed200a04fdb040b0da8d855d39c889751c30eb6ae45dcce7e59d20d000e5c76b87d88612dadb17d55fdfde819153865ec1d0170737f6d51ffc92c7128b19d56c25e2bd9c930690bba6a05737b952f689c362cf882795f5ce0210ef9a386aa7c448e24c3086ff2a88c9776806401e98378736bc9e7706f68b2010571ac392a635e79882b87cacfbbcfe4554c29e49aedeafce3fed03c60e9f70accfb009ac830673be87abd9ca6ffee5bb167b3d1f6e768cfd47a690bb255b36d98e524f4636aa9e29214f435c7058fb60f35e1c05185d773dbc3a1b6b3c60b45b925f33d6c02e8999d4c35ea13d3b06413630bf309be2c963609502fe13e96c9559d564dd6016215af3ffe7fa14d45cb6a7649c9cdeeb30845e937d3db6b859896151a335530aa2540f2600a4805471d0dfc7b2880dde5586d9d199247b43dc44808cdca2fb4d763b54f893ef1c08858bfc902a3e13e230e9d16bd8102c987e1e85aaf7a3e9a481b3685911371859b22091f561753016531ed50c3f270ef6f740d21305c6913452c40648897da9d2b0cc3da0c08756c52b376226b18d5e752af7650122a8180f555df5a8db7a97d554a70fcc478685181db8580e974261848ec98d8f24a195115f8a6863fe5b987f23450cb178b76d36374e4e70bf06a7370c0ff609364e4d5ad58bb25c59664b66c400611887e1bb1a63c211b0d064df28efe417fcf4b82a13a1b5830f4403ea551d3f92ec463ba7949af03e34579f0ac6d2ad83d72ce77aba54939b0b6f7c5481ad75fd332f60750b4d76b835725d7f342bd8541456db50646af9437fa689bde07d436926ef2990577db989c386da448280187aa77515dc5a49625bbb2fcd0eeb7d1ee49b590f8e28973a42080f7df59c5dcbfd05a0e0af84c0a1815941fac4019fb661fd8b4956167bb3996f3788e512ddd590c2a32d751ddb4811295100177f0fdefdaeebf2978b3c68e281ff08086581096e9d887f3df382135c0099c7e262ee1a6bb86cca5c7551250e516b47e029d470b2513fef271ec2a14a97267b2386c167475246066f7eb9ba10479bf9158054f18df3fcf0d263efb2e691cd54968a3315c061c968423c63cb280c2f6ae648799b9b0b40ca927dcb54c723a33d5a5a6c3dfc4c6528a25310510041f765a83da9ae874516827b135bd62cf687ced254de038c935f74afb137c1b16f6237b523d37ea25a0bc4bcb357f718c916c3dab65984fc89cb73acc3ac272ca7bcb6386b73184e16b037f0e24a6981b59465b2314606ea7262105d375ba43f4e2f37a541291f5837c27c3ab27251efe4221acd4f3c21eb9497e6004ff919252073e2b85c6a245084f8d75175d52128e940adf8421011dd9f10d73d20b520e5f096e4810aecad62bab37adbe1860495957188e25d766f3907db92ea1650da4187f78a62586c7811f4fd7231655878816835b8cba5708e1202ec59a221247883026757b13987267ce7845d71f60bc75f9ea68b9aa27629f295b71414a1726f1129a79228c38854fff41029dbe182982ff29d2dae7acf7d0aaf9213dafb5f7d5863b57f99bb6856821af5e6ce92729d67c7e3ce14e25c469144de11e2162b9d7b5bee270d10bed214bdab09dcb304f0a3d51a676a373ab737b636b6f5c322d6d501e22742f5bed6b54ec127e9d365f5fe13ecc401f077e6c17dd99b33800af31ef8cf7bc62efaaa7ff8606b073e08096dae91ca084dbad2b7e4b3a80dbc69bb0cde7518adaff9f62a2c289512595a27de42f5c375fc5d002d651755bdf5269c62f14a1933bcda121f814790a8949e21ebbfa5edd67984c85ceb90958ee4859992607bec1d890cde1def288ea84b91cb96a93f2e4182d7ddd266d40bdb42e40ec7d0aafaebcd20ecb75e6d10fc63a8b63f98f44a18fc0aabbc0d2e5fb814ca92a0ba3189d6bf8eb37f149a60268203749a515078556d7788cc5b455b0e091fddd8141da1556e3e1f6fee9513d95873d21a2f4ee695e41b4ea8adf739c74e72649cdca56924797903271e9a752f18774d0c36a55a70289dccc5c04ec35318beca804d6c1d2b21f3cd1b334e0aa69cd10989df725c1947308b0c38aad018bd27ea6f1d65f66aaeef4566c0cc1bb4303209f422475e31c50029ad451228af5df422f4251e5679e44c527225454aea757499550f7a350ec33cb0061e1f25fae8b34b2c1ad37b2b5fd7818de8571b04358527b9bcf0b4b5a651a8d6af6d37e3f20aa8729e28dd73225a8f053c0b8d5e64ca8d9359e95b1d8ea41c22240808cdea64cd0776b0bd2de91ec882e2348669c3d2a889cd06e61f25aa5acafdb38c825d9917cac0133c168830d71749a12a7de7752612ccf0d002b474582a29c7cc1390f1f95a02bbbce9d77c93321ce7b32994c31490532696392c9678ca4dfbb5f4f2942b50f463855fb74475d2ac716d59e7de416e05ce3e6807e6019b19b2b6d83114bffef97291964ecd803d22a711c5efef9e52761045384f9dd8307def8e487c11e305a023abe69da38136effe674e5730e608e39734708a70ba4ef7bd5362fc083782b93810bbf11ebf005174cf8ae8762fc17b565f3ae1d9e3de4b04ca95b5b76c7355d6b20eb043efbda70e5b5ea2f336baec9734e036f8a007f78860f1ab0d5c1de2b5578dc3cef8f0319fb3f77fbd43f14e67e6da77d6787b44aad9892eaa8ce0fe0275f632d04e78429a13025b85bf546255e55cf3969cacc8cbfab20652d8253962c71716f818b8b68341e8d446641ff90b13a861187ef3b4a433d18b246a5411f838965a41cc86cef0499f87e59fc75cd1f96375d461c752bc45a00cea506da6dc89ed861723a50dfb54eb38d827dec84fee213ee310e3fce09d4e592a476813a2ee3edffcc3e79d639dbbcf177ffffcc67d7eeb3fbfd9f4bdc91004ca2ad47ed416f09010cc3e9b7dbcc83f928a91239388fcc9a13f667f80669678bb6c3d5fc368283614d43dd183dfb0567ee97d4dc7289038076c41ec8d7271eecbe5380cbfcfcb2bce3cebaadcf156dfd857d7fe1fef1b7bc3b6510ba235141dc65ec8227f42933af5ee80408c7db974a0cabe9015feab2c17413e846e6f392bde112c1b991641d59a033b6b4d96140a9fe5e27d46372473dd8c2d02febc8a9890752980e7b5897053ad2b90e88a197d53d49738de25e9935509c42f01a22464379c4c39d4b9875d1d80c53bfa13e3dd7110c506c9263d445a48cadc1ca60d4d7b0349ce1cda0a735d5432ae369cf0efa577824ab9fad595c4285bf3018cb86cbaf826565ce431f094ca453fd9f7fc8ee5faddf0622f4af3d3b93fbbbf9518cca9d8410185d61c3b19735db6c607fcf13747fbeb3671342371628105349d0cf605e21cce522d8dd9d0e37c058cf260e81c1e5325c0d118f89c76389ad3dcafc52fa2ea65500232b2a648e50a1c5b1069ed7f682ed084d2b714a8e02d5381647a2118667865290f90e0f7dd37a4be5f2cdf9bcbe5285f6659f3ee1bfafa156a394ffec03071dc0caf9207eab077b0652b766b40247dfb286d80b8f3abfd5e86c6f0c729a0037f48ea5138ee7f890d5d1f5ee84da026ad6f0e7340a1b8fe88779bf8b72f6d76d8749815ead77328c803372a54bdaf9aa154bee6574fffeea85fa982d72d44d01219d8677c19891762a43a44f0ddc184f5ad8cf6bdfe0823290515ec5cc45d37cf49e2237b3b1a422d36f3bd8f2ba8939060c3ad054e409c949af712af5bdf42ce359007d53be4cdf55043d95e0970c5bce6bbb0f018e0c32d863358af94a168fa7b835570632fa5d1fcd6ee6584b3c567e3032248d54f7e1e825e442a0323c017870532726b4e7e655e4630446a1512361b0296616d85923da39f900a1732fb2d012831ca5e1d340f5959796368c941d671e3972d575cfee478bec2813d4686542d611c8e7db5ec571678e1a47947eedf1eaaa8e428967cee59f633316eab815302a829d82e6c90584822828562218fd39d735935e97a2cd6fb1f58617956e05e0af0bebc33f45e86dbddcbba272b7c2e2078c8cac19327d09f0dff65572e9bbdb2724f7f9bb75fb7eb704e59c1844bd20d5398e46a8c4439ee81cd1adbdc280cbfd67791bfec66971c3ebaedb193fa88517067e7cadb39bc19e7ea62435076cbd939eec21a8d95d34d012f9381c332460e389592807156e6b3f5eaf60fdf4c8f38964e5d1f883442a71c113a3ea5852429e24b89c4feb934e65b6f30ff9ba8b943c5f932ec9126b4843f27c43d3f4b3d43d77cb9543dc744b010aed681773cc07111d340a71852006737dac20fedda2f07c5efe5518fb7886e61764c122136bbc586becfa2a5fae37e917d885176223605ec3d2ac953b635785578e785e6bb261efdddc1b589fd4039e2a373899abfbfe0a3721adc5e11d6d0fafe176ffc1badd318a9ff8db8c1cda5cfffb989cf54a0718d9552fa64cbd9c38563eb6cc0b555470db1befde98414c092353d814235f34dad3c90519e5c35c462f4a0008df96f2cb0beddb6b42a2678e0aa24fc860dc4c560198b7ad0e93952deda4820833a170042d6f6b11c9d3260f414dace2c7a1d0056b8460272874320903d92338d5df3b2e54d3621164d76b2e408da2daabcbd12040da4285fd4855db2b7e7fbe708ab5de0f3547392e0ce358e2baa21de911a16ecd595e40dd270eb7c71d9e2ed2ba5765ac8a8adb23c91a15753c4d7cea4d7888a2e18de62d4ad399a61afc61793e4967b75667d0bb3652271e9b834f885b523b04b8e40163d02e304dfa72727da688656f5ee657dad79403f0ed69f35e8c9c586736c98d4428d94515f5b5b8707a24ed5db3b41d5396228df7836d629253cfc70ada829cdeb2e025c5523eddfcca350b599f95420074b55d5b7431d8812a896663dfdc500192d129b4a7b107a880c51c294047d88e94f9749420f1517a754557272aa294efc8370b1812ba248fc80a0aa905390c66029d6590e266a2277bf512aad739afaf5b27c92877180107667fe069ddab03ab389c4f6d2eab94552055eae676b588e8a12ba04678be1e2a62b004542f30ec620b02dc1cc890315d03106864e305645119b96ac4a0648b869a333f4f733b00c5a533e683d4c4d1736b9368658c1686630f24d81e526d86e7dc3bc491945abdd955b552b75e517c2a32f854cc03072fec942fc19973547b0607a01ae76cedc0301d7ab4c01fbd4915c3464a10bd0071baaf760a33ba4a6add9d392a0a0ca0228d073866d7d4e29d75eb563ef9ccca03c944fa4c3735c00d921f4bc9b0184e07b716332c719795e13d761422449045a83000eb875c92f3737d06974bf3861c889eb1ee90065af090d7759301d100dd475f89837e478431be91f7c47cfeac64e8ef69427233efec1bd73dccb81ee00f2ae749cc8df6066a22b0d705a852027c69b9449448b522563f33828c312a537e5ba1c9b198c0f626764d3843b45fbdf7764c07d1889b8784063f2a890afe977eff22ffb7070fb70fcf33ec83cccb9ade3efda2aef2507473c74f7cf001e38c3c70ef0c2d5e953153fadfc7376352fd92d4d77075cdeb6c16d81dc76fd6de2dc4b93f857b7d570dbccbd4dce9a0d7bf94558b289651690a7106e5b7943423353eff33bbb58992dac567be8ccd71747f81a9ec51e6dee3cd363cd5fb247035147885f0838081a6f0a1039197f67aaf8e0ef1d927a3a26d01a2d123eb9cf4b1e25b09c845134d82c37180b6e5921505b575ba211aab79b51e9276f60ed6bed90ddbe107cedaedb0e73169135923e93b1a4ef7de76d9078a247707bad5383123a3f17946256d916c742c0acb19347824b4582f176c010264ddec9bbe62dfdbc8bb67445f5de715829f2a9eb57a2cf6308eb22d88bd004e9386ff42d1854d1608b6ea535f4ba07256055e5da2e6b2471b4d291dbdb364a9bb62af76e746cbb0209b7e278ed9ab8d8ca951572db39b7336ff3042eda7c5307c9ea2c9841daefb650ad01d9c718e6d26d25432bf3cabd8b94b690c67b124edaeef1954a0f452ef13da9dcc3e29ae2994ee51e99dd818cab7a8f74cf26e6a5db33cd0d42b5ff4a6bc4ca723df130232ea56141543bd141d81a5434383e80aec6f897c3e3ca4d0de24401543354f6bcad10d8bbfdd3b6979104755e00bf1d57865338f126e6b93d57797db05e3ab7a9916dcabef1cc8972f051faf1da6fc0bb354d86d6e0f7e86e6af10fcd023b94f7de1c94f3c3b08cb8c7c2e1d593d1efe78c7edcaed9f880b578ebde3f46cb6b7b43d5b7b30c2fb7fbf368f8933b30fd46ce830e2e1002db403de16a1c48595ca4bfd927274c0cc6bc2fdc4c8119af73bfb4128c73209909350180f8854182deed3bbe12643449add71c60236ba4f54f11a9b760d4d0c75e1df66904d0af035bc285ba07e9d1307cfd0509189a4c9f24d8d75a87514ba9171d3d27f92e5344f3e66a9fbd9df142824272a5be0b29ae0803702aad599415741ca67227325d8ce6083d9b318f9975621b47736eb9ee6a334e543c58336ba9ed6066a19cdb5d74e5a5d3d79b9a0ac31a809a616e03df879ee122d01e174ea265510e129180aaa185eabccceca9e6a62ad2c051d67931d9573368391e1ddc7740c1aba39810f9b25b3267fdc15dece08e7518cc323dae9acf37e3b0dfe52ce81902754f2d84e96152e5fb31f5a4b46ec08c0435918d0c80ecbb195aaa5056cb284fefac376ed1642891668f13b85eb9b449fee106f82f6af1d3ca8e23ca4794489b169f648ec28cc5bc98564d5437f90e60034aa1a743ad44b130043e20a198cfe9eb8dc52bb6b9858f61f83d6d3aa800361ea26c32b8c007684416c54b4c8d7273ed809208d413400105738728ad5012c6cd76ecb687446a0e701e61e92b6d20f4cb56e8b20c9375ef1d0ee65e8d25b9a50322d5739b8e5bb86a3b645f638d3fa437ad2fbbae0a26805dbca57a456243a14f29b94871d258324fc03b4b595237737868e0f44e73da0cada8b9c054cc5d21d72e073526b2b5693274bec736f0a6c3e0e493d9cc1b72f7ceabd024fe607043234716367fdc1e7e3de8d9784b25bc5e9c1f3027c80f5de0b30b0fee968737a1e9e410be2920df66883935c9840f5a28c373fbbf7a6e3aeef42b888be56c35f8590f40e93a665eacd409785007a6d3f97444827440262d357bcf8b8fd55c2c4676b78565aea15b90b4eba134632eeab7bb174d58d1c59d5315865325971b2dbd3955cabd3fa0904cb6b8ce87078e5f67e820cc4a71876966a28c888f5e94378795aaca1fbb9553ca1806aad9be9c08860aba28da8b7d68c68790543986193b846271a166ac2570099b46492f123faef0fbe4d9c6f9d1c65bf4df18619f131e5e3237718f633af67774f41afd50efb37ddf95bd4acbe96e9895c9655bc37e7aaadf1ad48dafbc96c077db6181f77876b940a2e18a089eacde4d39353774b773adc52fa9b7a000d6392dbc5e71c0ebd999841c22214eced6601b6b80233461980ab51fd50a0e86ce80a405194e7224fcf59f466faefdc6ab76f4876b2f05b98b5767eda7ac8a302ba9a9dfed8307615d2d8473cbcb9915e0cbb67c4ee252be23bf7642278f8bc070e2cc22b229c9a1939d6cec473405499d6da6390c6233d418a63b362ee8af95b7a747e51928c494d09418c4e62d17bd48b406141f3fb24e8851ee176fc9faf4dffee5ef46a29fdf2d11bfb570a05f92cb4c7d8ed48693d59f58b6f7ead97d77b4bb71c1d9c9799345622ec5d7504effcb6a05ec164285f5e3d4c747a1e290a08604d13bf29a392c5159980eede2020dbfe5bfbbbabdbf31f87c62ed1a1966ec07ae35b04695dcb185cbe6e4ada877ad789c5180da8a57bdb354389c84f1fadb5452b828e8a3e3a64ed81e88d3cc895f83dcd545a67745d945a4bf982ea49e03ef522822ab4bc7e941f1273d38ed23db5a2039ca708602ecf84f5acedd96d77f3d766445e79137d605001a8451f73c8f945e82efdd2bbd51ed8765cd9d88daf00ab520f9d8520eda652704d64841e314f5a5fc742f9ccc36b138a6312d763569c5e84130992432c409b0f3d477e83cdd1ed738eef55cdc3c7df5390c3764ca6c0efc1fb59e02c396debe2b31c51a2a606a5a2ec9fee7c890a13b8235c7d79717c506ef0c0cee452cc2a70df7109573d5e01ce3330ef36931b27e40baff0cfe32af0b38e9f0c2b4c02ecd0f1e79a28d25cc0508ad2d7cb633130b6e89b7a9d1db4a7197bf80ce5db644aebfaa5c72f7552ae46e9b1e308b54b85d576c5582870336db8e30d255ef4bdab258b48fe9eaba43b13c012b16c60736b31682849edb55706b57410071a63365d58774566e60c860dd673a13a7c1780ac0a3754a41248f9d2ebf3b031cc073781e10a6c669c07cfa76ddd3cb12f4d33b4e7536e7a696bbe507c8420004824af50225497e3a3c5b81ffe8253425b09fa62b83fb40f3d9b4281b9a186b72fd1076fa15d521bbff68cf3e82a3d4b326605073d8cb9c54c063ae4eb040f6e0313d6deb3b9ab7ce1d907e0659c213a7fb310e55fafe6618c64f0193edb17ef2ee5b4d38949e19f6987305fefd31b65849a994cc369bd2f1cc39c14997622b0f187bdf6183b0f355248d556f627afe51125a4ba5227241af69288b10901dd4a57c4001c73f2f5c69051f9f71ce2a56468b5da397b585e258548b042ca1ca90551cd5038b2f9772c8a3e4de727a119b2e25bc0422d31fc93549e2c48565ae90855c67b69fcfabd13559e67fa3e9c6eefe2657e4dbd38d076f6880a60fc20bd39d8320510a4f7b08559a3846bf6ce1ec87b0bc532897b4a52e28af378a0bcdd48c0394a6d630de2632f9ba92da1c5f16eebc95bcb323b0e0b1786797f0f9aca26edf6a107307d9d5ccac2d09a36f09cde318a0b8a0068e29449f4542d49f54be8aa1df402d328654b0245e42116f638e5e5a6562c34fb9c129e357d39067cb5221a5e6a0facfcd306c0c56c4956f73c684fbb37a49bfa4567fc60e8652adc1256022f7121dd11a609f946e020b06e63197a826d439d59c4635e6f63cac266990f10019fa88f18f2b278704a398455c39b2cbbe7a8490d76579364579f206eca30c691fefffa1bb3b3b27be7f91c7cc341e42b51ea46d9ac00f349ad337ce4358ca92d4510cb7b18a6c74725de0419e4255fc6c744cb5bbef615fddea27b7d11a3685a50b8e92d3d6ebd4fb3715aad175e303cbb5eb50f3ec0d246fd405c18b2d036bec89cd7264e0129cb7d07f5268077248276082dc0b78c6e773c73ab5985f96035b8aeb69bb37ecd322758e085d2bb6999f0247d7486eb98891de79ed192bb79dcc31bc06bdfb72635a1b636494fddee3d54c0a9f2dc768eb33ba89aa1ff3ae2293c4b1e3387752ae62c0660c330088b126ea53894b8fbfbcc2023e52e8c382b1cae3ad02e9393522c11ad603a8f28ac2ba3409c39f3e334a3bb402682074b9d1f3e1ecbdca6c8e3158bd20aaf49de16723290bcebd749cf2ca7ac3953f5adc3409d5fe0b66da6cff769b77efbc8532e0bccb380818b1b748e9498b110815016317b08eb7596ce868b67bd38954ef63703b736fa570c7c9cdc3ff837fb17a3831e9c811f002dba158f690254410cc2ad574a8fff5c89ea6f931e248c663c46f35c5695700661c86aaddc7d9aa04703eb038d2597218a4952933291548d1440bc77bd6033c71a9b4b4940db067ab80078dd3bf2653848464b3a1656005084ebe2bc339653b87892629e7ceace1f46472c8f12f7374aebd406c3323c82ebe985669260c8349a160e3be062769ee9044af17acde7133b5d0b3ce239b1f1da0853abc14728b0c785aee2d054d1c9c700431bac19f2aa6386e6296ca8ff4f20f76b6775d762d7699ed17b0f999b15110e41000dd330add9bcc0ba1d1a2b65ea8860d20fd5596ecb43977246e94af672969f6d9cf0e47a06f0073c8b5dc76c0c1ee418e9bbf7352d778b7154b657d7b7c9820459f370063ce86a02bd89169c66cf25417fad23c7078dd0ae52b6e1ac3306c48a99c4d857947331bfa77d586612806892995d4eb3dbb9238531ed6addfdc33e244fd606ba2b1fa08bc6a49343b8c7ebdf7a44637eed38f1b22dfeb0eecb9382f1c2be011e5e569eeeb8e9155d93fb7025a6ef7f94fd309e0c5213a750da077eadbe52e6103bd03ec7be995b9f5a738bf0bc3fcae5b718e4613952b601e7144acbd5333932eac1a8e9f607ee4a223e73622659ba8ce766442b03d72233b7c575ab6c87e966851da2bfb6082d5555ad48487a38dee36b68e72d79bded9050920e0747147d2892c9ccfb1195f593acb8e570e29eb945f40806119c9df8fab43df08d4c3763dbaa4491d0c4406b439481d57d38103ec55a605c2dc9645bf243fa8aa3063fc362e49f1509e2d06cdde1eef2f88d2f208fc363671c4a1b3be14e7821d5bddbe651c804d8ee30f787d39d32406c71d8417e5f6d083ea08fb4bffda78b4cc81751e9e23b84c24e7f649b431f1ead164a18671da32e9d34392def4f2500f8228745f033336aa1e7ad064709fb1e698f089dab017ab4edac81323758d4ac924bac5959587541dc562b9a5ed87b240e800905b15b39ca1edcf71b2563665b4778ec4fb6c9e71de59c243367c5d167f60a3f231c3bc823b3785cc3153159fecbb0f63a7ef7437968a93ab184a42cae19cf149ff55800d25e1bdab7a549a81f5dc89874fe0944af139776e047a23bf06c5fbd7f86cfe606fdb4777cd773faf369dbdca7a13f74748d81ac717cf5e1be0e6d97df038e65cb667e95f651bbdddc1f3676783f21a9576e8dff496f1c6c785901c6b0ba3fc0c1cdd74f79b235cc9d871d4cb50802e73d07499101f5c100bc14dde33e968efa1d8ed9d10889a1373de693ad118ea821132293057d3a6c3511d5a9edbeb6ac691a93cae60e7d8c69d837642edaab6934a96edca59f44e683f62905043b65bb9e3957d20ef3038639735e52d438db099b5a770d8bb1558de7177b734b1125fdd06c9396262b65c5ae17b58eeb789704c1b1059680b9298f6e9b47344723b15c3301caf9a2e95a16cf829622a11c0f2dd3eda84d6b2aac52572ddc3387e3593e2915ea3c248f662268a7009a800b6da7ee02d891756bd2d29c616b3cc25d658a03ab7d41fb831d6802dcc339ba60d39221bd53bd472e14e8e5768af8dcc0f990516a09b6e99c6d5223269581c1f35e43abe0f5ef12114d99f03cee2bc18dae07aa6a7b125cf177751f435829b10c5d846a513a25fb04fb563af11dd35d40b3ebb81ab4d5f3c12607071a3b7fcc697efcd6532cb38533244f9562231194fd1a635305349f2e307efe70ab6f0c5cc7ad36b58517d6b0b82b872013b036bfdcb7d56c0947b9afafbac4056e49af7d91ad83fcfce0e71f27774cf6bdb6199e098dccac44870aae0c4e3f686db3362602985cca1b883f01256c8babded35931559becf9605b5b10838c1297c1190f857e7fb9b4644518834191ced3e692def6fba0438c07d6600fe49a73714fd80a8030bd893c6f9de8dd44616e5e464307c79bfe072de1b0ab82889b481c74d2c7c9233b23ffdcba0e6b9217b8eef70e385080b5e8235ea3a06db1d7e648c4eb5f8de7ee109eb22279a5c241d07a3eb20ace0d77d24ed475abed6eb9ddb2d3759d7f67c7fd1f3beedf9c1ef793a44cf5bbda120fd931db3fb967b0732416fe25301d19dc37964a20b9c1361299927fe9eb62c9b88fce167c4d92181344192c43701299767f497430d61c61007e57b0fc9d76d0e899d48a58e7fbc5307685a7eff89dc443393b1461678081d870acfee11544e826833b622a7282ab911b68424e9468f4c68fbbea43c79b3910f3a877baba5568f862cc7162041a427f9b582a5e7068b9d33f5b5278fd4ee1bfc59b3ec55ef3b3c5865fa9c571d19280d6e7d22a8a4434e269f744884b60e64079136f628e4b402de3befa2bbeb02c1280c5faa180314cbc6e9deb53acc8e2e2fea98aaef6afdba6770f946613243e881fcd222bf1b96e9e4df9d263a40bc73977c7a1730aa5021f1bd3d6294efc5276c79be478ca9b5bfcc606e591c9856764e86289a6e6558e99259a23e059975e5514f14f5c48e2d567fb5bb84b126fffaeee2d0b63830b67d551685642d32e65af0f68cd0b006ca034c4c959370815e9b77d58cd1b426ad62244c8672cc0ff19fec13d5fb719649b376a9af61f83560ebf9a45b8c844b99f9966c77237eb4b80f95c2642789a13d543ff68374652df1718f42f99f3a73220fe3fa1c48845fc341a66a6c7d9f70a5249ac087d98c0d55542a6f3aa3c7a8d428d9c8d47650e78738a699f30ac6fb4adf3eb4636c2e723ff053833aefc41a75ec29e10cd587b4a36f19a4d1924322977ad08a75c34d4426d6cf6d3297aa4f586231a96ea2507d13536a271bdeb4a2507d0870a19b113f561f7ab850c986373b7da18a0b494e6c5fb1cc1d904aaf3eb2d4bef7ccbdd3b996ce3ffe7313875f175197a9f93cba51e1601db10917a71ce7e1b14df5d7d599adf8ad3d1f81e561c8a5666f54a8506546f1e43e876a811ad52a2cdd3f8d38713a9c2cdfc3ce5d3491fa9d924f6f92e75aa319a483027bebef1e1d85c3d940d13e879b7d4d757f55953bb9e4b74ea3cc7bfde04cf55ed4dd075eeca21879af5ee684fcb1f51e9b47e1c38fb441bd7ad91cdc6da016d16a8e8dd364afde932676aa1ee5fcf53565b1eb21219408b58e3a01fdf012f0e7d77a2db2912a8359bfc60cd55c0775ad77348d1935d5cd4378476af23f3c14decc372fe1a02fb03587fa2d03ccb438d216583c93f2efdb0e3b40cf81fe7d080dadc19e5af24d0c8ae89842aae74ade7c2409fbf38128f3bb15fb323ead482d3d28faf6794d0afd5ead064c2398068d7bf8a41728fdcc57dd5497fcd92a88f0bb77ff301cfcc3e7bc4a917d2f2c3b3fec075c6e751cd654c04123ab8cfaf7b065ad62bc5d523b9cf7324c189bf4e9c8b2e3917aac9a91c8e8f147560ad93af49430c0e243ca959026bd7f34393c4654b2a3a928d379151d9281db54135e28360c3df55afc8e4a0b5d5f91b7b01df53814e0cd46ba1dda708f69c6c721c96ef5c69a45418fdefcd8e9716d38b92168e871a866841927d899af5f6e1ec2cf1bf6e37cde5435ad579f8e2c774d0efc393e928b7ac839945c26e41085bc32f9bacf3101fcf9d8a7ee31cbae45ee5a7f6970cf2647767e7b7b45ada32b3f0fc3982226a94d4565ad46f70796c35ae8b41eef5093e46914dead65746b9ef4b3ded0711e756f7fdfdbc9a67da503c31909c14fa3559bac472f01af18b3e687cd92f5f736c59faa8c6ae250f0c2a72e25bc934123be3f30bee464f6a2c9c2e73d99721eb13768f5f910b3b32620abdfd87b283e2b7a2ae678f81d87f17eafce308b554abe0b787badb866fe6bca2cd2ec9ee96948c0a31c2e9c440bfcdee2a08676836fdb24ac3a778efa08a9942bfd9c99c63ded59d2e83021feba9e915cf7b0e336bfef679ae8c70ba61627beba2116718e8863857ae5ccffdff57f09fdf955ff37a53f5bf4ffc1f99fef9e979fa13fdf78eb8bfeef91ffea0c78c969e4ab683d8f9df99af23c3ccf301ffafba33e4d20755477e371a459441d2c82a32ffa7a7e3ec8cf9a83ffc35fc67a1c43a4f52a9e8233b7d9fb4d9b01d180f0b9c19f66896f9eb5e48fc7a833e13422a8d017cd6ed74ee5d8ef5ffc275fc2faed593141a2b354e83e3c0e578f4c0e53de876b52bb269ccb31e58a47634e6b1a1f76faf23f6b957699a0b038ca5b47fd58d0961d6d3ef10b3fe9463e0747eacdf39ca1fedcfea8541db936cb64c78008f657daa190ee1e7ef8bf1109ebf26f939f579eabf06f2f9cde6a7ffc1aaa994a7b7de6b6f84ca916a9fab2e0aff55b09361887e1e3fe131d8a0abb57c729e7b33c3758879cac165aa2888b3ed12fe6b34f59f756b3cacf4c1d029452aba470e5f127076ece79d21fb54a3fa010a67ef8c8548b1a7a58328200553156c76891d1be193718bc6944d6fee734f7af52f4cee38d0a87558ab30d036e667ce0cf89e6d7a350fde4b57e5c716d9db516cb079f7288d99ab5336ccb96af707c1a8d6a48e3fd67b3e03d932c62086247be552cf649d4de691ad0df47473d53a37a842d3599f1a7165b075fe4e2cd208cffa136e567d981f29d1afef6eb86a9fc54ef480d171181078f7a512be036da81fb66f5b1791a98351e85837fce3bdedb0bc8945da0089e4d1749bf8b8368cdbd18e55b160f36bcd5c7045ca8b228e137e551f5746fd7bc3ed1bfa6aa75c46234192fa575cb11961b164066003beeb6d0ed23ad59bb2fcfe90bb196d47a17ad3fe8ded5597858233b856c9593dae9d606569f291a54edd57ce7b75921468652c40f8dcab5065886fb227340fba9c3bbf655d3f91f599d90e08949aa0f8d185f26e1e883a623fabc808c9833d2cd99cbd4036ef1c4092f5fe5554b4e2dfc7adc6941276ef68f64d07ea8bd13ef85fad23adc8a357d13fda068ba976cc17a90d0cd3179c7f328e63d1a6423c4f3d130b6fdf71e7f5847a7796ca9f7835690f2362546df75983e3f8e49d19e47c55a7f8fa1072584a3aa42ddb1db35a3325a47022bcaa7e8661569caad0f27ce6d48e13b9f9659e45c41bac6fdb71a09360fffd5b70e6788dc6355e4b9ca94e1c8a6e8876941e76ea1ef8f87e73d1b01e62468dddd5558c767aff4a4fbcc9172b15671661c44355e7278c8a445aaff2353b37a0d827c8f9940c73c19337f1c05b581a53cdc5c38aecf78cb6dc93ec29c6aa87fd4c767b182074085aa870c1d6622d4c9d19196f433c8ca43bd660e1f8bd47c121e7a3b7edd86063ef8dc6640b8d176aedcc35aab503f1ff3836e4a1d55c1e31dd5f90779fed39e1da50fcd9fde59a718c6a706a9e2aaae9a6c7b7ca87e310f0fc31196266703e078cd9bf9e7cd309c0cb77cfc261b1e63c2714c2bb6a43c707dd8a7b4e3aed7c7b39a0fae70ef15bfff5216299873ff2b0ebefd74452448f6dcaf1e14e5ee8114e5346ab1c89e446dfe63f2455f3f46e725d389d98b0d048c3f37b63ccac62b8981ffcce6ac0e0973e8d2b87ef632de3639e1950f3ed4995398db2a6488f959756e8bc3c1478cfa714bc06e4f8dcf3c576cff7b9c2db8cc45b6d44f0db66a99419a8094bd3a73c47adaa588a77db4de0b6085960d6a8c3f2cd419bbce95154ca4fc072b21100ef37f554288ab7ae3de86acce3e67d8e5accf6b4635c8a2fdf3e519ec72af7aedc19b67505555858feff3147a6a87e3a40eb44346950f44b9a82c609c2a6cda91168fd4472ed6ffdc55b8a6fbbb67ce37da1df1bda5d9c5c3566dd6807b2586f55d1fe5859a9d6fafccd3ee74cbf750ece1f1967036d5acf8b3597b0cd556adb96b4b26958ff516bd71546b91e2f658afea5918162a59ba02a61538930e928828a4878bdd8f8377dc4b0a96516775e063f5b048684e1fe65013af3edc4dfd963afab80daa2a5fdbddaaef6b926c11cff4b0566a38e7a94922b6663f05f9c8f0d142253532a3935ec1d9371c7d3ad227450b4a4b36023da52b763a2ceb6c773fd759a09ab324339c6d06372fd4ea631816d17483b0bb339f9416490679d461af6bbcecbfa9877e0d87ed7ebdc2bac9a1724bab7474be93ad478bd2d18419765ad5238ff751c7c4ea280e1d0dc6ce60d4bb1d0fc67bdb2305883d8821b488e4c77fd1f5e77078ec33fddcf25b480b5f4715c6fe4da2214cf244a5b6ea1fbe2ac1b413366f3f6b4d9cd348c6edaaa641838f077e9f59e5f6dc5161e29f07265966994e1d010bbcb64c5f0ab55a8dfee281d79e6aece2d24ea9b36dcdccee860d964f089cc604c6ec7059d1eccef8f0ea391dffe19c3e85eac802e37bafc31beecf737b175f74f8398c67fa907c1f760844ea47d8e1be3d2f7296fbd9ba96451b2e823e8d80216a487af253f3956a7464142ac317cdbabe68ce375bfa7cd15df57a943030e7139f3cfbe373a8da1147993d560bf187f4d9acb7e2f0f4d7023dcdf35badd2eea382dff698b0732b7de1fb6bdcb1a72353acc7a243b6bd2cea707edad3193f2c9af8a1c5106faf2cc63789ceaa5e141c98ff9ea603f7e8991d77ac2aa25a519d43cb1fd8e0cd74487d49b84e3e876107dcc4c3893f1fcf53cd6f378a82d1331526f013e851bf84e163bbc2615f11d609a30e5ff544ee23998bf485591add3ac77ce8018fd86eabd228efc4ce68097457fd3cfcbfe4fd8b57e258b6008cff2ba7fb3733ea8592a720d5d7712521222222e2a32cf5d68a102010124cc2b3edfffdb7cede3bef04ad9abef7fbd6fa7a66952439efb3cf7eef7d68c67cae3d0cf090b7e2a472168ad128a2a6bee9faae4863699ca9bbccb38421dd7039917c8309935b2392e3f409df3d792c1e5192a79f6ad3c448bc9e3ee112a43c1127e3a4e61b63b15241685965e44f1f86a928c805c945c825b09b4ae7459d10b4c6498f7cefee7a09d579e02c25dd864bb96f83bbd721db9b34115d5076f70e5e87362f5038b87bbce53240ab345c87a0556817357c7f1e0056e12e034c82b4150d6ca6b1c0305b9277f83f4436db73d457e53bb8e80d37ae3f8f8c890e7e37add5257e6e0af2915429caa07f5d4dc4c04e81b3ece433284f9e8815d2eabb1b345a9243db32be418f42e31591e3aa2cbae8f1b324e751685a756313465e6540b60f130cbdeb6a853a1251549535a6df41f7aad73122a2a18d2196b38f3b43812e8dd958c223280b922e1af4b6a243b056f3b25a14512605b105a49541c0a1d85ba22971f9c83ae3541a43342d20c1a52f517a3b42292b852808db7a567233a41ca195ee6ebac14162a8a7f43ac36bc01fd032c2e7adf219f273286def61f845f0fcbd2bdd20fa20595916a44b70c9ee6cf0fbf68693838988e64120dbed0668f87963e70d5c0a5990ae28fd2f562bdcf0710cb12978d58658e4576454f062a0bbf54db62b34e7e228873add6d8d12e794d058fd5692509ba4a121df83aa72857c21aa71a2fd2048865459c0b9e92f6be802b12cf1b5b4c4b568af9a9f6eea5158899634aa9092e1516882fbfcf9b056e0951a6736f9fcc0d69d5fa179b15111f9deef64f3be05b8a2eb6b7dd6cab684ce48e27cda1d6790f9186f7a254878d3bfb78d16b91ea10b900668b3b302172169827a8bf9860ffc4c780342506f19c7e0bcf0b0386e802c2be648c42e92289c9be16a634ec8fe1a5a7b8490d3dba68de8c8b5148e6760482aa1e9efaa0b49addb0d779e51353035591de1da4254af3ca90352ad3756a82eb82b6ce96675d0970d8fc15c76231c4166c2ee1d787fc8f7f8fa9e5edfddcd8ed1aa301e91d1a624655b42b326eabcb3e6ed31669c54aa79d18daee4ec9b09cb53ba5ac22930c4dcf40c49624f90eecb47e0d0d1e70f030b35825dce66dce431cb18287cee97845a790b97c764ca02356bb5d6f01ff2945c849f8ae9a3eb4a295d1f8f1b6e66656938a991ae92f31036b6d5cbf685c66dd7f738181e8d215584023a80d73a8eeb51906ee82717260738a696205d8d5b59ca5f235d5645fffdb28e7498cb07f68ddb95743be9b9a8ac7133ad5df833e57c894bb9af4663d1bd0d43ba1f4fcefcd5198dcffc62ebaeeb2155b9c4f0550dd65c78242585ef33901993430602825ee66d8ec43102649ebc5e0ab2ab0a929bae35187dd81f2b489f6760e63b5b4b6b24871ef25da163baea60ac2e39bcd8108add184b68e05a5bae6218c98306a7597ac53e14caa2dfc857c0c3652c52a7a6e8208ee86e45be1747e27a4325cba27b4e1b42c3110107b58d69e34349e3814b75790b9c49ceb7946b2cd09ccc85a90252c946b122bac97e5b82e488a5d0400505388db1b86df88314fa19077439bab824cec1beccde09f295e6909a6aee46641a25c4994eae1eb0e5a0f5b526a115086fd4bf035f696989c24d639df7920648b773a4c51b00d49a94475deb1dc0d803a2e04bf02ca94a5b346e14f29fb4254905c9c0c879fbca570f097d1b82551e4a3df7f295e6bc4e7a8cee777e54bea10431c71c189c316a8cc5e21a565b1309861a7914b539fed144be2fee8719c5bbbe4d3953b8ae1be2c444c0d66d1419f273ba999252b813c97e04d3b0e45874c29a82745fc4fc508819f23370807b0005e22d9ecfa620dddee3db96207dabfb7804b6a55500ab5d51be42653cbaa2818b936489db6a0339be4741bee0a37970cd224765c9338f0acd05d282c725fe6df3e7bbc8f303c6654893fa12ede3bd856b272f022ee88db1f0081c347469853aa3371199c63b0d83f7dfc84f6901771a8dc903193d3ddb36665cbcab1dcbe40c3421834c056ed19472128d95ef8b4ade395241b49c26e2b0478ea930690d5965de308ca8ab434bd28d8e8c5503edbd98d452ba465610f98526a43b6ede1667a8082ccdbc30658e8567393499486b9c61f03bdfa819b89734e69284fb06505c3b437b199a9bd09803c280fcad806ab17c8d2fb274eb10342d4c399410e0a876c6475515ed8c47a6849e037926240737b2828a96c72afe25ce43d2c50d469228a33cae9e91e7bb74073e3f37cd866fd97d20523ea3e8455c82074a0f123c8b791b10b3016c324decced081c6e401851be20c0dcef0ba23c83589024def261b3c2a2b997c8209c37584a62381f4515ee26a530e4584023e9f86e7823743be3f02b6922e823f33185abfa31bf6dd76dc082aa1f381c4424e0fd92772f459e8a027988bb7e0ba42f54b44b45d1216f233117a0ac05b8de49063c818d170c0df463a47d4ea2bbf3a9ca1712462fe5ce517c4603e641f85aa8c4e3b337109495d247dd721e56414da7f74427b1e1318ee321c3aa523a98bfd42aabab5d10ada7fa7e8c4f280aa832697910a79e4328b18b373b742ffad3aeaa2e1aa0bc9c23221d385f4adbc25dd1266bdc3032b97c42da6daee2a9ca25f2d8a64c681241b7d8cc0276b89d09d83f7bce448982fbe5de1e7463e5fadd1b66ad19447473e4a6e08f2dced1207ab189825b0332d902e9806dc01e1b7c3d1da71bd505fe42fb8687c37cef0b3d17ad53267c03acec8af1bf5571dddf4ed8442b3b8261c417afb229ab0bfa37cf13841c713ad875b35e9664949240d0a62546a0ac85d7161c917ba1e86c89ba3a61ad5f880425a154c05a05f03b7fe8dbe53368d0d18bc0b72897828ecbf1392000b223241bd3590a5ae2ffe7504792da2c4013602e1e13ab5cb0e75598c7689a1bded9074b815916deaa1eb6e2f2814726ee89854c7461531060ae26d63866bc6655cf09804a4313d3e0b8a487ae60c4db43357013d414af6a0fbadb485862ed9d3a68f6d0cdae92ad21cc23626a6c08d9cbf1e387f5ea37bdc706e13b33704ebc1c26a8668950ef44502fd10669ee1259570c99128c8df6036db0dc90340b1c18f61f2012e48a6cd9221265363d9908ea444ec440d750a33cf2d97afcf1469dfdaa37d81ef9cd8e177d991ae7e01ed0243b2d4f1a8af6eb3aad0be5aa185eb713c0f0a0f0d5d24f7f6de641e22979d65807c927daf4399781f5c8c4b7f6022c020010e52c1b4a3407f6a03d4d4348d9a061779f75d977acc21704e951e31a78d540ba4df7b384f28f8c0112aeaf7e0ba80ef67f4bb213430f1267fd144c7c7068e9230562b30d8cbd860db38d8dbc4c1a28aea2a79b000750f57090561b0b8c470c2bed7e9b73758fe423be3a861db10001b74b83c298cc45b7a50e9661f298763ebdc814aed9e7ef7e926984abd2addfbf5fb5b4eff0c09b370154532d677461304f61cfa46748be619b69d6d0a2d5cf647feefe5773442fe4d5ea147c0b18335147368df55b546c833d4208efe8d8c24967501fa1bd975a15b21598b555c4f51339e27fb49610a767a435e98f8425f02ad0481a53983bb1f9a13a902a260bd51252f6f720e689540d7db36e1468f6e0597748ece62ed19f94bd0d73992ece905c7ec39092f166ebf8146be57c6aae33256cd5055fa6a91b1f922db121ab97a11b065bd5143c70e104ebad329313d1019a434d06079e302b3f76e5cc7c440ee1a3e68608095d622eea1bb44188cd87d332168a83f46332d946e0a9ab8acbffaf0a580be773007f0c97be033c738e20e469c494ba4df2850fe3da0221f49c77cd4f5ee44fcf47e773904bb96f0bc25912451d3c08fa067e2a8035fb86c5193ed72707deaf72646b3f2b5bbb333e738ea3e9d8986201f89f7f8ae47ef9ac24632eaa812efdc7200d231a26603924683d37ba47be859d399e3dfb69d3bf36d0d924b6e9b82bc95306cefb1406c199768802a8d37c47290a47309de28c75b22491cd7acc53971dada072483fc7fdf4c521e5966e2d68d29e4622a3a182ad69ae99e6e83aa38a004ef90e78e6d3680f896eae02c2ba1f71b85b5ac97089f9ba5cb43a27a620e702bcdeb2bf743d544883dc633ec95dc4e21f4a62055dc0fbc4d7e70c762a8f283d02a88c779947896a498aee07a80564517734b0c0dcbb684e6f70cf95de172a3897a227a9b80a2262eb63404a73349887c15b24da13d11f3f360548fd09d8d4067f5f80de2c0c4357913152ee12ba593d802cf3d0601d028891b799b011313c6ebf2bd52f0572b7b2c4ab285719f15bce3664179e15a9c15211ff29620dd067e0a584e227f463e6eb92439cb50caba07411aa24089ef5b93222c32ddcf743743f71615991fb433e48b8008e6e8b003a614e4a38759899e9b0e1ab2304b9451e4bc9ef43d3bbb145a67fcd809338c546fd6889b06d7f8cbe382e8473094d74dbee4d71e813fc329b58e8a9045592943006b9bc43c804ccd534f83d766a70c5110d2f51853c1b74710fa235d8d31b3767b84e6c3abc21cbc5bba79d0034937b91a5e459e81d078e946cf030aef4e4100926ec6054c0232827448f20da4d768c1b7cb4906d6b637c3be6ead55039fc1b549ba5d17c16ca6ac203baef40ab9511f81c1fd5eb2511db3b1a1df2b602deea0dd7b9cd125cc679e411d89897d7cab4d51fc39863845e95a3f4697da2968fbe5eb362ac5ef51b529917806cecf16171fce3097a6da06b0e5ac8c3c17054c7468d46f8f024073668ad9513d3b12a55b8a553a462add7521521a8b265ad0fade2b070982e2bdb0440a04745f2cf145cf7b311173d8ed9d7b20b8cc8e38e0c12b6588ed503bdda55844ef8a47d08f7e2f2c7823e77d43a4dc007742a33be58245a53e21cc0b13abba687c4349172df4a5cb1fbbdc1c6ff40dba7b588f205cd0a190370c237f98acd0db75b616516b95c9e07075fa70ace2fb377215e4605d1021a6252fda228a0647196c5bd2f09a2b2855c25245d146bd7807e3ab5b8eb4801fe717bc544d7ce427e95844a59489651f1ba8ab3d474578db2b9ec3e219af388ceab189c52fb038f8423d023f050840c6d443a0fc129435ba05f68e306b1aa76e6852135ae512491a6f802fbebb2a58f97686b1e10f00bb4df7a7fc0aedc292f6015d8df99ed5859c09861934437451e382eb3fd898c0db3f1ee19e2b7a99c27636b8f28f5bfcfb99cd2cd517b48f857025daad6e09694b526519d417561d64f2b7ba214ef12e1d4d028d3292de5101611ebe3ce616148325524a4942e9aa202deb366e3d151d2f43455718fe055411144acd3c2e28c9687df4180984dba2b86361a39db90564eace842c9f9c8da2deb05809a7dbce3da2d304e7a21ba088ac0beb6f293b3184d5b82bd3c1c77f8d4270c18c3c27610d0758bf96368730b0cbc93c6d73873636a6943eb987ed6c5f32644b46da0587faf29a93387981ccc0287f0ecc0868d0c5711ec3fe5725a2414dc06ae88e30c31009d51d557b29ea8094cf953522db36675d1b923d95b21da12caec5092a47a0df8948c864854c33b18480233bd66d6034d27707d3907635e44515e708d77f0e3eb6390c29df8c3d8adfbc11b20da1fe68815880a1398037e52391c2758e2195987c89d9fa3af32926b41ea1a3f2db4d96321acb5bb140f9735770f19d24645b7c1572e26de2324cc59268ac7d6a700dd3b4699af3ff689a10d5e14eb32308cd0932a08f651082d10ece87cd0738ac52463cf3223440353cbe8be8f820df065a7b9492dd0a82c55d6e053c561701e13bf540a5bd1e36912578f5bbe0a344676b4ac6b7b8f9e995e8c24a5c05375cba096e524b90ae0d14135b734a1c04772d35dcfe5b1c7362d7dea23538e3048a67f97b4dcc76f80c1ddae4f216c9843bc3fe5a9c973f3c43bc269088b978b48d9da4bed41e8c8f7dea7a734de1cee7480177004aa98ae71bed6290105986a5691c213d98d443bdb98b31834592ee8d21f45fbfadf6237030a5eec70807d40ecd08e81424ce69645bd9bed42889dbf39f6ae0c8c16bb38d8984407a4f1c5271155e60692ed6485de7bd1a8cde1a01d6a62964c4a5e81cfb23188bfe107c40b37600da1809756974cec5fb91b8189d675d353a05b68e508dd95d2208b68aa3730cec000aaecf80a8778f1101b7391fc8714d6509b8bb80ac2345af2c5b49b0d8e48dd57ce8e5d5231bf67d0d1b29dfbeddc6274180768c5ab463b84fa5e948d0b13b680bbdb687816519d4c49d30c2bb843350a33380e14641fed49cb7b2115673bd6a85b64832c4cd2a5caa67b88cedb128348648a39c39a65e5c9f73b9de124d52535966d3674a2dd146465a5da155f7aebae2d51a5b1133c868e2140b3cea0617891b55b1828c8172346db979c324479c210154e6066676c11b2c46e2f40228d344e44c9f2682dc2f2deb026a0a367541c8a3c75fb625ccc4f159ae1539beb6f846da66b0a1a3e9bfb702a8bf1b59e8b43bb6b8a4d230448a1b39125121839f9533f4499bcc08f7a26f7d6fc26bf10d29b93938ca2854f7dcc56e4cc40a662289aedb3471793a55f1189767211e99c482985cf86e1852118fb606717cb29b08a6b319a1aaa35f0017ca8a68d451690a8b30c71338a355209b828d13ebe6c24c1aaa6e3a1adaeb0d698386a8c2188f12be97c163579227684087b75dd0bdc02197489554765a1ebf0cf7c774f4ca05e4b5407ee98c0e071c8737b1b66ab9436808dd253f2cd7cd05bac7409e59e9ccc141d33084a9b8b9451fe2e0f89a42e3be506a0036dd4abcaf4e133bb9ee4fd62d6f0b3a7d29db1394a5f43d822e57b4521403fb869d8606087852170d4e6b9bed0d449f5d9c65302ecf3b8e0d0bcd0ef29854b7709c964bc4bf76f1c2cf93f9307e0349b93bc250057886285774597c0461532617a0894111690da15f90726f721ce1b708e17319dec6586f15ee28ee3b460b5985b1b8462fc237709c3aef7830dbe0474d76c4da3aa876a9ac5bd946b62f7526a10f6e97ae003a79a3c02dbe7a1a5816efb5377adaa279fc71837f3bbc302ce62df12d2b3756dbc55fc3ea91f411199a8abae86c7cb27d1ba2fd1e7d973dac1dc0d3922081331d32f11be84c02573674a22ee530ebe6b14e31d07c22781b6ce58828e658d40369821ebdb1cf53f40777de0bfda3173d078d9b68f2cdcd9a289482325b431c05fa9902aabcf03e9f6f79c4c5886230657ab7309720c498af735d1811376241305fb346b68b02ba5575f9b210fbbfc0d8c66e953cdbd1c633f758700ce76a2e1059b549bd26a31b62ab2a4ef16cb69c353adfbe2d4110e94ee1e6766989fe80ee67f00a119a2b0030a984ca05af6ef90aa3c1c07341b25051e07dd5de0086da1bc0a892858a01ef730518a5f6315048d9129d4d10ba471b0edd2044108a3c3a0a2a7b9a42bf245a1f329868fd1370dbc92229cdebd5245eb315e235afe01c99c4ab114099a0acee59e86b61ce248f557b100435c2c9e5a0aa6cd4a3fc26c4750e3dba04ab6380a66c244aaf888e57d54668b6bda5b80655659212ca14434aa85b18ba46431fa673c9c4dba19f36c8fb38cd7588796e01df2c41a49ac5d98863517813ef4d482d561631e1dd6399ff9127e823377e0d52319218a119a18323e18d7605a1b3aee3b40ba2436910302d7d50664e9ff8283cf1cb9f98386f09f4afc7e21c740ac28044441ca72da2c37b7c1280630c918cb8e55578bcb61886cb6b7f4c3e67394f67b81b636488838a85366471106340d720cc0c103491fc95e538830fac2b0879777af710613ebccf9645419dc285cc52adee8a7106b1b019a715c0914d4e23c465e0645e114dc6257642c7228f2e3e0f390715e31ae89550f6122801c9a78f425f1282b2d77512d7641e0136eecf21f81f2154188133c48d892c63199f8484df0ff09b63a67ab62f08f7d4ca1d258302b0fc865281668757450d2fca45542e050754621dc2abd13a6ef8f2e14894be1bb89d54faefe8613691c212645a1f6f91bdbdf53bf141751d02d57c25618ba5b5b840d7a58888d4245876df7e20630130041af04ccf3e90d7444fe8d209628f4b2490faf2d4b4986c39f05edc15908c2f31eb42cff1247260c66f62841c3d85ef4de8450bd0f1cefc8193f16d888c47a5cea6207d9b932f3892746948458b78a7f91211867d936d0aadb938c2cc6dbd255d57bf52d117c03c0fbd867bb93a19901e25a3eed06cdccf2e01ae000196b7e236446235b3090ce4cd44d451960c20d1373c69b281da925a884deb8d51c9d50465e5ab94ad88421f35427de9ec761d6580a931176e238db91a0f672a81cee4b1243a0daf85ef74f0cb38745303e11da012af986fe62671c60ba1e7f68d2cbbfe7eb5c1642cd7c4bc2186f60328e1c642766f8ee1c5ed3748754c4068a914ea432608f2c4015c757d5b8db3e0650cbeede0955612a5c7a4bba1da99bbf029bd257dd6c60c8bacd2445ca1ef5f90715d62def696f7ea95eeb50802fd2a99dff55ebc89f4a65fc21e48825d2ec167ee11b3cb14a40a5a1946c81ba288f4c8e52f4510eec05a689ead8342ee4426ee2962062b2200b726202ba459c3200b263e7106732bf6b3a628e4c5ef80de1cca15f636be80a80acaf2dace6ff9b35412ad313a98da54807290b78bdb0bce22523623b02139e3e0b417e30bb849563ca2f4e40831e5ed0506d8669b822e69905e6e260dc100b1a4be9206a340b0d61b0910e036810f0fe3f105422c68cfb089076b7bc13974ce100946fd2e3b1305b37e4f0f23f761520793247f0012b045166e8bac5ccfea8107a008c1110f5c3eddd46f516ea6a41e784553d72476e61bba9ace5d57148eb68ed001b60c5ea090f1618dbd6eea5cd459e243918600f7123c5804afe0edc2c729f7b2aa30a56bb466983fe26e06713db894e112162ccd910cb8b52c5f2e395034605667c2b20abce123bab99b1bc04cbaa8bb1b8db27aa98fdb0c99117b3664ac91c6fe71457261e06515774e867c5c901ecf262eb5033c90470d879f37f9a1868958e662fe9877ef9cc131de9c2d451d39d636a2fbe9dc83785f6ec0388a9e8dd0f15822dd7d6d013c5cef18f36f760dcce1dcdd6160940b67809029110967ad2a7318fa6d1562cbf92c8d330492b37b988d06f7b77bb3e115279b9667306c0ac283894be9bd5fa99024a9ee62b891281dc102369a6f3089a07a42c83e70982b84a8cb6683ea89c749e8c33d210688cf729727630430b885b861de07fb1848decd4a85436d0b30e8b950c560abe6e89b1f105145fe6426a2cfb10989e57a6f6dd79e2c485bb48570bea3cde9dae201307723c865baa383f4d8eee8f2a3d4d1a1af5773b50d0e6fbdc5e115af43c303fab778088eeb48039df52b0c65244a0304d1b76218ddf72cd15aa7392064e49008349649c9fa130e080665d1842beb1c11c2b56cf1168ea0f4ddc448e0074c4ab306d42539621e21e61175ea25d0e435091b95d7ad6c43387fc020d72a5c2822d5ab034e79dbc790734daa8aa18359475a3e47c6a73b7d433f18fd0df217f5502fd4244c873e79a4f385dbca25031dfa29e5ed6375045aeb4e195386ad21c163c4f47df40d1ce4bda8ae26a616c9537e830f1104c70a9142c7dd00a13f8664bc01cce1a20217985ec7f73b10c7fa5be063e501c90cff86e97568c18a443d72c0eb4957c1056ca0424da6ab493198e8082ad48793b7f83a3605f9db061b7870f01294f6112686c2692ff2e4430f922f02d115386038f850440b7e91a85e151b6fe136100dea56116119f51962ce071b41ecae44d574d251696f21185e8367feb6ce99db9988b70fbf16c19d536ae491d955781b0df23f12ee342bdcf25190f130c0bd42aaca193c0775082ace59e7fe71e7a8e26c55840c0c10d429c0a113ae8f2cc8e2456e2c886e1e567870ef02ea3a84a5aacb265c711665226ef05afc3b838277f2c3ec23a7762bbc97f201f4d4f7107ba68935e416eee8d1ea71566e4b9989a718d0b3c154c9334cbc3ac168bf6f52e4534b9096f55291988f86d07a4555c37d8c988cc52a8223be5d41cce7ed5a423c659d91cdb74851461e87b98dab588faca00ab9292886588b9a44915144940b69e771bdd41cfeed1e916f64d96a9148eb48c91adef936ecee35151df13a1b966d561e729c22db7be78623801e17c3207b99226546d12e02e607836aa2779670074457e81dd3ced7f06f77848d3c1ada0578943474b9b0f6b1f4b7b05093e1e4a00532cd85902682f650f84481531a8b36aa4d26f096c49afba8548302505bc3843fe8c0dd739056da98120019244b75ad10b8b51a1a2e6322b4b7d6edb9b884cc23e7fd5aeedca74afd4aee3cfb260a0d43a2ebbb66a2b3453b8fb601ab61af2066d003b50fc73183c2b8830bbda6f4d66dd0c2c882d4f293aff7c668c7e88c105c6e4ddcc04719e19037d17483763226eada10c1677472782ed18d5faeaf540692de5fddd870cbd49d25e5b6213e668b7ccce5442c043e0c49b00d89a56dc0b497bf289676c0c2b7f14cc1d2b739812267122e90662799048e3124839cb6416695061972832fa1535ba78ca7946f34c49a8d10a79a2520b0fd1258071b74bf2ff14652c4fbe141902827412ba833d4f07a8ae031d4ad9806668b3a860f1c312b6f310b0c29693cefccf652cc814623891d7a9342ec5009adad0b11fd223ac730cdd03512dd1a6e6b17e3d5c6e26801f6b95e1d252a9cc96341031a511335fc7c87066ba4e6632cd41b4fc8eb724a85cea99057d4a5448a8345adfa0c85eb3e6265c9ff171c25a58254222828e3dffe35523254d4b66b282fdb6bd1cb8abaad3b886b7a6f189961713c4f0c085e01867efe1dc412b77c553881236560c4fa0cf7414a4b6904a5e42e27bfd7635848593ab6a1ea1454abd7351ba69dc7277e0ee49a980915c97945fa50a40177b6f4dde24e3d8fbad66ec12667723e545917692ef357541e3520a923a954ee015c0b629c979f897900f44666ccfb6dce038aa3b57591c6d84fe1ccdd2f103497e0ec37c46cf81d62de5794fb105b91e90607ab1dc6a3c7b9a0111a921ebf6683f6829158126bd52841dc90c68c58c915fae029eb0207a8fb1b8e45efa6e21bdebef46015cfc9db480a68cedc03eb8b70245fe4d1212838a6e95536a243cd5d8586792c2ec50ade4aa091cf10475cdf3531bb11854710cdbf7d87df9868ef5b9f0ff2013edc7fcb2e44e101a22eef55fefb0ededf7e87dff0fed606c3520f3edce870dd7f0f031b6e46d049f7116fade0af261234af49507c2c7de3f2ae26414b732ec1ac44c114e9a30151929a34c0af53485dec7d1d83b7067d1d4b2a6f6984ede6c4575e7484df7222e480c960c59a78cb99ac8c8863ac8923e0c88ef16b55fc8e4ff8b58a552bf8f108ab56e8e391a8c188ca229f60bf2a96f2ad08c792277058278183a48b8b093a792ff12f470a0f82a0ccb6749e71e3004e383752920af500a05cd14959b951ae1df7aa1503a2ad07f0029311b40c39dbce6aa2743b16e90ae8acef5f510623b2509626f3a6afb1e94ee7a0907ed4e74d485e2dcfe69877fb0c7c8a308ee99e7f05c31b4683a04e6e46550da8d15e9e956171ce47e2da92020e1b0695d3a0918603e9d9418e01dfd746412ae345e110a1c3454919a5de2da5179e8d82cd6d2c088879d8226287677070e2ff1c41ca25b904470beede68358a70c308999a1fb71bacbec1a460f04cd5a50992d0f51b6743c071bd3f2c7d0b721c7cedb26f9254754ddf669c9a86d9ecb625eadb340d811d3692be061c443c9b47cb9c2023359f5ca03a1c748613524dc24b5782259697177bf529ca1cc3b9728d207f3611ab98af2feaa0cea5cf26472f2a1101c991ccfb8f10fc9690ea1423bd432e5c23712bfaab781db53b00de434adb29108147ce6b5316b9f055c09eb6653ed0b33714af6ef258d4c60c1b2d2b0f81367db8fe09e4905c1d94622370f53af7989bc6255c21d85de691f335cf3121e079b62bc80e05dce2761fe791c1ec4dc45c3e6a68d5c41565b37c6b91a7a677389165a3d38909315b1b4aadcabf8195ecbee07b7f4558ad2af2ce01efd1b76f51decbf81628d212a441d112a365282164909c9431c8c1ebedd110317be49b5845855119731989948f1b034e7b13f0ee91b6e20821cf143142b57764343124a36c51fc1e2523ca65a235d00cd19b6fb918dfab8ab30d1acd4a5bcc6db282ec3b86a8709c3b13eb558aed03350bd685df6df7327e695c37e00014c42ec7e279b13e425f56ac34ce34110bbf7129792b3e726ab311eb45bc5ca053c2bf5d89cbfe05718ea5a0a98d583fae059aaad5a8a922285cfcb6681258cad89cf3616dbda9a14deead15b06122e7d223f603303ff81de019c8895d245e75a30ccb6653126e380de0bc580325ab34a96fd0b94c4198c5b4e2bd0d2aaa3956d86260fc9da762865bf1a42b38c55759d70b2a270ef95c46d23d25d601eea22d38d230ab0a0be9d27f0dc6564b1af221dad26db8bc05e5edb4f22be91573a596b924d8fc16600885bbb71539156deb80599bb8e11724b93484e66df558ca4ac2f98577901fb38f829c139d804b8770372d504357d4ce1ac032d0d07d7171c61b3af71a7ac83e706e38dc507e2e851b820317686770ac37783b92d74e87f3f285483b8b8d186e07cf697040b38afc89014d33a10109cda54d8eb1ee595e8955f1681da5279b90c36128864111204507a051cc0526ad119f62ac905703b3495166020832f45283c215d93d10a2a55bf4c06c0a8d01061fa1df6203e5196074e7ae07e06813769a97e76261e6de44f8408e3812720206cae89d8a8361ab4725baa47d0a29c8c0ec82d97229956b03ef8497ae30d715064b72b8bfe46258d7124364bdb8a62dbaa795cd20c69afadab382286513f569c10847a710d670cd421aae5be21767a44d5e74d055da271b6f28d63de6dfea682b81c14cc8d11313377737735082f68b9883720ac3907212e0c7be81e8af0f8c1a584764babe4b4747d2d682f4f047e8c4dfdd60c21cc520ea014a53115563b97aade0d3bd6f044ea45859e0d46dca340d2a9d26dce74942dc917df11f5bff3fd4a6e848a73a799ac69a62594de4287a73641378a58620d770b5358b3c7b5d4f95304d34c5a5982b44a3a056620615efded285a70edaac7301d50d39b8af81b2ca1526788e67b403da392a35a99d0fc79e9f70aa222fa5638b7cf22634ee20796f090f16b801dcbb50da14ee06c0eca87598bc382e06f567c72eaa7c9d0462ac83fcc37c115610f75315c4a059450695d8b5f10475e3ab2962ec35fd256ee0eec87615c6e0d0ac3471d6af236ff0ca0052340c8cd0a8b5a2c794e9810f13579d342bc6d8b142a4eb41b621b4218092148285b700a4ce286579a9d00a32ccba88b279d7aca04447dae789a823e7dc1b95294d4059849badc08b1c2c0e4357b303de256bd298e3ddd38f477960d31ff2889631014706fe2d49ae2a03e3e97b4708116de479cbf024e5f8996a5022f2e905aeea5c449b19381e7ae249462c887ac0ffdb125d477e5ccabbb3284e9a83a749102735dc533c28bcd5c3d66b0c5868d54a88c78e4b67bec46263433d27d460bb1650ada3a024f456e88bf2b036399ae7ac11e184296e0d2c598372aed6c40af2e6de86d9732e7bcb03937ad21dc8ed42126f01ec91123877e5a4297549eb6b381701b7220e092da1b9243dbc5dc7a52dd1d22eb0fd98ec67fb44a2e6babc04b9fba3bc988da85b29a0de2b95179762c98cc59b52804e033d454c948440ff2e9dc1fa438a0d7cd1aa801b840cae26c26d159ea433ba3e1735aadfa628c3982245b0879cd29b82349734fcf038011584fced0dfdaf7a9626b9aba1bb97ea26db25623900f2defacc44472a15a32e086fe2f44d0c088744a11e315e700954858cd490894c988b54e46e5e687124a19a2e2586abb4c1ee067bb5728306e83dcd959e9b82bcc65b2275fdc217e050e9b104b27b67d360728453d03d10a8681b31335a3f9b55f21cf1663f164bb781056a0ae57a013c80ddd91f49347d17a106da06fb70058c6174b5550d13f176f38e3ff50e872534c7e489232b3a143a5e853b07e4396683051b8e03aa77120d108b35eec1803d25941635eaac9b119b3f06297732c87ddd15a037ba50b7e5f53dce79cc993b407066e95430a4a8fa1d5fb539d0f89fdb95ef9ea363c0afaf87c947821c824c1c82c637b57e419ee5c15135f93c39c89b6fb49a64f8a5281c5d7c430dd9c36473ee0e9656ab39ca4527d204a6a4cb39c223407aaf6f18205916ab16ce4dc3862d42a66d41be002b3642c7dc237318102f7b3effb94bdf906f90b7e98c8445d71cbfa610424b0b9be309621c5004cb0664b8d40822bf411c80242f306fc3631ec4c63b371a7105072423d52a21137ce96c74cfdbbacad2d543cdd780daba5027b54f8562d33c68af8a93659879b0c510f7f01af0868968ff498d95bb432a8776ef814b66439693d714224b1a2beb157461c438866512d91083a5a01141d2bcd056fe85c23f67e276051616bce0b7e37a05cd890da325f54eb6e488551d9d34bc05196ccc561421e4ec208e68f257c7f82ab4921761ac29e9522952312fcec5f19bef298caeb915b13ca74bfc4667be872cf279edf90860ac3745a16a264e20c5ac54752f985889d44ddb80ea42079b91979892685e0edcef5076bd5dd014034e39a0bc2dc3ee9540607c138ff4ba775ac0d6043bae203c4b2569ea608f0e665e73ab0f1618ba9700b480758f44721108b3b023c91127a5a8ca5e71f1eb8c1836bb9bf563fa9d9aafb910ee2b77e170bc11592497e1f115e0c29aa93b3d3c6ac242b4b13195370a1053157394a7ab1210814047bf7635c7b386d07825d2f920f4863aae893a72500f8e2ac6ea45c033c226c7e486d0e1c7e2aa023addad48c18345ed1cb37e4350a035a6b411a8ce055ee91811f11ad5e8265a02517ab1d0dad7c9d175835e442378046c711e6e636524bc5ddc9ea5ddc21bf16c620ddabcbd35326f90445fd6e5cc0d9ffd6d481da4bd35513429b88af637276c7dde888eb80c6ced7762ff572ef70fdaf91ed2421c63976ca0185d0a0e9d4d9d9f88216cf6e3d0f5ff9e353825baa158d49992ed0a727d694a7c9c9754a83bc6151b7de76589448dbfe32ebb99175c8f2df7986af5253a546855c91b11c80476cba79b33d270933d1672b10adfb188b04007a2efc0e395f06217a4c49366f64e18d7bbd985284ceb6411b02764c77f20934093921875740856bf9e219aca20b246d34ecf28e1ada83319d368d57da6b885fe616fb40a74ec7b9c9ab63d67346420036ef45e7e2077891de2ed6a6e28432058690ebbd69ac7c720d750d7434c29f5ea7a835b14f384412ce4f805d7624a7369cc5989c62d542f572e42d5416821afc92e58497af32a5dae32839d6ade9ed147481209efe471287f83706797489e5ecb04b4c1e42a2da12896c452291e8c809610b4a78c448f8347f58dd07a232d2f3f37c071afc5129efa6808bd3411f3464cdcb04ab1345bd3232904976d43348fd070b33bdca08ce84f1331fe90e20d269b56b62f080f200ee6c54230de80d25af4f2257f161e6365a2461b0596dba018098c50405491d1a39d904fcf2124f486b804155da4eed6d1f5b767c0b384a1208b350d1cb59be35220841ef0a6bcac07b4f3774b5a1b742f6b83c8db1284fbc503c9bf900f9f23d41262a8a2b882243cae83ce6bad1ec068dfdcb8131c7665ce87dd5a0664df90c7c3a77d929017725d2354f08c88399a21bf14f18da8a21759421c8dab301cf5c2ba26ad8a924f560e076d87a86d2e06df6a90da7a8a190a7737caa44f789be1e9b3661721d2ac2dd07f421727f55aaced5934967e1b8da587c621763e6c01c5b89e2dd1e272237a68f06af9acbccb47aa1c7268048519c57905bd35504af328801466d41c918c89519e6406991b3ad50088d41611106908e7176f2670789de908b344e8f8b76dc05d748d0b1dae9e93066faf6e5ccb2e7f35e29e17285600dfc771696924a1f5105031fae3f80c12acb14d1be7d05f34234b3909fc74493e21ac42fc377a9472acdf42c7773e40047d692cbebd42d218eb35d01989a5a1283f1d2e0ce3f21bee50cf32c1c1e1a1b849f0569226f589ef26da04910ac521a7d400a5f7702e05fd4193907447089f8ce2ba954d5274cc7c96bd244e16315ebf1e7a518ef0f05eacdabc1ee8daa4fd9d234bde3531b58842cdc396411cc3c2cd804227683897ab280d048cd891cc59c89be0511a044e92909e9302d8ef5b626a57cbf08950c3ecf71559406846eba03b4bd9efb4b320e63ac864b7b31548496990d3a87b956289fce9f0ea0f89cb106f0d37598e7c6be1f19b81b0fe0899474d698112a5ee6656f5729f3e5a70eed3b2a33620b308e8ba30c6cf14ad1ce60184fcf49225d93912a6e6f861245ad00897991a90d7b52d08865841aeab0a8b7f03c7608a808f2e1b9335e6a0032bdb6c4d4885e3b037b7836c51e4bc613deb9a711bce3930d2bee3878e653ba532a413bdc394115db23ae4f022ae157a207502470a7e661bae7d019e1bf809810fd2b4d7ce4a38b056912ea30176a54a9d55c098dfa060921b24db6548c7d0c624cd7829e882423169cd57883f7001f98bb71ca5b059eba8de9d5f72c4861741362b6b3a6998e47d7c87224d1b55998d23cc24b5b9c3b37003be57f5a4a2f291b4e1a84cbeb58e7cbd2be52dd4c46c8fc3df5ad225baaa96b2bc62fa8c238c6aeedad573b882ff4d7420f459a6345c2bf76a7d72551f2dc825b4e7399ffabb66e1e96afaabdea42bc668ffceb0ac2408088c150a4badceb118f28d4dbfc519ba94e6116ff6b773df11091a557d2f209bf452050d6f4299922244475ae1b6d12940c26d01ef6f9bc2c7a6717d8cd929eec6d7595938abbb98ad3911a760079d7a4aaf6641cc3b947ae5086efa768bb78566158524ca707c540000e8f8117f1829d71cad019a94f19a12aaf015e1671b2e0887332e2ff1760c13b1e348ac81d4769781805515c859ee3bc71da688ef90016f9355102e767b9304798c01d140d88be212af2f298c2524a0283f48ee04a8faaa8717da55ea823042674f3d4f811f2edfdb108437c957e30bc722b5735d80bf6d1d1d4bf28831de4407cf09809a7f6fd45d09d235376aa8be2ece396434ae01f81d832ef9d82e314b72063c4ee4215dad5f141d645ddb26deaaaf89cb753d287be972f651e82cf91426e219325e66dec78a78a57a1ec5d6212671004dd390b6d05f931b5cd229475a3264c350d12c94dbba37e8009f8fb70c768af701cfbf719e6e8ee2fb6c6644f7d20641de96f1ba30dae6bb2a5e49f548e798aee713da12dca3c0e7a49609802778456c67b6a4cb480c72eca5172ade2ae04e947c9ed063fab102b192addce00c6ec839c6053545dc8d6e4d2ccee926bea3ca390cc32cd18db40f5c28858ef268f5ef5ad506256a07478bfea844e9ea277348f6defb96251d8fd0248eb6352a88ee158382ac554457d5dc289d1dc39d4caf15292b09fd791d0fa0d709c7ba0f4243170be89e0614922e41169a8b2a5db361587035c663a65a07a9e648d2ebcb6a50e84578c7ebd8a101b80dad00e4eb1833512fa5fb00bef1d3990bad4eb6f507fdd790ba25f13e89b477e1f202a01548d9c132954371ad00eb2bd3cd3a36e2d5ae80567e324c39983b489ec002cabc50f0b37b7f009fc71c42e605d9b84e2e8a578e41d1355ea624e7ee938bd2ed9abc680d0051de62706cbce81b9ee33640282fb1c6f09c9d8d1a34d479ca50034575b46ecad6e0c30598d0189defc945e94e1bb8ec013d68e59455dd8880e760a9d06628e7ba1fce7f8e3961656391b2568169e1d66fd3d66a210ad27c88d7b6e119960b69adf64939d93ec2c40c7229a551afa0a1e2ea173eded32dbaf8cab594959a89ae80d35ecf68a5dac94555f4b42315e6dc2010687bf6cc065d3c21e08317562ee315d8c00db84b4c7f8b5b3c9250780d093104bc6b62d2c1aa40b970f0d858a686a90aa0d49a16171e4a8ffe6f54e7e1ef4d2d5028172884d1a9d8c79cb6071db2fdb1e364046fb494e64f68594531de12ff3deff8bf3356b0d0d0efceba8ef436d30393a7738d116af7b8fce0a455a5333a92fd3536dbee46f0aa60675bab0e318505c4f3944a5dae81e7657751407ce8d0899b80a0db5d1524d8659dc09a1ad914dcfb0eb734e731cca49bf73e94a6c153d62d16d0b13d47d80f938175cb05bcbf54c70bafe4026a0f2b05040223432705a3b3dfcaa827a3c03bd9211b00bd9e608663d97203f668aa942a5baee1508ea9710421ca1ade1d15712447886ae638ce6e658deb9c032b8534bfa9d1bdf25a51728f0a240842568a6e130e413d1203176ac0d910d4768d31866c3fc203e606dca0d610ee1947460b61a050219d341d080e9bf09dca538f05f7d1731468fa70ca67975b6101142abcd76302b5d2420cbd77a6589c60d37dcd019dbf7606a1d7250d4b8f6fc28da8d84621dcf651151bc97d0b374269cb0a68a99da26483b69f753e30bdd548f6201f962604f40b609f1b04c6b3a27b2f8f7bfc748d8cb045c945e2e09b15ec21dca23dc0c921a0bf85eb95d2ebbd5d83ad53a58360178903848c46e950e389178df00e6e8f71d9e8002d8a123224903c227d14a31b84233c5f2b0276a855db510b01958edfa2dcf2552455706c4bac55c6f6e874ceeca65f6b0bb76325d62a1268bba7375f244200e6b142ea18cd6bf842877b139c592e7d66ee41738f7f31b88e93f4dedc03e9e28755b91558c9f4353117e2efd9df879aaefefef5f7a56a0c4cebb0947f550afdfc71bf5829565ff3837cf5b57838b17fcffe6e9b0babafda926938aae1fcfef5e9f7bd85ad32dbb1b4beb3f7c7b3f16c6843b63fb7ccbe6adb87aab13cbcead4e51ff2d53d3b3939617b73cb1c2cfa8e661a7b07eccf6783b1993958e8eaa1ba9e9b9663b31366a96f0bcd52f7f70e73fd899db354a5ef1cfaf50e679a7138b1f70efe7836fe62aa6eab3fd3ce405daaba399fa986e335f26cfc9efd3d97fb8dcd4c7acfe7f1c7fe7061408f6c7fa49baf8a9e6543a5ef98d68646ce98b399abe690797df2199aaf13b5efecb17ffdcbfd8c2363bff1af0b63a00e35431decb1d3f890a9fdfd03f635d401d6c1f6dd51410ff8e150990dd8293dec7b83a43670f08738b96027cfc65ffbce58b3b32c30d503f6278bed296f66a9586c6c9a5349d1f557a53ff53e7875f9571b5ac00ffc3f4b75169611aa78a8cce7fa66df58e87a9629d668c1c765f39de015fe729bcde5d8ed58b39966b38169a8cc3199a58e34db512de68c5536539db139607d45d7d5015b69ce98f68f4f8c1ae06fcd85c3fa96aa389a31627dcdea2f74c5620375ae1a03d5e86baa7d189987ad3ae781f1b2fd3efd0acd2c382576c2fafeb284a6e1b5aad98265299b7dcd982f9ca435820f4c336c4731fa7cd7a13c7b7f671d00297e061c9343c4a163f61c4b334687bc57b745808e27043facfbb2b76334d868c2707239d6948fd94ad375e6f085631ed032c51830be714cb119f5a40d99e6b095621b7b0e1b9a56a8219cd36f27502965c6f49583f32f4c14ab7c62a6f26cee6cf6cdd74968b21c5b51af23d5e9ac8c6bcb9cab96b3b95266aa1d2a1a18f88e2ad0c3a1ae1a23670c23cdbb900dc30b202cff3f7eb4a67f84df0d4d8bed4f9966b0e8908343375f278763c50e0c627f7a90583a30faa1a2dbea1ff1227f855ffd953875c75a04ebfe95beec772ed47c04f27c9596a63660f91d9b78b598bdaa567a538429fd16f70ca8b1f78b0708fbdb095775c5517fe238f3e2bf38185e75c75066ca7c5fb1ac2c1b1aa19170b8b2544e589e5eb24c0b6c1b4097c64e58fe0fa6b1ff668a6511ccfec132192d01eeedc3f9c21eef0f0dded393c6db3b3888034260012cd54e1db10fb3fb4a96bd26ad5f6c99c2708e8b0595537b51d78e6a0ce23dc0ecf9e268fc7cbdc666cb4f566084af30d7a443a53c692fec84bd3e692f7fa41e1e6f5cc94defb9dbbf17ef43f16083f7e23dfcf1f9c6978abe503bc3c4b6e91b344dbfd35aa63d5152971a28ac7a772b3104e02c5fe499e264996ef6155dcd123f91b4d358f79297eb5877b7d2ee16b280820e0e174e7f3f7deb07ea5059e8ceb562d99a313ad39591bd1fa5720f2a335475c0398b81aace595f073e83331d78ee0e63438daca1ca694ae0f92be2d66cb8d4c258d8eae0d69caa868da59e5e128b340165a4143197aa35d4cd95dfd79762a4487fac58f6a53a743a4bd58222f948094e68fd5ed206ac194b45d7066dd370c6580a98b5c44267b049e973b755ab892515471da475689bc1c7945273c5b2d501c785d70ae797131669a65ada4053677e430923b786fde271b1f8416f2b559d0e944d5bb3678ad31fbba502072415f8466a18f06631966376f8633e6427c8f9c48e267d4d06e29d38176a46c7c5319d6dce5cb2cdfb07f630805bf9e7d030f80b76c292cab9cdc75819aae3cb12c385119b1b1f0c974288fde4a7ede08f78115d35d809735c46eadffffe377007093c12e2718f92e9aaf107d3329954960970bec3b9cde1c2402a82429083542dcb9c0f39a8081394b01f2c8a41593aff950e489a7dcf4f4e3200d1c75428e20b33e430c34e12203261cdf17ce1d93a81ddc4e581460e23a72f1bd8e738bf1098ade632f8510a993404cdbe3257342df69b665f29577caa03ce69df6a3375ffe080fdeb5ff1be70881e8afc6f964f2cf61b9643b4bda34008017e5cee0151c5ae92516cb2a3a88fa33fee99b0ef8e8251049c54749fca7ad8f3fd9ded475efdeb5f41f800d62fce34cd0e7f249079af447073030f494362dea686891a48541fd408d2db9024f641bd576d746e2eb00f4fe48df375f16913abaad96796b9e5888b24daf777f65be4dbfe2c19b904cf73606dd2b94afe5f922cc90227ef13cd2492101ac907cc1e4115414a4cf098b1139f2bdcbf52ae82e79daf1ae2a6df52b017f1ee71c495c5dd4aa183494b126f23762a4e12e4daf8ca24a8a8aef5c548336ce68c15872983019ba37ca2a936b3c7e6421f3045b74df8e48c553655376cac5a2a03fd1703b6fb20eb35679b6ca5b2be62503bfa86b8527361d9aabef49455b0c2a0eebaf63b3c4115dc61c287a797b8beae6fce3792690cb5d1be6366d9d03267b15dd4b230922c1fe91f5159e3b7a090cfab73d011dad03bc27d1cd81d335688f30c4995937738ade394aefcc67faab961727343afb9e14f35a72737a77bcde93fd51c21d9c436f19bd7303efe54ebce360149f1a69dedcc6bd7d9ce7e6e7fecbb5b290d1cb8dce803c1ddadf4534d9bc3a1ada6ac067ef31ac7c79f6a7d9e020ac0a147510b9ca19f830c106e53c003bef930028fbb84ffe8c1f7d867968f75105501a5d44d67a6395e6027b17a715d08035ce2c2fa13af975424b6404b25e1d8f8eb830db113424dd102e9dacc24dcee984952d3623e0042776d99234bb5d14483ccbb87b21163314f4622dd4104d762a9fd3ea0dbd0a4825818e4102a1398127f7ff8835329435d8132901ae22f5df5f929f3def9dc32fbca1228ef6fd0a02b5c24c05ebcbf482b81d5e444d052977c0d3463a8199aa332dd34e75cccea2bb64a8bd8c183881c810d0d23e4845ac2b5b30fc3e38d6fc3096d446ce8093b9620ac21990c0e2c5110ddb1fd91854812dd08306226078238f37512d40e5369ce79f32f01a388f93a89934c976d4ae5d19457fb4c37f919473d784c82c4d75c548a2d622ec7bee4d9977fb37ca2fcda569cf1615fd574afe9f7774f77cf52ad1cc1da433e34b7fa6796d3319b86b3ef5a0bcf4c4b3255abaf997185779f7f5007a8bf67272c9350291b953cf5850a98308a50c38dfd464204d3ec3300f4f0f7f841721b76372352fe037e136a27f09c7d7336572c95392b932996a56cecac87c6c62aa38d35876ca00d87aaa51a7dd58eb17ed004a877ec7d68a490c5c68a5936300d47328da56a39b1e545c50c6ce24c33a82ad10ab7057a3c882c33bead6bc3a1db82f26a875b605f7637c167c48f6154afb9cbb691aa11e21bbc1f982bdf591ccd93f6029b8d6379d25e388827c9cd91da2e94521b07d048e02534954cd3606699cccf486ab81899c0baa66283956219fb337b14c3028809edc57cce115c5d9d5b6a5fe1551e14cbd08c5100d726ab0ec8eed6370ddb242787a097c3015f16fa78c847119b7cf0e3fe5e60043068cd187d657b2cc3f8e03f832806d480caa79b68111b6a960de4d1a70db1a525e933e41611071e5cbc813fe473c518e8802892855ae6d19e7825728888cc93c53919909ddd392476c167a958234fee4bf99ef02549a3eab9687cc811f2ff146bc44ed8de5e42e3eee00964bc76c18816709d496ddb6d3f73c2f69e9f8d270e171acbb0bd1796d65f68525cf8d68c40c7f9979d7d05fae355336c0f6131d8c0d354ddbcf04fd99d63f86bf78c38aa191ddabad657f7f359f6a578f007c7f437eacc5caaccb1144d07f715733653c009c39e2b7d35b9cd64ea9bd8a3b7fe29234f1935872d34072b560c5a53eab918882fd5f3b321b89de38ac6ec0c7c25c8c46b8dec83c389a919fb7b7b07549dd7d9e73ca46c59a6b57f7070683b4a7f9a3496e0714ff27c487673181ae4a6843c79cc4d096a027a49921b02a79b1fc23fff8a2b5f3c3cd5d366735ddd3794998aa73f1945ff049649c7305e1f3b44d4e0d89f788df819f1a8496429e35513156ba1e5fa04010a6d5bea6a78468618237e463f7fc257c3adf28bfe1a6ef51d3e1b5c184a1207c110031ab7049e868b54f12acc17c6f16bfc4083e1cb5f085e3a990de1e08e4e0dbc4cf4a8a46216a8b6f70310725ae5449043511387ed8dff8f904c78a91a1a178d4c6ba0198a0e66088e0c957e5f9d3b369b2c6c87292edbcbf1fb60a091d0106a884a64d8fedcb46ded55df1c30db590c39f732e32d0e2d73c67e0c944d6708a69f0ef678ad58b67a186aeab653ef7c75d1f3f3ef66a0e0f3ef1c5ed12d503398a1ae1d365326a6c52c555795504b24682776e84e1b85f01b7524afe7fbe125dddf55ff107d753904633133fef18065e27bb9f70ed835f7fc3cf8b3902dfe953b704ba73b20a9d648452586bdcf050be08a87da28cbfa634d1f48c9708ebe49c46bfdf9579605ab1e64a350048700009d9f83947659dc0f265014db4c067d3c2364970e8e04154d0728f8d1f7409bf47987cdd8f654557ffe9542696911bcb2e1b5a02e3e5d373eba24228da719c4dc68f99d1c6c7452b1dae99da5b4365075d551fd467f569de7fe0c414808983e009130cc028ca41a0b7fdb095aa9d5768156e232e7726ca64c55662f2c95f5c78a31526de698410bd3c034f61c363307da7043f325141a6f2eb8638123e7bdde2175fc9c6f1f3872a949b40d352a80ead3e00b5095ad7a9ad21d9c0371f4b647f203a658fe3ed4367fe1799d1c523596089854d497fd921c70c93666a98942964fae7739ef06e0c87c9da43a19b2a0ffa5f609763b99a3f5b78c25f99c20db0afe4692a2abc640e12c55d0bb4799a97565c3beb2bda75b73a06c98e2bcb0cbdbbd802a86133bbfccccb42c739552ec4155a7bcdc603018b0a778195db1bda61e55db51ade42e7939b7ada74bc5765e585a937c0632dfecaf6cef728fe69f601675a7bf3f553759363367596698ab18f532170ef81abb3c0c554381d0a3badeeb3db7fbbd20b478a67a8f37c3660fd82975805ca63f8aaff47ec7065e9ac6a8ae382a798784b6f1f2b6c7f8028cbfce665f6d9b09c115babc65dec7c817865fdaed5cbd9e7b7c7c7c0c7dbd74bfb6dbac9e65f1ef97b1ef2ca1135e8e6022cb920aa76e9a1e9e32dfbab8e2c75d0edc997015d8b66cec18cf14e76e3e07f122add6a163421149b1d5fd8397980e99ba7d7f67bf051a4c0b2dc022699ae1d4917384e5377e68a9735de9abfb39be88efedf67bbdfece5735370afa6d2d953802f675cfa48e288470f04192b62c75543b6094bc2fc029fe84edb9ce2403c551f71284b840e9c400231c42a0d88eae894be6ddfe73e04a6881eff5447e9a9d309f258e8fd0954e92cc2da13152416f8bf818b22c6c0a491af58daa2b8eb65449951174675f389c45f8caf63483fdd30e9ea8b962a36feede3f6da68ccc103a84f70a1baa2b66ab7dd31884aada36541b247d9b51d599662c1c35f46546b5f053a8d6186b196c6c2eacd0873155e21f425506d4d140d9845e0fa8c240d984cab7dd81f1dd0b7d68bbe3e25f4275365467a32aa1516d3654857fb0d3518f15dc18dafeac1b7ad65b0c87da1a7dd78d5116103ddfad8fa849b0d127ac9c4036f6e374e3809d860f34befffcb8be2655f711ca3f07392d155cbd35e170870db2fd81361c66994bd676e3e4d0b47945f66f9667a76c0f617c8fef086ffb031a8aad721a8abf3ca2fa955e04e663f3f9d0f7a4e3a7e89a62ab696a3c6530b8333447e085d8fec2d09c2cb3c7a6e58c156310379e992ba413ec84f1b2878e79e9be0a797653a74f5e058ee0632f5986edd97bc14f5ed72fd443ea0e197c1d746dabf2e1db30727b475c157c47251782cc1e3bf57a858fc0f384de8467f7c2bec6bc2a770c0b39751c1ca8d8c8a12cbaa45e058a9ee0db140d7af08a705e3b1a54803a86141932ad671667e10345776919c2836127d18d809a29de31e1baa9c24264499ec2d5386404c6fa6b02770c4c227d261da4b9a5999646fe883bced23596dbd069a26a6176ce6f0b400d558e586e67540655dbaa8300d87722321a78fe20bc87453bcf90b4e0b091589741300f077e10d7fee4bfbfb2853f8dafa1b1bffc95a28ac7366cd3720246c858205b60039443b707f685bd1e465683451deea9167493ba625bd532cf345df78887a35823d5b92463ffd0b4fa6a4f1bc54daccaabedf95fecedb18c6fed27c2113984bc23fb16fae2a420d00bfbe237e67a1984ebdadac800e53ff4f7ef9390278a4b27a1d029f0e238644e5332404ef63855d8fbb217d385c298e7e66abf90cf92c383b2decf6783a33d38f0ac01fb0787f6e2d576acfdc201cbf8a34e3a0a48841ccd185154d809cbed3f3f3f3dfdcff3f3d3cb7f3d3fbf1cbcef3f3f3f3f1f9cee3f9d8f5f66b37ddb3e387d6f9befedf629ffdf7bdd7cafd7e19f53fe3fcedd9f0e4edf07e6e9fbeac97c5fbd9cbe3f3c99ef0f2fa7ef5df3f4fd11fe7bf7ff7d7f7c7c1f8df647a3d1e9c1e97ba3b1df6834f82ff55d7e57de85f7f1f8f4fdfcfcf47d3a3d7d9fcd4edf6dfbf4bdf767215bfbeb7dfdfeed7dbb3d7dfffefdf4fdf020370aa5080027c5b39f98dfe56deffdf2f6fdf2f294ffef5dffb3902dff156d1517cca5ef1104e21780de524ae572cce19fbff287bdf69ef776ae0c06ea80bf7eda6bb7f7b2acf8e27d2366fd2baf61fa55dc60ffaf2c9c38019818e030f7390c14dc131d447167fe48d93e8c284b43c8badd655962c60198e7c2e8c7b30db0b065bdefa52508d0ebb8032836b5c3c78185659727b7dd97fd98b230dda008534cf23e8dedd713147da131a5b788abf5b926b1ec53fee5e5d353f5b01e2f9e620576b7eca9f0e2fd2cc655a8e973a09dfedc24a8f0e7a7007088eec275c551f60f0ea989dd73c2adfa7812714a6181252c7aec130cae6064e16f0f210e6a3fc7b1c2f3b3fdfcdc7bc9c539a6a07dd6e7d93916797f7e7ef9476e94e5087c674864a42ec73ae16a49f1f4539a4b4ca288123a48d1e1ea5e684e51ec7e005185e43c136335c1d3c6fdccc8e7cc77b54107b654b71b5fc114811968e6497b49f67071bf7a434fabfd690b70a0c51460704bec3634c4f6cf87f859243e854545e7bdbdb0d59c257b03eef461a2c632274179d21b3a177ae877402feb02c757efe3a77c4c427a5c96a494cfe55c0179a0382a5b80dddb000919df24fa9a6315f2380f0c2f720c7f9bed7001f782c1425824a05f8b062287a01a457a753d570ca277fb6e307fb8c5833fa2f57c18c4671f44e35fdedf771cd52445654a437e386c520e89844950d0462c588a9db0a3f009f71124e09fb0663e154b06868c5d1d8695ab6e95f777446f695b91c88c1dea8aed348d81ba6661667935d674951f967f939b73727547b5dd9588c38db7f9113d4b6253d95dcb1245133f37170072f6e584153e70b20ee9db434c3a20f382d71aaa7f737f047bc8e5e8479e7d61b548d562a46aa4b65b370f75a3954b91ca7f96fe0a54a6ba79aa1bad5c8e562ec72be7bdcad1da9560eda7cc979753de44859ac8e5d8971afc47b563f50b8e598cccfb343e765ab3d8bc1db31ca91c6e82aafbfd471a3872cc4a62037e33d0c44753288516b0900dac7f64060995cb91cae5f4ca09b52bf1d52f6471fd13573fd2c29dc1a55d75e0f69f09c16ca87fcd18462af7a86aa87baf05acfc4533866ee548758af2c1eadfdf7903b8ee5f4fe9048c34d8804c3eff950320fec92034c2bfa6c5be470735362da7e346f285dadd3ffdea367d701a689c37f66127916e6eb5996a3bca6c1e9afbfef3f3a10b0207043e8562a97c54a91ed7fc5f8785622940b61563c356a635e09c3e7356e601246751fa8e6ad9bc775457d84c33fafa62c0c9bab33273ced85255ac0752247a2b2baf5affd06b196ba836b3fba6e368f6988d1455d7fa100e02551563c0c69bf9583520b6192d1e91b93ef0827c9af92fb5973ff3d9e251e5afa73de5cbf6f97991cf0bf92ffcefd1d919ff53cdc363bd0a8f67357c3cab4bf0583fc3c7b37c15fe14e8513e7bf9b300edbe3ff1562a582d5fe1ade4dc6ffbcfcff67f9d460bb85f0fd0daa685447d4b1da9eb5d4ac41b5e202c60431d3783107c8fe8baa1495f000df07e16963ec5422c28f26b768f5212f93c4d6aca38b73027aca1719c061fd957ec67175718cd33a342cd33d30acf39c50127e8be44f37625bfb4b1071c1017866af795b9cb8750bd0f686c7879bdd845379f93fb4c5c5502132c990315bd33c78e33ff9acb81b7b79beee3b06fce726f0bd506a62e573aaa14cab5524eb3bf3863d552bf285f6000f32f38f42feefa7dd18c2f1365a9d87d4b9b4799e8c844136d23d0ac0cc5f66ddfa0cb45cc3d9030c362e7fef3f3d3c13bfd7ae1bf9ef69ffee7f9f905946207cfcf2ff8f1f0206ca68703ab0eb26c5ec8b27931cbe6a52c9b97d3766b5ee07ce1bc08ff96e0df72480d9cceec86269434637f96b9a72fcfcf30adfff9c77f654e0ff70ff8317ff9f3af1790aef9877ffc2b2e6343fa1f572798727e01a623b09ca60fd3b29f5389413bbbf56154841198a6eb6ebc6484dea83ed6ad514a33900f7748e49e868db97163c8e97f4eb114957561223ba376702b70c65cdc4fd5bd2504980e20efcd67372bb4af6ec9e4f57131828b961222c6005fac3c8771fefbfd3dee5deb8ec46dde2b1ded22c94c923865ce23dc9a10ae726699b3d06c429d246bbd8271bd013cec903894828683bbf4129d8bb26b2e09a7ef51166e02c2127fd5ee5cdd9e335f56e2efeac2adcc4e5831f0eabc73c76b9682359b577750ae1c78d993a5ce559d6461bfe4e565d3fb52097c7990e5163b61d5c8abbaf0c84ed871507f7fd6b9690bb7b7cdab86fb32ac4fdfdf7bdccbb23cfc3f4551ca5bdfb8ee061b55b1f613ac621bf6df27c05db353345f812748067eb9c0e1eb172263c867d9d3dee323d811768d24a8aac581b07fb2423effd90ea00bc6ca2f596a309f657be0c3e2ce28ad1e543cfa857abc6205f32fe2d4fc7ade1e09974da127f70263f7fc23f6b138af16ae737dd3ecdc346f9bb16a9e29d8ad5908d7136e7a6160f0593f8405f82f20d804a6182aea96f504d82cc9f0a915a88a27f15185f28e0a50c313f2a8426557055e23b18257258053fdcd752bbf64e1b4077a081477e7f0091a85b48937e5390f04f36a15d92985654186b0db9559d7469af3c8819a14555f93a8d95fa903fb9561ed1ec1475dfe4a8fd09737ab2c2be40fe287379763e7f2e5b57cd38b87002a1bbb69c02039782706a6d997aa320f143965a54a857d65a5ca512a998a558ab70b1fd83f59d94b8cc6e84d219fc73c07a05d748be5f3583081373fef745abd70345f6c13e2ac50222a0c8008cb707622f0fc6f563966a7ac50cbe7d95756cce7fdc50e6563e9b4e5abdb5e90e08d54a7a7bac3982953b5012ff6f7ce16bafe88780552cac699d191ea34bdc54cc6df81c50ea0f2ddb6251c80eb2e3655d5792c943b66fcc04c6149e61f4c32b12b60c7569d7f14c8de877d626b095e3f29995102a34ca81420659fb617519d91d7011fd82ed3d02e2998a11d069a4858c59919307544fd23f9c71f83a7bd91ea40dcdbcc4b42c5a9ffddade47a8964a0fd1737a9ceaec8ce7f14022372573bca108647f5af7fb9f92eb174e256f3e65088f16017a3d23c18e48d1208f22ffcd1f547e0f50aeecb019870107dd7923312d2bad89f5d17187736d86596501cf852277c3ff820d3411aecfcdad03e0e70fa2b1d91f8bb0bd263c33dbe6129d9f51a4b74aefc232a457a2a2670ae4027ca541d4ca0cc07398003c710269438010fffd869e01977fc4c4bcf109b75d077333677167107dc42fac554e7bc68d5a40c1581a63ecc5101eb18a8f0a4bd1c22904077899f76414e22907e160e7e161652e0e193e0bd03464210323307fb46964555a4c838ec1bec9ffc5386fff34fb64e52f068c6405d4332797c9794719aca84c10edf25e49df65b4c5e74bf66206c2f29af55934d0d731587c68fdc06d0a366c70d09ee3cbd00fa9313161f416435a3bdb2cf06f37d297c4a411c44bf9c2a64d11810d74d00e14166f1fd9d51de65289a868f7c0a1819256626a5dcc927004cd05296158a411805d63273c2f02bfbe2553a60395628c6a572bf512064a77cd831eeb858e3dce131a7d1fba542a055f64f5665ff64c524f5f2c77a85f65ed6f70ecc8233e0a704fb802fe08772fd5e1bda8faa2f12bc3752bdbcd0d403e632e2aa7c67888f3bff7b7affa8e38f740414bac3f6da894a82c75415815bf1f82774046d94fb3db13f45186fb743c2fe47da015cca1d86a2a4f524478fc01642935edd241136d2693b2cc5fe6ca73bfa4bd637b4619bda7b2f3f213c83ae31aade665f52ce47b8bb3675b8abcb5dca63444d8897c246275a01e8ce6d2e6446f372ee06f0522ec791e74a65036d00975f69c68051ec19a35c3b8a3585a47ce0ada5d86e20e3615414e055d244b8c8c241e13f3e6241a29969492b1d4e6d7f92e43e143faf971d49b8944342358ca6f7a379f50391273b61b9fa93597f39f5fcbc9f9f5fc0d5fbfdf9d93ec8f05d3bcdc5832d315b000c87734c7b178ab150accd8f33f5d5821f6dc5ea8f7f08734bd37fb495cd8f8b85a1feb858e89b1fc262b4b09d1f3d75eea8b357d5fad1e93b26ff7b652ef1455dedc38fbd437bae6bcefede0f4fc919881c0e0c60a7bb5caa772addec86216c08499c16059fa36175cc0be6c5ef4f7bb6a3180345378d7080788243eb27ba7bf264ac9768cfa162a1460e35fbcc8b558e6ef041c8ef0b42f2e027885ac1b107ba4ee20d13b61d901ded3ddf77bee57cc3ddede6bbcd379bef34df63bebf7c6b3fbbabd8fedfb6b5d05c74c1b18f0f36190afd873b9ddefb27f71ccb46b7f76fd8ddc0e55ec64057918a2046852a5780115d17ca847b22c89eab69947441d7fb2ebae375219c90ef6a72c8a49fd8f847009927c9000e5d2b69980e5bd8ea207daddcc0ef58820f3fe2bdfd99821096f941c9a8c45128a60b1a33337cbbc253319fcf6759dcb73a7d08e8aaed33a9c435c2c2efed1d7cb0d83bd721d6f4cfb4baebe2b494bb45024916404fc1f98364f94c038a07a2a27ff34f7c6d00f476283a350d54e45fb810a26974c9d4a7359f69a388ace2df32888fb884ffbba50331d31df28772f12704e3ffeba5fc5fdbcfffd395f95f01f538fb98909fc5a7c788027f8e280006713de3c2582186b0e5b5928025dc9b88a3c429780558fa90d23cdc3e4975fe9f202aa1717a390b95c180d9a6e568c628f4b587efc03e6563ce316dc84c43257966dfb498f2fa6a1d70caa9b0b9a50eb53533874c314c67ac86affdb555d5ed047356cee60b27b8fb7ee924b297a4bb75b3a171610a3d3149f68214686365a932cd618a6ea9ca6013aefa696ae9d31830c7a411b754bd720a250cb84feefdcf1ecb249346cf7df0107d075986edfd83ffd4f67e96aaefea3042e67fa2d78434d4bfc5566bf6f14ae1ee9db0f4b5e08378df3df0d41599ed580ce83936e5cf4c96738daaedf8d0b70b702204b58d77c1a7c00732de1ee2d9a9f38fe2fe4006c7d4de039d2700cbdfd47b000e9276e13fea259db8ecb2d2a9385132c3c62d5c208a7a799ee2375b858cb349c8e8ca64e63c91c2ccccd92e6a417635ba1a6297432a2f9dfb9fe7e741e61f395cc214d3300b5c35816ab5648b502a0be356e6b34e50e9a21097ea33e0d116014901b3355d351c3654347d61a9a7c92ccf6f9e1bed8e59a52e6b6079531e430bef6f75f0f20adf101eb654fb4674177482d3fe09ebf31eb4b7e7d9c6fd6124781dfa134cf471e879209d6cafdded06e21e08627412f732d5f7c3f58e49d89588cfc7ce9b5f7c5f0f5a974f5de830529dbabf37c9b696e0e605bc70b22123ccaee46aed88d61d3c85284c26aa5a8a6ae87d4d7bdc86fe39d6341a96418bf423a0964fb8c09b812b7494b3f2d9d94fd0efc48127ec704877d4f3a3557ed6db27d656622b9f115ad397cb6f3765cd9207e15fb71c8585ddcbf8895542171d8afe49c0863beb7efd78d192bcbc4373f92448ff7f0e9aff1e40fe5f80e1cf826f22e4fe22d0fe22bca682ea47501aba8b2abceb1124ef979ccd2f55e3465deecc84f51ab84bead0cbba111846980b04aef85a53fb94ca390bb964432f66da5a1d04df44f6321b614efedf24d306a68729c95245aa78c0bdbb0cb18aa975022bf5f7544a1fe25f7fabfa8269e18b08579aae23be84dde16ba15a6cce0719b0dd06171772b579101a1c696021d30b051721bdd467212b303037274b20b22ff4317ddbe33543df5236233ac4623979888109c73b0a7f4cd5be25e1c290f2631fae0e0b2c2dde23f48edcf9415cd191ca1cec426d69083169300160f8e9b17cd476101c77359e76a337a657de64d92ccb065936ceb27696d959360b7bb94202348ea1f0e615482675c01c935a610a783b7c0d55183bcedc4e0edccd158e0ba5f271543677d4b0ab85e745d1370ddbb1167d07ae549929731b33f4b2fc975a8d0fa350cbe7bf14bcd40a8cc8ed869f973cc63a408a93247c3cb7545bb5962ad355654eed62da1d850d17ba0ea110e0bad6dff475954b182ae4d6579d705b034c6ced5da0ba61195e37696d931d42f18249decce148755c7feffdb4eb0379393b506ef3d34eabb1117f30d6a448ef4142e6ed0890dddd4a0467090a99a44de7a50fb9741dcc36f637ee7ae0b6bcddd790c56f00fbbb81860fe329cf912181cb1fbbb7c85d1acae8863708c285699f02aabb5be9b370152cfa9f8356dab869857f05ca7239663b8ae57c31875fe0cab72f2b559db22ffe5bbe01118884820faa3a257507fac80ecc15ff270e9fb91c0b343d5036eccb17b61a6bfd319ba0db127017fa4ad9d84cc3db58a102830afb65208e9a6d6659017e02eb71105eabe16ac04e589565f838d8173e906c0ce222c3009d1d74121a54f8b566f3b6639de92b76c2f6797fa1f3496b91cff23207042d7585637a3ea6d501fb2784ecc636e70bb699818904fcfa021be51203d5385c69536dae0e34e5d0b44639fe946bf63a3ff8987ff06dfeff498ade5fe80a67ee7e28f0eac7485baac60f67acfee0633c2c4a581c53aafc508cc10f9a7264b741fbc621f8cc32677cd76d9a242f9e75d769c7fec37a3ed072d2a2798bee2d4a64b7561e78b1938f002e7adbad3b6076c20a2cc3aaecbfd83e813524990d0d2813e82a1b958cec47e8c952edbadb684ce9ed77f7df4978921ae1c889fff9124aad4505ea811107c21ba92a1ff220d07d046984c7f0ef587ce44723ca7c6244f4fb4bacf14f2831839d7db2a30f1059a40bdef0576fb35260e16ba8b340fba97417c1c20d0fdb01df3b4135a8144f035880cd93e015dfa463a7d102f208f402609c635570908fc3ec039c4b5a8f18b84267ffcde22e13fe4ef9634e06d7071c2fb484c72702b181a926c32b54fd77a86ae242250d32d8fb978f9b880f3f3ecbf011f80890fd8a3b97e6e78098d7f8eaedde0e00ff2ce8068fe9af02ef6e3ceb57bd52d769d501441377c30d8d8ac57387603d13e90600ff97825156108cb25ab9c1282b938b77bcf5b4140e7b0f50e5e1c1adf2005534db7c706b79fdef0cce804e7867c19e02dfdd1679173f9de3811a3f8a34ed17f05b3ffa89188f5530ed425ac806ace667e33b1e3ed3222c76628b5ef170fe9cfd27182a0e05fae06d24053a20bf921ee7c0bf63b61837257d3ecb0a0729498576262b887bff475cba004fc452f3d29188521ed468f0b787709042cf9b83c300b649771a27cc14e88d33ca5f39ab9acbb1dec22066d7e7bef90b73082fa0af60cd0dfbca2a68c3a6cfcc192b708da2a36886cd2e1483559c71b84528474d02134a834eba988c8ff98cd702a28deb951a50e52d4e2a4a8c36989e9a20bcba09a826cd7b02adcd38d278b60617d9ba4ab190c300ff10b3d7846e593ea10c48a7d808190d94c1609f522421d63c60ffc5aa59b637d8a1b5c271367b9d4f0c35008a686b296459390471ff0b23fd143a1f60d8ddde0070f2400926c789951dfc87317a24aed86dcdf8d908c1c1dfd6f92f05280efebefe7fb66bd5eb778f9a4825b4b25f94a85578433f22b070d1591096e2f4978aa8bb49309592d3822813092c562a145229b0dfff8e42a111147e2665d3e073e198eae78ac99f2b36c05e7f297032709c7e2e5a73f077f4fa0b51a283bfa5e3cf448ac6981be898268ee3f815dec645e9a882894471bae3fbcfe23847aac314af93dd819c719194d749f3c2425a4cd468a06c3e94d53e88e2f475511fc771266e092212c013ff19a3f92bbc65e0b640cb56692e6ed709b018f09e749329eef09e0c92f29ddefb98ed00879d9a533535d557bc4dba862e1d24a3516ba139814728aa327f6d4e6ece5e3f4e23e97ac6ff3f7befc2df448e2c8a7f95627676dc267e06068680c9cd9200d9c5098bcde54092cbe9b8e5b827ed6edf569be099b09ffdff53e9d17a75db0666f6fccf3d9c3d135b2e954a52a9f4a817eb8e12d3db8c79adc5aa5f5ae85dc7300cb7b7eae60b158e8fe594c03e3f85ed19ddfee2bba0187da4b3785a880e52086e680b52ef1d858a44b7690b1e363b932c9d8445a04a7bac5a9de9607929c18606d0e057908fc30cff8c9784b2bfef4894f24fe3d932c70fcff398fd1985c53267bbe55a7fd6b23b7e67564d38528c62adfb8fca1f4ae75105ea751795bf9e05738c1a85cbadc897a434f39620ca73d84a0e51ed47ea793e99236fa1ad29ec9bd327052bb5af9096ee640f8279539cd791747c7be4b92765d9c653a9dc9247cb944d269b49368b6cfed8d4b179db7ccaa413b237a84e5dd7cd9146341b8e82a7a63e209e9f371e9b619cf291f938cc3e8e971fdf918fe3d9c7e7f9c751b8f9903024df3c20c338fdaae118c669f5600ce3b452763a0e643ff6257b7ea587b3567b731f6743b856f89b19306b1cc9de6d063b8f532fa4096bdb003ddcda95b97fd1c4c9896b3c7d2c5234b763fd96fb551ecdee9078b07f83c7f4cd1ad47fb2c7349ec6b7f2fb353af01dfd6b3d947d8543f2bb3f88ba2de8b0b9f3dfe2cefd47cdeb9fefb2bcd958fea974fd2133fce7af823f75ccfe0bb2d71f388d7f84b8f87f7dbafe20f9eebe9cd4e8bbcad3cfb627bfb5610c8c11df2e90c18f7d3d94411d61b5cf21dffd785975647421b739884e9749520b6ae7a4b40fa4dfc121c3acbced49d61b6dc0e9567dbc011f78650000f77069bac29f9f9f9f77f6b7893cb075d3b5d107b66adf7ffaaf6fddb80e6cddb62ffe81ff34bf69d8036742acc007fe51ab00d23bb7cdbde3df1b1f014fa8e583928f9ff99b9226cfbe6f8c0493002f5bffe114680478f8fabb35ef8469b0d9e11b5baade44d71a1b68b611fea4e17ca9ad4d586c6659e28f3e46bc7e8b5011074239f8483f7efe2d32ec9ef7f4522cb29e668cc6dd4bb7500cf8b41d8eaebac6dd1e2d10a401021a2c6bea6258e7846f699daa0e3b7c565e098afe7d7353aafaf801091fecd014baed51f0974f80c23add4b8169d7c1b0efb903abacc137b340f9b3c7a8fcd2edc2256147136e9f44c339ea27e798fefb2fac77e4f3842c4cf7c69042c8882f081a85b3a6293c8438a5050923c8a6d083a0df7e0879985e11a3bcfda0e9a2a20215e5d65774962d93082e4992a557506448d922279fe26c49a50dd6366bc764850af5d5568b28927a11ce517f8587063f9466fd0f375e5a1a3abf86cbf7aefe4e57a9d7f9e81bbaf7b55efa1bdc23aa5cd08d86ea3df58d9dea0ff2d55787a06ff5d637faf5352f6b5f3b589ee64b9ffd779b51b5c9b06ce6b7efab68eb3fb68830f1ceb145d98489b7889ef2df9093bf4b14157728bf374f6f1849c533a70e777f553495aaf1da92cfab22aad40ee0061c2f6dbe36e17705fbff1eb70fe3f4bbf1ba1cc6efcde912ef467caecd7b05477c058f9ba3b41d875b753dcaec3aeeb638d6c7217f6a3c96799c1ac157be577c1606962e04be05c7b278fc473f11ea55b77d2064f4d669b42d70deb17a25b55505c7a052f7ec92a3076961d4ad0d36c3695a175906c9581b15c6d7a003e46fd001735adc349a8cbc17fc31f164ca21ae0e01f36f8f3953b130feec9033f05d63c8d8a7f3ef1145c67b30aa3f6857ee34fe6a952d7eef20349587a96f0943e3edf03ae4e512d928c28dd703a7b4e5e2568bd5de53b36c99539e997b975dea555e32f729e87a535cb7b7b07bdf4663fb91bc4487cd972fcb34e20d56bfd2ef6486f0b359092ffa5655e11a2b5c5f9715aecb0a156dcce7ebd2ab8bfe62d274418088f181e74bd881df489e3d8fa53a771ea7cb82d0a0d9d232b3d55240e91f4a03ec9812c604a56492a5d1c6e4bedc6ec00c2ef9c6917ab9ed486ddef8370d51197292e47114933904c23f23c96e483e092d6db3d52f015bdb2b7bdd99018d45b381de5f1927b6ec65498cbe6d38d245616b840d334c6ef9cb41a305d330a1647327305ce96cc56fe5bc256af5efd5395c6979a88bc96ca826610b27a08fb26f7837f00832dddf2854aed2b2ad0ac7a4834d015f6ee27c3ddb04e87a132014c19b3a86a3fcdd1418656fbd83b8811b850902dd2bb2fb551488758f703f17d983aa6e6d84eda50f9b82345c89d830b1c1ba68c1cbd3b76f348406188606b8be5e9fbfcfb19eb93e16fa338f9b11a82c79ac6d761094d08301ecde877de8c19e28d365928f42c6b18d832d0994ce65317d3d77ddd262fa7ae8122c81942434bdb82a09c4e498b3d996149ac353318655ee6697f1d5cb6c990337c9af275030ea96b3bbc8a8ec7ff95cb05b39bd1afd5a88834566c60e1389138f4fde8e8f2a6ad955bed708e0b2d97e0cfaee20dc7fec40ed7e97a1ea7fc558f5d9aeee561b1d3d3b3d39acaeb6fbfdc7f8e5ff5fb9aca643ffc3347ea6a9cd466ad9671ed3d7439f0ebedb85e3a35fe09fcb38bfa630cc22023fc1f1d14318a1575a1e89c228c3bc8061926437104e2684622047eef1482189af09a79f1ab8df22d46416e60745a9fe867996137c520d8bf832d19f7a543e75aef8de51ce1ecacda3c3b105bd2637135ab8b75b37a1a67e34830174cfc2c5c5f979677fbecffedb8d6d0545625483004fc4f854ca8ec22d882952e4682b100e9e42df177e4bf870624dd887c6628efe7faf878d4d55e95ae590573e302b6b03a118c3b230ea7661440a7cc72b660418c57266ae0959606111cf490b2ec9245c52fea6bba42407f27991c493b848560a155d90493c8d4924622b22ba6246567013a64507461914f92ae6e60ef330c6e831a54506820771495a886f1bacfddfb29434e553234929e9c04114c5e955972e2f8b3c9c6017f8804719e1792ba7196350850dcd44f2a5e230c618dc3645485486fe0516040d5644b5fb4a59e532a4e419ca1933c00ee311b648f624b73d13052df3c5f1302c08bfaeed957ca9176bf0c2859dfda6808fcb320d32cba3380d130575cabf6b10655e15f11bf2bfaa70e8fdb9a52fc6242ce24f641ccfcb5a6fb4c296fed6c62332eff952d9b66c287c30f382724f4e1def0d464e73fc2d1d98285cd9ad4b754dcb851cc66905f0304e3df03e8a0d35ae3916bac0b1fba9ff2616ac2ec8e3b420791a26408b2c0faf08be34738124763b98c609a1257ff21fd91efebb8c1957163f0fe77112bbbf5e25d965987092dc778894f16512ff463840704d56bebbef3559c13efbaf25a395b1ec47762a6f379aec9e417cc19616f1e45abcfd630fa77936c7efb89b942b395fc15983a4ed7089c119d2f6d565e302420a76217e68b478300a98679f9800cbb3e5955031c4b490228984935929c9708765c548c23ca385946e1326bc1212d2a20597cb4220e5e65b29f95c705a212ec89ced0271d1a098f03c2725864f611e876901c52ce4f26fb2cc739216906759610dfe649665548e7c1ace09759d266000bd16fcda4202e4f3440bd0c9d87802bf99c5098120862718b3838a738eaba8603561e0cc3c563a8b2f9ad281b9eda8c07e8501afeeea31d9bf94470fac400c3bd0773418b20afbb38f7fb4d6fdbe2aa29fbfc2534f905640498c0c3680240b234103a75a8534f8b5299ecfdb6e3a06105bbce72148ff673c0a7950f87c7aa610604f7ffa8977559c449f0ee057568607a59c60d002ca4996d3ce5dc111b0ed09f929ff75bb5e56a57089068a9c2943a0333cdf915c5b0c18cd2da690a5c48ffb3227e1f5661dfdb5dd5e634ab1b3e3573eca5459a6cc820a872435bd8cc59ca59325e26718d87ca452b63d8fd30842393c37e18a2df79c5cc5947d0fd3085b61c7614d76a1c039c922629e09ef885fcf1835176c4265e89079162d13c2e3b52cd3884ce394448d26fcf4933b7602f6a79fc4a70ef9bcc8f282ba4e48f9cac7067aaff561ec7c0c2f2fedb8bd72a8c2240e2989de90ffbb8c73828a44fce40137418346a7cbbbdd6dc00e0a1edf7ae267b1171a3981a2d3b1ba8109ea890336a3ae4d3dd86b4f8cb767cb19337e2e6d91e224e1b32904049b5d8c444f09f7dce0c325df79018ea70a559a95f1d921cc092c424a490471da82b8e0b8693c5f24abf2edbd14fd1cb14226da67bba9c5d2ee3801db9145c23a777788c2227c6c72a1bd8183b25c7a2b392f10d8aa22de878c75a4f53b22ac5fcd55364c02156fb5c4a67ae36275c96638bc7476bbc2c6bb132df3908d9e7c6fe4917dd92f65813550f29fbe40fc501b7695912a57fb244b692696bbbddee58f9d9b304f6bc438fb99dfc5e2a99ff3d8f9443b4e4df062c7ae4697049cc40af29fde7ad010fd660b979def76001ae272b54ca30e1cc611acb2253b965eb11592f1d51317fb5e0fab0d53517a24bc219a5c39aff30f043c1e99e735884d813836df19d4d8d1cb1314db6ad3425df7cabb9fd537f14ecd48641b4938b7a562795890a2bfca8c9ffd8bc8222793b02023262e48d0d0bb77fa89e4791c9146cb3f7fec5f835dd50583f364956269711a4e8cf1293298ccd087a161eb2d0d9c610ae4734cf1aa2de59f5c5efaf2d5dba8c72829104f0e599aac186b2e19efb28b0eda81f11c2129b9916c5c8f734408264fd8eb763971bf52cca173b58c2342bb7fc16513a757b4cb896e8bad091bc4637a9c4eb38e977d2d763026b4f371e2e30ccdb54c3009472258b58e0b749ef1d4ad67a11a727db82aa8875afb53a838487b1af08da6d9c7b5bda9ec510dedebe907f360262fc8de41aa25ad1c8c5a1c3e6f6d83daea9f36c0ce2df7d650c9d8758fc76cac07e42dec89bf353457cd2e7863ed39d5b7d927400d8414a4dc024ab0de9ce4574244d340e71625ee9a4e24a69207d5d822e69a8ba309d89966f951389905a55ee27325af18a2f273876f559f3b823adffa5b7b06ea76e1329c5cdfe00b3d7f4947699666377b10263453a7574ebd531bad75d184f38658b070f07c7cf4062f3793599c44ea7a8366bc9784b8b470ebdda8053463f86ed0ea97a4112c17701317fce94547c69aec98683c9701796fb07b5f73d087cae5dfedb25d66ba4c70a00a82bb9a0912918414a4122f54f276a5c3a8b1136f7646597f4429e68b575b9e56ba5d181ebd797164dd1525225398fbae6be88ba1c0eb04b74592aa54b55bfa8e55ecacbe76593be6b2f2525fca863a4873571ed4ceba2d7e12f3d9541be56f5895350b400d561567b3d33f778ec543141fc4228365ca39b065f33efd96c3aa03bdf909a77a347da8aacf26db110c9b2d6e58775f911f377c69902ec48235d93dd2bdd96b177ae722efe13371996797c66bb2527759f32bbf3a3943c1ea0d5cb82a1b703c24f91e0eaa9fe3fc3864c45586cbe33a8296d1ed499c4f967101e413c957c50c1fe8134a2a16b926ae3c2f116b1e6aeb1e69bff886ecec9aac2aa3e8086cc6abbd4693e78532a662d6a9d7f2f49aaca864ee6a2c9319995c9f8a9ca176c4507ce814bf59460f2113ae9d8fa1c355216322db0a65deec483ca86f6fef3a235afeee8e7478363c3d19bfbc105f9f400f6e6fedd2a7d0ef03ec0316da51773996c383f191048727d0e7588c5299190df5884178f6fee8e0cd454bb5d5847d60f07efcdcc2c3a6d2287d0abbf7597120cb8515dd4f3fb12269ed71673090b5a5258756343c7ef5ead828c770c00c9f9f2e89d61a3dbdf429fcfc08470f0bfd686493261aa354a2e18555d468e43ff176ea293c7af408a951853e5cedbef74ceee1be8f92bdcab42e6cc415d33d0136d18c1255f41427daff8e59322b02add147ac2109b3253272cc25e257c4682dbf3b3afac7b7b71c85abaf6cfbf0e0fdba0b46ad1cf089169f489c7bf6c4d752e12b9210f15750d433dd64c04e27b39c90f271d37e0b17ba748ace952d983807e9b0f22420a80afd3a2656f7725dddcb5afdd4a45a58f327ffc3b0e07abcc0730be876619665d7147de726c5324c92158e1457f590483cbd4176f92b9914a6544fb39bff1d264b239f2c62eba4d98d19f3437b98fab8a4e4edf859556fcf2456272d6e0bac9fb8d475cb9190e645edb019cd54b5e16dc0c4aeb3d9244b3f91bc8030152acf221319b83b0a469919c8d7c8799ce7c88184dd62c23929484e315e4b6953946605d9c3cb315757b0a377a1325ee1537cb660731e26a84a421d90605a69349064378416b0c8288d2f13c23195749df1bc7c682ad3c2384c2d34749206682de0ee24ec7b92c4fccb85cd7138c3cff36c8e0c073e8e13e117f9054106623abb68e9ecda62ec4726059169355ad8d171f696ba0753c95651054755c90bad3d18542e96c766801fe193ade731c32940fb8d1b14cd3801c24ac74fe98dd0bee01779a290a1908c9fc491a54a87e0a4d13d4ea799e7026a45298aa7227f8ad98798b2ab620ba6f1d59271d4b2809b5958405c405cd193328d6b950c53f356fae8d3a0eca0383069a3cf8bfccf676eb34e6a5a6c0b3dfb5ce0c1c0974c176aeca03d0701c324da3bc050a6d976f338237de833e5d0675f285c36002d5db8904d95750457e955b8e4aae60b382c4586d4176bd24b00dd65539166e0080cb42e488b19ca23cc0cdd328450a6f240eb988c9a31b52b0a8c69042b2351a9ac5e550f953cfe2a92d9650d7c3894f5c294df03cb6ab6d3f53d7389c66a79fa23eb9b905ce2f18f3ad3c79537bd6e173e903c53cb915d55e126e4b6a7826a1231513a4996115abdc67362915feb2e5e4d61e0eb26bb3cb0f1603711d8873eecb145b567a0a9e9cc33768544aa76efeff57a7bbd5ea7d7ebf9c58b73eb7157aeb648a4ed3b5e7dea6195c1fb06b0c655c32f4224704a3e17873c84a12b239c4e41af726b92a2419f037e6c827d53a8b081c7efec4bd3c8e2eff814599baae61d55e2962d5be1168d721970d198d703d6b2b2a2868ca7dac57d91bb1360564f7ec684653111b97827610a974468862303233ee26380b90f59aa0b219d458adfe6957b4f4934e522537895da9d94e54d688386b73638b335e5358b4acef6eefd9a553151ab621e53f4f1632b59c846769aa8394994b61ebcac13d9e65dbac4923f5bcce074a06a4b14479ba120d3e5f54abd44ed69c53e22def0b8d93cf3374f7ea6e240cacccf2d28c87ca17e382d2f8825ae1b8dcb6fac0bc94de7c50b15e0f1f6166e3aefccaf4795ac15e195d4ce631e656c51ddf7bdd1731bbf7704524222dc0e65e81ab9d38a5c8dbcc7dca42664127e41d28842e6a29c65377043b8edf6222705bba58827c8165b61ec24f719afb96ca535d13182cb0a075588753f919cb28962cc248812affa01528ba8bbcb62d295ab9b71468bedce0e46de1043dbb4746e725af503219b891638c7c29b32532cc7872f98ec42c653c6ae3ca7a61b9e645643fdae057d1f1417811ae0910750cf2528de00e5d7a7f0d07b98b4d8b1f2c4a83e7a152c9cc32cf7553b27b1c97815c02b871fd9029b2cf3774e3e5e6b94f514eb9b4ce2d595671245436ab21c56f19c3a6fccdcd0fe79bd2971b31ffd57062eeeaab5346c9f910146dbec928c429767fde3466e932ca571447212716b66531abb0c75d3892accb84b3eea997cf4a05281b4112f814785546aac6e3af5da316905aa8fc3245ba60577b60bf382f26dfc925cc5692a0cb4d78f02811d7039b59c17a2c6a143fec831f07759bb986cd52fb7477e6d9d9c6f5d68c053fe4420aeabe5fea6d6d9c6bbb0f51cec6ec2dafc5bc357c50b1b3515f94eb7fe81667b33de3fad5d9f066b37f6ea5b2dca144601992f50a2544046fa7d9dc1aa829a934ab7cb3661f8e541afaf87ceef76a1d7ebf5daf83ffef15daf0759ae3eb77bb00363d80159bca77db03eb3db0eecc08efa618761111f443c67269fc9e782a411898e6926433075ffcff939bd1b04fb7b673bed8bf3f3e8f7075f6ed99ffb5f9aed607feffc3c3a3f8fdafccfedbbf2abfc7ccbff949f9acd607f2f18df4233e005c1fede9ee7d359a7c5dadb69eee3ff0567e7e73be7e7488300dd1708f76f198d1f18d88f5dcdf5eb32a4f164c3bea8ae983dd9b623ee87afef46d991e237d5850fb78276bbb25923a619bb9c6140c492f9ce1aeff15f7b386c1f1e365ad02d07a26dcc64578fa2c8ab9595f890d55678f1e2c58bf6d9bb8b77efda475a158d3f2a2bb8e05d1142c743d3a14dd1eff7bef8697708afc6fafefd70680e4fbfe7c32aa118c42f2640b70b1c02620a27a763ee514e22b8e4aa0e2adcceed21c011d046ec9db74b0ad202dcfd52dd296da41e7ee98a57f48bc7961c627769919d82bf2aa34cd29d30639a8de3b9cb592f5feecde77b947646a3d148b4747e1eed197fcecf3b6c2d58dd91555b75555b3515abeaf8c01d5807683e777a61fecfdf0756ad555dcd4fbf88fae081f780da800e4809e04e309a44d0c50929fe4eb3541789dd7d262acecf83e0fcbcbd8fb20a230528c6c08765feaa4233c11dd63dbbd4c21c8f4e6b54308965972bbcefca7b446c01c80bbfbd3575c867320978757c7a3784bdf1ab851157227a7563c784673a72befafc1bffe4e87d909a8d4f316cb4d4c1c5ac523ef0b620c15ccd5c5e4bcf527c3b4dfc6fa7a05c9a789db3f8e2ac7fc1bb8c049ef52ffc460120b404cf45fa19d051f4aa6cb7d580591576b96907ca9b8aaa1b3a4d7a8c0274326b2e1265e425ccac01d5e4388ab98a86f908def39b487ba60d85e1a6d306e5d4613d77eaeed54c1d48936606b87ba1051a698c1bec344717e1a4c27d95fd2b591c06b2a3bb176cf13400e368ea6455b203d4ccab674c2b8ad0ce56a3678d51e3e6f30c5573ed21c497d3abe4f69f7ed247acee3afb4771e17d3f17e2d8fda6093a055d397e52a2c1001a1f1a5bbbc2fc29c32f1b990a0da2a078c76014c6acc8ab81ea122ff25ecad88634c25de0201591247daa6a6fdfd7f7d973977bf3fc19ecfeb2bbcbcf4d7bf03ccb212245182714a870dfa27bdd6e916509edc4a49876b2fcaa3b2be649379f4e58d5bf50827b6afb5ee75eb9758b1f71cb66d78e6196de8e97e4f61d896ec7b3e5edf33cbe1d85c5ed6899365bfbe7e7b4b91fe0c9b5b5fba5797e4e83bf87e9ed7372793b0cf3db83457e3b0c57b77f5fa6b77f5f26b707cbabdb1159dc9e4e8adb93ecd3ed2199601d3c53b6ee7f915fd845634f7e60b70ff9b9c95a6464bd1ddfbe188e6fcf8e9e0d5f5f9c8d0e2fc6cddbe0ecc36f17ec8f384cdfffd26c6a171c7586209f31dc0d9bb337cf9fb1def2a9a3a8c41e1552f38b9fa270857f67d952fc840a15fcc80d454645ee9c4072429749611e5dd9bf655ae4cb7412164429f55975ebe45015c6a523129506923cbb22cf58941681a4badfab04511daa81d1fadaef69f9982e9c038b7f280017291b0aee55a5102b70445ca98c12f64c1c45a52d58c5a0da73b2e22f268a0635d9fd9e6dcd85a04f0670ff519525d72e7fe9b05e69b4972989e2d1a34a1cfd475e1c4ef73500b7f38b9c2cf26c422815bc1c50db08ee0dc1002b936c2ebc9bd308a65982faf49b595c10dccec52d0ce3ccc07c9914f122216dfc8972756508ece899107bfb17645215a5a67b7e1e9cfd9fe6c5ddf3f3e6edd9f9797a7e5e5c74af5ab8fd9750c1f9393d3fa73b4df7a7ffc37fbadb3593687645f18f5d3d73408529b74cdb255ee070aa71f2a3631ef1aec271a884f76565e0baae37629cd815fb5398c64912c2df47682528ac09c590a5985c7841d2821b9cacdad9b48defa548a3a507d0f28fbdceb34f7144a2522de08991a4048246b3c72151fc7ac0f5d39a41a3361c67bd0b6378cefad6f7dd8ba62f21a1356a8a6c766237daddca3669ad2256fedbf644e4fdb9d627450f12a9df71b34bcad5fcd40c62f676bc073d6d125e0cad82a3c3f11eb4efc35d7860148f58f1cf76f1b3437f31423fb08b8787fe62847e6817bf3ef41723f42f582c3aee6ea29330992c93b0207c1002351c6844191761be92dfd3e59c7f74969aaa542522cb413e531f3d9e897892355af52d5db658d1744abe91c92a50fc0631850f5e127a6b0f708c1b66737d6b513db6371709cea06773f82bf47bbd1630fe0e667368c3bc095d56e677929ce194c08eb20307ffe110df5130ec0abeb2e5d91c7232e5e7c535af2a7213a9785991ab519c12f9adc0dd82d4aa74eca4fd0f1b183b14650db7ad1dd49cd1e41d44848b3ebba73eedaa4f3fab4f0fd4a7874e502cbc86195b857cd568e9d4946ecfd5ae4feb4c269592477209475da1e0297ec3e8ced60ae3c4fda23af4487deaf73c36a5ba9d95615565d85129c2aad452df605fb4d9e35579e1d848f3f655b725dfc3226439ab9a5c8693ebcae5c099ae7635e0166d3d78f27551ae02fffb9ed825ebcdbbf4ed7a47543b7303bcad3107f7bd9a567830a881954f6eae7d1077fcb42aac9db94d49b444d07f2d32bb5d781ea32b425190f9a2403f60e051e09f1bdcc4fe718711befa70f4199c04b33aa89aa9ad84c74111d926281b6aa0c7032ce4e92be626b4710a21e464925da5f16f240231b48cf58f47a76221c80834680c52e44bbe06d8d2a0e87d0d4506bf52ce814d2b1c4d8347a915cde52489c3cb844038c9334ad1a9e332cf6e289a9ba49134c2a21d38c952494d9791c257a8d407e556849a4614d349b6ccc32b12954e20970472bcda44d8d114968b4936e709b57ecdd8253c2121251d788d7fd91e4872d61b13f766916e7ea56d46a313e3463b3795a12b3cf202aa16b5e24fd8f1d8c336e0edf81946266ed8d764f6c788588df327626216bcb7547ac8b0313675819ccd8e47a71fd1266060e639f9b22962f510c5264fc7fce6f9b38f42b057632e05b350d0f0bb29ca675eb246343bcf6dd6dd975fd7863c6a698c54cbd4698b302fa48f088f92c4d83ec96e18d022279f704dc439db8473b6ea2afc44a62883cce1ac98fa6a095c2579d6352847b9a6c16a79baae51fdd46244dca9dacb99445cf95451324aa0889649797c2a0c617d4d2004e11815e3c4e0cdf93fe502f94f26adfe130f2e6fc7cffed3dc81955a0f930b55e9f662ebe28fe97da8f8db027a1d2f1624f26a0c5ff1d0a103f155e85f2cd0222b44b067de82aad43393a761b378b85d8416df763e4e5b968d63b383db7dc0974311a75718c29fa216f2cc7c82b3fd387853a5b6c8a32642108c8acf404dbf06908f8091cc8622749c822431ff040f3bcfb3dcc89aa44ecb4866d355f008899225a49364574103eb35d47434b4961be6cc3978e4bf063e83375ab011659e7b80d68af7982f78a46484325d8128904f313aa6aa98b7029b0a4c5be1b905354b6d992e6533222525c7b941c840d0f5e1b23b18b2b7a62bb0a3cf840c7aec69ac6231ec0c3cf5ebf5536c7f40ff25aca8224163de04b84eb39b94b38c3b9bd33297d773b173d03384ad5674ade380bac99072afeaedc93301755ab0fa39e752804f3af669c3290fa3681ccfc938c3ab27db198cc5e17b1aad9f1f3b2adf47ca3309fff413dc59379adfd8c5aaa897dd2eeb263b1686315abd2e534e89f0c6150b4e9c5df413461d51935998d357645a9c7e22b95a33af647e133fc75bf71663fff0aef8cd573a3737a9f3b8494898c3c7feee0cdd181801981922a6f06400fd5dffb942baf32088e338b6369dce80effb4e451bfd367d2f73f528879faa6e57a1e0f3cfce0fafd1dcbb34010a65a0f24db20669e9b3647d59f4d818fb5998460951190b3ca729e53525619ec79fdfe5e12230f7ff965da3e5b46c3e2c94473edbcb5b41e8216e7cf74febb46d1128630029ef7949866380455fcfdd370f3582156f1e3c18c04c24378932ff1b68b6acd09695318ad46421efac8940e1a91258ddf33f386b59d72adbe8763daf02482ccfe0a6676ef33507ca8ee7f59cc9555cc54fa0ef9ef7012f5ecb9c6db4fdddf5861f770c946cf1d62135fd393d282b66a72abc1adec5c4ab015d2e1699b80eccc2c5c2ded06b27deffcaa75d26f98d239b9ab74abafe5a591956040da5c97c21a2e799c45e125a0cf125a1653f80d249969371f63712da0759fbbe223c8546ac42654888a9dc4bfc6ebb95b6823cf78db2d2a971e6359e294ec293edde1ced2b894d7785bfb6d6750fd795e38e7278b1e25f82dfbf549d59dce02cb5165665030adcf624ae5f083a82a95677eadeb0aadf324a247ec7af3be2315307ac32182be2747d48876e1778e08c9c60b49c74250e4cf8e2233df2c5518a9db0425890344c8a150f8038e381199566c93b9d3b03872b35facd5396c7978eb583e7c2af6fc2385d8ae57317fabdb5ca0a1d0915bc59b94ae52c690b5e4540b9bd35097ea28b05ffcd53c762376a0397e247f806798397569d9eb9edb3582e2d1dd9ed2d983c097ebb0bc5d1a76804e1139fdf12d64666ea51a96f78336fd3580bbc12fbb29f6290be70119cc51d1edb23ee88e81e71270a57ac83ec03c6ede9f0ed3feec8e8407147c60762656584203d8b6276f96bb5121bd3ce28ed7076f9abad17feb2cd49ce33ee4a59208463d5be95a33f0513ea7c6203f344b8c8c922cc45945889c3d1e1e68456c706e876455a390cb9330ff302488ad9a2c23c5ba6111c8ec6f628d14e184541bf058dc8b1afd41bdbe41a509a8cd59a4ca95e56c771122f5f558f8a53b9832a09ef99422d358655707babe5fe50bfb99ac258251896f223902d0fb4e1600c5682361aee762043aa21ab880c78c1ef0c295e2df7f024f0a5362e8408c6a0b5c34f538d4a4d472c63aeb81edc7c162871d3033bedc654702b07adea5a255bc7ce639c768c8f299e6f2a50eb67213d6db283842f543e355568aacf977eac02db06c86a4c8e6bb4e84abbb82eac9671e6a8b286308e8d4e386f67854ef49da96e2b31285cbb4a1fdbac53a6e3d9608ad785fafb2abe514879ac1854d59e4e2b116fbbca5c3b857a1e5d43b1dc29459e5cf142b26eabd326b66e9f03f004e35fff6e61f4421c2d6abbe11e41aab09d6034842a6cddaec85e58eefaf6f1b372a2d75bfe6f631e0075d167b4d016a739bbb3c8a4ce53e168a6d219e20b6d0b626a47a9c4b01932a7a5ef51a57ce0bbbd05adc86f7c219e8207fe98d06a535cbb9d63c2276bce71af134547f34551b2f4edadcb9516dfab8dd2bc3e3b1d9082a582428d4184bdaf613d315f52cc101565a9503cdf842b33d49cf4d0b88a8bd9f212ad0eb80982fc1353ba24b4dbbfbf7b4f3b56743ec6f480ef727c04dc3bfc44bfba3278fe11ff9a60896f8226dab66d16b3fbec543a2c6ae56ab2f987c73e696f9d5083c9bad32c72f31a46f605fbb6d7c2baa5c0f9d767e1bbc8b32263d27818a75576377cae8226bb2bb013af028ab8659048ee340f3f439cd282845167c3d44af3386dcfc3cf5dbf8589d78492db350cf421308cfd540c606f328a594c3b728fc76582e8caa23a99cf5b7ec2597d9fffd9e3a5b6f4afd47c790fa8f58a1f304c60cc390b3faf9f33362bd573c666f4bffd9c3dfdf7ce990c601d4a23b4b94c17cc7d5568c61f97e667d3f42240e29a6cce70239a6639844999f091779e5b9ae4049334673c43a49a8469caa3e2409187298d8bf853192758e1518d73bf5761967249cae0c718d4538b1d4d8191227e6dc1cd2c938916d8090203739384cc7928b41a347670ee453cb9fedb2a98a62d4994ef4adf02fbd82b80f53daecfb74dbe178adfcf7a1e574ed97b99de919a161c96c6e58ed954fdb55304dfaaf276aa6c53bd25f7f95bb2d9a63f36a94edc597ca12d93db5b28cb91aff2aa2c9d264dce0b6eade388e7094219a4bda504ce2e3a34cb0b2963f6ada967e22770663bccaf3022c6053f9977266192044a46b4a0d7f4edbe828d1a31fd1b99663969a05ca9c985c124e3f76ffc605a90bcaa6d1174dd361774d0a1251803dc571f318ae74ea08edfea66f5c5d81bb23c22c2eae5acb1222123a5f17f9761cea96ae08320fb7043c835fb1b852bf667962df9eff81cc83ef19b002f531783c685eb2513d343913595339fa92a45b666945d93152657f7337120ec71f878cb5eb40033c9dcc1240598c2618e5955f4a7e63b313d094fc40fcd66ed76b0de31ca6486651a172f437a4826f11cbdca6c04aa779a124812bf76e5cecf24e8597c516db463125169b7637411770ae506046996b6e3b4205724a748339d87494268813d74f155c418c05beff3240b0b877636454586feb4e62f95f43a63bb6150b8fa17179f279bc6a9c8a13ff6bd8b0e0f1a96097dd5c15d1c032a308980be6255e86a45179f848240e61e764492d204284b45af6e40d5b71e719914a07a25616783debbb7b786df1efb27a485af8af8c9570b058baf0e0ff0eda9712322dfd915d073f4f6d62917f1557da8a270e5c324941e363493753e70b402f0758dbbfff8fa86bff8ea8877144f1dfe8bbf9df201c6db98fa196b9b76b73af3e245d814ca163227fa73ceee0794a4853011cf302138398822ee596db764d1ba637cdff18fc55de8937bb0c39aeb1b21c3f541be0b0fc8fd124873d034a7ef6ef933fe8789bc25653b9f592e8f1eec1c7aef01f919ade33f6571045326c858854516a705a0e6061388e57996d38ddf2e761f3dfcc518cabf9149c8ae58d9d41c42289858a0b07b5f7421a410c5d329c188a97823080d448c7d6f6624859b2cbf465b0fa55d6ac14d19899816598e6eda73a06411e6614192953d616289ece0df1ddf4abc0b0f4d2baf633cc8c7739572a4c8f89522090b22177c9c16195f7f377131cb96055aad1a2687dd2e70171a5165952dd1fd85fd7f1126bc6b97d9b290a9403167a8ec9881272eb42e761ca6943268477cdaa9906c77e19efd1b979277b95d913b78987dde7a37e4bfa977be52d5d5f4805d2e2f2f93327b836f732ab702fbf55953b2c6e8a63221d9546d1d9528c34bfa063926e0f1701d1d352f86271edb1ad1e4302c661d64bba0dd87bb2011dde5d9b824749d9b998e4354afb7717a7efa6678301e1f9fbc707a24e2564b7b5ec10b99d9b33012ba22c3f6b787ff5bf752c1f10ff8a4a928f7ce751ffd32e2ab1406d0d8b14300a1d73747e41b59f64fb5d3e69f3ce71e89be6da3f75ba521f80efc46f2ec799c24c1bffe2569e8c2835eb305bb4dd82907cc0bda84bfc2831e03b5d5f6c61471e0a0f1815d0ef694365b156379c37cff387833d2e6336432f18a7ce6138488b8a329467c10deed8ffdb00cb806166d9439ec19a7f0c3878661c520de4a43c3ef599fa4896d1b65bf3d8bdfb90b33efb6a6a0b289b312397c3106e6e5d1abd7476f465a89cac030992dd36b92ab1f1a3bfdde5eafd780a770d6e8f7d898357abdc64509d0eeff7cafd7000468f77f669dbfa70050f9c1509e4adeebaaf8a932086bf72a76ef77fe0e925c7a8554b80cd3d2a3464495128e35a27a95c330558600953af01ac5abea2500eaf810e399f82b9f8adad0bf500e467acd055a4f0366ed40243b1adddae071bf9f46bbc1c58a8da63c30ee0488f2ac7f818711b604f92d8917ef5e785f13547dcc6eb2af0f42cf4c8cc8d1f4785e93c64e03f655e53d688b8f9e179a3722ab9d7c9a2bd37cb4f85b644cb56c01c88ee4ff2ee34f61c2a08b0ce6594412fb256f926429791717332135054284f5bfe9b1f38ff3acc7307f74b577a0bd5531106ccd91cc0c239b3fcb9e028d9f746d36ec83a5aa569958f80b1e07d334d9d046431d55e07a7cbda598a6ad9d904f24817011b7e0521c06f1e5799af271d5203a4eff443882713c2781f85a92b883fdb39be63a569eb4590c3d8eaea1f6b178ac7cb98375fbb7675492aa474ef7102232ee09a963bd0e75bb709ac2f33827d3ec7367f73ebe6dfde58a779fb19da826932287d6a97d4b75e3629924ddfe2f0ffbce926b6b8794b988fc60d21060d8929fd9d1a7ffb36749bd3c3dfd872ec7f1855e8d8274e69e844942223cd6632228b502630af3651116242a73fa890378caa3b5b265774dc882c778e1e312a74057e9a4cc972f770f81c4e58c5a57e5e1e9f0e864acf7823588332f6296a24e624ec294f2f7259ef7c768ba256f020a49389d92094e9a4a638e5720cc68f2f3debdfedeee03d8e9ddebf5a0dd3e2b4f5dbb2d6caf79d16e3f55c84af8dd5e4f0c51794361b24b424419a169a300f239a62256151f36850b71c85b4718fdba14591931a64c48f18645a29650a7e0938fab49f907210bd9375e51e6e10ca38876e9f212c3bc5008981865fd6eaaba28778b32af92ba86131ed8a60363218d6f662b4624e31fd0e7b31c6471cf16f58e53988494b01bd34d98161496e818aecd9760a1f02a8ccbf9fec8018ed3d779769513ca36213ee90c1bdb1cd87db4bca2f1415372ae3cc54833eb3403ba9cccf8c8c45c538589db6c56d505c68814525e883dc4e043fe554465713616f30cff517cf5bcb720231e6007ac3de88ea974ac3a8870fb09997148a9174fc2936a5d9251c7fb2cbcb96d1468361cdb1e43ed564d1bcc75afccaca71bbcd5964648285ec34b2a77df27d07f804e94553369f78fffc5979edaeb50397dc2280493dc6bcce36d4563057e932fb72c5440aff1123538cd352b01ed81ce7ba300dd0a499051ebc1c1908551a457684163ee58167b064750796720e8acd43bdc3165ffedade8832d212a79258ca291107e38882dfb619ccf695bf02eef00a686f21e5cc0e4a83b5b52e307afd63b80ff60c53b82db5245a5ca86ac7b4bc51cf9aff7d682ab3dafe9acb62fc5e1de1aaeae3bbf8d48f181ed5d5e61ec3c2a6d29e1ee6c2ae1dabe65e578f9580f375e8a1d4f96af18e476cd0b51e55852b9af8d33b460ac1e487d2acb467a9e9eac6d491899d54f9ac6336e148dcd8830c095a4931a53970bd64b65c424cf4f81877fd7c93c4fa4cb728a6b078dbbbacb4348c570d5e5aeb4064d5510c2cd1521ae75b418c8fa33007a6ae2eaac3a03c8ed5fa0f3da582182b53b8ed61d566193d009eb51f5fcd2f4eb677116d28324be4a49f4325be6c639d299c70d0f7a15e1f7c0399fecfb2ecb9a90803d4b6f271a086c69026db93bff151ef4f84b509dea205c25f1d5ac18859fe2f40af76baf663aa865d2a6b094934f2b5c771bf4cc2ed806c89b21f9d9405262a8558838bd1acde229bb1bb92bf28eee052145d0e1682c6a544ead0b5afbb4e86a81340fdd095f64866f1e0cc0f238731f3e279d8f61bde164b99dab3097a296f96835f144b9747b28ef46ba55a5bb4e27d99c918dc6741431b784f561c1c3abb0f5f27483d8b15e023c4bcabffbf9e6c6c72c629babdc45cbceee837141d83368f1a17eabb21d6f867e6bec5f81f7a79fac5b07be1557b4d6edc2c1e875e7e4680cbf52cce4ab2211ea89f2cab446654aa3e0fcbc7d7b7ebed3dc0ff63145c1dde659072e7846849de6f9f91eff8069dae4679ed6e9ae957d4dbe77083be3289ba090a0cb9cb493f8320ff355e72acbae1232c922c2cd8fe3a22b403eb29f3e32caf13f9d5f698766cb7c423ab3625edac7d26c4e6ed09a96c72f84244e097ffcb9dfb9dfb9d7d985dd5eef3ed00599f034bd6822452112864861baba9991bc7ccac0707dcb1c97e23c8be269ccdfe2b869155a53f1780be8892e62f25c66c58ce78c64d555e27c91f44b1b5e31b8afd9e89eb5772ef6cf7aed47adcec5dde67b3ee466e1d057f8ce5778888563f787971be31d591368194195fa6a75ca5e39af31d22a496e916e7c33952d1b5fa2a8e0c805c414735ca734fe445a10651017c07897cc9d7cc53264339a939b3fd1f82a6d3992dfb61f8aa7d337f8206e5d65a87957757711ad7b9ea3ce9cc29e50331816339ef8f51194a051b8f2810c35106ee0601d99beceff4befc217cfe1d09e55bb9eb0c8f4be7a545bd5cbda1dcb92a8e292e7e9d79d3b819c774d68f1b0c4a2abaecb1657aaab20d8fc6cdd6e30e9daeec39e9b11bc767e576c46ec674590b329ec21b1a9c383f1d145d30653ffeefaf894fd9bd988304ad257209adb8886c7276f6b68aa44446d44a3a367a72787db23c2c5c11149431545daab57c702ad30f46a36052219e45eb78693a29b1b72a1ca64922c231e33178119da8d168bc654b191ffee4fe3a83de15c4ab3a00cf9ce5af165bd18bae0f76ac06f5cf0fb35e0910bfe730df8cc057f50033e77c11fd6805317fc1709bed1d49603afeeb9dd2e0f17c68da2f1153fcb4b77c8cde4a47b71d75a1a4083bbbd34d07cbdc10e400dc6960ae6f6161a456694796434dfa04a3f8d436138382146ce772555593bcd16787f2bb2a6fb0456b70b94b29a5120683104775585a10e8f5b56cd915f7a17cb2d570dc7fa7d19837c85f4f4267d9d670b791e6908e33c7fa408cd744f6caa8e9ba83fea8693a5c93c0e75a66c10d537e5adf7d80b2c625529ef386559ee9eba24f7e3794b70bea54c7f471a91301c4e56e8e8f7af7fc5e94204308a293ff12ed3699617cb14ad28d9b12a4c6866e09964e9278289e3932c2c507318a7ca754b0031c4f3700597a45c32a84c9d8439992e135456b2839dccb8c4ae3bbacabe8cd6c250c9f031dcc1204e172a2552a3d56841a36346076727f3c5225971097c338b130237a49113080bd09d1ae4d307f713c90965a2995d95f023df552aaf678b8c3bd00d9d657789fa50e1ade70d41633d14e46a0dc0405ca4f9d34813dac0b0a9af96692a7709447bfd12967f6b4a8b557d75e0eff2f5258ca2a06cb9058d61a3d9116e4ac2d7d0591ced76bec17aa5f6d16d873f57b461673d095ebba7ba8036aedc5b3301b64a97d354eb485af546f4bbde5176e01396cc7bd0fb52353eeae9c6b289c2f216cea11d734810c8ddd7aae686b3d6666cb9812ea31e5905b115f3dfb6cb7c55e402d888c5d6fa18f2dc08d048c3396940985f41c8185bb93bf317169942c17b8b3d88229207519cf34c912d60b87ccf31a5d9cca73069c182e471e606f71277de1614f385632116a354e5061fa54b2113c9936cbe48c238e586f0603b65a1f71536a8d2a9a0f69ccbb41d418bff9a263dbf47f17c91908075afa53988376007bb0cb0030dd1484bd9791baee32acb44e941ae2360f5793d353a1d330f85fcd71889f49debddcdc3286af36123517b11e6e1dc494fe18dd03d5fc0003e85c963f61fc6e448d063f117069ef9717489bca638d4e1174d1303fbb0c3caf6b015e7fca336747552d1b9c6827735e5c8428a292b6cf86c7d65b52340891ffda65bea84d68298f258662dc3acc835ea35d7ba3ae1d5bd6b089f1375bb2b2bb15fec43be120d1e78fe9b7b10bc33cfe635ea9b6e174e32c816bed1ab923a96b19cf9b534f5c99704f68c5f5d7b664eb473632405e63be51371450afea18185988e578cc45d353715dee43cb7f7cadbc48f7d81f630447fdeb21d2c405352363d1b35a2cfb1cf975eb759155f759b558377366ab09215c16f95c1799af5071ddf25b358d80d3fec308af88f036323e8b7a01146658c3ef4f4906bc7046d3358f99be6efa09b4e3c0b139246612e8297cd5722702ea4d98dfb56ca6d972550877d0fd2ec86bb69d386ab291582002b3e81f603d887060de7e428a1a4619a8af37f12b2cf20939016ef08b9ae83ec49c0c3705507d7974daf81db657022d6611ddc43092708d4fa55ed9b2b06fbc73e4f732d03e238d962df11348a448348aee512b1f265ba9c2c0a572df844b98ec5a8fb82609e120edccea66d04064c801a61308e9b19e1395ef036529ad10b4d4d96439ad9d7201e15a0108656462409fb411b772ffb58895c82cac70e12763a0dd0b5dfaead223a8ab85c267bf2bd87b263cdedad39e226b9d9b2e06a6f99ceeaa79fd8054b26a21051fde819ff7bc16e5c561177f4e70de25ad8b321bc57049c0f0e100822a4611abfbd1f8645183455c7021912493740e303cb5a6dd644684ad0e4c97712d48230eafa5e9f720fef594a41b24c634f7413245cba76db7e0bc24dc1eb9ce05c71dc583925ee0dee3935660e48b9ee94cc7dce458718b3e851222cc244657678d2a16a55f2e5fef154ef84cffba2d64ecb57570471521754b962786ffc6d544f31bfaffdcf1c7fcb1c3ff9a639362693a491672a3768a16e868b1b425208a6393b67149998e5165734d0f8535cb89a4f6cef799ecdf519c77759260d59b939dffcc9d6ec20e218673a8622435380ccaa5d641bb30aa3c9533ccebe8d7db4b1c017bdf21b639da0d970cf2d8106a5bcd88286347590cf548a6ab5baf6405a6e89d71207c4b569311a938a9aa6d6988e6a9c79dad2a8297faf93fe23762dfe8304839d5f81150edd57afff96e282d5fb2a81214609d656b7db5eb755c09381422ea36f0e3113d106c2693329c498e9345f77a0306d87581d0b561e97243b1bbfaee1e5d37ced66b745fb62bd6d46005e0b0cd81684147505ce9a2a664efa91dfb2941c92a408ad727e8674df1536b30b753c7dca2fe889e69ed3958f6dec7bcd6095bea955d54d184080d84c9b52db56b3c9e3ad1894d4ae6b0392dec4c5640681cb05ec1fba9ff118647be585012fe787ec622b3c29666c02bbd0df7d0c973909af1ffbb0f0b065ebd0d4619031d03620e55e1d1e21a83434581bc756f4842804fe5037a24b3cd25a0d22363116224f381c8e0de3b7d5e0baf780fcec45568991dd1e2b1042bb643486fc9707f7ebb0c35dd8bddf82945c85058188daf953b0398c47b7617b0f7af77f59db20dc8587d58d46641a2e93426b506b6f8d4242881dd89795f720bc6465592eeea435410725cf4110b6e0d27e988894ee0563e559465e4cb6ddccb2840c15960104c165a91a0c0dbd60137620b8d4b48ca1fc6c9f1eba5db8e486331084e96496e5d0863e88f421a264479658f616e2e7018486cacfa454c61ea4ce9304afbedb12bea48e54bc6484f3267ce15444f535cdb3ee6824b8befb499c92309759bdd16888c15a6d490f418d28c690e598096ad69f4436247be74f207bb72cace2fc6e17ed64b8990c5b52f1278201645a7251b02f6cba8c5f9da5d376fbc7896bca906646d3fc914aac5595ceabf1fefdfbf7ede1b07d78387ef9726f3edfa3f4833c607aaabc2d2615b5ce3e5c34dc67db22e3ee333556d972c6f89b53d02069a3299fa51a5114c1703884c343606d826c0dce5e0cc7171f3e34aac543911d8f4e85f3ce35210bcf0bf816c71337508afc88c12d7158ca56780c47d31912353f3040d87db3ebcb6282fe2c96120ad50552203d811e3ec8cbef4fe1d1a3478f2aef1a387ee206c42e72d828ce9b9cb9b3f1851ccdce683462f3077bb5201f1a356a06edc512e3ac2a5b9d8e36115eb552ca991c55aa7315362fa6f0af9f7b9f611ad282e43cd2765c88206e0426a1c70d6e594cea4296e29817198ff9aa93e586a05e17c15ac58eb56e533bae0b8fd845d1f2d26cb434caf9d0683953d6f8d0701242d77a72d5ccf9da195f33dfa5b5c0ddbba2ddbb65e09bd9721ea69093300a2f1362c73fcca665640e3c8194537717ada5e0920061431816dc1be08a1410e2108b6a3ce45dcc85320de732905d49cbff4ae2f45a052d49b388fc4a3b597ed58d625a7493b020b4402f896eb888bbcb224ed0d5e12fecd3c7c99216d9fc639cd20599141fa504f9c8fec7e36ccb76baf6558e57f1f9506d265684ed80345d0bba77a12199e8630c3bd080bb5de3b9c7923c8c142691399e86256f7ee3ce8c0dfbc9405227d4220e7502abc3cb228a92227b594c9085c457b439fb90a5c48eb326e9f850d393454ea6f1670675c6860049d8814670fec385dd2d0cb73a80a0a71e058450949e3c52660e849014cb40137036ca282c48c1e3b234bc8bc1ae4097534e2ef66d071a67e73f342f1aeb142da2973bbc0f3b65bb3b0263f58626f44dfcde3b72e38571d7bd8a1f41bed88c642677c1026f71efd9afdaecf77c3f544fa2a5ccd2343b2dbd798fded5d53b2d325a18eaa99aa1c9b3b9d4538a8839233e9a5e6fe37a67bda00c7855a03b35e3aa784ef4d5eccb1c63be21b39a1b3c0a5a862dbf17d99ed0afb13eed61c35fd4e1481ba4a0d9eca0e08d7f23c11db3d35b3df61b632ee410df2237794b63549e643710540fbbb10af26c1e982a59f0d2ee3bcffdf7986131affc9924fbaf3fc345b6c5fc16d976b3dbedc2f1141621c544b132d1d33559b5f0b0172709b0e3b48a754594f9b5aa2fa3b876004e8b19c96f624acada8a388580879c14d3a1b07c0af3989d5ea86aa0446c0d88c0e33873a1ed01b979a546dbb97e5f93959986b1de935a643efc185e5eaecf926db46c84d065747a7cd1cc0a6b03169416fe761f75d0cd22ae584c80ba9b1037a5fa043c0c28700c298f7954ea96694aa933bd3c54221784e9d532bcb2f8a0830107adcabca208f325ebd18e3f5b8fcfb56fb339b7e75da77cdb7b892e3e3cf35e975ac7e26fe48a9ae0fe8683873195c3d1c7d7476f3e72a73318e0cde7b1f333f7998301bf1d19755ce097a76fdf58a0bcbe0b7abfd7fbf8fee8e0cd881d10ef3df819eec2fd5e0f76e0d1c3a67cccd4b0ea1ed52270dc3c8b9649066d988569c424827a87e116b914336de2c98dc22557e2f41f3dec35f79c07cae8c77e10c59fe288a4510bd8276a055896da5b09057f956018a05254508595bb234ec7886bd450b6af5a306f4164bf8ab225802eeb2aff5c96434ee6e1828ab8ddbdf6a3478ceffb8f7abd76ffd1a347a60c5bc11336a36ccb5cc1535f2af96e17f002987f2290907021f0f288f2214c974982538227e0c96a92c85878ac52e17f7d91d7ed15ecb0bab26f6d67d637dd184b8c02d7762ac46531d960b0f121e4edf8d97ffd0196947ebf012e310a5c9b0cab5009fbd460a88c8ce7fa8bda3aed9a3eaaa592bccc817c7b0b15ba734c86b3d90ddedddbac7b62c9262a8ea20c40627211ec39abf82b55849e2d9c5f6d356202eda28ca197fb3edbff0d9480db37865f4a4d8af1f5af706f6b528446f3db08d9ba55ae65fbd646f15b84877139140c71842161b6a247e474f9de24c9fb142247b2a00dfd2d694305a8ff87827c578ab7a38bab7a2b9be7ab35aab46a51a0ed81d8ecc5534e60aef39e78dbb7de858d934cb3a51f4bb65c0042fffd9d3bd2b228dc8a26a9dcffa368e247c54d68fae24942a25c2c0a2beadec6612a37099f86264affb399fdb99b19d7f3e286c624d57f914d0d76f8c6b63549df6573e363f215adfff19b1cecc0c3ede9fa7337bbafa3f1cfdbf4d8f46e4fdff7dafc7606c635bdfdbdb7c2ed97cc77db0ecbae89e78a76cdf6b8359ddf6f8b2ce914af2e5e3ac596b9219dffbe6d5374b7eef549778a6c4320984c8b4fcff5eebd5eaf5aa1b04c633b6bad9e656b8a4668967e9f9bc7d5292970f3ab7475f2d80cd421c3d8909eccba73c11ceec09ecd95b89897b2622e0405fbc496bdf819d709ffcc795196abc343d0bca8218fa7ccdc8a3e6ba3c7978b3d65d5e27563ded37a62fece3ab55776cefc111303ee890e5317370f94bfa7c6c10551512ae4f0f8b0e8d12c8ca1a37a68d66a7ff222fbfbe8f4c41ac36eb7e49693f0a4d9e15042039f2e6512737b5d38112e0d7b13d8d3cd98aa73baeefaf957222f6afdf416614ee3f4ea79125e513f1ef2b9206914fcfe053da95f6bf01c758de53cd75d1d54040ff562eb649f483e4db29b4aaca8b08ab354e80a5cbc3e35fa9e3cfd7a9d42e5af539f0f12d9339ed06de713b651eee9676b9b2b8b3c9ea816f8b71a46f32601b4d2faf55a70d6b8ba6ab460f7a22eb59fce6aec00f79e1fb8ffca84a26cb75428f81a79f162ab46c449acbe1d3d348384d61a56190eaf485190daf4868c44018c7f4492334eaea86e8fafbfd1a071758503cafe35e45835b4e47a959544adcd2bbd7881a3aa0ec51b5762b59c4a8a6b0e5e1d1f8c8e465a3fd98df42089431a94c4b580318ed69a06a4a36e019b7b3391e19be3d337c7e3f7560baff338cbe3626534d2b75a2881cc46fabc85b28dda64892fc40489248818e8bc2257e2d5e6a02f245a04ed17d9aec8b2b85b85fb6acb0a72c65585fba2c2fdca16441b9b5690eca12a3c10151ed4b4705559c1e04523ada4a8a6eacbbe090a7cd926195bc8649362a11a8b9afdce9771872e2f6991079887f302645af5aa1c927efa04eb7e1b25172a4c00dac88d6fb2c3f82a2e50b0d5a4b4b4928859894424dffb22f2975ba206f892240b926be102dc5b802fb030c80b00eb8f7304327ec53b7315806187f2918177a2ec662be855f5e18077f57874fac70d8bb129a93bb8fe5c802977eed7122928a4c72927d247df4d09603e01acc55e8d1a3d5e08b93e4ea799bc5bba63ec9ed82b6991c87012f56f6b27c91c787335092e6a016265c87c9da0e330bf2276ae319978ab36e529ab7e3a55ddd11ac29eadd56f6acdc3c0181dd10f85cf63748361cc9fea38bce6200836a8e82954dad9503eb40749a287045933bc1be96515e2406eca9bcf5714aef8780bcb24f5fd799ecd915f3740eab9f9a910426fc7cff0a664348493890737b3587d6bba99c591b33122fe1529de8e9f3d5f26093f7beaa3a43dc369b043e10d6603469c320577e8a8a96a9e443639bc37fec953e736fe99b1ad4a3e616f7e969335188a2d4f6865d587cdcd7354ff53a69dd64f75daae8b00fe24d3e6e99d959c0d4f4fc62f2fd0cd51dbddf9bbed5db8f715fbea3f79af6af60f43d0c03e7f309a9038112f51dab33b7a8c4ae71ef183cad6c6499406ff9abac06728b99e130e1bec8e757828ee588d43e4087c6ede9c1d221ee4ac7158c50b5e4e10b51e6dc10687fa71b1eaa88b9dd9f45c8cfdd518878ef076dc12f76efb8985c7bd7cc3e35e9eff90e5519c860932e2f90f300d93e4329c5c439c424a3e17300f7f455b298cdbd8f13c8ff0d6cc24d38134e244b98342e2546b076e6f4142e8ed37cd705ef5485e91342669e13dd01a87d9439cd74376963d3c2815bad6eab347b17ef961347ef368ad2727c7a93deb5d6c74be65bb055f8287aaa3987afc9abcc0e24086e093cfcadb2c8e43b93cf0c33d5c20877289884d61ab7522eb70445b2e97b2f2fd6dd6cca1b16aee55ae9a72dddcf34ff399c0c561bf2eabbfeac5daab95373d7fbd143e54c83d72d83857c000b494d341e10b32c223b849eda3f32baa9a9bca011f25b7bb45db62bfa44088f7308a4ae15e9e341887797ce936e1da39f2ec7c5e3e9b49f5d6e69c2a2aa80c7f9befefaa667f1b269d6f22d8b14b7582dde0d539523f677c5a1aa3ac17233c1bae2542448adc86961b758b09a13821946a132203ee6c3c21a202abbae584a89afd9fb79810bac9846097369e108ad4533621a525cefa0919f12c23e684f0c2af9d90113ffeae7d50fed7bfc4d94cd76e71859eff2dc879bc1e8d367dbcae6e6be3a646628fe22b5e0bebf4b8b616ab767fe3f77593bebbd0379ed7eb9a61edfcfc0ded6cde106be9c1b7b4b44553acad87dfd4d6368db1d67ef9b6d6b66a8eb5f7e81bdbb3f42f9b6e4025ff3276de56ea99f5fb0fb6107d23feb4ae0e4c9e9ba7013e329ec9efadb970f03175c0ef9504a2a51f031608a6592e14523000be601f1bca26745a1645b0c3601ab6ca4aa34068abb0d5b72935d4127edd2c19d2b5376a3d67943cd9058d1e86a71767b1bb15861066f7b6ef9bb6c988be09a2b5a6d6effa653e2b7beb2fd5f35fb9ddfcc6269cef378ddfb2941c5c5ee65542b9f1db6f6a7342e093706e1ddc6acec01f04f63a3b186956d5783b7e86deedd5119d05c693b02aa1ad85f159c62fa40589e06d1a7f22390d1318c773e26f88fbf06745c68ee3221e8096af8703614947c50b57ff066ce81eeb3032eab00e5306a5364131bcb0890ecb0c288c7a6741b13203885bec9a40586640094f7c036aaa7bc60bb03c9bdb2db23207e824bb71804e94c502872b3270c6acc82c10131107b1115d91c241c4f330bc2026fda5b94509a9ca4c48119c59c729ca2c3811f4d080e3650e200f146b02629905899141ada65999074cc67cd4c1449917baa47660856db4c0d132c6a24118d31890e8e66a0d3e2b3381b8a7ad09a4bb5bea60f8a86e81698eb91c741e7e76e65c2dce61f8d9048ed31ae0d81c7ec3dc47026b650630ad64bd91c57ad211cc84c432134ea613d0e14499b536b82d9d0e28ca2c3861d466c0f1320b102dfd2c84c2ce5d075306581a982ab3d61b8f26a3a31465164e3419b39a66651698d1ae00f3b48b8690d6b4b03203481a65ea40a2cc14c69a359584d3cb0c60f45094507cf37e5feae0e4e27a45c28578e7b922c5b1fa6e804915928e4bea192d7cca6044016a5a630356e837e40290dfa9aa285405e6fac1674bb357f894696e47e18a1ea7f289f30adfbb6481d33163d4cb620a5633ef4a0daed159bbb228a6466531084ee3529d2c413515b3af2d093e7095ddd600a8e533705e7deda1b23b80f9494c8ed55078bb21b0484019c2c0075e6af4f5c1f1c3966f80260d4e7f67d9b26424b44955155e66cbdc16c1fcdd4aff5ac2f3172c4bb48ae3aefeb5acc19f58ac36f453b253a6b7a60a4db1a152b97be641e5f131e0c1f937002a81c7d9dbf1337787abad81b3e86c481883aab20e5e31220f81b3901e2478856213a2d216f98a2d76391c8d5d32637a18ae92f86a568cc24f717a358e9d33c92bb78303997fdf027deb8ef640cfa7ef82fb287a5b4c6cc0f1b34d00e555874fb0bc9a382078bb18e8770d67cd5330e27c3478593899104ab3dc0eeef1968a7805318ff2d1e1f9970c61d174c52f35db1065758d70a92d5a518d78f073677b133f2fab438f3b9d8d5d9a2198630860132fa292e08f066e2be649b922e5686d98198e61ee2ab2d8d4355d0e1fcde229bb0c1ac419bf58fdde3c335d448b36e548ac9474ec52156769a3e55d4ea2618f2db0b00c41178f4a35be9309a0f259c3447b9c7ea84c68a3e1ec6052d50033e997490a9ba5880a6a9e6a728272ea754665b4d680ba61dda4e18f7ea8736fe43ff661007cc3abba93ffd8776edce57dfbb1099864e9153be80abaf0daa19758e05ac429295eca120b56e8c03551244a2cb8454e70144b3877c0ec2a2a9cdcc655729260e017c66abc8a5e62e30f69f17c592ce5ed96dd836489056adf83707b72e643082d034efce3d7bca19ef2d3ac359a657951570b01bc555f6be3eaad8a00deaaf830a9aa6a65d5348a2a12ba2cb3aa088b384e877d08fbb1df99c639d554c612f2b9515c59e79d8efdb951ec4c8b384b52ff108973a33d2bb2d290dfad2b2a59976bad9e98cf8a7abec99435c57456d49473e9af6bcea7f867fc5847ae9a5aab62ed1c8b61502d3bb5e58f0ed1317d3d5473784c5f0f6da623791cc564ae6086a2c09b6cf0c73ea87c67711a91cf2d98c624895a6ca9da6e242af90c3102afe9467e65946865b31834992008383ed18ac72e90233ec3d62f82653191a182ab378f24a6fce4428fe78bc4df11276e624c4f30bc9580766304606dfba553fe53c9f05444020dc070255590e2c3ed2d7f4cb6a8c1c6aaa2d29566dc3ff62ba64938ce37abc86013125b139461e8d2b38bc706b510c43080de6388e109e6d68877761c8ab26571165ff0e9d7695a438fd5a16ce924c4ef76413a12b28f3f6b9fa7f3a2055681f60d6da4ccaf26382f71b0a8e2a687ada4e0e08cc5797394e57816dd88cd440a60bd260f59719965090953376fd146ccb99641d732a9c32175ccaa2a784dc4552dbd978fb7584de6e8a8cc51ff3f1a177ba9f9c4a3edd8c80ef3d6a0c1beb27d94fe22b087c90dbe595c883a3bbcdd26fc151e968b15adc5beb3e878b895e408e2cd49b3fae991229eadc1da167cd70a731fb105ad9d4aa3ae317e7ef94e2d22b235cd4a39552ba3aa28d0855cbd8c6bc863c986e48871f87368da669cd8c1f44f226b18a72e51fce5e145925d86c9ab3213484b6fd66ffdbc07ddf3f3e8f77e6bf74b50cc6e69719b46b779d4ec6ae2455e2bf734c3179996df5a8e6c315fc240c4fa449f638f3f98965b09ad2334e81eb7f3c24dad8fa1e78b99373b7370a9c1d0a20e661761d2a80ee61ec2e4116ae78b991d825fe531414277ca6c6d961c318d76477144804ca76452403c5f647941e5afdc9dd189db2b7301e00fde7736fe33df0f9c573d9d032493942d490f226f6bf8e3ba163990d16ad958f96c320f8bd9c1259596c5e125f5b89b5fda010e442281501b7615c4c58e07cd8bad0777d16ce0fee8f8157d34542076554c65ef54315e149cd654aa777dc515a1a914d0aa393fea0de28faa92d5a0fea353492a3bbc95c48f4e25ae4f7147a3fcd16dc7785eb1db71f2de47d2a7acb219fcb1599500a2520a875134121a6b76e98c44446ae5b7874ad61644714eb082c3711966481fd881e6f5ead6accaa0d726fbed0cca46e02e476b823cf6e130f8d08f437b10b1dad7e7a0a27df9c8e58c6a89e672797999785e53bb5da0cb054a2dc8d26405bb9d5e9b16ab84b0510ffadc001bb21cbf4a7cf6b5278c223631c6787a7643631e4dd74b3185fd6d0894560c3a95aaac8a54aa31d2b7d3db7609d685df331227de6d14a3cbf37dc69765ce0db22470acbd57e935d1dbce53b18a60ce23be5845a6087645ef635bc01b72b794b7169c256c7521eb60d4b60c6bc3d0e1043d2d19bba8c5631cb57814a59668f1799ecd0f393965f56e97cdca0d8159f8894008f3f8336453586434c6c8e6611a9561ce71fa694b0e5994dda4806fa5063ecc62b7a7722e5dc5c56c7989fa1dbee1ca3f31a54b42bbbbfd070f4c16b91304c6d83f1d0046bdc601965fc428f238d8be9c1c268e273a8e27260ef6d593a6c3968182b3035e6b9cb1b1145f9a98b067459b705724ea345161ab03957b4fb5203592bdaa1b65b70be31981699624d94d9c5ec1248b88187f0acb859a124a0886702f082d30558581837c0ee70b56239bc2cd2c14f9b6e6244c69a76e531f9883f05769355fd6317772cea72a51a751d98c9006dea3c000caa61e980d99bbbfd550d9c603b705a3e64021725a308f0a4e57782d6f0b46cd8140f457d8bd6f9d9956928f384e0ed785ddfb4d7b4d4eb2f413c90b5ea7c89c2ca5e68ad6096535c619bf2ae317c3a55c70dccec095090699ed5a7697b59a0eddfd5dd944fb29f451fe94bff343923ea81c9455f310f9d701f477dd53a710b3182e80569cdd64f72a8e69034ecad627327d6c810faee5392ca3eb532e4ffbf71ff41e3de4431a14e1355bc1715a64104e26d9322dca28fd902f13429bb5c8d4d8b25bddfd5ff494c7f2e4c31aba8bbfb151c5d62b7ba34f2c2841e66685c8c9279253c264873e004ee382b8bbb2d75da4a3faa0407d417ebf2531b8fc283763efbe6b176eb0c99735364fdb6de7dfc7377e2b16b30c926015739753bbd3620bd1ae783b60c957dfcea3168471d1db01574c5815ebe330839335dc6203cf63b29d23dc649bae8ac8e0d611f9cd1d56eb7201a157f8b2eea8d8ed8af42de6e851b208f3b020c90a2ec9245c727e9f265958b045bbc8e2b4c05b1d903ccf720a011e5fe02ffd5f1e3c6cae9f2acd0fd910a8c615fb6be700833103c09e2107baf010611c3e11a9bdabb045e18a21b3b0c97f1b711d98b1841d64986ec7870c53a857b21a773a7670f5efdfeff9ba8939f7fda86404741bd52f0f784e20cfc9c583abdbd52e2bb060823265a7af6aae99919c5477af7466dbf35c864a12b91f7ac5554471a1ccbe5eccf2ec06c3861e312282c6dbf43a654777c6569855d489250fde9450faed9487c8784b89f06fa7017aefed5b425e1882b36be77717f332439259cbf37cb6e383d047d3863056253bf5ee6286a89f1fed92070e367ce6352a7445857bfd9fef3d20dae5a6fad63c0fafc90185204ce290fa2ee5157e996079698554a0d087cc67fe15d2a1fdc2c82808a40f660937320fe812ce061b5aa76c89ce027b691e9525d8cc023bb4df3039586481bd336ddd25d88d4d9bfdbcc9c18616d83fa511bf09f64f0becbdfed65782ad1a3e6bc3244b89c3fdfe0490f5e173af48f1e3ae6f2bd8343f445d38e0338e64071ab47181f180cb55e767d617689c12a4e1dcfb86b421bb3a6189f175e38c61bd3088a8e463e79d5c91a6cb539359a9cbd1b28e0fdcbe3f1a4df088113af8cce570098e3f19c0ce5b7d096c280f3def46061da6c255a642ae20037ff2712b771df1f2aabab389d8652b8a710b1e3a0ccbdac6738e117c4523ac98e584ceb204e74b6b88d23db87fbfa546a3db8510a6e4464d5791c98f5a25d883fb3f1b9534703e3ddac5d28596935b643871da6b00ecc1eeae01cb67b6c8d8ac69174b06f8c000346eed25e410f6a0df07a3793ea745a65d95bfe87ab619464234723d4bbdd534451fd196f5fd24bb69e1b39d2856afe1d354658db5e61da3a1c6c5b240f3d583ab4c5814b78456d04ad6da829872f3556f002dc33ccd3095958fbfb7b7d06fc19d3b1656d9a8c45e2d0c75a44cba2e327a42ae0e9586c442ec2112179f8077552426be6627bca48ed19ea6f8e2e77a35d021df1eed0a4a8e782bccdd0a4a92782bccdc0a4a9a782b441e92a448f15618ba159454f1565835ac1721dc30b5573dccca2e977f8752f8e927e0216304c40578df72557da33a80a86f20f0d59743ff64007de307ac3f6f5c6845b5f5f5f6e7aa3e462ce220fef6e54cfadb9fad6d5fd5d7db9fa9fab38678f1bfa8a82f19c3df7eb4b67d555f6f3f52f5a30606d3c4e6fde327f8ccdffe70fdf8cbfa7afb43557fd8903a8e0afe916ceb6f7f65b5cf8a560da13db930183a3cdbbd8081295f1eeb3fdf633fef98f2039e1a0ffce1d9fd0bdb711b34970d5b189bde223e55e1781653ed612d49b21b0aab6cc9b74c9ede18972bbb941a5b8914a43c5b0c17c0d43d798e48f14613b96f24ae40627d2e809d4b9e0db0599a6bfdcc00e6adaf3415f5348eef679270f70d4d9e4bec8a7e8b98225f92da9ba7b4bedc763ac2928bbf6112c60a47a0d0b52089e771e1497d2f57cd99fa78b1d954e89df44c05b6b769ee720f117ecc15f4f2de3daee81b9f7dea4ebbb9e5082c56b2237776b5e9770f20f220c5d3df7b72df6ff1c0e106dcae49c56feeadca78d6c1e15aa172b334f3e424b4fb77ca4ea8c392f39a5dd151d08ddec499aff46f0a76780b1ca2b22fe691b174c80acc7ae60bc62545f7b56a3b2c1a5fa581d74031083e33a18c29a23ea32d4293c9fd9dcf9513ae8566f8b1efe4e461abf878742ad72edc10883248b302dd3099f8e5b773aeb9659213d53d7b0612b86bde6685967db980655ac40943838fd3d99cf0dddeae8dbbb46857540e0b267f9c66f8765ad700ee7d463d946a3155cfe3c58ce4e8759a6630c9d2827c2edad39c10a1bba4685b2162b5f0f30bbb94301a0db48c05d36bc8a63049b2c9b5c8aa6f69c258cd30a1a26b022976975f74b8426ef797f6bd3e2f6677262c6efed94bb27c8b4006f559ecb90fca9ea700bdb6ad9ff1bc06188d39366adaf5c3b40db1f5b7f71ef47aaa0beda7f0a0a7cebea8d035efc85fa593ff2a35bb320b1870adbd4d812c373ab38132fa6bb4d1461b714a17714e22b85cf92c5ea22c8fe22421c2e6a51dd34cde98ba974976d99d87b420b9f8b9a3fddcf9959af3f75e535bebe5439fb69bfd70e8eac8f156292d146cfe286d23ec9bae7683db979f3a45f63cfe4ca2e05eb3939345124e48d03d3fefecf7767eecb6a0d168eac1c04045bc2bc244ee57ea6d3970779b3b08e9cb705f0839c4a42a0de704420acffed2a0109c6451d84489b05815331ee83b8bc282343b9d8e83e77259a038e156927f1f41709565571889a0e9150a8dd7bdc35a57162479145fa5184f8775f409f4601f1aed866f2c5673018bfb94b174e1ce4016f361a84482e6fc0e1a6e9ab03192d9dc83c31459b5b8dcb3931a891d68bc6e38fa95f7b02fbbbf03ef19d07b8eace9800e75d021031d56811ef2c8cb54001f32e0c32ae060c676fc39fb0fc5ee8cab2067b0af466807660cebcb2ad8b9013baf25971ab0f8fa3e12b0bef30e7757dd8501c87b65a5cbfeae1d78ac8c3a6604c8fb71971d9c74a2501cda206650be01b77bb580ac785b03cde2d446e7087fa7415b37651638d096864a1578d01a2ff9aac001b4b454a2c001b3b454bcc081b29454a2c025cedad0a9c78b9fc1595aaab2c081b41455a2c002b3c2770d4a95ad05288ca94b40fedd82b2422e0ea406cc02bbf204073223e2fdb86bf91758c68836ff9976886ac372501a27167bc79360d619c5dc302590156acad86c258c118c0b64e61e9b28339e83b59d4b28d3c5c03a0c28c2e5bd54112e0a2c382bfadcc0bcdf38c0d571ea3cc0460cba7a602ba0a12f9aa1825271e3ac60864ec7a824d7f007d27e089ab637d06b4cddc12f6b466254e11004419a15f1845fe526e1222ec284361b2db3734d9b6eee0225c238aae7a11ad7a98d02cdfe47193a7699c69f2b63cc7e2ee1c49a6e6c111ff9b30cfa5e9bd2f03f24d4389e135a84f3853f2e3c027e4d22091894096f31b0cbf3240b0b89a0df73020e57b4fff93bb4af67b2f0846baf9e5afe3bf7569357e30134763bbbf73bbdf2004549f132cbae9f89fc32811631a86c8563991a478972fd20eb3dd621dda09d20059f09e7440215702a0828874bad48b2122e55d16445ca6f5f50373dca8509ed449a34a0cb9893825827020e072fbd840df098da21394105625391868433a1136215b4e075ba13a2d9027f1ea8a0ff98ff6ad450ca476f0d79c4b3bac1c327bbdde0e506b0158dc618222b168d967fd28e8fa775e1431937591faa43d3ad5177e4b7e7c0d3639c035f5fdd6845f60cebb16dcc2e0f0d961fd8eecce634e09bf52b6bd6d9ce51969b9c8aa9ecdd0a7ab967986c66e5547170eaed85d9f781eb2d6e2d4bddfaa7ac65961b55729f4647b1ba4fdf5359bdd445f8aaab5f8dfa3286d873236636d67f66fc6472a9bcf258a329059f12c593659e93b44856f0723c7cf5b348d18335d1a14eb9d7edde6f63044efee24cf5c6b0e6c7e7c3b169a97278303e1a1f0f8f3ebe3a7d76f06a0f1aefdfbf7fdf1e0edb8787e3972ff7501dacffeb76e149d9fce0fc07c629453c276de48df31fa0fbb40afb471e6e7fe469650ff5de1b60a705590cce7fe8d73734ac68a32372196cde50afd3ebf91a33f05b6364fff33666e164c4ef41c337e49be164c47b706a63ae0ff456382bc61cd10f75cc6a78bf06bd6fa4df1d1dfd638fa7496e9fbdbb78f76edb916602c8c289a914cbe96b6c3dd2dc12aa445ada388917235c7058f8a58987ab1f5a3f90cf6c854a43e6f2f8f6917c2e083e1bf25529bfc300783cee4e48697c95c2edad76e62bccacaa18840503b6c000fa3c108b0ac528d252d87159f031345be613c2aed312f82cd66d0414de6bb2823815f08e6e5010aac4596716d2d39bf4759e2d485eac789a565eb7c550d9aa0ade9bb36bb2ba60975d04c46f3e9da66dbf2d5fe9ca04b2723ec42f724485e901d7e195812a1f9fa75feae627c3cebde34612a24b31a1afb28c12d529f279922c23a52e668322c75646eb11d4fcce2d3ff18955a6d7d5ca78ad7f9095c600d7644505baa602bc26ab16c6e7610576109e128b77f2d96c0e34203ee97236655f3a18d2e4741ab01913bea9932c2de254e992eb27ee8b310d6a82d86877efde613f3dcb16ab3cbe9a15104c9ab0dbeb3f84bf9308de8505cd527ce57e154f484a49841af91cafacc3e3b12c8660783c6ea2c328031661587f25d10dc720941771d69d2421a5693827f43cbddb3d4fbb77e10acfbfe27004acf03c0d2c5bdff3a2c1eed114735ef2cbcd7981afccc8e1387716b70b20cd6a3aa4f484b5ac707214f803c6bb3ebb1095ce0b6325f7d6ad645683230bf32bcf32c69f510311e657c6ec5975c7ec28310011b62cccaf3410565f81a055023e11a0a79751ce0d221b1a65e785e86467b1a43386a5a9c8121e4d0c3b2628e8c414ff2214fcf413c32d3a6c60c4c149531e0c428dad1d85b66c8777006b18782cda388056eb8b8750a3bb5c3098ddb50526f6c56894a1e10cc3c562985f719928ba8ccbc7aa6391caa01febbf7ff151cd3f7c91f328cdf405a25fb3380d1ac01f51249416b96e9e45cb84a0a6a4a18c611adccf9cfdd2e1f2922a4ab5a99032549f1f41af59d985d0c65a102296a7690cc5e8307eef84f3c89815748f573f292abb5dc8c9554c0b924348a1518a85063e9d50f6535aa04d1ca48b392cc2c975784580c170141c6b60563dbb70b28df169d0875d1f882f4dbdbf02fc264ea3eca6a3490c7780ced32f813c53f05799f2c880a978ce7ff85f97e12549baf9326507ac2eb7baa65d42e75d0179fec3e3f354d49e66f94d98476fc894d76ffcaf9c601292ae3084e896108db2da1b124e8a16fc0e4b4a9e71408cd33d24f30cbe085439036295d89218cfc85c82c28023e089346469f03b0e0b037e96a57439c745aed7ebc87211adea759e7d8a23174c96a31853138320f2a7e0634ea6624be42a29328d3fe398b35f3af2bb8a8b3599c5499463ce2f0490dfd5963cc91631895e9778c470d89b8a766a51a7bfdfbfb414057c93ffd282335922120b8b4afac81d2504c3a2cb5ea95062f84aba67d124f04acaf1ecc346481c7e149d4b4afe9665052df270c1eb069c94963c20f152fff0951c11e89362f48183b32d44563c33305fb09f8c1249ab15a55cd1f92c9b2fb2948d85fad4826ca11c8c3499c24a8dadac298ae4e0719af6b0549e28454444fa8c2d48767e52cd68f7f89f7ef21577628a73a67e7acc2e15c753888b0685508d7b98c04482a0930bd0654eb80156da28e03227e135c4423c859093293f6231ca3e8a2eb03f8a67c5300ff8af82a7d5af58f863b9bc0fa882d40b5bda75c081b4aa0f06f0298b2334155063b5cf24c114d5c1b8cdbee15fdcfa3a8794e5dafa610b6fb705e5ca55eae40552a42f27846dea4a95053dd35bbb4013c2294e06a1499c16ed28a6e16542da29f95cb413b6f1a008ebb2ca6d369554d7625fd2d7727cbd2b265bd08e8491cb5bbeb5d7ac658d7f2df9902da8162b50a2de539fe433be922002368ae92209576c1bd983f31f14a5c1f90fb00365831d0d902dc0f207ee1bb703e73f34cf7f40e4b6f0f8bd7241b64a691e5225a779015b59d6d5cb90d28ff1b2701786d9e57f401baf09c378322309bc2314db2908bb38fc0c6df6e711b4f5fb4104fcac7f07ee7ecf7fe7f9796a5e5d86f124cf68362de059962f3261d2000749020844212794e49f48d461953db79a834538991149780bfeb750adec767a103080f31fc46fe73f341fa305f63c5c49b34c86146d89a67142d86d942c0a76fe64e22489c37442b8cc28ca263af05ee0c82e8b909d55d966b1826ccaa0342a212ce4cdeae6e6a61322a19d2cbfea261c80765f1d3f3b3a191db5773b3d5691fdfff8e5f1089e9d1e1ec1f1085ebf39fddfc7874787707a02072770f76004c7a3bbf0b783d1f1a805ef8ec72f4fdf8ee1ddc19b370727e3e3a3119cbe8167a72787c7e3e3d393119c3e878393f70ceb3f8e4f0e5b70743c7e79f4068efee3f59ba311021f0f5fbf3a3e3a6cc1f1c9b3576f0f8f4f5e28acaf8e87c7e30386882191900c595d7be3e3f1aba3163c3f1e9fb0269e9fbe8103787df0667cfcecedab8337f0faed9bd7a7a3a316c3333c7af3ece5c1c9f8e06faf8ec7ef19ae93d393f6f1c9f337c7272f8e864727e38e1c9591886c24665b9f6439daec0a411764124fe309aa5b97ecfc79957d2298460416ff1f75ffc2dd466ee40fc35f0552fec7266d9ab43c93ec2e158de38b9c3833bebc966667f795fcc84d3648f6a8d9601a4dcbcc48cf677f0eaa70295cba49c99efc777d4e32361b77140a85bafc8ad7cb42aa6a52b5985539fa8003c9494251669f55a96f4afeea50d5f409fd81cf4aaea4c1f7b5581692eb02ea7f8a4d220f3b51239c2a2e6dd8792f1fb089e2e3da93312ca7d51f9237efcd4dfa6ec6aeafcf89e763ef3776710117edc5c5989d7d643760e656142f660cb3e1ddbb476473dd27cb87b61e3b62934376d30f9a8eebd8d7dd4a9dad491f648a49f0feefadfa7d969fadd4ed32395b7d3c543caef698be37516c1d8a6041f53fa77eb23740d7629136bc915f5c2889131d14d5eba6a9d7d3462869393f6437a6784e0498238638ab3af7bfde02e4ecbd499f8d59efe2c22feffe3500f3b2ea54cf8752c1c5855664120220f3219fdbf59ea650af21353d45a51ca00e74c02aaa0f719a13f6675659054a7dee19f064a442090af80420fbb7d07e0e98a28b06e9422abaa08ddfd07f1885992d11119059875695661b3121c25a4f90c91b77592d1b9f6c961351020d9cef9b9ae7fbea108933fc382c1a5e678da83f0eb49acab4a5966369559d4b9cbae887c3f7165e895ae3e0f11c2cbb6a56a81114ec872326ac564830236d463b657a32ef208113281e3efc3850d2341fb33d4116d6db841b9f7ac9fad53ccb7b62c0aa6fb480decaedb9a51387b475b5c8763107ac567b0d6ac301e3b660536ffc95bb5a2859a0d7aba8547e7dcdaa478f305ee4de3db6d7530d1543b509bd7e7fa856a6cfb21a154df5d0e0aa9a85317f996680e50340308ac32846f01be2c28cf13fec86709859516565198c2f1ab059871a4656c360d45f7b6a758bb3f37d5c9cf3fd8ffdbe598fa2df7e8e6cafa8d6ee6bf0183e840192e1dd04f499d5ad042057400264fb2d4fb07bb255754b0709b5b25ab1e769d6f43489512ed48fce8f1d5f85acf5ddf3573f9fbc78767afcf2e2f8c387771f9822bd671564a0aa8bac6ad82c2b4a9e0fd8425cf1cf5a3ec06d2a241393d95a82f318898741bff44c3d3af2b501172dca7c08ba23d5ebf19bf7a7ff7da164a8ff363a6ccd0a6735e7ffe43d52a0efd579f7fcefc72f4e8de12355094ba85a3468f02dffd2bcce2325cac3872887a8cb900f9762f2e5af6b7050b921d5d50af4965cca6cee0c5876817a10193860a680b16f00c19cefffd7f93ebc12d7957a0e2ed413d16fdd350480a1ae21db933adff08df8e3876046e7fb676af41f193ecb741beacc863bdcd7afafd18307e7157bc0ded745d5a8ed328e80006d82f507101d007e02ea4035c5920fa1d207583e8951916a848a2a9c27a1a9cfae32c9b252d1e586ad544740283301e84fea8105befbb6de1bac660d1b0e71d016e92de57ca0888c247a532bb4aac5944b39e4d5e7e1db772f8f2f8edffea7e6a48e0ed51334bc2b696027c651b6e490236338dfbf0febbc947378d8dec73c83f82334803f5b2075f5f0b2c647d3533c6f6b375bca39c61a3c3ae81e71a20de0bfaa015d44496fa2d4accb11ca4b5b73cccc64020d830efd24c4f226bbe412554b0de2a77275ccd57b3b7717b16200d56771c973f5005c0aa968688aa43322bbaa7e040d8da79131558fbc897603eaa09d06ea25835668acac6d3e086c263db4db7bf51dafd6448db5126245a45218157c77fad0aaf8c79af7ca4236de2c6b47e5ea27f57d3813f571365d10a555d1f0651c4b4e08050b1c859482f331f6295526f40b3511e6601cf0f89144aedaf381b17579f8112813c47c674cc10f78e0d09002dcde6ff97d991555b279352fd704b47d7dedb7bde7b5dd7d2c6ca0887b13ccbdb760cfc2be9316748d235bc73d5640db6cbeaae10573cbf2fc6f459e7390dd7b384854bbbdcd963c4419d7cda33dc8befee25a64e379b55ef25a5d1f639c2949ba7155170d7e81d454ee03baefaeebe4472ddec27f08712467f50ab289fc5f9d5af8e56be7564833ba17a4256fa4de81cdb99cd6c50adfc08ea6c873eda52de1b7e213d91e69e8fa5add02e69f433a252077bc5ec11e690b99157105a25d9392d7cdeeb36bbd3ef7a2eb13c4eb5d568e1c4f109fcef75f645525b46d62a5ebeb1b53fdd34657f4fafaee1413c9ebcfaae9012b1a8cb06ebc6d871847bb1e4585c8dfe81a63f944b038c68dd7287aded73c2f2034a202ba9c96d93fff19590874dae6f3fd42be1193ff8251572e79335472dce2cc54f9e8df32d11d960ccab70cf80bbcb3bed0d68ebcf66efccbd90865570b0eb19c6a35cce5051279653cfdf342d67c9ed5e0ea6ad6b9288b6613ddd1dab5e2a7e29293e1eaa1fade175f003c400ddf6c9cf93d3a7ac7277f7a93ad0259cb059d033cb455c5bdc956a9064e78b3630327e83c14af544331e5c74c5c55ec926fe48039c6affecdeec12789cf732c8132ef866535270c2c5a3e75ebb84bef47be91fa9c7824e61a903ad0424dce308ed03344379062a07298e5397a79a847c783ac2c1fd0cf1e8ff6b917ea17ecf012c2c8659bf7de563678d91fba4104624a347822aac01cc455f540afbd1eff68c4de8a46717d786b2e5768fdca8cf0094aee6a4e9a1eb0a25af0ba80bc5bd85631756c087c31f6d8a91269afc4bacced6b7755f3a6d930fe65c52b09d83442dd8a033b904c7a08107c362ba6051c38ada84141b9d614873bb2b2be8089e334abc5b24756253c3d68782e669b1ff9061dec081f572472ef9ea214cb506349897eb554c64bc9a392408a584ef5e4d7baf1e9fc4db6525c02687c99f9d78b2ffaa9aff1a8a8cba22a41de643e9f49575f66abe1325b518b6f964c5e76316147461f77910dd8417fa0dd1a2f26678fa9e3a8bf64d4a3940ece72339874c001cdeff178c966aba1c3b4fb81ace05f9dea5a0376841e32f868cb56785dc6375d23ded7c512d29774c9f244650fff197749f4ec293bdf878ef1ab16b10e8946e9ffa8e7253bd2caccdef93efc3bcb97455580d115dfe15aabf3ac114b76c4460f1eb0bf80bf127b306229af1764ddeacf03f602ee70960179668d580ed92ba124b4c97a3e0743d7ba5e09c9a5961b6a3e15cb25afd423b5116caece71d1a8fa192a34b0d9d30567a27a0ec02fb883ea015be5f6c79f2b617e9eeae034c9a659c52610336950acb4fbee32abb2393026dbc52830b2a8d9c7d8b1901e08040eab7c55cfcacac820aad65f60138862ebd0c78d2ae4509727628afd54c8f71c2259cc8c0cfe23bea10c940f46f0a9d55aeb7245351fb2e799e4b06f0bc5fc3019ae005b5d9d31b16a8a65f14f0d4029052b207553b48015b0d7396f24aca5e2cb468308ae2d8ae02bce739e47637fce8b6a6e37e82882e68262baa33a75a1da4279319bfd2792b9074d87b837996c9e4d9554ccf3e79b640971c565a34752830e911db1d72f795de08aa25af1edbbd38bd30fcf5efcf8faed5f7d2d905a4562fd8988efa84bdf81d30caafc045e88bc8e61f2bb8b27aefb527f53b447125aaa9f80dc5259a50e3be745b67ff799b94a3bce2d51e1dbce8eb2a2d7a04d424164c99b85000e5389a6986d18703eb8fe37625d03a7823333e1bc428621c5922fc495e3415632add746af8ab2858be3cad0b1481d4bed6619f29760f96bbe1275b39da8ac4a8816f7e1b8775b818b6cd6f0fac2fb4dcd1b31ad60856431afb292ac505696c82aecb9950b90c47448a93a48bb4cf385eea37596e0a0fa3c6ba60b8f1f28912c9b670dd70d78f36620a7e67ead16626f5cd87df73a5b261db467e483462c0fadcb2e3a10eadbb2fd0d8b97c3f9fe00aa7b4610ac646f9c4174d5fd0dd281d48304b7d69f3c91aea57a7069b59602d5e9215587b776dbd264a29cdf2858d670c5d40de02edb432bbd1bc7b14faae227cb01d855519670051555d11410380a8fc5851097ea2ad9be0ca0221544cba2fe84857b6a78ad3b913019b4cfbdb33f573ce831de62bf4f6335d4b4e839d11639af9aa2d9bc10cb5556f3ba97693713af266cde247ec2aca7cdbacecaceca39e7abe37facb312bf868d2c0052f4162de80c93379e610908a0b311fd3029241d067a6d632de7fd6bd6641cad8e7e31ba998f13aba00bd99425c1e84c1b38f171b802e0b8a1a570c5585f16f98775f553f6cfcd6b4bc5b5344e0681809e1739abd7152bb37f6e08d5d7d2c9eaaa9c961b5ff2a980d7ad8c1a5a610996db22ae05f7aa754a8217e0cea60dba6853a98eb7950bb89a513d9079122d8462ed03d2b7a77a99ea66dd67f6b4639ce3cee1f91cbc076d83face87c3f63e1c85c24ca7629b05fa72a2e2f00bcd79e41ae37d076ab5cb65ee92e8d64bdc5938eea0cc4dd0bdf4bb8f93acde610cae7303cf140e82bed023a563a2233f141628f4e260c02e326a0fc640c56d07ca2967a3a7fe2135229073435a8e8e158daa7495bc15f44d4ed8d860ebc11fe018c9ca8d46ecf9ba2873a70ebb04bd669d6d50d33011cdc242baaaf7b0a78c3353bbc4c053ebe7d2a96424531a788a1ff2c17bad81c38fb7d9542b2a2f0ea06beda3a67e41a58ebc38804ff857edab74c8f6cc2770143a6c2d99a458a3893db2d5862962b45b0e281a6656616cb2f9038e946853511c4dd47643f18bfaaf3302e1bf749ba7b6a0fde95968b24e9d10f757e392a5e6022e59b012ce290b96e6c6d33038b72cff2116ef13739a495ce37bf782f50747ad8bcc2d3e1e9b7e9f5d64e8aa85bf774c86c53e5b6a2ada6bebe2c0f96d458fba94794891ab3d8bbd957fbb949b63a2570eb62d941d88a0a19b7b954d1b516f1289f1a3dd3b6c29409f16fa476ee945530ba115706678bd5cf2bc80cc7eded13fb5ee5ae0399e956c95d5d99237bc26ef3470ef81dce3d05aa1dd84c40cfc86f4b00688f1aefd8b9d0e14dab92c56e83a563545cd118044d7542dadb2ba19780343c5ba35e380e25d4d44bb1a99a56804e34ac093c4f8e7da890e3084e206ebe138778a76dbce65bccef6c46e3d868440b42f41075ddfd63cfb8f7536bd943f1597fc99a361e7c4d28f87a2d5cc3e5e7f21fdbd9dac1b881fcb6475bfb15e346571c96939e7e84487bfb793a333bdc2a20bb19d175bcbcecbdb5eaef44ffb6d1a551f3867f2df6e06a9fea30c96c196760eae4d2e34c43846d2db4aa9e3f087441547be634acaa982de6d3336c4de51d252ff38f15bb03c69a3cbeec27d078b4ea500649a2eb71d9504ecf25f1ca957ddd36647d4cf353d435b2b042188f90621a1967cae6e686a0e32ccc69a1a201aa1dcb1946531e5165d20cdbcc2a1a715a5f4526d5b6619de96bd1efcac3d9e812f3fd15811de8fdff5d9bd7be43de5c027e4d9c1476db34289f57c9f3892050540183ddfeffb89f3a3217caff1152464b53177453f528880b2a15aa8dbaaee7d1eb08b01f36c3ba391b6476515716e31feb1185be0a47e6a45ec7d4e18103f3b3596144b8e5e0fa04bd526299d3c5d1bb196eb266b78fed4f5e05b55535db8510e332c34d086a8319aa30243a8e7dfd7dd9ed0a5062e614a77dbdac8baa5d9a52ab2b5a113be757c9237ed0d911d4868a4ba6800fc1cfd3c318a3e3f5b336cfb3e874461d739ed7513ff8ecb17fedab6169f5bedef77a194019c0eedc5f77b924d674777a6a16dadde8da05a5aa5c6ffdd053fd7b792e4b82146b61479312b78cd46446a561c02dcfac10a85d1be93a242591c2102d42eca8176369203b6cc56faf5cf1b197b1bd47cc66b5e4db9a5fe8a5ffda7a7f6198db4d517dddc20ff3f5d226ff6a676dccd09a84de92113650e651367ed1682733bc335b11c74376110c64685e958703161f5087b479d04384333abd0315a6932f814f5e84f49ae133d5aedd5fa4ad47675b8fe4b226ec57e4ae9a7ac95c97f0a6b6b7f0026e7e4afb79aaadda3e822d65310414446b6df1d372c7ed8d979050eb6e49f43e8ff7cff2f647ba6e85b63760f5d99d4e3d73efbd9f9b9f679f13cafe894d1655595eb6324c85fa662b95a3770b6c20810e60b73f88401b1d5b822b811fb737c4afd80898e3e16c2db4ad28756e221481f0143e23cedbe5bae4b2693c59792ee6198e5440f002f2b9f52e8c4072ca4c81b4a9a18306139c931789b686a61101e2507a83428245b64ab15af24cbd7608ad590547621d009099ad292a1690829cdce123903a1c9e09f5d24ea16e8a93b318ef2dca14a3d33e02d7e55ab69d4de9bfcd7b56c20f72e6f005dbb2cf91ca0e8ccc1552f7354cfc8810b0f0244310898651a793bea12787bb15c951ba7ede79a0ba07298b5bc7d34be9917aec8fecc9e2428cc776c7b5d4d450d5aa5d4f8878c1e545722171c7410fccb0a1452d5c6bd9862fdc357bdb4c6d133a7e66ae3914ec16c847f6d89aa39af4623f6bee646d49b64730939bed0838d4c4facf496a95b118cddeafa560ba1a47abe5c893aab8b72a30b9a7b193ad09eefcbec5751170de0704c33c9a509af43232274494e2a76e8f40c288b107b130a2a4ece32c5a0394bbe7189552dbe6cb0253449fa619adde3f17c1630920132b6e0e7c8df756ff4ffc0757aad067b8d9ac0eb7088d730a2feff190d1b2e1b68238e4f30d0e57a7dc1bc809accbedb261d2aa761f4fca08b9609f5e258457caa79814ef617973e321207ba178e9aac90a7b946dd63386ed508a4507a40a9806ea4559ddcf58e8ec6d51ace15b3093ce8dcec8df4823b4c156a45c225b75e5f1119a5bd1ca096b3eeab957819c94349298bbefc8dad5bcbdf3bb6103c1d4d23359fedd840247f93265062debd215fc20e43a9cdefaf6ab13434ae3726d4e7e89f87e181a457635b19cb6529377685f90a281b9e4ea19414ad4528c5d0fdf223434ec1fb2e33fc55e7c660825ec2f070714e78c68d438746ff05ec27ec33b064f492be5a14d385792be8c492e42d11c68c4c8303ae5e09593d7f02ffff1d7d4ed1fb510a80be5ac57cc021026cd18d45a58c822c190d4d4e47f79d7af33f4ffde504ca50fbe091664aef4076825266a822096932a520514df543da245a8a945c1feb2912ad90965033117f8e5ad3fa8996d6b045b2e6206623794f355d9315871352f12bbad179d664eeb00c6cb81b71a6535ba2ee85cff176d7363dc46884b90aaf0ac907280f4fc417dbce57aa4d6c343b9d9b7e21baf9c5ca8b217b3d0368b5abac6a70545ac8f3c9ddf226b5468a452065217e00696e22be68af1917da01198c6d113424179c887013f125f2ba19b09039b33691fd8748642f8c805e6e7e963c7f26ddabe57c7f22bef857308c0f32acb5c942c20979c1fe2a6271e5e14168c6df76e7f4074c0c518f86f28a18a20068198f1648e1c08dbdbc47eed9297fbf05827ebfdd1285f702b29a602e5b172b5c9c65b6fabfb034cb6cf57bd18ee29d5fbb2881fbdabf6851246f7eaf4551d7c0d72e0a722aba2e1a563427a6f1b6b5d92e8bdc66a5520f803b2d1638550fe1a1e3e4c9b674d8a1630b8556f5d6e016765bf242a702fa9c372f835f619360de6eab0ee3c62699047fd6d45889cd84fc35d98c5e12f352d854d9b298467a3ed559583becf99dcd82e15260f4a0f9e4e2858bd1a2cf810612a6e7817980ccc6deeba9c5773afc8ecf5f4fb8f53cb7c789f7142a39fccbd9ae9c5b8743d0d55cf1a2ce595317d34b25015caa878c58d74a0a07ffcaaa98f272a3ad086b7c76c8012ae79aa22cf5f26ad1c17667d1e22afa0e4e080ba9c06e6d35b1567857edacd228068996f09b899522cfa3d6738ba1406fa98d065ff846aebbadd876be7f6c55031557afb4e64a381ea31698beb32060d68e0174f643f6b2c8416ecba653f0d9071fc2a6dea8ca4a28dbd200cba423dfa756547301026bea19d46256d11062f4c241afb72ecbca8e8615350ecc15131a4264f8abe4082fee9923748a71625499096c71042dc011b63bf88e847f8ed90cb2ba33eafe68f1396aebdaf7943d9372bd84f71bf1df8b5b2baa9c8975a39876cea76506ba7d2039ed2358805e18846fec7ac87a592905a08e48835685561d3221d07af3ba3f64cfd7e0f45573b6e44b516fd85a66736eb2a68f46ec95a8a7145d8255e26ac010be7e211a56f3526479316785946b2ed5e800a79bbd85347063b727c2ea5fbd7d3b7b0cf8f5bf197d5bc2b862fa06f3ca0b4d62605c69231be7af867101bee716083b5251848e271cbbe9ddb81b1d28db68950c6527544b21cdf77ed31e9a631b303374a12fc83d8cfac535a4880c03c21d58c298d8d5140dc1fba0473817ffb2aa0fd90d2a625e899a957c9e4d372e1e1c88017c1751f720d9f1c91f291fd5e68e31fb647aeaf5faece80768baffe990c0d6d9a1106f5c5b29abe70749ad8d2f0b3d0965202a1e8c466ebef163205ce69d74305a4a3d482178c1ef41b83f3a3ef942ad2a72d03ad0de6f96b26fe257fcdd463d1ab98555fb6069f269ff2b95d2d6681caf81c35f1db0f3fd57452d1b87a6d30847209f9c664fbdf5d50039806c07365fd759c256f69deac49c65d600bb4a5e69c50c0dd59973d58dc005357b915e5aa627319403fc3a76bc06d237e05da11682fe8a7745dc1a41a9b5ed990ab4be0623707f47afbe03fb8ff37d00ca7ca06f978ad7607684cf26e097bc6ccc52a1a20072751ca21c66b6c5b8681cb5f12a1b2b1706ec1f7ac9bcc2af54ff8a50966cc2d59550af2bb55d3db16e6491733681a80a25b8a1fac8612d59e3ce68c40044b1906c258aaa61b9edcbe05d2d4409e17459b5410d5a36515760ce57bcca793555b20ad77ad370a867d10fe7fb148ce07c5f89768fd44b8c855f9cb2ad12d69788f46a62b965a1ae8932938d5e67625b57e22e641fa9f9342ba7eb326b3899a2af4b2c24bb5a648dbeaa219450dde1bbcfece7f717a7ef2e5e3e3b3dc6793dc669d19f7d953188f98939a1af3be64db9acc4953a73ed2be0a6aaa4f39aff630df10d027d12d80c184731636e1c8a4adebf3b3979fdfca7ffbe38397df6d3b1637336ca1fbcb33c2ac70e6c9c7a4b13b6a945f61935e2856412a029d45ff85454399b14730fa8636c6be1ac1719221d01708a1a819263f8675e6fe2052018b1570b5e69f40e82dcb1cbde057381fdd364197e727bf82cb52b1467204d9b702451a48d2811e3be396ab0ddecc3898123c570f7e991593dc159b9c9dcf4231603b880d18f47ecb71b8b05705a6753fe46e401b3b23f5b2e657f39737f5367fdad7f4af087c3ae3a3fbdfbabb731f0efce1acf3f1c3ffbd19bb6fe05a76d8bc27cddbfbc89bec8d6f345730c694910a3663b5690fd29a8dc037c194f02c0fc06003b73c4e0bf7e64e4f172d56c52c6e2a06987d4409c75c2ee2304264e51ea122d3ac1f85551e5121e3f06dd0f2e0447f76216d0349c846cdaace141ab8f044ac6af67ae66c1e589e10e07aa890ab344012fa35cdb951f4023c52c1c823976a6be635545c326fa3b8686879d37823d81b141d3cf371a3d0dae4c033a4e6b199717a9c4035163de12c423deb02b5e738d6282c63f68543662b5d20f46c0fd03c66c78585662909b9b3388b059add36423461108271e5396d036f40d739e70d6d4d9f492e76ac66e3786082e57488b7274a59e1f72bdd448ca1a431b47f5055af5261cefaf7183c229e0d60545b460aa2413bb5a57d9065a5fafd8ba6a8a92658071a456e6cba366413634324c63737afe3dd78f256b79554024299977b4d7def19b6692c78049eeaa1c27757f21e053ba152acf8cb715067e9cee2d80894ed7f76fa971c2a30fef607326e0b198554c4ca7eb9a199151c9d6b0d4a310e287fde1c9c17ffc31a5a6e59f9fa93b1086f1816790fe39f37f3969b2bae98571dfb4899f2b43b5478a2af0ef580d51182b81d7e20c000d85e456aa062ddbc41db8813e84fa34ac0a68760d694fa061583a9ebfd254358c472426a816b14464c1c706ac4465a4498ae0574ea5c02dc3ecd5615fbf628b2e9331fd83ae08c16b63f26b3a1ad154a03905745a3840e97f2ed6559e8116b6ad3a433b8b7a85f55251a32c0e26347f52d605faa72536fb363d77f4ce481c79e7ec9896b4383057c4d86978cd25dad589dbcc03513fd009c9406cd32fa5a5584266b8c9baf110b244c50706792b2bcbee1158223faef29e7702bae6aefe0467cbd40f0ee1b656d2bc25fcd3b2d62d3f8f466a3dfc37c32731f9f5532406d82b7ae2ce3188c5f6ca0601d8c3e31ab676aa2a7e72a7f593e7e3c36bc5d56018eda3369a9193b60ba6fdac755d35a0a348b3fa4e12bd1b717c3d616c278ac4ce073f05ffc40d7f19aecca9784c9737e86df7f9df6dce2dd7b887c8301ab138454a1b7d8ce92ec3d68e46387d51c98655fcea255f995714a9c794885c6dfa31e9d816148dd97f30f46ede25d108d8a848b59e3788145dfa220484a492fa0cf25d6d69828a3c7d5bbdef35645cef6de08095df4142013bfc68c47cb86d5c728853373d46b974e8ad07e4e215b71a6744172d4a300cad1b2df028891e4420f250970134c7824f2f5fcfa0833710d4a6c31c9ed51c084ea39b7996af85b19f20122880c53a96268b7f72f68305f61c8dd8890ee882383525be08290b8d61a1056dc7da72cf025b8ba53f09c09ae69cfde1dffee3df9d9e9a2e1399ec4bbe028791c7ecde3d6fd4a1a7fa5d5cdb18d84aad7a1943d2ecfd9be1e2c114e169027340f057e93ddcdc74a5466dacad0367a0e11cb2d3bac046210271a35de761070214be132f8a2eb1e476bd518836e2b26cea62daa8f6f9c0642ed5113f7ea88fde873ffee93bb70f7b74231c1f43f8470998341ef15c5f7b14ceab99a8a7fc99a65e67c601b7946fb569bdf62ee39be0293bdf3f0195178ee3915a187519f34a6d593e0837d227604d156671edb994944886ec7dc9d50be8aace10d0650a9d54ea587cc23a9f502c2b8c220ef3013580bf9c248b782a63980aa142c019b1c3473208e9d753a50fd9b39a8361bfa937a008353deadaeabc1ae0e26cb92af9402b00200baa0bd89ab14c9b706d82eda7a949f4d9c3781e1eb5b73133b8230913737b72c75056378e1622c777222d48cbb9fe3fa0361b5390d3873e2379a5aeb2ba7269a508ec0f9c77e23e51599f096d30e159eec82d42b5f5cc5a441576fc854fd78d33e707c9a73ecd3ea186b706786ef4bda78c2bb3169b4ca33ba356ec74a17537c83f66a25e5a4b8c6c448dd1a1aa534fd8d5febbb1521991c7e78554af1bd44165d2938ab3caeaedcc50e84823fd4beaf94ca499019b59137e90c1e44e4a0270c8e1260e8deb50081396262af690d5422ce10c8180a685352553388f10ace59463c57289cab14951e55430c51ab7125889f05ff1ab77464b60005fc13f36a5463076d787ece0f1e34463eb6aa29eea2ff94abe10ebaa21e0dfa454bdae5ee7ec28482208bf1efa8b7f6ac8ea688b94a4eb6d11a5a86ec48f905d97cd615ad448eb21d2d057d8103b62338c173634e55b99437d4342bfb0a5219686a14bb85fea66c0f21b29d5934f889d9691ee8d6e25a4ca04d52986f76c22d68d6beb97a259c00f9d156ff75a72810fb8abf4fab8fd10be45ae440fc2a0fd54a93be9715765efb8e8abc55c35e4feb8bef64e5b546087db88ec36dc469461d8db48092ae8f6335aaf72507e5ce162c21565acefa1a8d4763fe5c56c2699c78f0826845a27ad7fcf5d08b01650263c510f3308d28b01ea6b4d97c34b0781dc8b2e5313b200cfe165d245e814b1c87aad746a5af6b63d4707ec7cfff5dbd3e30f6f9ffdc430d56c38021dd02dd9d69e1e1db8c5373c9672ff147592e282144d52b2df04dd12da2ba67f784bbec626db0edb86bb65ff2a0062643d5f801dca8f9b42d0157426b0f92ac698240100cbc18ea0386ba6aede35a23372d977467dc61e8fb56509ec0d107f34b08623c10ea00ff0452e1a52ed606cb27a906a792d5c3150b63f56f723aae63b2e513ddf1d75f43a31ac753d2eaab9afa1d71954690e0fe03be1e511946107097cc2e231905591d03392dec1549ef355d8c0e3870fd317da68c47e5e4d330976bffb329bf1fb6cc16b4e529d8025567d7eedf8da40099801d97fb21254186dcf8c974ec31645837001f02cabf2a2f1701eec8a4567ea87edb41cadeb2ed49fecadf5ba8e2e92235624c4ae50d2333a25ef77345556f71be4a9e0b4619e1a56c8efc14b101cfa9642bd86737155a9f37025ea4b96d58a7cd9ab576cb29e6b0dc29f0ebeefb71d5b51e63b1c5b0c81d53c1df264a0834ac80cfbfee9b539718a2ae40f039b9d8747a7b768e054cb403933d07e3e10abe8f29514cd903085c7d854a9e5a477c1ee18610853c5978f1eb51c5fafee597997235c73b53d4615a3aa0c585a7b4d0e5f78ee1f473ea57762bbe00fd610974fdcca68bb20f5b5e4b0bc8fd5aec12e9742ac867af18d9b512e947801f1cbc368f734dcaadbb8922b4a70fb3d844e261986933cf636a578dcba2b1e5bdbba25075bb9eae3d03060807f76da2fb727274a7a713ba1cea4ad28d932db1809473659c98db60fee42f2f24e79224a818669f06d5b6439ab50bd8891b8ce57051aaeb894acf787ff38f813f130decef1925290bbf1bd55ec365c6d67af87c9a64c628f13358b9e2fa03ae553c9b3dab6bb55f0a3e27a5141121cf683baf02389ce6f981c12ed3e03ae345a470eeeb1be18d76ef78f6f012aabd92cda46ac881c04cc8178f4c87b97786c057d005294ba65abb625fcbaf1d2816b4b5a2fd0a8193136e580812582f7b549b0825aa0e06d9e80678f8c7a2dc411f69e18e0b7d16110e46b1bd3c74348cd78d4663c3b3dee43909e94ca2bf871db8483e289d9867ad648d5b675d62d8a82e4dce3de5c83e649aa0520136ff82991b8ee13d3617b43f476b5ba76b06bf59e3051ab6b40df310f22cc929dd4765409717bc33d61a42dca85db1ed4e831b61317ba1d9741b6b26bae406f440640ec8a6b91413d19c8de6b6f2c2ec100a3dd200d7c9835a3e94834d0252cd76553ac4a346f838fbd4683d35861daff1c4d4ca0dc7c6cb2f2f02ff4e783446a31e444c89030ee6c560d58cd6777316374c7e9ccaa64948e3540597cd309b750f5c265630860e2684c961dbd1e1345cad9735f8397a236aa1b9b99bef840d4405431c8303c6073d18c75e656d21349e0cafc281ec4a8e9ce23c7d11ed2befc1a604ca602ac08aa1da436ff82cd24f3965b543b3b9eeeaee554ac3874ea33d57a5dbdae66821db10b48c697a84eab765e7fb34a4790256ae875346ae5baf6570f47819941d811e3354532d79943ec6fedf7ea05af723d03dd64cbc5bad364e93ae1abec64b50198a293d5e618edb83dc80bbf47a8913026e8e4b45852a11c12cadac67647b08cf326ea865f2a565589ab5e88bfa01e8b809f6e20d3358304d4e9c741e15999358d5a3d559e9a6ccaf070964ade0c8f5cbb1e29d6e2d0aece8a8f18e016b87ccad5e603f8b0a2581066b6d9ac00fd2f33ecc6ff8c187a6457fdcf063a03b73a782ab93c097498e49194600cea8ef7a49d16a13191ed32b6081a9f072aa8e8df62abe0571814fdc34f16d89fcd38f8f7c02f188d7b9cfeb9b51a8c2eac043f922af6bc8cdd5f0789d330767f259f337d538ebd7bf3e1433aa68cdeb4e3f0eaf5f9737c2f1bf6657a0a58357e0dd8758255d19b39ec443184b01b8f2504c8999949ee984d2f8790507023d6ea9cce510d322baa422e58661e2d4fa32baf7d9afe6a11bee6b3f13d0f41938e958acc72bd82185de3d6004651e9df797a44d18150b2b81d548aec3a8c7de97a9ed12fca32eb3d8068032fa3672a5d8eaf67f7861baa7e7f630d90bae3fbec91dd1a7731848c6aa735375ea0e9f78f5ed45ef40ba265a41e6b2d3c2cfa3900976e13338c00b6c3133b492cc1539b75c9533b0f7de737aaaed0f94aed60ffb778a98653ee7eabba3e7769f435a88c8cff62af6de7bb5c2b132b10795f3a89e9dbd1c4960ef5ec3b88039f5f01345e5718e4855caf08e0ffc5052206c95ed0c680e992c630675a6881e13378ac039dbbc25d8b1adf23c2fcc2a07f2f79b3c60138df0f3af90bbc89e6bc79cbbf34af7348c11e34e6a461bf45222503ff0e2beaf4707e2df3a38324d1b853872136ff0528978ff46269007d784d216c927e5c1141126a748084bb327a3548127052df8c10ff127d5f64f2e7ca045de13921dcd42ffb59d30cb74933704b09081875c98d971cd263842f90bba66a188df06daead4e72b5b10ea39888b0c9aafc515602fe852513bf0d7b3da9bb498be6a88638df1f6869dcadf1c0a613017753456a746152c9fec951bc20fbabbf06d44b3268e51c96d89cd2ae14b81a0a5c9a3aa1f8e2cf98668d371574a387d1906942522343b68f19c13d081e5898b9c59c059390441d35bb7ca47753d17c5fd55c1daeb7fa67d7704868a69e5a00ca317f7efbe26fcfdefef5f8654444dd0fe4848dffab25a288f492ef44f3c71025baf944ef45bb62067b5d136a4b294bbde66f2d05cd068deddfe27237db9213aac148c5893b76edab56b5634d95f89032106ea5e180d4b6d3f32ee12461266a35e345265f570dafa77cd5885a629924794e0d532e4c7964d3fafa48108e51134081f8f30e3415534ab0d7a94ddcc391b6a7eb481ec9a02172f6b1b92149e1146c27d3aec190cfd524a86a67233c4c293520ec67e04e4f821192abb447eb3892789a9e1d1bb360fc3bf1d1dde96f177eea5dde89e584ef28032069f9874793eb4f856c78c55b6915cfb05f2a499e3bd0df160ade89916d6362a9eb7afbe6cc834b2e8601c185d4261a7f2513972ff246b743a14abd7d24961d78e35964555ef23aa5e137510484efe84d329576eedb388ed09e4bbdf303362b6a4e122347d24af8dddf17d34eea4afc969c8d9ce32ee271499cdaa92758607306f4ea9a09edbebc8df8fbc9bbb75b4d3630031a68bf4bcb276089daad6debdc7c06c22ee123eac78f16b7677bbf50ebdd6c7bb7e27d5d2c8ba6f8ac0f054c6fe7f99d9d40ae892169e6e36e53d5038c965297097a049c9e678d585a80219a68c25e60f092786db179ded73c07afda5ef47055cf8de0a73e20cb19dbfb3356e908398060693c349d0dab8568d0755b1f4d89d90da09606fed5092dac4b54d1485ece1c5e4e0226ace64bbe9c68e41c1d3fa1438d2814963620b37c5ddb8ceeeadfe09c336090a9e581b66b07f19db6f797c407ab29969ce20759f430830e066fba19200be87cf21eca8d41608386435c3144cfa1815b68d4fee4cd1f09ef931bdfebe5aa04274f0d9ba3715f35ecd90376306488eea8077f3feac54cc84c47ed895d605c5c688931362f3e73f4c63305786ed61fe1769e0c4d763aa8f3c4eb1d119552a8748356e43730f997a58b0418b0abac68606fbfc35883ef86ec170b61e64f6e40b649433ab563dd0dcd348b999994fe3226c36b1b15a224f13a9a00b89828b2031f49d9f095ed682e5443ea27b552bc80a3a1218c0c96558639e0104111a618433002f5504fcab19a006f10d50e93c7a872d8dfc190e0bcfaa76b17fc313cfaeacf03f642270101f3e6d48bc006a876f04bc81831a93bf850dd866deb74c1d927c5da3f3918e342c246e77cb29e3b9c5b756c5aeaa3304c5a902b3e5502b8b4dc21ab6904acc6c1d63907eb655121a5a819951b862f3b7bcb3ed073cb8bd98cd7d2ededaae69f0bb1d6496386ecf44ad8ce3028d3c6726a5e5916933aab3787ec93c97ca68b7fb27de906a45b4ac0f02e9a8dfe5448b5334747477d64a59f34f27056dac6e0c0951bd716f26992d409fb3a7198c5a46d9a6ca82a7805983480275e5e651b6996471340369fd71cf1555cdca8ed21e994ed027c8a9966820e3db9dc5860af21d966d4a4ad259fad4b208f2b515fda80a2cf7c8a50fb4bb106202751e74595355c32de4c6d3ba3402d1c41ae46791eb4787c7b0f49af81c0b313831b722e0d64502904cc256b86ecddba36f406dd4a1da22b39d6099a6e0b1d306ec436fa573191acb2b1abcdc2f749b67b12b45fc8e78ab99a2744421fab8bbde7555e54f39fb5e3be31e2274b0b825fa14671120034e1aab7f862e3c366ed7cb9bc0f8adf3ed317c1f34db2c41ddcd6bc063a42696d998b8b65b62a72b00bfc213204b43f87a3585048a01eafb6452fb14b0ca8b316a255d46cba999611b914f2c3baaa8a6a7e8229815bb7f3b4cea6d8bc45b11cbe7df7962e8673613339ec7432e26581e07b24efa4b92600a8dd7755d3478c387e90e6c2720e74194a38a865ef28c7a617ffd167aacb2865b0d114e2da785e80fe2be4111652b2326d2d1caf3179f8bd981afaebf575fce8b363d43c9cb0eaeb6bd725fc9a569c3e4d61d3a78b8e239b51341170f3212bafe39e63cd8d0fafc08ed8de9ea9137e0c2b5f72be7a5616f09677b5ecafbebdc29790893a80860bb4bfb7ac6cf726db4cb8513551eda879756deb88b2c6745fd62a1256b10aaa4881d55d3c91f0c43eec5dea00abbc30094d4ce337b79be0cf36e0f616537495769c64a2c2b79d2615613f40552d1ea2878ebe7485c179f1e45a2789fc02096bd48f88022bfdc7a781c646f7f450f0685be94e459e5d5ac2f5d3beba2f14c7d769b451e6a463736a13cbc4c6e4c774345318db6e826520aa0d322d78f739c24fd98f7bfeb18e33dccf58cf47604dab732db15890000bdff68167b1718c856e821087c5395bf17ac61a2e1b76df6ef0922f850655badfd2ed67aad1d6155166c4e45a89ee23afa7802ad9f63c5a81f236b4dc742d603c1e4b45b06ecf2a5b215598510689bcf185a86645bd4c8c23702eb0c81649f5bf061f0d841cac138e041d96f1db3004b20ea124d80e0c6dc5f965fb3973cee93b6c73eb3c5a27d131831d871fdab43bccef289cc4e7cd4a6c7b296970a013866af947ccc2d7fdfd040fb90fe9942c2095c680d0fa3c9b8a0ac1b24881ac6217ce13e28269235651c9063094a8624fe7ea574ffba77136fc16b9360139d902174b56ccf9c20cb50b7be48ec062f372c2476acbe042a19b753286b64dd439b6ee8ac4c60042efcc570625b7f8237bdd18d4348a65872998b422004904d2e48697e7feae3255c09cba2fc56fe7be435c6fbaed3cc394b73b23d61e3df3b4b9c7778ce8b0e1042c759b4d5595b9cae4c95a829e025e9df6e3e801c6f91f3c79fcefecc1a855a3b10ded24e82f34687bec32c4e576ae036a6cde50c3b74fcc54cdecfb3b947566e9b0ec1e359b9b2689d13ce0ed7ab46991b5c37c1dbb5ae996763c0074193dea879311aba67c4d40c0f3ba1c353d800fdf37d4ac41dc25b3aea249dc36343106d2e4801c9c5b2411fd1ab0af60a8fe784216bf85b7b7419077408fdfa9db44d76c17fc71ec6c2b8a584b17e93ba78b6e1e3dda4519f535520eb2866ed6bfed6111c001a44467ef245bc3fa21c91804e827602cf0efb3bddbbfa4efeca240dd75039f5c883753ef4d1dc1161c7ee344fe9fd114a3cdc9d68da8d755caee435b232cff2232f77bbbe386757ddd39bd70b03fb7877dd13f5d6e196c774f4573b35fb4b870b0bbf929da554f1cbfd46c626cf2adf2a6dbf5942449b73d7547ed2a8da55fdbdd27f3f6407c2c0c7967f425132b14db38be568268983c1f193aa5fc4030d31df15a835d203a19a3285762a6af2a8fb99206f42bc5dc0c14245efeb1fd65b513aeec90bd14603f62b335f552e81c7fcce5d5fe76a0e3b2564cc2dd16fbdb4f65eb73e22b7d97dadbfd5acf25221898c67afd164fa6b6517c5b3fa6965e7e372f26af3f976b0cfd974207852eef25afecf9fec06fd9f75c3a053baa8605c78c5ebc9605ea6cf140b8cc82e04d41bc2674515e353ff28dba90cf7042e7fbea14fc755de4f6a639df972be77e4a7e0e00cfdd87b613488ab4e38a9242ed48d7a45010c849bea4c56c3a8875f59aced37a179fef9f571ff506be1193fffa2baca6bc5d763b52d1272ca7bc67a086a73d68bc8f615400ad5a4d31298bc6e49f076f1b8310c24a9169ef0c9d1c3b53bf29f623d10ca04bb2a592c3b9f4fb78ddb0a2423a9436599b4f4698e01eb0b62593c5b228157d3b246eda9ed7f6dbe1f3b13f04c0d8ab796952d980074a36bdcce6dc96113398383a8614e83483e9875c8166c1bd9ec077b7222316b56ad26b4abb84d88c6bd9b41652b2253877815b0caf9a703414cfdf58409895bcf5808ed81f0fdbb719d7b2dc1874c1465c7290c8653157435e575ecad27457ce01fec825064ef5f6c2a62aad515f17e5d34c77b00d0b2ad5d7b31af2e5998e32cf546373a63e8570147b4dfa6983a27174447fa686709c4d17da472fc078d7d2de403be7a09a8fe72c33fb50afab4745e7a2a71c34c201dc9faf8bfc3e498f5c1a77af21dad926dc32dd9c654b51cd65836cd93f8961e7861f6fe95fef4151b14cfbd54d4a31bd7cca7a8ae617e20a091ccfccb273e9ad5dacb3c37761b211929bd6f9c464d566296a8e270fd291407e640053f69a93468b3660ebaae452420ee089c837a8b6d00e9112b691e44b449cba36cef31775edb3df087aebd9c79baeb9af129e3f9262d8a596425d8e6a65e574c1f335a4f25094bee18d81e0013f4e0d3fd4b9dbba7f73cf6ded5a6fbb4b4cacdf2c5a3ac5469e76eeb651e8d33ec39758d8ed6bd8079a99866682d1009d34dfc753bf7a650ec9002f37932c133d5bd11375c12bcb5268da21202518ec10b381f817d9a960bc92eb9a9b5b4c48ee90a5d4c5b0512793776e432a123ed0496c5d127c1cecb6203f4bac037a1ae788ae81e11453f9d42e0c7dda6d26060766db3c6634718f979f060735d52b02893a364c3bd9d0542f5de30913f36c25b59315a6779d64d3cbce5b984aa9db8ecd5fcd5d9c354da64e2d4380121db0a3391a1c20e3803b45774e812521c5ad3d605dc3c26bdfc3d5f89be965cb287fc9ea4a09f3d34466289791a4fdc5bff57a8d45f41d36a477fc65c5eb025cf6cb7e72c03aaf0f300674b006f7647b2d8fa2b15a487f97eed607f5ef3cae1d590abec97cc2fc345fb9f8ed477987e142f0ab84bccb5775813998679171b900e069f43056d725978d84880d307bd62257af824283d3676be95fc6fa0151f2ec520ec1d964d1342b391e8de645b3584f14f98c9460f2ab84ff8c10c47074f0ef7ffab75da80e1c30e6ebba7587bcd1bc04c1626a83056aaee1df8c79400e534ed545a54eae455cd7b9c9665ed3fac3f412af9bac22094d01545feae81a70e09f3b0ce8f4fcda0c3bdb66f87a065c79607ca84dce3660477816c8c0309b1712cc903dab36299644d07d0db68f62e1990ce7bfb189bac04941d102a0a98f77def3effed4c996b7210bb1085c853c887d65ca524c2ff18379fed8d7f69c37f8a5e7816669dcc8aba2cac595369fbbc8c3fd94c207cbfa03234de927f14e4d61d9d6a6242f67bb35a44a2697caad08c2d180753aabdef07aceff4aa048edb58f3a29a15ede2f10f5d9ed84fa36f72aa5141cae143ba2cb7ee8e6879f8717178a508ca60bfdcb750ac53daf88de6cc27cd373a02413f5635428f7eeb1d4eff6950e992ef995af9f315f6f3d84bd44311fa98b837943ac9b2e9b1434e5ed4bd2b6a4ed02a79054599d5b83183b20aa0bab11d26a0f8637d390bdc92e1537a839fe5c589d11a8564435e54cd4104df469aa3934effd66c8854c700cd4c46efa9f6217266a861db08344386fb4f83e65c373af6d7713a07149327be8671221192503aa701026fe34ba0b23fb61a3115baa355d2a0280b8c2abacce9daa8eb77004bfd9c4f4779ba43f47dd43fa5024489ee2a0f661134846d970c77dae4acd2de18bd56407a14e2b29afdbd6efd17b34ccd679be1f8f2f06b39ff09920946e9553d586c8ed967a4396481e49e042b3e590ab328f1e116698deaf20f3164c3daae3b62c65e6f6f973c751ba495d8ec15ec6f8213e30f92b5183e8a816ce0b5e3cc4972c26bda9797609c243a07d1533c6bf14589b2644b1d1c35a13bbd68fdfb9c99491350833a5a4439d4b1432b180d8a75a437927043907655a729e985803dea91d0742af9d45aebde41b4c97482bf6fd4df7ed28c3a2caf99777b3de25dff461bb1f1d24f90a8cefec926f306711ed007ed543d906ceb7d79e7fd6a0d3d9d5a1d97253394c352d901797d3e2ddbb97fc9d26680ec8edae5d1db667174f3539a68999e2cce2907feb28d951507299ad5a0abe565bcac3f24af651ad6b6e67bf02f194bc69499f45127d633ba0d7550d9d151f4da09d570c9c43c3bacc739d5d66abb322ff08f45624d27e2cb39597b4cdc4f3358201bd42fa9b42364af4542b2fc03c08669d6acabd8e6fecf5d43a9abd5e8146a86cd54f0cc62558ad74ef8ffd6c500b5e9afac35d4664ffe5fee606e31525fba5c33aaeafd93bf09b195ef28d540bd9a705688547ec60e0b516cdac01a10c3c8bd9afebea524fe27c3fc8f4ee4169923c3c826418ab44ced3d95ed497d6b47bf17a0f80c966b996f1b6e7ebf33a23e7e1c29d7ac3e47090472d3d43a7e6219be54acc5415d23d25d9852e97e43c599e63ffe49226055371b13fb0f4daf9c920ba5a386a69e19613baf512b76d2ecb0b38356aa5dddade7857629843670712db39a1d040b77fab4c42df6ef6ba734363f8cf6f4a65392f79c3bb082d152de61bfb470c5a51620be067981aaec83fd67ccd5f89da333a258678f33b9359eb49ee58e82731cd6d9d0e7d499071b585dd1fe94777b8acdb2647397d8a7635d102a9c298e19e597b9dbbfcac5e8257efd1bbc314ba9cd99316c7e16a2d17691220e2391e4d080e942c634d9d55125f36032543975cd11b5c9e56769fe91041458e9e6f91440d6825106c05aef95ce82ce70644c898963fc581ae2e03a6660159c39642d17b3505cb77a0cb7fc09e7d16452ed9baaaf8944b99d58ab2a659395d979935947a023e0d834ce1576b6605e1005e1e141bbf4849efd1a3d660d03013897d8a7a1ebca391036302d702002e2937cec68d90fa0340da31a44432af21d010e41c256a6548d48182eb563a21a34926dc70024c9cc29579e976b52a5e8ba2814e6717124f39efde9659b6d40b703b5ae3071453d021cf64528b2c77d6198a775417f3b986e05a08e11917dbe6be0d3fa4a5627c5c92aee08998097f2520a410bd0603cfc08e25495a0fd78d58668d316af2ac36e955810b58b0272bad973cfbcc5b566834d2766d743d30f859ea34af6b597ce6e5661004a22f8bf9a2315e58a4a76c026a83ac02dfb60100de0cb72eaff61dd9654db707896cf500b909452c2fb23971cf51285b30c21308db98c5a3ae82385fed94cecf4fd9863aee755976fa1d9e14cb55c9010563a983c6078890c6b3e9820ea25e83c9493b4c153926b2c87d63e90b406b2966b89fe08b151ec5ab4c3adba975e141f72a34de79be0314771c8d5312f0643903d741ede065c492cb4a5cb5b9b60519edb047b54854e2f7d076a213d55ad2cf46074d0774381ab1d3bae039f8232afe4f818e064c9094e7f0af8968162c93ec843703509491c7af91f921cbeab414920fc313d2928cf9ac23f9f7c3871f3df5472a10e6960cb9936f26029a599a6526f15edb4fb271da8e32c558abc296fbc8998fa2079037cd5b0aed261f9acba692d471fdf4eea44dbb35604b391f334c78471542ead66bee637afe4ab15b26059b607476251a38bce83487412b4523aa219055c3972b516775516ed882972b6339d72adf5045565468f04b3e3a8635cfd753deeb650336e9b3a31fd89bac590c974505bf249edd03f6a4ef543633d6531dfc70b4e511de374b391ab13f3f026600127c26e57a89f67114bf9259346d7fe84150f12b06f6e85ea0da49bdfe0bc9ae6a51cd6189cef7d9c34809b694f3c4afe7fb369f7cba5651a56bfd395dbe7b7d626593792dbc7d777a6cf35859480c7008e7d34556157289327c5101a765c6425df37a8db6138cad936cc2c1cd735d299a9b363c2f3788f6a891381dd8a471166b04710a05d0410b3858af2b5df9be921dea5cb1c065b69970562c6d847e0f5cde6b9e4901ee68c013fbc66c5034ac0691024a993966ab552d32700f7dc0fe26567cb656e24ecba4b29a833285cd78d6ac6bd58350f7a316d6918099c0c13e2ba5c0f7cd2493c5148ca66ad1a8df85b8d40f98d18869c3d264c39e356269205335daa25925225504882549b982be817dc6a19ebb26461d1e4dc4d0b55d51960c9f0728d0b6c4ae5bf566e9e69ca2e275ce4112bd026b903a61c3a198c1cb086f4040c115579592200bb5922492a0c6bab21457f62e4c72f91882298fac78f91dd2dda68cf9f9edc2e9d49f52cca1d4eb6a267af980c59749e2c2537ff296bce241d1e4d4bab7e626a54c6aa7355ee5561fe4117d0081ac0183dd739f6b1458ff40e4ed07c241f8dcfe6098aaff0b8ec6ef4fc63ed66f3f24ac5b530ca3b2d61d0e937d4d9a57a406ff9cdab87c31639ff24f03f6eb5a3698303bb5b0eb15f89caac6ddc0faed22fd1d8134773d2096e68223028edf938d7b19db9b218677464e68b34d5f65eaff1bc10a1790ee624c87a9b3e3e103defae0e09d7cfb43b377b76ce1b7df1d9f96ff6547a8e326d8f1002507fe3ff836d991ea916028c5dbf5f64747005652fa936da1e6f4c1eb059cebd4a71065985b40270c55292a93ea9b504895c8f71de80e089cacb711cf3f1c3ffb31c2bb288b8a477efeabbaa89a977c755a73de9bf3c6e6e5dfc02f04bd70800d047e74a391929e9ba6e0f5a3625e899af899a9278d05b139df47bf655e1f9eab87c0f9796506dfb172e7e7d5f979f5df620daa425e35dc651040671fc47237af1aa228dab21f18350f7b97c38ddfb1016849bf52b2e014419f1de2daf0fcbcfafb1a8c1b3a6048bb7143d3107ea0c570d582e436bf43ce3f374294f01e513faf6a3e2d2487240659c356059fc2bb6723d6359beaf817354bbb001a86e3bc3a357dce6a35e68d5e2e037f0d1ee8d29961fedf3f3dfa772cff082aa89686b8d2b006547bd7a6e5654fe9d226c3ee87355f95d994f746670f3e9e9f8f4673751047e7fb7d86b9f530301f3b3e5d703fbf03e69b28a8b7889ad4988c13e871f8ab281475c18fb6c507a373a4c3f3fd7e9b279a47fa4dcdb9a5f09caf9a8567a0c1aeb419ef872376f0f8b1af83c102602a3bdf87384788715c8a9af77d1b9d77b16826e6d586b9b914e7381837cd06a7a906ac5359a943f8e697e3b1f59c9f65b2e1b271cf159ec9824b754f6fd8b8efa6058dd065271760f42d71534d17459913cc586f49e1a3bfa6eca1e21ec8b36dc2521270728b907653ab87591b45f5da32d8013ae5e9d0a601aba3509c5be51f353d6d4f3c1a7714b4992a6070c6495b4d7bc64f8dedeb26cb8ebcb98745e94ab0236f61c2a2c9c1c53f4683b1a6c4df1b84dfbbb8be4d0681bb81e17f73a4fa42be2ce44ac8f6440017853c3121bd1d65d4957aa9ada21dc5b45bf39d61ea35ad9a93717b98700dd886138aa04c12ed9ab2bbe097d1b54a230d06ab99300174ba9503a34e819fb5dae76fb64e30d8dfed3830740ec1fa51486ee3080d2178cc2db9898d7408b297c5f49289d98cc022985646adc32633de656b1ca1c760a114587afb9eb5d9f86f857b1d9f98166b50072c61c49193b65f46d1adc26e5308b2b65288c6da5ef46b52d59a3f907199dc2edac4671d146a485805faedec2adbb459c4d936f457fa67b7ccb6e68f01a1b308078f2cb5eeb7d74c22c4b1b4a3c35df022f50d0a89694d74e4ebca5d45b7858d646d58e7db3909ee113d8cb3aa0df9bef53446c871cc7870784065f6ec1bcb77ae1bd4eed26f45c3c7eaff59c6541545ed231de05e544cbd9fd9f73a59575251dcc2155c4ee7ae84ceaa1434705a2c43b4745dfb6bd08d4dcbec88bd54f74425aea2b3bf3d05f476ea3714df46e76d18c7f16d9fc0b274b8f2edd0b3b38a24808f8497edf2c476c16417921c8d2c75194d2cb877d4eb6ac85e943cabd87a45b3b42176472619486b3670879b66c03d3060605b104e03817f77c8fd2ddc81a2f1a773eb7f131ceee32a4f91605328127434cc1e39e2de8dd42256d5c19f3ad6c1e35ac02576456db504445f3869e18f96c04ed0252c12e64216d801f4988eb64fe62c801e8343b8e45266737c6e6aecc7e36aaa9e16901512fc9da6406924f6de9237b45bb1c986486ece938763962851f1aa19105523aca3d62f1eb6cf2c1d33bf238065cf727a3bae342227c50598155ff40d216656e1a56b4f7829ae40a1d2a979dc02826d060bbdf4f4e26bad414805a3078089604117d8a416b0114a7846a3f0aae4e00d06283b8abf6413f199db4d1d3fea0fd969f565cf73038b3809bdc36e87a46fee0718ff2e10f989127ab063f3974411681e3577ec21fe6b37e640c9a9038226a15f9a11ddd2cc9cd50b3cac31de6e82d7184eff754f93f88d9e782678ef4f7d2126c545740db65719827ae898e0015c4070919559c3eb21033b1968f6c039523de426eb86d5598d5e1e71fb1d0f29b61b8637bb5da29d8ef59ff346af5abd25438c8576c7e2c34951c53971eab3ff838c25e2ff060f7d3b49ec0c32eba4dbb304cf8af1645b44719ff8c084f1bce6d9e57b51544d448bc1f7407f187d4d290f559f5a700b7b0b46ac274af2c66980133b5e517947354a3dbfebd1068d499082de9ceb76a228f22f81d371571f268228e8c6acac6aec8744d0fb8eadcb55594cb96a8558c06efc18f537d9bc98b26a0dd99eb392d7cd1e86ac80e42cc123aca81c02a292bb24bdb4c18598a0b63d32ef6eccfb038d616e688b20b95e82ffb201742b249b8baacad80413c9aaeb5f4bdda5102b744a32c8bb6f9efdd7c587e3672f4e5fbf7b7bf1faf4f8c333f5b71306f60d0dc262c666742ffe39f619b462ca947a7c7518b1ec9fd6d97225ca02595e31f34a7ab043962f56fc8a200a99009f5531bde4395bafb0e9b6b46a3f6080edced80e9ee817ad408f8ef66fbc5c21b1ddb4cc1c4bb48409a5100fc9e5a276202b4bfab54b33496a150daf6dc0c0636723ff855e376e45c305765111488136e9de68c4fec6ab29403d5e89fa12dd1c9b2bc1c0f68eb86455ae13a65e2db87bda8f46800f29aacf805102898b59cd9759e18f45bfd432bc1a75bf784df6e862587b5ce00fada8e0e143ba0047476db4de2ac8a26c48341c0617928e3f090d019745dbd142d0763bb421bad586976fef7c9fbdafc5249b20ce30067367987bd618906d2091a13a9d76902ed1d9e38ffdf002f79650b3b5c72850836c90c2128c92d1e94da384d9d2aeabe987850d00b8206ec9058939bc82f06116d6392b3e524d7408e3b3f5c4115f7804a5223aed2e8c7482016e6f51effe94bcf910b10fa28e53bd4d32c929778df84d1b1f6ae7c441ce11f3bbd7536f8632b4b9c43ccc1d4fe7ec4365ec9e168ded79a0201414d36cb2cf35dd2b877fe64438ba5b020ccdc431ec39cbd1878297c5b2a8341c74a64eb53e4bb2717d6d1b76db4d61c2250dee675b33ba78ea3c94e10aa58f812d76567cd48bd5b696a878fc860beae6aadd978ed8c5056259f7ec5f7ebb1930ec73c07e0b066321bb74536edbb1c1be3b89c76f5f5e1cffe7f1db5376449b39ae72d3c8616acec7556edafa86537609cc480937f8f422e80a8396e15beeec272474adda15486c304ddb7bfb59d29b2fa5be5124fb91bd56f74e251e89950bdb4155ccba287399f26df1457afbdae804154b9c357833d819c6bd886acabb70ecda1aee3898c35951368a35ba7452342332b03933a2302bb2ef6544362a1795ba0480245e15bccc892c0c2062b7e0a8e7fb7fd117d30c5ab28099b5ee00d35684b4a25ead39a231bde45351678da8c1e72564ee24315e5643daf9552d5603967339ad8b55132864d11f31f9a9931ad393732d41e66655c8591dd289e874241b20b199959966955a1183e605f2e91c62d064274420431175924d78c946a055c3f144454c4f4bde2c448e441ecf9c4c274e294b5a6beb88ccb0c5e8f819136379e9f4d11d2aeabbc5a8caabf592d718e087694fd3e5a604251759574bc1abba685c218398e4a6a8a3af976b093b648a0f3083c85521b98602565b58540b5e170d1b8f580f3d27e1df20711be1ade1b249a45abed9719f45556ec6c186b223c54d8e7e60bf05b5e0aeae8aa6c8cae29fbcbe3880785bbbd2e453d29490dac65d3660a7c5f7173e51808c6edca67409960892a5a8271bb8f753dffea2fa2c2e396dd3c0f0998833884f4cb76c3278c664eb2dae4bed183d61123b7a93d63dab8d06eb9f7164d57b2ca3eb0449001874c02387d96a556eb44a2dabe7eb25af1a19e8801c8e566b3b4401a2e3dd4dfa656dcba98b06400d4dbefbeab398a2a8aaf3d29868423399afe1dd1a6d0cf9eb7b3d90a06afc36ee26c46dd43ce7cd56dad3b349014ec272074d4abfc9764e9be5f9df8a3ce7959aabde4c9ca5e7488a0d7429bddb361ee82cbc64e97aaa057e1bb0e70103e23a15e681e98972c1b774923e5ca7e7aef7ad9d0ea3ecdb060ed725d72110d12d0484768cf89af34a9c5acecf46ecb962b996db0ef160a62fd1d18865a51463cda65355926c3acd69ff25849bd8074b64edbbc0aeaf5bee902dfc8ff8029ed12e42c09ce48189655242e03e05a82b5c9560b9216abaa93b6d4cbc295debddb959e1718fc39c76da85cf9ee84edadfb6d11ddce9c6630bf87e8d3d2335b3c9eaf9015c264fe0ffbf83ffff9e5e11bae0ac5283b8214efbf606a2b062074a80d658eeaa6dfde033dd261eb5fefdabeaa071ebfa9a9defff795dc19b418fe287f37d18e00109b6d2e33bdf87a4ebfb03b6e3489ff8237d729791e2ca91c1fc25184ddf8ce66ecb86c816a9a1245f52c1cad8275a6208dfa779b85a4fc5eb110855737b2270b992fe3546c9a87d3f1d9921cfd1fe2e29b0f3d80cda36e327462e5297464a2e3aafd451f0f8c351f2920c4c46afab78a7a9be145b7c8be111ed7bc79ee2af63b695b6894a6b56251b75d4e935fbe4708bda658b7396c30dd45dceaab8c37bf7d8ac8a20043f9195fac410fc42427a57bd92368b8dd918fff14b723f9005ddf397f0fa9aedb9afc1334b3fbb83241f80c601eec3403972c0e6a2313e47a4a720b2d1bf2974aa324307b616ba222243f71c126f3cedb563fcc405c3dc973867f4104cad357c1916f28d987c79a6d9f79135cad18e7615bc88be3f104293c5bd731cb6a4fd22a062bf6fe3a88c05fa05d405951d90b8b5117d2ef815d8e52e395fe9f460c5673e6052b8149b50086cd057d946a2b5798521abc58c898aeb9c7d7ea49e460c417daf036d338da987fc6c5d4382d0b50e319742490a06dc113118ffb2caea6c89d54ea9794bfd8225700ba5f19da92db10fd8d5a2982e421477d988951b0b40bd60d8a79d150e75b66e7416360fe3d1e46f57b5074cac1ae9e385ae1a19f867e04fecf8cdfbd3ffbe78f7fcefc72f4e0fa924fd4d78044c26a45cc5129ee17853cc2093fa4d69b841c00c6c1ff6f0a85efa0ef194b69f0b8edb9a4da77cd558558c2cd4ad45adf83a05bb534a92a30e2edcc8c47129efdd83f5c3a046c57ad41008dfd6ddc76178aebd7a5d9d6caa293b627bd094b4a6b27bf7f44f392fb30dade29c5fcc2ee956c20bba12f5322b0d55d07bd24a7915bf0a03133b644997e4b467b386adab40d97d839437d4fe28fa5f8990c6eecb1c5ce1cd6a80e20ad98c3507beaac5f21da6b082ed0882bc73ae6e6e88950ee78f16531b9b038d87fedd775e239d8c86b49e46e90cfa6f09e3212bd06539686bb50b6213066aa6499d09d3c5e9a26ca5014b0bdd096eee4227043b92f61ef86215fcca0e2fbab1f524a2683ee392670a105fc01e31f1298eb2bb4bd136aa0df33a785cc0cde869eb9731736cc25feca72d83a4599506a4b61f1f8c6dd7eb2a8245d747817f010f68b8cdf86cc6a7cdffa03bc70d2e79f3bcf2ee169d71549b292d0699bb8eda2e1fdd999de4f9be0025257672ba28eadc752266c90c7359c54ca5f60bc7de3378b3b44778bb9ab8254620f47586f4e0b1a7ecaace56d479b0e71f4c6ca9cfc6e66f5f778149e20eb2234f87878eda321dbd14389cb5075aaaaff082a40bf38f3526b181d141bea99a9f34f57adaacebaca4674e7fac8732f1591f3cdddcf5b52bad93d2d065bad53da24e819beef5354b5df09497191ed812eb6220a5f6bae28cb746184be74ed87ef96b02be256fdf89a9a77659ddf4ffbf310388fda2a2c7b886169efa8b5ab7df7351f08cf3174945efd6fa0eecb894e1f8f22f8d09d7772ca9175d96a423baef7b485c3dad04b1ad85d53feb2e6c81949d3fa62c23c0ce8a9abf76ba9b606528233123899c95f7bc56ed748ceae80e2dda06c3573ce103a93498edf77aea4277da879007fa901c934cf25755bbf7810f1610075f1387b65755b77d8ef9a7b73592970ed0a9de078cb744dffa4e1e1146303c6fa986379c2c04e6abf7d3df84b8ec9def872da84b2f6e2458e6049afb9d3b766decd4b5dfcc4288cb54254f71d788a5a75dfb2ea55d9bf3e6592396741eeaaef47ea617d974b2bd4df8ddd3d879ae7a3ff20d3b02e07d504b597720ab1904e56d239667b4ca478f84e2cf9018683ad9f2308bebe9bbed8437bdb3e9e463428a117531573288aaaa46fd910cd3c850aac8de56cdfaedfd8f2096bbc2bd04c591d6b9f4d655dfd1cfee311e6afcd4352b5e8f80917915a253ec7d354973dc26b436b42d0d04b6d43d3ad61a1de5f30a97d054a070e69d92282bbd2e1424d51bb08ebce9a64a5b115739487f1d56a49f07ac35a7b4a9962e3048ba2e9b3ad137573c99433dac1717a2c87d1d8bd35ee8d07b7041e1449acfa4212795ae34b6a8077bdceee9464e744817703e2742943cab50559f2c219bba80c7904fa7395fd57c9a353cef9defbfb4ffd0a2cf4cd4ecbedfdc7d0490b90f32c27d76f403bb7f7e7ebe0f1146ea2ff707ecbe5a0df7c97203fd55fd578f46fda2cac15f50db0c9fc1f6c5b3dc7f20c2a9c89879f4922ff2aac0dbdc1b6a1cd391490e5b354efc4e06ba3f8e0f3e74dca24e0204c250f4546dc222a53bc3056beda94dc5d4da95dbe1747f5a97dfdaa1abbf63affa3596684f1b84347a4c072919735040b060121a3003e4ceeec35a29d2d124c2545b66b7eefb44d2126f1c71539e1da64ba6929aaa15d2a71c0e58161c2af614378c8d13691ec05dbc8d47b71f793aa60e16bfb7d7f6311e45073fdd6d1c9d0c796faffd733c960ed6bcdb583a79fbdede56aedebeef9010274c65bbb5bdc46e7b97eaed763ab88fdd2ed30f0917adf4cddc7db1b45de7e957661022f0cbb30f6f5fbffdeb98bde493f5dc262a1055b91962a66b88d17cfbee1480a03ff31a0d70982f19cd849fd223f8c40ac938861f0dfd53be1d7303162dfda9fd6058d9c35ba364f0565ca5d5ef1ffd1bb879c958ff297741ed2e79a7d4a5857c5f6645858e9c3dd2fc80a93bddfcd353c15ef28d66cc900f963ea4d0a8ec1e532d26f2a7da426ea3dcd9187f214d5d9442acd0646225ff552d5691f46fccdb64b44764a1c0b12d7c00ec012eeab090888f1a3711c36724bb398b7ffd98be50eeb24dfe56c55d0d01a888a27e9b4fc4b4a077c279de85bb71c86ee86ef3b1bb3d3352cde90b6a96a955635eabe633a2eee2ddac461c3a69309b13ccf82bb223e3473ce7cdbbabeabd9da729e1393944105efcea256d2bb14c3a978f5ba76c3a7d49dc6753cb9627dd6f07ccabda3f64379e73744066ded8025eb88befb45f9ff80c331afa07cb5c5429e6a0fee883d4a38be7bbca98a3e7f31efea5e155eeeee1d0d5a440485ed3e780852fd1afb71c45fe763f68dfbfe8c39f8fd8f78a88ef87a3beefa8f9c9a3ef5b3d9942fb9161649105a9b503e9cc46bbbb4aec1544d0799319779e7e4b4f1605dc852609c8ca2df165b5cc56c3250496478f20bde37a8fd811cb243afab8f6899907f69130632db0bf744c8401d0bbff2bd88a60055a9a729ec9c61ddd4c18cc06af8a2f5cb23f1cfcdbf78fb17c4656475f518608cda3dac42af92319f26aa19aafb1e16576c99904d90237c8cbe367bc8eb4b39b1e2490b9f42859533d39c8e116e1207f299ac57b5b7cebb909071f28beb07aa039bdd5eac7066dd4b4849b7a7ded941539e72be7bac39eb29acf5cc93153dfbd11df74b08e6fb32c9e86ebe260c02eb201e3174f06ec62f2cd9c28bd1349375d1dc96398176089d9b30eb1813ac3274d0ed9c3ef7de3bf26d7ab95a81b9e0fd97b00fbc23c74f57a0aca50fe655516d3a2b1f7d7325ba943ad3afbd488bf9f7c5293abb8aa7fc2392ba45c73f6873f7eff38f6c96cb908ccda5df28dc4034c64bf1ff946d28ac18bbd05bcd6de41aa4d10d62e2e302f6b4ffdd21fe80ff009ff3aacf897a6d73f647be6d33017153f6c2dd9ea5aa3fbb5e52f0e869f034b1bfd03729f1a960e42361bdbe15da3b511a7f506b02085a2cf12a065a8e40369b6e58a4f8b59c17317908542103ac216b3cd8f7ca37aefa72422f3a71bccd5d89dd45401ca0916eb3783aa06bfb39bc86564565490512c05fbd68e49ac96cb6ec9bd7bc176a95f7a1799db2be42dfd3ebbc8d0f285bfef30496f88a8da54d3d34887170708a312cd2aa125c7ff24b0cb8269761f02421a64f08995f289ff491bf13f7124fd2420fe273ef1274a26893f20fc271d847f6b519b726345ad8936efca64c336f6fcc7e7ad8e64201cf1fb3a6d2678934ab652ed6a0e2d953826f95454798b3c160eac90264f491c99b67d68ef33897093ecbe51bcdc5743a07205f0077c43c3f5c04a51cd79ed2e0936d944b7e890fd2c15ebc14074f50e734c28a9f4367f12070ee9c249738ef3ab93ad99a4fb313de9a7f4997dc9371fd3c5c641547efb0a3eb536257bebb7171e4712c2d7d12a09e3712bd361fea47ff4d6234835aaaefd0ba2f32ed0f10d3ad950200586bb8630bfde93377eab5ef28d1f210acab896f5895a1c8d5c28fd4003c45934b56cb52a0b9e0f4c06aa4f4180e9a7b8939645eb7e01c314c2a16d079264f49e7c62eec927fe3df924ba275beec896fbd1de8d4fe8ddf8c4bb1b278e95bbbb7142eec6275b7024c23bf189bb139f24ee44ff124ccc27c6570e5ffc71ee2ead76342c2b7c495422e7a722a813385fd8ba11a048aab2fad113f42db638990942d1aaa2f0fcf3d52208779d739254e6de3de6ff4251df5cb31a40db0b4c39d259e28326fbc365b6eaa56610792e4b743b0c1e6f26f9dfeeabecd5b8dd1a7b55bfcd0a2fccd39cd7129b8c17d265483ec23c54c3592d963d2fe5365625ab49c7dab196e8f73de71507c66773ecd899bf2ac5d50bc58f4a4cad8fd8a376e210374121b35ffdf4ee978b17cfdebe38fee9a7e39760c9bc39af92ad10b5b595a7d06bb6177cf770dc0a991e938f516ea2d734e8b5cd9c96ac1becf6ac14573dbb263e0a40a8305317db01d933b8c1f6f692772538eda8015855d781f3a106a0461f2e2793ee4af2ed03da77da8e311552a966e1022a4723f67ab92ab9ea0b712c2699d67b2d9a6625c7a3d1bc6816ebc9702a96a3e6d7d1548c26a5988c96996c783d0244d7e1afd25bdd0e5fa269f325460606cfb37a0e6a33b390c16793e8e9e14342944199390fdcbe11caf191aa5ce45a00c086f40725339eef0fdc829980d969f305fcda64a80eafb9a2c7081d5ea37cbeafc5b2002ceb54f4b95626eb1215bf62ba3c519dd75c8af2332095a37a23a160900d5f4559af70f971708050a8fe1a7c273e89afd6e5ac284b9eab1e93cf889da6e42f4dd81feb7e02d760cabacd7e6d00e540cb7a6a111e3e84cd83d75c1f2fff39af40b0d95152df9a36c672477845ed9223864162cd2f4dafe6cd362184a238ff0a7a74c5b0fef76f0888527447d4acfe57ed882ddf26a1aad5726f9a9a37c366c1e3e09b2ef4a6ac6299dc54530d37dbf61c336df7d4982c6b68796127d302b5ac899e0688d52daf08271c28be04a523681af327a250fdb7e14eb50d78a9d708ce9bf0ab01392a5bb6927239128aae16de26526b16dcd88e89ac4f1bd61c7b3805e9e096e7032b01f446479069fb2bc85f8c962dc24ecc5d1254492c349882f0fd3229c5f412fc83f5eaf7448d87bacf64b39ecd52d9c3b4548b82867e7df592c987488f3c53b20c4dfb63ae42c423cbc58015cd7da96753f27c2fdd338c8ee75d4426db89ccafad4f950063b0f08ddfe9d5f5eb1bf3d7666230f1949066676013b9066b8107988935fa89abbd30ab913a1678a9f72057735aecde72103a39aa6d5fcf06b1aca7ce1f0558392429a644d3ae28488056e9c9110b3b95ab03fad54b4bc56bcd63c3a3d8ae3cf24bf6fa317eb2098d008f32fad07be74260c2540ace05873cd5221333425a5c5f33fa051d61d2df207e497ff3a36a8cbb8f7a8fe6cba22a6483a8e47e8c058d5b088764ecba71ebfec2ba79070823c9a8b1db4625c46477beffdadb02383ca064f6504133a62d3f53fb0a1f80bd4fdb05adc5b9d2427ce9eb68b72d61b0e7bbe1ed7cd5e4cff78f8dc7043167823952cfc57a00113f873adb44ce06b08130bf61ced11e1fb8137eedc8d9f9fe337256207d12af21a395d1577280d72fe482c69484a3b20e6b3ea1251cd7fc02637304778a55897b0d25e4048eba99db8e2c801c9a45cb2ce255b79d382d6c6767878efadadbb2c7079d875a8839190e96ac1ace54f7d7c67a866ee5165bba4bcd1a0ff2edfa248ab8d6de49ff17c4cea4432e2315a0da4e1d4a7a7404d88a806a627fe93c4a2e0c8038b06cb678f42678b306c4b4de206d1c37cec7b8075575c625147ae470915923eb26b4a7b5b44542ff8cea335cb1f85277cb8b17986a20ed001796b4d2998f09e5ef56b77eed074fbbf66df8b21b8155c4c185e4b4716822a45ba8685b23c2a91af09e306cbd288b06dc3833bb8c51d85d44a4edcb027854645bde52c0dae0324f2085fdfecb051eadf618c0fba8cb34dcb6026476a9334ddc87fee79ceabbae62243d6ad24f4a8fda42de2190a94d21eb83f2840f5e163b4c810115240c4c0bb4cc5612097d99ad1437b10289397cda1a3e8c5da35ab95b1b4ae756069676f74eec96c3427d2534760666381a30c939fbc3bf3d3ef0e8ae83135f5fbb9ef63c1eeb7d2aa4e394fde08b85bd487e4db1c3f8e087947e078bc3d79c6e1241f4af6487d1ac3bd6e5ff364b64e7fb5fc9fad2dc2ccdfc2ef946aa33edcd3041c5aa482a5ba298fc6a4eda9ca33356e2451172a4b6d688c9514c7e1dc2e042bcd2b0bd13de3ebabbb4877cb163be60f974cf858b010383150944807f1f7ab941ee4e0f6e08e7fbf77106f7e387ada8e8cb4f7b510d340b56dcaa718c384e14a25de0be820e2c1d05ab031e33bf516ab9e49b8ff1dadc864a76ee4b9124fcbabdbf5b50915eacafa72309b9d2be3d9198017e7332e1555317ff0a3a39034f22432dff1272b15d5aa2d9a1db5b508d59bb6fcd7e60d821033a831fc0212b318b6f40627636b7a5b10eea92b898da8d6c07e9c4c28aef6ddd9396e4c816d84c1a37dedddd872f0e5851d9da09a53c9dcfc5c1c0163d837f7f6c91425bbcda92799923e1b59bb4da8e26bcd473f55077b779b048fc4b219ba29a7b11e059be34e2b565b4bee81e578b6476d5086440e9916d4fcf3195d35d55cff23c10df5c530328a1bd4e8f6d8451d47e97ba3bc95c8081e3ac8351773595244ed55496e77401bbda68e1104434bde41b7d86312971a470474ff455564bfebad27338789c8e7753657fd0e8e3d45916588c817450851231122dc74efb62aa66d5dca3ec8a6651cc39d7cd1f1c7a6b0677033b62a11f7dca6932453edf4663715f11c1d7b241665d3b0986df527ce69681dcfabe2582b96e6a47f26aa5768daab46333ad947ebb66fe17113b7004cc7f8b7dfc6be84fefeeef40828b4cde9dfec0241dc85f26553bb4a796397507c58a7a553756152bbeae46f835644da4aa5b34d525f5ddb2a96e69cf50a389eff833e18aff12da5233f91d086b4e24238fb0f63c928b5529a1eded0eca8a4b07def635e412083c77dfe38e317dfbfd9c7fd3bb8a0252a20bb86f327c3119b0e9e45dfdaaa8f98085f0a809959a29bc83f95377e8cb7db119b47b085d36d1a883f686c3874c6b558320d8be18db0ca4669ddb5bda369676c3e9d78e8e9a52771d27c60468f1fc9d053ad0fde5bce1d3e6c5665a72e9a504e35f56a26ede642bf94ce299f7bfd77cbaae253ffecc6bf40ed3e9c630371171129a2e780fdc24e88b21058ae162ecdd9008552eb355cb6b80da2482bd69c4df4ffec6cb15af7b52aceba9eb7ac02e2eb433c409e795cf231d126230c9e829ac9b4d3052fc70189d40fc5d73130ba8de5d7d34622f8b9a4f9b7243130aaa66757385845f5c6ffa7763494be4db72190913cd370bce5e668d838668242f67aae5a9a89a4c5d1026c78b636b51ef24524335b6c322c50e56ad0b1ced2ddc18fdd61d769375c017579c013c364c04829f751e1ebd31c9712586040298fe9904765052a6609edecf471e0a22221590eff7ee5192816dbf77cf9f1a88436650893bcd2fac56c91f6aa79e4c1765d7d7cc87874a75a87d4c310d0a1c7dafef0133a7f0eca363028122a411cff29c1de9a2812ecee8ac1244e0b39668f7430f477971e05ebfd0a72ff631aa8c2a18bc58cab0282bd89f5979c88a870f23fbaebc38382b3e9a1a67c5c758c08642dbf59f640b5ca0fa7b134ef56e660b285a3ae10d09b50a5f7416f23666efc4932515bea2c6fa64dbb61a78e57e7277d51fbdab33511f67d3456267fde266299f80fa66e7dd8e3c6bc31fc8063cd95d1566d6e1bb3b92f7572cc07798b5ff775981ef5a95752999fd56d4f8265bfd6ed4f8fd2ed4a8467c576af45f4fe18e7cefc491df6557bebf3d5dfe71db8afc76f3bb2cc51f8da2707776bcfb3afcb1953a4723f62a2bcb095ce098c75b16cd5a27f65e640d918eb28a858f587090f14031dccd8d8112b75dcb046e8a3e0c89750d17b4e632b18c581f3e6c5bcc9b383238210e8782b01d0364ee9f5e5e65758e19629a029d3f2211d6c2a5f948d9e40674806abf054f0cf385864d1b793bd980ff72d1b5d29254543d96b4ac7ac327b7a7ac5de437029a5f63bc933407909d74af0e777eef78d574e02930337f93777fe1448e294af2e53d3f910486f39e1959c50a401720011daafffe39c219543f3f7ce8276da8e7f2ec02c41f5b5afddb17761095bfe1f5f39a6797ef4551350152374da6aa9a54ff67c4b647ece063070dc60d43e59558f57c19bd2e3e23cbb06eb4af6ab17c56cf658fc61203a5bad22941fb6b9547b823800dfe34a5442a2a59e410dca31e2d3cb7c030da4b12189af1611bb21702cad76ca5c177f48b2dae65b31119c0b5321db7e0a63f2ce4699d4dcd01517fe76f44ce876fdfbd3df6d6c6c01b9762de3bdf3f5b8ac917c849c43f6a653f69d446e7dd8729421e53842b8e86931e4ab4eb4fc9d09e7f387ef6231b935f7e7af7d7188522a600331d838a4fa8d09f6a26397b3c4e5e65146019b6afa8e62fed1c0e83460e5a1ad16ede70161e7b066ea8f664a76a18237f76f03154369a64b72fd7356235357556c9cca06640ba429d7f54e7795d574d510251f12a378f67520b33d09efa3f2280f584438642b9a9a68b5a54622dcb0dab44c59b052fd501525569025b5d99245f853b1e872221f5adcb6d2bd542fbc96db3caa04b41bdab4ceaf541602935f2fbd8c77d063df286d751ee5a328f9ec9f9d12cd4a378ee2b5cf1b720a7a0fd9528da7787683376195c5a979c49f5ed9f8e3b21dd5c2d78d55bd53c2fa659c3312f7d9026bc23dffbf5357c6a49fc6e355db1224775ebc208bdde43cfcbf611aaee7fbb0975b3518564fe47d03a60a2498cc1892f1f483fa6cbe819595ba817cc449b61475e0acb2db9584dee6563532619e05272774e1384851fe16205b014141c30e0f47cff97bf1dbfbd387dfde6f8ddcfa7695434930bd3a4c46b095ea64534564ba2315fed4fff68cc260dd742bf2432afea450d48dca59a8cd24efeb2e0b74939e9e505774da97be811163ddf1f24724ada6cd94736a335810449441b68324c0018d643dd58b49d408494aa123b322d79561b3af30b07ad7919ed524e3afa68f8e7ce4c344c45973eb8516ed55b78667bf9aa6312f4a3264051ab1f0af775e1fb604bbbaf2389ef13109ea9584e40f2f7b07730d4f8307cf9dd1ee625208888f3d8ba17174a1a9b573dfb97dfccaa0fd86f4ccf636cc2cd6ffafe2dafe10c3ab8492b67d0d01b9a0d1058278f10e2d7a474280ade7285efcc408cca9706c73ab06ee1afce0dce8f1330e6b31f39c4ce449575aef6ac242963aa39266a8a3e1a269dfc2837cb89280daad568c4d4237359fc1324b231bbe22c17d5fd06f085413c80f0456d6073389a55aee3ee17d967259c2bf1bae40d2f376cba968d58b2ccb3e5c1abeae5a6ca96c5546bbb06d0bd6a495e162bc60bc04db65d5659a97d1b75c4317e9b28918f022e178d74e10c0ee850eea111108bbeafc597cd699dad88197091c9312129833658d1c00c739a91e51e1d31d83fb5b0f697f37d8bde2cf4a2db6faaf0cb22ffb0ae7ecafeb9796d31cf6b7902db908e8f0af243853e2c1628dd15198dd89b5f8ec70615fe53517d626a45007472e224c4a7ecf58c55a219b0092fc5159b8a9cb355d62cac743a03ac2c36624b5173b6e44b516f14032da605af1aafc7d3772fdf8d316e89ad783d13f5521d149042e59e57142428dfadd3069e0025f7fb74f2fedafba703b627bd6ec675a7d22129c167e8b1a87c58849b81d562fd0f2506e41baa95d07b760b5120f5b73bd686cbe4e753a2764cf58e6ad3482360a0ab8706c9c47d6ecab6062752d25a1492cd4c0e80fff893a2d769b6961c3327e23b0d925dc0ab6691298e946cc976a55f4157c0dc6aded4c57cce6b961957869af5e0b1270b882243b967906c53b1212dfb20228c6a52ae278af54c000975b686f445977ca3b3ed4ad6939cb3ac9402d09a14bf54cf89845cd346c52c064b09d11013c542cb2fbcb7b44f8646327783955ebd4a34e6d5889998582ee02dc7007645317441ee8edb1eda2da73541f7e6accaf6b31a3af8330230bd1b1309e3cd256f923d24464c72b60d8cbe46dd89a6e79d19ccdd47bb035b50ebae9d3bdb963e9e88b8aa7ee49bc47dd9e2f1dfd9bba234c55286355f89bab1498e1343f9c067259f3643dd7fd0a019ddaae69f79d5404e06a924e32de3d4a2b41647123e6a44829ed5e29fbcf2c5c57448afef0304cf2b2bf0049e844a88f15ee22b259f3811fccb068a0c22e9c58c427d356f665317feeb4ba9e6275f4e5d64d2c26a885af60a8ab1118a9ede47876521ea201f9c7ac0b4972530bb87a143fa5c31a39a8cc81f501adbc81bc851d728afaf59afe3f3113bb32a416fc4607a0e604e8c135fe5e5908ace40917fa16352ad191fe5a041cb2ef32fb09c8fc2881faf11ed065ee45fa81b7814756caa60e6c97035f1420aa88f7ffe19d4735ac77ea26e893685dc68c4c86681c27e29f26286da4470ee1cb0a9586d58d1a8fb25034de05454d3755df3aac1d2ea85087a4488783ff88f3f065edbc1265d5cc855cdb3bcd7b597d7d76a33fb5b9c591274e9f9b48432092e5850f1acf8d8d32b19ca3a2e818cae797daddb18aad7d880e24919dab669f52cd033dae1c0b8a19bb1dac48470a5bb4a881361d2d5189900ab6e55a55ae238aef21e504cab4e7591499b0a5bfb6aa6588bfb32c431b8ccdd116b692fbb9db598a2642869a65292cce11d83531ca5e333e528b6c5af6727aea9bbf212d7c26e8ca4124d31dba476f22e5c64f705a6b6475b235288852bec2d911f039de20265403fad2cc0168c8fbc3e2ce99361dd90df3cfbaf8b93f73fbd7e717c71f2faff7fcc8ed8c1e3c78f1f0382e1c9ffc7debb7fb76d238be3ff0ae2ed89a5449662a7c9b6f6bad9c449b7d9c6714e9cb6f77e2d1f191221893145aa04e5c736fedfbf0733780c4050929db4b7bd9fdb1f1a8b0486780c06f31e2198e84ebab10cd6ea76ff28e19f1ed47892bd6f9e7c8b3081ca06fa8cbb8bb04b25cf5ae0a6d7bfbf81cbd7947ccf03a26443f0a37c037d6ac17b5a59458047ed0d043cac83e3fbd4073091af37fb38f98b7fd16ad6d0ebf92d7fabf9efbb8ec046882198e6b18490a65c92c23cb71a454d5d50a7fa5f56be8ae14338541f15a48f0acb02746f891ae13aca184e2c0f096e400dad3ac59447cd984197361248bac2af4d49de8b9928d391d68ddd72763ebe2d9f67b3c07747918a0472eb289f2f2449851edaba8412b8cbcb0e33451ecde6169754bbe461a8b34b6b3b1a1d3500af5bd1bc92e30a7400493fd3f3a09e3e280e2bb12ef84810ea82c376d3c009e825e149f2439a2422875cc8108aee74791da4e110914eefdaba4849fbb80bc47d6416152581a5a0ab8d921e7910f30a310c01db67b552f8c817847588d4f7912ff925ada6b8cb8f3aeabaf63ee67509219b0b389e998248c36a784b3784edb3de8307ec9fa38c4bc91ef4588c41b38feeb2b79e057d9acaae4122f8772f78a92d21c44dcdbe329b16cbb10f0d322eab1ff3e2327f635cff1f854d744645852be034e3cccaabce463b0465e6e9d9eb7271f973871559f2338963302dc95b3cbf60853ee9764f15b170c639fc67e95a3bbf6b935bf5674ca5c796f99c1bd795d5b96929d1a41deaf75710a0c58895f12e3390f529c8dbcc411dda0b7a5a838a47e19025c4a078009b6627ef383d97ab974e2d94cb18d573d755456a84b56cb4b71d89360178e3581db668563d781f5c0db5b7c125d100a5c65498f1b4221613d40cec127210315ca899ee2a2e06686c7f23d244a723781479c5934424bb94161919aba9f141b1c82bbf07625ea403eaa3935d7672dafc56037ce437b859cedad4740088306635ef8a31be20d3ec9a6089eb1abaeefa4add7170b27970b9b87c53bfac29bb6b1a04c92fc09269dffda3463bd0b789ba5da1d32bf019a7ec6851b162cc4a754bebe2136e2881fd42ab09ede81bd785b9dafa6f9c539ed73d4ae1f60206dc87f15d002166f7ccc5e5eb4acc8cd30c322b0ec456002250d8f9ea08543c34768ec5d931a8118343c0703be258d9ebb1b78549139666191317a2bcbe9c8a5274c31219b0b421d3e57d1e1830f3ad86a356f7788bc2b553ec045bbc55c785dba23cfac336617d9125e6cb89c82a5e8fc9320d00eb634cd37ae87eca0e896e9b892b754b815f8de7d6820e0250847e8c85017ca909dc7451d51466ae8d32740ff7715e77a517fe46794ba733bea121132830418790e11f8075b856330d5c445e8f8151a7eb239f97e2b962e145d2b28432a406d9da640086da98349999fb2d607f5d6e0d78f91d8ba68d323d6b1f0ebad709a3e979c8ab6977c6af944ca3e7f45027d8db0bf5403157e3002cd9103b2ca8129788abd8f0bcf61e63f8e9130b5f06c1f3f5ef850bb8ac2d9d38fe9de62d0f9ffcd1b7c3f570c476c9d6128afceaf0dd87ff1e3c7ffffef97f079042c3a742a9bafa06eea09acd471bd3907df8fd79303c77ab7821ba8c8d3c9b599a257c135b6946d23c4a7c6d596dd3b5bd8b8e76af71c37463186efc86f1ef5bf8931e8e47ec996be2261c86d113d173e089aaad8b0ea355b76e4214bc6b8d7347c05e2afa1c19fe165db8bdc82d5abbd95a9a8ba680b11c12d059a9066c6f1a7b9de49bc6ee4ac3006f7c5a8b6ec0e4f286a1beceab0265d0e5b741b0661421eec126210be94d1f5ed4eed65476d1f604d33ed6c62afcb681502b9c1811cbf5a849c3bb5d8dc1327cc605c91b689b598f7f84d6a226857f6bc0fd3bb1adc7aa236406bce36ce627f5419e92512e61eb1a9cfe82eb58d20dc20bef21fd58486a7c8d16f955a73b1af623938c36d26254e4235eb51c62340c2d185373f4757d396e8b36047b0fa66996fc0487388637b9b8fc59078d679863bf863408ec78ae18b37b445378ff3e4be5f1fcfa15060bd632d0623fb6ef9be3e1ce0b252e73dbe92eeaa09a8ffa8bf4ecb3af3ea46777b9facc52edba458b8c45afe2aefd2bb8f6fc9fbb34251033cea7e0302d21d8e31a3d1e53c98a9c95e9648a2e1b0c6252c10fb2a57ee645c5f8b0b810ed8e6a0b7d2e397ac42c269922bb25fa582765316769d561c345c5d20a1d52bdefa3a32bcfaf59b9c8ab7426587121caa9e0907d281117222be633ed4823c009be5854ccde4b5254ea3acb84944cceaf210656da90529ffc58d4ba7f9fad7bc9f92b28e7d7ef41b5815afd78a087662b3adae8b24bf422a0efbda9ab9189d20459afa4662ec6d1878c60e0b4800c5bdd55e74b4fff55ee06f819e4022fbb18a500f6a86318c0ffe554e2b319e45df347335f8c0bba8ac5d6bf9a759754d9097feba6b7a33b7fedd3a8a856918f8b72b66b3d5934a112657756fc27cd32de2dca494fe45b3f1df79262247bbf8861efdffc821f43c44eefbd188b52e423d1fb17448d0f7498500fce454febe8ff62144033154b09c15e3fbf413b9af5ec716677e7de6325d1ddf5ac256ada36ac3656828e51ff6e5cddddff210388b3949351d7797b9eccd64b0149a70671a2bb4d0a7a2a3568afb847218452cc333ef216a791c35f731611433789ce31125e285a990161ca02f5df037650e417a2ac34cf81f29e490ec4594b4ec148de661ff905c7d838a77eec5a28df83a36922c49c8db22287d41b0cb35614ff3e36cd7af8877ab4de82fa95483aaefbd1db4600bd1efb49627602d5ae8b4e30e9f83afe0d48ef535f203b33f31589a12c49c178568571869e4296783183173ee4b1cdd26157c8a7dda45b5957c4074ca6f948a80e52900fd10fe4a26c84aefe84f049602631e448ba3d79a1439ea2cda0f7b5f11ad61e363a5f8acb7562c6d4b14015b33a86504a5e192e577d202900c8882b1655cc459e887c748d993b90481ad355800c88c9bb4b25e23ab3e2f4399e3f839f7a6767fdd43b8c5a440629db623b4d6978585defb1ecd092f427de20ea6ee2b13c28045bbd89b2a69c272be8444d61cc9ab2a0ac03a8d324a4d7eda8ebc168265941dfe5f8b244837247fa7a9ba1ce1772da489dc06cb71a756f91354afd976abcfd42381b5b81c8f5f2a8831f8e68d16aadc3352ae6b7b952ad0d803225be3bca16dbeeb047ed0edb6e9f3caa79a44ed37175ab3b3c0e67912f87f497dddd479fb59ba5b810a514cbae64dd44ddca3a391d9b2d2ac84194e60cf8233614e3a214faa3105c0a9a14b9c87c05c7e5341d4d212c55b2b462c3028aa76fbae45698cf82b34df8847ad0f500c802f214880bc849302e8b19de617a60aaf3c785ac30f235550f5822ca8bb48a04aade55b56f327c5df23277e6dfb3c2e7f4bb7add5aed3354ffa84b1655608e13b02b88452a6b30341b4561550514452d85b4ca265c7235771d8c8f399d210b00a46ccf214dc3fc1a522944060a4368adfc387edde0c37d331b338720b146a04200de723fc61d12748556e6835a9f0dcf3aeef8d4ee97a2f48e3524732cc5f77988c8aae117c4e2492124e3139ee6b2628a799a1445c2e6251f55e948c82e7b23aa4dac62abf527f56dbff78762a45a802f828e06d01f8f8bf865fd69b59fbf1f162af06ba2206a8a76977a9aaea2ed2edc0beb8b513396a3e2aee44dcdedd404807dc7b6b6eb8109e486f463bf82b90719485654338ea7d030c503d79fbcce1212cd1466dc2b6a5759348504946f5be17517cc285c6fb2dc683e3b5d918c2176fc8cfbdbf3aa12b37985849327ea4232474d4dab050e71c648a58e368867a96405facd0d8b459e48ddaeb604d8a7cbde65424902989145bf82e2d25de37f0770d487146d721460286c72cde1353b2c86ffd5787e1a2ae634840e0546ae5b1f056b2374738e3afdfc832dc7895ecf1008b5acd025cdd11b31d8c4355c950c7285f800f956b4d1c984fd18dc89f85a84ce280af3a3c8bcd41f8527b3a83b0a5bcfe4c68862de068034b45ba1786751135dbd5dcdf184ad743e6131d7cdf09bce91c43c597e5e493f35732f1821b0c846365a7be7a14707c25157b4e912d96fdda3618b09ae109891e9aab1c6cdcb4b4ccacd2b11dafb7d47ba95a78a278a4fcfc525c81efeeb2572f8a30e3b31c36caa58da101be751c4f07a5bea83fc1aa6e5f5efb080f22a9a9bf17202fa3b9ee36b7f1522de0118b17682bf2005d48857f6bcf537c00397fc1ea759254afa0013a59327fa82274f3e16694e7e665c56af6b8d667c4e7e952259102b9a79f03e9d4ce9f0a4676beb6fc862467f56c5b18e89258fde14239e09f3a29f9f4692bdabbfbc32f76194aa6970daec40bf8e30bceaa6774e2b4b99aa3a0b580a3246cd0596183d17f2807bfdfcc698706af5646aa16518d3f8da66d87a67b364d602aefcbefd8dce7263527bcfcb2b18864d62bdaf30c58bae3f61de82c97879481bb4d4bbe105bb8387931f5d77c8e787bc3c8788b0dfd442f57a289e0b8509093be4f36710080fd9b15c20bcacba241a3e17b29af272217bdb8f875f277fff7abc23c65ff39df1d78f9ffc3d19268fc7a39dc7a36df1e46bf8c08b45b5bb6650fdf693274f2363be6b04e0219f9b78c997bce2616c6acd7ae6e2e53cb31909a34b84989b1ac3b5b8a1f5e25a0ff9bc39aa954542f7cc9fa12158c356ff04af4e065c9de3c8be8730062601944b435b15b39683af283164896ab5ebdeef27982daf6bc8d2073e3985d91e2ada17b0873aaa456de7bdb0f85f5d3a0aaf0fb83d667cce4af1eb22552444019a17d93504568c754a4a93d76658169752945d76001cf8900f45b6655b17251b15a5d8fa287b423eedcdf8bcfb5136f2d9b85009374ea35e1904d760ca25a26a6393992821079045c82036d6db2fe293a2407b64b95ebac3695d61a0b502a5352f18ff0bab3eb024a200d8c5e5c9e597046d0e8281325795a1bc367a01bdb44d25c8ef41e3184b541549b16b6cc698a214a26bb1c4419a4f5894cfd566b1577a0c2d33183f741c45537f161d561ad7895796d4048709cebeb5a4fe28ae71b5d5bb67ea4ec1a243513f4db310b6f08f1965d8bac85f885131133fe585b9854dd38e7fbdfb5ed8e603b482f3aab03e581d2fd5e42a6c93a20ab12d96cc426dc394cb1f858708310cf83d83095072d3e378464438a6e4399e2451618e7a582df59fbc68709e446fa07311b873dd2d542038b2cc88394be5b49bda1aff1829c184fb826b8227e24e45fe110c4f923561d427b60ae910a53f87cafdfe58d6dfc051de09a5be24c284b92cc37c2cde618c8765121fc846a747762bc7c7daeaae747e644d0e906b2ef91acbce3c476772039bcbaadb74c259f3a6b1ba8a84c53c15d997739d639fe7b1887935cec535cc26705b84d526654b96e48e57ff0d7cce7489af63d003a9d00f7085c15d8774042fd448b75a56e64164ff22fd488665a97878249d2d12b6d43844004d6fd7354e6bd4b392ddc2bbf2f74213ea6569febb93d56205e9ae6fecbaecc36dd8c8381789dc0ddde6a66b69cd59d493a0184e2eae97f71074397e12352a41d17929e6bc1476fcf64ba1ff2d559e5286fea7b7073f3c7ffbaf572fffe2847e4dddfb5a849eacef5af4fd7394f4ffbb2e8206e219c34af6572380eb5202c3e7de820c7c6e3cbfbd4e3dadc47a97728d0cc5046167eaf0037acdef550270c33d4def4d2bf6bac184cde32410333fb15e4f8b3d331d3c7621d85008937637897eb981a90853a6b15b312e37f1d09f1554f40f8d113254f3ae12ee12cab78aeafdf903749652b9bf44344c136d9ad47533f1dc6656fa8bf37f61e8772b261a81d2689dc0f13a6fbd5adcff6229e71ac2beabe549e7ea2ceff2fc73fef0150d5991ca2aa4332bf359e1e2a32e7fcd615cd483ec6b379314d9b87e31a10ef50aeda2419a12f54e4f50e7462a8dcd01471799c18c9f8bd79528d518c3bc6bea3b8d0eb3011c37a67fc018a21182e6bf67ec37dcb55d98a5415c7962a13c7c78daeeb0a4c8c52ede5f31768d0111fb4d375337875df808b6dcacbb394a3449ff97ec0e0a20d1ad89b6270365fbacb62711019c8cb6011e336ad15d7602773cddf3762c1b9ef98fec7fbc51b8dd2cced79bf17d614c39c10c153a37adb6d9a515d6246b2fb1f853eaa1b16d6dd2a17d103ce0235d2dbf5eb19619817db0dd6183a1c7a35e871be6220046508e02a91432411d3648d4c35157e143abbdc7ee0d92ae5acfbde04da383d70054410348d73148b47cc776da1d8d6d0301358c8d067d204eb663086726ab5342e38475370085abb09e43d08843e493186c0fb6c1243dd886e2f6026b35c27376e399912375231ad693e90338801075b35eeaefd660884b8698d06eb3c110e73318adf0c1b49f47e58a1ab62eba3ad8ee62e1d5c85c0d56f51e3c6087a29c08c6f3028a11ea3a83695ee9ca57f8a0c34c7965c0521b0bd784966083f533d229f0b7b10350878c433ed7006ae884c3dec77ffdd8c860b9d614c3742daf8ca7b97612d15faeefe64454a41d946bc2b611d720e4f07c3ba093b4542f450d4f434320a36e6a7851280c2ff975f3b07029ea43180c9712797dccf1400ebda338f28fe2287e141929e1eccfafc6b6d9ed699c6b2a5f1d3f5db2ef66ab70b2a40621b095877cdee055a9d3b61f6092f6d4d624c4a01a707d113a7236cda7a24c2b7c73c8e73a8d67ed8b5d2cb9a004df7929aa2a15e5563ac98b32724d35ed8da357cd58a257b1be68370d6b8867e39ece6f070577ed93a6b4724bd768c6e7b81a6e211ae5eddbdb0e216e7d399fd5402fd63cdab66cc92adb08de913bc11de9be16a5edacf9ce1c50beee33ef4e3a467d3cf5edd9702499d599345b44ec0eaec540d96b72c75c933bfe35b953bb26ed02c5af4bf3df92a5655fe4fa5c322b16b94e77dc75ba13b94e1ba0dd440fc52af4370e342bd29e7ffe31e8f5d8a4e44308deaaa6580713291e2f85226152e415d48d9d0a5042aa633f5c54103911bcb615cef8bcf6119e273afe58359db9b045a86e5c4d45ce904f20dfa901c1f8aa34cb7496282cec5be4120b741656adc86209d5b48fd18f28684d4475c8e76fd273017775dd0b96b9a0861f6bb2d9a04138339d66a994693ed11d35882e7a3e53468010783d341bdc74de06c7c6aded089127e063ec45edda30873d76610c88a35c7d15d626e38aebe9e235628bf634607787f53764fa1fd1dff01c338208aa06bf977554302caa86519fa43323d2a5809a336aa028029257a3221fa7930579a967de767cb36efd80bdd78c316773c50b1a0e5aa79bd0c745c709cef8dc65bb786babcd7a077128d27c6215f7a9485c8fd7904ca314704e93c53c0333443ec18e7c5c89528dfd4294950ee39c41c020c0921d3614537e91168b92a51218804a9433c503d84fac60ebabe2ddd1bf8f965fd162f038b8379d37fa6f37ff1b44ce5e8ffd2258960ac687c5a26258250960a855922c59404de48833f6613a2a0b598cabde87ebb9d079a08c57f6374f1fc79415f244fbf4c220fdba4ccfe0e16eddce132bc3c456cbbd8fcd85fed8bfd01fffd9e5dec7eea27edc2cf7b258d6cb9ba5875aa713627991d7cbe6eac05a4872d37cbcd5d13675fdd3493565b2d2b5e789f16c4542a2f54fe8bf8f576a9a8ceb34558cace24e30875133e85b27315294646d3597717dbf93746012c81203a98f4cfd8d93df40a4f11f37e865ebd81da45df685b8b80fb296255bfd0df8172f64a304852b3bf2998f459ab7d40ddadf68d7e7c06e4e9d737d0ca9f5bd29a962a7cb3e605d78699dfba10c9a649b3c49363b6c132db398a06213998a4d87e5c742fc0e09f0f0df2003de0318a1d1f7b144543ccde49ae7e2ee056fd6b40ab2fbf7033d92ad8a1be683838a0b8ae360fd0d9d09409cb1a41012cbeacf1593138e691fd4d498ea6a98e6185705bef6333e97dd6891b93b9782f1d7eef72f5b544b1a78c8e72e4960ef01dbbce0e5261ba757423239e359b6355ca459c2e0ea84cd0fc3d0304864bdb03388a3e9f89f571f36015e5f6dd742bc8e95284143bc6aafef1a4d752caa3f5f34d5b1a8d688a65a1a2af5d5b61f2c65573068eac5001d937807d780374752ad1d3b752caaa6d829b579778d9d92a272b1530ad097899d92a25a193bf505cad091da73cc2f8408715451e9cca42e89045c312f62d82731c7a2fa2bfb11f8c3ffb3692e43eb9efbdadd3497284ceb475f54836965ad5bea301b2d0aecf65accf58d7d76b1fe5a5acc1546c10668eb6a31fda3b0cc20fd7dbecc241daadbff78fdc01ac8e8a6123738eb7fee60725e5f97fe2713bd57e8c86bdebacbb5861e367d96d6709d74487f98c6b0e9b8f0245971df7d11b7e4307bcf1f1568f765023797d025f619c199bd1efb70f4f26897a5895018dd09c335f1e725241c1e0a7017820a181d260b54ed68b5ce88e76c286ad08d656278ed56ae28bbec58f1c97c3ecf528162379a6515bbc8313d04e3f3745376a31403a66b9d431161ea47e0d6816080fd3c495a61a528a4688ec15a1277b522697e74f7fe5ad12d4d08cdd60b6d598ad8ec4f1186b22aaee3af1320c2d6f4420845915a04f3ad88f29f3f86d9c5577d31eaba4e24f3126af5d7a2015f3294f94f4b066e1ba7f1458291d7b83f583cca372a0ffe5f9c6f8cc0855968ead46d3dfe399e0ea71e54a2cffc9aa35bcbddfe8b38d57be936c3e656d7f13b78e183aa5a8fdece2482e66e960ff7d976a481c96616cb081a273c24d4e204dcf9310163c7cfc778fac7c55af89bbf3c1ea75e357e89fdd007bc2ac2663d8cbf7ba447e18771c6302ed0b1fd0e781789cd09c775ab381def948790fea78277fc7d8ff9d47d9627fab1a8fe504ff4a8cb77f30d0a8ae8e89db9d4f1b8e63ca6e4c05bbb1b83cbf69205fa930c733dafe8d8e01bfda2a5a896f945b306ec65771250ee6ecad60a0fb61934dad40a0c3877cf5cfb3fbde95b8aea4b9bbefdb5fefd4ddf4d5f5edb91471db8e58e3c21e055ae34f49eb5f9044e10b7835bab1df8a4a846a7d6aeba622827ad01ff6afbb343e61a58819a4fc1b1a8fcc283015d5fdb5d004cc71d1fb27317708f51d55d4b857b27af8018ac56c5cb89a80cf38626dc8ea9f3612cfe35e3a9e1853c9bbf65905c5acd9a81193fa7ee48f82334cb5b10b5b4f52b9c03bac188c165c17b127620e954d578c105c0cfa34a3ca1421c8c2da5c732f064ed34a09ae5f643ed1bb17fc5972fcbb49e3a6f49b29254e3a9c95854db967862a360cc01b343daa7f61cb0035d5faf3e10564b36d39864a696d0fec6bb9a2cadfde375694b7216d58bf8b24f9fecd27ce9941c7751beed85a2c01ad501c8cadf3d9d55af67146a727ecdee9b92aaa5f437f0b3325eadabe2bb95f6f07f2ee3d55a18c4fe2f07d6ffe5c00a9667ed1c582bee98755250cfc07512d155e4898969faf4492bf2e943c230849a12931570b62a1960ec9688e43b660d496de15b57a9acd468eedd5b71c731245cef0a295370e49f57e92cfd0facd32e7b59283904525671261509e4950e7b2d4a8801802f99989b4e0dee7051315915a50e79d35172c6fb9fcfe1dc0b9e74d84242c53026e76294f2cc449154054b445e5482f537949469bed7df08c4d925d9b27135be5c96ec60f9663437b68825c68eec219654e409164f1bca5199528bf95df19927896bfbae2ce61e76cfcb62fe16c884cb9b269af8e2d58eb43166b556d5db71c9519e8c4b29caca38be1c10bf11cbce9b51ff910e1bf14b4a8fa889c9b1cbdbcc5935d9cbff8c9cd02d13f089f50f95ddd1c889a2f44a9d2a87b3f1fc7bab72ef058a589a85cff8a3a484c58efb6385a8d8611375eff14af8a70df1d7cdaf3631bc070ddce7499282e45a3f9877969a789218e9247afed5778f2e413706352c4529582a812c9bd72c11a38c9722d1ba2fb20573f0a7aa5d912b0eb9ee66645eefa73a566be3cb5a78a2d0d413d05a66d82105f1d603e89c9e886248659428054be876da3f6b71346ae8ecb089ee5c132edd1a23b02ce5cafc7a1ea7b034cfdedead36ff4f49aae38281a1d2b862218bf1b934d8b378d47c53a562f85ff06a34fd021e1eb712ff8a8cf00cabb522ac5ee9d08770ffbeffa0c6b53214e896755127ba31b3b913b495a0c3f304984f51597576ad2c1cd191adf0a7a0936fce0f629d7808efdf1c7f40d381930ecb92bd374903e63f9b20bc1565496f6a0be6124f00d9f1dfdb97f6fc42f2a5df5f55600edaad54058d479bf98a02fdd7fff34510fe8a823c6bf6eb1779522793779597d22c13139e3d1fa979f866f1e082f70c87368a984120ee87692ad994cfe722976a95b863a552c93800170984052c2653730871086aadd3bc0392b2c7845d72e97dc430652c494b31aab26bc6252b2e73d7a3c87dd05ddadf83f5aa3be9ee7a4fd000f3dc5bec07de4978a0cbf5b9b56d3da7a109bfb1ab5db6ed476a3fa87fe3058259f52d534c392b264ac6602f5aedee5533e8d715e6f0c0c8b3cba90013b6b79e726a1cd715ec34116a2d3765c5ab74b4c98ad2e43773e93ff45aa5006b21053ba3a37adebd6a9f792d8b7257ed52a138b9d673bd2244825ab234bf4c45ae5520064227408734cb18cf2e39e44461a5b0f8d080067c542d786615abf4733df723285a6d5855b6095cb8c17e60cc375931d6cfe170e887977c3d14c762f29b667a9b46f5832a1e988b9db1da0e84c9d28ae11e012d30f0d36a53e228fe2fc67f6d6217f39470c951ff8c41ff6a6f544f9692ae16d1215424cc41723b070833fd3b0b577fa447c48aa1c4750bb730a0ae9fe57fedc2017f603900c2203a3ef6ff6a04843a8f3f6d8d00b6ae5c7517996a993ce564a9b0bc46e8f1b14286bcf5899d88eac7a52ebe2e7c9d37f97c2c73d0051b03509df7629ca9abafb8cc21d71f1173db8a81e0f9b5ff554c50764265c0a501c8c33000d940efe8e0e42189431e993864ef4d739eb284e4291b45f294257e9eb2249ea7cc3afb504f8e409fdd206e974276e70b398d564f8be2cb1f933a7b8471cc2312c7cc71495d1c33d771ccc35bc631af973a9b2d4b2156f3398b9d07e784660f01976117ab815feed3b52a834b7fc3ce4135ad395a79bd626e5891cc310a9056f77a76e5a3cbdcdcc53a365e4f01dcfba866d57850a1e6c5ab707f17c6cb315d7a58a9d425f79d55adadf82eedb83be3e7c87927425d2ebc1289c9e7e6b8ab3dc588a792a10dd64073ac16e842fd3ce1fa4b64a27a1ff49b5ace68757753c74284631c29eb0977c897215b4bed4375604d401499e1c9ac66e45aea67684dfd1ddf5c91a3692b4452fd299e243fa44922003b7ca4e8a831b4fdc3c3931996d7f7cd71be7142422a21d86cf4d96c29c6c438768e8855619d3ef61cae67e43287cfe4956b1ce489e972ca3e7d729bb55687fd9006d6530c74423d51637a02b646d204e6bb36ea6309ee90517b140bb223a8ffa4ff8d8be8472874707924a6ac8ba56ef36d440cb25d01a67e5f94d4a2046627546cd99138c487e73ef581a3a55032f09a1f0a4c3e6c100b44328969588d56a2008d4445b96c485fec323e597f4d34c92acae28aa3b96882845d0bea03695f18bf643da3bacc1799d14dfc6cd5307e99212ec4f786e3d584edab9bafc075ea336880511be5927300c682bb1f84f5100c1de1bffc41b9cdd7ef74904227f80687f5f5bce2639d7d37f9580b8ffcd6c7a266974f3c76473522afc2a3fada1e9752b27291b38cff27cdaed9e554e41878354f33c88e5c60ce3548e6012c815ca046ee1a0e76b9c8bbddeed2738823a89fc3556b8a1df5416d474faa09e8bde9e701c1d3e9eef249c72a86bcf5d149eca0894e175c68be4231ccf8dc443fd58ce274e8187316596616b813ac5750e2ae3a35f35f7fe3b5e5c8e6c67daf2ad4a2e810585e15338981585c8d3d4898c7bc1bce6e4057758b0bc1b1e8bf86f588005e0fa64ec41b830977557efd01b7126147e47cbb0dfb2bb6c1dc021aa44bac1eb376530bb9eb612b0b3adcfbf489bc27c59f6d8b981701f16dfaddd00514dda03771ca7d5827d4e3278530ec7d2a6d410332ef199feb9e1351bd14c3c544d1564392004823821141228a05ffd394cac31b25537b242910c8e195697d0a5e66c742b0bf6d3ffafb4e33623793698b0516451a71f596a8a09e64824b816eb5e36b629aacef552c3ec69105e211f23f8eca7941073aaf1bad085e8f8b459e18a3583d65f9ef85d1b8fdee7a6aa35399ef9846dfbcd7953cd6a1a811cb37fe63a37a23d75e43f6561ca8ff7583f8b15a29492ae78514a5e5d7ee40f8c3cbfdb648ad3517c5b0e2690ef71c8937b6877ba96cb49469c0e34ff057873abfba9a8b11b8bbcb626650c85782ac64029a78e956133743a17f1646d5354e04979aef610416bdf59742fcbd68fa2a7aae8d0831f2dd8c9c9f8d83be94b01a1b037213414430b4f199486e835dd0016bfb4491692fa013cd3246b0ebb7c4073a8ec8b9a3e35831f8b629a19e26606f40569671c92e4596798404fa777548ed8d89402611de353dad7947c52ed0f2febae0598b77d8b0c3123127f560516f3cafa6356d313cc36245dea8c4af1e201c5aafc70e8a792a124495486d948f5c4ecf45ce654fed73294745297ac3ac18f69e8c761eff9dff7df4f49b9df1f0e937e3e4c9e3bf7fb3f3e8f1f8d170bcb3938cc4f6d39dafbf79f235e9d8fd28fff6667bfb9ba75b6fb677bef916be0f16e89c67ac14a34529d30b54e8f032950a83cd72a8353f4b25acc85997ac933faf0ee3c71538120ce15fbb60ea4b89c8c183c3d8e8e14c0b05b1cbce1e6191a74767d6090ace7cbe59b1d474ec5a588ad35237f9c90fbc9c15f9353b13139e9d0186179267a72db596bbbdde657a9e76c568c625785e805f46529c2fbaf3e9fc599aec4fb1ffaeeadeeebacde5309c619d6a7038748f14fa6fb31ec376eaafa12378674a8a3c636ac9ece93cc3d25c305d45e8d20a92e6b46455a6a38aac79380a4cc8f1e9131b9a1ff541d14c57eafb6ff9db33bbbce905cf445e7574b5b27cab14e34c5ca517c2fb929a16af831ec20b32b9575753be90159b97e92cad005fa662742e1db9026f9f7da6990fbee78be1b52cf22080bb179e5c8e20d418c89b95f33f80c514ecece4e420e3529e9e9e015530b943411dae5ebc450b8139ff68a1e1f40a71cdc057c56b388c5c7d7424f23205f39f8511aa658e4d0daa7c311b8a1282d3268b0c42f7e6a590322d72d96109af84ec801fd2b02832c173dc5bc4194ca50a7c391177468addef6f9c68fef6bd98bcba9a9ff63776bd01e063034d94239190da58e876e48841eb6d51895db6b9c91eb21eefa580fa9beaafcd76e397718efe97f5d7df190c9230b76a2a5248f05f0a392fc0986fd8f3cb92cfe78a7bf0517a8f55d385ecb0b3fec693fec6194b65ed1baeb19ad819e4068111b5a04ffbac1b655c75051aae9966f841d37007937c0bfb179de42dcf22e9a92fe2b7fc6d9ba53298c95bfeb65b17bb1ee2317ec89b65c78778a01f8699f07b3df63c3764946c7a2ad95c94e3a25497b24bcb0beae47464d2ab4517f1212edf23f60c08e443422bd9aef9f970c9b2bee495f0173568f0028f4374e10f009ff1f0f867a72aecf01d11d313816fd68f17e066ed13b334cb522946459eb8aa76986cba4b4a5da539f22d38142c4fd3dcb3f695628c48048302d58cc584a5ebbe6c6531ab4c7ddd6c55285df403c36f9130dbab0c69b34e4c03eb763436a413be1c7b35f47c9082e11cf2f9d27d3e1655748f0ff91cf7f6586876629123ad003aa699c4628c1aafad394f1591e509d0169eb3341f0173c13396890b91d50fe10f698221114c5c5525c76698bb7a540a2e754941e47e22271219c2eff6813dac1f4a78fdf0e1729f8c6129f8b9af10eff5d84f3053c6f36b66a66c7d1fa10d67fb7a39dc953674cf869ed5bb44c5b664fbf466847d379b000d5c1e23340b9a7ef56a24faf6f7af6e70cc5b75a9b3e614ba962cea7394a463f0a4ad1871239091938214f70c3b9f49e0cd60e467d2830e7cb8833a2e15dba0e091bd85053ba88a92ed334efd173a6ca81f0fe9e340c3885d81ab82bf4205d73dbb7608acce2ed5f1089b128f261e05cdb437a55afef5810f43e0f0a05d6bdbea6f9059f737989288514cae3d1f36aab61ab226dfc404af4731df5a2fed6b20e862d77f041d89d4169eb2e7522e665a4a49b5b7f1e87a94a52386135a94ead6f830158c6793a24cabe90c1a25a2d24a226c6e21ba6e101692f07965e4bf57c7ec49779b4981a2d5f693eef64ef77187f1a1929b471553e23baa16cefe7d74d6ad6b58b04a2a1f9d43f9c5925f8852d60883ea506d4a97ba9fc9341f0976295046c905f8f08b99f6add6c25a9e1882ead803436a40d853c701fff8f4c9390d0ecdbb61fd9d3a49985cd3f6d5c9367583cb699a09d6c2675b5b2103fd26cd05a41fe5e568da65ef905101778254aa7b574d5f3b8b17a55a3814bea0b632f06cac187b101779faeb42b05c48b52b648b83330c633dc1719d022e863c97919fea2d87752c4b12e3e52e2b5b2c17c7b9723bf5ba8167a223f4e4a1a5f4c0f16b293fbb360c4e6487a96018a5f044c8821e7a17258671e80aba180485c53b3d8632172321252fafc9aa3a34f031c08c43bf07b2a95bac7d65bc744340b5c1a8c82b9157b2c3d2495e805a4831e38e2b043d59ea6dfb32543483bc277e6d71b3d71d36747f2289d962db350dc9adf3c7539af65bf33c7d24617e2268ad0283fccf3c74d7477f5a546aed457648f5aa6f52afc75ee55a5fcb2b362caaa9c52cb5de5cdb12a5e22cece1236bcd86625c58be1b83a0c4dc92dee004d2190cdb5d821eb7418e559b1a2eaae0a3299b093578bf21ae19648fd67b1eb38ab5a65c7eb5dd1a82cfb2ba40417d0661b60a5bf0df25a872575c81830ff1ff352a63ebcfaf4d678a792ba432e4919f9c9daabb2d2f1a3aaef8ae153ca255e15d99a523d1f28d20af8e9f1e22c088963a0686e4e9e426a77aab5d037a2caa08507c7a5ba06602c15a201e708d07be2bd95a6ec4ba6bcd19c6cb876d9386da15d70f4e82aca2a7a86e3f16d9d81fb76950b75ca8b6ad70e83a612f0ca9f7a09f2bb608580a252a692d320853e314dd54b4978164734538a605f8c5f7f35fd26a5a2c2a9656ac2cb26c31875cbcd64579b8c81330188d799a315e8110342fd21c1d16d299d843e392ee2fd962ae313f536c1712a2cbb2c827ac28137596d30a632bd1a5d18abae8a92f594b8d5c5cf1d93c13d6f1512ee6422b120548145931e21903bfeb61a6fd28b072fdb4481543d1eee2dce8222862099fc602d81840dce9e74a5ee115cb04377e18a6cba5d0cb31d1f190a58059c0acd299e274b478549529cfe05e8779b0455ea5995ec2344b985c8c46422492f1094f1533f7a0875bf7a09fb307ac356ab3c374341519fb45c80a8c3782ed3cda7ec2b6d43fdf40abc3d71fd89b7424722912f5001efe22b251311386899915c32b268b453912f21efb80fe493cd75e8cacb810e5452a2e15f9991697ecb018fe17e6fec06884cba23c87bc620f701914e3cc26459130cc640e3a4b5e56bbd0c49851662249173330a3fc73766927d01b8a51314bf3c9d6789165d75b2518482fc416cfb7d27c0bc8ef96b89a671cb32a6f15e3ad9933f46f3d79f2edb74f769eeef09d275fffad7b75319c3efd35f9fbd776eac7304d362eb244941287b4efff67db6e313e4f7b404e0e0b4594c718fdba18a284c1ab74c466a29a168964e26a5e48ab8f62b3225964c264a9460707c5cd773564301529c8af15d6ce8c82c97c03d6d8ca2c7be827a66e9f32bd404d548795da760ccfe7224f443eba66552984ec7849e264971d1485c2e1c578dc3c2445cea41ad3f30cd11070586bc9a4163c0a7400aec77476acd52f4f4cf6b854bab3010bde65aff351b6488c62660625e0442959969e0b76c6e5f719afcecc8816559ac1887eaa5210f060065db341bd7e4e9419ef20b670bfa60d734a0dad30ab35b184b25e21f7040cd0b81d4f1eba3ab9f831506e2150731bb3d763765d2c4a26f28bb42c72b5b3b59859d3a7d470ec126a4fa0a4b8cc27254fe0ecc0b7bfc66afbe02ec0de72508a3ecf93b248938e0d96678bb9eaa516f7dfc70785dad90d7d09910825c834a2664e2357d4fdaa361888844e6e3bb6c759914af04ad2f6754da034a9468e05cebaeddc4a73c5be8da6a82c04bf366b356143911597ae4a9d5c0c659556e0a60e9471d37dca182f62767f9c9a09e3f28cf213bc333180dbe34c342e68781164703cc4a46b5b61c56cef212c9b7e71d38f9645b08f2a21ab83221187696e4b1eaa665471126b833137a8e18dbd0f744277f1daa27d5effebedd1fb5783c3a317ff35387cfdf6f5f7ff3df8e5f9fbb7afdffecb8ca15c88c037a9d75317d9e89cc942dde806d52750551a9022f105980b5e6acbde090c4b7d1db3b18bfc02ff3063ef6f9c9a6ced41c8789013411fd3eb62615c51724c553983c5526459612cea19d19dcc0cc3654850582e0588f61401159ac38906c646d130c825520ab9c82a20705cb1cf466c4eb36b96f17222803a4885e8d8d1cbef7dd306a4240839c0657ff9eae70f47476f8e07ff7a73f4e2f99bc10f47473f0e0681573435dc7ba90e886f02cf93ebf362d2532bb395888baa2832a9d3112cfd5637cdd5570e8be115add922e7d7bbea7fb4bae8555572b91b8a65d47366d7fb45242002069c7c76f11fbd40967556b76a59b1df4cf0d5f7597179c0f391c832380040a73becf54b7b3142d04550193fc87cdf61c6edaac378961597d0074385c16b65507b1a69f81a88ae71ed8a77f3db5020ef054fe4ab3cec671ed79a429879ac31bce8b081c893e77a4e35871ee8577bda711412c09956e451c7e578838f4113ff51c7fab7a5f9c46d03b68cbd518c8bac7f387cd86103e01acda4ec862daaa25ce41d23f5971d1be3d4b15138a2434aed7748be162d02766a89723a6c9c1597b0241de3dcd4f19057ff328cd68752e0231dd65de283299764d1d4e29809e88a386fd273b5ac32886a566b90ca17c595f006e57c07e9df4ada54bf1b4e0305eeff8211744271bc1309fff09f990f06c708120a135ed0fcadfec85f28465e98a077f7e4a7bc20cfcc49d4432fedc1c4bc631d45cb5fe7660da5faaa2242ac2afe7ddc6155c947a243ab13755ce179576502c44d754f6f7436a09645861211483e2862b08b27ddafbb20276068461739f8ee4769e58183627e5d42209c92bd40d2aa09609639c55b02a52a362a12507aebef2620c3a248a80434331ce4c991ad02186f5e1fbc7a7bfc0a254bcd6e954551e9045345798d0283fb9262ffbb86399e69e2b90205623b0e684196921e27473d638452536ad825721ee9516237a8d9da544d37f7ec4801f060a0a3723bec37d063173998087104af5058eab0778b5290b7e3a2bce465f25e8c3bec609a6649a9b65c7f0676987ce737364ef3e4e5d1e1db228142c1b252731e0c152b29929fe6e80ce075df4a8ad9e69ea7ce19e0d5dd2a861ff58d4cee734fd8a8fb53d91656cda39b62526d72c7ebaff899cfec17a97e07db15c38f5e8cff8da78c5e1b5a31fc581b6b7436c5f023b5a7121f03fd1678473d599770ea19992bdb6d1c7c1f7cd76d092db7e035e5da00743d073ccb0ea66274deb2e50ad8811b1dd9a77bb6855f36c4b58dc8851faee7c2c886dabb78c4b38c719d9d8d4bc619f1e237930886ea259d4d85f4b2171b638ecddc9142793e96b27fe07ba3de67e9c3879ed4930874a4042b37343d498daadbbdebba70534898107bfee993a7b4268d68a02bdba7753ed5a2f637b03c2c98915daf36857059a655bdf7f2accea43b244822a01b9618c9057818b60ea81700a0a0fa80ec681dce3bb2e8da835bb76847b68a00a3b9f548a73d03c803bf14923f943d82f3079eabc2323cba56e7022e657df391299d8b6bb523f4a4c717dc81b004e182d4fdb56c7b63e8fe92a07fb3f1f898b0fa21912a861fc1dc622a33454801128a6039747a40d9928b21ec7c07d5c0f0779d44bb7751b7d7e0b5177c1aa708c7a073268a8ed942564c6076c2a14067e1a28c9308f58f1937a193610608322a6f8c5e9e471c24a1cabbb5edb44b14df9d25fb498c573704d7c9420fa4a8de99e11c8de3db51dfbe89dfabd0ab1d3c772be27f853d33cf83f6246cbde9130eadba83012ce460a068601460abd07b468f691d727d7ec1aa141d36375394eb4d5191e535c0316f1efb6ceedb8d0a3b7c3a8118b8fa1cb01884e26d5de050d292221b93f385156769ec45786a6c8e4573742acccf0aba232fbb84e296b7106f5a6daf85ba78416317210f128d65c1e04d0c36a1a9efa13d8c18530d9269c0cd7effbea517f03b884f77da65f2969cee10c154ab1867b3645dadcdaec73e4c85121334786974f9b25a0c8722616095cb7520693aa23a68e9ad045a7b5f5da135aa7505a3ec577a30576ad257ddc140c8433463dcbfbf9ee1f3aac33635f7bed966cfd895a93dc276d9556d3ff4155dcc6645fe517faa35ce3bda78e20f4a1b542041178e7b97fd76c36e3a6c9cb7f0a5e9d8d50ddae1031a72044cfd6b39709abec12c75b923c2515966d97cca7c430d327e95ea169dfe865bc9fe46e73724c0f71edd98e43fc37d8a32fbfbfb1ed37dffbee69dc745d919ed0f9fb99fadfe064ca32b502aea6fb4779f3eda7ef4b893c4dba901f1cc347bda11f166e3924f28bcbf77c6f186181f33981589306dbfe94c1abe5d164a8c2d75c3edaf3bd3c6861769621b3efab6731e6f088e42576694db8f3a59bc1d97d7f9880e727bbb336b04a973df04edf3869542b173508ab169bbd399372cd642ce95986f1a3eee94f18633312b54a37eae9a3de954f16619ffcfb581f574cf9ded166fff968e5b8e48398ce2f7ef2b1ee4defe3e6fffa650efd77ddefdea2b7cbb872131ad5fdbbf81d166b4ab1ff07dde05c682eb37d92efc33c37f04fe33c17fc6bbd6ab429f7d02e6fe7df7390bed1c3be6f8cfb4de5f3ff8f5e6065a24e4c18d9df6859ab67ea196607f7f7f76a38f6017efb4fdc59e79f05ca1c4619188fdcc3e3bb07b0f2f66f485c233756b28a677ff3c7cf34e63ecfed4bed17a8afd917df2bdd550ece7eea13e69fb8ac7350fdfe993b23fb1eddec1c1dd4fec8363387930d0b17d98ca9f799626fadb8a33dd37eb4356a7bf8121441e627cfa14a741fcd327bebfbf2ff09f19fe33c17fc6f8cf5cf55d8a6bf7efb7dcbeab169f3e79bfcbe0f734f87d1efccedb3764ce6e2f23935568f1e99346888c760bb6fbc27fe56d7804ae86787e53ef66b1a1b9dbf4866c772a0db244376bc5ca7a0b33a2c32108d73c92dceb61b0b1b9bda0ed2da236b79f78ed118b9b5b27b43545f1c61e6330bf622d638fab69c52f7873e7c6df4206d0f82b4d439677df69ee6eb1743984c7cd107c845d0ee6eba56028722f87f364251c83edcbe13c6d86a3917f79ffbf37f77768be1cc4374b4068bc5f0ee0db6600e620ac40ae474b20c0d158d17f0976bac3b202c61214ad5f1f2b602d4156429657005982aa21915e016909b2d668fa0a504bf0b546e757805a82ba96f2af00b1047529995f016509fe3ad2bf82be2dc160771dac80b1048bcd15b102c2521cf64e8207675de10e05cf1c04775f806cfc2e4a96fa1e321e9ace5eb8f368fb4987fd379f16c53df63a1f75fdf751c3e05b71c95e1cbf34de9b5d9b56818fc0f49d5fa7f9c4b7108207af2867d2580071faef5f3d3ff83038fef0fcc3eb836397ba72344db344e3b23aecd2d3fc8ddc8ba6e77e07cdad8306db7f91ca79c6afd11d843c078b60431f7857a6172201e3e2f765317b8569b99737aa439aa55769ee3f9a97c5bc3efecaceb49fdf58d4f9f1edd12f6feb6b97879341934cf8195495f8ebc7b34c94f5477e2b5e4e16a0b6099ea6d5757d8cdf1fbdffe5f9fb9783f7afbeaf8f74d3b0879b1ea8522844fbbc0d0cd6910ee9c37fbf7b45c7a2ded06727fa1891dbfb94edc7666241fada15a722f59f6bca311115514ebd8538d17da2ce0d5f46bba1ccddd851bf8e767d492d71d1deae8503105501fbcff74c9669f5ee5ddd4a6091ce3755838bfb5bed6e710ca6266374244674f421200f86191f9d67a9ac62f93a83d66024d944d1723374114cb04ab51a05f893eb2c16ac35ad66591b3c780088ec935c65ea5bc144a309276d55283796fd60395bc1606369f12260eedf8f0157135d352ef5df7a8b5eff005df7a5950cfab1e8b10876c766ef2f7314b36b93d25f8010b351918f7815ef58fb5e50b1c31f37ae885e1fb6efd18e9360b94e1c393b3d659f3ef9775b102a87a368001c0c712560073a6697a75177ece1c3348aa7240c2d8d46a079970d5a40efdf67f75a161dd44ffb031ab4b1853fd5fbf7fdb9d396fe6adfbfef2f3fb66c2cf3e1391834d1b370f76d305408b1a16c06d361b7603c1af33483706c70c529054fb62066c94526c60144fd08fc21d5bd08fcff6e18712dbf59ef1c7a7522ece79cdfaf670baab7b2d68918e9188c3e2a2c8ebdb297e4ab0b9157af6669558992ed2b56f46f83c1bb9fdebf1a0c143f58f351b70f6847e7c01efad460d121dad69112a82863cbbbbaca347ad69e430685d06127fa6b5012a9bf0149b88d530bd8aaed288bbc351ab6a92dbb6403301dee9bf036f3ca1f0ec65a8f488115139ad95cd5073334efe3070828787e34d6d07c3a8a7dd405b1b5ddaef59473089484461db6ed06734383ce6fac015f2f8898a555e392a897ad84579c8c3ff8ecb8285ff1d194c839e33c9a9b2147406e585ea6ef9bd3b66f32a6bb882562f662f6bd294fa1f4986215018d44d9829c3bbc12211a42b632d510f29d42b04da2bda268316ecb2fe0cfac1869d762d5e4fb45967909bd5c09a44ce46cdf31d79a62834772a50b8b609c2bb4fc8e3d65cfb0d3167bca76d9a376870d908a3fddc3bffe01eff107f1c6827a44d50934d9624f4fe957e1e969034db02e97b17812e64f5cc9b3de6f28cef28f7ff0bcc8af67c5427ef79d4d08c3bca5d1ee61f6e7a74f7671094a9b6c965ee183c62cec66bb82cb03f2b1609d4be39346a1e90c7acf587f43fd01be805e3c8e47984d124912a1f5612a308ba7410288e8606736cfb09da47a7ec652c966bc3c478f7d1dcf952084fe469aeb8efeba424f0c1e492ba9ab58a552b7d5b3834641984aec6ef0ead1ddd4320518bb853e205d3e9f67d72d74a4e8b093bb1d8553c3ae29ac24dcd88def8485a3d54501d5f21f98e3a850cdfcdd1da6790295683a8c94b60ebb741d4a34f576c5dc8c77440043511516e4e1847baffbcec89e6acc5e4106e4415b4638c585a0d5147b3d1341a78daa7de7f737c7c9c63d71fde879b579bd1edbfeb6fb75f771f749cdc3f5e49fff3419093ff009e2fa2636dac441bbafc2f04efa1b5e97fec6a91ec9f15a23f9ded42055f42e2ff22d391723c08f2ce5b9893a943a2e8f9782cd8bec7a9c6619d4d375235aedf36bc74c5d67b17df318bdbbc3568bb8ddf6a25407af5ae1be2abc755b689d855db33d3745cc0ba04332489370f4fd0d886ad564e826b26b74053063238dce3aca12762986e78a6cb46cc038467aebf84df675f751db7c6fd3cc7493955c1748e6b905b78962e7266afa4c122ffc6c97fd2236b38ce5453903f7218c0bc014420586f1f68619ef5968738c8db76bddd5c57783153006c87009961eb5fa429ae314410603c0e0832ed69d2799906c5694026393612dd819c181b32e3b52d2c042eafc8718493f1352f2092488b93d7689512ac53a0816c7c53d1f47083da945ef35e2d14bc719794ba82e047b23deb8c459eb202301538a89b89a3b40cb3724c2d2b93011c2d31da85745d982901024b08814b36278f5c1e9480ca96f660e1de7f3998cdf7a3c152452f2075d636fc2bd264c0c66553493ec56c59be25294075c8a56bb1dbff41d57a0504a75d55327cc97c94f1bac9e66033103e373a44d5eea45020d2aff06913f1e3b657217d6009bb27e6b42c6e6eb813ee4f3b5e11ef2f90aa0c64588b6aa47f1ff940ba80a2012bb4f8acb344c915de276d316b90356e361037ef91e994dec5e71102d9d31a4244678028d566e3114cb1c00f21f22b55322868fc5c055b3a2641ff9854eb1ad59d638b6220bab59708ff38ef0ddaf75de54a805dfc86d1763cc1e6d1ab849e37bb998cfb314124b68167c19036e77f14c4da0eb10c59b949dc6c3e5eba59a79fc3ad9f4fab1353c72dd273aa48970ce8ec694a2d56862e55efef164d1938777d6178877d877ec89968877d8167b42446205e6c99efe1385e21dfd332e160380ba5cbc7347c1981654716b568beb88a93d28565bf3d2328cb6abdd8cab6ccaa5132af1a4980b84e505226213f24149696064f6ef74e1da8ba1bd0253dcd7a19e307c927010b028f60ac3fac2b7a78a4d616cd0331acaa6fe33f3279b1913857fc642d3e99a4700f6e304f62585bf4ffb1b4db2f11d16e57604c4afe5045bb6de86638948b2cd7b516060445c4d9ca2e2bc0fee90cf6f3932b8e5eb809051b825ac2352c207d321ab29944777593ab05ed7572e0ef20e0b68341ace464ba1de66fa66a474f608d79addd93ef3f4fbda043c2e85f88fc0dc1d014aec860f3a914647e35ab3a371d0f090cf77fd9f41031ccb6eed09348b2ff76ec3f3255dd4509bdee801c5f760b7f18df5e2a12aa58a57221352b62c9571baa433eb9cda66bfdd20e527b17890d9bad566fbdfc15b9d1fc7f4752f2e52ce5ef0a1c87c00ac2a8a2ee10feeb9219020c1fbf759e471179d3c48e95494c15f274089234c8c16e873c72dacd60785d2168511aa15a506c1fa1b83c15724fb8263c6b17a7c7f83b5fa1b6df3d08c5bbd689b5bd33cd419da4de4173ca53416a796386f0ef046b133cfc5657cdaf7fc8e27394a7bc67b2af2d29eeca635f0983cbfafdb24b52c87e0b5841c9806d6df98f36a34c5378e74a9d6ef306fc14b3186a83928815beb48df1b7242351f08d8465c635e3bc237c2c7ccb074217c37d4d3f8c34f9f4ce62ce80e30eddc10da89fbd269fca103420174b362740e60ea0f3f7dd2c971bd772655df7efcb1cb7d6d42ce48ab1ad7afab9eb44ac1b34368d8d16327eb15b14dae3646f1722263c6a81d678cdaf18d513bcb8d510aa03145ed3499a23486f67a0c9710ea35484cf92748ea608d02ea759a5f14e750473cbb66453e126c2e4a786a782f71217256e4b47c15cf3230d9cfc87ec109560f894700fa6d563f8333a8d397b9e5f6ebab291218bc0bec54080c3d387533cd51a2555bad52bb41f8b00361ec868d53cc7ba921d3896c6d79839d79881aa4c49f79d81731d2ceae3c8e7876a5873ba88fb766aa8d61ebf7e69e5a8ab2e39ce60619e7addb888d51d4dd2122e2a33544448bae115cad8b87fa1c42fca95e20fda8c34e70a5eaf3b53c3f2c623b160f3dce6b471ec8e89a047229418d9182c7d105057887966ef90bfb981085c7015578ecc8c263bdd88ff54fb2d814fc09b68d9288c71e8d70e3d622dd40c974149615eb06618a12d2ca107bfbfdf434767acc01316e17a44f3b281611f4009f0fda3ca2f006463df3afce15fe9a4b76143c163d68f7effbe04fa2f7f529b519f1ac143cb966fad64657a614096a52409ac252c04b4aa34256ab28d389225476adcdedec2e567b2fe7e2d25b00e44fdca3c88c3bc1aa3df37fd35c32bb8e4a9bf3d70986873bb33c050cfdb637e0268ddc8af1bb11368e8a5ce4258457989fbaa68fa2a86cdf27ae3e084b60bd5c11a518031bdaa9657051af3a719e4e0b974d7dfa1b1351f5373a8cf274b51ce064e05a1bd10c4f06f0a4a85a34af8c2de38a771bae31398d4b160973c9786b53f785e8f56c9ef0546241289dafc9246236824e8f633003119be07c20c732e765958ea0721fd820209d369362ce4b25d65d93efd9522b26d9b1ac8a52d8b626af31a65b86127839bb1460a7c551627c06f883b8fc53de583b4c5423f249d19d743117321e54455c3177f90c4247304db92bcec065d8da03afadfbd8778885964c5ff2d538143364aae45b4d1be08e5d75b22e7c7346c351af81aa1d7447bf97602ecd59a35078c5c171e3558ddd2fd505cfbd952531376a51d2b019136ba14eedb1c217b954bbb067f34548c1b3560ca291ede66571958ae4b56e029119e66b7e1c8e3e341351ed361000573520f241b3b0dac7507a60d4b91f783e685eeeddc36278c5cc10776d0edeaabcd655a37955f1d1949dd1119fa993c373a24a37393a750ae8331ce6196b15253bd31923cbb336fbe1e8a0cbdef915f36dd518b32385292280a5d7dc5714860b9e74d96b242aa391c0943060355c4ca6d0ef4c77b4aeb9672479af8b838ae7b9a299b1408709d80a2f53a916cbad95e58bc0a593c088e6625aeb8b2641139c110c4463ec0103bcd4bb64eac16380d84d540fa49a9b71b626251f22627f9f13457b47a312841890bb92840b81a6075b6d81d69d68af68b34f9f88fe2aaf3da1e9053d55177961bbf5377ecacff3e2d2e6d642bf5c3252fae5876a845b0ae57080a421b9efcd52b07d5c56cfa99ab8afb6060781829091ac64064a870d22a11816885df7d0d1d90f69d9d9f32d4683c0013aeebb6d80b763169adba9249cfee1d12a675822d435bbc27af613a3395992b30927d40a9745750a827feca4db544c0c3b6a7931900de942a13f37f004ef859f43d35c9ddea4b1bd2626a6123edbb7f7ace7ff1d9069b39ddeba784ef40e9d4eec37b5c7382a7eadcf78dd6b1c1bb4c230ad2352356257b134968f002f2c311ea7a35417b98545d4752294b8ed803f2816954c13f100f3d5c2a7f4adee7dad958e69ff94e6ce6c7790791b4191000e463f713517b94c2f44eb599b95620b21031b36d6fc8b3ea6964278dfc3005ac5a50959edb2cd85c424f1a385ac8a99ebad2b1e5445c14cf911c8028f0d302330f338247b33dfc4238574fa4540079ae2d3fc6718697c19a4d66a9d8beb7a488ef9aa4994e8ba9f78678aad881ae34902cc15cfcc2428b9c751e9bbb5eb381cd4c976ec283a8c366c5b956d642d50ff93e6e1978319daf9394d90dfded707d5e6061afcb8e9a6e14b5d14cbbc33bec297dbcb49dc2237a3815977b53e7504450331e71805b216b91ab00c39949919a7224b7414946367e4d4d4d0b848918dd19ccf44e402b92903dd38f89adf5dff9a26bf601c4d014884ea8cfc604a0b38649e689842a39c9f0a0a3ac6f87a223459335ff477c8fb0226d3829da42c4a2df067c825323c52eddb55e563a3eb1f51d1da9781278a7daef0dcc2049fdb528c05da70a58984559f36bddb549d63f1d807e806dc6e47bcdd747d26c36422eb87452f1c182c7b616abb5cf03453fce33d76c8cf05036d3f0ab43a191bd43592c54cb0772e3b9b1da39de189fd803ab06e9ce4b9ef0d419c703408ab8bbd718914a6e94489d85847cb61bfaedf8d550c7119e162426500e658a8f8b99026052b57140f781908a62cc6a6987e8738c56b40a5e089abbfa7091b56b9f232b86aab08cf17601498f1b9d6029835350043586aa8800658840a5b7dc014c22d47696df493a5adfbdf59f262d33c5073352c48abad968f8d73441d1fb58b9275bb5d87d900c4f2ef94feefd5a2021ceff6e8b4d9164c61780cdfa3537fdfdd59b2fb4ab3f5321b8bf7113dfff66f23a1d844b3fa2869205d5f0e537c1c442380066801c97b99126ed37c425426335e9ec3fed97e5c9a7a076547ed2694c04b2b641ab0809ec9040c7562cee830cf3a54ef2404fbdbf6f636f125751336df689967ebcc08c22e14e852a00ecb4e28aa0e10c9929cf160b977c8a2233bfbbe5188787785f243e8dde5609da4be3890d6cc3b01222d23efb7462cef125f1fa13af44ed0e589b6fa1bd675ecc6cb486e6cf4507b8564af00ef079457b1f2cd0631e8bf963fe5b36291230250537eeade200536343211178a63cd4c91312f034c2a5fea0a40afc0ad34b1386fdeffa47861bce7df5bb6da6fa4304824cf87c5c2d63cc1f57a29e6a5d0c177f42cfd22f8f9219fff03ab2ce0adff9d7563b28bfae25a35782f26a9acca6bedf3578c4d77edc3494bba3d83fb4ebf6fb5a985c1660e5273782fd44a805b395c905e8cb36e29cfd339cef8479065e962bb77cedf02122e8dd27c825522ea9d8206aaa75a0c5860240d5b10dd92e07d9a4ab91092b5789ee80ae2a8bfd2295d15e12e2a60eb4033d8415af1f4d137aca7fef9d626f951905d3615e3ac6316d3d5c7880674b9d784bb19e89b67508a719bfd76d33ee96f982c09fd8d53827c3f884c4970550105b4ce54bf33f5eb4c31d3670c8a6be55bc426d49aa6492230d0a40d20fe39e7259f692b027da29ad0df5860c06037d552fe0030d519f3ea29d4b3e1dfd31c682c8531edd95e912cdfff8aa52b350de0ed93e38782bb997453c67c6ddc5303a965cdf7196452f9e4ab9d9a3f9b5a1dd2c265eea6a91a0c8575ed5aa330b18a973c81dc74a413165645fe35cdf5d150a2b916ecd5ad2a85d825bd95041fa975a648e647d973fe643d3c55bd9deda7a4f76be0cc4ac1381b0ac89030158b3295553a7ad66ff6dbedd7fcb7f45b7f614b20369678d6961654056adafb8d7b60d595d08e6a3a7d1ad96e7ad195a282ce35e9cc27885dc81aa0f74528b218d11ae1cf0fe94cec12952bfaede1345fe50994328dbdc3ba641a7b8a8a6708e825af44372f2e5bedb57ada166408fa959ae62efcbf1f8fcb8078012b85ca56dda3d1dc30918aa00da54011bd4e11b622e82e739111a6f4fd2b125bfb7458169752945daa90be57bb92dbd15b3a56aa5b8ae0a26ed51f99c9365decf51ebec8f50a4b2b971a613c6e02cb2eafba5c0d24acdd8a895a029a0d46daafb62d1d552f8834edfbdb98971dab9403079b13f3fcb48e01720ab111af7e5df0ac550c3f3eefb062f8f185f5ddfdbe2c66d1e289633e12c3a238ef8d871f656f9815c3dee8e9b7df3efa9a3fd9de1e7efbe8d1ced3a7df3e7eb2fdf49b9d9dc78f9e3e4e926ffefef79d643cfafa516fce47e77c2224f695e5a807b57ee958b40a118368e9c0da41d4b469450a1f3d6f6b8688962050cf5d32854f9f68a5a4170d1d5ed80ea19380abfc43fc49cec5b57cee9c63a0b43f0c678fb678516ff1c2213dc0d042010c0abae807edf0f3fd861a48148a2f5ac0c18a5dea6a1858aeeef9497a0aeac97b7ae54fccd353dc03f7bb5d1715684da4c8bde00eabe73edebaeab06be730fe27c0ba2bd8fb5a717bcc5cf3482dcf36eb316ca5feba8eb01c5e1f2819710d7f5ec7f90e251c5b62fc5e9fe096f6500f3c66777c97593c277142b68f24b2ed3c35d52bcdca4d53697deddc358d9f7e1f58401a5309a5d27eee9df6fad8f7100148e2d548ccb500446511663d5909e90dde9b9a875db8549ac3db223746cdd654bb47d93eb9726386b62009171d68bdba9f09ca1972a91790c08c717ccc5b19111bc05da6a6188fa689591ed9d1043b0602d6bfc4902172ed2c40e403ec8b46ff607789ea6c1cffd21a78362e539127d935e40c05829688e16232d1ca1883f8bade8d56c7c38c030b393ccbe98fc02ede0a1f46218436f3b64e1b643919933408f0b6282ac560be7e690635c0cc9dbafcbf356adebfbfec757740009981dc1112ac5e2398efd3a1281b60c03b0b00e6e83c245e8fb5521e74c04836b36b53a13ed15c07ca2cdaa4c9f3eb4b1d9ec41e30594095fe2eb24c78609256dbd868d06d532e3228d1732d2ac6f302b4d2d692d9775e192c9467c1d6ede92abce43b6e1ee3a21c09543d98c16e7129d309353f76d92f42e7e4bce446935e156cc4175289475951ccc9bc12518911f89149c146480a560eb6ae28b12306d7beb4146c31b7f498993530a8e7680cf8ec035987483b43d6f5b9594e9e6dfa671b1563cb97b6fa1b2eec881cbf0eeb6ffc8d041f39d4556fbac674dedf687762e9e334771f8eca1783df765f74d9bf4455a9f1824cfa6028c645291828f7d27cf280cd04cf256e0d27560f7ae8a75c3299266099072b484bea24d1a5c8c4056cad908071b3548eba1f659b0c02d2ac2cf234498b1918196165d802a2e3870b5d8f15b1685494a51855d935a801191f168bca149e659768d44873ac63bc900b9e0552fbdfbe79c27aec9d624ffff6f5d796f6c7368f1485f4a435640dba76257e49b30c4758374334b66d21f67d387a79b40bfe616089867ecffc3b09419c04ead853e07190e5f07d275e8fd53a40d88cd5dd72bd46f3228512b691e1802690d35d845308be73602cb2d6aec201f63e8c73c17ac9f83948b6f58c7d988a9c922dcc99196ea1606330574ccd6009c19af2f95ce4cf7007fffed8fbec0fc5a500cbc75c14f34c309ec9828d329ece100cba8e2004962c80a758e42962a4ec76fb9e1bc294cb5726e4dbc93e5116252437b8517182e3328c99ffe078eabdf5e8e969db551b263194849e2257897d7da064f4943344b6288817baed140895a773309f6c3bfe51ddf68514ad20039dcf19f55dd946db11fea0f67aeb7be473cb273543c6a9c9886f7823b8634a47b669776ac0f7dff8fc3a5143bca7a23eb1763ab2aedf39b75872c4f4a9257e4fb1d73ee95e53d0d04b4ca61b5b1cc38734b6a8ed996a5ea739c1a158c53237aa1aa9446400add435d2bc430d6ac74464a21200aa219d4aa3f691510d6422645516d7c471cd53010263e1def81a40568f82eb7818f1324d0e9bd0c1bc0b71a1798d4375afe34a1abf8e87bae1f3f8f28b7f1f89b93ddbb52144dfb7acaf00ba0d8008b8c629697612f794a7af2b26859859de2674e5e39af1206edb9255653a99885224ec72aaabe163c964c5f39417a2dc5257685b31ecc23a88cfac370bd1d3aa2b5a5b1868ec2a814212b3802cb740761a5cd6afe1b3960d662d2e4de0874e46d536621df1ebc33e10955a5bcf7aaa44ffb3695c3251f7b3f875c1b30e4b7339873c9bc36ba88b8f1b6268a60ea511da97527fece342566c132e974de0403b8ce7c6d3129ce0dded78861c8574a12bbd1e9b9afb1f1d85f274244a35d62c1d8bd1f5281378aca58e0630bb97a5e70239c44c8b4ee000014c245907648a1ba66e84b2ae5b69931ec153f93a8187babf58fdd45e4d41e5c2356a56c420d0132c6c3f1459d46e0c78ae200c9c80e152f0f43706a4b7751c0067ccaa98dd19a8ebac617a7aaf89a89e57c52c9053e0baf1be7a4a1d3522629dd7b8a39d2700b21ea292e56cf22458b5a6a8eac8c7a9d679b5cd15a76e1232ac1b1ee1aac734c7cae8d5227c8996ebb5e743d2aa651287d9f86871ba32aee622d0f1e186d4d9402c045043eef07b1d76e17bb7c676d0efa3baec2def10a81d429eba71adac0ee476f00386b79e22f99693aa71be84bf348e2c6e577a2612a92863de75d6198b97936d088cd8a9db15d53b93445897da7496f49a61111d3473f0ad720ebdd6f1924bc65db6222f03ab9fc5567db54d03893dc1503ba2b219ff5894b689bb62732112e939a3023eaee3f443633ed7f311f2447c8f55d8847032b3cabbda6dc6fc5642303aac19afca14a23101b44874fce6d7dd475df69314ecec9fda1952ed43518aedfe0604b6aabf77d49efcd3023ef05cbcce58519a10b4a6ce2d8b0a818359fbcc84992966e6cc7ea375128744054ffcfa668d62c25e1064d3db67327070e9612d254b6bf8c1b9c2f03e7237f951de3404ec7a1e853ac806d362016ab628f89d765334beff55740fdc269620ff7dcdf331d4cec4a2151d7afd772d5a712105db340d3681e70b5d8e4d80fe944bb689b3ddb42c2786c510085aaf07cfd5374c8fc8790ea6464af8efef0363578f2e5b6f7aa84ff2a7a5532153a85d5d60beba2c181f4d5371817f17f37921d34ab049c133097c2251120d6da298098442db8981db1bd46435fe65ac1463c9d2bc2ad8d93f0c81f8eecc8fd74166d544606351571249d46143817a6a17729de6b9304636dc2324675501b1d39838b2a3819b9068e72cc77e280efa24017adc978ecac8b041be3b1c6c52b4a76f63f4f4dac18e974e4fe2ab3e49a77a4acbfa95a257626edc4d8b319ded25d76eff8c40216ad1a4a01b8045bba42e18045eec643455812a44b7bfcf022e2fe65a68b6de0daa16ec689d82a98370c873c1720f065af0eafae13847d6375b27378c977a31f1766e529a7491ac156e34b18c3b04dd6db85144c8dfd5f8f77aac31d736192e2a93180e24638db75c2b6f219093eafd0d26a3fe1aa3f1bcb67c51a14a5f4959fd7a6aff90c6463c425bf702dc7429063e7d628d2f4dce39e0576ba41af60bbfa9de3bc203c5436dbc6678a17ae767843ed8834acce65695e5d24c8a922a32ed95d382f66c5ff7c740de4828ef8a605e1ace6b4712adab66c160331fe7e2b1b9f8d42f2a64b07355186c18f2aa618519ae34124795745e70a999dc0919755370e97ae1a5cedfdec70a2b36741895d7bd78c2a842fbb41d899a85619b834962e9ccea06616fc1589a62d2f12da626d470467e06887052e4aded421377d6cfcfdc6f4cab7146064adeeab36037b53174af76409a58bc801df4eb98117ee55e034b59bf9034733407e284c56d7cd396e34d02bec855088cae9a2349fe3bccfe975ea5f91ba38f020f45938f4bd7ac89f092ff05eb66054322ac2cd110f537006dcdd897b6045da06959b374633bc709a846de332fec3cf4e08a7a59d123167aee0459cf6a8b1838712d59501cc9497fa3a654477127667a09de5835787fe33456b5cc770f65cdfea37b56d6b7a8aad730aaef6efb6ef4f146c49c059ad578ab88a31cdcbbcb002b8e6e0dd0bee887ac1a28b8ad0b7d28e0d7c403108aa3c0cfc00e9e93542b802af49442f505e4b78762ca2fd2a20401d7f55082019a7d3325fd02f76e73f6a3f38becb243132b99cee6c8aa29e1e44c1efc741688158a050585bfc8b508e3cc085447df0fe2adc8e1b50c00b9d64b31de21aa5c88162d21f305bcea9a07f6822b3c55866d87825ca7ef19b9ec5bc2cb7b622d14c3d25ffcf48979073dc6a2c5bcd3fd436f83152869f6c71c76b1d05b84795da62f42c8013a59114ecbfcfbdd6eb7f71d3ac2b3acc827a274eef0564206d10d575247ab8b7c9415d273a7372a144a27712a94bdd31a9a60ae6144c53ac242001b65065016b62161137ea01be6b6312fc065ce473eb89b81bda314bbfed6e4e8878aa4b729e4807ea755c97f34756535aa18f4824839c7af41590ff7ae8e7273924f22221178adcc8797c400af281ad2d1b90c17e053a60f84a220fa1ca5b94b7a56a510f91e29b750d3a1ac31974f9fee3817faad2f541285562933757a3faf348a19bda9458837bcc560ca84ea7c085809be8e9968c0d65b136b60801b6dfa4131bf2e81feb7466db6f368fbf1d6bc1412ced3f7dab9bdc35ee72388cd872e1fd0856c518e041b15099455ccd291c8d5ddb3d0fa1cc10e5f7f308fd9b858e43ab806e200d99bd707afde1ebf62636d17065d5151542c494bd00a5e638218f7a5aa14a25b8f47f15814cf1fa0d7634a5aab7bd04e5e1e7fff0e021f91ce31b9186e01070fe5c74cf034f20ff5dea27a29caf44224a038f8be2c6618ff5f938400848ba420f6e44506aa29f7c4de14841f5710b0c8b3681150352ffdc0436d24d20b81230a3363dc7d45201856673434636a6b637749d24de38c52d48a541cf77624ca8aa73913c944403a4784e982a3104c6b5e8a0bdfcc7eb78d209e100ea42f26adb517ec997ebaeb5dd7b01a2f52747dec6fa871f537d41948676aed785e61424834fc19b7057babc2dcfdddd50b405c6523f9513d567ca5cb4790955bad83114b1d9eeef90d8ee94ac3cca9c7d45c77f7b37e30d29a114f09fa72e0bb741fe77c2ea745f57dc603d7d165adcdb826a2328f5e80965eaf85e1e8ec4c3bf4098c091f18e62970f1f3e66881c4e668e179c7b1d7d31e3033ee396b8e7e39ec8d7e79ffae37fae52766d2d60f85c21d6704c3a287cf9384713656cba28f22a4b540176e9d0b42eac49f8a2ecec528e5199ca86e3faf13c2ee6060801053de2f08c8ad7c23fdb84b7fed75b95e4f1a56a8cb9a3af5cf575f6d13a6c9a90df6196de2f4095470f4f59e4ed169b499351d61a8fdd83ce039fa199981598daef149daacb1311a14b229de209b4815d01b523ff4fe7d0f861b7803d607fd55e79095a3e3a00346a5b69ab1e3df9fbf7b8d6e3b5689ae6418c9c7a2bfe17c8424bb84288421560600ec0578e84e9b8ec1e30ad3bb4941fb41fd5acd5c183aaaed42d5545cb34b10242f8bf29c25e9782c4a9157d9351b8aea52889c81a700b09bb9b814256b6d3fed3e7ed86617a2c47c2d504193eb6aa890185fb11df63c6809c0d272af0545fca50d71e5c3263e1bab77ad7e24b1a2b0dd3092a73f32d0cd7aff4daaab887ef3a7b7c7cfbf7f35f8dc4f3782d974d7e0ea39d3455df9fdc80e6c3642bbdb427cf6785601bdd5ea181dd58a717808b7198170b7b5b8d3d79b0105336fc4ad7b2ee279d57a37372583328d3cdae7296ff4d83d821c180dbc77b9c9a76753453e9fa708c4b014b7a2f1fb351a8dff3d639b8d2c6c9bb4db857651a6a7bd69cd29788369b156f7ddfc098837cbc4848fae3d0a9e42d56942c481af201eb7a8bbabdf0fdd7e3feff7f34df6d08d30906edd8b4db6904232af31594fafe57051e978942257e282d4466ac544aba1d426b1eb816d2dc3b5676cb3af9a6eb287319cdc659b9bed38b046a4ec132359147cd8937658f2c1086ac7e1938635709bb8491fa64271a117de25ecdcd5506b9874d91ba1f85548174b82c434c7095ebdbbe1966f9a58f8f1b03b133d4c04c3e5753edab2d8b065bfba352d8a73b9e931e0960d41b6f91ffb6cfb6977076cea342787f1186f3a2a86f9782e1907d681976a853aa8a3fae510f805c580a31fda45718e62acc26c0dda0ed3c07a0bec458dadc053934e72a86e1e3237e998a1182dae5259e1b80831be0bad704693a52c454407b2b7b49f7f0d362b106eb7510d446ac506fd14d9973b6e08af8823bbda8ee3173f35ecc66aceba612796dfead6181630e6c40c54b3b3ba2375c073b59e56e268a4fa21ad86a96bd52cb2eef13015adbab703b7974ccd777105c712d346787e1d9115d95fba607b4bbe4c612c89c3796744c8355401f6c98c5f0f8559654d9f3c9b1dc818eebe145762b4a8042b16253cdcd2011f28d9ef918eaf4d0427dacfa5d16380df8542fa244d4cef6a5a2c26d32ee97d04b28ec5781d15feeb222df1db0649a0f6821b0600a7707e214e613c4f32c1864535452d1c16ba1c7125cc416809448c90fa244a52c3d22dfd0d7fa13668264c23c3a98e8a3a3ce95eb99193b852708fea6fa84dd0852cfa1bbaea463064e403c281f5371a7443f1e14c44b565571d47a065620efeead7f5d53a2e82351057f32c1da5155ba6c3321a9b4454a29ca9d3676cad16362832034dd6129094495cd6963289de06112f9bfa41a1be05ee8c90c361875a4b8f49ac288162c11a72b55a0a08f48fe2da153fb146091bd001ce49f65729c6a616c68db5cc99d4c58af70e1cbf96387d39872fd33fe6f265019846ad306d6f986766cf25f58f39831938cec969ed9208a12f9805e56f96373cb33b034f3df99b71f51e15f36bcc876ae63508cd1291ca057a933dc732b788c6b52cee56b6daa5cce08ec6856e916b4f379de3c220491015c9fccf4e4405102c1569f87ed02ef457d5e108b064e8990f4863032adc09b20bd9905a5fa79795e891cb93841597f94a387a574cd7608d881b1ead52e4a71ebff1d6e9b4b6414d8ce6b225bb855125088422f6a67a4e46ab9ab59d6b69c4d5e21d2a32e60b20a984ba0e7c3281cccc1722c8fa409397b92174c7695689b205f6dd639bf49da632a31dddb896776c47dcf7ffcb9efc5df6014d640c19440c07d28836e55287a03ac70a8cdd84a76aaabaa52ef5858d49513185317c021c43c1789631e71ad0de8b6f45d728e27564174c486be2dbb56a17f55cfa06a2bf1a50df82ddbfef7001edf6265af61d318d2f5faf77de22e99cf76a3498edbe79cd4a31cff8e84b2dda4d70fa422b973e606ddff5ce4c43dd7fade07e31ef42af5358d7f5eb8e39308492dd1a16583e807b4ceae5a31c591a97c5acc3aa82e6dd55cf4806857e5eaf91824d888414419636ab0a53f744b53fa1558c7d53670cd57e23ab7e2f643110eefdfb301e8cb55882f5e046439ca7ce4188acbb4e5993947faddb9ba31eeeab13431ce5d6553228d95d2ef297d8a6944779249f4543463b17666abeec551f0567bbf0e38a6c82054b51a3aad099ab754a2e8931fbc4754b4b2bb24299052b311259b1dfe053e38f2ae201aa8edf8fe2faa8349524dbbe61ba98bb8cd7b5b64144267b86ab73526b78ca76ebbdbde41bf0a55afd69fb34a83c1db825452278087d5c9178b6b633b02d9745790e59c30d50c9e4623485b84083237abd314b80c9d9223b102b522e72a84bd90dc89893758b792b28bfb857df31531ac03f82e190bd106e5156d7b11dad87b7c65b8726ca68abee8ccfa91f715ee7221b0739cec3389f9a53b13d095435b7c419fe361b8a966274c50db262c86e248490e0596d190c393307c0f7e96b6a1ec1d3cf98922ef905a9dc9588ab288badce62e3d514edf5aaac74bda042c5147b6d7b8ee9bc1498d2ae5ce4aca54792b44d9c1aa02a4dbbe8944f5c3ec7b8ce439d5d82edb37b7a871d8a5b1b2eb218b6acb23b039f3e1977efe060e004e01996a68e633470aed5a5e0e74102b0c06980507cb5aaa0af2b7261a25363511af539faaef42448a1c95bbff1d621db631322084b7d18664949c7346499b35c910717b87c27345e8b0278cc012c0a39a8757476d86c1465529f3e1d99678afb205a024039bf5e171494fe6884a4e7be5044659889c1102b41a3bea51eacd7b6992f444b733648db8f55af45a618e30658dabb1982e7729bc0cca63ac0478e5cea050e32a716790b6924b2826a06366c757078f4e2bf062f5ffdfce1e8e8cdf1e05f6f8e5e3c7f33f8e1e8e8471dd41cd6f5f07fef5af7d8a590da6d0dcb64b8260c102cf5be411139bfde55ff339941aeaa92bbeab90c25d6e162a278c55def17bdfaf628709d81d02121cd74b51bfc0eb3dafb69b4769b5e2ceb2656f70b12e1ef860ffa240e68e942eb88874333ed965d00ac596e3d0dc51558717e6324aecd391e73a9841df35ca35987d4527291bbc1f235168de1b271751a3b75c275e844b2e23b459c2977dba9df6f6af1363a1be8b3c906e2aa12b929d6d7dff8e7900f45d62b177995ce446f0ab552644fc8594fb70429c2f44624fe25ada6c5a272d5f1de1485146b805cd69d7e076e132ce8044037e1016421d974ad10bbb101d015f2ee37b55c2f8aa29255c9e7ef4a314eafd88d6edced7d988a99308bb7a9c9cccb573fbf3e7835387efdffbd3a5697e2e655b6d9619bd944fd7f96a8ffcb99faff95dc3cd57d0ea08e0d3a63916072b4e5a139421baa48122ed6dfe0b2bf61124f02df0dd9e516a30a1f21fd55b8c12b289d0875a765759d89648b18c4488276b44c0fcd946bbf75d591c74fbe7de2a994a1ce3816d131a46328f58261b850d7fc76a562ccfe9816f6816da21e7fc5a569c09d6d8ac6c8d856fbfb0c941d8fd833b699a4179b8abee2cb0e65f401e03234d2133ae96f9851eb383e3342fca9d6df2a39b45f30ceb88e372d3b7fb6392ab24d17f423e73cb735c734cf86cee4ee21c5aa88d4382ccfdf15695ed584c59fc17cb6afc3404c3393b509931a36bc3443ebb0623c968a6782ea843529113f71cff98613ce467f7e7f9f6de2726f8649106cabafd4b7f448e141573db0a29a7e5b6b4fb71cb2aaed866d2c089c86f7097ce45a9418de461a942e5b45980c261c706815c69ce7880f6671d1d27d25378113c082dcf6dd2edbdc24993100fe3d236b039620576d670e13568074240e20df43fdd1dd86e70fed87159c36f9204edf7ed14434c037fb1bf0565710f7e1c01b0f10ae742324781d0705af62d1ad387fa355b6dc8e5d149c25ca16f38ca7391eb3ba250ec9ac1f1b47a2e2ccddd6faedc69a902ce73356ecced8302b8618ec92ab46a723409cecb013fbc616dd863177cc9ab4db38551b88775064410cdee6419129bcd02c8721ff0745b6b7d1d9f88b4726692a32125276457ed17d7bf4f2d5e0d5db9ff1a0cccb2259784e21b610dc6b09e1ca206fb4364dd5b94d8333bd1e7b716d0dd2d9b5f6d083c26d5b5068ee8c5debdc41c51ce27321698f126c127121b2623e8390606a9beef5a0a889f5e372c0b6d27c4b0dd60c11a4a4a3fc252cc2f3919a9e17675f28b1a58b3bea4da4db1b735836753129fe112ca6a2949bed969e7737951a6f3bb1ef00261152f5392be1d6ff2e0bb1ee2cd51cd27c723c4d676a9a9ac7fe5fcc6e7690b33ce05936e4a373cb5286fce7f3a1622046d55b7ef1ba1233cb7806cf3d8e75c6cf316dc18fe29af0aac72213239090b551e433d9dc207987399b29cf2b8cff02228911ffb44660924ac8f3ab9fa14cad00be4965f5afb258cc61a6116ef833b94d9db7d37092f0cbbe34a332afcdefdbf0aa7af6a681fee97dbfc8e9f70b177e1f657185d945fdcafc7641fbf9419642f035bcd73fbf0ca78b0b847f9bd588f2c07a9eae57913be658fd6b868dbff42009df4c766e39d79ca5b2da9a2814d94a15d63b0e1a7db5cc62909345900686e199ddccb468c99c0b4c8d0fffbe441427c93df1b5ac8af93b6d254d8bbc96273596d9504fbb6df64c0f07f99c0e3bb108671a9cd603fb039e2520029473f1d915fd0d9f9731bbb2eb118c96c5316cfeffb3f7fefd4de448c2f85b11590edb60b7139899dd7326b04c6076b825c08784e3b98b7389ec96ed9eb4bbfd74b713bc24dfd7fefda8aa2495d46d2701666f779fe10fe2d68fd2af5255a954aa8a66b0cbfa7da1ca34c9aa1ef5b397a94f552f4d32d21a11cec972a051f9ea4ab409dd9f3138fa5026f591ac355a56559ec14f7d4aeb50751afa80afe72659abed36a17078421bfdc103d1c29fadaedbdf3ad57cb4ba76cf3e78e0d0d009a3660b9bbd5b2b65d03d94e13c5a16fa39e29ff5b2bee4e76536c8805efeeebf30c75cc3208dcd0be6d257c8d93e64e33cab8a1ccc3f0d5b5bda448d0b5fc10cebacba894db3923ea333656b2b7d7b263bcb8be46f7956c974406f2d6a3c75333f25cae033d4d370e6f6c2b96cfb1405371b9094569ea1bc81c7af4e331b0dc035b054ced4c3d23506cff86f5836e4c56ec69a4abb5ca7870aca904e2aacc998776381f54aaa7a411e519952dfdd8ea107b080b9074cdbe7f51e0b77a36fd0717d01afe66cda82fe4f6c919def5d9e65c7b5e262cf5b39a70069b9e416e83ddc375272f7dde0bdaaa99dd0e1d0da232ab845a33312dcef10116adf6343d29cc3a2273c754897e5acd5e98ad619a5ef0db72071b8854ea6ce5cedd06794e78a366a75c48010ea0e12c38dd24280756e97038bbf3b57be25a7adaf4573855ab9b52cf8b6ec772deb6d79a5e874e233def57cf9ff419efcad4e9359fe976555a9a2ac1d15dfe7975fc0d018ed4299b4c6416c8bb6884d719c003290fe6399759712ae6023c537d98dbc91ccbb6b0c11c229de8e0dd01cd40e767648fe298d3108ef46836c1754fcd36d497f915fb66e3cbc342a5c1b09911bb28b837113d9a975bacbd6561f01b2bc37c5cf564838dee79737908c60afbfcf2f7fdfe5df4667e4b6f8be2ce257f3e9efb7a25fa069fa9a4bd3643efdad2f4d7d85d197dea0ca22eee9ce7e0b4ab3519a3193fdccdda305520bd8d262bf6cbd0e57bab0cb1d44ebda050f26b77889bb9020aaf4af4c8648657ea0e6f95a75f9171edd115f746f2d8f3355ea59ac5e9c5ce89c7dbb614dad3083d5d12b450a785b9ca505253505e4a50847c0cc24b9380492f5bcfce57b8d20419bedd6ecfb56a7a1f00fcd857fb08575433fe5f14aec35cc4c1b77de288f57b6421359d7056a729b86fc1b68f66f413147535b7b6a1361112859ff76a58d1d00d6802f9619af5c56ecb4f18193ddba8fdd7f706396d114ffd21b419d4257fef83b260dbe7b0ff4b5049ca906c66c5fec998dde5eef05dc45619445fc8b92b12a0c8a0e3c423d83bce116e9e4adc21dcbdcac65679b33727672d6ca069e03b2ce13f8af1379177793760df3194db56cab1792ec4aa65dc47148d5bf301d70dd2039d680df540bad39487187e8fe6cedd4684261a28fd8d7a862e07e7bacaf89efb56cde468e0745502234dc8e128f922a559b8855a50bb4683eed2a0c7c12ca7b79b81c5537012da9cc0d707fe07089aa9a7933c9af93ec7c535369929d3734d3922d0efc08b7cefa59d0eca501cac283825b69131cdc502d5be3e73caf36d798400957e3d57cfaf64215a9dcc86292f9b4976331a8da20f2687907c224ffb25acc80f0f67beda8d39fd68bbbe77b72aed2e46faa8dc6f5bedd37a645f85652b5092e8fab73aad1bca8f91a9f1551957f582c54b12f6da8638cc4f7af29939969a432713eef99c64cd66f749044516221cbb14cf564737b7e97aa97b7b6b6c7db27fe3289471e3e74a2324dc6aabde36cfdd7a2511d6d0d19c65025ec22a55013cda2313a0fe7ea9fafc1fe5fcd17be8ce0534963906092b8d14250ccafc99b6233438672469a68820c19a150123906b6566ed9f75cfa378b2f753001e5c701fbe4df4ce64f256fb35137b0eea61a5f8d3053a561e685422ad4e431973d99252e9be2c70dd2a50865d4c775211527f5b193ff1e73015088236944d4c735e9cf0d79604bb0aab717021fdf7c17e4c9733805852af3f442c5b7d3ff193b4c8f4036890f47725a97846a87f25bc83f7eff3a24e9f1b3b77dd9c8d0e706792328eb6d35f6c5c547568108ff3aea611daee0d294cbd13ec6a22a979a36b14843262be21e7de9913a4e67dbd57185e8215ead32f7082ef66c01bf340bcac83a4443b26348cae7a3324f97956a2f6435cb5cd406f34a8d52a3f14c16cfabf636be616af55bbbce0934c451153bd1f79fc4449615c636442bd2ea32efc9626a7c23897c22e099ec1fca0550e90e53b561d2db4cb5d3a4acba22c962f589ba639fdf27104e23569fba42cb5b89782476ba428b0dba129916ef8a73f1a3c87675f69ece3f87bf9626e8a2c7c909553a3ef7e239039c053d243643042b5b1b0846d2e4d183d799921709c4678728ffad522c8b345ac8429f9b996718c0f07734a3ed2aef722f02c944802f02985fe61b1fd3d0a8dc10d02a7f27d118b35de560ad9f477af6aa76abdfea74c4d5157f87a021d8f200eec103486cac636a25e551fe7c0406afd00443952a7767bea4fcb9c8e758d0c066456180ee21dab2ac5e663196360d5c5d39203cd84743abdc014095eb0590948bc97ca43447353fb1981cdaa05b80854a2558158ab8c8319ee724495566dfd6d9362c8e842dbb12642c4e6dd6df65bb92a63bb4ed707fd92b77591e153249936c7a98ca72b6cbf1a57138ba562acb8af7e6382c2d7a62c7bc13099bd05b03eaebcd1eb5f422b1ef30a1d574215f87089aa430681ad8b5e0adb7b7c9c3deeacdfc54971449afe73f9191853fd0e4c47fdf02f938101e35de921b5bb32b928eff4e24a87f0700422c178f1ed5a12d177702d1eb05d1a32cf2b8cd443e6d76b1b8d02db8d95b66e52c99546de8fc6ee8b99ded48e388ddcde3363ab7693927ed0c6575eed595b8176c7693874f223ae19eb1bd69717513c6dcf216fdd73cc9803271f39210a51e3ca0aa51b91c9555d1eeed74b0cbfd56c7407db4c7b613ed2fcc0a9e811a0e1f106a7c34c93db52cd5db493b1ffdeab3ca7cf46b4499e219ff6a6b319dd8bd63e29489bece34b09a430a288141f465578c5c4093235552bc8daa48c69550ba4c52adc42429cacafafd9480b4234b546c0402f4b658cd54719994aaab0b936f03f460af79103e040317f5b250e8075237e34137aeaac548587722269c2eedf561730cf89a430cebc1d22f38ea58dc13421ac205e3321f3c5f5da86265358eed044c6ab91c61c45368934d30961c1d43d9131e3d177fad736021bd77712c64d3a8f9c19cc67669def319fc901df65a6f14e68e3a1e3593e6a9de9e9030f5eedb2d35471dc8ef5239078b4a727f60f45b966532cde0e914e05d279c56e79da87932253827d2d309deb01afd920468d2b40f1dc40def965b372b60989e22d8da569b01a93d23ecb20aae0f5416127ab015d69ab05649b6ead5ed5893ccdc35b26236b1e5bb4d9271fc5ac9d8903a10cfeba2795d2c073541351303f878041f38bf4eceae8a64f135c00db5ddd184ada181992c7f9225c84c00da9e27eb4d54f9ebfcd2687222d87d6f27a4ddf033b113db60f9d17ff687962bccba4a15491a425ed0db691aff2d3ab87e18fe34f88d364f09b4e931af1b261d7e3b39adbe04707cdaee8adeba5580f387c674de12ca4b84fd7b882a5757c420e9b9b092c57826ac5847126843ca2bbd0204050e8966495a7f08f93695c5f5e8301971c6ebd384daf28674043de665b7bb2228ce644b1ccafa6e3ef3bac94b071db5731236cfeadcaeb3b50a3e3dfcecc318d85f5dde9181ed90468a671a295a2d6152bb6e720734c5bad81f6c319d3624671a1c635017012863223a36a38dc98d82deb189b245bc3ed925b7d933739e314db069e398e916082297e1af7b38fc0e567cb447e921e18209a22a0331dc7a860fa721619723a9060d7fefe18439c03a35040b130ac535d03fa049ab190edbd2f5b86630cfaf690a88b694e88618c36b2e8b4265d5ebfa2298796b888a2949306ae105488b9f6d8f480d33c98bf940e0536bd72ac9380636ac80473b76fd02d6efae0b98e69ffdb47899a9b0458b53b5e6fce7daac453dbe1ab2851a9286024e5d12c0c0450f9cde05b96c9d2d8205450462d5a3307d8d938186daada60766deae58d7c900152daa7a0504e2e7a3868db6a17b3e990f3ad7142df0c1831a52ac599b069421678a2e6a5fd342c66a9cc7eac3fb57753c30aebcc6e0b9b1adbc77818a7bbbfbf0fe1538ef698c496032db2d2b160eb7bca9b3dd7904be5ac7dc8e1ffb174710a8a4856ac252a4c9b94a57029cb28323439981f807615755315659d553d938d72258d4eaac5917eca35aa3000029dcf6f1dc04d76594a1998c505c0b10794502a1ec5255a9bed17c39f26b53aadc9024d7a09bea7bf59569c02db6a641bf6c565d5952ab1d227ebf75435ba1d6b5cebad676c777241912b88f33052aee425120e94591e48e40c3fb0fdb8fa4146abea8565df04c9a807fb6fe57cca0e18a3e5610cf613c827377935c3e2fea5a051325c027b223f7f9e0819011933a4691e3c632b252c628327c544626d2f3087ec1eb1977448c88df8d9c6ff626267954c8ac4c74c281cce4d4795627df38f3057be833e477812538979f2f2ae31f7bbea87870993bbe04326ded919d4cebb9982525b8c6a06030e47a36cf94e998ac848498d0e1f31ec1ba6e3be75fb635584d596f3dd8115eb7539b0b11863060be8fb34952ccddcc1ee56d17c09bdeb48ba9aa3e94aad8c7c29439a617d99e68010e855f4d84ccc0ca5f5416b026f67a5e2e6749aac4a56a41b45c082c8960936c6ae150f88d8b245fea99545d71a920b0a8ca62b15c40dc7f71a99222461e12899fc199a0c0e04dca021aa9521fc8572cfe07b89e77db8de6ea5ecd03aea78b741e90cc7cb3a895cf28bd36731d74ca8bebc9d78dc019f04d825a50b46109d685e8c17f0d15dad81e5bba5d5723e4375fb633d02d04df109952712964e300dcd563469e9aaa1cc2224933d373559672dab067f09f1948bb2a96ca1b8dd5d9d586050ccfe99b50ff2239a6cef2fc1cd89c961852bcbab4b99183645ba775d43303306b6ed5c35e34f6fb3a38b0a64959a90c1f2fd9db38a7135a2c5416bfa632dc3f30dec43d37de3198a6975537c0438a622a76c4240b3c1fc962ba9cabac2a6bd1926c4fd17193f9ecdc868ab98eba1b210f265dcc227c0a4de04025959a37a973753a2c88a9cbb4b81b29629657c96465e6b56cb388907421759a82659a9d0ed2ccc0046180e84b545cb775c94e579ca23cb6bd8bbf7e0408f8f1e811ebbcae7f7c4a3ee22d784c593fe575df7176fe6b7a5993535fd972a366d66a3e88c50cdc4febe7b3c648064d89c6af8487bd83e09b0a054b31081398da026dc8c632fb50aa176f0fc00db2219d974916e7972822dad3484bcb209813c5f918a6ba21c9b770d153e30557e1c49548558d31dabd4ea069524cf90e3a380b6c9cc0bc29cb7b3255450523345ec1907695f8509a3c53ff7274f0fa7b4b719fbf7ba5654c9244f471e4489e2b8c52200ef2581559f2b7c2390d33910cd9f3285b8afd1aa5f9a83f07938e3ef908fbd2ea1325ab65a17ab1aad4b82afbd4f3e8d7122052bc0b085701288a843a535338816008f08f309ba57837cb33550e9aba01e661bf96f4b8abc897ba6d7ad9f5fd9f7eb01ecb9c9848c2db2fd81f2e5e2ea5d833c891c98b642aabbc8896a52a9e4f15c51b0437c24be9548acfb3b8d0fd7f1cb58cfa595c5d89a622df45dbb60c0416e1850ef291169a0ee5441689031594da9f153988977b8dd9de84d952b53b3abbe769b006ab1e3c102d4ddd21d8494b736cbfc0ee462c1d15f965a90a31015fd28b7c812a00bc1f98d18a034a8a572f77b6e1c0f4eae5ce0e45f58bd6afd5bb7c015d7a9bfd22cb1986bb68fb0799f5cbe666e7a848629555765e9a878388984cc8e3da346f671d7c6d08c330730547fd125cc1433089291c9f73196f18c75f7232f37b0f253fe806f488be602c3f27859ae49f6e188b591a29a6c985cadca280c720b0a7c9d0db74a6b418fe518dfe9a54e43109203d1f8ff3655695365adc04bc8dcf64251017f5fa266f0f69d50b25d3a015daef18f056cfa8d326612988ec01814ce0a1e74c0970af86ee861a6633295fda1ebfa3a6c01592e72dca380527e74f35559546f68d33bc5f246f0f83f9a5786d848ed0a83e9c9b019b675e0e4b6d118d3bb803827bbfa9aa8814014c830a4c4bd6b8576948575726165a835aacdf17af5e8a9d1d088ba28fa5256a984a9c72098e07f59c3781b6200e956a22bc601c7a54e09a1aeade5f2cd3b4fff84fffeef5fcf33573736f3d5f02d3d51bc8ec28bc3a47dc82bdb586ed65e37419e349f2a1b0e4aa4bc192147d69ea02474c0f191d3ad5340f3f21f9327c61c1224419a7b9dcc297ab1616a58b494742d53d27a73cbbc319cbde0edb531675ab76d67af1f6004e4c418de010a5b1719ae62399d2b81c877334dd3ce6d21d76c56a8cd296842e381c37b29a16c836536c0be1d44cdac20b5d4aee1526793156efd5a450a09dc6d488a7da1a8d450300dc281b89fba0a960d80bff30ebfad1a42831551b4ff0eb00f27e0582a6eba15f29ece3b95abd260b19d33d9b64cbd60bf17abc173fb8766d09bb6623ba1a779e384cc2b3a6dbee9a3d8357a7d3317e93bd83d954552fde1ed88bb219238c7ea04a7c9dc1f391143203fb73e783f19cb95f14c2dc4c4096b99e60b0717fdc67d755b463aceac7c1622adab05efdae94dd96d60a07b7a6f6deb456905deb34dda09a6b4e7e35f9458e90ecea5e5d351846d875ec8ad67f911b5a59556a8eae68ad8ac742c93321514aba9ce5a5121fdebfc6bedb10db23354d32bc5501690b0501ac1e89979f166a5c2954b1d37d0dded5c2150db8879882c06ab36ddb50a4e67209c9ba1d8899c92663115bc85776dc70addb69d6c642a5bfaa55ed75ec81ac665121b3389fb73b51951f82b6b0fde4878e312778dc759bb966fb50859a73fb4eaf41a7dea03c47f123539f2a7fbfd9bb5ada6d5de1cad88d63440763afe7331d63d18b656b1d8d427d8c856675ad268574ae8d338bba5fc37902d7a15a16c218ea4cdc0d04557de0410998e98e6f92363bbeff50db897640cb9820dad9d4fffa096703d09af0d8a9a105b0b837ea53f50e82d07133cdfacc8566206475ce40307dd31ac886d21142adbbeb04c348e35db7f5eeedbb96ad5b4790afb8c2702ab3fcbca6780f9258b7bd54e3077820020fc0f8cff464607ff1fceb9b34f085ba5045e5cd7ea396bb4987cc1e9b182093229fd76e80f111c96bc7d2c22db6ebae763e2abaf15e14f9488ed215389ba520e77a07152a4de4285562b4b29beb5ca985a6fc12f48f229f684a558a4bd5ba50a2540af4ffa53e6fe4d9619517726a8292eb9d9995959231dc00412c7463115ae5621b4e9e044cc479d6aac479965f469c6757b9b1f99269fa57b52aed31ce0d3ab224d9bc37a13aa4237130b6197fd5b3b90e369fe9103aab47f03924de42acd24ac2fb15ccedb9929e490b945bbffdac977afd6f9a53f135d70e499654894c193edc4858ac1c48b320f6c47100260225b65ed077cb519a8c459255aa98c8b16ae481bf146a522738c40c19f36eb2526b24a03533a72fbffdbd57b7b23226df0f1e904166b3794c43b21192c82124ea3b3170326e99c799d185981b018df97a387852d7a2d04e59a170648b24fa186866a49726e7ca3b4253bc3d882e8c52ae48a052027c30aecb430149fe70f84b8be530797893e0c3e49b6e8dca74d68a00df9ec2839d854ef1f83319b3e2f9a1090fbd727886e036371ee9372709dfe829b807f6ced51ebbf16524abc9f0790f04396f6c782098a246e0eb59b45500ffdfac1b8c8dd36137607bc10127a2f9d17f6e605ee43ce6621d8d0c3180d34907414b9444540c006befeca03f123b7e55532df2cc0deb4d3892656aecfe5d99fe70ed45f5dd2953832ab3414b3496198405d724046b249951d097481f50eb6ed43cbea2adf92efe3658622ec39b29b4f1d1f1af43a46944ff8b74fafdcb77af9fefbffc9d54fffd4835d734ff03506bb3ab0c20dbc26f42af51196e2098db4c82736c734e82d5f87f84e21a7af09b11dde6c5de4c76f10e9326c14765c85a53e927393e774a8869deeeedac2bfa337a73f14aefd47411c634651fa293e231c83f18ccd4f85c9f43ac2ac83ff5f8001eede1e1c9b7fcf7dbd8db13704b4ea7ac3dee15c24eae8c6350e9584b2bef86af1b6896dcacebf6d65c8674d6c20e2e07bb35bd4fc38bf4faa0b6eba328d43cbf50bfd9409ac0df7e2ce101b4fc29cdc7e710a0a2512535d2d964b8e929a39879667011c78c6cb92eca8becb8cc00309c9743bee60c88a9590fafeed92eb306ebf8ca24543e46763abf0e1ee4ae35fc6d6a5034ce9cc9ab77a7b7e3d108f3939aa6d9686fb69643e4ab5b9ce17c6272e38406e68ba1c9e086c9db34359b07693ad43c261028ec0da7212aa09c1e34aaac8d291bf125d053529a6347811ac458cb598965c07e53a616ccf19554d78c18c8fac0fce81a323a10d3dc7e688a3ca0bf369168efc0fda42c58dc01fee972023aa0bf431b35dcbc80e5763e8db60cf777ead60ca6d83b59cdf6f318ed39617275b991cca6369439bc81015dcec0adae4be42f57191e343d4ebec75f3edf83a7cf6bde391b44a029c0073c41175ce29774a1e97db4a37ad06e969729bccf6c98885abf1b7a1a5ca73ac0ebc106556e09d4f8d0f35f328395d2b24899b51c7f10bc2cd2f02d307f553de39a50f14c171703a8644ff9de9bdeeb9a850c6157dbf9c4f8a8b4c8d5025391fac9142cb554a1c44881a19648aa165c3352ed719e95b0052a21c7455e964e4eeb09b2ad1297499a6a61b987732692ea9e1d3c9e4a9a4ec48d2fa675c65d66089fedc20535a09696435d315284f8d3a489899d2786c48d73b3d7fc509588cf6dc01839d4a147d36474f449f80fe6b276dda31f5dfd1fcdeee6176eecf75b1add044681ccf266bdb9e02d0d69fe194c58343a1ea1873cea9d49f19e907b455825cf6125d04216a7c514fbad6d58682d7c1e88ad8bbd80351e9b4e9db890a19668eb113641895c11e67ff3c65aaec80d8636817b2d00c958a247813bbfdb94fc7d6d4a7eb7f4b8d99c814e95a031a52dd1f446b4f624f6fefd1dfe2af65bbf8bbda39d07db7dde9663aa5d2404318d31949c033778153ab660759860dbef8b9759b92c94b85442a69772558a99bca087790b55a4ab1ed5446f184e22f685040e7e83b147baf6b2d957e42e0a75b1c950811f91ef79e8c09c13780bcc21766d1167b9a3a7e2b970671aa01f5ab4a459d9739a4cf78ac13ba933bcdbdb6bbcb0f61a234b24b0a84080bbb808781360b6a84850aaebd38cf3561b30dd30cb9a2dcf26bb91df4d7fccbfdf4d7fbe99e98fa63cdfcef6c740bb95f18fde126594cab27a45a72db61bdd3474beda12686343de42fca39b05314ea0e52360614969b886650662a4261a05e21c163b5b5533fd432375840f2a6e6060b7625f9b58d78d8ce756a64d9e2513aca2d813c76cf102089daf366932270ff4166f9f9dfedfa52a561871392fda2d5da2c5593de91802cf4606d0830706a63ece3dafaa22192d2bd56ee96aad0ec3088273c3417d8d761a2a9b333c5baf1becb37e7303ade64bb95ffc177a810dc46f6c00c53ac27efea3deabd3365d6b5c276e123819067035abd37dedd313df801684fb3ab88367353b814b0754f9e935ad549ae2bb4626b55dca923b60127afdbaa2cc35238a3d408504c72556ce024da1cc62c20c4b0649d8134733ddf285921514f5602574b38bbe50d813d144814139bc4183332af941299358151a13a578f7f61d7335e1c9744c8b2ce8be6093c02d9aaff63732a91a6686c0c0dd0c11480bec66bb2c5b2db2fb9d6733aa6b4bb2ec66316c8310b649046302d8b7b00468d40d124a6a6c83c52ef59e80e51312fc44a8ac2a56b8fce4434cc6313e7d0744335e852a393e6fb601a849d47f5f3babdbd35acffae1b7b763fa9de2fe63515c5ac27f15a27b0b458777abbe9600277722be6b0dac00986f61e5f5b88974ae259cebc9e675b39b98666ba2bb5393fa9547484cb081b50e167081137b6557272cbf9b38dd6ce254bbd7ff6d0d91eed2dcf0775ba1df6d857eb715fae7b21572042e95f3451b14ed97aaf8295f665a3c5b2ce8b7ef9e05de3ccf93ac8d3fe427bf62c7abb97b0707223a4595ee3e40338db99aebd55aef02e4000a7c234b840dd7f39beed8375eced3bd3621d1cbac0281c756f5d36dad35c56b60f85dfa71abdf3a7137e96b20fbb946eef17b03a9615ffca20100de8fed5a1f7c78ff0b8e30feb1ae5f4d82c2a5f9fb3cb5ffcd9c182484174844bc1517dbdd009379b80ca66136581e149ecb05f39f0887f2b0f3f49c080fecdc63ab78161e40a18c77ec647302b1b46f2a0f29e029f9eacaab8c73d2d9a07506cb21cb26bc3365886fbfbf89fdfd4dec2dd513ece46afa98d075932ba549928dafc23580b5528edd84248a54889d400fc12a999dfdd4b5e709b6bc280516b505bba201504fb0fcbadaa5ae1ce430fc60164d32f2579ebc5926ccf880f5d665d1f40d78df6e7b66fffde1e5ef0f2fef400f821d7becd103feb2ef7f55f714d223141abcbe8a472203c9a1594c72a2c306ab946061c3b9b13d38f93b2f5c60c1f20d2e4ebcec90120d6f77abd2ef8b83649e8cd1d652cde44592439cc9176f0f9892d6d88f5095b1446fab52142a8b5521e4a4d2ff937ff654c581def6ce5722df58d7e7446199fd651352d6d0d1575bb8a24f29d89d4bf97193701ff6e3375082d930a2b7d17edd5e17b416ec461dd06db432fe34dd4a1f6376315236ca26d44f1803b6cc577947e0ff7dc50de0df00ff7c2b5d0ec5e5fcdce819b55b7fb4d16dd29f740316d8ad1b67765ddcb12e3bc340df5cfc4ff0346b2377ca7165de9cfd9c17f3fd3cabd4278dc2508c7cb9532a92c2719e55459ebe8a074ee8186640268200a40ce0ee56770b95cfefac0c847a9cbaac04029013954cf7304ca46626af5c205099a42a6e711ff3ee2dc938cfe204a7ca388e77da279b19ec23be395013ec3a6c8bbae05718f98ae25a625d8f843797148fc4706b2020e29d716a0fc1fa5aced2a729a2ab1d1b2e686b592a8a61aca7a0ff7098ede78b55914c6795688f3be2f1f6ce93aef82f39cbf37be255368ec4f33415905f8a4295aab85071a46bc54a68b13f2b550cab8acea97f3a7c215e63f26098cdaa6a31e8f757cb244d46852c56e0b898aaf587196a01216e64f23738a91ce324b47e5a55aa6c7545ebfc27fdff01fcff17f8ff08fe7f07ffbffca935cc306a076825df15aaaa566251245925244045bc1d6978c3eccf7355cd722dddea72c3eccf0b59c8b9f8fc66391fa9e21a2b1ccd94c820010ebc0ca4abf0539ea74a66d7e238cbcb851cab3d20e027e2059848da0e2c406550af9567b6c6db2c353dce3325c63359c871a58a7aef8e8166957b3b27029334578fd53899cb54601e0ae61a2d8356a1abcbb96eecc4846681e8497ad5c67976a18a4ac566dc32c3706b301fa88231ab35cfe365aa22c43308be6f05245dba2b6842ba185208bbd515d4b6c718e90c43159ac3371b8e9e2fa0312acb8d5d4c6d2812d50be849a5cc3ce319346394475f5757ec242d4cb72d74fc5c6356cd40d6a179375bf3959e2b1730c686e18f318449128b1f714fd858fc8f1e25716d569659a2292f943c4ee2939a13933c538195b53095f41f674cb413d83dfbede821816271915fb677b61f7fd715491c5a2b4d924f2adef5db07047aba27ca5a2fa0b4d813a49fc4927d5176a22aff59e7b5710e3bbef313b2e2d505dc734e08eba0d107d3edd1e271ad55de321676617d1f872d5dfb9fb868a6a226c406f7e8b9684bb43ae2114c6cdd88dcce69bf2ffea60a8a94c5e371d163072005705df213122d33e87bd8811a129cd282eac516cf0819b64ff8da8a814de683b4236a6db7d68fe7940dc88b4f19ee690f2452a808e48b9fd35c566deafe1a21d76e095ff6f82cde434891ae383dc55f241f74c55c56e3198a2b5c38a118242d275d3c5c936dc29b27d94c154955bece7313aa6a539073af3883d32826d961dc5192b3e6d3666cc6478d83f9aec81747ab853271d91745bee8699a5ade354efad704783f458a4df624efc056bd4ad46d277353ed3b467237f7929a7f2f506dfffcdd2b20ae52fc88c8f3944537f07cffb84b49bda56899b08ed8d3b0ff707afaeec3fb97a7a7ba94e379a7b0eaf7f7f3f922cf9cbf631fa7da1ebcaea8550a2f0dbcf2fef3b4d36a969475cef10f112f0bfa26f66ae38bc6324d291c5698d715c7bad64934ceb3b1acda1026aba339270dd4028edcb1b331600416c24b63ff8c7f6a410557c3552ef6fcc98e20b5c237cbb09290109156648f6b74754aedfe8d9f8228a255dbacfbe740bd37107c5c56f9339e25695ce8d3a21b5164127d1d0b7592daf646a249691b7b13201a29256ea373a6d1d5a688088f550018cbc881a34a11ca8de6946cc7e40a64796c4ee0dcd91a2f32caf3d41cc1ebda395e52af0b95b4b79b5e63c08ff8a4ad59777d46c1d97a91c4076445d660dcf2055a7bb69cf68a79b8f5a3d791a7a4fd2e3ddb645d291247e605f6785956f95c30207040d4996701e314d767109859c9581f175cb64fe364e9ca477add3dcdbb0d0077571adbe4fbc227b59af77d333aeb80dd82c8bac2bf53d8351496fb05f952f2eaa6f99f9ab6ba617c4bc2ea4fceb7a6aab72799c62706cfce33f576d23e1e6e192752c32d4d69c891127ed0cf930e9fb1a615fffb5355d78bbf1b4965b4ec96f494e21fe7e9853ae24f84d94e0832db555e0ba0ee9bf4915a456f3e9837030b66adcaeb41ea07a2cae9e005972779319769f2b7353d6ac8be7b9f48a7b455b7ebd1a0d02d2bfebfa9b7d8df09aae3dfabc9e12c99f3aefa39ed7dbf4ffb6ba05855b64bb2bb9bc6c10bc3789c5edbec6c0f9edf919ac566521ee471324954bc368cdebd7b14c064ae2af957b459c2049956def7b82a522fa19c25135da4c391ee75929d3fcfc6b3bcf0bac70cb44e0b35e99a2ca53399efb124cb5481633b45cf5af86de92c45f6b3619eccb7b31bccb3fd3401eb6e28409f36bf50a526111b8f97d4c7e3e196699f481435865f045953a95de6c3451653a55bd00d45f8c5b28ddda8b509fc7cdd85a296d31058e6c38e5282c0375e2841a33a31a3efd879a05aec62d78413f42d6f704d1705fc7d816afe3657eae00502b31abaf6ad7cee2104ba21788780d038a4df3763100b9b4e050d08ac8db121f1fd81aed986474114dfe74215f4367db4ac44aa2695186ba0d658e61e4dbe1641681960179d962a9de81d847d495565639a525cf9e11656d83b1da5323b1f6e09558dedadf4bd351bc9f50dfb810e85e65814639b181081c6f0c6d97698de6ef01c812f29d09210d5433bdf0bcd0965655eec93930f4ec120c4b94df2ad9ca3821314d8967a1a0dfe375c28f16a7e314fbe6992ad865b526f212bf35d7fa998e3a84d1427e52295ab37e8046cb8e5b2865bbe7d79c31903e542b453204edd9397b250e247f994db951b12b789b83d5e4bdd20f7be955888443d76328c1327c332bc16376866f476109664340f4daa4c7bfe2db500f6495955ce2cba3d5afcb84e8c6f4d4b1f0331b51d43fa49bdc08f2ac7bf8ee05aaaba019102dd6db49f67e572aec57664f26e61c658c222fd3d4af83a6782c32d66e096e5e8b3f247bd264f45beacca2456ecfc8ae2da661783a1210475d3f32f58b35c6a129dd6087804cedaa43524d53d55d8a69e59b566a35b8c81186ec16e73106ee677e8c7029d62d6d83ce3828e1e8617156c266e39eae086896e6ff7ec4671e33429039bb25896fc2d29d66db622a553df062a7d173a7d074a5dbf43342f37ec960ecb07d7264dbbcd1116c18eebd75f45c1d1cf0f39810cce88fa67fbb87644e5c580f07483b3e7897b3450a8c997c286532c3f20cfe4c2dae0d1e9811f6b65b6c2e9a0e6351568e44ab04328bfe1706e1666603adf0de4c2c683b6b5406ad471a270b3f6b85fe5035a842829dfabffbb4c0a15d7ce933e9682bfe8af3c11018cdb9f8974f11b4f45d8afa0abb593d1af7992eda7b22c33395765db41b9412737b675be5c33e7606cd4cef96294ab144d92b45205133a92509f95d0c68cf430dbc32d31dc0aded83d375ceab2908b0518d948f4c0556a8a044e95875b725c25176ab825f2c20fe48f0bf9465ed464a1fb3bb73deae9ccfb9a13eee35e2231e378b8a5137bb4c3865bce9d6abdb05f9fcb45c3ad859ceaae0f6a05dd511132608c800bb44be1d81824bb3e3416af43f1fb622772d0583c807e58add2a02390e4a4435351ef6753705c83a63e699e43d9f0e164bbf239c0e5004c9a2d64781a2f54b32846ab2f1775597fb1cc55eab5517ae3b072e706b1f32ba44e103a7d64eadac5b093cf13619a3161ece7c3f491884af3845fd6d01df596307ef3db02fb57926e69d77f9d801b68df988c09d872755593d95865cfe9e11d64df40e3574f616d904f171665d4388a25716eaa3e894a9eab0c2c07066256558b72d0ef4f936ab61c8141e222495359fc5af675d55e95f70a5d6bd11fa5f9a83f9765a58a3ed81a45bf967f78fd78fb31179c5539960beb2c06ba639ee098373ffdf671f4e8e1b3bdffb937b8fff9badd391e0e4faefac3e17078d2e94ff5fae9dff77790fa5b6117d43f7b5e03cf9cd14ba8c675d1ce993009410618009fe40c844f6c70530ce8af118bc580fb3745935cdc58624fdcbbd7f648d4338f62b5a1b78d3a5cc8e1c31d33526d1b78160a001e45ed86541e9e7df2120c7e49c49ac1f6ce3a96047685fe647406aca74cee0d87263395213d1bb8761f3cf018e4d51552891acf6043f1e934f58651e701c37f5a363cbcddf94c737f2738d5dcdff9c739d76872f60d8f3444206bb23fa593f80faf92dc7a359f52dac7468e4186a2164d4c27b62ae92a31fcaa2a968ab88ceb113f6d7848eae7da9d5ec7b6a0c7ec2506db2e6bcf190cf907f5531c938e3742211ad378d031bb61cd29c93d0f59d3ba21558dc0cbe68e3b8cf19e5804b659dc840011ce88cffa64d4efff4194f9b218ab03b95824d9f4c3fbd77bdcaeb017e7f3e85778eccecd187d0bbbe1d6cd2676807eb7b7b1db08725375de8e5d536309e84e33b7b6735c96eaa73cafcaaa908b77f876c1983046fda39902c27c91c46882898e76e926829c78c0092f5d26f1005f45b99b492d60c924035b81f0380a37106f14baf5c363275cf79a9710c32d590eb744bc04f5b1de43225665552cc7152641b4012291c92855784900b814f7ac4aa5144c70c0851f99e1d6be93b25caab2ffe4fb7fffdeb3650199b7f04e59a3f29d79ad02d2b4f9b6541e66c4e4c247703e2aed49c4b907d90fd4d350ca8bd81127172d7bda29eb5c68fda9c532bfdbc9f7664048f6600024d1973541debba8b3af78ea98d5b6b3245a63831b7e689f263ec22c6342ce5d903e076805f19aaea7100858331349bab446cf047bb3d3a3918a01a5a2a544c7722e8bd3011f6ad98c965fcadf2dfcb3fe9eca56dbbdc56b2ef4842c47a9dafca68bbddb4239f51c5d8afd15942a16cd793a5ec4fd55ad28d8aa7b556532c43d74a36f5e429b770126df5b54507793e0442aab60e0b5b1e80908ca401fe2a4d4a538adb961aa02284d3304036170fe5ef4bbc9927d2360af3c87742bdbf24d8c00f25ebc3df04cefe37cce8ac0a3eca9e50df8e9f112dd5f7d7a3d9cc985626c64592569d9b77d6475dc0befbf14f9726110d9f29fc6ec968fd01fde1cbcfdf0e6e8e50bbd0b97d93c5f66153e1964855efe9f5754427d4a1ab2df1cbd7cffeacd5fa04056c19d65531102a14b343661407c4a2a82c06f47dd70d84564aaaa52acf2a5666fe32219e983bf7bea8b53010fcdec2d9f0687fe1daa5cc80c7d7a9ee617aa801538454e284599cc17a9e6a8e35416120e33cfdfbd8ac4415eead59ccff32c5d0134d04b825b528098cc01f84c09984c745f1f0b9a5bfd994f8414ecde62b4acc4586642a6650e1047cac2b3e34ab21e5efab0e1c1384a214b71a9d21434a150bfd7ebd9df0f1fbec92bf5f0e1409cb9193c436f158b545693bc98f7e434cbcb2a1983119eeb5a245e4df4ecb60add217cbef39075001eeeec1f1e76a11084afa3400e9712fd662c3595110fc5f1d9fee1216bffa46d5413b059f47c2eb3a45a45793125c9c235d39b6afced8fcb92257670eed1322d12af2a61f6b790690af33f51b25a16aa04bb35d638cd38b28b12e0c8189fbbcad4d5ca943e5fc962052f2353b9125932264969fff0d09b87f64c65635875008701a326f4ded0984d362fd04f2b178462a6fc5572886e834cc9b4a2e7a7dcdd8169d855482a322028bbfa373e7f2ce4f8bc14c32dd883c32d40cce196de70c32d834d93bca8832bf50c6b345fe8c9d01baecac5546f8ab99299c171359980bf935c5410220b2146e2e7bc0070ea93844d75a910dfe318454e78c9c9b604ba59492a01fd2c455e08ddc7726027edecececd7f213a28021a08c40f86fa4424c02571b0f698059596939d968ee9e6c6fd77271758c02fc336471c71b0371962fe438a956e2fe6703eb7a5e0a254bd54bb25ebeacceba548d4a0ec436a65c07ad39b0873835ae45435b07e2b303b38391396dbee6eeebf291b0faf9db7e7e58dd665f87d3f2b38cf574b43f8b043c4d824aecba23f69e8a3601fc912d4992ed7dc642d786d5edb9c97a4a3584f84cfebf1d14fdefc738b9405cd9fbfc99a50b1145115fa06e9819cee731c03f61c5ae59ebfadfabd65c4831d1c373fdbfc73bd38f930b57a7736d86cb582e66832007d86a27ef083d51174a7c27e6327144dc6370321340f30708ba27ce1c673d0bd254ec2511f70c924c21ec43c042c0c3753e9da62a161789443a9464676436fc51efc6b3aa58aa339fa211b39a26195a1b0fb75e1261292b3955917841a7cd59526252d707801eb3c16613762cf1d3d228516bccaeab29059f0b43aedc1e66d490d5d6e4a902e74de8079fcd1df64ce49a80032fd7dd4b55a522f15ae9ef4a9e133ccd54f234cd2f21160d51b3f6a5d2bc6f593afa7fbc2c15388c09f8dcaf2530b8381f97fd599e9f97bd424d54a1794734abe6e91f96a52277593abbd348f0eca1e3f9624197c40fc13a4befca63dc635d51aaea15fc3cc1d324faafc1cb8f5daa42270cb7d17ef410fb161bf8fbeded60f734ef5f81af7ea328f212edd6118ddb87d2c9fe926c0df63eb781c8d801b6356676826ea06167950bc448de0a8273c5bded4c73735ddbb71f8de72fea4d52a27da58ad7a3b48f6b88af303d2873a0a731f04a502840e4efb7b7e7a568eb4a17325d820c7146937dd6313191924a4c924ca6e94a949749359e291462dcd6d0681df95d87fd9c94e20c50e0cc058f40e3d519b8c32985fa34560b94447021e7f9051d8c704a1c81a1f688b8f80f9d18de7cfd432707ec160f9d5ce1362934c27bc8fab3a78d0f8dda3ad36a472c30ff4511dece699205672d67238711f832e379020e6820ff07a733105a49dc9110fa0cd657af8a2c4a7e0f834970fde6da7bf040dc63df51521e98d3c633ba8e00e0a099d15f0885df73a1ff524d2696fe3b292c8a197ea44be6a9384ab2c0611856f33d84f336c41e9d2b99dd5a6383e678b9c10d580d301e376b666f4145d77b3a9dbdcd5e7e4ae09a0a934da29eba8d23b1c7e8bb74d21f7de83a01e782a8a9835342f5810f8daa7acb96a94fd5be4cd391847707ec5a73dd4b368792d154552f54915ca818f8c6cf453e374a382faa6f531952832e0a75e1bb1c76ceca9c1985874994f9e081ab1c95345d7b6c92eb01f3b9673a9a209c5e3bbb6baedeecb45cc34e9daaea30938b7296573f01b1fdb08835dfd4fd79c73c74f7fbe008acb24e93edd6b0b926b006cedbbdbd3df6088f43319cfb33f55c5c0b2a6a58852907f667eefd97dd71944d4e4810886ecfea65c815264fb693682b0b7f2ca6b257e69a7d71046feac11eefc1d59508936fee01aa84d677c0fe76bf0c3a704826f79ac70db42f3619d2af79b1b9f1315f2db3cddc602565b404fcc19e80a0d215351ae73fc16c681591705db36b50d4edb74da47b237e0a6b4e40001c5ad2be0c9cea3661e797a3e646bcacbf3f69a4b95f808f9b90b1b1d580b2d4d79d4c971cc0cd2bfe3149d30fc8901ad79ce507d886fe2bdf30cadf6e6c6aaaaa2352370714dd24fbafc44904151c47224a6432849605bb28c574852761e81c082f054fdf9d0ce36038a4348dd125894611f3a2d2e6ec8916fa38e0ceb3a8112a15e94fbb5ea6659ba9bf592c5a8c22232686616a695caf9798cb5ff3c26179d873dac881efe16761f6003bb08609792318e0347a1da7ea5dbf1703facbb97fb0d01c0df94a7be86914d31e8672df655673dde8d6d3e5363bf6349cfdd0ed73bcfcb210fa7dbed9e00045fea146caedd9dcde12d837709b91ded2c01c3455e696269a2459fce2edc19b3c5640b19a5c831fd68986471e701fa862921773100fdbf014dd4ec626a7b55edd4f490555eb6f345c1c24b6e97c41556f8d9024639f41f8e1cf32a15883d35e232e59e1ca76c38f90e4e3151f39c7ab4d33523b7f3d267ae29999d98deac6ccb78e3b0121c6210658c352fec90f4103db8ddd1a55b38ccd237fbb41978e2c0974cddb6d5eba7d6e531c85c9721a155e0e8132eb3c59a0a749d05120ffc116fb7dbde697a823f4ae908a659659755a5281eabd3414e974be2cab53bd614a5579e1a12c0c7d48c48ea029eb249946e64ab8862a72a20e37a08bd765301f680c89448791c7b492391ea5541ca2bcfbe9f906f779aa0783b0cb2e867564bebef75edf49b25cdff5a68e27d9b4a9dda04a9e39a1f26516530d8e4537cdd6bad95f3bff9b5660e31a34cc60b0203527e9cd9400796f8d1058f256dbfd4f1a773fb170b6f91d17bf79cf9adda6a1acdd6c742e643b44d1a1ff6bf7847fe2dcbcc84fdc728006edeb7644c8456eb30bdcf1ea864de077d5ec811ae23f5983f88e228278b879526e81f9de2cdf02f16f98e9bb207b5dd4f004f40641c473015b53cb34c842b542d42893696e50ef34f16b3eadbccbde74db00505d3126c8b6635a50865b1c787891b520b2b0bd21c71bf5ca5e6d5daaa4884521c7a0f48ce992fc32a966169a8dcc6a9a2a4333892413952a51302d732311cee5b912e51242b8caca82a32b659c2b21b39558a80c427a343504eefe2f95698de4c9b19b4e232e798b6927c5db649b66af098702a8de6aac6bb0463cbf6b229ed23c54a0988eac97d99a166bee3b40730b70bcad644187811db1371bb0914f6ccded873bb9ace92b217fb3fba435dd72e08c3f9e106ad3b204b48bb7b891ac99c8a2857f120f97d21462ac2cce55f926af7e91178a58d8dbc2842370074cb1e78ec1dcfb938ce3972e7c811f10140e3c57571b5b60b3585a1e5a27515db17d13270a4e287ec742cad654c64c68d876cd7b6e8376e0d6c3a07a9b0e3537bb66bba5322cd03a6dd05bfb643bd8e4f78dd5b19b391633c5b843137bbcb475ef16967c773b0b660709bd631867715b27285de13b5fb2879ee474d35725f81ac70c2156a9d214d7368c9afee62c7ec9b2b69077ee5d5bcad339d5b3d5c626d426c8beb2aba1e5703b3617cb6f18a63b67dc54c47a1f6f2cb16928568cbba104b4c0361eeae01cdaeded8996d9292d5f9b23d334bf2c498956562a666af632d8024d46ebcda6ab91794cd1f59d6da44b35b0772f24129a6ed23eecb2e1756a74059ee4e97c6b04be4fd5a33c4b576d032c7005d9beed487f9b2112d434cf9c330cdd517fac58a1d1cba3ebc27a2f8fec7a84d42af428acb9ffbb5e0dfeb4ebf64f7ef152082c7f0578053833587646ab44e6516023cb7c134a32d256381b114aacccf11c41d4e2888ad19013eee59b8d8d96a56873d38d2eb7aee8122c660fd165d6109daeb89c25e399d7d52a17e0b4d41802108872a1c6c924191351f54d215134357361ad80f447689cc3f85192311b9d9defd1464780818b6f9f238c0dccc1ca3d9fb18f3cf63e9f81199cfeaf771f6b5e9f5d8bbe03d7b936bd09ac7784b59f116017d2ecbfb3d1ed895e31e6f383fb3b314beb724f3abc28e2b7439ec3597ee9dbe7ec8aaa48a65355a0c91aeac3c8c0946cf1589f93ace1d99ddf4460bf4b18eaec704b4146f52299cf559cc84aa52b21d33c9bba1311da96a105c71a1360638c6d6dab875ba9fcdb0aa10fb7022ba43c2363340d7b92146525ce00498aa5ba3e03381a354b558933ce80cf22f17c622c8cb11e4e11db1c4df64e955c516334da2eb893d3fd400363052fa09659aa4ab4d897699913eeafc499c7dfcf22b604bc775fbb18ba9b6e3df0180886d2723c238fa96e0f2336440693f44cf9bdd46c71952f5b106267821174a8443047b6a5499225a56e8aa8061fa807fcc691be0117031a937c64cb724ec834d64d28d06439cb2f331bc1d26c5146459e728373e84b59433a8606840980247ced11a95014432331301ded1a1bcc10772a4ec6842c4599d3cbee87fa0b16c5ef25f5cd238d4fd94b07a788c808c5646af4e4646e0bf139cfaceef3ac4fbf557c862711a0c6163698cfcb382e05daad9bc702e1de88c42ff9a5bad0fc3be1d3fc549cfde8bd80f0e61afcdcacd96c60f85fa812035c5970ac0f6724f6f61e9e21e9566517415eca95dde9e3193c93aa72720e905416569c4cc008b54a571c1fcd25e30d88f83293a35469124a7ad3da184a0e55dd6a1f3700d5f4791dccdb6c98a3ba91308307eb354fd23429d538cf62035f18d66248d7992fe9834d25c68f8558610c23ff2b5f8ab95c591a27459964d354d9933d3892f73600bc7058c3ee3d9bdb90c1d2770e31cd938b245e6ada701b689f0d2b37cbfdfdf6b6116ecc623de14930d7acd0f5bacef41c11209a5c1a8b5867dc0a2d9cb91af8ed5538dbe6f940781bb3a9d09ff541457ca6e05e57e2338ee2d980e27d756108ec133b6913ec8000b5689e98cb3f4a692f6ab6360b667d80cff8769952a6593b0275165ca0f95a67fce2a9d811cfb0524fec8881d8765ec0766eed9f5fd7bd858f7e3a4a2c2af2c78fd6015d710cc30ddcf0e321a4b6339fc7b1f349ce489fd2fc0285b548ec0742bb2b67c24a3d84a0afa0fbd29c468ab338cfd499d53e42783f73589be785665d9912d34282cd86df30414cf369328e88b50c1e3e14d66c467397b24ad0f03fd68c4a3aeb9164b28626787bd0c785bdcfa4078b218ed9de5361b7a63e52d3f302312e4bcedfb318ddf6ea9d3097c539b1642d65e091c895b5d074338088baa255c2b53ca82dec4757b81703cd9b1d59853792063f17fe825b4df104282b99b5e30b1273dea20769cb129e2a2e1669a2e2483ccf84fa54155240b83f85a6fdd09fa47c6e9939483b4baca32746d3c431bc739930a11f9f7d24a5c8c7fa04082f3351a421db5a12adebc4e567a205b06003f14b354fe904de15ac1f03a1195147f49e82d10c9bafbc2ecede66a2a495ccff15e7a93e3f90f79553a4cf1dff2a33b41e9354fc759b0e4f238d3375a75eafe962209fdd79217ffbee7d2daad109f7b7eb607d85c1070cbee051ec0e31a7e3de38d5c79982ce2122cec7c0c7a5d1d45f8b81f88c1a4116ee22872765d781eaafc96b4d92911b896efd94eed28343adcb30e2a64b2161138ca49d546f3f2dcdd49dec8654224cd4d3c5d300569050ab48d3ac93d0d1069b02ee2861dbcfb2ee11768274e717e171430e547952078535beab7bdf60fa5a8a173d2994fa4b9a8f640a7ea241806cb7a2fea9cb68754cbc40f142550a7c58282d8117099cabce4a954ece22c03503f250a5132dcaa2c6bf842f17ae166cb6751afd8dde423a5c08d04fcab12d7fb022927def688e0253ec3ec276dd28f21cec89dc00afae5cdfaeaedc1e6ab15bde56a78dc3ad05eed5f030d6a6f129b13f53e373702c7b06c79133dc34b22c21a6027437136720589f99fed937757fd61b3d19e3efb9d20787b713714a79891ee076b4136d63826619d3bc5889d7929c289878c50fafe93074648f45552ec6ba6ff854f2cf38bc527c1e9980caef29859ee4fa23909990bacb5d341fa5e77e048b9eacda519c4649892787e39dae78dc154f4ee80164bfaf255070d8562f6c684934cae355e4dd8e989ae460a656b52547e3d6ad4a9e467a1f36172524a1a2620f8f3fa66a3306b8cc7a6c70460261ea5fecbf3497befd8706454f4fdfbf7cbe7f74fae2e57f1ebd7dfbfaf0f42fafdffef4fcf5e92f6fdffef5f4d4288c27a45737bbe7865a708b660dc75be2eaea0eb523d359b488b797711ac49ac0edf6d15bf3650c0f2c5fb3fd1915321bcf34922d335099020119a9b1c4c3897fd9823a33bc6bb170924cb816acd59033128297e8c55261e52413b1ba5069be98dbab10ec8d2ae8292c8a61ae677824d3f95d112b198bb13e0faa34992719aa7e2e6599b59ce1d0026ec0f1a9a5e3d73a07a39b8f67329b923f170c451fd135d30b757194e769290a95264a8f5724953e6496b9b352b2d0607a4c30fb3857ba13282fc246bd04956592f9d3d8058d0ee949619a2d3c89bb412c72cd122e484f5d8ba8dffa9fd3ff6975dceab3f03cfdbef84f552493152a0b711df4e179945f283193a518299535cca28a45fbc5fecb56dca1466f89a56df383fa6383fe1405c7353bafced66c5cc87286d3de15999ede0a2cb8669261c54765dc022312148aa2e98ab12cc1e9c8a850f21c67580fc8987de559996b520113a63b63a6eb7aa3afcdbde6fda247b0ff12e988e910beae3632b77517355a429c1ff5498d97952ab5ec668cdaf83c8c6566063392b19827593249c8d730b9f84b32cd9eb40431849b3643c37651360b99a19314c6bf967debaf2a72a389e64916fd5a02eaf0170cb787c577ae01440c1848fa0b7d8cfa392fe6b2123bd1e3e809a4b6c71df1787bfb8fbdc7dbdbff2e0e2bb8447aad2e926a2633f1630909297d47e37c8e0ff70f5e1d893419ab8cb19257d9385dc6aa142a9bc96c0cf27529462b7138ce2b2d4da92c96e2c7527f45157c4599aa9edac7f97f2d9252fc35bf94a9f8719c7c9205f841fcffce8ba48cce7532dc8392effaf1582d2a2de1c4600228c55c96e7b07f318974523a1599b1e1e2524c6012f4b6ba5045c9d4d3d3448f3ea65b2852616b58a13ed5dc60ebcc7e95cc5979dda0575e97c1698f745e69847bf780df3acb6f23e723c4aef14c3263b3f0c49e7055832784557e0e4acc7efc79a7fbddf5d51cffac56ed6783d5aaf3ecaa7dfccbeca03caa4e3ac3e1ceb3abe3d7697ef8df1fdf9c5c0db78eff67b875f270b875d53afe9fd6c9c3567fea3defd1e3fd5b9e290d7d381cb59f0d8edf1decbf7c7e727cf8e2ddc9d155fbd9e09d841bf62b780f2293ec6a5f655521d3ab97e0f03abb7a5ea532ab927147b49f0d0e2b99c5b288af5ec8559a4c67d5d5bb425dc82485572c47c95c69987f3938bafa70b4dfd1edf51e9d0c87f1e7efae3bcf3ac3e1684d07f7d364a13b79fc3fbd47c361fcbcf7df2754d294364ebc151ac396cb85de6610d29ce615158f63399e81e389225f4e67629ce68ed7589dacb398449444845c56e3ae98ce8dcda7a9036dff17de15b52aa3bdd4a5e99613ade8d15d1ae89ddb4623d9fa70b43f6821a231b78ff80fec4903c53550ce1d7d48384fb2f8ed04fad7417a8a4e75e18c71af3f1cc6fda85265852502e36e68700ff06f97a7d35b592b54856f36dd2795843f5757c0355f18687c08ed7bd001b035d194249f40b9b04304ce80c14eaf6f5d4f4d52be916f1a47878c5c9ff68991bfca2e649ac4d04a6b03589a16722919eef663fdff891e2d94bbbaaad183e316118416396af6500454e8a25455852f910045fad379652f0aac07210dcdd545ef99e5f9a126d3620f0961a93fdadb5df11d1f103c397445355a208a51af59fa5f0e8e06ad66bc600d7ce707b1d3486d8da45d7243b34de085de3d4df5afd72e095ce26894acc6e299684d55f5e168bf2506f0b3b5eb178c09238f4fc523d1d288d43a6987c1a15e0485560d65e65e99833cab660da5565ea99f9769fa5f4a160d057ff10afe922f8bb2a1d481df689269c1a6a15ce9953bc43bd78672af0378ee82b6a1706ee7785b0c906fd2fba0bf81a1d1a45455add247b127a6aafaa8d4796dc7424019cc7f21576f276b0b4d52392db99b0efd2f1ec0ff5d2f0d1217326ec79d2043e7b0cd98ecfc298b6274915b1ebf38094bc7830da5c523f147bfc61c3a33178fc48e9f3e371d82bc4e90396fe8d45ca31236343f09cbcfebdde2e5751b8ffd4aab95ee01d1ab5587f6ece34e5048175b79693318d22fe2dfc4ce634d1b761efbd93333325ec407fb0b82f0d37eb1f5fcc20750f8c04f3b30850ffcc225142efdb4d2142efdc22914d619afbbe2899ff7dae61d409c8d7c99c5edd7a22f76b63b7ec98ae6e3473dd867b565d06208aec2f689a8af92cbdef1d7a702b8b700fb7833d8273ed8a3dbf6f6bbcd60bf0fc01eddb2b73f6c061b6c9fff86de6acaff0cd882a6de44ce8996b719c7ed4410f2a36d243f701775dc6a9d74a245be68776cb4142e1a7645abe52f680e8db673f114fd97f780673c6a75c42387109334cf0bfc2947653bef88bef861bb231e8a9ded6df148f09c7f133f00b3f55a3984568e5bd5acd5d50298fe1f2e805b45dc3a398ef5e6d9164fc513a2ab6d4cd9163d4179f7f634328a87f4edcfdc4700ffd14b7b03696f18c30c240d12618187dbb9d24708fed80fc3aaf834179978359ee9733f50e51afb36e2b1ce3c86b227ebf838eb48359e1165dae9d22749b33db1b3ee35a17d4cd836af254369cbf10c2b760d84ffaf15c7b1a6ac228e810c6a0275703028cb16cd69ab9ce5450592825fb735efc7fdd5ca969bab3859ceeb055b00bd0bd06de134cfa60d30a170bdf46499a68da535a7ea8ac63ad06dcd9dc36ecf060707e2e828e877bd24141c94252fabbbdd00939715ff6d4b2765ded46bd1d21dedcde7bd38e6659b008b566d3d086aad34833a1cb68e86435b35e7753f54e37a751081d7d61f0e5bff3d1cb62c14f5699114aafc45c95815886f00aa05ab41f8e42193f86f501b9b2702e0b54e1f8d255a19267fa3b7d440e4ca009535ed74986cc4908138363ba175b8cc344539c8e1cfd152e93f1f159099a3d952fff9b948f49f4359b5babc5e2c5754957e1d2d55493f3faa38b31f47b365617eff5c24f4eb5056cb42ff4698863839a18477f33f24f4ef6735822665a1ff3c5f14f805f0fe0347f21fcb14f2965368442df49fb763a09e6ff20bfde7851ab391fc87cc96b25811f8c2fc3e90c57846ad24a9df8ea28656d4d21289f3a15a5470e3444de6f4f34d7e61935fa831fef6476df91b1fb4d415a0ff720e3fe1ffe7fabf77f0eb007e1e18580e4fdc737f19b72f64da15a9ca6ca08fd41d432f648a64114dd9f4ff5757702b2ac4e52c4995d0450c45fd918131805adb2df148ff76ba6ca2cd98764d778da0f8fa8b427df6abc3b7e24f3f6cef884ba5cec9be0f9d6ecb52c5029d2aa15ed07ab89c55d562d0ef576a3c1ba5f9345a14f978592479196569ffbc9ffdb0f3a77ea62ecbfe45a22efb4f9efcf1df7fe8ef7cf7a71f9ef4f7653a5ea6b252bd57876f7bbadd9e6eb727b3b8b752b2e82559ef577921cb71912c2a70f8eaee13f13e507cc61bd46b71a6b7d719bf02149fdfc000ae4951c7dd36b983895542bf478f467ac5991f6f914f60e31aed1d0661353b27d45ee8e3933912b63b5d7ba482c3244f801a9d8e231efb786d1293a37ddb00b81cd5b3a2cbf98d4725c109922d78d113edc6cc555b4b443f68f9e68ffad713d6912379ae04ed3df15d3513b22403097a509e64881d3ba25d2a87321d33436097dd3441f59ef0a9324a8dbbcc87d7949d0e3fd59f8d86bc4d930177de5a468a49b3d92be545924d7b1a4b7ae84c968c98540c2ac8715e146034001751664e6278955a1b7f78d2163d51eb60e369bc8e08a05f6898624cd790e3920d0c7786466e3d97a518a9ea52a98c00bbe9d64342437b936486a4ebbd482613b1278266c3516801bbfda71fbedbd6ff1efed10bd6b263046e94ca0dd04e1381324442d32555246351a845a14a63a3632e01740fe827e1c9438dab7a41902576ac1ef88f988c3c1303247c0be212a83e5c1ca738bf24f58c453d988c64d286acbd3de6280c0bffb146bee3fc329c9df3248b7bf9448080385e56fe20d064c2ef3cb2995ae749bf7c61ef30f4f100f849e8788300b574628b3b45e535ac4ab956cddde08775e9225f83b8c78c684208ae5808c0336d80a1d45a07830faf65332fd75195e3dca02f635d1debd261e64f5dd1dbe94455fe3abf54c5be2c15ac21b2f7da2828d498fff4573c784019919cbba9c1a476a3df06b3f456820cbcae30d767d8b0bd6f6c9ac2da9d6400d7f7c086775a91776d15561866d71deb1aeedb8748b2c1680996fd6ed978e4590ef189eb9679bedc552819bfcdd295b10c347e26ba1082c40f78ee5682def7eb3f6f5c31e60ff9d8649df88e0d034721f8a6e198da3cf14edac6c181b544c0c0bd3379a1ac6dbc90e26cb8251ed99e4014310c3b004f3b20337319f0dd1e6e5da2f70230d08234ea0215335f18be006c572ed122001c3c4898b61e98984c1295c691186e7510f2ab0959d0ab3436b7f72325e64b88af0556f8d822adf75fd5aaede6119a67d0de5633555c26a5eae2a3b87a5fa3e156a7ee1065c8c3dc138239df8dd938cfaa224f53155b8bd0b64bfb4f992e55d9152cc41aa3d95e707f5450205788ced5aa0ea6134df2e2a51ccfda3efa70830d19c716fd1d78cd8926797a5ea279899e398aca85f609f43ade56380e66b4730281945914dabb5b2ee190cd84a353763e3ac073a7fdb967c88dad115c49527a5415c9bcdda1e34ae7eb025ab73ed8f50414eb89e37f2b4f06f820586f84b37f2bcf44a6545c0a29f00ed0f4ef5cad707b2499c88b189fa082ed5152313cd1705b1e42e0e6bf4d606cbe420b0a27b19eea709cf33cad7852928588281e22785242580746a57c42e64854409e9ac131bc3a572b1f9455ba89477a32a3f14c16cfabf6b6e6881f160bc31129b75c8ecaaa68ef9038672d49f3c50addcba1f5cace931e09725df1b31cab519e9f77c5ab6c8c5619cf3525d2c5e15da72a2ed0e8cc8487494a0aba8a465749690c5b6218285a9cff74f8a287ef3829534cf26516bb47a70fc5eb57fb2fdf1cbe14137dba262370b0aa8d132dd1e7058995aebdaa500a1e46b0c7a5d342529c977c2216b25259653a4fae0d78c3e2ddf3a3976f8e0ebd46e188631b756626e13a8d65865634efd5a43d0e4242d07addbbe75ecd3e78e09c92d844df10129dfa9907f4d6bfb7aeda900c8ff0e4b8f25c605cffd3c4b56562c16995538995467b594c3be233d0427c0608f9c91c0c07752e0672c6e7449ddd4026852a40cacad57c94a740c674e2c06877f4b6da45d1d3ef826922c916e0292b81f5e4821de410a5a4c8c55b18617bb1ac98984e5d82e45d6264c91c426b2f96d5f121f42c626d9eec12bf48e6351906ea17e4962499a368ccfaa83b30dc22d20033c27aacebf9fdb5bd2b54b9cb2c309df1c670ebcf7f667d13f36559994a12fa80e960c61d418bd7d6cb0cf4881680d6483ca3a917033afa76b0ff6619788462e7036b59aaf76ad2b5e180fc38692cb2243cbcff502569e987a10c6ca597a5fa10082340b581b9760de1a52fdf4d1a1cb925107a0c918e7d73d58345630667a7b6fb2cb0116fabc342c8cb4a21b83d57ef98dd5095ce29a2cbdf3961cd2137420f364d5ddb0d8623f6d8c022b2cc4345672d19ccd26dec7ef7d2e8d504d0225fd8003fb80e6eae35a3e7734f153543a92082967d4bc0e24243efb164df9dedeed1081f3cb04320affcca0dd79b5f235e59df875e6ec339f4989a78c62671c09ae8723c6592e685d7dc3fc583683da316d58dbc18bc8d866135bd8d66537ac1e6b22bdc19eba416d3bd61178a8628c1eb762d0b933449a63ebb0d4e063a3f2a54bc1cf3733d3aa7e8e299c93b4fc25a112b7cecb9aa3c2d60d35355776ae4884441628e810e454c8a730df19b66188657d196e3c50a5556b70de4bda16536dc93682e176d9fe5763ade7069f528da35ce24eb9e3f354debb9b796d6968dc4d63b98431bfcceff8251c410e8b1777def8e4e8d65774e425f9b2ec6f87517e6ba2bda1605e0c8e9e2903f665320f6b0573c97775fec097bc8b025ac47011caf11d7be4c2ebf8bf8cdcccdbf99e06de5e2e6801f5e70997e1f1ea35a77f718da3f2fa2e98bc39fdf819317341d16e572d423a73091615426a654bdf6ba884ecc0125737b6994bde8ec52596fc6967dac511ef97e731928f3e4a27906deabb14a2e14f628539faa2020d317ce48bf2f3e9025b3ed53870264c0795a65e06ed844cacc5ae0470ad776ac8a4a269950f154c133138419c4d928dacdc1b0eebe1076d83cbe96ef95f0566b219e51ea8045c0a2d9f82941c7c9c32dddafe196de03281782c6322f443903b787a44f5385995b18bbbfba3401d128c962d4a8dabb9035816d309a111ba875ac4c73c79e30e139c0c430e28e5277fd02877ca661e4dc87b3f1b36a1bf51c3c57c6ac9bbac1334f4f4174265389d4c40efb399553df44785369e6cbbe31f89853c4d048bb3ce5d04409b35e1e6d74c8cf0d63b4409ac668e179db112e93e5b8026f4697529f5946f9b212e38f07fdf1c7f7effae38f1fc45c55b33c2ec54869dc89d5a2506359816aa3df27172f133d2db4150b55826faf5201c8249b9ad0d39a2e92cf2ebda3a261562784d1e9a901f2829a4af2ec23027233bf967e7c497d5c8d5bd6e4b61179ba9a2469da0ec35c923a9674127b62bfae92d86562ba2b7a7525ee6dd05ab8750fde02eecb0c1f569a2ee17b67661ed0ea84d74f040acfbeae876b0304de0bef863c00aed76b90fde697acae13bcabfdbe3e34e9b13a5dd0f377aff0b90c11bdae186e2db3524ed4704ba4c9448d57e35495e232277ff6f858d5700598343d07323337b0a5e2f53468235018da691fc3aa95b884db83cbbc38e72ed6ecdd749ec2654416eb6eab42b4777e889e3cea98476060aa81b749065940d4b07b80a4494bbfbd121cd93716c4690f8b307d875bb2fa365ce704b8b1a3ad7afdd69aeb3ed7e6873787cf7f7e79fab54daf05d3f21f466f1e339fd41bdb6f5881d65a685f36115fdd9f9b80de69764c94c21bfae1215cab01c297cdc517b5be1e5030f2b5b865e52cf3707ffd7caf2fca3a650a79840ffc539b3e52df1d2966772e9a33b88c4cce1593833275f97c9160752340dc9eaeefd5e832fec3f74ccdd26a8795c3c74e8df24da7c502406896454a53639ff80168b648d5548e571ee1d62c2ccb19ed06118259bb2d4bcd95eb6c211a0eb3e1306b8947ae87fe0cb38c963e7c97c22bcc26d32b395a56e8d9569f94a5098cef82c6d70631f0c0b637a1d833d11aeaa22df1a8091507a2d5ea34035b8b8b4366eade083eacc92b6c68b001a39be1b38235702d5ca4a399f149c096de5dcd63e4c63812af95164dc1b11fcaa7204a9270092e2106e192b74c74fec9289a2b7abc2ecb5536ee596ce8d9567b10b2bfe5c9da56fa4009f9c73db1f343f418bdb66accb4a74e7017b33666b291399e974282c420e19d0fe845b59c8db6781fdfbf43276417f9399e5835661368db4d03eb0d4815356902774d32cdc8fd972fd32413812766f52929c9c72ea3c177261496866d16231a741dbb1bebf9ac6fbda2e06eabb48642ddb03a1f1a16e50b574356ae26acc5e14f1fd62cc5cda2f49a95d8ccc95db8e17beb023c84e70ab69ff665a6e7d39e2fd692fc9050c3d0e31c5683accc1a621c778c5f3ddb71cb616a411d6e90529ab40e9e1eb63100f3a609dbddd0f22d8338bf3347c55b1cf96dca5cae46cacc3211272f1a079c2b1cb3247723225f1690d8431d0d9de07759c557849e0b7d4894a234fa0a7bb71427b1a95dcdf2e57416b1da6fe17c63319e2cb0c05b08b46d9004bcbaba6ed01da883f35181f58b6e0f55c062945733d4b6a10b21f459f0ebb2acc8ed0a2a12cce96c0cae86875bfe446d75591be6dca62b6aeaf07df4c9f51c5df7802279a484049b1e7541c67dc32de61b8c75198580b063c3ad353aa0e6ee4c55d5b3b38e3db0b7c6139996abfa6c1de6c11ca84f8b34192795d8a4ab329a995855aa98ebdd3752337991e485850d0acb4063b5012497103795e512a2b7402cbc607da3e095bd86db657b846d0edbd50e8b0a165e4b724d827fa76609d8351a80da0c739b26cbf046a6db7c11672fd0b5f0c0ec457d50be0998ab14d870ed06b6a85df1d90d62ed6dfe6992cd549154dcd4a4b5c6d2c42bca60bc73767d507d51e48b9ea671252b345dc6943d5dc62cddc860985725d9aa4749cee0f5e0f9ff393d7cf597372f5f9c3ed939fde9d5d1e9ab3747624fec6cfff1c91fbfdbf9d3e327be560d37ddabb2fda92b56ccbafb13b0bd55a834fa04ec6c1bde808bbef8443e48fa62d56022ecd5f9241e3c102bf8b95a734b81817d2e5456bd9c2755a50aefe29a5d006a51e5f8849bc2518b7936e0f1e6da614c397b1357468b65390bc3c95d13f1c827130e6732d900c8dda8951146f56277bab3265bde194c02557236ab6127a68abb4b9faaaac1f21be627a8577af54a55b5337549f799e8852dfe29a94acfb813ef314db9ddda64d58d57eb13e2c68759ed8b7a9b0da31d721b5db676e90a8247b9a051de8dba6fcdefca3cb3e171f075bef9aa5f9600b291c617cdcbfdabdfb17985b65f9b33b85e3611a6ee431308a32b4ef7f3ac5cce75b20bf3c4ac6028952ea35ba7a7d88f1e1e9928b7a78f76d3650c0693add353ee26ca348bba87fec33f9c9ebefbf0fee5e929fa4d740b745a5764fb04aced62649d06d1aa74610bc9140b5d519d7a81332984a5d863c0c85e03d98bb5f78047fc5497d58c14ee792d52d609c1298b7ac84c3a18d69d32907e0c409023c59e1d48ed5ac0462e9caa6adfada6178839c8aa4d46a1266c2e4c9fd03c032eeb0b353966ab7f62783f0dbb6b40082ff4a60998bbe1ccf605b7bca21e6ef2c29a28d9c2916f3664869aa7b1310f09eb07de5c0c3d1135a041414622d824621f2d8332ed762ddcd0d7130343de854d8ecf979a4a1b0bd8865d1fbed379d658aaa97f62d0cc8fbd417e99413efe23f6df6ef3c13c686e143d83b1825dd16a1ac840bcfcb450e34a619421ce69b4680ba2bb2650ad273bbd51528924ab148496784521e40a44bd7800c51ac9bfb749ebcb7185ab17ce112f72cf7b1467fef11d1521ebf3f06e0d37120d6ea7445360dd5b4738f583e6fa21456b9b9c8a1afa84d251bb46932dfd621ca7326f50da8d0cc9109fa6bc901ab168727810e3a1e31a21706b52c3f7eec0971eaf634c0616674c8f1b389329d7c8991e87ace9b1c79b1edf89393db657fbf570925460aa5072685baf7dd7b51e447956575fdc289e11d91de11b07a25706204fbd0a768dde336dafc403bf89a64d64c6db183cfee6410bdf750bdf4c0dfcd12c946866da8fe1820617792dd77efc5b70c7861977a48467ec3a6d5ee2e788bd00826738747555cf25f57ef3116e201a9a0d29d3634f556694c28d9a32cf104e708180e882471f3c24595b2aca330461f0dc7b92b7616e1995fca7985cd0755288c2753846f9df7c8a27930d73dcdc6fb34d038196b6ee97f48f73b7c66e4e3d178175f9cb3c5d6667ae9bc77107beeb0e900d1c181f25539057ef385163ca86fcac63ca963c8d437edc741234fcb829ef267ebca65aa7410d6298f5c0fe22dd800130b0bfbce337bcd3c862901b1a1e60c333b0dab9799769fc8c2e0e80786fbeefa23c53e57cad02adf1edf85d946b9f6908076a9e17ab5f92b2ca8b5597125fe76887d61529fd2a9f17eae5ff5dcad4147927ab995511ceb0faad757454c89f552c3a4fb2a4d7a40d60f5c207ef00de7bf5def8c46ed33c5341567721abd9510efe931766226535eb5579af80446f3293f23f659ac414770770dcd39ff6120efb168ff7367576536dd6ca2c4f4a905e92b1990148ea657946738b97bdf410abdf17476f5fbc1d88f7e8220fa3e3356d803c1b8307fcb1cc842cf5062284dcf9e191d94058e38d9cab263d423db79df92fcbc7b692effd00373ae57ad62a7bc29aa8101d18dbad796d35c316ee300bc4f3863e0db7dee7cb4a15c32d1bf7c6ba425f2c47693216cfdfbd82cb91c5129d18d35e406f50d8496b8bafdb47800dcdb3b3014ce6fd5073151c0f105057d44a1349c67c60d6cb4abdcff3ea003c19068c9ae7b5358667fccd8d4f5005ec8a81186ef5d90dd3b248c32470ae520e3495b74cb57cf9498eab81306dd023c4fe706bc8af54a8f7b68f388c86f898bee2cdaadd82d9f0af7600867fb439f54c96ed400de11b60ad88963532e9a6cf369c49520a294649857112671021f2a3420f1510265716954821a62110c6bc103eac7e9f4e25a570d13b20988931e4b7c1275c446299adc48fef15be05795a5a4841c038940f20fcb2addb25b3520a6ea1777c7fb12c6710d3d902823228e1810f798845347e710051cbc0dd9591264c3c0a0c3b5e76358198531c6f0d69aa2a21d19a81c6cda3c6fd88ebfc9445388fbcb58d4e93f280426def61b4126f054f170a1e1a18dee5ec4fb1148b9a8a548ff638939910d032c355a2379a6ce9219929ffcd383c9150b71376b8e96cb9f668e930cfc70f120a3b37e8f3d6ce8681d67828add93bd4d4c9d7ecc9ac51251389098fa4a1b6f68e67b0fa6a5b2b784f3a0fc7e8d994ac996037b98d209ae6c3d1a4262df49d8f3fb6fb06cf3ac2fb240617b479b3c84f0bc6d93549236dc387dc4d879d11b379074d1a3a8862b04cd3ee90df900d38bed1def0aa535a77edace381c324b272e00877b08e73b51b2a4796633130defef6bae6e584e72c7fe2cd7c425fb404d1c6a90df8ec46a5b5efae8596ca6d1ae739077be016c31d7a20882f66dbb9dea4a2c4a2c10c8415f838c33d7c839551dbda47705bbc5b7aab317a7a0bc3e00ac8020d2824d0cdd318edc0287816b10a331f4ff5cc7a6e66ae430f700de29a741c078cc53428553ad69464620e47235f7ac3e3d23793e138b8f5929c85ca8bb73708435ff8b4ddbd63dfbef53bf65bbc61df289a91fe39cceb8a635d2b78d5de28ba59146a3ad1f21bd3e065e366d6c6a77a1d83fb2aa26c16dd595278a43424a21b09f52602c607f22dc9583841213123d1f3655615892a390dc280925ea95759ac3e79640fa3e963a1a9aa3e94aad8cfb34952cc8993d4a2ebea92e76af51a307c2dac753496cf5cf3da6f9667da5f410eef3553be1f793f9e92552fbe0030384f2ee972301db641ef190c700b076ee6acaa8288d7f51904205232d6271697ed513859bae2d17a3a0ba155aca1f1d793450beb1634d196adedba1abdb9c555571329b02d7c6b4137b03dc833c8ef887a1a3fc51a4792ebe5d25b9a0737b0f25a8f48b72e1a12c33e31d3c9cdddfb3ab1d976024b845dc3d45bcdd7adc9b77bd3ee93568b18ebe9ea26855191cf172eee55a90a731ecee445329590252fe50a75775294e342a9acc1b3c33b80046e469802cd440745f725117d5a86a213efeba3be29a07fdb5c964185f6f668eb8b67185375e072b9ce6dd301c4dd68c3b18251cf717018bf67d4745fe50c11a5477adca325484d097fc4e97a2af2655526b162a22052b89b7c188226012605fcc1e1d0029d4288396649aa591e93e7485dcba81646693e3edfbd51666074d18a0d44213c834fa433a54a279ee601c26b172a55b2849869d09b362106bba5ea3ad8b8d53de0443c3430bee5431d8893f10d22ea35338df93a0bdeb1b66f8f72cb3e735d06ef3e9203bfff445a364e4fbb693aa8d581f9e18b5dd613c5dd6529b65de97a8c9dd832f576026e318f03918715424f6e14610ff1bb4926d348cb059f519e9bc37d38b623e30b00cf9535760f31238dd3579bf03a99271598596f6f6ff38c7da2f6dbbb355f1d490a9749a07b6696d750ed58279ed8edc4d2ecd3f3a9ca5421ab5c13727e6713116c84cb3c1fb0fefcc87a6d51813502b1da08fc2ecb85da8f1e35bc01e0c5994fcf773ee9a75240e0c587f7af9d4e9c48bdfe067d2b28d255a58ad2d17dcf9d3a007213d825d53b9b4880e5c8b79353211d35f0a19b0604d25c0b738cb75f7ff8b62d80aa89b74e18d4d7995ae83aa15955953efb608878b69b367050c62717453e2de45c1f0ec6e0ac04eeae24f3cb59679b466d1e324ed23bc5e6ba04b8a397682902c887905fe53e67054d3ae5e9dfee6ac4655021ce59310af7c065ff73b1567b13f1c5cc159e37b813bdcf27d7e9f858492fbd89f5c29c3f336dc0da8881fda48b105631751a74ff72bcede3c933633bab712274afe9edd32aeffa3816993d3bf01d9ee982decd9b26118310985581ae816ab89418882aefc085d5472dbca0b08be1beb57489ef7e691e69a6fb7df0346e9fa15aedd87caee244562a5d455c2fbfee6685d8b6bd3009add6999c14de407cbd1ce431f9b53df97aa9c778877abd16639c4ca45722b451bc5733b66873705d1f39acfadc17a5ced56ae0f5223a572b2625756a718fd74d48a34855e51a8bbe99e063e84593b0a277e61a614573c9414dfc3141a9f2c14de21395afe9c54f3a378a3cf7779a851e486f167b206bbde0737f873877be80c5e79c48c3f82b6864875ba0cca13291ca62f68561d47982ca4af0016cc524ddc43ec96c349063031e0238b7eba97aa0ce2b9f8510086541ba6df15cadd80335f4910cc634be9c4683d7a5dd14b02ae532ad1c52208801fd755abf7200fff343ba2febdddff1a4bdfb3b9e1cb4efc97cd8684de0bbbfd328f2d9d2ebe53db8d76a90f6aa9c64bd46e10e6a59910929bc8f23f03004539a64359b15086becc93eafcd38d6d555f0b4ccb4db049b73a881c920125153aab97af4abcbab832b55c261c00b2b5351ea7df5498e2b5e0c126cb930db946f94b1bc32f5a66857b1b63085f9830e0ad82a1b9b0ba0b874b369bd264d22f3315d2fc6eb6e6ebb9130e03e35772de6c0e449f565dd532fe0a78abb829ddc8c9d855ecb070f704d91fa33c7e68cdbdb00ab2aee78d151c113b693c24e19c1246f0b21f9b478a8b27820fc35c5291f887001cd6c0cdc4fc3db3c27bf44b7782f228f0419321416d269de40e674a8c0da91faa4c6ceea8a2b98281c6db3226959a41093be1acf7c0fbb70435f9a3c1362b6c3aa921d1651616b88b52cf892e0ae79f040dca3e24d1d69b60df3b62d1a10211a2c4bf4ba003d3305c0762c38353e7880e323b411cf287da09343d0842c629117150b73f6e1fd6b53d01a9ed10f0ee172a6aa992a843e4ce6155a2c213c988174e5c686066d7a3d1b76829ae7c0c2ba68f21b489cf3fcf85cadc08196f54c5c1e43491e2bd8a0bf9ae74c2ad53cd823a678c2abfb3d4dca97f34585d6de85cad6bc18262d35e5456390905d5108b25603ad2e646aaabc5017b63c99d4791440e39879496dcab5d9fdebddafc72eea5ef2cdf91307a5627166b3ce5087a291e0ccb47fc65fb1dbb04f7830c52f40418d683094bde190e42d487fa4f110530644c974d2537417b2ca97c224d179188cfe6cdf2419c72a3cbd68643bd34b7856bb50f31e1992f18d2f5834684198705126d934554e7b648f785cbeb046a8ff3f7bdfc2dec68d24f85710cfc424a5e6a3a9876d298ad7719c19df6562afeddcec7e92d6069b20d951b39bee6e92a263dd6fbf0f557814d0dd14653b33b37bbedb89a946a100140a8542a150f5a57c5077b8a403b83fec820eb07ffa25bdf19f502f70fcb70f9f6576218aa635bdfc39fc438c2f920c9f6e79a9983be86373f3d95e79fc39ec555c0ae90e47abfba692e6b27e9f7df71ab2547ccf78920b3ede18b38615f8c0f8cb42377be220546bd9aacf1567b180c277c03ea98704b54edd575a3ad8b173fe36559c0378d579b3eadee66c80371daf31e8d99f4d9324563a3db51b17bd335ac13884b8b026a48b076c9c6d28b4592f14143f82ede825bc1cc018863c6542ee390c5c3a182f8833f0866cb3ea3d4cc00af454804768f1043caf5ae8d1a062339b4dbb92aad2ee51f7ef9b66748ae7b3ca0b4e4220a2b2380ff03ecd63d278410265c83e8d949a2b0e37ed1bbba0ed11ac712d29d04cbeb32cb8752bf657428784ff685b86d79d3921ecf1b88116c627cb54574cf258cb525300337bf22f3964ad35b1edbe9e5fdcd573574fcf9d2efad26c6c936f989939a9f1a2684ccb599f9813757dff11930fd6b92d29e7f314530a42b6211b8eb705311193184f002da04b8b24258c3170a24e4888fa92a98daf6fccfa65c4222950b5afb5125a595c7943682d3f9f602b0461f762d2f6613a6662705534f8a89143676db7f559d52dbcf05d76ff218e6975af46f5b1d0396cd4bd2e9580de3e8fab69ab0263a7fd7bd061f55785f57b270f600e2bb6a626bc6a1909e53437ae68daff746a208bdc420a04ba331d74b53f9e08347be25d07573fcfbaef9f3fba5d56cb1fe4dfee10c9a8ce9253ec0d90b97009584babeeea8458508a29a77738d4d25cbd529092bfda59ce56712420ce24eff49824bcf2ae4d36687c49337671cf3c2aba87a257d2be9c89d4a651ce52c132b8125c8e0af17e09493af10159eb8b70d0370dd4f93ce2b8a47148554b1c9236ba4a154b3979c4cf2094ce98c5e5ae84a98672e3e3f1cf828fe374fa3ae185e3ee42ccac36656c9d1b05fe895689ba067ee08590e79bf648fdb0d784e4c6e01b5d6a8c7ace39ae2ef556e5b2d1de46fbe3b2c8f759e5e0e5de17dae87c651e2fbe48e7e5096a84ae628d1d33375a95eef5c026f76202b0262ecc172052b52595fc5736a4133f371007b5f15f5ffdecbf3774f3aada83bbef7c604a4ec8db7de7c2d79f0d5ec6d15f55f842bc1ffe654bfe77ab137eb649433df4f9b640ff9deff0f5ba3163048cf6a6c6a4d1b0f64cbafb5a435a992dba895889843c0e9204944d5fdc335614797aedaabc0023155137c664c618989747e5124486924a70ac5599390d03e8f060811426bf61e2d628cbc705203253a55f02836b8676d851afbdd8af85982c1336e7719a6c60a714053a93a5634003315cf2aef5f0282291f23cce0adf104809fc05ec8114dd0e66410afefff97b2682ba8791435fa2a3d8d6e7c6f429534fb9c3893759db8aa28b7b2f7f7dfd577b82baa96d4b477cf802cdbd7af6f2e7274f9fddd6e2cffa8d759d1c3127cb4ce5b26dc2f2439245579f8264a73760943d9bcccb960ab41bb5b4e19143ceaab1afd6d64740feacb730cf3a67364c5bab1e9220a0b7c4ea66a30eb0a1233638876b50a4be6368a1a881b3b569277ebff1ba10393e7cda228744948b342296675d4aacd7f5ea90e7906578bce321c20b56bbf5fa0d7ce283126fce873b4cfab061d687bb4ffb70e7791fde32f1c3fa991fee3af5c3dde6de8035f5c2bfa5d0dda831ba3780fed9d1970849fa559ad460dd2def2f4112b0f38b7b9ab85293b9b817e990ff817300b9f492fd1a6758fb681fd8f2afb9a0e1b9edc7b6e38f41a45d9346ccf609a743e53ab7485c70f210f2f2c54b12ebc59ad99ad4f8c645e73845eb87af66f30bac2087ddc901503b96819966279ee27a716f9a5ddceb10881f7874550725bfbb903f65f99ae7e33a605544e1317083d33ddcde0c04bcef710060e7a2f7fa3b3d16aec9875c7d3fec3b4b7bc100221afde0a6536b09a73bdf973488fb3baa6f17d73cd3e8dc19358534d866f3bd9b0b282547bd06f08f7f09ec9c83fe512f819db3c18e2f81b7f829d8d308e4308bf3a23477d61082015d6f0a37e002de057f89a30920dae55002807f98b302a2ff17f556a8f155f8233c15f405ff3fca55a1de514119140364bc5395694776d0739252691fe82af120ca0c4f9d9dde244ec7360c70bf8fb1bcb4bd40c1c99db8407fc132633c49d0ac6f4d9c3c1db3b5d019acd63c2d09c63263651e4fa790ee952df139633f17f8a21a12f5ac33bdb4542e2cc557daa44eb0591b3e2f6d6259f6ebab9f0b721f5f4f11271f81bd96256c25bf559e862a0f119b521cb1bbd78faaaef75a41fb5029df32e7a9a8f666d585d41d44f202f936c9b3b953573badece43be2b88158acde4b0cea1049bfdf7488c789f13731a517d431c451dfb46b815ae149969a056e5879575714c7e9a6e29242f3b8375d96e31afea2ca81918c770c8cd47cd1ebece59ee0fd97bc08d292f1eb4dd0e750e75ff32a48eb464fb466348ba7339177b35c8a662b87e59610452aa13d8be70b782bbc125293aabe625dc7e54c5950eb32c2bb01522fee1170f47cdd31f32ffab776e0a9b0c6fd94ae97a735213ad7395f2cc4d8607a05796070ba6bca9cf3f59cc792497400fbed276d257fcf2feed5a0758ed4ff8db424981f3a29720658ff73d4a62da327a66aef944967c2f83d06ae7d61725237d976476970bc7aea05f0257f9d62f9df3dac34573579e875b79d4622aed96658dd183ee124e93b6dd193657dea401aaab9fd3460ce5e6a1e202e0b611f3ce31cda4fa744262c0ba1e39fd1400077a4d137fa91186dd773e4eb7c09c69f2f8bd2eaddec7bc8a7fb90c52943d158e2a9968e6a178677496c076196b13e62238d29f58cadea7f16f9ecb0be0cfdc8b1ca23e04b782ff33f8c7c7a5077201e7588afa3a055ff3d257f4e9ef0b3137cc0e9d11864bf8ddbfd3f8bd664709fc0ac95639cc3fce42ca7dd85b7cdcd27be6d27af6cd7713aced60ad4bc54221300816c926cc41376a6a0c993bd2bf5025ce5bc7d0bfe70f9dbd1324ec66fdfaae82dcaf7457e93dba7b3ad45bf1527ece2ded36c3ecfd2fff59a18ef45319725cf5eb379365e26a2a071dde76359f6ebdf7ea421daf1971c1c76f81c2ecdefdf67f44f1ca928e6648ceaf9216ad33fe87eb233d2e77382e3d2b1d51422cad231cf370d15556397188f1db2183c198f5912a757a04fe7651c252a25bab85e243c4ec1b9622c4a1e276c96ad014c3214b18d2419dc96b021318c40a3d43452c95f0e9cce7361aa4b351e94b99a51804e07386d12776568d5efd4e09cb1e053d5fdb8300f63f2659a3a0d54a80be8f5eb3468061e6194b3389d166c9da5ad1252d0b33c9ececa1eb9b5d703a4d36a26552f3937cdb11bcd16c3500526c643c0d46b310de03a8b68fbac56a879c1debec5c2a75ae5a4914f02bbba03a21a04749f0bacd40e5ca112907313b075bfff275664cb3c127fe38b459c4e7f7df5f31926c9c0e5d6fbade8cdf90292b9e893dc6b3e11f2e009d9968ca84c1996fe3d4e1248c0a32ec054f47bfb60730299c83168f31ecbca99c8d771214896f4118fae30613fe40c50350b78afba4c929e69ebdf60a760bf6b901b025c66d8470444095958d08f12d38d3a587ad7894f716c3fa9af7a3fbfdd1f47e2f90c871ca8bed51fc795f7005fcd3b3cf18df813f60d790f74d3a93ee5e55114b0891b761285f804f3509a04984eb8795704b4f4338827aae74c1e0402dcfe802394c5c1ce52401fb7eae96d5556a3ec0f8f2293cacb78274edc4b443b8ff533c87cafaae1ee6e5543358d433b8f43359143f5a7e35b45bcab86d5e91c5ed6bdcde251e45fb090449593c6b2fa37d25e5aa65ade3ebd17dcd3dea3cf8b5fb88ab09063349876abd77f4b8b5a1d1b9c582715a3b0fa73cb8d03fa1751a25927c506acf76ec9de5d89cd3bb882c303e33bbabcf378c54be1acf5170075a3dc02e1ca4dfd2c33f67e2954ec72038f07d51b502724b0fc573d9757d1b1ca4c0ea7e7098abd1bf64afd869b3b22bfe2b255a8a104988b823cc4eef932652a4a245e5ba7f2ba129b9a67e326271b05a34a329d089d1cfdb1aa7e6217929e7e546d7ac805053680954f9538ff0686fc74c6f3b2f75bc156c3dea3de017c9b95e5a238e9f7d7eb35f86697bf15bd2c9f42593beab0e1207c642bca9d2a8f47cb32cbd1a1f31586931c43a7f0fee56fcfdfb09fe348a485500422e20777db804d78247733208e923fa6fb520a21655af0ee028b719028a30c055a5209f647af709b56a54c6065be61bfdb90368a91e7995ca8adce29bb611128e34202dfb09b76a7c34e4cdfb0393f43f0fdfbaaa0c7e763f658fdd13e6f29fcad4b6b5c6bab6f1ddb8b2fd5cf53b8d1b848db46c3563f3e7e6418cf0bffeec1341202a9cf881c4c58374ae4d0d80f58ca7e672d7974c1d75b98500b8bd819533feedf57bf7a335ebc58a7ca8ab969b794646a7560be24c8b9f976c94ed4b7d31abf70d4e97f2bfe06b3dc9ea4819a70609d8b521f2b913bced8ef9a8fe499520aca49dac6c2c0e3948effa1e2563d15e5d3df8a6750fa539ecd41155ff048b076ea360f46fd948ee9e347963ac1b5b224cb955efffb452eeb5edce3491c8951b21417f74ed8f9f07010b0e1e1c3800d8f8e2e03039496f1fba558cfe252c11d49b883a3800d430af77ec9a17c00087c2cef977ccef338451ce1f081860a8704eac332a79da9a0198978aa016419fc6738200071f15e8f076a0f1f062c7c744c20127047c28ecaff738ad26826c63c9967e9982081c10e683f34d11087dbc764295671968812877af030608707b22bb41779b64eb1fcf828608743f93f52bccc93cd3acb542786c380850f0f03161e9086223e16a5e9c9a3a380854772b4c76448205373b12c7cba3b305994255c4f6f38085838380ad80185c9729e588a009e876e793a49b2b5c84d87c2814474f848d2ef810b59c4c915212ff01c9dc5288fe74596aac14b020f02e60c6bc3d366661bf3fcca9ba1f0e0915b4e3184078f6a20a659321669aee640915ffe27f4e072be513329d1a8fff83042d8e6062edb29805b915ccdf855ac3a23cb1f1e485c0f5ca0399f8ab4e48af51ed50f3e4be295b07d7a7804880276e821cb729e4ec96a0a0fab3dcff268162b1a1d1d040ca4c3e0d005820784a4471e8e02561cb6732047259184c3a10725b8ed73289754f850f2fbe181072779d9ccff8361c08ec31a22009899bcc307017bf048feaf164a6c872a97f9fb65161786e5868363f91f0f8c8a05c9f412d0612721e4e198ae0d58430f5c90e26a43d93b7c14fa0b209e5bae1c1ca9f51c0e7c10b11d241b4fc97a3e80ae1c7a4d4de25c8cf25889d4f0c1c380c945724018609248e141371058b0b0db10469864b9284a3bc3b0d624bf38b896d1ac88b9c5e34bdf298fd36294e519111eea3f0468961525e91008a0cace270500e970e84a4d573c0c4390bc526a12aeb59300db90fa0f2da76241160fbcc28d48926cad687ba0841de5073b89f54dccb2546cc662edefaa94f2b3ac74b90e7981caf7381dc73cd5cb7828cb1f0de5ff5c902992fdc191923b14c32acb3774fefd5e58f186dd447e2300095f810b8092131a66785403334a96c58c6e31c06d4714709d12693204be1e3a139088799646b37832d1b2c9322e5d27493c9dd97d18a7293c86de794064173d1cd4cd1642e9ad6988bdf2b7370032ec473804bb06ff09fda60d2b0ec310a48e277a149015afb2e90310af8755a8db51790cf5506a308f0e3c202af701ecd897fb084605ff81c424c54cf8c01f23958b21ea6cc73e7f009c23f9c31076ff63b9ed543ae848ffad90a51009618263503ba5dcf147e34c9859094387ca73e1683703b7cc1243f1a2dc7529482a52c2106a355900aa23d40ad139cfb32cb562c5ddb1e7621c2fe7be463f18aaae38f382b0beba4c570f42502de2e171c01e1e794c85608b65be485483722f0e43d96af8c887733806984aeeda6178500174748570082a15b27e057491c7e9d411d940dff0e8d00775d581074099479e5a8490a81118f5e89184026585f6341ea78e881902d7c0e829545aca33eb9c1c8f94bca24045b9c9b3c23f210d877446b228e2459cfaa7a887643a52bee2bf65fe9e0ee79407070ed8866ae154d665c938e191ae7ea04f739451414ff57637bf789cf391e240c910f224450f491515f6d85d4f586e36360922956f07c2b026eef2c873642a173c119e3a2025e71045d5c003b43256ee37c32339dd474317c865a0f0c19112c60e5b4a40977f8620a064ff1c9d71c1177cc3d7b37841cfb4c06a64ae168247b3c57232a13a0fccfb1105ca97560508a5b27e4c71b852ff11703e2d4f968a3f81cb8f4131236cb5c8d6637a847c0012f4d0630b2a05947872382b172311459c8249e984943ea0706347069226f2acd89033ba3a6778878d3cdb702bf38fb5e2e42ca6828fc78920a824dde178f78802917dd0280694c50a9e8e498786727b0e8f0f03464d1b8ed43b3c56eaf3c3070e443113494235a3238fad8a58a4a93a40ca09925b37d59c8a385929250c2658ff8740d4efc374597a7257963ff277067f9b1e6ac2508dc4dfa1eb815277c3f5b5c65ad18e660e02e4ecf00f50bff5d4e4526b6e2196781a6c2994fa57abfc95b3b828136d8539d607bb90cc7099cd7999d9a1c8fde201593faedc90fc81ab67409a21875054f050932610eb99e025d94650ac3fa200de59ce575101a098675715631de5a45a4d68e09753817968d51d09840e1368df4c57222f54ecf37adb2db1291b0b6e7f0f2e0c12bc3030b11bfa7df6cb8b37cf4e1cbcca81142e18b5234c1ecf312eb88a0cdd8e7ba287f11a8b806539a0d27e1600014e06535925caf25c44257b8756fe772ad47dd1e9915aea8dcab2106c945d1b24e059898dfd02f937db9d80bd861b28f94b9451afa369930b3904f1bfc5669de56313afdedc4f5e098872614cc4cab60c01fef537dfa47e25361d0577517a0d9c9b5ae869c2ce641372aaca1bc7242d498bf67bef0a056ddbd3d109fb3d9af134154971c20e0296f011fc6ce5d351eb269050b32269849a1589815a6d815a69a875738bb3b56e319a6fae1cb04302260b15dcf5e64323b6ebcd070595f0e63613aedb4ca259335434d3fd17d70e5468a1ce5b3371ddba44b82b9ca8665805a0e1795ac4e17133389653e8e1d12de0c323033f8ba64d633b6fcd5a016b45f23f53837fb14844738d3c3c0670fc6764fb257792e64ec9d2d6e58d9629fd3e9bc563c17a1a1c9e6ff4101e5cecd13f9e2ca3793616092e24606c6719c1177f11410dbb8c20fe52bba55b6c115ce7007a69612fca8a53c43c2e8a389d32d363d5cbcd096bb17dec1edc9697b00e9d36715c9fd92273a9736bbb6e4b8ab63ae4ec3767675e57cc546ceb92ee8a9c2d40c820047bc1e671a1e20337770aa492a65e63f3a716580db8028adf15e0582402e2f16dc3560fe4e0417f841edef21a1e726bc8c5a2d92760bfab50bafad34de76ea814575844f841a1d1b25c33773e1df56645e23cf2caa723355bb011b133964f47e7834bd6979bfda92e98aa82d02f18a982a15f308f5376c6fec6cb596f1ea7ed3c60d3808d3ab69c5f9b727e5d2d1f8ba4e490c7e19a752536533233bf0af32b394516c1d795d770113f8f53c388339d81a8bc41370d09982318bf76c0da53d665a30eeb6317fc4ad3da4a43b6cfda23d6657963c5516dc5435931675d36f52ae27866948633b6c7a4be7f703ce890f1ced8772af63322dd3f9310148b9cf2b69c907d6cbfcf86b7d0aba8a357c2be3b6383de910385f3d44734fb8084d6ab831cca09d5d3daa11d554adbf92c6005dbc37bb8047f5c9e6ac9efb2f36a1b3b8fe3896561fac788fee131d4975f0babed9c1e4f26ec8cad5877cb7291409133d488687740b5b6c410c9d93d96ac24b1eeb3504f767943a61c9b3431c3353356669dce9eacd2672b25a02469d5d7a89d6bb135a55fa7faeb887e1d69d6c59ee01a5c911d4376046a74ed94d5ac40bf4a5b8ef4a0c3f661d6e512aead3caaaf3cd495a7583927956d67dd95a6d65a586d64c6be67a103d7257035fcaea7604faedc40131d1780daccf02ff947c34a588f7612ec356c5cc3c0766dd8bd53ef1f809a625ab333e4b3a323b6e7f0b0f90dccac677e04f0dd4a1d5c1ce6b753874886b5960ca36d9241eaf9ff989d2eb27b9af9b531bfaed400aea82497a3cf0320c214ff514b3d424eee32b9255cc9b50c7f5d41580d5c9a730d326d04d96890511308a168a4c939d73f36fac7954f60e3f72d84710c14696fde5bc757f1428c63decbf2695ffed57fb68c92782c78fa761c17254f23f1a7d7ef973c17e3b7d522c0eafa5f67f305c777bf3f2aa0f675c036ae5f551b5707107691addbd77242bb6c733eb80cd8b0c3f62be52196874de5432c1f42b92c354eb494bbd4f96b1b83e1917b0c6eb1eee93b9f8e70f180005470be34d7dfe9f608dc8601359f2659218a5293869db1e7e9244ee3d2729e0ba95a57934f4d0b30901af3c2ed060659939e3f9cd447d4c420012f8ddcbf28fb7d78e1a9a360ab7966961b2cbeb11d611d4be4d351806d763cfc33115da18b6ec112511481fca3c8209f2b2f588464d1357057544d7dd7406532d48bb27122349ad326d8ff6d98e7ca4e4a49f69a9a2da269325dc1a7f04916755853cf95b3766a67a82a48af371ffe70399ac294f1a258ce052b5efde507e8a60464dfb3416f7038383c628f9959a6ed76cef665c1d191946e21fc08d8b077d8612752a9e8b370d87b3444a12abb326d4234dd8668ea22925d1f35211a6d43347210294ac803503b677b6cd03b0c878752fd684fe1cf83a307c71d3c52c83fc3878323ab0a6e6cb561383c26d51e844743526df06038b4d53ed86a83f0d101a916868f68b54747aa35b2495c57f6860fdb36df846f534690a33c1e0398534a9aebcd07aa656cd427a2af7c509f88be92985fdc729c1acc35eb9fb14747bdc1e103b54df621652dfcf101ff78d87bf8f0c0c09fb16b9ceec1c38747c774beaf03a614ce13d67ed07bf0f001db63d740c550aadf6178dc317bf1a601c9a60ec9a606891ce88706241fea907ca822d1e7c0303cc656ba2c3c06ecf2987d3418b03dd69687b28d65f6217eddb02efbe0b34412301eb05195016645521140b322210c2095ca5991a0d0d06755387fa902101a7a66605a55c1d02f2843fb73687f1e989ff97464cf619cda090aef04b402d77879dcd4e2ca0e76c513d866e03f97744f560763e75c5c0e15a276c8f6595177205620fbac605d002d28d232049bc21e4b58578d0bededeccc7a459f3a1b798c8f9162f61d3b3865b17a80044d1d48e2a9b3e001db63dd762c275f1fcfe089d78177b4290f20d7af77002a0fbc934d79d0edd6590e258b01ced0510f24814b4993763994230b3b6c8f216cf51435dc826358053fd0e0c3db9bc4f39efcf3007ae062abd4f64728b7af5865b224ece2eed8c878d5a5e19b2c9a96c6672c8a028d6fc43c46ad71fcba9d04b00b58795bacec2231c262ef4c990e0af913cd3f61873d66093b619298286ca1b5bd336c44824808f95b0119db1d0324724118a304d002539d0ed8639cf3020c517dd64ed064857f9fa8422c31cbca331aadf4f6b46ada9e66c5aa463aad2a53b042e954114eabea3cac5441651e66b126fa24c9b2bc3debb06f91d914c0045666d78531d5175208c0f97885b2a4ab65892c7d5f2d6d176c8f4d3a16a66c80815f938e868499369a58811127dbb3d82ca48817820d4ef4ba3052316065c01697a7042aac40bd0fd8ca871a56a01600553a50077550129d03755881929df2a18eea7a2fd119695ee513df58dec4279fc1222b6f65aefc959950d37791b88a8eded387c01a729aa15c2d77f25923810115de97fe995a6b667dd7ac5eac99582303d41bd6acc1a4d172dbef83d5e0a4df1f8b556f7d00c682a828d6f0df2e1c48fa7f9aad47dd32ebe6d311998df5a8ba6ad7237f36d6a3aa4eb1d62595491925aaa4322bf29099b13359779f8d2cd163574ae21a36bf527b94511559c4d3928d84dc35b5b280b8e936ba9e4952c277c5b1a3c4fda2750d579cc88d538b0b6552537d9572054a5917fbacda6ec7ec3e1b5c0f4293db457561a2ea4f6873a9a6c0448a8c15ebb2f5ac03012692381510cba214f9224b305c9cb59cdb43a0ab831bd162258b7a10774256eaf1892374e088b93a8503657a0ac7c7f5ec948d72c1af5cc103902942aeb6400e11529611d0b406f2c08554cdaf6a200f9dd6a1d906c82367441ad269ddb30ee7a863046caa7f8cf04775778be69babca42911fc94a89e4e16bbeb9c2a542d97eae4b2a4b65a34b2a4be54a971c541651131ba8b37d482f3cc280457a63ba9287972b7b76f701e77580a31ac04d0de0a7d1f57af3a142d6ebcd077aa83527d61ad2e1b9d52bb0a7d73b12ae2d4fe307bde1e1000fff7298ddb07774f0008ff1f268de1df40e1f3d3cb644844add41efd1f1c347a656d87bf8e0e8a1a934e80d0ec3234b4fa803368d07b6a1416f38381c983a616f70f4c0dc476eb5e20c0ec283c1435c0a8f59bb0d46126dfd9747d93c90e8a472d83becc8032ada53b0865c367b6844518d11bbceada8a7db514f3dd4c4d2732bead176d4230f754e2f02ccbe3f0858de09f4a16cda0433b530a326989181f9745ef70d384dbc5ec3e535fced2a2d5fad33ff4ceb4cc2ab26dd84534d0aac20dcb92be4ea937757283f91d9bdb6dc609940f56ba30f7fe17107877daa2791b33e0c705f55fb0073d26523b9a40603725c82882b747e0e88c5d029bb76ca3e38651f4c19ccfed09db9cd50ced406e8afe687f519cc9ce9f1b557e71aea5c37d60106f1ea7c803a1f9aea404b7bde82d8a30b62cf5f10c6561bb04dc03ed44f7d12cdfe88a99fd93dcb7a5344aa633323f278c9d3a114981c270054f31cafbde56cb33ec2bd7c7e7a17ff9648e32fdee7659bb33dc6a5facdf6d8a8665d44019bd510279a55a45e12cd7ce244334a9c487d0add0b73f98910c7937584609a38333cb34889ac77162401acfe487f8bb2a23dcbad003005459cea825d64403e1df5d025d4192ec41172af76207091e73400df3c76806f64c8fa163084047e3ade117b4c621f8597ecc4732d5861172422c81c50ac58f77ba67a9a2dca781e7f70ce1ad8089020cf96e91863e1803ca11e520ad039f128221d388c04b39516f29c753040b87dd66e9306467869d561df7da7ee872fca8f8c424c094468200840ae00ea7b68ad97d091fd33e6f2ba4e65941671ad6d6bfbbcf6fb0e1d2139c3295b0b1351ef2acdd610a5077bc4d3311b4390bc54081d1f49218a4b3d7d620cb1b4961015d05e2ffaccd6f66c70d8b140334fa7914f87477f04a3aa933a66bc9043c6a8cf62cca6b9d814114f0483a75ea5003a61c83c05198905f4259b283c10b504f356cce252f4589ae5739e180cf02861c60b7648d017333e164835eb0c35856092f073e45cc5e7ec3bf69018b715a14363be761dabbe67c3c31af0e141d59e8d258447dbe093f8100cb5870f3a5230c1fde4f060d8b05ec263b35e0e8eb55c72189eedb1a34ec7407940d33aa0eac283f2d3db9702725ce5cce6710e589c1457b06f5938b07c8159aaec5c5dd00717ca600d0956f49f0f9cb9028cdf4b3964270061e5f6d53bf2a740f704ff95e7c1de91bd5a70eea2002460f49f4b7f52e6cba4941ad7fffdbfb427fb0c6e3f063d7b1b0fe74935a8fb582ceb76c8b5865e4e6d0df73d18afb6408f3ce86113343da0a0c76375b3520260db546e992e1cfd99645c72d1873b371676b16c8f8552057d78ea111bf485c82130563b530bcff8fbcc1da2123b1dc0cb0d5e2ea7a31aca12d8762ee69621b14a6d3da0b104feb652be0b5561c315d7db16479c96622a9041c8425492b60396c49f7ec27deeb853bb5b2a09ecc03eb4a03ee4d04212ca62d83e76a63bd42b33f58e2a3ceef4caecd7c542e44f7921daa819a9b1b706f0ff5a2ad3b484c77f74ba69b6af5057f751717d9be4d031ade567b74350d2ee9ff3ee64d07d74f9fbf1cd47f3fbe0a61f6327e1590780fa1a897bbf4b3dbfe4727aad890175d58e671cb9f1937ea121a5d281bdc371aa93bf7ac52289cb76ab25fbbe68d3e4453cafee1ff22bdb877fb410ebf47ecbe25462f0fb6c7968c1f3423c872c13a6e580e923b41145ba829431c79a1b5c3144401e562046964f48d1ce2b229afe835e47b8af1f1ce7f08efb4ec27d47e17888bb90d12ccfe61c5cfd5de77ae862ce5130da13c85210de5195e965bba9c2e06d80f62245c83a9f065ac1d15969038ecff952781ee717de9b84dc836ddbd719aa1ffa46b501c1d443e03ed4401c35434160f771861ac13e3ba4639390fd33d507f9c7b7cad59bde8a2d8572edd648d40d99a558e36d7552614ad761e0eede0172ebb35e33133d030dbe2c127ad89347d382ed29039e4b2b17a21df606accb924e85012473f5dc2ba77602e652b97745e8a60c95a3fa4721e01681f70440bdc9b63bfe2ad55615aaed78514be856983bd63adad50ed1bccac0d5d330b4d5ae438ba6d58bd068ea5f8446d3ea4568a40a2a639eaa026fcc3822d0747b9573f3f9b462509e5a83b2b3072c96b9a8f82d19f788f64c2aded60bc74c422cbf9b4f6b75bd63893f9f12eaeb8b45ea4811779afc17648f247de43a80ee499ac0951cfc01419a07b5578c550c6b8a21bc0dc3b006c3a01143ddf5e1c16d18d61443587b5559c5b0a218065b30b8f7b58da47450ac2947c0b49975cef6f08eabf216a62d978246becfe653756a08fce2707bf1d029bea87d3e23d754c52bcb5953775d3a9a8923b60fcbc2956b75a26385d661477444e6bd952f2e60791b29b1cddb0986967ce1a14108613a2c707d06297e4a25acbbafc000d9fdfbccdf620a355670f04a3a35bb79228f70b205559b0a59a736c8d8a4532f6415d56e7f5908545b6f13b277a2da2dece0f74fef18aa9730a455a7b1afebaadaea7ac6ac1bfd5f9adc5f8c3789b37780038833d0cade6775c79d773e70d9213bdfb469a01055a07a2c935fdd770de7f851f9ef1d1d1d1c69e1a0c09112b52543bfa4c1782e811b4e0aa617f4a800fb9b441b00a83929f8df87fef76afb5267dc763ad5edab733a4ead1ee6ae1f1b9a4551e27d5addd613dcf8552b4d98bde5263f56d118a5b91951e5dd5f3d26fcbfeda8fceba01a4c0a81d56cea86e69959081a7555e2de61289c743a2ac75c629b91f5d104234f2bea2ff0e9b0eeeeff1c338a5c2972305b8ed43878bd54f6f5297a5f9d9aa5f0387084a4aca00dc1444c40c483951b66e86d687815feeea147b60f35f4a066e064e9431d54a0563550873ed4baaec5230f4ab26c0dd8b10776bdf95003f5c0834a785d930f7d2848ece5433df2bb2faeebc83af0c0ec2bb60aa83f056896af83f4a741997deb402b73114debc0fcc900a15d07e8cf87e45960e4fe9e643dc8356fd3d167cb52148cab68322a7d39e42ec24f981aeba2949f490ea2192f212716d41fb3195f09c64d2416f6ae677bf08ef1b2e4d14c8ca1f90cae9c700188312b36693913651c19ec3df64676d1e08a0bc6530c7125116413b5408b80091ecdec3556518a0564011b89722d440a1f5b933c9bb7e026ab55662d89010df9383ad68ed3285916f14a74d44869082e33ce342bd9222b8a78940856c4f345b231df01c3588c7b17a997cc173274fd25e78b599b4889a9fca0a362a1b95f3d3efead58887cd28bb2791f338274afc4a6e8ae8aee24cbbb71da9563ed4649562c73d13f3067471cca1953715664a5361986363f9bd73598e649cdaf4e0e449edc400e27fae806ba8c815a8af318426c1943aa758326dd0f65a763f5869740cee328cfbad9a20c20fd3230635c2045454f03ea37a727ac1b06e66cc673919698ca1cbfddd4a860d05393a2b94fdf75d7bceafe21177c5cceba93382fcab785e0793423f3371679bc123ffcf4ba2db9e86f10c4a73a8f7496cd96f67e29c0e8766e6aa217c0322d66f1a464ddef1548f77bb6c816ca0510c86c6bf4c87361ad9dae677122581b2a9b4d8b5e05e1d35a7686f87b8b6cd1d66fa3e08273fc1b8fc07da1915fce158e4bfb08d9631d836427ee711ba6d5cf63fdaa41f99c6763c8180474d050f4a9b5d4cd2510a1ccd919eb86ce5b660f40a1d383b225fb268a85a9854c26252842937224a79abfb6ee5cc74034bf767678d2305712a757c057012b335711abd53f4d699941352c53c7900af675ce174fcd94b6cb0c382ac0be102686d49a67a0fa2d66e70aec52d141f64cf1ae39e9a7eef6525ff1f29c564c0d679ac9f0e04f09679bd9d28566fcb2af6602aa606a26a08740dc6a3709f825fc11b049aa2bd2fe11402a642629d9d8e01aa89c51856ee224c181cdd15117b789913a61634facb4d5df6f08556b853fcef2e9e7097d5949cd93a968176c65b97a334ed6aa5e5426c91ddd3bd2cc6eac769490340f76076823c65c6598d111bb62368b284bcb385dea0005c4074123335d6367b7ac8b9a0dc5a239ad06002ded6cecbe113b6bf4155fb72729b56f60cef29fd2a67328f104901435c9c1d8c78fcc7cf5e8ac7d4bf269e19349217332057acf6255da404819d85be45999959b85e815491c895ec493c422a8c4b8330ba3adf3fad9d84dfd3e5be4a210f94a30baaeacea07e9ec7298ff2c35f6b39685851082131be9cb50cf5da7cebaad996453ad568ebe92075931fe1f3d4fe8f451a0a30d9dad54add3b568e5029f43e81cb50a9e28e8e059d633750a011a721c091be9110f25bf15a7ca134f479a8510b3a6a6036e0f1e3d4b0b95aa4ef79964d12314f1841f02efa8b3c8d990e0f8369a3a80e9cfb57b3fe57a84fcefc2f36a6b9864f9331ecddacdbb960edc681555ba296d0ff668eb34c48e247b365184bd90927768a31254b2a1051a6b527b48e0e1f80c7fd46dcb50f0b73aa98f758d6f9f85aba1afda849c8d17b4184452dd59ab03f5b73822b24e6fadd3cbf95ad7c3ed08d9a5a34d5124a7df53b3ef29846ef12f7c2efe1c7e4dfaf735e9dfd7a47f5f93fe7d4dfaf735e9dfd7a47f5f93fe5d7c4dfaf735e9dfd7a47f5f93fe7d4dfaf735e99f02fa9af4ef6bd2bfaf49ffbe26fdfb9af4ef6bd2bfff0649ff1a12f7555f32fe7e9132c6a6a27c351df113fd23d05fff5a24f855fe0808ac06a5901ad07e5b23dc5fd716ee49b298214af815c86e31c666e21afb74627f629d7c3ad225e6a729e1a488d3b285c8239196bad8f9d381e01e8883655624a657faa729e1a4c8adb5363d363fb1c4a496533ff47419e3baa2bff2f2eca8e981f7aaee27397cb81839853f6fe0bfe0b7321ae5ec8cb1fe7ffda97dcebb9327dd9ff0f56b7078d3f9733f0e747586aeb115c0e31be7cfe14de7b15b4f929a9db1fe7fc91f8f2f2eda1717c55efb7cbf7bf9f8e262bcdf917f063b7e6b3f3e219fcf2f2ec61717bd4b2ceb3cbeb8705b5e80d36d5dc3b4e6b75e63772abb5b876c268a7efbe262bddfe99f2a7e5e61f46bfaf4ca5693e40bed9ffa39b372edc537cc721e3bce64c17a6167ece2dec5bd53c317f619b38b0cdf2343008e0a062c3bb0657581ac21943c5c3ddaab46c62c0fe045a379598c386378f1a37eea17c658e546ff80b042aa332e56eede5cb60d72d3f77d338c4005b352fefae160d0310f296883f85f13a8ba96d63371dd213da9506a6829d548de2f4542bcff6ec76c8f0d0306ffb07d36ec7c79627e490aca154949f8e5188aedb3f0b266e05cc3fe94645c431f6ac85dfabc10f997e932a172a547aaff721a7b47477fc8389c5c30962b3487b2332932ca9ca7057a365ddcf3c6e13fcc185c56bb89b28c5c9a9e6bfc1618b629fdc4c0435fe529f8f76e4437148767db6dfc539b6a1c8a415738bb7f9f71f68d7ef56e091e56a8eb14237a8ea72807af6cf240f680e35737dcbcbf954ba5e933b6727cf0d3ff2fa95fd4ecb3edc7276331959b52c396d6bcd9edb6d5f54f4d57eac56691749a3722504694186d66703d5443756ffd87971d988683e301d90d1983278ea406453e5475a44473ea24cd750e9aea587e888b5ff82f6d8e92f6310bd9098ecf6113b29e66012b0296048c5f9a99adb2c87af4391c020fb7faff355b8ffe15f9633d6ae48f3f983bd69fc01da37f3477ac0336dace1dafa63e7728bd52b6eb9d157c8104d24ffeab348a818abc5927a5dc4694ec516d5021066da82600e2fe7df8f7b62640dfa819c98a832752ed485464bea2b208a096d15ebd1dd262a4fdfe641c7675de8e42bfe1988a54e4bcccf28210c11c6a41550a18a76480b8311ca2c25bbf4b3d7b6e3ca1c78c333ced9aa655772eeefde9e21e2ac83f66cb11ee8f1c8245518e95ffaf02145e766e8519d6c1b4fd4f8cc9917c7fc606b8f96218c60acc63829d06a2522f2eebaa9cc0c1c72fa8b29b3112684a53d518dc5241ec7cc742f6f1236b2b526a72cb9fb2cfd5e9b6160607b1a31de899c8a7a3364c869a02b6cf2eee05cc7e0aab9f86f8a90387bbca90ea9aae8cc971dca52a8f12b466b02ea73d36233ff1d51d3220fe092372668b14737598ab1fae63acf9c2b3e85a791a67d20924a7fc6871e07df3fc95ec04d31ad0b01e7454033aa4a0da8250c34c40b16f150da7ce5f23fc6b0b39b770d03f77b40d7c76fb60d55f8a153e7e3453fff1230b3b8dec652c795281bd9db52490622dfdb39eb5ac19d0415cbb9e664582c30494ee72824f6a397d4bbf2909513bc90d8ddf5d44e831fa22427f6f141112e0d3c724bf79d2a25648f4fba0f4c605e36c149790d75ac07b9d72c64152b67987c154c91f459c46c27aa8a799c25a2c44144fe2081ef4f26bc02bf555f5341860320832cb13769f85b2b28abea3129e52da6b23afc4f019945f8f6a098f9f9be9be56e24125e0a1545f8f2a44c79023f0a94271d5d38a1e623f87ecb12fc5715f6e5e6eca3cd1b6860137c9ee2f7c2e202d2f55222fe97c8b64211c650a35ee74390fd83c4e0393d7df92a59a9b0100d3e5bc83e0d50564f411096415e1027246a4cbf9f6900da665a92f6a9d0dd2e149820d805e12d589fcaf6e5c0e2fca052f05e32c898b92c11311208b0a469b4aeaa8f779845efa0583b19f4838278ff09f434b1242676ac19175e071b4fc61085e7f73845d78aa02e5dac700d9e837f51040727a36fa8dc529be57cd2608eebf07cd46bf99e71d1889b38defaafd7a7ec554acb1041aa54f4464fdde8a2731e484e64981afebf4e725d24b219b8e1c3f77f8382b92ba8fab9a8feb9aead17c7375e218d05401c7cb2e483f459fd4c8f3a51a4bc74465bfb06139f03915793724090b8f86f034d2228f2fe0ac42238aead394a19289725e90f742409c4294ff07e8d36ee5d3510b126cdac756951391d70a9cb0642b5bd0ce8ae4ce68d7a35bb1ae2b9dbd481dd43eddfcc756aa69cd8c9644bddc937f1f3f32fc2ec66ec9e710b39734b402ee70a9288a9ddbba95c2bd55435b18657ef77656b7b4b36e68076ebeef36a6eafc7a6d450d6d451b9eeedc8c5cb7b57ca4ef656189dab7895a8ac4c5ff91c2e684c8c1caab7723925050814000d9734b9d4294af173c129a89bc37908808e4d5ce8890431a10adee8468d588687d97a1e1fcd6224259ba3326358575a890e0f0bc7497995a0a1da48850f94eb5672a43a421ed1d6baf5c7a36d75ee9241f5284111cae28934889e6567db7ab1b5e8f7a519646bc6c9fd36a97ce9aa8a9e5cdda9d46abc22e9195c13f79bc6ec7a426b96538666abf547bb322b9bd3da508d8b6563c711e5e432cae06b155433ec0e74e8f2fdc0004a55be7b4320fee3211e3a6be79abee293e6cd5c26940d0e340c133e9d390851564237801fb29b886155cb366548afe4e0098847d6b331d5d9874d410e10db2251f1c0f30ca1b3bd1b1de2a4ba5d23994c455aa15bc5c42c2d13b930e31564967f4884f4358a59fede2eaee2857b57d347ac19d11ae9bf88547579f8eb03a68f506fb53865b45265593bbe252db5b9563d47b854fc457251dfa157e22baea5861263e11db818f4dae5eeb1ed8bcbfd07384bd6ff1f6f78ebbebdc0dabbd5bf0b00655e9ec35c4efdc12ffa4a63cc7c7dd5a732dee776b90f848ee3835c6feea294fb73774472212a3e81d9b5adf9131ac09d069687d1bf18c43e86ecd685bda9d6608f9ef97e57c24f2467507fd7bea7461d3111d2854c53bfd6882e962c8d38f2a6ca8d370b29cc76956c465bda26583f1add76b9d93fccdabfedf9f3ef9cb70d0ff532e125ec62b0168781a89b198ecd66788a2b29cb33376ae4340edea6b7461e2bb45339eaa2422314d2222ff7fb29ca32f521ba0be8340fd078f860f3bec3156ec63e6597662b35fb611785f65a99520f02380f4b5b53ac4a0370c87c76c4f8e06cdbb83de83f068a8be84f865f060a8bf783310656999f3a2a4f407961aee3c0b1a4517f67f670a92e53cd47360e7da89e0972ce7436de419d601418c7189e77b80ad2abe588a448388d68052fd5d4b340742d5089d1a8641c54a245b68a38267c1f85fa9c4f4305afd5157208371e1bf3f630f7a35a7afd693274f5a0df1a7aa280e7b4792b15a4f9eb4d8096bb59c418c795e7f66eef7d97f3eff7726de2f31e3e024cfe67aae87876bbe2960ae878370d08f78122de5724ba75d1853577762f715b789df9388c27b6cf8e8918d2bbcc78e1e3e30d185d91e0bc343e5713a70258d44f31d0b870fdda9922aed3649f90d744c12a3ed4e722aa6bc14b7c8bead72e2c0170fc615717874c4ba3e496cdcb986c3199e528c3ad27c348341bb272a5885ce00d051b0ce1401bb265cf8987c347b0c109cd6770cd57fe5d9b7ad6392cc5fa05fdd2fdd2f754e119fd7b3d0502cfc7214135fac6fdd2fdd373c8addd2afb5bff8b50d0814264db3f568877ec1794bf9076eeb179c233eb76343d3b1dbd96cd78e995c879fa451d91db73ed0ef5f746aaa3fa90056713a7d0b42f96d99bd3589ab2ea8b5cae647db6383de0195bb83ded1232a7807bd306c20000aa6f3154fe01406ffb9bc8d18512278ee2a97d559d2f7dc4d66ac26fb15d6ebeacb69357f9ddbfa942df8fbe51fdba7fdbbf629cf4a6ff58fe1ed73b1f3fa5f61ee38e5a881faa0c1f12d3158a9d23380a6162bf9f789ce3ff73922a3bf0701dad91e7b99611662a95c14bc281884c79e8bb444ad234ed95305aae35b4fe372b61c41ec6d59a39fc423f8779464a3fe401c8f0ef9f0e1d160f068787074ccf98188c4e041743c1a1e3e9a0c86c330e29118f76da0c568b1f8d3cfc3c1236ca62fff99c7d794d2f3f83ac6fb9c80ad85dc553d1d2fc972adca9e7adf8790844fd727a50b76a6907941331f43c29c1355784ac356ae2111de1e5bb0ae09e8ac9d40b117c882ed0eeb6aad597d70f18498e8750d19d7755ce9c76ccd4e587bcdf61957d95ff6198074540ada3e1bf606a4ddf550259c5987a79e1a2a69a1151ec819adffb828d721dbd3ddcdc5b82d91af87fadb10bf05f5f06023aed4505f1bea8c92a5a854c18fba82f9a1c8e51153527cdf23a84e5ab4e8b80a6399fdafd72f7eb9f52e4392a4e349c22caddf12fa7df6cb8b37cfdaaf7fe89cb06511a7538815dc851a0cbd400ac6d9582c443a1669b46165c67e584e262267eb994855a5519ead0b91c7934d6010cff9950e723a89539e608c77b6e68063144fe53f623e1263588b339e97bddf8a1e7b9db14494ad828d3316976cced3254f128298c44fe5a5be122933869de6b960211bc7739142104f88a95ac07189c7a9ac0679b753b03c14162b26f0664a9ab2f52c8e66e8d185a03db289ea18afd6f9839e2d5584e5ba4b1a0807cdf3a9286d24d50a007c082098eb692576fc22cf16925ed808d1fde5190f3ff666bc78b14e4d484f59a5e30465d569f211fe5c02d818f217a5ba556eff7ed331fe4518fb16bdcc08a8f66a407f86737468c0e8b9972da7cd8b12078eade1adc55268f72a8ad373987051a3c56827dc55944e95284b8b2c113d91e759de6e2d5371bd1091dc33d0c909cdec7857e50efa46ffdc21646dc3a57daf58f0c87a00a1ff4f2b17e356c05a2074e40f294a5a97f672fdbc355b0a5960ef3de45fe65ac5c0ae1a6161301a0edc86349cb9f8c096d5a5850255ce44ad68c3018db2f4cb9f68a437955a974d439ef36b7fc47e54023350c88c8a812907033aaaba0218464d81eab4fe488a9bba38d52a87e34e0673a5186eeb2d2c793d6242f9d61ddc0161ad890f9e6f607134e3f993b21d770c43ab924b7d9027a954b7dcac83070a3738882a79637cbf7ecf4f54c64ef5ef48fdcb4fd8a077087c4e1e989c36727533fd9447cb8e5434cb033541f8cb146a468232f8c31469ddd9a6098d4f6bdcf1cadc49750cf851cea0f837c4d3f88cfb5bc565cacd1ed2ef4b7e934c26ff776966c04e9e4266fd4a29336829439b3da70097759d701966d0b96cf03552132dfb36c57f46f29f1bb2c5ecc4a4de88d0e454cbb9be25918eabc79bc762500f2eb70e468cd570f0821f860497a36654da620e2f33296a776bfdcc71430be7f1e52d03f6579eb36a49f2ef41607d85c3a0d6579b3d76d6b37ed8d7e97476e26b9d52c0b8a5d2acf210d3fcd40887882ff462cd26984302f02ef23833491ca462c59344011ac1b7135db1c12602c002b7240f2ab2b06395afcaec90671ed84ac7937c3a0785cada25478799bb5009409671e478a1bd9ab1cc71d8c032c9b074cfa07d03f7667da8527614dd632c6c3bc3f05d0089245642ac5112bfc6d9af0a62926081ec582a1be3a9b3a9140dfe3f4039d9229c36aa8710b391aacdb342755dd70acbce85eb5d6c5a6fa1025e7193dd9ea3a1a83a63176ea7a88fa56b4f6824a9f20aa8236a9c8ec5353a0958d216759b1c1140b77859594ac983ab436585f91c9aaddb1500a50b558f97b4509dc8fa7913e37638c009735b404977da4c71056e62fad7909db0c03a4ec7193af0b60c75341f60614f7bff6b2b88c91c0411d57f2bfcf28b146c446c8ffd1b3c63804582a74ff3a6038c3560d5c22f5a69b5d6a5272913f345b9b17c0087d188a76c24d8b210e300c248886b3e5f2402ff306f77248f8e7874d5bbb096a134cb16f68c2e8fe8559bd62b20973c932ed3f8fd52b0781cb042bc5f8ab48ce521593ff3d5862fcea64936e2522ce7311fa9f47072ecb942f53b2eae1bfd5d7780f46c198f4f589bf6cc6eada04d791765554853148ff7f7b54043d66a773a8dc394024eb2f33b609a77f0564ac4209dd36592b034cbeda20990fbf5b8606733a35df09ccfd9ef7b37b879b02e7b3313ea7799b15214659532a32c4b044f0d69f0d9d6b0f7a03720d4898b5f9649f222ff5576844c209e1abdfd561dbc55d21af6f123b3c24e1510466fb06c6e218fc921832919c76025d9c8cd15cd209d3f9e4a350c14179e57ab471cb9e251982b4876ff3e733ea80a35eea7b993b44a9b58d080a172895809bec598a1a58e4a6a2b3590071dc7f4d092bda220dd630550357734f6aeaa77dd717a9519a42daef5fc42faa37f1ef723917763fc6f34e3dfbfbfdbe4b8b61fac72f929eb8241164da16c7975d46a22d6a7504b91e62768f336d2b4ab2240293ceafd881c8d7d868606b08e24a16e81727233590c3926ac5e64be536f4961c77eb72bf768c96eb0d654a4889beb93f93232b04ae93d4a63a8f122ff11f1fb940e9c862bc6f22d92973d76fb7c422c8acd144654bc8453c4345e8994bd03bde89d3c2ea060fe44ea8388716700f195194bb2ec6ab9000dc3f440b5eba3519b3d2aab0a0ffe8e5343ff1a949f39a74a3bbcfbd43e299fcb9a5b6658a9dddb265a29713d9759dafab3bbc5e873b556684f581d2b3530c2539e24057b3749dfd98cca8a0fe48904d800cecf51b6109a0fd868c3de490df8493e7d0749963541ca99964a4859fcae6a4cd2773df67c82adc12bf2528a39451e74be647351ce328bb04a7b359fbada0d9ba46a32ad629b81be5acb911f0dc68f52aedf60523ecd9feaf513d2022f54a0b7c52c5b2663a9284bc4d5dea0b8bf61e78a2a970e7f651324d73bb6c8b3553c96ba2e24ba4474b2bf409cedeca55570c25193148fc648bb27f9d4515026a9deffb309e485936d81d8d0086a1480490a39c6376d85519dbd9d337d858b7ec94ad17efd430786b510f924cbe7906bb7e057c29d584549b8d152e70ebc964bb26c21f57de8b0c20b8bef2acdd629cb72c98a69960ac8fd9f16f14ab0281b0bd6967c84d3c2b2492952e0c8622e47ab91767aec99dd31e3b255b0452e2622c71633c847c8592ea6cb84e77218ed0e54465c7c2598b82e73cbadd06051cf061f95e83323425e502a41965b3938122c2ef1f4f309fc8dc7351ecd2492f91fcb920aa9561ad8b97a0d2fb13e9f800213e8b1144cb2e99ae7729a01a5a6043d3dca8e1356d620019ba4869d03fde8de3dc1052c1169c0aec4863ed5f3a5a3997bc2e49810d2744799f62ec885a4dfa0636f95d5bb2c3c653184663a6571b7eb5deba97566978f6e0c0c8171fda55ce5aecfb744d626aafcc4c6d44ab6a6174b3854576b292789ed253b3460a72e7965a14fda9d06d43c1c89f23cbebcc4496f4ac2b983862db9f11d1fe0aef58e87eff46d3b042c819d8ecf2125710999b0b79c510a218c1f4e51f2e82a5b897c92646b70c7e1fdf0f0e1d1c1a30787f57a111ff84a5194cd173cf7b57a0d1ede02be4daf873acfde2f79425e74b5f920603cf457560c4b6b3508d8cafab16018d081d4eebfe110ce870f74700e7942e2a17fab54736e24770c961bb041766611227fc4c020fbfb3135480f00cec91e1fca4fa1fa4496f16a404f20e688be0a2b9f1d0e8481eaf540c8d6468274bcf55733c6ba85ad3a2429b57273d62b6f961356ae331283476d15baab521f4912964ad124f70c21fb74c27ebf3e190e6ed83767ea97455bdbaf86ab7f73e2df66bc1b0bb16051b6d8c0c6814e18a83166cb925d09b190e77ad851057438d3e7fe02561a2eb21a9d5c799e78da38f8c5dca60eb92e426dcfbda46e4750205526555e2873be3075007d255f72adb8aca2759c66f05edd7caf11a40a810bd62c4ba1581b31a97c3d6557ec3ba82997ce95c369cadd04c4e71544ab7146aafa60ca5df9ead98800954f1a87940d0c252759877f9a8b7caa5db21c63760f4aa4eea7943acd66aa06daa47b9eea79c2785264a84f8e3608fb344b27f1141810fe7e1df1c47c04714e6ddaecdf1679bce2a5204cf616db246c76253681a240a0061ba82eb9eea7eaa5b3a53b4da15f60a125fae5e956162be192e6fe7d56653e594266da2122d4c32b0cdbc9534701b0413d6c47abcc411ebf376cb47f93ed1574447074244841e5975b30f9567bba6e9c86e793ed13f12f47ffe7133203352158bec1def9ee6f5762e344edf9bc997925a2652e8f4bc9c6c8f15814568cab24e4f25b9c4ac51f1bac5a0414079953c1f3bfbd7cf1eacd935fde9cd83aea5c0fbd1bc3d283bd4b1ef51663b8e601ac358d371d609420c52d42fd6136487548974716c458803b25507f0cc36938a3e13fe797640bd233da915b901242941e8d272c4517791692cb003c36f1d349e3a94e574246c9f5e90c9b5567e5edc2a6b23deafe483c663ef0233d7841136421ed22cc346dcf58c39eca1e6b3a9eb073fc45d79b52f2141a774303ff28d9a740ea9f72030a600f0bd895ab80565725f4bcee8ea57687520363677a88529135bb3352de94a9799120ba5d25851add70ea7456e359ab864e95d7fa4155b5097c7c1aa74b51b729efa04f4047af50ddaed12bb6680db88b28a5a099156fd531ed7c7c49f9b427b7943d2949a5c8d1c649b3edfcff2ea63e4930387b6cc3f6ea59a995aae1f1c6ef5a75f296cff3c94d9331fac96291c859062b149ec0d1816b9db12c67f32c17e65451665301f7ea307674d9cf8bd21dd6274f9239bbec324960430ecdcc50c77d3e1ec7ca8382703199378f556b10ffc2baec8945a37b461ad90df35db9415c97221d9f68c1c28b229ea6521c7adcb11b579c5f7ace4e68680f58d809acc0a9d7b6c78564ab3c7224d3b8301a51914754bfb352a889cf7ee0451cb1dff88a17511e2fe4dccf441ec3599b8db83c4228c3e53c1b8b44bd2a01c9f2038fae46f270fa5b4168a5ea53eb0a90afa86ca473517d1b05a79f67f8d28b9d3152556a9cf62f5f4d6c45595a94f9322ab3bcd5915b30812565ec649b83cb5c10837f25029c8db7897d7dbdccf36cca4beaa54791ea37fda6ed336778159c069f131d704efe545528160736156bdb2bf3aac5014756a6ca8b9a2f47bfa89931abce238a767d2f0242f88ac9c0a9f2f66db15c88fceddbfa41aa29a9504cb3f0dbb158e42292cc482d1f51b61081bef55be4621567cb2260d132cf455afaf1b9b6c4aad40f4cd63c5768d93e6b9db08b7b2db66f30b37dbb0c5b17f730a6b3ee578fbd4c042fe06647d553fd90a824745a94828f5bf59122890bdbdb48ca7b3369a72a8cf18fcf5ebe7af6f4c99be72f7e794d7de35ed27b0c73010156d2321ec5495c6e02e8946b6cd0b76aba5f3d74b433772d55e8a7aa0602da91ab20d92b91c32bae61efb8374098321b672c17f36c0537dd1ae2004bcd711784495d4bf4d4a73e9d7ed2d07dff53b8317e3171c7de04e4e03b614f67793617017bb110390fd86b3ee1791cb09f7e0a7b47fb017bfeecd1fe56522ab4b752f1c1e75051f79d082b3045c25dd53c009743b8af578b402dc00612e8cdab16c1a9cd19fa590ce9def9efc696da77d954fb63a95a698e30a8dbfd2f4610dfade26e74f16bff63c853e9b34725bfdc21d6330ecf54cdd36cc6c77c61bc645f65239197eca5485391b70a26105a07a8297a5bdd857b08fe6c3291aa2482eadb2c15bd28870616801feeb3b04a9f781a0bacae3d8d9338159cea6e15cdd0ddcbe426f13cfdf7251f6fadc3f66aeabd5896b755ecca9a6da9ea0f3b35ed6ec320f7c976c9fa676cd03bea40968a8ad634e81dc99e99def9ee925d0468b7bbddb2637bc2ba987ec0efced3e5288e6ea543132d6eaddd96bc5742e31a0fdb572fce2a7469c67647c2341247d3a664dd334914dba5dab9faf725cfcb9d88b38559b663e8b6eb48b4a73e34f24f03d24fa0d3ed8ce4130b3bd740b038dd9d60cd44bb054b13c9b6725733d64fa4da9db9ec166e7b1d3bd78a555681075a5156b441c2c05f2f9fb33e1b6264883a52de86139014715a83b29e8ab776520ddef455e3dc6365a3107a76bdc86e9bef334802fa980d6838be61c0c2811672614d9f5f2ccb1d91873ae95f9762ef02fab29ebe409046f4e025affb5d612797712c6c0deb8555d8ddb8753b991ab8b666f8b0933430edd3386f16d925fbbe76440d020779a5789f9710d3a3dcc23372b7686ad9616d8dcc13190ddcbd7534b711dd61fdc6513490bdd25b233a30ea4bddaa497851366c987075c2ce58d87b30088f1e129bcf823c42d2516bc2d33f9e65bf591030e844efa00ac53dd2d2de5d80cab7607d76d87093accbdb43cdfd2f9f77f44fa946b643d667bc7e22ba90bcb076cd9c41bab03d2b2d612115a05e394df52b8168b410fa3a575f72aefc9932627ac739da22ceffe91345c48cac54134e75b7193b3cfad798321cff5689f92517de6eac7267e41884cfe51bc5353fb8aef1b7f18ba709b7db0586f542b5baa8151f9fd644554d761adb97636d5c08776c7277ada46d47de2ed8de196b87bda3e1918e6ea6c9b075b7f454eb664c6a8cb5aacb0fd9328db62ab3722b56c6869e9e09a8843b7bfd543563d52b0196c9b0f7e0a8c681e041efe878d870c237f5873bd44712498a5860a4c8a0f7a0463420620a7d1bea616f5883fbd1818fbdb1fa716dfd87871a4395276fa72d709fdf733a877ade810d876a5dd776b87ee6a19a5e5328123482dabb04652053b62a85f3442337a6db2f7ebd80edf6b4ad6c27ab658d75ee0f3255c2158bdb1e3bd34431347cf95c872579f9fc143fbd7af2e3db97cf5ebdfdf1d95fd81983b36af870a00a7f7cf1eb0f3f3f7b0bd5e0c83954057f7df2f34fe673df7cfef75f9fbc7af3ec15293954256ffefee2ed9bbf3e7ff5e36b8a8df5d9c1e92e61117a114f579c464710d78b2c2f8b3f87d5f8084f13c173f43d106919e782616dc68b228b62a0bdf23450ee7010aea1e215063db8c1580ecad1007f4bc6410f03f070165c3fb791add09b772823cb0baadbd03330c2a8bcee01dc2b11956d4c978825eb785ccef41f338cd0d9700ffed4444bbcb8b7e0e5ece21e7492b35c44254fa789402f1888460351e6f254e485e4ae4556c4184ce43a609b0ec2718517e953c41f046babeea88e80a78d7965f12ee7e37859bcc35693443750212990e89548c7228fd3e9d32c2dc57539fcf18645a57e13aa266bf82353c54d0f4975856bc6af63131f28cab27c1ca7bc14e61d94254251720c17b4c8e2b411f14621de7c69c4404285dcd46d15f8bda91212bca616163455c319d1d5d4bcf379b64c4bd68e53b688af455274cc5826d932af4c1b48a2194fc70999635eb0325b7413312903f895cb7e046c94956536f7fe9250f868a08f9e298fc9fa50dd7ae53ee28fcaeb8049660c98c373811a93b347799f54904c13cf294e15844622a595c20b6639c7171f3a7bc6aed93ecb9d82329367804de57b8e916ea1869e5c1702c9a02a9ba9b4ae8717a5140052d4bfc9e40a2cb345c7f12b843e7da75aba7f1fbaf29d42ebba1696d73d9e476d332f01cb03d67df93c605d25afe933320daea6cbc02bd0800db64063f3506110b02dd8b13304dca0a7f0c4919a0eb7323c452644bab9d3686eeda3ae423ac8f6abd56880d04f98895aa2568834a825cf6e2d3815298f4549568897bc9cb52d80cb7b9ba61705124c4a9e76cdaaacf5591fe77cfd3273ef07605917e526117a21eb550e51c0e32c75bdfec11de7fac564520839dbfa87dc8c0225a85e011a6227c8f918d26d2884ece34736907a25d1721c4f21e80e795b8d7fd7e6c735a16901c6e6be76576b3568ec5fdffcede7e7733e15ca0de8b2a543ef54e1707b348015a62af84ab47d0e2a739e16092f85338566da20c2ba14827e899c23e8585b4d4a17476664a3f942252781d17fb87c60f9a528b3dced2e1e042ade7d7446e2e217fe8b91ea1f3fea7decbb3a738fefa125db1d89699c5a3687efc53a2ea3999a6e1a89ccfa2044c9722c0a16c579a4d308a8f74d277415c845a79856b1f020b06ab2bbb0ea16dc2817fc4afd15f142b05699c7b8a19fd42d4ab66fcd29720e21b23e362cb514732be494d9e6e47ad83f73b56fa78f499cfe776a6777b24a71f50ad50b4b59fb4893e84439f80cbb01faa3194fa7784c9027c1773c8fdee9231fcb2604dfbbf74b3ece7919474f97b99cb377ea5c179726205ac146a22c850ede5de053396cb720b87832cf8a9271c5853d79100e8fa5b6a61bc6e3f822cfc6cb4814169fd4d9577101c1ca09422015c6edce721d70408edd3800ca71832a1fcbbec8214679acc2a2ab10201a17f44939d32b55b0c77ed2dedc6351f23829025608a1f4c924c9d652257ef9aaa0335093f14085cbebeb40ecfdb82896a2e81f1d3d7af089351f1e3d344c43f60a76a605ca1e52d71a6be521e7ccaacd353bcc45a9b623ad5e2a4e65fbe4e42bd956e23275366e1dc5f9dbeb1851c3ba640b645dbb0dd2ee8130625d26b77ffc55515b2cc27d8b6343b1d72134ba90b37d505ca473fb5b3a87086bd4293ad00dc5b5a55ffb4ebfd83efb34c12bd79f150d60f4af2822843160f25efffbab37e1dba1914c953d4fea48acab94948df93554136c7fd16d91f68d286d4aa85a363120fd3d78f25ab0729667cbe94c1da75cd9470657cfb69dea30ea79b506d0d9a3ea79b4d3b401d4f15f23701d833500d773d0a7b046946745e150f093e70250fdabcec4edc4257ac81da6edb699a852bc2879fe954a2e7033cf7da54f3d17c9aaff3db9a83a96312f66f56702e79457a75c57468a8dd60faebe0fce916a1227899197700e2df3ec4ab46f8bfa4843f5805d54a998f158b8e6d38bfa377358072d98f85bc5c06c80e7b9e0be9df4e2b6d8a235310ae2026c17cfd327b92009c5dbd087009a714c156251c44996b233168aeef129ebf7e1871ced9ce7d318127ea1bd150de451b49c2f13b888800c303def952d1a91afd9f7d0560f6c625dd3ccfdfb06e03b0440e3e03e81d0738a801b8da9cc167588361a91b2561a4cce044749bcf02802361d871e153345cd999c6a4b668081e9614007d5653e84ea63d7c0539cb28f1e5f2ed3fa8e3b5d76ad1536d7a85c58fe78edbb2cfd267292c40bf73ebf142aad807abba93efc1ca7e2949a9fe02b5137c957340fcde3f13811ae29089e1fc6635c1267acad3bd49312403578ede635f34485ae8d5d678f75ad0d3b31c3eb556c494d956d0d766230d59a4cddb1f1492972086dfc0d52f0e3473bfa6f5c0800a818c4548f2c0182e6f6ebab6a7205b5e3bea911b3b646b5a97ab3140d10a25e17765ce3ea27a3c6d5f52116b9323f988c74fedc40eee22c01c9f6527dfc0f3add14e017715dfe47701754ffb90dd57ffaa8d4f02a4d5afea9edee8e68fe733b1adb1b436fefc3a6d3ec7fa0ae27cfec0df41fe470a0ae93f17ed9753768bc2597b0ff003f03ec1321017e39fd72a32637833b8e7d9cf3f52b5b4b6dfe7f3829ea9aa58f14ed4653b7115a029201ab57dca6cc7bca6d595219a86b5244d4693585281b9e1a170d2fff7184eaf9ff2c2ecea1d2258869faf719fbfda66370b94ba7df676f5efcf8a2bd3ae89c6802b73031440b5fc09909ed31701dd061c5782e7406099e8e01533913b968491d32cad2222e4ac80ac98176ca2343078491b5254573d3da45aae9d593b468ebef2a6a812a84541d27ac954f47bc3d08e0fff7c24e2b20303f65a981fbd3f1f171a5f0273e8f930dbcb6feab4856a28c23ce7e1198ebce7c917f3cc963e842c1d3a20b592c2feef9d85ec71fc4090b8795efe5261127ac9566f95c2221c552cff8abc0f4f0610f6b16b36c2dbf1727a0985fa4185501f39564b9784bd849ff3400ab8657a2c8225b9e8aaa34430571b799643430629931ce9ebe7e8d9f0b0cc3af969dabde0340973da10814a4e2dbdfb13a46c4f071b2d724cce758ac44922d44de9b671fe224c154d322edfefaba3fcea2a2ff7731ea3f7dfdba2f31d4090112c217e7022e0325b45a4cb0e943fb36f01052cbc9da01557a6011dc0570029cd5f1176cba4c12bdee2eeceb67851c2e351f33f2c73e6bb1163b61ad964abbb3af6055ee5e05acfeaa8136bd96858b6bd6720ab0973a218e71eee249cc0b4f6cabf5eac9f66a1a9cb736e693efee55e530a94e69670b13d9df3d82b16221a2781247c823efe4581a42d67fd45c4523e0276685c943e982e785606d31edb1b0771cb05678b8b896ebfbc1d1b7f29fb0772ce6ad4e93af0e10528586068e05872be2a403c11021b87d91252b79bc4d7819af841e5d636a1dc0896e80129c12c612a40deded494921b57495f6418a59c859d8a90d94bbf30a926d76b1cd8badf93cca8c8a2d3fd83e2e111a808597d10c2299b55b2db6af52a5f6e073bbff5f6d148b1fdb1717e3fdf6e3938b8b9efcd579dc692fae3f8af9c76f3b8f3b7feed31c2cdf68941f3f6aece7e1a54a8b8142b626e2a8a19daf9beb4cb7fb1ad7f0b27223ad8b0e6c822c34ff2cae89f199e431716c44df5a186cac7fc6c2c160bb45c7edf7b6dc12352b4ba70401a9bde063c802a364395c0d2e72d1954ade12236f8dcb597f9b9fda472ddcf5da7a3e31598f035608cc6761c2c94afde0cdab1f7e063d324b455a060a2d9cf102c9be3c1dab1ea17ea9a38991e04a100a5e94246425cb520cba34d81e66490f59e5566ba3eb8deb1485b60ad749e636ce7f89781bf3b580470c38f98c02969cd684b8d45b860a2a56495a2437ed7d4ca851660bf08cb1674b5b865617a774644b95edc5294e6c3118aa48612532293b03df3c89d156736a785c6aab668b13569a835a8e4222371fb067276c64bec8ce9cb0c4fc3d538245ee67160aa6e984256c9fe5aa0b0dabe1a594f185523eb496e966ccf034935a23a5ae2a1519b570307d1b8601f31ac0d402b0bdf8494b5cc6ac6b190e35af970b798ec08d79cfebb9dc70d1191ab49876675be856e88504235c5a176212f5ea1fad36e968973d2c264e5bea82d54b91a2a3374e94061c78787b9e86dc21188118679679264a1fdfd204aaecdb1a41089b8e3f219b95b306355aba9fb51b9ab6489a9ab6383a6a13343d28e06000f7cae6139e09b6d1129dbdb610139ca4ec025143942a2669260769d56a913503bf949299e31b8daa727cea2c6ff9a961b93d936300e71927a3d1625916efdcbc83954508e103b560afcd21a462f1233ab914758a249d94a908e056578e02e23629bf998417653d4613423642a775954e43f7427bcbeb085a46c772d3e6a8adeec2244d2181b3d93b851a3cb07190da3060f0a347101b89289b2bd2a5628d036dd23e75baa11d3bac4855edae4dfda4dadfdebca1589c4e32d9ba96863687530ae967e098c547d9b244fd77091fe2f4a229a389acd78b7834137c94406293bfab90a0a05064ec1dc4d3877464b8344c14515da9b77dc3567a381184c84a015373649243c9be38d2d13441528157923668a54c2da94a8e056cedf63c0b4a0345703f62adcd3e561741ae2156ada9ad06ea46a023aeb424b7595d9222db39f857a373ae1c08a56a1320288f51c82156e986a71635a472f4ba4153dadea913dba3f1e98e4e32b8ec3038bd24142edf561a244dd69e09bc0c2a7e14b3dae3f79c97b3e6b3b736410eaba76e93518248ce098fca2c2f5891e526be5528d71bc46140da6fd12fb03aec695bb46025e1ced8b91306fe7d6eefef6d6b747155d753a89283bfcf4b3f858d9dd36f595c796c0e02609994bdc5b298b563d7c5d916a833194ddf436748ddf641cfcfced4af8f6c20f993f5fbce519cb3e2fd92e73a89a43d19dad664f54acc4a052067c466d1e5011b550fb29c75d948d7eff416d9a2ededd688ccbd21cda6e140059081df4e5cd96bf79afc1a8f6c7a9e926c2a21d4c3f09f5ffc251c3c83cb73f2b79c25a6bffc12e2e90c9c419fce4474a59ee26589608b6c2d7278ac150e02038546e1319e1e2749c6ed232d740086606b799ee534335c96e722d2a9bc54440289fec5241cb889ddf5981c4e2b5e12e06b985cf3623e1c041697f550d73b1ea9fa98b4796288d77c31259732b99319fe41d752733bd5bb5dcc00ecad37318f3efb2606fb4408805f0c9da6a27c55264f20f85e4eaf68e45cff873ab0bbd12315f35e9fd4b134591651f91ff2fca8fed50fc1aef56252ec5888f2ef78da34d8d6041b563b636baf9adc169f24f134a5199fe4df9eb8826fb8e146222d69d27abaca25548daf2929451c70c26eb1c7ac250fd260fec54f5ef7ae5f264b1a2ef95aa92f553a5db3aeb35f690c12ff4f59fe7399bb68e252ccff4e26c543658a1d7437ce0dd954943f9779cd9c7fca3cef389f5282892289d3b23b8e0bb99377c1ec9a66dd65ba2cc4b8bbe27971f739ae99c04f9983fd3bcdc15b3a0977195903d52ad353b71ecb2460cd8b322f13f6d85dcdde123e71e7bdedde9a662b91e7f158bc11d7e58fb1ac1983ef96ebe433d625aa71f4ea81a37396c7d33855260cb9f2c6168b5c394989e993bdcf7949ccc7eaa119039f25bcf2864f8a58ba09a9e63847fbde54943a6c3884266db74c33ad4ed008fb328fb33c2e3775e0c42a0dd50a5b8d82139a04ac15cfa594e569d9a2ee578b5cac7cba3ae472762ee574b56d2208f5094d6a9b32d36100ebd5f1b1484429b6e0509e6464569a49a2db3a1f5c923fc2cb2d0e2439584ca1330e139f90e5003353cba827f5fc1ba85369859e27b5540e6a3a06a114e88eaa423798801b6e040e556adc615cff18556a2fedbc6b3c55ae7416aac2a812a412a1d9a9d9eeff1cf64c9f4c5f6c99e991e9892dab248e714a556f542fec77ec0bf681dcfcc672935d64f0f412deff076c158b7580b90602d93741f8b726bd0b0022ab38e77f4896c0a37209d9be80abacb3213e8c8d06018b745ec71a0b819316a6de3e7025360a90665d34d9eea0736e462d3c9470722c198f6d300d4cb1002e7b6c11afb2b2dd61335eb09110a9326429a3512cd606e1381345da32f66f1643e6119688121c3de232e649fc41988aba35d54f6b8c53777812e696345c1244a79ca84f3084b46767cc803a572ebaf84cd797e2fe4a6cce07eab6f06dcb8dc54fed28ae5b2030ce2dfd0518dd616cdbc7854c02af9335ac9d517cb7acec3276c0a613e631b20241649e7a695f2ca375d77b9d2c356ff5180f5c639414a64763b01a0d7a78a7ec5a3ea2d0afae52929c3af6118920ac45e04e6a14f6e6f1755bae115884bd7c3aaa3cd7ae9d9c0bdfce529701d44a86b8f849b2a8d0a32586275a5a4d6fe5f657cdde3e6b9bb4361ae11e8c801aa41aac72f6dab99ebb6f9437861434364589dd6b2199e232a7efdf88bcc5a4199858c40505e4902cc42ed6e63c24b8eb5410d724e2801ebc95bf4fec26aeac0eb6a5ba8428d099593c1e8320b436346db300d95457b12ead0bfa0588de5b49563281fa93dda4ec687ebf09982c27e2dd4c93fc0e6b94e61335095c9c7ec2c3fe1837719b8d867b39b4ebf2d0a0243eb39da09632d5b8e908295303d263a372ff978cf13456c6f8eef7f2ef37a67f9454d0f4c78fc0b6951099b7528d52cc25967171aa12cc97a9de5479a3a284af91c5bedca5a4aaafba8b1ae01b7afca9ceb2a48c172fb3ca7cfb9e5ea673d72730eb6a82890ff3c62d50efc1dd5bed192fe0f4b0a5212ac67e01a363db69af22eb6a80881f3552a0298f8f444033f9189f44612415c9a2e3d8a60ff405b37070b7d1e7760691dde1ee92a103296163120f0c037be934cd50152fbe5e97627122f52a555bdf87592c452916b242ba9c4be0e2841d23b8766445932d83f0226201e763545b4f58ab65102b9556451cc0a84c70dda6da41053f1dcb8382190f7e30936892e6bae32c44be8a6154f254913ed1052ff36c9a8ba220089785c8b56b9c248bce5b53666c12e7826529133c9ac14874602ca78b04fdd36cbe9047ad3ba087c0086ee727711a17335154fd552d8c35fa1d7c61aba7198c36766a3364b6f021fe64fa832afe97c92ad4bf50e87ab8051a1dd18c986e9a2daf0fdab9792a6a373c1d3a55ef1e76a17e2eb9fe6417d476a201dc73b3eefe0924737ab03bc17a50cf4ad5d2f5af77ed6fb682be69f4e8edbac8d4f9a79b993d31860ca5829db07030d0771e46b2d084192d554897bc95bc69962d0c805db42e80dbddea1a348eb9f6cb093bbf547689f74b51101f12efadc22de1164bad7a549c2e3c66baa12a0a20b07f838fd55a6072d00674da214213b682c414c4299b57821b1a0784847fd8b02ebc7ccd9702cfbc6a3da09bc19ce75762ccb811ef28f8450af7be104f2517c5224b8b7825d0cec023e5276dee4bf978fcc4f2841b6332b09d0e4caf03e898a33c3ad3074c6abf541d138c1263800c4fdbc5404b411d7a13838afaa324789aadcd09cc8219b29e99be3ae7d36f9c7eebc09996748e23c5cd16b7093bb85b5d27e0986fc0cfe34b3dd4333558e730e740d2869c9be1adc1af48dfe03ad7fcdda16af8f3093e8281f72d694627f0fd522cc53860739e421c2076154757a8b672368ea7a2280310e389dc71b309e33a2cd13acbc7c4b8e113a9a2c503a3a8456d58f0a79ccfedab5f271a5c24256bd2c8ac0e47a23707550c27713a86f45a6d8f41037257628855bd2ff179f5cce5d69b8ec36bd69ba45b1932a14cb148e248b495934f48dee35778933a713864a9a5e05dcea573a167014625a52be972bfcf5e5fc50baa4ac90698aa52b0655ac6096a5bf83a204bc1a827ae45b4b4b7df80e9cd0c9cd15236e38b854851515be459240a505be7995402c40a53c18adeb4c75af04deed02d8288a76355922dcb96aa8152b9cce3e954e46cbe9467a14428edb6e891e3a0192f61104247202126f75bc7e9385b07b5b94d3d54ced112ca60d9fc086b86588c6e6ab97bebab3b8268a799d536023e5ec945d37616ff8f99dcc1667ca5f688a25c4e26647b7cecb046751d7fef38b15812ecb286b78e52f5b669843bee3264cb529b983e52052c15d77014a39b92ce11a1c91312565f885c2329806a525e2659b690cc0a05059372142baf677122e466f15d758ba0d91dc881c391f8eeeaa7a53d2a6aec19d101d11f4f6d4c587082b912ac58e642b987dbe3289a70207873482adc213ada713838345d5294d57e2d9324cbf276db6ed7accb6a76f40eebb39a1d7ccfcc994d85e0690c6420244aafee869df40ea107bdddc123a315f93d1413013bf7559f4bc54876056fc55373320ed8793db63a2dc119daf767841244f0ecda03ad8737f6a0dc65bff1140bbd6b393b56353cc2fe7ebcdda5505ddec253342a89b59fb92a33b0e021f80c45fd193b6f4905a715b0d6225bc87f8a593c29e107f44ffe5aa6f8f1d2398dfe35cbaed0a9197d0ee7a29c65e30257081f8f5996eb43a17ea0a3db6a6a0af09ae630ac799a95f1048d28093c3216397bf2d39b67af48d3e6628b27a5c8c5b8f7ffd8fb17f6366e245118fe2bc8ccac494614292993cd848ee2e34b32d1398ee3cff26ce263f99341362876dcece674372532b1fefbfba0aa0014d0685e642733bb27b3cfc6620328dc0a85425dc553aa0abec700968cb7290379a7c89fc85a7edab1628f4a74e1a6c482e7cb6ad617aa9e0c28083b4456b7d2f341e8788a437be896d6e4b33563668ea85032b8247a6011d2ff3c300d8903b5703c29b579b8ea7fe2cf6c1a46c7c0edd8bcf0567330ce147a219b576bbe9c2bfa0cf8db37741e84941637ed0847e2b5f9fb0dc750733819c60da645f98d9cccba3c177d70036b3412a7668b3ae240bc536ba0dd0febee516f5017ff582c54f95856aadba352c882df3de6967f6390792386f83ab88d2b05ea5eae2e8c2f52fb32d9858a333b7804aff4d90bf321c752f973f242275d9cc2dc42bd8e47a33d7d915eef36ec623c199afc8766d0a46d2ca6e412f01a37e8cd266b72fd7f7e6d1aac7105b4c38d6af9fc89387bd7061d2489762f746e7e0164873bab209d0006d791114d5e269992f97221d4aa2ea590752d2733df3fb15b2d273381f92e00a25944cdf28dd1c311ad4012951b2ad803dd3c746a74eac02aca7c8deca23bde212959e6bb1213d4202dc706cbedf65aeb9b4f74712030e33403e2ec5b52790ad01c6e385b087a07ba4153eaee802cb5bed95cc3e85b8d460321e76dcd089fdc9cc0cea4850c8d7c6ae0508d17f365bc2509f6234d4c2699ac2a9b552391b5ac14da4a944596e915ec6669aefa622c4bb83c7a94b9056b3eb6153d5d2ff249048d674d0ff4b8d19aed5adc46a7a13ed777f022d50e1816180777133259488dd6d2ce182f4ae4638da2e7699a2be7b00860482288c970b0da2d7ba71034eaf925e896a332c99dc7161d18441bda7f64db87450b2c8c568c9c97c0b2083d4589f382f8cd97f4e38937eb1f884723900f45a2caf41a72c2585c99cbb535334335148b3de0ea1dda180a850ff4e54ce1a08c3f8e1559b5ab115034a5ae549ea0a165b5c9173589cd69648c253bba8b2bb0d0076b1223ffee8c8b32d1d7f8029c1cc3cf91aa4fa4e61e1b9f307c6350f0bf8b348fc105f3599081bc89eee81db6f37fdc5ede712323df70b5cd37f0f4c04de11b10352069278b7111dc5c45c5df733530971707e54ab3347f773e9199aaaca805243e092d82f7f992acb7e660cefbbdaa65b737d0df3c7dfe7291c85a413f6c42d19910896f19208b7c4863dc5520498cb40cc6ca4acd629975e34629d09559c801fe64e5e61a30b089a479e0b1d10f8bdac131a8ece03101592d07ab87abb43a7b62a5a7e2fd7bf1895f94e60418c2f3d0384ca9274de3f0c28abaad1b9ffeaaaad7476f0669e25b07d991addb47b6de38b2757c64ebc6c8d6d191ade3233368e1967e27ede8407736a01eabd70ef5dedc0fa06a64d90da41b02209883d90b6102fe7e5b94678917f74c668aad4fb3035c8dd754d11fe9e6086b57aa06ab1ae8d8eb35da9d3bcfb417fb75058776efae5677e9cacd6a878edcb2932d50b02cdd5e5bdce0ad13bd63ef7ca5c2de4bd582ccd81a096b57bfc2f71875a2aaba2cd631b0f0b805d0fa58b0631a7b83b98a7d98605cbb06b9fff4f66e389a6d14dbdd2e4dded8374e849af7ee813fbffebb6b477e49565686ae5ba1c425bf5ea01c0eea85f7928ecec273acdf760f37e7f13b4cc295a758d03e3576b37fbccb141e1f8deb1066af49bae71c3da75585fa44903768f7238a73a0e3db54e6a61b5481f35fefdfc3ba7a5becdca66f9ddecbdd167cac151ad83740380ea0b9d40ff3e44570b49b98e4ac0b91fe070374b70a9103474661417cc1c251dfc0f3da2005a15175a9860d0fd1242ce3659a253f94ffe0cdf6c29b5d7825c21ec30b18ace97a1f4ec5eb37bef1412e80c586b4a7e8239dad4d7a48682293040c588720dc001b4bab33eb4a4da59795a8520c7e6ee1964a6687753a272b99aad717374ae40a9fddf3224f6b4c52595137f322d14f15d2294234af753e9995459efee2c0d633b29dc965c65eec723281449e57d97ac0b92e24b420460a48332ff7848e4e315e29d28c57ce86118c1d4bb5c8e444613015ec1f4474c6d474e0a0c56e00d36d5fcc951f45808d0dc0debb675c8bd2ea9b1584991e670aca7cc7836627f10eac05364396f0c40e87e2853ad48bcf1638cd7141b6ae41518a74aab77a9e56954a2c4899af051e1bdadc42cc7d6d28a8c101ed9c71ad060ccfbd0ad377611cd10ba3e9d6830c1e581b3217cc9480b8b709cce0b05a2e16594a61718c5d2f1d96c34c5dab4cd84096adac8c11ecef6ce3a1171f1b795a360cc8fbeb6ddff9869a5bcbbe782ccf6d9e906ffaac2ea70ac609b4cf097979a5b8233028288cff59552ccb896a443779a7d618b3fd526302c46cb79ff4684271bd9bcf25f617ed8509ec6f2fe2a278da4462d546dcafbf52f58e0bbc64990ae12bc8e4f522d18392d988cc151175ea21f2128f99576ef0e848f3abff6a043aa1fbdfbf78ee372eaf8adf948dab9fee6f53d7dce1ac82674501577ffb0d6fc0bc4edf0cdc5cbc198414c2be680923c387a9b971b683f3928bb61fa1df7fd1769da21e77b7b1407b2c7903c0060a2621d65531158b5219c91d3a9d333d13d05217f7c445995d68ccce6b4bb02b6562b752b66824f453ba6313b51269e50cfb2fe276b558f1d0dc12c42ff388866720aa3bd397f6544ed42d0db920837a4b4bf5430f23ddedf94ed8ce5437794f2e63323efa1bc887b99135a07bf78c22ab2532948903a0416d12d777191ffcabb3430b4c378c580ffff5a274b67414f462a76d62c24177c4ad46cf36fac74fd30cdd61412b0d3225ff7b609b88a58170d7e6d665c2ddb04b13bcd6c64ad84d8ab06969392936dcf9acb8b62acf7664da20d0a4eda2cbc3210a6fbdac3033b8511bd107587256cff9acfb57bca50cd1c73bd3f1e3fddf80abbc55a05146f52aac1199d59cfaa07cc7f552c9e4ffa8357f399c4fca745183753be393681d2890dc6960e03d12fe433c31d28d3803632bb43dd4614f47b8b584559b9ebcfef26c7dfca233bddf885b06d2a268464e0f403c101df8633f5b1331d23f2d50dc0de3ec4b48de7ded782644a9d7d4b9e301ed6269048d15d32ed92253f2c646388c841a7311e9aabb9dcded0773372a1f1e2d4d87fd53c62ba3f9059d528fef63149d6a41f83e80d0b434c72abe40ffc3c9c4aec7ffe39cfd5d0ffec73ed8674c88f6a1273e3cdcc3a1784b48f616c37ebb188b7e3050fdf0740141019802a3c20aa6699ea8689f322df4cc2ca891410cd7b189fad1f708a42db6581a127e8b74dcbd160358fa1bc71ff61f4ec2b613b11d288ea539ef7c82e2539c46a1a137ef18ade1d4c68fa7dab0ca0af8a048a89560e1ee6f58b61d42a75cc4c2a77cdc250a7641d7fdfdd6d3f788e151490367fec63b99d67c5a2af58beaf294403b5d1568bdfb9dbe194306df0857cd0042818821f097c6ef9e7effc5a42503803e034d3658f1aadec02a55ef342aff19d1aa0ab583e524cc7b83122b6f2ba6cc88601ff6d1c482f0978755b8a299191edcadab57620953cbba322a1ff0f5231c43c8eeb3d0fd96ddb755dda7a01a45dce3d5e05348f4a35df2f388cb350026ec5130322b188f977aebd28df6d47bd367514bfcf753638aadc362ab100c89974487e32aec3a941f29fee486a1fc88392d2243a19206bcd6be77e50d3539a08b3f7afe36e9737c754d15443d0a4faef56bf429503750eaecee157559599ee5e30cdd84a22dd5f5e61718321db03d747fd0d6780bf0497305e24926379210de8b19fd66518665e6adf22b6fb9b4396cb3fe77bdb0e3d7b55e4b7355fb01cf6a3b7353ce47c3abdd6ea58cfaf7ee58efeb2a7e179531ab952fe7df2b5f57dc1480e6cbf913a71562e516b94c8daf0cc09854d46850a972df767e687a08245d1cf2d751c88334af54595b4d0fd5e9db211fda667b1f681f34372ac2b03f9362c94e1320aa93160362428d1033d123b2a1b946a8e240a4fb8fd47914b5a10f8c04acf88d7f91b7c96456e52da5214c3eea18a3f943046956617774a7b1168b562b9c40edee2293ef01ff7c964edbed7c42c5beae7c873e009bb7e1c5064b02affe869da07ae1de894371b2f7a0ff81ae6fad4b13747dd4ec360cf2d47403d839dc5312715b6880b34d5e3efc8771217d7e263e1518f27c7b2815654fb0f5839b8c36b0afb1fc45039e2f34ceca76fe3c9d4e3b71fef524f84cc19f4de46e7edeedba5a771dcc673e31d9d7279e6f8e2ceb87948456969381fb70dfd45179c26b989fb61cb2027e8f89ebb10afb626b41a65b5b8bb719429b6259abf2854cd2a573ea5911bc95fdb2a62f462a321c8a27a5bc113217699eab52e0f288f11a660d8152c0077382aaf852dee86f5224c5729ca9430ca28e8d08de377926cb2b3447d030008806305e8ba3c1679f992c8875215496ced35cd64a5c6529a6021cabfa46a99c4082742b96c8577f93e5a4bbea8b753f9c7f9f6fcb215fb9bedb8c03feddf9366950b012084a7ccd97da39726ed90c0681c84a73c0bc97430ea36d909ba6c5ec9a3cd98cdf6d5b27e6480fc549d0092b717e5c94f9bfa854b0237abbbbd655cf9e1f8d35df2eb3ec715a4e32850f980a4fd3f51c16a38fd8c70ed6b64363d28ba0c42467da235ebd7128c581a662664fc2737d3f0ac1ebdb6189ab71dae8e5de3df832b593e64ee95ee3835336202c63ad0e0feffba469db7980d38ef8d544b37e7431c2af1c991cf38ffc54303c9fb3d263a8eab2786774b37b8ff77aee1fe37060b1e17fa481363116f1d44353869f482d4ff590d98d821eb350d6694550dd7d96e6ca08002c08fc40f72aabf8bf0b20331db8233b2da7bc1d620bb4b1ba5659876f94c1ec18daee7e864388c1e4a367ee37c11473c6f63e21a6e1a693d14602195ed9f0bfc4ff5cea4b7043f04c0abedb91e5a463fda69ecab1ca5ec8fc8af3b910cfe727ef7d713db7c2002f942c24568a28cfba36430e0213877a4d577d71d2135fb9f439d7f3418957d4812e8727b959aa935e106bd724196c44004ef3700620a3fd89e26bbcbadb4c80772ad2bc7e41d9994d38d750a80a9bf76d59ccc151b4abf1f5d71569c57eea8b35fdf9eab6779fc39644ffa37d0c24bb12e8bd9fa289696b1353e1be1778e65ce6699d568afa2bf54a71b01e8b793d0f394c2bd07217d6f57c10dc5936e48eadf51583eba959da6ea6db00128ef66bdb6f109f0dd8875d20b40e44b68dc22d1de6a44aa710bf23452b60583f132ab558a87c08c71457972f18719ad03164b5a6199d8ae022c7613a3ec0c712ec9af8b853d1b558f0356c04e7f2eedd7338f2d56940c37844047346fd21debbe775b6ebe1bb52f56378e500f6b7c92722a78e4a66329b1accea7af88734c121c0d0de5ca69d5b9660290ec2d9b3c691c8cb9a34193e7552545d3ba69ef89475c463325fcf076bd3a44af3b626174e8fc157ec61a9a2fe71ed4b45a376afe36e972d0e92578ee943d13d31b9d89e9ff5f4a8ba9cec7ad7db49cff0e254eadd5927818fd50ed1ad376fb97e15972a4a73c4c1f6899d7029289c474d7c1f0350c205363b84c026042010438277d416f4e85afc6013d00b1b8ca117c193ae45942d6d6308b3c9427652afec32a366725273bd62fb2ef872816e3ba7d9130ff0653db20688188266c2b584b44ee1dced6fb6d6a360ed6d1db66d9484702e57cdfdf4de99476eb9d9f79157c954707834f2d18a85e4495cb965d44c29e35c473cbcdaf57c3049cbc9723e55a5d2e477084f07be971741d64a60e6e4350f09a83f4dd32c336a06bd23beecea7ef8c0e0557d2b4bef2db9c34371e34b36ce3a73014093eddd937fde0cec4e3cb40119f2d117f59e0f3abe39dd8857cdb6856ca0c77fb0b5bde5dbdf5ce28fb8c01f7d79e38bebaf14e3adf9a391ad6ddb6338b63e94fcaa1bcaa8ad499b4d92ced35ffd0592ccb042db864b7d5b32db7b92e1bb4aa4f5c39889a4c19d4bdf9c4783bf3ac97128a7de209226b1f3677149f5265936c54a1989ce7859d7a138fb89ac6636ceb7ff1963a4e8211f05a53650ca4874e669ad4a077522178fd42f2931875510ff4c63097d82040b10d9136ccc89d996a59256648bf1fb720592e2b4ae303c9b5ca5d5454cbcce5fc6d06c87a7b1aed7d9c92da5a9ac858b96a75af12e6830ae8a5ccfd542e67f971041545f48f48bdfd2e8026720a45952aa9c0c887b905e77921539c59d72cd101f09ddab16d4be1fd6476df8d334b79eaae2340035706e3469ceb39d67b2aa9f94f2263f2353a7c363be0a864cd04cb2a2f082bfa2f59a51b4f74d7cd4fffade3771c0d56886728d1b3a18474fdd59c3b49246a9e93ffcf995f080c30de059275f907d811ea0475bccc7b35acdbb0824b0cbb9e0d1be118967102d1e5e906221eb595f80de0e2a603e63b6a3c1fcc99b03516d50bd4b17faf16686c13e073e7a169768a695f377ee0d26453e9175d72b3a32f3f023edf1cd0c5096e842a9e43bf625f4f58baf062209ad864cd0bf749a96556d56e44aa69ea7ac1d88bf493805087a490b76f4a6dd2832c2890d87e21cf82ba1cf82f8819b421b39e763b9f0182f22ace2fdfbd6c31454e5dd9d7d23be04c2767ca4e9605ed4a25a2e164559e30225b29a39a48621ab5ac3d6a499c7d2f74bdcadab7fed30360017bb79338288d780497bc1ae5bbf2bacd6dfa53bacda8b8b912d507bc9ec30095b378069e5d7ad4327bbb72df09183d9911977e3b524b4c1513471ae95253475bf65e78242551622ad3b158a97302d3ac92bf342cc25a60698c99a401b026bc9c1eba337dee50504c7560be9891e9aeef765d17575568c709b6c51c0fe8477c35188621e4d3ede832647e6c1a9a31d02a3dce16820d0a478b01b451723d38d0fe6cd7ddf89bf7de5b0bc1b8ce293d353b30087e218b2717d62682b44848a8e3a20f010c040954adc003dbd920ba02910262ead9af414727b428853b9f008fc3e9b1b0b390d4301da591710ec1d7be415c20caf70427587356304701359c7510ff2088271f3eab81d7cecee883f68fc9b822bf6f67e949cecfb288167cc6ff62c59a0c8d6b151247a71ef0a17706f243a13781c77767bb1fce578fbe3a45187de35eef37028be731e7e17f52cad8d7ce8d87705349fffea7f7ee4c18dbe14ac5a76056a245ffdd52643333e0f73f180847b725cf9caae9ef84a840a2e337c4d478c2cddd70dafd9205edd7d10af7010ebbd06c1df4c482276783441c54eab2a0e97a42fbc09ed20e9c6496dd2231e08bfd04c1924d68196d1ce1997a074a26db6065ca3c815a388177d2cf829f6f1157d5cdb8f1fa81969914287d2d50b2661dc41bdd05022d8257203606bf3f1a4fe3b4ec7911d992490f72c40ddb887489ba01c1edc7a2d76d54b6c91a53b62885c9efbcd1512456d928ae8c1d32f4f63414a2b3b3756b8c2efbcd7357e5a375eebbbbfee0331d72676540c874255599ad787495ac971a60ee101921787d54c26c54d20d30b989bf8437c38148f8da99ee6f4501ac4c235d99df2232b68bea7c1275ca615b43fcb750350b7bb8d0e9f425b18f3f012ad77782e9cb43c179a1212c08fd89b6117597febf01a0ba2b11e4d0f9077b258d917e62ca37d9e4146df00dde357bcdbf9e4b7e43d4a35411dfc26535d7f383b3014619df377e962a19291e88c8bba2ee62df6bb479b1983b4fa2f55d6e94466ce44c45d53f7eee9ed4353d54f38fa864905be839d73e95d2108398a7cc67ad295b12b18439a862b592699aaecd7a24c555e536a56178f4557a670e4261fef0bb3b6b7061c363064f811f476dbecd564f624db723fadc095aa1fc912dbba7500aa75dc17ab93be581ff7c5faa40ffa6f6e9fe62d9ff3f894d914511fd7cea9e857c74406c5a185a53f9f98cf07fcf3fa98671e420e00ce53653515eb135b05158a6115ff09e3463653e9d5ac0e87c63b5b353a5b859d35abac69826b7f82eb13f3994df0d6b8d2f22b3453d37aa4d71d7fd6c562a4579f8e961ef348ef08fe46d41f89f509c06bb09cd58d5c40cafbbeb83eee8beb131fc57509d0e56bfd4abe3e1123f6e9447f3aa64f0dc80b595664cd4727d1471c955c7984992add37e5a51fa300dddc922b15723426b507b30b0473b232fda5c86b9979f15a692fc4d7c4a5bbe04c381a580efd775f74f43a77faa2034bdaf109a7f3613210bf22969b2046e0192a243a75b1e8f4fc0dae5eeb5a6f78024c6f7ead6b0b540c6ec2b95cfd08fffd8e3f1df40516b7db041dc4bb74214e5bf6cad6aafba2ec8b715f646c33784403f4f4a34cb9cee9449c8a03f836a88b050f6254ba12585d5e367665b862bc3073857a7b5c917f8875cfba0f0dcb3561b563e7aa1ec17298b1766bf195380203083112b5f81a96563cc07f46c244bd28a9999d48b7e40d4b6cf82336fc517f3147931aba5976c7bce5b8d1e5985a66d4d22c4137e3edb2468f59fcecc31590e657faca08a83add0ea70dc26f71e2863824ac49b33f343ff5c86c5522a4b62e4dd856ae491f841d8393c8691cc5ed65d1178e3a1bd9a8bf9ba0221f79cf0e3636fefa70a3b05f6f46d89593278ca84322025400caf3d64ec4014d6790c5fb7315ea46d7b03cd8d8fd593607e40ad99f634eab1afb4e0f755851cd1d72a7a377e9e227712a5636d497472a5e8953fd26098b2cb67c728d788c60eeddc3461a31319ad8288a4f6eef10100efede3d03e7fd7bb1125f9f7a4b7bef9e5889af7cf4ebf90d5fe9866bd650aff8bd7b62cdda212a464daa2d93ba8b20c456de45857c77bb2ddd4d650e123fb9ac0e203e38ff4fea0a2d453c6d6bce4ae1d7dd8c907445dd7d177ad07c0efeb1367fdc983f66be310895021641ff831bbd2b54977ddeaee4f5d5771bed68ca3d865a072e476d6bd3886d673bc209acc86f41774433eddbb98516331d75adf222493a1bc4cb845b78f0ef248531dccaa1132bb45bd2b788ef0894a122ae2baae95a6c90ab7db08cd07f58183c79e01137031b42169a2a23af0a24676a19ef4f5b9c23765808e83900fb2a0a76a7f56d1fed879a62eb7b8029ff5a9e6d177520a4baa8d76440ba26299d7ee9b03753a81f5a51f555bc3ac26322af30d0d0afab118c7524d61f6a59bd0b36d9072ac94be5b8ead2dbcd8cdee1957b33fab557acf6ef2e57bde0b2d29885947d65e96f0fc1b0977915d1f7a76845c58daaa8e439e90a3cdd0195bd605768e35abd7f915b691976fb10bab31fa9cfa7d897fd6c3a7c4e1dd902dedb0bd68b916e2d4a3591b5f29dd72fddf7fb51b5dd67dbd47631f9d7589646f845b12a699be64502c6669a1276382a5494a189ea415aa19178edcc0691cfd003bd2acab5936515649be759d75d9569a2d7ad1a71cd2c56fdbb2bd36d4cb1d1939abc5a17f5ba650c7af3a5756c7fe323d67669a0099c658736969c8536337caeca89ca6ba929e5d1e06f4cf158fa455f5ec4e47746eef6b8982f963565f3bcf853b1a8d3b9cc2efe242a395f644a54e92fa0a89ecb34af659a8bb12c2ba1feb99459b686d244a053d1a28404a0697e0549d832b9186c14994db0e7efd3fc1cba3a4f7f5198b388bca52bc677cfc1e2054a07972c7c870912846af07e90e0c35a321fdb003a08794b081deccd4ab2e669de77040b21bc4edf186bfbea752a0ec5f19b9e27b28804efc1e15fa9fa653a7957757b5b46a167c45b3dd79d7d5b94bab54b2982634dc5d7e2483c681b33803a849502adde3c35bc224558d215222f7fac771b4518998b8b3fa589026c31580986a7360fb41c5745b6ac51685bcfd2c9bb1c64b67aa3a64c9551942609a4f8542c2bc2c66a2eb34c553566b6b89699e8564a45f1a687f1bd09052be88f907091e65703c85d01d03581312613d95ac8ec46ae2b9befb28aa1777799d769266e20c5465924cb89a228993c18e883de4ee8fe6d5a3fa6b57a59cab4ae4c4e957299a9b26fa031d477eb766a13168e65f9d27cb6e7c0c4b9014883aa9693778f21088fad800885e506755d343e77ceb8e8ead932cb7e28ffa1f7aa6b874297fa83f821a601e051e6bd51b391b17f856773fa0b2863eab468119ec547608f0950a85318f9a776819a54d27005ba237f25833a3e47361c8a1f672a0f3038ad84caa745395149dfe1becc13a8b7b0002141ba48aff2a254c9c0427c56d4aa7bfea837d248358198f43249ac55e31472bba3076bd031e660e5db3f129dcf8ffea3d3b3c0316f075ddac29b9fa8d27c42a93151e29756667426990b9ba239be036fa15d954f29c893bfb2c7ed12c4c96c99bf1be19d32a4204aacf108d1803e81adde4810e9ea52a3939e27b3895325778bd9bd01fa8017ad3ef625f896d171afd24489f11affede6051887e9e500d06e376d8062bda9c7bdbe4fecac159dde8069916505c46ba111a4aa422a0414080007440712e127e9141c616a1472518a1d4a24a3c0f65593384d9b16720238b503cdc9d46a4fa24381627c621112923809a11b05edf5f056e215e1aa14235f409663f0646bd9c82f69dd208471108141fbc4ce760b11b09edd7dc044467570e8610cffe1902c031348d796d61562705a51281e1f0f9c499fb02e26c3a1bef0c00455665581c6dd9240420aa825651102aa09f0078d0b5a1f035c29932af301ed8fca1371e8087f59ebc5d1350fa16123308407854fd40eca9f270c3a36598bf4a8cf4738b49b30e403c1780f3e0c1ca69b18fd6b1918e4ea34a81e7aa5da9308508818590e87660b1c4eb3fa164a14de983e518a5e153e91827f3cc2744d51c1318ed7a5a6e2a72d81bfb8c034961fbbf980db2924e7c7cd354c6aaf8d1988bd05e25fed65653f368fa62d9acbd5a35893799a3f92e553a009db331cef1440b28fc7cdc4bf47cc88ef918b33efba1bc8c5225b77e78a058a73b2dcf60895101412b02d12a312bef38a883a46eb895867464d1e435ee2cf6ecf04ce2728ee050f0f6fb408eab0b907982d3af8d81ebc5e0dd76ff4237710ec2ca6b9aa541d14f4f6e9d1ee704b870c03bcfedcf7ddbb6ba25bacd31852baae23a5db06407be352c2babd1970748e0dc64377360ceffbee2b109caa688fe1c1639d0645be98ee0ee9c8b8b2c6cbf7bd256127e4f45962b4446cf742ff62fe1f917737ea72b6e7f40c125842b3d7e91b902ab0fc67417452af91b708865a1b17bedd9665f7bc4d6d292f0b2fd7457b0aa470843d26f5a592c1251215db1f4b3accf380f7ee371aae37375cb736e471e2b139f7586015d38843032b36b19cdb4de8dccdbe43b8765bb93560bb35a8f3abd2e7b8759d5ff5474fa94e0b016aa1910d450eb2515b27c3429b1511e3d4ea8f8631bf70026eabbe6866dbe0e950a961cfd32ffacbea4fcd4f1a78cb0fab773afeae8ab9aacb75dbd9702f9108262ed2eb62af48b5f1beb79fd0f03db4e1a8128685abc375d5953b05e15dc0aa81d2f1946a0fc008a05220f0f3aa39ab2d5739adbeb35fbdca8c4e12cdc4ccc23ed134e3b42f3e8d4a329b40deda47b28401c3482045abcda501ff147ec072a0d86d80e03cb7010a1ea28ede03b279d3763feef33ab482b083e2012ee8c84c0b4abdea2b0f927e48c51bce944cc4c8cc6a80416b3d48eb10925f578c3681f620593ba0283878ab8c3c0b5ad7d4581b792d9d8075e4416939423c232c70a1957beb69eab8a8ac84eb3aadd2719aa535e6158e24400417c037e250bc7479156389102bf16b5597697ef5facd2dd4cdd20a9239227f7cf664539a59c88da807ca0eb5ee77ebc10d0e25679e839b18922859cd83be91653d99a5f9d57fa59075585fd098bb583f0e786b9800d0466c6c283d7de74706d914d35d33063dedc66990bbb30f4d229ccfe6c4e5ac2b9e1f6038b44316e2bd708f1456c1fdefbd98eafb52bc079994f9db621c6b83964dd8468815fd8b7fd9bf597dfdd211ac2ca8cf6a325f88584d1f326670a42df1d337eac5457af4c3b4ebe6dd33eeafef6da717b507c30de0de3dc15f755e0a4ccf11957a03077cd695dd855b3e5ea8e0b26a7aa87dd18825107a72da0492bac71dcebc9a4ed50464ce2ed3f41de840e3989a530aa2950dae57a8c1b767dae9c7762457243e9c52ded6abf49a44a79af47c0025f3f2166da268d410e9d9ad789dcbb9320d7084fa8ba80b314df3a441074d872ffd096d5f584a0a6717960fb80f7d7a04d1529370c1793bef4a273ebb0bc3f7dc38982948708ea05b530a1a1f311c0a2a1566d287c7229dda8c306905d48452f20678dc4db97377a35f272c769dba87c14e0ca3618cf61123ed7693589e2824e0dee336f2746dbc8db73e63e99e0702d3501d0333d7452b29b83e067e0c938635910f9522c7557ed0b891b91de11774c563c6d96295277e61c5a8023d12ed1796fa109a1314f69889ece9b3a256344693c5d1684d26999c2f30e7b313b3cb52c90d84ab850d6e3d690153bc0d753624cbdcedd1c0397fcb66b43e078c5d894dafe9a569fb686c8f71a8a0a660a68e686733c27904d57b71f251303917d3e9f0cf7762b67cb92b9d2c2e74b5ea21e3de481a15ffc24757022c9f4b30bf3e026f37fc92e6f8e501fbc0aab3ae3233c34d7d6199ca93bdfa946058d7ec3fcddd776f2c5b19514db150709e427b5481f6857ecaf449950f6bf9b49926c96c11d8bfb73151b83b9fb4f14fbbb0b817751ae7725df95474d380b7f2ee3e3f5c472c6253049663fd887bf480b055d97c38d8c0a26783bab5c7ccc16dc11d5e0331887fb1586316df7c37f8f5a0f1b901c05b5c0ae1e250ed2b044e23063f1c8d024d34a61a5f8ba35eb078465b78704a95bcb5b8f5b726ca0b9374a0e54204e86681e1c5bfb9aa38103c1f90d54642d34361840d16f53d5af64988f35687598125d3571ee9e399e4ada14b4801b117a22466393ff1ae87f7ef0da531fbc14abde5a6f993197cb4b766501bdee8a0a5d11616a302051ed0900b2bb0add408498cf9a43b1a21bd319f50ce821fc581d1e99e6c6615b65cf74c58b5edba8fda506cd07a4090f4b8291746169e666ad571fcedbe461c8efdddd3e4cca2acbd269908de7b6b040bd1bc4af9454e62b0539cf9c01ca02efe0445bcf894f5d70b0b83a8d65cf33f4ff3ae996f6897dcb52c43a8fa3acba7699ed66bc762fa63c15fa0fdef8586f0bffab849933bb45817202a951f34cb0dd6e2bffde62988e1efbe81373f98c5dc4547b78b4a2aa68963a526ec1911e0208803262e51b26b9dc128acc5c005b7f01f51eddc01b1a89bee60ba75d98d0bbed569f54c3ed3d796c6ba1e5158fb49aefc4bcb280f2102453330f26deb64977973bafb283d5ad57d7b056c3529f0ddf08c91ca6dbfcd8c85a5e26f1d44d464a2216bd8d9b4c1f923782d620a7746ddf4dc7ccb85662493cfba7624a179440c809b822963447d0b6c469922cd03c84d2b84cdf063960fada082be02c2b9b9a306958d0309bbf05f790df87673037b8948f306a9e639d775517be8b9bf6ef661a1680b1aa383d0d9e68aa1d2fbadfe2ecbf138531b5d5eaa14dc632ff6f779217f1388138d1d896a0646c58bb218cb71b606eb4229b02251fef1da4487b1321eeb66d50808932623d1591dca555a1d1e757447b9528990b9387b22aac2c916263217a532b1dcada485889e899dbdc573a61f1911069bf0c6b336e331d02f9aae636ef52632cbc6a82b72dda6753c4df505058cd4e522295495776a3197ef94a8545e29903157138c1b8a36d537f0712e31640d1aec564286b11d09353b1d772184aa7c3b9ab45673cc40ee8d8b5db96019603213bb1764ade6035fc602a0f51b8075ec20198fb1ad60f062d4df539ec49f4dcc1bd881e88c44b7230e04b459d9af7d613fae838f763c03cd35757a9dd8cd1938ea713b4bc4ff5d4c2dfd7bb4a8d5a45609bb49dbed30617cff021b4cdfda3296b03f288c400a033ffa051807d07d339101ed171740cb7e3291b33c9bcc2d6b7b478bb1cda6512c1c3ce1f17d1664ed1fd02585570b792f2527331bccd60e0a3ed8e0b6ed8662bc5e6829b681756b5b96a62959ac830f5babc9b2aa8bb9890b3ca09fefdffba9f6f7b3fd82807c7b197ded63ace66d46f0fa6849f5fedaa35250b98a5995b9f93203129c3b17003d5193742eb3eed1e0f39e18452ae02b42df65c594c6a5dff30504ffe98807f86d249ec96776336944de1ab251accf23064162c4befb9da33f4104767e6122d632933efce3be576877701d29749be5f3e1541c58ee51ff7e9d98d11e15fdee067b3bd8e0b1a0baa69afd148d046c6ab1508356ca4094d255325f982002fb32fb7f245865bfd3ea5dba18d141c64407efdf0b7c91ae7aee6f26e580d000e6c77a244c4cd1db0041b65ada352957a56a88454c8be0532e9f56d126f33d8f92031fe558952beacb84ecf4124eba9260527f31ae2a2642493b961983b21d708c1b436ec0305ecdc72fb3e158a30c13e3d91742633ccdd7d25fadc42bc61af4fd75ebb61c25fb186fcc6c7b876c15da3a7355a21db584158d764401462387d7876c63cafae7481c080f284b19fef1042d510ee20ec2ba5d446cbb5de9745d46cc7d1b55ad10e863cb7b385b76de70a466332af21a5dc95cf483193a85ea7f3c3b69b281c19b8f1740f007fa232ca046861708cfdd7028ce72319195326b71a34a252672325389e862fa806525a665f18bca7be0c707efe2baa0cc43fa2d884d11a2c9ba8320f472a1e0ea9450bef224959b6470543db4db180ec563dc78c272d89925c6457550dda1b0728dee6bbbc678a504d70d3c0e1d79835914f934bd0a2ba2d4d29cad20e02f27706ffa668723fe0711094ebbfce6f35d52073c3ffb8b8d4ffafc8cc43a4f7ef8c7a3a7df5c5219fc8349c075e1770f9f7eeb15511c9ea88827299657b37c591b218fccd339ddf6cebdf25151644ae6e250fc3853f54c951a65b026228b8d904d71679f10548440355fe84aca0b69b20d763591599a5f793035decee10be6ddf4fa3847a31bb092b4347137c9559da92b95278f49e012061df7e82058fb9e8aa498006d184c4ac51e569d65d689f0face7c256eded266d8826e11a602fe6a9a63f5615067207c317f9d2fa4d372eb8f834ad50febba4cc7cb5a753b934c82c3148e2c4dc481e81ce232d809e8b36f06d5ccd215b1fdb29298a337bb997ee1d0f478c5290c5d535fbd13b3344bba6d6b9ca51d2f87159f33c1d13f7782552d64de0e6d5069d62bc2c8f09906a5dc4299d4dce4dcf2263012d865a02fd5aa7e56248a0189664d69d155c39a4224bcef5e7efff47e88f12ea52140678246e3eaff940a5a4ec4363ce76844f86bec1eefddf3d1be896117be94ceb49fcb459719cf8f55d61769c3fe82491470548e0901d9c2916f9e6274c86b9205d472e08474a84b5e678a82d878ed4235abf93f7d4d8c84effb64fecfc61d1c892886351ab0d0f7b649848577984501effdca3e236ffe6f962689ca47f4faf245aa476fac6e117d71a8f075fa6680edfae17a0069ff66559712b16259a9044d9c8bab2b4bd2274559aa490d22d5b07d4a9c91fffdd637a169c91d44bbf1fa4d430a6b075ae48fb3d4a3f2aa2ff03ce8d318a85ecdebdf5518f8e98838230cf6c99c150ee8b4e7fd1025a1dd88a5a35ef9d76fb6055fba70ce1251844ff98a0d87b81d8a9993eb1b1c679b4e855aa595913a5e70e37e6ee0e5237d584c08224ec5272d456d84cce3cb50c4d88d7ab2628a2c2fe0097221b8211042e54689c9b216c5b23685f33449328c563159d6c5b2e6e1c73e3ff26187fc0d32f2e2063273b91c5c14f0642220582966c370d29343cb98f9c0eba29699f0d309f37e708cbc78c4194007ec1931f19adb29d304465681e1fe557aad8414793a515c7df6e1daa67d1443d4dbd966fd90a71ca2fb8eb56caa70b8f56e6764b5318e7cf1d611c5501cb887f371bf53186968f3371c8a6a56dcd0888a9c300312ae1453315f66750a3f606a414bff15365613b9ac4047274bc085fcca504e00cf5b874b077fdba4b2d19aaf8fde88037ac1f1431849fde6a0c71af0e562573534d84f0f665e231f1e74e46139a18391a5f9bb735249bb8dcc0b8c0bfe2fd585b1ecfcbf897eec8da30d7f375e3f86b43857200ada85d94b00b9d058def2b714014a665971538944d5aa9ca7b941450c3d2df3844254d31b9deef60c22955ea9fa459a5f6df2f8f1de57a5a9ec5958c14da98b7f4653ea9fc5579e01b4be0a7f66e7511f5d77190fd28a6e427206e8feec1fde8303dbed36eb4fbfe2070694d8204063499442d3315ff8ecdc239a8267b008fcc98638631f5f051f3192e84f2c9ba7fbfa2af8ba595127cb4943a569057efab645c1663508ef5e3114c747473c3704b4f12e47d3947f0c17ed47e3944cb6551afdf09bf5e2f6dc36e48a04b373b9fa0eea8551397986630c545205e34ac1de428ae932c3fb3c537d61cd73d19612ac2b30e61c1d44f0811e9213357d93e5c4bdbefd4ebee2777fc0a6baacfe668d2ce3f21fbc99456fd6e0e09437ff9a44470fc42197358d789dafc421d5f1ab1c796cafca133322de9b88ed1e9bc54f46e63529aaae6bd86bd67c656a5669de5a53e58907d18caa51cb8316afa5ef2b99e6d591e6d4f97a9005bb9df1d7a7e435c0bfc4b68143fd3202d649f402f0b6605337e2c0d58b7679fcb7237f77c059119a06505b419c7c1119f661ebb80fdb07be71c4f334ff09780337f007e250239db5ab46ece91b2cfa94e84d1f5000ff6b3ff642e0af18703da528f0577d83781ef057f8df36e072c547ae413bc872f521c3962b3eec2fe3a0f71eb4bd35ba307470a9f8c98fe96eef902e8c01aabcf2abb81be510e11c44e0b80be610211d3420dd6e7036d577cdd667b1aef43a7dc36d01361b6e5083be481bda0abc687dd51fdd8372c573db588d1edd2ef669af2f709b5bc77d811428f4c1d30c8a21dde20ee077e68263106d061ef7a92e161b21bebacfe7041cdc0ba364b118e4c23337afc91ee6edb19234e2b53453d804d4ecc561630001d9486b621b696aa6c5fad283e91a6b6ae4f288e7c3bbff6501eea59ae61cfbdd3944357f7d2a1a5d465abcb22d5eb5b5c01dd39c10bef4fd103334245631d885f6897b4bf46993d3c134fc0d7e077e47b727e8bba51fc65f995dfba0a3d9304c7347ef2e01cc6439d9d3e6ecb766c0ad4e8dccfd8133b31f796fe054f3937fa829e55440373871744d5ff94d311755481fc2a6ed5c23c43ec88b9cec7a40a53c937992a94468dc2d1d10c6e6dd15c44ed602c14300a1debbe7aff1c0d338923d922c274618891ff8297ccce146a38a894f45b7f9ec10438f1de76a39ef886d1e27daaed951b1a61cc93caab017c02609f36d96f4d2d88bd1da5340c586161f8e973dbbc3a1f8470d8263f3e5326ea460a582976960f2e0203d51555aaa445ca7ea462cca62a1ca3a5556fe8c46575eea8bbd2dedf6b0b5dbc3dace5405494e58153eb2aaab913de707c2bb7c58a5f5c89e68bfd22b56c91d5cfe2e6315cca11cd9e3c90a0389b2f7935563b833e238c8aa307c1d71bc675548161c583b3c442cb1460f5d3f58a0a1e26d21027ba194c6f70535267b80ddd660cfbce4cf353522fd1304c1ab443a85981b70b4ea34bf724ff04ff0b8bd7f2f3ed9406802d193f3d23ff2f53360dfb581eada693524b191a60d174716afdc443d34bbef89b5720e9291ef461f07f429f662b780f422c70c307d3ea7cd99cf917e90d7b5107f1239992a0da19361af8e426bb01835939399d36531eb79922037ede78d8e217239dce7dbeedc2b970afd2d4d8641bc7d3c5cc0211fb088e0d8ae218064d6679f42825a9a6c805d66099ec9676687408ecd85975027be498f7d9a60178526f36b73adfdcd1838d8247e856a5f5bd77eb7328d2c809ec8e253d10d56440cb14f8f17b46d8f7c0bc8a1b85235c6d89acb95c93e5a9402e4e49489b32ee892c9d6e45cb64849b407774ee33de733993bc4d994ab001b37709a9e7ab82fe09a759a116b30da175e9e7a988fcdfdebe895373e58906f53b0fb539a86cf8baa0ea5fca66a848b8f68a377504383e8322e784f43add9ce2a6b7cc84724cb8cec42a80afbe8096d32dc9a364d3c7ce302fe23164c25aa2088adbe87a31f47964155b99911acb79d8a376f66c442d68fcbd2570b3a5e90d7dd281d619291d85515e72e43ba46b9439b0c136c620798898e1f3cd013bb44b832362b773a58d55055e6697bf1c8f23e20e9b278e07d1b091780c8b562bd9946ec93dfe63646c44c850f745e90e524eabae0f3411b1f01acc2be6e0b1accbfa5d3c2de8e099fffde8e096187bf996342b4a36d8e094dacfcbbaa8db697ccf9f08d720715b3b80179d2475035b7c7dc0d0563bb2aa2799bb83e9a85f60af5d1e91efae8e05a6cf47dc0625f327d66da1ea683a9ab39a4762ab379dd82153b0f578cbab3f2c406dab1d9fb363a1cdc9bc10d09178f7b562cbc2590ea72ae914e66993165236776bd6c16b510b7908f9fc85c8c9538da104771a310799780b00d496cdbf4073c2cd7e6a49b2e52f6a32dc94881fd31062272955623d1597f48a006f3b9197081b06e7b8ed1669ed3d658091f3d012a9fb931131ab9ada350f80c70901d01c7c7eeedd6980ddb37e043f2aa7a18f0f133ac0616595e6f1e7b7839961b0213440f938d6f73966c3b3fee4949eedafbd12c177c679faed6bcab4d9e3bffb97be495932d9157e0fea8c0bfff2c274d4323bad2a557a31573f449357853cd8a1b761c000daa85ccff2e35a682830c2de66f9dcad88fc2c269c51e315536844eb11b651308c2501f67e9c224e69dc96cfa886b3fa13b9063a49377a4964119c0bd7b412c565d8349c529bed8b52a2134a3693fa04fb60aa624b5c5f0330871198cca9ace38d9816b2e573b37f77d1128d6b119f10381b130e7a991498307082b8690ab73096e85362f9c5d5ac238585c3c607d72b9f724136c85c361facf2ba38a32710cdcd619e8e1ded9ea6baffa7a43f5c6a2d4c56224d603959b708c25b2372bf609ef365d0db32ee2577d09e87acdd4797689ea0206c4656680697d51f6c5b82f8c183ab42cfe01022e84e23117cfb72e16c4e8d9b703ea02e9ebd87ec5a1d3e7cc7ed66347dae6bdd621f9aede16712a6c6543035bd6aef6d7ad0cd66cecad56e6ad53e38ac93021fcce06bf95aae336bf9adcf5b71906ef1705c7f5b5aff1af5cf8f166da6d829fc82a3409d69f90670c0afe7791e631b8be5df164394e276779adca4581efaeef8bc43599a659d61ef666270b68c285c6731e23edb4982f7baf79aad95c15ef31cf6b797364012eb0ce7761d09fd8a3dd56de60641dbebdfd36cdf1864fe8487d7fe4ce6ddfabea8f9ec7e688842f2abdf67e53e77142a53cd2d107da2a6fb6faa5936c65b3e6a9d916e8087d9aa2d2289b19ac29914209261970e10f6ecd407c0f95b39f210fd725477053c5c93e2cefd46b0ae8b9a1ce9e59e6e6fba59783362e04941ed08595319b21fa42fec7c57c216b72e51a196b65a74a074712c34140e6e622cfd6a816c812c8b9d1a79cbe45e5c700b00266bd64b5ca2b7dd535824253b946849754c7cf2a1388a51b9585df434c63d9b439d01006973c34ac1705c854483666e8431304594bbfd16496664909c27944605e5d93d5ccaf6fa4ad817561e322e9eaeadc91149a7315aa1f1f2112082ca23fc021ee6f7285ed5a8dae1a68a7f79acdd74388a358478fd42fa9269c70afe324a2d37c56dc085804c45c08f1a7e769d5ee1f3a753bd3c85a6fb52dfb574534dbc5346a3376732fb9760d76183dedd20bb515464af34f99b900beb707c0dd024dbdc3aa2fd69eb5c69d03aae16bd486056b8d6c46b3f7439be1c720b659249fd02ec1cdb83d1960f8ab2e659b68039cc7c8d9ef1ded8c0bacbd8a8d906766b81bedb4da82a2b545f1ba4b44b0e1503c5c2c942c653eb182be32887756fe56c1cefe0dc2bb11b91d45781a5c46aad06727f281fbdb92eb913862098b6ab5582890a18e5adab12a820991cca6bc4449a8f9b229081d11dd3da47a9b2ed351c37e67bbd1ef462ed2926563bbd34298776258f5fafd101e4a1762481787547aeff8558d25d91ac20af2c121de88b19ac9ebb480dc797a3895482b511702cc1e84ac214f2e8dac2fe46452948935908330026256d78b6a341c5ea5f56c391e4c8af910d6e3e76af818d6e5e76a9856d55255c393bf7ef6f99fe1ef4931d7033b3c39fecf2f8eff76fcf9dfd8e8d28a960abcd72b1a1778c751a882ba10d542e6e24a2e6cf82d081365e49c9b987eaac2987efa1284faae2d67da068af1af7dbed7a66900909f2117c8eaa4fbda504057de37dcb0f78d7741056fc270eb59bad028cf24519181eb5a7d4fa2e7aefc3ebbe05d80772657eb6d0c7b151a96e17d185a94c56fc60f30d7dfcc9d54cbf9f3a20a4cb2aae5fc99ba0a3ea67d9154faffbf07632ccafbf422bd9aa112a32f4af6b749d8143c1035bf4cbc4290d78bdb065938e2541c38d6c2f5155a04b23c67487020156251d62af1b59598ec8ca583684d934515764b53858bd2928d9502fd40958f90a62a6949fbf69af7d0d2bb2691c8ee815a04420d61093db2a190563c4d6289aff896b76e4f526dc877e5128831485f0506c1d01fa2e1c16913d9b833f4458bb51581d0e8bd23087fc5c3a5d7032fdb474c27be2d9caf990c3b259154b1db81c07422407cb3a93600ecdcf8efbac85bf42365a7d92e1edbed7524b7791ced204b7306a51ab835267d6e8518e6aafd21cfd6bab44a13652143d41c901695f2261729059404630b73bbd2f59c5610dec9113dc62f9a3b357c7fbbf7fa34cd6a55ba585e8b3a86699f2ccc2ac10bc12153438660d53013b9e05bdc5dd47dd07a89b95c358d339bbe8e505fae7ad02a2a0c71f38c0bdc91facc8bbca88b5c713346a7f6a9161acae36579adbea78a248cb15d0687fdeea20fb20db30dc01f96a3de85b3157d6eb6293ad42e2725ae8631fb3babd5dcc6a54f7bd4891773acf985c56651ab7a07108de78c2be454989c17d8b49ed3307f72f60c385d3b81c16a2700afda01ac370278a65675b3773def2d3deb86cd5ea1e1bad50acc596247df1e83895c204944709bc33b7e4c5c03736d6ed9d0255aa5e95f68238eb6dd5f9b3480bc95e9823bbdc4816c458780686ca88d1d805295fe44c7ccfbbbf6f76aaffe5e512775b1a0bfc89bb3ed5a372bf695bf657a8d36ace0c15d56d0a2f3d6d940cd3baf9cc5fe9dfad97bc56246fdbf450ebb7df38134aef6adec019a0db92af093f306e17b2776b619b80caf5c4b4db8668de1073d3b23bccdc003b163b23c1e21160c097425f487d6372b889fac732f0b9f606ab1db82ec14a008e32e700834861b32a37128290e5813060e6c20a0a42e16f1c150e005aae3b98aa28d041451c486c8602820d08863ae190efef27920f63ab46bef92f8b52d7b7bda3e5f2df3a494374e23c3f54fbb685a601cd2e43b6cc46ffc23478327fffd37ccd1f09fbfb72b44d8e16fe60a11ed68ef1c0d9b81923774a099702f5366676ac4819fdd295f9f7e7c94fa305b23500c876e2cb7d0b452772fb3a79e8125d83e8796d5495a2d32b966e1d45d78cf982536380867b2e406d8b7dc9ee56918607a530f6077c9cdb1d5559a3facffaf2a0baf830bdff1b3194fbe2e36c6aa07ba77110d7ddf1eb8de0f376f46634d659963fee1d1e073f1a989dfff47a0f93f02cdff1168fe8f40f37f049aff23d0fcff3b81e63f2028fcbe91e0ffcd63a0b724c76dd21d9eaf1633d206b96763d2be76372ecb19fe1159fbe346d6fe988e6888e0152924f7308dd9d3b76e433f77340bdfc53e71b3d40b58e688190d0f4414048586126330687ff882320cec8455ec8f4096d61aa9da1252698227e1db4f0d2e719df061e7056f849b7c999ba9e83f492b4fa8ceabb733b56d0c6d7a70c008074efa75fac684efb54441bae850979362be58d60ad690d3655c0f6c2dbdf050b81907fee77f8710ac770e16b9f9fcf0ddfc4832de8f1238729ee6e7e92fca86e84cf3ade163fb8d708f613858877e1b63be9abef788ee1a0fe8fe2016bb15a2bcb3988a41a39e1889e38f1712d67228be81cc637d3af70dbdda6d8bbdba39c6ea0ea1552384f8378e6eba0bd9fe58b14d8d7706bb7c62a28746acbffbdc48dc0548c5db6bf5183edc0f6bbcb235d6ae464eaf055d2d5757dfc96cfafc4c9c06129ae6f29c3722f5b93b89d74eab5a6254d246a8d1ca58a83ca14adf96c51c47e6e5c00e838e86b71d0bfa7769887f68bfdf1670bf1b0b807a692e01d79f0504e86511786b9cd18f30c77f9388a4f89564a7e841feff749cd2685cd2b6f89f476db1438dfb0447ab913d35ac15979eee18dfb77952b74644fd00c89160aa3bc63745926609f8aed14c5b836b46d8cbdf36c4a6e16d8f62c771ef909a2c5c6634e4f296e09930988383c64bb861990c15dbdf53ff0d42ab71df008b4edbd2075ffc4f0ac7f63b6b207f27fde3c709c4167bd3f0571f1740ed66624fc73c888fe3ced1073ffbf30b6bffd57afc7d1130170fee105cf3ce49da0d9f6cd139f98df2b49be06c46e5eb529937842056f8a68fb3f4ee9eee89e35de1ada3f7080be399cab7449f5aa4aad3e71188b222575dbfa649d30788de0e0456b6995cf3c8f63f1c8ae736e42e581bdb24dff86a0117f5249d4244e2da886daba67833557e6c2a33c2fb2d019cbed8463b63b32a65e262ae456229eda06eb7e7b719822c03bf3ba7f04cb36c243ac0c5749a8e7f479857418cc17013422cead15dec200b868a3bc9813f72b8958f202fbe733c969878788fb82d1f16a3e58f802b7f045cf94353f07b0490613140e282a6cd6ebf918c8fbf6148958f1c5065f7702ab76db107fc402a7ced7689a0e2c54fd91c3d054bb3a20037d5d2e613f663aa7c504495309e8a9df0bf3c908a1b04ddde74397bc6b5db23a71858fff342a67cbca0285be901f4f09c82d05aa9f195aa9ff3022bc0f4fd95b7cb31f78c651275140cf2bbc4c3a9b0f8249e685c8cfc290e78409875a3d5baa5d5fafe967025319a71a77824014df9ed6291085005644b05497fc06e28cd2d5251e0d0f1b216374adcc8bc16129d24ab5a3f451e3e3f136355df2845e146adf8f78fd826bf4d6c932fee18dbc4adebbf4378920f8c4bb253bc91df2582c8d6501b5f7cbc501b5f44436dc49d1979d00dcecf46a2537c146ff06d79d095e49bf5dfce973be6cbf53fd7abfb0318c16ddeaefbfa556ff3aaee03db1c718c0e7f6ff2abde0c24f4abe6d6c8c3a1785eaa6b7d156a3c2246f6aa48f32b512c6b8d7fc6c162ac6f8dcafcba2ae562e6addaceceb86dbeda5bfd49f7f3c16df3e8deea4ebabb636ccceffb0eb368f3878d79876f19bdc7cbffe172f7af77b9fbe2f776b90b3bfccd5ceea21d7da8cbdd177bb8dc6dd47f541359d76a736a952acdaf32b55776049e04e1b8d3174280005fa944c85c9c3d1155e15cb4263217a5322986e19ed6e02d87eca7482058347051cd8a659698478d7eb5504606a13b7717f6a6242eb1c40c3c03c331d3486c4d12c3f3a67859583ea6e9bda055480a55e59d5acce53b252a95570a6421767152bda2c0636986685a94735d900859098944ca32211b8df8a3c3e85a1bfd15d8e88b03d1e98786fbfa63afd3305ad88e995bf2c2d014d9d2190f7ddfbdd2ef08d4a4b836a486d348037258a7326a2adccc7a9e8681fc0dd0673fbcfc46a8d5a228f5c3792e179aedbc99a59319e0f33bb516a55a94aa523925ea648919354ef53506032828cc6455f521f5575588f9b2aac55889c772aeb2c79a974d7381393eeb4217d88c60a2547599aa6bcdd20e8762bc0ebbd2cc70512aee7ef57325ba6fd9e45fcf4d38b1376f7b83a642ad32d7cf5896a320410ee0d078391e6b1ce645f0094a8daa7214d35ff6910679197fdab2f3a0a71dec77b02950625d404651c710ac93fa8d1729b60595e1a8a144344a4fc4bb267a5ce478edc1cb597c2abe83bb5db04c19fa66a1e470d74a18a241e24b01fc25b4fc5f0b59cab9f8f51bfde5fd19fc738be5e2104259122f8a105110ea807930201ce52d6998b131f900eb4a25a515fb158304df022c046e20ea8a4396f0e34ad52f680a4660d65564884d74423fa5d420873aa1a6858ba5d4c00b92ab066b4f12e1e5e3f038a5f60198bc1b1b36a12e25a67f915966f87493a1cfbcaef549a9fda58aaf67bc92e9ee96b2ff97a626917c3d0cb55293658d045bc9c9cc8e01ddf6fc455fc8b25264fba61f35151a66f70d7c9679e54e11134d43b4654bfbe267f306ff19fe4beb426c5de4e118c6596c793a9a3efc808adc150560ff8cb07f76b03d0f919fc55750a661ffccee261a256bf2fae7205db531b0bbbc4ed50dbcc3bdbb8d96d3c6d56dbdb87638e890c351ef158a24d2bcd65837a95bce988f61249c7afde696601c3adcac0b811207af9939c196121c320d095e149a695195fec54f7fb347ddced485de2334e0cc4cc74347d339c3473b6ce38aa4296f1b3ab706360692427b97e62f647ea5ba0b2be5771d0fd6bd26425483c5b29a859b8a7b19a44c322d76a023fe1ebbb58decaf1552a5f995cbdb9899b69ad8a8d91ec446f7921505042bb6eb3b2d8bf9876204b51c6358895b86b487229d624c0854f95ab15b2b8a4791db5146630bfdbde65926e2d05bdb45595c933fab7335301a08a338fc50147e86e55104eebbc9f483a1725a9be64f9c23c4b3e57caccac1f31fcecf5e9efdd7379767cfbe3d7b76f6f295a5b039ebf0c38f835b6d6e39bcfbe1c0a50b8582cead84c503bf5235aaca50e2d28b3b82f8cbd4754b89f0bcd017a6d5577c0dd9e0c2a5a291386aee2fbd816766835124bd9e4e4f4f5bfa1a0ec563998b99bc5662bed48f347b3225a27225e70c0f2d6f0f82e51b252acdf78fd7a24a7f51b109ec4e7e78ab9004fd5de9c7851dc51ccf8d4568080370531831f858562a1105b031d05c3f654154232a55d710cf9c9dcb0a12f0de622da413b6c140acdeafdfafd69123f4c4dbf26f8bf2e12aadbaba253b25cb4afd244e011e6a3b7f98763bab4e0fec3f0e8fefb37aaf1af5d65e3db7524cd87edc178bfac4b7ff57592d75a7d0f703148dcb71a56b0f56e2503718ac7a368b206bf50a5bbd0a5bada9d59ab7e292f7ea9f658da2f74571d3c511f4c5494f1c08ffeb2bfd95a4338d7c7a30f1ef8b44191ae03235b1255d381dfe36769814c768430f7baa310555cc800e69253aab8ea6ba73594f6660c84321f297606269c44ad0d885f4879fefdfebc6760b03a27eda8e231c8ae341533aefa6d4d1b807bb301da3ed641ded5743927e7f13b7828e1b709083382a7e440ca2a13b71dd8369517e232733a734d22cab87c33e374bd6177a14af8fde908dc01bae0d4b8abc5393313bbb9465a94485697d4517321b404086065be5dd2251f6f8e37153ff0bf6752a274a9cc19eca09f924a1dd3ad01953f96c6fbe2335efe85cd36dec417746f0ff4cec0dd681c8e98fdc97211fe8e322af659a57d8058e125ff02ab124a8729d550b3d274c01c1264670519252aa4b0e8dc429c36183c7d4e7d49983ebb30a024df8c309c2d2c0e7c1908d20d6ca5e14234041ef3480bc736f86e5ee3cfc56ccf3a4920ce34c898be3c4557a41fd4195a513d53dea8b638bd1d69e826c21d01ac26e4f639707b033e8c9ebea276a51aa09200cca63af55098aff93c15f0747ae5e5d248528d5bcb8569aed30b53e7335981d86b5c4b0f25a7b6f44476dd2c737b91a683730969e4dba0bfc81d2ec605ad139bc5178146909e90d33d5df5dbbaa98ab7a66d3a6d0398e76616e2122cd374a4cd33c69b0f0200fb5f6ba310e0d2f3569a8820d7fb4d3b631af155d9ff62ad8a46defb21b05f41647a91f7b38487c9a05408c588f00e08b9100d002a4f9959e61a3698468de5af5e3a1fdab2e40be9d2ce1dd99727a64007aefa7017b403d2c4bb916c594891dcc6db2cc41f66c482d204f5ee434f26299277d9067ce17f55a48809356b426c6dac2a22f7747de117d4936874c39196bfc4b11f8aeb80b1391b599c41ec8da68f107627e6cc4b4fe6e8d9b3564c8ef7cc56e65acd71def3afe10eedac0f85772d84c10cbd969f1759070c58c311e6bcdb2c05e9e1d3f32e26de3a24fe949fd21373b6ab477bdda07e21f95e20f2d4d03dc729f9eb2b8ae1fc20090a2bdb3990734cb10795efe6a0745bad3dbcd2c100881704a467f24b32c388fb3b416b5267f5c10d1107b1344d2c290066c8f2b9bc6fdef4307ffe5640b40fc06cf019ad87612b11175cc9de8210f2c2e3d4227595131313ab351f8ef8a1177b919ff8df08976ec7fd235e85079f345d6b822e362a3365c5fb562b92391874022e90d335996f0d25f894901292719addfe576fa03e73f12ceaf7e4b6ce74c180ba58bf17009d12a0adb0db7f14796bbfc140a5e1aa9875a55161761c6c2bb4b741a53656e9117ad429be150efab7151025b8ef4ea4a959abd903963ae34ab75a348240a8a1d99af8d22d0c2daa0b4ec9bd75a5eb04720ceb8c93adfbb273ef16714e5679b9193f7604fd7772527ebbb9193f51fe4e4239193f5ff6472f22a38f5cd93fe0739f91793930bb259ba6fac3931e889e77e809fee7baa4834327ab4b6d80788de30f26918e8ddcc54a94c65970339d49a5d0f1645056a790310b568bd864eb42acafad1fa47c81165e0960a8cf8fc3140d94057777a35d917634faf767d048ec06803f8408cc5487007b5eb63af588a9118fbdadeeba3c18db269b5ae8fcdaf07f6f01d5136e0435d8a7f8e5821d53f746ddb667e53cac5a362a5aaee58ff97698033b92e9635943954f0bce7c6c5aadd5e0fe1ed16fd7e5cacc4a980062e0107eb1f0fb7339d27892e7327598d74736e2e0f1f06f678981267e28b15d2ea3bfba5ebdc8671d1b00afe4da86e7d1e5c960e37ce265ea9fa29143f49e755176b567d9418f3b576b960a0cafd963525005b56136bb9ea6e49874351d545a904a6662327edaa5632d1b7948b6b7c23527d3a71561c2a257533b0076e39cdca3d30457ae9a6cb2c43b7957bf768d603792dd34c8e33cc71619a8d4cf1f5a362f5bd5c4161386c4ae2d63eee59ebb8a96964e06c6833ecfb3b7662c21d1d2fd32c79eab67ccbb1098f973d449876cf273c0d72c860f5c9f1a3473e861610a5dfdb0b12b4318973341048bbb71788ba5834c762d2efed0589fc657a8166df20b39ad60ff3e465b118c19a0d26453e9175b72e16e6b4c26c1ee6c923ca0408bf4d3d72cba3aa165346cdbbc71f95add9316daf5559a7134d37f838d0a9d0864672c4a52e16c1182ea2e63857aa7e5cccc769ae92efe5aa3b97abe73249d2fc8a851eef0b76c784beb8aec56bf986357a2ddf58cba0a0ded8ab377ed3bc16d0971ba8161b051e1343a518d223017707df997cdb4e8db41dcea9fbcc4c176fc8692d5737ee04e6260b1380aed25f9c9c1118a2b4a26ec58dac84cc4a259335daa860e69abec8545d89695a56b52855b29c602421674ae756827a5914d51b7168e7a36b3aaacf3e46a9c903b8336cba49b8402c2d8b7775d0e88a66ad1b5fa99a96cae331c6055b58bf9eb59e74ab8c793563b8801eac0e9a0d69efb727721503801eb60c82fe10016189430c08167a607c875a56d750bc181ccc2ccac130af5f7a0a184c13a786ee436065fc76b8e381446aec68e97d82fc9db96738e8ef0c3bb6236c4d5c1965641861c7fec9e9a9775fbf7fefce4d50e8acc97883537be2ee8785332cf40e211c37a35f2e9760fa8a6f7388c93099e9b714847c4154ee5422494bc574ae1ebbe49f98d6598dda2715bf9ed1bde27bbbae8e7a71a3ea5d8852cea22420357c5e54fab1e81d439c771c195f231d6194567f08d330d8024d06109cff1860df6e3d1a3258eb266e6c7827fb7466b00aea20130195d8578ec4ec3343c0c6a5f5bd2cafd2bceaba8d6438fc218b3d07c0df16a5b9992bfb44f7d71e2b8a53f12ba6333eea0b48247cd417949ff8a82f4c7ae02313eacac26a1a48f2cdd5144783c7ad61fb1bee66b0df5662dff37711a1c5dcce020efa416c015e07e4c644371fc52bfbf42372bd1b1619b9528ff834de26a532b55b9e8178a281e8f6b176dfd083f6e72174bceb43267819c6b80d5360129a995df49e2defdf73ead20fead09ded5572b10818ca374818c77caccf5d1176e2a57a5ee064a0a5818c4983727b114bb8381c8a27e91c838c5496244bb416d2af3efd9f5c6fff32cbe80d88aff4b19aeaf79566a73c70875f8b1b85f2a8bac0bdc5c08bae167e0cc6ca9dd9c8bcd97b0ef6c4af623814ee7988c340f1574e39e7c64a94ea709a8243799a83446c225ddf6c31403e402b1908a5d851c3a13e70d8ef20448f0062022ce28861b47f9416999ca89d0fd3b252a52387c4232c025678e5514ac74cafbdefeb8d27f1f73b79b5c7a1bb43c15053ef3d7190be54e0015f10ac320a3230dde7400ceb174289f1711c7249dcb80f5a1c7072e07584fcf2dafb6619d8b538604cbe57c78847dc600f8599bdadb8a60a08d0f7288aadd92aba062b1ac50de3e1f8e0bd2c55f1897855bcd5f0015ae1096b8df3e2a0577cde9153c899123329cecce07adfee16af01d1cd1aa9d311e2812e9015b0c4c270046e5ec418b86b00b9087fe026ae43c4af00a54067e44c0d992f16cecf89f944bee4eef3648904369bdc07dc9c2af1bca8d07593e2cec912ddab2c0b40b73b7202ee9ac7700e4c70c1479583e7e0adb082613da61b264eab0b743233631b88efd2ab992aa912c6e59d2e4b48012e6fe41a946f6cf8fa19c07bb41e9eee9c320f4fba9468192ac1efd27aa672a129ba3022177b3ddce4bc0be7eac9a5b8e2d0a930e9a1a27b2292d6ec50745335000958612458bd782f7891ebc593ef5485be70c6f6b71ad185aa6786e76560ad8a4158504cade37d13b47bbd8b4361dbc95ca08b2d46422624b7a66ec995aaa29b4cab8dab4efd0ec4f714e6e35a666922e4b456a530e95f6360660657e80176674040c60ec553fd8f1e343f030371aec0b591f6a75a57c69a7922f3bc808e4c3451ec24d685debe43f1b258fc561d1862fe02fefd8d3ab1a41545991fab9b21059179e98e41a5caeb74024e11d7aa5c8b4a6553a1568b4ce6b22ecaf5408833fd862f55b52872a447e0ffe9406894d45c1919d19ad8379966819e42bee50a46f63c5b6aae192c384b95ad0dfa0623a1490825ab142ce7afd2aab6116880cbd2bcec1a747f1ac01a1845e8f60c2ce4411848e0f8d021ba2ee8096459ae29a21eea5289e632c729d29918a72973078dc4afcdb8a52fcc18250840eb822d06547808dff5a8d2f9225b0bc9c35015ec78c3604af5cf655aaacade04ea6a10ac685fbc4ceb4c19f8bb78f193a502b772701717c67ea026f0a71e5662d8ef4cae55a257ebc245669549f2a888d82f79519c80e3c7a5e0fa112bf4c0af5cc3cca379a7795aa732d34413c684694bc8c1d48bf8aecf84bb5f4e45f0e1fd7b679160aa33fb07fff7fbf778b5f2ca460b2bf82f9637173e6b9cc1b045de4fdd7924ca96f1e864efb65ffc346f49296fda22745197ba0ac593c514d87e44d9864d825d65fb5466db80af27d83f944f44101d6dc60933c10202ae7f69424aec8c8e647e8e812c57d682a70d3d59873e92121ccb84604586a758218aaa0ea8274f3241b139863ee0bfaccf380730320ee62666820682fee471ac8700a5131bfbfc784b82dd735557a25b981bb6ea593324a2a357e9b5cac55bbd306f77260c5ef43058d32cbd56d8d14d9a65faf4cb2401c6b0b727fdc0e0c24b5033d733364696352a1244c4d959a16fd30d0234c62b6c6b6d07712ad4b47c02bba7b280b0caaf3b963e68e6d91c7ffd379eef8e172998a2d6eac6e6cdcc4a4dea3ed6c77d2ff8ed862c0025bcd200b27b60fb063b3359fd70933fc730ecebaeaedb6b18eabcd69fdf38b366fc1d15c534b1ebdbb4ae88bb36016561ab0c9690953c7e043676bc163379ad6f518829a50ff15cc94a6f775a6b36822003175f2e7330d793629a42480821b3aba24ceb5978eadba35e79d5421657d7c3bf2166110eb9a58de5677523fad1680508d648c642d875830a4a6c1bb9ec768a7d82c4e3071bca154983d972e28ac2e40c0b2b33725650a6495d18658707da8895fc2cb4bef58538b52b49b53d7182d7c06ab6ec3a9a269e1c84949370bb378c25384bc02da2e89d67a4cc4827cd57569105e8f3aabaef5c5df54d55a95c7312d95adc28911737ceb40e9142233d617f8ef84ca7e0afa24a1385540723812f4bcd9e5ecb0ae22255224bdfe135362db2acb8d1eb602b6b465bbf872bf1f41818dba727f07e868b4abf82a41eb478718c6caba2d7855ca5555fbcb45ff5a3067c14649e58d88f6c31bd169cc718f65ca20da9ccaa42fc55fc73299352e6f5218c372b2612f1ae0be3d0172974cdad69b262f2ee26ad540f925994d7a847a7a3595cab32936bafc78a038668101032e050d3065750e4d9ba2f6e3459a8910d876bdcb2d0567061db90bda353ebd7f29d32a65cc321d8c79625bbb1ea5959dce4761f6cc5f78777f8df7bd75c34fef7f25874bf5d6699207176f37fef3f6aefee3ffe304e221d07bdc34f00b95bc7edbd3f3e8e2d05ebf8f149bc7737844dcd6d85dde61e1f42d0fca91ef2d313aff9638b68ddc7473dbff98be38fd9fb479bfbe3cfb6adfc5f7fc37d0ffff7e878fbdc3f02ce079d9efc5e278e5f97a85810a7e207e05207d352a95f943345751a0792fff5bd92efc88c146f48679e6aa4d5f4872df06fe751705bdb6adc4632ac2486e2440cfd2b9538576704cbed1c478d2b7e284e2e7c2536993ad0b139153ca9e585679d33b265b77d333d6656db3aa5596318b66865d7096d8dccf7b5fb5e17948686756a3901df08d75f18b2d00bf88a9ed5dc7176e25b3021d3eca22f972676df2815bd0e62da400ef3a5be0e3548268f6640356b690107838c81f663ce91e49b1be8f449a51a9dc2be93e09ced06c31b7f0d7360c7409e67a400aac26723049966be4426ed54a0611d389bd06dcbfb7d819aeb6201ef3c254c220dfbb668d8ca34358281c14da0248b0fd1b749dd384ce489f9e9b27b881a295f69e922c5178b91afc10b955d9bb49d0d3dd8065d60283b62fb482a11dcc4346744a28b897a29651cc4205ec9f9225364211124bac76563cb64df5e9eb1297b61c414d11735511fb0450956b6e7e9344961c197c4b399f3ed786ec3d8dbcf33a95ff87331351197533db9b9ca310598e8ced33c9dcbac3740497fa59498d5f5a21a0d8757693d5b8e0793623e842e7fae86e83bf673355c2cb36cf8d7cfbf3cfe735a554b3529e61ae6e167c75f7efec5e75f7ef6a515e8c3f544a3b81ccb0a1c956191e40404c98f3159755ba47d132443dcbb87824b7cdef824e47cb98098f318417c6de4d5b2aa8a490a712950ea8d2fa36e9a4fb265822f7eca957d92f4ac68033da75867211561ce45765857986c4badea6ee724e9805946becc327f5fbcd54840bb7df1a7e1a717b0f84f7ef8defaff972aa730b989aac93e112a99cd49e4759adcc8ac9a0d72395743ac769817893a4cf34a13466a32bcb8c8ffd73bb59e9672ae2a415b79883d1cda7c91e2d78b8bfce2a20659e5afa258c809e43e3d1a7cf9e57d718b8575c18b8ef13b96e58300f2bcc8d3ba280d5cdbd1a87d084783a3a3e3eabe83195f9a2afd65c3ca30b49dcb72f2f370525587d4f8f09f4b55a6aab20b63075da5bf2833e47e5bc1a15a2d649eb49757b332cddf9929bb7418725c15d9b256f7b1c0da9c8e445697f49114fbf7cd4a2fdc0f6316403fad5100fdd6afdd6956dc8c0426cabf6fba07338043f02dad46e0b8494510779992db7a6d7e3924b7a5c3e3fb91ad8d2c86f85a24e9f5d629df2017787c04ff5bace8f38c98bbf07bdb626c1c10adfe5e033a393afa8f602cecd3c661fc297aa4ff722c4ec5f0d33f5f5e3effc78b6f2e2f3f1d3698f2cb4b48c67779390212d1bfc83ba437ea8c3c585e32f7aa5e67aa9a29487eaac9cdcfd537906ae3dbb2983f334117bbfe585cf36f7e7afef0d9931f2effcf37afc4a9e8fc8556b0731f8b1f9f9f5f3e7ff1cdb7673fe952b3bcbcf4fcecff7e73f9fd0fcfce5efef0429cf20607a2c3f781377af1cdb327dfbc686de6938a48c387cfcebe7ff8f2ec87676d4d2df1308d6d8bcbf3970f5fbcbcfce6bfbe79f6f21c44eab62ee5d7179d1b357e97d60fcdf773f8fec6bb4281f4609a89f54255e2f06b616e41fe1defcf6745ad4618540d4f1d69056df44a84214b25e672b15049e4da4dd4b5ca8a852a07f3e29734cbe4a028af862a3ffcc7f9302926d5f047351e82fb78c5e269c2342f5fbe7afecdb9b960eb623999c15447a2332f96954a8a9b1cb3f540d9bcb856a648ffcd8a549e9892e5a243a944809c400c6b53063fbc62dd45b33b2a8c774885cb454b8f9992ae59b1acbd4230af72452103f472a6c4c59f20bbe19f50334062c9a9660d29156c318580d264936a12caaec96644669998c86cb2cc48443893d76817318628ecaad4c74d2503f172965662aeea59918865a54c869bf96209a1b120695931156fe9327a0b89668d15904dee0da0e95114344e2bc8f0a4568b52556440b148572aab74e7b206d38499462c48f858157305b6a895007b0480ec7a9f41fa2358149b8ca52e445a579afbd7d88af64fe0bc54d5a2c8ed08d6aa16495a2d40f5de07b88c7716633591cb0a274bd5f0fa790b2ee506bc6656ee7a001e9f9f0ff5b65ec21606595c8c2ee51c36dcac91284a96663d9d8a65fe2e4749ac1fd0bb5432f947a512dddc38e2f72d5a303b59449f207d1d24a78b3463de66f564a66c3a33cd42c21f0328e80effffdd8b8be4a0d7bdb818c01f0f16abbf0cb1b935d347080f28d67e973ebc3e7ed3132337c930def099355920dc448618910b433342c007c0094db98a25c4a84aa72809774d6857a126ee3f467e33e62cd72a575505266cf0e44e9a599806c0c8a96e8f8ecc0093f260265c9b92547caa7152b37ae53ccdf1312eab8566ef4b7d1e81b35f2cb2b5cd709a176022944ed2da288134a6c361d50dd3694a7477e8c51b4febc730b72e4eb14f4361db5d51da41ac30809ff4dca4e457ddf3473d537ca5ea87755da6e365adba1d603728863b55200e84cc2bd1f50f6690d604d2203484ab2e4ad1e968b4e513440c72f3533664186d943443185c584f09bdc7564f161d2dae5b87f9ef4223a38ddb3443b720f69a040c4a556508120c8cec464179c2424f940a9da88b5c24aaaacb02e2af609bd78c8779e324106488c3ac6a0d27c7a7eaa47bb8ec6c462e7137a6be64aa6b4bbda068403fbd44abd81596071254db1996de7057724fe3ed16eddba29cd835d2984f074def705660ca24795da48950abba9402236d03b9853396e6599a2b026602baf4c98ce2069204a271b0e2960feed8e2f34a69b2355115aa1687c39d64022009a886279f7ff637ddca5b3171eaaf20d831c1843acc6fd0c3b2d353c4fbf7ef45f8bdd3f1b31c204c839d1ef9368799a3a74bbee19ae97369e9263789616715136cd83611e3713789ef5c640c7f16ac804d4337e464c51ab3fbd54cac164e0288665303489607748a705164aaee54442343eac913d0238ae84b5e731163e588a5a1ddcb4a95c0b380d676bc36c903f57d40766fa8ed6750bbe9400d5c2c3be8fb85eeba47c1846ad74f1fa2e11ac2c5897c31152783604b660105bb21bd82491b1ee953efc249afc595816192258e7154f2a8e35ed8d41cbcd763dc1cc6f30eb21229ef627f02a2904a544c10660db0481846b677e0a39424f080789a56b5ca5539f0454bbbf05f0f9f9fe123e4a52caf543d0c41fef95c4e55b6be24214d7e4559802f6988c6b09822b9da770c15571e306786d20d0d0e791b1edaa9aecb35a7112e29313dc77173acd5d2afb77dd159c84ad340e3bd4128acaa2ccdebc324ade4385387b95ad587902bf34ad5b52a0f71674c832b2f56b2b7f76c9c513f34835037699e1437837049bb1d3d32901858db31142f8a09642ce97a510734a795e64b4dd1af6499649a1f2ba6688b701144873123d378d5edd924a1265d0aad0b86865a6a12a2c98f9ad4481b1ecf4a7db16ba4ebb84767073d3dcc73b2432f6234c1dee33ef9ebc9dfbea0784d719cd888320fc4af34fa118cfd568c58fc2fcbfec924b1cbac9f257d4a479ad1475a5878b134f6c5afda8f8eb3e9dd8aa69f3bf78ad53f46c79352c91a211104321c5bf5c5ba2f305f2514fbb13c08b530f72f3464aa2192ead2278431e2b08c409c6aac4662e59349f140acc488d7598fc4ba5167cdeb3403954c4118667bedc292f869392194cc7aa139792635790d3531e3ab1eabfb69996088d3b52d0327ef8fbfd95a577d515414d46db0a62d6cee593d2b8bbace54d29de67d78933f2cf9d3a44e27efd0f2ce5140b08b2bafbcac2561d6284b30a822c4021c8078520f12d3810c2632cbba0de36d1a85a666f4d7fbf7f0a755c181cd210dadc7b33b9bc17a64d02d6ca9feb95415c8e5be2de59c068064b1df425c632b40eae29c8cd069986087ce4cd06f7ddbe696f3f224bdee4eb2cacbe8a8efef6202ab32a0fd458ebbdb49d26b621054368044c6cfe41c1e8f1946f3ed70e480fcf9b74475cf7c159d0d1cbe9782231cfe0b60ebcb6e2451aa5c9d63981812c2479eb44fc0e5790971dc73557ef7f2fba756c89342b225489665b312a9442cf34a4ed51dde0f9f7f7974e29e9d306abd6c76134259344b5a850a894d95c581e890e282bd6e4971b0b521d6b36f5c843300795bf278966649d701a0b855d864631d400398a7570da11b1ad22c47c87ef965a92ad00f34cf080db69a9445963d45975ddafafb911a2fc1eedbaf4073d900c2abd10461deb9c090e5e7502b3a587f3e365490494bdbf3a0f1bb9b1474a28343e8f46d3f83719a27aedce00082e220700eed205c39614310128cc6ce0ef47e3a5b16f5507375df16e50b78e11187d03cc03895429c8240d51792bc7f2fbacdafa7e2d75b87fd8bb258adc15c0ae00cf041f99cbeba18a87e12da81d5a620613b3d8dea6d188df6772f107d048616712d0ea3fdfa767297570bf7063323646182a93ffff58bcfbe1819b6750e2fb1ea5dba8047eee3f373e134d268088c9f43651650750209516f358396a04b017aa590c5c55c25a9ac55b6165d48d6e3c0834efe416f201e4e26aaaa48c84a30df16d369a5eae7202c7febd41260473c053911b8ea65c50d096f0fd5b5cc96b256cd99340971550f18355ec865969669351b7e9e7c7e321d1ffded78fcd9e75f1c4dfe76ac3e937f1e17ab43ccb459ed4fd1f5723b7aa9110cc67c2a3ef904585b3e4fda25f80e0bac3756b3dcdde60e4402c2e59133b3fb512167862d878209ac10c10c1a7e100e1b5fb06d88ecc5ee4d54a66ad536481b4acc5f4cec67a7f59449828c43302af7e40819eb0f204688574f415cf54ea985a84b7d7ec0d721ade848198e005553cb8a84a14f7ef85e68d6678d2716a68811b8074d5ec22d97cf5d181e8931db8d9b09689fdf3e30fa9a60ae4484eb79cdcc650a450f9944eade3d5483a14aec599138ce5503d3a7c4017ce0fe1e4cb254e5358a9b5c22d68bda6c4d973f383a38d48ed92f5f74e53ab877afa587afc40d14a2ad5a688265c49246c183c0408e5ccd4a99bf3329aed03b030763259355b59c2b0f14debc63fd7e592c942c553210e785b8b1d2697925d3dc89af5d7d9350fcd083a7a65335d1cfb46c2de6f29d1b4935975966b1890342ab18ec68e0017b447c2f056b4f81e3156f2dd2bcc5b81114763e5b8bb7f43479db27f8fed8d04e00405de585669d69b100eb6f6645a6c4494c2ccf575e0f06d631113765915fa11cd8a46e4349272a8655d27781ead192ca0356dfa498db59e2ed24ba8ba2460725a3ebc6eccf9ab6f75cd33df1ce9370f6d8f97f3953f6a8e64a25157979cbba9693199af281eb6591285224f7455560cab9b2e28199082278fd819ee9ad6ef4167c7502689a7e5078a934ff1925964633024331f1d835cc285ff6a1a4a28d0ab41f50108d184ed9b5f4c5cdf6342383f908e6d8a5567d76da61f1e065e16f929383be6c9eee39a957af9533ddc6538d0f11be82552d490bb981c377e97363c2b2c85d74a7cbbdf52a20346c5cabb6b08e73189e0e0b61dfbbb7696f9a45742de3dbcea08bb51ef5b5f83f83b05ff3776814465a3f6335421f25c451abad5fda422f35a030733bd54ff92724c3787f3e934971f3a228ea5b5116058ccb783aeb3fd16d5a23007cfb0a3afa7a10cda03ea98c93b41e279e613c5a51edbb2e787c7ede35ddf635809ecd096cb8cdaa969377c6de1198ce7f0e3ffbf2e4e4f8b32f9b68606035b99078897b1681e0ca6c3f4db902c38e2a785087c5be504b2fc2a9e80c3f75ca70303bed88033d3fe6b7626c0bdae449506e554ea823ac3cfdbbe61421f0925ad5c349550595b9e820e8e4a55ac16a74f592db8890b444becc4183f2b1b261ff786253395bffed1f354ff656afcb5bcdcbd29507cac8655de807cac4905d177b8ad93b52cc114dad0922b961646bb202760f35f209af6c60004bdfe992372f7432d82280d54d5a4f66ce92c2b696997eaba855adca5c667c54ddb7495ad5f8dae90ee669de7b30f8b97a6b021120cacf65be041f8474be8034e89860fe9d22c3aa745cca720d865eb206d605b81a99afc5e3f3e72652c2f98e66f946847672f4b70be7284e9aabc7e7e76766914909d2f0b4071336fbd29c155902b663104f0b066cb65aafb0ca35d8c486dc319976547e9d96456eef4bf1a9786cb92163a86000e9335117a252994d1602dd079e0a2e66844bfe48d3bba471a052a2980a1414c3f5d8b1aa838ea6c854c1e07f58a5b11cdc60aa5455b12c27c6662551fa58088cad884be20781f0482c9a16d169be353a6e0c7086651e87d13a51cdcb3c2d64a267ebfcfe7d7e1ca5eeb3b41a4436be614ac06c85d20af9be0aae017d6628cc19bb54e6cbcae8ff81f7551aa719441b8c01241d0ed280d5d90793bff8cfcf38c7a4a9926780f4c25c530f221fbb3d31b29bedbdab6ad05a4343bc2706b3a2aac503ecc0351acc944c1c2f66af29d7becf48423448ca463f97c0ca0c378fb0141d513486e29dcacd40c849c50ef34ad5845c8fd667090b9363ed1c8c234d33246be84003699c50eb40da04d1ad9693999095f8f9ffa71fd9315f99d7478d2049ff8ebe3b9a8f2dcc1d64a04ed3fc4a958b32cd6b88720e766a32490e0b66988b2146ac9b8f0587d68b7d6e003b8aa1f8bb777251e5aa1ce2797f94159377aab460f6b1b0fadbd1178e73a055a069471c925a7d94b8abdcdb34c7948ec5543408160df985714a2228274fde8aa94cb3caddbe14b8d082a5d7b1cc458aafc9a224090dc55c0182b3288b1aad09f8d5217e54a459ba5aaaaa3292517ca5821dbd89ab9496a22ecee190747b6413395ed6f414415912a6539b666a05b7ac6606f0c52cd2bae3062c45b59c4ed3490ae851e40986dd4a593c4cb49b36c8f7840ca7f4574c715e89b7ff1f7b6fa3dcc68d348abe0a9cfd8e495a235292e3ec2e65c5ebf867a3da2476c5ce667325953de280d4d8c319ee0c289189f440f739ee8bdd42770368603014a564bff39daa53a98ac501d0f86b341afd8b78f571789fdd7dfc97bffcf93eedbedcdf3bb85fbb2707eebc4e1cced09f74908012e57e0eaed148e8cbc8dd80ee8e84f0dd60d10afc18309a9000ccb03f39e43f46690db27506658051c22824c41dd1cbbc91189d277ae19e92467ae8dd921e25445351b2f2f5a8efa17b96a2b21ea7dee1f8e7fcfa12a3f92964da44483cc1f183f1d37206ebcb0c131f44cc5db70ada4396b0f682f4200ca9941a9e1833366b1b791689355f578b4066616cde095a10c7490fdf89c1f3e6876551bca97fd224b40f2d07316b387cfabab70c74eba41081a19e6de6bd7f749b0447d79632395217c8e8691668748952029eab4d434bc467b96e5b84428b93cf727d660cf9dbe2792334c11de7c6f54c7002cf0d13c1bb6fe5dac873a50afe3ff92cb2bc99a47526b3810b2d7305b04933dfa4979ae1414d101851f707dca21ae8172108ca62c43b3a8b4e4296ba7b4da3b4e2eca1210db995ee20a7676c3f71b4e76b7b4e595bc0b03639bcbaba1a5e3d06fbc2f73f8e0ef6f6f7473fbfdcbd50f3e2c9aefeb5f7e4e0c9485dc85d0463ac1c86ba8605d6699f5756bb8d2ca6bb69d3e433e3c7eedbf3f29fa156257286bc531fda81b5237145adb9422ac044ea873e0f88cc1f89507db28b8e664ebc46ae68e49e431671683692168538afabab46d68e52b6153bc6ba3554ed1cde4e769cc4c5346e4b5ce2254ee2e2b46e3908518c74c57cd130c26fb1d66b8c56a7cb4f7069f34cec88de879ed81168dcc575da977e564f2bc4de684666396b8b315c016d16b2ad82b6b745cb92efff24d4898a6289b3ff6390c58f29b709255a356fdf7e7ecffaeadbae51077ad9eefdb5ce8723f1f2d5db1f5fbd00edef3b2f20435d5de619c94cced3c9e7abb4ceacf4073cb2d10a9ed956b70c4e4d1c3414bc6eace94136260f8978b390752afe9c8877e934adf344bc7ebd3f7cb29388e3577fddb9a747de6d16e10836c8b74cd7b11d3856cae4a2961378fca15bd9a5acc135f360f8e7e11ed6515566e3aba6cad6781c332c7797bee9471c7193dfc3dfbd459133ddbd4bb1caff1b372a329c8d7bc5eaffa7b78b7505de18fc209aa3f6b7f76f5ebe11df6b3e863d288c40312d2b105eda3743aa30e0a350f95c524ced2028ca5120d01e1a09a378168abac74170130f93fe561aaf7c5a4153b7bd71f4381bce72755e559f9b615e8d34475b3569d18c80f32ad5c8847321fe0780c0821f0cbfc4851ef902f9486ee37e209bb71060abacacd145b7f6bd19dac1595fa4855e9ad43ef5aab251f592ec96738dc5c68f91896c849137b8c5274d34466515273f3f7e6144a3072f8591653c7f7bac19cd324bebececb7bf1579f9b98b9bcca8b3d14d28917d6423026bf61c8dd4f10b481428e67025487467395f1b5cc1f82c4dc2a8c3ed30c1efad4e22082c6cbd95bb842b3791d5623bd42957dc6a97c0b932d82478c4362085730f795f10672c3c4800261e81282daf960d44c3c7bcefc65fcc1fa173f40dd6ecd6f99b55ec580db694369d07cfa9411ef9cd72329132935982ef4950809cf250dc1d8ff8e87a9aa8faf450b3ae7286a9f1e35e7bf1f63b8209c3cf0001111a8a1691de7a108cae15383e5ca43e9d8963209a37032cf34005405c7a0f3bf65df1a39c4808b59d6aae50633ac58b0ab201d8c3dbb0a3eb0f41d864340314fda525b19c46d167170fc65a4d26cbda8ba4bde1a1d5b137fa9ee8dc190f63711765466ab7b663dc5db78c858e2fec6d7aef5d4368dbecd87bd6a1707e23ed18f414b4045991d33014fda685d6eb7c9304b7254a3b6e4f85b4c0041b638013e42b82d443506e136d60705e55955d372940f3efc07def0e842151bdb64afaef30381f05a8f2260d9c9dc5c9595c779a67fa269be69aff6b6cd2a2bc842c34c6323793cda4ce17aaaa1b31492717be75134478e661c5f1d4085c4fb3502085b14387d016eef7501c97a8af9da48d4c4812a33b3a7e29acce3b2f27356c24e5dfe3c342fbb099c602a0fd649366c348c3453c498b62e372419fc719658ed84040914ce2d4facd00c31c38d31536b3e02c1c63e29693b36bfaebc66ca35d28ba2cfacdc0477704c9709c1afa01f9c9bd6968b69e5e87fd93b38189cb69da45e4a750c2f57653d15fd80c0da6f8284cc470aa1698ef826a6c1068e2e068a177763c49835bed9f2c72c4d71b4216e5d3ffc4423bbcfcef5d6a60ecb395e6e6c305f7c4d5ba4e2b1386de00930123e3f92feebf05263d092418eaa4398e963d616b3829645ac7dc8abdf5e2996ab61d13a520d36cb08d35df1edeb316a74521766e1976b52ca3ded02645331f3d4f5cd13dd2e8f259d473eb68076af1f68634dbd5d4b44246e6b6b59f49f5bc28b69d45c7f035fbed0c66cc7e69beee2350fa8f865f74fcca45557d06b21ce42749eb991d328f38c5fd4cec83ab114d5595023496346b13388255035618e2ef105ccbc9a3b6870242e8db0cf5dc66bd13bcdc94acebe542794640e9c437db893250ef59aa177a0e4e4143ac9929b34acd85752f84474c08d3f053b060e64937b729c968dab44aaa0228a22f87b3a1e8a166f12788b2da1b8490c11bf6469ce8253f13bbe215845cb18eb02ef610bd8c60041a7c1b0d5da2c194ac31c0d8810fb13199cbd1340b5f293c4920a7aac095afdb72633d047270f542a4b0ab9da82cfbd4f744fd2ca30cab13c92b93b0f28426e15206e3821f7a896630154d67b61907ceef9b679ea1ede4e5c40dda2ab4d54734a413bd26be8a922c6c4cc5a323d1330bd9f36f0113591da5c967e61e0277e9eb6b7172c65359994cb9fae666c3f38235b841d06b187d93fdd5439600f02048acc55184c1bb096fa740656d6d52bb292b47916a1aa5555d0f5a8be5485135ad3df9cd22849185dc9c75738aacf310a703dd8766628deae3bfcce0aeaf453ff8c49543185d6772218739eeb6773bb6d39e615d36a698222372e9b64f9a5744b1cd8e68accca1866cc0428d860b5a1204b521f30c1ee6c6725416489b4130d84b4dd9ea6916eb4e2c1501bc0763e529593c1f03046fa10ff3ccb3d9ab16103ac52490cab3563aaaa6e3d87477e935d487c46b473d3a11eaa4a84ad9f71fbbf82c338ba9871575a0302b1665eb399d850a9c0441ddb1394edee8f4428c716160db6dbf115fc11652fb34f690d7825df00ec9a1474ec2766daa726c5fbce6891b212063efb45c5445e6259fac4acba9c15413827dbe547e784b8c88c15a12c362ac2a78fc2a784c435875c8b1e99becdec532757f3f0c7efee4c95f1f7fb9ffd59f373c889d20a093cc19eb038f9cf90a462bde80b0f5ef48647264bd25201d27b1c9350aee90320f350b6353efa7a5cb6c54ca2b0a828fa675d6e2b3a866a2aac5cb6fb0b819583b7aea6cd9489b0bcf13746bae6856a7e72434c6bc090004df06a42600928f523c0deea706dd9ad9d8ad34aba96cbc403df839e54d484bf1eadd57629e2e7077218b9628aa72463e64a00f3271a7a0178d6a46b36d5dcf70d9884a9bf37d1ac9af6a8507d0e23d04c4f1bc7a139ce70b3747fa4211951aff01c7d7e2c418298410f8c3ce0cc8560e4994df993ba3fa35f32e003ceef048e6cf1b3ec230e11f367ad6ae48a3f3039286037969d7363e8ad188381472d0d45b64a62fe6b29e49fe424211191920351c61d2e22a5d37165b0b4d9920a66dd39eada5ed1d3375ab0d0380e06127fead00034d4464b720442b5df3b81498e461d36a2422cdd012d567eb21a28c09b963d9cacde367371cab1ac124d217b62af1c1b40cde559a65980df87df51d65bfef2074a391789e650dca3b89f654ce8787729be2a31d9d69c06d47a49309e45e9915ebd3984d1fb66e2825b1ed1c3e04b6e752f104f92c4fbaa7fc6f7cedbc010000bdc4bef8c5dc29b6e4d06fc172fbfa0d4c4150dfa6f7f56b5ff92103795ee821a63f366f429cb9c711f87709bcf2dfd4847cfff5170f0dfc428ab23e93ea47557c0b95bcdab52a8658f83c4b178ad4f4b7ab075455152a5f3436faaa73eaa99736d2d8b281c4072c46d8bccae458f44a99d6b2a1d0e03cea7f2fbd94753a93a60484158d9c280fb0dee9595d2dcbec4555688ad8ab67e7697f2f81ff867f1998e62a57857c5d9518e5792c7ae755917985ef16e904324c1df0afdfa7f52c2fbfa1c40d5f85d04caf7f9a4ea71eb4e7453ed3b328e4d44eeebccad6ad5ef4c72e48ba2c06685a554ad65db3c1d25647f819e7f3be5ab8c93868b13160696c146b9b93cb405ab5be4cd25a2afbf5807f7d07260a4fcca7aa2e65fd639ae5cbc6359f2f0b95ff43aebfb1db1c8c8ea270c2c01b1f33aa3a93750c2b063daf0aa539dbb363c3843bcdd8a338cfeb19e856c6a24f18af094f93882c55a9756341a91424511fb3b355562c7b92c252774db4c1f1a70c068953e063daeb1dfa05457a2e0b780fa42a1de2af589517d5120c71a8fe33fa834443260c8527e4e0c332f5be167b8154035e7ee8bbc31b389f22f6aa041f26dd6f008396c4b8ff4015af75e808b5faee762858a70b0c5b94afc59ef5b3c1ecda4fd99a7576820b78e29af913be39f5243cc1831637d43d365d82bea9927527fadc0f1bbfa9b2f57da04581c1aa76a27681a531d4eec06c6861f057ffaf919a5b71edccc7635863440e1786cfc3d8186e61fd9d23d11b8b5e4cec4606a55dae0f7c24113708d641ab26efade508d1d1701d62ed4d0b75fce371e3af3d91bbf8068439a40d27aa522b979b49f512d7fb7ba9d27ed73e0c021a93428c16f239134700131a783bd93a26c0c1e4f24a1cf910861ff4d7c3d6d4bdf5f3e8bbae3f645f12af66c823606dff2b5bf2aec57d2f572a5ce088b48ac42f86dbf3eef7ae23df79acee7ae401da7d4f7c9c7ebc0606a0f3cc4f3717c380e220f80bc44b986498405947ec3f9e235b28e61046a64827d264b386798814b559c43d5a5846636322eb8be6a2ba2a8dc02730987d8fb0866c20430278ea299a2c34d48f11fe9e9cddf87d9d4b487b66f2ae98cc1134e4d3b830fec64ec90ce3945956e16818269ace7c6f72f3b5ed3c1cd147f82e69892864c964da2b5001b9dfebe0f784788cbd88e608608923110c07154a117d928dd26a1a70451284e729f4a52d0bfd50fea7a6b6fd418bb261d45f590c691d6da85f4ebe20292744f2651fd7e6e39a7ddcd98119b6cc0902858d1d04044a1ee1b2f0a4b26bf391da77c861ff2e958fd81693e9c964301ad82ff38ddee1682ae6e3cd56584e703662f93040733340e91b149ac67a2866e9196e5f44cee62585b9b77e6b5eaad6f81989ac103b27349fc83949fc9179d2198dea5ea9c50e83f87ee99a95cef3f2654e2af1234af3337cfbe6ddf1fbe37fbefa70fcc3ebe31f8edfff72181eb4c46c212deeff944334814c61788e6652bd809f6fabbc54fd900bc83c7942468bf08d54575296d0a4e97beb9610f4418b95cbc453be9001cfe52f71e631defe2ac2b8b7d1b6ea4efda6c142aa85380ab668035dd108a4168ca6acf1c3baeda2d4261a1eb1f08804f35322098eaac462d95c880a94949354b9a8d364447d50664e3c06e1754a634f538bb2522c989386f4a67e81aac673b43facde2e1b736de0b3907d68bb0d83e185a9e4cbec34407104ff187526d5b3ab140631d7032235bb371cb38a015b0da0410b17d43b6d65e3d055c35c1cd652c9581ba17d4a239a45912b71be16a5bcc2243d11231634b8412b16fc5b55ad96c320df1936d684149be45353d304fd02936eb2e9014b608c968090ad65beeff61306e982ba3f20dca6dfa89aeda7b1a86854ed852cd16f2cfd8d4597c09e079a6634aab61ae4dee969d91b88afb9bad864a750f510078a950c16f30a6617b81f1768df889680e10f44bb12a9a5f470e7690eb0e07b6112cdeeb27852e65b1fd20e2622ad2789384feb0183cbef107426a96abe51a021e315c205a6685c8e9336b70c0b72b7422595a5c6c30ff8e5d05458b72ad097eb6bf70924c2876234a270d2a24eb3b4d655165591d6cf29177b8db7308616c8e48a43850fb657feace3b5f8775bd9e580e355a34f47efb938740d0fbd719929b3e4721f66d40acafa2eda359c908e06ffb465fd20a83721e48a5e58d4e333fa438f1a4a5e573574da876125deb20cc458f4acd09300ad0da0f53d0191ac842dc333d1eb891df6e5ee40618dc67ca908a8fb7277a0945818abe1275e77ecb57459422c7ec0391dae5c6e90a004eeb89b901abb0b6ee6e2514a85a7deda24d82794a302f4e9cd4275b089d69dcb3fc433a9be491bf9bd86df6740d81946cd8751f5011ab60d4aa2f8371a09c326d8b8ad4e5ace7a1b9aaf2d213bafb4f62bad483cefc1816f064aa4c2da5630237c59a757f850a52cd768312057ca7d22faae0a1f58ad8c5e47577fe9d264f34a5e11eff89b2a234627d086f0d65e1175f6c17c7c9dcef3623d6e29c4fa3108583909b6d3284b5d8d41d80b695bb6ea04ea6eea032a785d4436c97e0eb445a83cd96e2010b279c338f25fed303c0d55088c0af8c681a89af63d5089791bef959929dbaf5b6d5e50fb0ebb17aafeb6ebe66efbe79addbe315edd6d77e603d72ab6a07114f19599adaa6c17e33ace560b5ecc371fa57ae6951ae8103994a0d0ccc87dde0a01c2ea77c08096be74cb8eee8603acdded48e057de1a0b3c6d6c1b1ec783400ddcaeec63424b3ddc6e600b39163c8740efc6a9d7d3ed7208f67354dfebd564255d5a7e8f34f985d4a4d293d3cc86d1eb167226a90ad72673486d6d73879699b5f18a62aa679f8a861a0a4f05ddaefab3493cdb628ffe4e4c11048221f919638602c6869e26900d936a25c84931ee6682620b920a125b3f51ab4397fbc766bf24ce8dd810f1481cc0a384fa11f4dd3433419b58862a54be5653f00b8287a9918a9f1333a01beabf6d6ffa077b8acccff352669a75f80eb5d347507d58cb6c39917d16ca6da91f7ebaec9847c1b311e3f440766cf910b51e46e5cd0a609491efa0e2f09da0c41ebe5b22a3dcb1d3b1da5907134bac1287012d9925c07779298d461f5bc0673e045d170f6dbb327e0f6b7bb7920fd87c3de4dbd2aaca3f066368d5f53f1f9a4c42805c3b47e12c1ff983434c033dbcaed36c6cfb4cf4832fbb627f201ef1f911210433081fb6a0a25bba60b0f865e903ec35e21c3f631d1f6604531e79eb0c8074696cd291d6cf443ff2d59b3c63eaec506d0ff1a98738f5ccdb507b415870c82344671c827a24fa3e5a0c3884c8a4db63e9879fbce97ab75e38c260caa5636f85cdfe6d4999217b460146d9f8340c635168c98fa61a96e61842f87daa2e86f374d5870f8926bdc3b94c9b650d31ddb111c5badbf1faf433a8e976d30aceb693c24e81318198aa01ab89ebf021e471c3cfc43d1d9eb6d37b314c4fbc29b34420804276d16e1ba2ff4ca1a1048fa8e0ebade363a49524cd01611d6c1e3cde47f3742d306ab14497054cdc8ebb922d9dd1abbecfc579b5d22002fcc07e3d2641e3a9474077c4c1c066020ae6a32b3253d8d62516a9ce2eb1c82c37b48159dfad092c68ac094f0cf523c86d20a59aaac45e6495185f40c7716bf409f9684295160fdffa7e2b1261d54e44799e6562e1d81c3aab47e2c0d21b23c9890a84ae90e5c3f36f165953b63131595b0ac552cdf1cf29288b1390a3af8e6110438e30934ad6f3bcc47723e4a9b05ca1aecf938c82b88db185f0c1b16120640fb946bf1884d26dc6d214d9ca28b11247a2876ac19e138dc74a4881419ca8780a23a7fcecf67cb896aa5a2040660668da7e6d9c10e972d9f5604580e145de3b648a25b0669b26a29ec2b562d61a9c69ec7a8b424e55226accf86f16df34af74fb6a33807c0a3046010801a9ad1abbff1a432a512d1544f1b6314960317df81c99d60c60eebd29c4ac928d8547ef0d3d1051d5341d99cda4d53accf3ec5fd65f52eff2102aef388c18d6b851237170c85afde2b752d5c26b840b6f5b110e988d3972186237ad98f2db78d5b6805989a747305ea32d341e73b737fcbaddced7496ed7791fb00d29c8481c0cee3110b3680465b705d3074a385b758dcf02de110c8e799fd8b7bcffc5d0f3af051b8a635754d53511dbdb2eef6db7d5db6eacb7a77471621f6baf8b75d8c59af6fa17f10c2982180787996155312502b17224c0d128b0843f648290637efa2a4dd931583d9e9c4b890a0b3c2bfc14e1623d3bb5faf42ad631ef9a93478f2ead4dc3b5affa7614afde382718dc1d2645e4008eb63efe7a4a68bbc3a713ebf3774d87e522463f5f7bb5906ae7b07ddf1a1549e57423e299f76b2ca22a93cae94a4c83b569807f6c79531715856273b7344f9307a68c10e7cfdddd26eab73594ea5fe629945cce072ef72124562c337ea144545b46a685c63b9773bcea13d7cab710d6bcb06d639557f6ae1647e2723e74aae1357e583359853bb850647f1e7a151c1768ea30b689443d4e2048d5d89736fb6027443bdb66235c8db55f8318bae76546e3e6a42e3ab81a06f1bcccdc3cbcf1b69b117559b13b0bcf9d3b9062f78851c2906b596db8eda069c77d026d7d8aee916a7e38ad45b8a1c5c170ac0515027dea3986704b517e62c3ab5a1360c75c81cda5b7fee1c4795b22daacb959332320d8008cb7e9f34676b53a461c2e77b81d7029782b119f54e77e0698401b1a87b0012dfc71008c10513761550b1f77bada476d2d9c0d9bb160bb69e58584e04cf9ac94d9bf8016c191a41e095cda5a7704fa0c288fd8d1ff5824c7a2316f84b3300bd96eb50b5f98a81a21b86aec01d741db31203165390112ac1fc428b62e5062d5a6c450fbb911458060ab6fbccefc15f00cf24ece92c092cb36b26937294e7b55abe6bfbe34f609c6dc828711ee8a128ccb801e0ce6e9e71b4670e7064359f0639136ea39f871b8f829d6ae79643516cae88cb7f13c9a49f53ef097dbe847cd9882b9f4f90173e7907b1f06246986f6c321b77e678e7c700b509d21fb4e86897399b8c0523c12936a3556db34732e605e5bf7b913800581e22b16c3c67cf0f089c43d3e4ab1f9d927c3f6add53ddbb9c90ddc4c8cbf93ae11e2d23678f30df37eeb0c01d7751e7d1f9e70ff41b288dba02bf28d18dc6ba8fe2037788476e13c476b86f83e762ba7bd01d8164562323e7f10b1b10516d206ac71d939653e4426ecaaf17dd36b1c7c031cd0dfcc27e787e5db258722ce384d345b05a66eb00c7062da5bc0525bc7fb218c75808b5b41de0291a4a65d03771e61b78f9bfab15b8ae6cf564c6c5885d6a9b20dee83aecf9d93d91f76b09cce73cb7365ae1314d3c2e5cbfdd5dc6d4cbf0ba340da7292c6676dfb7b67ab3318dc3034b8f6158305b75d16d376f3e9560df9cab4ae995bfafee3ee19ece81e17c6f4be0dd9fcb6b96a30c08b1f08a59cc9ec9e3c8891aafc40a18d5c9c668c770f0cd7b90459aec85523a629c47852176929968d7e5e221307d89d63ee1f39914d93d66bae92d27dcef35f51de901b872febb752a7a57bce635a46c88c5bc9467c208f5c62fff2a990e0b8717424f631f1b295359377899166e062610a0f657211e768d8715e51a01f80ae478fe0c95b1372ceaa7ceef2446224d1f35aa69f31b1415ae6f354b1ac81c8ebe68dcacbd9f7c4aaeaf5760a0a5f8361cb429656ef9577360c0fab5be00f0fed3595a052fda7272ea354d67ac5ae2ea47e14407b63e1a157710fc25c1106508a4bd9407215331d341dc35836b3aacad8e4d930ada8fe2894aa8dfd85f16d819d68cbafe48459eeee0542e54b8ebcde5a1d71dfa5007c1bb27256491c2aa9c6fce65c51e654657e1da7388bf6f3d685efe99e01486bfed53d0d28ff85f5617b710eb35634e06d3e0fdf04a0c8444d1c89fd433f96a2f3e5f7c82b2bb4bee84185f6549977e7093c78cc8733c75de038134069df2b321818670afd8edb6e8adee43b9d14ed9019fbd276a7415827f9d9201aa2d125c48648810b93082a15d3bc502cad02e67fcac14f765e65f974dd72fe690c5013617288303ac71c843ea1eacefe2c8d078265a0fb29b11e87aedecd1d27da5435508edf3553fdf55d150489d83457dd2b9b6922ce374cd640877a7798f14babfc9c20c64fd1dc42368e1cdcffe9c2236710fef97281a12befe0c7f5b1f1130c9eb662466c006debdc01bce1e8dd2a7d83b9b12ea4d0f09cbd94a337462031071f20786ec79e9a877e2bf7e2b54dddcb7a9bf65ecbeddad8c7806d685f115bb4b64c3136456eafab1d3b5881b20552959719219ddf0533946db9889b3aeb489d755027d08054d6529a0b595d75ff5e60bf62f5bc2b22f8e2cf1c181af08f0ca6a90bd0713b38f87efb9f1d3fe30c153cc39420da05232b74f98736caf0fa4303653b37cef0c42c58a00d03eb5a8e46e2755ea685786754655c9f75ea59981b2627a23383f1785d78da33774e7d197fe7b5cf75242543ae8d8a2c8b5e1b95591c5183b9594475681ad6587b358cd1229bb7a7099a33e62ba87661431d1a0e199717796364956ba94c0e0517c821c728fdbc03e4cc361c3c56ed97aeb38715d94bc0be162cd366620f3f7c48e7116217b21b837d7514dbc3d5d0bd7fee8770cfeaf4ea851e665be6f716bd94991196679b8f819db961be09a334b7c52c769253b23a7e102acda47ac1bf47ba4fc4e59cc5a0562b1084bdaffa1ec0e16a3ff1bb18ae6dca95ee4607ad4607b7377adc6af4380890ebcd69e3e2c2ecbc901ffb89d0c3d2bdacf713b13e48c4fa71b88e5ddaecad15d581aafa72ee1f6d4f4b7d39f74f3428a8fd13c08f3316ff1216f3d824e624b794b99e6f471339b9b729424fd5fa403f36d42f6247f4036d2a633337294b4fd56a1f60fc8b71512b0d76b52f7645b8e250fa184a0f79fc90b506b23e309af7a0c5fa3196c6e0b5c3b499011923ecc8c0e2dd6c1a587c2a6660317837f1fb648b053db0e30fac12fab6172f1a921ee2aa6b8838a98e216ea9cff6c664f4b0ded83afafebd230b4760cef0bffe984ef89e74da38582c58a85ff8d6ebf1acbb701c11637fc37c0c48b1232efcd8c20ef6a6d3b0cfbe8c46222f2f65ad4446dee0e088e62a801860bed04bf1388ef07c31d57cd1c262ef6afc6db53f26e23b26023c26223c26423c26623c16ebc737ad8b34540f2f94a6ede052e11178f3fab99c0f79f44d90a818ffb1961b55c4352a119e1badc83d1ad912f5808d100bb8cce32ff72fe7e0380fd740620d1338cd5c2860e1426b89cbf9903904f306fafa5472a5cc2562fb765ffb91d65edb6fd246420c9a23d19be75956481e6c337414330beaf97e9d068ec8ac1e7d09c63ccd8b024cf503887ed8c43bfabbd889324700ef1b730268c9b1acc80ac457a1d4ca8c19dc7500de497e96b0e55ef5f5de0d12b150c3b5d809fceb9859166df3da7a9631c7106fc1c468846e4adfe2f5aadf310df758721428173b621f08500b21797766a13da7b5dd76afc753f15dda28881f2fe6503931e949dd0854400af979e72736d01c761dd8c0c9f072def63074153d34631f826a8cb5721117823a0e062b00961d7c8721b63d54f1bc7a3877a737297411331c6251d59a830be03d6b9d707399f3d0ccbf8b9680ba302f0a3db8375390117579a905d8adcbda982d76bc893a44f7f6cdc373837681f7537bbb7cc1bad15527108a04bda7b9f02311a4eacb13f12981fc6489f8e407afb49bfdbaaa5fa4c56459988cf13102696bfb0f204e5743ecb985766e41bb7c473883a101e58ab8c0951bee898e690ff88b1ca5799ecd5a07518e85b20d44af977326304c028473dd064724380d0f1f76eed78398611f3bd9ec6dd2f2b31b09cdbbedeb33d576c033d0f879a390386c6944595d6119d77750cebd73e6b1dd99298f59c9e83f7948468bddb8da81c88ed7f4e580a6ae57afe36ab57d5858b77910766da1d3bafb9632be46e813aed0275c21ee417f283e89a7784cc5cece27ef86320bff1dc46cd82df2cf1205fe18204f6632f3ef3b1f812231ea6b85cbf32fefc4affa4890fd0094242f2c0a918aab8b5c4981099028258d6eb2ac29858d28f389c40cbca87747d95ede88a7629f838c1ca768448ac358a31fe544f5ddb0f5d5f0baaabf5375dfce2bf1a82a5163ff6350a53de76f0256df09638c57f37e6b788daaabcfd2cc8aab5258b08b8e56ff4dd33a2e4b598be6dfcbb4969bb6c41bbc1f54e4eebb6230ec6db16cf874f607fe78c5ae387077e77ebb30523d3a9aee131ea420f00f349ac99c7c8ae7bebbc5ef37421b78fbb6ef2fa8ee9c8d74f432f0e8eff3963d75fcd2b11aa3ae41c102ef1e79cc86800102175ba48dc26e183fcb99d696395817db6ab54f9773d244c55e9aed181cb17819ff1b5f972c9e509b81b353b3011feef1028df6b0dd13b41555c40e280829d241798380545b3f2fc3dd71d308d8b4a89bf9ef796122c05b9e98c1b274bc31835a3b6e417c267cc3038ec54f8a9d075f0b67e6146328a354b67dad00ef19de26e1dd642bfd1c08b6ef2f6d8784a9aa15fc7b1197aa77e9c73ce17a5c3ba6b833595c7560e77c2e6779f93655177dae32d154ec7d05fe5d0825116beef8b5412689a9ee8c4e0a3632a245bdf1579dfa3212dc569fbadebf976956a72a9fbc58d6975e8b44ac13c17fd961778dd930f50f1f8a8df2e5df3d191c8c0d04e08fead659d9a66c7a7c796c79d73c43bfb6df37a3ee7ee3330966b0712db6dca1502971efe9c4b0a47316b8fc51ac9c145523ddf9f16813fba4a7e7939420fd952353fd763645a2945de6e3f750e7f241591382a3236f485eba642f9bc766534bc31bb4ec2b2fe79d46958bd01214d80cf37b0dbfd7a1384773e3aff6f747afb2994473e3b25202de7797b25e8b669e1605bda272b0deae4453a60b1b38c658571b130a08a4949e377c559e8a7db9fb78209e893d01c3a0023e8af7f5525dac4790fd644dc1d7f5c52ce70bb5f64d55807ca70d99a7bca84a85262846786a6c7bafaf8527fd08beb7be8451dee8738b33b41befbb4e9834ef0f1fb6471762697a29fb3e8f85e1269f178b8b14ec8efc05722f7077d5b7ceaf2beabefb2310df63ec28e4d5d332f3c2887a2ce6da779af619ff5a15c3ea52d6759e41c82c1b57b80f83d09bc3bf0623814134ad29a14d1ce7ecfd662e4e315f872a5b6f68e34fcfb622abb48e76fe3c6bd9a8aabeeb34f53653cb388172b966bec558f26989794d4e6369b06dc283e357bace0d656bc18407f8b7aa282afd6998ade5bcaa0a99963790a0310c2d430637a72e6b0b42817e78e6966dbc2e28ed7e87f32799f61cb9b44750a66b7bdeabc107c8b3cfc9c7ebbccc0415be32d971202639cea971a7560ed57a81fe13bd79b56c64b5f4ee43e764c00daa5ba663bc9635341bcea44946d23c57b05eafabfafb2a937d99d814e9f32a73bf1c1920ab5fa852cb4b5907b9f75d97a6b83f883d0ddc537f2ee7e7b20655112d8e9125db756789f620cdc6ab7f2fd3a2e9bbbe9260ed3d51f59bb2589bc4072aad675211e64118238e4d6efd438f9d8edd0efc3cfce531b4f6fada2e6acb2a0ce1fad98e8e7c41e46a2c24bb23e99e94c3b5fb72e389afe672884e357d7d6ef8636e2e878bfcb2521bb6c4c437c5f9a3dedca65933aeec7f2bd3b96c16e944762785221ff64b3f33db877ddfb9e0f094e7b737bb71e4dcd10f299bb06af7e043fab06f61052194ffba39bff136e98a4d2e249b111e76ac198b135c353ca3fa3565d21fb8536b3e4c8a7cf2d9fe52d57272d1a8b456fe2780a13fa097eb85bead6c4ed9aafc167fdf9a11399ef7d83a04bd5c62aefdb1f8726fcf527755952ff42019fc799a972acdcbe7cd424ed48fba118358cb6651954d7e29a31f9fb7bbdb6be1d28f72b2ac75ed624dc271c8ec0ed16c28373fa66368442d29bd4d5ecea0d647ccfafd91ce17c03b87f08b55bda8749fe52ccc219f97e2e3eaf94ab7d27cc4c735fd0de97b72b4f35617128199ab281599940b31a9166b63985ccb6659e867c8c5b201a6b4ec299182df485e2e96aa1986511c6076261bff349ff5478fc2190e8743f168e4877388669f3f1b36453e916849ea1c2d13832950950b1e3fcb7542d44ff3c7cb7ac2a8bb6f1cf659e21ba107cb04397dec2758ad5e2bdf57839a1a847bf259aecf7c21e5a9f376c2fcf68d4962638b21f1200e100004ea1856e2bb108572ea404ed644bd8728d7ba3f64ae2b832ee1066e5113cc2c3fc479846bf54cf426a992b3aa5e439430fd0c4deb5ea85f406b8baf8f049b56dbe1ab3573f406f9edc697e5dfb461f3853cc9cf9099b8be166cec9090c9fd7a70e40dc6340a13d7c2855acaabd1b2d4c5199d2ecdc36828746d8c452155af11e00b0ca7a59457f608b6e0e9e346671fb783a0aa4a5f0b9a492dd6100bedaacec9e9d5526b1f587856fc1925e204483d407f27eb4b7d826652c1993441f421b5d58030f42c58e948465e9801d2215c83946cd49b742eef363a2f71bf773d7b7fb647e1007fc083bff9b8c745b5837666b3ad29738a7ebd755529cb4e9f13d3056a11f1c86c99c118aa6552f258520e44197e7c64dec048930d3d06787f1c4dfe9f4b8e410873994228554600afafc56f2ed0051060acc4a859c0945a4285ebdc0b35e7b82b347f3d5c7d75e68d9854f345215743885c5b2d6b515d952e0a283864e016a6cac1f38975ebded3334a60c80c159d25b03fd4d648970de6c285d465fab4a5e2212534c31c66a2c9cb09206b2df5142acdff57255195ae51b60e270c721b82a127323454e3322dce5ab3fa8f1d55bb1179992b5a5ddc435a35dad023b3b3167330a4c5cb4afcf0e63d387db293600f25b878e161b00106f4e399f207621b4a7d68a264807d6125aeaa6591d17d206a3995b52c21e9724549f0a1a2c9dd9e88450d2c352492d2bde20b06e93b739fc7690c23bfdc99f0b2c28759e2ddab1cebd160a816fde22f77ea830b091cc9a0876a249f5712293a21581a57ce6c050f3cccc2700b36d784aed2da725c21b3e92c06a35eae525ebdb123c657bf1f512250866315a40dccf9156f24ab8bd39329d275a529291a727e53adb0ad777bd91978c3f83d0b87d2eef6f2b90e4c97de64ede45bbbe81a1eba56b26c963592aae6dbf4521ebf6ce8a98ce510b8ed4dfd13ac3c56ebb3e0deef9d0018eb871146bd7e4d291f8069e002adf5db67bd942bf5fc32cd8bf4bcc0511c67fd74259b370b3a49d37c9560e63d861239bee649307d9c7143ceeafc53188aa73aff34cc3320c4d4d2d08dacb2810c3510eccfa420dcd9c1bae2ea222f244ff33acdcb0c5307bab1c240069a11de0b901efaf4e76d1efbc7cdb7559dff5a952a2dfa0b3f13b30981676529467389c92ef95717c0d7ef46df78692d0fbe9397b2e817fb89280e7ce871d775137ff0a4d83f831ecef55f867e3fd305076762577f3eb09fc7547f176bdb75b671f95e50a874db670e36ad1e9107f1f0a42a1b552f27caaf71c8c64d724fdc47460030c21f4a726c1add448c1e3d127f2b649935348a47230af26a45c0beb07744f412c731de38e6883896d1437114b9d10eb96a6a52950aad911745aa5f7df3613af9f732afe50b2c892c8371c98334e14716c4c387e6cf2196c534f0d44ad785bfda6a78a3d06fd5b45a7d2335cefd9cd7cb3cb302b9b91ca2968f46c43edb61f331cee530b8e25d811990e7752b9dcbad3783b91ca64ec6634bc533618265d207140eb9568cd27a34d6d5f870be9ceafb3ffb519619181c5939ba95abae651d0496232403347b6b2256400c8774f2f92aad333ca82a3fcf8b5cad13c251cd552026bf7069672fd24b29cea579659a045de2117039a75f9874c5a75f8846e545611dd3cfe1a59997faa10b4c65aec41c96e15c42fc2b935f79512c67b90d328427a35ae048fe6403e963492617b59ca4ca02bd9475a329cfc1f0abe19eaba7aaac32fe12a9b2b51ef33eece9b3e70f7182a8c65c7a78e2d2f0ce3133104baac0cbffa4874522b5532346d70f009721d92c99891d8597b7b082616c863b61ea362780fc67766006f44b5863911679dab8fc2880d69a2d1b8b8f384464fb8e824b5d7ffd88b0de00af3ac43d7b8baf470c46d6d3b57a8963c5679e23b5f7c8b0fed7bc07c7895b517ce38100395128daf7f955a8d262e97deb8107862c5d5f8b0778d6fd8ce8efed231cb24ee7a80d4fed71c0679c06719099a4b90909644c1c3f34de9fe6a5e631981f0e0a63ec1613138246f4e74b4546988d54c0a89fa74d3ea1ca239ee69945f1e20f438d7029bea0f52e4ff3d9b296a25a2a3491663de39c2ed322cf445f0e6766c391063e383a0222e4856ab8506ad18c47a359ae2e96e7c349351f41a34fcd08b1f05333ca9b66299bd1c15ff6fe6c5aeaebaa2ae450d67555f74fbf789de6059e7d4af30d40c67ae03d25e88ab157079c7de56dc8e9176e5871cb0a7d087cfeeed4d3da04410b375db69b03f2c66f58e7bca15b13e5d2eb9d4f738c35cf387043d7a0984e1262cf71992b26d764ba67a9f232c5b4da73d4cc19f55726f50bfa6dbe92055c33037e2b9ee76506cac826b0a761009c6ec13f13260a4b2d21ac3de137225356a7578de8cf970d50ed262f48eb0cca84fad205cc77f1d20656ae38974304ea29d3c2bdd49cfffb7cd1f7f48e68857ccf45869316ac713c2ec4a4906934e2a4db126244a02618849879f88ca183d9a86a1103391a8977aa5a606cbdc9b2aef552da651345552d4435d10596a8c00c5918be89be090aab1ada6a38b8036c40b88977d3ecc7a23a134b65d92b56e8734356a91b51886956cf679f069a781b36a9e484157bac911142ce4a732cc45b5d69de03388b462111ca4b25679a376a2a314f3f4ba11fa88ca8fa70c9b7503460016bc32d429c4482648204aa4aa497559e89f302774bc8e954df9d6cc4efa442fb7b7d81cb3473893a8674cc8c4888d24958259baac4e3bdbdd5fe933d63b64117118a148b225d34c61b87c4153f8749eef612fc7b5a5455cdde9133a9be4f57f97c3987267dba23079cc72fe5d5b786cded00c8f7f7991bc0c8dbf8b188f58ba0fd8e39b522c6fbe8c881451431ac37967ceb279deaba2ef82b0271d5fc69a01f7a155db655c6ebdbeefcba80282d786247f416ab5eac6a1b20ab7ccb4570fb2d00fc4f70b631f4295046a03a442c457a8e8c8324a27fcaa4e1a5bc32368b64ab68a6960863a46827e004e99dc4187be825e284209f05e65a34be6a1a0c869b8354e58fd28bd0738a5181bc42e88f3a89fad6cce550136766c1e118070637b31af7f6d5d952cbdb6ea2065f11a15817b3e1e82d8824da1417058c4e24680647fa33aed7b0d53b6a47100e24995e174350cb3281e6eaf92a3785be88cce21faf32cc333f0a895f06e720228c8b8ea1b7da4d5779b3db33fd6e78086c9cd33a98d3faf639ad37cc697d9f39d1187aebede7a407c237940d827fc621845faeaf8d3a68b34d22c4336c442ae6e9421f47546b1dbf84f8c2a8784475c6b4aac574a9f46d5a54d5e7e562c8d8ea889cf78ea92436b11d84ec50da81f879182a557fc453ae57879eb99fe5baa17d19b4125857e79f12e16d7575fee9045fdf5cfec205be666d13a684f08918f5c6d08b460aff9abca90eb98286781650bf3218ced3453f7a32e3e1407f235863e19fe24cad1772cc0c2f12912d6c382f23e7bde1162383a47b88ebce21aeef30c4757488640ee20f107c1dfce199bf5bef8dd65e845b412622ad1b66ec534f367f33b63acdf2147c20f5085d79de90a6d3332583966c1236d9622f7a9bc4a85a1e445acddbd921820b40d7080e94d16db469c6610bd0fb4d063d562b03b26fe80956268c4516d54278109c4ae2c1d1515c6b81e06d450f99a2b0cce46d9b186f4004820eb9deacf61a88232ebf254b24d0a713293266418d06e3ac90ed02b6c76a961e5a1c06854c3ecc27d6aa86526f147fb70b4371664cb36ea7f8a2489bc6a4318aaaee5f181d4555f7ddc458b7c8885a60d1c31e58a0052b52ca2b369abed73ecfc622cf3c8b5e3c83762c5e993dc17c01bd1a13b51ad3daf9df5176c5ed903cdb31da365c64c41acb5b85c88595407efe3e9f7c36b4ad1ffa48bc79f9a6ffee9bc1581ceb6bb1fc2caea4682ec01ae05c0acd51600e03106b8331011a4563f8fb80b831c01854b76c72fd72ce9548f52d5fcbd9b2b0a8bdd05842a640a75fe0e44ebf38fd029981b2583fc04c04609bc040c3c31a932dcef289906993532a1013ada89ac373ba904df3cc8eb7cae4d03b46fa805a6a194a82bda312679348445a48b8ecf56b7e92d69931b28b7bb1d3996764f4226d7e321fbdfb1f90da957a03cc6421958c9de33623e7d81673f099f62e3c7269962103f5befa0e2c0798c0c7b06f1ebbe5d43677e2b94a79c55a86ac13b30699cba16710c2b92e0cca62671389d6625a4522b6e43b3bc1ed459559336e628a333149216652bdc44adf4b95f6f381578f4c51098c35e7740a06fd25b8a8346c6be9e97e80a16748c7f5a2c846d5d5ba6310bacaed43bd716f52d31d7676e8158073249b0efebebeb641afa81e3c29f4cd179b9953370433f1cae8698c7607adf9f08a455e7ee6261d1b6e198768eeaab1a87762e77e165c28ad6647476259927e313477bea8ab2bb8445e8162a277fa454fecb06ddc11bdd32f98f2076e485d32ec0d829ba96bca744b05c3020984b752fed1420633dc8216b90864d63e8c0e050786fd60d2c206d2d317853d3fa79d9a905ab77d65dd34b6231c6106ff803430a24a9f123392e3e095dd3e165e458e683052e75b9788b98c6a7c683d1aa61733115172d56b44a35265551d3cefaf15b60314b73a9d391bbdb5b32383a20e83a44db98e6eb1f2e8a0b546f549468a1a93aba9510243fc2e7cb8f77cc1a03106687c6b0053c3da4644456358ca33cca5bfaec72e6fd5c97e2bad9cc56bcffa6eee3b9c1911a5617d99f9231a0f803d02da461acd6c5e82b6d324759aa4930b97d6e80ebacd27fbfbfb7f82bf27d55ccf62f7f193277f7dfce5fe577f6657b411727e70dd7a930017b8cdfa3fbcad7b0320632050b855928da98e80cf83435eaabcf68d4c9953279c296b40e7b22785c993beb75a1173dd32620cc6f8466ea2193a4df0c27240ff0d9cc45c0ebb38145fe1e786c26896d71d6e3cfa34e0e50f139b544b9b4521c2748474e956e62376497312e44da775f0b97213d78e38376fb22fd2122dab6b4bb55b8b3b5594bf9ef8456787437be2b08d29799d3e11b526adef437384d9940352ee6f62e291a718dbd0499f63720cbb2eb4c2011ab83c6db03026770e613ee65f234d9dccc455ae2edc7d0786108894fae59159a0b896d8edb0753e42f26c5a81532d7900eb29a69a2ca1c80e7aba92b504d3ebbc5a36c55a0f92f9580f2d9c9f2f64a91f726eafa94ac2d392e1cb2557767891dcbe06e2cb0a1f7f747f9146d444cbe38a1ef8005d80bd0abdf5c83e1c0c4a30675184bcb514ea86681dfa3edc6bcdd7405622dff8b3f76b2f11bd0f79b6eab5b57c81595be02aec0affbd948dda7c0559846677917e8596335b037fb6ee2a2ad53f5a5755db191c57b9efdb447648d27fa20576dc075a7e8b65a99fc12235460dc647f2235c021f8dfdd64793495537fa48402faaea73a2b10c13f5e90391d88d06edb766679d6d5d558a8f94d814c00cbb19404ea9b63786d9e2a2439077bae83c4379e38b8d8966345345617fe06f165f274048fe866d33aa10d892d1b5f36ae573461f709797e80343eba9ae72f02e0153c6122464f896a751c21d09a517b276d28dd1487c6b52af60444d4da2a6cba2587bb72b1a71e5359d5423ab6c3c31c979b51abac17954d82f6a7ba97be755bf436cb651f3351100037ff4076d2e3b3cf5d3aa7ea59734b0556e69d1949c0f352100cbe44c1a1925138bdcd96055932d0fbb8d9d05b32225479be3b7809e7f82daf04ac5e3e92a6e302a7df24718956ea6ab6c48f6f9b9b98539551d4f41437df8e3ef8e94c75cce08ea7753a000dcad94c8d4ff4369913f883bd124e02be1e57557ded2779e0e991f2755f1c95fe7ce8773b805030c1b9d2a3c78f7c3823f1609ee8803dc13c2a32b5d8fe36e591b57b283955a3d6b386fa15b8ea1bd6515a0cd18178f36ea1e2847bb958813dde5d95d302f94b47de076aedb234c3882c042507336771043fc1f2974801d37afa037112b03f746e2c26fea3ba6fa0cf9cf36f8870f5bdfdcfb8bf5a2a7e19c40f4afbb6019f2d0772268606951be00ff6425b98b941d2f8f68b611c54cf787ede7a449bbd9df6a65dc80349e9ad23327e40b4f5f0c6ae479ebed3c096e7dcb5aae622c97f3774a2e9ab1dbfb91d8ff6af8d55789188dc4577b62ba686e796ae803d19a9e7b85d8c6ed9387eea0ae2d1ca148747504f6daf8dd7197282c1aa2496a7312c0a2623f5a0718f4a245b29ebb380a473064a5ad968d928b977292cfc18d9ec319b5e098d53df4e36e908b4a9d5ef5fd99f519f041c2bb4a784f9ed8de5be2aab4267b6feb6a56cba619c750cf1426d1a60631c7ecd4f8320e7e5498c5769a65ce5c1b123f9b5f897084439ff841f7d313d625d015bf93f22ea2cdc77ffe8b0d8eefa6d08f1d057700f61261b5e0378316abd29d6a91879083edfca7e7dfb341ae8d2f0bfed840c37b5f82e0903d6f7e5816c59bfaa7329353af337668d86716519f8ba45c7e7e0f4628b64063dfa747628f348864d2fb749ba0a0dbf00b757aa52f6936863b710be09e8276e5d5d4f0789a616b441f7b18796ca4ee6f90b8470238ea585074be8ab5e6e68c7d003dfdc4313eb74086a5b7dcb6a207382c12f6d927d3f6247ccd0d301c25d92193871402b2cf78f7dc3c64bc380fe68d03a2889e0f1fd28793fc6cf82b8c2264c25d399c2be3f1f7bc96694c5aa92b595965143930e83e5b1d36d0c8187fe7783e40d84c9420c6c7730b4718c3b18e774484397727e5ae877cd34baaa53e343684b7bda8e860e60d6dd13ff3263f2f643f1f843afa8d42fd0de73faa9965e2e34d4db75ad10f33a9de55b592191b1f7ffa62ca7a9ad9ad447483b9068bdf41d1cf21e64f68f0f1fb4c39dafbf3c09b0051cedb760c876614e6eddddba4358796319134184bf412d183071d974bd35d866defb377348d8e2d0c031d6060e1e8c6335fb9f6105e823fde1f20d8d180fe30b10e00dbf0a0e724f49eac817e07a359417e1f99cfefbd584df774216dda752b79b5c7c6343677d4aed8d707e66bb89b76770301115bacbe690911ce2284e98e52a3bb907ec4b43f4680f44722db1d708da11a0875c45d106e7be19033b74a220ce798f71a7bc46e87c166eb7eb70089bdb1eec636c4c6b111778cf2f66e28439ccd1f82321cd60694e11cd53dc9930bbeeb38830dc8a44c674613fc1f401c36f97b218ee16f82c7e7662c8976da81257f276db89e64e19c5c51b79e360262fec2769e7ac1cdc5f3d29abca05ade84b435d40a49957e5a58cf59f842e6cdf3544d2ec06b174b87e279d1544ec78fef91894a615c763ce6954358e30281531cf068dc741b86ac961f20ae700a3520427833c4a9937a33b8f4db81c6efd101c46433f013f15b10daf8664397ff7abeca9bbb777942ae7abdb3fb75cb43aaf3de13e10755f74f2428fa8eba86a4ff6f185c48eb80b26ad3ece848f44c47bdd6b9a06a6e364178c1501c42ac349b1c91cefbef22e1f55d16947124e39625e6f1568a1467811dbe234e381cbeb00f8c55f2077dedb0a5f4be6b4a1815cf53a15799c2def04e02d81b5af97a04f41361e1bfcdc8c6e2e42cf804ec4350d5dda2ada28b3ccb64693e73195deb9d3310645ce85a834bdef1cb16d475c77778c68c2326e0dcf30c9913be53f6c1d429c8a3483d0c8f7c06f745b52c3b0d44c0108f655fee78ea633e8e3ba94d6d2a96db1e8d30048aa277da95ff1e2a79f30cc16e776200eb60589bac97b9940878314415910347246b1368850e1b954e8b74264cb21534737b8c46cbcd18a242d44b081c0d5779623b6097a0e90713ede48dc8676555cb2cb1b16201a9bc7b939aa071746e221e49635361deae967adac9504c40c838d213cfc4035e38160fda7bee9310aa1a205f29eb5449cc487bdb5bdae8f028c3abd13bb5fd65363ee7db7e1cdba0023850227e6651fa79dbf4dbda6b9f5e3e7c18503722884c34dda2881ecf8fd3623641e4b21485dacaaa85adefe250b431384c285ef2a232184c8e19007353c972b91069d354931ccc7674f5d32e61d57dcc343679f4f812fd30cad85c0e9765188fa9a517653185e64cce68e331d6b2906963e331a27fa217b7c2aeb1e7926a6320b2afb74b0968b6ccb69310241e83ce3b50aafa266de4575f1ecfd3593492163fa6347155e985fde9c7efc8068d95254e9bef1f5c162a6a5b54746f31aef5a54f4ee7fbc12ab912ffd331cd1b8a84c64a6b28d6d26504760c1f90af20d47370ad3f2ab33bf03318753bb5c4699643b5bb9cd0226f942c998a85fdf6a22998026e23e0633bc49ec67c56b5b5296c6d237fbdb62d326dda1f980833cd0cbced5cbcd20c27fd1d0d0fba44f7733362775aece44ec0b50cd2a2e3978825e2c8a5978268e9aa129954908e3cffd5789e18af5c123ce4a57e8e92c96259811c9902c6505c75670e7e47c5edc1c1fe1e27f49bc3b9ddb25b3c241b13a033cdf2e60576c17c362c32751059e5ad719a13d03f04abf9f3c17ebc5504424430062940615bcc50d77c4b42975146e4e7d5a5dc168f6f62ce6390d30892f6f2772521b0793353322d6ff928f2f4912914cf44af910a12afe0b87a6c616d28cc2d7443a6f75baf59239c714db88b2f6472c3ef1e06c7386e23c8f9d0e5387862036df7dc8af5ce6c079dca2438745546d9e4087c2bb96a7c38cdc9ded98621f53ef4c48e8b00de2308def86ef133881c1d4e8def94c9af4b84b9adbc11d018b40b77365900770ff05b214bfa495a148d7568412ba9466415d05b8891682ff876806416bb23ee4ce20517f49314cee5906542ec4b165a40637a33af2a756197cad9f908a0d6e24f5ffef52f7ff55e63a6aa8be200224fccd4534dbddc79a391b0b642627221279fc555557f4e31efb7036bfcfa20039a8d7ba86725ae2ea4cbcb97630a170469424ac25b1a2b700b3fbb023e7477ec9ed9127f815c8db15dc7eb8eba77d35a7184f2b6abbda3917d66143f2809a29f4ec59544e7bad4b8d63999afaaf3d94cc2b399f96a6595484559d573889aaad18eb143e4271476ea5b77b13489fa75f7602e87769f5ae3832ccf79394b4421d34bf8a322a46552ecc6d89649e376a4f994cb3c1590b6908d30786da1939a4487c4d2fadfc16902a794bc118b2a2fd510edca759f8074686864d23755e25c3280b5d47cf1523345f492d7eda620d3afc543b1043bc97955ebfb755ed56bbde8a528e544364d5aaf87ed258d9a04338e08f2fd0d5b79fa5ae6c29a40587a1f35b1b935e8fa2d44256e19f787647f55b7e57eed48fd8a6226bdbd0deeefaec3dc3f3207ac978c855582cd69872384cf873152dcca171b2610bd57b658e80fadceee933776abb4b13c6becc674b17c4d28672cffd4424df001bfac3eebb30a6c02a8466d99f19dd5b727ca0ccb144682f802299d14dea1e7b54c3f6fb6c58f5871bb809bd83b4bce8a678f0a34cd1e62df10c21a17e4ccf7238baef812938df0ef98fa339006bb9140d24d8f411c8dc44f8d1466042ecfd62dae073ca02840c58c64fa428acca69b65c4c4bc10fa48ad0ba07a552d0ae64ddc9710f07c0a191120e430dde104da7bef39346f2739b4fe448e69f49b44710c19b3282396174a80c9a8de5e1abe379a948f0432a187f06f1f5eda3db4689cf06d7219b354c61d998c37244b8e10972039f156997d7f78f3fe55ffdd37037d99a613b54c8b622db24a336136f917299991dd85dbef7ca9386ff159ca0538648b471b1c2087e2fd45b59c5d241a852669e95068d9c8e9b280a6dc091ce0615e31d393e62d45558af952d3c1c2482a9e3da03c7f81eccf0a865cca612f1c0e54c7f5188997afdefef8eac5f3f7c76f7e78c797686bdfce17365106fa74eafb6d02917fc2042558b6292f08d6e876def4ae5e36f5171dd3bbcb5c20c29009076bf67c184d047deb44fe72df896862caf6ef3f3581219d4e8aabf5bdac67f2f6490df7ee3e2d7637b9aefc2c69ff3d3305e6f7bf65a2aea7485648ff5852a3b60c1033adedee8a6f20f9c8a7462c154c9e6c1c1aace33abd82bbf3887b0616859ca0d30a5af51a559b25fba17fc6734da859c381be35e0a3cb973544586ddb0bd78caaf4835eb97c043948ac00d705e309c3947d7c1e1d3154f544fcdeb086c76c98ded05019ca5b8c41cbcad834c27be4d05f739bea4d1c4596c9943d23f19b75dbd335136158b54434936ad196be60ba49964e2e6c60b9daf15d3b80df10d5b022d6cdc66713cf2845f8184bed0a759808e0206f131f1afd1b0e089935009f2000309acde947988bd964ca3b741f6f827db39576f7b90623d8aa1fe44afd1c1e13e8f27df54ea6f5e4223c298900d18aaf47c6444e90e3575558c198ab01b0f8d9e2be4f0c28df15fb551cb18930e1ad597e5673070d949f0a6f1e6e435ac11ac953e858c9b9d93ed32a14e906278ab50cedff9100b8f2a855476c4bde524c9e3f7c5b6499fdf19b125de3adb6c9b323cf7777ff676d8abd6cbe4fd505bb6094bf56c092b33d2a43bdf183bcf921fda1bf48eb46be2eaa54f5cb01dc2179f33a2f7325fbe44a1da2425accab46e11381f7b04ac43a1172d1e445d5ea0d929ca4e74d5f2fef7a209e9a8a1bbaf8f9a22a64d043081ebc6d2a4d11339356057ef65741fe9e7edf54db75409e1e8915ccd995eeb8d2af7569747cf374d5c2ff70c6486cc308f8f3749588302b1ba8cf703b2e431f4b7f05e7e98a8308b1c449c8521b0c2611880cc31f5efdfdf9fbe37fbefa70fcc3ebe31f8edfffd231b7bcbcefdcf2f277cd2df74074cf2d2f5b737bfbe6ddf116736bf25969d004fe0eaffb55fb66b7951d4ab56f71de4ea3c6ce0a531956e5a5ac81c6a5a284a1f27559c1750e3eafb842abe8eaac3a976225be167be299d817e3eedb54553fa6599e96de61cde4ac962c690201a4cfe291e8c3bcdf1e8b91d8ffcb5e7c3955f592ea33c835761642a6cf1af2fe5ff6c448107c063988bb8ade0c10c30fa959351519b9c32f8a74224de4d57c288761bd7c962b1eeccf36acf25225e6b641233ef8913706974e7d313102bd119a703da72e6c1de373616bbddf30dc0dae122c033bb5790b4d3ceae73d051e70724f04db439f965ad0a89c99ab3628ac996929e547e664543c12722046028334733c97e2d191d877e19117d640d4b70b5d1c0677d7df4d00597404807c85fa98e493b410cb450daedfe4bd02fb457995523191a5a210605e0eace71ad0ebba9abf85eafc61052ddee2ae437ff0b7777f64398a6234807fbd00ad10446a3095877aeb19a0e1ea30def89758e375d078cd1a637a8b970c84858064e7dfb5eac786f7283ae89de8681ec5befa9a3fdc08ea34556979d08fb449629dfa826704f454f477f7864fc4237bc819da60959d237130dc7335805cf26472d25ac9d2e8f2c64482ac4103574d457ff7edf1e820118ff53f678174d3686dbc7ec708ccaaaecc84c69d5bc1696a48ff4ceb6fa4ba92b284fdf58eec42ed2762a10ea2dc106c2efcb5a8aefa0b750078b650fbc355220e06624778856b2a5cebc22eaa797f818ca14d36e5b82f908134b8901ecd54bc4d24737b68b716ed739d788ba83f40a2b470195991f85fe2006fd3817826f6c458ec0d9f6c71b5a4453ed3380690e83eb06908d352e5bb3028c82c5b2cebe06e8035ba211de02e107f3f1371d76582dde90b8575dc5519a3632078fcbbf2f2176ebe8d2233dcee228286addda0483a002dc1e1f8c43448a4276c62647cdcbc0ccab92a332da63ff3fce062240e0edb07076fa6be5943db6ca0495d98c74f8cda43da716d3c14618ce2a2c84bf962595f7a0f90695e378a2e93799e6585bd5934a3417f2bfeca7d5b570b500cff589d8b770b594e50fb0f62c74ce465595da2610a6851c124a051a22a050c01f00ea90b5e858d857ca1d4623c1a212007078c1ed3322dd62a9f34239c4833821bf41dfe185ea879c13438907fc49e7bc8499b160dc40a5ec88912a75f349ff3c54266a75fb84138fe81a4027a9decf20c750bf18c2f9218b372ae99a68cad47bc322b2f31a3be5be1386c57eedd6cd9debe77995a924add22cda529b409afa9b5e6b51805a64ef60fe29de8b123f7607a0b3b801a6b56c301b7e01b98839ec948f4f53f3bba473e800606a087d1aa6115dc98b400f70f42a59a2cac0974f050347b07d6e8292fa7d812fbc6d749b3b76f886bb3675848ec9a2aec1fd80afb07de1ca6e0d4231e414b7dd76bbc051d6e3a51550dd8afea1caffaf7296b786e1a3288e1dd6eb666cc5f4fabb1e09b3c4df5dbc3ee88db739e776deddaacfd363e0658f32c97785dd7eaee7f474fe48efd7b6dbafadfc49fbc7afbeef8bb373f8823f3b4311faeafc5bedcddff327c1e3baaf77d5556aa2a3dea87b8c3a99b4f3926693159161020f39bffeffffd3597b571333168979722154d3ecf8bb4165729d9265db37eaf9dd3d5f952d974d88d98e380f249aed6e6fe5b186e0702d6835f32e4056d445989a2d2cf09b952b59c2fe788f26996b1f0e586b07257ad2c6f26b554d28c38437e00535928592faa02c9ac85f24e4a31b696e7b21c5ee59ff385ccf27458d5b391fe3532abf961b23ccf271f3c481e2d854e7fced5c57bcde3223749eb1ecdfeb7f01e33ed8371aae655268b31199a7d805fdc2553162afdc7d8f3709cebdf16bf3c236933e71766a74553540bd9883e021ac026b8c0ef429969f4e7ff1884f3fc0e9412ed39fbc25a726d826a98239e7ebcc08342bf20b13935094359d9ee42550787131d4a28d0e50dc0b4a280dba815b63f2f97d184656c169a6a92f826d6afd815fb6762ec7b21b999426b36335dbd0bd24e04929d0c427bf8503c703fbb6606578ddef0977ab7ff6571933702dad65ea515b78b34593730a90806555357953973186d7fb19029194a52b6f095e13af918f2c621abbfa143c44971e4d57f0012b7679191afe3235f6b16924318b394506c6b4128c3f7f7fa9a236dd79afa3dfec360a13f07d79f337365fb65bbdab87b1d3dd1f0ba3b024b7c1080b6eb633ac9a0863ff6c12d83d80bfbdc583b3206b1135bb2017b3c446dc99e679f34a76b2914e8a140f860af1a7dc12c64ad7263d004b292627191fe23d1b787fe47a5cb7f24a2f9f732ad65f67d3a2b73b5cce46d8408754cbf83187994a0f3d46f43bbb6439e4d44cd57d471f5500c1f12b1476906881bb90d41f8e07c84d93c2cdca8f040cdff21461b8f18ec6babdbcd6dc2ed37af01cde11b7cf1f97ec29e8381b7452d384f8fc45fb7de078d8ae2483c36c275788b84200787317cc395a5157b04482d1e6d9c72b82bb86c5b34e567f0059ab2076c221726688afb7f6ff53bdfea34187bad6fbe8332ff3a0f6e6e732d7a30569abe3e3eec3ab7508776151ee5c676e05fadf3683bf136fb0e207f89835c5b90213aceffd156a8dd8b1fcaeec106dd6dd97e902bd5b9643b775e320dae73b976b65eaea885887ea5924d44d4ac0d23b989a2aa169e22cbfbe00c88c012e3eb236ea9e6c2fc8967ecfbc99e3e07ec776e8c6dcea2faa8bb808e56d9dc5db82ee6d1fe47afcd53e463ef35d8ddcd6bd3061d5fe25d7fce9aa99f2f50268d324d7aa797f9c46a45d36256d5b9ba98a317785e8217783d4759271a46a6abbc1110628be2d0cdaa00d7f289fc6139f7d5ce90b81064c39e405aae1655893701dc8ad3a2aa6ac6af14d56c7f0f9b7b42bd29c58a1247a4701ab9db7b7f2fb170791b3daed7d4ced38bf9c322e320d3c153b13f7ce211160e87a96b3db69c357fbca9f1c12d8dffbca9f1930dcc7938c8bd169988f57724f6873ca677c7543bda1e74b73cd8dcf24977cb277ecbcea1ed851c8cc923cbeb3dda8425f69c18ff36973e615115eba9c6f55d2b4bbababa1a2ed26591d779730172fd83bdfdfd518d6d6dd3699dcee5eeb4aa779b795aab5debf0182874a8ddf3329fbfd64df4bdd50e01c0e2b85de565565da1b790b5398d047273242db45906c6c958bf0581115ab407bbe3c384e9e158afaf4d63aa7625cf3fe7eac7ed2acfab5fb7ac596d0bb1b9ade2e655f1e7dc48f53e9fcb6aa998e1f0fedede9e1889aff6c285bb3139c4d00ef0e59befe3668033a97e94053858bda5ac679c62ca4b4579087c4fc46ad9c87f25f8ef2f8cb8698491976a58d5f92c2fd302bceec0abecd2d3e798f839baae4aeb993495864d3d21a73d56ff5c93c6bc9cfd28279a4653249b9954df50c18b2297a5d2c57d5f2fa2aae5e4026c64e490fe3e64484ca50f1f9a8ae656fcda4b2a80f3050f6da875b277369c40978eb1c2b588d5f9c58ea8e5b068e0ca6e70924309de46e08680bb20265555677909a2f5bc0457445864f6ddb63b5f8b695514d59589deb948959275298a34cf44b554ba46ef93acebf5a79e31a9a0d0798da8a616102743176a5e3cc14ed55255759e160d6a1ab3cbb49cc86c043576b1ca2e8c7a978d6ee4766d91667a57bf9353789c39f3530f71d1a9cd842eea51a3dd424e55cfbba6a9e47db5b83b34552da2c07e040ba43b8303c3a528c06f2aa5aaf9dd219e433b1fe41569c8f9b919a2cdd4aeff512f967e86b005dff5a6c875ef92e6ec41c0fe43b8aa5a3840eff90f9c27d714fc2c45965fe699d458079846ef7254ca935502389427e29c726ca05c18303c6f8caa7cb94010a912e91c4222e6a590e9e44264794d6caff8b6ba9297c668874245686a2acb0c62b6146446b42c092ac3d1a17807762c57127445b30a0e5025329992db6fb5ac090a6b06110c6615e641d7ec2b766e8f3f3759a08fb7ee937e25f6af8c4d0391446312b1d19cc2608a2531adee7fb96d3ba1734a01ea7a2704d9a67b7ea93babd8b1b959cc97357df985681f356586826fd13c8572303945a3aaac65ed3c5dedc2c28cf45f34483072213dc23cc5342bb29ee867c9cc50506e8f6b01c3f1fc3e5de1716cf4ff214c74224a70a35da47ad26f512abcf6ae4de8f318ed65bc6b087929070bf9a946d57939eb79ae050c802115c7a5f286b1bfc7f5282032b4a5182bfdcdb4dffb5f3d94cbefee870edc6e19c4238cbba51f60f95c960de5e68f0fc6ff3dd2bc8978048b32c435f9a1cae489bf3c671def81ce19bba97430daed35bee9b2eda2e80cb3fcd2c6eab471a8d35260122fca40dda83acd991955db2aca2248debc30f5650643edfb06ef7ca4b007ce59ebe143f619a2ca785f7a6555526ca8ce596194ed95b102b364bbe2b3d5fca0de19d4b64feaaa6976cfebeaaa017d3c5a0216524cd3e6227731c0c9e6ecdbf7df7f473cda8dc8aab9de57b18baf78fda73e7a104107b906b376a2050811fc460f174e1301813dc69389eb622795cf97733403b9908ea41b6a8c614dfa3d7bde7b62247aeeccf7061dfd3b8c3778098614f46735a533ad27a6af1e08f4630c1930228b5eea94a2ca1228d35723a5f8ed6f455e7ef6b8a53255176999cae253554ae493ce8b6aa69f6f8f47b54ce16eb733d9f5b6e826867633a92cdea997e6b8f6697f12bbc84964ba3e95cae5953812593581188243ca20f5cf5c5e795c8b39d25e02bc0f33a9deda22d33be74d26ee70506bdde110868f416b90b29aa62766e06771202fac577f172437d438b08bb4794143899cdd60bc83a021ef7e736b5b9383c8cb695ee66aedec6f5a6e2a9e90c88ef5fadaefbec329659e977d47b26deb67c135164c3211166d62c832b6c34e7cd86e313674602b250c896eeba82be27b401131fa111242f26fab6a465ff3a9282b46935a8f6177848c95a9738721840cc8f86de78e91a30422aa4882dd0be43d7fd0b8bf355cfa1f3270a29c76e4df1225e5438f84c4133163616bfbf516f9485fd2cd90024a0d76d891d9f12f6cf3d8fba805a8c56fd2779f17fa5aecee23d6f23ec523c763d971edef0d88bd19c74b6f599cd8da786473d3e639da0b341a0a197fc5b84aaaf5f021d51faaea1d5c787d8c11d83ba14c1eef2ed2acbafab1aad41967366d2fd4fca2b291dd02e71d288f2a3666527d8fd7f6adc789c8ba25a6dbde292617721719346bc44e5e484ba06b578cd980115ea4595b40b101c7393efa128a8477b941c07057e0351dd810ba130ee8f9b1d96ef9fa9f5c85072ea095e1c618751198fd4eae06e299b81263772d5d25627215771a7468733b35fbefc11b1c4737e2d8718698e3356c09a3eebab9aa5ad8ad45c89b244977854ea2a448078ee5b1c84333be4dc86363cb75630f42da8c3e171a7d2e38fa5c246272d1893ef89ee092ec22b12c7d7813cac2e558d6cd9e1954080a4e0c8033e3dc7baa626c729b05d5bdebe7dc401719fe0639443ba8e8546aa9f23245396fdbc3665ad513493e2cfc7ed8dab346c3b430344f19e8751ef87a1d7d99903aa2ed44737d6d357370fdb04e8e8ec4feadd1683dc5008d3acc5f60459013f23c0b0e97117c62f195a1da50ee0ba98e0cac476cb90ebd9a579e9f51ac1e0e52ad3042109b72c22a872e1665452fdc8bb411e75296a291e0cde3449a09393742044c14c15044f4b41159de2c8a740ddf9d25fc3cfd6c84f9e85e7699371805ed1cc2a826a2a9442155af11b2843d17b9f5a03dfd6252d5fa357dfa0509c6ee1d33fdf1933f3fe104169712266c96fee143e17ff73dc4ecfa7b8dec7eed88de62d53b8cd6f577ccab79e3f1dabbbbe205a25a542b36adf489af031e15b6f49d5e758115e035adff7c9dcef3a245566c253d120101a70d041c1b7c73eda304a0a8ca996cd47bf470720440adb06b8ab1f366fafe222f674d2226e9e4c2dd8ef00b5466fadf303028f84450e1b0fd23ac3e9bd8f2595a9fa733f902cd3dba3efbb141316490aea6070eb445ffc1363e361e3b8253b5a9ff93338612b60fec21a434fac4b68b21883dae36b32085473a0b8d64163aea80f029119f0a5982edaa7e0b94b2513283061d068a185cc98fea038dc3fec81eb1b462da9fece310c5580df855409b264891309769b3ac8d578bcde954cedad247f7d9481fdbf1c4a00e5975d75e208f53e51690450bc1ee350a23de425a0e319b2466bd69c106313394aefe43b13586f4cc41748b11af0aa91a3377d4029133acd70e634acfd3f5b9144d3e5f14f9748db11eac682d15e7b9d2f4f30a08b4ae0f152086642d27cbbac92f65b17ee600c33e7fc2c85a9f6cf2ad726603397d124fa1e0507cf236ff14dcc42cda9876279fce0e7995df8700060978472d54080b0d423c68ef08ab1a06fbba3f4a70a0dedc6fdc8f306e98c74ccc26e83d349b18adbe33f7d7b3c7f2afa3e79acd223cb2d02c3cb35e5aa793d9e4243f6be936340103ffb989ecef250867107d51d31a442f04b674ad0b21b28a881b1e7ba8e4ca3e7461b858c7cbf367eb70bad4d14e1365b5f2f6947a751c98993e84eaa3527fea40946c0f5f9b19f0042b16916cbded56cf97c3b8a00451510caafcde4cbf4bcf65f11d681fc250470657bc55b5eda889e18583e887c16ded92ed5cf8e1e7b7267d96983bd3156f28216d0986e951a50d072b78967960bc95e6f1418b4abfc81f10aff8027e87e194c2605093aa6caa420e655d5775bf078d869f1a2065d36a59660f7a8e1c70559ab5d00b032f853d8c1e8959519da705f1807fafd34cbf680915cca252f63e8ad2504d83da81d71b686d310628bd049b21f6625e8630138f26f893e0abd4f7e25bb5977646b94a5ed012738be1aaf6f32687d37d4bb63e66b62650866bda9eb469737d2d3655736bf3cc6da7ad6edfcc018af0410f9b542deb54c9fedef0c96098a5f56759f6f786fb83613d3b37f24b8b70b832eea23e6f549d4e9431555417757505d9c75e0136e1007ae0924c196873c4acdc1825cb6c2c64ae2e64ad1f6a69962e948477a966d6a9fdb9444c1455adb98dbc9c54bab942ffdf19a63e801c16c6fb78d8d34df5b86f786cdc97a992b60f1348001f7a640aa3f239a57918c4a3e17ea0e60d64bba150b8186d5b6f8b5f2716e6d68d868cf98bb568968b05e4d817cb52733ef814b22f4308dab25ec84c4ec56ffdde3c2f8abc9193aacc7ad73dfbc73c2f974af6ae7b17d5b2ee5df7b274ddbbee5d49f9591756a5bae85df7febd4c6b2575f15aa6756f70b379027c927a25c44f25c6ebf62682d1aae9b3450ebdd8cf114edfcf64ccb358bafc08f6f9035bc6c8f84ac932eb33702e4a6c22468f1e89bf15b2cc1adea17834c2aedafafa54ccd30568e7f5564fab7a9e52be04d085db9dc012d037eb4d6948374e9798c84b580b9136e24a1685feb7a7d74a43ed895a82977c09cd53914995e6053ac5cb11e218ec713b4c0c29c9c754e1c6d33de360c7f6dcb5926dbc4deb86d4f76878f01190e823b0aa3639a1e4e924f5681a95ce1761a89bb45cdf902dc42e8bcca62a54c288fe92041e936a2e1b0c1966dcf6bb34ff273885338228570bcc25076f4f2c6bad481fefbe6b90e7dd9c063191d8f2c0b0362c0eb7d8a0dda52d312697cd424ef2692e33f1112b7c04c448cd62dab5fad81517c8d6a019badfaa0a26182c0d1652338727aafa2cc3a4f0a6cd86b540681b16e3799635e19cd186efa33e1c1f35ce7f34f2aa7b4f3f2f174be5be76b422db416c423f94be0cb2a0813e71374823b1f2928e202e48b84c047fc332a559b625c2b80082b4343c5205ae8f9d66d3b53cf374155f18d1afe554d6b29cc8f0e8d8b67919c3a96649a3ff4f2f55964fa75bac950de74ccb6408eb7f0885b69c66d0c789be15b3746de8d0f1bb37224b6d0c135d8ad6a5fbe25c6a12fe7d55661803593c025afa672a78b7d405a26f134aa1f100f6f7480fe69166793ee64df5b3949f3f0e861b9618d6eecd36ab4cd199ff47ad716442b2cc62d369e7ccb863bc3c4c50a7b934cd990327fbbaaa4139d2c7d03de211898c90eb7429e928d178264b4c02467cdfbc82f48cc4f70cdb6fd7fb07d48b59227c98d432553c8f65b7c9a231b6a1702f9c0fb259d3d98b045939c36a6dcb46995696c7d74f6c60fec41167ac0ebdec0b864d1447d81b34180b621afd0c1c3f58465a55e2a22a32c8bd9e4f84ca279f6ddeb4cab92e357106fc7d3ef96c784d3b100dc38ec2a152bb4f73efd7c8f269a226d1d610f286005b08f071e7a29d0f1d90d68dab3f8edd4bf011fe211e89d7a618fa45560add296d95bf11b2c6bb1ae273c0d5c6d3494c1967cf4861e56afa6cc335fe73727603cd60109166d63d44f7da89a81655dbb213aaf88c063616bd9ed8f1450789d5d475ae54919712a53db22664d97ac5b06db8621a043e901d3de4cb77ceb8c3b02dfad87aed16c68d8b2e0f071e9a483d11622f114b59387d7f503648a4dd9abc511625e9c221237b3eb4802b34cf47fb06496f195eb0e3b86a6cc76d13eb140d03eacc2d5954ca9da4c4cb0a2545551a1c66e124c411567622b5c7e2197e3a39804b1afe04c769fba7f9ba17286a78964bc3b615f967290e864ff4ad85a1a70b9526629acf96b50407ac8bea4accd3721dc48736e9aab8a0cac6cd072803f1b5d86f4b08ed323f38f29c9c6d4128b81f8d30086c89420d1795fcd44435a055fa273dc9a240bb448a6cc58b6af692c0851ed7c1cc1c341063e793cf5649dbeb053e0ffe84f75a31aae6e94a9f4fe3fd324f57ae37b38f834404df3cacd815fb67033e43c8d346709f8a7db9fbe540fc26462388aa680e9b14cd5cff464c680e0526f2ccf5e37c9a4ff4a29b986f8a0fb8a86634e0ce55627b7918362f97f357e4679ca785efe84ea007fe269a7df161c5e1d8e59be765dfaf928883bd4122f67c30dee6d9710f55c55a06803c5c6a799adb59bea4f3722476f78da7f52d13724da293a1623711016ac3d7f94a6660c491c243aa9a8a83bd48f4f95ba70c805847f143d39ab18fff7b3d185629217ba0a61e01e1d097d75ee4081a298c85d6ba0c8b6a964238867c72272a0cd1cbe53c856411ee3c8e44df737fdf10718121f420746a72008f5a07dc1887eff5621a6533a6a323b12faeaf05fb7d10fc7e027917305b8c4dc3607f86d42036862edceece5dd1f34d5638034cac8c4703e8dba1a9c152e004f55809d5061ee34d4d6976fecb27c17e216ff11c93e0d8b276b3b006ccc0578e7c68a4eaf7e0d1d44b70e188e3c32cc1f06c32cccc58f4d068567faca6d346aa31e6d2746fb8599d67c09e8946829c144e9ffe0a4a2acb05b77b212dc558f4ead979dadf4be0bfe1fea097381604f48d63b14f9fb23abdfaa6aa33597b80f4e73798faef792dd35619f084de578d20dfa7f5e7ef008dc662dfc4d9fc55d6d577ed8ecde717b1211f3cb16336f570902fd3e6622c4ece3a0bdfd0a2ee0d4dffb8cc7f77eb67d75b9daaf318d4f318b4539e851963fa12930f2206fd1354ad631633d698b819dbc860e3f8c6437dccf8e9a09e2af8f31d89ae7b3d5e59558b11392d93b52a16d10f169f57558bb1f8d2fab860a3b1f8921f4f37337cb870dc53b8d904ef5ccef2f2b9fa7f645df96b39cfcb1fe9d2775156e7e9ca7d7c62bfe675ad779d37b7e336956a7d0734d2af15c3fa74a9aa779ff345f4e3db102ccccf6eacb33cfc59b3ee8de663eb6a39bb301628f872411b46345c8464a77040f1a1095ed1c649f78dbad08f6048c086d62c1792d278b8f82063f6ba6e3f45dd72ea25faedc6aee427fc7d1a668e653a98525e91d5101946eb6bb55cce8f959c932e21ad6b5fa1d4a4f34521fb695d27b62a5d0178f535481bc9340dddbd2635a819d1bccbd9a598f6aea6b54103e6cf18a0314d7d49a629689582766462e7c8f5c1a4377a24687b91d6f509bb71f3c1d9c0794f993c3c50df68beb8872188b45e57b5a10a7d38bf96030848065b0c9ae89193920125ec0fb8e9015d30b9cdc168b93013fcca5db56e69f2d2384d3be0669cba93be03e95aa158d8b4f8003fa191ad21cbcc95cb320b4a31019838d26cfe57c07ae93f44de88795acf72fd6a42734fe4bcd2c964390703fc4c8065c3d040c235a30d85fcdad145a4605fb48c81413536e1fcab5b955d9c6b0213da75cbe5125559c688313a31e0fdf8f2ee0f3cb0ccc82ae4591d246f78b76c1a6cb707d65dca0863e788a3cd53e2d09ed1d28ab1d8f51699a22b01aa7b2e76203e81601379038f709251406c2fb609b6e3a78447365d9ce60f5df1d7b0e63bad8474b1c44bfcfc5908ed23e899bda2356d63ce455bc40ae956a90e8b35c40d8443bbde8967efdb6d4007342a624cb7adf95c984f94cce79ce9ef7d8de86e5a561686caff06d6680919921b6a7523d00dcee9dc2105450259e3217b09d8d15de4b30bd928e0e701aa893d07d1e808d3f232cb2710810753574d2e2a0a646e6a58adb4aa168e440c435b85097a8f0063f42eff553668dfa73b7f5d95aa498c300b77374668f9e3c4922d5881c6bf937039828f38dce023b77086e9bb111993f81aec9e615409e0f1b7b4d8c1daa371e777082458637eb931c43196b31c7390e7a2c99ee46743f870e838ebd768e66dcb811920591eac247d19f32f9a81302e1ebea9b8f77ed7b5870d7f337bd6f6cd896b7116ff787d2d7ed3b80edc8a984d342f6dccdddde2f1eedc57aa665c1eac9b84315cf72c840959b7341036f918593255000069301f18793a7e6287d80da5d3ccd71defc4121c8b1b08d01e783ba3d69cf995d535982e8bf0de6693f088dd36808ed86defec7cf2c3223a9436ad7cabeddfb1231dbbc2baf4f786170472dddfbb4b1cb4274833fe39910d3bed30d536c3699037bde2aeb04496b0e4c2f37524e28445ec9c8c4cac6c80bdf9ae242283a4c7b80c35d627dc3052c374b128d6fd7259984c560d0957cd85608ede2d6da992156359524ff2927e9ead4275ab7fb2c6d4ff499ead8074b8841c087c6c3a89d43032135a3a578336c32e5b19f60eb7e1d80e736f609f83fc33e3cc13bbb192d7c0dfa69456cf15d307b036b9893d3dde7b7292c0828f864c1f8756d2a29940fae6cb59284343ab9777561e415ea97e3f10f415ae3b7a7533befd81ed1d9fdae16eeef135a63bc51d42d3f803867fab4ad735b48b053db053ab8c57aff912843e600e69ec06113b36148275a4f417c48ee50dc235f00d1578b350c10eb4f4fb1b676850ccbac08d5b22c9beeb69e8ea25765b99fb5de2a0699ee97658e8cbc721e92f1e1cb52eb60184ae801e24fd69908477f966589c6132c0dc373c1b83c4faf6a104b0bdc2b56caae252f64f826182c8d01f267dda64b7feda543b1bf8fcb58f26ef89450950851d1ce0ab6c80c318569991414df7584716edc815ebdf4359a6e785cc4ca899cd00758b81180bcbdb313a470223f82711242e827fda84a8acca7798e80e3582efabd790bf9dd307f800b9c639eface4dc05f196f8f6431697841d7b0989793cc02ef33f3d6e89f7c8bd5cf939060ef75a62006eeed543beddbaf2f003c27bd019b8d74c036f59dd66d0f55e35556304f5d5a52cdf2dd289a64e695dfb2f95964ccb3c33b27c3a65a455577d2a5a295241bee953d55af4755b047cb2779680206d9fc9c8f8f301d2d1d6f5497e2676a101255fd0aba2c144e218db2e23eb40a3f6d7c0465e30ab009875ac5f8ad2bde3d255dee0cd449fbecbe7b962ab252f65f9bd6e4960f4b3dc5f5d0e9709ba6cf57e5b5d35627dd916986daf49e88f44ef474e185b1a8b060cc8a68fa5d36beb21166be85166225d6012d002cc9d747538fed6606634124d8551ded4855c9b10a0216008c4a8218bc9c5b2c4a670db860b12cd9f3b4f577d5a81c4080d0daee0347d4e58b7f98025f9afb2dfeae3d07f9826c6359880b1c5ed72efa55c86b689cb3302d1c8b1f46bb36d3104d435ba30b063d2ad53f93dc3953ed7db760aae1d0ec4e6ef091b3a666e94b6ee1deecdce89a8f34e42d321986e3ee70b9811cd8588b83d63fe62a291deb2549e849d5288f28664c963e6af41d31970870a167c22f3c2ac788822b81ac1fab0555168d3611686e1420e92583d2eee83994f3e1bdafdff93f72fec6de3c89e30fe5590b3b3b114d3b294becc8cdc8e379d4b4ffe9bdb269eee998dfd24b4045b4c28524352b6d4937cf7ff83aa02500582929cee3eef79dff3e49c698b040b40e156a8cbaf8e9d02cec802cba271c9d531d364d81decf43dcb8ef30e2d2d69e2a026ae4e71f69316ef2dd7dda4836adfa2da19fe7ee2321b70e57b4b14e2df0dfb812ade1903e29f3d29a689e0733ff879d43df839edbc34ca09707dd7b146af1fd1c9b3c6a9e1ec1b75c0b8421cf5a49d7a95bbabd867a236dabd687c6b4bad7089f9e1cd0f4c832fa7067dc8207f7134f655303dfaad8335e30686da8d124c705d4cff33e7f5aecdffcad96de684c5dc01d1d866d1a64bcdbf912bd68a0e7607b2890a7fdf9f7443f0ea787923877c17dc65aaa0a2d6751430ab9c55bae5adcde290a818ba66167aa2eb3aadd6dca64d2e949e2473df9178fe1a2381eba3b8fe21d797cd58cdf580238509fd0298ca7d81d37221df5778f9f12510de4c94b1f6755f8890ac5a7a8a8d9131e86100f3cf6af67bff2675354af52ea4057de8ef0ffe2cb9454e1a6d5eb988b5ac1ea0153ad61e3966e4607fa51b502b44e9322c16a08dc042e6c951bb627731440d22803699e759fd3723b5944593e6bdbe3a018a8315d6aac6f8738d3f01ad091e782a74da338f86d399aeb545c801110f1c3c303a35cf2ef5649deb81fa7b93e55993a1d5a3a0cc0203a2f1b0587b200dabfc049b09a0accf7495354830cd733b76eb05211085042669a12eb4c265e8a364fd675f11bc91a09feb759ae5e642a9d2623d2f2bb7de5cdde8d40ddbc260aeab2bb8f1d674e53cfb1d033460c2b46a88cd1bf0d12d177cd82e2003dbdf175319cee13e61b1d736e98a9855fcfb44bd33efac87406bd545c2c92ca4a044a17686aeee0f1d9c9cfd92d4c95d9fe2d2fe42d6f6da4247436c040f85d3d32b6dedb8258475c36441cd3b7f096b8e2a5198b51aa9f170d29b52d5e5b29ae87aec8a2a0f7ba70ee81b73add9ab55a5ffb5cccc7a694af4c974010eb5cd5a6b9a50db36f003010937b36cf2a9d03514a196974660b98210e3ac506981dd2aabccfad6b369b40c27821da3c4333db14cdc78265897eb570b300bcef5806b567929f48b0198ab63f7c9c03fe51664bc4124ce23c84a92a670565c3d411d0f37dce3d454cf61fb990068f8ebaabc482ff235b9f6dfa418af09aeb0b855189e95d7baba31bb4d80ee734449a7e75a4cfe9ec06d7b785197d5054dcebad19535d0404a1447c0ad8063b7188ef84b67d0737ff3d738938fdb4ad4e0206e1dabc139dc3e52edf1e987da756eae072e5c89258a9ceb41fce9fbdc19a5dbefe6e94ae0a60cfd3b426581d79647edd7a77ad53c222b6aec29872433155af74ef4d38ab7357c67c7d4a1fcd6c10478ab3d0270ed3c75e77a5077bd482f1b5d453e735599c37d9e1587f3741554665e81024610b409ef3a5e437de12b5b195a3e0ed407d8d861143f20cec58d0b747cf2f88e2bffac687455a43c44c114ad9b921cf7ac18456143afdf3cfbf9e1e913a2ff9e2ac0883d47d46caff365dd587b663a3102aa9e126c7fbec61db55c3635aa7db25a016cc340b61ba28c3c5590f93110ab2cae1033c154656a99a7d5276c30895f090176ed3566772faeb4ca1a88125d4e9aa54dc2727808a1b5e5b251cbc201005c541a0115f1c37aa09e5daa75b904111e82c1a13f81c0597baf488cea90be6e0098a2d3e980ad3d9c043f2eb37c4aa5f850bed4371e9a2445580ab2139348e86cdbe5a51ba78b65032cfaf1e1a3fffdcbc3378fd5a3572f5e3f3cf58dbbd1aa6e32236f21bc842a4a4baf27670d4d8d7c0d2095176b65a406049a74d1acfd81bff2d1d170c1fa13a0009acdd408886a5e4eb3cb6ce2a3c148dfa7ac60d2260bd39ef18a34579f3f2b7706d93a9e609e6efcd8a5f5707514fa06af081e03016fa7bd3b58e6f3677547a80fd4ddbbca6e8ac1c5b596f88311fd98fd30a2220b1da1b01c28c282f0967ca9c78ed2bbec3ce1afc96c01fa69fffc4b2bcce04b6cdf6f71cf265d061655e4870c0bed326b28d1464a07fd1462fe3578cbf10852740dc640dadc1dce76fd4c6c0d66011951a1bc84037b6de4e62beb228e41b12cf927ae35f301a950a4a0a08eb9f4f143db098a5c86683ebd27efe353b49be0dda817d23cb19ebe5c38811afa36fe4f2c5a439522f9cca696e6864873934d74a24a732730d71ffa1336c14959699b8337d7d50085b6e7e9ba5c361e88f56fe6d24491848693001d6b0324f454ad7593c0d277b97a702f2768574fe8e7b4ca4ccf6a853e6bbcc1b0f97b2d85335e180e597ff4c44c04472d33826ef90935f93c091d9e238daddf8c3476dbcc05df44f4e11ef849e91ad33ed5d41b111ce7b6cf47b166f2f332da8fd681ba818cacef69d6f08f2fe54fa0e58ab84d6fd99407f5a76c112cbfd3f27195de7049d9463fdcbd8b0a737868ddf2ed66873235dc4510cddf14d833d77e43d996b63be43858e290154a4e73e93bf513c6bfbbdb0a2df93c57455940371680d5e3a29f775958419f5b393d98cc89c48e94528787e139f6ecc767cf9f9dfe93a32abf78fdeacde9c397a76305ccc7d3091c2f6d908191322a9ca4e28483dcc12f9ffcfce40d1df577586b8058ec3a70faeaf1abdef537fdb1bdc5cfb302b61c4c02b4bcc8b389cf20c4c08e30aa1be309f25ce5b0c6d545b9021103bcd596c5b2d67e7dcdd34fdadfac41ac72f708a666723a227393c0c674deda23f00f76cdedaa21443b11c499b8dc5ce195704005f8d5d0f9d9833fbaf3a9779372ae033d169b96fe63ba1ce84bef6066a9e1abaaed2dd849a629171d542e388abd4d9c495e11ca4cef6c92e64e9f50d1b8526c5153aaa65c00ec36c501a480160b2c716e7d210fef88075c378d5b86687c10b58025581744d402be0deb8b550717276bbf70e40ec2eaeccc628be46b144eecf30e7dd321d76c894bd6d72bb8049948bd4dbdad9ed8aa00b8f486306958ca237fde29ac9ea49b4a1c67dbe63f442d9823db413c10319e8bac0ac2c7e71e159de9278ed8eb1c93980cf9b3caaa29b480706de5af65f0ec5cc171240010beaad10de4c7108dbab0792d5cb5e101e22be3817d81dd42a81d44368ef6f337815375cb34615fe1a469ab01be7a456c9ba085d72be4a003f04bc4eb05be7e7d781ab1c511d14e703fb4a22c179e1fbfad3901890d5b44135ea5bfbef79e46acf717ac86ae4e475b21ef8e1d1b085d516ba5e70b42962af3293808b554013e952cf785a76aeede95f6ef0d10398e17ec080fba91a877734dfad9f300bad96c7ba448304d0d5bd9c324ab70ddd753297e396d505628cfd77e4b1efc9ab6dacfcf4143607f0516b596110f6780a14372eb2310656b08c4fdda091525179b5b31b9f916a7cf238aa645b6f9605affd176153ee3ba535bccd385bf8a2c6bb82a4167c575c4e7a537adea871be3efc6d36e6abb4810d15bded70f6d945c746877adb74bdef608b57ee4e2c6992ecb4cb19c9ffaa18d07e13a5f5ddb447e35e58f3f7f16493258c0baf8c23f668541fc61c519ddb014581ac05ae54d07fea7b76059b396a93966e1c2f28fb3f4aa2c5279e9b86324deacfe39abb38b5ca3c6f24eeb3a6ef610d6fd07c7a2cb9f3f7beefe40c0227736497346f2daca85ae5c49c206037610722fc06041a78ce04cb3b76a2832c0700c21dd499ecae2149e61c5bd83d8bb7690ed93bac9e62969f92821f125c65d015ac7455aeba94c7d64c38c58c65f470e85e61b77119638a8a0ab0485f5756a7590cc1ee7dcc798180c6704cb15054e5a8c65968f6e4eb1b545019d275cacc6407e9c0463c59ef6dc631bbb2e75e1dfd83be2eabeb325130a399847c0e08157069d4e53745c60b70631cefbea7bf5c0af8340591dda2783d6f55afd1b0ebe536335629852c290c9ed9a07dd813a0307c4d23f73eae903bf4f780bfa86289c81870b11ad114bdb8e75fdafaa0938734f859c0ae6fcbde081af255cabfe7068cac7faaad2baee4532ee2236579d15fe65af7b59edabefad5336cdcf51bf9f6ca4e6997fd8dae4e0730bea059f05dd6d7fe206a7dfdd75e703c8f6ab44f116f9a7e2db7e4ce3175217bf4311e2773bbbbba9ed22423ccd9aaf17189e664d4c3cb88cd3ec10f4e09a2b8e6bf2b7f0ea3f0b3f7ae60308db1183dcafce51c30472c76e739432c88e0248c42fc42d5e5eca3f6545ed66c10bba0d8495b367331e82ec08e73e26b5bbab031da78800b539e5bc14e5fd898d84e519ce776f58a5fc06e60bf2a31e0764832286453487d183edcfdb7b2c67575fed47b750c9fdd64a3c3c248f2b26166de94e5cf5a30e0fd56596e7087a38d382ec4efd7474ffa88e3e064be405fa4d5d669854c103a26600d869cd57f5acbcb1efb979d3863384269b76bfecda0074011bff1686cb595212e3724739cf069e55b57f2be537781790ee2c6c5e89b2282c7694c697a23c1d6b1d1f309807df9aac800029cdc00e280e9047acde53c3c1b74721637d3ef1509c389298811d131a053135f3cb1eb52d94e18d2b72c9e114a7e8c013c08d03ce10b042b70e3640213d921fa4c555aedfa4d32c0ddcbe9a929ef6423afd80c4a4acc3937952d63d4e39fca416573b1495b2a2fd89f8281717034ee25e383b709ff29f9f35fba299f7542f9c1ffe5ad1f34c3c694da38103f419f6fbb202f1dd508dfd8442b84eaf10769fb5b69be086e0ae8eb2dcbee0c53e9f806db6618349ed3c6fa31c0d8d78169ab2f8a76ffc165b118b22646297798f92e569323578d2caf3cd1783f59e99a58d2a973cc82fcd6fd275adb2a2b6d17a948155fd32d3056af2b58dc4419317b43bcdb3ab82c3591c1eaa9b593699a9b94ec1739f1c62b1b8bd0e64b59a9673f028708b0f62e7f9a9e29737cd8100f2426aff9d3c70c2cb9c35728ecacd746033caca991f14b2d353d2959ff4826fdccc8fd292081b8151a2ab23418562a3e717f8487561db254fe4277196c4c8b24ec4807be5f04419ef71a7a29c88354c7ef22598e00fa71f97b59f660d3afb41b0693ac15022f2fc53596151330405406e994ecdd57da59a52a133ff4d4a8e8da4cd00f76eb6e784a6287797eac924fc7ee3e89b4ba9ef54cffd2d0a256a68e4a16f8e6275bd111b1cabec0dcd05b6d76cad0e4bb5ea6b0f2c9ca9ce4abeed44854a068aa25552d87cb42086fb40d150082c7951d5a5110271fba08d0f66108e0f0de565594993a038d6ac46846939ab0a50a286723d905ba79755c045aa2ceaac6e743159638e96408c08087079a59d7b0e287a02fcdbe8292bcf1f7336d9b61dc58eba9bcdba30516a9f31471e6ca1d934bea3c9f517319c46f725fe55c463719616d35cbf401f767615db74f912f72eefd810a8fd9cff3ddac3c5934a401909a3b7900dbaade4ae059cc5718aed36ba2d9b35a92917f281f05591d0b4cef3e76fc03d17326356883b678b4657e944c432b5fd8404fb77d556905b431863c2631eac0f82d72c897d320987a77f14a1811e031112a7e522097817255085db64b08326ad391125e3dc14227470f227ed81ebc746ce3a127eb5822bae6a42d781b7b3b4d253f5c2e7bfe70ba86b7017656d83141dd610e953a461150a1e1fabbda65ceca9cf9ffd03ae7141d557563f5de639e15c6f8eba74d835f683b05b36e4d67a9d82c3dd40bd4c5faa8b748a99a5eac44258509295f5025c75d17f9ece13ad56aaacd4da1b296e661a3406a41c60fb7c59998dfc0ca34761aefc8cdedaae33557a1364653d542f97790e8bd08390229031eea87c67e3a06f8e54dba2ff327dd9b2cc67f5cbf4650fbbd657367a18009fcde109ee8520ec1b1665b59accf4048421cc3488f69523f538ab27693555cf8acbacc81a621dd385587419db3c1c6cfc1c26807bc1d2c6be84d716bbee2950debd83b68bcf2cd05f86f8182a2d682c1335cdae219d625968943d727d6d41c221194038302ea3721851dbcaa9623f1dac64f2f4e0f6c1a7af981e8cc0a6940fa2aaf586aa76a868dd1d0f008ee1303cb5ba2acb69625d56b3462c434b4b2cbca8bfefad3c5f9c3456878033c223c1bb2308daed990201fe22b953c48f3bea4370db081c99be13ac90e40a1dc6e138a2148ff3557138782d99b2581c4796679833fb0a50ad6dbc0584c0a0fbbd48e86bc377b8ff76d47ddb47db705f1acbd16ea70cc9d0c0997bacea753199556591fdaad587f7ce2dbb995936f6ea522dca061367e46be140446aa05b40d2c8789b4600c73ac7738f58e1d687c56646c7f4b8801573ad161adbdbb87bb474bffe81f45ef0cfa570252335c58f36beb019f46695c495d3a1a7503f91fe23492c56530847b1e8cfcdde0851c6bbdeefc87ce84d7816cb8c71ce2d1d3cd2e11604ee22c1dd82e7900b7dd2d5b1da8fecba50f8ddf0dc3302816cbacb8e58d97956f09b9a6fa2b07c4720595891f02662d3d477b6c0d3b61d73474dd009beb5dac606cfa075620b0e86945b7e007f2f61df82ff44229a33a681622d199bee12f5d8bce8c2e278cbf28e740b699090c0cabb6c32f992ec8e733d409e751dd036bdcf3b483b38b0b8357b89c2078815bf77bed7c1add8a0c976b4d7c4df69f7b7226d9893d165022ccbbcc9160e9906c04848218b595c019ae7ac68251f948fcc77b5c6e43f6702530578fd14c0a8f42ae637db89e7929713913110db032d84089f01c92d93b4b03e33171af3d64d35c8f0a94dd798e6c801aae514ee0936624df586a0d5ca1c36c372b1d0d501dc4d276555909b915379cbae73c25fc320abd0a7dd6a0b83c2810576f0e0226213b8150d10ce22ab29b92e847c98be84d5fe117c8116c8ae8a04b9bf692e80b4d5394f7f977e84e3638e3cb667481cce4ed74d9bf9829da44237def6ce7c1f895db5064f7b828e2c6298d9fe85139773de02d7ad843b9d59b19ef044594eb3078abba9d97deb048013ecaf71607fa29c7584627a8f356f9f35c33f3d54f7d17ed7b563353ea3f295f6a679cccbc1c73f550b5d4d8c548e202e1c3ce50f1979ea2a1b7c4ab1d73dfc5c012663affa1c92cca61f1ca9039bb6afe3100862c0f65d96bf7b4c7328587ba51b6ab85f71ae03c0550943e51a832f1183a6e6b5828b1a3c1393538063c938b313de3335167ddc0ce6856db0c7d23c2bb2f9724e0e4abffb566e07fcc7945abe4d1b15ee9f3dfbd450c027c144e7ef6e731940010b9dbba4d3b5f3bf091738dc725dca3169cd30e4ccd2bf7b1748983f4fe02f51e2812ff1004b64852f31dc327c29c30570f108175a2df2126fcaa54aafcb6c0ac03c79ba5898a58ed7abc10691de272dbba5766137f0220fc42b94f1011d84cc0dfcdc4ffd8bcf9f39a143b79f9bfb4bafaff6d5480ca207e9942425cc75076eebd8634fd029f24212e4f4dbe7095acbe2c8a7de53282c10d672a046fc1387ebe42041d3eb2b8ea47b24d577800d8056bfb2c4bcc71c049809accd4c43e8b4df5ac3a63c680328c30d620b486c48866323f70377fc160c78cbcbcc437bfe26fc677186b43b3a8ce659722a90c8207581f35a0ec5a15ceda867e7e1033395cf23b94c83e18e34e6811aa913f44eb0de0f7df2450f1b6de6380376ea686947aad35ed0943e494538ef0fc28999505336d785b9a16e512317e6d41897d47e58f7ada659bc697d7918c709eca63bb1fbd5ed43949814dbda669d0ad42e0b42cc23d0918b35c5396405ba0c6080605616035f4b5536b77497235739ab2d492fc8597f52d6bdaaf4ceeee41fd72a5767852fd7ada18b7b6732cf2b173f022c1a04b936c390aa1ba9b63be9d298f9441e94d6c412986d20d00a3d08486c1928b3dd8c6ccc4d7ca8bc1c220d29fe623153f760581ea81b750f187fa26ed4213c1b2bc03ece0a7ff39851a11fa0b829740285b0f80d16bfc50c77fee2b799e21b9ce385377a900d267638ce3502bcba1dde12b8c3005d42fdd19d3b922237e0800b1e7e983068b2ac56d7d851955d2a709431fb4f596895d67539c9c0bb8e5413ac348d63e464f100b503fa6cbbaadd7410bfcbeac7f89175d7cfa471cdf0c55562ee2f58fa856e520f0eef6f564d3a583d5c65f5b3c7607334f36d8a568a261dacc3371dd6b98a692ee3c9aaf89c66992776c457017dfb4f1cad904dba89cd17fd5b66df96f050173ec162d86221153e3c427558f8bd42e32746d3d11a04eff8ccdf21b4824bd95c138298412d393c96eed0ab1e7c03cd15744ca0f29e44be31caa0166124842229846db3ef59658c6780cf0dae4ee219d37d1503975b3c517869955bb8a9e16f697e696bf135ca5c9ce05f6b815ffcd1f8de3f0f0b630b6deadc0e95809bf19e0eced604afe6896f90134e584517be0e86aeeff29b26d62df839cb78ea0667354a54b336ffb3ba6ffeba9f28f3c83c310fcc6fc6bcdce6444f94cf43ceff7e25c353cdde2143819a72c1f7db0bc19f90653d0748e237a4663de2c041ea4035397b795f1d738618d9930fae2b09545af5b93d02fc978cf018fff8bedd39a1ac740bf30e05d120a85b755e78514193450b658336f48698d8c90da4cddbd3d575ac8ab063f63def3bbb9debcbe6769d0ebcbe9ad548fae6f3f15eed3adeab2de30d1e6f9dbd5ec901df847cb5bd7fd2b96e2547550429acb60c2b72aa7b54573b8feaeabe87fb12c36a577234d9caf348b6d856560a0f274cef0f0f95919e10dfae520ee76e962176a8eafd8f6fbfffe6bb3e9769e4ddaf718925c0ab294cfe22a48f49593459c1048f2f41b892955a44a209433608d236c5bad28653b70064d0653726857fbdd013f0a9f045dd8e2a4e34db003934581a36dd686978c34afbbd385afc47ffdaa72308bf7c652d299bbea742e63a35f041576d1775ded95b9cd35922436b3817b69199e01195256aafbaba487bc304fe0d46fdbdfe76565d7c258b5a2f43d6f889c7f3e9c732fe5b14209bade5f367d39970f6c93505c095bb25580f53ac1f77babb6d5a3da15861f72a21c03031c40d2e6ff8c68841dcc07073823ffd86d8166762730fcf353cb3e0cff56602ac5d46126d210437abd118642651c51824285eeafe18e4295eca3c5af3478694a06408093a868ca06288081a1472ee970d1f39485ce925b6d82c1e7331ae7b9a8f5b129e2bfca5a59545ce452e0ecfb9561c4bc9c392fd6a19524df1dbdf059f3b68fadf110348eadfba6c1cbb5df1b2fa05c4c1403c2bd75a6178cc1f75adbbdc1425cd9a11527d1dd5b0b138e0cd77be364c09fba6f2f1b207b7553b46ef8d4e054417a214b213ad12b54e54a357cd43b30db82b16661ce6c96171e92ccd6353fcb6579b75eb9aa20e3813bdf065db02d0a4960b276a6fa28b46577b6a4c52f4ed6f186b29abcb48a65b350044cdad2d0885fd9594dc7b6cbaa381a0c9fb3b70457c869574b529ac9a04da78cddbd9216bc60a5be3d19691bfc241b69dc78dbc85e9854fa4f6bb89d1ad7cfe9bcffb8507ed0d63a34359c5b096ef1050d32b19a74ad9b9e153b4439ee0be44bfc6f697cd26ec242717221fe4da16851e510242eb554ad70552cf7b2bd1685761c44ca805d3f1d8a9e224c1f66ee00b9e3527aad7e38bcb223ea903bfd1f4d53db603f1afc72af2f15096df2007adb7b5bd37ea6e472b5e70a388b41aab151759c66acd7e560e4ec8fec55ee6e82a8a1bb57f6c46192743126bfd98edce410158c563bfd9770b2d5f29664cabf4c6c8e35fa566e6ca6266cb10fa6277d4dc619acf16f8491cbf0e54d9761f9c34abdd34dcb7d371fee1aa597bb2b7f3107dfe8c1e5f61762244c66f9b02d8c870d181a0f0fc9511650653efd1868d1d27ff56730ca60c87c27c63b7a1aa90255cc6a94ee88e0baf26f672cf3628fcf6ee5d6cb2dcbd9bd5a04eaf758fdf72cd437e07bf09d40bf05153959f34a4d387c005a95200a39229a59be780475ccf02034ff0163299b3fbb04458b00d12d7e8e08b572d4c031e1c6d2880dbd5ebb499f564e0b469ac9c8aa74136194b615e5eebd312db0a7a70fc6b3d8a37d717bdef8ade0f63ca3634e355f1a8b535c41be3dab2ad29ae251b1ae287b7352b2a0de9a77addf16a90bbddd91e044abad3759906f1447b56dfc0e3f23d72129b888ef0112f0611eb5fa9326add3c0fd448a8910273895bc7c1cdd3955d5933c82851ebfbc142dc043cca15ce421f42226912b0a3efc0495cd7656cbfd77c84e42abaada482dc7ec04849cdeb42623d8fc80f9d9d81f40bb7eccbbab32f1714ba7dabce78cd50b4337ed0c29db03d01db7be18eaac6615fd00836a77095a3854dbea2758d46b77ea445bd68f8fa76f9e476f8d6b7703002b1844bf9bf8360c28f7b9657d09ef522d5203be8bd9ea7270ef72c511fed89fed19deb89433f735a81f51f77d6dbbaec21670459798d7be1c2c36fb49ac2beaa578d0d1bb241f62818407ab0b268c4fc9047be79d4546951e769a3e9a0b0e7842c85405258a46a819f9912ec9266fa30c0a0565924cb73bb5a5c392942408bf40abcb2e1b838567bf36c3acdf55eab8cbb79c3096b1f3086d94b3114e0d9c5f19ae3be0b44081e6118b9f8c2b07fc461ff88c3ce2f8a47eaa3fa015e9861ff181ce098850dc08e7ca83ff8d22ff326831e537273f096b7a1c1335de9c1203ce00d3f4ff5aae9eded597c98771fcf413a5e4b7160adf619cb2317c1769c7b202cbaba6819c83abe88b912080bb7dc854eb3e6962e60f10d628b6ed6e35232bdab443ff57b977f7eabadcb7f66f82e6c52ee84f853ca2032611591db0464baa7f446f5e02a2f2fd27c40bf1db97eb447b489f83b99ed1f064d9ad7bd3676b3a4e115b86d324d496f79d3170c75cf3a3ca6f9e573ae86914d1c443507bbabc4991e7818edc33f12f6e39f473b67b6f204846a70cec1ccd4e1a19a67538879b482ac805a6435b7543ea47ff54bec44288003be1db48785ca7a0263afbd0dbede8f7ced3d42da31c995ca6a82438ba86c8fe24cc24f82fe10db766b4fd015ab08de8115dcbd4532ddb1641e45b462f387ba7ca20e8683efd43df4377efd4c8d95f81d2ef2d6992a4fd4ae99c84bd3c91a1eaae1216735ecc1ebee73323c70237b11cce14a17535d41a257263e2c2b4605779360ed8af35d9c106c4f40076728494a1bde73714ed803c21c01b75392f96d3a409ddeba479bf25631c76a3a926fe140ea854f0985e3362efc79bad6d56de5eb6e7cef5f05b237f9a1d8647fbf86deeb57bfb690bbdd27cc79c37dd6c955c831f32b6c0957bf12fc0888a277d03b06b823350017e9e4d34d5a4d01e8226d324c983046097696d6983cb5bcd655954da7ba003495656d36431746ea4751bd63b2c9af63d5fcca94b9c1f409c42f6aea205d2cf235f84ea4d5d51292c6c7317fba70477c137e1dab2bdf804dd5f3d9b6ad0562ee6d2e6c353189e26d6a6ed7269ccdbb55747e8b290f4172cd6496155734815ee826155844eb85deba0e763469fb10077456076889b26af4942a67aeebb58f7c305b57a32b8f6134d74d1ac372eadd016c32ebcc0e3fcc3a803ef07976f7ae340f415e92a863fcb8cb2fdeb39db698b3823093002c63b0a8caa63415e300aa63153e9f9225bfc0709b4abfc7f8032ae95e0953df9f4642e213efdc1724853e8234a536b1811516c64cbcf9e23e81aadf4fd2465f95d51a54c7b64103bd6a743145d3503497dd2d517ac2f89fbaedf3b03df214437c5de168a42f7b9baee4b7e81b781ce664b28f29b0d66343b36297593185725260cd8a4e2c134442add08110b2ba99d22e20dbfc73447de560847d756928f7c5e5d7977d702c821a210ed95211cdecd4091b46dda2d9e96af766a7abdd9bed39bfbdd918d66dcbdb3ffdf1cf88d93f8ff8971eb6ca7e7b2e3e66efe973b9a35e6c4c99f81b663eef95ef637c82b27e1ec9e060c25bbcce342462a8cbb96ea59c4f549d6713d46c945576951569aed2aa4ad78e11d6f5a8e75b757cec22dcfd93d64a7196f95a8ded5ba8cd514a3c857dabd36711ff01f68dc40e490426cc570500b9b91f8d9812e4799af9f7168a0576e767d35e3f1a25e5cf38893d1489017bc7eb3a87c7efa093e75d56ed60ee5069c1c0af4b4ebd13e24a98e7d031939d15ecd8730d01ccd5de5cf75b72eba6e4bd4fcbaa43304d3c4eb63bb0f0e8241c0d04b73485f4d469e562f99cefb41e868c87963681ddb1fbb602b01fd622c5372a8132433e1fecc6029bea9bb4b8d21ca24c446975e3d47040578e74c4508e2c124c3d505f87ffd4865c92007189fa9ae5099f3ea2314c3ca2e5549ead770211c8c208210eaa7c25eaefb7c1dc9cf0b9e3520c471937d96b8bfd9922972d7e6a33b3a04a1e3f0a7e140c28ccecb389a356940d2b489a2a5c4cea170c2006444a00b204e4f6c106ceb420f7048b63b2b9f5ec18acd498fee2c1b216ae4d90111203d8749021f2f9ddbb04a78bc3c55bb5e534f4c3e5455da996ed055327c0e3cba61189242c4347a9296b1a7e305227f0638c6311181c584704b42d51b96ed92afd7fc4991042411116d48192fb479f7050fcced03a2877c6d87270b00e09545ec8a2e056c1e6d30970d501ed831e90b084686f50fb58d6ee89adfe0440671b60973af712bb7b56e5b298f6821d799f46200078b2f4ef45f9ed98e4b025ddf64c1bdfb0ef9327b7b2c90448463be124b128447fab34fbcecbd3276f5e3e7c0ec08e4d36b1f73cab834f54a5afb2bad1959e9a1da7ae2687c0f9c1c71a6f79ce5ea18ee525f1e8ac9037c0012feafe76d7c5a204f87889457714bbafdedf725f05fd84baa77ed285aed246ab545951352bb49dbc508420f2aeb0645616e4e78e622cfdbd740720d17399ca380db311bfa10d95026aecd66b5e61518bfefd6f84e57e77fe05f76e973ed5827a8336c58ea9ab19d15e5bad4d7ce534fa7c8992dffbe1a13ac5433c5567ff5164137df61f16b090d0bda0050e62e546ab9b2ccf21e306f8ec2c1655b9a8b2b4d1f95a15e91c93091d1e1239422a3ffb0f95e657659535b3f940bdd55acd9a66518f0f0feb269d7c2aaf75759997378349393ffcd752d7d083c3bf7c37fcfe2f7f191d1a4207b0c91e382a0797657500276c7d709335b30342213ba0318036983e4c759366085e453c78f1ece5fbb7af1f3e7af6f22775ac46fa6084c9cb403fd1e805e5466b7174605fbad2cb02e0a6dc479f3fd30d9e6e512f977348fb5147c959702a77eff7fa864861d23b78ad4394a02bb3a8f424abd1aad12ee9debaf21556ece68ca8b0c21ad94b5693075562cb349be897cb79af075f1e00f53e2636f53c3904fe990dd1fcd7d1c344328932345e6405fd91ae000c0a3f3d7272e88f7a5d165331a4977999024021dae47002d6ea42036861a9f2b2d69e3d44a75e4e6698aee60664d6bd464d4b4a77dccc54a127baaed36a2d97bc9d6ae6e4b66cf84134066513be4f819e25fa3c6547bed52f57007c6cb8786e376af39f824d2c84ccd1598ecc3e74a04336c7ec655e96550f06f8502212117e15917a208687e744786651f90874666ab80ae88ef8a55e4db49ed6e27b734ab80f1c5cfda6c9e25b72cf4daaed5386380243c0d661c85d37e0fda063295b2a94fac729a212df659bdfc8e59da01622297a4983b1286f7aa32147a27a4fd88aaf73d30d3b572c0aa1b0bd7a76074a31d6d04481e0612623cc599f6edba2392ea0a24d8df30c390a87c6cf28fbec1e75dfac61fc4bcc465ca9f6cbe87cf3637ae43ef140d9d1e92bbe282c672c123862e9db11cf6a38ce29fff81abd6accd5f35a03b4be993e53babd9bb32bc3db0d9f35c1bcb8d6d55a4d60b3684a48b777332b737ba0259c4af48ee417ba9f06693e2febe61743a727d893b0093f1a0e875cf6f7dcf5bae72f9baa4d579baae53cde5a6d4ada4de1c2d3de827ab6f081ddb5fbbe92233f766d9ec23cb62956927068c22e3cf9d732cd6bbf51245c0a774ffbdddd6aed9be1a7910519df6bc34fa22b81a8d3c38e45142c05f64dbaeafa062f011049139d7527761c1420b8631bc163cd9cb01f8dd8830e6afe48155e6a8c3e6b94ebc9befae857673fd248cf948d4d3533f5c49eef989bdf2aef58c21073dc7f91062494d9cd5edc6d42ea4afa23130d405a19cc9173ed13e4a0574304e76b3f44cef7afa2da49d10854509abb975024d8bb1be6f182ace746c82259ed77f313e8ca03ded6e95f9615ac9eac4170d8abac5069a38609e44e19e20d20cd2b9d4ed7ea4293ef081e8b2027cc7c3e004811684ed5195809b26242094c6f205b0becd3ee1b75a3b36a3a100760a521bdc84d5a34b54ab104967615a42bc351d8f72769a1e669b1846fc893c04b1f223b3483e10dd242433e3870b7f11b509d5d61623e6e252361bcbbb09fcf67de7e07c53dceaffd19628340ea4a4c03b050cb85198ae119b7d8a350de42d2e0b53c90b53cd8500b799d4dcb9b22525556c8aa026d25ac4cddbc70c6526b2b6dabf0dcdb7a7975a5eb464f5f84c58e24516763b526d69d8886c584a6b7bb894126bc5687ecd2f7bcdea14301de9e257c7c0c3aaed01323a894930dc73af6a148239951347b8bd2e6109e6e6e879902c3b1d9893f1b88babc84ab6efec84a39d92dfc919959f049943fdca61ce30fcd75d3099ca1d2a6f48b066994c0d195c5494f57b0819a2bc645d9cc06ec8bb7a5d2417667d41651de2f56f419599c0cd9a1cdae8a85cdee374b170b0d69f178c40065e8ca0a92941310958bd2da516a32e6827b4c64ae3eb0a6e056be356445dbc1ca83a083c030e27e559174c36efad2a707f28b4d83c19653ab8df8607f3fd885ef6c39056c7b0e0ea2aa76a66d35c735f8a7dce69cde0df49ce9a2fc14e52a2877009d6e073f8f7c2076c4d62d08bc256c488f977b69780e95ff40a8196830f87b3ff8ad1cacbe06169be358da13499544275bc0eea351cca42a8a6de81a6c97bc6ce26ae8b491332e72abb8ecc2061d3c66591cbc7ef5f6d9e9b39f9fbc7ff6f2e9b397cf4eff1991091f5b0cdf347f84f9afc78a6565f93a4f91df242c3e058b3ba045ddd81cf1665e784d046a9a519be632e9614248a7430113a499e1e5a5a36c2341cd86940ec03c5f943798950f90e6d346649de0fa6995516e9d5acd97756364d36f878ef22f5aa5795daa1ce60cb5186884ad6e4a351a5122fcabec5a1bc113b4d9a3a1aaffb54c2b5dabb2104dbeaad2c56c2023b3282bff2cbdd61edff7be571bcae5e88032daf3bf355dd355ef7e30451d3db2aa93a1a3ac5eb90098d6f41f3b123ec757568c85c023b37ff1cdc5bd71aa24f6deebaa6c29bb218cbb8dadeeebcb6ca5a76fe983a4bdfd9197e5970d5e235eef4d16920ebe248a7b8cb86cd6ed252713263e6c10380594cc303bad057db998a68d8623dcaaa9cc8e8889909c458572cae285e846e324d1ab450aea109765fdf0505a8d981fb43b633d3b9d33473ff4446365b28295694b7ce4a6126663b4cf45f0fc5c0f6c463a9fedc4bec18c7422394a240737ff9ec9b7e2fb40ff44bbde96e4a61bf73f3b491ed62fc93ce0270e799131164aa04756d25afc198071540b106baaf056fa8d6e554d6bff901e7f51269b17111e7b37addfe677d5f2f03217d10ed04de716d6330d3ac0f6f6791aadd0ea9da8515f04f160170f8e5529a338217f5ff0f48b1b59e948053f98b7942ea6f6952ea65d6e54acc9812dbde5230d5ed5a19734c453c12ed9e09e4c6cb119c4c7a859420ed894b615e218a495add155f8f8c9d3877f7f7efafec5b3977465174f1ffe03947fa634b32437afaa47954e1bfdb649279f7a6094ad1305ffd553c4c46756e44f7aad8ed53bcb10f281f71a1fbb9fa5aad68b146c65400a0cb2f0d7b1bfbebb1b88b9b2581bbbd9eaa16e232fb8b258817d731c7a01414bb022f98edceed13d64acf6f612d674f8c0fc3e1f7c2cb3a2b737d8b333190563c38b779ff4fabc03f65294f0937a51d663f5eedc9d7f85be32bff9c9f545e83a191dabf1744304ef1ea70d4589d2d0d4383268ea67e343a21d2e592eddd16680ec137c96af118c6f9749e10dce90c8035e0e16a5afaed057ee79a1afdc730a9507f73896fe8882f0af19a6638824dc8ea5b73e39d8619e12143decce79465074b1420f345096a3b5d03f3317481bdb41df0f661090c4b6ac00f7ccdd0e1625401843d02461195bb559a1aff015fdd10ab12af1fccdd326bbd6af8d60c1bd411de5d170d8d6b2b8fe58ff2ad79940b74895ef1f2bf749c7e94c15fa922d3b909ca328f8bcc88a17e9ca4ed3e8f4fcffe8d06313c20cc1f661e2f9ed2caef82ec8176c1f269eed3ef4276606b1bd675691df339666d33d7153da15bbad47f3927075847605c94b33162ad69301e535ec49756c1363db185c7af82581669eadb29d772de3539646402454c7e1dd787767a239957bf9e4a787ad726e56b2de742845f932b8e38b1392790c5bc4a56bb15de50023670d67203b35635af8b6ce6dfba2dc583b38271fbbf9f1ce1fcde810ed0a0adec89c68ee349cc78fc20d7a60b14bcd75c7674197fdf549a793993b0add228207b0edd4a14fb43b15f1b5391bcd7d609236fc2b7334f6f9eda743972fef7158415f7e185772cb4b62f0e1977e7b8a7367caa7599135da9abfac3f7cfad23d39b18ade31973fc3d5d041325d8524d12e4cdf8db9f0caafe08fcaf9bc2c409ba4b2f902f1523092bf29155ee3bde23bb17f5a95bfd0fd06b7ffd0081bc6771f8a74a85d6a24a9e702df936936d785f53bdb495bb8e9cef79423036d83b3e0fec556956b712cbe1d0649ec1806d146f890507d1d7366b69539e88508024d8bbf8fd23cd753955e36dafba1a295e26299e58d0b5a38dba8256df313d5ffb3acde1815f40b5ac2b342a53e0aa8ac323bc30690dbb629173e44c334d2a66f536f4b1724040a4d1ff376d678f778a954895817be26464d64fc1549f53111ee574488f1c09f26cbebb31d2275364ee0cd910afbada836a2f815c10bbb39fb0b9e09577e1b76d0e9cc8fdff816840df80dd1134e3bc545d85d6228daab9e25eafcd2eef2c6b08a30eefcf78d10009548a02471510228d0c66304fe34722a8f0049e962433c0fa943f2f26a340c54a7cd6c008f8fb6840b94572978a06793ff97c70cfc69f4755103ece1cf80c310f2bf4d160f60e17fca6c86c0f69e703deff75d564fd2533e592da48369ebab74d5f7ea085d4cdf66574576994d525072faa3487c62958cb659581327b45a24aaf6a4986ac871e098079aebad0dcd8a97255a9cdd4db0dd54fc36f655abc9b6bdeee4267f3b6a9fadc40f18afee5e9b182e7821397774cad6b0b51fb6eeaea6e3ae14062e985a310b7a7beaa417750f3e6790ecd332e2c0c8b900eff6f783e1b42670def8e36335e26a13d933ef9bb0bfaf571e772a6cfc836368fd488d950cb960770b3f2cccd572cb08a97bcc7f5b1d06c4bfa89b59966bd543fed1e2f9fc191f98aed1a3bb77c554f82158356209e6690d96851dd7bb95b2ddfc632362496df3f594c7c2fd4dba73144e10e9b1d64d931557f5d9ed55ea7e6f3fe37af5c34375faeaf1abdef537fdb18f90cdc0508cadb9f6fc60db6d51162ff5552a5edb703eeadccf4c56223e44ae4924ffdcbd4be226cd2bfc3116b422ceb2ecc4faa30057fe6825d18ec83f8ef3cf1e831249d721888f0d45fd4da83c5292621db1b813da298fac268970e2c5fdd5c596bcf199b67e571593a3674f8ecd6477d5afdd4269c5f9821a23f1e407d54a54ccdf07a9f0376520165721a6e9da90df58de9eeede6d4d9abb773d1d6e2cea745e0c556b41fee2b3e6a2d2e927f664a35f9b30837dfeac62ba3027fed6af75f5964c372279e27f8d6168590d194f99edd0ddbfff580b22feeb490eef6c4eecab13c9beb1dadbeb27f1b9e29fb6cd8bbf79860653cfd981dc64d864b6f44313f94266310c3204b475b86dfd81f83a0291cd8d3f4c8b9c05734dce712b7bc8d61e45fa43c6846e73109b6b59719de6d9345168e941cf583ab66dc5a00cba2aca4a4ea1df6c566296baeda63bfbaf957329d84cf8b8a2c9d0ffcdec91ed8211535f8bb4d8b2e8cf403d2ec728091443f5d3b23ae5687f72ead25babcd0843165c84068acc317db8a57fd4fa2a5db5be72caf0e857dd8a786c41bb745cfb8e35c7b125fd6e101a2bfe6b6cddbfdffef49fbc6bfc37de06c483f6247655252a0c69ea9ac9ae31896a0736056bd845d5c45a1d0aa4dd8db24a924ddb5cd7c6d406f2db6cd262062ca62addc572c5ec54c197bc979d55db4eba16d86f3cb9df6cef223dc32cab77336ffdf640c4dd021ca4abda28f606ddd5866df364f46a2dfc9683a9edc672cb97b119be2dca84bdbfe3d00bfdefee20afcd1a51ea40dfc3fcc456e7c6cf0153629f7fbe2172ac6dba15b50566d870ad6d0d6ebb45afa1d9acd701fd78705818740443e1fb11532246b96dd8e53f6b999f63dd750bbddd2a1e4415c291069b44e003cde339ed3930da486037c66e9f0b9e626c4ac422a1be2e0465b76dc21a521147b1adf77105dbd6171ef39015e3edbb465f863b6cdd2bbe2210216e76e1eed3ffbdc20bd8f0d29fdc9de53f3fbe001bbc5318c4d786243813efcff65acb7c0258f80114be654481a1d4b2daff44d1a836b743539679932d50617ef65fd2d7e03799ce7f767e7bff4f9bcd5bf0f8dc7108ef28b4f620031e66373eb348fa6010261bef172a7e00ae2736fcad281bf5abd9ab517cb65f5233dda7a7a282a0701cb0ffa9297e6a99b9d1bda3c33a4820a16c6fecb40f62d7361a36ad97fc2eb6cbdf144dd3192de3c254869b17e7b6d018aa20b820b16adbecef755c895c935a36b9f04085fc2d184eb72da51486eda26b8df090edc620c601c7b81d7f38a05b8c4bd92a82705a7134524a510782a6690ea49c461a9d5bc5ed5d91d0d088a8597c64adfea0cb19498c2859e5ace4e9ed7462847d356281ece0d68498a29c9dd15d29ee4f45d5fece38a8be339bd04ea5bf97fb26b8241d7349fdc4ff3996ebbb85b36abb461c64ece98259fdc3dc98eeb7dc98ee7b37266f80edf065badfe5cb34d9eecb144d381ae4ef8896a1ef2b5d97f9b5fed3b7515f4f7a7b14b7c97f63256c4a8737069397973b7e2ccb5ca7853a50bfcc34808037a54a8b6c0e069d499a0326a383ffb9acca39fed44553c18144853d616efe77b99aac0f405a5ce51a5218399b7fab653665f658ed555717696f98c0bfc1a86fc3c25ccad7b11ad1239f689ac57485d9a7c76a38188a4566132a790f84ac9a2cf3b41aabcb34af7520a66df35f101c7d3b2b6f540ad8f5d3aa5c2018a0f5337682dd5953cf4accebf32395148384e823985e12250bccfb65a5126c92ad84fa4dbf1e7136deffeebbc4feff70f0e7effa7bbc06343b530daec9942b50a517e5b55677d585cecb1b56ad0be797f552c6b77f8ed5fdddebb0ecc9a65af66d7325ffe095dc222493be81fb9bbd08c44631bbc4d150669808b214f1c43ba66fabb7affd3790e8151115825ed9c37fac46434ee5a97598387090fe74b588b4c577df9d159818b52537f32cab2e58ec280c3a35d28d9d94e8060e16d9c0f1b00b87425c2b894d2e9559989e93da15eeae0c71e096d2d1be072508a7a5ba4771c9d073aa79d80ae99cebb45e56785b32347b93669528ef124f790aa80b120eb1232fad95faed68dc70ac85bc2cae74dd406e3ea8ca26f5b31539d5c76c2c52d9aa7bac555cdf21c357a9d69b3110a6def95cb17d0c36a04a4c1582e697167f9c47127a23f5606f4fd4a2ac1398e2898302652c8242a8a4cdc0aac21ea4ad7bab94bdc710c37aa07ab0800ed57dcf115d4cf1ed3e7b2b58e1757558e30fb2010f76af1efa1656bc95ed9e047dcb9a6c280a1e5befe6bfc1e470abd9acfecbac51a9aad26996e6161a1d8f949bac99059b82742ebecc9a5fb266f6da6f7918cc88dda6b0199cd9a0dbca6a0bee67ee4bcb1a4e020470ad28e9455e82cff53c6d66b5ba2a4d89b28034c844cf6cf54644b35bfaa22a2f723d375f9b526387336e0a0daeb266b6bc0094f1a228b2c9a7c3effffafd64f2d7c977df5d7e7b31bcd0177fb9d47f45d2b6c13a9da0b461294df38159ed17e56a59eb6a52168d86fcd5f3c3e5e137df7e3f1c7df3fd37874d59ce9793593dc97431d183abec52507d5be64ba02a9efea2555ad7cbb9f5fc9e66cbda75acccd75708513c4bf34b0e9d43d8ccc5755aabb4c16b3e514c1ba5d3c98c341e3746ced2934f70e8cc34260d2faf7595a70b0048674dc13168d4b4d43582ef34a54527c3298d439536485c7efe10c2762eb3626a05bc3cadccee432d31df22951b062badcc1168d8c6f59d959e97d776b89d8058cfd2856351537a18439ca059719356d35a5d106050d03cc3e86b5da5e4630f096a4d9330dbec34ab9bb498e8da26b8e1315eb262437b92c2d4b7b9572eca9565bed97171d9508610d188575c356b2825162dc9f08d89c1d4270bc88fe89ad0b5f49365ef0a077351954db564b8e6658113c0883d09f2123f4999b48dbbe92ccdaf09f5138667eac7cef067c588638663d99d53b3a40119746e241be6c0051cbbcc9a464fad1486b33551698d13c3fc91212b2f68a771029a05f3378d7299883dbfe765dd20beb3d297979959708d9aa745a12bd1be5b2ddfb54e83b56bbdd3774faa3df029abdd8668b506a492b5932abad407ea09e64d72eb9d02e87af3ac58d67e05c360f455c94af2f131829df356f66b0ddce45033b34f3ecd038072b30056cf0fdff021cf6a8f613534a4eaa65ca8acae97bac611e3b3b5b60cbb5c56cd4cd70d1ee2de20938fd5904eaa6a4cd1fb5c4068fcfb0bfb7e26923fdb4ce3a7782df9721456f9d06c302c049ce2bb0dcf50d28396be6609c50b1b93cff21d2f5a798e2dd4801b5643ad151e838983caa54f9accb5e1229d1d500da3aafdf7d2bf4534da91bed2cd6bfea29751a66948ff991557e696acf6d5772e1884b800fa9b4010753c486cefb9544accf7939ab9d3c459833e68b64661e69a4ed5bf9669654e0b7335ce01181c4081a7faaad25a0d713b3173adbca4325e090567c81b23ac1435e705283a60fc7b19d73f9334c8566f533e868a48be245a7df53fd537dff3a49d3337813be552c6fec1cacfb3c10de4bc1efd65c85b727d3b7a6b466f96a8bf0e1375ffcf43a984a42692c9eb8760e90df8352d7c6558c2bf3e0a0be25a82829c4fa15e9837431753f5206c44d5dd888a35c2c32db59a50edd084ebcd9c68ba1b01aaf45d38d1dca219514e5c7437e282356203272eba9b60db810ba2d6cd1b3d5d4ed0d7a7b52d2441d3926007edb7ae66e6ee6e93d23f2d2b5c68d094e8556c282f62662504372191d63e72978a7d02b13f910bd11e48717bad46bbc4f4b0b199d594387982dfbb99fa618d383eb404d53e2be5c0c7e85461c11df1abbaa9d0dfd423be8da640c4b751e26a880cfbe68b77d9b9ef86d976d6de38b456fbc7acc9627e084b798b6a94640bf0279d7e5cd6f2dc795a56b0ef933a87f6327ee462b9e83cf96b3051cc0ee78f3d370c07c7aae73743b88ac7e7cd0343c193fc41fdb58b9e2717efa9592d1df75a0c716a56fe946f7c6ea48d405cfe94e42a2e76b01e71359854942140579702cdd7bf6c74f598ee33fc80b4cf9e56e5fc11ac3d67c4f68a36ebeca04e94c736b2c2988325da5d2c961db68797997c757aed5d1e360a5fe6a519ad1fd35a9ba9ad8ed5de3c9b4e73bd77c430a360556e15bc00655a65104e77a4b283039e03e6c9aaa9520b275b2ef10206698e494dcf1300a115dc7c700cebfa1803f4220377a8eef3acac7222ec24d7c941dda77aad6c679bffbfb55e909ea55079592ebc33d03c5d3b445e8c1a5f54e542574da66ba75c099b66060214fed6d8dc363905030c83089f40f8db36bd2a94b46cb13bd2db660d025ba41dc2f5eb0f1304597b1a7be4d1e2eb3801e98b9d37c74e9939894c0c17e8280eb398481efb3a22cfb3e86bd3c74a839ea7d73ef3cd16f806eea9cfb3425b7c376be132e39dd03d96f270eeb03d5a6b9861282334b0cf8fbef6320501cb59a1b74d58592b4d55ca933aea0b526010dc9594fb204a2e76ef34a756ef8e63c8ddbbea8eef34840ddcf11db2bf7ec19bbf108cb84424b756fcd954e5276d979523e9def3aebabf8f6c0b81826e9e439c70edab0e9e4b667833a969f8bb73bea672fac2f988747c49ef3f7f56c3c130ec22e038bd4e9b19f5135a4a9ce43bfae32abdf1732ead26b5bad0cd8d26c749afb840b269352161798547a45d686bfbd3ce77eb6dfbfa99ba17482341ed7553a5700c988ed76a5216859e40b642afa7bdd53d7f685bc1b93a2faff569d96b5d49833ba53f2fc49939daac80b88d0a4236cd0ff9ae8de3d719f8189287b1a1f6539a3de8dec4d01dee55f57f7555f6c0bbae3bf41e0dacb6d4894267bcb1b7e4f9087b34973cdf098db136c2178180ede62cedacf4a48a5e1693b2808904c1af9698bad0976565a593aac4d09033eb6c75438b1afdabfcb246d4332b54e25b715f98734d5ba7dce9ddcd382ef3dcad1de9eec7a0c7ee337fb175ac2c830e03371fdf987ef0395775c990bdf8f7e05144da53db666bb8ff8d78081b300f760aefbf76695eb7424806c19711975b1681498f3adc79770ff613610816c573e7c842f765d0762a3840c804d7e82abdf939f5c9ff23f1a0ddce7af65b19451684eb856179e89adc027e3d6b8263f62c1e72178bb64b542bcc2e166197b81c7896741b943202d6d8b35e745dd34a9da821cf05c8fcfb7b369ca66ba6d96f7944d47f1bf8c5169021787ef39de6b063478482764f941df8ead4055ec9ce8f975b241ab083f7bae5dc33171708b67509197b9e2e7aed765a842073f0f03b957518e2cec8ac12f73e516975b534f3c747c2b4dc89cc1aa52ae8768dbfc66a6fef882f8ddf094071dffaf8b3dde4b706355cde0ee3338aaae3d4cb65ccf189b337748282fa43170dcfee58f48c6ef048862f8cb049ff170d7ff1410e465421a366e534cf60c175e7aa2af48d2d635ea00618a5c0b3cec004a1ca167e68e05ef0baace1b07a4382f916c5f636fe63f35c85cff5a539d35bc6130a5ba8b3a217da4bfaddd4de90c8e50e80963de4c0c92786e31baaa936548342db41cbce41d426651d526b3650fb11b3441eab83ae665fa803b54164e33d89d47dc1e23da2cc17127ca488f3388f337bd3e76fbc3ea4f53d7271d3d7a673f16f1dcf367d8e85c4d1de21cedae5c9c36d62b3df8c438c87fbd189d8970e6f5f41dcb0a8459bba05c499e411ec2b916626d156b69e8214dfcd4ab735c90af9c6a12f9b17e535082f093a00f99f4db9f03f3041aafdbd75ef98a7ab37fe5285b79d0359012e0e36ccf2739af1bc851807d2f905ce52d6ea2de5ddccdc74c73a087a1e6df5c6db5eaf677bb3efd8825302db97b375db790bec51fff67dc3398d065f89a687c28057066f8c26b477377fd8878ae317cbbcc91679068dfce6fba13a541bd591ee34a7a0642c6c7f7ffe2c931480ddf92129a8add8c41e8abc21e0bd2f6227c02da7a81b9d4e8d2c5c91d786f5a453a9f3b8b0ae8331a70ab06380eaf25eabcffbac89cc53820b4fce726be434fc7b1f3835566427bec75566ead0b95bb0f1ea3652ed1ee1e5dd12846ac7a521b7418a2d17f697e9cbd0a67f78a84ed34f5a654553aa7432017d34f85c79bffb7d60e99a7cc12d8b1d50381b658c7e790af9d2719390b78a9ecb842a812c82e45ac252d7ee86a7428cba276be6729cffc8469a5a7894d8473cfa8eabee2252766b1cb72303ccb2da2e8179cb92834bf640f5ec14627aa0d0b77a35f6c286a36a7ad46e156e2056d96b09acc75eeeda8900ed5fc4d88dbc8acc67e2999cd661d4b1d4b3e2170ea9bcdbb4cb037259937e4c6bdd357adbcf3997b557c4ca7a240e8caee7dd98b795c5ae89b8e7982d2e61f710a62a406d847b97f154eab4df001a0f2fe1d3a0c39f27d0685762d815aa1d0b8c366bf4a72a9bde4a19d8102faced6b3b662a378358cf00174d161e4761411f05c74ab66c583c0c4690e1d6abb855ab1fd01566b66eba64606b1bdd38bd2c21b754ef2cd2bef56ebee586de1aec8acb298976b4a904ba490be79104c14f31a5a4471c88a160b998edf936578c569a4aa154b0ff02cbecbc6596b5fccc4268b700842e64901c3da669f073897ea0ed5eba2931c3e359b3cdb8e83eda609eb4cdea32429e450c912eb8b5f74ef6c69b16932e9b63a2de9d9ff739bfa216cb1daa784503b0d1b899a8e160782ed5bd566d63bdc5a23ab96dbe2cb79b7351f71f078ec690b188f2c2db0123fb7acf2de7908fa1d1d6bf21eb253b8ad9a91a1b0eb026724362684394b3ab17e57168383cebd66e759d0bb7cb41fb9527c3e6d4dc32b97d7b5313c68b2fdc8346dc3a5a2297f057da3539906d47ecdbce2343446492f7d0ad5c873c52478271108e39ad5d89799ab99c44ccd78cdc7eaab4a8f31411fb36cc48984065630ab2eb1127c4fc8784c3eb2e5e6dbfe13cf2a791c35db8b3018fa965e1628be4773aba58c37c6aef304c5d34c95aaf378596068b9dbb8fb56275a50719ffe48d9e343d7ebc1e384bb53ae80cfafd87807f3e203e1db0694551a31b68fc53d0c05abbc38cff61eecde20b59d7960065ff61e76e18325078deb5bd9169f60d137520777c66b06c6fb2bbefaea759938be4f145592efe28388f6f5a701edf38380feeedd181e7f1cd91c7cb58547a92367a1a4072bcf76f02208eefb60071446042a69b6142903d45a3af74a5c079242d1a44b3756aa3276fbf57f5424f0658c18b672fdf1b86fef4e48d7742300fdf3e7cfac4bdf9fc591dfc7538fcf3e8af7fbdffddb77ffe76f8d7bf8ea8852f1efe2342e0e13f5a0422df230518cf9f1f3e7f6ba3c6e6599e67b59e94c5d4036a80155aa07bd48873607f357a518fd56838f4d01ccdce4486c3a1a4f33da332cf8a65a3b753f97eb891ccac5c56db897c03540232f7bff564a6e97a3b95bf7cff6d84cc37ac35375a7f6ad101b092a04fdffe254289b5675e16cd6c7b8bee0fbebfff17fdd760b4ee7b3aa4addca14d7f1efce52fdf86a4588bd63add85d183d177dfea11b2846756fffbcb67a7662ebebaf8a827cde0935ed73d37477117f2f9ba4bd3e65e9aa80be96196aa0375d1f24b032fecbf17d9bf96ba97357ace313066693d93418ce5b2f108fd2cfe2451e6db23e6062f234c80f296101353c616f5595b41ac340d79675e9cf35bb27b18e6bb28970da6fb316f5bde7c9e23e5b2890518bdc88a9ef3288bfbe8c97daee735a216a45dea484987daae295dfda69ad255ab26bc2209ac05ebb192163e53dbbf0d01b8b07c5125cc2a9f242e33e2d4a2cc29f9dc424fb2cb6ca23e984f3ea8b272d71ca0defbb028eb0f7de1ed0231e2b54e2b48a6ac74d15499aead9b20c478bbec9a95fed752d78d9e1234a0027a2ac3cc74a943eeb2feb243f87e34564375a16d9c3886db71285105f635d3dac60874f00d461e37335d016dbd6a2a3dcf9a3595dd47a19dbe51fb14f5dc1fa8976543000459a36eca653e55175acd4d670cfbe7d9afc8b929e401cdd7401e610b16953e206f9f29857424ea62d9c45c83f05c2cca465d2dd32a2d1aada72a6d085b75ae2d3801906f4a35811cf918af5e969f960bd5a417b9a60ca1e64ff5f0f92f0ffff9d69cbc4d9a152c90bab92971a9816b1682b9a6ab8121cd5302b22c7fa6057593ce17354892ee076c38533ccef3f2461be2a5cb472a88e10de70be8afabec6249f83fcf2ed51e3a15ed259c32c4f45f68552f2a9d4e0913245f13bc41835894384db0f908290b26a78bb4ce26699eaf13641f7003083a5e9445bee67cf837acdce117a0f66f585ca32fd801d3c25a9b491c6fa15d117ebcea74ae9d9e1e99037ed630fd06ea19aad481f824ad7542adf1a461ba41d61e3ffec8013363cd44f1326502a1ca0e5e01f10980f685190eac20cd734edf50407a9c439239e1cce0982b80bbfc1ca6dda9f9b4e7697b7c9c440c350bbd1333c05c0eed048008034f8ace8cd01ce152f9c03e36c6fa16653d56c32f49f82e5dd1bb11691df16cf9e223e6b1eff2603373c23c9a6745e4b85b54fa3a5193655525aad0aba6fbe86bf5a5ebfc33c444797908c2eb078a401ee1d70f2a00838753164e3ef33e76f2b122ccabf22b4f6cd3717f62ab7d35b20d36ec616f0efc1bea253fe5e139208698b53d9d5238045b0135c797b36bc0b3066b1349943e7f56d8baf029cb74d88312fb309664d0bf737c0cace5e0cbb0a502c76842e1a8c38ccad4a1ea01c70ed4a8ff6583ac0164dcc97ca8fe57adb54aa7e9c2ed9d1626e4e6e6669016cb8f57e9a7595a013ec8fde1e8dbc3e13787c3d1e14556a4d5fa000fd783ac38f8985ea7f5a4ca160d5f9d781ef4a0d6447dd26b69d703f34969514751d833e38f9d656a5dfb769e4d139599e961335e52a2c7bcc4948077ef1a823f1cab999f1ff36c8a88a3e62ccdfaeac103976a211bdadade99526682c09879d4e36cc44b9c4b3d63369449b31183dc25c42e970da0ede1baee91dc8128c420139e09a5a4fa775e62d28b44cdb2b1ca465fa46322e8b14698a0ea87c0407ad600234d2ff65df7f87743fcee41eb3be038f5bec31192b7cf703f681d9b665b998012579e721608f223246fd8d082eb7a6e8f5e261be2a2c44aeb72594db4fa00957f5088a8e54f15dc4c3fd49ff4fa834b6853a01c53317feab4aecb49969a25f1a1f18507ea695929bd4ae78b1c5cf15d1bec04df332b732f51dfde4fd4dea2acf7fa2ddace5a6036bbd46fb34aff6b99e64664f9f6fec01cf49c8146a4bc309b459db87637401ad59aef868999b965a5dec11690a8e21c4e5690a52d6e926f705616ad839475e74f23dba11a966c7d9de689329c60ebb622d462b9c4fd070ce9c7c8ade3967cd82d14dea791eab183bf7fe6d3e35e03543e00f6e4a53aa1e5393c5763fb7896b9c7c15e72df94b2dfba7d858e9036d1d14e44479ee82c3bf2077abd4821558b5e35ef6a587e07d07efc71e459d96466f142f113d533ec1325cdb1002fc76ca774aa683840de359c7e835fdd43d247e208f005d4be47a49697c2a63cb513d306ba66c562c9a121f0d070d15e83f7f4c0b7cf797b49342833e55d21b09554cccd0b1fb8f7882daa8e6dc1cf9f5d497ce54ada081868e71143c85c2f7479e92a32329eede61e334fe1c7588a015cb37ded95910ba080d950b3a6862b125fc2696e2e086b5bf39dce3cb6ad7aa991b6b7a6917849d9b35bf089653872c806cbe017ee2019c74a898e78b0ee56621eebf67f4d597479e7292802d27f9935a9b2c25c27d326332b99da0d09c34af501b9f841cd5273d9d666ca95d7d9544f2d2097b9182ecd70ccc1e3b26eccfd6559e31dd2ab85d50724fc81c61c7632433c2bae068ecb34b277efc6b8d83dd458aa87d39acb7faed209dcb02dea7e39d70daa117268685af0b14fcc9ca8cbc44e9086ab8db64e03dfaacee18b4a7376a4e4e2c56f23cb76931720960be7821384d82d65a775ed26767b2371c1b22cac846a3f9233b4954c28e8b698d4ce4c60cec9d668efcb4d0abd495f5dda65243f3edac2692b8e3c8514077842df985bc2b2c81a55e91acc21b84ed2c5a22a17959126587c56ba6cca039b14678ae15ae181ec0245fe5e64cdd3b27ab834cc9c7caacdb1689ef1fbed245da493ace10734dda040691b42036424bec0c17ee95c1af91d0cbf03f9e2d5a5adb2efef60e86e2134a744511d7bcbc53b20f32e3bb717af4bebee694b0f404dad4ec207636e401162b72b881a6cb3f27d745a8f3c4633480bdfa3eaee31ead9af66e5fd701cf28c4d30dbe8ee954725880fe7bbcd8ca6743ba53247b70bd4bbc99ad9b6e17f8a28db5971651752b19c9fa201bc3521f83448a0f2f8f0b63c673a479db9d3405f8e43269991f1c36eca9cb3010a96df34bbbcec61a639d36253ba6faab75d8a27a3b1fdd83424d46475d2d11523429d77432dbf483f969529d8c336fdfb2c04d49164b1d4be11b963ebadcbc62078e59608f16be7f928a6dc4fb49bd42a7501a1e5a5fa6067f907ae75b35a6c2660270a363f07510a443fccb3a2ac3ee0f4f5d729ba6d81220434821f6803fd407acaf9a2ac9ab468c608c0638ece720ae8a6560f01a3ecee86a8430df5a759b357bba654ba5e94459d5d6479d6ac3dea6f0e291426e514901327b911c4e88e945d829e1ae40eb9b8ecd66b97d2c68df46b255df7deb0c87b2cb50f4b6032e9dcc05f01d8fdf9f38623c015dd7416b80acc8e4a5897cec6de7be768d8d7896cc15bf77874ee69dd68fd699aae416700cd36629679b807704ff47d5697bf504132547a911ef41ff039e310e6af629a4fcb219418cdcd9b6a5942776d78b54beb34458b9229435cb69201b5d843cf5103f64361005e246a8f1abf97d8ce8657017462f2e9a46a55e2ee04bbc516f29681276a6f9aaef730289dbcb790fceb4a5feba25117557963445bd0cb5d565aff0af0c40568d25180b6538fcc570a3c04cc83f252316f81daf2a26303c616a80760ef1f0ec16c8483cf52b655e50dacd27db5072b750f4391f07765965fa92ecd7a59a4558388b86ee2959750dcfd36dfc0f7a662ce5dd86b614f3946061fe10e034a66fa9bf1369d4e7b6843f493183be31b0e1649d09c9a92addb1092447c7c7ebf44850bce6fa0b1b71349bec1759940bdadd0f0511753ba87d764a1995ee9dac23b1b89014ca5f041624a7f01623780500ed61ca72b4a55a5734cd88c464491130510becdd65a87664cdcb64f671a35df08a8364fab2bb4c110ae778330da802a6e73d74ccb1b7c5d56d95556a439ed8140f015f5cacc8e746ace969b19610d7dc01ebbab5d5683f1bcb55393d19228593553e3e41edaf3a4f9fa9a2531f30a13cc7738941b5102bac8a3f63d82d42be65ac9b2e4b53691a8daccea01311ddef0dc6a0399a82452ef0128682413da481dd02288eb656db9de0ead18b95658a21ca7864c52a097dda95361eac05bf71147c3323fd2392cd083261d7c4593eebb26b53a1a2490a0d4117e818dcdffd88bd1588dcc4d0279bdaf466adfbcedb7f375d4ba01f1114f68922cec4c4d17e67f48b8bc8d70d1799cd8c93570b82996bafb9686b363c406fe1e8d014b1f1dfa1bbf2dc073bf1be3cf1f68e8947d2b76642235e28d62d7444ce43f4f17efe035bf4150664a1933c2b34a0e6c85ccd5c62364c5365fafd4344f9f56e5dca924dc28a1c0181fa1886c324f1701aa3acafe482672d9769c8ee09cb7af07566981e4bcdc6f3806cfcecd1a757762761a497dd21829b08cbe1f4b9e78cbe38538d1e3170d37534495318cc6ded77a911a79395f7b7f49cc5905c09a177a922e6b2f8dd314057d9dbed6d51ac8501559adf46aa18b1a4e293a0f5cbe1348861000d9b091452ba7c354bec306ec84da3abecd42e45066d2ddf55beb74c9d2ad611cf85ecb63f771daa4d29bc4fb8640f5632a78e01c0cc600bd022723f995a4934959b14c5d19cac0e8a480e938cc05ea3aadd6085380f4c81f24426f170f10a20366609f29c6258981589b8ff5e12388b9f9581f2e96797ef8ed77c33fbb0f0153f5fee0cf98f88dfc95392fc6deaba68592026209085a69b5066cc0465fad55ef62bd48eb5a4f8da431cf8a43239a0133ec39effaffc174fbc31821f3216d83e3c3e532cfd7ea1ad1bb92e0ca899e2bf3f25a4f3d2d282288e147116a500b27d654cb02b4d65fc9d2efbedfcc521447c7e6d2d0f8747fb8e9d663f56f743841d7000bf10c9a71eb28aa0e0ff12f757cac52b580946d85423b83b4fdcfcbb92e9a8f3534785a4eeac3ff71487af7432c7f808aac430556ccc9b26ecab9b26846941606a1986a3095587823487fa890bed726c59bb86cca39b8b1971524e9a90cabe15a61ae508902ffda44adc1774837930129890da338c5a22c74724b221438844a374eecf193d76f9e3c7a78fae4311d5aeea2cb4bf99acc7514450773e73b507c56c4d87ca59b835a3787595d1ed04df190767fbce98fd51ebbd8d98c8da2bd301dce9cd7af4ca168d8faf653b660fec368f9c05509531075703e493b5a11e83c1abb62076acf50db1b3b7d4aadcefe035c11d3fcec3f421432bc84406c06a44e62eb79c069c204e734910ecc505876bdac98e44bd82a310290bdfb77f379f579edbc49fb823296eea20d176a546d7d60e185ce55e0d5cbe7fff4e4be6ecb8cae70b7c6cf1af460181363dde0d0c9cd646323004fe5597e16fa6b63b4065d9959a2668ec699155993a539387e77e4699febea0a33f74b34ba8ee4cf9e62573e76cce07f4b1c30d2b0758404ce75a05c33d281705306814d20603bc97beec56eb0d6df20b3ece63a786f9aeb88b9c7e6a9b01cdabde1d9ab976fc7e670308b2655735dd7e99546c7b2b22095e942570a19412b98c5c9f4e06283e3479e9e64eea63b0ffddab33f71a77797af6db4e0debc67ff442ae420be3b0d73eddeb37f321ae96a4f70e5c774f2e926ada6ca1a8c41813bb66ed859d154e5743981e477c8da447d90fbd9077593d68e2020b7fb5c9d4d9a15ea5e9ae7f740054707945aa45955938b7306a2d35ea32eb455804e1d391041f33275d9bec871db8e33baa896e95493bfb8e94c1fbc7b73ddecd56a512e20a394a338cf6a5095e320a172908db437c1c2ca7a76094aa481ec72e24cc144a5d7ce041f5d7e58d3205d2cf23584c23b64c1ae78b387795eded4b87d3625f2e85257ba98e8a9bace52b5d7eca9b441818e47a5091beeb80d572aec1df6a1ba7b57d9bf070d782138cf486ef9b0c58f5969a9acd8c405d134bf0f254ac2a1fef160b7d15d66f79d8d6c6d22dec25a07407dccca12eaaab49a0a341216d316ec9e641772b75c7c63d11dc3e7b985c8144fb3447db48ec91fe17f11c6963949e0870fa7533d0daae1a89bef2d6e65dd0b10baa573b0ff6e6bda18420a804b32fa47cc4988f729bc5a1010912a63e8c204eabeb50d1ba0853389270c4bf158c570363304d73ce291bb8787ea39ec4493b230f7918ab254e6392e6a4ab0487741dc4f06fef3d02d04c3bb008bf8ddf0bc1f8077b096f08c6ff61ff0ec23f2eca31f26c79c8fea07786e98f3b1052dec7da9c817cb0dd3bb8f01e8072bcc54f1f03b2cc89afceee339776e1705bff81fa12eb2dd719a50759e4d18388067e81d36d5bbbb594bcffc4969ae9018485c87bd6004c348b3b0f5f6cf763762a3c7bf11f027025e8375228077066902cbbee3f81d01bc33080c54ac05dc711ec55fe90ec0087808abf3811aa9131149e8cbf4077559353d8c4aecab31e73a7f73b4a98f2c26625b3f59d15627e2fdc50afda40f220011a1db214c619db2348be2c3d20c780ac29fd16ee8b46d45696e36d9d46a581250fde59896cfdddad073c5dfd5786b2de8360f753e696baa1f1b81a4286f7a7debea316e75c56270f3b06b464a17d328a17d3542646ede539fc213f641433aab41d13169f235c68455e8c2677ad0abf4bf965985daa6d04b995c2b1dd0b89c110c0ac6c189fb8900b6d251d2020e7ffde6d9cf0f4f9fb8efde07813ff4904f700fed9436299fbd097f6156f6d89dda893cfcc602ed5ac2b24114d529ea0976177b76443edbf50ec7615d7c2c6920a874f951444419c9c4a0aa96f462bd261cb60708068fe8698fe10fc2d51a230d18b0063ee1528d882d732de68fa5f0849293389bdc4e68eb3b3e26fd08dc6ff953501818e1ba1dd3462ae27ed7eec976282b5bc8e0115e0fe95076a095fb1c6eeda3487ce4dc71e6715f9cd8d9d06da6479b6df7c981d3566ce6c15ebe75f70e1b7478a89e1497a56112ed9fa062241f67d45f5383ff9376fb3788751af5b33a743e569d72eecee18252668b450d0647b97a706ca307fdb31f8e8318c2968f4520d885e28adb9f19d3ec861c7046ecbe87871b1c2d55a5f34c3b078830bd425daa1bada665b1d780f37ad6802ec111b69a56b078a1c2ce59cadc876bdda84f4579836ea2e8ce54a479ab320af1f5c703dd0c5b3e631e50c8d66f7976723b7f32521359558f5b8c96dc78938beadc1a5c68fa30d7b28e1a383af67b67a053c70caa099e0e2c2b216389e58359fd6b08dc3df1ea84484bbd7fa7fd96576bcfe15650b13c4a283d4b477431a367bd7a8e43371657d906579623290977c25509a8ba5e6bafe426f1c0f83d67d573a6ff2e4924ba84866d0a11bafb0aa0bfb80c308fc41ec8441c4c8b6ff61b742ef84145b0034ff8437235e08935784cc38e892f8ebac097e97edd8a01b1ad6ea5f0698781f83d152645539679932d70fdb5dd87a526b1c76332cc14400831b64225b948bd1867e37391d860a576d55026aab6bb6da3a47a1494efccf7aea5d47cea43d97c78929901d975368548cb6cf249cdd3ead35927ea16627e996f2d3536f7d1ebd0420f13109d1c80af5d025b2465ab560ed4829241524cb77bb38b7baadfd9fdef5c48ee7edb153b4258a64dcd963c0fe46ce77ee417c5ee02bff5f5f1ed021063df00f2ceb3ffc51322b21184930dc68ea6c589fd634cf59d882ac69c7ffc0a50005ccca9ef85fd5a9e57a06bb00f9cb72b1f499c0acc31dbae2159834f16d4f1de489b8fc2324de7d74dec3b7c79de3235f8969ef8bf05de222d0273b7f78b7ec77c4ff4e5bf83818b6998599af10ec1d50b1dbba983c1c6d95eeae45f9739ffbaccf6b0eb8865f79d9d40fdae74f33a5bc1c18a7241b0bb6cb78a3af182091becfda2ac5bce9c4cf2f0de93663508ef4d89534e8d7c8c1048bd1ed534b02e918bb2eeab7bb63903749b6c0911964c347f819b44b79225c8ae6ba314dd01e5a1a73de886b91933da9d8627a21991f8dac7bddcd45aaacb7600a323efef72adc35d926845e9760c0ece20e68e1e80f7b2a266156e44b9b7fa110ba88f5784606e784f4d2e5a0927d313d7690bdb1f3696f975122c8503a5f7a1a7be0730759e9615d0615d0040abdf69b910b02bce755b97ade13098e4eac03dd0c5b43d33bbd79e596d80de62d76197274162ee8af58cc72203710ff225e7848bb17b8fb85cbd4d52520c6ad4cafb6fa54f080a64db5724ba89b4e4f3509337f90495fce293b2ee806c7bdd91b89c72951b0667f5dfca2afbb52c9a34ef39a7503a8e576f28292c1dcab53d95ed737ebe4fcada153ff62934448e735005facf6db93a2bdae52c822c05628500a63ddfa04b2ab51df7192274c2b3da6d143763bc38324edfe3ddeaab7d2ce09a758ff7c627c39ac508f1921142bc9eb388cad94fc247d572aa31507a95cd9191e5a55788a01087f12c081870a1379eaabe999df397e7131133de4dbb5b9de34257cc2a25b098d35d4ef39d6eb652c8e7fa9fb6f86f37934536f944768de24ad78d95777b3c40ac0fceda574b5d373406a1986a6ebea28e7742f704c049c1258d55c0fa404c79eeafbb11e98b710e2095bbf417ef58c1f3508fe16e6462b9feaa0337031877deaa7edc2e20f337b7761a96d3d95432b8c1740194568c1ecea45e878d346146b31c1254f3c14187c0e99a86395ddccf3101397df9a3c0a1bf6d81437febc0a1e12e1a0785fef64878263abbd6246df45559adc7e4b1687fc3fe83bee36391531c5f9457699535b37936716ffd2328c281aac79154e5cc65da379e7b503e7df5e6c5c35387bf6c950e63b5f7e2c50bf53851fffce73fff99a8d9783e1fd7b542bf6c09d3bc472f076fdfbeb505c277fe43c45386e7f621a223efcd1eee799463ac7e8fe115efe5f91e471d8612a6757b124378efddff39ff3fea80bd4250e03d7860fb1ef17f1c589f66abfe41efe50066459d20a7de67a67b58648f1ca77ffcfb4fe043ebc260d055b933e530315f6cc42037b72f0f81e28529a93c928855527520c5b4555856df87bd08aa6a1bc9ee106a495660ac8563510ce785d3ec47f563083996d53fa7793685fd059fa0dc70d93317ed968c7c69fdd5a5962a608f1516b10d201f5acd08efdd171764306d514ce7e5b268ac157e03dd743aed89c2be03a292697679c96a09b121a235ccd3559f2299e9415658cf00419c1c115abdc050f2303edcde0059378efcbcf2f6061b26debe9ac11ee823035c047ad0f770c8e133eb34b18959e00d11edcdc6b140278a4d840327e650f8794d384e202b5c44fd7a29eedb62fc881b5bafefe28d18c8133ac35febaa3682dffdc15f6cd88bfa5f4d39f5591b1b57e69b0db717bcf4746952225c71fdffa2c6d643bc9072f77b7359dd43e97b2fa1a8b07c7995153eace232cb73cd5df41755b948afa02d4db50c7df4fbee8899a70b738f61474c2a5541687c17e2a30da1c4579081824b2ce48d4a6f438fd4b966ce85e6aa8b35bed04dda1309b2c0e6810e8a2030352940be767830865f127aeab1ea591a77ef0211ab4b19bc9fccb27c5ae9a28f1e945c6f4b31c344c52a1444e24f1acb3bce82637643c5b502e6db4465919c9099fac1d671f72e55f22e3b1fbcbfcef44d3f80000d5c65285a6df308b99836370cf609eba5194257f0c4fd3958f1ad1d8bae3b8aae59d1a8b1e96155a5eb9e2d1f49f3b9895dae90fd9e5bf5bf7448a59260bb42467d35562ba72453273810d0fd154becb21e9bee87a54ccfd749ab314ef0b5722f6e22862d6699bc1b9ee3e6fd3ff6fa02ff67524ef5d32ccf7b4ca10df94d5924f0bc9cc28d45e783f7f8b7cf5c8ba1da395c68cc2bbf28e16e9756579aa30c60d1a80a92a8dcb98374cc367b05316d3ef5cc9708218c9bfbfc59b92731e8340fc512a36136aaf08b3d0476d8e31f6177ac1af3695e1ac921cbf3448d861ec4cda1dd61f1be03eac22b947d0a15d3df4c7e13a375b0677be61eed0b1724db20dc19f719c35b5a552a7a6c0b7ffe4ca52179a6fff5e0584c8028132376765f31bdaa6fb26632c30e11adc3437968e225a8d62ec2782c870064021c012cd6948bb08c2ea6bcc4afba2ac3227c246d1c0d80e6d3f2ce74ed0950e1b17f82ad600f4c95b20a37e90f0f5556a07729cc2e0ca183030e4fd571f7b49451fbe4398117b61f691f925b2e5f9bb4db762d518ced11c5f051742587e7ab5fcaccea80b0d54e15c016b95b0030f4dbb01537844a2d8b26cbd5f537a80b06b4cc426300140da23f1c285811f0e52c5df0fb026e60343c248d87bf28017a5a4cf1f7ffd555d9775e4a7539d74aaf1a5d1569ae48e441c8649ac445539546f0a95b509e59a37a7a703580cadfce8d5408a203c880e1c64373cb8be096c9b807f2a64a28f513123571dda871fb0364b1bfa6f93acdf4dd582364938f56d7940b59d769b9082b626f216d6fdce014abd7140fa939891a72150b7b8723d12ed36ba31d61e1966d8c3d17e786ff6610b1a8d19b757718576b570cb6e308382a1d061ca2dcad2ed74ba97d3bda2863b0cf4f6c4709685d4819a21c4993583c26f3042832b49ca39bd7a3ac9a2cf34ddb57d7bee436986d18734e62c6d71bb3f1efbac331c4138f8d93a8096580cc1214c5d88e77279e2723dcea2c6e513485bb5b6490c5dafe4d6e9d080ab4e53b48d4ea68e0a188e9c9d91a8967df1e26d8559c5121548b752be0ce04c00280c7917b9910c560afb193e8645b23b2a44ded845004009a88f960ca35ef92ce728d85e5964b9f3d98d07c644b0c85ea89b99220af06aba3e0dddabf5b07efac51ceb58627abefab03c5f2d44bd507ed20189807170637515a9b47746ddd7e4df9b39e66ede6e10827f39635dd6afe4601a6d52b72033a853e53a9dadd489c528177d386225061ee94b065a59b9b7903e164e147ad0bcb9db0eab6cc478b9b327240b577dcc5e4ee5d5b9bc34e4581d84cf28391386fee74084eed2ad961e24f4162832924d2b705978ccde23c3bf7487fb15b336c27614243f38fc4b58e68864c0b9a12cc74d069bd0045517b9a6fdac9d70bc8a44b1a97bdd80514aadcb6616f1a155b899540f722fd2225d73b53f6bc73ee67f5e32abd01876bae3bb0790b60a3bd7b57ddc13da7fe942dda40be557af3b0d2696fd2ac2031d2b51ed27f4789d9bf87f0bf2309903c3165d789aa82a30c31a65879911ad8cbede02f0e11ff00d696563ac53a55af28ab799ac386cd527b63c3de0dcf07ae95e6c73a387646eed819ca43c74b4d93b4b84e6b9b059cf59af21df99fe72d5910d9622ac6fd3b2ec4e199e08a4eecb980e7817f6ecf84ca7941fcab6a7af0d7a2bc6195add40170fc7e5fedabc8fbb579bf36efdddab10c3143e1d0aacda97c70c0f55586c36935e9b9f1b443ff2ea33efa070881470f41f111d3c90703fdb1cc0a9753e6a664235ddb11b62381d5d806fb81e6cfd60cf4d5cda1720188635a4c23ebf62fa6c7466e6c9f22862b013f38275a37f169090a3220802ad3841676a2ae337d93a809662bcf4b97bc1a1d69962021095dae972c31478a2130307fff942ebc548b73578aa2d860f90cd62ac7f604d6f0073e43289da4c3442d46899a0e13351d619b5fd96428762c8314fdf11465d0bd4ea46fd2d467ea7f5241921a878e21d6010e74cff6f5080112cd866f5a4a8d06ed3415991a0a7cc77441e8d351f066247d0e00b20f1265d92e07b7dcbb77d594e32ff2822a63f9a5ce1ace03b51f70313c4fa7e02a38e528a0347038ce2405b2687a1a461c727a3d8ad85e818ce912dfaa691f37934aa22bec7a461cf96fa89d625ad19e134c51f6741484d8b7a2f19129013c40172f44883f7c398a7dd96293f8f24bfbfe7a2b76d0c298e465adfdc268654b9f3855b57dd313508ba84a7a8f46336bfa0297017ce4f0ed2e1b5d91a5a9fe7b081b0597dc10fb57ee393be075f88f9c88cbf311d967ac1c4998a177fa5c3729dc8a759e281f0e2c4f30ba49d2a621bdd2375ae6fc7092d794ef917be3ae02c22484b345e7668178bd28fce0ce0a3ad700133430371531b31c5931db482c1e775a04fb2239bf19d871cbd0628d2ca2281024bae285cec74ae76c5a1ff179cdb838f8939b5a222edbf6855cfff9952d8afbb261b0dad72e19f07a27b00a42c7caa2c90a06dcc19acde4771f0dd2ba06f22b60d0a701b33976dc8dc32ff08431e523370ca1eab2c64fc0ecb20bd29c30e1720cdc1c1d7e104e92f757ba790b36079a256c8a7b0f7358c0cdca7d3569565dcb0ce58e501a71db8f1c4edb9c76da939624494bd17e61e4479a52c1b2ba0325018ad6ccbbf65d71f3a8fbb5ecc2e4cccad2376466643201e95a6a7a638de7c2760e18c10b0a2d6b521a60f712f86285adc0b068e86c72377e24784ade8b58d9ddbbc8716f4b6f07dd4704d2499e2dd8c183436dfed73ce4a7d7ce82a7e10b089f471baa5d16bce26848b98451bcd2cd9b26ff1bd0f9d348b89e574d3ec0d70f5d141fc48695e522286a1ed1dbc0f55b7ab3cb9747bb79a3e4fa0a60cb89dde4862b72fb3318e3a65c58dcd034cfaecc23d4ebd9a797cbdcfa4f330a740761c0a1cd597303dead63481c9130a7e334408385f8754cda8165cae2512e0351b491334c3f9e357a2e7ce6bcc78b2f30e0913847bcec24b3b12bdcf5453abf64dd9e2f54faf050bdd59a99b85a279cd9653d8e2d1d3cb36c3ad5855d7ff697775eb833c942442f14ffa9e8383cbb11947b964d556a0398d460305095ae7431a5ecf5d051b7ca330201f46e666e64cae26fe5b5ae84f5a32c9eebf45afb67f0d482c6b861b828573427be1dba5379914ecda5d58c7fc25aec931151205f3d2b6f0a9bd202079115071f4738d974d564ba564d49b12e6356aad1ab468df13f90e51e26392be025d0316ac5ca4bd8199680ed53ae58d1baa9ca4f1a0a8fe9c786d26e6cb24b4493c41e409a52044bac11d8980a9ae7ec7373f37e942ed4584dd285aaa185e65032cf83628fd37a167944b7af71f0eaff576645eb21c667b8a7165ba51574298febb336e45f44743e9285bd510acb5aa199d8e36deafe9365ad41cb6e6f0aee1317a52f9f0cc407471c6cceead703c9428a14e608ec79b752dda4c1a509ad5b6be7e336602bded034af7ab2d5276aa8c64c53762421f0da3648f3cf4c5b8fcdf40eaaa2a58f61b4b2b89bcb636c5d785c07c571e28dd59d0e61dc57d70fbea4c9e9aa29aba9ae1ea50ba83c52d64c4759d83ce92868e35ac3e2f83cf29199d1b2b879d2d516da8f78717814140d163beb6684930b37ceb6ac7f1214ad28bec916b4bf13391fd0b543e7e50de63e682adcc95976e6f2ea2ab77a453b4524097eda8d951f4e5e8aafb52f89f2c0cb67a178432dc4756a63bf378af27906a944a6e504c064077863788277c6dede32dfe3d2fb4ebb8850cb19fae658f77fbd5da43ed2db3c1cd4ba796861687b7b933cadeb3d2b3842def3bd03ecd1de56d850760de0aabb6c7f9f2ba7a82546ee30f51b91b3983e328277af8b1179b6d767fa2bd617a202b2cb2e94ea455a74d11a44f704d637736189790e9e59dd112b2723e378559bda79aa57cdcb72aa23a4ba619a6ca4bce166b96c74f5b7d317cf9db69962952859160adc8ae5a4369238a5a25a513ca083296cfeffecbd097b1b379230fc57604dd6246daa29c9392672188d0f25d13bbe3e5b99ccaea8919a6c50eca8d9cd349a92b996fefbf7a0aa0014d0cd43b627d9995d679e111b47e12a140a853a30a430a3d2c65d21288ac7653c151fd029fc2d3225c5ac52629b59189ad3acf0b914561f9d32dd0a63a0e955d78960e38555cc2960ea607f4dd842582e3d8cb894713d3a61f594982d34477c3dabc0bb08197c7acf62b6807f528234d46619de4d7ceffa7e6036087def33becfab1446313b7af9e6f5dbe327af8e29ba236c440aeb027eb967f361968eb28588954037f82f602ebbcb6c068c03c67b34139a326015e3b89e8453dc75fd32e7f523b0485b696ee96e5b046f0ab6b650ef31bbc43c33a1e92769a5574b2a0c69138f2696176fa7b9fd0d878af3188918f453aa5793890b113a4ce6a00a0c1928a567619c4d34bf2e13a243dee5a0d7134f4af025a6fb50cc2f26f9bc024532713d49471308c01d8b241d833bef8a5c7c2f66ce8d98a9f55257ea733d4c6711723c914a520c4ff4860ee3447f99593a96a3c5289391f8b9d2ab09ecfb44e6625c6459716d427e3fc91782a95be34383f1449ae613598226c270016e8b8981d45d558d1046712e86a89b08314b8de74e578f0bac8ce418afe5708ad762104c63c476f0c2f513dc6abb2604de726432eb802d88176636c4b6785316c378982dc8d1db758cd14ff4259afa6d62925cebb1e35eb2037cecd0888fa1ede1e793a12aca21456b5295d49d03037a10e45a006668e80bef1766508f99385accc5df3c1b8300f6cd5cf0f69fa753992be6d5d074f69dac5c5e9bb94453cb3240d2df5ccd869f0f1a790a5eda989f70ca6c4e86066a554c033f9888ed16fa0f69c5ab8ffd4f80c68bf47a7e5e6db99c8786699a6b82ebb659c56a7024cd09acc5636f7e3c74567ece663e5c41c48127ea3c1f15b9aaca18f665624099200d78c219fe166b93f9b2af88c9d8087042a9a9a2913c1960a3381bcdb3183d2c7a2061faae9d4b88005b89a88e2bef096e2aa3d2e0aff4dc45840f6ece18db4077d8fe899dae8a59d8295249ee3b1bf0f09dc1358652148b41f4fdc21faacb38f65a73e96f6970f51ca33ccdeca76ceb848f6ecbe3377fefb9c68b9693f14c48ec47f16b6e43645e8aa9359c665bd2c3e8214fdfdc27b1655f7c370a245ee01209541330e244e509618decd2b15f912f47e98a13e3a110bc0e301336bb395cdd719a81db71f6eccddb655f54d4492c525f16dac0f6518d142e4f9edb44c687373a1862f353772bc93bb5d4b9a465721a8612a2c49285ae21c40f69e521c238adee182a68a9e73c8e1cba9cefa298f9d730f9f46997d5bd4ca1c31a2f23432f99f0eeec50c9ccf019da4a1579e510835f99c7ce358c0514293a27fc0d6bb951577b9256436232d7309ee411f09d7583c18f23ba9433928e65eadaf616897896ef64f91d38c168a0e68264b5c0eae9d3070a85352da9366b72207677c4be256e35ea1eb4b8a45a4303de5950eb1c16ab93eea35c5f8415463453c0cbba59b947ad7b4f8a6e32ea93e33a13f6ce759ca9a4d9ab35e85720ce31b4015f069b2c13e7ad5cd22fe6ae0a379d2ccd41384ecc35e05944d5c47519cf4491578598ceb32a9d6512ca2b1ed9d304079fc6f902fc71a695be64174efa8d122612e81924e6dfdc473768b616559cfde44d11e5ea09a9e4fb0a63b4f7454b330cadc761f6d3584918585fb4a6699264b2c580b00b623c9ab47d32d7654e856c6a68388b46c096ef5e77a50fa4e406312c8487a26d09440f35276bfeb2dcd3981e20f39c65410322b8e8a96e864fdc4feee65c3ca49e3c147be2013b7388ab10dffba81c88d6f9223dec3b0af7b00ee931afb7a65fed941cdee86dbddb390d14b26ef988358b5b1525ba3e472249438af384b6366cdd48fc007eb72ddf470eb7297217b8c4394fcaf8fadc0137441783a97843d748c7f9259c8e5998447cd5754d686df82b33676c78de8a6eb0847dbb86cb67fd96bf610414e8619fef365b2e24bff0b0fd86f0a2bfa22d54cfcae6d39ceff620e5e4b4a13cf6c0abe0924e1a0884d97d6b3a332f4b9957cf0a5b7e67497e23c1f9a3698566fc7ef9e7d00b7dca8d817457719675c545a1c9370648d4b31f5296efd119646dc21ef2bdaf29894594ef83f3ae8982d088fab5855a4747384ea1c25700a103a7fdac945769315734289f1b717008d5424098ec076b5a85517efe4ff553be4ec17e9418c426e858bd151b7a26c8ea3a24e11dadaf9347a4cd228528f12f4050ed70ef4254eb947025fa71adaa7568e617dd10937c2ed19061de36bf8735f2964e0eb084bf0c2f69c1e50b25afef26712913f11225c03a9173932b3c7881128ed5a4358880a15a8a199848ae2842be104271f49351358fb36c01b63e5cea4bef36a8e63520cde6dfefea881a59cf9de3bb266d3a7ed5647a759aea7bd56b5a778c49a632f53a56835797aa49397e62d71d4f1eb5c9015b83c61cb7861e5a9733f2de8de41ebf61d78ceb420cd7804ba38587872453ca6b03acb2caba8244845d76b525e6f4f1f23b3cbb839bf50895f4b838c714eb2e59b51f4c814e8841ff1cf180635414d3d1ecf5c433d80b42c96a3e73f7457e3db273ea52db786532adafb93155ceecc91e76d1572c87695f88be9b62bc681725c465bb94d5a42ce6171321c76339aad8dd965915f87549fd2d8508b0a51c55a4bdb5f9bdf8e3f8ae75e2163eff44dced21c8767f195fe313e7d342e3a2a552efbb62b1441112eff1afe2576dd36b103bda217cd7173b0db242ef35de5df28de85fef055042c187757e5156f1157fc208b677e326714ca52dd7e5548babe974bc5b395fe955706db9ae47427d6046e56e7d179fc5b3a60e1a0da83a58a68fb71e3a53766a68c4e5d69b01ddbef50de8624da0adda541db2bd1599df5e097fbbae6a9e956c580a86b30056562f683e3c14d5578c43f12d708fbb3b2229445e54d6ab0dd09b84e944521f1db0f6262bb06cee034d15d66577dc7b7a149e8a45388eb7d23c1249f11e06b4808da5b73ad46a3bcf3a6905ea127254d9771f82626a62246ef25b518cc538bd989752b4d35c55324e4093a498094daa3bfe85b08c9374aef86df001de0cdefd7f6f8ff7980b067b6e40237ff74e83f76fb2b9d2c4c802d1d7c8c68aff29fa62c1ef78d4021fd573cdab39453a115b1d5ab5980e0b66d353d3d777d30706006c7999621e0dda3827f9bbf9f19f5e853270f3de6493673a0bca394b7b6908d65b39aada6ed6f46afc50942faa924f5d0748baf96abec903d2d9cd79af1f9272be393f5ba3b70dd8af9b29a5d2773cf7dee31d997adcc7f27db5ead4ea829af62f8150108ece381b3337f821d2d872efe9f573154a3ef4a075bcfa8b97c0a3106ef27281b0d80c27148874b10b5d0329a46aac386adf86f4e09dc7d880c9b89eb5744c6ae23e3605b6c65533cdde0bf2c89f40434f0300c745bb369358c92dd452008876edba5e9f8717604ba22f20f674b4e861150aba629815a34ba6c6a6ff332ef2808b07309e1bf4c0f91ce76d5648806a3eea582da7e0b0ed3a646b1a17759acb44325203d06e84d02491ea78985d9bb85e4fb8abb49bcb4d9ee056bfece065c017a380e6306a503c0c97abcdee755dfe34b073daf1dd6491ba43c35859390dc0aa0730c75901bd5ddbcb556df0be348fc6e8717977d96044cb7a6a56c8b7f6325ed035c5780e2158d0ae2082c30910b8e2591d6f8ba4959cda7bf806ef219f2a5b0649b8d9dfa27f0719b0adbec953946dc2a7e068b9af0aee4bca38b3a58c0523aa8e3e2989e0da8d77787785f95949d176b8522b0dac54dbe208cb27693383c5f82aab51a4ab3b4d1ec3bb59611b65f3076200358d1762125f49319412ec53f20bebe79ae9d75cc7caaa15b960a52bb67420667fcf9ee71a9fe6564c8cc759f0f5100ffb0c4b43a9b52ea2f7cbc3875e0e5f697325be138d61a04f9b1914e7ebc18e5f9feb6c437d2f562cb4475ffcdebec70a5c8aebf567cd33c3b259f126b5ff7184aa795a6efdfb7829e32ce0dddb9e25a3276a6843f150c6c09fb39c0cdee8da35b29a048717bff62ff53c0bf5e316fef6fd2125158b1844ba38cd26dfb2654d1de65c4bc0962ddd3b76c9377b11ad5d0cd6ec1073b2bbfef80707f1d4773a37ee10b1cb4ecd13ae2da5d9f2b562ef1456f169a12f57134f440bf1ddcc6e068af35ddf5147d882df5bd4864fcc4782e9ab99bc93b07daf8d3ac87c34016f47a85bc20c9fb86ad3a0ca26cb646c8825a187c649d4e4a491d011456dd9847c35786415c68a65fcf1f2b487e60b11c8cc0025f2596049b652e31367af278ecd64c4b9f1c2c14b38cd6176f8737713cdfe5df241933fb71a42fd0436d9d0f415355c43336b007374a8cbdc6251b12d8e27927e5705b3ee26c4c404a8c2cdbc3fe91d86bccdc9087ff4fba2352de64ace672d71205aa32c1d5db6c43e15e0225b6747e1e17800475fa85aa10b21d89e643a0d1ee82801eca6d7495cfdd3cb35875d5dd214d8c66f0e79cde349af877638b4567156ca385980794829b3b84aafa47ba74d736194e17ddb1313328b919ab68cde7785748eccc2396d1c24078b06bfcd43eef5c093b48c72ec228f3aa2ea1ed4f13f0e0df478c1b8c7c0e8723ca8df6783d924efa976a9756f79e7eff5715638cc905d5b956f7b0bd09b7a1bd66edaf34d764201b6877c031b9845ea659dfc945500e0775e8581670f18b8c17c2589997992274faa4a5f8bc80f145247783873cee732634696cb6bb2296b1bc786faa6693dcc1867084871f61934cae15e89a087d6215651cab32c5e14f34a456845362fa5df2baf778f6bb5e2047833af0a1583fed951e08f06575ab68473a545b6b0358abfcccb3c5e50f6a2dde8ab2e7f574f150f0d072665d868574ce34b925f8b079ea99f2886aac8642523715c88f8aa00ff15c3524205ba13813b7bf91e24fdba3daa1a2b31d3c4aa1813609d675a44c336cd35187d92526e1bc343f22f8173f6ab12e3349326e4d0a4aa666abfd7bb48abc97c188d8a690fcafdaa7acfa87c6f36cfb2deded75feeac60b6e880dea7de7a8e918e724f57bdc18ada22c1129f091e19ad2134a0e1e6bbe031df4fdd2683b84fed6a156c328eadeb87e218e4a92c2fe4d198155b12fb946d8d9a283670baf4319b92784e488d9c770b576cd5fde0ce0bd3c41fd486e20d0463612d211503105dea4d575b87100b40d72764cc08a46c408386a55d36f534798cf76b07bec4b86f255035da6b7294b489dba32aad3259f77ac4fd1381a80abd39b4864596ac7671547767d3ec36099d79b45a8113a4bd9d9d1d61fef57a62b8b051362f003b4aa1996233a9eddd9d9d9d0ebdf4c5c3e24a0e1a2de17f1f83eb633d992becadff45adad3fab2573b345f1deff5914ff9f45f1ff108be21536c57b1bdb14effd9f4df1ffd914ff4bd81437e374ddd474af6e53ccd297d8a73603772ad27b9fdb3eb5c92e534f193759def065d868ea3dc3d0bb9a61f1741f5669e0fe132c15e187ed8fc7ef9918955606de11074e206e6c99f6add3713314d26043800f56abd46a701d7847b11629057f2c7bc03496568cde9bfb034e4dc82f21532358395301203ba4fd1a0d6956cedffb14e57c901a14ca38c90c95ef1f7ba70b14e40afb366163f57ce0d25149e2d375f497686e37eeaab588be5cd55c5f1be8eebb1eb1822de73df0c3e3924be55d365a32ac4e4fec05a8c92a982382ed34b4749bd9f745ef4e3eaedc5b2ccbe067c8d085c8a336dc515606fd75ec2c2ce8dfe9ef7fda990e957897f9b4c59dce94e857b91d66aaf47752fab6731fe87c37e8dbac633a70b820068027a0761b67691b952f513152776e9a2618a4861eb43c7b2d9c2c8dd0f02454f02809838a31d41cf812a6c3f60831c5b39a01dd7d71603a4b58b66fc1060d07dd6ab7093db67542c757fa649de4a51cd577086ae27d3d203973731fb777a2afc4bed889beaa7996f0d5cf8d194219e72ad35cb08f82bc0c7442b64355cf9a5938793c0eb25799851b651a33effa379384d44f3438cc026d9c85774ec2f3259ceaee09939d7af5474c4f61519784182e3bf03c6e96a7e369213ce40466dd83470d3cc0dea9c3f6d6c957175d25b90719c3537d12d4c463b09281f0be2291442eaf513cb199e8de82fa34c93d80e11d5b27b787925c6c5fd9e1ea0da63f1a24f766904e700f299f20b747887713dba3f4e763a4f658f35f44680f9dbd9bccdeae7f4d0e6e56d4d1801089075c2ebc11f27f92cc7e83aef292063343645d3ba4bae0de6db9e6d3dc6d0d026141438b7710ddbb4a0dd3664f3428c024f8b6e42602fcbb2c54e31b7fd3b856cbf159956659bebf3a8db274139f992e8c46551fcc25bd803b946945fbde1322651aaac489d4e3414e6d4416b0856872ea4f9526c78074dbc608b8ff92c753a966f148223522a9b47d04602eb909f5387b89a04ca47fcde5c7d50814ee9534a5449a57858867b3b2989529d89f534e8ffe460f80f28052278a4fe7795a894aaa4adda37e505192c1855d3b8b310684b5fd35df8feb659fe4e9d4f04a58d6243414b679ef6479958e64ad4e530b3c36779f47ea6e284bcec29fd9146bbd1c6634544e96583c371425dfc6c12343434163c90cb14ef06743a923cdc1c5233e8da94b6aa840dbcf14a6cf8682b32cd6bcd9143600fe6c2c65361ce4d06743c177148916d24d5ce7b010a4072bccd31aaa1ca7a34bdb3c04436e2a54145995ce6c31fc349be62db108107fb0da4e730c9bab56ec3dd445c7624c071d12baa0a045646fd50823c39bc0dc1c2f6612b486282c3dfd892c3241f4b08ee9f48b224e304644d879bb05dbb1122a4d241914ab0e9213aaacb9195b87d60d3856c38f5f0a9741a3d194dd90b249ac5e5fe76f3060c5a27de9b8fc253862876b409c5cba789cb74d936df02e72cf6e447720624139320b3ae29bd3685f1563719de649710d3a4a2d1babc0a8626166845a614d806e69b69e1fbe797bf8ecc9f1d1eb57ef38c97e5316576942feeb9b5f19bb60ca195fc569160f81b22ea645291b297e64e9bef84b2267a51c018d46d6f64a96f070b017fd39dac13240eaf1141571654b3c2277ddd69db23e46c2995d3ee87fdef05e3067e22bc6b71b7df5e9e37be19febe6488e18bdfde70d1478a7df679cc71e8b42fcc5278c72aecc200c61279b90e69162212267bfcf88bd26eb181cb913e88e432707dc10c2b82ca634c23700eee269acf9a85889bc00884851bbd66246a5d359b6a04b7ecfd264338957a9be78c6692efe5f7c15bf1b95e9ac12e8895f45386a38b5c76e6ab161ddeeda79fdea735004d75ec3a41e06aa108172c61d51cb9ca1280137731835a3181642db0bb5762abefe1c53e135d9301b7eff3f65260c33b67a0ab0d4a6bbec9be8d1a74f81d764c31438b6f17390d125e37e91e63246e668a37df0e7cf706ef84d8a3e32616719a40f63253f86b0208db896424d8a79961099103108f5dca93f5c0825abca06d75ecca4950c810840b4cf6d8d769a74c5075d665fb43ec005795b7fddb66ecf3bd1e7e1221a26c8e37f351775823c5feb696c43e7b59ece874392dee9cfe71460c126e859b61f6f8a2c2e9f9432b6296fe384017b378aab4a962dfd798aafcd86ddbecc62a596b19d27907bca4db031c8e2f8a2f6fc45fefcbcfa547ac9f841e8d31e8d2fd09f76970b517051a079f044fda46aef74a2aa78515ccbf259ac64bb231e52becad2916cef5a2bccdb8ee77040b3c6486ba9a3aa1cc1e76d070a6e75b7d2298821cf90362b3cbc065b7f19c64399f5ca795ea553696ef83da9a63d2a39d8d2cc32d5c6c3e897b49a14f3ea8d8d42f7a22894dc00e4aaeabc1d50db7ba5f73902c50846b0f15baed45b198f2a2a50eadf2cef83269f4f8ba2525519cfde94729cbe17b75438ea1d4fe454d2b684970de6664cf74ba194598819c4e20535491420e9824fe3e4426f7ae840342e4abd9fdfcab1f5452eda67a51c774529c71d8403cf898afad1173a3b32df5d5d40ffbb8acb34864b3fe4d3a7cd9e61c05bc8d3bf6d869d2e936b136c119dfc45ac4c8158d99c67c57456e4d2360ba5fa7d0122ed1d712030bc92d837b9ae3f34512bb18266e264b065863bd8ea8ac1160d0e3ff468f097ed397ec66ab085b73f9ac39999c1faf2b6ed7c8ad650af10f8e512141e9116cb8f1c65c7deb51ba3fd018757caf1befe3ffd758bb184555750a6ede53e43d5b69b75ea661797ecfe7dd3ed8762b0b56d066b563bc81e6c898726af03ad77ec951e10cfbcced382b720b1e5727d2ce69f8f0739bd46185d5ba8f278abab97c3d186be780d2b1ac54aa5171037d761760581963be283f09ee476f1492e2e2fe6e459cf840c834061b0783610b42d75929e3e76702ee5429f64361c348888a92bb3b2a80a4d320389029acc6095ae86d0d115b193279772716ae34ec3d763710bff19b78b50eeb1b8f55fe1966174bb18fe0a8d283324048082643e2169ae197733065d0383d0bd1eb7d30ec451ee081bed18cadcdb68a0d081b4c32bd358c1116831fc15a6b43e407f7c80aacfe22c7b3691a3cbb6896dde15cf400f713eaa8ad274fe9ecde631d0794198f149595ce3f3e362260fcbb228db83ad6771ae5939dd7511933636bcaf99ae0cb63ab0247ef7668582608cac91b7309eb692d9b80bf06cf77492df83b712a2388d6c3740bd7712abbc55a1a7012329523211db42cd67b26c77bc12ba099950f74cfccc1877b3911bc1b7a695832d4498c11638eaace5b2d18a03ccd817badfb585a1eba56aabf9f0999eae2ef6ee19f1308289ad5c0688ae7833ba9741763ec7396b5ea877bab090ef67a554c0d94de7aa1232ad26b214438931798b92ad1c32e940ad6afd814933237018ed080b92e136eba2d76157a52b3e8891c3827dd876d95cee0b3741329f4f651943847d34688067094c00930561dec65c9a46ba0eee3c3ec1d43f25f5aec72ebc1e8b83e6f4258be4fa169d9dc148cece3415b24568d5376063f4e6d7cb64f8207d0c01ffcef92094d211a3446fbd2c3b5587bfcde38c0a644512ab498f1259b14bb978baf00b4152cb4a525fbd7e7e7876f8ea6fa26f567c56162349f8c524a778a4415624f3abe03332702c601800e743181f05b3f385cd2476caed13bf6e57d42a10f36041fa15da1d73a6873451d38c6e50da00435ee40cc84a7f15b94220619f909443d0510711a09131d06b34caf566020c926d6fb1079630f7a93a2cff11a55ad0acbb5f58a60dca235b634ae97f2ed8f7930a6c924c59ac19d5f2c3dac45b2dadede72fa9add655574df58bdce49ae9e395835c7c61cf978dfafefd7aa23d08ebb340cbd345bb71643c9b270401fb891ee0206b2d60d50859ad00add6c00ee7f1fefd30e92e5045afb7442107dbbb0db64029c73ee2237886fa584eda275227c76e82e7ed097d733074eab1e1f4e1703f23f55981c459045b9ff1652393f63c4d5e9292b653e00a331d85a1d1e5892c513683336efabb517b64ebb4a44163f8625a0466c1eef3a89449195fb38984bc44aaaa2c16bc4b2b7aeb66cc4cb7996da880a65d771a1e4abb6c4e7d848d05dab97c8fb71a3b1e207286be3592379c0020d96c425801e252281b181097e97464289f125811f7ce4d45288115b15a1f542233c6d1a680557da702f8cd0a181d7bca67c128eca2dbc989cc90fb7d607bd8e29b1b423997e152a29226740358470b8d126f6ea8137eaef398b5510b30d93e04fb24be11807bc4c5b48d91b20344c6b61f01cb2c2a0346491b4203635df91e0e088388a08e3b2ecaa94ed44019fa3e6eec065453933829ae4d9dae05bb614f28cbc234c8c886661eeeef48897e49b3ece77cba94f8b1fc80fe35509bb5cdd6668fb7599fda598d2a24b814b85ff4c7e3100f8b3115ea8b9601dd0ab8ad1c23fff2c327208900a3adcb1962e974e76ae5dc6ab92930ee67a25f9548c0c155b610d379155768612b787478f33408a180d13ae76c2aab18c659ca120fd85e0fad5ba7f1a5544233fbc8ac8aaac0d39822941807ec719e007ee07ca022abb28064890679d7524ce5b448ff5bda6e41b3e27a9266522899437f62318e2fa1293bac7151e288d2228f08ae92722305d661560c7b686ddb53e5a8372a4a09ffc774b8a25fd59f5e7cbdfbd5f68baf77bf315471296ad1200cee288e59619e7faede63072b84900c17b9892e242b698283e88842031dd0a4df4a2b6fbb00b4eb5a3751e6f73d64811bb697104de31993582bc9592cc716f196c8fd3a16b8edd000c3cec657f2192213f1c8aa8d5c60659f90b813338db2302f70f744b37db8d19ab878f4992a41c4035c40e64ddb693d05d3773bd32d8f74f10c1ba9dfa322a97a2eaf44dfdd83e1da3b2b8b648ef4424f713db3f5d88198ab34bf7836575531fdab5c9807088f5d31ebc3f335ac604817b2020bcc27eaaf72c15a30b105d918ed829381e0f76820683119c775ff7ebdeefdfbe25e739703d2882cda2f7199b3d0e83e3a46e3a23c8c4713867294e5a11d8684c40c8c1ce3650bbf2976ea595a1ae0248274b53c70a322574526230962b0d609c85fb689ee6cef9d0a5d03dc5c1c72df0ab9948912b198e7e96f73292ee522124fad070b342d186ca193c62da08b9a1a8b22f75d34a44acc954c22f124ab64890e9fb245572c8a3978469de1648b580cb6ea5831d82253054d12aa495cd16e083ad6623bb6e1c459ba532e6415ec62be5deab98e3af29046fee5ebfefd8654525c07bc5f5fc2d133134678932b469d2479178c268ae5dd2a749ff6b8eb09c7cf3878feb709a06c608c6aed43f9a689a45a418da60d145e8af76cfb27f4bd8ca6b4130807692ec1b71bb262ec7ec767d0bbf6d566ee51387364876a2c0e1cedf34c521b4fcddaa1dc7468baf3d9c3a38e3b995d39c3dc07b7621f015d6703dd2440cc97f0cabfbc5ad70cb613f204bd9e7893ceec59a88029c3d3ceec199b25f37898813112d554329e6652296481c168507d0abef18b0b3b3a9a769c9d247e68062dfac2d220f3284fe47ba9afc120640eeb76571f880e74af277e012369a1e2b1cc16a294b32c1ef91c465c96f1a20b312a0acd942acdbe96b28a496dc671cd866906c001b98ebc81af254f7d6f2e03662b07e37def0835fc777fc954e1867eb47c4303ccd3e0dc33505dac49e70e5457c0affbf7f123e06361169e4a5116c3b902073a79812821deca4c5ec57905ec7c01af444803c454ea3b43aaa6f0d297e6c29ca678d5dc565529e3699a5f445e33c7e616018b85cf4f4329649252044458d6483c51cefe2d4e1225b25455329725ec9db46250cd80a1c76a062a347698c40c7518f7e0f2ea9416ac95bb629626013bc21b3999a5c9292dbc4be0fc09674b88401271b3753c89b6c0b97db346d30286d515272d0da075ca07d5eb09204f06bd53a922f1aaa8d291e62bae657c996b128271288fc6c2ed03348bd4ec7ae28103361d1b4c2b66a658a1f79ae122b84a5e4908161fcf66322e95bfeabf14e5655c1673f49d5815fa86810f7c806df4e86825b61a0f60a2b8ecbef9aa427de8b209648c50702bb720723454f6d9259f90254ba8a3276654d5aad5c20b1bae96aeda3a0dae50cbf9a3e0eab7ba74177ab212f6dcb94adae0f467e2607efa7b52e2ba34766f99383614a8ee3548540371e95e5d5eeac96cf742a16d2891ddf354bfc55ad1ce5afea3d3244ba25e37bc8b5a615c30c95c4f27f29d2e72699fef5892db0e8a9a2c3e7cf8704aa17ab84c62809a88dec4e921a300a11b34bd2fc245a209dd77e641e20e1c25170872a4f20585a6b39a619a5722d684c1f385aef00a04c124e47b7d26f8f6d2a0776b9daa90322df15105d605576e4618112b558cd0fcf13aad265c2e71212b2789882c98635d22ceb2e25a051d03af8573b2e08e733c2ef114c35a9a7f99680299772d3870e8f73e9ece32d9857aa28a874399889f8fc4b526d76c6c17ba19d4a9489067a9d22914b0e0aa7888c530829004ab30074193eab92221a38aa7d8fd4eb456aed34818495b02083971e809e30ad7d3b928a98b2f5691315a8ebbd1b13a096ba25e8f9651afe09de6d1ba879a4791095e6ff2d38465a609bbf5acd0596ca13d41abcbe58de37df35e37b6f08d93b0a05b41207dd3937d913aa24a4ec109a8a793d0b8b9a9bbfe7c3f1ee4b76d1c41a040b14a94e53dfd1a66cb88f95020f4d89872d7d79794654879178998d5a1898a5cbe1e8301e5094b045cedb262bafdd34e94aab7e4fb13e6a5f6e4bf1f5431a5fcf7fb35a5d4aa6266055d563e9f0e65099948f8bde1e1487466f05cdf08ddd2f3460896a8bb5ce0cc5f8fdb61f94e17d7081d54b9dc6151a08e329e2feec546af0029d4ea3fa8326bdf8ef4a72f6927131f67987d02b54f4ce5d3d3fa7b983eec50b9ad75945fc5599a10a50376e1bc251e8a008878285ae7104f334b813cea322d2cea750e0a3ab91a8ad360a0b4b71ad7ab7e630b5705d17a055f60f0da2c3d8dd97af325f7bc70263b67bce47dccf592ac4112666fe1706df7ab1d3e94473b3bdeea1a87c10c7d3edc2e1ddfaa8d6e36714d27b946456c094d948d95c84a2db1bd9a9a98a95657c6daab698899b2eb74c34c39c7019a8bc85d15c2f6a27836cb16946bb5a33b1dae8f629abbfb39a6c17e15cae056a9c5873a75b52b87af0e4f2710ebc418d4fe1bdf93a03335de5417d7ec319a2f045a6c741debfafcaa43607326351e4a66da961f470cbbdea47225623daa21d69b54d6d7f3510da7dea4721d3abd49e5a763d2a34d30e94d2a3f0e89bef90390686f29167dd388457b068df636c5a3592a57a3d09b546e843d2fd01dda72f4f9b2863eba4a7d15bface18f2eb70e8174994fc7a02f37c120ddd4c7a1d0b77f000a3d5a8a42df36a2d02383428f3645a12ccdd7e0909eb18d90e8695caec4a1af6a38f4342eebcbf8550d859ec6e53a0c7a1a979f8e405f6d82404fe3f2e3f06777f70f40a02f9722d0ee6e23067d6930e8cb4d31681897ab11e8695c6e843fce35e73a4cfaba86495eddfaca7e5dc329afc23aecf20a7f3a9e7dbd099e796d7e24c6d59e2f7f078cfb6a39c63d6ac4b8af0cc67db529c64df8d4acc63d6f1637c24230ce5e897ddfd4b00fead4d7f99b1ad641c175d806853e1dcbbed904cba0ad8fc4ae3f8231ff7a397635b3e65f1becfa7a53ec2ac13a7f2556c1ac6dc69617d91a6cfa739d31d775eaebf9e73a6bae0bae65ce75a14fc7a63f6fc49eebb63e129bfe080efd9be5d8d4cca27f63b0e99b8d5974ebfd6135a3ae8b6dc66581ef899528f56d9dd1824af555fdb6ce6b41c9b5ec1694fa74acfa76238e0b1afb48b4fa23b8f63f2f47ab66b6fdcf06adfebc31d3851e4856f35d506623a4221f242bb16a77a7865654adbeaebb3b35c4a2b2eb308b8a7d3a6aedee6c825bd4dcc721d7de1fc1d17fbb14b9f69a39fa6f0d727dbb297229eb91660576d1cc6d845ecc7d284ac499ff502af6818c816f1fff1bbb7ce9a2779767450e3ee66f97d84e5fa3ea2ee5d217cbff41ca041e858d531893c0cb14e5d4b4638bb9b44f743863209545f64ff02663f42274a6f7b6af30240c64e8dfec15d024b3b7c00d9ccba4ea6ff0c0622ae327cb362f30b6002530158238cd296200fab731095db78fe3e4759e2d4c09f3fd595cdca4f96c5e7d761f377ad6f1979e66fc95268d8e6e68cecc07cd0f79c73173819f66e04b3ce49cb1add167fba4cdf0b6e35617d1ef08d6c6158e6c3a4166d8b6daf3ceb828a7db549b9ec840bb510f571a128f0e626954fe89e01714a6a2e88bf699fbada9bdf93cb17d43f73a6eb64ec942c095251adc14647c9c66b2d5d897bd559dd90b7ab3177447836deac99ed79586561fad6af551d0ea23db6abda547418fc065874648708da3f7bf2bea9dea4d3e1bc8d388337a196c8903436adb0c9bd0e188b8b911f7d2a42b5ae736ef5ca44aa4177951ca4414b938ff8ed1c1efcfd1ece73cc5726a2647e9389549d4ea887ddab11fe5d6a9e6c4a9a6f5645c3ed94fdc67fb222035a82ca18766c7d4652bb5ca2f14cd73d792ccfbf761bf6fdbedee88a5c94a0d2d08bd41b1690b7d42b1ac5650d21e7b7d7b02d6fd42b10a8c938033ee907c9ace957c2bc7f5d3d7383d7c064ba2442ccedfcab15e56cd30a06e67aa485b9834a2aca35499ab79693c1b4e0b5589528e648e8e0f6d5d9d59e492584ad2d08ac48f32972504d42af2cc456e054daa67456eb452a74522c55cc517e82a1275a966a5bc4a8bb912d745091eadcf0dbf7a0ea638432992548de232910906251443a93b0a063c1a1000036d2e8db6f1183458e311f847a141829706d4a6295d9dbfcce2329ed2e88e2792e60bbead7b7f6769a169f4749a56950426018a31b600bd27e0e250266c17bb728cad60163be3c8e99f432d24045d71025fa79e2bb5528e8ddfeb006f82de85b8a3af29807bcb78b6a0be659f82f4561d63f90481468d69ab3dce9ba6c79bc471ee8d8ff5b479b6cc2c444cbd9e7dd2950998027763b2335aca31cce72df95d1bc64a1e91939ebe41db762bea9db19c56e04b5796faa4d5db2b91724696bca9829099d5b594b9a8ae0b5c4ad0404c6425cb699ac3b1574de442c4e4985ab7771567badf16271f3c78555472ff016134c60106dd98a2ac94692dbf406d7db818967a97ccc76359aaae1816452663d4117d20c02e808c95bb026ceddce734d63419156554579ca3eee0b92b50ca0bf95e1228340ec14865fac7623a2c32dd7e9e00294fa847510d1004312683e7c43852ad26322d45714ddeace84a2e13ee54cad39cff81d041418bcf5fbf0448799148bf01f0d25a95e9a8d2f31b938bd74846e2bcdfef9fb3ddafaab84a47f87b2af52cbc1e8b33ca0377ac3bd1ae71c33a8a2b7951940bf1220643204b3d3e3cb86514c46ad05377a2b028aaa0eaa2f86b49056350f881d6f356bca59473cd639c132e1934d313e0b0a98baccd39a80c9d1344d268b5c3074b305820cdd18856dcda17bb70493699d0bf5a1ee49f45d6690329f141e90ed6eef544ff7be0856c05d352bf8f257941f2f109f4d66e7a031f0668c07b3a896c8bfaa50c859c16c93c9311922b05112da134ba6505b1112071b0f531b16538f50b59bd8daf8fe38ba0984db725718cc7c53bd82341713fd3d114b35bfe5451d6b928a5d274b534bef45464e39f6bce0ebbd23aa1297d35cfb2d31675c16abc07857e36e9a72ddbf053135b0251b0a939b5989a1e23409ab003fa11552c77dff3efe308a6c675bd5622d5f8a72932069529c6e2fc4256c7f1c539b011c5bcd2a800c41f9d150ce717170b21f3abb42c72f46dc9ce6ee7277acd56fc6d2ecb45b8af9090b96da537d3391b0e6e1b8e917a0c3f427fbda35fdf65b029e7eacf3bad4c26f37f240efc95da370b6b2e01b6723b5882fbf7c345497352faa65e916f800387b89481e9fb019a3a4ea579cfb851e3b6b14ce644ea654ac7e21c20c09d01416f67e9a58cc413c736b2745d23ad5a0aa8feb91ef639c0d3447d0256d5e768c961f74131665e1eef44bebf8c763e9a7cebe1dd8116374fc2468458d3525cc117e9a524dffdcd5434287ab2db157b5df1e874e31a67515e14b34e23f56d2a0ff8bc01ad6655f8def076c03dba98debf6f9c18da6dd3c2396bada0dcae85cfe8557b9503c83562d1800966dcaaade84fc20a21e38c4b1857deaf075b497aa52fabfeed3a14ba736384e69bf12c0aefc6d0e340624e175e37ddc5752ecbe7c508186b7b47f05257dd10a0e02f10d6077df5b8eb41528c44df87cfdcf91833846204ce548a9191c0ff2d95d7e8144b0325d67e65f33e746f89c016edfe7df81bf943bdb9d1adcec93ccddc1fca9f6733e0917aed9327dbff75dae95dac18fd64319bc81cbcaf02e9f51bc7b488aca8db08ba2b5adb5fecb602e7f4d4034b8a8bd90223e7eeedec3edadedbd9fdb22b7e8847725814975d71948f90f23cc9328cb0ab346995e515dd9f9b1c008da97a0fb605baffd98be5f0cff15efcf5500e7776bedefd26fe726ff79bf137e33feffdf9cb6ff7be1cc77b71f2e7dd6fc141d095cc93a2443f4176e0107559235af4ab22224288658b58a4b22946663f556fe0c526d7f3fd8fa9daee6d32d7b6c9c649af2d899d7fdb9a5e82a9da6ef17b235dc764726c3c0929e854bb6da3ffde608cdf1b084fd169fffde63f6ffeebe651d239b899c65599be6fc36f4d9c667254a557f2465dca6b5dae73d0f9a297ae185baa6cb34dd4f6de3de247d0b16fd8d1a892caf20a34265a840b090f7cf34a26181fdbac4598c1c8e48a850b8bb27edbc22cade57b0257ba36d94b1ac368462f464a4f79ab65e5dc155f8a568bc9bb9dcb5cb4ae06a1b3223e3c20bab0f5a1e9e8429ad786c5dff46cb51db2d8fe74346108670729cb66f5b9d4976cf72ee542b9120d16f19772e149cbe918b5034477eb9e470e8b10e6280637e8f6d060a346bb731b35cef5191cbcfbbed5d085914346f2016f9fc1dc8a3c046f1320056f939b7ddd0ffddd1170228b06e370bdc60ffbc2ef0354da170194c70e883db9ecfadb7ed8ce11e4c196cd2388bccf0c2cad109ba79152c7f27d85501e43dd91524b847350253c46f11cf40f514c5b758436225b57ccd45c26c5a1e7b09550ba76e8461bc1f049c3bfdd53f6678c5ef22abe1ac6e5d33206b3f0cffd98bcc12b70e3d3eb27bd9fae0a06b2f183640ef3b23dd413c31e24f99b700cae6ddae46eb5946371205a714bec53ec938f8b23527b700a98e2b58f456610e1bb0f5be9f0dd8765356c5f96fb2fa71f62d5a53605ec950748b84fce464596c533858c013e34df69e36aaa8dd94931dd364d8e142fe33c321de64943692f7f43a2706ceb74c50771f8eaf8f0ede1f32efe387af563571cfefde81852fe7e747cf4ea47ff9165db35b97d5116f359cfc1e38303bc7e36015f2e46d86d094f63ae37ecf4e242964fcbe25ac9f2ad1c67ec6869ca34c4ebe593b73f1ebd7a670c5c8d31ea496b1a9717697e5ccc5a5d411f4fd19ef5949ba99a822fe4b87225df6a28ad536369ca4fafe7e954e62a2d72648a12f3d90567e28c3216e3b182002f832dfc0987ac2d7fb2731a5505dc926cc82e9b69c37659aa639824ddc809c23bb599d8694d2d693a4e2ca4d3c73541c643318b4b258ff2aa3d520abca4770d88939dd34e57ecee745697daa552865f008ed6db1da8731026a1e681977a82c877aa8990c96935973a7af5232fa6f9df868284d51b960c5a166a525cd7cb765604fa4a736edcaca94931af9cfd33b8327e9d1fe6952c79c1796e72dea715cf4077473cc52ee6be682182b7ac63010f1bf7eb493c78fd3333c8fe20ef3df8d3d9d99b9fdf1e9e9d79b2b0b57133f0dc35a036099b41451b14382d936fe31f9d6532e7619ec8d916bc862af244f3a42ce3455b97ec74c5d925787ed8798cbfbe0308f801e1a32c8f515ea893330aebe4a2489dd15d43701f38363c4753f40d7aa20df3bae244d73a8d46453e8aabb66e0faf57de4079ac0e40895ac002d667fd89ec3aba708bf8eab6c10b636ba7b52478016b035f73963603886dc0da001f7e5bccfb18eb95a332b6dad985acde8dca22cb02428904c4d6e8acef3638f9fb94c9c9e759b6ba99f769f5bbcd8c8b82b2e604d117b7d97b7b21148d87237675ede8d62cfdc74ee2b2c817c6f94d5588beddf84eb99bea6309afadc0432ceb43e81b168521dcc9a383e1f96017078da5da1db1df98e1deae7a0fc4f6b6387c3f8bd117f9f63688fa8470bed635c1aaa4aac8ab268d6819f2f3d16dbc4138b55450017809fcf9d1bc849d48602410d8a98f72b7fe32dd4521bfc95dab1f3da8d99d5b6e6861107647a7d6cb215237144df38b7a6920230d8565e297455a10147c9f56b5528dcd633a2bebdd7b59d9faf55788d124cd9252e661514ae64ee936bb153b207039a611e365d8cd95f72d13fbf93eadf86f5b32b8559beeb1bbb51089cc642545d3de0a326b94907904f30fc8c6cb433b3c2eba66c13bcd8070d93683a5979261db128880599b019449d7e163033844bef5b0343e121a3643d9749484af0ea503f2d024ace0f7c830eaa91071921ce6c90b72aabaefdf64e90009051b420cb6e2328db725105b8d83fb841e65914971401f694e3a06ccd11871d41c03824c70bf1eac6a504426fbfe8af202c098b389f7b33874da25f4fad86507aeaae20adcf0e5c69768cde1144d7556e476a6edcef7a5420e4ad7f345bf567998c04521090a2e6d27d0dbd3ae71091e9cc470bec2bd191c52d2cf8ee9c8ad93af373b79a3b656b877331cc39d42d15ab8ff6a92a955321b7b5733421093f009c25eaa86c2bcd038c94bf545c3eede7857e9303fd8d03f5370a2ad151fdf510cecce247d4239a1f0474b7fad4862ad28d79bc0e85991abf9549f4a40b618451815bef1ca4ae9b0bd65d7c86d9aef8b7bf70c3470d34d4d1b5adaf1896ea7bb5a256323150c3ba306b499f040e5c2c89add8e6e1237739c6e9438ffcb6eedcf6f94186aa753b1bf9452557159f5264571a97a61a9df955a347a1cd453b92f5ac7c5c54526451e5fa517a03fd97251f1111895f8435ea0d6d2291886c9858fcf623d389c5755d11822bfb0815c012a7dfe535ec77c9a49b167ccb3195e03d081ebc753d10ad6b66c79e686e072cd3334f4b0aa838150d88c580c41276d26c1963084cf963009ac5564d8ccdcd64d3e9ca4c4f3244a53d031ebd2b671da30177bd2b19d6c337238a0777c860e9a91a2b5b7cdb8c891c2e572e1cae77e46b4be7ad99c501671e5840bfb8263fcc6af8f5d71cfae886617cd519ab4e85dd29d1e7aa99b0f27358b73763a351c45689b988e8a7cb0d5f8de892bd27c02615eab56f62efc27aff9bfe0a07a29a74577239b2c28fe736eddef26b6e4dc26c6434fc70a975f77fba9595eff099167d54e29d461f0cf28fba41d9c67017b5d6748bcf2447afcd20e797e9723964abf93991c418cfab0462d67d5c18c5b93b9febdd25b3eafc027a17d62327bf6758ec0f78d06b57f76af3eb5890af9c7f659881bfd105bda3ef532b4645fb40c956d111d69ba4d04c0ea6c01c26b2a8a395df60aa027a6a92465b90e5c3436edc40ee3146317d5ca408673b450a5a3cb455339cc69e66dc2b2abf99c5ae990e7094b109313d65bc6f034d5f6989f3cbe02cea75eb0f1446f5e253669679c43084bd798858230bab930e6316707fe36689cbfa04ce8292193c9ba683cc4b505901b38381c3bfe261ca41b2f896a019dc8830460cc069c9f61f79c2c0e993f9c38f38583a3fac1903f9e4364fa55c48d3899c31aa35a64c0b0031dbbacf44c8bd81618d3ba7ab575bd7fdfe21c8f9067d93aa07e81ff767162f1a586285d0baeeba09c6250530880444642692e543195485dc907fb95546238af30c4889272aac45056952c0726a66e9c53855c5e400c481519dbd1736ba0758ec64026c0887c3fcbd2515a1190c1563ecf2038dc96898b029257b2cf9c2b598a52826d7c524895b72a71ad8961914bc7d906188eb25bdf62ecfe7d461d20ba8ddefe4ea1b511021432f7c5f09d1127f699c668d10fb841b33f1e0f7c1d6a43f33d0d6a1f10ff725e2f30d5e268ee9dd87dc316adb0f9fe105e63986b29776968722d65732d37dd69701d65c6eff8e21a11ddb7bf06f63917f1d76dc7666cbd93e4cb30385df73c08aa29de9c51cb4dd06a5ccc52883ea55801b2f17ae4df89a87680874df78e75971ec2314b490095ba968bb87f5f347855318c84e620c07dc7f0023386175dc30d403afe26572cc80b105301d9f01373e167eda6d5096f476bee3aa650d3e5c95d9b22a33dcc15456da63d95bd9b92cd66a43e90fa3908b8cdea5780b6953068769796cb2eb751c3a50137dedbfe9d6f6c9f5749fca892d326465f1f23af24c68542728f51ac689a91b11009ba678198c31074693eaac8630b44b902ff0115c49787b059a095926cdbf8294a30f32e544c1d9a21d4be53a5e652f51e7df5ed579e6edb1f253efc141961925e7d76ff626bf9c08fe2e3b6d34a4eff87e8bc338ac7e89d46e1065aa6939bdf2074ceff420af12e1ecb27f96852944eb8609358b927438d0da3ca5007533848ff44dad324be4852a55984c4d39c55fbace79e8ce2459a5ffe139e164c2f4c01f37d17e23141cf42903be1cf6ee0f509039b41a6f96ebcc2e2234170f3fcfc863566808d6444f79eae90d4d5a64be3c793972ccd2fd7939700f75612990950990977dde6511d338e7d114cbe46353ba70e1783f52facd42c589a3bb09316c5eedfd767017eb41a2c7b348a37d0369ddce225ee28dad695fe4d29609c6594adb1625bdf11d5b67c5f95712f4b87bd38cb3ef2adf62304dfbf8be8f8595c26615996d64cd89b88badf038ff4d749be21bfac8441ca65d4fdd7b9aad2f18213f7719a654dd2e7d5547d9ed76e748118daa14ae00a758d70ba0132119518ece1816ab4ccbe0f25d57797ad361658ce2dae10aade494a7e07e1b75ea166d136d3dba3956d2a4759b6686e9e166a2531e7771182dbc56c5c1e9379d7c3b549c26bc4affe81eb4977f54ce22f9a2bfcc0e9d884b337fdfdc813984969b1cda7367b1497c94f324ea44d5b252c6b7ef0773e7f199df2ca3362c55fd6735f6f80f6a1df45d1f73b6251fd312f6d4b593fb407f042268cfc2a7403ccbaea8499b5b9107d3ea668c964ad7fe76724b82ecaf27892809161342944dab5bc489bd148cf7b30a478fe83efd1cef40a04eb0042af3cbe42dfc64d151ae6af262983d6eed54b36f76d597d2b765b5e09f79c2e0e746c4549dc93a9668e757143ce780df46ec634f29a2ea90d4c5ccbe4ac93d54524a43157574ca4db8fe1e69ad8bcc7e41a264b55f52c1e4de4b34cc276e04e00fd4ceb38d0263f47fdfe259530b75eeb47b0926dacf2a3aceae57f82a3b0b1fc4fb1aa977fb71cfe3b0ddff3f6679d0fe700408c7431f289b6cc7bdfc885c4f05cb381a1e2ad38917955a6529d828bb64bb9d8463bdc599c96e06115daa8f9eb7b613ad9a6fa8c6b49f3446aa2b2bdeb34d4c05052f4059566046c47ec9b54b2a724da89f1d0f55a92bed2f524cda4683f7c880d7c47503d4b1f0d69e1da3981a2a73c38bb9215f47971b273dac5f227bba7d6570c90b95e4f3c4912f20f0bb3706e077c1e0d72fbc142838c08257d347cdc58f8a485c626ad535e0151b0b946740178c2716f49c109202047ba2505950ff19dc4a0c435f770b6ae73ed297ff37156fe1620ea8fb242af8fb85471a5176f34414790977201befcc6c53c074fd9e7e0dcf65c14e31001d7b8a4241c462fbd1a7ff15755883407d74f350fb1977261105d1753322e4713312ecad01d217aeef55d58e260e821721a57a3894c047947455f84dbbb75d796b152c5e848577d3d6e4307bbc2791902b2667607e4ba5d60511e53b6b7bd6765f91b423bc1dc53c0e7c04b109dd60ca279186667f9f6ee52d780bcef6ef9cba20889964e627e5737707feadcc3164515e1573302da3c6afe4256afe041b9ee3416d36d475c3fc8d5b3eb083e5cc7a51457b284839144fd3980605e61e11b29afe8bbc6dbafc9396f0bb9206ab4d67b5edf8d21557f958b186375f131d8f4651b2a89ab180c3ccfa7f1ec7ccdfec02ede8a693c03acd77f039fad54d2786c35fbc34e944e09f7c6037f5b68a8ba5b35ccbf90d5cb78f63caee2f6349e85580f23e9ebdad1d999fe383be3d2333b13e0980a51f7002a9dd07b3918d7bbb7727dc1343ff7456b12ab49eb14ebed63ffa6f16c29a6bbbef2456af2616c5219baffac64a2efc00cbdf4126906ae982b71fe0a88c9b980b338ce2bb60d8e5efd70f4eae8f83f455fec8a1e048160e77d915f49dd3fe301b52a444cce0c61f8dcdfabcd284a7220fe510e7d7dca19b8f4bd41c0fefa1b0ce14b5f157f958b9a2bdf9a6b52b35e373776b28df7bc2647bfce0a1a9dde83764adfb8087e285abe00b66d4a802b0271ffbe68eb39a65ef5fb62dbcc7e4723cff68e461cacb3144f60609e97d4c6a78a8087e5d725735d44f7af6be0901cc9dd3797436a629ca9c4bfa988f477b55061abc064851b68c0ea0e4ee34b04fc57b96082d33be9c4068f4a4ece18be73ddf925092fddf63506beeef24854c5c323e2f9312c177d7fc6c7a2351627e143f5273c29e1f01be555665ceb9f91ac514a632cab3cbec2c9e068d1b693229cc73627759ac5a5cc2ba6e2c9044f3534f22461cb645bb5b2a97a62100127c11762858224f07dc9cca1efdf67ad392dbb96ee58aaaa5687db4e63ba710f0319272d7d486f97c36d9889ed4bb96891100649ae2d1941cc35d618f85c2479657994b4b14ac7870e462324d65406721384a406a13633f6fe8a83d6ab79cfde68195826a0ed9b91887d37bd56ac06a1c37cf54498a0d000c7ed34dba703b7fff691970f07ad003f64028336f5428d45d4577b9d8f3eaff591c175e3be1f8f66cf3c29d48ea53a5de101f2374027d810619ddb7f8ea247609544b3b5a9acd22ed9fdfba28538507b2b0d88f9dd5e4483caffcec7fe92635e033f5ecc2c00f7766a8ed6992d41e72a32db423c10ef202adb425c4f248467d1ccedd8c4154b0d4f9fa58966b1297e9918a7324b144220387f013bb90fed169468ddb4a86cab738b25c05f0f066ab31d8ec84779aade52842fab36e2ca48445efde1ceff26668182b562b3ae288b92f66fa629f74f5062db84f359168cf4ae4c876a663820d2a6e51d7e77b535181e8594a0070742a086b07d94538bd9c7c2cfda327c13dadf1e90bb903d1bf0ef7f1fbdfb188db5773370d5f24fd03863eff13a3f7c838ff3748ae189cc2e3509ceb66c5910df3f428b750302f049fa6adef3b99d8b30b46eb31d14a314777f2d578801ecc57ca8082b2c8486d749dbc58fe2ad064d260db3bb1a3278ddec22be80d582df7f3f24ac67e030d8d2acb9f7deba5c2d97a086448d921b243d94a34951af072156219e20f3d408472798578de2b9c2437688de13f5195aca519c8de6595c692cebf5e8e5042a64b212c5bc740b81813d973bb46f74cec862b360301670d8fb13f86e05db2fa9b234afb649e0b09d6956202fb6e7f95cc9645bbe9f9552e9a1a87f412ff62ba3127d9c97682f58d371995ea571f65329c7ed89239f267c08e8d3dedc8056675495e9d478aefa13c5676281dd4a09ef132aade6b4d8098a680db66836f1526966d4ee75f1ecdd3b8cfd4a81bf448c9ad2557ca159d85c4a30a08268c44a4ee3bc4a476040170bf4ea604a56130481567d623429d2918cb8f23544b5352f2900d035972a08212b202a598c80107c5a298a1fab99c4481c5522ce5421e414705e09085a2ece8db8eb5c0ce524be4a8b52f3df00294bf34bd5a58d012dcdd10650aa14635b6a4efd29b4a7ba46dd4075c5f3b29825c5754e9fb21a4536142d9d8d6e78773e1e3fe5048a9bce9fb50adc45fe57b9785e5ce74e2e46099fca88faaad4166c20c8f2fd95b8f8402e19a55ade133da9943b2197e7c3d20033be2be1db338bb5b3028f06b5fdc61dc8eab6a359097f9f236d6c774287ca1c66adb2aa8a999eac18ed3cdbcebad1136478c0ac40e44320bda4c9f0de616bb3e95634984fca0866145e82a1ab9724656a89d6a673201a96aaa97726168d9b6a26a20c445424de631f3737ce630c98164bb4d2ad0a10800a4d4534b929219c618c08125755990ee795149a244d241c55d84eaf87b148af53a5ef28132946f352c1957c5494a51c55d982ee9da22ddf8fe4acc2bba8ee4ddfbab6314bc6e26370ac846effa9150ae96a985213cc358ae0ac6ebc0964ff29be7336e0a456b8cfb19b797f89274e0fddbaae7c78e373b4b2c61e79e638218764338d5a5755802287e8db38c44c4d6598e609f8366f3764eaf4ae38394537c20d6f60760ffda6e236494fba0205a24510f396ba618a45f04cfe8e8a3ec9b2b6ad16c4efb19e67eaaf4f78aa54c50ff95bc02ff6400a49ed3a8b40b8476fa58096a1eb689dc84cb4bd77d61561cf1f1b7ffb344916c0549617f2ad1c2bdd9d2770ae3de5ef43f0ee69fbfb845d1bfc9ca79ed47559fff4368a3b22e671dc3175d811439e7aebf344a48411e78930efd2b150697e91493132ef7a7a6e40daa4d90f588deabaa078cb7a88ee51fcfcfcbc52efe1273ccc13c7d074f07b5e62fadfc3481ea067005589138b587155c5a3c95b393ef55d43bc95e3ef7e3a7ef9025ba0cdfd7d9ba27f1a38b00cc95b13cbfda5f9541473dd00efb858d176b2bf23f6aa94e3fe070be8567c882274ac7adbfb1e6adc76cce0c350fd7a69c513615f488b524ce7f0aca4272e28f97475c95a747f7f303e8eb9f8f46bfc1434e2290f404f69a79de581fc5d4736797b3f8e871ff5f6eeeafdcb09a57e537143689f9018ae7e8607175c87e3312848cd955eb3552ff33f14e548fe3c4b5ca4c3fabb3c2be357760bbab4ae2bf2473ce89b40470e95ac78ce26b9b3222f8a193f28f4b7de082e520a377ffa5d2f29f3acd919e43a434f6ea5e2340cf8fb3f318d90ab7fff0e379cc0eed3199fe84fdd87e5579f5e4f3c8173061cba71dc2d4a9d5e8ce6aa2b86bd9166758b3c5b587e97e431785bc6bb3801d4a092c27ab00141909215b0b7fa6f8a5cb0843d651693b7dd0f36529b29014899a8b7d82f7bba00aa3887419fa06350711ac9aa38ec76658377f6ae089eee79644957dd1e038826f65661540b8885e088e66a3b74a362411ffcc24166439572559592aab08775ddc3574522ddb49b33834dca2bf9bec2c7e16793344b828823416e1b2576be268669c6b07e1d1b75d5c548012d8f4a421457cd108775baa2755253c238ddcf8baa6d850f9d16f7ed1f7b7d0ee1f92c74bb1599476fde1fa3cfa0fb15a5464fdac1e50c2215eeeb5bd6b201e6f27d659524e0ef430a77c6d5126ca1ef4dd3c69a80d7df69acf29dd8f18b7100625becfad10a20f7c4963f7ddc7cf1b7bb2eb8f79382c3256837d4eefe977755ae607036d7ae082b7d16b185bb583a32ef0b21cc7232dcb7a220759d56a309137e30a1c7285652b49e9465710da1f3f61b327e9eb96411b6428adec1b6dbde7582132186a58c2f598025061b23f435b5aac778e77657364b1c2783b95c32752f682ec09895b2220f19033891261a4a5651393cb45a6cde4a064710bb9f5a6188e0c759dbc733cb4d2ef3b117521e50cc6a6e3308a175370ad6401e43a246175c3ecbec2382eed4a590cb27080e69aed4044115575f15cd30d66a41ddd59f19f14ccbbd9939167a29a40f9cebdb171ebfd7ebe1bbc170612df3411da592e534cd256abb0377163297fbbe36a54d7766edc1d1be5f63046e6e80db6eac5086154a57814b4cefe0e3ad4168672573be0c8e09fcecc2771d4bb46f67e4b6c35ca82d570e7b1cc8aedeca643e9265fd8a66242f6fadb8c509b026b18d8caa33ac868f98c30e8e805fd55730217f9ba757712681af45e90398e279fbfd5cb3b831befb3a609138cac5b4005b472595982b7c4e855830644890a428f305c8a9123330c30069c4705e8969bc1043692c3812ebcd324eaee27c24133157f1855402856da8e595e6952c8b99a0072760d7b119f1fcf54b318df37436cf627af3b3b003d912132dade7d41fb0d23883af73e609deaa61b6b900ca9b4114ef74c5094b3ded58d081a0a85acc647fb0855f832d2331ee7ff01abffdfea71465f3dff5b0e8f75c7cd46b90b170a98f374a52b7eb81bd0938ddd76bc9573255f08677915b2d34191be14c31abd269fadff412aa17495da6b3194536d274039a51b858d5442ef0f5143c8eea86e46ff338834bd8448a2c56156f7ac07c6b98ddd0675ba31d044d0a2553f720d588a2f05ec5dff166b16656fa1cfec9eea9afd7658a91703998d67bf78cf9cc35c6b6073fa5d6872998b7604e941423f027db90e4d325303fe93d081efc455e6c6397b663a55703d6d9bc91c7f9cf4aea4d60dfc54d0a93f54388e1192cd5bbf94c2761bc4c3aca78a97c249b8a0cc090d7c52b466046bd1168b398e9ee5d799e494d58fe7adb8ccfb8ed9a535743d13de020ea0a109adbb15a10d37956a5343161abc158d6f4023bc1dfd8ec54daeed0f2c54902279b0960d66e555255adae69c2fe307c05d52be5b4b8926baaea3e39fb67318a91af36fbf5012cff2db74b7b928bf3b04be76256e40b7443a070c4681e76aea7e59c9aab19c78603cb8b4412ef882a3f7812966e84ce9ccc2005692816638b26b037864591c938879d71cf5b1bef3d5ae7b8c58af4278f7e18cfaa79c90b500abba25c97f16c26939fb0a7a26ffaec3d5bfb3dd07dd2090cef964189cecea08b3737dc29ef4852c1e062258c9d7bd3d2b3696510ba6690fc9a611a8797370d3060e879c0551176b51f0ca6c6ec6a0ebbb6f4ac777ef56e7d271dd8a5def77b4f6dac6da186564b5e0c42189a62b258a3f539de1481d1954c805c6b51f9204443b16f521edb71af59fa49c3b29b2de52fa4f356b33958aadaad2d4bd3ec368064bc6938f7f6c809339894bd01a2add69017e86f6590bcf11a7e04f56a7e2065ecc4c760147f2cadcd318e894deb9a23dc9452cae52bfe7082006d267e0687fff1db27afde1d1d1fbd7e75f6eee7376f5ebf3d3e7c0e7e864cd3f7ef8b96be4a99309c324f5a9a35c783eb71fd8d1a02fe3f9f97a887c3741821047105a15895a2c96a39c0a64a0b4236b55aee0a8dc6c3aa2aadd4b13555ad0e8917c581d8ddd9d911fb24cea335836efc901571d55655d9110f008e99fa50f1f2988719358a05acdff24a772164cef44ab75b3f1dbf7c013f158916e45515a5795a51be3f77788cf3c3dca83118b612abc9ab2a2475b6d3a482d7d8e9ae486822bb621627499a5fb0939852d87b91d38f3159e2ab5032aecf168fe9e30245bd34b23a4ea7b2982f15fbdc43109dd5f36dd8723302f1d00ec1368a1b8f24403277c3aecd734357ec409c660fbbd48f2406b219d4ecd29a4065322ecda871265cf05bddc576b0db19ca352e9b251666f46cd9ee356dd3f06ab31a2b76ba62a753539232136d25d32e25d8c8764fdcdc90b47d332cf4e671ed9ad1242c3be4bda9d394b23557e6ead8621a332a3a3b93ea25f80470ab6df25ea4f9e5b322afe214ad2b4c3a48fdc34c7b71b3cfba67f5727bbee7897a01f241b1a4fa237de1245106199519a96e53630cd6aa5e2cedc0c66d3735eb42d037572a86bf76c4077bd31afe0a1cf4f057be220790be2f3e58a13824dc3e16b77c0d1bd7a369fa8c15d28a353e5b52c3b8aa794ceea48e2729eaea2b7dc8e545be4da150a6a0d6a8c9a3a571480c0695514bc398f5b79d7687df8b075500762ce4559c810a659615d732116d25a578f6ee4d4797d64d5c80c4525e5b3dbbf6608bb532d8c236823b60434bfa5e476208e72946b77c15a7e03c56d7621e3fa8ac3e1e065bf84e3fd8ea08dd277be01bcf5b179a4b10aa4ab34c0ca5db285d90e6e54535216bc3a410f1b0985722ada22882babf48ab4ce4aaa5b9aa649c88626c6b4f6429bb4215204f869a3256291a60d0f1a32704848e9148c7ed7b1759318c338d8251142d7121836e416ae9765d3187e614e82f95bd96c3593cba7c53647081a612838ab213392be50845871c49e006e68acde26aa2db3b39a5f45e4fd82c7a4c70316f860bb34bb030ef8f3583114102878ece85228447ea160b1a23c4ea2c628ad344a31954329f4f51326b43bb61c685acf64588fff89f51fdc28e648f4dce2dfec020961b7427fddc5d499776a57955451f38492aeec122c54c221ac358c92375f8db3cce9e4b390b3c4405b9d6a360aa70065ea497327458e47202b752c71309cd89743ac3c3134fe9622ccecfa2149b39274b0b2bd599c56595c619dafa96a9024b20b03649f4513aba54facf952c954cc83be13a4f6ecdbe88b00159f3e286da9cba28fe5a5d812ecfb7629856d3585de2a8e9f7388b2fb07342ec8a6df1735e94892c65c24687b97b625bbca98ddc6bc990d55b71329aabaa98a6ff2d4bf4acc8147f85cde33318357aee3a51553cba3c15c7e1b41a8f507acecf6116cebda966ae9becf8cd2bceb946f87343c701900261b97ba8310eed8033affbb46348d8260778d087ae99d7ae1b64d9153008c6771a07507dac15729c5c3fdeaf802e366e6e68dd5942fb1e4773a3717cffbef0d3b1bd66ef52206ac15f9ab78016ee993ebafe5095601f6e320dac8a9993a57ea658d93b79beb3cf82ab5df47d0ecf782fe399e7104f37d015ad97f16c992fbc97e0800dde1c48a37b2247c851187c66966727599c5fcce30b0922b1d3f6a4aa66fbbddef5f5752447d3781b18c51c08569c454579d183e4bdaff77adf443bbd3f2939dad6296a54a6b36adb40437710f85aa6e91c62c77924da32ba88d007a372d73cd535fbaa2b4a7921df4bd515e79a8942af6eed9dce7917b7a14e7c075e1cdaad56e7dc3dbdfd4569ba3ac2df53a9abbd1e8b33ca4b35f3b413ed463be4b135aee445512ec48b181eb7d652493d8977d8f46caae39c06d7b0dfc55fe4fb581f0b7618fa44c0d96a7fb825ddf55e4ff4bf37d7db5ab193ddaed8eb8a47a71b953e8bf2a2986d54d4a8d0d982e413cb2753b6383740009545f4dbc0fdd1f1fba42107d6c74f1b2bf4450ba7ab652c3484679ab17c3b9b9eb8bd3c8d674b5d197b79764f9bd44647c67e66ad4edd8d31cba995ae3b316639b5d27517c62c67990763f01ac9fd17833bd6aa286b4e887f5fc7c62fa9ebff5bfc1a9bf1ea3d6f7e377835f630f2715351cfa7b18f8d8de5c9a33143c3e662e8cf98e15f7331e5415beaccd8d474fb10e8bde60dfe2a1721d67b7916eff5d1dc50d824338efc89a91f32e43663b9836f74654cce868beb5cb81b0ba80de9eb8d005721708a15748ad9cdf2e0c1aba292fb0f1e885745be4d7b8cf17aa34296233cdb0ddf28de49e94edfc37742cde4c89ebb1b9fb9e48ffc522ee8941d17a598ea9d9dc82a4e33bea3f9c1583b08c393d21e8c484b1b19661ae8b14757b8c35b7b42129de09e4ced9cfb13bce438b434e387a22001ee03b31b63baedb994a1e88b3d4cb9b5207e280abed9445f3c7acc8e3b3d856d90d7148577da9db4e25657b486ad53d14e2b49b255b8b980957f51898b795cc6792531cca607b135495b01b81d0d6e17fce57ae410cae344fac65a0c876dfe81bf996cfabedd322669e939a9dbb32ce2a7f8d57df9e4ef67ef9efc707876f4eaf8f0c7c3b7a22fbeddd9f966f7db6ff7befaf29b2f77befd76d7df794d9c684ceebe6058dbe0cb006973d33603091971d3a912595128992d60e889a08be2c9f971f102209cdf7d5f55051d0c4bf64f3363f965b4f34730963473d8e38db94b9c9bf6a3d53c2095c2d58f5e1ebd3afbdb93173f1f36f38361ada37c9ce669b5d8ac74eb516b1336934a7336d3dc654397c7e858be25eedf674ab1e27bb1bdab194dfcfa0fb1abcbeeb894effa358c5ec16bbe30fc8675646d0caceba7103baeeee2ed1a8cf7abd1243c8baed36a92e62e1584926e5b96f248e9ebf29b12acdc7a83417433189cb40ff64ffe7132189c9e3eb8699f0cb65aa79df6c17efbe0de60b0db39f9c76030189cdee8ff8f3a0f0e74da6070dab36ab147ea4d16a7b981f98fc1e0fac117bd4db6b7d779b8c4a1276daffb1f27ba627b2794e920113c6d3aa480008a22ffd85de70d688d10073cac5bb905a7f1e8ef01ade19bdd7133a5f475772af30ce0613fbf3ea14f713fcd2abcdcdc3865fd4006b4c663b82f45a2440f59a24a2a7b37bcb911f738760699089ace2f7e3524cdd59c981273c2adba0a5a0fe246dafba3ac8ee38b067e12333e5ac66b841b7faa0a944b9c1ba7e94d1119701db0232d42520abe70da5abf9b40731be545b146c573ac7a2e66653a4d416a5594f56035ff734f309c8f8dcf2e4246fc1321575694ab4f32aad38a87a38dce190fe1579f336e5711ea2e918f3a346b3bc7f8161556a1318fcbe12216cc16657a31a9447bd4117b3bbb5f6ecf4aa940a2fc433c92c3a2b8ec8aa37ce43000f82655cccb91be9424f08e98a52399eb63669e27e488f5e5d1b149769163cc65e5c5d1b3c357ef0ec558dfa4c9541644a0a8b4af31066e52aea5aa94d2397faabdf79bf1bc4ba769061e3cc0e12b3a911bce2b34ebcd8a0b8d28d77199a7f98511a88f8a3c498d69803e4fa692c2291ce39b620eef9a748a66c585403fa7bae389bc92593103ed6d995fa565914fc16b6a9a8b519982b32e0045e7ea5b392daee03d742235a80bfd1b665133cab3b248e6a4dbc3818133b94b29677602953effb2e2221d9151739615d7687cac7300223669e70cdefccf9e1ffeedec0c1de78ca45291ccafa257af9f1f9e1dbefa1bea2eba4e38237733630def99b93e2f082e13beccca34af7ea955f3d2dbe3a29cc65557c4e585f2c427193c5dc6e505e859a9c80b88a34b8b3ebc8be391a74b7f2f76c501d4db16bb62df28b980c985686b98607929761fc30f10dac0cf870f992eae067da2f3b7c5ee29ef814e3ce5ae96c818adbc084d4fd1da4ba9f8025cebd050f7454b3c34ade0b0a352ceb27824dbbdff50bd8b6ef08669f47a895c40c74c6b0f1f9e3aad5e6e154a44455faf8a4c861607dce0124b44b22c8bb24dddedf8e3b3fafca464bfbdbd2d7e91d9a8984a34f618ce117dd1de637b7b9b15869d03d0c575ac2feb65719de339332af22b99a7a082a00a7cbd581473d867e85f51effa2a1e5d32785521c6699ee07e8db34ca595c4aae09431c15a064da1343e2b928275595c03c21c360ed8e84fbcd748cd74a31ad0de128baef8acd8bb67b1776f05f6ee6d8abd7bebb057a30b0e00def52c963070e1ac39a414a2754e73d334215114c19c9c1b8e87135db60f0090d92ba6b32d93dba977f89e6d8c75935394289ecdb205bc36a05dd534ae4ea351918fe2aa0d7daaf94b6b3e2da9b76b0ecb47ffda87e5cf4aba53b2dd8168454ac9d2585aa11ac1a298c3c974a1f9b658a9b9be36e20ba3e68fdc58c97e54285891f136b87423a4106d3880ff43e90950ceae431f5e164d014a55e8c600509a6365303c01cda16bbde38765718997bf6b433bae8d034df97e26c17c8c2f011ba525cdd7a4aea4e7653643334377f2a1ee52c56b022ca855ca699c8262007ad4a473382924b20f493a1ecbd207e81fc3ae3b6b284b570cbb62d4154957c8ae18730dde4dce6f4ff7f68ebbbde53ae976714e34bdb669fd6de5344b1b762c3c8f68288f37ee1b36da6fa445ad97698eb718741d0882d5119863278f8571d89b17f9f6d4144ce415e7af7c92d4d224172209e80b63305c8dad098e27cec44466b3f13c33c4424575da859711df801d0f80937071dd99be84b3583d0feb998aa5bc04fa18f33a4e6d453979083cb2c8f0b7b44043da5668258435c6653c95eab87803c29d5de341127de58ce2521a254003b1a5e0b904ea99f7318d8a0e476e8d1fbcfaa5c6004142cd955227b24c2b7226a4e6c367fab60b966eb284df845e26cb89f5459f4403a4dedf76755c219ca77ae588bd728abe2de0973e3b83f2c0873be04bcf227f308fad8c300e65849484ae320d913f7c3f2bf47d58df068e8bb7f242be9f59d952ad2d5e2acc8e4013dc6884d77247c57496829e35fdaa95a88a4b99abe3c2ba6aee8b3069699db7f2e2f0fd8cd5c08450390e28b31e044a3b35c3014a203331afd22cad164c9281513f10ce2d4d889ed9374f8e7f3a7b7bf8e3e1dfdfd05ec332ed93015a2ebf046e51aa51ac0f8ed1242ee351254be359b9986789f3782ae2d94c02cd17e3395880612452b8995956195480f1516b4e8ec5113ebce9810a5bad19bda140135e6f7d80d66a0fe85fd46975bdde1ea217703a944108230198a669f37c5b6ff484a78307d6188cf3d3f703e7f40a6d98e24ca8f9789cbe972ac216f4f180238dd53e96a75a83adde3e08e774c792879d83c1163c620db67a1436432a72eba5f3f52fa60d3cd83af0524e1dd4b29857d2401d6c0980caaa36ff6c6ca509fc030dd2fd635d5edb86d7dc83c1d629aece89ee6b2f3aed1c80b47c5f7feec300ae1f76e8bbdda61fb08c37284c878cce69e76147ffea740e6e362eda3e79f8e0e0b4737003ed3ce8745a83fc34fab548f376eba6d5e98ad6854f30dec02eb7d129cd7158c6d7b4f7b87c1d84792e1ca9aee4e72029eddf1adb372edb131feee1a36e28384342d35655a31526f602549b4d12de8e7642cd0f9b0014a12f5a2d9340aad4cf65964ed30a4c039849a7b1d94c6cf6cd8d68f56ced522aba20a22a48bb84c8288c7044f2bd1c81c559c7089f3d06680a745b9dec9c32a688080ae6ecb21c7487851968fc36205bad6a221ea24d1c78d445875b5daa40a7ba990d82f2504ce9466a0eee5e4f1c5de4853e9ab352c6c9c27645c9dfe6287576bc1ae5f11b187583726cd741ce50a5f95c069c82f11385e67ca41ce3b26626a6859e873d9641dc884e7ec4929d59aecef992e55c94c57c46e95fb1f469916856b0a4acaf5956ac2a59a6ea92b2be3965b3f466ae26c6813528e8c3c88b9c9c54b8ed61bd7431b52061f2677335c12c6f020d7a06f36494b7fb665ad85b06cc61fdbbcfa8b641d8998c41e1c60e5c5f151ec2238e9ff6a0c5f0ced0fab0e2c19a8a09db57b888ba7cb8e9f820ab4a9639589ce25adedce0e299a9e07367273487d02380153737280e616e26f514ec9b59035b52e7e1c37461dffd743e2c69d4fbf697f37b09f3b84f7f5d5bb846fbe68773a549c8b42feedd33bf592d18f4be1dfd01eda01ff5c0db94da11fba26d91f240b4a207102ff9e41f2df1902a9012ab1d4a473c14add387072dc230e4ef6fad374c6409e27cc1b90ab4e0c1cb2d5da0990fbfef80c8049a6e1efd990f555562e9a0b92394b34369f93e5595ea0abd9022addce69179629bf4f64de3aef13db16391c0e9c533e247ed4906c1982b399d65e0fbd3c60ba1032e7c3a0e8f36f66ff929c7fe351f78f6424655ba74d9e8776aa7a061a89bce416fe08e7d6ec3c9e95770bf82097a53caaad2db57e6a3026c7e8bb1f8f9ed112e94921728bd5c3a25fec858221f04c0963fbf3db22eb5a0d98540736c3e185b14b2dc4df66430e81dfce9945f674100e73f1fb7fe43ef8751a431fa5991c827557ba7139987d4f6eed7fae3e799be6dc50abd2fc1bef0a6e410ba80ba6566cb599e38e2af4be73318c6394a8a887d5759ac88b3ffe4297b62dabfc344fd5eb38457cad8684fc10e321711dc69c0a1a5666f0342995e35c41e0fae856d4c0971bed7737b3acbd8898b0de13d0f8f5f54d8c65b0997b5132d2132660954089648af1243392e4a493b3136bd7752f914c4332215df090ff4639132c93c7b9ac15227e9299e99a49dce7804ea3594e077cfd63fda07fb7aed2c84c81c1b0f45abf345ab8ba651c6c94ea75317c8d5acd88be1af30c9fef345c08db0d8ffc5f0577d907eb80d590485fcb30a73115399331edc35faa45b4617f61bb20c1370c77967d7052b3838494f9d1b9c7061705128c8bdf70c674e3a28e600841c2ee3ddb0717adf87093c81ca20523be56588d2faddf2b467bcae40a70192614fbc6c6454358392279679a4268819b2ec7c08908a07f082d1479cb9ac0dba694eea7250e1099c8f17334942e74390dfcb440cb62cb2a310f2a1680db6e8ddc1be68b2161a1600d5a2e226b528937d0f5b407eaef3793a9817956110e17028e548a6573211e7bac6ff7bf7fa15c58e4dc7a65fbaf279301cbfa350ceb82cd668ba13f4762d5a34ad4bf3ca7cdad08752c8e9ac5af0e1b0f509c666b7f4afb8a57f15df093ed6c7e2576f47eb7f069bfb442a70724e7e3dedf8788826d296a0a2861855eed46667f598f5d1b07cdca85ac9f319711e6c6d8007a65b354ca8ed2eb319dbbf221e88036f5f8a7dfaf46e0396c634025d41c4dc5c23547613f1f91483c9fbdea274fcddb8d96a7c2cf6dd6d15b09c191f9470f3ce66a089f885336a8b5baf43d564c00d790ce78432dd58332b73cd49bae08c744b597103b1b78e75fc23bb1336708ffab26659c6f649f4f0c141ff1ff7f6bff870dbee9ca0de6e0f14783b9a976ce99f5fecb66a3c208e04f5316614521ac52d43921f81b7d0baf43ace13319571be7ab074f9df78b87067166da8e68f1792f888fbf7f6bf180c7aedceea113e81f03d304250f28d3d7d5d32f441a6b3611cf7e85d4194d2cf203316014083cba1ff16e19c2e424fc084a95dca2ed4b463041311b2c41870c5d960383f52700ae01281ecc6e66904a32e4da4e5d2eac3b1e63a4d97da250b832db51b2fae0dc25625c1a7cf951407a205228eb415de58e759268a79850b02dd8e375802da8d3ccbacc2e68b80cd98b7319451784bd1eb8142452c72798146df59515cc6131933ed7bd08208368cbbb2e0273dc345a8cc1141c5766f3068837efd41a777d1710fec58c592cf260e991a69e690f50002a99a91aba5ccada691a681668d4b6672b420c709d1403596e518195a986e8568618613a2d5ab90044d376e49f7f29b8fdb487cf902243b36375967d507f7cb559866d0a98e690ddbddd65ab9a99612030db0090d9b9e4af49c9a9792651757c0b526e480ca4eee66da848f93f4346c95f0958be750f40c1df52fb37497c516ec5b14dc649b2eb2cd4b88909b17d1849ec3d39bd339120642d4da55e2be8d88c6a72d25b6b5c95a06e23e9a4614f6612d27edf3eb2f13ddf8e2cff892896d5cbc3ef4dd8eadad427bcbb8911c96176a43a11b9ca04effb661f66ad2d33bcd62a0216085474df3083ca8b91202de586c77828cde03ab1c60d7f5410f42b78080c34dad21a0f62d92f0de138ac02f928b0c9cffcb1462c7d8c30f124cb6bebabb3cfd75afdfb73606b8ad8a39f81468b59c981d4c18a428ae48ab90ad27aab2403072da0c8eddbcab5865a5506553910af6df3e1a92fc11aa18fadda03b655f06ebb58833eff0e2ee61b0c5a5679ee4ace5387d77169a7e7882a2659202d3ca43d78cbd25d83cd1ea3c682d9151acb8b6331945b370a63e44db76abdd0a7ad03968ad96c938682ba07840ec906ad03682d534251635a860fd380f9f183d6c58f678df61bb4bfd925613fef80f6dd21bfab6ad69dfbb341227eed9d26cb89a6740712df12d40c4f81820e2cabc6ee92b03f07291f72006113634346410ed0b7c9e581d1c80d4d5b0c9eb690a012a408b1f3c698e1611683f414102972a630cedf52066da515d90d79046f1344d924c46a88ea4ff07ce8351f115e0e160650e2f455370db0b81ebc560aba7eff2bdc1965093629e2579abb27771cc42559dc1967de1bb8793c622c521396bd717e7c05b9c9dae68589f7d2c031c046d03b7fc90d6ffc2603fd34e957912f440efe12fb09887d06eb5fd09901008a8e91aac1cd31f2b319dc35f0b6c56603c7d7d593631526605dd7fbc7b835d3b5299e08f7351d075c2c4fbf71b70dc5caada07fddaf4dc7cd169ade496bd87085d1d9aac716acdbcd8aba29cc659fadf282db848af24a9e8e1a9d0f5988dba60c4311e4f72942c12574e8659b35829d4df362fb978f2a3f63a686c4f8a2cb1eaf42007d02912f58612890ea78068881f0add36580b766965ce7b7325cbde7e9a9c77c5b9067e0e6001da087d898af3930f746d6aa549abcb6f46ad9e8ddee0ae37fe3548dc9e9e3730586d9ca11b9cfa1be0a43a4df7d91a93e50eb4f50fd57765b8f8656015d3fa3f81d932da04e05434ce479a2fc161852fa3fefd9e86c57b47ccaee95ca71310133352d05108a17bb7b6f612b0507375a35d6f42fcfdea5f277823e652f3118ddc8262b5f3e74d4e327fced32b59aa384357becf253869488b9cbcca8d63304cb1be530d4f68358db96f2e1744614aae9af9dba8e7a3937969c516da46fb79b0352d86ef075b1df4ea09c4dbb58b2f466164f6fbf729238aa709358409edc1d6cb62f81e4cdbde6a5a570eb6201c2d3672ea46d8d45ad328093c659d34c03fdd6c5408474ff35a20ae0c45c3bded506c10ab867276f6cbe1d3374f9efdf5ecf0efc7876f5f3d7971f6f2f5f39f5f1c9e9ded904127a157ef01fceb31c7c7b8287abfa3963fa0c6d3a2a8d4ffcfdebf3eb7715c79e3f8bfd2f16fbd20d71428ca772a8a7e8a69c7760c3b4fa4ac2b0fc94c35304d60c8c10c3217d250a8a774b1245fe438de4d9c689d6f12470a29cb9275b3d6b24cca550f9c177a4301eb376052c5627dff926f9dbeccb57b30a42889b6a12a1133dda7cf39ddd3d3f339a7bb4f7b0e6ed02f002bc2431213f180692caf583e5bb6e97a34323beb54f4f4a043bb43321943de5041856234e17e008d2ba7717a4de3cabfc0108054041542f7cec30bce5537d8dede5405682f4fd6605c08998c4941b1f8b4ea42a2bbef4e143d245153383ce053cd551d00cbaf41032e876b31a8e68309067c4d240b93aed6871de794a885318a04c1502a33e2ce4be4f0aa8dd2a13a5e3bd523a7157df63552f13d8625b8cad2672f868c6873d2c371e223c91012218793e9923e3398a9d97326ae46d5c22ee23195657a15cd3022bd9ae74f45b46f120c2a7ce68171499488473c96f69e433271c9378b30375128c715814f06c266e1399a16ef4d92762bd6d90a5220cf789f535225af998c7b45d26933c4f06f419578007f638eb01a76eab6d5146ddd5372f4e0e781a0e7b0582e8c7ffabd37a606be27e365c7190cca460c79d0ec84e05fa154b06c44a364f31a1f1acc1e4fb2865cde769120feb695bbb51c496b49db877f46797c23c9c1793c688758b776005737d15a6926d076fcd0d302ab5ea1676bf51453081bab101100cf25c53cabe92b62849fc23384456f6ae08a884894a4a6de887f4523a3e1518d38f884e943c177d35095dcc5cf2ea52b1f1ac1e9fc28085a127c512c57c1e2b1d17880567ad2a37070586eb6e64fcd8f8ca232a96130888d99e04bdfb397c536d5f268497571fc50b2a789661a0c566ac9a0025bca90ec0761f1a706631595100acac7062368370cab1d85c241446bb60c26ec3dd942e8fe0837b5795104de8dd14a5fce017630558eae6d41afe68bf90bf2f18677725697f42b1436ddae547b7c2fea2f9eb29d20fc81c16b3e287b46457d803bfd23e0969d321e6b36160a011d2a960d4be78102802ca5a238ac3ef9f9cc7843ab449cc2fd6ce2a426e6adab37b06794e93644e6dab36c6b87f8e4f0cf63cfee6d294ea84875063eda8b0f2fb433c705d12358528366a073589be8e661c6623c78fcd0966834930b13c59ac44df3da8d0ee5e99ffa00abd010a2b134f9d755f1d4586efe27c7fb792c8aed2b7396e8f11438f67c3276f4c98830dd62c148a4da7984a5cbc79b295981509f865f368d8a0666bea6f5d4b981f6a08987261e92b24e0a79c9c63a8f6c2c206e30552805013c4b36a4ca9481d16b24f6480f85d0f2eeff45eb33304ea3eaef4422356dd60ea1284491edcbce349d45a40d5a0b6afea0913cd2e48687528574cbf2039a92c277650a0f1971e69a96a5c8c443614c11da79e45f1409d74171c2926833c4da6c1491d768485513fd6ae221c7b6bd89874685ef6268e2a18a5dafdbd6b4bb8b26d793c9f1545cd7230987d8b66ec19f1eaca001632d60aad5a3b7ec0ed77576a168e79d41559e79e5e567f61d78f6e57d079e1d0baa531c769dca308d905e9c7679f8ad0a8b42a0099fb3ed0c21cd23f546ea4c2dc333a8cfdc198b7f7b3dec5449645c1842515e1576943f0c36d4fb1ae609f0b01bc9bfe969bef1cf7ac8a9182653815346d54f13453386d09c637829129118a085485ea401d05e45061b28832a8ff2930c016ea0f8517bacdd9fc1a649bd3903c2193c849e09c335048d1664479dc65142a094ad519d78e8196c59b64723540567e3e3e831fc130f817249f562cfc2206eec6950f79a74e10e642666e8f9d4a8682e16e8ade18e1b93bbe58f10ed51a4cfcff3a0a1aaa72adc17b4d1261e62c7b23fc482e285bd4ef2bc8382d93d315292a2ba0857491332b84b03690c449e156d42cf06e62e3dc3c5332a3f118dcae3e8f0ec41c97388700abfd7519e83acfa31c6996ce24aec165fcf0845aaf3d2985663a4623bd823fa58d00cd2b18052d98eab1c17440761ce55f10c68dcf0480b17a76ce7595ca9450ef2e4601a8828888ef51c01ab0759778977b0ef7d2f91c68912bd8993455359eb1668df2a88aec5b612bb95e85820344b77b243a2b661dbf0a9e4c1a243e8e94cf44af72b24525b281469cf087c0bd21463f1a0d06f373dc314525835f84360b30e71f5d95146e22056961d6c1d4ad2ee4d252946c2dde9b2d1832cd12176f8678a26a64bdecf05af286f6c30ac4040d066b439941f391ebeed7962368833a0e8b9a90855fc9da02134e9501bacce9ec28649f422fa8949b04b449c2e1a37a5801ea131b21ab68bcd1db4dc8e887bc37011b1a003e914dcba84c67a06b44303c4534f42913139c0d233785974fd3b5f1902065ff4fd9cc37c190765461d29d03bea78da7610f44b7eb05b588632f47095a05dc582f8c83164c1a67ff6d3f358f6a001f6c1a357802ed01e407eff3f4dfbc9cf7efaaca6c5667345b8c92021c26a20b6e64ba321e6f688032e5946f2d3caa697223c0643d20c54434b4d3c64da15cc3e930990040421277a4043cd7069ec3bded9627974777924eae88060cc86dfe831fe5a94195bfd95241681aee232f88e824d8911bb11f249aada312196926dd51eb0943c7e882b33313e196c807640c9e939db99c38e9e97192757f1e3cf2ab8669e19f1c025cd1dbd5510d316e3574a12de20913b256958e37842b2009f908fa191c8bb3084c67f152c641845130f697e43c71e7929ecf6e275a380381c2be374031699db9fe8605431d19fd8726b4a128fa239fc6f9cfedfd0f3fcfde1a70b89f46156854393e275e34378a41abb27ac430383dc72191c42035a0c71aa010b1b2ca2482afeca8f6fda461b9f78c82ebbc499a587d93e3439c9cff38edb27fce050947658426268a4044991112bf23422a903c9851e7c2c625bbfa08d36d418e9fe70776d82b9d101edc13fe455e2459c4d1bd5076a94a01b0cd2a0c7ecee691137ad0a3588c3cecd7c5dfb1b0ec13a4716299b6784d93ca9a0ba51bb87473f8d06be352683f8387be3c9a314fed22dec73163f1e2a0a86f96e86ddd115cdd22664d3486e626d09e81432e65722126d161f21b83865981e712290d46dd6d35e44e5e3646c8610948a41ef4383d47e122a2981bea6807cd41863dc29ea1f64b03fc07a8c2e85f612dc68e801ca4a04c7a70dcdfdfcfcf47039f60c8bfe2a36cf3024998790bcff89f79c2bcf167b826061dcb05996b05e76793a06b9a0236bf0870fa4af1a5e4d00b0708b87247f807f1a87d8f979e1f6b117f8b8425d6b365bf8cc1c4821d6e15734ace6f3ece46bf68eb2dd2d82504cad8935cfec906cf11e3f53c35635a6a72c3f4027c118c794497e8c023236eeed0ea5fa96eb97a14796c9738e5d7f3e598ba249972f0fc8a4336e52bd82d211c1c1ce0a2130f61444e200131839c2960e00167d2ee95689650c24e24a3878eea5f0731b1fc47e75883fdc948ef04f283110613114b4091bb343b0044ffa255a824d2351655c76140117cfc23553eb80769b68fcb0c433103d949f7e72f71f5cf8da0e0eb80cde14844a85a178e389ea04558fb78eaaf6c1e1f0e93ac43a9b281d7dfac1f5ee284584153586651d347ab4682d483a94f969a371afe8776d982e0aaec0d73e584fe210e6008fd969ff362c9fe792fae2271e8a14055c208bec1bc56862d6354319e9e0b541ad643c54ea29474cae6c7cda22325bc3d72eeea6b1d8272cf6aaedc0ae6b54ad096ba03288f61b96ee10b4df766abe3b61fdff4530f5d20b07262c6918f4e17f43c4350dcbdba11b2ef51859f60edff25da2ef98c58e1b8483557ced33c1c06e56343eb11796514dfdf1620dc76ebce03e1b75a1a50a0a5747942e3e89e0d9e161bac13a5c1a48844215712a93b88fc7dd9ef0263c691806ae086b7b5461feee323b9481e87c5a9b6ed37650e4e889e020fdf028fd887622f4713860d37d243f73093faa9aebc48fa4602b08d0c0f762ca448efe4f1c7a25cefcb7f8a2ba31e2918a87ca7eb5da0c7d461c3c789193192dc4b609fcfb53c221e316237c6a9ed770478787cb7ed52d566a8e5d37fc3a3d0cb0313cfbd4303b2566981da2b9d7d0f73c3632f2142b4cb7d011d71be1fb62c529d4ec5c210a06e29d73876958b4875a646ec79c831b0de2b8fc31019ff1c701b2147452d81db68fb487be8cebc41da08506c777f238548f17f2b7de466bfde8cec79f88d77a9758d84b570a4866364676863b0e994eb4d878412ba04778631501ef3cc3c3980d1883507f23a22e97479fe42ed5eb1a36c6aec1621d3706925e96588b3025ac49216530d2d64c0edfcb5c18648bd6768eec7af4b1c79f78f2a9a7ef6bfb3e1a6d5fe8533a99aad68ce919b36ed98d5f3aae5728ba0dd3f04053890160862b17c3d67f749c25433b9b627945aa19a21654eceda49088f2191c8cb59290a1d23467c3c50f919bf082335d8813d6647818bd2a42d1b3932268104cbea21697ed59c2b65c39f61c8b1653668b6858d829174f91624c5ca8ca2155f4f6f450b617c507d188672130b2b811c81487e70abd7db7b8f1a87b4b8cefdc620e72dde01b0429c1fbe5322bda955ad16ee46da38644801043a3d9e52ea1d85bcb0d3628137952d01564ab5a808cafb70a89273ccf1646171088d36a58dea1c483a6412f64dfdc084737f848cb4d6caa6d20413602710ea9fdcf42633e7518fb4c47abc8cb8f1b93f19ad2ba869941952349bb43ea439246487c453d9b4353c046c3c8ad19756a26b0ad6bfc9410784265c79e738913200c9abe07a5fa2b3fd56b78982dbed6995d3957c31e99250eaa9a76199bc870113ffa2638c3095e6ee4f8961584a8773dbfcc16980ef397aeec103c83bc1a3d2d03a11ffa5eb885d246f05d637b1510a6c74fb157986eb770e9ae57c3a5ccd8075067164fb8f996c61a64dbfe749bb82090af5786b79c690e625ff00ad024aea1138429c3e0052c137a9e14481faef000923ab11b9e51370e5213ab421cbae18f5855c3220c0fb0bde6d05afb8977c0a813dbf7764793e931ec614604e9f07574ac9ced7ba195999aee7203de002c79ac3562a128c83a94661d958d32d857a274590206245effd86161b1280011ad531eb2897878ba440bc2e0196dce60cfb934649da474b26d77a7f6ad875f89c48efebcbc6467a5c5cf628bb66aae06883daf3d3106391b21c141d20f36d812b919c257100d0c0e46e326f916a7817e138b899a6ee63dd1471e536478d8a2db88f9c13dc1218b2eb608720dcfc762072bff276cce801d881f0a4f563b14ecc536629d740ed38103cf62c3a4c65799252293068d102f43580b793592fd859e579ba4a48bc11515cefb36e4ac67a287c2205a2316fbe3da7552b6f5267debdd8a43e684251769176806cb462f149f2da23ad6758bb8e9d64e2a9dd48575b20132188df617d78c6bf72ad58e20ecd051978a156772311f37d5968e4f641683ede972edc4d8ef39becb0af08f16dfc244ebcced55d6a9cc665cbea236ec03cfd68cc72ba6ac1caf0d3d9413bb1c62d21e054a18f021c2d1c97e5a01faf1ac83f274f743ba0674d5805733dcc210aad98d29df349b34b68b586252b11d0708c353680c8f6d8567c33e160ce9214b1ba87cb07b3459f989300e62fc2be4f85674a018a8636726e27f0dc7816792236574e4db92b1a022d143361ac4c6eccd8e07a9eac83ec7e1a0f04cacb2fffaafeada6fe42b91bbe2f77378907587e4499cf76784d8aa21225aa3e82011af9cba82df8851a298d277bf5d2781632cd08b6ac3ce4004f3c0a1bb47e9cc45b4cbceba91deb3a1a6654390a4696343101d840080ffd2277419ddf82447e4bac30eb8407b02f39d027576a4cbff02f2dd91a2e214be1d2371e00eb5b17ed67899bce61d302a3303b111ed7b8110fa8647584b0ef78dbf8912f5827132c227791407fc13558dd1f129679aa73a961049aa8ae247affe522594ea4b450d44c694b83b374a136d2651d79e8d429d1ec16017819489a720348834a2f008057cd8e9bcd1faf042f430a7019358f1e136d298a2dcee749b8f4f4612f9b1508f3c1269567a666f0af2271f6b8a20a9c278c872b2e8f8d640f41540a940dbd9cf17fe299b83974ed43f58dfa2eca9c90f3e7f6e81935f9c5c6af167165b46163511228765862738245d576807db32241a3395ff0334126bd48dac2a89b72c3d37d3481f0d6e4c4a47a1a0d9d9a242a8c20b1ea933481c3b8b38f97e51b8300220e07bf23724ecffe19b157df9840767f629ba7596fa6a74a3e2d18853eceb105d801355cbc1cd888bc0708b533edf71185d11278e9ea4bfecc10293c8fc94e35bf2f5818269eca8e690e9207767895ee2191e9d002b70ff552192c793c2973c7228aef0648924ec5467c56b2ad2c417750f2a14e8343b8b2e15392e882e83e6011399e33d553ae2330b6a6bd976636090072112f46c559e6d37a25ae9fa4b7c463c9d695b74315332756a2a9dc8e2c2a959b1fc7da62948dc340da91b5e3ab5c14e9250b3e604af581589fc90cc8c088e4cb2e03a894c108f4fa25893950d166c4d5244e1c44a9634981b2b3871ba20fa5728a432975ac91a9c96335c40d14e54a9e9861323d60da7b732ac98521541e6d7b11b1d0da39aec64db3fa993f77ba84e6d9ee2b44b978098245ce6c4c2a04c58bb234e3a06e2e2319940dd8d44644ac46008c6a290500414488458da9b0a695428168759050a83836834aa4b8e284d74f7038dd0341e611489c7c4390aa9acf245463738611de2f831d23e3c0ffd0aa54e4a8f7c88a6a8b39cb63b53e025daf403053c55188a8ece75dbf26a2e1a458517b1e563c720da73a4ecb0ab12c68ea7ed6b3886a99588a1bde85b06d15ef44d8368fbfcaaef7abeabed270d8fd4cbc4d15e99f16cf87dd99e650963c4a517c1049e56181c4acade5fb31d8f2b00b2b512932924823c9006824004b007ce0aa67384cce8b849abb4dfb6745c856ad0df31c372e1f7559bb08b31dbd2890357ffee34e1673ff6e87d0fde81cafb6d0bb80367e00a0c8115f0e9c1a264588c815682e2daabb636666bffee68fbb1aab58863e806a9d3134f47d1f06c7ddeaa0f47c39e1bee4f4ab1f9391a363a850c4484ac5f58f57f1936d8c9168c328a0c249263bc6bb6ef80656358be47dc2164b82fd973115749a0d414a745df4723bba488514496621cd05e5498add3e88fff5e2a24f1a2d4912c676231262fa799c8ab69da56750c7be43976bcfb6852ca4b0780ddf3cf8fd6eb85a164d6fe206fd47553d9903936365c2a0dfffce73fff792a9be5a352a954427282240592abc109755dd787509a5c5e6f18182c1d3be91a83893f869bf400c77fa7ef10b2eb93e8a50349c1808e0561a9f5a94332e85e2564462889c6e5742676037e3f826fb1a360088482e1f84b18bb93288b2f54e859e840a3a8f092a2391c62d2b96f00ade926e1a7628fa2826d3be8e1d4a36e60978e0c0fbba84a4ca293940a903b3151b05003d3e3b46660104af17129ddc3ba92a01ef08157d0f752f975ce80bda1c9ec5a50dcf79d54668d97f59d54413d2808e3643253e705759c2a580a1586f138955d12fa426eaa7433283d8d714ae1669317a699f2e7aae3e62b5325f8e4bce2e886854d31904e4ce8bf1a19da7568c0f5c8bc4e0687a3074330d2d8c867f9f04d530dab2c173d82063821b78fe6e751e4fea9c8fd0ff6a05d3b0761c4723d42872c9d140677b3d3d6b1354357cfbe683b868b7edafa6f1380e268b0eea66a7835bf5cacd8f5e1e969bf111e549bacfe1c7b4b124aebf61c1a452343ec9c55f68a1b2ed20d8208715c8fc05346b3d8a249c0a39864004dff18f5b08d711234873d4aff984e908015a84c66b197604ea905777876c5b46d1aae4516d149a768caa1416a92f641e68302996c1548093758a045f1dc0a2385515458fd30fa8e1676d1b4bfc6d21ea5696762698fd1b4b3b1b4c769dadf62694fd0b48558da93346d3196f6144d3b174b7b9aa67d144bdb49d3fe228eb41ee2ef66ba72ab1f02e548acf0ea5f216d573ced0ca43d1a4f3b0b698fc5d3fe06698fc7d31620ed8978da22a43d194f3b07694fc5d33e82b4a7e3697f81b49d61e51aa6ef6013708e72ab66389e05e7b6ed44a3fc6e04ed4523c1dd2eb417eda2770fa3919d3b613c7b949eefcdefbfbf078d40f947e33423c0e531348a1edf9d50cc8db7397c09c70bdd33ab47575f47abc7574fa0eec7ddc5d513ab6f753f2a0ca142788756dfe82e762f762fd18cf130e73cfcc668cfafbeb57a025e12f86a743f86828c82de46d9c71326a3b838add8a5d5a3ab6fad1ee58a057729c5444ea858901253ecd2ead1ee627761f568214c0805c413a2aad5d2aa5deb2e763fe78af1eb945a2c3d548adfc75462698bddf38558c247c9dba83a7a4a9dd5b756df583d0e65d855a00a5584a50935d85d4c8933ab6f751759f98775ce6cf5edee622c21a64229dd229fae9eec5ea1f5a4577115585ad012f42eae42581e6e3979ec36a64033adc0e7a20eec2aa1004d0b14a07709053ea7dd56b40227095b81f39f4cbc5ec6c1f836705ff6da27e1ce109d43b57d6fbf3f3565bc361484c337dce728244ee121ba0e14ed890c3602390da5ad37d773025277dc9f1c4f979adc9d362ca7d80024b52a194bd773c6639af3816c24c9ee9014cdc58e1f7c581f36c49721662b87031877a7ec41e3d1f1f7add513ddc5d5b7a0b344938f74cfd11e96ca38de5dec5ee95e8b2576cf00f5ea5babafa768a1b7c713a1fb9f9027bf9e4aee9ee9deec5eeb7e961478ad7bae7b7ef538884dd0af1eeb9e5f7d2395b17a62f58dd523b2129756dfea5ee3192c7d3236cb851da5bfca51f8abd885d29b94ca8efa85ba8babaf77cfc09ba6d1cbbf753fa6cd7582dd7ebcfa7a7711c6fcee871a27bdd23d47073d9ef009bc8add6bece6c2ea7118f0d80d6db4bcee23a143447e4c764c6e203390974716f733752f6a94bbd6bda2753fd1ba17b4eeb51e25a979f4ec6bb802aa067bccd9bf7bed2a199e98f077eddcf95c495cdc37b7496eaf49d21dd7bd3ebf7a7c78d3deb8c2eaf1021dcc28d5461d71c20fd7db0dd7d30b57e85edfb0d30d94cfe763ebe96b1a4585717891382ae87ebe7aa27b09f1578b028b0cff132d7cb37b09be811b29fa2a213381472a6739eea2a222cfac1eef5ecb2b50b8ac362a50f8aeb6c0754507954b19de2b8027ddcb1202183e03143150700bc98fb9db93a21e27a8a7097a52d4e204b534414f0a3d4ea0a7097a5294e204a534414f8a669ca099264853c81f7dc3210d36124542305088a61a71f8917a01ba195ffd70f5afab6756cfaefe6d75617571f5dcea47ab7f991cae0e4538d213a2b2468fc06c1ea7a429903518caeb9ea2e7190f1554d30e0ddbf5a6e80766f3959a98d0375883c0abd1bb0643b402dd53ca1a64f9dc9ea03eb7fdd8f31d1d3791e1b2f38e0dc7f51024f06d5e4a97dbc82e84f8a922540c5d60c7cf7772d18bd84223bbbc5a9c2f25e48c9b24a7b7cde97bdbb683b70d3b6307d52079877e5035afdbbd409d174756dfd2e0cfea11b02234616368dd332c65f5758dd9120030a937845e40c6ea5b8036cfacbed13daf45ad022d6a096851f4afc5107faed9dfedaae6b6b41b16b90e0abb6171ebec8633dd8bd43ee112a84d4279527e94d736b623eeef94ebd6cdb8a651f0ebab6f6e1405330c9cb7601292e62927c5c0790b6e46e01662601864368b800ba1c358827e932ee434fc2d44ddb812f09b74fda6d16f21f4ba4a906fd24f9b86be05e17f9580deb883358d790bc2f12941bb71cf681aec16bad7564fa4b50ee66f219b7a41cf2b1e6f16a4dac920956f6d0a503dd60b4f3db635706aec601f506d0f40f5e3b90c403533a70254a13b578bba70a35845b86a0556091db25ae884ed5ed5ba37bb9f025af9b47b7ef58402abf0f44bdd0bec321f9cda9e4a6683a9f30f184c9dbfd760ea9be584ed83a73e78ea83a73e78da5edea81fcff5e1d376804f99abbf46d28bbf76a5d77e3d9a5efaf5587ae5d7e3e9855f4fa4d77d3d995ef6f5547ad5d7d3e9455ffd6551fd6551fd6551fd6551fd6551fd6551db6f59d44bcd0c1785d9ecaf8dfaee99e5fdb5519932fb6ba3fa6ba364addb5f1b2508fa6ba336bc8ca8bf56e91bb256e9a566df3bb41dbc43d829e10ce45ac7fdc9b5fee45a7f726ddb21f7fee45a7f72ad3fb916cdda92c9b56f0e802ae13e80da0e00aa1f5c41a47db3822b24fcb7fbb350b0bb852858e0ca24c4d44237f6bd5bbbbfddd5edfbb7fbc8384ed7f7696f5b9f76df9e407d7b82fdfb4edb13fd1dbddf302ff9ddada07ca29785f7c4d61878fbfb06deb630f0b073c0cab00d3c4b661b6ce37db21193601b6b2900ee363104ee9b1d70afcd00891590610464d9003d4c809e16405e0360b39ef13e90bda740568163b3616c268abd4b10db03c3f684b09908b62780cdc0af3de06b067aed015e33b0eb065ce1329014441ab637819146d163f76783ee01ab8f90b6034272e9c26492d8f630328a0a3b0cab62447be7e3b2c4a764894fee94924a53774162b2bc246dd74e49e2e3b2c44721adb564555a4bd1e4c7e4c9233b77ca339e60acbf8abdbb4f43a26f55fc380b59eaa3d2d42768ea5757528ca3e9fcb589bbb9d581699451699ad89ac58e3645661d6c6a75ec781a6e38042e9b9ad1f42df8636a78f697beeb692eb1bc262e3b9a3dc37e2d9bfee8640697731e2fd2c416880359208a0b0239540cc800f6c01af8e67025ff101fc48e46ff22e278b74fbb86d63a79fbb4f3f73fdf3e6d956f9f46f8b5bfff19d7bfba124fd69e692dd5a3b9ec5efbfb9f587e5e17f20ff141ed87079fd55a27f7bdc62468cfec7b8d7263bcf2f9877f7850fb2165427968cfec030e94c176f612174ba5e237f6308db25f6d2d59c8c5d8eb759c868bcbb89649199c7f51bd7ddabc7dda42b5dba7a7bcdba7c55118aab2d14336f4d69275fbb4d5f3888d19d25adc8088ad3c6fe36117b9b6e560951ff36117dd3e3d3b7bfbb4297564960dc7a2ca23175b46f3f669251854e4d73917a4df3efd4be3971202e1d05411d40407682ea53b5396a98b92d06d94ae4c59664994c44da51b339dd514a58c5463060e4cc3cc3953522595dba7e7dddba76bb74f3bf3a0a4de5a3a38cf46bfcdcfa00cff6220c16bf05f86efe634a30d4daa3c9639a742abac9856c93f33c39b2c079f27b3b5e1cdb4f1791ed6ae39e77a7a1eb0b26380818879005af3f09f419b799a087064b367af405b444e57d909c8929e51dc2015039ba8825d42cfd23c481c5b59dde0e89600ed646f86a3d8879e324acb3d8c46760ea59997e3143bd10e8425649590ec077b28dd5efa77347a88a94ae1018195c7f1249a9f0fa0f378397e5b99dc8c63fb2e8c36348a9eece5d87e724bccb67e54a5076eb405a46c53c6c09cede874b14fec7da51b606da70e761d50443066fa2c78cbafd3b7263c6456a4eca46d4d77cb536ee33b27d1281d0558811fec41bba2f4e8fb7bd06390301072f83ea4b38398c20df8ec2c26c6730478b2cb5d938943e883da4601ccab8657fb09abbd6283f00c694a9b037b713b17fe155cb7308a92fb740b9d23edebed9b9d63ede5f6a7edcb5af4b6f376ec969e2615cb3f96499e18970af5ba54fef1f6d5cefbed2f3aefb797417ee41618466e99fc68feb14cf2a4fc5a4d26bf7dad7db9fd69fb332e3f7adb793b764be5c7f28f659227e5eb7a01187cdafeac7dbdbddc39a5b53f6d2f77ded76881f724054a255a60a97dbd73a4f36ee784165e82ace0a67db9f3a754e166b3c0d4bdd5fe94eb152a78abf3a728de8abc2af0f19b214d361cd40b2abcd4e3314a1e55217d5234fc0bd04720b4965f68fcd9499e4f96d01e27ae1550013d22061ff64e8dcf90e6e4107a44b23b3d789943474699a81c1965a2706424cd153e1b52e81ce91ced1c0b7acebb5afb8bceaf3b47db97a1b6f0d25d6edf6c5fa6ad7d13faf0cdcee1f6659a2c923a4769d29f68e9cec9ce3b9dc3edab21b3f7db5f8a9bff863ec9098184b3a2b737e1125875deee9c043a26ee8bcefb90dcbedcfe92363e5569b97d9df27a5761f7231a3e005b3a366d8ba42b798a57928d2a910aa6aac72bc7eb732a5ebd53d1ea9de2d50bf3c20af204491553150cab77190a452ba8b012e2ce2351535e435ebfa05e417d829af03a04da73bd036d030d03cd7a3b9c547d0d1e197f085f747eadd11a479298a6973b7fea1c6ddfa26adea4a33ebda45f8493edcb9d1342c12f3bef768ed21e75827e2d3ac7da57dab7a0fa79bb454c9f7737a80f7445953eb49b0a7dda9733f4315c312f393c31318ef68eb7cf748e75fe3489f60eec1d6d2fb1a1a6fd45e758e7d7f33010f1e7fb2524777e3db817ed9d9898447b755dd787d58039e68d830f28d47519ea068fb573187ac309a8017dcabde6a4b93b6ed37cb68fcb0db5af1573b8dddad78a431bf5bd45ca6cd201378a0ae3ed0fe1eb0d9d1241a7c89c976dff9ef555e89e0aeac8a46afb4ce724ebd5199cd93c6aec1077b50d3ede3e23dc6c9c63d22a55ced4f690e0ce195ea58628d22feab83930282563adea12b4733423f3d1acccc7b3329f5064261a01c55fdbec36890918c992be2b2bf3b18dabf6766fc50e653fbf2d5cfad9fe920eaa9f651f544c3f934b9d6352bf29fd38c197fc8bcea9f6cdcefb28cb60a8a351853924f395e6a2ace526cc4d49fda5216a91fa537331a20ed410d44b1dacb918355100fca5fe5639937ceed7f672fb56e764e7ed79da15d877fded796ac8bc3b4f3fb2f0b93ddcbe7c57ae5809bfede38e154d70d71ed96813deb55b9635d9c69db2d136de3ad76ce7fd79e816d7da97654ed8b40f7608358863d87aaa8ae2aba2c846626c2d940a92d19565e9eaacb1b13175e69c3aeb555956a45907223e5a1ebf313ca23b487c7450b890427f2ef543095f5322f9d141b437ea57eebc5fa01edd3021d58f2255eda172840d3c3719239d4c61dff4f2f0c9d793bee97ee232e9fb891fb49f98ba5aaa4a574b55b566a4f32ec55830f0ddd03aafb7afb7af760e0709ed25b800cbfa32853d37da5fd0b4f6e75ae7d7ed6528f2ebf6174078b97db57dad734c58dfd7c1b06a5f6f2f013bc8bfd5be09a66998b0dcbe15cdff9422a22021dff213aafc61ae365796ab9aa52657902bc555e12ae458a242d1dba7a1217e2b4c005960885fe56638bb0573939aead40cbfde39dabeda790b9ab5f316107f0949f4b273a4f3560f435c66225f67c6ed2d306fa9642e914be31238f70d1bcc572306f3d1ad329833ece52c73794b17a86c6c7dcadd2e4f69ff169e54e7086a5fedb53ca57d865ac6d73348c5e2116616c9e9a26b51daff41fb0298d06a62ce74db58b8f98cd8ff40ed1bedcfda4bed1bed6530a9da97e1f5111623afedfd356533edf31edadfe8bcdb5bf79cd6ee562c11ea1c697f01234c86b94b3f0d3002de50ed78a4aeca9bed5bed2fe06fccdc6ddf502e1aca26ab7343f106f52fc288a95a3b14214a71a12b8428f23fa25c3dc4b2d30284cd7b3d3d6915ac1f0283242d3562e4b6af2b8c5cae3927494b8fd8b7acf328571545886e287a430e6306beb1f350d7796847b04a6f80f97b631e9a77b38b4c00b6d071caa81a5ecf651f40b98b92ba8905209280cd89b52b4adb2f8af8afb7af6698a031f11b63bb9c93ed0fc028fad77f8dd5f4fb74fa3c9724dac3b325f19606432aaffa5737c034d3d68f6a7a78034c9f04b3319ef4545ee597947236dfa2df5233aeda37e3b6851957579a71759519f7bfb135e737c90c366ded3932e73be2a6841dc335e8e5be39c3314c765dbafd01fdfddffedced0f2c7e698a423ff318d5fedb1f78d82afb8e4f6f6fff76c6f76eff36b87fd99e8be48e1137bccb67bffd6f6c81b6a02468075a8146a00ae840e553a9200a04e4b0ce7e8c1d437bd9bbfd8175fb034b3b801dec616d9f83cb58db67e2bae162ed45bf8eb5fd46d9708cbc56d68fb143990243e006bc800fb0c96751fd186b2f7bda01d045db676a2ffada7e95f4071c0d861a3de39e6192493486c65d6c4d66d9542a72346edefec0b9fdc1648e80317979dc8d01f643030966d9e6d77ec3ea451a37bf74dbcaa08f9a613ff62dbf07699cb577fb83faed0f2c9225608b3704ccdcfead75fbb72aac8f51f9f607e8611795d334f4fd73b155c548c775f6470eee5d32635bba811ed6a5a8be6e588667a0196292d4e2fb7a94225d9e6276d656f2f2b52845ba3cc5edd011e5a5f5303f5d96a27618fde4654b617eba6c93b79dbc6833c87e58df44a8c4bb431ff7e710d772bd8f3eb603fac80c92b8be188f56b88b25c6c3153eca12e3f10a1f6389b1ddd82c50e2fae2c7b1c42758e28558e2932cf1622cf12996f8492cf16996782996b893252e04e112d9af2a66225433153411aa998a9a08d54c854d846aa6e2264235538113a19aa9c88950cd54e844a8662a76225433153c11aaa98c9e5856c647294b83a3c0b0b3bef0c7f5855beb0be7d6178fac2ffe995e5f5e5f3cacad2f7cbcbe78727de1c2fae23b342992bdf0a5b6bef089a07d677de1bfb4f58577d717ce73da852fd717ae5292c5931a48583cb2be702eb8ba4a4b42ce89f585dfaf2fdca0c5feacd1ab9382cd9fe9f527f4fac2fac2656d7de1f8fac2ef44dedb41eab9f5858b69da0fa916371219f9a06bb451c286c8ac73466d793d93d54bd627ac494cfb1ca89836f9055ae2025390c97a9b2a1c267db2be709a8afb3d7d0661c605aae86222e9d8fac2e7e2e19c5f5f389b10f0dfb4d0efc4238f66404542dabc303ca846a87d52e95057a58a49cd4285f241f95e5ac85538b661b1f9ec807da8365aaf235005fad79f152601231b75dd0cca3cd6c186265986504fed54332e92a27783fee90bf6c75ed05f0c37b7a8c4c3f0a8e03ad734cc500fec4f199fcd6419db16cce8d95c808cf716c37efa765c86d144bda88d374f9a868f31bf83f11fc6afdf213192fd8efe3d477bfc874a4f7f2eea3a13f22e63ff091d3fd82892ea5581ebbf075d2dc6f20f42347cc494b3013de8f418cb05265d393da0a428252b7b6b7d213d8d508a565346d18cb1b9b0bef0018cb6aa89829042de9db6207ce2fae2e2fae2b9f5c58fd617cfaf2f7ebcbe78617df1e2fae227eb8b97d61717b63c90e2372b68628fe57c624e867e7f6ead2f9c9da763231f50e6a12fc1e7e53cfd7b795e7cf0c37c5e6c58c2fb79db7764cb0579b67a9d209d49907bfd593e4a4ece1c4a731a08562c529328d094da4494cd0ff6a0c706d1fc7c5a0afc4b958fb544c8e5fbe8713593248f58eba57763451e2ce5fd081ad9b5d1890628986f72e17e2ce90c9bbdf732cccc19a942b45fdef59acee4d3ecc92f7bba2cf56437bc5854dd4e1b77cd7c13029c96fbc1bbbe01ae9925c90116eb4b92132cd697244758ac2f49ceb0585f921c62b1be2439c5627d49728cc5fa92e41c8bf525c94116eb4b7fc9eb9a59929c6701d54cbb669624275a4035d3ae9925c9991650cdb46b664972aa055433ed9a59929c6b01d554bb666ca56bc656ba6696ffbc7eebdafad2dbebcbefd3bfefad2fbf4e2f7ebbbebca4a5b28fae2fbfb9be7c757d798111492916d6973f5d5ffe838ae2fdf5e53f010f45f699f55bbf55e5bdb77eeb2a657e3483f97b94e23f3328feba7eeb3fd66f5d0152a520a8c8a7193c8ee7cc3e4aafaf66ab1ca58eb56f4e5f52ff297e139f62ccbf0685febcbefc175ae24dd1b2d0fc5a3c2f263791f787888eefd1dbbfa689ceacdffa2ca8483afb77b4e1ff2a2af569229b3dd505e860b47a89ec85f55b67d7976f064f6e7de9eddcbeb954b5935555564f5225493524aa6f5c5de1c2dbd6ca6ec4f1d7cbdd77ff9c7c1b76eddd9d430f9e0a7b827fa58feaf59ece3df638821774f93f7b46ff4b0d65bfa363df512ef6d6efe9f364c3c41f267b7a00978f04bda2b7fb2f4bf41fd6977f130c1af7cf45b87c06fa6c867f10faf86f85c267e45ec2e533e2b304eda0760902afdf88b7eac4fad23b727f608cec0f89d15eed178c1793fb05974f882fc27fad2f2f890f959a7be8224c95947b09453fecc137f416460ac81d861220a0601afa0e2365e4ee4378624b3dd8853e444a7d0f1d884b1fae2ffd757de9ccfad2d9f5a5bfad2f2dac2f2dae2f9d5b5ffa687d69eb4f62f9763a106100f92fd1f1feb0bebc344fe1e012478e907a787d79613ed5433f5d5f7e7d5e20b325319cc2ed7c9ae9f6f733a654deacc351d64e9b733bcadaf63be17c4c3f8bbbf642cafaf4ddbb23a5cffaae9d92d2e7be71d764ef56fc96fa28edbe8ff241fb2895d11b4bbe475b7c4be237d2f88985ba0fe38e955a29c9a305d68d83a91c16785027b3e4604d11f64f1efdae2ed48fc5bf8b87bf4b06b0e4517245cd9fb39d9f13ecb8b27d50624325c0ff9769b6a04a8d18d2fd8ad28d94d2fd89d27d8934f169c966c57463944d1ba7221eabc321a419cc26191c92b75eba29a22d11d9ddf503f4b40a6ea578d09d629270852955158f34e8061e79cd0b9ebf4231f95e2881e3ec29af14e596ad1550a8ba598a53f23d125a1fc06593c85e27782966532f4b599e4c5fa18319413363e2c641a362a5869d7ddec0cec149da2ac1e8a86a9d4875e5ed912de311caa0e8fa6506b8074622ef68c4ddee28dded8ecaddfe2362cd12477b6662a2509b23b30e71b412f19d8335edd9b2434cad84895622076b649658da8f6c9f38447bd6763ded4773c4aadaa6ad3d0f4963bef663e21cf4f379877f442c2111a481282ae8d95902324000f007d69c730e7fe57edfd45ef22da17e89381510411cede7d8f6a9bec4d1f663dd767a9d7811281ae1090c8113556c3fd6f339e5f6fbda4b509497d67e34a7edc7f7fcbc8cda3899acd7d13e85238d658fbaae84229f2b6d1ca359e3e0640e975a8a1229954bf8d6324ade8d93ed79e3a0318b74dccbb5f62a66fdc7c6076b19e4896d3352baa8c36c8c50ae0a8ee9dd320dec124f41bd95be30bca34c2c2b3b00dcc444e1a02df580f916b24899f83a7249d5b674625976eb73a5238c18a604e7504796efa059050e920683135f0a99b7cbb710f11da54b4b92a7f3621c51c99c56391528f1ca48509b34de9b824d93b3613045e6a052a032796fe8b9277e00b7aecccf12ef6e36bfdbbed7f001e64681c3c820da8b0ab87585c6729e255e1273259115e372df8f21b84f3b839cbe69b76d4c3bcfc1966b628f6cc4967388eb9b91f00ed4b0da9db68092655110b6cd756571db12785b1ed080f524aac0237be8d643dfd2b134aa4ae8b489a2f848cc3a1aae2e712f776b49a5920ca979791839e2c1a0f0e561e577cbdab42e6b52558cf969a25b9879fb301d95208170f75f5225ce5f2a6033cf8c8bbdbf8f4c5e35b4912796a1f7661e586d830f0c5bc8c55ef0b4ec2adca6d4e1bca5cc37f582e1d4e70adde3974b522bb4a1370b7b5bf75ae9d2409b9b69491d5b77552d1d5b5bd7f94ad2d0a29b7a9ba7894b2af7fb6da642efae9b301e5bd7539acdad6ad2aa0da0f33e3729157a77036486def91b547aea88abf4eeb82aefce34b67c7a7c6ad9815f717eaa616a753cad4dfb96a14dfba6a161bfcace4f6d78a45ec6f400551b7e2d7b9625e8a4422ff23978a6b15504a9451059049170355d0491f0c72c82c822082c82ac22082a829062a680d03592f28c445d4116d1a789398db5862d2e6734dfb31d3ca3b98e01df11edab778837eb7878466b10f8ebfa65dbebe59a092a6811bd08dc8bc0b6084c8b946311b8158199aa2209079145b486adf99ee63ac0406b10cd5579d1b6f040d54d06abec15adb2d8db2354dc58bcca14f9667d3fd4fb029f0f17f959be1f4ae7fa9e83d574f737aa248a4657f427d138efd370e9f70c05a90a4799e2ca5e8c7c4c7385b1a44ce1adcac7f341c6acf4457c4aa59a3dc2530a171fed3dd3fe57ef1047de7db65950d2582b341cfbef1f9abddb026da81b30ae447406b2ed3b0353d8b8db2eb195ded98358e599a53dae01afae345029fd0714d841c2d84e7b651951e00749f9657b11d47b10d47a71a8d57a10e8414dc08248fb65b34b9782d21ca8a73db2d90c9a01030aef7c892736c140febc7bfa5f27268a72cf6be1613d7656d2373e32a3dbf7803e680f28581515acb22a2a38df5986b133ddaa749215ec0d42cd8dd6a286cbccde30aa80fe9bd4e0b04d0d576d6a7180c1e110cdae783efc3283c3219a4e5c7a91717a5b70b29d4e1013ac13c465eb0431f1fac44481a940938c2afc5245e82fd585d2507d748202952055a8a51314d10ce5502e72b4dcd8b83d36b9776062c21d7c04d0ace2a8b8840d5525cc86a2a6136fc862bc1d8b1aa646945784f60b8c2837af1195361fa256946ef875625589a61ba6e95baea61b6040d25f5271085c4cdb3efccc124b6709ae8bcb9eaa5d5266945e2d6aba59d474afa8e995a2a64f17351deaa0ac42c27cd2ab9a6e6abaa7e9154d9fd6f4594def1551f3015a4fb976a88ceb441e9cd23403aa1cdb580236681c2393b893526bcb4c321dea6994a18d0a3079499492b2595b2effa17878d63710a64bde061892aed9bee30e0cb27377e8a4a4495cea50367161103d820a790ecf0b570ae4d54427f5d65fee952af92c0aa10bc3b5f7409570a143eee753339c7bd128f9cdac4015620ac4dfc0ae8bbd7ba1d656da04f4a3f54bbf753163d1c694cc6ee02b365cb656239d2d5669c8b3eb7c89049d08526e46a2b9a9b27c55064635db4985510dd665d46c87a48a062b338c54c1602f916ea4cb9584ba922cb15da84e5c3b95dbe405b1d5546e0cc256d3ddece90303cebc35efcdb7cecde39c8b2d9447a9f55874e11490c4ec4daceadc8b0a564fba4773f27b8cd2b169bad6b9e44b614c8953df18229e2ba0f979144d7955be3b24a86321e55f4fd8e2dfa9c52415dc37a5b68329c50da43df069d089a5b56e5ab6a395ff7e9a1c2496a6fb65626933b35f7de0114bfbea1de2cc86bfa4a2b94e8358dac1d6877f3fddbaa8c19f696269a6e17a7603eb5ac3b15dc322951cf32f4c012a9e4a07d154b0f6d53bb32072964a63b29824900322a2dc77a7eb46c730b4078d0fffc224fab03184867f0162d815c86257ba5f661720955d0d80ec795edd7f6117161e0c332bf3415b88ab0ae1f9aed3601754657649f56697a6e1b28b86630f1b620be1f0307af99503cf8ea202675780572d58430d6f59211059d80daf9c43a66c87449351dd773dd4704885e824cac9a2afa843aae435e4d9a84cd0946f9a4d44773112bd18e8f00af09d335c82e836518753b8a83052441141389602c8a3004f3bf9087e4a25ee8146a3bd6c9ef6b279decbe6692f9be7bd4cd6a2e24a3c8179daefe679bf9be7fd6e5ef4bb79d1efe64da253595414c8a152e6f9639dad0023c686310116507a70d8d89d5a72d5a007d30e58b1613e386113fd00be5cf4004db6cf102effcfff19b0d030dd1fc7309862fb409ed55c43609d5320752fd6751546e983c7688acc2197546c4b77d13074996452fc1e576d253c1d882f86999f8fd4602f2a345a1f0aff2efde846ee713d35bb1fae3f033d9f8eeb18bd7d3a5b37f89067e8a59c2b8fcc7903c0169d81af28dd2b968535695578ad063731271f975350b607924fce971d826754cbccf823662baac4d30dee82cbac679a5adf142e451b10ad1824fbb431e8a5eda75a235c9dc69e28931e3cd1f036bcbebf4f944a6d8675d88ae7c99a6b0b1e674d3c4ebef3983dcde0465c6de859d6d83290e4b3acb1e903ba0b032e95cfb25613cf925a9ee2498a1b71757f9f2255b9196abf154f9135d4163c453d7829019af337925db2dfbb185f75f82283cd6d91ba7c34a53b31e9f3a2ee53feb8f835bfb8bf0f4be74f4ab75a17b7e24101bfbb7d46a570e00434138c9bfc465cddc593aa7ff581dbba5861230dbb563d32baad960d970cb98bd152dc0597f779ace46a47ebf0f74b5b3262326677ffae3583e70846aa788cfc9a5fdcc54374ec195a79c79e513dbc66533c3c10163c3b7123aeeeef9373ec19f6ce99644bbe7026f136fbcec9561056942b082baa1584ec42394915b94bd1304b65347a27e7934db81dcc38b485a65ca4f2d48b206a1f187426d12dcccc3a9cb0eee8af85b995a7fb650b07b61efdb5f0066c3ed769583865f9d15f0b0716a02fb105d90533cfa58f5456b5cd5a8ff2f9cba0bfd0bbc4145e29079d0b7ae6214c2c2cfdea0393680ddb828bd645ad75d3234e6b5973bdbf9f66cb4abd59c723335aa3f521fcb8f6c696956a0d1b786aae07ac808be6aa8e1e942e25cd5bb8f754e737679da8649968723e48f02c32a1724f70cf9947ba86d4222e9acd58420a44075b173d07abc95e2564e6c12c209d45ac131b5cb92d5f85179726e6d47a0bcbb544719620f6a6f939d4572d054c7214ef6c0e96b91610ce22f6f2e7e0976b05e52ca2a3484695f3ad4e858e390bdf0045c71493a60fa66382396fdafe7ded9e5466eba32deea4a22677df53f3f7395693e5fc35c9d5f3829adc5dff13d3def77425ec282a34a0bd1533deaaa59d6e56663d7bd56bd68ad7ccc5ae590b5d33f2b2324b59795999cdacbce666d7b4a2edb5a8f53ecdc4f617b56e8b99d8caacd2d09d556d956bdffcfabdcee1f617edcb9d935a7bb97db973f8ebf73a47b4f6979d639d37b4f6e5f6cdf665adbdd4bedcfe5cfb9f8fbffe7de770e7687ba97d5deb1ceb1cfdfa3ded7f3eee1c630c80f8ead7efb597b5ceafdb5fb62f6b9d935f5f6bdfd43a87db973b6f748e4276be7d744c29ae4e962a7125a8020af1392229b5af76deee1cee1c01a1ede5f68df6cdce31e076147e3a47c384b73b4769831d0e937edd5ee697ed9b5ffffe7f3e6e2fb7afc7b9bc436faf8bdb37be7e0f6ad239ca12f25a4a4c47ae13d7844ae772b91cce3f9f01d5be4a39727e821be7a575de50f2b9e7a79bef289576a8cd29b608131e7dfb8bcef1f60d1e3369bc73acfdf9d7ef758e7ffdfbf6f2241a1bdfd15efafaf79d37befefda4c2e8da38a3a1de27a10fa1cdb3bd0b33adfde7f6e5cebbc0f8a50368bc73a47dbd73bc7dbd73b473b87d3d55ff88e5d6fe18de939ce522c0faebf75957cf2d8f21edc2f8ff9c6fdfe81c6d5fef1ce1e02da75c51befd073a122d7ffdfbfce5b70e908523335b63253504604cc6d4d1ba070d87aafdcbb05124af914a50742f2a80baede502c007d661a444308452a2027b58324ccabfc97cd1d8234c811eeb3323c1ae608cedbcdbfe020638e90acaf69730f0ee80810dfdcfc730a0b111ac930a241eaca8cc26ab875c517ba97da3bd0c83ba7289a59aa4166114b6b672bda59a448f6ac48667d5da4b797629aa097fdb95cb305504cd0813d627940b3279f646806a04a7f2f147895579feb7691b5665b68f58b705626d2a116b5386584751e105dbc2738ef64c6d8e4c39b6a395f09ce3d1b09d86696a256c6825520356da8f6c676a8a58169ed2f6cdb99e5622baa13ddfd41d32a51dc095da1cd175eda7355c9d6ae688efc04453b9209307efa4d24012880009208072a79c7b003000394d5d47fb7d53a3172f99bec5ae78b5d835712a35e2b09b17b0cf2e78644fc600eb73f9c27b8ae89e2008aa51228e062c7387f7e4d13da1a9b512d15eb8fbe09ec3c3c883af2ddbd7e622ec10fa32c3d71a6117116b47b5ac429d0a07fe6630678fbd4a3d0fd38913a811a2ec209d5cc02f0bf73d4f74dd9843b8dec343fff329db6966907178c5f7ca48c922e86f4cb789825904abf120a1c61cf16a784a41bf416ca68066a3a8502773aa809e0ce2342dd4fad44cc91f458566a5d6d48d2a228669601da7f63bbb6e10c8d3c07a0aa2f060e6e98c3adf7021cbac8da2029e9384ebe47b2dd2593adda438e758768a99ae8b2d21d2ec125d8726d9112276afa4b7838ca242d99c6bea7a33b5ffbcd964c5a6cca645747dd33b42a6883e8f0d6b1e4fcd1be67c53d7e7893e4faab1ed213046385837e0db82cd009fb045082ec2657b96a04747e8d861d90019ea75db329bc877898e0c0b556cd3b47fe91bd844af12d3ada5b04ece289fe5608dec501a7b873b35926d85e8c065cff80db4078da7f3e05fa130840a780afe1a26fc6dea7ae487a4fe4e497e8687d1089e429e8d46764e115d2189542305d94dbe24b8a13246481584ec920b499e67634ca18132fa81eae80c964db7d0ec44f3f3885d3f1eb97e2272fd54e47a64a79c63fc6980d6bb416de81a8feec48635849e841f643be869b84873c85eb312d99363c843bb252cae307817b4835ce98029eb29e3e5d4b140f1dbefd6769f661fb26f07c8ae2b2327e8aac809b2786c6e8e806c8407642322201b1101d99491f1d301d9402a480479421a080359200844007be09cc349ecb66e583aae6a754c7f3cc371e1d7b6e88f67b3db2987c08fd9bae1e83dad80405be00d8c812b700476c08af2c9e7cb755b37b43ad63c43b32dcdb3b529070a3f28ffed162f87e9b91e665c2f4ec617c58ccf98c5c9bbf3aad2d85606d271155166d9f1f30d54b79d2ab1b26845a8fb46eb6f7cde5a411c8da06fa06aeb6f8e8a6decc0491ec369dc55516fe57e6cbb9e1d3ddf357492828ef4559a6afd8d6fd621298c1bd98d2d27a0ee40e2e5d98feda54b531f20b1a8dda9741042a63c543eb1a03ba83764e36a8a6b8997abb7fe06df0d95339065a7c53679755b7f4b67092f20e46d12837f67a6aaf5fea6e1078e22c2ed908e5d21aefbd3c848b3b9dd8bea13c60aa368bc40a0154a2c0838583286451c713f99789be8ae285e64bf4723bd0745f87daa882e8aa003b82ac8ebf4264d4b8923bb2c0fd0c1022552ac74c95220a5645bd80be5b0db347d292189d22564b13489b46620ed455c734261f42e4ddd4cc802b284289a641526236f69fabcb6e486b2c8396de33b27d1682c616452761c944e940095a800ea8b0ca03ec7016aa975d639a8eda300b5840ded4500a82f0240ddc700eafe00a0bec201eacb02a08e91831b00a82f62ab08628ba1cc625a64110416415611041541c8d604bbda6f5b9687ab1a7c1c70551b3388e5d27bc3f3e6ec4a4d1bb32d8b3834ed398718f0bb1fd7e13ef7615276512bd9456dcc286a25a3a88dd945ed39a7a8edc739835dedb7b592ad8d195ac9d0c66ced39e75e9f2595017ab71de64dc60abedbf50335e27b04f975369fffb39a933d89ae763473189cc529e56fce228e789dabc4f58893cd3bba54c024de418f584164d368b1bb03bf46d6d151b3b6a30a4304e36a036307ed67f0360d9005fe551100c2957c3f5540987ded525c6ab9b80488987d00d381487371d1f39195f251e5236be6a35290f5c134abbc124c933e98ee83e93e98fe5683e97d9e1a4eefa02d2747d4adb3001c1f04a46e9ded63ea3ea616147d4cddc7d49caa8fa9fb987afb63ea7d5e1f55f751751f557fab51f533b50c545da9f5fdd40f02536f1812f7c1741f4c07fffa60ba0fa623547d30bd1dc0f433b53e987ed0603a16243eb2f6bdb0f6feda85b5a36be7d74eae2dac1d5bfb28daf50a6b6fad5d587b7dedf2da3115c19b6b8b6bc7d6ceadfd7eed7c3ce3e4dac5b5dfd1921fadbd93cc7c73ed623ce1fdb58fd78eae5d4e269e5f7b676d61ede4dab924ef4b6bbf5e5b58fbcddae5b5ff4cf2fecdda052af83fd72eacbdb97679ed75aa764abb4fd64e50a24b7282a36b9facbd91c5e1bdb57354549480e54f0e85a829d1d627d716d7de5e3bb77672edf2daa9b58538c7c36b97d6de4c2642a31f5dbbbcf66bdace89ccd7d7ceafbd2d4b3cb6b6481be7adb585b553c9d63bbc767eed04253a9fccf864ede8dab9b5c36be7a2d58905e3d795e12d7455788b5c711ce590535c6640c60c128e0c45ab6ba28535d1aa9a68414db49a265a4713adb18165bb491c78770b7787739cd7d5fb28ae9c8b76f3ee82ab13c7d00d52175fb3b537d74eccafbdb9f656f45b66b83f29c5b6e71b966c77be88f404c50b74c0a4748aad1342728c71cdf69d211e561cecfe97ec39c99621638a51a2efa3915d990731417552c7bb28f7a0c42aa0de25b2f185ce6b6fd2316261ededb5f3bdd63ad311f8edb505f8edb5d6998768c85ae10c832d1d9e7ebb76a1e71ae7b5b7d6166981536be7d7de583b170481b8976b9dd74ead5d583bb676917e014eae9dcbc0d67c983b07efba0a64affd66ed1ca53b4ac76478f93f593bbe76011a418eb7f58751b2907461347d8a309efea79c5b3d49751e3d9cde994869a0aaefd1070323b3945b4d4629e348174843cf5a7b636d61edb09c9b1ea7fa0db45f7ac134d75fc9a51452c83934f9f80c1c1654356b26a968ade49da8e190061b9ac2418205eb550d3f2cb7e89086892b6460b87b6ab83a840a43b118ca3111b6eb89d33f372b6488cae89e520ac902fd4f0e51dcbedfdf1cea1fd9d50bf68fecda12dcdf0feff000513f8a3ad00df7397e29f914f3c745339061b91eb62a50255104cdcfa35768eb161b8eedd950e3a267ef675dba824d5330a5b51f674f22283e59883a5f4320494c159024a60c48be6cd70d8b7e209ea556f2cae9952b2bcb2b5fde39be72e1ce9195cf57bebc73545b5958b9be72f5ce9164f21fe1e6ceebe2f6bd3b87ef1c59b9b4f245245f5c9e5ef9f2ce3b2bcbf1db2fc292efac5c03ee778edd799d259d59b97ee7f09dd7572eae2c51d19cf2cf2b37efbc7ee7d7d1a4ff67e5cb24d56f57aeafdc8c2766ba6a7f442c43da06576885bebc733cde0691e43fc2cd9dd7c52d6b83cf57be88e4affc865d9ea66597450ebbfd222c799cb6c13bbc0d8e876d709d578453b23678339a046d90a0626d104bcc6c831802643de880cd70f810f7fb4b21e0f7e2b45940900697d5d21d4f0e0d81391f07c40c13bc096cd0a7a3c0f0d870d123ae37c0f28b4108f9819d42e5a261e9e4b557a6060a80c40b838383f05e0f0f03771a571e46647698089f2c29f350f3943e5755c2de331e6f8b22cd1f184ced75ee857d550d9597bf02ebc7e73d5837e71d9b7764de81d9dd5b41970d3a2befa6bc6bf2aec8bb1fef7239369aaefcd79de3f42db9b27273e5135aeece7178d7ef1c59b9a2ad9c85fe7ae7f595cfb495b32bd7efbcce4799cfb495bfc03b4d5f097a03afe1953bc7a09bdf390e8cceac5c58b9ba7275e50abc4179274798365c0b26fd732e19845c5f59e2b280ff9515559cc784790c5c294fca91f2a3dc282fca49f536aa2c325798646e6f9bcc453f40232359ef22e780f6a2c2cad2ca128dbcb6f2c7953f6ed84e8b30ba735830fa8b8491bc536eccaa1d60d9e81154280c163d9b8a7e06bb6460707ce7241b20569694f82f6667a351343c0e9a4e4e4c14f7aefc712ffcc40e27c8b789b8365aafa37d0a67448df92224f928fff9e139fd110a45e2135669fa6c939a7e12338cea95332b9fac2cad5c875711fdea502fbb1a3ef5ec939c411c33acc7e57451eb7a6571e5c6caf53b47152cf39f1cbdd128e8b9226ec35884282cf872e533f689870603842166c5b8de8ae0de3a99c2bee9e594f5d9cab25cda67bda5e50cfa9de56f88b862c2c6a6eb47ea763dfb9c63f6d50b3b1e5d663094d6920d7014e6020aa8db757196b724344b04a4f37093d9f149d84511371a6613605092a73c4e092f252cd1c2af0e1586c448fc30d88634a00b1d2301dd7d4647497af9f99da38541d57895d77973e7d8caf5ecadea1c96a6c239b2ef3180d06b2b57d0caa7fc4b7cfdce913ba756bee0f8f38a7286346f01ea9359b9b8b20c4238d59d53cabded01a30b52c7cdcad2caa5952be8ceaf61d051ee71a7d9d7efc8436072162b4b0c7428f7bb7302099b5258a53b4781ee1376a9dcffce4924ac9a3156774ed2b65ca6568bd469039513449faf5cd9eccef895cf2453a594fdca67db65aad4f5eede6542ccbecb643b4c94126bff8f94de096bc7fe1f652f0d6b8ab5614dad849d4a2d581cd6d45ef42da2bde89b4dc9e2b04a6a71d846a2ecbc882d100b12419e9006c24016080211c01e38e7307e98835163af8c76c0272efcbe4a748b5d1da8f90ebd78ce31e0673ff67c47c7cddc6bbd7c0b980367e00afc8015f0c9b9e4cbd74ab676c0d75e25da815ae692af7b1e65672be1719ee55c5bb59a8bc2d203363da3d4eb85890fd875db71ecb90cd2382296d34511f1cfe92a2db5f8d87cd34bd8f5043694936fe54453e6b2ad87e9f98e5290123b595b094814f975c6a1ce57212b600737afa598831f19ac441b14eb49a106f52e290106bc785268c14f4e55c209365049a1043bae53891de8399a9b0e69e97af3963eefe8f35e6d50bed46a83c1260120ef94c0fc0092d383e243d29dfccc780aa969f078af564012eb88c75d6434ae9745b38bd2d0a3d695348fb20341d971ec5e2d693f7da72216c2a7bc0faab607a8dae767802aecf741d5b712547dbbbd8e7d60d507567d60c5fef581d5770a58edf3fbc06a7b00ab6794e1a089b5a3a28c08dd0756df556005f86647a9b4636c4c0eac28081a1bca425651925cd04a56a08fad501f5bf5b1551f5b6d01b652039567faf1a6b70950f9513903a854cb7da0f2ad042afd69b53e42e923943e4209fe7d4711cab7cafbf3a3721f546d0f50f582f2ac0562ed307a1cb7d007557d5015643fd0d0027d4c956e933ea6ea63aa3ea6face60aa17fa67396c174ca5de9d6eed30a41bd4fb98aa8fa9fa8eaa3ea8ca06557dd0d4074d0f1c34652090fe0eb46d82405e3e988140ac837d04f2ad4420fdc5d27d1482faae9d3e4a896af21d4529df2ad7cecb07fbc06a5b002b5b09ab6c15a69aa698cad6a618a6b2b53a763c5bc380a9e066dad6a67dcb80bfa6616bf8ef170158d99acb9095636bf68c67c3af459195636b3a45568e9d0f594d630b84835c900a224122c8a3d24012c800fec03a07b4d28d3ab6be7ad3d64cdfd2698de02f71661ca2dbda57d7f1df2feab6364b2c9d26b8b88c3d95b6295ca51b75e04bb952a68c21b0034ef9b0956e68a6afd5b15627505c9b259afb80dc3bbd964b8f8defc0482793140f65ae9a9650e671f78c9b7812a9cbca07cd64acee71dc989c98287a1313c57a2c7a98e1fea4943bb019cd2c566ad8d9e70dec4c843663af7ca3b0d118def72c625ca3e815eb45fa09fa49f140b154bc9ba8713864b64fceec6ee0eff3b66ee0bf5f44d3a417002ed94e359b328e7fe57451fcfbbc411c35c718fa6d60d7b03c2c00b0bcc45602e086ed7a1910185b1e68ae88eeedd28371ece90c002c27a01897f6c914bc8ee3df74510a716bb6932a1801bf4eba1845b81e85f3c3c3168101d0772cf8287df5267cb85c0fbbc83f687818356c07351c7bc635ea7edd56206560951242d170ddb670ba5a51a48c25d56ab22f51ba5a015086cce9cd0265ac3c0d0717ee0b127cb217127c724b90a0ddc781db01074610d6980d56538158a40828ab08b0a5a8e1b20357cd22202df86316355cb58b80b58a9a5df18a80b68a9a6e54b24fd763a8880908515c19505c334471559b81b80a0771460cc4ed4eabce2283ee41e3c3bf2016193686d0f02fa648995dd4b1c32e70d911294d7631ed5be2c2e434559b5db8a4c12eec8ac72e2c7b965de84665d810d17b43257e4aaae435b4070dff628058c4b1e70122c36f1d3b07ed795c760c73be8e9bf63c05c8f31420cfe3aaed7af63cc06303503099b72b9e0fbf963dcb5374a3c2af884526268a7b8135fdad6387fee2b2c3ef9bf477dab7f8afc9f2ab36fd754983feda158ffe5af62cfdd58d0afc0e0e1bb1d625aed24070550602adbbc6ebaed1ba6bb4eef08c13c601adbb16d65de375d782ba6b41dd735907918edf23fc7516668abf0fea38d7c33b4aa5d28e58346b799cca34dff1faa6c34cc7b5cb60a4c09d91ce3a1abd93376a2e423aaa08ca7bd8ff0763503da2a54c837bfca2a41411e189237709abac9483ce85eae4218c19b076ddb0aad47e252eb5c8e1c7687de4546c93b8dab44f6689abcd1ac40102b7f56119ebf92d58bb5e04d6fc63007ce11b408ac0b048b9e53ce45fb785196b68d3be366b40e17b7a30293567332cddbb5ac7302e0c507695399b20a14579963628cb6ddebcea114e39084b5cb39b08231317d02368804557e6117b2964e2be516a021606d123a8200b509c8c461cda6e79d5a8e3d6156ce17ba34abe08d342173ecfb1d58a84d667de36c14de26c7d83e40fb91d28424c61fc36b08b757beb95da4af39964cd1fd57085a84c67dfb25de4922a98c759134872823a63817299d0f22924dfc26029e32c331acbe7907c0be9ad8ba992e12c52eb62ba6449a89c9ed20a6d63e2a6739bbc206e5d511bc790b9b1592414b18effef4da579fc7f6fde1ffbf83ecd94b87dfbb86f1ff7ede36d6c1f8fa9a7d0dc1dba7216ad6f247f638ce4bc36726e13f9815bc80fd440ce691fe7358ffbd6f1dd5ac7f77495dddd5ac8f956de6594ec5bc97d2bb96f250b75fa5672df4afe165ac963fd79e4be9ddcb793b7b39dfcb38c99e41d7e7f32b96f27f7ede4be9dfc2db5934ba5e1b1b1be9ddcb793e3baf4ede4a4227d3bb96f277f23ede49dd44e665bb4376e273fd1cb4e7e626bece49ff5e7931fb89d1c90361cbb425cf7a791c186ef541d42738657b37d6fbf3f3565bc3684e841ec86fb1c1d796223281857cc56407b923d938d8de3857aebba45f8de0ea330846882c113e0be81b123f2a1fa49366e61148d077b530b21a7549aa4749d29d15aaa11362451155a4b332ebb9594a8c7e585c5526992d2b5883ccfb72c2acef32d1d6152c5816c489114ae25440b0ef124dd4817d523721badb3643694456fd3254aacc48cef233c4da9e96554cb19df97942b259404aa988a33be2fa95c33a221c6ae47c50417541ebb4b976c26248a52c924af30191988229f623070639d5ab5a38e75e6f119d29c1cdf35096f7c3c6134963032998ee482a2dbd5d82b9360b353c9e650cc69e1295d169ed45fc1ffd19d417497ac364bd82e59adde3aeb782edb256b6a750c868b6fd1bfa6a161167cc40d828fd8339e4da38f5822fa884e3c376ff8914005263f225c26998a8d6c98f5dc5e3b66452d1bada51aa69d5b236e1dbbecd223866bb0cb19dbac73028b98d3fcd22144279a897df65ee4341f7fa23dab1dd07eacbdacfd547b29879d88f216ca61fda1cdae226625c7c68aa5525161fe318a62763c92244d9e95c329f2cd9a7874a7e381d6590b0f656dc6e4fb36eb75a2240bf64dbed83aeb54eb864538dc576fc8a4e4cf1aa69c696c33e6b3c4cc64b995d0ff613aaa3bd8f5a4f81f711a0f57b16ba46d00fa6f540601d2c6405ed27a7eaef57a6ed25a7eaeb55a6e523d3f575de7a480f4c58735695de4e6562ae5266de6e7da6caa4937629644ac928989a2d22c297eab66efbcbe4df2a06d128a76d4e7512b0fa3f61d0f3b8e6162cdf65c0cbf75ec78afd958c30dc361f706f60e628dcc60c3c29a7fd0a364b8ec1ff47cac190ebdf51dc7c01a3e881d285a2696eeab825b248281f88e5704e1627eb161c0955104814510570459451054043145900269247b7e31cb5d1c75991b556ce9046bd8f588496ac46297d8f178223e380389b6eb91aacf2e0c079b5833b1e35b65eca92a9a024046b5a861b3a8d17a1e2c6a76b5a8d96651339d9c6e73a3aa6153c38e860f6a7655b34dcd54a1c92ddc7b75afc28c40fef88ccdfcd9e30eb126d1d8389e5478cd15d479c28d6ca8a819aabe23a5b869265591aa6c2ae8141239794ad76899cd423f805555ec3b80bdc68987ad94b2d1501c65a3867b90c66271a808a3c138b077d056b38ce13fec3b0e81ca6732df621458c68ee3ab7cc0ba4f4cac8ec641ddbba88cbd83fe4c2f2fb03a24870f1cb2bdc02905a99bd7767469d9c0090c04521f30a8242b1938818140ea03ae19262e138fc84a079e60412477063bf2d281371808361b77631ba0aefb1479a37f5cf5b6405d6eb35eb6cd126ec4ddb78591c2282afcf34ab4cb1576d1b4abb1b44769dab558da6334edd358dae334ed7a2ced099af6dfb1b42769da67b1b4a768da8d58dad334edf358da4e9a76993fc543c23b98aedc3faf00e548acf03faf42daae78da35487b349ef629a43d164fbb0e698fc7d3fe1bd29e88a77d06694fc6d36e40da53f1b4cf21ede978da6548db292a175bdd34a53c717c4a79dcf83ffed05d5c3db1fac63f4fad9ed4568facbed1bdc22e8f7717bb57bad7b4ee5f79daebdaeaf1d593da3ffeb0fa467761f504bfa0c4ddc5d537bae7b5eeb5d55bddf3ddc5d5e3dd73dd2b5a77f11f1f75cfd34b9010a65fea5e1337f9d0f5f654328abfff79ea1f1f4d4cf8bb76eeac743f5d3dd13d07022fadbe11de5c5b3d9924f8c789d593b4022261f5d6ea89ee85149f0babc7bb9fc3054fc98bd4b793521cfbfff394d6bda475af69ff38a1added2ba17b4eea7db17fb6fdb1324925104578f76cfadbe8eba8bddaba87b63f564f7ca7cf75cf7f3eea5685214516c28bae0b084175b1ec88a6d34b0a0882bd83bac20fa3e1ad995b954235df30d07132ca4abb7a53104e9307265f50de07eadbbd8fdbc7bbe5730c1d523dd2bdd4bddc59e05e23105b3a8a3c64cf7d23f4fe5d0286ad53001abb7fe79aafbe964b6a4adb46cba97ba57b2436d3395a496cd3f4eac9e80e7fa317c3de01b20376ec27ca43f2cb56f602045dd4bab47ff796af5689a4d60e4a8496a211bde724a6b4745a0872ce8a3531a3df2ec52501cbe9a690d03ab479edd8c5560f575a5d9c3b3e58fbde190061bb2c2110100a955558d3d2cb7e89086892b646078fc9f9777fcf3f3c9e1ea50745934f62ab5ac61224080e39434b5a8783014d03d05bc0b4305d5b0d6b05d8f4dda6ebe161313fa066b1000f4de3518a215e89e52d6a0a7f9b97a5c697dae1ecf6b7e3ec19622f1d31f366e808eecea61808eecda0a0b740af72dd0ed6081b257d4fd098cec7b50c1b24d13a3e68c6ba0194cffda669d208b98d3adb368d63020c9f75d03b9c4f05c526f9db5d00caee964c6c5166ad28bd6592b009728062eb934be2c630f1a8ff74026be30840ac0c8a26b627070059ad02ba60dbd9c350c91edfbf42af1b10eab37fee4e450ecfea9c4fdd391c52be2450f5ad373b0e59ad8dbe4222d87b8be495b388a71dc39c3abd4d0c00c69a606a10a76092ab805c9a102e9e52d85baef7bb88e2db68ecb322cba2e96a7b244cf48c22b2e22af8c186bce12cb79d6f3aa6d58beef096de98d4acdba82276fd79e5c539ac2bfb243f08c545c2d670dbcb0493c751bd714ec24ca27196e506f3da7de8dd65963165e22b69287dec875d7152c25bacb98a6d96657a094b30233be3f83e92b0fc2d89dab68fe9282a9a40a32b69eb7c187d0cc598759df1692667d5ba57d53c14ea27d9c614ebd630be738d359e294b1f9321dea82112f1cdd1e410554408f70fadd5106b492b1f44389a1b407ef5fa5b8f16586df47233bd15e3410a970ec7bc257284ea2d1d8b0ce53078364d962bf2943e9c333543e3c0fd7ebc68cef6b3562b28b3ac6a6e1d224bfe6d124cff6676cb898216eeb2ca3362c76454c9ae3369bb48c69cf60c6c571304d99b67dd39ff1fd7cee3aaa0f53866bc2d4603a3005b874104de552a15c221397c3ebe6fa96e50322043116a6579e61b8f03b43dc1963d63066666ccdb31d9ad620ce34a332b14f2ff2bad25cbacfcb03b69a676b0da299bd26ccb9c76b0325f37ab38a19deac62bd5e547ab33296ff41becda6963d9cbdf12b413684c6674c7b12c9f58abbb73652d4648b0de51ab3b966c64faaac99a2c816169dbd5616ba1b2f90d73a6bc147c89ae42cb33d40351fc6000b6753c7bd330ac2a8e7871826c9d020368f3d6b1875be8a713c4b91ad5fcfd83aeb7aadb3194e1fd7f0bc34c676a98398c36399ab479559cfcacbcaac65e56565ea59795999a5acbcaccc66565e2c73934e836d30677d7f560a4e197d8fc176f0184c29431e4ef538354c1c1a067883ee47685d149b21e88e04d55688c44e88dc1b21a4a78519617c103f795858cfad0f02fce8b8ea3b5abdf5a185d9a5d75a7679a231c3b36bad6b3c6dca695dac56a739ad499a55ecd0ebfc38c8a2d2a81c10419953bec02e3f246a7d082c34c089ad6bda1428f39d38255eec87c87154583e5cd17a07e9b88a66cc622f48d17a07d56da76a5859c4494421258c228ad63ba83addfad051318d410ab775b175d9f57cb1bb7ac6bcd780c2af674f1f518db025d91b318a0a53ad0f83ed891238111e5565a40e2aa55342c4e0bba3bdf4a1abf195715e9a434d70f05a17eb29fd82e922c84d9f93aa8bc2eced564d15e9b89a2e5b0a548761a575395d3edc2bcd28d2ca37190fcf43ad0fd587b8425e1f6db0ca2bd1463fa6d8f6401b8e126d38196863d6208e36d5fa68d6810b86376659dc280000062000c33489a761bbf545003858d4289b478de241a35a1f55f2078da2c28b4c7431105c8ccb2d46a4c6e29eb53eea11f82cefc6047aa469a546e891a6063d7cd4d0eac4a9384437b469e2eb8638d0d4d060e0d773fb6474231ec88738456058047e45e095378c4fe44cd3699279a4e9776f4d52ee2549f9d0ca3e7fdaf61dfdff3d7cbae61ba8f5975e98658cd4b1616510c6f18a9c2e79a8a6825d7ab98b4e1c4b4dbf953045c7969b01540c1335917205ff2f7d62fed2272e3f383e1dbd2471b27c9a808772217773b83c14af11df49950e83b940ae329acbb4e464fa00a84ccb4ea60fa2b9d846463817496610cd25e5420a63b9589b3f5d9e38f3394f951f420de218b69e9a741513b28a6cf807d8e395b15746d14ff93236524073356209ec42c769f403345244257b9620f8ecb1891cc3720d9d4839964dbb3283a66c07d5b15bf14df81acfd98eeea23231edb9a2b4d07e4250cdf31aeee8f070d5f06a7eb958b1ebfcd32c7e0cd7f5893bfce8a34f3e9e66c2e697c664d34b48722cbd38499f9e8c8ff6a2027178f8a5003d25547c95d661cef06a918a551d5caf63cfa860135589a5136794769721e439469db89e438668cf4bb3d4c914f64d4fa26fc6e421cbfa5feaacb1316913644ca86ea47548aee6992275c352b58e4b876349d7612acea9b57f75d3da3b24a27db4a46251e6371ef03b7dc0bf3d00ff33eafd14ce8e8a724b451ff5f751fffdde85dc47fd7dd4df47fd0f1af593fb03fbbf2160b68f7337a47d2e9cab068dcff4d7b16f17d858cb828db53e6cecc3c6fb051b7b2ef9ebc3c63e6cecc3c63e6cecc3c66f356cfc56b9479fa9f591ee7640ba1108f9aae1d5c66c68320a25c5516b8e57d47023c091c1496b7e559cb436138048e2e63869ed55b6d531228a2daa74bc8d2eaa8c07ce692a117b3303ae5b640e3b86cb8e056397758c992e14b46383803e4d50a8c99794fa2e3b1a2cb9a8d4108b4a8ddc8b4ab7fc5c30f118efc9e1609167b735e784096d377958585ea3c4b5886169751b5b3a61db8be077cec616bdf06cab4a1c7a39e510a26bae456c2bf77a5aa3a8d5eda2e619456d0e7eeda236e51435d7ce698fec37b492ad1d30b4576ded80ad3de768fb7b9d84f540ed911da5d28e6fa03d42b7e44cdb4447763dc30c01b2ba8d1d2b830cac86c0689093711b04b84dfbae471c053b6184d075b89f4e39ad2f82b0e30acec20cd9022bc4264ef6d25ab329dda153302cd420eca40fb02fd24491b5b552026a601884aead6dddec1173325dbc268adb24c3fe80cc54515d14d5496a456e74516dba6429d0d9860f47860502d9695343149f36887a3d2d6482d69bb5455c8fcceb79ad1155ac9310aac6b1eafc3c8adc3f15b9ffc11eb46b273b45cb63685627cae025df78fcdaeca3d707895e93f8351efca3f02cb65a1f1a4e6108159e23b85c7368149052eb43871d4fb3cf283ba4f5218df4f143824de81d84917c64783582eb35b87ba175d330e1e2a5d64d0bbb8c099443cfb5aed56b98491823d87008d66bb1d4fd182ea984976dd3c446953f9e49c949c1e200e271a6b9d03b505ae82cf40d544d6b19e8285413ca084d0a7105029004d2c75a1fa131bb5eb3b051a50520e1259fd7036e4ad0ae9eb87ba6f511d6b11d6463277a876afb6cdeae70b71f7b35ec580af961138cd9755a1b5f3c345a051025a4c06f6d9fcd6ae6291802b462ec1837ce8cf2123a31468c4f824d55b96ca42a5d33228e4495e3fcd1e84d06885562d8d1e04a054447e3b772b0391abd5122460960ccc08b5970b1c752e79e60312f56dc70ec458115b3a0e20b9665fc7fecfdfb731447b2288eff2bfddd383e03c7304218639b5dafbfecb23e7e9cd97518dfcfc686d0769434cd4c4b33dd73fb215b1c6d8484ccc36bb3c636326030205b023d78083db010202276e0f7911db2d0fa979efbb9bb37ee5d9fffe11399d5efaeeaee91062cfb8a0834dd55599959d5d5d599599959a6400a09a2e2de727558239dc518c880b4c806f3498baf2a4a755c2032172e804e9754a193c886d4ce43dda0b8c891164174e1888a5452acce087a518e0a827b844c6775a1522282aeca9d322b0ccb9614d9d5e53d4246a9cec865586ca262226dcb0528ee113226913581284267b1a4ca85a8b068a7fa8e85caef113225583ec2f2226dcca8caed1132e5eab5a890e8445d45aae0e9779464121dc4de5edac8ae5dab6898ef53485fb9c8920d538886b02caaa65131619d0e5b30f1c43abbf029a17507d6ec841a85d0cc49c570f698b0a84971c7488c2c81715df2e29312170b9bdbfa1bc8d8191216f7968597892a974a12c17dfdcc5e45f87789681a4141666f59c8552fd9329822fcbbdc5192ec1a45f875754c36bc5b637bf5e342b928abba5bf0aad959249a7dfb1fd5db0ad10d2ac061f57e13854ffb7e5ff5922b40d26a4f8ac4eadb1dc512e92ce653c992d02b68099da1d28fdd0de80395a9c6a808895ca32c69d2210046512c324bb6b0778902389224b2122b4acaf9ea344a9214e33eb9e4ca9172b97ac99122e54e99e4dd0abf002917892b3eca3a088fb2a648c9e2a39cb7e9d9b46c3236011bb58d354976ac4efb85c74b386838a67b71445f216cd931cf951df31c4b749cf028a4951e634da049f2a3904a8014d249903ff680b9c605c9042708657b5e360b459e54e77780d8bb1d5f0f09454a3e78d06f21465af4f3501d4b922b85a060592472bed8cec5df4c8708a228207ef1ad911d456048561516109a1b3b2452208a9097d54274a3dfb548b2abed33705485c80c29d3354662bd146d4e1d2208230380638b34d14cc0b646966079e3da2299b5686b2c57af460f65f705f65f557586c78360cb99f9a21241eb9a215d8046844d21a5b499c612f9838b9b3f66036521bf29716e0489b350e28a0225dea6f43b4491644da53bd2705126da2155241db613a92abe63566fc2df5249154941d50d55d42574225545d5344cf8b59d4855312fa10f296f4331e443fa8eb7f18f67037668f619884013fe96b240320b04b340ccddfa4fed3e1aef3daa9665a5a08a2553d1f100484917cbd571ad53d5245d7c47ed9174b14752e046af0e77907cd246a9e73caa069d47abe35a16103adea3d5e18eb4eea3aae33e5a1d17df51d17fb43afcf8376cd77066742ad1a92d2fd10309e955ac10c5804d737e34bfdddac52aef558c3d5ca4ada8be23617ed92df812678baaa9e95bb6e2e2d48a3b56d5611d3f1ad5e10c66a3455127ec86c015d9d2f25126d59bd5e1c7c3892dbaa564850a78a91821e9f9f084cdb423a22a46e293590b178d8d469b73ca635b85e824afa67b420db0d4442939705605b357f241accbca4a5e7ae77707b7644c25b315bf8d3b98f0fe9150a0e7baa131d23cff893f7e9222b0db85c7c111e48b846549a687002bba7348659c4f331ba0ec7807cb8a69440fb90c7814445bdb2ecd452214552d22177b2ecdaa46b81ecdf9ea35be180f957c8fe6a89bb427c74b7ab4d6f3688ef4d4e7d2ac36e6d3ec97dfffbac0cdcdf5d785cc4f49562e6dcaca3fb4acec82320ebd5fdb1919d4af31785824fccbe8993d425bc628aaf9bc64874710859a09038599f66de196d8d4552033c1d691f22882329296ba09ac4106351b4bdd4e084614bc1ca2475b85a9616939dabce852eb513597588faa31408b214ad8224c080a1974f22e9dbcacbb74f2b2ce00cd87e8608b301d66d39c3776455556246ff4e0566534c88547cf6e17193f2c8f22e8f58f9fee1f4095c15f6f6f7408197dc3d272c67738cc9fa2071e04263abcdf3897dbbaa5def6b61ded2006f80a5adb59471014d4f27f1043e16a9f6a797b89180a4f077d8d289226be0c1aa826e688a68b7b51fdcc11597ccd54c4d7cc1291c5bda07b8afba9ea29fe0e144ff1b754ef14f74987e0379dd6f91a689d2f83d6e9d0cafa49658152160865814a1688648142732216f7ca06d1c4fd6a9968624e550aa512d1c45f99f91ef8d1241d6bcd6e0d81940307323d2475aeddbdb29105d459c09c05ac59c099058450a1a4d439f7cae2feb29853c55f99e2af801d717f927ff2fa35cebd42714fb92cb4f5904306e3347caa7b52a03dbace856bbed370026301dd130f2b209d4589b40bfbd46df68900f1184aa552c93d48c0778e40a8d51a7557b4c6cb8712fc4a5e262589243920b7bd2a1944306c0da66d5b826bc9eb8499abd7ef82fc32314ab1e89ae87d1ceb794cf272c4aa00af2b434260290ac960e57450e9c08ae9a0d281e5d341a503cba5834a07d69b0e8a03b65655648ba43d99e84a501b1ce41852a82aa55e81542a2559d20543f56b2df88d896269300b1e5061a8db1b25355d93621e7f5a518d7e4123748633a8877dbada4d4a25b92faf2a15a291729f4e942ea985d1ec15d5d458272bdbd5fc239571238c7da832ad1776f0c7dcc1e49eed8cda20b09e893394d96739ef125ea2977be8cfd342eb4e7eac5990863d328964d2e273463899ef5f0aad3bd7c3383cc1642a2c94f113677de76aef8a356ce213e5f730ddd9dcce234bc6b33bdee6ec3caa44443bd9864a97217c140d9f0fce1c8c34d621aa486d9a887e68131168b5ee01ca0cbb4e6b668f90b126af8465c6cc4e5a3116a97886568c472a76d18ac8e9dd996769c564a46237adb81aa9788e56447c7d33cfd38aeb918a1768c58d48c50e5a71992374bbc76333c60686650f0c5118270ccb1e18a268c538543cc3a898808a5d8c8a49a878965171152a76332aae41c5738c8aeb50f13ca3e20654bcc0a8b80c153b3241bb8acf1e62724d21263b9e23634d9cb72616ad89316bf2843571c39a1cb0268e5a1353d664bf684d4c5a93c7ac89ab583715aabb8eeda6b0ee33d19af8d09a98b00127ee5b13d30832794c040a9387ad89317a35604d4c63cbe3a235f1913571da9a98c7661745b8b2715c44c2d7f1faaa35314561879c3aaf74cc9a988bc20e230bf3a18a64330d7340b28c81c8260d4036befb59bbf3d970a7b3e19e66bd4e66033d5bb7270276760a5003ca39da1be467f27dec9d5774dd9a388c8f6ac65f7a15bb730559f54a4f63299d2d5ee92dbc1f72c6c75f01ddf318486373f273ee311ce033c05e80ab30331e0fc9462a4ad82669d3b329d9346cecf093ea94287618926d827106e5b433178fb143933ceb548a16cd0d5772cd452928736298e250c41b9fe26c4fb8549d4f303fc124008ad3d6e4b114714ddbe20d4f38f38e25e1f4dba1e0cd07d8737455a016291695a685373d057304562e7e8c132e47c7ac89db942956ac933571049737788b107e62c69a7c9f17f3e4acc443f876466288ca88f0438aea3aae057445b8c80b844a002bfa110e39df9b215e4c541c4cde8feab2b34ecdf322a4e26072a16edeb6bb101d37277a2a01acd78f70cef9127dc50bab0ac0b0a75045932a54c70fb860c84a8117424f6bb39a5429914e694b4b9b3579c59a1cb326c7adc9096b72d29abc6a4d5eb326af5b9337acc9cbed2d856dfe6430c4e82cc6e941aeb8d786a091ac29bcd0fb8aaa1b07edf575ad5d397020df20b7aee0de20b72d2dc2bf9b5d04542a41510dd4ace8c916b6feac0b449384ff6eca86241c340f1dea156445a868a4d3903ba5acf0fba25c9204a328699220bd23eb861ec04d044d2ec879400d88d5830211326f9022d132826c08b20e3582a94b7981e814b68414ca6a5ed21497b72cdf22845fe3456b62a40f25ad09fc204ff5a16c637fd7e9cd222e01e77966a20d622572bbf3b84d45fe016a9abdc8ff0852d88c5ea467c4afab0bf6637d1cb6a3c7683af21e73b2dd27de5c13788ec9c89e4b40e67b7eeb3524051e4fc3f624fe08b11f1a3f8075079ab6f79b6b0a60dd9d60d8dedd140f2973d3fcb511cc5f458967c4284a3c4f8e95b32b975686564eae8c892b232b1fad8c39371756c65646c595932b232b632b6757ce43c9c995b3e2cad995a1954bcec579b838b932b4f2f1cad0caf0ca197165786564e5ccca0540456baeac9c5919a2b797f0c2aefb64e532bd4ce70362333ae3b0391362712691c11987b91987b11987a519879d99148732af8cad9c5c195f195ab928ae8c534ae34067651c2ec7563e5a39bbf2055c9e5eb9e0948e7b171fad4ca4f50e5939099c217b1f531e67c49553f00707623c915ddb3b64e5a4b8f291b8f2b1b8f289b8724a5c191257c637ea49cc6d2b1fb527fb7a04a0d2056ca66882feabfb5ad80c964aae9b0993b752188043c3860b398f34218a74e514cef8cf85958fbe5d6c8f8f225db9b0727a652c0e3218edb9f2d1caf8ca172ba792a248574eae4cac5c80f78e873b705634be2b432b9f3b1ef62ba7564e0263f0720971349b1959baf2d1ca172b432b9fc4c496ae9c5f1981379de797be7201979631812e082b432b91cd01d73d9d0f821ee82b9fac5c5939c5f54ec76a465bf43fa7e3c5f44d4f8ca7146cf9cf174ac9560d049f9483042756ceae9c5df99ce5a7c00f0bf0f93c2212e852427c40defe0c0cad7cce74a27f4c5d048217d6dbc5b388228220dc4574e95f390db37125b2ef843e388fa99336c9f576d34393d8d55e7bc25e8a4ed8dedec739612fc54e584f4b08870fef0021cf2ec4789fc48099e01c878eaee315b9c41cd4780dd03132e0a27aeac0cf562ef7d92b997d4317dbb3c2caa995cb2ba750d03bbbf2799fbbdcb1cb875626607106096aac6fe523ffe51720ffb4c83e5e64fd8de0bc95958a19cd616cf7b9e58f5bfcccf2f8b3096dfd173b4b31c5c9311235c797e2d95865913132eb568dbd915daf9786dd3de12597511cdf4ce0d3161ce314249f4f4bd27da0195ba8653dd4c6556c6716acc56da3286daaac1b4165e5786cd8de1aa3016f0ddb536334e0a9617b698c06be96b687c668404ab2bd334603de19b667c668c033c3f6ca180d7865d81e19a3018f0cdb1b6334e08d617b628c3a9e18ce5ac4f1c0c06e86bd2fb09b61cf0bec66d8eb02bb19f6b8c06e86bd2db09b614f0bec66d8cb02bb19f6b0c06e86bd2bb09b3ecf8aa0574551e61a24649e41c21a396f8d8c592373d6c89435da2f5a2393d6c85db8f1155db74616f1e68435f299688d1cb14626f066ca1a3d6e8d4c5390e322201b3d6c8d8cd1ab016b641a5b1ea76d4e5b23f3d86c4484ab91fbd6c808b484a2abd6c814851ac2fb8b88c82ea5fc05002f63f3797f693ac306ed70d6eb6836a983d998ee65ed9e65bd1e65c3ddc8da3dc87a6c37253983f390eee3df453a2ef3d6e8fbc8ae5774dd1a398c833fed2fbd8a1db8e22f3a8d4553d847aff416960ed9c311a8806e79d4d39a595cbe3d76035c7acc05780ab3e27190ce2ae38d8f4dcda66313b1d1c3cfba6c358e8b004cc9f3d628cb112218a7c3876c7aaa2dcf81814b9397768bd1743dc6136be4a83512e7f460430d5923d369726ec5383c24600a1848e0b587197d0e5e96d163c96e0ecd30883c0573e0ba357acc1a391c138183bcdda68c31ad22f8660c5823e704801bed179c57e52b6be44bae7d045f8963383e87ad91a8cf03c5fca13532845cc2e88c59230c8f07171f1fa818407606295eb446229e1b6e78bf0714ed733e808c2eac11af5237dc9f0b910b7710860ed88f5274530024c0f50650ce391f1686c3838bcf07c49e4ccdf07818bd628d8e59a3e3d6e884353a698d5eb546af59a3d7add11bd6e8a6c70393db9616e11559c96f487707642cced701beb38bd6c8481fbee303b872dfee8337013eba743599eac3cfe8a235727da387c4b8fd79ecce0ebee16a9eb34370d89f80bf83f35c7f6c8132de735eb7b783ff41aedbdb21f400d7edf0e03e9fc6bd1db823c47e6a71a17cebf07710f608bb9342f99ae2f1509437cd473fb4f9c8053534a2e82562c4658289e47fd124dd2cf952873e2d6404ffe4750282c36d0537b455d759b1ada11d89d6983d0264e0e917858c2e75c36c4fb71f413399060f5a7a2674cf5ece985423a17242ec0bcfc411099c1362f73568fb9fb3c6b4cc1a524ed6934c979457085de569525728704f2c66e3671258cb33b3c93ed947c6ee9ad0c8138be17b2d0facd8e003238aa013c37d5a6a016e23ecd8b899c8d7f48211e349bf5c8c5e090dbd598c785461ad4f29cf0cde5fcb48e689b2ae6ee589d2bcc99763a63958d3dbdc25e952e7937e9b91e8faa609c5d1bc99d2dbdbac212da87999f3ac1fdf9022d1f52d90317ca71f5047700c6c8668dccd108db31912b6d0d9568a8c2e77490f4e285d44ec914a5de4c10949541f2e9a5ddd443434d203157a8fdc01bf25b982b71afe74ab25b5473d4444cdec52a05237d40ac9135137ccbca4a8052256345597954ec2b139c33fdd204a9e9454457279214a97c30ba1bc906ee4052a8017f82dc915bcd5f0c7e60558218acb8acd896cf3413afd7c7054c0e07e8a2e776591972c32920536b2c0431618c802f92c10cf026528d3b340340b149bb20da248f92e180ab1a23a97dda269a81ae916754d86afa0f8e08464f46806e9162b12fcd5cd0ed5e08d7964c34291f259c09e05b4d023398b18b3802d0bc852a60d5324b1a28aa621ea1a20102b92a89b1b3753753697cbc6ec3c6493b71eb2fe733b929d4623e0ec1998bcc580c67cf8f8e98219b7c98070ba6968840f972e7db1a3c0609ee23ce9ddc23ec35b7096fe1d9c443d823f15b2d92eb4d9731a2e4d567ae300d667d262a52f463aa4bb532385b72a1dce560e4eacdc1957b92baef2d994ac52f7572e9ba14f0f2fb5b6404f937e7042d2d8d3277df6eb664d9ff4b3a0a2a90f874bc9632134340d2856c9990cd2869f0c946179bd53a299fb818708cf351a675c055e5da66734fe03087a12389a0aa2db7e14c8b5e244f6fb9200ca0900c5240cc5620240deed499e71424f3ea175ce6d6dab19d15dbc7804bd2e02144e4dc6b65d0801fb79279e0079e040969bd43b9b4969bf5d5f2ab6e792ecb7cf35c57eab6dda6f7f68fbad73a2de6f94bcac1474e14521d343f4eab0a6908a50ac8e1b071f7ea408dd523e2f29827e48d2f2d56145e8d4ab778dea2dcda8deeaaede52844a755c31a46e0451cb1dc450bdbcb7827bc07c43b6e298ace18a59764dc68d198b63ec645b1c72a0f106d8c1132594ea78b13aacf40ae5eab0aee62b92d689f6334639c7eac9b6547bdbe6c2d3493c846927d38cb3e466a4426f269628d2f4a8513a5b1b30e9a6ec5c0374e22c9d293b549dd1a8a11aaeaac35d84472a8e56aa2ea5a5c4b40b36d629855428258554f874e208a5ea512a324c7b6063dd2956675c52f49a4f2d8e5caa4e35408c69976b70fa8df7d87362bc8737cbd9f6bf86a61e97ca9ffc9227653ce3e5a617fccb347c17b63057e1c89af99290417a6de5ea42c96817e8b93b787a91efebd2e6e931edceb93c6ddbbb55ad3dc34a8f5fe4a6832b32d3c1e17e0651cceab086e7b2e145b93aac75caa62e56872b9a5c927528e93275b1abbaa0c8f4b704bfc42c98fa21c3d445fd90543124f8ba886ab7519d810b7a529ba4d927b5492973e677110558a15c200b481e892365204b09022d20031452c43fbb5f69d1fe4a8bf09116f1134d44ff075ab4bfcea2fd6d4e6bdfea213ae2761153ac880e70a5336ef58845b1db6e2d5662da3d56abd51ffef0873f6473b9ecbe7d59b6d90a01a89d8905128589355c0520b7512532c6721576d1ca4b7d793312bf953a7c0b2bb39d45a2ed35b6b46ecd1a2abadefc9ae8d2167aca54c6cc341aa6a53bae3c7ab22f8f9e3a160a983134131790bc844bc8bedf34ecf9c2c466526cff2da5334c3a07e532f1ad59312eca45b5a4904a3c6c4307a0a1aad6494a255bc6876e863f1efcb3de326d86548865a8e113d9c20c1d24253d91a326fb47c3c7a627729697e71ccdf287e6a9f77a5c6539def21167f5883578c4193b62eae22a7371757195bd7175bd3f0dbbc69339abacb899896743d8358abd7bcb5c09b2773b2937b8e1bb3cb53cffede1e55bcb8bcbc3dff62f4f8adf0e2e8f2edfffb6df2d589ec58bfb7039bcbc0065cb57edf2e5b9e5c9e57b70e3a009dc5eb56fbf3db2fce5f2fcf2bde5fbf877525cbeb73cbabcb07c7f79747976f98be5514a686a797ef946b8f0d6f2fcf25cb0686479340c97764f39d8dd5067ddaefa3aeaeb66a093812e863ac8e81ea37391ae313ad6f016f5f214f40dfa751ffbe3eb0df4648e327e8bfe5c7538478e1700720ae80367b3cb5f003f37969342ce90ea8de5c96ffb9787e157c407720307e7abe5e1e52f96c79dc2d16fdff517dd5e9e8f164e2d4f2edf5afed25f34ffede16ffb97bf581e5e1e17edf2e1655e96a188c4bf7c03d8b1b9c29f6fdf15976fd31f188a2f5d0a80fd8b44ccb60ed034bc8f3d2f52c2deb66f237a799ca72684a0b6a54b8cc46cb3465115043e7c13ef7d7be4dbfe841cc2f03e2f4f2f8f259c4a4567e5f28df834c30d9d6d0ccc2d8f09cb13cbc3cbb33603290f0e4e7f6ef0f2f0f2ad6f07968797af3b9b796b20dbd4e3b484e5295849972319767d517dcbc3cb77978797ef3023fa96679727856fdf859e2d4f0af8fce6701d9983226e485f122086ea7ddbbf3cbfbcb03cca0de4e301606c1e1d536edc1ebb1a63f1e0a170a3f458951874874f7072f91e37248f07804ad1f27dfad9e606e0b900e9d4f6e52f972797bfc217657179b8cf7e868bcbf3cbf7b1e0db01e725a2f5cecd3c7d1e2d6bd5f75bfeb82501f53a53b4ac3d68273824eb3ee7263ca4eb8ede098e5be32137e1814e696c48d495fa9c8bed5be023dff76dfff208eb74b5e61eae96e200b2464f197351aabc33c852bbb50aaca44cdb6178786e240c5f51361218dec64e788be0f9a14f4f7b425bf6bd7bcb9bcaed46506ee53c4fb595f33107069b4493f1c860bcc8114d32c4bd153c3558c2a37ce14f4916f7164cdd307571bfbb15f2bb6e4385dfdf3a3b21fb24bd819d90d788027481241074c80135716fc100424002d003e6149a544e560a0553dc2f29b222ee974a4427e29ba4c3145f276559175f33cbc410f7930e23c997d6e53187881019600244800690a45374720571bf22ee2f896f7688af97c5d7cae27e5ecbb4aa4c364695c996cbd935a7786de428dfb68ad96d96da05363b5c4d26d82c9d10552105b94f978952e8d3554dea2b9312296ff4187460ba6921e1d8f97481e0adeb3ae6519332425f9f102cc6f17e22b1e10def28b145034714c367102f0f2296f8148274f053a07921e140466d0dc71fd2b16fe67ed52b449305599105fb4d8c4facf32b4957bbe341830989b9a0feada7d7a532d164858fd79f6b87e22d9192c9876fe62e521e863c26e7f053bad04b9482001c3195f10ea943d248850879c990bbb9ca37b316756a5d2a4b8a6c70156e666d91b6ec2291d5d855b6197579daaa48b48807b0ab6bb32a73b45d87598a3adebaaa36b3b697b63448d18cd6396a36adfd690acc727e535cfea1c56517b452323552daa204966ed43f31c130cd30ccf8ccd8cfd2d04cc96f3af145507a098ab9ad71833cd611cb873fec8ab54e8fd926e459481d62ded727f8ddc214b5bb5ba39107d505256f6ad46d164acdb25b1af9ea256577701e25cd4a9d9403da892c15b6c4f21ae4d1e32decd620a488438531b6317022eb1b4ab350ae5e53aa0b768a05fbc66c34bdc263193487192dc01a67d0bc5726e4de9c92156f1cd6f848e2878e9fece0b10c5d77c9ecee063d5bc9cb74f87c25eb98773e2cec7e72331134f45432795230b5c69e84bffb7952c04ee7a5a8e49e943221e5f348df27e640e64981303bc8e9240bc9965097e92b9cafde2a3cb697640dcf85cbaef7841af0f66e7c2a95abc38a599d5acf74b251d8cb105e73a6153f65c59399560e774d9d5a6e977dfd7f8ccbf09a1e572ce7c107d7b8037eec525b1da60b6c7558e34c0a7ed28dc7b2f6fb185afb4a9f9a84cc8a010838dbcb3ad79eacc738db57170875b6c78b32d1749154b4eab5925826d56be8e74e7f4ad56b6275b8505dd00d5167f8d757675c07fb46cccaae833dd180b047957ad72345a047bdebab333d803f8571593715c5c47554c429492fab8b9a5c9dea722ae4ea548fdc6ddf1d94cb65c3b9aeded29deb12310b44a34b724a3bb46e2a4815e92119c08e58015d3a5bf47e53cc5587c5ea054dccc9e2cbb2f872f596f81fbcec163faa9c116ddda56c7ba399237c8dd66351ab5e13f2a42020b2786b5a755828ab5ac154e28083762f0ea0df9a56bd2614aa97351ece40de6abd7aad3a45748338ae2f9c46cd34a849070d598b31a81decd5b05ea0cc45ac423f8c8f764064def4d3febfc34f5bd6376d733fb46d0e450f832b7a183cd1a320290a9155f8f67768705126da21154400b92489655228c8aa5890cd82a28a25b3509255911454dd50455d3240f8d02451350c157e696c9f268979b9132fd2891e05292c7a14802290035a400848d0983e394d4c5f1ec640ee2462c954a47cf52aa036e885a475aa25bc2cc86a0f5ef4488aa4c1854e3a8891148ee7b29d57cb801fd92e4b1ae0035480259d6091871115cb442c4b6241167b24515fa754f1f8ce316d64933bd14d578842af5192808ff3ef0a055920a59294e09fbb4f2d13251e927ac4da32040fd0e7cbfbaaa4f111a676b17d2cb9ad4a44d03b554d774516974d8eaa1cefa215c4ad52dc6a1adc2933fbac5f62f29d7610b7a5bc654bcb1fdb766c7fa13dfbf4bfb46ca5de9c3aa68530ec2c03b242a3ae858cf0b4a0277834fbf6370f4622e8703122a54e5391055dea54d91983e8e61da71e772f4d85eef0abfccd4da88e342ed2c6070e64542dc29cbbc1a96a127383d3548482ac6a4a84aabbc789d5ec5d4e6059d22388dd5dceb2a4471af6da0d8912a5e96e721245913913852d91093e91ecaf0b4cdfcfcc53f9bf2efca42432635322db1812d9af8b7c996c7b6771532cdb14cb9a1146b529966d8a659b6299f76f532cdb14cb36a258f6ebe2a660b61104b32ec213cbba084f26fb9ff3fdff387f5cfc9f0b1fe0cffc7bf0f3f773e768e129bc3b728dd60dd2bb49bcbbfd39de9d18b07f6c447085b8d2c963add06627fc7906feec823fcfc29fddf0e739f8f33cfc7901feb4eec0bfd8a675279f865f3cfbc7e9d17f9c3bff8fd3a3e23fce1fb7affed7c0a4533635ebd68ed957fffbd847f6d5dfcf5fa45769c5349b0c1000d48014d001a274625ae3081eb3b40662534b2ed7b26f1f3f33d6df6fcfe6fe71fef83e1828b6c416828a97dac2c0343f16ab45299ec352290587252614871e1b784b3e9fdf1a2b5b86c358fe7ee2f8dfdf3bd1073f8b1f445279098de5f2a24b11c5d570e2ae868ee04b88bfa5bd6a3cb021cabab0dec886ff79e7cfff383d9ab407fb8f337f89818a24bc52d4b799fd471f5ff5ed2c6644dc2afc4240e19ade25ba36b5fde3f3d1ffdd7fb31d673947aa4d3817c59735615da9e9e9908c71868499032c6e487ca320fc42f006287948fe7ee4f80f3c2469f6bc9325c07f9c1e65ef95363f2c9be90a698757c7465ef302af2361d0b0763e8920e8f4a93260d1e06a48b012b134a47f0c4dfdaf2b1ff3342346156a3dad7f3f7e94a70f31aa8a54b4397bf87f7ffa094f1562d7e669cbe877cad1831855a8e6b4febf83b74022e2e840ecda5edab7db91ac1b8e0604552954802eb2a9006c0805a087ab00f43ce6b0ef4af3c3be755fd877a5e1b06f1aa9adeaaaf8a6d4618aaf4b18f62d95cdb749117bb0b6c06fa90350012240b2e6c06f5ecbcdc06f7ba284246649e99295429f2ef7d2d86fc590943e254f4ae6468ffea69c3731febbf7090580c3103342c071d07f8c21e0f683684210786f93a2c071841b5697e80368a6b6b44f064e848aa9c8dd6aba60f05c87a47411a5d0fc78705222c2dbb25288894a8f8684774b154929744bda93890b7f1b1f9d202b85f8e070592974c320b9ec3145529dbc2d19e46d595f4794b8612a850229b1e3c153458b3b18d616359ec729c435deb3abedc8f1b76323c799b56ee4786ce0f84f366ebcab6753dede08f27637d7e0decd33b88797617f4eddfae099fae0c9fae0f9fae0105e5caa0f9e11eb83a7eb83a7ea831fe1df4b4edd67b4ee9c03f805bd3f591fbc401b8640ced40787e9fd1944713e5af499bfe8647df0632ca5455fd4073f17f1ea547d7014ef4f216a972d68f4b953f779b4ee3c96321a7d823767a37531b988ddb4cbac311b8e19b3e1d0980d33c6cc0f457b3f1c1db6e1e8b00d33876d387ed88663866d98376cc331c336dc70ae63770cbd71f346c91b1f6f4cbcd1f006c1ebbbd75faf6b5e473cce93d5b9f897e5ac33ce97ea832729a94bf5c131e4e323fc7b9af23a8c37e798759fe3d57566ddf5fae09778c3a8bbe0cca193889f3e86215a17064f378f03dd71e745b447c3313d1a8ee9d1704c8f86637a341cedd1704c8f64fd65bb4f2d5bea8357b147e7eb8327fb100b9dab74027cbcb585ff790e68e0eee07863e20d82d765af835e773ce6d3e9ea94944dc7266253b0d1dbb86dc4ebd2e38b7bca65612f47912fd26d39467df335790e235c15de865f8fd281b3e0324e84617af2487df0d3fae0a9d89353f009d86b796c23bf4a81abd297f8b8602e26127323e4a233d676424a20ec43e0cd7fb7a9ddf231ea2769bd93ec1794ae2467faf0862e0f70435faf93eefd551c02f8d86df5fb3245d1636fb29a5429914e694b4b7df0ccbfb46c83370b1e40c691c5a24d84a75da0748e5049fd0465bcc14eda73b20f0b86ea83a77c7d4ddab8f2f5790bc5766aabdd731006047736a40de8a6fcfb477e4dccf811d8fc5c75a596c6b88aec93d125f39233bef435a132d2b9fae029c13ff65cc5360ea84c29780f8dabdcc601152996c0d3e66ab90970798acb9e295c95970b91a3ededf9c5d57bb910bdee88d8cf94ab010780d82b0a37de73475feb76dab28f3ecaedd1ecd3f5c153e9f63799663b5f5ae71d71cb54d2e621035fac21d097d9d91e9a64dc0ef25f083b776c15fafa5c6abf78115383fdebbfba254f093b77d89d0a407a39c476b05f5ec7be670f7746783a55d759bd3ac5f30389377c300d1a29cc11dd9bdb7f1bc21ca163a20f49175ef43fe11d7b84ccf6a5e34b9ffad7895656e14e56e133acc25dacc2675985bbedc2f7fd85cfb1209f6715bec06adeba8355ba9359fa0cb37417b3f459e650ed66c23ec7847d9e59fa021343eb0e0fd87eb37e1e302e75738d4bddbccddcafcfd5a6befe72e9706d6aa95fac4d7d7dae76bf3655bb27d6eed5a6960697fa97deaf7d252e0d7c73766970e95300b95b9baadd5d7adfbe5c1a5c1a587abf765704a66a776ab3b53911900148ed2bf1eb7300595bf8fa46ed766daeb62002b9da5748012e97fa6b534bc76b5362ed566dae7667e9706df1eb734b03509f6e3f98b26f336e336db36bb36ab369336833673366b363b362339162cf18011796066a73b57bb59b4b9f8ab559e8a1af002f8305df9c5deaf737b91982a8ddfafa26f02a7a6569f79b293f3617366d9ba24dc7c66ee34ea7d8d66e214e8a11fe506c808b62e2e1f969c5036d6b5e4010aa78b58fbebe519b59fab4764f8099fef527b5a9a5c349bb67b5a1a5fea5c3b5b9afbf4cd128b8d3150fef577b6b9fd5e6968ed7e612480414d66fc6960ed716605209b5a9da7d7cbdee2dbdfff5974ef44d3cae269fe0b9f429bee6f7601d8ad965abddfcfa262e6d91837ce8eb7d1396bada3d6f34e06d1f04b45c8d240ea8ec21156a776bf3b57b4b834b87b96a091fa4e843e48d2b572de183e4fd1cc1ea1c1908572b6157e7fc08a66ab7b94a09abb2d7dff8d6d2fbb5c8b954ae42625737a88a78a7ddc074e883ef28ebb49b347a077c578997e91664f26d5149bcc383f82595ef5fc2bf7b04c52c957e1e2f7f6f71a4b0365ad40e4a805b4682b71dedbce3967eec5b94dddd9b3ac186d0097acb1d6a29472a41a520d39ad92364ea1787fdef6a66272dfc2250f80c2dfc3250b88b168e040a9fa5850107d5cc6e5a783950f81c2dbc12287c9e168e050a5fa085e381c21db4f09223376fb35fbf6837a1877ba0b7db02855f40e1ce50e19750f84ca870040a77850a47a1f0d950e16528dc1d2abc0285cf850ac7a0f0f950e13814be102abc04853bd8ea01f7f4da6ee6d1b5306217ced42ff4d72f7c56bf704bc4ab3b5074f1e3fa85d3f58bc745ac9faf5ff884d69fa95f1ca85fb8486faee0d569a7e6c257f50b27b1fd272eb27ec4d45fbff0675a7411915d72ebdfc3faf7e8fd87d8f81cbd398ff88e60fd51bceea7151f63d127f50b771de134b8a26544dfc784a358fcdfd57147eac75e7f51bf70ab7ee12344fc21623c2b22b993801bee3f1211ea5dbc398ce09f89f50b9f22931fe315d47c86ddb988d7a7b00f5fd52f9ea05dbde30cc067787ff108805f3c9146db719904ae801320e811b5f1c34fb28ed3345c2876fce61dd269ecc1a4fb5c5588a109c52842717a50c27e5ea2169456096a58070abbe1fae6c3edfa85fe3e98c870ff2ece9c236b3ea4d217c816429914d1f63803da42bd6ddc5533a62f42b2d3665c220a588428e68b83f82e0fd42f1e1370e97aaf7ef1ddfa8577133254386ff317f58b87eb17fa53350da4ac486ae04b5de1acb51771213ae72ca3ef2512f5d25ab8442fc20204c83ec431bd54bf7802f1c182dc9ecc5583292038fa29ea9db0b05eecaf5ff890a59ada103663112e70b13a059cd22f0974e80c76e813e7a3f089b376474e02d6757b7b2711b2ec7cfbeed52f9c8d052c3b28f930c520326f9ca31aab838c0f930f22f3267354737590f16172416403f58b1115399773d0b06a7b83088e3a1fdf5bf58b91d8aede5e075310ac11a556c0a51406d9d16d39395529d05381acb3154daad0e5d8b7ff6d68b252e0adaeb4d6db106eab5f1cae5ffca27ef1cbfac591fac5d1fac5cbf58b57ea17c7ea17c7eb172fb5b714b6f9709789d1594cde50cb914a1b82b68757399e8a5b5175c3f17f5a6b570e1cc837c8adab1035c8eddbb80e45f5f175a9e37b845d4f224547f7e6b1ac1b5f19b766ae4495716b662caa8c5b33e35165dc9a99882ae3d6cc645419b766ae4695716be65a5419b766ae4795716be6465419b7662ebbca38fde569e4d0cd88460edd8c68e4d0cd88460edd8c68e4d0cd88460edd8c68e4d0cd88460edd8c68e4d0cd88460edde46be40a572357781b76d6f4796b7acc9a9eb3a6a7ace9fba2353d69cd1cb5a6af5a3327b0c8abb86e4d2fc20d547c66cd9c10ade90fade90907f0be353d4d4baf038699211170cf1c06f4587cde9a194098a3d6cca7a2357dd49a3e6d4dcf63fb8b14641e694f384547ade9c3c00a1215ade923d6f490573773d89a19f2576337228d8691b5f95045bafd403a3ae141f9c1c6823d04819e873b1cdbcf184dd3bf3f694d5fc3ee8e21d373b4eb0e87f653b8eeafb88e237dda9a9ef1975ec5e657fc45a7b1682a84f716de0ff966a05b013dbdef16a5ddd0f47720cc77805d8fcb0073619e3c56d26d7d52fa01ca36599ba04dcda6033febda0bdd8bfeb19ccd505af94492566f13389cf0f643dd06f18a69fc8ea8357d0c1fe8656b66206923149fe2224cd499a369f63fb725ec793a13740c27ca18076b60cb1367d5516771386a4ddfa07b9d2c524ddedf446e0f5bd323f02ef1f737ade9dbd8293aa61185c45e23b017d3d3b8120d08cebbf29535fda5bd14cc0c70b73b9de56ac859a587f175e3342b53821fbb4f597086fd3afefd8abb179a005764203e8d371719fd763746e380f20c9497e914e1ee917221720c6423cea3e10c96bb759a0cdacb403fe77ce52283e56eaa0680389ad6fa55466be68a353366cd8c5b3313d6cca43573d59ab966cd5cb7666e58339737554616b761eb297e4e17612238724a1f7e7f8ee297fa3e7e844ee0dfa37df8925cc1fb1bd8e8365dd2fae05d850972de9a39bad1731f443b9c9c38e017c2ae75a42de08d67d3f22ff09e4bba8c0c3bd6d535efc13f91fc0b0d99d277c55ad21913213e7f82f00ba135d62b9cffa493113f978098f3841311ef4ce2d8f7001bde4b4831848d98207d7e355b6cc9676668ad6e35111f7417e35a1cd177a03d6dbfb936f796dd49ee2dbb9b625153362d6a1bc1a2d6ad726d2e2acfe6d2fafdb953e24ef8f30cfcd9057f9e853fbbe1cf73f0e779f8f302fc69dd817fb14d2b344a99d7f671d0f01b05befffceef79f9dfafef3bbe2f7e74ed957ff75d6b9fafef819fbea9f13e3f6d5ff993feec01dbd44afd22af036192000a80129a00344e934f0c6113c764d1bf4dd6c2e97ddb72fcb56b501e09f47dea5daf13e182db6c21d814bd0baa3f0b8b7c96e544a60d54b481bcb6a8903c7a3ca85f7b3ba0e23c1f76746fef9e733f1c6817f1e9e058a299ca2636d02df7f3afbfda5f3095680efaff4fff3f0f9efbfbc2b70103659f3ffaf73911d519fc2fffda5482dbef3ff9c38267c3f1bc9e2e8a8f18c2a9abcf29fb722f81c959c51856af57f0d9d17be7ffffcff9962eceedad498b579daf8cc3fbfe4ead78ce9997348fef3fdab3c059a51d56b2f2dc23f8f441871d463a86a442ef2e76fddf2fde777fbbe3f77aaeffb2fefa6148d7e0c995ce10130427d634e6c67a339778a8fe66d3eabbf4f4fe14b26a34d4f391bd0d361027c7f66e4fb4beff67d7f66e4bfcebd1b766a0a3c7543ed96149e3c8c95546ca2a8d6959efbbf552a7cd1db7568125e4262b084d80b6d982e57a4553745da8d20d2c66e12af321cb65719fedaab0c77ed5586b7f62ac3597b95e1abbdca70d55e65786aaf321cb55753f869af32dcb457195edaab0c27ed55868ff62ac3457b95e1a1bdca70d05e65f867af32dcb35783ded97695ad67bc28b4f940ff36fee8caead1d5e3ab47bffb40787463f5f8eaf1ef86568f04d03d9a5d3dfe68ecd19547c17dfc47971f5d7934fde8caa39b41e247bffbe0d10c608d407ff74104fad1b5d5e38fa6bf1bfaee834737a36d268097d5230012253d162a0224abef420f56df0da17934fbe8e6771f601fbffbe0bba1d5c1681ffd309c71581df48d15e0f9db38c25090f6b0026872154093a300d20baeee16a9f6ab5ddf7db07aec7ff47fb03af868965ec0b8c185487b132d9ef9ee2f91c2bf1d5d3d0ecf2852b1baf8dd5f568f3eba1aad3886bf74e4c470755a3d2eca7d98ed20bf5146a31cae8f355b3f848637c44733e2df8e8aab8be2ea31f1d16c6a376d21c14ffbc77eb2f0daddb51f5dfeee2ff401e2b3e87b34663f2a78c3befb60cdeeda61c42d342b0d6df3431e4112ea60e356d650c79a9a66f7d165fbd57874f3bba3022c738f26fe7666f5c8777f79743369a33cd4b194ad83a1c3c96dfc5be9b030c0abfedd5f52108b66e44d6ed34c957af55d1c9ed86cbc4c95fa6f47e93339fae886f0b7a38f6eae0e3a8b195d28d9bab60f52083ae70a8ed2ed62101e5d874f25079fbb351e0b550c620c8e2d775f3c1e2c1fc4f9b7a1ef8efe2d9aebc8d9136757e7427c1d81d9f9b71bdc3d701e406f68c4661e5df95b24e2dbddf0b6abd933a6095bddabc3ab5fac7eb93ab23aba7a79f5caead8eaf86af37da23d7a8f3e00dc996d991fd9a6b7877c1b76e0d107dc1ec4edf6eca6bb3dc430b535edf7b4ee4cd8ef69ddd9940d1f73533bde10da714c8ea3635f0756169ae3e8582d10c9b29355f80cabf92e56e1b3ace634c7d131568ea310e4f3acc217ece68165dfce71142addb98345ea1926ec2e26ecb3cca1dacd84b5731c85fbc02c7d81c98393e308c8d96f56d065ba97abbdf5f2b6ef963eacddab4dd7a696fa973e1097deadcdd5a697fa6b53b53b4b1fd0ec40fd4b8745cc5ed28f59886869edb6589b5ffa4bed1edcc305564cd5a66b3398f5e8b09d4c67e9f0d287b59b88bbb6585bf0dfdeab2d7a37b3b5b9da426d8adea6db13a48cdb2c87594d62d266cf66ca66c666234d8ea34f31a1c9f1da5ced6eed666d5eac9dc21c47c7bf198782af6f88b531cc60e4831843067d051f85213e5d1ac41c47b5335e69ea2c479fd22c47c8874ddda66953b2f1dbd8536639fa14715254f08762035c36a6cd2c476bce72f4f50d3bcb51aa1c47d702398e1acb70943abfd1b1a5134b27620930f21b7d331eca6f54bbe7e437a2f971bebed11ecf4793b7036bf3b09c26273aba8b39dc06b9898e6af376a2a3634d4c74044885da5d18976fc663131df1408a3e44cea872b5161e40decfcd3a921c51046b4c72441b3fe62447c76af37df029ee83cf265c0d6ea63bdaf0e98e7a37d5831f5a3d70412b9ada29e9fa9bbe05d8dd9e7f5b368aaa69ecc729b94de8967ab709b2fe32aec681f707de1daa7507550df8972967f6086d194929083959310d23b34d803b4973eedb43ef59a6e8b6d86fa88ae235a0b711f83c859714611f2938d065bc89c0e66c5821a79a8ae101d3db0878af03fe9a2a691e34deb5fbe6facffddf329ce581c1833983e3d3d62df5b6b7ed688715c957d0ea980cfec47e3c74ccf1e1306c1930fc4e4667c79aa19b1dbaa16dd9b1cd299095bcf4ceef0e6ec90899adfe95453e286c91e4835249d2de940a52696fa5529225fd2df5b788d1592e79c6930c1132c2d33691e8d6790052898272fafb06d18d0dd9db1e593353771880f97d6ef9b77fb39bfc9bf026b6d0716f0678c4555ad5f242877450d524bc2fc83d92fb3129a9ba44d7e1cc762523484a1e7aede293b2852c0e78eb0e619f241532428769c0b37a96de3a806e83ff7f8568a4ec60ff4f5931a482a4fdc9abd76c0effb343554b1251dcaa96d0134c31bafec1759f245a225f550c77f569dd117e70b2fe5bf2dba4477490947489fd5c7c99cf7fc1c8a3ded222fc562ae03228508685eddb7f2990d2dba018c2a36112840a3f3dcfd5dda5c570cf6f69117ea7947a8556212f17642358098d7709bf70458d7ffd57c1cba11eeb911f6246e0e6408f0c13936d26df3b29cb7a547e429503ea427214151642352d426b384806a8fb702465bb8f9b6a1ec5f0510decf188c3e5b2b43579c0d843f68ca06ac22e7bdc70566952a7a9e9728f54ea153a8b5267b723a64567c3db45b924b95450ec648e8afb2af107b8f1bedb6f5bb4e3d14eee557a8da2ac148412d1e06b6d1489e2767a0fb7c7caf66798138ad59d1de10eadad07ee3aec59d74a1d3ceb5aa9839322909e06ed1c062de6aa23927648dcdba155274b25312749fee3a0cd82a91bccd3a07b9cd3a00fa53c0d9a92ce22e1ac98d30e658168d6a198058a59a098457a59a09505425920924d19661ff514f0a5cbdbaf2a4a5e2a88b9eab88c17fbaa938ade59a4659386f1b6da5914f7a98a22d9a52f6b920cbffb499996a4cc79b75fcd02952c5080abc9acb84fcd8a2f6b59713fe1f52598ea6ebf0a180001b417f7a9e2cb9ab89f34cd678293db6e4fb92cb4ed35252d72ee919de1ce3eb38a0393600883ea6c62a2bbacdfb215c35020df1daf51bc512c2e03db2bc43404b39c98648c6d22c333744d49e36088645b6383f972acfd7b7552ef2c1a5c8c5e2a354fa362aeb82d2dc23ef9e04149931450b00dc916f440b61732de3b9111b6bc654a7a9ef46e1588921732be3703ea8aa6462bf3a62418aa5029aa8a5a520b722729099a5992a2a41d1f6950fdb279d2bb857fca11ba12efe4b80063e52e4ea5e01366dbfe43c241531cf39f3d760ca76321d1f1988538196ff88025f6844c694b8c68566c5b62482161d91225a102b373bfd40d4f3572c8ae6b3fe401943d327e359c673ba45a73144d31151ad77688ba34e318e254585cf3216a130ce361320ad78488df90c849cbbda990b8864454c8d9f321d18c78e04096613344bc8118a2c796d5ec49a4352b756c1add7e68a31bca99dc20cc123708d35a18b6166e5a0bc7ac85016be19ab57056c4ab79acb8602d4c8b7835672d9cc59b3bfd783f416b2e580bb7ac8553783fe5879fb5163e452cb4d5c28075e784b5308a5003d6c21d6be19488ad6691f6a40305bc9cb5164ed0fb214431ead29ab2168e639301d15a38ed005fb116a65326b2fa69f73690ad0aba378ded6629f9e3148388357410de4590b394dc3c05a3842711c4e67a1e5980b198c0ce24d1f78df70f41de4937b5701ac85282ef026a8a7e926285419dd8746ec681ba429f0d0a496b7572c6f90baf143ea93fc393baf39eb530dde7ab18c0e97dac19f9a9a358d715d5b55e8f675eefd7906022b663c27abd9f71bdfa0a993b0b0bdd9df790e32b74e1494c14e6b5be8617c79d2e2720f0f27c3993ad1d665b9b75e73c1da8242481f4621e1757e81292ba33c19c63615e70c06db4291136d305010775ce5a188875a0b616cee3b8d37e0fc32463a90ed6c267f015ba731c7b701a6724b6ba3388dfb02bb8329f753e121187072f2b59145460b928b40a71e8bce46331404507cf9f1d76af58770e63278f713d155241e71dccf6cce13a2d702172360618cd5300822f29d77b2101aed7e1e71c6318bc9c62b4ba41e5630b1d5cebcef1adf179add32694c9b80899a7a1f21583cd50d60da118988a6c843c7533ba8e81c9bad46d2af907a7457af170517e38635f4b813528534678fc623e382ddabfba7d7136085ace78a014e4c109404cbfb741bc45c4db434a44c91391feaaba7df1201893582c665c5817e6e18c7d418288f388382f4b0a11e1afaae34f08653e9fb1a1ecfa8733f8134296a3bd7f705a3155117e245d762e1e041331e772191b54d265223bd0d07d7a650651f752d49201b0920170921186e9cd3061ec37cf7e19dd69616844d14bc490f64b9daa92d71b77bb00c92700cc5d1bbaa592acea823391f44ce27e8e23ccd974859728928733826f12e2a0403171704b3a2b7e9edb7359299825a235def518270b7d4bb7d4bb95fa586cf1f1efab6b75fc2fecfb9daeaf559855bd2275caa4c45a7b83de5d4f09adf689d5fe83ac7f09a5bedd5b61e70e1e258f1d06115c1cd055c4a70b7110b9a3bb363f1e4dd2cd926f9bf669212364421bf1b1c787db2cdb789e6ee869b7ed68f7b1c6de6d4d35e35dea5bc24f307622ec684fdee9a49e088cd1e3b110a0d7a8aab1c68eec6c8fd9f60ebe96689532b856298363950a0bc8f65658462726acba3d44279aac8add6a8f2a76d06fc0a2ac8a05a9603e5c842f4e87ac3d5c8475492cc95245d545cd2c54ba1e4e3e3821ab70ad3f38dda58a7a852008a9746b3256153453455c1cbb00fcd30df8d49454457238d26d8e74e088e8364bb2ee32e4f2a3233fc461c79075871b59a7ece8363b5085dcc87a0c2fb2ee6c13b6ec6b53f7b5bfb4e5c081b6b63f1e38d076e0407bfbbf1d38d0de77e080bef569d0e85feac3bf1c08dabc85a34107ad683a31a1c7d05be82b74137a087d13b54245d40ad819e88958d0f2c9c62aeef396bacb04bfd937c48aacb9d7443134e7dad0a4072764e7ae5b327a64cd701b494ab77bf370587a38ecdca57ec00e0bb2eeb120eb1e0bb2ee6701e6808f0568e4b220eb7e16d23e57b4c9a01d86f3702246b7fd52b7f886ac897b15437c4b93c4d725437c4352c48797a487c3e94c67fbc537c4bde25be2ebe21bd06ee35ac9fef0873ffc617b2eb77ddf3eb6950cad586de56cbb9d3b4d68cb67595bd45cd86d74ec85b61e5262b68c6b4a37bde31094e23be1a57f4bec442906368187f8a6d13eacc7fcf4f0920c6ba3a424599adeec35d4ae54912af1b6a2ff8774132dd112f486461e9cee32f50776d6f9c76ce8a9a831169e8a264b0f8719003abe5e41c99e65b4716118569a88c4c432d3f01014532028166310e45320c8e76310e45220c8e56210f4a640d01b006ad0f8e20690a85d72b3d2f802aeb564f05d5fc4c613da3c36366d441bd846e49a8824dd360b3df8a4ec18883c43115b40c83876a08793868476a0879306b4b78b9c5f7efbf522407b916e984a9ee822fe3e1828d30b62fff0dbaea7b16b5522b6d569a02c7aa6a898766b6d681b9d3e51a487c344b42f64a94c2f414971cab818d68f02ad54059227620184dc32fce878cd6d91ae49d0cee50f6fb0a30b82d61a3b9080c63cbc2810a1242905a3886b935c967e4e5dd48517ed18881672d0903481d849431d3037e6211c874015942da8133bb9f4422687068d692d2dc26fb285ac70e0673b5b057b521ff8d936e1c0cf9e716ef5033fcbc67d275c2b51abcf2af4144610c2e2d6daea68f56d3b5d85beed99f634ded711d6f4033f13882ec88a70e06795079f740a81aa2c0f81d397079f94c30802554deae70eaf9f01e308c774e817de7e2f1bc5374aa6e6da445816a518931d5ab66cfb0c31b6783636de74e118dcc23ca5b073b1b86a161bb1e6e43446d44c9e3c5cf45b74518a270f171f0c9405f7fb92f1d8f0d9917ab876a41e9e775317517a1e0c68b22e1e943a34935e968966e822a9680f264b782b77e962d7c349c5fe2dc12f41a77af8e6a1573db453bb0d152f14f4ab87abbcd449afd2b91f75110518010e803e9046c24815480239a0032400790a3f1fbde7c12706fd405464ad4caf5443a31786263d1ca6979df0445c48a9dbbed4259d5ea5f5e9d9df23be21fe4e7c4bfcb5f846b7b83fa541a1a1463fa8db8de3171f938e3e2bb4c117abddf1678f31288441b7c5bbe2b09bf8ec08eb54be5578d442c52c75eb460a1dfcc1a491081ccc1a11071d51cb637107f573527830d0653e1c7e30e0f872c7b56daaae0e9fa7186d5dd6ca3a47590f2d9b2c5d9dfdd16128eebc2f014b7f4f85b4981e699105cb449a4f8f34cf826522cda5479a63c13291f6a647dacb82a548d7681c60bb850b6cbff01fb576dfb3a9dd6f04eddeb166a95a50c57f5bd5f2fa1ee13f8596162fdaa8a0917299181821d44974490faf5b7b8436db2a90d9e6d80788772947721d94a1459794270a75b904d82e29afa8057a4fa22db0890b6c43795761f8a24741277efc3a614123b80d8810f437ca793e0f9079829922f24421ee6f183297438ebb245dea4446f18a789751e4bdbdd0a4a0c2db0f707825b957249006c2ffb557354dea34fedd7b4ebf26c1549bae80ae6af9d7433a8110d156a836f592036dfb377841c13b8351e2bb7ca0b839ecdcece4e69571ada94c26e37518670edb5484177db3398b1318551a46bc77b7d49bb5357fb63f81c0d7540263e1f5b6d13df6903ee8e39cfd10234f2e79ab3d90c9af2cf1b4a4b2c48935eea2b1c607ed5863508f403b914b629974895da62276992591f46094b1ad0f118daa4344b3b521a2d9ca10491765dc45942c90cc02bd2cd0cb86c965815816e864814816083425c25891f25d52a98b8815d5b9ec164d43d548b7a86b32ac22e2831392d1a319a45bac48f057373b5423958e440964017916b066016716116601591670a58b2e5624b1a28aa621ea1ab4172b92a89b4f20b698a73871f4a6c7124edc581cf13a02886131d7053346170228bdcb3434e281b1f5a0c4a8de46436b77a4097235db85367b22c3a519173b8b589f498b95be0de990ee4e8d145ea574385be3228bd714768c95cfa664d50e1a4e1b33cc51775181ed321f9c90d8b3cca7e826cc1e270f0a40ef23bda1d34dfcff326d154d7d385c92bca921b923be2dbe8d5a6817dadca5b19b34d40e96d1f44d24778e35c69dbd3a37c85b456aa085e4cc548fb36883b03820f8341fdf736af35ef78800f1182d178708cf6e21d87e065d12d37281fff0fbd3ad96e46e5570e4faa8058342fac41abef34103b0e5f4b0c506f0168be961f3ee28a0f01fb15da44694731139ba41c464911a57af8b0b1504931138c2c7f5e3b5553c99dc916569d356b1116c156599abc2c81c15e675b5286f371e0c1892f88a296f3788523035537c43358d8793db0d69bb4694822cbe4124a540b6bf5d7c3000ffc55788460c93886fc8155993c5571e9e500aaa0cffc557244dda6e989abcbdfbe189ee0703628e1401e5ef8bb22603920703db15b33b5840a9bc42bae5a2c4d315826a10300e2c03abc01eb284fc38dc2027481d486d57e88f46904c2c8d37a582f4ce1ea165cb4b7bda3264fba10307cc1dad3b5af167d73efcd9fdabf6a70f1cd8fed2d6ff6cddf6cc9f5ae4289ff8849a82097adc34446be26b67109d4f237cf3c180412aa698238a24bef570529364f1f79222c1ef5b0f06644312df201a9135497c0540358937f46155f02d22e608a0147f2f212af10d023852e97f0d364ea5de71f4bbb87db18468f4c460f4502c7a9bdccedf0463264ef75aac5dcd9305439225a14c8a4421db043941df2315b5a2f2a10249a19850be9c50b242145294d9d8bc845036b6b78ba49b944dc3540a84dd2490d72a5944e448887b848c2c68aaa10a32474ca4d9ce65a16c92080b7b848c2109c5079f74ab0a113493680c209d46b1da509188e03d42a628096549918c8868592ed3b6ecdaa24d9ea85a046db168536555e6294d46459eb68ad6e46c368946cad1ca9ccd26b3b6973635084350a3eda06a8d72d95f17789985febaf053da422acb9b62d98610cbbab9625937f78c983378b0c3606d6aa9bf36ef9e12e31684cf8999afdda16567c4a533781ac23cbdb803c0915362ee2f1dc6e34ea629323c92a5b6e815dcab2dfaebe959316e41cad362b00bc1d362fc67c5b8acda8c06ce89b9ef3f27a636d7c03931f76a73087ca73625d6eed7167d05f76af3b505b1360d7dc57326e07669008fd999ad4d894bc76a734b87719c613416a0fd9c7d89a73adcac2d2e1dae4da53e210649db5cd8746d7a362d9b828d3de50931f724b1765f457c880d712126716980273da7f4fe69dc868dbe3f4d3d1ba6b1a361d67d32cca9da1c1e393220d4a66b8b89a7c27cb974181e602cb0eb7d53fb1880ec9359380d0247c27c8cf3a2bf36c5c59fdee8d92c9379ace53bbd05bb76a6f655ed2e9e1233056f11fc8f8ccd46b56987989f8785200df30996ee661a2d6199591aa8dda9cdc5385dd9878acd72fcaee892b5505bacdda92d2c0d064ed7091e9726f00ee18982d1637870f0960671fd64b95ed113785ca008164c5ab374ac36b534c04d6843aba304e8d13bf01188397307aba36d7336f773d0c9a5a3dcb4351e4894777af8ce4c6d11868745c43b7bc7039a5ffb093cf0c5ed83eef4c148f6d5a66bf37df0e1ee83015ecf593cbc5cf2d1890f903bf7d1d4ea0158567a799f37456c6e795f601774919322cc4958ef926f0cedbd94689d3412fe32cc25918e12cef1784a5ec6fd58070c3ffbd30d208dcdcbe6e7b4bf01a4cf097d7d42b0e8f9b4ccdfe5d259fb88b2dfa11fbdc5bd7b53b5db10aa5d89abda95b8896367cf5bb363d6dc80353b67cd4e59b3f7456b76d29a3b6acd5eb5e64e4051b0eeba35bb68cdddb5663fc36af82b5ab31f5ab31336f8ec7d6bee1e02ce1db3666fd0faf3d6dc616b6ec1b99a9db6e68e8bd6ec27d6ec696b761e5bde74ff8a5874d441e954cc1e469eee8ad6ecc7d6ec10965eb4e6de774bc7904f0f6a1878999d778b522697754624cb1889ac3702d970b7b3693a9db57b9d6577321bee5cd6eb5736d0a5f5bb50d1ce5e80deccdec0015eb46667e95315add911247516ef87acd99950f567d6dc9f812fb89f0bd55dc5397305390f5450f01b7669a4ee289081fb19a47d2304710b11862b5227b175bb8a9323d8bdb9c570977cdd98bb1365fd3083638fc594996d91239b179bbe4d3640d02605e8d7a54fef158a7bca65613b9dde1ccd9a02edd1752e5cd3d3da6e131238e3e9db9186eb51bdadd96388e504fd9b9842d59edc33d6dcd1343135db9292a1fac9c352c1c41acc7b0aefe52ccee30bd8f042bbc023d5e42356a3a4adb913fc5ca702ae8c03d6dc1dbadeb1339dce1eb1e6ee59b31382f39e5fc7bf5f39afe9596b6e919fded45e4e879c37fa0eac965152654aea63ba9e0b0e114ad0fb0671b5c2b40d8a0c3a5f621b97c3c3f04de2698f691be4c3742e639b39fa95e02a9809703906f78b1cd09c9f630e506f18df1cca105fb140ddaca97e20f68c8d24af860ff1222ca8ce47b9cf299ac3eec27bd567cdbee78a2fec99dc87b48fe3a00ff856856388ed705f944e7087db66eb15d5d458e9aaed6a7e9e6ad4b2d81a11ad17128eed024c5bdc8cd934d3768467145b11df2f5f14766d15fafad8b6a7309ea4d1cba4c61437c89938450db97e5a68ddd9a886060dd36965cdc937be2b3edd78f499f055db9419cc23f33d05cad80303d33cf14412f19688a4a9d078f6f5e4814da3d8963615db1f5ab16d46d25267ef8115928456f78c9e61d8dd79c90f968e2c9da8cde2df7bc123dfd12accab5d7a3f6acdb3a9c791f7ce068f3012251e25188e3ca214cb61827671a43c25239ead9cb2e1ddc730516433518c94a71d8da3b5a9da8c3d0e785d9bafdde692cfb3c9e723e529c97f335e9bfd667ca99f320077b815ce6720c7662017294f3f1ba61cf2f43a66f07bd9c47b23e56967c0adda7ced8efdf4f19ad377feb16f012a0987719615aead4be1d9ba6a9f2f9da8cdd466bfbe519b593ab17462a9df1e26b1365a5b5cfa68a9bf36bb34589ba94d41a15bf7c9d2e0523fba03b06a4fc123ff661c6a1978bfe0b63b8d58a194891537bd58359fd7a66ab76b779975434b034c2e4ec6f00f75d3b5a9da3da1768f3b3c1ed0d211ee48a533afb53a48773a17cf3817bb9c8b679d8bddcec573cec5f3cec50bce45eb0ef7cac5ddba330d4f698d64b5cf973eacdd85873285a33025d6ce2f7d589b71bc48ce2d1dc1c5661a6a2e7e7d63a97fe9446d5aac7d84c333808e27b58f0047ed6603fe1a7eaa36459b964dc5a660e34ee9aff1f9d287881331223ec486b810d3c64dea922a4b6c6db1766fe97db411c1ea2730606380e3d3ba50e34a6ccb747aead7d7bf19ebfbfa7a6d34a036cafa1b39612d872801a61ff4d824e84fe3427a986d61bd87227d3356bbf7cdb8f31d4e749e398fee6b74113b9eec3d7306deeba523dcccb27e6bde37634bc76af3b09af2380958f280f1da0c802e0d7c335ebbf744b2d73ea50bb5591c82a9a80f80cf76f7cd78ed2e8c6b6c1e5b96592e55025b969d2d55e25a96e12c55c25a96492c55a25a96e12b55825a96856bbdf15caeb899ce81629b9d1431f21a3bba11a75ae08bcb5ed5be98aa7dcc4a81995ac195a019be4bf1a705f3444721ada6af6c6afa3fb4a60f62bdde5bee504b395209a5b06dcdec1132d6e815ff1a94d9490bc70285cfd0c2c06a95d9450b270285cfd2c2c940e16e5a783550f81c2dbc16287c9e165e0f14be400b832709eda085979d637eec3a3a59a37d856e82a01cc001dddc035d0e168e43e133a1c20928dc152a9c84c267438557a17077a8f01a143e172abc0e85cf870a6f40e10ba1c2cb50b8c377a451c88ee3ff3ce5b81930e929e93e7b0ec5123a8946350d1482844cf8fc99f83cadcea247a9c42c7a7a668f8f883532648d2c5a23b7add17ec11a99b7468f61d1616be472e6e7428726916ec6d2e519797cb89eca378ca11c62e6436b6448b046ae5b23f7ad9131fc7b31194939ca460083357a2c114991cdc9088ece7c72f3629487b46df36cd29791f9b95418f251ea0d34cf719fc26d6718179391e4984fc1c190e211f4b2d998b346a6acd113d6c857c9187aa33c78cdf93c44bfa7f08f25ec3f86d70c2b0eafff654b8987f5ca59238b917726c5234f7ef1d2b1c47af7284bf62b948699983730251bacf790b2e1bd4b6938897f1b5332c37a27ddc7e4be5427ac911bcd78396d3c691863bda59431df9b9682a58477358e19f6eb6acbbd146556932a25d2296d69792adf223b49a5b7b2d2379735aedd55e3fa188e9c470ec7f0059cc3eb296bb45fb44626b1e82a7663ca1a1d08555f776e4e58239f89387c13362c3c8b6904193d260285d1c3d6c818bd1ab046a6add1e3a235f29135721adffc13d6c845112714457011091f06da23531470c8a978df2d1dc39b39acb81d6a318c2cccfb4b53e50af08f46963104d970bfb3e18e67ed6e67bd7e67031dcfda3dcf327a9c0d7736cbee6736dcc526391c420fe69cf77b910ee53c92bfee2fba8e837ada1a99f1975ec52e5ef1179dc6a2291c06aff416960e3943e6afb0975bbb28b5f7a0c3b7c76e804b8fb9004f61563c0e52ba08bae36353b3e9d8446cf4f0d30ccf406754ced38f41a2876012fce3f3144ca29ce8311846b01eb3a33572d41a399fe83038f21e7cd99caf47537c066d4129f688740a485794d3d6683f823f6e37417ac23950bd62f778347296b79b9b0057a8c3ce7a37678df633f21404d5c688b93101a09c549f04504caa4f02c827d52701e492ea93007a93ea2300ece75fd1a40a35467ac61d8e846f4b19b4d69332daacd12bd6e898353a6e8d4e58a393d6e8556bf49a357add1abd618d5e6e6f296cf3e12e13a3b3981cb593239536048de466e365b3ada8bae11c52b9d6ae1c38906f905bd7c4d520b7115f47f8222dc2f2654b0efd7df8b5a74bc20cbdbf8c1f9f0957a6ea7364ea1bf8e5f2605b369cfb62c85730d2db64ffc05f608ae322ed4582c7208b62603013c9a5c71b7e28c93df9e58b42eb8ef5f685f1d4d7e663193f3f1fa7bb64741224fb3626381e869ef2ba7d25a34f77ddbe91bc87d7b85764f2f8b19f6d5c84e20e8c50dc6fae2d4271775284e2eea644286a9bdb3b1b617ba7ac73ad073acf7af01ae63597c59769627359cc914e712f2636cf49b2f89aa988af9925228bbf2ba8bab89f26369734f177dd860abfbfc5c4e69226ee9375bc48e7a7f41a5180a443cd4f4bfc5d01090109400f98532483d95b2479f1555d911571bf54223a11df241da6f87a9194655d7ccd2c136288fb498791941bdce5716f1111023ac005a8000f2049a75eee2d8aafeae2fe92f86687f87a597cad2ceee7b54cebdb938df1edc996cb59ee814d4d541385b68ad96d96da05363bdcf42dc166e9c4b00a29c87d86a414489168725f45328852e82b931229f364aa0d225201e74d936adc114827ccb4ae4398a1439c11fafa42f12438e88f43a48908c1ba23d4e8c9528d0e42436cca04fa24e2c504c4f26c2c16ef11a440f5423c4374881b1630e81368a64bd72b449305599105fbd58cb7b1fc4657bbe321c3c79c7140fd5696d7a5529968b2c247ecf7e5a2884b5285e8fc06cd74e3cac398c724d9794a177a895210902566e06587d42169a442049d10831b60c9aac4a0485d2acb8a1cad73222699b545dab28b4496673702925197a7ad7092b3dcb868c2c868658eb6eb304bd124e06efc22b3b697b63448d18cd639918ab4b671d1f94791dc43df149d3786e89cebe50bcfdbcbbd9bf2f3a6fcbc293f6fcacf89a436e56736964df979537ef6fddb949fbd7f9bf2f33ae4e75cefa604bd212468832b3f1b31c2b34234f1658d68628e68874c5772eeea32c507974ca5cb14ffc32c7599e2deb7df9675dd14f74b0648d09a29fece304cf8a512b4668afbe407efe3550322b44680b02d427721492008e4801410b165e807efa710a25f2d6d7f7099e4f3e2abc6f6b714a94bc18b922c1944fc8fedbfd13a0a0fae10914281580d5797e4322dd5b7ef973b8cb4d235d011df5224f1ad922cfe46eb1001a508d8c4fd724a01fbc16522bea5886f95c4df68d01e9a8bfb79a7b63ce6f8d3e6cad829224da3e0eb11055e2d95ccb270502e6d6f8f9702fefdc11592277190c18f3507d02f03bc5adade214b1a79708587962103c8024cbb7c9eb4736934531038f83ffacfc6cb017229720208be54070dd91074a95b651fae677fffd9f5f89577cec5e64b0026e3f414fcb4ca120c125708b0eb23f2037eed1f0c9b9a42a2845d59e0c1b0461429d218bff8ef80accc1506de299a914a5b16881e21e30a02ba223794675af8bff1201563539cd808e2446ca8627d60201aaa581f381c0d55ac0f0c464315eb03ef464315eb0347a2a18af581a3d150c5fac0b168a8627de0783454b13ef05e3454b13ed0ef862a72a314a187912845e861244a117a188952841e46a214a187912845e861244a117a188952841e46a214a187912845e821334a11e544be9d9569648511eb3f56ef3f55ef5fc0bf9fd7fb27ebfde7eafdd7c57affa7f5fe9bcedfab0811a83e5bef3f59ef5f10ebfd57eafd43f5febb6ef14d11b1dea388e9cd54bdff7cbdff5abdff46bdff5d5a7a01db1cc6221bd3917a7f3f523a49a1eafd67eafd57c57affb0c3855b4d51d9d5a79cfbcf43ed3eaef75f47fa5e69aa50077758ec7108f437beb3ac6e7a5d0bf7c563dee63641ba44de4e6223daa5db3884a79003e0255477de1d3f3ff8a458ef3f8d4c7e8c459fd4fb2fe2339a1791adbbc8df05ecea4964779ef6c465fc2ec57b04a9259db8e38daac7a7cd98cd4c84ba474e4c45829e57d844023cd97cc39e6a9874a261c33279dc6186f5fecfe8a865db413769c35761b1de7fb59d239ed34667b1117d873fc5e7002f4d1a14fe130ae3a17de71e3a046f66ebfdfd4954fc5107ee3b5eef9faff70fd4fba7ebfd5fb913c6cd711287ae696724d2998c84fe8c03f795f0942eb88439b109d8ea9eb3b4877b4031b0821532ce4a751bff42f32c2e1fa71cf2f3b8947c56ef5fe02a0c111c5f31a0cbce527604d19ec555f014bd8dea130ee258b06210e5291c37f85c45950c071f1f261f44768ecedba8c2e160e200e48268ce47f50e0741a4aa37d29d4576bf9dc31c0330ec39d7841088fac0407de0707d60b03ef06e7de0487de0687de0587de0787de0bdfa40ff6608048bdbb77161896a6eeb52dc406f7b126adba6157843a86d4a074fba573a7856e02e74a1100f520f0ab14c345d2468072e1359ec3215f853924562164cdd1075d78742b57d2814c787222f35e243d145942c50cdc692cc02c12cd0ca02a12c10694eb0ae5e9d57f2a4209609fe18b2a6c3afaae08fa1d2db839a043fa5eabc962785b4d661bd3a0fddca8a869c1555252b1a6a563ca865010f8ffb907158afce8b65221ab2a82aa2a18a073568bc71f317ee4b3a99329b6c40cefadd2dba4bd99833b85d4b2ab751bce4cab526d373b8f3a42020aed803b865a1ac6a054989030d9c9bcd81f39fc32d14aaa31a0fa15f003da86a9a5c909ca311392d1a9431e34cc86ac246b22ee7a5c83628be6a8a2a29822e75c3d21c319cfa6dc84c0034144b86412dc5b15bc9a66144dba3b5585204432e4b5c533254465ae6ed96f0e6f3acc879528836ccd90dcbd551f810f1ecc8b43adabcd7e97175345ae79893a18efd4013d3eb1d38906527d6cb3c95cffe94ccc94ac7a65cb211e492cdcc773fd5cc7728754a5ca9538a4d9b33e6e4f9e166cbe1a4ca39c24a953372dccd13e34f95032d8fd336a731f5979b2d07e8f9d3c75cc76b3b03ce91989c39d7a2e0fe6c325e45ca43f9702c52a5cb09f73d9bd8f3acddf56cb8cbd97027b381fe0553e4342b3fce516be4182625b91acd8f73d59f1fe72cb2751abb71359a22c75f043cd2f45557792972ae4653e45c6d34458ecd7ad663391b6635ebb1980db0960db394f55849a90f5823471dd236ddc30e39879643057f93d0ae5f55d88bbd79df49397315275e24118a9357c7074cb3ebf0e09bee8cb24d48c9694c5e1d3682c7663fdb4c21d2cc142223f7fb7c2fe3a23532d6e7a4e17bcf1a19a02f959b3c64c01af9fcc7933064e4fee34f151218baa6a60a093e8227972a049ef113890568283fc83329f3838c34e120b5d0434dc6b73b313348e861362b33083eab756403618cd61a4d434223f9d0aea18c306d8ddc4f3c7c0151d291bb6c8dbe4f2d3a6ddb92420f1ca9e73cb6493a4e1504940fe9672c8e4073cf60a0d26b8ccdc811cb17a9b0c9b41e21d3c7dc8cb9434e5ad02fb996242f1d2efcfd121b0c33cd4a913cd3d0e022d7c49400570ca03ce390bec81803ef28d478b87c00257dc9c6b8c6282e442edc595f3a679e752a01ae3780f2aa979a9967b00a00b167d68f3d158f226dda9b3682bdc9a760ff5e368afb5418b2c0969366644552d1b26259c21da7acd86596b29c1da7ce78f5d7a5a39a868f1450024240c72103548008d00012400108f8f1ff3cda13ea0ffca2d0d6f2c72ea2b4c8db84963f1e943ae8459910cde8831ebdf42fb4845434bb4a92eda22e536993b3ed2fb9b725ff2d310bf442972af442ed36e885a2f6d08bbcd4d9223bd2b8c7da9b52417a47785168f9e316ba9328f7d95b89721fe50c77f6faca92dcd765b629a576b98f6e259a7a9fbb99d8676f26f6399b897d79a9935e7411e5c081ec4b80157fcb9a81bfa4a2e12f454a8bcc02feea52057fd56e0aaaa83df89b973ae1776b8b1cb45f95b8f6ab52fcaea9ec6c9bca22f6d5d9c594a21ba7a61ebf75da997eebd4f7326c13a882c6142bff7f51a5c4b75631de11bec8d6b23d97cb6d6fc91a926e6cb1493680dc7e31daca59acd8b235a2d52509740c6e63b005bf2ee171c429bbc77fc31eea3470b8fcd8808feb15d81a3c7fdb6390413df655f11868f075610ca213a2e0bb0b59907229e074e8461c20db907848b5b7eee9de7d5ea69bf66fab12bdc8ab4a5ed2e0aa4793bbe0f71031a44676f00fa974033f2f67c5b7d5ac9857b3628f96150f9194f6ba43aa5826625e16df56c5bc2af668e221b29177efb7e772db9f58f457f382bf40b7e98159400a825a4ed8afb777ebf97081cd7a36986fafbe20eb86a47111fa37ebc9c18254522b92e26cd7b39b3473b7be47d2e2f7eb0b5249e2edd84b92225408d1045dea8477290ae5eddab3015065aa8e57c71534819809fbf65104450f81190db772f527465dde6b99b4731f0df8f6b10dab0b7fef1e6aa3ed7bbdf65d241a42e62a4358c97ec289dbf75b7443eacb4b5bd31d8ec7b3d47ae71ddb80d45029f4f509befbe77df7bf7c116d362f0919dd90f030e4bc94897367fc51bb0e6c1e8fbfa9ca6daa723f3a55ee577c6784d2f60eae3fc2a63eb7a9cf6dea739bfadc4f469f7ba2d93c36f5b94d7d6e539fdbd4e736b43ef7abcdcdb90da1d1290a5742573660901ad5fd8846753f12a7fba549f4ab9b54d4a98ed2b0b3deb8a83362361475662a88179002464007a8004fcaa033131088466f9aa0b31f6740d90f114ff6aa1d4fa67677930491e6550c29539504e85054190fd427dcbcea0496c5c13ae2cdcbd5794d2a5447e193e80598f15a3ed918b3681a4e3bc6ac5b93ec18b28410337680999c32c08c1d5e2627c79745a587bcd33441ac61a422735ac2fb4ee223cc0837c24cde8c305bb758a16c0a151b41a8888f301b6745988db322ccc6591166e3ac08b3715684d9382bc26c9c156136ce8a301b6745988da78e301b6745988db322ccc6591166e3ac08b3715684d9382bc26c9c156136ce8a301b6745988dc7449855c8ab5ca1b142b6cb21b991bef79a24104d72844885942581e84245d284df128574eb455294855f3bdfef0ed38017bf17db28aa2198ba9487069a5c90f3a55e01165b352f698af086a974910e39cb1254adb1f3d6d8983536678d4d59e3fda23536698ddd851b5fd1756b6c118b3e13adb123d6d884357e022b8f5b63d3b4feb80898c60f5b6363f46ac01a9bc666c7699bd3d6d8bc353622d21f6b7cca1abb6a8d4dd1ca212c3aec1621433e90cbd0cab94f19a4f693e95820226dec2460842e2c520cf3d6f8fbc8a857741d319e463ebdd2abc8fa157fd19c35deef8c888b6eec2e008edf44e6a3756363d8e8337f5deaa034e4de633ac0abc7a2c7998f21e426c044ca38b42741b3b183dd61d8ce5be3dcd0332fe88c0bf93882ce92b84b3ec6dd6dba46dd837afec37b931cb000cf8679d47a3054c17e43e18de51fb41e8852e0220ec6278c4d5863f7adb173807bfcd8e33fc4dd09408031be8fafe76771710a41f6d8710a634338c93f1770860f21de296b2c1226e0c529c4c3d10885b163d6d890804b120fce0d4f88012a3ac8702512acb13314ce1a8b894d7081a25dce87f15dc6018a894de041e4c298ae5b63b771ed186330e78527f8e1a2fcf586b1cee3da3acd0f4f7021d893aa19619de357acf1316b7cdc1a9fb0c627adf1abd6f8356bfcba357ec31adf0ceb6472dbd2e2c85b2095a102251c543537e44e4781edbf9bb2210907cd43875050ab68a4d3903ba5acf0fba25c9240b0d324417a47d60d3d809a50f10e500362f5a04084cc1b98fc5b900d500f1b1605c361a8f05d5fb4c646fa7082cd59e3c7acb1a93e781b60b19880390cafc5549ff35d5cb4c6ae6ff80054a7578f3dfad43768cd0b3d8d0cfe13083df53ddd8d177a9a7034bdfbb4d77d22bdff71aefb38fae8635c77d0a9ff29351e74ca1d27f6b3fbb187bb815abe69feda08e62faaacff562dcb0a4abec28b4246ffffd8fbd7ee288e2c5118fe2bd1738ebb445b9410bed3a6796963b7ed4636a7454f9f39429384aa82aa545565ca7991ba34b29684b81963d3ed36b6b13de3c697e6e2064908811048acd50567bd670d1fb2faf952055fca3e36f3ccbf7856ec88bc554664a5a4e2628f58b62a2362c7de3bee7b47ec886d9533a3e4d601a5685b65a5848d5192510a232ac9a834b6840795cc28316884525487e88fa912630852478c5162c2d710beb5981d5589a1a905a5a89a963e84b34aceb069e4ad03f1bb0736b45890214dc5942192d3294b190c1c5934b6840731e32883294319ccf8a169949d5b9fd0af203bd8e30703439a8a9bac2f11c8fbbc2a878ab6818b1d5a6806e05db943438fd109fe79f4d406daa46ef817a89b853bc6c73b34d40513dc63f09776ba6e97c89b4db42c036b66115b841fc677a2116637d76befdba7febe13154839c4076d45839876d1425bfdb3fc140a4e25e6886a65f2a8a3392f0265d02428659aa92dd2f989a37f1c75b835c10d0ab6a1143b19298315003f25d9f0731185520c8150112956eefa05b95e606e9e6c9e1939d238ac716c03d6b24f40c2743e31d314694ecf8eaa1a4e218a9605648ce7e330c731ced032ced9b784f59e9e55570d31d59b073384d70e0d9dcc942564cae555922962dec0451caefd37bd8111d8c795deb41c92ddb46c9e0877eb6c53a885a56c08b6b565ab3f73ca2508468f4dff6209aeab0bbd8c33852d149c4393d2905546230415347d04d1c99d2ebba050583aca118d18d8224254bf21b9177f3f8406ca6e8da15fd189d4ca130d0de04c010de8561e0de3a29a056a268205911647884fd55c9406c1d932e7302d17673a52e8f1c844de17ae5acf64974e56637e06bf42e3326c8811d8bad896d88a6d945b72ba3a53e5d6054a28af87b7d54dab4c97433030298ca8eeaa4cd73fbafad1850f963cbad2d1352ec19eb6a612ba4016b132a4b36f7c6b3f292823966e908272eb1343cfd28576041b16292843eacd83f4d7d40774ab9549abc7b7961da5e895118b22a4d894218be248b68bfc5a56d9a529bfb3945b1f1bca0ba3ca2e4be9d51f513b9347d6f1dd1694eadb31aadefa04e92dac4a5eb52d43974331b30f7fa6158e3257f8a073583a8bcb1de2c188dc256593603d71ffb9334cdfef90db5b6f9ee4fcfd3c68241ec1ba3911568258674f84f289648cc2b849c8e5d3c950c2906b8d324bf661bb6825c2e9d923bb289b419bb676de945b0cfd2e33aa1b7850dc6d7c6ba187d36d4689397a6bffcd83c2fe23459eb0a93de4913697624ed8e21ee648d38b32aea4e139eaf25a3b401b8db94671bc3197454a62979305b558c071b65c9e7625383191a6c525e6e3d2e212e174a31b715d586ac3a589bd4ebb32baf0904346120e2c0cbd203cc9f032899b6edd70cbdbbb5abfdffb48ec5c0d491d570fc539ae26aaa12b2f916162c0570f362aa77565fb00f8afc6aaaebc6a6b79fab798d795ed39ddb474a59780ef6a5d79ddb66cfacb7d57ebca0e320a1f2b705d4d8699ebea0183d2a3e428314a8a79aeb6b9e76a329a4064df41950bc899b3b52cdeb88fa806567613a372da0dfc0f1b1b961f50352fd04b7eef7f574e0de0acac1c11297e875ea23429254a80e2a5e8004d32417e87ae6cfedb39e589bf9d539efcdb39e5a9bf9d539efedb398ae0877c39ae2f4bfa99940e5fb1b2bf0036991620cfb8067de0657d90a0ca9fcd160ac1f612d6f2952fe2204326e612b880b4f8ba6691920c5f6269d1dd8df5a54598b436a1b131d414f7f406b44d2c18a5fa2a1f172db5a4bbb290cb15da02672ad8b20dba103dce8f57e2b1e0662c3f0f2c6e1bd14b861a41711f652a1267209faf9c12a4b26b2730b3e8d144df345e0c00b62576891d26eaf1b6f1d1dc79961ba3bc6ec8fd78d3c448d62c279c55e52ebcb36a345f8fcb70e55c34cdb38b272689a496794eac45cae95989604d37576b142f74e28d7e845ebc87d6bd783f22b2d52f0db974b571c05817b0d605ac1fa480c516e3558b59c1ecebc2d6bab0d566616b48b733ba2915a9d6652effdfc395b9e402cc2f8d7511e6618b301e6870bcfe4eb5f2bb825608892c6bdcb37bd1340846335443cad08a6eee8500512aa55c0b1331403e4f0174439c9acdd2d451b5284eeee9a1c9453bba490cc9e5324dc69a9a6a31f191216c604ba7225fd86e48dde73e1e02a64b9bd8cb1f749aeff09f02a1f13ffd290ac1c172103db00953ca9210b13783f36cf865123fdfe3bc45fa0aa4dcef9b50f9a2aba1cb0457439749ad2a7bac8b788fb811a5840d4b25eca90808aa8a6a6b2a51549b86c3cf45d00c7ac6d2d997a6ab3c8ebddb65a82499f4aaf2a7090df06cec3d4ec848a72965ff71422b4d29267d9dd017e962ddac65ed92aaa9999b530aed539489ffff27aa52528991b10d5519d4556558d588a12a66e5f3d2c0cd29ebe6546281d62e293b6d0d44f31e9528afeaaaf28faaa6f4563e2f2514686d65a7adf460a547555ed5957f5469deb51dfdc788a90feee07f65e7fe6b943cf1a88a8aadde9228553ea7d3ba1c2e24758ac182ae898921231af64b6c5a9e1827066fa38836444c8bc41f33562e68c8364a37a784b25aa6f2b9458631924cff20ab89d71fa1d0c65ec712bf2191080dc8673ad28d28bf20bb254292654846230b0a48718950f43014455b8b3202225d222c655e29d1473b40ba13e310f788fbb729f64cab4db167dab12966e8eb12e5232351723bd611ddc87652f94428309a682ba21051937214126e98a5387b6d8d49505c7c020bf16e5a73145bdfa67eb405242e6e5abe156d0ec2a3e7b7a22799edb987e1791acf5e6c0b8a6e1b3c9cdd1427fbdcdc2f3346bf7ff233939d2376dfd54967de59ac4e394bce2567460906ab6f8782603a1c4a9f8a056f9a4598641ea1ef5c77169ca5ea5475bf33a3f881eadb8100500ea44d49019b693261bf7ad899a94e2aec8716927d2c3b912ba65cfe772e39f3ce52f598e25c7296aac7e1c79977ae46c0993ee05c77e6ab93d5e3d5438affc98ae306e605b498b6e0cc39cbce2585fdd04cd79cf9eafee05adba41e1448998dd652d4b45966dd1face5486d4a540291ad6db39a904229f4b83b44037a42277a9c1b9e0bcdcc91ec9dedea7167c9b9c89ebeae1ea0b5c6be9debce4c75827fcf3837bcefebce4c9f73b57abc9f8717aaef3a4b81ef6b5e9e8bce1cc74b3ba90bb3ec2c56f7f3ef2567b97a9c7fd30eb0c85ede66ec7675a1bc650d6de9ead2c8483a67e0926ee1b461779943061e2ee02ec32e12b3abfb89e7360e19fa10da82fe761a756f7ac2cbed9c026213ce4cf52dca80b3503d8ec23d644b0b1203b6a17799041b99fc46ac9923c4d8666eddfce4e6a79f78c623f3c2ce1dbf41596ce12d7eab71ac232323695b53337a96a47523d79529668dae4c1e1b96d9b5f9d92ed32e95b051ee32ec74de2a15ff5bf7334f3d11d0f26ca996674bb4bc6649905f644eb146a60d5a3daeb056a6d5e25ca3230d1a9a4d06d0cecebc1f7f5c61edeb7e4002b46c75aa3a099958e356f7578f3bb3809fb5b01f84467603d0cace0c0b4a141bfacfb4b096c5455d2361f68f85d93fe6b11f649ec53a575de68fb9cc1f0b31dfccfab130ebc782ac1f0bb37e2cc8ba58240b2bbe4d2d437be70d6799f51d6781764a678992437bfe81f19adef30fc85970834be93dffd0890000785874969daba83ae95cafbe5d9d74ae2186a17abcbabf7a0c39b3d52967d1b9589da259665075bfb35c3d4c9789e68deaa61e92f66a37cd2b36cdeb35ddaa3fa4bdda4cf36a4c7bf597e6952753e0250d1ee5c66be674ab165e313b72b99aef1c34eb9b417e9d8bce727512e69a794ef79833afd0268665ec12eb96740a721615e72234c8040f5627a1db5e62cbe47c75bf73d199af4e38738a738336284c5c8760a455a79c5967d6598645455e975eabb6852f2a74c8f90291c4e7ab2adb2ca1ff54f325ce59d79e3d7d685b9ff39e73b11f6debd8b605c6ee72f58873ad3a557d778cf66946bbfa6ef52d16f50ec5be611bdab6674f3fda4655e8aef846f3f6659c8bd5495ae8252822144ca91ea69de9069b056693edceac1acf437a459ecf32ce3567a9fab6330f93817385cea47c31ac4e528019e807979d192aa274b289a9babf3ae12cf833c9db9dc8b944873b828eb3087d70b93a517dbb7a90677932040dd25ef3e25b9df4e62298c0808233ef5cf1a3179a6bcd7ff1df5f06faaac7aac7fbc758043cdf1f5c15dc541eb50d00fc65cefd66d1deaac173b1082f0b1375c6d834e382408081c0ac138cbfe6a20dac916e98711a5a745c5e7924e735b00cb9b8218aa57aab929bc62378e6c03ae5024094c8bd01ed21b4296e30d9e8061ff16fc3c8a3ed36e72c0b97b4f556b9cfadb2d2711b69a5267719c1663a5e3dd6dfd43610156a8d401378897dd5e3ce55bfde593caf6c1668aae1e66a6540a18a645181da6311a1faa251a24a7aaffa3614e0329b619cf94ee44f4dceb233cfa6a165be7651a62e56a7e85a06130eac7d8b74b60b4c56d53f5249acfab6731d550f001e2a695c178e027125efd9930e75735eaf7dd5fde9404f1655e8b1eaf1747fb0fba6fbfd4e1aea8e7ed70b7534bf5385fda83c2a6705c8994b27382f70e6d29d2b3c34f0b3ace1e4c039c5a63cb609d1891ce9a36f6e860f69f3c0623923030f9c1238ef812415032cba71a8e92342131538b9d447d2544ae9604f2e80650a0b4b6f92ade0d2194a72f10c05af5a39efa1b0ece6cc3bf3ee83757dbccc921b5d1eb5ee186a2d2f3a02c093abe777c1b9ba527ee36ece01c053ad00e26ec8c5f34bff26e4f7cd68b4fc7e37e21dacc9d649fc5296804d67392957b12c34615d4349c351a2ab9d3ff071e7ab5074e57bb4c75c40dd7bfb511f6f61d5747dac252869fc586be309375f4ea906197bcccd25e899e821099c73539db63a099a504024941eacacecdc3b19e0cacec0d979ca1acfc0dd3397359e83fb3bea6b3c0a6792d79acfc29b1f9904f9f8b0b33006672f13cecc1813efc64027e0f258485a56cd5d3da1d775546dc88e3e94c3c74ad73f7708106ef8effc71169657f280e78378a0d02d7f822705c5338e8bc8adbf35bf4dc8aa6be54f0806eb37e12b822d6d6037763857c768cf1bab1e1739198bfa18eb4443c450f56cd4f28f2ff09264e43f5b257a4e8a2565e5493b76ec102522d121e146e7aa68bee688568066ce5996231a9133fbbbe434a23d01b57cde218465edef49fe10ee8d19f6ba89ccc33691f14fd0d156d4e7375aaaf6d7faa1fa91da6cfd68c86f477db27eb476a6362b4a3a583b5d9bbd135a3353b5d3f5650a593fd00cfb97a6ecb5bfd68fd40f45a30ed44ed74ed5ff104ef8fcce746daebe148e9cab1fad2fd797ea072983cdf0e7ea4bf52391045a4601fc9da3b5391ecd6283deb3e1f4aca9b23ebf73a899e41c606e8a3c7d67965652fd4853746db676a676351c79a17eb07eb436d75c23079be0ee1cae1fba7338c4a9cfab99959db89b59c9893bfb901efb469203078af427e6d44a92cc8ea29a121ffa95b5b6be02563b96f819b06659af365f3b533b3f56bb543b5d3fd8b56a912ec510a4600202c8fb2abfb590bb58a162041e01e7127e9379c5a89dbe73a0954f8cdadc9d89dae93bd7ea475bf9c560c6ceb5d377e88c7308d50fd7276be7ea4711fd13b35f0a54ee9cab9dae1fa81fae1f6ee924e3ce74ed229b3b3d12aea1b58c529bdd65d497eb476aa762b4505a0742fdf3cea1faa1da34a273f29d73f543778e4a6fc5c941c0c4ba7ef8ce39543f583f149eed51f0669c3839ef65bf738eae2277ce496fc7c900b23e8ae3b4a9eb87eb1195d0bb292707e90916e430401d91de9b73416aa78597e7004d6d8e7622e90d3a9e2c6efeb53bb6a81debca75a254a7d479703b5c4e74028ddab11fad876233bb2efd3e0ad22f988d8a452422bb7aa6dffce3cd3fe2419c23a5ca294db3959cad0f0f631ed006edc2cd77dc50c6d66fbdadf3404925a6e96522d80f98b6ae66353734a01b1eee9befe000ba9c5ecce574cbcd55a89c1a28b96983b63e5ce4816497d7a02083c03eb04db905268139600a78e14c0075461488257180ac5b1a1e20581d5695615b37cdca2923879512bef5f6adb7c9000be5b059c0c3385f28d84ad6d60d6c5ad8520608360671165b4ab1726a78181b596c25768eac5b1ad0034a4000300352c097d045b232ac94949c925506949d8fe68bb52057ee48a3be8174ecd30a1138d467a9e944cf2ac4675da56046451cddd208b2d41667d26adeb2c0e36ea29b6d62b0e0cdb68225231abcd9a60f67b3aae54a5c62f8366efc3f66a21cc1b796a397e65d798bf664d592bd4250d27136ebba44a623252270059d220b00409ad20b1606413f6f45de0408bd4490b7a218f21e86acaa96a2af7d7af2164b8ee4cf7af9d9842115b52079588d20e8f18bc0264199904593a3f4cb5ef6419c2f44c87bf2d520cea9d6baaf645e78a98043d6059c872de074fd6cd0ccab9a8536feae7bd3a69f7505c41e552af6a832b1a771f9f3c6e5d9c69589c695e38dcbd71a57de531a972f35ae9c6c5cbe0ce150c2821b38dab87cbe71e57da571f920801ffd76e21d48f8b87179a971e52883fd43e3f222cbf879e3ca0740c70f2cb1c0c1c6e54f1b57feb571652a809506fec01043d41f00dd5197278afefdc6e58fdde47f0d26cc36ae7c0a6c0b324dd38271e4a1b4841e74a1b2fc0a0ad5885f172b2e7ca8c07ed9428509719fc42feee5b758b341bee340e2f25ce3cafb6e9812ffac71e50040bdef36344fbbccbe0261bf890fb86d75092aff3de0f268800c8dfa18285d0be0a009270176aa292db1b35cb7487e6178317c8e9b790d31e43391d053eee5b768164a4461cdede3e68839cafbfe92170687b2125913bbfe7185c22615eeba7a7aba76ec100b9b20fc317150226606203a9184932828ea738721edfaaea186cfeb5a36ffa0d9a7a9f8d6d7b87cba3f6e0f103aec490a15071dda0794c0859ce25e3e0ae3fb6329d6b0735c3ab459bfff14bae32217422599dbbbe907bd9f8f53f9ce1f85ba7c1ab9b3db35a1484a873c1df56cf85f431c35ade3f7206a51bc2bd89cefb1c8b3f0cc572e9d3919a7efb9f0e7d9f424165d6519040498ff5c5aba3f08d8cc879305f999bf5c3acb00bd288a6c184280a2c763f9384c6111143d6108010ae615970eac29411b95c3c934ff2a655a141cbc62e9b6d9e640b60f18b8161c442adbfe0f1d97a02da8cbeb91901d96ab3177401d6d8e3b996e5c99a09ff437bdfad31548e48e3f39b2141a1b6b8a6fe6a15599224730a67b0663b63e8431d12f507777dc290cc780b60599ded2925394c4b0258c9b5774007db881e22c5fa4da85baae5d3c6ced22643c901ac49a5d3965b0e7b8e847091b24a3e021a372bea8942aa70695c1caa246ff149b9ee22286a217acca1cfdd0e0115962f077b8889140dc66d42965f0ac85870c013d4a8c92a11428f235f88ef4dc446ae041720d4e21e9407e0956dffbe11e32b585bbbdde4746904932ba963511b8866b8e0a87714e970eed8ef0c3107496f34ab00da5862aa70c6492426551cbc27877236c2d8b4baad8af223c2bd2d5859e0b33190c3e17cf1c9df6621893d807afdc532614abd9a7226a6988dc4c2825ad102436401e30082ec83c74f246666b83dbbe5ec8fb8c6b55912fcfca22f3f5d8e1d6a31f6fbb3e382b8b966ecb7c8796dc56e5ab96dbaa7ed0ff7eb0adca382f074ad18e46e575d68646cdbb8dca1d84b336f502eed78a5a34af67c1cd69538342346b4ff8943627bc8303cdc9e40bde986ec0fd7ab00d092c975dee2be7a37e5557d18eaca6dad08c596f6c6671d91d98ec93fdae61a2cd925b47a0dcd95b47f492785e859788a0c960a787b718ffe61f0fb6bdb29aca98d62ae7dbd154d95b47dad1503dfe244ac50a6f0ee501f76b0dcd5522a68a336cc2814f599bc173506cd664a2953b69ba21eff3014f99c035099660b82d9326e06a431b96bd362c13ec4e99ee37ff5843031a7a01ca6ee80559d3c1635cd0749498d7726ec0fd7ab0ed66e885b2c7785b5accd00bab6e2e919b68b3203d8a28acc5481542921d6f8d64c9cd65f0999b2545bda0d8966ee805c5b40c92c5caad53d6b061e9056548c5f46785de728932a42bb6a59816c5a40ca98ad9ca8704df455e49d6d69bc1f7f1067cbab5856c7a05efe5a228f42ab77cb7a0545f5623664b2fb9a378d032f0a3e8267718b1ee6927f0442abbe59adc7dee704b1fa268450e5587110ca224ccc75db0f5f1e9c81d8e0950c65d940db0c8c675bb3cbd0e3307af31454eee8777f8e63b44d62d1fae1b5eaaaa152b8b0fb473329a4b6deea26e49d6dc519377b915172451c7f30ab2b6eef7a0bc000f19242bb15f92b9bf7d041d004bd3e212e35cfcb6f4ff2b4d5bf701bc1283a4c2fa91c1c33e32f077d80d3d434cf3378169e5216e9327dc450ba86454b5d248010fba8ecb99f4ee47c46e768bf53f5e02785a3c46e5637ad8d6e80e1f23acbb7bd5b69615ab69feedf60045f9db1c328a4db5e152f4a9e37c32f2cfa3a7da439c2425de9218479250cb0da9c8b25dfa847d6c1b4a118defd9c36e6d8a68baeb1b4cbacf7e7f3a5480093103e8fe752720a8fab471093fb0dec45d3f0568c70da436d06a4d6a359d2ebfd24e671b7e8fb30d4977cb0bd1b6a3bbb9e405a4d1fdeb68b6a172aa0fb28bd906f1a8debfce651b2d88aca65b095ff448b25e120d65b1c67b985a42598dc41c5cdc873ed6c48fcb8c880f74ff3a9c7f064286f5d82ed73e3aed6b7de1532f095bbf444c92f1db1f82b22ed02324d4ee2ee073246106ddc7158e52c441e20f708503823eedfbb8be01a5e156a456d315cbabef8a3a2a124bf7bb220dc59ceadcff8ee8b123e404ddbf5e58245cca02c20fae071609972c8181fbd5fb8ac48a2792bcdf098fae8ad2a3aba2ec16cd20f8ad74bd56fa56726a5129e14165d0d654fab7a80e2a78386a25a7afd6488e91065f95e0aad2f3543998a644e99f629a92045795694aabcd9e2a359225c5413874832f52502cdd2005c58443b79bef10cbb048411922f4ef4acfdcb2698a384d51a629c634204c536c698a4c5604e1099ca52ba641112843a4f5e15d1b9cafff308ee93adb774e87e0ae4316c351dd40dce32c0038685b861a008c82f2fb130fe5c0ae1ff5b12eadf7a33ecee4da0fd2fa511f1d190971263ba9a238e9c04a88745527386d3a32f10f26a57c263b56633d881dac0d4a3a5be006cec3e841430619bc754a83fed3fe9e14c4deee1e15c2fd03e9592ecfea9a7b583bef5edd7c878cca0ecf50ecf119fcdb22da538f9ea625052d25c75a2a2506cd27c79acf2706cd26c79acd2606ed498eb5a72731683939d672590e2aee6a3f84c3be07e37fd72cae1ff63decc33ed090de906a486fc834a457b1860da5375fb00d4be9c186a9ec32d46251e9c183caff208699d70de5d7ba61a805e557b699b794debc852ddd507613faf7b5cad71afddd911fa4e164aad1ab58a314c1d3fd2e437569513a94082541d103728a39c1adfa17d10e95149517d1cb95afb5cad7ca8ba8071b16fba87c6d146c03be5fd4062da2bc887619a4041fbd79cbd62a5f27f6d1af128552604efa2b5f1bca8bdaa0b2cb2094e7844efa9597c1453fe547d9a5f4e6d7a0ef343f60b96bc758cf8ee6ab952bbb5999cee4b1b1ddead8c4bc08a47aeecbcd494e91dd62781e756f46db506ad70ed83ee8d92123f9e37aa8b433f13ba5c9aedef7ea16d22a5fb77a7af3356256be36e220c34f6f4a008377ee770c1219bee0657b868fa0022eda58ca413ba53cadf275bc678752e56b34848dcad7c23bf559d5c4c82405baf84adfd494a4c325786db0f2351b0c510aa1179ea20f40e5bdfcba803def75275162d6cb9a550584bd979d84a93d3edf361e943fea24482c7b5905cf45790f3a0dab16597fcf89175e2a51bdb12e513d0a12956befa71b6107fd23ba9135b7a07f415d5d3bd47dfb8841340be50c5c2a614bcde022e8c766f38cb105f5b90633a94edf8ea6d3b7e7e96f9e2468964192c51a9b2628ec20c96a842fb1d10c90c383e5509d9e7949337cde2760620fbd9ea32101348073408060bf51c6b3590a99c51a85c8620d7bbfcd903d3dc0319c0d767a07759dde0156337cb94ce173ec826527625fc4fbc2a97ec922aa1b06c958bff21be9051c7e99d73389d38decaf05166ce15733e0240a6d73a1fb36f5a32dde99cd2fb6a2cdb407bb47385bd19301d06e0aea0636f7cb5eddf58c4d854c46ecf622fcd20ecca9a0ad81ae9c86de0b7eff9b3661d47d60bb972e122d67e5630edb24862da1baf04bbbd2172d82d685e8f120e7e2468cb45ceb372ec22ff71b52bdc910e94dc283252b7caea40cdac5a63325cccf94b07ba684dd33259c4071921f2905c9dd97f324c1711266b7b870f03c69d8b0301c28d1583be98152e83cc9b674c179929de43c2974a1cb3f4e923dcebbf2e3a4b6ddf96a7196d4fa2829e949d2aa0f9262ef7b610d9bc86e71e1cbb42d03cba11edec51adbdbf4a75f767bf6fc6dbed79f0c65a2ad7e40490751329c0f7387df7677f6a56caee4e868d0bef90e11f79ce4e746745677a177447cc804ffa5fa860cfdd6a922f1fa05f12abc333e8b9eeb477dee8458c02bca4627cfe45908ef5f2b638dcfc92be46c88ac2007717ba9cf593443f3fa8ffcce136ca33e7f9c472486fbb84720bf44e59e03c51d03a53452d08b6a4147ae082f3b050a4831f22b562b802d2587cdaf00af77129400d63b0a62827e649b213122eff4c7d50322bb0e895179473e4c1d883c4bed9df38870fd70b7251ed0418fb1be2df1e3dc96083aac7566a8361d8a998fc42c88f72aaa1f39f31483b3849cebce82b3549daaee87cc2c61c9990f2438f3920d8c70de5086707846bca31160a33ae9cc34b1b0ecccf16851fe3caf0f37970be87f47cbceb63b1845e010be5826ef5bbcf3c11ce03af3d543bc683cc433fbe12855b615c21cdfd21ae159fcf07c5378667d73c4fdb7be39e2126cb939f242d9909bde1a1b336543687fbb0546dc0c1da8ce4c7542a91e70e69dd9ea040f3ad7e94f75bfe2cc808ff405e71a8bfb48a97e442719f6738da65f74e6aa53d5c9ea7e05e6a01b742270ae3bb30cd1b2b358ddef2cbb413abe2f06d32fc1f0f122126db530ced39ce934e736cd994dc7719ae64ca6396769ce529a73d28eed183ab601db496746716e38cbc108675181b971b93ac10293e0e4fc9233a380ffe3fdce455af190e6dc80080e36e5cc3acb30d925dbb86154d39c8334279be614d39c5c9a53497312c93673286e400c580125e0036480697d67a7bd3b3bee42559d44d5a916fb3bb4fe993fef18d887b7cb4379eaf3c70404399f6bdeec61c8f8984a8a39d19e8f8b990fc3a4b81fe6de0f658f6dfec8195dc9ee0f9d49e92897f4aafbb30304ebcf72f58873cd990ff51b088a3911e65e76e668fef07cbce8ccac068b3785af38ff7ca07faeae04a1656295fcf39565b5dcbb4b5180ff1fdace9273c59989dd5b8252cfc76e2f413f5a74969d6bce02fd454d4ad87fc9dd2657cf6ac7865350fd6ac7ae93af6d55a7d6f79edabaf744f590f5fda74761ffc934a5faa0293134def30fbfccaba501353b3c8235a2bca2658bfa30d630ff4a158956c8db455be9c103d8a4d185fc08a1ff5baaf28a962fe201acfc3aaf1779f65c864697754d555e290de571112b3b396c4ea7ffa97bfe219131f22ff3340f2508b429614a8fd2525ec96528114a8162575ec9b5ba9d08eb866aea9ab54f577e5b32f5d2805db40bbab29398ea805a54e1c332b1b5cf864f8dc04fbe88355bf96d2997510748b115158ff99daaa9fcb634a0ec3407281a65a7a92a3bcd3c4594cc1a79a7aafcd654760e283b2d65a7a9eccc2bbf6d9573ed1730f35b4a25b45da25b712f5482f4f6dbe84a18911ae972f878152bde4af7355cb2f3458cb41c6e65a9fb6bdbc4662c6493a5ae183068a9fb8aa5177519c6a8ad6e9114d5a13c29aaec78549cadad06bbb9b8270d4788669102d488cc332b29a9a3f6e808d6302aeaa50cd688d470b7c4018596bb364d8d1c1e7936bb8c4cd4e92a5c7f57f3ba11b5e7cd7b59b1283dcbb216b1968ba665fdbc4200b0ca55b5b230cd35d9b5240065565ead8c0bd134d76a572da90c40dcbecd171148c13689a68e91924aff6a96894b03b884c7c8806dda05bb4b90778d2e989e6fe18229c57992f8570a21123fb8e021a2854a82e6b978345eadacd8e5538a57639c3327410dbfacdb46a4963bbd6469e5b2bd6ef1eb172c1d6d9273e262f2da19241ab735e2aa88e2965773133e689456d8d02fb6a2ee6eb48d05b6b09fc751f7e6c464fc46436363a82991b78a908b50656e6af5ca7c737d0aeab4b968a262ac52a9906a143f2a1b7b735d997824948961a932311cffae8beadadfaa4a091b66d3c32ef0ae0b777ea6b6f55d97b0f3b3a0016ebce73389be60562e6b599c534a95afe0d7524dfaa36bf063e906fcee3308fd29562e1b59dc4a46f7b8a5b80131c54a51527c1417204aa6239895cb148562a98aae2996aeec3368ee557b4a58d3253d2a876fece9d928739abb3205a0af504cf7b7beaa8712e629168b1e85985b80450ee7616ec3154090eeb338d7e2dce695926ee4742d464f00a85ce52b23fe5427d5b7abf295e72b57fe787eaaef1506d567c6290f6dd01df4528ceab0af72d9408f99c824025335f66052e5ab9c81b9191f31e2eefb09014aec7d33f79e8e447160026d24739e67b6d45229a2b178aa034dc591bc599e97ce0a32c5218b73d18c3d2ec795af341c7589eb5df583e428cfa01a10cb4295afa269aede40d3562984749031bc61950e6ee9ba32e0bf53fd18eade24387bd06d0b7cc6a28ef1f18e00e826d485baf905e86e70ec435248701ad6311000c171209b5b833ce111a27f9b04b966db0fc6b9c434e6072f980daf0b668f8460362215cc46629e930079ec255730ebc199bcaa6ca79299aaf4105579958a66afda45ac2adb733a15cd7af9f528e575b81da5bcc62e47293b88497f93bf29f11219a0f428359714a544e95022143f454e112710cb5eb54b7888724d3f2c6cd9f0a169844768bab2bd98c725d554955706ed12c69050d24d35a974f6ea505179d5c296f22aa0b5b046512aaf0c9694574b7a2b26b978f6ea66e5d52794579f545e7d4ad95e545e19545eedbeff6fe8adfe918516afe83dda8f2c14898e4cdc72ebb640cc7c2ca0bbcfda37a21654a40ee2b2ee1a5298185badf67107b1d6720b97a32eaa657d48b5702bf4eddcc67dcc44031867713922cbb8f298a51788741337af0eab6888dd8d1649615c041338e12fb1cb0805b58051491f8ceeed0601a2d941d03231464555949b0962254c21a29941d632d5822da4cc44b1120680686610b64a23645445255176268d95540a10cd5d66b9312db5283713c74a2a66a57ed062c3033a201e59171b1e09b1a15c1ad08b3d78287c3721d59dda82528de9d3c1ce99dacc22cf84229f60916743914fb2c873a1c8a75864e81593d4d32cf2afa1c86758e4f950e4b32cf24228f23916391d8adcc422ffc2dbf3cd4e2e8b478b494bb88596b633147986466e6e8a3c4b239f688a3c47239f6c8afc9a463ed514f9571af97453e4791af94c53e4051af96c53e4348d7cae29f22f3472935bcc9025b88565f2203c042194071b173e6d5c38dbb830dfb830d3b87043695c38d7b87083fe9d7e07a2fc840b8d0bcb3440133e6e4cbfa3342e1c0f005e6451171ad387158a757a3f450c712c70b1317d44695c38d4b870a2716101b27dc6d23f6e4c1f72317d06df17e0fb1c23a7342e1ca49978f261e0c34f3b034c36e7f80c8af1715342325975bd525093acddb8f06f40601a10cc42eed9c6f4a4cbc10988bf04886979be84f04937ed3321102be13ca4cd73f422b87340e84b5673d1e479084f03824b3286e681d61ca4cd419a18ee636878717252ad21525993d11a990b367273153497395a482f365c2abf00c95413c629e78eb3c389739a9c084d7b38fbc96d3528e95ca142d2d9068da471e1b0db73695768a599c0d05d86463d92c4aca4b3852642f1d1d961369683905ec2872ccdf84ee3c297c8ed9a336cde608a8a886e9b5514a8393a83ca941480b90023e5ac008ccf5cefc12c3789606cdc685cb888dce1c46afa333ede611c49b7955790a7d44cf70c405f80bf9fb14a946e4047a043538650210a92bad0b8f045e3c20de436fb8c989cb7659d38475650a8653153deaeb65f5b3145e8111461196624111bdeae77002eb686cacde8e7d997b425bcad715895bf7017d8499f82b863b7dc2f07d25f36a62757b9671eb95fe82194bdc739649021c6848f9cea045a4e869ca5a60d3254c419d2d1d5d7983edd983ed3983edb983ed798feba31fdd7c6f4f9c6f485c6f47463fa2ffd5db9ce00ee12b632f938130f4f26ef03d088b1bfec32e9906e5afbf855b0d51665cf9eec0ab9f514a51572dbd5850cb28f18286f59435bbaba2c9c1e510bea10c9aa38ad1bb92eb3ab9b18dd01f1b3c93acb5de82fb01e3a066bf011e880b38de92363f0b5cc84c73118645fb8f2dc0936638e352ebcebcef9e7dc313839e60e1a9a319189976be1d5dac00b3d2f71bfe39a44a1a652b530d042cfa3a75be10bd54aeae750f34db1ad68748b2d7d0244fcaa4efd9c11f0635a627fb2157641dbb96404492de93ddb8a9ea057b8f40449ade86d6ed9e41722b57721bef6d6d283c4c3f151b4ae6b2e494bbbb8e7d1e63558c5350f95a8695ca89fb7cbe64fdcbd13d9006e4a5cda16c8925bddc5edaf6e82fdd55e7b75fbab4fb7da5f7dba1dfbab165edf5f7d14f6572d22dd8623d26db8994f1b33671a33f38d9999c6cc0da531f37563e64663e6af8dd97720ca4fb8d09859a6019af0318b3ade9839e702de68cc5c6cccbe0380b387158a78763fc50d719f36662701e088d29839d498f9b031b300393f6bcc4e2a1038e422fb0cbef75326809cd29839d89839e1a6bd1d4c60ac87604f012f0b4d48126ec04175a49bab219da0f8e9a4254f878a9b6e2e5d9a972a1d2a4ad2b721a2c7b6a1dd34cac05f00e93c2fcecc7ec6cedb50c250ec05a8bf0f1b33734d097f85229d6e8afd106267e06f28e132449d08f4a8601a2d6c889fc4bb5d6e61fc028498f6190d31d7cc90cf44c2adab99439c20a7c6e970221c3dfd59d3bed576b85324d9b862890f68e74ac2897ceb8a6758d3de151d3d87e900986dbd71459bf5308c2629ec8a36ae788f3c03fde34ceb5d2bdadbbe7c709b53742e793b6e67ca1f6a371a335fd21125dc9fa26047bd6236666e7839af3466be80e178b1313b29df98e2b3d8091787089a6d49cdbcd7983981dc8abd007faf0818f337a39a4125cce443e83f84b1ff997ccfc9851023cb8690cdc094f2a908cedb660a008951f634159fd6d745f9d6920b2146560e215b80a2ccd316a695bfc0274fe9a69238835baf2bd95a42c1bda59979e99d90c6cc7c4aa00e799b0d9cfe975e6f1d6bccbc0553fa746366ff18b4fe69489c06c0ab6e4fa5690b10350d65f230ec17ed2d3c52ea57a4cc4934b027d7a28105aab47dfa95bc69daad6589888bdbbe35e5e42a597bf6a5e23761047da1e5ce548b5da35063b746f64c0b64f2466e897b732b46256db8e20b8f096af147aa759375adfbd1d0ba2db9da6dc5984313d5b09597c83031e0ab071ba6ad6c1f30d4a2d283555b79d5aeccd2bfc5a2ad6ccfd9a6652bbdc422a501c3565eb72d9bfe328b68c356769051f858894df43038abdb3e60507a4d36d11625c16da24713d869ecd04baa96a31ce6e8a8517613c3c4caaf6d6c5858f9b5aa5958e92526fd8b0770b695ef05dfad9e5ea228011dc506a800134594d0af9ece5128bfb6955fab34b7d22b331eff2119153c502367aae9bc9e5735a4e6e38c9c29d8f6011c0bc6ef7f31ab63095ce0ced9cbbaa19a442dc85006ae9471436652c21a4605ddb20bfd520a6dbc60a6e6e31ea778cc4445d51e883a8a63a6b79a6dd9680017ede8edb32084c4a499a7aa023f73a5d8dca013e906364579f37eaac49cb9a81bba26ca9a0d244bac99f7d9452cccdb134896d8325baa26ce5b0e244b2d995b5f2d33ad312d3b6664c7acfca372c5cccab7be63665aad2f9969d9d6b7cc8c2c5c33b3f2ffa5ef9959c45a97ad1e05d9ca8427b28919b6a4deb405a53656a79cebc139a05b14b91922df0d473e218a7c5294fd2951e4d3a2c8674491cf8a229f13322f2ed26661ec13c2920a313cb149585621ec53c2d8a785b1cf08639f15c63e272edb263f9a0fc3b049794e2a54e7643275f5b8b3e45cf49f14bf08cf5c5f8b3c283ecfe39cab8ab3507dd759623fa207c597aafbabc79d59ef317137b0e42cbb9f97e01dce191a48267c3336398b9c39ce5a1c5b9c21ce086781934f20a0578f3b8bd523f08ef3ac33af3897aa5381203c7419081e7696ab1341f01bf4f3ef5702517fbf421baf7ad49951fcd8a4727df578f588334bb9a03fd549f6739845de801f869fe25e72669349fa142be0048c800fb0297fbfc230c9f0ac4bfd718731ce47cef5eac4ff33ed5c41d549679979ba68752ae37ce6cc3873cef2dfe75a640a1ebd38ef3b0b892905cf74fa2858dfdfe79c99ea0178b57e01c10805a725091868856bae3ae55c7166aa4768440b7c6d7d2978d699a91e752e390bf10a06bca97c44a861c0c03f0c03f412e37cc959a81e176a131416d12afbfb27cec2df3f7166a407347140790f955b51d213191940d64701dd417a04234eeef10b739d7641e9898b38b91c2ec035e9a10a4f16b771f37907cc92b363ec09ebbfcf8d31d6c7e8b4c9068aecf0e21139bb60fcdfeff30ab77ada7656c17bc87d7f00ce6fc7fb7110711fcf2178bbb63e2e887f45d16bb8d688e2ed6b7983b54613ff8a62a03d567ca820a992556e2a6ceca092cc1815c3457b0a09b71470cb2d85c0a6039cb16d42dbe0ef16a4d9c5620b85bec3d5b5fa58543f1a1bf3f4af3e1c0e0e48bd2f3dc4bbe2dd6d51fd73eb9affa3a0f95b79a9fe9797da322e9c6a2c4c3616be682c5c6c2c1c682c9c5220bc00097f86d87f6b2ccc36164e36163e6a5c3da640c23c84bd1c572720f62c447dde5838a940ae2f21eacf41d4a71a0b971a0b1f0081934170c6c36463e1dd20f839003fdc58f8ba893fc6d0e7410c2700e9574140c6c399c6c211c0331904ffc84572dacb91d0de71e154bab170204d19493716fe2dcdab8447425da41b0b9fd3f87f732169b9ddc84937f25c100f249d7063fecd8df90862d6eae58af17d1e4afa21d4c5095a11d09c47dc8af8903601449d87a8c3502b171b0b5fb0aa5c682c7ce455ead70072aeb1f07163e1fdc6c2bc02f5bcc01b9262a115718ee56f5c3d96d842f17e70b922e6e89459266627b2f206212893c706ce58c4305196bb81cc10a93acdd8a70d7784fe39cfda92f3437fcfb086bfff6f0aaddce156fbd56ea8e6d36c504add6fb16a3bcdda972a93d0c6f38dab47503cae642a046df4ab47a05d4e020e8e1c2682c363d047bee23d29921c143d5473574f50ee50b521db925d6883446e7b134b41761db03dd6341275c6330489ad9b551896242e2a92cb8609ad5ddd1e03ffcd37aebe15ea212d0d60e980fc82ce0994bbc32b4312daf980329f6c5c7d8bf6cb56b94336b37cd5bce236015b885650a0b049ad5b21fd9c2db7eeaf4e520c94bfd32d31b6731f06ca34df58988cdd8611f22936bebd4ad768a8ac49b75b9d8655e2a4bb62cccb0d6f5b82c22e4d378a05f14c6d6380f22e9ea3b439189357f7434b1f965bd92681ceba987943cb6d6c65103d1c03ed05efd39e07235f6e5b1b0f5776f9f944500dbe112d4b4ea247e4d7f58847428f28ee926b12c58d435265e2458d18bab28b0c18f4b7071ba6ee19679575e5655b83bfc5b2ce5eab04a3a932290d184479bd60d9f4f7357d80c7ec504df6954c2c7f51239474c03eab4c29527abe7d16bc5939405127723da4e572bab2d3d68849d15af4472d13a3601789a9bc6c8f9001622abfa4511a18480de0ec0abc0d691435f0dba3525e4728aae4365a3b5565a7adf460a547555eb6955faa3159eff3614d4f4fd78e18a11184b81d9d7152631024c9690d830f6758a53841ab723738e429eb5a0e61038ff4c7586afdd22e601369d2b7c1b9591545696264daa6ade959a4f12723e5365b344301e7f190ae45c807ccb580559d32aae1023630a69c8830b7d156cbc4a8a8eb0348cbc59fa860ce55511dc2e2c728c1250f32c1e051972ed69274587d5593620011380a107a183c929cf7f3eb4694416f31162566fdbcb48348975e51628f9f77c01e89be98eeadb7c2d4b29fdbc27a34d95d67217195bbaded78e4e4c76ad754dcb52e963c126209eb66e66bbaad99682b4a0de15c5e19c1df4e9c543279f81921834a51ef558669ca201e567af54c5ec9e4752397575eb6ade0e2e8b5b3c785e73cf42598f83a98b95ea8d383744427cbad51633e1ecfb3a5552d4b7efffabe8ed4201e4c6d80d6dbd8bd016d0b67489b4535433a3675a28d4f6c408fa35491f4862c0e05e88c15a01bc1ff231edd8e577a57804e23a5103a28f3e32885865e7923a8ddbb63472d111efba6bcba7761d37a3895fdb2fdedc4c9b65637d1da59dd034de8bcea3688b5eaeae69379271a51adbc6e5bbd7040d5c99f60ea44aac9fa7fa42d583e3afcbc33b3ed301adde521c091eb875ef2ea13b8444f99664a605b1b5a54801a2d71d11e6ade3e62484aa5e4482c19927c3e391283489064b3c991d07e2a44d2d3b31224861849b99c1c09ed913f8fae8391fe236af0e61e92b7b5ac41b2682beac1563ebdafa8eb4647c8507bd30630d5de14d44d2ca2c5e4601982f03a5d9f24c7ba23ba41c9a7824582ed50ced92f04cee220cfe35b43eb4b1fcfd04feb68185bc5bca0925ce4b40071883b3ae00b16f014988c23b0184fd1411ea26a110d2896f0cb31f46805b4879eae917e311dde5918a6ad3e26bae8526434be79ae617b07315b07d28d038b187401a73d1ab1153d18c357f71010190c85e9aa1f0c8304108ca0d240300c924198084809c1a8976d4b897056c22f0b23057c7b49ac00493da2b9551028ba5b64b7a85e11dda279450a14c52d42887501cb2b6535e9c329457db0f48a358807951db897fe0ce9c3f427977fc52ae6e95751cfc1ef80fd064fd0e8c4987003e53ee1e7bb2b6dc6beee0824e68edc0efcf2201e6c71430eba6891f4b6da77d9b933e65e1c2001b1afc5ad38019af66da834691ae20d95907c2cda4b19b27b412c12eda27899455b285009200c89f64f6459f37e562a0289364f6459b37e563a42447b27b2ac3dc1ac51a76b3d3159cb7e562ae488f64dbcacabdc37d9b3272d7dc9239dfa51ed82346f82ac6f70b4698303c5dedbeade82527bf6a4542da336dfb212443f2b8e86ab47227049fc6616dd8c4518bb799330fa2971f4132cb6725dcb542277c98409ecd29330e96997c4cdd9e6db627bf6a46c2d6347ee8b09e29f90c43fcde36fce46088453f898095fc532a452b02113825fcfe08272ebdfec016cc16993f29a6a624de9c1e59bb3a6f2321e550dac29bb49a9648f2adb6f7e669b966e2a2f968b95eb45e5c5825a527e8dcd9bb32565bb818b37670bc9e4cdd7331888c239d46baac9cecdf02825045428058a9e62a7a8131c9cedc2a3d850e0af454c55e9a5fc2895c3d8b8f5192e0d606517316e7d464a034479c12e61f803904945bf5d7854d965991431a0a5082916e5052ba19fb75d1481d28b69766517e54379c15a97dd5661883360e72ad73524f3841634ba2963e3e66c3ca867ce92234592218595f871cb56ae4b7df106f0564e532dfb81fa6f3375cd88dcbe0f1c9c552e6b99a87b369a38a01a055c398d4caca9510770fe899930b9c43120e6a34d7a5c264ecebbb96925490fcb4489593727ed19d2a33251628f9b1397a5a764d1a4b29bab7c73b6283d20834471534a6f1574a22162a87a36b2d7e26e704a9291bf2b28da8a63493b6292f49834613e14731ee7fecb927dd82e5a92dcea3eb7d4201d6da2d20a952dcd219251719151dfa71b689418ba18458409f47870a514b084a2b7a8dc7fc92e70b8ff9a5e8fd88436221c039e59c9bd0f59d13ae4773d42c14ce8ea075addfb5a3f04af8196b17e54fab08f4abbbad0f67d1631bc86a31f0641665eb78b593440104666119b7984b52c00e1926e6b166d6b0a6e2253d53204ed201902fd7cf3d39da8fbb9679e43aa867ea397300c0062e0a299f628eeceab26ed3e19db30886615cbc8d275b097573376d1421d255c1e20880c130da9a521dd34d58122d9802c1de16c361d109c478b52c979b418ef285979890c1b3857cc5359b6725ad93e6c54a66d78a8eb5795ebf052978a955fd966266fb167c186b1a1ec544d4b1faa7c6999ca6b3a8bfa5fb4e8c3d858c5c360c346881ea50696673b55404f512710a07b2b8b459c55959d95458d544eab14a735aa2a3d955346c63654e57fe62b8b14e01fd5ca598d1814a4b772cab28dc422342501f8815f8a18900246c0954c8eeead2c522c60865639a5fccfbcf28fc0ca1a45e9748c289d2e95d2ab15a5d34cf4edcbe262119bfdb142b5081689590b89d77d45b51fc5e516cffdcdf716b27bf6a4f431fa1777a90138d5dcd58312df4348019a14cc520098b674b835f002364987ec46a2f4f281e9de3e305b5f3f30d12f5adc7fe518d0368f4d5aef7bf6a45e5ff1d5832654d843b5bdadb70ef4dfe75554f9732b45274b4a953fc7c0052f10a03e315c50b351896ac8e886b41bb372dd40a4e8aa37348dd8928cedd4717473c8206a8c75e02016bba71e32f40c31cddf04e888749cd660a56450c9c0f2c9a092816593412503eb4906950cac9c0c4a0226ee31eb7be6fe9429a83499f54d8194634c6f983bb5f0ce30fd9732535b505f6a58259a894d64928cad65cd5427dbd50d47f67736e785ccbe9e16cc9ef22c054229111c25a0bf674f4a43a5ca79db0a90e611d12ca526b20027a2ca132218f23ed1cab26ee06079794c344fbe892ac089a8f2840886ac4f7554b5c34421229a23db4493828948b2f848fe9e40e5123354b54404ded35cb1c4249aa85e213e92bfec93c346901a3604c0e52662d810958cc6f607c64ad468cdedf354f7825ede5720e5febe4dfd680bea080d12114430a2dbd3b2df6c564b478beb7ae9c3d64b997657926b77259976f7edfc5bdfce1fa7ff5d9af976fef36fe7df57bebd34fbedfc09377c42f976fe5d089cf876fe6385c2d3f4f721e3fb5ee2e7f0df9f14f6032843e177dc8f2f946fe73f80af4fbe9dff54819f3f7d3bff2960390eb819e24b4bdfce7f46d3801d0550fee9dbf95351c02b907034189b4cbbfcaf55f8a0120c784ec25f5684938a5b92e3c1f0495e457e14e5ecfda6f0a968967745b197ae520a104caa4a3fea8c7255fd5165736dc76b8fd83b82ed358c729beccab7f307d1b7972eb5309172c197bebd3413071e7af95b0217309a02b41ff3613dffa90c73e44d71095c1b2fa6d19aa1fd91d5cffc49e4f6b5e331aa681c8cbfdebc0b9d77497ae21607546258de75e7ee3f7d7b69517af8d6022ecf70b1717be0db4bd19703f31ea24fdd61e742035ee1e99c07293d9ed3039822387a3c1c9feb30b9bf2f3dae0326d8eaf3162c4b1164e5e0ec34c7e70ad9291e60f1e128ba959fa53ccd7c9560cb3656a540766f6ef9b0d6e6b69ca78c96d605d7474470dd892d2d4678dd58c496269360554dc365431930fefd4b5c36fefd4ba5848d7fffd2fcf72f1575c0500da584cbe511a53ca2c1df62796454f93f5f8cdc3a6529b74e8d58581b500da560fdfb97231483a28d8cb0a8ecc820fd4d26483e141e82f21c3671099b0a2e6bf4afa9c24fc180bf232caac47fbf5978a78c5b59f278256b37622e2fb50bed8feba1e4f60a38d8cc16f2487a97de832a60395048e610420564196c9a58b3c4c822028c10aa8de24b16d3d29ba88cb51879459ccae695925a904a28a244cfbfc9370befc4de9e17a4e7d95300ffe71389eb13b8836e5200356af4c30654f45abd276dd076114a19b8ac8f880dbfa190e5b26a88efcc633317bdc7efc9112a4d955d98ff91c80e74c98a971fb096b3716e5d82b8ff12849d7b412a3ed8b98d19a1ecb005a5ea476ba7eb87eebe5d3b5d9b55ea9377ff70f7edda6ced74fd80523f48e36ae794da5f6aa7ebcbb5d9bb7fe0b1f5a34aed2ff5b7ea47ef1eae1ff23f0f00e4ddb76b8b770fd7e668c6b9bb7fa81faa9dbb7ba276a6fe566d56a9fde5eea1fa5420a27ea87e8472e0a64fdffd437dca0dbaeb5dd3d6b01218541279e447552e576c8042dd3d519faa5dba7ba27ea876e6ee098af848303877f744fd6820e2ce2128ab1f515f6e82a8fdf5ee91fa41fae1c5ad923fbfe63963c00eb00064811490692d1fad054d581e128843abdcedd982525428d9d8d3b371c78ea808e326d78fd6dfaa1fa8bfd5b311fad7d1faa1fa5b77ceefd8589fba7b847e0b849fa4596bc7e4f213172a6ac7d0ca508917a8666391fad1bb7fa8cdd6dfaa1f44f5a9bb7fb873e8ee8931da2c7796ef9ea8cd8edd3944bb61ed5cfdadfa21543b73f7706d960e211e1f4ea6f981bb4363f5a9bb27ee1c7ae49ed88fe60dbf2a2fa88c141a1b6b95cdafaf24d0922a4d85f3b5eb417e490b51469b0b0f6db6bae7f45b19d9ace8cdfff88ebbf2574de1818112daca28fe0cac751fe7b97e2ee86e25f43c7a7a53bc4b5d514f8979439fa27cae05ca402f6a81a9bbfb897854b22ed60aefe644785ba279b64549657d72c5afc6f22ebb323bad38adb276e6ee913bd3742245b5b9dae9da5fee9ea89d6ba16332a0bb2712e4e03a621f94f9006deafa54fd2dd7e62a3e7f4015ad9dbb7ba87ec8e5b48542da07cbc481da34ade2fafea4e456a8ac4a7455764925d0c4024d95c1047a693327546438441b9a8e320422da54fd0815d3a21a2c53d1e2604a5b508a496ba87e90f274f7b000a8c410c921f23e1abf22a3eaadcb8f0c221be00616f0a89ecb3911a6f604b8006920aaee720e84a9e50075102ba24a2fa7ce52c3fdc00fb5f6f4e98927635c6c19db48e7bafa321d39c9fc743cb41b3509afcda0c751ca970505174118ba1139a5df25a7e3579e8852fc759db8cb3e92b973c82043ac49fd5691bcd0c4b1b3d4b441868a38433aba6ac7ba729d28d59992590e0fe9a6b58f0bf6ab25d209346ac7a44446604e6c42d6d5857ef5cbaedde89927373dbbb1fbb9e79efcbf1347ef9d98b9f7ce85ef0f4e7dffdeb1ef16bfbcf7cee7f7fe7cfdfbebc7ff76e5bb1ba7ee4d4eb3b8bf5db9f7e157f73efdecfbf78eddfbf0f27f7e78e9ff3d75e63fbe5cbc3777e2ff4ebcfdddc2bbaff4be8e9e7d7a53f796eee79e7df63fcebf75efc491c8c6d09a4c12b7a0675a6d0999d6da7784ecdc0b2db683d68f93eeff66906f1d5ab40d5c8417963ae930165a7d9a682bbcb5147eb9303a07c0a537a65ed122ba319ba0ae415e076cdcaececbf08bad6873101e3dbf153d49233a7c0ccfd3f8b1b1004e9a6bd3060f67b76b8967f66d0edae0854a1b14337ea75af95dacf47273d81518c19aa92da8d9543005ae3f17ab53cc9fa1120a2e848270572018519d8a05175ab446e91f742e3a0bce3567c159a2f483c1855090d10f4450fa31e042dbd6087d67ce59a6bc03f54060211000ca7eb03a250514dab6a6c093ea52f598e25c7296aa1ff01fe762041c6c5353cef5ea07d5c9eaf1ea219ac50f7c100a08b283b569aa3a51fdc05954aa13ceb2b3482b053e204360f66b7af9ad40ca6c0a284575623e7c5a349da079248fb3790a9447349f9c68b0bd22ed124730ee515e30c24da1c7ddc926602fdb891e8fbedbf8a678f0ba3b7f2f6093fc862fd3a54e3e222303d53bf48d0e554d2fa91acc03d01f969c79e752f503e75af5b8e2dc00379b3c82b6ace25ca48d5bddef2cb3a6662e7727280c1d51879df9ea7ee7228d529c1bdf4e9cac1eafee074f9d87aac715e65bcf59aeee7766243b91c012ce646c53c4d2bb2b64898eda3896de0db0549d8a6329473455c0d007cd0c2dd2911d6468914f74bc8e16420c397314bc89a90f82f5b410642a3ca4c2838aed3559864da4dd9bf781be6093f7f3174ebb3bd1331bd2195dcb60ab2316725327eade20e8a02e233f89ee35c63210c614eeb69a6e6bb483a3ada8a3ab63cf9ebe3ee73de7a2f34575aa7fcf9efe0d681b55b8bb36a42d625a1d6ed7df26ef4da84970efe8e8dab3a76f5bc7b62dce7536aa699faa7e3846477c7592760ae706b8a8fe70c336b46dcf9efe4424c33da69968f3a813480f5e4db915d0df574a6771b96343bf642de7f75a5ed66dc37c894752193fd4161cbb2f19c588ff749a7296e93c0502551aae0f766c60f24c37cc8eb3fe139629d8e9f87974ce0fbd446917a4c76d05899d4ef36cc56a1c969ec9ea07d5c3ce129da7ae55dfa5c38d4ecf8a33cb07db1596b64887231d5c7402da0fbed42fb2c06100bcc851380bb4a96196827816e0e374be3ac982979d6518da6e1eda499c65f02b7e0916f5ea44750ad6dce371d38969612d8b8bba460245e1eb362bcc82733558149ee6168605bde2f0a05b2017111489a7b985e2697eb178845b303f6fb0687ec1205d3229c92d9d580979d978b9bcd278e5f04ac079f7b856dcf99b73e9f1e7f1d5dad849b060c6593051b1924eee4b0a10ac4e562794ea614af106f3aa9fd099fbaaf13c3a4f1ca1ea443a819d527522ddb9d2b78e0279e2f796634c9684535faacf39553dc6a6042602a3c828f4b69a65183ea49d9275ce686e6fdb5896fbbdea6190000479fd2d6b59e62fdccd64215d9637661e4781dd3b98be61f110822177976c9364570b129f884b7c2a2ef1694922f2971b59257c1a5c93fd0a496770b108c56a7ec32544b83b8eabcd71894fb68565daf59232dd74a4fae6fd337073ae3833f12e6360d6bf5e9d129ab7c10ab008b2ef312adba238351cecdec4bb0c0223b864808921f311854d64229708551605146ba1bd5c223460201754b8852674895031d7fea07c0bcde9c448c43da7ab0bf5a4d18be92dc8caeb2641d6888eb041d0b06a58362e16cbc8d66c9364d1806d218c6c9318a8a4e6f2161ac19a852c1da9a5a122a1521db2f2a4040f52e555b32b4fa8e23960aa167ba4cad44b0419049b7a40cc6f369b0069fb70f5833110099668d71a63f2d41808017c4e5db517d0ae7fee10a0dbf0dfbb9844cff2de5707a0f16eecddf227701c1fef48d4afbf04a89e89e789c9b32b3e450ed670fbbcd03b57c7e8b07e50675b42ef0fad8fbdc4675bed3ca972aecacfc25670b046ebf2811c75fdd05f52b30beb27350ffba466181beedec056d4e7375aaaf6d7faa1fa91daecddd0a29aaa4fd66645d160cf7a2774ea9fe296adc7c287f514f62f4dd96b7fad37990cb0a803608cd0047bface746d2e6c9f90a211f583b533b5d966d8b3b573f5239104b08d15c04fd7e678348b7577876835f1edde50259d06eca79bb12fdf3dd61c75b07ee8ce74534dd4ced4a6ef2c3717fb60ed6a6d96621624dc9d0c45de9dac4fd6cedd9d0c701bd81c92becf6ccbde67661fd25d874872603780fec4a8ff9264a6d33725feb82e13d58e25be4ed42cbad5e66b676ae7c76a976aa7eb079b05b415bc8fc610041e487b98fed859a162a41701e7127e93bd6756fbbcf657543b533f52df1f6b2107c077ced60fb4040e3f6d16071d7ce0ecce746da676890e570473e8c5583aa127cffcac9e495c4cd6363fec5c3b53bb5a9b8ed16febfb6b67a20659a0ddde39543f549b46b5b9bbc7ee9cad1fba73447a934b0e0257b66aa76932a2d368fdaaf4569738391f407067face3285094fa42878c1cb03794f78c38b23aa4d8b2ce0dcc208127b42c5a89d8e72e05df812279783d4e76aa7453670c8b7e28b18c1792df723b290fa41be9de68abfeb0f093f12e2af3d2a9593466597ddabc79d25e7a233539d50aa079c79e7226c0e5c539ceb34aeba5f71669c1b70d2c4e29cab8ab3507dd759623fd71438659aab4ec1990b3f34da5f3deecc562714b0f8f0024bceb2fb095b85ce0c0d24bb0fcfd8e42c72e6386b716c718638239c054e3ec1257867da59ac1e81cd9259674671deaf4e0583a79cf960f0b4b35c9d08467c46f90a467c509da2cc2ace19372ee9ad79c609e78053e614391d8e9de34e780235ed2c024ec008f8001be0024c3ffa5bf201c04e2691acddc986f3c7ea141d12ce12aa4e3acbce4c753f956e509f73c9999179ab6739cfd331e7cc3873ce4c8b2c61d18defb32f24211814e59c8f611f6e26693e4f9073bea8eea75c3a4bae20b71216da29d8d14eec2c384be83113390bd5c3ce02252993f29c3f3a0bd509e42cf172d34ccbce35b1e11c9b210f54a7aa13d5495a24a9d0170704329d33cbe85e726680ddc5288b9ef01707940f20732b5a2a00ca00b2418ea0d9a402a038b9278860d98908aa9e00284a2c07335f75169c6b52f18f273f68b1a9e5ae617bc4a6d175b1e9d1109be25e0bb247631f0bfa27ac0dbbce0c8acc13d8f6218314c133d72b655ba37f8acaf6e19c6d5a4a2fd12c3c6028af17e0e735bd4c7f7690021e48f830d03f05fd170c1951329406c54f9153cc09c49c7fc205338fb501acecb0f9472fe11f2fe475837feec265fef5aa5dc24a2f7c271560fe0917003b6006ac141fc5048892c92bff4439547a09cdafeca27cd0cceb32ca2a64945fda395b43a6ce3c6aa1be2c8e154c5e342c9cc3b1a06181a4606b6a3cfaa018f26b92c9e3d6e09ef4f1fa9e3d292b873dcf60ada9b553e2f827fc86aa51c941cde4d5acd455d82f55036950b0c74ca417b3d1877660f499baa69623487c6761c2e480b3b037d437e29c8589927d67617a9cb33041a2e72cac60cb7d8509d23c5761badc555834c97715a6c6780a53658ec27ef0c78aa3addf045a17121e8c9030acca04846155ea283f5f39a5e550b7c23f36bb1f4fb81f4fba1f4fb91f4fbb1fcfb81fcfba1fcfb91fdd9bbc2f0f77f7e664f2c3eefca66e65777ed366fae709fae749fae729fae769fae719fae759fae7396577be7b13fd4373b42090d4cf7c26ffcdb5d348cb7fb378de52acfc37d7cea23c56f9d700e61fd6ff9ee15fdacda912ff342ba76c17f09bc52fca49458f175e53766f56763fa1ec7e52d9fd94b2fb6965f733c9e48d55e48cab87e65331138f65f26b7017d4f5cf99fc7fef52d7629eb4321741ad8ec4027e7d4ce6d4a737ead16705ce81327940f2c2cb094d841e0d91af8ff6d9786f5511c0155847b7cc55747915b25a2c7a1c08592c3603488870389fb3363d32f972e5520969b88c8a95c54c8b67405ecb55fe5c4625acc602875e89b4ec6f164f6bc8fae6da27f25c81773f809d376c1c0b2ba2607c73ed4f720a6d34db7dcc64a58939d7b48cff3df3cdb54f3242f973b8f26715e5d4cae711f1cb9341592a12c9a0a56fae9db4d050beb21891153d2154989af773e7d46faefdab540c15a666fddc1aed0452595498dae3e766cba7542615279703d46f4e45c686279a42a2b8755b5a338add2e351b31ca968688f5dd8fe9bc71585d97891f0599f8f7bb4c6267759960fcfb8d43902ef5033a5e395599ad2c564e8d1b9525e5a5f1cad901a3b2385e394583e3e03e733caf542687c68dcaf922c4d084572b8b95d9cad971e5d5ca6271bcb2a454262b8be3b9caa2698d2bbd95b343e356e56c6960bc72d6502a7f1acf5895391ef8e378656eb872b6343e4083e33b2a673395b3e3251a4ae83d145856c65faa9c1d601c2ae395c92123cc1bfc14694a6531a78c539694f1ca9f3296325ef963656e98516e8b38dd3b4e09662ba7683df454e6c62150591a577657162b67c74d1efa5de56c769cd69a991d074e778fe72b8b86399e657cbf6454cef394def1ca29abb268b0a4c41e4ac759c97b2a73f407a82be394ac32be3b5f59642468652476563a5e598422d1a2002acab4f292311ee3b2348918be1629f12198dd75b6ef116fd83bdb3d5e99631d06554e495dfb07a14b95b971c3a8cc8d8fc4e568729329060c6efa55fe75bc72d6b4e8d08ce727b4f5b773bc72cab4dc8d3f498e76eef655ce8f5766e3ef45554e8de72a7342e9aa720a8defab9c1d41e3269d6d6080469f07f736fbc601a8323b1e052ab9e84a95f395d9f1caa255392b15b94ae314a8b248a7c208a63cc3448b95a71c2d465eecf684affc78658ece1342f98b32c3260999f4c5a69448ee1ebf28b4ac565e2a7f9528fd596b3c1f7d1bdcc55159aa9cad9c8a14c113c22a4be30060ae5612ebb0f263a635a665c78cace86a4912b18c2e97032ddde3ebb635645b682bea181fef08f9c7ef42dd9bf80dfb0d5433b6f2c2c7033a060230a61507b31960b46c1ccc13006364536c37ab590b6fbe31c2d8ff910a9d5cd859973c1f05c9b32c153acb5271b3f79bc5abb7270df8abbc787bc220b7278ae4f684f2cde202c44e68f8f684f2caed89dc00612003ea80aabc7e7ba260df9ec8dacaf6dc378b574b3a8dc9d9b72735e5f5113242946fae1dbb3d31826f4f1834ff2fc9edc9a27d7b92450f01e2db09addc388bc05d11f8d2183f8c199715c688cb06e5c2e781d14f443c28476ebf3da102f24965fb202dfd2bb7274ce026676b14dbe037d7deb93d69f082b1d0c037d7dea15c5a2ae5e9f6c400be3d59824c56e273614eb8992a1031e0ef40338964e22343ac6c1f04a41413a063d800d59ace8df35b4a25b45db28b98679b8882f4f6cb8f1246a40224875f8b04f9faed094dbd3d8134b595f408ddb0886320c352e337d78e41fb4f204bbf3da9edd993a27dac1ff5891104a5c9ed74fc4a0805054811a12274672999764a939a7a7b325e982c7c73ed9d41dacd45e2a4ca06c8a07d7b12615cc6b727515625227932c5931fcb0a05c920a242d4994b290214c50332e208be3d59c0962a42920f4344318098488b0bf52f42916d0289e200495137eddb13a2fc3d81e468de32479ea5b3b9287b390cf15876453224da82ba3cd6f7ec31e3b7f6a4a5bc9f92d303109ccaeb32d32321338de6e53e6d46f3129f36b45f7eb73071efd323ca778bc7e067e12dfaf3fd279fb0c8f72174f03c4b9b62a1af2174f55f21f4ce24ffe188e817e04a261475d33c9be99f27e89f27e99fa7e89fa7e99f67e89f67e99fe7e89fee4df017f2746f96d308ca3ef73efaecdea79fddfbf02b857d7db730e17e2d1ef3e2dee25fdf7ff28997fabe1b77f07c5279e7fb3f9ea194beffe3194a86fe2c1e63a1b7e80fc50e91ef43a8255e2eec5094141f4506983ef944011c5204f7f9a8948a1a54ca11f97671d3bfbf7aa9e7dea74776dcfbf02b899cd304b53dff1ffbaf964adf1f895c49db29ce40d77a79a6a2cf685784cd6231019b452154fc81a980c5155da5fdfef0b17b27cf8cddfbf0ec770b47c7be5b38fafd3b47c6be5b38cf7edea63ff74e7efcddc2d147ce134cd8f5092b87c0270a2b99d8ab0b8a78766115d0d2834a52d72dac06455c419db6d9534b5717a5489b2e158fb53d6e5c56711bfa7ef871e12dbf46d72dbc9bacd56d0bef3f6bf5d2c25b71ad5e5a78f75bf1733abc77aecc294bbc92f7ddb5a3df7f79b63f5ebfbbf7d1bb72206fcbfebb85b7fbe93c17afc0ddfbe88c185768fbffbb85a3125c49b4b4d67bbdf73efc6aecdea747c6beffe399847bbd3f041f1974ed92be08247cc6488ce6d348df44ed7dbae8fb3f462606743f5e1c4a6e5cf3fda1837265fdfbb7228e5741a4fcfef09fffe374e4d6bd77cc2348037dbb1b7d7fe4d07fbef799f458479c9ce779678edffbf0b2f428479c9ce579bf8c9c2579873882b41e96ebbb8573b44bc80e6fc4c9654ef16ae45140efc886a689db4dac0b3f5c6f223f90030caaffad6be28f8626feb2f4b9ebd1fcc6bcecc5eb754dbc9d9af87f4ecc524aff39314bc9d09fc5632cf416fda1d821f27d08ad6be2ad55dc182d3cc652f9bf9e062ed2c31e5115fc7e6bdbe793a04bacfe3e50ad7e5dd75ed7b503f9d675ed55ebdaff3931fb00756d91bd93ab6cc7a4ed10a7a255a8dbc9f1c4ebdb726e7f979cc67f4e447c1f235fe34e84a6ed2af7c1d3ab50b9af2eaf5ee5fec347b12a773439a0729f94bfbf224e5e93cafdfdc4db712ab73879e52ab75c897c79fdade3474489dc3d12a3445a23eb4ae4ba12e9fd5b5722d795c87525725d898cf48a75253216cd0f4f896c6191cbb5c816d6b89e1ad9c2e896eb91adee6cb98ae42a6d6bd7354931a6754d725d93fc016b92bb479a3449ba76ed544deb059cc913b415f90a5a97e2c57b62af69e14ce18522c14613a89f1086dd418ac46ac61b480943ff8a5822d05f112b0cf7323645702f63330cd72bc6d74bf1413d74fdec677b34f433f48241b0454c84593e9481da608a30b274645aba41508194370ee3a24dd010560d334db342f6ffdf90a10e638bb04046d74ccbb0a9eac953b1814be85fb61b062ebf89fa8866192a31fbe1f4b909272506c40179d71ecd9b437b29631d3c2f9f229963190ba3ad08dc4a2a0a0d290ada8a3432e2b7ab970dc63a809aea286d160a0fdf3fdfa38173e0ae2eb43d9b452562e5f52cb0b31728ef4defd1e0233d64e8964e75f574867704bff17f1e01ea4b655943f7bb80ace1a390e91cb496dbe202803c34bbdbd40200d3c7d00b18f6686ceb22ed6d70b07ae4bb28bcf57711639f6e944c8421d8b7b71797c83fd246f95fc4d0f7f677e42d6b684b5717c994f04655b388a1c11e0b2ea67523c7a2373fbdb9eb99f4a6aeff6692cc46bac042a38e1243df0048337a69081baaa96b688058238468e0d90fa0a09ab3c4224649d54012b2f2a40c5eff68d71da6a28815e86da6852d35c3be4b84cee1afef430a4f53b50c414fa637a537f1de882d92d38d32da89b55ca83ffeec4d461efa21fba2bd0f1865fd2f08aa5b79620028fb926460338d89fe6540d78b046b6fa2dff098bd966193bdbc746ec1c365ec6432dcde7db86892bd1c23f93d2e0d1589577cdae9f9c8dc8afe05a5706a0bea661eae7922f017498374254ddee860b93b39960d2c675717dafa0b78b640024cb1866081cb30700aa73a29d5163801ec75404cbf37b442fb1a7ead13bd865f13a20d4e12e48d0ea858975d364db84fb8408b51f589d5d0d81862d0b0b1c7be7efa539ef813176c833b3344461279c35f4206b0497e45acdd38d734e1fa09ded4ac9aafbbcd17807463fd9919ed6531ffcdd27bc1bdc75e6410938a3506d9470ca265889986f2530eb059d6328c7eaa8ff78fed34cef507eb3d4f4a6bab09300293235a13c8af88460c6ce9460476c8d07f5f6e82de45e3fa53e145264f3205930e80bd50d97b916aa24c119ba6ba4f255984e9fab3d745bf9777cf158dfb4de9ee558f7bcadd0a0671a00cd893f4130d6025adfa4e7a95b8a11280ebc203992ef138090e80400ee08f8f00aa5cfec4ed613cc553335c3ffc141f2c90203f71eb30db2448df27e88a785857b326524d93ce6323aa9587796d2fdbc5de8bf421d65d382e5543bd781f3654f41c1ac9ab993c722bd9db6fdfa71bb0079e45984a0a26c25a968fc68048016207cc731674397f80f172fd3c30e40164abd7e3c7c6dc18debffd086ff8f8516ebf964e007e657beb29da412cdafff71984f62d43c5034582f6b20df8bd689fa197d06b7a96a40703439702ff0a20a820c34e01723c1c3e8fe0b1de57da9d49b66ee5f3a99f265efe7d5a3ecfbf3549166a7fc0568bd64655e3e28f709ea175b98b4a1c68ab376df822883777014e4ba733965e1c26d037b284ae956a916491a9db46067a96db759b48ece61d0d6df529a6ddde179e56746d98d0c2eda5807bc103b065ba1432b4b225822a9f0fdc52bc0994a0d77be309d677c0df3c35308f4bfecc400bd84c3338322dbd1752e1cc25302c81e64fb622cd2e16bd216919655fc574c767a05698fb6ec0c4d5d7375106c31e021df26fcab1307a8fa3544a9ef3cdc0084aa5a4dddf2d91bf0af612a11ee5467b2b208cef5ebdd40ce8c57b90a00b44d51d373ab058ba1d8e7631dd246840b54ad82c98d0b1d92cefcba081cef6c2eb3dbbb6ffe64565d7f6dfec7e65fb4ee5a59ddb7f85b6a26ece809bfcdbd75effcd8e177ff3e20e176073a8136e47e610c9a8b8a88e922c1a268649db9c4e9c747e7ac57cf10d1b17771032b417f8e1131ccc9aa63d446b94c603aa216c582a2ea22c21432196e37b31d7ae0033f461f62593683978b3541b9f896d98bce9d62de473bff71571ce4ca35e42426566e52d51f5314b2cac16cdb464f0656cd3d24bea28e7273404dda4487d08f0104af625d148f6550c5fe436692331613c8c904da76f728578b781a9ec621998b62dc9a2bd50537b618dda0b75e70a2ce60a350177b16ba50984e55c1b17a109cd0ec8cf05de4eb7393a03d5d9e95749272b4e407d56cd5dbcbf6df59af2a7c241e1edbd60c3d849b49c95475b19f3e922043d00ddca7b00c01607e0db3174d6f371fc646b00fea73f453fe9f05962d2384ffb854f3881ecb2dd34ed12419972a6a8669ab42d5cf46408a80e9275b566aa83b30a65b32365d505f9e94f03304c356866c3c3c6cbed730455ad65c9efd156b4b1bbd39f94419edf1a7e2ecea4daf156d4116d8ff02cb4016d837d0e6fdadd823ceb045ed78c63d32d55508d0ba4f1bee3159cd7e12b398d8e5b4dd73632de870c2ad5592a1b2b548e2b12d4f1f8e32cf5f94003b915039a8961fc2353bd18853e00ef0f6e995b79170258e110def61d6d06bf3f07f6c7297a3e53654120e33dc747bd2d30103a5c3a9d1e4f9dac55bce1c36b898d121fcb9620163faf8f8f63098f4586c55d6603457139a64aa6d7628162058142a701195db354cdf64fd5de8cf4247f28d07f0306c18530075d5de83724631ba63a4c8a65b7fadc69a8c3b4cd0c19b2542ab7c2665cb1c8e7c0a25a522d7343da2f08eda84d6cffc45bc3dd5ee54e5a81dad7adfc2bb4c28487c63f711777401f04fee94fa3dbf91d7eef62a38e05c6c6fc494fd860c2799235d806c1018c3bc009d1d243b699eff0b88a3bbb7e338c4ad246e156f2b7affd73c19f7404b1ca4a1c6664d5c5f7d1fc7fecbd8b7bdb36b238faaf50babd32b9a665d9ee2b64b93e891f6db6796decb44d25fd5c908024c614a992941dc7d6ff7e3fcce04951b6d376cfd9b3bf9b7c9f45000360000c0683c1606062ff58fa5a29cea2359f26476d2619fc48f431d6748fd6452d7db6fae579f5b49c2ee7b0a6afeb608cd43545cc8bf492b52b63784a53c67cec4609a501b955c2f2eed92881fe418a105049719d9b1c57153c23d5ebebfc0da6dc709ea96beadb89aa966712619484dbf01555dd3caf4ef2e59c95b073b50b6f037958c593a5979cd1909c0b4d620cfe376977daf0f6a1a8c76a7b14e929833bd7736e25c1abc24367e57af7eb837449c33ddfd9f79d83f146a5108a77e6a4684c84c760e31cae4d2e7db06de998d4530a7aeac8f45eaf41b4b87f15aada2d1e606c4b33f84e1ba1b5e7e17ca25dd361345d338ab2289a47623cca38365bc6a7bc0f6d20156d3083764d8fa8ff375bbb73a237cd4d83534bbf23a3b91c2cbefb7941d9f9cd8219e90fe0805dd140e125dab046163e6b26ae0d7c442c4747f4af890d463591e17b9a45b158667c735dcce745fe8f33877dac590e7be2dfec8132b0c484134b55f55221a0437dd35ad768cde730bb67cbc9040e49ec4a0f8140fa22b5294eef1a45af317e545fce8a8a69656845e6ccc9f91f52890df66f59414935fb4d9e306a9472b02f785e29d4c4c7a1f8e8a7d546bceee1bec48931fbe79d9f1dfc8fe8d111d5476bd1b13f5cbe07129ffb0ff04f23c7bb34afbf0541a2996b9d89aa31690cd2dd9de6189bb8108236b4ada46a920e9fbec5b2727e7b054a96df50e74df2da2091974f7fb9387b7a7a72f1fcd5f9c9f7276f9dc87932187cb3f7e4c9fe575f7ef3e5e0c993bd35b982e2ac5ce6553acd1975d2bc6653797e69945db2e715ef12277276ff8f7b180cee867b3b4fc6a311fd9bf7c5ee63e8ec8a64a9d0ddeff0351f37450fa8ad1e26a286ee6988ba84a8d917684eb05c2c58e9c4c532a7a0d991586954fe00551a453ca097492bd814c8552a3337c37064c139a75a04000a44df4caa4be407ea839dc3f5210f1c4b992256dd4e27931a145cc85cac2a72b6b0e34cdf4698d6899cadea661e1719b07a39fef8b2933822b2f75ce2b4f4efcece1ecf81a1ffd7d9e3d50c74cc77b2ddf71c9c403735e577beae509891ad02bc4e56cb354f789793b22d03c42b48be6ebdabd3ac0128a3d5ba2e4f679c19cb3829b52d1e3c53035b557cafa7befba901f3f927a1c651d867f1ee833f61fbf06778b781efa319b8ee9f064bbe9f8b1bd9860fc9bf6bc3648ddca12621b799e839c11a616e62f21684206a7d3cd8dc5cca786327aa14a61620c6368db55ad9af62bb7de7a918514e54455ea59495cc66cc1327adb72a282d2f6ae3001bf4d9333c89874284eaf637f010b205bb21b9824cc1688c0b3d2477c4e105eccec16a6a80baf18c55958430527191eb37b9db6fff6d563e7f82d2553f3e9acc81306043d4be6b6bd9e6c90cb448600fd38f0b7ad34f6669464b963f36f71689937b8d714ce08b7e5e148bc7d818e83c2d1b406952832b58afa788db35090a36859d3573857b960c55a939c31e6749b379da54cbb4864d1317c1f0d21b52695adf98874dbe93f659dff92d8aa2dffeb444f359043769c351681f5a117d40403983028e20072f75f31046a65554d37ae49e816ad6601b1b6e3e299d933a99b14aea08f0e4501ca98b031cd91550d25f3764f22cff92dd48a354e9e9486a22f8184e59bd66165895c94feba30d4d698eb63ea2346d06f8bac77b44b1e0b53113fdb2367097ecc657f5db03a875ee68e227f5b8e9c471a5ed60c3e4a0e52c4da9a2450ae61c5eb29b3110876abb16125d15679d6d80ad1defd53497767f0233dc798189623b3d6d68bd660209a9ea37a4b9765ec868b5c6d6c58fac2927425c834fc0a136a99893723ece792f18bb02895ef4a7acfe0d36f8c5b2368feed59503e32c7933c1c9c3653116e796b1f5ef4b56deb49cd6df49325df0d6f23cf0712fa12ae2fb9b4d75c22c8722ba6b24278caa94f127af4850ca02bb5a76afcbc3a62969f3b453bf39a336393c8b7d242c4e12451f986b873859ccec634565ff2a4812c61150c1a3c3ededb1370e9bb62c2e96a68a8d2255eea12cd2d6adb493a4e81d731d6ad9b5884843c65ba73f8833948f7c7ccf8b166a36930c8a56365206ac8c6d2e7fa4aa2bb5acd485437028d1e2434884200d16f9431653ed4b5c9a733e56b79b5108c3d0711bad737e5b3982f319342b6c544cbae564a7495d37608d82157d4a7b60931172362886678331a4de9aaf2cdd3627b3468987ce1062c64e608da02b074256b1919e24ae48506bf7efc5d11152a55c1d5d91dd7746dd8b0b56a16a74d4f5a5b2215bb240487b701146aa93259f8a1c92a18d20a7e08b0484f9a3194973ce5ef97e060426d6b8e9b2acd3acdadd0c2da8ee8132f79dc8b9809b04c5e22d167e8c78b9f7e4c2a2d5106f28a0883f18c71945fc01cc48e20f7ddd4d38dd9dc0b9555e3e2162153a2bab0a9265ae200dcee35d685606d619ea9c445abfa09a88d445c9c714898bc37abe737109337f10e2d777500606b6b70d5b09997f78816bacae04632441023e068e9c28783f55ae2acc4277bf155f524e6d4cf705aafb1ad77d81ecbe081ae83a500020b6bf8eebfe588b10da14849565016ad4a5a03dbbddfd49519e906466f8a550890d3b032ca96937a967b0799a6e5a8ba8736c55709f2c16d98dabd83e768c3ed7e7b5895c6dd5c926a9636bfb107fed0e1ac09b032917a7817fef8c9113d773cd01174c65fd941cbf865b22d7d6386c632dbc6d8bb2485855f5597ed57ff5faf8e4e2e4d54f78c97c511674291415d8e4b57a0cce907ca8764b46927a27adfa3a6b7f9ee6fd0f68a969de517e7451945db1ac5808672f5ba2c56dad912cce98e8685965b0bf17697e79847e4e81b5d927293061e0ac8a56fad09e54553acdb90cabe9b226e59481bf1435d3522772f642270543287bb2854e0a33076dce704b63ce98741cea72849c8c603c131fa5a6fd40bfed4015b3f8bc04bea23988a410d84581100a9d15fc5766f21c2e7456ba13848a5ae9aacf40530c7431eaca6e18758d134484e8a735dafd0b50d4308fbacea1d179368b16f98bf803472bd8082758f9c30871666fdc180018018ea9b03911f8aa1e750e4d74031b2ddd31409726b94284b9ec41c47d2b1c0018191672369bc5f2c81d8e43b5d5067a5ff90b933b9848bd2d96352b8f8bf91afe3b2524edd062bef5dfbfcc5ea02cf5336eabde289b175e09507325e70e52aa1339b7abd09c7929a020270bcfd10719fff5c44d3de7ef9133f0b4f11cda543d6a460102a9676616932a1de3f603e6eefa4cb2db07bafd239265c0cddd144ef6f84c3dd2642a91efa864477e14130b10a6f6ac2cae4179c047fa842f2aeea87b44722ec183d11ec113053c4cd013c483b96fa3b728aa2a8d3366548242b75bb16ce243790a3d1e6563f0569e914834ea595a393352e55bb51333963b699ed629c9d28a5167876f9b59e97a1604d87350819ee84c6846af87e755c504c338e19160465db8aeb3966ab4d639c484c0e178af0d4c9acf5899d6955b2de323de5d3e6207dfb2c9a2029d00fca3c9751ac94250d83050671c98afd225ab4001365f56b5c352b0118819ee7f8bd2ba5ac64776d475b69d357ca0d3640b0c8ea65630942b5c03450b619dc5776ecdcb56014c3bd84ae80e62ca2427406591ef5c97a89713ef5e6b576c2a8e139d8733cfec60815fc5d0c28ca3f07ae21cb6c76f18248d5bffe2025a0237c035881875dca9bf2c281cb29d5c3138ec3654a35692cbaed0219a75ca8ab1fd39ab09dfcddfdd391841b2da0a2775995911d52c9d70106db0849e076c69649394a297c48ba362be28728d9a26612b93ef18906163cb6041ba96b1f645cde60bdfb940077117a5b846ce939b5c0c41acb2b4b4fbf076696dfbf1e88d92b1f3d8b44932e47e3176bc294ee4b8d040fce05c2aba8ffb894e501d096b82d82fe858df1972c03197391252bbb07df03cd189f2b73f2339cdd851962697d6889a74a6476196565ff0751c3084fc10b21c60c8d320098219d42191055be4b2661354c41a6efe84f1b928a26f81d9a6e8ad20a2356dbb2fd03db714f4b89c1d9c46428e785342106f65eceeaad62d54bc00944560ee7859d7450e8bc440e44cf18e43994e67b593f0422a99a7b38123e85c088ff65e730405f15d15d1b024472c04925290d273a675fcf7ef210024ef4546603b6166ea8be835703046b620eb620d6896567501461516a488b6a845ef90a1be35d3799147e2e3d6856d31dfeeb64ae60253fbb52ca3354f2f3ef22d3ed736cf6683a779e606dce260863c58b29cdadc17639a0c7396c220f1dfd054765cc8f9db3a7a461fe30c121106c845562444d80f0820196342c109890681a0998e07e9bc85ec63ade1ac687f7d626bc8168662501dc2acd31b521aa65a34c63ee20e4aa441d04816477a069e3c6c0090a44eaf18acecafc8dcc0a19160b6691d386901c302ceea9b6cad5488b4b0b480aa46f294d5cfaba7905303a522c680532c7ed30e08b3face704bd0c796ef6c492ae0df30dcfcc31a4f1e21878d7f8be1e19f75c1ff42af633650a0f8ce56a3fba0083360740466141fb2595b63cfa2ff59c9264ea4e632caa03f946c22056a4e21518428e4d32de7d0b905957e4ee65c6a2c401b80b35f970aade23d86db6cb922f48fe47a54e4d98d6b1a4a34c5002b1b627582077d6e639bdc872fc3a72dc72e709af86b97c0cea1150aa41e85f330cff62e7ce8d4455fb616daa9c802c62670ec8981e314388de9201b6aa84d64146fcdc462c8bcff4c9e52b2491b47e1ff1453e13010b0962971ea2509bcd3714d8a3f34e9df4586a42ae6023b44d90bdfa6f1c98a5c0d0fb4cc571a3af776e53b627e580b8822dbc019ea798e1dd36f4e7fdd8ec335d612c0466cdcff50a4b9bbe56c79fdba4ce7ae6775164c84c02cc642105983c95b60cbd260180e4c9700feb6096e8158684c31d258073daf55f3ec08cd95ea5e6bade35b1141f2fdc666616d4d540a2ae86831a7035321a586ac9a910573c580f015bc1d8cd36b3fad845a89fa729a02a3fa9c2c9ab13c2a17f48ad72c4652677b11fad20f92ee835016337e105a4fe2364086d4dfc45813c68636fb38eef7f4675c141940d5c5061c73f67ac2e3dc61eb4803e3f6ef69de78ada30573bb171dc9ebee053226f93db871c8c6ac7e105e4ce80706cd98d00fc24adeb079b0502b604f3bb5d94119e1d61a4fd4bc183daa2364f7e998b51e108bf91656bb7e360ca7518dc5906f7330e4b98d5dbf61c6fd140e4be475eea651b691aa7d7cc0fc7d3a9d966c8a2707b6214f237993eb42699f243d8050a798a065c1145d57318afe7784fdcb3243e70fe532cf536134ca483273c47c03839fa4c83226fc51d5b372e9fc86e71b8cfdd6075386a4284b562d8a9ca6f954d84214135d181ce6a0ed4246aa5a158e9960a702ba1281232fa4460b34281f0a9255f282d2fcaab86414f79c45ce94f62310e6f9de9f36a13d526d6eb14192f61cba634437a820f8df01849de24adc3b6a71d33194ad8a2efa2965799dd637681da29a5b174e5d92bc9a14e51c46b269202291b12c44e4e8134131ccbc6adaee4e8f08eb9d21da553ab7ce164dcbadc0d9cad80465e982b2adc079f20d3a85b58140796040ed0d06b00affcd199b9ef72ed9cdb31be987415be8a184f6372d0209173f9c568f66a43c2a28738b3e2f5bd8e6ae2c1b5de1e6ef7e9ce1c1d7875046a4dbb0856ccd5aa19e872bc6aa1e59b930db87ca9d688d35e81bab38817d4718e35c32f9a44783cb2840b096d4b6ab5ebb253f548c7638a3ae3e5f1e751f7dc0ac79e8a428af4949dfb2c9fae9e1864335c9f7465d001c75bdfffec3388db68bfa8ed35caa57f445a60bdcdb09656a143957454a9d01dfc2ad60dbc3e60b25c69ae223ec27548402692c750065c629409ef205c9b2e2fa9464594c50a5c9c1ad48edaca605b499df441fd64cde8235381b059a568b8cdc489d02e0aba374bbd6c0ec9c66d5b2b7fbb023bcbbd311669660ad14c3e872a3ca4aec92cc0da172b7809598206d3b07cb1642ee1a9404a36886e3ddb1fbf7d0d9082d28ccb34efd01917634259270b88658aaad9fd12381b33e168ae602a7497e26a1055608f70a9c5f74fd6e3a07635f651f02c2c4a8fb5f318959b65b2ef33a9db35dbc3756edb26abe2b20817bc8dc1b143d2f8aa2628f28f2beec663d4a3a1678a22a875356b5a5a1de023b4200b463304a00decb6b7a56bd29d924fd2800fbbbeb4946be5b6759b16745515775491622e74ae53d9fb1397b5316572965a5e52054da9b0ae3cedbe7f962597f5f16cbc5d3c582e574e5e0ef66b837254340f1b119f29c7dac570effbb19e62da169b172e06733149c85c5c5c79523bf8c754c83391176b649fcc6a91edff51bb3138469d9eb82bdc8b0d608a10b6b48e4df5a27646a3b79eabaae13d99b62b5443358a50850ccb2b2d9d4164dafb61487ac2c2e7f9f2a134854b47438eacae68cbabe33ea72fcf14be18a41528dba4aaf6874c93a8db9aa839cad94f7fbce9477fc96e55c06c7c056fa1907795a712399cf24e07f04a7b1754dc60654cf36d7502c698460a87a3ddd806d67d4dd81c37c9ee4219f5182894d3a48f54a1a32a79d6bb6748700e0d67a09623a3ca2880542b694718e87070f152094cfd045aa630367ab5a907c4bc95d76d172e298ebd67aaab52edc339c36cab856f8ad90a32e60ce09ad39f0f5cd82059c1ae59cee9a2480b756562d4d0166d1de0e48fa1f6944091c6c630b745d7d5b5cd9d2299c511b7082186c2c6d10d9138d0eb0818c915f1f701b54cd82e6c4b0c134a9af91bf12d2d55d1d0d12fedfb7be7fee3acd09fd5c3885faab97b247ac587c23b660542d781854c97151e235675985083700e03ab205c26314d0acb802f119d221f0f06a0b7e77d472d91741d3c523287aae546e1df3d7ac9d8d1553f40c0664379821de620c430b9b0bb068000634aec6320ccf6eb0a4009ddab3c7aec9602026566338c8e368c39eb07df55cabc1575d0d8f6136ebd74baa1c02b5ecde070c63a9a86b33b0d1ad8ad636439bfd6e50de4319e4d0201d6e861603a73bb3b626667385c03bb3dd7b4fce9ad28cda1d593290e7194e5c35715816113a1a4d0da34dad3089cbf2f5a95e53d553c73827b6bd1236aa6ac6e881d6291b2cc4dafb8ea657ea5655a39f1a75295b14e86eafe58e472d6eae1a17b2d45a04ac3584b76d9dff9a64c5f5285fbbe0206f0744ced6c5057a79bf58e6e9ef4b7691d28b8bad0d2edf0d2f6f0632985f5e0e70cde0dd9d33f09c6d674fc8086d972d70a449523fafd6adc9d3aaa9a52f16376863b53fd8fbca77de935951749ce779d2b7d32b274b1396578cc2d58c1274baafd8b5f3ececd8798149e8651a7c272770e13bbf49f3a9f3e2f9d1c9abb31367920a9d7acdca79d537b6636f4f9e1e9d5f9c9d3f3d7f7e74264f54e0f04d9cd4090581f2c69be8e8f65813d85623e868532fa162a74c1a8035e121a54caf183dab49cd4ecb620e56c3f783344b99a71fd3dc8c30f41f2aae56edc271e67df4e3abd73fbf6af6516e238f269c76e1683465f612c9325636234c0865b869c5a5f54d13a7d3d76f7f7efaf6f8e2edc96913b3ad2fbe406eb1651482caa23f3a348d9ed268bc3c79f9fa51f50b9fba7f11021b87eafcfd9b13131f1e6fc60dc5fcec9f2a418d4ff596deb495cc53569fc1c951055e884d6b6364fb586a5abd64f3c20069eaecccfe6ae18616aaaa94a1eed13170226bd2ca3bb42882981762b5b1bb1d2ffa6aca6ae372070ace2a474b626b36bc32b431a3486ecd7accaaa44c1778bcd99a5b43e8024ca378339b111fae799bb54dff4d8fb36a8467455ad5af8a1c963c39d67877c5d086e085312322ce487299a595490df232820d8b6fa53717ecdd5d8716f9568df5c3f1a0b832edb8b37a9e798e22834a4b038da6354ca585f93ba3a6e26adab8376023671a1ec155f0f522c047c05a2c3c0ab5111be791ddba5eb0d9b36b763ca6f11b1c67476dc4bcb98dbc85ad746aa02eca85335661c5de9a65ad16afed962fb658b41fd1ddd01932bbbe16d99a6b63dbacbb9703bc7b098d90d72eb7b7d306bda0fcc48186e9b841081d6bf14359089e2450c3034a3c1900007464e4dad8f77a76734c48bb777a3dbbbb1072cd6a8f9aec6313df68f6131e8b5a5676d69330624a3e05d5ee84a4d9b294ea849211ba53e4d98de181daccd67046b046e370daaa91360db8db5eaa31a97d5d68b6cadee845a16df2a1ecbaf19673a7fd963318af36fd04c375c22daf3f2b6af53484c06156d4d60628b1dfc0e943d89a8fd29b2e9712f2ba82f7bdad98be7204095717d590e9db64e22699ead62d68f7ce0f45bdf3a22020fefc86c2f8aca8773288da2d8ba206bf5779a1bcd730ea14b973532c4ba7baa96a36ef3b5bceb651f09b8c910a5f02fb4dea8e6645bd92daac662da3ee6f70739111aa1e65f5d6de2020091f0f07dbabfb0ec3e0142399b1a1dd2bc3c1585eef815ec4e8ffc8ee29d9bcb8627069110b22d823f2c4129e95b5fa28a563eb05948ad5cb05d031e792288d8fc05c0c0d1590c26745ed8a6e6c5cd0dfdde5739f72c264ebf9b4c28f34c53e627a74fa0fd6abfaa84295172b561bf4aca74539973052b96ac4fd498d6c9b8d20ee15b6e4d9c596b191e2f5f268d07c7fbe223755fad5d4d0ac3ea4dd8dab237865a20966c67e8e2a38ad7e028fbc12150c1ac9cff32b1b40441820b84068080cff25e7a3701ef3179c90a6526b6b697bed6e6bd5008b0e9101d17819c496b69cae825d8f41d09141ddae41b1dafa3d29f2ba2cb2e7d0d31ab8afe23524e0dc0483c8f5b35d017cd8ae50b6a8c6d942e01d51e50e76bee7040f68a3274539df811922b3fca163e23535aad4964aa75f34e093e6eece69f6c9679c1e4b7aeff59cadb4da81d1dcf20d3a170969ae93047df3944551a57c4aefa039e856f3b4d9660acd33403b75ab05dee64066705dcb69e7fd4f3e75fbb7581d5477bfe04dff171cdcfdd5ac7d56cfb3d3421fc161f0af39277b04e714f5fda731c58c8ffee7314591e521a638ea02e003674b0da6287a3950a3fd67d8e3466e0624bf919b41ead63d0c0a00fe431914c93291acbd0cedb08f754976b334de2559763f37f3f9f74b362f36b335c628187f2a9e26229aac4f0ba316f7b3169c263c32b3357835a4ff368237defdc9b334b72eecd0b42271c6a81927d6783b4aacef66649dd619afa34da8ffb794e7b1f9aa1a0899e6d1d01386093584ff42517f22295140c8f0e7d99e88cbde687962dedc84f1904910d049a887c7949b854ec8c4628cf76f7960ed3aafc2a579f59e4fd823b56e0008841eb1735191ff0e5b162404fc96a3fef0ee450ede06c3979b4c7cc24088cf9b85f8522bd5a82bbb558400bb0d3b22b5488b07552267abba4eeb640657b8cb2573026350c2bf6ed5feacf57aeb5f28af584e9d73569a7c35922b81c1689afaa0dbb59a36ed89a448249f5b154a3169e83fd4f002c077523ad656303352494117e798e1495a4688172c41172fc920d4ed33d522b6a863af4bf7ca3be2b0b68560f4da203c0cfaeddb46b91ad80ccf58119a8c4eeef802a7237b41de6e50ab4d83bb922a7048a5c5a77b053d63d0fb7229f40dcfb54b16ac518718b6c7d8d5882bb7266ffd8c0db29865bd9e9acc3bca519a2f57a035f36bc9823c81a7e2bd7777ad3863dc6949a673d002a04d6e8ad4a048afd7bb9f7a706814a5e0728efc0ad10042f57cc7956bdfdd9d1e6d6f63f97259b369509671e86ca16ec00938b7c76f51a164aa9ed722456f14a0b76ca87b95001a4eea1d1b7a001344cee08624be5952ff0f15d24db9fb7e59fb5fae42f857dd607984e8f5a040642d5f00b1b6a8fcbb5d7669c82d0d6144a2ff67eebf8060605e7fc187d2ffdc9aad31dbb42c8fff9265247970f5f843aad8cfd528e805c1668bad372554c20695c27ffc258347aa3baf4999a7f954a48a90917e54e88dfd51f13fbb9b4f8a6c39cf2dc71ae5eb3cbb09e4b358e606fc5fa5604524346fe321bd2f057cd4c61442ff2eda564455eccc00b3ff398deb1f629fa606f431f7158cdb7e382cbd9eb355956045b3e5cb81e4914991edac55b1d14065d4d5162ae0475dcc1ad768b6d8e6dcdd391d3988ced66f0a006c1ad067255833fcf69d22d9bfffe65ccf58eefc26f2e1ab680b9680dfcb3e6c427135042c35c5b4e96e95610c36d6bbff382d5bbfb1c6b7247aa3deceb7d5c584a61a7964dd6f3357227777d7615596e6f58ed803ede4ec63bd03fb820fd5c71db2b777b30bd5eecc48c507c76f8b2755552429a919959b74c4e4d19af191bab7602d4df734b2bd99664379d85aa0362abe9582d480fadcc3bbff64b5f85f7d5b8ef797b829b9b62c38bbbbce2b269f689e7042ac674c75350a7e0e5d82712c1f698732f4678a5175e1c4e8ec86d4e044081c02c1fe9913a7b4a275a6693d5bc6fda4988b173562d986b5705a554b56ed1e7cf5e42bc354f85f26d9ff19a9bc9a932c6b93cbe7cb5a6b9321f02f11d989b8400735fc61011de4967f8dddc167284fb0cbf8bac4f1d98160ab8d0027e536b6722ec4af166e01d782ff2a6671dff4d467206bc74272369e8112ee7e116dcd4dca435b195ec1e78c8bbc928d1a4171275b7733e2d8ec648cddd2e96b5a94be54a30880351d4a7f831205e1ff2fe4e70f104c63d35116d9daa6a35cdb9ea09ac484535b42036afdf4b2ede0f2bcb9cf39b73739829a258426913fb85efd51a72f9b364fd6a9a7bd55fa17ec92ee3d647cc45a241e03d34b878af84b962bceedff722d927982d6589e14f67f5687f43fb53ae9f1e0ebd23511466f3c66ebb10a7d7bf16a5bb8b654da83daebfedbe27a83f71358cacbe27a4b5525d5a55af12312242b894cc6a212c511bed66b8b04b57009662da24d1e2fb93b24089153adbfad2bf3ff1e962f3ce74d084567abe864ffb31602f02209369027b97002ba458bf98ec4c34adfa4d992eecc36a9b6ce55213cc7c9abf393b727c73e7e3c7ff5bd9d6f4757897ada5d9ddd423c9d4e59f9ac2cae2b56be6593acb8560cb92df17e966c1b92cc59b1ac03e760804ff4ce8b655ebfce4ff29a9526e03297291f53dba9ec62c148b9c6e2f540c12b2b569073062366283b67cca764352baeb75ad24f8e37244b2745a784fe01a7247fc5e1c36732f08d8a7f4bf9851ebe611c84f24b909ed1a0bca0faea611b2120847159463ed302e57a8e15348057be3384b48775f926c16f729c258f9a293dc9e98bb4aa598e17b38d09376a73ae554842347a43eae575375435a997958f27cf6fdafc060ac4d7bcc8f351b4572c5d46bbb70763a5dae234b8e53b4ddff2fa391c23c520674477ec09158e7cfb5c2f5484b28716230069ac651c9b16364f28fbdfc3e6453dea65d33503c5c7ba2dbc7f45803b664d77f6a0a90b74ddc219f8468feb1a50bbeedec47545d95b47595131c36a0fc2cfc483449fcbbbeeb120331e7ae28922f839c2f0673235c3ac4a54b626932af676af2531beced4a630ddb0895619ee932ab712e87863b2ca8303359c126d537fbcc96ca55a90dcb05b19754999929d594a29e7e31c2bf0d1209dad8dbaa3d1c7e36f46ddc716683462d415a707aa34340d51ecc220a1264b3092b61a9026f5abef66699fa3163632feaf63377f9162f85d2ece03324695a0b75491e0f94a6759560c1e14532225c2ff57c9aa9a94f5eeac282eabdd26d45fe09a95a6573c45bf6f22733513febc22016432a5bf100b943ce435589f3aecb509566a39c8843dcd9359516a4d878aba4fd6e5c2a2e93d45c91b0160865e5a78952f4cf6ec908c95b5c1a4cd016c94bd55e44d96fe94e7be9f992f0d4279d35436ca934f8b9aa2267db59561e1e9b55a72374a6971273b832dee1a208f37960fd9676da03ab57dbd5987bf4fe25e836e4adf86e7bd266cd30b9f18ac36509164daa4cf537c43ae0ddc485659b424dc964313dfe72eb18d92dafce6ce8a6bb9dccabe7f849191e5e34f7480b2c596cd13f6d30afbc63665f13835124e29d34617df2fc2d168323963aae8fd8d40d0158fcd32436cc6328935f136589aae091545068b2c64564bac319487629802fd48fce37dff2ed65d162e36fa293449ae01688d87b24c6a646855cc6986ea9b1d09128f3108822685986a5051d3084a1dee77741fa9137e601e876220f0d5ac3fb37d6ce81c141f7fc023739a078089c41dd0b1bc2a1fa757b017a34fab1fbee4924d63e173b7665f02b15a804de9ca4ae4cb1070fe2614441aa9f7ca5408f322cd2f37a819a12d3b599a5fb6b857d68ba2682b16f70323f02ccd7d25ce10a6a550ab95ed4e0ba11a705af8b7bf39ff253cf70971e96aefebfedebe785d061f00d0862cfd799af73f54caedbbf60fe8269e734a121617c5a50f0e021d925327ad2b874c266996929a55fa8d9bf3595a095f3b4e52507823a7c583e0cbe7e732da99144b5e60ce13a00ccb7120c63b65517079a96409bcd2594ce0154f59535d32261d0b36fc34028f8bf4431ec8e177f0dd04be0fc823f3e5f0288a84072d74b1d4ebe12f171ffc45941feaa07c15443e0836ea7ac1d783bdc181ff7b3b1c1f2a9249b0affdb21d6c222cda25e0377edd0e884dbc00872002f65b7fb9a1eeb2e0dd590ac0bd2ffdab8d80203bca129ff8d7ed80d22c541438f03f6e680eca5d7c7f2a61f7fd9b0d2d5a560b4e1312f020cccd015883bbc8d2aa46bfab7c9c3fb5973a67f34296f8954f483b54463edd48a8af37d43b59e694f0b18161dc0024de9f4287b01bf04f8a056f2450e7d3c711203ec304dee8d4a2fccc25de2d2f184ee5a2517756d78b2ad8455b920f55bf28a7bbb448aa5d569645b943199f932558161ea6b958f0a251779bf849b41726df35df050f93ed6d2fde8e46dd1e3cf23de6c02ce7c5bc7bfb5c7127573ffa9d8cbd10979951f7659a83dd9a60418084f3fff0eab647ddd0b94aabb47646dded787bd44517a133e64c9659e6cc59559129738a123cf9f0f8bcc877e6b240caae1c965fa56591c3fb5d3c3364843a2ae051845258cf48e6f0bde86499495bbdaa3feaae40eb13dda6d54bbeb6311a68c7acb7d880cedeca67f9ef4bb664a74599b0770b4a6a66c2a9f4b7f80e1cf8ff6c053843976276e2ca3f8ec04da41ad11397f8b19f78b7fa91e288841010132e8a3158b249151de3f712102ba3e4eeee687562bc999c56d0f36a9c786d667a25b08a1456c48fbddb74a238e5a8db5114497a3d9354ad042e627422e2a1cb2774f7f4ccfdf62bcfb350ec37ba03df74e76d1e752532a3ae676339d19d6f202afaa851b03150b2ec51d728000a57dd7dca47e154571519d56aa8effffca07062fb21fadea82967d7ce6938ca7fe065c8a7b1a3efc399fb836f60e1853ff4d3eacdb2648d91ec0c807b3c8f6e9365597209810fc1caff4733e2c7a8e97ab23f2395e1b1ce7f11dd5eb29ba033f0b938d719f8171715cbe4172cb1416760d1e94bd9251c07e6d3e876e54f23b88295c14f984e5ca489d8e31c0a56723c82ef4451cc7baad77333fcf27c23e592ddf47aee341a753967e041cf8fbd1fe1b17f37f699d7eb755e349ae0f258970ed9388a876c8c8c751235b9d9ce3e476b2f8aa289a737b05112829b2d9ef4dd4433d4cb08ded873279e3f8f06e1fcbb4938dfdef62e87f3b12e7938dfde1f87466197ab74e2925e8f5812a6ee834964a7f8130f1b1f45116f806cc704da818ce856fa600d163e685b89cf076c0ae395f9409101f52f8aeb9c95c13ffa8200562b63c46282737b538978279a171b43b1840f8c289a88e7d24505a48f1fab952afd159f8f92ed4bce11ad3388087a46561e45d14297c1aa842c182f0897b3db51371a758351371a8cba3e7cf1c0fea8bb522bcc17a3eeb60b94423cf5a8fdee300ac6bb53dfe41562e7130fc978e5c1747c1ded8e46bbdbbb53ff4d341cebd9fe4f246d9f011f7c23480791a2d19bfea258b85e48fbf8925d4442ca6914a5f8280e291c424409a709c11c187c2ff33a1a08c41dba12e380a5e0806219410c8807892ff207cc87dcc1c01ad0b7bc5944a201738e1898880840467c4b7c541051da1bfc5db6b2d77b838ffc13cfacea4c7709f6821cd610560ab51f8721a77777a36e5c14192328cf508f6095e04537eaec49de104511f1a69c93c1fc43233c977ab709a998783a219f8eba8108e7cb79ccc5aa00f2c4252397a1489224178842348d89d21658c8ef9077c5e7e8d4136391b80c560940363e1c75fba3eef6b94bfc8117c49ebf174ea34118473640c0659660d4e56d0136d14f2b6417c4f32407c9a241987d47a42c956d6f7bb73422c36c2c1854bc7dee523ff3c2e97674e6527f029dbc92ec487612efd196e5f87002fd1ab893e869af47864fc777776438eafed77f496171d41dfb930df2e5e470022b84e76f4887669068829c97787e168df241d8716944fa39fb58bb9ed7a745ce428f46b48f4f3faa366d6f7bbed52ac5642d064185c49020bf27be141d0ef6fc517728de90c5156c0c39924359001a5983b3dcdb51775b2c733cec120f1f0947a599b73deaae381dc1287b92ad3a53cd7cdec9054d2461d793c341c0899f6783649de1dc64a70ff23c211e71e40e259f83a52d88fb75814f8cba075f1be527825fe314166320a7b01ffb62fe6e6f5b3395126b618e247ff06964308790440f171b36c9faf02797f8cc4fdaf82a5979816863afe7f2d5a0d77349048b0edd763b50f9dd5ddcebc18ace891afa82776c201838f48762e2affd51f78bde2e0e1efc249ee733c99e8c9efa4972279f62b3517608119f048409ac22b9a7f8308efee9c6fe148a09393950deffe15b3736eafad9c52a48f45caeb21637b3c5df83fd3d4d6c6485bbd45fa2db23f9c0f8ed9c2c0253f6e623a7ca239e72e189a3391c8738062068716059385bf993a23c21c9ec51c5f1b64219ba20dee244b7582c392d43cd01d7b64a0eca9ac04f567e5d00cd58b9714d172d88b1e27642926d8a577e91677629e9c4ed70ea6a74f4de97076647af7c54b0bd6593f55d9d2d1eaf7cad623bf1b99cadc3df8b62e4bbf1f62649496d71afe7c611be8149222d595dfb1709c99265c68b98917ccae8b3b4ae82d81fe517020978143720be15dee711f5ac64841ee1c2efcb233d40da3f2af26a3917a15548d4dd5da3f62bff42ca0f64a5baa62fb3460428461c89b58cb32ee9a32f1e70e01d9b914f37f74213de98ba28791bd0c026d8d9f32f849c23fa7ccee645a33b9be57c9292ae7cbd41f7f721ac7af16ae51bd658adc5f1f9da374db6781a666b1dd3462e71cb51653a994c58727f1e04d1599ecf17f090f815fb0194fc66e6516eae38a2806606318da1b063162fa74832968e6159b117e4a658d68f40d004d468bedc3420321b5c5057e06f195d26ac5ce335761e0165b6a09dd6748609973c39604359b2068ada030e2c3d8004259f25a0e50c96fe1928475f169405b57f26f485c18d6f1d7a042f7dd3146d33ebe42298a2bf2697dffffa1b9f789ee0d133f776e58b0d9327975d7f1ae17e2a8be4e6291ce5c616f9766d6b3cc52f3f8bd47ece0bd7b6c9d4dc26f39508f7717c93053b7d6b0f2a36c5eb292197f42ef9eed4d8685fb66eb479accb8697e348cfc7e1e5b8d753a84d0e27c3cb71c06371a37579cf3efcd263edfbf04bef7622f6df975e28056adc875fc23e7cd2b20f370a9bac1edee952d8e94ec52e97c9fd6da616905302e70d2d0bd9cb7e9ce6141751e28531141a1163ed12be5e246dbdf2af5859a5451e8cbaf228a6cb57828bb393a3b727e717cf5f9d9fbc7df5f4c5d9c5f1eb8b57afcf2fde9d9d5cbc7e7bf1fef5bb8b9f9fbf7871f1ece4e2f4f9db93e3e01655414814c769b52075326365f0dc37139ef1d8a3229fa4d3e0566acc854ec8847b8d4a03ff797556ccd95b60f5ac7c9ad4693e0dd462d9d95bf9786812cc562bff7d742b9f2dff65e5ff1abdeff57eb9bb7b1fdacf0044bf4a32bbbbfb159dff3fea646a8716f3ffd4d3a95d8e0ae74b659e7e2a9d83fea03f5894cc71851bb967cb34a39e73c7b118e53ccfda791621d1facbf47e7edf29d7ef466295cc181f2538a05092edf2ff3f4bf8e367095c2c25f6bab074f7f7bf11ab428c0a103f210d753f252eac3231513a03c2892a517c26214332f69328267d78f2e2355f2139f7ecb83b7bdf255ea3ce275fc352c4d319e1fd071273dc076fa2490dc61d55330f2e5f001fc56112c57dc6e1d01251e2059340ed2b850f025c5192211dfbd328f66711e5554f4873d598ade1f9c49f795e3821c3d9389a84b84c4cfa8b19a9187dcba669557321a8c8f1f5a774e25e2275c29cbbf42edb14c033e25e0ed9d89ffa332f645167808a9449bf6c1478e8ce88bb1e0d197d9ed10b98d053755813f36f7d0afdb55a59eab81931a486948f5a23e3de608063c3d3a238fc80bf465f0f93719fc2dbb82c4f5256c1eac948341cfb134e397e0a7f3f0015a98a2f45c53ef5993fe16df02f7198325c40cdf31eced6c4a65fce32ffc00bebf2e636ee93c522bb71133ff356f0268c3b17471e458e8d987bab15da3b479d3d7f2ea83a875021420b12dd0a786bd9e47906e19c44646520ff7b2bf2507e28ca0f2f89c06c417c85b5a5f5285b4bf95de6c3732095930f6b867bc98cc89e9a93d0aa1549a731824fbef5bc302777772e6ff380b739135d5289e62fc5ef95405ee1786d6966a810c3eeee46dd657e9917d7f90e10c2a81b1229ef9dc3533bd11571f9469fb8d48fc5410917399a6080b5aaee2351477928c2c60d723c18209f68e806e25685e6ed5a64ec296d02a8644457f33a7d12629c1b1b7b72f1d12ce57048c6f28dabd80b86c48fc7e6d0dea86e5b534791be5079b83c3d20bd5e8ca49df80425cf4fcd41784a841241f157d2bfa0428292f7612a3f31a39fe7554df204b9d05a2728f6180d42fa5dacf4e81dd24f2bce9dc814f8cb595d2c168cba5e48b7b73d2406ce3639ef14aad1b8d7534412b6e12515f7eba8c994b47ac3854c0e5fbbdedd1d310f17fb2583b771f8ae4913ca33e812ada9743f91e823713f11605624fa4442d98dd86f30224f7111fad45cf39e7c25a84a2690a8200d0e41c29550851d91e836cdb9a8020bd39b6c394df3d725656553e913372bda1bec795e18937b599c17f20576e5afd5513dc3471ed7e5face9e9fc09a97f0858678b0a56aac3589a726f13019c32a91b400dddd253cbd134514da00a1b566ecfb89e7859016d13086d389b8d703c42d59e158cc6830848e48bfe23be057056588806728e242c4ae02c6c153a9959a4474188f43220f4b6275e2a26e8c0476c41159d4cb9299f1c7c532ced81ab811dd92e965b1acd871719db7466ecaf0b2b86a8fdc94e1dda2254a03bb34ea50e5dcdabbbb738960c73e8d3ac6d51779f6229ef497c18a6552d70fe19a7dac49c908c6c0ace9503c9f724828f7497c0ec0d9b035169c2e369955244d81f260cf8f7d95e885a35c1e6101bb3b211121fdcfdf5086276bd43beab6ef31475dde5d27a4df9edcb03df01e2cd9d8a4b6166da4478d4dacbe6e1aedfe1fb7ff376f38827fbbe35dfffaf1467ddf93e8fa51567d3f6c006c9af53ddf00b76ed7f78f0d90ad867d3f6eaa7ecdb2efc566c88669dfcb0d906bb67daf36038a0137b1dddbf35f6fea84366bc0379bfaa1690ee8fff301486910188cf2af077bfb03ffed860cb64de0d90628db26f0fa313681ed40964d603b886513784e3ed328509f634a09e781b3638b0991e89cf47a64784eda4e90d516bc0d217248703a1a2bd54f12879d3d38e813e700deadfa8c70eb08e217174dc2388a5d107a8439431cc6fd7ac6727501812f5203b334387489a57ec9d745eff94631decabfaf049d6bdfcee5597bbb9fed4e5de3e01bba464bc886293a17ca72f8d5b9a5a1435bde505a348845fa3909e4789c2a8e8266103fe8a437822961c28f4682621798f40f9da455e632f18d91a8e62226fd733de905ccbd55f3845fb5689369c64b5d947415294fa9646d2fd641de286e8620af4920490a8fab42200fb3e363d1f1703adc3e36704edc412b0ffd4cb72bf44adea81b8c7233854f58a8feadc41088a58fa67b90724602beea47d65c3854d4863618465e6f651ea92a1afc856821151a408b5ba2cd5d6a3215dd798092cf97f8f335fe7c833f7b03fc7d12a0140905350515b93fbda02c5e4e413dec33153e03a5a63f89cc76e2fe80f67a6ec2e329c67b218d26e1046b6187fcc3710968e9589f5321ef7375227f8a66161edad56cb37e96e6ec1598fc88ae4f7a3d170b41ed3c75e21b5e5882e91c8f517724ef9ef014178c91dee1069b973d59c5db5102f60fd8cbabeb599af12d91d6dca358f19e802868db36095abe4e735a5ce3de7d63729f1609681c1e0b675fc8f1fc5fc57ee90bb96f8a1bbbd93896bbd96849e436bd5d94fc754d39f9ed402a27f93ec1d84e78e1af56d817a2716cee1a13a8fa0b7248e243124ba38c80c4d1908c832f4844342c8d51c9f90591b6135f103f8e481c9238128d0ba12d9c1bc6c2ec681012b59d0ec9f6b617c76e3c2463130b165b4795c432d598c4522964024058034d396e62c46771c4623f853de007fed7d0b18926886df21704b937df31c71e2fc3e78d5ce5ecda794916d0ad591cedfe9f61f074e7d70bb2f369345a0e0647831df83dfe1a7fbec5e029064f31b87f7aca7f0ebe41e0836f8ef1e79407f74e21757f3038dac1df63f841e0fdbd6f21f56880c1d3131e3c180cf678f0f81bc87bfa04534f8f8f20787c8ac1d3d3e3f1ff2e7447a39dfe60e70960f3ec1ba87620b0f81aab3d38c56abf1c8cfff6c5ae3f8f1f3485cee3e876e51771434fbf90336d2e544c45ec13a901eb0c422325375340859cc5fd9a55b5aba29d821372d41984b9fc50170eb466d4205f4d7949afc765980419acaa452c0362b2ebfdbc6605723b5c81e038ea060a7791a02c36f96a45ad06c8ba6564d22749c21675f50cf354c04febe24571cdca235231d743358c3bf0bfd2273894d4640798125c24004f0d18544b8fea064bbbbbde135114c51bd96a7c7767749e35481bda25ba4ff4aa5c4605681c8af55466e59563dc5772cd4fab57e4951b8b15ffeb66f4dddddedfe3d5fa183f33d5d642d7dee8da681fdb7a803f5f42e50858d7651a2f6b584523da12592d48c2228629f36555bfabd41bf15112aadb0c3c0c85884b0d70942d6aa9489ed6e927f6eeed8b68025a06716545df617628c9a7ac2c96557673c6eae779ceca1fce5fbe90d712c1604506c0951aa3e8de07a0aae56251b2aa02c12eaf4f685a9338633f0bd7f432f9871b8a27352a01df97ea578b2caddd51d719753da51136157bc77c8e71d6ccbb7be077f67c82e6679d3d6fe585c3e1a88b9d7e342365c56a3036c7989d44468dfd86c328111229ca6f3ade3651b1f5e2e4f7255c78c6d00ec3e078dc8aaa9060878371783c8c25d6b1bf07580ff7c616e2f83a85d167500d2dc974aa42d5826519743a04c14877d46dafddeaa87da8d29ed566eda39cf7dbb22edeb22b5656581bfb58b33227d95b8667dfca618fe898645929ccf8a8b2f28a3dcd1633f21928594874499615d7a7cb2c3b4b4ac67287543779e270bc4e796df0f5262337d22743a52ecb523661a57ef24e7cbc49937a59b2e7b9f8702645397f55fc24fc1d3ae85ac6c98a62e1e4c54b307770729d5e2c58eef0fd44f51cdd22968c50f03f2f0ee0a95362875107b6fcd4a9189967acaa9cb466f33354037c26551f3c66b0129c7ad0f9f36556a70b3112c26db22f359be043f951950e1a5369d44da496955362719d6705795c695fae4f4c78b5a082a2cae21a3faaf493246cbe583da2e0afdb0a2e8beb33f4f4c377dfa4ac1f55d4570f74331c04c6d1ee7034da09c6ee90ec7c1a7bbb532d47d6b169ea3adc1bf7ebe2dd6221cb5a71b6ca394f5eefcc1858b8902c9d8259c24e4c2a0614454a12a7093c59e0c8c89d6a964e6a27210b9931c9d2c5ce82d433fc2a399d264556943b695eb37251640425f9f5b89d499ad5acac449ad0308a106eae3903a6c53ccd898919cbc1997f4c92cb690986339334cb768a0549d2fa060380c8242b0aba03058a6f0553e4f5ce84ccd34c7cf301d75f3b847e5856b588a84b065e773170930940e9e40102d7d81dd3ec6631dbe1fb7ff1599429cb6b6cefac28d34f455e93ac25f18a95759a90cc01a81d42af763e8aefa24ca769bef3d149e764ca8caec9585db372872fc010e428a4f954b4784eca4b56eeb09ccacf79aa3e811a9de28a9530aef2b5701d53cfd2e432e7fc6241d2bcde294aca4a6741f2a2623b7bcea280b1c4d3e4ca5138c110e7b553cdc8c244b5aa8b85c00b3ee5405475995e32be695c4e671a0d3b5ae352d56571c97628a966a42cc98d19514c2615ab650c6f44421666f04391e6323c4f6bded079aa321818f1e0754aeb9903ced109fa22826fca920205040ceb16826197dd993a4ab76099a74941d94e9cd254054a2edaf0505ded2c78afce9dab1dc257ac98d569e25cedcc483ee5b55ceda49415d3922c66103f27f58ccd0992ce155886ed30b0ba753845011ddde0a722233374e35c17255524745da64041f38232e7e33ccbabe06396e697ce4731e11fb366680519aa5caad81fe575ecb5091bf6320b750524a9977c9113a132298b4c868c4ff03e829ff81eabf8be79dccad682e5261c51a80a7677afafaffbd70760a3b6f7e4c9935da871d4d50cffe33c0b389f028ecf0319c9a72a0092f2a625e04fe2f3cbcb171ca76f777329929b78d5247e9e53f61125cab2a8aad730fe8f5a8ff61e5cf68ffbd0133f946c227289b1fc014e60b00439bc338c7bb85307807a5526082db311b1d7441978fe5404ff5c4306bc21da4a1116507bbb4bd47657ef619b37069bd70437dc3034f6938152c0db9bd35177d4b5b6a757c6f6148de38e9b679eb177c8a9255067f37871af1345ec906fe7196cb9027ad8d90b3aeebed27b797078830ae9e160cc77cdaf5588a7e522b40769af54080a1a8493bb3bb78c5d79390ad4b378e58fa2028bd77db888dd98a78988e49093fabcb8624fe566d28dbd80f42b561b31beb851e505acb9b73c2443666d2cc7912afb403597e308d7bf92c08d23666f5d7dda8c8199e3df8fa3cb44d97e124145b86166bd5e67206e0e82729923eed343bb49afcec0c02a69696ae2799e6570761d9b8c01bc0520758025415e5040d9e38362d80ed8f4ddebb942268f8b8f78b5940f6949685a60d0aaf2a35125547f6848f481dad9f989d4714d596dd0e031ab92325dd445e9da46414a15e6c79e2fae1390618c662d6ba7f731b4c9982686b5826dc6a0f5310947657362c56a397100d29f4410198a7660550a033ed76e13b00858965cdc0c3a037fcaeaf58b5e8e3003aa6769e5adfc8ad9d7d9645bc38906f389b75a79f7d5ccf2e59c61bd495f07d4adb5db29abd76ee8a84bdf1c8946aa81c9cae712d8794992cb349f9a0590fe058c2fa4b1321ae578e0c2325633870fd76a65e8c56f62bc1b6e65babb739bc5004d19daf04f52cdd9215a51a60e6acdac401db1d6ade17152dc97ad773d618304673f046eaa20d592bea0da43e99b351875d167793720788bd80b4944d5095d87cf5c37eecbbe7389c79785c0d4a43d8d4de3a858d621cbc8dddb151f3d5b0925ae94f9a69e4ac65d9901519ab8e19a1c2601e95f5c9784efdce022523fcdd33a2599287865cddc67166ec21ab36f568a7cc98ef3a9582354630ed5970615158649b48ce56522ecc343f11ba031a1896d746ba31b505f446017a0e701747218347994325b351815f2f306ba81858e419d47a23f62639c046caf07aba9a9ab884196315de488eca218417acbd81535712e8618691d6fe2c1c998140722699207ab02674d824143017777e283e7139f384313b40a56c922160c094c30f3ae7bb58ce769ad3d23940cf48988c2fa2aa618b96428ab78dd824a821c9e421f8825cf0b5a404d921a75bd5ecfcc029d6642785e28e9538c80bcbadea43868b31d15753a4d286be0be8f0d0bf97b5a7577f7703ba401a61ee88ed1d79d28a27c54455f77a0eb8dbb735093ba9e2fe9467033e1ea617bc314070cc2e4ee2e3629461140cc679b896c14af92084d3e42615c8004c363a0262387eac9664c0b48e77e1ed45259620dc7a9391c7a6e74400e217db80a772c8fa6b9687f258fa63b51443ca4132e8859ad7db0eb023b833d89d68b325d2efc10374c2008e9cbabf46a8f41ac5be5da2741bc1d11cfbc5cae8a7d2e180a8972f7561e6a08d6bfe21c86936bf4039f2bfa0962a26f1ac6e60d7f55ea3f8c6d01170a8b058faef088fb160e18a5ed388b0621fb2e9187dd6c7bdb8b87e8db2619b2311c10824972340813ed4e24d9def658d43257be00112e194b7e08df52b5db0179d8b5e222e6f9acd7a3325e0cc3994ce69b30ced16e85978e65ec265e28cd118ad2c51610b305609730640209ce67bd5b0857bad4106b64ad354afe2767e9dd1d420a85fddd9d1b473cc653107c94cde26d23ae1f63eb4604b0b4f683aba64dbbe1c4410a129678d0263f283a7a7042ac0c0a7fd11063a01a7d4b23f16e9386e810e22a8a95994eb76e8dc5afd19e7db4d15fbbcb00929fbbf7f748ed3f9b390f3c3eec7cf7b94aa27825b0827d2570b2d5264903fb06e8c61a94975683ed457c7d75325c7a084a4cfca4a3d8b0b10e279edf2668196eb924f769613c89276ba21bb8926942f2cade0bb28fb538c90c7185d83cf2287820e51a34ac9712f4531547b7b37a9e059bf5323c79d4f5e7a49e6d86fb76f725a967f0e7e58b51d7afaea6ada0fb83c160b7ba9a8eba9609c41b53f3a2552e00a85423f795260d0d3896f76659c7754d05737f4718b2e63f6d0b2161bfc9e5b0fb8be02377f8267663ef813e8a8435c3a428593acd5f6bbbc7f8f0a14a02e912e66dec9fc5d1bab3830d3bed97674f178b5e0f7efaec234bdee51599b0174542b25351c8a1367b450303eff65e78777dbb4a54d695b70ac8cab5fd43c0cd18a5d37cf7f679278a5ec7fdea6a8a57260433e59f0ef1485fc5443188c7b76fe3e86d7c77d76efe261d857be1dbd8c83aea7e575d4dff0e2e0f6096bc9eb89ef6a0e46d8fbadfed22042c4cbc8afe242dab1a04859098014f8adf1074cd34743910c60d703e91738ae0661a680d8cc972aed71ae3c68e51165efb4880416444c4f67a0760db9317949da3250a7c0b39522e882b8bcb448624f3cee2a6b7ab301936944e632e319b1161321c757f66f125979bb7c9381a75af652886c497c5279932874f25efe0ad939fe2e896e4e91cce5e584e8377b13bea3e9531a00e56a1939c8eba9eafe0d1cc3c2df27b733d9750565e3829bb37df199eec7abef69aaf103c371ce9fb6610515cf93f8329d82fc214ec3d97217f89a307a8b50fc790568bf156679a2bab5157a86d7e8afb66bfe980df02a03aea7e30e8131df4ec96ada1a24bb07ac80819baf7f7523bf433d8614a93651e800dd84f6634117a238834afd4c55edbee2ff17a3d48fe25b60a8ee26132d6f2352ff3d7387acf07d0ec3b3ec65f34e3538b6a92466a2569231629560ff08484cb182486175e48be002312fc15c79f0e5d620509787772d87c51a78c3a2c4fca9b450d5f94ff055f05594128a394d4447cce594d54108f7d17645931301f813fe2b1f169c9aaca2949cd44451563976038c22ef10897c0db24780b86c25b82e87dd6b92ab2e55c66bb267086d8388333f9164b0c59c64f22822e654806663d35f30457143b652f8ed437b07412c5212d2033df69bb711f8f3ccfc9b4b737d8ff1a8f20641ecf273abfb4c396d6ef07a85822d3c324b02de12789a0c3bd03d4aa93a996bfe66c5ea49f1805692b94b682e08cce68876fdc775dcba5ef4573814c5d8cee5336031b3446db2df4a7122fe8c54ed351d0d2ddfbf65bcf0b2da701667f6bf48476f5368ea028c3c35cf31637162951e475a2732cb2929bcb24223e8de230d44a76d1e3ba54e6a1334d3c9a6236220266e2ddd28835f2e2ddd624a26152e4759a2fd90a4a5af15ec06d09cf8a5fe8c081970fc17012426f4d226d5acafb906f5843114fedf8389c44937e95c6599a4f57ad9dcb17568124474e525a12319f4613a452d935d3a8b3e7cf143e33c467867b55f0319a440cee30a846cd506f0789346261a21267d14c61c6876f8acd9dc9d69bc58f725dc104cad950c10430d85441b3039e80570ae80135821ded6253bb3118889e3ae8802931592fcaa0aa445f05901e07f0042e30248f140899443349af1dfb9294762c4342ec87afe4fcbebbfb5a7e5a4e08c4b6d613bf6224a3d8573b5e1c4dd0cef0c986340c1caa13cbae0aa50714cc7e7727bfa2e63d2ecdcb562ab7aab4af74832a6d65710114e43f24fe65e267893f4f386de549341cfb45223c6388dfdfc56f9944e2c2805fe9cf1af22c1310b79615a3c575eec0d772e1d4c5329925244f5886dfc0eef907ae1f64f93181e706699ce187300712794408ca14dfcb85434b32e505f15f2c8796c5c2498ab93498e1a94610812ed90d1474c96ec042977f2c170e1c78820d0ebe8b0f6fd8380281a458dc38c992af7455cd1cc4512c4fe2d6e99ce54b0734b78ed4e75aeb957fc5fb066c499d385b9602fd9ae157c6c815c30e2bae5829be788dd85e8894dfcbda9916b5ea23305d74b2a26a44ddb3625e1b1cfc2310ff3259b77748bcdb9bc44d7c70a0e785570f8218677249f31acb6d9c15c925a3aff380f875b178c1ae58c6f70b41ec83d5d7d94d55b3f96946a65590dc1decfb39f81304f12fa0c6eef86982fb85b55d3df4ae368be0dd3cea0682906dcfcbaaf735b81a86513758b4e551a3a3f3c8611a7583dfdbb218a3a733e9611c758332e9a338ebc67d91f09c7a76296b83adcb6a1bf5a06a2dd3d2603d4bb4117fe3e22ddf1eab8eeff065560ab2d1a7446dae7d537d191d256e6c465df230ba54698eed9d7146aac7f4d8a09735ff0e725ce53d94247a96b805101de4f0f57d10735c05f802c017ade0e6900af0df01fcf756707b385130a1ba8bc3124c005ce63f4bdc12cc025ce6a1cd8a2a4eae50bad4b6e195b60066f17e65145f6d2adeef0cf49d0df300d298f2a709dcbd2ca7acb6a546b107677cf8acbb26b05cc1a2eb83fc2ab404d12471133df0de2de9ab691ec5e1effd25e7ba71c62eca65fe735acfde946951a6f58d4bfa0bf169bae5cd7871eab863a55c8a1fa0386c2eea42aab5ab444d0488dfe6fa5fe4354973563ecf27059a3369a584ce6ccbc5df27c6ed69d0d62ac8a695c10fd09d064bf3d7c9deb7a6556bafc3240af595a94bde19a1dda36a6425119943fc3c916763803cef2fc9070cd6fc8fc445210f56fb70f05daece70e44dc73c190ec6617bdb6f0947d48c09f5b6e403ac2528f9fdf1be911d7368b53dc8933ed88bbbeaeca4487abdef392be03b34c1e755f605262e2071d148fc1d137f87c4df6562a957b8e78917565650f7e08f897472aed1934a709b9cfc797277071d3df08dc9207d192a07bf46daaba29c934cce13ff1f49c388eb05d0a5be4deb6a3df18f9c3d138fcbc8c6a87ab73f262e8ca84fb44f527476a8873ed9de96a7d379324cc621b51a07b6308dc6792b731c7e44966c75ff8fc877ad5eff1199abd5d9b1d5d7b1679c1bd6168634aa3972fe239043917aa00b804d7c0dfd20edf14c22f64e142bb3937abd5a139e790824360f9293f295b32a13a15bbbbb436d15bc58510a4f1a693e7d5749ed9bd8dd6f48551b19d41648e5ea21e92f08dfcc70c616180be82bc086168ebe242e9513bdde571da971504baf7480a10a789d98760e11f86d4afad267173ab3d9e4e970188f3d2f69f3fdf591b86df17eecf9499b47301b5ec5fbf6cb1e6f246fc6176b1e85a3e92694f42f70cc78053edfba8471e825d2fd9b1f47af1249867cd9131438f82eded909bdd7899b0ce3b1afae0dd151574ead381a84b13e148fb7b70df07819c79980364f7b54cf935e2f01ae6db7a8e9f11144aef6016a827aa0bbfad78e8cc119dfe29c681995f536f0665be380728cfd844ba27cb7bdb19eb148f4736703e32421315f41d3a28f962de176a88d9abc3f6aa022af911aab12b85f908f672933d4e75c329b908469ab08471c1cb53df524cffe0f7941f0ec939b78c1a88b35c3f91b3bc4cbace81d91061232818795202dad8ea5176c5849198de499b9f68f2d520ed7a302b80b2cd54d78447d789e04ef1259fcba03c0e85d22390787598df2dc359efbf26f1758ba40cc3402c51e6f222c8c2f45971afd0c56975c3834cb3b6c46b8bcd796d24186e120c86c15146484a3ce9ee76feac1f3c4434356a3f16633eec5b691ef702d6633bea86178069c01ca3223a2ce4061dc322880f3025d27ae75b9e954313a4f56be1911bc4b7cca24196f68672ba1fba33c464e87840ef419a3a9fcfaa4599b586df34f676d6de5a61193f4dac2abec78db13e56ae58527ba3dd12d5c6200de8378e2b7e5a5b4c52a1a8a42c5c51bbee0602ee4f095280246128caeb1f874cece6a325fb43d1040fa2af9eeee98d4ac9f17d7aeb7f2d7a62f949556e7e5b292c15538ca4ffaf8fcb175206f8889deade107c5b0ee6ef736bb122f66cdd22a8c8df7ffa8f1d220ee7f7376edc461ee323f31dfff3302113343d6c3814998184301664ad4a035c2cb11cda2e223fc09b645ea3097874f8cf3be9f13cbef0290020e535164d6b3682c6a24e21b6948fb24cbe0812d2c493f5823879f5d0327547599abd62f523ce9b8c44905550af7ea4de3a4fd6f9e78684a293bc5f5c2bdc1df5bf1eef59a188b57cfb413335c803508976d487fca20c068f4731212e95235fa05cfc2df2791a41e571f8a83ab512036969145c5e8792a2316155bd242be110014e8f9bf9aa52459ba880b52d2635293167a1f752d0834b738247d3b9f70356445ae569eff8559d555caae112dca6a9266121f42a32f120555b28cd48c9eeb296edb3ec4d43cd3ba6437470565e1a89bcc487904cec5004314d9459c3fc0cdc7de813aaddb3bf0bc804471b827d2304e09f3fbdf45e4ee0e8f000f4930101af88446b72755128cba27f0ccd6a8eb9f2d48c2625206a0bdf55fb0491d8cba4fcbb2b8e6dfa3aeff6e2123de2d465dff6d3a9d2990b778b9d23f2eae7319871e4cfd639605a3ee312806465dffe79403bc3e1b75fd972c5f06ca57190f8dbafed3c5a25a8b3c4bca22e3c5e0c78b021c35bc2c3ebd29d31cf6b13fb29b60d47d97a794e53578ac1f75573ea5d1edb7c1a8fb8c2497f252e19360d43d27f1a8ebefedf38a32464a1e38e0bd81aa3c7fef6b5e17df83f1c037029fb2c8789017f83483145ed61bb2840b93fb030e461695c06eff1bb37b0ff645c71e1c409e29b85ff50fbe1421d159075f01165c663fe038fc50801b8d836f1a6371f0ad3516074f9a03f1e5a0310c5ff2929fe7152b21f96b734cf6a0274ef7e093e377ba0f9f1cb9d303f8e4b94fbf84b738f6a0774ebf82788ed8e9d7f0c9513afd063e393aa7df4217733c4e9fc0e71e5432806fac106adc871af7a0ca2f7995af9673d1877b80b535e8fbfb1ce425e39378e5331add3ecd381992acfe91dd8cbabe18a960d44dea32c3380e1e8cba7356138c80b10d465dd8674394e16e7d6acccd35094c1d744f59fdb2a09cd4d068f1703dca255ee09288d121197b879d4e3c2463eb42ce8cea95714ac5e44c2d4672c9d6def6c237e0e4d3077408e1f1dd1dfca2af447b225827f42bc911e58994bc76c7b7fb2e898033f98265a82911a0ed587f5216f323c18f5ce27139539c7019c5dcdd41ec7261164d05a23ce7181dce99388209f0cacf8a046561146970043120c70a4338def82dc61503255b3022a42a5e9a14879a8313cca82f396beb8ad1d63fd039c160e58b866ccaf8980e51bdc1cbbb9ea5d6ab741bd018e516227fa8ae95e77fa0d1c0bfe47f320a8f14c0dfdc22bc0a5cc5fc22fa1e02efc5a86429cbeb5fcc8048599029fb457fbeffe3a3d8365ae8705a4abefcbb92436e2eb6add2ae0502375138250b9102fa49ebd20e49bf56d28605e8adfc7971059fbf3467e5a8ab928435a7aa5c250805fe071a7ea0bc4aec62c953327a288e88e6e0cbdb1c3e01ba33cae36010b87cd806fec0c0e7fd667cde6fc2e7bdc0e79286971a9ff7129ff983f8bcdf016ce6129b95e71734caa9222275988403055e29f013fd31085ae1f4bd2cd5b6289f72be40b237767c9a49a2e39f82b8ea6bbe1bc562b0b273b5c1e2fbbb744eca1b29a32d2ce428a909d8fd4de423819effbb3507d07aa032b76be766149ec9532b6e2349df330d5aa87de5f92535c44ef3a638661ae58f13942bbbd12cabc92fad9c0693946c2c2047ddeb1963d9b199b843fa4624e75f00fc7e73b1efed62df5bc5be6f2bd606698350f5fe2ae5f1ac26f0989d68794da3e1501eccfbea63806eca60bb8c1e25e4a7484177fdbefe92f145259d9ae19788d72619986ac9ae1266712312e143c42ed18f1afe629cb44e416711cb8f47160ed26445b88e325e17900068a6a29c9ca13039ca75aab0e914e9c2fa57e52e1622093e30561c88fbfa0be3c5ad7d5f7fc9f82b92a554a4c86f4c530b960fdf423a556962a9c3c43722a052970b99f44e63a70c80d04d977e3cc14c1739e7f2e10391060636e8684d7cc9f86525e397c6502f3282c3283e44ac693e84c918736413966158644259d82a832313c2c0581bb8a2cb2ff56caa8660d23d9ffcc278b487151eccc4a748111644bef18929862915244358b54a529534b2d220487546aa263a08da5467dadfa2033e8868b48b53ab225bbe3930e81db76d92e2c5264ea77f4c35c19f6040a70a231c91fc4284743a9a5f88e4d75746d9c6da28690b5fe130d30b314520f07a59375265e1986c962ec65e952fc2560da66d8f06316bb16c480c10b3a60a365838fef2734f8cdd742afcdfa9cf3d3daa0a37085998019b8634f985f1602a8ebc4d7ee5fb637ff86bec1b76e7483f3cfe0b2bdeb8e300a92431532555ed4b06afa66b42f237f86da509137513e45c4521a46dbd8e7420a2147d22a4306c47178fea5ba44963774c3542329daa346ac697a5f09729bf30bec586c787d83792f1c85884470783befad0b1686cafd298d08f5910d206df807aa9a334a49ee43c648f469be5988fd11b7016b6fd8adde2b74813f6fe403e56705ff13a99577f8b34bc0820bd1a8a6f91869703042b94df98a62f0c20c9a773f64e063944cc69b1b66fc888acea4e816f7eef8fc7fe9246b72bff0afe5ed308af3087d7f4bb9aca43dd6b2a6d256e6854d3e1351dfb9f6874438783b1ff143ef6c6fe33f8d81ffb47341a75f904d9769f7210db79e2f6532abc0eef799e7f4ca3db0de7d7c1ad383e0e8ea82f0f9e8323ba0d4a2e1c282e7ee987f882e1273a164714c29c24784657e1920e9fd271744cc32bca41a263a9e938a1d1ad7ed82f58522e089f580598022589aee890a88b2eca5501972aed6af757bef59663e3cd62ed840a0bc4170c4d33e7355b4f2d9a04c223464cddc4b35f8c52a0d47abc49082e0189526a5b5a0a93d186dd218948034e887cbcea7db41681ed6f5bed5a7c5486a64a64b4cc486d1c8da5cc8a5a2e5aad4f379ba85ac27040a29cae5bc2da46b030c782fb0d6571056f339d35a26c440c51574715380ea37cd140cb12740233d242cf58f5ac285911897eb70afe3546b02fc42f490212bd4f4c909847950d74e4321c90e88bc44e12cb6940a2aa4925b0b55003610e94906e0312fd9afc39635fdb34b5d9639684db88b4bbcdb24a7e84f9b29841856cb37e30ec641547c69193cbe421da5962bcad18af56fe298d0ccbb777152b9f6505b89152f66fa3fc7b0ba86147eaff40a313da6fb229ff398df606fe3f68341c9ba73c3f5aa73c960d501cd2e216dfa4bb257d3847ae8bb2c223b6c4346aa451120a9b540a465534a29bac4df5d59d90aafb6754ddf0096974d011c5e015a88d25adf0453cec6c618b1b7e85e6d65f4bf727eb6827d169e2524f3c189278964b0e0d6e5a01c2a52e99324cc6e2a0f765e236ec34e13950c3b45319c14c220b12de915f33fa9ca185e46534082fbf63ca0bc7a55c5cb38891e1e538cc7a3d378b32fb3160707a37f1993f050ba759f491b8333ff3bcd533e2ce3cf954e30bb034d1ce63d06ef32575639f8087266dcd47a51196586a7ea0e05c02887e205e9779458df7d3637fcfb2d3df0b68f47a03809c1c347ad384582587a44f28857649530537f629780bdb9464a2fe4aa19ec67777d35879317b437d16a57198c6bc17eaf2e67612bb140fb5bdd524cd4996dddcba691c31efeeee32764dabb4d7aad4efa97b4a7d0b714cb10ebdff49ad73f77fd0c659fb3fa8385f6716cd4424646bb411c5216b185f3163b646342411135eada25beb320959bf4c125b3749125f1714505f117a301cafa08fc0fcf147ea2711f13fc45eec26e2f95af48f75fb41f5e60c9d548a54d5a1f00a8b8fdda922ed99229ec6b1da28a28c668a98e62c8d386313dfdf3da7bd1eef5a610860594952c3a2f305f56cb3e05e6f67efbb6562bccfedc1050f637cfd3c910563d391ac7e90f68af2a22a3d842b398917348b3c74a14cba5ea0171cebf8bb3b5794e02b3202235e932055b5028d9760074291bfd9573b91e2989900f745d1399d6ecb2462c046e5ad5cb82d3a495c6697274d65426a3cb22c568009de9d6db99860d8ef422d87ecfe2b0966e10c7d81b9541a5a1bb32bb42ff069db4b2aad4ede1b7e1089dc7cc8abedf052bbf40710c6e090e801f7007e6cbb1625a0ca82f50b5237bcfa0717ebf572cfab3fa3602fb4e1e9b99f19b97c491687e2377849168661cf47e302cb192cf99c2e71f245f222122ffd8cd5fe1985ab329cdd5b6f64696793a6b97327e9cf48056f51adbb8a91921fac1a8642a633685cd36abf7e26b249452dcf25a284f69bc7249ccdbb324a8745ae46454d214f68bf03a0805e4f2e6f4dfc94e657f91116ba451916eac9c05eb3e039c4c49cd5bd1e2ea42b4493a8e5f69c1a4e35946ae8a858e675d019f831387d7f3e2753f67a5957ac1979c6f7c18db89fe1840ae23e9e66eca3f1f97d592c1722fcbaa49cd1aaa8a4c896735d33062bfe3911854cb0846bf9fd066e895e31193e9b95697e2943afd89498a9f8dc7367e04fcb943e2d1991df6fb144f17992532374b620b919044f20227c0418da212337469805881859c6a4c8eb9ff108af33f0b334674719992f64e0079524fcd2c3a76c44512e6604bba726f159fa09da799dd2e21a223f81b36ff82a8a39549766d96b5dd22887f7108c98aa2e1656b02c2ed9b1f4b36f47a1a77d1df75239d3d7716b6549c258f9ef68647883f147dd391e58800b181f9c4f8fa573dc4b7653b9e7b4dd85fb3bba1e8d1e3fb7d1e8eb69ed0ebc86fe86f4ab658c1eb9dd3d2f3ca7c3781c9dd32119af2c1fe03fa9d5d8f2ea04de93950770eb3928e1df33463fab0978ced6ee0e35dc009d309fd3a6cd399fa980c9213c10b91d7bfdba4ce7ae17c4dba3eee2e3a86b3d174aa5434182fe60f45da1fb3ca0c8e5181ff8924c62d4ddd9e16b038b7ea26ee2c77069c70b47dd495610b47497fed092aa3ac5482f14dead75f13ef30278649cad6001f98546b97b3b67f932add91c86ff9688e917930ab94729a63cff61f398c12c9a416c3a9fc24fbe5802715db29b29cbc52c81d93e673594b620250152c73781606e942401986ba8c236207c4f4de749e9c4fd85f7bc7050de31dcddc947f8363bf26bfa3538f8c617af4c1a72c9e6eca6af40e5fad12ef2eb0116d5697df47463d1bddea87b71816ec0d27c335cb3055fef09d70d122da02f5edafa1bbf22b159c2beec004bc4fd5577ba78b5d720400e2ecfbcd7dfaa8dfb69b5ae5624795e8817543ececd25d67c53c6d410c2bb2f495bd40ebc34b01ebd2cd3b6e84951ce49dd9692c3d35d4ac59756559a4f77e0c917fd22de5ef335ba81213a7fa1a6f613eb36d9ddddde5ee37a59d0f0a12a1c15a3938038fa004ed62563a0d120a4fabd4bbabdeddd246e3ca4639ff8e67d1dc2f0c14a6d6ecbc4e53978bcb6d55f9c144a0fe54720b761604cd3fa889eed1b83efd1948d8de50bf6ee8ef4e382deac1222ae9a2b3888364ce5015150e0c0b526cbb39aed1d6dfd563b65a66733282a24e24c01fa2f4cd0d347d3831a8dc87662fa4b935d9c4e5cf21d9775e9df9509e12dcf1724be5846e31db20a4944572440bc451d493f671feb337403e2dd26911521dfd35df1787dc5709544c2a52ce0dff083c998fd9269af171f1258b23a8380a0633883b83a7b418c91b18ec4328c2abd0095d624cd2b6d172e22f04d87a498737849a36f84838fc34ec7dd98e8c65e6fef6b2fe8ec59169f13e6ea9b8124428b733f8e62e6fe7fdcbd096fdb38b73ffc55e2622090ffb27eeca45ba4b2469beecbb4d3bd1307032dd462d9b2c776d2a4b1bffb0b1eee949cb633cfbdb878078346a628ee3c3c3ccbefe028b1adf7e33e276dcf9f2ce3995a4611bee46b4c4525ee223232d6dd6761c9aeac29fbe592e572f10114516f08083838a6de2702935b49fdf8b6d1917735e89473b1299825e2e42b56c575b09f3d343d550e047730a11fc46f1153df31675cb17899965ee29a4dbd94d3a59fb28857ab6ff365662563f1edf99a1fe326a08400d9875c5eb840e19b52320a90c1a4e20fffe14f13481a8daf911a9e7ae36b642a452d33e645216ed80e1011a1c931f4560e87be330150afa56dd02d5784b797f47520bf4e2486b9b36bbcce8bc8f70b7d3586dfcd5c84c130299d4b4d33180e667ce7fb5f3af4953ffe8f72ecccd0174c034cdc82ed1017acd8fa433563f3d3f5c83c2a60e2bf777d954e59bc54dfd93fe49766c69786928be6c61000d6218a4a33a0a8134886ac50a642fcbeed42ce5ea9130d5c15abf9e94a5156e3773c8862418bef3a84d1606d66f11a50c4524a69c9361bfeb7967f274c83ff2706af30b97143888c78968a054172fdfab6a3150eec13af6ecde8eb785df6977193cd67361ce9c16d1508771f13c00efeebaf258bd335386635f15439dafd36be767dcdc89995054499cfe2269bb2e54abeff66bd3f52722ff9b1cd413fb161e58e4fd989401dd7e85a16369c755ca8e32da1e9f13776b2d9a4fc530139dd4284eb51c513eb50d8a95edfa984ee1291bc613e35b4853c4245bb5493d24866338438a669e4b6af1b75ef488107f0f2369b98375d817bc49b8d76d817ba1df9383c30cffa5123e76939199372c05b0a67506095c536569915293d7239ed8303ce641b391973623f9ef1d6ea35f45d52d707f2ef434965ad493d622206f9432d107d283c076392d0078ca41ab69b64842f14194fa16af6beb3d17726c3817c6736374472ca144764e2aea74100e09b94b2e3f804a2af4702302fbd1143be8c0ea3ec1e2d78c6f44626b2e637b213605d23dd40cae40688c9f05e361ade504157c4d9f3885976c07ccb2afbd6c7bb5e3c61f4f8900c0fc8fe1d72b07f429e32fa1500988f0c3c998f734a9ec9d11439d5a9ff5a39a3a9842040cf9811e1daf9f8059537f8b9aaee033b5ffbf50441ef19232f4416d47bca369b672c08eedee3ff0e87f7e93386c94b46bb1c4e0ef63179c5e865c2f2f99201725af8630396f1b579f3d07c31be66ec59bc573b2d5b388b68e3bc29335463aeaaa1dc6c6bd2932db1be7bdc643fd9da23e723bfc1eedb5d6d16d25d1f9f6e071c9d6511e280b839ed17c2bf5fee81b2031b37bb7a01397ebe1f5702ebfd544f84ddd6af7745db7bedea89c8f0f35d9100b4bfda972d79cd686f6813bedf773198cafa48509b1bc31ea54f98965b24ca3108b7cd97247ddadf3f84734c39a9b62da2769b1549a58486206b87b0370a60cdd008bf5a1d11bfcd3b0a0265fbf11ae2c7e9cf5b181ca32ade3534fe9e563d7ec374947adff2eb601fc602dcb59ccb3f9f908122e92ff528596441c74a04c6751d137e757dc982e0359387aa373ce20c77746e4ccb9fde322d6cf2bb2198f6de53160472558c504cf9c9c84fcc078caa7314c689c438ecb679534643dd366ed6a0f450d297de2d9b0db041f249fabf40b022992108540619e1282de365100cef8927a5c5d76e963c51009d3a63de753aa82cdb8e06ef9aea172016ac65f8c8be701814d3216669d79c807a9139f68bafd8cf591df2ee3c653809af5c91caa44c288e5fb1be4f89a50825d9d945ffabc7ca16aff31b65dadafa4cd034f5e53657121ab806bc65235863006cd65161cb473108f6f70f41fc24e949c777d03d1ce523e44c4f2aa72708d05bb6d9e43ddaf5dd28a77efae3260b82b7fc3b06db0087e83ba319e7237f92017c0bd82898e4f411b34ccd72326e246a231be5b05e280b11a36f988553085d942f3126ef539463c2688e43c971a1983e67a33fc43886efc45f3c42097d6cd7f68af52dc647c1458a654a6302e66e389401871cad0f65a324948fc98885c78c2427db2df9c0e825889ac3de80c09128ffaeab193c0399855f3760ecc7d7849223ae40db319b37425b2aeeff428f21442efc19e242834e030438a0d36053f1e71cf421aa9ed325247f63ac0e7b03cb17fbe33f162f3992a551aff7811d0b09d049e80b8046bd4108321388d4c0c7042cfb7f963f506e002e5300a93fe20424a62f00fc0ab05e010c6c3104a78b3d2104b29c103c6ec04223611adb8b3eb696ce27d617df4a0b98480c0505c00928324a215c152060b9a104bec8d3e2ab2fd3fa13e6e661ec2082fc664d185c0d39b5fb9ef0a5d91658c7b93ecf4c4b6ccc6961c691e4fc3c87fb4292d37799911a72aad3ebbc8b6c3687f7ba2f298e1a2dcd11befcc277e817068c475a02f1467c0e95cfa5f6fdc872cc87418e88d5eb2cd75eb7929ec00dd876da0c82df18faca30ae7214d3cffc99c40450fd30a9120ce328c1bab5c9174bd09f8cc4c6d8ab728cbdb4603c57d3ae6d38c07d1ff1ee912f8c26bcd929f902e1827fd8471c2ace4d506c5e8a25c2367d6d2d4c252fb41cd0e54f7302a8b915c3614506701683b058f7f2dbb8a2a59ddd8a1fccebeb5a4ae27389409e3b07f72746feaa5640556160de9f2e16f3e59a656192ffa42341323a87e0caf22e9d5366512ab68b525983088dcd455020d5971c62268106500784c642c410e73a7ae64786c4aa4a725cd052c2f71734cf411c515296c3598dec46795197f31f455d661d114d6583820015b4c8a13785f8210ca1748c12860a614a5606418962c24882237789a19832370818e614de8458e5edb5a4cca26e08d4c9887943e4f9cdaf48754e2fe14a020e81e1a50f090864fab5ce003754ffd6dff6e013c6e9275b02bfc05bf0aaa2953be12f142c0ddeaf6af55b2b4b47e1dd5e817e0557b5fdad95e5972bd892694e66ee16ab7fb49188144be7d4190fb5a39d2a782229a83d8a7e3e9506313282604029452c38d817f8941e1a44ea603c6c36bd22087ab973bd1b378c667db1bbc10435e36c5ee62aaff188e9307815fbb6d930299815ba35491c609f00dd2a204e03407eb65aa41128f0e80967ec848b7b6350d073019b4d921ed00d30cd37225c112902279691a744be837a2d99be4aec1a4d6f22c40c95b4c980b2d4b4cefb661b44c28a5ea5c1e284b4999aa9f1b5ad09f9ebcf54e72ce392ce330215d9ab964cad14a888f04a64c2f85a14cb08d2c58885e70c1538622aa6b448497054d3d2e2906a2269542d38a3d9f5f135e963c493043ee6b889a3da9d2b887d6217345576b39929487a34f124fd91574c1c95b4886614a27a944130c3717839a56514d3595448257e42a7511249b8585c5cbf1e25f20d18b6478cbf611827d7af2b3ce2e24612e1294f9f6252dcb8a1d2931b4584630a38be2451e93c032c4d09ce0f7facc846526b1fc9022359c0766aad33f11cc55404340148384ef8a55ea3a065a7a2a40882c28a5022c1e64a1c95bc8e126f45a098e393681604335dd8ec670a2b4561331ccd78613351d88c0ea2d93d057617cdae5fc77fa4687a3c73c1736be1c432a3e3a634d0bc333e527fa4a814d92d685e61049e524aa79a864c73c1438383494e15bae9714db2139b7f6f72d7c2416ac5c1cb71b319fe87270cff93e0cd261608e87cf70b26799eef50594a53c46a35d24f619393454ee56f8395e85adb9966fd6d78adb9783441ed6133b7edaa62a1b7d12ae6b6e195ce90b800f729b58d27634c322741440a506e05e0cde4c88c7a43a97b1944994146ceae5fe72c526f910bacc584a4c7d909a7f5bc43c7fcc70949c45f6c4ab260ef79d39639fda1766438bcdfad1d21ab9c5e0a66ef276f96ef2567e8de2c45ea0f65cc264c8c8a5c232e98eed5b21d3de747974db2966bf954fe3d937fbfe59e48fa3c77e3f4ead33319257a64c243d73e270913cf22accad1b75c2d9675bed9ac73bee859cbfd96aef3c8ba9348bd43d5eca54150f0eca3945e8a788869dfcd465893d9898f9b6c1ba294a2d46d4c107809ee792f7a88f969f05e15853049e965dca4e57c0928ea69dffc20e2f18d30a5526fc44f02f3253fd1cf22557f60fd3261bbcff220f83b47673949b19065a2b39ca6c49509ac72d95f729a43401da28502ea4aa2fd83e83a27201a1080d9e08cee3278ab9fbd29b95c94bb0e32b30eb2d063ae482e2c4873da63185fc6e125a3e7e03b93d349dc57fb223271cb0651712f5704a0900400881cca8f8b138c2f414fa02cd118ed0db6bcf42de7199da5e5dfefdab272e58ca1ee638e4d116bd914ad73caf8064ad4eee9f40b3fcbe9694ed75d396c5d0bdf7803df15d8f6c2dee5d06dbcaf6567610b93f31c0103e39820590481777299cba375dcfcc8ed5d962d4b75ec13b6d151dcaf1a4edc853fedf4b4a81a707640e36bef449c02b6b4deedbdaf668b29b3531e6bb6d04e15f237e74be8879d62697ead648fe209a5fef79c1ea5d12aa6172c3a8de9777eb7a6e7acb3fdab8720f04197adb6868f33d2d9dc709693568bc3494e5a8d0e2f72d2ddeef03ddbe2487a2441a31fe4f4f8843ccce90d4b1bf694afdac1fd8739a0e0a958750ff2e387f909117fa475457ee386e372f95c90f387f9f5eb91cca80b884c51821d39cae9e596bca09732393ccab7e4a5f9d91b6ec9a39c1ee5a6658f9df34210a3be5cc9406422e12f2d57d0512efd4e6de3922a475910647dcf84e8b50c5df9b199c5ab9a89e0c41263d6be0cedfcf075eb33e9a67cb92539d09c7c8f9f34981de7273439ce4f44d87ebb7124fea56625bbf3b75b4399051a6d82b728956a6a651543696d43c1491a380d7bce9f80b0ef297a49621c3d452f882deb7d7ad5cb67b9e5f1f642ad8e1ea547b9ef7070fb2ec6d173f48224bca0e7e825499da29ee7ae2ba63de1b1b2b03af2168acd0c5b56defc00b407ce185765b4f5126137d00238b5f6900cbae0776370977c8e518205b8a904df27cc780402e0784a2eb7c40e8dff22b741024ccf12cefa273b97005b16ee12d86c8ef2e8514ef558bb43fa52259318475de19c5e5e31ca020cc09fb6438ca37484122a27e8518ec9ee1dd46a304d88583b44ac1da2da8b43b9a6f45290eef5f955d00caf9db77ecc23f2bbf35af834ea976fdc6fcbf9e934fb5ab16946deba75b2bf4fd96afd36ae9a35f9c379d5ccbf91774e0a5f4c62c8551bc1219bbc77723d9fcd5856c56ba63bf221ff214cc547278b17c3e993f3f2d5fc9b7ef3d9ad399b9a4abf00bdfeaab4bb3d4adfe6a3b7b91d8a604bfe94acfe6ff26f0cc1619382fe917336b7a0c3c737ef27c5e88fbc238401cf732329b6f615212b90b6cb7897230580f03e575cc3e1a160433e9894bb22e5a349b923523e9994db22e5b349b9a515f9befde13e78f9185d4ac1b7a3c7e01d1eaa82dee7a2e8c3bb2ae5834ab9a3523eaa94db2ae5934ab9a5523ee73fdba0bc50de34d034454c5e89d3d2d29f1446f7e7e47cad36b6a53c814ecafbf79ff908fd99d3e3f8844feceb1cbdcf4955601cfe996b7f7c59d497dc943129901db0eeb75c45f3f82d8fe402897ee7b46d5b156e28ab4a7ed98b0b6d0dfb678e2fe3c2046a11fa2f4115ffcca3bc40878776e83ee122639c816285e3915288b59ecdf7529aa2de00cbb854caea166fb738920b59ba44a4f852cc816e4b10f011f933577699d787181331329302933432400b7c0b6c85b7605dd003c3ce4cf57ca4ffa1436d1b341cdc39b8737378777f78032164fd8aaf27ff190ef07fd2cd005f1fe2ff979aa19e155afe22821da9201df3c50a5f262292458223613d65deb92e953136deebc7e9491020fe87c6c7e9896552ccb3378561d4609cc8bc90e179e5dfbf0b4f19bce473fa7741170595791d6bf5a283b5fb4bf276d173d41424edff25ab84e8392218879344ad50caebc21c9a4da14fbca7bca458a9b7750dbbcb39950db3ecf441b0a81aea0817251ff5f87c510999cd876ac6ee25b8339d26c4987ca7dd5f8232a2f35bacd57b3f2c04ef28c276e53151da1c7bb233d9fb7941e3484c9e94ddf27564a44a56c845f5243dd1c4f8422421e6d47f1f0497df0a8829e4e6f695e7e76675ff5d885a7a43a1e518f454eccf1dcec87aff087f89bf0b1a93849ad428a1977211843199272bb63c63d9c36a0d382d3c1596aa05dbb128ec00b5733feaf7c18033ab8b8226d1bc7006895eba23100e88ddeb30214b75a11550d132dee8828f3bf885d044bb7ab82b1636e545e1c9d7be17c656fe3289574c6047c7a25a69e30abb751abbbf45bba450d1cfd8950e1f3cce7396ae4d46fbb753a29fb123dd8eafbca31b7dfdec7448ae25f1cbee59dc373ffe4ff4d08e7f5cd8727d7fa1c444604dae9808511526641d17e1802ce28be93cce547c27c1ac4a4da05abbf0d43db247b2562588b70668e40ca3f38a2621b27fcba549dc3cce81fec823ef2d950ce507afbe570853c33f4ed9a98eeac4a98e82f701201a2717e54bbd3f933709611e80c5eef172124653e7b72a74a42de17ea670bf189e27f51b10fa053d2810c3cace4e981ba67e860c6b1c23b6d964d0a2a3026524d15f66d6406b2509b3270fc92fc851811849300e750adb3d4b8fbd59b2a721a56a9a463f1c9cf04901168aaa1f69bfbda94669bf630b7666e5ebad2b5dadbbee6facf3e3c9ced567cece04da69750ce07b5ad3b70bbee76961ec1448aeaf07808a27af084363df9df6e5c625dd1a39f0308ea7539483dd43188bcbc14118f7196ce40f3140d8a9e7e0c6cdc1e19dcded9b918487b3aa8876792ab62bb1a0a9361bcd0a4aa5ae23a3e01f88baf6437eeca810df7b993d28cf0adb78431c4f0995b36181f325162597ec634907a4a6894bca69ae26ac961cd88cd61e5b11cdeeb191ea86b036aa494ea79894f76680cc37e3bbe1798166a4eebb6415932995135993a9b09e5515f6157515ac8c1af90d3dd82775df9058aacd30406d650e8991ec8ccc66bfa27588ecdf7671357173628ca39a8a1ab733c963cf97480f96bb0ffc013b6a0fd89135607c8466b426d6f8f1b1e38377048377c4076fe7288d9b7f334eee1939f2fae38c9b97a8c7cf4def1a47ff4b673cad6e2736996c74a86e3e46a3a48be0080f0db7c79129d01a603ea291b5e6691e390b9d1651e75cd259f4a24025bfbcb85348cbc823c1d4b95cbdd4174d651ed455bc8686a176dfbda19034b7eb7be20c59d71861d2ddaf9de389a3570572f60d3f55aed848b01dcc37ee645bdffecca26a1c07d9573fb807aa656fd9980070ab4a174d130c4eb25bfc9cfa32d4c3214931bfe902a9cef056f9888b562a4f93d7057d1cf7df814bb3b8173c34114dc9ef05450dfbb617c77df0456b58b3c6fd25cb57e67efea6308a587ef039eb294a690aec83c5075847443a4a42216210a6e3ee5a4c239fa793039409bb3b7f398be8e97a77a44abafbbea097d5eaf5fc14c28eb623c98032c5952d3fa912b6c42396a218f39a40abc49abf792bdeb3b5b848b88a68a10fe9284681981688737faf0b7d784419fda300ec488623461ff267fea44e609a445a666a797773f6cf2c8f1447c024331cbde37f33ac1bfa8e2da671cafe871bbb8e0b3afcef35fac97c994af87ba7cd57b738152dce9c168f9b94b739253158cdf1362bfbb9b8a0fba69d8981868035a4db99c87666b29da9e313f1c1e1dd48a120c7946e43b98b7432517da10bd0db4adf9e3ad3510615845608db20b07ef4abd5dbd32513fb587d3aeafd2d54e39b0d7fe2fc65e86a663e16ae66a637248c4af567ae105c84ea2beaf297ccf5c0e5a39c9e1728c72162f4154af0e8511e6a8511c9dcc25624a71213546c673d15191e81b696e1f028c79100c24c504af2367dd0a70e0cb955884c19c9bfc20b3191946449df1791354d348992ae7545e37fad68bd227f87a235efbe217cb2e86bacba16ed402a15ce690d58064fa7ef58caaa3306125bbe5c76be14fb6257991f7f7fffe0c9e3bfae2cfa4779440db2f54214f7bee877102a9410994b20e73ac87e856ff3636f37065e312bc05886d4d661c4e0e8a2bf17ff68816b9301b5d0f38e856e32c132ce318ef2ee432c0f0204179d9ca48481a75f77b379091002f4115b566732f1c9723e1392f8ee59e3a5cb933927e91565ef9af45df56d36dd5f803fe1fb265eaccaf95ad89128414337c7c23ad70c9cd2e09d627f326ef447eddc80fc2bfbb7e35edcf5591074a522bcb3882b9a7bc54b240ce99922523b563d533324563df1160df9e545b36b66ad4e3faa32d97ef7c67553a0837c29e883e532bee8572bf8eb80445a2ac194ef2a8b7d8d5bd3677bd77718f44a54b7bfc02a4f00ba8967b0c785b743f0d25dc76da1f9215628f1a9a105db4eb3829b77482c73330a40a2b18da763e1432d59ee76c2de19f012fef4ff12f055ef580ef20eed5bce07247102d80b85522678e78452fa3b5c16650abddcea6b623cca207cf25e72cc4e42fe0f8db7fc88327531735008472f09a2658fa9179dfdee4d0994a9c7d9cb703880c1e98484fab3b03ce28c876b4f439f79933224e36bc762a2a591f8090c61cb2c5c413549d3693c52eb63ef5bb52ef76a76b1dabb1c5fbbee9a69f727f3aa41e36b646f7c0d5f1f5fdb8eaf858986d5b4dafd1b28000c5623525643b16278ec4ba0be5d8c50664b0052579292722e6ce745328d525f5811a596f0edae0dc9885490819e8bf768df15b30890fb33cedc66fd9584e2eac462cacc4d3306bee975bc50c52411d6abbb6617029e568074108022143f01bd832498249cd3702bb3dc6b2d67e0b844daf317bea603ce5d894f1d8f71ebfb1ca90ba3fc268b9c51e037bf6ed42b03624f33d9daec5e3a428935c6e3669fa438cc223b715f35c3d27e17885f2bb48cc5aa11a417d6c7166b664c1d9c3811aa8ccdc67849a96f6852f25b487fc65948f0ac176f684c9228a14c8e4664d23baaab5bd509a295f499f0e782780c4026f996d4c304a50bd6085611273854d36f9299b664514685ecf962c108e028e82f85558eea41e4951265ad9667a6e5d31d0375530dd46693ec0a2920e0ccec14373318c2f2de8314005885d44b34d390fd781a2c70c1e3931fcec94c5f0073af6f77da8b80d9b593fc1f2e8323cbf8b1133e71076aa2b318058ab66a4cea35c571bcb18a3007a4d65324fddf7e13afa5b2e269acb4152985f7b096249de9584b2926a9594bf0261149b239a950173cd3e5c234ee6a3b3f0fbf14c254b2f9185be00030fee633c96639fd96c75c37d0dd857ff550633182ce893be68e3949bbe724c5aeadac8487117405a628953e5f5dd36109572cb5d1eee9e0ad04a5a0d8df94d2e7f1482e6031317aed0bbd8e2138a273de3c9802a76e46390729de6c3ec69e2f8de9a5d93a4260fba794af740efe335b1fb46390b3ee41d607460c31ee0bb68696096511c49780910661d68e91cef448677aa4b3dd231d8ba061482b5df9799b86f057d59c3973c05b91f973c088f822acc57bad397bf64b354df5d7725e32312f9981cda0deb0ccd427666a12dfc1c2d88a20460a5292daa00f4f2554adf8b3a40539a7051d9007461bdfa3741904e7f7b4dfe3f9f5ebf872294ef4fbe723f4802ec952c8f2c30774a97911405ea517889125298fcf4f486d47c6596893846510a0257da0c29df1ab47b3d427fdc23ee9135e188e0a9aa30529c8b9a5b099d24538d3cccc229ad145b4a40ff8489e534a4b0f542a8592c8d46ad1524afebdae2ee91162aa03c48c08e2ad58422b88d58aa5d58a2599d1a5e647a6e070baa499e88457cd03fa0c2d0923e77e550ff89d4f2feb07f6702cfbe2fea17af00056d579087f31e10d7cd06ae003ab810fc88c0f7ccc8bea8a4ea1083202fc11bb27da062f368b4a2ca88f312af16eedc7d4bfeadd1a601c95742a2e16258ec68d9e93b29579888d567946a7ddeb962c6809ac3dc2d612ee2dfad9bc617cb4ad0c3fbd94bfcba5bc10e812ee6afe7ec56a366bf9fb8eb5fcbdb596bf5b93f43d9ad1ef6a2d8b3efcc42aded1db05ac66d307b5ca1672412f5aebc5d956644617bb16f4ce1ad5c2eeaed5aced71b3b86a752fe4ea5e98d5fd53adfdf5d52d1f2c9d46467222c3cad5f407d2c720c8cd91a1e73ee7ad8e6ad00de7de0182256cc20f0ae6b33cc5f254cb3b4e35400b1015097b81ccb60da872544b46608aab1cdda194d600e76bb537acbd3b8a78872f5314935a0d2d8ef865a526d68723bf53a14c20a57307a949eedc41629a19efcbe98a4145e3a6561b4818b0f20f85125fb6606b578d32ce31fa0d500c644972b162acfb534c331ca292c24002df0b7948dec1f7969894a6fd701d28ed920cd82018dcab835f8642a8e5841819019f884c4e44cd27e2a68aea19043b4371c24c38296e66f71e05b9bdab150c6ce6ce604672f71655fe786eb2d6cc80c64e97bccd38d79f9bd1f34ab4076beb33885a7a9c77b388da25371752c19c18c5d46d358c23e47695c8aef2996cad01d12592f1bb96d5683f2329248cd99702e59a1ffbae49037ff531b65ead63f36e1a04c033e757c511c983a057abdd1d3b4665d2e24b9c85b194e4117328ee93b89f55abc53406a7d3cd26ee37f057823d3780be6c890c45a785c3425ed2df0ad41b605288a7212665492fb7a42a8d0740596ec9c4fb5dbbbf2daf8752a283c59cf36a1de2776e620b5ece1202ce4a21167b8eea5239ad4d4a128ba7aa2465c91f15968046cc57572ae5a823066c380c0158c7e00c68349d04c667b58853f6f1ddf3f08f4484a004b9a4173e35a57785f58385af1e2624a1a95386e4c75321fae6b34012fa8710636e9ff2b6ab3e248e5b63530af74991e1297497ffad4b27db1cb24d4b54974a7f856570c569892a2f3115354b896f9448adbe1e4c020d49498cad2a1650c544172531b964d3886c9ad037bc36133f707cb9fe2e55c003e9cb6809352f55c84b216cd19010aee2cff176407c3c3326c35b66c4d8a5a402f192d209b37ed4cc081134ccd0f0906a58244befacaa0555597fc9ce583c05af7311f2a047a92d570c6edfec28ba71f0fdf1a57c50a4238912f52ee2b4bb6a4e41df9158b0345a800c8d540ca723a292c56d365a046241da0985b9ceb4d565e846a8b8cf969cb8fb7eb82c1d0375eda910c6044ec53051a648abd237457a54ad16f13a2dd992fc7e95991284923d957198df48f010f9f39bfcfb56fc39973f2ff827dfe58f07fcc7c392f686e448263d2da91572e30fa41cb9b48e637fe8841778566a1549d3029f31011f0651aa3dcb8220bd17db01abab1c49d018408cd90117639c974bd774785dd23c3a2d6912c9bef7288d479e5e5022329b0d295b7b568e5e94e1cb324ac0604b08431e96f8329bef8991795a5ea743f2a3a2f9007f2bf9c8bea57226acca5e9644972f9ce71e963892631ef131df5ab95f95514c4fdb368adfcab625e3054f73cccb2193516a3e282576578fd2379afd7d03178a882fa0e89cb7f95b49cf4afa86cad514f17512c97512f17502ee5a2d2de4608779f7eb12e14bb74bbf52178cbc3b3e06979d172d5c1a2f3be6c1f8bbc04fd0389b37b6838ae5ac2417c3dbd137debe387c4bdf0ac34d2d897e6be1aa978e9be67989dfd2f3922f00f1117943cf4a6bc1bc1989d1164b50e091eadd72e61fe807433ea6bc88a8b3936fdc4561f5f78d65152ebafda60f7fed9e8b4cd200d51a81b7d41e8338d4fde733258c7df548d821aa4b371452a7e67894a01887cefaf8a334ca613e9e1046041aeb38b8f8433304cbce69bc5abf639c98b2ec1dcb4e53305a82e8d84f4ba5e14c8189e3c4d23a058f7434f3a352cafef85b7d90317c7954aa9b728ab5b98c7baa66f3bd9cc628270c82d2cd1b4c181596beae6b2cc3d13c4739f10ac09b8df4e38bbc3760d96c2648bb82805aceb27ff647417d2ca6e138071034f9c3ab82bfca64b132ba8a5d65e478172886a318217335905a6221d9211915ae763834766da3cc5af066f4c74da6000f2502724d3332e55b3d9bef764f58972334dd6cd094f606a4a405207d93d9fd8b3208d0454967e445812e4a7c859b42cecb8d0bb654cb85937199249de3504e6a359d382a686dacdc9d39ad83a0068978c4dba49af32fe7b974ccdb59f7ecee9a50b3d24f9cd006d616e33473875d8c808a8d116e37d26e530cb820b043e9256f9ca0a1aa66e3b8e76dccf06d495a7d0921c061acdb4ddf97fda46a327171382d0da046abb3f18921c41f4a4bf0f44789deba6cfec7d23620bc5cc745181311203d4c48c656ebe5fc224c49c616ab30eb380ebe9723f4bd14ddb5fd01c9f7d2367d8825a9c4214aa8f34abb6b8cbabf0811dcbcf89991c82422dfa57e253b6e799f4a5f3f0773fda0dcd03862de847e2c41d52a43b2696b74e1ca17da102a9f5bc5722a1d65b4f591a49132589bd9ec6fc48705f50eac28a7455f0ebe6ddf1004cf4a9411f0005e617cf9b144039292dc04ccdf6eafec55ee60c07c710e263e4cb786b7c9f0709fb8180f5fdd7c9fbd7cb63150691903759e7396620961c20f3d1b5f415c8bf1d635bd327728ef6bcd3ac54e210eff6a4788e54c8985035f89c6f2c5e00dd7716c663e9181394e3a6c5592ca760284e94f68eb4b6d83b6ebe299d936e6cff85465c743cde2ef65c78393286d37d16e923509ef4b3bea3fdabf75ff69e9c3061d0c86da36cec71ba0949e963a745c160419a46060faf9f912b79cced7a5ef4c2ce499d0a03025f6b9225e59c78ac7682a8270c48f2ecede0a6325cefe488624c16676527c540afb24a280ec05666daa050182e9c0897a5264444818c5ce050f81dcf11060f48f02310242b4bcd563e67738ff67bdd5ec05f01a86af2b702e9a2991d5054b20d808d5b33208c60d92f94a1c497ffe7c2b4a13f2fb1dce30b29a4c4456cfbc0c18bca1932e2e52cb3f31565829b597539c42539aa19aa438ca5db6225309d2a92c12f8ae5352ab052f0152667cb34ac093ed3be112a2e401af4a7ab964b1b28f0fcf0b72bad2b04be11ff04bbe831ff26c82e7e7b305e37d3d632288a3487d155fcc4fd776bed76c36174f6a32e58f5c3c880985c7472c392d003541e551a20cf93a67cb25cbac1c1f96712302c5847f6cc98babfb13577687c44bd9d22f6567977c979e941a2197f1c11981fd541aafd1717c224d39cc6970931cdc267fda6c07df6424c5dbd678b9de385e11704ae80175b30acaf9fb2eca0984be45fbc68d47fdec39f27b2e889c5383e83a4a7098449957b6ed25c6ebcffe09431777f073c94ff373599b9f53ebae6d360c1d8b8d7834de6a6183d733314ca231ef4a6fd5fe56bacb7659b6d76dd7cc01074d329a1e0f4e08a3e9f1f024fa62693df1a58d56c6ced7f62b39f986e69ac78eb500a149901596c4ca3d6ed2ed166f09ac0b6cec0cbd9dd61ebe7725e81f529af00e6434e11d90f31057a6b109becc00d7e9df76275661d7787732a83c419d7dd23d4a4f30494fb65bf2f26a2a91eca6125fff87a8c4e77f4f253eff349568f357e3e6bfc86175d39a2b28cd1f656b5bea5ebd693195d6eefbf0dfda7d1f3a76dfd7fffdddf70ff7de872bf65ef28ff6deb8f91fdc7d694525f9177f59e5047ccc9dbb4051a15b42a90fff0cf8c2b2ed1cc6d71e3d7ef5f8c3e347e36b51aa10b0ed24db07d198bcbafe02da67dc868440f10ed48794c49eaf42ecf82ab86fed1b4559b9b12c2d5df1add046578b123aecd9c8ea22a88815e447bf6d0726522bcd35094d7887acc120bd010e7b4361f570db18fe8eafa9f057acc900b5121cd20e9ce6c82ac8cf943d3cd001433b2288dac08295543eb34afbf25422acb752398207831c457c99d02543a913941d32249b8dc9b413956538d8bfb5d98fc4ea4b2b2d7edfe6154a2b4e772131ab782d0a9a00b485428bf88382c5b2e68b3db6aece934aa9590da89b85cf76ab2366b71dca3bc2d66750b4357eb51abf981f3695516c0172bafa2d9a00ad1b1019b42151cbaeca916ec26633be56b23813c13583607c2d996717ea576fce84a5b7ad8cc558dc19b32a4a222c373249c4003ad3048d88945e596e84b8e54c1adb8a30a34ed6c2de5e4b4b34bc83711487975eb47e1980e59762ea57760cfd4bb10e62b71bcac6c604d6e7d7491604fc6f2dff4ed866a302ed5b5f6f25fd9340725945d36a045518e320bb329b5f709594d30a41fb2461154b1ad4fdb3ca57e9bef9d6b025f9563824f79d852e21b4de4a43138f0a7ec80b130992e1301706fe9009522c8b88cab6204fc167919fc25ab3b164797456a084301c65d452ade652176a3642ef9b71ea70548eaec7a6ade7a7376e0def10ff8a7e0fa0bc5aaacc012673d15c866d17a60d1d466234407faa9b00fdb5c77c51b98a61237188953032d57baa5b86570441efef0a1558f1889482b8d220806a1bc4141c4ae325b3b2a62e90a86e2a6045dc22c22b841664295a5ac89646b1e57f24ce61e912222ca8000360c9d47cc5c624c21d0c1a6f0b854dcefbc8eee5809956b824010c6b64e389618b4769f8774e52c44806a1e296e0dd09556a66524e50de9a2070882bc0a0efa7db6a4dddd29b3af79c8c21fa8647d8daad94f09843c2eee578a49b1aae2acb5dc9b2b6aedc682a96372fb59139532d2f8c6585e07be20ec0fe5d53f0aa6ac7607b8552d7633ecae9e31cc150aafd97fe5fdf7fe9d5fbefb4f2dc5578a7d500f406d10bce3608ca0a916d54bf6deb1c4d67b1e938b2a4b854ee8b5682d5dc7d4c3e164835847cb69e33de0edbe0c8260e56eda4f48d9aa242c22c9432545ba1100fc854baea5d05a830d5cb693a9ad2f3024d0117acb52cc8542c8ba91461cf68ba1392801ced40aa9bed022b287681154447bbe00a8a9f80c11837bbbeddf9d1668320d4d46653f331c141f0894f13a720531c09e83bc0686d69dff9c80bd7ff0bc8f18c265d3013cf046240429e918c147cee6bbf281cc9265c70ce60b3d180fe9bcd4531da7142cc04c0045f51339275954a50492f8acde683c855928c5c909acfe808fde23077a342748faec284d835f35d0577a5ee4482b8ba89cd15af11de5d66172a43e2a232e0f0c79ddafd35f13632cd7c3d3dad3151bb3b236a75d544ef703a25192dff653332da1b621538f24a52a31b9328b37cc7d7795486b3427998967c05ee2445e4bf448ac89564081dd1f10edb9f5fa744f85f11a2ff2a19224086da3b9c5c50b3483cf24376929f1625c3c4aafae21f929f8e52d1cc273f35b9f847e447211afed4b06ad49be6e748902abc331965d0e45fa244a6c0dd6f65b93f478e2c4047772bffe292f64bd8bf75dba7699da3aa9bb0d994703776a84410d44e22ccfe667365637b3f6eec3faf8b77ab456cc74d9bdc5e7491db0b8fdccefeff3a42700ee8c08295c3f03ba104bc2b91bcae48a57a9749bd082a14043d7d4f6041f052608ef4869abbcf31a08c1800b15965428dc908e7c5ae4ddf790c80a447da034901036a5d210c3f5f8c90ba043aa20be0e4011fc27a098925c9310ec525a414b74f5fb329e0e1ac0e0f5a57153db4dfaa1d01a2948055ea994622e49697da4a104e0b32fa55a81f83407eae0e673eefc22bc7753e53789de715bdf4046a64c9d6cb0b11fcc0f10db9a85c1db09414309a38426292d3d7fa3c87d3ac8c50d9b97a309833c29b3c80b0de8d0e37ab65f13ed656394205ed0dbc4be7ed5b423266025c74ed0d0398ddcfa59a6fb3e98904ad0b8979ae0f65b57aa2b3a07c4387387a8e5e933c1892c4be40f269d5c6bcbad820a82a19e6b6c09785f526629495488a5c06d2ef9f19998594352231bcc1be90a6c60682d1e9d348b9acc0bfa1fc459892785838b85a2ec208202d4a9168ca9bc3b90f09d461d423e3268998f6c64d5b3be0bc8ad4be6106f227a34cfb24b63eb1959dea5b235acc480a2e853be6de44c103b45ad50131c4cc1ee2546025b9da0ba135da3dcee041fd4ba30c814ea4ef10cc52aabaa4ad9823ac1d79525270264eb63ae34dcc007ac233168a2cffa3540f7f16758788195c352da9511fa62ee133732420977d8b90ae894ab7b12deafbc575dd5e922066516b12ff1f5af8eeb24f9df354f5e357a6c1da1d3fb321c444b953641fd3dfa514b125644bba646c89f229ec0eaa907615e227f2424e0b3d5b8e39eb038f6910cc82afc2517678be2713bdac560fe3b4fe162fb31584d7e14779d514c61a28ccc83aaea6610a7fccb8870348783dcf58c8ec502ff9364445df2a9726a4e8eb9285f8ae10467d9c1be4a5f0ddd977cba70399c46ba04c7e2115bab933230f5b47a3437818600f6a074592839f7335553a06672f66e6f88c942363c6774346b360b8d977058fb76f3aee3d625bc137b177d6c6a1d84ecaa1d1ec8f4b5701d74d7d8300965d6a825a815fa6f8c47fa58b907e95b1eb5719478690d87e95102a1f4b6d9ae35919777a56c6dab332369e95a6002b6056ec7b556af5a94511b65940875b7ec867f288f7e8d10e3209bd96ca7c6645935ec2e21b5f0b533de8bc4fccc1e649231cd3d46c4dd2e262c0275704a2c1a047b108980edf32424c55426ce51d8044eb4f48eac005e2e8418512d21b1206d6ec36bc22f6a259abbd04dd6964406dab5776a5aa6f2c8238869de8825eff8cca9129e415aa89b04b8e298b188db7a2e90349bdaf6efd7a5eb075c996e36ba1eab1312691be095d9f2b43852eaabdddad9598575e308718eee34ea03137389b321e4f7c5fa481b0b67a5120014f9674c68f73e0cddc41961f58bbd187e439c0b6d647fb421b4ad1cd4df9070db6b80ec10be9d3549303bd89ad5d672fe99fab88a45d0c52d79c18283fb87eb9d0bba01a7f5691e7157951919755346e9e55d4b50b33eec41ed94c0521ba452558ee66735b3de2b81f2f780fc04c0459b6478640de5420bb46e5a7c63d7569255ff06907ad4c0da9732865da4929534d29539b522a1312fd7e9bfa8432ed5b9914a1dc46cfad91c297fc9ef8c21d3b5717e9892ef87acb05c85b4b0f167980088201f43122c6d7aa6671ba1e5f0b73fa2041851031c053c6bf393e7129c07c21c40a614e9febeccf776617f1f2213b04cdc8c925601f8582586cf9d732ca92ffa25d9881f10d73fa52d7feb25dbba237dd8290bc3f6f8ea615bf5c768b0333930115fd7993f2671a33bcfd9a09547810b5905a8608818553ee55cd5e0e1ef159bf8c576fbe357c8ed8727d814a1c047957a258b4f97179822504ccc59449049812f8f69a175b401652e0c22fa4e6275abad9a0945e6e31498feb132ae03bf816195fcbe2a660cbf9e96a7af19ead9f370d5b3efbf0fa150c47c9fbaf582693b23a5d2c966cb5021149b37e9c55709fff1c2f1b05d9ece47b06528f6adeb472c4a7ebf993797aba5249a88adba3308a371bc4270f8728a6f166737c8245acdd525c28b019df4ca1ab65c7e549a4ae99f9880f4f681cd93a2700ee913af2cf5489460aec0f3df81415826889e1c7bd8e81df6ca64130ed4aef9e105ddc14777c1504c5717dd2a3747a5c9f38733a6ea0109e2e9550fc9d1e344ee6c560a598f335d31fcd3cefe1084de97434edfff557b99e4de5c8f17bf5a8f0d2e4680501bfa44f85c7a93345803f34c538b4d712d45150ca87b90bec7bca97473b88e9143ad5597ef8df5b98ddab10e99efe9621d0cec59b8dec8218e98ef539c5789bb606452f26e0e5691c21d7ea83e12038aa5082b7dbe8659bdce3cb54702b228f2d3b7cd5367915f72a4dcecb2acbf80c846085c82f47e6ecb5794a1b5ddbc6904ea907a5dd98588870c10359b1cb2eb8643a9d4fa7f162c5326071bd46643ed3ae8f6dbb1199cfa2372a7265a283408a829d568967a76961e632360ed2456547377790a65e21091a14044f7214636dd7a9191f2d6c086e0e0e6f8fec6b224d74904212db48b40721c01c454fa148b7388db503974c1f0aff16c651770dda07209286cff237c0181153b7b61bde7b8a5e9398cfb15520f9956e0c0fbda2ccab9bea4de3573f506f205ab578e3da2f0b141e0b2da4726078047b1093d5fc7499b23021ab759cd6e19718f69110c3bfa97698d57c6671fd9ead47f26ff89ead8dbde65bcf9a4cd440a4a625adad60ac46de8332fa05a0822d19d0e7585a0262001982165b52ba21d536c89f63b5c0c0e43f9d37abf994f5194c7882a5ab21c3972bb6e6bcfafcd4712b10cb83455b6c8dd71fb21bbc40895bedf38b2a4e8d2f94205ea09d8fcd4c187f98a0f0ef2a194cca38f43aaa1837a04682aff0b586064a97ea56f9024dcff595b6f6ec07970026d6ae1d68b833f1f756f8b142fb644012e7163b0ce1fa67843afbb76e9b50dec676d9b358ec30a6b699ed44201277291d910f772fec3f46a9650b9262e060fdd04b5dc5d1646bf5e62094db5e3a1ec85d287a7a2774d961efc67a9bdf581d8af8b1322e5769474c5ce976e5a12ab87100a5cf13159e045136d7306202db31c60a9720d36002fa498111184d50103084b7d6f78990e1647d810741ccb70c6181c068417f64d028a7939f742777d08a2a083e83d2e92716d94dbdd862cf98cd911e807f82872e01cbcd048286d1ca0b7478e75e3a3abc13a6c4f3238a69a6c056c0b6de0031189f387d0f1464456fe0123658414abcd586f3728462b83f6ef1d6d923ef610052678d770f57da493a82e08f0a40ffecad774b166b25dd0cbfa8e97026e9ab435c8ce04b0b2861e1c5b6b0ac2bd69a87b025931c01924c73ad5223d7074926f9d1375d018bdf0a2bb1d14e7e5f81a533c814958583728b6a5f9103f378533d3a6162841c26b421063dff178934f827afd078fc68170b8394e7538501a70a891d9b28ea08f12c3cac3288736c93a3847a2af2080c779d29bf32cf2e6205e075960e2918de0e02f42141328e0e491d45f6f00e8ee23001617d4ae328b2e299fe8478e7cf4a0bdeb07240d583f753721e51b1a9e7961155dd368fc3bbea399231a5ac83092b41d55e62a3812b3996581b6252ac9ce28ae849bf88967e41a029af1e41efadd34c7674ab96171323288450b740cfaf8575f0089228457df211338585cc86e76d56ebb849990893c56feaf83237a62b5141d3e82ea0f66adfb8dc021ce5dfb3a53c0e51490a1ce6ed34c543382f0aad57c946a8a409b90b68f8ba1a94d3d2aa89e4fee72586f87925c91db1648131296929c331be9bcfd7476a652b2a5f5a5ecb06c1245782a5cd06e5b69009878957c3d616778e1be6083c9912783277ca59c4d43b47e0c976806eb2ce1dc1f48e606dd04da8416e04e66f04f506326981a745c334e1bf3497c38430da1b929c149168468fe14ba1f6135a26d8cf91db445f120f142ca7ac4dc09843c00a4dbcf674d4f9dc87978e0a4d9a54ae9b3fc8b5b58785f6065b29e0cecc9ec9a48b5ea8ba5ed25842aaa56446eb28e29be353854a3223538d133f13f3190437e1072f63e6cefa8ccc542eadd09c01c0767bc6679d333ed3333e33335e6b65e04c67d8cefc29576f20939af2826fb77193f3ee59a6d3def6b3f75e7fc966f33326567f8dc3d24be09bde4eb18ab5b68a1965cbdf5eed959cee4418175399b9c39a015fe96d265d1770941967e2fd7a7ea6184e05772821b2ce19caf40c651d4a88ccec160b501d31b061cffc29d3796de4727b97c6939fbe70ddb42f5e37c9ddd6c5cb6105f56d5b6f523d4fb6699c730b635d48aef02acce042062e82ca41d2e6c693361f6896458e2fd3e3337642b348eb43a88c0ab98cb36a0e3f45001c45773380bd0e822311ea2efa3313c1a1130a4f19963aea41c4eee50a32975da7fbfa903c6627a4e47fae0f4f225bfe5c8c3e672825250eaf96e216a3f789cae7885e8bd107f9e28cff2d484912bc5582ae96e6e7b1ecc22e65cb6bfe7edcf839b46e87f38a7f7d5bf2334ba027f5bfc5abd7a7d375b5983272c53bdaeb65fd99ca18d34c06c610231c8f5ef08add3ca437c461d2a3cea75aa89f29274ec0a6e8f8decd008ef55d99d4e3e8f824e4cc25af156fb7f615e976d8edfbe69f45fb58c710163ec8f38c41e52d2fb5161b6d5bb74ad352d07fcb677e50be4a916f91eaeeb97d7bd30d0fc254aa9169db108cf3f221e29c38498d0dc484a605bf576bfe13ae99ca08268d8cfe5648507327f8743682301fb0b677d8dee7fd155b2b41fcc8f985c6d7249cfff81a195f6be60d83876ab6982fd73180f987b982fca72a07f069762b982fce910d62d49633287e2a0898af1eb0da81474c55284cab64ef742b3e654eb31936daeadb7a94e2ce15918df8620b7d25af36143a3002c45dc6454da7c5aee5eccfcf3e6546a40e97dc3628cacdc9f4936648e3e62a43a4f4df1a22a5ffdc10299d78e286e161d84ebb63ef91fd81f36bf85322347d5aa6135b6cd12d0e028bc3d669a4c43a66d3abcb1e28656c4090867ddb7b5371b2d28ae693a893339b58c847e07c90f2450d610651da8fb30c259824fd75c91a94910ce3ad8c83c12657c8d05fc78b91fc1bbe8e17b66a2a9f18d9e1c3021963d0755cd08328ed2fe28be93ccee8a594865a4883999696a710fe2a89d3dab68b28269b0d2a2680223ca1198ea4c87e6b0c426de493ab5ba2046e10ce77974bc46e9c010dab6a9aac7a66b5583650db0d23a6c28cb4e658c44ada451c6d8799a3789d966056da3548ddc60e99f106984c469309ac9ef76c8d8ed765b53ac1e16402ab81ffc24436dbc416110a10feb2dd122447805cea57ef41276344c5707a6eada052a9d4d4d413fa3a5e97fd945553329d5c114661d67a294037ded3016926f42e994fe8f036594ce8c13ef97b42076439a143b29ad07db29ed003723aa137c9d984de221fe87bf25198ad7e127f3ed301f942ff9e906f13196c614287833b07776e0eefee1f900be7d77799e701afe4e1849fbf097f3c9ad05b8301f92a0d62e14529f34ee4df4790fa58fe7a32a18703f254fe7ac60b792e7fbc98d8511cde161abb0b7d08d07cb2594c30ee51fa7ea41b36bc81f811fd9fe16033c0213fcc5e4c462f26e10babf14e1e07cd5d47454fa4238ab1d70cf63578841905b97db20259969d81090a7278087a5af341a81ff7f907e843309f400fd4179f1dfd414ca71056b3bf166aafd7abcd60b3b9f5f880ecdf1a60c7463453716e0ec3d89a279bb61fde0d6581c35b03321c0c1cca7f7847dc580e6fab5cba1e3bd7ad30a6fb574a270ff66ff3734076e26310f083ef7310dcb8117762e1be33d1c96f0dee3d9b48aed15908fa8c11ca5ffa525cc46cbd8212ebc2649801007c34f42168c4380781b574285f3aaff82915a23f518cc9070a59269cc90b794a843e043721df6673785728360f0f059886a2244f27a3a71305818b8e0162ed048728a54f2780851b63820cb4ca6693de4f70103c9d00262e501857dc2f3bf7bf6c8aaf4e02698defde0b85c2d798733387700b280c37e8f9654a33ab4159a789690228fc5dae0f0976fab0ebe36ef715c7954a7166a2f9520ac26c9187b40d36b282ade17ed1472afebe28388ff085527a3a0982d713c4c8678cc9effc2131a0e6cc9ec8370e03040a13de50968115aed4049ac8cea037054dcb5ba14951d97a6fc58a7073f2f2de564d218b539aac97cdfc5b230b78c5ce98f104b91f8f92d0d97a7f4a54af8101a8330dc4b13e59bdf1b58e0193e7edb29a2fabf5053d3cb45281472b0bf4ca61c1e4354005cee0c344f802b6bf8a343e966567e0152c4adbd5cc4167eb0656dd19804afbd422a38787e150c401df5729b7f86d7038f87fc83a46127cc34b81a07183fb341b1d1e86fbb7c4d3ddf0967abc131edec26d1531a3ed9602cef7aeae81fa8cddd7e1f4a3b447e9973c087ecf518ab73bbf1b3749d431285994506f103ae62c2c0a94913fdc547229cfa6b03d38fc94dde2c89bb464eb50bb3f24b583b31e10f9345e20207ebf13efc99fda5246228d4e24cc9bd4f5261debc763137c40b7fd3b1847ef2700ce0b2755ca4faacde6c344789e9879faa4ae121fa20f1b3a9f4462d63e421bb2f9de7a7971f98917244889d6337fe62595586a9787385af2f5f68166d174a2cd3aa0a99cb22cd5d997d06f13225b415ecbbf30008945d93ea9c0800ce84653ad4a967d9e2f6b3e12a26ccb05c464f1d6444a32fa45b1828a8df87b22b881e5c43fdd6ff21318dead26214ccefebd74b41fbadaedf52494ed06b74a4e5ade036c6726c9d5b849c5a18276902dfa658298f0227096e6f90404b8c9e4fad1045618190eee310c74ece1c4d8867be45152937cb3c9eff3e5e267a069a4a65dcce1367797581e0412300b7a2953b320105615ed0233e573a2b83701e84b170c7df5f61053957e851aad713cfdd138fefc283e1403e7b79380a7f266c3f8b0fcc4b83077585810b05f1a9671a306c64c6b8fd28bc9a8455f2f26828684de02186574d0418ecf27f806e7591948e948eabf4ff10d4632ca6e6464701f0200d101a7d768b83fb89f8d86fb83f0e65dfe74f3ee201c0ee091ff09878722c3e1fe203c787c703f1b1d3c3e086f1e402aff130e0f6f0ffe5f3d41d97ff813c6373292decba4f1a65cc3f74058f4c3b590ed5c0b6793d0d90c3db1192489fa3ec197393d9f486085ef9328a3453f395d5dbcae9a47a762c3f30b440447110c2193391eb1697cc1df911cc6ee06f2862ec73750d1ba85603e7af93dca4683905dcf6ee4564fd5aaf57b3c6eaeeab3d3e95dd78b437ebdf853ae41ef70b1f829efa0da3af10d6d33e22bb9b404a0049251622d4251ef0e72ca5b207aa1548ebf7a0a25d62994749c42a9730a65ee29f4a77f0a31790ab1f62994daa750d63a85527d0a25f21452c770ea34cab3cf05e3941f1f48d1ce114c227118456218798d3b272fae9d20764f27ca3cece9249222055e512bd037bfe4bf9ba0944005296753f8adcf925e26b583e2cd477c088664ea0e0bb64b1294fa034dedcba32d04f58b09e88d7d5e5833f9f9d26c9b4f7d39740658db69758ee8405f119dcd18dd186abedadda53786e46f8652ecae3e61c5f3c9b3ad4a236de7a84c0b32c77e5c1938828c11ee6b4706da6b1599cb96ad8078922357c706f6e219d88b679e21dda2f4926ecabcaebae7297aed69f686875d8983705da00cdb964d1f691c7d0247428d42026425c1d1679a445fe8df93484acda28b09750467911495450f38870ba2327b423fcb09cde660ac0c5bf37589ec2bec276de7afc65ed1b82f7409e23a817511c5a1b2882499ce4b18fd4472883bfb39620eeec0e0e6dd8839c67dac65d767698683604730fa5df2da75c91aade2251295457ba207434c6a63c709554d2928766a130d7846eb9d210366784ab5358851eb8c7a83b03734d7bc23ab08a1459a1ab8f9230d3631ea0dc31e6fe2d115b82dbcec52e4dc6e21f6fea5c077acbb341c94d20b91e199923547e3e61908990b1c39dfd06742c774a1de2a8962ad7dc52f6bdf4ddf31f3db3fbc0b88dc436588866ddb254d79311340be77cc087da70f0b8bb3904a82ef906f3f7a542046bee32df3c546be9c712fdeea106a4c5ab2ad639af61755531cc569a91539eb7884dc37303e6c42723550641d8384ac00d02494d3355895a3c20a2d950701eafe40a048819f2167802f73185526e45c4b9ad516739002b25d540805d0922cf1d619e89b83c3db911fd1d1b21fad69ad08851b6311473915e722fa1c23269c1c369b7133bef6600fa4f87ba9158bfdfaf8dade4a71f77b50d49e4698207bc9e97aaf99efa9e5baf7f1f9deb778b5b75ab0b4ca2b96f5c7e3663c6e1e64d95ebc77efbd8c92a0f3d37ebf7fdfd4b7575645c9967b55b3b72ed9de7ac9d8de7abeb758cecfaa8cedc57bd379ccaf117b55935569bc9e2ff7e6cbbdc5344e59399f666cc9734bd56e7f7cedfa97988ff3f64b8fd2337ed3f8425713deffdf2b0418c072a7cb13a2b64e8883b0a079f453230ef052349fa09a149cf83e2e504dceb16b923684f278d6079c905c2c1859d0dab5ad911bcb41b308821d5aae073b3563da8071b18b082eba9456e3c6a8a1369bde6402cb7481b1bfc5af1a8735addc71581bd0f82b96e4f6136535faa48ce1cff06542cf8ca25ab08e8a53b4a2504eb4e5bd611a6dfef155694785007cf757656805e27b2ee5fcf13d7e6bd9bf1707013a9fd0185b16e1f1bd0bfdee624263f27d426d13f11705987adf7fc057d803feb1653ece5b684ba13f45f813cda1afc6dfa19529087a6f72844d5e5b8d5b9bab4151dbf8cd24269f71cbbeddb581d7b6254180123ee831c6d16ce2b8f374469d86ac979f68ac8ec6847eb21967c382a995fcc9b6601edcbc8bc11e5edbb9d34ff2aaf03952ea5aa7a11df66caeadcc6de79774b0718c0386e12be9bf23dc049336f39600f3966000f9b0b4071e0c5d1020a62114fd97c44f909823da1a5cb34a0afb2008ea0a25cac9347aee3b5d00fb98e028a3d312d5164680b29c5348fb460c2d9e6c43a717154a494272c24826a024f29e4173f721d68d110c53dcd1b8f1100aaa1cd5c25b81699370db8837a5cc18f8d59479c681539a45e5f1293ba12c2ac19caf8ef4d19cd1b203fa205fc63336be162a7003c9e8a9df6c968017eb1334bec68f86f1b596991c3f38e6e68bf814ac05c13aaaa483a8bc97a6caf8afbc7e1d3f41697a5c9eb48a112e87b22af002eca8ab9a15a6a66a161756d3a75553b73fbfa2e1f97c39931f2cd98aadcd07abd36456ad3b3ec9d83aaea62bf9d57a5e14e0e3dc6aa6342b7c98a08cd4a2ccaa398ba7956cc76f199a92f1b5797354c60defc42ec3c2cc351da4e3e6d2b21e0c7bbd5a5bea6d7fbd1acbc2f195682af1cb20ed320404448da3d2403fe49ca3a871ed9b8de5020baf3ece4f8867a2998f8c5bbc85433bcafabc59d2c35d021694f4d8fe9a14273834def34e040cff73709eef2a43bc38c161db173ed7b81405f8c24f396fb91b37e422812b2a8c204077ee1a6491f177b92aba67dc4719d90de761ba5d5b701e0dca1cbc8e9c9611736e1c79a48d88737569529ef67037e0a7c79433679c8c50b0663066ea5998f5e7df1ab67c344f4f679c1d2828a56f927eb99e4d61b2df26680a51c875329fe974592dc40d723a42352da5f3e263610905068367e36b98d4fd4a99f8d2f1b57be2bbfbe3f1f941fa1ff5e31a2981d3b14ce2ed704a8094d05a5975bf5a8dca56c5537259ad42fe728b43d4f11e13333b5400404c6949ccc61b4df523ed0dc2babfaabe339e0b1ea8f88d310e5b85fffe1e1564cab9e432aa816ea7510d749b45cf2a5413c097ea0d1dfb595ac3e4a494c9180b1939a27ff2459aea353afd37047edcd4fc604c7f9acc677410651699cf1499cf4e4857519da4be2be32f92fbda21f75d057690fcda23f95d9fed20fb9d4d36a4bf16fa9b07f2c9a5ac3550e7d955d45993008017aa3d4f528b64d4de21e11d11a9754448aca1b48535f4cbad73cf8e9a8c9b544211fd626f1569cb68ca4f96293fb84ac5b414742a2369d4e419cd0c0cce335ce5e8591bc4044bc9c6b3e3d2752928479f337441beffc8a5a01ca1eff4fbe87b2708ccf720789f40291d602f5d44e7fb08d943c58fb3cd869f3c3d4abfe320f890a836b50fb3eff2351c54dfff9bf02f3f8d4ba47b0db3572a60e4ef4170c65b5692efe4086bbf8a69d7c958e368dc3c85552128d9eeb3b186b3b1bdd0f54690be31c2e63208eafe8aad1facd7cb2a395d3334be06e9ea683f4d90cc89777257b48e328b785b5b25aa553df2ce588f5ef073dbcec34ffb21d6adb2fd2a82a09d3b6d795e5c81d5d50dc5553b473b62b4612067d1683aea52bdeb0eb2f5c2075de5b771db1d3770f7e8bc07bd14f7a0d4775532ca30070069dcc89e1963fd1f35a3754df3ee4d706902e04ae2783d92ac7547cac5fd8820265d6c61360001400e22881d13c228fa11eb83e571fe819d83db1e629830283f27f689cd5c688161d85651c80b724be6dd09767ee9833b2ab303f0bc54aa9508e254a98bf148eb593caf1b0b681c863144ad78bd2457856684e9bb76b6d94056c79342fbfff1d54a135bcd4004c8698fd27a849c373423991d10b5c6a197c186d4f473832c806476fc5529096641d0cb2588adc15eb5bcc883a0d735225701b8b7b419f80ba5f46f21fc5c4fcc9a17c99b0dffbb9ee02ff47402189c0f8cf6fe6310a0d713f4917c069bc28fe4c104036c39db6c723746db4d7b2b3aee1a77c39dde4e37a500a625fe10da2e37edd029e766e8fa875c25e7910ab55d4b580ef6b861cabfb33b00440d3ec352f06d7d5863f0ac7f55210627881ee09e186023a28162536fb308fd6507e8664dffe6b7394bca53c3ce72742dbad6dcd3f518f598076d96132f4487712f376b18bef2f135389b6f2d733b7fc424f393fb3dc9239cd19ca494d95b20a0fbed4d42b2569524f3557fe0a4ec620853d8b1dd26bb8316ea3c4d150cb5286fdc641d8020c40fef2f137daf20f057f4b04a3889ea6c4cdd95da6ea02f5ad7ed95df13bfc1b50f85e487e0f2c8a5db0d67dd9094d64e8fba3a08f49a3f84976e4b43df869b886baf8c2c9ff6ed9f64a9c296afc2b46f7e6c31018f44e97df61cbd26163ddbec83d3b25e6636e287f68e565bb007689f29df48b576fd4ec136c3d904e3e6f64d92d3de80642eaa927d5cb8db28f3b711115b718089de4ffc56c6b95985f8a7135f73521ff46a4bfd09de1dbb7697d145c8b8c2eeae14564a0255a440f83ef3f0dd8360782ff3d92dd563454148ebd0ee4460a6d90d4ee36cd0f911aa35849f8fcc5dc3792d3aa307736420ffea50e7242217adedc818a22bf872a0c7ceee16f293c050ecfaadc180f364e26564516d9a4522d1f2db1f378e79813d09910b4d18310bb09ed17cc4f8720c59308445cac4c2344bf21ffb2cdeba4d84d603607ec0ba88d14f4a89fe79b3191a54117776f0654e0791107a30971067114ea94f6b809a7611a5f4bed062a798d4f2b1c6c48220d8111d22dfda6e94da35a03188fdd443ec07cd901510c73e03c008c83e133ed9bff48efee49e5caa3237755774fb71e315eaa048d9456332bc67ebb43a6b1aedaae7931735ff93571196d2cd84beaed027f2d9812a37b169ed237470f30e49dc20233be3f24baf04cfd0066f13fac98e2fd39eba4f3476b5b59f7064b19467136cab588d52f38b63c1e881bd6b676477f9f85e21066ccc2a0c7ca9f2021d1e92aaf67c68ddb6d81ea7b53268da03ab46a7478f27f8670df395c99a6de706d083dd466e169be822d7ffa2a59c8441d7865efe2df40e44816ffba144bbfd50ba5c2e0e796ab7c9f6402a69bf4c508aa3b64b10655176afcb187c24f33a895d1977b90ad1410825b74b312bde2d68dcc021a5db630cbd351db06cbf07564ecbc8d6900c93c6f34a7b58f4897ed41eaa381adeb3f8fa91e2346cba80d21d8421258ca60e090a194d432fd1da9c1a6b1eec3f179396fa7ecae8ab4c9a5ce74c58ed150c15c21f410998aa79f37e1d2fd7e36b00a02db4b9972b9e14167d370f614d66273e6eb2add017c7e1654951490b4ff41004a5962755ecdb66f3ad6ab2f937a9192e018a5395c6f3dabf458b6b7161aafbcbb829d8d1fcb459e3cb92d6fdb849cbf91214ce026a5c25bdc9f315e3f7f819adfbf93c3d5d41a65afd12efc1c2d5001b91997e94d6278f125e4f63e3c90983bd01b9a03786e419ffe73b1d90754c0764490b722e736bec2b051af580ff580a54b18180e73ee851bad4556e36e8821e5d9fe288e79a895c7547ae67f4e87a8da3036aa707013aba2e7f839c48aa386c3b4df4802e1ded93603dcee9325ad2075b0bad6b49292d249443129d5310bc5ebffe5d6a952ee81186d4194f5df37d5007016f987d5441757c75bf17878aaa6f49cf799d1688d496575fd21b9ca7b9d86ce0ef3379ad10abf00296dd33c9da8a29d9967c2c6586016418e80c324ccd8cd14b9870963d9eb2595810bd70dff1b51496dbe81500237ee5644bd8a84f6a8dc5f928b1212fbefa07c1c100e3e85d85be9247098ebed2afd66e768fcaafd8ae810f754163529a40215fa599f2827eb590a617809cf821415f2d51a180a8af72b40886fb77c5676bfab533e4cc5abc3ea36b40fd95a9673b6dc9ce466702ed373c732809de2ad9f922180e0eee6a339cdf2ac4fbe6187a1eb8d2d8ee2cf104594d265f3db1cffecdd0fd6238d8bfe565b9db95c52b77dc7cf56cafafacf86e38a55fc9970a15644a4a4cbe56688ab7deccfe0f2c8e333a63d15ad0e8053deb5b8b362ae959df5db67c82d7c2ac8fffef12dc20600c7969fd4c3e487d2e59601da8a70c8282a105e7bcd7b4ecc37e2267b4ecb32633a6ac7cc99cd1b5d1313b87c6628416de4141d764e11c130244625635e88c2c84c64211291ca2338ad6d46bf56693994364dd75889033eff84067f4cc3b41c8b899d2856d6c21ab25856992eaf71493d2185fc3188c8ad0cac607658a49efaccfced7acc982a0b85f4a4d7b490b52d02926539a31b420052633f15462320d825910207e613bb30eb2cde6cc3ac6f8c10034dc248ba30a5ecce191bfd2471a9896ab0faca30dd2457e31b16ba90180f5833059f7576c0d1385448d44958fc999b45878309d42f615c2a4b85f8ed0593fce32510264134380440b88ae1087088a7fdcf18e3865c07fd19a1e9f88a8037411f10934474384f96170669d736b11b74123d39c9129cbd7e1597f952ee7d3e92b96afc97abed0091fe68b2d8e76454e5f8841e39b081e90c0825bd041b4b8a7164ab4b87e1d9fd1f5f1e284775a546cd547cffabc0dad771fe67c2bafe78bed4c32e1fcace94d19e7cb14532e896cea9f0f0b9af967c3a3d2391caa1c3d2a8383dbd2bf25758e8035fd1af1e194547bfd23f0f5e16d72b04fd61e0a207097195dbbd6c96b8beadeb4b414598af3ac1da51f592eed654dd71ec4fa5a40ac679e562e9c1548bc22fe2b1c79d548f0f6b2b6b30a09e7b8c9b39f816ac7c0d93d2ee9ba4b78feb80c8297055a93c725c93372e6598ff24f9ff89f9a43f849892f0bdf5d652d0d40f50409ed940b7aaa523d30086348decab085663e294941ce1c659e40713caf9dc9d413c7f79535a941d03035fa6b6ff083e0bcd69bc539e85de0e82b90edcc9259fbf16e619d5774ddc9cd3caa4486c7157d54ed74bb792c733da9e8b8795c599e376a3a9f5441f02a454f2a0f287078a8d1f895b0ee57a0c5c486049e6cadd1f1f9a067f4ab1774e15c42533dade8d736f6ed576719ace9d3caf739a54fab6d37453bcf46e7195ae3f03cd3c465bdfd5f6061be4aafc81c9c3773c189db048e0fcf046b74a5983c99d0c4a0b37ca5cc2278895319f9da52117da53b104906c2a67ddc2009e8d442d0e01796e793d1b3c9f5eb2152403e310ef9e30ee4fcba0e82bab603db0190a8f4f22d944faa00948a6939d1a852b11428352e92128cd5a4403b6466fc0ee23802a83320768e0011f534d8bf751b07c187ca676c858835b835dcc79bcda3c966831e01305b51a0c33b76cc029084d90dc1ade9b682894c8453eb21affd8976693dbc73efc9647478277c328900344b1598172826d3da75149d5a9eb114046f22776f1889e21e4f2209c1f51312b9832156717f942844805e1acf5e5b82a204a59188c0224579da8ac156ccf2b1c31d98fadd87e8fe5d322029261f2b3420b76f42a404b1d332073b71d7468b093876c6d6c047b1bff4a398a6db0f34b1974f6f60e667561b9cb0dfc1e205470995987f662be0e8917079518055f62b234a06ff661b0fabd27858067009aa84b2f47656f2d1b637aefc528ee6ac46a9f854023828044d9345baefba4cc8ae08175742056e36bb4c97bab0fb9ab613548631be8cf9b02624e623578197b63face0b89df2614dbb8635e5c36aa03c2c4f5e7ba4b3da8db01c7b7e8a12c8a29fb1295b3394e0e8a34042fe0c6a590106a5cc3a82a0055302500ac9e4ded164046edb9f71f8909387f0ad004700bfa0361e87503f26f720b25d0b8e6337908b72e5de25da261d9270e1d08f2d0fa96c623bac77e0330220971992840ed4898024644f42ff2820da782322161abc366fd583dcb48ec64d517b81df0ce835eb94f21bc4b79633138033381c550f004e5e6a89fe374035579aebec5e8a2fbf01fe7d871fd441f80d4c66a615f2dc86e6605003fa6db027ba1904d29d9ef5851ada5225fd8cba57c40f8e763955bdf08d6d6e86b31225b67999877eecd9f9ac0ac8ed1a3809b3c8a8937d6c07c8c797197562e4b775300afee5be51c35ca8e0069e85c1b8190ad2a9631bdb47a480dd501a330190ea5928f8a0ea8761d63db6f70577d419c31cd6806aaa0eba1e791afc6ddba0a9312871cc8f04cf4c243eafd712d2a397d98c8a82b7d003b1850529a5ad6271b656d1a0db6f2f533e6b8eb6d20de943927682adafc40020ef6c2b461fe728212f2c07b942043562f47929f48209c9484c586bf886e23cb1b0037ccb4f318edd67871a5c051001f609bffd26dee2cb4478b36bd08457fc0c916a9bde20826d23c63117c3d8b636021dff4a80461b100a91a2c2b788e85e42d393759d7f6298babb5004c11b3e5a1929f8c1a5bc7096f47de13874b088f5ddabf4932a614b9a449fc5e70288899e5566c07b03925bc1e2f8600cc83bf51ec2a9191b1ead6b567e9d7c595be282fff2a2f914232640816040ffe23d3d5d49e60cbaba3a9daea371c3a8f925962f58ad8aee34352f25a6b302313e7c72d9e79a534ce8aa321d8e3db3f16198d0d3abdef30ccd55196e86095d58197843c4dd3dc610ebe26ac4a2c16d22950a38daba33a02341aa5d4bfcf38c78330488b22c9c1528230c9395a01899d875b2bfffb2ccd37699ea18ccba03bbf1025a713af7719719a8d97123a6da104a6dd233b1c8bdc6c2b0a7a26e17c95d7e1ec9a8210cf3539ad8e7893ae41d976315340067155d32b4f300b5757924adc0129c559ca880ebae30272df8192cec1361abe978f56984ad7b0eb5ef3c370e36c3c1fe4d27aa2b6cdf7772e0534c04c3a136aeb76c746453604294195c1c04159f25b27be2f3dd4143a00f85b2655ab286cc19ac87918c1edb683b5778010e9d2e99bf8dc95adc5ec84ea668845a07d9b8d9c51025caca530c4ce110334c122518f39007d438341d115f0d3322992899fe035e0ac6b4b52c01e6404d79eeac84d09a4b457d15b9f997fbb369efcf3baa4c51ab579cdf84bb57e536f3df6af9fe3ffc6e10c6e1a5ea6dff2fe9dc0f64df3b308a5624909c32e97d03fc6b6e6bc0e5d5b5a485cc92d3798e4a92e3d120dc0559dfff2b8da7e9e9345e33e180963dacd6abd18e7428cdc27ec39b81c69204d6b1d0fda6d4da3c41d033178e4b9b24698c0e7d932fb52da7d118a252057330d7a6528aa86a5a3a96c2aedd7a414b39f84a4a30a5b5630eacca9b0a59c154a32d00e70e4cf2b43f4f566c79260621c831be1c82be4e04509a5ab104c854c00491478508021e953ee6740afd69edfa1447535ab661ab21947c47117e224d71745ae891e283eb1b74c3772d00152d1998d2a908ff2926a3a0c381eae5a8146c880e510b34500eadfaebac451d7ea334429a8296aa5732ba470108819776b0f02d5fc06dcbc0125fea45a0ca8e7881e2a34227f2efb75bb12799bd0d779e1f3a6835532428f749504673539464f509a3e79c07cb8d5f8cbd4cc06a1531ecf28543d24109c78de2acda0d0136cf6d0d96c9320b260bb19d18c905ffa56484b2b465250914e4f77b663eb8f3af49f1bf609789bcb9107e6319a198f606046e2b388c696fa807fda3e08a8093ff6c3d7b9780d8744b4fafbecefa814d6dbb676128564b13bb4a2c4c4b4c36af254cf8f8da6993b1bc6a586653d4bffe7af7f8c1d187bf1e3dfef4e1cd9b57efff7afaeacdc307affe7af6e6cdcbbffe72c5ce09bd3ab790a754ab47d58a2faf6cb3e925fdd5e962315fae57701752e50d2223594efa55c3af9628c6516d8b925400f07973349fcdaa3594f06e3e5f834c513af4debe290ca59520db150f1818cded36fa5cfda870152d3c25b1f3a991526fb540d91ae3851445920c5f428011be3262116ba4661734158fca465ec42001ae031e25951079f46d5214c4172d3cd9ab18e61852ab2663e77410c97272eb9513d03711698e870aa4b8d76948b2bd379c3c56186091ce9b998967c32acbc65826d5f0db36b886045f6c6f46c5632445f9bef40452dd2d6ac4a0456526447197ec9b3d4ff6f4fd2d4210d3b8bf58ced77310bfc86946bd78b3e9c5fd6a25c2b62831b825726dcc06ebe25854845151cb68180e9c38d7b11db09d37418946221974ea8d2e60385469ef4cda4d7536ec3bc0aaa52b06760f69907ff3cb4f85403f411212f3754a629852883f6cadb6d8fe45840a41061d2296d6c18953965a5313139bb8a63844a9b738ed80c77440d29636336d3bbca5bed13e8ebae349741bd0b78268b44cef6569261a580b2ecc65753dd38a56947dc75fca0ba9955037947794763a9325ddce64fe958c8c1bc79d2cd9e94e96d8ee6491bece5a31cd52496262f13702742cd05be59d11abd2526d317ebc2b80acfd28130ac45d7b043607a0ce0c0dbe561710438c0b7a4b59547b71209fc79a1f29557011ceff703e2391a7ebef7158d0bb11dbd03bb690e8854e768280bfd425c67cb70cf749caf996cd5d4c9c5d415ff245bed64fdedaca8904377ceb957720cac3ff1f7b6fdfd7c6ad340c7f15d1ebfcf03a2c069236edb1eb722584b49c93b7026d4f0f70405ecbf6167bd7dd5d036ee0033d9fe3f962cf4f337a19696563923457affbb9f347f0ea5da3d16866349ad195df71afdd77cb5afbd16bedefb635dac68f0bdad0fa2e5fbbab214d2893063451dcc2085e49b09d663b5e58e1d732f9ef6eda5b99b6e345293e84c42fddc423487cdae9bba6e51e0ff4645bc9f07c97b7f5908d9eae27013254f0e8b83c20d73aca7e5d2b3fb02efdac43bf913d4c00d05fc73ceec3cd704d34b13192ac2bea91be1483ca4fd5cdda7df5e94de7c8de580fd3e84bc3b71a14dfb53fdb27678a9af79af5f9258ec2fabda3256973576b126b5f7dba6518763a99222ca1d1366fb90977419f88bf9bbb5ac31e298ec4798fa182b39131682eca3a9aa5bc8d1e19a9bdf06590936bdf12e1783cf7d90e03a55d159ac169bf85584a8730553c5efd6591934c5f105936893c9c3189e4d6d8b04bf5273fa6b8fbb0c7725c8bd2e98b2487977de7dd20d75b814769f558166addb7d525f377e811b44b36d2eb7b9b8e1784c950c1b30233c2fbb8fe77bddb5b08d0d50c3d98ea757a2b3f71eaadfec48982ed8d9a5befbbbacd951d3b857a8f3e92abc1588131ea7dd74d3ec5cbb0de77a10a66621ebc36769ab19c49b0b525f14a7ad416e1d05bee50082d1b53ad0e6087821444c4d28603fa4e7680860bc3eeeb61ab548e933b83ee8fc368108b78d8ec707079d37c9f7493d0055da7d7865b86244a9a181d0eb4de2061fbef07b79525d5a89b1087c823c7e66084ef0488265adc541dfd5e48ddf2c05d276aa99acdf76e15cf20f7b5e2235f8b6228fa7bc407bf6ef4ee4e361072193c6a76fc29ecc803b26e4274d94d8cb7d457d1655382eb601025f1653c227acfa43b522fe8bb7b031b8059cd72d7fcea26ed9e4f42934eaffb5caeca501e4db528aafcaed3b7af0b4eb33eb2bb7d62ce13f56cc0d07e137d9bf79a9d43d06b1903848145c2f252cb76fa417a3a88d674fc5f6a6d68789cbaa5b13e946be6c69a855a5480980556ea612daf0906560b65ce756b93bbbe0e3662c59cc41034df8e77e599ea4075d401f33eeb37617d5d65d05d757569e3cb62e7e04a0710438d40f91e96e2b339c56321f91074348fff61a4b5af31f0daee93f676b3d32721b2882ba76ebfc34faec559d7e47794c797defafa7502be9ab8f5d5c4dbdc7b3089e7e679aa36c7619e57ddfeddd5a515de95c5816394d47c0f14a45e17c76fb04e8958bde65dc76972869a214781842ab1409389c5628eed71b88172589b4e71a93580f087d89bf601408095c46c2b6ade35efa86aef1a709b6a2a76d628f0d6d7ffee7deff805a26f9c84dbdbd32f18d09e4d98eee6344fb36a53eb8b19f8fde2f6192525f773857fbddbdba8d7e5bbfe42fa8facf4337fa067c85bf6ba6bd15a0fa7d123835aebb546bca41ee2fabce29b30d022cf2bc9f3a35d4eaf698c2b3bfacc810e3a4dee381a25d64ae21af7c176dcdb7dafb0bebdb67da75c063a1be68f4b2bde6a33157da6c8a5dfd32bdc015f473a7a868b1f8b0561a1afc44447d080c868f35b5e46c36667041410c3ea5c46bd7818437820b82b5f3098eefc32922767e7e143b95c36944b3b94e4322285e8c09a5a4305752cbe3cf3ec379f7ccb8b212048a91e1611731e9375f2e46c977ea0610ff6f05e4ba7ed1f787c2930aa7db7ab8e117026d88f8d9cc46357fae9f9a24d7277779afd96385bde895daf29c0781801036202f3aaa0b81d4592efee3a974b9b813896d8d6e5706323507fbcc230a015d77a33d0d269f66f5e33d7d4a66835c78ffb3d153dae9bb4323e51a6c50507a7b1c83f001d4132d543a3fca4cb2194b87da526192ff22d3f7f9f89628eef10f3e2d9781ca94e4f6437ddd32f36fe71f4f64d0b1540e9601ec1f2f59a1b8db31310decd28ce1af828add7ddeef4be35ce6b7b1b1bc634faa4770652029eb2fdd6202f26e842252f269a9f9c8ba88f44c4f75df877c9f4fd013e9ff77b7073e4be8b71fc5fbeee45be0512f154d9d3de28950cdf030793dc7530d98bd776e452895eb77729097ecf5b30cb048339ff973416d56018fdfd9b98137f1f588106a8126e80aaceb047777874bc1eeddc9228cb92e9b88c9af1d16f51b379d719f5bc939504d97abc7a582c1b1afcb91365ebf16a74e031a5038f151d90ab777d19f59abe39d3f6b67579a2088f324c5251dcf72ebbeff109e8bbbca8f8b8fdfc321ea459ffc5dbd71265dbdeee53aa278781542cb53df3742eef68ef2e21e1c3dc06e0d5f26225a9626b7c91e49b6f9a3e8ffff8e937f15b50e8b52ec5bc041bf1ce1defa64904ef198cf10bf22684a135eaa7581f843ea95809c47f5c1a5733f1dab684728c83ff04cded4073e60a1bdb3d9af5aa428883accacda9d7ae6f1ad55b12eeed34b32b7b7b6b59b8d0b2f94f54be71468b1daeedc47d182af052e6eee85915c2a835e0e6bc66bf2440e0a1937d37720f5e0d2905aeb51dca56065b506f660cc779d7bc6bc66bdbcdf6da0e81b2b335e841af6eaa2f5b7c3a1dcf1526c76667d295eaf12a1909f51ab56cf72ee3c178568e8ee659d27609cabd2f9a76beb13e86eac1fdd0e79143029b2e21420a149f9f1fedef1dee1f9f1fbc39de3f7cf3ecd5d1f98bb7e76fde1e9fff74b47ffef6f0fcd7b73f9dff72f0ead5f9f3fdf3970787fb2fdaeff7afe4bcda277b497c9add88782ee23dae6eb021efdd78364cb3f2f9fc0d9f8878c0e3a324a66b3de7118f0f250e27bdb8df8bdff5e3e73c3efa2d7eafe42109f93338a9a3bab401af40fa8082cfe73fe4657520c19b2566ebe69711b806e7f1fbfc4a1445da173fe4f9e591b1828e7532311c2c45a5234ea112b450e972c16663f50818d3d4285fa4e51416b4381483f63e6fe105a99f0944948ef3f91c06efa03f5026deac8520f2c9d35dbc60f24e6b5a01bddb8b387a75beab8da27c99cb7117a21cb9330d27e6796500a54a38701a0a3d739c1c6ea4e65d337abf68c42f93b837934dc893a2bd1d5f89a2945ce7e9173b4f5b3b8f5bdbe0c11fa99b28def1e4920f8544a9f6e91728a1f5f3c9e91777b80d5e5c76df6b65c4dee55dbc7fd97d71b9bebe77797bfbe2b233c9e52c5ae2060c31bafb97da59c4ededbe6430be88bf68cc4ac124b795548dce692649218ba6459e88b26c89ecaaf5e6ed8bfdf3fd373fb36eb7cb1ad322efcf00e28d267b7f9a31e6f6c1baac10bfcfd242448dd656f25bb9a56159b46cddd624cd5abf950d497aef1868951ed8565f5c89713e05af02ba2198cfd6a347ecbfc7690241d43058dbd5766be79bd6f669c61eb125a391f950662f9fce8b7438aa589434d94b9e885e9e5fc6ec204b5a8c677d965625e383413a4e25416b998ac7a3b464181c8125795fb0b4646a287d36cb20fada48b0d707c73a990df2996c10a2b9411baf0ef6f6df1cedb3413a163aca9b1475593f2d80659eb37cc02ad2933cff600c5b72f99cf554bc005aff18bff00abcf1e917e7e7a27c0d303ffd42471458db56a8358887f128be8cc7783e2e3023428723ee03c23593fb5a94251f82656626c6da950f6c9ddff14f4539506b45376d6a3b21de55e3b5d66b597e1d353bd3686d3be6cd0eb6a72c757acdf7786294a23ac6db9da88ab79b71af737717cfba2f78255a583fd46cb77ec4d91a9bb3bbcec011c7f46077496f83588eaa1d4dbb3cf606d1bc9382b873e2fdde25654052eb8ce82092b1e085ceffbd79d7b9ac0f716de7ae33ae43699017897859f08938e49523ca2bffaf12bad75d5cc0d65414522892242abed1892fd055c45c7fdbb1c67fe8343ac28e8f271613923c2bf3b1522e3c3395657fe367593a01d11b46db09a392aa212982282bb7cafaba6abe05a144a2d32f602bf68afcba1405ebe7a2cc1a155316692cd8468bbde6978295b342b06ac42b36cf67104d917136cdc7f3413a1ecb0d89511455d3658b8daa6a5ab6b7b606bdd6446c2185d6e5cbd32f9a0ba6f3ec81630e41eacf1af2ddc2775fd78b5e7b5dcb2dd25c714b5de37ebab3fe4f9e776f1eb62b55f1cde777caf5dcda4efc0229ca7e7773277ed9fd2afebebb1dda2e2c4c4fbeeb7e2fb711dd26f5c12cda53bcf97efb3b7e7bbbf3f8ab6ff9aebfb06e2d56f14b51c2129569955e49325fb19ea8ae85c8d8369c303b8fbf8a99ac966643061180a44c56eae89fd58867b20c1b4c4b79c86479c566994215b9ef9aed97dded6ff92e78681a8cf3bc8876f69f6cf166fb2b341cc5c0b62e798e0fba3fb4640b8f3bf877a79567132cd2b5ba50874ebf682e27d2df77f9c64be0d15f20b9de3d684df3b2523d2ba76a1159bfa64fc90315809a03db202bfa54f9459777f66e6f65a3db71a076800cef77e7549ae251783acdbb3a85fe23da6f7624ce913b9f7f7817a0a899e2e8a2494ae2c60f222aaac83245c9e64e73eb7133165d7ed23f736c06c5fafaf6b7ff849bafa6ccecf6627e929c75459c74fb681b65aeeb6ca07c750f76b27da6f9ecda2505d574bf263287ac430740e634cda7f87033c17459b69ba899e1acb6636127dfff56747468e8c78fa2fec64e737327cebafc6472165f75271b3b71d1e527576e87d9fafaf677ff8cb23869364d628189459c357723804311cb9add24ee77af9a6d4ccb62d934a44dac6959bd9144c192b6e1c1d258b6047d92fcd37b799f17d541d617379b3dfbdb3192d84ddabc95f6377badb40fd4eb4df7e42c7e2bff7bd7dd897f443276d87d121fc96d712cfffba9bbb643af807e96aba441ddebbe8adeda80ac1dea53c3de9b365fcb421a103df4ec06b78b5d0e79311970ed097ffc8fe88d7164813a4eec96a0da2f725030d29f950798b5e3a6a515afa237cde6b1dc9483e85fc4f99537fcf5f561f44b4cc6b7c95d1f29ff42804bb8747e5a5f8f648ff1286a363b47dd351d34ff1088cecf72b74930fd08bdeb3e7e5c5f8fd6a21fbd297ed76bdedef2f5f5b54bd996de9b3f1a0092471efde67b9b8e9a94c3ee8fada9b2f201a308e50fb85febe7db2e3c9f5f403117dccaec92fe44fbc72e82737dfdb59cd6cfe6b1347ce26489a3f11f9bb8f1b4ff04f9953950cf10ea19817aafd99948eaaa5fda19458a41d00410d4599b5f250a78e699fae5dce68ef2eeaeafcd1f7fb5ed3d8c24a1c9dd777e3bfb5ffa97ee5fed3fc1c3ffdfdd71fda43e984c445fca67c6f26aa75ee8a75214cfc779720926c9aadce37ab93792331e9b124f02ddf5c7b6a7afeaf9aff26b93fd653dbb9865bfa4d5c814714fa71a3c151895d989829482a4fba699779fdce90d71d8e5545bd68bac6eecb09b80e2a98e93e2c6bdfb5663395c3016dccf4fbc97d5bdee211945cfbd2b5861145a6adfd33b20ec7664c18e5a60e76a426175137dab021e52f8bc23baa1786e70fc8addfe8668f73b49b048a24d0a77cdafb6dc12da7246fe8e455756171b498777dfa7fdf6bb8d8d58efed762f7688489bc76647b645ec4713890dc16e6feedc75c477fddd881c415d49b6dfc6dcbc35469ac1e1d7dba6a49dbba3a8d9fe09bc5f45bfc462b3df6cca1394b49100e9e7cdf8f8f6f6e8f63632149ca8a803ac320a2c81156bbee72ee90c2ef975c1a7c1ca886187c6e4c7bda10e6198525157a3b4a40a6a07eb0213b0babd7774450202c561a07639ca67e3feafa918f7ebb7e80b10154e4d7d22be31d0ede18965cf2e7b52ea5f06a0ebebeec12ebfbdd3c73f8e6e6f2f4116abd1249492dff134abbaff0e2cb00a3ebf7f2392996c8cceb3862bc1459ef25919ae1f5e8f976037422d6deb8b01475fbdf6bb221fa4365289d215ae81ce2d19f1a2faaddc9c82067fb3ac0ac12752f2bada6969c5a19699333e4c6f5ac3b41acd7aad34df5a54172a4549933ddedef93b7b76998ed2cb9cfd735672d902e41e8ab1e00b55834aa367c412160dc7798f8f6336e0a00704fdab264d5a63daedb20692ba065b5f672a1bf5aa6c4de61aed4c83edd615aeaaedc8285e617ea0628dad367692cb3dd4683659db0c015bc511e831c31830a3c5277db6ab3ea213db6ecc747367646aedd34ccd977599fa717bcb4a311ec4eabbb5279b38328b65074ff34d69ec046efbee9016300b5a55549561ef594d2d0e255897e1dff575fce187dc6ca813afd164bb58e2c4249db13626754e33ec8875558fb23dfcb5b4412ce2b688693044b02012e3a9284a3dd096fa36f9568d04fa08d66544ee9508755aa50316393a371f6f54b9d34aab7316ebf2d8ed2d163dad54a96bd1bb4cabbd95ca4ef23f562b98afd85e794f39038ab46f26199828d5c9a67df0a20cc5eee0d79d4430c03304b9c1d01f602d58175ace4e2ba0d3a816c2ab25d966d1b6479ab2a84544350392ebb3a6b25a03ac0e94fae005193468f049db727b780b6de71cd9399c56e1a65957e31655c1a21a128cc194e771a7531f347f52f37700f65843359fae0054030302283b96f0203bd8032ec142c87b5b2c387c5dcb40053df32de9d74c538ee1cedfef7fdb09ec78b5dfaf78f983a10aa67c0b7354b132e16371248aab3411a6259aa8ca49601ec964d675ea806f79f9bd97676555cc241d8e1a92036ee046b8af30454f308d47786e6db19779c17a3a921a4bf2c99457692f1da7d59c522b3c78b047bd1698ce1a85e063c8d1fbd3ec68fdb6470fa3f4e92f8e65b75e108cd124013674b1a3d7450d7a4f9d70ec71ebebd68d99833f05105d90a03febf3696528849cfc3bd0e7b241914f687bdfb4b6378ba4b5c39e7cf5f8eb2742c8d2535e9482e0395a9b31b8d4a91ce2a1635ac8020836b4b6a31c035673721de20255d5e1e375a5b1952955138bd6b0044bd51d387024781a2f6fd3d9e066d13046425afeccc7693f92ab8329f0ffdb41d4646da6983ca4c67a555684668bbdcefbe9209545575dc716d18154b9dc2665c527d308f03e6660e1a8260b2280596928d03ad709b7b71e327474150ca25d9a2aea1bc44c5308904036ab7331c1e4eb65d5056f6f4d49cc3225f572c0c815e123c8a33b72b83d4253b13296a26b79872d6d6db1b7d9788e05248ea415de62705669d8313e2e04efcfbd9eb16d604950fe06b40da0d81bc86dca39aea5e5cb344b2ba186521be862acd7e8b9abd70c41eae1bc2ed50e9572662e6762a700f7111e3bb5814e915c68bde23d312e192fc02880672ccd34fe8d851e37cffa2ccbd90582fd828d78c97a42646c5ae457695ff45baab5e3916033b97e13307328ab743c96092083f4c5b41009973be5021bbe504802db41369e66c3969ecc9a428530ed588c1b582ac29d614ed6ad2ddb69222568a68dc8f389a84692cf07b20237600459628944651e6b8caa1690bb4f8437761a0bd79b9ed72ee9425b95875024ea7204fa09901539557bbaa7e59bd978fcb6f8499e4e0ac83ea2511af9202a63764d9dd061ada1a80e2566c15b11dd7bc745ffee02f4af61bfaca28751e4b3ac5f43a50d9788a202e4ed40ef51b772e79e55b12f0f45998fafc45ba8ade77729e6848c6bc6e2edb4aa834c671ab019dd80531c056143afd188b065ca76c838edf2e25157bcc0a322a2e338b914f3b3d8ed0cd29a7a86c071f08a97a2d27cce3fc55c8ee84476d680b73fcf7972390488ede5e3bc68c4242b2ffaa25890fc4bdaaf4634f990f7d359e9a4e4f8d082a61d55f3b1a0093fa4819a3fe457a2583232cc0f0f8fe4d5c608794e77bd6027bd5ad3987274994ea7a2efa4d14e468bc73d0a0f79141eeda836d09107a7c2f9d0903ecdce3a1e728370f482571c519b6075a2541d043f0d0ea77d9391f64d6a7f86ea44b0d80bec9a862e80d200d611633e5f5c41e692d255355e58b6aac6a424e8141796855c523acfac7c1cae614a905a137e63c030e137363d9520b016636c934569f986bf89aa6a2c195503a80d35ffb69c196958543c86cd1933158d8ba57233837a2ac96759153378cec6310615e1cccc400d7d3429112ca2cf811dc2b338968ffbd0a34c456224bf5a8a420063b8cf9391d513a99c581311b826309dca2948091a5a1a8aea05167a2d2a1e39153af6889658d5edc2ec5b37cf6ed2f2e0853c7e69f21c93c9092c1b635d3d0818af11a711762a579b20681e03fb044c7034215b5bec60002c10ac2c4b4b44a67ecca685008779907b9596c075c100807e94449d92172c4a59976d7758cabe55abd8611b1ba9d399629e2275740dd1b2ee655e0070a2d487eeb712e99a5e13a715deb3d1b43bfb417e020649769e6db0c7562b636c6ffd72dbb68c059b991b945a3ebf07ceae2bf78e3f3d7f7277744c4a9934cb705a9b6a507489edd6f3d7f99f424c612dc7bcac58759dd3c564f9ac2ad33e2e3684a403d1a4ca1907af53902e6ed2b292ec684ffc918a8225b3e24a50251a0e0c43e4f19b081336d9e3986d3743c0054c2da7e3341111ddef4447543fb3eb9bd33228160e7a8b78ba0d28babece28d7f8ac28f85c5740b6c15b149ab77cbc74c16caaed4dc881d3ed3b062127f67418b5e9d4c75be3ce0d77f821232442831cd5c9f6198a0dea5ec5d30c5b5aacf536ce5e6a2be24d3360146d1c0c194ac7436f941f2cdf4cfb328320141bc1a7674c4bab288ecec9d122b05068886da17fb248b5af281fbe8c6555311366542ebb5c56f954d27aaa76adb1169a5135a7678d492e487550c5ea122d37871c7c6e8685cc58f002de6e5df1b15f48c15aa95d97f4b1b8906edaa8993c70f0a2fa04f048552f0bf993827227202b04e7227b10950147fd2e006c82c4f5c143fb933dfabc2439da17410dd51fa43f298c23c126a9744f2f41b08e2db318eaee6581016cb313821a01436ad7d9884f55c1b33295705192138cf2a6ad472bf7639b9d346e1a316b24795615f9f89d3c5cde15e22acd67e5bffc8c37e2a6fa57e32cb6f54b5161133ab1caf371954e6dbbbc10b2cea9befda8e6b501cc170de0d7d0007e0d0d601e1ac0dc0ce0573500ad67b56a5003a348397a01f1b98c3167cc2bba1334e3a143859e63c2ed2d7b7f67150fa9b8a665e0db2d32c9fb624ccb60825b288d593a1699c260cbb26132ebc23835db086c0e1477981c709220e6aaf0497a46901ec61e3a6e1d74e6059ea26cb36b41e26abc415d928aeb4547370040ee24688daaa75271bd4ae3009d45ad23e864f3b239d23a642c6fbe4e1021f6eb8384cdfba9e39f2f7886055eb5138c9ca3be4d3e4faaf44a1c9b522abf758e19a65c965f3b02a3c9d0c21f6e180c121c2bf150a176197b780c9887232d7fc88bf48f3cabf838b24867a4222c759df6512aaa4eab4b24632e5d6ba164eb4a095e2323910e47d5d256e6f6da0d27c2ba6a7eec118b240836ede13a12bcdf645b66656b73b31ac9e4b26c15e24a14448e331d6ce22f4fe43d1aa5838af1f118797805483616830aee74f282cda6f2972cef71aa01d998b0aa7f11a1d84c499500b1e6f6969d9c7502729c2578bade3d440f4e811a5d97d40f51b585aa0b15d43a24e600d11116868b9aa66548dbf0156adee597e96aebbd1a5e64391e77b7aeafbbdbf764fb6ca575f42bb5ce3fe9ca12d8a81929b0982f172cf4f6c168aaec852358c59dec9cb51481c56d88e6afa40a28b49c2adba68a6d75d3dfaece76c6d61ded33eaadf7f26c900e35f784cfa1a494d1e8e555954f5089d94f4b74ff8459e334135c69497bf92ceb976dd69080c624750550b6d97b6489e4280c578457556d36e0e352c46c6b0b7fb16e977136e555258a8ce1c51fdec98caa6adadedac23be9dfca56924fb6fa79526efdd796ba07dbc2e29b7869b525918bb3645656f98469a34c7c9c97e4d99528aa129f0f2b3b54d02aa83b6f1c233644c7f862ffdde1fedeb3e3fd1776b8524463289096da6e4d7dc7b65f18cc2799178e6d96a555187ab32a9ff02a4d6497dacf00bb4eab11bb16e2528e3093c7d95cf02266a24a5a4a74902b485bccf24cc40f6ca49f96d3319fbf5c0238b5f7cafc17212efb7c4e4bd99e84b8547c689fcfd9262b855806a9a1a8364b516da565be798ded2a384dd2ec27005563928ec76929923cc3db017dc9a9764029d75f42b551b2242f94536eb94c321167c47a629c5f3b3099c9157ae8c22a30c9b57516d5015fd9265c9e1d7b9b3546edc9a45d96ada3a323a6361bb0b15e3ecd9ba4d9ac122a8f668cf25921939fd9245894c6ebd7afd90b9b28a12af7fc98b429714095fcf5d75f7fb539bfcf7851c9dddd38f9f1ec47b6e9654bac69b306242a0a195bc949132c4237924b0b0c89df479752f441bcc1547c80df660d99ad7b9af0dff2824051641012c3ea4e08836cccb80e051f53db2af3bb256e2a91f5511b93666995f271fa07b5f3710412a0cbd5282dcd696f5bb23e0d6d3bca347e2262662de3e965fc3dd657fa3cb75c996b8a0552fde4de4b4e72cca980391650eadc6d1161807e19c12e5b2cff4fb40986da81a8e15a0986554d1299b862c8ff30a058687d717e0bd7960216553454109a906b32d29d67c5da0a9a591a6d8f6704b6a4959009ac69265e60b3aa64c909d1fc10fdadcf7c78e21599fd47c050e3526f968efbc7482c56c7276b666151e2c1d8f43950c94e6f257402d9d81a44d4ac47f4f5e96f79018dd6cac98e209b145f28e44f0212fe32197fe20bf88eca395cdc5177aa0ac87792716302ed9f30ada41c4da6d8a085565d8ec8aee662f918c98f86ae64cd1d90ded40aa88b6902f37d3c8b24da394bd0528794dba04bec7037511181de79d7a500db0edcd1b02e3b91853634b8639975d6a178935cda4de08296751d3b5b5ac003b51610bc5206c4707eab4c0a4bd6659b3b62e7ab5a16c081e48421075a8f993d11c29e7700a32669d688ede61b8a2a4439c8beb42badb91564bcaa36b9bacbf27caa36a346d56563e0370f1c835ac65629656af25e60e50129b02697a5c3df3c88d420bf8ad7311341b6004943acd75c83c24e5370a2c560bb3b6a98e6ece6056816d8c935547376b1876b6a4387b14d6de6fb108e6e693b3d14d3e5767b8f0ced24cd6236cdcb36dbbe8b994ee4372a71e7eeace39d8766279a536e900611e4838eb7d0da0fd2ead3b0a27f321fea7401a8aaa427d90141159d3459a88b85b59af23ec65018487c79d2a9678119a59f37021774af7921471f055fc1f40b7e4d1fbdc8793f2b04bf77e9b43e7e4294f19f92c75d7d05427822a7b58c1159b46e30337c5ba3e65691c3f1b44ac6e954820733dd2563bbba6d4216c76250b599016b4b7e933bfe2a9fb6d93649007f72b402249002a8f252259456ddd058d666b5beb7fdee6cdb553e5dd035eafc17750b9531c5744dd77f6f9c4ec1c85c2e833594c27ce7a5514b03d4be61d3297aa93e6479dd3e6699df8bcb9af7455915f97c7559f9af23efae266d11ee4c43287849eecbbf5b8fe4ffec11fbef69915ef14ae027e8837c5b2d023d0804b7e0826311393106faea3038b7095e29c5ba629eb96139a1bd9d9dc01028d368acc5cde22cb281072885de1be9d5726e76dc7e21d9edbcde19b25b215b24353d34dd9788ed3c130899e1d56a10d0a0998f1a4df012c43dcb27c69afe2ef016af10c3b4ac44015bf1783e15917d2e17bb7aa9d8d5dbdb17ae1a0a8f577984084f154d0dfb0c513db1d61e4acb967ab75ddb3cfabe400b1b6db6b3bdbd8de41084134d1b07dae35a9b3dd9565a3e74f20a3520c598c8e293314803e507d5f455d598bcf3330fca1ea1d74ff4910be4100fcf4b21a6729c90821e2418d74f8e596f864efd0a5182169743208a3c43f79fff3de5059fb0f7a8cabf9387d6201db24dd280a22aca3f800d0383665b58815cb0bbbb122ca4894917be75955dacafab5f2d9aefdf78c76031f90caeba629df88a24c9ecd7f9ac14e01399dcded256ed0b4d73433e11ce25fa6965fbc15cfbdd71eabea2e5cc3d7badb4a43dbdd960200ad13f04e7ba4464d3bb0631706525d0b29905fba3c2a75b005efab2ae7d9303051c182c02009dac05c12ba7343dba142639a790357d46144e4b668ac580d02cadd82cab52bc39372a99b4845b09dd0e02d0e0aa2632262160b06af26a769e26a7a59852b81cf5ac3c273aea4fe459465bf2401aca6693a34a4c4bbaa174382299d1648fd8ced3d6d3a7b4adbbe506a33ef50ec0125e365a784e5caf9d7c3cb6a608bc108ca3893138a861fa5ab42402c04719e8ab36965921b49461d858142d72efbc1350b73aa29167e6426faf558ea25272e3d55a704907ee7a43f55b75c2a23a75335c014bc824e5b1db2fe8dd93eb27792f246f8b2bc72b66ce101a96b3e0d780e8ea59053562b367143215ee3b2eeb6b409e18bacc4236b165cabab55f5885a83cc8d8168b8c9db9a912b36d78c3f864db5a156528ffb8409513ced886d7f4edad7a03b0dc4cc95fb265eba5c8250ce25bb009308ba5e19e67e339bb1e898c9c7769c9d20c11ca2eba9223cda622b2a54142df264eb17905776f02ee4323acb62a264916bc0eddae9ab60fe5ef100abbb8326d652761f1d1f11f82010634fb93f6dbf04819f3f4e5724f0cf2421c648ebe86a2e9bd881a48b1c6934a92069ecd596d9384752d57a7650303ad5792ddccf0edbba91ecc36e317de8a001393970e1f3914d5a118738925ef726d9e740546a7e4f1537d7d1ceca51cf87c2adaac01039be457a24184666850c9cc243983dedb0cbbb5e9376d39dad60d499a63d2dc11b31d711b21d8e2fdbe03960847d4cfafb3461c80aa2b292faa3e9b2ea9aca5443ea844b11493e87b01d6551ca8c36e6009c91f55ffcef3095943e41464a26ae050178a9cf572b45a88dd3ff9d7b775fc861475b9e410598292200695b410e85731d999852d49ed774d62ebe6d98d00ef2009af48e1d65ca637ebe73314f19a233d415dab5830e21838c00a14709d9e1826e4d9789c5fb3e7ffefff83ef93f0446755ce7ac279e10453a7752d2cac55609a8956c2a7cfe1b1d33b7c26e5f2b30b9823571835fc36c5b1f07a9a77dbab122eb2b4fa0da87325b3b5c5d201305bb844c06ae9077e65954ff5cd94f1b9ad582e4b64881d28b6412ea8a961b3b39cd4b780234f3b4b86435ea724cd7be41d7e5dde828a3171f8312b455d2b40cd0ffd978fab299bacf2eae3eef64d3b8b2ef77df62acc737a3441b1b22f026a6f90da4a4f5305669c32bd257ffbfa6fa50a5667994ea1a5acbed88cdc57cb7a3ae0256ad8c5badfbb0e15dd88b928dc2d549c32eadaabd2cbbc38e83ba59baba0a09e12a8b2f5e44d42a756ac5037139e4abbce58517bd615c73dff9071cb1ddc75b5e0f55123a89d7298e48edbd358117536a244755357682fa5714bf0d31ea75ea754bfadbbf58c4f00f7e10caf63bdcb35ad403ccd8a414d72c05826c855191cf12bc14c2676083e620a312bc50afc9620a21cf11715ec3f9f555ef7eafdba37005d405d09df2340de733ed5af101ec44bafc2337f0c93dc79d87d814bc2299f8811723f86d35cdcc23266f3f39daf787aaaf58c161d907721df7a4f82de343def3d9e1fd83ff27cc2b65b5fb7b6d99364e79baf7b5f639b32fdcd916950f2bbee87b5677c7807d8784bfe79a9c026312e98acfb5199539e05aa38a91f3332eb77846743f19adfbc4a2769258a48167ec733b4b82a639689ebd7fc86b834720b205a48b65a9e245e9e6e9badafebd55d336be8dd062da87ab2a8bbb3a6b3e74d57dd458358dc1239d271b6ec3bd31e415995d735799ebecaba7182820b9c4a3d7c6dd26cd9daa4d9c7ac4d9a7df0daa4d9c3d60614250f6ec95b9b3463df9af6bcb5810e74deb2b5815cf72da4ecdf2155faf9a1cc885922b24a14f8f5d611823ea7d329cff4d2aed612e7532d5dc1734065d2ebcf30576c5796ae352a13a976f39a6846cdd01fb1e831db04603a1e7cde892201fdd018f0bdff62d18bc305163cb609d6d5459129de542bd8ba69b22d3f0bbf244fad8e1c478c0a35aa7856d3ea9cb46af2f0b3caa7d6a383d9a3ec5bb6631f81bab3250486ee7bbae95f386be7bd065dd09a4b4596b4764a1e5f3898c2baa185a9ea5821d71afe6e905595ab6e5adaf45baa7baf98f22cb821fb625cf15866ff0f6fc43f65b778e08b8cf73e70dcf7322fdea537621c01109a06c96af9db4d7a1d0aa5d9776c9b78f60bac998f7553f7a4796147eb62dc92c62cd22d694cad7c8829a26f4c6a243acc2bd12a3e0e751c0c0b6b397156caf0287c583f6d3d5de83c1897f28fdc8ab4adbffda1d9c8f3bc488769c6c70a146df6fe4e2b98117fd5584c5d9362b0c42877a9aeb7536be159a6c23b07dd8c5ba47d0883ef6db1a05b4a6797e94adeb4d562b67c709ce857fd6746b1daf28a74dc77cbde686ada5bafb6a792f56a5342e755b4ca3dcfa07e41436a132c6e8598ec873477a7752737fe203bab94f5bb09ca58f0531956806b74a5ae30a3b117f7dbae6cd6a15e8a28f2d631cebb99a8e3a9d1d9e8ed68c4d945771ad03f251dde8636850fe926ca1cc1d1b965f36476525a1f03da362bf2ae00118e8ac5f4f220eb0e083246430e84347ebcbdf36413ac5624fbe30638feeb0633266f25137082763c9f8af248240558db9350d1e3b4b7152aa57c1619922c26d36afe9220cfdda2cc5fd26a04ebaa4a853311297fe1459666c33d9e8c24063945a1ff7ad015077f998d4b528ed249342df2691933f90722cbc319906722abf0739c278ae596455ecec6634c2f61ceaa49068ab55201abdb0d42d194656c6b8b1d80e90afa862ef940e0bdbcdcb25ab884365aba8ab164951f77f847ae97280a06ae9e54147f5dbeb1c7c763b915cc28d8151fa77d5ee545a930643cd7e63326b829ebcd018f2ee46c372b59ef824d314c7a8b35d88669ffa752d8b65bc9482497e6336ab22a87c9c8c6266ec543c1fb6c92a3258e7a518db17267a5d88486366def0dacd754331745d1ca30b44ae340226ccab38afd9ce6637ca6a68a616c535114f07d07ffcbe56ea5e5216232389e19a5938e831243511d49ac306ba5fd63eb92d8945cbf890418cfaa3595a09c1ec23e2e2bb91fcb7996e0037b1b0d9da980f432ffa2b5a562ea481c9780db93939794ecb7f20256bebe23f14e440e8d17059fb7616831a6f4f27cec24c8793909e89bdb49425b4827099fbcbb49f3498f34ae4690b9fdc388de0eda1a8c2a59dd733a45551a44e9a7e95adb586f25cbfb2230f07ac13c0bd48644eccdcd2847bc9e286eb804894dc46417c9db0b8858ac31c7a3565e798d4df2afbbc42dbad86e962aaf23a3f97977ffbf3b971a47fb7b87fbc7e72fde9ebf797b7cfeeed9d1d1f9f10f0747e76f0fcf7f7dfbd3f92f07af5e9d3fdf3f7f7970b8ffa2113e20424d2320d140882797ee09780e698da6c696df677c0ceff74aaf1cc9714b3f9f1ff361a83064b865d1f23dd8b4ca32e587a2aab78b89a68cf2eae9165289a4d073309ef54b612a292641d60f3668731463b0f5e811fb49a2913c1ae4215b0ad64bab092f2f4bb8d7c237032083156929795e4008b9087b6f5fbf7b76b87ffeeed9e1f1c1b357e72f5f3dfb9e75d98e69f80241f15f557e04c4eb42eebfd9b86285188842648920adf16258229c1a274845d8336d7a7cd6a0c4ac56aae073530213bd22388eb3863b6539bdde2c1d579b69c626a21ae5fde0c8b09177455ee5acabdab216d375304a82a41dd54027f935c4a3988aa24a69c3ae0f3a29ced89e3c07758ef9fd33564e4582ee2cfae6f0ca07eca2c74b7150ee4b34bc80ae39ee009ef5cd88ae4769326253510cf2620236f5ac2f8f49b2c650be2a787259ca3fe06fcc3600cf312517635a94c7699216c96ccc0b68d0825159df60e3108e431135fb1087bc0178abde00a8753b1e698f3f1a3f798134a95ea31a89022bc0af7baae1997ba7711d2aeadf83311f962d76244400a0c023f545c5d371e936a9cf903be50b29fd430d8844c9b159ce965ad00e9013f9596ba62f2a514cd24cc832e9151f8321b50ef951864174524a0a79c68efd85bd40605dc0b25f00fc2ef4e2aaa6f0702bd97bc9ce089eddb1439572511533712179edcaac161a1ad9a1c5287d5f80f1d445cb7fc74180fc428869a49d3ac14862bd2e31816b6c6103aee2934bc51caafd7a204927eb6abaaa5ad41492c9966b456467a444ef372422a6b55d4b7dda8aa887da55b57407c15ad095621b6847f0a36b48e12ea1666d950fac2eed66791dc8573d19d8bcedfde6f4676ab8f051c54c17f5626979c427c21fbed3293a25d7c5d6d7cd29a661e7486b6b36176044c4331dfc56d9df11898bacb7b26630a938055be72e38a4355dd6740728c56e6fc1af29701a5298030e430b3d6a3c91e9fdf6d6397acdfcf40476294ff26138ae9b6a1386c56f09d761d5165da8ac459a06ae074f77bb1e06977e29f8740a829b01f8faba77b2a1d24b8fb3710e918ea7a27f7edeb05b47211d694fe3e0a2f670be6e731d2d168072920ef0f6d6e98060969acb4fd9b53b175d536f29bc7f80586b6a2e76ec307aa7053a995d5c1cda80fc36835d09e10cca99458ce8a86367040bd6bfa40ddeb96b6fb6842f677bdbe7dea1d2612a66f8c3d05d6b1f6bc2817760b80216da489560f67a29e69bc8c18aac2a5251a21607c220a465c51229032ee24940a5012ed5f17b2224cff076c05ea56505d2a37f908d75c69eaca515161048f11c5c639e9fb32e3a2655c9a5640530f64478aa6e935602e2659927f074e9edc0932d6896cfe6afcaf3c2a1a5595e748352e7789feb8610c4a176d0333f189eea0695b77e87a3d56b767129e6c886a455a99a7de88aa1aa7ed99219ce08752a77e0d45ab258f26f8e8c0cf65de51840403c900d92d83667d7bc54d5fbf7704066955fc0e04d480b244e2aec8b8347f60c960b2d014c563d429fb4b2157a0c43c96fd52de5e20dae5f391da896494019b609e21d6dafdbb5854dc350659a4f2375c098db17a075b0fe48c471a0ea99fd0e398e3637cdfea044451df0f7ec1584e2476c1658edef45557a88a751322f10559722e250549f0c0b87a2f251f091453e8b72180164217a7d2faa4f8f5b6a690c7ab15dfb729cb519712470b27376ffe27d4f153d1fb672a0b22de1edc392c5c38036e5d2351cf1f263d71017462b061e404878a6eafa235e9598fcc04bb2da6a999cb574971d43fd7dc73677ee5fa51fc08cf7a356e928b0bf709a55ce2e60b1966fb0f2136eb0d26c3055e9d19dca3c0e17332ba8c56bba19c98cb4f27cf1321de1a6d43e323e03dddfd87089ab26d8b372149dd8a19c85a8b7bb9d59d7f82351849b8499be1f8b8ee85e378be7a19049f7f06745460f78c907f378c0cffa4b064d2de5ed242b6cc6fb0036cfb61c6666973246f7cf30c8139929fef5f82198d1c37921a55e4696e5a481b36e9c456443d0e5c0f8631e87816d2c5f28ca5fd4b805948a3e8e51f8b0a5f9382601c6ed32083464bc06766ba88a2c079139c543677210441f761c3f08529ffd288689068f6117a6235564394c9d3377056aa9f6c56b3ef5cabce6539a1b6a4627fb022457482e775095e35d8060635e0c05ca78f02c7392fea19c9f1849f0d5b3c3eff7cf9f1d1e3efbf5fce8e0dffbaccb1e6f6f871902c48f8fe4053e6c0f7d5a3e0027720f2300851ec40418110c32c96320b3f88ea26ecad3a2d4f4ce6943a97e2486dcdeb2080a6a51efdbfa926db21daa92c5e20bb806b4f8b0c47663c325b744fe54bc0251e98626ad4e578d983858223162f32e186b277090e42fe555f4ead89d9796fa8ac6bf5e7d6942bf9bbbd8d7bcbc048520dd5c3a999443ecf11b7cabe22faa62557e8477f36e733ad9e38ff485e48457c9885d1c8ae1fecdf402b24eca7956f11b3071e549258af22c52563f2299f04d080097c116e6e3565e0c31f9f1d3c75b5fb7b6b7feab14c9a68ac550363542a3f52a76b337e205ebb2ad93d3d3d3d3fffcadf56863376a9e9c9e9ebdbfbb3ddb1ad62e4dfba292d31fe525440d29ab629680515474c407bc489b2dd2c541f9435e567b550e5dfce7f454dff3b63676f76ce5d3d3b3bf6d7d98fa4bee4dadfdd28b6a1560ce55f3caf7c2cad3363a9312493e99a663d1d7d616f9c05cf079e33856b7e7ca6a0e7568fa4afdf3de3efbcb0587b902635a32f406e2aed41bae9c74215e448dff28b3333a35d405b97d365b85988e3984f5b43815b386c4a8bfad37e032c494d9722bdf1acf13cdd6a3dd68b77b0affa2e62d80a4b561d3ce9a5bc39835feb6d37ab4db68b20dd6f85be334737712dc0ef352b07432451b29e5976ec02ece5ba99ae4055c84e7b38af5781f8ca2703516b2344b4f9887b228ea90043f666a250c46c5d0cc2a97b03893881e42ea72c0f1f588975d48c4a8fbc7e54a451dbda54b48a86e7097624bdbd9e49454ab265a9528ab48d33d3d827bee0bb071624404e673be1511247ea8dafc2f672a12203e78005c680a72cc87170f27feb937b556952377d584e65d4b043507444a040a216a742635b2b6ca15c37c726ce7c2ba7a5d77d58f1699296bbb4ef55734a9f91eeeed2f94e94c3accf242cae4f5f62fe8b41fbae37f9f8962eeef78cdb352aeb2e0d7cc59bfda661e8aea905f1ff361e4b393a94415d60ddea842d9d803a8bda1ad00ba50e8c42d73a685eb626ef9ce40312fa681e64f67d9447349e602ff8e25c0b64402cdcff5f88d881fc226328da6e19175eb8ea10180c1b9030e0fb7521617be168c2995ca4270b817acabe916ccaa19c9f9cfa03eff27d0056549aba2cbe9a30f02cba9d060182fecc207826969a134b9fc50c62e57d9a4aaa8e4f01037fd3d9a3b137636aa7e4a7d3f8a8711c96dda9e78495e887f942f50b8a2a79ecd08d8852a660f11af64135e4a4ac521661baf737d72b71d15c93f215070e43ff480fd0e1166b74efed33adbf8db564bdc8824224303b7bcfaab050156eb49ad83fdf377876f8fdf4a56a4d1702c0f64fbbb2c6a207d8eca22699eefb41a6c43e634599b351a12745173d1add1851cf585a491a06e552c3a92917bf0c65aef0d42867b0fe6ea702469a97abf47df64783299e222d3da1a5998f5751691cf3483412e4628ddae4525b01d779148262d461f88e4277802bec6e4626efe5602934c08988b9f795e9d34cecf55d9f372c40b30f2390b5b8cdbca0b14b3b88b79a5144bf27057868f2b5aa52a31f3ccb34ba5e7f6fd9aa6a9e6e15652d89ad2619dad7e976cec6b6a7a4635cc2efa59f6ae663113a25a2f3b947e56373c6ae97fe02a72945d7a9964b4141fad99fc905b9e099f3ef88e47ab927ca84e547afda687dce3d4ef7e146bd0184960b4415925e1a2e6da98f0a94a8d94becd6aeb7419c41b52f9543d4809af8d3350bb40720090e401d7a49b059029789911288a194ed9effd7787e72ad529f503f71f46a854a7d451b0ad2351f997f985e0954400a8a56df116ac35d11d391b124c98eed889c29b33bd2b153aa186149ec769f3228a107225225595f2d2ea0a7673c7f0c82654b84650bbf1b6595ba7ea90d3e44a2a415c03c4ba1ea563c1a28d0d7d738bc51d9d2e5e47987e6ca406ab7715158c797eb27d1663f9939d33a330d5ae739ef5fbe668af727621e72a09a2fc4bf8a644e193c1a18e5fc4deb7a962e696cc6b6a080baf10a79e3d02ec511853cf2e4d6d54ca06b685ac617703f22788451ec2d1ac0f233b721c0fa63b6a633b2866e0baf066994e63d7f98c248649bee6fddd03ae9ce94a3ef4c6f9de69072f9cf5bc6b072b6cec63d52ea8acf37e3a58fd4cfdbc97d316b7bdbb69239bc202e83b3dc96c2961d159537decd2f5daecea4676d90e6bab836635e9d1d9721f8afb866b2b2b9ef5a5bc09379e8669b8c02552429c61dc7e7876f4c3f94f6f5eecbf3c78b3ff827559e3fc7c9cf7793902a27e6eea9f9fff9ff208cbb09516201f7cdd5fdb187ffe6dbf22bf2b585718450ac518e72c72cd2e0c5a7b880b6ff03d4471d95183e0aed624a4aab2864e6cd776eba9f716ef13c7c6f00337c9ff5acca5961821e4fd30438c87e0f067b7c350dcc4aad8eee85fcc911b593c5beb124da63c7997e3e8525c74ac3afeca04dbb5d180663fd244e383e8dea7b5d080692c34cd506ce6032d33ec79bee1f3022806a00dbd45a7ae4b5c25c7a062b5b978b6ebaf5b9b585fae62cc60d966856f4351bde6d38046d0662c608c97f287f749e341f6908ae37f3dae4fcbdacb393f0b36b0adc6ed5fb744fc543c9f3ba8450677e46ab89ca5182c5752895929182fd92c4b7f9f1985d6a5987feefb6a3da87b959bff147359ae76a9857eb3e18fbe61a0408c945f6da35f61b7b7cca4e15370370d3dabb8696a2e0df50a7397e130e02c689c9fc3897e7eaeb3db3abbab3400cb94ab6a5e1fb32d0d3b3ae1d38fe4463f781f7e1c47aa713968821adc57f79ba292363f06b894630ac0f7c318a68782f9b3334d1a7841fbd5f082dc6bc74adafc980539a2d8fe914cc807a3fba76544e44cee3114d5c0bb8f2309ae8d5151062c2157349fdc20b5244984bf94a35985052193b01870af11b2760c255061feacef9b54929c5ae9ba3e9ae4b898e56a9c3365d28ceb626f7cca2a2f843e37975b7cdca790c6da67166596a8a18fd4a8f164595513ad5a7515d16ad0753df4026bdb95f4d2d000ef2b8b301aaf77a9c6594f4b6e5cfd9b287c39ac7520633a837b28b2f29d6003a850264b1ed61aeb9a9ef1c5e713ad9ef5fb8e2d83a40a04ff969235deef7b644d4f0793f938e52593105b859533dddd43b3ee336cb72be3b06ceedb07497394e5910bbae6ea36da0e0adcc7032bef67ab8236f0e644041e192e22febc484612717c786a0f444b396370e376df1b138bd8212392fa43937b8c47dc8d4280b9d846eebc55e613e1789cd2a6b0ca892564a595287825106ee5282faa11cffaf719cb694a090d23a1c4a5ab72dd2218172cf2a2342d443f4d6429c71823cdaef24bd16753a10796e6d983b8aab97698c8a6bc2c85beb0d7bd019bb68ae52dcce6289f88087ec5b68d15293c82c325f090e6d2f7fbc8b70aec8c5de3581409372ff42131e09587f8dda919bd6943e030b699c92f7e2d76017bf4e2815cb777c584a4ead810ad07db6d7c76f63bd19b1a7e044c3b9074ddcb7227357e7ba9e1b342af9fd2acfa26e043f0dc66108f886e19f1fb07ba619cf0e9711eead46650e62e5cd666fc893e0ed52074f64f6fde1ebed83fdc7fa10b3cfe302788128d3cdf85cf11b38c83c33eaf8457e405af84c9174591175e01f0426c4a4860baf9aff9d4e4e2b9e415780389a64c2186e2c66f041f699832a5f0bd301e89cae6127b6d5b00126d19c048bf0c249e591fa44040d06958c83124e650e8f19f53715d872024fb2e22adc9a71a0d70acd3229da4550ae60199b6ef742dd27bf958dff8f8e6e88631a5b755ce94c1de0a3c29d09676e9978a8531f8408376e23c094f6d85fcc4a9633e8076e015a36483ea06e790ffe8d19bbc12ed47ca4badb56ecdc6737df897a479258d80cbc88a0f4d3f170acf2f627621f159fe05b4953f10fde42ff5882d669296ae66c9fbd97c4aeac3a3e243a8e4404c1f231abcffd731a58533be92fdcbb9a55cec63af5addc11e9ed8e5750a8f192ae25d2de1a5a0f4a8ad792ac987a91e5bbd79255e219fb7d6555ee46c5a93ddde9e121f74b4d6dbc1a014955b0bd328ff16f4ab689ee132633eaacdee7a404e4d39dc17a60b9d4926e892e74f30c735ebfe2e13d7844f31ce38999f8eae241f306b2f36a69d8d3a9fdbee0a0a2fc91ca166ba5b5b6c2f1745822d089ea1e663e702e8d836a2781f944e55ce26e9789c9622c99570a49b38c8205a802a2871398146e19cba78c3df5c78910998f83ddad0b8bbe1b81d5543d5dc42dbaba89606bdfaeb4581aff5759d391165c987245f25b83d185e8142c81cff0108410504843a59953b62c12b9d12fb67b0dae031698e97b81b9160aa872cd7d7d7ad951fb3e0d0038f59482f21d25b07a48411e221db50af15083490216b9f127f949aebe8129ed8ad84fc9553292ddff1a24ab964ed973bf23428affbb9bd6591edd3b2d04de2a352b9d4944b0f9a5fb359e16b7d9dad99013c60af6d6db16765399b0896cc93719a680e41916a3e6ed1290251c53811e0f466282abdef3b749caa5c681ca689aef1c2e90d49c3eeb6bb80c1274081a0bcc9ac28d32b319eeb33dd1c3851392b1331add2de5898f01b78de4180367c3dcf9876010ada30e7b4b1f3722e9aa92f59b57096009a04f469fc105fb06624e4d2da07b07f374db152f3ec0ea577d8dae09ad002d45d6c13ee1902b92e681ea874b027fb431eb4acf016d5959af3bc6ad994b0d6d9c977c244e8c76d133ebd405d57e95bacafc8f94ef8141835f977f12336a567a3fadd5077de8594a213d1844f976bab0ce69af24037348191df83bcd8e7c9c8be19536a61abf9d0cd9c2825d619eb32ea7a04af1a9a0fb3a0b0e43508ff5254f8b450df06e5036bf2b2ea1248564c2e81fcfba025709f4b52a5af867c69a218ad06f952540ee4e57718f24b804e9cbe3d04da76d8ceedefb3f1f89fa2a621b2199f2358c5ff6e9bce078afb4ee406a2a287b6a68a89f0a342fc55e4ecff2b22ffb544e48ff2f14d3d13accabdd2200d7237a8678a8a58d48332f47e7ba5af4a740d753342031e845af262425423db90aae05eb12816d99166d547983f5eec2c451372d31cbd8287cccd4dc70aff52ccc904dd0761e8dcdf4278174aa799da7061fb65b58ef2f45d251003fcb71a37bf0a274fb878093b52c88d0cb18cab37c0b42f73f445d5526e9b649aa00a6a6066f897e95479a032600d1b49980534435eb652ea74f9196d07e90b5d375282292007a8df5cd8c5b67bce0b74a003f1d071db8677c9668d742fb1191020038d34018073635330d6761a31556d73d8884b2dea91093e9d6c85d86f674e8daaa96a69974516f48848f8717beb065da8cd6849b08526eda16de06f53ddbda5f0d415967b85e0972e6c0cfe4120068b8c805b5dd62076470d2fca87ea4412245dd18feba11a53d23e69cb45425d0cb400a49441c5ad2df626cff41d983e9a8cc5886240fae900582ccff59b5ceb2caf1c2d8022b0d0319257f8b9be6ec7153973072287bdaeafb37a166c7aa7fe5aa4ec880d1cbaaca14fbc86d27f410671bca89368434c1b241b48d51a5219b4214cba17292cc95d26add7f22c8d5b8d61a707bc65d9954fa430dbee66d2307847ea0aadc6e6ab0c53f6b2d6eaa5230584adf424f4ae3326b2d9441460e46ebc27647ca22febd4181eeefd21c8d7067d3605c43833c2c5430a3977f0581ae7fadf8533f50051c604da8b0d036cfbc4933b84e998d51c3c98f4154316aeec3ecf0e4231b136e120d31eb766a5401bac0b39bb97e012050a2bd0610a5aa02b638d253880e6477f1e1ed464013de89a28a0870bf8ee8f24d01099eec2b6164decd3e3e71204541cbe1d6ee8ad8c2ee8502c1d4cc20ddc06ee01a15adba2a83ac89c7e4cd4ada5be00bff730df48d1d3a9c8faeaa902622a0212b958343287feef4316056204ab63b2167adaae4a2b5ed93505e630a67b96900eaa665a06b052a6651f60395c1395f062b1fb2126666854a65ad860ae3ac9e184a932972b85d1120b3239478f8abd4cc7951f2cf59ce4584ba26ad60bd03293fc273ffc5d41adac37e541b96f099bab1b0a15515dd81e6a8385b954a3bc14ca22435b7ba05171a9e4c30bb45fbed066db2dcf77dbf7f46c57131d8a8a48942afbde031c3411ee21fe3f7d627be44fa92ced7cd76a30d82528d5b6a1ee9d43dc5ea669c34d5fa23d211bc15cc32b2fac018a49303bf247646f86cc6070567e9f212c72a3f7a97a56f57b17bed7b0205add887800a3bfcf8c189ad1a6c4ff3bcc8803e895896b86f3157d454983c45bade89f64194cef0874b8afedfac5c1c9d98af45d8e473d7b64d48098a8a1ac85b1badd596c5a0c970e7a641b1beebdc3c3dd6b1278ba3809966b8636e21a715821080e4f9607d7b594fc6be23d0a385779699608f6656be7496b5bbd00e29518e6c59cfd54a5e3d510c3ef96fdb7b8e19277366330a79c9cd879ab4a27a28c1ec7ecbc65480fec512c2da5de7c2c5ae37c8898847ef31f49f9bcfb1d3b39398bd9c9d9d992f227db67a012515fca8f946e0004d3da15951e48e4ca2d278b7dcd992aaea8792c6717903221dd114854bcf0ba50a232fea480eb7aebb83efe21f523c3b2ffafbd905a74b82f96cc540128bd394e2fc57def395776a6ac0a9a0b90341b8922ad449f1dc9b3683057a899664392e70eefc365a8305d7f955e0a109b0c1554fd3a37226e886abc9425d1979f1543c980603988ad6c30bd5e5862ad537a0d1ba031996b958ef1657da8928ad58cf549dc63af8df2329dc24e10a59e0a7a8f97cdc00f68c5444fae9f3eb4855d4b10b0237d9029e3f1266bb393b3fa41888db9c28a44fb48df9c68fedb790d13596cb8bd5de6321bee483c2d221df6fa3a8ba86250d24d0c6cc1fe0e6e66c9b6b8e07a0dd5702fe4e0caaa48934a4a8fa2e5b4a415be58b6e1594ba206b62f5abf956cbbb5b3ed7796e5d9269ee576f33329db033e946e57915df148778bb21c784ad049535e88ac6a347dcb4d399677239e55f9e41f47ecf1aa4391044cb148f5f1007ed2f1e0c09df1585bd25a321ac486877a74994e993f2077008ac6e39369c50a51c57e8d9bc16039c609c807f2309a76f85cccb22015c0215c2c7d9647786968302fd884df28b2a676d24a012df4057d0663c22f20ef708e4b7e1b986676a17b5ea8f03243fb243cb721d008e4b0460b694b169bbe1f645c93351771ca996f4d63941fba23bcd56dd6d41ff7a08419744d3f8f8f5c02baf9633eac851e9248150e3f2473085ff2a0074dbc1896b567398abc9d351e1464c5d4fb40d7ed1f114f252344f982047f0f0450f10f6087f5a510d5f9ebeb64b9742270da00b97b629a98eeee9768a80dc7a79663ea70249dd5a5979ac0f25296766512682046d1e22c245b401d4fb6586ef6696a7de84e7965d909b24bd4d9f257d8503151b3865ec399129fe5a1218478720b68d2fe091f23aa60076e1904e9677eb0782df8e5ebda7c7ec1d43fefc9a286f638e7d593c73ec031d55d7d28faf4cb50d1a75fba45d3acfac62b77a02d9669a19da7f5523b4f6bc56ae33bc86aa39b05fab466d26eb1bd319f4c453f545a65d52bd586fa535a1feb2c34d89f5232da9a509df645564969f222101108f81fcac99a1d5d19d1e9980f2599022fce6eea895ddc33e5e8cccf84e53c63dd5a5505cd403d0d8b05b5167537b32dd6aa798bb2a0f6c25e674eb768abe515510430d0b2a67aa186dd2d17a8ac0862a82ed980818a8a4c862a6a0a195a32248da15a481103750c310cd532543050d150bf5045247b815a25898354ab6549dd19314c599d99b3fa022b936839d50d20fbb9793dba4befb17e4516aca6fa5881e573190a4793011ce1da9a8f9e3e8bb85889ea8fea2152e22ce3c53c2c2596550e0fb827a2e2e0056cf9c2dc1707874f9961a943ee716c7d5f399ef0a95c20dd5a70557e92f30804c159f8bec1e4d2e8618b036f983e2c27392884f87e9cf7b8ef58c366109eef0506c5917952b24c51f3a33ab82001400b21f64db7ca9ecc8ca3cb1ab8efc19a4c274bfc51bf5b59de175a47a2d2ee1903ced51bc26b48943b9d8c677d5d0f68a2b2ddf1a854391c05403a1a4cf207032e74f2e96ccc0bb6974f2679f68f23266e2a91c13de185bb1264949861414546bdbe4ebeec22769dd9dc0395699127a22c2fd0c5ada2542e8cde6111d6f5c6a2ba471468a9866acc034fa0f2809795280c291c89f15414f4be3def0b297f85426b91e87b5b5bb2617631abd2714b2e5289b7aabadd9ded8d96bdb18302cb60a6d0399c1a35642f8d26f6e35821434ac05b902aa8146066c8afc490277303ec562fcdfa6936d41db853f896ed6cb7dced4b16418df49ddbd28264dd4130f0a009135623027a2d6864e877c6b9877f1b64728ca088b7f4010b4a9bf17fcc75d0f263e712ccffd0d6af9f8b326b54fabdf79417da8b40c978c9fa222b17fa6bfb0c169bc1e3a66ea3a982e69a45377669de916397dab1e9a83f5c50d620fe9d856b0fe25c5e049f74581b3de033642b6bbeb5f827575a6b10fdf9612d83fefec6e9a518cf1967d6f38e326cffecbca50d217e9fab6b8b39be935765748f03d29ee28336fa5305326dd01e364297a9169c10da99405cd173b5d0d6a5f554652e7269fd8eac8fa28ef99528f0c692123b956a28dd9f6fada628aeea3852088576d36fc9439f3ac137d5bdb7c2264219f0cf84d11df14add56943a94238c3c858776c8feb2aae05939c88bc9c70697bc2e94dbfd4005d389b27cf2fb5e9dff5ec8786b800ec0f8d7b4bc8003e7c530c87f9b7a50e23e465cf569914cabc53c2cd3c9f7851e54b9ef8a7c9296fe21ae524da97a04bb2312094fe9fdbc122ad5947a88025ac73bf74aeae40f55292f57c1aea25e9d2260bc420a5c2b2a5857559e3edc839b8e5fcba7652c0751c660d62e3b94691610ba6949114d186213645ef7409c15860bbee6d3a60b987039051feaad3a58ee4898c7ac0a48e1720a560be202d4bc917d2aeb9aa551908361ca95092daea0c5f38ef20ffd928fc73d9e5c02b90797e657a9b82ee3e00a42a2e4840ef6d9ce0e242ba043aa95169eb64e33b0e93014627d5d8d021c49e964f8207af868a7d96c4a2689209e351780509e6e4372096479dc56a4a8262ab6b84a69a928dc1176647713a92c698ddb8f440b591cb71529aa098f5b5c6387ac62f79a6619cd722cd09038bc684d19455e052aeec484fc22f463b7ceaa045c20ca7f09c56f6871d7a239be5754419c2dbb6beb100656fb5d0b667a2ed8eca66aeb03892c79c7abe5ec7e5301d7dc2f5ba3026d626fad96daafe3500353bed41bc5295ba30aa6bc5d68dfcbd19d73f2d2c86bcbde8b391e7386a27a031c51fd411fa69b83eb3edf3acb783ee0a17821d89528d2418a24bd276a61c7c9c16f0610c95e62d6b0a77f98b1d3f97fd5b95976a43635c3938467a6b2ffaa13430eaa36291b0438e4a5ffaf3a19cbf0d52664b8bef0a454b69d189244a266a10377331ff0d69297653acc7e467914de4f62ca6b510c854a56aa7f65640eee745631f95aaa72796034571a211d07b84a981552d257cf3cb3f3a61a10377e8a3c43b469a08de684c15b29bccd01e226bb0d9b33a691e4d9201dcec0c4b1d1863b4d73d035acf5632d0b86d650813a6cf27581a1b2547945cbb5e612740aef29dfaee3cb117f4dcbb43404520fda65963bf7117799961a34e75290a53be6ad82632380e6daa8247a7f17b3462366efef9a9d9a08f94035aedb8ff788f0d970588821d74c8df790d0e63af2dcc24a6ea653e7405b3ad66be8ac0f797a6d55136647a069fd796b58e4b3e9f37b5fb292d7c7a2aa026e914a51319e24b3c96c0c530eb931b28d9ca4595ae1f3af42bdc222758d7f08536675bd04b7505fa8a248001c7609229c534c7b5ca0af48f2f158c0cf9a69a883c9da58df966fb2dd1a32b53d4421cc2f8547970e8cedd2afc804fcaeeb50e858f50c2926457a02317bdc8c698ff7e95b7c00aefab8cf9d2d7de2f7273fdb5b82b41764de17f7a0ad63886c3eaa9ce8d52ec57c81f32ebaa2501f57d160ace85385f4526477c61c7e5942b05b1931182437ab4e57fcb3c618b9e781208e3422c35387b41dbc1639d583c1fa63715b77b915bd8fc4da1c749f27bef70b9dec1157dd82285d6f0176fb5db03cf3f00cf4bfe0f081e87da1b9de9c58c4037fa64cc724b2ca4c84ce4aae076e4ddc1333160c7e623fffef060a5bf490fd13a2a3cb3691c613a762c09b69cce8e9f0fee1b84faa079c70aeb205dc99ba3be0655ebcbdce027b00330c1f8287c1f3f09e71331f20a59c6b6fa42bbf56f9bc1be263dfa4dcfa91d428bda02a52428c5c6046762d16f0b4ba6a6d5dc38bfa30c74bf72ededbebec53addd52b9f24f5eadda3a51ef133ed5c0e53052a0c721bacee0d5938f9779512b8fee73967bafc1aeecd25ae4a82fb093f78075b4fd68bb0c35c212a06d60010d91f77a3851d187f3ca75d664ee41ed19277142480cd7223f2e81918534844b36e173266ed2caae1613bc18cf653fe2663a4e93b41ad377bcf5d72e7f11f4fa64dea156c65377fb3b18112da11f2f7deedeca92803566a8e05a57c5f3d4c2e5202f0e32a5643234e19ec53046142783229f1ca6c35175665e682b306643b4c02b64ae04d2580c5638f5b58ce80c7c8174a8416306b140200c6f5de2ec6a2153cdb00e3af1712d784899a9f247ebbbc922450c773eadbba235bc38a61267b1d45d2c54b4f066bbbacd36d3debe9db80aa92341f6c6025d932253a3d39a685c096fbae8750b7563b9e02202e7b89210fa9ce2a8792e8faf6383aa11f7d99587d217fac8c4902cfa0ba072e1a2cc2aba1249d5829b9a1215c609fbb1c057c1fffc5e008e43cf2766f76d8ba57a12b8a8b31c97eff9c8863634655cafa7caacce2c27d5b2d45bd1830e8fc96d592290d94e64553c3f39ccece7e09eb96793bb6cbbb34b23da9e72ef6c37a115a4c92cc3fbd18bd8f909f6a4b718abeccb3aeff99a57c928e8c545e538da5095b6e0022450c2ea46e111965f45a73eccffcb34d8fdf4e1172fe72df7a5fb52730b0c09de3d6fe9419f7906882a4c0f86a4d00dafb6ef9dd2b5a72cae948958b2b5c55ee459a35231cfd1a603cc098d4d519a316e4de5e5b0aef2b4cf38fbc7c131ebcd86b2807676d1526dea904c657b6bab371b96ad6bd1bb4c2b08c4548ef2ebf3de6cd84a86e96edaefee7cf574fbc997e1484bdaca5cbbcf77cd1b7d0333e716042b9b5a21176c7a05dc2ab5fed49b875a6dc76d8bde62bb2104c73227db674ae43fd9393315dab482f33c8590dfa9d3d072f941afb3bb410f4ae82274ff8039d4932f24bce015af5f09992c12d515867e041e4cf6c0ffb5228b6e88d760a907ed32d5866f4a9e8cf34cb08b12ec47561509b0341509a82db8f5cf097dae7eea9653912c7fbba4571a0740d4b31302740a685dd2b8cd37055bfa44ebb21d7873a3334eb6cf4e1e9ff908bb600922a79ac4512761e7ac8e8e619f87f5a0685d0de6db5b8a84d6db20e4920e577998a50048e21d834f78cf5253a6b93770182a24b80120e7af104e78a5c7950080cfa381c9243e570b62967cc00e726f7d2cc61f8f7c7f61da972d9a02ead80010ff6541a3e412d2bae93f7b509897950cfe754c16b0f88771acf48ef41ecca7b105027736fe9eafdfe02043a893b37ccf46bae9b235dbb81bca648983d2b5b18d4b72af97d225814bfa48d22c51a9f98c8c9cd1aeaf431549c02c1f2b0f5648dd39636bc6ec10de6e9f6c836b43f3afcdd622956ea30350bf4d2bc63ab9efae6bf9bcac0caec642432bdc1700a42c125d404ddab1855c042e577670625d18334c78af19e9f030debba20530b1828363824202bdb02e9c7e40751d8542305089676f1a0c27a241e08513d1fbc60b697847fb5c8b8c79ea8248209a4d53943fb29dd9010469f9ed021a1e8a0ce276d856f3a5a90f00bc7f022be709cb9e8803c1a1ea937b38b47a8187dd1b1853f4d509f967f6f90c5b15f7addfb31798c1325f0e8753f36f5f53da2df548b84863676985f21d86252845b8aad30b621a422bb92113e3c0ba1317030f7ae747e1e20b17f7f25656b8704b0dc9939a112f0fbc7b49482262fd3f85af2d803452e2c3b1fc230519f38aa73e4648fb5fc25f4e5cd17591b0a528e67dfb56db814e7935422e4ffe0858820e4555330335c7a0a320f9b3243223accb21da0388d88f02aa417613dda2d67696a9b4aaec0598814d922e5716b8bc70624312ef0cda74ad2797b0044e8e1987556ac03e74db7615189fec287d80085837ea544f57c26fed169d578859bc6217725e17ced9c00e1055d5131e65b3c35215afc6c0f02246dd595f0cf86c5cfd6c1e059b1bd3348367a1d3314fc4839cf43d697d5df3d187c7e1879d908ed9c447edcf133a5baac6349396f48c00c903634dec7ae46e5fb7f41257e9463279cf1abcd16627ef59a3d768cbcfa4d1664fd81dbb3b039c321e0ae9566948febcd56b250dc747e19305c54f1abc11b3c6b6fcaf27ff4b1a672b556c70e8048d9f25e0dcfe4c6a802171b65ecc28e043bc892bd9b15db2d9db7a93042885c307784462d7e9d4f0b3cbb805bb2f276292a77f883df4ede31da8342f704822d7e67913bf4eab516af5a2300772501660f0fd864f2455dc3af94febe4f4f4ec6ce3f6f4f424da6d479bbba7a7fd8d68b77d7ada92bf9abbcddbe8e4f48bc6593392f9bb6ba7a78f9b27ff393d3d3d3dbb95ffb79a8f769b32512644bb5dac2bdb3b3d3d6b3a5fb77f6b36b7860ba6d1e3c96539e6e508df2f2e1eff7e99f0a9d81b7129be6fc92144f2bfe6ae6d1aaf386d206bf514b8cad113816db816e160d9498d7f319a35fe7c5040eb451dab8929af63f93b0e5cb2b3f6f62d4149dff285fc6460f45059a8958c78b197f7c5b32adac65bb02f9fb2ad474c02d3f3c98b9e2e1a3460a26aa4104097238b37c4b04fe978d03f5bcc7e9fe5959440673defc921ed040ab15d5b8a74619736668dbfed349aaccd22e546f9f61611a51932fcb33b6e815d07856e6df3b9db4e25fafb8d6b49e9269dcc26a66ac213890fe91fe43dd4eb67ff3a7fbdfffaedc1bff7cf8f0efebdcfbaecabeded15c3569fb754d39abf4cc68217aa73ccb13ec01a78dae220ae47429ea44cdc2442f44b76e18f63f5170f412f0b237e25e0a4ce67d5745699d1acce71d6c65fe33aeb681fc275554a395c30e848c3e5838a45820542be03f6fbe0203a062c09908ebcfb71856197626ef14e0f08e16e445af87c48087e3a598b95aff974cf34ecb86980648298e075964d4459f2a1c018a23cab08b57cf9d39bbdf3fdc3c3b787e7c7fbff3a665dd6d8bf998aa492086db1e8be9733f010508dd63020722924c282770f60072f145b525c6836705ae457695ff463899726fe373681c093d23df5b2471a97a7711f1ce18f104faddf3cdd2ed8518736468b3d9feb631919d0415a949569c219ddc256249b3a7336ffd40ebb051b04a70fcda5a5b17f335e5a2eaa515a5e30ed864bb18fe17d008d3c7af426af44fb110aa3d8595a820b3b32900bc8b8b0670a42c9340c4d59581c5425da28c016e373d613562d07268b4883f5025822d40294c3f9d1e7eb304129ef5e83571a1bd7d648ce66d54e2e5ef3e9c55934aaaa697b6b4b2413be9966952832180f1fc3dd37243f7efa78ebebd6f6d67f9522d9b4c6959bf960b31a89cd099f6e1a7f3d9b567dfd48bf5d8566073c11f81a416ee78b588a1e635109f96b282af967c4cb8b5805d214d5c33c836fb7766a4287a6789f909ad6af6ef4e6aa5fdca81c77577d2c555e4d9ed889519e78ac64082c04de88ba46c8906c7da3cdbea47286790f83719c34453f6fa9408dba35f941ef538c9bf49d983d3e23cd614113e6d7947b12b32f6d39f55a822bd5cf43bad8da62afe13d2fa551787090865aead0a94b453d230b2de9d214a5dd1e228354df962d254a39a9ceb3eae0e9aace4d8d50448fa32c3c0061d71c7f59b7b7103f1b2ac82c909eac234c9a45cc50cc115b8d8afc1ab0ed783e15706e45dee1e439803358495c7338da1d5e0cf149933a14884ed8a88c714cbbe6678b4fa7e3792489720c0d34e135d7b074afa1f4b96ef6a43ed97dde62c4cb0843e0d40cf9205fcaa7beff388f979193ab0f4b557007c0bacc621768b2b115705d66998f45ce2d02cdc905895cecb9bd350c88c362ebba9a9bd9da62fb7028b10b5d5ee2a38f8a3a2fcc96abd25ed4b3dcb840a9053e5359be35ab11f594cf3990f49404c39e652aae9c92daa8ee09d4301297f1888323816865d49e46992f1d2287beb90dfaab69214a515c39becb56092cb15d3b3e5ef16ce86b90420ef8c2a266c8fb902a2afa1a08618a7eded25e8a22b8e776742e8d50b1cd6db7d0e676b01890ce983d71b53f8d9df871fca4a6c431b5025ea41d2b35b6cb1a0da5a639762b2de4b175e3c42806a273fa56319068ae2a403aaffb30d3c90f8da617ea52a706e44ccff1df152fd27c56b20b8cff701162f40fdebc3c787370fc2bebb21db6c5b603172a683ca983ca56399b16e924add22b1ded1ae044dac4a2dafda49ac3aefa611d27065c19614db28f6953bbf4cba00c6de5017732d6cf9b7719a3a62bd1262d47e4d89533a7e4e0c31cad6b4fbd2bec45b2036b219742980f84558af1f0cc0765231828b5309d8a62901713c973b3510aa6a8653e114c645769916718456da1dd66a988e8fd56a2ae296793b8593e14c9ac28d32b319e1b682b0847e5ac4cc4b44a95596cc2c763650d31962857365dffc57a5be987a214344db6810eaf9c41210efaa3d2bea25cecdbf51248fc3ae34d2be4785659c8caee9d83d0da50b0c636f84989e496b3018c36f5666c4a82b5b9ddb85f254c67bc7ad8e0099fde1733d8d8bd41639f2d66f0a70d5f06420a2ac897040c9608a4defdaf16c1ec838205d39867caec69450f000ba39f5177005e54e0871a226840b80cd50f75eb8173934e6d0c94ee999653a93ec365dd0de3cd2098fcf5d3028c1d8b5030d1b045cb87314c7ff225df87383b4630889bb4acca80d5e33dd2f4790b9f90444aaca6df4abc6e2a95b7e6b5dc7be706776fcc948fa445855bbd0714afc9afab74e175100c941cb83a0fbd1a26d2a6c246efcecfe0f2623610ba7a484010a8103625ee0b3155d752cba9a8c649e5aaf5eca158495d847d084e5e8af91294f499911f9cd5b0baf4858b11f4c4bef488fbc1ae02aacfcb2a407274f29f1ae07ab5c8d52bc5bd5bc1ae294c347169c053ca27b6f57b3891ab1de1231e7e9c8d2113dcc0b09f88487ab421b0d3d5a014664e117734be28f3a49c7832bfffec9775161ef336bcd36a0e7e50ef642d97d4a1de2416ddd604374cdec88367155d99e896e89b45a54b3247886bff48b865d5dfedad7953b9d6adf326358591fccf40a96635215924a54b25c6f0da3e5e19c8a329980af544823c85a2079bd85046e4d0065d3a66b68a2eaa2db397917a7bcbbb2c2e68fd5688a5152b4422a44cbc8049a95d02f85c4b205aa82f493ecbe68ee14ec8ca873aa95e51154fd5eb499e95f958b4c6f930b20f2a0d4cbbe6a140f048772232e8ba8bb4338b6321d8478484195df2b4b5f6a69526be90a7eee23a32fb01d6b02bd3ec0597a114870256729c0dd32b91d5c36ddccfef3e6e7db924f0ecc79aa8ade24e100232f9ce0497e1a05cec1348631a192ddfcaeee260d68ecc829c33cad64ef854616919b3f39679de893cab7b59f238663b675eddf3569917d5f379b011c2c936436cb0bdf1a13b604acd5ffd2077d6ee75d741576abfda543a4b8aab91b62d0bef9da963c0b91acb3ab586c91fc3b5aee8a0f613e094cf811ad8d598cf559f55868cfa6a07e35216f5e32c6797fb81f42dc7d5f294abafcde7dff78bd6c8e2f043166ab181e56aab227bc59569cc4a54ad26159aafa868369e7362d54ccc4ebf383f172506703bfd22d68aa1f14c6887c2205eebf081ca74c4f876d81bf134e3bd3144f103461ede0bda0ba8e91cbd913cdede79b20957435915b3973c11bd3cbf8cd94196e0523c1b8fd17149c9ea1748c0a6a8e7a349de1718c529115929fa80d4052cd7f3a3179b65351f0b9dc906f90c3c4d19ab8b57077bfb6f8ef6d94072ad988ebec05149234f154018db5f5508019765bcdf4fd132830d0bae6c65f2815c2cc923a9c1273c633db763f6eed9f1fe9be323a7538853643ad53805f787aff3b21acf59c52f45861e5d0e0587f04b530966b9196a8e59420b215993b4cf2bcd9dd82a325f168cd2f210376f3f46d73ff807ed19e1b14926b20a3fc779c2d1658a2cf272361ecb7487d1776a1cf1015ccdd234c9b536befd966779369fe4b3f2bbef1ae4f9236d57d5a649b2b21e9d73e98c4e8b74d659c08d0caac7f55c43afe8e456c7fbf7862ec61a6cc3cc9a6db006bb9029b5516eb0c605bbe625cbf20a091d38859765a3469a61ad3a6864b5963abbf5d33defb65ccec28f8b6822be9d8f45462ffab5b8a62d00505c8052dfb1a76c172b6cb2a7accdb69b313b47b1ec69077f7d0bf9f8b1b141400476005064933d3da33d42ea993f40cb0403f2a94b7c7b17c64e96639a04ce226c937967ad24cf125e4560116074c1c6f850ee04d1dfd3382e5150ff86008f70a71b2bd73750dbafd2b2a8b2a8b6a48d4d37169adf0a52ee1add56bf4e8cf1fe592744b735c5b5e4d946c0d679202ebe4ab3cbbd3cab64e705eb7ad7858028102fb55fda6079e81b5fee274313a28a1743214f268b6129ebb29d0e4bd9b7352cebb01490045ff4ea28541633d2b34e2d36a1716001dbd18fdbd70ac527d4af77953109c3416a27f6988b2c8c649bd99d79ed0ae53aecce02a1903494722b90405cd56389c7accbcec1602e9f2a2478810b156101bfc2613eab44f1229fd4dade2c206bb39f4f6837fe8211f6c9c95a5867d9109d82d88059e20575f2de6f12b4966754cfbb28eaed42ba145214d602ffc8ee3ab8f36c17c99897e51e1f8f611b44da0032667bd64a5263c09ac9368692f9c029084b1e30913afd628f6792dac2152a67d02be3541e3dfda2d941518a0e6f9a9765da1b0bd209f27b5129c68318da33c39349ee080eb505821e06300a230e77eb3d2132e3905d32269b929305c7ecb484ec42f4d5f08c55142abaf495347c77bb5d76fa05b284a75fc8cd5acf25b365bb98d16672dcb58551574f6554ce7a7b125c318e0e7eeb29ab0e6c06b84ea0ddc8517ad9eaa85db05047b2b0247a852881eb9fccca8a89146c217b022593bc202b17c3397afa05db60b5f100d0f40c88ad85a16cea7e880cd119708b04dc7c4f2d77db40ca80edb500b2e138da785cc44cc7db50e139180de7816912e99a1d7c704200acc6578aca44c27c3b60bbe1f4058b64c7d632114924193445d4aa1b1f5df250e1acac7825c6104dda80b8ca191f8ff36b59a4284dd8065688410be2df88729c66d5663f2de1493310b4ad2998e06c9a06370d7e19839bd091b4f4bcb227d039b0b97fdbd3cc80e2412cead6ebc7ac56491dcaa6d97a256b2fe9932bb434acd768fa51159610126cc31f966fca88c7a4cbbdd4fb25a7632140cc21f0c294c89725d531a64535b523f6512fe21d10a6546c980408a52287d9525cda7b266e785269e426113809ef531fbae47e227f2cce2a592413d9ca38161245a3edd83f8b5bd76935c2af66006d9a92e5aa7166c030b7f44599c31cf1c20b0352e35e2ac78c06ca7749384a68136251ded9a8c7ffadc554401676b5f3b4b5f35869399183c065e8cf50f13049b3d66fa5918aad741d254d4fa6460fcb55c9f860908e535e51cdfd8ae2f4eb83e34f2e481b39d76178972b293c1dc57ba4d36bdba099005554971e51dd6e579d1b680eb5beae4cf306791127dddeaefd8c4ebf0038b754b886d32f9aeda7db3bdb4fe27eb89c1c101feb624f63112e3628f890b6f7753c081744009c4ff2bed065bf89870bfa2e7209ec4215dcf9321e2d2c7895f64dc1edbfc797e182499e55e2468f72673b1e87cbf1729e2574903b3bf1646193c9ac28445679e5b30590ca8b6b5ef4cf0b31d0651fc7d305c09a9553898cbae093f8f7e505cfc76909b33bcd9e6eef3cde8e8b70f98998e4bad1afe22a5c68ccff98eb424fe3ab05d399657d0e0a688d243b5fc7d7e1b28528a77966d769e79bf866c17c927c6a66fdf78e214bf38837dfa783c8728916f7f9ff47d8b5acb60e03d16fb92698042ef9009b599442570d842cba6a172296ede0675da76d12e9df8b347ac76a57879939a3bae333f2c484284dc568f50f806c6ea249ce40b6ab1546733c07737ddedce48191c74c390890ad9c8e888ab4199e6e8940112a841261ccf4f71573fde1c0ae96a6f6af9a451b4cec11668409a1be5f4d39ce9ce3f99c8e839b5a5c452d5440d405003a6e9f163857c125d78e07a1e9dd5050688defd18857063a37201a453cecc544084d18d9ab9683da44d413178ec6f3845a3fd0127aeb545b0550e37a26d70bccc6dcd16e80c9987bb90541611d6a5f80cab8f05743e43f515aa7ea0a189d5708a78f17d29e0a75b16270077b22b72ee86b82afd63d7d31b6bce912c6080050840ea1422811468477b1c4afca4dd3b5958f6030e6d95360d781dd04761fd89f81fd15d8df1b9edb4a59c9dc9748ea8f31a5bcd64d0b5475f5439eae16d6552b36fc3ecd882e9e5673ef5e6b4d2edde23f6e845797a37b358eace317d27b195af3713e75f9b221e2dcd9e5ca6e89732797ab5a29ce2e3cb6eeb338bf72f96e1346334a2f4377689c3fcaf1f1ed7f8243d56118e6244b12fe130000ffff3feda9000d762a00",
+ "8447825dea6baa536c2374d77b65ff19": "1f8b08000000000000ff5491d14fc23010c6dff757d4be1a56718ba0e9f622898684101023fad6b565adaebda53d26fbef0d0e34f4a577dfefcb97cb1dbf5220b16f3531e89a32e1e74f0b55268410c29d4641a411216a2ce81e77a3293d21b4d8e8f2095e8c754e073213d1542082e26c4083adb1feebb73abfa09b8246ec1b1d8dd6482fa0097a575083d8c607c69c3848e5d30a002306d11e1b098efd092c4fb374cc648cff5aeaac4f658c97c1d6a3ae83c5bea0d1886c9a8fea7ad9af6fecf6b15aacba6c6b5b27b27c31bb56cf6cbc5b4da639fbbc93efccce37abd7a5916f6172b89f77b03e6c6e171fdfe3cd65be0c1023045b5b5f50e1c1f70ef6a719589970362c9557a0fa32e1ca76c4aa820600a42567ca7647d389b2e1103f010000ffff7280bcd7a0010000",
+ "93964f08ae973fc7e0fa1f1f85715915": "1f8b08000000000000ffecbd0b5bdbb8d238fe5574f23fef42df9a84708742cf2b3b2184702904ca7697fd739c442486c4766d2724f4e1bbff1ecdc8b27c0b09d06ef79ccd3e5b92d168349246a399d1d8fa561831cfb71cbbb0b3aa157c67e8b5995fd8f9bdf0c05aaed9bedf29954ac562c9763aec66e074867de69706ce80d941a9efb4cd3e23fec46e93fffffaba787d5d2afeef3f0b5aac6ac974dd52db19b88ecdecc02f5dba813560c5c01f3f83f819d9cac31c587ebb64f44c2f2806fe33a42e3e3543cce75a3d668359512ba6df6b39a6d79901b73a76fb8ec7bc2633bd76af657a73d439b2466c9fb1799a9901f5c41cbd86a90bcfb47db31d588e7d3664dee49cf9c3fe2ca31612a09d8ec77c7fee7a6bcb6bb3f48e59dd5ecb99692004aa3f03eeb9e3e4f24a5d77aaac5e357304d50f1c8ff9a513a7c39afceb743439690235d5e0c0b470d1fca1156c73808b7960ba119ee1d8011b0705ade0b1af05ad60755265e7cc77fa2356d00a3737a2e4c6635f8796c76e6e0a5ac12968055e5af53cc72b6885b6d3e13fefd984f37edaba636da41f9241d5c16b8d5dc7831e063d8bff713dc7e57fedb0ff05ad30042551d00a7e6006435e1a2a29add061b7e6b01fc02a3d75b900f272d6675c27f1af7dcbe65503668b1aa66d0dcc40d41e7ae1d79e33629e5a5c89ca3ce6bb8eed5b2346334a790b89f64ddfb7babccce73a9143c6740c7f03ab7d0f18c3c069de5b7c1e06e6f882438fac81c587e9d6b183a6f508e364d9e74e10363430c7caafae67758e2c1ba8762cdfed9b938256988876da66bfdf32dbf77cb0ccfe9013b3ec0e1b87bf39ceb119f4382b2dfea3c5ba964d83df98c76733709c7e60b92a25184cb3c5fa51713d6003deba1998e28fcf60d0c5d7ba68d1303d2e54bad3e12c5e5801cc7ddff4839bc0f56f062cf0ac36270b0df6f8120cf067937916f0eac8b1f57bcec3af479c1194171604135f0c17b0d363a67b63d9439fc91f9dbefceeb13e337dc6f919dcf8ae694bd4c14ddb6cf798fced075cce7d90617b38b8e9b643a65d73e833fc0d341d90701f39902cf3c5635a3648d5b9f3c087b26ffafe8909b26c387c208f2c3fa879ced08579f12cd3e61d17e33a743b66c0501fe35a89d63a1f1ed3ebb2000a587ba820de333ecc3efca476f45d7eb1ec2e6fc57687b2f17dc71b70863d60cbed9b6dd673fa1d60deb18d9e6977197c6db0c9a58b2267b6fa308ec1d80f77252ee9bcef17bc8c0f8fc76e05759040b11a4d580a1397e1e2624133cee0c518c43d00906b7ae60004c3f47b38e5a34f424df0efcdc00c603c78a5af7cfbb9e93b66073ba99b1d609c8fe4ade30d4c3e601551c11a303f3007bc3bbed307c51780f47b439baf9c9667dac08289db13c7b3bab6190c3d763360be6f76d9cdad6776b9b2296885a66bd938df62f065354e0047aa0ae362e10f2e50cceec2327487d03bda671ea7658b8de8181687af40c47ae1209c7fabc3ecc00a26423cb9a00d3d0f596a3bb6cd6063be713cab6b71cde15a7d3ec9ad49c0fc9b07cf0a0266cbdf1e333b11851316d44ff9248d8181a07e2ac53b6447f4e8d6f1aa260cd6888b60d474412b9c98a396e9a1089b3627df82b9f1f0c7893982a500636e38fdbee9c202bcc06de981b57ca77dcf0203098294b1b109a45dd4617257e6df7b56bfe33154dc7687791536ba7040aea9cbe7ba67f1dd930fd755f3d8ef5ea01cf64cbbd3679e0fd5ba961f30ef00415c1611ad5e891039839f9ac7a1ee6a867bd3311b38de249ab6b6d3ef875cdb2c7870bcfb1bcb015d11aa3ddcf01e50c58b9a1533303f39166e627ecfba0dc21900f16a3b76e7484c36df7b705a4e5d440fe7a81faa49ea79b03ddce2d4f36578217744aeddbb9e33b43b86d3870dbce5781de65d591d185cfc152f334cb7194c60e61150c1c519fd38bdbdf5413c1174e8587658c3e5fdd2635411946244c10cb901d001dfad73d0b12c4d5d81c7689d9b1d0b660eb1ac24805793201bb5773b1c8c6ed8849c66654b8b4dffcd800d14382af72bd66aa664bbad7c177b40285cf8f324a51b10de91cb322a313b1d29a3381f96ddee0f3b6837b03e0b98accf054a95e9c0f5e57709e7f54206385fb03bdba72e2c38c736fa8e8f3b45680df61d5effc1b23b20e2dc4f1426ccd0b3d0e40b9c36accf9e0312fdc069caa101624e48bf2de93341dfb1852ac6755ad00a87cdd313dc387c168da74ab003aba1e70c3db4b286300ab8ac78e3b77d0768fb81273679dac77ef0ef75c5b8a847b6c579645a80ed10564113022c05fc0a3e52383c9e330ca24dbd6f068c9b45b037e066c6bc6847b9f1c0434a1807b8d57930a5b70c774d8978e7e3582bf8e7611992c6a2185303abcffcc0b159bcf848eeab274eb0cf579e2c872d1bbf46db1eecedb0bbc29ec6adc416884048c6ec7442d30108dc5a7627b41a790d04a261e10f5b381de8fbc0feec3cf8cc3b90fabce3b487622feeb2a08a5e803ea977b8fb33305dd7b2bb7e61a7b051a5946a754aeb54ab527aac19d4b8d04e293dd36ad438d72e29bde2df7ecd849994b6f9b7ce0f86cdcadf7f11ac2ec7aa2ec72a0b16d5adc7eb66c1e6a2fc9d61b3f23c2be559e9bd35eccfe22f6aa3ab536ae9fcfb9dfe43bafc9ae99c7508fface9fc1bf673cdd1acedbeb58af999c67e3aec0ba526ffd6d218a55dd0033dfd0773734669937fbbd0ae28fdc2bffdf62a6d322bbd2cbc0896a32223d4b751642f998039b4f70b37d906addf6a4d4a9b06370499c12d85910ea621401af0afafeff38212347d5ae3200740d5753daa2db0b6b1bac08292ea09d0aa6a35616cba06e03438b82e5a3be665439dd2897e8256698356ef2ada31ad5040ac56b506a5a7da40a7c6c1be56a5d54fc0cf27a0c289577fab40379a8878450d0f5936e0df0a07373e6b755a75913176c505e1f25cab52e3516f72d0a901a01607dde9601f3360bca135b441dd783c73a1835f755ee4e95a9b52c7d0be50a367684d6ad4b553fe0f9f30830b515b6b6897d438f8028d63370d3e0d97fcdfc3b1ae55b5c125ef6e95ee97752e27a79a498d4f5a831a8eae5d19bc9144835fa1c1bbdc06afa8b17f906ab02ac6e28a1ef60cd1ec296f7635a359adab1be79fc5c4f239dbd47973f4927f3f31387198ca7d235c4bb53bdd40f932a8f14920d768b5033c9c72e881a1ddeb940e740e1fe986b6a653baa16b35cdbf340eee4266ab1cc5c6a973f00faf6d1b06cabe418d4349941af1dfbc11de5b3e819f0d3e5a8c7fbd150c21145663951a2df1b546ab69eeb91841a7e22deda7d06ab4dafa14b5dfc4969a30c72852f82fae0e9c049c1c2efa8728909fc201333e5722ae4dbe4e4ded98d61fe3e3aff0000dcbd64cde4eb5ac23b8462b0d2a5632e795af1bfaa5c61b681f72f1b9338e145e60a17de14ab1ee55467c9aea0749e1f341f8fa29e173a0798a6bba418d0a82a98436a0d75076826595a8accaf96d685d83eba60d5d3ba3c6e5ba9192e115036a767543e3846a2543483ee71ee6c8089d245a3f07291da5a96ce1f8a1e8f6f99fcfbd2a6783d7db5fcf5a0efe6763c4d5c9312ed53f454097f5f087d17ad47f9cb43a30fb57b61e93da06ad96f4f314ffa7b41ee8e6f711d5769a8f5062dbb4deabce24b1bcd616b47fec56729464b7c237c9c050c4fbf31b48774363d43806b3e214ba026cd4618edb15b18f5d52fa05fa5eaf715bc1d20fe0479d6b027608df1b302847f0fd58fb42abbd03be66dad4e8e2e6593fd54e354be7ba1bb7c7335e839b1d7c6819fc31fa55fc4bcf01a5a981b279d03fc759e33c8f8c7d0598e0914bc2766a1d9e47c18adc75b85601e168e1167246ef74b73275191a7706ee867c71d016efd47b8e66acea4975d496a3dfc439191a7cbaa02cd25435a1334046cfb8b9974268c86a63fd4d64a049e959866a43c9eb819517aab5b56a2623d95043e931f60a86b5099666829bcb6ac8290d670e6cae26ad9504f2c1776ae4546bd333578cddd17c33a1d239d3ce68b52f1add7f0d9d2bbaad7ba121c6adc07d2f217b5fb49ab6a11b95565cf686b0724786d6d61c9d56a1a714166a57dfaec23a3f53e6d9afc2baadc09ebe0d9358edeec3b4aff271acd9a08fe81aec0a967eb7cf4940573e03ebd5fb7d90ad72354d95375bdbd4231dc7e91a625a2f29ad72654bcdcd54d5aa67a44d48be0bc3ef4f2f5b2a5f2221806a2ddcf2cea811ce58b43e61733887a1fca2bdd729ddd2f9c097f4f007b7f8c73ad74377ba5d81dde23d4e1d2ca6cbbb7de8935fe5d5b6f52fb8ad2370c2bb687470833bd12ee9a3be194eb5c5d7f3c1a63ad7f0cdd295693753b39ede4e783583ef6094b9fbc9f145bf291cdf178ee79ba89e7b5d4eaba3cfc3074700a31dbc35e3485bced2a50ddef8beb6a1f3b2659d77f91ef0be1ab4760870635ffb425d7d3d9c812eccc0fad41930f613e3bf051abf9cd2f89e9e54f91baf51f96b357a7a1ea9098b9b29527a39a40b903b9d6fbdc30a351e2ada579dd2da571dbda3894ee950d72c1d76b6d57dd1e733ae60dc0c05631a46a2a7cbb028ca71fd72a7ffc5148c115330962ac97207019bda3050c44eb9be00e45f134a02bd68e8d0e7f4d25fd52f51890c61e455556194314872c9f5dbd5bd2ed44195afce46425f0c746a47fb01ac94839e315549ac19c66562ee9c0a1866153e7346fd316340bf82c5f6a8afa754066dfb1858d9548b36f685b5801ee431ad6d57b4079d9b6c300bf73a1fbf3a58ad077558fe9707b12aa794367bb569248d712586300f3bd51197aedaaf8a84344047d5283dcb6ef60cd6718df20a5cfc7863284796eea6f8880bd27972b54f0c5aa37cd5190dcbd0f8eaa0a7dcb73eac712b94a6f6b71550546bbaa45855541997cc3b10cd330dcc9ba37b03e510c3550d908c3aa5b76092d71a9cf040e7444f7bd5a3ec16e1b7fd42ebd348f637b103486b8b936b6ec132ab0555ed583ba5355b183c5fdf90f6319f9933fca749eb23b1273d7ee7fe719287b896dbda25353a180bc5b13e0d3126429760b40076dd1a67d318ebe7e2c7256db87a06cfaf64e98a821a372e6661a9c97b30d62fc48f2ff4782c585affee62f285db0875eed92618fd2a18bdd7b9524146b9e234cae81bd62eb54b5a135c948d6787a3034bed1c2c80062ea3da956619f4ac27c4727bdece1af7424b60e9952cc5d08757c3e6bb3a2dedf72a429583dc1e94a7ab72d3a0094dde054dbe6ea026ff3c9f229fc056dbee1d4c55e476f50729f299d8a9aebf509173ac7b1db776aec95bb99adc36560c94d11a5f2e5cdc783f0d484b69409b55a4c3671cad05f0f11a35a1804f293ddb476c0342351cdc83c61b6d05b3c25be8eb308aa7601f1f083d9c7654b9e840e38d09aa383eea86aba3e41ecfa2ff87009c8017ef56932bab9ad60007607dd4c4f7263ddeac289bdc5d6a392fc3d9940f91b98bfb8a58056bd0ec198d0f11784e2503f744b068604f6cd01af07401b658d2f3abf20d83b642520d38df38a6d4c54094a47e06f1c1cc8dd3ae6054e08affe318b4be29100f5fafd3e24187db2dcedbf19da0dfaf7c373df25819877a6419f44830558f189f125ac4e2e8d594fd7c0f2271b95ecd5e90464f35797a2969b02a7c9026e8237fd54dcea141cfe5b112efd0c168ba87bb7cc95dac28b0dddbff3bb0fdf306b6f3fc605ee7fe00b78f71faf06f7800f1604b47ea651563f9805b21a32a0ed021fab6dc2b3256d5d0c5e6bc8beb4dc3a65c6097b91eebe23e3086f39f4e469cf4f58a85ffe38b7847931aa1f61ae9990671f53357f6745811fc7ed5693d8c13ac57be57bbdc7a134dde6a5f68230cdb6ece6f372a6192819150e5cb20c4b00d1bab15e10f51e3964b0cbdc3f53381d16fd4350651e0636ad0cdaa5ad2d04c5a8573f370f2d7f559dbf912b5f3b58aa2798987199fc35f26a56609a88fabd07aaff22c3e17b9ea6635796ae1ee278f0fad7dacf6055494bd8f33f585f62a1e94c059454638c7d84c4673e22715bc49072830beb6e134f1807af5fc956be2a818e114d6781f8c6d0cd49bb7181a51c2da067a11dc9cd98201a9b5404599dc210c0f6c1eab1906864929f3a1c0ec81a66c620684b032206a87457cb84b156da5426b4697abafdf0e9f89a31bed64900b862500f135ceb42a3d3e474b3b6b2ceadcf37854437f439d2b832aee3ca6f4b22751bf8ea373e15341b1c6659f8fe6b88a83caff39900b25a8a4889cd6a2186a2b3ba4b8590d234c2113f0afa9387f350846a7cfcb85021ce8dc664e56f55e5fd59c567559a78dd0808ace634e8fe1a00ac89444cf863a282329630e2c764f4f8fd629923ea6c6c9dd616a1abb8730c3a3b4ca8a075e205afaa0d386ad1c2f1e2b367c68ff53e33d1c9fc1a669e0d99a58e661c653d94856d97f831a5f754abfea519d7ee5f93a189d8ceab833d409bdc3b08e37439d2f947e896a3c2abdc1595d15c2d1d569b5a7975527ed2bd825bf063875c3432e5e77950bb1b4eb10114d19954c59e49e7e22e61b72beda42b5570dcc679112845a978252a55a43ab1b478f86a1d520f6f01b97c02f1413de8710ad7b0fff3271aa7078c8ab7fc1ea5a83b6bd3077ad4621edbd7a2ef2d36a983302f62d588025e380039b607e9b8656d5565a460b4db6633e480da50327dc0ac3e8fb7a4d6417f07636f88fda2656e2aeeb57d1edb012ea44ded74b4a07d0b06d08c815ec08355a5d0df3c16ad438a1d248a58d126e63389def319acd75a56d040d80dd433c2ecc93d9020a3ddd8d156e62b4e01e423d637d142b3cd6ce68d55612fece1e45799d4f6c6bc847c2a80be0009cdcab6d95e26348511472b3b1eaeae3187013191cf01adc176ca3f6a6a78f316efa598c6b355aeb57c063c14d7384dbeeb69e855c85e4c24684c6ab435ae869bc825be72565749c8099ba40d8e05e38bdda440b79b981112cee518cd07db76b211e575235342e7af5089d5e95b9fb63dc556a58a1ae56a8730cf32e86ffc8c5c1d8e6da995710131f851ace3493d6d6397ff55f610baa0b5f85abcc512de6af71022b8798c909e44ef1386a082a445bd169d51301cfc6a83e53d5af9049c2abd66c438ddbc8604d19b357b4285a631fa4654609d86ca2d16555701f7163f2d283a0cdd858c6a8cda812ca37ae8d3a356cbd0fbb4d6d1dcbde5755943b381a73f52eda49222ef71e5c89e31087d3e1a6847418979147cebe71eed5434f8f1a2bd8b92e9f8af5caaf9cf15fb5b6c8af5931b433cd82b435053ed4a976a6dd1b74c2dd9f3aad18da17cddfa79671044c80f2b987c44a570feac8c415a55faa38e235beb21eeaa157cebd4dc573ee623af0834e0dee18277d6a5f87ef98687cca558281f9cc356afc66007f10a533fabaa47586a44419a7c00bc5c49f72fb2c597159a7740551577583ffa543fc398a7e56f197c221725543ae04c51aad0578c2e482f7738ad95b6d252bf95109336c1fc2f73510ffe3f2a11c325b5fae8b0e219f773a6e532678f2adcfa2c14becc327d18753fe73553f09991eeab45ee282513df6801f08ea55033dd4ed67dc2dff048791d486e3480b75e81a2c1e0f957e871b3918743650b7500f765bbaa187ee7a0d8c1d5ef415c76c197a5b0e37090e42bdbe8da0f52af4618014f8f7ae2eb6948d2a1c39afe1d21deaa3635478b07bd3affa572ec6353c9fa5061e22bb988d86bb0e64bdd1ba7530dbeef3f518d8f345c0486c08ae314a146f72e9aa96c23d41c24bb866fb0761e30d6a8c0c9193078aa9c9f77eee4bc30061bd8938b5165bfd3da8f94b7c5850aa2354feaa3a6aa01777304d0d35d7c5b9fe91587f40c53256712027f110ca32ea91de11a4e5578727e0de52a480b353a7d531e690b7718f1fc3548e437527293ac051fd5192e49a787802c284c190339158b2a5b45a03d5421b20960eda6ae37a9cf236efb1b1a9bf87e0de1968b56600fab1af27917d8cfc8d78f1f1234ad54315c478a8f71ba87881d30186a7e07b1fb4b5abdfe349850d53700c6ab4a723223751a6c95410cad4062aa47bdde1f50c5bbf3b01b8a3084d86acc9e2f5b8ac49f836cada0a1fe751a5c7ed673009f721fa0a11efb31ed679e0e6aa3132d60d15e5a1022ab48fec744fb86a3456b9b42a4813ccdcb61169027b2e375eae2aa57a8d8ffcb2eec108b4bb986e8c7b2908c57a25b2c2e4594c135426f8b0c7b47ac559b893f9a057d438ac60e119ad7ea672c33e3d1022cfbf8f794bd5479c36118f112d71893cc4547c3c7fc0b1fd958ffc6ff034440dbce44b80b4ce005297906a0b92586b605099e5537c5c86935e8102be502297621360d5f77038b5ad0f81c74b34c21ff0ac670c0e63a00fb89d553b82857386419cfafa91766aac1cfcf6fe4833a8ad83e7e9e8902d498f03f4ebfd6350e813d85ef01993e3e078f6a23abdafac83000afb6a8c3b4cbf9263258d432b09e458ec1ecb3aad79735a4909f15614d4b892652749fc3b78e6c6ae4cb39446280e9f320ca580371f3382de1fe418417ca368d8b8c1d7c3c076fd57ee26e0604d2076d0080538146f63841af0b28cc3bd026903c7aba7919a3fada0f1dee01b9f0f72d27c8c61a366e1ddd9d641ce1d9c481d34f4e93886bc8f435fe77b3a1576169c0142c1f128868c9b0ffa4680dc965b49bd8e8bab4637f4cfda295dd7b94b493f81c2a70d98f9234da43f555b22d654a7c649acec8a565b202667908cc2fd8e0a3dc4666be2c4f398866c083a7048d747f1e2fdae9ed4a0de8114abfda81eef6bf556c6f06aae2e1ce03aad7eaa42bd68973c90f5aa27b0bd9ef30556ff55117b98bc2f779f72a47e3b947a78842c92faeaba710f8bf54bffd9aa70b8a254dd34061831b6f3aa6e8655c196549c9975c381aacccdab7a6788aac2d6552af72aa85f4c2faf7229c6b25275dbc010e9719057759c53b5b63da77a48585a79eaa1e9262cacfefef37e14eade4ba10ce3eae17d55bbe4ab0824f972948552aa61507b19709ae32c9ced1a268f208ef99885b359d318970fc4b92a67e19481cebafe804f3eac66e16c55931acdabe668b46530891a479a7cb201ffc533bc36dfbc468d724575eb065ce136b42d486711f0af556a5ca9486b7a456bc0e30677ba0abf37987606872da3049ca6e0f755dad52be8385e6acb555a973fb62af44afe1856a91fe17dad52b3127a9bce3e7574f96b799f6b51f1c3daa72b868af8605c72ca816eac9edf8270f9902b70c447ab0111b80a97dc0a04dc1a1070bbd41ab47e1eba4403fd42041c6bf44ea7518ceb01dcbb31daf0f6a1d0c70d48a5e5a036ffd7e7dfb90fc821f0882c2460188f0819403691a5e34930805643b7ab06c30c59ad0d712ada90fed62ac413c09b6c0a3f0bce8dc170e5fe30adc02367b6be8a5234f90453821e2ab81852279e41efa0bb8c52b68afbe91a2c91c0e81e71840d3d7c2ae6945bee9b88b3f5093cb0013e202b8e852129f1a88418dd336181f39db02198b721840ba9839f4508e3e193788ea7c1b91b63e58d6ae8ddd785e7691d4183bebe8f76fefaa7586dae610c2f8486d5aba1bcd68533540d3b780a34949fa8b93e0b10926d7b87e8828bf0d857880a7f29a10613292fe0d7d602235e1392e06cfdee2cbf627090ac402fef1a90d25c151949a26c951ba886ad6f66b281296dc8c67ac846020767a2cce7babe8a427382de323acbf191505dd40d6477a0af37d00517c9d01bf8c4146cbaab9882dd8578c7bd5e13e9275214b775d19ffb3370bc20ef1e83484214cf5551bca2f46a95bb7ec61d6c360390aedb657c500cb6a6eaa1f6054c8e98a4fd062602d32eb9b58ac9539008fda00f0f2319ee8532ec9c81e778d7c0d04d1880c99361114ca52548041b72433dd14fdb98ab9f26a526f6d37e6d3ffb879cf09a3ea947fd74c37e7e8527e5da6e18c8e1fddcaa3fbb564f310db6418dc300c57850134f8d53e3b35812c34fa87b8ee5426d631ebe7b08af0650b2b78ed55cab01762976f25b97496dd51e38605f2c7c4afe0e7f61e3356e1e8db1750bc4fb14f6c1dfee0e621c71f1d14762a66b32465717fab70bcfd97cb98308c0b9e88de820d04bf6f0197a5b87423fc141fb57bd7c1662827ef2794f6a3d0c5461cc0e7732a3a78b49100d9da1d62a255a02f526b20ed3da71eb08471d6204550c7a3d56440ffc4fb0a47c5d3c215c0b8decea26c459cec24cbd33eeacf46295eeb8ea29d57fd5eab47b78e41da865dbd5d8c188808a530348fc191f3cc675679b6208e4715f8d3138e032d7b771c856ce3446d70e4686722a5097bec5af916db97ea81a9411c3e2d484d6f65162d0f60ccdcb7e454dab8c0f915dc7281986611b8f8798dbc32dcfba483b50b328cfc52341898cc8cbec8c4863ac87030d6bee086d6b386b3fa6b5551d73813691e1a0aa3521999b23dd7fd26ab48759545138feae86f1f8da6f0abc6c54b975a5d315a3a980b7f523ed525bd3a96574a545d655cdbc950aadc91f0f95b801d83378f5af46acfa5a857e8d0cb58d0a777ac50f2766c36d55a4a176a959557a6f44c69e5aebbd6a062e57e8994a2fb216efab4ac9fb0afd52514e2386faa5766904c7b7f2d0b28d814bc69d4f5ce04d0dce36be609e0a24fe1c0aac1a6df475ad4d0feff51000e6ca69df08b32adb60548013db35f852a728cb5a9dd6bc0aa67128c7d27cae1ab1a4f47a98bf313e902f6d69854962228da3f6dbca8138e7e596997685affa64859d82e9bac58de5cdcefa7aabb5b565ae6cae6eaeae74caebc53b785328bee11fdef36d07859ddf0b23d32303d3257be4dbb57d1d5c178a25f3f6bab04336b7b40850bcf393300f00db0a60a9f3c8615bcb7198a81b07df3f00ac1c8785a831707f02b095382c448d810726c056e3b0103506f611752d0e0b5163e0c006d87a1c16a2aae070989451c121d9500061c508d66200d85400219202eb02604b0184480a6c00806d0510222930e8cff6b20210482acc0140590184480a0c84607b450184480a0c01ab0a20448a606d988eed35051022293004ac2b801049818d00b0a1004224050632b5bda90042a408d6419eb6144088a4c060eeb6b715c0921970587979390e149513f0760f81e5385022abf0b079a5b51162ad2810593502b23e42561588445380f652b386c0b5385022c7e0e61081eb71a0448ec1718acbcb1b71a0448ec1bb2d046ec681123906b71802b7e240891c878ba1d88e0325720c6ec3f22d9797e3c01059853b08292b1089a6000544991a7fa923eaaec681b27a0c3e14c0b5385022ab7009549a43d92c2b5323055305e2cc96954991d3aa006f714ecb9b0a44a229400b215b0a44a22940310edb0a44a22940d03ae5956505124ad74a390e0cab27e0b8e65656e24089acc22550696e8290550522d1226057b0b4a640249a02ec20645d814834058872bbb2a140249a0274064b7d13b7acf2ca660a2eab284538d72b5b0a44a245c01eaeb2956d0522d11420cef5eab20209d154204ee26a598148340588bcadae281089a600274be60081ab71a0448ee0160ef8ea9a0291680a5040d61588445380b8a0563714482860ab9b71a0acaec22530a2708792b3baa540249a0244e5bfbaad40245a04bc476a6bcb0a24445381f708292b1089a600719cd756148844538028816bab0a44a229405cf26b6b0a44a229401483b5750522d114202eccb50d0522d122601f3797b54d0522d114a0e06d4b814834058802b0b6ad40249a02c4c95a5f5620219a021ce02a5b2f2b1089a6007195adaf281089a600714ed7571588445380a85bd6d7148844538038a7ebeb0a44a229405cdaeb1b0a44a2294001d954204b039cc1f5ad38505657e112a850c0b958df5620124d01622b1bcab0cb2614a08d72b2515620124d01e2946dac281089a6007190375615c8524bd45d8b036575152e810a059c918d750522d122a06b2e590273230e94c80a5cf0b9a940249a02c4a1ded852204be8109437b6e340595d854b6044c1c315b7b9ac4042341588da60b3ac40245a04f451cf6fae281089a600710a36571588445380b8e236d71488445380b8e236d7158844538038c89b1b0a44a229c0af08d95420124d01e2b02beeb9ef2db5279e68643b099624d4120954a8204471dd7db9ea5420aa36c56df7a56a53810f085186fe41a245c000b72bc55d0fe476a50271da14573d90d31603a29c2a7e7a1059bc2ab48b900d0522d11420eeec8a631ec86d5d05f6975c81b915074a64152e50b755904454a038cf8a9b1ec86953818f38f18aa71e3cca498f41713357bcf5e051b11f15073d844b2ab122098d080dbb4b6d41652d0e94c80a1c578de2c60fe5aa5181a2ff1b0a44a22940f4da14577ef8a8746a2b099624d412098ca88c500528eef748aa0005385e727d3644a76e4571f643b8a8a2164d0472598148b408f8d81363baa2f8f60094c83178ef1e81ab71a0448ec1830704aec5811279edda7efa706df3ff6e8736dc3145e2f7062e7aeceb3b8c238e4c8f581db247326f1604444e2bf05830f46c9271cfe0a2d5e1284fb9ada9b4b051eb76f11f19948acee2c07435c211052632c8c81eb1d903815b5016af0b8669db4e406e2dbb43f0ca42b2705d20ef794df29e5c1716ae0bc8f675c08a6da7c3092c1c9f562e8faa3727a71737fba7972795058111f43ce78130f8f5a4f47560babf7beceb1fd8b9789f8af76ce2933d92d3e5069bf88ba20b821adeb608f5782f61c83ea4c88aab18f3e6e3c3b58dfd2d8a0b1a5388699230bb2bab9b1f0a5ac11af05ae47f89e9937366b60372eb3903b2e0f1ef0b1faebd6b5ba0c87b2e11e3ba907507e67541adf2cdb2791735e2b47ce68d98f714d61d38adf112b4216a402d3b60deadd966042e8d23df38901042e41593ffda89d8806a4f61ddffc3a616afa3fb28af0befa0246c9cffc04122e22e4a02d7fc11bcda96b071c0ec8e1886a211de53b60bcc68c4b4271f2396f0be329851014128cceca20ae39f5da4b92f2ea0fb982ce71fc1c5b7a067f945b85cb328bb52c48b359f52744b5308bffb10fe7a9243f5f78cc38c8b3b8affec290fd9c89e73bc43b5286e507d93b9e77f4a2512de2b46e0423a226eec2481c34b3c66fa8cb8cc834b18ed36d3486b42f01249cbee8a3af2f2555f1964ae9933ae7985132ac14e78dfeb4e7c14fb96cd1220fe1177c1ee9065b5440ec593167e93ec248884d7c62a14a24a70916ca242ea52d9cc9a53ae9915f84ff32957c3f43ae14a81d2a596e3047ee0996e8997c557d9f75d98618d23cb664f71a660eeeffca595046ac6a43fa9bc45977ebfd1e26f3bb61f90e47dbe642fdc54f15adf4549126ff74dcc35dcf4bb437e4f8b9dd5be4f224b0111d701ef90c01b322d0b25764df00ed9ca440aef0ece2b572e14de21cb79ed4c43794a41e445c4397d139713ef905bb3efb314bdd81afc23467d923794af6c32d585695313de7fbc1319618b7085b246e046658de085caefb2ab93489b1f9b41af68b67cac1e29d3e9bc91d8b49673274d158eb54c24e58ae71c398bb7aecc465410de0c9d182d794b74c628c22da4eaf029d7476ba4630666ced8f5598095c91ea015c32ba67f572814d5cba6ff28027ee6d08a59f8f73fbf01ce13f9e73739232a3d9c9da77fa7883c656f17a042b4ac2deadd87b7302b2e3e3581e877b52bf87690694d404951773a93cce20805aef5fe78e199b66fb651717e621e69c29d9abb250527978e3f30fbfddc62feb9f8d4dcc9316c12d7891703d77f2ae636558adacac5e11a86e06de47bdfd6979f4006f7b25b9777953f8586cfdeb7e446f254ca1ee152fe1063d9db1ae0ff6d56813a32d175f1627822c0c2df26047cfe0c1342b9d33f738bfbdbc498d1c488c47931616dcc636e24e464757e9be4bfcd90c81af7b44df1131915c76cf06646051fdd011b903d322de23060830f3fd414996647e025fde4d237bbecdb025948c541d48f3abb033628c24dde963df419794f1448a7cfc81291bf3d711df83bf21e80831bdf356d5911416db3dd63087bcf217071f88d3ff1dfe5b2f456b654cd20c6a48dbb0f6fda1e0e6ebaed27b27864fa0116891230ad5c73e8b39b6e9b944879193e4f03ff1d5922cf8edf0133dd9de7d17e3f6ddd890661fc1cd831fd278dd4eda54b9f33933b11efb21559f839678169d9ac9347226fe69efe98c580cc2c4f1a8fd3d823d32ccb011b3c6f59e651ff492c4ec786f1f772cdce10216eb29d3b0f7935ce9d8738aee1f4f3a9f7e3b82228ae188ded50eff9252c8c570843aad9354469bc8af4dab2eb84c57f82b17d64f941cd73866ede784984c408cfe537c80d26bbff61f19f12b6c72db062fabd96c33bf55d1deb50b4b357626ff5a3e463b7d45bcdc6e20b01983e31076cefdb7561d05a5abd2e3c4dd9079de9ca3f7f974d614ddf71d3e8b831f189ca73d5854560759e66dacb92433113229965145215a2b531323dcbb4033ed8b7fda1df9b36dacf932b722bf0e32eea96d2c7dd52a2642e26a3cab38f44699ea1f8e9c64d68d89f7ae0764bb388e6b4ad378d97bfbe73d9ca67e3855a6437dcaaf8e8ffb856c30d62fe56774bd93af7d566ccb7069b80a2ae8e981d3cfd4927dca2c6bee30d783fbd7cbb474189d7ad8eddbee3312f8fc958f98f31c9eab63b9c6e954418afb3197829533bf8af9df880cc6c59c812161faf67ec0ed91833bd76af657ab3db1f21ff43b763060c09903db2c8de91bd8f718344d97863ec15d5ba8bac18985e9705c5c491d4d307b5393666ed61acbd1d125b0be9e6ad5bb2c88af76c42feb1b74716aa7c9e16de0933e9c34c8cfad01cb5278b797ce58723be61658de05fcbee3ec5c3132c35e333597333a45f7c0f634d591d11e590f0f37b8eaa0866d8c9dcbed9663da7df61dede7581763a1ef3fd25e27824884e7748cfe49bfb2cf4b845b004a1b2b723d7617edbb35aacd39aec5d175aa66fb597cc4ec7b1cbb3110179df1362f2441cdbe8997697091f5c5d23cf78eef871ec069b5cbaa27a6cbdcc541f13615827e4880bec73f5b27dfbf0b3ab28cc373323be6f66d8f7da5b7ec87e3c9f77fc8a1df8820b4a5e4b50f81fb23f1e5923b6cfd89bb8e7b02704633fa4f9ec6e1056ccdf09e6d1f25335fcf3aef81c6eb8ea82f3ce12dedbb9bcecf9f7af644fc9d8dffb565e99ddefdbed6dc41207764bbd8dd92b83cccfe708063d663e1ffd8857c90ee04cafd3f97860fabddd52305f6361e5cf7c939abbf66e694e5e774b2f198fd6ac51a1f0135b7f73f2375763bba5d9456236fffe79df7e16bf7e8a4f9fcd46bad9ffb850fc8f492f49b95c4f3961e914620ea1681f994e27c4fb13c3dc212b7f7294fbc2b4bb7d26b9f9a1b1eee7c37dc2b5bd753c62a283c2fc8487e293d684f843d7ed4f2cbbfb1cc1a0c72c8fb41d0f93ba3b96dd051787f9b93969c06ac99d9e93f692085c4aa8734e0593429b8336fde0f3a267f9d27e24d6c0c5d47c480622964f7acc1c59fd09b16cdfb53cd6e1a3ba6b929ec76ef964f782c0f5774a7c470a40628a8ed7e5b31f03ec96cc8f99e398772cfb774cf0b998202f9856e9f5fecb5fd51f3931477f87ec7eca905d583d775b02a1b6ecbe653362fa5cbf74ac51ae933643982c98b86cefba10b071705d7851d4281e5c13f313f418c10db2582c5e1712d1a93c526a28900cbc257fb0b4725d982b96346fdc2abd25ec8276f8db487db5f27e4548a8e95af694d112c56f9305a29b9d6e6ef8090a33d2aef9ba8007ffc2398f000bc93cf0fbd826bae439c380794b1d67f0aa046d32d32e4220f93568f7fe95c83e754dcf1c64a5a4729b6e87f88167d9dd78ce6b7a0d7c9fed29ec851240391b326f72cefc617f8efcce905fe9c554acceb133b483a4b2ced5fe1ef3592076a977f36c1817e345050326a088235ee4e39bd027e18f2e0b9ab6e9fa3d27d0b930b14bd0bf8baec746d0bb1d223ac921cdc00cd8bbf48e27b1d3edc23e3895b18c674bdfa8a724991a2cf6387bd8ef670fc7949d95934e6ca66ad31f521582b146be7221bae93b66e74db6e2e73dc45c8f2212ec6c933fcf93cc77fbc4884c4d49cd4db5e79f604c7ef965aa2337c349610cbf95e395c5907cd7b4670b6ba19a0e9371ae0b7dabdb0b66382b149f0b6bc076c8b7484d2fdaec8154f8f20ac6c5c01a303f30072ef95fc8057ea791eb42a7531c0c8a93c964420e0e768e8f777cffba909fc51ce316378e19c270cf0ec0d4132af593c958e87e27e1b9b230550ee691819747dd674ed6da7d41f65322db0a02d23b5c3fa0f7f164bd28216b9e44ac1903b43f70109a4edfeae020f8fc2bf91759f8c2fc05b243164e9c85a79f6048668857ff15e42de6e1709f6ba9e531f37e7635069f0b6f68dfcff0fc410633f63d099cbd6fff2e851b5e291897fec9673ee0449ffe3d7f6e6354792e5e4a9c99394e40fe7411247f4551d13dd36ef7de5a565a40f5a5c2226aff674bcb7f88c29a6b824526d45b499bd9e978286fe204e3a5021756ffd9248e7caf557fcc7cdfecb29d996cf01837cf3f6497f501cbc1eada6630f4d8cd005bbfb91566e29ce33e1f0b3ffd529fc97ecfb6dddffee0f05bcc0726bffc4276c3509b7ca3d3de75a1e5781de65d174a1fa73db3f973e4b0ff1d5afd7943ab33443f5f1254a57d163d869764050a7fc4011df90b8756c54efd570bab0ab6ff5b62abf37597fca901566e63bd34c4ca090463bfda67648ffcfec787e4a873da19a377eb786491d7b5c81e59fe402cb20bb92ec560ec17fbccee06bd0fc47aff7eca2b348231d993757eb7fec87c3b06b25674877e2f15050e3f4933ee9e4df6b85504e338dd7a98cdde798bc8e56c76f954cf0ffaf3efa78ff2fb0c76f2b36f1698c5844bbfed25fb3d23e475217bb1e4509e6149f3e5038612446a17bf2524ec498de6fbef4440f7e97bc4f0e78ee5c6fbf0afe9cee87cd1fda967096afb7ca862e398183fb2b7b7c705f799d307c927eefdca33b90fa6675b76779ea7728fcd7111da8c25c3991e83d736d953f3d9242368683cdbe6f3cbedd5d9e92ff0355ffd50f337548a33bb76f33ea9fc7659cc7308f6ce9f1cae793bef2ceafecb9dd798a9a012fca9dcb89fd6ddfac97c0fb4287f0eef636d796d7e77e3d93cbb59cdd5b74bf9266bcb6b2fd9e82f7a4ccc0719592659083bb0403a5687d84e402616eb77f820100fbcb3ec1ceb2c83e0bb2dd0bf74bce4c7bc2168b61772be30edecc5af099de555a4af50565687d981154c42d5124f5efefbeda17fbf3df4efb787fefdf6d09fefeda1e2510866757b2de74d9e25e3a36a0b7ac7f0ca6e3fef0da2219a78b5b75fecb2400df3854af55d2a4ed637fd002e758ab5536c0f3d8fd9c17fcc93de33f988bdf5997dd66f7cdc8ad66c8fe9ee9666a0fc831f417f23275f3c340201b9797dfed7a406f0cfa967752d7baa939df5993b9980c8f96e3bb6cd4037de38d0f8dc29002f3bd3ff2ec10ef29f230951a2084cd34bf3337ea2c999f15d793f500df4363e9eb0e0c1f1eec9e2c5b8743e7e37df4b28d03f71ad7effe549d7f0f9b670e104667f67ce55acda102025ad49c0fc9b07cf0a0266cf96861db1404a6fd3bcc7ccceec6dcf9a06aef0393b976f3943069a0faf99a31c8be48405f553f2cb2f79160b941783f10f9dd057f1eacdc1ebbc02107fc9f6aabca125c990cd3979e9f52c6926ff7e63c84f136afe167a24792fe208cbffc41770842cf86fed3565a700cce641dd3a5ed56cf71617471ab94f3f0b0ec3a13483c7f9bbd2ff8303fbfb2719cee23f4a1f13d915efde2a901c8de0b71853e24cf42359568f9c33509e5e75d22cd47d7f428485cc3ad1e0cc1c6ae69f186f19776fbe69307ade5535f7c29515cc51cbcc550f589ac09f82ac627e93ef46cf5bdf1241ad365bb05836720e4976d0ad30fb2e1a199182a78e6778a0f1dccb7f628d64bd4522576965e0c639661dcb833905de35d27cb082766f4aee602cc7508a5966053954597dce7ecaf8b991c8ae15eb527eaedd73c4458d2934d796d79e23b2b6bc169fae70a13eb7b1f8502d6b578115dbb3f8ca99ec70e5fe4128f648dcfeb54314e1fb30751bb29f7833391b900257c86389dc98e2dbd2b9e3cc9ac6a8ec471536ba709c3e5e3a1e2a28ccf573daccf78bcc1e154f4e2bd59beac9677c9188eb399d21ccfd42ac1681ac48db0f8820ea933d222e695f545760878d025ebcf0ae28229a1fe254c4d6b21bd2297dfca0464585eab4f14b4622e60e19395647e52d731315da7ff1dd87044965ab4e6f777115dfb146b18716da91f1f431631f11aa958d5dd3ee707fa57b5d20ad6ee4b9a47d9994c7bc061e73b67d89f48bba67da9d8f35a7d9b30603e6ed9662f0fcbaf1b7117b4be63070323b222bc5d40f099cbdeb42a913e9f02955c3368b9041a75c9a2161d36ced58bbf33268476b7d6606a57ef8110c32b9e3ccccdff38e4ee2f8fe397fe7cd7a09a49e1158c3e9f74dd7673101bc1bfa81753b59e26b8ad9c112b3a74bd46ed63e5b7aa6026ffd828d836706f0db3f3255c8036bf94efb9e0586b4247ff9e599914d3ecadf31ed2e4cf55513b21fa451fa0fe93f4f25f8346d829eefa1c409e7204b6f099cac223455f288c37648d8989bb3ae19f412fa21d2de7b8a6d98376799d494c5ac528b36fcb9a8a929bf3bf80e7395ea3366d3cb9a8227fda634966142bdaca1b5e5b5d20e66db64b7c40dab1791ce263785963078d33b465695dd52ae90a91712b57b56bfe3313b6341205ac2e4794aba6b1d4bd5538a59f0349f83d673e26f0e5cea39c152df313bcc2b798e13c3e5665b889c3049cf05eab55d2a099b84003d52393d8eac3f30b9a8eb923dd27382c5c56fc2467d8230c02ed88502b427cbc0b9e79d1254983d1c90abe6b1dfbd98b82c0a1e34e16a27794c7ff1a929827011682cbf866b8e574204196811cd4456f555533ca619b5154c5cb643ece1a0c53ce92277ccc014d6b64a8fe3928a199807a6dde9338fec9145890a1de726a08c11f559407a88c9add26fd14bec0463328bc0635dcb0f9827e82e0e7044ea9590332d24b4a3b6af8475c2767e9755ffe05383d00f59a3221b17aaff8ab59ab0ab2cf27526b31689639fbacce67f8dbee333fea5ea798eda381c923b6db2471e2cbbe33c14fb4e1b526f3ea81843cf227b64e1c1df5988bdcd8f1bfe7da7cdd753e0b49d3ea4a72fe03b3c1712912b49232442d494055efa7e8f2c944a0be43de7a8d873fc80bc07cd116b93f3f3e0c3a1fe03897a3ef4ac7731bc07bfe8d88ecb6cb22706e243aca8cd8704ca6070e2858c0f1314c280a5098ba77673dee40837a2fadd1d456af7c861f3f4a4e89a9ecf1619648ba4d3157a523855a12872e14d3fe7f38f5e4a94c24fc63b1b63d1a65e24ac094e50d09f22edf50d772d0df4f530609d308e64b6fa4c23a7f2fbb1e9aad193973faff82d29d55a72916991e649e7f45d359558afbc411fb590a23b5c3fa53a023f272b0f88a0668b28589d1836078df09ab2147c08d7bea5da1bb0c18eb889364a80e1521d838967fe12dcc4ab4509819374b7e04ad3dc02b83e35a7a8d3cf29092f48cd2e1517b7a6fbab5c809b51a85c859b2a95d7e2a64a6277d3a64af14edb39675a1c04d74f157119a7687869d07364e3c94e92f8ff450b8ab49d7e1f8cf91d423dcf9cecc66b7d8cc7fbd59a36727d63395155d10fa55658d3ec7490e2229e08ec24d84b2815442a063ea6c0858fd655cc80156de761119ea3531e9e4b9f48c88ee15102127c97526a095c19e11f9863316e7c13fde458769095d098a8eef7acdb6071ca439f789c12d44fc3d433f5ec32c51c6066b42a198fe6606ece25f70a8d2cf6535dc8aa08438cdc66f73df9b02f11fdce79e17b7c587fcf9ea42552fe23f76962e2b3b663778e4c3fd5063c936a77d858ce419af24a6a2eb0c62e59ceddfe72273dbb5340704a0754c9587cb793a525e2428cf8e4975fb0a568007239ce918af14e4c36e3a91d6429493e5e9e997deb6593f498d9c9a5c70b338971ad97f5b86d5227a4d37c5ff130f6ff85e6883a45ca397f9690c1e3cb894cfa278d40763fd63a75033f9d5e8e04af0b17e3eb824616bc6ecb5c5c5fd548796b59232be56dadfc6e2113be5c5c7bb7f0ee3af3282f64ca7b2553e70a532babeb1a29afae69647d25624985e6b294640b7293fdf4e972d653e4d9aa2fef6172b08de59e13aea1bd2495acc7cb9129750329067e5a3d0663306ae378e3349ea7e22d09446f9ca1323344333bbddcdf117f531316e68cef90df83b146bc71fc4982a78c33de3cd361aa0d6a86c98209782ab93365bd44cb3ca74868944cb34701259e66494832f7a623db0d32f2af0b75bbed0ce0b1644d38f0bf47c3736bf5fb89c752fa96cd2e98ed271e116999edfbaee70ced8ee1f41d6f275c935b1ad958d64879b38cf21f55806743afac0ef79acb09702e8d728a8261bacd60c2ade585d6300892c515789389d2a5087c7a7bebb360872c179713a5878e6587440756c0bc88aacb8d087d7626113f3538ffdfeded6d26d1d48040d98133625e9acaf32d63c534bb2b2bcb5af8ffb44a829d9538c2b9d9b186be3afd58cf92252bc9224e322c5cc77893547e32a62234ab6d728f2d8ca4b491eff067ab6ba880776ad64e5a3b0831e71433c43b5370450371247504dba9e2b450e4e064cfe354e4d9e7ee294303e075efd29dff64063db247ae0ba5075f75d50137cb5a267b647b79391981139a5126ab64ba53d8f44ee8bca37b8d3f14bb5aad913ea1d9212dc7e933d3267bf8b856663df04303d7bf09f7b628e880adcadf390d4b4b54a1e287ae9cac3cc5018c080cd8204920162f98ea45c613c504f3b130cf6eb80c121eedc7c5b82d0133ea0ddb81937191543c6a2ae33945114026ea8d1a004a6693e5115042ce2a116ec9caa25969c503d42ab944d7735ea3243306124fa925c3b6192b2465402c4298516141a24b495de49b64dace9ea52608f66baabecb36d3e3ef6dcfa341f6c8623bb5dea2b6338e4df7a273cf0fcfb62897ff625c21a423b7585e1cb0c10b831de92086ba1c5f19d088917a36b831a52e98bc515f33e2357e3864f82511209e3adac940d71e49a690e704b7b203e948b4339b2f924cfd9ed517493f2498e980c8ec5bd9917467852393f1c8a27031ac4eda1781807e8c744e8c288623b47382875922463132c5643430c3a7caec94af764a8b134dd3101319f3cb92631163148e3107ce8891ced0ed5b6d33607e4a00d06eb827ce6d0e93f76ce22fbecb09dbfd2364cab2dbfd6187f98bf759a8f943d0617d16b0c5fb59dfb835c3fa896d557cf5288715d94b2470fd676d0d82a71ec7c21f7641545d3faffce591de842584cd20d9e734a562f9bc5653aaa4e6d5946a5d1056d981bc6bcd32c35181eb4f0946b919ef75982b1af5a919457e36363552deded0c8762c1aa582bf5be467daf4cd120452453d9fe06be241ae9f111072fdef1fe871fda9519ea9d223f394b26528e46e1e92780e99258d1d73a2919e33f43432b06c4829c700705c3f0818d923f09e82dbbee3788b8ab950c41648095fae18ab8b74e355437a25b291c08e5a0abffd0fd9588ea17076e3e44413696ab26df12545ab634ee2a4807889acacbdcb6a13fefc0f59594b8573fdc003df5638b66111d775d0c61e29672c075eebfd1e70f19e5c1748854f4782c45316bd8fb392f39fa7079dfab89779a222cb774939ab5c69f5bab07c5d20ef718c78f33b8986a171c2fa3e9b4a677afda93d11b33ca52f0263f6de880aafe8cf7314a6f6285c0453ba14a2ccdea7ac153e636772abcea251fdc09b43690dd8207f17ed31d3a57d4c607ac55e7ac04c97009d684b2d6f6c69647d59239b1bea96aa826739dfe11cd6ed21a41abd96c3babd74e933e5bc676545236bdb1ad9da545954c133b3d8e9bf09879d7e167fe5ad954c06397c560ecf45cec91b701992523815334a56d6e39caaf059388544953790c826a79314c9f5356ece953552de5c8d1d3aaaf099b89cbcd6f87402b39f5e31cbb834f81a892d1905fe03ccd074bc6526ff3f9fca2b6c4fa9a0d216689897955d0974464e25c891caa9d6e9e7d6eaf4732a85eb21a76298ed95ae1c497bbaaa4cd9caa836c930c85398dfc120f7b91d24a7448b065a9383a7c5464453ba38db81ad389d100faa290ff0cd9852999b43f9ed4549903939e8e2b1d897de3f91f1c8acfa34b1a8a61ceec4ce6c948721d42ce8e8b68728ed2ff7969c99cfbd47786561f2c83a7c0f7cba046f8b4b5069898bc112e0c0eca679c6eb01450c3bca6f7c18e49c92c398c41e628d46a565f64dbb9dc1ff383a1a8a46f363c4840b63a432914c6785c73a92ed05e31d757ad2a31be333ea9cd5677ee0d82cbb766bc82556729ce6fb63168717e367a4233db5a917698ed83e639da6f5c88d9bb27286680f07041e9081fceea8a11327d8778676276b4dc75fcb9b38752c95a03972cb22f3357e3e18303fb851276e9c9197592ac1ad105614e8548924a687ecc533a454543e6389e952d155b6f105da5944626fd89eed1c14ab30cf83272b729a14cf1465548fbf7839e94aa7316ff08dbf3b71799e322ef24efcecee845594a7a813cf68e71c70e655c8bae545c1257b6a53b31e718ec559a4d9e91c0919bf18e79c418acb51602e4c7f62b7c5a15e9a2d7156160e109e26c6e3bbde24db88f21837d5cc07d30ac82d0bdabdc57f974cd72a61e3a57f7e133985f0e2e67fa72d0241236b2691a8c7fce29defd819671b29deb1ea22d24bd814a46d06ed1e59645ed673130aa94839006e76e8646a305fb9b787ece50e7a4c8c93829bc0c215115f7b339c27240674316ba067e4ce8bebfd19f80b67d70f0742c1cfa343f6c8c242f659418ca16230ce9b446551a19599bc9d255f169f7b78268717b907be98a56944c555326fc6add8d05fc2abb868f2e503f86c0b6bcb6b990dcc2ceb70d21fdb49a6ca374499630239734b28f28be95d254a5e50d786fcfe21ada22fc6918656ed9da9da1ad4d4116ed06fa1b04110f3648dcb1257c4616ec0de1e595b5e9b765c9ad2a5d1d762686a65bf5b3a4388528244646277d22c9a67d3b8182f26b383bfeb3611bbadec279872b19eff6a939e6de0ce33f1e185717061da9f6b264c3110e0a9856cab40dada498c19d457247f8b192399e645de4e15dd0057f41d2f585c3435d2ca7e839c08d898cab56bbba4a5fcfa1729931db2548e0f5b464e01dccd852dcf310c098cf0a6a0179850a09b17137a66da8405e33f854f5537708e93ae5bb42b259b12df666ca22a9e8f5e0c1dbd9cb150bbccbcdcb9cbeb3179a5fd1bf38fe40c8ed3cc964a709125b30325d5882cfa3d67d8ef901623b7a61f90072be811c7ee4f085c58525e7e97696945ae7ef1d6b23b7023c0e222aea9006fbfdce31222eeb9e41a7529eb18378b609815b3170b6e4cd3c64ae5f99e27542a62124cd69331195390990a33f6c389c83ac6bb65cfe6f7e50cc412297f20169c8b7e20d6d2524e903f18a7496445f53923f95757ee06de8c5755ee06cfbce77f965b23a71120e21e718e5bf4872d3ff0169735b2ba3efd6dbbcfdc3fb95b9ac2f7737de2ec40486eca2dd83924764b41faed9fcfdfd5ca672b1df4c80bc5c7ef059be3fd2c1142e5f438161e4fbc5bf193e78cac4ef45ac52822ae62b53d66064cf79c079f7907e2fd2aa28678dd8a82be105e3ee4f6875dcb5ef2038f9903cbeeaa24a9ebaaef84a1aebb90fd7e4b8d706353347a6505bdd9df7a89546678c5e4dcef0f9dfbbe387cc38deb31d7f41839765abf12440d03bff1009bcd1ed4881cbcbf0ff1e48bb9c244daf0b78213bbb44de0c53852437f513564089e7603f14cbc987147e5510b5194773aee44ccc9e2c4fd713b71de34789cc90e1968c5048cec912cb953fad993885922b21827a79144a773de3914ae1af12a25f136c4dd70a1906fc56211474a7d4521be3aca4bbf8528f142a75deabaeafb9f764b585180764b613b1fc510769cf670c0eca0d86541b5cff8577d52ef2c2ec05b96de5ddbf092a33fb482ef0cbd363b779ca0b053283cfdbf000000ffff862395ae17450100",
+ "9c2d18a9845e63a6ad749b95f4d04fbc": "1f8b08000000000000ff8c54df8be33610fe57123f080d99539da30f25dea1ef857285eb9b1187e2c8bb6eb59218cbb75dbcfedf8bec38bedbbb858540c6d2fcf8e6fb46b36f07dfa42e7869615ced1d4b86b10d2cbf1ade79741889eb52a321ae8f1a5be2faa3c6864aeca9d655731795b3fe3e3d54cde1008e62dd68fc74fec73649450e29a4e768d583e93f3df9bf3844cbe95935c63919d08110a1765a885ec5a17f90f9a32e356036a8ac320ebfebfccec0bb521af42084b4b5d7646aaf61ced009d14986aa5f9142affa87ae4d1224546cd3c07e37cc089489d13dcb01db97975a032609d38d9a2437662c329515df0d6b4e3e1cb6db4443cd1a3ded4b8c74ace25d5afd62f6cb3e86521d7555ee89426db410d2d3fe089317420eaa8fae6bace40f1ff00868c949a77a4a991c98ae90ed346b44e38481c6e3a99c70c89adc00bbac65d74a5fb3866b50b695fd2f064e7db560cd473476274677da1ff17a791aa76925c7e6a099e1b4c662c2cd768049b9dceded6c72ea912c3ad59047a72eb44d1b3226189d0ad9849797abb417db76deae82ce6ea3f5c3a3657376f6b42ff1dea6539a6042a798be9dde62f04bf4a5d8539e8ed0ee3e3f3f9e831362f957297c4edcf9fbbfcdbd106f55fcd117c7afc60df654fc192e83b3c504f85670f1e58bedaf6e6bd8be5ce0a6efda9f45390acea34a4e5a00fc4df0aa90adba56fe9a6f8b30972a68edc90a917f6aabb4052d5a5ec1356c4db2d20fce414ee714cbf416f484c5c5b66670a978cdf8d2859d003fce80fa99978d640bb755919fa905a72e32a1c75bbb0ce3374334a973e72f332ef4707b7c2973e4bf9334e7647ad5edef378f2dabba629f4e3fb9bc4d70c6c5589802199073b9f04a92abe3bbf64c0ec8392215bf98188b99fc484f9dbf8427f564cfd134fffed107ffd3b3bc5ad0505c36ce4c48846af924c64851f5f3eb5fd657cedde665b8addaf6700096b16e35cca53b32555e55b2d650fd1f0000ffffec34951bd8050000",
+ "dde56a3be685f26d41f1da0c01d9a5dd": "1f8b08000000000000ff94596b53db38f7ff2a5abf5892596d02bdfc4bc33ff38cac04d7a4340d29a52c6118e328c4e0d8aead706997effecc39926c3931dd7dde84443a97dfb9ea48fc74ee455e4469e2f45e53a748d779280aa777e13c88eb2c08ef7add6e577fed5ea7a92c641e64ce2575926055233c2ad224e3411c5f07e19d439d792003873aab74be8e853f77a8132ed7c99dfdadc0fd5c1c230dfc128f225c4b6b2172a8938b228deff1672c921bb974a833bebe15a174a893e5a94ce553261cea2c8362fc907cced34ce4f209f404710c42924206712ce61cf4829c6c5d2c4b70b810e4229168c3e13a092538843ac5325a8092b958883c17f30a579065316a588af06eb0b59d8b621d6f733ad459ace34504581ceadc2241862e29b2380a81e0ea4a3bf42a17dfd7512eaeae60db36a3d2b3873ecbd25c16a539e026f801e84081a362e550e746482972873aa9421625c2729648d62b9107d7b12605331cea4c9f56d7290894e954e65172f325b871a8731fc46b20944aaf422e8ad2ce040085b90824fcba13a0e13a4a100d20b0e2670064e0128800cbf300161ea2649e3e00753cdf0a0dbaeb923aab20cba2e4a6707a4ec0f8904e199b323a64ecbbcba9c726ef5ceab3cf8cfaecd8e7b07e0a9f9fbee2f7b30ff039a21ee34bd787efe151b992b823f81eb91fcd92ffe118be22a1a7040061c607b88cc2a6233a666c72487dc67fb847a54636f5941a0ff6c79c9ee286604c703a626cc495b26fd467ecfc0c7edce00f9e1d228ee918c90666c7636c4a7d367ce467d6127c1fbe059b993f0086738f0e19ff6bf482d613e00d3ed011e3d920841f9339c8413676fe81fa6c1473eab3434fc0fa77179d9bba4b977a6c28f918b1713a617c8ed8a6a7a0eacb57eab1f1808ed907a6f11da1c2113d66ec78a08cbd06917780d6bb1f08b0e6440710bffa6cc0d012f00df71795f311847fae047f2d3dce469433af8b7815e78dab341d29d2bf2006b73c72d146907ac237a51ec2a798a3d01bd748e5ef7909854d30d46208d23c587eed7e530acec1c8f05089f7d8f035071cfcf0a3da9e6018322dd563fcad2bd069c7caabdab90ad327544247cc9743e403aff9270863027b2b306394402c86e847ce78ee46f80bb2cd637fe90d8f79d245d74e95863d5c7b8b7ef0de6827e14f9eb8a8acb6c84ef75d3a615e623961fac1263807e53f38a6aa07d6f20f371ca5e3f7433a51f97a0ad1fac41464956ba7679819292e8d0748a9dcccac952300dc1da082314a86a07947839266b43852c6614efa09c8f31edd73b538297dea3dba876a6daa620f7ef95885e118a4f3d7fc9b2242fee189def7198ff95be5a23f5caca42f162be58c0d7d7aaeb20b4441a421f547cba116a87252a9c584fc465397b16f01d8b9eb325daa01e37b3ce3db9a024d70ce5880fa38d4d4989eb1e1bb41dec04003c642a414b849476c723f40ffb0d44d2d38ca9990d7c37bf0c2e01416b07db25374dac4b0ad208979177f7d1e629f43e140c533d73423d8f318db7769e432f6152ba37019b62f0cefb147cfc05bc00b19c59758c93e96e4e887326757fda1c7ccbb07d187ecd1b59d391c831fa5fba366fda932ec149080f55faab8601b1a636dca4105f38d82f9e550971700c18f6348d13156e4d87800b367884dd31faa3342352f0fa08e0dfd31240d9ba87e0b1fc70350fbded7eef2987f72af45beb26221b11a975ceb87407ec272515511b9f48cf177f0c91e543edebaaacbd029e35d0e1bfb6a83a95e4dc76cc03edae011f6047394a976c4108f9dfa0a8df2f384ab5a07a15dfec299f28a6b529f793fbc77dab47d6dda980d1fddaa8b0428e5bb0b39ea33fd3d3487f290ab40603ccede2af96bae4f1200cc99b535862382c7ee2b0c69a0b63c389b1ead58de0f365b7e8a2b67f1c03a493eab2142893acb3066af872800f3aa70df00387fcf7de4d487d12e8a85d373f6f6f7dfbd13afc360ef7df87ffbc19b70f1fe55e716c6213d5df334912291303b9399ec76891eec48408ea6e34f9f49a8a768b2487382b33289d3601e2537b384cce4424f41a469f26ec1dcdd263f917226ef032dc19f17a44f60f362f7f2c0dab5067043b05723a8cfe486e615d068aa6e9704f33999d9c3fccc2132257229881eb2891af968c5239722218b38b82160fcacbc15cc1c121468b1989320999345948bd22935e8ea6e418d899444a44f7629315706d22717a5318b346f1d44e4ff4b8774d475e280447ffc51b96c26f53ee997941751296526a3454b5d3f3ae5e5a353bf7a74006c6be3da51a26c93df7f271b9b177aefd2c63193c68e0e5c583605963c17bb97ed0ade7305f4057af091a17fb69c63fc49a2c44e0b1bd2bfb5dd62a7659cda75e374625c986dc065f155ebdbb699bfd1a2d570736b938645551855d23e2ca358b44a07ab54b001965b780b6cb55b6dcb67f5cc1789cc9fca445fe4e9caa4afaa5e9912731124715448cdbd71adc42077f066d9dad8a29b55f8f7dfe4e2b25d2bc17c9d545a0c9607a831282f0452905c04f327cd930bb9ce13d2748535b63e1fd43b4e336daddba8abaf5d73b08a757940a0fa36ad7ea10881ab4e0aada7ce5b2b4b60286fd7a44f64be16d5ae01724bfa64ef80dc6e012971dcd67118241936843acfc5ada51fb371b3e490ef92fcd6ef93dd760dde22880bd158b58b56495707b2e939f566d08afefc9392bdf641bd6fac6349faa4e135a1d5b0d629b66d6b6c2a55eaebecb1c36d36bb5df2a56cfc240cc2a5c0754c848d470cd2273f9f0f2a46754a40c51432cd857d0ce83350a7b2615827ea25a36cd72449a566a32459c771b991e542ad77b35c2c840c97626ec47cced355548892562ba364b7b6a4196a96a8508321da357b3db25b964f49bf113d7334d91ed3f120a6deeac5d714cbb2b582f2aa1770a853122d4c0ca2027a7a15897aae6e35dc7a1bc438bf4cdcd10f509b270ac0c0f71f1290443c18282d0865b6962492244af48c80c8da5b473be9ff42afe5f0998c7ad534502ec63d5565d58a86da233fcb84aef5d0a1eab2d6dc528f45c3a165ce3bec215abe39f2ccdf6abd2186f52e7e08f390a5be9c846afa3b71d5e02ade13152ae0d60a49bab084d52bb70ecdaa609391b0538886198e582d44ef5c5da9e835f596159eeb4876f00be9567a3649091b92c112a79a00514f9c65d070825e06f92a4d9e8c4f5ed4805dd94c0b65c4926025a8965bd545b468fdd62423ad33d6261e3d38d51f5e3715fd24d53b6c0f438cca7bc6b2e776bdce9eb77d50bdc39234f947abf306ab6b76c28c972e887a07c6936ca7ecb93b30caaa9d8ef53efc3f58bdcd0c3ec0d7e51ed95166ec6c59fd8f62772a27ec5802c19fa530db75a1e9548be04e60288a2c08854e7843b54ae782fc4ef67a4a1eb4d5a06cb1735af6ef6893e3558fac447e237014d34fde91c0f2d4924c274c8a0dd6373da20b5651ea890e07399214cd08f7ffdeeb916bb10cee0589a3bbf26479310ba49d05a8087b97a8658231bfada1348f17b857c6ab62db6fd70cb1080cc51bbc19e97cd32a20dd9489986b6ad57ce954516e160e47490247ad4e1715e6164c0525c2c6a268254549d09c6a0964d95c2c82752c779aeb56279dc2fcdce092575bf6fed6273b0556c24e9b9899f54e3cc1f1ad1cdbe4f3ce1ce1dc89275a45f14e3cb5c9cf9a5b2eeec4d3e50179ee5c47c91cbd804ced129a264e8aed0ab91172a0ac1d6291d57b6c98aeb24046d7511cc927f210c92549d2e44fd37a75fb7f31fd123bfd563aa0f6ad42773f739080dff4f96575bbff54d3bec156a16e59ce50ac1765f8c027a4d7c8ad442b938b6d1907e4f95779346f29e094ec043be529b2e16db5baedf17f73d17ed1a3a9ed51fdf4623a8f9d17ffea36bfc5afcc36402bfdd9fa3a8ec2ab2c90cbabab17b165a44f664e37c8b299634fc8d53fff489fa87ffe5dcc6aff5f9e3997bfdac25bf141296ff3df86a46fa950b76d2c846a518766830a54363cb56dd2d6c5e33f28cd3dbae11a6c91d66ec08d8f7a15f14564ae6520afe19d83f4b7ec3eb0a7bac667027cb248e552e4f6edeac59701e7d23c669ea4a9747a8ef3fcdf000000ffffa981fe7a48200000",
+ })
+ if err != nil {
+ panic(err)
+ }
+ g.DefaultResolver = hgr
+
+ func() {
+ b := packr.New("SPA_App", "./frontend/build")
+ b.SetResolver("18877e3ca19c68a4cf92.js", packr.Pointer{ForwardBox: gk, ForwardPath: "9c2d18a9845e63a6ad749b95f4d04fbc"})
+ b.SetResolver("18877e3ca19c68a4cf92.js.map", packr.Pointer{ForwardBox: gk, ForwardPath: "dde56a3be685f26d41f1da0c01d9a5dd"})
+ b.SetResolver("app.607d55bb88a273732d15.js", packr.Pointer{ForwardBox: gk, ForwardPath: "58d76b98bc14dfa006e30ee9fe378ddb"})
+ b.SetResolver("app.607d55bb88a273732d15.js.map", packr.Pointer{ForwardBox: gk, ForwardPath: "93964f08ae973fc7e0fa1f1f85715915"})
+ b.SetResolver("index.html", packr.Pointer{ForwardBox: gk, ForwardPath: "1208caf0c70cc9be3359333673e4d3cc"})
+ b.SetResolver("vendor.30ba1c08c2627b0d07b2.js", packr.Pointer{ForwardBox: gk, ForwardPath: "4c8c7d94bb22d4aa7f09717c1f791290"})
+ b.SetResolver("vendor.30ba1c08c2627b0d07b2.js.map", packr.Pointer{ForwardBox: gk, ForwardPath: "7d6ef35a8ff4842bbe533a57cc8101c1"})
+ }()
+
+
+ func() {
+ b := packr.New("SPA_Assets", "./frontend/src/assets")
+ b.SetResolver("index.html", packr.Pointer{ForwardBox: gk, ForwardPath: "8447825dea6baa536c2374d77b65ff19"})
+ b.SetResolver("main.css", packr.Pointer{ForwardBox: gk, ForwardPath: "4feedaf218fc10fac8dfae6f9b5bd778"})
+ }()
+
+ return nil
+}()
diff --git a/plugins/spa/parameters.go b/plugins/spa/parameters.go
new file mode 100644
index 0000000000..a1149018f0
--- /dev/null
+++ b/plugins/spa/parameters.go
@@ -0,0 +1,21 @@
+package spa
+
+import (
+ flag "github.com/spf13/pflag"
+)
+
+const (
+ CFG_BIND_ADDRESS = "dashboard.bindAddress"
+ CFG_DEV = "dashboard.dev"
+ CFG_BASIC_AUTH_ENABLED = "dashboard.basic_auth.enabled"
+ CFG_BASIC_AUTH_USERNAME = "dashboard.basic_auth.username"
+ CFG_BASIC_AUTH_PASSWORD = "dashboard.basic_auth.password"
+)
+
+func init() {
+ flag.String(CFG_BIND_ADDRESS, "127.0.0.1", "the bind address of the dashboard")
+ flag.Bool(CFG_DEV, false, "whether the dashboard runs in dev mode")
+ flag.Bool(CFG_BASIC_AUTH_ENABLED, false, "whether to enable HTTP basic auth")
+ flag.String(CFG_BASIC_AUTH_USERNAME, "goshimmer", "HTTP basic auth username")
+ flag.String(CFG_BASIC_AUTH_PASSWORD, "goshimmer", "HTTP basic auth password")
+}
diff --git a/plugins/spa/plugin.go b/plugins/spa/plugin.go
new file mode 100644
index 0000000000..fd3215d8de
--- /dev/null
+++ b/plugins/spa/plugin.go
@@ -0,0 +1,222 @@
+package spa
+
+import (
+ "net/http"
+ "runtime"
+ "sync"
+ "time"
+
+ "github.com/gorilla/websocket"
+ "github.com/iotaledger/goshimmer/packages/autopeering/peer/service"
+ "github.com/iotaledger/goshimmer/packages/parameter"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
+ "github.com/iotaledger/goshimmer/plugins/autopeering"
+ "github.com/iotaledger/goshimmer/plugins/autopeering/local"
+ "github.com/iotaledger/goshimmer/plugins/cli"
+ "github.com/iotaledger/goshimmer/plugins/gossip"
+ "github.com/iotaledger/goshimmer/plugins/metrics"
+ "github.com/labstack/echo"
+ "github.com/labstack/echo/middleware"
+
+ "github.com/iotaledger/hive.go/daemon"
+ "github.com/iotaledger/hive.go/events"
+ "github.com/iotaledger/hive.go/logger"
+ "github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/workerpool"
+)
+
+var (
+ PLUGIN = node.NewPlugin("SPA", node.Enabled, configure, run)
+ log *logger.Logger
+
+ nodeStartAt = time.Now()
+
+ clientsMu sync.Mutex
+ clients = make(map[uint64]chan interface{}, 0)
+ nextClientID uint64 = 0
+
+ wsSendWorkerCount = 1
+ wsSendWorkerQueueSize = 250
+ wsSendWorkerPool *workerpool.WorkerPool
+)
+
+func configure(plugin *node.Plugin) {
+ log = logger.NewLogger(plugin.Name)
+
+ wsSendWorkerPool = workerpool.New(func(task workerpool.Task) {
+ sendToAllWSClient(&msg{MsgTypeTPSMetric, task.Param(0).(uint64)})
+ sendToAllWSClient(&msg{MsgTypeNodeStatus, currentNodeStatus()})
+ sendToAllWSClient(&msg{MsgTypeNeighborMetric, neighborMetrics()})
+ task.Return(nil)
+ }, workerpool.WorkerCount(wsSendWorkerCount), workerpool.QueueSize(wsSendWorkerQueueSize))
+
+ configureLiveFeed()
+}
+
+func run(plugin *node.Plugin) {
+
+ notifyStatus := events.NewClosure(func(tps uint64) {
+ wsSendWorkerPool.TrySubmit(tps)
+ })
+
+ daemon.BackgroundWorker("SPA[WSSend]", func(shutdownSignal <-chan struct{}) {
+ metrics.Events.ReceivedTPSUpdated.Attach(notifyStatus)
+ wsSendWorkerPool.Start()
+ <-shutdownSignal
+ log.Info("Stopping SPA[WSSend] ...")
+ metrics.Events.ReceivedTPSUpdated.Detach(notifyStatus)
+ wsSendWorkerPool.Stop()
+ log.Info("Stopping SPA[WSSend] ... done")
+ }, shutdown.ShutdownPrioritySPA)
+
+ runLiveFeed()
+
+ // allow any origin for websocket connections
+ upgrader.CheckOrigin = func(r *http.Request) bool {
+ return true
+ }
+
+ e := echo.New()
+ e.HideBanner = true
+ e.Use(middleware.Recover())
+
+ if parameter.NodeConfig.GetBool(CFG_BASIC_AUTH_ENABLED) {
+ e.Use(middleware.BasicAuth(func(username, password string, c echo.Context) (bool, error) {
+ if username == parameter.NodeConfig.GetString(CFG_BASIC_AUTH_USERNAME) &&
+ password == parameter.NodeConfig.GetString(CFG_BASIC_AUTH_PASSWORD) {
+ return true, nil
+ }
+ return false, nil
+ }))
+ }
+
+ setupRoutes(e)
+ addr := parameter.NodeConfig.GetString(CFG_BIND_ADDRESS)
+
+ log.Infof("You can now access the dashboard using: http://%s", addr)
+ go e.Start(addr)
+}
+
+// sends the given message to all connected websocket clients
+func sendToAllWSClient(msg interface{}) {
+ clientsMu.Lock()
+ defer clientsMu.Unlock()
+ for _, channel := range clients {
+ select {
+ case channel <- msg:
+ default:
+ // drop if buffer not drained
+ }
+ }
+}
+
+var webSocketWriteTimeout = time.Duration(3) * time.Second
+
+var (
+ upgrader = websocket.Upgrader{
+ HandshakeTimeout: webSocketWriteTimeout,
+ EnableCompression: true,
+ }
+)
+
+const (
+ MsgTypeNodeStatus byte = iota
+ MsgTypeTPSMetric
+ MsgTypeTx
+ MsgTypeNeighborMetric
+)
+
+type msg struct {
+ Type byte `json:"type"`
+ Data interface{} `json:"data"`
+}
+
+type tx struct {
+ Hash string `json:"hash"`
+ Value int64 `json:"value"`
+}
+
+type nodestatus struct {
+ ID string `json:"id"`
+ Version string `json:"version"`
+ Uptime int64 `json:"uptime"`
+ Mem *memmetrics `json:"mem"`
+}
+
+type memmetrics struct {
+ Sys uint64 `json:"sys"`
+ HeapSys uint64 `json:"heap_sys"`
+ HeapInuse uint64 `json:"heap_inuse"`
+ HeapIdle uint64 `json:"heap_idle"`
+ HeapReleased uint64 `json:"heap_released"`
+ HeapObjects uint64 `json:"heap_objects"`
+ MSpanInuse uint64 `json:"m_span_inuse"`
+ MCacheInuse uint64 `json:"m_cache_inuse"`
+ StackSys uint64 `json:"stack_sys"`
+ NumGC uint32 `json:"num_gc"`
+ LastPauseGC uint64 `json:"last_pause_gc"`
+}
+
+type neighbormetric struct {
+ ID string `json:"id"`
+ Address string `json:"address"`
+ ConnectionOrigin string `json:"connection_origin"`
+ BytesRead int `json:"bytes_read"`
+ BytesWritten int `json:"bytes_written"`
+}
+
+func neighborMetrics() []neighbormetric {
+ stats := []neighbormetric{}
+
+ // gossip plugin might be disabled
+ neighbors := gossip.GetAllNeighbors()
+ if neighbors == nil {
+ return stats
+ }
+
+ for _, neighbor := range neighbors {
+ // unfortunately the neighbor manager doesn't keep track of the origin of the connection
+ origin := "Inbound"
+ for _, peer := range autopeering.Selection.GetOutgoingNeighbors() {
+ if neighbor.Peer == peer {
+ origin = "Outbound"
+ break
+ }
+ }
+ stats = append(stats, neighbormetric{
+ ID: neighbor.Peer.ID().String(),
+ Address: neighbor.Peer.Services().Get(service.GossipKey).String(),
+ BytesRead: neighbor.BytesRead,
+ BytesWritten: neighbor.BytesWritten,
+ ConnectionOrigin: origin,
+ })
+ }
+ return stats
+}
+
+func currentNodeStatus() *nodestatus {
+ var m runtime.MemStats
+ runtime.ReadMemStats(&m)
+ status := &nodestatus{}
+ status.ID = local.GetInstance().ID().String()
+
+ // node status
+ status.Version = cli.AppVersion
+ status.Uptime = time.Since(nodeStartAt).Milliseconds()
+
+ // memory metrics
+ status.Mem = &memmetrics{
+ Sys: m.Sys,
+ HeapSys: m.HeapSys,
+ HeapInuse: m.HeapInuse,
+ HeapIdle: m.HeapIdle,
+ HeapReleased: m.HeapReleased,
+ HeapObjects: m.HeapObjects,
+ MSpanInuse: m.MSpanInuse,
+ MCacheInuse: m.MCacheInuse,
+ StackSys: m.StackSys,
+ NumGC: m.NumGC,
+ LastPauseGC: m.PauseNs[(m.NumGC+255)%256],
+ }
+ return status
+}
diff --git a/plugins/spa/routes.go b/plugins/spa/routes.go
new file mode 100644
index 0000000000..f7e2f24fb7
--- /dev/null
+++ b/plugins/spa/routes.go
@@ -0,0 +1,156 @@
+package spa
+
+import (
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "time"
+
+ "github.com/gobuffalo/packr/v2"
+ "github.com/iotaledger/goshimmer/packages/parameter"
+ "github.com/labstack/echo"
+ "github.com/pkg/errors"
+
+)
+
+var ErrInvalidParameter = errors.New("invalid parameter")
+var ErrInternalError = errors.New("internal error")
+var ErrNotFound = errors.New("not found")
+var ErrForbidden = errors.New("forbidden")
+
+// holds SPA assets
+var appBox = packr.New("SPA_App", "./frontend/build")
+var assetsBox = packr.New("SPA_Assets", "./frontend/src/assets")
+
+func indexRoute(e echo.Context) error {
+ if parameter.NodeConfig.GetBool(CFG_DEV) {
+ res, err := http.Get("http://127.0.0.1:9090/")
+ if err != nil {
+ return err
+ }
+ devIndexHTML, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ return err
+ }
+ return e.HTMLBlob(http.StatusOK, devIndexHTML)
+ }
+ indexHTML, err := appBox.Find("index.html")
+ if err != nil {
+ return err
+ }
+ return e.HTMLBlob(http.StatusOK, indexHTML)
+}
+
+func setupRoutes(e *echo.Echo) {
+
+ if parameter.NodeConfig.GetBool("dashboard.dev") {
+ e.Static("/assets", "./plugins/spa/frontend/src/assets")
+ } else {
+
+ // load assets from packr: either from within the binary or actual disk
+ e.GET("/app/*", echo.WrapHandler(http.StripPrefix("/app", http.FileServer(appBox))))
+ e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/assets", http.FileServer(assetsBox))))
+ }
+
+ e.GET("/ws", websocketRoute)
+ e.GET("/", indexRoute)
+
+ // used to route into the SPA index
+ e.GET("*", indexRoute)
+
+ apiRoutes := e.Group("/api")
+
+ setupExplorerRoutes(apiRoutes)
+
+ e.HTTPErrorHandler = func(err error, c echo.Context) {
+ c.Logger().Error(err)
+
+ var statusCode int
+ var message string
+
+ switch errors.Cause(err) {
+
+ case echo.ErrNotFound:
+ c.Redirect(http.StatusSeeOther, "/")
+ return
+
+ case echo.ErrUnauthorized:
+ statusCode = http.StatusUnauthorized
+ message = "unauthorized"
+
+ case ErrForbidden:
+ statusCode = http.StatusForbidden
+ message = "access forbidden"
+
+ case ErrInternalError:
+ statusCode = http.StatusInternalServerError
+ message = "internal server error"
+
+ case ErrNotFound:
+ statusCode = http.StatusNotFound
+ message = "not found"
+
+ case ErrInvalidParameter:
+ statusCode = http.StatusBadRequest
+ message = "bad request"
+
+ default:
+ statusCode = http.StatusInternalServerError
+ message = "internal server error"
+ }
+
+ message = fmt.Sprintf("%s, error: %+v", message, err)
+ c.String(statusCode, message)
+ }
+}
+
+func registerWSClient() (uint64, chan interface{}) {
+ // allocate new client id
+ clientsMu.Lock()
+ defer clientsMu.Unlock()
+ clientID := nextClientID
+ channel := make(chan interface{}, 100)
+ clients[clientID] = channel
+ nextClientID++
+ return clientID, channel
+}
+
+func websocketRoute(c echo.Context) error {
+ defer func() {
+ if r := recover(); r != nil {
+ log.Errorf("recovered from panic within WS handle func: %s", r)
+ }
+ }()
+ ws, err := upgrader.Upgrade(c.Response(), c.Request(), nil)
+ if err != nil {
+ return err
+ }
+ defer ws.Close()
+ ws.EnableWriteCompression(true)
+
+ // cleanup client websocket
+ clientID, channel := registerWSClient()
+ defer func() {
+ clientsMu.Lock()
+ delete(clients, clientID)
+ close(channel)
+ clientsMu.Unlock()
+ }()
+
+ msgRateLimiter := time.NewTicker(time.Second / 20)
+ defer msgRateLimiter.Stop()
+
+ for {
+ <-msgRateLimiter.C
+ msg := <-channel
+ if err := ws.WriteJSON(msg); err != nil {
+ log.Warnf("error while writing to web socket client %s: %s", c.RealIP(), err.Error())
+ break
+ }
+ if err := ws.SetWriteDeadline(time.Now().Add(webSocketWriteTimeout)); err != nil {
+ log.Warnf("error while setting write deadline on web socket client %s: %s", c.RealIP(), err.Error())
+ break
+ }
+ }
+ return nil
+}
diff --git a/plugins/spa/spa-packr.go b/plugins/spa/spa-packr.go
new file mode 100644
index 0000000000..cf8854b06d
--- /dev/null
+++ b/plugins/spa/spa-packr.go
@@ -0,0 +1,8 @@
+// +build !skippackr
+// Code generated by github.com/gobuffalo/packr/v2. DO NOT EDIT.
+
+// You can use the "packr clean" command to clean up this,
+// and any other packr generated files.
+package spa
+
+import _ "github.com/iotaledger/goshimmer/plugins/spa/packrd"
diff --git a/plugins/statusscreen-tps/plugin.go b/plugins/statusscreen-tps/plugin.go
index 15f4d1babc..dbe6b89276 100644
--- a/plugins/statusscreen-tps/plugin.go
+++ b/plugins/statusscreen-tps/plugin.go
@@ -5,9 +5,9 @@ import (
"sync/atomic"
"time"
- "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
+ "github.com/iotaledger/goshimmer/packages/gossip"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
- "github.com/iotaledger/goshimmer/plugins/gossip"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
"github.com/iotaledger/goshimmer/plugins/statusscreen"
"github.com/iotaledger/goshimmer/plugins/tangle"
"github.com/iotaledger/hive.go/daemon"
@@ -24,7 +24,7 @@ var receivedTps uint64
var solidTps uint64
var PLUGIN = node.NewPlugin("Statusscreen TPS", node.Enabled, func(plugin *node.Plugin) {
- gossip.Events.ReceiveTransaction.Attach(events.NewClosure(func(_ *meta_transaction.MetaTransaction) {
+ gossip.Events.TransactionReceived.Attach(events.NewClosure(func(_ *gossip.TransactionReceivedEvent) {
atomic.AddUint64(&receivedTpsCounter, 1)
}))
@@ -36,12 +36,12 @@ var PLUGIN = node.NewPlugin("Statusscreen TPS", node.Enabled, func(plugin *node.
return "TPS", strconv.FormatUint(atomic.LoadUint64(&receivedTps), 10) + " received / " + strconv.FormatUint(atomic.LoadUint64(&solidTps), 10) + " new"
})
}, func(plugin *node.Plugin) {
- daemon.BackgroundWorker("Statusscreen TPS Tracker", func() {
+ daemon.BackgroundWorker("Statusscreen TPS Tracker", func(shutdownSignal <-chan struct{}) {
ticker := time.NewTicker(time.Second)
for {
select {
- case <-daemon.ShutdownSignal:
+ case <-shutdownSignal:
return
case <-ticker.C:
@@ -52,5 +52,5 @@ var PLUGIN = node.NewPlugin("Statusscreen TPS", node.Enabled, func(plugin *node.
atomic.StoreUint64(&solidTpsCounter, 0)
}
}
- })
+ }, shutdown.ShutdownPriorityStatusScreen)
})
diff --git a/plugins/statusscreen/constants.go b/plugins/statusscreen/constants.go
deleted file mode 100644
index 1fa6c46dac..0000000000
--- a/plugins/statusscreen/constants.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package statusscreen
-
-import "time"
-
-const (
- REPAINT_INTERVAL = 500 * time.Millisecond
-)
diff --git a/plugins/statusscreen/logger.go b/plugins/statusscreen/logger.go
index a32db7fdc7..10606990e2 100644
--- a/plugins/statusscreen/logger.go
+++ b/plugins/statusscreen/logger.go
@@ -1,30 +1,55 @@
package statusscreen
import (
- "github.com/iotaledger/hive.go/logger"
+ stdlog "log"
+ "sync"
"time"
+
+ "github.com/iotaledger/hive.go/logger"
+)
+
+var (
+ mu sync.Mutex
+ logMessages = make([]*logMessage, 0)
+ logMessagesByName = make(map[string]*logMessage)
)
-func storeStatusMessage(logLevel logger.LogLevel, prefix string, message string, ) {
- mutex.Lock()
- defer mutex.Unlock()
- messageLog = append(messageLog, &StatusMessage{
- Source: prefix,
- LogLevel: logLevel,
- Message: message,
- Time: time.Now(),
+type logMessage struct {
+ time time.Time
+ name string
+ level logger.Level
+ msg string
+}
+
+func stdLogMsg(level logger.Level, name string, msg string) {
+ stdlog.Printf("[ %s ] %s: %s",
+ level.CapitalString(),
+ name,
+ msg,
+ )
+}
+
+func storeLogMsg(level logger.Level, name string, message string) {
+ mu.Lock()
+ defer mu.Unlock()
+
+ logMessages = append(logMessages, &logMessage{
+ time: time.Now(),
+ name: name,
+ level: level,
+ msg: message,
})
- if statusMessage, exists := statusMessages[prefix]; !exists {
- statusMessages[prefix] = &StatusMessage{
- Source: prefix,
- LogLevel: logLevel,
- Message: message,
- Time: time.Now(),
+ if statusMessage, exists := logMessagesByName[name]; !exists {
+ logMessagesByName[name] = &logMessage{
+ time: time.Now(),
+ name: name,
+ level: level,
+ msg: message,
}
} else {
- statusMessage.LogLevel = logLevel
- statusMessage.Message = message
- statusMessage.Time = time.Now()
+ statusMessage.time = time.Now()
+ statusMessage.level = level
+ statusMessage.msg = message
}
}
diff --git a/plugins/statusscreen/plugin.go b/plugins/statusscreen/plugin.go
new file mode 100644
index 0000000000..e117234f75
--- /dev/null
+++ b/plugins/statusscreen/plugin.go
@@ -0,0 +1,80 @@
+package statusscreen
+
+import (
+ "time"
+
+ "github.com/iotaledger/goshimmer/packages/shutdown"
+ "github.com/iotaledger/hive.go/daemon"
+ "github.com/iotaledger/hive.go/events"
+ "github.com/iotaledger/hive.go/logger"
+ "github.com/iotaledger/hive.go/node"
+)
+
+const (
+ name = "Statusscreen"
+ repaintInterval = 1 * time.Second
+)
+
+var PLUGIN = node.NewPlugin(name, node.Enabled, configure, run)
+
+var (
+ stdLogMsgClosure = events.NewClosure(stdLogMsg)
+ storeLogMsgClosure = events.NewClosure(storeLogMsg)
+)
+
+func init() {
+ // use standard go logger by default
+ logger.Events.AnyMsg.Attach(stdLogMsgClosure)
+}
+
+func configure(*node.Plugin) {
+ if !isTerminal() {
+ return
+ }
+
+ // store any log message for display
+ logger.Events.AnyMsg.Attach(storeLogMsgClosure)
+
+ log = logger.NewLogger(name)
+ configureTview()
+}
+
+func run(*node.Plugin) {
+ if !isTerminal() {
+ return
+ }
+
+ stopped := make(chan struct{})
+ if err := daemon.BackgroundWorker(name+" Refresher", func(shutdown <-chan struct{}) {
+ for {
+ select {
+ case <-time.After(repaintInterval):
+ app.QueueUpdateDraw(func() {})
+ case <-shutdown:
+ logger.Events.AnyMsg.Detach(storeLogMsgClosure)
+ app.Stop()
+ return
+ case <-stopped:
+ return
+ }
+ }
+ }, shutdown.ShutdownPriorityStatusScreen); err != nil {
+ log.Errorf("Failed to start as daemon: %s", err)
+ return
+ }
+
+ if err := daemon.BackgroundWorker(name+" App", func(<-chan struct{}) {
+ defer close(stopped)
+
+ // switch logging to status screen
+ logger.Events.AnyMsg.Detach(stdLogMsgClosure)
+ defer logger.Events.AnyMsg.Attach(stdLogMsgClosure)
+
+ if err := app.SetRoot(frame, true).SetFocus(frame).Run(); err != nil {
+ log.Errorf("Error running application: %s", err)
+ }
+ }, shutdown.ShutdownPriorityStatusScreen); err != nil {
+ log.Errorf("Failed to start as daemon: %s", err)
+ close(stopped)
+ }
+}
diff --git a/plugins/statusscreen/status_message.go b/plugins/statusscreen/status_message.go
deleted file mode 100644
index 6ac60673c2..0000000000
--- a/plugins/statusscreen/status_message.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package statusscreen
-
-import (
- "github.com/iotaledger/hive.go/logger"
- "time"
-)
-
-type StatusMessage struct {
- Source string
- LogLevel logger.LogLevel
- Message string
- Time time.Time
-}
diff --git a/plugins/statusscreen/statusscreen.go b/plugins/statusscreen/statusscreen.go
index 575a1b3bc9..40acb01ba3 100644
--- a/plugins/statusscreen/statusscreen.go
+++ b/plugins/statusscreen/statusscreen.go
@@ -1,68 +1,22 @@
package statusscreen
import (
- "io/ioutil"
"os"
- "sync"
- "time"
"github.com/gdamore/tcell"
"github.com/iotaledger/hive.go/daemon"
- "github.com/iotaledger/hive.go/events"
"github.com/iotaledger/hive.go/logger"
- "github.com/iotaledger/hive.go/node"
"github.com/rivo/tview"
"golang.org/x/crypto/ssh/terminal"
)
-var statusMessages = make(map[string]*StatusMessage)
-var messageLog = make([]*StatusMessage, 0)
-var mutex sync.RWMutex
-
-var app *tview.Application
-
-func configure(plugin *node.Plugin) {
- if !terminal.IsTerminal(int(os.Stdin.Fd())) {
- return
- }
-
- // don't write anything to stdout anymore
- // as log messages are now stored and displayed via this plugin
- logger.InjectWriters(ioutil.Discard)
-
- // store any log message for display
- anyLogMsgClosure := events.NewClosure(func(logLevel logger.LogLevel, prefix string, msg string) {
- storeStatusMessage(logLevel, prefix, msg)
- })
- logger.Events.AnyMsg.Attach(anyLogMsgClosure)
-
- daemon.Events.Shutdown.Attach(events.NewClosure(func() {
- logger.InjectWriters(os.Stdout)
- logger.Events.AnyMsg.Detach(anyLogMsgClosure)
-
- if app != nil {
- app.Stop()
- }
- }))
-}
-
-func run(plugin *node.Plugin) {
- if !terminal.IsTerminal(int(os.Stdin.Fd())) {
- return
- }
-
- newPrimitive := func(text string) *tview.TextView {
- textView := tview.NewTextView()
-
- textView.
- SetTextAlign(tview.AlignLeft).
- SetText(" " + text)
-
- return textView
- }
-
- app = tview.NewApplication()
+var (
+ log *logger.Logger
+ app *tview.Application
+ frame *tview.Frame
+)
+func configureTview() {
headerBar := NewUIHeaderBar()
content := tview.NewGrid()
@@ -84,30 +38,28 @@ func run(plugin *node.Plugin) {
AddItem(content, 1, 0, 1, 1, 0, 0, false).
AddItem(footer, 2, 0, 1, 1, 0, 0, false)
- frame := tview.NewFrame(grid).
+ frame = tview.NewFrame(grid).
SetBorders(1, 1, 0, 0, 2, 2)
frame.SetBackgroundColor(tcell.ColorDarkGray)
+ app = tview.NewApplication()
app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
+ // end the daemon on ctrl+c
if event.Key() == tcell.KeyCtrlC || event.Key() == tcell.KeyESC {
daemon.Shutdown()
-
return nil
}
-
return event
})
app.SetBeforeDrawFunc(func(screen tcell.Screen) bool {
- mutex.RLock()
- defer mutex.RUnlock()
headerBar.Update()
rows := make([]int, 2)
rows[0] = 1
rows[1] = 1
_, _, _, height := content.GetRect()
- for i := 0; i < len(messageLog) && i < height-2; i++ {
+ for i := 0; i < len(logMessages) && i < height-2; i++ {
rows = append(rows, 1)
}
@@ -118,12 +70,12 @@ func run(plugin *node.Plugin) {
blankLine.SetBackgroundColor(tcell.ColorWhite)
content.AddItem(blankLine, 0, 0, 1, 1, 0, 0, false)
- logStart := len(messageLog) - (len(rows) - 2)
+ logStart := len(logMessages) - (len(rows) - 2)
if logStart < 0 {
logStart = 0
}
- for i, message := range messageLog[logStart:] {
+ for i, message := range logMessages[logStart:] {
if i < height-2 {
content.AddItem(NewUILogEntry(*message).Primitive, i+1, 0, 1, 1, 0, 0, false)
}
@@ -135,23 +87,15 @@ func run(plugin *node.Plugin) {
return false
})
+}
- daemon.BackgroundWorker("Statusscreen Refresher", func() {
- for {
- select {
- case <-daemon.ShutdownSignal:
- return
- case <-time.After(1 * time.Second):
- app.QueueUpdateDraw(func() {})
- }
- }
- })
+func newPrimitive(text string) *tview.TextView {
+ textView := tview.NewTextView()
+ textView.SetTextAlign(tview.AlignLeft).SetText(" " + text)
- daemon.BackgroundWorker("Statusscreen App", func() {
- if err := app.SetRoot(frame, true).SetFocus(frame).Run(); err != nil {
- panic(err)
- }
- })
+ return textView
}
-var PLUGIN = node.NewPlugin("Status Screen", node.Enabled, configure, run)
+func isTerminal() bool {
+ return terminal.IsTerminal(int(os.Stdin.Fd()))
+}
diff --git a/plugins/statusscreen/ui_header_bar.go b/plugins/statusscreen/ui_header_bar.go
index db3dfc6470..32762a8674 100644
--- a/plugins/statusscreen/ui_header_bar.go
+++ b/plugins/statusscreen/ui_header_bar.go
@@ -7,11 +7,9 @@ import (
"time"
"github.com/gdamore/tcell"
- "github.com/iotaledger/goshimmer/packages/accountability"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers"
- "github.com/iotaledger/goshimmer/plugins/autopeering/instances/neighborhood"
+ "github.com/iotaledger/goshimmer/plugins/autopeering"
+ "github.com/iotaledger/goshimmer/plugins/autopeering/local"
+ "github.com/iotaledger/goshimmer/plugins/cli"
"github.com/rivo/tview"
)
@@ -49,7 +47,7 @@ func NewUIHeaderBar() *UIHeaderBar {
SetBackgroundColor(tcell.ColorDarkMagenta)
headerBar.Primitive.
- SetColumns(17, 0).
+ SetColumns(20, 0).
SetRows(0).
SetBorders(false).
AddItem(headerBar.LogoContainer, 0, 0, 1, 1, 0, 0, false).
@@ -78,11 +76,28 @@ func (headerBar *UIHeaderBar) Update() {
fmt.Fprintln(headerBar.InfoContainer)
}
- fmt.Fprintf(headerBar.InfoContainer, "[::b]Node ID: [::d]%40v ", accountability.OwnId().StringIdentifier)
+ outgoing := "0"
+ incoming := "0"
+ neighbors := "0"
+ total := "0"
+ myID := "-"
+ if autopeering.Selection != nil {
+ outgoing = strconv.Itoa(len(autopeering.Selection.GetOutgoingNeighbors()))
+ incoming = strconv.Itoa(len(autopeering.Selection.GetIncomingNeighbors()))
+ neighbors = strconv.Itoa(len(autopeering.Selection.GetNeighbors()))
+ }
+ if autopeering.Discovery != nil {
+ total = strconv.Itoa(len(autopeering.Discovery.GetVerifiedPeers()))
+ }
+ if local.GetInstance() != nil {
+ myID = local.GetInstance().ID().String()
+ }
+
+ fmt.Fprintf(headerBar.InfoContainer, "[::b]Node ID: [::d]%40v ", myID)
fmt.Fprintln(headerBar.InfoContainer)
- fmt.Fprintf(headerBar.InfoContainer, "[::b]Neighbors: [::d]%40v ", strconv.Itoa(chosenneighbors.INSTANCE.Peers.Len())+" chosen / "+strconv.Itoa(acceptedneighbors.INSTANCE.Peers.Len())+" accepted / "+strconv.Itoa(chosenneighbors.INSTANCE.Peers.Len()+acceptedneighbors.INSTANCE.Peers.Len())+" total")
+ fmt.Fprintf(headerBar.InfoContainer, "[::b]Neighbors: [::d]%40v ", outgoing+" chosen / "+incoming+" accepted / "+neighbors+" total")
fmt.Fprintln(headerBar.InfoContainer)
- fmt.Fprintf(headerBar.InfoContainer, "[::b]Known Peers: [::d]%40v ", strconv.Itoa(knownpeers.INSTANCE.Peers.Len())+" total / "+strconv.Itoa(neighborhood.INSTANCE.Peers.Len())+" neighborhood")
+ fmt.Fprintf(headerBar.InfoContainer, "[::b]Known Peers: [::d]%40v ", total+" total")
fmt.Fprintln(headerBar.InfoContainer)
fmt.Fprintf(headerBar.InfoContainer, "[::b]Uptime: [::d]")
@@ -125,7 +140,7 @@ func (headerBar *UIHeaderBar) Update() {
func (headerBar *UIHeaderBar) printLogo() {
fmt.Fprintln(headerBar.LogoContainer, "")
- fmt.Fprintln(headerBar.LogoContainer, " SHIMMER 0.0.1")
+ fmt.Fprintln(headerBar.LogoContainer, " GOSHIMMER", cli.AppVersion)
fmt.Fprintln(headerBar.LogoContainer, " ┌──────┬──────┐")
fmt.Fprintln(headerBar.LogoContainer, " ───┐ │ ┌───")
fmt.Fprintln(headerBar.LogoContainer, " ┐ │ │ │ ┌")
diff --git a/plugins/statusscreen/ui_log.go b/plugins/statusscreen/ui_log.go
deleted file mode 100644
index 6dae65662b..0000000000
--- a/plugins/statusscreen/ui_log.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package statusscreen
-
-import "github.com/rivo/tview"
-
-type UILog struct {
- Primitive *tview.Grid
-}
-
-func NewUILog() *UILog {
- uiLog := &UILog{
- Primitive: tview.NewGrid(),
- }
-
- return uiLog
-}
diff --git a/plugins/statusscreen/ui_log_entry.go b/plugins/statusscreen/ui_log_entry.go
index 168d6d1f21..57cbc6e7eb 100644
--- a/plugins/statusscreen/ui_log_entry.go
+++ b/plugins/statusscreen/ui_log_entry.go
@@ -2,9 +2,9 @@ package statusscreen
import (
"fmt"
- "github.com/iotaledger/hive.go/logger"
"github.com/gdamore/tcell"
+ "github.com/iotaledger/hive.go/logger"
"github.com/rivo/tview"
)
@@ -15,7 +15,7 @@ type UILogEntry struct {
LogLevelContainer *tview.TextView
}
-func NewUILogEntry(message StatusMessage) *UILogEntry {
+func NewUILogEntry(message logMessage) *UILogEntry {
logEntry := &UILogEntry{
Primitive: tview.NewGrid(),
TimeContainer: tview.NewTextView(),
@@ -36,19 +36,15 @@ func NewUILogEntry(message StatusMessage) *UILogEntry {
logEntry.LogLevelContainer.SetDynamicColors(true)
textColor := "black::d"
- switch message.LogLevel {
+ switch message.level {
case logger.LevelInfo:
fmt.Fprintf(logEntry.LogLevelContainer, " [black::d][ [blue::d]INFO [black::d]]")
- case logger.LevelNotice:
- fmt.Fprintf(logEntry.LogLevelContainer, " [black::d][ [blue::d]NOTICE [black::d]]")
- case logger.LevelWarning:
+ case logger.LevelWarn:
fmt.Fprintf(logEntry.LogLevelContainer, " [black::d][ [yellow::d]WARN [black::d]]")
textColor = "yellow::d"
case logger.LevelError:
fallthrough
- case logger.LevelCritical:
- fallthrough
case logger.LevelPanic:
fallthrough
case logger.LevelFatal:
@@ -61,11 +57,11 @@ func NewUILogEntry(message StatusMessage) *UILogEntry {
textColor = "black::b"
}
- fmt.Fprintf(logEntry.TimeContainer, " [black::b]"+message.Time.Format("15:04:05"))
- if message.Source == "Node" {
- fmt.Fprintf(logEntry.MessageContainer, "["+textColor+"]"+message.Message)
+ fmt.Fprintf(logEntry.TimeContainer, " [black::b]"+message.time.Format("15:04:05"))
+ if message.name == "Node" {
+ fmt.Fprintf(logEntry.MessageContainer, "["+textColor+"]"+message.msg)
} else {
- fmt.Fprintf(logEntry.MessageContainer, "["+textColor+"]"+message.Source+": "+message.Message)
+ fmt.Fprintf(logEntry.MessageContainer, "["+textColor+"]"+message.name+": "+message.msg)
}
logEntry.Primitive.
diff --git a/plugins/tangle/approvers.go b/plugins/tangle/approvers.go
index e150339650..3e50c29cae 100644
--- a/plugins/tangle/approvers.go
+++ b/plugins/tangle/approvers.go
@@ -1,19 +1,19 @@
package tangle
import (
+ "fmt"
+
"github.com/iotaledger/goshimmer/packages/database"
- "github.com/iotaledger/goshimmer/packages/datastructure"
- "github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/model/approvers"
- "github.com/iotaledger/goshimmer/packages/typeutils"
- "github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/lru_cache"
+ "github.com/iotaledger/hive.go/typeutils"
"github.com/iotaledger/iota.go/trinary"
)
// region global public api ////////////////////////////////////////////////////////////////////////////////////////////
// GetApprovers retrieves approvers from the database.
-func GetApprovers(transactionHash trinary.Trytes, computeIfAbsent ...func(trinary.Trytes) *approvers.Approvers) (result *approvers.Approvers, err errors.IdentifiableError) {
+func GetApprovers(transactionHash trinary.Trytes, computeIfAbsent ...func(trinary.Trytes) *approvers.Approvers) (result *approvers.Approvers, err error) {
if cacheResult := approversCache.ComputeIfAbsent(transactionHash, func() interface{} {
if dbApprovers, dbErr := getApproversFromDatabase(transactionHash); dbErr != nil {
err = dbErr
@@ -35,7 +35,7 @@ func GetApprovers(transactionHash trinary.Trytes, computeIfAbsent ...func(trinar
return
}
-func ContainsApprovers(transactionHash trinary.Trytes) (result bool, err errors.IdentifiableError) {
+func ContainsApprovers(transactionHash trinary.Trytes) (result bool, err error) {
if approversCache.Contains(transactionHash) {
result = true
} else {
@@ -51,20 +51,26 @@ func StoreApprovers(approvers *approvers.Approvers) {
// region lru cache ////////////////////////////////////////////////////////////////////////////////////////////////////
-var approversCache = datastructure.NewLRUCache(APPROVERS_CACHE_SIZE, &datastructure.LRUCacheOptions{
- EvictionCallback: onEvictApprovers,
+var approversCache = lru_cache.NewLRUCache(APPROVERS_CACHE_SIZE, &lru_cache.LRUCacheOptions{
+ EvictionCallback: onEvictApprovers,
+ EvictionBatchSize: 100,
})
-func onEvictApprovers(_ interface{}, value interface{}) {
- if evictedApprovers := value.(*approvers.Approvers); evictedApprovers.GetModified() {
- go func(evictedApprovers *approvers.Approvers) {
- if err := storeApproversInDatabase(evictedApprovers); err != nil {
+func onEvictApprovers(_ interface{}, values interface{}) {
+ // TODO: replace with apply
+ for _, obj := range values.([]interface{}) {
+ if approvers := obj.(*approvers.Approvers); approvers.GetModified() {
+ if err := storeApproversInDatabase(approvers); err != nil {
panic(err)
}
- }(evictedApprovers)
+ }
}
}
+func FlushApproversCache() {
+ approversCache.DeleteAll()
+}
+
const (
APPROVERS_CACHE_SIZE = 50000
)
@@ -75,47 +81,45 @@ const (
var approversDatabase database.Database
-func configureApproversDatabase(plugin *node.Plugin) {
- if db, err := database.Get("approvers"); err != nil {
+func configureApproversDatabase() {
+ if db, err := database.Get(database.DBPrefixApprovers, database.GetBadgerInstance()); err != nil {
panic(err)
} else {
approversDatabase = db
}
}
-func storeApproversInDatabase(approvers *approvers.Approvers) errors.IdentifiableError {
+func storeApproversInDatabase(approvers *approvers.Approvers) error {
if approvers.GetModified() {
- if err := approversDatabase.Set(typeutils.StringToBytes(approvers.GetHash()), approvers.Marshal()); err != nil {
- return ErrDatabaseError.Derive(err, "failed to store approvers")
+ if err := approversDatabase.Set(database.Entry{Key: typeutils.StringToBytes(approvers.GetHash()), Value: approvers.Marshal()}); err != nil {
+ return fmt.Errorf("%w: failed to store approvers: %s", ErrDatabaseError, err)
}
-
approvers.SetModified(false)
}
return nil
}
-func getApproversFromDatabase(transactionHash trinary.Trytes) (*approvers.Approvers, errors.IdentifiableError) {
+func getApproversFromDatabase(transactionHash trinary.Trytes) (*approvers.Approvers, error) {
approversData, err := approversDatabase.Get(typeutils.StringToBytes(transactionHash))
if err != nil {
if err == database.ErrKeyNotFound {
return nil, nil
}
-
- return nil, ErrDatabaseError.Derive(err, "failed to retrieve approvers")
+ return nil, fmt.Errorf("%w: failed to retrieve approvers: %s", ErrDatabaseError, err)
}
var result approvers.Approvers
- if err = result.Unmarshal(approversData); err != nil {
+ if err = result.Unmarshal(approversData.Value); err != nil {
panic(err)
}
return &result, nil
}
-func databaseContainsApprovers(transactionHash trinary.Trytes) (bool, errors.IdentifiableError) {
+func databaseContainsApprovers(transactionHash trinary.Trytes) (bool, error) {
if contains, err := approversDatabase.Contains(typeutils.StringToBytes(transactionHash)); err != nil {
- return false, ErrDatabaseError.Derive(err, "failed to check if the approvers exists")
+ return false, fmt.Errorf("%w: failed to check if the approvers exist: %s", ErrDatabaseError, err)
} else {
return contains, nil
}
diff --git a/plugins/tangle/bundle.go b/plugins/tangle/bundle.go
index ac5b1cd3eb..2cb1fb896a 100644
--- a/plugins/tangle/bundle.go
+++ b/plugins/tangle/bundle.go
@@ -1,19 +1,19 @@
package tangle
import (
+ "fmt"
+
"github.com/iotaledger/goshimmer/packages/database"
- "github.com/iotaledger/goshimmer/packages/datastructure"
- "github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/model/bundle"
- "github.com/iotaledger/goshimmer/packages/typeutils"
- "github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/lru_cache"
+ "github.com/iotaledger/hive.go/typeutils"
"github.com/iotaledger/iota.go/trinary"
)
// region global public api ////////////////////////////////////////////////////////////////////////////////////////////
// GetBundle retrieves bundle from the database.
-func GetBundle(headerTransactionHash trinary.Trytes, computeIfAbsent ...func(trinary.Trytes) (*bundle.Bundle, errors.IdentifiableError)) (result *bundle.Bundle, err errors.IdentifiableError) {
+func GetBundle(headerTransactionHash trinary.Trytes, computeIfAbsent ...func(trinary.Trytes) (*bundle.Bundle, error)) (result *bundle.Bundle, err error) {
if cacheResult := bundleCache.ComputeIfAbsent(headerTransactionHash, func() interface{} {
if dbBundle, dbErr := getBundleFromDatabase(headerTransactionHash); dbErr != nil {
err = dbErr
@@ -39,7 +39,7 @@ func GetBundle(headerTransactionHash trinary.Trytes, computeIfAbsent ...func(tri
return
}
-func ContainsBundle(headerTransactionHash trinary.Trytes) (result bool, err errors.IdentifiableError) {
+func ContainsBundle(headerTransactionHash trinary.Trytes) (result bool, err error) {
if bundleCache.Contains(headerTransactionHash) {
result = true
} else {
@@ -55,22 +55,28 @@ func StoreBundle(bundle *bundle.Bundle) {
// region lru cache ////////////////////////////////////////////////////////////////////////////////////////////////////
-var bundleCache = datastructure.NewLRUCache(BUNDLE_CACHE_SIZE, &datastructure.LRUCacheOptions{
- EvictionCallback: onEvictBundle,
+var bundleCache = lru_cache.NewLRUCache(BUNDLE_CACHE_SIZE, &lru_cache.LRUCacheOptions{
+ EvictionCallback: onEvictBundles,
+ EvictionBatchSize: 100,
})
-func onEvictBundle(_ interface{}, value interface{}) {
- if evictedBundle := value.(*bundle.Bundle); evictedBundle.GetModified() {
- go func(evictedBundle *bundle.Bundle) {
- if err := storeBundleInDatabase(evictedBundle); err != nil {
+func onEvictBundles(_ interface{}, values interface{}) {
+ // TODO: replace with apply
+ for _, obj := range values.([]interface{}) {
+ if bndl := obj.(*bundle.Bundle); bndl.GetModified() {
+ if err := storeBundleInDatabase(bndl); err != nil {
panic(err)
}
- }(evictedBundle)
+ }
}
}
+func FlushBundleCache() {
+ bundleCache.DeleteAll()
+}
+
const (
- BUNDLE_CACHE_SIZE = 50000
+ BUNDLE_CACHE_SIZE = 500
)
// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -79,47 +85,46 @@ const (
var bundleDatabase database.Database
-func configureBundleDatabase(plugin *node.Plugin) {
- if db, err := database.Get("bundle"); err != nil {
+func configureBundleDatabase() {
+ if db, err := database.Get(database.DBPrefixBundle, database.GetBadgerInstance()); err != nil {
panic(err)
} else {
bundleDatabase = db
}
}
-func storeBundleInDatabase(bundle *bundle.Bundle) errors.IdentifiableError {
+func storeBundleInDatabase(bundle *bundle.Bundle) error {
if bundle.GetModified() {
- if err := bundleDatabase.Set(typeutils.StringToBytes(bundle.GetHash()), bundle.Marshal()); err != nil {
- return ErrDatabaseError.Derive(err, "failed to store bundle")
+ if err := bundleDatabase.Set(database.Entry{Key: typeutils.StringToBytes(bundle.GetHash()), Value: bundle.Marshal()}); err != nil {
+ return fmt.Errorf("%w: failed to store bundle: %s", ErrDatabaseError, err)
}
-
bundle.SetModified(false)
}
return nil
}
-func getBundleFromDatabase(transactionHash trinary.Trytes) (*bundle.Bundle, errors.IdentifiableError) {
+func getBundleFromDatabase(transactionHash trinary.Trytes) (*bundle.Bundle, error) {
bundleData, err := bundleDatabase.Get(typeutils.StringToBytes(transactionHash))
if err != nil {
if err == database.ErrKeyNotFound {
return nil, nil
}
- return nil, ErrDatabaseError.Derive(err, "failed to retrieve bundle")
+ return nil, fmt.Errorf("%w: failed to retrieve bundle: %s", ErrDatabaseError, err)
}
var result bundle.Bundle
- if err = result.Unmarshal(bundleData); err != nil {
+ if err = result.Unmarshal(bundleData.Value); err != nil {
panic(err)
}
return &result, nil
}
-func databaseContainsBundle(transactionHash trinary.Trytes) (bool, errors.IdentifiableError) {
+func databaseContainsBundle(transactionHash trinary.Trytes) (bool, error) {
if contains, err := bundleDatabase.Contains(typeutils.StringToBytes(transactionHash)); err != nil {
- return false, ErrDatabaseError.Derive(err, "failed to check if the bundle exists")
+ return false, fmt.Errorf("%w: failed to check if the bundle exists: %s", ErrDatabaseError, err)
} else {
return contains, nil
}
diff --git a/plugins/tangle/errors.go b/plugins/tangle/errors.go
index ffde1bcc9d..5ca8797f9f 100644
--- a/plugins/tangle/errors.go
+++ b/plugins/tangle/errors.go
@@ -1,9 +1,7 @@
package tangle
-import "github.com/iotaledger/goshimmer/packages/errors"
+import "errors"
var (
- ErrDatabaseError = errors.Wrap(errors.New("database error"), "failed to access the database")
- ErrUnmarshalFailed = errors.Wrap(errors.New("unmarshall failed"), "input data is corrupted")
- ErrMarshallFailed = errors.Wrap(errors.New("marshal failed"), "the source object contains invalid values")
+ ErrDatabaseError = errors.New("database error")
)
diff --git a/plugins/tangle/events.go b/plugins/tangle/events.go
index 3cc90ba431..2a89c7248a 100644
--- a/plugins/tangle/events.go
+++ b/plugins/tangle/events.go
@@ -5,14 +5,12 @@ import (
"github.com/iotaledger/hive.go/events"
)
-var Events = pluginEvents{
- TransactionStored: events.NewEvent(transactionCaller),
- TransactionSolid: events.NewEvent(transactionCaller),
-}
-
-type pluginEvents struct {
+var Events = struct {
TransactionStored *events.Event
TransactionSolid *events.Event
+}{
+ TransactionStored: events.NewEvent(transactionCaller),
+ TransactionSolid: events.NewEvent(transactionCaller),
}
func transactionCaller(handler interface{}, params ...interface{}) {
diff --git a/plugins/tangle/misc.go b/plugins/tangle/misc.go
new file mode 100644
index 0000000000..490f52d74a
--- /dev/null
+++ b/plugins/tangle/misc.go
@@ -0,0 +1,16 @@
+package tangle
+
+import (
+ "github.com/iotaledger/hive.go/typeutils"
+ "github.com/iotaledger/iota.go/trinary"
+)
+
+func databaseKeyForHashPrefixedHash(address trinary.Hash, transactionHash trinary.Hash) []byte {
+ //return append(databaseKeyForHashPrefix(address), trinary.MustTrytesToBytes(transactionHash)...)
+ return append(databaseKeyForHashPrefix(address), typeutils.StringToBytes(transactionHash)...)
+}
+
+func databaseKeyForHashPrefix(hash trinary.Hash) []byte {
+ //return trinary.MustTrytesToBytes(hash)
+ return typeutils.StringToBytes(hash)
+}
diff --git a/plugins/tangle/plugin.go b/plugins/tangle/plugin.go
index 62006c6be9..6c6bc09015 100644
--- a/plugins/tangle/plugin.go
+++ b/plugins/tangle/plugin.go
@@ -1,25 +1,67 @@
package tangle
import (
+ "time"
+
+ "github.com/iotaledger/goshimmer/packages/database"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
+ "github.com/iotaledger/hive.go/daemon"
"github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/timeutil"
+ "github.com/iotaledger/iota.go/trinary"
)
// region plugin module setup //////////////////////////////////////////////////////////////////////////////////////////
var PLUGIN = node.NewPlugin("Tangle", node.Enabled, configure, run)
-var log = logger.NewLogger("Tangle")
-
-func configure(plugin *node.Plugin) {
- configureTransactionDatabase(plugin)
- configureTransactionMetaDataDatabase(plugin)
- configureApproversDatabase(plugin)
- configureBundleDatabase(plugin)
- configureSolidifier(plugin)
+var log *logger.Logger
+
+func configure(*node.Plugin) {
+ log = logger.NewLogger("Tangle")
+
+ configureTransactionDatabase()
+ configureTransactionMetaDataDatabase()
+ configureApproversDatabase()
+ configureBundleDatabase()
+ configureTransactionHashesForAddressDatabase()
+ configureSolidifier()
+
+ daemon.BackgroundWorker("Cache Flush", func(shutdownSignal <-chan struct{}) {
+ <-shutdownSignal
+
+ log.Info("Flushing caches to database...")
+ FlushTransactionCache()
+ FlushTransactionMetadata()
+ FlushApproversCache()
+ FlushBundleCache()
+ log.Info("Flushing caches to database... done")
+
+ log.Info("Syncing database to disk...")
+ database.GetBadgerInstance().Close()
+ log.Info("Syncing database to disk... done")
+ }, shutdown.ShutdownPriorityTangle)
+
}
-func run(plugin *node.Plugin) {
- runSolidifier(plugin)
+func run(*node.Plugin) {
+
+ daemon.BackgroundWorker("Badger garbage collection", func(shutdownSignal <-chan struct{}) {
+ timeutil.Ticker(func() {
+ database.CleanupBadgerInstance(log)
+ }, 5*time.Minute, shutdownSignal)
+ }, shutdown.ShutdownPriorityBadgerGarbageCollection)
+
+ runSolidifier()
+}
+
+// Requester provides the functionality to request a transaction from the network.
+type Requester interface {
+ RequestTransaction(hash trinary.Hash)
}
+type RequesterFunc func(hash trinary.Hash)
+
+func (f RequesterFunc) RequestTransaction(hash trinary.Hash) { f(hash) }
+
// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/tangle/solidifier.go b/plugins/tangle/solidifier.go
index 53a0fe61a4..02d8444096 100644
--- a/plugins/tangle/solidifier.go
+++ b/plugins/tangle/solidifier.go
@@ -2,186 +2,264 @@ package tangle
import (
"runtime"
+ "time"
- "github.com/iotaledger/goshimmer/packages/errors"
+ "github.com/iotaledger/goshimmer/packages/gossip"
"github.com/iotaledger/goshimmer/packages/model/approvers"
"github.com/iotaledger/goshimmer/packages/model/meta_transaction"
"github.com/iotaledger/goshimmer/packages/model/transactionmetadata"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
- "github.com/iotaledger/goshimmer/packages/workerpool"
- "github.com/iotaledger/goshimmer/plugins/gossip"
+ "github.com/iotaledger/goshimmer/packages/shutdown"
"github.com/iotaledger/hive.go/daemon"
"github.com/iotaledger/hive.go/events"
- "github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/workerpool"
"github.com/iotaledger/iota.go/trinary"
)
// region plugin module setup //////////////////////////////////////////////////////////////////////////////////////////
-var workerPool *workerpool.WorkerPool
+const UnsolidInterval = time.Minute
-func configureSolidifier(plugin *node.Plugin) {
+var (
+ workerCount = runtime.NumCPU()
+ workerPool *workerpool.WorkerPool
+ requestedTxs *UnsolidTxs
+
+ requester Requester
+)
+
+func SetRequester(req Requester) {
+ requester = req
+}
+
+func configureSolidifier() {
workerPool = workerpool.New(func(task workerpool.Task) {
- processMetaTransaction(plugin, task.Param(0).(*meta_transaction.MetaTransaction))
+ processMetaTransaction(task.Param(0).(*meta_transaction.MetaTransaction))
task.Return(nil)
- }, workerpool.WorkerCount(WORKER_COUNT), workerpool.QueueSize(10000))
+ }, workerpool.WorkerCount(workerCount), workerpool.QueueSize(10000))
- gossip.Events.ReceiveTransaction.Attach(events.NewClosure(func(rawTransaction *meta_transaction.MetaTransaction) {
- workerPool.Submit(rawTransaction)
- }))
+ requestedTxs = NewUnsolidTxs()
- daemon.Events.Shutdown.Attach(events.NewClosure(func() {
- log.Info("Stopping Solidifier ...")
- workerPool.Stop()
+ gossip.Events.TransactionReceived.Attach(events.NewClosure(func(ev *gossip.TransactionReceivedEvent) {
+ metaTx := meta_transaction.FromBytes(ev.Data)
+ if err := metaTx.Validate(); err != nil {
+ log.Warnf("invalid transaction: %s", err)
+ return
+ }
+ workerPool.Submit(metaTx)
}))
}
-func runSolidifier(plugin *node.Plugin) {
- log.Info("Starting Solidifier ...")
-
- daemon.BackgroundWorker("Tangle Solidifier", func() {
+func runSolidifier() {
+ daemon.BackgroundWorker("Tangle Solidifier", func(shutdownSignal <-chan struct{}) {
+ log.Info("Starting Solidifier ...")
+ workerPool.Start()
log.Info("Starting Solidifier ... done")
- workerPool.Run()
+
+ <-shutdownSignal
+
+ log.Info("Stopping Solidifier ...")
+ workerPool.StopAndWait()
log.Info("Stopping Solidifier ... done")
- })
+ }, shutdown.ShutdownPrioritySolidifier)
+
}
// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Checks and updates the solid flag of a single transaction.
-func checkSolidity(transaction *value_transaction.ValueTransaction) (result bool, err errors.IdentifiableError) {
- // abort if transaction is solid already
- txMetadata, metaDataErr := GetTransactionMetadata(transaction.GetHash(), transactionmetadata.New)
- if metaDataErr != nil {
- err = metaDataErr
+func processMetaTransaction(metaTransaction *meta_transaction.MetaTransaction) {
+ metaTransactionHash := metaTransaction.GetHash()
- return
- } else if txMetadata.GetSolid() {
- result = true
+ var newTransaction bool
+ tx, err := GetTransaction(metaTransactionHash, func(transactionHash trinary.Trytes) *value_transaction.ValueTransaction {
+ newTransaction = true
+ tx := value_transaction.FromMetaTransaction(metaTransaction)
+ tx.SetModified(true)
+ return tx
+ })
+ if err != nil {
+ log.Errorf("Unable to process transaction %s: %s", metaTransactionHash, err.Error())
return
}
+ if newTransaction {
+ log.Debugw("process new transaction", "hash", tx.GetHash())
+ processNewTransaction(tx)
+ requestedTxs.Remove(tx.GetHash())
+ updateRequestedTxs()
+ }
+}
- // check solidity of branch transaction if it is not genesis
- if branchTransactionHash := transaction.GetBranchTransactionHash(); branchTransactionHash != meta_transaction.BRANCH_NULL_HASH {
- // abort if branch transaction is missing
- if branchTransaction, branchErr := GetTransaction(branchTransactionHash); branchErr != nil {
- err = branchErr
+func processNewTransaction(transaction *value_transaction.ValueTransaction) {
+ Events.TransactionStored.Trigger(transaction)
- return
- } else if branchTransaction == nil {
- return
- } else if branchTransactionMetadata, branchErr := GetTransactionMetadata(branchTransaction.GetHash(), transactionmetadata.New); branchErr != nil {
- err = branchErr
+ // store transaction hash for address in DB
+ if err := StoreTransactionHashForAddressInDatabase(
+ &TxHashForAddress{
+ Address: transaction.GetAddress(),
+ TxHash: transaction.GetHash(),
+ },
+ ); err != nil {
+ log.Errorw(err.Error())
+ }
- return
- } else if !branchTransactionMetadata.GetSolid() {
- return
- }
+ transactionHash := transaction.GetHash()
+
+ // register tx as approver for trunk
+ if trunkApprovers, err := GetApprovers(transaction.GetTrunkTransactionHash(), approvers.New); err != nil {
+ log.Errorf("Unable to get approvers of transaction %s: %s", transaction.GetTrunkTransactionHash(), err.Error())
+ return
+ } else {
+ trunkApprovers.Add(transactionHash)
}
- // check solidity of trunk transaction if it is not genesis
- if trunkTransactionHash := transaction.GetTrunkTransactionHash(); trunkTransactionHash != meta_transaction.BRANCH_NULL_HASH {
- if trunkTransaction, trunkErr := GetTransaction(trunkTransactionHash); trunkErr != nil {
- err = trunkErr
+ // register tx as approver for branch
+ if branchApprovers, err := GetApprovers(transaction.GetBranchTransactionHash(), approvers.New); err != nil {
+ log.Errorf("Unable to get approvers of transaction %s: %s", transaction.GetBranchTransactionHash(), err.Error())
+ return
+ } else {
+ branchApprovers.Add(transactionHash)
+ }
- return
- } else if trunkTransaction == nil {
- return
- } else if trunkTransactionMetadata, trunkErr := GetTransactionMetadata(trunkTransaction.GetHash(), transactionmetadata.New); trunkErr != nil {
- err = trunkErr
+ isSolid, err := isSolid(transactionHash)
+ if err != nil {
+ log.Errorf("Unable to check solidity: %s", err.Error())
+ }
+ // if the transaction was solidified propagate this information
+ if isSolid {
+ if err := propagateSolidity(transaction.GetHash()); err != nil {
+ log.Errorf("Unable to propagate solidity: %s", err.Error())
+ }
+ }
+}
- return
- } else if !trunkTransactionMetadata.GetSolid() {
- return
+// isSolid checks whether the transaction with the given hash is solid. A transaction is solid, if it is
+// either marked as solid or all its referenced transactions are in the database.
+func isSolid(hash trinary.Hash) (bool, error) {
+ // the genesis is always solid
+ if hash == meta_transaction.BRANCH_NULL_HASH {
+ return true, nil
+ }
+ // if the transaction is not in the DB, request it
+ transaction, err := GetTransaction(hash)
+ if err != nil {
+ return false, err
+ }
+ if transaction == nil {
+ if requestedTxs.Add(hash) {
+ requestTransaction(hash)
}
+ return false, nil
}
- // mark transaction as solid and trigger event
- if txMetadata.SetSolid(true) {
- Events.TransactionSolid.Trigger(transaction)
+ // check whether the transaction is marked solid
+ metadata, err := GetTransactionMetadata(hash, transactionmetadata.New)
+ if err != nil {
+ return false, err
+ }
+ if metadata.GetSolid() {
+ return true, nil
}
- result = true
+ branch := contains(transaction.GetBranchTransactionHash())
+ trunk := contains(transaction.GetTrunkTransactionHash())
- return
+ if !branch || !trunk {
+ return false, nil
+ }
+ // everything is good, mark the transaction as solid
+ return true, markSolid(transaction)
}
-// Checks and updates the solid flag of a transaction and its approvers (future cone).
-func IsSolid(transaction *value_transaction.ValueTransaction) (bool, errors.IdentifiableError) {
- if isSolid, err := checkSolidity(transaction); err != nil {
- return false, err
- } else if isSolid {
- if err := propagateSolidity(transaction.GetHash()); err != nil {
- return false, err
+func contains(hash trinary.Hash) bool {
+ if hash == meta_transaction.BRANCH_NULL_HASH {
+ return true
+ }
+ if contains, _ := ContainsTransaction(hash); !contains {
+ if requestedTxs.Add(hash) {
+ requestTransaction(hash)
}
+ return false
}
+ return true
+}
- return false, nil
+func isMarkedSolid(hash trinary.Hash) (bool, error) {
+ if hash == meta_transaction.BRANCH_NULL_HASH {
+ return true, nil
+ }
+ metadata, err := GetTransactionMetadata(hash, transactionmetadata.New)
+ if err != nil {
+ return false, err
+ }
+ return metadata.GetSolid(), nil
}
-func propagateSolidity(transactionHash trinary.Trytes) errors.IdentifiableError {
- if transactionApprovers, err := GetApprovers(transactionHash, approvers.New); err != nil {
+func markSolid(transaction *value_transaction.ValueTransaction) error {
+ txMetadata, err := GetTransactionMetadata(transaction.GetHash(), transactionmetadata.New)
+ if err != nil {
return err
- } else {
- for _, approverHash := range transactionApprovers.GetHashes() {
- if approver, err := GetTransaction(approverHash); err != nil {
- return err
- } else if approver != nil {
- if isSolid, err := checkSolidity(approver); err != nil {
- return err
- } else if isSolid {
- if err := propagateSolidity(approver.GetHash()); err != nil {
- return err
- }
- }
- }
- }
}
-
+ if txMetadata.SetSolid(true) {
+ log.Debugw("transaction solidified", "hash", transaction.GetHash())
+ Events.TransactionSolid.Trigger(transaction)
+ return propagateSolidity(transaction.GetHash())
+ }
return nil
}
-func processMetaTransaction(plugin *node.Plugin, metaTransaction *meta_transaction.MetaTransaction) {
- var newTransaction bool
- if tx, err := GetTransaction(metaTransaction.GetHash(), func(transactionHash trinary.Trytes) *value_transaction.ValueTransaction {
- newTransaction = true
+func propagateSolidity(transactionHash trinary.Trytes) error {
+ approvingTransactions, err := GetApprovers(transactionHash, approvers.New)
+ if err != nil {
+ return err
+ }
+ for _, hash := range approvingTransactions.GetHashes() {
+ approver, err := GetTransaction(hash)
+ if err != nil {
+ return err
+ }
+ if approver != nil {
+ branchSolid, err := isMarkedSolid(approver.GetBranchTransactionHash())
+ if err != nil {
+ return err
+ }
+ if !branchSolid {
+ continue
+ }
+ trunkSolid, err := isMarkedSolid(approver.GetTrunkTransactionHash())
+ if err != nil {
+ return err
+ }
+ if !trunkSolid {
+ continue
+ }
- return value_transaction.FromMetaTransaction(metaTransaction)
- }); err != nil {
- log.Errorf("Unable to load transaction %s: %s", metaTransaction.GetHash(), err.Error())
- } else if newTransaction {
- processTransaction(plugin, tx)
+ if err := markSolid(approver); err != nil {
+ return err
+ }
+ }
}
+ return nil
}
-func processTransaction(plugin *node.Plugin, transaction *value_transaction.ValueTransaction) {
- Events.TransactionStored.Trigger(transaction)
-
- transactionHash := transaction.GetHash()
-
- // register tx as approver for trunk
- if trunkApprovers, err := GetApprovers(transaction.GetTrunkTransactionHash(), approvers.New); err != nil {
- log.Errorf("Unable to get approvers of transaction %s: %s", transaction.GetTrunkTransactionHash(), err.Error())
- return
- } else {
- trunkApprovers.Add(transactionHash)
+func updateRequestedTxs() {
+ targetTime := time.Now().Add(-UnsolidInterval)
+ txs := requestedTxs.Update(targetTime)
+ for _, txHash := range txs {
+ if contains, _ := ContainsTransaction(txHash); contains {
+ requestedTxs.Remove(txHash)
+ continue
+ }
+ requestTransaction(txHash)
}
+}
- // register tx as approver for branch
- if branchApprovers, err := GetApprovers(transaction.GetBranchTransactionHash(), approvers.New); err != nil {
- log.Errorf("Unable to get approvers of transaction %s: %s", transaction.GetBranchTransactionHash(), err.Error())
+func requestTransaction(hash trinary.Trytes) {
+ if requester == nil {
return
- } else {
- branchApprovers.Add(transactionHash)
}
- // update the solidity flags of this transaction and its approvers
- if _, err := IsSolid(transaction); err != nil {
- log.Errorf("Unable to check solidity: %s", err.Error())
- return
- }
+ log.Debugw("Requesting tx", "hash", hash)
+ requester.RequestTransaction(hash)
}
-
-var WORKER_COUNT = runtime.NumCPU()
diff --git a/plugins/tangle/solidifier_test.go b/plugins/tangle/solidifier_test.go
index c127540483..28a63bc25a 100644
--- a/plugins/tangle/solidifier_test.go
+++ b/plugins/tangle/solidifier_test.go
@@ -1,56 +1,140 @@
package tangle
import (
+ "io/ioutil"
+ stdlog "log"
"os"
- "sync"
+ "sync/atomic"
"testing"
+ "time"
+ "github.com/iotaledger/goshimmer/packages/database"
+ "github.com/iotaledger/goshimmer/packages/gossip"
+ "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
- "github.com/iotaledger/goshimmer/plugins/gossip"
+ "github.com/iotaledger/goshimmer/packages/parameter"
"github.com/iotaledger/hive.go/events"
+ "github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/node"
- "github.com/iotaledger/hive.go/parameter"
"github.com/iotaledger/iota.go/trinary"
+ "github.com/stretchr/testify/require"
)
-func TestMain(m *testing.M) {
- parameter.FetchConfig(false)
- os.Exit(m.Run())
+// use much lower min weight magnitude for the tests
+const testMWM = 8
+
+func init() {
+ if err := parameter.LoadDefaultConfig(false); err != nil {
+ stdlog.Fatalf("Failed to initialize config: %s", err)
+ }
+ if err := logger.InitGlobalLogger(parameter.NodeConfig); err != nil {
+ stdlog.Fatalf("Failed to initialize config: %s", err)
+ }
}
-func TestSolidifier(t *testing.T) {
- // show all error messages for tests
- // TODO: adjust logger package
+func TestTangle(t *testing.T) {
+ dir, err := ioutil.TempDir("", t.Name())
+ require.NoError(t, err)
+ defer os.Remove(dir)
+ // use the tempdir for the database
+ parameter.NodeConfig.Set(database.CFG_DIRECTORY, dir)
// start a test node
- node.Start(PLUGIN)
-
- // create transactions and chain them together
- transaction1 := value_transaction.New()
- transaction1.SetNonce(trinary.Trytes("99999999999999999999999999A"))
- transaction2 := value_transaction.New()
- transaction2.SetBranchTransactionHash(transaction1.GetHash())
- transaction3 := value_transaction.New()
- transaction3.SetBranchTransactionHash(transaction2.GetHash())
- transaction4 := value_transaction.New()
- transaction4.SetBranchTransactionHash(transaction3.GetHash())
-
- // setup event handlers
- var wg sync.WaitGroup
- Events.TransactionSolid.Attach(events.NewClosure(func(transaction *value_transaction.ValueTransaction) {
- wg.Done()
- }))
-
- // issue transactions
- wg.Add(4)
- gossip.Events.ReceiveTransaction.Trigger(transaction1.MetaTransaction)
- gossip.Events.ReceiveTransaction.Trigger(transaction2.MetaTransaction)
- gossip.Events.ReceiveTransaction.Trigger(transaction3.MetaTransaction)
- gossip.Events.ReceiveTransaction.Trigger(transaction4.MetaTransaction)
-
- // wait until all are solid
- wg.Wait()
-
- // shutdown test node
- node.Shutdown()
+ node.Start(node.Plugins(PLUGIN))
+ defer node.Shutdown()
+
+ t.Run("ReadTransactionHashesForAddressFromDatabase", func(t *testing.T) {
+ tx1 := value_transaction.New()
+ tx1.SetAddress("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
+ tx1.SetTimestamp(uint(time.Now().UnixNano()))
+ require.NoError(t, tx1.DoProofOfWork(testMWM))
+
+ tx2 := value_transaction.New()
+ tx2.SetTimestamp(uint(time.Now().UnixNano()))
+ require.NoError(t, tx2.DoProofOfWork(testMWM))
+
+ transactionReceived(&gossip.TransactionReceivedEvent{Data: tx1.GetBytes()})
+
+ txAddr, err := ReadTransactionHashesForAddressFromDatabase(tx1.GetAddress())
+ require.NoError(t, err)
+ require.ElementsMatch(t, []trinary.Hash{tx1.GetHash()}, txAddr)
+ })
+
+ t.Run("ProofOfWork", func(t *testing.T) {
+ tx1 := value_transaction.New()
+ tx1.SetTimestamp(uint(time.Now().UnixNano()))
+ require.NoError(t, tx1.DoProofOfWork(1))
+
+ tx2 := value_transaction.New()
+ tx2.SetTimestamp(uint(time.Now().UnixNano()))
+ require.NoError(t, tx2.DoProofOfWork(testMWM))
+
+ var counter int32
+ closure := events.NewClosure(func(transaction *value_transaction.ValueTransaction) {
+ atomic.AddInt32(&counter, 1)
+ })
+ Events.TransactionSolid.Attach(closure)
+ defer Events.TransactionSolid.Detach(closure)
+
+ transactionReceived(&gossip.TransactionReceivedEvent{Data: tx1.GetBytes()})
+ transactionReceived(&gossip.TransactionReceivedEvent{Data: tx2.GetBytes()})
+
+ time.Sleep(100 * time.Millisecond)
+ require.EqualValues(t, 1, counter)
+ })
+
+ t.Run("Solidifier", func(t *testing.T) {
+ transaction1 := value_transaction.New()
+ transaction1.SetTimestamp(uint(time.Now().UnixNano()))
+ require.NoError(t, transaction1.DoProofOfWork(testMWM))
+
+ transaction2 := value_transaction.New()
+ transaction2.SetTimestamp(uint(time.Now().UnixNano()))
+ transaction2.SetBranchTransactionHash(transaction1.GetHash())
+ require.NoError(t, transaction2.DoProofOfWork(testMWM))
+
+ transaction3 := value_transaction.New()
+ transaction3.SetTimestamp(uint(time.Now().UnixNano()))
+ transaction3.SetBranchTransactionHash(transaction2.GetHash())
+ require.NoError(t, transaction3.DoProofOfWork(testMWM))
+
+ transaction4 := value_transaction.New()
+ transaction4.SetTimestamp(uint(time.Now().UnixNano()))
+ transaction4.SetBranchTransactionHash(transaction3.GetHash())
+ require.NoError(t, transaction4.DoProofOfWork(testMWM))
+
+ var counter int32
+ closure := events.NewClosure(func(tx *value_transaction.ValueTransaction) {
+ atomic.AddInt32(&counter, 1)
+ log.Infof("Transaction solid: hash=%s", tx.GetHash())
+ })
+ Events.TransactionSolid.Attach(closure)
+ defer Events.TransactionSolid.Detach(closure)
+
+ // only transaction3 should be requested
+ SetRequester(RequesterFunc(func(hash trinary.Hash) {
+ if transaction3.GetHash() == hash {
+ // return the transaction data
+ transactionReceived(&gossip.TransactionReceivedEvent{Data: transaction3.GetBytes()})
+ }
+ }))
+
+ transactionReceived(&gossip.TransactionReceivedEvent{Data: transaction1.GetBytes()})
+ transactionReceived(&gossip.TransactionReceivedEvent{Data: transaction2.GetBytes()})
+ // transactionReceived(&gossip.TransactionReceivedEvent{Data: transaction3.GetBytes()})
+ transactionReceived(&gossip.TransactionReceivedEvent{Data: transaction4.GetBytes()})
+
+ time.Sleep(100 * time.Millisecond)
+ require.EqualValues(t, 4, counter)
+ })
+}
+
+// transactionReceived mocks the TransactionReceived event by allowing lower mwm
+func transactionReceived(ev *gossip.TransactionReceivedEvent) {
+ metaTx := meta_transaction.FromBytes(ev.Data)
+ if metaTx.GetWeightMagnitude() < testMWM {
+ log.Warnf("invalid weight magnitude: %d / %d", metaTx.GetWeightMagnitude(), testMWM)
+ return
+ }
+ processMetaTransaction(metaTx)
}
diff --git a/plugins/tangle/transaction.go b/plugins/tangle/transaction.go
index 611a73dfa0..bff7b6b726 100644
--- a/plugins/tangle/transaction.go
+++ b/plugins/tangle/transaction.go
@@ -1,18 +1,18 @@
package tangle
import (
+ "fmt"
+
"github.com/iotaledger/goshimmer/packages/database"
- "github.com/iotaledger/goshimmer/packages/datastructure"
- "github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
- "github.com/iotaledger/goshimmer/packages/typeutils"
- "github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/lru_cache"
+ "github.com/iotaledger/hive.go/typeutils"
"github.com/iotaledger/iota.go/trinary"
)
// region public api ///////////////////////////////////////////////////////////////////////////////////////////////////
-func GetTransaction(transactionHash trinary.Trytes, computeIfAbsent ...func(trinary.Trytes) *value_transaction.ValueTransaction) (result *value_transaction.ValueTransaction, err errors.IdentifiableError) {
+func GetTransaction(transactionHash trinary.Trytes, computeIfAbsent ...func(trinary.Trytes) *value_transaction.ValueTransaction) (result *value_transaction.ValueTransaction, err error) {
if cacheResult := transactionCache.ComputeIfAbsent(transactionHash, func() interface{} {
if transaction, dbErr := getTransactionFromDatabase(transactionHash); dbErr != nil {
err = dbErr
@@ -34,7 +34,7 @@ func GetTransaction(transactionHash trinary.Trytes, computeIfAbsent ...func(trin
return
}
-func ContainsTransaction(transactionHash trinary.Trytes) (result bool, err errors.IdentifiableError) {
+func ContainsTransaction(transactionHash trinary.Trytes) (result bool, err error) {
if transactionCache.Contains(transactionHash) {
result = true
} else {
@@ -52,22 +52,28 @@ func StoreTransaction(transaction *value_transaction.ValueTransaction) {
// region lru cache ////////////////////////////////////////////////////////////////////////////////////////////////////
-var transactionCache = datastructure.NewLRUCache(TRANSACTION_CACHE_SIZE, &datastructure.LRUCacheOptions{
- EvictionCallback: onEvictTransaction,
+var transactionCache = lru_cache.NewLRUCache(TRANSACTION_CACHE_SIZE, &lru_cache.LRUCacheOptions{
+ EvictionCallback: onEvictTransactions,
+ EvictionBatchSize: 200,
})
-func onEvictTransaction(_ interface{}, value interface{}) {
- if evictedTransaction := value.(*value_transaction.ValueTransaction); evictedTransaction.GetModified() {
- go func(evictedTransaction *value_transaction.ValueTransaction) {
- if err := storeTransactionInDatabase(evictedTransaction); err != nil {
+func onEvictTransactions(_ interface{}, values interface{}) {
+ // TODO: replace with apply
+ for _, obj := range values.([]interface{}) {
+ if tx := obj.(*value_transaction.ValueTransaction); tx.GetModified() {
+ if err := storeTransactionInDatabase(tx); err != nil {
panic(err)
}
- }(evictedTransaction)
+ }
}
}
+func FlushTransactionCache() {
+ transactionCache.DeleteAll()
+}
+
const (
- TRANSACTION_CACHE_SIZE = 50000
+ TRANSACTION_CACHE_SIZE = 500
)
// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -76,42 +82,40 @@ const (
var transactionDatabase database.Database
-func configureTransactionDatabase(plugin *node.Plugin) {
- if db, err := database.Get("transaction"); err != nil {
+func configureTransactionDatabase() {
+ if db, err := database.Get(database.DBPrefixTransaction, database.GetBadgerInstance()); err != nil {
panic(err)
} else {
transactionDatabase = db
}
}
-func storeTransactionInDatabase(transaction *value_transaction.ValueTransaction) errors.IdentifiableError {
+func storeTransactionInDatabase(transaction *value_transaction.ValueTransaction) error {
if transaction.GetModified() {
- if err := transactionDatabase.Set(typeutils.StringToBytes(transaction.GetHash()), transaction.MetaTransaction.GetBytes()); err != nil {
- return ErrDatabaseError.Derive(err, "failed to store transaction")
+ if err := transactionDatabase.Set(database.Entry{Key: typeutils.StringToBytes(transaction.GetHash()), Value: transaction.MetaTransaction.GetBytes()}); err != nil {
+ return fmt.Errorf("%w: failed to store transaction: %s", ErrDatabaseError, err.Error())
}
-
transaction.SetModified(false)
}
return nil
}
-func getTransactionFromDatabase(transactionHash trinary.Trytes) (*value_transaction.ValueTransaction, errors.IdentifiableError) {
+func getTransactionFromDatabase(transactionHash trinary.Trytes) (*value_transaction.ValueTransaction, error) {
txData, err := transactionDatabase.Get(typeutils.StringToBytes(transactionHash))
if err != nil {
if err == database.ErrKeyNotFound {
return nil, nil
- } else {
- return nil, ErrDatabaseError.Derive(err, "failed to retrieve transaction")
}
+ return nil, fmt.Errorf("%w: failed to retrieve transaction: %s", ErrDatabaseError, err)
}
- return value_transaction.FromBytes(txData), nil
+ return value_transaction.FromBytes(txData.Value), nil
}
-func databaseContainsTransaction(transactionHash trinary.Trytes) (bool, errors.IdentifiableError) {
+func databaseContainsTransaction(transactionHash trinary.Trytes) (bool, error) {
if contains, err := transactionDatabase.Contains(typeutils.StringToBytes(transactionHash)); err != nil {
- return contains, ErrDatabaseError.Derive(err, "failed to check if the transaction exists")
+ return contains, fmt.Errorf("%w: failed to check if the transaction exists: %s", ErrDatabaseError, err)
} else {
return contains, nil
}
diff --git a/plugins/tangle/transaction_metadata.go b/plugins/tangle/transaction_metadata.go
index 75c1086fc0..152f0126da 100644
--- a/plugins/tangle/transaction_metadata.go
+++ b/plugins/tangle/transaction_metadata.go
@@ -1,18 +1,18 @@
package tangle
import (
+ "fmt"
+
"github.com/iotaledger/goshimmer/packages/database"
- "github.com/iotaledger/goshimmer/packages/datastructure"
- "github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/model/transactionmetadata"
- "github.com/iotaledger/goshimmer/packages/typeutils"
- "github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/hive.go/lru_cache"
+ "github.com/iotaledger/hive.go/typeutils"
"github.com/iotaledger/iota.go/trinary"
)
// region public api ///////////////////////////////////////////////////////////////////////////////////////////////////
-func GetTransactionMetadata(transactionHash trinary.Trytes, computeIfAbsent ...func(trinary.Trytes) *transactionmetadata.TransactionMetadata) (result *transactionmetadata.TransactionMetadata, err errors.IdentifiableError) {
+func GetTransactionMetadata(transactionHash trinary.Trytes, computeIfAbsent ...func(trinary.Trytes) *transactionmetadata.TransactionMetadata) (result *transactionmetadata.TransactionMetadata, err error) {
if cacheResult := transactionMetadataCache.ComputeIfAbsent(transactionHash, func() interface{} {
if transactionMetadata, dbErr := getTransactionMetadataFromDatabase(transactionHash); dbErr != nil {
err = dbErr
@@ -34,7 +34,7 @@ func GetTransactionMetadata(transactionHash trinary.Trytes, computeIfAbsent ...f
return
}
-func ContainsTransactionMetadata(transactionHash trinary.Trytes) (result bool, err errors.IdentifiableError) {
+func ContainsTransactionMetadata(transactionHash trinary.Trytes) (result bool, err error) {
if transactionMetadataCache.Contains(transactionHash) {
result = true
} else {
@@ -52,22 +52,28 @@ func StoreTransactionMetadata(transactionMetadata *transactionmetadata.Transacti
// region lru cache ////////////////////////////////////////////////////////////////////////////////////////////////////
-var transactionMetadataCache = datastructure.NewLRUCache(TRANSACTION_METADATA_CACHE_SIZE, &datastructure.LRUCacheOptions{
- EvictionCallback: onEvictTransactionMetadata,
+var transactionMetadataCache = lru_cache.NewLRUCache(TRANSACTION_METADATA_CACHE_SIZE, &lru_cache.LRUCacheOptions{
+ EvictionCallback: onEvictTransactionMetadatas,
+ EvictionBatchSize: 200,
})
-func onEvictTransactionMetadata(_ interface{}, value interface{}) {
- if evictedTransactionMetadata := value.(*transactionmetadata.TransactionMetadata); evictedTransactionMetadata.GetModified() {
- go func(evictedTransactionMetadata *transactionmetadata.TransactionMetadata) {
- if err := storeTransactionMetadataInDatabase(evictedTransactionMetadata); err != nil {
+func onEvictTransactionMetadatas(_ interface{}, values interface{}) {
+ // TODO: replace with apply
+ for _, obj := range values.([]interface{}) {
+ if txMetadata := obj.(*transactionmetadata.TransactionMetadata); txMetadata.GetModified() {
+ if err := storeTransactionMetadataInDatabase(txMetadata); err != nil {
panic(err)
}
- }(evictedTransactionMetadata)
+ }
}
}
+func FlushTransactionMetadata() {
+ transactionCache.DeleteAll()
+}
+
const (
- TRANSACTION_METADATA_CACHE_SIZE = 50000
+ TRANSACTION_METADATA_CACHE_SIZE = 500
)
// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -76,21 +82,21 @@ const (
var transactionMetadataDatabase database.Database
-func configureTransactionMetaDataDatabase(plugin *node.Plugin) {
- if db, err := database.Get("transactionMetadata"); err != nil {
+func configureTransactionMetaDataDatabase() {
+ if db, err := database.Get(database.DBPrefixTransactionMetadata, database.GetBadgerInstance()); err != nil {
panic(err)
} else {
transactionMetadataDatabase = db
}
}
-func storeTransactionMetadataInDatabase(metadata *transactionmetadata.TransactionMetadata) errors.IdentifiableError {
+func storeTransactionMetadataInDatabase(metadata *transactionmetadata.TransactionMetadata) error {
if metadata.GetModified() {
if marshaledMetadata, err := metadata.Marshal(); err != nil {
return err
} else {
- if err := transactionMetadataDatabase.Set(typeutils.StringToBytes(metadata.GetHash()), marshaledMetadata); err != nil {
- return ErrDatabaseError.Derive(err, "failed to store transaction metadata")
+ if err := transactionMetadataDatabase.Set(database.Entry{Key: typeutils.StringToBytes(metadata.GetHash()), Value: marshaledMetadata}); err != nil {
+ return fmt.Errorf("%w: failed to store transaction metadata: %s", ErrDatabaseError, err)
}
metadata.SetModified(false)
@@ -100,27 +106,26 @@ func storeTransactionMetadataInDatabase(metadata *transactionmetadata.Transactio
return nil
}
-func getTransactionMetadataFromDatabase(transactionHash trinary.Trytes) (*transactionmetadata.TransactionMetadata, errors.IdentifiableError) {
+func getTransactionMetadataFromDatabase(transactionHash trinary.Trytes) (*transactionmetadata.TransactionMetadata, error) {
txMetadata, err := transactionMetadataDatabase.Get(typeutils.StringToBytes(transactionHash))
if err != nil {
if err == database.ErrKeyNotFound {
return nil, nil
- } else {
- return nil, ErrDatabaseError.Derive(err, "failed to retrieve transaction")
}
+ return nil, fmt.Errorf("%w: failed to retrieve transaction: %s", ErrDatabaseError, err)
}
var result transactionmetadata.TransactionMetadata
- if err := result.Unmarshal(txMetadata); err != nil {
+ if err := result.Unmarshal(txMetadata.Value); err != nil {
panic(err)
}
return &result, nil
}
-func databaseContainsTransactionMetadata(transactionHash trinary.Trytes) (bool, errors.IdentifiableError) {
+func databaseContainsTransactionMetadata(transactionHash trinary.Trytes) (bool, error) {
if contains, err := transactionMetadataDatabase.Contains(typeutils.StringToBytes(transactionHash)); err != nil {
- return contains, ErrDatabaseError.Derive(err, "failed to check if the transaction metadata exists")
+ return contains, fmt.Errorf("%w: failed to check if the transaction metadata exists: %s", ErrDatabaseError, err)
} else {
return contains, nil
}
diff --git a/plugins/tangle/tx_per_address.go b/plugins/tangle/tx_per_address.go
new file mode 100644
index 0000000000..092a752484
--- /dev/null
+++ b/plugins/tangle/tx_per_address.go
@@ -0,0 +1,59 @@
+package tangle
+
+import (
+ "fmt"
+
+ "github.com/iotaledger/goshimmer/packages/database"
+ "github.com/iotaledger/hive.go/typeutils"
+ "github.com/iotaledger/iota.go/trinary"
+)
+
+var (
+ transactionsHashesForAddressDatabase database.Database
+)
+
+func configureTransactionHashesForAddressDatabase() {
+ if db, err := database.Get(database.DBPrefixAddressTransactions, database.GetBadgerInstance()); err != nil {
+ panic(err)
+ } else {
+ transactionsHashesForAddressDatabase = db
+ }
+}
+
+type TxHashForAddress struct {
+ Address trinary.Hash
+ TxHash trinary.Hash
+}
+
+func StoreTransactionHashForAddressInDatabase(address *TxHashForAddress) error {
+ if err := transactionsHashesForAddressDatabase.Set(database.Entry{
+ Key: databaseKeyForHashPrefixedHash(address.Address, address.TxHash),
+ Value: []byte{},
+ }); err != nil {
+ return fmt.Errorf("%w: failed to store tx for address in database: %s", ErrDatabaseError, err)
+ }
+ return nil
+}
+
+func DeleteTransactionHashForAddressInDatabase(address *TxHashForAddress) error {
+ if err := transactionsHashesForAddressDatabase.Delete(
+ databaseKeyForHashPrefixedHash(address.Address, address.TxHash),
+ ); err != nil {
+ return fmt.Errorf("%w: failed to delete tx for address: %s", ErrDatabaseError, err)
+ }
+
+ return nil
+}
+
+func ReadTransactionHashesForAddressFromDatabase(address trinary.Hash) ([]trinary.Hash, error) {
+ var transactionHashes []trinary.Hash
+ err := transactionsHashesForAddressDatabase.StreamForEachPrefixKeyOnly(databaseKeyForHashPrefix(address), func(key database.KeyOnlyEntry) error {
+ transactionHashes = append(transactionHashes, typeutils.BytesToString(key.Key))
+ return nil
+ })
+
+ if err != nil {
+ return nil, fmt.Errorf("%w: failed to read tx per address from database: %s", ErrDatabaseError, err)
+ }
+ return transactionHashes, nil
+}
diff --git a/plugins/tangle/unsolidTxs.go b/plugins/tangle/unsolidTxs.go
new file mode 100644
index 0000000000..36924fa75f
--- /dev/null
+++ b/plugins/tangle/unsolidTxs.go
@@ -0,0 +1,59 @@
+package tangle
+
+import (
+ "sync"
+ "time"
+)
+
+type UnsolidTxs struct {
+ internal map[string]Info
+ sync.RWMutex
+}
+
+type Info struct {
+ lastRequest time.Time
+ counter int
+}
+
+func NewUnsolidTxs() *UnsolidTxs {
+ return &UnsolidTxs{
+ internal: make(map[string]Info),
+ }
+}
+
+func (u *UnsolidTxs) Add(hash string) bool {
+ u.Lock()
+ defer u.Unlock()
+ _, contains := u.internal[hash]
+ if contains {
+ return false
+ }
+ info := Info{
+ lastRequest: time.Now(),
+ counter: 1,
+ }
+ u.internal[hash] = info
+ return true
+}
+
+func (u *UnsolidTxs) Remove(hash string) {
+ u.Lock()
+ delete(u.internal, hash)
+ u.Unlock()
+}
+
+func (u *UnsolidTxs) Update(targetTime time.Time) (result []string) {
+ u.Lock()
+ for k, v := range u.internal {
+ if v.lastRequest.Before(targetTime) {
+ result = append(result, k)
+
+ v.lastRequest = time.Now()
+ v.counter++
+
+ u.internal[k] = v
+ }
+ }
+ u.Unlock()
+ return result
+}
diff --git a/plugins/tipselection/plugin.go b/plugins/tipselection/plugin.go
index 2f919f5857..7587075e30 100644
--- a/plugins/tipselection/plugin.go
+++ b/plugins/tipselection/plugin.go
@@ -5,19 +5,23 @@ import (
"github.com/iotaledger/goshimmer/plugins/tangle"
"github.com/iotaledger/hive.go/events"
"github.com/iotaledger/hive.go/node"
+ "github.com/iotaledger/iota.go/trinary"
)
var PLUGIN = node.NewPlugin("Tipselection", node.Enabled, configure, run)
-func configure(node *node.Plugin) {
+func configure(*node.Plugin) {
+ tipSet = make(map[trinary.Hash]struct{})
+
tangle.Events.TransactionSolid.Attach(events.NewClosure(func(transaction *value_transaction.ValueTransaction) {
- go func() {
- tips.Delete(transaction.GetBranchTransactionHash())
- tips.Delete(transaction.GetTrunkTransactionHash())
- tips.Set(transaction.GetHash(), transaction.GetHash())
- }()
+ mutex.Lock()
+ defer mutex.Unlock()
+
+ delete(tipSet, transaction.GetBranchTransactionHash())
+ delete(tipSet, transaction.GetTrunkTransactionHash())
+ tipSet[transaction.GetHash()] = struct{}{}
}))
}
-func run(run *node.Plugin) {
+func run(*node.Plugin) {
}
diff --git a/plugins/tipselection/tipselection.go b/plugins/tipselection/tipselection.go
index 34eb31e60c..95cb4bc1b5 100644
--- a/plugins/tipselection/tipselection.go
+++ b/plugins/tipselection/tipselection.go
@@ -1,23 +1,54 @@
package tipselection
import (
- "github.com/iotaledger/goshimmer/packages/datastructure"
+ "math/rand"
+ "sync"
+
"github.com/iotaledger/goshimmer/packages/model/meta_transaction"
"github.com/iotaledger/iota.go/trinary"
)
-var tips = datastructure.NewRandomMap()
+var (
+ tipSet map[trinary.Hash]struct{}
+ mutex sync.RWMutex
+)
+
+func GetRandomTip(excluding ...trinary.Hash) trinary.Trytes {
+ mutex.RLock()
+ defer mutex.RUnlock()
+
+ numTips := len(tipSet)
+ if numTips == 0 {
+ return meta_transaction.BRANCH_NULL_HASH
+ }
-func GetRandomTip() (result trinary.Trytes) {
- if randomTipHash := tips.RandomEntry(); randomTipHash != nil {
- result = randomTipHash.(trinary.Trytes)
- } else {
- result = meta_transaction.BRANCH_NULL_HASH
+ var ignore trinary.Hash
+ if len(excluding) > 0 {
+ ignore = excluding[0]
+ }
+ if _, contains := tipSet[ignore]; contains {
+ if numTips == 1 {
+ return ignore
+ }
+ numTips -= 1
}
- return
+ i := rand.Intn(numTips)
+ for k := range tipSet {
+ if k == ignore {
+ continue
+ }
+ if i == 0 {
+ return k
+ }
+ i--
+ }
+ panic("unreachable")
}
func GetTipsCount() int {
- return tips.Size()
+ mutex.RLock()
+ defer mutex.RUnlock()
+
+ return len(tipSet)
}
diff --git a/plugins/tipselection/tipselection_test.go b/plugins/tipselection/tipselection_test.go
index cb8274bfed..cb18e47815 100644
--- a/plugins/tipselection/tipselection_test.go
+++ b/plugins/tipselection/tipselection_test.go
@@ -1,24 +1,81 @@
package tipselection
import (
- "fmt"
+ "log"
"testing"
+ "github.com/iotaledger/goshimmer/packages/model/meta_transaction"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
"github.com/iotaledger/goshimmer/plugins/tangle"
+ "github.com/iotaledger/hive.go/logger"
+ "github.com/spf13/viper"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
-func Test(t *testing.T) {
+func init() {
+ if err := logger.InitGlobalLogger(viper.New()); err != nil {
+ log.Fatal(err)
+ }
+}
+
+func TestEmptyTipSet(t *testing.T) {
+ configure(nil)
+ assert.Equal(t, 0, GetTipsCount())
+ assert.Equal(t, meta_transaction.BRANCH_NULL_HASH, GetRandomTip())
+}
+
+func TestSingleTip(t *testing.T) {
configure(nil)
- for i := 0; i < 1000; i++ {
- tx := value_transaction.New()
- tx.SetValue(int64(i + 1))
- tx.SetBranchTransactionHash(GetRandomTip())
- tx.SetTrunkTransactionHash(GetRandomTip())
+ tx := value_transaction.New()
+ tx.SetValue(int64(1))
+ tx.SetBranchTransactionHash(meta_transaction.BRANCH_NULL_HASH)
+ tx.SetTrunkTransactionHash(meta_transaction.BRANCH_NULL_HASH)
- tangle.Events.TransactionSolid.Trigger(tx)
+ tangle.Events.TransactionSolid.Trigger(tx)
- fmt.Println(GetTipsCount())
- }
+ assert.Equal(t, 1, GetTipsCount())
+
+ tip1 := GetRandomTip()
+ assert.NotNil(t, tip1)
+ tip2 := GetRandomTip(tip1)
+ assert.NotNil(t, tip2)
+ assert.Equal(t, tip1, tip2)
+}
+
+func TestGetRandomTip(t *testing.T) {
+ configure(nil)
+
+ tx := value_transaction.New()
+ tx.SetValue(int64(1))
+ tx.SetBranchTransactionHash(meta_transaction.BRANCH_NULL_HASH)
+ tx.SetTrunkTransactionHash(meta_transaction.BRANCH_NULL_HASH)
+
+ tangle.Events.TransactionSolid.Trigger(tx)
+
+ tx = value_transaction.New()
+ tx.SetValue(int64(2))
+ tx.SetBranchTransactionHash(meta_transaction.BRANCH_NULL_HASH)
+ tx.SetTrunkTransactionHash(meta_transaction.BRANCH_NULL_HASH)
+
+ tangle.Events.TransactionSolid.Trigger(tx)
+
+ assert.Equal(t, 2, GetTipsCount())
+
+ tip1 := GetRandomTip()
+ require.NotNil(t, tip1)
+ tip2 := GetRandomTip(tip1)
+ require.NotNil(t, tip2)
+ require.NotEqual(t, tip1, tip2)
+
+ tx = value_transaction.New()
+ tx.SetValue(int64(3))
+ tx.SetBranchTransactionHash(tip1)
+ tx.SetTrunkTransactionHash(tip2)
+
+ tangle.Events.TransactionSolid.Trigger(tx)
+
+ assert.Equal(t, 1, GetTipsCount())
+ assert.Equal(t, tx.GetHash(), GetRandomTip())
}
diff --git a/plugins/ui/files.go b/plugins/ui/files.go
deleted file mode 100644
index a336e08738..0000000000
--- a/plugins/ui/files.go
+++ /dev/null
@@ -1,995 +0,0 @@
-package ui
-
-var files = map[string]string{
- "css/styles.css": `/* mobile */
-html {
- font-size:12px;
-}
-/* tablets */
-@media only screen and (min-width: 600px) {
- html {
- font-size:14px;
- }
-}
-/* desktop */
-@media only screen and (min-width: 768px) {
- html {
- font-size:16px;
- }
-}
-body {
- opacity: 1;
- transition: 0.35s opacity;
-}
-body.fade {
- opacity: 0;
- transition: none;
-}
-
-/* bulma */
-[v-cloak] {
- display: none;
-}
-.section {
- padding: 1.8rem 1.5rem;
-}
-.columns {
- margin-bottom: 0 !important;
-}
-.header{
- background:#005050;
- padding-bottom: 0;
-}
-
-/* main */
-.title{
- display: flex;
- align-items: center;
-}
-.login{
- background:#004965;
- border: 1px solid #5e6d6f;
- padding:20px;
- font-size: 0.9rem;
- border-radius: 0.4em;
- box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
-}
-.login button{
- width:100%;
- margin-top:12px;
-}
-.login div {
- display: flex;
- align-items: center;
- font-size:1.2rem;
-}
-.login div:first-child {
- margin-bottom:12px;
-}
-.login div span {
- min-width:6.5rem;
-}
-.status{
- margin-left:54px;
-}
-.status > span {
- margin-left:8px;
-}
-.tps.input {
- width:100px;
-}
-.tx-toolbar {
- display: flex;
- justify-content: space-between;
- height:50px;
-}
-.graph {
- border: 1px solid #5e6d6f;
- overflow: hidden;
-}
-#graph {
- width:100%;
- height: 100%;
-}
-.hovered-node{
- position: absolute;
- top: 0;
- font-size: 0.75rem;
- padding: 5px 10px;
- width: 100%;
- color: #c5c5c5;
-}
-.chart-container {
- height: calc(100% - 50px);
- display: flex;
- border:1px solid #5e6d6f;
- overflow: hidden;
-}
-
-/* tables */
-.info-list{
- background:#004965;
- border: 1px solid #5e6d6f;
- font-size: 0.9rem;
-}
-.info-list .list-item{
- display: flex;
- justify-content: space-between;
- white-space: nowrap;
- overflow: hidden;
-}
-
-.logs-container {
- overflow: scroll;
- display: flex;
- flex-direction: column-reverse;
- border:1px solid #5e6d6f;
-}
-.logs-list {
- background:#004965;
- table-layout: fixed;
- width: 100%;
- font-size: 0.9rem;
-}
-.logs-list th {
- background: #00374c;
-}
-.logs-list td {
- font-family: "Inconsolata", "Consolas", "Monaco", monospace;
- padding: 0.25em 0.75em;
- overflow: auto;
- white-space: nowrap;
-}
-.logs-list td::-webkit-scrollbar { height: 0 !important }
-.logs-list td:first-child {
- font-weight: bold;
-}
-.logs-list td:last-child span {
- width:35px;
- text-align: center;
- font-weight: bold;
- display: inline-block;
-}
-
-.tx-container {
- height: 100%;
- overflow: scroll;
- display: flex;
- flex-direction: column-reverse;
- border:1px solid #5e6d6f;
-}
-.tx-list {
- background:#004965;
- table-layout: fixed;
- width: 100%;
- font-size: 0.9rem;
-}
-.tx-list th {
- padding-bottom: 3px;
- border-top:1px solid #5e6d6f !important;
- background: #00374c;
-}
-.tx-list tbody tr {
- cursor: pointer;
-}
-.tx-list tbody tr:hover {
- background: #00374c;
-}
-.tx-list td {
- font-family: "Inconsolata", "Consolas", "Monaco", monospace;
- padding: 0.25em 0.75em;
- overflow: auto;
- white-space: nowrap;
-}
-.tx-list td::-webkit-scrollbar { height: 0 !important }
-.tx-list td:first-child {
- font-weight: bold;
-}
-.tx-list tr.full-tx {
- display:block;
- width:100%;
-}
-.tx-list tr.full-tx td {
- padding:0;
- width:100%;
-}
-.tx-list tr.full-tx pre:hover {
- background:#232929;
-}
-.no-txs{
- height:100%;
- width:100%;
- display:flex;
- align-items: center;
- justify-content: center;
- color:grey;
- font-size: 0.8rem;
-}
-`,
- "index.html": `
-
-
-
-
-
-
- Shimmer UI
-
-
-
-
-
-