From eb396217d0018f5aaa0545d0f1c5a31fb8eab423 Mon Sep 17 00:00:00 2001 From: chris Date: Sun, 22 Nov 2015 19:40:07 +0100 Subject: [PATCH 01/21] #113 Event Driven Architecture - initial commit includes a simple and advanced example of Event-driven architecture --- event-driven-architecture/index.md | 31 +++++++++++++++ event-driven-architecture/pom.xml | 22 +++++++++++ .../java/com/iluwatar/eda/advanced/App.java | 10 +++++ .../com/iluwatar/eda/advanced/Channel.java | 6 +++ .../iluwatar/eda/advanced/DynamicRouter.java | 6 +++ .../java/com/iluwatar/eda/advanced/Event.java | 7 ++++ .../eda/advanced/EventDispatcher.java | 21 ++++++++++ .../com/iluwatar/eda/advanced/Handler.java | 7 ++++ .../com/iluwatar/eda/advanced/Message.java | 6 +++ .../java/com/iluwatar/eda/simple/App.java | 38 +++++++++++++++++++ .../java/com/iluwatar/eda/simple/Event.java | 15 ++++++++ .../com/iluwatar/eda/simple/EventHandler.java | 15 ++++++++ 12 files changed, 184 insertions(+) create mode 100644 event-driven-architecture/index.md create mode 100644 event-driven-architecture/pom.xml create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/simple/App.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/simple/Event.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/simple/EventHandler.java diff --git a/event-driven-architecture/index.md b/event-driven-architecture/index.md new file mode 100644 index 000000000..d5b501c3a --- /dev/null +++ b/event-driven-architecture/index.md @@ -0,0 +1,31 @@ +layout: pattern +title: Event Driven Architecture +folder: event-driven-architecture +permalink: /patterns/event-driven-architecture + + +**Intent:** Send and notify state changes of your objects to other applications using an Event-driven Architecture. + +![alt text](./etc/class_diagram.png "Event Driven Architecture") + +**Applicability:** Use an Event-driven architecture when + +* you want to create a loosely coupled system +* you want to build a more responsive system +* you want a system that is easier to extend + +**Real world examples:** + +* A Loan Application has been accepted/rejected (commercial business). +* A new Rostering Schedule is ready for distribution to all crew (Airline Management System). +* An Illegal Trade Pattern has been detected (Trading Fraud Detection System). +* A simulated car has hits another simulated car (Commercial Racing Game). +* A robot has reached its destination (Real Time Warehouse Management System). +* A HTML message has been received (Web Server). +* A key has been pressed (Text Editor). + +**Credits:** + +* [Event-driven architecture - Wikipedia](http://www.computerweekly.com/feature/Write-through-write-around-write-back-Cache-explained) +* [Fundamental Components of an Event-Driven Architecture](http://giocc.com/fundamental-components-of-an-event-driven-architecture.html) +* [Real World Applications/Event Driven Applications](https://wiki.haskell.org/Real_World_Applications/Event_Driven_Applications) \ No newline at end of file diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml new file mode 100644 index 000000000..fdea3855f --- /dev/null +++ b/event-driven-architecture/pom.xml @@ -0,0 +1,22 @@ + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.8.0-SNAPSHOT + + + event-driven-architecture + + + + junit + junit + test + + + \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java new file mode 100644 index 000000000..bcd2120d8 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java @@ -0,0 +1,10 @@ +package com.iluwatar.eda.advanced; + +public class App { + + public static void main(String[] args) { + EventDispatcher dispatcher = new EventDispatcher(); + dispatcher.registerChannel(Event.class, new Handler()); + dispatcher.dispatch(new Event()); + } +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java new file mode 100644 index 000000000..a977010c6 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java @@ -0,0 +1,6 @@ +package com.iluwatar.eda.advanced; + + +public interface Channel { + public void dispatch(E message); +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java new file mode 100644 index 000000000..f72b79150 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java @@ -0,0 +1,6 @@ +package com.iluwatar.eda.advanced; + +public interface DynamicRouter { + public void registerChannel(Class contentType, Channel channel); + public void dispatch(E content); +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java new file mode 100644 index 000000000..8ad48c704 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java @@ -0,0 +1,7 @@ +package com.iluwatar.eda.advanced; + +public class Event implements Message { + public Class getType() { + return getClass(); + } +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java new file mode 100644 index 000000000..def8920c1 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java @@ -0,0 +1,21 @@ +package com.iluwatar.eda.advanced; + +import java.util.HashMap; +import java.util.Map; + +public class EventDispatcher implements DynamicRouter { + private Map, Handler> handlers; + + public EventDispatcher() { + handlers = new HashMap, Handler>(); + } + + public void registerChannel(Class contentType, + Channel channel) { + handlers.put(contentType, (Handler)channel); + } + + public void dispatch(Event content) { + handlers.get(content.getClass()).dispatch(content); + } +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java new file mode 100644 index 000000000..68631b207 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java @@ -0,0 +1,7 @@ +package com.iluwatar.eda.advanced; + +public class Handler implements Channel { + public void dispatch(Event message) { + System.out.println(message.getClass()); + } +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java new file mode 100644 index 000000000..00d335191 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java @@ -0,0 +1,6 @@ +package com.iluwatar.eda.advanced; + + +public interface Message { + public Class getType(); +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/App.java new file mode 100644 index 000000000..1399811bb --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/App.java @@ -0,0 +1,38 @@ +package com.iluwatar.eda.simple; + +import java.util.LinkedList; +import java.util.Queue; + +/** + * Event-driven architecture (EDA) is a software architecture pattern promoting + * the production, detection, consumption of, and reaction to events. + *

