SlideShare a Scribd company logo
1 of 44
Download to read offline
© 2018 MapR Technologies 1
Streaming Architecture:
Surprising Advantages
Ellen Friedman, PhD @Ellen_Friedman
Principal Technologist
26 March 2018 #BayAreaACM
© 2018 MapR Technologies 2
Contact Information
Ellen Friedman, PhD
Principal Technologist, MapR Technologies
Committer Apache Drill & Apache Mahout projects
O’Reilly author
Email efriedman@mapr.com ellenf@apache.org
Twitter @Ellen_Friedman #BayAreaACM
© 2018 MapR Technologies 3
A Shift in Thinking
•  https://%
Image 2018 by SpaceX used under creative commons lisc
https://en.wikipedia.org/wiki/File:Elon_Musk%27s_Tesla_Roadster_(40143096241).jpg
Left Image credit: Astronaut Harrison H. Schmitt. Image NASA
© 2018 MapR Technologies 4
Use	
  a	
  stream	
  instead	
  of	
  
database	
  as	
  shared	
  truth	
  	
  
© 2018 MapR Technologies 5
Traditional Solution – Use a Profile Database
POS
1..n
Fraud
detector
Last card
use
© 2018 MapR Technologies 6
What Happens as You Scale Up?
POS
1..n
Fraud
detector
Last card
use
POS
1..n
Fraud
detector
POS
1..n
Fraud
detector
© 2018 MapR Technologies 7
Shared Database Can Be A Problem
POS
1..n
Fraud
detector
Last card
use
POS
1..n
Fraud
detector
POS
1..n
Fraud
detector
Shared database
causes problems
Big problem is
disagreement about
schema and indexing
© 2018 MapR Technologies 8
Alternative: Use a Stream to Isolate Services
POS
1..n
Fraud
detector
Last card
use
Updater
card activity
© 2018 MapR Technologies 9
Add New Services via the Stream
POS
1..n
Fraud
detector
Last card
use
Updater
Card
location
history
Other
card activity
© 2018 MapR Technologies 10
Changing Implementation Through Isolation
POS
1..n
Last card
use
Updater
POS
1..n
Last card
use
Updater
card activity
Fraud
detector
Fraud
detector
© 2018 MapR Technologies 11
Changing Implementation Through Isolation
POS
1..n
Last card
use
Updater
POS
1..n
Last card
use
Updater
card activity
Fraud
detector
Fraud
detector
© 2018 MapR Technologies 12
Stream	
  transport	
  supports	
  
microservices	
  	
  	
  
