aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cosEvent
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cosEvent')
-rw-r--r--lib/cosEvent/AUTHORS5
-rw-r--r--lib/cosEvent/Makefile41
-rw-r--r--lib/cosEvent/doc/html/.gitignore0
-rw-r--r--lib/cosEvent/doc/man3/.gitignore0
-rw-r--r--lib/cosEvent/doc/man6/.gitignore0
-rw-r--r--lib/cosEvent/doc/pdf/.gitignore0
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin.xml81
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml73
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml95
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml85
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml112
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml99
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml85
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml73
-rw-r--r--lib/cosEvent/doc/src/Makefile230
-rw-r--r--lib/cosEvent/doc/src/book.gifbin0 -> 1081 bytes
-rw-r--r--lib/cosEvent/doc/src/book.xml49
-rw-r--r--lib/cosEvent/doc/src/ch_contents.xml70
-rw-r--r--lib/cosEvent/doc/src/ch_event_service.xml221
-rw-r--r--lib/cosEvent/doc/src/ch_introduction.xml56
-rw-r--r--lib/cosEvent/doc/src/cosEventApp.xml168
-rw-r--r--lib/cosEvent/doc/src/e_s_components.gifbin0 -> 4458 bytes
-rw-r--r--lib/cosEvent/doc/src/e_s_components.ps3595
-rw-r--r--lib/cosEvent/doc/src/e_s_models.gifbin0 -> 10354 bytes
-rw-r--r--lib/cosEvent/doc/src/e_s_models.ps1007
-rw-r--r--lib/cosEvent/doc/src/fascicules.xml18
-rw-r--r--lib/cosEvent/doc/src/make.dep34
-rw-r--r--lib/cosEvent/doc/src/notes.gifbin0 -> 2005 bytes
-rw-r--r--lib/cosEvent/doc/src/notes.xml172
-rw-r--r--lib/cosEvent/doc/src/part.xml39
-rw-r--r--lib/cosEvent/doc/src/part_notes.xml37
-rw-r--r--lib/cosEvent/doc/src/ref_man.gifbin0 -> 1530 bytes
-rw-r--r--lib/cosEvent/doc/src/ref_man.xml45
-rw-r--r--lib/cosEvent/doc/src/summary.html.src1
-rw-r--r--lib/cosEvent/doc/src/user_guide.gifbin0 -> 1581 bytes
-rw-r--r--lib/cosEvent/ebin/.gitignore0
-rw-r--r--lib/cosEvent/example/.gitignore0
-rw-r--r--lib/cosEvent/include/.gitignore0
-rw-r--r--lib/cosEvent/info2
-rw-r--r--lib/cosEvent/src/CosEventChannelAdmin.cfg6
-rw-r--r--lib/cosEvent/src/CosEventChannelAdmin.idl66
-rw-r--r--lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl205
-rw-r--r--lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl169
-rw-r--r--lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl159
-rw-r--r--lib/cosEvent/src/CosEventComm.idl37
-rw-r--r--lib/cosEvent/src/Makefile214
-rw-r--r--lib/cosEvent/src/cosEvent.app.src45
-rw-r--r--lib/cosEvent/src/cosEvent.appup.src6
-rw-r--r--lib/cosEvent/src/cosEventApp.cfg15
-rw-r--r--lib/cosEvent/src/cosEventApp.erl290
-rw-r--r--lib/cosEvent/src/cosEventApp.hrl62
-rw-r--r--lib/cosEvent/src/cosEventApp.idl26
-rw-r--r--lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl233
-rw-r--r--lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl246
-rw-r--r--lib/cosEvent/src/oe_CosEventComm_PullerS_impl.erl280
-rw-r--r--lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl217
-rw-r--r--lib/cosEvent/vsn.mk10
57 files changed, 8779 insertions, 0 deletions
diff --git a/lib/cosEvent/AUTHORS b/lib/cosEvent/AUTHORS
new file mode 100644
index 0000000000..624d275f78
--- /dev/null
+++ b/lib/cosEvent/AUTHORS
@@ -0,0 +1,5 @@
+Original Authors:
+Niclas Eklund
+
+Contributors:
+
diff --git a/lib/cosEvent/Makefile b/lib/cosEvent/Makefile
new file mode 100644
index 0000000000..4fa0b49ab7
--- /dev/null
+++ b/lib/cosEvent/Makefile
@@ -0,0 +1,41 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+#
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include vsn.mk
+VSN=$(COSEVENT_VSN)
+
+# ----------------------------------------------------
+# Common Macros
+# ----------------------------------------------------
+
+SUB_DIRECTORIES = src doc/src
+
+SPECIAL_TARGETS =
+
+# ----------------------------------------------------
+# Default Subdir Targets
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_subdir.mk
+
diff --git a/lib/cosEvent/doc/html/.gitignore b/lib/cosEvent/doc/html/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/cosEvent/doc/html/.gitignore
diff --git a/lib/cosEvent/doc/man3/.gitignore b/lib/cosEvent/doc/man3/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/cosEvent/doc/man3/.gitignore
diff --git a/lib/cosEvent/doc/man6/.gitignore b/lib/cosEvent/doc/man6/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/cosEvent/doc/man6/.gitignore
diff --git a/lib/cosEvent/doc/pdf/.gitignore b/lib/cosEvent/doc/pdf/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/cosEvent/doc/pdf/.gitignore
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin.xml
new file mode 100644
index 0000000000..25f2dc805b
--- /dev/null
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>CosEventChannelAdmin</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>1997-11-13</date>
+ <rev>PA1</rev>
+ <file>CosEventChannelAdmin.xml</file>
+ </header>
+ <module>CosEventChannelAdmin</module>
+ <modulesummary>The CosEventChannelAdmin defines a set if event service interfaces that enables decoupled asynchronous communication between objects and implements generic (untyped) version of the OMG COSS standard event service.</modulesummary>
+ <description>
+ <p>The event service defines two roles for objects: the supplier role and
+ the consumer role. Suppliers supply event data to the event channel and
+ consumers receive event data from the channel. Suppliers do not need to
+ know the identity of the consumers, and vice versa. Consumers and
+ suppliers are connected to the event channel via proxies, which are managed
+ by ConsumerAdmin and SupplierAdmin objects.</p>
+ <p>There are four general models of communication. These are: </p>
+ <list type="bulleted">
+ <item>The canonical push model. It allows the suppliers of events to initiate the
+ transfer of event data to consumers. Event channels play the role of
+ <c><![CDATA[Notifier]]></c>. Active suppliers use event channel to push data to
+ passive consumers registered with the event channel.</item>
+ <item>The canonical pull model. It allows consumers to request events from
+ suppliers. Event channels play the role of <c><![CDATA[Procure]]></c> since they
+ procure events on behalf of consumers. Active consumers can explicitly
+ pull data from passive suppliers via the event channels.</item>
+ <item>The hybrid push/pull model. It allows consumers request events queued at
+ a channel by suppliers. Event channels play the role of <c><![CDATA[Queue]]></c>.
+ Active consumers explicitly pull data deposited by active suppliers via
+ the event channels.</item>
+ <item>The hybrid pull/push model. It allows the channel to pull events from
+ suppliers and push them to consumers. Event channels play the role of
+ <c><![CDATA[Intelligent agent]]></c>. Active event channels can pull data from
+ passive suppliers to push it to passive consumers.</item>
+ </list>
+ <p>To get access to all definitions, e.g., exceptions,
+ include necessary <c><![CDATA[hrl]]></c> files by using:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ <p>There are seven different interfaces supported in the service:</p>
+ <list type="bulleted">
+ <item>ProxyPushConsumer</item>
+ <item>ProxyPullSupplier</item>
+ <item>ProxyPullConsumer</item>
+ <item>ProxyPushSupplier</item>
+ <item>ConsumerAdmin</item>
+ <item>SupplierAdmin</item>
+ <item>EventChannel</item>
+ </list>
+ <p>IDL specification for CosEventChannelAdmin:</p>
+ <codeinclude file="../../src/CosEventChannelAdmin.idl" tag="" type="c"></codeinclude>
+ </description>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml
new file mode 100644
index 0000000000..e579d6f6f4
--- /dev/null
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>CosEventChannelAdmin_&shy;ConsumerAdmin</title>
+ <shorttitle>..._ConsumerAdmin</shorttitle>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>1997-11-13</date>
+ <rev>PA1</rev>
+ <file>CosEventChannelAdmin_ConsumerAdmin.xml</file>
+ </header>
+ <module>CosEventChannelAdmin_ConsumerAdmin</module>
+ <modulesummary>This module implements a ConsumerAdmin interface, which allows consumers to be connected to the event channel.</modulesummary>
+ <description>
+ <p>The ConsumerAdmin interface defines the first step for connecting consumers
+ to the event channel. It acts as a factory for creating proxy suppliers.
+ Both consumer administration and supplier administration are defined as separate
+ objects so that the creator of the channel can control the addition of
+ suppliers and consumers. </p>
+ <p>To get access to all definitions include necessary <c><![CDATA[hrl]]></c> files by using:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ </description>
+ <funcs>
+ <func>
+ <name>obtain_push_supplier(Object) -> Return</name>
+ <fsummary>Create a ProxyPushSupplier object</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = #objref</v>
+ </type>
+ <desc>
+ <p>This operation returns a ProxyPushSupplier object reference.</p>
+ </desc>
+ </func>
+ <func>
+ <name>obtain_pull_supplier(Object) -> Return</name>
+ <fsummary>Create a ProxyPullSupplier object</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = #objref</v>
+ </type>
+ <desc>
+ <p>This operation returns a ProxyPullSupplier object reference.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml
new file mode 100644
index 0000000000..809bf89762
--- /dev/null
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>CosEventChannelAdmin_&shy;EventChannel</title>
+ <shorttitle>..._EventChannel</shorttitle>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>1997-11-13</date>
+ <rev>PA1</rev>
+ <file>CosEventChannelAdmin_EventChannel.xml</file>
+ </header>
+ <module>CosEventChannelAdmin_EventChannel</module>
+ <modulesummary>This module implements an Event Channel interface, which plays the role of a mediator between consumers and suppliers.</modulesummary>
+ <description>
+ <p>An event channel is an object that allows multiple suppliers to communicate
+ with multiple consumers in a highly decoupled, asynchronous manner. The event
+ channel is built up incrementally. When an event channel is
+ created no suppliers or consumers are connected to it. Event Channel can
+ implement group communication by serving as a replicator, broadcaster, or
+ multicaster that forward events from one or more suppliers to multiple
+ consumers.</p>
+ <p>It is up to the user to decide when an event channel is created and how
+ references to the event channel are obtained. By representing the event
+ channel as an object, it has all of the properties that apply to objects.
+ One way to manage an event channel is to register it in a naming context,
+ or export it through an operation on an object.</p>
+ <p>To get access to all definitions include necessary <c><![CDATA[hrl]]></c> files by using:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ <p>Any object that possesses an object reference that supports the ProxyPullConsumer
+ interface can perform the following operations:</p>
+ </description>
+ <funcs>
+ <func>
+ <name>for_consumers(Object) -> Return</name>
+ <fsummary>Return a ConsumerAdmin object</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = #objref</v>
+ </type>
+ <desc>
+ <p>This operation returns a ConsumerAdmin object reference. If ConsumerAdmin
+ object does not exist already it creates one.</p>
+ </desc>
+ </func>
+ <func>
+ <name>for_suppliers(Object) -> Return</name>
+ <fsummary>Return a SupplierAdmin object</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = #objref</v>
+ </type>
+ <desc>
+ <p>This operation returns a SupplierAdmin object reference. If SupplierAdmin
+ object does not exist already it creates one.</p>
+ </desc>
+ </func>
+ <func>
+ <name>destroy(Object) -> Return</name>
+ <fsummary>Destroy the event channel</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = #objref</v>
+ </type>
+ <desc>
+ <p></p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml
new file mode 100644
index 0000000000..811c8615b9
--- /dev/null
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>CosEventChannelAdmin_&shy;ProxyPullConsumer</title>
+ <shorttitle>..._ProxyPullConsumer</shorttitle>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>1997-11-13</date>
+ <rev>PA1</rev>
+ <file>CosEventChannelAdmin_ProxyPullConsumer.xml</file>
+ </header>
+ <module>CosEventChannelAdmin_ProxyPullConsumer</module>
+ <modulesummary>This module implements a ProxyPullConsumer interface which acts as a middleman between pull supplier and the event channel.</modulesummary>
+ <description>
+ <p>The ProxyPullConsumer interface defines the second step for connecting pull
+ suppliers to the event channel. A proxy consumer is similar to a normal consumer,
+ but includes an additional method for connecting a supplier to the proxy
+ consumer.</p>
+ <p>To get access to all definitions, e.g., exceptions,
+ include necessary <c><![CDATA[hrl]]></c> files by using:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ <p>Any object that possesses an object reference that supports the ProxyPullConsumer
+ interface can perform the following operations:</p>
+ </description>
+ <funcs>
+ <func>
+ <name>connect_pull_supplier(Object, PullSupplier) -> Return</name>
+ <fsummary>Connect the pull supplier to the proxy pull consumer</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>PullSupplier = #objref of PullSupplier type</v>
+ <v>Return = ok | {'EXCEPTION', E}</v>
+ <v>E = #'CosEventChannelAdmin_AlreadyConnected'{} | #'CosEventChannelAdmin_TypeError'{}</v>
+ </type>
+ <desc>
+ <p>This operation connects PullSupplier object to the ProxyPullConsumer object.
+ If a nil object reference is passed CORBA standard <c><![CDATA[BAD_PARAM]]></c> exception
+ is raised. If the ProxyPullConsumer is already connected to a PullSupplier,
+ then the <c><![CDATA[CosEventChannelAdmin_AlreadyConnected]]></c> exception is raised.
+ Implementations of ProxyPullConsumers may require additional interface
+ functionality; if these requirements are not met the
+ <c><![CDATA[CosEventChannelAdmin_TypeError]]></c> exception will be raised.</p>
+ </desc>
+ </func>
+ <func>
+ <name>disconnect_pull_consumer(Object) -> Return</name>
+ <fsummary>Disconnect the ProxyPullConsumer object from the event channel.</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = ok</v>
+ </type>
+ <desc>
+ <p>This operation disconnects proxy pull consumer from the event channel and
+ sends a notification about the loss of the connection to the pull supplier
+ attached to it.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml
new file mode 100644
index 0000000000..6c22c5ed39
--- /dev/null
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>CosEventChannelAdmin_&shy;ProxyPullSupplier</title>
+ <shorttitle>..._ProxyPullSupplier</shorttitle>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved>Lars Thors</approved>
+ <checked></checked>
+ <date>1997-11-13</date>
+ <rev>PA1</rev>
+ <file>CosEventChannelAdmin_ProxyPullSupplier.xml</file>
+ </header>
+ <module>CosEventChannelAdmin_ProxyPullSupplier</module>
+ <modulesummary>This module implements a ProxyPullSupplier interface which acts as a middleman between pull consumer and the event channel.</modulesummary>
+ <description>
+ <p>The ProxyPullSupplier interface defines the second step for connecting pull consumers to the event channel. A proxy supplier is similar to a normal supplier,
+ but includes an additional method for connecting a consumer to the proxy
+ supplier.</p>
+ <p>To get access to all definitions, e.g., exceptions,
+ include necessary <c><![CDATA[hrl]]></c> files by using:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ <p>Any object that possesses an object reference that supports the ProxyPullSupplier
+ interface can perform the following operations:</p>
+ </description>
+ <funcs>
+ <func>
+ <name>connect_pull_consumer(Object, PullConsumer) -> Return</name>
+ <fsummary>Connect the pull consumer to the proxy pull supplier</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>PullConsumer = #objref of PullConsumer type</v>
+ <v>Return = ok | {'EXCEPTION', #'CosEventChannelAdmin_AlreadyConnected'{}}</v>
+ </type>
+ <desc>
+ <p>This operation connects PullConsumer object to the ProxyPullSupplier object.
+ A nil object reference can be passed to this operation. If so a channel
+ cannot invoke the disconnect_pull_consumer operation on the consumer;
+ the consumer may be disconnected from the channel without being
+ informed. If the ProxyPullSupplier is already connected to a
+ PullConsumer, then the <c><![CDATA[CosEventChannelAdmin_AlreadyConnected]]></c>
+ exception is raised.</p>
+ </desc>
+ </func>
+ <func>
+ <name>disconnect_pull_supplier(Object) -> Return</name>
+ <fsummary>Disconnect the ProxyPullSupplier object from the event channel.</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = ok</v>
+ </type>
+ <desc>
+ <p>This operation disconnects proxy pull supplier from the event channel.
+ It sends a notification about the loss of the connection to the pull consumer
+ attached to it, unless nil object reference was passed at the connection
+ time.</p>
+ </desc>
+ </func>
+ <func>
+ <name>pull(Object) -> Return</name>
+ <fsummary>Transmit data from suppliers to consumers.</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = any</v>
+ </type>
+ <desc>
+ <p>This operation blocks until the event data is available or the
+ <c><![CDATA[CosEventComm_Disconnected]]></c> exception is raised.
+ It returns the event data to the consumer.</p>
+ </desc>
+ </func>
+ <func>
+ <name>try_pull(Object) -> Return</name>
+ <fsummary>Transmit data from suppliers to consumers.</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = {any, bool()}</v>
+ </type>
+ <desc>
+ <p>This operation does not block: if the event data is available, it returns
+ the event data and sets the data availability flag to true; otherwise
+ it returns a long with an undefined value and sets the data availability to
+ false. If the event communication has already been disconnected, the
+ <c><![CDATA[CosEventComm_Disconnected]]></c> exception is raised.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml
new file mode 100644
index 0000000000..2b50f8858a
--- /dev/null
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>CosEventChannelAdmin_&shy;ProxyPushConsumer</title>
+ <shorttitle>..._ProxyPushConsumer</shorttitle>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>1997-11-13</date>
+ <rev>PA1</rev>
+ <file>CosEventChannelAdmin_ProxyPushConsumer.xml</file>
+ </header>
+ <module>CosEventChannelAdmin_ProxyPushConsumer</module>
+ <modulesummary>This module implements a ProxyPushConsumer interface which acts as a middleman between push supplier and the event channel.</modulesummary>
+ <description>
+ <p>The ProxyPushConsumer interface defines the second step for connecting push
+ suppliers to the event channel. A proxy consumer is similar to a normal consumer,
+ but includes an additional method for connecting a supplier to the proxy
+ consumer.</p>
+ <p>To get access to all definitions, e.g., exceptions,
+ include necessary <c><![CDATA[hrl]]></c> files by using:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ <p>Any object that possesses an object reference that supports the ProxyPushConsumer
+ interface can perform the following operations:</p>
+ </description>
+ <funcs>
+ <func>
+ <name>connect_push_supplier(Object, PushSupplier) -> Return</name>
+ <fsummary>Connect the push supplier to the proxy push consumer</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>PushSupplier = #objref of PushSupplier type</v>
+ <v>Return = ok | {'EXCEPTION', #'CosEventChannelAdmin_AlreadyConnected'{}}</v>
+ </type>
+ <desc>
+ <p>This operation connects PushSupplier object to the ProxyPushConsumer object.
+ A nil object reference can be passed to this operation. If so a channel
+ cannot invoke the disconnect_push_supplier operation on the supplier;
+ the supplier may be disconnected from the channel without being
+ informed. If the ProxyPushConsumer is already connected to a
+ PushSupplier, then the <c><![CDATA[CosEventChannelAdmin_AlreadyConnected]]></c>
+ exception is raised.</p>
+ </desc>
+ </func>
+ <func>
+ <name>disconnect_push_consumer(Object) -> Return</name>
+ <fsummary>Disconnect the ProxyPushConsumer object from the event channel.</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = ok</v>
+ </type>
+ <desc>
+ <p>This operation disconnects proxy push consumer from the event channel.
+ Sends a notification about the loss of the connection to the push supplier
+ attached to it, unless nil object reference was passed at the connection
+ time.</p>
+ </desc>
+ </func>
+ <func>
+ <name>push(Object, Data) -> Return</name>
+ <fsummary>Communicate event data to the consumers.</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Data = any</v>
+ <v>Return = ok | {'EXCEPTION', #'CosEventComm_Disconnected'{}}</v>
+ </type>
+ <desc>
+ <p>This operation sends event data to all connected consumers via the
+ event channel. If the event communication has already been disconnected,
+ the <c><![CDATA[CosEventComm_Disconnected]]></c> is raised.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml
new file mode 100644
index 0000000000..cda162f4cd
--- /dev/null
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>CosEventChannelAdmin_&shy;ProxyPushSupplier</title>
+ <shorttitle>..._ProxyPushSupplier</shorttitle>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>1997-11-13</date>
+ <rev>PA1</rev>
+ <file>CosEventChannelAdmin_ProxyPushSupplier.xml</file>
+ </header>
+ <module>CosEventChannelAdmin_ProxyPushSupplier</module>
+ <modulesummary>This module implements a ProxyPushSupplier interface which acts as a middleman between push consumer and the event channel.</modulesummary>
+ <description>
+ <p>The ProxyPushSupplier interface defines the second step for connecting push
+ consumers to the event channel. A proxy supplier is similar to a normal supplier,
+ but includes an additional method for connecting a consumer to the proxy
+ supplier.</p>
+ <p>To get access to all definitions, e.g., exceptions,
+ include necessary <c><![CDATA[hrl]]></c> files by using:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ <p>Any object that possesses an object reference that supports the ProxyPushSupplier
+ interface can perform the following operations:</p>
+ </description>
+ <funcs>
+ <func>
+ <name>connect_push_consumer(Object, PushConsumer) -> Return</name>
+ <fsummary>Connect the push consumer to the proxy push supplier</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>PushConsumer = #objref of PushConsumer type</v>
+ <v>Return = ok | {'EXCEPTION', E}</v>
+ <v>E = #'CosEventChannelAdmin_AlreadyConnected'{} | #'CosEventChannelAdmin_TypeError'{}</v>
+ </type>
+ <desc>
+ <p>This operation connects PushConsumer object to the ProxyPushSupplier object.
+ If a nil object reference is passed CORBA standard <c><![CDATA[BAD_PARAM]]></c> exception
+ is raised. If the ProxyPushSupplier is already connected to a PushConsumer,
+ then the <c><![CDATA[CosEventChannelAdmin_AlreadyConnected]]></c> exception is raised.
+ Implementations of ProxyPushSuppliers may require additional interface
+ functionality; if these requirements are not met the
+ <c><![CDATA[CosEventChannelAdmin_TypeError]]></c> exception will be raised.</p>
+ </desc>
+ </func>
+ <func>
+ <name>disconnect_push_supplier(Object) -> Return</name>
+ <fsummary>Disconnect the ProxyPushSupplier object from the event channel.</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = ok</v>
+ </type>
+ <desc>
+ <p>This operation disconnects proxy push supplier from the event channel and
+ sends a notification about the loss of the connection to the push consumer
+ attached to it.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml
new file mode 100644
index 0000000000..abcd7b6c1f
--- /dev/null
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>1997</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>CosEventChannelAdmin_&shy;SupplierAdmin</title>
+ <shorttitle>..._SupplierAdmin</shorttitle>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>1997-11-13</date>
+ <rev>PA1</rev>
+ <file>CosEventChannelAdmin_SupplierAdmin.xml</file>
+ </header>
+ <module>CosEventChannelAdmin_SupplierAdmin</module>
+ <modulesummary>This module implements a SupplierAdmin interface, which allows suppliers to be connected to the event channel.</modulesummary>
+ <description>
+ <p>The SupplierAdmin interface defines the first step for connecting suppliers
+ to the event channel. It acts as a factory for creating proxy consumers.
+ Both consumer administration and supplier administration are defined as separate
+ objects so that the creator of the channel can control the addition of
+ suppliers and consumers.</p>
+ <p>To get access to all definitions include necessary <c><![CDATA[hrl]]></c> files by using:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ </description>
+ <funcs>
+ <func>
+ <name>obtain_push_consumer(Object) -> Return</name>
+ <fsummary>Create a ProxyPushConsumer object</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = #objref</v>
+ </type>
+ <desc>
+ <p>This operation returns a ProxyPushConsumer object reference.</p>
+ </desc>
+ </func>
+ <func>
+ <name>obtain_pull_consumer(Object) -> Return</name>
+ <fsummary>Create a ProxyPullConsumer object</fsummary>
+ <type>
+ <v>Object = #objref</v>
+ <v>Return = #objref</v>
+ </type>
+ <desc>
+ <p>This operation returns a ProxyPullConsumer object reference.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/Makefile b/lib/cosEvent/doc/src/Makefile
new file mode 100644
index 0000000000..5136c7cfb5
--- /dev/null
+++ b/lib/cosEvent/doc/src/Makefile
@@ -0,0 +1,230 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+#
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../../vsn.mk
+VSN=$(COSEVENT_VSN)
+APPLICATION=cosEvent
+# ----------------------------------------------------
+# Include dependency
+# ----------------------------------------------------
+
+ifndef DOCSUPPORT
+include make.dep
+endif
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+XML_APPLICATION_FILES = ref_man.xml
+XML_REF3_FILES = \
+ CosEventChannelAdmin.xml \
+ CosEventChannelAdmin_ConsumerAdmin.xml \
+ CosEventChannelAdmin_SupplierAdmin.xml \
+ CosEventChannelAdmin_EventChannel.xml \
+ CosEventChannelAdmin_ProxyPullConsumer.xml \
+ CosEventChannelAdmin_ProxyPullSupplier.xml \
+ CosEventChannelAdmin_ProxyPushConsumer.xml \
+ CosEventChannelAdmin_ProxyPushSupplier.xml \
+ cosEventApp.xml
+
+XML_PART_FILES = \
+ part.xml \
+ part_notes.xml
+XML_CHAPTER_FILES = \
+ ch_contents.xml \
+ ch_introduction.xml \
+ ch_event_service.xml \
+ notes.xml
+
+BOOK_FILES = book.xml
+
+TECHNICAL_DESCR_FILES =
+
+GIF_FILES = \
+ book.gif \
+ notes.gif \
+ ref_man.gif \
+ user_guide.gif \
+ e_s_components.gif \
+ e_s_models.gif
+
+
+PS_FILES =
+
+
+# ----------------------------------------------------
+
+INTERNAL_HTML_FILES = $(TECHNICAL_DESCR_FILES:%.xml=$(HTMLDIR)/%.html)
+
+HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
+ $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
+
+INFO_FILE = ../../info
+EXTRA_FILES = summary.html.src \
+ $(DEFAULT_GIF_FILES) \
+ $(DEFAULT_HTML_FILES) \
+ $(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) \
+ $(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html)
+
+MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
+
+ifdef DOCSUPPORT
+
+HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
+
+TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
+
+else
+
+TEX_FILES_BOOK = \
+ $(BOOK_FILES:%.xml=%.tex)
+TEX_FILES_REF_MAN = $(XML_REF3_FILES:%.xml=%.tex) \
+ $(XML_APPLICATION_FILES:%.xml=%.tex)
+TEX_FILES_USERS_GUIDE = \
+ $(XML_CHAPTER_FILES:%.xml=%.tex)
+
+TOP_PDF_FILE = $(APPLICATION)-$(VSN).pdf
+
+TOP_PS_FILE = $(APPLICATION)-$(VSN).ps
+
+$(TOP_PDF_FILE): book.dvi ../../vsn.mk
+ $(DVI2PS) $(DVIPS_FLAGS) -f $< | $(DISTILL) $(DISTILL_FLAGS) > $@
+
+$(TOP_PS_FILE): book.dvi ../../vsn.mk
+ $(DVI2PS) $(DVIPS_FLAGS) -f $< > $@
+endif
+
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+XML_FLAGS +=
+DVIPS_FLAGS +=
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+$(HTMLDIR)/%.gif: %.gif
+ $(INSTALL_DATA) $< $@
+
+ifdef DOCSUPPORT
+
+docs: pdf html man
+
+$(TOP_PDF_FILE): $(XML_FILES)
+
+pdf: $(TOP_PDF_FILE)
+
+html: gifs $(HTML_REF_MAN_FILE)
+
+clean clean_docs:
+ rm -rf $(HTMLDIR)/*
+ rm -f $(MAN3DIR)/*
+ rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
+ rm -f errs core *~
+ rm -f $(JD_HTML) $(JD_PACK)
+
+else
+
+ifeq ($(DOCTYPE),pdf)
+docs: pdf
+else
+ifeq ($(DOCTYPE),ps)
+docs: ps
+else
+docs: html gifs man
+endif
+endif
+
+pdf: $(TOP_PDF_FILE)
+
+ps: $(TOP_PS_FILE)
+
+html: $(HTML_FILES) $(INTERNAL_HTML_FILES)
+
+clean clean_docs clean_tex:
+ rm -f $(TEX_FILES_USERS_GUIDE) $(TEX_FILES_REF_MAN) $(TEX_FILES_BOOK)
+ rm -f $(HTML_FILES) $(MAN3_FILES)
+ rm -f $(TOP_PDF_FILE) $(TOP_PS_FILE)
+ rm -f errs core *~ *xmls_output *xmls_errs $(LATEX_CLEAN)
+endif
+
+man: $(MAN3_FILES)
+
+gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
+
+$(INDEX_TARGET): $(INDEX_SRC)
+ sed -e 's;%VSN%;$(VSN);' $(INDEX_SRC) > $(INDEX_TARGET)
+
+debug opt:
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+ifdef DOCSUPPORT
+
+release_docs_spec: docs
+ $(INSTALL_DIR) $(RELSYSDIR)/doc/pdf
+ $(INSTALL_DATA) $(TOP_PDF_FILE) $(RELSYSDIR)/doc/pdf
+ $(INSTALL_DIR) $(RELSYSDIR)/doc/html
+ $(INSTALL_DATA) $(HTMLDIR)/* \
+ $(RELSYSDIR)/doc/html
+ $(INSTALL_DATA) $(INFO_FILE) $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELEASE_PATH)/man/man3
+ $(INSTALL_DATA) $(MAN3DIR)/* $(RELEASE_PATH)/man/man3
+
+else
+
+ifeq ($(DOCTYPE),pdf)
+release_docs_spec: pdf
+ $(INSTALL_DIR) $(RELEASE_PATH)/pdf
+ $(INSTALL_DATA) $(TOP_PDF_FILE) $(RELEASE_PATH)/pdf
+else
+ifeq ($(DOCTYPE),ps)
+release_docs_spec: ps
+ $(INSTALL_DIR) $(RELEASE_PATH)/ps
+ $(INSTALL_DATA) $(TOP_PS_FILE) $(RELEASE_PATH)/ps
+else
+release_docs_spec: docs
+ $(INSTALL_DIR) $(RELSYSDIR)/doc/html
+ $(INSTALL_DATA) $(GIF_FILES) $(EXTRA_FILES) $(HTML_FILES) \
+ $(RELSYSDIR)/doc/html
+ $(INSTALL_DATA) $(INFO_FILE) $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELEASE_PATH)/man/man3
+ $(INSTALL_DATA) $(MAN3_FILES) $(RELEASE_PATH)/man/man3
+
+endif
+endif
+
+endif
+
+release_spec:
+
diff --git a/lib/cosEvent/doc/src/book.gif b/lib/cosEvent/doc/src/book.gif
new file mode 100644
index 0000000000..94b3868792
--- /dev/null
+++ b/lib/cosEvent/doc/src/book.gif
Binary files differ
diff --git a/lib/cosEvent/doc/src/book.xml b/lib/cosEvent/doc/src/book.xml
new file mode 100644
index 0000000000..68e26be0ea
--- /dev/null
+++ b/lib/cosEvent/doc/src/book.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE book SYSTEM "book.dtd">
+
+<book xmlns:xi="http://www.w3.org/2001/XInclude">
+ <header titlestyle="normal">
+ <copyright>
+ <year>1999</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>cosEvent</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date>1998-04-25</date>
+ <rev>1.0</rev>
+ <file>book.xml</file>
+ </header>
+ <insidecover>
+ </insidecover>
+ <pagetext>cosEvent</pagetext>
+ <preamble>
+ <contents level="2"></contents>
+ </preamble>
+ <parts lift="no">
+ <xi:include href="part.xml"/>
+ </parts>
+ <applications>
+ <xi:include href="ref_man.xml"/>
+ </applications>
+ <releasenotes>
+ <xi:include href="notes.xml"/>
+ </releasenotes>
+ <listofterms></listofterms>
+ <index></index>
+</book>
+
diff --git a/lib/cosEvent/doc/src/ch_contents.xml b/lib/cosEvent/doc/src/ch_contents.xml
new file mode 100644
index 0000000000..bc2838b36d
--- /dev/null
+++ b/lib/cosEvent/doc/src/ch_contents.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>1999</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>The cosEvent Application</title>
+ <prepared>Niclas Eklund</prepared>
+ <docno></docno>
+ <date>1999-09-17</date>
+ <rev>B</rev>
+ <file>ch_contents.xml</file>
+ </header>
+
+ <section>
+ <title>Content Overview</title>
+ <p>The cosEvent documentation is divided into three sections:
+ </p>
+ <list type="bulleted">
+ <item>
+ <p>PART ONE - The User's Guide
+ <br></br>Description of the cosEvent Application including
+ services and a small tutorial demonstrating
+ the development of a simple service.</p>
+ </item>
+ <item>
+ <p>PART TWO - Release Notes
+ <br></br>A concise history of cosEvent.</p>
+ </item>
+ <item>
+ <p>PART THREE - The Reference Manual
+ <br></br> A quick reference guide, including a
+ brief description, to all the functions available in cosEvent.</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Brief Description of the User's Guide</title>
+ <p>The User's Guide contains the following parts:</p>
+ <list type="bulleted">
+ <item>
+ <p>CosEvent overview</p>
+ </item>
+ <item>
+ <p>CosEvent installation and examples</p>
+ </item>
+ </list>
+ </section>
+</chapter>
+
diff --git a/lib/cosEvent/doc/src/ch_event_service.xml b/lib/cosEvent/doc/src/ch_event_service.xml
new file mode 100644
index 0000000000..c65f6767ad
--- /dev/null
+++ b/lib/cosEvent/doc/src/ch_event_service.xml
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>1997</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>Event Service</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date>97-11-19</date>
+ <rev>A</rev>
+ <file>ch_es_intro.xml</file>
+ </header>
+
+ <section>
+ <title>Overview of the CosEvent Service</title>
+ <p>The Event service allows programmers to subscribe to
+ information channels. Suppliers can generate events without knowing the
+ consumer identities and the consumer can receive events without knowing
+ the supplier identity. Both push and pull event delivery are supported.
+ The Event service will queue information and processes.
+ </p>
+ <p>The CORBA Event service provides a flexible model for
+ asynchronous, decoupled communication between objects. This
+ chapter outlines communication models and the roles and
+ relationships of key components in the CosEvent service. It
+ shows a simple example on use of this service.</p>
+ </section>
+
+ <section>
+ <title>Event Service Components</title>
+ <p>There are five components in the OMG CosEvent service architecture. These
+ are described below:</p>
+ <marker id="e_s_components"></marker>
+ <image file="e_s_components.gif">
+ <icaption>
+Figure 1: Event service Components</icaption>
+ </image>
+ <list type="bulleted">
+ <item><em>Suppliers and consumers:</em> Consumers are the ultimate targets of
+ events generated by suppliers. Consumers and suppliers can both play active
+ and
+ passive roles. There could be two types of consumers and suppliers: push
+ or pull. A PushSupplier object can actively push an event to a passive
+ PushConsumer object. Likewise, a PullSupplier object can passively
+ wait for a PullConsumer object to actively pull an event from it.</item>
+ <item><em>EventChannel:</em> The central abstraction in the CosEvent service is the
+ EventChannel which plays the role of a mediator between consumers and
+ suppliers. Consumers and suppliers register their interest with the
+ EventChannel. It can provide many-to-many communication. The channel
+ consumes events from one or more suppliers, and supplies events to one
+ or more consumers. An EventChannel can support consumers and suppliers
+ using different communication models.</item>
+ <item><em>ProxySuppliers and ProxyConsumers:</em> ProxySuppliers act as middlemen
+ between consumers and the EventChannel. A ProxySupplier is similar to
+ a normal supplier, but includes an additional method for connecting a
+ consumer to the ProxySupplier. Likewise, ProxyConsumers act as
+ middlemen between suppliers and the EventChannel. A ProxyConsumer is
+ similar to a normal consumer, but includes an additional method for
+ connecting a supplier to the ProxyConsumer.</item>
+ <item><em>Supplier and consumer administrations:</em> Consumer administration acts as
+ a factory for creating ProxySuppliers. Supplier administration acts as
+ a factory for creating ProxyConsumers.</item>
+ </list>
+ </section>
+
+ <section>
+ <title>Event Service Communication Models</title>
+ <p>There are four general models of component collaboration in the OMG CosEvent service
+ architecture. The following describes these models:
+ (Please note that proxies are not shown in the diagrams for simplicity).</p>
+ <marker id="e_s_models"></marker>
+ <image file="e_s_models.gif">
+ <icaption>
+Figure 2: Event service Communication Models</icaption>
+ </image>
+ <list type="bulleted">
+ <item><em>The Canonical Push Model:</em> The Canonical push model shown in figure 2(A) allows
+ the suppliers of events to initiate the transfer of event data to consumers.
+ In this model, suppliers are active initiators and consumers are the passive
+ targets of the requests. EventChannels play the role of <c><![CDATA[Notifier]]></c>.
+ Thus, active suppliers use EventChannels to push data to passive consumers that
+ have registered with the EventChannels.</item>
+ <item><em>The Canonical Pull Model:</em>The Canonical pull model shown
+ in figure 2(B)
+ allows consumers to request events from suppliers. In this model,
+ Consumers are
+ active initiators and suppliers are the passive targets of the pull
+ requests.
+ EventChannel plays the role of <c><![CDATA[Procurer]]></c> since it procures
+ events
+ on behalf of consumers. Thus, active consumers can explicitly pull
+ data
+ from passive suppliers via the EventChannels.</item>
+ <item><em>The Hybrid Push/Pull Model:</em> The push/pull model shown in figure 2(C) is a
+ hybrid that allows consumers to request events queued at an EventChannel
+ by suppliers. In this model, both suppliers and consumers are active
+ initiators of the requests. EventChannels play the role of <c><![CDATA[Queue]]></c>.
+ Thus, active consumers can explicitly pull data deposited by active
+ suppliers via the EventChannels.</item>
+ <item><em>The Hybrid Pull/Push Model:</em> The pull/push model shown in figure 2(D) is another
+ hybrid that allows the channel to pull events from suppliers and push them
+ to consumers. In this model, suppliers are passive targets of pull requests
+ and consumers are passive targets of pushes. EventChannels play the role of
+ <c><![CDATA[Intelligent Agent]]></c>. Thus, active EventChannels can pull data from
+ passive suppliers and push that data to passive consumers.</item>
+ </list>
+ </section>
+
+ <section>
+ <title>A Tutorial on How to Create a Simple Service</title>
+ <p>To be able to use the cosEvent application supplier and consumer objects
+ must be implemented, which must inherit from the appropriate interface
+ defined in the <em>CosEventComm.idl</em> specification.</p>
+ <p>We start by creating an interface which inherits from the correct interface,
+ e.g., CosEventComm::PushConsumer. Hence, we must also implement all
+ operations defined in the PushConsumer interface. The IDL-file could look like:
+ </p>
+ <code type="c"><![CDATA[
+#ifndef _MYCLIENT_IDL
+#define _MYCLIENT_IDL
+#include <CosEventComm.idl>
+
+module myClientImpl {
+
+ interface ownInterface:CosEventComm::PushConsumer {
+
+ void ownFunctions(in any NeededArguments)
+ raises(OwnExceptions);
+
+ };
+};
+
+#endif
+ ]]></code>
+ <p>Run the IDL compiler on this file by calling the <c><![CDATA[ic:gen/1]]></c> function.
+ This will produce the API named <c><![CDATA[myClientImpl_ownInterface.erl]]></c>.
+ After generating the API stubs and the server skeletons it is time to
+ implement the servers and if no special options are sent
+ to the IDl compiler the file name is <c><![CDATA[myClientImpl_ownInterface_impl.erl]]></c>.</p>
+ </section>
+
+ <section>
+ <title>How to Run Everything</title>
+ <p>Below is a short transcript on how to run cosEvent. </p>
+ <code type="none"><![CDATA[
+
+%% Start Mnesia and Orber
+mnesia:delete_schema([node()]),
+mnesia:create_schema([node()]),
+orber:install([node()]),
+mnesia:start(),
+orber:start(),
+
+%% Install cosEvent in the IFR.
+cosEventApp:install(),
+
+%% Register the application specific Client implementations
+%% in the IFR.
+'oe_myClientImpl':'oe_register'(),
+
+%% Start the cosEvent application.
+cosEventApp:start(),
+
+%% Start a channel using the default configuration
+Ch = cosEventApp:start_channel(),
+%% ... or use configuration parameters.
+Ch = cosEventApp:start_channel([{pull_interval, 10}, {maxEvents, 50}]),
+
+%% Retrieve a SupplierAdmin and a ConsumerAdmin.
+AdminSupplier = 'CosEventChannelAdmin_EventChannel':for_suppliers(Ch),
+AdminConsumer = 'CosEventChannelAdmin_EventChannel':for_consumers(Ch),
+
+%% Use the corresponding Admin object to get access to wanted Proxies
+
+%% Create a Push Consumer Proxy, which the Client Push Supplier will push
+%% events to.
+ProxyPushConsumer =
+ 'CosEventChannelAdmin_SupplierAdmin':obtain_push_consumer(AdminSupplier),
+
+%% Create a Push Supplier Proxy, which will push events to the registered
+%% Push Consumer.
+ProxyPushSupplier =
+ 'CosEventChannelAdmin_ConsumerAdmin':obtain_push_supplier(AdminConsumer),
+
+
+%% Create application Clients. We can, for example, start the Clients
+%% our selves or look them up in the naming service. This is application
+%% specific.
+Consumer = myClientImpl_ownInterface:oe_create(),
+Supplier = ...
+
+%% Connect each Client to the corresponding Proxy.
+'CosEventChannelAdmin_ProxyPushConsumer':
+ connect_push_supplier(ProxyPushConsumer, Supplier),
+'CosEventChannelAdmin_ProxyPushSupplier':
+ connect_push_consumer(ProxyPushSupplier, Consumer),
+ ]]></code>
+ <p>The example above, exemplifies a event system, i.e., the <em>Canonical Push Model</em>, where the Supplier client in some way generates event
+ and pushes them to the proxy. The push supplier proxies will eventually
+ push the events to each Consumer client.</p>
+ </section>
+</chapter>
+
diff --git a/lib/cosEvent/doc/src/ch_introduction.xml b/lib/cosEvent/doc/src/ch_introduction.xml
new file mode 100644
index 0000000000..8f948a5530
--- /dev/null
+++ b/lib/cosEvent/doc/src/ch_introduction.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>1999</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>Introduction to cosEvent</title>
+ <prepared>Niclas Eklund</prepared>
+ <docno></docno>
+ <date>1999-09-17</date>
+ <rev></rev>
+ <file>ch_introduction.xml</file>
+ </header>
+
+ <section>
+ <title>Overview</title>
+ <p>The cosEvent application is a Event Service compliant with the <url href="http://www.omg.org">OMG</url>
+ Event Service CosEvent.
+ </p>
+
+ <section>
+ <title>Purpose and Dependencies</title>
+ <p>CosEvent is dependent on <em>Orber</em>, which provides CORBA functionality in an Erlang environment.</p>
+ </section>
+
+ <section>
+ <title>Prerequisites</title>
+ <p>To fully understand the concepts presented in the
+ documentation, it is recommended that the user is familiar
+ with distributed programming and CORBA.
+ </p>
+ <p>Recommended reading includes <em>CORBA, Fundamentals and Programming - Jon Siegel</em> and <em>Open Telecom Platform Documentation Set</em>. It is also helpful to have read
+ <em>Concurrent Programming in Erlang</em>.</p>
+ </section>
+ </section>
+</chapter>
+
diff --git a/lib/cosEvent/doc/src/cosEventApp.xml b/lib/cosEvent/doc/src/cosEventApp.xml
new file mode 100644
index 0000000000..d83f44acb1
--- /dev/null
+++ b/lib/cosEvent/doc/src/cosEventApp.xml
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2001</year>
+ <year>2007</year>
+ <holder>Ericsson AB, All Rights Reserved</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ The Initial Developer of the Original Code is Ericsson AB.
+ </legalnotice>
+
+ <title>cosEventApp</title>
+ <prepared>Niclas Eklund</prepared>
+ <responsible>Niclas Eklund</responsible>
+ <docno></docno>
+ <approved>Niclas Eklund</approved>
+ <checked></checked>
+ <date>2000-01-31</date>
+ <rev>PA1</rev>
+ <file>cosEventApp.xml</file>
+ </header>
+ <module>cosEventApp</module>
+ <modulesummary>The main module of the cosEvent application.</modulesummary>
+ <description>
+ <p>To get access to the record definitions for the structures use:<br></br><c><![CDATA[-include_lib("cosEvent/include/*.hrl").]]></c></p>
+ <p>This module contains the functions for starting and stopping the application.</p>
+ </description>
+ <funcs>
+ <func>
+ <name>install() -> Return</name>
+ <fsummary>Install the cosEvent application</fsummary>
+ <type>
+ <v>Return = ok | {'EXCEPTION', E} | {'EXIT', R}</v>
+ </type>
+ <desc>
+ <p>This operation installs the cosEvent application.</p>
+ </desc>
+ </func>
+ <func>
+ <name>uninstall() -> Return</name>
+ <fsummary>Uninstall the cosEvent application</fsummary>
+ <type>
+ <v>Return = ok | {'EXCEPTION', E} | {'EXIT', R}</v>
+ </type>
+ <desc>
+ <p>This operation uninstalls the cosEvent application.</p>
+ </desc>
+ </func>
+ <func>
+ <name>start() -> Return</name>
+ <fsummary>Start the cosEvent application</fsummary>
+ <type>
+ <v>Return = ok | {error, Reason}</v>
+ </type>
+ <desc>
+ <p>This operation starts the cosEvent application.</p>
+ </desc>
+ </func>
+ <func>
+ <name>stop() -> Return</name>
+ <fsummary>Stop the cosEvent application</fsummary>
+ <type>
+ <v>Return = ok | {error, Reason}</v>
+ </type>
+ <desc>
+ <p>This operation stops the cosEvent application.</p>
+ </desc>
+ </func>
+ <func>
+ <name>start_channel() -> Channel</name>
+ <fsummary>Start a channel with default settings</fsummary>
+ <type>
+ <v>Channel = #objref</v>
+ </type>
+ <desc>
+ <p>This operation creates a new instance of a
+ <seealso marker="CosEventChannelAdmin_EventChannel">Event Channel</seealso>
+ using the default settings.</p>
+ </desc>
+ </func>
+ <func>
+ <name>start_channel(Options) -> Channel</name>
+ <fsummary>Start a channel with settings defined by the given options</fsummary>
+ <type>
+ <v>Options = [Option]</v>
+ <v>Option = {pull_interval, Seconds} | {typecheck, Boolean} | {maxEvents, Integer} | {blocking, Boolean}</v>
+ <v>Channel = #objref</v>
+ </type>
+ <desc>
+ <p>This operation creates a new instance of a
+ <seealso marker="CosEventChannelAdmin_EventChannel">Event Channel</seealso></p>
+ <p></p>
+ <list type="bulleted">
+ <item><c><![CDATA[{pull_interval, Seconds}]]></c> - determine how often Proxy Pull
+ Consumers will check for new events with the client application. The
+ default value is 20 seconds.</item>
+ <item><c><![CDATA[{typecheck, Boolean}]]></c> - if this option is set to true the
+ proxies will check if the supplied client object is of correct type.
+ The default value is false.</item>
+ <item><c><![CDATA[{maxEvents, Integer}]]></c> - this option determine how many events
+ the <c><![CDATA[ProxyPullSuppliers]]></c> will store before discarding events.
+ If the limit is reached events will be discarded in any order.
+ The default value is 300.</item>
+ <item><c><![CDATA[{blocking, Boolean}]]></c> - this option determine the behavior of
+ the channel when handling events internally. If set to <c><![CDATA[true]]></c> the
+ risk of a single event supplier floods the system is reduced, but
+ the performance may also be reduced.
+ The default value is <c><![CDATA[true]]></c>.</item>
+ </list>
+ </desc>
+ </func>
+ <func>
+ <name>start_channel_link() -> Channel</name>
+ <fsummary>Start a channel, which is linked to the invoking process, with default settings</fsummary>
+ <type>
+ <v>Channel = #objref</v>
+ </type>
+ <desc>
+ <p>This operation creates a new instance of a
+ <seealso marker="CosEventChannelAdmin_EventChannel">Event Channel</seealso>,
+ which is linked to the invoking process, using the default settings.</p>
+ </desc>
+ </func>
+ <func>
+ <name>start_channel_link(Options) -> Channel</name>
+ <fsummary>Start a channel, which is linked to the invoking process, with settings defined by the given options</fsummary>
+ <type>
+ <v>Options = [Option]</v>
+ <v>Option = {pull_interval, Seconds} | {typecheck, Boolean} | {maxEvents, Integer} | {blocking, Boolean}</v>
+ <v>Channel = #objref</v>
+ </type>
+ <desc>
+ <p>This operation creates a new instance of a
+ <seealso marker="CosEventChannelAdmin_EventChannel">Event Channel</seealso>,
+ which is linked to the invoking process, with settings defined by the
+ given options. Allowed options are the same as for
+ <c><![CDATA[cosEventApp:start_channel/1]]></c>.</p>
+ </desc>
+ </func>
+ <func>
+ <name>stop_channel(Channel) -> Reply</name>
+ <fsummary>Terminate the target object</fsummary>
+ <type>
+ <v>Channel = #objref</v>
+ <v>Reply = ok | {'EXCEPTION', E}</v>
+ </type>
+ <desc>
+ <p>This operation stop the target event channel.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
diff --git a/lib/cosEvent/doc/src/e_s_components.gif b/lib/cosEvent/doc/src/e_s_components.gif
new file mode 100644
index 0000000000..a448c14ce0
--- /dev/null
+++ b/lib/cosEvent/doc/src/e_s_components.gif
Binary files differ
diff --git a/lib/cosEvent/doc/src/e_s_components.ps b/lib/cosEvent/doc/src/e_s_components.ps
new file mode 100644
index 0000000000..c220467916
--- /dev/null
+++ b/lib/cosEvent/doc/src/e_s_components.ps
@@ -0,0 +1,3595 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (./e_s_components.tmp.eps)
+%%CreationDate: (Tue Jun 12 17:30:24 2001)
+%%BoundingBox: 0 37 377 162
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 0
+%%EndComments
+
+%%BeginDefaults
+%%PageOrientation: Portrait
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image. The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/buffer 512 string def
+/byte 1 string def
+/color_packet 3 string def
+/pixels 768 string def
+
+/DirectClassPacket
+{
+ %
+ % Get a DirectClass packet.
+ %
+ % Parameters:
+ % red.
+ % green.
+ % blue.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+ %
+ % Display a DirectClass image.
+ %
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { DirectClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayDirectClassPacket } image
+ } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+ %
+ % Get a DirectClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % red
+ % green
+ % blue
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile color_packet readhexstring pop pop
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet; convert to grayscale.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ color_packet 0 get 0.299 mul
+ color_packet 1 get 0.587 mul add
+ color_packet 2 get 0.114 mul add
+ cvi
+ /gray_packet exch def
+ compression 0 gt
+ {
+ /number_pixels 1 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add def
+ } ifelse
+ 0 1 number_pixels 1 sub
+ {
+ pixels exch gray_packet put
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+ %
+ % Get a PseudoClass packet.
+ %
+ % Parameters:
+ % index: index into the colormap.
+ % length: number of pixels minus one of this color (optional).
+ %
+ currentfile byte readhexstring pop 0 get
+ /offset exch 3 mul def
+ /color_packet colormap offset 3 getinterval def
+ compression 0 gt
+ {
+ /number_pixels 3 def
+ }
+ {
+ currentfile byte readhexstring pop 0 get
+ /number_pixels exch 1 add 3 mul def
+ } ifelse
+ 0 3 number_pixels 1 sub
+ {
+ pixels exch color_packet putinterval
+ } for
+ pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+ %
+ % Display a PseudoClass image.
+ %
+ % Parameters:
+ % class: 0-PseudoClass or 1-Grayscale.
+ %
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ class 0 gt
+ {
+ currentfile buffer readline pop
+ token pop /depth exch def pop
+ /grays columns 8 add depth sub depth mul 8 idiv string def
+ columns rows depth
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { currentfile grays readhexstring pop } image
+ }
+ {
+ %
+ % Parameters:
+ % colors: number of colors in the colormap.
+ % colormap: red, green, blue color packets.
+ %
+ currentfile buffer readline pop
+ token pop /colors exch def pop
+ /colors colors 3 mul def
+ /colormap colors string def
+ currentfile colormap readhexstring pop pop
+ systemdict /colorimage known
+ {
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { PseudoClassPacket } false 3 colorimage
+ }
+ {
+ %
+ % No colorimage operator; convert to grayscale.
+ %
+ columns rows 8
+ [
+ columns 0 0
+ rows neg 0 rows
+ ]
+ { GrayPseudoClassPacket } image
+ } ifelse
+ } ifelse
+} bind def
+
+/DisplayImage
+{
+ %
+ % Display a DirectClass or PseudoClass image.
+ %
+ % Parameters:
+ % x & y translation.
+ % x & y scale.
+ % label pointsize.
+ % image label.
+ % image columns & rows.
+ % class: 0-DirectClass or 1-PseudoClass.
+ % compression: 0-RunlengthEncodedCompression or 1-NoCompression.
+ % hex color packets.
+ %
+ gsave
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ x y translate
+ currentfile buffer readline pop
+ token pop /x exch def
+ token pop /y exch def pop
+ currentfile buffer readline pop
+ token pop /pointsize exch def pop
+ /Helvetica findfont pointsize scalefont setfont
+ x y scale
+ currentfile buffer readline pop
+ token pop /columns exch def
+ token pop /rows exch def pop
+ currentfile buffer readline pop
+ token pop /class exch def pop
+ currentfile buffer readline pop
+ token pop /compression exch def pop
+ class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+ grestore
+} bind def
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 37 377 162
+userdict begin
+%%BeginData:
+DisplayImage
+0 37
+377.000000 125.000000
+12
+599 199
+1
+1
+1
+8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+000000000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaea0000000000000000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
+00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea00000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000eaea00eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaea00eaeaea00
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaea00eaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00eaeaea00eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00eaeaea00eaeaea00ea0000ea00ea000000eaea0000ea0000ea000000ea00000000ea
+eaeaeaea0000ea0000ea0000ea0000ea0000ea0000eaea00ea0000eaeaea0000eaea0000
+ea00eaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00eaeaea00000000eaeaea00
+00ea00eaeaea00eaea00ea00eaeaea00eaeaea00eaea0000eaeaeaea00eaea00eaea0000
+eaea00ea0000eaea00ea00eaea00eaea00eaea00eaea0000eaeaeaeaeaeaeaeaeaeaeaea
+ea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00eaeaea00eaeaeaeaeaea00eaea00eaeaea00eaeaea00eaea
+eaea00eaea00eaeaeaeaea00eaeaea00eaea00eaea00eaeaea00ea00eaeaea00ea00eaea
+00eaea00000000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ea
+eaea00eaeaeaeaeaea00eaea00eaeaea00eaeaea00eaeaeaeaea00ea00eaeaeaeaea00ea
+eaea00eaea00eaea00eaeaea00ea00eaeaea00ea00eaea00eaea00eaeaeaeaea00eaeaea
+eaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffff00000000000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00eaeaea00eaeaeaeaeaea00eaea00
+eaeaea00eaea00ea00eaeaeaea00ea00ea00eaeaea00eaeaea00eaea00eaea0000eaea00
+ea0000eaea00ea00eaea00eaea00eaea00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaea00ff
+ffffffffffffffffff0000ffffff00ffffffffffffffffffffffffffffffffffffffffff
+ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00ea000000eaeaeaea000000eaea000000eaea0000ea0000eaeaea
+ea00eaea00000000eaeaeaeaea00000000ea00ea0000eaea00ea0000ea000000000000ea
+ea0000eaea000000eaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea00ffffffffffffffffffffffff0000ff00ffffff000000ff0000ffffff00
+0000ffff000000ff0000ff00000000ffff00000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea00ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffff
+ffffffffffff00000000ffffffff0000ff00ffffff0000ff0000ffff0000000000ffff00
+00ffff0000ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaea000000eaeaea000000eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffff0000ff00ffffff
+ff0000ff00ffffff0000000000ffff0000ff0000ffff0000ffff000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00000000000000000000000000000000000000000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+00ffffffff0000ffffffffffffffffff0000ffffffffffff0000ff00ffffff0000ffffff
+ffff0000ff0000ffff0000ffffffff000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffff00000000ffff
+ffffff0000ffffff00ffffff0000ffffffff0000ffff00ffff0000ff0000ffff0000ffff
+00ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea0000ffffffffffffffffffffffffff000000ff00000000000000ffffff00
+00ffffffffff000000ffff000000ff000000ff000000ff00000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000eaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000ffffffffff00
+0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffff
+ffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000000000000000ffffffffffffffffff000000eaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffff
+ff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000
+0000ffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff
+ffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea0000000000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000000000000000000000000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00000000000000ffffffffffffffffffffffffffffffffffffffffffff000000
+0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000000000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00000000000000eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaea00000000000000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
+0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000ffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ff00000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffff00000000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffff
+ff000000ffffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00000000ffffffffff00000000ffffffffffffffff
+ffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea000000ea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ff000000000000ffffffffffffffffffff0000eaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00ffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffff0000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaea
+ea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
+00000000ffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffff00eaeaea00eaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffff00eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ff00ffffff000000ff0000ffffff000000ffff000000ff0000ff00000000ffff0000
+0000ffffffffffffffffffffffff00eaeaea000000ea00ea000000eaea0000ea0000ea00
+0000ea00000000eaeaeaeaeaeaeaea000000eaea0000ea00eaeaea0000000000ea0000ea
+0000ea00eaea00eaeaeaea0000eaea0000ea00eaeaeaeaeaeaeaea00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000000000000000ffffff00eaeaeaea000000ea00eaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff0000ff00ff
+ffff0000ff0000ffff0000000000ffff0000ffff0000ffff00ffffffffffffffffffffff
+ff00000000eaea0000ea00eaeaea00eaea00ea00eaeaea00eaeaea00ea00eaeaeaeaeaea
+ea00eaeaea00eaea0000ea00ea00eaea00ea00eaea00eaea0000ea0000ea00eaea00eaea
+00eaea0000eaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000
+00000000ff00eaeaeaea00eaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ff00ffffffff0000ff00ffffff0000000000ffff0000ff00
+00ffff0000ffff000000ffffffffffffffffffffffffffff00eaeaeaeaea00eaea00eaea
+ea00eaeaea00eaeaeaea00eaea00eaea00eaeaeaeaeaeaea00eaeaea00eaea00eaea00ea
+0000eaeaea00eaea00eaea00eaea00eaea00eaea00000000eaea00eaeaeaeaeaeaeaeaea
+ea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00000000ffffffffffffffff00eaeaeaea00eaeaea
+eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffff0000ff00ffffff0000ffffffffff0000ff0000ffff0000ffffffff000000ff
+ffffffffffffffffffffff00eaeaeaeaea00eaea00eaeaea00eaeaea00eaeaeaeaea00ea
+00eaea00eaeaeaeaea00ea00eaeaea00eaea00eaea00eaeaea0000ea00eaea00eaea00ea
+ea00eaea00eaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00eaeaeaea00eaeaeaeaeaeaeaea000000eaea0000ea
+00eaeaea0000000000ea0000ea0000ea00eaea00eaeaeaea0000eaea0000ea00eaeaeaea
+eaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffff00ffffff0000ffffffff00
+00ffff00ffff0000ff0000ffff0000ffff00ffff0000ffffffffffffffffffffffff00ea
+eaeaeaea00eaea00eaeaea00eaea00ea00eaeaeaea00ea00eaeaea00eaeaea00eaea00ea
+eaea00eaea00eaea00ea00eaea00ea00eaea00eaea00eaea00eaea00eaea00eaea00eaea
+00eaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00eaeaeaea00eaeaeaeaeaeaea00eaeaea00eaea0000ea00ea00eaea00ea00eaea00ea
+ea0000ea0000ea00eaea00eaea00eaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000000000ffffff0000ffffffffff000000ffff000000ff000000ff
+000000ff00000000ffffffffffffffffffffffff000000eaeaea000000eaea000000eaea
+0000ea0000eaeaeaea00eaeaeaeaea000000eaeaeaea000000eaea000000ea0000000000
+eaeaea00000000000000ea0000ea0000eaea0000eaea000000eaeaeaeaeaeaeaea00ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaea00eaeaeaeaeaea
+ea00eaeaea00eaea00eaea00ea0000eaeaea00eaea00eaea00eaea00eaea00eaea000000
+00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00eaeaeaea00eaeaeaeaea00ea00eaeaea00eaea00eaea00ea
+eaea0000ea00eaea00eaea00eaea00eaea00eaea00eaeaeaeaea00eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ea
+eaeaeaea00eaeaea00eaea00eaeaea00eaea00eaea00ea00eaea00ea00eaea00eaea00ea
+ea00eaea00eaea00eaea00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000000000000000ffff0000eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaea000000eaeaeaea00
+0000eaea000000ea0000000000eaeaea00000000000000ea0000ea0000eaea0000eaea00
+0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+000000000000000000ff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff0000
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000000000000000ffffffffffff0000eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00000000eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000
+000000ffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00000000ff0000000000ffffffffffffffffffffffff
+ffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00ffffffffff00000000ffffffffffffffffffffffffffffffffffff000000eaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea000000ffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000ffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffff
+ff00000000ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea0000000000000000ffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000
+0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea00ffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00eaeaeaeaeaeaea00000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000eaea
+00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffff
+ffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaea00eaeaea00ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffff00000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00eaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea00ffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaea
+eaeaeaeaea00eaeaeaeaea0000ea0000ea0000ea0000ea0000ea0000eaea00ea0000eaea
+ea0000eaea0000ea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaea0000eaeaeaea00
+eaea00eaea0000eaea00ea0000eaea00ea00eaea00eaea00eaea00eaea0000eaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00eaeaeaeaeaeaeaeaeaeaeaea00eaeaea00eaea00eaea00eaeaea00ea00ea
+eaea00ea00eaea00eaea00000000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaea
+eaeaeaeaea00eaeaea00eaea00eaea00eaeaea00ea00eaeaea00ea00eaea00eaea00eaea
+eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaea00eaeaea00eaeaea00eaea00
+eaea0000eaea00ea0000eaea00ea00eaea00eaea00eaea00eaea00eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff00eaeaeaeaeaeaea00000000eaeaeaeaea00000000ea00ea0000eaea00ea0000ea
+000000000000eaea0000eaea000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ff0000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
+0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00
+eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00000000000000ffffffffffffffffffffffffffffffffff00
+00000000000000000000000000000000000000eaeaeaeaeaeaeaeaea000000000000ffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000eaeaea000000eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+0000000000ffffffffffffffffffffffffff00000000eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000000000ffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffff
+ffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaea00000000000000ffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00000000000000000000ffffffffffffff0000eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+00000000ffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000eaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaea00eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00
+eaea00ea000000eaea0000ea0000eaeaea0000ea00eaea000000eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000
+00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000eaea00eaeaea00ea00ea
+ea00eaeaea0000ea00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaea00eaea00eaeaea00ea00eaea00000000eaeaea00eaea00eaea00ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffff000000
+00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaea
+eaeaea00ea00eaea00eaeaeaeaeaea00eaea00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+000000ffffffffffffffffffffffffffffffffffff0000ffffff00ffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaea00eaea00eaeaea00eaea00ea
+eaea00eaea00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea000000000000eaeaea00eaeaeaea0000eaeaea000000ea0000ea0000eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffff0000ff00ff
+ffff000000ff0000ffffff000000ffff000000ff0000ff00000000ffff00000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000000000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea0000ffffffffffffffffffffff00000000ffffffff0000ff00ffffff0000ff
+0000ffff0000000000ffff0000ffff0000ffff00ffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea0000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffff
+ffffffffff0000ff00ffffffff0000ff00ffffff0000000000ffff0000ff0000ffff0000
+ffff000000ffffffffffffffffffffffffffffffffffffffffffffffff000000eaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaea000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffff0000ffffffffffff
+0000ff00ffffff0000ffffffffff0000ff0000ffff0000ffffffff000000ffffffffffff
+ffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff00ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00ffffffffffffff0000ffffff00ffffff0000ffffffff0000ffff00ff
+ff0000ff0000ffff0000ffff00ffff0000ffffffffffffffffffffffffffffffffffff00
+00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00000000ffffffffffffffff000000000000eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea0000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffff
+ff00000000000000ffffff0000ffffffffff000000ffff000000ff000000ff000000ff00
+000000ffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
+0000ffffffffff00eaea00eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaea00eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ea00ea0000eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000000000000000ffff00eaeaea00eaea
+ea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00000000ffffffffffffffffff00eaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea00eaeaea0000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaea00ffff000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000eaeaea00eaeaea00ea0000ea00ea000000eaea
+0000ea0000ea000000ea00000000eaeaeaeaea0000ea0000ea0000ea0000ea0000ea0000
+eaea00ea0000eaeaea0000eaea0000ea00eaeaeaeaeaeaeaeaeaeaeaea00ffffffff0000
+000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000ffffffffffffff00eaeaeaea000000ea00eaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea00eaea00
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000
+00ffff00eaeaea00000000eaeaea0000ea00eaeaea00eaea00ea00eaeaea00eaeaea00ea
+ea0000eaeaeaea00eaea00eaea0000eaea00ea0000eaea00ea00eaea00eaea00eaea00ea
+ea0000eaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffff00000000
+00000000000000000000000000000000ffffffffffffffffff00000000000000ffffffff
+00eaeaeaea00eaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaea00ea00eaeaea0000eaea0000ea00
+eaea0000ea00eaeaea0000eaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff000000000000ffffffff00eaeaea00eaeaeaeaea
+ea00eaea00eaeaea00eaeaea00eaeaeaea00eaea00eaeaeaeaea00eaeaea00eaea00eaea
+00eaeaea00ea00eaeaea00ea00eaea00eaea00000000eaea00eaeaeaeaeaeaeaeaeaeaea
+eaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000ff00eaeaeaea00eaeaeaeaea00eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+00eaeaeaeaeaeaeaea0000ea00ea00eaea00eaea0000ea00eaea0000ea00ea00eaea00ea
+eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000000000ffffffffff00eaeaea00eaeaeaeaeaea00eaea00eaeaea00eaeaea00
+eaeaeaeaea00ea00eaeaeaeaea00eaeaea00eaea00eaea00eaeaea00ea00eaeaea00ea00
+eaea00eaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00000000000000000000eaeaeaea00eaeaeaeaeaeaeaea000000eaea0000ea00eaeaea00
+00000000ea0000ea0000ea00eaea00eaeaeaea0000eaea0000ea00eaeaeaeaeaeaeaeaea
+eaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaea00eaea00
+eaea000000eaea00eaea00eaea00eaea00ea00000000eaeaea00eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffff
+00eaeaea00eaeaeaeaeaea00eaea00eaeaea00eaea00ea00eaeaeaea00ea00ea00eaeaea
+00eaeaea00eaea00eaea0000eaea00ea0000eaea00ea00eaea00eaea00eaea00eaea00ea
+eaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffff00eaeaea
+ea00eaeaeaeaeaeaea00eaeaea00eaea0000ea00ea00eaea00ea00eaea00eaea0000ea00
+00ea00eaea00eaea00eaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea00eaeaeaeaea00eaea00eaea00ea00eaea00eaea00eaea00eaea
+00eaea00ea00eaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff00ffffffffffffffffffff00ea000000eaeaeaea000000
+eaea000000eaea0000ea0000eaeaeaea00eaea00000000eaeaeaeaea00000000ea00ea00
+00eaea00ea0000ea000000000000eaea0000eaea000000eaeaeaeaeaeaeaeaeaeaeaea00
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff000000000000ffffffffff00eaeaeaea00eaeaeaeaeaeaea00eaeaea
+00eaea00eaea00ea0000eaeaea00eaea00eaea00eaea00eaea00eaea00000000eaea00ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ea
+eaea00eaeaea00eaea00ea00eaea00eaea00eaea00eaea00eaea00ea00eaea00eaeaea00
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea00eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff
+ffffffffffff00eaeaeaea00eaeaeaeaea00ea00eaeaea00eaea00eaea00eaeaea0000ea
+00eaea00eaea00eaea00eaea00eaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000eaeaea000000ea0000ea00
+000000000000ea0000000000ea0000ea0000eaeaea000000eaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff00eaeaeaea00
+eaeaea00eaea00eaeaea00eaea00eaea00ea00eaea00ea00eaea00eaea00eaea00eaea00
+eaea00eaea00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000eaeaea00
+0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00eaeaeaea000000eaeaeaea000000eaea00
+0000ea0000000000eaeaea00000000000000ea0000ea0000eaea0000eaea000000eaeaea
+eaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000
+0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000eaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00000000eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000000000000000ffff000000000000000000eaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00000000000000000000000000000000eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaea0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+00000000ffffffffffffffffffffff000000000000000000000000000000ffffffffffff
+ffffffffffffffffffff00000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea0000000000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000000000000000eaeaeaeaeaeaeaeaeaeaeaeaea0000000000000000000000
+000000000000ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000000000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00000000000000000000000000000000000000000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
+00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ff00000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00eaeaeaeaeaeaea00000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea0000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaea00
+eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff00eaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00eaeaeaeaeaeaeaeaea00eaeaeaeaea0000ea0000ea0000ea0000ea0000ea0000eaea00
+ea0000eaeaea0000eaea0000ea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffff
+ffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaea0000
+eaeaeaea00eaea00eaea0000eaea00ea0000eaea00ea00eaea00eaea00eaea00eaea0000
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffff0000ffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaea00eaeaea00eaea00eaea00eaea
+ea00ea00eaeaea00ea00eaea00eaea00000000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaea
+eaeaeaeaeaeaeaeaeaea00eaeaea00eaea00eaea00eaeaea00ea00eaeaea00ea00eaea00
+eaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffff
+ffff0000ffff00ffffff00000000ff000000ffffffffff000000ff0000ffff0000000000
+ffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaea00eaeaea00eaea
+ea00eaea00eaea0000eaea00ea0000eaea00ea00eaea00eaea00eaea00eaea00eaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffff0000000000ffffffff0000
+ffffff00ff000000ffffff000000ff0000ffff0000ffffff0000ffff00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00eaeaeaeaeaeaea00000000eaeaeaeaea00000000ea00ea0000eaea
+00ea0000ea000000000000eaea0000eaea000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaea00ffffffffffffffff0000ffff00ffffffffff0000ff00ff0000ff0000ffff0000
+ffff0000ffff0000ffffff000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffff00
+00ffffffffffffffff0000ff00ff0000000000ffff0000ffff0000ffff0000ffffffff00
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffff0000ffffffffffffffff000000ff
+ff0000ffffffffff0000ffff0000ffff0000ffffffffff000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000eaeaea000000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffff
+ffffffffffffffffff0000ffffffff00ffffffff0000ffff0000ffff00ffff0000ffff00
+00ffff0000ff00ff00ffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ff0000ffffffffffffffffff0000000000
+000000ffffffff0000ffffff000000ffff00000000ff000000ffff0000ffff00000000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea000000ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffff0000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea00000000ffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000000000ffffffffffffffffff
+ffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000
+00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
+0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000ffffffffffffffffffffffff
+ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff
+ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff000000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffff00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff000000ffffff
+ffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea000000ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000eaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff000000ffffff00000000ffffffffffffffffffffffffffffff
+000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffff
+ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaea00000000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000000000000000ffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff
+ffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea0000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff00000000000000ffffffffffffffff00eaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000000000000000ffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ea0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00ffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000ffffff00
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff000000000000000000000000ffff00eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ff00ffffff000000ff0000ffffff000000ffff000000ff0000ff00000000ffff0000
+0000ffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaea000000ea00ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff0000ff00ff
+ffff0000ff0000ffff0000000000ffff0000ffff0000ffff00ffffffffffffffffffffff
+ffffffffffffffffffffff00eaeaeaea00eaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ea00eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ff00ffffffff0000ff00ffffff0000000000ffff0000ff00
+00ffff0000ffff000000ffffffffffffffffffffffffffffffffffffffffffffff00eaea
+eaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea00eaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffff0000ff00ffffff0000ffffffffff0000ff0000ffff0000ffffffff000000ff
+ffffffffffffffffffffffffffffffffffffffff00eaeaeaea00eaeaeaeaeaeaeaea0000
+00eaea0000ea00eaeaea0000000000ea0000ea0000ea00eaea00eaeaeaea0000eaea0000
+ea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaea
+eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffff00ffffff0000ffffffff00
+00ffff00ffff0000ff0000ffff0000ffff00ffff0000ffffffffffffffffffffffffffff
+ffffffffffffff00eaeaeaea00eaeaeaeaeaeaea00eaeaea00eaea0000ea00ea00eaea00
+ea00eaea00eaea0000ea0000ea00eaea00eaea00eaea0000eaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaea000000ea
+00ea000000eaea0000ea0000ea000000ea00000000eaeaeaeaeaeaeaea000000eaea0000
+ea00eaeaea0000000000ea0000ea0000ea00eaea00eaeaeaea0000eaea0000ea00eaeaea
+eaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000000000ffffff0000ffffffffff000000ffff000000ff000000ff
+000000ff00000000ffffffffffffffffffffffffffffffffffffffffffff00eaeaeaea00
+eaeaeaeaeaeaea00eaeaea00eaea00eaea00ea0000eaeaea00eaea00eaea00eaea00eaea
+00eaea00000000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000000000eaea0000ea00eaeaea00eaea00ea00eaea
+ea00eaeaea00ea00eaeaeaeaeaeaea00eaeaea00eaea0000ea00ea00eaea00ea00eaea00
+eaea0000ea0000ea00eaea00eaea00eaea0000eaeaeaeaeaeaeaea00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00eaeaeaea00eaeaeaeaea00ea00eaeaea00ea
+ea00eaea00eaeaea0000ea00eaea00eaea00eaea00eaea00eaea00eaeaeaeaea00eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000eaeaeaeaea00eaea00eaeaea00eaeaea00eaeaeaea00eaea00eaea00eaeaeaeaea
+eaea00eaeaea00eaea00eaea00ea0000eaeaea00eaea00eaea00eaea00eaea00eaea0000
+0000eaea00eaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00ffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00eaeaeaeaea00eaeaea00eaea00eaeaea00eaea00eaea00ea00eaea00ea00ea
+ea00eaea00eaea00eaea00eaea00eaea00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaeaeaea00eaea00ea
+eaea00eaeaea00eaeaeaeaea00ea00eaea00eaeaeaeaea00ea00eaeaea00eaea00eaea00
+eaeaea0000ea00eaea00eaea00eaea00eaea00eaea00eaeaeaeaea00eaeaeaeaeaeaeaea
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000000000000000ffffffff00eaeaeaeaea0000
+00eaeaeaea000000eaea000000ea0000000000eaeaea00000000000000ea0000ea0000ea
+ea0000eaea000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000eaeaeaea00eaea00eaeaea00eaea00ea00eaeaeaea00
+ea00eaeaea00eaeaea00eaea00eaeaea00eaea00eaea00ea00eaea00ea00eaea00eaea00
+eaea00eaea00eaea00eaea00eaea00eaeaeaeaeaeaea00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000
+0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000000000000000000000ffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00eaeaea000000eaea000000eaea0000ea0000eaeaeaea00eaeaeaeaea000000eaeaeaea
+000000eaea000000ea0000000000eaeaea00000000000000ea0000ea0000eaea0000eaea
+000000eaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00000000000000ffffffffffffffffffffffffffffffffff0000
+000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+ffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+0000000000ffffffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000000000000000ffffffffffff0000eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff
+000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000000000000000ffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000eaeaeaeaeaeaeaeaeaeaeaeaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+ea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000000000000000000000ffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00000000ffff0000000000ffffffffffffff
+ffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+000000ff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000000000ffffffffffff00000000ffffffffffffffffffffffffffffffffff000000ea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffff00000000eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000000000ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff00000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaea00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00
+ffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000000000eaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffffffffff
+ffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000000000000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea0000000000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffff0000000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00000000000000000000000000000000000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000eaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaea0000eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00
+ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00eaea00eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaea00eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ea
+eaea00eaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00eaeaea00eaeaea00ea0000ea00ea
+000000eaea0000ea0000ea000000ea00000000eaeaeaeaea0000ea0000ea0000ea0000ea
+0000ea0000eaea00ea0000eaeaea0000eaea0000ea00eaeaeaeaeaeaeaeaeaeaeaea00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00eaeaea00000000eaeaea0000ea00eaeaea00eaea00ea00eaeaea00
+eaeaea00eaea0000eaeaeaea00eaea00eaea0000eaea00ea0000eaea00ea00eaea00eaea
+00eaea00eaea0000eaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00eaeaea00
+eaeaeaeaeaea00eaea00eaeaea00eaeaea00eaeaeaea00eaea00eaeaeaeaea00eaeaea00
+eaea00eaea00eaeaea00ea00eaeaea00ea00eaea00eaea00000000eaea00eaeaeaeaeaea
+eaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00eaeaea00eaeaeaeaeaea00eaea00eaeaea
+00eaeaea00eaeaeaeaea00ea00eaeaeaeaea00eaeaea00eaea00eaea00eaeaea00ea00ea
+eaea00ea00eaea00eaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00eaeaea00eaeaeaeaeaea00eaea00eaeaea00eaea00ea00eaeaeaea00ea00
+ea00eaeaea00eaeaea00eaea00eaea0000eaea00ea0000eaea00ea00eaea00eaea00eaea
+00eaea00eaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ea000000eaea
+eaea000000eaea000000eaea0000ea0000eaeaeaea00eaea00000000eaeaeaeaea000000
+00ea00ea0000eaea00ea0000ea000000000000eaea0000eaea000000eaeaeaeaeaeaeaea
+eaeaeaea00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea00eaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaea00eaeaeaeaea00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000
+00eaeaea000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaea0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000eaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaea000000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000eaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea00000000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000000000000000eaeaeaeaeaeaeaeaeaeaea
+eaeaeaeaeaeaeaeaeaeaea0000000000000000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00000000000000000000000000000000000000000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff
+%%EndData
+end
+%%PageTrailer
+%%Trailer
+%%BoundingBox: 0 37 377 162
+%%EOF
diff --git a/lib/cosEvent/doc/src/e_s_models.gif b/lib/cosEvent/doc/src/e_s_models.gif
new file mode 100644
index 0000000000..329b0858d1
--- /dev/null
+++ b/lib/cosEvent/doc/src/e_s_models.gif
Binary files differ
diff --git a/lib/cosEvent/doc/src/e_s_models.ps b/lib/cosEvent/doc/src/e_s_models.ps
new file mode 100644
index 0000000000..3e2a8dd9a2
--- /dev/null
+++ b/lib/cosEvent/doc/src/e_s_models.ps
@@ -0,0 +1,1007 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: /clearcase/otp/libraries/orber/doc/src/e_s_models.ps
+%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley
+%%BoundingBox: 6 176 605 495
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% define string to hold a scanline's worth of data
+/pix 75 string def
+
+% define space for color conversions
+/grays 599 string def % space for gray scale line
+/npixls 0 def
+/rgbindx 0 def
+
+% lower left corner
+6 176 translate
+
+% size of image (on paper, in 1/72inch coords)
+598.96800 319.03200 scale
+
+% dimensions of data
+599 319 1
+
+% mapping matrix
+[599 0 0 -319 0 319]
+
+{currentfile pix readhexstring pop}
+image
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+c00000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00003e
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffe000000000000000000001fffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffe000000000000000000001fffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffffffffffffffffffffdfffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffffffffffffffffffffdfffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffffffffffffffffffffdfffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffffffffffffffffffffdfffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffffffffffffffffffffdfffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffffffffffffffffffffdfffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffffffffffffffffffffdfffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffffffffffffffffffffdfffffffffffffffffffffff
+ffffbe
+dffffff000003ffffffffffffefffffffffc1ffe7ef7ffdfffffffffffffffffffffffff
+ff9ffffff000003ffffffffffffeffffffffff07f33bdfffdfffffffffffffffffffffff
+ffffbe
+dffff80fffffc07ffffffffffeffff3ffffeefff7dfbffdffffffffffffffc00000fffff
+ff9ffff80fffffc07ffffffffffefffe7fffffbbfbb7efffdffffffffffffffc00000fff
+ffffbe
+dfff87ffffffff87fffffffffeffff0ffffeefff7dfbffdffffffffffffe03fffff01fff
+ff9fff87ffffffff87fffffffffefff87fffffbbfbb7efffdffffffffffffe03fffff01f
+ffffbe
+dff87ffffffffff87ffffffffeffff03fe06e2635bfdffdfffffffffffe1ffffffffe1ff
+ff9ff87ffffffffff87ffffffffeffe07fff81b89baff7ffdfffffffffffe1ffffffffe1
+ffffbe
+dfc7ffffffffffff8ffffffffeffff00fffe1b5b2bfdffdffffffffffe1ffffffffffe1f
+ff9fc7ffffffffffff8ffffffffeff807fffff86dbaff7ffdffffffffffe1ffffffffffe
+1fffbe
+df3ffffffffffffff3fffffffefe00003e06fb4f6bfdffdffffffffff1ffffffffffffe3
+ff9f3ffffffffffffff3fffffffefe00401f81bedbaff7ffdffffffffff1ffffffffffff
+e3ffbe
+defffffffffffffffdfffffffeffff00fffefb736bfdffdfffffffffcffffffffffffffc
+ff9efffffffffffffffdfffffffeff807fffffbedbaff7ffdfffffffffcfffffffffffff
+fcffbe
+d9fffffffffffffffe7ffffffeffff03fffefb5b6bfdffdfffffffffbfffffffffffffff
+7f99fffffffffffffffe7ffffffeffe07fffffbedbaff7ffdfffffffffbfffffffffffff
+ff7fbe
+d7ffffffffffffffffbffffffeffff0ffffc7c0625fbbfdffffffffe7fffffffffffffff
+9f97ffffffffffffffffbffffffefff87fffff1f0117eeffdffffffffe7fffffffffffff
+ff9fbe
+cfff8bfffff77fffffdffffffeffff3ffffffffffdfbffdffffffffdffffffffffffffff
+ef8fff8bfffff77fffffdffffffefffe7ffffffffff7efffdffffffffdffffffffffffff
+ffefbe
+cfff73ffffe7ffffffdffffffefffffffffffffffef7ffdffffffffbff17ffffffffffff
+f78fff73ffffe7ffffffdffffffefffffffffffffffbdfffdffffffffbff17ffffffffff
+fff7be
+dfff7bfffff7ffffffeffbfffeffffffffffffffffffffdffffffffbfee7ffffffffffff
+f79fff7bfffff7ffffffeffffffeffffffffffffffffffffdffffffffbfee7ffffffffff
+fff7be
+dfff9e669a7773afffeffcfffeffffffffffffffffffffdffffffff7fdf7ffffffffffff
+fb9fff9e669a7773afffeffc007effffffffffffffffffffdffcfffff7fdf7ffffffffff
+fffbbe
+dfffe77461b66d1fffefff3e7e000000000000000000001ffc007ff7fdff8e9c19a5f3af
+fb9fffe77461b66d1fffeffc00fe000000000000000000001ffcff3ff7fdff8e9c19a5f3
+affbbe
+dffffb76ebb761bfffefffdc7ffffffffffffffffffffffffe00fff7fdff746b5d12ed1f
+fb9ffffb76ebb761bfffeffe01fffffffffffffffffffffffff878fff7fdff746b5d12ed
+1ffbbe
+cfff7b76ebb76fbfffdfffe03ffffffffffffffffffffffffe01fff7fdff76e9ddb6e1bf
+fb8fff7b76ebb76fbfffdffe01fffffffffffffffffffffffff067fff7fdff76e9ddb6e1
+bffbbe
+cfff3b6269b76dbfffd7fff83ffffffffc07ffffffffffffff01ffebfdf776ee5db6efbf
+f78fff3b6269b76dbfffd7ff03fffffffffc07fffffffffffff01fffebfdf776ee5db6ef
+bff7be
+d7ff47969a62331fffb9fff01ffffffff3f807fffffffffffe03ff9bfeef76eb58b6edbf
+f797ff47969a62331fffb9ff04fffffffff3f807ffffffffffe03fff9bfeef76eb58b6ed
+bff7be
+d9fffffefbfffffffe7effe01fffffff8ffff81ffffffffff907fe7dff1f8c40e512731f
+ef99fffffefbfffffffe7eff8f7fffffff8ffff81fffffffffc01ffe7dff1f8c40e51273
+1fefbe
+defffffefbfffffffdff3fc00ffffffc7fffffe0ffffffffe78ff9fe7fffffffffffffff
+9f9efffffefbfffffffdff3f8fbffffffc7fffffe0ffffffff801ff9fe7fffffffffffff
+ff9fbe
+df3ffffc71fffffff3ffdf800ffffff3ffffffff03ffffff9f8fe7ffbfffffffffffffff
+7f9f3ffffc71fffffff3ffdfdfcffffff3ffffffff03ffffff800fe7ffbfffffffffffff
+ff7fbe
+dfc7ffffffffffff8fffefff87ffff0ffffffffffc0fffff7fdf9fffcffffffffffffffc
+ff9fc7ffffffffffff8fffeffff7ffff0ffffffffffc0fffffffff9fffcfffffffffffff
+fcffbe
+dff87ffffffffff87ffff3fffffffcfffffffffffff0fffffffe7ffff1ffffffffffffe3
+ff9ff87ffffffffff87ffff3fffbfffcfffffffffffff0fffffffe7ffff1ffffffffffff
+e3ffbe
+dfff87ffffffff87fffffdfffffff3ffffffffffffff3ffffff9fffffe1ffffffffffe1f
+ff9fff87ffffffff87fffffdfffffff3ffffffffffffff3ffffff9fffffe1ffffffffffe
+1fffbe
+dffff80fffffc07ffffffe7fffffcfffffffffffffffc7ffffe7ffffffe1ffffffffe1ff
+ff9ffff80fffffc07ffffffe7fffffcfffffffffffffffc7ffffe7ffffffe1ffffffffe1
+ffffbe
+dffffff000003fffffffffbfffff3ffffffffffffffffbffff9ffffffffe03fffff01fff
+ff9ffffff000003fffffffffbfffff3ffffffffffffffffbffff9ffffffffe03fffff01f
+ffffbe
+dfffffffffffffffffffffcffffefffffffffffffffffbfffe7ffffffffffc00000fffff
+ff9fffffffffffffffffffffcffffefffffffffffffffffbfffe7ffffffffffc00000fff
+ffffbe
+dffffffffffffffffffffff7fffdfffffffffffffffffcfff9ffffffffffffffffffffff
+ff9ffffffffffffffffffffff7fffdfffffffffffffffffcfff9ffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffbfffbffffffffffffffffff7fe7ffffffffffffffffffffff
+ff9ffffffffffffffffffffffbfffbffffffffffffffffff7fe7ffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffcffe7ffffffffffffffffff7f9fffffffffffffffffffffff
+ff9ffffffffffffffffffffffcffe7ffffffffffffffffff7f9fffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffff7f9fffffffffffffffffffbe7fffffffffffffffffffffff
+ff9fffffffffffffffffffffff7f9fffffffffffffffffffbe7fffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffff9e7fffffffffffffffffffb9ffffffffffffffffffffffff
+ff9fffffffffffffffffffffff9e7fffffffffffffffffffb9ffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffdffffffffffffffffffffb7ffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffdffffffffffffffffffffb7ffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffb81fffffff8bbfffffffbdfffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffb81fffffff8bbfffffffbdfffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffff7ddfffffbf733fffffff3efffffffffffffffffffffffff
+ff9ffffffffffffffffffffffff7ddfffffbf733fffffff3efffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffcfdffffffbefbbfffffffbefffffffffffffffffffffffff
+ff9fffffffffffffffffffffffcfdffffffbefbbfffffffbefffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffff3fdb88ce91effa79d3a73bf7ffffefffffffffffffffffff
+ff9fffffffffffffffffffffff3fdb88ce91effa79d3a73bf7fff807ffffffffffffffff
+ffffbe
+dffffffffffffffffffffffcffc3ddb46beff9b68d1adbf7ff9fc7ffffffffffffffffff
+ff9ffffffffffffffffffffffcffc3ddb46beff9b68d1adbf7ff800fffffffffffffffff
+ffffbe
+dfffffffffffffffffffffe3ffdbeb86ebeffbb8ddba1bf7ffe3c3ffffffffffffffffff
+ff9fffffffffffffffffffffe3ffdbeb86ebeffbb8ddba1bf7ffc00fffffffffffffffff
+ffffbe
+dfffffffffffffffffffff1fffdfebbeebefbbb6ddbafbeffffc40ffffffffffffffffff
+ff9fffffffffffffffffffff1fffdfebbeebefbbb6ddbafbefffe00fffffffffffffffff
+ffffbe
+dffffffffffffffffffff8ffffdef7b6eaf77bb6ddbadbe1ffff807ffffffc00000fffff
+ff9ffffffffffffffffffff8ffffdef7b6eaf77bb6ddbadbe1fff007fffffffc00000fff
+ffffbe
+dffffffffffffffffffff7ffff81f7cc41f8f118081131de1fff803ffffe03fffff01fff
+ff9ffffffffffffffffffff7ffff81f7cc41f8f118081131de1ffc18fffffe03fffff01f
+ffffbe
+dffffffffffffffffffff7ffffffffffffffffffffffffdfe1ff801fffe1ffffffffe1ff
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffdfe1fe1f3fffe1ffffffffe1
+ffffbe
+dffffffffffffffffffff7ffffffffffffffffffffffffbffe1f800ffe1ffffffffffe1f
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffbffe1f1fcffe1ffffffffffe
+1fffbe
+dffffffffffffffffffff7ffffffffffffffffffffffffbfffe10ffff1ffffffffffffe3
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffbfffe1bffff1ffffffffffff
+e3ffbe
+dffffffffffffffffffff7ffffffffffffffffffffffff7ffffe1fffcffffffffffffffc
+ff9ffffffffffffffffffff7ffffffffffffffffffffffff7ffffe1fffcfffffffffffff
+fcffbe
+dffffffffffffffffffff7ffffffffffffffffffffffff7fffffe1ffbfffffffffffffff
+7f9ffffffffffffffffffff7ffffffffffffffffffffffff7fffffe1ffbfffffffffffff
+ff7fbe
+dfffffffffffffffffffeffffffffffffffffffffffffefffffffe1e7fffffffffffffff
+9f9fffffffffffffffffffeffffffffffffffffffffffffefffffffe1e7fffffffffffff
+ff9fbe
+dfffffffffffffffffffeffffffffffffffffffffffffeffffffffedffffffffffffffff
+ef9fffffffffffffffffffeffffffffffffffffffffffffeffffffffedffffffffffffff
+ffefbe
+dfffffffffffffffffffefffffffffc71fff717ffbfffdfffffffffbff17ffffffffffff
+f79fffffffffffffffffffefffffffff03fffffffffdfffdfffffffffbff17ffffffffff
+fff7be
+dffffffffffffffffffff7ffffffffb7bff7edfffdfff3fffffffffbfee7ffffffffffff
+f79ffffffffffffffffffff7fffffffeddfffffffffefff3fffffffffbfee7ffffffffff
+fff7be
+dffffffffffffffffffffbffffffff73bff7effffeffeffffffffff7fdf7ffffffffffff
+fb9ffffffffffffffffffffbfffffffdddffffffffff7feffffffffff7fdf7ffffffffff
+fffbbe
+dffffffffffffffffffffbfffffffef5bc634373af7f9ffffffffff7fdff8e9c19a5f3af
+fb9ffffffffffffffffffffbfffffffbddd63c4cae75bf9ffffffffff7fdff8e9c19a5f3
+affbbe
+dffffffffffffffffffffdfffffffef6bbb66e6d1f7c7ffffffffff7fdff746b5d12ed1f
+fb9ffffffffffffffffffffdfffffffbc38ddb6e1da3bc7ffffffffff7fdff746b5d12ed
+1ffbbe
+dffffffffffffffffffffefffffffef6bbb76f61bf03fffffffffff7fdff76e9ddb6e1bf
+fb9ffffffffffffffffffffefffffffbdfdddbeebc3703fffffffffff7fdff76e9ddb6e1
+bffbbe
+dffffffffffffffffffffefffffffef73bb76f6f807ffffffffffffbfdf776ee5db6efbf
+f79ffffffffffffffffffffefffffffbdfdddbeebdc0bffffffffffffbfdf776ee5db6ef
+bff7be
+dfffffffffffffffffffff3ffffffef7bbb56f6d3f7bfffffffffffbfeef76eb58b6edbf
+f79fffffffffffffffffffff3ffffffbdfdddb6c3d37bbfffffffffffbfeef76eb58b6ed
+bff7be
+dfffffffffffffffffffffc0000002e3bc7206321f7cfffffffffffdff1f8c40e512731f
+ef9fffffffffffffffffffffc00000038f8e3cf21e63bcfffffffffffdff1f8c40e51273
+1fefbe
+dfffffffffffffffffffffffbffffc7ffffffffdfeff7ffffffffffe7fffffffffffffff
+9f9fffffffffffffffffffffffbffffc7ffffffffdff7f7ffffffffffe7fffffffffffff
+ff9fbe
+dfffffffffffffffffffffff7fffff9ffffffffdfdffbfffffffffffbfffffffffffffff
+7f9fffffffffffffffffffffff7ffffe9ffffffffdfeffbfffffffffffbfffffffffffff
+ff7fbe
+dffffffffffffffffffffffeffffffcffffffffbfbffcfffffffffffcffffffffffffffc
+ff9ffffffffffffffffffffefeffffff6ffffffffbfdffcfffffffffffcfffffffffffff
+fcffbe
+dffffffffffffffffffe01fdffffffeffffffff7fffff7fffffffffff1ffffffffffffe3
+ff9ffffffffffffffffffff9fdffffffeffffffff7fffff7fffffffffff1ffffffffffff
+e3ffbe
+dffffffffffffffffff003fbfffffff7ffffffeffffff9ffbffffffffe1ffffffffffe1f
+ff9ffffffffffffffffffbf7fbfffffff7ffffffeffffff9fffffffffffe1ffffffffffe
+1fffbe
+dffffffffffffffffff803f7fffffffbffffffdffffffeffdfffffffffe1ffffffffe1ff
+ff9ffffffffffffffffff1eff7fffffffbffffffdffffffeffc1ffffffffe1ffffffffe1
+ffffbe
+dffffffffffffffffffc07effffffffc3fffffbfffffff3feffffffffffe03fffff01fff
+ff9ffffffffffffffffff19feffffffffc3fffffbfffffff3fe01ffffffffe03fffff01f
+ffffbe
+dffffffffffffffffffc07dfffffffffc7ffff7fffffffdff3cffffffffffc00000fffff
+ff9fffffffffffffffffe0ffdfffffffffc7ffff7fffffffdfe007fffffffffc00000fff
+ffffbe
+dffffffffffffffffffe0fbffffffffff87ffeffffffffeffdcfffffffffffffffffffff
+ff9fffffffffffffffffe07fbffffffffff87ffeffffffffefe00fffffffffffffffffff
+ffffbe
+dffffffffffffffffffc0f7fffffffffff83e1fffffffff3fe87ffffffffffffffffffff
+ff9fffffffffffffffffc03f7fffffffffff83e1fffffffff3f01fffffffffffffffffff
+ffffbe
+dffffffffffffffffff39efffffffffffffc1ffffffffffdff07ffffffffffffffffffff
+ff9fffffffffffffffffc03efffffffffffffc1ffffffffffdf03fffffffffffffffffff
+ffffbe
+dfffffffffffffffffef9dfffffffffffffffffffffffffe7e03ffffffffffffffffffff
+ff9fffffffffffffffff801dfffffffffffffffffffffffffe781fffffffffffffffffff
+ffffbe
+dfffffffffffffffff9ffbffffffffffffffffffffffffffbe03ffffffffffffffffffff
+ff9fffffffffffffffff9ffbffffffffffffffffffffffffffb86fffffffffffffffffff
+ffffbe
+dfffffffffffffffff7ff7ffffffffffffffffffffffffffcc01ffffffffffffffffffff
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffffc8f3ffffffffffffffffff
+ffffbe
+dffffff000003fffffffeffffffffffffffffffffffffffff001ffffffffffffffffffff
+ff9ffffff000003fffffffeffffffffffffffffffffffffffff5fdffffffffffffffffff
+ffffbe
+dffff80fffffc07fffffdffffffffffffffffffffffffffffbf8ffffffffffffffffffff
+ff9ffff80fffffc07fffffdffffffffffffffffffffffffffffbfeffffffffffffffffff
+ffffbe
+dfff87ffffffff87ffffbffffffffffffffffffffffffffffcffffffffffffffffffffff
+ff9fff87ffffffff87ffffbffffffffffffffffffffffffffffcff7fffffffffffffffff
+ffffbe
+dff87ffffffffff87fff7fffffffffffffffffffffffffffff7fffffffffffffffffffff
+ff9ff87ffffffffff87fff7fffffffffffffffffffffffffffff7fffffffffffffffffff
+ffffbe
+dfc7ffffffffffff8ffeffffffffffffffffffffffffffffff9fffffffffffffffffffff
+ff9fc7ffffffffffff8ffeffffffffffffffffffffffffffffff9fffffffffffffffffff
+ffffbe
+df3ffffffffffffff3fdffffffffffffffffffffffffffffffefffffffffffffffffffff
+ff9f3ffffffffffffff3fdffffffffffffffffffffffffffffffefffffffffffffffffff
+ffffbe
+defffffffffffffffdfbfffffffffffffffffffffffffffffff3ffffffffffffffffffff
+ff9efffffffffffffffdfbfffffffffffffffffffffffffffffff3ffffffffffffffffff
+ffffbe
+d9fffffffffffffffe77fffffffffffffffffffffffffffffffdfffffffffc00000fffff
+ff99fffffffffffffffe77fffffffffffffffffffffffffffffffdfffffffffc00000fff
+ffffbe
+d7ffffffffffffffffbffffffffffffffffffffffffffffffffefffffffe03fffff01fff
+ff97ffffffffffffffffbffffffffffffffffffffffffffffffffefffffffe03fffff01f
+ffffbe
+cfff8bfffff77fffffdfffffffffffffffffffffffffffffffff3fffffe1ffffffffe1ff
+ff8fff8bfffff77fffffdfffffffffffffffffffffffffffffffff3fffffe1ffffffffe1
+ffffbe
+cfff73ffffe7ffffffdfffffffffffffffffffffffffffffffffdffffe1ffffffffffe1f
+ff8fff73ffffe7ffffffdfffffffffffffffffffffffffffffffffdffffe1ffffffffffe
+1fffbe
+dfff7bfffff7ffffffefffffffffffffffffffffffffffffffffe7fff1ffffffffffffe3
+ff9fff7bfffff7ffffffefffffffffffffffffffffffffffffffffe7fff1ffffffffffff
+e3ffbe
+dfff9e669a7773afffeffffffffffffffffffffffffffffffffffbffcffffffffffffffc
+ff9fff9e669a7773afffeffffffffffffffffffffffffffffffffffbffcfffffffffffff
+fcffbe
+dfffe77461b66d1fffeffffffffffffffffffffffffffffffffffcffbfffffffffffffff
+7f9fffe77461b66d1fffeffffffffffffffffffffffffffffffffffcffbfffffffffffff
+ff7fbe
+dffffb76ebb761bfffefffffffffffffffffffffffffffffffffff7e7fffffffffffffff
+9f9ffffb76ebb761bfffefffffffffffffffffffffffffffffffffff7e7fffffffffffff
+ff9fbe
+cfff7b76ebb76fbfffdfffffffffffffffffffffffffffffffffffbdffffffffffffffff
+ef8fff7b76ebb76fbfffdfffffffffffffffffffffffffffffffffffbdffffffffffffff
+ffefbe
+cfff3b6269b76dbfffdfffffffffffffffffffffffffffffffffffcbff17ffffffffffff
+f78fff3b6269b76dbfffdfffffffffffffffffffffffffffffffffffcbff17ffffffffff
+fff7be
+d7ff47969a62331fffbffffffffffffffffffffffffffffffffffffbfee7ffffffffffff
+f797ff47969a62331fffbffffffffffffffffffffffffffffffffffffbfee7ffffffffff
+fff7be
+d9fffffefbfffffffe7ffffffffffffffffffffffffffffffffffff7fdf7ffffffffffff
+fb99fffffefbfffffffe7ffffffffffffffffffffffffffffffffffff7fdf7ffffffffff
+fffbbe
+defffffefbfffffffdfffffffffffffffffffffffffffffffffffff7fdff8e9c19a5f3af
+fb9efffffefbfffffffdfffffffffffffffffffffffffffffffffffff7fdff8e9c19a5f3
+affbbe
+df3ffffc71fffffff3fffffffffffffffffffffffffffffffffffff7fdff746b5d12ed1f
+fb9f3ffffc71fffffff3fffffffffffffffffffffffffffffffffffff7fdff746b5d12ed
+1ffbbe
+dfc7ffffffffffff8ffffffffffffffffffffffffffffffffffffff7fdff76e9ddb6e1bf
+fb9fc7ffffffffffff8ffffffffffffffffffffffffffffffffffffff7fdff76e9ddb6e1
+bffbbe
+dff87ffffffffff87ffffffffffffffffffffffffffffffffffffffbfdf776ee5db6efbf
+f79ff87ffffffffff87ffffffffffffffffffffffffffffffffffffffbfdf776ee5db6ef
+bff7be
+dfff87ffffffff87fffffffffffffffffffffffffffffffffffffffbfeef76eb58b6edbf
+f79fff87ffffffff87fffffffffffffffffffffffffffffffffffffffbfeef76eb58b6ed
+bff7be
+dffff80fffffc07ffffffffffffffffffffffffffffffffffffffffdff1f8c40e512731f
+ef9ffff80fffffc07ffffffffffffffffffffffffffffffffffffffffdff1f8c40e51273
+1fefbe
+dffffff000003ffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffff
+9f9ffffff000003ffffffffffffffffffffffffffffffffffffffffffe7fffffffffffff
+ff9fbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff
+7f9fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffff
+ff7fbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffc
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffff
+fcffbe
+dffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffe3
+ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffff
+e3ffbe
+dffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffffe1f
+ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffffe
+1fffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffe1ff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffe1
+ffffbe
+dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03fffff01fff
+ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03fffff01f
+ffffbe
+dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000fffff
+ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000fff
+ffffbe
+dfffffffffffffffffffdff007fff17fffffffff3e1fff3fcf9fe7f3ffffffffffffffff
+ff9fffffffffffffffffff07fc01fffc5fffffffffcf87fc9f3e7f9fcfffffffffffffff
+ffffbe
+dfffffffffffffffffff9ff6d7ffee7fffffdfffbf6fffbfef3ff7fbffffffffffffffff
+ff9fffffffffffffffffffbbfdb5fffb9ffffff7ffefdbfedfbcffdfefffffffffffffff
+ffffbe
+dfffffffffffffffffff5ffeefffdeffffffffff7eefff7fce7feff7ffffffffffffffff
+ff9fffffffffffffffffff7bffbbfff7bfffffffffdfbbfdbf39ffbfdfffffffffffffff
+ffffbe
+dfffffffffffffffffff5dfde9cfbfc49cc939e37ee3794fd6678e77ffffffffffffffff
+ff9fffffffffffffffffff777f7a73eff127324e78dfba6dbf599e39dfffffffffffffff
+ffffbe
+dffffffffffffffffffedffde5afbfb65b65b5db7e1b772fd55b6d77ffffffffffffffff
+ff9fffffffffffffffffff0fff796befed96d96d76df876dbf556db5dfffffffffffffff
+ffffbe
+dffffffffffffffffffc1ffded6fbf76d76dafbb7efb7b6fd53aeb77ffffffffffffffff
+ff9fffffffffffffffffff77ff7b5befddb5db6beedfbf6dbf54ebaddfffffffffffffff
+ffffbe
+dffffffffffffffffffddffded1fbf6ed76dafb6fef6fd6fd33ac8efffffffffffffffff
+ff9ffffffffffffffffffef7ff7b47efdbb5db6bedbfbedb7f4ceb23bfffffffffffffff
+ffffbe
+dffffffffffffffffffbdffbdb6fde4db6db6da6fdf6ecdfb6b69b6fffffffffffffffff
+ff9ffffffffffffffffffef7fef6dbf7936db6db69bf7edb7edada6dbfffffffffffffff
+ffffbe
+dffffffffffffffffff18bf1d91fe12599d9339278f062cf144e48e7ffffffffffffffff
+ff9ffffffffffffffffffc0efc7647f84966764ce49e3e093c5139239fffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+c00000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00003e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+c00000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00003e
+dffffffffffffffffffffffffeffffffffff83f99deffdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffffffffff83f99deffdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffff1fffffddfddbf7fdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffff1fffffddfddbf7fdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffefffc1fffffddfddbf7fdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffefffc1fffffddfddbf7fdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffefff01fffc0dc4dd7fbfdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffefff01fffc0dc4dd7fbfdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffc01fffffc36dd7fbfdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffc01fffffc36dd7fbfdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeff00000fc0df6dd7fbfdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeff00000fc0df6dd7fbfdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffe01fffffdf6dd7fbfdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffe01fffffdf6dd7fbfdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffefff81fffffdf6dd7fbfdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffefff81fffffdf6dd7fbfdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffefffe1fffff8f808bf77dffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffefffe1fffff8f808bf77dffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffff9ffffffffffbf7fdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffff9ffffffffffbf7fdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffefffffffffffffffdeffdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffefffffffffffffffdeffdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffefffffffffffffffffffdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffefffffffffffffffffffdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffefffffffffc1ffe7ef7fdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffefffffffffc1ffe7ef7fdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffefffffffffeefff7dfbfdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffefffffffffeefff7dfbfdffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffeffff1ffffeefff7dfbfdffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffeffff1ffffeefff7dfbfdffffffffffffffffffffffff
+ffffbe
+dffffff000003ffffffffffffeffff07fe06e2635bfdfdffffffffffffffffffffffffff
+ff9ffffff000003ffffffffffffeffff07fe06e2635bfdfdffffffffffffffffffffffff
+ffffbe
+dffff80fffffc07ffffffffffeffff01fffe1b5b2bfdfdfffffffffffffffc00000fffff
+ff9ffff80fffffc07ffffffffffeffff01fffe1b5b2bfdfdfffffffffffffffc00000fff
+ffffbe
+dfff87ffffffff87fffffffffeffff007e06fb4f6bfdfdfffffffffffffe03fffff01fff
+ff9fff87ffffffff87fffffffffeffff007e06fb4f6bfdfdfffffffffffffe03fffff01f
+ffffbe
+dff87ffffffffff87ffffffffefe00001ffefb736bfdfdffffffffffffe1ffffffffe1ff
+ff9ff87ffffffffff87ffffffffefe00001ffefb736bfdfdffffffffffffe1ffffffffe1
+ffffbe
+dfc7ffffffffffff8ffffffffeffff00fffefb5b6bfdfdfffffffffffe1ffffffffffe1f
+ff9fc7ffffffffffff8ffffffffeffff00fffefb5b6bfdfdfffffffffffe1ffffffffffe
+1fffbe
+df3ffffffffffffff3fffffffeffff03fffc7c0625fbbdfffffffffff1ffffffffffffe3
+ff9f3ffffffffffffff3fffffffeffff03fffc7c0625fbbdfffffffffff1ffffffffffff
+e3ffbe
+defffffffffffffffdfffffffeffff0ffffffffffdfbfdffffffffffcffffffffffffffc
+ff9efffffffffffffffdfffffffeffff0ffffffffffdfbfdffffffffffcfffffffffffff
+fcffbe
+d9fffffffffffffffe7ffffffeffff3ffffffffffef7fdffffffffffbfffffffffffffff
+7f99fffffffffffffffe7ffffffeffff3ffffffffffef7fdffffffffffbfffffffffffff
+ff7fbe
+d7ffffffffffffffffbffffffefffffffffffffffffffdfffffffffe7fffffffffffffff
+9f97ffffffffffffffffbffffffefffffffffffffffffffdfffffffffe7fffffffffffff
+ff9fbe
+cfff8bfffff77fffffdffffffefffffffffffffffffffdfffffffffdffffffffffffffff
+ef8fff8bfffff77fffffdffffffefffffffffffffffffffdfffffffffdffffffffffffff
+ffefbe
+cfff73ffffe7ffffffdffbfffefffffffffffffffffffdfffffffffbff17ffffffffffff
+f78fff73ffffe7ffffffdffffffefffffffffffffffffffdfffffffffbff17ffffffffff
+fff7be
+dfff7bfffff7ffffffeffcfffefffffffffffffffffffdfffffffffbfee7ffffffffffff
+f79fff7bfffff7ffffffeff807fefffffffffffffffffffdfffffffffbfee7ffffffffff
+fff7be
+dfff9e669a7773afffefff7ffefffffffffffffffffffdfffcff3ff7fdf7ffffffffffff
+fb9fff9e669a7773afffeffc007efffffffffffffffffffdfffc007ff7fdf7ffffffffff
+fffbbe
+dfffe77461b66d1fffefffbe7e00000000000000000001fffcfcfff7fdff8e9c19a5f3af
+fb9fffe77461b66d1fffeffc00fe00000000000000000001fffc00fff7fdff8e9c19a5f3
+affbbe
+dffffb76ebb761bfffefffcc7ffffffffffffffffffffffff873fff7fdff746b5d12ed1f
+fb9ffffb76ebb761bfffeffe01fffffffffffffffffffffffffe00fff7fdff746b5d12ed
+1ffbbe
+cfff7b76ebb76fbfffdffff03ffffffffffffffffffffffff04ffff7fdff76e9ddb6e1bf
+fb8fff7b76ebb76fbfffdffe01fffffffffffffffffffffffffe01fff7fdff76e9ddb6e1
+bffbbe
+cfff3b6269b76dbfffd7fff83ffffffffc07fffffffffffff03fffebfdf776ee5db6efbf
+f78fff3b6269b76dbfffd7ff03fffffffffc07ffffffffffffff03ffebfdf776ee5db6ef
+bff7be
+d7ff47969a62331fffb9fff01ffffffff3f807ffffffffffe03fff9bfeef76eb58b6edbf
+f797ff47969a62331fffb9ff04fffffffff3f807fffffffffffe03ff9bfeef76eb58b6ed
+bff7be
+d9fffffefbfffffffe7effe01fffffff8ffff81fffffffffc01ffe7dff1f8c40e512731f
+ef99fffffefbfffffffe7eff8f7fffffff8ffff81ffffffffff907fe7dff1f8c40e51273
+1fefbe
+defffffefbfffffffdff3fc00ffffffc7fffffe0ffffffff801ff9fe7fffffffffffffff
+9f9efffffefbfffffffdff3f8fbffffffc7fffffe0ffffffffe78ff9fe7fffffffffffff
+ff9fbe
+df3ffffc71fffffff3ffdf800ffffff3ffffffff03ffffff800fe7ffbfffffffffffffff
+7f9f3ffffc71fffffff3ffdfdfcffffff3ffffffff03ffffff9f9fe7ffbfffffffffffff
+ff7fbe
+dfc7ffffffffffff8fffefff87ffff0ffffffffffc0fffffffff9fffcffffffffffffffc
+ff9fc7ffffffffffff8fffeffff7ffff0ffffffffffc0fffff7fdf9fffcfffffffffffff
+fcffbe
+dff87ffffffffff87ffff3fffffff8fffffffffffff0fffffffe7ffff1ffffffffffffe3
+ff9ff87ffffffffff87ffff3fffbfff8fffffffffffff0fffffffe7ffff1ffffffffffff
+e3ffbe
+dfff87ffffffff87fffffdffffffe7ffffffffffffff3ffffff9fffffe1ffffffffffe1f
+ff9fff87ffffffff87fffffdffffffe7ffffffffffffff3ffffff9fffffe1ffffffffffe
+1fffbe
+dffff80fffffc07ffffffe7fffff9fffffffffffffffc7ffffe7ffffffe1ffffffffe1ff
+ff9ffff80fffffc07ffffffe7fffff9fffffffffffffffc7ffffe7ffffffe1ffffffffe1
+ffffbe
+dffffff000003fffffffffbffffe7ffffffffffffffffbffff9ffffffffe03fffff01fff
+ff9ffffff000003fffffffffbffffe7ffffffffffffffffbffff9ffffffffe03fffff01f
+ffffbe
+dfffffffffffffffffffffcffffdfffffffffffffffffbfffe7ffffffffffc00000fffff
+ff9fffffffffffffffffffffcffffdfffffffffffffffffbfffe7ffffffffffc00000fff
+ffffbe
+dffffffffffffffffffffff7fffbfffffffffffffffffcfff9ffffffffffffffffffffff
+ff9ffffffffffffffffffffff7fffbfffffffffffffffffcfff9ffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffbfffbffffffffffffffffff7fe7ffffffffffffffffffffff
+ff9ffffffffffffffffffffffbfffbffffffffffffffffff7fe7ffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffcffe7ffffffffffffffffffbf9fffffffffffffffffffffff
+ff9ffffffffffffffffffffffcffe7ffffffffffffffffffbf9fffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffff7f9fffffffffffffffffffbe7fffffffffffffffffffffff
+ff9fffffffffffffffffffffff7f9fffffffffffffffffffbe7fffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffff9e7fffffffffffffffffffb9ffffffffffffffffffffffff
+ff9fffffffffffffffffffffff9e7fffffffffffffffffffb9ffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffd81fffffff8bbfffffffbd7ffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffd81fffffff8bbfffffffbd7ffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffbddfffffbf733fffffff3dfffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffbddfffffbf733fffffff3dfffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffff7dffffffbefbbfffffffbefffffffffffffffffffffffff
+ff9ffffffffffffffffffffffff7dffffffbefbbfffffffbefffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffcfdb88ce91effa79d3a73befffffffffffffffffffffffff
+ff9fffffffffffffffffffffffcfdb88ce91effa79d3a73befffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffc3fc3ddb46beff9b68d1adbf7fff807ffffffffffffffffff
+ff9ffffffffffffffffffffffc3fc3ddb46beff9b68d1adbf7ffffefffffffffffffffff
+ffffbe
+dfffffffffffffffffffffe3ffdbeb86ebeffbb8ddba1bf7ff800fffffffffffffffffff
+ff9fffffffffffffffffffffe3ffdbeb86ebeffbb8ddba1bf7ff9fc7ffffffffffffffff
+ffffbe
+dfffffffffffffffffffff1fffdfebbeebefbbb6ddbafbf7ffc00fffffffffffffffffff
+ff9fffffffffffffffffffff1fffdfebbeebefbbb6ddbafbf7ffe3c3ffffffffffffffff
+ffffbe
+dffffffffffffffffffffcffffdef7b6eaf77bb6ddbadbefffe00fffffffffffffffffff
+ff9ffffffffffffffffffffcffffdef7b6eaf77bb6ddbadbeffffc41ffffffffffffffff
+ffffbe
+dffffffffffffffffffffbffff81f7cc41f8f118081131e1fff007fffffffc00000fffff
+ff9ffffffffffffffffffffbffff81f7cc41f8f118081131e1ffff80fffffffc00000fff
+ffffbe
+dffffffffffffffffffff7ffffffffffffffffffffffffde1ffc18fffffe03fffff01fff
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffde1fff807ffffe03fffff01f
+ffffbe
+dffffffffffffffffffff7ffffffffffffffffffffffffdfe1fe1f3fffe1ffffffffe1ff
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffdfe1ff803fffe1ffffffffe1
+ffffbe
+dffffffffffffffffffff7ffffffffffffffffffffffffbffe1f1fcffe1ffffffffffe1f
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffbffe1f801ffe1ffffffffffe
+1fffbe
+dffffffffffffffffffff7ffffffffffffffffffffffffbfffe1bffff1ffffffffffffe3
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffbfffe11ffff1ffffffffffff
+e3ffbe
+dffffffffffffffffffff7ffffffffffffffffffffffff7ffffe1fffcffffffffffffffc
+ff9ffffffffffffffffffff7ffffffffffffffffffffffff7ffffe1fffcfffffffffffff
+fcffbe
+dffffffffffffffffffff7ffffffffffffffffffffffff7fffffe1ffbfffffffffffffff
+7f9ffffffffffffffffffff7ffffffffffffffffffffffff7fffffe1ffbfffffffffffff
+ff7fbe
+dfffffffffffffffffffeffffffffffffffffffffffffefffffffe1e7fffffffffffffff
+9f9fffffffffffffffffffeffffffffffffffffffffffffefffffffe1e7fffffffffffff
+ff9fbe
+dfffffffffffffffffffeffffffffffb0fffffff7ffffeffffffffedffffffffffffffff
+ef9fffffffffffffffffffeffffffffffefbffffff7ffffeffffffffedffffffffffffff
+ffefbe
+dffffffffffffffffffff7fffffffff6f7ffffffbffffdfffffffffbff17ffffffffffff
+f79ffffffffffffffffffff7fffffffffdfbfffffebffffdfffffffffbff17ffffffffff
+fff7be
+dffffffffffffffffffff7ffffffffedfbffffffdffff3fffffffffbfee7ffffffffffff
+f79ffffffffffffffffffff7fffffffffbf5fffffedffff3fffffffffbfee7ffffffffff
+fff7be
+dffffffffffffffffffffbffffffffddfb339999efffcffffffffff7fdf7ffffffffffff
+fb9ffffffffffffffffffffbfffffffff7f5f0674c6fffcffffffffff7fdf7ffffffffff
+fffbbe
+dffffffffffffffffffffbffffffffddfbbb6dd6efff3ffffffffff7fdff8e9c19a5f3af
+fb9ffffffffffffffffffffbfffffffff7eeeeda36efff3ffffffffff7fdff8e9c19a5f3
+affbbe
+dffffffffffffffffffffdffffffffddfbbb0dd0effcfffffffffff7fdff746b5d12ed1f
+fb9ffffffffffffffffffffdfffffffff7e0eec376effcfffffffffff7fdff746b5d12ed
+1ffbbe
+dffffffffffffffffffffeffffffffddfbbb7dd7ef03fffffffffff7fdff76e9ddb6e1bf
+fb9ffffffffffffffffffffefffffffff7df71df76ef03fffffffffff7fdff76e9ddb6e1
+bffbbe
+dffffffffffffffffffffeffffffffdef7b16d86c0fffffffffffffbfdf776ee5db6efbf
+f79ffffffffffffffffffffefffffffff7df6fdb7680fffffffffffffbfdf776ee5db6ef
+bff7be
+dfffffffffffffffffffff3fffffffdf0fcb9e592ffbfffffffffffbfeef76eb58b6edbf
+f79fffffffffffffffffffff3ffffffff78e20e6222ffbfffffffffffbfeef76eb58b6ed
+bff7be
+dfffffffffffffffffffffc0000000efdffffffe5ffcfffffffffffdff1f8c40e512731f
+ef9fffffffffffffffffffffc0000000fbffef7ffe5ffcfffffffffffdff1f8c40e51273
+1fefbe
+dfffffffffffffffffffffffbfffff37e3fffffdbfff7ffffffffffe7fffffffffffffff
+9f9fffffffffffffffffffffffbfffff3dffef7ffdbfff7ffffffffffe7fffffffffffff
+ff9fbe
+dfffffffffffffffffffffff7fffffdbfffffffd7fffbfffffffffffbfffffffffffffff
+7f9fffffffffffffffffffffff7fffffdefff0fffd7fffbfffffffffffbfffffffffffff
+ff7fbe
+dffffffffffffffffffffffeffffffeffffffffbffffcfffffffffffcffffffffffffffc
+ff9ffffffffffffffffffffefeffffffeffffffffbffffcfffffffffffcfffffffffffff
+fcffbe
+dffffffffffffffffffe01fdffffffeffffffff7fffff7fffffffffff1ffffffffffffe3
+ff9ffffffffffffffffffff9fdffffffeffffffff7fffff7fffffffffff1ffffffffffff
+e3ffbe
+dffffffffffffffffff003fbfffffff7ffffffeffffff9fffffffffffe1ffffffffffe1f
+ff9ffffffffffffffffffbf7fbfffffff7ffffffeffffff9ffdffffffffe1ffffffffffe
+1fffbe
+dffffffffffffffffff803f7fffffff8ffffffdffffffeffc1ffffffffe1ffffffffe1ff
+ff9ffffffffffffffffff1eff7fffffff8ffffffdffffffeffefffffffffe1ffffffffe1
+ffffbe
+dffffffffffffffffffc07efffffffff3fffff3fffffff3fe01ffffffffe03fffff01fff
+ff9ffffffffffffffffff19fefffffffff3fffff3fffffff3ff7fffffffffe03fffff01f
+ffffbe
+dffffffffffffffffffc07dfffffffffc7fffeffffffffdfe007fffffffffc00000fffff
+ff9fffffffffffffffffe0ffdfffffffffc7fffeffffffffdffbeffffffffffc00000fff
+ffffbe
+dffffffffffffffffffc0fbffffffffff87ffeffffffffeff00fffffffffffffffffffff
+ff9fffffffffffffffffe07fbffffffffff87ffeffffffffeffdc7ffffffffffffffffff
+ffffbe
+dffffffffffffffffffb0f7fffffffffff83e1fffffffff3f01fffffffffffffffffffff
+ff9fffffffffffffffffc03f7fffffffffff83e1fffffffff3fe87ffffffffffffffffff
+ffffbe
+dfffffffffffffffffe79efffffffffffffc1ffffffffffdf03fffffffffffffffffffff
+ff9fffffffffffffffffc03efffffffffffffc1ffffffffffdff03ffffffffffffffffff
+ffffbe
+dfffffffffffffffffdf9dfffffffffffffffffffffffffe785fffffffffffffffffffff
+ff9fffffffffffffffff801dfffffffffffffffffffffffffe7e03ffffffffffffffffff
+ffffbe
+dfffffffffffffffffbffbffffffffffffffffffffffffffb8efffffffffffffffffffff
+ff9fffffffffffffffff9ffbffffffffffffffffffffffffffbc03ffffffffffffffffff
+ffffbe
+dfffffffffffffffff7ff7ffffffffffffffffffffffffffcdf3ffffffffffffffffffff
+ff9ffffffffffffffffffff7ffffffffffffffffffffffffffc801ffffffffffffffffff
+ffffbe
+dffffff000003fffffffeffffffffffffffffffffffffffff7fdffffffffffffffffffff
+ff9ffffff000003fffffffeffffffffffffffffffffffffffff7c1ffffffffffffffffff
+ffffbe
+dffff80fffffc07fffffdffffffffffffffffffffffffffffbfeffffffffffffffffffff
+ff9ffff80fffffc07fffffdffffffffffffffffffffffffffffbfcffffffffffffffffff
+ffffbe
+dfff87ffffffff87ffffbffffffffffffffffffffffffffffcff7fffffffffffffffffff
+ff9fff87ffffffff87ffffbffffffffffffffffffffffffffffcffffffffffffffffffff
+ffffbe
+dff87ffffffffff87fff7fffffffffffffffffffffffffffff7fffffffffffffffffffff
+ff9ff87ffffffffff87fff7fffffffffffffffffffffffffffff7fffffffffffffffffff
+ffffbe
+dfc7ffffffffffff8ffeffffffffffffffffffffffffffffff9fffffffffffffffffffff
+ff9fc7ffffffffffff8ffeffffffffffffffffffffffffffffff9fffffffffffffffffff
+ffffbe
+df3ffffffffffffff3fdffffffffffffffffffffffffffffffefffffffffffffffffffff
+ff9f3ffffffffffffff3fdffffffffffffffffffffffffffffffefffffffffffffffffff
+ffffbe
+defffffffffffffffdfbfffffffffffffffffffffffffffffff3ffffffffffffffffffff
+ff9efffffffffffffffdfbfffffffffffffffffffffffffffffff3ffffffffffffffffff
+ffffbe
+d9fffffffffffffffe77fffffffffffffffffffffffffffffffdfffffffffc00000fffff
+ff99fffffffffffffffe77fffffffffffffffffffffffffffffffdfffffffffc00000fff
+ffffbe
+d7ffffffffffffffffbffffffffffffffffffffffffffffffffefffffffe03fffff01fff
+ff97ffffffffffffffffbffffffffffffffffffffffffffffffffefffffffe03fffff01f
+ffffbe
+cfff8bfffff77fffffdfffffffffffffffffffffffffffffffff3fffffe1ffffffffe1ff
+ff8fff8bfffff77fffffdfffffffffffffffffffffffffffffffff3fffffe1ffffffffe1
+ffffbe
+cfff73ffffe7ffffffdfffffffffffffffffffffffffffffffffdffffe1ffffffffffe1f
+ff8fff73ffffe7ffffffdfffffffffffffffffffffffffffffffffdffffe1ffffffffffe
+1fffbe
+dfff7bfffff7ffffffefffffffffffffffffffffffffffffffffe7fff1ffffffffffffe3
+ff9fff7bfffff7ffffffefffffffffffffffffffffffffffffffffe7fff1ffffffffffff
+e3ffbe
+dfff9e669a7773afffeffffffffffffffffffffffffffffffffffbffcffffffffffffffc
+ff9fff9e669a7773afffeffffffffffffffffffffffffffffffffffbffcfffffffffffff
+fcffbe
+dfffe77461b66d1fffeffffffffffffffffffffffffffffffffffcffbfffffffffffffff
+7f9fffe77461b66d1fffeffffffffffffffffffffffffffffffffffcffbfffffffffffff
+ff7fbe
+dffffb76ebb761bfffefffffffffffffffffffffffffffffffffff7e7fffffffffffffff
+9f9ffffb76ebb761bfffefffffffffffffffffffffffffffffffffff7e7fffffffffffff
+ff9fbe
+cfff7b76ebb76fbfffdfffffffffffffffffffffffffffffffffffbdff17ffffffffffff
+ef8fff7b76ebb76fbfffdfffffffffffffffffffffffffffffffffffbdff17ffffffffff
+ffefbe
+cfff3b6269b76dbfffdfffffffffffffffffffffffffffffffffffcbfee7ffffffffffff
+f78fff3b6269b76dbfffdfffffffffffffffffffffffffffffffffffcbfee7ffffffffff
+fff7be
+d7ff47969a62331fffbffffffffffffffffffffffffffffffffffffbfdf7ffffffffffff
+f797ff47969a62331fffbffffffffffffffffffffffffffffffffffffbfdf7ffffffffff
+fff7be
+d9fffffefbfffffffe7ffffffffffffffffffffffffffffffffffff7fdff8e9c19a5f3af
+fb99fffffefbfffffffe7ffffffffffffffffffffffffffffffffffff7fdff8e9c19a5f3
+affbbe
+defffffefbfffffffdfffffffffffffffffffffffffffffffffffff7fdff746b5d12ed1f
+fb9efffffefbfffffffdfffffffffffffffffffffffffffffffffffff7fdff746b5d12ed
+1ffbbe
+df3ffffc71fffffff3fffffffffffffffffffffffffffffffffffff7fdff76e9ddb6e1bf
+fb9f3ffffc71fffffff3fffffffffffffffffffffffffffffffffffff7fdff76e9ddb6e1
+bffbbe
+dfc7ffffffffffff8ffffffffffffffffffffffffffffffffffffff7fdf776ee5db6efbf
+fb9fc7ffffffffffff8ffffffffffffffffffffffffffffffffffffff7fdf776ee5db6ef
+bffbbe
+dff87ffffffffff87ffffffffffffffffffffffffffffffffffffffbfeef76eb58b6edbf
+f79ff87ffffffffff87ffffffffffffffffffffffffffffffffffffffbfeef76eb58b6ed
+bff7be
+dfff87ffffffff87fffffffffffffffffffffffffffffffffffffffbff1f8c40e512731f
+f79fff87ffffffff87fffffffffffffffffffffffffffffffffffffffbff1f8c40e51273
+1ff7be
+dffff80fffffc07ffffffffffffffffffffffffffffffffffffffffdffffffffffffffff
+ef9ffff80fffffc07ffffffffffffffffffffffffffffffffffffffffdffffffffffffff
+ffefbe
+dffffff000003ffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffff
+9f9ffffff000003ffffffffffffffffffffffffffffffffffffffffffe7fffffffffffff
+ff9fbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff
+7f9fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffff
+ff7fbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffc
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffff
+fcffbe
+dffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffe3
+ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffff
+e3ffbe
+dffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffffe1f
+ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffffe
+1fffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffe1ff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffe1
+ffffbe
+dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03fffff01fff
+ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03fffff01f
+ffffbe
+dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000fffff
+ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000fff
+ffffbe
+dffffffffffffffffff8bfc03fff18f9fffcf87ffcfd0ff93e7cff3f9fffffffffffffff
+ff9fffffffffffffffffe0ffc03fff18f9fffcf87f93d0fff9fe7cff3f9fffffffffffff
+ffffbe
+dffffffffffffffffff73fdb3fffbdfdff7efdbffefbb7fdbf79ffbfdfffffffffffffff
+ff9ffffffffffffffffff77fdb3fffbdfdff7efdbfdbbb7ffdff79ffbfdfffffffffffff
+ffffbe
+dfffffffffffffffffef7ffb7fff7bfbfffdfbbffdfb77fb7e73ff7fbfffffffffffffff
+ff9fffffffffffffffffefbffb7fff7bfbfffdfbbfb7b77ffbfe73ff7fbfffffffffffff
+ffffbe
+dfffffffffffffffffdff7f74e7f78ba48f1fb8dcd3774db7eb33c73bfffffffffffffff
+ff9fffffffffffffffffefb7f74e7f78ba48f1fb8db7771bca7eb33c73bfffffffffffff
+ffffbe
+dfffffffffffffffffdffff72d7f02b962edf86dbcb70edb7eaadb6bbfffffffffffffff
+ff9fffffffffffffffffefbff72d7f02b962edf86db770dbb97eaadb6bbfffffffffffff
+ffffbe
+dfffffffffffffffffdffff76b7f7abb6eddfbedddb77edb7ea9d75bbfffffffffffffff
+ff9fffffffffffffffffefbff76b7f7abb6eddfbedb777dbdb7ea9d75bbfffffffffffff
+ffffbe
+dfffffffffffffffffdffff768ff7ab76ed9fbdbedaf7db6fe99d6477fffffffffffffff
+ff9fffffffffffffffffef7ff768ff7ab76ed9fbdb6ef7b7eb7e99d6477fffffffffffff
+ffffbe
+dfffffffffffffffffef7feedb7ef676ddd3f7db6b6efdb6fdb5b4db7fffffffffffffff
+ff9fffffffffffffffffdeffeedb7ef676ddd3f7db6eefb766fdb5b4db7fffffffffffff
+ffffbe
+dffffffffffffffffff0efc6c8fc62f9dcc9e3c11b1c7c1278a272473fffffffffffffff
+ff9fffffffffffffffff81efc6c8fc62f9dcc9e3c125c7831678a272473fffffffffffff
+ffffbe
+dffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffffff5ffffffffffffffffffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffffff5ffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffff
+ff9ffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffbe
+c00000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00003e
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
diff --git a/lib/cosEvent/doc/src/fascicules.xml b/lib/cosEvent/doc/src/fascicules.xml
new file mode 100644
index 0000000000..0678195e07
--- /dev/null
+++ b/lib/cosEvent/doc/src/fascicules.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
+
+<fascicules>
+ <fascicule file="part" href="part_frame.html" entry="no">
+ User's Guide
+ </fascicule>
+ <fascicule file="ref_man" href="ref_man_frame.html" entry="yes">
+ Reference Manual
+ </fascicule>
+ <fascicule file="part_notes" href="part_notes_frame.html" entry="no">
+ Release Notes
+ </fascicule>
+ <fascicule file="" href="../../../../doc/print.html" entry="no">
+ Off-Print
+ </fascicule>
+</fascicules>
+
diff --git a/lib/cosEvent/doc/src/make.dep b/lib/cosEvent/doc/src/make.dep
new file mode 100644
index 0000000000..b8a95c2d58
--- /dev/null
+++ b/lib/cosEvent/doc/src/make.dep
@@ -0,0 +1,34 @@
+# ----------------------------------------------------
+# >>>> Do not edit this file <<<<
+# This file was automaticly generated by
+# /home/otp/bin/docdepend
+# ----------------------------------------------------
+
+
+# ----------------------------------------------------
+# TeX files that the DVI file depend on
+# ----------------------------------------------------
+
+book.dvi: CosEventChannelAdmin.tex CosEventChannelAdmin_ConsumerAdmin.tex \
+ CosEventChannelAdmin_EventChannel.tex CosEventChannelAdmin_ProxyPullConsumer.tex \
+ CosEventChannelAdmin_ProxyPullSupplier.tex \
+ CosEventChannelAdmin_ProxyPushConsumer.tex \
+ CosEventChannelAdmin_ProxyPushSupplier.tex \
+ CosEventChannelAdmin_SupplierAdmin.tex book.tex \
+ ch_contents.tex ch_event_service.tex ch_introduction.tex \
+ cosEventApp.tex part.tex ref_man.tex
+
+# ----------------------------------------------------
+# Source inlined when transforming from source to LaTeX
+# ----------------------------------------------------
+
+CosEventChannelAdmin.tex: ../../src/CosEventChannelAdmin.idl
+
+book.tex: ref_man.xml
+
+# ----------------------------------------------------
+# Pictures that the DVI file depend on
+# ----------------------------------------------------
+
+book.dvi: e_s_components.ps e_s_models.ps
+
diff --git a/lib/cosEvent/doc/src/notes.gif b/lib/cosEvent/doc/src/notes.gif
new file mode 100644
index 0000000000..e000cca26a
--- /dev/null
+++ b/lib/cosEvent/doc/src/notes.gif
Binary files differ
diff --git a/lib/cosEvent/doc/src/notes.xml b/lib/cosEvent/doc/src/notes.xml
new file mode 100644
index 0000000000..afd1247b42
--- /dev/null
+++ b/lib/cosEvent/doc/src/notes.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>1999</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>cosEvent Release Notes</title>
+ <prepared>Niclas Eklund</prepared>
+ <responsible>Niclas Eklund</responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>99-02-12</date>
+ <rev>A</rev>
+ <file>notes.xml</file>
+ </header>
+
+ <section>
+ <title>cosEvent 2.1.7</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>
+ The documentation is now built with open source tools (xsltproc and fop)
+ that exists on most platforms. One visible change is that the frames are removed.</p>
+ <p>
+ Own Id: OTP-8201 Aux Id:</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>cosEvent 2.1.6</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Obsolete guards, e.g. record vs is_record, has been changed
+ to avoid compiler warnings.</p>
+ <p>Own id: OTP-7987</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>cosEvent 2.1.5</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Updated file headers.</p>
+ <p>Own id: OTP-7837</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>cosEvent 2.1.4</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Documentation source included in open source releases.</p>
+ <p>Own id: OTP-7595</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>cosEvent 2.1.3</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Updated file headers.</p>
+ <p>Own id: OTP-7011</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>cosEvent 2.1.2</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The documentation source has been converted from SGML to XML.</p>
+ <p>Own id: OTP-6754</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>cosEvent 2.1.1</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Minor Makefile changes.</p>
+ <p>Own id: OTP-6701</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>cosEvent 2.1</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The stub/skeleton-files generated by IC have been improved,
+ i.e., depending on the IDL-files, reduced the size of the
+ erl- and beam-files and decreased dependencies off Orber's
+ Interface Repository. It is necessary to re-compile all IDL-files
+ and use COS-applications, including Orber, compiled with
+ IC-4.2.</p>
+ <p>Own id: OTP-4576</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>cosEvent 2.0</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>This version is a completely new version of the cosEvent
+ application; older versions was <em>not</em> compliant with the OMG
+ specification. The <c><![CDATA[look and feel]]></c> have been changed
+ to be more uniform with the other COS-services.</p>
+ </item>
+ </list>
+ </section>
+ </section>
+</chapter>
+
diff --git a/lib/cosEvent/doc/src/part.xml b/lib/cosEvent/doc/src/part.xml
new file mode 100644
index 0000000000..a17821cadc
--- /dev/null
+++ b/lib/cosEvent/doc/src/part.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE part SYSTEM "part.dtd">
+
+<part xmlns:xi="http://www.w3.org/2001/XInclude">
+ <header>
+ <copyright>
+ <year>1999</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>cosEvent User's Guide</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date>1998-04-26</date>
+ <rev>1.0</rev>
+ <file>part.xml</file>
+ </header>
+ <description>
+ <p>The <em>cosEvent</em> application is an Erlang implementation of a
+ CORBA Service CosEvent.</p>
+ </description>
+ <xi:include href="ch_contents.xml"/>
+ <xi:include href="ch_introduction.xml"/>
+ <xi:include href="ch_event_service.xml"/>
+</part>
+
diff --git a/lib/cosEvent/doc/src/part_notes.xml b/lib/cosEvent/doc/src/part_notes.xml
new file mode 100644
index 0000000000..92324ce227
--- /dev/null
+++ b/lib/cosEvent/doc/src/part_notes.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE part SYSTEM "part.dtd">
+
+<part xmlns:xi="http://www.w3.org/2001/XInclude">
+ <header>
+ <copyright>
+ <year>1999</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>cosEvent Release Notes</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date>1999-04-20</date>
+ <rev>1.0</rev>
+ <file>part_notes.xml</file>
+ </header>
+ <description>
+ <p>The cosEvent Application is an Erlang implementation of a CORBA Service
+ CosEvent.</p>
+ </description>
+ <xi:include href="notes.xml"/>
+</part>
+
diff --git a/lib/cosEvent/doc/src/ref_man.gif b/lib/cosEvent/doc/src/ref_man.gif
new file mode 100644
index 0000000000..b13c4efd53
--- /dev/null
+++ b/lib/cosEvent/doc/src/ref_man.gif
Binary files differ
diff --git a/lib/cosEvent/doc/src/ref_man.xml b/lib/cosEvent/doc/src/ref_man.xml
new file mode 100644
index 0000000000..7088c2ef92
--- /dev/null
+++ b/lib/cosEvent/doc/src/ref_man.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE application SYSTEM "application.dtd">
+
+<application xmlns:xi="http://www.w3.org/2001/XInclude">
+ <header>
+ <copyright>
+ <year>1999</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>cosEvent Reference Manual</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date>1998-05-05</date>
+ <rev>2.0</rev>
+ <file>ref_man.xml</file>
+ </header>
+ <description>
+ <p>The <em>cosEvent</em> application is an Erlang implementation of
+ a CORBA Service CosEvent.</p>
+ </description>
+ <xi:include href="cosEventApp.xml"/>
+ <xi:include href="CosEventChannelAdmin.xml"/>
+ <xi:include href="CosEventChannelAdmin_ConsumerAdmin.xml"/>
+ <xi:include href="CosEventChannelAdmin_SupplierAdmin.xml"/>
+ <xi:include href="CosEventChannelAdmin_EventChannel.xml"/>
+ <xi:include href="CosEventChannelAdmin_ProxyPullConsumer.xml"/>
+ <xi:include href="CosEventChannelAdmin_ProxyPushConsumer.xml"/>
+ <xi:include href="CosEventChannelAdmin_ProxyPullSupplier.xml"/>
+ <xi:include href="CosEventChannelAdmin_ProxyPushSupplier.xml"/>
+</application>
+
diff --git a/lib/cosEvent/doc/src/summary.html.src b/lib/cosEvent/doc/src/summary.html.src
new file mode 100644
index 0000000000..6196223480
--- /dev/null
+++ b/lib/cosEvent/doc/src/summary.html.src
@@ -0,0 +1 @@
+Orber OMG Event Service \ No newline at end of file
diff --git a/lib/cosEvent/doc/src/user_guide.gif b/lib/cosEvent/doc/src/user_guide.gif
new file mode 100644
index 0000000000..e6275a803d
--- /dev/null
+++ b/lib/cosEvent/doc/src/user_guide.gif
Binary files differ
diff --git a/lib/cosEvent/ebin/.gitignore b/lib/cosEvent/ebin/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/cosEvent/ebin/.gitignore
diff --git a/lib/cosEvent/example/.gitignore b/lib/cosEvent/example/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/cosEvent/example/.gitignore
diff --git a/lib/cosEvent/include/.gitignore b/lib/cosEvent/include/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/cosEvent/include/.gitignore
diff --git a/lib/cosEvent/info b/lib/cosEvent/info
new file mode 100644
index 0000000000..dc9f7b7404
--- /dev/null
+++ b/lib/cosEvent/info
@@ -0,0 +1,2 @@
+group: orb
+short: Orber OMG Event Service
diff --git a/lib/cosEvent/src/CosEventChannelAdmin.cfg b/lib/cosEvent/src/CosEventChannelAdmin.cfg
new file mode 100644
index 0000000000..0de579bd6f
--- /dev/null
+++ b/lib/cosEvent/src/CosEventChannelAdmin.cfg
@@ -0,0 +1,6 @@
+{this, "CosEventChannelAdmin::SupplierAdmin"}.
+{{handle_info, "CosEventChannelAdmin::SupplierAdmin"}, true}.
+{this, "CosEventChannelAdmin::ProxyPushConsumer"}.
+{{handle_info, "CosEventChannelAdmin::ProxyPushConsumer"}, true}.
+{this, "CosEventChannelAdmin::ProxyPullConsumer"}.
+{{handle_info, "CosEventChannelAdmin::ProxyPullConsumer"}, true}.
diff --git a/lib/cosEvent/src/CosEventChannelAdmin.idl b/lib/cosEvent/src/CosEventChannelAdmin.idl
new file mode 100644
index 0000000000..d5cb92c4e0
--- /dev/null
+++ b/lib/cosEvent/src/CosEventChannelAdmin.idl
@@ -0,0 +1,66 @@
+#ifndef _COSEVENTCHANELADMIN_IDL
+#define _COSEVENTCHANELADMIN_IDL
+
+#include "CosEventComm.idl"
+
+#pragma prefix "omg.org"
+
+module CosEventChannelAdmin
+{
+ exception AlreadyConnected{};
+ exception TypeError{};
+
+ interface ProxyPushConsumer: CosEventComm::PushConsumer
+ {
+ void connect_push_supplier(in CosEventComm::
+ PushSupplier push_supplier)
+ raises (AlreadyConnected);
+ };
+
+ interface ProxyPullSupplier: CosEventComm::PullSupplier
+ {
+ void connect_pull_consumer(in CosEventComm::
+ PullConsumer pull_consumer)
+ raises (AlreadyConnected);
+ };
+
+ interface ProxyPullConsumer: CosEventComm::PullConsumer
+ {
+ void connect_pull_supplier(in CosEventComm::
+ PullSupplier pull_supplier)
+ raises (AlreadyConnected, TypeError);
+ };
+
+ interface ProxyPushSupplier: CosEventComm::PushSupplier
+ {
+ void connect_push_consumer(in CosEventComm::
+ PushConsumer push_consumer)
+ raises (AlreadyConnected, TypeError);
+ };
+
+ interface ConsumerAdmin
+ {
+ ProxyPushSupplier obtain_push_supplier();
+ ProxyPullSupplier obtain_pull_supplier();
+ };
+
+ interface SupplierAdmin
+ {
+ ProxyPushConsumer obtain_push_consumer();
+ ProxyPullConsumer obtain_pull_consumer();
+ };
+
+ interface EventChannel
+ {
+ ConsumerAdmin for_consumers();
+ SupplierAdmin for_suppliers();
+ void destroy();
+ };
+
+};
+
+#endif
+
+
+
+
diff --git a/lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl b/lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl
new file mode 100644
index 0000000000..26269ad4f7
--- /dev/null
+++ b/lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl
@@ -0,0 +1,205 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : CosEventChannelAdmin_ProxyPullConsumer_impl.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module('CosEventChannelAdmin_ProxyPullConsumer_impl').
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include("CosEventChannelAdmin.hrl").
+-include("CosEventComm.hrl").
+-include("cosEventApp.hrl").
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+%% Mandatory
+-export([init/1,
+ terminate/2,
+ code_change/3,
+ handle_info/2]).
+
+%% Interface functions
+-export([connect_pull_supplier/3]).
+
+%% Exports from "CosEventComm::PullConsumer"
+-export([disconnect_pull_consumer/2]).
+
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+-record(state, {admin, admin_pid, channel, client,
+ typecheck, pull_interval, timer_ref}).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+
+%%======================================================================
+%% External functions
+%%======================================================================
+%%----------------------------------------------------------------------
+%% Function : init/1
+%% Returns : {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% Description: Initiates the server
+%%----------------------------------------------------------------------
+init([Admin, AdminPid, Channel, TypeCheck, PullInterval]) ->
+ process_flag(trap_exit, true),
+ Secs = timer:seconds(PullInterval),
+ timer:start(),
+ {ok, #state{admin = Admin, admin_pid = AdminPid, channel = Channel,
+ typecheck = TypeCheck, pull_interval = Secs}}.
+
+%%----------------------------------------------------------------------
+%% Function : terminate/2
+%% Returns : any (ignored by gen_server)
+%% Description: Shutdown the server
+%%----------------------------------------------------------------------
+terminate(_Reason, #state{client = undefined}) ->
+ ?DBG("Terminating ~p; no client connected.~n", [_Reason]),
+ ok;
+terminate(_Reason, #state{client = Client} = State) ->
+ stop_timer(State),
+ ?DBG("Terminating ~p~n", [_Reason]),
+ cosEventApp:disconnect('CosEventComm_PullSupplier',
+ disconnect_pull_supplier, Client),
+ ok.
+
+%%----------------------------------------------------------------------
+%% Function : code_change/3
+%% Returns : {ok, NewState}
+%% Description: Convert process state when code is changed
+%%----------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%---------------------------------------------------------------------%
+%% function : handle_info
+%% Arguments:
+%% Returns : {noreply, State} |
+%% {stop, Reason, State}
+%% Effect : If the Parent Admin or the Channel terminates so must this object.
+%%----------------------------------------------------------------------
+handle_info({'EXIT', Pid, Reason}, #state{admin_pid = Pid} = State) ->
+ ?DBG("Parent Admin terminated ~p~n", [Reason]),
+ orber:dbg("[~p] CosEventChannelAdmin_ProxyPullConsumer:handle_info(~p);~n"
+ "My Admin terminated and so will I.", [?LINE, Reason], ?DEBUG_LEVEL),
+ {stop, Reason, State};
+handle_info(try_pull_event, State) ->
+ try_pull_event(State);
+handle_info(_Info, State) ->
+ ?DBG("Unknown Info ~p~n", [_Info]),
+ {noreply, State}.
+
+%%----------------------------------------------------------------------
+%% Function : connect_pull_supplier
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+connect_pull_supplier(_OE_This, #state{client = undefined,
+ typecheck = TypeCheck} = State, NewClient) ->
+ case corba_object:is_nil(NewClient) of
+ true ->
+ ?DBG("A NIL client supplied.~n", []),
+ orber:dbg("[~p] CosEventChannelAdmin_ProxyPullConsumer:connect_pull_supplier(..);~n"
+ "Supplied a NIL reference which is not allowed.",
+ [?LINE], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status = ?COMPLETED_NO});
+ false ->
+ cosEventApp:type_check(NewClient, 'CosEventComm_PullSupplier', TypeCheck),
+ NewState = start_timer(State),
+ {reply, ok, NewState#state{client = NewClient}}
+ end;
+connect_pull_supplier(_, _, _) ->
+ corba:raise(#'CosEventChannelAdmin_AlreadyConnected'{}).
+
+
+%%----------------------------------------------------------------------
+%% Function : disconnect_pull_consumer
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+disconnect_pull_consumer(_OE_This, State) ->
+ NewState = stop_timer(State),
+ ?DBG("Disconnect invoked ~p~n", [NewState]),
+ {stop, normal, ok, NewState#state{client = undefined}}.
+
+%%======================================================================
+%% Internal functions
+%%======================================================================
+%% Start timer which send a message each time we should pull for new events.
+start_timer(State) ->
+ case catch timer:send_interval(State#state.pull_interval, try_pull_event) of
+ {ok,PullTRef} ->
+ ?DBG("Started timer: ~p~n", [State#state.pull_interval]),
+ State#state{timer_ref = PullTRef};
+ _ ->
+ corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})
+ end.
+stop_timer(#state{timer_ref = undefined} = State) ->
+ ?DBG("No timer to stop~n",[]),
+ State;
+stop_timer(State) ->
+ ?DBG("Stopped timer~n",[]),
+ timer:cancel(State#state.timer_ref),
+ State#state{timer_ref = undefined}.
+
+
+try_pull_event(State) ->
+ case catch 'CosEventComm_PullSupplier':try_pull(State#state.client) of
+ {_,false} ->
+ ?DBG("Client did not supply event~n", []),
+ {noreply, State};
+ {Any, true} ->
+ 'oe_CosEventComm_Channel':send_sync(State#state.channel, Any),
+ ?DBG("Received Event ~p and forwarded it successfully.~n", [Any]),
+ {noreply, State};
+ {'EXCEPTION', #'CosEventComm_Disconnected'{}} ->
+ ?DBG("Client claims we are disconnectedwhen trying to pull event.~n", []),
+ orber:dbg("[~p] CosEventChannelAdmin_ProxyPullConsumer:try_pull_event();~n"
+ "Client claims we are disconnected when trying to pull event so I terminate.",
+ [?LINE], ?DEBUG_LEVEL),
+ {stop, normal, State#state{client = undefined}};
+ What ->
+ orber:dbg("[~p] CosEventChannelAdmin_ProxyPullConsumer:try_pull_event(~p);~n"
+ "My Client behaves badly so I terminate.",
+ [?LINE, What], ?DEBUG_LEVEL),
+ {stop, normal, State}
+ end.
+
+
+%%======================================================================
+%% END OF MODULE
+%%======================================================================
diff --git a/lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl b/lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl
new file mode 100644
index 0000000000..969beb1d04
--- /dev/null
+++ b/lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl
@@ -0,0 +1,169 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : CosEventChannelAdmin_ProxyPushConsumer_impl.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module('CosEventChannelAdmin_ProxyPushConsumer_impl').
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include("CosEventChannelAdmin.hrl").
+-include("CosEventComm.hrl").
+-include("cosEventApp.hrl").
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+%% Mandatory
+-export([init/1,
+ terminate/2,
+ code_change/3,
+ handle_info/2]).
+
+%% Exports from "CosEventChannelAdmin::ProxyPushConsumer"
+-export([connect_push_supplier/3]).
+
+%% Exports from "CosEventComm::PushConsumer"
+-export([push/3,
+ disconnect_push_consumer/2]).
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+-record(state, {admin, admin_pid, channel, client, typecheck}).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+
+%%======================================================================
+%% External functions
+%%======================================================================
+%%----------------------------------------------------------------------
+%% Function : init/1
+%% Returns : {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% Description: Initiates the server
+%%----------------------------------------------------------------------
+init([Admin, AdminPid, Channel, TypeCheck]) ->
+ process_flag(trap_exit, true),
+ {ok, #state{admin = Admin, admin_pid = AdminPid, channel = Channel,
+ typecheck = TypeCheck}}.
+
+%%----------------------------------------------------------------------
+%% Function : terminate/2
+%% Returns : any (ignored by gen_server)
+%% Description: Shutdown the server
+%%----------------------------------------------------------------------
+terminate(_Reason, #state{client = undefined}) ->
+ ?DBG("Terminating ~p; no client connected.~n", [_Reason]),
+ ok;
+terminate(_Reason, #state{client = Client} = _State) ->
+ ?DBG("Terminating ~p~n", [_Reason]),
+ cosEventApp:disconnect('CosEventComm_PushSupplier',
+ disconnect_push_supplier, Client),
+ ok.
+
+%%----------------------------------------------------------------------
+%% Function : code_change/3
+%% Returns : {ok, NewState}
+%% Description: Convert process state when code is changed
+%%----------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%---------------------------------------------------------------------%
+%% function : handle_info
+%% Arguments:
+%% Returns : {noreply, State} |
+%% {stop, Reason, State}
+%% Effect : If the Parnet Admin or the Channel terminates so must this object.
+%%----------------------------------------------------------------------
+handle_info({'EXIT', Pid, Reason}, #state{admin_pid = Pid} = State) ->
+ ?DBG("Parent Admin terminated ~p~n", [Reason]),
+ orber:dbg("[~p] CosEventChannelAdmin_ProxyPushConsumer:handle_info(~p);~n"
+ "My Admin terminated and so will I.",
+ [?LINE, Reason], ?DEBUG_LEVEL),
+ {stop, Reason, State};
+handle_info(_Info, State) ->
+ ?DBG("Unknown Info ~p~n", [_Info]),
+ {noreply, State}.
+
+%%----------------------------------------------------------------------
+%% Function : connect_push_supplier
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+connect_push_supplier(_OE_This, #state{client = undefined,
+ typecheck = TypeCheck} = State, NewClient) ->
+ case corba_object:is_nil(NewClient) of
+ true ->
+ ?DBG("A NIL client supplied.~n", []),
+ {reply, ok, State};
+ false ->
+ cosEventApp:type_check(NewClient, 'CosEventComm_PushSupplier', TypeCheck),
+ ?DBG("Connected to client.~n", []),
+ {reply, ok, State#state{client = NewClient}}
+ end;
+connect_push_supplier(_, _, _) ->
+ corba:raise(#'CosEventChannelAdmin_AlreadyConnected'{}).
+
+
+%%----------------------------------------------------------------------
+%% Function : push
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+push(_OE_This, State, Any) ->
+ %% We should not use corba:reply here since if we block incoming
+ %% events this will prevent producers to flood the system.
+ ?DBG("Received Event ~p and forwarded it successfully.~n", [Any]),
+ 'oe_CosEventComm_Channel':send_sync(State#state.channel, Any),
+ {reply, ok, State}.
+
+%%----------------------------------------------------------------------
+%% Function : disconnect_push_consumer
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+disconnect_push_consumer(_OE_This, State) ->
+ ?DBG("Disconnect invoked ~p~n", [State]),
+ {stop, normal, ok, State#state{client = undefined}}.
+
+%%======================================================================
+%% Internal functions
+%%======================================================================
+
+%%======================================================================
+%% END OF MODULE
+%%======================================================================
diff --git a/lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl b/lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl
new file mode 100644
index 0000000000..c7cf0bd869
--- /dev/null
+++ b/lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl
@@ -0,0 +1,159 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : CosEventChannelAdmin_SupplierAdmin_impl.erl
+%% Created : 21 Mar 2001
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module('CosEventChannelAdmin_SupplierAdmin_impl').
+
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include("cosEventApp.hrl").
+
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+%% Mandatory
+-export([init/1,
+ terminate/2,
+ code_change/3,
+ handle_info/2]).
+
+%% Exports from "CosEventChannelAdmin::SupplierAdmin"
+-export([obtain_push_consumer/2,
+ obtain_pull_consumer/2]).
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+-record(state, {channel, channel_pid, typecheck, pull_interval, server_options}).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+
+%%======================================================================
+%% External functions
+%%======================================================================
+%%----------------------------------------------------------------------
+%% Function : init/1
+%% Returns : {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% Description: Initiates the server
+%%----------------------------------------------------------------------
+init([Channel, ChannelPid, TypeCheck, PullInterval, ServerOpts]) ->
+ process_flag(trap_exit, true),
+ {ok, #state{channel = Channel, channel_pid = ChannelPid, typecheck = TypeCheck,
+ pull_interval = PullInterval, server_options = ServerOpts}}.
+
+%%----------------------------------------------------------------------
+%% Function : terminate/2
+%% Returns : any (ignored by gen_server)
+%% Description: Shutdown the server
+%%----------------------------------------------------------------------
+terminate(_Reason, _State) ->
+ ?DBG("Terminating ~p~n", [_Reason]),
+ ok.
+
+%%----------------------------------------------------------------------
+%% Function : code_change/3
+%% Returns : {ok, NewState}
+%% Description: Convert process state when code is changed
+%%----------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%---------------------------------------------------------------------%
+%% function : handle_info
+%% Arguments:
+%% Returns : {noreply, State} |
+%% {stop, Reason, State}
+%% Effect : Functions demanded by the gen_server module.
+%%----------------------------------------------------------------------
+handle_info({'EXIT', Pid, Reason}, #state{channel_pid = Pid} = State) ->
+ ?DBG("Parent Channel terminated ~p~n", [Reason]),
+ orber:dbg("[~p] CosEventChannelAdmin_SupplierAdmin:handle_info(~p);~n"
+ "My Channel terminated and so will I.",
+ [?LINE, Reason], ?DEBUG_LEVEL),
+ {stop, Reason, State};
+handle_info(_Info, State) ->
+ ?DBG("Unknown Info ~p~n", [_Info]),
+ {noreply, State}.
+
+
+%%----------------------------------------------------------------------
+%% Function : obtain_push_consumer
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+obtain_push_consumer(OE_This, #state{channel = Channel,
+ channel_pid = _ChannelPid,
+ typecheck = TypeCheck,
+ server_options = ServerOpts} = State) ->
+ ?DBG("Starting a new CosEventChannelAdmin_ProxyPushConsumer.~n", []),
+ {reply,
+ 'CosEventChannelAdmin_ProxyPushConsumer':oe_create_link([OE_This,
+ self(),
+ Channel,
+ TypeCheck],
+ ServerOpts),
+ State}.
+
+%%----------------------------------------------------------------------
+%% Function : obtain_pull_consumer
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+obtain_pull_consumer(OE_This, #state{channel = Channel,
+ channel_pid = _ChannelPid,
+ typecheck = TypeCheck,
+ pull_interval= PullInterval,
+ server_options = ServerOpts} = State) ->
+ ?DBG("Starting a new CosEventChannelAdmin_ProxyPullConsumer.~n", []),
+ {reply,
+ 'CosEventChannelAdmin_ProxyPullConsumer':oe_create_link([OE_This,
+ self(),
+ Channel,
+ TypeCheck,
+ PullInterval],
+ ServerOpts),
+ State}.
+
+%%======================================================================
+%% Internal functions
+%%======================================================================
+
+%%======================================================================
+%% END OF MODULE
+%%======================================================================
diff --git a/lib/cosEvent/src/CosEventComm.idl b/lib/cosEvent/src/CosEventComm.idl
new file mode 100644
index 0000000000..bb0c107394
--- /dev/null
+++ b/lib/cosEvent/src/CosEventComm.idl
@@ -0,0 +1,37 @@
+
+#ifndef _COSEVENTCOMM_IDL
+#define _COSEVENTCOMM_IDL
+
+#pragma prefix "omg.org"
+
+module CosEventComm
+{
+ exception Disconnected{};
+
+ interface PushConsumer
+ {
+ void push(in any data) raises (Disconnected);
+ void disconnect_push_consumer();
+ };
+
+
+ interface PushSupplier
+ {
+ void disconnect_push_supplier();
+ };
+
+ interface PullSupplier
+ {
+ any pull() raises(Disconnected);
+ any try_pull(out boolean has_event) raises(Disconnected);
+ void disconnect_pull_supplier();
+ };
+
+ interface PullConsumer
+ {
+ void disconnect_pull_consumer();
+ };
+};
+
+#endif
+
diff --git a/lib/cosEvent/src/Makefile b/lib/cosEvent/src/Makefile
new file mode 100644
index 0000000000..a62d47ce74
--- /dev/null
+++ b/lib/cosEvent/src/Makefile
@@ -0,0 +1,214 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+#
+#
+include $(ERL_TOP)/make/target.mk
+ifeq ($(TYPE),debug)
+ERL_COMPILE_FLAGS += -Ddebug -W
+endif
+EBIN=../ebin
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(COSEVENT_VSN)
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/lib/cosEvent-$(VSN)
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+
+MODULES = \
+ CosEventChannelAdmin_ProxyPullConsumer_impl \
+ CosEventChannelAdmin_ProxyPushConsumer_impl \
+ CosEventChannelAdmin_SupplierAdmin_impl \
+ oe_CosEventComm_CAdmin_impl \
+ oe_CosEventComm_Channel_impl \
+ oe_CosEventComm_PullerS_impl \
+ oe_CosEventComm_PusherS_impl \
+ cosEventApp
+
+
+
+ERL_FILES = $(MODULES:%=%.erl)
+HRL_FILES = cosEventApp.hrl
+
+
+GEN_ERL_FILES1 = \
+ oe_CosEventChannelAdmin.erl \
+ CosEventChannelAdmin_ConsumerAdmin.erl \
+ CosEventChannelAdmin_EventChannel.erl \
+ CosEventChannelAdmin_ProxyPullConsumer.erl \
+ CosEventChannelAdmin_ProxyPullSupplier.erl \
+ CosEventChannelAdmin_ProxyPushConsumer.erl \
+ CosEventChannelAdmin_ProxyPushSupplier.erl \
+ CosEventChannelAdmin_SupplierAdmin.erl \
+ CosEventChannelAdmin_AlreadyConnected.erl \
+ CosEventChannelAdmin_TypeError.erl
+
+GEN_ERL_FILES2 = \
+ oe_CosEventComm_CAdmin.erl \
+ oe_CosEventComm_Channel.erl \
+ oe_CosEventComm_Event.erl \
+ oe_CosEventComm_PullerS.erl \
+ oe_CosEventComm_PusherS.erl \
+ oe_cosEventApp.erl
+
+GEN_ERL_FILES3 = \
+ oe_CosEventComm.erl \
+ CosEventComm_Disconnected.erl \
+ CosEventComm_PullConsumer.erl \
+ CosEventComm_PullSupplier.erl \
+ CosEventComm_PushConsumer.erl \
+ CosEventComm_PushSupplier.erl
+
+GEN_ERL_FILES = \
+ $(GEN_ERL_FILES1) $(GEN_ERL_FILES2) $(GEN_ERL_FILES3)
+
+EXTERNAL_INC_PATH = ../include
+
+GEN_HRL_FILES1 = \
+ oe_CosEventChannelAdmin.hrl \
+ CosEventChannelAdmin.hrl \
+ CosEventChannelAdmin_ConsumerAdmin.hrl \
+ CosEventChannelAdmin_EventChannel.hrl \
+ CosEventChannelAdmin_ProxyPullConsumer.hrl \
+ CosEventChannelAdmin_ProxyPullSupplier.hrl \
+ CosEventChannelAdmin_ProxyPushConsumer.hrl \
+ CosEventChannelAdmin_ProxyPushSupplier.hrl \
+ CosEventChannelAdmin_SupplierAdmin.hrl
+
+EXTERNAL_GEN_HRL_FILES1 = $(GEN_HRL_FILES1:%=$(EXTERNAL_INC_PATH)/%)
+
+GEN_HRL_FILES2 = \
+ oe_CosEventComm_PullerS.hrl \
+ oe_CosEventComm_CAdmin.hrl \
+ oe_CosEventComm_PusherS.hrl \
+ oe_CosEventComm_Channel.hrl \
+ oe_cosEventApp.hrl \
+ oe_CosEventComm_Event.hrl
+
+GEN_HRL_FILES3 = \
+ oe_CosEventComm.hrl \
+ CosEventComm.hrl \
+ CosEventComm_PullConsumer.hrl \
+ CosEventComm_PullSupplier.hrl \
+ CosEventComm_PushConsumer.hrl \
+ CosEventComm_PushSupplier.hrl
+
+EXTERNAL_GEN_HRL_FILES3 = $(GEN_HRL_FILES3:%=$(EXTERNAL_INC_PATH)/%)
+
+GEN_HRL_FILES = \
+ $(EXTERNAL_GEN_HRL_FILES1) $(GEN_HRL_FILES2) $(EXTERNAL_GEN_HRL_FILES3)
+
+TARGET_FILES = \
+ $(GEN_ERL_FILES:%.erl=$(EBIN)/%.$(EMULATOR)) \
+ $(MODULES:%=$(EBIN)/%.$(EMULATOR))
+
+GEN_FILES = $(GEN_HRL_FILES) $(GEN_ERL_FILES)
+
+IDL_FILES = \
+ CosEventChannelAdmin.idl \
+ CosEventComm.idl \
+ cosEventApp.idl
+
+APPUP_FILE = cosEvent.appup
+APPUP_SRC = $(APPUP_FILE).src
+APPUP_TARGET = $(EBIN)/$(APPUP_FILE)
+
+APP_FILE = cosEvent.app
+APP_SRC = $(APP_FILE).src
+APP_TARGET = $(EBIN)/$(APP_FILE)
+
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/cosEvent/ebin -pa $(ERL_TOP)/lib/ic/ebin
+# The -pa option is just used temporary until erlc can handle
+# includes from other directories than ../include .
+ERL_COMPILE_FLAGS += \
+ $(ERL_IDL_FLAGS) \
+ -I$(ERL_TOP)/lib/orber/include \
+ -I$(ERL_TOP)/lib/cosEvent/include \
+ +'{parse_transform,sys_pre_attributes}' \
+ +'{attribute,insert,app_vsn,"cosEvent_$(COSEVENT_VSN)"}'
+
+YRL_FLAGS =
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+opt: $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET)
+
+debug:
+ @${MAKE} TYPE=debug opt
+
+clean:
+ rm -f $(TARGET_FILES) $(GEN_FILES) $(APP_TARGET) $(APPUP_TARGET)
+ rm -f errs core *~
+
+$(APP_TARGET): $(APP_SRC)
+ sed -e 's;%VSN%;$(VSN);' $(APP_SRC) > $(APP_TARGET)
+$(APPUP_TARGET): $(APPUP_SRC)
+ sed -e 's;%VSN%;$(VSN);' $(APPUP_SRC) > $(APPUP_TARGET)
+
+docs:
+
+# ----------------------------------------------------
+# Special Build Targets
+# ----------------------------------------------------
+$(GEN_ERL_FILES1) $(EXTERNAL_GEN_HRL_FILES1): CosEventChannelAdmin.idl
+ erlc $(ERL_IDL_FLAGS) +'{cfgfile,"CosEventChannelAdmin.cfg"}' CosEventChannelAdmin.idl
+ mv $(GEN_HRL_FILES1) $(EXTERNAL_INC_PATH)
+
+$(GEN_ERL_FILES2) $(GEN_HRL_FILES2): cosEventApp.idl
+ erlc $(ERL_IDL_FLAGS) +'{cfgfile,"cosEventApp.cfg"}' cosEventApp.idl
+
+$(GEN_ERL_FILES3) $(EXTERNAL_GEN_HRL_FILES3): CosEventComm.idl
+ erlc $(ERL_IDL_FLAGS) CosEventComm.idl
+ mv $(GEN_HRL_FILES3) $(EXTERNAL_INC_PATH)
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+
+release_spec: opt
+ $(INSTALL_DIR) $(RELSYSDIR)
+ $(INSTALL_DATA) ../info $(RELSYSDIR)
+ $(INSTALL_DIR) $(RELSYSDIR)/ebin
+ $(INSTALL_DATA) $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET) $(RELSYSDIR)/ebin
+ $(INSTALL_DIR) $(RELSYSDIR)/src
+ $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) $(GEN_ERL_FILES) $(IDL_FILES) $(RELSYSDIR)/src
+ $(INSTALL_DIR) $(RELSYSDIR)/include
+ $(INSTALL_DATA) $(GEN_HRL_FILES) $(RELSYSDIR)/include
+
+
+release_docs_spec:
+
+
+
+
+
+
diff --git a/lib/cosEvent/src/cosEvent.app.src b/lib/cosEvent/src/cosEvent.app.src
new file mode 100644
index 0000000000..c1cb9e0cc9
--- /dev/null
+++ b/lib/cosEvent/src/cosEvent.app.src
@@ -0,0 +1,45 @@
+{application, cosEvent,
+ [{description, "The Erlang CosEvent application"},
+ {vsn, "%VSN%"},
+ {modules,
+ [
+ 'CosEventChannelAdmin_ProxyPullConsumer_impl',
+ 'CosEventChannelAdmin_ProxyPushConsumer_impl',
+ 'CosEventChannelAdmin_SupplierAdmin_impl',
+ 'oe_CosEventComm_CAdmin_impl',
+ 'oe_CosEventComm_Channel_impl',
+ 'oe_CosEventComm_PullerS_impl',
+ 'oe_CosEventComm_PusherS_impl',
+ 'cosEventApp',
+ 'oe_CosEventChannelAdmin',
+ 'CosEventChannelAdmin_AlreadyConnected',
+ 'CosEventChannelAdmin_ConsumerAdmin',
+ 'CosEventChannelAdmin_EventChannel',
+ 'CosEventChannelAdmin_ProxyPullConsumer',
+ 'CosEventChannelAdmin_ProxyPullSupplier',
+ 'CosEventChannelAdmin_ProxyPushConsumer',
+ 'CosEventChannelAdmin_ProxyPushSupplier',
+ 'CosEventChannelAdmin_SupplierAdmin',
+ 'CosEventChannelAdmin_TypeError',
+ 'oe_CosEventComm_CAdmin',
+ 'oe_CosEventComm_Channel',
+ 'oe_CosEventComm_Event',
+ 'oe_CosEventComm_PullerS',
+ 'oe_CosEventComm_PusherS',
+ 'oe_cosEventApp',
+ 'oe_CosEventComm',
+ 'CosEventComm_PushSupplier',
+ 'CosEventComm_PushConsumer',
+ 'CosEventComm_PullSupplier',
+ 'CosEventComm_PullConsumer',
+ 'CosEventComm_Disconnected'
+ ]
+ },
+ {registered, []},
+ {applications, [orber, stdlib, kernel]},
+ {env, []},
+ {mod, {cosEventApp, []}}
+]}.
+
+
+
diff --git a/lib/cosEvent/src/cosEvent.appup.src b/lib/cosEvent/src/cosEvent.appup.src
new file mode 100644
index 0000000000..d69b2ef20c
--- /dev/null
+++ b/lib/cosEvent/src/cosEvent.appup.src
@@ -0,0 +1,6 @@
+{"%VSN%",
+ [
+ ],
+ [
+ ]
+}
diff --git a/lib/cosEvent/src/cosEventApp.cfg b/lib/cosEvent/src/cosEventApp.cfg
new file mode 100644
index 0000000000..bbacd134f7
--- /dev/null
+++ b/lib/cosEvent/src/cosEventApp.cfg
@@ -0,0 +1,15 @@
+{this, "oe_CosEventComm::Event"}.
+{from, "oe_CosEventComm::Event"}.
+{{handle_info, "oe_CosEventComm::Event"}, true}.
+{this, "oe_CosEventComm::Channel"}.
+{from, "oe_CosEventComm::Channel"}.
+{{handle_info, "oe_CosEventComm::Channel"}, true}.
+{this, "oe_CosEventComm::CAdmin"}.
+{from, "oe_CosEventComm::CAdmin"}.
+{{handle_info, "oe_CosEventComm::CAdmin"}, true}.
+{this, "oe_CosEventComm::PullerS"}.
+{from, "oe_CosEventComm::PullerS"}.
+{{handle_info, "oe_CosEventComm::PullerS"}, true}.
+{this, "oe_CosEventComm::PusherS"}.
+{from, "oe_CosEventComm::PusherS"}.
+{{handle_info, "oe_CosEventComm::PusherS"}, true}.
diff --git a/lib/cosEvent/src/cosEventApp.erl b/lib/cosEvent/src/cosEventApp.erl
new file mode 100644
index 0000000000..084490f845
--- /dev/null
+++ b/lib/cosEvent/src/cosEventApp.erl
@@ -0,0 +1,290 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : cosEventApp.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module(cosEventApp).
+
+%%--------------- INCLUDES -----------------------------------
+-include_lib("orber/include/corba.hrl").
+-include("cosEventApp.hrl").
+
+
+%%--------------- EXPORTS-------------------------------------
+%% cosEvent API external
+-export([start/0, stop/0, install/0, uninstall/0, start_channel/0, start_channel/1,
+ start_channel_link/0, start_channel_link/1, stop_channel/1]).
+
+%% cosEvent API internal
+-export([create_link/3, get_option/2, type_check/3, disconnect/3, do_disconnect/3]).
+
+%% Application callbacks
+-export([start/2, init/1, stop/1]).
+
+%%--------------- DEFINES ------------------------------------
+-define(IDL_MODULES, ['oe_CosEventComm',
+ 'oe_CosEventChannelAdmin',
+ 'oe_cosEventApp']).
+
+-define(SUPERVISOR_NAME, oe_cosEventSup).
+-define(SUP_FLAG, {simple_one_for_one,50,10}).
+
+-define(SUP_SPEC(Name, Args),
+ ['CosEventChannel_EventChannel',Args,
+ [{sup_child, true}, {regname, {global, Name}}]]).
+-define(SUP_CHILD,
+ {"oe_EventChild",
+ {cosEventApp,create_link, []},
+ transient,100000,worker,
+ ['CosEventChannel_EventChannel']}).
+
+
+%%-----------------------------------------------------------%
+%% function : install
+%% Arguments: -
+%% Returns : ok | EXIT | EXCEPTION
+%% Effect : Install necessary data in the IFR DB
+%%------------------------------------------------------------
+install() ->
+ install_loop(?IDL_MODULES, []).
+
+install_loop([], _) ->
+ ok;
+install_loop([H|T], Accum) ->
+ case catch H:'oe_register'() of
+ {'EXIT',{unregistered,App}} ->
+ ?write_ErrorMsg("Unable to register '~p'; application ~p not registered.
+Trying to unregister ~p~n", [H,App,Accum]),
+ uninstall_loop(Accum, {exit, register});
+ {'EXCEPTION',_} ->
+ ?write_ErrorMsg("Unable to register '~p'; propably already registered.
+You are adviced to confirm this.
+Trying to unregister ~p~n", [H,Accum]),
+ uninstall_loop(Accum, {exit, register});
+ ok ->
+ install_loop(T, [H|Accum]);
+ _ ->
+ ?write_ErrorMsg("Unable to register '~p'; reason unknown.
+Trying to unregister ~p~n", [H,Accum]),
+ uninstall_loop(Accum, {exit, register})
+ end.
+
+%%-----------------------------------------------------------%
+%% function : uninstall
+%% Arguments: -
+%% Returns : ok | EXIT | EXCEPTION
+%% Effect : Remove data related to cosEvent from the IFR DB
+%%------------------------------------------------------------
+uninstall() ->
+ uninstall_loop(lists:reverse(?IDL_MODULES), ok).
+
+uninstall_loop([],ok) ->
+ ok;
+uninstall_loop([],{exit, register}) ->
+ exit({?MODULE, "oe_register failed"});
+uninstall_loop([],{exit, unregister}) ->
+ exit({?MODULE, "oe_unregister failed"});
+uninstall_loop([],{exit, both}) ->
+ exit({?MODULE, "oe_register and, for some of those already registered, oe_unregister failed"});
+uninstall_loop([H|T], Status) ->
+ case catch H:'oe_unregister'() of
+ ok ->
+ uninstall_loop(T, Status);
+ _ when Status == ok ->
+ ?write_ErrorMsg("Unable to unregister '~p'; propably already unregistered.
+You are adviced to confirm this.~n",[H]),
+ uninstall_loop(T, {exit, unregister});
+ _ ->
+ ?write_ErrorMsg("Unable to unregister '~p'; propably already unregistered.
+You are adviced to confirm this.~n",[H]),
+ uninstall_loop(T, {exit, both})
+ end.
+
+%%-----------------------------------------------------------%
+%% function : start/stop
+%% Arguments:
+%% Returns :
+%% Effect : Starts or stops the cosTime application.
+%%------------------------------------------------------------
+
+start() ->
+ application:start(cosEvent).
+stop() ->
+ application:stop(cosEvent).
+
+%%-----------------------------------------------------------%
+%% function : start
+%% Arguments: Type - see module application
+%% Arg - see module application
+%% Returns :
+%% Effect : Module callback for application
+%%------------------------------------------------------------
+
+start(_, _) ->
+ supervisor:start_link({local, ?SUPERVISOR_NAME}, cosEventApp, app_init).
+
+
+%%-----------------------------------------------------------%
+%% function : stop
+%% Arguments: Arg - see module application
+%% Returns :
+%% Effect : Module callback for application
+%%------------------------------------------------------------
+
+stop(_) ->
+ ok.
+
+%%-----------------------------------------------------------%
+%% function : start_channel
+%% Arguments: -
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+start_channel() ->
+ start_channel(?DEFAULT_OPTIONS).
+
+start_channel(Options) when is_list(Options) ->
+ ServerOpts = get_option(?SERVER, Options),
+ 'oe_CosEventComm_Channel':oe_create([Options, ServerOpts], ServerOpts);
+start_channel(Options) ->
+ orber:dbg("[~p] cosEventApp:start_channel(~p);~n"
+ "Options not correct.", [?LINE, Options], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+%%-----------------------------------------------------------%
+%% function : start_channel
+%% Arguments: -
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+start_channel_link() ->
+ start_channel_link(?DEFAULT_OPTIONS).
+
+start_channel_link(Options) when is_list(Options) ->
+ ServerOpts = get_option(?SERVER, Options),
+ 'oe_CosEventComm_Channel':oe_create_link([Options, ServerOpts], ServerOpts);
+start_channel_link(Options) ->
+ orber:dbg("[~p] cosEventApp:start_channel_link(~p);~n"
+ "Options not correct.", [?LINE, Options], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+%%-----------------------------------------------------------%
+%% function : stop_factory
+%% Arguments: ChannelObj
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+stop_channel(ChannelObj) ->
+ corba:dispose(ChannelObj).
+
+%%-----------------------------------------------------------%
+%% function : init
+%% Arguments:
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+
+%% Starting using create_factory/X
+init(own_init) ->
+ {ok,{?SUP_FLAG, [?SUP_CHILD]}};
+%% When starting as an application.
+init(app_init) ->
+ {ok,{?SUP_FLAG, [?SUP_CHILD]}}.
+
+%%-----------------------------------------------------------%
+%% function : create_link
+%% Arguments: Module - which Module to call
+%% Env/ArgList - ordinary oe_create arguments.
+%% Returns :
+%% Exception:
+%% Effect : Necessary since we want the supervisor to be a
+%% 'simple_one_for_one'. Otherwise, using for example,
+%% 'one_for_one', we have to call supervisor:delete_child
+%% to remove the childs startspecification from the
+%% supervisors internal state.
+%%------------------------------------------------------------
+create_link(Module, Env, ArgList) ->
+ Module:oe_create_link(Env, ArgList).
+
+
+%%-----------------------------------------------------------%
+%% function : get_option
+%% Arguments:
+%% Returns :
+%% Exception:
+%% Effect :
+%%------------------------------------------------------------
+get_option(Key, OptionList) ->
+ case lists:keysearch(Key, 1, OptionList) of
+ {value,{Key,Value}} ->
+ Value;
+ _ ->
+ case lists:keysearch(Key, 1, ?DEFAULT_OPTIONS) of
+ {value,{Key,Value}} ->
+ Value;
+ _->
+ {error, "Invalid option"}
+ end
+ end.
+
+%%-----------------------------------------------------------%
+%% function : type_check
+%% Arguments: Obj - objectrefernce to test.
+%% Mod - Module which contains typeID/0.
+%% Returns : 'ok' or raises exception.
+%% Effect :
+%%------------------------------------------------------------
+type_check(_Obj, _Mod, false) ->
+ ok;
+type_check(Obj, Mod, _) ->
+ case catch corba_object:is_a(Obj, Mod:typeID()) of
+ true ->
+ ok;
+ _ ->
+ orber:dbg("[~p] cosEventApp:type_check(~p) failed; Should be ~p",
+ [?LINE, Obj, Mod], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO})
+ end.
+
+%%-----------------------------------------------------------%
+%% function : disconnect
+%% Arguments: Module - one of the interfaces defined in CosEventComm.
+%% Function - the appropriate disconnect function.
+%% Object - the client object reference.
+%% Returns : ok
+%% Exception:
+%% Effect : If the process would try to diconnect itself it could
+%% result in a deadlock. Hence, we spawn a new process to do it.
+%%------------------------------------------------------------
+disconnect(Module, Function, Object) ->
+ spawn(cosEventApp, do_disconnect, [Module, Function, Object]),
+ ok.
+
+do_disconnect(Module, Function, Object) ->
+ catch Module:Function(Object),
+ ?DBG("Disconnect ~p:~p(..).~n", [Module, Function]),
+ ok.
+
+%%--------------- END OF MODULE ------------------------------
+
+
diff --git a/lib/cosEvent/src/cosEventApp.hrl b/lib/cosEvent/src/cosEventApp.hrl
new file mode 100644
index 0000000000..ef72277bd6
--- /dev/null
+++ b/lib/cosEvent/src/cosEventApp.hrl
@@ -0,0 +1,62 @@
+%%----------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : cosEventApp.hrl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+
+%%--------------- INCLUDES -----------------------------------
+%% External
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+
+-define(write_ErrorMsg(Txt, Arg),
+error_logger:error_msg("================ CosEvent =================~n"
+ Txt
+ "===========================================~n",
+ Arg)).
+
+
+-define(PULL_INTERVAL, pull_interval).
+-define(TYPECHECK, typecheck).
+-define(MAXEVENTS, maxEvents).
+-define(BLOCKING, blocking).
+-define(SERVER, server_options).
+-define(DEFAULT_OPTIONS, [{?PULL_INTERVAL, 20},
+ {?BLOCKING, true},
+ {?TYPECHECK, false},
+ {?MAXEVENTS, 300},
+ {?SERVER, []}]).
+
+-define(DEBUG_LEVEL, 3).
+
+-ifdef(debug).
+-define(DBG(F,A),
+ io:format("[~p (~p)] "++F,[?MODULE, ?LINE]++A)).
+-else.
+-define(DBG(F,A), ok).
+-endif.
+
+
+
+
+%%--------------- END OF MODULE ----------------------------------------
diff --git a/lib/cosEvent/src/cosEventApp.idl b/lib/cosEvent/src/cosEventApp.idl
new file mode 100644
index 0000000000..e5a134685f
--- /dev/null
+++ b/lib/cosEvent/src/cosEventApp.idl
@@ -0,0 +1,26 @@
+#ifndef _COS_EVENT_APP_IDL_
+#define _COS_EVENT_APP_IDL_
+
+#include<CosEventChannelAdmin.idl>
+
+
+module oe_CosEventComm {
+
+
+ interface Event {
+ oneway void send(in any event);
+ void send_sync(in any event);
+ };
+
+ interface Channel : CosEventChannelAdmin::EventChannel, Event {};
+
+ interface CAdmin : CosEventChannelAdmin::ConsumerAdmin, Event {};
+
+ interface PullerS : CosEventChannelAdmin::ProxyPullSupplier, Event {};
+
+ interface PusherS : CosEventChannelAdmin::ProxyPushSupplier, Event {};
+
+};
+
+
+#endif
diff --git a/lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl b/lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl
new file mode 100644
index 0000000000..976c6dbab5
--- /dev/null
+++ b/lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl
@@ -0,0 +1,233 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : oe_CosEventComm_CAdmin_impl.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module(oe_CosEventComm_CAdmin_impl).
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include_lib("orber/include/corba.hrl").
+-include("cosEventApp.hrl").
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+-export([init/1,
+ terminate/2,
+ code_change/3,
+ handle_info/2]).
+
+%% Exports from "CosEventChannelAdmin::ConsumerAdmin"
+-export([obtain_push_supplier/3,
+ obtain_pull_supplier/3]).
+
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+%% Exports from "oe_CosEventComm::Event"
+-export([send/3, send_sync/4]).
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+-record(state, {channel_pid, typecheck, maxevents, proxies = [],
+ server_options}).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+
+
+%%======================================================================
+%% External functions
+%%======================================================================
+%%----------------------------------------------------------------------
+%% Function : init/1
+%% Returns : {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% Description: Initiates the server
+%%----------------------------------------------------------------------
+init([ChannelPid, TypeCheck, MaxEvents, ServerOpts]) ->
+ process_flag(trap_exit, true),
+ {ok, #state{channel_pid = ChannelPid, typecheck = TypeCheck,
+ maxevents = MaxEvents, server_options = ServerOpts}}.
+
+%%----------------------------------------------------------------------
+%% Function : terminate/2
+%% Returns : any (ignored by gen_server)
+%% Description: Shutdown the server
+%%----------------------------------------------------------------------
+terminate(_Reason, _State) ->
+ ?DBG("Terminating ~p~n", [_Reason]),
+ ok.
+
+%%----------------------------------------------------------------------
+%% Function : code_change/3
+%% Returns : {ok, NewState}
+%% Description: Convert process state when code is changed
+%%----------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%---------------------------------------------------------------------%
+%% function : handle_info
+%% Arguments:
+%% Returns : {noreply, State} |
+%% {stop, Reason, State}
+%% Effect : Functions demanded by the gen_server module.
+%%----------------------------------------------------------------------
+handle_info({'EXIT', Pid, Reason}, #state{channel_pid = Pid} = State) ->
+ ?DBG("Parent Channel terminated ~p~n", [Reason]),
+ orber:dbg("[~p] oe_CosEventComm_PullerS_impl:handle_info(~p);~n"
+ "My Channel terminated and so will I which will cause"
+ " my children to do the same thing.",
+ [?LINE, Reason], ?DEBUG_LEVEL),
+ {stop, Reason, State};
+handle_info({'EXIT', Pid, _Reason}, #state{proxies = Proxies} = State) ->
+ %% A child terminated which is normal. Hence, no logging.
+ ?DBG("Probably a child terminated ~p~n", [_Reason]),
+ {noreply, State#state{proxies = lists:keydelete(Pid, 2, Proxies)}};
+handle_info(_Info, State) ->
+ ?DBG("Unknown Info ~p~n", [_Info]),
+ {noreply, State}.
+
+%%----------------------------------------------------------------------
+%% Function : obtain_push_supplier
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+obtain_push_supplier(_, _, #state{server_options = ServerOpts} = State) ->
+ case catch 'oe_CosEventComm_PusherS':oe_create_link([self(),
+ State#state.typecheck],
+ [{sup_child, true}|ServerOpts]) of
+ {ok, Pid, Proxy} ->
+ ?DBG("Started a new oe_CosEventComm_PusherS.~n", []),
+ {reply, Proxy, State#state{proxies = [{Proxy, Pid}|State#state.proxies]}};
+ Other ->
+ orber:dbg("[~p] oe_CosEventComm_CAdmin:obtain_push_supplier();~nError: ~p",
+ [?LINE, Other], ?DEBUG_LEVEL),
+ corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})
+ end.
+
+%%----------------------------------------------------------------------
+%% Function : obtain_pull_supplier
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+obtain_pull_supplier(_, _, #state{server_options = ServerOpts} = State) ->
+ case catch 'oe_CosEventComm_PullerS':oe_create_link([self(),
+ State#state.typecheck,
+ State#state.maxevents],
+ [{sup_child, true}|ServerOpts]) of
+ {ok, Pid, Proxy} ->
+ ?DBG("Started a new oe_CosEventComm_PullerS.~n", []),
+ {reply, Proxy, State#state{proxies = [{Proxy, Pid}|State#state.proxies]}};
+ Other ->
+ orber:dbg("[~p] oe_CosEventComm_CAdmin:obtain_pull_supplier();~nError: ~p",
+ [?LINE, Other], ?DEBUG_LEVEL),
+ corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})
+ end.
+
+
+%%----------------------------------------------------------------------
+%% Function : send
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+send(_, #state{proxies = Proxies} = State, Any) ->
+ ?DBG("Received Event ~p~n", [Any]),
+ case send_helper(Proxies, Any, [], false) of
+ ok ->
+ ?DBG("Received Event and forwarded it successfully.~n", []),
+ {noreply, State};
+ {error, Dropped} ->
+ ?DBG("Received Event but forward failed to: ~p~n", [Dropped]),
+ RemainingProxies = delete_proxies(Dropped, Proxies),
+ {noreply, State#state{proxies = RemainingProxies}}
+ end.
+
+%%----------------------------------------------------------------------
+%% Function : send_sync
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+send_sync(_, OE_From, #state{proxies = Proxies} = State, Any) ->
+ ?DBG("Received Event ~p~n", [Any]),
+ corba:reply(OE_From, ok),
+ case send_helper(Proxies, Any, [], true) of
+ ok ->
+ ?DBG("Received Event and forwarded (sync) it successfully.~n", []),
+ {noreply, State};
+ {error, Dropped} ->
+ ?DBG("Received Event but forward (sync) failed to: ~p~n", [Dropped]),
+ RemainingProxies = delete_proxies(Dropped, Proxies),
+ {noreply, State#state{proxies = RemainingProxies}}
+ end.
+
+
+%%======================================================================
+%% Internal functions
+%%======================================================================
+send_helper([], _, [], _) ->
+ ok;
+send_helper([], _, Dropped, _) ->
+ {error, Dropped};
+send_helper([{ObjRef, Pid}|T], Event, Dropped, false) ->
+ case catch 'oe_CosEventComm_Event':send(ObjRef, Event) of
+ ok ->
+ send_helper(T, Event, Dropped, false);
+ What ->
+ orber:dbg("[~p] oe_CosEventComm_CAdmin:send_helper(~p, ~p);~n"
+ "Bad return value ~p. Closing connection.",
+ [?LINE, ObjRef, Event, What], ?DEBUG_LEVEL),
+ send_helper(T, Event, [{ObjRef, Pid}|Dropped], false)
+ end;
+send_helper([{ObjRef, Pid}|T], Event, Dropped, Sync) ->
+ case catch 'oe_CosEventComm_Event':send_sync(ObjRef, Event) of
+ ok ->
+ send_helper(T, Event, Dropped, Sync);
+ What ->
+ orber:dbg("[~p] oe_CosEventComm_CAdmin:send_helper(~p, ~p);~n"
+ "Bad return value ~p. Closing connection.",
+ [?LINE, ObjRef, Event, What], ?DEBUG_LEVEL),
+ send_helper(T, Event, [{ObjRef, Pid}|Dropped], Sync)
+ end.
+
+delete_proxies([], RemainingProxies) ->
+ RemainingProxies;
+delete_proxies([{_,Pid}|T], Proxies) ->
+ Rest = lists:keydelete(Pid, 2, Proxies),
+ delete_proxies(T, Rest).
+
+%%======================================================================
+%% END OF MODULE
+%%======================================================================
diff --git a/lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl b/lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl
new file mode 100644
index 0000000000..531edaa0af
--- /dev/null
+++ b/lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl
@@ -0,0 +1,246 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : oe_CosEventComm_Channel_impl.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module(oe_CosEventComm_Channel_impl).
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include_lib("orber/include/corba.hrl").
+-include("cosEventApp.hrl").
+
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+%% Mandatory
+-export([init/1,
+ terminate/2,
+ code_change/3,
+ handle_info/2]).
+
+%% Exports from "CosEventChannelAdmin::EventChannel"
+-export([for_consumers/3,
+ for_suppliers/3,
+ destroy/3]).
+
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+%% Exports from "oe_CosEventComm::Event"
+-export([send/3, send_sync/4]).
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+-record(state, {typecheck, pull_interval, maxevents, blocking, cadmins = [],
+ server_options}).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+
+%%======================================================================
+%% External functions
+%%======================================================================
+%%----------------------------------------------------------------------
+%% Function : init/1
+%% Returns : {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% Description: Initiates the server
+%%----------------------------------------------------------------------
+init([Options, ServerOpts]) ->
+ process_flag(trap_exit, true),
+ PullI = cosEventApp:get_option(?PULL_INTERVAL, Options),
+ TC = cosEventApp:get_option(?TYPECHECK, Options),
+ Max = cosEventApp:get_option(?MAXEVENTS, Options),
+ Blocking = cosEventApp:get_option(?BLOCKING, Options),
+ {ok, #state{typecheck = TC, pull_interval = PullI, maxevents = Max,
+ blocking = Blocking, server_options = ServerOpts}}.
+
+%%----------------------------------------------------------------------
+%% Function : terminate/2
+%% Returns : any (ignored by gen_server)
+%% Description: Shutdown the server
+%%----------------------------------------------------------------------
+terminate(_Reason, _State) ->
+ ?DBG("Terminating ~p~n", [_Reason]),
+ ok.
+
+%%----------------------------------------------------------------------
+%% Function : code_change/3
+%% Returns : {ok, NewState}
+%% Description: Convert process state when code is changed
+%%----------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%---------------------------------------------------------------------%
+%% function : handle_info
+%% Arguments:
+%% Returns : {noreply, State} |
+%% {stop, Reason, State}
+%% Effect : Functions demanded by the gen_server module.
+%%----------------------------------------------------------------------
+handle_info({'EXIT', Pid, _Reason}, #state{cadmins = CAdmins} = State) ->
+ ?DBG("Probably a child terminated with Reason: ~p~n", [_Reason]),
+ {noreply, State#state{cadmins = lists:keydelete(Pid, 2, CAdmins)}};
+handle_info(_Info, State) ->
+ ?DBG("Unknown Info ~p~n", [_Info]),
+ {noreply, State}.
+
+
+%%----------------------------------------------------------------------
+%% Function : for_consumers
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+for_consumers(_, _, #state{server_options = ServerOpts} = State) ->
+ case catch 'oe_CosEventComm_CAdmin':oe_create_link([self(),
+ State#state.typecheck,
+ State#state.maxevents,
+ ServerOpts],
+ [{sup_child, true}|ServerOpts]) of
+ {ok, Pid, AdminCo} ->
+ ?DBG("Created a new oe_CosEventComm_CAdmin.~n", []),
+ {reply, AdminCo,
+ State#state{cadmins = [{AdminCo, Pid}|State#state.cadmins]}};
+ Other ->
+ orber:dbg("[~p] oe_CosEventComm_Channel:for_consumers(); Error: ~p",
+ [?LINE, Other], ?DEBUG_LEVEL),
+ corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})
+ end.
+
+%%----------------------------------------------------------------------
+%% Function : for_suppliers
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+for_suppliers(OE_This, _, #state{server_options = ServerOpts} = State) ->
+ case catch 'CosEventChannelAdmin_SupplierAdmin':oe_create_link([OE_This, self(),
+ State#state.typecheck,
+ State#state.pull_interval,
+ ServerOpts],
+ [{sup_child, true}|ServerOpts]) of
+ {ok, _Pid, AdminSu} ->
+ ?DBG("Created a new CosEventChannelAdmin_SupplierAdmin.~n", []),
+ {reply, AdminSu, State};
+ Other ->
+ orber:dbg("[~p] oe_CosEventComm_Channel:for_suppliers();~nError: ~p",
+ [?LINE, Other], ?DEBUG_LEVEL),
+ corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})
+ end.
+
+%%----------------------------------------------------------------------
+%% Function : destroy
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+destroy(_, _, State) ->
+ ?DBG("Destroy invoked.", []),
+ {stop, normal, ok, State}.
+
+%%----------------------------------------------------------------------
+%% Function : send
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+send(_OE_This, #state{cadmins = CAdmins} = State, Any) ->
+ ?DBG("Received Event ~p~n", [Any]),
+ case send_helper(CAdmins, Any, [], false) of
+ ok ->
+ ?DBG("Received Event and forwarded it successfully.~n", []),
+ {noreply, State};
+ {error, Dropped} ->
+ ?DBG("Received Event but forward failed for: ~p~n", [Dropped]),
+ RemainingAdmins = delete_cadmin(Dropped, CAdmins),
+ {noreply, State#state{cadmins = RemainingAdmins}}
+ end.
+
+%%----------------------------------------------------------------------
+%% Function : send_sync
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+send_sync(_OE_This, OE_From, #state{cadmins = CAdmins, blocking = BL} = State, Any) ->
+ ?DBG("Received Event ~p~n", [Any]),
+ corba:reply(OE_From, ok),
+ case send_helper(CAdmins, Any, [], BL) of
+ ok ->
+ ?DBG("Received Event and forwarded (sync) it successfully.~n", []),
+ {reply, ok, State};
+ {error, Dropped} ->
+ ?DBG("Received Event but forward (sync) failed for: ~p~n", [Dropped]),
+ RemainingAdmins = delete_cadmin(Dropped, CAdmins),
+ {reply, ok, State#state{cadmins = RemainingAdmins}}
+ end.
+
+
+%%======================================================================
+%% Internal functions
+%%======================================================================
+send_helper([], _, [], _) ->
+ ok;
+send_helper([], _, Dropped, _) ->
+ {error, Dropped};
+send_helper([{ObjRef, Pid}|T], Event, Dropped, false) ->
+ case catch 'oe_CosEventComm_CAdmin':send(ObjRef, Event) of
+ ok ->
+ send_helper(T, Event, Dropped, false);
+ What ->
+ orber:dbg("[~p] oe_CosEventComm_Channel:send_helper(~p, ~p);~n"
+ "Bad return value ~p. Closing connection.",
+ [?LINE, ObjRef, Event, What], ?DEBUG_LEVEL),
+ send_helper(T, Event, [{ObjRef, Pid}|Dropped], false)
+ end;
+send_helper([{ObjRef, Pid}|T], Event, Dropped, Sync) ->
+ case catch 'oe_CosEventComm_CAdmin':send_sync(ObjRef, Event) of
+ ok ->
+ send_helper(T, Event, Dropped, Sync);
+ What ->
+ orber:dbg("[~p] oe_CosEventComm_Channel:send_helper(~p, ~p);~n"
+ "Bad return value ~p. Closing connection.",
+ [?LINE, ObjRef, Event, What], ?DEBUG_LEVEL),
+ send_helper(T, Event, [{ObjRef, Pid}|Dropped], Sync)
+ end.
+
+
+delete_cadmin([], RemainingAdmins) ->
+ RemainingAdmins;
+delete_cadmin([{_,Pid}|T], CAdmins) ->
+ Rest = lists:keydelete(Pid, 2, CAdmins),
+ delete_cadmin(T, Rest).
+
+%%======================================================================
+%% END OF MODULE
+%%======================================================================
diff --git a/lib/cosEvent/src/oe_CosEventComm_PullerS_impl.erl b/lib/cosEvent/src/oe_CosEventComm_PullerS_impl.erl
new file mode 100644
index 0000000000..5f2733e72d
--- /dev/null
+++ b/lib/cosEvent/src/oe_CosEventComm_PullerS_impl.erl
@@ -0,0 +1,280 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : oe_CosEventComm_PullerS_impl.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module(oe_CosEventComm_PullerS_impl).
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include_lib("orber/include/corba.hrl").
+-include("CosEventChannelAdmin.hrl").
+-include("CosEventComm.hrl").
+-include("cosEventApp.hrl").
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+-export([init/1,
+ terminate/2,
+ code_change/3,
+ handle_info/2]).
+%% Exports from "CosEventChannelAdmin::ProxyPullSupplier"
+-export([connect_pull_consumer/4]).
+
+%% Exports from "CosEventComm::PullSupplier"
+-export([pull/3,
+ try_pull/3,
+ disconnect_pull_supplier/3]).
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+%% Exports from "oe_CosEventComm::Event
+-export([send/3, send_sync/4]).
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+-record(state, {admin_pid, client, db, respond_to, typecheck, maxevents}).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+
+%%======================================================================
+%% External functions
+%%======================================================================
+%%---------------------------------------------------------------------%
+%% Function : init/1
+%% Returns : {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% Description: Initiates the server
+%%----------------------------------------------------------------------
+init([AdminPid, TypeCheck, MaxEvents]) ->
+ process_flag(trap_exit, true),
+ {ok, #state{admin_pid = AdminPid,
+ db = ets:new(oe_ets, [set, private, ordered_set]),
+ typecheck = TypeCheck, maxevents = MaxEvents}}.
+
+%%---------------------------------------------------------------------%
+%% function : handle_info
+%% Arguments:
+%% Returns : {noreply, State} |
+%% {stop, Reason, State}
+%% Effect : Functions demanded by the gen_server module.
+%% The CosEvent specification states:
+%% "A nil object reference may be passed to the connect_pull_consumer operation;
+%% if so a channel cannot invoke a disconnect_pull_consumer operation on the
+%% consumer; the consumer may be disconnected from the channel without being
+%% informed."
+%% If we would invoke the disconnect_pull_consumer operation
+%% at the same time as the client tries to pull an event it
+%% would cause a dead-lock. We can solve this by spawning a process
+%% but as is the client will discover that the object no longer exists
+%% the next time it tries to pull an event.
+%%----------------------------------------------------------------------
+handle_info({'EXIT', Pid, Reason}, #state{admin_pid = Pid} = State) ->
+ orber:dbg("[~p] oe_CosEventComm_PullerS_impl:handle_info(~p);~n"
+ "My Admin terminated and so will I.",
+ [?LINE, Reason], ?DEBUG_LEVEL),
+ {stop, Reason, State};
+handle_info(_Info, State) ->
+ ?DBG("Unknown Info ~p~n", [_Info]),
+ {noreply, State}.
+
+%%---------------------------------------------------------------------%
+%% Function : terminate/2
+%% Returns : any (ignored by gen_server)
+%% Description: Shutdown the server
+%%----------------------------------------------------------------------
+terminate(_Reason, #state{client = undefined, respond_to = undefined, db = DB}) ->
+ ?DBG("Terminating ~p; no client connected and no pending pull's.~n", [_Reason]),
+ ets:delete(DB),
+ ok;
+terminate(_Reason, #state{client = undefined, respond_to = ReplyTo, db = DB}) ->
+ ?DBG("Terminating ~p; no client connected but a pending pull.~n", [_Reason]),
+ corba:reply(ReplyTo, {'EXCEPTION', #'CosEventComm_Disconnected'{}}),
+ ets:delete(DB),
+ ok;
+terminate(_Reason, #state{client = Client, respond_to = undefined, db = DB}) ->
+ ?DBG("Terminating ~p; no pending pull~n", [_Reason]),
+ cosEventApp:disconnect('CosEventComm_PullConsumer',
+ disconnect_pull_consumer, Client),
+ ets:delete(DB),
+ ok;
+terminate(_Reason, #state{client = Client, respond_to = ReplyTo, db = DB}) ->
+ ?DBG("Terminating ~p; pending pull~n", [_Reason]),
+ corba:reply(ReplyTo, {'EXCEPTION', #'CosEventComm_Disconnected'{}}),
+ cosEventApp:disconnect('CosEventComm_PullConsumer',
+ disconnect_pull_consumer, Client),
+ ets:delete(DB),
+ ok.
+
+%%---------------------------------------------------------------------%
+%% Function : code_change/3
+%% Returns : {ok, NewState}
+%% Description: Convert process state when code is changed
+%%----------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%---------------------------------------------------------------------%
+%% Function : connect_pull_consumer
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+connect_pull_consumer(_OE_This, _OE_From, #state{client = undefined,
+ typecheck = TypeCheck} = State,
+ NewClient) ->
+ case corba_object:is_nil(NewClient) of
+ true ->
+ ?DBG("A NIL client supplied.~n", []),
+ {reply, ok, State};
+ false ->
+ cosEventApp:type_check(NewClient, 'CosEventComm_PullConsumer', TypeCheck),
+ ?DBG("Connected to client.~n", []),
+ {reply, ok, State#state{client = NewClient}}
+ end;
+connect_pull_consumer(_, _, _, _) ->
+ corba:raise(#'CosEventChannelAdmin_AlreadyConnected'{}).
+
+
+%%---------------------------------------------------------------------%
+%% Function : pull
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+pull(_OE_This, OE_From, State) ->
+ case get_event(State#state.db) of
+ false ->
+ ?DBG("pull invoked but no event stored; put the client on hold.~n", []),
+ {noreply, State#state{respond_to = OE_From}};
+ Event ->
+ ?DBG("pull invoked and returned: ~p~n", [Event]),
+ {reply, Event, State}
+ end.
+
+%%---------------------------------------------------------------------%
+%% Function : try_pull
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+try_pull(_OE_This, _OE_From, State) ->
+ case get_event(State#state.db) of
+ false ->
+ ?DBG("try_pull invoked but no event stored.~n", []),
+ {reply, {any:create(orber_tc:long(), 0), false}, State};
+ Event ->
+ ?DBG("try_pull invoked and returned: ~p~n", [Event]),
+ {reply, {Event, true}, State}
+ end.
+
+%%---------------------------------------------------------------------%
+%% Function : disconnect_pull_supplier
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+disconnect_pull_supplier(_OE_This, _OE_From, State) ->
+ ?DBG("Disconnect invoked ~p ~n", [State]),
+ {stop, normal, ok, State#state{client = undefined}}.
+
+
+%%======================================================================
+%% Internal functions
+%%======================================================================
+%%---------------------------------------------------------------------%
+%% Function : send
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+send(_OE_This, #state{respond_to = undefined} = State, Any) ->
+ ?DBG("Received event ~p and stored it.~n", [Any]),
+ store_event(State#state.db, State#state.maxevents, Any),
+ {noreply, State};
+send(_OE_This, State, Any) ->
+ ?DBG("Received event ~p and sent it to pending client.~n", [Any]),
+ corba:reply(State#state.respond_to, Any),
+ {noreply, State#state{respond_to = undefined}}.
+
+%%---------------------------------------------------------------------%
+%% Function : send_sync
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+send_sync(_OE_This, _OE_From, #state{respond_to = undefined} = State, Any) ->
+ ?DBG("Received event ~p and stored it (sync).~n", [Any]),
+ store_event(State#state.db, State#state.maxevents, Any),
+ {reply, ok, State};
+send_sync(_OE_This, _OE_From, State, Any) ->
+ ?DBG("Received event ~p and sent it to pending client (sync).~n", [Any]),
+ corba:reply(State#state.respond_to, Any),
+ {reply, ok, State#state{respond_to = undefined}}.
+
+
+%%---------------------------------------------------------------------%
+%% Function : store_event
+%% Arguments : DB - ets reference
+%% Event - CORBA::Any
+%% Returns : true
+%% Description: Insert the event in FIFO order.
+%%----------------------------------------------------------------------
+store_event(DB, Max, Event) ->
+ case ets:info(DB, size) of
+ CurrentSize when CurrentSize < Max ->
+ ets:insert(DB, {now(), Event});
+ _ ->
+ orber:dbg("[~p] oe_CosEventComm_PullerS:store_event(~p); DB full drop event.",
+ [?LINE, Event], ?DEBUG_LEVEL),
+ true
+ end.
+
+%%---------------------------------------------------------------------%
+%% Function : get_event
+%% Arguments : DB - ets reference
+%% Event - CORBA::Any
+%% Returns : false | Event (CORBA::Any)
+%% Description: Lookup event in FIFO order; return false if no event exists.
+%%----------------------------------------------------------------------
+get_event(DB) ->
+ case ets:first(DB) of
+ '$end_of_table' ->
+ false;
+ Key ->
+ [{_, Event}] = ets:lookup(DB, Key),
+ ets:delete(DB, Key),
+ Event
+ end.
+
+%%======================================================================
+%% END OF MODULE
+%%======================================================================
diff --git a/lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl b/lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl
new file mode 100644
index 0000000000..c64b01ea1d
--- /dev/null
+++ b/lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl
@@ -0,0 +1,217 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : oe_CosEventComm_PusherS_impl.erl
+%% Description :
+%%
+%%----------------------------------------------------------------------
+-module(oe_CosEventComm_PusherS_impl).
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+-include_lib("orber/include/corba.hrl").
+-include("CosEventChannelAdmin.hrl").
+-include("CosEventComm.hrl").
+-include("cosEventApp.hrl").
+
+
+%%----------------------------------------------------------------------
+%% External exports
+%%----------------------------------------------------------------------
+-export([init/1,
+ terminate/2,
+ code_change/3,
+ handle_info/2]).
+
+%% Exports from "CosEventChannelAdmin::ProxyPushSupplier"
+-export([connect_push_consumer/4]).
+
+%% Exports from "CosEventComm::PushSupplier"
+-export([disconnect_push_supplier/3]).
+
+
+%%----------------------------------------------------------------------
+%% Internal exports
+%%----------------------------------------------------------------------
+%% Exports from "oe_CosEventComm::Event"
+-export([send/3, send_sync/4]).
+
+%%----------------------------------------------------------------------
+%% Records
+%%----------------------------------------------------------------------
+-record(state, {admin_pid, client, typecheck}).
+
+%%----------------------------------------------------------------------
+%% Macros
+%%----------------------------------------------------------------------
+
+%%======================================================================
+%% External functions
+%%======================================================================
+%%----------------------------------------------------------------------
+%% Function : init/1
+%% Returns : {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% Description: Initiates the server
+%%----------------------------------------------------------------------
+init([AdminPid, TypeCheck]) ->
+ process_flag(trap_exit, true),
+ {ok, #state{admin_pid = AdminPid, typecheck = TypeCheck}}.
+
+%%----------------------------------------------------------------------
+%% Function : terminate/2
+%% Returns : any (ignored by gen_server)
+%% Description: Shutdown the server
+%%----------------------------------------------------------------------
+terminate(_Reason, #state{client = undefined}) ->
+ ?DBG("Terminating ~p; no client connected.~n", [_Reason]),
+ ok;
+terminate(_Reason, #state{client = Client} = _State) ->
+ ?DBG("Terminating ~p~n", [_Reason]),
+ cosEventApp:disconnect('CosEventComm_PushConsumer',
+ disconnect_push_consumer, Client),
+ ok.
+
+%%----------------------------------------------------------------------
+%% Function : code_change/3
+%% Returns : {ok, NewState}
+%% Description: Convert process state when code is changed
+%%----------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%---------------------------------------------------------------------%
+%% function : handle_info
+%% Arguments:
+%% Returns : {noreply, State} |
+%% {stop, Reason, State}
+%% Effect : Functions demanded by the gen_server module.
+%%----------------------------------------------------------------------
+handle_info({'EXIT', Pid, Reason}, #state{admin_pid = Pid} = State) ->
+ ?DBG("Parent Admin terminated ~p~n", [Reason]),
+ orber:dbg("[~p] oe_CosEventComm_PusherS_impl:handle_info(~p);~n"
+ "My Admin terminated and so will I.",
+ [?LINE, Reason], ?DEBUG_LEVEL),
+ {stop, Reason, State};
+handle_info(_Info, State) ->
+ ?DBG("Unknown Info ~p~n", [_Info]),
+ {noreply, State}.
+
+%%---------------------------------------------------------------------%
+%% Function : connect_push_consumer
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+connect_push_consumer(_OE_This, _, #state{client = undefined,
+ typecheck = TypeCheck} = State, NewClient) ->
+ case corba_object:is_nil(NewClient) of
+ true ->
+ orber:dbg("[~p] oe_CosEventComm_PusherS_impl:connect_push_consumer(..);~n"
+ "Supplied a NIL reference which is not allowed.",
+ [?LINE], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status = ?COMPLETED_NO});
+ false ->
+ cosEventApp:type_check(NewClient, 'CosEventComm_PushConsumer', TypeCheck),
+ ?DBG("Connected to client.~n", []),
+ {reply, ok, State#state{client = NewClient}}
+ end;
+connect_push_consumer(_, _, _, _) ->
+ corba:raise(#'CosEventChannelAdmin_AlreadyConnected'{}).
+
+
+%%---------------------------------------------------------------------%
+%% Function : disconnect_push_supplier
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+disconnect_push_supplier(_OE_This, _, State) ->
+ ?DBG("Disconnect invoked ~p ~n", [State]),
+ {stop, normal, ok, State#state{client = undefined}}.
+
+%%======================================================================
+%% Internal functions
+%%======================================================================
+%%----------------------------------------------------------------------
+%% Function : send
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+send(_OE_This, #state{client = undefined} = State, _Any) ->
+ %% No consumer connected.
+ ?DBG("Received event ~p but have no client.~n", [_Any]),
+ {noreply, State};
+send(_OE_This, #state{client = Client} = State, Any) ->
+ %% Push Data
+ case catch 'CosEventComm_PushConsumer':push(Client, Any) of
+ ok ->
+ ?DBG("Received event ~p and delivered it client.~n", [Any]),
+ {noreply, State};
+ {'EXCEPTION', #'CosEventComm_Disconnected'{}} ->
+ ?DBG("Received event ~p but failed to deliver it since the client claims we are disconnected.~n", [Any]),
+ {stop, normal, State#state{client = undefined}};
+ Other ->
+ ?DBG("Received event ~p but failed to deliver it to client.~n", [Any]),
+ orber:dbg("[~p] oe_CosEventComm_PusherS_impl:send(~p);~n"
+ "My Client behaves badly, returned ~p, so I will terminate.",
+ [?LINE, Any, Other], ?DEBUG_LEVEL),
+ {stop, normal, State}
+ end.
+
+
+%%----------------------------------------------------------------------
+%% Function : send_sync
+%% Arguments :
+%% Returns :
+%% Description:
+%%----------------------------------------------------------------------
+send_sync(_OE_This, _OE_From, #state{client = undefined} = State, _Any) ->
+ %% No consumer connected.
+ ?DBG("Received event ~p but have no client.~n", [_Any]),
+ {reply, ok, State};
+send_sync(_OE_This, OE_From, #state{client = Client} = State, Any) ->
+ corba:reply(OE_From, ok),
+ %% Push Data
+ case catch 'CosEventComm_PushConsumer':push(Client, Any) of
+ ok ->
+ ?DBG("Received event ~p and delivered (sync) it client.~n", [Any]),
+ {noreply, State};
+ {'EXCEPTION', #'CosEventComm_Disconnected'{}} ->
+ ?DBG("Received event ~p but failed to deliver (sync) it since the client claims we are disconnected.~n", [Any]),
+ {stop, normal, State#state{client = undefined}};
+ Other ->
+ ?DBG("Received event ~p but failed to deliver (sync) it to client.~n", [Any]),
+ orber:dbg("[~p] oe_CosEventComm_PusherS_impl:send_sync(~p);~n"
+ "My Client behaves badly, returned ~p, so I will terminate.",
+ [?LINE, Any, Other], ?DEBUG_LEVEL),
+ {stop, normal, State}
+ end.
+
+
+%%======================================================================
+%% END OF MODULE
+%%======================================================================
+
diff --git a/lib/cosEvent/vsn.mk b/lib/cosEvent/vsn.mk
new file mode 100644
index 0000000000..953e5fc8c9
--- /dev/null
+++ b/lib/cosEvent/vsn.mk
@@ -0,0 +1,10 @@
+
+COSEVENT_VSN = 2.1.7
+
+TICKETS = OTP-8201
+
+TICKETS_2.1.6 = OTP-7987
+
+TICKETS_2.1.5 = OTP-7837
+
+TICKETS_2.1.4 = OTP-7595