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

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
DataWorks Summit
 

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

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
 
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
 

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
 
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
 
How to Get Going with Kubernetes
How to Get Going with KubernetesHow to Get Going with Kubernetes
How to Get Going with 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

Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night StandCall Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
amitlee9823
 
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Abortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get CytotecAbortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Riyadh +966572737505 get cytotec
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
amitlee9823
 
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
ZurliaSoop
 
➥🔝 7737669865 🔝▻ Thrissur Call-girls in Women Seeking Men 🔝Thrissur🔝 Escor...
➥🔝 7737669865 🔝▻ Thrissur Call-girls in Women Seeking Men  🔝Thrissur🔝   Escor...➥🔝 7737669865 🔝▻ Thrissur Call-girls in Women Seeking Men  🔝Thrissur🔝   Escor...
➥🔝 7737669865 🔝▻ Thrissur Call-girls in Women Seeking Men 🔝Thrissur🔝 Escor...
amitlee9823
 
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night StandCall Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men 🔝malwa🔝 Escorts Ser...
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men  🔝malwa🔝   Escorts Ser...➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men  🔝malwa🔝   Escorts Ser...
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men 🔝malwa🔝 Escorts Ser...
amitlee9823
 
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
amitlee9823
 
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get CytotecAbortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Riyadh +966572737505 get cytotec
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
amitlee9823
 

Recently uploaded (20)

Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night StandCall Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Doddaballapur Road ☎ 7737669865 🥵 Book Your One night Stand
 
DATA SUMMIT 24 Building Real-Time Pipelines With FLaNK
DATA SUMMIT 24  Building Real-Time Pipelines With FLaNKDATA SUMMIT 24  Building Real-Time Pipelines With FLaNK
DATA SUMMIT 24 Building Real-Time Pipelines With FLaNK
 
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
 
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
 
Detecting Credit Card Fraud: A Machine Learning Approach
Detecting Credit Card Fraud: A Machine Learning ApproachDetecting Credit Card Fraud: A Machine Learning Approach
Detecting Credit Card Fraud: A Machine Learning Approach
 
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Abortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get CytotecAbortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get Cytotec
 
hybrid Seed Production In Chilli & Capsicum.pptx
hybrid Seed Production In Chilli & Capsicum.pptxhybrid Seed Production In Chilli & Capsicum.pptx
hybrid Seed Production In Chilli & Capsicum.pptx
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 
April 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's AnalysisApril 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's Analysis
 
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
➥🔝 7737669865 🔝▻ Thrissur Call-girls in Women Seeking Men 🔝Thrissur🔝 Escor...
➥🔝 7737669865 🔝▻ Thrissur Call-girls in Women Seeking Men  🔝Thrissur🔝   Escor...➥🔝 7737669865 🔝▻ Thrissur Call-girls in Women Seeking Men  🔝Thrissur🔝   Escor...
➥🔝 7737669865 🔝▻ Thrissur Call-girls in Women Seeking Men 🔝Thrissur🔝 Escor...
 
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night StandCall Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
 
Call Girls in Sarai Kale Khan Delhi 💯 Call Us 🔝9205541914 🔝( Delhi) Escorts S...
Call Girls in Sarai Kale Khan Delhi 💯 Call Us 🔝9205541914 🔝( Delhi) Escorts S...Call Girls in Sarai Kale Khan Delhi 💯 Call Us 🔝9205541914 🔝( Delhi) Escorts S...
Call Girls in Sarai Kale Khan Delhi 💯 Call Us 🔝9205541914 🔝( Delhi) Escorts S...
 
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men 🔝malwa🔝 Escorts Ser...
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men  🔝malwa🔝   Escorts Ser...➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men  🔝malwa🔝   Escorts Ser...
➥🔝 7737669865 🔝▻ malwa Call-girls in Women Seeking Men 🔝malwa🔝 Escorts Ser...
 
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
 
Predicting Loan Approval: A Data Science Project
Predicting Loan Approval: A Data Science ProjectPredicting Loan Approval: A Data Science Project
Predicting Loan Approval: A Data Science Project
 
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
 
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get CytotecAbortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
 

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