Drop Copy 4.0

The Drop Copy 4.0 service allows customers to receive real-time copies of CME Globex Execution Report and Acknowledgment messages as they are sent over iLink order entry system sessions. Drop Copy aggregates iLink messages, enabling customers to aggregate positions and monitor orders for sessions guaranteed by one or more clearing firms upon approval of the clearing firms. 

With the Drop Copy 4.0 session model, customers must:  

  •  manage sequence streams from Convenience Gateway iLink source sessions across all market segments.

  •  manage sequence streams from Market Segment Gateway iLink source sessions per unique market segment; with the possibility of having the same sequence numbers from multiple market segments.

The Drop Copy service supports CME Globex order routing messages, including both iLink API and CME Direct.

Configuration of the Drop Copy service should be requested through your Global Account Manager (GAM). Once the completed Schedule 12-Drop Copy 4.0 Service form is submitted, all configuration requests for Drop Copy must be submitted by an authorized contact for the Drop Copy group. The configuration request should include which iLink Source sessions should be configured to feed the Drop Copy group as well as the message types the customer wishes to receive for the Drop Copy 4.0 group.

The configurations for Drop Copy are sent by the customer’s Global Account Manager (GAM). Any changes to the Drop Copy configurations (adding/removing source session ID(s) or Drop Copy Automation Rules) must be made by the customer’s authorized Clearing Firm contact. Drop Copy credentials are sent to the customer directly.

The available message types can be categorized as follows:

  • Execution Reports – these messages include all fills and any trade cancel messages generated by the Source session(s). These messages can be used to determine the trading customer’s filled position.

  • Acknowledgments – these messages include all confirmation and elimination messages generated by the Source session(s). These messages can be used to determine the trading customer’s open order position.

Authorized persons can specify which message types the Drop Copy consumer will receive on the Target Drop Copy session(s). Available messages are:

Customers must wait for in-flight resend requests to be fulfilled before logging out or failing over to the backup gateway.

The Drop Copy 4.0 implementation includes:

  • session model to support both Convenience Gateway and Market Segment Gateway source sessions

  • iLink-style session-level functionality

  • message format with encapsulated message type

  • dedicated FIX tags on Drop Copy 4.0 messages – inbound and outbound

  • standardized resend behavior (elimination of Application Resend functionality to align with iLink)

  • sequencing by market segment

  • robust fault tolerance

Contents

Connectivity Management

  1. CME Group requires that the client systems set their heartbeat interval to between 5 and 60 seconds, or the Logon (35=A) message will not be acted upon. CME Group recommends a heartbeat interval of 30 seconds.

  2. Once the client system is logged on, if an inbound message is not sent during the defined interval, Drop Copy will send a Test Request (tag 35-Msgtype=1) message to ensure connectivity.

    • If no message is received in response to the Test Request (tag 35-MsgType=1) message within the defined heartbeat interval, the connection is assumed to be stale and the socket is closed.

Session Logon

  1. All non-logon inbound messages sent after TCP connection and before session logon will result in a Logout (tag 35-MsgType=5) message.

  2. Client systems MUST initiate a Logon (tag 35-MsgType=A) message within 60 seconds of establishing a TCP socket connection, or the session will be ungracefully disconnected.

  3. Client systems can establish a session for the Drop Copy service by the following means:

    • Beginning of Week Logon – This is the very first Logon (tag 35-MsgType=A) message the customer sends to Drop Copy for the week. Client systems MUST set their outbound sequence numbers (tag 34-MsgSeqNum) to '1' and tag 141-ResetSeqNumFlag=N or not present, or the client system will be logged out.

    • Mid-Week Logon – Used for any subsequent logons after the beginning of the week. Client systems MUST set their outbound sequence numbers (tag 34-MsgSeqNum) to the next expected sequence number or tag 789-NextExpectedMsgSeqNum value on the Logout (tag 35-MsgSeqNum=5) message received from CME Globex after the client system’s last logout, or the client system will be logged out.

    • In-session logon - Only supported for sequence number reset for a session that is already logged on. The in-session Logon message MUST have tag 141-ResetSeqNumFlag=Y and tag 34–MsgSeqNum=1, or the client system will be logged out.

Tag 122-OrigSendingTime must not be present on any logon message or the client system will be logged out.

Sequence Number Management