© 2018 MapR Technologies 13
Stream-1st Architecture
Real-time
analytics
EMR
Patient Facilities
management
Insurance
audit
A
B
Medical tests
C
Medical test
results
People often start with event
data streamed to a real-time
application (A)
Image © 2016 Ted Dunning & Ellen Friedman from Chap 1 O’Reilly book Streaming Architecture
used with permission
© 2018 MapR Technologies 14
Heart of Stream-1st Architecture: Message Transport
Real-time
analytics
EMR
Patient Facilities
management
Insurance
audit
A
B
Medical tests
C
Medical test
results
The right messaging tool
supports other classes of use
cases (B & C)
Image © 2016 Ted Dunning & Ellen Friedman Ch 1 O’Reilly book Streaming Architecture used with permission
© 2018 MapR Technologies 15
Stream Transport that Decouples Producers & Consumers
P
P
P
C
C
C
Transport Processing
Kafka /
MapR Streams
© 2018 MapR Technologies 16
Features of Good Streaming
•  Persistent
•  Performant
•  Pervasive
© 2018 MapR Technologies 17
Legacy Applications
How Does MapR Solve This?
Big Data 1.0 Applications Next-Gen Applications
MapR Converged Data Platform
High Availability Real Time Unified Security Multi-tenancy Disaster Recovery Global Namespace
Real-Time NoQL Database Stream TransportWeb-Scale Storage
© 2018 MapR Technologies 18
Example
Files
Table
Streams
Directories
Cluster
Volume mount point
© 2018 MapR Technologies 19
With MapR, Geo-Distributed Data Appears Local
stream
Data
source
Consumer
© 2018 MapR Technologies 20
With MapR, Geo-Distributed Data Appears Local
stream
stream
Data
source
Consumer
© 2018 MapR Technologies 21
With MapR, Geo-distributed Data Appears Local
stream
stream
Data
source
ConsumerGlobal Data Center
Regional Data Center
© 2018 MapR Technologies 22
Build a Global Data Fabric
Flexibility & agility to respond as life changes
© 2018 MapR Technologies 23
MapR Streams: Replication Across Data Centers
•  Replication across data centers with
preserved offsets (unlike Kafka)
•  Opens new use cases
Example: Shared inventory in
ad-tech industry
Inventory
model
Global
analytics
Database
Local
state
Inventory
model
Local
state
Data center 1 Data center 2
Central data center
© 2018 MapR Technologies 24
Use Case: Telecommunications
Callers
Towers
cdr data
© 2018 MapR Technologies 25
Streaming in Telecom
•  Data collection & handling happens at different levels
–  tower, local data center, central data center)
•  Batch: Can take 30 minutes per level
•  Streaming: Latency drops to seconds or sub-seconds per level
•  Ability to respond as events occur
•  MapR Streams enables stream replication with offsets across data
centers
© 2018 MapR Technologies 26
Unique to MapR: Manage Topics at Stream Level
•  Many more topics on MapR cluster
•  Topics are grouped together in Stream (different from Kafka)
•  Policies set at the Stream level such as time-to-live, ACEs (controlled
access at this level is different than Kafka)
•  Geo-distributed stream replication (different from Kafka)
Stream
Topic 1
Topic 3
Topic 2
Image © 2016 Ted Dunning & Ellen Friedman from Chap 5 of O’Reilly book Streaming Architecture used with permission
© 2018 MapR Technologies 27
Use Case: Each pump has many sensors
pump
data
Dashboard
C2
topic = p1
p2
p3
p4
p5
p1
p1
p5
© 2018 MapR Technologies 28
Use topics as an organizing principle
© 2018 MapR Technologies 29
Use Case: Financial Services
Data
generator
Transactions
by_stock
by_sender
by_recipient
Transaction
exploder
stock_idx
sender_idx
recipient_idx
Query
service
© 2018 MapR Technologies 30
Modern Manufacturing
Boeing AMRC, University Sheffield
•  IoT enabled “smart tools” on
manufacture floor
•  Respond quickly to new requirements
Images by Bond Bryan Architecture, used with permission
© 2018 MapR Technologies 31
Stream vs Database
•  Can be better for flexibility and multi-tenancy
•  Streams can be 50 – 100x faster than db (no mutation)
•  Faster means less arguments about performance optimization
•  Operations are simpler so works better to share data
•  Don’t have to commit to one type of db: push updates through
stream and let each group use the db they want
© 2018 MapR Technologies 32
MapR Edge Processing with Stream Replication
Data
source
Data
source
Data
source
Report
Data
source
•  Designed to sit at IoT edge
•  Intended to run right next to data- producing
device
© 2018 MapR Technologies 33
MapR Edge
•  Small footprint cluster for remote processing
•  Intended to run right next to the data producing device
–  Unified end-to-end security policy
–  Reliable replication to cloud and data center, even with occasional
connections
•  Small but full MapR data services (files, tables, streams)
–  Normal data protection (snapshots, mirroring, replication)
–  Normal management capabilities (volumes, fine-grained access
control, monitoring)
© 2018 MapR Technologies 34
Who needs MapR Edge?
•  Connected car industry
•  Telecommunications industry
•  Hospitals and medical testing facilities
•  Anyone who benefits from global learning but needs local action
© Ellen Friedman
© Ellen Friedman
©WesAbrams
© 2018 MapR Technologies 35
MapR Edge: Improves Time to Insight
Before Edge With Edge
•  Oil & gas
•  Medical device
•  Car test & dev
48 hours
12 hours
24 hours
< 2 hours
< 15 minutes
< 5 minutes
© 2018 MapR Technologies 36
Additional Resources on Streaming:
O’Reilly book by Ted Dunning & Ellen Friedman © 2016
Read free courtesy of MapR:
https://mapr.com/streaming-architecture-using-apache-kafka-
mapr-streams/
“Streaming Microservices” by Ted Dunning & Ellen Friedman, in
Encyclopedia of Big Data Technologies. Sherif Sakr and Albert
Zomaya, editors. Springer International Publishing, in press 2018.
and
© 2018 MapR Technologies 37
Machine Learning is Everywhere
Image courtesy Mtell used with permission.Images © Ellen Friedman
● ● ●● ●● ●
●
●
●
●● ● ●●●● ●
●
●●● ●● ●●
●
●
●●
●●
●●
●
●
●
●●
●●
●
●
● ●● ●
●
●●
●
● ●● ● ●●
●
●
● ●
●
● ●
●
● ●
●
● ●● ●
●
●●
●
●
●● ●
●
●
●
●
●
● ●● ●●●● ●
●
● ●● ●
●
●
●
●
●
●
●
●
●● ● ●● ●●
●
● ● ● ●●●● ● ●●
●
● ●●●
●
●
●
●
● ●●
●
●● ●●● ● ●
●
●● ●
●
●●
●
●
●
●
●●●●
●
●
● ●
●
●
●
●
●
●
●
●● ●● ●
●
●
● ● ● ●● ●●●●●
●
●
●● ●
● ●
●
● ●●● ●● ●
●
● ●
●
●
●
● ● ●●
●
●
●
● ●
●
●
●●
●
●
●
●
●
● ●
●
●
● ● ●● ● ●● ● ●● ●
●
●
●
●
●
● ●●
●
●
●
●●
●
●● ● ●●
●
●
●● ●● ● ●●
●
●●●
●
● ●●●
●
● ●●● ●
●
●
●
●
●
●
●
●● ●
●
●●
●
●
●
●
●
● ●●
●
● ●●● ● ● ●
● ● ● ●● ●●●
●
● ●
●
●● ● ●●● ● ●●
●
●
●
●
●● ●
●
●
●●● ●
●
●
●● ● ● ●●●●
●
● ●
●
●● ●
●
●
● ●
●
●
●
●● ●●
●
●● ●
●
●● ● ● ●●●● ●● ●● ●●
●
● ●● ● ●
●
●
●●●
●
●
●
●
●
● ●● ●●●
●
● ●●
●
● ●● ●●● ●
●
● ●●
●
●
● ●●● ●● ● ●
●
●
●
●●●
●
●
●● ●●
●
● ● ●
●
● ●●●●
●
●
●
●
●
●
●
●● ●
●
●
●
●● ● ●
●
●
●
●
●
●
●● ●
●
● ●
●
●
●
● ● ● ●● ● ● ●●●● ●●● ●● ●● ●●
●
●
●
●
● ●● ●●
●
●
● ●● ●●● ●● ●● ●●●●
●
●
●●
●
●● ●
●
● ●●●●
●●
●● ●● ●●
●
●● ● ● ●● ●● ●
●
●● ●
●
●
●●
●
●● ● ●
●● ● ●●● ●●● ● ●● ●
●
● ●●
●
● ●● ● ● ●
●●
●●
● ● ●
●
● ●●
●
● ● ●
●
●
●
●●● ● ●●● ●● ● ●●
●
● ●
● ●●
●
● ●
●
● ●● ●●● ●● ●
●
●
●
●● ●
●●
● ●●● ●● ●●
●
●●●● ●● ●
●
●
● ● ●● ●●● ● ● ●
●
●● ●
●
●● ●
●
● ●● ●
●
●● ●●● ●
●
●●● ● ●● ●
●
●
●
●●
●
●
●
● ●● ●●● ●●
●
●
●
●
●
●
●
●
●
●
●●● ●●●● ●●
●
●●●
●
● ●●● ● ●● ●●
●
● ● ● ●
●
●●
●
●●●● ●
●
●● ●●●
●
●●
●
● ●● ●
●
●
●
●
●●
●
●●●● ●● ●
●
●●
●
● ● ● ●
●
●●●●
●
●●●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●● ● ●
●
●
●
●●●
●
●
●
●
●●●● ●●
● ●
●
●
●● ● ●●
●
●● ●● ●
●
●●
●
●●
●
●● ●●
●
●
●
●
●
● ●●
●
● ● ● ●● ●●●● ● ●●● ● ●●
●
●
●
●
●
● ●
●
●●
●
● ●
●
●
●
●
●
● ● ● ●●●
●
●
●●
●
●
●
● ● ●● ●
●
● ● ● ●
● ●
●
●
●
●
● ●● ●●
●●
●●
●
●● ● ●
●
●
●
● ●● ●●●● ●
●
●
●● ●●
●
●●
●
●●● ●●
●
●●
●
● ●
●
●
●
●
●
● ● ●●●
●
●●
●●●●
●
● ●
●
●●
●
●
●
●
●● ● ●●●
●
●
● ●
●
●
●●
●
●
● ●
●
●● ●
●
●● ●● ●● ●●
●
● ●● ● ●
●
●
●
●●
●
●
●
● ●
●
● ● ●●
●
● ●●
●
● ●
●
●
●
●●● ●●
●
●●●● ●●● ●● ●● ● ●● ● ● ●●
●
●● ● ● ●●● ●●
● ●
●
● ● ●●●●
●●●●● ●●● ● ●●● ●● ● ●● ●●
●
●
●
●● ●●●
●
● ●
●
●
●
●
●
●●●●
●
● ●●● ● ●●● ●●● ●● ●● ●
●●●
●
● ●●●● ●●
●
● ●● ●
●
●● ●
●
●● ●●
●
● ●
●
● ●
●
● ●● ●
●
● ●●●●●● ● ●
●
●
●● ●● ●
●
●
●●
●
●● ●
●
●●●
●
●●● ● ●● ●● ●● ●●● ● ●●●
●
●●
●
●
●● ●●● ●●
●
● ●●●● ● ●●
●
●
●● ●●
●
●● ●● ●● ●
●
●●●
●
●●
●
● ● ●●●●● ● ●●
●
●
●
●● ● ●●● ●● ●●
●
●
●
●
●
● ●●●
●
● ●
●
●●● ● ●
●
●
●
● ●
●
●
●
● ●● ●● ●● ● ●
●
●● ●●
●
●●
● ●
●
●
●
●
●
●
● ●● ● ●●● ● ●
●
●●● ●
●
●
●
●
●
●●● ●
●
● ●
●
●
●
●●●
●
● ●
●
●
●
●
● ● ● ●● ●
●
●●● ●● ●●
●
●
●
● ● ●●
●●●
●
●
●
●
● ● ●● ●
●
●
● ●● ●●
●
●
●
●●
●
●● ●
●
●
●●●
●
●● ● ●● ● ●● ●●●
●
●
●
● ● ●
●
●● ●●
●●
●
● ●●●●
●
● ●
●
●
●●
●
●
●
●
●
● ●●
●●
●●
●
●
●●
● ●
●
●●● ● ●
●
●
● ●
●
●●● ●
●
●●● ●● ● ●
●
●● ●
●
●
●
● ●
●
●
● ● ●●
●
●
●
●●● ● ●
●
●
●
●●● ●●
●
●
● ●
●
●●
●
● ●
●
●
● ●
●
●● ● ●● ● ●
●
●● ●●●
●
●● ●
● ●
●
●
●● ●
●
● ●● ● ●● ●● ●●
●
● ● ●●
●
●
●
● ●●
●
●● ● ●● ●●● ●●●● ●
●
● ●●● ● ●
●
● ● ●●● ● ●
●
● ● ●
●
●●● ●● ●●● ●●
●
●●
●● ●●● ●● ●
●
● ●
● ●● ●
●
●
●● ●
●
●
●● ●●
●
●
●
●●
●
●●● ●
●
●
●
●
●
●
● ●
●
● ●●●● ●
●
●●● ● ●●
●
●●● ●● ● ●●
●
●
●
●● ●●
●
●
●● ●
●
●
●
● ●●●
●
●
●
●
●
● ●●
●
● ●●●● ●
●
●
●
●●
●
●● ● ●● ●
●
●
●
●
●●●● ●
●
●
●
● ●● ●
●
●
●
●●
●
●
● ●
●
●
●
●● ●● ●●●●
●
● ● ●
●
● ●● ●
●
●
● ●●● ●
●
● ● ●
●
●
● ●
●
● ●●●
●
● ●
●
●●
●
● ● ●●
●
● ●● ●●●
●
●
●
● ● ●● ●●
●
●
● ●● ●●
●
●●●● ● ●● ●
●
●● ● ●● ● ●● ●
●
●
●
●
●● ●
●
●
●
●
●
●
●
●
●
●● ● ● ●
● ●
●
● ●●●● ● ●● ● ● ●● ●
●
●
●
● ●● ●●●
●
●
● ●
●
●●●
●
●
● ●
●
●
● ● ●● ●●● ●●● ●
●
●
●●
●
●● ●
●
●
●
●
●
●●
●
●
●
●
● ●●●●
●
●
● ●●●●
●
● ●●● ● ●● ●● ●●
●
●
●
●
● ●●● ● ●● ● ● ●
●
●
●
●●● ●
●
●
●●●● ●●●
●
●● ● ●
●●
●
● ●
●
●●
●
●●●
●
● ●● ●● ● ● ●
● ●
●
●●
●
● ●●● ● ●
●
●
●●
●
● ● ●●
●
● ●
●
●●● ●
●
● ● ●
●●
●● ● ●● ●●● ●● ●●●
●
● ●●●
●
● ●●● ● ●
●
●
● ●●● ●●
●●
●
●
● ●
●
●
●
●●● ● ● ●●●
●
●
●
●
●
●
●●
●
● ●●
●
●●●● ●● ●● ● ●● ● ●●●
●
● ● ●
●
●●
●
● ●● ●●●
●
● ●
●
● ● ●●●
●
●
●
●
●
●
●
●● ●
●
●● ●
●
●
●
●●
●
● ●
●
●●●● ●● ●●● ●
●
● ●●
●
●●
●
●● ●
●
● ●●
●
●
●
●
● ●
●
●
●
●
●
●
●●
●
●
●●
●
● ●● ●
●
●
●
●
●
●
● ● ●
●
●
●●● ●●●● ●● ● ●● ● ●●● ●●
●
● ●● ●
●
●●
●●●● ●
●
● ●●● ● ●
●
●
●●● ● ●
●
●●● ● ●● ●
●
●
● ●● ●●
●
●
●
●● ●● ●
●●
●
●
●
● ●●● ●
●
●
● ●
● ●●●● ●●
●
●
●
●
●●● ● ●●●
●
● ●●● ●● ● ● ●● ●● ●● ●
●
●● ●●
●
●
●
●
● ● ●● ●
●
●
●●●● ●
●
●● ●●● ●●
●
● ●●● ●● ●
●
●
● ●●●
●
● ●●
●
●●● ●
●
● ●● ●● ●● ● ●
●
●●●● ●
●
● ●●
●
●● ●● ● ●
●
●
●● ●● ●● ● ● ●● ●
●
●
●
● ●
●
● ●
●
●
●
●
●
●
●
●●
●
●●
● ●● ●●● ● ●●
●
●
● ●
●
●
●
●
●●●
●
● ●
●
●
●
●
●
●
●
●
●●●
●
● ●●
●
●●●● ●
●
●●
●
●
●
●● ● ●●● ●●● ● ●
●
●
●● ●● ●●
●
●● ●●●
●
●
●
●
●● ●●
●
● ● ●
●
● ●
●
●● ●●
●
●
●
●
●
●
●
●
●
●
●●●● ●●● ●●●
●
●● ●●
●
●
●
●
●
●
●
●●● ●
●
● ●●● ● ●●●●●
●
●●● ●
● ●●● ● ●
● ●
●
●● ●● ●●
●
● ●●
●
●●
●
●
●
●
●
●
●
●
● ●
●
●●●
●
● ● ●●● ●
●
● ●● ●●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
● ●● ●
●
●●
●
● ●
●
● ●● ●●● ●
●
●
● ●● ● ● ●● ●● ●
●
●
● ●●● ●●
●
● ●● ● ●●
●
●●
●
● ●●
●
●
●● ●● ●
●
●
●
●●
●
●
●●
● ●
●
●●●● ●
●
●
●
●●●
●
●●●●● ● ●● ● ●
●
●●
●
●
●●● ●●
●
●●
● ●
●
●
●●
● ●
●● ● ● ●
●
● ● ●
●
● ●
●
●●●
●
●●
●
●●● ●●●●
●
●●●
●
●
●● ●●● ● ●
●
●
●
●
●●
●
●● ●● ● ● ●●● ●● ●● ● ●●
●
● ●● ● ●●
●
● ●●
●
●
●
●
●
●
●
●
●
● ●●
●
●●● ● ●
●
●
●
●
●
●● ●●●● ●● ●●
●
●● ●
●
● ●●●
●
●●
●
● ●
●●● ● ●● ●● ● ●
●
● ●●
●
●
● ● ●●● ● ●● ●●● ●●●
●
●
●
●
● ●●
●
●● ● ●
●
●● ●●● ●● ●●● ●
●
●
●
●● ● ●● ● ●
●
●●
●
● ●●
●
●●●● ●
●
●●● ● ●● ●●● ●●
●
●● ●●
●
●
●
●● ●●
●
● ● ●●●●
●
●
●
● ● ●●
●
●● ●
●
●● ●●
●
● ●● ●●
●
●
●●
●
● ●● ●●
●
●
●
● ●●
●
●
●
●
●
● ●●
●
●
●
●
● ● ●● ●●
●
●
●
●
● ●● ●● ●
●
●●● ●●
●
●●
●
● ●
●
●
●● ●●
●
●● ●● ● ● ●
●
●
●
●
●
● ●●
●
●●●
●
●
●
●
●
● ●●● ●●●
●
● ●
●
●● ● ● ●
● ●●● ●● ●●●
●
● ● ●●● ●● ● ●● ●●● ● ●● ●
●
●●
●
●
●
●
● ●
●
●
●●●
●
● ● ●●●●
●
●
●
●●
●
● ●● ●● ● ●
●
●●
●
●
●● ●● ●
●
●
●
●
●
●
●● ●●
●
●
●
● ●●●●
●
●
●
●
●● ●●
●
●● ● ●● ●● ●●
●
●
● ●●● ●● ● ●●●
●
●
●
● ●
●
●
●
●●● ●● ● ●● ● ●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
● ●●● ●
●
●●● ● ●● ●
●
●
●
●
●
●
●● ●●● ● ●
●
●● ● ● ●● ● ●
●
● ●●● ●● ●
●
● ●●
●
●
●
●
● ●
●
●
●● ●●●
●
●
●
●●
● ●
●
●● ● ●● ●● ● ●
●
●●●
●
●● ●● ● ●
●
● ●
●
●
●● ● ●●● ●
●
● ●
●
●
●
●● ● ●●
●
●● ● ●
●●
●
●
●
●
●●● ●●● ●●
●
●
●
● ●
●
● ●●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●●●
●
●
●● ●
●
● ●●● ●
●
●
●
●
●
● ●
●
● ●● ● ●
●
● ●
●
●
●
●●●● ●●●
●
●
●
●●
●●
●●
●
●
● ●
●
●
●●●
●
●
●
● ● ●
●
●●● ●
●
●● ● ●● ●● ●● ●
●●
●●
●
● ●
●
●
●
● ●● ●
●
●
●
●
●
●
●
●● ●● ● ●● ●
●
● ●
●
● ●
●
●●●
●
●
● ●
●
● ● ● ●
●
●
●● ● ●● ●●
●
●
●
●
● ● ● ●● ●
●
● ●● ●● ●● ● ●
●
●●
●
●
●
●● ●● ●● ●
●
●
●● ●● ●●●●
●
●
●●
●●
●●
●
●
● ● ●● ●
●●
●●●
●
●
●
●
●
●
●●
●
● ●● ●●● ●●
●
●
● ●
●●
●
●
●
●● ●● ● ● ●● ●●
●
● ●●
●
● ●
●
● ●●●●
●
●●
●
● ●● ●● ●
●
● ●● ●
●
●
●
● ●●● ● ●●●●●
●
●●
●
●●
●
● ●●● ● ●
●
● ●●
●
●
●
●
● ●● ●● ●
●
●● ●
●
●
●●● ●●
●
●
●
●
●
●
●
● ●
●
●
● ● ●●● ●●● ●● ● ●● ●● ●●
●
●
●
●
● ●●● ●●● ●● ● ● ●●● ●
●
● ●
●
●●
●
●
●●
●●
●
●●●
●
●●●
●
● ●
●
●
●●●● ● ●● ●● ●● ●●
●
●
●
●●
●
●
●● ●
●
●●
●
● ● ●● ●●●
●
●
●
●
●
●●
●
●
●
● ● ● ● ●● ●●
●
●
●
●
●
●
● ●● ●● ● ●
●
●●
●
●
●
●
●
●
●● ●● ●● ●
●
●
●
●
●
●
●
●●● ●●●●
●
●
● ●
●
●
● ●
●
●● ●●
●
●
●● ● ●
●
● ●
●
●
●
●
●
●
●
●
● ●●● ●
●
●●
●
●●
●
●●● ●
●
● ●● ●● ●
●
●
●●●
●
●● ●
●
●
●
●
● ●●● ●●●● ●●●
●
●
●
●
●
●● ●
●
● ●
●
●
●
● ●●●●
●
● ●
●
●●
●
●
●● ●●●
●
●●●● ● ●●
●
●
● ● ●●
●
●
● ●●
●
●
●
●
●● ●
●
●
●
●
● ● ●●● ●●
●
●
●
●
●
● ●●
●
● ●
●
● ●● ●
●
●● ●● ●●
●
● ●
●
●
●
● ●● ●●
●
●● ●●● ● ●●●●
●
● ● ●●
●
● ●
●
●
●
●● ●● ●●
●
● ●● ●
●
●● ●
●
●
● ●
●
●
●
●
●
●
●●
●
● ●
●
●
● ●● ●●● ●●● ● ● ●●●
●
●●● ● ●
●
●●
●
●
●
● ●
●
● ●
●
●
● ● ●
●
● ●●●●
●
● ●● ● ●● ●●● ●● ●● ● ●● ●●● ●●● ●
●
●● ●● ●
●
● ●●
●
●
● ● ●●●
●
●● ●● ●● ●●
●
● ●● ●●
●
●
●
●●
●
● ●●● ●● ● ●
●
●● ●
●
● ●
●
●●● ●
●●
●●
●
● ●●
●
●
●
●
●●
●
●
●
●
● ●●
●
●
●
●
●
●
●● ●●●
●
●● ●
●
● ●●
●●
● ●
●●●
● ●●●●● ●● ● ●● ● ●● ●
●
● ●●●● ●● ● ●●●
●
●●● ●
●
● ●
●
● ●
●
●
●
● ●●●
●●
●
●
●
●
●
● ●
●●●
● ●●●
●
●
●
●
●
● ●
●
●
●●● ●●● ●●
●
●
●
●
● ● ●● ●
●
●●● ● ●●● ● ●● ● ●●
●
●●
●
●●●●●
●
●
●
● ●
●
● ●● ●
●
●
●
●
●
●
● ●●
●
●
●
●
● ●
●
● ●●●
●
●
●
● ● ●●● ● ● ●●
●
●
●
● ● ●
●
●
● ●● ● ●
●
● ●
●
●● ●● ●● ●●● ●
●
●● ●●●
●
●
● ●
●
● ●● ● ●●
●●●
●
●
●●● ● ●●
●
● ●● ●
●
● ●● ●● ●● ● ● ● ●
●
● ●●
●
●
●
●● ●●●●
●
●●
●
●
●
●
●
●●● ●
●
●● ●●●● ●●
●
●● ●
●●
● ●● ●● ●● ●●
●
● ●● ●● ●
●
●
●
● ●
●
●
● ●
●
●●
●
● ● ●
●
●
●
●
●●
●
●
●
● ●
●
●●
●
● ●● ●
●
● ●
●●● ●●●● ●● ● ● ●
●
● ●● ●●
●
●●● ●
●
●
●
●
●
●
●
●
●●● ● ●● ●●● ●●● ●● ● ●● ● ● ●● ●● ●
●
●
●
●
●
●
● ● ●● ● ●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●
● ●
●
● ●●●
●
●
●
●
●● ●●
●●
●●● ●● ●● ●● ●
●
●●● ● ●● ● ●● ●●● ●● ●●
●
●●● ● ●● ●
●
●●● ●
●
● ● ●●● ● ●
●
● ●
●
●●● ● ● ●●● ●
●
●
●● ●●
●
●● ●●
●
●●●
●
●
●●
●
● ●
●
●● ●
●
● ●
●
● ●
●
●
●
●● ●
●
●●● ● ● ●●● ● ●
●
●● ●●● ● ●● ● ●
●
●
●
●
●
● ●●
●
●
●
●
●
● ● ●
●
● ● ●
●
● ●●
●
●
●
● ●● ● ●
●
● ●
●
●
● ●● ●● ●●●
●
● ●●
●
●● ● ●●● ● ●
●
●
●
● ●● ●
●
●●●● ●
●
● ● ● ●●● ●●
●
● ●
●
●
●
● ●
●
●● ●● ●●
●
● ●● ●● ●
●
●
● ●●
●
● ●●●●
●
●
●
●
●
●
●
●
●
●
●
● ●●● ●● ●
●
●● ● ●● ● ● ●● ●●●
●
●
●
● ●●
●●
●
●● ●
●
● ●●● ●● ● ●
●
●● ● ●●
●●●
●
●
●
● ●
●
●●
●
●
●
●
●● ●● ● ●●●●
●
●●
●
●
● ●● ●● ●
●
●● ● ●●
●
●
●
●● ● ●● ●●●●●
●
● ●●
●
● ●●● ● ●● ●● ●●
●
● ●●
●
● ●
●
●
●
● ●
●
● ●●●
●
●
●
●
●
● ●● ●
●
●
●
●
●●
●
● ●● ●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●●●●● ●● ● ●●
●
● ● ●
●
●
●
● ●
●
● ●● ●●
●
●●
●● ●
●
● ● ●● ●● ●●
●
●
●
●●● ● ●● ● ●●● ● ●● ●● ●● ●
●
● ●●● ● ●●
●
● ●
●
● ●●
●
● ●●●
●
●
●
●●●
●
●
●● ● ●● ● ●●●●
●
● ●●
●
●
●
●
●
●●●● ● ●● ●
●
● ●
●
●
●
●
●
●
●● ●●
●
● ●
●
●● ●●● ●●●●
●
●
●● ●●● ● ●
●
●
●
●●
●
●
●
●
●
●
● ●●
●
●
● ●● ●
●
●● ●
●
●
●
●
●
●
●
●
●
●
●
● ● ●●● ●●
●
● ● ●
●
●● ●● ● ●● ● ●● ●●● ●
●
●
●
●●●●
●
●
●●●● ● ●
●
●
●
●
●● ●
●
●
● ●
●
● ●●● ● ● ●● ●● ●●
●
●
●
●● ●
●
●
●
● ●●
●
●●
●
●
●
●
●● ● ● ●● ●● ●
●
●● ●●
●
●● ● ● ●●●
●
●
●
● ●
●
● ●●● ●●● ●● ● ● ●
●
● ●
●
● ●● ●●● ● ●● ●●●
●
●●
●
●
●●
●
●● ● ●
●
●
●● ●
●
●
●
●
●
●
●● ● ● ●●
●
●
●
●
●
●
●
● ● ● ●● ●● ● ●●●●●●● ● ●
●
●●
●
●● ●● ● ●
●
● ●
●● ●●●●
●
●
●
●
●
●
●●
●
● ●●●
●
●
● ● ●
●
●
●
●
●
●
●
●
●
●
● ●●
●
● ●
●
● ● ●
●
● ●●
●
●●● ●●● ●●● ●
●
●
●●● ● ●
●
● ●● ● ●● ●
●●●●
●
● ●
● ●
●●
●
●● ●
●
● ●● ● ●●
●
● ●●●
●
● ●● ●● ●
●
●●
●
●● ●● ●
●
● ●
●
● ●● ●
●
●●●
●
●●
●●
●●
●
●● ● ●
●
●
●●●● ●
●
● ●● ●●
●
● ● ● ● ●●
●
● ●
●
● ●●● ●● ● ●
●●
●
●● ●● ●● ● ●●
●
●
●
●●●
●
●
●
●
●
●
●
● ●
●
●
●
●
●●● ● ●● ● ●
●
●●●● ●●● ●●●●● ● ● ●
● ● ●●● ● ●●
●
●● ●●
●
●
●●
●
●
●
●
● ● ●
● ● ●●●● ● ●
●
●●
●
●
●
●
● ●●● ●● ●● ●
●●
● ● ●●
●●●●
●
● ●
●
●●● ● ●
●
●
● ● ●● ●● ● ●●●
●
●● ●● ●●● ●
●
● ●
●
●
●
●● ● ●● ●●● ●●●●● ● ● ●
●
●
●
●● ● ●
●
●
●
●
●● ●●●●●● ●●
●
●●
●
●
●
●● ● ●●● ●
●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
●●
●
●
●
● ● ●
●
●
● ●● ● ●● ●
●
●●
●
●● ●
●
●●●
●
●●●●● ●●
●
●
●
●
●
●
●●●
●
●●
●
●●●●● ●●
●
●●● ●●
●
●
●●●● ●
●
●
●
●
●
●●
● ● ● ●
●●● ●● ●
●
●● ● ●
●
●● ●●
●
●● ●●●●●● ●
●
●
●●
●
●●
●
●
●
● ●● ●
●
●●● ●● ●
●
● ● ●
●
●
●● ●●
●
●
●
● ●●●
●
●
●
● ●●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●●
●
● ●
●
●
●
●
●
●
●●
●
●
●● ● ●● ●● ●● ●●●
●
●
●●● ●
●
●
● ●● ●● ● ●●● ●●
●
●
●
●
●●
●
●
●
●●
●
● ● ●●
●
● ●● ● ●● ●
●
● ●●● ● ●●
● ●
●
●
●
●
●
● ● ●● ●
●
●●●
●
●●● ●
●
● ● ●●
●
●
●
●
●
●
●
●
●
●
● ● ●●●● ● ●● ●●● ● ● ●
●●
●
●
● ●●● ●●●
●
● ● ●●
●
● ●
●
●● ● ●
●
●
●●
●●
● ●●● ●●● ●
●
●
●● ● ●●● ●
●
● ● ●●● ●
●
● ●●
●
●
●
●
●
●
●● ●●
●
●●
●
●
● ●●● ●●
● ●●
● ●●
●
●● ● ●●●
●
● ●● ●● ●●
●
●●
●●
● ● ●
●
●●
●
●
●
●●● ●
●
●
●
● ●
●
● ● ●
● ●
●
● ●●
●
●●●● ●●
●
●
●
●
●
●
●● ●●
● ●
●
●
●●● ●● ● ●
●
● ●
●
●
●
● ●
●
●
● ●● ● ●● ● ●●● ●
●
●● ●
●
●
●
●
●●
●
●
●●●
●
●
●●
●
● ● ●● ●● ●●● ●● ●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
● ●
●
●
● ● ●● ●
●
● ●
●
●● ● ● ● ●
●
●●
●
●
●
● ●
●
● ●● ● ●● ● ● ●● ●
●
● ●●
●
●● ●
●
●
● ●●
●
●
●●● ●●
● ●
● ● ●●● ● ●●●
●
●● ●● ●●● ●●● ●
●
●
● ● ●
●
● ●
●
● ● ●
●
●
●●
●
●
● ●● ●● ●●● ● ●
●
●
●
●
●●● ● ●● ●
●
●● ●●●●
●
●●
●
●●
●
● ●
●●●● ●●
●
● ●●●
●
● ●● ● ●●●
●
●●
●
● ●
●
●
●●●
●
● ●● ●
●
●
●
●●
●
● ●●
●
●
● ●●
●
● ●
●
● ●●
●
●
●
●
●
●● ●●
●
● ●● ●● ●● ●● ●
●
● ●
●
●
●
●
●● ●
●
●
● ● ●●● ●
●
●
●
●●
●
● ● ●
●
●
●
●● ●
●
●
● ● ●
●
●
●●
●
●● ● ●●●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
● ●
●
●
●
●●
●
● ●
●
●
● ●
●
●
●● ●●●● ●● ●●● ●● ●● ●
●
●● ●
●
●
●
●
●
●
●
●
● ● ●● ● ●●● ●● ●●
●
●●
●
●
●
● ●
●
● ●●●● ●●● ●● ●●
●
● ●●
●
●
●
●
●●● ●
●
●
●
●●
●
●●● ● ●● ●● ●
●
●
●
●
●
●● ●
●
● ●●
●
●
●
●● ●
●
●● ● ●
●
●
●
● ●
●
● ●● ●
●
●
● ●
●● ●
●
●●●
●
●●
●
● ● ●● ● ●
●
●
●
●● ●● ●● ●
● ●
●●
●
●
●
● ●● ●● ●
●
● ●●●● ●● ●
●
●● ● ● ●● ●●
●
●
●
● ●●● ●● ●●●
●
●
●
●
●
●
●
●
● ● ●●
●
● ●●● ●
●
●
●
●●
●
●●● ●
●
●
●● ●● ●●● ●
●
●
●
●
●
●●
●
●
●
● ●● ● ●● ●●● ● ●
●
●
● ●
●
● ●● ●●●
●
● ●
●
●● ● ●● ●● ●●● ●
●
● ● ●● ●●
●
●●
●
●● ●● ●● ●
●
●
●
●
●
●●● ●●
●
●●● ●●
●
●●
●
●
●●●● ●
●
●
● ●●●
●
● ● ●● ●● ●●
●
●
●
●
●●
●●
●
●●
●
●● ●
●
●
●
●
●
●
●● ●
●
● ●●●
●
●●
●
●
●●● ●● ● ●● ● ●●●●● ●●
●
●●● ● ●● ●●●
●
●●● ●
●
●●●
●
●
●
●
●●● ●● ●
●
●
●
●● ●●
●
●
●●
●●
●
●
●●
●
●●● ●●● ●
●
● ●
●
● ●● ●
●
● ●
●
●
●●
●
●●
●
●●●
●
●
●
● ●
●
● ●
●
●
● ● ●●●● ●
●
●● ●● ●● ●
●
●●● ● ●● ●
●
●● ●● ●● ●● ●
●
●
●
●● ●●●● ●● ●
●●●
●
●
●●
●
●
●
● ●
●
●● ●
●
●
●●● ● ●● ●●●● ● ●● ●● ●●● ●● ● ●
●
●
●
● ●●● ●●
●
●
●
●
●
●
● ●●● ● ●● ●● ●●● ●●
●
●●
●
●●●●
●
●● ●
●
●
●
● ● ●●●● ●●● ● ●●● ●●
●
●●
●
●
●
● ●
●
● ●
●
●●
●
● ●●
●
●
●●
●
●
●
●● ●●
●
●●● ●
●
● ●● ●●
●
●● ●
●
●● ●
●
●
● ●● ●
●
●●
●
●
●
●●
●
●●
●
●
● ● ●●
●
●
●
●●
●
● ●
●
●● ●●
●
● ● ● ●●● ●●
●
●
●
●
● ●● ●
●
●● ●
●
●
●
●
●
●
●
● ● ●
●
●● ● ●
●
●●
●
● ●●
●
●
●
●
●●
● ● ●● ●●● ●
●
●
●
●
●
●
●●● ●
●
●
● ●
●
● ●
●
●
●
●
●
●
● ●● ●● ● ●●● ●●
●
●
●●
●
●
●
●● ●● ● ●● ●
●
●
●
●
●● ●
●
●●
●
●
● ● ●● ●●● ●● ●● ●●● ● ● ●●
●●●●● ● ●●●● ●
●
●●
●
● ●● ●● ● ●● ● ●● ●●
●
●
●
●● ● ●●●
● ●
●
●
●
●
●
●
●
● ●
●
●●● ●● ●●●● ●●
●
●
●
●
● ●● ●● ● ●●
●
●
● ●●
●
●
●
● ● ●● ●
●
●●
●
●
●
● ● ●●● ●
●
●
●
●●
●
● ●●● ●●●
●
● ●● ●●●●
●
● ●●
●
● ● ●●●
●
●● ●●● ●
●
● ●● ● ●
●
●
●
●●
●
● ● ●
●
●
●
●
●
● ●●● ●
●
● ● ●
●●
●
●
● ●●● ● ●
●
●●● ● ●●
●
● ●● ● ●●
●
●● ●●● ● ●●● ●
●
●
●
● ●● ●● ●● ●
●
● ●
●
●
● ●
● ●●● ●●
●
● ●
●
●
●
●
●
● ●●
●●●●
●
●●
●
● ● ●
●●
●
●● ●●
●
●
●
●
●
●
● ●●
●
●
●
●
● ●● ●● ●● ● ● ●
●
●
●
●● ●● ●●●● ●
●
●
●
●
●
●● ●●● ●● ●● ● ●
●
●●
●
●
● ●
●
● ●●
●
● ●
●
●●
●
●
● ●● ●●
●
●● ●
●
●
●
● ●
●
●● ●
●
●●
●
●
● ●
● ●
●
●
●
●● ●
●
●● ●●● ● ●●
●
●
●
● ●● ●●●● ●
●
●
●
●
● ●
●
●● ● ●● ● ●
●
● ● ●●● ●●●
●
●
● ●
●●
● ●
●
●
●
●
●●
●
●
● ●● ●●●
●
●● ●● ● ● ● ●● ●●● ●● ●● ●
●
● ● ●●
●
●●
●
●
●
●
●
●
● ●●●
●
●● ●● ●●●
●
● ●● ● ● ●
●
●●● ● ●● ●●●● ●●
●
●
●
●● ●●
●
●
● ● ●● ●
●
●
●
● ●
●
●
●
●
●
●
●
●
●●● ● ●
●
●
●
●
● ●● ● ●
●
●
●
●●● ● ●
●
●
●
●
●
●
●
●
●● ●● ●●
●
●
●
● ●●●
●
●
●
●
● ●●
●
●
●
● ●
●
●● ●
●
● ●● ●
●
● ●● ●●
●
●●●●
●
●
●
●
●●●
●
● ●● ●
●
●
●●
●
●● ●
●
●
●●●
●
●● ● ●● ●●
●
●● ● ●● ●● ●
●
● ● ●● ● ●● ● ●
●
●●● ●●
●
●
●
●
● ● ●●● ●
●
●●
●
●●●
● ●
● ●
●
●
●
●●
●
●
●
●
●
●
●● ●
●
● ●● ●●●
● ●
● ●● ●● ● ●●
●
●●● ●●
●
●
●
●
●
●
●
●
● ●● ●●●●● ● ●● ●● ●●
●●
●● ● ● ●● ● ●● ●
●
●
●
●
●
●
● ● ●● ● ● ● ●
● ●● ● ●
●
●● ● ●
●
●● ●●
●
● ● ●●●●
●
● ●
●
●
●
●
●
●● ●● ●
●
● ● ●
●
● ●●
●
●●
●
●
●
●
●
●● ●●
●
● ● ●● ●
●●●
●
● ● ●● ●
●
●
● ●
●
●● ●●
●
●●● ●●● ● ●●
●
● ●●●
●
● ● ●
●●
●
●
● ●●● ● ● ●
●
●
●
●●
●
●● ●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
● ● ●
●
●
●
●
●
●
●● ●● ●
●
●●● ●
●
●
●
●● ●●
●
● ●
●
● ● ●●● ●
●
●
●
●
●
●
●
● ● ● ●
●
●● ● ●
●
●● ●●●● ●● ●
●
● ●● ●● ● ●
●
●●
●
●
●● ●
●
● ●
●
●
●
●●
●
●● ● ● ●●
●
●
●
● ●
●
● ●
●
●
● ● ●●
● ●
● ●● ●●● ●
●
●
● ● ●●
●
●
●
● ●●
●
●
●
● ●
●
●● ●●
●
●●
●
●●● ●
●
●
●● ●●● ●●
●
●●
●
●
● ●
●
●● ●●● ●●● ●● ●
●
●
●
●
●
●
●
●
●●● ● ●●● ●● ●● ●
●
●
●
●
● ●●● ● ●
●●●●● ●● ●● ●
●
● ● ●
●
● ●●
●
●
●
●●
●
●● ● ● ● ●● ●
●
●
● ●●
●●
●
●
●
●●
●
● ● ●
●
●● ●● ●●
●
●
●
●
●
●
●
● ●●●●●
●
● ●● ● ●
●
●
●
●● ● ●●
●
● ●●
●
●
●
● ●●
●
●
●
●
● ●
●
●
●
●●●
●
●
● ●● ●●
●
●●●●
●
● ● ●● ●● ●●
●
●
●
●
● ●● ●●●
●
●
●
●● ●
●
●●
●
● ●● ●● ●●● ●●●
●
● ●
●
● ● ●
●
● ●
● ●● ●● ●●
●
●
●
●
● ●
●
● ●●● ●
●
●
●●●
●
●
●
●● ●● ● ●● ● ●
●
● ●
●
●
● ●
●
● ● ●
●
●
●
●● ●●
●
●
●
●
● ●●
●
●
●● ●
●
●●●
●
●
●
● ●● ●●●
●
●
●
●●●● ●● ● ●
●
●
●
●● ● ● ● ●●
●
●
●
●
●
●
● ● ●
●
●●
●
● ●
●
●
●
●● ●
●
● ● ●●● ● ●
●
●
●●
●
●●
●
●
● ●●● ●●● ●● ●● ●●
●
● ●●●●● ●
●
●
●●
●●● ● ● ●● ●
●
● ● ●●●
●
● ●
●
●
● ●●
●●
●
●
●
●
●
●● ●●●●●
●
● ●
●
● ●●
●
●●● ●
●
● ● ●
●
● ●
●
●●● ●
●
● ● ●● ● ●● ● ●●
●
●
● ● ●●
●
●
●●
● ●
●
●
●
●
●● ●
●
●● ●
●
●
● ●
●
●●●
●
● ●●
●
●
●
●
●
●
●
●
●●●
●
● ●● ●
●
●●
●
●
●
●
●
●●●
●
●
●
● ●
●
●
●●● ● ●● ● ●● ●● ● ●
●
●
●
●
●
●●
●●
●
●●● ●●● ●
●
● ● ●
●
●● ●
●
●●
● ●
●● ●
●
●●● ●
●
● ●
●
●
● ● ●
●
● ●●●
●
●●
● ● ●● ●●●●
●
●● ●
●
●
●●
●
● ●● ●● ●● ●●●
●
●
●●●
●
●● ●
●
●● ●●
●
●
●
●●
●
●
●
●
●
●
● ● ● ● ●●
●
●● ●●● ● ● ●●
●
●
●
●
●
●
● ●●
●
●●
●
●● ●
●
●
●
●
●
●● ● ●●● ● ● ●
●
●
●
● ●●●● ●● ●● ● ●●● ● ●● ●●● ● ●
●
●
●
●
●● ● ●●●●
●
●
●
●
●
● ● ●●● ●●
●
● ●●●●
●
● ●●
●
●
●
● ●● ● ●
●
●
● ●
●
● ● ●●● ●● ●
●
●
●
● ●●
●
● ● ●●● ●
●
● ●
●
●
●
● ●
●
●
●
● ●● ● ●● ●●
●
●
●
●
●
● ●●●
●
● ●●
●
●●
●
●● ● ● ●●●
●
●
●
●
●
● ●● ●
●
●
● ●●●
●
●
●
●
●●● ●●● ●●
●
●● ●
●
●
● ● ●
●
●
●
● ●
●
●
●
● ● ●●
●
● ●
●
●
●
● ●● ●● ● ●●● ● ●
●
●● ●● ● ●
●
●
●
●● ●● ●●
●
●
●● ● ●
●
● ●●●
●
●
● ●● ● ●●● ● ● ●●
●
●
●● ●
●
● ●
●
●
●
●
●
● ●●● ●●
●
● ●
●
●● ●
●
●
●● ●
● ●
●●
●
●● ●●
●
●
●
●● ●● ●
●
● ●● ●●●
●
●
●
● ●
●
●
●
● ●
●
●● ●
●
●
● ●● ●● ● ●● ●
●
●
● ●
●
● ● ●● ● ●●●
●
●●
●
●
●
●● ●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
● ●
●
●●●● ●
●
● ●● ●
●
●● ●
●
●
●
●● ● ●
●
● ●● ●
●
●● ●●
●
●
●● ●● ● ●
●
●
● ● ● ●●● ● ●●
●
●●
●
●●
●
●
●
● ●● ●
●
● ●●● ● ● ●
●
●●● ●● ●
●
●
●
● ●●
● ●
●
●
●
●●
●●
●
●
●●● ●● ●●● ● ●● ●● ●●
●
●●● ●
●
●
●● ● ● ●●
●
● ●●● ●
●
●●● ●●● ● ●● ● ● ●
●●
●● ● ●
●
●
●
●
● ●● ● ●
●
● ●●
●
● ●●
●
●●●
●
● ●● ●●
●
●
●
● ●
●
● ●
●
●●●●● ●● ● ●●●
●
● ●●
●
●
−2 0 2 4
0246
Raw Scores
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
● ●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
0.0 0.5 1.0
0.00.51.0
Q−Q plot
© 2018 MapR Technologies 38
How do you make machine learning
successful?
© 2018 MapR Technologies 39
Is it the algorithm? the model? the ML tool?
https://mapr.com/blog/tensorflow-mxnet-caffe-h2o-which-ml-best/
© 2018 MapR Technologies 40
90% of effort in successful
machine learning isn’t the
algorithm or the model…
It’s the logistics
© 2018 MapR Technologies 41
New book: how to manage machine learning models
Download free pdf or read free online via @MapR:
https://mapr.com/ebook/machine-learning-logistics/
“Rendezvous Architecture” by Ted Dunning & Ellen Friedman, in
Encyclopedia of Big Data Technologies. Sherif Sakr and Albert
Zomaya, editors. Springer International Publishing, in press 2018.
and
© 2018 MapR Technologies 42
Please support women in tech – help build
girls’ dreams of what they can accomplish
© Ellen Friedman 2015#womenintech #datawomen
© 2018 MapR Technologies 43
From one “woman in tech”:
Thank You !
Image © Ellen Friedman
© 2018 MapR Technologies 44
Contact Information
Ellen Friedman, PhD
Principal Technologist, MapR Technologies
Committer Apache Drill & Apache Mahout projects
O’Reilly author
Email efriedman@mapr.com ellenf@apache.org
Twitter @Ellen_Friedman #BayAreaACM