+ * This main class publishes events to queue. Each event on the queue is consumed + * and handled depending on the type defined in the {@link Event} + */ +public class App { + + public static void main(String args[]) { + + //create a list of events having different types + //add these events to a simple queue + Queue events = new LinkedList(); + events.add(new Event('A', "Hello")); + events.add(new Event('B', "event-driven")); + events.add(new Event('A', "world!")); + + Event e; + + //the event loop will go through the list of events + //and handle each one depending on it's type + while (!events.isEmpty()) { + e = events.remove(); + + //handle events depending on their type + if (e.type == 'A') + EventHandler.handleEventA(e); + if (e.type == 'B') + EventHandler.handleEventB(e); + } + } +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/Event.java new file mode 100644 index 000000000..1ba04c303 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/Event.java @@ -0,0 +1,15 @@ +package com.iluwatar.eda.simple; + +/** + * The Event class defines the type of event and data related to the event. + */ +public class Event { + + public char type; + public String data; + + public Event(char type, String data){ + this.type = type; + this.data = data; + } +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/EventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/EventHandler.java new file mode 100644 index 000000000..d911c6c8e --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/EventHandler.java @@ -0,0 +1,15 @@ +package com.iluwatar.eda.simple; + +/** + * The {@link EventHandler} class handles performs actions on {@link Event} objects + */ +public class EventHandler { + + public static void handleEventA(Event e){ + System.out.println(e.data); + } + + public static void handleEventB(Event e){ + System.out.println(e.data.toUpperCase()); + } +} From 3ef0921f203fbc022c8081fe717ec0af5587ce77 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 23 Nov 2015 00:02:58 +0100 Subject: [PATCH 02/21] #113 Event Driven Architecture - refactored and moved around some classes --- .../main/java/com/iluwatar/eda/advanced/App.java | 12 ++++++++++-- .../java/com/iluwatar/eda/advanced/Channel.java | 6 ------ .../com/iluwatar/eda/advanced/DynamicRouter.java | 6 ------ .../iluwatar/eda/advanced/EventDispatcher.java | 13 +++++++++---- .../java/com/iluwatar/eda/advanced/Handler.java | 7 ------- .../iluwatar/eda/advanced/{ => events}/Event.java | 4 +++- .../eda/advanced/events/UserCreatedEvent.java | 9 +++++++++ .../eda/advanced/events/UserUpdatedEvent.java | 6 ++++++ .../iluwatar/eda/advanced/framework/Channel.java | 8 ++++++++ .../eda/advanced/framework/DynamicRouter.java | 6 ++++++ .../eda/advanced/{ => framework}/Message.java | 2 +- .../advanced/handler/UserCreatedEventHandler.java | 15 +++++++++++++++ .../advanced/handler/UserUpdatedEventHandler.java | 12 ++++++++++++ 13 files changed, 79 insertions(+), 27 deletions(-) delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java rename event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/{ => events}/Event.java (56%) create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java rename event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/{ => framework}/Message.java (63%) create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java index bcd2120d8..e7b8c01bc 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java @@ -1,10 +1,18 @@ package com.iluwatar.eda.advanced; +import com.iluwatar.eda.advanced.events.Event; +import com.iluwatar.eda.advanced.events.UserCreatedEvent; +import com.iluwatar.eda.advanced.events.UserUpdatedEvent; +import com.iluwatar.eda.advanced.handler.UserCreatedEventHandler; +import com.iluwatar.eda.advanced.handler.UserUpdatedEventHandler; + public class App { public static void main(String[] args) { EventDispatcher dispatcher = new EventDispatcher(); - dispatcher.registerChannel(Event.class, new Handler()); - dispatcher.dispatch(new Event()); + dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); + dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); + dispatcher.dispatch(new UserCreatedEvent()); + dispatcher.dispatch(new UserUpdatedEvent()); } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java deleted file mode 100644 index a977010c6..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Channel.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.iluwatar.eda.advanced; - - -public interface Channel { - public void dispatch(E message); -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java deleted file mode 100644 index f72b79150..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/DynamicRouter.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.iluwatar.eda.advanced; - -public interface DynamicRouter { - public void registerChannel(Class contentType, Channel channel); - public void dispatch(E content); -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java index def8920c1..468160b45 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java @@ -1,18 +1,23 @@ package com.iluwatar.eda.advanced; +import com.iluwatar.eda.advanced.events.Event; +import com.iluwatar.eda.advanced.framework.Channel; +import com.iluwatar.eda.advanced.framework.DynamicRouter; + import java.util.HashMap; import java.util.Map; public class EventDispatcher implements DynamicRouter { - private Map, Handler> handlers; + + private Map, Channel> handlers; public EventDispatcher() { - handlers = new HashMap, Handler>(); + handlers = new HashMap, Channel>(); } public void registerChannel(Class contentType, - Channel channel) { - handlers.put(contentType, (Handler)channel); + Channel channel) { + handlers.put(contentType, channel); } public void dispatch(Event content) { diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java deleted file mode 100644 index 68631b207..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Handler.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iluwatar.eda.advanced; - -public class Handler implements Channel { - public void dispatch(Event message) { - System.out.println(message.getClass()); - } -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java similarity index 56% rename from event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java rename to event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java index 8ad48c704..64b51ea84 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Event.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java @@ -1,4 +1,6 @@ -package com.iluwatar.eda.advanced; +package com.iluwatar.eda.advanced.events; + +import com.iluwatar.eda.advanced.framework.Message; public class Event implements Message { public Class getType() { diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java new file mode 100644 index 000000000..75dc776de --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java @@ -0,0 +1,9 @@ +package com.iluwatar.eda.advanced.events; + +import com.iluwatar.eda.advanced.events.Event; + +/** + * @author cfarrugia + */ +public class UserCreatedEvent extends Event { +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java new file mode 100644 index 000000000..df1c0af43 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java @@ -0,0 +1,6 @@ +package com.iluwatar.eda.advanced.events; + +import com.iluwatar.eda.advanced.events.Event; + +public class UserUpdatedEvent extends Event { +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java new file mode 100644 index 000000000..20a1cceaa --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java @@ -0,0 +1,8 @@ +package com.iluwatar.eda.advanced.framework; + + +import com.iluwatar.eda.advanced.events.Event; + +public interface Channel { + void dispatch(E message); +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java new file mode 100644 index 000000000..2ae7291f9 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java @@ -0,0 +1,6 @@ +package com.iluwatar.eda.advanced.framework; + +public interface DynamicRouter { + void registerChannel(Class contentType, Channel channel); + void dispatch(E content); +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java similarity index 63% rename from event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java rename to event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java index 00d335191..6243dda97 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/Message.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java @@ -1,4 +1,4 @@ -package com.iluwatar.eda.advanced; +package com.iluwatar.eda.advanced.framework; public interface Message { diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java new file mode 100644 index 000000000..caacd5583 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java @@ -0,0 +1,15 @@ +package com.iluwatar.eda.advanced.handler; + +import com.iluwatar.eda.advanced.events.Event; +import com.iluwatar.eda.advanced.events.UserCreatedEvent; +import com.iluwatar.eda.advanced.framework.Channel; + +/** + * @author cfarrugia + */ +public class UserCreatedEventHandler implements Channel { + + public void dispatch(UserCreatedEvent message) { + System.out.println("User Created!"); + } +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java new file mode 100644 index 000000000..dada6fafc --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java @@ -0,0 +1,12 @@ +package com.iluwatar.eda.advanced.handler; + +import com.iluwatar.eda.advanced.events.Event; +import com.iluwatar.eda.advanced.events.UserUpdatedEvent; +import com.iluwatar.eda.advanced.framework.Channel; + +public class UserUpdatedEventHandler implements Channel { + + public void dispatch(UserUpdatedEvent message) { + System.out.println("User Updated!"); + } +} From b4aeca3aa0117e899c87e4b648fc7acc3601aa1f Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 23 Nov 2015 00:04:44 +0100 Subject: [PATCH 03/21] #113 Event Driven Architecture - removed unused imports --- .../iluwatar/eda/advanced/handler/UserCreatedEventHandler.java | 1 - .../iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java | 1 - 2 files changed, 2 deletions(-) diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java index caacd5583..f3f4535d1 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java @@ -1,6 +1,5 @@ package com.iluwatar.eda.advanced.handler; -import com.iluwatar.eda.advanced.events.Event; import com.iluwatar.eda.advanced.events.UserCreatedEvent; import com.iluwatar.eda.advanced.framework.Channel; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java index dada6fafc..8ed5dcf51 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java @@ -1,6 +1,5 @@ package com.iluwatar.eda.advanced.handler; -import com.iluwatar.eda.advanced.events.Event; import com.iluwatar.eda.advanced.events.UserUpdatedEvent; import com.iluwatar.eda.advanced.framework.Channel; From 321e9d4191cdb1a3592ce758fcc0238e31f3af19 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 23 Nov 2015 11:20:20 +0100 Subject: [PATCH 04/21] #113 Event Driven Architecture - added class diagram - added more comments --- .../etc/class_diagram.png | Bin 0 -> 38232 bytes event-driven-architecture/index.md | 6 ++- .../src/main/java/com/iluwatar/eda/App.java | 28 +++++++++++++ .../com/iluwatar/eda/EventDispatcher.java | 39 ++++++++++++++++++ .../java/com/iluwatar/eda/advanced/App.java | 18 -------- .../eda/advanced/EventDispatcher.java | 26 ------------ .../eda/advanced/events/UserCreatedEvent.java | 9 ---- .../eda/advanced/events/UserUpdatedEvent.java | 6 --- .../eda/advanced/framework/Channel.java | 8 ---- .../eda/advanced/framework/DynamicRouter.java | 6 --- .../eda/advanced/framework/Message.java | 6 --- .../eda/{advanced/events => event}/Event.java | 4 +- .../iluwatar/eda/event/UserCreatedEvent.java | 7 ++++ .../iluwatar/eda/event/UserUpdatedEvent.java | 4 ++ .../com/iluwatar/eda/framework/Channel.java | 9 ++++ .../iluwatar/eda/framework/DynamicRouter.java | 11 +++++ .../com/iluwatar/eda/framework/Message.java | 9 ++++ .../handler/UserCreatedEventHandler.java | 8 ++-- .../handler/UserUpdatedEventHandler.java | 9 ++-- .../java/com/iluwatar/eda/simple/App.java | 38 ----------------- .../java/com/iluwatar/eda/simple/Event.java | 15 ------- .../com/iluwatar/eda/simple/EventHandler.java | 15 ------- 22 files changed, 123 insertions(+), 158 deletions(-) create mode 100644 event-driven-architecture/etc/class_diagram.png create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/App.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java rename event-driven-architecture/src/main/java/com/iluwatar/eda/{advanced/events => event}/Event.java (56%) create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java rename event-driven-architecture/src/main/java/com/iluwatar/eda/{advanced => }/handler/UserCreatedEventHandler.java (52%) rename event-driven-architecture/src/main/java/com/iluwatar/eda/{advanced => }/handler/UserUpdatedEventHandler.java (50%) delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/simple/App.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/simple/Event.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/simple/EventHandler.java diff --git a/event-driven-architecture/etc/class_diagram.png b/event-driven-architecture/etc/class_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..69560e1f4b80d0d95dc5387189cc753e31d66f65 GIT binary patch literal 38232 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 + * The example below we uses an {@link EventDispatcher} to link/register {@link Event} objects to + * their respective handlers Once an {@link Event} is dispatched, + * it's respective handler is invoked and the {@link Event} is handled accordingly + */ +public class App { + + public static void main(String[] args) { + EventDispatcher dispatcher = new EventDispatcher(); + dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); + dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); + dispatcher.dispatch(new UserCreatedEvent()); + dispatcher.dispatch(new UserUpdatedEvent()); + } + +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java new file mode 100644 index 000000000..f947773d0 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java @@ -0,0 +1,39 @@ +package com.iluwatar.eda; + +import com.iluwatar.eda.event.Event; +import com.iluwatar.eda.framework.Channel; +import com.iluwatar.eda.framework.DynamicRouter; + +import java.util.HashMap; +import java.util.Map; + +/** + * The {@link Event Dispatcher} handles routing of {@link Event} messages to associated channels. + * A {@link HashMap} is used to store the association between events and their respective handlers. + */ +public class EventDispatcher implements DynamicRouter { + + private Map, Channel> handlers; + + public EventDispatcher() { + handlers = new HashMap, Channel>(); + } + + /** + * Links an {@link Event} to a specific {@link Channel} + * @param contentType The {@link Event} to be registered + * @param channel The {@link Channel} that will be handling the {@link Event} + */ + public void registerChannel(Class contentType, + Channel channel) { + handlers.put(contentType, channel); + } + + /** + * Dispathes an {@link Event} depending on it's type. + * @param content The {@link Event} to be dispatched + */ + public void dispatch(Event content) { + handlers.get(content.getClass()).dispatch(content); + } +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java deleted file mode 100644 index e7b8c01bc..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/App.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iluwatar.eda.advanced; - -import com.iluwatar.eda.advanced.events.Event; -import com.iluwatar.eda.advanced.events.UserCreatedEvent; -import com.iluwatar.eda.advanced.events.UserUpdatedEvent; -import com.iluwatar.eda.advanced.handler.UserCreatedEventHandler; -import com.iluwatar.eda.advanced.handler.UserUpdatedEventHandler; - -public class App { - - public static void main(String[] args) { - EventDispatcher dispatcher = new EventDispatcher(); - dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); - dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); - dispatcher.dispatch(new UserCreatedEvent()); - dispatcher.dispatch(new UserUpdatedEvent()); - } -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java deleted file mode 100644 index 468160b45..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/EventDispatcher.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.iluwatar.eda.advanced; - -import com.iluwatar.eda.advanced.events.Event; -import com.iluwatar.eda.advanced.framework.Channel; -import com.iluwatar.eda.advanced.framework.DynamicRouter; - -import java.util.HashMap; -import java.util.Map; - -public class EventDispatcher implements DynamicRouter { - - private Map, Channel> handlers; - - public EventDispatcher() { - handlers = new HashMap, Channel>(); - } - - public void registerChannel(Class contentType, - Channel channel) { - handlers.put(contentType, channel); - } - - public void dispatch(Event content) { - handlers.get(content.getClass()).dispatch(content); - } -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java deleted file mode 100644 index 75dc776de..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserCreatedEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.iluwatar.eda.advanced.events; - -import com.iluwatar.eda.advanced.events.Event; - -/** - * @author cfarrugia - */ -public class UserCreatedEvent extends Event { -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java deleted file mode 100644 index df1c0af43..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/UserUpdatedEvent.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.iluwatar.eda.advanced.events; - -import com.iluwatar.eda.advanced.events.Event; - -public class UserUpdatedEvent extends Event { -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java deleted file mode 100644 index 20a1cceaa..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Channel.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.iluwatar.eda.advanced.framework; - - -import com.iluwatar.eda.advanced.events.Event; - -public interface Channel { - void dispatch(E message); -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java deleted file mode 100644 index 2ae7291f9..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/DynamicRouter.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.iluwatar.eda.advanced.framework; - -public interface DynamicRouter { - void registerChannel(Class contentType, Channel channel); - void dispatch(E content); -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java deleted file mode 100644 index 6243dda97..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/framework/Message.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.iluwatar.eda.advanced.framework; - - -public interface Message { - public Class getType(); -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java similarity index 56% rename from event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java rename to event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java index 64b51ea84..5f3db28e8 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/events/Event.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java @@ -1,6 +1,6 @@ -package com.iluwatar.eda.advanced.events; +package com.iluwatar.eda.event; -import com.iluwatar.eda.advanced.framework.Message; +import com.iluwatar.eda.framework.Message; public class Event implements Message { public Class getType() { diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java new file mode 100644 index 000000000..14d83a783 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java @@ -0,0 +1,7 @@ +package com.iluwatar.eda.event; + +/** + * @author cfarrugia + */ +public class UserCreatedEvent extends Event { +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java new file mode 100644 index 000000000..e0e3c3cd6 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java @@ -0,0 +1,4 @@ +package com.iluwatar.eda.event; + +public class UserUpdatedEvent extends Event { +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java new file mode 100644 index 000000000..a8dd97044 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java @@ -0,0 +1,9 @@ +package com.iluwatar.eda.framework; + +/** + * Channels are delivery points for messages. + * Every {@link Channel} is responsible for a single type of message + */ +public interface Channel { + void dispatch(E message); +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java new file mode 100644 index 000000000..751318ada --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java @@ -0,0 +1,11 @@ +package com.iluwatar.eda.framework; + +/** + * A {@link DynamicRouter} is responsible for selecting the proper path of a {@link Message} + * Messages can be associated to Channels through the registerChannel method and dispatched by calling + * the dispatch method. + */ +public interface DynamicRouter { + void registerChannel(Class contentType, Channel channel); + void dispatch(E content); +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java new file mode 100644 index 000000000..61880e9cd --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java @@ -0,0 +1,9 @@ +package com.iluwatar.eda.framework; + +/** + * A {@link Message} is an object with a specific type that is associated to a + * specific {@link Channel} + */ +public interface Message { + Class getType(); +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java similarity index 52% rename from event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java rename to event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java index f3f4535d1..b2e831bf8 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserCreatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java @@ -1,10 +1,10 @@ -package com.iluwatar.eda.advanced.handler; +package com.iluwatar.eda.handler; -import com.iluwatar.eda.advanced.events.UserCreatedEvent; -import com.iluwatar.eda.advanced.framework.Channel; +import com.iluwatar.eda.event.UserCreatedEvent; +import com.iluwatar.eda.framework.Channel; /** - * @author cfarrugia + * Handles the {@link UserCreatedEvent} message */ public class UserCreatedEventHandler implements Channel { diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java similarity index 50% rename from event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java rename to event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java index 8ed5dcf51..c7762d247 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/advanced/handler/UserUpdatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java @@ -1,8 +1,11 @@ -package com.iluwatar.eda.advanced.handler; +package com.iluwatar.eda.handler; -import com.iluwatar.eda.advanced.events.UserUpdatedEvent; -import com.iluwatar.eda.advanced.framework.Channel; +import com.iluwatar.eda.event.UserUpdatedEvent; +import com.iluwatar.eda.framework.Channel; +/** + * Handles the {@link UserUpdatedEvent} message + */ public class UserUpdatedEventHandler implements Channel { public void dispatch(UserUpdatedEvent message) { diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/App.java deleted file mode 100644 index 1399811bb..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/App.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.iluwatar.eda.simple; - -import java.util.LinkedList; -import java.util.Queue; - -/** - * Event-driven architecture (EDA) is a software architecture pattern promoting - * the production, detection, consumption of, and reaction to events. - *

- * This main class publishes events to queue. Each event on the queue is consumed - * and handled depending on the type defined in the {@link Event} - */ -public class App { - - public static void main(String args[]) { - - //create a list of events having different types - //add these events to a simple queue - Queue events = new LinkedList(); - events.add(new Event('A', "Hello")); - events.add(new Event('B', "event-driven")); - events.add(new Event('A', "world!")); - - Event e; - - //the event loop will go through the list of events - //and handle each one depending on it's type - while (!events.isEmpty()) { - e = events.remove(); - - //handle events depending on their type - if (e.type == 'A') - EventHandler.handleEventA(e); - if (e.type == 'B') - EventHandler.handleEventB(e); - } - } -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/Event.java deleted file mode 100644 index 1ba04c303..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/Event.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.iluwatar.eda.simple; - -/** - * The Event class defines the type of event and data related to the event. - */ -public class Event { - - public char type; - public String data; - - public Event(char type, String data){ - this.type = type; - this.data = data; - } -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/EventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/EventHandler.java deleted file mode 100644 index d911c6c8e..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/simple/EventHandler.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.iluwatar.eda.simple; - -/** - * The {@link EventHandler} class handles performs actions on {@link Event} objects - */ -public class EventHandler { - - public static void handleEventA(Event e){ - System.out.println(e.data); - } - - public static void handleEventB(Event e){ - System.out.println(e.data.toUpperCase()); - } -} From fc70a706c680ff1e58cf930846dbe2f3d15b8240 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 28 Nov 2015 10:57:00 +0100 Subject: [PATCH 05/21] #113 Event Driven Architecture Adds module to the root pom.xml Fixes indentation --- pom.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index bcdf9affe..e0e6a0cc6 100644 --- a/pom.xml +++ b/pom.xml @@ -76,16 +76,17 @@ front-controller repository async-method-invocation - monostate + monostate step-builder - business-delegate - half-sync-half-async + business-delegate + half-sync-half-async layers message-channel fluentinterface reactor caching publish-subscribe + event-driven-architecture From b8b94b697aef8601f4d2564b8be7ee2a443f7688 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 28 Nov 2015 13:12:16 +0100 Subject: [PATCH 06/21] #113 Event Driven Architecture Adds more Javadoc --- event-driven-architecture/pom.xml | 24 ++++++++++ .../src/main/java/com/iluwatar/eda/App.java | 27 ++++++----- .../com/iluwatar/eda/EventDispatcher.java | 46 ++++++++++--------- .../java/com/iluwatar/eda/event/Event.java | 23 ++++++++-- .../iluwatar/eda/event/UserCreatedEvent.java | 3 +- .../iluwatar/eda/event/UserUpdatedEvent.java | 4 ++ .../com/iluwatar/eda/framework/Channel.java | 8 ++-- .../iluwatar/eda/framework/DynamicRouter.java | 10 ++-- .../com/iluwatar/eda/framework/Message.java | 6 +-- .../eda/handler/UserCreatedEventHandler.java | 9 ++-- .../eda/handler/UserUpdatedEventHandler.java | 9 ++-- pom.xml | 4 +- 12 files changed, 112 insertions(+), 61 deletions(-) diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index fdea3855f..0c72f2157 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -19,4 +19,28 @@ test + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.15 + + + validate + + check + + validate + + checkstyle.xml + UTF-8 + true + true + + + + + + \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java index e8b8d2d09..ab4b2e489 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java @@ -7,22 +7,21 @@ import com.iluwatar.eda.handler.UserCreatedEventHandler; import com.iluwatar.eda.handler.UserUpdatedEventHandler; /** - * An event-driven architecture (EDA) is a framework that orchestrates behavior around the production, - * detection and consumption of events as well as the responses they evoke. - * An event is any identifiable occurrence that has significance for system hardware or software. - *

- * The example below we uses an {@link EventDispatcher} to link/register {@link Event} objects to - * their respective handlers Once an {@link Event} is dispatched, - * it's respective handler is invoked and the {@link Event} is handled accordingly + * An event-driven architecture (EDA) is a framework that orchestrates behavior around the + * production, detection and consumption of events as well as the responses they evoke. An event is + * any identifiable occurrence that has significance for system hardware or software.

The + * example below we uses an {@link EventDispatcher} to link/register {@link Event} objects to their + * respective handlers Once an {@link Event} is dispatched, it's respective handler is invoked and + * the {@link Event} is handled accordingly */ public class App { - public static void main(String[] args) { - EventDispatcher dispatcher = new EventDispatcher(); - dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); - dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); - dispatcher.dispatch(new UserCreatedEvent()); - dispatcher.dispatch(new UserUpdatedEvent()); - } + public static void main(String[] args) { + EventDispatcher dispatcher = new EventDispatcher(); + dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); + dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); + dispatcher.dispatch(new UserCreatedEvent()); + dispatcher.dispatch(new UserUpdatedEvent()); + } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java index f947773d0..3b44a414a 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java @@ -8,32 +8,36 @@ import java.util.HashMap; import java.util.Map; /** - * The {@link Event Dispatcher} handles routing of {@link Event} messages to associated channels. + * The {@link Event Dispatcher} handles routing of {@link Event} messages + * to associated channels. * A {@link HashMap} is used to store the association between events and their respective handlers. + * */ public class EventDispatcher implements DynamicRouter { - private Map, Channel> handlers; + private Map, Channel> handlers; - public EventDispatcher() { - handlers = new HashMap, Channel>(); - } + public EventDispatcher() { + handlers = new HashMap<>(); + } - /** - * Links an {@link Event} to a specific {@link Channel} - * @param contentType The {@link Event} to be registered - * @param channel The {@link Channel} that will be handling the {@link Event} - */ - public void registerChannel(Class contentType, - Channel channel) { - handlers.put(contentType, channel); - } + /** + * Links an {@link Event} to a specific {@link Channel} + * + * @param contentType The {@link Event} to be registered + * @param channel The {@link Channel} that will be handling the {@link Event} + */ + public void registerChannel(Class contentType, + Channel channel) { + handlers.put(contentType, channel); + } - /** - * Dispathes an {@link Event} depending on it's type. - * @param content The {@link Event} to be dispatched - */ - public void dispatch(Event content) { - handlers.get(content.getClass()).dispatch(content); - } + /** + * Dispatches an {@link Event} depending on it's type. + * + * @param content The {@link Event} to be dispatched + */ + public void dispatch(Event content) { + handlers.get(content.getClass()).dispatch(content); + } } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java index 5f3db28e8..9a2518ebf 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java @@ -2,8 +2,25 @@ package com.iluwatar.eda.event; import com.iluwatar.eda.framework.Message; +/** + * The {@link Event} class serves as a base class for defining custom events happening with your + * system. In this example we have two types of events defined. + *

    + *
  • {@link UserCreatedEvent} - used when a user is created
  • + *
  • {@link UserUpdatedEvent} - used when a user is updated
  • + *
+ * Events can be distinguished using the {@link #getType() getType} method. + */ public class Event implements Message { - public Class getType() { - return getClass(); - } + + /** + * Returns the event type as a {@link Class} object + * In this example, this method is used by the {@link com.iluwatar.eda.EventDispatcher} to + * dispatch events depending on their type. + * + * @return the Event type as a {@link Class}. + */ + public Class getType() { + return getClass(); + } } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java index 14d83a783..1a61dfa59 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java @@ -1,7 +1,8 @@ package com.iluwatar.eda.event; /** - * @author cfarrugia + * The {@link UserCreatedEvent} class should should be dispatched whenever a user has been created. + * This class can be extended to contain details about the user has been created. */ public class UserCreatedEvent extends Event { } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java index e0e3c3cd6..3b401ecd1 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java @@ -1,4 +1,8 @@ package com.iluwatar.eda.event; +/** + * The {@link UserUpdatedEvent} class should should be dispatched whenever a user has been updated. + * This class can be extended to contain details about the user has been updated. + */ public class UserUpdatedEvent extends Event { } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java index a8dd97044..32eca09d4 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java @@ -1,9 +1,11 @@ package com.iluwatar.eda.framework; +import com.iluwatar.eda.event.Event; + /** - * Channels are delivery points for messages. - * Every {@link Channel} is responsible for a single type of message + * Channels are delivery points for messages. Every {@link Channel} is responsible for a single type + * of message */ public interface Channel { - void dispatch(E message); + void dispatch(E message); } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java index 751318ada..23fd6044f 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java @@ -2,10 +2,12 @@ package com.iluwatar.eda.framework; /** * A {@link DynamicRouter} is responsible for selecting the proper path of a {@link Message} - * Messages can be associated to Channels through the registerChannel method and dispatched by calling - * the dispatch method. + * Messages can be associated to Channels through the registerChannel method and dispatched by + * calling the dispatch method. */ public interface DynamicRouter { - void registerChannel(Class contentType, Channel channel); - void dispatch(E content); + + void registerChannel(Class contentType, Channel channel); + + void dispatch(E content); } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java index 61880e9cd..2f8acb343 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java @@ -1,9 +1,9 @@ package com.iluwatar.eda.framework; /** - * A {@link Message} is an object with a specific type that is associated to a - * specific {@link Channel} + * A {@link Message} is an object with a specific type that is associated + * to a specific {@link Channel}. */ public interface Message { - Class getType(); + Class getType(); } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java index b2e831bf8..e406f7c51 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java @@ -4,11 +4,10 @@ import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.framework.Channel; /** - * Handles the {@link UserCreatedEvent} message + * Handles the {@link UserCreatedEvent} message. */ public class UserCreatedEventHandler implements Channel { - - public void dispatch(UserCreatedEvent message) { - System.out.println("User Created!"); - } + public void dispatch(UserCreatedEvent message) { + System.out.println("User Created!"); + } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java index c7762d247..d59954806 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java @@ -4,11 +4,10 @@ import com.iluwatar.eda.event.UserUpdatedEvent; import com.iluwatar.eda.framework.Channel; /** - * Handles the {@link UserUpdatedEvent} message + * Handles the {@link UserUpdatedEvent} message. */ public class UserUpdatedEventHandler implements Channel { - - public void dispatch(UserUpdatedEvent message) { - System.out.println("User Updated!"); - } + public void dispatch(UserUpdatedEvent message) { + System.out.println("User Updated!"); + } } diff --git a/pom.xml b/pom.xml index e0e6a0cc6..9e4c39bf9 100644 --- a/pom.xml +++ b/pom.xml @@ -244,8 +244,8 @@ checkstyle.xml UTF-8 - false - false + true + true From e1c0731f7e2c58fba76c3c6ec393890b578e4370 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 28 Nov 2015 15:03:22 +0100 Subject: [PATCH 07/21] #113 Event Driven Architecture Adds more Javadoc and fixes checkstyle issues. --- event-driven-architecture/pom.xml | 25 +------------------ .../src/main/java/com/iluwatar/eda/App.java | 24 ++++++++++++++---- .../com/iluwatar/eda/EventDispatcher.java | 7 +++--- .../iluwatar/eda/event/UserCreatedEvent.java | 16 +++++++++++- .../iluwatar/eda/event/UserUpdatedEvent.java | 15 ++++++++++- .../com/iluwatar/eda/framework/Channel.java | 2 +- .../eda/handler/UserCreatedEventHandler.java | 10 ++++++-- .../eda/handler/UserUpdatedEventHandler.java | 10 ++++++-- .../java/com/iluwatar/eda/model/User.java | 21 ++++++++++++++++ 9 files changed, 90 insertions(+), 40 deletions(-) create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index 0c72f2157..2c011759b 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -19,28 +19,5 @@ test - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.15 - - - validate - - check - - validate - - checkstyle.xml - UTF-8 - true - true - - - - - - + \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java index ab4b2e489..5ef58d20b 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java @@ -5,23 +5,37 @@ import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.event.UserUpdatedEvent; import com.iluwatar.eda.handler.UserCreatedEventHandler; import com.iluwatar.eda.handler.UserUpdatedEventHandler; +import com.iluwatar.eda.model.User; /** * An event-driven architecture (EDA) is a framework that orchestrates behavior around the * production, detection and consumption of events as well as the responses they evoke. An event is * any identifiable occurrence that has significance for system hardware or software.

The - * example below we uses an {@link EventDispatcher} to link/register {@link Event} objects to their - * respective handlers Once an {@link Event} is dispatched, it's respective handler is invoked and - * the {@link Event} is handled accordingly + * example below uses an {@link EventDispatcher} to link/register {@link Event} objects to their + * respective handlers once an {@link Event} is dispatched, it's respective handler is invoked and + * the {@link Event} is handled accordingly. + * */ public class App { + /** + * Once the {@link EventDispatcher} is initialised, channels related to specific events have to be + * made known to the dispatcher by registering them. In this case the {@link UserCreatedEvent} is + * bound to the UserCreatedEventHandler, whilst the {@link UserUpdatedEvent} is bound to the + * {@link UserUpdatedEventHandler}. The dispatcher can now be called to dispatch specific events. + * When a user is saved, the {@link UserCreatedEvent} can be dispatched. + * On the other hand, when a user is updated, {@link UserUpdatedEvent} can be dispatched. + * + */ public static void main(String[] args) { + EventDispatcher dispatcher = new EventDispatcher(); dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); - dispatcher.dispatch(new UserCreatedEvent()); - dispatcher.dispatch(new UserUpdatedEvent()); + + User user = new User("iluwatar"); + dispatcher.dispatch(new UserCreatedEvent(user)); + dispatcher.dispatch(new UserUpdatedEvent(user)); } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java index 3b44a414a..e52f9db46 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java @@ -8,21 +8,20 @@ import java.util.HashMap; import java.util.Map; /** - * The {@link Event Dispatcher} handles routing of {@link Event} messages - * to associated channels. + * Handles the routing of {@link Event} messages to associated channels. * A {@link HashMap} is used to store the association between events and their respective handlers. * */ public class EventDispatcher implements DynamicRouter { - private Map, Channel> handlers; + private Map, Channel> handlers; public EventDispatcher() { handlers = new HashMap<>(); } /** - * Links an {@link Event} to a specific {@link Channel} + * Links an {@link Event} to a specific {@link Channel}. * * @param contentType The {@link Event} to be registered * @param channel The {@link Channel} that will be handling the {@link Event} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java index 1a61dfa59..3d6187b7e 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java @@ -1,8 +1,22 @@ package com.iluwatar.eda.event; +import com.iluwatar.eda.model.User; + /** * The {@link UserCreatedEvent} class should should be dispatched whenever a user has been created. - * This class can be extended to contain details about the user has been created. + * This class can be extended to contain details about the user has been created. In this example, + * the entire {@link User} object is passed on as data with the event. */ public class UserCreatedEvent extends Event { + + private User user; + + public UserCreatedEvent(User user) { + this.user = user; + } + + + public User getUser() { + return user; + } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java index 3b401ecd1..f3bce8124 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java @@ -1,8 +1,21 @@ package com.iluwatar.eda.event; +import com.iluwatar.eda.model.User; + /** * The {@link UserUpdatedEvent} class should should be dispatched whenever a user has been updated. - * This class can be extended to contain details about the user has been updated. + * This class can be extended to contain details about the user has been updated. In this example, + * the entire {@link User} object is passed on as data with the event. */ public class UserUpdatedEvent extends Event { + + private User user; + + public UserUpdatedEvent(User user) { + this.user = user; + } + + public User getUser() { + return user; + } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java index 32eca09d4..1684a9641 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java @@ -7,5 +7,5 @@ import com.iluwatar.eda.event.Event; * of message */ public interface Channel { - void dispatch(E message); + void dispatch(Event message); } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java index e406f7c51..49d209eb0 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java @@ -1,13 +1,19 @@ package com.iluwatar.eda.handler; +import com.iluwatar.eda.event.Event; import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.framework.Channel; +import com.iluwatar.eda.model.User; /** * Handles the {@link UserCreatedEvent} message. */ public class UserCreatedEventHandler implements Channel { - public void dispatch(UserCreatedEvent message) { - System.out.println("User Created!"); + + @Override + public void dispatch(Event message) { + + UserCreatedEvent userCreatedEvent = (UserCreatedEvent) message; + System.out.printf("User with %s has been Created!", userCreatedEvent.getUser().getUsername()); } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java index d59954806..fd3a6d3ba 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java @@ -1,5 +1,7 @@ package com.iluwatar.eda.handler; +import com.iluwatar.eda.event.Event; +import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.event.UserUpdatedEvent; import com.iluwatar.eda.framework.Channel; @@ -7,7 +9,11 @@ import com.iluwatar.eda.framework.Channel; * Handles the {@link UserUpdatedEvent} message. */ public class UserUpdatedEventHandler implements Channel { - public void dispatch(UserUpdatedEvent message) { - System.out.println("User Updated!"); + + @Override + public void dispatch(Event message) { + + UserUpdatedEvent userUpdatedEvent = (UserUpdatedEvent) message; + System.out.printf("User with %s has been Updated!", userUpdatedEvent.getUser().getUsername()); } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java new file mode 100644 index 000000000..02a7a4641 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java @@ -0,0 +1,21 @@ +package com.iluwatar.eda.model; + +import com.iluwatar.eda.event.UserCreatedEvent; +import com.iluwatar.eda.event.UserUpdatedEvent; + +/** + * This {@link User} class is a basic pojo used to demonstrate user data sent along with + * the {@link UserCreatedEvent} and {@link UserUpdatedEvent} events. + */ +public class User { + + private String username; + + public User(String username) { + this.username = username; + } + + public String getUsername() { + return username; + } +} From 3ad36020aac253a0b1cbf857db7825cd729ee108 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 28 Nov 2015 17:25:15 +0100 Subject: [PATCH 08/21] #113 Event Driven Architecture Adds unit test to assert and verify pattern behaviour --- event-driven-architecture/pom.xml | 7 ++- .../com/iluwatar/eda/EventDispatcher.java | 8 ++++ .../iluwatar/eda/event/UserCreatedEvent.java | 1 - .../src/test/java/EventDrivenTest.java | 47 +++++++++++++++++++ 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 event-driven-architecture/src/test/java/EventDrivenTest.java diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index 2c011759b..77504657f 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -18,6 +18,11 @@ junit test - + + org.mockito + mockito-core + test + + \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java index e52f9db46..89f8de71b 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java @@ -39,4 +39,12 @@ public class EventDispatcher implements DynamicRouter { public void dispatch(Event content) { handlers.get(content.getClass()).dispatch(content); } + + /** + * Returns a map of registered event handlers. + * @return {@Map} of registered event handlers. + */ + public Map, Channel> getHandlers() { + return handlers; + } } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java index 3d6187b7e..da2e31c8a 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java @@ -15,7 +15,6 @@ public class UserCreatedEvent extends Event { this.user = user; } - public User getUser() { return user; } diff --git a/event-driven-architecture/src/test/java/EventDrivenTest.java b/event-driven-architecture/src/test/java/EventDrivenTest.java new file mode 100644 index 000000000..70579d557 --- /dev/null +++ b/event-driven-architecture/src/test/java/EventDrivenTest.java @@ -0,0 +1,47 @@ +import com.iluwatar.eda.EventDispatcher; +import com.iluwatar.eda.event.UserCreatedEvent; +import com.iluwatar.eda.event.UserUpdatedEvent; +import com.iluwatar.eda.handler.UserCreatedEventHandler; +import com.iluwatar.eda.handler.UserUpdatedEventHandler; +import com.iluwatar.eda.model.User; + +import org.junit.Test; + + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +import static org.junit.Assert.assertEquals; + +public class EventDrivenTest { + + @Test + public void testEventDriverPattern(){ + + EventDispatcher dispatcher = spy(new EventDispatcher()); + UserCreatedEventHandler userCreatedEventHandler = new UserCreatedEventHandler(); + UserUpdatedEventHandler userUpdatedEventHandler = new UserUpdatedEventHandler(); + dispatcher.registerChannel(UserCreatedEvent.class, userCreatedEventHandler); + dispatcher.registerChannel(UserUpdatedEvent.class, userUpdatedEventHandler); + + assertEquals("Two handlers must be registered", 2, dispatcher.getHandlers().size()); + assertEquals("UserCreatedEvent must return the UserCreatedEventHandler", + userCreatedEventHandler, + (UserCreatedEventHandler)dispatcher.getHandlers().get(UserCreatedEvent.class)); + assertEquals("UserUpdatedEvent must be registered to the UserUpdatedEventHandler", + userUpdatedEventHandler, + (UserUpdatedEventHandler)dispatcher.getHandlers().get(UserUpdatedEvent.class)); + + User user = new User("iluwatar"); + + UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); + UserUpdatedEvent userUpdatedEvent = new UserUpdatedEvent(user); + dispatcher.dispatch(userCreatedEvent); + dispatcher.dispatch(userUpdatedEvent); + + //verify that the events have been dispatched + verify(dispatcher).dispatch(userCreatedEvent); + verify(dispatcher).dispatch(userUpdatedEvent); + + } +} From d9a1d1cef9184bda742e1164d7c1887735b47e82 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 28 Nov 2015 17:58:32 +0100 Subject: [PATCH 09/21] #113 Event Driven Architecture Adds unit test to assert and verify pattern event get type behaviour. Also added unit test comments. --- .../src/test/java/EventDrivenTest.java | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/event-driven-architecture/src/test/java/EventDrivenTest.java b/event-driven-architecture/src/test/java/EventDrivenTest.java index 70579d557..addc5fafa 100644 --- a/event-driven-architecture/src/test/java/EventDrivenTest.java +++ b/event-driven-architecture/src/test/java/EventDrivenTest.java @@ -1,4 +1,5 @@ import com.iluwatar.eda.EventDispatcher; +import com.iluwatar.eda.event.Event; import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.event.UserUpdatedEvent; import com.iluwatar.eda.handler.UserCreatedEventHandler; @@ -6,20 +7,25 @@ import com.iluwatar.eda.handler.UserUpdatedEventHandler; import com.iluwatar.eda.model.User; import org.junit.Test; - - import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; - import static org.junit.Assert.assertEquals; + +/** + * Event Driven Pattern unit tests to assert and verify correct pattern behaviour + */ public class EventDrivenTest { + /** + * This unit test should register events and event handlers correctly with the event dispatcher + * and events should be dispatched accordingly. + */ @Test - public void testEventDriverPattern(){ + public void testEventDriverPattern() { EventDispatcher dispatcher = spy(new EventDispatcher()); - UserCreatedEventHandler userCreatedEventHandler = new UserCreatedEventHandler(); + UserCreatedEventHandler userCreatedEventHandler = new UserCreatedEventHandler(); UserUpdatedEventHandler userUpdatedEventHandler = new UserUpdatedEventHandler(); dispatcher.registerChannel(UserCreatedEvent.class, userCreatedEventHandler); dispatcher.registerChannel(UserUpdatedEvent.class, userUpdatedEventHandler); @@ -27,10 +33,10 @@ public class EventDrivenTest { assertEquals("Two handlers must be registered", 2, dispatcher.getHandlers().size()); assertEquals("UserCreatedEvent must return the UserCreatedEventHandler", userCreatedEventHandler, - (UserCreatedEventHandler)dispatcher.getHandlers().get(UserCreatedEvent.class)); + (UserCreatedEventHandler) dispatcher.getHandlers().get(UserCreatedEvent.class)); assertEquals("UserUpdatedEvent must be registered to the UserUpdatedEventHandler", userUpdatedEventHandler, - (UserUpdatedEventHandler)dispatcher.getHandlers().get(UserUpdatedEvent.class)); + (UserUpdatedEventHandler) dispatcher.getHandlers().get(UserUpdatedEvent.class)); User user = new User("iluwatar"); @@ -42,6 +48,16 @@ public class EventDrivenTest { //verify that the events have been dispatched verify(dispatcher).dispatch(userCreatedEvent); verify(dispatcher).dispatch(userUpdatedEvent); + } + /** + * This unit test should correctly return the {@link Event} class type when calling the + * {@link Event#getType() getType} method. + */ + @Test + public void testGetEventType() { + User user = new User("iluwatar"); + UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); + assertEquals(UserCreatedEvent.class, userCreatedEvent.getType()); } } From 9e857d7dd6e6f0653953c4da787a72c2cfd0c0be Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 28 Nov 2015 19:05:23 +0100 Subject: [PATCH 10/21] #113 Event Driven Architecture Fixed javadoc --- .../src/main/java/com/iluwatar/eda/EventDispatcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java index 89f8de71b..f68fdb71b 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java @@ -42,7 +42,7 @@ public class EventDispatcher implements DynamicRouter { /** * Returns a map of registered event handlers. - * @return {@Map} of registered event handlers. + * @return {@link Map} of registered event handlers. */ public Map, Channel> getHandlers() { return handlers; From cfb0fafc7d5f98ec94cd41ffaaf28af80489dc6c Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Tue, 1 Dec 2015 23:30:01 +0100 Subject: [PATCH 11/21] #113 Event Driven Architecture Adds various changes including : - Fixes to Javadoc - Test refactoring and improvements - Refactored EventDispatcher to be immutable - Removed DynamicRouter interface since it not needed - Renamed Channel to a more appropriate name - Handler --- event-driven-architecture/index.md | 1 - .../src/main/java/com/iluwatar/eda/App.java | 7 ++- .../com/iluwatar/eda/EventDispatcher.java | 50 --------------- .../java/com/iluwatar/eda/event/Event.java | 5 +- .../iluwatar/eda/event/UserCreatedEvent.java | 2 +- .../iluwatar/eda/event/UserUpdatedEvent.java | 2 +- .../com/iluwatar/eda/framework/Channel.java | 11 ---- .../iluwatar/eda/framework/DynamicRouter.java | 13 ---- .../eda/framework/EventDispatcher.java | 42 +++++++++++++ .../com/iluwatar/eda/framework/Handler.java | 18 ++++++ .../com/iluwatar/eda/framework/Message.java | 8 ++- .../eda/handler/UserCreatedEventHandler.java | 7 +-- .../eda/handler/UserUpdatedEventHandler.java | 7 +-- .../src/test/java/EventDrivenTest.java | 63 ------------------- .../eda/event/UserCreatedEventTest.java | 24 +++++++ .../eda/framework/EventDispatcherTest.java | 50 +++++++++++++++ 16 files changed, 156 insertions(+), 154 deletions(-) delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java delete mode 100644 event-driven-architecture/src/test/java/EventDrivenTest.java create mode 100644 event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java create mode 100644 event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java diff --git a/event-driven-architecture/index.md b/event-driven-architecture/index.md index fb438c3e9..0a4be0bb6 100644 --- a/event-driven-architecture/index.md +++ b/event-driven-architecture/index.md @@ -30,4 +30,3 @@ permalink: /patterns/event-driven-architecture * [Fundamental Components of an Event-Driven Architecture](http://giocc.com/fundamental-components-of-an-event-driven-architecture.html) * [Real World Applications/Event Driven Applications](https://wiki.haskell.org/Real_World_Applications/Event_Driven_Applications) * [Event-driven architecture definition](http://searchsoa.techtarget.com/definition/event-driven-architecture) -* \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java index 5ef58d20b..a1e4c6652 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java @@ -3,6 +3,7 @@ package com.iluwatar.eda; import com.iluwatar.eda.event.Event; import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.event.UserUpdatedEvent; +import com.iluwatar.eda.framework.EventDispatcher; import com.iluwatar.eda.handler.UserCreatedEventHandler; import com.iluwatar.eda.handler.UserUpdatedEventHandler; import com.iluwatar.eda.model.User; @@ -19,7 +20,7 @@ import com.iluwatar.eda.model.User; public class App { /** - * Once the {@link EventDispatcher} is initialised, channels related to specific events have to be + * Once the {@link EventDispatcher} is initialised, handlers related to specific events have to be * made known to the dispatcher by registering them. In this case the {@link UserCreatedEvent} is * bound to the UserCreatedEventHandler, whilst the {@link UserUpdatedEvent} is bound to the * {@link UserUpdatedEventHandler}. The dispatcher can now be called to dispatch specific events. @@ -34,8 +35,8 @@ public class App { dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); User user = new User("iluwatar"); - dispatcher.dispatch(new UserCreatedEvent(user)); - dispatcher.dispatch(new UserUpdatedEvent(user)); + dispatcher.onEvent(new UserCreatedEvent(user)); + dispatcher.onEvent(new UserUpdatedEvent(user)); } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java deleted file mode 100644 index f68fdb71b..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.iluwatar.eda; - -import com.iluwatar.eda.event.Event; -import com.iluwatar.eda.framework.Channel; -import com.iluwatar.eda.framework.DynamicRouter; - -import java.util.HashMap; -import java.util.Map; - -/** - * Handles the routing of {@link Event} messages to associated channels. - * A {@link HashMap} is used to store the association between events and their respective handlers. - * - */ -public class EventDispatcher implements DynamicRouter { - - private Map, Channel> handlers; - - public EventDispatcher() { - handlers = new HashMap<>(); - } - - /** - * Links an {@link Event} to a specific {@link Channel}. - * - * @param contentType The {@link Event} to be registered - * @param channel The {@link Channel} that will be handling the {@link Event} - */ - public void registerChannel(Class contentType, - Channel channel) { - handlers.put(contentType, channel); - } - - /** - * Dispatches an {@link Event} depending on it's type. - * - * @param content The {@link Event} to be dispatched - */ - public void dispatch(Event content) { - handlers.get(content.getClass()).dispatch(content); - } - - /** - * Returns a map of registered event handlers. - * @return {@link Map} of registered event handlers. - */ - public Map, Channel> getHandlers() { - return handlers; - } -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java index 9a2518ebf..9ef3dd7db 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java @@ -1,5 +1,6 @@ package com.iluwatar.eda.event; +import com.iluwatar.eda.framework.EventDispatcher; import com.iluwatar.eda.framework.Message; /** @@ -15,8 +16,8 @@ public class Event implements Message { /** * Returns the event type as a {@link Class} object - * In this example, this method is used by the {@link com.iluwatar.eda.EventDispatcher} to - * dispatch events depending on their type. + * In this example, this method is used by the {@link EventDispatcher} to + * onEvent events depending on their type. * * @return the Event type as a {@link Class}. */ diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java index da2e31c8a..f7beaf82c 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java @@ -3,7 +3,7 @@ package com.iluwatar.eda.event; import com.iluwatar.eda.model.User; /** - * The {@link UserCreatedEvent} class should should be dispatched whenever a user has been created. + * The {@link UserCreatedEvent} should should be dispatched whenever a user has been created. * This class can be extended to contain details about the user has been created. In this example, * the entire {@link User} object is passed on as data with the event. */ diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java index f3bce8124..c07e83e7c 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java @@ -3,7 +3,7 @@ package com.iluwatar.eda.event; import com.iluwatar.eda.model.User; /** - * The {@link UserUpdatedEvent} class should should be dispatched whenever a user has been updated. + * The {@link UserUpdatedEvent} should should be dispatched whenever a user has been updated. * This class can be extended to contain details about the user has been updated. In this example, * the entire {@link User} object is passed on as data with the event. */ diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java deleted file mode 100644 index 1684a9641..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iluwatar.eda.framework; - -import com.iluwatar.eda.event.Event; - -/** - * Channels are delivery points for messages. Every {@link Channel} is responsible for a single type - * of message - */ -public interface Channel { - void dispatch(Event message); -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java deleted file mode 100644 index 23fd6044f..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/DynamicRouter.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.iluwatar.eda.framework; - -/** - * A {@link DynamicRouter} is responsible for selecting the proper path of a {@link Message} - * Messages can be associated to Channels through the registerChannel method and dispatched by - * calling the dispatch method. - */ -public interface DynamicRouter { - - void registerChannel(Class contentType, Channel channel); - - void dispatch(E content); -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java new file mode 100644 index 000000000..fef303937 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java @@ -0,0 +1,42 @@ +package com.iluwatar.eda.framework; + +import com.iluwatar.eda.event.Event; +import com.iluwatar.eda.framework.Handler; + +import java.util.HashMap; +import java.util.Map; + +/** + * Handles the routing of {@link Event} messages to associated handlers. + * A {@link HashMap} is used to store the association between events and their respective handlers. + * + */ +public class EventDispatcher { + + private Map, Handler> handlers; + + public EventDispatcher() { + handlers = new HashMap<>(); + } + + /** + * Links an {@link Event} to a specific {@link Handler}. + * + * @param eventType The {@link Event} to be registered + * @param handler The {@link Handler} that will be handling the {@link Event} + */ + public void registerChannel(Class eventType, + Handler handler) { + handlers.put(eventType, handler); + } + + /** + * Dispatches an {@link Event} depending on it's type. + * + * @param event The {@link Event} to be dispatched + */ + public void onEvent(Event event) { + handlers.get(event.getClass()).onEvent(event); + } + +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java new file mode 100644 index 000000000..cba2f08b2 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java @@ -0,0 +1,18 @@ +package com.iluwatar.eda.framework; + +import com.iluwatar.eda.event.Event; + +/** + * This interface can be implemented to handle different types of messages. + * Every handler is responsible for a single of type message + */ +public interface Handler { + + /** + * The onEvent method should implement and handle behavior related to the event. + * This can be as simple as calling another service to handle the event on publishing the event on + * a queue to be consumed by other sub systems. + * @param event the {@link Event} object to be handled. + */ + void onEvent(Event event); +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java index 2f8acb343..f8f8c7dfc 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java @@ -2,8 +2,14 @@ package com.iluwatar.eda.framework; /** * A {@link Message} is an object with a specific type that is associated - * to a specific {@link Channel}. + * to a specific {@link Handler}. */ public interface Message { + + /** + * Returns the message type as a {@link Class} object. In this example the message type is + * used to handle events by their type. + * @return the message type as a {@link Class}. + */ Class getType(); } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java index 49d209eb0..7db4a2d81 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java @@ -2,16 +2,15 @@ package com.iluwatar.eda.handler; import com.iluwatar.eda.event.Event; import com.iluwatar.eda.event.UserCreatedEvent; -import com.iluwatar.eda.framework.Channel; -import com.iluwatar.eda.model.User; +import com.iluwatar.eda.framework.Handler; /** * Handles the {@link UserCreatedEvent} message. */ -public class UserCreatedEventHandler implements Channel { +public class UserCreatedEventHandler implements Handler { @Override - public void dispatch(Event message) { + public void onEvent(Event message) { UserCreatedEvent userCreatedEvent = (UserCreatedEvent) message; System.out.printf("User with %s has been Created!", userCreatedEvent.getUser().getUsername()); diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java index fd3a6d3ba..754a75c45 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java @@ -1,17 +1,16 @@ package com.iluwatar.eda.handler; import com.iluwatar.eda.event.Event; -import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.event.UserUpdatedEvent; -import com.iluwatar.eda.framework.Channel; +import com.iluwatar.eda.framework.Handler; /** * Handles the {@link UserUpdatedEvent} message. */ -public class UserUpdatedEventHandler implements Channel { +public class UserUpdatedEventHandler implements Handler { @Override - public void dispatch(Event message) { + public void onEvent(Event message) { UserUpdatedEvent userUpdatedEvent = (UserUpdatedEvent) message; System.out.printf("User with %s has been Updated!", userUpdatedEvent.getUser().getUsername()); diff --git a/event-driven-architecture/src/test/java/EventDrivenTest.java b/event-driven-architecture/src/test/java/EventDrivenTest.java deleted file mode 100644 index addc5fafa..000000000 --- a/event-driven-architecture/src/test/java/EventDrivenTest.java +++ /dev/null @@ -1,63 +0,0 @@ -import com.iluwatar.eda.EventDispatcher; -import com.iluwatar.eda.event.Event; -import com.iluwatar.eda.event.UserCreatedEvent; -import com.iluwatar.eda.event.UserUpdatedEvent; -import com.iluwatar.eda.handler.UserCreatedEventHandler; -import com.iluwatar.eda.handler.UserUpdatedEventHandler; -import com.iluwatar.eda.model.User; - -import org.junit.Test; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.junit.Assert.assertEquals; - - -/** - * Event Driven Pattern unit tests to assert and verify correct pattern behaviour - */ -public class EventDrivenTest { - - /** - * This unit test should register events and event handlers correctly with the event dispatcher - * and events should be dispatched accordingly. - */ - @Test - public void testEventDriverPattern() { - - EventDispatcher dispatcher = spy(new EventDispatcher()); - UserCreatedEventHandler userCreatedEventHandler = new UserCreatedEventHandler(); - UserUpdatedEventHandler userUpdatedEventHandler = new UserUpdatedEventHandler(); - dispatcher.registerChannel(UserCreatedEvent.class, userCreatedEventHandler); - dispatcher.registerChannel(UserUpdatedEvent.class, userUpdatedEventHandler); - - assertEquals("Two handlers must be registered", 2, dispatcher.getHandlers().size()); - assertEquals("UserCreatedEvent must return the UserCreatedEventHandler", - userCreatedEventHandler, - (UserCreatedEventHandler) dispatcher.getHandlers().get(UserCreatedEvent.class)); - assertEquals("UserUpdatedEvent must be registered to the UserUpdatedEventHandler", - userUpdatedEventHandler, - (UserUpdatedEventHandler) dispatcher.getHandlers().get(UserUpdatedEvent.class)); - - User user = new User("iluwatar"); - - UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); - UserUpdatedEvent userUpdatedEvent = new UserUpdatedEvent(user); - dispatcher.dispatch(userCreatedEvent); - dispatcher.dispatch(userUpdatedEvent); - - //verify that the events have been dispatched - verify(dispatcher).dispatch(userCreatedEvent); - verify(dispatcher).dispatch(userUpdatedEvent); - } - - /** - * This unit test should correctly return the {@link Event} class type when calling the - * {@link Event#getType() getType} method. - */ - @Test - public void testGetEventType() { - User user = new User("iluwatar"); - UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); - assertEquals(UserCreatedEvent.class, userCreatedEvent.getType()); - } -} diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java new file mode 100644 index 000000000..108280bf1 --- /dev/null +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java @@ -0,0 +1,24 @@ +package com.iluwatar.eda.event; + +import com.iluwatar.eda.model.User; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * {@link UserCreatedEventTest} tests and verifies {@link Event} behaviour. + */ +public class UserCreatedEventTest { + + /** + * This unit test should correctly return the {@link Event} class type when calling the + * {@link Event#getType() getType} method. + */ + @Test + public void testGetEventType() { + User user = new User("iluwatar"); + UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); + assertEquals(UserCreatedEvent.class, userCreatedEvent.getType()); + } +} diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java new file mode 100644 index 000000000..163ffed6e --- /dev/null +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java @@ -0,0 +1,50 @@ +package com.iluwatar.eda.framework; + +import com.iluwatar.eda.framework.EventDispatcher; +import com.iluwatar.eda.event.UserCreatedEvent; +import com.iluwatar.eda.event.UserUpdatedEvent; +import com.iluwatar.eda.handler.UserCreatedEventHandler; +import com.iluwatar.eda.handler.UserUpdatedEventHandler; +import com.iluwatar.eda.model.User; + +import org.junit.Test; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +/** + * Event Dispatcher unit tests to assert and verify correct event dispatcher behaviour + */ +public class EventDispatcherTest { + + /** + * This unit test should register events and event handlers correctly with the event dispatcher + * and events should be dispatched accordingly. + */ + @Test + public void testEventDriverPattern() { + + EventDispatcher dispatcher = spy(new EventDispatcher()); + UserCreatedEventHandler userCreatedEventHandler = spy(new UserCreatedEventHandler()); + UserUpdatedEventHandler userUpdatedEventHandler = spy(new UserUpdatedEventHandler()); + dispatcher.registerChannel(UserCreatedEvent.class, userCreatedEventHandler); + dispatcher.registerChannel(UserUpdatedEvent.class, userUpdatedEventHandler); + + User user = new User("iluwatar"); + + UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); + UserUpdatedEvent userUpdatedEvent = new UserUpdatedEvent(user); + + //fire a userCreatedEvent and verify that userCreatedEventHandler has been invoked. + dispatcher.onEvent(userCreatedEvent); + verify(userCreatedEventHandler).onEvent(userCreatedEvent); + verify(dispatcher).onEvent(userCreatedEvent); + + //fire a userCreatedEvent and verify that userUpdatedEventHandler has been invoked. + dispatcher.onEvent(userUpdatedEvent); + verify(userUpdatedEventHandler).onEvent(userUpdatedEvent); + verify(dispatcher).onEvent(userUpdatedEvent); + } + + +} From 2aa20b7445c27caf540af62ca1be60dcb2ddf631 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Tue, 1 Dec 2015 23:33:26 +0100 Subject: [PATCH 12/21] #113 Event Driven Architecture Adds various changes including : - Fixes to Javadoc --- .../src/main/java/com/iluwatar/eda/event/Event.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java index 9ef3dd7db..bcf78f275 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java @@ -17,7 +17,7 @@ public class Event implements Message { /** * Returns the event type as a {@link Class} object * In this example, this method is used by the {@link EventDispatcher} to - * onEvent events depending on their type. + * dispatch events depending on their type. * * @return the Event type as a {@link Class}. */ From 0b46a9985df028bb0445bd52df0708d6bc2dea98 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Wed, 2 Dec 2015 01:39:20 +0100 Subject: [PATCH 13/21] #113 Event Driven Architecture Updated index.md with eda uses --- event-driven-architecture/index.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/event-driven-architecture/index.md b/event-driven-architecture/index.md index 0a4be0bb6..f7b586c88 100644 --- a/event-driven-architecture/index.md +++ b/event-driven-architecture/index.md @@ -16,13 +16,10 @@ permalink: /patterns/event-driven-architecture **Real world examples:** -* A Loan Application has been accepted/rejected (Commercial Business). -* A new Rostering Schedule is ready for distribution to all crew (Airline Management System). -* An Illegal Trade Pattern has been detected (Trading Fraud Detection System). -* A simulated car has hits another simulated car (Commercial Racing Game). -* A robot has reached its destination (Real Time Warehouse Management System). -* A HTML message has been received (Web Server). -* A key has been pressed (Text Editor). +* SendGrid, an email API, sends events whenever an email is processed, delivered, opened etc... (https://sendgrid.com/docs/API_Reference/Webhooks/event.html) +* Chargify, a billing API, exposes payment activity through various events (https://docs.chargify.com/api-events) +* Amazon's AWS Lambda, lets you execute code in response to such as changes to Amazon S3 buckets, updates to an Amazon DynamoDB table, or custom events generated by your applications or devices. (https://aws.amazon.com/lambda) +* MySQL runs triggers based on events such as inserts and update events happening on database tables. **Credits:** From 898f3a428c508418e1fc2ca27c793bd395e7a7e0 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Wed, 2 Dec 2015 01:43:34 +0100 Subject: [PATCH 14/21] #113 Event Driven Architecture Fixed a typo in index.md --- event-driven-architecture/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/event-driven-architecture/index.md b/event-driven-architecture/index.md index f7b586c88..40d84004d 100644 --- a/event-driven-architecture/index.md +++ b/event-driven-architecture/index.md @@ -18,7 +18,7 @@ permalink: /patterns/event-driven-architecture * SendGrid, an email API, sends events whenever an email is processed, delivered, opened etc... (https://sendgrid.com/docs/API_Reference/Webhooks/event.html) * Chargify, a billing API, exposes payment activity through various events (https://docs.chargify.com/api-events) -* Amazon's AWS Lambda, lets you execute code in response to such as changes to Amazon S3 buckets, updates to an Amazon DynamoDB table, or custom events generated by your applications or devices. (https://aws.amazon.com/lambda) +* Amazon's AWS Lambda, lets you execute code in response to events such as changes to Amazon S3 buckets, updates to an Amazon DynamoDB table, or custom events generated by your applications or devices. (https://aws.amazon.com/lambda) * MySQL runs triggers based on events such as inserts and update events happening on database tables. **Credits:** From 2ea9bfef19f6683ad493b1aee448c347c2adc6fc Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 2 Jan 2016 14:04:07 +0100 Subject: [PATCH 15/21] #113 Event Driven Architecture Fixed PMD errors --- .../main/java/com/iluwatar/eda/framework/EventDispatcher.java | 1 - 1 file changed, 1 deletion(-) diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java index fef303937..d5436acbf 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java @@ -1,7 +1,6 @@ package com.iluwatar.eda.framework; import com.iluwatar.eda.event.Event; -import com.iluwatar.eda.framework.Handler; import java.util.HashMap; import java.util.Map; From 7176b861461a850ba226857cae9d203d4d1e9c04 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 2 Jan 2016 14:05:36 +0100 Subject: [PATCH 16/21] #113 Event Driven Architecture bumped up version to 1.10 --- event-driven-architecture/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index 77504657f..32b0bfb3e 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -7,7 +7,7 @@ com.iluwatar java-design-patterns - 1.8.0-SNAPSHOT + 1.10.0-SNAPSHOT event-driven-architecture From 0c062d3f55b99dbceeec069fee804c7a32c8a5b1 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Sun, 3 Jan 2016 00:01:43 +0000 Subject: [PATCH 17/21] Add class diagram for #113 and to be included in PR #299 --- .../etc/class_diagram.png | Bin 38232 -> 0 bytes event-driven-architecture/etc/eda.png | Bin 0 -> 80265 bytes event-driven-architecture/etc/eda.ucls | 196 ++++++++++++++++++ event-driven-architecture/index.md | 2 +- 4 files changed, 197 insertions(+), 1 deletion(-) delete mode 100644 event-driven-architecture/etc/class_diagram.png create mode 100644 event-driven-architecture/etc/eda.png create mode 100644 event-driven-architecture/etc/eda.ucls diff --git a/event-driven-architecture/etc/class_diagram.png b/event-driven-architecture/etc/class_diagram.png deleted file mode 100644 index 69560e1f4b80d0d95dc5387189cc753e31d66f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38232 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 XEPJa~ z9y>b&uhjT=LqIM@y8jL9r4F)c$^s<9$o$^&h&dPJ#-%VGKhI`tFWswG88dIMiUW#O zRP>$IE2#BAN1VxPR%S47F}#EA@2pmp_>ajdV{;#T%~M&9g-xbkt5Xf-h)_NKmtf7aCrf|>38 zHD{uK=d<$Dc6cwm=i2EOi*I(-I7D;cw)lPb=zB0Ot@C`VE7B0-Dst!k+pv)W$>M{6l}V(*Zr*K zEzzc-@s~IM&QtXwb|kOfOP5fG!A!$TMT-x^mZ@%$H`t7zt{(43wHt{Y-jq45nbKrn zzP1`I#YOHao>w9!zIptjqM~-xTOnClw#v!`|8^Gm0uXivtAG5ZS{_&j&-CIGZF zG&e`5&aQz2LxzI?5-89xqqJw$Ab@Ckuxm$hF{`pJTKjnG&Nj?(NV4eWdyCa7XrfAGOaX0NNuexqYlK_PfZe*U+m z)tIo*NcZQv7c-zk_XmNn0Bj#zShg1E@zFRSxTM2V1PcUMd5%mf zflV#|&cGaC6lSBPdsbFh_zS{qR!^H>vhK@)hXlMD-~q54BX>u{T{nEI^y%UZ_+_J|--%PgR0RZ9s(QvICO{y>#>a>ADtLo(&<|%k235Vqmq9lg zvw`2}>R6t7t{e0W9)&#Vf8GMbv*U>3G?)iX;YW@1X1nXw#lmTeYO*$&mh z1Ko|6m-oJd01=$&;o;%+w`EynFu2NJg9lZEgy`tq#)#V6n(T~BOkkA@$?nHkwjokJl#uJq2ZQmOH51z+lSzT_pCE4&@3o@di1ie=<>fm z>V_ViN^>(a0Xcs7SFc^`N!7^20vrZcq{teWW&}(!V`KY+zXNa<*8lsLGv)(u05>}P zpMvmZ)j)z-z#C@#kd{V6N$H>CM>Y;^qo9--^v$UI^D@pse2SGddY z2?$Y%wpHHme){kGY0-ZO7F6{%Zg7$Q$%lC#Y^!y{~a`kyDy4+K%+t2P5G~ zYxSV9U3ly{f0xUvJUS+32R4Fz=9l;R;dB7AK0g;%)P4TZ#~@z;t?=*k?HU-EpWI5= z5R-m9Sp)m6)fjoLnT^dGD6-3u`*h>hty?N8Q&py^JBX--y&+NS>R)T|KS{mw*6|b% z>rLCtemw0sykm5n2vee%x*S4yURwErXH{8$vV0A z5+cRD`{P(Ww8*BB9q)!LACxCN`wwB;Z7Is#jD12@q0in&r1|q69{q#^l^YSAtXpzZR?tv{2?4sLS!9Jw7nm%a|YQ|WM}NHA%R zS>!~$>7ZE$qq@-u_Sn}FUCmDrNMt!UIPp<^n^U_DZ9n3!d)jqAk}{8S`G4%E-+JV{ z)En@&#NNK9{!Zn!GfbHs5?1$I^WkU#L++gaoTE^2b}aR%)1 zx_!Tw2Rbd&NiVFq8NS62@lE?u#96o7PR6avm5&ce>`|}>kKI49jgxv>o|D6idA*jA zWHv(uvw*kD7PIp6H^2bk#I5BQ#nifpymDqvT}-@FV&Pmw&GJW4;`Ug<&%@SZf>|+S zg=#c)A}hOU)@Qgu02CTTUpVajw4(ueocHb4K-hpAmqGaz+vf3N`pu1A{%R)x*mP9D zv()1ObE*-f!%VTjt$n>0SQlnN!p$%Ds|9cP%y;CNn2-cmFe9+EyfQX-rOs1{(Q=)y zCm!~_#BzazaS$8GIWz8FpOcmE+qkP|&UP^s<7a2@5~+5~tq&Ke?<`59@sz(O-_dqN zE0CC>CfW1@PmaIJ|Abe-T*z>+z+oCsJ3TU6FONo|!s-6|{Dv9j(ajl4SFV8!&Ev1@ zRmZ?*|JuGH=Yx98_$pWD1%POf$}jeO=E27ghPK`RhIB~fl)Vcbfv4$a)lsf(h*2#O zv4+#ZAJIuhJKt{k zMdoon-769jQ5pB?#-Z7jtJ6pX3RT~(#-AaJc}QVP$ae_|Wn!{Ez@H5d4>LL`Y~X%7 zQXo&EqM?D|eGf|X2IZ*UJsK;A1h_?(#`Q@(lD!8We-{^tl!U|bPQ3uu`j4rgWpz3i zH;Mq=X6Imm`8eyWrnBu-@9`f$xdurzZjm<%F#P{i6REJDpx}BFw~AJgtkl&23;kgb zNg?Z-mn(qb&Z0E3`k$*6s{MuwNY~rz`909J{+_bmzsLWUBS&rQu98?wA;BuQdU8A* zWl4OxgXp4l%q6${xj|999C3#KF>zGCsBIcne34BuPj2n_omdB23L!%Q>Gqfxz$lzS z6%}#5E}V|Q&wvH=yPEkTRS)(BcJ?Csi4$;#7p!HJmhQuHAu5*Y>gb5{Pu4aAZUA}B z0iXg{MPU8_o`rxb9bezB$a(O^jbH7zt!GXu%Uga0PGnvbzv*@?$s3gze|f-e_EjPA zNx@j>Bh!8l1c8#$Q|nKBGZVrObb?3ed7d*G5XLZx7t>3YvoPeDnp#PqGao#iD~kHA zH;PSwQycY3ULC}bpFVlSU|;yQ_(Q2L$LOU4mYHh6IcD^I0nR4;-4u@WNmR}fEh4XC7o1j9NZ3(p zS@(RrF_32pr|De`q5v=0?8zAsILGnv@gv3A3F5SjjlIBJ0)AX$I{2~W>ios+=tOo# z>sAN$s?|K|Bd>d1pSpbOLmY?dq`~Gg){SjM6rcRfiBbpbL5xVFHhX+Hw?Ve`WG*>p z)wfH7SO5`$kA4>STZ=i#{nzyk0shYC?)t6Rn57VG^0nCf=0|f$xR+x0_3N+ob=fj4 z3F7I%03X+*`eb-K`7|`5xb5bq9bb!ev$Vnh=)VPO(ukZZOk6>1r z`5Irzv-n!C@wsf9=uln2LvH&>-sZYfjx}KdE|wXy+BU`G~)fV3U8$`X=wS3F^*NL7BiAp-aH zMHexqUT1MUpJa)8%Ny0$ls^r+pTR3mw-Lp*WVf(jBh;B|B1K4Nid%=Yg{5pkmk62LxU0r?oRV@Q- z0g~QcB+3uR%0o3QC1qZ6kjP>?8g@W^)FgL4k;ZMkb-*d)yg9Nd_ZCAQAd1?<%m*DZ zkha}0&&?gZFOZNi5btn9gZ9vM3Rei4F|$JT8T{&C{%72_diW6IiXy#sZa+}&X$k?> z3(zh>qa!d1q=0;f10TC!Q5tbSu56=vL9&kZC$mIp zZ2ZV+KxiVd6X+q$9o5`rF@r2V5fwfY#`}4IaC{bfZscEXc<&S0(sJO*BhN|zO=;WU zuwc=V^DUd}%+e#BqED1ASsln@aNLz%!M%Gkz{(R{;POra?dOgT2??2;G_#{VYHV!e z;Nkf*IRh1{rltl2Z|S-oD;WULZY>--b33~TZ!IEUKS57~dCLu1?Pq$CUGWFY-9sC$ zkwYHc+UQK?s6%V3vE$5DZS8fP+`L=wM-|przqujisE)o|dA{w`sWo!X+T(IoaCHXq zPDi$5)L7(2FRnNElMw*t#Kgt#WE1{46< zdfB1@0Ox7a46}@{d@r^}Qt-Ldi;$ALA|y1O1R=ajy1ISfsCVq5-7~K8Isj7OAIbU{ zuHL~ghC6FhQ%|6ZFMFK&EWr6!i%jenczGYf<)T2_4$7VQN}yA&-;C_+N?uyoGA0_; zIE#WiQCDH;dGbR~M~ABavXb11X4EYz*(Cp~mGYBvf6@L~l#DX5t*vdtS9u-;klko- zgs-uw-Mu>v*$`GD4P`ZTb@FuASHU2AfL+Nncg;!u?|*p)g^3qH2IbLjsHZi8qGi#i z$pVn}b#-;cKNR)Gh-TqqPu0U0G-%h}Y_gs+J$tK$bFE2zKCBe7C{r!!2I_`gq1P6m0X;y^6~%mB_=3u12g57`NQS+8F1 z#yv^7sM#_36@$mT_STq0pAzC=+1szfJol))9_zUMK@~=DY;G~(1t(WhN=k~GD5|M$ zbQFr1OW=>C*}nmU!~0L4xQodMqkyU#99e!eew1FcGoBz$t5g1B+vyfiO1iW!1srIHu-8AG3i`3CS z+C2wf#_Ye1ep3|kIIuPvZp)IH&Yc_|Zrw)&%piHF0sM-IN$GAQ$jM{9PoLWKebZ^c zuJBnO%rh0u{&^0?I#Y%ZjQI3Q=BT2gBAkMHLAJU^`udMWic+F5qb(%wVQ7UpSQ$de z{5>B(K1m5+PRihdN|Kfj*LMP`jzC6rclXZHyY-`o{)+RGGRynIeBYNpy5U05$sq`M zCWx2dCejNkj7?0ud00DiFj(u~1}hSnF#rj5(ZJmm+%8o>ndi?xOu8=r z!PFw9ZF}(phuT>%Zz$PN^2lO{23r2L8>+v!c6tFfu%>CJ-)3eGQhSaiyHWL26>dX; z;%|F6E&|!5Ea9Aj#v&oR7B|GE%itSn)2tgWgOcJN9yC5XpDMySO>r#I@y2R9= z7pou?1x`W~at*SL?LU4H9Fw3aDs~Y#Y{6ZeDnpxaC5pE8^qe4W*msZwDl01Tb-6fT zU=+%2vQ`GUhaa^ z@~*4L)4jF0K;ouC-jGD%h7LS5{z8u;2@!;BgK2*s(8-6Lc_z;fp#z_dnx5L9WD<}H z(&ezaH;-(1U+}pbZjUup5cWsMTs)5%cQjX_X*CNY52Ek15OC^A_wW0tVfnm5}lP*i@_oQ zPoF(wxF>(^t5qAL+x|hJE8GzeBm*mh^#k}H>1pgVl97>=*Hns*hehg(r35#F!qg`N*cUjzf}{QC-b66muk>0B|GK_l z-v(6FCL?ZaG=%!FtnB>~V!o0w?}s~0!=H!{bM>zBxgJDIMapc%VB z2bHg{Z^gd1o*_y`w$^H+4cqJFXb4=`ZGmcF z5r=`~XSTTeBs6Y;+xw4>2{;~Hn^zs@&J+_7LiVfq^s=7Z4TQL%v2jFBid+$n|NT1={NYBp{BZ*2e$b3pOoS^7H^*R{ z5{im!m@gu`@eLbF`P$<}*WoyPw?kn40i;NfjNa{VamtiO!<9Dw7}K@2H77-*Z`07c zcqK69-QSPDKZPviynI{j?Xz@C2;BXA&tAdo`LG+*~s3&=}w^G@d<$QmFR9UF_e zLZ#{*Zo>v#s!fK&W;^L0bZl@c2nL9Wa%Wp_Z>eIk)XC8@N2uQW^Nz#N2MGkRYL5Y+ zUBNCFl;d}AaA>HuM7o%0ybw%MZinVs``4;KQzs%CY7%|o(=5o(p9iJ_2rU}BEX~Yp zFXvT189JXV(0s@l#=2hz<#D-pD#LR8Ca9>XAx-{k4Xfxc>3Xn-fa-Oi9T;7IAFfwJ z9q;4OPwyW8-o9VXX{eh7P<3+JV{Z+lT+>N-U~o~>1FJ!9JdpgfI%B=mr!7>M4d&pJ+Y^R$&tZ(h?}>&$?c|fPMkwLpy{SG25#^ zAmWap`fiYi2m3F~O8i0XD5Yg$^x&6K!q8 zM&Du&pcW`5hMK7_gB5ccL`1+-)B~6Y{{(FL=Rh4iLrOI=M%GSSKX}A;_wTnjq{DR> zOG`_Pt}0v(Y*OTo~i^2T?c__OhsM})=RL;rhfcr_7~sDz&scq z&rlpj1cd}}8G@;|Nd|d1yf@IQ1OE#9h69i(#^&a1#ZfAMv1^nOq$!#r!IW_qNDQ!L zr_bqrRC@zckT?a?1)CMHu$vG_#Bl7U)5w4&(J#Ym z3nPy@`I)(W7j97F;y#y?l0*=}QpZf-V^*&S-TkFB8)BhC<;vyD$qX#7J7G>OHKlBH zotmBolocNv8_fGrMQ0Q{qEs@x<%DG1Kn^MSDY~<{?U$;0W&M#Ntvs7FTQKt^{JLC9 z+eAb}Vd3Fr>w4qR>omC-b72Mte!598o4}4g$Ws*wOJr-|h@A>PY3(wlVQG4Pem?jn zAVo7Mm)Sbtfp`%+et0y*a0l)mdIt8%0&;3A({Fb7p->-yBRBV2*VP}^Kv)AKWp~dt zY6v>3+ioTp>Pqt7y+)CTQNJDM`(tb!>w^qXEQWJ)zav?sOY;Q~k~<%xUPg(cHlP<1 zHl5PatC5G_TU%2UJhYNd6-?OJSw~lMJj`rl{P5!$Z(Q>5K@HuQoI`@-&+C zWv(Hkqm5JF@K96Z%Ed>?3o)}wj#2Wk#qDli0Y&pCV89JBioN}Pqn;(@qfaWH=w{`3 z09Ha)3=B-5(T3dM3^Wd`fcq)|He-14V^Ri@_Tk~Thu*VMl$K!hj*q6`RbS{nZ%18`4Bvp4SN(EYVb&8q4FhH~0KY4jJ%Rgy15;yTQ*0zl zFBrV0>WLCZKR87*LPJWg*pCki+op-y>BIS1Kiw2XHwyB|g)c*&w6kLQne2lsD68c_<`S9`I8NB=~WL?g!RCrt1WkqJ=jDdk` z(HFe3a(V%V`I&wAl*&5Nfr7!t?udP11+mb}JUkCzR{TPNjv{)p9eQqtaldB~2AaS? z++s2@D=-VDrKQ0<>JLTPRaH{OM2i|#_=77RTfxV7JrfKNxXFWW%^I;~9z3!s^@Tc$ zUD?XAgO1Hpr8OGM zmw+RJ5b-?dVJOL==YE(~!7N(3Cap<%v+UX3?5PZZ`swRG~3 z`?Gn2QEX~*5}lJGsGy_-2hJbCHADilZs1J;S_1Q)!db2vaRXsq#%$)d(|E8O|47kT zfb<$6t{c}@d9|pS1UhXF4Vt{*=76boAp4>-yl+B6l~0~{0YgTzSPH5G61)7KrJJlw z+IVXC+x!OXnnE>gDXDwlYrlAD+L)E2u0E&wwCb%4S-S_?c7POeZ0#+JHg^(PaDH&u zVVlU)UGu|XT1x%_=7kL3e%5d6Lxq(#N-i$=fE=5gHh=nS>%XDCqV?5*F~B6Yq5K z-|1Ueocs4;=a-a#m4OFbW2_(L;e|O~o&J%R?MNVWAR6(LO(*P;HZXe|*f0>uMCPXM z>~$ZTe5H}g9fcdTMJ(#Xs6SsQ$;k@da{xYrJToB>pM@KD{$m;d)YamdWo29dTb@y|U2@F+RB35xKu{2D z8%S{OXy?C7Yu!Th?cQHdiQ%`j=5Elo_=)IbLO$< zPeu4T=(e78rcseA)4IE1%tg5R8u!9Gv~=vl&NHHGWrW7*(B z8EpLP&rXymyL8FmeOHbVLwDrO_u~zhgwSrM!21ATolRo-cxOnZA~JHh>1lX4hIx$U%Ys68B~(dJykA&{r6mcuKN1=+mPw%zYqg4 zK59rr17chU>m#tL#5qToMZfqGHjK?~Kcp5?rx$?;JtIiLef=$C* z2!=ZW(Fw5!I;J*6J)5u-3Na(@fNg*+W2oBHb1;8Ae<+mFHZBmUA@;{hZ4~OV4N8d3 z!BF8vjY5x|FO{CO;Ps_&m4z4pG@mN=9k zv}z@Anf{S3+LyU=er65CH5l25Pdy25YNC=piA^4^XVr?>#ly(3Fpvj#ZJoXgZSX+X z)ghGE`g-3M+kJw%ESU|4E^Adahz$UMH;9 zyHL^HziXCH`b9PuB@BjQ3Q2T>3D+z#2zA=hG=E7O?;$vX@c07~pK3MBCwU@#Wf0O{ zTus%JO{p;VI;D4LVTyy`8km0;qtf#7NID@rBgL5Jwl>erDO?ktSNlBRJ4}sASB)v; zaC9Ii(>InX0Mp&fav-9aPGoIPZgEL$fRYMTMMrF zy{bGnuzAUc7Sig{_aZs8i$8apw^30oEULgNgG*Ob2EcAr>aoM4GO*PSsD9r&-rX2O z(F3E7TUy%$bpvp%2`KK72wPgXtusf?8wn-*=JJ8YH?&TQWCyM-2@T){VtLT$zQ}0h z_0D1j_9x%GGOi^U-h64V$8s!WL}G--C^K{OZa|NL?^-UrqIrwM%0u{O9V+gUM%gu` z;8N2ZUteS~(ZMWKbA**Ae~T3gMYY;gO?XmpbfF7 zMw)XM|Bh$+iz>>>%@EGa&y{urY83d(6er%(g{377jrk8e+u5xEfs?PRjKBZr0sMJS zo(L9`d4Vqy8W;m|GJ>YCeZ zrZ5oEojnV#T`Z#zyT2pi<8|bu>-VlMvgHWJ{W%?N?GK)2G4*geri`s$78a12tk4+* zlg1#=M@ZDELm9|o%6$dyUARO98sF`x1(kr`Rm@%Pl%1J9NKG4mA#dKw_+HvGw%T{! zNBw&3({e$Jh7cGi97ee{9Y`6k%7iNYIjzA82;)(3j$A8j;S!#^XN+(;fMWhb2hW5Y z9eKH_a@8yF?lGe)+wvL)3-4(HX`whwPT&U<8Vr!OHY66n(X@z||Iv=hqXi2@gSNDbJ#i`ao%BW?yCifQ;SumY2)GWoj+n1Zx_U zKEKpyBzgrTuX|Tg;s>QYVj@9a+rm-f3BXFUGOo zGBT2rj-zQPn2O*w70`thCAwsXudQ(ZGXcnGlPq4TgLGA3zxah zfu62~rcu<{Xid98;1_`p>U<`=C`Y&_XwpN=6*u?S;kOPt+C06~f(Xta}(gXE7~7vjWD)z|Ndx@^uaj zb43v9kv<)r{YETqjjh@?W>TJk*~>rLXyLwO@HF`~%{G#OGL~i}|uBq2rDa8w=QH#7cegW>=*4DNy_dZs0Kxv$aBgfsQ?nb|!tL+G= z@R&v91@^Kmv9A%YC_=FRY`uVu#x3QkHu`IBVilh_ZZfv62p-;iT}m9nYz7(;K!@q< zuUZ#4IRWT#^7Erq5pc!8i2Y~w4F<>@)Bt9K7A<(}zu|%m8yg#l!J8AaML|{oCTBfk zW5!~#NUjNNI~U1=`jgL<9hcC4`-Qc&)=}#i`W5)X1)}U6Av8#!3QxST!sqo zr_kxueSe%S=h*Mg#2Q8<8hAV)>G)Dr;)E=j0okYtPehIa6^Zo_Txndbaa-+ zOOx?Qkx!1bm}OF|yIuVnE|cqCHIvypJ}erd4?ProV#%U>oc#D`pWf|97>a2>7^o*h z{gvMvwf8}WXkW`;w+#J?o<-iNaQh7Te3jZ+7LeoL;%8tE4jH%^0npf=gCiXWLnq9- zp$YpL=11(ysU2#sE?l6ROomvM#B**2fQFVA!E=LE&A6c?^mGFd&~?$y<(Pr! zh@u!`cEuYL{@=kh#hay-!Yp#@S-4{m)kb*T;3|6u)m4GqgDTo zq~s*En#!wA6LgpOm=hOwCknrw865Dcqr{{_v~XeCvUMm{%<&4`EndhFf*J$dhflJ^edKC^ z+@-hU`Lo3JnGvzjEW)n(x@#6qK&laTi>j6#3f547^KSbh1{b0D!z`<29!L;yjNQ(Z zw*eftQ}X;)bwLMP`^4DiPD%p$?w z@3QhHFVnF4PNgA8TmDyK)g{@BIflo8ZwEGs@9l`}!GWU@N4KTk11S%u&!FkI7edC^ z&%@?HGnuo<*u4@+keboQ>T_$N;?w1PTh!ZV8z1p&M(o>!4AfZj@iqNqhxT4pp4fNfRBbg3JlPz4fbZVMdMf+8i+`JM*jsEKOV_IgDz`}1DKTl(FR$?T zr^IEa-UuL#s&^vpEX^_F1$d54J3;c2`;s#TENp1*FPtVc+hpzXI z=lbuz$6vOP6;TpWLP&+O$|^-xi3*VsG7=(NBBQKIMj<0370SrS-U(SHA|Ygk?D0FV z>bkz`^Lzhuy?fuTc)gy_$2j+MKlgK_-w9nRj`CCyr2fkFG>F*UgH!TRIR56*TtH<{ zq-wwtTl44-3=AkP-1luS1zCiDJ}Vq~Cd8m=6Q2?i*(5)8d!y>>?P*3qRTppDuU|yX z_NFF{^LSmZPqK;@0TDE?qZiQvo4PK`v498%CnH8e(6ud?ClwLcH9%ZuDJr-gQIPoXj@Emkf&;xy{xK}@4Q zlPP2C+r(V!n@%!D(Hr>n=@XA=ajTrb`aJtPlV!J_VUjT__4~jzkClnTqoZ+uo*ys^ zG?tr64WaoByP<4Gvd!l7>3jEIBtMrDx9V(cX!uXdALuZ6yLg2TkK(s|r~9wb9%mH7 z^3$nJ+5g%wzxTT8DeF6>cyjM&2x0WVom=c}`M&y-)6bkdc{!mKe@{iM=v*X4tHko8-=?-^tb&v&E0_w=g_1`CgUq z3=ph$(|41KhyBOw7bdsOr@x-3NW9i3g2v`1RrQ@Fk2oW@OKDz$;tK~2G=*@HIJ7q^ zn|KVCy`%CTh{4xK;~ZN%!1bXIfZO?wKDenDDQdcA$OwT8M#geR+-#dh&f|bf?O8-t|-3 z%8a1tbI^qy+_dGfBoaxVxCIsmaWC7v8WXPB1I`mUibi zn>0~Jj*xK2PPC;u0PGYx*(7BY5kq(&MP*$eFfXXLlhJXlKL~B^n(@o-R%OBM&s?i4 z1BDySl?$R(jnPS|r?+V}ZKS;*K1pV2ispg-%jZLgCm*e9XE1SW_lX-uQmZm)wZn0l z*f|}=yix<(;oH|=8J0>ocMNr_A6Coy|Jd@IzLTUkwH7a#(-I0TXtld-i z>E|($H~haNtDXm9eM}EacEx(Ib9#JjYYPzQ?&9=Sy0E&3IE5-ARc~tY{bdAeW5nV< z=9Y^WA`3H5K1>?MescI>;Ta(sXk4YNSez21Rj$RlrX1j3vToS8i^_8IO>FlIe8U-H zy1T5c9ji8+naO$-Bo8+9QAE2E>WUFY2wqmP>&CC+n9uX*ub@yODOS|b2;HioO93t$ zS*CK^Z26wSc4>V4-b)|p)wQ*V37MN(=o?JH!|^4l|4ioQ!cMLD0ttQ=!EggJ^OYRy z^g=)dhzoGOIyfEWOA@1(CHMJuxzZH@PXVudAB!I9zV%A};sMiuWq$_s*OSLnc9ubs z;>_%wMvm>PqN4Jj{fwFqji_3vDtsNoetYP zo%=QV;PFU@x*1zg>??R>y1BRj^lrmEOOkl`A7=!95fPm`E`)Cg5z(}ZgYRz5zLN?H3Xl>V^IQ!`yQQhX(sgdj z2!LA}G$!>b@R|z+yN`x7DQ>_h1Us&V7}Lt%mO))d#ly>BbmhvO^$yN$+m;6Fx9D$n zAH+Z@`cZ!sMc)XOuXZ1P+w}fD2>va3G$NRAu8_U2WF-Gr*E8;LD?p_M=2Z|P63a`B zZurB1ojYn`1_0Kn=CveiLq);hAkwPC*- z8%xmkR_OJYF`nxCN~GBeMrQZ_)8#7b$M(Q%H0o_j45p%M298Mj+v5eWDBuD~ZDj}! z`?~>(!B{^CPUBw@lqfQ9PF!{ON-4fv`NE$;*zAjz?W?K9U$<##$pk<8jL4dGP0t>B zbW`I3O*QSPt2d-cb90UY66ZJJm11HgV!HQdYa+xZAe8^Lb?H@ZA`9T#H@Johbj03f zjY6*h7cmrICbZ$SZ|4Z7PQ5x~{RZXS7vJI?4LD8_ygdAr_iu+I!h&2#2~7H#h(VHv zdy}JHLGYGq-G%<#*^8TXLg3j%^l#H8%Y?{PDE8h(q88F0tunJe9Ow3FLe{`%LDS=~ z*PUr3`~2lg>xA`rOhUW6H>tX;g)Z7GwCt&6&_>$%*Q6@PuIb&MN2(I z13##>O*R2>-Em=6ksbEwmq{WI!rzH%I%E4$`R#>4P*w|uHF<1<6!ULfDcF|jVY%P{#vrrS-nU4JlkFd(ALQBO&~C++Q4bzi~McZgK$mX@iZNc zBE{_nrJgn^t+m6}3zIf}8!0~kX^2H)m7$j!>m&41L?C3uP+VCC+9tul`Sk29vc!_& z%XsT?we$C5?&jCWC2nCGrn?|M`{J~;@lR-U#KgZg(fizd&+P99VfGY}ZZqFZ*BMTw zc|R{x5_sQ1}6|o2bg+({j6Z0NOG`>X@uY)EM7ZwM2TQ{5D{e@Jes2y!9R#ieR+iM!?9 ziRid=a|FVlxe?FtH`lK>!Cu#{T@I5PQXIYCK zS&`^B+`8E9yIDrV_UtAEE%2V4rmtR7Vj>rT*8*~yc=Bkv?6C*oF=x$cul)aGh+^{U z+*mEzr66rl#S%L~+K+~anDFeGp8o|3JD|ieyW(12i4j-Sv?z6$8ag}C)Usv}cv~gG z^IUg>=fJNi)_gP^FVA>FfCI`k(ruyf={HpO7f$IvHw&z+aP_VYeOaFEtsu&Z^JEY9 zfYxya+;w)CV01aMOu2pJs>B%*PbWB{`Tu+95OR+U^X_71WBc?>m5pL$1Y^Bli(R(p z`OzH^6=g@DO&*O)vJgYoVBw_Qz>;#$0@wBK%;7vPn#yKj?}jsvM@L^izwpKt2Kqd0 z9={vp&%dJLr+9Ob&G_G3W4DZl>z2Wmumc$x&eU`=hB}WK|CyMWcBA?qgdF`gagL1G zg*$aj`}y-ubCDCfdtWbR1@v;2)mbD3sTgE!K6GXE1Qt?a&`u)^ZO_$rohS)m}TUcG)DbltAwEOvTiD<{wzlh7eB|JD-okCjB>pTq&Y1An)nmvKf zllMV@;b>sN= z{uFN1CZ?w3^?ULdM~%$P#L>(GJ=>4_5_$(1<=1ZAm1^e@Z$$t7m&uqnVN0|V5hT6y z7=4q#&o9UvF;9TrG#=ymj>mpSRDSyO>C2bxdVb#t$BJM?_-|I5YRi@fxDc&b7cuDT z0gVJ`VMQe+^1%lDi-xW3Wa~3k6tN+g0o8(lS)Qj^OOkuRkh+>0O1*&MzaL}qB2lIZ zI;{=TllLRHH_jox+ZM+y)W*R;KrJrMiTKhE(hhk1;mX(#Zrd8;t04BF@_<)B^1FA? zTUaKFo)vq2=MOOamAjLhhev+rBNA%WkW?65Fnf+>`SEW@x`S5nsIv&{VUDbVF?62n zDF^m7BcFJ`&O{Oc8O;{Q^9TeOVJYlU8o=Rwfy z!S&-w)3++KYnwg`KHUC8sT?Cl@9X!dQTr%cV@UIli%>ZQ-P5C>1k;eaOVEg z5mI2h5AdT>@wmDfXT&Q4O&@weSP58*AFYP z)7*%`%#YhkJlA4A%@P2fF>Q?bVkM;$C!VLJp;2u@%R}AE%Sa6;TlAx{{ZRCn^Y`Q9#Zc zI7r7DY?+`+bOZHrEPk!8xmoj&e*(dZd_7?8KWOMOhIw(p;hDuAGH-&We+SMzlgpQ{ zFU^<{9|HuVUwe9d_xNvQ=Q8>#WMgi-pfC#Nq73w$QfT4{z*Cr5tNqoaQ8_y=z=Rfu zS{Xj?{tRunyWW&ykgJQqXUMnu6taKH)Q4LzSdJTm22}2YFaWEH{EMAoo-_3I#qrCR z`w=w&cHduE>3|F5Sq_y&Fh23|A+?qyPq09>i5GtMRnLtRCn#Ue_S0b!`o9J@c6QFr z@K7q#DQD<0qi+g2&MkCRE9;a88 z&Mz*=5=Qd~PqM8(iGURUcQ$9Cc$YHF@`0Sx!qW1c%PgfHwY>YbIzring2FE#Rj%~zoNS07c<`X^W(`7 zs)DgTd`XdSHpJ)i?@>L?$bcz>6aF-Sh2zM^uHcE>XfE-qEMK49=ca~t0G`78j_>4V z+@hi_ZEairI!5jI7OXl;Fr;;V$G3OyA#;QGJlHaS)LkW~5e0zj_Vt@L*?!aPi-whb zC>f)pqKxqEhAJv6O`!jonOFQaIk}FuEIJmyZeW9z@5Prv062eq?M2Lf_M!KVr2q=Y z2+?##^7v6vm?VP#>hbgTo4Boo$rJP;zcAwCXivO9;0G~R^Kyrj zl+=t%zaM(cQi3na0h-*Pf`X+#UG;|u|NQv*GrQjL=rWCVwBj*bd|TL811kaQ zUTW1|d(6~*wx?Eb5kL(5$0YyQSWeT-ItBCI#H~meRB>vGVPP5lFL&%zS zZq*<5P&j#vGr~?^zy1r`e#nO2z_tKs6Lh-RvmPfmk=}*j(&c*HHP~Iq9*rlwpn4$2Mov6V zwFLb#U8%t~9Eh5>FarR{dKwlV?}b(Z93YG`9+ZLo!Q9A*?N|T+&_@|LVjq6TxA!6R z2XvU&6`{mmD(JE~bLPH#6B#rDM7~IDljcz@!^T|?h^F#Cei##XrT@~2g9i>oOFHm5 z)Oo?51s3&}e~vEF%i9suNEu})Tg8_yTwELPdIPS*D1*CX`z^V!M~^yTvW2b(ah*lU zUE$iky}@)ICys9@hx=uP3xaLXBmyV(_4UEJI*b`YzL&hf?#p5Oj6pvWMFSVu#J z-{034j^s>w2IoGuwn`zaDUZesr0IL;%>Pl0xJu}W2`70p$IGg#hhS-+Y;{O=5K|gN zQ#LS>TX#8&UW)=~(1`+6@}#=Ke`e(VWEfr@qX>YxgXvZ zPm?HTfJk?LAkzkoTGo%(E5^Vr%%>3tfi{3Z6ztgiX9>PXfK0HkAHs91(c!`2fR+iJ60g}EnK>#zxRubk0%+5kA&qV|f4#V`& zh9sisl#(iha>cQ7zfancrKP3m1uQ36LLC$n^PP!4WG*HyE-NGByJyTf;_5+RAt5Zt zD>PFMH_NfgtZi)mo!lfdhj1WTvj!2bf22FuiDR2UaLKGormCRe6BN`y)X4kQ(SrVt z7rm^2>(td%%HVw{cf(#jzB>gxx~MNfzeWmOAT{IS;vyp>Tl`g_<9`pY=FjZH_iNxy z4_yDQ^zRf!5Ku}&!mXDI*WobcfXCTCOal;3P~?f%ZU3?J%*6 z6wcfKXa*I$Fy2LGRycS}UQ|v2fl1Pr>zPvoFoMH%Y-dB*$o`8tb>-zG4JtQ`n?D&} zyQV?)nA-2wABj#`^Hn@kY<-VgAz)X(LItNs%_mBY6mp22^|Otu!63rGjr<@cO&W!# z0Tbao(^l%`#gCJu`^y(FxF#6`o4-9Iy7R@x1`GQx`a^c}(X!*uZRPF$v9Xa(&o7Y) zGYu&z^O!4o*b6g5D7-^jbNR6omY0`53yQ*dM+d7J^J5ktcP9AauDnwHK0(o+Pc4Sr zY*A15dA{yoJu6BJ46^kR9ebcjQ2fu$%Fm5aUhu=XJ9k7$ zhuZcQF9G&^zDVuEi`xk60D(?V=}vh;J{2WosI2V&N=}Vm0&}mh=J`izGqSPOHa0TT zRN?_#A0{Cuy;V};iQ6TSQiywWX(-YVtWa%&5CRnx$Gc!IjxIoIuL~B<@6J>WWa&oS@7{S>SnxkY z*wuLiPVr5ZdaUG?mL79&&8A@XE&i{lj5vP#jgg7zW0Eohu%#+GYA6ZM?5V;-GZM-^ zXGgyKRHI)guI`b#9pzS05o7Q>MPS?IS9Xa>NrzBxT~T|FYPz}C#ryd68y@<5YUsCS z-A)Tgb=CrpArbDSedU*TLR znQ~v56xpZRRaCj|)$DR}vbVrtD!Qw`$6>xH+U4%zBWWNG8alf6^i9WwWW3gQj1gQ& z#t80!Zfj_jx>#vNf!@D&_io!@0P4fyoplcIyLSEkQ){r&%yIK9PEI)RYt?dj(p15n zcLBwsNcehpOjMMR{#(sm9#PPV>p_1}enE2D(9|Fa&*M$zCT|7Gtt4{&yAkF5;}gbh zf`i!+YMr1!5xjY?+^Y>Z+Tc??UrG=^h0{ef2?J$cN;lTu>v0n7iRcaa4O5eo>NsG) zj*Yz@{H=WErWMsg-kx1pC~}5eJH=ka79&Vx&HPr+ts8`+m}@{h*q!{Xeox>FjS#~u zWiu=9hYwjmihj8F>^8)nH_*!~&LzmPqD>FMrv4Bo5qx@~1P0T^xr_(usJ@YXU=)gE@-DVR+##-pd5dXY=zt2+SeHTf_0st0SLi39H26LF_3=BaCncJk zUTcY4v6A&(kPTA2Ae+ARByTf^#B^ukw4%c_vc1G+FEwIm0z6w8ag)p(D|DLpIW?78 zFE4%y+BDc$P8+K~-IH~^8fXB&nqk{PrCn;La`K4Dc#lp_9a}~F$(&XGXt^<9PHLam zMl20P7U@vGc9O{PkliIb4Ljtu?%u!iKG?OGm$W029D#v>2y(&zEd`CX*F-%6#JMkA=FeAH!a$nn? z!O>BHnj&wMzdb!Y50B;s7VlfOLR&1~oN#G}w39Wk5$@)vuhY{lFl2K9g2~= zVPH+mCSv_1XB3q}x{PHjQAm?z$1)-`xP5eN?65^kS$+McjPQ%95bAc4%#e1HED}Ay zLZ%*eFqwK;PNIOEl?Fui0w>|aE+Q-YwYvHlx9e8!4;O0sAuQXqYnSh1AF)+F-(op` zBTGwx6-O4G`I(vRAZ#x!QqVj^!w|Rek1>YrVs&L@->|cpN3U&wgAtf>?z;6v@qpaY z%+RmJqndBacMCG@$C=BfkapU4NM$EdZs_KQ* zvvx_dv9Jc1zZvFpTWs$dhV(^kdyXuhtc6=aE&rn%-iDq_)u1sV(D>LFe)RVSu6+Fn zQa|!#Du4;T6$39U2#mqOxAC!3;T#sywk=yK_2h%k48Aug@lv39$MSKay8sNQ$Y9+q zeNCm>{oI!TgtqR#^dx_)6p0G~&w}?8F>`THr0DJ2tZvIHYD>^0%h@KiB{+CO0zxvp zC#?jj`Hgw}AnQ4`1O@>FVh9%599TI-m)k&M%RE|0OgQdJvWM$cJQmh;XUN_F5=SM+ z9>0~vU%da8LRdt^o>pJ=0}7tQP-`mCkHCxd<%<`di~asS?0zL}K9{;JVONE*GotRc zRzZ1pVow+LJihgtL1EAoV5Md{sRQn{w`HTvLljTD-raeBg<>&!-1qQp9JZHm$J!S zJnRtc4$-?T@Y?VcM1W~ab@Sx+BDV!w3>BWA^cwIJsU`gS#nW@6C2Hg*UD(5iyB|3o znIIn{^uV>8B(heMTbC|?p0nAljRMIxds_EM+s|Q@Xbhn)SOXp&S7XA_^Ma&~=XlOh z%79>5HI>%B)t{pK_SyGW#E*SCeBkh5K6o@5UHwV%JTzb$X)_`V1H#+_iQNa}fIR$Y zSZ`YK7zd3kQdEV*Bz+zuCNW&PE5nr3O6o=_G+e|vB9EBW(*2%Zcq0&$r?27`LgB1m z=opyql<1!ni(m*eje_>+%AC{v;YKHF?ECJe&0Un|f~X9-y7NI$hV4FPjQkhp@EJ#H z!rH)Jwn2NG7MWSL$dp>vot!?p2G~9lrk4@RvOg2lU6?6%qlR$l(kzEq+PRd|^;0E>%&+@Acu-k> zTlM^Vn8MuS?AEh9)RpjiF6fn%SGbf3X)AuRlc{qqq6Mjy}(nfx}P?w zSe>*v)7$uhkCS?HRpFV7o4Tp1C|>Q1B|AV+a`bUgcf=~aCmXjB3B$jZrzAxlUNBXp zm~*1%_P;YBBiVzwi5L0>q)U?wI~Sj)u_y(QSZt9T($ebH<}>W;%%iaRJ@@2OlCoZ> zeVKPtcisoBFQ>y0Qv5hZ=j`*xjAZ;1{beMPP7^PVx>J|9IeQ`Knd_)b^7+c;gs-)s zQ;PnIRLA{O5}EU~OyE{3eBrfk{?=WT#N|@xC=mJSBQGVt#mDq}VjluRnjI2}17E1V zF~%qv0nyI6+^ZdUkeXf1&7rbyxGb1AcP~LHI6BJOopt%*iJIdb5kAxh@iPv=#;p3;l)1tK+aS9?$nk;&k8pk@NV6?y87tsG$Uiy z%moeLBb_ zBzmD~X;%5chZh%fcZu7!r%70~6gd~It;E*zB5;#8eEa!lAEJ6n-sPj*X+M#cF!Roh zYWKmd=Pencqa%^{ciB|Cx9n+SRUld2sP2n|E6FmPq@2_fC#kCMXyUD>oq}i~n?8&! zi@q!v<1(JhbEjqpwl1?1wpsdVIJ(CTs3TfOav9U#3=v3snEU-(PbA6@oLTT7PzIu4kboevx+XdlKpL z>c#1n;?4_QLE@1jHhYIg8BJGo|GR9H7;6c2C-=R;%AM^ga&GSGlH}(0ZouJY0~mmj z_6W>#UK62>k`rG1vcz%N>5#5o_I;U^5YERiVYRIdDKLGM?)f369<;=RlU}KNAJ+(; zN>dBoeqyk8FW;T#7JPMxv_Vv%>ugG>($A+4o_#G@a}K;mq4VW->Tt1$L5#VnesaSr z1HJpTndcR+KA5qu6nN=t(=G!+{oqRc=Yh##jx<2wSD|Y z%4H(iqBJ(pn*b_BQi7%=l3IYW;LyN4x~~wW=#dQSna34Zhk5KtyQybLacm{oHE+iI ze~9-l3{P`M*f$HxxXdI2w*a}^KRGqkhpq^UKNl-1G5P+ySw?vy4!BqRx>K%y`v$?b z#U1`W(jP)IXdTE7w$el!#hq1yJ{&4B^A9n{hwz3_(X1|yWipQ*lEP)pCG>ENyU=Ku zhxzk~z+~<8Gviv-+-%%j-W&k7`j=vp28chWieL2XYtWhALuCN<-4zu+H0Turo4!a* zO(kC{k_!sycKOQm`2@&faC^NM16W^>*_i;GjLXJsr*ybYzRl8j3upZBEB%7kmTi3V z?AZt&f-&mrTpW?~;Htv_W;t%feq#D~9Z!Oqcz`>QDLE!e&+22c5;PerJb+t4@t~~L zDnJYbXk3%@ceqQRoFg|TI9*a!a<(>cLSFJ5ZbahiKTq}Tj=z5`{v>`(33F2Wp?|Y39vDt7ceZ5iBuNaN*~5h77X}lSbS4!c3>B!cYr!gbaWxGBzjx*zf)&G z?$)v3-~Air*pAKKcIWYT>Xo!3D_B=|<7=Leuk>x`lU_)6EqG*U$+Y{qmA&v%tBa1# z?uo=X8&MaQg1Bf~`}+^{PSGmRMB6k{fO#~vO66uFE;bBXq2y>=eH%c+ow(&!lS6iP zHpC~|M{Z6Nv!U~Cy7|IOIDF~$N1Dk!2jNlO;Ab#3Nu!gOavdpqr1xZvy%myDs*F*m0}6XJG8Y#kp^NgZ{Wc{=AP zPD)o0SGsf}Gk_F~VuN8)q@rxK6~`?J?+oQ(IXVJUY=A`^Zz?LnHIVSykXd>Z*biaE zS8WIlArwCSlAUsg+&hR5xy$uJeBYXRyocQh+rF@s^4X9NYrO@j<7)DLe3WSy+5%$I zbL*apQKHjVGe1#Eo46?UQ$~gUH%qvU5H~6%6j)VywAnsb^~9J$_-)5b9Mb8R~N5gADA;utQ9ELyQX^d_dJCPMdR48H}` zHNP;axt;x?<<~Fv12votx+{#mC-x z?si3%|0sv+=PcXg=hI)nMqFuCmMR=Skx<%hG}2;AMgLaps&>(tJswhf9miFEv&7o8 zv*X7BJ&9ivuA;$pe%Z>(4aC%k(7Wt%T4AiILy59ieqyK%bZf-P_)izW=wGh9ll>ao z2HZ86h%&Fm=dt+)(#2Dc`r{&t(|;v7hbp^j&`_wZNI-Y~j(_Tx6b^MXBdzP>F; zArHTeWx_oZmEK!z_C)FDfagN2q{nJM)m=o7YF!>Zvo~;VsZLwu+;gRDZKj7XM&+x&Z} zGQZl$$Bp@xtF@uKwHH0J4esulpD=LqDt%kja>?(p=Sa&zK@{i$Qp@}W6-SSPf?jyG zyk)P>S&vAO4|`hK;=)2zn`{B^wvsWLH(8%NP4_G&vxZRhYanAZDe{xM;9)DB_y*lq zH_u>i(X>l??B+6P%Mi>(cZYB;&&vFnF$;cAB-wS79PCx+6`a$j&wUP;xiv{e&+X>YXHCM5biB zy(Gmww=TTCt=BjIekE+YWZY}y#M6P0K!Zzjk?76DTRo>{})8lEARA-u8Zihk(S> zQ0?9#=L0tOjyadz!rS(brSIMCdq(V_X@E`c)rho`6PtN;_K)eArzZT2>rx`(-nr4= zK3VjfJEU4t>gqV*QT_xgSAL8;jM_e9V9~=N8p|pJezEsh|Vg&V8df5H@XI`7u<1e2|c3z?)CkKru zxL=m6EIjkeQoM7s?bH|Z#gI*#1Ppg7bIfQgX08ms+O+msh%x@YsCBJxiQb8IC!_3^ zIDMyitHUdc^Ao3>xM)|{S%=g_UYB@UZrv2N?{vhgS6kBbGvl&@)oA5+%1SjF6Z-vK zI$~)L5Do>h>Nkk&G*M=Nlu1v>d8Nb=aoXXX8M^upNo3maQIadPMjF(DnYWm99JAkAnB-|dk>&?Yc0;?^wn>-_Dg;+CDdP*^>Fn-GxjdqCtm6L$uuT?^MlU1 znUlL}BdZBNe$*gK?=9O%>$8cu147oSOrr)f+Vl+0sRz5xn%&YC=%l9zhd=6xm=KXeN25Z9GL<=jr5vFTB&ILK^}=e#|K&uCJnuWtC0?WY*0UKS`y;4a?pgM?KF({9 zKa_3IN?d$#L9t$D z>(Vu2k-H>FwT*bt?x}5Ow*;&8!cLzdSx~KHk`oqUqaU z8nm`%Ffq|x*Xyd35^?mt9v9L-WA6yMZsqgod?^h18Toamo$vG1qYnlM2(eF(pU~nY ztNR)4&`s@q@!QXjl8j{3iMIdFkh&(~W&z^9pP!%Ky;^y|j&Pln8+N%=_c zo&#bIoO3yPGjewer@h5+{m1;6Yu(Q8M{af3(9N+cdZnKhwn$Et3aLpiR3P@F5$Kko${LpsoM< z_PQbwEix*7eR1Ta3Pqd1<=H288w`4KZn&mrr%>(pAcMx+n-DnXaR9OGp~R}fYb)W4 zV$;Ox(Bts6uX`OG9mb38sn<9Q2li>4;A4op7uBkUBmd0Rw-%9biyTtgR^4=guIxV5 z_wP+rwf_8*$3=2mhu`esyYqV7v|7v9L}OT~a@@5kc5qe3G}YWGPb)HAH?tQcpo+dl-gJ=YeEWtQRrxrBV7SGl=2&=B*Ghxq6P3f+C+7uPY8 zeba)0KES^J_vSHSJRyeFNmlWh^$tMV5oI?pL)ibaz~XBU+px_@~Wz2 zoJUZKB~9@oTWNMfnh@ZpU@{Ck=u7S!<`?`*>WpOG#YA|?FXo_F5^(X~0aMY5DFb)F z?Pr;p8eZx5%oWJOIJ0J@b_I~Y6Lt>GhJRHEuc+uWTIRrp4!55S%KZE7ro)ovTTPZ5Z@#xj_?*O> z)4H0%yk!eIu!`kn&@_mxUnBR{A(PJJC1q=>tRx#F6cBlyBOc3Qoh000PpE%L652^o zsF3F|4N~aKN>LGu67ty{gsUXPztsH}tT>1jJ4wE~h|QspvK-WM$r zVi$fJNICq_0Av{cz!5#B{(V3Z)68f za2Td#MW*%4C<^@?$jB2f8l@04X@zrU)6?1RKd78xC+jK9P1VhGa?w3uazM^g;7M$m z1PmV@yc1&ngNX(})1IgDmb2d#HB8XF>z+TmZ5vzclO2VQmg+lgv>z@EH}^xAot1wL z{b6{73Ab}|8x4i=w7gtj#s6ONS*;c{0=F1hJX z-=|exlXBd8+;aOfPY(z;=Cy*sM;^YW4rb+xLb~!47<6#Cyf;ILuR1uJwi7rd)#%L?Td({<>q%XwQ<{)p}z>wI{h&kH_4|&QGsg zwEE{K-tnIJyielk15rnd!>vzTy9*rRUQ}cS%h8s1Bsp*sD>>0-lBZjjY=>oKhr_8( z`>iZ^eEn*kc~Kl5ODi91ou_<|9=kuhge-g)x!`!;R8Lkv+rn~B!3Q|nGP;JnV>@|% z^HcVx^0zN)W2B0Ff_>+t`T@cX^`s+59J&2hS`y51et%4=Y&2u@)Y0w9xfVYQ%WCe7 zLjt0gE7@lD_KKZ>|fD);{5r~M41F}@BUj~;ZshYHTQThU(9k8u|Q*WOow&Wfyzflk_Oig zE=Y+vw$+7yO}87UnLO(8g|>)47`|y0=jj+(hh!Zs@+BSaJh=8X*Gd%^%wQWzI^#vV zB9t$P3DZSU!@Mo>;`J@Lsq1DpQbL9GBz|`1^KPo%JDC39%li5&YyGWh{P_F}_wL;# zp3FYa%wp%}sH-U}PSrI8iHX1Dlc&?1hN?`k}En$Mtt|*BgJW57l?OqbPL7m8&PU;YbUYE(wR>5X~=g zM>Z+Yaq|=3#Z5QZx+%~8JM$ps!VC-ed2y?Mf7Vs~doJlb=e`n7j4W^4R&ZPB z^TAer&$G_1PWIH7TuI z`b)j?&UAS&HVr12A z41!Qw@vIysdrtDlSt825l}CGAeP+BX`+N28^|eoimSolJa+>UUOcp#u_#a*aI`V;q z8Id?69#vX$PI2xQ1)-*X_Fwhf-RpF_O|M*1IZYRl!85Ek%J)p+MBJKh{8z2CN#*O# zH#n$i*nDxApgf1d?%x8fL4Qa6$&rMm>&Lf~ar3GrMu0yIf70jx_ZPUS08Z|^@Y=L| zgM;L0M?ia%VmoUU0gWH}O`HC6pg}LY2op`f@bD(EWo=DF{+#AeL`1|5xR;`JrIV(a z0Lm1zy54GJa>-6R6JM3}Omw}W`gbS?1O-WfRQplOI@$vQbE5HN+dcl+VcWhESxh0o zvK;c07w7Rv?y?=!J<@UQ888qy*%^NN z@DPT03wHiD5H|ula6<@WpsxkxK@4sB{$1hhPag_ePRiAuk|S04w5`IDxR zvyS%9q9MK&6P2raST#ycalGasGM+Ol^(z?GkT_1-@X9XMyPy~%jH?C3(1+=~ANrbY z;(t+O3RasP_AXHFy?FHA3XRv1nXUVD?v*$%tC~GeaQ&iUleVXzE{APGRaWy@JIC)+ zvS&BMXo8RPw!RgU8kLI)qgB5cZkxvwF!b{Ya)khycn~E$kTYfdlkvbJy;!#LBqVkk6;1x~y z7ngv-MCl(Q(m*LA$9(d)8dCrbAo{AXw6qip?>81+j=mUw3)U{R0g~LqHk3pzqD>Fc znd;6n&?7nNzP%`tiGT29a0BDXV3;K7(R=vQ806~rqGotLG_yWk$$-ZQ*$*BgdKoV- zid;K+G5~)CeI!{W`fcA~QcPIOdadjK zprMjWB|^7b1rBz0)3dV!z&--R>eR8LH8*4F`hmk}R|+<=xE(74z82JZ0Ut)?VlDz< z(|Bmk^&a&vktccJH5=}_EaJUQxk$en)P@E5G3i1_TaF?kR$h>{=KPWM53*BGJ zp4yYkCqOM|Wc8W>A&p|ZIE30d39rpqhrNymEOZTy1@uV&vC#h;;KQKLTlgCRr$+30 z>wOdU1EUBD1eoHrG0kcWcpl#-)_Xo{io4@ljiFi^Uxo))jc3vjpE4Ugxj-c znKO9jbB84|-+c2wbbzg3R8DV$y}}x(vFAks3mY}&|m4@_+qhN z(9Zd4wMhIi|Js_k&hzod9gkAtu@ym8@b7^$adN(cNc=5=u zxq<@!1Wsy!gb#%`&brR$G<`jG?UE}kgY(9uv;*trtwQXvF|ItrYwoKzA3YS%%hSeL zK~dn@6+qon^rC#fIL`!$s*RYT44En;y5WO z>3?1*4m}rF*FU5UL-0$n8zA5Ljvy`lLI~BVdDps{#^I)y-JE6ds@g-xU z10l`ts`Rl#76!knozx^klYNxRn=+;i8FtuNerozz>Hn?Bc_DJ2?s9*n;-JRa@>+AA zrDa}ar+5h)QSrO?dJE!6M-})q6rG_{EEpU;Kor2d5-WWgUOE3(53w z=4pjsVgSck@V|4Ds85CpMEuyRN5etcgQ-3zGkgO6!YRRVca8W_UU%~yrMYcutx|$5 z%F$~jVw(M>%S*zC#b0h^%({PCY*WYEqGnsL%M%I;lh(H>b9bNFh|r(UoIfG*`*7a~ zYU4A}^LrvAmy_vna5h{-B$VIMWIK|ER?--`xD+D5?MKx0_$F!p`I1ld@^#+1<(tfO zUt8OA=GY~}Qp9ThX}4bpI`we=6iu5>r}_EMk4^+%egFK|j2ZWFPKxXF(R7?&Y*yy` zE^`dQrS?ftk@P=eo_M(3+01d(v!}Rc@AGV5K~@1xMoyL}0W4K%>0`eKf8JV2-BH;8 z%kX+?sJ1}&ohM%a*LEJ8-*WYl$c>Xrb2QFGIT}p>L{x`pY4Yx>xLq){gM!j`g&v3 zr9q#wJd%<^e0)b_WxrPicBG_q^n5j^B7c#SZOM}Z`C8cOjTu7@39+@S*9OmwjYXyi zcsG3fs0_J?)&_^f>9H@ld#u228~=cf#s_d=?>yWxm0U}Yj_F59Km7SLhl}+rI|YG^ z%4yrdDyM}>zd0?-_~fi_k^5>0&GA%WdWLetVW!hY91Nk7S;5>~#Hw&`=n{AE9_<5) z>0%T#iMM@R=uwX}HF0EaKk~)7q21(7^1%n|t;)|IT1nXI$Ac8BPv7%cjQ;3=bF4eygK}d!ESN-;7=PO_1(!C z!)DR>)~heF_-F6C?gM=uAhv|`yf3!;Dol!x6(|LMM=qx3^V_YSpIJ^s4EoVl=p-ET zkkU=M!=xrP-n;vmhhQ)XxpWn7hT3huH12veyF0yFdnD_|?sE;|yqOQ( zCl8vbY~BA#x5z0sm?QPgGU~eLnddUDeuz2Y^{Qt2{i7~}DBtVcooBKhi)ZvD2S)q(38=||MMC>G zY1#JcMUUBF#Ne#3;2>pqTrp_$hCMJTNeyKbMK0?~qX;Eq`$$WF5eNwEHOowpK4+ei zcJtT5vjiZznfQI(3AXTBhO*TPTWv7NQYaxPu$6^BfS#t2g>W^YqRF}I*WG;S=45S+|PKXdy)G2#U9 ze-Ib_|L~)j$mC{3vVy_%IXXBHK^2iuGB!3A)J}u`WA^^OlzQLi<7b|7OF<$4^kYmQ z0+yB*&41?rFEV_G8X{u24jbB6+w;4eN^21L?+%iqdkWs`ukb-#u_rLu1%}CfD88Xwx~tKfjeoNzn@D&xWlsf37*UzF67S6;1p< zFA;i9s;aL1czg{^$RDPS2qE~%oz`cEr$2vg8{hA2mZM|D(X2|WDv7F=if0y{Jqn_S z_qEMjVwD6$*-qMBWw9 z^8pmy7-_qDQxgdKA5sZ*>TSMO5D{?!5*{#SPNS_)&fW2|v23ksga+=mBGnHs^b!Lp z4<0`3Ia9S?I#oti)~DFz%loS2po}r!@xuQD$G9&$HuaXMK~2|rL{jpF>y66AMMgn5 zejkzPF*r^aR@DFY@sZCp`UBs;AH3EpL!?j#$)=NmdofeIeJ2aCy-s?F!uw)c-t3{< zo!P^sTJqP&l9c^7Z{EDRW&pcsOtq4oZM&+yG-;p-)aT*8wZ!#?`(WK$mg8p|z@=^IJQExNy@@(pr!R51;fB!s{ z92dmS?OYkCYs7(y8rk6Q|DIxTsMdGEV!!hC))01X|54-dRNmnF+EDX?_-F-zKWl{5 zsU)>|j;Z8ONZ*%HPfJeLktF@wIJUY!=NJveN)KnVmwokcg5N{k5+6@(A;`P?PrlL) z4(C5{rKUcA>PO7(qE~eS`_HEA?p_#rU#1c$2FDh3xeKO!Ikp!p6oW z#feyOjlCrw2J3I{Ug9KcF?IN>L7n<4Eq9h)&w-jwzau$t8wHQcF_WvO=uNy~CEl5K zd2adlCLP88Egy2-O^AxrkCw>~(i1oTLGjYknfYmt9nxm+zfoQ19e&h;3)tq3SE<9N zSHc&%0Cn$@kdo@q+$Cck)%a~XWcpI)oofvOinngRx2??zc!xQig756UcCpQm4O$HIABMBgfO~)+oGzag_x+jeW!M1 zfpLZXOKUpO8_$!nvfL(neq63BM0>pUg@e(pa|Z(*_r#Dg#Q2`ffNBBwx~FvNy@ag$&44fO zU2=kyQ6k*v}sF{lWDng-<*IiXg(b?PJx^MXhG0FrN(rj06kFQPjHb@+p@VKsv1Yk*|0d zUkD13JqfQqH)8+TNBZQ?m)oquka||SZEGX{=I)Kl`QA9TV#_wPHP>BRAwE0b!!pwzpwkVPK|ACpQ_eCEOnre9Zoc%TVEZj z;;=ljlwi5_``eiGNcajrAB&E5k;Cc>N`VvRURv+~OB$9Cf)Nr*MmsRhzj0hxPr9M2 zhzAUtX9{cFH`%^;^mU(&GwpR`g_bvwooR)g5(J$6BCpGY(eg1=t+i%1 z)2VF(QaJOrC*PA-iOM#C(N|N!fCTWG$Y#j4nvTlrM+bKs2J;2raxzRpMXJLCEh-8H zO&A=L?C*QDnbLHTC#fm`=Ajln{H`tdRBqxiWjy*=m>mVHnci){(Y#R^cvK9Sq~~|k zaUxxjb6_Y6TgZP78i3NBfE7@n@Wp2dqrxdaAZ{OY?09na^tHR)BoWW&25o-g!)fNxubiI3I zes&B3w}pfrY&J2gE%AV@;bEe3g=|8Da;_&YYC)># zE)qgAdFO$fd#q}ag$y+ow--Q|u(2Nple~8WvFl2f{I?IX)ETy%zx&iBJuwAzmj1)U z7M#r>Vuk#HcY51U9!_PA!6Jww6E|@c7HfIT;Y+61>Tl9AS^_gjg7&^oBM=1u?Yk=` zw=J}3gdOPqbH(_jlM090-F((`6KU1_ZvAp^@NkFCjUx5SEGRtWXgd~9V+Dd`RxTWg z3*P3C&wrt)h<_FtJC(w{q5u44yxe_lZYCSUM5;8>tqh{CN%_v|b`;!SP$I&K!gia*8`68{_qkXEh29+ zU*nkR;U^A`2eDlCY+98>HSMt7LJ4}>c=DS?pqLtnltVuiGEDxZr_o6 z3K)h;*Uew1LpLaR7o@+}h>tCDv?0tC$EE1)zxmChvYxNkT>BiPG4#Ci_c-7L;7Gtf z{M&<24g%2C@Oo;!O*_#u06#+YTSH^rdQ9^8nN-OO`YOtBeN1V zZzGu!OA?kUC*>%$A^yt@UHhbNx3AnVf)gK04kh(K}yfhstgOlcBHfKClytv*9A ztaKrYT^c;2D~O?9#tSAx&80MRyaQbcCYz3T-K;@@YGiUz6$=E=+T?i(wQ=MZ8b1})+xI;I z?yG+tn(ZBJ?QcM7QY|%7pQV(S{7WeWEiRBmpv3kJx?If6fb?OI z&D=+m6Mi=MeOg^W4oCsn6l58k*y$~R+g%4Fuz%|iSZ;-2@5ya|_z-g@Ohh7rL~t3;Yv3K%JoU zH4#Q}JP0yTP*UoGmQs-cTtWQmKD;y({@{@QQR_+xvQzWkBP5jMmJp~4ji8kN1d+P>x29?AX*I3)j zBPdQ18_Pi8bTUl~MY0Zoqu1Rn>!1%}XL&&Q-wV9}1D6K8n*!+Q3UyP^Z2MJ!&2pr7 z1!2tUdAuD96n;ptf((yFFU$f64fUw8!#z`H0F}PCm<{UjOTf8jo~jK5sX-c0-`zOh z)u4W`;=L;#26I0OA}N!TlTf!D7}$jDHas1`*a*z%VXd`11XeUq$iHPhOaP&jsaj(Z zDEt#$M_vZV6wIJ)0fWZoaDbUBRI2=h*h6F7XkD-{`sm2XYB+i5Mxv+@B zgMz*n1gidl$AUA)zcmlsdZ?KGD)4jIfRZ3QHFROTQ#kid?E;>3eMKJ@tkF@} z}RH84OB z3xkSCeFK~$f&{dlq`pv`UA98l!EP7IBWN!Wh zBojDap)9aeT1@`)OLwKDOl;`FMIiI^q}Gn^&zrcoZY@%H7;(y=z(63za187^u*&KtCKf*OoP!lk`8T!+(jyzs4t zhaIWvoF1~G32>DD(NRaB^J|hJ(S~3!=|nwGzJd3klk}%WjsT)m(gbH_e*XE37ZmvT z>l#>4P^znXG0a9s_Z_g0U{wp0GK23@paHCziTNEY!K1A~h5W=fZeMhJ}T@renbw98=g{B?YdugH0_s)^XTIuJltdd@8l)&;0U&@&YW z2Zu>MQRd_TD#dqxd#JF&Vgt|sLwJ~h7hHSZunqF%U@60*0mi|Cp_oLFn#A1<6=<0D ze})+B2_CiZn<^4?phRkdZXJ9vHaYq8+2AfCC1<$i0Fpb~nUIiBb^s4qMn(%A>_8VM zs~?FniI13sh{#{O4Jv>Yz)k~|OgJ!n>J9|timjcU;he9pFA}0)QIy1uXy;7e zH~(?I*-v1X)f;Ywpx#sm@gnzwtuzpb=7JISs{8{2O27X3p^k8b_5ae!t%1TlvKYe=w?7waF7dlvLFxishb6a5X^>iiP@28Vu&LjPwI#~ zMF1!CA_5D)RMoJ_WorSN!hSq^Q>s^hX#v>FY~PnSo`7})+z8x%dOT<~jE{{mGBGL5 zfjI}7!BYzhdGoIcFJJoj$h~3VhDR>K-2m7RbRPzVCPjU4j=cDJVxZ6D+7_Xx2Qv*K zGF8wE_&j)+g*^{whMxsecOv8BK#W=@OU^zXX-*NdAho7;w9moF$Owv>l}ro_$jVtM z-z>=~AUkGDJ-5lfL7+oqGW7n@JAgESn>LJwGl-D&4_`Cyv?OkEJG*j_5<*&rO%x|+ zToeh`^3O=Rcq&2<^kqP;(y-WR8R-=k@WCPhu!tJe3Ds!YV8#oDiPd}37@qv~Oh}Z4 z(!zCsh0BBwAh7ZWL%5)1AN4*Y-_KTW_m=|a~1>{C{)19 zbt5)L(BUq9k02a_)(i)Lzzt04-T(^++{%CE7=)>z{WYm2=O#JG2tf?={j&se7_7YO zPXSx?bz*{a9ON?JqXvpd>DK|dTsRt;tw3UP=0E~49kgS=yf#ZQ)`)~7!ogS4zR=B>Riyfpi0B7~aRr(V0 zeab^&MS+6G45-ITJcL~dz#+lhH`pNi4l4aD{??EMidL4~*4`!{2UN+WW5VF$8gWqC zDJd>?+Wk#^=496GW3KD!KHR`P>CrVR3;lC9#KfX6)B@zfwZH@SVk@fMd&Jo37!C`*VK#;2?@D-@a_c& z5g3jNG^-)q_X2&^spORA>}$|MN{EYtO%(jsogozQ@bJJ*yZ|k4F#_u;+_o50a4hi5 ztRLvb3&p|XfHAPd#>R#(L;ah7sPM@l0FJ=f!+?m(M?O5=-q|VCtXKlVD=Q-PhSxjQ z8ZS=t2%1tTSaG1v;zE|@8hEu=U(mC^LFBT^o+uH@&HJdQH z+uPgi_978?nb;8_h#Js^5x))2(a696skwF*r@)y5^h$Q}#DtDH$l#>X1Q5=Oii!mb zOb}uZg_eKLr|K8Fs9^$R;j|J=%nr^HBRM%4;#p8?<35{&2v?9hRsRbv2gDwvglb_M z)kiBO00@$lRp|oq=KF|S(CUi3W(ZaSE8v`<28*<`aNa^Lh6+~A@{9QBTMtcUT$+Uu zn7)o$ebZppOXWB{tJ-0Qvm*5HkZ~NsYk_5R?)kJB-S~AW-c7XIBq)NkwT@a;x15TB z<&6~R{2L}AY%UofN&@{25cz1vSHDk^z^)!YwZIk=YXSwIZ;kE=XEWAyI}oLfo+229 zmj@@}B`11Ydpm?0GUZNJW&kk-$HGP=Lg;TC6v2#TjRV+-mL~yjMEPh$Mqib{7$HOQ z3WqB*V9ALP+D#rw=htQb_7s|q3}&Dm_ZH!nmC}=P9o2Za6T+f?EgOZAm8Fw<5O^`X zBXrruan6>r3zKEmc)yMl9LqBZwYHa3&etdnOEnoS&!2(*ckG4Q8_G}O*0`Jh)fjwo zpf{(H<+Kq%g!c*1v>R$e-egPey~qrF3U9sc(=cH$kRhvCebEY7)eH>py1Hb}uj%qrYn`Hjm*zCK^_O-l}CVVB4LIs2i2`=--=rfX6-=pjOLG` z)>J6^dbpeI8$Vj407S%S$O5~{D1?*ozh>WebO$M65#YC)~%y<_C%e9kv@kc(s z3KXzso7?8*T79YtU!0-u+cQo~oP~Px2`W%|5CRYds0*CSJmCHxKtREK`84AIRu#1q zv{SS*W@D2gM>C!fM(F50s_y?}dL6l@Xr&|FLQ$aSZ5E(|Ak_wNe-$;h4#cHPX^y{F zqGW8HM+=i$j*ygBVC6%S86Zs`W3N*Z66Tl3(au&2m>6UUVcgF2w#v+Y3|EJYbBPe-pgT z%KAWxk&q4pu;Ne#F0ZMv2KSz0{qA0c#!CQ3tWK{zxLVWTP8q~Ir)I*#RAsrw3H7#$ zD=*%=txcf>J-|sV2aA6nVA?lsvRUdW8vSSkat`~5B9Brst~ai)L&i%3NtObloHF2{ zAOcaas*tG_1fp6|oNELq3y?&Isez^~S>*$*Ps6HqQFGlk=w~4HJ}}4tU@xFuye7OJ zIdw1%Wuu7@R4?dRfHq`3d*t|swhj>%8 zwOxp!m~8_s5nIQU0(INP0S9=hJC&Z9(Ld~Cf{hat{K-JKvIlsKINh z+62Hk;OJ)FPx=_c$@q&v$m1}g8NHE9Rr?!x4fC?+9)4of^VRtb za#txY&D$9niLtJY*#-~4JH!;@u1l?3V26T@gFjx_<3~K~ci|Y9dg((QC)V7v%gB#` zh88GQjH_7eC;L&Jp6;eY@74D#1U&eta`27U-F zjkqN8v&R4UOpjXp9rClR^UsWJajf=@W^a7SnG|?s){q~5T>D))i{iKD2EiVkkqO_NJJBeSY9iCzG-$U^x*wbgRMettZ5t+Leguq@Gp*_l;2;s2yp{k zE%Fa(`CvP}bkkURVF=nhO@lMbQGd;S1+G5bqOR2tRMNQK7uQKKh&T`Cm>j-uFaybF zfkDMa42xU%eix>fv2yvU3vw#$E^ykFa7`m0?#tRq*%whkhHUe$;~D49Umk1U9`9t) zwjuVNZ|hMb(q-@9An$8+2m47r-9+}QO^POV8_L1;PhxkLzZ7EC+rRnPZ>&5BzSpt#6gy1qx3wc)O;55zIdi%O_luP*3 z?W>DIVcl)+k2}_q#czInN>p)WJTDN1fB@KfoX?C@ZNUo^XlW@mg!BjoZRM~{yFZtw z@!b264rMZB_1Ym>`iB1ak8svzQO!5*em(8)Yc}h_&%45*53l^_KVEq)$(8?!Ufs@0 zti2a@_;rCe%fY>H8rk>j#|CvI_g5zBc1}F39n%_u$!37rqYTo;kL|YlGcs<_r1(M7 zUM^$JJ^cWLRqkiRMG-NRQBW8fY8!GRtbcv-Z);P`ydJ>$?K8n93M~b(dEFH9U8!N9 zIVLJvC(bC;IlCOcpJ7%tuEy@tjk%AV_JxXfQWMq{+P`^%31z?VFnXbVF$Illx+$U_ ze?qTDr-_qo0Ijd=N>>Xm~uc^LA257O0xk1?d8pH3aHng zUs^`shhm*?9nA%U<9b&I*HO_{#|JVpvezz4o?JS$KmEp+rW=F)<1vB%>f1iYo~~(J z4wCVx9(ifHTMst?3A=^FJFGkfHdwRwldbLhWirhl($G|DYvogIpz6-g&w0UlYvD!+ z%8Sv$j^k_VHZkR&=^ihmwo@|R1*x#JIo8J!w@4Vv-#M-dJDBv`cRTGfxT2-9ypji3K_CWz&2!L6obT7 z&gFItvskDWLnSRb&N&E42i{z>9LD${+^lwYVu~g5Et$({qb2BVHI6<6wlsCTl@_Il zl2CWI>18aLbFxiIQ_f=UWo429rFqpTl{~ zB^SJCJc^MpG|R?)8`Frq-+e@e!BHISaby^kceiC=4M%->T$1h)M9}`cmjX%Y z8)^hV>Fd*97r-`$9Fot>aRl+vi04hQST79;*Z%t25|yk|k|tRPP{y0OE*{%UdjO*t z7#zN+_BnZygL19Z6HjQtlfm=)NaAvi`6wj}XDS1nLun)ZQB?n!A6k&#wwieBef232 zh;#07A!xh1s;l)rEC7lnPV6zX5nmh(xQIIy&ld%&=HWJY^~3FDySZTIye2p2=P-ZD zr$F(y`+aoW6YEXThM<3f*_SII2XN~L4RLY9pa|z%wd-@|rAJ0M^qW(V6-wFttnn*Y z^FE2(Q!mh-F`GWAqXp;OI~~F|??Qj(VpA)Cn6)&%?U>Tn-&^wMBi)wcLRita$%j{u zKyXP;04e^JBPme_prx?G$X|CO@FEI~zfdyXx@ClP>v(v+@2;BQnP~G7Q=v=jr zDzL0Z&5rY32mK&66*dY=HQ>}tLJPJgs$c)9rXfeL_+=epCjfsB)>h1cOcn7{FW9m* zwt{Br0t2fZp_3~=V>o#h8C>u94?J49&PN7NA8#}+BE!cQD=>mCL{PuUPAcTrJIdLHZ69GFu?A`6X+QnIW&3w zu|ym`sc>VRsXWv^D;a#t-9WTGMRDB21%# zb)q>@&~IpAkr>dxkj3E%CgC&yp@UU=kb$VGg9>ym4N?=K6f_YGa8lpmiQ7OedYt!Z z2R@buB$Mx02O{5E&rmse6`Dt2{q?+Ff#Nu{Bp-yuE7Mgh-@qOh$=yHRJ>?LAus<^# zvT*Jvx5Nvr9o#J@cIIMTu_)iaMkQv$<`&;x@^5+aU~Kg&@Ibc#Nd9aakT^n+?u_Wp z1`LYN%1sG}cg1906lE?oWa6p{=GAAh0p|IU&HPWdjg$8aSo&R3Cr}=E4@@nLA)%hz zfU*fU__=bB@%80LSR_EV+}SZVw4}+^o%TKF=}-QK=zZ+5B_>`axmY7!-G(d|hVkV1 z0KmxbpU;<=Ed!_Y>ry~OPr@Wi?o))u?TYWE$nEJxg**tVW9|hbw_JL9Ju3nnB?~r> zwsuEJfDs$N>iBb2)eOMjg6|yot!zA2dW8?9tgQap6#867=71=iL!L!p8BzkF<#UkS zY<^UB@^#X3P0Zw^WVwIAWN#^R)CRZq3jkBoj}jOA9(SqxOjM$(8ron)3pc9rnMsiVOCEA@n_Q| z(nBxGv6!o75rnnf}I? zFXwQ-KK4vn)BNJ_`Ey1$`RmPSsS37ym;a zCS=<|-!?cXsOBlE5R5R8IU6icxx9fuX0(aaxQWX9Wy4-Fntu5eI!YEnhTKoHy$`e6ndgq1mt=tI*6&G=tp!nNj$}Ie zd%w7tu5YWmyTtwAg5A=VL6OdCeZy_uBs{%+;*ak<+*39-_UD%y4qn_R8@e?sSPNL0 zx8>}mQ>9m*#hFLWRcfi4j+HkYB2>f-3Bn&77_Gp;mb>Y~@lW zRv!2GApb48Hz7)v4j}%#gGLY zf)r`mBIF`}Lp!riP)7oJrvs=Jb^$Pe+701^4!sYcl}t+&`M$kF)BNbwPlU6c-;H{|xg{%}Ys`Xsu%xpzNSfs% z8mzy!FqPqoEa*Q(?sT37G{InNQSqzlbU2p!H3!FsuFJ!DL2V%C9~Tp2tRcSY`|6du zj*bf70m2vdl=nO1e)=}L=IhV=ex`YaqY<^Nlf>jPK&979V9J=s=z(r4>I-HT8gcu# z$OVi4LmgVApkrb}RV86=zMw6AE=5C{gSbTCVN4aK@!xw2uf*!|$FO|gnm#QQ;Luw{ zd;jn0h%}*C@g42WbzKiAWw|JLiF&`Z)_-ot@ODAg|M>_$G&4DAvq@^68p7m-cxA7N?Thn2EgPkQ|lW!jkfcs z!vf_Y{>pk{d8i{GO~@9xr0R#^r` zJubOKIQ6Z3@#(?}VDX_wj*pIkhYMX3$gz%qOE7erCdpp-Wa28(P^S6Bd_>UeJ{-jf z5M&Xz{r!86ZW@n9=h72^-B`5x>+w9tJ=~wSKS+k!(t9Us<{=?Ri;KChKY><1g)4)Q z5I?I)$x?y~Nmp^y`%0xuo8{2}{ig}M8_|wAB9(Z0Nk%rGQ-s7#b}V-s>aW0?;Yx$3 zDeP_AI@J+^WwGmy{Rv}L{-WY`TXr(v-@b(|F8WwwCJoD@KlQCHT}x$iL&&&k zkZ#txIg`pVU*mYMR+MEFEN2Jl=3ZV~$DI{DlZ%Y^V;y2%Gf3|oO-#q%r?^S2OV0l$ z&izmC0CfLO%~RaD`6@LTePH+D8k)Mp&0B7U3H)DVe+^_l#rDC|v;2wJLcu!U0vyl) zZ$9LDt-%>UEb0gh#?Ow+;-Vh~EPpe{ zQ!>JK$+*_&zSf}g+T&o6`B9p_WDF&GK}vkBq`Pn3j}`47v)wEWc&P_jyC@tYgc{@>^SR1HmyKpY-GPA&j_1C1_l1kY7BXFj|HFpMK;-Qm%QN0)D* zq((<`=u}z6Bb_57lw3GDIl1{An0T%4wy^}7*_Tl{fE`?L%?H`2*jaHM_TGZo?ajHL zOG6vN9&W?~lmZ?se%p+k?ub@@4goe{7ndle#sez1wpte&@$J9kY||UB7{`eSd6lS$ z@AjY36Ayqz4xmBIeIU*c0#>^xe-^Yf-leBQgR0k_KS34Fmc!laad!IsXd6*aQ4A%> z%E!XSjI1#m`w9{m;tC9e2V|m%dQ`R1fdJfsz6TOD9>>}1=9Qw&`5LXyTDX@k;cOMD z^k@fa9U%NK(=|NpbmJ3K=ee!zYmk<9M<%uTU|XMyD-#^Je^Fx6eeGJJ1X~)!6mD*C zc#7k1?FT(EUx+TyG*9u8&tD)l6J&l1-j@66_ZB}Wk-px7fwZoH#z*obbAP%qy9`7T z`JSip_gZ%}0h_##(w^6nP=oipooM{gZG2AJUql>GWoQ??{^M^kDc2W{7kIqU`8l!5 z{$T5%y4p(CbAOJ=^YmUASImlhME}3Y5yk=_uSHEKwHbh-(gD51{GN%Am@JG>z8I#54J;CD~-G`EK5L!7(q4yddGo{Mb}q%THtRoIs|w@}OsAhZR=5Ij5@ zR?C~cVr8#kSH^P)V7~uVl_uHC{VyOt z>H6X52Ay5*pTLIzk;+%Nh};s^RJ4?)HFK9AotAy!lBU=7d<7mXfd+ry5XxbV4(4^k zOBs0L;NR27QZ{7?dz0@Tr=?~$AltV>Y(+rH#2D*k~Vf{czf%)WvH+Rs#~qhI#l z@-VBT$GGD3bbS@jZ%F_{0VW<7%yht<@>}gO@OCyztq}c%QtZ=4#@C{0&HhjV#LB=& z`Q%pzQJpc3lnnRkHzpl>{y2l2n*f7Y7^9Df2S3f$kv z@F!I+_6sXxA1a0OFTuhvz;H)Mb0gn`BL)4VL|0ZOqr^%KyIR)0(2x51lCu-OzUZ(T z8F+5=>5d57TqCFzqn+^sw5)c0^;mb#+s4Y-S#{^d{Kl^|o-5_~(md!5f3~+dfLAwk z#x+c4_G zdW94(Fwe^GXO`yY-M5T0Gz4abyGZ6%3tL6Kd$!sLqd8L2O3y-F)@yy3RuGqXc{fzq z%LmD#T>iByDN**8FwrmK_(w?h^@dr;xsR1=O}da2T}<)N#MTeJYdCws_!tzI!pJuK zjj*1gOp3u=!HTSZ+IjTJr+G1ieB=+1?G;bKhEzM4i(GJ-sKjg002QFog{xFSx}K8; zH6L>x_Y|$MDyv+-Qzu{o3D@KS@xM_!iK3$QUVTI{UM9Biiy*x`LAEA;t9!bu^Qq%O6F23lI>_hVz* zrkt}A7M#F(3RtvF*G4Ng*7pqOP2ep1;(1wSeujkr7_1@3pDlh5*M&Eqjs}5vxW~p1 z&w;;D;)*xNHIm-KPr?S>`W+||m7i8hn4DI>`{8k-(nRK5N3+*T_Z@^`V|%_d^g%IQ zCL^0Ulzeb>vcV0oK_I(`%X#<#^Egc-PdO)bgqp z=^8UN*USgJYSst5chvWe`MI(U{d-CS1~(iRr04~_R8B$u?Zn` znn)8>NNz1b0#l6!6L$rNvoOwROXr_w%!*YT4h($6%}rBb@+Xna8NA~~$BSdN_6^tO zryAOnG84BI%I-=%bpH_~_g+r-Q*kmxki$7Y(XUJJ+%CHA7rn=?JqHV?+;q2oHeZvE zRf`6JD;|Ee0Ge6W+06NVszsp@U$nVTGxM#6tn1+DtG$6`eZSH7mVSPr|Jc7_XtxZ8 z#eQ?svI!dgJY;gkyYF^4OQYn@%i6~EmO;fT#V`1s78cK>+OBKySK2Q#MKmeqMU3N@ zMpPCSX5vw6dRsCuFb@@-5;gJ>mj0Px#sDY!daFm581`((D{o`y!vgc7rnI@m( z-ZfZJ&qppx!T|^E(hAL--t21OOFoky0Ldpvpc(96ysvS9o zB5ZZ6d>YuOKf&bZ&S%o078S96T26DbH~3Dngj+1c;CC-&gLI#NK=_*@$S}-G_PIJ$ zV_vAIt#zKNcYHL^nO&QbvOCofQZC)z@D-vX&!wCf5%uaPe^T6O9XLZYM$r6@Kk-yh z@~#&??lgsU3Etmg>Vde&;m$+wufo;_6?1Giwki#z)L0HjbzEVuyrmoT(JyM6`ZcVk zWz-+~$qg}l8C)S8C16MB7i`WwnR)+pwwMWCDUe)f7bTz2f0!fPSWb>AL&l@(2R`iiYB0hbDPl5H(UIkegiJkDI7+eA0B)Qg!oVwE5Tx838>lHcvjL5JZwj zadIS-g*IzC>47VqWmFbnOC7l?QL|~Mx2Em$)B@s%&3aqoVG!wzW=Fsw#qV1CmIpkN ziwq3G-rd=G4=}s-;KESK!;gPR;~yCgL*gqhC`_oF<44SRfwicY_vPumw0cUSO9`hE z=*>58?o=4}ufy^3mvb*{up|-Er*W2+os{4%lw^w8X~d;i{XRO{vQyHCDeyG-Ul<}n|FSl?FJ{}7{R`*_67$$fUXd$`B*1$EAu z;}LNt5!>`wOaRQ)~m8J`_u6Cx_wN{z@=-IO26=|?f+vFUuvfn&_C&zFU4jb0k&Mr6s# zh71QUY0$#u#7^rA&yFQ&(CcPziJ^g_gR?^G?11|>_t3`lRe?;^{f$zIWuu0$nL6GO z+B2Y}T0Pw5i13hVz|$i~=ey;W;o`Ut$AxVO&%PpBYKM6--pukTVV|?#l8(RQW(DKW zv+vB# zYNXx@a@Hq_qPI-2z574w;Ve{XW{8PGkevM{3k~h5flgptdq&s9FRK3Yt9nDahHM@T zy3i#(eKN|H8;X9LDCKS;&U8lPQS^9l$$#^FfCw|7!gOl0A!u&7!SAb|inXdgbBS{r zu9@?esPB05qT&?)yw%^d?!}Tzf8$1)nJYc|2<+Cc_%YsWnr}kgX4~P z;zlRyvf~g&X$s7)AdL?H;zrp|*wU|L_0j*0O8{@{0s5`3v<>g0dKJ2w91&pSg zx}u*)N6SFV3*v7o!Quxz4deujryJpFk4m4^%_}4Y@9bL6e*Z3NI=YM(bT8HV2CEV>RQz2!xK~c=_ zz-BGwPGJ_WlzmSw4^saji0IAzw?=WP{fS*PgUm9sW3SVwWrvMImxPF^>J3TO{Ocx* zXk`3v%wLV3+eGXchTMTeMDBk)YtSDQV^zL?tJg;|K%Z}Du*~T4+P8hiUS3*!vIV?Y z$sRcEm%Z`V#4_AC4d3BM+BY z3{q4=IC*Kw{(Bz(bxL2@Ob{R}-9fpzY+K2#^PPVvPmOQ_y+1s;$5mpusi?GpLj#7S>d0(p5V0)Oj!@&0BPNl=B54N{P})3b93ag8l>hB2z@`(Nv7Zip5esbY#l#!nx9%nr$`E*UA z_1{JHAi0h_&1>Es3!|EyD101t;oo&J@BKoH_@CQLV3AV&yU?q6Ko#Krdl9r&<_Q|K z&;Ra=1NIu@-&15*eYkTrpg)?eM4O*NA?oj7|7c$C-s$xEb3PVmt^0^@l=BN-WYzwk zk+_kFw@wDho4+$Fc*Cvqn0w}YhW`74|M__T^#r&$DQ2EHg2-~-MY^5)E-o(6_MHIq z8=xz&gQh0M007AwtbcYuswCpxFMxqVAmG-zRZuY#2hnU>=!n%0-Kd^_2BL=^ zAoU(+R{~UqaR5l_Poa%yj0}$%KC`c~#UCsa&Fdt|=K(&a0 znubOU+HS&=K`IKa+TV5OAg`#Ag4^JNO~k#NKO@AA7R)MpKCw7Ft*w@zw)GPTEQR>A@giL^0 z|E`q*$lE{P``BmxE|WlWuMD0chX{-G)zqcbRcMnP#H&nwEq=fO-_U;?x8;60wQ`cq z1ht@*c+o1f4JPf)SataQ&E)+mzvWc^sDnDaJCJdJA){0d(!HIaZ(K5T^@RurUsPpC zU|^rA2yf^X(8Fnsi~oK6GXIJ>V3l!=MeJmGOzMDv!)i`SK;ZM+1g~Ne#F8VY%1s7= zFxscGnpQbcZT-$@zyXq^5>*ue<1iHV@v;;4tK%x=)NiQDscjwmiu(@v zEYVQ%j^YHJG+Y=!8MM-_?^j_mphGHG+9P+Mq+{v(}X1oPCqcyz+EEc)KpI1dJF1~Wo2axVzbrN)qz}X zn#63%5yFqOAh`!Tn^0bxT(u&u0|Ft1+uLsz48puChkP^6`r=;!@N zbt25A z_n}8oYHBJFhP&4GAn_lfBQ0-bRlMLdTMro~LAF^ZU|?~Ckz`o=>Zt)2RyvHvO!O9} zP+@WR53w1UR-<5DZwCAXhlM^mA<+_{^#`-n?e~H_eHh3oQAcHX_HQgK0WBrcU+v}Z z??jRm_w5!Tn=bP-D6G5YC1X5^=cW5pJAyxF>m>=-OL?P;{01?zc?Q&f%(ldZY{A|> znLa%seO{h8DkwWg6>xnQynK*ufEZ@t%HDJF17NCjwTbx~+2C$u)1A`Ia?j8r=&pr- z5W9Jjy0MlYS5AFWbh(1s7gpZhbd&W@jDfv(qoyL-%v9N&ka!3t$?`O?-FBDxZXLlA1`f(LS{b8i47w4{h64Dq1ZbdN8W2 zt!te#i2Urbzj(i?NR81?gZ&SfG%V%;%P!j5iLh?cT;mtV@u*XIQOc7Bu=*~$mfscOYSwv7^-kJ~!iuc1$k-PvMDdsC%2rFdUB!(M zcmrLmrlfDSe!?(fMmlss0SqXe{@(_NO+}p0zq-|6zG8InF&5$29>*1nF&1&6 zmYevn|A8s6vQ^1Mgri@jM$J5HwU04#wJ#KU>(Pg14mb$*^d%aLB)YqpXCHC#mx2K=6HLi0sW!^_4H-Qd2>>l@^18}kNAC^HMj0MU}dkO&y zv-hiR?(R}Npw&QnAX`pU{sfYhQWN^EzzOFV$Ci^f5n&M`B_-{Dk-qxIpIx(@ z;=F9*tBK%~!DWf#2JsqcmT`H{HN}pQxn%mG>;Z>^jb}9iKm*}a+2u&Hh^~COq_Qjc zOk3->`_fvF#6*tuI>19%&8zfVG59RPGU0u!cR-AT&AbZSto<6v{mj*37f8Ra_QV$R$t7PF8HGeo`c8vf0X*=;{T&1LB`l^+x z#6-7quq_EO1uU=k<DP?X-5t5mg$8H!p1Og$9?}bh7hn^Y$)0g$QKb-Wb2570j7ak+wYvlMs^l@jY^IZuL zf-}GMwCTKscydP_HmQ6D92SxjNsY#FCnNq`oF~FH6KX2HYYPJz zyX@bQQ49m%lNEY)n0=W_aoj|*B`g^6j<0>7Z7zrhom6E?(D52-` F{{dVD$#eh! literal 0 HcmV?d00001 diff --git a/event-driven-architecture/etc/eda.ucls b/event-driven-architecture/etc/eda.ucls new file mode 100644 index 000000000..4ddb8b20c --- /dev/null +++ b/event-driven-architecture/etc/eda.ucls @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/event-driven-architecture/index.md b/event-driven-architecture/index.md index 40d84004d..6c2ae99c6 100644 --- a/event-driven-architecture/index.md +++ b/event-driven-architecture/index.md @@ -6,7 +6,7 @@ permalink: /patterns/event-driven-architecture **Intent:** Send and notify state changes of your objects to other applications using an Event-driven Architecture. -![alt text](./etc/class_diagram.png "Event Driven Architecture") +![alt text](./etc/eda.png "Event Driven Architecture") **Applicability:** Use an Event-driven architecture when From 0f75a0e23961d3528c716874d74615b88230201f Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Sun, 3 Jan 2016 00:52:24 +0000 Subject: [PATCH 18/21] Revert "Add class diagram for #113 and to be included in PR #299" This reverts commit 0c062d3f55b99dbceeec069fee804c7a32c8a5b1. --- .../etc/class_diagram.png | Bin 0 -> 38232 bytes event-driven-architecture/etc/eda.png | Bin 80265 -> 0 bytes event-driven-architecture/etc/eda.ucls | 196 ------------------ event-driven-architecture/index.md | 2 +- 4 files changed, 1 insertion(+), 197 deletions(-) create mode 100644 event-driven-architecture/etc/class_diagram.png delete mode 100644 event-driven-architecture/etc/eda.png delete mode 100644 event-driven-architecture/etc/eda.ucls diff --git a/event-driven-architecture/etc/class_diagram.png b/event-driven-architecture/etc/class_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..69560e1f4b80d0d95dc5387189cc753e31d66f65 GIT binary patch literal 38232 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 XEPJa~ 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 F{{dVD$#eh! diff --git a/event-driven-architecture/etc/eda.ucls b/event-driven-architecture/etc/eda.ucls deleted file mode 100644 index 4ddb8b20c..000000000 --- a/event-driven-architecture/etc/eda.ucls +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/event-driven-architecture/index.md b/event-driven-architecture/index.md index 6c2ae99c6..40d84004d 100644 --- a/event-driven-architecture/index.md +++ b/event-driven-architecture/index.md @@ -6,7 +6,7 @@ permalink: /patterns/event-driven-architecture **Intent:** Send and notify state changes of your objects to other applications using an Event-driven Architecture. -![alt text](./etc/eda.png "Event Driven Architecture") +![alt text](./etc/class_diagram.png "Event Driven Architecture") **Applicability:** Use an Event-driven architecture when From 03f0a2112bdd146328a3e836fd7424e7a274c298 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Sun, 3 Jan 2016 00:52:56 +0000 Subject: [PATCH 19/21] Revert "Merge remote-tracking branch 'origin/master'" This reverts commit 248ea5191a775ebb55ed23d39af4ab322d4fbf74, reversing changes made to 02bd15db90de99909ac61f5fb64c6bbc6c2c2f03. --- .../etc/class_diagram.png | Bin 38232 -> 0 bytes event-driven-architecture/index.md | 29 ---------- event-driven-architecture/pom.xml | 28 ---------- .../src/main/java/com/iluwatar/eda/App.java | 42 --------------- .../java/com/iluwatar/eda/event/Event.java | 27 ---------- .../iluwatar/eda/event/UserCreatedEvent.java | 21 -------- .../iluwatar/eda/event/UserUpdatedEvent.java | 21 -------- .../eda/framework/EventDispatcher.java | 41 -------------- .../com/iluwatar/eda/framework/Handler.java | 18 ------- .../com/iluwatar/eda/framework/Message.java | 15 ------ .../eda/handler/UserCreatedEventHandler.java | 18 ------- .../eda/handler/UserUpdatedEventHandler.java | 18 ------- .../java/com/iluwatar/eda/model/User.java | 21 -------- .../eda/event/UserCreatedEventTest.java | 24 --------- .../eda/framework/EventDispatcherTest.java | 50 ------------------ pom.xml | 7 ++- 16 files changed, 3 insertions(+), 377 deletions(-) delete mode 100644 event-driven-architecture/etc/class_diagram.png delete mode 100644 event-driven-architecture/index.md delete mode 100644 event-driven-architecture/pom.xml delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/App.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java delete mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java delete mode 100644 event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java delete mode 100644 event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java diff --git a/event-driven-architecture/etc/class_diagram.png b/event-driven-architecture/etc/class_diagram.png deleted file mode 100644 index 69560e1f4b80d0d95dc5387189cc753e31d66f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38232 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 - - - 4.0.0 - - com.iluwatar - java-design-patterns - 1.10.0-SNAPSHOT - - - event-driven-architecture - - - - junit - junit - test - - - - org.mockito - mockito-core - test - - - \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java deleted file mode 100644 index a1e4c6652..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.iluwatar.eda; - -import com.iluwatar.eda.event.Event; -import com.iluwatar.eda.event.UserCreatedEvent; -import com.iluwatar.eda.event.UserUpdatedEvent; -import com.iluwatar.eda.framework.EventDispatcher; -import com.iluwatar.eda.handler.UserCreatedEventHandler; -import com.iluwatar.eda.handler.UserUpdatedEventHandler; -import com.iluwatar.eda.model.User; - -/** - * An event-driven architecture (EDA) is a framework that orchestrates behavior around the - * production, detection and consumption of events as well as the responses they evoke. An event is - * any identifiable occurrence that has significance for system hardware or software.

The - * example below uses an {@link EventDispatcher} to link/register {@link Event} objects to their - * respective handlers once an {@link Event} is dispatched, it's respective handler is invoked and - * the {@link Event} is handled accordingly. - * - */ -public class App { - - /** - * Once the {@link EventDispatcher} is initialised, handlers related to specific events have to be - * made known to the dispatcher by registering them. In this case the {@link UserCreatedEvent} is - * bound to the UserCreatedEventHandler, whilst the {@link UserUpdatedEvent} is bound to the - * {@link UserUpdatedEventHandler}. The dispatcher can now be called to dispatch specific events. - * When a user is saved, the {@link UserCreatedEvent} can be dispatched. - * On the other hand, when a user is updated, {@link UserUpdatedEvent} can be dispatched. - * - */ - public static void main(String[] args) { - - EventDispatcher dispatcher = new EventDispatcher(); - dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); - dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); - - User user = new User("iluwatar"); - dispatcher.onEvent(new UserCreatedEvent(user)); - dispatcher.onEvent(new UserUpdatedEvent(user)); - } - -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java deleted file mode 100644 index bcf78f275..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.iluwatar.eda.event; - -import com.iluwatar.eda.framework.EventDispatcher; -import com.iluwatar.eda.framework.Message; - -/** - * The {@link Event} class serves as a base class for defining custom events happening with your - * system. In this example we have two types of events defined. - *

- * Events can be distinguished using the {@link #getType() getType} method. - */ -public class Event implements Message { - - /** - * Returns the event type as a {@link Class} object - * In this example, this method is used by the {@link EventDispatcher} to - * dispatch events depending on their type. - * - * @return the Event type as a {@link Class}. - */ - public Class getType() { - return getClass(); - } -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java deleted file mode 100644 index f7beaf82c..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.iluwatar.eda.event; - -import com.iluwatar.eda.model.User; - -/** - * The {@link UserCreatedEvent} should should be dispatched whenever a user has been created. - * This class can be extended to contain details about the user has been created. In this example, - * the entire {@link User} object is passed on as data with the event. - */ -public class UserCreatedEvent extends Event { - - private User user; - - public UserCreatedEvent(User user) { - this.user = user; - } - - public User getUser() { - return user; - } -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java deleted file mode 100644 index c07e83e7c..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.iluwatar.eda.event; - -import com.iluwatar.eda.model.User; - -/** - * The {@link UserUpdatedEvent} should should be dispatched whenever a user has been updated. - * This class can be extended to contain details about the user has been updated. In this example, - * the entire {@link User} object is passed on as data with the event. - */ -public class UserUpdatedEvent extends Event { - - private User user; - - public UserUpdatedEvent(User user) { - this.user = user; - } - - public User getUser() { - return user; - } -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java deleted file mode 100644 index d5436acbf..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iluwatar.eda.framework; - -import com.iluwatar.eda.event.Event; - -import java.util.HashMap; -import java.util.Map; - -/** - * Handles the routing of {@link Event} messages to associated handlers. - * A {@link HashMap} is used to store the association between events and their respective handlers. - * - */ -public class EventDispatcher { - - private Map, Handler> handlers; - - public EventDispatcher() { - handlers = new HashMap<>(); - } - - /** - * Links an {@link Event} to a specific {@link Handler}. - * - * @param eventType The {@link Event} to be registered - * @param handler The {@link Handler} that will be handling the {@link Event} - */ - public void registerChannel(Class eventType, - Handler handler) { - handlers.put(eventType, handler); - } - - /** - * Dispatches an {@link Event} depending on it's type. - * - * @param event The {@link Event} to be dispatched - */ - public void onEvent(Event event) { - handlers.get(event.getClass()).onEvent(event); - } - -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java deleted file mode 100644 index cba2f08b2..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iluwatar.eda.framework; - -import com.iluwatar.eda.event.Event; - -/** - * This interface can be implemented to handle different types of messages. - * Every handler is responsible for a single of type message - */ -public interface Handler { - - /** - * The onEvent method should implement and handle behavior related to the event. - * This can be as simple as calling another service to handle the event on publishing the event on - * a queue to be consumed by other sub systems. - * @param event the {@link Event} object to be handled. - */ - void onEvent(Event event); -} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java deleted file mode 100644 index f8f8c7dfc..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.iluwatar.eda.framework; - -/** - * A {@link Message} is an object with a specific type that is associated - * to a specific {@link Handler}. - */ -public interface Message { - - /** - * Returns the message type as a {@link Class} object. In this example the message type is - * used to handle events by their type. - * @return the message type as a {@link Class}. - */ - Class getType(); -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java deleted file mode 100644 index 7db4a2d81..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iluwatar.eda.handler; - -import com.iluwatar.eda.event.Event; -import com.iluwatar.eda.event.UserCreatedEvent; -import com.iluwatar.eda.framework.Handler; - -/** - * Handles the {@link UserCreatedEvent} message. - */ -public class UserCreatedEventHandler implements Handler { - - @Override - public void onEvent(Event message) { - - UserCreatedEvent userCreatedEvent = (UserCreatedEvent) message; - System.out.printf("User with %s has been Created!", userCreatedEvent.getUser().getUsername()); - } -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java deleted file mode 100644 index 754a75c45..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iluwatar.eda.handler; - -import com.iluwatar.eda.event.Event; -import com.iluwatar.eda.event.UserUpdatedEvent; -import com.iluwatar.eda.framework.Handler; - -/** - * Handles the {@link UserUpdatedEvent} message. - */ -public class UserUpdatedEventHandler implements Handler { - - @Override - public void onEvent(Event message) { - - UserUpdatedEvent userUpdatedEvent = (UserUpdatedEvent) message; - System.out.printf("User with %s has been Updated!", userUpdatedEvent.getUser().getUsername()); - } -} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java deleted file mode 100644 index 02a7a4641..000000000 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.iluwatar.eda.model; - -import com.iluwatar.eda.event.UserCreatedEvent; -import com.iluwatar.eda.event.UserUpdatedEvent; - -/** - * This {@link User} class is a basic pojo used to demonstrate user data sent along with - * the {@link UserCreatedEvent} and {@link UserUpdatedEvent} events. - */ -public class User { - - private String username; - - public User(String username) { - this.username = username; - } - - public String getUsername() { - return username; - } -} diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java deleted file mode 100644 index 108280bf1..000000000 --- a/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.iluwatar.eda.event; - -import com.iluwatar.eda.model.User; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * {@link UserCreatedEventTest} tests and verifies {@link Event} behaviour. - */ -public class UserCreatedEventTest { - - /** - * This unit test should correctly return the {@link Event} class type when calling the - * {@link Event#getType() getType} method. - */ - @Test - public void testGetEventType() { - User user = new User("iluwatar"); - UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); - assertEquals(UserCreatedEvent.class, userCreatedEvent.getType()); - } -} diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java deleted file mode 100644 index 163ffed6e..000000000 --- a/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.iluwatar.eda.framework; - -import com.iluwatar.eda.framework.EventDispatcher; -import com.iluwatar.eda.event.UserCreatedEvent; -import com.iluwatar.eda.event.UserUpdatedEvent; -import com.iluwatar.eda.handler.UserCreatedEventHandler; -import com.iluwatar.eda.handler.UserUpdatedEventHandler; -import com.iluwatar.eda.model.User; - -import org.junit.Test; - -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -/** - * Event Dispatcher unit tests to assert and verify correct event dispatcher behaviour - */ -public class EventDispatcherTest { - - /** - * This unit test should register events and event handlers correctly with the event dispatcher - * and events should be dispatched accordingly. - */ - @Test - public void testEventDriverPattern() { - - EventDispatcher dispatcher = spy(new EventDispatcher()); - UserCreatedEventHandler userCreatedEventHandler = spy(new UserCreatedEventHandler()); - UserUpdatedEventHandler userUpdatedEventHandler = spy(new UserUpdatedEventHandler()); - dispatcher.registerChannel(UserCreatedEvent.class, userCreatedEventHandler); - dispatcher.registerChannel(UserUpdatedEvent.class, userUpdatedEventHandler); - - User user = new User("iluwatar"); - - UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); - UserUpdatedEvent userUpdatedEvent = new UserUpdatedEvent(user); - - //fire a userCreatedEvent and verify that userCreatedEventHandler has been invoked. - dispatcher.onEvent(userCreatedEvent); - verify(userCreatedEventHandler).onEvent(userCreatedEvent); - verify(dispatcher).onEvent(userCreatedEvent); - - //fire a userCreatedEvent and verify that userUpdatedEventHandler has been invoked. - dispatcher.onEvent(userUpdatedEvent); - verify(userUpdatedEventHandler).onEvent(userUpdatedEvent); - verify(dispatcher).onEvent(userUpdatedEvent); - } - - -} diff --git a/pom.xml b/pom.xml index c929f2945..027ba824b 100644 --- a/pom.xml +++ b/pom.xml @@ -79,10 +79,10 @@ front-controller repository async-method-invocation - monostate + monostate step-builder - business-delegate - half-sync-half-async + business-delegate + half-sync-half-async layers message-channel fluentinterface @@ -90,7 +90,6 @@ caching publish-subscribe delegation - event-driven-architecture From d6719729b9d07865be4576e6d98b77a9847a983d Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Sun, 3 Jan 2016 00:54:49 +0000 Subject: [PATCH 20/21] Revert "Revert "Merge remote-tracking branch 'origin/master'"" This reverts commit 03f0a2112bdd146328a3e836fd7424e7a274c298. --- .../etc/class_diagram.png | Bin 0 -> 38232 bytes event-driven-architecture/index.md | 29 ++++++++++ event-driven-architecture/pom.xml | 28 ++++++++++ .../src/main/java/com/iluwatar/eda/App.java | 42 +++++++++++++++ .../java/com/iluwatar/eda/event/Event.java | 27 ++++++++++ .../iluwatar/eda/event/UserCreatedEvent.java | 21 ++++++++ .../iluwatar/eda/event/UserUpdatedEvent.java | 21 ++++++++ .../eda/framework/EventDispatcher.java | 41 ++++++++++++++ .../com/iluwatar/eda/framework/Handler.java | 18 +++++++ .../com/iluwatar/eda/framework/Message.java | 15 ++++++ .../eda/handler/UserCreatedEventHandler.java | 18 +++++++ .../eda/handler/UserUpdatedEventHandler.java | 18 +++++++ .../java/com/iluwatar/eda/model/User.java | 21 ++++++++ .../eda/event/UserCreatedEventTest.java | 24 +++++++++ .../eda/framework/EventDispatcherTest.java | 50 ++++++++++++++++++ pom.xml | 7 +-- 16 files changed, 377 insertions(+), 3 deletions(-) create mode 100644 event-driven-architecture/etc/class_diagram.png create mode 100644 event-driven-architecture/index.md create mode 100644 event-driven-architecture/pom.xml create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/App.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java create mode 100644 event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java create mode 100644 event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java diff --git a/event-driven-architecture/etc/class_diagram.png b/event-driven-architecture/etc/class_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..69560e1f4b80d0d95dc5387189cc753e31d66f65 GIT binary patch literal 38232 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 + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.10.0-SNAPSHOT + + + event-driven-architecture + + + + junit + junit + test + + + + org.mockito + mockito-core + test + + + \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java new file mode 100644 index 000000000..a1e4c6652 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java @@ -0,0 +1,42 @@ +package com.iluwatar.eda; + +import com.iluwatar.eda.event.Event; +import com.iluwatar.eda.event.UserCreatedEvent; +import com.iluwatar.eda.event.UserUpdatedEvent; +import com.iluwatar.eda.framework.EventDispatcher; +import com.iluwatar.eda.handler.UserCreatedEventHandler; +import com.iluwatar.eda.handler.UserUpdatedEventHandler; +import com.iluwatar.eda.model.User; + +/** + * An event-driven architecture (EDA) is a framework that orchestrates behavior around the + * production, detection and consumption of events as well as the responses they evoke. An event is + * any identifiable occurrence that has significance for system hardware or software.

The + * example below uses an {@link EventDispatcher} to link/register {@link Event} objects to their + * respective handlers once an {@link Event} is dispatched, it's respective handler is invoked and + * the {@link Event} is handled accordingly. + * + */ +public class App { + + /** + * Once the {@link EventDispatcher} is initialised, handlers related to specific events have to be + * made known to the dispatcher by registering them. In this case the {@link UserCreatedEvent} is + * bound to the UserCreatedEventHandler, whilst the {@link UserUpdatedEvent} is bound to the + * {@link UserUpdatedEventHandler}. The dispatcher can now be called to dispatch specific events. + * When a user is saved, the {@link UserCreatedEvent} can be dispatched. + * On the other hand, when a user is updated, {@link UserUpdatedEvent} can be dispatched. + * + */ + public static void main(String[] args) { + + EventDispatcher dispatcher = new EventDispatcher(); + dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); + dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); + + User user = new User("iluwatar"); + dispatcher.onEvent(new UserCreatedEvent(user)); + dispatcher.onEvent(new UserUpdatedEvent(user)); + } + +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java new file mode 100644 index 000000000..bcf78f275 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java @@ -0,0 +1,27 @@ +package com.iluwatar.eda.event; + +import com.iluwatar.eda.framework.EventDispatcher; +import com.iluwatar.eda.framework.Message; + +/** + * The {@link Event} class serves as a base class for defining custom events happening with your + * system. In this example we have two types of events defined. + *

    + *
  • {@link UserCreatedEvent} - used when a user is created
  • + *
  • {@link UserUpdatedEvent} - used when a user is updated
  • + *
+ * Events can be distinguished using the {@link #getType() getType} method. + */ +public class Event implements Message { + + /** + * Returns the event type as a {@link Class} object + * In this example, this method is used by the {@link EventDispatcher} to + * dispatch events depending on their type. + * + * @return the Event type as a {@link Class}. + */ + public Class getType() { + return getClass(); + } +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java new file mode 100644 index 000000000..f7beaf82c --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java @@ -0,0 +1,21 @@ +package com.iluwatar.eda.event; + +import com.iluwatar.eda.model.User; + +/** + * The {@link UserCreatedEvent} should should be dispatched whenever a user has been created. + * This class can be extended to contain details about the user has been created. In this example, + * the entire {@link User} object is passed on as data with the event. + */ +public class UserCreatedEvent extends Event { + + private User user; + + public UserCreatedEvent(User user) { + this.user = user; + } + + public User getUser() { + return user; + } +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java new file mode 100644 index 000000000..c07e83e7c --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java @@ -0,0 +1,21 @@ +package com.iluwatar.eda.event; + +import com.iluwatar.eda.model.User; + +/** + * The {@link UserUpdatedEvent} should should be dispatched whenever a user has been updated. + * This class can be extended to contain details about the user has been updated. In this example, + * the entire {@link User} object is passed on as data with the event. + */ +public class UserUpdatedEvent extends Event { + + private User user; + + public UserUpdatedEvent(User user) { + this.user = user; + } + + public User getUser() { + return user; + } +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java new file mode 100644 index 000000000..d5436acbf --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java @@ -0,0 +1,41 @@ +package com.iluwatar.eda.framework; + +import com.iluwatar.eda.event.Event; + +import java.util.HashMap; +import java.util.Map; + +/** + * Handles the routing of {@link Event} messages to associated handlers. + * A {@link HashMap} is used to store the association between events and their respective handlers. + * + */ +public class EventDispatcher { + + private Map, Handler> handlers; + + public EventDispatcher() { + handlers = new HashMap<>(); + } + + /** + * Links an {@link Event} to a specific {@link Handler}. + * + * @param eventType The {@link Event} to be registered + * @param handler The {@link Handler} that will be handling the {@link Event} + */ + public void registerChannel(Class eventType, + Handler handler) { + handlers.put(eventType, handler); + } + + /** + * Dispatches an {@link Event} depending on it's type. + * + * @param event The {@link Event} to be dispatched + */ + public void onEvent(Event event) { + handlers.get(event.getClass()).onEvent(event); + } + +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java new file mode 100644 index 000000000..cba2f08b2 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java @@ -0,0 +1,18 @@ +package com.iluwatar.eda.framework; + +import com.iluwatar.eda.event.Event; + +/** + * This interface can be implemented to handle different types of messages. + * Every handler is responsible for a single of type message + */ +public interface Handler { + + /** + * The onEvent method should implement and handle behavior related to the event. + * This can be as simple as calling another service to handle the event on publishing the event on + * a queue to be consumed by other sub systems. + * @param event the {@link Event} object to be handled. + */ + void onEvent(Event event); +} \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java new file mode 100644 index 000000000..f8f8c7dfc --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java @@ -0,0 +1,15 @@ +package com.iluwatar.eda.framework; + +/** + * A {@link Message} is an object with a specific type that is associated + * to a specific {@link Handler}. + */ +public interface Message { + + /** + * Returns the message type as a {@link Class} object. In this example the message type is + * used to handle events by their type. + * @return the message type as a {@link Class}. + */ + Class getType(); +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java new file mode 100644 index 000000000..7db4a2d81 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java @@ -0,0 +1,18 @@ +package com.iluwatar.eda.handler; + +import com.iluwatar.eda.event.Event; +import com.iluwatar.eda.event.UserCreatedEvent; +import com.iluwatar.eda.framework.Handler; + +/** + * Handles the {@link UserCreatedEvent} message. + */ +public class UserCreatedEventHandler implements Handler { + + @Override + public void onEvent(Event message) { + + UserCreatedEvent userCreatedEvent = (UserCreatedEvent) message; + System.out.printf("User with %s has been Created!", userCreatedEvent.getUser().getUsername()); + } +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java new file mode 100644 index 000000000..754a75c45 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java @@ -0,0 +1,18 @@ +package com.iluwatar.eda.handler; + +import com.iluwatar.eda.event.Event; +import com.iluwatar.eda.event.UserUpdatedEvent; +import com.iluwatar.eda.framework.Handler; + +/** + * Handles the {@link UserUpdatedEvent} message. + */ +public class UserUpdatedEventHandler implements Handler { + + @Override + public void onEvent(Event message) { + + UserUpdatedEvent userUpdatedEvent = (UserUpdatedEvent) message; + System.out.printf("User with %s has been Updated!", userUpdatedEvent.getUser().getUsername()); + } +} diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java new file mode 100644 index 000000000..02a7a4641 --- /dev/null +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java @@ -0,0 +1,21 @@ +package com.iluwatar.eda.model; + +import com.iluwatar.eda.event.UserCreatedEvent; +import com.iluwatar.eda.event.UserUpdatedEvent; + +/** + * This {@link User} class is a basic pojo used to demonstrate user data sent along with + * the {@link UserCreatedEvent} and {@link UserUpdatedEvent} events. + */ +public class User { + + private String username; + + public User(String username) { + this.username = username; + } + + public String getUsername() { + return username; + } +} diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java new file mode 100644 index 000000000..108280bf1 --- /dev/null +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java @@ -0,0 +1,24 @@ +package com.iluwatar.eda.event; + +import com.iluwatar.eda.model.User; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * {@link UserCreatedEventTest} tests and verifies {@link Event} behaviour. + */ +public class UserCreatedEventTest { + + /** + * This unit test should correctly return the {@link Event} class type when calling the + * {@link Event#getType() getType} method. + */ + @Test + public void testGetEventType() { + User user = new User("iluwatar"); + UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); + assertEquals(UserCreatedEvent.class, userCreatedEvent.getType()); + } +} diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java new file mode 100644 index 000000000..163ffed6e --- /dev/null +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java @@ -0,0 +1,50 @@ +package com.iluwatar.eda.framework; + +import com.iluwatar.eda.framework.EventDispatcher; +import com.iluwatar.eda.event.UserCreatedEvent; +import com.iluwatar.eda.event.UserUpdatedEvent; +import com.iluwatar.eda.handler.UserCreatedEventHandler; +import com.iluwatar.eda.handler.UserUpdatedEventHandler; +import com.iluwatar.eda.model.User; + +import org.junit.Test; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +/** + * Event Dispatcher unit tests to assert and verify correct event dispatcher behaviour + */ +public class EventDispatcherTest { + + /** + * This unit test should register events and event handlers correctly with the event dispatcher + * and events should be dispatched accordingly. + */ + @Test + public void testEventDriverPattern() { + + EventDispatcher dispatcher = spy(new EventDispatcher()); + UserCreatedEventHandler userCreatedEventHandler = spy(new UserCreatedEventHandler()); + UserUpdatedEventHandler userUpdatedEventHandler = spy(new UserUpdatedEventHandler()); + dispatcher.registerChannel(UserCreatedEvent.class, userCreatedEventHandler); + dispatcher.registerChannel(UserUpdatedEvent.class, userUpdatedEventHandler); + + User user = new User("iluwatar"); + + UserCreatedEvent userCreatedEvent = new UserCreatedEvent(user); + UserUpdatedEvent userUpdatedEvent = new UserUpdatedEvent(user); + + //fire a userCreatedEvent and verify that userCreatedEventHandler has been invoked. + dispatcher.onEvent(userCreatedEvent); + verify(userCreatedEventHandler).onEvent(userCreatedEvent); + verify(dispatcher).onEvent(userCreatedEvent); + + //fire a userCreatedEvent and verify that userUpdatedEventHandler has been invoked. + dispatcher.onEvent(userUpdatedEvent); + verify(userUpdatedEventHandler).onEvent(userUpdatedEvent); + verify(dispatcher).onEvent(userUpdatedEvent); + } + + +} diff --git a/pom.xml b/pom.xml index 027ba824b..c929f2945 100644 --- a/pom.xml +++ b/pom.xml @@ -79,10 +79,10 @@ front-controller repository async-method-invocation - monostate + monostate step-builder - business-delegate - half-sync-half-async + business-delegate + half-sync-half-async layers message-channel fluentinterface @@ -90,6 +90,7 @@ caching publish-subscribe delegation + event-driven-architecture From bea1a0d6d9bc09e013b44652133df4160a124196 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Sun, 3 Jan 2016 00:55:04 +0000 Subject: [PATCH 21/21] Revert "Revert "Add class diagram for #113 and to be included in PR #299"" This reverts commit 0f75a0e23961d3528c716874d74615b88230201f. --- .../etc/class_diagram.png | Bin 38232 -> 0 bytes event-driven-architecture/etc/eda.png | Bin 0 -> 80265 bytes event-driven-architecture/etc/eda.ucls | 196 ++++++++++++++++++ event-driven-architecture/index.md | 2 +- 4 files changed, 197 insertions(+), 1 deletion(-) delete mode 100644 event-driven-architecture/etc/class_diagram.png create mode 100644 event-driven-architecture/etc/eda.png create mode 100644 event-driven-architecture/etc/eda.ucls diff --git a/event-driven-architecture/etc/class_diagram.png b/event-driven-architecture/etc/class_diagram.png deleted file mode 100644 index 69560e1f4b80d0d95dc5387189cc753e31d66f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38232 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 XEPJa~ z9y>b&uhjT=LqIM@y8jL9r4F)c$^s<9$o$^&h&dPJ#-%VGKhI`tFWswG88dIMiUW#O zRP>$IE2#BAN1VxPR%S47F}#EA@2pmp_>ajdV{;#T%~M&9g-xbkt5Xf-h)_NKmtf7aCrf|>38 zHD{uK=d<$Dc6cwm=i2EOi*I(-I7D;cw)lPb=zB0Ot@C`VE7B0-Dst!k+pv)W$>M{6l}V(*Zr*K zEzzc-@s~IM&QtXwb|kOfOP5fG!A!$TMT-x^mZ@%$H`t7zt{(43wHt{Y-jq45nbKrn zzP1`I#YOHao>w9!zIptjqM~-xTOnClw#v!`|8^Gm0uXivtAG5ZS{_&j&-CIGZF zG&e`5&aQz2LxzI?5-89xqqJw$Ab@Ckuxm$hF{`pJTKjnG&Nj?(NV4eWdyCa7XrfAGOaX0NNuexqYlK_PfZe*U+m z)tIo*NcZQv7c-zk_XmNn0Bj#zShg1E@zFRSxTM2V1PcUMd5%mf zflV#|&cGaC6lSBPdsbFh_zS{qR!^H>vhK@)hXlMD-~q54BX>u{T{nEI^y%UZ_+_J|--%PgR0RZ9s(QvICO{y>#>a>ADtLo(&<|%k235Vqmq9lg zvw`2}>R6t7t{e0W9)&#Vf8GMbv*U>3G?)iX;YW@1X1nXw#lmTeYO*$&mh z1Ko|6m-oJd01=$&;o;%+w`EynFu2NJg9lZEgy`tq#)#V6n(T~BOkkA@$?nHkwjokJl#uJq2ZQmOH51z+lSzT_pCE4&@3o@di1ie=<>fm z>V_ViN^>(a0Xcs7SFc^`N!7^20vrZcq{teWW&}(!V`KY+zXNa<*8lsLGv)(u05>}P zpMvmZ)j)z-z#C@#kd{V6N$H>CM>Y;^qo9--^v$UI^D@pse2SGddY z2?$Y%wpHHme){kGY0-ZO7F6{%Zg7$Q$%lC#Y^!y{~a`kyDy4+K%+t2P5G~ zYxSV9U3ly{f0xUvJUS+32R4Fz=9l;R;dB7AK0g;%)P4TZ#~@z;t?=*k?HU-EpWI5= z5R-m9Sp)m6)fjoLnT^dGD6-3u`*h>hty?N8Q&py^JBX--y&+NS>R)T|KS{mw*6|b% z>rLCtemw0sykm5n2vee%x*S4yURwErXH{8$vV0A z5+cRD`{P(Ww8*BB9q)!LACxCN`wwB;Z7Is#jD12@q0in&r1|q69{q#^l^YSAtXpzZR?tv{2?4sLS!9Jw7nm%a|YQ|WM}NHA%R zS>!~$>7ZE$qq@-u_Sn}FUCmDrNMt!UIPp<^n^U_DZ9n3!d)jqAk}{8S`G4%E-+JV{ z)En@&#NNK9{!Zn!GfbHs5?1$I^WkU#L++gaoTE^2b}aR%)1 zx_!Tw2Rbd&NiVFq8NS62@lE?u#96o7PR6avm5&ce>`|}>kKI49jgxv>o|D6idA*jA zWHv(uvw*kD7PIp6H^2bk#I5BQ#nifpymDqvT}-@FV&Pmw&GJW4;`Ug<&%@SZf>|+S zg=#c)A}hOU)@Qgu02CTTUpVajw4(ueocHb4K-hpAmqGaz+vf3N`pu1A{%R)x*mP9D zv()1ObE*-f!%VTjt$n>0SQlnN!p$%Ds|9cP%y;CNn2-cmFe9+EyfQX-rOs1{(Q=)y zCm!~_#BzazaS$8GIWz8FpOcmE+qkP|&UP^s<7a2@5~+5~tq&Ke?<`59@sz(O-_dqN zE0CC>CfW1@PmaIJ|Abe-T*z>+z+oCsJ3TU6FONo|!s-6|{Dv9j(ajl4SFV8!&Ev1@ zRmZ?*|JuGH=Yx98_$pWD1%POf$}jeO=E27ghPK`RhIB~fl)Vcbfv4$a)lsf(h*2#O zv4+#ZAJIuhJKt{k zMdoon-769jQ5pB?#-Z7jtJ6pX3RT~(#-AaJc}QVP$ae_|Wn!{Ez@H5d4>LL`Y~X%7 zQXo&EqM?D|eGf|X2IZ*UJsK;A1h_?(#`Q@(lD!8We-{^tl!U|bPQ3uu`j4rgWpz3i zH;Mq=X6Imm`8eyWrnBu-@9`f$xdurzZjm<%F#P{i6REJDpx}BFw~AJgtkl&23;kgb zNg?Z-mn(qb&Z0E3`k$*6s{MuwNY~rz`909J{+_bmzsLWUBS&rQu98?wA;BuQdU8A* zWl4OxgXp4l%q6${xj|999C3#KF>zGCsBIcne34BuPj2n_omdB23L!%Q>Gqfxz$lzS z6%}#5E}V|Q&wvH=yPEkTRS)(BcJ?Csi4$;#7p!HJmhQuHAu5*Y>gb5{Pu4aAZUA}B z0iXg{MPU8_o`rxb9bezB$a(O^jbH7zt!GXu%Uga0PGnvbzv*@?$s3gze|f-e_EjPA zNx@j>Bh!8l1c8#$Q|nKBGZVrObb?3ed7d*G5XLZx7t>3YvoPeDnp#PqGao#iD~kHA zH;PSwQycY3ULC}bpFVlSU|;yQ_(Q2L$LOU4mYHh6IcD^I0nR4;-4u@WNmR}fEh4XC7o1j9NZ3(p zS@(RrF_32pr|De`q5v=0?8zAsILGnv@gv3A3F5SjjlIBJ0)AX$I{2~W>ios+=tOo# z>sAN$s?|K|Bd>d1pSpbOLmY?dq`~Gg){SjM6rcRfiBbpbL5xVFHhX+Hw?Ve`WG*>p z)wfH7SO5`$kA4>STZ=i#{nzyk0shYC?)t6Rn57VG^0nCf=0|f$xR+x0_3N+ob=fj4 z3F7I%03X+*`eb-K`7|`5xb5bq9bb!ev$Vnh=)VPO(ukZZOk6>1r z`5Irzv-n!C@wsf9=uln2LvH&>-sZYfjx}KdE|wXy+BU`G~)fV3U8$`X=wS3F^*NL7BiAp-aH zMHexqUT1MUpJa)8%Ny0$ls^r+pTR3mw-Lp*WVf(jBh;B|B1K4Nid%=Yg{5pkmk62LxU0r?oRV@Q- z0g~QcB+3uR%0o3QC1qZ6kjP>?8g@W^)FgL4k;ZMkb-*d)yg9Nd_ZCAQAd1?<%m*DZ zkha}0&&?gZFOZNi5btn9gZ9vM3Rei4F|$JT8T{&C{%72_diW6IiXy#sZa+}&X$k?> z3(zh>qa!d1q=0;f10TC!Q5tbSu56=vL9&kZC$mIp zZ2ZV+KxiVd6X+q$9o5`rF@r2V5fwfY#`}4IaC{bfZscEXc<&S0(sJO*BhN|zO=;WU zuwc=V^DUd}%+e#BqED1ASsln@aNLz%!M%Gkz{(R{;POra?dOgT2??2;G_#{VYHV!e z;Nkf*IRh1{rltl2Z|S-oD;WULZY>--b33~TZ!IEUKS57~dCLu1?Pq$CUGWFY-9sC$ zkwYHc+UQK?s6%V3vE$5DZS8fP+`L=wM-|przqujisE)o|dA{w`sWo!X+T(IoaCHXq zPDi$5)L7(2FRnNElMw*t#Kgt#WE1{46< zdfB1@0Ox7a46}@{d@r^}Qt-Ldi;$ALA|y1O1R=ajy1ISfsCVq5-7~K8Isj7OAIbU{ zuHL~ghC6FhQ%|6ZFMFK&EWr6!i%jenczGYf<)T2_4$7VQN}yA&-;C_+N?uyoGA0_; zIE#WiQCDH;dGbR~M~ABavXb11X4EYz*(Cp~mGYBvf6@L~l#DX5t*vdtS9u-;klko- zgs-uw-Mu>v*$`GD4P`ZTb@FuASHU2AfL+Nncg;!u?|*p)g^3qH2IbLjsHZi8qGi#i z$pVn}b#-;cKNR)Gh-TqqPu0U0G-%h}Y_gs+J$tK$bFE2zKCBe7C{r!!2I_`gq1P6m0X;y^6~%mB_=3u12g57`NQS+8F1 z#yv^7sM#_36@$mT_STq0pAzC=+1szfJol))9_zUMK@~=DY;G~(1t(WhN=k~GD5|M$ zbQFr1OW=>C*}nmU!~0L4xQodMqkyU#99e!eew1FcGoBz$t5g1B+vyfiO1iW!1srIHu-8AG3i`3CS z+C2wf#_Ye1ep3|kIIuPvZp)IH&Yc_|Zrw)&%piHF0sM-IN$GAQ$jM{9PoLWKebZ^c zuJBnO%rh0u{&^0?I#Y%ZjQI3Q=BT2gBAkMHLAJU^`udMWic+F5qb(%wVQ7UpSQ$de z{5>B(K1m5+PRihdN|Kfj*LMP`jzC6rclXZHyY-`o{)+RGGRynIeBYNpy5U05$sq`M zCWx2dCejNkj7?0ud00DiFj(u~1}hSnF#rj5(ZJmm+%8o>ndi?xOu8=r z!PFw9ZF}(phuT>%Zz$PN^2lO{23r2L8>+v!c6tFfu%>CJ-)3eGQhSaiyHWL26>dX; z;%|F6E&|!5Ea9Aj#v&oR7B|GE%itSn)2tgWgOcJN9yC5XpDMySO>r#I@y2R9= z7pou?1x`W~at*SL?LU4H9Fw3aDs~Y#Y{6ZeDnpxaC5pE8^qe4W*msZwDl01Tb-6fT zU=+%2vQ`GUhaa^ z@~*4L)4jF0K;ouC-jGD%h7LS5{z8u;2@!;BgK2*s(8-6Lc_z;fp#z_dnx5L9WD<}H z(&ezaH;-(1U+}pbZjUup5cWsMTs)5%cQjX_X*CNY52Ek15OC^A_wW0tVfnm5}lP*i@_oQ zPoF(wxF>(^t5qAL+x|hJE8GzeBm*mh^#k}H>1pgVl97>=*Hns*hehg(r35#F!qg`N*cUjzf}{QC-b66muk>0B|GK_l z-v(6FCL?ZaG=%!FtnB>~V!o0w?}s~0!=H!{bM>zBxgJDIMapc%VB z2bHg{Z^gd1o*_y`w$^H+4cqJFXb4=`ZGmcF z5r=`~XSTTeBs6Y;+xw4>2{;~Hn^zs@&J+_7LiVfq^s=7Z4TQL%v2jFBid+$n|NT1={NYBp{BZ*2e$b3pOoS^7H^*R{ z5{im!m@gu`@eLbF`P$<}*WoyPw?kn40i;NfjNa{VamtiO!<9Dw7}K@2H77-*Z`07c zcqK69-QSPDKZPviynI{j?Xz@C2;BXA&tAdo`LG+*~s3&=}w^G@d<$QmFR9UF_e zLZ#{*Zo>v#s!fK&W;^L0bZl@c2nL9Wa%Wp_Z>eIk)XC8@N2uQW^Nz#N2MGkRYL5Y+ zUBNCFl;d}AaA>HuM7o%0ybw%MZinVs``4;KQzs%CY7%|o(=5o(p9iJ_2rU}BEX~Yp zFXvT189JXV(0s@l#=2hz<#D-pD#LR8Ca9>XAx-{k4Xfxc>3Xn-fa-Oi9T;7IAFfwJ z9q;4OPwyW8-o9VXX{eh7P<3+JV{Z+lT+>N-U~o~>1FJ!9JdpgfI%B=mr!7>M4d&pJ+Y^R$&tZ(h?}>&$?c|fPMkwLpy{SG25#^ zAmWap`fiYi2m3F~O8i0XD5Yg$^x&6K!q8 zM&Du&pcW`5hMK7_gB5ccL`1+-)B~6Y{{(FL=Rh4iLrOI=M%GSSKX}A;_wTnjq{DR> zOG`_Pt}0v(Y*OTo~i^2T?c__OhsM})=RL;rhfcr_7~sDz&scq z&rlpj1cd}}8G@;|Nd|d1yf@IQ1OE#9h69i(#^&a1#ZfAMv1^nOq$!#r!IW_qNDQ!L zr_bqrRC@zckT?a?1)CMHu$vG_#Bl7U)5w4&(J#Ym z3nPy@`I)(W7j97F;y#y?l0*=}QpZf-V^*&S-TkFB8)BhC<;vyD$qX#7J7G>OHKlBH zotmBolocNv8_fGrMQ0Q{qEs@x<%DG1Kn^MSDY~<{?U$;0W&M#Ntvs7FTQKt^{JLC9 z+eAb}Vd3Fr>w4qR>omC-b72Mte!598o4}4g$Ws*wOJr-|h@A>PY3(wlVQG4Pem?jn zAVo7Mm)Sbtfp`%+et0y*a0l)mdIt8%0&;3A({Fb7p->-yBRBV2*VP}^Kv)AKWp~dt zY6v>3+ioTp>Pqt7y+)CTQNJDM`(tb!>w^qXEQWJ)zav?sOY;Q~k~<%xUPg(cHlP<1 zHl5PatC5G_TU%2UJhYNd6-?OJSw~lMJj`rl{P5!$Z(Q>5K@HuQoI`@-&+C zWv(Hkqm5JF@K96Z%Ed>?3o)}wj#2Wk#qDli0Y&pCV89JBioN}Pqn;(@qfaWH=w{`3 z09Ha)3=B-5(T3dM3^Wd`fcq)|He-14V^Ri@_Tk~Thu*VMl$K!hj*q6`RbS{nZ%18`4Bvp4SN(EYVb&8q4FhH~0KY4jJ%Rgy15;yTQ*0zl zFBrV0>WLCZKR87*LPJWg*pCki+op-y>BIS1Kiw2XHwyB|g)c*&w6kLQne2lsD68c_<`S9`I8NB=~WL?g!RCrt1WkqJ=jDdk` z(HFe3a(V%V`I&wAl*&5Nfr7!t?udP11+mb}JUkCzR{TPNjv{)p9eQqtaldB~2AaS? z++s2@D=-VDrKQ0<>JLTPRaH{OM2i|#_=77RTfxV7JrfKNxXFWW%^I;~9z3!s^@Tc$ zUD?XAgO1Hpr8OGM zmw+RJ5b-?dVJOL==YE(~!7N(3Cap<%v+UX3?5PZZ`swRG~3 z`?Gn2QEX~*5}lJGsGy_-2hJbCHADilZs1J;S_1Q)!db2vaRXsq#%$)d(|E8O|47kT zfb<$6t{c}@d9|pS1UhXF4Vt{*=76boAp4>-yl+B6l~0~{0YgTzSPH5G61)7KrJJlw z+IVXC+x!OXnnE>gDXDwlYrlAD+L)E2u0E&wwCb%4S-S_?c7POeZ0#+JHg^(PaDH&u zVVlU)UGu|XT1x%_=7kL3e%5d6Lxq(#N-i$=fE=5gHh=nS>%XDCqV?5*F~B6Yq5K z-|1Ueocs4;=a-a#m4OFbW2_(L;e|O~o&J%R?MNVWAR6(LO(*P;HZXe|*f0>uMCPXM z>~$ZTe5H}g9fcdTMJ(#Xs6SsQ$;k@da{xYrJToB>pM@KD{$m;d)YamdWo29dTb@y|U2@F+RB35xKu{2D z8%S{OXy?C7Yu!Th?cQHdiQ%`j=5Elo_=)IbLO$< zPeu4T=(e78rcseA)4IE1%tg5R8u!9Gv~=vl&NHHGWrW7*(B z8EpLP&rXymyL8FmeOHbVLwDrO_u~zhgwSrM!21ATolRo-cxOnZA~JHh>1lX4hIx$U%Ys68B~(dJykA&{r6mcuKN1=+mPw%zYqg4 zK59rr17chU>m#tL#5qToMZfqGHjK?~Kcp5?rx$?;JtIiLef=$C* z2!=ZW(Fw5!I;J*6J)5u-3Na(@fNg*+W2oBHb1;8Ae<+mFHZBmUA@;{hZ4~OV4N8d3 z!BF8vjY5x|FO{CO;Ps_&m4z4pG@mN=9k zv}z@Anf{S3+LyU=er65CH5l25Pdy25YNC=piA^4^XVr?>#ly(3Fpvj#ZJoXgZSX+X z)ghGE`g-3M+kJw%ESU|4E^Adahz$UMH;9 zyHL^HziXCH`b9PuB@BjQ3Q2T>3D+z#2zA=hG=E7O?;$vX@c07~pK3MBCwU@#Wf0O{ zTus%JO{p;VI;D4LVTyy`8km0;qtf#7NID@rBgL5Jwl>erDO?ktSNlBRJ4}sASB)v; zaC9Ii(>InX0Mp&fav-9aPGoIPZgEL$fRYMTMMrF zy{bGnuzAUc7Sig{_aZs8i$8apw^30oEULgNgG*Ob2EcAr>aoM4GO*PSsD9r&-rX2O z(F3E7TUy%$bpvp%2`KK72wPgXtusf?8wn-*=JJ8YH?&TQWCyM-2@T){VtLT$zQ}0h z_0D1j_9x%GGOi^U-h64V$8s!WL}G--C^K{OZa|NL?^-UrqIrwM%0u{O9V+gUM%gu` z;8N2ZUteS~(ZMWKbA**Ae~T3gMYY;gO?XmpbfF7 zMw)XM|Bh$+iz>>>%@EGa&y{urY83d(6er%(g{377jrk8e+u5xEfs?PRjKBZr0sMJS zo(L9`d4Vqy8W;m|GJ>YCeZ zrZ5oEojnV#T`Z#zyT2pi<8|bu>-VlMvgHWJ{W%?N?GK)2G4*geri`s$78a12tk4+* zlg1#=M@ZDELm9|o%6$dyUARO98sF`x1(kr`Rm@%Pl%1J9NKG4mA#dKw_+HvGw%T{! zNBw&3({e$Jh7cGi97ee{9Y`6k%7iNYIjzA82;)(3j$A8j;S!#^XN+(;fMWhb2hW5Y z9eKH_a@8yF?lGe)+wvL)3-4(HX`whwPT&U<8Vr!OHY66n(X@z||Iv=hqXi2@gSNDbJ#i`ao%BW?yCifQ;SumY2)GWoj+n1Zx_U zKEKpyBzgrTuX|Tg;s>QYVj@9a+rm-f3BXFUGOo zGBT2rj-zQPn2O*w70`thCAwsXudQ(ZGXcnGlPq4TgLGA3zxah zfu62~rcu<{Xid98;1_`p>U<`=C`Y&_XwpN=6*u?S;kOPt+C06~f(Xta}(gXE7~7vjWD)z|Ndx@^uaj zb43v9kv<)r{YETqjjh@?W>TJk*~>rLXyLwO@HF`~%{G#OGL~i}|uBq2rDa8w=QH#7cegW>=*4DNy_dZs0Kxv$aBgfsQ?nb|!tL+G= z@R&v91@^Kmv9A%YC_=FRY`uVu#x3QkHu`IBVilh_ZZfv62p-;iT}m9nYz7(;K!@q< zuUZ#4IRWT#^7Erq5pc!8i2Y~w4F<>@)Bt9K7A<(}zu|%m8yg#l!J8AaML|{oCTBfk zW5!~#NUjNNI~U1=`jgL<9hcC4`-Qc&)=}#i`W5)X1)}U6Av8#!3QxST!sqo zr_kxueSe%S=h*Mg#2Q8<8hAV)>G)Dr;)E=j0okYtPehIa6^Zo_Txndbaa-+ zOOx?Qkx!1bm}OF|yIuVnE|cqCHIvypJ}erd4?ProV#%U>oc#D`pWf|97>a2>7^o*h z{gvMvwf8}WXkW`;w+#J?o<-iNaQh7Te3jZ+7LeoL;%8tE4jH%^0npf=gCiXWLnq9- zp$YpL=11(ysU2#sE?l6ROomvM#B**2fQFVA!E=LE&A6c?^mGFd&~?$y<(Pr! zh@u!`cEuYL{@=kh#hay-!Yp#@S-4{m)kb*T;3|6u)m4GqgDTo zq~s*En#!wA6LgpOm=hOwCknrw865Dcqr{{_v~XeCvUMm{%<&4`EndhFf*J$dhflJ^edKC^ z+@-hU`Lo3JnGvzjEW)n(x@#6qK&laTi>j6#3f547^KSbh1{b0D!z`<29!L;yjNQ(Z zw*eftQ}X;)bwLMP`^4DiPD%p$?w z@3QhHFVnF4PNgA8TmDyK)g{@BIflo8ZwEGs@9l`}!GWU@N4KTk11S%u&!FkI7edC^ z&%@?HGnuo<*u4@+keboQ>T_$N;?w1PTh!ZV8z1p&M(o>!4AfZj@iqNqhxT4pp4fNfRBbg3JlPz4fbZVMdMf+8i+`JM*jsEKOV_IgDz`}1DKTl(FR$?T zr^IEa-UuL#s&^vpEX^_F1$d54J3;c2`;s#TENp1*FPtVc+hpzXI z=lbuz$6vOP6;TpWLP&+O$|^-xi3*VsG7=(NBBQKIMj<0370SrS-U(SHA|Ygk?D0FV z>bkz`^Lzhuy?fuTc)gy_$2j+MKlgK_-w9nRj`CCyr2fkFG>F*UgH!TRIR56*TtH<{ zq-wwtTl44-3=AkP-1luS1zCiDJ}Vq~Cd8m=6Q2?i*(5)8d!y>>?P*3qRTppDuU|yX z_NFF{^LSmZPqK;@0TDE?qZiQvo4PK`v498%CnH8e(6ud?ClwLcH9%ZuDJr-gQIPoXj@Emkf&;xy{xK}@4Q zlPP2C+r(V!n@%!D(Hr>n=@XA=ajTrb`aJtPlV!J_VUjT__4~jzkClnTqoZ+uo*ys^ zG?tr64WaoByP<4Gvd!l7>3jEIBtMrDx9V(cX!uXdALuZ6yLg2TkK(s|r~9wb9%mH7 z^3$nJ+5g%wzxTT8DeF6>cyjM&2x0WVom=c}`M&y-)6bkdc{!mKe@{iM=v*X4tHko8-=?-^tb&v&E0_w=g_1`CgUq z3=ph$(|41KhyBOw7bdsOr@x-3NW9i3g2v`1RrQ@Fk2oW@OKDz$;tK~2G=*@HIJ7q^ zn|KVCy`%CTh{4xK;~ZN%!1bXIfZO?wKDenDDQdcA$OwT8M#geR+-#dh&f|bf?O8-t|-3 z%8a1tbI^qy+_dGfBoaxVxCIsmaWC7v8WXPB1I`mUibi zn>0~Jj*xK2PPC;u0PGYx*(7BY5kq(&MP*$eFfXXLlhJXlKL~B^n(@o-R%OBM&s?i4 z1BDySl?$R(jnPS|r?+V}ZKS;*K1pV2ispg-%jZLgCm*e9XE1SW_lX-uQmZm)wZn0l z*f|}=yix<(;oH|=8J0>ocMNr_A6Coy|Jd@IzLTUkwH7a#(-I0TXtld-i z>E|($H~haNtDXm9eM}EacEx(Ib9#JjYYPzQ?&9=Sy0E&3IE5-ARc~tY{bdAeW5nV< z=9Y^WA`3H5K1>?MescI>;Ta(sXk4YNSez21Rj$RlrX1j3vToS8i^_8IO>FlIe8U-H zy1T5c9ji8+naO$-Bo8+9QAE2E>WUFY2wqmP>&CC+n9uX*ub@yODOS|b2;HioO93t$ zS*CK^Z26wSc4>V4-b)|p)wQ*V37MN(=o?JH!|^4l|4ioQ!cMLD0ttQ=!EggJ^OYRy z^g=)dhzoGOIyfEWOA@1(CHMJuxzZH@PXVudAB!I9zV%A};sMiuWq$_s*OSLnc9ubs z;>_%wMvm>PqN4Jj{fwFqji_3vDtsNoetYP zo%=QV;PFU@x*1zg>??R>y1BRj^lrmEOOkl`A7=!95fPm`E`)Cg5z(}ZgYRz5zLN?H3Xl>V^IQ!`yQQhX(sgdj z2!LA}G$!>b@R|z+yN`x7DQ>_h1Us&V7}Lt%mO))d#ly>BbmhvO^$yN$+m;6Fx9D$n zAH+Z@`cZ!sMc)XOuXZ1P+w}fD2>va3G$NRAu8_U2WF-Gr*E8;LD?p_M=2Z|P63a`B zZurB1ojYn`1_0Kn=CveiLq);hAkwPC*- z8%xmkR_OJYF`nxCN~GBeMrQZ_)8#7b$M(Q%H0o_j45p%M298Mj+v5eWDBuD~ZDj}! z`?~>(!B{^CPUBw@lqfQ9PF!{ON-4fv`NE$;*zAjz?W?K9U$<##$pk<8jL4dGP0t>B zbW`I3O*QSPt2d-cb90UY66ZJJm11HgV!HQdYa+xZAe8^Lb?H@ZA`9T#H@Johbj03f zjY6*h7cmrICbZ$SZ|4Z7PQ5x~{RZXS7vJI?4LD8_ygdAr_iu+I!h&2#2~7H#h(VHv zdy}JHLGYGq-G%<#*^8TXLg3j%^l#H8%Y?{PDE8h(q88F0tunJe9Ow3FLe{`%LDS=~ z*PUr3`~2lg>xA`rOhUW6H>tX;g)Z7GwCt&6&_>$%*Q6@PuIb&MN2(I z13##>O*R2>-Em=6ksbEwmq{WI!rzH%I%E4$`R#>4P*w|uHF<1<6!ULfDcF|jVY%P{#vrrS-nU4JlkFd(ALQBO&~C++Q4bzi~McZgK$mX@iZNc zBE{_nrJgn^t+m6}3zIf}8!0~kX^2H)m7$j!>m&41L?C3uP+VCC+9tul`Sk29vc!_& z%XsT?we$C5?&jCWC2nCGrn?|M`{J~;@lR-U#KgZg(fizd&+P99VfGY}ZZqFZ*BMTw zc|R{x5_sQ1}6|o2bg+({j6Z0NOG`>X@uY)EM7ZwM2TQ{5D{e@Jes2y!9R#ieR+iM!?9 ziRid=a|FVlxe?FtH`lK>!Cu#{T@I5PQXIYCK zS&`^B+`8E9yIDrV_UtAEE%2V4rmtR7Vj>rT*8*~yc=Bkv?6C*oF=x$cul)aGh+^{U z+*mEzr66rl#S%L~+K+~anDFeGp8o|3JD|ieyW(12i4j-Sv?z6$8ag}C)Usv}cv~gG z^IUg>=fJNi)_gP^FVA>FfCI`k(ruyf={HpO7f$IvHw&z+aP_VYeOaFEtsu&Z^JEY9 zfYxya+;w)CV01aMOu2pJs>B%*PbWB{`Tu+95OR+U^X_71WBc?>m5pL$1Y^Bli(R(p z`OzH^6=g@DO&*O)vJgYoVBw_Qz>;#$0@wBK%;7vPn#yKj?}jsvM@L^izwpKt2Kqd0 z9={vp&%dJLr+9Ob&G_G3W4DZl>z2Wmumc$x&eU`=hB}WK|CyMWcBA?qgdF`gagL1G zg*$aj`}y-ubCDCfdtWbR1@v;2)mbD3sTgE!K6GXE1Qt?a&`u)^ZO_$rohS)m}TUcG)DbltAwEOvTiD<{wzlh7eB|JD-okCjB>pTq&Y1An)nmvKf zllMV@;b>sN= z{uFN1CZ?w3^?ULdM~%$P#L>(GJ=>4_5_$(1<=1ZAm1^e@Z$$t7m&uqnVN0|V5hT6y z7=4q#&o9UvF;9TrG#=ymj>mpSRDSyO>C2bxdVb#t$BJM?_-|I5YRi@fxDc&b7cuDT z0gVJ`VMQe+^1%lDi-xW3Wa~3k6tN+g0o8(lS)Qj^OOkuRkh+>0O1*&MzaL}qB2lIZ zI;{=TllLRHH_jox+ZM+y)W*R;KrJrMiTKhE(hhk1;mX(#Zrd8;t04BF@_<)B^1FA? zTUaKFo)vq2=MOOamAjLhhev+rBNA%WkW?65Fnf+>`SEW@x`S5nsIv&{VUDbVF?62n zDF^m7BcFJ`&O{Oc8O;{Q^9TeOVJYlU8o=Rwfy z!S&-w)3++KYnwg`KHUC8sT?Cl@9X!dQTr%cV@UIli%>ZQ-P5C>1k;eaOVEg z5mI2h5AdT>@wmDfXT&Q4O&@weSP58*AFYP z)7*%`%#YhkJlA4A%@P2fF>Q?bVkM;$C!VLJp;2u@%R}AE%Sa6;TlAx{{ZRCn^Y`Q9#Zc zI7r7DY?+`+bOZHrEPk!8xmoj&e*(dZd_7?8KWOMOhIw(p;hDuAGH-&We+SMzlgpQ{ zFU^<{9|HuVUwe9d_xNvQ=Q8>#WMgi-pfC#Nq73w$QfT4{z*Cr5tNqoaQ8_y=z=Rfu zS{Xj?{tRunyWW&ykgJQqXUMnu6taKH)Q4LzSdJTm22}2YFaWEH{EMAoo-_3I#qrCR z`w=w&cHduE>3|F5Sq_y&Fh23|A+?qyPq09>i5GtMRnLtRCn#Ue_S0b!`o9J@c6QFr z@K7q#DQD<0qi+g2&MkCRE9;a88 z&Mz*=5=Qd~PqM8(iGURUcQ$9Cc$YHF@`0Sx!qW1c%PgfHwY>YbIzring2FE#Rj%~zoNS07c<`X^W(`7 zs)DgTd`XdSHpJ)i?@>L?$bcz>6aF-Sh2zM^uHcE>XfE-qEMK49=ca~t0G`78j_>4V z+@hi_ZEairI!5jI7OXl;Fr;;V$G3OyA#;QGJlHaS)LkW~5e0zj_Vt@L*?!aPi-whb zC>f)pqKxqEhAJv6O`!jonOFQaIk}FuEIJmyZeW9z@5Prv062eq?M2Lf_M!KVr2q=Y z2+?##^7v6vm?VP#>hbgTo4Boo$rJP;zcAwCXivO9;0G~R^Kyrj zl+=t%zaM(cQi3na0h-*Pf`X+#UG;|u|NQv*GrQjL=rWCVwBj*bd|TL811kaQ zUTW1|d(6~*wx?Eb5kL(5$0YyQSWeT-ItBCI#H~meRB>vGVPP5lFL&%zS zZq*<5P&j#vGr~?^zy1r`e#nO2z_tKs6Lh-RvmPfmk=}*j(&c*HHP~Iq9*rlwpn4$2Mov6V zwFLb#U8%t~9Eh5>FarR{dKwlV?}b(Z93YG`9+ZLo!Q9A*?N|T+&_@|LVjq6TxA!6R z2XvU&6`{mmD(JE~bLPH#6B#rDM7~IDljcz@!^T|?h^F#Cei##XrT@~2g9i>oOFHm5 z)Oo?51s3&}e~vEF%i9suNEu})Tg8_yTwELPdIPS*D1*CX`z^V!M~^yTvW2b(ah*lU zUE$iky}@)ICys9@hx=uP3xaLXBmyV(_4UEJI*b`YzL&hf?#p5Oj6pvWMFSVu#J z-{034j^s>w2IoGuwn`zaDUZesr0IL;%>Pl0xJu}W2`70p$IGg#hhS-+Y;{O=5K|gN zQ#LS>TX#8&UW)=~(1`+6@}#=Ke`e(VWEfr@qX>YxgXvZ zPm?HTfJk?LAkzkoTGo%(E5^Vr%%>3tfi{3Z6ztgiX9>PXfK0HkAHs91(c!`2fR+iJ60g}EnK>#zxRubk0%+5kA&qV|f4#V`& zh9sisl#(iha>cQ7zfancrKP3m1uQ36LLC$n^PP!4WG*HyE-NGByJyTf;_5+RAt5Zt zD>PFMH_NfgtZi)mo!lfdhj1WTvj!2bf22FuiDR2UaLKGormCRe6BN`y)X4kQ(SrVt z7rm^2>(td%%HVw{cf(#jzB>gxx~MNfzeWmOAT{IS;vyp>Tl`g_<9`pY=FjZH_iNxy z4_yDQ^zRf!5Ku}&!mXDI*WobcfXCTCOal;3P~?f%ZU3?J%*6 z6wcfKXa*I$Fy2LGRycS}UQ|v2fl1Pr>zPvoFoMH%Y-dB*$o`8tb>-zG4JtQ`n?D&} zyQV?)nA-2wABj#`^Hn@kY<-VgAz)X(LItNs%_mBY6mp22^|Otu!63rGjr<@cO&W!# z0Tbao(^l%`#gCJu`^y(FxF#6`o4-9Iy7R@x1`GQx`a^c}(X!*uZRPF$v9Xa(&o7Y) zGYu&z^O!4o*b6g5D7-^jbNR6omY0`53yQ*dM+d7J^J5ktcP9AauDnwHK0(o+Pc4Sr zY*A15dA{yoJu6BJ46^kR9ebcjQ2fu$%Fm5aUhu=XJ9k7$ zhuZcQF9G&^zDVuEi`xk60D(?V=}vh;J{2WosI2V&N=}Vm0&}mh=J`izGqSPOHa0TT zRN?_#A0{Cuy;V};iQ6TSQiywWX(-YVtWa%&5CRnx$Gc!IjxIoIuL~B<@6J>WWa&oS@7{S>SnxkY z*wuLiPVr5ZdaUG?mL79&&8A@XE&i{lj5vP#jgg7zW0Eohu%#+GYA6ZM?5V;-GZM-^ zXGgyKRHI)guI`b#9pzS05o7Q>MPS?IS9Xa>NrzBxT~T|FYPz}C#ryd68y@<5YUsCS z-A)Tgb=CrpArbDSedU*TLR znQ~v56xpZRRaCj|)$DR}vbVrtD!Qw`$6>xH+U4%zBWWNG8alf6^i9WwWW3gQj1gQ& z#t80!Zfj_jx>#vNf!@D&_io!@0P4fyoplcIyLSEkQ){r&%yIK9PEI)RYt?dj(p15n zcLBwsNcehpOjMMR{#(sm9#PPV>p_1}enE2D(9|Fa&*M$zCT|7Gtt4{&yAkF5;}gbh zf`i!+YMr1!5xjY?+^Y>Z+Tc??UrG=^h0{ef2?J$cN;lTu>v0n7iRcaa4O5eo>NsG) zj*Yz@{H=WErWMsg-kx1pC~}5eJH=ka79&Vx&HPr+ts8`+m}@{h*q!{Xeox>FjS#~u zWiu=9hYwjmihj8F>^8)nH_*!~&LzmPqD>FMrv4Bo5qx@~1P0T^xr_(usJ@YXU=)gE@-DVR+##-pd5dXY=zt2+SeHTf_0st0SLi39H26LF_3=BaCncJk zUTcY4v6A&(kPTA2Ae+ARByTf^#B^ukw4%c_vc1G+FEwIm0z6w8ag)p(D|DLpIW?78 zFE4%y+BDc$P8+K~-IH~^8fXB&nqk{PrCn;La`K4Dc#lp_9a}~F$(&XGXt^<9PHLam zMl20P7U@vGc9O{PkliIb4Ljtu?%u!iKG?OGm$W029D#v>2y(&zEd`CX*F-%6#JMkA=FeAH!a$nn? z!O>BHnj&wMzdb!Y50B;s7VlfOLR&1~oN#G}w39Wk5$@)vuhY{lFl2K9g2~= zVPH+mCSv_1XB3q}x{PHjQAm?z$1)-`xP5eN?65^kS$+McjPQ%95bAc4%#e1HED}Ay zLZ%*eFqwK;PNIOEl?Fui0w>|aE+Q-YwYvHlx9e8!4;O0sAuQXqYnSh1AF)+F-(op` zBTGwx6-O4G`I(vRAZ#x!QqVj^!w|Rek1>YrVs&L@->|cpN3U&wgAtf>?z;6v@qpaY z%+RmJqndBacMCG@$C=BfkapU4NM$EdZs_KQ* zvvx_dv9Jc1zZvFpTWs$dhV(^kdyXuhtc6=aE&rn%-iDq_)u1sV(D>LFe)RVSu6+Fn zQa|!#Du4;T6$39U2#mqOxAC!3;T#sywk=yK_2h%k48Aug@lv39$MSKay8sNQ$Y9+q zeNCm>{oI!TgtqR#^dx_)6p0G~&w}?8F>`THr0DJ2tZvIHYD>^0%h@KiB{+CO0zxvp zC#?jj`Hgw}AnQ4`1O@>FVh9%599TI-m)k&M%RE|0OgQdJvWM$cJQmh;XUN_F5=SM+ z9>0~vU%da8LRdt^o>pJ=0}7tQP-`mCkHCxd<%<`di~asS?0zL}K9{;JVONE*GotRc zRzZ1pVow+LJihgtL1EAoV5Md{sRQn{w`HTvLljTD-raeBg<>&!-1qQp9JZHm$J!S zJnRtc4$-?T@Y?VcM1W~ab@Sx+BDV!w3>BWA^cwIJsU`gS#nW@6C2Hg*UD(5iyB|3o znIIn{^uV>8B(heMTbC|?p0nAljRMIxds_EM+s|Q@Xbhn)SOXp&S7XA_^Ma&~=XlOh z%79>5HI>%B)t{pK_SyGW#E*SCeBkh5K6o@5UHwV%JTzb$X)_`V1H#+_iQNa}fIR$Y zSZ`YK7zd3kQdEV*Bz+zuCNW&PE5nr3O6o=_G+e|vB9EBW(*2%Zcq0&$r?27`LgB1m z=opyql<1!ni(m*eje_>+%AC{v;YKHF?ECJe&0Un|f~X9-y7NI$hV4FPjQkhp@EJ#H z!rH)Jwn2NG7MWSL$dp>vot!?p2G~9lrk4@RvOg2lU6?6%qlR$l(kzEq+PRd|^;0E>%&+@Acu-k> zTlM^Vn8MuS?AEh9)RpjiF6fn%SGbf3X)AuRlc{qqq6Mjy}(nfx}P?w zSe>*v)7$uhkCS?HRpFV7o4Tp1C|>Q1B|AV+a`bUgcf=~aCmXjB3B$jZrzAxlUNBXp zm~*1%_P;YBBiVzwi5L0>q)U?wI~Sj)u_y(QSZt9T($ebH<}>W;%%iaRJ@@2OlCoZ> zeVKPtcisoBFQ>y0Qv5hZ=j`*xjAZ;1{beMPP7^PVx>J|9IeQ`Knd_)b^7+c;gs-)s zQ;PnIRLA{O5}EU~OyE{3eBrfk{?=WT#N|@xC=mJSBQGVt#mDq}VjluRnjI2}17E1V zF~%qv0nyI6+^ZdUkeXf1&7rbyxGb1AcP~LHI6BJOopt%*iJIdb5kAxh@iPv=#;p3;l)1tK+aS9?$nk;&k8pk@NV6?y87tsG$Uiy z%moeLBb_ zBzmD~X;%5chZh%fcZu7!r%70~6gd~It;E*zB5;#8eEa!lAEJ6n-sPj*X+M#cF!Roh zYWKmd=Pencqa%^{ciB|Cx9n+SRUld2sP2n|E6FmPq@2_fC#kCMXyUD>oq}i~n?8&! zi@q!v<1(JhbEjqpwl1?1wpsdVIJ(CTs3TfOav9U#3=v3snEU-(PbA6@oLTT7PzIu4kboevx+XdlKpL z>c#1n;?4_QLE@1jHhYIg8BJGo|GR9H7;6c2C-=R;%AM^ga&GSGlH}(0ZouJY0~mmj z_6W>#UK62>k`rG1vcz%N>5#5o_I;U^5YERiVYRIdDKLGM?)f369<;=RlU}KNAJ+(; zN>dBoeqyk8FW;T#7JPMxv_Vv%>ugG>($A+4o_#G@a}K;mq4VW->Tt1$L5#VnesaSr z1HJpTndcR+KA5qu6nN=t(=G!+{oqRc=Yh##jx<2wSD|Y z%4H(iqBJ(pn*b_BQi7%=l3IYW;LyN4x~~wW=#dQSna34Zhk5KtyQybLacm{oHE+iI ze~9-l3{P`M*f$HxxXdI2w*a}^KRGqkhpq^UKNl-1G5P+ySw?vy4!BqRx>K%y`v$?b z#U1`W(jP)IXdTE7w$el!#hq1yJ{&4B^A9n{hwz3_(X1|yWipQ*lEP)pCG>ENyU=Ku zhxzk~z+~<8Gviv-+-%%j-W&k7`j=vp28chWieL2XYtWhALuCN<-4zu+H0Turo4!a* zO(kC{k_!sycKOQm`2@&faC^NM16W^>*_i;GjLXJsr*ybYzRl8j3upZBEB%7kmTi3V z?AZt&f-&mrTpW?~;Htv_W;t%feq#D~9Z!Oqcz`>QDLE!e&+22c5;PerJb+t4@t~~L zDnJYbXk3%@ceqQRoFg|TI9*a!a<(>cLSFJ5ZbahiKTq}Tj=z5`{v>`(33F2Wp?|Y39vDt7ceZ5iBuNaN*~5h77X}lSbS4!c3>B!cYr!gbaWxGBzjx*zf)&G z?$)v3-~Air*pAKKcIWYT>Xo!3D_B=|<7=Leuk>x`lU_)6EqG*U$+Y{qmA&v%tBa1# z?uo=X8&MaQg1Bf~`}+^{PSGmRMB6k{fO#~vO66uFE;bBXq2y>=eH%c+ow(&!lS6iP zHpC~|M{Z6Nv!U~Cy7|IOIDF~$N1Dk!2jNlO;Ab#3Nu!gOavdpqr1xZvy%myDs*F*m0}6XJG8Y#kp^NgZ{Wc{=AP zPD)o0SGsf}Gk_F~VuN8)q@rxK6~`?J?+oQ(IXVJUY=A`^Zz?LnHIVSykXd>Z*biaE zS8WIlArwCSlAUsg+&hR5xy$uJeBYXRyocQh+rF@s^4X9NYrO@j<7)DLe3WSy+5%$I zbL*apQKHjVGe1#Eo46?UQ$~gUH%qvU5H~6%6j)VywAnsb^~9J$_-)5b9Mb8R~N5gADA;utQ9ELyQX^d_dJCPMdR48H}` zHNP;axt;x?<<~Fv12votx+{#mC-x z?si3%|0sv+=PcXg=hI)nMqFuCmMR=Skx<%hG}2;AMgLaps&>(tJswhf9miFEv&7o8 zv*X7BJ&9ivuA;$pe%Z>(4aC%k(7Wt%T4AiILy59ieqyK%bZf-P_)izW=wGh9ll>ao z2HZ86h%&Fm=dt+)(#2Dc`r{&t(|;v7hbp^j&`_wZNI-Y~j(_Tx6b^MXBdzP>F; zArHTeWx_oZmEK!z_C)FDfagN2q{nJM)m=o7YF!>Zvo~;VsZLwu+;gRDZKj7XM&+x&Z} zGQZl$$Bp@xtF@uKwHH0J4esulpD=LqDt%kja>?(p=Sa&zK@{i$Qp@}W6-SSPf?jyG zyk)P>S&vAO4|`hK;=)2zn`{B^wvsWLH(8%NP4_G&vxZRhYanAZDe{xM;9)DB_y*lq zH_u>i(X>l??B+6P%Mi>(cZYB;&&vFnF$;cAB-wS79PCx+6`a$j&wUP;xiv{e&+X>YXHCM5biB zy(Gmww=TTCt=BjIekE+YWZY}y#M6P0K!Zzjk?76DTRo>{})8lEARA-u8Zihk(S> zQ0?9#=L0tOjyadz!rS(brSIMCdq(V_X@E`c)rho`6PtN;_K)eArzZT2>rx`(-nr4= zK3VjfJEU4t>gqV*QT_xgSAL8;jM_e9V9~=N8p|pJezEsh|Vg&V8df5H@XI`7u<1e2|c3z?)CkKru zxL=m6EIjkeQoM7s?bH|Z#gI*#1Ppg7bIfQgX08ms+O+msh%x@YsCBJxiQb8IC!_3^ zIDMyitHUdc^Ao3>xM)|{S%=g_UYB@UZrv2N?{vhgS6kBbGvl&@)oA5+%1SjF6Z-vK zI$~)L5Do>h>Nkk&G*M=Nlu1v>d8Nb=aoXXX8M^upNo3maQIadPMjF(DnYWm99JAkAnB-|dk>&?Yc0;?^wn>-_Dg;+CDdP*^>Fn-GxjdqCtm6L$uuT?^MlU1 znUlL}BdZBNe$*gK?=9O%>$8cu147oSOrr)f+Vl+0sRz5xn%&YC=%l9zhd=6xm=KXeN25Z9GL<=jr5vFTB&ILK^}=e#|K&uCJnuWtC0?WY*0UKS`y;4a?pgM?KF({9 zKa_3IN?d$#L9t$D z>(Vu2k-H>FwT*bt?x}5Ow*;&8!cLzdSx~KHk`oqUqaU z8nm`%Ffq|x*Xyd35^?mt9v9L-WA6yMZsqgod?^h18Toamo$vG1qYnlM2(eF(pU~nY ztNR)4&`s@q@!QXjl8j{3iMIdFkh&(~W&z^9pP!%Ky;^y|j&Pln8+N%=_c zo&#bIoO3yPGjewer@h5+{m1;6Yu(Q8M{af3(9N+cdZnKhwn$Et3aLpiR3P@F5$Kko${LpsoM< z_PQbwEix*7eR1Ta3Pqd1<=H288w`4KZn&mrr%>(pAcMx+n-DnXaR9OGp~R}fYb)W4 zV$;Ox(Bts6uX`OG9mb38sn<9Q2li>4;A4op7uBkUBmd0Rw-%9biyTtgR^4=guIxV5 z_wP+rwf_8*$3=2mhu`esyYqV7v|7v9L}OT~a@@5kc5qe3G}YWGPb)HAH?tQcpo+dl-gJ=YeEWtQRrxrBV7SGl=2&=B*Ghxq6P3f+C+7uPY8 zeba)0KES^J_vSHSJRyeFNmlWh^$tMV5oI?pL)ibaz~XBU+px_@~Wz2 zoJUZKB~9@oTWNMfnh@ZpU@{Ck=u7S!<`?`*>WpOG#YA|?FXo_F5^(X~0aMY5DFb)F z?Pr;p8eZx5%oWJOIJ0J@b_I~Y6Lt>GhJRHEuc+uWTIRrp4!55S%KZE7ro)ovTTPZ5Z@#xj_?*O> z)4H0%yk!eIu!`kn&@_mxUnBR{A(PJJC1q=>tRx#F6cBlyBOc3Qoh000PpE%L652^o zsF3F|4N~aKN>LGu67ty{gsUXPztsH}tT>1jJ4wE~h|QspvK-WM$r zVi$fJNICq_0Av{cz!5#B{(V3Z)68f za2Td#MW*%4C<^@?$jB2f8l@04X@zrU)6?1RKd78xC+jK9P1VhGa?w3uazM^g;7M$m z1PmV@yc1&ngNX(})1IgDmb2d#HB8XF>z+TmZ5vzclO2VQmg+lgv>z@EH}^xAot1wL z{b6{73Ab}|8x4i=w7gtj#s6ONS*;c{0=F1hJX z-=|exlXBd8+;aOfPY(z;=Cy*sM;^YW4rb+xLb~!47<6#Cyf;ILuR1uJwi7rd)#%L?Td({<>q%XwQ<{)p}z>wI{h&kH_4|&QGsg zwEE{K-tnIJyielk15rnd!>vzTy9*rRUQ}cS%h8s1Bsp*sD>>0-lBZjjY=>oKhr_8( z`>iZ^eEn*kc~Kl5ODi91ou_<|9=kuhge-g)x!`!;R8Lkv+rn~B!3Q|nGP;JnV>@|% z^HcVx^0zN)W2B0Ff_>+t`T@cX^`s+59J&2hS`y51et%4=Y&2u@)Y0w9xfVYQ%WCe7 zLjt0gE7@lD_KKZ>|fD);{5r~M41F}@BUj~;ZshYHTQThU(9k8u|Q*WOow&Wfyzflk_Oig zE=Y+vw$+7yO}87UnLO(8g|>)47`|y0=jj+(hh!Zs@+BSaJh=8X*Gd%^%wQWzI^#vV zB9t$P3DZSU!@Mo>;`J@Lsq1DpQbL9GBz|`1^KPo%JDC39%li5&YyGWh{P_F}_wL;# zp3FYa%wp%}sH-U}PSrI8iHX1Dlc&?1hN?`k}En$Mtt|*BgJW57l?OqbPL7m8&PU;YbUYE(wR>5X~=g zM>Z+Yaq|=3#Z5QZx+%~8JM$ps!VC-ed2y?Mf7Vs~doJlb=e`n7j4W^4R&ZPB z^TAer&$G_1PWIH7TuI z`b)j?&UAS&HVr12A z41!Qw@vIysdrtDlSt825l}CGAeP+BX`+N28^|eoimSolJa+>UUOcp#u_#a*aI`V;q z8Id?69#vX$PI2xQ1)-*X_Fwhf-RpF_O|M*1IZYRl!85Ek%J)p+MBJKh{8z2CN#*O# zH#n$i*nDxApgf1d?%x8fL4Qa6$&rMm>&Lf~ar3GrMu0yIf70jx_ZPUS08Z|^@Y=L| zgM;L0M?ia%VmoUU0gWH}O`HC6pg}LY2op`f@bD(EWo=DF{+#AeL`1|5xR;`JrIV(a z0Lm1zy54GJa>-6R6JM3}Omw}W`gbS?1O-WfRQplOI@$vQbE5HN+dcl+VcWhESxh0o zvK;c07w7Rv?y?=!J<@UQ888qy*%^NN z@DPT03wHiD5H|ula6<@WpsxkxK@4sB{$1hhPag_ePRiAuk|S04w5`IDxR zvyS%9q9MK&6P2raST#ycalGasGM+Ol^(z?GkT_1-@X9XMyPy~%jH?C3(1+=~ANrbY z;(t+O3RasP_AXHFy?FHA3XRv1nXUVD?v*$%tC~GeaQ&iUleVXzE{APGRaWy@JIC)+ zvS&BMXo8RPw!RgU8kLI)qgB5cZkxvwF!b{Ya)khycn~E$kTYfdlkvbJy;!#LBqVkk6;1x~y z7ngv-MCl(Q(m*LA$9(d)8dCrbAo{AXw6qip?>81+j=mUw3)U{R0g~LqHk3pzqD>Fc znd;6n&?7nNzP%`tiGT29a0BDXV3;K7(R=vQ806~rqGotLG_yWk$$-ZQ*$*BgdKoV- zid;K+G5~)CeI!{W`fcA~QcPIOdadjK zprMjWB|^7b1rBz0)3dV!z&--R>eR8LH8*4F`hmk}R|+<=xE(74z82JZ0Ut)?VlDz< z(|Bmk^&a&vktccJH5=}_EaJUQxk$en)P@E5G3i1_TaF?kR$h>{=KPWM53*BGJ zp4yYkCqOM|Wc8W>A&p|ZIE30d39rpqhrNymEOZTy1@uV&vC#h;;KQKLTlgCRr$+30 z>wOdU1EUBD1eoHrG0kcWcpl#-)_Xo{io4@ljiFi^Uxo))jc3vjpE4Ugxj-c znKO9jbB84|-+c2wbbzg3R8DV$y}}x(vFAks3mY}&|m4@_+qhN z(9Zd4wMhIi|Js_k&hzod9gkAtu@ym8@b7^$adN(cNc=5=u zxq<@!1Wsy!gb#%`&brR$G<`jG?UE}kgY(9uv;*trtwQXvF|ItrYwoKzA3YS%%hSeL zK~dn@6+qon^rC#fIL`!$s*RYT44En;y5WO z>3?1*4m}rF*FU5UL-0$n8zA5Ljvy`lLI~BVdDps{#^I)y-JE6ds@g-xU z10l`ts`Rl#76!knozx^klYNxRn=+;i8FtuNerozz>Hn?Bc_DJ2?s9*n;-JRa@>+AA zrDa}ar+5h)QSrO?dJE!6M-})q6rG_{EEpU;Kor2d5-WWgUOE3(53w z=4pjsVgSck@V|4Ds85CpMEuyRN5etcgQ-3zGkgO6!YRRVca8W_UU%~yrMYcutx|$5 z%F$~jVw(M>%S*zC#b0h^%({PCY*WYEqGnsL%M%I;lh(H>b9bNFh|r(UoIfG*`*7a~ zYU4A}^LrvAmy_vna5h{-B$VIMWIK|ER?--`xD+D5?MKx0_$F!p`I1ld@^#+1<(tfO zUt8OA=GY~}Qp9ThX}4bpI`we=6iu5>r}_EMk4^+%egFK|j2ZWFPKxXF(R7?&Y*yy` zE^`dQrS?ftk@P=eo_M(3+01d(v!}Rc@AGV5K~@1xMoyL}0W4K%>0`eKf8JV2-BH;8 z%kX+?sJ1}&ohM%a*LEJ8-*WYl$c>Xrb2QFGIT}p>L{x`pY4Yx>xLq){gM!j`g&v3 zr9q#wJd%<^e0)b_WxrPicBG_q^n5j^B7c#SZOM}Z`C8cOjTu7@39+@S*9OmwjYXyi zcsG3fs0_J?)&_^f>9H@ld#u228~=cf#s_d=?>yWxm0U}Yj_F59Km7SLhl}+rI|YG^ z%4yrdDyM}>zd0?-_~fi_k^5>0&GA%WdWLetVW!hY91Nk7S;5>~#Hw&`=n{AE9_<5) z>0%T#iMM@R=uwX}HF0EaKk~)7q21(7^1%n|t;)|IT1nXI$Ac8BPv7%cjQ;3=bF4eygK}d!ESN-;7=PO_1(!C z!)DR>)~heF_-F6C?gM=uAhv|`yf3!;Dol!x6(|LMM=qx3^V_YSpIJ^s4EoVl=p-ET zkkU=M!=xrP-n;vmhhQ)XxpWn7hT3huH12veyF0yFdnD_|?sE;|yqOQ( zCl8vbY~BA#x5z0sm?QPgGU~eLnddUDeuz2Y^{Qt2{i7~}DBtVcooBKhi)ZvD2S)q(38=||MMC>G zY1#JcMUUBF#Ne#3;2>pqTrp_$hCMJTNeyKbMK0?~qX;Eq`$$WF5eNwEHOowpK4+ei zcJtT5vjiZznfQI(3AXTBhO*TPTWv7NQYaxPu$6^BfS#t2g>W^YqRF}I*WG;S=45S+|PKXdy)G2#U9 ze-Ib_|L~)j$mC{3vVy_%IXXBHK^2iuGB!3A)J}u`WA^^OlzQLi<7b|7OF<$4^kYmQ z0+yB*&41?rFEV_G8X{u24jbB6+w;4eN^21L?+%iqdkWs`ukb-#u_rLu1%}CfD88Xwx~tKfjeoNzn@D&xWlsf37*UzF67S6;1p< zFA;i9s;aL1czg{^$RDPS2qE~%oz`cEr$2vg8{hA2mZM|D(X2|WDv7F=if0y{Jqn_S z_qEMjVwD6$*-qMBWw9 z^8pmy7-_qDQxgdKA5sZ*>TSMO5D{?!5*{#SPNS_)&fW2|v23ksga+=mBGnHs^b!Lp z4<0`3Ia9S?I#oti)~DFz%loS2po}r!@xuQD$G9&$HuaXMK~2|rL{jpF>y66AMMgn5 zejkzPF*r^aR@DFY@sZCp`UBs;AH3EpL!?j#$)=NmdofeIeJ2aCy-s?F!uw)c-t3{< zo!P^sTJqP&l9c^7Z{EDRW&pcsOtq4oZM&+yG-;p-)aT*8wZ!#?`(WK$mg8p|z@=^IJQExNy@@(pr!R51;fB!s{ z92dmS?OYkCYs7(y8rk6Q|DIxTsMdGEV!!hC))01X|54-dRNmnF+EDX?_-F-zKWl{5 zsU)>|j;Z8ONZ*%HPfJeLktF@wIJUY!=NJveN)KnVmwokcg5N{k5+6@(A;`P?PrlL) z4(C5{rKUcA>PO7(qE~eS`_HEA?p_#rU#1c$2FDh3xeKO!Ikp!p6oW z#feyOjlCrw2J3I{Ug9KcF?IN>L7n<4Eq9h)&w-jwzau$t8wHQcF_WvO=uNy~CEl5K zd2adlCLP88Egy2-O^AxrkCw>~(i1oTLGjYknfYmt9nxm+zfoQ19e&h;3)tq3SE<9N zSHc&%0Cn$@kdo@q+$Cck)%a~XWcpI)oofvOinngRx2??zc!xQig756UcCpQm4O$HIABMBgfO~)+oGzag_x+jeW!M1 zfpLZXOKUpO8_$!nvfL(neq63BM0>pUg@e(pa|Z(*_r#Dg#Q2`ffNBBwx~FvNy@ag$&44fO zU2=kyQ6k*v}sF{lWDng-<*IiXg(b?PJx^MXhG0FrN(rj06kFQPjHb@+p@VKsv1Yk*|0d zUkD13JqfQqH)8+TNBZQ?m)oquka||SZEGX{=I)Kl`QA9TV#_wPHP>BRAwE0b!!pwzpwkVPK|ACpQ_eCEOnre9Zoc%TVEZj z;;=ljlwi5_``eiGNcajrAB&E5k;Cc>N`VvRURv+~OB$9Cf)Nr*MmsRhzj0hxPr9M2 zhzAUtX9{cFH`%^;^mU(&GwpR`g_bvwooR)g5(J$6BCpGY(eg1=t+i%1 z)2VF(QaJOrC*PA-iOM#C(N|N!fCTWG$Y#j4nvTlrM+bKs2J;2raxzRpMXJLCEh-8H zO&A=L?C*QDnbLHTC#fm`=Ajln{H`tdRBqxiWjy*=m>mVHnci){(Y#R^cvK9Sq~~|k zaUxxjb6_Y6TgZP78i3NBfE7@n@Wp2dqrxdaAZ{OY?09na^tHR)BoWW&25o-g!)fNxubiI3I zes&B3w}pfrY&J2gE%AV@;bEe3g=|8Da;_&YYC)># zE)qgAdFO$fd#q}ag$y+ow--Q|u(2Nple~8WvFl2f{I?IX)ETy%zx&iBJuwAzmj1)U z7M#r>Vuk#HcY51U9!_PA!6Jww6E|@c7HfIT;Y+61>Tl9AS^_gjg7&^oBM=1u?Yk=` zw=J}3gdOPqbH(_jlM090-F((`6KU1_ZvAp^@NkFCjUx5SEGRtWXgd~9V+Dd`RxTWg z3*P3C&wrt)h<_FtJC(w{q5u44yxe_lZYCSUM5;8>tqh{CN%_v|b`;!SP$I&K!gia*8`68{_qkXEh29+ zU*nkR;U^A`2eDlCY+98>HSMt7LJ4}>c=DS?pqLtnltVuiGEDxZr_o6 z3K)h;*Uew1LpLaR7o@+}h>tCDv?0tC$EE1)zxmChvYxNkT>BiPG4#Ci_c-7L;7Gtf z{M&<24g%2C@Oo;!O*_#u06#+YTSH^rdQ9^8nN-OO`YOtBeN1V zZzGu!OA?kUC*>%$A^yt@UHhbNx3AnVf)gK04kh(K}yfhstgOlcBHfKClytv*9A ztaKrYT^c;2D~O?9#tSAx&80MRyaQbcCYz3T-K;@@YGiUz6$=E=+T?i(wQ=MZ8b1})+xI;I z?yG+tn(ZBJ?QcM7QY|%7pQV(S{7WeWEiRBmpv3kJx?If6fb?OI z&D=+m6Mi=MeOg^W4oCsn6l58k*y$~R+g%4Fuz%|iSZ;-2@5ya|_z-g@Ohh7rL~t3;Yv3K%JoU zH4#Q}JP0yTP*UoGmQs-cTtWQmKD;y({@{@QQR_+xvQzWkBP5jMmJp~4ji8kN1d+P>x29?AX*I3)j zBPdQ18_Pi8bTUl~MY0Zoqu1Rn>!1%}XL&&Q-wV9}1D6K8n*!+Q3UyP^Z2MJ!&2pr7 z1!2tUdAuD96n;ptf((yFFU$f64fUw8!#z`H0F}PCm<{UjOTf8jo~jK5sX-c0-`zOh z)u4W`;=L;#26I0OA}N!TlTf!D7}$jDHas1`*a*z%VXd`11XeUq$iHPhOaP&jsaj(Z zDEt#$M_vZV6wIJ)0fWZoaDbUBRI2=h*h6F7XkD-{`sm2XYB+i5Mxv+@B zgMz*n1gidl$AUA)zcmlsdZ?KGD)4jIfRZ3QHFROTQ#kid?E;>3eMKJ@tkF@} z}RH84OB z3xkSCeFK~$f&{dlq`pv`UA98l!EP7IBWN!Wh zBojDap)9aeT1@`)OLwKDOl;`FMIiI^q}Gn^&zrcoZY@%H7;(y=z(63za187^u*&KtCKf*OoP!lk`8T!+(jyzs4t zhaIWvoF1~G32>DD(NRaB^J|hJ(S~3!=|nwGzJd3klk}%WjsT)m(gbH_e*XE37ZmvT z>l#>4P^znXG0a9s_Z_g0U{wp0GK23@paHCziTNEY!K1A~h5W=fZeMhJ}T@renbw98=g{B?YdugH0_s)^XTIuJltdd@8l)&;0U&@&YW z2Zu>MQRd_TD#dqxd#JF&Vgt|sLwJ~h7hHSZunqF%U@60*0mi|Cp_oLFn#A1<6=<0D ze})+B2_CiZn<^4?phRkdZXJ9vHaYq8+2AfCC1<$i0Fpb~nUIiBb^s4qMn(%A>_8VM zs~?FniI13sh{#{O4Jv>Yz)k~|OgJ!n>J9|timjcU;he9pFA}0)QIy1uXy;7e zH~(?I*-v1X)f;Ywpx#sm@gnzwtuzpb=7JISs{8{2O27X3p^k8b_5ae!t%1TlvKYe=w?7waF7dlvLFxishb6a5X^>iiP@28Vu&LjPwI#~ zMF1!CA_5D)RMoJ_WorSN!hSq^Q>s^hX#v>FY~PnSo`7})+z8x%dOT<~jE{{mGBGL5 zfjI}7!BYzhdGoIcFJJoj$h~3VhDR>K-2m7RbRPzVCPjU4j=cDJVxZ6D+7_Xx2Qv*K zGF8wE_&j)+g*^{whMxsecOv8BK#W=@OU^zXX-*NdAho7;w9moF$Owv>l}ro_$jVtM z-z>=~AUkGDJ-5lfL7+oqGW7n@JAgESn>LJwGl-D&4_`Cyv?OkEJG*j_5<*&rO%x|+ zToeh`^3O=Rcq&2<^kqP;(y-WR8R-=k@WCPhu!tJe3Ds!YV8#oDiPd}37@qv~Oh}Z4 z(!zCsh0BBwAh7ZWL%5)1AN4*Y-_KTW_m=|a~1>{C{)19 zbt5)L(BUq9k02a_)(i)Lzzt04-T(^++{%CE7=)>z{WYm2=O#JG2tf?={j&se7_7YO zPXSx?bz*{a9ON?JqXvpd>DK|dTsRt;tw3UP=0E~49kgS=yf#ZQ)`)~7!ogS4zR=B>Riyfpi0B7~aRr(V0 zeab^&MS+6G45-ITJcL~dz#+lhH`pNi4l4aD{??EMidL4~*4`!{2UN+WW5VF$8gWqC zDJd>?+Wk#^=496GW3KD!KHR`P>CrVR3;lC9#KfX6)B@zfwZH@SVk@fMd&Jo37!C`*VK#;2?@D-@a_c& z5g3jNG^-)q_X2&^spORA>}$|MN{EYtO%(jsogozQ@bJJ*yZ|k4F#_u;+_o50a4hi5 ztRLvb3&p|XfHAPd#>R#(L;ah7sPM@l0FJ=f!+?m(M?O5=-q|VCtXKlVD=Q-PhSxjQ z8ZS=t2%1tTSaG1v;zE|@8hEu=U(mC^LFBT^o+uH@&HJdQH z+uPgi_978?nb;8_h#Js^5x))2(a696skwF*r@)y5^h$Q}#DtDH$l#>X1Q5=Oii!mb zOb}uZg_eKLr|K8Fs9^$R;j|J=%nr^HBRM%4;#p8?<35{&2v?9hRsRbv2gDwvglb_M z)kiBO00@$lRp|oq=KF|S(CUi3W(ZaSE8v`<28*<`aNa^Lh6+~A@{9QBTMtcUT$+Uu zn7)o$ebZppOXWB{tJ-0Qvm*5HkZ~NsYk_5R?)kJB-S~AW-c7XIBq)NkwT@a;x15TB z<&6~R{2L}AY%UofN&@{25cz1vSHDk^z^)!YwZIk=YXSwIZ;kE=XEWAyI}oLfo+229 zmj@@}B`11Ydpm?0GUZNJW&kk-$HGP=Lg;TC6v2#TjRV+-mL~yjMEPh$Mqib{7$HOQ z3WqB*V9ALP+D#rw=htQb_7s|q3}&Dm_ZH!nmC}=P9o2Za6T+f?EgOZAm8Fw<5O^`X zBXrruan6>r3zKEmc)yMl9LqBZwYHa3&etdnOEnoS&!2(*ckG4Q8_G}O*0`Jh)fjwo zpf{(H<+Kq%g!c*1v>R$e-egPey~qrF3U9sc(=cH$kRhvCebEY7)eH>py1Hb}uj%qrYn`Hjm*zCK^_O-l}CVVB4LIs2i2`=--=rfX6-=pjOLG` z)>J6^dbpeI8$Vj407S%S$O5~{D1?*ozh>WebO$M65#YC)~%y<_C%e9kv@kc(s z3KXzso7?8*T79YtU!0-u+cQo~oP~Px2`W%|5CRYds0*CSJmCHxKtREK`84AIRu#1q zv{SS*W@D2gM>C!fM(F50s_y?}dL6l@Xr&|FLQ$aSZ5E(|Ak_wNe-$;h4#cHPX^y{F zqGW8HM+=i$j*ygBVC6%S86Zs`W3N*Z66Tl3(au&2m>6UUVcgF2w#v+Y3|EJYbBPe-pgT z%KAWxk&q4pu;Ne#F0ZMv2KSz0{qA0c#!CQ3tWK{zxLVWTP8q~Ir)I*#RAsrw3H7#$ zD=*%=txcf>J-|sV2aA6nVA?lsvRUdW8vSSkat`~5B9Brst~ai)L&i%3NtObloHF2{ zAOcaas*tG_1fp6|oNELq3y?&Isez^~S>*$*Ps6HqQFGlk=w~4HJ}}4tU@xFuye7OJ zIdw1%Wuu7@R4?dRfHq`3d*t|swhj>%8 zwOxp!m~8_s5nIQU0(INP0S9=hJC&Z9(Ld~Cf{hat{K-JKvIlsKINh z+62Hk;OJ)FPx=_c$@q&v$m1}g8NHE9Rr?!x4fC?+9)4of^VRtb za#txY&D$9niLtJY*#-~4JH!;@u1l?3V26T@gFjx_<3~K~ci|Y9dg((QC)V7v%gB#` zh88GQjH_7eC;L&Jp6;eY@74D#1U&eta`27U-F zjkqN8v&R4UOpjXp9rClR^UsWJajf=@W^a7SnG|?s){q~5T>D))i{iKD2EiVkkqO_NJJBeSY9iCzG-$U^x*wbgRMettZ5t+Leguq@Gp*_l;2;s2yp{k zE%Fa(`CvP}bkkURVF=nhO@lMbQGd;S1+G5bqOR2tRMNQK7uQKKh&T`Cm>j-uFaybF zfkDMa42xU%eix>fv2yvU3vw#$E^ykFa7`m0?#tRq*%whkhHUe$;~D49Umk1U9`9t) zwjuVNZ|hMb(q-@9An$8+2m47r-9+}QO^POV8_L1;PhxkLzZ7EC+rRnPZ>&5BzSpt#6gy1qx3wc)O;55zIdi%O_luP*3 z?W>DIVcl)+k2}_q#czInN>p)WJTDN1fB@KfoX?C@ZNUo^XlW@mg!BjoZRM~{yFZtw z@!b264rMZB_1Ym>`iB1ak8svzQO!5*em(8)Yc}h_&%45*53l^_KVEq)$(8?!Ufs@0 zti2a@_;rCe%fY>H8rk>j#|CvI_g5zBc1}F39n%_u$!37rqYTo;kL|YlGcs<_r1(M7 zUM^$JJ^cWLRqkiRMG-NRQBW8fY8!GRtbcv-Z);P`ydJ>$?K8n93M~b(dEFH9U8!N9 zIVLJvC(bC;IlCOcpJ7%tuEy@tjk%AV_JxXfQWMq{+P`^%31z?VFnXbVF$Illx+$U_ ze?qTDr-_qo0Ijd=N>>Xm~uc^LA257O0xk1?d8pH3aHng zUs^`shhm*?9nA%U<9b&I*HO_{#|JVpvezz4o?JS$KmEp+rW=F)<1vB%>f1iYo~~(J z4wCVx9(ifHTMst?3A=^FJFGkfHdwRwldbLhWirhl($G|DYvogIpz6-g&w0UlYvD!+ z%8Sv$j^k_VHZkR&=^ihmwo@|R1*x#JIo8J!w@4Vv-#M-dJDBv`cRTGfxT2-9ypji3K_CWz&2!L6obT7 z&gFItvskDWLnSRb&N&E42i{z>9LD${+^lwYVu~g5Et$({qb2BVHI6<6wlsCTl@_Il zl2CWI>18aLbFxiIQ_f=UWo429rFqpTl{~ zB^SJCJc^MpG|R?)8`Frq-+e@e!BHISaby^kceiC=4M%->T$1h)M9}`cmjX%Y z8)^hV>Fd*97r-`$9Fot>aRl+vi04hQST79;*Z%t25|yk|k|tRPP{y0OE*{%UdjO*t z7#zN+_BnZygL19Z6HjQtlfm=)NaAvi`6wj}XDS1nLun)ZQB?n!A6k&#wwieBef232 zh;#07A!xh1s;l)rEC7lnPV6zX5nmh(xQIIy&ld%&=HWJY^~3FDySZTIye2p2=P-ZD zr$F(y`+aoW6YEXThM<3f*_SII2XN~L4RLY9pa|z%wd-@|rAJ0M^qW(V6-wFttnn*Y z^FE2(Q!mh-F`GWAqXp;OI~~F|??Qj(VpA)Cn6)&%?U>Tn-&^wMBi)wcLRita$%j{u zKyXP;04e^JBPme_prx?G$X|CO@FEI~zfdyXx@ClP>v(v+@2;BQnP~G7Q=v=jr zDzL0Z&5rY32mK&66*dY=HQ>}tLJPJgs$c)9rXfeL_+=epCjfsB)>h1cOcn7{FW9m* zwt{Br0t2fZp_3~=V>o#h8C>u94?J49&PN7NA8#}+BE!cQD=>mCL{PuUPAcTrJIdLHZ69GFu?A`6X+QnIW&3w zu|ym`sc>VRsXWv^D;a#t-9WTGMRDB21%# zb)q>@&~IpAkr>dxkj3E%CgC&yp@UU=kb$VGg9>ym4N?=K6f_YGa8lpmiQ7OedYt!Z z2R@buB$Mx02O{5E&rmse6`Dt2{q?+Ff#Nu{Bp-yuE7Mgh-@qOh$=yHRJ>?LAus<^# zvT*Jvx5Nvr9o#J@cIIMTu_)iaMkQv$<`&;x@^5+aU~Kg&@Ibc#Nd9aakT^n+?u_Wp z1`LYN%1sG}cg1906lE?oWa6p{=GAAh0p|IU&HPWdjg$8aSo&R3Cr}=E4@@nLA)%hz zfU*fU__=bB@%80LSR_EV+}SZVw4}+^o%TKF=}-QK=zZ+5B_>`axmY7!-G(d|hVkV1 z0KmxbpU;<=Ed!_Y>ry~OPr@Wi?o))u?TYWE$nEJxg**tVW9|hbw_JL9Ju3nnB?~r> zwsuEJfDs$N>iBb2)eOMjg6|yot!zA2dW8?9tgQap6#867=71=iL!L!p8BzkF<#UkS zY<^UB@^#X3P0Zw^WVwIAWN#^R)CRZq3jkBoj}jOA9(SqxOjM$(8ron)3pc9rnMsiVOCEA@n_Q| z(nBxGv6!o75rnnf}I? zFXwQ-KK4vn)BNJ_`Ey1$`RmPSsS37ym;a zCS=<|-!?cXsOBlE5R5R8IU6icxx9fuX0(aaxQWX9Wy4-Fntu5eI!YEnhTKoHy$`e6ndgq1mt=tI*6&G=tp!nNj$}Ie zd%w7tu5YWmyTtwAg5A=VL6OdCeZy_uBs{%+;*ak<+*39-_UD%y4qn_R8@e?sSPNL0 zx8>}mQ>9m*#hFLWRcfi4j+HkYB2>f-3Bn&77_Gp;mb>Y~@lW zRv!2GApb48Hz7)v4j}%#gGLY zf)r`mBIF`}Lp!riP)7oJrvs=Jb^$Pe+701^4!sYcl}t+&`M$kF)BNbwPlU6c-;H{|xg{%}Ys`Xsu%xpzNSfs% z8mzy!FqPqoEa*Q(?sT37G{InNQSqzlbU2p!H3!FsuFJ!DL2V%C9~Tp2tRcSY`|6du zj*bf70m2vdl=nO1e)=}L=IhV=ex`YaqY<^Nlf>jPK&979V9J=s=z(r4>I-HT8gcu# z$OVi4LmgVApkrb}RV86=zMw6AE=5C{gSbTCVN4aK@!xw2uf*!|$FO|gnm#QQ;Luw{ zd;jn0h%}*C@g42WbzKiAWw|JLiF&`Z)_-ot@ODAg|M>_$G&4DAvq@^68p7m-cxA7N?Thn2EgPkQ|lW!jkfcs z!vf_Y{>pk{d8i{GO~@9xr0R#^r` zJubOKIQ6Z3@#(?}VDX_wj*pIkhYMX3$gz%qOE7erCdpp-Wa28(P^S6Bd_>UeJ{-jf z5M&Xz{r!86ZW@n9=h72^-B`5x>+w9tJ=~wSKS+k!(t9Us<{=?Ri;KChKY><1g)4)Q z5I?I)$x?y~Nmp^y`%0xuo8{2}{ig}M8_|wAB9(Z0Nk%rGQ-s7#b}V-s>aW0?;Yx$3 zDeP_AI@J+^WwGmy{Rv}L{-WY`TXr(v-@b(|F8WwwCJoD@KlQCHT}x$iL&&&k zkZ#txIg`pVU*mYMR+MEFEN2Jl=3ZV~$DI{DlZ%Y^V;y2%Gf3|oO-#q%r?^S2OV0l$ z&izmC0CfLO%~RaD`6@LTePH+D8k)Mp&0B7U3H)DVe+^_l#rDC|v;2wJLcu!U0vyl) zZ$9LDt-%>UEb0gh#?Ow+;-Vh~EPpe{ zQ!>JK$+*_&zSf}g+T&o6`B9p_WDF&GK}vkBq`Pn3j}`47v)wEWc&P_jyC@tYgc{@>^SR1HmyKpY-GPA&j_1C1_l1kY7BXFj|HFpMK;-Qm%QN0)D* zq((<`=u}z6Bb_57lw3GDIl1{An0T%4wy^}7*_Tl{fE`?L%?H`2*jaHM_TGZo?ajHL zOG6vN9&W?~lmZ?se%p+k?ub@@4goe{7ndle#sez1wpte&@$J9kY||UB7{`eSd6lS$ z@AjY36Ayqz4xmBIeIU*c0#>^xe-^Yf-leBQgR0k_KS34Fmc!laad!IsXd6*aQ4A%> z%E!XSjI1#m`w9{m;tC9e2V|m%dQ`R1fdJfsz6TOD9>>}1=9Qw&`5LXyTDX@k;cOMD z^k@fa9U%NK(=|NpbmJ3K=ee!zYmk<9M<%uTU|XMyD-#^Je^Fx6eeGJJ1X~)!6mD*C zc#7k1?FT(EUx+TyG*9u8&tD)l6J&l1-j@66_ZB}Wk-px7fwZoH#z*obbAP%qy9`7T z`JSip_gZ%}0h_##(w^6nP=oipooM{gZG2AJUql>GWoQ??{^M^kDc2W{7kIqU`8l!5 z{$T5%y4p(CbAOJ=^YmUASImlhME}3Y5yk=_uSHEKwHbh-(gD51{GN%Am@JG>z8I#54J;CD~-G`EK5L!7(q4yddGo{Mb}q%THtRoIs|w@}OsAhZR=5Ij5@ zR?C~cVr8#kSH^P)V7~uVl_uHC{VyOt z>H6X52Ay5*pTLIzk;+%Nh};s^RJ4?)HFK9AotAy!lBU=7d<7mXfd+ry5XxbV4(4^k zOBs0L;NR27QZ{7?dz0@Tr=?~$AltV>Y(+rH#2D*k~Vf{czf%)WvH+Rs#~qhI#l z@-VBT$GGD3bbS@jZ%F_{0VW<7%yht<@>}gO@OCyztq}c%QtZ=4#@C{0&HhjV#LB=& z`Q%pzQJpc3lnnRkHzpl>{y2l2n*f7Y7^9Df2S3f$kv z@F!I+_6sXxA1a0OFTuhvz;H)Mb0gn`BL)4VL|0ZOqr^%KyIR)0(2x51lCu-OzUZ(T z8F+5=>5d57TqCFzqn+^sw5)c0^;mb#+s4Y-S#{^d{Kl^|o-5_~(md!5f3~+dfLAwk z#x+c4_G zdW94(Fwe^GXO`yY-M5T0Gz4abyGZ6%3tL6Kd$!sLqd8L2O3y-F)@yy3RuGqXc{fzq z%LmD#T>iByDN**8FwrmK_(w?h^@dr;xsR1=O}da2T}<)N#MTeJYdCws_!tzI!pJuK zjj*1gOp3u=!HTSZ+IjTJr+G1ieB=+1?G;bKhEzM4i(GJ-sKjg002QFog{xFSx}K8; zH6L>x_Y|$MDyv+-Qzu{o3D@KS@xM_!iK3$QUVTI{UM9Biiy*x`LAEA;t9!bu^Qq%O6F23lI>_hVz* zrkt}A7M#F(3RtvF*G4Ng*7pqOP2ep1;(1wSeujkr7_1@3pDlh5*M&Eqjs}5vxW~p1 z&w;;D;)*xNHIm-KPr?S>`W+||m7i8hn4DI>`{8k-(nRK5N3+*T_Z@^`V|%_d^g%IQ zCL^0Ulzeb>vcV0oK_I(`%X#<#^Egc-PdO)bgqp z=^8UN*USgJYSst5chvWe`MI(U{d-CS1~(iRr04~_R8B$u?Zn` znn)8>NNz1b0#l6!6L$rNvoOwROXr_w%!*YT4h($6%}rBb@+Xna8NA~~$BSdN_6^tO zryAOnG84BI%I-=%bpH_~_g+r-Q*kmxki$7Y(XUJJ+%CHA7rn=?JqHV?+;q2oHeZvE zRf`6JD;|Ee0Ge6W+06NVszsp@U$nVTGxM#6tn1+DtG$6`eZSH7mVSPr|Jc7_XtxZ8 z#eQ?svI!dgJY;gkyYF^4OQYn@%i6~EmO;fT#V`1s78cK>+OBKySK2Q#MKmeqMU3N@ zMpPCSX5vw6dRsCuFb@@-5;gJ>mj0Px#sDY!daFm581`((D{o`y!vgc7rnI@m( z-ZfZJ&qppx!T|^E(hAL--t21OOFoky0Ldpvpc(96ysvS9o zB5ZZ6d>YuOKf&bZ&S%o078S96T26DbH~3Dngj+1c;CC-&gLI#NK=_*@$S}-G_PIJ$ zV_vAIt#zKNcYHL^nO&QbvOCofQZC)z@D-vX&!wCf5%uaPe^T6O9XLZYM$r6@Kk-yh z@~#&??lgsU3Etmg>Vde&;m$+wufo;_6?1Giwki#z)L0HjbzEVuyrmoT(JyM6`ZcVk zWz-+~$qg}l8C)S8C16MB7i`WwnR)+pwwMWCDUe)f7bTz2f0!fPSWb>AL&l@(2R`iiYB0hbDPl5H(UIkegiJkDI7+eA0B)Qg!oVwE5Tx838>lHcvjL5JZwj zadIS-g*IzC>47VqWmFbnOC7l?QL|~Mx2Em$)B@s%&3aqoVG!wzW=Fsw#qV1CmIpkN ziwq3G-rd=G4=}s-;KESK!;gPR;~yCgL*gqhC`_oF<44SRfwicY_vPumw0cUSO9`hE z=*>58?o=4}ufy^3mvb*{up|-Er*W2+os{4%lw^w8X~d;i{XRO{vQyHCDeyG-Ul<
}n|FSl?FJ{}7{R`*_67$$fUXd$`B*1$EAu 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 F{{dVD$#eh! literal 0 HcmV?d00001 diff --git a/event-driven-architecture/etc/eda.ucls b/event-driven-architecture/etc/eda.ucls new file mode 100644 index 000000000..4ddb8b20c --- /dev/null +++ b/event-driven-architecture/etc/eda.ucls @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/event-driven-architecture/index.md b/event-driven-architecture/index.md index 40d84004d..6c2ae99c6 100644 --- a/event-driven-architecture/index.md +++ b/event-driven-architecture/index.md @@ -6,7 +6,7 @@ permalink: /patterns/event-driven-architecture **Intent:** Send and notify state changes of your objects to other applications using an Event-driven Architecture. -![alt text](./etc/class_diagram.png "Event Driven Architecture") +![alt text](./etc/eda.png "Event Driven Architecture") **Applicability:** Use an Event-driven architecture when