Sequence Number Reset

  1. To reset sequence numbers that are higher than the expected value, client systems can submit a Sequence Reset (tag 35-MsgType=4) message with Gap Fill (tag 123-GapFill=N) where tag 34-MsgSeqNum is the next expected or higher sequence number

  2. To reset sequence numbers on Drop Copy and CME Globex with in-session logon, the inbound message from the client system MUST have tag 141-ResetSeqNumFlag=Y and tag 34–MsgSeqNum=1.

After an in-session logon, all prior messages from CME Globex will be unrecoverable.

Encapsulated Payload

Customers will receive messages from their Source session activity as a payload encapsulated within an XML non-FIX message (35=n).

Message Recovery: Drop Copy to Client

  1. Both Basic and Enhanced Resend Requests are available for Drop Copy. CME group strongly recommends the use of Enhanced Resend Request.

  2. When CME Globex sends the client system a Resend Request (tag 35-MsgType=2) message, the client system can take one of the following steps:

Message Recovery: Client to Drop Copy

  1. The Application Resend Request (tag 35-MsgType=BW) message is no longer supported by Drop Copy. Client systems sending an Application Resend Request (35=BW) message will receive a Session Level Reject (tag 35-MsgType=3) message from Drop Copy.

  2. Drop Copy will process only one Resend Request (tag 35-MsgType=2) message from a client system at a time. Any successive Resend Request (35=2) messages received during processing will be rejected.

    • An in-session Logon (35=A) message sent while Drop Copy is processing a previous resend request will result in a logout.

  3. Real time messages will be published at the same time as the Resend Response messages initiated by the Resend Request.

    • Client system MUST not trigger another resend.

    • Client system MUST manage sequence numbers separately for messages with tag 43=Y (Resend Response messages).

Message Resend Request Validation

  1. FIX Resend Requests are available for messages from the current business week only. Resend Requests from the client system will only be fulfilled for messages with a sending time within the past 48-hour window.

    • If the range of requested messages are all within 48 hours of their send time, the messages will all be made available.

    • If part of the requested range of message sequence number send times fall outside the 48 hour window, Drop Copy will Gap Fill the unrecoverable messages and resend the available messages.

    • If the send times for all requested messages fall outside the 48 hour window, Drop Copy will send a Session Level Reject (tag 35-MsgType=3) message with tag 58=”Resend Request Could Not Be Fulfilled”. In the reject message, tag 5024-StartSequenceNumber will reflect the sequence number of the message with the earliest send time in the past 48 hours.

  2. The Drop Copy service offers a maximum limit of 2500 messages per Resend Request, any request exceeding the limit will result in a Session Level Reject (tag 35-MsgType=3) message from Drop Copy.

  3. Inbound tag 7-BeginSeqNo MUST be lower than the last sequence number (tag 34-MsgSeqNum) or the request will result in a forced logout.

  4. Tag 7-BeginSeqNo MUST be greater than 0 on the Resend Request or the client system will receive a Session Level Reject (tag 35-MsgType=3) message from Drop Copy.

Messaging Integrity and Validation

  1. Any invalid message type sent by the client system will result in a Session Level Reject (35=3) message from the Drop Copy gateway.

  2. The client system must send all inbound messages with a valid tag 10-checksum value. Messages with checksum values that are non-numeric or contain more than 3 digits will not be acted upon by Drop Copy.

Fault Tolerance and Fail-Over Management

  1. Client systems must always connect and log into the designated primary gateway as long as it is available. An attempt to log into the designated backup while the designated primary is available will result in a forced logout.

  2. In the event of a failover, the client system should resume sequencing on the newly-promoted, designated primary with the next sequence number (tag 34-MsgSeqNum) expected from the client system.

  3. Drop Copy 4.0 will send messages with tag 97-PossResend =Y in the following scenarios:

  • while recovering unsent messages after a dual failure or before Sunday startup

  • while resending outbound messages that may have been in-flight during a single Drop Copy failover

  • while receiving outbound messages that may have been in-flight during iLink failover

Drop Copy Architecture

For customers choosing to consume message streams from MSGW, a new Drop Copy 4.0 target session is required.

A Drop Copy 4.0 target session will be replicated across multiple Drop Copy Market Segment gateways, each receiving sequence streams comprised of messages from individual market segments. Duplicate sequence numbers may be received by the target session across market segments.