More Related Content

What's hot

Graph Databases and Machine Learning | November 2018
Graph Databases and Machine Learning | November 2018Graph Databases and Machine Learning | November 2018
Graph Databases and Machine Learning | November 2018TigerGraph
 
Graph Gurus Episode 3: Anti Fraud and AML Part 1
Graph Gurus Episode 3: Anti Fraud and AML Part 1Graph Gurus Episode 3: Anti Fraud and AML Part 1
Graph Gurus Episode 3: Anti Fraud and AML Part 1TigerGraph
 
Graph Gurus Episode 1: Enterprise Graph
Graph Gurus Episode 1: Enterprise GraphGraph Gurus Episode 1: Enterprise Graph
Graph Gurus Episode 1: Enterprise GraphTigerGraph
 
Plume - A Code Property Graph Extraction and Analysis Library
Plume - A Code Property Graph Extraction and Analysis LibraryPlume - A Code Property Graph Extraction and Analysis Library
Plume - A Code Property Graph Extraction and Analysis LibraryTigerGraph
 
Hadoop and R Go to the Movies
Hadoop and R Go to the MoviesHadoop and R Go to the Movies
Hadoop and R Go to the MoviesDataWorks Summit
 
Graph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AI
Graph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AIGraph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AI
Graph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AITigerGraph
 
