summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Mesnier <mesnier_p@ociweb.com>2007-01-10 21:55:19 +0000
committerPhil Mesnier <mesnier_p@ociweb.com>2007-01-10 21:55:19 +0000
commitbce519b367e0c160bab864fca70c546af3006a8e (patch)
tree1e8d92d066e04f2c5000865e87f71d79d9dbdf30
parent4693540bb6b8aed80e89e14e46f97e247fd96593 (diff)
downloadATCD-bce519b367e0c160bab864fca70c546af3006a8e.tar.gz
Wed Jan 10 21:47:39 UTC 2007 Phil Mesnier <mesnier_p@ociweb.com>
-rw-r--r--TAO/ChangeLog24
-rw-r--r--TAO/docs/INS.html67
-rw-r--r--TAO/docs/TAO-tutorials.html8
-rw-r--r--TAO/docs/index.html32
-rw-r--r--TAO/docs/interop-naming.eps29808
-rw-r--r--TAO/docs/interop-naming.pngbin0 -> 42350 bytes
-rw-r--r--TAO/docs/redball.gifbin0 -> 326 bytes
-rw-r--r--TAO/docs/space.gifbin0 -> 116 bytes
8 files changed, 29891 insertions, 48 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 3fca9df796a..44ebb1a61a9 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,27 @@
+Wed Jan 10 21:47:39 UTC 2007 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * docs/INS.html:
+ Updated documentation relative to corbaloc strings to include
+ IPv6 details. Also generally freshened the document by removing
+ references to obsoleted iioploc strings and added more
+ information on using the IOR Table. Localized the references
+ graphic images to avoid the need for an internet connection to
+ see the full document.
+
+ * docs/TAO-tutorials.html:
+ * docs/index.html:
+ Localized the references graphic images to avoid the need for an
+ internet connection to see the full document.
+
+ * docs/space.gif:
+ * docs/redball.gif:
+ * interop-naming.png:
+ * interop-naming.eps:
+
+ The image files, these used to be hosted only at wustl,
+ requiring a network connection in order to see the graphics in
+ the documentation.
+
Wed Jan 10 21:28:19 UTC 2007 Jeff Parsons <j.parsons@vanderbilt.edu>
* NEWS:
diff --git a/TAO/docs/INS.html b/TAO/docs/INS.html
index 351524ef62b..f02a55c860e 100644
--- a/TAO/docs/INS.html
+++ b/TAO/docs/INS.html
@@ -37,13 +37,6 @@ for locating a service: <P>
<LI>Multicast to Service <p>
</OL>
-TAO uses the ACE_Hash_Map_Manager
-to keep track of the ObjectID:IOR mappings specified on the
-command-line. The IOR could be in <CODE>IOR</CODE>, <CODE>iiop</CODE>,
-or <CODE><A href="#corbaloc">corbaloc</A></CODE> format. If the ORB fails to resolve the IOR
-using the command-line parameters or the default settings, it uses UDP
-multicast to resolve the service. <P>
-
The Naming Service process acts as an IIOP Agent to respond with the
IOR for the given service name. If the service being resolved is the
Naming Service or the Trading Service, TAO checks the appropriate <A
@@ -53,17 +46,15 @@ multicast to obtain the appropriate port number or IOR.<p>
The following diagram illustrates the order in which these various
components interact. <P>
-<img width=200 height=5
-src="http://www.cs.wustl.edu/~schmidt/gifs/space.gif"><img width=723
-height=529
-src="http://www.cs.wustl.edu/~schmidt/gifs/interop-naming.gif"><p>
+<img width=200 height=5 src="space.gif">
+<img width=723 height=529 src="interop-naming.png"><p>
<HR align=left width=80% ><P>
<H4>ORB Parameters Used for Configuration</H4>
<A NAME="oir"></A>
<DL>
-<DT> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif">
+<DT> <img alt="o" src="redball.gif">
<B><FONT COLOR="#000000">-ORBInitRef :</FONT> </B>
The ORB initial reference argument allows specification of an
arbitrary object reference for an initial service. The format is :
@@ -79,7 +70,7 @@ The ORB initial reference argument allows specification of an
by <CODE>CORBA::ORB::string_to_object</CODE>.<p>
<A NAME="odir"></A>
-<DT> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"><B><FONT COLOR="#000000">
+<DT> <img alt="o" src="redball.gif"><B><FONT COLOR="#000000">
-ORBDefaultInitRef :</FONT></B></LI>
The ORB default initial reference argument assists in resolution of
initial references not explicitly specified with
@@ -92,8 +83,8 @@ The ORB default initial reference argument assists in resolution of
A call to <CODE>resolve_initial_references ("NameService")</CODE> with this
argument results in a new multiple profile URL equivalent to the following: <P>
- <CODE>iiop://tango.cs.wustl.edu:8989/NameService</CODE> <br>
- <CODE>iiop://merengue.cs.wustl.edu:9999/NameService</CODE> <p>
+ <CODE>corbaloc::tango.cs.wustl.edu:8989/NameService</CODE> <br>
+ <CODE>corbaloc::merengue.cs.wustl.edu:9999/NameService</CODE> <p>
The URL is passed to <CODE>CORBA::ORB::string_to_object</CODE> to obtain the
initial reference for the service.
@@ -102,13 +93,13 @@ The ORB default initial reference argument assists in resolution of
<HR align=left width=80% ><P>
<H4><A NAME="corbaloc">corbaloc: IOR format</A></H4>
-The <CODE>CORBA::ORB::string_to_object</CODE> now understands the <CODE>corbaloc:</CODE>
-format IORs (previously called iioploc). These are user-friendly multiple end-point IORs. For
+The <CODE>CORBA::ORB::string_to_object</CODE> parses the <CODE>corbaloc:</CODE>
+format IORs. These are user-friendly multiple end-point IORs. For
example - <p>
- <img width=50 height=5
-src="http://www.cs.wustl.edu/~schmidt/gifs/space.gif">corbaloc:iiop:tango.cs.wustl.edu:9999,iiop:merengue.cs.wustl.edu:9999/SimpleKey <p>
+ <img width=50 height=5 src="space.gif">
+corbaloc:iiop:tango.cs.wustl.edu:9999,iiop:merengue.cs.wustl.edu:9999/SimpleKey <p>
-Each of the end-points can use any transport protocols ex: iiop, rir.
+Each of the endpoints can use any transport protocols ex: iiop, rir.
The corbaloc:rir URL is defined to allow access to the ORB's
configured initial references through an URL. Each of the end-points
is converted into a Profile. These profiles are used to construct the
@@ -141,14 +132,34 @@ an unresolvable hostname.
<HR align=left width=80% ><P>
-<!--<EM>
-Visitor #1 since Thu Apr 15 22:33:36 1999
-
-from merengue.cs.wustl.edu
-
-<EM><br> -->
-<I> Last modified Tue Apr 20 14:47:21 CDT 1999 </I>
-
+<H4><A NAME="IORTable">corbaloc: server setup and the IORTable</A></H4>
+<p>
+The key name used in a corbaloc string may be a stringified object ID associated with some POA, or it might be a human-readable hint to be used to look up the fully qualified object reference.
+<p>
+Stringified ObjectIds are most easily generated by using the <code>-ORBObjRefStyle url</code> command line option. However, these are quite cumbersome to work with For example:
+<p><code>corbaloc:iiop:1.2@phil.ociweb.com:32948/%14%01%0f%00RST%a5B%a5Eb%c2%04%00%00%00%00%00%01%00%00%00%01%00%00%00</code>
+<p>The advantage to using such strings is that server applications need no modifications in order to use such IORs. The disadvantage is that there is no way to attach tagged components to profiles presented as corbaloc strings.
+<p>Server applications can get around both of the problem of the unwieldy stringified object ID and the lack of tagged components by using the IOR_Table service. The IORTable service is used inside server applications to associate object key strings with full IORs.
+<p>Programs wishing to use the IOR Table must do the following.
+<ul>
+<li> include the header.
+<p><code>#include "tao/IORTable/IORTable.h"</code>
+<li>get a reference to the table.
+<pre>
+ CORBA::Object_var table_object =
+ orb->resolve_initial_references ("IORTable");
+
+ IORTable::Table_var adapter =
+ IORTable::Table::_narrow (table_object.in ());
+</pre>
+<li>bind object references into the table. IORs are bound as strings.
+<pre>
+ CORBA::String_var ior = orb->object_to_string(myobjref.in());
+ adapter->bind ("MyObj", ior.in());
+</pre>
+</ul>
+
+Since the object references are stored in the IOR table as strings, they do not have to served by this application. References in the table are passed back to the client by raising a LOCATION_FORWARD exception which then uses the full IOR to connect to the actual server.
</BODY>
</HTML>
diff --git a/TAO/docs/TAO-tutorials.html b/TAO/docs/TAO-tutorials.html
index 2b680c10fba..63b19cf15cd 100644
--- a/TAO/docs/TAO-tutorials.html
+++ b/TAO/docs/TAO-tutorials.html
@@ -10,22 +10,22 @@
The <A HREF="http://www.cs.wustl.edu/~schmidt/ACE-members.html">TAO
development team</A> is creating a set of tutorials to help TAO
newcomers learn how to use the ORB effectively. The following
- links provide further information on this topic.
+ links provide further information on this topic.
<DL>
<DL>
-<DT> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <A
+<DT> <img alt="o" src="redball.gif"> <A
HREF="tutorials/Quoter/">Quoter
tutorial</A> <P>
-<DT> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> There
+<DT> <img alt="o" src="redball.gif"> There
are several <A HREF="http://www.theaceorb.com/downloads/1.4a/index.html">documents</A> from <A
HREF="http://www.theaceorb.com/">OCI</A>'s <A
HREF="http://www.theaceorb.com/product/">TAO
Developer's Guide</A> that describe the process of building and running a simple client and
server using TAO and MPC. <P>
- <DT> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif">
+ <DT> <img alt="o" src="redball.gif">
Additional tutorials are available in the <A
HREF="http://www.theaceorb.com/product/">TAO
Developer's Guide</A> available from <A
diff --git a/TAO/docs/index.html b/TAO/docs/index.html
index b7cf1b75376..3823b606983 100644
--- a/TAO/docs/index.html
+++ b/TAO/docs/index.html
@@ -19,40 +19,40 @@ HREF="http://www.omg.org/library/c2indx.html">CORBA</a> Documentation</h3>
<table cellpadding="10" cellspacing="8" border="10">
<tr>
<td><font SIZE="+1"><dl>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> TAO <a HREF="http://www.cs.wustl.edu/~schmidt/corba-research-realtime.html">Technical
+ <dt> <img alt="o" src="redball.gif"> TAO <a HREF="http://www.cs.wustl.edu/~schmidt/corba-research-realtime.html">Technical
Papers</a> </dt><P>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> TAO <a HREF="http://www.cs.wustl.edu/~schmidt/TAO/index.html">Tutorials</a></dt><P>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> TAO <a HREF="releasenotes/index.html">Release Notes</a> </dt><P>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <A HREF="http://www.theaceorb.com">OCI</A> TAO <a HREF="http://www.theaceorb.com/faq/">FAQ</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> TAO <a HREF="http://www.cs.wustl.edu/~schmidt/TAO/index.html">Tutorials</a></dt><P>
+ <dt> <img alt="o" src="redball.gif"> TAO <a HREF="releasenotes/index.html">Release Notes</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> <A HREF="http://www.theaceorb.com">OCI</A> TAO <a HREF="http://www.theaceorb.com/faq/">FAQ</a> </dt><P>
</dl>
</td>
<td><font SIZE="+1"><dl>
- <DT> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <A
+ <DT> <img alt="o" src="redball.gif"> <A
HREF="http://www.dre.vanderbilt.edu/Doxygen/">Doxygen Documentation</A> <P>
<dt> <img alt="o"
- src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <a HREF="components.html">ORB Configuration & Tuning</a> </dt><P>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> TAO <a HREF="compiler.html">IDL Compiler Options</a> </dt><P>
+ src="redball.gif"> <a HREF="components.html">ORB Configuration & Tuning</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> TAO <a HREF="compiler.html">IDL Compiler Options</a> </dt><P>
<dt> <img alt="o"
- src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> TAO <a HREF="libraries.html">Library Subsets</a></dt><p>
+ src="redball.gif"> TAO <a HREF="libraries.html">Library Subsets</a></dt><p>
</dl>
</td>
<td><font SIZE="+1"><dl>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <a HREF="orbsvcs.html">ORB Services Documentation</a> </dt><P>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <a HREF="Tags.html">Tags and Magic Numbers</a> </dt><P>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> TAO <a href="rtcorba/index.html">Real-Time CORBA</a> </dt><P>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <a HREF="INS.html">Interoperable Naming Service</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> <a HREF="orbsvcs.html">ORB Services Documentation</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> <a HREF="Tags.html">Tags and Magic Numbers</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> TAO <a href="rtcorba/index.html">Real-Time CORBA</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> <a HREF="INS.html">Interoperable Naming Service</a> </dt><P>
</dl>
</font>
</td>
<td><font SIZE="+1"><dl>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <a HREF="implrepo/index.html">Implementation Repository</a> </dt><P>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> TAO <a href="exceptions.html">Exception Handling</a></dt><p>
- <dt> <img alt="o" src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <a HREF="pluggable_protocols/index.html">Writing Pluggable Protocols</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> <a HREF="implrepo/index.html">Implementation Repository</a> </dt><P>
+ <dt> <img alt="o" src="redball.gif"> TAO <a href="exceptions.html">Exception Handling</a></dt><p>
+ <dt> <img alt="o" src="redball.gif"> <a HREF="pluggable_protocols/index.html">Writing Pluggable Protocols</a> </dt><P>
<dt> <img alt="o"
- src="http://www.cs.wustl.edu/~schmidt/gifs/misc/redball.gif"> <a HREF="es_configs.html">Event Service Configurations</a> </dt><P>
+ src="redball.gif"> <a HREF="es_configs.html">Event Service Configurations</a> </dt><P>
</dl>
</font>
diff --git a/TAO/docs/interop-naming.eps b/TAO/docs/interop-naming.eps
new file mode 100644
index 00000000000..dd81db8c528
--- /dev/null
+++ b/TAO/docs/interop-naming.eps
@@ -0,0 +1,29808 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 28 32 747 560
+%%Title: interop-naming
+%%Creator: Canvas
+%%CreationDate: 4161999
+%%DocumentResources: procset Deneba_CanvasCustomColors
+%%+ procset Deneba_CanvasGraphics
+%%DocumentFonts: TimesNewRoman4-1
+%%+ Arial1-1
+%%+ Arial1-3
+%%+ Arial1
+%%DocumentSuppliedResources: procset Deneba_CanvasCustomColors
+%%+ procset Deneba_CanvasGraphics
+%%+ font TimesNewRoman4-1
+%%+ font Arial1-1
+%%+ font Arial1-3
+%%+ font Arial1
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Copyright: (C) 1994 Deneba Systems. All Rights Reserved
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset Deneba_CanvasCustomColors
+%%Title: Deneba custom colors
+%%Version: 1.0
+%%CreationDate: 10/1/92
+%%Copyright: (C) 1994 Deneba Systems. All Rights Reserved
+/setcustomcolor where {pop true}{false}ifelse
+dup{save exch}if
+dup not{
+userdict /Deneba_CanvasCustomColors 15 dict put
+Deneba_CanvasCustomColors begin
+/initialize
+{
+Deneba_CanvasCustomColors
+{dup xcheck{bind}if pop pop}forall
+Deneba_CanvasCustomColors begin
+}def
+/terminate
+{currentdict Deneba_CanvasCustomColors eq{end}if}def
+
+/_tcust 5 array def
+
+/findcmykcustomcolor
+{Deneba_CanvasCustomColors begin _tcust astore end}def
+
+/setcustomcolor
+{
+exch
+aload pop pop
+4{4 index mul 4 1 roll}repeat
+5 -1 roll pop
+/setcmykcolor where{pop setcmykcolor}
+{
+4 1 roll 3{3 index add 1.0 exch sub 0.0 2 copy lt{exch}if pop 1.0 2 copy gt{exch}if pop 3 1 roll}repeat setrgbcolor pop
+}ifelse
+}def
+
+/setoverprint where {pop}
+{/setoverprint
+{pop}def}ifelse
+
+/currentoverprint where {pop}
+{/currentoverprint
+{false}def}ifelse
+
+/setseparationgray
+{setgray}def
+
+/setcmykoverprint
+{ 4{dup -1 eq{pop 0.0}if 4 1 roll}repeat
+/setcmykcolor where{pop setcmykcolor}
+{
+4 1 roll 3{3 index add 1.0 exch sub 0.0 2 copy lt{exch}if pop 1.0 2 copy gt{exch}if pop 3 1 roll}repeat setrgbcolor pop
+}ifelse
+}def
+
+/customcolorimage
+{pop image}def
+
+/separationimage
+{image}def
+
+end
+}if
+{restore}if
+%%EndResource
+%%BeginResource: procset Deneba_CanvasGraphics
+%%Title: Deneba standard graphics
+%%Version: 1.0
+%%CreationDate: 10/1/92
+%%Copyright: (C) 1994 Deneba Systems. All Rights Reserved
+userdict /Deneba_CanvasGraphics 300 dict put
+Deneba_CanvasGraphics begin
+/initialize
+{
+Deneba_CanvasGraphics
+{dup xcheck{bind}if pop pop}forall
+Deneba_CanvasGraphics begin
+
+currentscreen
+/_screenProc xdf
+/_screenAng xdf
+/_screenFreq xdf
+
+/setstrokeadjust where{pop true}{false}ifelse
+{
+/sa /setstrokeadjust load def
+/li /lineto load def
+/mt /moveto load def
+/ct /curveto load def
+/lh { currentpoint exch pop lineto}bind def
+/lv { currentpoint pop exch lineto}bind def
+}
+{
+/sa{{currentdict StrokeAdjustDict ne{StrokeAdjustDict begin}if}{ currentdict StrokeAdjustDict eq{end}if}ifelse} bind def
+userdict /StrokeAdjustDict 10 dict put
+StrokeAdjustDict begin
+/_xl
+{
+transform
+.25 sub round .25 add exch
+.25 sub round .25 add exch
+itransform
+}bind def
+
+/li{ _xl lineto}bind def
+/mt{ _xl moveto}bind def
+/ct{ _xl curveto}bind def
+/lh { dup _xl pop currentpoint exch pop lineto}bind def
+/lv { dup _xl pop currentpoint pop exch lineto}bind def
+/rp
+{
+_xl/cv_b xdf/cv_r xdf
+_xl/cv_t xdf/cv_l xdf
+cv_l cv_t moveto
+cv_r cv_t lineto
+cv_r cv_b lineto
+cv_l cv_b lineto
+closepath
+} bind def
+
+end
+
+}ifelse
+
+}def
+
+/terminate
+{
+userdict /StrokeAdjustDict known {currentdict StrokeAdjustDict eq{end}if}if
+currentdict Deneba_CanvasGraphics eq{end}if
+}def
+/_cvmtx matrix def
+/_rotlevel 0 def
+/_rotmatrix [ 5{matrix}repeat ] def
+/_txtmtx matrix def
+/_initmtx matrix def
+/xdf{exch def}def
+/min{2 copy gt{exch}if pop}def
+/max{2 copy lt{exch}if pop}def
+/CVvec 256 array def
+/T true def
+/F false def
+
+/_screens null def
+/_numscreens 0 def
+/_screenProc null def
+/_screenAng 0 def
+/_screenFreq 60 def
+/_id 0 def
+/_encodindex 0 def
+/_encodArr 10 array def
+/_fd 0 def
+/_textSave null def
+/_letterSpace 0 def
+/_spaceXtra 0 def
+/_PageSave null def
+
+/_fstr null def
+/_sstr null def
+
+/_ft 0 def
+/_st 0 def
+
+/_fp null def
+/_bp null def
+/_fs null def
+/_ps null def
+/_fg 1 def
+/_frgb 3 array def
+/_fcmyk 4 array def
+/_fcust 5 array def
+/_pg 0 def
+/_prgb 3 array def
+/_pcmyk 4 array def
+/_pcust 5 array def
+/_bkg 1 def
+/_bkrgb 3 array def
+/_bkcmyk 4 array def
+/_bkcust 5 array def
+/_fkg 0 def
+/_fkrgb 3 array def
+/_fkcmyk 4 array def
+/_fkcust 5 array def
+
+/_penh 1.0 def
+/_penv 1.0 def
+/_penv2 0.5 def
+/_penh2 0.5 def
+/save0 null def
+/_w 0 def
+/_h 0 def
+/st0 null def
+/st1 null def
+/st2 null def
+/st3 null def
+/stb 256 string def
+/pw 0 def
+/wdif 0 def
+/temp 0 def
+/currot 0 def
+/savehandler null def
+
+/debug
+{
+{
+/savehandler errordict /handleerror get def
+errordict
+/handleerror
+{
+$error begin
+newerror
+{
+/newerror false def
+showpage
+
+72 72 scale
+/Helvetica findfont .2 scalefont setfont
+.25 9.6 moveto
+(Error: )show
+errorname
+{
+dup type/stringtype ne
+{(converted error name will end up in this string)cvs}if
+show
+}exec
+
+.25 9.4 moveto
+(Offending Command: )show
+/command load
+{
+dup type/stringtype ne
+{(converted command name will end up in this string)cvs}if
+show
+}exec
+
+.25 9.2 moveto
+(Stack: )show
+ostack
+{
+.25 currentpoint .2 sub exch pop moveto
+dup type/stringtype ne
+{
+dup type/integertype eq
+1 index type/realtype eq or
+1 index type/nametype eq or
+not {type}if
+(converted stack will end up in this string)cvs
+}if
+show
+}forall
+showpage
+Deneba_CanvasGraphics /savehandler get exec
+}if
+end
+}put
+}if
+
+}def
+
+/lc
+{setlinecap}def
+
+/lj
+{setlinejoin}def
+
+/lm
+{setmiterlimit}def
+
+/lf
+{setflat}def
+
+/cp
+{closepath}def
+
+/np
+{newpath}def
+
+/gs
+{gsave}def
+
+/gr
+{grestore}def
+
+/printinfo{ FontDirectory /GothicBBB-Medium-83pv-RKSJ-H known
+{/GothicBBB-Medium-83pv-RKSJ-H}
+%% -- 16 bit Windows && Windows 95
+{/Times-Roman}ifelse findfont 9 scalefont setfont 0 setseparationgray show}def
+%% -- Windows NT
+%%{/Times-Roman}ifelse 9 fts sf 0 setseparationgray show}def
+
+/li
+{ lineto} def
+/lh
+{ currentpoint exch pop lineto}def
+/lv
+{ currentpoint pop exch lineto}def
+/mt
+{ moveto} def
+/mh
+{ currentpoint exch pop moveto}def
+/mv
+{ currentpoint pop exch moveto}def
+/ct
+{ curveto} def
+/rt
+{
+4 -2 roll moveto
+dup 0 exch rlineto
+exch 0 rlineto
+neg 0 exch rlineto
+closepath
+}def
+
+/sd
+{setdash}def
+
+/cd
+{[] 0 setdash}def
+/impat
+{
+/save0 save def
+currot 0 ne{currot neg rotate}if
+currentflat
+/_hr load _fm get exec
+{
+dup{gsave{flattenpath}stopped{grestore 2 mul dup setflat dup 200 ge{pop pop false exit}if}{grestore setflat true exit}ifelse}loop
+{
+flattenpath
+setflat
+pathbbox
+3 -1 roll exch
+8 div ceiling 8 mul dup 5 1 roll exch 8 div floor 8 mul
+sub abs cvi/_h xdf
+exch 8 div floor 8 mul dup 4 1 roll exch 8 div ceiling 8 mul
+sub abs cvi/_w xdf
+transform
+.25 sub round .25 add exch
+.25 sub round .25 add exch
+itransform
+translate
+_w _h scale
+/_h _h 8 mul def
+/st0 _w string def
+/temp 0 def
+_w _h T [_w 0 0 _h 0 _h]
+{
+_patstr
+temp 8 mod
+get/st1 xdf
+0 1
+st0 length 1 sub dup 0 le{pop 1}if
+{st0 exch st1 put}for
+/temp temp 1 add def
+st0
+}
+imagemask
+}if
+}{pop}ifelse
+save0 restore
+newpath
+}def
+/_fr
+{
+{
+/_fmp load _fm get exec
+}
+
+{_bp _fp impat}bind
+
+{}
+
+{}
+}def
+/_sr{
+
+{
+_cvmtx currentmatrix pop
+_penh _penv eq{_penh setlinewidth}{_penh _penv mul dup 1.0 lt{pop 1.0}if dup setlinewidth dup _penh exch div _penv exch div scale}ifelse
+currentflat
+dup{gsave{stroke}stopped{grestore 2 mul dup setflat dup 200 ge{pop exit}if}{grestore setflat exit}ifelse}loop stroke
+setflat
+_cvmtx setmatrix
+}
+
+{
+_cvmtx currentmatrix pop
+sk
+_bp _cvmtx setmatrix _fp _fm /_fm 1 def impat /_fm exch def
+}
+{}
+
+{}
+}def
+/_hr
+{
+{currentflat dup{gsave{eoclip}stopped{grestore 2 mul dup setflat dup 200 ge{pop false exit}if}{grestore setflat true exit}ifelse}loop dup {eoclip}if exch setflat}
+{currentflat dup{gsave{clip}stopped{grestore 2 mul dup setflat dup 200 ge{pop false exit}if}{grestore setflat true exit}ifelse}loop dup {clip}if exch setflat}
+}def
+/_fmp
+{
+{
+currentflat dup{gsave{eofill}stopped{grestore 2 mul dup setflat dup 200 ge{pop exit}if}{grestore setflat exit}ifelse}loop
+setflat
+newpath
+}
+{
+currentflat
+dup{gsave{fill}stopped{grestore 2 mul dup setflat dup 200 ge{pop exit}if}{grestore setflat exit}ifelse}loop
+setflat
+newpath
+}
+}def
+
+/_fill{ /_fr load _ft get exec}def
+/_stroke{ /_sr load _st get exec}def
+/fm
+{ /_fm exch def}def
+/fg{/_fg xdf /_ft 0 def/_fs{_fg setgray}def}def
+
+/fsg{/_fg xdf/_ft 0 def/_fs{_fg setseparationgray}def}def
+/f3{_frgb astore pop /_ft 0 def /_fs{_frgb aload pop setrgbcolor}def}def
+/f4{_fcmyk astore pop /_ft 0 def /_fs{_fcmyk aload pop setcmykoverprint}def}def
+/fc{/_fg xdf findcmykcustomcolor aload pop _fcust astore pop /_ft 0 def /_fs{_fcust _fg setcustomcolor}def}def
+/pg{/_pg xdf /_st 0 def/_ps{_pg setgray}def}def
+
+/psg{/_pg xdf /_st 0 def/_ps{_pg setseparationgray}def}def
+/p3{_prgb astore pop /_st 0 def/_ps{_prgb aload pop setrgbcolor}def}def
+/p4{_pcmyk astore pop /_st 0 def/_ps{_pcmyk aload pop setcmykoverprint}def}def
+/pc{/_pg xdf findcmykcustomcolor aload pop _pcust astore pop /_st 0 def /_ps{_pcust _pg setcustomcolor}def}def
+/fp
+{/_fstr xdf /_ft 1 def /_fs{/_patstr _fstr def}def}def
+/pp
+{/_sstr xdf/_st 1 def /_ps{/_patstr _sstr def}def}def
+/bg
+{/_bkg xdf /_bp{gsave _bkg setgray /_fr load 0 get exec grestore}def}def
+/b3
+{_bkrgb astore pop/_bp{gsave _bkrgb aload pop setrgbcolor /_fr load 0 get exec grestore}def}def
+/b4
+{_bkcmyk astore pop/_bp{gsave _bkcmyk aload pop setcmykoverprint /_fr load 0 get exec grestore}def}def
+/bc
+{/_bkg xdf findcmykcustomcolor aload pop _bkcust astore pop/_bp{gsave _bkcust _bkg setcustomcolor /_fr load 0 get exec grestore}def}def
+/kg
+{/_fkg xdf /_fp{_fkg setgray}def}def
+/k3
+{_fkrgb astore pop/_fp{_fkrgb aload pop setrgbcolor}def}def
+/k4
+{_fkcmyk astore pop/_fp{_fkcmyk aload pop setcmykoverprint}def}def
+/kc
+{/_fkg xdf findcmykcustomcolor aload pop _fkcust astore pop/_fp{_fkcust _fkg setcustomcolor}def}def
+/sp
+{/_penv xdf/_penh xdf/_penv2 _penv 2.0 div def/_penh2 _penh 2.0 div def}def
+/rp
+{
+/cv_b xdf/cv_r xdf
+/cv_t xdf/cv_l xdf
+cv_l cv_t moveto
+cv_r cv_t lineto
+cv_r cv_b lineto
+cv_l cv_b lineto
+closepath
+}def
+/rr
+{
+/yradius xdf
+/xradius xdf
+/cv_b xdf
+/cv_r xdf
+/cv_t xdf
+/cv_l xdf
+cv_l xradius add cv_t moveto
+cv_r xradius sub cv_t lineto
+
+_cvmtx currentmatrix pop
+currentpoint translate
+xradius yradius scale
+1 0 1 1 1 arcto 4{pop}repeat
+_cvmtx setmatrix
+
+cv_r cv_b yradius sub lineto
+
+_cvmtx currentmatrix pop
+currentpoint translate
+xradius yradius scale
+0 1 -1 1 1 arcto 4{pop}repeat
+_cvmtx setmatrix
+
+cv_l xradius add cv_b lineto
+
+_cvmtx currentmatrix pop
+currentpoint translate
+xradius yradius scale
+-1 0 -1 -1 1 arcto 4{pop}repeat
+_cvmtx setmatrix
+
+cv_l cv_t yradius add lineto
+
+_cvmtx currentmatrix pop
+currentpoint translate
+xradius yradius scale
+0 -1 1 -1 1 arcto 4{pop}repeat
+_cvmtx setmatrix
+
+closepath
+}def
+/ep
+{
+_cvmtx currentmatrix pop
+translate
+scale
+1 0 moveto
+0 0 1 0 360 arc
+closepath
+_cvmtx setmatrix
+}def
+/wd
+{
+_cvmtx currentmatrix pop
+translate
+scale
+0 0 moveto
+0 0 1 5 -2 roll arcn
+closepath
+_cvmtx setmatrix
+} def
+/as
+{
+newpath
+_cvmtx currentmatrix pop
+translate
+scale
+0 0 1 5 -2 roll arcn
+_cvmtx setmatrix
+} def
+/ds
+{_ps _stroke}def
+/df
+{_fs _fill}def
+/db
+{
+_fs gsave _fill grestore
+currentdash pop length 0 ne
+{
+gsave
+[] 0 setdash
+_st /_st _ft def
+_stroke
+/_st xdf
+grestore
+}if
+_ps _stroke
+}def
+/dp
+{_ps _ft/_ft _st def _fill/_ft xdf}def
+/sk
+{
+_penh _penv eq{_penh setlinewidth}{_penh _penv mul dup 1.0 lt{pop 1.0}if dup setlinewidth dup _penh exch div _penv exch div scale}ifelse
+currentpoint
+currentflat dup{gsave{strokepath}stopped{grestore 2 mul dup setflat dup 200 ge{pop pop exit}if}{grestore setflat exit}ifelse}loop strokepath setflat
+moveto
+}def
+/ef{_bp newpath}def
+/hs{gsave newpath}def
+/hc{ /_hr load exch get exec pop newpath}def
+/he{grestore}def
+/id
+{ /_id xdf}def
+/_imatrix
+{_w 0 0 _h _id 0 ne{neg 0 _h}{0 0}ifelse _cvmtx astore}def
+%!
+% Copyright (C) 1990, 1991 by Adobe Systems Incorporated.
+% All rights reserved.
+%
+/invalidcolortable? true def
+/level2 /languagelevel where {pop languagelevel 2 ge}{false} ifelse def
+level2 { save /dontloadlevel1 xdf }if
+/startnoload
+{
+{/noload save def} if
+}def
+/endnoload
+{
+{ noload restore } if
+}def
+/testsystemdict
+{
+where
+{
+systemdict eq
+{
+true
+}{
+false
+}ifelse
+}{
+false
+}ifelse
+}def
+/ncolors 1 def
+/colorimage where { pop true}{false} ifelse
+{
+/ncolors 0
+statusdict begin
+/processcolors where
+{
+pop
+pop
+processcolors
+}{
+/deviceinfo where
+{ pop deviceinfo /Colors known
+{ pop {deviceinfo /Colors get} } if
+}if
+}ifelse
+end
+def
+ncolors 0 ne
+{
+/colorimage testsystemdict
+/setcolortransfer testsystemdict
+/currentcolortransfer testsystemdict
+/currentcmykcolor testsystemdict
+and and and not
+{
+/ncolors 0 def
+} if
+}if
+}if
+ncolors dup 1 ne exch dup 3 ne exch 4 ne and and {/ncolors 0 def}if
+ncolors 1 eq dup dup not startnoload
+{
+/doclutimage
+{
+pop /bwclut xdf
+[
+{255 mul round cvi bwclut exch get 255 div} /exec load dup
+currenttransfer exch
+] cvx bind settransfer
+_w _h 8 _imatrix {currentfile st0 readhexstring pop}
+image
+}def
+}if
+not endnoload
+ncolors dup 3 eq exch 4 eq or
+dup dup not startnoload
+{
+/nullproc { {} }def
+/concatutil
+{
+/exec load
+7 -1 roll /exec load
+}def
+/defsubclut
+{
+1 add getinterval def
+}def
+/spconcattransfer
+{
+/Dclut exch def
+/Cclut exch def
+/Bclut exch def
+/Aclut exch def
+/ncompute exch load def
+currentcolortransfer
+[
+{
+Aclut ncompute
+}
+concatutil
+] cvx
+[
+{
+Bclut ncompute
+}
+concatutil
+] cvx
+[
+{
+Cclut ncompute
+}
+concatutil
+] cvx
+[
+{
+Dclut ncompute
+}
+concatutil
+] cvx
+setcolortransfer
+}def
+/setuprgbcluts
+{
+/bit3x
+rgbclut length
+3 sub
+def
+/bit1x bit3x 3 idiv def
+/rclut rgbclut def
+/gclut rclut 1 bit3x defsubclut
+/bclut rclut 2 bit3x defsubclut
+}def
+}if
+not
+endnoload
+ncolors 3 eq
+dup dup not startnoload
+{
+/3compute
+{
+exch bit3x
+mul
+round
+cvi
+get 255 div
+} def
+/doclutimage
+{
+/rgbclut xdf
+pop
+setuprgbcluts
+/3compute rclut gclut bclut dup
+spconcattransfer
+_w _h 8 _imatrix
+[
+{currentfile st0 readhexstring pop} /exec load
+/dup load dup
+] cvx
+nullproc nullproc true 3 colorimage
+}def
+}if
+not endnoload
+ncolors 4 eq
+dup dup not startnoload
+{
+/stuffclut
+{
+cmykindex 3 -1 roll put
+}def
+/ftoint
+{
+1 exch sub 255 mul round cvi
+}def
+/4compute { exch bit4x mul round cvi get 255 div } def
+/computecmykclut
+{
+setuprgbcluts
+/bit4x
+rgbclut length
+3 idiv
+4 mul
+4 sub
+def
+/cmykclut bit4x 4 add string def
+/cclut cmykclut def
+/mclut cclut 1 bit4x defsubclut
+/yclut cclut 2 bit4x defsubclut
+/kclut cclut 3 bit4x defsubclut
+/cmykindex 0 def
+0 1 bit1x
+{
+dup /cmykindex exch
+bit1x exch sub
+4 mul def
+3 mul dup
+rclut exch get 255 div
+exch dup
+gclut exch get 255 div
+exch
+bclut exch get 255 div
+setrgbcolor currentcmykcolor
+ftoint
+kclut stuffclut
+ftoint
+yclut stuffclut
+ftoint
+mclut stuffclut
+ftoint
+cclut stuffclut
+}for
+}def
+/doclutimage
+{
+/rgbclut xdf
+pop
+invalidcolortable?
+{
+computecmykclut
+}if
+/4compute cclut mclut yclut kclut spconcattransfer
+_w _h 8 _imatrix
+[
+{currentfile st0 readhexstring pop} /exec load
+/dup load dup dup
+] cvx
+nullproc nullproc nullproc
+true 4 colorimage
+}def
+}if
+not endnoload
+ncolors 0 eq
+dup dup not startnoload
+{
+/colorexpand
+{
+mystringexp 0 rgbclut
+3 copy
+7 -1 roll
+{
+3 mul
+3 getinterval
+putinterval exch
+3 add exch 3 copy
+}
+forall
+pop pop pop pop pop
+}def
+/createexpandstr
+{
+/mystringexp exch st0 length mul string def
+}def
+/doclutimage
+{
+/rgbclut xdf
+pop
+3 createexpandstr
+_w _h 8 _imatrix
+[ {currentfile st0 readhexstring pop} /exec load /colorexpand load /exec load] cvx
+false 3 colorimage
+}def
+}if
+not endnoload
+level2 { dontloadlevel1 restore }if
+level2 not{ save /dontloadlevel2 xdf }if
+/_imagedict 9 dict dup
+begin
+/ImageType 1 def
+/MultipleDataSource false def
+end
+def
+/rgbclut 0 def
+/doclutimage
+{
+/rgbclut xdf
+pop
+/hival 255 def
+[/Indexed /DeviceRGB hival rgbclut] setcolorspace
+_imagedict dup begin
+/Width _w def
+/Height _h def
+/Decode [0 hival] def
+/ImageMatrix _imatrix def
+/DataSource {currentfile st0 readhexstring pop} def
+/BitsPerComponent 8 def
+/Interpolate false def
+end
+image
+}def
+level2 not{ dontloadlevel2 restore }if
+%%EndProcSet
+
+/cl
+{
+translate
+scale
+cvi/_h xdf
+cvi/_w xdf
+/st0 _w string def
+doclutimage
+}def
+
+/c3
+{
+translate
+scale
+cvi/_h xdf
+cvi/_w xdf
+/st0 _w 3 mul string def
+_w _h 8 _imatrix
+{currentfile st0 readhexstring pop}
+false 3 DSIColorImage
+}def
+
+/colorimage where
+{
+pop
+/DSIColorImage {colorimage} def
+}
+{
+/DSIColorImage
+{
+/ncolors xdf
+not
+{
+2 index
+8 eq
+{
+ncolors 1 gt
+{
+/proc0 xdf
+3 index 2 index mul 7 add 8 div cvi string /st1 xdf
+ncolors 3 eq
+{
+{
+proc0 dup/st0 xdf
+0 exch 3 exch
+length
+3 sub
+{
+dup
+st0 exch get .3 mul
+1 index 1 add st0 exch get .59 mul add
+1 index 2 add st0 exch get .11 mul add
+cvi
+exch 3 div cvi exch
+st1 3 1 roll put
+}for
+st1
+}
+}
+{
+{
+proc0 dup/st0 xdf
+0 exch 4 exch
+length
+4 sub
+{
+dup
+st0 exch get .3 mul
+1 index 1 add st0 exch get .59 mul add
+1 index 2 add st0 exch get .11 mul add
+1 index 3 add st0 exch get add dup 255.0 gt{pop 255.0}if
+255.0 exch sub cvi
+exch 4 div cvi exch
+st1 3 1 roll put
+}for
+st1
+}
+}ifelse
+}if
+image
+}{(Incompatable color bitimage)print flush stop}ifelse
+
+}{(Incompatable color bitimage)print flush stop}ifelse
+}def
+}ifelse
+/c4
+{
+translate
+scale
+cvi/_h xdf
+cvi dup/_w xdf
+dup string/st0 xdf
+dup string/st1 xdf
+dup string/st2 xdf
+string/st3 xdf
+_w _h 8 _imatrix
+{currentfile st0 readhexstring pop}
+{currentfile st1 readhexstring pop}
+{currentfile st2 readhexstring pop}
+{currentfile st3 readhexstring pop}
+true 4 DSIColorImage
+}def
+/im
+{
+translate
+scale
+cvi/_h xdf
+cvi/_w xdf
+/st0 _w string def
+_w _h 8 _imatrix
+{currentfile st0 readhexstring pop}
+image
+}def
+/ik
+{
+translate
+scale
+_fp
+cvi/_h xdf
+cvi/_w xdf
+/st0 _w 7 add 8 div cvi string def
+_w _h false _imatrix
+{currentfile st0 readhexstring pop}
+imagemask
+}def
+/rs
+{
+ _rotmatrix _rotlevel get currentmatrix pop
+ /_rotlevel _rotlevel 1 add def
+2 copy translate
+3 -1 roll neg rotate
+neg exch neg exch translate
+}def
+/re
+{
+/_rotlevel _rotlevel 1 sub def
+_rotmatrix _rotlevel get setmatrix
+}def
+
+/fd
+{
+/_fd xdf
+}def
+
+/_fontMatrix
+{
+1 0 0 _fd 0 ne{-1 0 0}{1 0 0}ifelse _cvmtx astore
+}def
+/rf{
+/_encodindex xdf
+FontDirectory 2 index known
+not{
+findfont dup length 1 add dict begin
+{1 index/FID ne{def}{pop pop}ifelse}forall
+dup /FontName exch def
+/Encoding Encoding 256 array copy def
+_encodindex 0 ge
+{
+0 _encodArr _encodindex get
+{
+dup type/nametype eq
+{
+Encoding 2 index 2 index put pop 1 add
+}
+{exch pop}ifelse
+}forall pop
+}if
+currentdict end definefont pop
+}if
+cleartomark
+}def
+/sf{
+findfont ftSize 0 0 ftSize _fd 0 ne{-1 mul}if 0 0 _cvmtx astore makefont setfont
+}def
+/mf{
+3 -1 roll findfont 3 1 roll exch ftSize mul exch ftSize mul 0 exch 0 exch _fd 0 ne{-1 mul}if 0 0 _cvmtx astore makefont setfont
+}def
+
+/wrk1 ( ) def
+/wdict 16 dict def
+/Work75 75 string def
+/Nmk{Work75 cvs dup}def
+/Npt{put cvn}def
+/dhOdh{Nmk 2 79 Npt}def
+/dhodh{Nmk 2 111 Npt}def
+/dhSdh{Nmk 2 83 Npt}def
+/sfWidth{gsave 0 0 moveto 0 0 lineto 0 0 lineto 0 0 lineto closepath clip stringwidth grestore}def
+/fts{/ftSize exch def}def
+/mkFT{
+dup/FontType get 0 eq
+{
+dup maxlength dict begin
+
+{1 index/FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall
+currentdict end
+dup/FDepVector 2 copy get
+[
+exch 6 index
+exch 6 index
+exch{mkFT 3 1 roll}forall pop pop
+] put dup
+}
+{
+/tempFT 12 dict def
+tempFT begin
+/FontMatrix [1 0 0 1 0 0] def
+/FontType 3 def
+dup/Encoding get/Encoding exch def
+/proc2 2 index def
+dup/ft1 exch def
+/ft2 1 array def
+/FontBBox [0 0 1 1] def
+/BuildChar
+{
+exch dup/ftdt xdf begin
+wdict begin
+/chr xdf
+/chrst wrk1 dup 0 chr put def
+ft2 0 get null eq
+{
+ft1 dup length 2 add dict begin
+{1 index/FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall
+/PaintType 2 def
+/StrokeWidth .24 1000 mul ftSize div dup 12 lt{pop 12}if def
+currentdict end
+/q exch definefont
+ft2 exch 0 exch put
+}if
+ftdt/proc2 get exec
+end
+end
+}def
+end
+tempFT
+}ifelse
+3 index exch
+definefont exch pop
+}def
+
+/mo{
+/_textstyle 1 def
+dup dhOdh
+FontDirectory 1 index known
+{exch pop}
+{
+dup 3 -1 roll
+findfont
+{outproc} exch
+mkFT
+pop pop pop
+}ifelse
+}def
+
+/ms{
+/_textstyle 2 def
+dup dhSdh
+FontDirectory 1 index known
+{exch pop}
+{
+dup 3 -1 roll
+findfont
+{ShadChar} exch
+mkFT
+pop pop pop
+}ifelse
+}def
+
+/outproc{
+ft1 setfont
+gsave chrst sfWidth grestore
+setcharwidth dblsh
+}def
+
+/dblsh{
+currentgray 1.0 setgray
+chrst 0 0 moveto show setgray
+ft2 0 get setfont chrst 0 0 moveto show
+}def
+
+/ShadChar{
+ft1 setfont
+gsave
+chrst sfWidth 1 index 0 ne{exch .05 add exch}if
+grestore
+setcharwidth
+chrst .06 0 moveto show
+0 .05 translate dblsh
+}def
+/tb{
+_txtmtx currentmatrix pop
+currentpoint pop /_underlinpt xdf
+/_textstyle 0 def
+}def
+
+
+/_textline
+{
+_textstyle 2 eq{
+gsave
+_underlinpt currentpoint pop sub
+currentlinewidth 2.0 div dup rmoveto
+0 rlineto
+stroke
+grestore
+}if
+
+_underlinpt currentpoint pop sub 0 rlineto
+_textstyle 0 ne
+{
+currentlinecap
+0 setlinecap
+currentpoint
+currentflat dup{gsave{strokepath}stopped{grestore 2 mul dup setflat dup 200 ge{pop pop exit}if}{grestore setflat exit}ifelse}loop strokepath setflat
+moveto
+setlinecap
+gsave 1.0 setgray eofill grestore
+setlinewidth stroke
+}
+{pop stroke}ifelse
+
+}def
+
+/_sp
+{
+{
+gsave
+currentpoint newpath moveto
+[] 0 setdash
+currentfont dup /ft1 known
+{
+dup /ft1 get begin
+/FontMatrix get FontMatrix _cvmtx concatmatrix pop
+}
+{
+begin FontMatrix _cvmtx copy pop
+}ifelse
+
+currentdict dup /StrokeWidth known
+{/StrokeWidth get dup _cvmtx dtransform pop}
+{pop .24}ifelse
+
+currentdict /FontInfo known
+{
+FontInfo /UnderlineThickness get dup _cvmtx dtransform pop setlinewidth
+FontInfo /UnderlinePosition get dup _cvmtx dtransform pop neg
+}
+{ 1 setlinewidth -100}ifelse
+0 exch _textstyle 2 eq{ 3 sub}if rmoveto
+end
+_textline
+grestore
+}
+{
+gsave
+currentpoint newpath moveto
+[] 0 setdash
+currentfont dup /ft1 known
+{
+dup /ft1 get begin
+/FontMatrix get FontMatrix _cvmtx concatmatrix pop
+}
+{
+begin FontMatrix _cvmtx copy pop
+}ifelse
+
+currentdict dup /StrokeWidth known{/StrokeWidth get dup _cvmtx dtransform pop}{pop .24}ifelse
+currentdict /FontInfo known
+{
+FontInfo /StrikeoutPosition known
+{
+FontInfo /StrikeoutThickness get dup _cvmtx dtransform pop setlinewidth
+FontInfo /StrikeoutPosition get dup _cvmtx dtransform pop neg
+}
+{
+FontInfo /UnderlineThickness get dup _cvmtx dtransform pop 2.0 div setlinewidth
+300 dup _cvmtx dtransform pop neg
+}ifelse
+}
+{ .5 setlinewidth 300}ifelse
+0 exch rmoveto
+end
+_textline
+grestore
+}
+
+{}
+
+{}
+
+{}
+
+{}
+
+{}
+
+{}
+
+}def
+
+/xe
+{
+%%/_textstyle exch def
+0 1 15
+{
+dup 1 exch bitshift
+2 index and 0 ne
+{
+/_sp load exch get exec
+}
+{pop}ifelse
+}for
+}def
+
+
+/te{ _txtmtx setmatrix}def
+
+/ta
+{
+/_letterSpace xdf /_spaceXtra xdf
+}def
+
+/ts
+{
+_ps
+show
+}def
+
+/tf
+{
+/_textWidth xdf
+/_numSpaces xdf
+/_stringLength xdf
+
+dup stringwidth pop
+
+_letterSpace _stringLength mul add
+_spaceXtra _numSpaces mul add
+_textWidth exch sub /wdif xdf
+_ps
+_spaceXtra 0 32
+wdif _stringLength div
+_letterSpace add
+0 6 -1 roll awidthshow
+}def
+
+/pb
+{
+/_PageSave save def
+/showpage {} def
+}def
+
+/pm {_pm currentmatrix pop} def
+/_pm matrix def
+
+/ps
+{
+showpage
+_pm setmatrix
+}def
+
+/pe
+{
+_PageSave restore
+}def
+end
+%%EndResource
+%%EndProlog
+/copyfont{findfont dup length 1 add dict begin
+{1 index/FID ne{def}{pop pop}ifelse}forall
+dup /FontName exch def
+/Encoding Encoding 256 array copy def
+currentdict end}bind def
+%%BeginResource: font TimesNewRoman4-1
+14 dict begin
+/FontName /TimesNewRoman4-1 def
+/FontInfo 10 dict dup begin
+/FullName (TimesNewRoman4-1) def
+/FamilyName (TimesNewRoman4-1) def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/StrikeoutPosition 300 def
+/StrikeoutThickness 25 def
+/Weight (Medium) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end def
+/_glyph (X ) def
+/gx
+{
+ 1 exch{
+ dup 16 ( ) cvrs _glyph exch 1 exch putinterval 1 index exch
+ _glyph cvn put
+ }for
+}def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 { 1 index exch /.notdef put } for
+30 255 gx
+def
+/FontBBox [ 0 0 0 0 ] def
+currentdict end
+dup /Private 8 dict dup begin
+/RD{string currentfile exch readhexstring pop}def
+/ND{def}def
+/NP{put}def
+/BlueValues[ -250 0 2200 2200] def
+/MinFeature { 16 16} def
+/password 5839 def
+/Subrs 43 array
+ND
+2 index /CharStrings 256 dict dup begin
+/.notdef 8 RD 24ECBD053ECAD3D7 ND
+/X20 10 RD 24ECBD053EB633C991DB ND
+/X41 144 RD 24ECBD053EB83C360F4B94DE3E8B756E8012F8F9E13B1AC798A0D543B03A309B8DB07C9AAECEDE186059402E98E44A1D7015E0492EE3C63E03C18B895957CDD2ABF6B2FB21B34EF758A053FFABE8AFA1F8AF5A96F5D46B025391F328567F695BFFF4AEE6F5A7AF637574667612DFB32739E9E975252DFF8FC9327AA4
+DCE067E48412A86EDCC82879D4A37C89FF5E25DB ND
+/X42 251 RD 24ECBD053EB8753CD7B0DA1D515B5CDF6C5A35B16B2D376AEF7B0DC92B338444E23703253E9DEF8D5BE8ECEC54D1A786E1449E0F8025665830640F460819E61D97752D92D548FFD4B08504FB89AC528908930B7162D8FB104194298B79BA6FD7B0EC9EAC7579976426EA7C6F70EFCF3BCDE98746B74EDD7888E2815D
+4B193ACC8B22FC99908A03390EF61CDE8015CDA2B8243FCD6A3A0662C94D092BA690860D1C1BD3EBBE624E903998FF4316020BA7864E31D7233638D3C09D3054382DA135B73CE0DF2D24E92AFFEDFD7ECB027E422C5C47B0543ED5A9220E4241B41CAF9197DD010E797B0785B323D65666580988557C54C8704790ECBA
+0C0B ND
+/X43 178 RD 24ECBD053EB83C360E86A5A433E50C676A86C91D33D4DF445F1C4540DD97E74C3E2ED39A7DFC9B60E0A572DE5047F2519E2BE8B732C64F2C576796E266FDBAE1861EAA71B3EA4D5FA2FA78D1556A62302BB14AEDB3BCB91F319E48063EB499FA6154784C12D485711A992AE17695643A22117E343E12729FA0E79DA3
+DA72DD051384D2169C4AC028F4F6180C861E24E2AD0BD615897CA65E21FDC9C4E536A3BEFDFD5AC26A5E193C47B3B935A50A34EF7F03 ND
+/X45 195 RD 24ECBD053EB8753CD80A145BE2ABA662C43596645C456D38482A9471CA3691940CCF278EF67D34C32718B066E457B51E266FCA0F245EF54512D1E172C2B8762DEBFA1626A43E051FCE02E35AB2B1A53395AE995C3FB50DDFDAAD51EAA061425036E2809A1BA959C62FBFDDCCB0EE4D591C1E58B665794A76E167BAAD
+51EF267CEE7C3450B283D4FDFA002E64552B778B56EE9D50AFA6B9E00E61DDA099E8E8825284D71835C793996B504498C0A19AA9DCC7EE153154922BEA7F826DAB3B942CD68E7D ND
+/X46 179 RD 24ECBD053EB9DF48FFA7B3BEF9EEFEE4FAEC922CEFCCDB0C671C0066AABB66768311FCC598CB1B55533724EF4A67C1C14D5EC7511318C252E59D95EBE395744EB7DB388130CC144241935387DF620E0984164D173152D00A7D2658D020C08B09210A1233739392A391A75F7BC37DA5BDD4BEDCFA4DCD7FE6118DB750
+A3B482F3A724A75FC29FBD780B0FFD3ED5C45684C5D5BD2B911522A439BF05D7FA3FF943FFF1321197CB653983B023B57662362F7F673F ND
+/X49 126 RD 24ECBD053EB931FA65ED2DB64488963E2F46EEA7A99303FC750CACB696F33E790A6CC6077676DB6801A4A487882927B327B3F8103384D0F7C9DAEA1299AA2F557AF1F636BDCE674EAAFC22B340762853B23B1E8675B650BDB4B9457B34846A79033FEEC4824BD4334C0736F26CFDDB525C5D625C8E061A8F93EA7188
+5AC2 ND
+/X4C 152 RD 24ECBD053EB8753CD61DFD47F60D395AF284865FACE2EF9E4915D55A92FB358A8F2CF943A5976D1E1407A6392603EA42222F2CDF2C7EF9C43F0482298889E73A565F0AA079A6B3EBA9CA58E4A4C805BC1327595A775E48F3BBA2FE1C7DB0D1DB68B8088D3486C1A5DE46253FFFC87EEEB9D46478D8CA9DB7F8D0EF4A
+C726434AF164510C9C383146F7394746F8B3CACA7E9D8B594F1FFB4E ND
+/X4D 216 RD 24ECBD053EBB81A3C84CCE9184A0F7DF9AEACD3D10A4D9AD2DA5F552952AB0F98CB0EA36B8F32E33EF74146A716F36FCA074D22AFE7537D7A7798B373859A4FBCF862076122930B9F8C5426C934F45514445A864ED4C5962FEDA6A2538E69B8B2EC326FAF69DC92E426D53C2DFB5159ADE232B199E6522E557747E52
+C5DB8CFAB4B98DAADC109271147C162663AB7347D064039AA6FC83B43EBFADFBE03A9078EBC4B5003F3F0DBBBDF540BF9E4B697262B9298A2787A63B9EFA23384A6A4705D8A2DDBD763B85FEB9A0035198CDFEF65C96C3833A60853F ND
+/X4E 140 RD 24ECBD053EB83C3600ED01056A2E62F7DF6DE092A87C6B420D2C230BE5F7953CDB878DE442B0EA321226A901BF36B362F513154159EE6FEF7F971DBFCBDD67C50A57A7BC1B1735A784A3BEC533AAAF7517BF990E288D893B6F1DEF226474F3E5FDD9E76ECE597ECB94761BB84749F41B8E9531D1F25467BD680887D1
+6FA9BF9DFCA55506CC68DD6A432CD343 ND
+/X4F 152 RD 24ECBD053EB8C4E87E80336FDCBF26B41F340A180F676E38CD0777DFCA6A8A987441A6D6554C097A3978779FCF56DA8A65632B58DBAD2BD6F283041AB34DDA5BA18E2003599B6CA34D24662E0C2BD0CE74621E9CC4295DF7F1464F3A1BE66F3A21DF35867F091D5256F2EB39F97D2F621BE0D6044C9D4A7347A00E0E
+C6513E75926B32A91F0889FB7E002D464E13B10B0D285AC9E46424F1 ND
+/X52 208 RD 24ECBD053EB83C3600FE5AF197FD78E0CD12C092E4166BB6716E912F226C3B61BBC1C6595D467C7F49377010EB174C0BA342ACA6B6D25CA68B271455A87C20005C9468334ADA3582D3BD88202F41C4BB144F3AA083E3661556BA8AEE72FE787F759495D27AE2F0777E8A248A4134C0160BC3C9D5AFEC3CA81D45CCC5
+D351D92DCBB7DBC38306F2E569E430F66C070924E7601D78FFD4DE117A0FC5B063E36B86BF5C74ACB65356CA524905C492F88C064CD0C61A9D2362CB25FB1536554C1E7E93356839F95CE678DE84119E505BB88D ND
+/X53 261 RD 24ECBD053EB9E88A56C1897FDF69DC54F647A73338F74AE946182D095D741C28F465B1B0E1C84037E52BC85306DED81B75917C1DE93736F6EB9E5D78801F70BCAB59CB79272C5D8AFC80249CBFCB61F82E7BF86EB7E5AE08D26708A0AC2FF8D7CA9C6AEB0627F4C476321560371BFD80DC3920D5855240610658769D
+E1F2C27D736FB0D453328B6F9061BA414738A81FE1AF9C1E9A6B3322430283F0E04C19FF765A8DE9C2E1848E2076EB9A3634E2C6130AB07958891B8085E53F104D8E68589C7B1565F62582EAED9E63DCDC2D46BDC96A7EB1D26BC382604BCE03AB22623527833C19CE19BEF422A051CDD953EC6E8027699EE2514D20E7
+CE41FF0BEDAC58893B6505AD ND
+/X54 126 RD 24ECBD053EB8753CD61A6681CB78C8757CD195382007336EE2D0B155C4B513473426FADE3AF3F7A44C004C70BE55504CB126F954439CF581B159379C3F1419D242FE206B44D0FE13EAB1143A6F4F600AA71E6AFC0A5D9460D929A7F4E99428D3B9FFA74C514E0287A3BDA3FF86F33F5772FED4DDD6FE0FE00191247F
+D417 ND
+/X55 212 RD 24ECBD053EB83C3655135FB06453D1846156B2A0E9898F1D6D26F1C11F718137DF100E0BE258E6EC2D0D162ED0DA204F4A97779248014D3B158730E917381324DC0597E1F1F4C179567BBFFED3C844BE77242D2025F4EB93F291AFE9DB38FE8792C8302D2A152927A609969DFFD69200AD7BFA0B4FBED785F7DCDAEA
+1FFDC35E67C7AC4D1C0B1BFFA84762C009A2764CF14F95C2CAF2466033D5DDBDE038BC56788F88A52BF3F7D38DA36FCBA2EEF26D2C3FC838FAF0D951DD93EC0A2D09CFA66D2C82DEE14D9A8337AD55F5B1D9BD7DA6B42642 ND
+/X56 144 RD 24ECBD053EB83C360EF524A700354E6034E234FDF14FC7992C18436DD70EEB52F346ED424ABE692AC8D3CB40488818C9D344D680250EA1348B846B64D024FBE276946E4875310534EED93EFFCB99EC8BCB0E64C7BD8B3CA58F73E99A1A0F1F18947D2E97E0E74AC6E47667771463D399D255AF57AA1CBD5CE73AEA82
+02BF5B5D104B29EF494DBF2B40DFE053A9C57BE2 ND
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+%%EndResource
+
+%%BeginResource: font Arial1-1
+14 dict begin
+/FontName /Arial1-1 def
+/FontInfo 10 dict dup begin
+/FullName (Arial1-1) def
+/FamilyName (Arial1-1) def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/StrikeoutPosition 300 def
+/StrikeoutThickness 25 def
+/Weight (Medium) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end def
+/_glyph (X ) def
+/gx
+{
+ 1 exch{
+ dup 16 ( ) cvrs _glyph exch 1 exch putinterval 1 index exch
+ _glyph cvn put
+ }for
+}def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 { 1 index exch /.notdef put } for
+30 255 gx
+def
+/FontBBox [ 0 0 0 0 ] def
+currentdict end
+dup /Private 8 dict dup begin
+/RD{string currentfile exch readhexstring pop}def
+/ND{def}def
+/NP{put}def
+/BlueValues[ -250 0 2200 2200] def
+/MinFeature { 16 16} def
+/password 5839 def
+/Subrs 43 array
+ND
+2 index /CharStrings 256 dict dup begin
+/.notdef 8 RD 24ECBD053ECAD3D7 ND
+/X31 49 RD 24ECBD053EB9E88A56B687FD8EBF1510130CF8CCE89FFC283BE19F9C7AC27D4304E7D8D0F79221E3FBBD6DF384CC0C6D92 ND
+/X32 147 RD 24ECBD053EB9E88A562552C7B880FD7A97DBE5D605BD014C1861EE0EA6034C603D3D69533C8EC94D544C7A0C61E5F7B6FE13CED4A2B151B961FB252DD37FC0AB13F6CBEFF3AE4D346FBFA1E18C434B6FDE33180196308390B0A2B04A87A4E4898FBD2ECC8D369FB3C9481C920A27B6CE06934B867AED148638A05C72
+D43F5F0AF7E8532CADCB8D7C85E34C9501213B38895616 ND
+/X33 203 RD 24ECBD053EB9E88A1FA5FDF500F27B039D4217A4C5069ED3978BDF73FA68977A5547975478696AB2327C7D57DFE83916C110DB0F9FD6B4731220CE173B856F294E99544F8B58EA96E332D153208829A717CB471D495928739D633A8823DCB280FEF02287D26C39A66BB220CCF0DE6B1573274E2FF88A5F5AA8883C96
+D461166D6119DF30018492CF065CC1BD0A8ADB3E4012B74A5BBE38E2BABBC73C53A90B2960E5A8DB93867EA38375AF1823C46B4C134FA639D461CFA5BE5DC28891D0786493C634237E6882620AC76C ND
+/X34 61 RD 24ECBD053EB9E88A59DC12A70C7AD26B0E16E5740E9AB6E5F32C284BDA5B01CFD0A414436B837BBBB4B496175EA8E4965E724A6D82F308BE5A61940148 ND
+/X35 139 RD 24ECBD053EB9E88A198CA489BDE564B6D13358D468C5110641FD9445F3D865D9011BEA367F7DB3D88F3C5D39C3A1B8684BF19B39B1BEA07688826984A35E28983CBCDB4402430A1F0D3D167973273D11D51EE93E144E357FEF06BD75B212A575646BC0E89702077EE92393BEBF8768319F46C19452DA6B6E71B32D45
+FD843CED2F6939822D1B543B6C187C ND
+/X42 217 RD 24ECBD053EB83C362361519EBCAEEE1286C41C243C825763DD9030837403A5FF29BB4D4E1961AD2205E51E9727E2B07042B45A0EA63456130F3855502384CECDBB607CACC2AB00BCD161A171B9C78CD2F72927ABBFCEAD60B39184E52F6AE5366ADCB390FE9C7C277EEC332D7F3966EDC5A5B9B90114DE2BA551B3E5
+DCA55914194F929BA485749B0505810985BC6F12C0354D01694BB6F77579F29ADA38C3752B3C5E5BBF2404D9D5FA36BB709C8BDA2E5C2F0EF7F31D8AC9207424DAD9D2CEED5729175424018D41C446D6E12EBC506082584C855207AFED ND
+/X44 149 RD 24ECBD053EB83C362361519EBC80D67A0CFE0EFB8A0D8C8FE8EE3A4471C8FF4463B0D448C01A084E1E1C8833322D400EACDC377AC12F69825B7CA522AA5FC960471B09378856E50C5535FDE742AA34F43C2B1B70A3E080776C0C6DBF23908D238E28C686287E62E830488DFBC4C78B8B412312987327435AAFD1F421
+E2F745AEFC66E49829F8D9C215FCB2896C9B924771B8AC59C1 ND
+/X49 24 RD 24ECBD053EB6173D1E13FA0F09D52C725387A8736152D3BE ND
+/X4F 152 RD 24ECBD053EB8C4E830460C7BF3D2BA21EB94CC4A01CEE0B9C9E7F53502B20AA807DC85F870DB26D2A37D4956D015F5C6F7A4D7DFE1C77925E5F4EFBA3C8E2B951D3921217D28B8300C792F5FF0BA6F7563FD20DD909AA1AF9848229863B5976B7750157E4CB5C308175FC51BDD69AE0B1487E21CF6E91F86D02870F2
+CC61BFDA5335424BB0E84F7B3B0FAB2DB3DB04BBBF45B0715E3B7FDD ND
+/X52 163 RD 24ECBD053EB83C36238E8361F7E1EFB77C988CA18F2A9FA95ED8E11A469B47308F3BB6A6DBBCF896A23D75E3471AD866B50B1483C978DED5DAF188156993621EB438294D646F89C837315576DAA5345CAC519FFD51B2373C27F4643581EB12AA98F598C8A8EBC588933D55B45B16AC3B6AAB6AD9B5F6D3AAEBC4BBEC
+716279546D753055FA942ED244939CA5C6DD2CF38529584161370A95C4B34251604A306C2F5AF4 ND
+/X61 241 RD 24ECBD053EB9E88A5955DE9AA0A0B65DFF5F9652B9BB2BB6670A705D350D8C41549E566740D8B8E90DA4E31FF8952D5FFD3FDD512D6676B64C554947D47BBE9C977599CC5FEDD5C211358772D64CF61AD5B0C00EAC3EC139E875987A45F2C8CD5C896F318D55D8523A040B49A0CC073F1214EEFA120D87C179600891
+FF1910326E974290A0F62CA6F21E3D79A7E23ECAA1D41C8D1031AD48ED87D70608620EEC35580899148408D848DD0B279F8C76BD3B6EB99383EC27EB6C4FCE1098266DA4D0B680EF835CBC31BF047FF996F45CDC5B6D655B705E9E3B3537DB82E51B72D8087B8A79F3E84DFF3362647E47C44166AE ND
+/X65 144 RD 24ECBD053EB9E88A56A3C8C2A68E5033B043C1744B2B85CAE9379D11DF364FF7964D3AEEDB5814F5E546627ADCC290115A6FFF3F15633103BC0E89EF320F50D98CB8DA2AD965DE8E07C40A4E759EBCE6B1FCD7683F6577817150F8049E83AC717160FCD14D1DAF3977709251CF201397F33F16522606B7FAE31F0732
+D18B7658677DD746432870FBA6F3CCA5D8AFB9C0 ND
+/X66 93 RD 24ECBD053EB65CD9AD3129458B34B5A9F99990DA3CE1B7881E9686F00820ADEFB9185E8386C606C36BA718FAF23BC9653A1EC6323F1678A22F348079BD1CBC247E59F24DE2C54A5F5AB14F9250A9740EF94DE24E816E2A7E7F3278DA43 ND
+/X69 42 RD 24ECBD053EB6173D0289A48A84DB3F27BAF86BF890E5EE0823C4D0D5BFB9E1877BA6AB63807606898E09 ND
+/X6C 24 RD 24ECBD053EB6173D02672229C50C7EAF11C89C193CA8A27F ND
+/X6E 113 RD 24ECBD053EB9DF48F0539478774786C45BA0A5EA5CF4DE26B689D0E24DA1781D78E05A1213731B40B300D4D27B48341BFFAC34BB54B8C97CE271FADB8EBBA24A5FC9796AE859E6FF0F1AF19B2721818136B262353EA868B3ABB784C5B4DF385B1BFBF9BD525DC739AA5FE54289DDDA7961 ND
+/X74 110 RD 24ECBD053EB65CD9CD5FEFD5A4FCC9E1D1F74F94142C88E6E63A41489495F99B03D9B0E62250ED2C8FA20292A8D59F7A6556C090E02AF3C73003D85BDC77C981E670171DF0E16F29BE6CD698B4B55F61EA6AAA17A6F496268F2BC5DFE999BADC15DB4147DC85A1DC2CB142B3CF52 ND
+/X75 113 RD 24ECBD053EB9DF48F0D4913E6A64CBE58632EC75814B11743FD2E46C0B4541B2EBA191551138DFF94F29B113AAA6D789D92AE73F2758582F50C8F61B35F3057EFF24E13FC26299D0D33AD44765B291A2A60AD307774DD6FBA1C265A27F361DCE1CCF6F3D620BF45B4463CB17B4115E97F4 ND
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+%%EndResource
+
+/Arial1-3 /Arial1-1 copyfont begin /FontMatrix FontMatrix [1 0 .2588 1 0 0] matrix concatmatrix def currentdict end definefont pop
+%%BeginResource: font Arial1
+14 dict begin
+/FontName /Arial1 def
+/FontInfo 10 dict dup begin
+/FullName (Arial1) def
+/FamilyName (Arial1) def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/StrikeoutPosition 300 def
+/StrikeoutThickness 25 def
+/Weight (Medium) def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end def
+/_glyph (X ) def
+/gx
+{
+ 1 exch{
+ dup 16 ( ) cvrs _glyph exch 1 exch putinterval 1 index exch
+ _glyph cvn put
+ }for
+}def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 { 1 index exch /.notdef put } for
+30 255 gx
+def
+/FontBBox [ 0 0 0 0 ] def
+currentdict end
+dup /Private 8 dict dup begin
+/RD{string currentfile exch readhexstring pop}def
+/ND{def}def
+/NP{put}def
+/BlueValues[ -250 0 2200 2200] def
+/MinFeature { 16 16} def
+/password 5839 def
+/Subrs 43 array
+ND
+2 index /CharStrings 256 dict dup begin
+/.notdef 8 RD 24ECBD053ECAD3D7 ND
+/X20 10 RD 24ECBD053EB6173DD80E ND
+/X28 78 RD 24ECBD053EB65CD9CDE874A7F38B4A781E7BDF63FFF2EBEBCB6221F130F6FF143AEC5FE83962C7B17A6D73C4DD71A967907650498833EC73D646FABFAC0D375757024138DD026197664EC00805D1 ND
+/X29 80 RD 24ECBD053EB65CD9CD86726E6BEBBCCB42E0F15081D05B859D7B51CA3E2C21ED91C7320907C85E4807405A42026A12D498A3C0C1961B64C308069C1F531FBA6C6C9740F53A32249E696D23F9458FD4CC ND
+/X2E 20 RD 24ECBD053EB6173D373802B30AFE214CD0757862 ND
+/X2F 26 RD 24ECBD053EB6173DAE26C78E57E2B3D4EF1319782DB818F16392 ND
+/X30 167 RD 24ECBD053EB9E88A1BEF04DD76C65F9749F66851D8FAE5FCB5950992663239BD1FC0DEB1CEC611A212B83B08967A831E3E3EB3606AF2CF6FC70A2DC696B44BCF28989BE2337A230C38A86C0BD14EE3B65BDA8142BD60D02ADA557B0DA9948E01E9ED50D010014EF8CFAC1EFE62B14928D192B609E17164C883E3686D
+BFBB800CF745B41A5503D9F807F3630268F00B1AC8CF5552B5CC27A043362EC5B26A048CB5835E004D0815 ND
+/X31 53 RD 24ECBD053EB9E88A56A329F78E9AE27980C4899C504D886A5A058AD599FECE94FCD87DC0E3736CDC3AF4A7ADF878DF8254220EF2FB ND
+/X39 230 RD 24ECBD053EB9E88A6C9E464F95DE6D18000A0166EFC0B9F7EF6F362C66D3D97CC81056F6E96D4EB52D7EC25EE8B678C84AD80F3A46CCBB47FBAD7A469604634A8670C9BA024FA1E2F98EDBD63DE19892FE17572DEE745135D5CE6EB2E4614BBBC4D83B1C27CC77281AE87F2A7EB0B7333812804F994284E0EF1CB3AA
+54AB29C90414E46884954BCA7ADE9DD642E7B12A417CD7C03A6A99E551F87950DF4967BA0C852B8A98F36050A725850C77C3B9C0E50BF9AA0C9B0D3B3EE82EFA8671A7A7386257324EEA5992AD2D1A95251658FAF25AEE3E4DEA8A1092ACEE918DDF077FB57C37C77370 ND
+/X3A 34 RD 24ECBD053EB6173D343A8D5DB088CD681C5F0C141072982859A0101E1618055BB19B ND
+/X41 71 RD 24ECBD053EB8753CA64BD936744BE88AD6C79BBB010B98ACB09FC652ACE153E21F1F0A4E91D50D2AB5E920D378858E3CF69D6A8B4F7F43D50EB778C8104ED4968E4B05E9EE8145 ND
+/X44 146 RD 24ECBD053EB83C362F50400EDD3F07BFFCCEAA6FB6F4007776F79161EC0A78EBFF29A98D6160CB7A628E1F08A767E799C3D9F109EE1045D8369FC0BEE7A2BFEE434418B62232FCAF63BC15BBD2B95F18A0211EA2AAC84C1F3AA1A252012DC6EC639E2930D4292DA4A3303EDD4BB244D945D42A94173268EAAC02F9E8
+284CC203BA011C30B48115F3F9D9171AACF0834305E2 ND
+/X49 22 RD 24ECBD053EB6173D39DCA636E0178932CFA3ABC7B0E9 ND
+/X4E 42 RD 24ECBD053EB83C36203B440ED0FBB280B971B53B160C5894F2A7D80E5E8B027572964CD4D23005A5A4F2 ND
+/X4F 164 RD 24ECBD053EB8C4E83DDAD8528B86E07E0D4FB7F50DC8EE9258D4B15DE6C0D478D9D7EB0115E53A91282EE8040AAB41F39F4197C46438F5074D0AC45C6C0C77FCD89B82D1EC34254D848A4DD7681577EFF938C212EC03F206CF765EEC5D1B693A0BBF12263D58032D58A2E7EBD1BABC4DA8B33014AB0BD16CA300B8BA
+9B27CA968CDDA57B556F118B5FBA2EA29B455F76EA8D32A84077D3FAB7B775615D4F38288F7C71D0 ND
+/X50 117 RD 24ECBD053EB8753CF7BBA03E65A3402D3A85D646DC6D715914CB700A197A0E3F0389F9BB271B61458B6859E36925ECAB51E09D8744E5D65F23CD33CBF3352650B55BEDAA2CD3B3ED0CCE3361EEF3A8FC88CDA028F33BDB72619817833EB3501EB938FCD17981E3B86D416E8EE5A02E349C88FA5226 ND
+/X52 164 RD 24ECBD053EB83C362DBFFCE0EEB3471D031DD918084C741E24FA3D81E3A58FEEF4055EF2B998F39A871B8265AED60143E2A851701054EB0C7C5F762EE77B5B74DBB86F6D9DD014A0A309569F91C5BE1CB61895B67E7B2D4B1B335BDF483646153B4253EEEF717CEBBAE67E6F28BC28534A2937A11A8D31635DC2C810
+604844FBD753DDA4A4A0E58167C2D7E76C2C7AE12087EF422662C034BA1A2E54AB538E7E0BE9B1C7 ND
+/X53 253 RD 24ECBD053EB8753C9681691D57FC64CA8F0A762D55CA04AFF8371876336FEEAA8D403EDDCFD4FB62384D5EA33FE7FECD2010E28E345C9B288FADD7A118BB1395AFED9E8016D5EFC47C51940A913ECC6D51C828140CCE7DF57AECFE8E83A7B8FDD60405D1FD4AF910BBF55538FB38C86BA2F25B8C4715B757E04C6F8B
+1E5DFCE6FBB8687124D572FF3817290D6E448C528391D88F14F18B33EECBE0837018F7C6AC88AF169AFFFB76D342E8B46DB6054FDB96CFF4A7CFED7B2F68F24F4E50CBAFBBB11D114CC56FD8CC494E91D651592AF87EB984FF0ABB3E4AFEE8B5B10274780C42DEA060C33D99AAE7C1D624B71A0837802FBE283DCFEEAB
+B27586D1 ND
+/X5F 24 RD 24ECBD053EB9E88AD253D3EAE0459F3817517DFD606D85EE ND
+/X61 263 RD 24ECBD053EB9E88A56826F5B49B0599111096F51CB6C2CBFE667712A5F3D110FABDE7AEEDFBBE4A93D2BDF99FA1011AD9284007E329FE01AF3596935CB0D3FBC91BE6796B2A9F7F16522E8A0AA83C67F14BE6E36FB78901F566A9899BB1AD84562CEDD31981803CF83502843E5B3F99339ABD21EA170A28049F9CB87
+22EE4740F00920AF319872F16BE70B64988AD280CD06F9D3C5B2FFD51623987582A340E702569C74C74B1406E5EA9EAB9262E385BCE7F49C61E39E4F1F9AFC1BE0BB3F0F5B9E74CB03F12E85D68A27D9D6172A791D5333CE6B5C778B12345252F729DFA3B305416659BB56930A5137B14DC7DD47C71DE2612D76FCD305
+F958A2412FF9F3FC9B1732208BF3 ND
+/X62 144 RD 24ECBD053EB9E88A593045882424D8E63A815FDA8DB00B2B24FA6D9604BB682D953C77C8899F1161DA9D681707E6D6B6D59E92C76A41110104DD20598EC4664A1978D3DEE29F5C23A92F65B46964EEC234926ECFD9B2345C7F11A74EC2C56DE495BA4D789DDC536F231D65E3C09F12822ED8603261A8F28841E08095
+9C2AE107F11CDAA695E5D69AF5BF858633B81E79 ND
+/X63 142 RD 24ECBD053EB9A075A9F2BCB69998874641BA3A233675A8BF9DFC48C3B75D1C55C5419F99904AC748AF1DA09E1AD44D21B5A4E0B0B361DA2CCEFA87FA70263A69939B9293FD51ECD883A3667C6209DACB22C4BA332E5F41AD43619F68E1BB5D24705E4B2B4049850E99286C3D861C2ED879B78C47D704A3C28F3E7AB2
+81D022D20B55C7045060335B2BCF2ACDE01D ND
+/X65 153 RD 24ECBD053EB9E88A5693AF17E5A520705FE586FB75BEB091B7F145A1BB26E544ADD999DA9C4CAA1F1B36520932E4C800E6EEF1EDB04AB101B30EB7B9311279AE19A29B7FB9137B4D484B74A3FFE861D3A56D1EF06444F30D70FE59673D32ACFDC5AE48569E731E4C6D8DF41CC74177877120EE06F134DAE30FA66E62
+C7B6CB1D93FF3F855FBA0EDA6AB6C716F6373414DC836C9F8DEBD9BAEE ND
+/X66 88 RD 24ECBD053EB6173D33E26F78630231A9FD7280B4AF739B52782F240ED3384F449ABFE9B1D2CAFEB339FD57627BA94AFC57F08C63C8998605D253AB6185D51E7860E40CF5F2C40D05B11B764F5790C35BBAEC891BA11394D9 ND
+/X67 207 RD 24ECBD053EB9E88A13C5553D99F2849FEADA7C0DE5895CA89E87370D96C980D7A8BD3B982B4AAD7B68491434FE9133FAA18A7FF06A4C4461419E64A26B1A77AB27C376C9841C03A883E717809FCD4ABF352A62F3049AC814C6450341ED5E71F26C55261D2CBDA0A49BF719BE2F177A19B104A7CA793328C8646B4CB0
+485374D1E84DCF75AB0703156EC4E7EC393B06277D92752FAF4797E886FAF9C43C3D72690D328EB56ACA4E6D23DF9110A17E6A5EF8F64809728DD87AD68062C64A476F827A8A2EFC65CE8AD3B8996ECF55542B ND
+/X69 36 RD 24ECBD053EB6CF82BD8317C7C03794B79BD6DB6A891C17F5F2C2E94489F741DC5108FEC1 ND
+/X6A 83 RD 24ECBD053EB6CF82BC55C3923B211F2534EC232F9FA32596AA1EB6219A0CAB772FC6604332BE64B3D0218F13BD5154F363241859C337417AC81DAF1645FF44E3600EDAC066C0F6F95AB5F7E6AE1194D2523BBF ND
+/X6C 22 RD 24ECBD053EB6CF82BBC8A00FD5B3C3BC5CD8FF89782B ND
+/X6D 159 RD 24ECBD053EB88F259F152670030CE9285C9DCCF687F4A9BB8016395C22F10139A2D1364DFBFE5A44CCCE173831E2FBDC007B2BF99461DA30B8B15B086AB111CE33A9E29D40D8B71DB25E3714329E2C7C29DD26D3B4AACE7B15D35F190D0BABFA7462CA01434A1F09F15FF1C5AEB2ED76547CBBA46ECC7E2C659209AE
+84A649BB37844C9F2F194329F0BA0B05D2338AFE4778648A7F4E708A26642C9EFC4DBE ND
+/X6E 102 RD 24ECBD053EB9E88A6331D2C7297CD097F631B7BF9575A433833FB0038EC6E5B15DCC497CC74B92CE032BEF587A61DB1733DDF08E4C3F6D32A9E7B6F8932791A8C2611945247C92EE373B1A533C34958B09B59098C7464047A20A9F809DB3DA276EBDCEB83A42 ND
+/X6F 141 RD 24ECBD053EB9E88A020752C5C98FDCBBAB9EF90A06696B41A7625CDF93F224596EEF9E92BE93E61DF3DAFF86DD7B8E4BF1861D44238515248D96118073A63C2671AB30499A333B8314A444B66C9D6924B15AAA54ADC848D8A24BD851DB816D5D6643FF372597F1A9529A5106EB5CC22D7EF02076C5E6030B0A680FE2
+A822CF5500EE68583614AA673D96D603E5 ND
+/X70 159 RD 24ECBD053EB9E88A63DC56919C2A7C393E4E31C69A482C1C06E88174525FD085735A5F3CEEB5065143B85C379D2D9DBE6508A1D22F5EB91C8B9C9C704D70D197FF0BCF00BD01AC6BC0D20B12C61D1860FA449B2503BA550BBB6E9CC5BF6ECC5772F2B1A93912DC9A2C6F8CCF87DE2212A4B196D8632BB34CEF411E94
+BF7641862399513CF976EDC773121DF431DF18A23FCD214936A25F216C618CE8AF964F ND
+/X72 76 RD 24ECBD053EB65CD9F6B0DA68B6CDEC19A39DB1647C794B2A552609141A5AE4D4C737B64A93E6D0704F0AE135A3F68C6F08AF5B9D3322DEC636077489ED0E06BBB75028F4827739BC24563847 ND
+/X73 239 RD 24ECBD053EB9A075FB0D363C5DAD5072141948E7E1754E0FA3AC319C5D112D34313856F8BB6868A3DAF2E607F4852D6A068D2F18988BDD35DF74C9670E679E0CBDA898B51F9637EDC00B1E2B3ABA53F21E13B46676BCFD4C35B8F31275833367A190FF9C05256035667E88E27A5FE706D86790585FE88405E89D71B6
+0383ACB267E7E27BCA33BBC8FB340BE8A976C6F2A6451ACCBF24BFEED8A7C6D46AC5AC8FED699342ADAD075F61D9747255E7B8DA0815F167A768C00630A03A443D79B647191A56139DD6BAF7E5F1B201C42D3AA4E6BE2FC3D3230B184464EAC1D2729E18E0886728BF4126E78E65E9614830D4 ND
+/X74 102 RD 24ECBD053EB6173D26ED46B8FA108E1533537E23559064B8DD513D9EF66DF60B8B452B065536F32266060FF25E41DC46A6779AE37613D2AA0A33C0C33484C74444B15F681F94F0F1C03863C711E3F48F06CECF2F2871C2C179A237A38EC95303826C401249F2 ND
+/X75 110 RD 24ECBD053EB9E88A5682B5185232B5EF6CCD16B2077490550A465721BE2916F30813C685A1B48F49484D13136E8DB257956E21B052CD5EDA3389854F70D0476C9E129A81FF84F4611FB9A095F84C374D6CB730B2B7A6C42872CC67476D3DE34C5FCCEED35B0308E299F6DD53DDAD ND
+/X76 53 RD 24ECBD053EB9A075A6146FCBBF0438B8CCE14C92BBD9F8854D3F46F8D1DEBD8FFF806C3248587C4448EED1BB3F5DF8F73DF68FC4DC ND
+end
+end
+put
+put
+dup /FontName get exch definefont pop
+%%EndResource
+
+/Deneba_CanvasCustomColors where{/Deneba_CanvasCustomColors get/initialize get exec}if
+/Deneba_CanvasGraphics where{/Deneba_CanvasGraphics get/initialize get exec}if
+_encodArr 0
+[
+39/quotesingle 96/grave
+128/bullet/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/bullet/bullet
+/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark
+/scaron
+/guilsinglright/oe/bullet/bullet/Ydieresis
+/bullet/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
+/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis
+/Aring
+/AE/Ccedilla/Egrave/Eacute/Egrave/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+/agrave/aacute/acircumflex/atilde/adieresis
+/aring
+/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
+/igrave
+/iacute
+/icircumflex
+/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+] put
+mark /___FN4-1 /TimesNewRoman4-1 -1 rf
+mark /___FN1-1 /Arial1-1 -1 rf
+mark /___FN1-3 /Arial1-3 -1 rf
+mark /___FN1 /Arial1 -1 rf
+1 id
+1 fd
+0 fm
+%%BeginSetup
+userdict /canvassave save put
+%%EndSetup
+1. 1. sp
+0. pg
+1. fg
+cd
+F setoverprint
+0 fm
+0 lj
+2 lc
+0 592 translate 1 -1 scale%%BeginObject: RoundRect
+0. pg
+1 lc
+1 lj
+0.39843 0.60156 0.80078 f3
+38.5 342.5 589.5 559. 12.5 12.5 rr
+db
+%%EndObject
+%%BeginObject: RoundRect
+1. 1. 0.80078 f3
+277.5 363.5 560. 440. 12.5 12.5 rr
+db
+%%EndObject
+%%BeginObject: Cube
+0.91992 fg
+%%NumPoints: 4
+45.43176 32.52929 mt
+293. lh
+103.04675 lv
+45.43176 32.52929 li
+cp
+df
+%%NumPoints: 4
+28. 45.4812 mt
+275.56408 lh
+116. lv
+28. lh
+df
+%%NumPoints: 4
+45.43176 32.52929 mt
+28. 45.4812 li
+116. lv
+45.43176 103.04675 li
+df
+%%NumPoints: 4
+293. 32.52929 mt
+275.56408 45.4812 li
+116. lv
+293. 103.04675 li
+df
+%%NumPoints: 4
+45.43176 32.52929 mt
+293. lh
+275.56408 45.4812 li
+28. lh
+df
+%%NumPoints: 4
+45.43176 103.04675 mt
+293. lh
+275.56408 116. li
+28. lh
+df
+45.43176 32.52929 mt
+28. 45.4812 li
+ds
+275.56408 116. mt
+293. 103.04675 li
+ds
+293. 103.04675 mt
+32.52929 lv
+ds
+293. 32.52929 mt
+45.43176 lh
+ds
+28. 45.4812 mt
+275.56408 lh
+ds
+275.56408 45.4812 mt
+116. lv
+ds
+275.56408 116. mt
+28. lh
+ds
+28. 116. mt
+45.4812 lv
+ds
+275.56408 45.4812 mt
+293. 32.52929 li
+ds
+%%EndObject
+%%BeginObject: Rectangle
+2 lc
+0 lj
+1. fg
+28.00012 44. 275. 117. rp
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+1 lc
+1 lj
+445. 292. mt
+tb
+72 fts
+/___FN4-1 1.05505 0.91259 mf
+0. 1. ta
+446.125 292. mt
+(CLIENT) 6 0 293. tf
+445. 292. mt
+(CLIENT) 6 0 293. tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Line
+0. pg
+2. 2. sp
+%%NumPoints: 4
+82. 190. mt
+87.20886 175.68701 li
+76.79101 lh
+82. 190. li
+cp
+dp
+82. 122. mt
+175.68701 lv
+ds
+%%EndObject
+%%BeginObject: Group
+%%BeginObject: RoundRect
+1. 1. sp
+0.80078 1. 1. f3
+41. 190.42187 154.99987 251.578 12.5 12.5 rr
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+189.125 814. 594.875 934. rp
+df
+0. pg
+1. 1. sp
+309. 866. mt
+tb
+72 fts
+/___FN4-1 1.05517 0.91271 mf
+0. 0. ta
+310.125 866. mt
+(ORB) 3 0 163. tf
+309. 866. mt
+(ORB) 3 0 163. tf
+te
+255. 922.69787 mt
+tb
+52 fts
+/___FN4-1 1.05517 0.91271 mf
+255.8125 922.69787 mt
+(INTERFACE) 9 0 328. tf
+255. 922.69787 mt
+(INTERFACE) 9 0 328. tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%EndGroup
+%%BeginObject: RoundRect
+0. pg
+1. 1. sp
+1. 1. 0.80078 f3
+55. 362. 250. 527. 12.5 12.5 rr
+db
+%%EndObject
+%%BeginObject: Line
+2. 2. sp
+%%NumPoints: 4
+117. 346. mt
+122.20886 331.68701 li
+111.79101 lh
+117. 346. li
+cp
+dp
+117. 254. mt
+331.68701 lv
+ds
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+253. 1568. mt
+tb
+72 fts
+/___FN1-3 sf
+4. 0. ta
+254.125 1568. mt
+(ORBInitRef) 10 0 384. tf
+253. 1568. mt
+(ORBInitRef) 10 0 384. tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+1169. 1568. mt
+tb
+72 fts
+/___FN1-3 sf
+8. 0. ta
+1170.125 1568. mt
+(ORBDefaultInitRef) 17 0 628. tf
+1169. 1568. mt
+(ORBDefaultInitRef) 17 0 628. tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: RoundRect
+0. pg
+1. 1. sp
+1. fg
+83. 406. 232. 514. 12.5 12.5 rr
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+385. 1716. mt
+tb
+72 fts
+/___FN1 sf
+0. -0.46667 ta
+(ObjectID : IOR) 16 4 499.53344 tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Oval
+0. pg
+1. 1. sp
+1. 0. 0. f3
+3. 3. 125. 463. ep
+db
+%%EndObject
+%%BeginObject: Oval
+3. 3. 125. 492. ep
+db
+%%EndObject
+%%BeginObject: Oval
+3. 3. 205. 492. ep
+db
+%%EndObject
+%%BeginObject: Oval
+3. 3. 205. 443. ep
+db
+%%EndObject
+%%BeginObject: Oval
+1. 0. 0.19921 f3
+3. 3. 125. 445. ep
+db
+%%EndObject
+%%BeginObject: Oval
+1. 0. 0. f3
+3. 3. 205. 463. ep
+db
+%%EndObject
+%%BeginObject: Line
+3. 3. sp
+178. 444. mt
+501. lv
+ds
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+1. pg
+1. 1. sp
+1381. 2010. mt
+tb
+96 fts
+/___FN4-1 1.05517 1. mf
+0. 0. ta
+1382.5 2010. mt
+(ORB CORE) 9 2 556. tf
+1381. 2010. mt
+(ORB CORE) 9 2 556. tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: RoundRect
+0. pg
+1. 1. sp
+1. fg
+301.5 402. 553. 432. 12.5 12.5 rr
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+1261. 1696. mt
+tb
+72 fts
+/___FN1 sf
+0. -0.11999 ta
+(corbaloc::merengue:99999) 24 0 883.88012 tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Group
+%%BeginObject: Polygon
+0. pg
+0.01953 0.01953 sp
+0. fg
+%%NumPoints: 5
+505.15539 95.68762 mt
+571.55468 lh
+99.3507 lv
+505.15539 lh
+95.68762 lv
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+1. fg
+%%NumPoints: 30
+482.80908 99.03442 mt
+598.17089 lh
+598.52954 99.06823 li
+598.87133 99.18676 li
+599.34106 99.48327 li
+599.68273 99.87304 li
+599.92199 100.33056 li
+599.98168 100.69482 li
+599.9989 132.93872 li
+599.94763 133.32836 li
+599.77673 133.82824 li
+599.46069 134.23486 li
+599.00793 134.54833 li
+598.52954 134.73474 li
+598.17089 134.76013 li
+482.80908 lh
+482.4674 134.73474 li
+482.09155 134.62463 li
+481.66442 134.37048 li
+481.28857 133.98071 li
+481.05798 133.50634 li
+480.98974 133.14196 li
+100.85583 lv
+480.99816 100.5 li
+481.12634 100.15258 li
+481.4082 99.70361 li
+481.80114 99.3562 li
+482.27099 99.11901 li
+482.61267 99.05126 li
+482.80908 99.03442 li
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+%%NumPoints: 33
+499.98718 35.25036 mt
+575.24865 lh
+575.65014 35.30957 li
+576.00036 35.47058 li
+576.36767 35.69934 li
+576.85461 36.14831 li
+577.09375 36.52111 li
+577.27307 36.89379 li
+577.38415 37.28356 li
+579.21203 93.39294 li
+579.13525 93.77416 li
+579.04125 94.16381 li
+578.81921 94.52819 li
+578.40917 95.01098 li
+578.05895 95.26513 li
+577.69165 95.46008 li
+577.28161 95.57861 li
+498.10803 lh
+497.67236 95.53625 li
+497.24523 95.35839 li
+496.89501 95.10424 li
+496.42529 94.62133 li
+496.19458 94.25708 li
+496.05798 93.88427 li
+495.95544 93.39294 li
+497.8175 37.43603 li
+497.92004 37.08032 li
+498.22753 36.56347 li
+498.50085 36.19067 li
+498.82543 35.82641 li
+499.1842 35.54687 li
+499.5686 35.3435 li
+499.98718 35.25036 li
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+%%NumPoints: 30
+496.14343 106.89721 mt
+585.69067 lh
+586.1947 106.94799 li
+586.68151 107.05822 li
+587.16845 107.20214 li
+587.62976 107.34619 li
+588.04833 107.52416 li
+588.50964 107.76135 li
+597.25671 131.54113 li
+596.91503 131.74438 li
+596.41967 131.99011 li
+595.96691 132.15954 li
+595.5227 132.30358 li
+594.97607 132.43066 li
+594.40368 132.43908 li
+487.46447 lh
+486.84094 132.43066 li
+486.32849 132.30358 li
+485.84155 132.15954 li
+485.38879 131.99011 li
+485.03857 131.83764 li
+484.69689 131.6173 li
+493.27319 107.80371 li
+493.68322 107.60876 li
+494.0249 107.44787 li
+494.46057 107.28686 li
+494.92187 107.12597 li
+495.41723 106.99035 li
+495.89562 106.93103 li
+496.14343 106.89721 li
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+0.67187 fg
+%%NumPoints: 19
+486.90917 138.74951 mt
+594.33911 lh
+597.38854 137.57275 li
+597.29455 131.45166 li
+596.96142 131.68017 li
+596.44885 131.92578 li
+596.0133 132.0697 li
+595.54345 132.23046 li
+595.01391 132.34057 li
+594.44152 132.36596 li
+487.49865 lh
+486.90917 132.30676 li
+486.36254 132.17126 li
+485.89282 131.9934 li
+485.45715 131.79028 li
+485.11547 131.57861 li
+484.73962 131.40087 li
+484.65429 137.31872 li
+486.90917 138.74951 li
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+%%NumPoints: 25
+510.14392 43.50292 mt
+565.00097 lh
+565.46215 43.59606 li
+565.88073 43.81628 li
+566.22241 44.16369 li
+566.50427 44.55334 li
+566.63244 44.98547 li
+567.96496 86.64062 li
+567.88818 87.08959 li
+567.69165 87.53857 li
+567.38415 87.91137 li
+566.99975 88.17395 li
+566.52136 88.28405 li
+508.78576 lh
+508.30737 88.2163 li
+507.93151 87.93676 li
+507.58129 87.60632 li
+507.3507 87.19116 li
+507.23107 86.75915 li
+508.62341 45.11254 li
+508.72595 44.71435 li
+508.97363 44.29919 li
+509.3153 43.90954 li
+509.71679 43.62145 li
+510.14392 43.50292 li
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+0. fg
+%%NumPoints: 25
+512.48449 45.03649 mt
+563.31787 lh
+563.75341 45.11279 li
+564.13793 45.35839 li
+564.56494 45.78198 li
+564.73583 46.1632 li
+564.8468 46.53601 li
+566.05126 84.34533 li
+565.98291 84.77746 li
+565.79504 85.15869 li
+565.41918 85.57373 li
+565.05187 85.78564 li
+564.60766 85.84484 li
+511.21166 lh
+510.75048 85.76855 li
+510.40026 85.52294 li
+510.00732 85.07397 li
+509.83642 84.70971 li
+509.78527 84.34533 li
+511.01525 46.53601 li
+511.13488 46.1632 li
+511.35693 45.78198 li
+511.69006 45.42614 li
+512.06591 45.17199 li
+512.48449 45.03649 li
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+0. 1. 1. f3
+%%NumPoints: 5
+512.89453 46.80737 mt
+562.95922 lh
+563.55725 84.32165 li
+511.97204 lh
+512.89453 46.80737 li
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+%%NumPoints: 5
+515.13256 51.04382 mt
+529.50927 lh
+63.84948 lv
+515.13256 lh
+51.04382 lv
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+0. 0. 1. f3
+%%NumPoints: 5
+515.13256 50.98449 mt
+529.50927 lh
+52.70751 lv
+515.13256 lh
+50.98449 lv
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+%%NumPoints: 5
+513.66333 47.55297 mt
+562.23254 lh
+49.47937 lv
+513.66333 lh
+47.55297 lv
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+0. 1. 1. f3
+%%NumPoints: 5
+524.37524 61.61804 mt
+541.82629 lh
+74.61108 lv
+524.37524 lh
+61.61804 lv
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+0. 0. 1. f3
+%%NumPoints: 5
+524.37524 61.86376 mt
+541.82629 lh
+63.67138 lv
+524.37524 lh
+61.86376 lv
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+0. 1. 1. f3
+%%NumPoints: 5
+557.91186 67.91345 mt
+537.64111 lh
+83.37145 lv
+557.91186 lh
+67.91345 lv
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+0. 0. 1. f3
+%%NumPoints: 5
+557.91186 68.06591 mt
+537.64111 lh
+69.79736 lv
+557.91186 lh
+68.06591 lv
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+%%NumPoints: 3
+548.47265 102.07617 mt
+588.3645 lh
+105.16333 lv
+ds
+%%EndObject
+%%BeginObject: Polygon
+0. fg
+%%NumPoints: 5
+494.18725 125.75341 mt
+587.71301 lh
+582.24609 109.21032 li
+499.432 lh
+494.18725 125.75341 li
+cp
+db
+%%EndObject
+%%BeginObject: Polygon
+1. fg
+%%NumPoints: 5
+496.69873 124.83691 mt
+584.29809 lh
+580.17224 110.31176 li
+501.18322 lh
+496.69873 124.83691 li
+cp
+db
+%%EndObject
+%%BeginObject: Line
+500.19238 112.98083 mt
+581.8208 112.97534 li
+ds
+%%EndObject
+%%BeginObject: Line
+583.32458 117.03088 mt
+498.91064 117.02526 li
+ds
+%%EndObject
+%%BeginObject: Line
+497.69812 121.41137 mt
+584.60546 121.40576 li
+ds
+%%EndObject
+%%BeginObject: Line
+501.76416 124.84289 mt
+505.3258 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+506.33422 124.84289 mt
+509.83605 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+510.8872 124.84289 mt
+513.3811 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+515.4486 124.84289 mt
+517.90844 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+519.98449 124.84289 mt
+521.42773 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+524.53747 124.84289 mt
+525.93811 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+529.07336 124.84289 mt
+529.71362 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+533.62634 124.84289 mt
+533.98474 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+538.17932 124.84289 mt
+538.17895 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+542.72375 124.84289 mt
+542.28771 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+547.27673 124.84289 mt
+546.55871 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+551.82971 124.84289 mt
+550.79565 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+556.3656 124.84289 mt
+555.06677 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+560.91857 124.84289 mt
+559.3208 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+565.46289 124.84289 mt
+563.10498 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+570.01586 124.84289 mt
+567.1112 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+574.58593 124.84289 mt
+571.39086 110.30627 li
+ds
+%%EndObject
+%%BeginObject: Line
+579.10473 124.84289 mt
+575.87548 110.30627 li
+ds
+%%EndObject
+%%EndGroup
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+1037. 764. mt
+tb
+96 fts
+/___FN4-1 1.05505 0.91259 mf
+0. -8.25 ta
+1038.5 764. mt
+(MULTICAST) 9 0 523.75 tf
+1037. 764. mt
+(MULTICAST) 9 0 523.75 tf
+te
+1247. 852. mt
+tb
+72 fts
+/___FN4-1 1.05505 0.91259 mf
+4. 0. ta
+1248.125 852. mt
+(TO) 2 0 108. tf
+1247. 852. mt
+(TO) 2 0 108. tf
+te
+1131. 940. mt
+tb
+96 fts
+/___FN4-1 1.05505 0.91259 mf
+1132.5 940. mt
+(S) ts
+1131. 940. mt
+(S) ts
+te
+1185.83325 940. mt
+tb
+72 fts
+/___FN4-1 1.05505 0.91259 mf
+0. -0.16674 ta
+1186.95825 940. mt
+(ERVICE) 6 0 289. tf
+1185.83325 940. mt
+(ERVICE) 6 0 289. tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Line
+0. pg
+5. 5. sp
+199.99218 159.99218 24. 24. 244. 216. wd
+dp
+170. 216. mt
+220. lh
+ds
+%%EndObject
+%%BeginObject: Line
+2. 2. sp
+154.99609 114.99609 15. 15. 470. 105. wd
+dp
+334.99609 294.99609 15. 15. 404. 171. wd
+dp
+414.60656 160.39331 mt
+459.39331 115.60656 li
+ds
+%%EndObject
+%%BeginObject: Line
+3. 3. sp
+199.99218 159.99218 18. 18. 500. 198. wd
+dp
+415. 198. mt
+482. lh
+ds
+%%EndObject
+%%BeginObject: Line
+2. 2. sp
+244.99609 204.99609 15. 15. 470. 288. wd
+dp
+403.99987 222. mt
+459.39331 277.39331 li
+ds
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+165. 412. mt
+tb
+72 fts
+/___FN1 sf
+0. -0.07153 ta
+(resolve_initial_references \(\)) 29 1 883.92858 tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Line
+0. pg
+2. 2. sp
+219.36328 179.36328 15. 15. 408. 342. wd
+dp
+152. 252. mt
+393.84899 337.02502 li
+ds
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+2413. 212. mt
+tb
+72 fts
+/___FN1 sf
+0. -1.09094 ta
+(IIOP Agent /) 12 2 378.90917 tf
+te
+2413. 296. mt
+tb
+0. -0.30773 ta
+(Naming Service) 14 1 503.6925 tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Oval
+0. pg
+1. 1. sp
+0. 1. 0.60156 f3
+9. 11.5 61. 153.5 ep
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+229. 636. mt
+tb
+56 fts
+/___FN1-1 sf
+229.875 636. mt
+(1) ts
+229. 636. mt
+(1) ts
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Oval
+0. pg
+1. 1. sp
+9. 11.5 191. 195. ep
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+749. 804. mt
+tb
+56 fts
+/___FN1-1 sf
+749.875 804. mt
+(4) ts
+749. 804. mt
+(4) ts
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Oval
+0. pg
+1. 1. sp
+9. 11.5 243. 300. ep
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+957. 1224. mt
+tb
+56 fts
+/___FN1-1 sf
+957.875 1224. mt
+(3) ts
+957. 1224. mt
+(3) ts
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Oval
+0. pg
+1. 1. sp
+9. 11.5 97. 291. ep
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+373. 1184. mt
+tb
+56 fts
+/___FN1-1 sf
+373.875 1184. mt
+(2) ts
+373. 1184. mt
+(2) ts
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: RoundRect
+0. pg
+3. 3. sp
+1. fg
+596.5 151. 745.5 277. 12.5 12.5 rr
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+2425. 732. mt
+tb
+72 fts
+/___FN1 sf
+0. -0.46667 ta
+(ObjectID : IOR) 16 4 499.53344 tf
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+%%BeginObject: Line
+0. pg
+3. 3. sp
+689. 191.5 mt
+246. lv
+ds
+%%EndObject
+%%BeginObject: Oval
+1. 1. sp
+1. 0. 0.19921 f3
+3. 3. 634. 203. ep
+db
+%%EndObject
+%%BeginObject: Oval
+3. 3. 634. 222. ep
+db
+%%EndObject
+%%BeginObject: Oval
+3. 3. 635. 257. ep
+db
+%%EndObject
+%%BeginObject: Oval
+3. 3. 715. 201. ep
+db
+%%EndObject
+%%BeginObject: Oval
+3. 3. 715. 222. ep
+db
+%%EndObject
+%%BeginObject: Oval
+3. 3. 716. 259. ep
+db
+%%EndObject
+%%BeginObject: Line
+3. 3. sp
+619. 117. mt
+669. lh
+ds
+%%EndObject
+%%BeginObject: Line
+288.20312 248.20312 18. 18. 672. 149. wd
+dp
+671. 117. mt
+671.43774 131.00878 li
+ds
+%%EndObject
+%%BeginObject: Oval
+1. 1. sp
+0. 1. 0.60156 f3
+9. 11.5 693. 113. ep
+db
+%%EndObject
+%%BeginObject: Text
+cd
+gs
+ .25 .25 scale
+0. pg
+1. 1. sp
+2757. 472. mt
+tb
+56 fts
+/___FN1-1 sf
+2757.875 472. mt
+(5) ts
+2757. 472. mt
+(5) ts
+te
+gr
+1. 1. sp
+1 lc
+1 lj
+%%EndObject
+userdict /canvassave get restore
+%%Trailer
+/Deneba_CanvasGraphics where{/Deneba_CanvasGraphics get/terminate get exec}if
+/Deneba_CanvasCustomColors where{/Deneba_CanvasCustomColors get/terminate get exec}if
+showpage
+%%Trailer
+%%EOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TAO/docs/interop-naming.png b/TAO/docs/interop-naming.png
new file mode 100644
index 00000000000..d595d9922de
--- /dev/null
+++ b/TAO/docs/interop-naming.png
Binary files differ
diff --git a/TAO/docs/redball.gif b/TAO/docs/redball.gif
new file mode 100644
index 00000000000..41b0daed865
--- /dev/null
+++ b/TAO/docs/redball.gif
Binary files differ
diff --git a/TAO/docs/space.gif b/TAO/docs/space.gif
new file mode 100644
index 00000000000..170fe82b656
--- /dev/null
+++ b/TAO/docs/space.gif
Binary files differ