The diagram below shows the new Drop Copy 4.0 architecture managing Market Segment Gateway sequence streams.

Drop Copy 4.0 Session Model

The Drop Copy 4.0 service implements a new SessionID and access model that offers both CGW and MSGW target sessions.

The CGW target sessions sequences real-time messages from supported CGW source sessions.

  • For a Drop Copy 4.0 CGW session, the target session sequences messages from source sessions listening across all market segments.

MSGW target sessions will sequence streams from source sessions that are unique per market segment and session combination.

  • Drop Copy 4.0 users connect to a given MSGW by leveraging its unique IP address and assigned Drop Copy 4.0 Session ID, security credentials, and port.

  • Each MSGW target session has a unique IP address for each of the primary and backup Drop Copy 4.0 MSGW.

For both CGW and MSGW target sessions, the customer receives standard connection information for the Drop Copy 4.0 Target session(s) including:

  • SenderCompID – seven digit alphanumeric value consisting of:

o 6-character Session ID

o 1-character Fault Tolerance Indicator = ‘N’ (no fault tolerance)

Session Configuration

Convenience Gateway Source Sessions

Market Segment Gateway Source Sessions

Convenience Gateway Source Sessions

Market Segment Gateway Source Sessions

Note: Connection and sequencing of messages to all the existing and new Drop Copy 4.0 target sessions is supported in parallel.

  • New target SessionID 

  •  

    • new IP pairs - one primary and one backup - each IP pair is associated to a unique MSGW

    • new security credentials

    • new port

For load balancing, the same IP address may be designated primary for one Drop Copy 4.0 target session and backup for another Drop Copy 4.0 target session.

Managing Sequence Numbers

A single MSGW Drop Copy 4.0 session is able to log into into all MSGW instances. To manage message sequence numbers, the client system must leverage the combination of Session ID (the first 6 characters of tag 49-SenderCompID) and tag 57-TargetSubID. 

CME Globex is comprised of a number of market segments. The number of market segments and the instruments listed on each can change in the future. Customers are strongly encouraged to rely programmatically on tag 57-TargetSubID (which contains the tag 1300-MarketSegmentID value) in the Market Data Security Definition message to route orders to the correct MSGW.



CGW Session ID

MSGW Session ID



CGW Session ID

MSGW Session ID

Number of sequence stream(s)

1 sequence stream

Customers must manage different sequence streams, up to the number of current market segments, based on the combination of Session ID and Market Segment ID.

Number of TCP connection(s)

1 TCP connection to access all market segments

TCP connections for each MSGW instance to access all market segments

SFTP - Drop Copy 4.0 MSGW Configuration

An SFTP site (sftpng.cmegroup.com) is used to disseminate the Drop Copy 4.0 MSGW configuration information. The MSGW Configuration allows clients system to receive the list of all market segments and MSGW IPs. This SFTP site contains the configuration files for all environments. The SFTP site is a secure site that requires a user name and security credentials for access.

Table Key:

  • Environment - specific environment (i.e., Certification, New Release, Production).

  • Service - the Configuration service.

  • SFTP Site - address of SFTP site.

  • User Name - identifies the user name.

  • Security Credentials - identifies the security credentials.

  • Directory Location - identifies the directory.

  • Client System Update Schedule - Client systems should download updates according to the schedule specified.

Environments

Service

SFTP Site

User Name

Security Credentials

Directory

Client System Update Schedule

Environments

Service

SFTP Site

User Name

Security Credentials

Directory

Client System Update Schedule

Production

Configuration

sftpng.cmegroup.com

cmeconfig