Graph Gurus 15: Introducing TigerGraph 2.4
Graph Gurus 15: Introducing TigerGraph 2.4 Graph Gurus 15: Introducing TigerGraph 2.4
Graph Gurus 15: Introducing TigerGraph 2.4 TigerGraph
 
Fast Parallel Similarity Calculations with FPGA Hardware
Fast Parallel Similarity Calculations with FPGA HardwareFast Parallel Similarity Calculations with FPGA Hardware
Fast Parallel Similarity Calculations with FPGA HardwareTigerGraph
 
Using Graph Algorithms for Advanced Analytics - Part 2 Centrality
Using Graph Algorithms for Advanced Analytics - Part 2 CentralityUsing Graph Algorithms for Advanced Analytics - Part 2 Centrality
Using Graph Algorithms for Advanced Analytics - Part 2 CentralityTigerGraph
 
Transform Your Telecom Operations with Graph Technologies
Transform Your Telecom Operations with Graph TechnologiesTransform Your Telecom Operations with Graph Technologies
Transform Your Telecom Operations with Graph TechnologiesNeo4j
 
Network and IT Ops Series: Build Production Solutions
Network and IT Ops Series: Build Production Solutions Network and IT Ops Series: Build Production Solutions
Network and IT Ops Series: Build Production Solutions Neo4j
 
Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...
Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...
Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...Charles Sonigo
 