G3t(0nnect3d



/DCMSGW/Production/Configuration



daily

Certification

/DCMSGW/Cert/Configuration





New Release Certification

/DCMSGW/NRCert/Configuration



Tag 57-TargetSubID

Customers may connect directly to all Market Segment Gateways using the same Session ID. Customers can use tag 1300-MarketSegmentID from the market data Security Definition (tag 35-MsgType=d) message to specify the market segment for the products they want to trade on CME Globex.

For iLink messages sent from the client system to CME Globex, MSGW customers can leverage tag 57-TargetSubID to specify the market segment of the instrument. Tag 57-TargetSubID contains the tag 1300-Market SegmentID value. CME Globex will respond and return the tag 57-TargetSubID values submitted in the customer iLink message on tag 50-SenderSubID.

Example

Time

From Client System to CME Globex 

From CME Globex to Client System

Tag 35-MsgType

Tag 49-SenderCompID

Tag 50-SenderSubID

Tag 57-TargetSubID

Time

From Client System to CME Globex 

From CME Globex to Client System

Tag 35-MsgType

Tag 49-SenderCompID

Tag 50-SenderSubID

Tag 57-TargetSubID

1

Logon



A

ZUB007N

ATS

74

2



Logon Ack

A

CME

74

ATS

3



Test Request

1

CME

74

ATS

Drop Copy 4.0 MSGW will reject any attempts to logon with an incorrect Market Segment ID with a Logout message (tag 35=5), including tag 58 = Invalid TargetSubID(tag 57).

Drop Copy 4.0 MSGW will reject any administration message with an incorrect Market Segment ID with a Session Level Reject (tag 35=3), including tag 58 =TargetSubId (57) tag has an incorrect value: < MarketSegmentID>, should be: < MarketSegmentID>

IP Ranges

This table comprises Drop Copy 4.0 source ranges available to customers on the CME Globex WAN extranet.

205.209.216.0/24

Drop Copy 4.0 Market Segment Gateway Source Range

Drop Copy 4.0 Convenience Gateway Source Range

205.209.218.0/24

Drop Copy 4.0 Market Segment Gateway Source Range 

Drop Copy 4.0 Convenience Gateway Source Range

Once certified, and upon customer request, the account manager will provide the following information:

  • For Drop Copy 4.0 Convenience Gateway target sessions: new SessionID, IPs, security credentials, and port

  • For Drop Copy 4.0 Market Segment Gateway target sessions (once the new iLink architecture has been implemented): new SessionID, IPs, security credentials, and port; customers will receive a unique IP pair for each MSGW instance.

The $500/month surcharge will apply for a new Drop Copy 4.0 Group request.

The first Drop Copy 4.0 Group is free. Each subsequent Drop Copy Group costs $500/month.

Messaging

Drop Copy 4.0 provides an application-level session for customers to receive real-time iLink messages. Drop Copy 4.0 does not support order entry; order entry messages submitted on the Drop Copy 4.0 session will be rejected with a Session Level Reject (tag 35-MsgType=3) message.

Standard Header

Tag 369-LastSeqNumProcessed will be updated for the following administrative messages:

  • Logon (tag 35-MsgType=A)

  • Test Request (tag 35-MsgType=1)

  • Heartbeat (tag 35-MsgType=0)

Tag 369-LastSeqNumProcessed will be based on the value of tag 34-MsgSeqNum in the current incoming message request. The following scenarios outline impacts for the standard header on inbound messages:



Drop Copy 4.0 Behavior



Drop Copy 4.0 Behavior

Missing Tag



tag 34-MsgSeqNum

Session Logout

tag 49-SenderCompID

tag 56-TargetCompID

tag 52-SendingTime

Session Logout

tag 57-TargetSubID

tag 142-SenderLocationID

Session Logout

Tag Value Null



tag 34-MsgSeqNum

Session Logout

tag 43-PossDupFlag

Session Logout

tag 49-SenderCompID

Session Logout

tag 52-SendingTime

tag 57-TargetSubID

tag 142-SenderLocationID

Session Logout

Invalid Tag Value



Tag 34-MsgSeqNum

Session Logout

Tag 43-PossDupFlag

Acknowledgment

Tag 49-SenderCompID

Session Logout

Tag 52-SendingTime

Session Logout

Tag 57-TargetSubID

Session Logout

Standard Trailer

The client session will ungracefully disconnect when a non-numeric value greater than three characters is submitted.

Administrative Messages

Logon (tag 35-MsgType=A)

If a session establishes a TCP socket connection without initiating a logon in 60 seconds, the connection will be disconnected.

The following scenarios outline impacts for the Logon (tag 35-MsgType=A) message:



Drop Copy 4.0 Behavior



Drop Copy 4.0 Behavior

Missing Tag



tag 98-EncryptMethod

Acknowledgment

tag 108-HearbtInt

Session Logout

tag 34-MsgSeqNum

Session Logout

Tag Value Null



tag 96-RawData

tag 98-EncryptMethod

tag 108-HearbtInt

Session Logout

Invalid Tag Value



tag 98-EncryptMethod

Acknowledgment

tag 141-ResetSeqNumFlag

Acknowledgment

Heartbeat (tag 35-MsgType=0)

Logout due to missing heartbeat

If the Heartbeat (tag 35-MsgType=0) message is not sent after the heartbeat interval, the client system will receive a Test Request (tag 35-MsgType=1) message followed by a Logout (tag 35-MsgType=5) message.

The client session will be logged out if the heartbeat interval is not valid (5 - 60 seconds).

The following scenarios outline impacts for the Heartbeat (35=0) message:



Drop Copy 4.0 Behavior



Drop Copy 4.0 Behavior

Missing Tag



tag 34-MsgSeqNum

Session Logout

Test Request (tag 35-MsgType=1)

The following scenarios outline impacts for the Test Request (tag 35-MsgType=1) message:



Drop Copy 4.0 Behavior



Drop Copy 4.0 Behavior

Missing Tag



tag 34-MsgSeqNum

tag 49-SenderCompID

Session Logout

tag 142-SenderLocationID

Session Level Reject

Tag Value Null



tag 112-TestReqID

Session Level Reject

FIX Resend Request (tag 35-MsgType=2)

Drop Copy 4.0 has a limit of 2500 messages per resend request. Requests exceeding the limit will be rejected.

Drop Copy 4.0 supports both Basic and Enhanced Sequence Resend Logic. See the functional specification for more detail on basic and enhanced sequence resend logic.

FIX resend requests will be restricted to a 48 hour rolling window which begins at the Sunday start-up.

Messages requested as part of the FIX resend request that fall outside of this window will not be honored and the request will be rejected. However, the Session Level Reject will include a new tag that contains the correct starting sequence number from which a resend request can be issued for that trading day. The session reject error text will state 58="Resend Request Could Not Be Fulfilled."

Tag

FIX Name

Req

Format

Valid Values

Description

Tag

FIX Name

Req

Format

Valid Values

Description

5024

StartSequenceNumber

N

Int (9)



If a resend request is sent for messages with sequence numbers whose timestamps fall outside the rolling 48 hour window, this field in the reject response message will provide the first sequence number of the retrievable messages within that window.

Example

Time

Customer Message

CME Globex Message

35

34

49

50

57

7

16

36

43

123

5024

Time

Customer Message

CME Globex Message

35

34

49

50

57

7

16

36

43

123

5024

Sunday 16:00 CT – Monday 16:45 CT – CME sent 2500 messages to Customer

Monday 16:45 CT – Tuesday 16:45 CT – CME sent 100 messages to Customer

At Tuesday 17:00 CT:

1

Resend Request



2

200

OMADGFN

RMS

68

1

0

--

--

--

--

2



Session Reject

3

2601

CME

68

RMS

--

--

--

--

--

2501

3

Resend Request 



2

201

OMADGFN

RMS

68

500

1500

--

--

--

--

4



Session Reject

3

2602

CME

68

RMS

--

--

--

--

--

2501

5

Resend Request



2

202

OMADGFN

RMS

68

1000

2600

--

--

--

--

6



Session Reject

3

2603

CME

68

RMS

--

--

--

--

--

2501

7

Resend Request



2

203

OMADGFN

RMS

68

2501

0

--

--

--

--

8



XML non-FIX

n

2501

CME

68

RMS

--

--

--

Y

--

--

Fourth Resend Request Responded to in Full

Outbound (CME to client system) real-time messages will be interleaved with resend responses. Customers must be able to receive out-of-sequence messages during a Resend Response without triggering another Resend Request.



The following scenarios outline impacts for the FIX Resend Request message:



Drop Copy 4.0 Behavior



Drop Copy 4.0 Behavior

Missing Tag



tag 34-MsgSeqNum

Session Logout

Invalid Tag Value



tag 34-MsgSeqNum (High sequence number)

Resend Request

tag 34-MsgSeqNum (Low sequence number)

Session Logout

Sequence Reset (tag 35-MsgType=4)

A client system sending a sequence reset(35=4) message with a lower than expected sequence number in tag 34-MsgSeqNum will be logged out.

The following scenarios outline behavior for the Sequence Reset message:



Drop Copy 4.0 Behavior



Drop Copy 4.0 Behavior

Missing Tag

 

tag 36-NewSeqNo

Session Logout

tag 34-MsgSeqNum

Session Logout

Tag Value Null



tag 123-GapFillFlag

Session Level Reject

Invalid Tag Value



tag 36-NewSeqNo

Session Level Reject

tag 123-GapFillFlag

Session Level Reject

Logout (tag 35-MsgType=5)

Logout Scenario

Future Implementation

Logout Scenario

Future Implementation

High sequence number

(without tag 122-OrigSendingTime)

Resend Request

High sequence number

(with tag 122-OrigSendingTime)

No Acknowledgment

Application Messages

Encapsulated XML Non-Fix (tag 35-MsgType=n) Message

For each message type processed by CME Globex which the Drop Copy 4.0 user has opted to receive in real time, the target session will send a FIX 35=n (XML_Non_FIX) message containing the actual business message as a payload. The payload is contained in tag 213-XMLData, and must be ‘unpacked’ to obtain the order flow message.

Drop Copy 4.0 messages to target sessions will now be encapsulated within XML non-FIX message (35=n) as follows:

8=FIX.4.2|9=424|35=n|34=45227|369=20|52=20150528-18:44:47.058|49=CME|50=G|56=D2M200N|57=DUMMY|143=US,IL|212=333|213=<RTRF>8=FIX.4.2|9=297|35=8|34=11191|369=5908|52=20150528-18:44:47.054|49=CME|50=G|56=YWB652N|57=DUMMY|143=Brio|1=TEST_ACCOUNT|6=0|11=YWB5908|14=0|17=90101:166|20=0|37=908234392|38=20|39=C|40=2|41=0|44=5011|48=314182|54=2|55=ZS|59=3|60=20150528-18:44:47.045|107=ZLK3|150=C|151=0|167=FUT|432=20150528|1028=N|9717=YWB5908|10=241|</RTRF>|10=005|

XML Non-FIX (tag 35-MsgType=n) Message Layout

Tag

FIX Name

Valid Values

Format

Description

Tag

FIX Name

Valid Values

Format

Description

Standard Header - CME Globex to Client









212

XMLDataLen



Int (4)

Byte length of XMLData (213) field.

213

XMLData



Data (8000)

Original iLink or processed FIX message, embedded in an XML field “RTRF”.

10

CheckSum



String (3)

Always last tag in message. Functions as end-of-message delimiter.

Payload

The Drop Copy 4.0 service is available for iLink messages on orders submitted to the CME Globex platform via iLink or CME Direct. Customers can choose to receive messages over Drop Copy configured to the following three levels:

Trade Execution Reports including:

Order Entry Acknowledgments including:

All of the Above

For additional details regarding the order flow messages that will be contained in the message payload, please refer to the iLink Message specification.

Functional Specification

See the Functional Specification for more information on Drop Copy 4.0 functionality.

Bandwidth Impact

Since Drop Copy 4.0 target sessions transmit Acknowledgment and Execution messages only (no market data), bandwidth impact for this release should be minimal, but is dependent upon the number of Source sessions bundled to the Drop Copy 4.0 group. Drop Copy 4.0 uses the same packet size as an outbound iLink message from the source session Execution Report and reject messages.

Fault Tolerance

Fault Tolerance on Drop Copy 4.0 is managed at the application level. Drop Copy 4.0 has a pair of gateways, one that is designated as the primary gateway and another host designated as the backup.

  • Customers must successfully log on to the designated primary Drop Copy 4.0 session before attempting to log on to the backup.

    • If a session logs on to the backup gateway before logging on to the primary gateway, CME Globex will send a Logout message (tag 35-MsgType=5), with tag 58-Text=Backup session not allowed. Logout forced.

  • Customers can only receive acknowledgments through their primary connections.

  • If the primary Drop Copy 4.0 session fails, failover occurs by promoting the backup Drop Copy 4.0 session to the primary role.

  • If the primary connection fails and the client system connects to the backup, the backup begins with the next available sequence number. Tag 43-PossDup is not included in the message.

Contact Information

For technical development support, contact Certification Support for Electronic Trading (CSET).

For all other inquiries, please contact Global Account Management (GAM).




How was your Client Systems Wiki Experience? Submit Feedback

Copyright © 2024 CME Group Inc. All rights reserved.