Neo4j GraphDay Seattle- Sept19- in the enterprise
Neo4j GraphDay Seattle- Sept19-  in the enterpriseNeo4j GraphDay Seattle- Sept19-  in the enterprise
Neo4j GraphDay Seattle- Sept19- in the enterpriseNeo4j
 
Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...
Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...
Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...TigerGraph
 

What's hot (14)

Graph Databases and Machine Learning | November 2018
Graph Databases and Machine Learning | November 2018Graph Databases and Machine Learning | November 2018
Graph Databases and Machine Learning | November 2018
 
Graph Gurus Episode 3: Anti Fraud and AML Part 1
Graph Gurus Episode 3: Anti Fraud and AML Part 1Graph Gurus Episode 3: Anti Fraud and AML Part 1
Graph Gurus Episode 3: Anti Fraud and AML Part 1
 
Graph Gurus Episode 1: Enterprise Graph
Graph Gurus Episode 1: Enterprise GraphGraph Gurus Episode 1: Enterprise Graph
Graph Gurus Episode 1: Enterprise Graph
 
Plume - A Code Property Graph Extraction and Analysis Library
Plume - A Code Property Graph Extraction and Analysis LibraryPlume - A Code Property Graph Extraction and Analysis Library
Plume - A Code Property Graph Extraction and Analysis Library
 
Hadoop and R Go to the Movies
Hadoop and R Go to the MoviesHadoop and R Go to the Movies
Hadoop and R Go to the Movies
 
Graph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AI
Graph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AIGraph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AI
Graph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AI
 
Graph Gurus 15: Introducing TigerGraph 2.4
Graph Gurus 15: Introducing TigerGraph 2.4 Graph Gurus 15: Introducing TigerGraph 2.4
Graph Gurus 15: Introducing TigerGraph 2.4
 
Fast Parallel Similarity Calculations with FPGA Hardware
Fast Parallel Similarity Calculations with FPGA HardwareFast Parallel Similarity Calculations with FPGA Hardware
Fast Parallel Similarity Calculations with FPGA Hardware
 
Using Graph Algorithms for Advanced Analytics - Part 2 Centrality
Using Graph Algorithms for Advanced Analytics - Part 2 CentralityUsing Graph Algorithms for Advanced Analytics - Part 2 Centrality
Using Graph Algorithms for Advanced Analytics - Part 2 Centrality
 
Transform Your Telecom Operations with Graph Technologies
Transform Your Telecom Operations with Graph TechnologiesTransform Your Telecom Operations with Graph Technologies
Transform Your Telecom Operations with Graph Technologies
 
Network and IT Ops Series: Build Production Solutions
Network and IT Ops Series: Build Production Solutions Network and IT Ops Series: Build Production Solutions
Network and IT Ops Series: Build Production Solutions
 
Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...
Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...
Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...
 
Neo4j GraphDay Seattle- Sept19- in the enterprise
Neo4j GraphDay Seattle- Sept19-  in the enterpriseNeo4j GraphDay Seattle- Sept19-  in the enterprise
Neo4j GraphDay Seattle- Sept19- in the enterprise
 
Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...
Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...
Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...
 

Similar to Surprising Advantages of Streaming - ACM March 2018

DataOps: An Agile Method for Data-Driven Organizations
DataOps: An Agile Method for Data-Driven OrganizationsDataOps: An Agile Method for Data-Driven Organizations
DataOps: An Agile Method for Data-Driven OrganizationsEllen Friedman
 
Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...
Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...
Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...Matt Stubbs
 
Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...
Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...
Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...Matt Stubbs
 
Container and Kubernetes without limits
Container and Kubernetes without limitsContainer and Kubernetes without limits
Container and Kubernetes without limitsAntje Barth
 
7 Habits for Big Data in Production - keynote Big Data London Nov 2018
7 Habits for Big Data in Production - keynote Big Data London Nov 20187 Habits for Big Data in Production - keynote Big Data London Nov 2018
7 Habits for Big Data in Production - keynote Big Data London Nov 2018Ellen Friedman
 
Designing data pipelines for analytics and machine learning in industrial set...
Designing data pipelines for analytics and machine learning in industrial set...Designing data pipelines for analytics and machine learning in industrial set...
Designing data pipelines for analytics and machine learning in industrial set...DataWorks Summit
 
Big Data LDN 2017: Real World Impact of a Global Data Fabric
Big Data LDN 2017: Real World Impact of a Global Data FabricBig Data LDN 2017: Real World Impact of a Global Data Fabric
Big Data LDN 2017: Real World Impact of a Global Data FabricMatt Stubbs
 
Containers and Kubernetes without limits
Containers and Kubernetes without limitsContainers and Kubernetes without limits
Containers and Kubernetes without limitsAntje Barth
 
MapR Edge : Act Locally Learn Globally
MapR Edge : Act Locally Learn GloballyMapR Edge : Act Locally Learn Globally
MapR Edge : Act Locally Learn Globallyridhav
 
Where is Data Going? - RMDC Keynote
Where is Data Going? - RMDC KeynoteWhere is Data Going? - RMDC Keynote
Where is Data Going? - RMDC KeynoteTed Dunning
 
How to Get Going with Kubernetes
How to Get Going with KubernetesHow to Get Going with Kubernetes
How to Get Going with KubernetesTed Dunning
 
Big Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETES
Big Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETESBig Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETES
Big Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETESMatt Stubbs
 
Geo-Distributed Big Data and Analytics
Geo-Distributed Big Data and AnalyticsGeo-Distributed Big Data and Analytics
Geo-Distributed Big Data and AnalyticsMapR Technologies
 
Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...
Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...
Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...TigerGraph
 
CEP - simplified streaming architecture - Strata Singapore 2016
CEP - simplified streaming architecture - Strata Singapore 2016CEP - simplified streaming architecture - Strata Singapore 2016
CEP - simplified streaming architecture - Strata Singapore 2016Mathieu Dumoulin
 
Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...
Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...
Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...MapR Technologies
 
Machine Learning Success: The Key to Easier Model Management
Machine Learning Success: The Key to Easier Model ManagementMachine Learning Success: The Key to Easier Model Management
Machine Learning Success: The Key to Easier Model ManagementMapR Technologies
 
Predictive Maintenance Using Recurrent Neural Networks
Predictive Maintenance Using Recurrent Neural NetworksPredictive Maintenance Using Recurrent Neural Networks
Predictive Maintenance Using Recurrent Neural NetworksJustin Brandenburg
 
Streaming patterns revolutionary architectures
Streaming patterns revolutionary architectures Streaming patterns revolutionary architectures
Streaming patterns revolutionary architectures Carol McDonald
 

Similar to Surprising Advantages of Streaming - ACM March 2018 (20)

DataOps: An Agile Method for Data-Driven Organizations
DataOps: An Agile Method for Data-Driven OrganizationsDataOps: An Agile Method for Data-Driven Organizations
DataOps: An Agile Method for Data-Driven Organizations
 
Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...
Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...
Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...
 
Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...
Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...
Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...
 
Container and Kubernetes without limits
Container and Kubernetes without limitsContainer and Kubernetes without limits
Container and Kubernetes without limits
 
7 Habits for Big Data in Production - keynote Big Data London Nov 2018
7 Habits for Big Data in Production - keynote Big Data London Nov 20187 Habits for Big Data in Production - keynote Big Data London Nov 2018
7 Habits for Big Data in Production - keynote Big Data London Nov 2018
 
Designing data pipelines for analytics and machine learning in industrial set...
Designing data pipelines for analytics and machine learning in industrial set...Designing data pipelines for analytics and machine learning in industrial set...
Designing data pipelines for analytics and machine learning in industrial set...
 
Big Data LDN 2017: Real World Impact of a Global Data Fabric
Big Data LDN 2017: Real World Impact of a Global Data FabricBig Data LDN 2017: Real World Impact of a Global Data Fabric
Big Data LDN 2017: Real World Impact of a Global Data Fabric
 
Containers and Kubernetes without limits
Containers and Kubernetes without limitsContainers and Kubernetes without limits
Containers and Kubernetes without limits
 
MapR Edge : Act Locally Learn Globally
MapR Edge : Act Locally Learn GloballyMapR Edge : Act Locally Learn Globally
MapR Edge : Act Locally Learn Globally
 
Where is Data Going? - RMDC Keynote
Where is Data Going? - RMDC KeynoteWhere is Data Going? - RMDC Keynote
Where is Data Going? - RMDC Keynote
 
How to Get Going with Kubernetes
How to Get Going with KubernetesHow to Get Going with Kubernetes
How to Get Going with Kubernetes
 
Big Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETES
Big Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETESBig Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETES
Big Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETES
 
Geo-Distributed Big Data and Analytics
Geo-Distributed Big Data and AnalyticsGeo-Distributed Big Data and Analytics
Geo-Distributed Big Data and Analytics
 
Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...
Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...
Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...
 
CEP - simplified streaming architecture - Strata Singapore 2016
CEP - simplified streaming architecture - Strata Singapore 2016CEP - simplified streaming architecture - Strata Singapore 2016
CEP - simplified streaming architecture - Strata Singapore 2016
 
Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...
Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...
Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...
 
Machine Learning Success: The Key to Easier Model Management
Machine Learning Success: The Key to Easier Model ManagementMachine Learning Success: The Key to Easier Model Management
Machine Learning Success: The Key to Easier Model Management
 
Predictive Maintenance Using Recurrent Neural Networks
Predictive Maintenance Using Recurrent Neural NetworksPredictive Maintenance Using Recurrent Neural Networks
Predictive Maintenance Using Recurrent Neural Networks
 
Streaming patterns revolutionary architectures
Streaming patterns revolutionary architectures Streaming patterns revolutionary architectures
Streaming patterns revolutionary architectures
 
Streaming in the Extreme
Streaming in the ExtremeStreaming in the Extreme
Streaming in the Extreme
 

Recently uploaded

Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...dajasot375
 
Data Science Jobs and Salaries Analysis.pptx
Data Science Jobs and Salaries Analysis.pptxData Science Jobs and Salaries Analysis.pptx
Data Science Jobs and Salaries Analysis.pptxFurkanTasci3
 
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130Suhani Kapoor
 
Customer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxCustomer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxEmmanuel Dauda
 
Call Girls In Mahipalpur O9654467111 Escorts Service
Call Girls In Mahipalpur O9654467111  Escorts ServiceCall Girls In Mahipalpur O9654467111  Escorts Service
Call Girls In Mahipalpur O9654467111 Escorts ServiceSapana Sha
 
RadioAdProWritingCinderellabyButleri.pdf
RadioAdProWritingCinderellabyButleri.pdfRadioAdProWritingCinderellabyButleri.pdf
RadioAdProWritingCinderellabyButleri.pdfgstagge
 
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)jennyeacort
 
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝DelhiRS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhijennyeacort
 
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Callshivangimorya083
 
20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdfHuman37
 
Brighton SEO | April 2024 | Data Storytelling
Brighton SEO | April 2024 | Data StorytellingBrighton SEO | April 2024 | Data Storytelling
Brighton SEO | April 2024 | Data StorytellingNeil Barnes
 
04242024_CCC TUG_Joins and Relationships
04242024_CCC TUG_Joins and Relationships04242024_CCC TUG_Joins and Relationships
04242024_CCC TUG_Joins and Relationshipsccctableauusergroup
 
vip Sarai Rohilla Call Girls 9999965857 Call or WhatsApp Now Book
vip Sarai Rohilla Call Girls 9999965857 Call or WhatsApp Now Bookvip Sarai Rohilla Call Girls 9999965857 Call or WhatsApp Now Book
vip Sarai Rohilla Call Girls 9999965857 Call or WhatsApp Now Bookmanojkuma9823
 
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptdokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptSonatrach
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...Florian Roscheck
 
RA-11058_IRR-COMPRESS Do 198 series of 1998
RA-11058_IRR-COMPRESS Do 198 series of 1998RA-11058_IRR-COMPRESS Do 198 series of 1998
RA-11058_IRR-COMPRESS Do 198 series of 1998YohFuh
 
B2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxB2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxStephen266013
 

Recently uploaded (20)

Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
Indian Call Girls in Abu Dhabi O5286O24O8 Call Girls in Abu Dhabi By Independ...
 
E-Commerce Order PredictionShraddha Kamble.pptx
E-Commerce Order PredictionShraddha Kamble.pptxE-Commerce Order PredictionShraddha Kamble.pptx
E-Commerce Order PredictionShraddha Kamble.pptx
 
Call Girls in Saket 99530🔝 56974 Escort Service
Call Girls in Saket 99530🔝 56974 Escort ServiceCall Girls in Saket 99530🔝 56974 Escort Service
Call Girls in Saket 99530🔝 56974 Escort Service
 
Data Science Jobs and Salaries Analysis.pptx
Data Science Jobs and Salaries Analysis.pptxData Science Jobs and Salaries Analysis.pptx
Data Science Jobs and Salaries Analysis.pptx
 
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
VIP Call Girls Service Miyapur Hyderabad Call +91-8250192130
 
Customer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptxCustomer Service Analytics - Make Sense of All Your Data.pptx
Customer Service Analytics - Make Sense of All Your Data.pptx
 
Call Girls In Mahipalpur O9654467111 Escorts Service
Call Girls In Mahipalpur O9654467111  Escorts ServiceCall Girls In Mahipalpur O9654467111  Escorts Service
Call Girls In Mahipalpur O9654467111 Escorts Service
 
Deep Generative Learning for All - The Gen AI Hype (Spring 2024)
Deep Generative Learning for All - The Gen AI Hype (Spring 2024)Deep Generative Learning for All - The Gen AI Hype (Spring 2024)
Deep Generative Learning for All - The Gen AI Hype (Spring 2024)
 
RadioAdProWritingCinderellabyButleri.pdf
RadioAdProWritingCinderellabyButleri.pdfRadioAdProWritingCinderellabyButleri.pdf
RadioAdProWritingCinderellabyButleri.pdf
 
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
Call Us ➥97111√47426🤳Call Girls in Aerocity (Delhi NCR)
 
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝DelhiRS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
RS 9000 Call In girls Dwarka Mor (DELHI)⇛9711147426🔝Delhi
 
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
꧁❤ Greater Noida Call Girls Delhi ❤꧂ 9711199171 ☎️ Hard And Sexy Vip Call
 
20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf
 
Brighton SEO | April 2024 | Data Storytelling
Brighton SEO | April 2024 | Data StorytellingBrighton SEO | April 2024 | Data Storytelling
Brighton SEO | April 2024 | Data Storytelling
 
04242024_CCC TUG_Joins and Relationships
04242024_CCC TUG_Joins and Relationships04242024_CCC TUG_Joins and Relationships
04242024_CCC TUG_Joins and Relationships
 
vip Sarai Rohilla Call Girls 9999965857 Call or WhatsApp Now Book
vip Sarai Rohilla Call Girls 9999965857 Call or WhatsApp Now Bookvip Sarai Rohilla Call Girls 9999965857 Call or WhatsApp Now Book
vip Sarai Rohilla Call Girls 9999965857 Call or WhatsApp Now Book
 
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.pptdokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
dokumen.tips_chapter-4-transient-heat-conduction-mehmet-kanoglu.ppt
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
 
RA-11058_IRR-COMPRESS Do 198 series of 1998
RA-11058_IRR-COMPRESS Do 198 series of 1998RA-11058_IRR-COMPRESS Do 198 series of 1998
RA-11058_IRR-COMPRESS Do 198 series of 1998
 
B2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docxB2 Creative Industry Response Evaluation.docx
B2 Creative Industry Response Evaluation.docx
 

Surprising Advantages of Streaming - ACM March 2018

  • 1. © 2018 MapR Technologies 1 Streaming Architecture: Surprising Advantages Ellen Friedman, PhD @Ellen_Friedman Principal Technologist 26 March 2018 #BayAreaACM
  • 2. © 2018 MapR Technologies 2 Contact Information Ellen Friedman, PhD Principal Technologist, MapR Technologies Committer Apache Drill & Apache Mahout projects O’Reilly author Email efriedman@mapr.com ellenf@apache.org Twitter @Ellen_Friedman #BayAreaACM
  • 3. © 2018 MapR Technologies 3 A Shift in Thinking •  https://% Image 2018 by SpaceX used under creative commons lisc https://en.wikipedia.org/wiki/File:Elon_Musk%27s_Tesla_Roadster_(40143096241).jpg Left Image credit: Astronaut Harrison H. Schmitt. Image NASA
  • 4. © 2018 MapR Technologies 4 Use  a  stream  instead  of   database  as  shared  truth    
  • 5. © 2018 MapR Technologies 5 Traditional Solution – Use a Profile Database POS 1..n Fraud detector Last card use
  • 6. © 2018 MapR Technologies 6 What Happens as You Scale Up? POS 1..n Fraud detector Last card use POS 1..n Fraud detector POS 1..n Fraud detector
  • 7. © 2018 MapR Technologies 7 Shared Database Can Be A Problem POS 1..n Fraud detector Last card use POS 1..n Fraud detector POS 1..n Fraud detector Shared database causes problems Big problem is disagreement about schema and indexing
  • 8. © 2018 MapR Technologies 8 Alternative: Use a Stream to Isolate Services POS 1..n Fraud detector Last card use Updater card activity
  • 9. © 2018 MapR Technologies 9 Add New Services via the Stream POS 1..n Fraud detector Last card use Updater Card location history Other card activity
  • 10. © 2018 MapR Technologies 10 Changing Implementation Through Isolation POS 1..n Last card use Updater POS 1..n Last card use Updater card activity Fraud detector Fraud detector
  • 11. © 2018 MapR Technologies 11 Changing Implementation Through Isolation POS 1..n Last card use Updater POS 1..n Last card use Updater card activity Fraud detector Fraud detector
  • 12. © 2018 MapR Technologies 12 Stream  transport  supports   microservices      
  • 13. © 2018 MapR Technologies 13 Stream-1st Architecture Real-time analytics EMR Patient Facilities management Insurance audit A B Medical tests C Medical test results People often start with event data streamed to a real-time application (A) Image © 2016 Ted Dunning & Ellen Friedman from Chap 1 O’Reilly book Streaming Architecture used with permission
  • 14. © 2018 MapR Technologies 14 Heart of Stream-1st Architecture: Message Transport Real-time analytics EMR Patient Facilities management Insurance audit A B Medical tests C Medical test results The right messaging tool supports other classes of use cases (B & C) Image © 2016 Ted Dunning & Ellen Friedman Ch 1 O’Reilly book Streaming Architecture used with permission
  • 15. © 2018 MapR Technologies 15 Stream Transport that Decouples Producers & Consumers P P P C C C Transport Processing Kafka / MapR Streams
  • 16. © 2018 MapR Technologies 16 Features of Good Streaming •  Persistent •  Performant •  Pervasive
  • 17. © 2018 MapR Technologies 17 Legacy Applications How Does MapR Solve This? Big Data 1.0 Applications Next-Gen Applications MapR Converged Data Platform High Availability Real Time Unified Security Multi-tenancy Disaster Recovery Global Namespace Real-Time NoQL Database Stream TransportWeb-Scale Storage
  • 18. © 2018 MapR Technologies 18 Example Files Table Streams Directories Cluster Volume mount point
  • 19. © 2018 MapR Technologies 19 With MapR, Geo-Distributed Data Appears Local stream Data source Consumer
  • 20. © 2018 MapR Technologies 20 With MapR, Geo-Distributed Data Appears Local stream stream Data source Consumer
  • 21. © 2018 MapR Technologies 21 With MapR, Geo-distributed Data Appears Local stream stream Data source ConsumerGlobal Data Center Regional Data Center
  • 22. © 2018 MapR Technologies 22 Build a Global Data Fabric Flexibility & agility to respond as life changes
  • 23. © 2018 MapR Technologies 23 MapR Streams: Replication Across Data Centers •  Replication across data centers with preserved offsets (unlike Kafka) •  Opens new use cases Example: Shared inventory in ad-tech industry Inventory model Global analytics Database Local state Inventory model Local state Data center 1 Data center 2 Central data center
  • 24. © 2018 MapR Technologies 24 Use Case: Telecommunications Callers Towers cdr data
  • 25. © 2018 MapR Technologies 25 Streaming in Telecom •  Data collection & handling happens at different levels –  tower, local data center, central data center) •  Batch: Can take 30 minutes per level •  Streaming: Latency drops to seconds or sub-seconds per level •  Ability to respond as events occur •  MapR Streams enables stream replication with offsets across data centers
  • 26. © 2018 MapR Technologies 26 Unique to MapR: Manage Topics at Stream Level •  Many more topics on MapR cluster •  Topics are grouped together in Stream (different from Kafka) •  Policies set at the Stream level such as time-to-live, ACEs (controlled access at this level is different than Kafka) •  Geo-distributed stream replication (different from Kafka) Stream Topic 1 Topic 3 Topic 2 Image © 2016 Ted Dunning & Ellen Friedman from Chap 5 of O’Reilly book Streaming Architecture used with permission
  • 27. © 2018 MapR Technologies 27 Use Case: Each pump has many sensors pump data Dashboard C2 topic = p1 p2 p3 p4 p5 p1 p1 p5
  • 28. © 2018 MapR Technologies 28 Use topics as an organizing principle
  • 29. © 2018 MapR Technologies 29 Use Case: Financial Services Data generator Transactions by_stock by_sender by_recipient Transaction exploder stock_idx sender_idx recipient_idx Query service
  • 30. © 2018 MapR Technologies 30 Modern Manufacturing Boeing AMRC, University Sheffield •  IoT enabled “smart tools” on manufacture floor •  Respond quickly to new requirements Images by Bond Bryan Architecture, used with permission
  • 31. © 2018 MapR Technologies 31 Stream vs Database •  Can be better for flexibility and multi-tenancy •  Streams can be 50 – 100x faster than db (no mutation) •  Faster means less arguments about performance optimization •  Operations are simpler so works better to share data •  Don’t have to commit to one type of db: push updates through stream and let each group use the db they want
  • 32. © 2018 MapR Technologies 32 MapR Edge Processing with Stream Replication Data source Data source Data source Report Data source •  Designed to sit at IoT edge •  Intended to run right next to data- producing device
  • 33. © 2018 MapR Technologies 33 MapR Edge •  Small footprint cluster for remote processing •  Intended to run right next to the data producing device –  Unified end-to-end security policy –  Reliable replication to cloud and data center, even with occasional connections •  Small but full MapR data services (files, tables, streams) –  Normal data protection (snapshots, mirroring, replication) –  Normal management capabilities (volumes, fine-grained access control, monitoring)
  • 34. © 2018 MapR Technologies 34 Who needs MapR Edge? •  Connected car industry •  Telecommunications industry •  Hospitals and medical testing facilities •  Anyone who benefits from global learning but needs local action © Ellen Friedman © Ellen Friedman ©WesAbrams
  • 35. © 2018 MapR Technologies 35 MapR Edge: Improves Time to Insight Before Edge With Edge •  Oil & gas •  Medical device •  Car test & dev 48 hours 12 hours 24 hours < 2 hours < 15 minutes < 5 minutes
  • 36. © 2018 MapR Technologies 36 Additional Resources on Streaming: O’Reilly book by Ted Dunning & Ellen Friedman © 2016 Read free courtesy of MapR: https://mapr.com/streaming-architecture-using-apache-kafka- mapr-streams/ “Streaming Microservices” by Ted Dunning & Ellen Friedman, in Encyclopedia of Big Data Technologies. Sherif Sakr and Albert Zomaya, editors. Springer International Publishing, in press 2018. and
  • 37. © 2018 MapR Technologies 37 Machine Learning is Everywhere Image courtesy Mtell used with permission.Images © Ellen Friedman ● ● ●● ●● ● ● ● ● ●● ● ●●●● ● ● ●●● ●● ●● ● ● ●● ●● ●● ● ● ● ●● ●● ● ● ● ●● ● ● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●● ●●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ●●●● ● ●● ● ● ●●● ● ● ● ● ● ●● ● ●● ●●● ● ● ● ●● ● ● ●● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ●● ●●●●● ● ● ●● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ●● ● ●● ● ● ●● ●● ● ●● ● ●●● ● ● ●●● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ● ● ●● ●●● ● ● ● ● ●● ● ●●● ● ●● ● ● ● ● ●● ● ● ● ●●● ● ● ● ●● ● ● ●●●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ● ●● ● ● ●●●● ●● ●● ●● ● ● ●● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●●● ● ● ●● ● ● ●● ●●● ● ● ● ●● ● ● ● ●●● ●● ● ● ● ● ● ●●● ● ● ●● ●● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●●● ●●● ●● ●● ●● ● ● ● ● ● ●● ●● ● ● ● ●● ●●● ●● ●● ●●●● ● ● ●● ● ●● ● ● ● ●●●● ●● ●● ●● ●● ● ●● ● ● ●● ●● ● ● ●● ● ● ● ●● ● ●● ● ● ●● ● ●●● ●●● ● ●● ● ● ● ●● ● ● ●● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ●●● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ●●● ●● ● ● ● ● ●● ● ●● ● ●●● ●● ●● ● ●●●● ●● ● ● ● ● ● ●● ●●● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ● ●● ●●● ● ● ●●● ● ●● ● ● ● ● ●● ● ● ● ● ●● ●●● ●● ● ● ● ● ● ● ● ● ● ● ●●● ●●●● ●● ● ●●● ● ● ●●● ● ●● ●● ● ● ● ● ● ● ●● ● ●●●● ● ● ●● ●●● ● ●● ● ● ●● ● ● ● ● ● ●● ● ●●●● ●● ● ● ●● ● ● ● ● ● ● ●●●● ● ●●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ●●●● ●● ● ● ● ● ●● ● ●● ● ●● ●● ● ● ●● ● ●● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ● ●● ●●●● ● ●●● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ●● ● ●● ● ● ● ● ● ● ●● ●●●● ● ● ● ●● ●● ● ●● ● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ●●●● ● ● ● ● ●● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ●● ●● ●● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●●● ●● ● ●●●● ●●● ●● ●● ● ●● ● ● ●● ● ●● ● ● ●●● ●● ● ● ● ● ● ●●●● ●●●●● ●●● ● ●●● ●● ● ●● ●● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ●●●● ● ● ●●● ● ●●● ●●● ●● ●● ● ●●● ● ● ●●●● ●● ● ● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ●●●●●● ● ● ● ● ●● ●● ● ● ● ●● ● ●● ● ● ●●● ● ●●● ● ●● ●● ●● ●●● ● ●●● ● ●● ● ● ●● ●●● ●● ● ● ●●●● ● ●● ● ● ●● ●● ● ●● ●● ●● ● ● ●●● ● ●● ● ● ● ●●●●● ● ●● ● ● ● ●● ● ●●● ●● ●● ● ● ● ● ● ● ●●● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ●●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ●● ●● ● ● ● ● ● ●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ●● ● ●● ● ● ● ●●● ● ●● ● ●● ● ●● ●●● ● ● ● ● ● ● ● ●● ●● ●● ● ● ●●●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ● ●●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ●● ●●● ● ●● ● ● ● ● ● ●● ● ● ● ●● ● ●● ●● ●● ● ● ● ●● ● ● ● ● ●● ● ●● ● ●● ●●● ●●●● ● ● ● ●●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ●●● ● ●● ● ●●● ●● ● ●● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ● ●●●● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ●●●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ●●●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ● ●● ● ● ●● ●●● ● ● ● ● ● ●● ●● ● ● ● ●● ●● ● ●●●● ● ●● ● ● ●● ● ●● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●●● ● ●● ● ● ●● ● ● ● ● ● ●● ●●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ●● ●●● ●●● ● ● ● ●● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ●●●● ● ● ● ●●●● ● ● ●●● ● ●● ●● ●● ● ● ● ● ● ●●● ● ●● ● ● ● ● ● ● ●●● ● ● ● ●●●● ●●● ● ●● ● ● ●● ● ● ● ● ●● ● ●●● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●●● ● ● ● ● ● ●● ●● ● ●● ●●● ●● ●●● ● ● ●●● ● ● ●●● ● ● ● ● ● ●●● ●● ●● ● ● ● ● ● ● ● ●●● ● ● ●●● ● ● ● ● ● ● ●● ● ● ●● ● ●●●● ●● ●● ● ●● ● ●●● ● ● ● ● ● ●● ● ● ●● ●●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ●●●● ●● ●●● ● ● ● ●● ● ●● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●●●● ●● ● ●● ● ●●● ●● ● ● ●● ● ● ●● ●●●● ● ● ● ●●● ● ● ● ● ●●● ● ● ● ●●● ● ●● ● ● ● ● ●● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ●●● ● ● ● ● ● ● ●●●● ●● ● ● ● ● ●●● ● ●●● ● ● ●●● ●● ● ● ●● ●● ●● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ●●●● ● ● ●● ●●● ●● ● ● ●●● ●● ● ● ● ● ●●● ● ● ●● ● ●●● ● ● ● ●● ●● ●● ● ● ● ●●●● ● ● ● ●● ● ●● ●● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ●● ●●● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●●●● ● ● ●● ● ● ● ●● ● ●●● ●●● ● ● ● ● ●● ●● ●● ● ●● ●●● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ●●●● ●●● ●●● ● ●● ●● ● ● ● ● ● ● ● ●●● ● ● ● ●●● ● ●●●●● ● ●●● ● ● ●●● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ●●● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ●● ●●● ● ● ● ● ●● ● ● ●● ●● ● ● ● ● ●●● ●● ● ● ●● ● ●● ● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ●● ● ● ●● ● ● ● ●●●● ● ● ● ● ●●● ● ●●●●● ● ●● ● ● ● ●● ● ● ●●● ●● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ●●● ●●●● ● ●●● ● ● ●● ●●● ● ● ● ● ● ● ●● ● ●● ●● ● ● ●●● ●● ●● ● ●● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●● ●●●● ●● ●● ● ●● ● ● ● ●●● ● ●● ● ● ● ●●● ● ●● ●● ● ● ● ● ●● ● ● ● ● ●●● ● ●● ●●● ●●● ● ● ● ● ● ●● ● ●● ● ● ● ●● ●●● ●● ●●● ● ● ● ● ●● ● ●● ● ● ● ●● ● ● ●● ● ●●●● ● ● ●●● ● ●● ●●● ●● ● ●● ●● ● ● ● ●● ●● ● ● ● ●●●● ● ● ● ● ● ●● ● ●● ● ● ●● ●● ● ● ●● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ●● ● ● ●●● ●● ● ●● ● ● ● ● ● ●● ●● ● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ●●● ●●● ● ● ● ● ●● ● ● ● ● ●●● ●● ●●● ● ● ● ●●● ●● ● ●● ●●● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ●●●● ● ● ● ●● ● ● ●● ●● ● ● ● ●● ● ● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●●●● ● ● ● ● ●● ●● ● ●● ● ●● ●● ●● ● ● ● ●●● ●● ● ●●● ● ● ● ● ● ● ● ● ●●● ●● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ●●● ● ●● ● ● ● ● ● ● ● ●● ●●● ● ● ● ●● ● ● ●● ● ● ● ● ●●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ●● ● ● ● ●● ● ●● ●● ● ● ● ●●● ● ●● ●● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ● ●● ● ● ● ● ●●● ●●● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●●● ●●● ● ● ● ●● ●● ●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●● ●● ●● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ●● ●● ● ● ● ●● ● ● ● ●● ●● ●● ● ● ● ●● ●● ●●●● ● ● ●● ●● ●● ● ● ● ● ●● ● ●● ●●● ● ● ● ● ● ● ●● ● ● ●● ●●● ●● ● ● ● ● ●● ● ● ● ●● ●● ● ● ●● ●● ● ● ●● ● ● ● ● ● ●●●● ● ●● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ●●● ● ●●●●● ● ●● ● ●● ● ● ●●● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●●● ●● ● ●● ●● ●● ● ● ● ● ● ●●● ●●● ●● ● ● ●●● ● ● ● ● ● ●● ● ● ●● ●● ● ●●● ● ●●● ● ● ● ● ● ●●●● ● ●● ●● ●● ●● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ●● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ●●● ●●●● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●● ● ●●● ● ● ● ●● ●● ● ● ● ●●● ● ●● ● ● ● ● ● ● ●●● ●●●● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ●● ● ● ●● ●●● ● ●●●● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ●● ●●● ● ●●●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●●● ●●● ● ● ●●● ● ●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ●● ● ●● ●●● ●● ●● ● ●● ●●● ●●● ● ● ●● ●● ● ● ● ●● ● ● ● ● ●●● ● ●● ●● ●● ●● ● ● ●● ●● ● ● ● ●● ● ● ●●● ●● ● ● ● ●● ● ● ● ● ● ●●● ● ●● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●●● ● ●● ● ● ● ●● ●● ● ● ●●● ● ●●●●● ●● ● ●● ● ●● ● ● ● ●●●● ●● ● ●●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ●●● ● ●●● ● ● ● ● ● ● ● ● ● ●●● ●●● ●● ● ● ● ● ● ● ●● ● ● ●●● ● ●●● ● ●● ● ●● ● ●● ● ●●●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ●● ●●● ● ● ●● ●●● ● ● ● ● ● ● ●● ● ●● ●●● ● ● ●●● ● ●● ● ● ●● ● ● ● ●● ●● ●● ● ● ● ● ● ● ●● ● ● ● ●● ●●●● ● ●● ● ● ● ● ● ●●● ● ● ●● ●●●● ●● ● ●● ● ●● ● ●● ●● ●● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●●● ●●●● ●● ● ● ● ● ● ●● ●● ● ●●● ● ● ● ● ● ● ● ● ● ●●● ● ●● ●●● ●●● ●● ● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ●●● ● ● ● ● ●● ●● ●● ●●● ●● ●● ●● ● ● ●●● ● ●● ● ●● ●●● ●● ●● ● ●●● ● ●● ● ● ●●● ● ● ● ● ●●● ● ● ● ● ● ● ●●● ● ● ●●● ● ● ● ●● ●● ● ●● ●● ● ●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ●●● ● ● ● ●● ●●● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●● ●●● ● ● ●● ● ●● ● ●●● ● ● ● ● ● ● ●● ● ● ●●●● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ●● ● ● ● ● ●● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ●● ● ●● ● ● ●● ●●● ● ● ● ● ●● ●● ● ●● ● ● ● ●●● ●● ● ● ● ●● ● ●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ●● ●● ● ●●●● ● ●● ● ● ● ●● ●● ● ● ●● ● ●● ● ● ● ●● ● ●● ●●●●● ● ● ●● ● ● ●●● ● ●● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●● ●● ● ● ● ● ●● ●● ●● ● ● ● ●●● ● ●● ● ●●● ● ●● ●● ●● ● ● ● ●●● ● ●● ● ● ● ● ● ●● ● ● ●●● ● ● ● ●●● ● ● ●● ● ●● ● ●●●● ● ● ●● ● ● ● ● ● ●●●● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ●●● ●●●● ● ● ●● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ●● ● ●● ● ●● ●●● ● ● ● ● ●●●● ● ● ●●●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ●● ●● ●● ● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ●● ●● ● ● ●● ●● ● ●● ● ● ●●● ● ● ● ● ● ● ● ●●● ●●● ●● ● ● ● ● ● ● ● ● ●● ●●● ● ●● ●●● ● ●● ● ● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●●●●●●● ● ● ● ●● ● ●● ●● ● ● ● ● ● ●● ●●●● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●●● ●●● ●●● ● ● ● ●●● ● ● ● ● ●● ● ●● ● ●●●● ● ● ● ● ● ●● ● ●● ● ● ● ●● ● ●● ● ● ●●● ● ● ●● ●● ● ● ●● ● ●● ●● ● ● ● ● ● ● ●● ● ● ●●● ● ●● ●● ●● ● ●● ● ● ● ● ●●●● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ● ● ●●● ●● ● ● ●● ● ●● ●● ●● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ● ●●●● ●●● ●●●●● ● ● ● ● ● ●●● ● ●● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ●● ● ● ● ● ● ●●● ●● ●● ● ●● ● ● ●● ●●●● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●● ● ●●● ● ●● ●● ●●● ● ● ● ● ● ● ● ●● ● ●● ●●● ●●●●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●●●●●● ●● ● ●● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ●● ● ● ●●● ● ●●●●● ●● ● ● ● ● ● ● ●●● ● ●● ● ●●●●● ●● ● ●●● ●● ● ● ●●●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ●● ● ● ●● ● ● ● ●● ●● ● ●● ●●●●●● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ●●● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●●● ● ● ● ● ●● ● ●●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ●● ●● ●● ●●● ● ● ●●● ● ● ● ● ●● ●● ● ●●● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ● ●● ● ●● ● ● ● ●●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ●●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ●● ●●● ● ● ● ●● ● ● ● ●●● ●●● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ●● ● ●●● ●●● ● ● ● ●● ● ●●● ● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ●●● ●● ● ●● ● ●● ● ●● ● ●●● ● ● ●● ●● ●● ● ●● ●● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●●●● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ●● ● ● ● ● ● ●● ● ● ●●● ● ● ●● ● ● ● ●● ●● ●●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ●●● ●● ● ● ● ● ●●● ● ●●● ● ●● ●● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●● ●●● ● ● ● ● ● ● ●●● ● ●● ● ● ●● ●●●● ● ●● ● ●● ● ● ● ●●●● ●● ● ● ●●● ● ● ●● ● ●●● ● ●● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ●● ●● ●● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ●●●● ●● ●●● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●●● ●● ●● ● ●● ● ● ● ● ● ● ● ●●●● ●●● ●● ●● ● ● ●● ● ● ● ● ●●● ● ● ● ● ●● ● ●●● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●●● ● ●● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ●●●● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ●●● ●● ●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ●● ● ●●● ● ● ● ●● ●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ●● ●●● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ● ●● ● ●● ●● ●●● ● ● ● ● ●● ●● ● ●● ● ●● ●● ●● ● ● ● ● ● ● ●●● ●● ● ●●● ●● ● ●● ● ● ●●●● ● ● ● ● ●●● ● ● ● ●● ●● ●● ● ● ● ● ●● ●● ● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ●● ● ● ●●● ●● ● ●● ● ●●●●● ●● ● ●●● ● ●● ●●● ● ●●● ● ● ●●● ● ● ● ● ●●● ●● ● ● ● ● ●● ●● ● ● ●● ●● ● ● ●● ● ●●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ●● ●● ●● ● ● ●●● ● ●● ● ● ●● ●● ●● ●● ● ● ● ● ●● ●●●● ●● ● ●●● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●●● ● ●● ●●●● ● ●● ●● ●●● ●● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●● ● ●● ● ● ● ● ● ● ●●●● ●●● ● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ●● ●● ● ●●● ● ● ● ●● ●● ● ●● ● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ●● ●●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●●● ●● ● ● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ●●● ●● ●● ●●● ● ● ●● ●●●●● ● ●●●● ● ● ●● ● ● ●● ●● ● ●● ● ●● ●● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ●●●● ●● ● ● ● ● ● ●● ●● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ●●● ●●● ● ● ●● ●●●● ● ● ●● ● ● ● ●●● ● ●● ●●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ●●● ● ●● ● ● ●● ● ●● ● ●● ●●● ● ●●● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ●● ●●●● ● ●● ● ● ● ● ●● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ●● ●● ●●●● ● ● ● ● ● ● ●● ●●● ●● ●● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ●●● ● ●● ● ● ● ● ●● ●●●● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ●●● ●●● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ●●● ● ●● ●● ● ● ● ●● ●●● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ●●● ● ●● ●● ●●● ● ● ●● ● ● ● ● ●●● ● ●● ●●●● ●● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ●●●● ● ● ● ● ●●● ● ● ●● ● ● ● ●● ● ●● ● ● ● ●●● ● ●● ● ●● ●● ● ●● ● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ●●● ●● ● ● ● ● ● ● ●●● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ●●● ● ● ● ●● ●● ● ●● ● ●●● ●● ● ● ● ● ● ● ● ● ● ●● ●●●●● ● ●● ●● ●● ●● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ● ● ●●●● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ●● ●● ● ● ● ●● ● ●●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ●●● ●●● ● ●● ● ● ●●● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●●● ● ● ● ● ●● ●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●●●● ●● ● ● ● ●● ●● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ●● ● ●●● ● ● ● ●● ●●● ●● ● ●● ● ● ● ● ● ●● ●●● ●●● ●● ● ● ● ● ● ● ● ● ● ●●● ● ●●● ●● ●● ● ● ● ● ● ● ●●● ● ● ●●●●● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ●● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ●●●●● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ●● ●● ● ●●●● ● ● ● ●● ●● ●● ● ● ● ● ● ●● ●●● ● ● ● ●● ● ● ●● ● ● ●● ●● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ●●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ●● ● ● ●●● ● ● ● ● ●● ●●● ● ● ● ●●●● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ● ● ● ● ●● ● ●● ● ● ● ●●● ●●● ●● ●● ●● ● ● ●●●●● ● ● ● ●● ●●● ● ● ●● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ●●●●● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ●● ● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ●●● ●●● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ●● ●●●● ● ●● ● ● ● ●● ● ● ●● ●● ●● ●●● ● ● ●●● ● ●● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●●● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●●●● ●● ●● ● ●●● ● ●● ●●● ● ● ● ● ● ● ●● ● ●●●● ● ● ● ● ● ● ● ●●● ●● ● ● ●●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ● ● ●●● ● ● ●● ● ●● ● ●● ● ● ●●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ● ● ● ● ●●● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ●●● ● ● ● ●● ●● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ● ● ●●● ● ● ● ●● ● ●●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ●● ●● ● ● ● ●● ●● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ●● ● ●●● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ● ● ●● ●● ● ● ●● ●● ● ● ● ● ● ● ● ●●● ● ●● ● ●● ● ●● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ●●● ●● ●●● ● ●● ●● ●● ● ●●● ● ● ● ●● ● ● ●● ● ● ●●● ● ● ●●● ●●● ● ●● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ●● ● ●●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ●●●●● ●● ● ●●● ● ● ●● ● ● −2 0 2 4 0246 Raw Scores ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0.0 0.5 1.0 0.00.51.0 Q−Q plot
  • 38. © 2018 MapR Technologies 38 How do you make machine learning successful?
  • 39. © 2018 MapR Technologies 39 Is it the algorithm? the model? the ML tool? https://mapr.com/blog/tensorflow-mxnet-caffe-h2o-which-ml-best/
  • 40. © 2018 MapR Technologies 40 90% of effort in successful machine learning isn’t the algorithm or the model… It’s the logistics
  • 41. © 2018 MapR Technologies 41 New book: how to manage machine learning models Download free pdf or read free online via @MapR: https://mapr.com/ebook/machine-learning-logistics/ “Rendezvous Architecture” by Ted Dunning & Ellen Friedman, in Encyclopedia of Big Data Technologies. Sherif Sakr and Albert Zomaya, editors. Springer International Publishing, in press 2018. and
  • 42. © 2018 MapR Technologies 42 Please support women in tech – help build girls’ dreams of what they can accomplish © Ellen Friedman 2015#womenintech #datawomen
  • 43. © 2018 MapR Technologies 43 From one “woman in tech”: Thank You ! Image © Ellen Friedman
  • 44. © 2018 MapR Technologies 44 Contact Information Ellen Friedman, PhD Principal Technologist, MapR Technologies Committer Apache Drill & Apache Mahout projects O’Reilly author Email efriedman@mapr.com ellenf@apache.org Twitter @Ellen_Friedman #BayAreaACM